R Markdown Projects
Modeling, Cross Validation, & Machine Learning
Linear & Logistic Regression Modeling Using Machine learning
Approaches
A Blind Taste Test |
[Report]
Predicting sommelier quality rankings of wine and wine type (red/white)
utilizing chemical composition alone [click for more details]
- Real world data; medium data set (approx. 6,500 observations)
- Regularized linear & logistic regression prediction models,
support vector machine (SVM) regression and classification models
- Coefficient path analysis, hyperparameter tuning, and optimal cut
off probability analysis for optimized accuracy and specificity.
- Analysis goals:
- Identifying the best possible prediction model for sommelier wine
quality ranking based on chemical composition
- Creating a white vs red prediction model for blend wines that do not
neatly fall into either category
Hold That Plane! |
[Report]
An analisis of global flight delay data and prediction model creation to
reduce delays and increase live prediction capabilities [click for more
details]
- Synthetic data with forced missing values. Medium data set (over
3,500 observations)
- Multiple Imputation by Chained Equations, Ruben’s rules, Recursive
feature elimination, Principal Component Analysis, k-Means
Clustering
- Forward elimination model creation, cross validation, Receiver
Operating Characteristic (ROC) comparison
- Analysis goals:
- Identifying the variables with greatest impact on overall flight
delay for subsequent mitigation and preventative efforts
- Live flight delay prediction based on available flight data prior to
landing (predicting total delay time before flights depart)
Unsupervised Learning Algorithms and Predictive modeling
Big Back Behavior ]
[Report]
Predicting obesity rankings based on behavioral survey results [click
for more details]
- Real world data; medium data set (approx 2,200 observations)
- CART regression prediction models, CART classification prediction
models, Bootstrap BAGGING regression prediction models, & Bootstrap
BAGGING classification prediction models
- Variable importance analysis, hyperparameter tuning, model pruning,
ROC curve analysis & optimal cutoff identification
- Analysis goals:
- Develop overweight/obesity prediction model utilizing patient
lifestyle and behavioral information, excluding weight
- Develop weight independent prediction models for overweight/obesity
to allow for prediction of those at risk based on behavioral &
lifestyle choices
Can you pay me back? |
[Report]
&
[Presentation]
Loan Default Borrower Data Clustering & Analysis [click for more
details]
- Report & supporting presentation
- Synthetic data. Medium data set (approx. 1000 observations)
- K means clustering, agglomerative hierarchical data clustering,
principal component analysis, local outlier factor analysis
Blind Breast Biopsies |
[Report]
Predicting Breast Tissue Biopsy Diagnosis In the Event of Incomplete
Biopsy [click for more details]
- Synthetic data. Small data set (approx. 600 observations)
- Logistic predictive modeling, single-layer neural network model
(perceptron) prediction, decision tree algorithms, ROC analysis, and
bagging
Regression Analysis & Model Creation
Can We Predict the Future in Health? |
[Report]
Framingham Heart Study Model Fitting and Cross Validatiion for BMI
Predictions [click for more details]
- Real world data. Medium data set (approx. 4,200 observations)
- Linear regression model creation, box-cox transformation, mean
square error (MSE) cross validation, logistic regression model creation,
receiver operating characteristic (ROC) and area under the curve (AUC)
model comparison
Data Visualization and Exploratory Data Analysis
Exploratory Data Analysis & Variable Relationship
Exploration
I’m Going to Miss my Flight! |
[Report]
An analysis of flight delay times across airports [click for more
details]
- Synthetic data with forced missing values. Medium data set (over
3,500 observations)
- Analysis of variables impacting flight delays & solution
implementation
- ggplot & Plot_ly interactive visualizations
Exploratory Data Analysis
Presidential Fitness Test |
[Report]
The Impact of Local Education, Poverty, and Unemployment Rates on County
Presidential Election Results [click for more details]
- Four real world data sets utilized. Large data sets (over 72,000
observations)
- Relational data sets and data aggregation
- GeoJSON & leaflet Interactive Map, ggplot
Time Series Data
The Price of Longevity |
[Report]
An Analysis of Annual Income on Life Expectancy [click for more details]
- Real world data. Large data set (over 35,000 observations)
- An analysis of variables impacting average life expectancy
- ggplot & Plot_ly interactive visualizations
SAS Projects
Linear Regression Analysis
Buisness Analytics Proposal
Pizzaz.com Speed Dating Comparability
Prediction |
[Proposal]
&
[Presentation]
&
[SAS
Code]
Speed Dating Analytics & Online Dating Optimization [click for more
details]
- Synthetic data. Small data set (276 observations)
- An analysis of variables impacting overall dater interest and linear
regression prediction model creation
- Proposal for data utilization and business improvement
Shiny/FlexDashboard Projects
Linear Regression Dashboard
Melbourne Housing Market |
[R Shiny
FlexDashboard]
[click for more details]
- Real world data. Large data set (over 34,000 observations)
- Housing market price regression analysis
Tableau Projects
Geospatial Data
Interactive Mapping
Presidential Election Results Per County Per
Year |
[Map]
[click for more details]
- Real world data. Large data set (over 72,000 observations)
- An analysis of Presidential Election Data from 2000 through
2020
Public Health Data
Tableau Storypoint & Dahsboard
National Health and Nutrition Examination Survey
(NHANES) |
[Storypoint]
&
[Dashboard]
[click for more details]
- Real world data. Medium data set (approx. 7,900 observations)
- An analysis of NHANES data of Smoking, Blood Pressure, and Serum
Cholesterol Levels
LS0tDQp0aXRsZTogIlByb2plY3RzIGFuZCBQcmVzZW50YXRpb25zIDo8aW1nIHNyYz1cImh0dHBzOi8vbmxlcGVyYS5naXRodWIuaW8vc3RhNTUxL0hXMDEvaW1nL3Blbmd1aW5fY3V0ZS5wbmdcIiBzdHlsZT1cImZsb2F0OiByaWdodDsgd2lkdGg6IDEyJVwiLz4iDQpzdWJ0aXRsZTogIkxpbmtzIHRvIHJlbGV2YW50IGNvdXJzZXdvcmsgcHJvamVjdHMgYW5kIHByZXNlbnRhdGlvbnMiDQphdXRob3I6DQotIG5hbWU6IE5hdGFsaWUgTGVQZXJhDQogIGFmZmlsaWF0aW9uOiBXZXN0IENoZXN0ZXIgVW5pdmVyc2l0eSB8IE0uUy4gQXBwbGllZCBTdGF0aXN0aWNzLCBEYXRhIFNjaWVuY2UgQ29uY2VudHJhdG9uDQpkYXRlOiANCm91dHB1dDoNCiAgaHRtbF9kb2N1bWVudDogDQogICAgdG9jOiB5ZXMNCiAgICB0b2NfZGVwdGg6IDQNCiAgICB0b2NfZmxvYXQ6IHllcw0KICAgIHRvY19jb2xsYXBzZTogeWVzDQogICAgbnVtYmVyX3NlY3Rpb25zOiBubw0KICAgIGNvZGVfZm9sZGluZzogaGlkZQ0KICAgIGNvZGVfZG93bmxvYWQ6IHllcw0KICAgIHNtb290aF9zY3JvbGw6IHRydWUNCiAgICB0aGVtZTogcmVhZGFibGUNCiAgICBmaWdfYWxpZ246IGNlbnRlcg0KICAgIGRmX3ByaW50OiBrYWJsZQ0KLS0tDQoNCmBgYHtjc3MsIGVjaG8gPSBGQUxTRX0NCmgxLnRpdGxlIHsgIC8qIFRpdGxlIC0gZm9udCBzcGVjaWZpY2F0aW9ucyBvZiB0aGUgcmVwb3J0IHRpdGxlICovDQogIGZvbnQtd2VpZ2h0OmJvbGQ7DQogIGNvbG9yOiBkYXJrbWFnZW50YSA7DQp9DQpoMS5zdWJ0aXRsZSB7ICAvKiBUaXRsZSAtIGZvbnQgc3BlY2lmaWNhdGlvbnMgb2YgdGhlIHJlcG9ydCB0aXRsZSAqLw0KICBmb250LXdlaWdodDpib2xkOw0KICBjb2xvcjogZGFya21hZ2VudGEgOw0KfQ0KaDQuYXV0aG9yIHsgLyogSGVhZGVyIDQgLSBmb250IHNwZWNpZmljYXRpb25zIGZvciBhdXRob3JzICAqLw0KICBmb250LWZhbWlseTogc3lzdGVtLXVpOw0KICBjb2xvcjogbmF2eTsNCn0NCmg0LmRhdGUgeyAvKiBIZWFkZXIgNCAtIGZvbnQgc3BlY2lmaWNhdGlvbnMgZm9yIHRoZSBkYXRlICAqLw0KICBmb250LWZhbWlseTogc3lzdGVtLXVpOw0KICBjb2xvcjogbmF2eTsNCn0NCmgxIHsgLyogSGVhZGVyIDEgLSBmb250IHNwZWNpZmljYXRpb25zIGZvciBsZXZlbCAxIHNlY3Rpb24gdGl0bGUgICovDQogICAgZm9udC13ZWlnaHQ6Ym9sZDsNCiAgICBjb2xvcjogbmF2eTsNCiAgICB0ZXh0LWFsaWduOiBsZWZ0Ow0KICAgIGZvbnQtZmFtaWx5OiB2ZXJkYW5hOw0KfQ0KaDIgeyAvKiBIZWFkZXIgMiAtIGZvbnQgc3BlY2lmaWNhdGlvbnMgZm9yIGxldmVsIDIgc2VjdGlvbiB0aXRsZSAqLw0KICAgIGZvbnQtd2VpZ2h0OmJvbGQ7DQogICAgY29sb3I6IG5hdnk7DQogICAgdGV4dC1hbGlnbjogbGVmdDsNCiAgICBmb250LWZhbWlseTogdmVyZGFuYTsNCn0NCg0KaDMgeyAvKiBIZWFkZXIgMyAtIGZvbnQgc3BlY2lmaWNhdGlvbnMgb2YgbGV2ZWwgMyBzZWN0aW9uIHRpdGxlICAqLw0KICAgIGZvbnQtd2VpZ2h0OmJvbGQ7DQogICAgY29sb3I6IG5hdnk7DQogICAgdGV4dC1hbGlnbjogbGVmdDsNCiAgICBmb250LWZhbWlseTogdmVyZGFuYTsNCn0NCg0KaDQgeyAvKiBIZWFkZXIgNCAtIGZvbnQgc3BlY2lmaWNhdGlvbnMgb2YgbGV2ZWwgNCBzZWN0aW9uIHRpdGxlICAqLw0KICAgIGNvbG9yOiBkYXJrcmVkOw0KICAgIHRleHQtYWxpZ246IGxlZnQ7DQogICAgZm9udC1mYW1pbHk6IHZlcmRhbmE7DQp9DQoNCmJvZHkgew0KICBiYWNrZ3JvdW5kLWNvbG9yOndoaXRlOw0KICBmb250LWZhbWlseTogdmVyZGFuYTsNCiAgICB9DQoNCi5oaWdobGlnaHRtZSB7IA0KICBiYWNrZ3JvdW5kLWNvbG9yOnllbGxvdzsgDQp9DQoNCnAgeyANCiAgYmFja2dyb3VuZC1jb2xvcjp3aGl0ZTsgDQogICAgZm9udC1mYW1pbHk6IHZlcmRhbmE7DQp9DQoNCmg1IHsNCiAgY29sb3I6IG5hdnk7DQogIGZvbnQtZmFtaWx5OiB2ZXJkYW5hOw0KfQ0KDQouaWZyYW1lIHsNCiAgdGV4dC1hbGlnbjogY2VudGVyOw0KfQ0KDQphOmxpbmsgew0KICBjb2xvcjogYmxhY2s7DQogIGZvbnQtZmFtaWx5OiB2ZXJkYW5hOw0KfQ0KDQouZmlnbGFiZWwgew0KICB0ZXh0LWFsaWduOiBjZW50ZXI7DQogIGNvbG9yOiBkYXJrc2xhdGVncmF5Ow0KICBmb250LXdlaWdodDogYm9sZDsNCiAgZm9udC1zaXplOiAxODsNCiAgICBmb250LWZhbWlseTogdmVyZGFuYTsNCn0NCg0KLnRkMSB7DQogIGZvbnQtd2VpZ2h0OiBib2xkOw0KICBmb250LWZhbWlseTogdmVyZGFuYTsNCn0NCg0KdGgsIHRkIHsNCiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNkZGQ7DQogIHRleHQtYWxpZ246IGxlZnQ7DQp9DQoNCnRyOmhvdmVyIHtiYWNrZ3JvdW5kLWNvbG9yOiBjb3JhbDt9DQpgYGANCg0KYGBge3Igc2V0dXAsIGluY2x1ZGU9RkFMU0V9DQprbml0cjo6b3B0c19jaHVuayRzZXQoZWNobyA9IFRSVUUpDQpgYGANCg0KDQoNCiMjIFIgTWFya2Rvd24gUHJvamVjdHMNCg0KIyMjIE1vZGVsaW5nLCBDcm9zcyBWYWxpZGF0aW9uLCAmIE1hY2hpbmUgTGVhcm5pbmcNCg0KIyMjIyBMaW5lYXIgJiBMb2dpc3RpYyBSZWdyZXNzaW9uIE1vZGVsaW5nIFVzaW5nIE1hY2hpbmUgbGVhcm5pbmcgQXBwcm9hY2hlcw0KDQo8Zm9udCBjbGFzcyA9ICJ0ZDEiPkEgQmxpbmQgVGFzdGUgVGVzdDwvZm9udD4gfCA8YSBocmVmPSJodHRwczovL3JwdWJzLmNvbS9ubGVwZXJhL3N0YTU1Ml9IVzA0IiB0YXJnZXQgPSAiYmxhbmsiPltSZXBvcnRdPC9hPg0KPGRldGFpbHM+PHN1bW1hcnk+UHJlZGljdGluZyBzb21tZWxpZXIgcXVhbGl0eSByYW5raW5ncyBvZiB3aW5lIGFuZCB3aW5lIHR5cGUgKHJlZC93aGl0ZSkgdXRpbGl6aW5nIGNoZW1pY2FsIGNvbXBvc2l0aW9uIGFsb25lIFtjbGljayBmb3IgbW9yZSBkZXRhaWxzXTwvc3VtbWFyeT48cD4NCg0KICAtIFJlYWwgd29ybGQgZGF0YTsgbWVkaXVtIGRhdGEgc2V0IChhcHByb3guIDYsNTAwIG9ic2VydmF0aW9ucykNCiAgLSBSZWd1bGFyaXplZCBsaW5lYXIgJiBsb2dpc3RpYyByZWdyZXNzaW9uIHByZWRpY3Rpb24gbW9kZWxzLCBzdXBwb3J0IHZlY3RvciBtYWNoaW5lIChTVk0pIHJlZ3Jlc3Npb24gYW5kIGNsYXNzaWZpY2F0aW9uIG1vZGVscw0KICAtIENvZWZmaWNpZW50IHBhdGggYW5hbHlzaXMsIGh5cGVycGFyYW1ldGVyIHR1bmluZywgYW5kIG9wdGltYWwgY3V0IG9mZiBwcm9iYWJpbGl0eSBhbmFseXNpcyBmb3Igb3B0aW1pemVkIGFjY3VyYWN5IGFuZCBzcGVjaWZpY2l0eS4NCiAgLSBBbmFseXNpcyBnb2FsczoNCiAgICAgIC0gSWRlbnRpZnlpbmcgdGhlIGJlc3QgcG9zc2libGUgcHJlZGljdGlvbiBtb2RlbCBmb3Igc29tbWVsaWVyIHdpbmUgcXVhbGl0eSByYW5raW5nIGJhc2VkIG9uIGNoZW1pY2FsIGNvbXBvc2l0aW9uDQogICAgICAtIENyZWF0aW5nIGEgd2hpdGUgdnMgcmVkIHByZWRpY3Rpb24gbW9kZWwgZm9yIGJsZW5kIHdpbmVzIHRoYXQgZG8gbm90IG5lYXRseSBmYWxsIGludG8gZWl0aGVyIGNhdGVnb3J5DQo8L3A+PC9kZXRhaWxzPg0KPGJyPg0KDQogIDxmb250IGNsYXNzID0gInRkMSI+IEhvbGQgVGhhdCBQbGFuZSEgPC9mb250PiB8IDxhIGhyZWY9Imh0dHBzOi8vcnB1YnMuY29tL25sZXBlcmEvc3RhNTUyX0hXMDMiIHRhcmdldCA9ImJsYW5rIj5bUmVwb3J0XTwvYT4gDQo8ZGV0YWlscz48c3VtbWFyeT5BbiBhbmFsaXNpcyBvZiBnbG9iYWwgZmxpZ2h0IGRlbGF5IGRhdGEgYW5kIHByZWRpY3Rpb24gbW9kZWwgY3JlYXRpb24gdG8gcmVkdWNlIGRlbGF5cyBhbmQgaW5jcmVhc2UgbGl2ZSBwcmVkaWN0aW9uIGNhcGFiaWxpdGllcyBbY2xpY2sgZm9yIG1vcmUgZGV0YWlsc108L3N1bW1hcnk+PHA+DQoNCiAgLSBTeW50aGV0aWMgZGF0YSB3aXRoIGZvcmNlZCBtaXNzaW5nIHZhbHVlcy4gTWVkaXVtIGRhdGEgc2V0IChvdmVyIDMsNTAwIG9ic2VydmF0aW9ucykNCiAgLSBNdWx0aXBsZSBJbXB1dGF0aW9uIGJ5IENoYWluZWQgRXF1YXRpb25zLCBSdWJlbidzIHJ1bGVzLCBSZWN1cnNpdmUgZmVhdHVyZSBlbGltaW5hdGlvbiwgUHJpbmNpcGFsIENvbXBvbmVudCBBbmFseXNpcywgay1NZWFucyBDbHVzdGVyaW5nDQogIC0gRm9yd2FyZCBlbGltaW5hdGlvbiBtb2RlbCBjcmVhdGlvbiwgY3Jvc3MgdmFsaWRhdGlvbiwgUmVjZWl2ZXIgT3BlcmF0aW5nIENoYXJhY3RlcmlzdGljIChST0MpIGNvbXBhcmlzb24NCiAgLSBBbmFseXNpcyBnb2FsczoNCiAgICAgIC0gSWRlbnRpZnlpbmcgdGhlIHZhcmlhYmxlcyB3aXRoIGdyZWF0ZXN0IGltcGFjdCBvbiBvdmVyYWxsIGZsaWdodCBkZWxheSBmb3Igc3Vic2VxdWVudCBtaXRpZ2F0aW9uIGFuZCBwcmV2ZW50YXRpdmUgZWZmb3J0cw0KICAgICAgLSBMaXZlIGZsaWdodCBkZWxheSBwcmVkaWN0aW9uIGJhc2VkIG9uIGF2YWlsYWJsZSBmbGlnaHQgZGF0YSBwcmlvciB0byBsYW5kaW5nIChwcmVkaWN0aW5nIHRvdGFsIGRlbGF5IHRpbWUgYmVmb3JlIGZsaWdodHMgZGVwYXJ0KQ0KPC9wPg0KPC9kZXRhaWxzPg0KPGJyPg0KDQojIyMjIFVuc3VwZXJ2aXNlZCBMZWFybmluZyBBbGdvcml0aG1zIGFuZCBQcmVkaWN0aXZlIG1vZGVsaW5nDQoNCjxmb250IGNsYXNzID0gInRkMSI+QmlnIEJhY2sgQmVoYXZpb3I8L2ZvbnQ+IF0gPGEgaHJlZj0iaHR0cHM6Ly9ycHVicy5jb20vbmxlcGVyYS9zdGE1NTJfSFcwNSIgdGFyZ2V0ID0gImJsYW5rIj5bUmVwb3J0XTwvYT4NCjxkZXRhaWxzPjxzdW1tYXJ5PlByZWRpY3Rpbmcgb2Jlc2l0eSByYW5raW5ncyBiYXNlZCBvbiBiZWhhdmlvcmFsIHN1cnZleSByZXN1bHRzIFtjbGljayBmb3IgbW9yZSBkZXRhaWxzXTwvc3VtbWFyeT48cD4NCg0KICAtIFJlYWwgd29ybGQgZGF0YTsgbWVkaXVtIGRhdGEgc2V0IChhcHByb3ggMiwyMDAgb2JzZXJ2YXRpb25zKQ0KICAtIENBUlQgcmVncmVzc2lvbiBwcmVkaWN0aW9uIG1vZGVscywgQ0FSVCBjbGFzc2lmaWNhdGlvbiBwcmVkaWN0aW9uIG1vZGVscywgQm9vdHN0cmFwIEJBR0dJTkcgcmVncmVzc2lvbiBwcmVkaWN0aW9uIG1vZGVscywgJiBCb290c3RyYXAgQkFHR0lORyBjbGFzc2lmaWNhdGlvbiBwcmVkaWN0aW9uIG1vZGVscw0KICAtIFZhcmlhYmxlIGltcG9ydGFuY2UgYW5hbHlzaXMsIGh5cGVycGFyYW1ldGVyIHR1bmluZywgbW9kZWwgcHJ1bmluZywgUk9DIGN1cnZlIGFuYWx5c2lzICYgb3B0aW1hbCBjdXRvZmYgaWRlbnRpZmljYXRpb24NCiAgLSBBbmFseXNpcyBnb2FsczoNCiAgICAtIERldmVsb3Agb3ZlcndlaWdodC9vYmVzaXR5IHByZWRpY3Rpb24gbW9kZWwgdXRpbGl6aW5nIHBhdGllbnQgbGlmZXN0eWxlIGFuZCBiZWhhdmlvcmFsIGluZm9ybWF0aW9uLCA8Yj5leGNsdWRpbmc8L2I+IHdlaWdodA0KICAgIC0gRGV2ZWxvcCB3ZWlnaHQgaW5kZXBlbmRlbnQgcHJlZGljdGlvbiBtb2RlbHMgZm9yIG92ZXJ3ZWlnaHQvb2Jlc2l0eSB0byBhbGxvdyBmb3IgcHJlZGljdGlvbiBvZiB0aG9zZSBhdCByaXNrIGJhc2VkIG9uIGJlaGF2aW9yYWwgJiBsaWZlc3R5bGUgY2hvaWNlcw0KPC9wPjwvZGV0YWlscz4NCjxicj4NCg0KPGZvbnQgY2xhc3MgPSAidGQxIj5DYW4geW91IHBheSBtZSBiYWNrPzwvZm9udD4gfCA8YSBocmVmPSJodHRwczovL3JwdWJzLmNvbS9ubGVwZXJhL3N0YTU1MV9odzA0IiB0YXJnZXQgPSJibGFuayI+W1JlcG9ydF08L2E+ICYgPGEgaHJlZj0iaHR0cHM6Ly9ubGVwZXJhLmdpdGh1Yi5pby9zdGE1NTEvRklOQUwvIiB0YXJnZXQgPSJibGFuayI+W1ByZXNlbnRhdGlvbl08L2E+DQo8ZGV0YWlscz48c3VtbWFyeT5Mb2FuIERlZmF1bHQgQm9ycm93ZXIgRGF0YSBDbHVzdGVyaW5nICYgQW5hbHlzaXMgW2NsaWNrIGZvciBtb3JlIGRldGFpbHNdPC9zdW1tYXJ5PjxwPg0KDQogIC0gUmVwb3J0ICYgc3VwcG9ydGluZyBwcmVzZW50YXRpb24NCiAgLSBTeW50aGV0aWMgZGF0YS4gTWVkaXVtIGRhdGEgc2V0IChhcHByb3guIDEwMDAgb2JzZXJ2YXRpb25zKQ0KICAtIEsgbWVhbnMgY2x1c3RlcmluZywgYWdnbG9tZXJhdGl2ZSBoaWVyYXJjaGljYWwgZGF0YSBjbHVzdGVyaW5nLCBwcmluY2lwYWwgY29tcG9uZW50IGFuYWx5c2lzLCBsb2NhbCBvdXRsaWVyIGZhY3RvciBhbmFseXNpcw0KPC9wPjwvZGV0YWlscz4NCjxicj4NCg0KDQo8Zm9udCBjbGFzcyA9ICJ0ZDEiPkJsaW5kIEJyZWFzdCBCaW9wc2llczwvZm9udD4gfCA8YSBocmVmPSJodHRwczovL3JwdWJzLmNvbS9ubGVwZXJhL3N0YTU1MV9odzAzIiB0YXJnZXQgPSJibGFuayI+W1JlcG9ydF08L2E+DQo8ZGV0YWlscz48c3VtbWFyeT5QcmVkaWN0aW5nIEJyZWFzdCBUaXNzdWUgQmlvcHN5IERpYWdub3NpcyBJbiB0aGUgRXZlbnQgb2YgSW5jb21wbGV0ZSBCaW9wc3kgW2NsaWNrIGZvciBtb3JlIGRldGFpbHNdPC9zdW1tYXJ5PjxwPg0KDQogIC0gU3ludGhldGljIGRhdGEuIFNtYWxsIGRhdGEgc2V0IChhcHByb3guIDYwMCBvYnNlcnZhdGlvbnMpDQogIC0gTG9naXN0aWMgcHJlZGljdGl2ZSBtb2RlbGluZywgc2luZ2xlLWxheWVyIG5ldXJhbCBuZXR3b3JrIG1vZGVsIChwZXJjZXB0cm9uKSBwcmVkaWN0aW9uLCBkZWNpc2lvbiB0cmVlIGFsZ29yaXRobXMsIFJPQyBhbmFseXNpcywgYW5kIGJhZ2dpbmcNCjwvcD48L2RldGFpbHM+DQo8YnI+DQoNCiMjIyMgUmVncmVzc2lvbiBBbmFseXNpcyAmIE1vZGVsIENyZWF0aW9uDQoNCjxmb250IGNsYXNzID0gInRkMSI+Q2FuIFdlIFByZWRpY3QgdGhlIEZ1dHVyZSBpbiBIZWFsdGg/PC9mb250PiB8IDxhIGhyZWY9Imh0dHBzOi8vcnB1YnMuY29tL25sZXBlcmEvc3RhNTUxX2h3MDIiIHRhcmdldCA9ImJsYW5rIj5bUmVwb3J0XTwvYT4NCjxkZXRhaWxzPjxzdW1tYXJ5PkZyYW1pbmdoYW0gSGVhcnQgU3R1ZHkgTW9kZWwgRml0dGluZyBhbmQgQ3Jvc3MgVmFsaWRhdGlpb24gZm9yIEJNSSBQcmVkaWN0aW9ucyBbY2xpY2sgZm9yIG1vcmUgZGV0YWlsc108L3N1bW1hcnk+PHA+DQoNCiAgLSBSZWFsIHdvcmxkIGRhdGEuIE1lZGl1bSBkYXRhIHNldCAoYXBwcm94LiA0LDIwMCBvYnNlcnZhdGlvbnMpDQogIC0gTGluZWFyIHJlZ3Jlc3Npb24gbW9kZWwgY3JlYXRpb24sIGJveC1jb3ggdHJhbnNmb3JtYXRpb24sIG1lYW4gc3F1YXJlIGVycm9yIChNU0UpIGNyb3NzIHZhbGlkYXRpb24sIGxvZ2lzdGljIHJlZ3Jlc3Npb24gbW9kZWwgY3JlYXRpb24sIHJlY2VpdmVyIG9wZXJhdGluZyBjaGFyYWN0ZXJpc3RpYyAoUk9DKSBhbmQgYXJlYSB1bmRlciB0aGUgY3VydmUgKEFVQykgbW9kZWwgY29tcGFyaXNvbg0KPC9wPjwvZGV0YWlscz4NCjxicj4NCg0KDQojIyMgRGF0YSBWaXN1YWxpemF0aW9uIGFuZCBFeHBsb3JhdG9yeSBEYXRhIEFuYWx5c2lzDQoNCiMjIyMgRXhwbG9yYXRvcnkgRGF0YSBBbmFseXNpcyAmIFZhcmlhYmxlIFJlbGF0aW9uc2hpcCBFeHBsb3JhdGlvbg0KDQo8Zm9udCBjbGFzcyA9ICJ0ZDEiPkknbSBHb2luZyB0byBNaXNzIG15IEZsaWdodCE8L2ZvbnQ+IHwgPGEgaHJlZj0iaHR0cHM6Ly9ubGVwZXJhLmdpdGh1Yi5pby9zdGE1NTIvSFcwMS9pbmRleC5odG1sIiB0YXJnZXQgPSJibGFuayI+W1JlcG9ydF08L2E+DQo8ZGV0YWlscz48c3VtbWFyeT5BbiBhbmFseXNpcyBvZiBmbGlnaHQgZGVsYXkgdGltZXMgYWNyb3NzIGFpcnBvcnRzIFtjbGljayBmb3IgbW9yZSBkZXRhaWxzXTwvc3VtbWFyeT48cD4NCg0KICAtIFN5bnRoZXRpYyBkYXRhIHdpdGggZm9yY2VkIG1pc3NpbmcgdmFsdWVzLiBNZWRpdW0gZGF0YSBzZXQgKG92ZXIgMyw1MDAgb2JzZXJ2YXRpb25zKQ0KICAtIEFuYWx5c2lzIG9mIHZhcmlhYmxlcyBpbXBhY3RpbmcgZmxpZ2h0IGRlbGF5cyAmIHNvbHV0aW9uIGltcGxlbWVudGF0aW9uDQogIC0gZ2dwbG90ICYgUGxvdF9seSBpbnRlcmFjdGl2ZSB2aXN1YWxpemF0aW9ucyANCjwvcD48L2RldGFpbHM+DQo8YnI+DQoNCiMjIyMgRXhwbG9yYXRvcnkgRGF0YSBBbmFseXNpcw0KDQo8Zm9udCBjbGFzcyA9ICJ0ZDEiPlByZXNpZGVudGlhbCBGaXRuZXNzIFRlc3Q8L2ZvbnQ+IHwgPGEgaHJlZj0iaHR0cHM6Ly9ycHVicy5jb20vbmxlcGVyYS9zdGE1NTFfaHcwMSIgdGFyZ2V0ID0iYmxhbmsiPltSZXBvcnRdPC9hPg0KPGRldGFpbHM+PHN1bW1hcnk+VGhlIEltcGFjdCBvZiBMb2NhbCBFZHVjYXRpb24sIFBvdmVydHksIGFuZCBVbmVtcGxveW1lbnQgUmF0ZXMgb24gQ291bnR5IFByZXNpZGVudGlhbCBFbGVjdGlvbiBSZXN1bHRzIFtjbGljayBmb3IgbW9yZSBkZXRhaWxzXTwvc3VtbWFyeT48cD4NCg0KICAtIEZvdXIgcmVhbCB3b3JsZCBkYXRhIHNldHMgdXRpbGl6ZWQuIExhcmdlIGRhdGEgc2V0cyAob3ZlciA3MiwwMDAgb2JzZXJ2YXRpb25zKQ0KICAtIFJlbGF0aW9uYWwgZGF0YSBzZXRzIGFuZCBkYXRhIGFnZ3JlZ2F0aW9uDQogIC0gR2VvSlNPTiAmIGxlYWZsZXQgSW50ZXJhY3RpdmUgTWFwLCBnZ3Bsb3QNCjwvcD48L2RldGFpbHM+DQo8YnI+DQoNCiMjIyMgVGltZSBTZXJpZXMgRGF0YQ0KDQo8Zm9udCBjbGFzcyA9ICJ0ZDEiPlRoZSBQcmljZSBvZiBMb25nZXZpdHk8L2ZvbnQ+IHwgPGEgaHJlZj0iaHR0cHM6Ly9ubGVwZXJhLmdpdGh1Yi5pby9zdGE1NTMvdzA2X3Bsb3RseS8iIHRhcmdldCA9ImJsYW5rIj5bUmVwb3J0XTwvYT4NCjxkZXRhaWxzPjxzdW1tYXJ5PkFuIEFuYWx5c2lzIG9mIEFubnVhbCBJbmNvbWUgb24gTGlmZSBFeHBlY3RhbmN5IFtjbGljayBmb3IgbW9yZSBkZXRhaWxzXTwvc3VtbWFyeT48cD4NCg0KICAtIFJlYWwgd29ybGQgZGF0YS4gTGFyZ2UgZGF0YSBzZXQgKG92ZXIgMzUsMDAwIG9ic2VydmF0aW9ucykNCiAgLSBBbiBhbmFseXNpcyBvZiB2YXJpYWJsZXMgaW1wYWN0aW5nIGF2ZXJhZ2UgbGlmZSBleHBlY3RhbmN5DQogIC0gZ2dwbG90ICYgUGxvdF9seSBpbnRlcmFjdGl2ZSB2aXN1YWxpemF0aW9ucw0KPC9wPjwvZGV0YWlscz4NCjxicj4NCiAgDQojIyBTQVMgUHJvamVjdHMNCg0KIyMjIExpbmVhciBSZWdyZXNzaW9uIEFuYWx5c2lzIA0KDQojIyMjIEJ1aXNuZXNzIEFuYWx5dGljcyBQcm9wb3NhbA0KDQo8Zm9udCBjbGFzcyA9ICJ0ZDEiPlBpenphei5jb20gU3BlZWQgRGF0aW5nIENvbXBhcmFiaWxpdHkgUHJlZGljdGlvbjwvZm9udD4gfCA8YSBocmVmPSJodHRwczovL25sZXBlcmEuZ2l0aHViLmlvL3N0YTUxMS9MZVBlcmFfTl9FeGFtJTIwMl8yMDI1LjA0LjIyLnBkZiIgdGFyZ2V0ID0iYmxhbmsiPltQcm9wb3NhbF08L2E+ICYgPGEgaHJlZj0iaHR0cHM6Ly9ubGVwZXJhLmdpdGh1Yi5pby9zdGE1MTEvZXhhbTJfcGRmLnBkZiIgdGFyZ2V0ID0iYmxhbmsiPltQcmVzZW50YXRpb25dPC9hPiAmIDxhIGhyZWYgPSAiaHR0cHM6Ly9ubGVwZXJhLmdpdGh1Yi5pby9zdGE1MTEvZXhhbTJfU0FTLnBkZiIgdGFyZ2V0PSJibGFuayI+W1NBUyBDb2RlXTwvYT4NCjxkZXRhaWxzPjxzdW1tYXJ5PlNwZWVkIERhdGluZyBBbmFseXRpY3MgJiBPbmxpbmUgRGF0aW5nIE9wdGltaXphdGlvbiBbY2xpY2sgZm9yIG1vcmUgZGV0YWlsc108L3N1bW1hcnk+PHA+DQoNCiAgLSBTeW50aGV0aWMgZGF0YS4gU21hbGwgZGF0YSBzZXQgKDI3NiBvYnNlcnZhdGlvbnMpDQogIC0gQW4gYW5hbHlzaXMgb2YgdmFyaWFibGVzIGltcGFjdGluZyBvdmVyYWxsIGRhdGVyIGludGVyZXN0IGFuZCBsaW5lYXIgcmVncmVzc2lvbiBwcmVkaWN0aW9uIG1vZGVsIGNyZWF0aW9uDQogIC0gUHJvcG9zYWwgZm9yIGRhdGEgdXRpbGl6YXRpb24gYW5kIGJ1c2luZXNzIGltcHJvdmVtZW50DQo8L3A+PC9kZXRhaWxzPg0KPGJyPg0KICANCiAgDQojIyBTaGlueS9GbGV4RGFzaGJvYXJkIFByb2plY3RzDQoNCiMjIyMgTGluZWFyIFJlZ3Jlc3Npb24gRGFzaGJvYXJkDQoNCjxmb250IGNsYXNzID0gInRkMSI+TWVsYm91cm5lIEhvdXNpbmcgTWFya2V0PC9mb250PiB8IDxhIGhyZWY9Imh0dHBzOi8vbmxlcGVyYS5zaGlueWFwcHMuaW8vZmluYWwvIiB0YXJnZXQgPSJibGFuayI+W1IgU2hpbnkgRmxleERhc2hib2FyZF08L2E+DQo8ZGV0YWlscz48c3VtbWFyeT5bY2xpY2sgZm9yIG1vcmUgZGV0YWlsc108L3N1bW1hcnk+PHA+DQoNCiAgLSBSZWFsIHdvcmxkIGRhdGEuICBMYXJnZSBkYXRhIHNldCAob3ZlciAzNCwwMDAgb2JzZXJ2YXRpb25zKQ0KICAtIEhvdXNpbmcgbWFya2V0IHByaWNlIHJlZ3Jlc3Npb24gYW5hbHlzaXMNCjwvcD48L2RldGFpbHM+DQo8YnI+DQoNCiMjIFRhYmxlYXUgUHJvamVjdHMNCg0KIyMjIEdlb3NwYXRpYWwgRGF0YQ0KDQojIyMjIEludGVyYWN0aXZlIE1hcHBpbmcNCg0KPGZvbnQgY2xhc3MgPSAidGQxIj5QcmVzaWRlbnRpYWwgRWxlY3Rpb24gUmVzdWx0cyBQZXIgQ291bnR5IFBlciBZZWFyPC9mb250PiB8IDxhIGhyZWY9Imh0dHBzOi8vcHVibGljLnRhYmxlYXUuY29tL3ZpZXdzL1ByZXNpZGVudGlhbEVsZWN0aW9uUmVzdWx0c1BlckNvdW50eVBlclllYXIvU2hlZXQxPzpsYW5ndWFnZT1lbi1VUyY6c2lkPSY6cmVkaXJlY3Q9YXV0aCY6ZGlzcGxheV9jb3VudD1uJjpvcmlnaW49dml6X3NoYXJlX2xpbmsiIHRhcmdldCA9ImJsYW5rIj5bTWFwXTwvYT4NCjxkZXRhaWxzPjxzdW1tYXJ5PltjbGljayBmb3IgbW9yZSBkZXRhaWxzXTwvc3VtbWFyeT48cD4NCg0KICAtIFJlYWwgd29ybGQgZGF0YS4gTGFyZ2UgZGF0YSBzZXQgKG92ZXIgNzIsMDAwIG9ic2VydmF0aW9ucykNCiAgLSBBbiBhbmFseXNpcyBvZiBQcmVzaWRlbnRpYWwgRWxlY3Rpb24gRGF0YSBmcm9tIDIwMDAgdGhyb3VnaCAyMDIwDQo8L3A+PC9kZXRhaWxzPg0KPGJyPg0KDQojIyMgUHVibGljIEhlYWx0aCBEYXRhDQoNCiMjIyMgVGFibGVhdSBTdG9yeXBvaW50ICYgRGFoc2JvYXJkDQoNCjxmb250IGNsYXNzID0gInRkMSI+TmF0aW9uYWwgSGVhbHRoIGFuZCBOdXRyaXRpb24gRXhhbWluYXRpb24gU3VydmV5IChOSEFORVMpPC9mb250PiB8IDxhIGhyZWY9Imh0dHBzOi8vcHVibGljLnRhYmxlYXUuY29tL3ZpZXdzL05IQU5FU0hlYWx0aERhdGEtU3Rvcnlwb2ludC9TbW9raW5nSGVhbHRoPzpsYW5ndWFnZT1lbi1VUyY6c2lkPSY6cmVkaXJlY3Q9YXV0aCY6ZGlzcGxheV9jb3VudD1uJjpvcmlnaW49dml6X3NoYXJlX2xpbmsiIHRhcmdldCA9ImJsYW5rIj5bU3Rvcnlwb2ludF08L2E+ICYgPGEgaHJlZj0iaHR0cHM6Ly9wdWJsaWMudGFibGVhdS5jb20vdmlld3MvTkhBTkVTSGVhbHRoRGF0YS9TbW9raW5nRGFzaGJvYXJkPzpsYW5ndWFnZT1lbi1VUyY6c2lkPSY6cmVkaXJlY3Q9YXV0aCY6ZGlzcGxheV9jb3VudD1uJjpvcmlnaW49dml6X3NoYXJlX2xpbmsiIHRhcmdldCA9ImJsYW5rIj5bRGFzaGJvYXJkXTwvYT4NCjxkZXRhaWxzPjxzdW1tYXJ5PltjbGljayBmb3IgbW9yZSBkZXRhaWxzXTwvc3VtbWFyeT48cD4NCg0KICAtIFJlYWwgd29ybGQgZGF0YS4gTWVkaXVtIGRhdGEgc2V0IChhcHByb3guIDcsOTAwIG9ic2VydmF0aW9ucykNCiAgLSBBbiBhbmFseXNpcyBvZiBOSEFORVMgZGF0YSBvZiBTbW9raW5nLCBCbG9vZCBQcmVzc3VyZSwgYW5kIFNlcnVtIENob2xlc3Rlcm9sIExldmVscw0KPC9wPjwvZGV0YWlscz4NCiAgDQo=