Introduction
Every year over 37,000 people die in road car crashes in United States. An additional 2.35 million are injured or disabled. More than half of all road traffic deaths occur among young adults. Unless action is taken, road traffic injuries are predicted to become the fifth leading cause of death by 2030 (Mohanty and Gupta 2015) The statistics show how deadly are the American roads especially for young drivers. However apart from the new drivers, the risk of dying is also higher for older people involved in a car crash. Even though young inexperienced drivers have higher crash rates than older more experienced drivers in the United States, it is usually the older occupant who will suffer more in a car accident.
No research has been done to analyze probability of deaths in car crashes between the two most vulnerable age groups which are the young drivers and elderly drivers. Discovering the differences in the odds of deaths for people in different age groups as well as finding the possible causes of deaths of these people involved in car accidents might reduce the high fatality rate among the most vulnerable road occupants. This study aims to identify differences in odds of deaths among young and old drivers. More specifically to examine the impact of speed and age on fatality in car accidents. The main objective of the study is to investigate whether young drivers have higher tolerance to higher speed car crashes then older drivers.
Literature Review
Young drivers run a greater risk in road traffic but they are also the major cause of car accidents. The young driver could be defined as a person between 15 to 20-year-old who is legally permitted to operate a motor vehicle. In the United States car crashes are a leading cause of mortality among young people. In 2008, 12% (5864) and 11% (5420) of all drivers involved in fatal crashes (50,186) in the U.S. were young drivers aged 15–20 and 21–24 years old, respectively (Hassan and Abdel-Aty 2013) Many reasons contribute to young’s people high involvement in accidents like their inexperience, acceptance of higher levels of risk, sensation seeking, prestige-seeking, underestimation of risk, alcohol use, in-vehicle distractions (i.e., cell phone use while driving or presence of teen passengers, etc.) and their desire to reach the destination quicker (Maycock, Lockwood, and Lester 1991). Young people driving style is associated with high number of car crashes. Driving style refers to the way drivers habitually choose to drive and is an established pattern of driving behavior including speed choice, overtaking actions and attitudes to other road users (Taubman-Ben-Ari and Yehiel 2012). The driving style is associated with school performance and gender. According to a study by Asa Murray about young drivers involved in traffic accidents in Sweden (1998), young people without upper secondary education were over-represented among all groups of male drivers involved in injurious traffic accidents. Similarly, the same concerns female car drivers - the ones who had lower school marks and lower education attainment were involved in more car accidents - but this was less noticeable than for the male car drivers. When it comes to gender difference in driving styles, risky driving is associated with male drivers. Male drivers are also more frequent road users which might affect the number of accidents in which they are involved. In the research, we can find reports which indicate that men and young drivers tend to commit violations more frequently than women and older drivers, and that those who drive frequently violate traffic rules more often than those who drive less frequently. In contrast, female and older drivers committed more errors than male and young drivers (Aberg and Rimmo 1998).
Older drivers are believed to have better driving skills and thus get involved in fewer accidents. The driving style of adults is generally safer because of more experience, better judgment of road condition, and less impulsive and aggressive behavior than among young drivers. On the other hand, old age is often associated with functional decline and an increased risk of developing illnesses that may have an adverse effect on driving (Meng and Siren 2012).According to National Center for Statistics Analysis, there were 6,165 people 65 and older killed in traffic crashes in the United States in 2015, 18 percent of all traffic fatalities. This number in comparison to the percentage of young driver’s fatalities indicates that both age groups (15-24 and 65 +) have the highest average car crash fatality rate. Unlike young drivers, the fatalities among older people are not caused by bravado and higher involvement in car accidents, they are more susceptible to injury and fatalities from collisions because of the age-related medical issues (Johnston, Borkenhagen, and Scialfa 2015). Some research indicates that the accidents that include older drivers are caused by their physical condition. These conditions might be, for example, lower vision abilities, slower reaction time, fatigue and some other physical and mental health disabilities associated with older age. People who are 65 and older are additionally more likely to use medications which might affect their driving skills and judgment abilities. The results of a test of hazard perception used in Johnston K.’s study show that older drivers are slower than younger drivers at identifying and responding to dangerous condition, they are also able to track a smaller number of targets, like vehicles, pedestrians etc. while driving (Johnston, Borkenhagen, and Scialfa 2015). The health factors of older drivers might also affect their high fatality rate in car accidents. It can also influence the involvement or causation of car crashes. However, a study by Meng, & Siren. (2012) discusses the self-regulation effect in driving which is notable among older people or the ones who report poorer health. Self-regulation has generally been understood as a compensatory coping strategy for older drivers who, recognizing some physical, cognitive or functional impairment, purposely limit or restrict their driving, in order to maintain independence but reduce accident risk (Meng and Siren 2012). Older drivers with functional decline tend to self-regulate their driving more than healthy older drivers. The self-regulation phenomenon is also more common for females. Moreover, older females surrender their driving privileges earlier than males (Classen et al. 2013). Compared to males in older age, female drivers tend to avoid driving at night, in bad weather, in rush hour, on highways, and making complex maneuvers such as left-hand turns to limit their risk of getting involved in an accident.
The tolerance of injuries is different for all people. It is well known that the ability of the human body to withstand damage is a function of its inherent strength, i.e., the strength of the bones and soft tissues. Yet, the properties of the bones and tissues change as a function of the individual’s age (Margulies and Thibault 1992). Usually the car accidents lead to many injuries of different parts of body. However, regardless of seat belt use, the body regions most often injured during the car crash are head, upper and lower extremities and thorax (Page et al. 2012). The frequency and severity of injuries decreases for belted occupants in newer cars compared to older cars, whatever body regions. A study by Ann Malloy (2010) analyzed the types of serious head injuries sustained by adult motor vehicle crash occupants and how the types of head injuries sustained shifted with age. The results show that older head injury victims in motor vehicle collisions were more likely to sustain bleeding injuries than younger head injury victims. The bleeding injuries are linked with the high mortality rate thus the head injury might be the main reason of higher number of older people fatalities in car accidents. It is an argument to why younger people have a higher injury tolerance and lower odds of deaths in car crashes.
Higher speed driving is associated with more deadly accidents. Around one fifth of car accident fatalities would been survivable if drivers complied with speed limits (Aberg and Rimmo 1998). Despite that common fact, people still violate the law and drive faster than road regulations allow. One in every six drivers will receive a speeding ticket annually (Toledo, Musicant, and Lotan 2008). 10–20% of drivers exceed speed limits by over 10 km/h regularly (Leandro 2012). Driving speed increases the probability of being involved in a car accident. Moreover, the higher speed of driving increase the severity of possible injuries that may result (Etzioni et al. 2017). Obeying the speed limits would significantly reduce the number of crashes, serious injuries and deaths. An average reduction of as little as 2–5 km/h could lead to a reduction ranging from 10% up to at least 30% in crash related injuries (Leandro 2012).
Data and Methods
The data used in this paper is a NASS/CDS data set which is a part of the National Automotive Sampling System (NASS). This is US data, for 1997 - 2002, from police-reported car crashes in which there is a harmful event (to people or property), and from which at least one vehicle was towed. Data are restricted to front-seat occupants and include only a subset of the variables involved in accident
Both the drivers and front seat passengers who either survived or were fatally injured were included in the study (26217 people; 25037 alive, 1180 dead). The age of the car occupants contained in the study ranged from 16 to 97. The speed of driving was grouped into five categories (1 = 1-9km/h, 2 = 10-24km/h, 3 = 25-39km/h, 4 = 40-54km/h, 5 = 55+ km/h).
The analysis of the relationship between the variables that affect the odds of deaths in car crashes was conducted using the logistic regression models. The variables used in this research include the ones that increases and decreases the probability of deaths during a car crash. The variable used to predict the odds of deaths of the car occupants involved in an accident was treated as a dependent variable in the logistic regression models and changed to a binary 0/1 coding where “0” indicates survival and “1” indicates the death of the car occupant.
DESCRIPTION OF THE VARIABLES:
- Dead: factor with levels alive/dead
- Age: age of occupant in years
- Speed: ordered factor with levels (estimated impact speeds) 1-9km/h, 10-24, 25-39, 40-54, 55+
- Sex: a factor with levels f (female) m (male)
- Satbelt: a factor with levels: belted/none
Results
The logistic regression models predict (1) the odds of death in a car crash for people in different age (2) the odds of death in a car crash depending on speed (3) odds of death in a car crash for people in different age while controlling for speed. Furthermore, two additional models were used to discover the correlations between gender, speed of driving, age of a driver, and use of seat belts. All the results are presented in log odds coefficients.
1. Age difference in odds of death
The results show that age is a very significant factor which positively influences the odds of death. The older the car occupant is the greater the chances that the person will die in a car accident. It confirms the assumption that younger people have better tolerance to car crashes. It is especially true for a higher speed accidents where the odds of deaths for youth are considerable smaller than for older people.
1.1 The relationship between the age and death
GRAPH 1 Grey area indicates the 95% confidence interval

2. Speed influence on odds of death
Speed is an important factor that affects the odds of death. The results show that with the increase of speed the chances to die in a car crash also increases. For the car accident in a speed of 55+ km/h the chances to survive are very little comparing to the chances for a car accident in a speed of 1-24 km/h.
2.1 The relationship between speed of driving and the odds of death
GRAPH 2 Grey area indicates the 95% confidence interval

3. Age and Speed influence on odds of death
The results show how important the age of the occupant and the speed of driving are in predicting the probability of death. It is especially visible when we combine and test these two factors together.
Graph 3 show how the odds of death change for every speed category. The odds of deaths are sorted by different age groups (young = 18, middle-age = 33, old = 65). With the increase of speed, the difference in odds of dying between young and old people also increase. The figure show a significant difference in odds of deaths in higher speed car crashes for young and old car occupants. The odds of deaths are notably lower for young people who drove 55+ km/h than for older people. The results confirm the assumption that younger people have better tolerance to higher speed car crashes.
3.1 Age and speed influence on death (by age)
GRAPH 3 Band indicates the 95% confidence interval

Graph 4 show how the odds of deaths are increasing with the increase of age. The odds of deaths are sorted by the speed of driving. The results illustrate a significant difference in odds of deaths between low and high speed of driving during the accident. Higher speed is especially dangerous for older drivers.
3.2 Age and speed influence on death (by speed of driving)
GRAPH 4 Band indicates the 95% confidence interval

Comparison of Models
The comparison of all 3 logistic regression models in one table indicates that the third model reflects the results most scrupulously. It can be inferred from the Akaike Inf. Crit (AIC) showed at the bottom of the table. The AIC lowest value indicates the best fitted model comparing to other models in a table. In this case, it is a Model 3. It shows that age combined with speed of driving is the strongest predictor of the odds of death.
Interpretation of the models
MODEL 1: The logistic regression show the relationship between the age and odds of dying. The regression shows that with the increase of one unit of age, the odds of death increases 0.02. It confirms that car accidents are more dangerous for older people.
MODEL 2: The regression show the correlation between the speed of driving and the log odds of deaths. For people who had an accident in a speed of 10-24 km/h (speed 2), the chances to die are 0.71 higher than for people who crashed in a speed of 1-9km/h. For the speed of 25-39 km/h (speed 3) the chances to die are 2.17 higher, and for the speed of 40-54 km/h (speed 4) the chances to die are 3.38 higher than for people who drove 1-9 km/h. Lastly, for the speed of 55+ km/h (speed 5) the chances to die are 4.46 higher than for people who drove 1-9 km/h. We can see how the odds of death increases for every higher speed category.
MODEL 3: The model takes into account both factors: the age of the occupant and the speed of driving that influence odds of death during the car accident. Regression confirms that younger people have higher chances to survive the car crash comparing to older people and that speed of driving significantly affects the odds of deaths.
Age and Speed influence on Deaths prezented in Log Odds Coefficients
|
|
dead
|
|
(1)
|
(2)
|
(3)
|
|
Age
|
0.021***
|
|
0.031***
|
|
(0.001)
|
|
(0.002)
|
|
|
|
|
10-24km/h
|
|
0.712
|
0.630
|
|
|
(0.585)
|
(0.586)
|
|
|
|
|
25-39km/h
|
|
2.169***
|
2.130***
|
|
|
(0.581)
|
(0.581)
|
|
|
|
|
40-54km/h
|
|
3.393***
|
3.445***
|
|
|
(0.581)
|
(0.581)
|
|
|
|
|
55+ km/h
|
|
4.474***
|
4.644***
|
|
|
(0.581)
|
(0.581)
|
|
|
|
|
Constant
|
-3.914***
|
-5.428***
|
-6.688***
|
|
(0.072)
|
(0.578)
|
(0.583)
|
|
|
|
|
N
|
26,216
|
26,216
|
26,216
|
Log Likelihood
|
-4,715.861
|
-3,919.596
|
-3,752.672
|
Akaike Inf. Crit.
|
9,435.721
|
7,849.193
|
7,517.345
|
|
Notes:
|
***Significant at the 1 percent level.
|
|
**Significant at the 5 percent level.
|
|
*Significant at the 10 percent level.
|
|
The comparison of all 3 logistic regression models in one table. Third model is the best fit. It shows the relationship between the age of the occupant, a speed of driving and odds of death.
|
Additional Models
4. Gender and speed of driving
As previous research shows male drivers usually drive faster than female drivers. Graph 4 show the correlation between sex and a speed of driving. Males tend to get in a car crash at higher speeds than women (average speed of car crash for males is 55 km/h and for females is 20km/h).
4.1 Relationship between gender and speed of driving
GRAPH 4 Grey area indicates the 95% confidence interval

5. Use of seatbelts and deaths in different age groups
It is common knowledge that the use of seat belts saves lives during car accidents. Graph 7 show how important it is to use of seat belts for safety reasons. Significantly more people who weren’t belted died in a car crash. The regression model 5 show the relationship between the use of seat belts and age. The intention was to discover if the higher odds of deaths are affected by the seat belts use. The regression results show that people who are older use seat belts more often. The model indicates that high fatality rate among older drivers isn’t caused by the lack of seat belts. For young drivers, the results indicate much higher survival rate even without the seat belts fasten. The results confirm that it is the age difference that affect the odds of deaths in car crashes.
5.1 The relationship between the use of seatbelts and age
GRAPH 5 Grey area indicates the 95% confidence interval

5.2 Use of seatbelts and age effect on odds of death
GRAPH 6 Band indicates the 95% confidence interval

6. The relationship between state’s population and amount of fatal accidents in USA
When we look at the number of fatal accidents and the population across states, we can notice that the states which have higher population tend to have more fatal accidents. The map shows the intensity of fatal accidents in every state in the USA. The states that have the population higher than 19,384,453 people have also a bigger number of fatal accidents comparing to states with a lower population. The relationship can be especially visible while looking at the states like California, Texas or Florida, which have the highest population in USA - these states have also a very high amount of fatal car crashes which is indicated by a red color in both graphics. The comparison doesn’t take into consideration many other important factors like speed limits, different terrain, road or weather conditions, alcohol limits for driving, etc in every state.
6.1 The amount of fatal accidents across USA
GRAPH 7

6.2 USA population by states
GRAPH 8
Discussion
The results of the study demonstrate that age of the driver is the most significant predictor on the odds of deaths in accidents among passenger cars, light trucks and vans. With the increase of age the odds of death increases. The study also demonstrate that the speed of driving is dangerous for all people, but younger drivers have a greater tolerance to high speed accidents than older drivers. Even though older drivers tend to drive slower and use seat belts more often, the odds of death for them in comparison with young drivers are significantly larger. The survival of younger drivers is close to 100% for a low speed car accidents. Youths also have much survival rates compared to old people in high speed accidents. Beside the tendency of driving fast, young people tend to drive without their seat belts fasten. The lack of seat belts increases odds of deaths among young people but not as much as for older people.
Further studies could be conducted to investigate the types of car accidents that older people get into compared to youths, and if these crashes are somehow different then a younger drivers car accidents.
Bibliography
Aberg, Lars, and Per-Arne Rimmo. 1998. “Dimensions of Aberrant Driver Behaviour.” Ergonomics 41 (1). Taylor & Francis: 39–56.
Classen, Sherrilene, Yanning Wang, Alexander M Crizzle, Sandra M Winter, and Desiree N Lanford. 2013. “Gender Differences Among Older Drivers in a Comprehensive Driving Evaluation.” Accident Analysis & Prevention 61. Elsevier: 146–52.
Etzioni, Shelly, Ido Erev, Robert Ishaq, Wafa Elias, and Yoram Shiftan. 2017. “Self-Monitoring of Driving Speed.” Accident Analysis & Prevention 106. Elsevier: 76–81.
Hassan, Hany M, and Mohamed A Abdel-Aty. 2013. “Exploring the Safety Implications of Young Drivers’ Behavior, Attitudes and Perceptions.” Accident Analysis & Prevention 50. Elsevier: 361–70.
Johnston, Katherine A, David Borkenhagen, and Charles T Scialfa. 2015. “Driving Skills Training for Older Adults: An Assessment of Drivesharp.” Canadian Journal on Aging/La Revue Canadienne Du Vieillissement 34 (4). Cambridge University Press: 532–44.
Leandro, Mauricio. 2012. “Young Drivers and Speed Selection: A Model Guided by the Theory of Planned Behavior.” Transportation Research Part F: Traffic Psychology and Behaviour 15 (3). Elsevier: 219–32.
Margulies, Susan Sheps, and Lawrence E Thibault. 1992. “A Proposed Tolerance Criterion for Diffuse Axonal Injury in Man.” Journal of Biomechanics 25 (8). Elsevier: 917–23.
Maycock, G, CR Lockwood, and Julia F Lester. 1991. “The Accident Liability of Car Drivers.”
Meng, Annette, and Anu Siren. 2012. “Cognitive Problems, Self-Rated Changes in Driving Skills, Driving-Related Discomfort and Self-Regulation of Driving in Old Drivers.” Accident Analysis & Prevention 49. Elsevier: 322–29.
Mohanty, Malaya, and Ankit Gupta. 2015. “Factors Affecting Road Crash Modeling.” Journal of Transport Literature 9 (2). SciELO Brasil: 15–19.
Page, Yves, Sophie Cuny, Thierry Hermitte, and Maxime Labrousse. 2012. “A Comprehensive Overview of the Frequency and the Severity of Injuries Sustained by Car Occupants and Subsequent Implications in Terms of Injury Prevention.” In Annals of Advances in Automotive Medicine/Annual Scientific Conference, 56:165. Association for the Advancement of Automotive Medicine.
Taubman-Ben-Ari, Orit, and Dalia Yehiel. 2012. “Driving Styles and Their Associations with Personality and Motivation.” Accident Analysis & Prevention 45. Elsevier: 416–22.
Toledo, Tomer, Oren Musicant, and Tsippy Lotan. 2008. “In-Vehicle Data Recorders for Monitoring and Feedback on Drivers’ Behavior.” Transportation Research Part C: Emerging Technologies 16 (3). Elsevier: 320–31.
LS0tCnRpdGxlOiAiVGhlIFJlbGF0aW9uc2hpcCBCZXR3ZWVuIEFnZSBhbmQgRmF0YWxpdGllcyBpbiBDYXIgQ3Jhc2hlcyIKYXV0aG9yOiAiSm9hbm5hIFBvbGFuc2thIgpkYXRlOiAiMTEvMjIvMjAxNyIKb3V0cHV0OgogIGh0bWxfbm90ZWJvb2s6IGRlZmF1bHQKICBodG1sX2RvY3VtZW50OiBkZWZhdWx0CiAgcGRmX2RvY3VtZW50OiBkZWZhdWx0CiAgd29yZF9kb2N1bWVudDogZGVmYXVsdApiaWJsaW9ncmFwaHk6IHNvYzcxMi5iaWIKLS0tCgpgYGB7ciwgZXJyb3I9RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGluY2x1ZGU9RkFMU0UsIHJlc3VsdHM9J2hpZGUnfQpsaWJyYXJ5KERBQUcpCmxpYnJhcnkocmVhZHIpCmxpYnJhcnkoZ2dwbG90MikKbGlicmFyeShkcGx5cikKbGlicmFyeSh2aXNyZWcpCmxpYnJhcnkoc3RhcmdhemVyKQpsaWJyYXJ5KHRleHJlZykKbGlicmFyeShzZikKbGlicmFyeSh0bWFwKQpsaWJyYXJ5KHRpZ3JpcykKbGlicmFyeShzcGRlcCkKbGlicmFyeSh0bWFwdG9vbHMpCmxpYnJhcnkodG1hcCkKbGlicmFyeShzdHJpbmdyKQpsaWJyYXJ5KFplbGlnKQpsaWJyYXJ5KGdndGhlbWVzKQpsaWJyYXJ5KHBsb3RseSkKYGBgCgojIyMgPGZvbnQgY29sb3IgPSBncmV5PiBJbnRyb2R1Y3Rpb24gPC9mb250PgoKRXZlcnkgeWVhciBvdmVyIDM3LDAwMCBwZW9wbGUgZGllIGluIHJvYWQgY2FyIGNyYXNoZXMgaW4gVW5pdGVkIFN0YXRlcy4gQW4gYWRkaXRpb25hbCAyLjM1IG1pbGxpb24gYXJlIGluanVyZWQgb3IgZGlzYWJsZWQuIE1vcmUgdGhhbiBoYWxmIG9mIGFsbCByb2FkIHRyYWZmaWMgZGVhdGhzIG9jY3VyIGFtb25nIHlvdW5nIGFkdWx0cy4gVW5sZXNzIGFjdGlvbiBpcyB0YWtlbiwgcm9hZCB0cmFmZmljIGluanVyaWVzIGFyZSBwcmVkaWN0ZWQgdG8gYmVjb21lIHRoZSBmaWZ0aCBsZWFkaW5nIGNhdXNlIG9mIGRlYXRoIGJ5IDIwMzAgW0Btb2hhbnR5MjAxNWZhY3RvcnNdIFRoZSBzdGF0aXN0aWNzIHNob3cgaG93IGRlYWRseSBhcmUgdGhlIEFtZXJpY2FuIHJvYWRzIGVzcGVjaWFsbHkgZm9yIHlvdW5nIGRyaXZlcnMuIEhvd2V2ZXIgYXBhcnQgZnJvbSB0aGUgbmV3IGRyaXZlcnMsIHRoZSByaXNrIG9mIGR5aW5nIGlzIGFsc28gaGlnaGVyIGZvciBvbGRlciBwZW9wbGUgaW52b2x2ZWQgaW4gYSBjYXIgY3Jhc2guIEV2ZW4gdGhvdWdoIHlvdW5nIGluZXhwZXJpZW5jZWQgZHJpdmVycyBoYXZlIGhpZ2hlciBjcmFzaCByYXRlcyB0aGFuIG9sZGVyIG1vcmUgZXhwZXJpZW5jZWQgZHJpdmVycyBpbiB0aGUgVW5pdGVkIFN0YXRlcywgaXQgaXMgdXN1YWxseSB0aGUgb2xkZXIgb2NjdXBhbnQgd2hvIHdpbGwgc3VmZmVyIG1vcmUgaW4gYSBjYXIgYWNjaWRlbnQuCiAgICAKTm8gcmVzZWFyY2ggaGFzIGJlZW4gZG9uZSB0byBhbmFseXplIHByb2JhYmlsaXR5IG9mIGRlYXRocyBpbiBjYXIgY3Jhc2hlcyBiZXR3ZWVuIHRoZSB0d28gbW9zdCB2dWxuZXJhYmxlIGFnZSBncm91cHMgd2hpY2ggYXJlIHRoZSB5b3VuZyBkcml2ZXJzIGFuZCBlbGRlcmx5IGRyaXZlcnMuIERpc2NvdmVyaW5nIHRoZSBkaWZmZXJlbmNlcyBpbiB0aGUgb2RkcyBvZiBkZWF0aHMgZm9yIHBlb3BsZSBpbiBkaWZmZXJlbnQgYWdlIGdyb3VwcyBhcyB3ZWxsIGFzIGZpbmRpbmcgdGhlIHBvc3NpYmxlIGNhdXNlcyBvZiBkZWF0aHMgb2YgdGhlc2UgcGVvcGxlIGludm9sdmVkIGluIGNhciBhY2NpZGVudHMgbWlnaHQgcmVkdWNlIHRoZSBoaWdoIGZhdGFsaXR5IHJhdGUgYW1vbmcgdGhlIG1vc3QgdnVsbmVyYWJsZSByb2FkIG9jY3VwYW50cy4gVGhpcyBzdHVkeSBhaW1zIHRvIGlkZW50aWZ5IGRpZmZlcmVuY2VzIGluIG9kZHMgb2YgZGVhdGhzIGFtb25nIHlvdW5nIGFuZCBvbGQgZHJpdmVycy4gTW9yZSBzcGVjaWZpY2FsbHkgdG8gZXhhbWluZSB0aGUgaW1wYWN0IG9mIHNwZWVkIGFuZCBhZ2Ugb24gZmF0YWxpdHkgaW4gY2FyIGFjY2lkZW50cy4gVGhlIG1haW4gb2JqZWN0aXZlIG9mIHRoZSBzdHVkeSBpcyB0byBpbnZlc3RpZ2F0ZSB3aGV0aGVyIHlvdW5nIGRyaXZlcnMgaGF2ZSBoaWdoZXIgdG9sZXJhbmNlIHRvIGhpZ2hlciBzcGVlZCBjYXIgY3Jhc2hlcyB0aGVuIG9sZGVyIGRyaXZlcnMuIAoKCiMjIzxmb250IGNvbG9yID0gZ3JleT4gTGl0ZXJhdHVyZSBSZXZpZXcgPC9mb250PgpZb3VuZyBkcml2ZXJzIHJ1biBhIGdyZWF0ZXIgcmlzayBpbiByb2FkIHRyYWZmaWMgYnV0IHRoZXkgYXJlIGFsc28gdGhlIG1ham9yIGNhdXNlIG9mIGNhciBhY2NpZGVudHMuIFRoZSB5b3VuZyBkcml2ZXIgY291bGQgYmUgZGVmaW5lZCBhcyBhIHBlcnNvbiBiZXR3ZWVuIDE1IHRvIDIwLXllYXItb2xkIHdobyBpcyBsZWdhbGx5IHBlcm1pdHRlZCB0byBvcGVyYXRlIGEgbW90b3IgdmVoaWNsZS4gSW4gdGhlIFVuaXRlZCBTdGF0ZXMgY2FyIGNyYXNoZXMgYXJlIGEgbGVhZGluZyBjYXVzZSBvZiBtb3J0YWxpdHkgYW1vbmcgeW91bmcgcGVvcGxlLiBJbiAyMDA4LCAxMiUgKDU4NjQpIGFuZCAxMSUgKDU0MjApIG9mIGFsbCBkcml2ZXJzIGludm9sdmVkIGluIGZhdGFsIGNyYXNoZXMgKDUwLDE4NikgaW4gdGhlIFUuUy4gd2VyZSB5b3VuZyBkcml2ZXJzIGFnZWQgMTXigJMyMCBhbmQgMjHigJMyNCB5ZWFycyBvbGQsIHJlc3BlY3RpdmVseSBbQGhhc3NhbjIwMTNleHBsb3JpbmddCk1hbnkgcmVhc29ucyBjb250cmlidXRlIHRvIHlvdW5n4oCZcyBwZW9wbGUgaGlnaCBpbnZvbHZlbWVudCBpbiBhY2NpZGVudHMgbGlrZSB0aGVpciBpbmV4cGVyaWVuY2UsIGFjY2VwdGFuY2Ugb2YgaGlnaGVyIGxldmVscyBvZiByaXNrLCBzZW5zYXRpb24gc2Vla2luZywgcHJlc3RpZ2Utc2Vla2luZywgdW5kZXJlc3RpbWF0aW9uIG9mIHJpc2ssIGFsY29ob2wgdXNlLCBpbi12ZWhpY2xlIGRpc3RyYWN0aW9ucyAoaS5lLiwgY2VsbCBwaG9uZSB1c2Ugd2hpbGUgZHJpdmluZyBvciBwcmVzZW5jZSBvZiB0ZWVuIHBhc3NlbmdlcnMsIGV0Yy4pIGFuZCB0aGVpciBkZXNpcmUgdG8gcmVhY2ggdGhlIGRlc3RpbmF0aW9uIHF1aWNrZXIgW0BtYXljb2NrMTk5MWFjY2lkZW50XS4gWW91bmcgcGVvcGxlIGRyaXZpbmcgc3R5bGUgaXMgYXNzb2NpYXRlZCB3aXRoIGhpZ2ggbnVtYmVyIG9mIGNhciBjcmFzaGVzLiBEcml2aW5nIHN0eWxlIHJlZmVycyB0byB0aGUgd2F5IGRyaXZlcnMgaGFiaXR1YWxseSBjaG9vc2UgdG8gZHJpdmUgYW5kIGlzIGFuIGVzdGFibGlzaGVkIHBhdHRlcm4gb2YgZHJpdmluZyBiZWhhdmlvciBpbmNsdWRpbmcgc3BlZWQgY2hvaWNlLCBvdmVydGFraW5nIGFjdGlvbnMgYW5kIGF0dGl0dWRlcyB0byBvdGhlciByb2FkIHVzZXJzIFtAdGF1Ym1hbjIwMTJkcml2aW5nXS4gVGhlIGRyaXZpbmcgc3R5bGUgaXMgYXNzb2NpYXRlZCB3aXRoIHNjaG9vbCBwZXJmb3JtYW5jZSBhbmQgZ2VuZGVyLiBBY2NvcmRpbmcgdG8gYSBzdHVkeSBieSBBc2EgTXVycmF5IGFib3V0IHlvdW5nIGRyaXZlcnMgaW52b2x2ZWQgaW4gdHJhZmZpYyBhY2NpZGVudHMgaW4gU3dlZGVuICgxOTk4KSwgeW91bmcgcGVvcGxlIHdpdGhvdXQgdXBwZXIgc2Vjb25kYXJ5IGVkdWNhdGlvbiB3ZXJlIG92ZXItcmVwcmVzZW50ZWQgYW1vbmcgYWxsIGdyb3VwcyBvZiBtYWxlIGRyaXZlcnMgaW52b2x2ZWQgaW4gaW5qdXJpb3VzIHRyYWZmaWMgYWNjaWRlbnRzLiBTaW1pbGFybHksIHRoZSBzYW1lIGNvbmNlcm5zIGZlbWFsZSBjYXIgZHJpdmVycyAtIHRoZSBvbmVzIHdobyBoYWQgbG93ZXIgc2Nob29sIG1hcmtzIGFuZCBsb3dlciBlZHVjYXRpb24gYXR0YWlubWVudCB3ZXJlIGludm9sdmVkIGluIG1vcmUgY2FyIGFjY2lkZW50cyAtIGJ1dCB0aGlzIHdhcyBsZXNzIG5vdGljZWFibGUgdGhhbiBmb3IgdGhlIG1hbGUgY2FyIGRyaXZlcnMuCldoZW4gaXQgY29tZXMgdG8gZ2VuZGVyIGRpZmZlcmVuY2UgaW4gZHJpdmluZyBzdHlsZXMsIHJpc2t5IGRyaXZpbmcgaXMgYXNzb2NpYXRlZCB3aXRoIG1hbGUgZHJpdmVycy4gTWFsZSBkcml2ZXJzIGFyZSBhbHNvIG1vcmUgZnJlcXVlbnQgcm9hZCB1c2VycyB3aGljaCBtaWdodCBhZmZlY3QgdGhlIG51bWJlciBvZiBhY2NpZGVudHMgaW4gd2hpY2ggdGhleSBhcmUgaW52b2x2ZWQuIEluIHRoZSByZXNlYXJjaCwgd2UgY2FuIGZpbmQgcmVwb3J0cyB3aGljaCBpbmRpY2F0ZSB0aGF0IG1lbiBhbmQgeW91bmcgZHJpdmVycyB0ZW5kIHRvIGNvbW1pdCB2aW9sYXRpb25zIG1vcmUgZnJlcXVlbnRseSB0aGFuIHdvbWVuIGFuZCBvbGRlciBkcml2ZXJzLCBhbmQgdGhhdCB0aG9zZSB3aG8gZHJpdmUgZnJlcXVlbnRseSB2aW9sYXRlIHRyYWZmaWMgcnVsZXMgbW9yZSBvZnRlbiB0aGFuIHRob3NlIHdobyBkcml2ZSBsZXNzIGZyZXF1ZW50bHkuIEluIGNvbnRyYXN0LCBmZW1hbGUgYW5kIG9sZGVyIGRyaXZlcnMgY29tbWl0dGVkIG1vcmUgZXJyb3JzIHRoYW4gbWFsZSBhbmQgeW91bmcgZHJpdmVycyBbQGFiZXJnMTk5OGRpbWVuc2lvbnNdLgoKT2xkZXIgZHJpdmVycyBhcmUgYmVsaWV2ZWQgdG8gaGF2ZSBiZXR0ZXIgZHJpdmluZyBza2lsbHMgYW5kIHRodXMgZ2V0IGludm9sdmVkIGluIGZld2VyIGFjY2lkZW50cy4gVGhlIGRyaXZpbmcgc3R5bGUgb2YgYWR1bHRzIGlzIGdlbmVyYWxseSBzYWZlciBiZWNhdXNlIG9mIG1vcmUgZXhwZXJpZW5jZSwgYmV0dGVyIGp1ZGdtZW50IG9mIHJvYWQgY29uZGl0aW9uLCBhbmQgbGVzcyBpbXB1bHNpdmUgYW5kIGFnZ3Jlc3NpdmUgYmVoYXZpb3IgdGhhbiBhbW9uZyB5b3VuZyBkcml2ZXJzLiBPbiB0aGUgb3RoZXIgaGFuZCwgb2xkIGFnZSBpcyBvZnRlbiBhc3NvY2lhdGVkIHdpdGggZnVuY3Rpb25hbCBkZWNsaW5lIGFuZCBhbiBpbmNyZWFzZWQgcmlzayBvZiBkZXZlbG9waW5nIGlsbG5lc3NlcyB0aGF0IG1heSBoYXZlIGFuIGFkdmVyc2UgZWZmZWN0IG9uIGRyaXZpbmcgW0BtZW5nMjAxMmNvZ25pdGl2ZV0uQWNjb3JkaW5nIHRvIE5hdGlvbmFsIENlbnRlciBmb3IgU3RhdGlzdGljcyBBbmFseXNpcywgdGhlcmUgd2VyZSA2LDE2NSBwZW9wbGUgNjUgYW5kIG9sZGVyIGtpbGxlZCBpbiB0cmFmZmljIGNyYXNoZXMgaW4gdGhlIFVuaXRlZCBTdGF0ZXMgaW4gMjAxNSwgMTggcGVyY2VudCBvZiBhbGwgdHJhZmZpYyBmYXRhbGl0aWVzLiBUaGlzIG51bWJlciBpbiBjb21wYXJpc29uIHRvIHRoZSBwZXJjZW50YWdlIG9mIHlvdW5nIGRyaXZlcuKAmXMgZmF0YWxpdGllcyBpbmRpY2F0ZXMgdGhhdCBib3RoIGFnZSBncm91cHMgKDE1LTI0IGFuZCA2NSArKSBoYXZlIHRoZSBoaWdoZXN0IGF2ZXJhZ2UgY2FyIGNyYXNoIGZhdGFsaXR5IHJhdGUuIFVubGlrZSB5b3VuZyBkcml2ZXJzLCB0aGUgZmF0YWxpdGllcyBhbW9uZyBvbGRlciBwZW9wbGUgYXJlIG5vdCBjYXVzZWQgYnkgYnJhdmFkbyBhbmQgaGlnaGVyIGludm9sdmVtZW50IGluIGNhciBhY2NpZGVudHMsIHRoZXkgYXJlIG1vcmUgc3VzY2VwdGlibGUgdG8gaW5qdXJ5IGFuZCBmYXRhbGl0aWVzIGZyb20gY29sbGlzaW9ucyBiZWNhdXNlIG9mIHRoZSBhZ2UtcmVsYXRlZCBtZWRpY2FsIGlzc3VlcyBbQGpvaG5zdG9uMjAxNWRyaXZpbmddLgpTb21lIHJlc2VhcmNoIGluZGljYXRlcyB0aGF0IHRoZSBhY2NpZGVudHMgdGhhdCBpbmNsdWRlIG9sZGVyIGRyaXZlcnMgYXJlIGNhdXNlZCBieSB0aGVpciBwaHlzaWNhbCBjb25kaXRpb24uIFRoZXNlIGNvbmRpdGlvbnMgbWlnaHQgYmUsIGZvciBleGFtcGxlLCBsb3dlciB2aXNpb24gYWJpbGl0aWVzLCBzbG93ZXIgcmVhY3Rpb24gdGltZSwgZmF0aWd1ZSBhbmQgc29tZSBvdGhlciBwaHlzaWNhbCBhbmQgbWVudGFsIGhlYWx0aCBkaXNhYmlsaXRpZXMgYXNzb2NpYXRlZCB3aXRoIG9sZGVyIGFnZS4gUGVvcGxlIHdobyBhcmUgNjUgYW5kIG9sZGVyIGFyZSBhZGRpdGlvbmFsbHkgbW9yZSBsaWtlbHkgdG8gdXNlIG1lZGljYXRpb25zIHdoaWNoIG1pZ2h0IGFmZmVjdCB0aGVpciBkcml2aW5nIHNraWxscyBhbmQganVkZ21lbnQgYWJpbGl0aWVzLiBUaGUgcmVzdWx0cyBvZiBhIHRlc3Qgb2YgaGF6YXJkIHBlcmNlcHRpb24gdXNlZCBpbiBKb2huc3RvbiBLLuKAmXMgc3R1ZHkgc2hvdyB0aGF0IG9sZGVyIGRyaXZlcnMgYXJlIHNsb3dlciB0aGFuIHlvdW5nZXIgZHJpdmVycyBhdCBpZGVudGlmeWluZyBhbmQgcmVzcG9uZGluZyB0byBkYW5nZXJvdXMgY29uZGl0aW9uLCB0aGV5IGFyZSBhbHNvIGFibGUgdG8gdHJhY2sgYSBzbWFsbGVyIG51bWJlciBvZiB0YXJnZXRzLCBsaWtlIHZlaGljbGVzLCBwZWRlc3RyaWFucyBldGMuIHdoaWxlIGRyaXZpbmcgW0Bqb2huc3RvbjIwMTVkcml2aW5nXS4gVGhlIGhlYWx0aCBmYWN0b3JzIG9mIG9sZGVyIGRyaXZlcnMgbWlnaHQgYWxzbyBhZmZlY3QgdGhlaXIgaGlnaCBmYXRhbGl0eSByYXRlIGluIGNhciBhY2NpZGVudHMuIEl0IGNhbiBhbHNvIGluZmx1ZW5jZSB0aGUgaW52b2x2ZW1lbnQgb3IgY2F1c2F0aW9uIG9mIGNhciBjcmFzaGVzLiBIb3dldmVyLCBhIHN0dWR5IGJ5IE1lbmcsICYgU2lyZW4uICgyMDEyKSBkaXNjdXNzZXMgdGhlIHNlbGYtcmVndWxhdGlvbiBlZmZlY3QgaW4gZHJpdmluZyB3aGljaCBpcyBub3RhYmxlIGFtb25nIG9sZGVyIHBlb3BsZSBvciB0aGUgb25lcyB3aG8gcmVwb3J0IHBvb3JlciBoZWFsdGguIFNlbGYtcmVndWxhdGlvbiBoYXMgZ2VuZXJhbGx5IGJlZW4gdW5kZXJzdG9vZCBhcyBhIGNvbXBlbnNhdG9yeSBjb3Bpbmcgc3RyYXRlZ3kgZm9yIG9sZGVyIGRyaXZlcnMgd2hvLCByZWNvZ25pemluZyBzb21lIHBoeXNpY2FsLCBjb2duaXRpdmUgb3IgZnVuY3Rpb25hbCBpbXBhaXJtZW50LCBwdXJwb3NlbHkgbGltaXQgb3IgcmVzdHJpY3QgdGhlaXIgZHJpdmluZywgaW4gb3JkZXIgdG8gbWFpbnRhaW4gaW5kZXBlbmRlbmNlIGJ1dCByZWR1Y2UgYWNjaWRlbnQgcmlzayBbQG1lbmcyMDEyY29nbml0aXZlXS4gT2xkZXIgZHJpdmVycyB3aXRoIGZ1bmN0aW9uYWwgZGVjbGluZSB0ZW5kIHRvIHNlbGYtcmVndWxhdGUgdGhlaXIgZHJpdmluZyBtb3JlIHRoYW4gaGVhbHRoeSBvbGRlciBkcml2ZXJzLiBUaGUgc2VsZi1yZWd1bGF0aW9uIHBoZW5vbWVub24gaXMgYWxzbyBtb3JlIGNvbW1vbiBmb3IgZmVtYWxlcy4gTW9yZW92ZXIsIG9sZGVyIGZlbWFsZXMgc3VycmVuZGVyIHRoZWlyIGRyaXZpbmcgcHJpdmlsZWdlcyBlYXJsaWVyIHRoYW4gbWFsZXMgW0BjbGFzc2VuMjAxM2dlbmRlcl0uIENvbXBhcmVkIHRvIG1hbGVzIGluIG9sZGVyIGFnZSwgZmVtYWxlIGRyaXZlcnMgdGVuZCB0byBhdm9pZCBkcml2aW5nIGF0IG5pZ2h0LCBpbiBiYWQgd2VhdGhlciwgaW4gcnVzaCBob3VyLCBvbiBoaWdod2F5cywgYW5kIG1ha2luZyBjb21wbGV4IG1hbmV1dmVycyBzdWNoIGFzIGxlZnQtaGFuZCB0dXJucyB0byBsaW1pdCB0aGVpciByaXNrIG9mIGdldHRpbmcgaW52b2x2ZWQgaW4gYW4gYWNjaWRlbnQuIAoKVGhlIHRvbGVyYW5jZSBvZiBpbmp1cmllcyBpcyBkaWZmZXJlbnQgZm9yIGFsbCBwZW9wbGUuIEl0IGlzIHdlbGwga25vd24gdGhhdCB0aGUgYWJpbGl0eSBvZiB0aGUgaHVtYW4gYm9keSB0byB3aXRoc3RhbmQgZGFtYWdlIGlzIGEgZnVuY3Rpb24gb2YgaXRzIGluaGVyZW50IHN0cmVuZ3RoLCBpLmUuLCB0aGUgc3RyZW5ndGggb2YgdGhlIGJvbmVzIGFuZCBzb2Z0IHRpc3N1ZXMuIFlldCwgdGhlIHByb3BlcnRpZXMgb2YgdGhlIGJvbmVzIGFuZCB0aXNzdWVzIGNoYW5nZSBhcyBhIGZ1bmN0aW9uIG9mIHRoZSBpbmRpdmlkdWFsJ3MgYWdlIFtAbWFyZ3VsaWVzMTk5MnByb3Bvc2VkXS4gVXN1YWxseSB0aGUgY2FyIGFjY2lkZW50cyBsZWFkIHRvIG1hbnkgaW5qdXJpZXMgb2YgZGlmZmVyZW50IHBhcnRzIG9mIGJvZHkuIEhvd2V2ZXIsIHJlZ2FyZGxlc3Mgb2Ygc2VhdCBiZWx0IHVzZSwgdGhlIGJvZHkgcmVnaW9ucyBtb3N0IG9mdGVuIGluanVyZWQgZHVyaW5nIHRoZSBjYXIgY3Jhc2ggYXJlIGhlYWQsIHVwcGVyIGFuZCBsb3dlciBleHRyZW1pdGllcyBhbmQgdGhvcmF4IFtAcGFnZTIwMTJjb21wcmVoZW5zaXZlXS4gVGhlIGZyZXF1ZW5jeSBhbmQgc2V2ZXJpdHkgb2YgaW5qdXJpZXMgZGVjcmVhc2VzIGZvciBiZWx0ZWQgb2NjdXBhbnRzIGluIG5ld2VyIGNhcnMgY29tcGFyZWQgdG8gb2xkZXIgY2Fycywgd2hhdGV2ZXIgYm9keSByZWdpb25zLiBBIHN0dWR5IGJ5IEFubiBNYWxsb3kgKDIwMTApIGFuYWx5emVkIHRoZSB0eXBlcyBvZiBzZXJpb3VzIGhlYWQgaW5qdXJpZXMgc3VzdGFpbmVkIGJ5IGFkdWx0IG1vdG9yIHZlaGljbGUgY3Jhc2ggb2NjdXBhbnRzIGFuZCBob3cgdGhlIHR5cGVzIG9mIGhlYWQgaW5qdXJpZXMgc3VzdGFpbmVkIHNoaWZ0ZWQgd2l0aCBhZ2UuIFRoZSByZXN1bHRzIHNob3cgdGhhdCBvbGRlciBoZWFkIGluanVyeSB2aWN0aW1zIGluIG1vdG9yIHZlaGljbGUgY29sbGlzaW9ucyB3ZXJlIG1vcmUgbGlrZWx5IHRvIHN1c3RhaW4gYmxlZWRpbmcgaW5qdXJpZXMgdGhhbiB5b3VuZ2VyIGhlYWQgaW5qdXJ5IHZpY3RpbXMuIFRoZSBibGVlZGluZyBpbmp1cmllcyBhcmUgbGlua2VkIHdpdGggdGhlIGhpZ2ggbW9ydGFsaXR5IHJhdGUgdGh1cyB0aGUgaGVhZCBpbmp1cnkgbWlnaHQgYmUgdGhlIG1haW4gcmVhc29uIG9mIGhpZ2hlciBudW1iZXIgb2Ygb2xkZXIgcGVvcGxlIGZhdGFsaXRpZXMgaW4gY2FyIGFjY2lkZW50cy4gSXQgaXMgYW4gYXJndW1lbnQgdG8gd2h5IHlvdW5nZXIgcGVvcGxlIGhhdmUgYSBoaWdoZXIgaW5qdXJ5IHRvbGVyYW5jZSBhbmQgbG93ZXIgb2RkcyBvZiBkZWF0aHMgaW4gY2FyIGNyYXNoZXMuCgpIaWdoZXIgc3BlZWQgZHJpdmluZyBpcyBhc3NvY2lhdGVkIHdpdGggbW9yZSBkZWFkbHkgYWNjaWRlbnRzLiBBcm91bmQgb25lIGZpZnRoIG9mIGNhciBhY2NpZGVudCBmYXRhbGl0aWVzIHdvdWxkIGJlZW4gc3Vydml2YWJsZSBpZiBkcml2ZXJzIGNvbXBsaWVkIHdpdGggc3BlZWQgbGltaXRzIFtAYWJlcmcxOTk4ZGltZW5zaW9uc10uIERlc3BpdGUgdGhhdCBjb21tb24gZmFjdCwgcGVvcGxlIHN0aWxsIHZpb2xhdGUgdGhlIGxhdyBhbmQgZHJpdmUgZmFzdGVyIHRoYW4gcm9hZCByZWd1bGF0aW9ucyBhbGxvdy4gT25lIGluIGV2ZXJ5IHNpeCBkcml2ZXJzIHdpbGwgcmVjZWl2ZSBhIHNwZWVkaW5nIHRpY2tldCBhbm51YWxseSBbQHRvbGVkbzIwMDh2ZWhpY2xlXS4gMTDigJMyMCUgb2YgZHJpdmVycyBleGNlZWQgc3BlZWQgbGltaXRzIGJ5IG92ZXIgMTAga20vaCByZWd1bGFybHkgW0BsZWFuZHJvMjAxMnlvdW5nXS4gRHJpdmluZyBzcGVlZCBpbmNyZWFzZXMgdGhlIHByb2JhYmlsaXR5IG9mIGJlaW5nIGludm9sdmVkIGluIGEgY2FyIGFjY2lkZW50LiBNb3Jlb3ZlciwgdGhlIGhpZ2hlciBzcGVlZCBvZiBkcml2aW5nIGluY3JlYXNlIHRoZSBzZXZlcml0eSBvZiBwb3NzaWJsZSBpbmp1cmllcyB0aGF0IG1heSByZXN1bHQgW0BldHppb25pMjAxN3NlbGZdLiBPYmV5aW5nIHRoZSBzcGVlZCBsaW1pdHMgd291bGQgc2lnbmlmaWNhbnRseSByZWR1Y2UgdGhlIG51bWJlciBvZiBjcmFzaGVzLCBzZXJpb3VzIGluanVyaWVzIGFuZCBkZWF0aHMuIEFuIGF2ZXJhZ2UgcmVkdWN0aW9uIG9mIGFzIGxpdHRsZSBhcyAy4oCTNSBrbS9oIGNvdWxkIGxlYWQgdG8gYSByZWR1Y3Rpb24gcmFuZ2luZyBmcm9tIDEwJSB1cCB0byBhdCBsZWFzdCAzMCUgaW4gY3Jhc2ggcmVsYXRlZCBpbmp1cmllcyBbQGxlYW5kcm8yMDEyeW91bmddLgoKCgojIyMgPGZvbnQgY29sb3IgPSBncmV5PiBEYXRhIGFuZCBNZXRob2RzIDwvZm9udD4KClRoZSBkYXRhIHVzZWQgaW4gdGhpcyBwYXBlciBpcyBhIE5BU1MvQ0RTIGRhdGEgc2V0IHdoaWNoIGlzIGEgcGFydCBvZiB0aGUgTmF0aW9uYWwgQXV0b21vdGl2ZSBTYW1wbGluZyBTeXN0ZW0gKE5BU1MpLiBUaGlzIGlzIFVTIGRhdGEsIGZvciAxOTk3IC0gMjAwMiwgZnJvbSBwb2xpY2UtcmVwb3J0ZWQgY2FyIGNyYXNoZXMgaW4gd2hpY2ggdGhlcmUgaXMgYSBoYXJtZnVsIGV2ZW50ICh0byBwZW9wbGUgb3IgcHJvcGVydHkpLCBhbmQgZnJvbSB3aGljaCBhdCBsZWFzdCBvbmUgdmVoaWNsZSB3YXMgdG93ZWQuIERhdGEgYXJlIHJlc3RyaWN0ZWQgdG8gZnJvbnQtc2VhdCBvY2N1cGFudHMgYW5kIGluY2x1ZGUgb25seSBhIHN1YnNldCBvZiB0aGUgdmFyaWFibGVzIGludm9sdmVkIGluIGFjY2lkZW50CgpCb3RoIHRoZSBkcml2ZXJzIGFuZCBmcm9udCBzZWF0IHBhc3NlbmdlcnMgd2hvIGVpdGhlciBzdXJ2aXZlZCBvciB3ZXJlIGZhdGFsbHkgaW5qdXJlZCB3ZXJlIGluY2x1ZGVkIGluIHRoZSBzdHVkeSAoMjYyMTcgcGVvcGxlOyAyNTAzNyBhbGl2ZSwgMTE4MCBkZWFkKS4gVGhlIGFnZSBvZiB0aGUgY2FyIG9jY3VwYW50cyBjb250YWluZWQgaW4gdGhlIHN0dWR5IHJhbmdlZCBmcm9tIDE2IHRvIDk3LiBUaGUgc3BlZWQgb2YgZHJpdmluZyB3YXMgZ3JvdXBlZCBpbnRvIGZpdmUgY2F0ZWdvcmllcyAoMSA9IDEtOWttL2gsIDIgPSAxMC0yNGttL2gsIDMgPSAyNS0zOWttL2gsIDQgPSA0MC01NGttL2gsIDUgPSA1NSsga20vaCkuIAoKVGhlIGFuYWx5c2lzIG9mIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGUgdmFyaWFibGVzIHRoYXQgYWZmZWN0IHRoZSBvZGRzIG9mIGRlYXRocyBpbiBjYXIgY3Jhc2hlcyB3YXMgY29uZHVjdGVkIHVzaW5nIHRoZSBsb2dpc3RpYyByZWdyZXNzaW9uIG1vZGVscy4gVGhlIHZhcmlhYmxlcyB1c2VkIGluIHRoaXMgcmVzZWFyY2ggaW5jbHVkZSB0aGUgb25lcyB0aGF0IGluY3JlYXNlcyBhbmQgZGVjcmVhc2VzIHRoZSBwcm9iYWJpbGl0eSBvZiBkZWF0aHMgZHVyaW5nIGEgY2FyIGNyYXNoLiBUaGUgdmFyaWFibGUgdXNlZCB0byBwcmVkaWN0IHRoZSBvZGRzIG9mIGRlYXRocyBvZiB0aGUgY2FyIG9jY3VwYW50cyBpbnZvbHZlZCBpbiBhbiBhY2NpZGVudCB3YXMgdHJlYXRlZCBhcyBhIGRlcGVuZGVudCB2YXJpYWJsZSBpbiB0aGUgbG9naXN0aWMgcmVncmVzc2lvbiBtb2RlbHMgYW5kIGNoYW5nZWQgdG8gYSBiaW5hcnkgMC8xIGNvZGluZyB3aGVyZSDigJww4oCdIGluZGljYXRlcyBzdXJ2aXZhbCBhbmQg4oCcMeKAnSBpbmRpY2F0ZXMgdGhlIGRlYXRoIG9mIHRoZSBjYXIgb2NjdXBhbnQuCgoKREVTQ1JJUFRJT04gT0YgVEhFIFZBUklBQkxFUzoKCjEuICoqRGVhZDoqKiBmYWN0b3Igd2l0aCBsZXZlbHMgYWxpdmUvZGVhZAoyLiAqKkFnZToqKiBhZ2Ugb2Ygb2NjdXBhbnQgaW4geWVhcnMKMy4gKipTcGVlZDoqKiBvcmRlcmVkIGZhY3RvciB3aXRoIGxldmVscyAoZXN0aW1hdGVkIGltcGFjdCBzcGVlZHMpIDEtOWttL2gsIDEwLTI0LCAyNS0zOSwgNDAtNTQsIDU1Kwo0LiAqKlNleDoqKiBhIGZhY3RvciB3aXRoIGxldmVscyBmIChmZW1hbGUpIG0gKG1hbGUpCjUuICoqU2F0YmVsdDoqKiBhIGZhY3RvciB3aXRoIGxldmVsczogYmVsdGVkL25vbmUKCmBgYHtyLCBlY2hvPUZBTFNFLCBlcnJvcj1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0KbmFzc0NEUzIgPC0gbmFzc0NEUyAlPiUKICBmaWx0ZXIoIWlzLm5hKHllYXJWZWgpKSAlPiUKICBtdXRhdGUoY2FyYWdlID0geWVhcmFjYyAtIHllYXJWZWgsCiAgICAgICAgIHNlYXRiZWx0ID0gYXMuZmFjdG9yKHNlYXRiZWx0KSwKICAgICAgICAgc2V4ID0gYXMuZmFjdG9yKHNleCksCiAgICAgICAgIGdlbmRlciA9IHNleCwKICAgICAgICAgZ2VuZGVyID0gc2ptaXNjOjpyZWMoZ2VuZGVyLCByZWMgPSAiZj0wOyBtPTEiKSwKICAgICAgICAgZGVhZCA9IHNqbWlzYzo6cmVjKGRlYWQsIHJlYyA9ICJhbGl2ZT0wOyBkZWFkPTEiKSwgICMwID0gYWxpdmUsIDE9IGRlYXRoCiAgICAgICAgc3BlZWQgPSBkdmNhdCwKICAgICAgICAgc3BlZWQgPSBzam1pc2M6OnJlYyhzcGVlZCwgcmVjID0gIjEtOWttL2g9MTsgMTAtMjQ9MjsgMjUtMzk9MzsgNDAtNTQ9NDsgICA1NSs9NSIpKSU+JQpzZWxlY3QoZGVhZCwgYWdlT0ZvY2MsIGR2Y2F0LCBzcGVlZCwgc2V4LCBzZWF0YmVsdCkKaGVhZChuYXNzQ0RTMikKYGBgCgoKIyMjIDxmb250IGNvbG9yID0gZ3JleT4gUmVzdWx0cyA8L2ZvbnQ+ClRoZSBsb2dpc3RpYyByZWdyZXNzaW9uIG1vZGVscyBwcmVkaWN0ICgxKSB0aGUgb2RkcyBvZiBkZWF0aCBpbiBhIGNhciBjcmFzaCBmb3IgcGVvcGxlIGluIGRpZmZlcmVudCBhZ2UgKDIpIHRoZSBvZGRzIG9mIGRlYXRoIGluIGEgY2FyIGNyYXNoIGRlcGVuZGluZyBvbiBzcGVlZCAoMykgb2RkcyBvZiBkZWF0aCBpbiBhIGNhciBjcmFzaCBmb3IgcGVvcGxlIGluIGRpZmZlcmVudCBhZ2Ugd2hpbGUgY29udHJvbGxpbmcgZm9yIHNwZWVkLiBGdXJ0aGVybW9yZSwgdHdvIGFkZGl0aW9uYWwgbW9kZWxzIHdlcmUgdXNlZCB0byBkaXNjb3ZlciB0aGUgY29ycmVsYXRpb25zIGJldHdlZW4gZ2VuZGVyLCBzcGVlZCBvZiBkcml2aW5nLCBhZ2Ugb2YgYSBkcml2ZXIsIGFuZCB1c2Ugb2Ygc2VhdCBiZWx0cy4gQWxsIHRoZSByZXN1bHRzIGFyZSBwcmVzZW50ZWQgaW4gbG9nIG9kZHMgY29lZmZpY2llbnRzLgoKIyMjIyA8Zm9udCBjb2xvciA9IGdyZXk+IDEuCUFnZSBkaWZmZXJlbmNlIGluIG9kZHMgb2YgZGVhdGggPC9mb250PgpUaGUgcmVzdWx0cyBzaG93IHRoYXQgYWdlIGlzIGEgdmVyeSBzaWduaWZpY2FudCBmYWN0b3Igd2hpY2ggcG9zaXRpdmVseSBpbmZsdWVuY2VzIHRoZSBvZGRzIG9mIGRlYXRoLiBUaGUgb2xkZXIgdGhlIGNhciBvY2N1cGFudCBpcyB0aGUgZ3JlYXRlciB0aGUgY2hhbmNlcyB0aGF0IHRoZSBwZXJzb24gd2lsbCBkaWUgaW4gYSBjYXIgYWNjaWRlbnQuIEl0IGNvbmZpcm1zIHRoZSBhc3N1bXB0aW9uIHRoYXQgeW91bmdlciBwZW9wbGUgaGF2ZSBiZXR0ZXIgdG9sZXJhbmNlIHRvIGNhciBjcmFzaGVzLiBJdCBpcyBlc3BlY2lhbGx5IHRydWUgZm9yIGEgaGlnaGVyIHNwZWVkIGFjY2lkZW50cyB3aGVyZSB0aGUgb2RkcyBvZiBkZWF0aHMgZm9yIHlvdXRoIGFyZSBjb25zaWRlcmFibGUgc21hbGxlciB0aGFuIGZvciBvbGRlciBwZW9wbGUuCgoKIyMjIyA8Zm9udCBjb2xvciA9IGdyZXk+IDEuMSBUaGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIGFnZSBhbmQgZGVhdGggPC9mb250PgoqKkdSQVBIIDEqKgpHcmV5IGFyZWEgaW5kaWNhdGVzIHRoZSA5NSUgY29uZmlkZW5jZSBpbnRlcnZhbApgYGB7ciwgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0KI01PREVMIDEKbTAgPC0gZ2xtKGRlYWQgfiBhZ2VPRm9jYywgZmFtaWx5ID0gYmlub21pYWwsIGRhdGEgPSBuYXNzQ0RTMikKdmlzcmVnKG0wLCAiYWdlT0ZvY2MiLCBzY2FsZSA9ICJyZXNwb25zZSIsIHJ1ZyA9IEZBTFNFLCB4bGFiID0gIkFnZSIsIHlsYWIgPSAiTG9nIG9kZHMgb2YgZGVhdGgiKQpgYGAKCgojIyMjIDxmb250IGNvbG9yID0gZ3JleT4gMi4JU3BlZWQgaW5mbHVlbmNlIG9uIG9kZHMgb2YgZGVhdGggPC9mb250PgpTcGVlZCBpcyBhbiBpbXBvcnRhbnQgZmFjdG9yIHRoYXQgYWZmZWN0cyB0aGUgb2RkcyBvZiBkZWF0aC4gVGhlIHJlc3VsdHMgc2hvdyB0aGF0IHdpdGggdGhlIGluY3JlYXNlIG9mIHNwZWVkIHRoZSBjaGFuY2VzIHRvIGRpZSBpbiBhIGNhciBjcmFzaCBhbHNvIGluY3JlYXNlcy4gRm9yIHRoZSBjYXIgYWNjaWRlbnQgaW4gYSBzcGVlZCBvZiA1NSsga20vaCB0aGUgY2hhbmNlcyB0byBzdXJ2aXZlIGFyZSB2ZXJ5IGxpdHRsZSBjb21wYXJpbmcgdG8gdGhlIGNoYW5jZXMgZm9yIGEgY2FyIGFjY2lkZW50IGluIGEgc3BlZWQgb2YgMS0yNCBrbS9oLgoKCiMjIyMgPGZvbnQgY29sb3IgPSBncmV5PiAyLjEgVGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHNwZWVkIG9mIGRyaXZpbmcgYW5kIHRoZSBvZGRzIG9mIGRlYXRoIDwvZm9udD4KKipHUkFQSCAyKioKR3JleSBhcmVhIGluZGljYXRlcyB0aGUgOTUlIGNvbmZpZGVuY2UgaW50ZXJ2YWwKYGBge3IsIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9CiNNT0RFTCAyCm0xIDwtIGdsbShkZWFkIH4gZHZjYXQsIGZhbWlseSA9IGJpbm9taWFsLCBkYXRhID0gbmFzc0NEUzIpCnZpc3JlZyhtMSwgImR2Y2F0Iiwgc2NhbGUgPSAicmVzcG9uc2UiLCBydWcgPSBGQUxTRSwgeGxhYiA9ICJTcGVlZCBvZiBEcml2aW5nIiwgeWxhYiA9ICJMb2cgb2RkcyBvZiBkZWF0aCIpCmBgYAoKCiMjIyMgPGZvbnQgY29sb3IgPSBncmV5PiAzLglBZ2UgYW5kIFNwZWVkIGluZmx1ZW5jZSBvbiBvZGRzIG9mIGRlYXRoIDwvZm9udD4KVGhlIHJlc3VsdHMgc2hvdyBob3cgaW1wb3J0YW50IHRoZSBhZ2Ugb2YgdGhlIG9jY3VwYW50IGFuZCB0aGUgc3BlZWQgb2YgZHJpdmluZyBhcmUgaW4gcHJlZGljdGluZyB0aGUgcHJvYmFiaWxpdHkgb2YgZGVhdGguIEl0IGlzIGVzcGVjaWFsbHkgdmlzaWJsZSB3aGVuIHdlIGNvbWJpbmUgYW5kIHRlc3QgdGhlc2UgdHdvIGZhY3RvcnMgdG9nZXRoZXIuCgpHcmFwaCAzIHNob3cgaG93IHRoZSBvZGRzIG9mIGRlYXRoIGNoYW5nZSBmb3IgZXZlcnkgc3BlZWQgY2F0ZWdvcnkuIFRoZSBvZGRzIG9mIGRlYXRocyBhcmUgc29ydGVkIGJ5IGRpZmZlcmVudCBhZ2UgZ3JvdXBzICh5b3VuZyA9IDE4LCBtaWRkbGUtYWdlID0gMzMsIG9sZCA9IDY1KS4gV2l0aCB0aGUgaW5jcmVhc2Ugb2Ygc3BlZWQsIHRoZSBkaWZmZXJlbmNlIGluIG9kZHMgb2YgZHlpbmcgYmV0d2VlbiB5b3VuZyBhbmQgb2xkIHBlb3BsZSBhbHNvIGluY3JlYXNlLgpUaGUgZmlndXJlIHNob3cgYSBzaWduaWZpY2FudCBkaWZmZXJlbmNlIGluIG9kZHMgb2YgZGVhdGhzIGluIGhpZ2hlciBzcGVlZCBjYXIgY3Jhc2hlcyBmb3IgeW91bmcgYW5kIG9sZCBjYXIgb2NjdXBhbnRzLiBUaGUgb2RkcyBvZiBkZWF0aHMgYXJlIG5vdGFibHkgbG93ZXIgZm9yIHlvdW5nIHBlb3BsZSB3aG8gZHJvdmUgNTUrIGttL2ggdGhhbiBmb3Igb2xkZXIgcGVvcGxlLiBUaGUgcmVzdWx0cyBjb25maXJtIHRoZSBhc3N1bXB0aW9uIHRoYXQgeW91bmdlciBwZW9wbGUgaGF2ZSBiZXR0ZXIgdG9sZXJhbmNlIHRvIGhpZ2hlciBzcGVlZCBjYXIgY3Jhc2hlcy4KCgojIyMjICA8Zm9udCBjb2xvciA9IGdyZXk+IDMuMSBBZ2UgYW5kIHNwZWVkIGluZmx1ZW5jZSBvbiBkZWF0aCAoYnkgYWdlKSA8L2ZvbnQ+CioqR1JBUEggMyoqIApCYW5kIGluZGljYXRlcyB0aGUgOTUlIGNvbmZpZGVuY2UgaW50ZXJ2YWwKYGBge3IsIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9CiNNT0RFTCAzCm0yIDwtIGdsbShkZWFkIH4gYWdlT0ZvY2MgKyBkdmNhdCwgZmFtaWx5ID0gYmlub21pYWwsIGRhdGEgPSBuYXNzQ0RTMikKdmlzcmVnKG0yLCAiZHZjYXQiLCBieSA9ICJhZ2VPRm9jYyIsIHJ1ZyA9IEZBTFNFLCBzY2FsZSA9ICJyZXNwb25zZSIsIG92ZXJsYXk9IFRSVUUsIHhsYWIgPSAiU3BlZWQgb2YgRHJpdmluZyIsIHlsYWIgPSAiTG9nIG9kZHMgb2YgZGVhdGgiKQpgYGAKCgpHcmFwaCA0IHNob3cgaG93IHRoZSBvZGRzIG9mIGRlYXRocyBhcmUgaW5jcmVhc2luZyB3aXRoIHRoZSBpbmNyZWFzZSBvZiBhZ2UuClRoZSBvZGRzIG9mIGRlYXRocyBhcmUgc29ydGVkIGJ5IHRoZSBzcGVlZCBvZiBkcml2aW5nLiBUaGUgcmVzdWx0cyBpbGx1c3RyYXRlIGEgc2lnbmlmaWNhbnQgZGlmZmVyZW5jZSBpbiBvZGRzIG9mIGRlYXRocyBiZXR3ZWVuIGxvdyBhbmQgaGlnaCBzcGVlZCBvZiBkcml2aW5nIGR1cmluZyB0aGUgYWNjaWRlbnQuIEhpZ2hlciBzcGVlZCBpcyBlc3BlY2lhbGx5IGRhbmdlcm91cyBmb3Igb2xkZXIgZHJpdmVycy4KCgojIyMjICA8Zm9udCBjb2xvciA9IGdyZXk+IDMuMiBBZ2UgYW5kIHNwZWVkIGluZmx1ZW5jZSBvbiBkZWF0aCAoYnkgc3BlZWQgb2YgZHJpdmluZykgPC9mb250PgoqKkdSQVBIIDQqKgpCYW5kIGluZGljYXRlcyB0aGUgOTUlIGNvbmZpZGVuY2UgaW50ZXJ2YWwKYGBge3IsIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9CiNNT0RFTCAzCnZpc3JlZyhtMiwgImFnZU9Gb2NjIiwgYnkgPSAiZHZjYXQiLCBydWcgPSBGQUxTRSAsIHNjYWxlID0gInJlc3BvbnNlIixvdmVybGF5PSBUUlVFLCB4bGFiID0gIkFnZSIsIHlsYWIgPSAiTG9nIG9kZHMgb2YgZGVhdGgiKSAKYGBgCgoKIyMjIDxmb250IGNvbG9yID0gZ3JleT4gQ29tcGFyaXNvbiBvZiBNb2RlbHMgPC9mb250PgpUaGUgY29tcGFyaXNvbiBvZiBhbGwgMyBsb2dpc3RpYyByZWdyZXNzaW9uIG1vZGVscyBpbiBvbmUgdGFibGUgaW5kaWNhdGVzIHRoYXQgdGhlIHRoaXJkIG1vZGVsIHJlZmxlY3RzIHRoZSByZXN1bHRzIG1vc3Qgc2NydXB1bG91c2x5LiBJdCBjYW4gYmUgaW5mZXJyZWQgZnJvbSB0aGUgQWthaWtlIEluZi4gQ3JpdCAoQUlDKSBzaG93ZWQgYXQgdGhlIGJvdHRvbSBvZiB0aGUgdGFibGUuIFRoZSBBSUMgbG93ZXN0IHZhbHVlIGluZGljYXRlcyB0aGUgYmVzdCBmaXR0ZWQgbW9kZWwgY29tcGFyaW5nIHRvIG90aGVyIG1vZGVscyBpbiBhIHRhYmxlLiBJbiB0aGlzIGNhc2UsIGl0IGlzIGEgTW9kZWwgMy4gSXQgc2hvd3MgdGhhdCBhZ2UgY29tYmluZWQgd2l0aCBzcGVlZCBvZiBkcml2aW5nIGlzIHRoZSBzdHJvbmdlc3QgcHJlZGljdG9yIG9mIHRoZSBvZGRzIG9mIGRlYXRoLgoKIyMjIyA8Zm9udCBjb2xvciA9IGdyZXk+IEludGVycHJldGF0aW9uIG9mIHRoZSBtb2RlbHMgPC9mb250PgoKKipNT0RFTCAxOioqIFRoZSBsb2dpc3RpYyByZWdyZXNzaW9uIHNob3cgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZSBhZ2UgYW5kIG9kZHMgb2YgZHlpbmcuIFRoZSByZWdyZXNzaW9uIHNob3dzIHRoYXQgd2l0aCB0aGUgaW5jcmVhc2Ugb2Ygb25lIHVuaXQgb2YgYWdlLCB0aGUgb2RkcyBvZiBkZWF0aCBpbmNyZWFzZXMgMC4wMi4gSXQgY29uZmlybXMgdGhhdCBjYXIgYWNjaWRlbnRzIGFyZSBtb3JlIGRhbmdlcm91cyBmb3Igb2xkZXIgcGVvcGxlLgoKKipNT0RFTCAyOioqIFRoZSByZWdyZXNzaW9uIHNob3cgdGhlIGNvcnJlbGF0aW9uIGJldHdlZW4gdGhlIHNwZWVkIG9mIGRyaXZpbmcgYW5kIHRoZSBsb2cgb2RkcyBvZiBkZWF0aHMuIEZvciBwZW9wbGUgd2hvIGhhZCBhbiBhY2NpZGVudCBpbiBhIHNwZWVkIG9mIDEwLTI0IGttL2ggKHNwZWVkIDIpLCB0aGUgY2hhbmNlcyB0byBkaWUgYXJlIDAuNzEgaGlnaGVyIHRoYW4gZm9yIHBlb3BsZSB3aG8gY3Jhc2hlZCBpbiBhIHNwZWVkIG9mIDEtOWttL2guIEZvciB0aGUgc3BlZWQgb2YgMjUtMzkga20vaCAoc3BlZWQgMykgdGhlIGNoYW5jZXMgdG8gZGllIGFyZSAyLjE3IGhpZ2hlciwgYW5kIGZvciB0aGUgc3BlZWQgb2YgNDAtNTQga20vaCAoc3BlZWQgNCkgdGhlIGNoYW5jZXMgdG8gZGllIGFyZSAzLjM4IGhpZ2hlciB0aGFuIGZvciBwZW9wbGUgd2hvIGRyb3ZlIDEtOSBrbS9oLiBMYXN0bHksIGZvciB0aGUgc3BlZWQgb2YgNTUrIGttL2ggKHNwZWVkIDUpIHRoZSBjaGFuY2VzIHRvIGRpZSBhcmUgNC40NiBoaWdoZXIgdGhhbiBmb3IgcGVvcGxlIHdobyBkcm92ZSAxLTkga20vaC4gV2UgY2FuIHNlZSBob3cgdGhlIG9kZHMgb2YgZGVhdGggaW5jcmVhc2VzIGZvciBldmVyeSBoaWdoZXIgc3BlZWQgY2F0ZWdvcnkuCgoqKk1PREVMIDM6KiogVGhlIG1vZGVsIHRha2VzIGludG8gYWNjb3VudCBib3RoIGZhY3RvcnM6IHRoZSBhZ2Ugb2YgdGhlIG9jY3VwYW50IGFuZCB0aGUgc3BlZWQgb2YgZHJpdmluZyB0aGF0IGluZmx1ZW5jZSBvZGRzIG9mIGRlYXRoIGR1cmluZyB0aGUgY2FyIGFjY2lkZW50LiBSZWdyZXNzaW9uIGNvbmZpcm1zIHRoYXQgeW91bmdlciBwZW9wbGUgaGF2ZSBoaWdoZXIgY2hhbmNlcyB0byBzdXJ2aXZlIHRoZSBjYXIgY3Jhc2ggY29tcGFyaW5nIHRvIG9sZGVyIHBlb3BsZSBhbmQgdGhhdCBzcGVlZCBvZiBkcml2aW5nIHNpZ25pZmljYW50bHkgYWZmZWN0cyB0aGUgb2RkcyBvZiBkZWF0aHMuCgpgYGB7ciwgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgcmVzdWx0cz0nYXNpcyd9CgptMCA8LSBnbG0oZGVhZCB+IGFnZU9Gb2NjLCBmYW1pbHkgPSBiaW5vbWlhbCwgZGF0YSA9IG5hc3NDRFMyKQptMTEgPC0gZ2xtKGRlYWQgfiBzcGVlZCwgZmFtaWx5ID0gYmlub21pYWwsIGRhdGEgPSBuYXNzQ0RTMikKbTIyIDwtIGdsbShkZWFkIH4gYWdlT0ZvY2MgKyBzcGVlZCwgZmFtaWx5ID0gYmlub21pYWwsIGRhdGEgPSBuYXNzQ0RTMikKCgpzdGFyZ2F6ZXIobTAsIG0xMSwgbTIyLCB0eXBlID0gImh0bWwiLCBzdHlsZSA9ICJxamUiLAogICAgICAgICAgdGl0bGUgPSAiQWdlIGFuZCBTcGVlZCBpbmZsdWVuY2Ugb24gRGVhdGhzIHByZXplbnRlZCBpbiBMb2cgT2RkcyBDb2VmZmljaWVudHMiLCBhbGlnbiA9IFRSVUUsCiAgICAgICAgICBjb3ZhcmlhdGUubGFiZWxzID0gYygiQWdlIiwgIjEwLTI0a20vaCIsICIyNS0zOWttL2giLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjQwLTU0a20vaCIsICI1NSsga20vaCIpLCAKICAgICAgICAgIG5vdGVzID0gCiAgICAgICAgICAgIAoiVGhlIGNvbXBhcmlzb24gb2YgYWxsIDMgbG9naXN0aWMgcmVncmVzc2lvbiBtb2RlbHMgaW4gb25lIHRhYmxlLiBUaGlyZCBtb2RlbCBpcyB0aGUgYmVzdCBmaXQuIEl0IHNob3dzIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGUgYWdlIG9mIHRoZSBvY2N1cGFudCwgYSBzcGVlZCBvZiBkcml2aW5nIGFuZCBvZGRzIG9mIGRlYXRoLiIpCmBgYAoKCgojIyMgPGZvbnQgY29sb3IgPSBncmV5PiBBZGRpdGlvbmFsIE1vZGVscyA8L2ZvbnQ+CiMjIyMgPGZvbnQgY29sb3IgPSBncmV5PiA0LiBHZW5kZXIgYW5kIHNwZWVkIG9mIGRyaXZpbmcgPC9mb250PiAKQXMgcHJldmlvdXMgcmVzZWFyY2ggc2hvd3MgbWFsZSBkcml2ZXJzIHVzdWFsbHkgZHJpdmUgZmFzdGVyIHRoYW4gZmVtYWxlIGRyaXZlcnMuIEdyYXBoIDQgc2hvdyB0aGUgY29ycmVsYXRpb24gYmV0d2VlbiBzZXggYW5kIGEgc3BlZWQgb2YgZHJpdmluZy4gTWFsZXMgdGVuZCB0byBnZXQgaW4gYSBjYXIgY3Jhc2ggYXQgaGlnaGVyIHNwZWVkcyB0aGFuIHdvbWVuIChhdmVyYWdlIHNwZWVkIG9mIGNhciBjcmFzaCBmb3IgbWFsZXMgaXMgNTUga20vaCBhbmQgZm9yIGZlbWFsZXMgaXMgMjBrbS9oKS4gCgojIyMjIDxmb250IGNvbG9yID0gZ3JleT4gNC4xIFJlbGF0aW9uc2hpcCBiZXR3ZWVuIGdlbmRlciBhbmQgc3BlZWQgb2YgZHJpdmluZyA8L2ZvbnQ+CioqR1JBUEggNCoqCkdyZXkgYXJlYSBpbmRpY2F0ZXMgdGhlIDk1JSBjb25maWRlbmNlIGludGVydmFsCmBgYHtyLCBlY2hvPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBtZXNzYWdlPUZBTFNFfQojIE1PREVMIDQKbTQgPC0gZ2xtKHNleCB+IGR2Y2F0LCBmYW1pbHkgPSBiaW5vbWlhbCwgZGF0YSA9IG5hc3NDRFMyKQp2aXNyZWcobTQsICJkdmNhdCIsIHJ1ZyA9IEYsc2NhbGUgPSAicmVzcG9uc2UiLHhsYWIgPSAiU3BlZWQgb2YgRHJpdmluZyIsIHlsYWIgPSAiR2VuZGVyIikKYGBgCgoKIyMjIyA8Zm9udCBjb2xvciA9IGdyZXk+IDUuIFVzZSBvZiBzZWF0YmVsdHMgYW5kIGRlYXRocyBpbiBkaWZmZXJlbnQgYWdlIGdyb3VwcyA8L2ZvbnQ+Ckl0IGlzIGNvbW1vbiBrbm93bGVkZ2UgdGhhdCB0aGUgdXNlIG9mIHNlYXQgYmVsdHMgc2F2ZXMgbGl2ZXMgZHVyaW5nIGNhciBhY2NpZGVudHMuIEdyYXBoIDcgc2hvdyBob3cgaW1wb3J0YW50IGl0IGlzIHRvIHVzZSBvZiBzZWF0IGJlbHRzIGZvciBzYWZldHkgcmVhc29ucy4gU2lnbmlmaWNhbnRseSBtb3JlIHBlb3BsZSB3aG8gd2VyZW7igJl0IGJlbHRlZCBkaWVkIGluIGEgY2FyIGNyYXNoLiBUaGUgcmVncmVzc2lvbiBtb2RlbCA1IHNob3cgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZSB1c2Ugb2Ygc2VhdCBiZWx0cyBhbmQgYWdlLiBUaGUgaW50ZW50aW9uIHdhcyB0byBkaXNjb3ZlciBpZiB0aGUgaGlnaGVyIG9kZHMgb2YgZGVhdGhzIGFyZSBhZmZlY3RlZCBieSB0aGUgc2VhdCBiZWx0cyB1c2UuIFRoZSByZWdyZXNzaW9uIHJlc3VsdHMgc2hvdyB0aGF0IHBlb3BsZSB3aG8gYXJlIG9sZGVyIHVzZSBzZWF0IGJlbHRzIG1vcmUgb2Z0ZW4uIFRoZSBtb2RlbCBpbmRpY2F0ZXMgdGhhdCBoaWdoIGZhdGFsaXR5IHJhdGUgYW1vbmcgb2xkZXIgZHJpdmVycyBpc27igJl0IGNhdXNlZCBieSB0aGUgbGFjayBvZiBzZWF0IGJlbHRzLiBGb3IgeW91bmcgZHJpdmVycywgdGhlIHJlc3VsdHMgaW5kaWNhdGUgbXVjaCBoaWdoZXIgc3Vydml2YWwgcmF0ZSBldmVuIHdpdGhvdXQgdGhlIHNlYXQgYmVsdHMgZmFzdGVuLiBUaGUgcmVzdWx0cyBjb25maXJtIHRoYXQgaXQgaXMgdGhlIGFnZSBkaWZmZXJlbmNlIHRoYXQgYWZmZWN0IHRoZSBvZGRzIG9mIGRlYXRocyBpbiBjYXIgY3Jhc2hlcy4KCgojIyMjIDxmb250IGNvbG9yID0gZ3JleT4gIDUuMSBUaGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIHVzZSBvZiBzZWF0YmVsdHMgYW5kIGFnZSA8L2ZvbnQ+CioqR1JBUEggNSoqCkdyZXkgYXJlYSBpbmRpY2F0ZXMgdGhlIDk1JSBjb25maWRlbmNlIGludGVydmFsCmBgYHtyLCBlY2hvPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBtZXNzYWdlPUZBTFNFfQojIE1PREVMIDUKbTUgPC0gZ2xtKHNlYXRiZWx0IH4gYWdlT0ZvY2MsIGZhbWlseSA9IGJpbm9taWFsLCBkYXRhID0gbmFzc0NEUzIpCnZpc3JlZyhtNSwgImFnZU9Gb2NjIiwgc2NhbGUgPSAicmVzcG9uc2UiLCBydWcgPSBGQUxTRSwgeGxhYiA9ICJBZ2UiLCB5bGFiID0gIkxvZyBvZGRzIG9mIHdlYXJpbmcgc2VhdGJlbHRzIikKYGBgCgoKIyMjIyA8Zm9udCBjb2xvciA9IGdyZXk+ICA1LjIgVXNlIG9mIHNlYXRiZWx0cyBhbmQgYWdlIGVmZmVjdCBvbiBvZGRzIG9mIGRlYXRoIDwvZm9udD4KKipHUkFQSCA2KioKQmFuZCBpbmRpY2F0ZXMgdGhlIDk1JSBjb25maWRlbmNlIGludGVydmFsCmBgYHtyLCBlY2hvPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBtZXNzYWdlPUZBTFNFfQojIE1PREVMIDYKbTYgPC0gZ2xtKGRlYWQgfiBzZWF0YmVsdCArIGFnZU9Gb2NjLCBmYW1pbHkgPSBiaW5vbWlhbCwgZGF0YSA9IG5hc3NDRFMyKQp2aXNyZWcobTYsICJzZWF0YmVsdCIsIGJ5ID0gImFnZU9Gb2NjIiwgc2NhbGUgPSAicmVzcG9uc2UiLHJ1ZyA9IEZBTFNFLCBvdmVybGF5ID0gVFJVRSwgYmFuZCA9IEZBTFNFLCB4bGFiID0gIlNlYXRiZWx0IiwgeWxhYiA9ICJMb2cgb2RkcyBvZiBkZWF0aCIpCmBgYAoKIyMjIyA8Zm9udCBjb2xvciA9IGdyZXk+IDYuIFRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBzdGF0ZSdzIHBvcHVsYXRpb24gYW5kIGFtb3VudCBvZiBmYXRhbCBhY2NpZGVudHMgaW4gVVNBIDwvZm9udD4KCldoZW4gd2UgbG9vayBhdCB0aGUgbnVtYmVyIG9mIGZhdGFsIGFjY2lkZW50cyBhbmQgdGhlIHBvcHVsYXRpb24gYWNyb3NzIHN0YXRlcywgd2UgY2FuIG5vdGljZSB0aGF0IHRoZSBzdGF0ZXMgd2hpY2ggaGF2ZSBoaWdoZXIgcG9wdWxhdGlvbiB0ZW5kIHRvIGhhdmUgbW9yZSBmYXRhbCBhY2NpZGVudHMuIFRoZSBtYXAgc2hvd3MgdGhlIGludGVuc2l0eSBvZiBmYXRhbCBhY2NpZGVudHMgaW4gZXZlcnkgc3RhdGUgaW4gdGhlIFVTQS4gVGhlIHN0YXRlcyB0aGF0IGhhdmUgdGhlIHBvcHVsYXRpb24gaGlnaGVyIHRoYW4gMTksMzg0LDQ1MyBwZW9wbGUgaGF2ZSBhbHNvIGEgYmlnZ2VyIG51bWJlciBvZiBmYXRhbCBhY2NpZGVudHMgY29tcGFyaW5nIHRvIHN0YXRlcyB3aXRoIGEgbG93ZXIgcG9wdWxhdGlvbi4gVGhlIHJlbGF0aW9uc2hpcCBjYW4gYmUgZXNwZWNpYWxseSB2aXNpYmxlIHdoaWxlIGxvb2tpbmcgYXQgdGhlIHN0YXRlcyBsaWtlIENhbGlmb3JuaWEsIFRleGFzIG9yIEZsb3JpZGEsIHdoaWNoIGhhdmUgdGhlIGhpZ2hlc3QgcG9wdWxhdGlvbiBpbiBVU0EgLSB0aGVzZSBzdGF0ZXMgaGF2ZSBhbHNvIGEgdmVyeSBoaWdoIGFtb3VudCBvZiBmYXRhbCBjYXIgY3Jhc2hlcyB3aGljaCBpcyBpbmRpY2F0ZWQgYnkgYSByZWQgY29sb3IgaW4gYm90aCBncmFwaGljcy4gVGhlIGNvbXBhcmlzb24gZG9lc24ndCB0YWtlIGludG8gY29uc2lkZXJhdGlvbiBtYW55IG90aGVyIGltcG9ydGFudCBmYWN0b3JzIGxpa2Ugc3BlZWQgbGltaXRzLCBkaWZmZXJlbnQgdGVycmFpbiwgcm9hZCBvciB3ZWF0aGVyIGNvbmRpdGlvbnMsIGFsY29ob2wgbGltaXRzIGZvciBkcml2aW5nLCBldGMgaW4gZXZlcnkgc3RhdGUuCgoKYGBge3IsIGVycm9yPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBpbmNsdWRlPUZBTFNFLCByZXN1bHRzPSdoaWRlJ30KY3RfbWFwIDwtIHN0X3JlYWQgKCIvVXNlcnMvbGFzaGEvRGVza3RvcC9RdWVlbnMgQ29sbGVnZS83MTIgQWR2YW5jZWQgQW5hbHl0aWNzL2RhdGEgc2V0cy90bF8yMDE2X3VzX2NvdW50eS90bF8yMDE2X3VzX2NvdW50eS5zaHAiLHN0cmluZ3NBc0ZhY3RvcnMgPSBGQUxTRSkgJT4lCm11dGF0ZShmaXBzID0gcGFyc2VfaW50ZWdlcihTVEFURUZQKSkKCgpjcmFzaGRhdGE8LXJlYWRfY3N2KCIvVXNlcnMvbGFzaGEvRGVza3RvcC9RdWVlbnMgQ29sbGVnZS83NTUvRGF0YS9GYXRhbEFjY2lkZW50c0RhdGEuY3N2IikgJT4lCiAgZ3JvdXBfYnkoU1RBVEUpJT4lCiAgc3VtbWFyaXplKEZBVEFMUz1zdW0oRkFUQUxTKSxhY2NpZGVudHM9bigpKSU+JSAKICBtdXRhdGUoZmlwcyA9IHBhcnNlX2ludGVnZXIoU1RBVEUpKQpgYGAKCgpgYGB7ciwgZXJyb3I9RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGluY2x1ZGU9RkFMU0UsIHJlc3VsdHM9J2hpZGUnfQojY29tYmluZSBtYXAgZGF0YSB3aXRoIHRoZSByZWxpZ2l1b3MgZGF0YQpjb21iX2NyYXNoZGF0YSA8LSBjdF9tYXAgJT4lIAogIGxlZnRfam9pbihjcmFzaGRhdGEsIGJ5ID0gImZpcHMiKQpgYGAKCgpgYGB7ciwgZXJyb3I9RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGluY2x1ZGU9RkFMU0UsIHJlc3VsdHM9J2hpZGUnfQojRXhjbHVkZSBBbGFza2EgYW5kIEhhd2FpaQpjb21iX2NyYXNoZGF0YV9zdWIgPC0gY29tYl9jcmFzaGRhdGEgJT4lIAogIGZpbHRlcihTVEFURUZQICE9ICIwMiIpICU+JSAKICBmaWx0ZXIoU1RBVEVGUCAhPSAiMTUiKSAlPiUgCiAgZmlsdGVyKFNUQVRFRlAgIT0gIjYwIikgJT4lIAogIGZpbHRlcihTVEFURUZQICE9ICI2NiIpICU+JSAKICBmaWx0ZXIoU1RBVEVGUCAhPSAiNjkiKSAlPiUgCiAgZmlsdGVyKFNUQVRFRlAgIT0gIjcyIikgJT4lIAogIGZpbHRlcihTVEFURUZQICE9ICI3OSIpCgojYWRkaW5nIHN0YXRlIGJvcmRlcnMKdXNfc3RhdGVzIDwtIGNvbWJfY3Jhc2hkYXRhX3N1YiAlPiUgCiAgYWdncmVnYXRlX21hcChieSA9ICJTVEFURUZQIikKYGBgCgojIyMjIDxmb250IGNvbG9yID0gZ3JleT4gIDYuMSBUaGUgYW1vdW50IG9mIGZhdGFsIGFjY2lkZW50cyBhY3Jvc3MgVVNBIDwvZm9udD4KKipHUkFQSCA3KioKCmBgYHtyLCBlY2hvPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBlcnJvcj1GQUxTRSwgbWVzc2FnZT1GQUxTRX0KdG1fc2hhcGUoY29tYl9jcmFzaGRhdGFfc3ViLCBwcm9qZWN0aW9uID0gMjE2MykgKyAKICB0bV9wb2x5Z29ucygiRkFUQUxTIiwgcGFsZXR0ZSA9ICJPclJkIiwgYm9yZGVyLmNvbCA9ICJncmV5IiwgYm9yZGVyLmFscGhhID0gLjQpICsgCiAgdG1fc2hhcGUgKHVzX3N0YXRlcykgKyB0bV9ib3JkZXJzKGx3ZCA9IC4zNiwgY29sID0gImJsYWNrIiwgYWxwaGEgPSAxKQpgYGAKCiMjIyMgPGZvbnQgY29sb3IgPSBncmV5PiAgNi4yIFVTQSBwb3B1bGF0aW9uIGJ5IHN0YXRlcyA8L2ZvbnQ+CioqR1JBUEggOCoqCgohW1VTQSBwb3B1bGF0aW9uIGJ5IHN0YXRlc10oL1VzZXJzL2xhc2hhL0Rvd25sb2Fkcy91c2FfbWFwLmdpZikKCgoKCiMjIyA8Zm9udCBjb2xvciA9IGdyZXk+IERpc2N1c3Npb24gPC9mb250PgpUaGUgcmVzdWx0cyBvZiB0aGUgc3R1ZHkgZGVtb25zdHJhdGUgdGhhdCBhZ2Ugb2YgdGhlIGRyaXZlciBpcyB0aGUgbW9zdCBzaWduaWZpY2FudCBwcmVkaWN0b3Igb24gdGhlIG9kZHMgb2YgZGVhdGhzIGluIGFjY2lkZW50cyBhbW9uZyBwYXNzZW5nZXIgY2FycywgbGlnaHQgdHJ1Y2tzIGFuZCB2YW5zLiBXaXRoIHRoZSBpbmNyZWFzZSBvZiBhZ2UgdGhlIG9kZHMgb2YgZGVhdGggaW5jcmVhc2VzLiBUaGUgc3R1ZHkgYWxzbyBkZW1vbnN0cmF0ZSB0aGF0IHRoZSBzcGVlZCBvZiBkcml2aW5nIGlzIGRhbmdlcm91cyBmb3IgYWxsIHBlb3BsZSwgYnV0IHlvdW5nZXIgZHJpdmVycyBoYXZlIGEgZ3JlYXRlciB0b2xlcmFuY2UgdG8gaGlnaCBzcGVlZCBhY2NpZGVudHMgdGhhbiBvbGRlciBkcml2ZXJzLiBFdmVuIHRob3VnaCBvbGRlciBkcml2ZXJzIHRlbmQgdG8gZHJpdmUgc2xvd2VyIGFuZCB1c2Ugc2VhdCBiZWx0cyBtb3JlIG9mdGVuLCB0aGUgb2RkcyBvZiBkZWF0aCBmb3IgdGhlbSBpbiBjb21wYXJpc29uIHdpdGggeW91bmcgZHJpdmVycyBhcmUgc2lnbmlmaWNhbnRseSBsYXJnZXIuIFRoZSBzdXJ2aXZhbCBvZiB5b3VuZ2VyIGRyaXZlcnMgaXMgY2xvc2UgdG8gMTAwJSBmb3IgYSBsb3cgc3BlZWQgY2FyIGFjY2lkZW50cy4gWW91dGhzIGFsc28gaGF2ZSBtdWNoIHN1cnZpdmFsIHJhdGVzIGNvbXBhcmVkIHRvIG9sZCBwZW9wbGUgaW4gaGlnaCBzcGVlZCBhY2NpZGVudHMuIEJlc2lkZSB0aGUgdGVuZGVuY3kgb2YgZHJpdmluZyBmYXN0LCB5b3VuZyBwZW9wbGUgdGVuZCB0byBkcml2ZSB3aXRob3V0IHRoZWlyIHNlYXQgYmVsdHMgZmFzdGVuLiBUaGUgbGFjayBvZiBzZWF0IGJlbHRzIGluY3JlYXNlcyBvZGRzIG9mIGRlYXRocyBhbW9uZyB5b3VuZyBwZW9wbGUgYnV0IG5vdCBhcyBtdWNoIGFzIGZvciBvbGRlciBwZW9wbGUuIAoKRnVydGhlciBzdHVkaWVzIGNvdWxkIGJlIGNvbmR1Y3RlZCB0byBpbnZlc3RpZ2F0ZSB0aGUgdHlwZXMgb2YgY2FyIGFjY2lkZW50cyB0aGF0IG9sZGVyIHBlb3BsZSBnZXQgaW50byBjb21wYXJlZCB0byB5b3V0aHMsIGFuZCBpZiB0aGVzZSBjcmFzaGVzIGFyZSBzb21laG93IGRpZmZlcmVudCB0aGVuIGEgeW91bmdlciBkcml2ZXJzIGNhciBhY2NpZGVudHMuIAoKIyMjIDxmb250IGNvbG9yID0gZ3JleT4gQmlibGlvZ3JhcGh5IDwvZm9udD4KCgoK