From 98a2ef3cffed06116a28ed02ad2337a6b8e5ff05 Mon Sep 17 00:00:00 2001
From: peterc8
Date: Mon, 2 Dec 2024 23:03:16 -0500
Subject: [PATCH 1/2] updated links
---
.../peterc_finalProjectF24_roughdraft.Rmd | 10 +++++-----
.../peterc_finalProjectF24_roughdraft.nb.html | 12 ++++++------
.../peterc_finalProjectF24_roughdraft.pdf | Bin 343715 -> 343830 bytes
3 files changed, 11 insertions(+), 11 deletions(-)
diff --git a/StudentNotebooks/Assignment07_DraftFinalProjectNotebook/peterc_finalProjectF24_roughdraft.Rmd b/StudentNotebooks/Assignment07_DraftFinalProjectNotebook/peterc_finalProjectF24_roughdraft.Rmd
index ff5cb22..1a87b5e 100644
--- a/StudentNotebooks/Assignment07_DraftFinalProjectNotebook/peterc_finalProjectF24_roughdraft.Rmd
+++ b/StudentNotebooks/Assignment07_DraftFinalProjectNotebook/peterc_finalProjectF24_roughdraft.Rmd
@@ -155,10 +155,10 @@ This helped answer the question of how can we correlate the LIBS and PIXL data s
Here is a list data sets, codes, that are used in your work. Along with brief description and URL where they are located.
1. peterc-finalProjectF24.Rmd (with knit pdf and html) is this notebook.
-[https://github.rpi.edu/DataINCITE/DAR-Mars-F24/tree/main/StudentNotebooks/Assignment07/peterc-finalProjectF24.Rmd](https://github.rpi.edu/DataINCITE/DAR-Mars-F24/tree/main/StudentNotebooks/Assignment07/rcsid-finalProjectF24.Rmd)
+[https://github.rpi.edu/DataINCITE/DAR-Mars-F24/blob/main/StudentNotebooks/Assignment07_DraftFinalProjectNotebook/peterc_finalProjectF24_roughdraft.Rmd](https://github.rpi.edu/DataINCITE/DAR-Mars-F24/blob/main/StudentNotebooks/Assignment07_DraftFinalProjectNotebook/peterc_finalProjectF24_roughdraft.Rmd)
2. v1_libs_to_sample.Rds is the combined data set of PIXL and LIBS that includes the distance from a PIXL abrasion to a LIBS sample.
-[https://github.rpi.edu/DataINCITE/DAR-Mars-F24/blob/main/StudentData/v1_libs_to_sample.Rds](https://github.rpi.edu/DataINCITE/DAR-Mars-F24/blob/main/StudentData/PIXL_LIBS_Combined.Rds).
+[https://github.rpi.edu/DataINCITE/DAR-Mars-F24/blob/main/StudentData/v1_libs_to_sample.Rds](https://github.rpi.edu/DataINCITE/DAR-Mars-F24/blob/main/StudentData/v1_libs_to_sample.Rds).
Firstly, we set the number of meters distance threshold between a PIXL abrasion and LIBS sample. Within the v1_libs_to_sample.Rds, which Margo and I collaborated on there is a distance variable that is set via a function that Margo created to measure the distance between a PIXL abrasion and LIBS sample using their latitude and longitude coordinates.
```{r}
@@ -234,10 +234,10 @@ Using the LIBS and PIXL combined data set, I created a plot of the composition p
Here is a list data sets, codes, that are used in your work. Along with brief description and URL where they are located.
1. peterc_finalProjectF24.Rmd (with knit pdf and html) is this notebook.
-[https://github.rpi.edu/DataINCITE/DAR-Mars-F24/tree/main/StudentNotebooks/Assignment07/peterc_finalProjectF24.Rmd](https://github.rpi.edu/DataINCITE/DAR-Mars-F24/tree/main/StudentNotebooks/Assignment07/peterc_finalProjectF24.Rmd)
+[https://github.rpi.edu/DataINCITE/DAR-Mars-F24/blob/main/StudentNotebooks/Assignment07_DraftFinalProjectNotebook/peterc_finalProjectF24_roughdraft.Rmd](https://github.rpi.edu/DataINCITE/DAR-Mars-F24/blob/main/StudentNotebooks/Assignment07_DraftFinalProjectNotebook/peterc_finalProjectF24_roughdraft.Rmd)
2. peterc_assignment5.Rmd (with knit pdf and html) which is my previous notebook.
-[https://github.rpi.edu/DataINCITE/DAR-Mars-F24/tree/main/StudentNotebooks/Assignment05/peterc_assigment05.Rmd](https://github.rpi.edu/DataINCITE/DAR-Mars-F24/tree/main/StudentNotebooks/Assignment05/peterc_-finalProjectF24_assignment05.Rmd)
+[https://github.rpi.edu/DataINCITE/DAR-Mars-F24/tree/main/StudentNotebooks/Assignment05/peterc_assigment05.Rmd](https://github.rpi.edu/DataINCITE/DAR-Mars-F24/tree/main/StudentNotebooks/Assignment05/peterc_assigment05.Rmd])
3. supercam_libs_moc_loc.Rds which is the original LIBS data given to our research group.
[https://github.rpi.edu/DataINCITE/DAR-Mars-F24/blob/main/Data/supercam_libs_moc_loc.Rds](https://github.rpi.edu/DataINCITE/DAR-Mars-F24/blob/main/Data/supercam_libs_moc_loc.Rds)
@@ -438,7 +438,7 @@ Using the LIBS and PIXL combined data set, we created a ternary plot to show the
Here is a list data sets, codes, that are used in your work. Along with brief description and URL where they are located.
1. peterc-finalProjectF24.Rmd (with knit pdf and html) is this notebook.
-[https://github.rpi.edu/DataINCITE/DAR-Mars-F24/tree/main/StudentNotebooks/Assignment07/peterc-finalProjectF24.Rmd](https://github.rpi.edu/DataINCITE/DAR-Mars-F24/tree/main/StudentNotebooks/Assignment07/rcsid-finalProjectF24.Rmd)
+[https://github.rpi.edu/DataINCITE/DAR-Mars-F24/blob/main/StudentNotebooks/Assignment07_DraftFinalProjectNotebook/peterc_finalProjectF24_roughdraft.Rmd](https://github.rpi.edu/DataINCITE/DAR-Mars-F24/blob/main/StudentNotebooks/Assignment07_DraftFinalProjectNotebook/peterc_finalProjectF24_roughdraft.Rmd)
2. supercam_libs_moc_loc.Rds which is the original LIBS data given to our research group.
[https://github.rpi.edu/DataINCITE/DAR-Mars-F24/blob/main/Data/supercam_libs_moc_loc.Rds](https://github.rpi.edu/DataINCITE/DAR-Mars-F24/blob/main/Data/supercam_libs_moc_loc.Rds)
diff --git a/StudentNotebooks/Assignment07_DraftFinalProjectNotebook/peterc_finalProjectF24_roughdraft.nb.html b/StudentNotebooks/Assignment07_DraftFinalProjectNotebook/peterc_finalProjectF24_roughdraft.nb.html
index 450b902..3bc6417 100644
--- a/StudentNotebooks/Assignment07_DraftFinalProjectNotebook/peterc_finalProjectF24_roughdraft.nb.html
+++ b/StudentNotebooks/Assignment07_DraftFinalProjectNotebook/peterc_finalProjectF24_roughdraft.nb.html
@@ -1853,10 +1853,10 @@ 0.0 Preliminaries.
Here is a list data sets, codes, that are used in your work. Along with brief description and URL where they are located.
1. peterc-finalProjectF24.Rmd (with knit pdf and html) is this notebook.
-[https://github.rpi.edu/DataINCITE/DAR-Mars-F24/tree/main/StudentNotebooks/Assignment07/peterc-finalProjectF24.Rmd](https://github.rpi.edu/DataINCITE/DAR-Mars-F24/tree/main/StudentNotebooks/Assignment07/rcsid-finalProjectF24.Rmd)
+[https://github.rpi.edu/DataINCITE/DAR-Mars-F24/blob/main/StudentNotebooks/Assignment07_DraftFinalProjectNotebook/peterc_finalProjectF24_roughdraft.Rmd](https://github.rpi.edu/DataINCITE/DAR-Mars-F24/blob/main/StudentNotebooks/Assignment07_DraftFinalProjectNotebook/peterc_finalProjectF24_roughdraft.Rmd)
2. v1_libs_to_sample.Rds is the combined data set of PIXL and LIBS that includes the distance from a PIXL abrasion to a LIBS sample.
-[https://github.rpi.edu/DataINCITE/DAR-Mars-F24/blob/main/StudentData/v1_libs_to_sample.Rds](https://github.rpi.edu/DataINCITE/DAR-Mars-F24/blob/main/StudentData/PIXL_LIBS_Combined.Rds).
+[https://github.rpi.edu/DataINCITE/DAR-Mars-F24/blob/main/StudentData/v1_libs_to_sample.Rds](https://github.rpi.edu/DataINCITE/DAR-Mars-F24/blob/main/StudentData/v1_libs_to_sample.Rds).
Firstly, we set the number of meters distance threshold between a PIXL abrasion and LIBS sample. Within the v1_libs_to_sample.Rds, which Margo and I collaborated on there is a distance variable that is set via a function that Margo created to measure the distance between a PIXL abrasion and LIBS sample using their latitude and longitude coordinates.
@@ -2027,9 +2027,9 @@ 4.1 Data, Code, and Resources
with brief description and URL where they are located.
peterc_finalProjectF24.Rmd (with knit pdf and html) is this
-notebook. https://github.rpi.edu/DataINCITE/DAR-Mars-F24/tree/main/StudentNotebooks/Assignment07/peterc_finalProjectF24.Rmd
+notebook. https://github.rpi.edu/DataINCITE/DAR-Mars-F24/blob/main/StudentNotebooks/Assignment07_DraftFinalProjectNotebook/peterc_finalProjectF24_roughdraft.Rmd
peterc_assignment5.Rmd (with knit pdf and html) which is my
-previous notebook. https://github.rpi.edu/DataINCITE/DAR-Mars-F24/tree/main/StudentNotebooks/Assignment05/peterc_assigment05.Rmd
+previous notebook. https://github.rpi.edu/DataINCITE/DAR-Mars-F24/tree/main/StudentNotebooks/Assignment05/peterc_assigment05.Rmd
supercam_libs_moc_loc.Rds which is the original LIBS data given
to our research group. https://github.rpi.edu/DataINCITE/DAR-Mars-F24/blob/main/Data/supercam_libs_moc_loc.Rds
pixl_sol_coordinates.Rds, which is the data set containing the
@@ -2335,7 +2335,7 @@
5.1 Data, Code, and Resources
with brief description and URL where they are located.
peterc-finalProjectF24.Rmd (with knit pdf and html) is this
-notebook. https://github.rpi.edu/DataINCITE/DAR-Mars-F24/tree/main/StudentNotebooks/Assignment07/peterc-finalProjectF24.Rmd
+notebook. https://github.rpi.edu/DataINCITE/DAR-Mars-F24/blob/main/StudentNotebooks/Assignment07_DraftFinalProjectNotebook/peterc_finalProjectF24_roughdraft.Rmd
supercam_libs_moc_loc.Rds which is the original LIBS data given
to our research group. https://github.rpi.edu/DataINCITE/DAR-Mars-F24/blob/main/Data/supercam_libs_moc_loc.Rds
@@ -2568,7 +2568,7 @@ Appendix
-LS0tCnRpdGxlOiAiRGF0YSBBbmFseXRpY3MgUmVzZWFyY2ggSW5kaXZpZHVhbCBGaW5hbCBQcm9qZWN0IFJlcG9ydCAtIE1hcnMiCmF1dGhvcjogIkNoYXJsb3R0ZSBQZXRlcnNvbiIKZGF0ZTogIkZhbGwgMjAyNCIKb3V0cHV0OgogIHBkZl9kb2N1bWVudDoKICAgIHRvYzogeWVzCiAgICB0b2NfZGVwdGg6ICczJwogIGh0bWxfbm90ZWJvb2s6IGRlZmF1bHQKICBodG1sX2RvY3VtZW50OgogICAgdG9jOiB5ZXMKICAgIHRvY19kZXB0aDogMwogICAgdG9jX2Zsb2F0OiB5ZXMKICAgIG51bWJlcl9zZWN0aW9uczogeWVzCiAgICB0aGVtZTogdW5pdGVkCi0tLQoKCiMgREFSIFByb2plY3QgYW5kIEdyb3VwIE1lbWJlcnMKCiogUHJvamVjdCBuYW1lOiBNYXJzCiogR2l0SHViIElEOiBkYXItcGV0ZXJjCiogUHJvamVjdCB0ZWFtIG1lbWJlcnM6IERhbnRlIE13YXRpYm8sIERvw7FhIFJvYmVydHMsIERhdmlkIFdhbGN5emssIFh1YW50aW5nIFdhbmcsIEFzaHRvbiBDb21wdG9uLCBNYXJnbyBWYW5Fc3NlbHN0eW4sIE5pY29sYXMgTW9yYXdza2ksIENKIE1hcmlubywgQWFkaSBMYWhpcmkgCgojIDAuMCBQcmVsaW1pbmFyaWVzLgoKKlIgTm90ZWJvb2tzIGFyZSBtZWFudCB0byBiZSBkeW5hbWljIGRvY3VtZW50cy4gUHJvdmlkZSBhbnkgcmVsZXZhbnQgdGVjaG5pY2FsIGd1aWRhbmNlIGZvciB1c2VycyBvZiB5b3VyIG5vdGVib29rLiBBbHNvIHRha2UgY2FyZSBvZiBhbnkgcHJlbGltaW5hcmllcywgc3VjaCBhcyByZXF1aXJlZCBwYWNrYWdlcy4gU2FtcGxlIHRleHQ6KgoKVGhpcyByZXBvcnQgaXMgZ2VuZXJhdGVkIGZyb20gYW4gUiBNYXJrZG93biBmaWxlIHRoYXQgaW5jbHVkZXMgYWxsIHRoZSBSIGNvZGUgbmVjZXNzYXJ5IHRvIHByb2R1Y2UgdGhlIHJlc3VsdHMgZGVzY3JpYmVkIGFuZCBlbWJlZGRlZCBpbiB0aGUgcmVwb3J0LiAgQ29kZSBibG9ja3MgY2FuIGJlIHN1cnByZXNzZWQgZnJvbSBvdXRwdXQgZm9yIHJlYWRhYmlsaXR5IHVzaW5nIHRoZSBjb21tYW5kIGNvZGUgYHtSLCAgZWNobz1zaG93fWAgaW4gdGhlIGNvZGUgYmxvY2sgaGVhZGVyLiBJZiBgc2hvdyA8LSBGQUxTRWAgdGhlIGNvZGUgYmxvY2sgd2lsbCBiZSBzdXJwcmVzc2VkOyBpZiBgc2hvdyA8LSBUUlVFYCB0aGVuIHRoZSBjb2RlIHdpbGwgYmUgc2hvdy4gCgpgYGB7cn0KIyBTZXQgdG8gVFJVRSB0byBleHBhbmQgUiBjb2RlIGJsb2Nrczsgc2V0IHRvIEZBTFNFIHRvIGNvbGxhcHNlIFIgY29kZSBibG9ja3MgCnNob3cgPC0gVFJVRQpgYGAKCjwhLS0gRXhwYW5kIHRoaXMgbGlzdCBhcyBuZWNlc3NhcnkgZm9yIHlvdXIgbm90ZWJvb2sgLS0+CkV4ZWN1dGluZyB0aGlzIFIgbm90ZWJvb2sgcmVxdWlyZXMgc29tZSBzdWJzZXQgb2YgdGhlIGZvbGxvd2luZyBwYWNrYWdlczoKCiogYGdncGxvdDJgCiogYHRpZHl2ZXJzZWAKKiBgcGFuZG9jYAoqIGBybWFya2Rvd25gCiogYHN0cmluZ3JgCiogYGdnYmlwbG90YAoqIGBrbml0cmAKKiBgcnBhcnRgCiogYHJwYXJ0LnBsb3RgCiogYGNhcmV0YAoqIGBnZ3JlcGVsYAoqIGBnZ3Rlcm5gCgoKVGhlc2Ugd2lsbCBiZSBpbnN0YWxsZWQgYW5kIGxvYWRlZCBhcyBuZWNlc3NhcnkgKGNvZGUgc3VwcHJlc3NlZCkuIAoKPCEtLSBUaGUgYGluY2x1ZGU9RkFMU0VgIG9wdGlvbiBwcmV2ZW50cyB5b3VyIGNvZGUgZnJvbSBiZWluZyBzaG93biBhdCBhbGwgLS0+CmBgYHtyLCBpbmNsdWRlPUZBTFNFfQojIFRoaXMgY29kZSB3aWxsIGluc3RhbGwgcmVxdWlyZWQgcGFja2FnZXMgaWYgdGhleSBhcmUgbm90IGFscmVhZHkgaW5zdGFsbGVkCiMgQUxXQVlTIElOU1RBTEwgWU9VUiBQQUNLQUdFUyBMSUtFIFRISVMhCmlmICghcmVxdWlyZSgiZ2dwbG90MiIpKSB7CiAgIGluc3RhbGwucGFja2FnZXMoImdncGxvdDIiKQogICBsaWJyYXJ5KGdncGxvdDIpCn0KaWYgKCFyZXF1aXJlKCJ0aWR5dmVyc2UiKSkgewogICBpbnN0YWxsLnBhY2thZ2VzKCJ0aWR5dmVyc2UiKQogICBsaWJyYXJ5KHRpZHl2ZXJzZSkKfQoKaWYgKCFyZXF1aXJlKCJwYW5kb2MiKSkgewogIGluc3RhbGwucGFja2FnZXMoInBhbmRvYyIpCiAgbGlicmFyeShwYW5kb2MpCn0KCiMgUmVxdWlyZWQgcGFja2FnZXMgZm9yIE0yMCBMSUJTIGFuYWx5c2lzCmlmICghcmVxdWlyZSgicm1hcmtkb3duIikpIHsKICBpbnN0YWxsLnBhY2thZ2VzKCJybWFya2Rvd24iKQogIGxpYnJhcnkocm1hcmtkb3duKQp9CgppZiAoIXJlcXVpcmUoInN0cmluZ3IiKSkgewogIGluc3RhbGwucGFja2FnZXMoInN0cmluZ3IiKQogIGxpYnJhcnkoc3RyaW5ncikKfQoKaWYgKCFyZXF1aXJlKCJnZ2JpcGxvdCIpKSB7CiAgaW5zdGFsbC5wYWNrYWdlcygiZ2diaXBsb3QiKQogIGxpYnJhcnkoZ2diaXBsb3QpCn0KCmlmICghcmVxdWlyZSgia25pdHIiKSkgewogIGluc3RhbGwucGFja2FnZXMoImtuaXRyIikKICBsaWJyYXJ5KGtuaXRyKQp9CgppZiAoIXJlcXVpcmUoInJwYXJ0IikpIHsKICBpbnN0YWxsLnBhY2thZ2VzKCJycGFydCIpCiAgbGlicmFyeShycGFydCkKfQoKaWYgKCFyZXF1aXJlKCJycGFydC5wbG90IikpIHsKICBpbnN0YWxsLnBhY2thZ2VzKCJycGFydC5wbG90IikKICBsaWJyYXJ5KHJwYXJ0KQp9CgppZiAoIXJlcXVpcmUoImNhcmV0IikpIHsKICBpbnN0YWxsLnBhY2thZ2VzKCJjYXJldCIpCiAgbGlicmFyeShjYXJldCkKfQogIAppZiAoIXJlcXVpcmUoImdncmVwZWwiKSkgewogIGluc3RhbGwucGFja2FnZXMoImdncmVwZWwiKQogIGxpYnJhcnkoZ2dyZXBlbCkKfQoKaWYgKCFyZXF1aXJlKCJnZW9zcGhlcmUiKSkgewogIGluc3RhbGwucGFja2FnZXMoImdlb3NwaGVyZSIpCiAgbGlicmFyeShnZ3JlcGVsKQp9CgppZiAoIXJlcXVpcmUoImdndGVybiIpKSB7CiAgaW5zdGFsbC5wYWNrYWdlcygiZ2d0ZXJuIikKICBsaWJyYXJ5KGdncmVwZWwpCn0KCmBgYAoKIyAxLjAgUHJvamVjdCBJbnRyb2R1Y3Rpb24KClRoZSBNYXJzIFByb2plY3QgaXMgZm9jdXNlZCBvbiBkYXRhIGZyb20gdGhlIDIwMjAgTWFycyBQZXJzZXZlcmFuY2UgUm92ZXIuIFRoZSBnb2FsIG9mIHRoZSBtaXNzaW9uIGlzIHRvIGxvb2sgZm9yIG1pY3JvYmlhbCBhbmNpZW50IGxpZmUgb3IgZm9ybXMgb2Ygd2F0ZXIgb24gTWFycyAodGhpbmdzIHRoYXQgY291bGQgc3VnZ2VzdCBsaWZlKS4gUGVyc2V2ZXJhbmNlIHVzZXMgbXVsdGlwbGUgaW5zdHJ1bWVudHMsIGluY2x1ZGluZyBQSVhMIChQbGFuZXRhcnkgSW5zdHJ1bWVudCBmb3IgWC1SYXkgTGl0aG9jaGVtaXN0cnkpLCBTSEVSTE9DIChTY2FubmluZyBIYWJpdGFibGUgRW52aXJvbm1lbnRzIHdpdGggUmFtYW4gYW5kIEx1bWluZXNjZW5jZSBmb3IgT3JnYW5pY3MgYW5kIENoZW1pY2FscykgYW5kIFNVUEVSQ0FNLiBTVVBFUkNBTSBoYXMgbXVsdGlwbGUgaW5zdHJ1bWVudHMgdGhhdCBtZWFzdXJlIHNwZWN0cm9zY29weSB0byBtZWFzdXJlIHByb3BlcnRpZXMgb2YgbWF0ZXJpYWxzIG9uIE1hcnMsIGluY2x1ZGluZyBMSUJTIChMYXNlci1pbmR1Y2VkIGJyZWFrZG93biBzcGVjdHJvc2NvcHkpLiBUaGlzIG5vdGVib29rIHdpbGwgcHJpbWFyaWx5IGZvY3VzIG9uIHRoZSBkYXRhIHdlIGhhdmUgYmVlbiBnaXZlbiBvZiBQSVhMIGFuZCBMSUJTLiAgCgojIDIuMCBPcmdhbml6YXRpb24gb2YgUmVwb3J0CgpUaGlzIHJlcG9ydCBpcyBvcmdhbml6ZSBhcyBmb2xsb3dzOiAKCiogU2VjdGlvbiAzLjAuICBGaW5kaW5nIDE6IExJQlMgYW5kIFBJWEwgTWF0Y2hpbmcgLSBXZSB3ZXJlIGFibGUgdG8gY29tYmluZSB0aGUgTElCUyBhbmQgUElYTCBkYXRhIHNldHMgYnkgcGlja2luZyBhIG1heGltdW0gZGlzdGFuY2UgdmFyaWFibGUgZnJvbSBhIFBJWEwgYWJyYXNpb24gYW5kIG1hdGNoaW5nIExJQlMgc2FtcGxlcyB0aGF0IHdlcmUgd2l0aGluIHRoZSBzZXQgZGlzdGFuY2Ugb2YgYSBQSVhMIGFicmFzaW9uLiAgCgoqIFNlY3Rpb24gNC4wOiBGaW5kaW5nIDI6IFNvaWwgQ29tcG9zaXRpb24gQW5hbHlzaXMgLSBVc2luZyB0aGUgTElCUyBhbmQgUElYTCBjb21iaW5lZCBkYXRhIHNldCwgSSBjcmVhdGVkIGEgcGxvdCBvZiB0aGUgY29tcG9zaXRpb24gcGVyY2VudGFnZXMgb2YgY2hlbWljYWwgY29tcG91bmRzIHN1Y2ggYXMgU2kwMiwgSzIwLCBldGMuIHVzaW5nIGxvZyBzY2FsaW5nIHRvIGNvbXBhcmUgdGhlIGNvbXBvc2l0aW9ucyBvZiBhIFBJWEwgYWJyYXNpb24gYW5kIHRoZSBjb3JyZXNwb25kaW5nIExJQlMgc2FtcGxlIGNvbXBvc2l0aW9ucyAoYmFzZWQgb24gdGhlIExJQlMgc2FtcGxlcyBmb3IgeCBkaXN0YW5jZSBhd2F5IGZyb20gYSBQSVhMIGFicmFzaW9uKS4KCiogU2VjdGlvbiA1LjAgRmluZGluZyAzOiBBbmFseXppbmcgQ2F0aW9uIENvbWJpbmF0aW9ucyB1c2luZyBMSUJTIGFuZCBQSVhMIG1hdGNoZWQgZGF0YTogVXNpbmcgdGhlIExJQlMgYW5kIFBJWEwgY29tYmluZWQgZGF0YSBzZXQsIHdlIGNyZWF0ZWQgYSB0ZXJuYXJ5IHBsb3QgdG8gc2hvdyB0aGUgZGlzdHJpYnV0aW9uIG9mIExJQlMgc2FtcGxlcyBzb3J0ZWQgYnkgd2hhdCBQSVhMIGFicmFzaW9uIHRoZXkgYXJlIGNsb3Nlc3QgdG8gKGJhc2VkIG9uIGEgY2hvc2VuIGRpc3RhbmNlIHZhcmlhYmxlKS4KCiogU2VjdGlvbiA2LjAgT3ZlcmFsbCBjb25jbHVzaW9ucyBhbmQgc3VnZ2VzdGlvbnMgCgoqIFNlY3Rpb24gNy4wIEFwcGVuZGl4IFRoaXMgc2VjdGlvbiBkZXNjcmliZSB0aGUgZm9sbG93aW5nIGFkZGl0aW9uYWwgd29ya3MgdGhhdCBtYXkgYmUgaGVscGZ1bCBpbiB0aGUgZnV0dXJlIHdvcms6ICpsaXN0IHN1YmplY3RzKi4gIAoKCiMgMy4wIEZpbmRpbmcgMTogUElYTCBhbmQgTElCUyBNYXRjaGluZwoKX0dpdmUgYSBoaWdobGV2ZWwgb3ZlcnZpZXcgb2YgdGhlIG1ham9yIGZpbmRpbmcuIFdoYXQgcXVlc3Rpb25zIHdlcmUgeW91ciB0cnlpbmcgdG8gYWRkcmVzcywgd2hhdCBhcHByb2FjaGVzIGRpZCB5b3UgZW1wbG95LCBhbmQgd2hhdCBoYXBwZW5lZD9fCgpGaXJzdGx5LCB3ZSB3aWxsIGJlIHRha2luZyBhIGxvb2sgYXQgaG93IFBJWEwgYW5kIExJQlMgY29ycmVzcG9uZC4gT3VyIGdyb3VwIGZvdW5kIHZlcnkgZWFybHkgaW4gb3VyIHJlc2VhcmNoIHRoYXQgdGhlcmUgd2Fzbid0IGEgZmVhdHVyZSBhbW9uZyB0aGVtIHRoYXQgY2FuIGJlIHVzZWQgdG8gbWF0Y2ggdGhlIGRhdGEgc2V0cy4gRm9yIGV4YW1wbGUsIHRoZSBjb2x1bW5zIG9mIFBJWEwgYXJlIG9yZ2FuaXplZCBieSBsYXRpdHVkZSBhbmQgbG9uZ2l0dWRlIGFzIHdlbGwgYXMgc2FtcGxlIG51bWJlciAoMS0xNiksIHNhbXBsZSBuYW1lLCBhbmQgYWJyYXNpb24gbmFtZS4gVW5mb3J0dW5hdGVseSwgTElCUyB3YXNuJ3Qgc29ydGVkIHRoZSBzYW1lIHdheS4gTElCUyB3YXMgb3JnYW5pemVkIGJ5IHRoZSBzb2wgdGhhdCB0aGUgc2FtcGxlIHdhcyB0YWtlbiBhdC4gTElCUyBpcyBicm9rZW4gdXAgaW50byBtYW55IGRpZmZlcmVudCB0eXBlcyBvZiBzYW1wbGVzIGFzIHdlbGwsIGluY2x1ZGluZyB0aGUgZmFjdCBpdCBjYXJyaWVzIGFyb3VuZCBlYXJ0aCByZWZlcmVuY2UgZGF0YSB0byBiZSB1c2VkIGluIGNvbXBhcmluZyB3aXRoIGRpZmZlcmVudCBzYW1wbGUgc2l0ZXMuIFRoYXQgYmVpbmcgc2FpZCwgaW4gb3JkZXIgdG8gbWF0Y2ggUElYTCB0YXJnZXRzIHRvIGNvcnJlc3BvbmRpbmcgTElCUyBzYW1wbGVzLCBNYXJnbyBhbmQgSSBjcmVhdGVkIGEgbmV3IGRhdGEgc2V0IHRoYXQgYWRkZWQgYW5vdGhlciBtZXRhZGF0YSBmZWF0dXJlIHRvIFBJWEwgKGxhdGl0dWRlIGFuZCBsb25naXR1ZGUgY29vcmRpbmF0ZXMpIHdoaWNoIHdlIG9idGFpbmVkIGZyb20gdGhlIEFuYWx5c3QncyBOb3RlYm9vay4gT25jZSB0aGlzIHdhcyBhZGRlZCBpbiwgd2UgcmVhbGl6ZWQgdGhhdCB0aGUgbG9uZ2l0dWRlIGFuZCBsYXRpdHVkZSBkaWRuJ3QgcmVhbGx5IG1hdGNoLiBTbyBNYXJnbyBjcmVhdGVkIGEgZGlzdGFuY2UgZnVuY3Rpb24gdG8gbWF0Y2ggTElCUyBzYW1wbGVzIHRvIFBJWEwgdGFyZ2V0cyBiYXNlZCBvbiB3aGF0ZXZlciBkaXN0YW5jZSBhIHBlcnNvbiBzcGVjaWZpZXMuIE9yaWdpbmFsbHksIHdlIHNldCBpdCB0byBiZSByb3VuZGVkIHRvIHRocmVlIHRob3VzYW5kdGhzIGFuZCBtYXRjaCBiYXNlZCBvbiB0aGF0LgoKVGhpcyBoZWxwZWQgYW5zd2VyIHRoZSBxdWVzdGlvbiBvZiBob3cgY2FuIHdlIGNvcnJlbGF0ZSB0aGUgTElCUyBhbmQgUElYTCBkYXRhIHNldHMgdG8gYmUgYWJsZSB0byBwbG90IHRoZW0gb24gdGhlIHNhbWUgYXhpcyBvZiB3aGF0ZXZlciBwbG90IGlzIHRyeWluZyB0byBiZSBjcmVhdGVkLiBJIHdhcyBjdXJpb3VzIHRvIHNlZSBob3cgY2xvc2UgUElYTCB0YXJnZXRzIHdlcmUgdG8gTElCUyBzYW1wbGUgc2l0ZXMgYXMgd2VsbCBhcyBob3cgbWFueSBMSUJTIHNhbXBsZXMgd291bGQgYmUgYXNzb2NpYXRlZCB3aXRoIGEgUElYTCB0YXJnZXQgcGVyaGFwcyB3aXRoIGEgcmFkaXVzIG9mIDcgb3IgMTAgbWV0ZXJzLgoKIyMgMy4xIERhdGEsIENvZGUsIGFuZCBSZXNvdXJjZXMKCkhlcmUgaXMgYSBsaXN0IGRhdGEgc2V0cywgY29kZXMsIHRoYXQgYXJlIHVzZWQgaW4geW91ciB3b3JrLiBBbG9uZyB3aXRoIGJyaWVmIGRlc2NyaXB0aW9uIGFuZCBVUkwgd2hlcmUgdGhleSBhcmUgbG9jYXRlZC4KCjEuIHBldGVyYy1maW5hbFByb2plY3RGMjQuUm1kICh3aXRoIGtuaXQgcGRmIGFuZCBodG1sKSBpcyB0aGlzIG5vdGVib29rLgpbaHR0cHM6Ly9naXRodWIucnBpLmVkdS9EYXRhSU5DSVRFL0RBUi1NYXJzLUYyNC90cmVlL21haW4vU3R1ZGVudE5vdGVib29rcy9Bc3NpZ25tZW50MDcvcGV0ZXJjLWZpbmFsUHJvamVjdEYyNC5SbWRdKGh0dHBzOi8vZ2l0aHViLnJwaS5lZHUvRGF0YUlOQ0lURS9EQVItTWFycy1GMjQvdHJlZS9tYWluL1N0dWRlbnROb3RlYm9va3MvQXNzaWdubWVudDA3L3Jjc2lkLWZpbmFsUHJvamVjdEYyNC5SbWQpCgoyLiB2MV9saWJzX3RvX3NhbXBsZS5SZHMgaXMgdGhlIGNvbWJpbmVkIGRhdGEgc2V0IG9mIFBJWEwgYW5kIExJQlMgdGhhdCBpbmNsdWRlcyB0aGUgZGlzdGFuY2UgZnJvbSBhIFBJWEwgYWJyYXNpb24gdG8gYSBMSUJTIHNhbXBsZS4gIApbaHR0cHM6Ly9naXRodWIucnBpLmVkdS9EYXRhSU5DSVRFL0RBUi1NYXJzLUYyNC9ibG9iL21haW4vU3R1ZGVudERhdGEvdjFfbGlic190b19zYW1wbGUuUmRzXShodHRwczovL2dpdGh1Yi5ycGkuZWR1L0RhdGFJTkNJVEUvREFSLU1hcnMtRjI0L2Jsb2IvbWFpbi9TdHVkZW50RGF0YS9QSVhMX0xJQlNfQ29tYmluZWQuUmRzKS4gCgpGaXJzdGx5LCB3ZSBzZXQgdGhlIG51bWJlciBvZiBtZXRlcnMgZGlzdGFuY2UgdGhyZXNob2xkIGJldHdlZW4gYSBQSVhMIGFicmFzaW9uIGFuZCBMSUJTIHNhbXBsZS4gV2l0aGluIHRoZSB2MV9saWJzX3RvX3NhbXBsZS5SZHMsIHdoaWNoIE1hcmdvIGFuZCBJIGNvbGxhYm9yYXRlZCBvbiB0aGVyZSBpcyBhIGRpc3RhbmNlIHZhcmlhYmxlIHRoYXQgaXMgc2V0IHZpYSBhIGZ1bmN0aW9uIHRoYXQgTWFyZ28gY3JlYXRlZCB0byBtZWFzdXJlIHRoZSBkaXN0YW5jZSBiZXR3ZWVuIGEgUElYTCBhYnJhc2lvbiBhbmQgTElCUyBzYW1wbGUgdXNpbmcgdGhlaXIgbGF0aXR1ZGUgYW5kIGxvbmdpdHVkZSBjb29yZGluYXRlcy4gCmBgYHtyfQptZXRlcnMgPC0gMTAwCmBgYAoKVG8gcHJlcGFyZSB0aGUgZGF0YSwgd2Ugd2lsbCBsb2FkIGluIHRoZSB2MV9saWJzX3RvX3NhbXBsZS5SZHMsIGdyb3VwIGJ5IGxhdGl0dWRlIGFuZCBsb25naXR1ZGUgb2YgTElCUywgYW5kIGZpbHRlciBvdXQgZXZlcnkgTElCUyBzYW1wbGUgdGhhdCBoYXMgYSBsYXJnZXIgZGlzdGFuY2UgZnJvbSBpdHMgY29ycmVzcG9uZGluZyBQSVhMIGFicmFzaW9uIHRoYW4gc3BlY2lmaWVkIGluIHRoZSBjaG9zZW4gZGlzdGFuY2UgKG1ldGVyKSB2YWx1ZS4gSW4gb3JkZXIgdG8gbWFrZSBhIHNjYXR0ZXIgcGxvdCBvZiB0aGUgTElCUyBhbmQgUElYTCBwb2ludHMsIHdlIHdpbGwgY3JlYXRlIGEgbmV3IGRhdGEgZnJhbWUgb2YgZWFjaCB1bmlxdWUgUElYTCBhYnJhc2lvbiBhbmQgaXRzIGNvb3JkaW5hdGVzLiBUaGF0IGlzIHRoZSB1bmlxdWVfcGl4bCBkYXRhIGZyYW1lIHdoaWNoIHdpbGwgYmUgdXNlZCB0byBwbG90IHRoZSBQSVhMIGFicmFzaW9uIGNvb3JkaW5hdGVzLgoKYGBge3IgfQpsaWJzX3RvX3NhbXBsZSA8LSByZWFkUkRTKCJ+L0RBUi1NYXJzLUYyNC9TdHVkZW50RGF0YS92MV9saWJzX3RvX3NhbXBsZS5SZHMiKQojbWFrZSBhIGZpbHRlcmVkIGRhdGEgZnJhbWUgdGhhdCBwaWNrcyB0aGUgbWF4IHBvaW50IG91dCBvZiBhbGwgbGlicyBzYW1wbGVzIGF0IGEgY2VydGFpbiB0YXJnZXQgCiMgZm9yIHNpbXBsaWNpdHkKZGZfZmlsdGVyZWQgPC0gbGlic190b19zYW1wbGUgJT4lCiAgZ3JvdXBfYnkoTGF0LmxpYnMsIExvbi5saWJzKSAlPiUKICBmaWx0ZXIoUG9pbnQubGlicyA9PSBtYXgoUG9pbnQubGlicykpICU+JQogIHVuZ3JvdXAoKQpkZl9kaXN0YW5jZV9maWx0ZXIgPC0gZGZfZmlsdGVyZWRbZGZfZmlsdGVyZWQkRGlzdGFuY2UgPD0gbWV0ZXJzLF0KCiNtYWtlIGEgZGF0YSBmcmFtZSB3aXRoIHRoZSB1bmlxdWUgcGl4bCBjb29yZGluYXRlcyBzaW5jZSB0aGV5IGFyZSBpbiBwYWlycyBvZiBpZGVudGljYWwgbGF0L2xvbgp1bmlxdWVfcGl4bCA8LSBkZl9maWx0ZXJlZCAlPiUKICBzZWxlY3QoTGF0LnBpeGwsIExvbi5waXhsLCBBYnJhc2lvbi5waXhsKSAlPiUgZGlzdGluY3QoKQpgYGAKCgojIyAzLjIgQ29udHJpYnV0aW9uCgpUaGUgbG9naXN0aWNzIG9mIGZpbHRlcmluZyB0aGUgb3JpZ2luYWwgZGF0YSBzZXQgaXMgbXkgd29yay4gUHJldmlvdXNseSwgSSBoYWQgdG8gZG8gYSBsb3QgbW9yZSBmaWx0ZXJpbmcgaW4gb3JkZXIgdG8gY2hvb3NlIHRoZSBkaXN0YW5jZSBhbmQgZ2V0IHVuaXF1ZSBMSUJTIHBvaW50cyBpbiBvcmRlciB0byBub3QgcHV0IHRvbyBtYW55IHBvaW50cyBvbiB0aGUgc2NhdHRlcnBsb3QuIE1hcmdvIGFuZCBJIHdvcmtlZCB0b2dldGhlciB0byBjcmVhdGUgdGhlIGRhdGEgc2V0IHRoYXQgSSB1c2UgaW4gdGhpcyBzZWN0aW9uICh2MV9saWJzX3RvX3NhbXBsZS5SZHMpIGJ5IGRlY2lkaW5nIGhvdyB0byBtYXRjaCB1cCBMSUJTIHRvIGNlcnRhaW4gUElYTCBhYnJhc2lvbnMuIE1hcmdvIGNyZWF0ZWQgdGhlIGRpc3RhbmNlIGZ1bmN0aW9uIHRvIGZpbmQgdGhlIGRpc3RhbmNlIGJldHdlZW4gUElYTCBhYnJhc2lvbnMgYW5kIExJQlMgc2FtcGxlcyBhbmQgYWRkZWQgdGhhdCBjb2x1bW4gdG8gdGhlIGRhdGEgc2V0LiBUaGVuLCBEb25hIGZpeGVkIGFsbCB0aGUgbmFtaW5nIGNvbnZlbnRpb25zIGluIHRoZSBkYXRhIHNldCBpbiBvcmRlciB0byBoYXZlIGNvbnNpc3RlbmN5IGFuZCBtYWtlIGl0IGVhc3kgdG8gdGVsbCB3aGljaCB2YXJpYWJsZSB3YXMgb3JpZ2luYWxseSBmcm9tIGVhY2ggZGF0YSBzZXQgKGV4LiBOYW1lLnBpeGwsIFRhcmdldC5saWJzKS4gSSB0aGVuIHVzZWQgdGhlIGRhdGEgdG8gY3JlYXRlIHBsb3RzIGFuZCBhbmFseXplLiBCZWxvdyBpcyBhIHNjYXR0ZXJwbG90IHNob3djYXNpbmcgdGhlIGRpc3RyaWJ1dGlvbiBvZiBQSVhMIGFicmFzaW9ucyBhbmQgY29ycmVzcG9uZGluZyBMSUJTIHNhbXBsZXMgYmFzZWQgb24gdGhlIHNwZWNpZmllZCBtYXggZGlzdGFuY2UgYmV0d2VlbiB0aGVtLiAKCgojIyAzLjMgTWV0aG9kcyBEZXNjcmlwdGlvbiAKCkkgY2hvc2UgdG8gdXNlIGdncGxvdCB0byBkaXNwbGF5IHRoZSBMSUJTIGFuZCBQSVhMIGRhdGEgZm9yIGVhc2llciBhbmFseXNpcyBvZiBzZWVpbmcgaG93IG1hbnkgTElCUyBzYW1wbGVzIGFsaWduIHdpdGggZGlmZmVyZW50IFBJWEwgYWJyYXNpb25zLiBJdCB3YXMgdmVyeSBpbnRlcmVzdGluZyB0byBjaGFuZ2UgYXJvdW5kIHRoZSBtYXggZGlzdGFuY2UgYW5kIHNlZSB3aGljaCBhbGlnbmVkIHdpdGggd2hpY2ggYWJyYXNpb24uIEluIHRlcm1zIG9mIGV4ZWN1dGlvbiwgaXQgdG9vayBtZSBhIGJpdCBvZiB0aW1lIHRvIG9yZ2FuaXplIGFsbCBvZiB0aGUgdGhvdWdodHMgTWFyZ28gYW5kIEkgaGFkIG9uIGhvdyB0byBjcmVhdGUgYW5kIG1hbmFnZSB0aGlzIGRhdGEgc2V0LiBPcmlnaW5hbGx5LCB3ZSBoYWQgcm91bmRlZCB0aGUgZGlzdGFuY2VzIHRvIHRoZSBuZWFyZXN0IHRob3VzYW5kdGggdG8gbWF0Y2ggdGhlbSwgYW5kIHRoZW4gd2VyZSBwbG90dGluZyB0aGF0IHdheS4gSG93ZXZlciwgdGhhdCBsZWZ0IGEgbG90IG9mIHJvb20gZm9yIGVycm9yIGFuZCB3YXNuJ3QgYXMgYWNjdXJhdGUuIENyZWF0aW5nIGEgZGlzdGFuY2UgZnVuY3Rpb24gYWxsb3dzIGZvciB0aGUgc2NpZW50aXN0IG9yIHBlcnNvbiB1c2luZyB0aGUgTWFycyBNaXNzaW9uIE1pbmRlciBBcHAgdG8gY2hvb3NlIHdoYXRldmVyIGRpc3RhbmNlIHRoZXkgd291bGQgbGlrZSBhbmQgYWxsb3dzIGZvciBtdWNoIG1vcmUgZnVuY3Rpb25hbGl0eS4gTW9kaWZ5aW5nIHRoZSBkYXRhIHNldCBtb3JlIGVuZGVkIHVwIGJlaW5nIG1vcmUgZWZmaWNpZW50IHRoYW4gYWRkaW5nIHNtYWxsIGVkaXRzIGFzIEkgd2FzIG1ha2luZyBteSBwbG90cyB3aGljaCB3YXMgb3JpZ2luYWxseSBtYWtpbmcgbWUgY3JhenkgKGFzIGluIGNoYW5naW5nIHZhcmlhYmxlIHR5cGVzIGlmIHRoZXkgd2VyZW4ndCB3aGF0IHRoZXkgd2VyZSBzdXBwb3NlZCB0byBiZSkuIEluIHRoZSBlbmQsIEkgbGVhcm5lZCBhIGxvdCBhYm91dCBkYXRhIG9yZ2FuaXphdGlvbiBhbmQgdGhhdCBjb25zaXN0ZW5jeSBhbmQgc3RheWluZyBvcmdhbml6ZWQgaXMga2V5IGFuZCBzYXZlcyBhIGxvdCBvZiB0aW1lIGxhdGVyIG9uLgoKCiMjIDMuNCBSZXN1bHQgYW5kIERpc2N1c3Npb24gCgpUbyBjcmVhdGUgYSBwbG90IG9mIHRoZSBMSUJTIGFuZCBQSVhMIGRhdGEgb3JnYW5pemVkIGJ5IHdoYXQgTElCUyBzYW1wbGVzIGFsaWduIHdpdGggd2hhdCBhYnJhc2lvbnMsIGZpcnN0IHBsb3R0ZWQgdGhlIExJQlMgc2FtcGxlcyBjb2xvcmVkIGJ5IHdoYXQgUElYTCBhYnJhc2lvbiB0aGV5IHdlcmUgY2xvc2VzdCB0bywgYW5kIHRoZW4gcGxvdHRlZCB0aCBQSVhMIGFicmFzaW9ucyBhcyByZWQgc3RhcnMgb24gdGhlIHBsb3QgdG8gc2hvdyB3aGVyZSB0aGUgUElYTCBhYnJhc2lvbnMgd2VyZSByZWxhdGl2ZSB0byB0aGUgTElCUyBzYW1wbGVzLgoKYGBge3IgfQojcGxvdCBvZiBsaWJzIGFuZCBwaXhsIGRhdGEgYnkgbGF0L2xvbgpnZ3Bsb3QoZGF0YSA9IGRmX2Rpc3RhbmNlX2ZpbHRlcikgKwogIGdlb21fcG9pbnQobWFwcGluZyA9IGFlcyh4ID0gTG9uLmxpYnMsIHkgPSBMYXQubGlicywgY29sb3IgPSBBYnJhc2lvbi5waXhsKSkgKyAgICAgICAgICAgICAgICAgIyBDb2xvciBieSBhYnJhc2lvbgogIGdlb21fcG9pbnQobWFwcGluZyA9IGFlcyh4ID0gTG9uLnBpeGwsIHkgPSBMYXQucGl4bCksIGRhdGEgPSB1bmlxdWVfcGl4bCwgY29sb3IgPSAicmVkIiwgc2hhcGUgPSAzLCBzaXplID0gMykgKyAjIEZpeGVkIGNvbG9yIGZvciB1bmlxdWVfcGl4bCBwb2ludHMKICBnZW9tX3RleHRfcmVwZWwobWFwcGluZyA9IGFlcyh4ID0gTG9uLnBpeGwsIHkgPSBMYXQucGl4bCwgbGFiZWwgPSBBYnJhc2lvbi5waXhsKSwgZGF0YSA9IHVuaXF1ZV9waXhsLAogICAgICAgICAgICAgICAgICB2anVzdCA9IDIsIGNvbG9yID0gInJlZCIpICsKICBsYWJzKHRpdGxlID0gcGFzdGUoIkxJQlMgU2FtcGxlcyBhbmQgUElYTCBBYnJhc2lvbnMgd2l0aGluIiwgbWV0ZXJzLCAibWV0ZXJzIiksCiAgICAgICB4ID0gIkxvbmdpdHVkZSIsCiAgICAgICB5ID0gIkxhdGl0dWRlIiwKICAgICAgIGNvbG9yID0gIlBJWEwgQWJyYXNpb24iLAogICAgICAgY2FwdGlvbiA9ICJEYXRhIGNvbGxlY3RlZCB1c2luZyBMSUJTIGFuZCBQSVhMIGluc3RydW1lbnRzIG9uIFBlcnNlcnZlcmFuY2Ugcm92ZXIuXG4gU2hvd3MgUElYTCBhYnJhc2lvbnMgcGxvdHRlZCBhcyByZWQgc3RhcnMsXG4gYW5kIHRoZSBjb3JyZXNwb25kaW5nIExJQlMgc2FtcGxlcyBjb2xvcmVkIGJ5IHRoZWlyIGNsb3Nlc3QgUElYTCBhYnJhc2lvbi4iKSsgICAgICAgICAgIyBMYWJlbCBmb3IgdGhlIGNvbG9yIGxlZ2VuZCAKICMgQ2VudGVyIHRoZSBjYXB0aW9uIG9uIHRoZSBsZWZ0IHNpZGUKICB0aGVtZSgKICAgIHBsb3QuY2FwdGlvbiA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDApICAjIEFsaWducyBjYXB0aW9uIHRvIHRoZSBsZWZ0CiAgKQoKI2FkZCBsZWdlbmQgZm9yIFBJWEwgaWRrIHdoeSBpdCdzIG5vdCB3b3JraW5nCmBgYAoKCiMjIDMuNSBDb25jbHVzaW9ucywgTGltaXRhdGlvbnMsIGFuZCBGdXR1cmUgV29yay4KCkkgYmVsaWV2ZSBteSBmaW5kaW5ncyBtYWtlIGl0IHZlcnkgZWFzeSBmb3IgcmVzZWFyY2hlcnMgYW5kIHNjaWVudGlzdHMgdG8gaGF2ZSBhIHZpc3VhbGl6YXRpb24gb2YgUElYTCBhbmQgTElCUyBzYW1wbGVzIHRoYXQgdGhleSB3YW50IHRvIHNlZSBiYXNlZCBvbiB3aGF0IG1heCBkaXN0YW5jZSB0aGV5IGFyZSBmb2N1c2luZyBvbiB3aGVuIGV4YW1pbmluZyBQSVhMIGFuZCBMSUJTIHRvZ2V0aGVyLiBGb3IgZnV0dXJlIHdvcmssIEkgdGhpbmsgYXMgbW9yZSBjb29yZGluYXRlcyBhbmQgZGF0YSBpcyBhZGRlZCB0byB0aGUgTElCUyBhbmQgUElYTCBkYXRhIHNldHMgYXMgdGhleSBiZWNvbWUgYXZhaWxhYmxlIGZyb20gTkFTQSB0aGlzIHdpbGwgY29udGludWUgdG8gYmUgYnVpbHQgdXBvbiBhbmQgYWx0aG91Z2ggaXQgaXNuJ3Qgc3VwZXIgY29tcGxpY2F0ZWQgb2YgYSBwbG90LCBpdCBwcm92aWRlcyBhIHZlcnkgbmVjZXNzYXJ5IGNvbnRleHQgdG8gdmlzdWFsaXplIFBJWEwgYW5kIExJQlMuIAoKLSBBZGQgbW9yZSBhYm91dCBsaW1pdGF0aW9ucz8KCiMgNC4wIEZpbmRpbmcgMjogU29pbCBDb21wb3NpdGlvbiBBbmFseXNpcwpfR2l2ZSBhIGhpZ2hsZXZlbCBvdmVydmlldyBvZiB0aGUgbWFqb3IgZmluZGluZy4gV2hhdCBxdWVzdGlvbnMgd2VyZSB5b3VyIHRyeWluZyB0byBhZGRyZXNzLCB3aGF0IGFwcHJvYWNoZXMgZGlkIHlvdSBlbXBsb3ksIGFuZCB3aGF0IGhhcHBlbmVkP18KClVzaW5nIHRoZSBMSUJTIGFuZCBQSVhMIGNvbWJpbmVkIGRhdGEgc2V0LCBJIGNyZWF0ZWQgYSBwbG90IG9mIHRoZSBjb21wb3NpdGlvbiBwZXJjZW50YWdlcyBvZiBjaGVtaWNhbCBjb21wb3VuZHMgc3VjaCBhcyBTaTAyLCBLMjAsIGV0Yy4gdXNpbmcgbG9nIHNjYWxpbmcgdG8gY29tcGFyZSB0aGUgY29tcG9zaXRpb25zIG9mIGEgUElYTCBhYnJhc2lvbiBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgTElCUyBzYW1wbGUgY29tcG9zaXRpb25zIChiYXNlZCBvbiB0aGUgTElCUyBzYW1wbGVzIGZvciB4IGRpc3RhbmNlIGF3YXkgZnJvbSBhIFBJWEwgYWJyYXNpb24pLiBUaGUgcXVlc3Rpb24gSSB3YXMgdHJ5aW5nIHRvIGFuc3dlciB3YXMgaG93IGRvZXMgdGhlIExJQlMgZGF0YSBvZiBhIGNlcnRhaW4gYXJlYSBjb21wYXJlIHRvIHRoZSBQSVhMIGRhdGEgb2YgdGhhdCBhcmVhPyBCeSBsb29raW5nIGF0IHRoZSBjb21wb3NpdGlvbiBvZiB0aGUgc29pbCBpbiBjZXJ0YWluIGxvY2F0aW9ucywgd2UgY2FuIGNvbXBhcmUgdGhlIGRpZmZlcmVuY2VzIGluIHRoZSBQSVhMIGFicmFzaW9uIGFuZCByZWxhdGluZyBMSUJTIHNhbXBsZXMgZm9yIGEgY2VydGFpbiBhcmVhIHV0aWxpemluZyB0aGUgc2FtZSBkYXRhIHNldCAodjFfbGlic190b19zYW1wbGUuUm1kKS4gSW4gb3JkZXIgdG8gYWNjb21wbGlzaCB0aGlzLCAKCgojIyA0LjEgRGF0YSwgQ29kZSwgYW5kIFJlc291cmNlcwpIZXJlIGlzIGEgbGlzdCBkYXRhIHNldHMsIGNvZGVzLCB0aGF0IGFyZSB1c2VkIGluIHlvdXIgd29yay4gQWxvbmcgd2l0aCBicmllZiBkZXNjcmlwdGlvbiBhbmQgVVJMIHdoZXJlIHRoZXkgYXJlIGxvY2F0ZWQuCgoxLiBwZXRlcmNfZmluYWxQcm9qZWN0RjI0LlJtZCAod2l0aCBrbml0IHBkZiBhbmQgaHRtbCkgaXMgdGhpcyBub3RlYm9vay4KW2h0dHBzOi8vZ2l0aHViLnJwaS5lZHUvRGF0YUlOQ0lURS9EQVItTWFycy1GMjQvdHJlZS9tYWluL1N0dWRlbnROb3RlYm9va3MvQXNzaWdubWVudDA3L3BldGVyY19maW5hbFByb2plY3RGMjQuUm1kXShodHRwczovL2dpdGh1Yi5ycGkuZWR1L0RhdGFJTkNJVEUvREFSLU1hcnMtRjI0L3RyZWUvbWFpbi9TdHVkZW50Tm90ZWJvb2tzL0Fzc2lnbm1lbnQwNy9wZXRlcmNfZmluYWxQcm9qZWN0RjI0LlJtZCkKCjIuIHBldGVyY19hc3NpZ25tZW50NS5SbWQgKHdpdGgga25pdCBwZGYgYW5kIGh0bWwpIHdoaWNoIGlzIG15IHByZXZpb3VzIG5vdGVib29rLgpbaHR0cHM6Ly9naXRodWIucnBpLmVkdS9EYXRhSU5DSVRFL0RBUi1NYXJzLUYyNC90cmVlL21haW4vU3R1ZGVudE5vdGVib29rcy9Bc3NpZ25tZW50MDUvcGV0ZXJjX2Fzc2lnbWVudDA1LlJtZF0oaHR0cHM6Ly9naXRodWIucnBpLmVkdS9EYXRhSU5DSVRFL0RBUi1NYXJzLUYyNC90cmVlL21haW4vU3R1ZGVudE5vdGVib29rcy9Bc3NpZ25tZW50MDUvcGV0ZXJjXy1maW5hbFByb2plY3RGMjRfYXNzaWdubWVudDA1LlJtZCkKCjMuIHN1cGVyY2FtX2xpYnNfbW9jX2xvYy5SZHMgd2hpY2ggaXMgdGhlIG9yaWdpbmFsIExJQlMgZGF0YSBnaXZlbiB0byBvdXIgcmVzZWFyY2ggZ3JvdXAuCltodHRwczovL2dpdGh1Yi5ycGkuZWR1L0RhdGFJTkNJVEUvREFSLU1hcnMtRjI0L2Jsb2IvbWFpbi9EYXRhL3N1cGVyY2FtX2xpYnNfbW9jX2xvYy5SZHNdKGh0dHBzOi8vZ2l0aHViLnJwaS5lZHUvRGF0YUlOQ0lURS9EQVItTWFycy1GMjQvYmxvYi9tYWluL0RhdGEvc3VwZXJjYW1fbGlic19tb2NfbG9jLlJkcykKCjQuIHBpeGxfc29sX2Nvb3JkaW5hdGVzLlJkcywgd2hpY2ggaXMgdGhlIGRhdGEgc2V0IGNvbnRhaW5pbmcgdGhlIFBJWEwgZGF0YSwgc29sLCBhbmQgY29vcmRpbmF0ZXMuCltodHRwczovL2dpdGh1Yi5ycGkuZWR1L0RhdGFJTkNJVEUvREFSLU1hcnMtRjI0L2Jsb2IvbWFpbi9TdHVkZW50RGF0YS9waXhsX3NvbF9jb29yZGluYXRlcy5SZHNdKGh0dHBzOi8vZ2l0aHViLnJwaS5lZHUvRGF0YUlOQ0lURS9EQVItTWFycy1GMjQvYmxvYi9tYWluL1N0dWRlbnREYXRhL3BpeGxfc29sX2Nvb3JkaW5hdGVzLlJkcykKCjQuIExJQlNfdHJhaW5pbmdfc2V0X3F1YXJ0aWxlcy5SZHMgaXMgdGhlIGRhdGEgd2l0aCBlYXJ0aCBxdWFydGlsZSByZWZlcmVuY2UgZGF0YS4KW2h0dHBzOi8vZ2l0aHViLnJwaS5lZHUvRGF0YUlOQ0lURS9EQVItTWFycy1GMjQvYmxvYi9tYWluL0RhdGEvTElCU190cmFpbmluZ19zZXRfcXVhcnRpbGVzLlJkc10oaHR0cHM6Ly9naXRodWIucnBpLmVkdS9EYXRhSU5DSVRFL0RBUi1NYXJzLUYyNC9ibG9iL21haW4vRGF0YS9MSUJTX3RyYWluaW5nX3NldF9xdWFydGlsZXMuUmRzKS4gCgpUbyBwcmVwYXJlIHRoZSBkYXRhLCBJIHN0YXJ0IGJ5IGxvYWRpbmcgaW4gdGhlIExJQlMgZGF0YS4gVGhlbiwgd2UgZHJvcCB0aGUgc3RhbmRhcmQgZGV2aWF0aW9uIGNvbHVtbnMgYW5kIHN1bSBvZiBwZXJjZW50YWdlIGNvbHVtbnMgbGVhdmluZyB1cyB3aXRoIGp1c3QgdGhlIHdlaWdodGVkIGNvbXBvc2l0aW9uIGluIHRlcm1zIG9mIG51bWVyaWNhbCBkYXRhLiBXZSBhbHNvIHJlbW92ZSB0aGUgc2NjdCB2YWx1ZXMsIGFzIHRob3NlIHZhbHVlcyBhcmUgdGhlIG9uZXMgdGhhdCBhcmUgZWFydGggcmVmZXJlbmNlIHNhbXBsZXMgdGhhdCBQZXJzZXJ2ZXJhbmNlIGNhcnJpZXMgd2l0aCBpdC4gVGhlcmVmb3JlLCB0aGV5IHdpbGwgbm90IGJlIHZlcnkgcmVsZXZhbnQgd2hlbiBwbG90dGluZyB0aGUgTElCUyBkYXRhIGFzIHdlIGFyZSBmb2N1c2VkIG9uIHRoZSBNYXJzIHNvaWwgY29tcG9zaXRpb25zLgoKYGBge3J9CiNFYXJ0aCBxdWFydGlsZXMKZWFydGhxdWFydGlsZXMuZGY8LXJlYWRSRFMoIi9hY2FkZW1pY3MvTUFUUC00OTEwLUYyNC9EQVItTWFycy1GMjQvRGF0YS9MSUJTX3RyYWluaW5nX3NldF9xdWFydGlsZXMuUmRzIikKI0xvYWQgaW4gTElCUyBkYXRhCmxpYnMuZGYgPC0gcmVhZFJEUygiL2FjYWRlbWljcy9NQVRQLTQ5MTAtRjI0L0RBUi1NYXJzLUYyNC9EYXRhL3N1cGVyY2FtX2xpYnNfbW9jX2xvYy5SZHMiKQojRHJvcCB0aGUgc3RhbmRhcmQgZGV2aWF0aW9uIGZlYXR1cmVzLCB0aGUgc3VtIG9mIHRoZSBwZXJjZW50YWdlcywgCiN0aGUgZGlzdGFuY2UsIGFuZCB0aGUgdG90YWwgZnJlcXVlbmNpZXMKbGlicy5kZiA8LSBsaWJzLmRmICU+JSAKICBzZWxlY3QoIShjKGRpc3RhbmNlX21tLFRvdC5FbS4sU2lPMl9zdGRldixUaU8yX3N0ZGV2LEFsMk8zX3N0ZGV2LEZlT1Rfc3RkZXYsCiAgICAgICAgICAgICBNZ09fc3RkZXYsTmEyT19zdGRldixDYU9fc3RkZXYsSzJPX3N0ZGV2LFRvdGFsKSkpCiMgQ29udmVydCB0aGUgcG9pbnRzIHRvIG51bWVyaWMKbGlicy5kZiRwb2ludCA8LSBhcy5udW1lcmljKGxpYnMuZGYkcG9pbnQpCmxpYnMuZGZbLDY6MTNdIDwtIHNhcHBseShsaWJzLmRmWyw2OjEzXSxhcy5udW1lcmljKQojcmVtb3ZlIHRoZSBzY2N0L3JlZmVyZW5jZSBzYW1wbGVzCmxpYnMuZGY8LWxpYnMuZGYlPiUKICBmaWx0ZXIoIShncmVwbCgic2NjdCIsIHRhcmdldCkpKQojYWRkIGEgY29sdW1uIHRvIGluZGljYXRlIHRoZSBuZWFyZXN0IHBpeGwKbGlicy5kZjwtY2JpbmQobmVhcmVzdHBpeGw9MCxsaWJzLmRmKQojbWFrZSBhIGRhdGFmcmFtZSBvZiBqdXN0IHRoZSBMSUJTIExhdC9Mb25nIGFuZCB0YXJnZXQgbmFtZSBhbmQgcmVtb3ZlIGR1cGxpY2F0ZXMKbGlic3RhcmdldHMuZGY8LWxpYnMuZGZbLGMoMSwzLDQsNSldCmxpYnN0YXJnZXRzLmRmPC1kaXN0aW5jdChsaWJzdGFyZ2V0cy5kZikKYGBgCgpTZXQgbWV0ZXJzIGFuZCBjaG9zZW4gYWJyYXNpb24gdG8gYWN0IGFzIGEgc2xpZGVyIGluIHRoZSAyZCBhcHAuCmBgYHtyfQojQ2hvb3NlIG1heCBkaXN0YW5jZSB2YXJpYWJsZSBiZXR3ZWVuIFBJWEwgYW5kIExJQlMgZGF0YQptZXRlcnMgPSAxMDAKI0Nob29zZSBQSVhMIGFicmFzaW9uIHlvdSB3YW50IHRvIGxvb2sgYXQKYWJyYXNpb25fbmFtZSA9ICJCZXJyeSBIb2xsb3ciCmBgYAoKTmV4dCwgd2UgbG9hZCBpbiB0aGUgUElYTCBkYXRhLiBXZSByZW1vdmUgdGhlIGF0bW9zcGhlcmljIHNhbXBsZSBhbmQgb25seSBzZWxlY3Qgb25lIFBJWEwgc2FtcGxlIG9mIGVhY2ggYWJyYXNpb24uCmBgYHtyLCBkYXRhMDJ9CiNyZWFkIGluIHBpeGwgZGF0YSB3aXRoIGxhdC9sb25nCnBpeGwuZGY8LXJlYWRSRFMoIi9hY2FkZW1pY3MvTUFUUC00OTEwLUYyNC9EQVItTWFycy1GMjQvU3R1ZGVudERhdGEvcGl4bF9zb2xfY29vcmRpbmF0ZXMuUmRzIikKI2luY2x1ZGUgb25seSBwaXhsIG1ldGFkYXRhCnBpeGwuZGY8LXBpeGwuZGYgJT4lCiAgc2VsZWN0KGMoMSwyLDE5LDIwLDIyKSkKI2NvbnZlcnQgTGF0L0xvbmcgdG8gbnVtZXJpYwpwaXhsLmRmJExhdCA8LSBhcy5udW1lcmljKHBpeGwuZGYkTGF0KQpwaXhsLmRmJExvbmcgPC0gYXMubnVtZXJpYyhwaXhsLmRmJExvbmcpCiNyZW1vdmUgcm93cyBzbyB3ZSBvbmx5IGhhdmUgb25lIHNhbXBsZSBwZXIgYWJyYXNpb24gYW5kIHJlbW92ZSBhdG1vc3BoZXJpYyBzYW1wbGUKcGl4bC5kZjwtcGl4bC5kZltjKDIsNCw2LDgsMTAsMTIsMTQsMTYpLF0KYGBgCgpOZXh0LCB3ZSB3aWxsIGluaXRpYWxpemUgYSBkaXN0YW5jZSB2YXJpYWJsZSAodG8gaW5kaWNhdGUgZGlzdGFuY2UgYmV0d2VlbiBQSVhMIGFicmFzaW9uIGFuZCBMSUJTIHRhcmdldCkgYW5kIGFsc28gaW5pdGlhbGl6ZSBlYWNoIFBJWEwgYWJyYXNpb24sIHdoaWNoIHdpbGwgYmUgdXNlZCB0byBtYXJrIHdoaWNoIFBJWEwgYWJyYXNpb24gdGhlIExJQlMgc2FtcGxlIGlzIGNsb3Nlc3QgdG8gYnkgdXNpbmcgYSBmYWN0b3Igb2YgMCBvciAxLiAKYGBge3J9CmxpYnN0YXJnZXRzLmRmPC1jYmluZChsaWJzdGFyZ2V0cy5kZiwiRGlzdGFuY2UiPTAsIkJlbGxlZ3JhZGUiPTAsIkRvdXJiZXMiPTAsIlF1YXJ0aWVyIj0wLCJBbGZhbGZhIj0wLCJUaG9ybnRvbkdhcCI9MCwiQmVycnkgSG9sbG93Ij0wLCJOb3ZhcnVwdGEiPTAsIlVnYW5payBJc2xhbmQiPTApCmBgYAoKVGhlIGRpc3RhbmNlIGZ1bmN0aW9uIGJlbG93IHdpbGwgY2FsY3VsYXRlIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gTElCUyB0YXJnZXQgYW5kIGFsbCB0aGUgUElYTCBhYnJhc2lvbnMsIGFuZCBwaWNrIHRoZSBzbWFsbGVzdCBkaXN0YW5jZSB0byBwaWNrIHRoZSBjbG9lc3QgUElYTCBhYnJhc2lvbiB0byB0aGF0IExJQlMgdGFyZ2V0LgpgYGB7cn0KZm9yKGkgaW4gMTpucm93KGxpYnN0YXJnZXRzLmRmKSkgewogICAgbGlic3RhcmdldHMuZGZbaSxjKDY6MTMpXTwtYyhkaXN0SGF2ZXJzaW5lKHBpeGwuZGZbMSxjKDEsMildLGxpYnN0YXJnZXRzLmRmW2ksYygyLDMpXSxyPTMzOTMxNjkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXN0SGF2ZXJzaW5lKHBpeGwuZGZbMixjKDEsMildLGxpYnN0YXJnZXRzLmRmW2ksYygyLDMpXSxyPTMzOTMxNjkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXN0SGF2ZXJzaW5lKHBpeGwuZGZbMyxjKDEsMildLGxpYnN0YXJnZXRzLmRmW2ksYygyLDMpXSxyPTMzOTMxNjkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXN0SGF2ZXJzaW5lKHBpeGwuZGZbNCxjKDEsMildLGxpYnN0YXJnZXRzLmRmW2ksYygyLDMpXSxyPTMzOTMxNjkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXN0SGF2ZXJzaW5lKHBpeGwuZGZbNSxjKDEsMildLGxpYnN0YXJnZXRzLmRmW2ksYygyLDMpXSxyPTMzOTMxNjkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXN0SGF2ZXJzaW5lKHBpeGwuZGZbNixjKDEsMildLGxpYnN0YXJnZXRzLmRmW2ksYygyLDMpXSxyPTMzOTMxNjkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXN0SGF2ZXJzaW5lKHBpeGwuZGZbNyxjKDEsMildLGxpYnN0YXJnZXRzLmRmW2ksYygyLDMpXSxyPTMzOTMxNjkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXN0SGF2ZXJzaW5lKHBpeGwuZGZbOCxjKDEsMildLGxpYnN0YXJnZXRzLmRmW2ksYygyLDMpXSxyPTMzOTMxNjkpKQogICAgCiAgICBsaWJzdGFyZ2V0cy5kZltpLDFdPC13aGljaC5taW4obGlic3RhcmdldHMuZGZbaSxjKDY6MTMpXSkKICAgIGxpYnN0YXJnZXRzLmRmW2ksNV08LW1pbihsaWJzdGFyZ2V0cy5kZltpLGMoNjoxMyldKQp9CmxpYnN0YXJnZXRzLmRmJG5lYXJlc3RwaXhsPC1hcy5mYWN0b3IobGlic3RhcmdldHMuZGYkbmVhcmVzdHBpeGwpCmxldmVscyhsaWJzdGFyZ2V0cy5kZiRuZWFyZXN0cGl4bCk8LShjKCJCZWxsZWdyYWRlIiwiRG91cmJlcyIsIlF1YXJ0aWVyIiwiQWxmYWxmYSIsIlRob3JudG9uR2FwIiwiQmVycnkgSG9sbG93IiwiTm92YXJ1cHRhIiwiVWdhbmlrIElzbGFuZCIpKQpgYGAKCkJlbG93IGlzIGFub3RoZXIgaW5pdGlhbGl6ZXIgZm9yIHRoZSBQSVhMIGFicmFzaW9uIGRhdGEuIFRoaXMgc2V0cyB0aGUgdmFyaWFibGVzIGZvciBlYWNoIFBJWEwgYWJyYXNpb24uCmBgYHtyfQpCZWxsZWdyYWRlPC1saWJzdGFyZ2V0cy5kZltsaWJzdGFyZ2V0cy5kZiRuZWFyZXN0cGl4bD09IkJlbGxlZ3JhZGUiLF0kdGFyZ2V0CkRvdXJiZXM8LWxpYnN0YXJnZXRzLmRmW2xpYnN0YXJnZXRzLmRmJG5lYXJlc3RwaXhsPT0iRG91cmJlcyIsXSR0YXJnZXQKUXVhcnRpZXI8LWxpYnN0YXJnZXRzLmRmW2xpYnN0YXJnZXRzLmRmJG5lYXJlc3RwaXhsPT0iUXVhcnRpZXIiLF0kdGFyZ2V0CkFsZmFsZmE8LWxpYnN0YXJnZXRzLmRmW2xpYnN0YXJnZXRzLmRmJG5lYXJlc3RwaXhsPT0iQWxmYWxmYSIsXSR0YXJnZXQKVGhvcm50b25HYXA8LWxpYnN0YXJnZXRzLmRmW2xpYnN0YXJnZXRzLmRmJG5lYXJlc3RwaXhsPT0iVGhvcm50b25HYXAiLF0kdGFyZ2V0CkJlcnJ5SG9sbG93PC1saWJzdGFyZ2V0cy5kZltsaWJzdGFyZ2V0cy5kZiRuZWFyZXN0cGl4bD09IkJlcnJ5IEhvbGxvdyIsXSR0YXJnZXQKTm92YXJ1cHRhPC1saWJzdGFyZ2V0cy5kZltsaWJzdGFyZ2V0cy5kZiRuZWFyZXN0cGl4bD09Ik5vdmFydXB0YSIsXSR0YXJnZXQKVWdhbmlrSXNsYW5kPC1saWJzdGFyZ2V0cy5kZltsaWJzdGFyZ2V0cy5kZiRuZWFyZXN0cGl4bD09IlVnYW5payBJc2xhbmQiLF0kdGFyZ2V0CmBgYAoKTmV4dCwgd2UgZmlsdGVyIG91dCB0aGUgTElCUyB0YXJnZXRzIHRoYXQgYXJlIG5vdCB3aXRoaW4gdGhlIHNwZWNpZmllZCBkaXN0YW5jZSB2YXJpYWJsZS4gVGhlbiwgd2UgbWVyZ2UgdGhlIExJQlMgZGF0YSB3aXRoIHRoZSByZXNwZWN0aXZlIFBJWEwgYWJyYXNpb24gYnkgbXV0YXRpbmcgYW5kIGFkZGluZyBhbiBhYnJhc2lvbiBjb2x1bW4gdGhhdCBoYXMgdGhlIGFicmFzaW9uIG5hbWUgY2xvc2VzdCB0byBlYWNoIExJQlMgdGFyZ2V0LiBXZSBhbHNvIGFkZCBhIGNvbHVtbiwgTElCUyBvciBQSVhMLCB3aGljaCBkZW5vdGVzIGlmIHRoZSByb3cgb2YgZGF0YSBpcyBmcm9tIHRoZSBQSVhMIGFuZCBMSUJTIGRhdGEgc2V0cy4KYGBge3J9CmluY2x1ZGVkLmxpYnM8LShsaWJzdGFyZ2V0cy5kZiU+JQogIGZpbHRlcihEaXN0YW5jZTxtZXRlcnMpKSR0YXJnZXQKbGlicy5tYXRyaXggPC1saWJzLmRmICU+JQogIGZpbHRlcih0YXJnZXQgJWluJSBpbmNsdWRlZC5saWJzKQpsaWJzLm1hdHJpeCA8LSBsaWJzLm1hdHJpeFssYyg1LDc6MTQpXQpsaWJzLm1hdHJpeDwtbGlicy5tYXRyaXhbLGMoMToyLDQ6OSwzKV0KbGlicy5tYXRyaXg8LWNiaW5kKCJBYnJhc2lvbiI9MCxsaWJzLm1hdHJpeCkKbGlicy5tYXRyaXg8LWxpYnMubWF0cml4JT4lCiAgbXV0YXRlKEFicmFzaW9uID0gaWZlbHNlKHRhcmdldCVpbiVBbGZhbGZhLCJBbGZhbGZhIiwgCiAgICAgICAgICAgICAgICAgICAgaWZlbHNlKHRhcmdldCAlaW4lIEJlbGxlZ3JhZGUsICJCZWxlZ3JhZGUiLAogICAgICAgICAgICAgICAgICAgIGlmZWxzZSh0YXJnZXQgJWluJSBCZXJyeUhvbGxvdywgIkJlcnJ5IEhvbGxvdyIsCiAgICAgICAgICAgICAgICAgICAgaWZlbHNlKHRhcmdldCAlaW4lIERvdXJiZXMsICJEb3VyYmVzIiwKICAgICAgICAgICAgICAgICAgICBpZmVsc2UodGFyZ2V0ICVpbiUgTm92YXJ1cHRhLCAiTm92YXJ1cHRhIiwKICAgICAgICAgICAgICAgICAgICBpZmVsc2UodGFyZ2V0ICVpbiUgUXVhcnRpZXIsICJRdWFydGllciIsCiAgICAgICAgICAgICAgICAgICAgaWZlbHNlKHRhcmdldCAlaW4lIFRob3JudG9uR2FwLCAiVGhvcm50b25HYXAiLAogICAgICAgICAgICAgICAgICAgIGlmZWxzZSh0YXJnZXQgJWluJSBVZ2FuaWtJc2xhbmQsICJVZ2FuaWsgSXNsYW5kIixBYnJhc2lvbikpKSkpKSkpKQpsaWJzLm1hdHJpeDwtY2JpbmQobGlic29ycGl4bD0xLGxpYnMubWF0cml4KQpgYGAKCk5leHQsIHdlIHdpbGwgcmVhZCBpbiB0aGUgUElYTCBkYXRhLiBXZSB3aWxsIHJlbW92ZSB0aGUgYXRtb3NwaGVyaWMgc2FtcGxlIChmaXJzdCBzYW1wbGUpIGFuZCBvbmx5IGNob29zZSBvbmUgb2YgZWFjaCBQSVhMIHNhbXBsZSBpbiBhcyBlYWNoIGFicmFzaW9uIGhhcyB0d28gc2FtcGxlcyAob25seSBvbmUgd2lsbCBiZSBuZWNlc3NhcnkgZm9yIHRoZSBwbG90KS4KCmBgYHtyLCBkYXRhMDN9CiNyZWFkIGluIHBpeGwgZGF0YSB3aXRoIGxhdC9sb25nCnBpeGwuZGY8LXJlYWRSRFMoIi9hY2FkZW1pY3MvTUFUUC00OTEwLUYyNC9EQVItTWFycy1GMjQvU3R1ZGVudERhdGEvcGl4bF9zb2xfY29vcmRpbmF0ZXMuUmRzIikKcGl4bC5kZjwtcGl4bC5kZiAlPiUKICBzZWxlY3QoYyg1OjgsMTI6MTQsMTcsMTksMTgsMjIpKQojcmVvcmRlciBwaXhsIGNvbHVtbnMgc28gdGhhdCBpdCBtYXRjaGVzIGxpYnMgZGF0YSBvcmdhbml6YXRpb24KcGl4bC5kZjwtcGl4bC5kZlssYygxMSwxMCw0LDMsOCwyLDYsMSw1LDcpXQojcmVtb3ZlIGF0bW9zcGhlcmljIHNhbXBsZQpwaXhsLmRmPC1waXhsLmRmWzI6MTYsXQpwaXhsLmRmPC1jYmluZChsaWJzb3JwaXhsPTAscGl4bC5kZikKYGBgCgpGaW5hbGx5LCB3ZSBtZXJnZSB0aGUgTElCUyBhbmQgUElYTCBkYXRhIHNldHMgd2UgaGF2ZSBtb2RpZmllZCB0aHVzIGZhciBmb3IgYSBjb21iaW5lZCBMSUJTIGFuZCBQSVhMIGRhdGEgZnJhbWUgc3VpdGFibGUgZm9yIGEgc29pbCBjb21wb3NpdGlvbiBsaW5lIHBsb3QuCmBgYHtyfQpjb2xuYW1lcyhwaXhsLmRmKTwtY29sbmFtZXMobGlicy5tYXRyaXgpCnBpeGxsaWJzLmRmPC1yYmluZChwaXhsLmRmLGxpYnMubWF0cml4KQpgYGAKCiMjIDQuMiBDb250cmlidXRpb24KClNvbWUgb2YgdGhlIGRhdGEgbWFuaXB1bGF0aW5nIHdvcmsgd2FzIE1hcmdvJ3MsIHN1Y2ggYXMgdGhlIGRpc3RhbmNlIGZ1bmN0aW9uLiBJbiB0ZXJtcyBvZiBwaXZvdGluZyB0aGUgZGF0YSBmcmFtZSBhbmQgdGhlIG90aGVyIHN0ZXBzIG9mIHRoZSBwcmVwcm9jZXNzaW5nIGlzIG15IG93biB3b3JrLiBUaGUgbWFuaXB1bGF0aW5nIGJlbG93IHRvIHBsb3QgdGhlIGxpbmUgc29pbCBjb21wb3NpdGlvbiBwbG90cyBpcyBteSBvd24uCgojIyA0LjMgTWV0aG9kcyBEZXNjcmlwdGlvbiAKCldoZW4gZGVjaWRpbmcgaG93IHRvIGFwcHJvYWNoIHRoZSBjb25jZXB0IG9mIGJ1aWxkaW5nIHNvaWwgY29tcG9zaXRpb24gcGxvdHMgb2YgZWFjaCBQSVhMIGFicmFzaW9uIGFuZCB0aGUgY29ycmVzcG9uZGluZyBMSUJTIHRhcmdldHMgd2l0aGluIGEgY2VydGFpbiBkaXN0YW5jZSBtYXhpbXVtLCBJIGRlY2lkZWQgdGhlIGJlc3Qgd2F5IHdhcyB0byBzdGFydCB3aXRoIHRoZSBvcmlnaW5hbCBkYXRhIHNldHMgYW5kIG1vZGlmeSB0aGVtIGFzIG5lZWRlZC4gRm9yIHRoZSBhY3R1YWwgcGxvdCwgdGhlIGJlc3Qgd2F5IHRvIGZvcm1hdCB0aGUgZGF0YSBjb3JyZWN0bHkgaXMgdG8gcGl2b3QgaXQsIGFzIEkgbmVlZCB0aGUgeCBheGlzIHRvIGJlIHRoZSBjb2x1bW4gbmFtZXMgaW4gdGhlIGN1cnJlbnQgZGF0YSBmcmFtZSB3ZSBoYXZlIChTaU8yIGFuZCBvdGhlciBjb21wb3NpdGlvbnMpIGFuZCB0aGUgeSBheGlzIHRvIGJlIHRoZSB3ZWlnaHRlZCBjb21wb3NpdGlvbiB2YWx1ZXMuIFdlIGFsc28gbmVlZCBhbiBpbmRpY2F0b3Igb2YgaWYgdGhlIGRhdGEgaXMgZnJvbSBQSVhMIG9yIExJQlMsIHdoaWNoIGFsc28gaXMgaGVscGZ1bCBmb3IgYnVpbGRpbmcgdGhlIGxpbmUgcGxvdHMuIAoKVXNlcnMgd2lsbCBoYXZlIHRvIHNldCB0aGUgZGlzdGFuY2UgdmFyaWFibGUgaW4gb3JkZXIgdG8gY2hvb3NlIHRoZSBtYXggZGlzdGFuY2UgYmV0d2VlbiBQSVhMIGFicmFzaW9ucyBhbmQgTElCUyB0YXJnZXRzLiBUaGlzIGNhbiB2YXN0bHkgY2hhbmdlIHRoZSBudW1iZXIgb2YgbGluZXMgb24gdGhlIHBsb3RzIHdoaWNoIGNhbiBoZWxwIHByZXZlbnQgb3ZlcmNyb3dkZWQgcGxvdHMuIFVzZXJzIGFsc28gY2FuIHNldCBhIHZhcmlhYmxlIHRvIGNob29zZSBhIHNwZWNpZmljIFBJWEwgYWJyYXNpb24gYW5kIGNvcnJlc3BvbmRpbmcgTElCUyB0YXJnZXRzLCB3aGljaCBpcyBlYXNpZXIgdG8gaW50ZXJwcmV0IGFzIHBsb3R0aW5nIGFsbCBvZiB0aGUgTElCUyBhbmQgUElYTCBjb21wb3NpdGlvbiBpbmZvcm1hdGlvbiBvbiBsaW5lIHBsb3RzIGxlYWRzIHRvIHZlcnkgY29uZGVuc2VkIGdyYXBocyB0aGF0IGFyZSBoYXJkIHRvIHJlYWQuCgojIyA0LjQgUmVzdWx0IGFuZCBEaXNjdXNzaW9uIAoKRmlyc3QsIHdlIHdpbGwgdHVybiB0aGUgZWFydGggcXVhcnRpbGUgaW5mb3JtYXRpb24gaW50byBhIGxvbmcgZGF0YSBmcmFtZSAobWVhbmluZyBwaXZvdGluZyB0aGUgY29sdW1ucyBpbnRvIHRoZSB2YWx1ZXMpLiAKYGBge3J9CiMgRWFydGggcXVhcnRpbGVzCmVhcnRocXVhcnRpbGVzX2xvbmcgPC0gZWFydGhxdWFydGlsZXMuZGYgJT4lCiAgcGl2b3RfbG9uZ2VyKGNvbHMgPSBzdGFydHNfd2l0aCgiU2lPMiIpOmxhc3RfY29sKCksIG5hbWVzX3RvID0gIkNvbXBvdW5kIiwgdmFsdWVzX3RvID0gIlBlcmNlbnRhZ2UiKQoKZWFydGhxdWFydGlsZXNfbG9uZyA8LSBlYXJ0aHF1YXJ0aWxlc19sb25nICU+JSByZW5hbWUoUXVhcnRpbGVzID0gYFRyYWluaW5nIHNldCBRdWFydGlsZXNgKQpgYGAKClRoZW4sIHRoZSBkYXRhIHdpbGwgYmUgZmlsdGVyZWQgdG8gb25seSBpbmNsdWRlIHRoZSBkYXRhIGZyb20gYSBzcGVjaWZpYyBQSVhMIGFicmFzaW9uIGNob3NlbiBieSB0aGUgdXNlci4gVGhlIGRhdGEgaXMgcGl2b3RlZCBpbnRvIGEgbG9uZyBmb3JtYXQsIGFuZCB0aGUgY29sdW1ucyBhcmUgcmVvcmRlcmVkIHRvIG1pbWljIHNpbWlsYXIgcGxvdHMgZnJvbSBOQVNBIHBhcGVycy4KYGBge3J9CiMgRmlsdGVyIGZvciB0aGUgc3BlY2lmaWMgYWJyYXNpb24gc2FtcGxlLCBlLmcuLCAiQWxmYWxmYSIKcGl4bGxpYnNfZmlsdGVyZWQgPC0gcGl4bGxpYnMuZGYgJT4lCiAgZmlsdGVyKEFicmFzaW9uID09IGFicmFzaW9uX25hbWUpCgojIFBpdm90IHRoZSBkYXRhIHRvIGxvbmdlciBmb3JtYXQgZm9yIGdncGxvdApwaXhsbGlic19sb25nIDwtIHBpeGxsaWJzX2ZpbHRlcmVkICU+JQogIHBpdm90X2xvbmdlcihjb2xzID0gc3RhcnRzX3dpdGgoIlNpTzIiKTpsYXN0X2NvbCgpLCBuYW1lc190byA9ICJDb21wb3VuZCIsIHZhbHVlc190byA9ICJQZXJjZW50YWdlIikKCmRlc2lyZWRfb3JkZXIgPC0gYygiU2lPMiIsICJBbDJPMyIsICJGZU9UIiwgIk1nTyIsICJDYU8iLCAiTmEyTyIsICJLMk8iLCAiVGlPMiIpICAjIFNwZWNpZnkgeW91ciBjdXN0b20gb3JkZXIgaGVyZQpwaXhsbGlic19sb25nJENvbXBvdW5kIDwtIGZhY3RvcihwaXhsbGlic19sb25nJENvbXBvdW5kLCBsZXZlbHMgPSBkZXNpcmVkX29yZGVyKQpgYGAKCkZvciB0aGUgcGxvdCwgd2UgdXNlIGdncGxvdCB0byBwbG90IHRoZSBwaXhsbGlic19sb25nIGRhdGEgZnJhbWUgd2UgY3JlYXRlZC4gVGhlIHBsb3QgaXMgY29sb3JlZCBieSBpZiB0aGUgbGluZSBpcyBhIFBJWEwgYWJyYXNpb24ncyBjb21wb3NpdGlvbiBvciBhIExJQlMgdGFyZ2V0J3MgY29tcG9zaXRpb24uIFdlIGFsc28gYWRkIGEgbGF5ZXIgd2l0aCB0aGUgZWFydGggcXVhcnRpbGUgaW5mb3JtYXRpb24sIHdoaWNoIGlzIHRoZSBkb3R0ZWQgbGluZXMuCmBgYHtyfQojIE1hcCB0aGUgUElYTC9MSUJTIGNvbHVtbiB0byBjb2xvciBhbmQgdXNlIHRhcmdldF9uYW1lIHRvIGRpZmZlcmVudGlhdGUgbGluZXMKZ2dwbG90KHBpeGxsaWJzX2xvbmcsIGFlcyh4ID0gQ29tcG91bmQsIHkgPSBQZXJjZW50YWdlLCBjb2xvciA9IGFzLmZhY3RvcihsaWJzb3JwaXhsKSwgZ3JvdXAgPSB0YXJnZXQpKSArCiAgZ2VvbV9saW5lKCkgKwogIGdlb21fcG9pbnQoKSArCiAgc2NhbGVfeV9jb250aW51b3VzKHRyYW5zPSdsb2cxMCcpICsKICAjIEFkZCBFYXJ0aCBxdWFydGlsZSBsaW5lcyB1c2luZyBlYXJ0aHF1YXJ0aWxlc19sb25nCiAgZ2VvbV9saW5lKGRhdGEgPSBlYXJ0aHF1YXJ0aWxlc19sb25nLCBhZXMoeCA9IENvbXBvdW5kLCB5ID0gUGVyY2VudGFnZSwgbGluZXR5cGUgPSBRdWFydGlsZXMsIGdyb3VwID0gUXVhcnRpbGVzKSwgCiAgICAgICAgICAgIGNvbG9yID0gImJsYWNrIiwgbGluZXR5cGUgPSAiZG90dGVkIikgKwogIGxhYnModGl0bGUgPSBwYXN0ZSgiU29pbCBDb21wb3NpdGlvbiBmb3IgUElYTCBhYnJhc2lvbiIsYWJyYXNpb25fbmFtZSwiYW5kIExJQlMgd2l0aGluIiwgbWV0ZXJzLCAibWV0ZXJzIiwgc2VwID0gIiAiKSwKICAgICAgIHggPSAiQ2hlbWljYWwgQ29tcG91bmQiLAogICAgICAgeSA9ICJXZWlnaHQgUGVyY2VudGFnZSIsCiAgICAgICBjb2xvciA9ICJNZWFzdXJlbWVudCBUeXBlIiwKICAgICAgIGxpbmV0eXBlID0gIkVhcnRoIFF1YXJ0aWxlcyIpICsKICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygiMCIgPSAiYmx1ZSIsICIxIiA9ICJyZWQiKSwgbGFiZWxzID0gYygiUElYTCIsICJMSUJTIikpICsKICB0aGVtZV9taW5pbWFsKCkKYGBgCkkgc3RpbGwgcGxhbiB0byB1cGRhdGUgYW5kIHRyeSB1c2luZyB0aGUgZ2dwbG90bGF5IGZlYXR1cmUgdG8gaW5jb3Jwb3JhdGUgYWxsIHRoZSBhYnJhc2lvbnMgYW5kIGRhdGEgb250byBvbmUgZ3JpZCBvZiBsaW5lIHBsb3RzLiBJIGFsc28gYW0gZ29pbmcgdG8gYWRkIHBsb3RzIHdoZXJlIHRoZSBtZWFuIGlzIHRha2VuIG9mIGFsbCB0aGUgTElCUyB0YXJnZXRzIHRoYXQgY29ycmVzcG9uZCB0byBhIFBJWEwgYWJyYXNpb24gc28gdGhlIHBsb3Qgd2lsbCBvbmx5IGhhdmUgb25lIExJQlMgbGluZSBhbmQgb25lIFBJWEwgbGluZSAoYWxvbmcgd2l0aCB0aGUgcmVmZXJlbmNlcyksIHRoaXMgaXMgYWxsIGp1c3QgZm9yIHRoZSBkcmFmdC4gSSBhbHNvIG5lZWQgdG8gb25seSBhZGQgY2VydGFpbiBxdWFydGlsZSBpbmZvcm1hdGlvbiBhbmQgbGFiZWwgdGhlbSwgdGhpcyBpcyBqdXN0IGEgcGxhY2Vob2xkZXIgb2YgdGhlIHByZXZpb3VzIHBsb3QuIEFsc28gbWF5YmUgd2lsbCBhZGQgaW4gU0NDVCB2YWx1ZXMgYXMgcmVmZXJlbmNlcywgbm90IHN1cmUgaWYgdGhleSBhcmUgc3VwZXIgcmVsZXZhbnQgb3IgaG93IHRvIHNvcnQgdGhlbS4KCiMjIDQuNSBDb25jbHVzaW9ucyBhbmQgRnV0dXJlIFdvcmsKVGhpcyBmaW5kaW5nIGNhbiBiZSB1c2VkIGJ5IGdlb2xvZ2lzdHMgdG8gYW5hbHl6ZSB3aGF0IGRpZmZlcmVudCBzb2lsIGNvbXBvc2l0aW9ucyBhcm91bmQgZGlmZmVyZW50IFBJWEwgYWJyYXNpb25zIGNhbiBtZWFuIGZvciBsaWZlIG9uIE1hcnMuIEZvciBleGFtcGxlLCBveGlkZSBwcmVzZW5jZSBkb2Vzbid0IG5lY2Vzc2FyaWx5IGluZGljYXRlIGxpZmUsIGJ1dCBpdCBjb3VsZCBpbmRpY2F0ZSBiaW9sb2dpY2FsIG9yIGNoZW1pY2FsIGxpZmUgcHJvY2Vzc2VzLiBGb3IgZXhhbXBsZSwgQ2FPIGNhbiBpbmRpY2F0ZSB0aGUgcHJlc2VuY2Ugb2Ygb2xkIGJpb2xvZ2ljYWwgbWF0ZXJpYWwgbGlrZSBzaGVsbHMgb3IgZm9zc2lscy4KLUFkZCBtb3JlIGFib3V0IGZ1dHVyZSB3b3JrLCBub3Qgc3VyZSB3aGF0IGVsc2UgdG8gaW5jbHVkZQoKIyA1LjAgRmluZGluZyAzOiBBbmFseXppbmcgQ2F0aW9uIENvbWJpbmF0aW9ucyB1c2luZyBMSUJTIGFuZCBQSVhMIG1hdGNoZWQgZGF0YQpVc2luZyB0aGUgTElCUyBhbmQgUElYTCBjb21iaW5lZCBkYXRhIHNldCwgd2UgY3JlYXRlZCBhIHRlcm5hcnkgcGxvdCB0byBzaG93IHRoZSBkaXN0cmlidXRpb24gb2YgTElCUyBzYW1wbGVzIHNvcnRlZCBieSB3aGF0IFBJWEwgYWJyYXNpb24gdGhleSBhcmUgY2xvc2VzdCB0byAoYmFzZWQgb24gYSBjaG9zZW4gZGlzdGFuY2UgdmFyaWFibGUpLiBNdWNoIG9mIHRoZSBkYXRhIHByZXByb2Nlc3NpbmcgaXMgc2ltaWxhciB0byBGaW5kaW5nIDEgd2hpY2ggd2Ugd2lsbCByZXBlYXQgaGVyZS4gSG93ZXZlciwgdGhlIGdvYWwgaGVyZSBpcyB0byBhbmFseXplIGhvdyBkaWZmZXJlbnQgZ3JvdXBzIG9mIExJQlMgc2FtcGxlcyAoY29sb3JlZCBieSBtYXRjaGluZyBQSVhMIGFicmFzaW9uKSBkaWZmZXIgYnkgY2F0aW9uIGNvbXBvc2l0aW9uLgoKIyMgNS4xIERhdGEsIENvZGUsIGFuZCBSZXNvdXJjZXMKSGVyZSBpcyBhIGxpc3QgZGF0YSBzZXRzLCBjb2RlcywgdGhhdCBhcmUgdXNlZCBpbiB5b3VyIHdvcmsuIEFsb25nIHdpdGggYnJpZWYgZGVzY3JpcHRpb24gYW5kIFVSTCB3aGVyZSB0aGV5IGFyZSBsb2NhdGVkLgoKMS4gcGV0ZXJjLWZpbmFsUHJvamVjdEYyNC5SbWQgKHdpdGgga25pdCBwZGYgYW5kIGh0bWwpIGlzIHRoaXMgbm90ZWJvb2suCltodHRwczovL2dpdGh1Yi5ycGkuZWR1L0RhdGFJTkNJVEUvREFSLU1hcnMtRjI0L3RyZWUvbWFpbi9TdHVkZW50Tm90ZWJvb2tzL0Fzc2lnbm1lbnQwNy9wZXRlcmMtZmluYWxQcm9qZWN0RjI0LlJtZF0oaHR0cHM6Ly9naXRodWIucnBpLmVkdS9EYXRhSU5DSVRFL0RBUi1NYXJzLUYyNC90cmVlL21haW4vU3R1ZGVudE5vdGVib29rcy9Bc3NpZ25tZW50MDcvcmNzaWQtZmluYWxQcm9qZWN0RjI0LlJtZCkKCjIuIHN1cGVyY2FtX2xpYnNfbW9jX2xvYy5SZHMgd2hpY2ggaXMgdGhlIG9yaWdpbmFsIExJQlMgZGF0YSBnaXZlbiB0byBvdXIgcmVzZWFyY2ggZ3JvdXAuCltodHRwczovL2dpdGh1Yi5ycGkuZWR1L0RhdGFJTkNJVEUvREFSLU1hcnMtRjI0L2Jsb2IvbWFpbi9EYXRhL3N1cGVyY2FtX2xpYnNfbW9jX2xvYy5SZHNdKGh0dHBzOi8vZ2l0aHViLnJwaS5lZHUvRGF0YUlOQ0lURS9EQVItTWFycy1GMjQvYmxvYi9tYWluL0RhdGEvc3VwZXJjYW1fbGlic19tb2NfbG9jLlJkcykKCgpGaXJzdCwgd2Ugc2V0IGEgZGlzdGFuY2UgdmFyaWFibGUgd2hpY2ggY2FuIGJlIHVzZWQgYXMgYSBzbGlkZXIgYmFyIGluIHRoZSBhcHAuIENoYW5naW5nIHRoaXMgdmFyaWFibGUgc2V0cyB0aGUgbWF4aW11bSBkaXN0YW5jZSBiZXR3ZWVuIGEgUElYTCB0YXJnZXQgYW5kIExJQlMgc2FtcGxlIGZvciB0aGVtIHRvIGJlIGNsYXNzaWZpZWQgdG9nZXRoZXIuCmBgYHtyfQojc2V0IGRpc3RhbmNlIHZhcmlhYmxlIHdoaWNoIGNhbiBiZSB1c2VkIGFzIGEgdG9nZ2xlIHRvb2wKZGlzdGFuY2U9NTAKYGBgCgpUbyBwcmVwYXJlIHRoZSBkYXRhLCBJIHN0YXJ0IGJ5IGxvYWRpbmcgaW4gdGhlIExJQlMgZGF0YS4gVGhlbiwgd2UgZHJvcCB0aGUgc3RhbmRhcmQgZGV2aWF0aW9uIGNvbHVtbnMgYW5kIHN1bSBvZiBwZXJjZW50YWdlIGNvbHVtbnMgbGVhdmluZyB1cyB3aXRoIGp1c3QgdGhlIHdlaWdodGVkIGNvbXBvc2l0aW9uIGluIHRlcm1zIG9mIG51bWVyaWNhbCBkYXRhLiBXZSBhbHNvIHJlbW92ZSB0aGUgc2NjdCB2YWx1ZXMsIGFzIHRob3NlIHZhbHVlcyBhcmUgdGhlIG9uZXMgdGhhdCBhcmUgZWFydGggcmVmZXJlbmNlIHNhbXBsZXMgdGhhdCBQZXJzZXJ2ZXJhbmNlIGNhcnJpZXMgd2l0aCBpdC4gVGhlcmVmb3JlLCB0aGV5IHdpbGwgbm90IGJlIHZlcnkgcmVsZXZhbnQgd2hlbiBwbG90dGluZyB0aGUgTElCUyBkYXRhIGFzIHdlIGFyZSBmb2N1c2VkIG9uIHRoZSBjYXRpb24gY29tYmluYXRpb25zIGFuZCB0aGVyZWZvcmUgb25seSBuZWVkIHRoZSB3ZWlnaHRlZCBjb21wb3NpdGlvbnMuCmBgYHtyfQojTG9hZCBpbiBMSUJTIGRhdGEKbGlicy5kZiA8LSByZWFkUkRTKCIvYWNhZGVtaWNzL01BVFAtNDkxMC1GMjQvREFSLU1hcnMtRjI0L0RhdGEvc3VwZXJjYW1fbGlic19tb2NfbG9jLlJkcyIpCiNEcm9wIHRoZSBzdGFuZGFyZCBkZXZpYXRpb24gZmVhdHVyZXMsIHRoZSBzdW0gb2YgdGhlIHBlcmNlbnRhZ2VzLCAKI3RoZSBkaXN0YW5jZSwgYW5kIHRoZSB0b3RhbCBmcmVxdWVuY2llcwpsaWJzLmRmIDwtIGxpYnMuZGYgJT4lIAogIHNlbGVjdCghKGMoZGlzdGFuY2VfbW0sVG90LkVtLixTaU8yX3N0ZGV2LFRpTzJfc3RkZXYsQWwyTzNfc3RkZXYsRmVPVF9zdGRldiwKICAgICAgICAgICAgIE1nT19zdGRldixOYTJPX3N0ZGV2LENhT19zdGRldixLMk9fc3RkZXYsVG90YWwpKSkKIyBDb252ZXJ0IHRoZSBwb2ludHMgdG8gbnVtZXJpYwpsaWJzLmRmJHBvaW50IDwtIGFzLm51bWVyaWMobGlicy5kZiRwb2ludCkKbGlicy5kZlssNjoxM10gPC0gc2FwcGx5KGxpYnMuZGZbLDY6MTNdLGFzLm51bWVyaWMpCiNyZW1vdmUgdGhlIHNjY3QvcmVmZXJlbmNlIHNhbXBsZXMKbGlicy5kZjwtbGlicy5kZiU+JQogIGZpbHRlcighKGdyZXBsKCJzY2N0IiwgdGFyZ2V0KSkpCiNhZGQgYSBjb2x1bW4gdG8gaW5kaWNhdGUgdGhlIG5lYXJlc3QgcGl4bApsaWJzLmRmPC1jYmluZChuZWFyZXN0cGl4bD0wLGxpYnMuZGYpCiNtYWtlIGEgZGF0YWZyYW1lIG9mIGp1c3QgdGhlIExJQlMgTGF0L0xvbmcgYW5kIHRhcmdldCBuYW1lIGFuZCByZW1vdmUgZHVwbGljYXRlcwpsaWJzdGFyZ2V0cy5kZjwtbGlicy5kZlssYygxLDMsNCw1KV0KbGlic3RhcmdldHMuZGY8LWRpc3RpbmN0KGxpYnN0YXJnZXRzLmRmKQpgYGAKCkxvYWQgaW4gUElYTCBkYXRhCmBgYHtyfQojcmVhZCBpbiBwaXhsIGRhdGEgd2l0aCBsYXQvbG9uZwpwaXhsLmRmPC1yZWFkUkRTKCIvYWNhZGVtaWNzL01BVFAtNDkxMC1GMjQvREFSLU1hcnMtRjI0L1N0dWRlbnREYXRhL3BpeGxfc29sX2Nvb3JkaW5hdGVzLlJkcyIpCiNpbmNsdWRlIG9ubHkgcGl4bCBtZXRhZGF0YQpwaXhsLmRmPC1waXhsLmRmICU+JQogIHNlbGVjdChjKDEsMiwxOSwyMCwyMikpCiNjb252ZXJ0IExhdC9Mb25nIHRvIG51bWVyaWMKcGl4bC5kZiRMYXQgPC0gYXMubnVtZXJpYyhwaXhsLmRmJExhdCkKcGl4bC5kZiRMb25nIDwtIGFzLm51bWVyaWMocGl4bC5kZiRMb25nKQojcmVtb3ZlIHJvd3Mgc28gd2Ugb25seSBoYXZlIG9uZSBzYW1wbGUgcGVyIGFicmFzaW9uIGFuZCByZW1vdmUgYXRtb3NwaGVyaWMgc2FtcGxlCnBpeGwuZGY8LXBpeGwuZGZbYygyLDQsNiw4LDEwLDEyLDE0LDE2KSxdCmBgYAoKTmV4dCwgd2Ugd2lsbCBpbml0aWFsaXplIGEgZGlzdGFuY2UgdmFyaWFibGUgKHRvIGluZGljYXRlIGRpc3RhbmNlIGJldHdlZW4gUElYTCBhYnJhc2lvbiBhbmQgTElCUyB0YXJnZXQpIGFuZCBhbHNvIGluaXRpYWxpemUgZWFjaCBQSVhMIGFicmFzaW9uLCB3aGljaCB3aWxsIGJlIHVzZWQgdG8gbWFyayB3aGljaCBQSVhMIGFicmFzaW9uIHRoZSBMSUJTIHNhbXBsZSBpcyBjbG9zZXN0IHRvIGJ5IHVzaW5nIGEgZmFjdG9yIG9mIDAgb3IgMS4gCmBgYHtyfQojTElCUyB0YXJnZXQgZGF0YSBmcmFtZSB3aXRoIGRpc3RhbmNlIHZhcmlhYmxlIGFzIHdlbGwKbGlic3RhcmdldHMuZGY8LWNiaW5kKGxpYnN0YXJnZXRzLmRmLCJEaXN0YW5jZSI9MCwiQmVsbGVncmFkZSI9MCwiRG91cmJlcyI9MCwiUXVhcnRpZXIiPTAsIkFsZmFsZmEiPTAsIlRob3JudG9uR2FwIj0wLCJCZXJyeUhvbGxvdyI9MCwiTm92YXJ1cHRhIj0wLCJVZ2FuaWtJc2xhbmQiPTApCmBgYAoKVGhlIGRpc3RhbmNlIGZ1bmN0aW9uIGJlbG93IHdpbGwgY2FsY3VsYXRlIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gTElCUyB0YXJnZXQgYW5kIGFsbCB0aGUgUElYTCBhYnJhc2lvbnMsIGFuZCBwaWNrIHRoZSBzbWFsbGVzdCBkaXN0YW5jZSB0byBwaWNrIHRoZSBjbG9zZXN0IFBJWEwgYWJyYXNpb24gdG8gdGhhdCBMSUJTIHRhcmdldC4KYGBge3J9CiNEaXN0YW5jZSBmdW5jdGlvbgpmb3IoaSBpbiAxOm5yb3cobGlic3RhcmdldHMuZGYpKSB7CiAgICBsaWJzdGFyZ2V0cy5kZltpLGMoNjoxMyldPC1jKGRpc3RIYXZlcnNpbmUocGl4bC5kZlsxLGMoMSwyKV0sbGlic3RhcmdldHMuZGZbaSxjKDIsMyldLHI9MzM5MzE2OSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3RIYXZlcnNpbmUocGl4bC5kZlsyLGMoMSwyKV0sbGlic3RhcmdldHMuZGZbaSxjKDIsMyldLHI9MzM5MzE2OSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3RIYXZlcnNpbmUocGl4bC5kZlszLGMoMSwyKV0sbGlic3RhcmdldHMuZGZbaSxjKDIsMyldLHI9MzM5MzE2OSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3RIYXZlcnNpbmUocGl4bC5kZls0LGMoMSwyKV0sbGlic3RhcmdldHMuZGZbaSxjKDIsMyldLHI9MzM5MzE2OSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3RIYXZlcnNpbmUocGl4bC5kZls1LGMoMSwyKV0sbGlic3RhcmdldHMuZGZbaSxjKDIsMyldLHI9MzM5MzE2OSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3RIYXZlcnNpbmUocGl4bC5kZls2LGMoMSwyKV0sbGlic3RhcmdldHMuZGZbaSxjKDIsMyldLHI9MzM5MzE2OSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3RIYXZlcnNpbmUocGl4bC5kZls3LGMoMSwyKV0sbGlic3RhcmdldHMuZGZbaSxjKDIsMyldLHI9MzM5MzE2OSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3RIYXZlcnNpbmUocGl4bC5kZls4LGMoMSwyKV0sbGlic3RhcmdldHMuZGZbaSxjKDIsMyldLHI9MzM5MzE2OSkpCiAgICAKICAgIGxpYnN0YXJnZXRzLmRmW2ksMV08LXdoaWNoLm1pbihsaWJzdGFyZ2V0cy5kZltpLGMoNjoxMyldKQogICAgbGlic3RhcmdldHMuZGZbaSw1XTwtbWluKGxpYnN0YXJnZXRzLmRmW2ksYyg2OjEzKV0pCn0KbGlic3RhcmdldHMuZGYkbmVhcmVzdHBpeGw8LWFzLmZhY3RvcihsaWJzdGFyZ2V0cy5kZiRuZWFyZXN0cGl4bCkKbGV2ZWxzKGxpYnN0YXJnZXRzLmRmJG5lYXJlc3RwaXhsKTwtKGMoIkJlbGxlZ3JhZGUiLCJEb3VyYmVzIiwiUXVhcnRpZXIiLCJBbGZhbGZhIiwiVGhvcm50b25HYXAiLCJCZXJyeUhvbGxvdyIsIk5vdmFydXB0YSIsIlVnYW5pa0lzbGFuZCIpKQpgYGAKCkJlbG93IGlzIGFub3RoZXIgaW5pdGlhbGl6ZXIgZm9yIHRoZSBQSVhMIGFicmFzaW9uIGRhdGEuIFRoaXMgc2V0cyB0aGUgdmFyaWFibGVzIGZvciBlYWNoIFBJWEwgYWJyYXNpb24uCmBgYHtyfQojU2V0cyBlYWNoIG5lYXJlc3QgUElYTCB2YXJpYWJsZSBmb3IgZnV0dXJlIHVzZSBpbiBkZWNpZGluZyB3aGljaCB0YXJnZXQgaXMgY2xvc2VzdCB0byBhIExJQlMgc2FtcGxlCkJlbGxlZ3JhZGU8LWxpYnN0YXJnZXRzLmRmW2xpYnN0YXJnZXRzLmRmJG5lYXJlc3RwaXhsPT0iQmVsbGVncmFkZSIsXSR0YXJnZXQKRG91cmJlczwtbGlic3RhcmdldHMuZGZbbGlic3RhcmdldHMuZGYkbmVhcmVzdHBpeGw9PSJEb3VyYmVzIixdJHRhcmdldApRdWFydGllcjwtbGlic3RhcmdldHMuZGZbbGlic3RhcmdldHMuZGYkbmVhcmVzdHBpeGw9PSJRdWFydGllciIsXSR0YXJnZXQKQWxmYWxmYTwtbGlic3RhcmdldHMuZGZbbGlic3RhcmdldHMuZGYkbmVhcmVzdHBpeGw9PSJBbGZhbGZhIixdJHRhcmdldApUaG9ybnRvbkdhcDwtbGlic3RhcmdldHMuZGZbbGlic3RhcmdldHMuZGYkbmVhcmVzdHBpeGw9PSJUaG9ybnRvbkdhcCIsXSR0YXJnZXQKQmVycnlIb2xsb3c8LWxpYnN0YXJnZXRzLmRmW2xpYnN0YXJnZXRzLmRmJG5lYXJlc3RwaXhsPT0iQmVycnlIb2xsb3ciLF0kdGFyZ2V0Ck5vdmFydXB0YTwtbGlic3RhcmdldHMuZGZbbGlic3RhcmdldHMuZGYkbmVhcmVzdHBpeGw9PSJOb3ZhcnVwdGEiLF0kdGFyZ2V0ClVnYW5pa0lzbGFuZDwtbGlic3RhcmdldHMuZGZbbGlic3RhcmdldHMuZGYkbmVhcmVzdHBpeGw9PSJVZ2FuaWtJc2xhbmQiLF0kdGFyZ2V0CmBgYAoKTmV4dCwgd2UgZmlsdGVyIG91dCB0aGUgTElCUyB0YXJnZXRzIHRoYXQgYXJlIG5vdCB3aXRoaW4gdGhlIHNwZWNpZmllZCBkaXN0YW5jZSB2YXJpYWJsZS4gVGhlbiwgd2UgbWVyZ2UgdGhlIExJQlMgZGF0YSB3aXRoIHRoZSByZXNwZWN0aXZlIFBJWEwgYWJyYXNpb24gYnkgbXV0YXRpbmcgYW5kIGFkZGluZyBhbiBhYnJhc2lvbiBjb2x1bW4gdGhhdCBoYXMgdGhlIGFicmFzaW9uIG5hbWUgY2xvc2VzdCB0byBlYWNoIExJQlMgdGFyZ2V0LiBXZSBhbHNvIGFkZCBhIGNvbHVtbiwgTElCUyBvciBQSVhMLCB3aGljaCBkZW5vdGVzIGlmIHRoZSByb3cgb2YgZGF0YSBpcyBmcm9tIHRoZSBQSVhMIGFuZCBMSUJTIGRhdGEgc2V0cy4gV2UgYWxzbyBzZXQgdXAgdGhlIGxpYnMudGVybiBtYXRyaXggd2hpY2ggd2lsbCAKYGBge3J9CmluY2x1ZGVkLmxpYnM8LShsaWJzdGFyZ2V0cy5kZiU+JQogIGZpbHRlcihEaXN0YW5jZTxtZXRlcnMpKSR0YXJnZXQKbGlicy5tYXRyaXggPC1saWJzLmRmICU+JQogIGZpbHRlcih0YXJnZXQgJWluJSBpbmNsdWRlZC5saWJzKQojc2V0IExJQlMgbWF0cml4IGFuZCB0ZXJuYXJ5IHBsb3QgYnkgYWRkaW5nIGluIGNhdGlvbiBjb21wb25lbnRzIGFuZCBtdXRhdGluZwpsaWJzLm1hdHJpeCA8LSBsaWJzLm1hdHJpeFssYyg1LDc6MTQpXQpsaWJzLnRlcm4gPC0gYXMuZGF0YS5mcmFtZShsaWJzLm1hdHJpeCkgJT4lCiAgbXV0YXRlKHg9KFNpTzIrQWwyTzMpLzEwMCx5PShGZU9UK01nTykvMTAwLHo9KENhTytOYTJPK0syTykvMTAwKSAlPiUKICBzZWxlY3QoLWMoU2lPMixBbDJPMyxGZU9ULE1nTyxDYU8sTmEyTyxLMk8sVGlPMikpCmxpYnMudGVybjwtY2JpbmQoIkFicmFzaW9uIj0wLGxpYnMudGVybikKI1NldCB3aGF0IGFicmFzaW9uIGdvZXMgd2l0aCB0aGUgcmVzcGVjdGl2ZSBMSUJTIHNhbXBsZSBpdCBtYXRjaGVzIHdpdGgKbGlicy50ZXJuPC1saWJzLnRlcm4lPiUKICBtdXRhdGUoQWJyYXNpb24gPSBpZmVsc2UodGFyZ2V0JWluJUFsZmFsZmEsIkFsZmFsZmEiLCAKICAgICAgICAgICAgICAgICAgICBpZmVsc2UodGFyZ2V0ICVpbiUgQmVsbGVncmFkZSwgIkJlbGVncmFkZSIsCiAgICAgICAgICAgICAgICAgICAgaWZlbHNlKHRhcmdldCAlaW4lIEJlcnJ5SG9sbG93LCAiQmVycnlIb2xsb3ciLAogICAgICAgICAgICAgICAgICAgIGlmZWxzZSh0YXJnZXQgJWluJSBEb3VyYmVzLCAiRG91cmJlcyIsCiAgICAgICAgICAgICAgICAgICAgaWZlbHNlKHRhcmdldCAlaW4lIE5vdmFydXB0YSwgIk5vdmFydXB0YSIsCiAgICAgICAgICAgICAgICAgICAgaWZlbHNlKHRhcmdldCAlaW4lIFF1YXJ0aWVyLCAiUXVhcnRpZXIiLAogICAgICAgICAgICAgICAgICAgIGlmZWxzZSh0YXJnZXQgJWluJSBUaG9ybnRvbkdhcCwgIlRob3JudG9uR2FwIiwKICAgICAgICAgICAgICAgICAgICBpZmVsc2UodGFyZ2V0ICVpbiUgVWdhbmlrSXNsYW5kLCAiVWdhbmlrSXNsYW5kIixBYnJhc2lvbikpKSkpKSkpKQojc3VtbWFyeSBvZiBMSUJTIGRhdGEgaW5jbHVkaW5nIGRpc3RhbmNlIHBhcmFtZXRlciwgbnVtYmVyIG9mIExJQlMgdGFyZ2V0cywgYW5kIG51bWJlciBvZiBMSUJTIHBvaW50cwprYWJsZWRmPC1yYmluZCgiRGlzdGFuY2UgKG0pIj1tZXRlcnMsIlRhcmdldHMiPWxlbmd0aChpbmNsdWRlZC5saWJzKSwiUG9pbnRzIj1ucm93KGxpYnMudGVybikpCmthYmxlKGthYmxlZGYsIGNhcHRpb24gPSJMSUJTICMgb2YgVGFyZ2V0cyBhbmQgUG9pbnRzIHdpdGhpbiBTcGVjaWZpZWQgRGlzdGFuY2UiKQpgYGAKCgoKIyMgNS4yIENvbnRyaWJ1dGlvbgoKVGhpcyB3b3JrIHdhcyBhbHNvIGEgY29tYmluYXRpb24gb2YgbWUgYW5kIE1hcmdvLiBUaGUgZGF0YSBzZXQgY3JlYXRpb24gd2FzIGJvdGggb2YgdXMgaW4gb3VyIGJyYWluc3Rvcm1pbmcgYXMgdGhpcyB1dGlsaXplcyB0aGUgZGF0YSBzZXQgd2UgY3JlYXRlZCBvZiBsYXRpdHVkZSBhbmQgbG9uZ2l0dWRlIGZvciBQSVhMLgotIEFkZCBtb3JlIGhlcmUKLSBWZXJ5IHNpbWlsYXIgdG8gb3RoZXIgdHdvIHNlY3Rpb25zIGFkZCBpbiBsYXRlciwgTWFyZ28gYW5kIEkgd29ya2VkIG9uIG1vc3Qgb2YgdGhpcyB0b2dldGhlcgoKIyMgNS4zIE1ldGhvZHMgRGVzY3JpcHRpb24gCgotIFN0YXJ0ZWQgd2l0aCBmaWx0ZXJpbmcgb3JpZ2luYWwgZGF0YSB0byBnZXQgcmlkIG9mIFNDQ1QgdmFsdWVzCi0gdGhlbiBzZXQgdXAgdGVybmFyeSBkYXRhIGZyYW1lIGJ5IG11dGF0aW5nIGJ5IGNhdGlvbiBjb21wb3NpdGlvbnMKLSB0aGVuIG11dGF0ZWQgdG8gbWFrZSB0aGUgUElYTCBhYnJhc2lvbnMgdGhlIGtleSwgc28gdGhlIExJQlMgdGFyZ2V0cyBhcmUgY29sb3JlZCBieSB0aGUgY2xvc2VzdCBQSVhMIGFicmFzaW9uLCBjcmVhdGluZyBhIGZvcm0gb2YgY2x1c3RlcnMuCgojIyA1LjQgUmVzdWx0IGFuZCBEaXNjdXNzaW9uIApVc2luZyBhbGwgb2YgdGhlIG1hbmlwdWxhdGlvbiBkb25lIGZvciB0aGUgY3JlYXRpb24gb2YgdGhlIHRlcm5hcnkgcGxvdCwgd2UgdGhlbiBwbG90IHVzaW5nIHRoZSBnZ3Rlcm4gY29tbWFuZC4gV2Ugd2lsbCBjb2xvciBieSBhYnJhc2lvbiB0byBzZWUgdGhlIGRpc3RyaWJ1dGlvbiBvZiBjb21wb3NpdGlvbiBiZXR3ZWVuIGRpZmZlcmVudCBhYnJhc2lvbnMuIFRoaXMgc2hvdWxkIGhlbHAgdXMgYmUgYWJsZSB0byBkcmF3IGRpZmZlcmVudCBjb25jbHVzaW9ucyBhYm91dCBob3cgYWJyYXNpb25zIHJlbGF0ZSBvciBkb24ndCByZWxhdGUuIFRoZSBtYXggZGlzdGFuY2UgYmV0d2VlbiB0aGUgUElYTCB0YXJnZXQgYW5kIExJQlMgc2FtcGxlIGNhbiBiZSBtb2RpZmllZCBob3dldmVyIGRlc2lyZWQuCmBgYHtyfQpnZ3Rlcm4obGlicy50ZXJuLCBnZ3Rlcm46OmFlcyh4PXgseT15LHo9eikpICsKICBnZW9tX3BvaW50KGRhdGE9bGlicy50ZXJuLGFlcyhjb2xvcj1BYnJhc2lvbixhbHBoYT0wLjUpKSArIAogIHRoZW1lX3JnYncoKSArIAogIGxhYnModGl0bGU9cGFzdGUoIk1hcnMgTElCUyBEYXRhIFdpdGhpbiIsZGlzdGFuY2UsIm1ldGVycyBvZiBQSVhMIixzZXA9IiAiKSwKICAgICAgIHg9IlNpK0FsIiwKICAgICAgIHk9IkZlK01nIiwKICAgICAgIHo9IkNhK05hK0siKSt0aGVtZShsZWdlbmQucG9zaXRpb249InJpZ2h0IikgKyAKICBndWlkZXMoYWxwaGE9Im5vbmUiKQpgYGAKCiMjIDUuNSBDb25jbHVzaW9ucyBhbmQgRnV0dXJlIFdvcmsKQmFzZWQgb24gdGhpcyB0ZXJuYXJ5IHBsb3QsIHdlIGNhbiBzZWUgQWxmYWxmYSBhbmQgQmVsZWdyYWRlIGFyZSBoaWdoZXIgaW4gU2krQWwgYW5kIFVnYW5payBJc2xhbmQgaXMgYW4gb3V0bGllci4gQXMgdGhpcyB3YXMgdGhlIGxhc3QgcGllY2Ugb2YgdGhlIFBJWEwgZGF0YSBpbiB0aGUgZGF0YSBzZXQgYW5kIGl0IHdhcyBtaXNzaW5nIGEgcGFpciBzaW5jZSBldmVyeSBvdGhlciBhYnJhc2lvbiB3YXMgbWFkZSB1cCBvZiB0d28gc2FtcGxlcywgaXQgaXMgaW5jbHVkZWQgaW4gaGVyZSBidXQgdW50aWwgdGhlIGRhdGEgc2V0IGlzIHVwZGF0ZWQgdGhlcmUgaXMgbm90IGVub3VnaCBjb250ZXh0IHRvIGV4cGxhaW4gd2h5IGl0IGlzIHNvIHZhc3RseSBkaWZmZXJlbnQuIEkgd291bGQgYXNzdW1lIGl0IGlzIGR1ZSB0byBob3cgdGhlIHJvYm90IGlzIHRyYXZlbGluZyBhbmQgdGhlIGxvY2F0aW9uIG9mIHRoZSBVZ2FuaWtJc2xhbmQgYWJyYXNpb24gaXMgdmVyeSBkaWZmZXJlbnQgdGhhbiB0aGUgb3RoZXIgNyBhYnJhc2lvbnMuCi0gRnV0dXJlIHdvcmssIHdvdWxkIGluY2x1ZGUgbW9yZSBkYXRhIHRvIGdhaW4gYnJvYWRlciBjb250ZXh0CgojIEJpYmxpb2dyYXBoeQpQcm92aWRlIGEgbGlzdGluZyBvZiByZWZlcmVuY2VzIGFuZCBvdGhlciBzb3VyY2VzLgoKKiBBbmFseXN0J3MgTm90ZWJvb2sKKiBOb3Qgc3VyZSB3aGF0IGVsc2UgaXMgcmVsZXZhbnQsIG1vc3Qgb2Ygd2hhdCBJIHVzZWQgd2FzIHNpbWlsYXIgdG8gQW5hbHlzdCdzIE5vdGVib29rCgojIEFwcGVuZGl4CgoqSW5jbHVkZSBoZXJlIHdoYXRldmVyIHlvdSB0aGluayBpcyByZWxldmFudCB0byBzdXBwb3J0IHRoZSBtYWluIGNvbnRlbnQgb2YgeW91ciBub3RlYm9vay4gRm9yIGV4YW1wbGUsIHlvdSBtYXkgaGF2ZSBvbmx5IGluY2x1ZGUgZXhhbXBsZSBmaWd1cmVzIGFib3ZlIGluIHlvdXIgbWFpbiB0ZXh0IGJ1dCBpbmNsdWRlIGFkZGl0aW9uYWwgb25lcyBoZXJlLiBPciB5b3UgbWF5IGhhdmUgZG9uZSBhIG1vcmUgZXh0ZW5zaXZlIGludmVzdGlnYXRpb24sIGFuZCB3YW50IHRvIHB1dCBtb3JlIHJlc3VsdHMgaGVyZSB0byBkb2N1bWVudCB5b3VyIHdvcmsgaW4gdGhlIHNlbWVzdGVyLiBCZSBzdXJlIHRvIGRpdmlkZSBhcHBlbmRpeCBpbnRvIGFwcHJvcHJpYXRlIHNlY3Rpb25zIGFuZCBtYWtlIHRoZSBjb250ZW50cyBjbGVhciB0byB0aGUgcmVhZGVyIHVzaW5nIGFwcHJvYWNoZXMgZGlzY3Vzc2VkIGFib3ZlLiAqIApTaG91bGQgSSBhZGQgbW9yZSBleGFtcGxlcyBoZXJlIG9mIHNvaWwgY29tcG9zaXRpb24gcGxvdHMgb2YgZGlmZmVyZW50IGFicmFzaW9ucz8gSSBhbHNvIGNvdWxkIGFkZCBoZWF0IG1hcCBhbmFseXNpcyB0byB0aGlzIG5vdGVib29rIGFzIGEgZmluZGluZyBidXQgd2Fzbid0IHN1cmUgaWYgaXQgd2FzIHJlYWxseSByZWxldmFudC4KCg==
+LS0tCnRpdGxlOiAiRGF0YSBBbmFseXRpY3MgUmVzZWFyY2ggSW5kaXZpZHVhbCBGaW5hbCBQcm9qZWN0IFJlcG9ydCAtIE1hcnMiCmF1dGhvcjogIkNoYXJsb3R0ZSBQZXRlcnNvbiIKZGF0ZTogIkZhbGwgMjAyNCIKb3V0cHV0OgogIHBkZl9kb2N1bWVudDoKICAgIHRvYzogeWVzCiAgICB0b2NfZGVwdGg6ICczJwogIGh0bWxfbm90ZWJvb2s6IGRlZmF1bHQKICBodG1sX2RvY3VtZW50OgogICAgdG9jOiB5ZXMKICAgIHRvY19kZXB0aDogMwogICAgdG9jX2Zsb2F0OiB5ZXMKICAgIG51bWJlcl9zZWN0aW9uczogeWVzCiAgICB0aGVtZTogdW5pdGVkCi0tLQoKCiMgREFSIFByb2plY3QgYW5kIEdyb3VwIE1lbWJlcnMKCiogUHJvamVjdCBuYW1lOiBNYXJzCiogR2l0SHViIElEOiBkYXItcGV0ZXJjCiogUHJvamVjdCB0ZWFtIG1lbWJlcnM6IERhbnRlIE13YXRpYm8sIERvw7FhIFJvYmVydHMsIERhdmlkIFdhbGN5emssIFh1YW50aW5nIFdhbmcsIEFzaHRvbiBDb21wdG9uLCBNYXJnbyBWYW5Fc3NlbHN0eW4sIE5pY29sYXMgTW9yYXdza2ksIENKIE1hcmlubywgQWFkaSBMYWhpcmkgCgojIDAuMCBQcmVsaW1pbmFyaWVzLgoKKlIgTm90ZWJvb2tzIGFyZSBtZWFudCB0byBiZSBkeW5hbWljIGRvY3VtZW50cy4gUHJvdmlkZSBhbnkgcmVsZXZhbnQgdGVjaG5pY2FsIGd1aWRhbmNlIGZvciB1c2VycyBvZiB5b3VyIG5vdGVib29rLiBBbHNvIHRha2UgY2FyZSBvZiBhbnkgcHJlbGltaW5hcmllcywgc3VjaCBhcyByZXF1aXJlZCBwYWNrYWdlcy4gU2FtcGxlIHRleHQ6KgoKVGhpcyByZXBvcnQgaXMgZ2VuZXJhdGVkIGZyb20gYW4gUiBNYXJrZG93biBmaWxlIHRoYXQgaW5jbHVkZXMgYWxsIHRoZSBSIGNvZGUgbmVjZXNzYXJ5IHRvIHByb2R1Y2UgdGhlIHJlc3VsdHMgZGVzY3JpYmVkIGFuZCBlbWJlZGRlZCBpbiB0aGUgcmVwb3J0LiAgQ29kZSBibG9ja3MgY2FuIGJlIHN1cnByZXNzZWQgZnJvbSBvdXRwdXQgZm9yIHJlYWRhYmlsaXR5IHVzaW5nIHRoZSBjb21tYW5kIGNvZGUgYHtSLCAgZWNobz1zaG93fWAgaW4gdGhlIGNvZGUgYmxvY2sgaGVhZGVyLiBJZiBgc2hvdyA8LSBGQUxTRWAgdGhlIGNvZGUgYmxvY2sgd2lsbCBiZSBzdXJwcmVzc2VkOyBpZiBgc2hvdyA8LSBUUlVFYCB0aGVuIHRoZSBjb2RlIHdpbGwgYmUgc2hvdy4gCgpgYGB7cn0KIyBTZXQgdG8gVFJVRSB0byBleHBhbmQgUiBjb2RlIGJsb2Nrczsgc2V0IHRvIEZBTFNFIHRvIGNvbGxhcHNlIFIgY29kZSBibG9ja3MgCnNob3cgPC0gVFJVRQpgYGAKCjwhLS0gRXhwYW5kIHRoaXMgbGlzdCBhcyBuZWNlc3NhcnkgZm9yIHlvdXIgbm90ZWJvb2sgLS0+CkV4ZWN1dGluZyB0aGlzIFIgbm90ZWJvb2sgcmVxdWlyZXMgc29tZSBzdWJzZXQgb2YgdGhlIGZvbGxvd2luZyBwYWNrYWdlczoKCiogYGdncGxvdDJgCiogYHRpZHl2ZXJzZWAKKiBgcGFuZG9jYAoqIGBybWFya2Rvd25gCiogYHN0cmluZ3JgCiogYGdnYmlwbG90YAoqIGBrbml0cmAKKiBgcnBhcnRgCiogYHJwYXJ0LnBsb3RgCiogYGNhcmV0YAoqIGBnZ3JlcGVsYAoqIGBnZ3Rlcm5gCgoKVGhlc2Ugd2lsbCBiZSBpbnN0YWxsZWQgYW5kIGxvYWRlZCBhcyBuZWNlc3NhcnkgKGNvZGUgc3VwcHJlc3NlZCkuIAoKPCEtLSBUaGUgYGluY2x1ZGU9RkFMU0VgIG9wdGlvbiBwcmV2ZW50cyB5b3VyIGNvZGUgZnJvbSBiZWluZyBzaG93biBhdCBhbGwgLS0+CmBgYHtyLCBpbmNsdWRlPUZBTFNFfQojIFRoaXMgY29kZSB3aWxsIGluc3RhbGwgcmVxdWlyZWQgcGFja2FnZXMgaWYgdGhleSBhcmUgbm90IGFscmVhZHkgaW5zdGFsbGVkCiMgQUxXQVlTIElOU1RBTEwgWU9VUiBQQUNLQUdFUyBMSUtFIFRISVMhCmlmICghcmVxdWlyZSgiZ2dwbG90MiIpKSB7CiAgIGluc3RhbGwucGFja2FnZXMoImdncGxvdDIiKQogICBsaWJyYXJ5KGdncGxvdDIpCn0KaWYgKCFyZXF1aXJlKCJ0aWR5dmVyc2UiKSkgewogICBpbnN0YWxsLnBhY2thZ2VzKCJ0aWR5dmVyc2UiKQogICBsaWJyYXJ5KHRpZHl2ZXJzZSkKfQoKaWYgKCFyZXF1aXJlKCJwYW5kb2MiKSkgewogIGluc3RhbGwucGFja2FnZXMoInBhbmRvYyIpCiAgbGlicmFyeShwYW5kb2MpCn0KCiMgUmVxdWlyZWQgcGFja2FnZXMgZm9yIE0yMCBMSUJTIGFuYWx5c2lzCmlmICghcmVxdWlyZSgicm1hcmtkb3duIikpIHsKICBpbnN0YWxsLnBhY2thZ2VzKCJybWFya2Rvd24iKQogIGxpYnJhcnkocm1hcmtkb3duKQp9CgppZiAoIXJlcXVpcmUoInN0cmluZ3IiKSkgewogIGluc3RhbGwucGFja2FnZXMoInN0cmluZ3IiKQogIGxpYnJhcnkoc3RyaW5ncikKfQoKaWYgKCFyZXF1aXJlKCJnZ2JpcGxvdCIpKSB7CiAgaW5zdGFsbC5wYWNrYWdlcygiZ2diaXBsb3QiKQogIGxpYnJhcnkoZ2diaXBsb3QpCn0KCmlmICghcmVxdWlyZSgia25pdHIiKSkgewogIGluc3RhbGwucGFja2FnZXMoImtuaXRyIikKICBsaWJyYXJ5KGtuaXRyKQp9CgppZiAoIXJlcXVpcmUoInJwYXJ0IikpIHsKICBpbnN0YWxsLnBhY2thZ2VzKCJycGFydCIpCiAgbGlicmFyeShycGFydCkKfQoKaWYgKCFyZXF1aXJlKCJycGFydC5wbG90IikpIHsKICBpbnN0YWxsLnBhY2thZ2VzKCJycGFydC5wbG90IikKICBsaWJyYXJ5KHJwYXJ0KQp9CgppZiAoIXJlcXVpcmUoImNhcmV0IikpIHsKICBpbnN0YWxsLnBhY2thZ2VzKCJjYXJldCIpCiAgbGlicmFyeShjYXJldCkKfQogIAppZiAoIXJlcXVpcmUoImdncmVwZWwiKSkgewogIGluc3RhbGwucGFja2FnZXMoImdncmVwZWwiKQogIGxpYnJhcnkoZ2dyZXBlbCkKfQoKaWYgKCFyZXF1aXJlKCJnZW9zcGhlcmUiKSkgewogIGluc3RhbGwucGFja2FnZXMoImdlb3NwaGVyZSIpCiAgbGlicmFyeShnZ3JlcGVsKQp9CgppZiAoIXJlcXVpcmUoImdndGVybiIpKSB7CiAgaW5zdGFsbC5wYWNrYWdlcygiZ2d0ZXJuIikKICBsaWJyYXJ5KGdncmVwZWwpCn0KCmBgYAoKIyAxLjAgUHJvamVjdCBJbnRyb2R1Y3Rpb24KClRoZSBNYXJzIFByb2plY3QgaXMgZm9jdXNlZCBvbiBkYXRhIGZyb20gdGhlIDIwMjAgTWFycyBQZXJzZXZlcmFuY2UgUm92ZXIuIFRoZSBnb2FsIG9mIHRoZSBtaXNzaW9uIGlzIHRvIGxvb2sgZm9yIG1pY3JvYmlhbCBhbmNpZW50IGxpZmUgb3IgZm9ybXMgb2Ygd2F0ZXIgb24gTWFycyAodGhpbmdzIHRoYXQgY291bGQgc3VnZ2VzdCBsaWZlKS4gUGVyc2V2ZXJhbmNlIHVzZXMgbXVsdGlwbGUgaW5zdHJ1bWVudHMsIGluY2x1ZGluZyBQSVhMIChQbGFuZXRhcnkgSW5zdHJ1bWVudCBmb3IgWC1SYXkgTGl0aG9jaGVtaXN0cnkpLCBTSEVSTE9DIChTY2FubmluZyBIYWJpdGFibGUgRW52aXJvbm1lbnRzIHdpdGggUmFtYW4gYW5kIEx1bWluZXNjZW5jZSBmb3IgT3JnYW5pY3MgYW5kIENoZW1pY2FscykgYW5kIFNVUEVSQ0FNLiBTVVBFUkNBTSBoYXMgbXVsdGlwbGUgaW5zdHJ1bWVudHMgdGhhdCBtZWFzdXJlIHNwZWN0cm9zY29weSB0byBtZWFzdXJlIHByb3BlcnRpZXMgb2YgbWF0ZXJpYWxzIG9uIE1hcnMsIGluY2x1ZGluZyBMSUJTIChMYXNlci1pbmR1Y2VkIGJyZWFrZG93biBzcGVjdHJvc2NvcHkpLiBUaGlzIG5vdGVib29rIHdpbGwgcHJpbWFyaWx5IGZvY3VzIG9uIHRoZSBkYXRhIHdlIGhhdmUgYmVlbiBnaXZlbiBvZiBQSVhMIGFuZCBMSUJTLiAgCgojIDIuMCBPcmdhbml6YXRpb24gb2YgUmVwb3J0CgpUaGlzIHJlcG9ydCBpcyBvcmdhbml6ZSBhcyBmb2xsb3dzOiAKCiogU2VjdGlvbiAzLjAuICBGaW5kaW5nIDE6IExJQlMgYW5kIFBJWEwgTWF0Y2hpbmcgLSBXZSB3ZXJlIGFibGUgdG8gY29tYmluZSB0aGUgTElCUyBhbmQgUElYTCBkYXRhIHNldHMgYnkgcGlja2luZyBhIG1heGltdW0gZGlzdGFuY2UgdmFyaWFibGUgZnJvbSBhIFBJWEwgYWJyYXNpb24gYW5kIG1hdGNoaW5nIExJQlMgc2FtcGxlcyB0aGF0IHdlcmUgd2l0aGluIHRoZSBzZXQgZGlzdGFuY2Ugb2YgYSBQSVhMIGFicmFzaW9uLiAgCgoqIFNlY3Rpb24gNC4wOiBGaW5kaW5nIDI6IFNvaWwgQ29tcG9zaXRpb24gQW5hbHlzaXMgLSBVc2luZyB0aGUgTElCUyBhbmQgUElYTCBjb21iaW5lZCBkYXRhIHNldCwgSSBjcmVhdGVkIGEgcGxvdCBvZiB0aGUgY29tcG9zaXRpb24gcGVyY2VudGFnZXMgb2YgY2hlbWljYWwgY29tcG91bmRzIHN1Y2ggYXMgU2kwMiwgSzIwLCBldGMuIHVzaW5nIGxvZyBzY2FsaW5nIHRvIGNvbXBhcmUgdGhlIGNvbXBvc2l0aW9ucyBvZiBhIFBJWEwgYWJyYXNpb24gYW5kIHRoZSBjb3JyZXNwb25kaW5nIExJQlMgc2FtcGxlIGNvbXBvc2l0aW9ucyAoYmFzZWQgb24gdGhlIExJQlMgc2FtcGxlcyBmb3IgeCBkaXN0YW5jZSBhd2F5IGZyb20gYSBQSVhMIGFicmFzaW9uKS4KCiogU2VjdGlvbiA1LjAgRmluZGluZyAzOiBBbmFseXppbmcgQ2F0aW9uIENvbWJpbmF0aW9ucyB1c2luZyBMSUJTIGFuZCBQSVhMIG1hdGNoZWQgZGF0YTogVXNpbmcgdGhlIExJQlMgYW5kIFBJWEwgY29tYmluZWQgZGF0YSBzZXQsIHdlIGNyZWF0ZWQgYSB0ZXJuYXJ5IHBsb3QgdG8gc2hvdyB0aGUgZGlzdHJpYnV0aW9uIG9mIExJQlMgc2FtcGxlcyBzb3J0ZWQgYnkgd2hhdCBQSVhMIGFicmFzaW9uIHRoZXkgYXJlIGNsb3Nlc3QgdG8gKGJhc2VkIG9uIGEgY2hvc2VuIGRpc3RhbmNlIHZhcmlhYmxlKS4KCiogU2VjdGlvbiA2LjAgT3ZlcmFsbCBjb25jbHVzaW9ucyBhbmQgc3VnZ2VzdGlvbnMgCgoqIFNlY3Rpb24gNy4wIEFwcGVuZGl4IFRoaXMgc2VjdGlvbiBkZXNjcmliZSB0aGUgZm9sbG93aW5nIGFkZGl0aW9uYWwgd29ya3MgdGhhdCBtYXkgYmUgaGVscGZ1bCBpbiB0aGUgZnV0dXJlIHdvcms6ICpsaXN0IHN1YmplY3RzKi4gIAoKCiMgMy4wIEZpbmRpbmcgMTogUElYTCBhbmQgTElCUyBNYXRjaGluZwoKX0dpdmUgYSBoaWdobGV2ZWwgb3ZlcnZpZXcgb2YgdGhlIG1ham9yIGZpbmRpbmcuIFdoYXQgcXVlc3Rpb25zIHdlcmUgeW91ciB0cnlpbmcgdG8gYWRkcmVzcywgd2hhdCBhcHByb2FjaGVzIGRpZCB5b3UgZW1wbG95LCBhbmQgd2hhdCBoYXBwZW5lZD9fCgpGaXJzdGx5LCB3ZSB3aWxsIGJlIHRha2luZyBhIGxvb2sgYXQgaG93IFBJWEwgYW5kIExJQlMgY29ycmVzcG9uZC4gT3VyIGdyb3VwIGZvdW5kIHZlcnkgZWFybHkgaW4gb3VyIHJlc2VhcmNoIHRoYXQgdGhlcmUgd2Fzbid0IGEgZmVhdHVyZSBhbW9uZyB0aGVtIHRoYXQgY2FuIGJlIHVzZWQgdG8gbWF0Y2ggdGhlIGRhdGEgc2V0cy4gRm9yIGV4YW1wbGUsIHRoZSBjb2x1bW5zIG9mIFBJWEwgYXJlIG9yZ2FuaXplZCBieSBsYXRpdHVkZSBhbmQgbG9uZ2l0dWRlIGFzIHdlbGwgYXMgc2FtcGxlIG51bWJlciAoMS0xNiksIHNhbXBsZSBuYW1lLCBhbmQgYWJyYXNpb24gbmFtZS4gVW5mb3J0dW5hdGVseSwgTElCUyB3YXNuJ3Qgc29ydGVkIHRoZSBzYW1lIHdheS4gTElCUyB3YXMgb3JnYW5pemVkIGJ5IHRoZSBzb2wgdGhhdCB0aGUgc2FtcGxlIHdhcyB0YWtlbiBhdC4gTElCUyBpcyBicm9rZW4gdXAgaW50byBtYW55IGRpZmZlcmVudCB0eXBlcyBvZiBzYW1wbGVzIGFzIHdlbGwsIGluY2x1ZGluZyB0aGUgZmFjdCBpdCBjYXJyaWVzIGFyb3VuZCBlYXJ0aCByZWZlcmVuY2UgZGF0YSB0byBiZSB1c2VkIGluIGNvbXBhcmluZyB3aXRoIGRpZmZlcmVudCBzYW1wbGUgc2l0ZXMuIFRoYXQgYmVpbmcgc2FpZCwgaW4gb3JkZXIgdG8gbWF0Y2ggUElYTCB0YXJnZXRzIHRvIGNvcnJlc3BvbmRpbmcgTElCUyBzYW1wbGVzLCBNYXJnbyBhbmQgSSBjcmVhdGVkIGEgbmV3IGRhdGEgc2V0IHRoYXQgYWRkZWQgYW5vdGhlciBtZXRhZGF0YSBmZWF0dXJlIHRvIFBJWEwgKGxhdGl0dWRlIGFuZCBsb25naXR1ZGUgY29vcmRpbmF0ZXMpIHdoaWNoIHdlIG9idGFpbmVkIGZyb20gdGhlIEFuYWx5c3QncyBOb3RlYm9vay4gT25jZSB0aGlzIHdhcyBhZGRlZCBpbiwgd2UgcmVhbGl6ZWQgdGhhdCB0aGUgbG9uZ2l0dWRlIGFuZCBsYXRpdHVkZSBkaWRuJ3QgcmVhbGx5IG1hdGNoLiBTbyBNYXJnbyBjcmVhdGVkIGEgZGlzdGFuY2UgZnVuY3Rpb24gdG8gbWF0Y2ggTElCUyBzYW1wbGVzIHRvIFBJWEwgdGFyZ2V0cyBiYXNlZCBvbiB3aGF0ZXZlciBkaXN0YW5jZSBhIHBlcnNvbiBzcGVjaWZpZXMuIE9yaWdpbmFsbHksIHdlIHNldCBpdCB0byBiZSByb3VuZGVkIHRvIHRocmVlIHRob3VzYW5kdGhzIGFuZCBtYXRjaCBiYXNlZCBvbiB0aGF0LgoKVGhpcyBoZWxwZWQgYW5zd2VyIHRoZSBxdWVzdGlvbiBvZiBob3cgY2FuIHdlIGNvcnJlbGF0ZSB0aGUgTElCUyBhbmQgUElYTCBkYXRhIHNldHMgdG8gYmUgYWJsZSB0byBwbG90IHRoZW0gb24gdGhlIHNhbWUgYXhpcyBvZiB3aGF0ZXZlciBwbG90IGlzIHRyeWluZyB0byBiZSBjcmVhdGVkLiBJIHdhcyBjdXJpb3VzIHRvIHNlZSBob3cgY2xvc2UgUElYTCB0YXJnZXRzIHdlcmUgdG8gTElCUyBzYW1wbGUgc2l0ZXMgYXMgd2VsbCBhcyBob3cgbWFueSBMSUJTIHNhbXBsZXMgd291bGQgYmUgYXNzb2NpYXRlZCB3aXRoIGEgUElYTCB0YXJnZXQgcGVyaGFwcyB3aXRoIGEgcmFkaXVzIG9mIDcgb3IgMTAgbWV0ZXJzLgoKIyMgMy4xIERhdGEsIENvZGUsIGFuZCBSZXNvdXJjZXMKCkhlcmUgaXMgYSBsaXN0IGRhdGEgc2V0cywgY29kZXMsIHRoYXQgYXJlIHVzZWQgaW4geW91ciB3b3JrLiBBbG9uZyB3aXRoIGJyaWVmIGRlc2NyaXB0aW9uIGFuZCBVUkwgd2hlcmUgdGhleSBhcmUgbG9jYXRlZC4KCjEuIHBldGVyYy1maW5hbFByb2plY3RGMjQuUm1kICh3aXRoIGtuaXQgcGRmIGFuZCBodG1sKSBpcyB0aGlzIG5vdGVib29rLgpbaHR0cHM6Ly9naXRodWIucnBpLmVkdS9EYXRhSU5DSVRFL0RBUi1NYXJzLUYyNC9ibG9iL21haW4vU3R1ZGVudE5vdGVib29rcy9Bc3NpZ25tZW50MDdfRHJhZnRGaW5hbFByb2plY3ROb3RlYm9vay9wZXRlcmNfZmluYWxQcm9qZWN0RjI0X3JvdWdoZHJhZnQuUm1kXShodHRwczovL2dpdGh1Yi5ycGkuZWR1L0RhdGFJTkNJVEUvREFSLU1hcnMtRjI0L2Jsb2IvbWFpbi9TdHVkZW50Tm90ZWJvb2tzL0Fzc2lnbm1lbnQwN19EcmFmdEZpbmFsUHJvamVjdE5vdGVib29rL3BldGVyY19maW5hbFByb2plY3RGMjRfcm91Z2hkcmFmdC5SbWQpCgoyLiB2MV9saWJzX3RvX3NhbXBsZS5SZHMgaXMgdGhlIGNvbWJpbmVkIGRhdGEgc2V0IG9mIFBJWEwgYW5kIExJQlMgdGhhdCBpbmNsdWRlcyB0aGUgZGlzdGFuY2UgZnJvbSBhIFBJWEwgYWJyYXNpb24gdG8gYSBMSUJTIHNhbXBsZS4gIApbaHR0cHM6Ly9naXRodWIucnBpLmVkdS9EYXRhSU5DSVRFL0RBUi1NYXJzLUYyNC9ibG9iL21haW4vU3R1ZGVudERhdGEvdjFfbGlic190b19zYW1wbGUuUmRzXShodHRwczovL2dpdGh1Yi5ycGkuZWR1L0RhdGFJTkNJVEUvREFSLU1hcnMtRjI0L2Jsb2IvbWFpbi9TdHVkZW50RGF0YS92MV9saWJzX3RvX3NhbXBsZS5SZHMpLiAKCkZpcnN0bHksIHdlIHNldCB0aGUgbnVtYmVyIG9mIG1ldGVycyBkaXN0YW5jZSB0aHJlc2hvbGQgYmV0d2VlbiBhIFBJWEwgYWJyYXNpb24gYW5kIExJQlMgc2FtcGxlLiBXaXRoaW4gdGhlIHYxX2xpYnNfdG9fc2FtcGxlLlJkcywgd2hpY2ggTWFyZ28gYW5kIEkgY29sbGFib3JhdGVkIG9uIHRoZXJlIGlzIGEgZGlzdGFuY2UgdmFyaWFibGUgdGhhdCBpcyBzZXQgdmlhIGEgZnVuY3Rpb24gdGhhdCBNYXJnbyBjcmVhdGVkIHRvIG1lYXN1cmUgdGhlIGRpc3RhbmNlIGJldHdlZW4gYSBQSVhMIGFicmFzaW9uIGFuZCBMSUJTIHNhbXBsZSB1c2luZyB0aGVpciBsYXRpdHVkZSBhbmQgbG9uZ2l0dWRlIGNvb3JkaW5hdGVzLiAKYGBge3J9Cm1ldGVycyA8LSAxMDAKYGBgCgpUbyBwcmVwYXJlIHRoZSBkYXRhLCB3ZSB3aWxsIGxvYWQgaW4gdGhlIHYxX2xpYnNfdG9fc2FtcGxlLlJkcywgZ3JvdXAgYnkgbGF0aXR1ZGUgYW5kIGxvbmdpdHVkZSBvZiBMSUJTLCBhbmQgZmlsdGVyIG91dCBldmVyeSBMSUJTIHNhbXBsZSB0aGF0IGhhcyBhIGxhcmdlciBkaXN0YW5jZSBmcm9tIGl0cyBjb3JyZXNwb25kaW5nIFBJWEwgYWJyYXNpb24gdGhhbiBzcGVjaWZpZWQgaW4gdGhlIGNob3NlbiBkaXN0YW5jZSAobWV0ZXIpIHZhbHVlLiBJbiBvcmRlciB0byBtYWtlIGEgc2NhdHRlciBwbG90IG9mIHRoZSBMSUJTIGFuZCBQSVhMIHBvaW50cywgd2Ugd2lsbCBjcmVhdGUgYSBuZXcgZGF0YSBmcmFtZSBvZiBlYWNoIHVuaXF1ZSBQSVhMIGFicmFzaW9uIGFuZCBpdHMgY29vcmRpbmF0ZXMuIFRoYXQgaXMgdGhlIHVuaXF1ZV9waXhsIGRhdGEgZnJhbWUgd2hpY2ggd2lsbCBiZSB1c2VkIHRvIHBsb3QgdGhlIFBJWEwgYWJyYXNpb24gY29vcmRpbmF0ZXMuCgpgYGB7ciB9CmxpYnNfdG9fc2FtcGxlIDwtIHJlYWRSRFMoIn4vREFSLU1hcnMtRjI0L1N0dWRlbnREYXRhL3YxX2xpYnNfdG9fc2FtcGxlLlJkcyIpCiNtYWtlIGEgZmlsdGVyZWQgZGF0YSBmcmFtZSB0aGF0IHBpY2tzIHRoZSBtYXggcG9pbnQgb3V0IG9mIGFsbCBsaWJzIHNhbXBsZXMgYXQgYSBjZXJ0YWluIHRhcmdldCAKIyBmb3Igc2ltcGxpY2l0eQpkZl9maWx0ZXJlZCA8LSBsaWJzX3RvX3NhbXBsZSAlPiUKICBncm91cF9ieShMYXQubGlicywgTG9uLmxpYnMpICU+JQogIGZpbHRlcihQb2ludC5saWJzID09IG1heChQb2ludC5saWJzKSkgJT4lCiAgdW5ncm91cCgpCmRmX2Rpc3RhbmNlX2ZpbHRlciA8LSBkZl9maWx0ZXJlZFtkZl9maWx0ZXJlZCREaXN0YW5jZSA8PSBtZXRlcnMsXQoKI21ha2UgYSBkYXRhIGZyYW1lIHdpdGggdGhlIHVuaXF1ZSBwaXhsIGNvb3JkaW5hdGVzIHNpbmNlIHRoZXkgYXJlIGluIHBhaXJzIG9mIGlkZW50aWNhbCBsYXQvbG9uCnVuaXF1ZV9waXhsIDwtIGRmX2ZpbHRlcmVkICU+JQogIHNlbGVjdChMYXQucGl4bCwgTG9uLnBpeGwsIEFicmFzaW9uLnBpeGwpICU+JSBkaXN0aW5jdCgpCmBgYAoKCiMjIDMuMiBDb250cmlidXRpb24KClRoZSBsb2dpc3RpY3Mgb2YgZmlsdGVyaW5nIHRoZSBvcmlnaW5hbCBkYXRhIHNldCBpcyBteSB3b3JrLiBQcmV2aW91c2x5LCBJIGhhZCB0byBkbyBhIGxvdCBtb3JlIGZpbHRlcmluZyBpbiBvcmRlciB0byBjaG9vc2UgdGhlIGRpc3RhbmNlIGFuZCBnZXQgdW5pcXVlIExJQlMgcG9pbnRzIGluIG9yZGVyIHRvIG5vdCBwdXQgdG9vIG1hbnkgcG9pbnRzIG9uIHRoZSBzY2F0dGVycGxvdC4gTWFyZ28gYW5kIEkgd29ya2VkIHRvZ2V0aGVyIHRvIGNyZWF0ZSB0aGUgZGF0YSBzZXQgdGhhdCBJIHVzZSBpbiB0aGlzIHNlY3Rpb24gKHYxX2xpYnNfdG9fc2FtcGxlLlJkcykgYnkgZGVjaWRpbmcgaG93IHRvIG1hdGNoIHVwIExJQlMgdG8gY2VydGFpbiBQSVhMIGFicmFzaW9ucy4gTWFyZ28gY3JlYXRlZCB0aGUgZGlzdGFuY2UgZnVuY3Rpb24gdG8gZmluZCB0aGUgZGlzdGFuY2UgYmV0d2VlbiBQSVhMIGFicmFzaW9ucyBhbmQgTElCUyBzYW1wbGVzIGFuZCBhZGRlZCB0aGF0IGNvbHVtbiB0byB0aGUgZGF0YSBzZXQuIFRoZW4sIERvbmEgZml4ZWQgYWxsIHRoZSBuYW1pbmcgY29udmVudGlvbnMgaW4gdGhlIGRhdGEgc2V0IGluIG9yZGVyIHRvIGhhdmUgY29uc2lzdGVuY3kgYW5kIG1ha2UgaXQgZWFzeSB0byB0ZWxsIHdoaWNoIHZhcmlhYmxlIHdhcyBvcmlnaW5hbGx5IGZyb20gZWFjaCBkYXRhIHNldCAoZXguIE5hbWUucGl4bCwgVGFyZ2V0LmxpYnMpLiBJIHRoZW4gdXNlZCB0aGUgZGF0YSB0byBjcmVhdGUgcGxvdHMgYW5kIGFuYWx5emUuIEJlbG93IGlzIGEgc2NhdHRlcnBsb3Qgc2hvd2Nhc2luZyB0aGUgZGlzdHJpYnV0aW9uIG9mIFBJWEwgYWJyYXNpb25zIGFuZCBjb3JyZXNwb25kaW5nIExJQlMgc2FtcGxlcyBiYXNlZCBvbiB0aGUgc3BlY2lmaWVkIG1heCBkaXN0YW5jZSBiZXR3ZWVuIHRoZW0uIAoKCiMjIDMuMyBNZXRob2RzIERlc2NyaXB0aW9uIAoKSSBjaG9zZSB0byB1c2UgZ2dwbG90IHRvIGRpc3BsYXkgdGhlIExJQlMgYW5kIFBJWEwgZGF0YSBmb3IgZWFzaWVyIGFuYWx5c2lzIG9mIHNlZWluZyBob3cgbWFueSBMSUJTIHNhbXBsZXMgYWxpZ24gd2l0aCBkaWZmZXJlbnQgUElYTCBhYnJhc2lvbnMuIEl0IHdhcyB2ZXJ5IGludGVyZXN0aW5nIHRvIGNoYW5nZSBhcm91bmQgdGhlIG1heCBkaXN0YW5jZSBhbmQgc2VlIHdoaWNoIGFsaWduZWQgd2l0aCB3aGljaCBhYnJhc2lvbi4gSW4gdGVybXMgb2YgZXhlY3V0aW9uLCBpdCB0b29rIG1lIGEgYml0IG9mIHRpbWUgdG8gb3JnYW5pemUgYWxsIG9mIHRoZSB0aG91Z2h0cyBNYXJnbyBhbmQgSSBoYWQgb24gaG93IHRvIGNyZWF0ZSBhbmQgbWFuYWdlIHRoaXMgZGF0YSBzZXQuIE9yaWdpbmFsbHksIHdlIGhhZCByb3VuZGVkIHRoZSBkaXN0YW5jZXMgdG8gdGhlIG5lYXJlc3QgdGhvdXNhbmR0aCB0byBtYXRjaCB0aGVtLCBhbmQgdGhlbiB3ZXJlIHBsb3R0aW5nIHRoYXQgd2F5LiBIb3dldmVyLCB0aGF0IGxlZnQgYSBsb3Qgb2Ygcm9vbSBmb3IgZXJyb3IgYW5kIHdhc24ndCBhcyBhY2N1cmF0ZS4gQ3JlYXRpbmcgYSBkaXN0YW5jZSBmdW5jdGlvbiBhbGxvd3MgZm9yIHRoZSBzY2llbnRpc3Qgb3IgcGVyc29uIHVzaW5nIHRoZSBNYXJzIE1pc3Npb24gTWluZGVyIEFwcCB0byBjaG9vc2Ugd2hhdGV2ZXIgZGlzdGFuY2UgdGhleSB3b3VsZCBsaWtlIGFuZCBhbGxvd3MgZm9yIG11Y2ggbW9yZSBmdW5jdGlvbmFsaXR5LiBNb2RpZnlpbmcgdGhlIGRhdGEgc2V0IG1vcmUgZW5kZWQgdXAgYmVpbmcgbW9yZSBlZmZpY2llbnQgdGhhbiBhZGRpbmcgc21hbGwgZWRpdHMgYXMgSSB3YXMgbWFraW5nIG15IHBsb3RzIHdoaWNoIHdhcyBvcmlnaW5hbGx5IG1ha2luZyBtZSBjcmF6eSAoYXMgaW4gY2hhbmdpbmcgdmFyaWFibGUgdHlwZXMgaWYgdGhleSB3ZXJlbid0IHdoYXQgdGhleSB3ZXJlIHN1cHBvc2VkIHRvIGJlKS4gSW4gdGhlIGVuZCwgSSBsZWFybmVkIGEgbG90IGFib3V0IGRhdGEgb3JnYW5pemF0aW9uIGFuZCB0aGF0IGNvbnNpc3RlbmN5IGFuZCBzdGF5aW5nIG9yZ2FuaXplZCBpcyBrZXkgYW5kIHNhdmVzIGEgbG90IG9mIHRpbWUgbGF0ZXIgb24uCgoKIyMgMy40IFJlc3VsdCBhbmQgRGlzY3Vzc2lvbiAKClRvIGNyZWF0ZSBhIHBsb3Qgb2YgdGhlIExJQlMgYW5kIFBJWEwgZGF0YSBvcmdhbml6ZWQgYnkgd2hhdCBMSUJTIHNhbXBsZXMgYWxpZ24gd2l0aCB3aGF0IGFicmFzaW9ucywgZmlyc3QgcGxvdHRlZCB0aGUgTElCUyBzYW1wbGVzIGNvbG9yZWQgYnkgd2hhdCBQSVhMIGFicmFzaW9uIHRoZXkgd2VyZSBjbG9zZXN0IHRvLCBhbmQgdGhlbiBwbG90dGVkIHRoIFBJWEwgYWJyYXNpb25zIGFzIHJlZCBzdGFycyBvbiB0aGUgcGxvdCB0byBzaG93IHdoZXJlIHRoZSBQSVhMIGFicmFzaW9ucyB3ZXJlIHJlbGF0aXZlIHRvIHRoZSBMSUJTIHNhbXBsZXMuCgpgYGB7ciB9CiNwbG90IG9mIGxpYnMgYW5kIHBpeGwgZGF0YSBieSBsYXQvbG9uCmdncGxvdChkYXRhID0gZGZfZGlzdGFuY2VfZmlsdGVyKSArCiAgZ2VvbV9wb2ludChtYXBwaW5nID0gYWVzKHggPSBMb24ubGlicywgeSA9IExhdC5saWJzLCBjb2xvciA9IEFicmFzaW9uLnBpeGwpKSArICAgICAgICAgICAgICAgICAjIENvbG9yIGJ5IGFicmFzaW9uCiAgZ2VvbV9wb2ludChtYXBwaW5nID0gYWVzKHggPSBMb24ucGl4bCwgeSA9IExhdC5waXhsKSwgZGF0YSA9IHVuaXF1ZV9waXhsLCBjb2xvciA9ICJyZWQiLCBzaGFwZSA9IDMsIHNpemUgPSAzKSArICMgRml4ZWQgY29sb3IgZm9yIHVuaXF1ZV9waXhsIHBvaW50cwogIGdlb21fdGV4dF9yZXBlbChtYXBwaW5nID0gYWVzKHggPSBMb24ucGl4bCwgeSA9IExhdC5waXhsLCBsYWJlbCA9IEFicmFzaW9uLnBpeGwpLCBkYXRhID0gdW5pcXVlX3BpeGwsCiAgICAgICAgICAgICAgICAgIHZqdXN0ID0gMiwgY29sb3IgPSAicmVkIikgKwogIGxhYnModGl0bGUgPSBwYXN0ZSgiTElCUyBTYW1wbGVzIGFuZCBQSVhMIEFicmFzaW9ucyB3aXRoaW4iLCBtZXRlcnMsICJtZXRlcnMiKSwKICAgICAgIHggPSAiTG9uZ2l0dWRlIiwKICAgICAgIHkgPSAiTGF0aXR1ZGUiLAogICAgICAgY29sb3IgPSAiUElYTCBBYnJhc2lvbiIsCiAgICAgICBjYXB0aW9uID0gIkRhdGEgY29sbGVjdGVkIHVzaW5nIExJQlMgYW5kIFBJWEwgaW5zdHJ1bWVudHMgb24gUGVyc2VydmVyYW5jZSByb3Zlci5cbiBTaG93cyBQSVhMIGFicmFzaW9ucyBwbG90dGVkIGFzIHJlZCBzdGFycyxcbiBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgTElCUyBzYW1wbGVzIGNvbG9yZWQgYnkgdGhlaXIgY2xvc2VzdCBQSVhMIGFicmFzaW9uLiIpKyAgICAgICAgICAjIExhYmVsIGZvciB0aGUgY29sb3IgbGVnZW5kIAogIyBDZW50ZXIgdGhlIGNhcHRpb24gb24gdGhlIGxlZnQgc2lkZQogIHRoZW1lKAogICAgcGxvdC5jYXB0aW9uID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMCkgICMgQWxpZ25zIGNhcHRpb24gdG8gdGhlIGxlZnQKICApCgojYWRkIGxlZ2VuZCBmb3IgUElYTCBpZGsgd2h5IGl0J3Mgbm90IHdvcmtpbmcKYGBgCgoKIyMgMy41IENvbmNsdXNpb25zLCBMaW1pdGF0aW9ucywgYW5kIEZ1dHVyZSBXb3JrLgoKSSBiZWxpZXZlIG15IGZpbmRpbmdzIG1ha2UgaXQgdmVyeSBlYXN5IGZvciByZXNlYXJjaGVycyBhbmQgc2NpZW50aXN0cyB0byBoYXZlIGEgdmlzdWFsaXphdGlvbiBvZiBQSVhMIGFuZCBMSUJTIHNhbXBsZXMgdGhhdCB0aGV5IHdhbnQgdG8gc2VlIGJhc2VkIG9uIHdoYXQgbWF4IGRpc3RhbmNlIHRoZXkgYXJlIGZvY3VzaW5nIG9uIHdoZW4gZXhhbWluaW5nIFBJWEwgYW5kIExJQlMgdG9nZXRoZXIuIEZvciBmdXR1cmUgd29yaywgSSB0aGluayBhcyBtb3JlIGNvb3JkaW5hdGVzIGFuZCBkYXRhIGlzIGFkZGVkIHRvIHRoZSBMSUJTIGFuZCBQSVhMIGRhdGEgc2V0cyBhcyB0aGV5IGJlY29tZSBhdmFpbGFibGUgZnJvbSBOQVNBIHRoaXMgd2lsbCBjb250aW51ZSB0byBiZSBidWlsdCB1cG9uIGFuZCBhbHRob3VnaCBpdCBpc24ndCBzdXBlciBjb21wbGljYXRlZCBvZiBhIHBsb3QsIGl0IHByb3ZpZGVzIGEgdmVyeSBuZWNlc3NhcnkgY29udGV4dCB0byB2aXN1YWxpemUgUElYTCBhbmQgTElCUy4gCgotIEFkZCBtb3JlIGFib3V0IGxpbWl0YXRpb25zPwoKIyA0LjAgRmluZGluZyAyOiBTb2lsIENvbXBvc2l0aW9uIEFuYWx5c2lzCl9HaXZlIGEgaGlnaGxldmVsIG92ZXJ2aWV3IG9mIHRoZSBtYWpvciBmaW5kaW5nLiBXaGF0IHF1ZXN0aW9ucyB3ZXJlIHlvdXIgdHJ5aW5nIHRvIGFkZHJlc3MsIHdoYXQgYXBwcm9hY2hlcyBkaWQgeW91IGVtcGxveSwgYW5kIHdoYXQgaGFwcGVuZWQ/XwoKVXNpbmcgdGhlIExJQlMgYW5kIFBJWEwgY29tYmluZWQgZGF0YSBzZXQsIEkgY3JlYXRlZCBhIHBsb3Qgb2YgdGhlIGNvbXBvc2l0aW9uIHBlcmNlbnRhZ2VzIG9mIGNoZW1pY2FsIGNvbXBvdW5kcyBzdWNoIGFzIFNpMDIsIEsyMCwgZXRjLiB1c2luZyBsb2cgc2NhbGluZyB0byBjb21wYXJlIHRoZSBjb21wb3NpdGlvbnMgb2YgYSBQSVhMIGFicmFzaW9uIGFuZCB0aGUgY29ycmVzcG9uZGluZyBMSUJTIHNhbXBsZSBjb21wb3NpdGlvbnMgKGJhc2VkIG9uIHRoZSBMSUJTIHNhbXBsZXMgZm9yIHggZGlzdGFuY2UgYXdheSBmcm9tIGEgUElYTCBhYnJhc2lvbikuIFRoZSBxdWVzdGlvbiBJIHdhcyB0cnlpbmcgdG8gYW5zd2VyIHdhcyBob3cgZG9lcyB0aGUgTElCUyBkYXRhIG9mIGEgY2VydGFpbiBhcmVhIGNvbXBhcmUgdG8gdGhlIFBJWEwgZGF0YSBvZiB0aGF0IGFyZWE/IEJ5IGxvb2tpbmcgYXQgdGhlIGNvbXBvc2l0aW9uIG9mIHRoZSBzb2lsIGluIGNlcnRhaW4gbG9jYXRpb25zLCB3ZSBjYW4gY29tcGFyZSB0aGUgZGlmZmVyZW5jZXMgaW4gdGhlIFBJWEwgYWJyYXNpb24gYW5kIHJlbGF0aW5nIExJQlMgc2FtcGxlcyBmb3IgYSBjZXJ0YWluIGFyZWEgdXRpbGl6aW5nIHRoZSBzYW1lIGRhdGEgc2V0ICh2MV9saWJzX3RvX3NhbXBsZS5SbWQpLiBJbiBvcmRlciB0byBhY2NvbXBsaXNoIHRoaXMsIAoKCiMjIDQuMSBEYXRhLCBDb2RlLCBhbmQgUmVzb3VyY2VzCkhlcmUgaXMgYSBsaXN0IGRhdGEgc2V0cywgY29kZXMsIHRoYXQgYXJlIHVzZWQgaW4geW91ciB3b3JrLiBBbG9uZyB3aXRoIGJyaWVmIGRlc2NyaXB0aW9uIGFuZCBVUkwgd2hlcmUgdGhleSBhcmUgbG9jYXRlZC4KCjEuIHBldGVyY19maW5hbFByb2plY3RGMjQuUm1kICh3aXRoIGtuaXQgcGRmIGFuZCBodG1sKSBpcyB0aGlzIG5vdGVib29rLgpbaHR0cHM6Ly9naXRodWIucnBpLmVkdS9EYXRhSU5DSVRFL0RBUi1NYXJzLUYyNC9ibG9iL21haW4vU3R1ZGVudE5vdGVib29rcy9Bc3NpZ25tZW50MDdfRHJhZnRGaW5hbFByb2plY3ROb3RlYm9vay9wZXRlcmNfZmluYWxQcm9qZWN0RjI0X3JvdWdoZHJhZnQuUm1kXShodHRwczovL2dpdGh1Yi5ycGkuZWR1L0RhdGFJTkNJVEUvREFSLU1hcnMtRjI0L2Jsb2IvbWFpbi9TdHVkZW50Tm90ZWJvb2tzL0Fzc2lnbm1lbnQwN19EcmFmdEZpbmFsUHJvamVjdE5vdGVib29rL3BldGVyY19maW5hbFByb2plY3RGMjRfcm91Z2hkcmFmdC5SbWQpCgoyLiBwZXRlcmNfYXNzaWdubWVudDUuUm1kICh3aXRoIGtuaXQgcGRmIGFuZCBodG1sKSB3aGljaCBpcyBteSBwcmV2aW91cyBub3RlYm9vay4KW2h0dHBzOi8vZ2l0aHViLnJwaS5lZHUvRGF0YUlOQ0lURS9EQVItTWFycy1GMjQvdHJlZS9tYWluL1N0dWRlbnROb3RlYm9va3MvQXNzaWdubWVudDA1L3BldGVyY19hc3NpZ21lbnQwNS5SbWRdKGh0dHBzOi8vZ2l0aHViLnJwaS5lZHUvRGF0YUlOQ0lURS9EQVItTWFycy1GMjQvdHJlZS9tYWluL1N0dWRlbnROb3RlYm9va3MvQXNzaWdubWVudDA1L3BldGVyY19hc3NpZ21lbnQwNS5SbWRdKQoKMy4gc3VwZXJjYW1fbGlic19tb2NfbG9jLlJkcyB3aGljaCBpcyB0aGUgb3JpZ2luYWwgTElCUyBkYXRhIGdpdmVuIHRvIG91ciByZXNlYXJjaCBncm91cC4KW2h0dHBzOi8vZ2l0aHViLnJwaS5lZHUvRGF0YUlOQ0lURS9EQVItTWFycy1GMjQvYmxvYi9tYWluL0RhdGEvc3VwZXJjYW1fbGlic19tb2NfbG9jLlJkc10oaHR0cHM6Ly9naXRodWIucnBpLmVkdS9EYXRhSU5DSVRFL0RBUi1NYXJzLUYyNC9ibG9iL21haW4vRGF0YS9zdXBlcmNhbV9saWJzX21vY19sb2MuUmRzKQoKNC4gcGl4bF9zb2xfY29vcmRpbmF0ZXMuUmRzLCB3aGljaCBpcyB0aGUgZGF0YSBzZXQgY29udGFpbmluZyB0aGUgUElYTCBkYXRhLCBzb2wsIGFuZCBjb29yZGluYXRlcy4KW2h0dHBzOi8vZ2l0aHViLnJwaS5lZHUvRGF0YUlOQ0lURS9EQVItTWFycy1GMjQvYmxvYi9tYWluL1N0dWRlbnREYXRhL3BpeGxfc29sX2Nvb3JkaW5hdGVzLlJkc10oaHR0cHM6Ly9naXRodWIucnBpLmVkdS9EYXRhSU5DSVRFL0RBUi1NYXJzLUYyNC9ibG9iL21haW4vU3R1ZGVudERhdGEvcGl4bF9zb2xfY29vcmRpbmF0ZXMuUmRzKQoKNC4gTElCU190cmFpbmluZ19zZXRfcXVhcnRpbGVzLlJkcyBpcyB0aGUgZGF0YSB3aXRoIGVhcnRoIHF1YXJ0aWxlIHJlZmVyZW5jZSBkYXRhLgpbaHR0cHM6Ly9naXRodWIucnBpLmVkdS9EYXRhSU5DSVRFL0RBUi1NYXJzLUYyNC9ibG9iL21haW4vRGF0YS9MSUJTX3RyYWluaW5nX3NldF9xdWFydGlsZXMuUmRzXShodHRwczovL2dpdGh1Yi5ycGkuZWR1L0RhdGFJTkNJVEUvREFSLU1hcnMtRjI0L2Jsb2IvbWFpbi9EYXRhL0xJQlNfdHJhaW5pbmdfc2V0X3F1YXJ0aWxlcy5SZHMpLiAKClRvIHByZXBhcmUgdGhlIGRhdGEsIEkgc3RhcnQgYnkgbG9hZGluZyBpbiB0aGUgTElCUyBkYXRhLiBUaGVuLCB3ZSBkcm9wIHRoZSBzdGFuZGFyZCBkZXZpYXRpb24gY29sdW1ucyBhbmQgc3VtIG9mIHBlcmNlbnRhZ2UgY29sdW1ucyBsZWF2aW5nIHVzIHdpdGgganVzdCB0aGUgd2VpZ2h0ZWQgY29tcG9zaXRpb24gaW4gdGVybXMgb2YgbnVtZXJpY2FsIGRhdGEuIFdlIGFsc28gcmVtb3ZlIHRoZSBzY2N0IHZhbHVlcywgYXMgdGhvc2UgdmFsdWVzIGFyZSB0aGUgb25lcyB0aGF0IGFyZSBlYXJ0aCByZWZlcmVuY2Ugc2FtcGxlcyB0aGF0IFBlcnNlcnZlcmFuY2UgY2FycmllcyB3aXRoIGl0LiBUaGVyZWZvcmUsIHRoZXkgd2lsbCBub3QgYmUgdmVyeSByZWxldmFudCB3aGVuIHBsb3R0aW5nIHRoZSBMSUJTIGRhdGEgYXMgd2UgYXJlIGZvY3VzZWQgb24gdGhlIE1hcnMgc29pbCBjb21wb3NpdGlvbnMuCgpgYGB7cn0KI0VhcnRoIHF1YXJ0aWxlcwplYXJ0aHF1YXJ0aWxlcy5kZjwtcmVhZFJEUygiL2FjYWRlbWljcy9NQVRQLTQ5MTAtRjI0L0RBUi1NYXJzLUYyNC9EYXRhL0xJQlNfdHJhaW5pbmdfc2V0X3F1YXJ0aWxlcy5SZHMiKQojTG9hZCBpbiBMSUJTIGRhdGEKbGlicy5kZiA8LSByZWFkUkRTKCIvYWNhZGVtaWNzL01BVFAtNDkxMC1GMjQvREFSLU1hcnMtRjI0L0RhdGEvc3VwZXJjYW1fbGlic19tb2NfbG9jLlJkcyIpCiNEcm9wIHRoZSBzdGFuZGFyZCBkZXZpYXRpb24gZmVhdHVyZXMsIHRoZSBzdW0gb2YgdGhlIHBlcmNlbnRhZ2VzLCAKI3RoZSBkaXN0YW5jZSwgYW5kIHRoZSB0b3RhbCBmcmVxdWVuY2llcwpsaWJzLmRmIDwtIGxpYnMuZGYgJT4lIAogIHNlbGVjdCghKGMoZGlzdGFuY2VfbW0sVG90LkVtLixTaU8yX3N0ZGV2LFRpTzJfc3RkZXYsQWwyTzNfc3RkZXYsRmVPVF9zdGRldiwKICAgICAgICAgICAgIE1nT19zdGRldixOYTJPX3N0ZGV2LENhT19zdGRldixLMk9fc3RkZXYsVG90YWwpKSkKIyBDb252ZXJ0IHRoZSBwb2ludHMgdG8gbnVtZXJpYwpsaWJzLmRmJHBvaW50IDwtIGFzLm51bWVyaWMobGlicy5kZiRwb2ludCkKbGlicy5kZlssNjoxM10gPC0gc2FwcGx5KGxpYnMuZGZbLDY6MTNdLGFzLm51bWVyaWMpCiNyZW1vdmUgdGhlIHNjY3QvcmVmZXJlbmNlIHNhbXBsZXMKbGlicy5kZjwtbGlicy5kZiU+JQogIGZpbHRlcighKGdyZXBsKCJzY2N0IiwgdGFyZ2V0KSkpCiNhZGQgYSBjb2x1bW4gdG8gaW5kaWNhdGUgdGhlIG5lYXJlc3QgcGl4bApsaWJzLmRmPC1jYmluZChuZWFyZXN0cGl4bD0wLGxpYnMuZGYpCiNtYWtlIGEgZGF0YWZyYW1lIG9mIGp1c3QgdGhlIExJQlMgTGF0L0xvbmcgYW5kIHRhcmdldCBuYW1lIGFuZCByZW1vdmUgZHVwbGljYXRlcwpsaWJzdGFyZ2V0cy5kZjwtbGlicy5kZlssYygxLDMsNCw1KV0KbGlic3RhcmdldHMuZGY8LWRpc3RpbmN0KGxpYnN0YXJnZXRzLmRmKQpgYGAKClNldCBtZXRlcnMgYW5kIGNob3NlbiBhYnJhc2lvbiB0byBhY3QgYXMgYSBzbGlkZXIgaW4gdGhlIDJkIGFwcC4KYGBge3J9CiNDaG9vc2UgbWF4IGRpc3RhbmNlIHZhcmlhYmxlIGJldHdlZW4gUElYTCBhbmQgTElCUyBkYXRhCm1ldGVycyA9IDEwMAojQ2hvb3NlIFBJWEwgYWJyYXNpb24geW91IHdhbnQgdG8gbG9vayBhdAphYnJhc2lvbl9uYW1lID0gIkJlcnJ5IEhvbGxvdyIKYGBgCgpOZXh0LCB3ZSBsb2FkIGluIHRoZSBQSVhMIGRhdGEuIFdlIHJlbW92ZSB0aGUgYXRtb3NwaGVyaWMgc2FtcGxlIGFuZCBvbmx5IHNlbGVjdCBvbmUgUElYTCBzYW1wbGUgb2YgZWFjaCBhYnJhc2lvbi4KYGBge3IsIGRhdGEwMn0KI3JlYWQgaW4gcGl4bCBkYXRhIHdpdGggbGF0L2xvbmcKcGl4bC5kZjwtcmVhZFJEUygiL2FjYWRlbWljcy9NQVRQLTQ5MTAtRjI0L0RBUi1NYXJzLUYyNC9TdHVkZW50RGF0YS9waXhsX3NvbF9jb29yZGluYXRlcy5SZHMiKQojaW5jbHVkZSBvbmx5IHBpeGwgbWV0YWRhdGEKcGl4bC5kZjwtcGl4bC5kZiAlPiUKICBzZWxlY3QoYygxLDIsMTksMjAsMjIpKQojY29udmVydCBMYXQvTG9uZyB0byBudW1lcmljCnBpeGwuZGYkTGF0IDwtIGFzLm51bWVyaWMocGl4bC5kZiRMYXQpCnBpeGwuZGYkTG9uZyA8LSBhcy5udW1lcmljKHBpeGwuZGYkTG9uZykKI3JlbW92ZSByb3dzIHNvIHdlIG9ubHkgaGF2ZSBvbmUgc2FtcGxlIHBlciBhYnJhc2lvbiBhbmQgcmVtb3ZlIGF0bW9zcGhlcmljIHNhbXBsZQpwaXhsLmRmPC1waXhsLmRmW2MoMiw0LDYsOCwxMCwxMiwxNCwxNiksXQpgYGAKCk5leHQsIHdlIHdpbGwgaW5pdGlhbGl6ZSBhIGRpc3RhbmNlIHZhcmlhYmxlICh0byBpbmRpY2F0ZSBkaXN0YW5jZSBiZXR3ZWVuIFBJWEwgYWJyYXNpb24gYW5kIExJQlMgdGFyZ2V0KSBhbmQgYWxzbyBpbml0aWFsaXplIGVhY2ggUElYTCBhYnJhc2lvbiwgd2hpY2ggd2lsbCBiZSB1c2VkIHRvIG1hcmsgd2hpY2ggUElYTCBhYnJhc2lvbiB0aGUgTElCUyBzYW1wbGUgaXMgY2xvc2VzdCB0byBieSB1c2luZyBhIGZhY3RvciBvZiAwIG9yIDEuIApgYGB7cn0KbGlic3RhcmdldHMuZGY8LWNiaW5kKGxpYnN0YXJnZXRzLmRmLCJEaXN0YW5jZSI9MCwiQmVsbGVncmFkZSI9MCwiRG91cmJlcyI9MCwiUXVhcnRpZXIiPTAsIkFsZmFsZmEiPTAsIlRob3JudG9uR2FwIj0wLCJCZXJyeSBIb2xsb3ciPTAsIk5vdmFydXB0YSI9MCwiVWdhbmlrIElzbGFuZCI9MCkKYGBgCgpUaGUgZGlzdGFuY2UgZnVuY3Rpb24gYmVsb3cgd2lsbCBjYWxjdWxhdGUgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBMSUJTIHRhcmdldCBhbmQgYWxsIHRoZSBQSVhMIGFicmFzaW9ucywgYW5kIHBpY2sgdGhlIHNtYWxsZXN0IGRpc3RhbmNlIHRvIHBpY2sgdGhlIGNsb2VzdCBQSVhMIGFicmFzaW9uIHRvIHRoYXQgTElCUyB0YXJnZXQuCmBgYHtyfQpmb3IoaSBpbiAxOm5yb3cobGlic3RhcmdldHMuZGYpKSB7CiAgICBsaWJzdGFyZ2V0cy5kZltpLGMoNjoxMyldPC1jKGRpc3RIYXZlcnNpbmUocGl4bC5kZlsxLGMoMSwyKV0sbGlic3RhcmdldHMuZGZbaSxjKDIsMyldLHI9MzM5MzE2OSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3RIYXZlcnNpbmUocGl4bC5kZlsyLGMoMSwyKV0sbGlic3RhcmdldHMuZGZbaSxjKDIsMyldLHI9MzM5MzE2OSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3RIYXZlcnNpbmUocGl4bC5kZlszLGMoMSwyKV0sbGlic3RhcmdldHMuZGZbaSxjKDIsMyldLHI9MzM5MzE2OSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3RIYXZlcnNpbmUocGl4bC5kZls0LGMoMSwyKV0sbGlic3RhcmdldHMuZGZbaSxjKDIsMyldLHI9MzM5MzE2OSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3RIYXZlcnNpbmUocGl4bC5kZls1LGMoMSwyKV0sbGlic3RhcmdldHMuZGZbaSxjKDIsMyldLHI9MzM5MzE2OSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3RIYXZlcnNpbmUocGl4bC5kZls2LGMoMSwyKV0sbGlic3RhcmdldHMuZGZbaSxjKDIsMyldLHI9MzM5MzE2OSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3RIYXZlcnNpbmUocGl4bC5kZls3LGMoMSwyKV0sbGlic3RhcmdldHMuZGZbaSxjKDIsMyldLHI9MzM5MzE2OSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3RIYXZlcnNpbmUocGl4bC5kZls4LGMoMSwyKV0sbGlic3RhcmdldHMuZGZbaSxjKDIsMyldLHI9MzM5MzE2OSkpCiAgICAKICAgIGxpYnN0YXJnZXRzLmRmW2ksMV08LXdoaWNoLm1pbihsaWJzdGFyZ2V0cy5kZltpLGMoNjoxMyldKQogICAgbGlic3RhcmdldHMuZGZbaSw1XTwtbWluKGxpYnN0YXJnZXRzLmRmW2ksYyg2OjEzKV0pCn0KbGlic3RhcmdldHMuZGYkbmVhcmVzdHBpeGw8LWFzLmZhY3RvcihsaWJzdGFyZ2V0cy5kZiRuZWFyZXN0cGl4bCkKbGV2ZWxzKGxpYnN0YXJnZXRzLmRmJG5lYXJlc3RwaXhsKTwtKGMoIkJlbGxlZ3JhZGUiLCJEb3VyYmVzIiwiUXVhcnRpZXIiLCJBbGZhbGZhIiwiVGhvcm50b25HYXAiLCJCZXJyeSBIb2xsb3ciLCJOb3ZhcnVwdGEiLCJVZ2FuaWsgSXNsYW5kIikpCmBgYAoKQmVsb3cgaXMgYW5vdGhlciBpbml0aWFsaXplciBmb3IgdGhlIFBJWEwgYWJyYXNpb24gZGF0YS4gVGhpcyBzZXRzIHRoZSB2YXJpYWJsZXMgZm9yIGVhY2ggUElYTCBhYnJhc2lvbi4KYGBge3J9CkJlbGxlZ3JhZGU8LWxpYnN0YXJnZXRzLmRmW2xpYnN0YXJnZXRzLmRmJG5lYXJlc3RwaXhsPT0iQmVsbGVncmFkZSIsXSR0YXJnZXQKRG91cmJlczwtbGlic3RhcmdldHMuZGZbbGlic3RhcmdldHMuZGYkbmVhcmVzdHBpeGw9PSJEb3VyYmVzIixdJHRhcmdldApRdWFydGllcjwtbGlic3RhcmdldHMuZGZbbGlic3RhcmdldHMuZGYkbmVhcmVzdHBpeGw9PSJRdWFydGllciIsXSR0YXJnZXQKQWxmYWxmYTwtbGlic3RhcmdldHMuZGZbbGlic3RhcmdldHMuZGYkbmVhcmVzdHBpeGw9PSJBbGZhbGZhIixdJHRhcmdldApUaG9ybnRvbkdhcDwtbGlic3RhcmdldHMuZGZbbGlic3RhcmdldHMuZGYkbmVhcmVzdHBpeGw9PSJUaG9ybnRvbkdhcCIsXSR0YXJnZXQKQmVycnlIb2xsb3c8LWxpYnN0YXJnZXRzLmRmW2xpYnN0YXJnZXRzLmRmJG5lYXJlc3RwaXhsPT0iQmVycnkgSG9sbG93IixdJHRhcmdldApOb3ZhcnVwdGE8LWxpYnN0YXJnZXRzLmRmW2xpYnN0YXJnZXRzLmRmJG5lYXJlc3RwaXhsPT0iTm92YXJ1cHRhIixdJHRhcmdldApVZ2FuaWtJc2xhbmQ8LWxpYnN0YXJnZXRzLmRmW2xpYnN0YXJnZXRzLmRmJG5lYXJlc3RwaXhsPT0iVWdhbmlrIElzbGFuZCIsXSR0YXJnZXQKYGBgCgpOZXh0LCB3ZSBmaWx0ZXIgb3V0IHRoZSBMSUJTIHRhcmdldHMgdGhhdCBhcmUgbm90IHdpdGhpbiB0aGUgc3BlY2lmaWVkIGRpc3RhbmNlIHZhcmlhYmxlLiBUaGVuLCB3ZSBtZXJnZSB0aGUgTElCUyBkYXRhIHdpdGggdGhlIHJlc3BlY3RpdmUgUElYTCBhYnJhc2lvbiBieSBtdXRhdGluZyBhbmQgYWRkaW5nIGFuIGFicmFzaW9uIGNvbHVtbiB0aGF0IGhhcyB0aGUgYWJyYXNpb24gbmFtZSBjbG9zZXN0IHRvIGVhY2ggTElCUyB0YXJnZXQuIFdlIGFsc28gYWRkIGEgY29sdW1uLCBMSUJTIG9yIFBJWEwsIHdoaWNoIGRlbm90ZXMgaWYgdGhlIHJvdyBvZiBkYXRhIGlzIGZyb20gdGhlIFBJWEwgYW5kIExJQlMgZGF0YSBzZXRzLgpgYGB7cn0KaW5jbHVkZWQubGliczwtKGxpYnN0YXJnZXRzLmRmJT4lCiAgZmlsdGVyKERpc3RhbmNlPG1ldGVycykpJHRhcmdldApsaWJzLm1hdHJpeCA8LWxpYnMuZGYgJT4lCiAgZmlsdGVyKHRhcmdldCAlaW4lIGluY2x1ZGVkLmxpYnMpCmxpYnMubWF0cml4IDwtIGxpYnMubWF0cml4WyxjKDUsNzoxNCldCmxpYnMubWF0cml4PC1saWJzLm1hdHJpeFssYygxOjIsNDo5LDMpXQpsaWJzLm1hdHJpeDwtY2JpbmQoIkFicmFzaW9uIj0wLGxpYnMubWF0cml4KQpsaWJzLm1hdHJpeDwtbGlicy5tYXRyaXglPiUKICBtdXRhdGUoQWJyYXNpb24gPSBpZmVsc2UodGFyZ2V0JWluJUFsZmFsZmEsIkFsZmFsZmEiLCAKICAgICAgICAgICAgICAgICAgICBpZmVsc2UodGFyZ2V0ICVpbiUgQmVsbGVncmFkZSwgIkJlbGVncmFkZSIsCiAgICAgICAgICAgICAgICAgICAgaWZlbHNlKHRhcmdldCAlaW4lIEJlcnJ5SG9sbG93LCAiQmVycnkgSG9sbG93IiwKICAgICAgICAgICAgICAgICAgICBpZmVsc2UodGFyZ2V0ICVpbiUgRG91cmJlcywgIkRvdXJiZXMiLAogICAgICAgICAgICAgICAgICAgIGlmZWxzZSh0YXJnZXQgJWluJSBOb3ZhcnVwdGEsICJOb3ZhcnVwdGEiLAogICAgICAgICAgICAgICAgICAgIGlmZWxzZSh0YXJnZXQgJWluJSBRdWFydGllciwgIlF1YXJ0aWVyIiwKICAgICAgICAgICAgICAgICAgICBpZmVsc2UodGFyZ2V0ICVpbiUgVGhvcm50b25HYXAsICJUaG9ybnRvbkdhcCIsCiAgICAgICAgICAgICAgICAgICAgaWZlbHNlKHRhcmdldCAlaW4lIFVnYW5pa0lzbGFuZCwgIlVnYW5payBJc2xhbmQiLEFicmFzaW9uKSkpKSkpKSkpCmxpYnMubWF0cml4PC1jYmluZChsaWJzb3JwaXhsPTEsbGlicy5tYXRyaXgpCmBgYAoKTmV4dCwgd2Ugd2lsbCByZWFkIGluIHRoZSBQSVhMIGRhdGEuIFdlIHdpbGwgcmVtb3ZlIHRoZSBhdG1vc3BoZXJpYyBzYW1wbGUgKGZpcnN0IHNhbXBsZSkgYW5kIG9ubHkgY2hvb3NlIG9uZSBvZiBlYWNoIFBJWEwgc2FtcGxlIGluIGFzIGVhY2ggYWJyYXNpb24gaGFzIHR3byBzYW1wbGVzIChvbmx5IG9uZSB3aWxsIGJlIG5lY2Vzc2FyeSBmb3IgdGhlIHBsb3QpLgoKYGBge3IsIGRhdGEwM30KI3JlYWQgaW4gcGl4bCBkYXRhIHdpdGggbGF0L2xvbmcKcGl4bC5kZjwtcmVhZFJEUygiL2FjYWRlbWljcy9NQVRQLTQ5MTAtRjI0L0RBUi1NYXJzLUYyNC9TdHVkZW50RGF0YS9waXhsX3NvbF9jb29yZGluYXRlcy5SZHMiKQpwaXhsLmRmPC1waXhsLmRmICU+JQogIHNlbGVjdChjKDU6OCwxMjoxNCwxNywxOSwxOCwyMikpCiNyZW9yZGVyIHBpeGwgY29sdW1ucyBzbyB0aGF0IGl0IG1hdGNoZXMgbGlicyBkYXRhIG9yZ2FuaXphdGlvbgpwaXhsLmRmPC1waXhsLmRmWyxjKDExLDEwLDQsMyw4LDIsNiwxLDUsNyldCiNyZW1vdmUgYXRtb3NwaGVyaWMgc2FtcGxlCnBpeGwuZGY8LXBpeGwuZGZbMjoxNixdCnBpeGwuZGY8LWNiaW5kKGxpYnNvcnBpeGw9MCxwaXhsLmRmKQpgYGAKCkZpbmFsbHksIHdlIG1lcmdlIHRoZSBMSUJTIGFuZCBQSVhMIGRhdGEgc2V0cyB3ZSBoYXZlIG1vZGlmaWVkIHRodXMgZmFyIGZvciBhIGNvbWJpbmVkIExJQlMgYW5kIFBJWEwgZGF0YSBmcmFtZSBzdWl0YWJsZSBmb3IgYSBzb2lsIGNvbXBvc2l0aW9uIGxpbmUgcGxvdC4KYGBge3J9CmNvbG5hbWVzKHBpeGwuZGYpPC1jb2xuYW1lcyhsaWJzLm1hdHJpeCkKcGl4bGxpYnMuZGY8LXJiaW5kKHBpeGwuZGYsbGlicy5tYXRyaXgpCmBgYAoKIyMgNC4yIENvbnRyaWJ1dGlvbgoKU29tZSBvZiB0aGUgZGF0YSBtYW5pcHVsYXRpbmcgd29yayB3YXMgTWFyZ28ncywgc3VjaCBhcyB0aGUgZGlzdGFuY2UgZnVuY3Rpb24uIEluIHRlcm1zIG9mIHBpdm90aW5nIHRoZSBkYXRhIGZyYW1lIGFuZCB0aGUgb3RoZXIgc3RlcHMgb2YgdGhlIHByZXByb2Nlc3NpbmcgaXMgbXkgb3duIHdvcmsuIFRoZSBtYW5pcHVsYXRpbmcgYmVsb3cgdG8gcGxvdCB0aGUgbGluZSBzb2lsIGNvbXBvc2l0aW9uIHBsb3RzIGlzIG15IG93bi4KCiMjIDQuMyBNZXRob2RzIERlc2NyaXB0aW9uIAoKV2hlbiBkZWNpZGluZyBob3cgdG8gYXBwcm9hY2ggdGhlIGNvbmNlcHQgb2YgYnVpbGRpbmcgc29pbCBjb21wb3NpdGlvbiBwbG90cyBvZiBlYWNoIFBJWEwgYWJyYXNpb24gYW5kIHRoZSBjb3JyZXNwb25kaW5nIExJQlMgdGFyZ2V0cyB3aXRoaW4gYSBjZXJ0YWluIGRpc3RhbmNlIG1heGltdW0sIEkgZGVjaWRlZCB0aGUgYmVzdCB3YXkgd2FzIHRvIHN0YXJ0IHdpdGggdGhlIG9yaWdpbmFsIGRhdGEgc2V0cyBhbmQgbW9kaWZ5IHRoZW0gYXMgbmVlZGVkLiBGb3IgdGhlIGFjdHVhbCBwbG90LCB0aGUgYmVzdCB3YXkgdG8gZm9ybWF0IHRoZSBkYXRhIGNvcnJlY3RseSBpcyB0byBwaXZvdCBpdCwgYXMgSSBuZWVkIHRoZSB4IGF4aXMgdG8gYmUgdGhlIGNvbHVtbiBuYW1lcyBpbiB0aGUgY3VycmVudCBkYXRhIGZyYW1lIHdlIGhhdmUgKFNpTzIgYW5kIG90aGVyIGNvbXBvc2l0aW9ucykgYW5kIHRoZSB5IGF4aXMgdG8gYmUgdGhlIHdlaWdodGVkIGNvbXBvc2l0aW9uIHZhbHVlcy4gV2UgYWxzbyBuZWVkIGFuIGluZGljYXRvciBvZiBpZiB0aGUgZGF0YSBpcyBmcm9tIFBJWEwgb3IgTElCUywgd2hpY2ggYWxzbyBpcyBoZWxwZnVsIGZvciBidWlsZGluZyB0aGUgbGluZSBwbG90cy4gCgpVc2VycyB3aWxsIGhhdmUgdG8gc2V0IHRoZSBkaXN0YW5jZSB2YXJpYWJsZSBpbiBvcmRlciB0byBjaG9vc2UgdGhlIG1heCBkaXN0YW5jZSBiZXR3ZWVuIFBJWEwgYWJyYXNpb25zIGFuZCBMSUJTIHRhcmdldHMuIFRoaXMgY2FuIHZhc3RseSBjaGFuZ2UgdGhlIG51bWJlciBvZiBsaW5lcyBvbiB0aGUgcGxvdHMgd2hpY2ggY2FuIGhlbHAgcHJldmVudCBvdmVyY3Jvd2RlZCBwbG90cy4gVXNlcnMgYWxzbyBjYW4gc2V0IGEgdmFyaWFibGUgdG8gY2hvb3NlIGEgc3BlY2lmaWMgUElYTCBhYnJhc2lvbiBhbmQgY29ycmVzcG9uZGluZyBMSUJTIHRhcmdldHMsIHdoaWNoIGlzIGVhc2llciB0byBpbnRlcnByZXQgYXMgcGxvdHRpbmcgYWxsIG9mIHRoZSBMSUJTIGFuZCBQSVhMIGNvbXBvc2l0aW9uIGluZm9ybWF0aW9uIG9uIGxpbmUgcGxvdHMgbGVhZHMgdG8gdmVyeSBjb25kZW5zZWQgZ3JhcGhzIHRoYXQgYXJlIGhhcmQgdG8gcmVhZC4KCiMjIDQuNCBSZXN1bHQgYW5kIERpc2N1c3Npb24gCgpGaXJzdCwgd2Ugd2lsbCB0dXJuIHRoZSBlYXJ0aCBxdWFydGlsZSBpbmZvcm1hdGlvbiBpbnRvIGEgbG9uZyBkYXRhIGZyYW1lIChtZWFuaW5nIHBpdm90aW5nIHRoZSBjb2x1bW5zIGludG8gdGhlIHZhbHVlcykuIApgYGB7cn0KIyBFYXJ0aCBxdWFydGlsZXMKZWFydGhxdWFydGlsZXNfbG9uZyA8LSBlYXJ0aHF1YXJ0aWxlcy5kZiAlPiUKICBwaXZvdF9sb25nZXIoY29scyA9IHN0YXJ0c193aXRoKCJTaU8yIik6bGFzdF9jb2woKSwgbmFtZXNfdG8gPSAiQ29tcG91bmQiLCB2YWx1ZXNfdG8gPSAiUGVyY2VudGFnZSIpCgplYXJ0aHF1YXJ0aWxlc19sb25nIDwtIGVhcnRocXVhcnRpbGVzX2xvbmcgJT4lIHJlbmFtZShRdWFydGlsZXMgPSBgVHJhaW5pbmcgc2V0IFF1YXJ0aWxlc2ApCmBgYAoKVGhlbiwgdGhlIGRhdGEgd2lsbCBiZSBmaWx0ZXJlZCB0byBvbmx5IGluY2x1ZGUgdGhlIGRhdGEgZnJvbSBhIHNwZWNpZmljIFBJWEwgYWJyYXNpb24gY2hvc2VuIGJ5IHRoZSB1c2VyLiBUaGUgZGF0YSBpcyBwaXZvdGVkIGludG8gYSBsb25nIGZvcm1hdCwgYW5kIHRoZSBjb2x1bW5zIGFyZSByZW9yZGVyZWQgdG8gbWltaWMgc2ltaWxhciBwbG90cyBmcm9tIE5BU0EgcGFwZXJzLgpgYGB7cn0KIyBGaWx0ZXIgZm9yIHRoZSBzcGVjaWZpYyBhYnJhc2lvbiBzYW1wbGUsIGUuZy4sICJBbGZhbGZhIgpwaXhsbGlic19maWx0ZXJlZCA8LSBwaXhsbGlicy5kZiAlPiUKICBmaWx0ZXIoQWJyYXNpb24gPT0gYWJyYXNpb25fbmFtZSkKCiMgUGl2b3QgdGhlIGRhdGEgdG8gbG9uZ2VyIGZvcm1hdCBmb3IgZ2dwbG90CnBpeGxsaWJzX2xvbmcgPC0gcGl4bGxpYnNfZmlsdGVyZWQgJT4lCiAgcGl2b3RfbG9uZ2VyKGNvbHMgPSBzdGFydHNfd2l0aCgiU2lPMiIpOmxhc3RfY29sKCksIG5hbWVzX3RvID0gIkNvbXBvdW5kIiwgdmFsdWVzX3RvID0gIlBlcmNlbnRhZ2UiKQoKZGVzaXJlZF9vcmRlciA8LSBjKCJTaU8yIiwgIkFsMk8zIiwgIkZlT1QiLCAiTWdPIiwgIkNhTyIsICJOYTJPIiwgIksyTyIsICJUaU8yIikgICMgU3BlY2lmeSB5b3VyIGN1c3RvbSBvcmRlciBoZXJlCnBpeGxsaWJzX2xvbmckQ29tcG91bmQgPC0gZmFjdG9yKHBpeGxsaWJzX2xvbmckQ29tcG91bmQsIGxldmVscyA9IGRlc2lyZWRfb3JkZXIpCmBgYAoKRm9yIHRoZSBwbG90LCB3ZSB1c2UgZ2dwbG90IHRvIHBsb3QgdGhlIHBpeGxsaWJzX2xvbmcgZGF0YSBmcmFtZSB3ZSBjcmVhdGVkLiBUaGUgcGxvdCBpcyBjb2xvcmVkIGJ5IGlmIHRoZSBsaW5lIGlzIGEgUElYTCBhYnJhc2lvbidzIGNvbXBvc2l0aW9uIG9yIGEgTElCUyB0YXJnZXQncyBjb21wb3NpdGlvbi4gV2UgYWxzbyBhZGQgYSBsYXllciB3aXRoIHRoZSBlYXJ0aCBxdWFydGlsZSBpbmZvcm1hdGlvbiwgd2hpY2ggaXMgdGhlIGRvdHRlZCBsaW5lcy4KYGBge3J9CiMgTWFwIHRoZSBQSVhML0xJQlMgY29sdW1uIHRvIGNvbG9yIGFuZCB1c2UgdGFyZ2V0X25hbWUgdG8gZGlmZmVyZW50aWF0ZSBsaW5lcwpnZ3Bsb3QocGl4bGxpYnNfbG9uZywgYWVzKHggPSBDb21wb3VuZCwgeSA9IFBlcmNlbnRhZ2UsIGNvbG9yID0gYXMuZmFjdG9yKGxpYnNvcnBpeGwpLCBncm91cCA9IHRhcmdldCkpICsKICBnZW9tX2xpbmUoKSArCiAgZ2VvbV9wb2ludCgpICsKICBzY2FsZV95X2NvbnRpbnVvdXModHJhbnM9J2xvZzEwJykgKwogICMgQWRkIEVhcnRoIHF1YXJ0aWxlIGxpbmVzIHVzaW5nIGVhcnRocXVhcnRpbGVzX2xvbmcKICBnZW9tX2xpbmUoZGF0YSA9IGVhcnRocXVhcnRpbGVzX2xvbmcsIGFlcyh4ID0gQ29tcG91bmQsIHkgPSBQZXJjZW50YWdlLCBsaW5ldHlwZSA9IFF1YXJ0aWxlcywgZ3JvdXAgPSBRdWFydGlsZXMpLCAKICAgICAgICAgICAgY29sb3IgPSAiYmxhY2siLCBsaW5ldHlwZSA9ICJkb3R0ZWQiKSArCiAgbGFicyh0aXRsZSA9IHBhc3RlKCJTb2lsIENvbXBvc2l0aW9uIGZvciBQSVhMIGFicmFzaW9uIixhYnJhc2lvbl9uYW1lLCJhbmQgTElCUyB3aXRoaW4iLCBtZXRlcnMsICJtZXRlcnMiLCBzZXAgPSAiICIpLAogICAgICAgeCA9ICJDaGVtaWNhbCBDb21wb3VuZCIsCiAgICAgICB5ID0gIldlaWdodCBQZXJjZW50YWdlIiwKICAgICAgIGNvbG9yID0gIk1lYXN1cmVtZW50IFR5cGUiLAogICAgICAgbGluZXR5cGUgPSAiRWFydGggUXVhcnRpbGVzIikgKwogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCIwIiA9ICJibHVlIiwgIjEiID0gInJlZCIpLCBsYWJlbHMgPSBjKCJQSVhMIiwgIkxJQlMiKSkgKwogIHRoZW1lX21pbmltYWwoKQpgYGAKSSBzdGlsbCBwbGFuIHRvIHVwZGF0ZSBhbmQgdHJ5IHVzaW5nIHRoZSBnZ3Bsb3RsYXkgZmVhdHVyZSB0byBpbmNvcnBvcmF0ZSBhbGwgdGhlIGFicmFzaW9ucyBhbmQgZGF0YSBvbnRvIG9uZSBncmlkIG9mIGxpbmUgcGxvdHMuIEkgYWxzbyBhbSBnb2luZyB0byBhZGQgcGxvdHMgd2hlcmUgdGhlIG1lYW4gaXMgdGFrZW4gb2YgYWxsIHRoZSBMSUJTIHRhcmdldHMgdGhhdCBjb3JyZXNwb25kIHRvIGEgUElYTCBhYnJhc2lvbiBzbyB0aGUgcGxvdCB3aWxsIG9ubHkgaGF2ZSBvbmUgTElCUyBsaW5lIGFuZCBvbmUgUElYTCBsaW5lIChhbG9uZyB3aXRoIHRoZSByZWZlcmVuY2VzKSwgdGhpcyBpcyBhbGwganVzdCBmb3IgdGhlIGRyYWZ0LiBJIGFsc28gbmVlZCB0byBvbmx5IGFkZCBjZXJ0YWluIHF1YXJ0aWxlIGluZm9ybWF0aW9uIGFuZCBsYWJlbCB0aGVtLCB0aGlzIGlzIGp1c3QgYSBwbGFjZWhvbGRlciBvZiB0aGUgcHJldmlvdXMgcGxvdC4gQWxzbyBtYXliZSB3aWxsIGFkZCBpbiBTQ0NUIHZhbHVlcyBhcyByZWZlcmVuY2VzLCBub3Qgc3VyZSBpZiB0aGV5IGFyZSBzdXBlciByZWxldmFudCBvciBob3cgdG8gc29ydCB0aGVtLgoKIyMgNC41IENvbmNsdXNpb25zIGFuZCBGdXR1cmUgV29yawpUaGlzIGZpbmRpbmcgY2FuIGJlIHVzZWQgYnkgZ2VvbG9naXN0cyB0byBhbmFseXplIHdoYXQgZGlmZmVyZW50IHNvaWwgY29tcG9zaXRpb25zIGFyb3VuZCBkaWZmZXJlbnQgUElYTCBhYnJhc2lvbnMgY2FuIG1lYW4gZm9yIGxpZmUgb24gTWFycy4gRm9yIGV4YW1wbGUsIG94aWRlIHByZXNlbmNlIGRvZXNuJ3QgbmVjZXNzYXJpbHkgaW5kaWNhdGUgbGlmZSwgYnV0IGl0IGNvdWxkIGluZGljYXRlIGJpb2xvZ2ljYWwgb3IgY2hlbWljYWwgbGlmZSBwcm9jZXNzZXMuIEZvciBleGFtcGxlLCBDYU8gY2FuIGluZGljYXRlIHRoZSBwcmVzZW5jZSBvZiBvbGQgYmlvbG9naWNhbCBtYXRlcmlhbCBsaWtlIHNoZWxscyBvciBmb3NzaWxzLgotQWRkIG1vcmUgYWJvdXQgZnV0dXJlIHdvcmssIG5vdCBzdXJlIHdoYXQgZWxzZSB0byBpbmNsdWRlCgojIDUuMCBGaW5kaW5nIDM6IEFuYWx5emluZyBDYXRpb24gQ29tYmluYXRpb25zIHVzaW5nIExJQlMgYW5kIFBJWEwgbWF0Y2hlZCBkYXRhClVzaW5nIHRoZSBMSUJTIGFuZCBQSVhMIGNvbWJpbmVkIGRhdGEgc2V0LCB3ZSBjcmVhdGVkIGEgdGVybmFyeSBwbG90IHRvIHNob3cgdGhlIGRpc3RyaWJ1dGlvbiBvZiBMSUJTIHNhbXBsZXMgc29ydGVkIGJ5IHdoYXQgUElYTCBhYnJhc2lvbiB0aGV5IGFyZSBjbG9zZXN0IHRvIChiYXNlZCBvbiBhIGNob3NlbiBkaXN0YW5jZSB2YXJpYWJsZSkuIE11Y2ggb2YgdGhlIGRhdGEgcHJlcHJvY2Vzc2luZyBpcyBzaW1pbGFyIHRvIEZpbmRpbmcgMSB3aGljaCB3ZSB3aWxsIHJlcGVhdCBoZXJlLiBIb3dldmVyLCB0aGUgZ29hbCBoZXJlIGlzIHRvIGFuYWx5emUgaG93IGRpZmZlcmVudCBncm91cHMgb2YgTElCUyBzYW1wbGVzIChjb2xvcmVkIGJ5IG1hdGNoaW5nIFBJWEwgYWJyYXNpb24pIGRpZmZlciBieSBjYXRpb24gY29tcG9zaXRpb24uCgojIyA1LjEgRGF0YSwgQ29kZSwgYW5kIFJlc291cmNlcwpIZXJlIGlzIGEgbGlzdCBkYXRhIHNldHMsIGNvZGVzLCB0aGF0IGFyZSB1c2VkIGluIHlvdXIgd29yay4gQWxvbmcgd2l0aCBicmllZiBkZXNjcmlwdGlvbiBhbmQgVVJMIHdoZXJlIHRoZXkgYXJlIGxvY2F0ZWQuCgoxLiBwZXRlcmMtZmluYWxQcm9qZWN0RjI0LlJtZCAod2l0aCBrbml0IHBkZiBhbmQgaHRtbCkgaXMgdGhpcyBub3RlYm9vay4KW2h0dHBzOi8vZ2l0aHViLnJwaS5lZHUvRGF0YUlOQ0lURS9EQVItTWFycy1GMjQvYmxvYi9tYWluL1N0dWRlbnROb3RlYm9va3MvQXNzaWdubWVudDA3X0RyYWZ0RmluYWxQcm9qZWN0Tm90ZWJvb2svcGV0ZXJjX2ZpbmFsUHJvamVjdEYyNF9yb3VnaGRyYWZ0LlJtZF0oaHR0cHM6Ly9naXRodWIucnBpLmVkdS9EYXRhSU5DSVRFL0RBUi1NYXJzLUYyNC9ibG9iL21haW4vU3R1ZGVudE5vdGVib29rcy9Bc3NpZ25tZW50MDdfRHJhZnRGaW5hbFByb2plY3ROb3RlYm9vay9wZXRlcmNfZmluYWxQcm9qZWN0RjI0X3JvdWdoZHJhZnQuUm1kKQoKMi4gc3VwZXJjYW1fbGlic19tb2NfbG9jLlJkcyB3aGljaCBpcyB0aGUgb3JpZ2luYWwgTElCUyBkYXRhIGdpdmVuIHRvIG91ciByZXNlYXJjaCBncm91cC4KW2h0dHBzOi8vZ2l0aHViLnJwaS5lZHUvRGF0YUlOQ0lURS9EQVItTWFycy1GMjQvYmxvYi9tYWluL0RhdGEvc3VwZXJjYW1fbGlic19tb2NfbG9jLlJkc10oaHR0cHM6Ly9naXRodWIucnBpLmVkdS9EYXRhSU5DSVRFL0RBUi1NYXJzLUYyNC9ibG9iL21haW4vRGF0YS9zdXBlcmNhbV9saWJzX21vY19sb2MuUmRzKQoKCkZpcnN0LCB3ZSBzZXQgYSBkaXN0YW5jZSB2YXJpYWJsZSB3aGljaCBjYW4gYmUgdXNlZCBhcyBhIHNsaWRlciBiYXIgaW4gdGhlIGFwcC4gQ2hhbmdpbmcgdGhpcyB2YXJpYWJsZSBzZXRzIHRoZSBtYXhpbXVtIGRpc3RhbmNlIGJldHdlZW4gYSBQSVhMIHRhcmdldCBhbmQgTElCUyBzYW1wbGUgZm9yIHRoZW0gdG8gYmUgY2xhc3NpZmllZCB0b2dldGhlci4KYGBge3J9CiNzZXQgZGlzdGFuY2UgdmFyaWFibGUgd2hpY2ggY2FuIGJlIHVzZWQgYXMgYSB0b2dnbGUgdG9vbApkaXN0YW5jZT01MApgYGAKClRvIHByZXBhcmUgdGhlIGRhdGEsIEkgc3RhcnQgYnkgbG9hZGluZyBpbiB0aGUgTElCUyBkYXRhLiBUaGVuLCB3ZSBkcm9wIHRoZSBzdGFuZGFyZCBkZXZpYXRpb24gY29sdW1ucyBhbmQgc3VtIG9mIHBlcmNlbnRhZ2UgY29sdW1ucyBsZWF2aW5nIHVzIHdpdGgganVzdCB0aGUgd2VpZ2h0ZWQgY29tcG9zaXRpb24gaW4gdGVybXMgb2YgbnVtZXJpY2FsIGRhdGEuIFdlIGFsc28gcmVtb3ZlIHRoZSBzY2N0IHZhbHVlcywgYXMgdGhvc2UgdmFsdWVzIGFyZSB0aGUgb25lcyB0aGF0IGFyZSBlYXJ0aCByZWZlcmVuY2Ugc2FtcGxlcyB0aGF0IFBlcnNlcnZlcmFuY2UgY2FycmllcyB3aXRoIGl0LiBUaGVyZWZvcmUsIHRoZXkgd2lsbCBub3QgYmUgdmVyeSByZWxldmFudCB3aGVuIHBsb3R0aW5nIHRoZSBMSUJTIGRhdGEgYXMgd2UgYXJlIGZvY3VzZWQgb24gdGhlIGNhdGlvbiBjb21iaW5hdGlvbnMgYW5kIHRoZXJlZm9yZSBvbmx5IG5lZWQgdGhlIHdlaWdodGVkIGNvbXBvc2l0aW9ucy4KYGBge3J9CiNMb2FkIGluIExJQlMgZGF0YQpsaWJzLmRmIDwtIHJlYWRSRFMoIi9hY2FkZW1pY3MvTUFUUC00OTEwLUYyNC9EQVItTWFycy1GMjQvRGF0YS9zdXBlcmNhbV9saWJzX21vY19sb2MuUmRzIikKI0Ryb3AgdGhlIHN0YW5kYXJkIGRldmlhdGlvbiBmZWF0dXJlcywgdGhlIHN1bSBvZiB0aGUgcGVyY2VudGFnZXMsIAojdGhlIGRpc3RhbmNlLCBhbmQgdGhlIHRvdGFsIGZyZXF1ZW5jaWVzCmxpYnMuZGYgPC0gbGlicy5kZiAlPiUgCiAgc2VsZWN0KCEoYyhkaXN0YW5jZV9tbSxUb3QuRW0uLFNpTzJfc3RkZXYsVGlPMl9zdGRldixBbDJPM19zdGRldixGZU9UX3N0ZGV2LAogICAgICAgICAgICAgTWdPX3N0ZGV2LE5hMk9fc3RkZXYsQ2FPX3N0ZGV2LEsyT19zdGRldixUb3RhbCkpKQojIENvbnZlcnQgdGhlIHBvaW50cyB0byBudW1lcmljCmxpYnMuZGYkcG9pbnQgPC0gYXMubnVtZXJpYyhsaWJzLmRmJHBvaW50KQpsaWJzLmRmWyw2OjEzXSA8LSBzYXBwbHkobGlicy5kZlssNjoxM10sYXMubnVtZXJpYykKI3JlbW92ZSB0aGUgc2NjdC9yZWZlcmVuY2Ugc2FtcGxlcwpsaWJzLmRmPC1saWJzLmRmJT4lCiAgZmlsdGVyKCEoZ3JlcGwoInNjY3QiLCB0YXJnZXQpKSkKI2FkZCBhIGNvbHVtbiB0byBpbmRpY2F0ZSB0aGUgbmVhcmVzdCBwaXhsCmxpYnMuZGY8LWNiaW5kKG5lYXJlc3RwaXhsPTAsbGlicy5kZikKI21ha2UgYSBkYXRhZnJhbWUgb2YganVzdCB0aGUgTElCUyBMYXQvTG9uZyBhbmQgdGFyZ2V0IG5hbWUgYW5kIHJlbW92ZSBkdXBsaWNhdGVzCmxpYnN0YXJnZXRzLmRmPC1saWJzLmRmWyxjKDEsMyw0LDUpXQpsaWJzdGFyZ2V0cy5kZjwtZGlzdGluY3QobGlic3RhcmdldHMuZGYpCmBgYAoKTG9hZCBpbiBQSVhMIGRhdGEKYGBge3J9CiNyZWFkIGluIHBpeGwgZGF0YSB3aXRoIGxhdC9sb25nCnBpeGwuZGY8LXJlYWRSRFMoIi9hY2FkZW1pY3MvTUFUUC00OTEwLUYyNC9EQVItTWFycy1GMjQvU3R1ZGVudERhdGEvcGl4bF9zb2xfY29vcmRpbmF0ZXMuUmRzIikKI2luY2x1ZGUgb25seSBwaXhsIG1ldGFkYXRhCnBpeGwuZGY8LXBpeGwuZGYgJT4lCiAgc2VsZWN0KGMoMSwyLDE5LDIwLDIyKSkKI2NvbnZlcnQgTGF0L0xvbmcgdG8gbnVtZXJpYwpwaXhsLmRmJExhdCA8LSBhcy5udW1lcmljKHBpeGwuZGYkTGF0KQpwaXhsLmRmJExvbmcgPC0gYXMubnVtZXJpYyhwaXhsLmRmJExvbmcpCiNyZW1vdmUgcm93cyBzbyB3ZSBvbmx5IGhhdmUgb25lIHNhbXBsZSBwZXIgYWJyYXNpb24gYW5kIHJlbW92ZSBhdG1vc3BoZXJpYyBzYW1wbGUKcGl4bC5kZjwtcGl4bC5kZltjKDIsNCw2LDgsMTAsMTIsMTQsMTYpLF0KYGBgCgpOZXh0LCB3ZSB3aWxsIGluaXRpYWxpemUgYSBkaXN0YW5jZSB2YXJpYWJsZSAodG8gaW5kaWNhdGUgZGlzdGFuY2UgYmV0d2VlbiBQSVhMIGFicmFzaW9uIGFuZCBMSUJTIHRhcmdldCkgYW5kIGFsc28gaW5pdGlhbGl6ZSBlYWNoIFBJWEwgYWJyYXNpb24sIHdoaWNoIHdpbGwgYmUgdXNlZCB0byBtYXJrIHdoaWNoIFBJWEwgYWJyYXNpb24gdGhlIExJQlMgc2FtcGxlIGlzIGNsb3Nlc3QgdG8gYnkgdXNpbmcgYSBmYWN0b3Igb2YgMCBvciAxLiAKYGBge3J9CiNMSUJTIHRhcmdldCBkYXRhIGZyYW1lIHdpdGggZGlzdGFuY2UgdmFyaWFibGUgYXMgd2VsbApsaWJzdGFyZ2V0cy5kZjwtY2JpbmQobGlic3RhcmdldHMuZGYsIkRpc3RhbmNlIj0wLCJCZWxsZWdyYWRlIj0wLCJEb3VyYmVzIj0wLCJRdWFydGllciI9MCwiQWxmYWxmYSI9MCwiVGhvcm50b25HYXAiPTAsIkJlcnJ5SG9sbG93Ij0wLCJOb3ZhcnVwdGEiPTAsIlVnYW5pa0lzbGFuZCI9MCkKYGBgCgpUaGUgZGlzdGFuY2UgZnVuY3Rpb24gYmVsb3cgd2lsbCBjYWxjdWxhdGUgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBMSUJTIHRhcmdldCBhbmQgYWxsIHRoZSBQSVhMIGFicmFzaW9ucywgYW5kIHBpY2sgdGhlIHNtYWxsZXN0IGRpc3RhbmNlIHRvIHBpY2sgdGhlIGNsb3Nlc3QgUElYTCBhYnJhc2lvbiB0byB0aGF0IExJQlMgdGFyZ2V0LgpgYGB7cn0KI0Rpc3RhbmNlIGZ1bmN0aW9uCmZvcihpIGluIDE6bnJvdyhsaWJzdGFyZ2V0cy5kZikpIHsKICAgIGxpYnN0YXJnZXRzLmRmW2ksYyg2OjEzKV08LWMoZGlzdEhhdmVyc2luZShwaXhsLmRmWzEsYygxLDIpXSxsaWJzdGFyZ2V0cy5kZltpLGMoMiwzKV0scj0zMzkzMTY5KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzdEhhdmVyc2luZShwaXhsLmRmWzIsYygxLDIpXSxsaWJzdGFyZ2V0cy5kZltpLGMoMiwzKV0scj0zMzkzMTY5KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzdEhhdmVyc2luZShwaXhsLmRmWzMsYygxLDIpXSxsaWJzdGFyZ2V0cy5kZltpLGMoMiwzKV0scj0zMzkzMTY5KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzdEhhdmVyc2luZShwaXhsLmRmWzQsYygxLDIpXSxsaWJzdGFyZ2V0cy5kZltpLGMoMiwzKV0scj0zMzkzMTY5KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzdEhhdmVyc2luZShwaXhsLmRmWzUsYygxLDIpXSxsaWJzdGFyZ2V0cy5kZltpLGMoMiwzKV0scj0zMzkzMTY5KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzdEhhdmVyc2luZShwaXhsLmRmWzYsYygxLDIpXSxsaWJzdGFyZ2V0cy5kZltpLGMoMiwzKV0scj0zMzkzMTY5KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzdEhhdmVyc2luZShwaXhsLmRmWzcsYygxLDIpXSxsaWJzdGFyZ2V0cy5kZltpLGMoMiwzKV0scj0zMzkzMTY5KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzdEhhdmVyc2luZShwaXhsLmRmWzgsYygxLDIpXSxsaWJzdGFyZ2V0cy5kZltpLGMoMiwzKV0scj0zMzkzMTY5KSkKICAgIAogICAgbGlic3RhcmdldHMuZGZbaSwxXTwtd2hpY2gubWluKGxpYnN0YXJnZXRzLmRmW2ksYyg2OjEzKV0pCiAgICBsaWJzdGFyZ2V0cy5kZltpLDVdPC1taW4obGlic3RhcmdldHMuZGZbaSxjKDY6MTMpXSkKfQpsaWJzdGFyZ2V0cy5kZiRuZWFyZXN0cGl4bDwtYXMuZmFjdG9yKGxpYnN0YXJnZXRzLmRmJG5lYXJlc3RwaXhsKQpsZXZlbHMobGlic3RhcmdldHMuZGYkbmVhcmVzdHBpeGwpPC0oYygiQmVsbGVncmFkZSIsIkRvdXJiZXMiLCJRdWFydGllciIsIkFsZmFsZmEiLCJUaG9ybnRvbkdhcCIsIkJlcnJ5SG9sbG93IiwiTm92YXJ1cHRhIiwiVWdhbmlrSXNsYW5kIikpCmBgYAoKQmVsb3cgaXMgYW5vdGhlciBpbml0aWFsaXplciBmb3IgdGhlIFBJWEwgYWJyYXNpb24gZGF0YS4gVGhpcyBzZXRzIHRoZSB2YXJpYWJsZXMgZm9yIGVhY2ggUElYTCBhYnJhc2lvbi4KYGBge3J9CiNTZXRzIGVhY2ggbmVhcmVzdCBQSVhMIHZhcmlhYmxlIGZvciBmdXR1cmUgdXNlIGluIGRlY2lkaW5nIHdoaWNoIHRhcmdldCBpcyBjbG9zZXN0IHRvIGEgTElCUyBzYW1wbGUKQmVsbGVncmFkZTwtbGlic3RhcmdldHMuZGZbbGlic3RhcmdldHMuZGYkbmVhcmVzdHBpeGw9PSJCZWxsZWdyYWRlIixdJHRhcmdldApEb3VyYmVzPC1saWJzdGFyZ2V0cy5kZltsaWJzdGFyZ2V0cy5kZiRuZWFyZXN0cGl4bD09IkRvdXJiZXMiLF0kdGFyZ2V0ClF1YXJ0aWVyPC1saWJzdGFyZ2V0cy5kZltsaWJzdGFyZ2V0cy5kZiRuZWFyZXN0cGl4bD09IlF1YXJ0aWVyIixdJHRhcmdldApBbGZhbGZhPC1saWJzdGFyZ2V0cy5kZltsaWJzdGFyZ2V0cy5kZiRuZWFyZXN0cGl4bD09IkFsZmFsZmEiLF0kdGFyZ2V0ClRob3JudG9uR2FwPC1saWJzdGFyZ2V0cy5kZltsaWJzdGFyZ2V0cy5kZiRuZWFyZXN0cGl4bD09IlRob3JudG9uR2FwIixdJHRhcmdldApCZXJyeUhvbGxvdzwtbGlic3RhcmdldHMuZGZbbGlic3RhcmdldHMuZGYkbmVhcmVzdHBpeGw9PSJCZXJyeUhvbGxvdyIsXSR0YXJnZXQKTm92YXJ1cHRhPC1saWJzdGFyZ2V0cy5kZltsaWJzdGFyZ2V0cy5kZiRuZWFyZXN0cGl4bD09Ik5vdmFydXB0YSIsXSR0YXJnZXQKVWdhbmlrSXNsYW5kPC1saWJzdGFyZ2V0cy5kZltsaWJzdGFyZ2V0cy5kZiRuZWFyZXN0cGl4bD09IlVnYW5pa0lzbGFuZCIsXSR0YXJnZXQKYGBgCgpOZXh0LCB3ZSBmaWx0ZXIgb3V0IHRoZSBMSUJTIHRhcmdldHMgdGhhdCBhcmUgbm90IHdpdGhpbiB0aGUgc3BlY2lmaWVkIGRpc3RhbmNlIHZhcmlhYmxlLiBUaGVuLCB3ZSBtZXJnZSB0aGUgTElCUyBkYXRhIHdpdGggdGhlIHJlc3BlY3RpdmUgUElYTCBhYnJhc2lvbiBieSBtdXRhdGluZyBhbmQgYWRkaW5nIGFuIGFicmFzaW9uIGNvbHVtbiB0aGF0IGhhcyB0aGUgYWJyYXNpb24gbmFtZSBjbG9zZXN0IHRvIGVhY2ggTElCUyB0YXJnZXQuIFdlIGFsc28gYWRkIGEgY29sdW1uLCBMSUJTIG9yIFBJWEwsIHdoaWNoIGRlbm90ZXMgaWYgdGhlIHJvdyBvZiBkYXRhIGlzIGZyb20gdGhlIFBJWEwgYW5kIExJQlMgZGF0YSBzZXRzLiBXZSBhbHNvIHNldCB1cCB0aGUgbGlicy50ZXJuIG1hdHJpeCB3aGljaCB3aWxsIApgYGB7cn0KaW5jbHVkZWQubGliczwtKGxpYnN0YXJnZXRzLmRmJT4lCiAgZmlsdGVyKERpc3RhbmNlPG1ldGVycykpJHRhcmdldApsaWJzLm1hdHJpeCA8LWxpYnMuZGYgJT4lCiAgZmlsdGVyKHRhcmdldCAlaW4lIGluY2x1ZGVkLmxpYnMpCiNzZXQgTElCUyBtYXRyaXggYW5kIHRlcm5hcnkgcGxvdCBieSBhZGRpbmcgaW4gY2F0aW9uIGNvbXBvbmVudHMgYW5kIG11dGF0aW5nCmxpYnMubWF0cml4IDwtIGxpYnMubWF0cml4WyxjKDUsNzoxNCldCmxpYnMudGVybiA8LSBhcy5kYXRhLmZyYW1lKGxpYnMubWF0cml4KSAlPiUKICBtdXRhdGUoeD0oU2lPMitBbDJPMykvMTAwLHk9KEZlT1QrTWdPKS8xMDAsej0oQ2FPK05hMk8rSzJPKS8xMDApICU+JQogIHNlbGVjdCgtYyhTaU8yLEFsMk8zLEZlT1QsTWdPLENhTyxOYTJPLEsyTyxUaU8yKSkKbGlicy50ZXJuPC1jYmluZCgiQWJyYXNpb24iPTAsbGlicy50ZXJuKQojU2V0IHdoYXQgYWJyYXNpb24gZ29lcyB3aXRoIHRoZSByZXNwZWN0aXZlIExJQlMgc2FtcGxlIGl0IG1hdGNoZXMgd2l0aApsaWJzLnRlcm48LWxpYnMudGVybiU+JQogIG11dGF0ZShBYnJhc2lvbiA9IGlmZWxzZSh0YXJnZXQlaW4lQWxmYWxmYSwiQWxmYWxmYSIsIAogICAgICAgICAgICAgICAgICAgIGlmZWxzZSh0YXJnZXQgJWluJSBCZWxsZWdyYWRlLCAiQmVsZWdyYWRlIiwKICAgICAgICAgICAgICAgICAgICBpZmVsc2UodGFyZ2V0ICVpbiUgQmVycnlIb2xsb3csICJCZXJyeUhvbGxvdyIsCiAgICAgICAgICAgICAgICAgICAgaWZlbHNlKHRhcmdldCAlaW4lIERvdXJiZXMsICJEb3VyYmVzIiwKICAgICAgICAgICAgICAgICAgICBpZmVsc2UodGFyZ2V0ICVpbiUgTm92YXJ1cHRhLCAiTm92YXJ1cHRhIiwKICAgICAgICAgICAgICAgICAgICBpZmVsc2UodGFyZ2V0ICVpbiUgUXVhcnRpZXIsICJRdWFydGllciIsCiAgICAgICAgICAgICAgICAgICAgaWZlbHNlKHRhcmdldCAlaW4lIFRob3JudG9uR2FwLCAiVGhvcm50b25HYXAiLAogICAgICAgICAgICAgICAgICAgIGlmZWxzZSh0YXJnZXQgJWluJSBVZ2FuaWtJc2xhbmQsICJVZ2FuaWtJc2xhbmQiLEFicmFzaW9uKSkpKSkpKSkpCiNzdW1tYXJ5IG9mIExJQlMgZGF0YSBpbmNsdWRpbmcgZGlzdGFuY2UgcGFyYW1ldGVyLCBudW1iZXIgb2YgTElCUyB0YXJnZXRzLCBhbmQgbnVtYmVyIG9mIExJQlMgcG9pbnRzCmthYmxlZGY8LXJiaW5kKCJEaXN0YW5jZSAobSkiPW1ldGVycywiVGFyZ2V0cyI9bGVuZ3RoKGluY2x1ZGVkLmxpYnMpLCJQb2ludHMiPW5yb3cobGlicy50ZXJuKSkKa2FibGUoa2FibGVkZiwgY2FwdGlvbiA9IkxJQlMgIyBvZiBUYXJnZXRzIGFuZCBQb2ludHMgd2l0aGluIFNwZWNpZmllZCBEaXN0YW5jZSIpCmBgYAoKCgojIyA1LjIgQ29udHJpYnV0aW9uCgpUaGlzIHdvcmsgd2FzIGFsc28gYSBjb21iaW5hdGlvbiBvZiBtZSBhbmQgTWFyZ28uIFRoZSBkYXRhIHNldCBjcmVhdGlvbiB3YXMgYm90aCBvZiB1cyBpbiBvdXIgYnJhaW5zdG9ybWluZyBhcyB0aGlzIHV0aWxpemVzIHRoZSBkYXRhIHNldCB3ZSBjcmVhdGVkIG9mIGxhdGl0dWRlIGFuZCBsb25naXR1ZGUgZm9yIFBJWEwuCi0gQWRkIG1vcmUgaGVyZQotIFZlcnkgc2ltaWxhciB0byBvdGhlciB0d28gc2VjdGlvbnMgYWRkIGluIGxhdGVyLCBNYXJnbyBhbmQgSSB3b3JrZWQgb24gbW9zdCBvZiB0aGlzIHRvZ2V0aGVyCgojIyA1LjMgTWV0aG9kcyBEZXNjcmlwdGlvbiAKCi0gU3RhcnRlZCB3aXRoIGZpbHRlcmluZyBvcmlnaW5hbCBkYXRhIHRvIGdldCByaWQgb2YgU0NDVCB2YWx1ZXMKLSB0aGVuIHNldCB1cCB0ZXJuYXJ5IGRhdGEgZnJhbWUgYnkgbXV0YXRpbmcgYnkgY2F0aW9uIGNvbXBvc2l0aW9ucwotIHRoZW4gbXV0YXRlZCB0byBtYWtlIHRoZSBQSVhMIGFicmFzaW9ucyB0aGUga2V5LCBzbyB0aGUgTElCUyB0YXJnZXRzIGFyZSBjb2xvcmVkIGJ5IHRoZSBjbG9zZXN0IFBJWEwgYWJyYXNpb24sIGNyZWF0aW5nIGEgZm9ybSBvZiBjbHVzdGVycy4KCiMjIDUuNCBSZXN1bHQgYW5kIERpc2N1c3Npb24gClVzaW5nIGFsbCBvZiB0aGUgbWFuaXB1bGF0aW9uIGRvbmUgZm9yIHRoZSBjcmVhdGlvbiBvZiB0aGUgdGVybmFyeSBwbG90LCB3ZSB0aGVuIHBsb3QgdXNpbmcgdGhlIGdndGVybiBjb21tYW5kLiBXZSB3aWxsIGNvbG9yIGJ5IGFicmFzaW9uIHRvIHNlZSB0aGUgZGlzdHJpYnV0aW9uIG9mIGNvbXBvc2l0aW9uIGJldHdlZW4gZGlmZmVyZW50IGFicmFzaW9ucy4gVGhpcyBzaG91bGQgaGVscCB1cyBiZSBhYmxlIHRvIGRyYXcgZGlmZmVyZW50IGNvbmNsdXNpb25zIGFib3V0IGhvdyBhYnJhc2lvbnMgcmVsYXRlIG9yIGRvbid0IHJlbGF0ZS4gVGhlIG1heCBkaXN0YW5jZSBiZXR3ZWVuIHRoZSBQSVhMIHRhcmdldCBhbmQgTElCUyBzYW1wbGUgY2FuIGJlIG1vZGlmaWVkIGhvd2V2ZXIgZGVzaXJlZC4KYGBge3J9CmdndGVybihsaWJzLnRlcm4sIGdndGVybjo6YWVzKHg9eCx5PXksej16KSkgKwogIGdlb21fcG9pbnQoZGF0YT1saWJzLnRlcm4sYWVzKGNvbG9yPUFicmFzaW9uLGFscGhhPTAuNSkpICsgCiAgdGhlbWVfcmdidygpICsgCiAgbGFicyh0aXRsZT1wYXN0ZSgiTWFycyBMSUJTIERhdGEgV2l0aGluIixkaXN0YW5jZSwibWV0ZXJzIG9mIFBJWEwiLHNlcD0iICIpLAogICAgICAgeD0iU2krQWwiLAogICAgICAgeT0iRmUrTWciLAogICAgICAgej0iQ2ErTmErSyIpK3RoZW1lKGxlZ2VuZC5wb3NpdGlvbj0icmlnaHQiKSArIAogIGd1aWRlcyhhbHBoYT0ibm9uZSIpCmBgYAoKIyMgNS41IENvbmNsdXNpb25zIGFuZCBGdXR1cmUgV29yawpCYXNlZCBvbiB0aGlzIHRlcm5hcnkgcGxvdCwgd2UgY2FuIHNlZSBBbGZhbGZhIGFuZCBCZWxlZ3JhZGUgYXJlIGhpZ2hlciBpbiBTaStBbCBhbmQgVWdhbmlrIElzbGFuZCBpcyBhbiBvdXRsaWVyLiBBcyB0aGlzIHdhcyB0aGUgbGFzdCBwaWVjZSBvZiB0aGUgUElYTCBkYXRhIGluIHRoZSBkYXRhIHNldCBhbmQgaXQgd2FzIG1pc3NpbmcgYSBwYWlyIHNpbmNlIGV2ZXJ5IG90aGVyIGFicmFzaW9uIHdhcyBtYWRlIHVwIG9mIHR3byBzYW1wbGVzLCBpdCBpcyBpbmNsdWRlZCBpbiBoZXJlIGJ1dCB1bnRpbCB0aGUgZGF0YSBzZXQgaXMgdXBkYXRlZCB0aGVyZSBpcyBub3QgZW5vdWdoIGNvbnRleHQgdG8gZXhwbGFpbiB3aHkgaXQgaXMgc28gdmFzdGx5IGRpZmZlcmVudC4gSSB3b3VsZCBhc3N1bWUgaXQgaXMgZHVlIHRvIGhvdyB0aGUgcm9ib3QgaXMgdHJhdmVsaW5nIGFuZCB0aGUgbG9jYXRpb24gb2YgdGhlIFVnYW5pa0lzbGFuZCBhYnJhc2lvbiBpcyB2ZXJ5IGRpZmZlcmVudCB0aGFuIHRoZSBvdGhlciA3IGFicmFzaW9ucy4KLSBGdXR1cmUgd29yaywgd291bGQgaW5jbHVkZSBtb3JlIGRhdGEgdG8gZ2FpbiBicm9hZGVyIGNvbnRleHQKCiMgQmlibGlvZ3JhcGh5ClByb3ZpZGUgYSBsaXN0aW5nIG9mIHJlZmVyZW5jZXMgYW5kIG90aGVyIHNvdXJjZXMuCgoqIEFuYWx5c3QncyBOb3RlYm9vawoqIE5vdCBzdXJlIHdoYXQgZWxzZSBpcyByZWxldmFudCwgbW9zdCBvZiB3aGF0IEkgdXNlZCB3YXMgc2ltaWxhciB0byBBbmFseXN0J3MgTm90ZWJvb2sKCiMgQXBwZW5kaXgKCipJbmNsdWRlIGhlcmUgd2hhdGV2ZXIgeW91IHRoaW5rIGlzIHJlbGV2YW50IHRvIHN1cHBvcnQgdGhlIG1haW4gY29udGVudCBvZiB5b3VyIG5vdGVib29rLiBGb3IgZXhhbXBsZSwgeW91IG1heSBoYXZlIG9ubHkgaW5jbHVkZSBleGFtcGxlIGZpZ3VyZXMgYWJvdmUgaW4geW91ciBtYWluIHRleHQgYnV0IGluY2x1ZGUgYWRkaXRpb25hbCBvbmVzIGhlcmUuIE9yIHlvdSBtYXkgaGF2ZSBkb25lIGEgbW9yZSBleHRlbnNpdmUgaW52ZXN0aWdhdGlvbiwgYW5kIHdhbnQgdG8gcHV0IG1vcmUgcmVzdWx0cyBoZXJlIHRvIGRvY3VtZW50IHlvdXIgd29yayBpbiB0aGUgc2VtZXN0ZXIuIEJlIHN1cmUgdG8gZGl2aWRlIGFwcGVuZGl4IGludG8gYXBwcm9wcmlhdGUgc2VjdGlvbnMgYW5kIG1ha2UgdGhlIGNvbnRlbnRzIGNsZWFyIHRvIHRoZSByZWFkZXIgdXNpbmcgYXBwcm9hY2hlcyBkaXNjdXNzZWQgYWJvdmUuICogClNob3VsZCBJIGFkZCBtb3JlIGV4YW1wbGVzIGhlcmUgb2Ygc29pbCBjb21wb3NpdGlvbiBwbG90cyBvZiBkaWZmZXJlbnQgYWJyYXNpb25zPyBJIGFsc28gY291bGQgYWRkIGhlYXQgbWFwIGFuYWx5c2lzIHRvIHRoaXMgbm90ZWJvb2sgYXMgYSBmaW5kaW5nIGJ1dCB3YXNuJ3Qgc3VyZSBpZiBpdCB3YXMgcmVhbGx5IHJlbGV2YW50LgoK
diff --git a/StudentNotebooks/Assignment07_DraftFinalProjectNotebook/peterc_finalProjectF24_roughdraft.pdf b/StudentNotebooks/Assignment07_DraftFinalProjectNotebook/peterc_finalProjectF24_roughdraft.pdf
index 8a913843b637222e3bd858de295a420c2b1cd57e..0102c12272e94280d4037a16eea5a8c31b21e460 100644
GIT binary patch
delta 42044
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
delta 41721
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