Phyloseq dataset

Probiotics Intervention Data (peerj32)

From microbiome pachage

Description The peerj32 data set contains high-through profiling data from 389 human blood serum lipids and 130 intestinal genus-level bacteria from 44 samples (22 subjects from 2 time points; before and after probiotic/placebo intervention). The data set can be used to investigate associations between intestinal bacteria and host lipid metabolism. For details, see http://dx.doi.org/10.7717/peerj.32.

phyloseq-class experiment-level object
otu_table()   OTU Table:         [ 130 taxa and 44 samples ]
sample_data() Sample Data:       [ 44 samples by 5 sample variables ]
tax_table()   Taxonomy Table:    [ 130 taxa by 3 taxonomic ranks ]
  • Number of taxonomic groups: 130

  • Number of samples: 44

  • Number of metadata fields: 5:

  • Metadata variables are: time, sex, subject, sample, group

Hierarchical Clustering

For more info, see!

Hierarchical Clustering

It is the clustering of the relative abundances of the samples; called compositional; by Ward’s method when consider joining two clusters, how does it change the total distance (TD) from the centroid. The distance between samples is specified by Bray Curtis distance

Ward’s method

Where we start by pretending to merge the two clusters a bit similar to complete link clustering, but instead of looking for the diameter of the result, we look for the aggregate deviation. We look to the sum of squared deviation of all the points from the new formed centroid, and for different merging pairs. We will end up with different deviations, then we choose the smallest one and clustering according to it Ward’s Hierarchical Clustering Method

By groups

  • The number of Placebo is: 28
  • The number of LGG is: 16

By sex

  • The number of female is: 30
  • The number of male is: 14

By time points 1 & 2

NULL
  • Number of samples at the first time point is: 22

  • Number of samples at the second time point is: 22

Redundancy analysis (RDA)

For better understanding of the multivariate models, see!

Dataset from stool

da <- load("RDA/PregnancyClosed15.Rdata")
site <- "Stool"
phy <- PSPreg[[site]]
phy
phyloseq-class experiment-level object
otu_table()   OTU Table:         [ 1271 taxa and 580 samples ]
sample_data() Sample Data:       [ 580 samples by 64 sample variables ]
tax_table()   Taxonomy Table:    [ 1271 taxa by 7 taxonomic ranks ]
phy_tree()    Phylogenetic Tree: [ 1271 tips and 1270 internal nodes ]
  • Number of taxonomic groups: 1271
  • Number of samples: 580
  • Number of metadata fields: 64:
  • Metadata variables are: SampleID, BarcodeSequence, LinkerPrimerSequence, BodySite, SubjectID, LMP, DateColl, GDColl, GWColl, TrimColl, intra_ut_fetal_demise, History_of_preterm_delivery, Withdrew, DateWithdrew, GDWithdrawal, GWWithdrawal, Delivered, DelDate, GDDel, GWDel, Labor_Initiation, Indication, PPROM, Chorioamnionitis, Endometritis, Hypertensive.Disorder, Preeclampsia, Birthweight_kg, Length_at_birth, Number_of_babies, Gender_Baby, Race, Ethnicity, SES_maternal_education, SES_household_income, ReversePrimer, Saliva_volume_uL, Note_any_concerns_regarding_the_specimen, Run_No, Number_within_run, Operator, Extraction_date, Bead_Beating_Time, Description, LibrarySize, RESEQ, RSPREF, keepRS, CollID, D2Del, W2Del, D2Term, W2Term, NumReads, PrePreg, Preg, PostPreg, Term, Marginal, Preterm, VeryPreterm, Outcome, CSection, SubjectNice

For Hypertensive.Disorder

Standard redundancy analysis

It is the Bray distance between compositional-transformed taxa abundances

Based on Aitchison distance

It is the Euclidean distance between CLR-transformed species abundances see.

For Race

Standard redundancy analysis

It is the Bray distance between compositional-transformed taxa abundances

Based on Aitchison distance

It is the Euclidean distance between CLR-transformed species abundances see.

For SES_household_income

Standard redundancy analysis

It is the Bray distance between compositional-transformed taxa abundances

Based on Aitchison distance

It is the Euclidean distance between CLR-transformed species abundances see.

For SES_maternal_education

Standard redundancy analysis

It is the Bray distance between compositional-transformed taxa abundances

Based on Aitchison distance

It is the Euclidean distance between CLR-transformed species abundances see.

LS0tDQp0aXRsZTogIk11bHRpdmFyaWF0ZSBhbmFseXNpcyINCmF1dGhvcjogIldpc2FtIg0KZGF0ZTogImByIFN5cy5EYXRlKClgIg0Kb3V0cHV0OiANCiAgaHRtbF9kb2N1bWVudDoNCiAgICB0b2M6IHRydWUNCiAgICB0b2NfZGVwdGg6IDQNCiAgICB0b2NfZmxvYXQ6IHRydWUNCiAgICBjb2RlX2Rvd25sb2FkOiB0cnVlDQotLS0NCg0KDQpgYGB7ciBwaHlsb3NlcSwgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgZXJyb3I9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQpsaWJyYXJ5KGtuaXRyKQ0KbGlicmFyeShwaHlsb3NlcSkNCmxpYnJhcnkodmVnYW4pDQojbGlicmFyeShtaXhPbWljcykNCmxpYnJhcnkoZ2dwbG90MikNCmxpYnJhcnkodmVnYW4pDQpsaWJyYXJ5KHRpY3RvYykNCmxpYnJhcnkodGlkeXIpDQpsaWJyYXJ5KHBlcm11dGUpDQpsaWJyYXJ5KGxhdHRpY2UpDQpvcHRpb25zKG1heC5wcmludD0iNzUiKQ0KICBrbml0cjo6b3B0c19jaHVuayRzZXQoZmlnLndpZHRoPTgsDQogICAgICAgICAgICAgICAgICAgICAgICBmaWcuaGVpZ2h0PTYsDQogICAgICAgICAgICAgICAgICAgICAgICBldmFsPVRSVUUsDQogICAgICAgICAgICAgICAgICAgICAgICBjYWNoZT1UUlVFLA0KICAgICAgICAgICAgICAgICAgICAgICAgZWNobz1UUlVFLA0KICAgICAgICAgICAgICAgICAgICAgICAgcHJvbXB0PUZBTFNFLA0KICAgICAgICAgICAgICAgICAgICAgICAgdGlkeT1UUlVFLA0KICAgICAgICAgICAgICAgICAgICAgICAgY29tbWVudD1OQSwNCiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U9RkFMU0UsDQogICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nPUZBTFNFKQ0Kb3B0c19rbml0JHNldCh3aWR0aD03NSkNCmBgYA0KDQojIFBoeWxvc2VxIGRhdGFzZXQNCiMjIFByb2Jpb3RpY3MgSW50ZXJ2ZW50aW9uIERhdGEgKHBlZXJqMzIpIA0KDQoqKkZyb20gbWljcm9iaW9tZSBwYWNoYWdlKioNCg0KRGVzY3JpcHRpb24NClRoZSBwZWVyajMyIGRhdGEgc2V0IGNvbnRhaW5zIGhpZ2gtdGhyb3VnaCBwcm9maWxpbmcgZGF0YSBmcm9tIDM4OSBodW1hbiBibG9vZCBzZXJ1bSBsaXBpZHMgYW5kIDEzMCBpbnRlc3RpbmFsIGdlbnVzLWxldmVsIGJhY3RlcmlhIGZyb20gNDQgc2FtcGxlcyAoMjIgc3ViamVjdHMgZnJvbSAyIHRpbWUgcG9pbnRzOyBiZWZvcmUgYW5kIGFmdGVyIHByb2Jpb3RpYy9wbGFjZWJvIGludGVydmVudGlvbikuIFRoZSBkYXRhIHNldCBjYW4gYmUgdXNlZCB0byBpbnZlc3RpZ2F0ZSBhc3NvY2lhdGlvbnMgYmV0d2VlbiBpbnRlc3RpbmFsIGJhY3RlcmlhIGFuZCBob3N0IGxpcGlkIG1ldGFib2xpc20uIEZvciBkZXRhaWxzLCBzZWUgaHR0cDovL2R4LmRvaS5vcmcvMTAuNzcxNy9wZWVyai4zMi4NCg0KYGBge3IgZGF0YXNldCwgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgZXJyb3I9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQpsaWJyYXJ5KG1pY3JvYmlvbWUpDQpkYXRhKCJwZWVyajMyIikNCnBoeTwtIHBlZXJqMzIkcGh5bG9zZXENCnBoeQ0KDQpgYGANCiAqIE51bWJlciBvZiB0YXhvbm9taWMgZ3JvdXBzOiBgciBudGF4YShwaHkpYA0KICogTnVtYmVyIG9mIHNhbXBsZXM6IGByIG5zYW1wbGVzKHBoeSlgDQogKiBOdW1iZXIgb2YgbWV0YWRhdGEgZmllbGRzOiBgciBuY29sKGdldF92YXJpYWJsZShwaHkpKWA6ICANCg0KICogTWV0YWRhdGEgdmFyaWFibGVzIGFyZTogYHIgc2FtcGxlX3ZhcmlhYmxlcyhwaHkpYA0KDQoNCg0KDQojIEhpZXJhcmNoaWNhbCBDbHVzdGVyaW5nDQpGb3IgbW9yZSBpbmZvLCBbc2VlIV0oaHR0cHM6Ly93d3cuc2NpZW5jZWRpcmVjdC5jb20vdG9waWNzL2NvbXB1dGVyLXNjaWVuY2UvaGllcmFyY2hpY2FsLWNsdXN0ZXItYW5hbHlzaXMpDQoNCiMjIyAqSGllcmFyY2hpY2FsIENsdXN0ZXJpbmcqDQoNCkl0IGlzIHRoZSBjbHVzdGVyaW5nIG9mIHRoZSByZWxhdGl2ZSBhYnVuZGFuY2VzIG9mIHRoZSBzYW1wbGVzOyBjYWxsZWQgY29tcG9zaXRpb25hbDsgYnkgV2FyZOKAmXMgbWV0aG9kIHdoZW4gY29uc2lkZXIgam9pbmluZyB0d28gY2x1c3RlcnMsIGhvdyBkb2VzIGl0IGNoYW5nZSB0aGUgdG90YWwgZGlzdGFuY2UgKFREKSBmcm9tIHRoZSBjZW50cm9pZC4gVGhlIGRpc3RhbmNlIGJldHdlZW4gc2FtcGxlcyBpcyBzcGVjaWZpZWQgYnkgQnJheSBDdXJ0aXMgZGlzdGFuY2UNCg0KIyMjICpXYXJk4oCZcyBtZXRob2QqDQoNCldoZXJlIHdlIHN0YXJ0IGJ5IHByZXRlbmRpbmcgdG8gbWVyZ2UgdGhlIHR3byBjbHVzdGVycyBhIGJpdCBzaW1pbGFyIHRvIGNvbXBsZXRlIGxpbmsgY2x1c3RlcmluZywgYnV0IGluc3RlYWQgb2YgbG9va2luZyBmb3IgdGhlIGRpYW1ldGVyIG9mIHRoZSByZXN1bHQsIHdlIGxvb2sgZm9yIHRoZSBhZ2dyZWdhdGUgZGV2aWF0aW9uLiBXZSBsb29rIHRvIHRoZSBzdW0gb2Ygc3F1YXJlZCBkZXZpYXRpb24gb2YgYWxsIHRoZSBwb2ludHMgZnJvbSB0aGUgbmV3IGZvcm1lZCBjZW50cm9pZCwgYW5kIGZvciBkaWZmZXJlbnQgbWVyZ2luZyBwYWlycy4gV2Ugd2lsbCBlbmQgdXAgd2l0aCBkaWZmZXJlbnQgZGV2aWF0aW9ucywgdGhlbiB3ZSBjaG9vc2UgdGhlIHNtYWxsZXN0IG9uZSBhbmQgY2x1c3RlcmluZyBhY2NvcmRpbmcgdG8gaXQNCltXYXJkJ3MgSGllcmFyY2hpY2FsIENsdXN0ZXJpbmcgTWV0aG9kXShodHRwczovL2FyeGl2Lm9yZy9hYnMvMTExMS42Mjg1KQ0KDQo8ZGl2IHN0eWxlPSJtYXJnaW4tYm90dG9tOjMwcHg7Ij4NCjwvZGl2Pg0KDQojIyMgQnkgZ3JvdXBzDQoNCmBgYHtyIGdyb3VwcywgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgZXJyb3I9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQp0aGVtZV9zZXQodGhlbWVfYncoMTApKQ0KcGhfY29tcCA8LSB0cmFuc2Zvcm1fc2FtcGxlX2NvdW50cyhwaHksIGZ1bmN0aW9uKE9UVSkgT1RVL3N1bShPVFUpKQ0KDQpkaXMgPC0gdmVnZGlzdCh0KG90dV90YWJsZShwaF9jb21wKUAuRGF0YSksICdicmF5JykNCmhjIDwtIGhjbHVzdChkaXMsIG1ldGhvZCA9ICJ3YXJkLkQyIikNCnBsb3QoaGMsIGhhbmc9MC41LCB4bGFiID0gImdyb3VwIiwgeSA9ICJEaXNzaW1pbGFyaXR5IiwgbGFiZWxzID0gZ2V0X3ZhcmlhYmxlKHBoeSkkZ3JvdXAsIG1haW4gPSBwYXN0ZSgiY29tcG9zaXRpb25hbCIsICJicmF5IiwgIndhcmQuRDIiLCBzZXAgPSAiLyIpKQ0KDQpgYGANCg0KKiBUaGUgbnVtYmVyIG9mIFBsYWNlYm8gaXM6IGByIGRpbShzdWJzZXQoZ2V0X3ZhcmlhYmxlKHBoeSksIGdyb3VwID09ICdQbGFjZWJvJykpWzFdYA0KKiBUaGUgbnVtYmVyIG9mIExHRyBpczogYHIgZGltKHN1YnNldChnZXRfdmFyaWFibGUocGh5KSwgZ3JvdXAgPT0gJ0xHRycpKVsxXWANCg0KDQo8ZGl2IHN0eWxlPSJtYXJnaW4tYm90dG9tOjMwcHg7Ij4NCjwvZGl2Pg0KDQojIyMgQnkgc2V4DQoNCmBgYHtyIHNleCwgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgZXJyb3I9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQp0aGVtZV9zZXQodGhlbWVfYncoMTApKQ0KcGxvdChoYywgaGFuZz0wLjUsIHhsYWIgPSAic2V4IiwgeSA9ICJEaXNzaW1pbGFyaXR5IiwgbGFiZWxzID0gZ2V0X3ZhcmlhYmxlKHBoeSkkc2V4LCBtYWluID0gcGFzdGUoImNvbXBvc2l0aW9uYWwiLCAiYnJheSIsICJ3YXJkLkQyIiwgc2VwID0gIi8iKSkjIysgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoc2l6ZSA9IDMpKQ0KYGBgDQoNCiogVGhlIG51bWJlciBvZiBmZW1hbGUgaXM6IGByIGRpbShzdWJzZXQoZ2V0X3ZhcmlhYmxlKHBoeSksIHNleCA9PSAnZmVtYWxlJykpWzFdYA0KKiBUaGUgbnVtYmVyIG9mIG1hbGUgaXM6IGByIGRpbShzdWJzZXQoZ2V0X3ZhcmlhYmxlKHBoeSksIHNleCA9PSAnbWFsZScpKVsxXWANCg0KDQo8ZGl2IHN0eWxlPSJtYXJnaW4tYm90dG9tOjMwcHg7Ij4NCjwvZGl2Pg0KDQoNCiMjIyBCeSB0aW1lIHBvaW50cyAxICYgMg0KDQpgYGB7ciB0aW1lLCBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCBlcnJvcj1GQUxTRSwgd2FybmluZz1GQUxTRX0NCnRoZW1lX3NldCh0aGVtZV9idygxMCkpDQpwbG90KGhjLCBoYW5nPTAuNSwgeGxhYiA9ICJ0aW1lIiwgeSA9ICJEaXNzaW1pbGFyaXR5IiwgbGFiZWxzID0gZ2V0X3ZhcmlhYmxlKHBoeSkkdGltZSwgbWFpbiA9IHBhc3RlKCJjb21wb3NpdGlvbmFsIiwgImJyYXkiLCAid2FyZC5EMiIsIHNlcCA9ICIvIikpICsgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoc2l6ZSA9IDMpKQ0KYGBgDQoNCg0KDQoqIE51bWJlciBvZiBzYW1wbGVzIGF0IHRoZSBmaXJzdCB0aW1lIHBvaW50IGlzOiBgciBkaW0oc3Vic2V0KGdldF92YXJpYWJsZShwaHkpLCB0aW1lID09ICcxJykpWzFdYA0KDQoqIE51bWJlciBvZiBzYW1wbGVzIGF0IHRoZSBzZWNvbmQgdGltZSBwb2ludCBpczogYHIgZGltKHN1YnNldChnZXRfdmFyaWFibGUocGh5KSwgdGltZSA9PSAnMicpKVsxXWANCg0KDQo8ZGl2IHN0eWxlPSJtYXJnaW4tYm90dG9tOjMwcHg7Ij4NCjwvZGl2Pg0KDQoNCg0KIyBSZWR1bmRhbmN5IGFuYWx5c2lzIChSREEpDQpGb3IgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIG11bHRpdmFyaWF0ZSBtb2RlbHMsIFtzZWUhXShodHRwOi8vZG1jZ2xpbm4uZ2l0aHViLmlvL3F1YW50X21ldGhvZHMvbGVzc29ucy9tdWx0aXZhcmlhdGVfbW9kZWxzLmh0bWwpDQoNCiogKipQaHlsb3NlcSBkYXRhc2V0KioNCkZvciBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGlzIHNlY3Rpb24sIEkgaGF2ZSB1c2VkIGFub3RoZXIgcGh5bG9zZXEgZGF0YXNldCBmcm9tIHRoaXMgcGFwZXIgW1RlbXBvcmFsIGFuZCBzcGF0aWFsIHZhcmlhdGlvbiBvZiB0aGUgaHVtYW4gbWljcm9iaW90YSBkdXJpbmcgcHJlZ25hbmN5XShodHRwczovL3d3dy5wbmFzLm9yZy9jb250ZW50LzExMi8zNS8xMTA2MCkNCg0KIyMjIyBEYXRhc2V0IGZyb20gc3Rvb2wNCg0KDQpgYGB7ciBkYXRhX3ZhZ2luYSwgZWNobz1ULCBtZXNzYWdlPUZBTFNFLCBlcnJvcj1GQUxTRX0NCg0KZGE8LSBsb2FkKCdSREEvUHJlZ25hbmN5Q2xvc2VkMTUuUmRhdGEnKQ0Kc2l0ZSA8LSAiU3Rvb2wiDQpwaHkgPC0gUFNQcmVnW1tzaXRlXV0NCnBoeQ0KDQpgYGANCg0KICogTnVtYmVyIG9mIHRheG9ub21pYyBncm91cHM6IGByIG50YXhhKHBoeSlgDQogKiBOdW1iZXIgb2Ygc2FtcGxlczogYHIgbnNhbXBsZXMocGh5KWANCiAqIE51bWJlciBvZiBtZXRhZGF0YSBmaWVsZHM6IGByIG5jb2woZ2V0X3ZhcmlhYmxlKHBoeSkpYDogIA0KICogTWV0YWRhdGEgdmFyaWFibGVzIGFyZTogYHIgc2FtcGxlX3ZhcmlhYmxlcyhwaHkpYA0KDQo8ZGl2IHN0eWxlPSJtYXJnaW4tYm90dG9tOjMwcHg7Ij4NCjwvZGl2Pg0KDQojIyMgRm9yIEh5cGVydGVuc2l2ZS5EaXNvcmRlcg0KIyMjIyBTdGFuZGFyZCByZWR1bmRhbmN5IGFuYWx5c2lzDQpJdCBpcyB0aGUgQnJheSBkaXN0YW5jZSBiZXR3ZWVuIGNvbXBvc2l0aW9uYWwtdHJhbnNmb3JtZWQgdGF4YSBhYnVuZGFuY2VzDQoNCmBgYHtyIHNfcmVkdW5kYW5jeSwgZWNobz1GLCBtZXNzYWdlPUZBTFNFLCBlcnJvcj1GQUxTRX0NCnRoZW1lX3NldCh0aGVtZV9idygxMCkpDQpwaHlfY29tcCA8LSB0cmFuc2Zvcm1fc2FtcGxlX2NvdW50cyhwaHksIGZ1bmN0aW9uKE9UVSkgT1RVL3N1bShPVFUpKQ0Kb3JkX3MgPC0gb3JkaW5hdGUocGh5X2NvbXAsIGZvcm11bGEgPSB+IEh5cGVydGVuc2l2ZS5EaXNvcmRlcg0KLCAnUkRBJywgImJyYXkiKQ0KcDEgPC0gcGxvdF9vcmRpbmF0aW9uKHBoeV9jb21wLCBvcmRfcywgY29sb3I9Ikh5cGVydGVuc2l2ZS5EaXNvcmRlciIpICsNCiAgICAgICBzdGF0X2VsbGlwc2UodHlwZSA9ICJub3JtIiwgbGluZXR5cGUgPSAxKSArDQogICAgICAgbGFicyh0aXRsZSA9ICJyZWR1bmRhbmN5IGFuYWx5c2lzIChQQ0EgdmlhIHJkYSkiKQ0KcHJpbnQocDEpDQpgYGANCg0KPGRpdiBzdHlsZT0ibWFyZ2luLWJvdHRvbTozMHB4OyI+DQo8L2Rpdj4NCg0KIyMjIyBCYXNlZCBvbiBBaXRjaGlzb24gZGlzdGFuY2UNCg0KSXQgaXMgdGhlIEV1Y2xpZGVhbiBkaXN0YW5jZSBiZXR3ZWVuIENMUi10cmFuc2Zvcm1lZCBzcGVjaWVzIGFidW5kYW5jZXMgW3NlZV0oaHR0cHM6Ly93d3cuanN0b3Iub3JnL3N0YWJsZS8yMzQ1ODIxP3NlcT0xI21ldGFkYXRhX2luZm9fdGFiX2NvbnRlbnRzKS4NCg0KYGBge3IgYV9yZWR1bmRhbmN5LCBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCBlcnJvcj1GQUxTRSwgd2FybmluZz1GQUxTRX0NCnRoZW1lX3NldCh0aGVtZV9idygxMCkpDQpwaHlfY2xyIDwtIG1pY3JvYmlvbWU6OnRyYW5zZm9ybShwaHksICdjbHInKQ0Kb3JkIDwtIG9yZGluYXRlKHBoeV9jbHIsIGZvcm11bGEgPSB+IEh5cGVydGVuc2l2ZS5EaXNvcmRlciwgJ1JEQScsICJldWNsaWRlYW4iKQ0KcDEgPC0gcGxvdF9vcmRpbmF0aW9uKHBoeV9jbHIsIG9yZCwgY29sb3I9Ikh5cGVydGVuc2l2ZS5EaXNvcmRlciIpICsNCiAgICAgICBzdGF0X2VsbGlwc2UodHlwZSA9ICJub3JtIiwgbGluZXR5cGUgPSAxKSArDQogICAgICAgbGFicyh0aXRsZSA9ICJyZWR1bmRhbmN5IGFuYWx5c2lzIChQQ0EgdmlhIHJkYSkiKQ0KcHJpbnQocDEpDQpgYGANCg0KPGRpdiBzdHlsZT0ibWFyZ2luLWJvdHRvbTozMHB4OyI+DQo8L2Rpdj4NCg0KIyMjIEZvciBSYWNlDQojIyMjIFN0YW5kYXJkIHJlZHVuZGFuY3kgYW5hbHlzaXMNCkl0IGlzIHRoZSBCcmF5IGRpc3RhbmNlIGJldHdlZW4gY29tcG9zaXRpb25hbC10cmFuc2Zvcm1lZCB0YXhhIGFidW5kYW5jZXMNCg0KYGBge3Igc19yZWR1bmRhbmN5X2dyLCBlY2hvPUYsIG1lc3NhZ2U9RkFMU0UsIGVycm9yPUZBTFNFfQ0KdGhlbWVfc2V0KHRoZW1lX2J3KDEwKSkNCnBoeV9jb21wIDwtIHRyYW5zZm9ybV9zYW1wbGVfY291bnRzKHBoeSwgZnVuY3Rpb24oT1RVKSBPVFUvc3VtKE9UVSkpDQpvcmRfcyA8LSBvcmRpbmF0ZShwaHlfY29tcCwgZm9ybXVsYSA9IH5SYWNlLCAnUkRBJywgImJyYXkiKQ0KcDEgPC0gcGxvdF9vcmRpbmF0aW9uKHBoeV9jb21wLCBvcmRfcywgY29sb3I9IlJhY2UiKSArDQogICAgICAgc3RhdF9lbGxpcHNlKHR5cGUgPSAibm9ybSIsIGxpbmV0eXBlID0gMSkgKw0KICAgICAgIGxhYnModGl0bGUgPSAicmVkdW5kYW5jeSBhbmFseXNpcyAoUENBIHZpYSByZGEpIikNCnByaW50KHAxKQ0KYGBgDQoNCjxkaXYgc3R5bGU9Im1hcmdpbi1ib3R0b206MzBweDsiPg0KPC9kaXY+DQoNCiMjIyMgQmFzZWQgb24gQWl0Y2hpc29uIGRpc3RhbmNlDQoNCkl0IGlzIHRoZSBFdWNsaWRlYW4gZGlzdGFuY2UgYmV0d2VlbiBDTFItdHJhbnNmb3JtZWQgc3BlY2llcyBhYnVuZGFuY2VzIFtzZWVdKGh0dHBzOi8vd3d3LmpzdG9yLm9yZy9zdGFibGUvMjM0NTgyMT9zZXE9MSNtZXRhZGF0YV9pbmZvX3RhYl9jb250ZW50cykuDQoNCmBgYHtyIGFfcmVkdW5kYW5jeV9nciwgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgZXJyb3I9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQp0aGVtZV9zZXQodGhlbWVfYncoMTApKQ0KcGh5X2NsciA8LSBtaWNyb2Jpb21lOjp0cmFuc2Zvcm0ocGh5LCAnY2xyJykNCm9yZCA8LSBvcmRpbmF0ZShwaHlfY2xyLCBmb3JtdWxhID0gfiBSYWNlLCAnUkRBJywgImV1Y2xpZGVhbiIpDQpwMSA8LSBwbG90X29yZGluYXRpb24ocGh5X2Nsciwgb3JkLCBjb2xvcj0iUmFjZSIpICsNCiAgICAgICBzdGF0X2VsbGlwc2UodHlwZSA9ICJub3JtIiwgbGluZXR5cGUgPSAxKSArDQogICAgICAgbGFicyh0aXRsZSA9ICJyZWR1bmRhbmN5IGFuYWx5c2lzIChQQ0EgdmlhIHJkYSkiKQ0KcHJpbnQocDEpDQpgYGANCg0KPGRpdiBzdHlsZT0ibWFyZ2luLWJvdHRvbTozMHB4OyI+DQo8L2Rpdj4NCg0KIyMjIEZvciBTRVNfaG91c2Vob2xkX2luY29tZQ0KDQojIyMjIFN0YW5kYXJkIHJlZHVuZGFuY3kgYW5hbHlzaXMNCg0KSXQgaXMgdGhlIEJyYXkgZGlzdGFuY2UgYmV0d2VlbiBjb21wb3NpdGlvbmFsLXRyYW5zZm9ybWVkIHRheGEgYWJ1bmRhbmNlcw0KDQpgYGB7ciBzX3JlZHVuZGFuY3lfdGksIGVjaG89RiwgbWVzc2FnZT1GQUxTRSwgZXJyb3I9RkFMU0V9DQp0aGVtZV9zZXQodGhlbWVfYncoMTApKQ0KcGh5X2NvbXAgPC0gdHJhbnNmb3JtX3NhbXBsZV9jb3VudHMocGh5LCBmdW5jdGlvbihPVFUpIE9UVS9zdW0oT1RVKSkNCm9yZF9zIDwtIG9yZGluYXRlKHBoeV9jb21wLCBmb3JtdWxhID0gflNFU19ob3VzZWhvbGRfaW5jb21lLCAnUkRBJywgImJyYXkiKQ0KcDEgPC0gcGxvdF9vcmRpbmF0aW9uKHBoeV9jb21wLCBvcmRfcywgY29sb3I9IlNFU19ob3VzZWhvbGRfaW5jb21lIikgKw0KICAgICAgIHN0YXRfZWxsaXBzZSh0eXBlID0gIm5vcm0iLCBsaW5ldHlwZSA9IDEpICsNCiAgICAgICBsYWJzKHRpdGxlID0gInJlZHVuZGFuY3kgYW5hbHlzaXMgKFBDQSB2aWEgcmRhKSIpDQpwcmludChwMSkNCmBgYA0KDQo8ZGl2IHN0eWxlPSJtYXJnaW4tYm90dG9tOjMwcHg7Ij4NCjwvZGl2Pg0KDQojIyMgQmFzZWQgb24gQWl0Y2hpc29uIGRpc3RhbmNlDQoNCkl0IGlzIHRoZSBFdWNsaWRlYW4gZGlzdGFuY2UgYmV0d2VlbiBDTFItdHJhbnNmb3JtZWQgc3BlY2llcyBhYnVuZGFuY2VzIFtzZWVdKGh0dHBzOi8vd3d3LmpzdG9yLm9yZy9zdGFibGUvMjM0NTgyMT9zZXE9MSNtZXRhZGF0YV9pbmZvX3RhYl9jb250ZW50cykuDQoNCmBgYHtyIGFfcmVkdW5kYW5jeV90LCBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCBlcnJvcj1GQUxTRSwgd2FybmluZz1GQUxTRX0NCnRoZW1lX3NldCh0aGVtZV9idygxMCkpDQpwaHlfY2xyIDwtIG1pY3JvYmlvbWU6OnRyYW5zZm9ybShwaHksICdjbHInKQ0Kb3JkIDwtIG9yZGluYXRlKHBoeV9jbHIsIGZvcm11bGEgPSB+U0VTX2hvdXNlaG9sZF9pbmNvbWUsICdSREEnLCAiZXVjbGlkZWFuIikNCnAxIDwtIHBsb3Rfb3JkaW5hdGlvbihwaHlfY2xyLCBvcmQsIGNvbG9yPSJTRVNfaG91c2Vob2xkX2luY29tZSIpICsNCiAgICAgICBzdGF0X2VsbGlwc2UodHlwZSA9ICJub3JtIiwgbGluZXR5cGUgPSAxKSArDQogICAgICAgbGFicyh0aXRsZSA9ICJyZWR1bmRhbmN5IGFuYWx5c2lzIChQQ0EgdmlhIHJkYSkiKQ0KcHJpbnQocDEpDQpgYGANCg0KIyMjIEZvciBTRVNfbWF0ZXJuYWxfZWR1Y2F0aW9uDQoNCiMjIyMgU3RhbmRhcmQgcmVkdW5kYW5jeSBhbmFseXNpcw0KDQpJdCBpcyB0aGUgQnJheSBkaXN0YW5jZSBiZXR3ZWVuIGNvbXBvc2l0aW9uYWwtdHJhbnNmb3JtZWQgdGF4YSBhYnVuZGFuY2VzDQoNCmBgYHtyIHNfcmVkdW5kYW5jeV9lLCBlY2hvPUYsIG1lc3NhZ2U9RkFMU0UsIGVycm9yPUZBTFNFfQ0KdGhlbWVfc2V0KHRoZW1lX2J3KDEwKSkNCnBoeV9jb21wIDwtIHRyYW5zZm9ybV9zYW1wbGVfY291bnRzKHBoeSwgZnVuY3Rpb24oT1RVKSBPVFUvc3VtKE9UVSkpDQpvcmRfcyA8LSBvcmRpbmF0ZShwaHlfY29tcCwgZm9ybXVsYSA9IH5TRVNfbWF0ZXJuYWxfZWR1Y2F0aW9uLCAnUkRBJywgImJyYXkiKQ0KcDEgPC0gcGxvdF9vcmRpbmF0aW9uKHBoeV9jb21wLCBvcmRfcywgY29sb3I9IlNFU19tYXRlcm5hbF9lZHVjYXRpb24iKSArDQogICAgICAgc3RhdF9lbGxpcHNlKHR5cGUgPSAibm9ybSIsIGxpbmV0eXBlID0gMSkgKw0KICAgICAgIGxhYnModGl0bGUgPSAicmVkdW5kYW5jeSBhbmFseXNpcyAoUENBIHZpYSByZGEpIikNCnByaW50KHAxKQ0KYGBgDQoNCjxkaXYgc3R5bGU9Im1hcmdpbi1ib3R0b206MzBweDsiPg0KPC9kaXY+DQoNCiMjIyMgQmFzZWQgb24gQWl0Y2hpc29uIGRpc3RhbmNlDQoNCkl0IGlzIHRoZSBFdWNsaWRlYW4gZGlzdGFuY2UgYmV0d2VlbiBDTFItdHJhbnNmb3JtZWQgc3BlY2llcyBhYnVuZGFuY2VzIFtzZWVdKGh0dHBzOi8vd3d3LmpzdG9yLm9yZy9zdGFibGUvMjM0NTgyMT9zZXE9MSNtZXRhZGF0YV9pbmZvX3RhYl9jb250ZW50cykuDQoNCmBgYHtyIGFfcmVkdW5kYW5jeV9lLCBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCBlcnJvcj1GQUxTRSwgd2FybmluZz1GQUxTRX0NCnRoZW1lX3NldCh0aGVtZV9idygxMCkpDQpwaHlfY2xyIDwtIG1pY3JvYmlvbWU6OnRyYW5zZm9ybShwaHksICdjbHInKQ0Kb3JkIDwtIG9yZGluYXRlKHBoeV9jbHIsIGZvcm11bGEgPSB+U0VTX21hdGVybmFsX2VkdWNhdGlvbiwgJ1JEQScsICJldWNsaWRlYW4iKQ0KcDEgPC0gcGxvdF9vcmRpbmF0aW9uKHBoeV9jbHIsIG9yZCwgY29sb3I9IlNFU19tYXRlcm5hbF9lZHVjYXRpb24iKSArDQogICAgICAgc3RhdF9lbGxpcHNlKHR5cGUgPSAibm9ybSIsIGxpbmV0eXBlID0gMSkgKw0KICAgICAgIGxhYnModGl0bGUgPSAicmVkdW5kYW5jeSBhbmFseXNpcyAoUENBIHZpYSByZGEpIikNCnByaW50KHAxKQ0KYGBgDQoNCg==