VGhpcyBmaWxlIGNvbnRhaW5zIGEgbGlzdCBvZiBwZW9wbGUgd2hvIGFyZSByZXNwb25zaWJsZSBmb3IgY2VydGFpbiBwYXJ0cyBvZgp0aGUgSEFQcm94eSBwcm9qZWN0IGFuZCB3aG8gaGF2ZSBhdXRob3JpdHkgb24gdGhlbS4gVGhpcyBtZWFucyB0aGF0IHRoZXNlCnBlb3BsZSBoYXZlIHRvIGJlIGNvbnN1bHRlZCBiZWZvcmUgZG9pbmcgYW55IGNoYW5nZSBpbiB0aGUgcGFydHMgdGhleSBtYWludGFpbiwKaW5jbHVkaW5nIHdoZW4gZml4aW5nIGJ1Z3MuIFRoZXNlIHBlcnNvbnMgYXJlIGFsbG93ZWQgdG8gcmVqZWN0IGFueSBjaGFuZ2Ugb24KdGhlIHBhcnRzIHRoZXkgbWFpbnRhaW4sIGFuZCBpbiBwYXJhbGxlbCB0aGV5IHRyeSB0aGVpciBiZXN0IHRvIGVuc3VyZSB0aGVzZQpwYXJ0cyB3b3JrIHdlbGwuIFNpbWlsYXJseSwgYW55IGNoYW5nZSB0byB0aGVzZSBwYXJ0cyBub3QgYmVpbmcgdmFsaWRhdGVkIGJ5CnRoZW0gd2lsbCBiZSByZWplY3RlZC4KClRoZSBiZXN0IHdheSB0byBkZWFsIHdpdGggc3VjaCBzdWJzeXN0ZW1zIHdoZW4gc2VuZGluZyBwYXRjaGVzIGlzIHRvIHNlbmQgdGhlCnBhdGNoZXMgdG8gdGhlIG1haWxpbmcgbGlzdCBhbmQgdG8gQ0MgdGhlc2UgcGVvcGxlLiBXaGVuIG5vIG1haW50YWluZXIgaXMKbGlzdGVkIGZvciBhIHN1YnN5c3RlbSwgeW91IGNhbiBzaW1wbHkgc2VuZCB5b3VyIGNoYW5nZXMgdGhlIHVzdWFsIHdheSwgYW5kIGl0CmlzIGFsc28gYSBzaWduIHRoYXQgaWYgeW91IHdhbnQgdG8gc3RyZW5ndGhlbiB5b3VyIHNraWxscyBvbiBjZXJ0YWluIHBhcnRzIHlvdQpjYW4gYmVjb21lIHlvdXJzZWxmIGEgbWFpbnRhaW5lciBvZiB0aGUgcGFydHMgeW91IGNhcmUgYSBsb3QgYWJvdXQuCgpQbGVhc2UgZG8gbm90IGFzayB0aGVtIHRvIHRyb3VibGVzaG9vdCB5b3VyIGJ1Z3MsIGl0J3Mgbm90IHRoZWlyIGpvYiBldmVudGhvdWdoCnRoZXkgbWF5IG9jY2FzaW9uYWxseSBoZWxwIGFzIHRpbWUgcGVybWl0cy4KCkxpc3Qgb2YgbWFpbnRhaW5lcnMKLS0tLS0tLS0tLS0tLS0tLS0tLQoKTHVhCk1haW50YWluZXI6IFRoaWVycnkgRm91cm5pZXIgPHRmb3VybmllckBhcnBhbGVydC5vcmc+CkZpbGVzOiBzcmMvaGx1YS5jLCBpbmNsdWRlLyovaGx1YS5oCgpNYXBzIGFuZCBwYXR0ZXJuIG1hdGNoaW5nCk1haW50YWluZXI6IFRoaWVycnkgRm91cm5pZXIgPHRmb3VybmllckBhcnBhbGVydC5vcmc+CkZpbGVzOiBzcmMvbWFwcy5jLCBzcmMvcGF0dGVybi5jLCBpbmNsdWRlLyovbWFwcy5oLCBpbmNsdWRlLyovcGF0dGVybi5oCgpETlMKTWFpbnRhaW5lcjogQmFwdGlzdGUgQXNzbWFubiA8YmVkaXM5QGdtYWlsLmNvbT4KRmlsZXM6IHNyYy9kbnMuYywgaW5jbHVkZS8qL2Rucy5oCgpTU0wKTWFpbnRhaW5lcjogRW1lcmljIEJydW4gPGVicnVuQGhhcHJveHkuY29tPgpGaWxlczogc3JjL3NzbF9zb2NrLmMsIGluY2x1ZGUvKi9zc2xfc29jay5oCgpQRUVSUwpNYWludGFpbmVyOiBFbWVyaWMgQnJ1biA8ZWJydW5AaGFwcm94eS5jb20+CkZpbGVzOiBzcmMvcGVlcnMuYywgaW5jbHVkZS8qL3BlZXJzLmgKCkRPQyB0byBIVE1MIGNvbnZlcnRlciAoZGNvbnYpCk1haW50YWluZXI6IEN5cmlsIEJvbnTpIDxjeXJpbC5ib250ZUBmcmVlLmZyPgpGaWxlczogZG9jLyoudHh0Ck5vdGU6IGFzayBDeXJpbCBiZWZvcmUgY2hhbmdpbmcgYW55IGRvYydzIGZvcm1hdCBvciBzdHJ1Y3R1cmUuCgo=