IyBUcmFuc2xhdGlvbiBvZiB0b29scy5wb3QgdG8gRnJlbmNoCiMgQ29weXJpZ2h0IChDKSAyMDA1IFRoZSBSIEZvdW5kYXRpb24KIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgbGljZW5zZSBhcyB0aGUgdG9vbHMgUiBwYWNrYWdlLgojIFBoaWxpcHBlIEdyb3NqZWFuIDxwaGdyb3NqZWFuQHNjaXZpZXdzLm9yZz4sIDIwMDUuCiMKbXNnaWQgIiIKbXNnc3RyICIiCiJQcm9qZWN0LUlkLVZlcnNpb246IFIgMi4xMi4wXG4iCiJSZXBvcnQtTXNnaWQtQnVncy1UbzogXG4iCiJQT1QtQ3JlYXRpb24tRGF0ZTogMjAyMC0wMy0yNCAxNDo1Ni0wNzAwXG4iCiJQTy1SZXZpc2lvbi1EYXRlOiAyMDEzLTAzLTE5IDIwOjM0KzAxMDBcbiIKIkxhc3QtVHJhbnNsYXRvcjogUGhpbGlwcGUgR3Jvc2plYW4gPHBoZ3Jvc2plYW5Ac2Npdmlld3Mub3JnPlxuIgoiTGFuZ3VhZ2UtVGVhbTogRnJlbmNoIDxSLWNvcmVAci1wcm9qZWN0Lm9yZz5cbiIKIkxhbmd1YWdlOiBmclxuIgoiTUlNRS1WZXJzaW9uOiAxLjBcbiIKIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1JU08tODg1OS0xXG4iCiJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCiJQbHVyYWwtRm9ybXM6IG5wbHVyYWxzPTI7IHBsdXJhbD0obiA+IDEpO1xuIgoiWC1HZW5lcmF0b3I6IFBvZWRpdCAxLjUuNVxuIgoKIzogUm1kNS5jOjQ3Cm1zZ2lkICJhcmd1bWVudCAnZmlsZXMnIG11c3QgYmUgY2hhcmFjdGVyIgptc2dzdHIgImwnYXJndW1lbnQgJ2ZpbGVzJyBkb2l0IOp0cmUgdW5lIGNoYe5uZSBkZSBjYXJhY3TocmVzIgoKIzogUm1kNS5jOjYzCiMsIGZ1enp5LCBjLWZvcm1hdAptc2dpZCAibWQ1IGZhaWxlZCBvbiBmaWxlICclbHMnIgptc2dzdHIgIm1kNSBhIOljaG916SBzdXIgbGUgZmljaGllciAnJXMnIgoKIzogUm1kNS5jOjY1CiMsIGMtZm9ybWF0Cm1zZ2lkICJtZDUgZmFpbGVkIG9uIGZpbGUgJyVzJyIKbXNnc3RyICJtZDUgYSDpY2hvdekgc3VyIGxlIGZpY2hpZXIgJyVzJyIKCiM6IGdldGZtdHMuYzo2MQojLCBjLWZvcm1hdAptc2dpZCAib25seSAlZCBhcmd1bWVudHMgYXJlIGFsbG93ZWQiCm1zZ3N0ciAic2V1bHMgJWQgYXJndW1lbnRzIHNvbnQgYXV0b3Jpc+lzIgoKIzogZ2V0Zm10cy5jOjY2Cm1zZ2lkICInZm10JyBpcyBub3QgYSBjaGFyYWN0ZXIgdmVjdG9yIgptc2dzdHIgIidmbXQnIG4nZXN0IHBhcyB1biB2ZWN0ZXVyIGRlIGNoYe5uZXMgZGUgY2FyYWN06HJlcyIKCiM6IGdldGZtdHMuYzo2OQptc2dpZCAiJ2ZtdCcgbXVzdCBiZSBsZW5ndGggMSIKbXNnc3RyICInZm10JyBkb2l0IGF2b2lyIHVuZSBsb25ndWV1ciAxIgoKIzogZ2V0Zm10cy5jOjc1CiMsIGMtZm9ybWF0Cm1zZ2lkICInZm10JyBsZW5ndGggZXhjZWVkcyBtYXhpbWFsIGZvcm1hdCBsZW5ndGggJWQiCm1zZ3N0ciAibGEgbG9uZ3VldXIgZGUgJ2ZtdCcgZOlwYXNzZSBsZSBmb3JtYXQgbWF4aW1hbCBkZSBsb25ndWV1ciAlZCIKCiM6IGdldGZtdHMuYzo5NgojLCBjLWZvcm1hdAptc2dpZCAidW5yZWNvZ25pc2VkIGZvcm1hdCBzcGVjaWZpY2F0aW9uICclcyciCm1zZ3N0ciAic3DpY2lmaWNhdGlvbiBkZSBmb3JtYXQgaW5jb25udSAnJXMnIgoKIzogZ2V0Zm10cy5jOjEzNgptc2dpZCAiYXQgbW9zdCBvbmUgYXN0ZXJpc2sgJyonIGlzIHN1cHBvcnRlZCBpbiBlYWNoIGNvbnZlcnNpb24gc3BlY2lmaWNhdGlvbiIKbXNnc3RyICIiCiJ1bmUgc2V1bGUgYXN06XJpc3F1ZSAnKicgZXN0IHN1cHBvcnTpZSBhdSBtYXhpbXVtIGRhbnMgY2hhcXVlIHNw6WNpZmljYXRpb24gIgoiZGUgY29udmVyc2lvbiAiCgojOiBncmFtTGF0ZXguYzoyMzkwIGdyYW1SZC5jOjM3OTAKIywgYy1mb3JtYXQKbXNnaWQgInVuYWJsZSB0byBhbGxvY2F0ZSBidWZmZXIgZm9yIGxvbmcgc3RyaW5nIGF0IGxpbmUgJWQiCm1zZ3N0ciAiIgoiaW1wb3NzaWJpbGl06SBkJ2FsbG91ZXIgdW5lIHpvbmUgdGFtcG9uIHBvdXIgdW5lIGNoYe5uZSBsb25ndWUg4CBsYSBsaWduZSAlZCIKCiM6IGdyYW1MYXRleC5jOjI2MjYgZ3JhbVJkLmM6NDMzNSBncmFtUmQuYzo0MzQxCiMsIGMtZm9ybWF0Cm1zZ2lkICJpbnZhbGlkICclcycgdmFsdWUiCm1zZ3N0ciAidmFsZXVyICclcycgaW5jb3JyZWN0ZSIKCiM6IGdyYW1SZC5jOjI0MTEgZ3JhbVJkLmM6MjQxNAojLCBjLWZvcm1hdAptc2dpZCAiYmFkIG1hcmt1cCAoZXh0cmEgc3BhY2U/KSBhdCAlczolZDolZCIKbXNnc3RyICJtYXJxdWUgZXJyb27pZSAoZXNwYWNlIGFkZGl0aW9uZWwgPykg4CAlczolZDolZCIKCiM6IGdyYW1SZC5jOjI5MzkKIywgYy1mb3JtYXQKbXNnaWQgIk1hY3JvICclcycgcHJldmlvdXNseSBkZWZpbmVkLiIKbXNnc3RyICJMYSBtYWNybyAnJXMnIGVzdCBk6WrgIHBy6WPpZGVtbWVudCBk6WZpbmllLiIKCiM6IGdyYW1SZC5jOjI5NDkKIywgYy1mb3JtYXQKbXNnaWQgIkF0IG1vc3QgNCBhcmd1bWVudHMgYXJlIGFsbG93ZWQgZm9yIHVzZXIgZGVmaW5lZCBtYWNyb3MuIgptc2dzdHIgIiIKIlVuIG1heGltdW0gZGUgNCBhcmd1bWVudHMgZXN0IGF1dG9yaXPpIHBvdXIgbGVzIG1hY3JvcyBk6WZpbmllcyBwYXIgIgoibCd1dGlsaXNhdGV1ci4iCgojOiBncmFtUmQuYzoyOTkxCiMsIGMtZm9ybWF0Cm1zZ2lkICJObyBtYWNybyBkZWZpbml0aW9uIGZvciAnJXMnLiIKbXNnc3RyICJQYXMgZGUgZOlmaW5pdGlvbiBkZSBtYWNybyBwb3VyICclcycuIgoKIzogZ3JhbVJkLmM6MzA1MwojLCBmdXp6eSwgYy1mb3JtYXQKbXNnaWQgIk5vdCBlbm91Z2ggYXJndW1lbnRzIHBhc3NlZCB0byB1c2VyIG1hY3JvICclcyciCm1zZ3N0ciAiIgoiVW4gbWF4aW11bSBkZSA0IGFyZ3VtZW50cyBlc3QgYXV0b3Jpc+kgcG91ciBsZXMgbWFjcm9zIGTpZmluaWVzIHBhciAiCiJsJ3V0aWxpc2F0ZXVyLiIKCiM6IGdyYW1SZC5jOjMxOTMgZ3JhbVJkLmM6MzE5NwojLCBjLWZvcm1hdAptc2dpZCAibmV3bGluZSB3aXRoaW4gcXVvdGVkIHN0cmluZyBhdCAlczolZCIKbXNnc3RyICIiCiJyZXRvdXIgZGUgbGlnbmUg4CBsJ2ludOlyaWV1ciBkJ3VuZSBjaGHubmUgZGUgY2FyYWN06HJlcyBlbnRyZSBndWlsbGVtZXRzIOAgIgoiJXM6JWQiCgojOiBncmFtUmQuYzozMjE2CiMsIGMtZm9ybWF0Cm1zZ2lkICJ1bmFibGUgdG8gYWxsb2NhdGUgYnVmZmVyIGZvciBsb25nIG1hY3JvIGF0IGxpbmUgJWQiCm1zZ3N0ciAiIgoiaW1wb3NzaWJsZSBkJ2FsbG91ZXIgZGUgbGEgbeltb2lyZSB0YW1wb24gcG91ciB1bmUgbG9uZ3VlIG1hY3JvIOAgbGEgbGlnbiAlZCIKCiM6IGdyYW1SZC5jOjMyNDYKbXNnaWQgIm1hY3JvcyBuZXN0ZWQgdG9vIGRlZXBseTogaW5maW5pdGUgcmVjdXJzaW9uPyIKbXNnc3RyICJtYWNyb3MgaW1icmlxdellcyB0cm9wIHByb2ZvbmTpbWVudCA6IHLpY3Vyc2lvbiBpbmZpbmllID8iCgojOiBncmFtUmQuYzozNjUyCiMsIGMtZm9ybWF0Cm1zZ2lkICJVbmFibGUgdG8gZmluZCBtYWNybyAlcyIKbXNnc3RyICJNYWNybyAlcyBpbnRyb3V2YWJsZSIKCiM6IGdyYW1SZC5jOjM4NTAKIywgYy1mb3JtYXQKbXNnaWQgIlVuZXhwZWN0ZWQgZW5kIG9mIGlucHV0IChpbiAlYyBxdW90ZWQgc3RyaW5nIG9wZW5lZCBhdCAlczolZDolZCkiCm1zZ3N0ciAiIgoiRmluIGQnZW50cullIGluYXR0ZW5kdWUgKGRhbnMgbGEgY2hh7m5lIGVudHJlIGd1aWxsZW1lbnRzICVjIG91dmVydGVzIOAgJXM6IgoiJWQ6JWQpIgoKIzogZ3JhbVJkLmM6NDM0OAptc2dpZCAiY2Fubm90IG9wZW4gdGhlIGNvbm5lY3Rpb24iCm1zZ3N0ciAiaW1wb3NzaWJsZSBkJ291dnJpciBsYSBjb25uZXhpb24iCgojOiBncmFtUmQuYzo0MzU1Cm1zZ2lkICJjYW5ub3QgcmVhZCBmcm9tIHRoaXMgY29ubmVjdGlvbiIKbXNnc3RyICJpbXBvc3NpYmxlIGRlIGxpcmUgZGVwdWlzIGNldHRlIGNvbm5leGlvbiIKCiM6IGdyYW1SZC5jOjQzNjMKbXNnaWQgImludmFsaWQgUmQgZmlsZSIKbXNnc3RyICJmaWNoaWVyIFJkIGluY29ycmVjdCIKCiM6IGdyYW1SZC5jOjQzODIKbXNnaWQgIidkZXBhcnNlUmQnIG9ubHkgc3VwcG9ydHMgZGVwYXJzaW5nIGNoYXJhY3RlciBlbGVtZW50cyIKbXNnc3RyICInZGVwYXJzZVJkJyBuZSBwZXV0IGTpY29kZXIgcXVlIGRlcyDpbOltZW50cyB0ZXh0dWVscyIKCiM6IGdyYW1SZC5jOjQzODUKbXNnaWQgImJhZCBzdGF0ZSIKbXNnc3RyICLpdGF0IGluY29ycmVjdCIKCiM6IGdyYW1SZC5jOjQzOTgKIywgYy1mb3JtYXQKbXNnaWQgImJhZCB0ZXh0IG1vZGUgJWQgaW4gJ2RlcGFyc2VSZCciCm1zZ3N0ciAibW9kZSBkZSB0ZXh0ZSAlZCBlcnJvbukgZGFucyAnZGVwYXJzZVJkJyIKCiM6IGh0dHAuYzozMgptc2dpZCAiaW52YWxpZCBiaW5kIGFkZHJlc3Mgc3BlY2lmaWNhdGlvbiIKbXNnc3RyICJzcOljaWZpY2F0aW9uIGQnYWRyZXNzZSBkZSBsaWVuIGluY29ycmVjdGUiCgojOiBpbnN0YWxsLmM6MTEyIGluc3RhbGwuYzoxMzEgaW5zdGFsbC5jOjEzMwojLCBjLWZvcm1hdAptc2dpZCAiaW52YWxpZCAnJXMnIGFyZ3VtZW50Igptc2dzdHIgImFyZ3VtZW50ICclcycgaW5jb3JyZWN0IgoKIzogaW5zdGFsbC5jOjE2Mgptc2dpZCAid3JpdGUgZXJyb3IgZHVyaW5nIGZpbGUgYXBwZW5kIgptc2dzdHIgImVycmV1ciBlbiDpY3JpdHVyZSBsb3JzIGR1IHJham91dCBkYW5zIHVuIGZpY2hpZXIiCgojOiBzaWduYWxzLmM6NDIKbXNnaWQgInBza2lsbCgpIGlzIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBwbGF0Zm9ybSIKbXNnc3RyICJwc2tpbGwoKSBuJ2VzdCBwYXMgc3VwcG9ydOkgc3VyIGNldHRlIHBsYXRlZm9ybWUiCgojOiBzaWduYWxzLmM6MTQwCm1zZ2lkICJwc25pY2UoKSBpcyBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgcGxhdGZvcm0iCm1zZ3N0ciAicHNuaWNlKCkgbidlc3QgcGFzIHN1cHBvcnTpIHN1ciBjZXR0ZSBwbGF0ZWZvcm1lIgoKIzogdGV4dC5jOjY3Cm1zZ2lkICJpbnZhbGlkIGFyZ3VtZW50IHR5cGUiCm1zZ3N0ciAidHlwZSBkJ2FyZ3VtZW50IGluY29ycmVjdCIKCiM6IHRleHQuYzoyMjUgdGV4dC5jOjI0Nwptc2dpZCAib3V0IG9mIG1lbW9yeSIKbXNnc3RyICJwbHVzIGRlIG3pbW9pcmUgZGlzcG9uaWJsZSIK