Try executing this chunk by clicking the Run button within
the chunk or by placing your cursor inside it and pressing
Ctrl+Shift+Enter.
Create 1 table of summary information for the total and computer_all
categories, as well as 1-2 professions of your choice,
and 2-3 plots using the ggplot2 package in R. Please refer to the
.Rmd file provided for notes and tips on how to use the data. Analysis
will be graded on a) whether you are able to produce the required graphs
and table and b) the quality and design of your plots. As you work, be
sure to think about: ● Am I telling a clear story with my plot? ● Can a
viewer easily understand and interpret my visuals? ● Do my design and
color choices make sense for this plot? You should include a paragraph
or two with your analysis that summarizes key findings from your
work.
setwd("C:/Users/SUNYLoaner/OneDrive - Binghamton University/Desktop/DIDA 325")
#found path under More section of files
csv <- read.csv("occupation_gender_race (1).csv", stringsAsFactors = F, fileEncoding="UTF-8-BOM")
library(dplyr)
Attaching package: ‘dplyr’
The following objects are masked from ‘package:stats’:
filter, lag
The following objects are masked from ‘package:base’:
intersect, setdiff, setequal, union
library(tidyr)
library(ggplot2)
- Create 1 table of summary information for the total and computer_all
categories, as well as 1-2 professions of your choice,
table(csv$job_type)
#variable : jobtype
select_occupation_csv <- csv %>% filter(job_type %in% c("total", "computer_all","computer")) %>% head()
table(csv$job_type)
computer computer_all professional total
58 4 4 4
table(csv$description)
Actuaries
3
Computer and information research scientists
2
Computer and mathematical occupations
4
Computer hardware engineers
2
Computer hardware engineers
1
Computer network architects
2
Computer occupations, all other
2
Computer programmers
4
Computer scientists and systems analysts
2
Computer software engineers
2
Computer support specialists
3
Computer support specialists
1
Computer systems analysts
2
Database administrators
3
Database administrators and architects
1
Information security analysts
2
Mathematicians
3
Miscellaneous mathematical science occupations
2
Network and computer systems administrators
4
Network systems and data communications analysts
2
Operations research analysts
3
Operations research analysts
1
Other mathematical science occupations
2
Professional and related occupations
3
Professional and related occupations
1
Software developers
1
Software developers, applications and systems software
1
Software quality assurance analysts and testers
1
Statisticians
3
Total, 16 years and over
4
Web and digital interface designers
1
Web developers
2
variables <- csv %>%
select(c("All", "Women","Black", "Asian", "Hispanic.Latino"))
variables
mean1 <- variables %>% summarise(across(everything(), mean, na.rm=TRUE))
sd1 <- variables %>% summarise(across(everything(), sd, na.rm=TRUE))
min1 <- variables %>% summarise(across(everything(), min, na.rm=TRUE))
max1 <- variables %>% summarise(across(everything(), max, na.rm=TRUE))
table <- rbind(mean1, sd1, min1, max1)
rownames(table) <- c("Mean", "Standard Deviation", "Minimum", "Maximum")
table <- t(table)
options(scipen = 999)
table <- table %>%
as.data.frame %>%
mutate_if(is.numeric, round, digits=2)
table
table(csv$job_type)
computer computer_all professional total
58 4 4 4
table(csv$description)
Actuaries
3
Computer and information research scientists
2
Computer and mathematical occupations
4
Computer hardware engineers
2
Computer hardware engineers
1
Computer network architects
2
Computer occupations, all other
2
Computer programmers
4
Computer scientists and systems analysts
2
Computer software engineers
2
Computer support specialists
3
Computer support specialists
1
Computer systems analysts
2
Database administrators
3
Database administrators and architects
1
Information security analysts
2
Mathematicians
3
Miscellaneous mathematical science occupations
2
Network and computer systems administrators
4
Network systems and data communications analysts
2
Operations research analysts
3
Operations research analysts
1
Other mathematical science occupations
2
Professional and related occupations
3
Professional and related occupations
1
Software developers
1
Software developers, applications and systems software
1
Software quality assurance analysts and testers
1
Statisticians
3
Total, 16 years and over
4
Web and digital interface designers
1
Web developers
2

and 2-3 plots using the ggplot2 package in R. Please refer to the
.Rmd file provided for notes and tips on how to use the data. Analysis
will be graded on a) whether you are able to produce the required graphs
and table and b) the quality and design of your plots. As you work, be
sure to think about: ● Am I telling a clear story with my plot? ● Can a
viewer easily understand and interpret my visuals? ● Do my design and
color choices make sense for this plot? You should include a paragraph
or two with your analysis that summarizes key findings from your
work
Plot 1:
totalplot <- ggplot(total_csv)+
geom_line(aes(x = year, y = Asian, color = "Asian"))+
geom_line(aes(x = year, y = Black, color = "Black"))+
geom_line(aes(x = year, y = Hispanic.Latino, colour = "H.Latino"))+
geom_line(aes(x = year, y = Women, color = "Women"))+
labs(y= "Percentage of occupations", x = "year",
color = "Demographic",
title = "Demographic Breakdown of All Occupations from years 2005,2010,2015,2020")+
theme_minimal()+
scale_color_manual(labels = c("Asian", "Black", "H.Latino","Women"),
values = c("red", "orange", "darkgreen", "blue"))
totalplot

PLot 2:
computerallplot <-
ggplot(computer_all_csv) +
geom_line(aes(x = year, y = Asian, color = "Asian"))+
geom_line(aes(x = year, y = Black, color = "Black"))+
geom_line(aes(x = year, y = Hispanic.Latino, colour = "H.Latino"))+
geom_line(aes(x = year, y = Women, color = "Women"))+
labs(y= "Percentage of occupations", x = "Year",
color = "Demographic",
title = "Demographic Breakdown of All computer occupations from years 2005,2010,2015,2020")+
theme_minimal()+
scale_color_manual(labels = c("Asian", "Black", "H.Latino","Women"),
values = c("red", "orange", "darkgreen", "blue"))
computerallplot

professionalplot <-
ggplot(professional_csv) +
geom_line(aes(x = year, y = Asian, color = "Asian"))+
geom_line(aes(x = year, y = Black, color = "Black"))+
geom_line(aes(x = year, y = Hispanic.Latino, colour = "H.Latino"))+
geom_line(aes(x = year, y = Women, color = "Women"))+
labs(y= "Percentage of occupation", x = "Year",
color = "Demographic",
title = "Demographic Breakdown of Proffessional occupations from years 2005,2010,2015,2020")+
theme_minimal()+
scale_color_manual(labels = c("Asian", "Black", "H.Latino","Women"),
values = c("red", "orange", "darkgreen", "blue"))
professionalplot

LS0tDQp0aXRsZTogIk1pZHRlcm0gRElEQSAzMjUgOiBTaGFyb24gTGluIg0Kb3V0cHV0OiBodG1sX25vdGVib29rDQotLS0NCg0KVGhpcyBpcyBhbiBbUiBNYXJrZG93bl0oaHR0cDovL3JtYXJrZG93bi5yc3R1ZGlvLmNvbSkgTm90ZWJvb2suIFdoZW4geW91IGV4ZWN1dGUgY29kZSB3aXRoaW4gdGhlIG5vdGVib29rLCB0aGUgcmVzdWx0cyBhcHBlYXIgYmVuZWF0aCB0aGUgY29kZS4gDQoNClRyeSBleGVjdXRpbmcgdGhpcyBjaHVuayBieSBjbGlja2luZyB0aGUgKlJ1biogYnV0dG9uIHdpdGhpbiB0aGUgY2h1bmsgb3IgYnkgcGxhY2luZyB5b3VyIGN1cnNvciBpbnNpZGUgaXQgYW5kIHByZXNzaW5nICpDdHJsK1NoaWZ0K0VudGVyKi4gDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KQ3JlYXRlIDEgdGFibGUgb2Ygc3VtbWFyeSBpbmZvcm1hdGlvbiBmb3IgdGhlIHRvdGFsIGFuZCBjb21wdXRlcl9hbGwgY2F0ZWdvcmllcywgYXMgd2VsbCBhcyAxLTIgcHJvZmVzc2lvbnMgb2YgeW91ciBjaG9pY2UsIA0KDQphbmQgMi0zIHBsb3RzIHVzaW5nIHRoZSBnZ3Bsb3QyIHBhY2thZ2UgaW4gUi4gUGxlYXNlIHJlZmVyIHRvIHRoZSAuUm1kIGZpbGUgcHJvdmlkZWQgZm9yIG5vdGVzIGFuZCB0aXBzIG9uIGhvdyB0byB1c2UgdGhlIGRhdGEuIEFuYWx5c2lzIHdpbGwgYmUgZ3JhZGVkIG9uIGEpIHdoZXRoZXIgeW91IGFyZSBhYmxlIHRvIHByb2R1Y2UgdGhlIHJlcXVpcmVkIGdyYXBocyBhbmQgdGFibGUgYW5kIGIpIHRoZSBxdWFsaXR5IGFuZCBkZXNpZ24gb2YgeW91ciBwbG90cy4gQXMgeW91IHdvcmssIGJlIHN1cmUgdG8gdGhpbmsgYWJvdXQ6DQril48gQW0gSSB0ZWxsaW5nIGEgY2xlYXIgc3Rvcnkgd2l0aCBteSBwbG90Pw0K4pePIENhbiBhIHZpZXdlciBlYXNpbHkgdW5kZXJzdGFuZCBhbmQgaW50ZXJwcmV0IG15IHZpc3VhbHM/DQril48gRG8gbXkgZGVzaWduIGFuZCBjb2xvciBjaG9pY2VzIG1ha2Ugc2Vuc2UgZm9yIHRoaXMgcGxvdD8NCllvdSBzaG91bGQgaW5jbHVkZSBhIHBhcmFncmFwaCBvciB0d28gd2l0aCB5b3VyIGFuYWx5c2lzIHRoYXQgc3VtbWFyaXplcyBrZXkgZmluZGluZ3MgZnJvbQ0KeW91ciB3b3JrLg0KDQpgYGB7cn0NCnNldHdkKCJDOi9Vc2Vycy9TVU5ZTG9hbmVyL09uZURyaXZlIC0gQmluZ2hhbXRvbiBVbml2ZXJzaXR5L0Rlc2t0b3AvRElEQSAzMjUiKQ0KI2ZvdW5kIHBhdGggdW5kZXIgTW9yZSBzZWN0aW9uIG9mIGZpbGVzDQpjc3YgPC0gcmVhZC5jc3YoIm9jY3VwYXRpb25fZ2VuZGVyX3JhY2UgKDEpLmNzdiIsIHN0cmluZ3NBc0ZhY3RvcnMgPSBGLCBmaWxlRW5jb2Rpbmc9IlVURi04LUJPTSIpDQoNCmxpYnJhcnkoZHBseXIpDQpsaWJyYXJ5KHRpZHlyKQ0KbGlicmFyeShnZ3Bsb3QyKQ0KbGlicmFyeShnZ3RoZW1lcykNCmBgYA0KDQoxLiBDcmVhdGUgMSB0YWJsZSBvZiBzdW1tYXJ5IGluZm9ybWF0aW9uIGZvciB0aGUgdG90YWwgYW5kIGNvbXB1dGVyX2FsbCBjYXRlZ29yaWVzLCBhcyB3ZWxsIGFzIDEtMiBwcm9mZXNzaW9ucyBvZiB5b3VyIGNob2ljZSwgDQpgYGB7cn0NCnRhYmxlKGNzdiRqb2JfdHlwZSkNCmBgYA0KDQpgYGB7cn0NCiN2YXJpYWJsZSA6IGpvYnR5cGUNCg0Kc2VsZWN0X29jY3VwYXRpb25fY3N2IDwtIGNzdiAlPiUgZmlsdGVyKGpvYl90eXBlICVpbiUgYygidG90YWwiLCAiY29tcHV0ZXJfYWxsIiwiY29tcHV0ZXIiKSkgJT4lIGhlYWQoKQ0KDQoNCnRhYmxlKGNzdiRqb2JfdHlwZSkNCnRhYmxlKGNzdiRkZXNjcmlwdGlvbikNCg0KdmFyaWFibGVzIDwtIGNzdiAlPiUgDQogIHNlbGVjdChjKCJBbGwiLCAiV29tZW4iLCJCbGFjayIsICJBc2lhbiIsICJIaXNwYW5pYy5MYXRpbm8iKSkNCnZhcmlhYmxlcw0KDQptZWFuMSA8LSB2YXJpYWJsZXMgJT4lIHN1bW1hcmlzZShhY3Jvc3MoZXZlcnl0aGluZygpLCBtZWFuLCBuYS5ybT1UUlVFKSkNCnNkMSA8LSB2YXJpYWJsZXMgJT4lIHN1bW1hcmlzZShhY3Jvc3MoZXZlcnl0aGluZygpLCBzZCwgbmEucm09VFJVRSkpDQptaW4xIDwtIHZhcmlhYmxlcyAlPiUgc3VtbWFyaXNlKGFjcm9zcyhldmVyeXRoaW5nKCksIG1pbiwgbmEucm09VFJVRSkpDQptYXgxIDwtIHZhcmlhYmxlcyAlPiUgc3VtbWFyaXNlKGFjcm9zcyhldmVyeXRoaW5nKCksIG1heCwgbmEucm09VFJVRSkpDQoNCnRhYmxlIDwtIHJiaW5kKG1lYW4xLCBzZDEsIG1pbjEsIG1heDEpDQpyb3duYW1lcyh0YWJsZSkgPC0gYygiTWVhbiIsICJTdGFuZGFyZCBEZXZpYXRpb24iLCAiTWluaW11bSIsICJNYXhpbXVtIikNCnRhYmxlIDwtIHQodGFibGUpDQpvcHRpb25zKHNjaXBlbiA9IDk5OSkNCg0KdGFibGUgPC0gdGFibGUgJT4lIA0KICBhcy5kYXRhLmZyYW1lICU+JSANCiAgbXV0YXRlX2lmKGlzLm51bWVyaWMsIHJvdW5kLCBkaWdpdHM9MikNCnRhYmxlDQpgYGANCmBgYHtyfQ0KdGFibGUoY3N2JGpvYl90eXBlKQ0KYGBgDQpgYGB7cn0NCnRhYmxlKGNzdiRkZXNjcmlwdGlvbikNCmBgYA0KDQpgYGB7cn0NCnBsb3QoY3N2JHllYXIsIGNzdiRXb21lbikNCg0KDQp0b3RhbF9jc3YgPC0gY3N2ICU+JSBmaWx0ZXIoam9iX3R5cGUgJWluJSBjKCJ0b3RhbCIpKSAlPiUgaGVhZCgpDQoNCmNvbXB1dGVyX2FsbF9jc3Y8LSBjc3YgJT4lIGZpbHRlcihqb2JfdHlwZSAlaW4lIGMoImNvbXB1dGVyX2FsbCIpKSAlPiUgaGVhZCgpDQoNCnByb2Zlc3Npb25hbF9jc3YgPC1jc3YgJT4lIGZpbHRlcihqb2JfdHlwZSAlaW4lIGMoInByb2Zlc3Npb25hbCIpKSAlPiUgaGVhZCgpDQoNCg0KcGxvdCh0b3RhbF9jc3YkeWVhciwgdG90YWxfY3N2JFdvbWVuKQ0KDQpwbG90KGNvbXB1dGVyX2FsbF9jc3YkeWVhciwgY29tcHV0ZXJfYWxsX2NzdiRCbGFjaykNCg0KcGxvdChwcm9mZXNzaW9uYWxfY3N2JHllYXIsIHByb2Zlc3Npb25hbF9jc3YkV29tZW4pDQoNCg0KYGBgDQphbmQgMi0zIHBsb3RzIHVzaW5nIHRoZSBnZ3Bsb3QyIHBhY2thZ2UgaW4gUi4gUGxlYXNlIHJlZmVyIHRvIHRoZSAuUm1kIGZpbGUgcHJvdmlkZWQgZm9yIG5vdGVzIGFuZCB0aXBzIG9uIGhvdyB0byB1c2UgdGhlIGRhdGEuIEFuYWx5c2lzIHdpbGwgYmUgZ3JhZGVkIG9uIGEpIHdoZXRoZXIgeW91IGFyZSBhYmxlIHRvIHByb2R1Y2UgdGhlIHJlcXVpcmVkIGdyYXBocyBhbmQgdGFibGUgYW5kIGIpIHRoZSBxdWFsaXR5IGFuZCBkZXNpZ24gb2YgeW91ciBwbG90cy4gQXMgeW91IHdvcmssIGJlIHN1cmUgdG8gdGhpbmsgYWJvdXQ6DQril48gQW0gSSB0ZWxsaW5nIGEgY2xlYXIgc3Rvcnkgd2l0aCBteSBwbG90Pw0K4pePIENhbiBhIHZpZXdlciBlYXNpbHkgdW5kZXJzdGFuZCBhbmQgaW50ZXJwcmV0IG15IHZpc3VhbHM/DQril48gRG8gbXkgZGVzaWduIGFuZCBjb2xvciBjaG9pY2VzIG1ha2Ugc2Vuc2UgZm9yIHRoaXMgcGxvdD8NCllvdSBzaG91bGQgaW5jbHVkZSBhIHBhcmFncmFwaCBvciB0d28gd2l0aCB5b3VyIGFuYWx5c2lzIHRoYXQgc3VtbWFyaXplcyBrZXkgZmluZGluZ3MgZnJvbQ0KeW91ciB3b3JrDQoNCg0KUGxvdCAxOg0KYGBge3J9DQp0b3RhbHBsb3QgPC0gZ2dwbG90KHRvdGFsX2NzdikrDQogIGdlb21fbGluZShhZXMoeCA9IHllYXIsIHkgPSBBc2lhbiwgY29sb3IgPSAiQXNpYW4iKSkrDQogIGdlb21fbGluZShhZXMoeCA9IHllYXIsIHkgPSBCbGFjaywgY29sb3IgPSAiQmxhY2siKSkrDQogIGdlb21fbGluZShhZXMoeCA9IHllYXIsIHkgPSBIaXNwYW5pYy5MYXRpbm8sIGNvbG91ciA9ICJILkxhdGlubyIpKSsNCiAgZ2VvbV9saW5lKGFlcyh4ID0geWVhciwgeSA9IFdvbWVuLCBjb2xvciA9ICJXb21lbiIpKSsNCiAgbGFicyh5PSAiUGVyY2VudGFnZSBvZiBvY2N1cGF0aW9ucyIsIHggPSAieWVhciIsDQogICAgICAgY29sb3IgPSAiRGVtb2dyYXBoaWMiLA0KICAgICAgIHRpdGxlID0gIkRlbW9ncmFwaGljIEJyZWFrZG93biBvZiBBbGwgT2NjdXBhdGlvbnMgZnJvbSB5ZWFycyAyMDA1LDIwMTAsMjAxNSwyMDIwIikrDQogIHRoZW1lX21pbmltYWwoKSsNCiAgc2NhbGVfY29sb3JfbWFudWFsKGxhYmVscyA9IGMoIkFzaWFuIiwgIkJsYWNrIiwgIkguTGF0aW5vIiwiV29tZW4iKSwNCiAgICAgICAgICAgICAgICAgICAgIHZhbHVlcyA9IGMoInJlZCIsICJvcmFuZ2UiLCAiZGFya2dyZWVuIiwgImJsdWUiKSkNCg0KdG90YWxwbG90DQpgYGANCg0KUExvdCAyOg0KYGBge3J9DQpjb21wdXRlcmFsbHBsb3QgPC0NCiAgZ2dwbG90KGNvbXB1dGVyX2FsbF9jc3YpICsgDQogIGdlb21fbGluZShhZXMoeCA9IHllYXIsIHkgPSBBc2lhbiwgY29sb3IgPSAiQXNpYW4iKSkrDQogIGdlb21fbGluZShhZXMoeCA9IHllYXIsIHkgPSBCbGFjaywgY29sb3IgPSAiQmxhY2siKSkrDQogIGdlb21fbGluZShhZXMoeCA9IHllYXIsIHkgPSBIaXNwYW5pYy5MYXRpbm8sIGNvbG91ciA9ICJILkxhdGlubyIpKSsNCiAgZ2VvbV9saW5lKGFlcyh4ID0geWVhciwgeSA9IFdvbWVuLCBjb2xvciA9ICJXb21lbiIpKSsNCiAgbGFicyh5PSAiUGVyY2VudGFnZSBvZiBvY2N1cGF0aW9ucyIsIHggPSAiWWVhciIsDQogICAgICAgY29sb3IgPSAiRGVtb2dyYXBoaWMiLA0KICAgICAgIHRpdGxlID0gIkRlbW9ncmFwaGljIEJyZWFrZG93biBvZiBBbGwgY29tcHV0ZXIgb2NjdXBhdGlvbnMgZnJvbSB5ZWFycyAyMDA1LDIwMTAsMjAxNSwyMDIwIikrDQogIHRoZW1lX21pbmltYWwoKSsNCiAgc2NhbGVfY29sb3JfbWFudWFsKGxhYmVscyA9IGMoIkFzaWFuIiwgIkJsYWNrIiwgIkguTGF0aW5vIiwiV29tZW4iKSwNCiAgICAgICAgICAgICAgICAgICAgIHZhbHVlcyA9IGMoInJlZCIsICJvcmFuZ2UiLCAiZGFya2dyZWVuIiwgImJsdWUiKSkNCg0KY29tcHV0ZXJhbGxwbG90DQpgYGANCmBgYHtyfQ0KcHJvZmVzc2lvbmFscGxvdCA8LQ0KICBnZ3Bsb3QocHJvZmVzc2lvbmFsX2NzdikgKyANCiAgZ2VvbV9saW5lKGFlcyh4ID0geWVhciwgeSA9IEFzaWFuLCBjb2xvciA9ICJBc2lhbiIpKSsNCiAgZ2VvbV9saW5lKGFlcyh4ID0geWVhciwgeSA9IEJsYWNrLCBjb2xvciA9ICJCbGFjayIpKSsNCiAgZ2VvbV9saW5lKGFlcyh4ID0geWVhciwgeSA9IEhpc3BhbmljLkxhdGlubywgY29sb3VyID0gIkguTGF0aW5vIikpKw0KICBnZW9tX2xpbmUoYWVzKHggPSB5ZWFyLCB5ID0gV29tZW4sIGNvbG9yID0gIldvbWVuIikpKw0KICBsYWJzKHk9ICJQZXJjZW50YWdlIG9mIG9jY3VwYXRpb24iLCB4ID0gIlllYXIiLA0KICAgICAgIGNvbG9yID0gIkRlbW9ncmFwaGljIiwNCiAgICAgICB0aXRsZSA9ICJEZW1vZ3JhcGhpYyBCcmVha2Rvd24gb2YgUHJvZmZlc3Npb25hbCBvY2N1cGF0aW9ucyBmcm9tIHllYXJzIDIwMDUsMjAxMCwyMDE1LDIwMjAiKSsNCiAgdGhlbWVfbWluaW1hbCgpKw0KICBzY2FsZV9jb2xvcl9tYW51YWwobGFiZWxzID0gYygiQXNpYW4iLCAiQmxhY2siLCAiSC5MYXRpbm8iLCJXb21lbiIpLA0KICAgICAgICAgICAgICAgICAgICAgdmFsdWVzID0gYygicmVkIiwgIm9yYW5nZSIsICJkYXJrZ3JlZW4iLCAiYmx1ZSIpKQ0KDQpwcm9mZXNzaW9uYWxwbG90DQpgYGANCg0KDQojIyBLZXkgRmluZGluZ3M6IA0KDQoNCg0KQWRkIGEgbmV3IGNodW5rIGJ5IGNsaWNraW5nIHRoZSAqSW5zZXJ0IENodW5rKiBidXR0b24gb24gdGhlIHRvb2xiYXIgb3IgYnkgcHJlc3NpbmcgKkN0cmwrQWx0K0kqLg0KDQpXaGVuIHlvdSBzYXZlIHRoZSBub3RlYm9vaywgYW4gSFRNTCBmaWxlIGNvbnRhaW5pbmcgdGhlIGNvZGUgYW5kIG91dHB1dCB3aWxsIGJlIHNhdmVkIGFsb25nc2lkZSBpdCAoY2xpY2sgdGhlICpQcmV2aWV3KiBidXR0b24gb3IgcHJlc3MgKkN0cmwrU2hpZnQrSyogdG8gcHJldmlldyB0aGUgSFRNTCBmaWxlKS4NCg0KVGhlIHByZXZpZXcgc2hvd3MgeW91IGEgcmVuZGVyZWQgSFRNTCBjb3B5IG9mIHRoZSBjb250ZW50cyBvZiB0aGUgZWRpdG9yLiBDb25zZXF1ZW50bHksIHVubGlrZSAqS25pdCosICpQcmV2aWV3KiBkb2VzIG5vdCBydW4gYW55IFIgY29kZSBjaHVua3MuIEluc3RlYWQsIHRoZSBvdXRwdXQgb2YgdGhlIGNodW5rIHdoZW4gaXQgd2FzIGxhc3QgcnVuIGluIHRoZSBlZGl0b3IgaXMgZGlzcGxheWVkLg0K