Good afternoon all! First let us find out what our working directory is.

getwd()
[1] "C:/Users/raulr/Downloads"

Today we are going to query the table quiz2 by using Transact-SQL inside the R chunks. First, we are going to need to install the package sqldf.

install.packages("sqldf")
WARNING: Rtools is required to build R packages but is not currently installed. Please download and install the appropriate version of Rtools before proceeding:

https://cran.rstudio.com/bin/windows/Rtools/
Installing package into ‘C:/Users/raulr/AppData/Local/R/win-library/4.2’
(as ‘lib’ is unspecified)
trying URL 'https://cran.rstudio.com/bin/windows/contrib/4.2/sqldf_0.4-11.zip'
Content type 'application/zip' length 78523 bytes (76 KB)
downloaded 76 KB
package ‘sqldf’ successfully unpacked and MD5 sums checked

The downloaded binary packages are in
    C:\Users\raulr\AppData\Local\Temp\RtmpIlbpCL\downloaded_packages
install.packages("sqldf")
WARNING: Rtools is required to build R packages but is not currently installed. Please download and install the appropriate version of Rtools before proceeding:

https://cran.rstudio.com/bin/windows/Rtools/
Installing package into ‘C:/Users/raulr/AppData/Local/R/win-library/4.2’
(as ‘lib’ is unspecified)
trying URL 'https://cran.rstudio.com/bin/windows/contrib/4.2/sqldf_0.4-11.zip'
Content type 'application/zip' length 78523 bytes (76 KB)
downloaded 76 KB
package ‘sqldf’ successfully unpacked and MD5 sums checked

The downloaded binary packages are in
    C:\Users\raulr\AppData\Local\Temp\RtmpIlbpCL\downloaded_packages
library(sqldf)
Warning: package ‘sqldf’ was built under R version 4.2.2Loading required package: gsubfn
Warning: package ‘gsubfn’ was built under R version 4.2.2Loading required package: proto
Warning: package ‘proto’ was built under R version 4.2.2Loading required package: RSQLite
Warning: package ‘RSQLite’ was built under R version 4.2.2

Upload data frame quiz2, since it has header to have a proper visualization would be necessary to write header=TRUE and since values are separated by commas sep=‘,’

Let us run a query that returns every single record from the table data1. Function sqldf allows you to select what do you want to show, in this exapmle it is plottted the whole data frmae but in the next one will be selected some parts.

Now I would like you to create a query that returns every single record (row) for the fields region and population.

Let us now create a query that returns the first 10 records of the data1 table.

In this example sqldf function returns the first 10 rows of the dataframe which in this case is the whole dataframe.

In this example sqldf function returns the first 5 rows ordered by the number of infections, from the one with highest number to the oone with the lowest, of the dataframe

Interpret the output of the query ran above and run a similar query (limit 7) including the attributes ipadddr , ufo2010 ,and infections.

This example returns region and infection variables with more than 1000 infections, and it is ordered from the city with more infections to the one with less.

Now I would like you to inspect (create a query) income,region and population when the condition is income>=50,000. Make comments There is not location with 50000 or more infections.

Returns the rows with more than 50000 income and more than 2000 infections or rows with a bigger population than 100000.

Interpret the query ran above and create a query that recreates a similar case scenario (one that is critical for the success of this mini-project).

Let us run a query that returns every region and population with a number of infections between 1000 and 7000.

Interpret the query below and list a hypothetical case scenario in which this query would be useful. Query below would be useful since we would like to know if could be a relationship between subregions which name starts with “a” and number of infections. Reason to search this relationship could be that have more tourists because their names are appears first in the lists.

Last,let us find the average number of infections in our table.

Let us inspect the new table defined below data2.

Let us apply summary to data2 and examine the output. This summary is saying that the number of regions examined is 29, that its populations goes from 2311 to 1554720 people, income goes from 26784 to 70821, in some of the subregions have zero unadentified flying objects visualizations since maximum number of visualization (169) is so much higher than the value of the 3rd quarter (9), and since value of the mean is not very big aswell, most of the subregions do not have so much visualizations and that there are a small number of subregions that have a lot of ufo visualizations, this values works as outliers. From the data could be seen too that the average of infections between all the regions is 1117.

summary(data2)
    region               pop              income          ipaddr           ufo2010         infections  
 Length:29          Min.   :   2311   Min.   :26784   Min.   :    637   Min.   :  0.00   Min.   :  39  
 Class :character   1st Qu.:  19005   1st Qu.:37970   1st Qu.:  12294   1st Qu.:  0.00   1st Qu.: 123  
 Mode  :character   Median :  32122   Median :41595   Median :  30418   Median :  2.00   Median : 245  
                    Mean   : 135940   Mean   :43858   Mean   : 440130   Mean   : 16.66   Mean   :1117  
                    3rd Qu.: 101482   3rd Qu.:47469   3rd Qu.: 102104   3rd Qu.:  9.00   3rd Qu.: 672  
                    Max.   :1554720   Max.   :70821   Max.   :5394949   Max.   :169.00   Max.   :6781  

Next, I would like you to complete the following steps:

1-Run a query that returns full details for every record from the west region. Since west is the only word in regions that starts with w.

2-Run a query that returns full details for every record from the east region where the number of infections is greater than 1500.

3-Run a few queries that can potentially help us to make the point that: a.Region affects the number of infections Could be said that region affects the number of infections because the average of each location is very different.

b.Population affects the number of infections I would say that since regions with more population has higher value of average infections, yes population affects infections.

c.Income affects the number of infections The maximun number of infections is for the max income. However, I do not see a clear relation between these 2 variables.

sqldf('SELECT income,infections FROM data2 order by income desc')
NA

d.ufo2010 affects the number of infections Since biggest number of infections happened in regions where more unidentified flying objects are founded, I think could exits a relationship between variable ufo2010 and infections.

  1. The different interactions of region and income, and income and population affects the number of infections.

The average of infections of each region depends on the number on income the region has.

with the data that could be seen inthe table, I think the income does not depend on the population number but xist a realtionship between income and infections.

LS0tDQp0aXRsZTogIlIgU1FMIg0KYXV0aG9yOiAiUmF1bCBSb2NlcyINCm91dHB1dDogaHRtbF9ub3RlYm9vaw0KLS0tDQoNCkdvb2QgYWZ0ZXJub29uIGFsbCEgRmlyc3QgbGV0IHVzIGZpbmQgb3V0IHdoYXQgb3VyIHdvcmtpbmcgZGlyZWN0b3J5IGlzLg0KDQpgYGB7cn0NCmdldHdkKCkNCmBgYA0KDQpUb2RheSB3ZSBhcmUgZ29pbmcgdG8gcXVlcnkgdGhlIHRhYmxlIHF1aXoyIGJ5IHVzaW5nIFRyYW5zYWN0LVNRTCBpbnNpZGUgdGhlIFIgY2h1bmtzLiBGaXJzdCwgd2UgYXJlIGdvaW5nIHRvIG5lZWQgdG8gaW5zdGFsbCB0aGUgcGFja2FnZSBzcWxkZi4NCmBgYHtyfQ0KaW5zdGFsbC5wYWNrYWdlcygic3FsZGYiKQ0KbGlicmFyeShzcWxkZikNCmBgYA0KVXBsb2FkIGRhdGEgZnJhbWUgcXVpejIsIHNpbmNlIGl0IGhhcyBoZWFkZXIgdG8gaGF2ZSBhIHByb3BlciB2aXN1YWxpemF0aW9uIHdvdWxkIGJlIG5lY2Vzc2FyeSB0byB3cml0ZSBoZWFkZXI9VFJVRSBhbmQgc2luY2UgdmFsdWVzIGFyZSBzZXBhcmF0ZWQgYnkgY29tbWFzIHNlcD0nLCcNCmBgYHtyfQ0KZGF0YTE8LXJlYWQuY3N2KCJDOi9Vc2Vycy9yYXVsci9PbmVEcml2ZS9Fc2NyaXRvcmlvL1NUVS9QcmdyYW0gRm9yIERhdGEgQW5hbHl0aWNzL0FyY2hpdm9zL3F1aXoyLmNzdiIsaGVhZGVyID0gVFJVRSxzZXAgPSAiLCIpDQpzaG93KGRhdGExKQ0KYGBgDQoNCg0KTGV0IHVzIHJ1biBhIHF1ZXJ5IHRoYXQgcmV0dXJucyBldmVyeSBzaW5nbGUgcmVjb3JkIGZyb20gdGhlIHRhYmxlIGRhdGExLg0KRnVuY3Rpb24gc3FsZGYgYWxsb3dzIHlvdSB0byBzZWxlY3Qgd2hhdCBkbyB5b3Ugd2FudCB0byBzaG93LCBpbiB0aGlzIGV4YXBtbGUgaXQgaXMgcGxvdHR0ZWQgdGhlIHdob2xlIGRhdGEgZnJtYWUgYnV0IGluIHRoZSBuZXh0IG9uZSB3aWxsIGJlIHNlbGVjdGVkIHNvbWUgcGFydHMuDQpgYGB7cn0NCnNxbGRmKCJTRUxFQ1QgKiBGUk9NIGRhdGExIikNCmBgYA0KDQoNCg0KTm93IEkgd291bGQgbGlrZSB5b3UgdG8gY3JlYXRlIGEgcXVlcnkgdGhhdCByZXR1cm5zIGV2ZXJ5IHNpbmdsZSByZWNvcmQgKHJvdykgZm9yIHRoZSBmaWVsZHMgcmVnaW9uIGFuZCBwb3B1bGF0aW9uLg0KDQpMZXQgdXMgbm93IGNyZWF0ZSBhIHF1ZXJ5IHRoYXQgcmV0dXJucyB0aGUgZmlyc3QgMTAgcmVjb3JkcyBvZiB0aGUgZGF0YTEgdGFibGUuDQoNCkluIHRoaXMgZXhhbXBsZSBzcWxkZiBmdW5jdGlvbiByZXR1cm5zIHRoZSBmaXJzdCAxMCByb3dzIG9mIHRoZSBkYXRhZnJhbWUgd2hpY2ggaW4gdGhpcyBjYXNlIGlzIHRoZSB3aG9sZSBkYXRhZnJhbWUuDQpgYGB7cn0NCnNxbGRmKCdTRUxFQ1QgKiBGUk9NIGRhdGExIExJTUlUIDEwJykNCmBgYA0KDQpJbiB0aGlzIGV4YW1wbGUgc3FsZGYgZnVuY3Rpb24gcmV0dXJucyB0aGUgZmlyc3QgNSByb3dzIG9yZGVyZWQgYnkgdGhlIG51bWJlciBvZiBpbmZlY3Rpb25zLCBmcm9tIHRoZSBvbmUgd2l0aCBoaWdoZXN0IG51bWJlciB0byB0aGUgb29uZSB3aXRoIHRoZSBsb3dlc3QsIG9mIHRoZSBkYXRhZnJhbWUNCmBgYHtyfQ0Kc3FsZGYoIlNFTEVDVCAqIEZST00gZGF0YTEgT1JERVIgQlkgaW5mZWN0aW9ucyBERVNDICBMSU1JVCA1IikNCmBgYA0KDQpJbnRlcnByZXQgdGhlIG91dHB1dCBvZiB0aGUgcXVlcnkgcmFuIGFib3ZlIGFuZCBydW4gYSBzaW1pbGFyIHF1ZXJ5IChsaW1pdCA3KSBpbmNsdWRpbmcgdGhlIGF0dHJpYnV0ZXMgaXBhZGRkciAsIHVmbzIwMTAgLGFuZCBpbmZlY3Rpb25zLg0KDQpgYGB7cn0NCnNxbGRmKCdTRUxFQ1QgaXBhZGRyICwgdWZvMjAxMCAsIGluZmVjdGlvbnMgRlJPTSBkYXRhMSBMSU1JVCA3JykNCmBgYA0KDQoNCg0KDQpUaGlzIGV4YW1wbGUgcmV0dXJucyByZWdpb24gYW5kIGluZmVjdGlvbiB2YXJpYWJsZXMgd2l0aCBtb3JlIHRoYW4gMTAwMCBpbmZlY3Rpb25zLCBhbmQgaXQgaXMgb3JkZXJlZCBmcm9tIHRoZSBjaXR5IHdpdGggbW9yZSBpbmZlY3Rpb25zIHRvIHRoZSBvbmUgd2l0aCBsZXNzLg0KYGBge3J9DQpzcWxkZignU0VMRUNUIHJlZ2lvbixpbmZlY3Rpb25zIEZST00gZGF0YTEgV0hFUkUgaW5mZWN0aW9ucyA+IDEwMDAgb3JkZXIgYnkgMiBkZXNjJykNCmBgYA0KDQoNCk5vdyBJIHdvdWxkIGxpa2UgeW91IHRvIGluc3BlY3QgKGNyZWF0ZSBhIHF1ZXJ5KSBpbmNvbWUscmVnaW9uIGFuZCBwb3B1bGF0aW9uIHdoZW4gdGhlIGNvbmRpdGlvbiBpcyBpbmNvbWU+PTUwLDAwMC4gTWFrZSBjb21tZW50cw0KVGhlcmUgaXMgbm90IGxvY2F0aW9uIHdpdGggNTAwMDAgb3IgbW9yZSBpbmZlY3Rpb25zLg0KYGBge3J9DQpzcWxkZignU0VMRUNUIGluY29tZSxyZWdpb24scG9wIEZST00gZGF0YTEgV0hFUkUgaW5mZWN0aW9ucyA+PSA1MDAwMCcpDQpgYGANCg0KDQoNCg0KUmV0dXJucyB0aGUgcm93cyB3aXRoIG1vcmUgdGhhbiA1MDAwMCBpbmNvbWUgYW5kIG1vcmUgdGhhbiAyMDAwIGluZmVjdGlvbnMgb3Igcm93cyB3aXRoIGEgYmlnZ2VyIHBvcHVsYXRpb24gdGhhbiAxMDAwMDAuDQpgYGB7cn0NCnNxbGRmKCdTRUxFQ1QgKiBGUk9NIGRhdGExIFdIRVJFIChpbmNvbWUgPiA1MDAwMCBBTkQgaW5mZWN0aW9ucyA+IDIwMDApIE9SIHBvcCA+IDEwMDAwMCcpDQpgYGANCg0KDQpJbnRlcnByZXQgdGhlIHF1ZXJ5IHJhbiBhYm92ZSBhbmQgY3JlYXRlIGEgcXVlcnkgdGhhdCByZWNyZWF0ZXMgYSBzaW1pbGFyIGNhc2Ugc2NlbmFyaW8gKG9uZSB0aGF0IGlzIGNyaXRpY2FsIGZvciB0aGUgc3VjY2VzcyBvZiB0aGlzIG1pbmktcHJvamVjdCkuDQoNCmBgYHtyfQ0Kc3FsZGYoJ1NFTEVDVCByZWdpb24scG9wLHVmbzIwMTAsaW5mZWN0aW9ucyBGUk9NIGRhdGExIFdIRVJFIGluZmVjdGlvbnMgPiAxMDAwJykNCmBgYA0KDQoNCkxldCB1cyBydW4gYSBxdWVyeSB0aGF0IHJldHVybnMgZXZlcnkgcmVnaW9uIGFuZCBwb3B1bGF0aW9uIHdpdGggYSBudW1iZXIgb2YgaW5mZWN0aW9ucyBiZXR3ZWVuIDEwMDAgYW5kIDcwMDAuDQoNCmBgYHtyfQ0Kc3FsZGYoJ1NFTEVDVCByZWdpb24scG9wIEZST00gZGF0YTEgV0hFUkUgaW5mZWN0aW9ucyBiZXR3ZWVuICAxMDAwIGFuZCA3MDAwJykNCmBgYA0KDQoNCg0KSW50ZXJwcmV0IHRoZSBxdWVyeSBiZWxvdyBhbmQgbGlzdCBhIGh5cG90aGV0aWNhbCBjYXNlIHNjZW5hcmlvIGluIHdoaWNoIHRoaXMgcXVlcnkgd291bGQgYmUgdXNlZnVsLg0KUXVlcnkgYmVsb3cgd291bGQgYmUgdXNlZnVsIHNpbmNlIHdlIHdvdWxkIGxpa2UgdG8ga25vdyBpZiBjb3VsZCBiZSBhIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHN1YnJlZ2lvbnMgd2hpY2ggbmFtZSBzdGFydHMgd2l0aCAiYSIgYW5kIG51bWJlciBvZiBpbmZlY3Rpb25zLiBSZWFzb24gdG8gc2VhcmNoIHRoaXMgcmVsYXRpb25zaGlwIGNvdWxkIGJlIHRoYXQgaGF2ZSBtb3JlIHRvdXJpc3RzIGJlY2F1c2UgdGhlaXIgbmFtZXMgYXJlIGFwcGVhcnMgZmlyc3QgaW4gdGhlIGxpc3RzLg0KYGBge3J9DQpzcWxkZignU0VMRUNUICogRlJPTSBkYXRhMSBXSEVSRSBzdWJyZWdpb24gTElLRSAiQSUiJykNCmBgYA0KDQpMYXN0LGxldCB1cyBmaW5kIHRoZSBhdmVyYWdlIG51bWJlciBvZiBpbmZlY3Rpb25zIGluIG91ciB0YWJsZS4NCg0KYGBge3J9DQpzcWxkZigiU0VMRUNUIEFWRyhpbmZlY3Rpb25zKSBGUk9NIGRhdGExIikNCmBgYA0KDQpMZXQgdXMgaW5zcGVjdCB0aGUgbmV3IHRhYmxlIGRlZmluZWQgYmVsb3cgZGF0YTIuDQoNCmBgYHtyfQ0KZGF0YTI8LXJlYWQuY3N2KCJDOi9Vc2Vycy9yYXVsci9PbmVEcml2ZS9Fc2NyaXRvcmlvL1NUVS9QcmdyYW0gRm9yIERhdGEgQW5hbHl0aWNzL0FyY2hpdm9zL2ZpbmFsZXhhbS5jc3YiLGhlYWRlciA9IFRSVUUsc2VwID0gIiwiKQ0KZGF0YTINCmBgYA0KDQpMZXQgdXMgYXBwbHkgc3VtbWFyeSB0byBkYXRhMiBhbmQgZXhhbWluZSB0aGUgb3V0cHV0Lg0KVGhpcyBzdW1tYXJ5IGlzIHNheWluZyB0aGF0IHRoZSBudW1iZXIgb2YgcmVnaW9ucyBleGFtaW5lZCBpcyAyOSwgdGhhdCBpdHMgcG9wdWxhdGlvbnMgZ29lcyBmcm9tIDIzMTEgdG8gMTU1NDcyMCBwZW9wbGUsIGluY29tZSBnb2VzIGZyb20gMjY3ODQgdG8gNzA4MjEsIGluIHNvbWUgb2YgdGhlIHN1YnJlZ2lvbnMgaGF2ZSB6ZXJvIHVuYWRlbnRpZmllZCBmbHlpbmcgb2JqZWN0cyB2aXN1YWxpemF0aW9ucyBzaW5jZSBtYXhpbXVtIG51bWJlciBvZiB2aXN1YWxpemF0aW9uICgxNjkpIGlzIHNvIG11Y2ggaGlnaGVyIHRoYW4gdGhlIHZhbHVlIG9mIHRoZSAzcmQgcXVhcnRlciAoOSksIGFuZCBzaW5jZSB2YWx1ZSBvZiB0aGUgbWVhbiBpcyBub3QgdmVyeSBiaWcgYXN3ZWxsLCBtb3N0IG9mIHRoZSBzdWJyZWdpb25zIGRvIG5vdCBoYXZlIHNvIG11Y2ggdmlzdWFsaXphdGlvbnMgYW5kIHRoYXQgdGhlcmUgYXJlIGEgc21hbGwgbnVtYmVyIG9mIHN1YnJlZ2lvbnMgdGhhdCBoYXZlIGEgbG90IG9mIHVmbyB2aXN1YWxpemF0aW9ucywgdGhpcyB2YWx1ZXMgd29ya3MgYXMgb3V0bGllcnMuIEZyb20gdGhlIGRhdGEgY291bGQgYmUgc2VlbiB0b28gdGhhdCB0aGUgYXZlcmFnZSBvZiBpbmZlY3Rpb25zIGJldHdlZW4gYWxsIHRoZSByZWdpb25zIGlzIDExMTcuDQpgYGB7cn0NCnN1bW1hcnkoZGF0YTIpDQpgYGANCg0KTmV4dCwgSSB3b3VsZCBsaWtlIHlvdSB0byBjb21wbGV0ZSB0aGUgZm9sbG93aW5nIHN0ZXBzOg0KDQoxLVJ1biBhIHF1ZXJ5IHRoYXQgcmV0dXJucyBmdWxsIGRldGFpbHMgZm9yIGV2ZXJ5IHJlY29yZCBmcm9tIHRoZSB3ZXN0IHJlZ2lvbi4NClNpbmNlIHdlc3QgaXMgdGhlIG9ubHkgd29yZCBpbiByZWdpb25zIHRoYXQgc3RhcnRzIHdpdGggdy4NCmBgYHtyfQ0Kc3FsZGYoJ1NFTEVDVCAqIEZST00gZGF0YTIgV0hFUkUgcmVnaW9uIExJS0UgIlclIicpDQpgYGANCg0KDQoyLVJ1biBhIHF1ZXJ5IHRoYXQgcmV0dXJucyBmdWxsIGRldGFpbHMgZm9yIGV2ZXJ5IHJlY29yZCBmcm9tIHRoZSBlYXN0IHJlZ2lvbiB3aGVyZSB0aGUgbnVtYmVyIG9mIGluZmVjdGlvbnMgaXMgZ3JlYXRlciB0aGFuIDE1MDAuDQpgYGB7cn0NCnNxbGRmKCdTRUxFQ1QgKiBGUk9NIGRhdGEyIFdIRVJFIGluZmVjdGlvbnMgPiAxNTAwIGFuZCByZWdpb249PSJFYXN0IicpDQpgYGANCg0KDQozLVJ1biBhIGZldyBxdWVyaWVzIHRoYXQgY2FuIHBvdGVudGlhbGx5IGhlbHAgdXMgdG8gbWFrZSB0aGUgcG9pbnQgdGhhdDoNCiAgIGEuUmVnaW9uIGFmZmVjdHMgdGhlIG51bWJlciBvZiBpbmZlY3Rpb25zDQogICBDb3VsZCBiZSBzYWlkIHRoYXQgcmVnaW9uIGFmZmVjdHMgdGhlIG51bWJlciBvZiBpbmZlY3Rpb25zIGJlY2F1c2UgdGhlIGF2ZXJhZ2Ugb2YgZWFjaCBsb2NhdGlvbiBpcyB2ZXJ5IGRpZmZlcmVudC4NCmBgYHtyfQ0Kc3FsZGYoJ1NFTEVDVCByZWdpb24scm91bmQoQXZnKGluZmVjdGlvbnMpKSBGUk9NIGRhdGEyIGdyb3VwIGJ5IHJlZ2lvbiBvcmRlciBieSAyIGRlc2MgJykNCmBgYA0KICAgDQogICBiLlBvcHVsYXRpb24gYWZmZWN0cyB0aGUgbnVtYmVyIG9mIGluZmVjdGlvbnMNCiAgIEkgd291bGQgc2F5IHRoYXQgc2luY2UgcmVnaW9ucyB3aXRoIG1vcmUgcG9wdWxhdGlvbiBoYXMgaGlnaGVyIHZhbHVlIG9mIGF2ZXJhZ2UgaW5mZWN0aW9ucywgeWVzIHBvcHVsYXRpb24gYWZmZWN0cyBpbmZlY3Rpb25zLg0KYGBge3J9DQpzcWxkZignU0VMRUNUIHJlZ2lvbiwgcG9wLCByb3VuZChBdmcoaW5mZWN0aW9ucykpIEZST00gZGF0YTIgZ3JvdXAgYnkgcmVnaW9uIG9yZGVyIGJ5IDIgZGVzYyAnKQ0KYGBgDQogICANCiAgIA0KICAgYy5JbmNvbWUgYWZmZWN0cyB0aGUgbnVtYmVyIG9mIGluZmVjdGlvbnMNCiAgVGhlIG1heGltdW4gbnVtYmVyIG9mIGluZmVjdGlvbnMgaXMgZm9yIHRoZSBtYXggaW5jb21lLiBIb3dldmVyLCBJIGRvIG5vdCBzZWUgYSBjbGVhciByZWxhdGlvbiBiZXR3ZWVuIHRoZXNlIDIgdmFyaWFibGVzLg0KIA0KYGBge3J9DQpzcWxkZignU0VMRUNUIGluY29tZSxpbmZlY3Rpb25zIEZST00gZGF0YTIgb3JkZXIgYnkgaW5jb21lIGRlc2MnKQ0KDQpgYGANCiANCiANCiAgIGQudWZvMjAxMCBhZmZlY3RzIHRoZSBudW1iZXIgb2YgaW5mZWN0aW9ucw0KICAgU2luY2UgYmlnZ2VzdCBudW1iZXIgb2YgaW5mZWN0aW9ucyBoYXBwZW5lZCBpbiByZWdpb25zIHdoZXJlIG1vcmUgdW5pZGVudGlmaWVkIGZseWluZyBvYmplY3RzIGFyZSBmb3VuZGVkLCBJIHRoaW5rIGNvdWxkIGV4aXRzIGEgcmVsYXRpb25zaGlwIGJldHdlZW4gdmFyaWFibGUgdWZvMjAxMCBhbmQgaW5mZWN0aW9ucy4NCiAgIA0KYGBge3J9DQpzcWxkZignU0VMRUNUIHVmbzIwMTAsaW5mZWN0aW9ucyBGUk9NIGRhdGEyIG9yZGVyIGJ5IHVmbzIwMTAgZGVzYycpDQpgYGANCg0KICAgDQogICBlLiBUaGUgZGlmZmVyZW50IGludGVyYWN0aW9ucyBvZiByZWdpb24gYW5kIGluY29tZSwgYW5kIGluY29tZSBhbmQgcG9wdWxhdGlvbiBhZmZlY3RzIHRoZSBudW1iZXIgb2YgaW5mZWN0aW9ucy4NCiAgIA0KICAgVGhlIGF2ZXJhZ2Ugb2YgaW5mZWN0aW9ucyBvZiBlYWNoIHJlZ2lvbiBkZXBlbmRzIG9uIHRoZSBudW1iZXIgb24gaW5jb21lIHRoZSByZWdpb24gaGFzLiANCmBgYHtyfQ0Kc3FsZGYoJ1NFTEVDVCByZWdpb24saW5jb21lLCByb3VuZChBdmcoaW5mZWN0aW9ucykpIEZST00gZGF0YTIgZ3JvdXAgYnkgcmVnaW9uIG9yZGVyIGJ5IGluY29tZSBkZXNjJykNCmBgYA0Kd2l0aCB0aGUgZGF0YSB0aGF0IGNvdWxkIGJlIHNlZW4gaW50aGUgdGFibGUsIEkgdGhpbmsgdGhlIGluY29tZSBkb2VzIG5vdCBkZXBlbmQgb24gdGhlIHBvcHVsYXRpb24gbnVtYmVyIGJ1dCB4aXN0IGEgcmVhbHRpb25zaGlwIGJldHdlZW4gaW5jb21lIGFuZCBpbmZlY3Rpb25zLg0KYGBge3J9DQpzcWxkZignU0VMRUNUIGluY29tZSwgcG9wLCByb3VuZChBdmcoaW5mZWN0aW9ucykpIEZST00gZGF0YTIgZ3JvdXAgYnkgcmVnaW9uIG9yZGVyIGJ5IGluY29tZSBkZXNjJykNCmBgYA0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0K