MjAwMS0xMi0xNyAgSm9zZXBoIFMuIE15ZXJzICA8anNtMjhAY2FtLmFjLnVrPgoKCSogZ2NqLnRleGk6IFVwZGF0ZSBsaW5rIHRvIEdDQyBtYW51YWwuCgoyMDAxLTEyLTE3ICBUb20gVHJvbWV5ICA8dHJvbWV5QHJlZGhhdC5jb20+CgoJKiBwYXJzZS55IChsaW5rX25lc3RlZF9jbGFzc190b19lbmNsb3NpbmcpOiBSZW1vdmVkIHVzZWxlc3MKCXN0YXRlbWVudC4KCjIwMDEtMTItMTYgIFRvbSBUcm9tZXkgIDx0cm9tZXlAcmVkaGF0LmNvbT4KCgkqIG1hbmdsZS5jIChtYW5nbGVfbWV0aG9kX2RlY2wpOiBOZXZlciBlbWl0IGBDMicgY29uc3RydWN0b3IuCglGaXhlcyBQUiBqYXZhLzUwODguCgoyMDAxLTEyLTE2ICBKb3NlcGggUy4gTXllcnMgIDxqc20yOEBjYW0uYWMudWs+CgoJKiBDaGFuZ2VMb2csIE1ha2UtbGFuZy5pbiwgY2xhc3MuYywgZXhwci5jLCBnY2oudGV4aSwgamF2YS10cmVlLmgsCglqY2YtcGFyc2UuYywgamNmLXdyaXRlLmMsIGxleC5jLCBwYXJzZS5oLCBwYXJzZS55LCB2ZXJpZnkuYzogRml4CglzcGVsbGluZyBlcnJvcnMuCgoyMDAxLTEyLTE2ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBsZXguYyAoamF2YV9yZWFkX3VuaWNvZGUsIGphdmFfbGV4KTogVXNlIGhleF9wL2hleF92YWx1ZS4KCjIwMDEtMTItMTYgIEJyeWNlIE1jS2lubGF5ICA8YnJ5Y2VAd2FpdGFraS5vdGFnby5hYy5uej4KCgkqIGRlY2wuYyAoamF2YV9pbml0X2RlY2xfcHJvY2Vzc2luZyk6IEJ1aWxkIG90YWJsZV90eXBlIGNvcnJlY3RseS4KCW90YWJsZV9kZWNsIGlzIGFuIG90YWJsZV90eXBlLgoKMjAwMS0xMi0xNSAgQnJ5Y2UgTWNLaW5sYXkgIDxicnljZUB3YWl0YWtpLm90YWdvLmFjLm56PgoKCSogamF2YS10cmVlLmggKG90YWJsZV9tZXRob2RzLCBvdGFibGVfZGVjbCwgb3RhYmxlX3N5bXNfZGVjbCwKCW90YWJsZV90eXBlLCBvdGFibGVfcHRyX3R5cGUsIG1ldGhvZF9zeW1ib2xfdHlwZSwgCgltZXRob2Rfc3ltYm9sc19hcnJheV90eXBlLCBtZXRob2Rfc3ltYm9sc19hcnJheV9wdHJfdHlwZSk6IE5ldwoJZmllbGQvZ2xvYmFsIHRyZWUgZGVmaW5pdGlvbnMuCgkoZmxhZ19pbmRpcmVjdF9kaXNwYXRjaCk6IE5ldyBmbGFnLgoJKiBkZWNsLmMgKGphdmFfaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBJbml0aWFsaXplIG5ldyBvdGFibGUgYW5kIAoJb3RhYmxlX3N5bXMgdHlwZSBub2RlcyBhbmQgZGVjbHMuIEFkZCBuZXcgZmllbGQgImluZGV4IiB0bwoJbWV0aG9kX3R5cGVfbm9kZS4KCSogY2xhc3MuYyAoYnVpbGRfbWV0aG9kX3N5bWJvbHNfZW50cnkpOiBOZXcgZnVuY3Rpb24uCgkobWFrZV9tZXRob2RfdmFsdWUpOiBTZXQgImluZGV4IiB0byB0byBtZXRob2QncyB2dGFibGUgaW5kZXggZm9yCgl2aXJ0dWFsIG1ldGhvZHMgd2hlbiBpbmRpcmVjdC1kaXNwYXRjaCBpcyBub3QgdXNlZC4KCShtYWtlX2NsYXNzX2RhdGEpOiBGb3IgaW5kaXJlY3QtZGlzcGF0Y2gsIGRvbid0IGVtaXQgdGhlIGR0YWJsZV9kZWNsLAoJYW5kIHNldCB2dGFibGVfbWV0aG9kX2NvdW50IHRvIC0xLiBTZXQgb3RhYmxlIGFuZCBvdGFibGVfc3ltcyBmaWVsZAoJaWYgaW5kaXJlY3QtZGlzcGF0Y2ggaXMgdXNlZCBhbmQgdGhlcmUgd2FzIHNvbWV0aGluZyB0byBwdXQgaW4gdGhlbS4KCShidWlsZF9tZXRob2Rfc3ltYm9sc19lbnRyeSk6IE5ldyBmdW5jdGlvbi4KCShlbWl0X29mZnNldF9zeW1ib2xfdGFibGUpOiBOZXcgZnVuY3Rpb24uCgkqIGV4cHIuYyAoZ2V0X29mZnNldF90YWJsZV9pbmRleCk6IE5ldyBmdW5jdGlvbi4KCShidWlsZF9pbnZva2V2aXJ0dWFsKTogQnVpbGQgYXJyYXkgcmVmZXJlbmNlIHRvIG90YWJsZSBhdCB0aGUgaW5kZXggCglyZXR1cm5lZCBieSBnZXRfb2Zmc2V0X3RhYmxlX2luZGV4LCBhbmQgdXNlIHRoZSByZXN1bHQgYXMgdGhlIHZ0YWJsZQoJb2Zmc2V0LgoJKGJ1aWxkX2ludm9rZWludGVyZmFjZSk6IFNpbWlsYXIuCgkqIGpjZi1wYXJzZS5jICh5eXBhcnNlKTogSWYgaW5kaXJlY3QtZGlzcGF0Y2gsIGNhbGwgCgllbWl0X29mZnNldF9zeW1ib2xfdGFibGUgYXQgdGhlIGVuZCBvZiBjb21waWxhdGlvbiwgYWZ0ZXIgYWxsIGNsYXNzZXMgCgloYXZlIGJlZW4gZ2VuZXJhdGVkLgoJKiBqdnNwZWMuYzogRG9uJ3QgcGFzcyBmaW5kaXJlY3QtZGlzcGF0Y2ggdG8ganZnZW5tYWluLgoJKiBsYW5nLmMgKGZsYWdfaW5kaXJlY3RfZGlzcGF0Y2gpOiBEZWZpbmUuCgkobGFuZ19mX29wdGlvbnMpOiBBZGQgaW5kaXJlY3QtZGlzcGF0Y2ggZmxhZy4KCjIwMDEtMTItMTQgIE1hdHRoaWFzIEtsb3NlICA8ZG9rb0BkZWJpYW4ub3JnPgoKCSogZ2NqLnRleGk6IE1hcmt1cCBmb3IgbWFuIHBhZ2UgZ2VuZXJhdGlvbi4gRG9jdW1lbnQgbWlzc2luZwoJb3B0aW9ucyBwcmludGVkIGJ5IDx0b29sPiAtLWhlbHAuCglUZXJtaW5hdGUgZGVzY3JpcHRpb24gb2YgZ2lqJ3MgLW1zIG9wdGlvbiB3aXRoIGEgZG90LgoJKiBNYWtlLWxhbmcuaW4gKCQoc3JjZGlyKS9qYXZhLyouMSk6IE5ldyB0YXJnZXRzLgoJKGphdmEuZ2VuZXJhdGVkLW1hbnBhZ2VzIGphdmEuaW5zdGFsbC1tYW4sIGphdmEudW5pbnN0YWxsLAoJamF2YS1tYWludGFpbmVyLWNsZWFuKSBVcGRhdGVkLgoKMjAwMS0xMi0xNCAgSGFucyBCb2VobSAgPEhhbnNfQm9laG1AaHAuY29tPgoKCSogY2xhc3MuYyAoZ2V0X2Rpc3BhdGNoX3RhYmxlKTogRml4IGphdmEgdnRhYmxlIGxheW91dAoJZm9yIFRBUkdFVF9WVEFCTEVfVVNFU19ERVNDUklQVE9SUy4KCSogZGVjbC5jIChqYXZhX2luaXRfZGVjbF9wcm9jZXNzaW5nKTogSW5pdGlhbGl6ZQoJYWxsb2Nfbm9fZmluYWxpemVyX25vZGUsIGZpbmFsaXplX2lkZW50aWZpZXJfbm9kZS4KCSogZXhwci5jIChjbGFzc19oYXNfZmluYWxpemVfbWV0aG9kKTogTmV3IGZ1bmN0aW9uLgoJKGV4cGFuZF9qYXZhX05FVyk6IEdlbmVyYXRlIGNhbGxzIGZvciBmaW5hbGl6ZXItZnJlZSBhbGxvY2F0aW9uLgoJKGJ1aWxkX2ludm9rZXZpcnR1YWwpOiBGaXggamF2YSB2dGFibGUgbGF5b3V0IGZvcgoJVEFSR0VUX1ZUQUJMRV9VU0VTX0RFU0NSSVBUT1JTLgoJKiBqYXZhLXRyZWUuaCAoZW51bSBqYXZhX3RyZWVfaW5kZXgpOiBOZXcgZW50cmllczogCglKVElfQUxMT0NfTk9fRklOQUxJWkVSX05PREUsIEpUSV9GSU5BTElaRV9JREVOVElGSUVSX05PREUuCgkoYWxsb2Nfbm9fZmluYWxpemVyX25vZGUsIGZpbmFsaXplX2RlaW50aWZpZXJfbm9kZSk6IE5ldyBtYWNyb3MuCgkoY2xhc3NfaGFzX2ZpbmFsaXplX21ldGhvZCk6IGRlY2xhcmUuCgkoSEFTX0ZJTkFMSVpFUl9QKTogTmV3IG1hY3JvLgoJKiBwYXJzZS55IChwYXRjaF9pbnZva2UpOiBHZW5lcmF0ZSBjYWxscyBmb3IgZmluYWxpemVyLWZyZWUKCWFsbG9jYXRpb24uCgoyMDAxLTEyLTEyICBNYXR0aGlhcyBLbG9zZSAgPGRva29AZGViaWFuLm9yZz4KCgkqIE1ha2UtbGFuZy5pbjogSkFWQV9JTlNUQUxMX05BTUUsIEpBVkFfQ1JPU1NfTkFNRTogUmVtb3ZlCgl3aGl0ZXNwYWNlIGF0IGVuZCBvZiBsaW5lLgoKMjAwMS0xMi0xMSAgVG9tIFRyb21leSAgPHRyb21leUByZWRoYXQuY29tPgoKCSogbGV4LmMgKGphdmFfaW5pdF9sZXgpOiBEZWZpbmUgd2ZsX3RvX3N0cmluZyBhcwoJZ251Lmdjai5ydW50aW1lLlN0cmluZ0J1ZmZlciB1bmxlc3MgZ2VuZXJhdGluZyBieXRlY29kZS4KCjIwMDEtMTItMTEgIEplZmYgU3R1cm0gIDxqc3R1cm1Ab25lLXBvaW50LmNvbT4KCgkqIGNsYXNzLmMgKG1ha2VfbWV0aG9kX3ZhbHVlKTogVXNlIG51bGxfcG9pbnRlcl9ub2RlIHRvCglyZXByZXNlbnQgZW1wdHkgZXhjZXB0aW9uIHRhYmxlLgoKMjAwMS0xMi0xMCAgVG9tIFRyb21leSAgPHRyb21leUByZWRoYXQuY29tPgoKCSogY2hlY2staW5pdC5jIChjaGVja19pbml0KSBbU1dJVENIX0VYUFJdOiBVc2UgU1dJVENIX0hBU19ERUZBVUxULgoKTW9uIERlYyAxMCAwNjowOTo1NyAyMDAxICBEb3VnbGFzIEIuIFJ1cHAgIDxydXBwQGduYXQuY29tPgoKCSogTWFrZS1sYW5nLmluIChqdnNwZWMubyk6IEFkZCAkKE9VVFBVVF9PUFRJT04pLgoKMjAwMS0xMi0wOSAgUGVyIEJvdGhuZXIgIDxwZXJAYm90aG5lci5jb20+CgoJKiBjaGVjay1pbml0LmMgKGN1cnJlbnRfc3dpdGNoX2hhc19kZWZhdWx0KTogIE5ldyBzdGF0aWMgZmllbGQuCgkoY2hlY2tfaW5pdCk6ICBDYXNlIERFRkFVTFRfRVhQUjogU2V0IGN1cnJlbnRfc3dpdGNoX2hhc19kZWZhdWx0LgoJQ2FzZSBTV0lUQ0hfRVhQUjogIFNhdmUvcmVzdG9yZSBjdXJyZW50X3N3aXRjaF9oYXNfZGVmYXVsdC4gIElmIG5vCglERUZBVUxUX0VYUFIgc2Vlbiwgc2ltdWxhdGUgYSBkZWZhdWx0IGFsdGVybmF0aXZlIHRoYXQgY29waWVzIHN0YXRlLgoKMjAwMS0xMi0wOSAgVG9tIFRyb21leSAgPHRyb21leUByZWRoYXQuY29tPgoKCSogY2hlY2staW5pdC5jIChjaGVja19pbml0KTogRG9uJ3QgYWxsb3cgcHJlLSBvciBwb3N0LSBpbmNyZW1lbnQKCW9yIGRlY3JlbWVudCBvZiBmaW5hbCB2YXJpYWJsZS4KCShmaW5hbF9hc3NpZ25fZXJyb3IpOiBNaW5vciBlcnJvciBtZXNzYWdlIHJld29yZGluZy4KCjIwMDEtMTItMDggIFRvbSBUcm9tZXkgIDx0cm9tZXlAcmVkaGF0LmNvbT4KCgkqIGphdmEtdHJlZS5oOiBGaXhlZCB0eXBvLgoKCSogZ2phdmFoLmMgKGRlY29tcGlsZV9tZXRob2QpOiBEb24ndCBkZWNvbXBpbGUgdG8gYHJldHVybiB0aGlzJwoJZm9yIHN0YXRpYyBtZXRob2RzLgoKCSogZ2phdmFoLmMgKGN4eF9rZXl3b3Jkcyk6IFJlLXNvcnRlZC4KCSogbGV4LmMgKGN4eF9rZXl3b3Jkcyk6IFJlLXNvcnRlZC4KCgkqIGdqYXZhaC5jIChIQU5ETEVfTUVUSE9EKTogU2V0IGBkZWNvbXBpbGVkJyBiZWZvcmUgZG9pbmcgYW55dGhpbmcKCWVsc2UuCgoJKiBnamF2YWguYyAocHJpbnRfbmFtZWxldCk6IENsZWFyIHN1Ym5hbWVsZXRzLgoJKEhBTkRMRV9NRVRIT0QpOiBTZXQgYG1ldGhvZF9wcmludGVkJyBlYXJsaWVyLgoKMjAwMS0xMi0wNyAgVG9tIFRyb21leSAgPHRyb21leUByZWRoYXQuY29tPgoKCSogbGFuZy5jIChsYW5nX2Zfb3B0aW9ucyk6IEFkZGVkCglvcHRpbWl6ZS1zdGF0aWMtY2xhc3MtaW5pdGlhbGl6YXRpb24uCgkoamF2YV9kZWNvZGVfb3B0aW9uKTogUmVtb3ZlZCBzcGVjaWFsIGNhc2UuCgoyMDAxLTEyLTA3ICBQZXIgQm90aG5lciAgPHBlckBib3RobmVyLmNvbT4KCgkqIGNoZWNrLWluaXQuYyAoY2hlY2tfaW5pdCk6ICBGaXggdHlwbyBmcmVlaW5nIG1lbW9yeSB0d2ljZS4KCjIwMDEtMTItMDUgIFBlciBCb3RobmVyICA8cGVyQGJvdGhuZXIuY29tPgoKCVJlc3RvcmUgc3VwcG9ydCBmb3Igc3RhdGljIGNsYXNzIGluaXRpYWxpemF0aW9uIG9wdGltaXphdGlvbi4KCSogamF2YS10cmVlLmggKFNUQVRJQ19DTEFTU19JTklUX09QVF9QKTogUmUtZW5hYmxlLgoJKiBjaGVjay1pbml0LmMgKGNoZWNrX2ludCk6ICBBdCBlbmQgb2YgQkxPQ0sgaGFuZGxlIGluaXRpYWxpemF0aW9uCglibG9ja3MsIHdoaWNoIHVzZWQgdG8gYmUgZG9uZSBpbiBqYXZhX2NvbXBsZXRlX2V4cGFuZF9tZXRob2QgYnV0IGRpZAoJbm90IGhhbmRsZSB0aGUgY2FzZSB3aGVyZSBjaGVja19mb3JfaW5pdGlhbGl6YXRpb24gbWlnaHQgYWxsb2NhdGUKCW1vcmUgdGhhbiBhIHdvcmQgb2YgYml0cy4KCSogZGVjbC5jIChsYW5nX21ha2VfdHJlZSk6ICBUaGUgc21pYyBmaWVsZCBpcyBub3cgYSB0cmVlLgoJKiBleHByLmMgKGJ1aWxkX2NsYXNzX2luaXQpOiAgU2V0IERFQ0xfRlVOQ1RJT05fSU5JVF9URVNUX0NMQVNTIGZpZWxkLgoJKiBqYXZhLXRyZWUuaCAoREVDTF9GVU5DVElPTl9JTklUX1RFU1RfVEFCTEUpOiAgTmV3IG1hY3JvLgoKCSogcGFyc2UueSAoZW1pdF90ZXN0X2luaXRpYWxpemF0aW9uKTogIENvbWJpbmUgaGFzaF9sb29rdXAgY2FsbHMuCgoJKiBqYXZhLXRyZWUuaCAoREVDTF9GVU5DVElPTl9TVEFUSUNfTUVUSE9EX0lOVk9DQVRJT05fQ09NUE9VTkQpOgoJQ2hhbmdlIGZyb20gYSBoYXNoIHRhYmxlIHRvIGEgbGlzdC4KCShzdHJ1Y3RfbGFuZ19kZWNsKTogIENoYW5nZSBmaWVsZCAnc21pYycgdG8gbWF0Y2guCgkqIGNsYXNzLmMgKGFkZF9tZXRob2RfMSk6ICBJbml0aWFsaXplCglERUNMX0ZVTkNUSU9OX1NUQVRJQ19NRVRIT0RfSU5WT0NBVElPTl9DT01QT1VORCB0byBudWxsIGxpc3QuCgkqIHBhcnNlLnkgKGFkanVzdF9pbml0X3Rlc3RfaW5pdGlhbGl6YXRpb24pOiAgUmVtb3ZlZCAtIGlubGluZWQgaW50byAtCgkoamF2YV9leHBhbmRfbWV0aG9kX2JvZGllcyk6IC1oZXJlLCBzaW5jZSAnc21pYycgaXMgbm93IGEgbGlzdC4KCShwYXRjaF9pbnZva2UpOiAgQWRkIHRvICdzbWljJyBsaXN0LCBpbnN0ZWFkIG9mIGhhc2hfbG9va3VwLgoKCSogY2hlY2staW5pdC5jIChXT1JEX1NJWkUpOiAgVXNlIEJJVFNfUEVSX1VOSVQuCgoJKiBjbGFzcy5jIChqYXZhX2hhc2hfY29tcGFyZV90cmVlX25vZGUpOiAgRml4IGNhc3RzLgoKMjAwMS0xMi0wNCAgUGVyIEJvdGhuZXIgIDxwZXJAYm90aG5lci5jb20+CgoJKiBjaGVjay1pbml0LmM6ICAgSGFuZGxlIGRlZmluaXRlIHVuYXNzaWdubWVudCB0byBmaW5hbHMgaW4gYWRkaXRpb24KCXRvIGRlZmluaXRlIGFzc2lnbm1lbnQuCgkobG9vcF9jdXJyZW50X2xvY2Fscyk6ICBOZXcgZmllbGQuCgkobnVtX2N1cnJlbnRfbG9jYWxzLCBpbnQgc3RhcnRfY3VycmVudF9sb2NhbHMsIG51bV9jdXJyZW50X3dvcmRzKToKCU1ha2Ugc3RhdGljLgoJKFNFVF9QLCBDTEVBUl9QLCBTRVRfQklUKTogIEFkZCBuZWVkZWQgYnV0IG1pc3NpbmcgcGFyZW50aGVzZXMuCgkoQVNTSUdORURfUCwgVU5BU1NJR05FRF9QLCBTRVRfQVNTSUdORUQsIFNFVF9VTkFTU0lHTkVELAoJQ0xFQVJfQVNTSUdORUQsIENMRUFSX1VOQVNTSUdORUQpOiAgTmV3IG1hY3Jvcy4KCShnZXRfdmFyaWFibGVfZGVjbCwgY2hlY2tfZmluYWxfcmVhc3NpZ25lZCk6ICBOZXcgZnVuY3Rpb25zLgoJKGNoZWNrX2luaXQsIGNoZWNrX2Jvb2xfaW5pdCk6ICBNb2RpZnkgYXMgbmVlZGVkIGZvciBjaGVja2luZyBmaW5hbHMuCgkoY2hlY2tfZm9yX2luaXRpYWxpemF0aW9uKTogIFRha2UgZXh0cmEgcGFyYW1ldGVyIGFuZCByZXR1cm4gdm9pZC4KCURvIGV4dHJhIHN0YXJ0LXVwIGxvZ2ljIHRvIGNoZWNrIGZpbmFsIGZpZWxkcyBmb3IgYXNzaWdubWVudC4KCSogcGFyc2UueSAoY2hlY2tfc3RhdGljX2ZpbmFsX3ZhcmlhYmxlX2Fzc2lnbm1lbnRfZmxhZywKCXJlc2V0X3N0YXRpY19maW5hbF92YXJpYWJsZV9hc3NpZ25tZW50X2ZsYWcsIGNoZWNrX2ZpbmFsX2Fzc2lnbm1lbnQsCgljaGVja19maW5hbF92YXJpYWJsZV9sb2NhbF9hc3NpZ25tZW50X2ZsYWcsCglyZXNldF9maW5hbF92YXJpYWJsZV9pbmRpcmVjdF9hc3NpZ25tZW50X2ZsYWcsCglyZXNldF9maW5hbF92YXJpYWJsZV9nbG9iYWxfYXNzaWdubWVudF9mbGFnKTogIFJlbW92ZSBmdW5jdGlvbnMuCgkoamF2YV9jb21wbGV0ZV9leHBhbmRfbWV0aG9kcywgb3V0ZXJfZmllbGRfYWNjZXNzX2ZpeCwKCXBhdGNoX2Fzc2lnbm1lbnQpOiBSZW1vdmUgbm8tbG9uZ2VyIHVzZWQgbG9naWMuCgkqIGphdmEtdHJlZS5oIChERUNMX0ZJRUxEX0ZJTkFMX0lVRCk6ICBDaGFuZ2UgdXNhZ2UgYW5kIGNvbW1lbnRzLgoJKiBwYXJzZS55IChyZWdpc3Rlcl9maWVsZHMsIGphdmFfY29tcGxldGVfdHJlZSk6ICBVcGRhdGUgYWNjb3JkaW5nbHkuCgoJKiBjaGVjay1pbml0LmMgKEFMTE9DX1dPUkRTL0ZSRUVfV09SRFMpOiAgVXNlIHhtYWxsb2MvZnJlZSwgbm90IGFsbG9jYS4KCShERUNMQVJFX0JVRkZFUlMsIFJFTEVBU0VfQlVGRkVSUywgQUxMT0NfQlVGRkVSLCBGUkVFX0JVRkZFUik6ICBOZXcuCgkoY2hlY2tfY29uZF9pbml0LCBjaGVja19ib29sMl9pbml0KTogIFVzZSBERUNMQVJFX0JVRkZFUlMuCgoJKiBqYXZhLXRyZWUuaCAoU1RBVElDX0NMQVNTX0lOSVRfT1BUX1ApOiAgVGVtcG9yYXJpbHkgdHVybiBvZmYuCgoJKiBqYXZhLXRyZWUuaCAoREVDTCBGSU5BTCk6ICBOZXcgYml0LWZpZWxkLgoJKE1FVEhPRF9GSU5BTCwgRklFTERfRklOQUwsIENMQVNTX0ZJTkFMKTogIERlZmluZSBhcyBERUNMX0ZJTkFMLgoJKExPQ0FMX0ZJTkFMX1ApOiAgVXNlIERFQ0xfRklOQUwgcmF0aGVyIHRoYW4gb2xkIExPQ0FMX0ZJTkFMLgoJKERFQ0xfSU5JVF9DQUxMU19USElTKTogIE5ldyBtYWNyby4KCShzdHJ1Y3QgbGFuZ19kZWNsKTogIE5ldyBiaXQtZmllbGQgaW5pdF9jYWxsc190aGlzLgoJKERFQ0xfRlVOQ1RJT05fQUxMX0ZJTkFMX0lOSVRJQUxJWkVELCBERUNMX0ZJRUxEX0ZJTkFMX0xJSUMsCglERUNMX0ZJRUxEX0ZJTkFMX0lFUlIsIExPQ0FMX0ZJTkFMLCBUWVBFX0hBU19GSU5BTF9WQVJJQUJMRQoJKERFQ0xfQklUX0lOREVYKTogIENoYW5nZSB0byB1c2UgcG9pbnRlcl9hbGlhc19zZXQgc2luY2Ugd2Ugbm93Cgl1c2UgaXQgZm9yIGJvdGggbG9jYWwgdmFyaWFibGVzIGFuZCBmaW5hbCBmaWVsZHMuCgkoc3RydWN0IGxhbmdfZGVjbF92YXIpOiAgUmVtb3ZlIGJpdC1maWVsZHMgZmluYWxfbGlpYywgZmluYWxfaWVyciwKCWFuZCBsb2NhbF9maW5hbC4KCShzdHJ1Y3QgbGFuZ190eXBlKTogIFJlbW92ZSBoZnYgYml0LWZpZWxkLgoJKGNoZWNrX2Zvcl9pbml0aWFsaXphdGlvbik6ICBDaGFuZ2UgdG8gcmV0dXJuIHZvaWQuCgoJKiBqYXZhLXRyZWUuaCAoSVNfQVJSQVlfTEVOR1RIX0FDQ0VTUyk6ICBOZXcgbWFjcm9zLgoJKiBleHByLmMgKGJ1aWxkX2phdmFfYXJyYXlfbGVuZ3RoX2FjY2Vzcyk6ICBTZXQgSVNfQVJSQVlfTEVOR1RIX0FDQ0VTUy4KCSogY2hlY2staW5pdC5jIChmaW5hbF9hc3NpZ25fZXJyb3IpOiAgTmV3IGhlbHBlciBmdW5jdGlvbi4KCShjaGVja19maW5hbF9yZWFzc2lnbmVkLCBjaGVja19pbml0KTogIFVzZSBpdC4KCShjaGVja19pbml0KTogIEFsc28gY2hlY2sgSVNfQVJSQVlfTEVOR1RIX0FDQ0VTUyBmb3IgQVJSQVkubGVuZ3RoLgoJCgkqIGphdmEtdHJlZS5oIChzdHJ1Y3QgbGFuZ19kZWNsLCBzdHJ1Y3QgbGFuZ19kZWNsX3Zhcik6ICBDaGFuZ2UgYWxsCgliaXQtZmllbGRzIHRvIHVuc2lnbmVkLgoKMjAwMS0xMi0wMyAgUGVyIEJvdGhuZXIgIDxwZXJAYm90aG5lci5jb20+CgoJKiBwYXJzZS55IChwYXRjaF9iaW5vcCk6ICBNaW5vciBjb25zdGFudCBmb2xkaW5nLgoKCSogcGFyc2UueSAoYnVpbGRfY3VycmVudF90aGlzbik6ICBTaG9ydGVyICdidWZmZXInLgoKMjAwMS0xMi0wMyAgUGVyIEJvdGhuZXIgIDxwZXJAYm90aG5lci5jb20+CgoJKiBkZWNsLmMgKGNvbXBsZXRlX3N0YXJ0X2phdmFfbWV0aG9kKTogIE5vdyBnZW5lcmF0ZSBUUllfRklOQUxMWV9FWFBSCglpbnN0ZWFkIG9mIENMRUFOVVBfUE9JTlRfRVhQUiBhbmQgV0lUSF9DTEVBTlVQX0VYUFIuCgkqIGpjZi13cml0ZS5jIChnZW5lcmF0ZV9ieXRlY29kZV9pbnNucyk6ICBSZW1vdmUgc3VwcG9ydCBmb3IKCUNMRUFOVVBfUE9JTlRfRVhQUiBhbmQgV0lUSF9DTEVBTlVQX0VYUFIgYXMgdGhleSBhcmUgbm8gbG9uZ2VyIHVzZWQuCgkqIGNoZWNrLWluaXQuYyAoY2hlY2tfaW5pdCk6ICBMaWtld2lzZS4KCjIwMDEtMTItMDMgIFBlciBCb3RobmVyICA8cGVyQGJvdGhuZXIuY29tPgoKCSogdmVyaWZ5LmMgKHN1YnJvdXRpbmVfbmVzdGluZyk6ICBOZXcgZnVuY3Rpb24uCgkodmVyaWZ5X2p2bV9pbnN0cnVjdGlvbnMpOiAgVXNlIGl0IHRvIGZpeCBsb2dpYyBmb3IgY2hlY2tpbmcgdGhhdAoJd2UncmUgZG9uZSB3aXRoIHRoZSBjdXJyZW50IHN1YnJvdXRpbmUuCgoJKiB2ZXJpZnkuYyAodmVyaWZ5X2p2bV9pbnN0cnVjdGlvbik6IEZvciBPUENPREVfY2hlY2tjYXN0IGFuZAoJT1BDT0RFX2luc3RhbmNlb2YgdXNlIFBPUF9UWVBFIG1hY3JvIGZvciBiZXR0ZXIgZGlhZ25vc3RpY3MuCgoyMDAxLTEyLTAzICBQZXIgQm90aG5lciAgPHBlckBib3RobmVyLmNvbT4KCgkqIGpjZi5oOiAgRml4IG9idmlvdXMgdHlwbyBpbiBjb21tZW50LgoJKiB0eXBlY2suYyAoYnVpbGRfbnVsbF9zaWduYXR1cmUpOiAgQWRkIGNvbW1lbnQuCgoyMDAxLTEyLTAzICBOZWlsIEJvb3RoICA8bmVpbEBkYWlrb2t1eWEuZGVtb24uY28udWs+CgoJKiBleHByLmM6IFJlbW92ZSBsZWFkaW5nIGNhcGl0YWwgZnJvbSBkaWFnbm9zdGljIG1lc3NhZ2VzLCBhcwoJcGVyIEdOVSBjb2Rpbmcgc3RhbmRhcmRzLgoJKiBqY2YtaW8uYzogU2ltaWxhcmx5LgoJKiBqY2YtcGFyc2UuYzogU2ltaWxhcmx5LgoJKiBqdi1zY2FuLmM6IFNpbWlsYXJseS4KCSoganZzcGVjLmM6IFNpbWlsYXJseS4KCSogbWFuZ2xlLmM6IFNpbWlsYXJseS4KCjIwMDEtMTItMDIgIFRhbmcgQ2hpbmctSHVpICA8bmljaG9sYXNAY3MubnRodS5lZHUudHc+CgkgICAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQHJlZGhhdC5jb20+CgoJKiBleHByLmMgKGJ1aWxkX2phdmFfYXJyYXlhY2Nlc3MpOiBDYWxsIHNhdmVfZXhwciBvbiBhcnJheSBmb3IgCgljb3JyZWN0IGV2YWx1YXRpb24gb3JkZXIsIG1vZGlmaWVkIGNvbW1lbnQsIGZpeGVkIGluZGVudGF0aW9uLgoJKiBwYXJzZS55OiAocGF0Y2hfYXNzaWdubWVudCk6IENvcnJlY3RseSBleHRyYWN0IHRoZSBhcnJheSBiYXNlCglmcm9tIHRoZSB0cmVlIGdlbmVyYXRlIGJ5IGJ1aWxkX2phdmFfYXJyYXlhY2Nlc3MsIGFkZGVkIGNvbW1lbnRzLgoJKHBhdGNoX2FycmF5X3JlZik6IFJlbW92ZSBTQVZFX0VYUFIgb24gQVJSQVlfUkVGLgoJRml4ZXMgUFIgamF2YS8zMDk2LCBQUiBqYXZhLzM4MDMsIFBSIGphdmEvMzk2NS4KCjIwMDEtMTItMDEgIE5laWwgQm9vdGggIDxuZWlsQGRhaWtva3V5YS5kZW1vbi5jby51az4KCgkqIGV4cHIuYyAoZXhwYW5kX2J5dGVfY29kZSk6IFJlbW92ZSB0cmFpbGluZyBwZXJpb2RzIGZyb20gbWVzc2FnZXMuCgkqIGpjZi1wYXJzZS5jIChsb2FkX2NsYXNzLCBqY2ZfcGFyc2UpOiBTaW1pbGFybHkuCgkqIGpjZi13cml0ZS5jIChnZW5lcmF0ZV9jbGFzc2ZpbGUpOiBTaW1pbGFybHkuCgkqIGxleC5jIChqYXZhX2xleCk6IFNpbWlsYXJseS4KCjIwMDEtMTEtMzAgIEJyeWNlIE1jS2lubGF5ICA8YnJ5Y2VAd2FpdGFraS5vdGFnby5hYy5uej4KCgkqIGNsYXNzLmMgKGFkZF9pbnRlcmZhY2VfZG8pOiBTZXQgQklORk9fVlBUUl9GSUVMRC4KCjIwMDEtMTEtMjkgIEpvc2VwaCBTLiBNeWVycyAgPGpzbTI4QGNhbS5hYy51az4KCgkqIE1ha2UtbGFuZy5pbiAoamF2YS5nZW5lcmF0ZWQtbWFucGFnZXMpOiBOZXcgZHVtbXkgdGFyZ2V0LgoKMjAwMS0xMS0yNyAgUmFpbmVyIE9ydGggIDxyb0BUZWNoRmFrLlVuaS1CaWVsZWZlbGQuREU+CgoJKiBqdnNwZWMuYyAoanZnZW5tYWluX3NwZWMpOiBDYW5ub3QgdXNlICV1bWFpbiwgYnJlYWtzCglBU01fRklOQUxfU1BFQy4KCShsYW5nX3NwZWNpZmljX3ByZV9saW5rKTogVXNlIHNldF9pbnB1dCB0byBzZXQgaW5wdXRfZmlsZW5hbWUuCglBcHBlbmQgYG1haW4nIGhlcmUuCgkqIGp2Z2VubWFpbi5jICh1c2FnZSk6IEFwcGVuZCBsaXRlcmFsIGBtYWluJyB0byBDTEFTU05BTUUuCgkobWFpbik6IEZpeCBkZWZpbml0aW9uLgoJU3RyaXAgYG1haW4nIGZyb20gY2xhc3NuYW1lLgoJRml4ZXMgUFIgamF2YS8yMjcuCgoyMDAxLTExLTE4ICBSb2dlciBTYXlsZSA8cm9nZXJAZXllc29wZW4uY29tPgoKCSogcGFyc2UuaCAoamF2YV9leHBhbmRfc3dpdGNoKTogUmVtb3ZlIG9sZCBwcm90b3R5cGUuCgoyMDAxLTExLTE4ICBUb20gVHJvbWV5ICA8dHJvbWV5QHJlZGhhdC5jb20+CgoJRml4IGZvciBQUiBqYXZhLzE0MDE6CgkqIGpjZi13cml0ZS5jIChnZW5lcmF0ZV9ieXRlY29kZV9pbnNucykgW2Jpbm9wXTogSGFuZGxlIGNhc2Ugd2hlcmUKCWFyZzAgaXMgbnVsbC4KCShnZW5lcmF0ZV9ieXRlY29kZV9pbnNucykgW01PRElGWV9FWFBSXTogSGFuZGxlIGBPUD0nIGNhc2UKCWNvcnJlY3RseS4KCjIwMDEtMTEtMTggIE5laWwgQm9vdGggIDxuZWlsQGRhaWtva3V5YS5kZW1vbi5jby51az4KCgkqIGxhbmcuYyAoZmluaXNoX3BhcnNlKTogUmVuYW1lIHRvIGphdmFfZmluaXNoLgoJKExBTkdfSE9PS1NfRklOSVNILCBqYXZhX2ZpbmlzaCk6IE5ldy4KCjIwMDEtMTEtMTUgIE5laWwgQm9vdGggIDxuZWlsQGRhaWtva3V5YS5kZW1vbi5jby51az4KCgkqIGRlY2wuYyAoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBSZW5hbWUgamF2YV9pbml0X2RlY2xfcHJvY2Vzc2luZy4KCSogamF2YS10cmVlLmg6IE5ldyBwcm90b3R5cGUuCgkqIGxhbmcuYyAoamF2YV9pbml0KTogVXBkYXRlIHByb3RvdHlwZS4gIENvbWJpbmUgd2l0aCBvbGQgaW5pdF9wYXJzZS4KCjIwMDEtMTEtMTMgIFRvbSBUcm9tZXkgIDx0cm9tZXlAcmVkaGF0LmNvbT4KCgkqIGdqYXZhaC5jIChtZXRob2Rfc2lnbmF0dXJlKTogTmV3IGdsb2JhbC4KCShIQU5ETEVfTUVUSE9EKTogU2V0IGl0LgoJKGRlY29tcGlsZV9yZXR1cm5fc3RhdGVtZW50KTogTmV3IGZ1bmN0aW9uLgoJKGRlY29tcGlsZV9tZXRob2QpOiBVc2UgaXQuCgkocHJpbnRfbWV0aG9kX2luZm8pOiBSZW1vdmVkIGBzeW50aCcgYXJndW1lbnQuCgoyMDAxLTExLTA5ICBOZWlsIEJvb3RoICA8bmVpbEBkYWlrb2t1eWEuZGVtb24uY28udWs+CgoJKiBqYXZhLXRyZWUuaCAoamF2YV9zZXRfeXlkZWJ1Zyk6IE5ldy4KCSogamNmLXBhcnNlLmMgKHNldF95eWRlYnVnKTogUmVuYW1lIGphdmFfc2V0X3l5ZGVidWcuCgkqIGxhbmcuYyAoTEFOR19IT09LU19TRVRfWVlERUJVRyk6IE92ZXJyaWRlLgoJKHByaW50X2xhbmdfZGVjbCwgcHJpbnRfbGFuZ190eXBlLCBwcmludF9sYW5nX2lkZW50aWZpZXIsCglwcmludF9sYW5nX3N0YXRpc3RpY3MsIGxhbmdfcHJpbnRfeG5vZGUpOiBSZW1vdmUuCgoyMDAxLTExLTA5ICBOZWlsIEJvb3RoICA8bmVpbEBkYWlrb2t1eWEuZGVtb24uY28udWs+CgoJKiBqY2YtcGFyc2UuYyAoaW5pdF9sZXgpOiBSZW1vdmUuCgkqIGxhbmcuYyAobGFuZ3VhZ2Vfc3RyaW5nLCBsYW5nX2lkZW50aWZ5KTogUmVtb3ZlLgoJKHN0cnVjdCBsYW5nX2hvb2tzKTogQ29uc3RpZnkuCgkoTEFOR19IT09LU19OQU1FKTogT3ZlcnJpZGUuCgkoaW5pdF9wYXJzZSk6IFVwZGF0ZS4KCjIwMDEtMTEtMDggIEFuZHJlYXMgRnJhbmNrICA8YWZyYW5ja0BnbXguZGU+CgoJKiBNYWtlLWxhbmcuaW4gKEpBVkFfSU5TVEFMTF9OQU1FLCBKQVZBX0NST1NTX05BTUUpOiBIYW5kbGUgCglwcm9ncmFtX3RyYW5zZm9ybV9uYW1lIHRoZSB3YXkgc3VnZ2VzdGVkIGJ5IGF1dG9jb25mLgoJKGphdmEuaW5zdGFsbC1jb21tb24pOiBBbHNvIHRyYW5zZm9ybSBhdXhpbGlhcnkgcHJvZ3JhbSBuYW1lcyB3aXRoCglwcm9ncmFtX3RyYW5zZm9ybV9uYW1lLgoKMjAwMS0xMS0wOCAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgoKCSogcGFyc2UueSAodHJhcF9vdmVyZmxvd19jb3JuZXJfY2FzZSk6IE5ldyBydWxlLgoJKHVuYXJ5X2V4cHJlc3Npb24pOiBVc2UgaXQuCgkqIGxleC5jIChqYXZhX2luaXRfbGV4KTogRG9uJ3Qgc2V0IG1pbnVzX3NlZW4uCgkoeXlsZXgpOiBEb24ndCB1c2UgbWludXNfc2Vlbi4gIENvbW11bmljYXRlIG92ZXJmbG93IHRvIHBhcnNlciBmb3IKCWl0IHRvIGhhbmRsZS4KCShlcnJvcl9pZl9udW1lcmljX292ZXJmbG93KTogTmV3IGZ1bmN0aW9uLgoJKiBwYXJzZS5oIChtaW51c19zZWVuKTogUmVtb3ZlZCBmaWVsZC4KCShKQVZBX1JBRElYMTBfRkxBRyk6IE5ldyBkZWZpbmUuCgoyMDAxLTExLTA3ICBUb20gVHJvbWV5ICA8dHJvbWV5QHJlZGhhdC5jb20+CgoJUGF0Y2ggZm9yIFBSIGphdmEvMTQxNDoKCSogcGFyc2UueSAoY2FzZV9sYWJlbF9saXN0KTogTmV3IGdsb2JhbC4KCShnb2FsKTogUmVnaXN0ZXIgY2FzZV9sYWJlbF9saXN0IHdpdGggR0MuCgkoamF2YV9jb21wbGV0ZV9saHMpOiBTYXZlIG5ldyBjYXNlIG9uIGNhc2VfbGFiZWxfbGlzdC4KCShwYXRjaF9zd2l0Y2hfc3RhdGVtZW50KTogQ2hlY2sgZm9yIGR1cGxpY2F0ZSBjYXNlIGxhYmVscy4KCjIwMDEtMTEtMDcgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0ByZWRoYXQuY29tPgoKCSogcGFyc2UueSAocGF0Y2hfYXNzaWdubWVudCk6IFJlbW92ZWQgdW51c2VkIHRoaXJkIGFyZ3VtZW50LgoJKGphdmFfY29tcGxldGVfbGhzKTogUmVtb3ZlZCB1bnVzZWQgdGhpcmQgYXJndW1lbnQgdG8gcGF0Y2hfYXNzaWdubWVudC4KCjIwMDEtMTEtMDYgIE5laWwgQm9vdGggIDxuZWlsQGNhdC5kYWlrb2t1eWEuZGVtb24uY28udWs+CgoJKiBsYW5nLmM6IEluY2x1ZGUgbGFuZ2hvb2tzLWRlZi5oLgoJKiBNYWtlLWxhbmcuaW46IFVwZGF0ZS4KCjIwMDEtMTAtMzEgIFphY2sgV2VpbmJlcmcgIDx6YWNrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiBNYWtlLWxhbmcuaW46IFJlcGxhY2UgJChJTlRMX1RBUkdFVFMpIHdpdGggcG8tZ2VuZXJhdGVkLgoKMjAwMS0xMC0yOSAgQnJ5Y2UgTWNLaW5sYXkgIDxicnljZUB3YWl0YWtpLm90YWdvLmFjLm56PgoKCSogbWFuZ2xlLmMgKGZpbmRfY29tcHJlc3Npb25fcmVjb3JkX21hdGNoKTogRG9uJ3QgbWF0Y2ggY29tcHJlc3Npb24KCXJlY29yZHMgZm9yIHBhY2thZ2UgbmFtZSBlbGVtZW50cyB1bmxlc3MgdGhleSBvY2N1ciBhdCB0aGUgc3RhcnQgb2YKCXRoZSBuYW1lLiBGaXggZm9yIFBSIGphdmEvNDcxNy4KCjIwMDEtMTAtMjUgIEJyeWNlIE1jS2lubGF5ICA8YnJ5Y2VAd2FpdGFraS5vdGFnby5hYy5uej4KCgkqIGV4cHIuYyAoZXhwYW5kX2phdmFfZmllbGRfb3ApOiBEb24ndCBzcGVjaWFsLWNhc2UgcmVmZXJlbmNlcyB0bwoJamF2YS5sYW5nLlBSSU1UWVBFLlRZUEUuCgkoYnVpbGRfcHJpbXR5cGVfdHlwZV9yZWYpOiBSZW1vdmVkLgoJKiBqYXZhLXRyZWUuaCAoYnVpbGRfcHJpbXR5cGVfdHlwZV9yZWYpOiBSZW1vdmUgcHJvdG90eXBlLgoJKiBwYXJzZS55IChtYXliZV9idWlsZF9wcmltdHR5cGVfdHlwZV9yZWYpOiBSZW1vdmVkLgoJKGNvbXBsZXRlX2Z1bmN0aW9uX2FyZ3VtZW50cyk6IERvbid0IHNwZWNpYWwtY2FzZSByZWZlcmVuY2VzIHRvCglqYXZhLmxhbmcuUFJJTVRZUEUuVFlQRS4KCShwYXRjaF9hc3NpZ25tZW50KTogTGlrZXdpc2UuCgkoYXJyYXlfY29uc3RydWN0b3JfY2hlY2tfZW50cnkpOiBMaWtld2lzZS4KCjIwMDEtMTAtMjQgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0ByZWRoYXQuY29tPgoKCSogbWFuZ2xlLmMgKHN0YXRpYyB0cmVlIGNvbXByZXNzaW9uX3RhYmxlKTogRml4ZWQgbGVhZGluZyBjb21tZW50LgoJKiBwYXJzZS5oIChzdHJ1Y3QgcGFyc2VyX2N0eHQpOiBGaXhlZCBmaWVsZCBjb21tZW50LgoJKiBwYXJzZS55IChjaGVja19wa2dfY2xhc3NfYWNjZXNzKTogTmV3IHByb3RvdHlwZSwgZml4ZWQgbGVhZGluZwoJY29tbWVudCwgbmV3IHBhcmFtZXRlciB1c2VkIHRvIGVtaXQgZXJyb3Igb25seSBpZiBwYXNzZWQgYXMgdHJ1ZS4KCShwYXJzZV9jaGVja19zdXBlcik6IFBhc3MgZXh0cmEgYXJndW1lbnQgdG8gY2hlY2tfcGtnX2NsYXNzX2FjY2Vzcy4KCShkb19yZXNvbHZlX2NsYXNzKTogTGlrZXdpc2UuCgkocHJvY2Vzc19pbXBvcnRzKTogTGlrZXdpc2UuCgkocmVhZF9pbXBvcnRfZGlyKTogRml4ZWQgaW5kZW50YXRpb24uCgkoZmluZF9pbl9pbXBvcnRzX29uX2RlbWFuZCk6IE5ldyBsb2NhbCBjbGFzc190eXBlX25hbWUuIExvY2FsCglub2RlX3RvX3VzZSBkZWxldGVkLiB3aGlsZSBsb29wIGNoYW5nZWQgaW50byBmb3IgbG9vcC4gUmVwb3J0CgltdWx0aXBsZSBkZWZpbml0aW9uIG9ubHkgZm9yIGFjY2Vzc2libGUgY2xhc3Nlcy4gSW1wcm92ZWQgZXJyb3IKCW1lc3NhZ2UuCgkoc3RhcnRfY29tcGxldGVfZXhwYW5kX21ldGhvZCk6IExvY2FsIGBwdHInIHJlbW92ZWQuIERFQ0xfQVJHVU1FTlRTCglhc3NpZ25lZCB0byBwYXJhbWV0ZXIgbGlzdCwgZml4ZWQgaW5kZW50YXRpb24uIHdoaWxlIGxvb3AgY2hhbmdlZAoJaW50byBmb3IgbG9vcCwgcmVzdG9yZSBUUkVFX0NIQUlOIG9uIGxvY2FsIGB0ZW0nIGJlZm9yZSB0aGUgbmV4dAoJaXRlcmF0aW9uLgoKVHVlIE9jdCAyMyAxNDowMjoxNyAyMDAxICBSaWNoYXJkIEtlbm5lciAgPGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1PgoKCSogbGFuZy5jIChsYW5nX2dldF9hbGlhc19zZXQpOiBEZWxldGVkLgoKMjAwMS0xMC0yMSAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogZ2phdmFoLmMgKGpuaV9wcmludF9jaGFyKTogRml4IHRoaW5rbyBpbiBsYXN0IGNoYW5nZS4KCgkqIGdqYXZhaC5jIChqbmlfcHJpbnRfY2hhciwgZGVjb2RlX3NpZ25hdHVyZV9waWVjZSk6IFVzZQoJc2FmZS1jdHlwZSBtYWNyb3MgYW5kL29yIGZvbGQgZXh0cmEgY2FsbHMgaW50byBmZXdlciBvbmVzLgoJKiBsZXguYyAoamF2YV9yZWFkX3VuaWNvZGUsIGphdmFfbGV4KTogTGlrZXdpc2UuCgkqIGxleC5oIChKQVZBX1NUQVJUX0NIQVJfUCwgSkFWQV9QQVJUX0NIQVJfUCwgSkFWQV9BU0NJSV9ESUdJVCwKCUpBVkFfQVNDSUlfSEVYRElHSVQsIEpBVkFfQVNDSUlfTEVUVEVSKTogTGlrZXdpc2UuCgkqIG1hbmdsZV9uYW1lLmMgKGFwcGVuZF91bmljb2RlX21hbmdsZWRfbmFtZSwKCXVuaWNvZGVfbWFuZ2xpbmdfbGVuZ3RoKTogTGlrZXdpc2UuCgoyMDAxLTEwLTE3ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEByZWRoYXQuY29tPgoKCSogTWFrZS1sYW5nLmluIChqYXZhL2xhbmcubyk6IERlcGVuZCBvbiBsYW5naG9va3MuaC4KCjIwMDEtMTAtMTUgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0ByZWRoYXQuY29tPgoKCSogbGFuZy5jIChsYW5naG9va3MuaCk6IEluY2x1ZGVkLgoJKExBTkdfSE9PS1NfSU5JVCk6IFJlZGVmaW5lZC4KCShMQU5HX0hPT0tTX0lOSVRfT1BUSU9OUyk6IExpa2V3aXNlLgoJKExBTkdfSE9PS1NfREVDT0RFX09QVElPTik6IExpa2V3aXNlLgoJKHN0cnVjdCBsYW5nX2hvb2tzIGxhbmdfaG9va3MpOiBOZXcgaW5pdGlhbGl6YXRpb24uCgoyMDAxLTEwLTExICBQZXIgQm90aG5lciAgPHBlckBib3RobmVyLmNvbT4KCgkqIHBhcnNlLnkgKHBhdGNoX3N5bmNocm9uaXplZF9zdGF0ZW1lbnQpOiAgVXNlIGEgVFJZX0ZJTkFMTFlfRVhQUgoJcmF0aGVyIHRoYW4gYSBDTEVBTlVQX1BPSU5UX0VYUFIvV0lUSF9DTEVBTlVQX0VYUFIgcGFpci4KCVRoZSBmb3JtZXIgaXMgc2ltcGxlciwgYW5kIGpjZi13cml0ZS5jIGhhbmRsZXMgaXQgYmV0dGVyLgoJKGphdmFfY29tcGxldGVfbGhzKTogIE5vIGxvbmdlciBuZWVkIHRvIGhhbmRsZSBDTEVBTlVQX1BPSU5UX0VYUFIKCW9yIFdJVEhfQ0xFQU5VUF9FWFBSLgoJKiBqY2Ytd3JpdGUuYzogIFJldmVydCBBbGV4J3MgY2hhbmdlIGZyb20gMjAwMC0xMC0xOC4gIEl0IGlzIG5vCglsb25nZXIgbmVlZGVkLCBhcyB3ZSBhbHJlYWR5IGhhbmRsZSBlbXB0eSBUUllfRklOQUxMWV9FWFBSIGJvZGllcyBmaW5lLgoKCSogcGFyc2UueSAocGF0Y2hfaWZfZWxzZV9zdGF0ZW1lbnQpOiAgSWYgdGhlIGNvbmRpdGlvbiBpcyBjb25zdGFudCwKCW9wdGltaXplIGF3YXkgdGhlIHRlc3QuCgoyMDAxLTEwLTA5ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AcmVkaGF0LmNvbT4KCgkqIHBhcnNlLnkgKHBhdGNoX2Nhc3QpOiBDYWxsIHBhdGNoX3N0cmluZyBvbiB0aGUgZmlyc3Qgb3BlcmFuZCBvZgoJdGhlIGluY29taW5nIG5vZGUsIHVwZGF0ZSBpdCBpZiBuZWNlc3NhcnkuIEZpeGVzIFBSIGphdmEvNDUxMC4KCjIwMDEtMTAtMDkgIEJyeWNlIE1jS2lubGF5ICA8YnJ5Y2VAd2FpdGFraS5vdGFnby5hYy5uej4KCgkqIHBhcnNlLnkgKGZpbmRfYXNfaW5uZXJfY2xhc3MpOiBEb24ndCBkaXNyZWdhcmQgdGhlIGVuY2xvc2luZyBzY29wZQoJd2hlbiBuYW1lIHF1YWxpZmllciBtYXRjaGVzIGEgcGFja2FnZSBuYW1lLgoKMjAwMS0xMC0wOCAgVG9tIFRyb21leSAgPHRyb21leUByZWRoYXQuY29tPgoKCUZpeCBmb3IgUFIgamF2YS80NDg5OgoJKiBqY2Ytd3JpdGUuYyAoZ2VuZXJhdGVfYnl0ZWNvZGVfaW5zbnMpIFtTV0lUQ0hfRVhQUl06IEFsd2F5cwoJZm9yY2UgYSBuZXcgbGFiZWwgd2hlbiBjb21wdXRpbmcgYGJvZHlfYmxvY2snLgoKMjAwMS0xMC0wNyAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogamNmLWlvLmMgKGZvcm1hdF91aW50KTogQ29uc3QtaWZ5LgoJKiBsYW5nLmMgKGphdmFfdHJlZV9jb2RlX3R5cGUsIGphdmFfdHJlZV9jb2RlX2xlbmd0aCk6IExpa2V3aXNlLgoJKiBsZXguYyAoamF2YV9nZXRfbGluZV9jb2wpOiBMaWtld2lzZS4KCSogcGFyc2UueSAoYnVpbGRfaW5jZGVjKTogTGlrZXdpc2UuCgoyMDAxLTEwLTA1ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AcmVkaGF0LmNvbT4KCgkqIHBhcnNlLnkgKHJlZ2lzdGVyX2luY29tcGxldGVfdHlwZSk6IFNldCBKREVQX1NVUEVSIHRvIGJlIGdpdmVuCglhIE5VTEwgZW5jbG9zaW5nIGNvbnRleHQgaWYgYXBwcm9wcmlhdGUuIEZpeGVzIFBSIGphdmEvNDQ2Ni4KCjIwMDEtMTAtMDMgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0ByZWRoYXQuY29tPgoKCSogcGFyc2UueSAocGF0Y2hfYXNzaWdubWVudCk6IFVzZSBsdmFsdWUncyBvcmlnaW5hbCBUWVBFIHdoZW4KCWJ1aWxkaW5nIHRoZSBmaW5hbCBDT01QT1VORF9FWFBSLgoJKHRyeV9yZWZlcmVuY2VfYXNzaWduY29udik6IEZpeGVkIGxlYWRpbmcgY29tbWVudC4KCjIwMDEtMDktMjYgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0ByZWRoYXQuY29tPgoKCSogcGFyc2UueSAoY2hlY2tfZmluYWxfdmFyaWFibGVfaW5kaXJlY3RfYXNzaWdubWVudCk6IEZvcgoJQ09NUE9VTkRfRVhQUiwgcmV0dXJuIG9ubHkgaWYgZmluYWxzIHdlcmUgZm91bmQgaW5pdGlhbGl6ZWQKCXByb3Blcmx5LCBpZiBub3QsIGtlZXAgb24gY2hlY2tpbmcuCgkoY2hlY2tfZmluYWxfdmFyaWFibGVfZ2xvYmFsX2Fzc2lnbm1lbnRfZmxhZyk6IE5ldyBsb2NhbAoJZXJyb3JfZm91bmQsIHNldCB3aGVuIGFwcHJvcHJpYXRlIGFuZCB1c2VkIHRvIGRlY2lkZSB3aGV0aGVyIHRvCglyZXBvcnQgdW5pbml0aWFsaXplZCBmaW5hbHMuIEZpeGVkIHR5cG8gaW4gY29tbWVudC4KCjIwMDEtMDktMjIgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0ByZWRoYXQuY29tPgoKCSogZGVjbC5jIChpbml0X2RlY2xfcHJvY2Vzc2luZyk6IEZpeGVkIHR5cG8gaW4gcHJlZGVmX2ZpbGVuYW1lcwoJbGFzdCB0aHJlZSBpbml0aWFsaXphdGlvbnMuIEZpeGVzIFBSIGphdmEvNDM2MC4KCjIwMDEtMDktMjEgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQHJlZGhhdC5jb20+CgoJKiBjbGFzcy5jIChnZXRfZGlzcGF0Y2hfdGFibGUpOiBIYW5kbGUgZnVuY3Rpb24gZGVzY3JpcHRvcnMuCgkoYnVpbGRfZHRhYmxlX2RlY2wpOiBMaWtld2lzZS4KCSogZXhwci5jIChidWlsZF9pbnZva2V2aXJ0dWFsKTogTGlrZXdpc2UuCgoyMDAxLTA5LTIwICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AcmVkaGF0LmNvbT4KCgkqIHBhcnNlLnkgKHBhdGNoX21ldGhvZF9pbnZvY2F0aW9uKTogQnVpbGQgY2xhc3MgaW5pdGlhbGl6YXRpb24KCXdoZW4gc3RhdGljIGZpbmFscyBhcmUgdXNlZCB0byBxdWFsaWZ5IG1ldGhvZCBpbnZvY2F0aW9uLgoJRml4ZXMgUFIgamF2YS80MzY2LgoKMjAwMS0wOS0xOSAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQHJlZGhhdC5jb20+CgoJKiBwYXJzZS5oOiAoV0ZMX1NUUklQX0JSQUNLRVQpOiBSZS13cml0dGVuIHVzaW5nCglidWlsZF90eXBlX25hbWVfZnJvbV9hcnJheV9uYW1lLgoJKFNUUklOR19TVFJJUF9CUkFDS0VUUyk6IE5ldyBtYWNyby4KCSogcGFyc2UueSAoYnVpbGRfdHlwZV9uYW1lX2Zyb21fYXJyYXlfbmFtZSk6IE5ldyBmdW5jdGlvbi4KCShhcnJheV9jcmVhdGlvbl9leHByZXNzaW9uOik6IEFjY3VtdWxhdGUgW11zIGluc3RlYWQgb2YgW3MuCgkoY2FzdF9leHByZXNzaW9uOik6IEFjY3VtdWxhdGUgW11zIGluc3RlYWQgb2YgW3MgYWZ0ZXIgY2FzdCB0eXBlCgluYW1lLgoJKGJ1aWxkX2FycmF5X2Zyb21fbmFtZSk6IExvY2FsIHN0cmluZyBkZWxldGVkLCB1c2UKCWJ1aWxkX3R5cGVfbmFtZV9mcm9tX2FycmF5X25hbWUuCgkoYnVpbGRfdW5yZXNvbHZlZF9hcnJheV90eXBlKTogQWNjdW11bGF0ZSBbXXMgaW5zdGVhZCBvZiBbcyBhZnRlcgoJdHlwZSBuYW1lLgoJKHJlZ2lzdGVyX2ZpZWxkcyk6IEZpeGVkIGNvbW1lbnQuCgkocmVzb2x2ZV9jbGFzcyk6IExvY2FsIG5hbWUsIGJhc2UgZGVsZXRlZCwgbmV3IGxvY2FscyB0bmFtZSBhbmQKCWFycmF5X2RpbXMuIFVzZSBidWlsZF90eXBlX25hbWVfZnJvbV9hcnJheV9uYW1lLiBVc2UgYXJyYXlfZGltcyB0bwoJYnVpbGQgYXJyYXkgdHlwZS4KCShwdXJpZnlfdHlwZV9uYW1lKTogVXNlIFNUUklOR19TVFJJUF9CUkFDS0VUUy4KCjIwMDEtMDktMTggIEFuZHJlYXMgSmFlZ2VyICA8YWpAc3VzZS5kZT4KCgkqIHBhcnNlLnk6IFVzZSBWQV9PUEVOL1ZBX0NMT1NFL1ZBX0ZJWEVEQVJHIHRocm91Z2hvdXQuCgkqIGp2LXNjYW4uYzogTGlrZXdpc2UuCgoyMDAxLTA5LTE3ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AcmVkaGF0LmNvbT4KCgkqIHBhcnNlLnkgKHBhdGNoX21ldGhvZF9pbnZvY2F0aW9uKTogSW5uZXIgY2xhc3MgY3JlYXRpb24gY29udGV4dAoJY2hlY2sgbm90IGVuZm9yY2VkIHdpdGhpbiBjb25zdHJ1Y3RvcnMuIEZpeGVzIFBSIGphdmEvMTg3My4KCjIwMDEtMDktMTYgIFRvbSBUcm9tZXkgIDx0cm9tZXlAcmVkaGF0LmNvbT4KCgkqIGpjZi13cml0ZS5jIChnZW5lcmF0ZV9ieXRlY29kZV9pbnNucykgW1NXSVRDSF9FWFBSXTogQ2FsbAoJTk9URV9QVVNIIGZvciBzaW5nbGUtY2FzZSBwdXNoLiAgRml4ZXMgUFIgamF2YS80MTg5LgoKMjAwMS0wOS0xMyAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQHJlZGhhdC5jb20+CgoJKiBqYXZhLXRyZWUuaCAoVFlQRV9JTVBPUlRfTElTVCk6IE5ldyBtYWNyby4KCShUWVBFX0lNUE9SVF9ERU1BTkRfTElTVCk6IExpa2V3aXNlLgoJKHN0cnVjdCBsYW5nX3R5cGUpOiBOZXcgZmllbGRzIGltcG9ydF9saXN0IGFuZCBpbXBvcnRfZGVtYW5kX2xpc3QuCgkqIHBhcnNlLnkgKGphdmFfY29tcGxldGVfY2xhc3MpOiBJbml0aWFsaXplIFRZUEVfSU1QT1JUX0xJU1QgYW5kCglUWVBFX0lNUE9SVF9ERU1BTkRfTElTVCB3aXRoIGN0eHAgY291bnRlcnBhcnRzLgoJKGRvX3Jlc29sdmVfY2xhc3MpOiBOZXcgbG9jYWwgc2F2ZWRfZW5jbG9zaW5nX3R5cGUsIGluaXRpYWxpemVkLAoJcGFzc2VkIGFzIHBhcmFtZXRlciB0byBmaW5kX2luX2ltcG9ydHMgYW5kIGZpbmRfaW5faW1wb3J0c19vbl9kZW1hbmQuCgkoZmluZF9pbl9pbXBvcnRzKTogQWRkZWQgcGFyYW1hdGVyIGVuY2xvc2luZ190eXBlLCB1c2UgaXRzCglUWVBFX0lNUE9SVF9MSVNUIHdoZW4gYXBwbGljYWJsZS4KCShmaW5kX2luX2ltcG9ydHNfb25fZGVtYW5kKTogQWRkZWQgcGFyYW1ldGVyIGVuY2xvc2luZ190eXBlLCB1c2UKCWl0cyBUWVBFX0lNUE9SVF9ERU1BTkRfTElTVCB3aGVuIGFwcGxpY2FibGUuIFJlb3JnYW5pemVkIGxvY2FscwoJZGVjbGFyYXRpb24gYW5kIGluaXRpYWxpemF0aW9uLgoJKGZvbGRfY29uc3RhbnRfZm9yX2luaXQpOiBTd2l0Y2gvcmVzdG9yZSBjdXJyZW50X2NsYXNzIHRvIHRoZQoJYXBwcm9wcmlhdGUgY29udGV4dC4KCjIwMDEtMDktMTMgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiB2ZXJpZnkuYyAodmVyaWZ5X2p2bV9pbnN0cnVjdGlvbnMpOiBGaXggdHlwby4KCjIwMDEtMDktMTMgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGV4cHIuYyAoZXhwYW5kX2ludm9rZSk6IENvbnN0LWlmaWNhdGlvbi4KCSogcGFyc2UueSAocGF0Y2hfbWV0aG9kX2ludm9jYXRpb24pOiBMaWtld2lzZS4KCjIwMDEtMDktMTIgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGdqYXZhaC5jIChjeHhfa2V5d29yZHMpOiBDb25zdC1pZmljYXRpb24uCgkqIGtleXdvcmQuZ3BlcmYgKGphdmFfa2V5d29yZCk6IExpa2V3aXNlLgoJKiBsYW5nLmMgKGphdmFfdHJlZV9jb2RlX25hbWUpOiBMaWtld2lzZS4KCSogbGV4LmMgKGN4eF9rZXl3b3Jkcyk6IExpa2V3aXNlLgoJKiBwYXJzZS55IChqYXZhX3BhcnNlcl9jb250ZXh0X3N1c3BlbmQsIG1lcmdlX3N0cmluZ19jc3RlKTogTGlrZXdpc2UuCgoyMDAxLTA5LTExICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEByZWRoYXQuY29tPgoKCSogcGFyc2UuaCAoY3R4cF9mb3JfZ2VuZXJhdGlvbik6IE1hcmsgZXh0ZXJuLgoKMjAwMS0wOS0xMCAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAcmVkaGF0LmNvbT4KCgkqIGNsYXNzLmMgKGJ1aWxkX2NsYXNzX3JlZik6IFNldCBERUNMX0VYVEVSTkFMIGJlZm9yZSBtYWtlX2RlY2xfcnRsLgoKMjAwMS0wOS0wNyAgTWF0dCBLcmFhaSAgPGtyYWFpQGFsdW1uaS5jYXJuZWdpZW1lbGxvbi5lZHU+CgoJKiB0eXBlY2suYyAoamF2YV9hcnJheV90eXBlX2xlbmd0aCwgYnVpbGRfcHJpbV9hcnJheV90eXBlKToKCVJlcHJlc2VudCBlbXB0eSBhcnJheXMgYnkgTlVMTCBpbmRleC4KCjIwMDEtMDktMDYgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0ByZWRoYXQuY29tPgoKCSogamF2YS10cmVlLmggKGNvbXBpbGVfcmVzb3VyY2VfZmlsZSk6IEdyb3VwZWQgd2l0aCBvdGhlciBwcm90b3R5cGVzLgoJKiBqdnNwZWMuYyAobGFuZ19zcGVjaWZpY19kcml2ZXIpOiBSZW1vdmVkIHVudXNlZCBsb2NhbCBgcHRyLicKCjIwMDEtMDktMDYgIEFudGhvbnkgR3JlZW4gIDxncmVlbkByZWRoYXQuY29tPgoKCSogY2xhc3MuYyAoT19CSU5BUlkpOiBEZWZpbmUgaWYgbmVjZXNzYXJ5LgoJKHJlZ2lzdGVyUmVzb3VyY2VfbGliZnVuYyk6IERlY2xhcmUuCgkoaW5pdF9jbGFzc19wcm9jZXNzaW5nKTogSW5pdGlsaXplIHJlZ2lzdGVyUmVzb3VyY2VfbGliZnVuYy4KCShjb21waWxlX3Jlc291cmNlX2ZpbGUpOiBOZXcgZnVuY3Rpb24uCgkqIGphdmEtdHJlZS5oIChyZXNvdXJjZV9uYW1lKTogRGVjbGFyZS4KCShjb21waWxlX3Jlc291cmNlX2ZpbGUpOiBEZWNsYXJlLgoJKiBqY2YtcGFyc2UuYyAoeXlwYXJzZSk6IEhhbmRsZSBjb21waWxpbmcgamF2YSByZXNvdXJjZSBmaWxlcy4KCSogbGFuZy5jIChqYXZhX2RlY29kZV9vcHRpb24pOiBIYW5kbGUgLWZjb21waWxlLXJlc291cmNlIG9wdGlvbi4KCSoganZzcGVjLmMgKGxhbmdfc3BlY2lmaWNfZHJpdmVyKTogSGFuZGxlIC1SIGZsYWcgZm9yIGNvbXBpbGluZwoJcmVzb3VyY2UgZmlsZXMuCgkqIGdjai50ZXhpIChDb2RlIEdlbmVyYXRpb24pOiBBZGQgZG9jdW1lbnRhdGlvbiBmb3IgLVIgZmxhZy4KCjIwMDEtMDktMDUgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQHJlZGhhdC5jb20+CgoJKiBqY2Ytd3JpdGUuYyAoZ2VuZXJhdGVfY2xhc3NmaWxlKTogSXNzdWUgYW4gZXJyb3IgaW4gY2FzZSBvZgoJZmllbGQvaW5pdGlhbCB2YWx1ZSBtaXNtYXRjaC4KCSogcGFyc2UueSAoYW5hbHl6ZV9jbGluaXRfYm9keSk6IEtlZXAgPGNsaW5pdD4gaWYgYW4gYXJyYXkgaXMKCWJlaW5nIGluaXRpYWxpemVkIGFuZCB3ZSdyZSBnZW5lcmF0aW5nIGJ5dGVjb2RlLgoJKGphdmFfY29tcGxldGVfbGhzKTogSW4gTU9ESUZZX0VYUFIgc2VjdGlvbjogYWRkZWQgY29tbWVudHMsCglzZXQgREVDTF9JTklUSUFMIHByb3Blcmx5IHdoZW4gYXBwcm9wcmlhdGUuCglGaXhlcyBQUiBqYXZhLzQyMzAKCUZpeGVzIFBSIGphdmEvNDIwNAoKMjAwMS0wOS0wMSAgUGVyIEJvdGhuZXIgIDxwZXJAYm90aG5lci5jb20+CgoJKiBwYXJzZS55IChtYXliZV95YW5rX2NsaW5pdCk6ICBBIGZpZWxkIHdpdGhvdXQgYW4gaW5pdGlhbGl6ZXIgaXMgbm90CglyZWxldmFudC4gIEFsbCBpbml0aWFsaXplcnMgZXhjZXB0IHN0YXRpYyBmaW5hbCBhbmQgY29uc3RhbnQgcmVxdWlyZQoJPGNsaW5pdD4sIHJlZ2FyZGxlc3Mgb2YgZmxhZ19lbWl0X2NsYXNzX2ZpbGVzLgoKMjAwMS0wOC0zMSAgUGVyIEJvdGhuZXIgIDxwZXJAYm90aG5lci5jb20+CgoJKiBjbGFzcy5jIChzZXRfY29uc3RhbnRfdmFsdWUpOiAgV2hlbiBub3QgZW1pdGluZyBjbGFzcyBmaWxlcywgdGhlbiBhCglTdHJpbmcgQ29uc3RhbnRWYWx1ZSBpcyBhIHV0Zjhjb25zdF9wdHJfdHlwZS4KCjIwMDEtMDgtMzAgIFBlciBCb3RobmVyICA8cGVyQGJvdGhuZXIuY29tPgoKCSogamNmLXdyaXRlLmMgKGdlbmVyYXRlX2NsYXNzZmlsZSk6ICBDaGVjayB0aGF0IGZpZWxkIGlzIHByaW1pdGl2ZQoJb3Igc3RyaW5nIGJlZm9yZSBlbWl0dGluZyBDb25zdGFudFZhbHVlIGF0dHJpYnV0ZS4KCjIwMDEtMDgtMzAgIFBlciBCb3RobmVyICA8cGVyQGJvdGhuZXIuY29tPgoKCSogcGFyc2UueSAocmVzb2x2ZV9xdWFsaWZpZWRfZXhwcmVzc2lvbl9uYW1lKTogIElmIGNyZWF0aW5nIGEKCUNPTVBPVU5EX0VYUFIsIHNldCBpdCdzIHR5cGUgY29ycmVjdGx5LgoKMjAwMS0wOC0zMCAgUGVyIEJvdGhuZXIgIDxwZXJAYm90aG5lci5jb20+CgoJKiBqY2YtaW8uYyAob3Blbl9jbGFzcyk6ICBTZXQgZmlsZW5hbWUgZmllbGQuCgoJKiBqY2YtcGFyc2UsYyAocGFyc2VfY2xhc3NfZmlsZSk6ICBTZXQgY3VycmVudF9mdW5jdGlvbl9kZWNsCglmb3IgYmV0dGVyIGVycm9yIG1lc3NhZ2Ugd2hlbiBDb2RlIGF0dHJpYnV0ZSBpcyBtaXNzaW5nLgoKCSogbGFuZy5jIChwdXRfZGVjbF9ub2RlLCBsYW5nX3ByaW50X2Vycm9yKTogIFJlLWFycmFuZ2UgZm9yCgliZXR0ZXIgZGlhZ25vc3RpY3MsIGVzcGVjaWFsbHkgZm9yIGNvbnN0cnVjdG9ycy4KCjIwMDEtMDgtMzAgIFBlciBCb3RobmVyICA8cGVyQGJvdGhuZXIuY29tPgoKCSogamNmLXdyaXRlLmMgKGdlbmVyYXRlX2NsYXNzZmlsZSk6ICBEb24ndCB3cml0ZSBDb25zdGFudFZhbHVlCglhdHRyaWJ1dGUgaWYgZmllbGQgaXMgbm90IGZpbmFsLCBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIGpkay4KCgkqIGpjZi13cml0ZS5jIChnZW5lcmF0ZV9jbGFzc2ZpbGUpOiAgQ29udmVydCBDb25zdGFudFZhbHVlIHZhbHVlcwoJdG8gY29ycmVjdCB0eXBlLiAgV29yay1hcm91bmQgZm9yIGZyb250LWVuZCBidWcuCgkqIGNsYXNzLmMgKHNldF9jb25zdGFudF92YWx1ZSk6ICBFcnJvciBpZiBjb25zdGFudCBoYXMgd3JvbmcgdHlwZS4KCjIwMDEtMDgtMzAgIFBlciBCb3RobmVyICA8cGVyQGJvdGhuZXIuY29tPgoKCSogamNmLWR1bXAuYyAocHJpbnRfY29uc3RhbnQpOiAgRml4IGZlbmNlcG9zdCBlcnJvciBzbyAiRmxvYXQiIGFuZAoJIkRvdWJsZSIgYXJlIHByaW50ZWQgYXQgdmVyYm9zaXR5IDEuCgoJKiBqY2YtZHVtcC5jIChtYWluKTogIERpc2FibGUgZmxhZ19wcmludF9hdHRyaWJ1dGVzIGlmIC0tamF2YXAuCgoJKiBqY2YtZHVtcC5jIChTUEVDSUFMX0lJTkMpOiAgUmVtb3ZlIHVubmVlZGVkIGNhc3RzIHRvIGxvbmcuCgoyMDAxLTA4LTMwICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AcmVkaGF0LmNvbT4KCgkqIHBhcnNlLnkgKHBhdGNoX2Fzc2lnbm1lbnQpOiBEb24ndCB2ZXJpZnkgZmluYWwgcmUtYXNzaWdubWVudCBoZXJlLgoJKGphdmFfY29tcGxldGVfbGhzKTogVmVyaWZ5IGFzc2lnbm1lbnRzIHRvIGZpbmFscyBjYWxsaW5nCglwYXRjaF9hc3NpZ25tZW50LiBWZXJpZnkgcmUtYXNzaWdubWVudHMgdG8gZmluYWxzIGJlZm9yZSBjYWxsaW5nCglwYXRjaF9hc3NpZ25tZW50LgoKMjAwMS0wOC0yOSAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQHJlZGhhdC5jb20+CgoJKiBwYXJzZS55IChqYXZhX2NvbXBsZXRlX2xocyk6IEFsbG93IGZpbmFsIGxvY2FscyBpbiBDQVNFX0VYUFJzLgoJRml4ZXMgUFIgamF2YS8xNDEzCgoyMDAxLTA4LTI4ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AcmVkaGF0LmNvbT4KCgkqIGxleC5jIChqYXZhX2xleCk6IG5ldyBsb2NhbCBmb3VuZF9oZXhfZGlnaXRzLiBTZXQgYW5kIHRoZW4gdXNlZAoJaW4gdGVzdCB0byByZWplY3QgaW52YWxpZCBoZXhhZGVjaW1hbCBudW1iZXJzLgoJKiBwYXJzZS55IChqYXZhX2NvbXBsZXRlX3RyZWUpOiBQcmV2ZW50IHVud2FudGVkIGNhc3Qgd2l0aAoJaW5pdGlhbGl6ZWQgZmxvYXRpbmcgcG9pbnQgZmluYWxzLgoJKHBhdGNoX2Jpbm9wKTogRW1pdCBhIHdhcm5pbmcgd2hlbiBkZXRlY3RpbmcgYSBkaXZpc2lvbiBieSB6ZXJvLAoJbWFyayByZXN1bHQgbm90IGNvbnN0YW50LCBkb24ndCBzaW1wbGlmeSBub24gaW50ZWdlciBkaXZpc2lvbi4KCjIwMDEtMDgtMjggIFBlciBCb3RobmVyICA8cGVyQGJvdGhuZXIuY29tPgoKCSogamNmLXdyaXRlLmMgIChnZW5lcmF0ZV9ieXRlY29kZV9pbnNucyk6ICBGb3IgaW5jcmVtZW50cyBhbmQKICAgICAgICBkZWNyZW1lbnRzIGp1c3QgcmVjdXJzZSB0byBwdXNoIGNvbnN0YW50LiAgSW1wcm92ZW1lbnQgb24gTWFyaydzIHBhdGNoLgoKMjAwMS0wOC0yOCAgTWFyayBNaXRjaGVsbCAgPG1hcmtAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIGpjZi13cml0ZS5jIChnZW5lcmF0ZV9ieXRlY29kZV9pbnNucyk6IEdlbmVyYXRlIGFuIGludGVnZXIgdG8KCXJlYWwgY29udmVyc2lvbiBmb3IgaW5jcmVtZW50cyBhbmQgZGVjcmVtZW50cyBvZiByZWFscy4KCjIwMDEtMDgtMjcgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0ByZWRoYXQuY29tPgoKCSogcGFyc2UueSAocmVzb2x2ZV9xdWFsaWZpZWRfZXhwcmVzc2lvbl9uYW1lKTogSGFuZGxlIHVucmVzb2x2ZWQKCXF1YWxpZmllZCBleHByZXNzaW9ucywgcHJldmVudCBudW1lcmljYWwgcXVhbGlmaWVycywgZml4ZWQgdHlwby4KCUZpeGVzIFBSIGphdmEvNDE0MQoKMjAwMS0wOC0yNCAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQHJlZGhhdC5jb20+CgoJKiBwYXJzZS55IChjaGVja19kZXByZWNhdGlvbik6IEhhbmRsZSBUWVBFX0RFQ0wgaW4gYSBzcGVjaWFsIGNhc2UsCglkb24ndCByZXBvcnQgYW55dGhpbmcgYnV0IGRlcHJlY2F0ZWQgY2xhc3Mgd2hlbiBtYXJrZWQgc28uIEhhbmRsZQoJVkFSX0RFQ0wuCgkocGF0Y2hfbWV0aG9kX2ludm9jYXRpb24pOiBDaGVjayBkZXByZWNhdGlvbiBvbiBtZXRob2RzIGFuZCB0eXBlcy4KCShwYXRjaF9iaW5vcCk6IGNvZGUgYmVjb21lcyBhbiBlbnVtIHRyZWVfY29kZSwgYWRkZWQgZGVmYXVsdDogdG8KCXN3aXRjaCB0byBoYW5kbGUgdGhhdC4gRGV0ZWN0IGRpdmlzaW9uIGJ5IHplcm8sIHRyeSB0byBmb2xkIGFuZAoJcmV0dXJuIGJlZm9yZSB1c2luZyBhIHN1YnJvdXRpbmUuCgoyMDAxLTA4LTIzICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AcmVkaGF0LmNvbT4KCgkqIGpjZi1wYXJzZS5jICh5eXBhcnNlKTogU2V0IG1hZ2ljIHRvIDAsIGRvbid0IGlzc3VlIGVycm9yIGZvciBhCglmaWxlIHNtYWxsZXIgdGhhbiA0IGJ5dGVzLgoJKiBwYXJzZS55IChjaGVja19pbm5lcl9jaXJjdWxhcl9yZWZlcmVuY2UpOiBOZXcgZnVuY3Rpb24uCgkoY2hlY2tfY2lyY3VsYXJfcmVmZXJlbmNlKTogTGlrZXdpc2UuCgkoYXJyYXlfaW5pdGlhbGl6ZXI6KTogQWNjZXB0IHssfS4KCShqYXZhX2NoZWNrX2NpcmN1bGFyX3JlZmVyZW5jZSk6IFJld3JpdHRlbiB1c2luZwoJY2hlY2tfY2lyY3VsYXJfcmVmZXJlbmNlIGFuZCBjaGVja19pbm5lcl9jaXJjdWxhcl9yZWZlcmVuY2UuCgkoamF2YV9jb21wbGV0ZV9leHBhbmRfbWV0aG9kKTogVW5jb25kaXRpb25hbGx5IHNhdmUgYW5kIHJlc3RvcmUKCXRoZSB1bnB1cmdlZCBleGNlcHRpb24gbGlzdC4KCShidWlsZF9kb3RfY2xhc3NfbWV0aG9kX2ludm9jYXRpb24pOiBVbm1hbmdsZSBzaWduYXR1cmUgcGFyYW1ldGVyLgoKMjAwMS0wOC0yMSAgVG9tIFRyb21leSAgPHRyb21leUByZWRoYXQuY29tPgoKCSogZGVjbC5jIChpbml0X2RlY2xfcHJvY2Vzc2luZyk6IEFkZCBgdGhyb3dzJyBmaWVsZCB0byBtZXRob2QKCWRlc2NyaXB0b3IuCgkqIGNsYXNzLmMgKG1ha2VfbWV0aG9kX3ZhbHVlKTogQ29tcHV0ZSBgdGhyb3dzJyBmaWVsZCBmb3IgbWV0aG9kLgoKMjAwMS0wOC0yMiAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQHJlZGhhdC5jb20+CgoJKiBwYXJzZS55IChyZXNvbHZlX2lubmVyX2NsYXNzKTogS2VlcCBsb2NhbF9lbmNsb3NpbmcgdG8gTlVMTCBpZgoJY2lyY3VsYXJpdHkgaXMgZGV0ZWN0ZWQuCgkoY3RvcnNfdW5jaGVja2VkX3Rocm93c19jbGF1c2VfcCk6IEZpeGVkIGxlYWRpbmcgY29tbWVudC4KCjIwMDEtMDgtMTcgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQHJlZGhhdC5jb20+CgoJKiBjbGFzcy5jIChlbWl0X3JlZ2lzdGVyX2NsYXNzZXMpOiBBZGQgYWxpZ24gcGFyYW1ldGVyIHRvCgljYWxsIHRvIGFzc2VtYmxlX2ludGVnZXIuCgoyMDAxLTA4LTE2ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AcmVkaGF0LmNvbT4KCgkqIGpjZi1wYXJzZS5jIChsb2FkX2NsYXNzKTogTmV3IGxvY2FscyBzYXZlZCBhbmQgY2xhc3NfbG9hZGVkLiBJZgoJbG9hZGluZyBhIGNsYXNzX29yX25hbWUgZmFpbHMsIHRyeSBjb25zaWRlcmluZyBhbiBpbm5lcmNsYXNzIG5hbWUKCWFuZCBsb2FkIHRoZSBlbmNsb3NpbmcgY29udGV4dC4KCSogcGFyc2UueSAocmVzb2x2ZV9pbm5lcl9jbGFzcyk6IE5ldyBmdW5jdGlvbi4KCShmaW5kX2FzX2lubmVyX2NsYXNzKTogQWRkZWQgbGVhZGluZyBjb21tZW50LgoJKHJlZ2lzdGVyX2luY29tcGxldGVfdHlwZSk6IEtlZXAgdGhlIGN1cnJlbnQgY29udGV4dCBhcyBlbmNsb3NpbmcKCWNvbnRleHQgZm9yIEpERVBfRklFTEQgZGVwZW5kZW5jaWVzLgoJKGRvX3Jlc29sdmVfY2xhc3MpOiBMb2NhbHMgbmV3X2NsYXNzX2RlY2wgYW5kIHN1cGVyIGluaXRpYWxpemVkIHRvCglOVUxMLiBDYWxsIHJlc29sdmVfaW5uZXJfY2xhc3MsIGV4cGxvcmUgdGhlIGVuY2xvc2luZyBjb250ZXh0CglzdXBlcmNsYXNzIGlmIG5lY2Vzc2FyeS4KCUZpeGVzIFBSIGphdmEvNDAwNwoKMjAwMS0wOC0xNiAgVG9tIFRyb21leSAgPHRyb21leUByZWRoYXQuY29tPgoKCSogamNmLWR1bXAuYyAobWFpbik6IFVwZGF0ZWQgZm9yIGNoYW5nZSB0byBqY2ZfcGF0aF9zZWFsLgoJKiBnamF2YWguYyAobWFpbik6IFVwZGF0ZWQgZm9yIGNoYW5nZSB0byBqY2ZfcGF0aF9zZWFsLgoJKiBsYW5nLmMgKHZlcnNpb25fZmxhZyk6IE5ldyBnbG9iYWwuCgkoamF2YV9kZWNvZGVfb3B0aW9uKTogUmVjb2duaXplIGAtdmVyc2lvbicuCgkoamF2YV9pbml0KTogVXBkYXRlIGZvciBjaGFuZ2UgdG8gamNmX3BhdGhfc2VhbC4KCSogamNmLmggKGpjZl9wYXRoX3NlYWwpOiBBZGRlZCBgcHJpbnQnIGFyZ3VtZW50LgoJKiBqY2YtcGF0aC5jIChqY2ZfcGF0aF9zZWFsKTogQWRkZWQgYHByaW50JyBhcmd1bWVudC4KCjIwMDEtMDgtMTMgIFphY2sgV2VpbmJlcmcgIDx6YWNrd0BwYW5peC5jb20+CgoJKiBNYWtlLWxhbmcuaW4gKGphdmEvZGVjbC5vKTogVXBkYXRlIGRlcGVuZGVuY2llcy4KCSogZGVjbC5jOiBJbmNsdWRlIGxpYmZ1bmNzLmgsIGRvbid0IGluY2x1ZGUgdG9wbGV2LmguCgoyMDAxLTA4LTEyICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AcmVkaGF0LmNvbT4KCgkqIGRlY2wuYyAoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBleGNlcHRpb25fdHlwZV9ub2RlLAoJY2xhc3Nfbm90X2ZvdW5kX3R5cGVfbm9kZSwgYW5kIG5vX2NsYXNzX2RlZl9mb3VuZF90eXBlX25vZGUKCWluaXRpYWxpemVkLiBwcmVkZWZfZmlsZW5hbWVzIGF1Z21lbnRlZCBhY2NvcmRpbmdseS4KCWluc3Rpbml0X2lkZW50aWZpZXJfbm9kZSBpbml0aWFsaXplZC4KCSogamF2YS10cmVlLmRlZiAoSU5TVEFOQ0VfSU5JVElBTElaRVJTX0VYUFIpOiBFbnRyeSByZW1vdmVkLgoJKiBqYXZhLXRyZWUuaCAoZW51bSBqYXZhX3RyZWVfaW5kZXgpOiBOZXcgZW50cmllcwoJSlRJX0VYQ0VQVElPTl9UWVBFX05PREUsIEpUSV9DTEFTU19OT1RfRk9VTkRfVFlQRV9OT0RFLAoJSlRJX05PX0NMQVNTX0RFRl9GT1VORF9UWVBFX05PREUsIEpUSV9JTlNUSU5JVF9JREVOVElGSUVSX05PREUuCgkoZXhjZXB0aW9uX3R5cGVfbm9kZSk6IE5ldyBtYWNyby4KCShjbGFzc19ub3RfZm91bmRfdHlwZV9ub2RlKTogTGlrZXdpc2UuCgkobm9fY2xhc3NfZGVmX2ZvdW5kX3R5cGVfbm9kZSk6IExpa2V3aXNlLgoJKGluc3Rpbml0X2lkZW50aWZpZXJfbm9kZSk6IExpa2V3aXNlLgoJKFBSRURFRl9GSUxFTkFNRVNfU0laRSk6IEFkanVzdGVkLgoJKFRZUEVfSEFTX0ZJTkFMX1ZBUklBQkxFKTogRml4ZWQgdHlwby4KCShzdHJ1Y3QgbGFuZ190eXBlKTogRml4ZWQgdHlwbyBpbiBiaXRmaWVsZCBuYW1lLgoJKERFQ0xfSU5TVElOSVRfUCk6IE5ldyBtYWNyby4KCShJRF9JTlNUSU5JVF9QKTogTGlrZXdpc2UuCgkqIGpjZi13cml0ZS5jIChnZW5lcmF0ZV9jbGFzc2ZpbGUpOiBpbnN0aW5pdCQgYmVhcnMgdGhlIFN5bnRoZXRpYwoJYXR0cmlidXRlLgoJKiBwYXJzZS55IChlbmNhcHN1bGF0ZV93aXRoX3RyeV9jYXRjaCk6IE5ldyBmdW5jdGlvbi4KCShnZW5lcmF0ZV9pbnN0aW5pdCk6IExpa2V3aXNlLgoJKGJ1aWxkX2luc3Rpbml0X2ludm9jYXRpb24pOiBMaWtld2lzZS4KCShjdG9yc191bmNoZWNrZWRfdGhyb3dzX2NsYXVzZV9wKTogTGlrZXdpc2UuCgkoYWRkX2luc3RhbmNlX2luaXRpYWxpemVyKTogRGVsZXRlZC4KCShidWlsZF9pbnN0YW5jZV9pbml0aWFsaXplcik6IExpa2V3aXNlLgoJKGluX2luc3RhbmNlX2luaXRpYWxpemVyKTogTGlrZXdpc2UuCgkoY2hlY2tfbWV0aG9kX3JlZGVmaW5pdGlvbik6IGluc3Rpbml0JCBub3QgdG8gYmUgdmVyaWZpZWQuCgkoamF2YV9jb21wbGV0ZV9leHBhbmRfbWV0aG9kcyk6IEdlbmVyYXRlIGluc3Rpbml0JCwgc2ltcGxpZmllZCBjb2RlLgoJKGJ1aWxkX2RvdF9jbGFzc19tZXRob2QpOiBFbGltaW5hdGVkIHVubmVjZXNzYXJ5IGxvY2Fscy4gVXNlCgllbmNhcHN1bGF0ZV93aXRoX3RyeV9jYXRjaCwgcmVtb3ZlZCB1bm5lY2Vzc2FyeSBjb2RlLgoJKGZpeF9jb25zdHJ1Y3RvcnMpOiBOZXcgbG9jYWwgaWlpLiBVc2UgYnVpbGRfaW5zdGluaXRfaW52b2NhdGlvbi4KCShwYXRjaF9tZXRob2RfaW52b2NhdGlvbik6IEFkZGVkIGNvbW1lbnQuCgkobWF5YmVfdXNlX2FjY2Vzc19tZXRob2QpOiBEb24ndCBjb25zaWRlciBpbnN0aW5pdCQuCgkoZmluZF9hcHBsaWNhYmxlX2FjY2Vzc2libGVfbWV0aG9kc19saXN0KTogU2hvcnRlbiB0aGUgc2VhcmNoIGZvcgoJaW5zdGluaXQkIHRvby4KCShqYXZhX2NvbXBsZXRlX2xocyk6IGNhc2UgSU5TVEFOQ0VfSU5JVElBTElaRVJTX0VYUFIgcmVtb3ZlZC4KCShwYXRjaF9yZXR1cm4pOiBVc2UgREVDTF9JTlNUSU5JVF9QIGluc3RlYWQgb2YgaW5faW5zdGFuY2VfaW5pdGlhbGl6ZXIuCgkocGF0Y2hfdGhyb3dfc3RhdGVtZW50KTogTGlrZXdpc2UuIEZpeGVkIHR5cG8uCgoyMDAxLTA4LTEyICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQGdudS5vcmc+CgoJUmV2ZXJ0OgoJMjAwMS0wOC0wMiAgUmFpbmVyIE9ydGggIDxyb0BUZWNoRmFrLlVuaS1CaWVsZWZlbGQuREU+CgkqIGp2c3BlYy5jIChqdmdlbm1haW5fc3BlYyk6IENhbm5vdCB1c2UgJXVtYWluLCBicmVha3MKCUFTTV9GSU5BTF9TUEVDLgoJKGxhbmdfc3BlY2lmaWNfcHJlX2xpbmspOiBVc2Ugc2V0X2lucHV0IHRvIHNldCBpbnB1dF9maWxlbmFtZS4KCUFwcGVuZCBgbWFpbicgaGVyZS4KCSoganZnZW5tYWluLmMgKHVzYWdlKTogQXBwZW5kIGxpdGVyYWwgYG1haW4nIHRvIENMQVNTTkFNRS4KCShtYWluKTogRml4IGRlZmluaXRpb24uCglTdHJpcCBgbWFpbicgZnJvbSBjbGFzc25hbWUuCglGaXhlcyBQUiBqYXZhLzIyNy4KCjIwMDEtMDgtMTEgIFphY2sgV2VpbmJlcmcgIDx6YWNrd0BwYW5peC5jb20+CgoJKiBsZXguaDogRG9uJ3QgaW5jbHVkZSBzZXRqbXAuaC4gIERvbid0IGRlZmluZQoJU0VUX0ZMT0FUX0hBTkRMRVIgb3IgcHJvdG90eXBlIHNldF9mbG9hdF9oYW5kbGVyLgoKMjAwMS0wOC0wOSAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQHJlZGhhdC5jb20+CgoJKiBleHByLmMgKGphdmFfbGFuZ19leHBhbmRfZXhwcik6IENhbGwgYGV4cGFuZF9lbmRfYmluZGluZ3MnIGFuZAoJYHBvcGxldmVsJyBpbiB0aGUgcmlnaHQgb3JkZXIuCgoyMDAxLTA4LTA5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEByZWRoYXQuY29tPgoKCSogTWFrZS1sYW5nLmluIChjbGFzcy5vKTogRGVwZW5kIG9uIFRBUkdFVF9ILgoJKiBjbGFzcy5jIChlbWl0X3JlZ2lzdGVyX2NsYXNzZXMpOiBVc2UgdGFyZ2V0IGhvb2tzIGluc3RlYWQgb2YKCWFzc2VtYmxlX2NvbnN0cnVjdG9yIGFuZCBhc3NlbWJsZV9kZXN0cnVjdG9yLgoKMjAwMS0wOC0wOCAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQHJlZGhhdC5jb20+CgoJKiBjaGVjay1pbml0LmMgKGZsYWdzLmgpOiBJbmNsdWRlCgkoY2hlY2tfaW5pdCk6IERvbid0IHJlcG9ydCB1bmluaXRpYWxpemVkIHN0YXRpYyBjbGFzcwoJaW5pdGlhbGl6YXRpb24gZmxhZ3MsIGRvbid0IGZyZWUgYml0IGluZGV4IHdoZW4gZG9pbmcgc3RhdGljIGNsYXNzCglpbml0aWFsaXphdGlvbiBvcHRpbWl6YXRpb24uCgkoY2hlY2tfZm9yX2luaXRpYWxpemF0aW9uKTogUmV0dXJuIHR5cGUgY2hhbmdlZCB0byBgdW5zaWduZWQgaW50LicKCShhdHRhY2hfaW5pdGlhbGl6ZWRfc3RhdGljX2NsYXNzKTogTmV3IGZ1bmN0aW9uLgoJKiBjbGFzcy5jIChhZGRfbWV0aG9kXzEpOiBDcmVhdGUgdGhlIGluaXRpYWxpemVkIHN0YXRpYyBjbGFzcwoJdGFibGUgaWYgbmVjZXNzYXJ5LgoJKGZpbmlzaF9jbGFzcyk6IEFsd2F5cyBlbWl0IGRlZmVycmVkIGlubGluZSBtZXRob2RzLgoJKiBkZWNsLmMgKGVtaXRfaW5pdF90ZXN0X2luaXRpYWxpemF0aW9uKTogTW92ZWQgdG8gZXhwci5jCgkoY29tcGxldGVfc3RhcnRfamF2YV9tZXRob2QpOiBEb24ndCB0cmF2ZXJzZQoJREVDTF9GVU5DVElPTl9JTklUX1RFU1RfVEFCTEUuCgkobGFuZ19tYXJrX3RyZWUpOiBNYXJrIGhhc2ggdGFibGVzIGluIGZ1bmN0aW9uIGRlY2xzLgoJKiBleHByLmMgKGVtaXRfaW5pdF90ZXN0X2luaXRpYWxpemF0aW9uKTogTW92ZWQgZnJvbSBkZWNsLmMuCgkoYnVpbGRfY2xhc3NfaW5pdCk6IENyZWF0ZSBMQUdfREVDTF9TUEVDSUZJQyBmb3IgdGhlIHN0YXRpYyBjbGFzcwoJaW5pdGlhbGl6YXRpb24gZmxhZywgc2V0IERFQ0xfQ09OVEVYVCBhbmQKCUxPQ0FMX0NMQVNTX0lOSVRJQUxJWkFUSU9OX0ZMQUcuCgkoamF2YV9sYW5nX2V4cGFuZF9leHByKTogRW1pdCBpbml0aWFsaXphdGlvbiBjb2RlIGZvciBzdGF0aWMgY2xhc3MKCWluaXRpYWxpemVkIGZsYWdzIHdoZW4gZW50ZXJpbmcgYmxvY2ssIGlmIG5lY2Vzc2FyeS4KCSogZ2NqLnRleGkgKC1mbm8tb3B0aW1pemUtc3RhdGljLWNsYXNzLWluaXRpYWxpemF0aW9uKTogRG9jdW1lbnRlZC4KCSogamF2YS10cmVlLmggKGZsYWdfb3B0aW1pemVfc2NpKTogTmV3IGdsb2JhbCB2YXJpYWJsZSBkZWNsYXJhdGlvbi4KCShERUNMX0ZVTkNUSU9OX0lOSVRJQUxJWkVEX0NMQVNTX1RBQkxFKTogTmV3IG1hY3JvLgoJKERFQ0xfRlVOQ1RJT05fU1RBVElDX01FVEhPRF9JTlZPQ0FUSU9OX0NPTVBPVU5EKTogTGlrZXdpc2UuCgkoTE9DQUxfRklOQUxfUCk6IEZpeGVkIHR5cG8gaW4gY29tbWVudC4KCShGSU5BTF9WQVJJQUJMRV9QKTogTGlrZXdpc2UuCgkoTE9DQUxfQ0xBU1NfSU5JVElBTElaQVRJT19GTEFHKTogTmV3IG1hY3JvLgoJKExPQ0FMX0NMQVNTX0lOSVRJQUxJWkFUSU9fRkxBR19QKTogTGlrZXdpc2UuCgkoc3RydWN0IGxhbmdfZGVjbCk6IE5ldyBmaWVsZHMgYGljdCcsIGBzbWljJyBhbmQgYGNpZi4nCgkoY2hlY2tfZm9yX2luaXRpYWxpemF0aW9uKTogTmV3IHJldHVybmVkIHZhbHVlIGZvciBnbG9iYWwuCgkoYXR0YWNoX2luaXRpYWxpemVkX3N0YXRpY19jbGFzcyk6IE5ldyBnbG9iYWwgZnVuY3Rpb24uCgkoU1RBVElDX0NMQVNTX0lOSVRfT1BUX1ApOiBOZXcgbWFjcm8uCgkqIGxhbmctb3B0aW9ucy5oICgtZm5vLW9wdGltaXplLXN0YXRpYy1jbGFzcy1pbml0aWFsaXphdGlvbik6IE5ldyBmbGFnLgoJKiBsYW5nLmMgKGphdmFfZGVjb2RlX29wdGlvbik6IEhhbmRsZQoJYC1mbm8tb3B0aW1pemUtc3RhdGljLWNsYXNzLWluaXRpYWxpemF0aW9uJwoJKiBwYXJzZS55IChzdGFydF9jb21wbGV0ZV9leHBhbmRfbWV0aG9kKTogTmV3IGZ1bmN0aW9uLgoJKGphdmFfZXhwYW5kX21ldGhvZF9ib2RpZXMpOiBMaWtld2lzZS4KCShhdHRhY2hfaW5pdF90ZXN0X2luaXRpYWxpemF0aW9uX2ZsYWdzKTogTGlrZXdpc2UuCgkoYWRqdXN0X2luaXRfdGVzdF9pbml0aWFsaXphdGlvbik6IExpa2V3aXNlLgoJKGVtaXRfdGVzdF9pbml0aWFsaXphdGlvbik6IExpa2V3aXNlLgoJKGphdmFfY29tcGxldGVfZXhwYW5kX21ldGhvZHMpOiBOdWxsaWZ5IGFic3RyYWN0IGFuZCBuYXRpdmUgbWV0aG9kCglib2RpZXMuCgkoamF2YV9jb21wbGV0ZV9leHBhbmRfbWV0aG9kKTogTmV3IGxvY2FscyBgZmJvZHknLCBgYmxvY2tfYm9keScKCWFuZCBgZXhjZXB0aW9uX2NvcHkuJyBSZW9yZ2FuaXplZDogZGlyZWN0bHkgcmV0dXJuIG9uIGVtcHR5IG1ldGhvZAoJYm9kaWVzLCBjYWxsIGBzdGFydF9jb21wbGV0ZV9leHBhbmRfbWV0aG9kJywgcmVtZW1iZXIgZGVmaW5pdGVseQoJaW5pdGlhbGl6ZWQgc3RhdGljIGNsYXNzIGluIGZ1bmN0aW9uLCBkb24ndCBleHBhbmQgbWV0aG9kIGJvZGllcy4KCShqYXZhX2V4cGFuZF9jbGFzc2VzKTogQ2FsbCBgamF2YV9leHBhbmRfbWV0aG9kX2JvZGllcycgYmVmb3JlCglgZmluaXNoX2NsYXNzJyB3aGVuIGNvbXBpbGluZyB0byBuYXRpdmUuCgkocmVzb2x2ZV9leHByZXNzaW9uX25hbWUpOiBVc2UgYG9yaWcnIGFmdGVyIGJ1aWxkaW5nIG91dGVyIGNsYXNzCglmaWVsZCBhY2Nlc3MuCgkocGF0Y2hfaW52b2tlKTogUmVtZW1iZXIgc3RhdGljIG1ldGhvZCBpbnZva2F0aW9ucy4KCjIwMDEtMDgtMDYgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQHJlZGhhdC5jb20+CgogICAgICAgICogY2xhc3MuYyAoZW1pdF9yZWdpc3Rlcl9jbGFzc2VzKTogUGFzcyBhIHN5bWJvbF9yZWYgYW5kIHByaW9yaXR5Cgl0byBhc3NlbWJsZV9jb25zdHJ1Y3Rvci4KCjIwMDEtMDgtMDIgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0ByZWRoYXQuY29tPgoKCSogamF2YS10cmVlLmggKGFsbF9jbGFzc19maWxlbmFtZSk6IE5ldyBtYWNyby4KCShlbnVtIGphdmFfdHJlZV9pbmRleCk6IE5ldyBlbnVtIGBKVElfQUxMX0NMQVNTX0ZJTEVOQU1FLicKCShCVUlMRF9GSUxFTkFNRV9JREVOVElGSUVSX05PREUpOiBGaXhlZCBsZWFkaW5nIGNvbW1lbnQuIExpbmsKCW5ld2x5IGNyZWF0ZWQgSURFTlRJRklFUl9OT0RFIHRvIGBhbGxfY2xhc3NfZmlsZW5hbWUuJwoKMjAwMS0wOC0wMSAgSmVmZiBTdHVybSAgPGpzdHVybUBvbmUtcG9pbnQuY29tPgoKICAgICAgICAqIGphdmEtdHJlZS5oIChCVUlMRF9GSUxFTkFNRV9JREVOVElGSUVSX05PREUpOgogICAgICAgIFVzZSBnZ2NfYWRkX3RyZWVfcm9vdCB0byByZWdpc3RlciByb290cy4KCjIwMDEtMDctMzEgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0ByZWRoYXQuY29tPgoKCSogY2hlY2staW5pdC5jIChjaGVja19pbml0KTogV0lUSF9DTEVBTlVQX0VYUFIgbm9kZSB0byB1c2UgaXRzCglzZWNvbmQgb3BlcmFuZCBjYWxsaW5nIGNoZWNrX2luaXQuCgkqIGRlY2wuYyAoY29tcGxldGVfc3RhcnRfamF2YV9tZXRob2QpOiBTd2FwZWQgc2Vjb25kIGFuZCB0aGlyZAoJYXJndW1lbnRzIHdoaWxlIGNyZWF0aW5nIFdJVEhfQ0xFQU5VUF9FWFBSIG5vZGUuCgkqIGpjZi13cml0ZS5jIChnZW5lcmF0ZV9ieXRlY29kZV9pbnNucyk6IFVzZSBzZWNvbmQgb3BlcmFuZAoJaW5zdGVhZCBvZiB0aGlyZCB3aGVuIGhhbmRsaW5nIFdJVEhfQ0xFQU5VUF9FWFBSLgoJKiBwYXJzZS55IChqYXZhX2NvbXBsZXRlX2xocyk6IEV4cGFuZCBzZWNvbmQgb3BlcmFuZCBvZgoJV0lUSF9DTEVBTlVQX0VYUFIgbm9kZXMuCgkocGF0Y2hfc3luY2hyb25pemVkX3N0YXRlbWVudCk6IFN3YXBlZCBzZWNvbmQgYW5kIHRoaXJkIGFyZ3VtZW50cwoJd2hpbGUgY3JlYXRpbmcgV0lUSF9DTEVBTlVQX0VYUFIgbm9kZS4KCjIwMDEtMDctMTggIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0ByZWRoYXQuY29tPgoKCSogcGFyc2UueSAoY3JlYXRlX2ludGVyZmFjZSk6IEF2b2lkIGN5Y2xpYyBpbmhlcml0YW5jZSByZXBvcnQgd2hlbgoJc3ludGF4IGVycm9yIGVuY291bnRlcmVkIGR1cmluZyBjbGFzcyBkZWZpbml0aW9uLgoJRml4ZXMgUFIgamF2YS8yOTU2CgoyMDAxLTA4LTAyICBSYWluZXIgT3J0aCAgPHJvQFRlY2hGYWsuVW5pLUJpZWxlZmVsZC5ERT4KCgkqIGp2c3BlYy5jIChqdmdlbm1haW5fc3BlYyk6IENhbm5vdCB1c2UgJXVtYWluLCBicmVha3MKCUFTTV9GSU5BTF9TUEVDLgoJKGxhbmdfc3BlY2lmaWNfcHJlX2xpbmspOiBVc2Ugc2V0X2lucHV0IHRvIHNldCBpbnB1dF9maWxlbmFtZS4KCUFwcGVuZCBgbWFpbicgaGVyZS4KCSoganZnZW5tYWluLmMgKHVzYWdlKTogQXBwZW5kIGxpdGVyYWwgYG1haW4nIHRvIENMQVNTTkFNRS4KCShtYWluKTogRml4IGRlZmluaXRpb24uCglTdHJpcCBgbWFpbicgZnJvbSBjbGFzc25hbWUuCglGaXhlcyBQUiBqYXZhLzIyNy4KCjIwMDEtMDctMTggIFRvbSBUcm9tZXkgIDx0cm9tZXlAcmVkaGF0LmNvbT4KCglGb3IgUFIgamF2YS8yODEyOgoJKiBsZXguaDogVXNlIEhBVkVfSUNPTlYsIG5vdCBIQVZFX0lDT05WX0guCgkqIGxleC5jIChqYXZhX25ld19sZXhlcik6IFVzZSBJQ09OVl9DT05TVC4KCShqYXZhX3JlYWRfY2hhcik6IExpa2V3aXNlLgoJKiBNYWtlLWxhbmcuaW4gKGpjMSQoZXhlZXh0KSk6IExpbmsgYWdhaW5zdCBMSUJJQ09OVi4KCShqdi1zY2FuJChleGVleHQpKTogTGlrZXdpc2UuCgoyMDAxLTA3LTE3ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AcmVkaGF0LmNvbT4KCgkqIHBhcnNlLmggKElOVEVSRkFDRV9JTk5FUl9NT0RJRklFUlMpOiBEaXNhbGxvdyBgcHJpdmF0ZS4nCgkqIHBhcnNlLnkgKGNoZWNrX2NsYXNzX2ludGVyZmFjZV9jcmVhdGlvbik6IEFsbG93IGBwcml2YXRlJyBpZiB0aGUKCWVuY2xvc2luZyBpcyBub3QgYW4gaW50ZXJmYWNlLgoJKGNyZWF0ZV9pbnRlcmZhY2UpOiBJbnRlcmZhY2UgdGFnZ2VkIHB1YmxpYyBpZiB0aGUgZW5jbG9zaW5nCgljb250ZXh0CWlzIGFuIGludGVyZmFjZS4KCShjcmVhdGVfY2xhc3MpOiBDbGFzcyB0YWdnZWQgcHVibGljIGlmIHRoZSBlbmNsb3NpbmcgY29udGV4dAoJaXMgYW4gaW50ZXJmYWNlLgoJRml4ZXMgUFIgamF2YS8yOTU5CgoyMDAxLTA3LTE3ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AcmVkaGF0LmNvbT4KCgkqIGNsYXNzLmMgKHB1c2hfY2xhc3MpOiBTZXQgREVDTF9TSVpFIHRvIGBpbnRlZ2VyX3plcm9fbm9kZS4nCglGaXhlcyBQUiBqYXZhLzI2NjUKCjIwMDEtMDctMTQgIFRpbSBKb3NsaW5nICA8dGVqQG1lbGJwYy5vcmcuYXU+CgoJKiBjaGVjay1pbml0LmMgKGNoZWNrX2luaXQpOiBSZW1vdmUgcmVmZXJlbmNlcyB0byBFWFBPTl9FWFBSLgoKMjAwMS0wNy0xMyAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQHJlZGhhdC5jb20+CgoJKiBwYXJzZS55IChqYXZhX2NvbXBsZXRlX2xzaCk6IFNldCBDQU5fQ09NUExFVEVfTk9STUFMTFkgYW5kIHVuc2V0CglUUkVFX0NPTlNUQU5UX09WRVJGTE9XIG9mIENBU0VfRVhQUiB2YWx1ZS4KCUZpeGVzIFBSIGphdmEvMzYwMgoKMjAwMS0wNy0xMyAgVG9tIFRyb21leSAgPHRyb21leUByZWRoYXQuY29tPgoKCSoganZzcGVjLmMgKGp2Z2VubWFpbl9zcGVjKTogUmVtb3ZlIC1mZmlsZWxpc3QtZmlsZSBmcm9tIGNjMQoJaW52b2NhdGlvbi4KCjIwMDEtMDctMTIgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0ByZWRoYXQuY29tPgoKCSogcGFyc2UueSAocGF0Y2hfbWV0aG9kX2ludm9jYXRpb24pOiBEb24ndCBvdmVycmlkZSBwcmltYXJ5IGlmIG9uZQoJaXMgYWxyZWFkeSBwcm92aWRlZCwgYnV0IGxldCB0aGlzJDxuPiBiZSBidWlsdC4gRml4ZWQgY29tbWVudC4KCjIwMDEtMDctMTIgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0ByZWRoYXQuY29tPgoKCSogcGFyc2UueSAoZW1wdHlfc3RhdGVtZW50Oik6IFJlcG9ydCBlbXB0eSBzdGF0ZW1lbnQgZXJyb3Igb25seQoJd2hlbiBmb3VuZCBhdCBjbGFzcyBkZWNsYXJhdGlvbiBsZXZlbC4KCUZpeGVzIFBSIGphdmEvMzYzNQoKMjAwMS0wNy0xMiAgVG9tIFRyb21leSAgPHRyb21leUByZWRoYXQuY29tPgoKCSogZXhwci5jIChleHBhbmRfbG9hZF9pbnRlcm5hbCk6IE5ldyBmdW5jdGlvbi4KCShMT0FEX0lOVEVSTkFMKTogVXNlIGl0LgoKMjAwMS0wNy0xMSAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQHJlZGhhdC5jb20+CgoJKiBwYXJzZS55ICh2ZXJpZnlfY29uc3RydWN0b3Jfc3VwZXIpOiBDb21wYXJlIGFub255bW91cyBjbGFzcyBjdG9yCglhcmdzIHdpdGggYHZhbGlkX21ldGhvZF9pbnZvY2F0aW9uX2NvbnZlcnNpb25fcC4nCglGaXhlcyBQUiBqYXZhLzMyODUKCjIwMDEtMDctMTAgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0ByZWRoYXQuY29tPgoKCSogbGFuZy1zcGVjcy5oOiBGb3JiaXQgdGhlIHVzZSBpZiBgLWZlbWl0LWNsYXNzLWZpbGV7c30nIHdpdGhvdXQKCWAtZnN5bnRheC1vbmx5LicgRml4ZXMgUFIgamF2YS8zMjQ4CgoyMDAxLTA3LTEwICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AcmVkaGF0LmNvbT4KCgkqIGpjZi1pby5jIChmaW5kX2NsYXNzKTogQ2xhcmlmaWVkIGVycm9yIG1lc3NhZ2UuIEZpeGVzIFBSIGphdmEvMjYwMwoKMjAwMS0wNy0xMCAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQHJlZGhhdC5jb20+CgoJKiBwYXJzZS5oIChJTk5FUl9FTkNMT1NJTkdfU0NPUEVfQ0hFQ0spOiBObyBgdGhpcycgaXMgZmluZSBpZiB0aGUKCWN1cnJlbnQgZnVuY3Rpb24gaXMgc3RhdGljLiBGaXhlcyBQUiBqYXZhLzE5NzAKCjIwMDEtMDctMDkgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0ByZWRoYXQuY29tPgoKCSogcGFyc2UueSAocGF0Y2hfbWV0aG9kX2ludm9jYXRpb24pOiBBZGQgZW5jbG9zaW5nIGNvbnRleHQgdG8gY3RvcgoJY2FsbHMgaWYgbmVjZXNzYXJ5LiBGaXhlcyBQUiBqYXZhLzI5NTMKCjIwMDEtMDctMDkgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0ByZWRoYXQuY29tPgoKCSogcGFyc2UueSAocmVzb2x2ZV9wYWNrYWdlKTogQWJvcnQgaWYgcXVhbGlmaWVkIGV4cHJlc3Npb24gbWVtYmVyCglpc24ndCByaWdodC4KCShxdWFsaWZ5X2FtYmlndW91c19uYW1lKTogRG9uJ3QgcXVhbGlmeSBhcyB0eXBlIGlmIGB0aGlzJyBpbiB1c2UuCglGaXhlcyBQUiBqYXZhLzEzOTEKCjIwMDEtMDctMDcgIFphY2sgV2VpbmJlcmcgIDx6YWNrd0BzdGFuZm9yZC5lZHU+CgoJKiB2ZXJpZnkuYzogRG9uJ3QgdXNlIC8vIGNvbW1lbnRzLgoKMjAwMS0wNy0wNSAgVG9tIFRyb21leSAgPHRyb21leUByZWRoYXQuY29tPgoKCSogbGFuZy5jIChmbGFnX2Fzc3VtZV9jb21waWxlZCk6IFJlbW92ZWQuCgkqIGphdmEtdHJlZS5oIChmbGFnX2Fzc3VtZV9jb21waWxlZCk6IFJlbW92ZWQuCgkqIGxhbmctb3B0aW9ucy5oOiBSZW1vdmVkIC1mZmlsZS1saXN0LWZpbGUsIC1mdXNlLWJvZWhtLWdjLAoJLWZoYXNoLXN5bmNocm9uaXphdGlvbiwgLWZ1c2UtZGl2aWRlLXN1YnJvdXRpbmUsCgktZmNoZWNrLXJlZmVyZW5jZXMsIC1mZW1pdC1jbGFzcy1maWxlLCAtZmVtaXQtY2xhc3MtZmlsZXMsCgktZmFzc3VtZS1jb21waWxlZC4gIFVwZGF0ZWQgLS1lbmNvZGluZyBpbmZvcm1hdGlvbi4gIENoYW5nZWQKCS1mb3V0cHV0LWNsYXNzLWRpciB0byBgLWQnLgoKMjAwMS0wNy0wNCAgRGFuaWVsIEJlcmxpbiAgPGRhbkBjZ3NvZnR3YXJlLmNvbT4KCgkqIGpjZi1wYXJzZS5jIChwYXJzZV9jbGFzc19maWxlKTogQWRkIGxpbmVubyBwYXJhbWV0ZXIgdG8KCWRlYnVnX3N0YXJ0X3NvdXJjZV9maWxlIGNhbGwuCgoyMDAxLTA3LTA0ICBKb3NlcGggUy4gTXllcnMgIDxqc20yOEBjYW0uYWMudWs+CgoJKiBnY2oudGV4aTogVXNlIGdwbC50ZXhpLgoJKiBNYWtlLWxhbmcuaW4gKCQoc3JjZGlyKS9qYXZhL2djai5pbmZvLCBqYXZhL2djai5kdmkpOiBVcGRhdGUKCWRlcGVuZGVuY2llcyBhbmQgdXNlIGRvYy9pbmNsdWRlIGluIHNlYXJjaCBwYXRoLgoKMjAwMS0wNy0wMyAgSmVmZiBTdHVybSAgPGpzdHVybUBvbmUtcG9pbnQuY29tPgoKCSogcGFyc2UueSAoZml4X2NvbnN0cnVjdG9ycyk6IFRlc3QgaWYgYSBDQUxMX0VYUFIgaW52b2tlcwoJYHRoaXMnLiAgSWYgc28sIGRvbid0IGJ1aWxkIGluc3RhbmNlIGluaXRpYWxpemVycy4KCjIwMDEtMDctMDMgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0ByZWRoYXQuY29tPgoKCSogcGFyc2UueSAocmVzb2x2ZV9leHByZXNzaW9uX25hbWUpOiBJbXByb3ZlZCBlcnJvciBtZXNzYWdlIGZvcgoJaW5uZXIgY2xhc3MgY2FzZXMuIEZpeGVzIFBSIGphdmEvMTk1OAoKMjAwMS0wNi0yOCAgR2FicmllbCBEb3MgUmVpcyAgPGdkckBjb2Rlc291cmNlcnkuY29tPgoKCSogbGFuZy5jOiAjaW5jbHVkZSBkaWFnbm9zdGljLmgKCShsYW5nX3ByaW50X2Vycm9yKTogQWRkIGEgYGRpYWdub3N0aWNfY29udGV4dCAqJyBwYXJhbWV0ZXIuCgkoamF2YV9kdW1teV9wcmludCk6IExpa2V3aXNlLgoJKiBNYWtlLWxhbmcuaW4gKEpBVkFfTEVYX0MpOiBEZXBlbmQgb24gZGlhZ25vc3RpYy5oCgoyMDAxLTA2LTI3ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AcmVkaGF0LmNvbT4KCgkqIGpjZi1wYXJzZS5jIChnY2NfbWFya19qY2YpOiBUZXN0IGZvciBhIGZpbmlzaGVkIEpDRi4KCSogamNmLmggKHR5cGVkZWYgc3RydWN0IEpDRik6IE5ldyBiaXRmaWVsZCBgZmluaXNoZWQuJwoJKEpDRl9GSU5JU0gpOiBTZXQgYGZpbmlzaGVkLicKCShKQ0ZfWkVSTyk6IFJlc2V0IGBmaW5pc2hlZC4nCglGaXhlcyBQUiBqYXZhLzI2MzMKCjIwMDEtMDYtMjcgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0ByZWRoYXQuY29tPgoKCSogcGFyc2UueSAoY2xhc3NfYm9keV9kZWNsYXJhdGlvbjopOiBEb24ndCBpbnN0YWxsIGVtcHR5IGluc3RhbmNlCglpbml0aWFsaXplcnMuCglGaXhlcyBQUiBqYXZhLzEzMTQKCjIwMDEtMDYtMjcgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0ByZWRoYXQuY29tPgoKCSogY2xhc3MuYyAoc2V0X3N1cGVyX2luZm8pOiBDYWxsIGBzZXRfY2xhc3NfZGVjbF9hY2Nlc3NfZmxhZ3MuJwoJKHNldF9jbGFzc19kZWNsX2FjY2Vzc19mbGFncyk6IE5ldyBmdW5jdGlvbi4KCSogamF2YS10cmVlLmggKHNldF9jbGFzc19kZWNsX2FjY2Vzc19mbGFncyk6IE5ldyBwcm90b3R5cGUuCgkqIGpjZi1wYXJzZS5jIChoYW5kbGVfaW5uZXJjbGFzc19hdHRyaWJ1dGUpOiBSZWFkIGFuZCBzZXQgYWNjZXNzIGZsYWdzLgoJKHBhcnNlX2NsYXNzX2ZpbGUpOiBOZXcgbG9jYWwgYGRlY2xfbWF4X2xvY2Fscy4nIFRha2Ugd2lkZSB0eXBlcwoJaW50byBhY2NvdW50IHRvIGNvbXB1dGUgREVDTF9NQVhfTE9DQUxTLgoJKiBwYXJzZS55ICh0eXBlX2ltcG9ydF9vbl9kZW1hbmRfZGVjbGFyYXRpb246KTogSWdub3JlIGR1cGxpY2F0ZQoJaW1wb3J0cyBvbiBkZW1hbmQuCgoyMDAxLTA2LTIyICBKYW4gdmFuIE1hbGUgIDxqYW4udmFubWFsZUBmZW5rLndhdS5ubD4KCgkqIHppcGZpbGUuaDogVXNlIEdDQ19KQ0ZfSCBpbnN0ZWFkIG9mIEpDRl9ILgoKMjAwMS0wNi0yMCAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQHJlZGhhdC5jb20+CgoJKiBjbGFzcy5jIChqYXZhX2hhc2hfdHJlZV9ub2RlKTogRml4ZWQgaW5kZW50YXRpb24gaW4gbGVhZGluZyBjb21tZW50LgoJKiBwYXJzZS55IChkb19yZXNvbHZlX2NsYXNzKTogTW92ZWQgY29tbWVudHMgb3V0IHRvIGxlYWRpbmcgY29tbWVudAoJc2VjdGlvbi4gUmVtb3ZlZCBsb2NhbCBgc3RhcnQnLCBOZXcgbG9jYWwgYF9odCcgYW5kCglgY2lyY3VsYXJpdHlfaGFzaC4nICBSZWNvcmQgYGVuY2xvc2luZycgaW4gaGFzaCB0YWJsZSBhbmQgc2VhcmNoCglpdCB0byBkZXRlY3QgY2lyY3VsYXJpdHkuICBVc2UgYGVuY2xvc2luZycgYXMgYW4gYXJndW1lbnQgdG8KCWBsb29rdXBfY2wuJyBGcmVlIHRoZSBoYXNoIHRhYmxlIHdoZW4gZG9uZS4KCjIwMDEtMDYtMTkgIFRvbSBUcm9tZXkgIDx0cm9tZXlAcmVkaGF0LmNvbT4KCgkqIGxleC5jIChqYXZhX3JlYWRfY2hhcik6IERpc2FsbG93IGludmFsaWQgYW5kIG92ZXJsb25nCglzZXF1ZW5jZXMuICBGaXhlcyBQUiBqYXZhLzIzMTkuCgoyMDAxLTA2LTA1ICBKZWZmIFN0dXJtICA8anN0dXJtQG9uZS1wb2ludC5jb20+CgoJKiBkZWNsLmMgKGNyZWF0ZV9wcmltaXRpdmVfdnRhYmxlKTogRG9uJ3QgY2FsbCBtYWtlX2RlY2xfcnRsLgoKMjAwMS0wNi0wNCAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQHJlZGhhdC5jb20+CgoJKiBleHByLmMgKGZvcmNlX2V2YWx1YXRpb25fb3JkZXIpOiBNYXRjaCB3cmFwcGVkIGN0b3IgY2FsbHMsIGxvY2F0ZQoJYXJndW1lbnRzIGFjY29yZGluZ2x5LgoKMjAwMS0wNi0wMiAgSm9zZXBoIFMuIE15ZXJzICA8anNtMjhAY2FtLmFjLnVrPgoKCSogZ2NqLnRleGk6IE1vdmUgY29udGVudHMgdG8ganVzdCBhZnRlciB0aXRsZSBwYWdlLgoKMjAwMS0wNi0wMSAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQHJlZGhhdC5jb20+CgoJKiBwYXJzZS55ICh0eXBlX2xpdGVyYWxzOik6IFVzZSBgYnVpbGRfaW5jb21wbGV0ZV9jbGFzc19yZWYnIHdpdGgKCWJ1aWx0aW4gdHlwZS4KCShwYXRjaF9pbmNvbXBsZXRlX2NsYXNzX3JlZik6IEJ1aWxkIHRoZSBjbGFzcyByZWYsIGJ1aWxkIHRoZSBjbGFzcwoJaW5pdCBpZiBuZWNlc3NhcnksIGNvbXBsZXRlIHRoZSB0cmVlLgoJRml4ZXMgUFIgamF2YS8yNjA1CgoyMDAxLTA1LTMxICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AcmVkaGF0LmNvbT4KCgkqIHBhcnNlLnkgKGxvb2t1cF9maWVsZF93cmFwcGVyKTogVGVzdCBgbmFtZScgY29kZS4KCShyZXNvbHZlX3F1YWxpZmllZF9leHByZXNzaW9uX25hbWUpOiBUZXN0IGBxdWFsX3dmbCcgY29kZS4KCShxdWFsaWZ5X2FtYmlndW91c19uYW1lKTogSGFuZGxlIGBDT05WRVJUX0VYUFInLCBmaXhlIGluZGVudGF0aW9uLAoJaGFuZGxlIGBxdWFsX3dmbCcgYnkgY29kZS4KCShtYXliZV9idWlsZF9wcmltdHR5cGVfdHlwZV9yZWYpOiBUZXN0IGB3ZmwnIGNvZGUuCgoyMDAxLTA1LTIzICBUaGVvZG9yZSBQYXBhZG9wb3VsbyAgPFRoZW9kb3JlLlBhcGFkb3BvdWxvQHNvcGhpYS5pbnJpYS5mcj4KCgkqIE1ha2UtbGFuZy5pbiAoJChzcmNkaXIpL2phdmEvZ2NqLmluZm8pOiBBZGRlZCBkZXBlbmRlbmNpZXMgb24KCWZkbC50ZXhpLgoJKGphdmEvZ2NqLmR2aSk6IFVzZSBURVhJMkRWSSBpbnN0ZWFkIG9mIGN1c3RvbSB0ZXggY2FsbHMuICBDcmVhdGUKCXRoZSBkdmkgZmlsZSBpbiB0aGUgamF2YSBkaXJlY3RvcnkuCgoyMDAxLTA1LTI1ICBTYW0gVEggIDxzYW1AdWNoaWNhZ28uZWR1PgoKCSogZ2VuLXRhYmxlLnBsIGphdmFvcC5oIGpjZi5oIGxleC5oLAoJcGFyc2UuaDogRml4IGhlYWRlciBpbmNsdWRlIGd1YXJkcy4KCjIwMDEtMDUtMjMgIEpvc2VwaCBTLiBNeWVycyAgPGpzbTI4QGNhbS5hYy51az4KCgkqIGp2LXNjYW4uYyAodmVyc2lvbik6IFVwZGF0ZSBjb3B5cmlnaHQgeWVhci4KCjIwMDEtMDUtMjEgIFBlciBCb3RobmVyICA8cGVyQGJvdGhuZXIuY29tPgoKCSogamNmLXBhcnNlLmMgKHJlYWRfY2xhc3MpOiAgSWYgY2xhc3MgaXMgZnJvbSAuY2xhc3Mgb3IgLnppcCBmaWxlCglhbmQgaXQncyBhbHJlYWR5IGJlZW4gcmVhZCwgZG9uJ3QgcHVzaC9wb3AgcGFyc2VyIGNvbnRleHQuCgoyMDAxLTA1LTE4ICBQZXIgQm90aG5lciAgPHBlckBib3RobmVyLmNvbT4KCgkqIGp2c3BlYy5jIChsYW5nX3NwZWNpZmljX3ByZV9saW5rKTogIFJlLWFycmFuZ2UgdGhlIGxpbmtlcgogICAgICAgIGNvbW1hbmQgbGluZSBzbyB0aGUganZnZW5tYWluLWdlbmVyYXRlZCBtYWluIHByb2dyYW0gY29tZXMgZmlyc3QuCgoyMDAxLTA1LTE1ICBUb20gVHJvbWV5ICA8dHJvbWV5QHJlZGhhdC5jb20+CgoJKiBjbGFzcy5jIChidWlsZF91dGY4X3JlZik6IERvbid0IGdlbmVyYXRlIGlkZW50aWZpZXIgYmFzZWQgb24KCXV0Zjhjb25zdCBjb250ZW50cy4KCjIwMDEtMDUtMTIgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQHJlZGhhdC5jb20+CgoJKiBqYXZhLXRyZWUuZGVmIChKQVZBX0VYQ19PQkpfRVhQUik6IE5ldy4KCSogZXhwci5jIChqYXZhX2xhbmdfZXhwYW5kX2V4cHIpOiBFeHBhbmQgaXQuCgkocHJvY2Vzc19qdm1faW5zdHJ1Y3Rpb24pOiBCdWlsZCBKQVZBX0VYQ19PQkpfRVhQUiBpbnN0ZWFkIG9mCgljYWxsaW5nIGJ1aWxkX2V4Y2VwdGlvbl9vYmplY3RfcmVmLgoJKiBwYXJzZS55IChjYXRjaF9jbGF1c2VfcGFyYW1ldGVyKTogTGlrZXdpc2UuCgkoYnVpbGRfZG90X2NsYXNzX21ldGhvZCk6IExpa2V3aXNlLgoJKHRyeV9yZWZlcmVuY2VfYXNzaWduY29udik6IExpa2V3aXNlLgoJKiBjaGVjay1pbml0LmMgKGNoZWNrX2luaXQpOiBDaGVjayBKQVZBX0VYQ19PQkpfRVhQUiBub3QgRVhDX1BUUl9FWFBSLgoJKiBqY2Ytd3JpdGUuYyAoZ2VuZXJhdGVfYnl0ZWNvZGVfaW5zbnMpOiBMaWtld2lzZS4KCjIwMDEtMDUtMDcgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0ByZWRoYXQuY29tPgoKCSogcGFyc2UueSAoYnVpbGRfdW5yZXNvbHZlZF9hcnJheV90eXBlKTogU2V0CglFWFBSX1dGTF9RVUFMSUZJQ0FUSU9OIG9uIHRoZSBuZXdseSBjcmVhdGVkIHdmbC4KCUZpeGVzIFBSIGphdmEvMjUzOC4gRml4ZXMgUFIgamF2YS8yNTM1LgoKMjAwMS0wNS0wNyAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQHJlZGhhdC5jb20+CgoJKiBwYXJzZS55IChmaXhfY29uc3RydWN0b3JzKTogUmVtb3ZlZCB1bm5lY2Vzc2FyeSBhc3NpZ25tZW50IHRvCglsb2NhbC4gTW92ZWQgYXNzaWdubWVudCB0byBgdGhpcyQ8bj4nLCBmaXhlZCBjb21tZW50cyBhbmQKCWluZGVudGF0aW9uLgoJKGJ1aWxkX3dmbF93cmFwKTogRml4ZWQgaW5kZW50YXRpb24uCglGaXhlcyBQUiBqYXZhLzI1OTgsIGphdmEvMjU3OSBhbmQgamF2YS8yNjU4LgoKMjAwMS0wNS0wMyAgTW8gRGVKb25nICA8bWRlam9uZ0ByZWRoYXQuY29tPgoKICAgICAgICAqIGxleC5jIChqYXZhX25ld19sZXhlcik6IENhbGwgaWNvbnZfY2xvc2Ugb24gdGVtcCBoYW5kbGUgdXNlZCB0bwoJY2hlY2sgZm9yIGJ5dGUgc3dhcC4KCjIwMDAtMDUtMDIgIEplZmYgU3R1cm0gIDxqc3R1cm1Ab25lLXBvaW50LmNvbT4KCgkqIGV4cHIuYyAoYnVpbGRfY2xhc3NfaW5pdCk6IE1vdmUgTU9ESUZZX0VYUFIKCW91dHNpZGUgb2YgQ09ORF9FWFBSLiAgUmVtb3ZlIHZhcmlhYmxlIGBjYWxsJy4KCjIwMDEtMDUtMDIgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGRlY2wuYzogTlVMTF9QVFIgLT4gTlVMTC4KCSogamNmLXdyaXRlLmM6IExpa2V3aXNlLgoKMjAwMS0wNS0wMSAgVG9tIFRyb21leSAgPHRyb21leUByZWRoYXQuY29tPgoKCSogTWFrZS1sYW5nLmluICgkKHNyY2RpcikvamF2YS9nY2ouaW5mbyk6IEFkZGVkIGAtSS4uJy4KCShqYXZhL2djai5kdmkpOiBBZGRlZCAkKHNyY2RpcikgdG8gVEVYSU5QVVRTLgoJKiBnY2oudGV4aTogVXBkYXRlZCBjb3B5cmlnaHQgdGV4dC4gIEluY2x1ZGUgZmRsLnRleGkuCgkoVG9wKTogTGluayB0byBuZXcgbm9kZS4KCjIwMDEtMDUtMDEgIFBlciBCb3RobmVyICA8cGVyQGJvdGhuZXIuY29tPgoKCSogcGFyc2UuaCAoUkVHSVNURVJfSU1QT1JUKTogIFVzZSB0cmVlX2NvbnMgaW5zdGVhZCBvZiBjaGFpbm9uLgoKMjAwMS0wNS0wMSAgUGVyIEJvdGhuZXIgIDxwZXJAYm90aG5lci5jb20+CgoJKiBwYXJzZS55IChqYXZhX3BvcF9wYXJzZXJfY29udGV4dCk6ICBUaGUgVFJFRV9WQUxVRSBvZiBhIGxpbmsgaW4gdGhlCglpbXBvcnRfbGlzdCBjb250YWlucyB0aGUgbmFtZSwgbm90IHRoZSBUUkVFX1BVUlBPU0UuCgoyMDAxLTA0LTI5ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBqY2YtaW8uYyAocmVhZF96aXBfbWVtYmVyKTogQ2FzdCB0byBsb25nIGluIGNvbXBhcmlzb24gd2l0aAoJc2lnbmVkIHZhbHVlLgoKCSoganZzcGVjLmMgKGxhbmdfc3BlY2lmaWNfZHJpdmVyKTogSW5pdGlhbGl6ZSB2YXJpYWJsZXMuCgoJKiBtYW5nbGUuYyAoZmluZF9jb21wcmVzc2lvbl9yZWNvcmRfbWF0Y2gpOiBMaWtld2lzZS4KCgkqIHR5cGVjay5jIChidWlsZF9udWxsX3NpZ25hdHVyZSk6IFByb3ZpZGUgc3RhdGljIHByb3RvdHlwZS4gIE1hcmsKCXBhcmFtZXRlciB3aXRoIEFUVFJJQlVURV9VTlVTRUQuCgoJKiB2ZXJpZnkuYyAodmVyaWZ5X2p2bV9pbnN0cnVjdGlvbnMpOiBJbml0aWFsaXplIHZhcmlhYmxlLgoKMjAwMS0wNC0yNyAgQnJ5Y2UgTWNLaW5sYXkgIDxicnljZUB3YWl0YWtpLm90YWdvLmFjLm56PgoKCSogcGFyc2UueSAoZG9fcmVzb2x2ZV9jbGFzcyk6IENoZWNrIGZvciBjeWNsaWMgaW5oZXJpdGFuY2UgZHVyaW5nCglpbm5lciBjbGFzcyByZXNvbHV0aW9uLgoKMjAwMS0wNC0yNyAgUGVyIEJvdGhuZXIgIDxwZXJAYm90aG5lci5jb20+CgoJKiBwYXJzZS55IChqYXZhX2V4cGFuZF9jbGFzc2VzKTogIERvbid0IGNoYW5nZSBjdHhwX2Zvcl9nZW5lcmF0aW9uCgl3aGlsZSBpdGVyYXRpbmcsIHNpbmNlIHRoYXQgY291bGQgY2F1c2UgZ2MgdG8gbG9zZSBzdHVmZi4KCjIwMDEtMDQtMjYgIFBlciBCb3RobmVyICA8cGVyQGJvdGhuZXIuY29tPgoKCUZpeCBtZXRob2Qgc2VhcmNoIHdydCBzY29wZSBvZiBpbm5lciBjbGFzc2VzIHRvIG1hdGNoIEpMUzIuCgkqIHR5cGVjay5jIChidWlsZF9udWxsX3NpZ25hdHVyZSk6ICBOZXcgc3RhdGljIGZ1bmN0aW9uLgoJKGhhc19tZXRob2QpOiAgTmV3IGZ1bmN0aW9uLiAgVXNlcyBidWlsZF9udWxsX3NpZ25hdHVyZSBhbmQgbG9va3VwX2RvLgoJKiBqYXZhLXRyZWUuaCAoaGFzX21ldGhvZCk6ICBOZXcgZGVjbGFyYXRpb24uCgkqIHBhcnNlLnkgKGZpbmRfYXBwbGljYWJsZV9hY2Nlc3NpYmxlX21ldGhvZHNfbGlzdCk6ICBEbyBub3Qgc2VhcmNoCgljb250ZXh0IG9mIGlubmVyIGNsYXNzZXMgaGVyZS4KCShwYXRjaF9tZXRob2RfaW52b2NhdGlvbik6ICBTZWFyY2ggc2NvcGUsIGllLiBjdXJyZW50IGFuZCBvdXRlciBjbGFzZXMsCglmb3IgbWV0aG9kIG1hdGNoaW5nIHNpbXBsZSBuYW1lLCB0byBmaW5kIGNsYXNzLgoKMjAwMS0wNC0yNiAgUGVyIEJvdGhuZXIgIDxwZXJAYm90aG5lci5jb20+CgoJKiBqY2Ytd3JpdGUuYyAoZ2VuZXJhdGVfYnl0ZWNvZGVfaW5zbnMgY2FzZSBTV0lUQ0hfRVhQUik6CglGaXggdGhpbmtvOiAgSWYgYSBzaW5nbGUgY2FzZSwgdXNlIGlmX2ljbXBlcSwgbm90IGlmZXEuCgoJKiBjb25zdGFudHMuYyAoZmluZF9tZXRob2RyZWZfd2l0aF9jbGFzc19pbmRleCk6ICBOZXcgZnVuY3Rpb24uCgkoZmluZF9tZXRob2RyZWZfaW5kZXgpOiAgVXNlIGZpbmRfbWV0aG9kcmVmX3dpdGhfY2xhc3NfaW5kZXguCgkqIGphdmEtdHJlZS5oIChmaW5kX21ldGhvZHJlZl93aXRoX2NsYXNzX2luZGV4KTogIE5ldyBkZWNsYXJhdGlvbi4KCSogamNmLXdyaXRlLmMgKGdlbmVyYXRlX2J5dGVjb2RlX2luc25zIGNhc2UgQ0FMTF9FWFBSKTogIERvbid0IGNoYW5nZQoJREVDTF9DT05URVhULCBpbnN0ZWFkIHVzZSBuZXcgZmluZF9tZXRob2RyZWZfd2l0aF9jbGFzc19pbmRleCBmdW5jdGlvbi4KCUlmIGNvbnRleHQgY2hhbmdlZCBmcm9tIGludGVyZmFjZSB0byBjbGFzcywgZG9uJ3QgdXNlIGludm9rZWludGVyZmFjZS4KCjIwMDEtMDQtMjUgIFBlciBCb3RobmVyICA8cGVyQGJvdGhuZXIuY29tPgoKCSogdmVyaWZ5LmMgKHZlcmlmeV9qdm1faW5zdHJ1Y3Rpb25zKTogIEZvciBmaWVsZCBpbnN0cnVjdGlvbnMsCgljaGVjayB0aGF0IGZpZWxkIGluZGV4IGlzIHZhbGlkLiAgRm9yIGludm9rZSBpbnN0cnVjdGlvbnMsIGNoZWNrIHRoYXQKCW1ldGhvZCBpbmRleCBpcyB2YWxpZC4KCjIwMDEtMDQtMjUgIEFsZXhhbmRyZSBPbGl2YSAgPGFvbGl2YUByZWRoYXQuY29tPgoKCSogY29uZmlnLWxhbmcuaW4gKHRhcmdldF9saWJzKTogQ29weSBmcm9tICRsaWJnY2pfc2F2ZWQuCgoyMDAxLTA0LTI1ICBCcnljZSBNY0tpbmxheSAgPGJyeWNlQHdhaXRha2kub3RhZ28uYWMubno+CgoJKiBkZWNsLmMgKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogQWRkIG5ldyBjbGFzcyAicHJvdGVjdGlvbkRvbWFpbiIKCWZpZWxkLgoJKiBjbGFzcy5jIChtYWtlX2NsYXNzX2RhdGEpOiBTZXQgaW5pdGlhbCB2YWx1ZSBmb3IgInByb3RlY3Rpb25Eb21haW4iLgoKMjAwMS0wNC0yMiAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSoganZzcGVjLmMgKGxhbmdfc3BlY2lmaWNfZHJpdmVyKTogRml4IG1lbW9yeSBhbGxvY2F0aW9uCglkZWZpY2l0LCBieSB1c2luZyBjb25jYXQgaW4gbGlldSBvZiB4bWFsbG9jL3NwcmludGYuCgoyMDAxLTA0LTIwICBQZXIgQm90aG5lciAgPHBlckBib3RobmVyLmNvbT4KCglGaXhlcyB0byBjb21waWxlIG11bHRpcGxlIC5jbGFzcyBmaWxlcyBhdCBvbmNlLgoJKiBkZWNsLmMgKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogIERvbid0IHNldCBDTEFTU19MT0FERURfUC4KCSogamF2YS10cmVlLmggKENMQVNTX1BBUlNFRF9QKTogIE5ldyBtYWNyby4KCShDTEFTU19MT0FERURfUCk6ICBSZS1kZWZpbmUgdG8gdXNlIFRZUEVfU0laRSBhbmQgQ0xBU1NfUEFSU0VEX1AuCgkqIGpjZi1wYXJzZS5jIChqY2ZfcGFyc2Vfc291cmNlKTogIElubGluZSBpbnRvIHJlYWRfY2xhc3MuCgkocmVhZF9jbGFzcyk6ICBBdm9pZCBzb21lIGNvZGUgZHVwbGljYXRpb24uCglEb24ndCBjYWxsIEpDRl9GSU5JU0ggZm9yIGEgLmNsYXNzIGZpbGUgLSBtaWdodCBiZSBuZWVkZWQgbGF0ZXIuCgkoamNmX3BhcnNlKTogIERvbid0IGNhbGwgbGF5b3V0X2NsYXNzIGhlcmUuICBDaGVjay9zZXQgQ0xBU1NfUEFSU0VEX1AKCXJhdGhlciB0aGFuIENMQVNTX0xPQURFRF9QLCBzaW5jZSBsYXR0ZXIgaW1wbGllcyBjbGFzcyBsYWlkIG91dC4KCSh5eXBhcnNlKTogIERvIGxheW91dF9jbGFzcyBhbmQgSkNGX0ZJTklTaCBoZXJlIGluc3RlYWQsIGluIHBhc3MgMi4KCSogcGFyc2UueTogIERvbid0IG5lZWQgdG8gc2V0IENMQVNTX0xPQURFRF9QIGZvciBhcnJheSB0eXBlcy4KCjIwMDEtMDQtMTEgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIE1ha2UtbGFuZy5pbiAoamF2YS9ib2VobS5vKTogRGVwZW5kIG9uIHRvcGxldi5oLgoKCSogYm9laG0uYzogSW5jbHVkZSB0b3BsZXYuaC4KCjIwMDEtMDQtMDYgIFRvbSBUcm9tZXkgIDx0cm9tZXlAcmVkaGF0LmNvbT4KCSAgICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AcmVkaGF0LmNvbT4KCglGaXggZm9yIFBSIGdjai8xNDA0IGFuZCBQUiBnY2ovMjMzMjoKCSogcGFyc2UueSAoYnVpbGRfYXJyYXlfZnJvbV9uYW1lKTogSWYgd2UgdXNlIHRoZSB0eXBlX3dmbCB0aGVuCglhY2N1bXVsYXRlIGRpbWVuc2lvbnMgZnJvbSB0aGUgb3JpZ2luYWwgdHlwZSBhcyB3ZWxsLgoJKGJ1aWxkX3VucmVzb2x2ZWRfYXJyYXlfdHlwZSk6IERvbid0IG1vZGlmeSBUWVBFX09SX1dGTCBpbiBwbGFjZS4KCjIwMDEtMDQtMDYgIFRvbSBUcm9tZXkgIDx0cm9tZXlAcmVkaGF0LmNvbT4KCgkqIHBhcnNlLnkgKGFuYWx5emVfY2xpbml0X2JvZHkpOiBSZXR1cm4gdHJ1ZSBpZiB0aGUgc2Vjb25kIG9wZXJhbmQKCW9mIGEgTUVUSE9EX0VYUFIgaXMgbm9uemVyby4KCjIwMDEtMDQtMDYgIFRvbSBUcm9tZXkgIDx0cm9tZXlAcmVkaGF0LmNvbT4KCgkqIE1ha2UtbGFuZy5pbiAoJChzcmNkaXIpL2phdmEvcGFyc2Utc2Nhbi5jKTogUnVuIGJpc29uIGZyb20gYnVpbGQKCWRpcmVjdG9yeS4KCSgkKHNyY2RpcikvamF2YS9wYXJzZS5jKTogTGlrZXdpc2UuCgoyMDAxLTA0LTA1ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AcmVkaGF0LmNvbT4KCgkqIGdjai50ZXhpOiBVc2UgYHdoaWNoLWdjaicgaW5zdGVhZCBvZiBgd2hpY2gtZzc3LicKCSh2ZXJzaW9uLWdjYyk6IEluaXRpYWxpemVkLgoJKHdoaWNoLWdjaik6IExpa2V3aXNlLgoKMjAwMS0wNC0wNCAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQHJlZGhhdC5jb20+CgoJKiBqYXZhLXRyZWUuaCAoc3RydWN0IGxhbmdfZGVjbCk6IE5ldyBtYWNybwoJYERFQ0xfRklYRURfQ09OU1RSVUNUT1JfUC4nIE5ldyBmaWVsZCBgZml4ZWRfY3Rvci4nCgkqIHBhcnNlLnkgKGJ1aWxkX2luc3RhbmNlX2luaXRpYWxpemVyKTogTmV3IGZ1bmN0aW9uLgoJKGFkZF9pbnN0YW5jZV9pbml0aWFsaXplcik6IFVzZSBpdC4KCShqYXZhX2ZpeF9jb25zdHJ1Y3RvcnMpOiBTZXQgYGN1cnJlbnRfY2xhc3MnIGJlZm9yZSBmaXggcGFzcy4KCShmaXhfY29uc3RydWN0b3JzKTogSnVzdCByZXR1cm4gaWYgYWxyZWFkeSBmaXhlZC4gTW92ZSBgc3VwZXIoKScKCWludm9rYXRpb24gYWhlYWQuIFVzZSBgYnVpbGRfaW5zdGFuY2VfaW5pdGlhbGl6ZXIuJwoJRml4ZXMgUFIgamF2YS8xMzE1LgoKMjAwMS0wNC0wNCAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQHJlZGhhdC5jb20+CgoJKiBwYXJzZS55IChyZXNvbHZlX3F1YWxpZmllZF9leHByZXNzaW9uX25hbWUpOiBQYXNzIGZpZWxkJ3MKCURFQ0xfQ09OVEVYVCB0byBgbm90X2FjY2Vzc2libGVfcC4nCgkobm90X2FjY2Vzc2libGVfcCk6IENoYW5nZWQgcGFyYW1ldGVycyBvcmRlciBpbiBgaW5oZXJpdHNfZnJvbV9wJwoJaW52b2thdGlvbi4KCjIwMDEtMDMtMjcgIEFuZHJldyBIYWxleSAgPGFwaEBjYW1icmlkZ2UucmVkaGF0LmNvbT4KCgkqIGxhbmctb3B0aW9ucy5oOiBBZGQgZmxhZ19jaGVja19yZWZlcmVuY2VzLgoKMjAwMS0wNC0wNCAgUGVyIEJvdGhuZXIgIDxwZXJAYm90aG5lci5jb20+CgoJKiBqYXZhLXRyZWUuaCAoQ09OU1RBTlRfVkFMVUVfUCk6ICBOZXcgbWFjcm8uCgkqIGpjZi13cml0ZS5jIChnZW5lcmF0ZV9jbGFzc2ZpbGUpOiAgVXNlIENPTlNUQU5UX1ZBTFVFX1AuCgkqIHBhcnNlLnkgKG1heWJlX2J1aWxkX2NsYXNzX2luaXRfZm9yX2ZpZWxkKTogIE5ldyBzdGF0aWMgZnVuY3Rpb24uCgkocmVzb2x2ZV9leHByZXNzaW9uX25hbWUsIHJlc29sdmVfZmllbGRfYWNjZXNzKTogIFVzZQoJbWF5YmVfYnVpbGRfY2xhc3NfaW5pdF9mb3JfZmllbGQgaW5zdGVhZCBvZiBidWlsZF9jbGFzc19pbml0CglUaGlzIGRvZXMgbm90IGRvIHRoZSBpbml0IGlmIHRoZSBmaWVsZCBpcyBjb21waWxlLXRpbWUtY29uc3RhbnQuCgkocmVzb2x2ZV9maWVsZF9hY2Nlc3MpOiAgU2ltcGxpZnkuCgoJKiBwYXJzZS55IChmb2xkX2NvbnN0YW50X2Zvcl9pbml0KTogIE1lcmdlIHRlc3QgaW50byBzd2l0Y2guCgoyMDAxLTA0LTAzICBaYWNrIFdlaW5iZXJnICA8emFja3dAc3RhbmZvcmQuZWR1PgoKCSogTWFrZS1sYW5nLmluIChidWZmZXIubywgY2hlY2staW5pdC5vLCBjbGFzcy5vKTogRG9uJ3QgZGVwZW5kCglvbiBnYW5zaWRlY2wuaC4KCSogYnVmZmVyLmMsIGp2Z2VubWFpbi5jOiBEb24ndCBpbmNsdWRlIGdhbnNpZGVjbC5oLgoKMjAwMS0wNC0wMiAgWmFjayBXZWluYmVyZyAgPHphY2t3QHN0YW5mb3JkLmVkdT4KCgkqIGV4cHIuYyAocG9wX3R5cGVfMCk6IFNhdmUgdGhlIHJlc3VsdCBvZiB0aGUgZmlyc3QKCWxhbmdfcHJpbnRhYmxlX25hbWUgY2FsbCBpbiBhIHNjcmF0Y2ggYnVmZmVyLCBzbyBpdAoJd29uJ3QgYmUgY2xvYmJlcmVkIGJ5IHRoZSBzZWNvbmQgY2FsbC4KCjIwMDEtMDMtMzAgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0ByZWRoYXQuY29tPgoKCSogcGFyc2Utc2Nhbi55IChhcnJheV90eXBlOik6IFJld3JpdHRlbi4KCSh0eXBlX2RlY2xhcmF0aW9uOik6IGBlbXB0eV9zdGF0ZW1lbnQnIHJlcGxhY2VzIGBTQ19USy4nCgkoY2xhc3NfbWVtYmVyX2RlY2xhcmF0aW9uOik6IGBlbXB0eSBzdGF0ZW1lbnQnIGFkZGVkLgoJKG1ldGhvZF9ib2R5Oik6IFNpbXBsaWZpZWQuCgkoc3RhdGljX2luaXRpYWxpemVyOik6IExpa2V3aXNlLgoJKHByaW1hcnlfbm9fbmV3X2FycmF5Oik6IFVzZSBgdHlwZV9saXRlcmFscy4nCgkodHlwZV9saXRlcmFsczopOiBOZXcgcnVsZS4KCShkaW1zOik6IFNldCBhbmQgdXBkYXRlIGBicmFja2V0X2NvdW50LicKCUZpeGVzIFBSIGphdmEvMTA3NC4gRml4ZXMgUFIgamF2YS8yNDEyLgoKMjAwMS0wMy0yOCAgSGFucyBCb2VobSAgPGJvZWhtQGFjbS5vcmc+CgoJKiBib2VobS5jIChQUk9DRURVUkVfT0JKRUNUX0RFU0NSSVBUT1IpOiBTZXQgdG8gdXNlIGBidWlsZF9pbnRfMi4nCgkoZ2V0X2JvZWhtX3R5cGVfZGVzY3JpcHRvcik6IFNldCB0eXBlIG9uIHJldHVybmVkIHZhbHVlIHRvIGJlIGEKCXBvaW50ZXIgbGVuZ3RoIGludGVnZXIuCgoyMDAxLTAzLTI4ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBleHByLmMgKHBvcF90eXBlXzApOiBDYWxsIGBjb25jYXQnIHJhdGhlciB0aGFuIGJ1aWxkaW5nIHRoZQoJc3RyaW5nIG1hbnVhbGx5LgoJKHBvcF90eXBlKTogQWRkIGZvcm1hdCBzcGVjaWZpZXIgaW4gY2FsbCB0byBgZXJyb3InLgoKCSogcGFyc2UueSAocGF0Y2hfbWV0aG9kX2ludm9jYXRpb24pOiBBdm9pZCBjYXN0aW5nIGF3YXkKCWNvbnN0LW5lc3MuCgoyMDAxLTAzLTI4ICBKZWZmcmV5IE9sZGhhbSAgPG9sZGhhbUBjb2Rlc291cmNlcnkuY29tPgoKCSoganZnZW5tYWluLmMgKGRvX21hbmdsZV9jbGFzc25hbWUpOiBFbmQgc3RyaW5nIGNvbnN0YW50IHdpdGggJ1wwJy4KCjIwMDEtMDMtMjggIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQHJlZGhhdC5jb20+CgoJSUEtNjQgQUJJIEV4Y2VwdGlvbiBIYW5kbGluZzoKCSogTWFrZS1sYW5nLmluIChleGNlcHQubyk6IERvbid0IGRlcGVuZCBvbiBlaC1jb21tb24uaC4KCSogY2hlY2staW5pdC5jIChjaGVja19pbml0KTogSGFuZGxlIEVYQ19QVFJfRVhQUi4KCSogZGVjbC5jIChpbml0X2RlY2xfcHJvY2Vzc2luZykgW3Rocm93X25vZGVdOiBObyBfSnZfU2psal9UaHJvdy4KCVtzb2Z0X2V4Y2VwdGlvbmluZm9fY2FsbF9ub2RlXTogUmVtb3ZlLgoJW2VoX3BlcnNvbmFsaXR5X2xpYmZ1bmMsIGxhbmdfZWhfcnVudGltZV90eXBlXTogTmV3LgoJKGVuZF9qYXZhX21ldGhvZCk6IE5vIGVtaXRfaGFuZGxlcnMuCgkqIGV4Y2VwdC5jIChqYXZhX3NldF9leGNlcHRpb25fbGFuZ19jb2RlKTogUmVtb3ZlLgoJKG1ldGhvZF9pbml0X2V4Y2VwdGlvbnMpOiBEb24ndCBjYWxsIGl0LgoJKHByZXBhcmVfZWhfdGFibGVfdHlwZSk6IE5vIENBVENIX0FMTF9UWVBFLgoJKGJ1aWxkX2V4Y2VwdGlvbl9vYmplY3RfcmVmKTogTmV3LgoJKGV4cGFuZF9lbmRfamF2YV9oYW5kbGVyKTogVXBkYXRlIGZvciBleGNlcHQuaCBuYW1lIGNoYW5nZXMuCgkoZW1pdF9oYW5kbGVycywgZXhwYW5kX3Jlc3VtZV9hZnRlcl9jYXRjaCk6IFJlbW92ZS4KCSogZXhwci5jIChqYXZhX2xhbmdfZXhwYW5kX2V4cHIpOiBVcGRhdGUgZm9yIGV4Y2VwdC5oIG5hbWUgY2hhbmdlcy4KCShwcm9jZXNzX2p2bV9pbnN0cnVjdGlvbik6IFVzZSBidWlsZF9leGNlcHRpb25fb2JqZWN0X3JlZi4KCSogamF2YS10cmVlLmggKEpUSV9TT0ZUX0VYQ0VQVElPTklORk9fQ0FMTF9OT0RFKTogUmVtb3ZlLgoJKHNvZnRfZXhjZXB0aW9uaW5mb19jYWxsX25vZGUpOiBSZW1vdmUuCgkoYnVpbGRfZXhjZXB0aW9uX29iamVjdF9yZWYpOiBEZWNsYXJlLgoJKiBqY2Ytd3JpdGUuYyAoZ2VuZXJhdGVfYnl0ZWNvZGVfaW5zbnMpIFtDQUxMX0VYUFJdOiBObwoJc29mdF9leGNlcHRpb25pbmZvX2NhbGxfbm9kZS4gIE1vdmUgcHJvY2Vzc2luZyAuLi4KCVtFWENfUFRSX0VYUFJdOiAuLi4gaGVyZS4KCSogcGFyc2UuaCAoQlVJTERfQVNTSUdOX0VYQ0VQVElPTl9JTkZPKTogUmVtb3ZlIGRlYWQgY29kZS4KCSogcGFyc2UueSAoY2F0Y2hfY2xhdXNlX3BhcmFtZXRlcik6IFVzZSBidWlsZF9leGNlcHRpb25fb2JqZWN0X3JlZi4KCShzb3VyY2VfZW5kX2phdmFfbWV0aG9kKTogTm8gamF2YV9zZXRfZXhjZXB0aW9uX2xhbmdfY29kZSBvcgoJZW1pdF9oYW5kbGVycy4KCShidWlsZF9kb3RfY2xhc3NfbWV0aG9kKTogVXNlIGJ1aWxkX2V4Y2VwdGlvbl9vYmplY3RfcmVmLgoJKHRyeV9yZWZlcmVuY2VfYXNzaWduY29udik6IENoZWNrIEVYQ19QVFJfRVhQUiBub3QKCXNvZnRfZXhjZXB0aW9uaW5mb19jYWxsX25vZGUuCgoyMDAxLTAzLTI4ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEByZWRoYXQuY29tPgoKCSogamF2YS10cmVlLmggKHRocm93X25vZGUpOiBEZWZpbmUgYXMgYSBzaW5nbGUgbWVtYmVyIG9mCglqYXZhX2dsb2JhbF90cmVlcyBpbnN0ZWFkIG9mIGEgc2VwYXJhdGUgYXJyYXkuCgkoSlRJX1RIUk9XX05PREUpOiBOZXcuCgkqIGRlY2wuYyAodGhyb3dfbm9kZSk6IERvbid0IGRlY2xhcmUuCgkoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBJbml0IGEgc2NhbGFyIHRocm93X25vZGUuCglEb24ndCByZWdpc3RlciBpdCBmb3IgZ2MuCgkqIGNoZWNrLWluaXQuYyAoY2hlY2tfaW5pdCk6IFJlZmVyZW5jZSBzY2FsYXIgdGhyb3dfbm9kZS4KCSogZXhwci5jIChidWlsZF9qYXZhX2F0aHJvdyk6IExpa2V3aXNlLgoJKiBqY2Ytd3JpdGUuYyAoZ2VuZXJhdGVfYnl0ZWNvZGVfaW5zbnMpOiBMaWtld2lzZS4KCSogcGFyc2UuaCAoQlVJTERfVEhST1cpOiBMaWtld2lzZS4KCjIwMDEtMDMtMjggIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQHJlZGhhdC5jb20+CgoJKiBkZWNsLmMgKGVuZF9qYXZhX21ldGhvZCk6IERvIG5vdCBzYXZlIGFuZCByZXN0b3JlCglmbGFnX25vbl9jYWxsX2V4Y2VwdGlvbnMuCgkqIHBhcnNlLnkgKHNvdXJjZV9lbmRfamF2YV9tZXRob2QpOiBMaWtld2lzZS4KCSogbGFuZy5jIChmbGFnX2V4Y2VwdGlvbnMpOiBEb24ndCBkZWNsYXJlLgoJKGphdmFfaW5pdF9vcHRpb25zKTogU2V0IGZsYWdfbm9uX2NhbGxfZXhjZXB0aW9ucy4gIFNldAoJZmxhZ19leGNlcHRpb25zIGhlcmUgLi4uCgkoamF2YV9pbml0KTogLi4uIG5vdCBoZXJlLgoKMjAwMS0wMy0yNyAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAcmVkaGF0LmNvbT4KCgkqIGV4cHIuYywgcGFyc2UuaDogVXNlIFVTSU5HX1NKTEpfRVhDRVBUSU9OUyBpbnN0ZWFkIG9mCglleGNlcHRpb25zX3ZpYV9sb25nam1wLgoKCSogbGFuZy5jIChmbGFnX25ld19leGNlcHRpb25zKTogRG9uJ3QgZGVjbGFyZSBpdC4KCShqYXZhX2luaXRfb3B0aW9ucyk6IE9yIHNldCBpdC4KCjIwMDEtMDMtMjcgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQHJlZGhhdC5jb20+CgoJKiBkZWNsLmMgKGVuZF9qYXZhX21ldGhvZCk6IFJlbmFtZSBhc3luY2hyb25vdXNfZXhjZXB0aW9ucyB0bwoJZmxhZ19ub25fY2FsbF9leGNlcHRpb25zLgoJKiBwYXJzZS55IChzb3VyY2VfZW5kX2phdmFfbWV0aG9kKTogTGlrZXdpc2UuCgoyMDAxLTAzLTI3ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBNYWtlLWxhbmcuaW46IERlcGVuZCBvbiAkKFNZU1RFTV9IKSwgbm90IHN5c3RlbS5oLgoKMjAwMS0wMy0yNiAgTWFyayBNaXRjaGVsbCAgPG1hcmtAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIHBhcnNlLmggKERFQ0xfRU5EX1NPVVJDRV9MSU5FKTogRG9uJ3QgcmVseSBvbiBERUNMX0ZSQU1FX1NJWkUuCgoyMDAxLTAzLTI2ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AcmVkaGF0LmNvbT4KCgkqIHBhcnNlLnkgKGZpbmRfYXNfaW5uZXJfY2xhc3MpOiBGb2xsb3cgY3VycmVudCBwYWNrYWdlCglpbmRpY2F0aW9ucyBub3QgdG8gbWlzdGFraW5nbHkgbG9hZCBhbiB1bnJlbGF0ZWQgY2xhc3MuCgoyMDAxLTAzLTI1ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBjb25zdGFudHMuYyAoUFVUTik6IFVzZSBtZW1jcHksIG5vdCBiY29weS4KCgkqIGxleC5jIChqYXZhX3JlYWRfY2hhcik6IFVzZSBtZW1tb3ZlLCBub3QgYmNvcHkuCgoJKiBwYXJzZS55IChqYXZhX3BhcnNlcl9jb250ZXh0X3Jlc3VtZSk6IFVzZSBtZW1jcHksIG5vdCBiY29weS4KCjIwMDEtMDMtMjMgIFBlciBCb3RobmVyICA8cGVyQGJvdGhuZXIuY29tPgoKCSogdmVyaWZ5LmMgKHZlcmlmeV9qdm1faW5zdHJ1Y3Rpb25zKTogIFJlcGxhY2UgMyBwb3BfdHlwZSBieSBQT1BfVFlQRQoJbWFjcm8gZm9yIGJldHRlciBlcnJvciBwaW4tcG9pbnRpbmcuCgkqIGphdmEtdHJlZS5oOiAgRml4IHR5cG8gaW4gY29tbWVudC4KCgkqIGpjZi13cml0ZS5jIChnZW5lcmF0ZV9ieXRlY29kZV9pbnNucyk6ICBDaGFuZ2VzIHRvIFRSWV9GSU5BTExZX0VYUFIuCglEb24ndCBpbmNsdWRlIGpzci9nb3RvIGluIGV4Y2VwdGlvbiByYW5nZS4KCUNoZWNrIGlmIHN0YXJ0IGFuZCBlbmQgb2YgZXhjZXB0aW9uIHJhbmdlIGFyZSB0aGUgc2FtZSAoYWxzbyBUUllfRVhQUikuCglEb24ndCBlbWl0IGpzciBhZnRlciB0cnlfYmxvY2sgaWYgQ0FOX0NPTVBMRVRFX05PUk1BTExZIGlzIGZhbHNlLgoJSG93ZXZlciwgZG8gZW1pdCB0aGUgZm9sbG93aW5nIGdvdG8gZXZlbiBpZiB0cnlfYmxvY2sgaXMgZW1wdHkuCglEZWZlciBmcmVlaW5nIGV4Y2VwdGlvbl9kZWNsIHVudGlsIGFmdGVyIHRoZSBmaW5hbGl6ZXIsIHRvIG1ha2UKCXN1cmUgdGhlIGxvY2FsIGlzbid0IHJldXNlZCBpbiB0aGUgZmluYWxpemVyLiAgRml4ZXMgUFIgamF2YS8xMjA4LgoKCSogcGFyc2UueSAoamF2YV9jb21wbGV0ZV9saHMpOiAgSWYgdGhlIHRyeS1jbGF1c2UgaXMgZW1wdHksIGp1c3QKCXJldHVybiB0aGUgZmluYWxseS1jbGF1c2UgYW5kIHZpY2UgdmVyc2EuCgoyMDAxLTAzLTIzICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AcmVkaGF0LmNvbT4KCgkqIGdjai50ZXhpIChJbnB1dCBPcHRpb25zKTogZG9jdW1lbnRlZCB0aGUgY2hlY2sgZm9yIGF0dHJpYnV0ZQoJYGdudS5nY2MuZ2Njai1jb21waWxlZCcgYW5kIHRoZSBgLWZmb3JjZS1jbGFzc2VzLWFyY2hpdmUtY2hlY2snIGZsYWcuCgkqIGphdmEtdHJlZS5oIChmbGFnX2ZvcmNlX2NsYXNzZXNfYXJjaGl2ZV9jaGVjayk6IERlY2xhcmVkIGV4dGVybi4KCSogamNmLXBhcnNlLmMgKEhBTkRMRV9HQ0pDT01QSUxFRF9BVFRSSUJVVEUpOiBOZXcgbWFjcm8uCgkoamNmX3BhcnNlKTogQ2hlY2sgZm9yIHRoZSByaWdodCBjbGFzc2VzIGFyY2hpdmUgaWYgbmVjZXNzYXJ5LgoJKiBqY2YtcmVhZGVyLmMgKGdldF9hdHRyaWJ1dGUpOiBEZWZpbmUgYE1BVENIX0FUVFJJQlVURScgYW5kIHVzZSBpdC4KCShqY2ZfcGFyc2VfZmllbGRzKTogRml4ZWQgaW5kZW50YXRpb24uCgkqIGpjZi13cml0ZS5jIChhcHBlbmRfZ2NqX2F0dHJpYnV0ZSk6IE5ldyBmdW5jdGlvbi4KCShnZW5lcmF0ZV9jbGFzc2ZpbGUpOiBDb21wdXRlIHRoZSBhdHRyaWJ1dGUgY291bnQsIGludm9rZQoJYGFwcGVuZF9nY2pfYXR0cmlidXRlJy4KCSogamNmLmggKHR5cGVkZWYgc3RydWN0IEpDRik6IGBzZWVuX2luX3ppcCcgYW5kIGBqYXZhX3NvdXJjZScKCXR1cm5lZCBpbnRvIGJpdCBmaWVsZHMuIE5ldyBiaXQgZmllbGQgYHJpZ2h0X3ppcC4nCgkoSkNGX1pFUk8pOiBTZXQgYHJpZ2h0X3ppcCcgdG8gemVyby4KCSogbGFuZy1vcHRpb25zLmggKC1mZm9yY2UtY2xhc3Nlcy1hcmNoaXZlLWNoZWNrKTogQWRkZWQgZmxhZy4KCSogbGFuZy5jIChmbGFnX2ZvcmNlX2NsYXNzZXNfYXJjaGl2ZV9jaGVjayk6IE5ldyBmbGFnLgoJKGxhbmdfZl9vcHRpb25zKTogTmV3IGVudHJ5IGBmb3JjZS1jbGFzc2VzLWFyY2hpdmUtY2hlY2suJwoJRml4ZXMgUFIgamF2YS8xMjEzLgoKMjAwMS0wMi0wNyAgQW5kcmV3IEhhbGV5ICA8YXBoQHJlZGhhdC5jb20+CgoJKiBnY2oudGV4aSAoQ29uZmlndXJlLXRpbWUgT3B0aW9ucyk6IEFkZCAtZmNoZWNrLXJlZmVyZW5jZXMuCgkqIGV4cHIuYyAoYnVpbGRfamF2YV9pbmRpcmVjdF9yZWYpOiBOZXcgZnVuY3Rpb24uCgkoamF2YV9jaGVja19yZWZlcmVuY2UpOiBOZXcgZnVuY3Rpb24uCgkoYnVpbGRfamF2YV9hcnJheV9sZW5ndGhfYWNjZXNzKTogVXNlIGJ1aWxkX2phdmFfaW5kaXJlY3RfcmVmIHRvCgljaGVjayBmb3IgbnVsbCByZWZlcmVuY2VzLgoJKGJ1aWxkX2phdmFfYXJyYXlhY2Nlc3MpOiBMaWtld2lzZS4KCShidWlsZF9nZXRfY2xhc3MpOiBMaWtld2lzZS4KCShidWlsZF9maWVsZF9yZWYpOiBMaWtld2lzZS4KCShpbnZva2VfYnVpbGRfZHRhYmxlKTogTGlrZXdpc2UuCgkoYnVpbGRfaW52b2tlaW50ZXJmYWNlKTogTGlrZXdpc2UuCgkqIGxhbmcuYyAobGFuZ19mX29wdGlvbnMpOiBBZGQgZmxhZ19jaGVja19yZWZlcmVuY2VzLgoJKiBqdnNwZWMuYyAoanZnZW5tYWluX3NwZWMpOiBBZGQgZmxhZ19jaGVja19yZWZlcmVuY2VzLgoJKiBqYXZhLXRyZWUuaCAoZmxhZ19jaGVja19yZWZlcmVuY2VzKTogTmV3IHZhcmlhYmxlLgoJKiBsYW5nLmMgKGZsYWdfY2hlY2tfcmVmZXJlbmNlcyk6IExpa2V3aXNlLgoJKiBwYXJzZS55IChwYXRjaF9pbnZva2UpOiBVc2UgamF2YV9jaGVja19yZWZlcmVuY2UuCgkocGF0Y2hfYXNzaWdubWVudCk6IEFsbG93IGZvciBleHRyYSBuZXN0aW5nIGluCglfSnZfQ2hlY2tBcnJheVN0b3JlLgoKMjAwMS0wMy0yMyAgQnJ5Y2UgTWNLaW5sYXkgIDxicnljZUBhbGJhdHJvc3MuY28ubno+CgoJKiBnamF2YWguYyAoY3h4X2tleXdvcmRzKTogVXBkYXRlIGZyb20gdGhlIGRlZmluaXRpdmUgbGlzdCBpbiBjcC9sZXguYy4KCSogbGV4LmMgKGN4eF9rZXl3b3Jkcyk6IExpa2V3aXNlLgoKMjAwMS0wMy0yMSAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQHJlZGhhdC5jb20+CgoJKiBwYXJzZS55IChxdWFsaWZ5X2FtYmlndW91c19uYW1lKTogQnJvYWRlbiBgbGVuZ3RoJwoJcmVjb2duaXRpb24uIEhlbHAgTU9ESUZZX0VYUFIgYmUgcmVzb2x2ZWQgYXMgZXhwcmVzc2lvbiBuYW1lcy4KCUZpeGVzIFBSIGphdmEvMjA2Ni4gRml4ZXMgUFIgamF2YS8yNDAwLgoKMjAwMS0wMy0yMSAgQnJ5Y2UgTWNLaW5sYXkgIDxicnljZUBhbGJhdHJvc3MuY28ubno+CgoJKiBnamF2YWguYyAocHJvY2Vzc19maWxlKTogTWFyayBpbnRlcmZhY2UgZGVmaW5pdGlvbnMgd2l0aAoJIl9fYXR0cmlidXRlX18gKChqYXZhX2ludGVyZmFjZSkpIi4KCjIwMDEtMDMtMjEgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0ByZWRoYXQuY29tPgoKCSogY2xhc3MuYyAobGF5b3V0X2NsYXNzKTogRml4ZWQgcHVzaF9zdXBlcl9maWVsZCdzIHNlY29uZAoJYXJndW1lbnQuIEZpeGVzIFBSIGphdmEvMjMzMy4KCShqZGVwX3Jlc29sdmVfY2xhc3MpOiBSZXNldCBUWVBFX1NJWkUgaWYgYGVycm9yX21hcmtfbm9kZScsIGl0J3MKCXRvbyBlYXJseSB0byBsYXkgaW5uZXJjbGFzc2VzIG91dC4KCjIwMDEtMDMtMjAgIFRvbSBUcm9tZXkgIDx0cm9tZXlAcmVkaGF0LmNvbT4KCSAgICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvIDxhcGJpYW5jb0ByZWRoYXQuY29tPgoKCSogcGFyc2UueSAocGF0Y2hfYXNzaWdubWVudCk6IEhhbmRsZSB0aGUgY2FzZSBvZiBhIFNBVkVfRVhQUgoJaW5zaWRlIGFuIGFycmF5IHJlZmVyZW5jZS4gSW5zZXJ0aW9uIG9mIHRoZSBhcnJheSBzdG9yZSBjaGVjawoJcmV3cml0dGVuLiBGaXhlcyBQUiBqYXZhLzIyOTkuCgoyMDAxLTAzLTIwICBUb20gVHJvbWV5ICA8dHJvbWV5QHJlZGhhdC5jb20+CgoJKiBsZXguYyAoamF2YV9yZWFkX3VuaWNvZGUpOiBPbmx5IGFjY2VwdCBsZWFkaW5nIGB1J3MuCgoyMDAxLTAzLTIwICBUb20gVHJvbWV5ICA8dHJvbWV5QHJlZGhhdC5jb20+CgoJKiBqY2YtcGFyc2UuYyAocmVhZF9jbGFzcyk6IEluaXRpYWxpemUgYGNsYXNzJy4KCjIwMDEtMDMtMjAgIE1hdHQgS3JhYWkgIDxrcmFhaUBhbHVtbmkuY2FybmVnaWVtZWxsb24uZWR1PgoKCSogamNmX3BhcnNlLmMgKGpjZl9wYXJzZSk6IEVsaW1pbmF0ZSB1bnVzZWQgdmFyaWFibGUuCgoyMDAxLTAzLTE5ICBNYXJrIE1pdGNoZWxsICA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCSogY2xhc3MuYyAoYnVpbGRfY2xhc3NfcmVmKTogVXNlIFNFVF9ERUNMX0FTU0VNQkxFUl9OQU1FLgoJKGxheW91dF9jbGFzcyk6IExpa2V3aXNlLgoJKGxheW91dF9jbGFzc19tZXRob2QpOiBMaWtld2lzZS4KCShlbWl0X3JlZ2lzdGVyX2NsYXNzZXMpOiBMaWtld2lzZS4KCSogZGVjbC5jIChidWlsdGluX2Z1bmN0aW9uKTogTGlrZXdpc2UuCgkoZ2l2ZV9uYW1lX3RvX2xvY2Fscyk6IExpa2V3aXNlLgoKMjAwMS0wMy0xOSAgUGVyIEJvdGhuZXIgIDxwZXJAYm90aG5lci5jb20+CgoJKiBqY2YtcGFyc2UuYyAobG9hZF9pbm5lcl9jbGFzc2VzKTogIENoZWNrIENMQVNTX0xPQURFRF9QCgliZWZvcmUgdHJ5aW5nIHRvIGxvYWQgYW4gaW5uZXIgY2xhc3MuCgoJRml4ZXMgdG8gcHJvY2VzcyB0byBjb21tYW5kLWxpbmUgLmNsYXNzIGZpbGVzIGluIHR3byBwYXNzZXMuCgkqIGphdmEtdHJlZS5oIChKQVZBX0ZJTEVfUCwgQ0xBU1NfRklMRV9QLCBaSVBfRklMRV9QKTogIE5ldyBmbGFncy4KCShDTEFTU19GUk9NX0NVUlJFTlRMWV9DT01QSUxFRF9TT1VSQ0VfUCk6ICBSZW5hbWUgdG8gLi4KCShDTEFTU19GUk9NX0NVUlJFTlRMWV9DT01QSUxFRF9QKTogIC4uLiBiZWNhdXNlIGl0IGlzIG1vcmUgZ2VuZXJhbCBub3cuCgkqIGNsYXNzLmMgKGlzX2NvbXBpbGVkX2NsYXNzKTogIEZpeCBmb3IgcmVuYW1lZCBmbGFnLgoJKiBwYXJzZS55IChtYXliZV9jcmVhdGVfY2xhc3NfaW50ZXJmYWNlX2RlY2wpOiAgTGlrZXdpc2UuCgkqIGpjZi1wYXJzZS5jICh5eXBhcnNlKTogIEFsc28gc2V0IGlmIGNvbXBpbGluZyAuY2xhc3MgZmlsZXMuCgkqIGpjZi1wYXJzZS5jIChyZWFkX2NsYXNzKTsgIFJlYWQgY3VycmVudF9jbGFzcy4KCShqY2ZfcGFyc2UpOiAgTWFrZSBzdGF0aWMuCgkobG9hZF9pbm5lcl9jbGFzc2VzKTogIE5ldyBmdW5jdGlvbiwgd2l0aCBjb2RlIG1vdmVkIGZyb20gamNmX3BhcnNlLAoJYmVjYXVzZSB3ZSBuZWVkIHRvIGlubmVyIGNsYXNzZXMgYWZ0ZXIgdGhlIGNvbW1hbmQtbGluZSBmaWxlcyBhcmUgcmVhZC4KCSh5eXBhcnNlKTogIFNldCBmaW5wdXQgdG8gTlVMTCB3aGVuIGl0IGRvZXNuJ3QgbmVlZCB0byBiZSBjbG9zZWQuCglSZWR1Y2UgdXNlIG9mIG1haW5famNmIChiYXNpY2FsbHkgb25seSBmb3IgYXJjaGl2ZSkgYW5kCgl1c2UgZmlucHV0IGluc3RlYWQgb2YgbWFpbl9qY2YtPnJlYWRfc3RhdGUuCglJbmxpbmUgamNmX2ZpZ3VyZV9maWxlX3R5cGUgaW50byB5eXBhcnNlLgoJU2V0IEpBVkFfRklMRV9QLCBDTEFTU19GSUxFX1AsIG9yIFpJUF9GSUxFX1Agb24gZmlsZW5hbWUgbGlzdCBuYW1lLgoJRGVmZXIgbG9hZF9pbm5lcl9jbGFzc2VzIGFuZCBwYXJzZV9jbGFzc19maWxlIHRvIGEgc2Vjb25kIHBhc3MsCglhZnRlciB3ZSd2ZSBjb3JyZWN0bHkgbWFwcGVkIGNvbW1hbmQtbGluZSAuY2xhcyBmaWVscyB0byBjbGFzc2VzLgoJKGpjZl9maWd1cmVfZmlsZV90eXBlKTogIFJlbW92ZWQuCgkqIGpjZi5oIChKQ0ZfWklQLCBKQ0ZfQ0xBU1MsIEpDRl9TT1VSQ0UpOiAgUmVtb3ZlZCBmbGFncy4KCShKQ0ZfWkVSTyk6ICBBbHNvIGNsZWFyIHppcGQgZmllbGQuCgkqIHppcGZpbGUuaDogIENvbmRpdGlvbmFsaXplIG9uIEpDRl9IIGluc3JlYWQgb2YgSkNGX1pJUC4KCjIwMDEtMDMtMTggIE1hdHQgS3JhYWkgIDxrcmFhaUBhbHVtbmkuY2FybmVnaWVtZWxsb24uZWR1PgoKCSogamNmLXBhcnNlLmMgKHl5cGFyc2UpOiBDaGFuZ2UgY2ggZnJvbSBjaGFyICogdG8gY2hhci4KCjIwMDEtMDMtMTkgIFBlciBCb3RobmVyICA8cGVyQGJvdGhuZXIuY29tPgoKCSoganZzcGVjLmMgKGxhbmdfc3BlY2lmaWNfZHJpdmVyKTogIENoZWNrIGZvciAuemlwIGFuZCAuamFyIGZpbGVzLgoJQWRkIGNvbnN0cnVjdGVkIGZpbGVsaXN0LWZpbGUgYXQgZW5kLCBmb2xsb3dpbmcgLXhqYXZhLiAgVGh1cyBhbnkgLm8KCWFuZCBsaWJyYXJ5IGZpbGVzIGFyZSBub3QgYWZmZWN0ZWQgYnkgdGhlIC14amF2YS4gIEFsc28gd3JhcAoJZXhwbGljaXQgQEZJTEUgd2l0aCAteGphdmEgYW5kIC14bm9uZS4KCjIwMDEtMDMtMTkgIEFuZHJldyBIYWxleSAgPGFwaEBjYW1icmlkZ2UucmVkaGF0LmNvbT4KCiAgICAgICAgKiBjbGFzcy5jIChidWlsZF9zdGF0aWNfZmllbGRfcmVmKTogQ2FsbCBtYWtlX2RlY2xfcnRsKCkgYWZ0ZXIKICAgICAgICBzZXR0aW5nIHRoZSBERUNMX0VYVEVSTkFMIGZsYWcuCgoyMDAxLTAzLTE3ICBQZXIgQm90aG5lciAgPHBlckBib3RobmVyLmNvbT4KCgkqIGRlY2wuYyAoY2xlYXJfYmluZGluZ19sZXZlbCk6ICBGaXggaW5pdGlhbGl6ZXIgKGJyb2tlIDAzLTE1KS4KCgkqIGpjZi13cml0ZS5jIChnZW5lcmF0ZV9ieXRlY29kZV9pbnNucyk6ICBIYW5kbGUgZW1pdHRpbmcgaWluYwoJd2hlbiByZXN1bHQgaXMgaXMgbmVlZGVkICh0YXJnZXQgaXMgU1RBQ0tfVEFSR0VUKS4KCgkqIHBhcnNlLmggKEpERVBfU09MVik6ICBSZW1vdmVkLgoJKiBwYXJzZS55IChyZWdpc3Rlcl9pbmNvbXBsZXRlX3R5cGUpOiAgVXNlIEpERVBfVE9fUkVTT0xWRSBpbnN0ZWFkLgoKCSogcGFyc2UueSAoaW5jb21wbGV0ZV9jbGFzc19saXN0KTogUmVtb3ZlZC4KCShvYnRhaW5faW5jb21wbGV0ZV90eXBlKTogRG9uJ3QgdXNlIG9yIHNldCBpbmNvbXBsZXRlX2NsYXNzX2xpc3QuCglJdCBkb2Vzbid0IHdvcmsgaWYgcmVzb2x2ZV9jbGFzcyBjaGFuZ2VzIHRoZSBuYW1lIG9mIGFuIGFycmF5IHR5cGUKCXRoYXQgaXMgb24gdGhlIGxpc3QgYW5kIHRoZW4gc29tZW9uZSBlbHNlIGxvb2tzIGZvciB0aGUgbW9kaWZpZWQgbmFtZS4KCUFsc28sIHNlZW1zIGxpYWJsZSB0byBicmVhayB3aGVuIGNvbXBpbGluZyBtdWx0aXBsZSBzb3VyY2UgZmlsZXMgYXQKCW9uY2UuICBTbyB0aGUgc2ltcGxlc3QgaXMgdG8ganVzdCByZW1vdmUgaW5jb21wbGV0ZV9jbGFzc19saXN0IC0KCWl0IGlzIG9ubHkgYSBtaW5vciBzcGFjZSB3aW4gYW5kIGl0IGlzIG5vdCBldmVuIGNsZWFyIGl0IHNhdmVzIHRpbWUuCgoJKiBwYXJzZS55IChyZXNvbHZlX2NsYXNzKTogIFJlbW92ZSB1bm5lZWRlZCBwcm9tb3RlX3R5cGUuCgoyMDAxLTAzLTE1ICBQZXIgQm90aG5lciAgPHBlckBib3RobmVyLmNvbT4KCgkqIGphdmEtdHJlZS5oIChCTE9DS19JU19JTVBMSUNJVCk6ICBOZXcgZmxhZy4KCSogcGFyc2UuaCAoQkxPQ0tfRVhQUl9PUklHSU4pOiAgUmVtb3ZlZCBtYWNyby4KCSogcGFyc2UueSAoZGVjbGFyZV9sb2NhbF92YXJpYWJsZXMsIG1heWJlX2Fic29yYl9zY29waW5nX2Jsb2Nrcyk6CglVc2UgQkxPQ0tfSVNfSU1QTElDSVQgcmF0aGVyIHRoYW4gQkxPQ0tfRVhQUl9PUklHSU4uCgoJKiBqY2YtcGFyc2UuYyAoeXlwYXJzZSk6ICBTZXQvcmVzZXQgaW5wdXRfZmlsZW5hbWUgZm9yIHNvdXJjZSBmaWxlLgoJKiBwYXJzZS55IChqYXZhX2V4cGFuZF9jbGFzc2VzKTogIExpa2V3aXNlLgoKCSogcGFyc2UueSAoZXhwYW5kX3N0YXJ0X2phdmFfbWV0aG9kKTogIFdhcyBvbmx5IGNhbGxlZCBvbmNlIGFuZCBoYWQgYQoJbWlzbGVhZGluZyBuYW1lLCBzbyBpbmxpbmUgaW4gY2FsbGVyIGphdmFfY29tcGxldGVfZXhwYW5kX21ldGhvZC4KCShlbnRlcl9hX2Jsb2NrKTogIExpa2V3aXNlIGlubGluZSBpbiBlbnRlcl9ibG9jayBhbmQgcmVtb3ZlLgoKCVJlbW92ZSBqdW5rIGZyb20gd2hlbiBnY2MvamF2YSB3YXMgY3JlYXRlZCAoYnkgY29weWluZyBmcm9tIEMvQysrKS4KCSogZGVjbC5jIChrZWVwX25leHRfbGV2ZWxfZmxhZywga2VlcF9uZXh0X2lmX3N1YmJsb2Nrcyk6ICBSZW1vdmUuCgkoc3RydWN0IGJpbmRpbmdfbGV2ZWwpOiAgUmVtb3ZlIGZpZWxkcyBrZWVwLCBrZWVwX2lmX3N1YmJsb2NrcywKCW1vcmVfY2xlYW51cHNfb2ssIGhhdmVfY2xlYW51cHMgKHdoaWNoIGhhdmUgbmV2ZXIgYmVlbiB1c2VkKS4KCShwdXNobGV2ZWwsIHBvcGxldmVsKTogIFJlbW92ZSByZWxhdGVkIHVzZWxlc3MgY29kZS4KCgkqIGNsYXNzLmMgKG1ha2VfY2xhc3NfZGF0YSk6ICBUaGUgY2xhc3NfZHRhYmxlX2RlY2wgKGkuZS4gdGhlCgl2dGFibGUgZm9yIENsYXNzKSBzaG91bGQgYmUgZXh0ZXJuYWwsIGV4Y2VwdCB3aGVuIGNvbXBpbGluZyBDbGFzcy4KCgkqIGp2c3BlYy5jIChsYW5nX3NwZWNpZmljX2RyaXZlcik6ICBGaXggLUMgaGFuZGxpbmcuCglDaGVjayAtc2F2ZS10ZW1wcyB0byBzZWUgaWYgdGVtcCBARklMRSBzaG91bGQgYmUgZGVsZXRlZC4KCUZvbGxvdy11cCB0by9maXggZm9yIEZlYnJ1YXJ5IDE2IHBhdGNoLgoKCSogdmVyaWZ5LmMgKHZlcmlmeV9qdm1faW5zdHJ1Y3Rpb25zKTogIEJldHRlciBlcnJvciBtc2dzIGZvciBkdXAuCgkodHlwZV9zdGFja19kdXApOiAgUmVtb3ZlIG5vLWxvbmdlciBuZWRlZCBlcnJvciBjaGVjay4KCjIwMDEtMDMtMTUgIEJyeWNlIE1jS2lubGF5ICA8YnJ5Y2VAYWxiYXRyb3NzLmNvLm56PgoKCSogbWFuZ2xlLmMgKG1hbmdsZV9yZWNvcmRfdHlwZSk6IFJlbmFtZSAnZnJvbV9wb2ludGVyJyBhcmd1bWVudAoJdG8gJ2Zvcl9wb2ludGVyJy4gSWYgdGhpcyB0eXBlIGlzIGZvciBhIHBvaW50ZXIgKGFyZ3VtZW50KSBtYW5nbGluZywKCWRvbid0IHN1cnJvdW5kIHRoZSBlbGVtZW50IHdpdGggJ04uLkUnIGlmIHRoZSB0eXBlIG5hbWUgaXMKCXVucXVhbGlmaWVkLgoKMjAwMS0wMy0xNCAgTWFyayBNaXRjaGVsbCAgPG1hcmtAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIGNsYXNzLmMgKGJ1aWxkX3N0YXRpY19maWVsZF9yZWYpOiBVc2UgQ09QWV9ERUNMX1JUTCwKCURFQ0xfUlRMX1NFVF9QLCBldGMuCgkobWFrZV9tZXRob2RfdmFsdWUpOiBMaWtld2lzZS4KCShnZXRfZGlzcGF0Y2hfdGFibGUpOiBMaWtld2lzZS4KCgkqIGRlY2wuYyAocHVzaF9qdm1fc2xvdCk6IFVzZSBDT1BZX0RFQ0xfUlRMLCBERUNMX1JUTF9TRVRfUCwgZXRjLgoKMjAwMS0wMy0wNyAgVG9tIFRyb21leSAgPHRyb21leUByZWRoYXQuY29tPgoKCSogY29uZmlnLWxhbmcuaW4gKGxhbmdfcmVxdWlyZXMpOiBEZWZpbmUuCgoyMDAxLTAzLTA3ICBCcmFkIEx1Y2llciAgPGx1Y2llckBtYXRoLnB1cmR1ZS5lZHU+CgoJKiB0eXBlY2suYyAoY29udmVydCk6IENoZWNrIGZsYWdfdW5zYWZlX21hdGhfb3B0aW1pemF0aW9ucywKCW5vdCBmbGFnX2Zhc3RfbWF0aC4KCjIwMDEtMDMtMDUgIFBlciBCb3RobmVyICA8cGVyQGJvdGhuZXIuY29tPgoKCUZpeCBhIHByb2JsZW0gd2hlcmUgcmVzdF9vZl9kZWNsX2NvbXBpbGF0aW9uIGFwcGxpZWQgdG8KCWNsYXNzX2R0YWJsZV9kZWNsIGNhdXNlcyBwcm9ibGVtcyBiZWNhdXNlIGl0IHdhcyBkb25lIHRvbyBlYXJseSwKCWJlZm9yZSBvdXRwdXQgZmlsZSB3YXMgb3BlbmVkLgoJKiBkZWNsLmMgKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogIFJlbW92ZSBpbml0IG9mIGNsYXNzX2R0YWJsZV9kZWNsLgoJKiBjbGFzcy5jIChjbGFzc19kdGFibGVfZGVjbCk6ICBBZGQgbWFjcm8gLSBlbGVtZW50IG9mIGNsYXNzX3Jvb3RzLgoJKG1ha2VfY2xhc3NfZGF0YSk6ICBEZWZpbmUgY2xhc3NfZHRhYmxlX2RlY2wuCgkqIGphdmEtdHJlZS5oIChKVElfQ0xBU1NfRFRBQkxFX0RFQ0wsIGNsYXNzX2R0YWJsZV9kZWNsKTogIFJlbW92ZWQuCgoyMDAxLTAzLTAxICBaYWNrIFdlaW5iZXJnICA8emFja3dAc3RhbmZvcmQuZWR1PgoKCSogamF2YS9jbGFzcy5jLCBqYXZhL2RlY2wuYywgamF2YS9qYXZhLXRyZWUuaDogUmVwbGFjZSBhbGwKCXVzZXMgb2YgJ2Jvb2xlYW4nIHdpdGggJ2Jvb2wnLgoKMjAwMS0wMy0wMSAgWmFjayBXZWluYmVyZyAgPHphY2t3QHN0YW5mb3JkLmVkdT4KCgkqIGxhbmctc3BlY3MuaDogQWRkIHplcm8gaW5pdGlhbGl6ZXIgZm9yIGNwcF9zcGVjIGZpZWxkIHRvIGFsbAoJYXJyYXkgZWxlbWVudHMuCgoyMDAxLTAyLTE2ICBQZXIgQm90aG5lciAgPHBlckBib3RobmVyLmNvbT4KCglIYW5kbGUgY29tcGlsaW5nIG11bHRpcGxlIGlucHV0IGZpbGVzIGF0IG9uY2UsIGFuZCBARklMRSBzeW50YXguCgkqIGdjai50ZXhpOiAgVXBkYXRlZCBkb2N1bWVudGF0aW9uIHRvIG1hdGNoLgoJKiBqYXZhLXRyZWUuaCAoZmxhZ19maWxlbGlzdF9maWxlLCBpbml0X3NyY19wYXJzZSk6ICBOZXcgZGVjbGFyYXRpb25zLgoJKiBqY2YtcGFyc2UuYyAocGFyc2Vfc291cmNlX2ZpbGUpOiAgU3BsaXQgaW50byAuLi4KCShwYXJzZV9zb3VyY2VfZmlsZV8xKTogIE5ldyBmdW5jdGlvbiAtIGFuZDoKCShwYXJzZV9zb3VyY2VfZmlsZV8yKTogIE5ldyBmdW5jdGlvbi4KCSh5eXBhcnNlKTogIE9uIC1mZmlsZWxpc3QtZmlsZSwgb3BlbiBhbmQgc2NhbiBuYW1lZCBmaWxlLgoJT24gZmlyc3QgcGFzcyBvdmVyIGZpbGVzLCBvbmx5IGRvIHBhcnNlX3NvdXJjZV9maWxlXzEuCglBIG5ldyBzZWNvbmQgcGFzcyBjYWxscyBwYXJzZV9zb3VyY2VfZmlsZV8yIGZvciBlYWNoIGZpbGUgdG8gY29tcGlsZS4KCShpbml0X2pjZl9wYXJzZSk6ICBDYWxsIGluaXRfc3JjX3BhcnNlLgoJKiBqdnNwZWMuYyAoSU5ESVJFQ1RfRklMRV9BUkcpOiAgTmV3IGZsYWcuCgkobGFuZ19zcGVjaWZpY19kcml2ZXIpOiAgU3VwcG9ydCBARklMRUxJU1QtRklMRSBzeW50YXgsIGFzIHdlbGwKCWFzIG11bHRpcGxlIGlucHV0IGZpbGUgY29tYmluZWQgaW4gb25lIGNvbXBpbGF0aW9uLgoJKiBsYW5nLW9wdGlvbnMuaDogIEFkZCAtZmZpbGVsaXN0LWZpbGUKCSogbGFuZy5jIChmbGFnX2ZpbGVsaXN0X2ZpbGUpOiAgTmV3IGZsYWcgdmFyaWFibGUuCgkobGFuZ19mX29wdGlvbnMpOiAgSGFuZGxlIC1mZmlsZWxpc3QtZmlsZS4KCSogbGV4LmMgKGphdmFfaW5pdF9sZXgpOiBEb24ndCBjbGVhciBjdHhwLT5pbmNvbXBsZXRlX2NsYXNzLgoJKiBwYXJzZS5oIChzdHJ1Y3QgcGFyc2VfY3R4dCk6ICBSZW1vdmUgZmllbGRzIGluY29tcGxldGVfY2xhc3MgYW5kCglnY2xhc3NfbGlzdCAtIHVzZSBnbG9iYWwgZmllbGRzIG9mIHNyY19wYXJzZV9yb290cyBpbnN0ZWFkLgoJKiBwYXJzZS55IChzcmNfcGFyc2Vfcm9vdHMpOiAgTmV3IGFycmF5LgoJKGluY29tcGxldGVfY2xhc3NfbGlzdCwgZ2NsYXNzX2xpc3QpOiAgTmV3IG1hY3Jvcy4KCShwdXNoX3BhcnNlcl9jb250ZXh0LCBqYXZhX3BvcF9wYXJzZXJfY29udGV4dCwKCWphdmFfcGFyc2VyX2NvbnRleHRfcmVzdW1lKTogIERvbid0IGZpZGRsZSB3aXRoIGRlbGV0ZWQgZmllbGRzLgoJKHZhcmlvdXMpOiAgVXNlIGluY29tcGxldGVfY2xhc3MgZ2NsYXNzX2xpc3QgYW5kIGdsb2JhbCBtYWNyb3MKCWluc3RlYWQgb2YgcGFyc2VfY3R4dCBmaWVsZHMgLSB0aGUgbGlzdHMgYXJlIGdsb2JhbC4KCShpbml0X3NyY19wYXJzZSk6ICBOZXcgZnVuY3Rpb24uCgpGcmkgRmViIDIzIDE1OjI4OjM5IDIwMDEgIFJpY2hhcmQgS2VubmVyICA8a2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHU+CgoJKiBkZWNsLmMgKHNldF9ibG9jayk6IFNldCBOQU1FUyBhbmQgQkxPQ0tTIGZyb20gQkxPQ0suCgoyMDAxLTAyLTIwICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AcmVkaGF0LmNvbT4KCgkqIHBhcnNlLnkgKGNoZWNrX2lubmVyX2NsYXNzX2FjY2Vzcyk6IE1vdmVkIGRlY2xhcmF0aW9uIG9mIGxvY2FsCglgZW5jbG9zaW5nX2RlY2xfdHlwZScgdG8gdGhlIHJpZ2h0IGxvY2F0aW9uLgoKMjAwMS0wMi0xOSAgQnJ5Y2UgTWNLaW5sYXkgIDxicnljZUBhbGJhdHJvc3MuY28ubno+CgoJKiBwYXJzZS55IChwYXJzZXJfY2hlY2tfc3VwZXJfaW50ZXJmYWNlKTogRG9uJ3QgY2FsbAoJY2hlY2tfcGtnX2NsYXNzX2FjY2VzcyBmb3IgYW4gaW5uZXIgaW50ZXJmYWNlLgoJKHBhcnNlcl9jaGVja19zdXBlcik6IERvbid0IGNhbGwgY2hlY2tfcGtnX2NsYXNzX2FjY2VzcyBmb3IgaW5uZXIKCWNsYXNzLgoJKGRvX3Jlc29sdmVfY2xhc3MpOiBTaW1wbGlmeSBlbmNsb3NpbmcgdHlwZSBsb29wLiBEb24ndCBjYWxsCgljaGVja19wa2dfY2xhc3NfYWNjZXNzIGlmIENMIGFuZCBERUNMIGFyZSBub3Qgc2V0LgoJKGZpbmRfaW5faW1wb3J0c19vbl9kZW1hbmQpOiBTZXQgREVDTCBpZiBjbGFzc190eXBlIG5lZWRlZCB0byBiZQoJbG9hZGVkLiBEb24ndCBjYWxsIGNoZWNrX3BrZ19jbGFzc19hY2Nlc3MgZm9yIGFuIGlubmVyIGNsYXNzLgoJKGNoZWNrX2lubmVyX2NsYXNzX2FjY2Vzcyk6IFJld3JpdHRlbiB0byBpbXBsZW1lbnQgbWVtYmVyIGFjY2VzcwoJcnVsZXMgYXMgcGVyIHNwZWMgNi42LjEuCgkoY2hlY2tfcGtnX2NsYXNzX2FjY2Vzcyk6IEhhbmRsZSB0aGUgZW1wdHkgcGFja2FnZSBjb3JyZWN0bHkuCgkoaW5fc2FtZV9wYWNrYWdlKTogTmV3IGZ1bmN0aW9uLiBEZXRlcm1pbmUgaWYgdHdvIGNsYXNzZXMgYXJlIGluIHRoZQoJc2FtZSBwYWNrYWdlLgoKMjAwMS0wMi0xOCAgQnJ5Y2UgTWNLaW5sYXkgIDxicnljZUBhbGJhdHJvc3MuY28ubno+CgoJKiB0eXBlY2suYyAoYnVpbGRfamF2YV9hcnJheV90eXBlKTogRG9uJ3QgdHJ5IHRvIHBva2UgYSBwdWJsaWMgYGNsb25lJwoJbWV0aG9kIGludG8gYXJyYXkgdHlwZXMuCgkqIHBhcnNlLnkgKHBhdGNoX21ldGhvZF9pbnZvY2F0aW9uKTogQnlwYXNzIGFjY2VzcyBjaGVjayBvbiBjbG9uZSBjYWxsCgl0byBhcnJheSBpbnN0YW5jZS4KCjIwMDEtMDItMTUgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0ByZWRoYXQuY29tPgoKCSogZXhwci5jIChidWlsZF9pbnN0YW5jZW9mKTogQ2hlY2sgZm9yIGFycmF5cyB3aGVuIHRyeWluZyBmb2xkIHRvCglmYWxzZS4KCjIwMDEtMDItMTUgIEppbSBNZXllcmluZyAgPG1leWVyaW5nQGx1Y2VudC5jb20+CgoJKiBNYWtlLWxhbmcuaW4gKGphdmEuaW5zdGFsbC1jb21tb24pOiBEZXBlbmQgb24gYGluc3RhbGxkaXJzJy4KCShqYXZhLmluc3RhbGwtaW5mbyk6IExpa2V3aXNlLgoKMjAwMS0wMi0xNSAgQnJ5Y2UgTWNLaW5sYXkgIDxicnljZUBhbGJhdHJvc3MuY28ubno+CgoJKiBNYWtlLWxhbmcuaW4gKGp2c3BlYy5vKTogTW9kaWZ5IHJ1bGUgdG8gbWF0Y2ggdGhhdCBvZiBjcC9nKytzcGVjLm8uCgoyMDAxLTAyLTE0ICBUb20gVHJvbWV5ICA8dHJvbWV5QHJlZGhhdC5jb20+CiAgICAgICAgICAgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCUZpeCBmb3IgUFIgamF2YS8xMjYxLgoJKiB0eXBlY2suYyAoYnVpbGRfamF2YV9hcnJheV90eXBlKTogQWRkIHB1YmxpYyBgY2xvbmUnIG1ldGhvZCB0bwoJYXJyYXlzLgoJKiBwYXJzZS55IChyZXNvbHZlX3F1YWxpZmllZF9leHByZXNzaW9uX25hbWUpOiBVc2UgY3VycmVudF9jbGFzcwoJd2hlbiBjaGVja2luZyBmb3IgaW5hY2Nlc3NpYmlsaXR5LgoJKHBhdGNoX21ldGhvZF9pbnZvY2F0aW9uKTogRml4ZWQgZXJyb3IgbWVzc2FnZSB3aGVuIGFjY2Vzc2liaWxpdHkKCWRlbmllZC4gIEFkZGVkIGBmcm9tX3N1cGVyJyBhcmd1bWVudC4KCjIwMDEtMDItMTQgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0ByZWRoYXQuY29tPgoKCSogcGFyc2UueSAocmVzb2x2ZV9jbGFzcyk6IERvbid0IGJ1aWxkIGEgZmFrZSBkZWNsLiBVc2UgdGhlIG9uZQoJYWxyZWFkeSBidWlsdC4KCSogdHlwZWNrLmMgKGJ1aWxkX2phdmFfYXJyYXlfdHlwZSk6IEJ1aWxkIGFuZCBhc3NpZ24gZGVjbCB0byBhcnJheQoJdHlwZS4KCjIwMDEtMDItMTQgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0ByZWRoYXQuY29tPgoKCSogcGFyc2UueSAobm90X2FjY2Vzc2libGVfcCk6IENoYW5nZWQgbGVhZGluZyBjb21tZW50LiBBZGRlZCBleHRyYQoJYHdoZXJlJyBhcmd1bWVudC4gVXNlIGl0IHRvIGVuZm9yY2UgcHJvdGVjdGVkIGFjY2VzcyBydWxlcy4KCShyZXNvbHZlX3F1YWxpZmllZF9leHByZXNzaW9uX25hbWUpOiBBZGRlZCBleHRyYSBhcmd1bWVudCB0bwoJbm90X2FjY2Vzc2libGVfcC4KCShwYXRjaF9tZXRob2RfaW52b2NhdGlvbik6IFVzZSBhcmd1bWVudCBgcHJpbWFyeScgdG8gcHJvdmlkZQoJbm90X2FjY2Vzc2libGVfcCB3aXRoIGFuIGV4dHJhIGFyZ3VtZW50LgoJKGxvb2t1cF9tZXRob2RfaW52b2tlKTogQWRkZWQgZXh0cmEgYXJndW1lbnQgdG8gbm90X2FjY2Vzc2libGVfcC4KCShzZWFyY2hfYXBwbGljYWJsZV9tZXRob2RfbGlzdCk6IExpa2V3aXNlLgoKMjAwMS0wMi0xMyAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQHJlZGhhdC5jb20+CgoJKiBwYXJzZS55IChyZXNvbHZlX3F1YWxpZmllZF9leHByZXNzaW9uX25hbWUpOiBUcnkgdG8gcmVzb2x2ZSBhcwoJYW4gaW5uZXIgY2xhc3MgYWNjZXNzIG9ubHkgaWYgYGRlY2wnIGlzIGEgVFlQRV9ERUNMLgoKMjAwMS0wMi0xMyAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBkZWNsLmMgKGNsYXNzZG9sbGFyX2lkZW50aWZpZXJfbm9kZSk6IEluaXRpYWxpemUuCgkqIGphdmEtdHJlZS5oIChlbnVtIGphdmFfdHJlZV9pbmRleCk6IE5ldyBlbnRyeQoJYEpUSV9DTEFTU0RPTExBUl9JREVOVElGSUVSX05PREUuJwoJKGNsYXNzZG9sbGFyX2lkZW50aWZpZXJfbm9kZSk6IE5ldyBtYWNyby4KCShJRF9DTEFTU0RPTExBUl9QKTogTGlrZXdpc2UuCgkqIHBhcnNlLnkgKGJ1aWxkX2RvdF9jbGFzc19tZXRob2QpOiBVc2UgYGNsYXNzZG9sbGFyX2lkZW50aWZpZXJfbm9kZS4nCgkoYnVpbGRfZG90X2NsYXNzX21ldGhvZF9pbnZvY2F0aW9uKTogTGlrZXdpc2UuCgkoZmluZF9hcHBsaWNhYmxlX2FjY2Vzc2libGVfbWV0aG9kc19saXN0KTogYGNsYXNzJCcgY2FuJ3QgYmUKCWluaGVyaXRlZC4KCjIwMDEtMDItMDkgIFJhamEgUiBIYXJpbmF0aCAgPGhhcmluYXRoQGNzLnVtbi5lZHU+CgoJKiBNYWtlLWxhbmcuaW4gKGphdmEvbWFuZ2xlX25hbWUubyk6IEFkZCAnbWFrZScgcHJlcmVxcy4KCjIwMDEtMDItMDkgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0ByZWRoYXQuY29tPgoKCSogTWFua2UtbGFuZy5pbiAoSlZHRU5NQUlOX09CSlMpOiBBZGRlZCBgZXJyb3JzLm8nCgkqIGp2Z2VubWFpbi5jIChlcnJvcik6IFJldmVyc2VkIDIwMDEtMDItMDkgcGF0Y2guIGBlcnJvcicgaXMgbm93Cglnb25lLgoKMjAwMS0wMi0wOSAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQHJlZGhhdC5jb20+CgoJKiBtYW5nbGVfbmFtZSAoYXBwZW5kX3VuaWNvZGVfbWFuZ2xlZF9uYW1lKTogRW1pdCBgXycgb3IgYFUnCglvdXRzaWRlIG9mIHRoZSBgX19VJyBzZXF1ZW5jZSB0b28uCgkodW5pY29kZV9tYW5nbGluZ19sZW5ndGgpOiBDb3VudCBgXycgb3IgYFUnIG91dHNpZGUgb2YgdGhlIGBfX1UnCglzZXF1ZW5jZSB0b28uCgoyMDAxLTAyLTA5ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AcmVkaGF0LmNvbT4KCgkqIGp2Z2VubWFpbi5jIChlcnJvcik6IFJldmVyc2VkIDIwMDEtMDItMDEgZGVsZXRpb24uCgoyMDAxLTAyLTA4ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIE1ha2UtbGFuZy5pbiAoSkFWQV9PQkpTKTogQWRkZWQgamF2YS9tYW5nbGVfbmFtZS5vCgkoSlZHRU5NQUlOX09CSlMpOiBMaWtld2lzZS4KCSogamF2YS10cmVlLmggKGFwcGVuZF9ncHBfbWFuZ2xlZF9uYW1lKTogTmV3IHByb3RvdHlwZS4KCSogamNmLXBhcnNlLmMgKGdnY19tYXJrX2pjZik6IEFyZ3VtZW50IG5vdyBgdm9pZCAqLicKCVJlbW92ZWQgY2FzdCBjYWxsaW5nIGBnY2NfYWRkX3Jvb3QuJwoJKiBqdmdlbm1haW4uYyAobWFuZ2xlX29ic3RhY2spOiBOZXcgZ2xvYmFsLCBpbml0aWFsaXplZC4KCShtYWluKTogVXNlIGl0LgoJKGRvX21hbmdsZV9jbGFzcyk6IENvbnN0aWZ5IGxvY2FsIGBwdHIuJwoJUmVtb3ZlZCBtYWNybyBgTUFOR0xFX05BTUUuJyBSZW1vdmVkIGNhc3QgaW4gYGZvci4nIENhbGwKCWFwcGVuZF9ncHBfbWFuZ2xlX25hbWUgYW5kIHVwZGF0ZSBgY291bnQnIGlmIG5lY2Vzc2FyeS4KCVVzZSBgbWFuZ2xlX29ic3RhY2suJwoJKiBtYW5nbGUuYyAoYXBwZW5kX3VuaWNvZGVfbWFuZ2xlZF9uYW1lKTogUmVtb3ZlZC4KCShhcHBlbmRfZ3BwX21hbmdsZWRfbmFtZSk6IExpa2V3aXNlLgoJKHVuaWNvZGVfbWFuZ2xpbmdfbGVuZ3RoKTogTGlrZXdpc2UuCgkobWFuZ2xlX21lbWJlcl9uYW1lKTogUmV0dXJuIHR5cGUgc2V0IHRvIGB2b2lkLicKCShtYW5nbGVfZmllbGRfZGVjbCk6IERvbid0IGFwcGVuZCBgVScgaW4gZXNjYXBlZCBuYW1lcy4KCShtYW5nbGVfbWV0aG9kX2RlY2wpOiBMaWtld2lzZS4KCShtYW5nbGVfbWVtYmVyX25hbWUpOiBKdXN0IHVzZSBgYXBwZW5kX2dwcF9tYW5nbGVkX25hbWUuJwoJKiBtYW5nbGVfbmFtZS5jOiBOZXcgZmlsZS4KCjIwMDEtMDItMDcgIFBlciBCb3RobmVyICA8cGVyQGJvdGhuZXIuY29tPgoKCSogY2hlY2staW5pdC5jIChjaGVja19pbml0KTogIEZpeCBUUllfRklOQUxMWV9FWFBSIGxvZ2ljLgoKCSogY2hlY2staW5pdC5jIChjaGVja19pbml0KTogIERvbid0IGNhbGwgZG9uZV9hbHRlcm5hdGl2ZSBhZnRlcgoJcHJvY2Vzc2luZyBsb29wIGNvZGUsIGFzIGEgTE9PUF9FWFBSIG5ldmVyIHRlcm1pbmF0ZXMgbm9ybWFsbHkuCgoyMDAxLTAyLTA4ICBKb3NlcGggUy4gTXllcnMgIDxqc20yOEBjYW0uYWMudWs+CgoJKiBnY2oudGV4aTogQ2hhbmdlIHNvdXJjZXMucmVkaGF0LmNvbSByZWZlcmVuY2UgdG8gZ2NjLmdudS5vcmcuCgoyMDAxLTAyLTA3ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIGpjZi1wYXJzZS5jIChIQU5ETEVfU1lOVEhFVElDX0FUVFJJQlVURSk6IERvbid0IGhhbmRsZSBmaWVsZAoJREVDTHMuCgoyMDAxLTAyLTA2ICBUb20gVHJvbWV5ICA8dHJvbWV5QHJlZGhhdC5jb20+CgoJKiBsZXguYyAoamF2YV9uZXdfbGV4ZXIpOiBMb25nZXIgZXJyb3IgbWVzc2FnZS4KCjIwMDEtMDItMDUgIEplZmYgU3R1cm0gIDxqZWZmLnN0dXJtQGNvbW1lcmNlb25lLmNvbT4KCSAgICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIHR5cGVjay5jIChidWlsZF9wcmltX2FycmF5X3R5cGUpOiBBZGRlZCBsZWFkaW5nIGNvbW1lbnQuCgkoYnVpbGRfamF2YV9hcnJheV90eXBlKTogTW92ZWQgbG9jYWxzIG91dCBvZgoJYmxvY2suIEFsd2F5cyBjcmVhdGUgdGhlIGBkYXRhJyBmaWVsZCwgZml4ZWQgYWxpZ25tZW50IHRvIG1hdGNoCglDKysuCgoyMDAxLTAyLTA0ICBUb20gVHJvbWV5ICA8dHJvbWV5QHJlZGhhdC5jb20+CgoJKiBleHByLmMgKGphdmFfbGFuZ19leHBhbmRfZXhwcik6IERvbid0IGJvdGhlciByZWNvbXB1dGluZwoJYGxlbmd0aCcuICBVc2UgcmVzdF9vZl9kZWNsX2NvbXBpbGF0aW9uLCBub3QgbWFrZV9kZWNsX3J0bC4KCUZpeGVzIFBSIGphdmEvMTg2Ni4KCjIwMDEtMDItMDUgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogcGFyc2UueSAocHJvY2Vzc19pbXBvcnRzKTogU2F2ZSB0aGUgb3JpZ2luYWwgbmFtZSBvZiB0aGUgaW1wb3J0Cglmb3IgYmV0dGVyIGVycm9yIHJlcG9ydC4KCjIwMDEtMDItMDQgIEJyeWNlIE1jS2lubGF5ICA8YnJ5Y2VAYWxiYXRyb3NzLmNvLm56PgoKCSogTWFrZS1sYW5nLmluIChqdnNwZWMubyk6IEFkZCBEUklWRVJfREVGSU5FUyB0byB0aGUgbGlzdAoJb2YgbWFjcm9zIHVzZWQgd2hlbiBjb21waWxpbmcganZzcGVjLmMuCgkqIGp2c3BlYy5jIChsYW5nX3NwZWNpZmljX2RyaXZlcik6IExpbmsgd2l0aCB0aGUgc2hhcmVkCglsaWJnY2MgYnkgZGVmYXVsdC4KClN1biBGZWIgIDQgMTU6NTI6NDQgMjAwMSAgUmljaGFyZCBLZW5uZXIgIDxrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdT4KCgkqIGNoZWNrLWluaXQuYyAoY2hlY2tfaW5pdCk6IENhbGwgaW50ZXJuYWxfZXJyb3IgaW5zdGVhZCBvZiBmYXRhbC4KCSogZXhwci5jIChqYXZhX2xhbmdfZXhwYW5kX2V4cHIpOiBMaWtld2lzZS4KCSogamNmLXBhcnNlLmMgKGdldF9jb25zdGFudCk6IExpa2V3aXNlLgoJKiBtYW5nbGUuYyAoamF2YV9tYW5nbGVfZGVjbCk6IExpa2V3aXNlLgoJKiBwYXJzZS55IChtYWtlX25lc3RlZF9jbGFzc19uYW1lLCBqYXZhX2NvbXBsZXRlX2xocyk6IExpa2V3aXNlLgoJKG9wZXJhdG9yX3N0cmluZyk6IExpa2V3aXNlLgoJKiBjaGVjay1pbml0LmMgKGNoZWNrX2luaXQpOiBDYWxsIGFib3J0IGluc3RlYWQgb2YgZmF0YWwuCgkqIGNsYXNzLmMgKGJ1aWxkX2NsYXNzX3JlZik6IExpa2V3aXNlLgoJKiBjb25zdGFudHMuYyAod3JpdGVfY29uc3RhbnRfcG9vbCk6IExpa2V3aXNlLgoJKiBkZWNsLmMgKHN0YXJ0X2phdmFfbWV0aG9kKTogTGlrZXdpc2UuCgkqIGV4cHIuYyAocHVzaF90eXBlLCBqYXZhX3N0YWNrX3BvcCwgamF2YV9zdGFja19zd2FwKTogTGlrZXdpc2UuCgkoamF2YV9zdGFja19kdXAsIGVuY29kZV9uZXdhcnJheV90eXBlKTogTGlrZXdpc2UuCgkoYnVpbGRfamF2YV9hcnJheV9sZW5ndGhfYWNjZXNzKTogTGlrZXdpc2UuCgkoYnVpbGRfamF2YV9jaGVja19pbmRleGVkX3R5cGUsIGV4cGFuZF9qYXZhX3B1c2hjKTogTGlrZXdpc2UuCgkoYnVpbGRfamF2YV9zb2Z0X2Rpdm1vZCwgYnVpbGRfaW52b2tlaW50ZXJmYWNlKTogTGlrZXdpc2UuCgkqIGphdmEtdHJlZS5oIChJTk5FUl9DTEFTU19QKTogTGlrZXdpc2UuCgkqIGpjZi1wYXJzZS5jIChwYXJzZV9zaWduYXR1cmUsIGdldF9uYW1lX2NvbnN0YW50KTogTGlrZXdpc2UuCgkoZ2l2ZV9uYW1lX3RvX2NsYXNzLCBnZXRfY2xhc3NfY29uc3RhbnQpOiBMaWtld2lzZS4KCSogamNmLXdyaXRlLmMgKENIRUNLX1BVVCwgQ0hFQ0tfT1AsIGdldF9hY2Nlc3NfZmxhZ3MpOiBMaWtld2lzZS4KCShmaW5kX2NvbnN0YW50X2luZGV4LCBnZW5lcmF0ZV9ieXRlY29kZV9jb25kaXRpb25hbCk6IExpa2V3aXNlLgoJKGdlbmVyYXRlX2J5dGVjb2RlX2luc25zLCBwZXJmb3JtX3JlbG9jYXRpb25zKTogTGlrZXdpc2UuCgkqIGxleC5jIChqYXZhX3VuZ2V0X3VuaWNvZGUsIGphdmFfbGV4KTogTGlrZXdpc2UuCgkqIG1hbmdsZS5jIChtYW5nbGVfdHlwZSwgbWFuZ2xlX3JlY29yZF90eXBlKTogTGlrZXdpc2UuCgkobWFuZ2xlX3BvaW50ZXJfdHlwZSwgbWFuZ2xlX2FycmF5X3R5cGUsIGluaXRfbWFuZ2xpbmcpOiBMaWtld2lzZS4KCShmaW5pc2hfbWFuZ2xpbmcpOiBMaWtld2lzZS4KCSogcGFyc2UuaCAoTUFSS19GSU5BTF9QQVJNUyk6IExpa2V3aXNlLgoJKiBwYXJzZS55IChwb3BfY3VycmVudF9vc2IsIHVucmVhY2hhYmxlX3N0bXRfZXJyb3IpOiBMaWtld2lzZS4KCShvYnRhaW5faW5jb21wbGV0ZV90eXBlLCBqYXZhX2NvbXBsZXRlX2NsYXNzKTogTGlrZXdpc2UuCgkoamF2YV9jaGVja19yZWd1bGFyX21ldGhvZHMsIGphdmFfY29tcGxldGVfZXhwYW5kX21ldGhvZCk6IExpa2V3aXNlLgoJKGN1dF9pZGVudGlmaWVyX2luX3F1YWxpZmllZCwgY2hlY2tfZGVwcmVjYXRpb24pOiBMaWtld2lzZS4KCShwYXRjaF9pbnZva2UsIGZpbmRfYXBwbGljYWJsZV9hY2Nlc3NpYmxlX21ldGhvZHNfbGlzdCk6IExpa2V3aXNlLgoJKGphdmFfY29tcGxldGVfbGhzLCBsb29rdXBfbmFtZV9pbl9ibG9ja3MpOiBMaWtld2lzZS4KCShjaGVja19maW5hbF92YXJpYWJsZV9pbmRpcmVjdF9hc3NpZ25tZW50LCBidWlsZF91bmFyeW9wKTogTGlrZXdpc2UuCgkqIHR5cGVjay5jIChzZXRfbG9jYWxfdHlwZSwgcGFyc2Vfc2lnbmF0dXJlX3R5cGUpOiBMaWtld2lzZS4KCShwYXJzZV9zaWduYXR1cmVfc3RyaW5nLCBidWlsZF9qYXZhX3NpZ25hdHVyZSk6IExpa2V3aXNlOwoJKHNldF9qYXZhX3NpZ25hdHVyZSk6IExpa2V3aXNlLgoJKiB2ZXJpZnkuYyAodHlwZV9zdGFja19kdXAsIENIRUNLX1BDX0lOX1JBTkdFKTogTGlrZXdpc2UuCgkqIGNsYXNzLmMgKGFkZF9tZXRob2QpOiBDYWxsIGZhdGFsX2Vycm9yIGluc3RlYWQgb2YgZmF0YWwuCgkoYnVpbGRfc3RhdGljX2ZpZWxkX3JlZik6IExpa2V3aXNlLgoJKiBleHByLmMgKGJ1aWxkX2tub3duX21ldGhvZF9yZWYsIGV4cGFuZF9pbnZva2UpOiBMaWtld2lzZS4KCSogamNmLXBhcnNlLmMgKGdldF9jb25zdGFudCwgamNmX3BhcnNlKTogTGlrZXdpc2UuCgkqIGxleC5jIChqYXZhX25ld19uZXdfbGV4ZXIpOiBMaWtld2lzZS4KCSoganYtc2Nhbi5jIChtYWluKTogTGlrZXdpc2UuCgkoZmF0YWxfZXJyb3IpOiBSZW5hbWVkIGZyb20gZmF0YWwuCgkqIGpjZi1wYXJzZS5jICh5eXBhcnNlKTogQ2FsbCBmYXRhbF9pb19lcnJvciBpbnN0ZWFkIG9mCglwZmF0YWxfd2l0aF9uYW1lLgoJKiBqY2YtcGFyc2UuYyAoamNmX3BhcnNlX3NvdXJjZSk6IENhbGwgZmF0YWxfaW9fZXJyb3IsIG5vdCBmYXRhbC4KCSh5eXBhcnNlKTogTGlrZXdpc2UuCgkqIGpjZi13cml0ZS5jIChtYWtlX2NsYXNzX2ZpbGVfbmFtZSwgd3JpdGVfY2xhc3NmaWxlKTogTGlrZXdpc2UuCgkqIGxleC5jIChqYXZhX2dldF9saW5lX2NvbCk6IExpa2V3aXNlLgoJKiBqY2YtcGFyc2UuYyAobG9hZF9jbGFzcyk6IE1ha2UgZXJyb3JzIG5vbi1mYXRhbC4KCSogbGV4LmMgKGJ5dGVzd2FwX2luaXQsIG5lZWRfYnl0ZXN3YXApOiBPbmx5ICNpZmRlZiBIQVZFX0lDT05WLgoKMjAwMS0wMi0wMSAgQnJ5Y2UgTWNLaW5sYXkgIDxicnljZUBhbGJhdHJvc3MuY28ubno+CgoJKiBqdmdlbm1haW4uYyAoY2xhc3NfbWFuZ2xpbmdfc3VmZml4KTogUmVtb3ZlIHVudXNlZCBzdHJpbmcuCgkoZXJyb3IpOiBSZW1vdmUgdW51c2VkIGZ1bmN0aW9uLgoJKG1haW4pOiBEb24ndCB1c2UgIl9fYXR0cmlidXRlX18gYWxpYXMiIG9uIGdlbmVyYXRlZCBjbGFzcyBzeW1ib2wuCgoyMDAxLTAxLTMwICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIGpjZi1wYXJzZS5jIChpbml0X2pjZl9wYXJzZSk6IEFkZGVkIGNhc3QgdG8gZ2djX2FkZF9yb290J3MgbGFzdAoJYXJndW1lbnQuCgkqIHBhcnNlLnkgKGZpbmlzaF9tZXRob2RfZGVjbGFyYXRpb24pOiBDb2RlIGFjY291bnRpbmcgZm9yIFdGTGVkCgltZXRob2QgREVDTF9OQU1FcyBkZWxldGVkLgoJKGNoZWNrX2Fic3RyYWN0X21ldGhvZF9kZWZpbml0aW9ucyk6IExpa2V3aXNlLgoJKHJlc29sdmVfdHlwZV9kdXJpbmdfcGF0Y2gpOiBMYXlvdXQgcmVzb2x2ZWQgdHlwZS4KCSogdHlwZWNrLmMgKGxvb2t1cF9kbyk6IFJlbW92ZWQgdW51c2VkIGxvY2FsLgoKMjAwMS0wMS0zMCAgQnJ5Y2UgTWNLaW5sYXkgIDxicnljZUBhbGJhdHJvc3MuY28ubno+CgoJKiBqYXZhLXRyZWUuaDogUmVtb3ZlIEpUSV9JTlRFR0VSX05FR0FUSVZFX09ORV9OT0RFLgoJKiBkZWNsLmMgKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogVXNlIGludGVnZXJfbWludXNfb25lX25vZGUsIG5vdAoJaW50ZWdlcl9uZWdhdGl2ZV9vbmVfbm9kZS4KCSogZXhwci5jIChidWlsZF9qYXZhX2Jpbm9wKTogTGlrZXdpc2UuCgoyMDAxLTAxLTI0ICBKZWZmIFN0dXJtICA8amVmZi5zdHVybUBjb21tZXJjZW9uZS5jb20+CgoJKiB6ZXh0cmFjdC5jIChyZWFkX3ppcF9hcmNoaXZlKTogUmVhZCBmaWxlX29mZnNldCBiZWZvcmUgd3JpdGluZwoJemlwZCBhbmQgY29uc2VxdWVudGx5IGNsb2JiZXJpbmcgdGhlIGhlYWRlciBjb250ZW50cy4KCjIwMDEtMDEtMjcgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIE1ha2UtbGFuZy5pbjogUmVtb3ZlIGFsbCBkZXBlbmRlbmNpZXMgb24gZGVmYXVsdHMuaC4KCSogZGVjbC5jOiBEb24ndCBpbmNsdWRlIGRlZmF1bHRzLmguCgkqIGV4cHIuYzogTGlrZXdpc2UuCgkqIHBhcnNlLnk6IExpa2V3aXNlLgoKMjAwMS0wMS0yNSAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBDaGFuZ2VMb2cgKDIwMDEtMDEtMjEpOiBGaXhlZCB0eXBvLgoJKiBjbGFzcy5jIChsYXlvdXRfY2xhc3NfbWV0aG9kKTogQ29kZSBhY2NvdW50aW5nIGZvciBXRkxlZAoJbWV0aG9kIERFQ0xfTkFNRXMgZGVsZXRlZC4KCSogY29uc3RhbnQuYyAoZmluZF9tZXRob2RyZWZfaW5kZXgpOiBMaWtld2lzZS4KCSogZGVjbC5jIChsYW5nX21hcmtfdHJlZSk6IE1hcmsgYHdmbCcgZmllbGQgaW4gc3RydWN0IGxhbmdfZGVjbC4KCSogamF2YS10cmVlLmggKERFQ0xfRlVOQ1RJT05fV0ZMKTogTmV3IG1hY3JvLgoJKHN0cnVjdCBsYW5nX2RlY2wpOiBOZXcgZmllbGQgYHdmbCcuCgkoamF2YV9nZXRfcmVhbF9tZXRob2RfbmFtZSk6IFByb3RvdHlwZSBkZWxldGVkLgoJKiBtYW5nbGUuYyAobWFuZ2xlX21ldGhvZF9kZWNsKTogQ29kZSBhY2NvdW50aW5nIGZvciBXRkxlZAoJbWV0aG9kIERFQ0xfTkFNRXMgZGVsZXRlZC4KCSogcGFyc2UuaCAoR0VUX01FVEhPRF9OQU1FKTogTWFjcm8gZGVsZXRlZC4KCSogcGFyc2UueSAocmVzZXRfbWV0aG9kX25hbWUpOiBEZWxldGVkLgoJKG1ldGhvZF9oZWFkZXIpOiBTZXQgREVDTF9GVU5DVElPTl9XRkwuCgkoY2hlY2tfYWJzdHJhY3RfbWV0aG9kX2hlYWRlcik6IENvZGUgYWNjb3VudGluZyBmb3IgV0ZMZWQgbWV0aG9kCglERUNMX05BTUVzIGRlbGV0ZWQuCgkoamF2YV9nZXRfcmVhbF9tZXRob2RfbmFtZSk6IERlbGV0ZWQuCgkoY2hlY2tfbWV0aG9kX3JlZGVmaW5pdGlvbik6IENvZGUgYWNjb3VudGluZyBmb3IgV0ZMZWQgbWV0aG9kCglERUNMX05BTUVzIGRlbGV0ZWQuIFVzZSBERUNMX0ZVTkNUSU9OX1dGTC4KCShqYXZhX2NoZWNrX3JlZ3VsYXJfbWV0aG9kcyk6IExpa2V3aXNlLgoJKGphdmFfY2hlY2tfYWJzdHJhY3RfbWV0aG9kcyk6IExpa2V3aXNlLgoJKGphdmFfZXhwYW5kX2NsYXNzZXMpOiBEb24ndCBjYWxsIGByZXNldF9tZXRob2RfbmFtZS4nCgkoc2VhcmNoX2FwcGxpY2FibGVfbWV0aG9kX2xpc3QpOiBVc2UgREVDTF9OQU1FcyBpbnN0ZWFkIG9mCglHRVRfTUVUSE9EX05BTUUuCgkqIHR5cGVjay5jIChsb29rdXBfZG8pOiBDb2RlIGFjY291bnRpbmcgZm9yIFdGTGVkIG1ldGhvZAoJREVDTF9OQU1FcyBkZWxldGVkLgoKMjAwMS0wMS0yNSAgUmljaGFyZCBFYXJuc2hhdyAgPHJlYXJuc2hhQGFybS5jb20+CgoJKiBsZXguYyAoamF2YV9yZWFkX2NoYXIpOiBDaGVjayBmb3IgRU9GIGZyb20gZ2V0YyBmaXJzdC4KCjIwMDEtMDEtMjMgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogY2xhc3MuYyAobGF5b3V0X2NsYXNzKTogRG9uJ3QgbGF5IHRoZSBzdXBlcmNsYXNzIG91dCBpZiBpdCdzCglhbHJlYWR5IGJlaW5nIGxhaWQgb3V0LgoJKiBqY2YtcGFyc2UuYyAoaGFuZGxlX2lubmVyY2xhc3NfYXR0cmlidXRlKTogTmV3IGZ1bmN0aW9uLgoJKEhBTkRMRV9JTk5FUkNMQVNTRVNfQVRUUklCVVRFKTogSW52b2tlCgloYW5kbGVfaW5uZXJjbGFzc2VzX2F0dHJpYnV0ZS4KCShqY2ZfcGFyc2UpOiBEb24ndCBsb2FkIGFuIGlubmVyY2xhc3NlcyBpZiBpdCdzIGFscmVhZHkgYmVpbmcKCWxhaWQgb3V0LgoJKiBqY2Ytd3JpdGUuYyAoYXBwZW5kX2lubmVyY2xhc3NfYXR0cmlidXRlX2VudHJ5KTogU3RhdGljCglgYW5vbnltb3VzX25hbWUnIGFuZCBpdHMgaW5pdGlhbGl6YXRpb24gZGVsZXRlZC4gYG9jaWknIGFuZCBgaW5pJwoJdG8gYmUgemVybyBmb3IgYW5vbnltb3VzIGNsYXNzZXMuCgoyMDAxLTAxLTIzICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIGNsYXNzLmMgKHNldF9jb25zdGFudF92YWx1ZSk6IFNldCBERUNMX0ZJRUxEX0ZJTkFMX0lVRCBpZgoJbmVjZXNzYXJ5LgoJKiBqY2YtcGFyc2UuYyAoc2V0X3NvdXJjZV9maWxlbmFtZSk6IFVzZQoJTUFZQkVfQ1JFQVRFX1ZBUl9MQU5HX0RFQ0xfU1BFQ0lGSUMgaWYgbmVjZXNzYXJ5LgoKMjAwMS0wMS0yMyAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBleHByLmMgKGJ1aWxkX2puaV9zdHViKTogU2V0IERFQ0xfQ09OVEVYVCBvbiBgbWV0aF92YXInIHNvIGl0CglnZXRzIGEgdW5pcXVlIGFzbSBuYW1lLgoKMjAwMS0wMS0yMyAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBqY2YtcGFyc2UuYyAoSEFORExFX0VORF9NRVRIT0RTKTogTnVsbGlmeSBjdXJyZW50X21ldGhvZC4KCShIQU5ETEVfU1RBUlRfRklFTEQpOiBJbnZva2UgTUFZQkVfQ1JFQVRFX1ZBUl9MQU5HX0RFQ0xfU1BFQ0lGSUMKCWlmIG5lY2Vzc2FyeS4KCShIQU5ETEVfU1lOVEhFVElDX0FUVFJJQlVURSk6IE5ldyBtYWNyby4KCSogamNmLXJlYWRlci5jIChnZXRfYXR0cmlidXRlKTogSGFuZGxlIGBTeW50aGV0aWMnIGF0dHJpYnV0ZS4KCSogcGFyc2UueSAobG9va3VwX3BhY2thZ2VfdHlwZV9hbmRfc2V0X25leHQpOiBEZWxldGVkLgoJKHJlc29sdmVfcGFja2FnZSk6IFJlbW92ZWQgdW5uZWNlc3NhcnkgY29kZS4KCShmaW5kX2FwcGxpY2FibGVfYWNjZXNzaWJsZV9tZXRob2RzX2xpc3QpOiBgZmluaXQkJyBjYW4ndCBiZQoJaW5oZXJpdGVkLgoJKiB2ZXJpZnkuYyAocG9wX2FyZ3VtZW50X3R5cGVzKTogQWRkZWQgbWlzc2luZyBwcm90b3R5cGUuCgoyMDAxLTAxLTIzICBCcnljZSBNY0tpbmxheSAgPGJyeWNlQGFsYmF0cm9zcy5jby5uej4KCgkqIGNvbmZpZy1sYW5nLmluOiBEaXNhYmxlIGphdmEgYnkgZGVmYXVsdC4KCjIwMDEtMDEtMjMgIFRvbSBUcm9tZXkgIDx0cm9tZXlAcmVkaGF0LmNvbT4KCgkqIGdjai50ZXhpIChDb3B5aW5nKTogTmV3IG5vZGUuCglBZGRlZCBjb3B5cmlnaHQgaW5mb3JtYXRpb24uCgoyMDAxLTAxLTIxICBQZXIgQm90aG5lciAgPHBlckBib3RobmVyLmNvbT4KCglWYXJpb3VzIGZpeGVzIHRvIGFsbG93IGNvbXBpbGluZyBhIGNvbXByZXNzZWQgLmphci8uemlwIGFyY2hpdmUuCgkqIHppcGZpbGUuaCAoc3RydWN0IFppcEZpbGVDYWNoZSk6ICBSZXBsYWNlIGJ5IHN0cnVjdCBaaXBGaWxlLgoJKHN0cnVjdCBaaXBGaWxlKTogIEFkZCBmaWVsZHMgbmFtZSBhbmQgbmV4dCAoZnJvbSAgWmlwRmlsZUNhY2hlKS4KCShzdHJ1Y3QgWmlwRGlyZWN0b3J5KTogIE5ldyBmaWVsZCB6aXBmIHBvaW50cyB0byBvd25pbmcgWmlwRmlsZS4KCSogamNmLmggKHN0cnVjdCBaaXBEaXJlY3RvcnkpOiAgQWRkIGZvcndhcmQgZGVjbGFyYXRpb24uCgkoc3RydWN0IEpDRik6ICAgRGVjbGFyZSB6aXBkIGZpZWxkIHRvIGhhdmUgdHlwZSBzdHJ1Y3QgWmlwRGlyZWN0b3J5LgoJUmVtb3ZlIHNlZW5faW5femlwIGFuZCB6aXBfb2Zmc2V0IGZpZWxkcy4KCShKQ0ZfU0VFTl9JTl9aSVApOiAgTmV3IG1hY3JvLgoJKiB6ZXh0cmFjdC5jIChyZWFkX3ppcF9hcmNoaXZlKTogIFNldCBaaXBEaXJlY3RvcnkncyB6aXBmIGZpZWxkLgoJKiBqY2YtaW8uYzogIENoYW5nZSBhbGwgWmlwRmlsZUNhY2hlIHRvIFppcEZpbGUuCgkocmVhZF96aXBfbWVtYmVyKTogIE5ldyBmdW5jdGlvbi4KCShvcGVuX2luX3ppcCk6ICBDYWxsIHJlYWRfemlwX21lbWJlci4KCSogamNmLXBhcnNlLmMgKGZpbmRfaW5fY3VycmVudF96aXApOiAgUmVtb3ZlIGZ1bmN0aW9uLgoJKHJlYWRfY2xhc3MpOiAgTWVyZ2UgaW4gZmluZF9pbl9jdXJyZW50X3ppcCBmdW5jdGlvbmFsaXR5LgoJQ2FsbCByZWFkX3ppcF9tZW1iZXIgaWYgbmVlZGVkLgoJKHBhcnNlX3ppcF9maWxlX2VudHJpZXMpOiAgVXNlIHJlYWRfemlwX21lbWJlci4KCShwcm9jZXNzX3ppcF9kaXIpOiAgVXBkYXRlIGZvciByZW1vdmVkIGFuZCBhZGRlZCBKQ0YgZmllbGRzLgoJKGpjZl9maWd1cmVfZmlsZV90eXBlKTogIFJlLXVzZSwgZG9uJ3QgY29weSBpbml0aWFsIFppcEZpbGUgc3RydWN0LgoKMjAwMS0wMS0yMSAgUGVyIEJvdGhuZXIgIDxwZXJAYm90aG5lci5jb20+CgoJTWlub3Igb3B0aW1pemF0aW9uIG9mIHN0YXRpYyBnZ2Mgcm9vdHMuCgkqIGpjZi1wYXJzZS5jIChwYXJzZV9yb290cyk6ICBOZXcgc3RhdGljIGZpZWxkLgoJKGN1cnJlbnRfZmllbGQsIGN1cnJlbnRfbWV0aG9kLCBjdXJyZW50X2ZpbGVfbGlzdCk6ICBSZXBsYWNlIGJ5IG1hY3JvcwoJbmFtaW5nIGZpZWxkcyBvZiBwYXJzZV9yb290cy4KCShpbml0X2pjZl9wYXJzZSk6ICBDb21iaW5lIDMgZ2djX2FkZF90cmVlX3Jvb3QgY2FsbHMgdG8gMS4KCSogY2xhc3MuYyAoY2xhc3Nfcm9vdHMpOiAgTmV3IHN0YXRpYyBmaWVsZC4KCShyZWdpc3RlcmVkX2NsYXNzLCBmaWVsZHNfaWRlbnQsIGluZm9faWRlbnQsIGNsYXNzX2xpc3QpOgoJTmV3IG1hY3JvcyBuYW1pbmcgZmllbGRzIG9mIHBhcnNlX3Jvb3RzLgoJKGJ1aWxkX3N0YXRpY19maWVsZF9yZWYpOiAgRG9uJ3QgcmVnaXN0ZXIgcm9vdHMgaGVyZS4KCShsYXlvdXRfY2xhc3MpOiAgU3RhdGljIGZpZWxkIGxpc3QgcmVwbGFjZWQgYnkgbWFjcm8gY2xhc3NfbGlzdC4KCShpbml0X2NsYXNzX3Byb2Nlc3NpbmcpOiAgQ2FsbCBnZ2NfYWRkX3RyZWVfcm9vdCBmb3IgNCByb290cy4KCUluaXRpYWxpemUgZmllbGRzX2lkZW50IGFuZCBpbmZvX2lkZW50IGhlcmUuCgoyMDAxLTAxLTIxICBQZXIgQm90aG5lciAgPHBlckBib3RobmVyLmNvbT4KCgkqIGpjZi1wYXJzZS5jIChnZ2NfbWFya19qY2YpOiAgTmV3IGZ1bmN0aW9uLgoJKGluaXRfamNmX3BhcnNlKTogIFJlZ2lzdGVyIGN1cnJlbnRfamNmIGFzIGdnYyByb290LgoKMjAwMS0wMS0yMSAgUGVyIEJvdGhuZXIgIDxwZXJAYm90aG5lci5jb20+CgoJKiBsYW5nLmMgKHB1dF9kZWNsX25vZGUpOiAgUHJpbnQgbWV0aG9kJ3MgbmFtZS4KCjIwMDEtMDEtMjEgIFBlciBCb3RobmVyICA8cGVyQGJvdGhuZXIuY29tPgoKCSogdmVyaWZ5LmMgKFZFUklGSUNBVElPTl9FUlJPUl9XSVRIX0lOREVYKTogIE5ldyBtYWNyby4KCSh2ZXJpZnlfanZtX2luc3RydWN0aW9ucyk6ICBVc2UgaXQsIGZvciBiZXR0ZXIgZXJyb3IgbWVzc2FnZXMgb24gbG9hZHMuCgoyMDAxLTAxLTIxICBQZXIgQm90aG5lciAgPHBlckBib3RobmVyLmNvbT4KCgkqIHZlcmlmeS5jIChtZXJnZV90eXBlX3N0YXRlKTogIFN0aWxsIG1heSBoYXZlIHRvIG1lcmdlIGV2ZW4gaWYKCUxBQkVMX1ZFUklGSUVEIChsYWJlbCkuCgoyMDAxLTAxLTIxICBQZXIgQm90aG5lciAgPHBlckBib3RobmVyLmNvbT4KCgkqIHBhcnNlLnkgKG1ldGhvZF9oZWFkZXIpOiAgRG9uJ3Qgc2V0IHRoZSBERUNMX05BTUUgb2YgYSBGVU5DVElPTl9ERUNMCgl0byBhIEVYUFJfV0lUSF9GSUxFX0xPQ0FUSU9OIC0gdGhhdCBpcyBqdXN0IHRvbyBmcmFnaWxlIGFuZCB3cm9uZy4KCjIwMDEtMDEtMTkgIFBlciBCb3RobmVyICA8cGVyQGJvdGhuZXIuY29tPgoKCSogZXhwci5jIChwb3BfdHlwZV8wKTogIE9ubHkgcmV0dXJuIG9iamVjdF9wdHJfdHlwZV9ub2RlIG9uIG1pc21hdGNoCglpZiBleHBldGluZyBhbiBpbnRlcmZhY2UgdHlwZS4gIFJlZmluZXMgVG9tJ3MgY2hhbmdlIG9mIDIwMDAtMDktMTIuCgoyMDAxLTAxLTE4ICBQZXIgQm90aG5lciAgPHBlckBib3RobmVyLmNvbT4KCgkqIGdjai50ZXhpIChJbnB1dCBPcHRpb25zKTogTWVudGlvbiAuamF2YSBmaWxlcy4KCjIwMDEtMDEtMTcgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogbGFuZy1vcHRpb25zLmggKC1XdW5zdXBwb3J0ZWQtamRrMTEpOiBSZW1vdmVkLgoJKiBsYW5nLmMgKGZsYWdfbm90X292ZXJyaWRpbmcpOiBEZWxldGVkLgoJKGZsYWdfc3RhdGljX2xvY2FsX2pkazFfMSk6IExpa2V3aXNlLgoJKGxhbmdfV19vcHRpb25zKTogUmVtb3ZlZCAidW5zdXBwb3J0ZWQtamRrMTEiIGVudHJ5LgoJKiBwYXJzZS55IChqYXZhX2NoZWNrX21ldGhvZHMpOiBSZW1vdmVkIGRlYWQgY29kZS4KCjIwMDEtMDEtMTcgIFRvbSBUcm9tZXkgIDx0cm9tZXlAcmVkaGF0LmNvbT4KCglDaGFuZ2VzIHN1Z2dlc3RlZCBieSBQZXIgQm90aG5lcjoKCSogZ2NqLnRleGkgKElucHV0IE9wdGlvbnMpOiBEb24ndCBtZW50aW9uIGlucHV0IGZpbGVzLgoJKENvZGUgR2VuZXJhdGlvbik6IFVwZGF0ZWQgLS1tYWluIGluZm9ybWF0aW9uLgoJKEludm9raW5nIGpjZi1kdW1wKTogTWVudGlvbiB0aGF0IC0tamF2YXAgaXMgaW5jb21wbGV0ZS4KCUZyb20gQWxleGFuZHJlIFBldGl0LUJpYW5jbzoKCShXYXJuaW5ncyk6IERvbid0IG1lbnRpb24gLVd1bnN1cHBvcnRlZC1qZGsxMS4KCU15IHN0dWZmOgoJKENvbXBhdGliaWxpdHkpOiBNZW50aW9uIEpESyAxLjItbmVzcyBvZiBsaWJyYXJpZXMuCgkoUmVzb3VyY2VzKTogTWVudGlvbiByZXNvdXJjZXMgdXNlZCB3aGVuIHdyaXRpbmcgZ2NqLgoKMjAwMS0wMS0xNyAgVG9tIFRyb21leSAgPHRyb21leUByZWRoYXQuY29tPgoKCSogZ2NqLnRleGk6IE5ldyBmaWxlLgoJKiBNYWtlLWxhbmcuaW4gKCQoc3JjZGlyKS9qYXZhL2djai5pbmZvKTogTmV3IHRhcmdldC4KCShqYXZhLmluZm8pOiBEZXBlbmQgb24gZ2NqLmluZm8uCgkoamF2YS9nY2ouZHZpKTogTmV3IHRhcmdldC4KCShqYXZhLmR2aSk6IERlcGVuZCBvbiBnY2ouZHZpLgoJKGphdmEuaW5zdGFsbC1pbmZvKTogV3JvdGUuCgoyMDAxLTAxLTE2ICBKZWZmIFN0dXJtICA8amVmZi5zdHVybUBhcHBuZXQuY29tPgoKCSogZXhwci5jIChqYXZhX2xhbmdfZXhwYW5kX2V4cHIpOiBVc2UgVFJFRV9TWU1CT0xfUkVGRVJFTkNFRCBhZnRlcgoJaGF2aW5nIGNhbGxlZCBtYWtlX2RlY2xfcnRsLgoKMjAwMS0wMS0xNCAgUGVyIEJvdGhuZXIgIDxwZXJAYm90aG5lci5jb20+CgoJVmFyaW91cyBwYXRjaGVzIHRvIGVtaXQgYmV0dGVyIG1lc3NhZ2VzIG9uIHZlcmlmaWNhdGlvbiBlcnJvcnMuCgkqIGV4cHIuYyAocHVzaF90eXBlXzApOiAgUmV0dXJuIGVycm9yIGluZGljYXRpb24gb24gc3RhY2sgb3ZlcmZsb3csCglpbnN0ZWFkIG9mIGNhbGxpbmZnIGZhdGFsLgoJKHB1c2hfdHlwZSk6ICBOb3cganVzdCBjYWxsIHB1c2hfdHlwZV8wIChuZCBmYXRhbCBvbiBvdmVyZmxvdykuCgkocG9wX3R5cGVfMCk6ICBSZXR1cm4gZGV0YWlsZWQgZXJyb3IgbWVzc2FnZSAoaW4gYSBjaGFyKiogYXJndW1lbnQpLgoJKHBvcF90eXBlKTogIElmIHBvcF90eXBlXzAgZmFpbHMsIHByaW50IGVycm9yIG1lc3NhZ2UuCgkocG9wX2FyZ3VtZW50X3R5cGVzKTogIE1vdmVkIHRvIHZlcmlmeS5jLgoJKiB2ZXJpZnkuYyAocG9wX2FyZ3VtZW50X3R5cGVzKTogIE1vdmVkIGZyb20gZXhwci5jLgoJUmV0dXJuIGEgKHBvc3NpYmxlKSBlcnJvciBtZXNzYWdlLCByYXRoZXIgdGhhbiB2b2lkLgoJKFBPUF9UWVBFLCBQT1BfVFlQRV9DT05WLCBQVVNIX1RZUEUsIFBVU0hfUEVORElORyk6ICBOZXcgbWFjcm9zLgoJKHZlcmlmeV9qdm1faW5zdHJ1Y3Rpb24pOiAgVXNlIG5ldyBtYWNyb3MsIGltcHJvdmluZyBlcnJvciBtZXNzYWdlcy4KCUZvciBjYXNlIE9QQ09ERV9hc3RvcmUgdXNlIG9iamVjdF9wdHJfdHlwZV9ub2RlLgoJKiBqYXZhLXRyZWUuaCAoVFlQRV9VTkRFUkZMT1csIFRZUEVfVU5FWFBFQ1RFRCk6ICBOZXcgbWFjcm9zLgoJKHBvcF90eXBlXzAsIHB1c2hfdHlwZV8wLCBwb3BfYXJndW1lbnRfdHlwZXMpOiAgVXBkYXRlIGFjY29yZGluZ2x5LgoKCSogcGFyc2UueSAoamF2YV9jb21wbGV0ZV9saHMgY2FzZSBFWFBSX1dJVEhfRklMRV9MT0NBVElPTik6IElmIGJvZHkgaXMKCWNvbnN0YW50LCByZXR1cm4gYm9keSB3aXRob3V0IHdyYXBwZXIuICAoSW1wcm92ZXMgY29uc3RhbnQgZm9sZGluZy4pCgkqIGxleC5jIChidWlsZF93Zmxfbm9kZSk6ICBDbGVhciBUUkVFX1RZUEUgZnJvbSByZXR1cm5lZCBub2RlLgoKMjAwMS0wMS0xMyAgUGVyIEJvdGhuZXIgIDxwZXJAYm90aG5lci5jb20+CgoJKiBleHByLmMgKGV4cGFuZF9qYXZhX2ZpZWxkX29wKTogIEFzc2lnbmluZyB0byBhIGZpbmFsIGZpZWxkIG91dHNpZGUKCWFuIGluaXRpYWxpemVyIGRvZXMgbm90IHZpb2xhdGUgSlZNIHNwZWMsIHNvIHNob3VsZCBiZSB3YXJuaW5nLCBub3QKCWVycm9yLiAgKFN1bidzIHZlcmlmaWVyIGRvZXMgbm90IGNvbXBsYWluIC0gdGhvdWdoIE1pY3JvU29mdCdzIGRvZXMuKQoKMjAwMS0wMS0xMiAgSm9zZXBoIFMuIE15ZXJzICA8anNtMjhAY2FtLmFjLnVrPgoKCSogZ2phdmFoLmMgKHZlcnNpb24pLCBqY2YtZHVtcC5jICh2ZXJzaW9uKTogVXBkYXRlIGNvcHlyaWdodCB5ZWFyCgl0byAyMDAxLgoKMjAwMS0wMS0xMSAgQnJ5Y2UgTWNLaW5sYXkgIDxicnljZUBhbGJhdHJvc3MuY28ubno+CgoJKiBwYXJzZS55IChyZXNvbHZlX2V4cHJlc3Npb25fbmFtZSk6IFBlcm1pdCBpbnN0YW5jZSB2YXJpYWJsZXMgZnJvbQoJZW5jbG9zaW5nIGNvbnRleHQgaW4gc3VwZXIgY29uc3RydWN0b3IgY2FsbC4KCShyZXNvbHZlX3F1YWxpZmllZF9leHByZXNzaW9uX25hbWUpOiBQZXJtaXQgZW5jbG9zaW5nIGNsYXNzJ3MgcXVhbGlmaWVkCgkidGhpcyIgaW4gc3VwZXIgY29uc3RydWN0b3IgY2FsbC4KCjIwMDEtMDEtMTAgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiBjbGFzcy5jIChidWlsZF91dGY4X3JlZik6IFJlbW92ZSBsYXN0IGFyZ3VtZW50IGluIGNhbGwgdG8KCW1ha2VfZGVjbF9ydGw7IHVzZSBtYWtlX2Z1bmN0aW9uX3J0bCBpbnN0ZWFkIG9mIG1ha2VfZGVjbF9ydGwuCgkoYnVpbGRfY2xhc3NfcmVmKTogTGlrZXdpc2UuCgkoYnVpbGRfc3RhdGljX2ZpZWxkX3JlZik6IExpa2V3aXNlLgoJKGdldF9kaXNwYXRjaF90YWJsZSk6IExpa2V3aXNlLgoJKGxheW91dF9jbGFzc19tZXRob2QpOiBMaWtld2lzZS4KCShlbWl0X3JlZ2lzdGVyX2NsYXNzZXMpOiBMaWtld2lzZS4KCSogY29uc3RhbnRzLmMgKGJ1aWxkX2NvbnN0YW50X2RhdGFfcmVmKTogTGlrZXdpc2UuCgkqIGRlY2wuYyAoYnVpbHRpbl9mdW5jdGlvbik6IExpa2V3aXNlLgoJKGNyZWF0ZV9wcmltaXRpdmVfdnRhYmxlKTogTGlrZXdpc2UuCgkqIGV4cHIuYyAoYnVpbGRfa25vd25fbWV0aG9kX2RlZik6IExpa2V3aXNlLgoJKGJ1aWxkX2puaV9zdHViKTogTGlrZXdpc2UuCgkoamF2YV9sYW5nX2V4cGFuZF9leHByKTogTGlrZXdpc2UuCgoyMDAxLTAxLTEwICBUb20gVHJvbWV5ICA8dHJvbWV5QHJlZGhhdC5jb20+CgoJKiBqdnNwZWMuYyAoanZnZW5tYWluX3NwZWMpOiBPbWl0IC1mZW5jb2RpbmcgZnJvbSBjYzEgaW52b2NhdGlvbi4KCjIwMDEtMDEtMDggIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogamF2YS10cmVlLmggKGxhbmdfcHJpbnRhYmxlX25hbWVfd2xzKTogTmV3IHByb3RvdHlwZS4KCSogbGFuZy5jIChwdXRfZGVjbF9uYW1lKTogUmVtb3ZlZCBkZWFkIGNvZGUuIFVzZSBERUNMX0NPTlRFWFQKCXJhdGhlciB0aGFuIGBjdXJyZW50X2NsYXNzJyB0byBwcmludCB0eXBlIG5hbWUuIERvbid0IHByZXBlbmQgdHlwZQoJbmFtZXMgd2hlbiBwcmludGluZyBjb25zdHJ1Y3RvciBuYW1lcy4KCShsYW5nX3ByaW50YWJsZV9uYW1lX3dscyk6IE5ldyBmdW5jdGlvbi4KCSogamNmLXBhcnNlLmMgKGpjZl9wYXJzZV9zb3VyY2UpOiBQYXNzIE5VTEwgYGZpbGUnIGFyZ3VtZW50IHRvCglgYnVpbGRfZXhwcl93ZmwnLCBhbHdheSBzZXQgRVhQUl9XRkxfRklMRU5BTUVfTk9ERS4KCSogcGFyc2UueSAocGF0Y2hfbWV0aG9kX2ludm9jYXRpb24pOiBNZXNzYWdlIHR1bmVkIGZvciBjb25zdHJ1Y3RvcnMuCgkobm90X2FjY2Vzc2libGVfcCk6IEdyYW50IGBwcml2YXRlJyBhY2Nlc3MgZnJvbSB3aXRoaW4KCWVuY2xvc2luZyBjb250ZXh0cy4KCjIwMDEtMDEtMDcgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCUFsbCBmaWxlcyB3aXRoIHVwZGF0ZWQgY29weXJpZ2h0IHdoZW4gYXBwbGljYWJsZS4KCSogTWFrZS1sYW5nLmluIChKVkdFTk1BSU5fT0JTKTogUmVtb3ZlZCBqYXZhL21hbmdsZS5vLgoJKiBjbGFzcy5jIChtYW5nbGVfY2xhc3NfZmllbGQpOiBGdW5jdGlvbiByZW1vdmVkLgoJKGFwcGVuZF9ncHBfbWFuZ2xlZF90eXBlLCBtYW5nbGVfc3RhdGljX2ZpZWxkLCBtYW5nbGVfZmllbGQpOiBMaWtld2lzZS4KCSh1dGY4X2NtcCwgY3h4X2tleXdvcmRfcCk6IE1vdmVkIHRvIGxleC5jLgoJKGJ1aWxkX2NsYXNzX3JlZik6IENhbGwgYGphdmFfbWFuZ2xlX2NsYXNzX2ZpZWxkJyBpbnN0ZWFkIG9mCglgbWFuZ2xlX2NsYXNzX2ZpZWxkLicKCShidWlsZF9kdGFibGVfZGVjbCk6IFJld3JpdHRlbiB0byBjYWxsIGBqYXZhX21hbmdsZV92dGFibGUuJwoJKGxheW91dF9jbGFzcyk6IENhbGwgYGphdmFfbWFuZ2xlX2RlY2wnIGluc3RlYWQgb2YKCWBtYW5nbGVfc3RhdGljX2ZpZWxkLicKCShjeHhfa2V5d29yZHMpOiBJbml0aWFsaXplZCBzdGF0aWMgYXJyYXkgbW92ZWQgdG8gYGxleC5jLicKCShsYXlvdXRfY2xhc3NfbWV0aG9kKTogQ2hhbmdlZCBsZWFkaW5nIGNvbW1lbnQuIFNpbXBsaWZpZWQgdG8KCWNhbGwgYGphdmFfbWFuZ2xlX2RlY2wuJyBMb2NhbCBgcHRyJyBtb3ZlZCBpbiBmb3IgbG9vcCBib2R5LgoJKiBkZWNsLmMgKGxhbmdfbWFya190cmVlKTogTWFyayBmaWVsZCBgcGFja2FnZV9saXN0LicKCSogamF2YS10cmVlLmggKFRZUEVfUEFDS0FHRV9MSVNUKTogTmV3IG1hY3JvLgoJKHN0cnVjdCBsYW5nX3R5cGUpOiBOZXcgZmllbGQgYHBhY2thZ2VfbGlzdC4nCgkodW5pY29kZV9tYW5nbGluZ19sZW5ndGgpOiBQcm90b3R5cGUgcmVtb3ZlZC4KCShhcHBlbmRfZ3BwX21hbmdsZWRfbmFtZSwgYXBwZW5kX2dwcF9tYW5nbGVkX2NsYXNzdHlwZSwKCWVtaXRfdW5pY29kZV9tYW5nbGVkX25hbWUpOiBMaWtld2lzZS4KCShjeHhfa2V5d29yZF9wKTogTmV3IHByb3RvdHlwZS4KCShqYXZhX21hbmdsZV9kZWNsLCBqYXZhX21hbmdsZV9jbGFzc19maWVsZCwKCWphdmFfbWFuZ2xlX2NsYXNzX2ZpZWxkX2Zyb21fc3RyaW5nLCBqYXZhX21hbmdsZV92dGFibGUpOiBMaWtld2lzZS4KCSogamNmLXBhcnNlLmMgKGpjZl9wYXJzZV9zb3VyY2UpOiBDb25zdGlmeSBgZmlsZScgYXJndW1lbnQgdG8KCWBidWlsZF9leHByX3dmbC4nCgkqIGp2Z2VubWFpbi5jIChtYWluX21ldGhvZF9wcmVmaXgpOiBHbG9iYWwgdmFyaWFibGUgcmVtb3ZlZC4KCShtYWluX21ldGhvZF9zdWZmaXgpOiBMaWtld2lzZS4KCShkb19tYW5nbGVfY2xhc3NuYW1lKTogTmV3IGZ1bmN0aW9uLgoJKG1haW4pOiBDYWxsIGl0LiBGb3JtYXQgY2hhbmdlZCB0byBhY2NvbW1vZGF0ZSBuZXcgbWFuZ2xpbmcgc2NoZW1lLgoJKiBsZXguYzogKHV0ZjhfY21wKTogQ29uZGl0aW9uYWxseSBwcm90b3R5cGVkLgoJKGN4eF9rZXl3b3Jkcyk6IE1vdmVkIGZyb20gY2xhc3MuYywgY29uZGl0aW9uYWxseSBkZWZpbmVkLgoJKHV0ZjhfY21wLCBjeHhfa2V5d29yZF9wKTogTGlrZXdpc2UuCgkqIG1hbmdsZS5jIChvYnN0YWNrLmgsIGdnYy5oKTogSW5jbHVkZWQuCgkobWFuZ2xlX2ZpZWxkX2RlY2wpOiBOZXcgZnVuY3Rpb24uCgkobWFuZ2xlX21ldGhvZF9kZWNsLCBtYW5nbGVfdHlwZSwgbWFuZ2xlX3BvaW50ZXJfdHlwZSwKCW1hbmdsZV9hcnJheV90eXBlLCBtYW5nbGVfcmVjb3JkX3R5cGUsCglmaW5kX2NvbXByZXNzaW9uX3BvaW50ZXJfbWF0Y2gsIGZpbmRfY29tcHJlc3Npb25fYXJyYXlfbWF0Y2gsCglmaW5kX2NvbXByZXNzaW9uX3JlY29yZF9tYXRjaCwKCWZpbmRfY29tcHJlc3Npb25fYXJyYXlfdGVtcGxhdGVfbWF0Y2gsIHNldF90eXBlX3BhY2thZ2VfbGlzdCwKCWVudHJ5X21hdGNoX3BvaW50ZXJfcCwgZW1pdF9jb21wcmVzc2lvbl9zdHJpbmcsIGluaXRfbWFuZ2xpbmcsCglmaW5pc2hfbWFuZ2xpbmcsIGNvbXByZXNzaW9uX3RhYmxlX2FkZCwgbWFuZ2xlX21lbWJlcl9uYW1lKTogTGlrZXdpc2UuCgkobWFuZ2xlX29ic3RhY2spOiBOZXcgZ2xvYmFsLgoJKE1BTkdMRV9SQVdfU1RSSU5HKTogTmV3IG1hY3JvLgoJKHVuaWNvZGVfbWFuZ2xpbmdfbGVuZ3RoKTogVHVybmVkIHN0YXRpYy4KCShhcHBlbmRfdW5pY29kZV9tYW5nbGVkX25hbWUpOiBSZW5hbWVkIGZyb20KCWBlbWl0X3VuaWNvZGVfbWFuZ2xlZF9uYW1lLicgIFR1cm5lZCBzdGF0aWMuIGBtYW5nbGVfb2JzdGFjaycKCXJlcGxhY2VzIGBvYnN0YWNrJywgcmVtb3ZlZCBmcm9tIHRoZSBwYXJhbWV0ZXIgbGlzdC4KCShhcHBlbmRfZ3BwX21hbmdsZWRfbmFtZSk6IFR1cm5lZCBzdGF0aWMuIGBtYW5nbGVfb2JzdGFjaycKCXJlcGxhY2VzIHBhcmFtZXRlciBgb2JzdGFjaycsIHJlbW92ZWQgZnJvbSB0aGUgcGFyYW1ldGVyIGxpc3QuIENhbGwKCWBhcHBlbmRfdW5pY29kZV9tYW5nbGVkX25hbWUnIGluc3RlYWQgb2YgYGVtaXRfdW5pY29kZV9tYW5nbGVkX25hbWUuCgkoYXBwZW5kX2dwcF9tYW5nbGVkX2NsYXNzdHlwZSk6IFJlbW92ZWQuCgkoY29tcHJlc3Npb25fdGFibGUsIGNvbXByZXNzaW9uX25leHQpOiBOZXcgc3RhdGljIHZhcmlhYmxlcy4KCSogcGFyc2UueSAodGVtcG9yYXJ5X29ic3RhY2spOiBFeHRlcm4gZGVjbGFyYXRpb24gcmVtb3ZlZC4KCjIwMDEtMDEtMDUgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogcGFyc2UueSAocGF0Y2hfYmlub3ApOiBDb21wdXRlIG1pc3NpbmcgdHlwZSBpbiBlcnJvciBzaXR1YXRpb25zLgoKMjAwMS0wMS0wNSAgQnJ5Y2UgTWNLaW5sYXkgIDxicnljZUBhbGJhdHJvc3MuY28ubno+CgoJKiBjbGFzcy5jIChtYWtlX2NsYXNzX2RhdGEpOiBQdXNoIGluaXRpYWwgdmFsdWUgZm9yICJhcnJheWNsYXNzIi4KCSogZGVjbC5jIChpbml0X2RlY2xfcHJvY2Vzc2luZyk6IEFkZCBuZXcgY2xhc3MgZmllbGQgImFycmF5Y2xhc3MiLgoKMjAwMS0wMS0wNSAgQnJ5Y2UgTWNLaW5sYXkgIDxicnljZUBhbGJhdHJvc3MuY28ubno+CgoJRnJvbSBwYXRoYUBzb2Z0bGFiLmVyaWNzc29uLnNlOgoJKiBwYXJzZS55IChzd2l0Y2hfbGFiZWwpOiBVc2UgYnVpbGQsIG5vdCBidWlsZDEsIHRvIGNvbnN0cnVjdAoJREVGQVVMVF9FWFBSLgoKMjAwMS0wMS0wNCAgTmVpbCBCb290aCAgPG5laWxAZGFpa29rdXlhLmRlbW9uLmNvLnVrPgoKCSogbGFuZy5jIChsYW5nX2RlY29kZV9vcHRpb24pOiBDaGFuZ2UgLU1BIHRvIC1NUC4KCSogamNmLWRlcGVuZC5jIChqY2ZfZGVwZW5kZW5jeV9hZGRfdGFyZ2V0LCBqY2ZfZGVwZW5kZW5jeV9zZXRfdGFyZ2V0KToKCVVwZGF0ZSB0byBuZXcgcHJvdG90eXBlOyBkbyBxdW90ZSB0YXJnZXRzLgoJKGpjZl9kZXBlbmRlbmN5X3dyaXRlKTogVXBkYXRlLgoKMjAwMC0xMi0yMiAgQnJ5Y2UgTWNLaW5sYXkgIDxicnljZUBhbGJhdHJvc3MuY28ubno+CgoJU2hvcnRlbiBwcmltaXRpdmUgYXJyYXkgYWxsb2NhdGlvbiBwYXRoOgoJKiBkZWNsLmMgKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogVXNlIF9Kdl9OZXdQcmltQXJyYXkgbm90IF9Kdl9OZXdBcnJheQoJdG8gY3JlYXRlIG5ldyBwcmltaXRpdmUgYXJyYXlzLgoJKiBleHByLmMgKGJ1aWxkX25ld2FycmF5KTogSWYgZ2VuZXJhdGluZyBuYXRpdmUgY29kZSwgY2FsbAoJc29mdF9uZXdhcnJheV9ub2RlIHdpdGggYSByZWZlcmVuY2UgdG8gdGhlIHByaW1pdGl2ZSBUWVBFIGlkZW50aWZpZXIKCWluc3RlYWQgb2YgdHlwZV92YWx1ZS4KCjIwMDAtMTItMTcgIEJyeWNlIE1jS2lubGF5ICA8YnJ5Y2VAYWxiYXRyb3NzLmNvLm56PgoKCUZpeCBmb3IgUFJzIGdjai8zMTIgYW5kIGdjai8yNTM6CgkqIHBhcnNlLnkgKHZhbGlkX3JlZl9hc3NpZ25jb252X2Nhc3RfcCk6IExvYWQgY2xhc3NlcyBmb3Igc291cmNlIGFuZAoJZGVzdCBpZiB0aGV5IGFybid0IGFscmVhZHkuCgkqIGNsYXNzLmMgKGxheW91dF9jbGFzcyk6IENhbGwgbWF5YmVfbGF5b3V0X3N1cGVyX2NsYXNzIG9uCglzdXBlcmludGVyZmFjZXMgYWxzbywgYnV0IG9ubHkgaWYgY29tcGlsaW5nIGZyb20gYnl0ZWNvZGUuCgoJRml4IGZvciBQUiBnY2ovMzczOgoJKiBwYXJzZS55IChjcmVhdGVfY2xhc3MpOiBTZXQgQUNDX1NUQVRJQyBpZiBjbGFzcyBpcyBkZWNsYXJlZCBpbiBhbgoJaW50ZXJmYWNlLgoKMjAwMC0xMi0xNSAgVG9tIFRyb21leSAgPHRyb21leUByZWRoYXQuY29tPgoKCSogamNmLXBhcnNlLmMgKGpjZl9wYXJzZV9zb3VyY2UpOiBTZXQgd2ZsX29wZXJhdG9yIGlmIG5vdCBhbHJlYWR5CglzZXQuCgoyMDAwLTEyLTE0ICBBbmRyZXcgSGFsZXkgIDxhcGhAcmVkaGF0LmNvbT4KCgkqIGJvZWhtLmMgKG1hcmtfcmVmZXJlbmNlX2ZpZWxkcyk6IENoYW5nZSB0ZXN0IHRvIGNvcnJlY3RseSBkZXRlY3QKCWJpdG1hcCBvdmVyZmxvdy4KCjIwMDAtMTItMTUgIEFuZHJlYXMgSmFlZ2VyICA8YWpAc3VzZS5kZT4KCgkqIGNvbmZpZy1sYW5nLmluIChsYW5nX2RpcnMpOiBBZGRlZC4KCjIwMDAtMTItMTUgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogcGFyc2UueSAoZW5kX2FydGlmaWNpYWxfbWV0aG9kX2JvZHkpOiBGaXhlZCB1bmRlZmluZWQgYmVoYXZpb3IuCglDcmVkaXRzIGdvIHRvIHJ0aCBmb3IgZmluZGluZyBpdC4KCjIwMDAtMTItMTMgIE1pa2UgU3R1bXAgIDxtcnNAd3JzLmNvbT4KCgkqIHBhcnNlLnkgKGNoZWNrX3N0YXRpY19maW5hbF92YXJpYWJsZV9hc3NpZ25tZW50X2ZsYWcpOiBGaXggc3BlbGxpbmcuCgoyMDAwLTExLTA3ICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CgoJKiBNYWtlLWxhbmcuaW4gKEpBVkFfTEVYX0MpOiBBZGRlZCBjaGFydGFibGVzLmguCgkqIGxleC5jIChqYXZhX2lnbm9yYWJsZV9jb250cm9sX3ApOiBSZW1vdmVkLgoJKGphdmFfbGV0dGVyX29yX2RpZ2l0X3ApOiBSZW1vdmVkLgoJKGphdmFfc3RhcnRfY2hhcl9wKTogTmV3IGZ1bmN0aW9uLgoJKGphdmFfcmVhZF9jaGFyKTogUmV0dXJuIGBpbnQnLCBub3QgYHVuaWNvZGVfdCcuICBDaGFuZ2VkCgljYWxsZXJzLgoJKGphdmFfcmVhZF91bmljb2RlKTogTGlrZXdpc2UuCgkoamF2YV9yZWFkX3VuaWNvZGVfY29sbGFwc2luZ190ZXJtaW5hdG9ycyk6IExpa2V3aXNlLgoJKGphdmFfZ2V0X3VuaWNvZGUpOiBMaWtld2lzZS4KCShqYXZhX25ld19sZXhlcik6IEluaXRpYWxpemUgaGl0X2VvZi4KCShqYXZhX3BhcnNlX2VuZF9jb21tZW50KTogVGFrZSBgaW50JyBhcmd1bWVudC4KCShqYXZhX3BhcnNlX2RvY19zZWN0aW9uKTogTGlrZXdpc2UuCgkoamF2YV9wYXJzZV9lc2NhcGVfc2VxdWVuY2UpOiBEb24ndCBhbGxvdyBiYWNrbGFzaC1uZXdsaW5lLgoJUmV0dXJuIGBpbnQnLgoJKiBsZXguaCAoSkFWQV9ESUdJVF9QKTogUmVtb3ZlZC4KCShfSkFWQV9MRVRURVJfT1JfRElHSVRfUCk6IFJlbW92ZWQuCgkoX0pBVkFfSURFTlRJRklFUl9JR05PUkFCTEUpOiBSZW1vdmVkLgoJKEpBVkFfU1RBUlRfQ0hBUl9QKTogUmVuYW1lZCBmcm9tIEpBVkFfSURfQ0hBUl9QLgoJKEpBVkFfUEFSVF9DSEFSX1ApOiBOZXcgbWFjcm8uCgkoVUVPRik6IE5vdyAtMS4KCShKQVZBX0NIQVJfRVJST1IpOiBOb3cgLTIuCgkoamF2YV9sZXhlcik6IE5ldyBmaWVsZCBgaGl0X2VvZicuCgkqIGNoYXJ0YWJsZXMuaDogTmV3IGZpbGUuCgkqIGdlbi10YWJsZS5wbDogbmV3IGZpbGUuCgoyMDAwLTExLTIwICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CiAgICAgICAgICAgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogcGFyc2UueSAoamF2YV9jb21wbGV0ZV9saHMpOiBPbmx5IGFsbG93IGNvbXBvdW5kIGFzc2lnbm1lbnQgb2YKCXJlZmVyZW5jZSB0eXBlIGlmIHR5cGUgaXMgU3RyaW5nLgoKMjAwMC0xMi0wOSAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBNYWtlLWxhbmcuaW4gKGphdmEvamNmLXBhdGgubzopOiBsaWJnY2ouamFyIHJlcGxhY2VzIGxpYmdjai56aXAuCglqY2YtcGF0aC5jOiBMaWtld2lzZS4KCjIwMDAtMTItMDkgIEFudGhvbnkgR3JlZW4gIDxncmVlbkByZWRoYXQuY29tPgoKCSogemlwZmlsZS5oIChaaXBEaXJlY3RvcnkpOiBEZWNsYXJlIHNpemUsIHVuY29tcHJlc3NlZF9zaXplLAoJZmlsZXN0YXJ0IGFuZCBmaWxlbmFtZV9sZW5ndGggYXMgaW50IHZhbHVlcy4KCjIwMDAtMTItMDcgIE1vIERlSm9uZyAgPG1kZWpvbmdAcmVkaGF0LmNvbT4KCgkqIGpjZi1pby5jIChmaW5kX2NsYXNzKTogQ29ycmVjdCB0aGUgbG9naWMgdGhhdCB0ZXN0cyB0byBzZWUgaWYgYQoJLmphdmEgZmlsZSBpcyBuZXdlciB0aGFuIGl0cyAuY2xhc3MgZmlsZS4gVGhlIGNvbXBpbGVyIHdhcwoJaW5jb3JyZWN0bHkgcHJpbnRpbmcgYSB3YXJuaW5nIHdoZW4gZmlsZSBtb2QgdGltZXMgd2VyZSBlcXVhbC4KCjIwMDAtMTItMDcgIFphY2sgV2VpbmJlcmcgIDx6YWNrQHdvbGVyeS5zdGFuZm9yZC5lZHU+CgoJKiBqdmdlbm1haW4uYzogVXNlIElTUFJJTlQgbm90IGlzYXNjaWkuCgoyMDAwLTEyLTA2ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnkgKGVuZF9hcnRpZmljaWFsX21ldGhvZF9ib2R5KTogRml4ZWQgdHlwby4KCjIwMDAtMTItMDQgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogcGFyc2UueSAocGF0Y2hfbWV0aG9kX2ludm9jYXRpb24pOiBQaWNrIHRoZSBjb3JyZWN0IGVuY2xvc2luZwoJY29udGV4dCB3aGVuIGNyZWF0aW5nIGlubmVyIGNsYXNzIGluc3RhbmNlcy4KCUZpeGVzIGdjai8zMzIuCgoyMDAwLTExLTI2ICBKb3NlcGggUy4gTXllcnMgIDxqc20yOEBjYW0uYWMudWs+CgoJKiBnamF2YWguYyAodmVyc2lvbiksIGpjZi1kdW1wLmMgKHZlcnNpb24pLCBqdi1zY2FuLmMgKHZlcnNpb24pOgoJVXBkYXRlIGNvcHlyaWdodCB5ZWFyIHRvIDIwMDAuCgoyMDAwLTExLTIzICBBbnRob255IEdyZWVuICA8Z3JlZW5AcmVkaGF0LmNvbT4KCgkqIGpjZi1wYXJzZS5jIChpbml0X2pjZl9wYXJzZSk6IFJlZ2lzdGVyIGN1cnJlbnRfZmlsZV9saXN0IHJvb3QuCglNb3ZlIGN1cnJlbnRfZmlsZV9saXN0IG91dCBvZiB5eXBhcnNlIGFuZCBtYWtlIGl0IHN0YXRpYy4KCgkqIGV4cHIuYzogRGVjbGFyZSBxdWlja19zdGFjayBhbmQgdHJlZV9saXN0X2ZyZWVfbGlzdCBhcyBzdGF0aWMKCShpbml0X2V4cHJfcHJvY2Vzc2luZyk6IFJlZ2lzdGVyIHF1aWNrX3N0YWNrIGFuZAoJdHJlZV9saXN0X2ZyZWVfbGlzdCByb290cy4KCjIwMDAtMTEtMjIgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogcGFyc2UueSAoYnVpbGRfb3V0ZXJfZmllbGRfYWNjZXNzKTogTmV3IGxvY2FsIGBkZWNsX2N0eCcsIHVzZQoJaXQuIENoZWNrIGZvciBmaWVsZCdzIGNvbnRleHQgYW5kIGN1cnJlbnQgY2xhc3MgaW1tZWRpYXRlIG91dGVyCgljb250ZXh0IGluaGVyaXRhbmNlLgoJKG91dGVyX2ZpZWxkX2FjY2Vzc19wKTogQ29uc2lkZXIgZmllbGRzIGluaGVyaXRlZCBmcm9tIHRoZSBsYXN0CgllbmNsb3NpbmcgY29udGV4dC4KCShidWlsZF9hY2Nlc3NfdG9fdGhpc24pOiBTdG9wIGF0IHRoZSBsYXN0IGVuY2xvc2luZyBjb250ZXh0IGlmCgluZWNlc3NhcnkuCglGaXhlcyBnY2ovMzY3LgoKVGh1IE5vdiAyMyAwMjoxOToxNCAyMDAwICBKIm9ybiBSZW5uZWNrZSA8YW15bGFhckByZWRoYXQuY29tPgoKCSogTWFrZS1sYW5nLmluIChqdnNwZWMubyk6IERlcGVuZCBvbiAkKENPTkZJR19IKS4KCjIwMDAtMTEtMjIgIEJyeWNlIE1jS2lubGF5ICA8YnJ5Y2VAYWxiYXRyb3NzLmNvLm56PgoKCSogamNmLXBhcnNlLmMgKGdldF9jb25zdGFudCk6IENhbGwgVVQ4X0NIQVJfTEVOR1RIIG9uIGB1dGY4Jywgbm90IHRoZQoJc2NyYXRjaCBidWZmZXIuCgoyMDAwLTExLTIwICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CgoJKiBqdi1zY2FuLmMgKGhlbHApOiBEb2N1bWVudCAtLWNvbXBsZXhpdHkuCgkob3B0aW9ucyk6IEFkZGVkIC0tY29tcGxleGl0eS4KCShmbGFnX2NvbXBsZXhpdHkpOiBOZXcgZ2xvYmFsLgoJKG1haW4pOiBDYWxsIGByZXBvcnQnLgoJKiBwYXJzZS1zY2FuLnkgKGNvbXBsZXhpdHkpOiBOZXcgZ2xvYmFsLgoJKGlmX3RoZW5fc3RhdGVtZW50LCBpZl90aGVuX2Vsc2Vfc3RhdGVtZW50LAoJaWZfdGhlbl9lbHNlX3N0YXRlbWVudF9uc2ksIHN3aXRjaF9ibG9ja19zdGF0ZW1lbnRfZ3JvdXAsCgl3aGlsZV9leHByZXNzaW9uLCBkb19zdGF0ZW1lbnQsIGZvcl9iZWdpbiwgY29udGludWVfc3RhdGVtZW50LAoJdGhyb3dfc3RhdGVtZW50LCBjYXRjaF9jbGF1c2UsIGZpbmFsbHksIG1ldGhvZF9pbnZvY2F0aW9uLAoJY29uZGl0aW9uYWxfYW5kX2V4cHJlc3Npb24sIGNvbmRpdGlvbmFsX29yX2V4cHJlc3Npb24sCgljb25kaXRpb25hbF9leHByZXNzaW9uKTogVXBkYXRlIGNvbXBsZXhpdHkuCgkocmVzZXRfcmVwb3J0KTogUmVzZXQgY29tcGxleGl0eS4KCShyZXBvcnQpOiBOZXcgZnVuY3Rpb24uCgoyMDAwLTExLTIwICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CgoJKiBsZXguYyAoeXlsZXgpOiBBZGRlZCBTVFJJQ1RfVEsgY2FzZS4KCSogcGFyc2UueSAoU1RSSUNUX1RLKTogQWRkZWQuCgkqIHBhcnNlLXNjYW4ueSAoU1RSSUNUX1RLKTogQWRkZWQuCgkqIE1ha2UtbGFuZy5pbiAoJChzcmNkaXIpL2phdmEva2V5d29yZC5oKTogQWRkZWQgbWlzc2luZyBgXCcgYW5kCglgOycuICBVc2UgNCwgbm90IDMsIHdpdGggLWsgb3B0aW9uLiAgQ29ycmVjdGx5IHJlbmFtZSByZXN1bHRpbmcKCWZpbGUuCgkqIGtleXdvcmQuaDogUmVidWlsdC4KCSoga2V5d29yZC5ncGVyZiAoc3RyaWN0ZnApOiBBZGRlZC4KCjIwMDAtMTEtMjAgIFRvbSBUcm9tZXkgIDx0cm9tZXlAY3lnbnVzLmNvbT4KCgkqIGxleC5jICh5eWxleCk6IFJlY29nbml6ZSBmbG9hdGluZyBwb2ludCBjb25zdGFudHMgd2l0aCBsZWFkaW5nCgkwLgoKMjAwMC0xMS0xOSAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogamF2YS10cmVlLmggKGN5Y2xpY19pbmhlcml0YW5jZV9yZXBvcnQpOiBDb25zdGlmeS4KCSogcGFyc2UueSAoY3ljbGljX2luaGVyaXRhbmNlX3JlcG9ydCk6IExpa2V3aXNlLgoKMjAwMC0xMS0xNyAgWmFjayBXZWluYmVyZyAgPHphY2tAd29sZXJ5LnN0YW5mb3JkLmVkdT4KCgkqIHBhcnNlLnkgKGdvYWwpOiBSZW1vdmUgY2FsbCB0byBnZ2NfYWRkX3N0cmluZ19yb290LgoKMjAwMC0xMS0xNiAgWmFjayBXZWluYmVyZyAgPHphY2tAd29sZXJ5LnN0YW5mb3JkLmVkdT4KCgkqIGpjZi1wYXJzZS5jIChnZXRfY29uc3RhbnQpLCBwYXJzZS55IChkb19tZXJnZV9zdHJpbmdfY3N0ZSk6CglDcmVhdGUgc3RyaW5nIGluIHNjcmF0Y2ggYnVmZmVyLCB0aGVuIHBhc3MgdG8gYnVpbGRfc3RyaW5nLgoKMjAwMC0xMS0xMyAgSm9zZXBoIFMuIE15ZXJzICA8anNtMjhAY2FtLmFjLnVrPgoKCSogcGFyc2UueSAoaXNzdWVfd2FybmluZ19lcnJvcl9mcm9tX2NvbnRleHQpOiBBZGQKCUFUVFJJQlVURV9QUklOVEYuCgoyMDAwLTExLTExICBBbnRob255IEdyZWVuICA8Z3JlZW5AcmVkaGF0LmNvbT4KCgkqIGpjZi1wYXJzZS5jIChwcm9jZXNzX3ppcF9kaXIpOiBBZGQgZmlucHV0IHBhcmFtZXRlci4KCShqY2ZfZmlndXJlX2ZpbGVfdHlwZSk6IENhbGwgcHJvY2Vzc196aXBfZGlyIHdpdGggYXBwcm9wcmlhdGUKCWFyZ3VtZW50LgoKMjAwMC0xMS0xMCAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogZGVjbC5jIChjb3B5X2xhbmdfZGVjbCk6IFVzZSBtZW1jcHksIG5vdCBiY29weS4KCSogamNmLXBhcnNlLmMgKGpjZl9maWd1cmVfZmlsZV90eXBlKTogTGlrZXdpc2UuCgoyMDAwLTExLTA5ICBKb3NlcGggUy4gTXllcnMgIDxqc20yOEBjYW0uYWMudWs+CgoJKiBwYXJzZS55IChjcmVhdGVfbmV3X3BhcnNlcl9jb250ZXh0KTogVXNlIG1lbXNldCAoKSBpbnN0ZWFkIG9mCgliemVybyAoKS4KCjIwMDAtMTEtMDggIFRvbSBUcm9tZXkgIDx0cm9tZXlAY3lnbnVzLmNvbT4KCgkqIGdqYXZhaC5jIChwcm9jZXNzX2ZpbGUpOiBPbmx5IGluY2x1ZGUgZ2NqL2NuaS5oIHdoZW4gZ2VuZXJhdGluZwoJQ05JIHN0dWJzLgoKMjAwMC0xMS0wNyAgSm9zZXBoIFMuIE15ZXJzICA8anNtMjhAY2FtLmFjLnVrPgoKCSogZXhwci5jIChub3RlX2luc3RydWN0aW9ucyksIGpjZi1pby5jIChmaW5kX2NsYXNzKSwgamNmLXBhcnNlLmMKCShpbml0X291dGdvaW5nX2Nwb29sKSwgbGV4LmMgKGphdmFfaW5pdF9sZXgpOiBVc2UgbWVtc2V0ICgpCglpbnN0ZWFkIG9mIGJ6ZXJvICgpLgoKMjAwMC0xMS0wNSAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgoKCSogbGV4LmggKEpBVkFfRkxPQVRfUkFOR0VfRVJST1IpOiBUeXBvIGZpeC4KCSogbGV4LmMgKElTX1pFUk8pOiBOZXcgZGVmaW5lLgoJKGphdmFfcGVyZm9ybV9hdG9mKTogRXJyb3Igb24gZmxvYXRpbmcgcG9pbnQgdW5kZXJmbG93LgoKMjAwMC0xMS0wNCAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgoKCSogbGV4LmMgKGphdmFfcGFyc2VfZXNjYXBlX3NlcXVlbmNlKTogT25seSByZWFkIHR3byBvY3RhbAoJY2hhcmFjdGVycyBpZiB0aGUgZmlyc3Qgb25lIGlzIGdyZWF0ZXIgdGhhbiAzLiAgRG9uJ3QgYWxsb3cKCSJvY3RhbCIgbnVtYmVycyB0byBpbmNsdWRlIHRoZSBkaWdpdHMgOCBvciA5LgoKMjAwMC0xMS0wNSAgSm9zZXBoIFMuIE15ZXJzICA8anNtMjhAY2FtLmFjLnVrPgoKCSogTWFrZS1sYW5nLmluIChqYXZhLmRpc3RkaXIpOiBSZW1vdmUuCgoyMDAwLTExLTAzICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CgoJKiBNYWtlLWxhbmcuaW4gKGphdmEuZHZpKTogTmV3IHRhcmdldC4KCVBhcnRpYWwgZml4IGZvciBQUiBvdGhlci81NjcuCgoJKiBsYW5nLW9wdGlvbnMuaDogTWVudGlvbiAtV291dC1vZi1kYXRlLgoJKiBqY2YtZHVtcC5jIChmbGFnX25ld2VyKTogTmV3IGdsb2JhbC4KCSogZ2phdmFoLmMgKGZsYWdfbmV3ZXIpOiBOZXcgZ2xvYmFsLgoJKiBqY2YtaW8uYyAoZmluZF9jbGFzcyk6IE9ubHkgd2FybiB3aGVuIGZsYWdfbmV3ZXIgc2V0LgoJKiBsYW5nLmMgKGZsYWdfbmV3ZXIpOiBOZXcgZ2xvYmFsLgoJKHN0cnVjdCBzdHJpbmdfb3B0aW9uKTogTmV3IGRlY2xhcmF0aW9uLgoJKGxhbmdfV19vcHRpb25zKTogTmV3IGdsb2JhbC4KCShwcm9jZXNzX29wdGlvbl93aXRoX25vKTogTmV3IGZ1bmN0aW9uLgoJKGxhbmdfZGVjb2RlX29wdGlvbik6IFVzZSBpdC4KCgkqIGNsYXNzLmMgKGN4eF9rZXl3b3JkX3ApOiBBY2NlcHQga2V5d29yZHMgd2l0aCB0cmFpbGluZyBgJCdzLgoJKiBnamF2YWguYyAoY3h4X2tleXdvcmRfc3Vic3QpOiBIYW5kbGUgYW55IG51bWJlciBvZiB0cmFpbGluZwoJYCQnLgoKCSogbGV4LmggKF9KQVZBX0lERU5USUZJRVJfSUdOT1JBQkxFKTogTmV3IG1hY3JvLgoJKEpBVkFfSURfQ0hBUl9QKTogQWxzbyB0cnkgamF2YV9pZ25vcmFibGVfY29udHJvbF9wLgoJKiBsZXguYyAoamF2YV9yZWFkX3VuaWNvZGUpOiBSZW1vdmVkIGB0ZXJtX2NvbnRleHQnIGFyZ3VtZW50LgoJUmVjb2duaXplIGFueSBudW1iZXIgb2YgYHUnIGluIGBcdScuCgkoamF2YV9yZWFkX3VuaWNvZGVfY29sbGFwc2luZ190ZXJtaW5hdG9ycyk6IE5ldyBmdW5jdGlvbi4KCShqYXZhX2dldF91bmljb2RlKTogVXNlIGl0LgoJKGphdmFfbGluZXRlcm1pbmF0b3IpOiBSZW1vdmVkLgoJKHl5bGV4KTogUHJvZHVjZSBlcnJvciBpZiBjaGFyYWN0ZXIgbGl0ZXJhbCBpcyBuZXdsaW5lIG9yIHNpbmdsZQoJcXVvdGUuICBSZXR1cm4gaWYgZW9mIGZvdW5kIGluIG1pZGRsZSBvZiBgLy8nIGNvbW1lbnQuICBFT0YgaW4KCWAvLycgY29tbWVudCBpcyBvbmx5IGFuIGVycm9yIGlmIHBlZGFudGljLgoJKGphdmFfaWdub3JhYmxlX2NvbnRyb2xfcCk6IE5ldyBmdW5jdGlvbi4KCShqYXZhX3BhcnNlX2VuZF9jb21tZW50KTogUmV0dXJuIGlmIGVvZiBmb3VuZCBpbiBtaWRkbGUgb2YKCWNvbW1lbnQuCglJbmNsdWRlIGZsYWdzLmguCgkqIGp2LXNjYW4uYyAocGVkYW50aWMpOiBOZXcgZ2xvYmFsLgoKMjAwMC0xMC0zMSAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBwYXJzZS55IChvdXRlcl9maWVsZF9hY2Nlc3NfcCk6IEluaGVyaXRlZCBmaWVsZHMgYXJlbid0Cgljb25zaWRlciBvdXRlciBmaWVsZHMuCgkobWF5YmVfYnVpbGRfdGhpc25fYWNjZXNzX21ldGhvZCk6IFVzZQoJUFVSRV9JTk5FUl9DTEFTU19UWVBFX1AgaW5zdGVhZCBvZiBJTk5FUl9DTEFTU19UWVBFX1AuCgkocmVzb2x2ZV9leHByZXNzaW9uX25hbWUpOiBUcmlnZ2VyIGFuIGVycm9yIGlmIGEgc3RhdGljIGZpZWxkCglpcyBiZWluZyBhY2Nlc3NlZCBhcyBhbiBvdXRlciBmaWVsZC4KCjIwMDAtMTAtMjkgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogTWFrZS1sYW5nLmluIChMSUJHQ0pfWklQX0ZJTEUpOiBEZWZpbmUgd2l0aCBgJChwcmVmaXgpJy4KCUZpeGVzIGdjai8zNjUuCgoyMDAwLTEwLTI3ICBaYWNrIFdlaW5iZXJnICA8emFja0B3b2xlcnkuc3RhbmZvcmQuZWR1PgoKCSogTWFrZS1sYW5nLmluOiBNb3ZlIGFsbCBidWlsZCBydWxlcyBoZXJlIGZyb20gTWFrZWZpbGUuaW4sCglhZGFwdCB0byBuZXcgY29udGV4dC4gIFdyYXAgYWxsIHJ1bGVzIHRoYXQgY2hhbmdlIHRoZSBjdXJyZW50CglkaXJlY3RvcnkgaW4gcGFyZW50aGVzZXMuICBFeHB1bmdlIGFsbCByZWZlcmVuY2VzIHRvICQoUCkuCglXaGVuIG9uZSBjb21tYW5kIGRlcGVuZHMgb24gYW5vdGhlciBhbmQgdGhleSdyZSBydW4gYWxsIGF0CglvbmNlLCB1c2UgJiYgdG8gc2VwYXJhdGUgdGhlbSwgbm90IDsuICBBZGQgT1VUUFVUX09QVElPTiB0bwoJYWxsIG9iamVjdC1maWxlIGdlbmVyYXRpb24gcnVsZXMuICBEZWxldGUgb2Jzb2xldGUgdmFyaWFibGVzLgoKCSogTWFrZWZpbGUuaW46IERlbGV0ZS4KCSogY29uZmlnLWxhbmcuaW46IERlbGV0ZSBvdXRwdXRzPSBsaW5lLgoKMjAwMC0xMC0yNSAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBwYXJzZS55IChwYXRjaF9tZXRob2RfaW52b2NhdGlvbik6IE5VTExpZnkgdGhpc19hcmcgd2hlbiBhbHJlYWR5CglpbnNlcnRlZC4KCShtYXliZV91c2VfYWNjZXNzX21ldGhvZCk6IEhhbmRsZSBjYWxsIHRvIG1ldGhvZHMgdW5yZWxhdGVkIHRvIHRoZQoJY3VycmVudCBjbGFzcy4gRml4ZWQgY29tbWVudC4KCUZpeGVzIGdjai8zNjEuCgoyMDAwLTEwLTI0ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCiAgICAgICAqIHBhcnNlLmggKElOTkVSX0VOQ0xPU0lOR19TQ09QRV9DSEVDSyk6IENoZWNrIGluaGVyaXRlZCB0eXBlIGluCiAgICAgICBzY29wZS4KCjIwMDAtMTAtMjQgIFRvbSBUcm9tZXkgIDx0cm9tZXlAY3lnbnVzLmNvbT4KCgkqIGxleC5jIChqYXZhX25ld19sZXhlcik6IEluaXRpYWxpemUgbmV3IGZpZWxkcy4gIFdvcmsgYXJvdW5kCglicm9rZW4gaWNvbnYoKSBpbXBsZW1lbnRhdGlvbnMuCgkoamF2YV9yZWFkX2NoYXIpOiBTd2FwIGJ5dGVzIGlmIHJlcXVpcmVkLiAgVXNlIGZhbGxiYWNrIGRlY29kZXIgaWYKCXJlcXVpcmVkLgoJKGJ5dGVzd2FwX2luaXQsIG5lZWRfYnl0ZXN3YXApOiBOZXcgZ2xvYmFscy4KCShqYXZhX2Rlc3Ryb3lfbGV4ZXIpOiBPbmx5IGNsb3NlIGljb252IGhhbmRsZSBpZiBpdCBpcyBpbiB1c2UuCgkqIGxleC5oIChqYXZhX2xleGVyKTogTmV3IGZpZWxkcyByZWFkX2FueXRoaW5nLCBieXRlX3N3YXAsCgl1c2VfZmFsbGJhY2suCglNYWRlIG91dF9idWZmZXIgdW5zaWduZWQuCgoyMDAwLTEwLTI0ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnkgKHJlZ2lzdGVyX2luY29tcGxldGVfdHlwZSk6IEluY2x1ZGUgSkRFUF9GSUVMRCBhcyBhIGNhc2UKCXdoZXJlIGFuIGVuY2xvc2luZyBjb250ZXh0IGNhbiBiZSBzZXQgb24gdGhlIGpkZXAuCgkoZG9fcmVzb2x2ZV9jbGFzcyk6IEZpeGVkIGlkZW50YXRpb24uCgoyMDAwLTEwLTIxICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBnamF2YWguYyAoTkVFRF9QRUVLX0FUVFJJQlVURSwgTkVFRF9TS0lQX0FUVFJJQlVURSk6IERlZmluZQoKCSogamNmLXJlYWRlci5jIChwZWVrX2F0dHJpYnV0ZSwgc2tpcF9hdHRyaWJ1dGUpOiBPbmx5IGRlZmluZQoJd2hlbiByZXF1ZXN0ZWQuCgoJKiBwYXJzZS5oICh5eWVycm9yKTogSWYgSkMxX0xJVEUsIG1hcmsgd2l0aCBBVFRSSUJVVEVfTk9SRVRVUk4uCgoJKiB2ZXJpZnkuYyAoQ0hFQ0tfUENfSU5fUkFOR0UpOiBDYXN0IHJlc3VsdCBvZiBzdG10LWV4cHIgdG8gdm9pZC4KCjIwMDAtMTAtMTggIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogamNmLXdyaXRlLmMgKE9QMSk6IFVwZGF0ZSBgbGFzdF9iYycuCgkoc3RydWN0IGpjZl9ibG9jayk6IEZpeGVkIGluZGVudGF0aW9uIGFuZCB0eXBvIGluIGNvbW1lbnRzLiAgTmV3CglmaWVsZCBgbGFzdF9iYycuCgkoZ2VuZXJhdGVfYnl0ZWNvZGVfaW5zbnMpOiBJbnNlcnQgYG5vcCcgaWYgYGpzcicgaW1tZWRpYXRlbHkKCWZvbGxvd3MgYG1vbml0b3JlbnRlcicuCgkqIHBhcnNlLnkgKHBhdGNoX3N5bmNocm9uaXplZF9zdGF0ZW1lbnQpOiBOZXcgbG9jYWwgYHRtcCcuIENhbGwKCWBwYXRjaF9zdHJpbmcnLgoJRml4ZXMgZ2NqLzIzMi4KCjIwMDAtMTAtMTYgIFRvbSBUcm9tZXkgIDx0cm9tZXlAY3lnbnVzLmNvbT4KCgkqIGp2c3BlYy5jIChsYW5nX3NwZWNpZmljX2RyaXZlcik6IFJlY29nbml6ZSAtTUYgYW5kIC1NVC4KCSogbGFuZy1zcGVjcy5oOiBBZGRlZCAle01BfSwgJXtNRip9LCAle01UKn0uCgkqIGxhbmctb3B0aW9ucy5oOiBBZGRlZCAtTUEsIC1NVCwgLU1GLi4KCSogbGFuZy5jIChsYW5nX2RlY29kZV9vcHRpb24pOiBSZWNvZ25pemUgLU1BLCAtTVQsIC1NRi4KCShERVBFTkRfVEFSR0VUX1NFVCk6IE5ldyBtYWNyby4KCShERVBFTkRfRklMRV9BTFJFQURZX1NFVCk6IExpa2V3aXNlLgoJKGluaXRfcGFyc2UpOiBIYW5kbGUgbmV3IGZsYWdzLgoJKiBqY2YuaCAoamNmX2RlcGVuZGVuY3lfcHJpbnRfZHVtbWllcyk6IERlY2xhcmUuCgkqIE1ha2UtbGFuZy5pbiAocy1qYXZhKTogQWRkZWQgbWtkZXBzLm8uCgkqIE1ha2VmaWxlLmluIChCQUNLRU5EKTogQWRkZWQgbWtkZXBzLm8uCgkoLi4vZ2NqaCQoZXhlZXh0KSk6IEFkZGVkIG1rZGVwcy5vLgoJKC4uL2pjZi1kdW1wJChleGVleHQpKTogQWRkZWQgbWtkZXBzLm8uCgkqIGpjZi1kZXBlbmQuYzogSW5jbHVkZSBta2RlcHMuaC4KCShzdHJ1Y3QgZW50cnksIGRlcGVuZGVuY2llcywgdGFyZ2V0cywgTUFYX09VVFBVVF9DT0xVTU5TLAoJYWRkX2VudHJ5KTogUmVtb3ZlZC4KCShqY2ZfZGVwZW5kZW5jeV9yZXNldCk6IFJld3JvdGUuCgkoZGVwZW5kZW5jaWVzKTogTmV3IGdsb2JhbC4KCShqY2ZfZGVwZW5kZW5jeV9zZXRfdGFyZ2V0KTogUmV3cm90ZS4KCShqY2ZfZGVwZW5kZW5jeV9hZGRfdGFyZ2V0KTogTGlrZXdpc2UuCgkoamNmX2RlcGVuZGVuY3lfYWRkX2ZpbGUpOiBMaWtld2lzZS4KCShtdW5nZSk6IFJlbW92ZWQuCgkocHJpbnRfZW50cyk6IFJlbW92ZWQuCgkoamNmX2RlcGVuZGVuY3lfd3JpdGUpOiBSZXdyb3RlLgoJKHByaW50X2R1bW1pZXMpOiBOZXcgZ2xvYmFsLgoJKGpjZl9kZXBlbmRlbmN5X3ByaW50X2R1bW1pZXMpOiBOZXcgZnVuY3Rpb24KCShqY2ZfZGVwZW5kZW5jeV93cml0ZSk6IENhbGwgZGVwc19kdW1teV90YXJnZXRzIGlmIHJlcXVpcmVkLgoKMjAwMC0xMC0xOCAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBnamF2YWguYyAoYWRkX2NsYXNzX2RlY2wpOiBSZW1vdmVkIHVudXNlZCB2YXJpYWJsZXMgYHRuYW1lJywKCWB0bGVuJyBhbmQgYG5hbWVfaW5kZXgnLgoJKiBqYXZhLXRyZWUuaCAoQlVJTERfRklMRU5BTUVfSURFTlRJRklFUl9OT0RFKTogTmV3IG1hY3JvLgoJKiBqY2YtcGFyc2UuYyAoamNmX3BhcnNlX3NvdXJjZSk6IFVzZSBpdCBhbmQgc2V0IEVYUFJfV0ZMX0ZJTEVOQU1FCglpbiBgd2ZsX29wZXJhdG9yJyB3aXRoIHZhbHVlLgoJKHl5cGFyc2UpOiBVc2UgQlVJTERfRklMRU5BTUVfSURFTlRJRklFUl9OT0RFLgoJKGpjZl9maWd1cmVfZmlsZV90eXBlKTogRml4ZWQgaWRlbnRhdGlvbi4KCSogbGV4LmMgKGphdmFfZ2V0X2xpbmVfY29sKTogVXNlIEVPRi4gVHVuZWQgYF4nIHBsYWNlbWVudC4KCSogcGFyc2UueSAoYW5hbHl6ZV9jbGluaXRfYm9keSk6IE5ldyBmdW5jdGlvbi4KCShzdGF0aWNfaW5pdGlhbGl6ZXI6KTogUmVzZXQgYGN1cnJlbnRfc3RhdGljX2Jsb2NrJy4KCShqYXZhX3BhcnNlcl9jb250ZXh0X3Jlc3RvcmVfZ2xvYmFsKTogU2V0IEVYUFJfV0ZMX0ZJSUxFTkFNRV9OT0RFIGluCglgd2ZsX29wZXJhdG9yJyB3aXRoIG5ldyB2YWx1ZS4KCShsb29rdXBfY2wpOiBVc2UgRVhQUl9XRkxfRklMRU5BTUUuCgkobWF5YmVfeWFua19jbGluaXQpOiBIYW5kbGUgYm9ndXMgPGNsaW5pdD4gYm9kaWVzLCBjYWxsCglhbmFseXplX2NsaW5pdF9ib2R5LgoJKGJ1aWxkX291dGVyX2ZpZWxkX2FjY2Vzcyk6IEFjY2VzcyB0byB0aGlzJDxuPiBidWlsdCBmcm9tCgljdXJyZW50X2NsYXNzLCBub3QgaXRzIG91dGVyIGNvbnRleHQuCgkoYnVpbGRfYWNjZXNzX3RvX3RoaXNuKTogRml4ZWQgbGVhZGluZyBjb21tZW50LiBUaWRpZWQgdGhpbmdzIHVwLgoJKHJlc29sdmVfcXVhbGlmaWVkX2V4cHJlc3Npb25fbmFtZSk6IEhhbmRsZSBgVC50aGlzJyBhbmQgYFQudGhpcy5mKCknLgoJKHBhdGNoX21ldGhvZF9pbnZvY2F0aW9uKTogVXNlIGBpc19zdGF0aWNfZmxhZycgd2hlbiBhbHJlYWR5Cglpbml0aWFsaXplZC4KCShwYXRjaF9uZXdhcnJheSk6IFJlbW92ZWQgYXNzaWdubWVudCBpbiB0ZXJuYXJ5IG9wZXJhdG9yLgoKMjAwMC0xMC0xNyAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBleGNlcHQuYyAoZnJlZV9laF9yYW5nZXMpOiBEb24ndCBmcmVlIGB3aG9sZV9yYW5nZScuCgoyMDAwLTEwLTE1ICBBbnRob255IEdyZWVuICA8Z3JlZW5AcmVkaGF0LmNvbT4KCgkqIGRlY2wuYyAoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBDYWxsIGluaXRfY2xhc3NfcHJvY2Vzc2luZyBiZWZvcmUKCWFueXRoaW5nIGVsc2UuCgoyMDAwLTEwLTEzICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIGNoZWNrLWluaXQuYyAoY2hlY2tfaW5pdCk6IEZpeGVkIGxlYWRpbmcgY29tbWVudC4gVXNlCglMT0NBTF9GSU5BTF9QLgoJKiBkZWNsLmMgKHB1c2hfanZtX3Nsb3QpOiBVc2UgTUFZQkVfQ1JFQVRFX1ZBUl9MQU5HX0RFQ0xfU1BFQ0lGSUMuCgkoZ2l2ZV9uYW1lX3RvX2xvY2Fscyk6IExpa2V3aXNlLgoJKGxhbmdfbWFya190cmVlKTogSGFuZGxlIEZJRUxEX0RFQ0wuIFJlZ2lzdGVyIGBhbScgYW5kIGB3ZmwnCglmaWVsZHMgaW4gbGFuZ19kZWNsX3Zhci4KCSogamF2YS10cmVlLmggKERFQ0xfRlVOQ1RJT05fU1lOVEhFVElDX0NUT1IsCglERUNMX0ZVTkNUSU9OX0FMTF9GSU5BTF9JTklUSUFMSVpFRCk6IE5ldyBtYWNyb3MuCgkoRklFTERfSU5ORVJfQUNDRVNTKTogUmVtb3ZlZCB1Z2x5IGNhc3QsIG1hY3JvIHJld3JpdHRlbi4KCShGSUVMRF9JTk5FUl9BQ0NFU1NfUCwgREVDTF9GSUVMRF9GSU5BTF9JVUQsIERFQ0xfRklFTERfRklOQUxfTElJQywKCURFQ0xfRklFTERfRklOQUxfSUVSUiwgREVDTF9GSUVMRF9GSU5BTF9XRkwpOiBOZXcgbWFjcm9zLgoJKExPQ0FMX0ZJTkFMKTogUmV3cml0dGVuLgoJKExPQ0FMX0ZJTkFMX1AsIEZJTkFMX1ZBUklBQkxFX1AsIENMQVNTX0ZJTkFMX1ZBUklBQkxFX1AKCU1BWUJFX0NSRUFURV9WQVJfTEFOR19ERUNMX1NQRUNJRklDKTogTmV3IG1hY3Jvcy4KCShzdHJ1Y3QgbGFuZ19kZWNsKTogRml4ZWQgY29tbWVudHMuIEFkZGVkIGBzeW50aGV0aWNfY3RvcicgYW5kCglgaW5pdF9maW5hbCcgZmllbGRzLgoJKHN0cnVjdCBsYW5nX2RlY2xfdmFyKTogRml4ZWQgbGVhZGluZyBjb21tZW50LiBBZGRlZCBgYW0nLCBgd2ZsJywKCWBmaW5hbF91aWQnLCBgZmluYWxfbGlpYycsIGBmaW5hbF9pZXJyJyBhbmQgYGxvY2FsX2ZpbmFsJyBmaWVsZHMuCgkoVFlQRV9IQVNfRklOQUxfVkFSSUFCTEUpOiBOZXcgbWFjcm8uCgkoc3RydWN0IGxhbmdfdHlwZSk6IEFkZGVkIGBhZnYnIGZpZWxkLgoJKiBwYXJzZS55IChjaGVja19zdGF0aWNfZmluYWxfdmFyaWFibGVfYXNzaWdubWVudF9mbGFnKTogTmV3IGZ1bmN0aW9uLgoJKHJlc2V0X3N0YXRpY19maW5hbF92YXJpYWJsZV9hc3NpZ25tZW50X2ZsYWcpOiBMaWtld2lzZS4KCShjaGVja19maW5hbF92YXJpYWJsZV9sb2NhbF9hc3NpZ25tZW50X2ZsYWcpOiBMaWtld2lzZS4KCShyZXNldF9maW5hbF92YXJpYWJsZV9sb2NhbF9hc3NpZ25tZW50X2ZsYWcpOiBMaWtld2lzZS4KCShjaGVja19maW5hbF92YXJpYWJsZV9pbmRpcmVjdF9hc3NpZ25tZW50KTogTGlrZXdpc2UuCgkoY2hlY2tfZmluYWxfdmFyaWFibGVfZ2xvYmFsX2Fzc2lnbm1lbnRfZmxhZyk6IExpa2V3aXNlLgoJKGFkZF9pbm5lcl9jbGFzc19maWVsZHMpOiBVc2UgTE9DQUxfRklOQUxfUC4KCShyZWdpc3Rlcl9maWVsZHMpOiBIYW5kbGUgbG9jYWwgZmluYWxzIGFuZCBmaW5hbCB2YXJpYWJsZXMuCgkoY3JhZnRfY29uc3RydWN0b3IpOiBTZXQgREVDTF9GVU5DVElPTl9TWU5USEVUSUNfQ1RPUi4KCShkZWNsYXJlX2xvY2FsX3ZhcmlhYmxlcyk6IENhbGwgTUFZQkVfQ1JFQVRFX1ZBUl9MQU5HX0RFQ0xfU1BFQ0lGSUMuCgkoc291cmNlX3N0YXJ0X2phdmFfbWV0aG9kKTogQ2FsbCBNQVlCRV9DUkVBVEVfVkFSX0xBTkdfREVDTF9TUEVDSUZJQwoJb24gbG9jYWwgZmluYWxzLgoJKGphdmFfY29tcGxldGVfZXhwYW5kX21ldGhvZHMpOiBMb29wIHRvIHNldAoJVFlQRV9IQVNfRklOQUxfVkFSSUFCTEUuIENhbGwKCWByZXNldF9maW5hbF92YXJpYWJsZV9sb2NhbF9hc3NpZ25tZW50X2ZsYWcnIGFuZAoJYGNoZWNrX2ZpbmFsX3ZhcmlhYmxlX2xvY2FsX2Fzc2lnbm1lbnRfZmxhZycgYWNjb3JkaW5nbHkgYmVmb3JlCglhbmQgYWZ0ZXIgY29uc3RydWN0b3IgZXhwYW5zaW9uLiBDYWxsCglgcmVzZXRfc3RhdGljX2ZpbmFsX3ZhcmlhYmxlX2Fzc2lnbm1lbnRfZmxhZycKCWJlZm9yZSBleHBhbmRpbmcgPGNsaW5pdD4gYW5kIGFmdGVyIGNhbGwKCWBjaGVja19zdGF0aWNfZmluYWxfdmFyaWFibGVfYXNzaWdubWVudF9mbGFnJyBpZiB0aGUKCWN1cnJlbnRfY2xhc3MgaXNuJ3QgYW4gaW50ZXJmYWNlLiBBZnRlciBhbGwgbWV0aG9kcyBoYXZlIGJlZW4KCWV4cGFuZGVkLCBjYWxsIGBjaGVja19maW5hbF92YXJpYWJsZV9nbG9iYWxfYXNzaWdubWVudF9mbGFnJyBhbmQKCWBjaGVja19zdGF0aWNfZmluYWxfdmFyaWFibGVfYXNzaWdubWVudF9mbGFnJyBpZiB0aGUgY3VycmVudCBjbGFzcwoJaXMgYW4gaW50ZXJmYWNlLgoJKG1heWJlX3lhbmtfY2xpbml0KTogRml4ZWQgdHlwbyBpbiBjb21tZW50LgoJKGJ1aWxkX291dGVyX2ZpZWxkX2FjY2Vzc19tZXRob2RzKTogUmVtb3ZlZCBvbGQgc2FuaXR5IGNoZWNrLiBVc2UKCUZJRUxEX0lOTkVSX0FDQ0VTU19QLiBDYWxsIE1BWUJFX0NSRUFURV9WQVJfTEFOR19ERUNMX1NQRUNJRklDLgoJRG9uJ3QgY3JlYXRlIGFjY2VzcyBtZXRob2RzIGZvciBmaW5hbHMuCgkocmVzb2x2ZV9maWVsZF9hY2Nlc3MpOiBVc2UgYENMQVNTX0ZJTkFMX1ZBUklBQkxFX1AnLgoJKGphdmFfY29tcGxldGVfdHJlZSk6IExpa2V3aXNlLiBSZXNldCBERUNMX0ZJRUxEX0ZJTkFMX0lVRCBpZgoJZXhpc3RpbmcgREVDTF9JTklUIGhhcyBiZWVuIHByb2Nlc3NlZC4KCShqYXZhX2NvbXBsZXRlX2xocyk6IExpa2V3aXNlLgoJKGNoZWNrX2ZpbmFsX2Fzc2lnbm1lbnQpOiBGaWx0ZXIgaW5wdXQgb24gYGx2YWx1ZScncyBUUkVFX0NPREUuCglUZXN0IGZvciBDT01QT05FTlRfUkVGIHRvIGdldCB0byB0aGUgRklFTERfREVDTC4gSW1wbGVtZW50ZWQgbmV3Cglsb2dpYy4KCShwYXRjaF9hc3NpZ25tZW50KTogVXNlIExPQ0FMX0ZJTkFMX1AuCgkoZm9sZF9jb25zdGFudF9mb3JfaW5pdCk6IFJlc2V0IERFQ0xfRklFTERfRklOQUxfSVVEIGlmCglERUNMX0lOSVRJQUwgaXMgbnVsbGlmaWVkLgoJRml4ZXMgZ2NqLzE2My4KCjIwMDAtMTAtMTMgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIE1ha2UtbGFuZy5pbiAocGFyc2UuYywgcGFyc2Utc2Nhbi5jKTogQ3JlYXRlIGF0b21pY2FsbHkuCgoJKiBNYWtlZmlsZS5pbiAocGFyc2UuYywgcGFyc2Utc2Nhbi5jKTogTGlrZXdpc2UuCgoyMDAwLTEwLTEyICBNYXJrIE1pdGNoZWxsICA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCSogY2xhc3MuYyAodGVtcG9yYXJ5X29ic3RhY2spOiBSZW1vdmUuCgkobWFrZV9jbGFzcyk6IERvbid0IG1lc3Mgd2l0aCBvYnN0YXNja3MuCgkocHVzaF9jbGFzcyk6IExpa2V3aXNlLgoJKHNldF9zdXBlcl9pbmZvKTogTGlrZXdpc2UuCgkoYWRkX21ldGhvZF8xKTogTGlrZXdpc2UuCgkoYWRkX21ldGhvZCk6IExpa2V3aXNlLgoJKGFkZF9maWVsZCk6IExpa2V3aXNlLgoJKGJ1aWxkX3V0ZjhfcmVmKTogTGlrZXdpc2UuCgkoYnVpbGRfY2xhc3NfcmVmKTogTGlrZXdpc2UuCgkoYnVpbGRfc3RhdGljX2ZpZWxkX3JlZik6IExpa2V3aXNlLgoJKGZpbmlzaF9jbGFzcyk6IExpa2V3aXNlLgoJKHB1c2hfc3VwZXJfZmllbGQpOiBMaWtld2lzZS4KCShsYXlvdXRfY2xhc3MpOiBMaWtld2lzZS4KCShsYXlvdXRfY2xhc3NfbWV0aG9kcyk6IExpa2V3aXNlLgoJKGluaXRfY2xhc3NfcHJvY2Vzc2luZyk6IExpa2V3aXNlLgoJKiBjb25zdGFudHMuYyAoZ2V0X3RhZ19ub2RlKTogTGlrZXdpc2UuCgkoYnVpbGRfY29uc3RhbnRfZGF0YV9yZWYpOiBMaWtld2lzZS4KCSogZGVjbC5jIChnZ2NfcCk6IFJlbW92ZS4KCShjb3B5X2xhbmdfZGVjbCk6IFVzZSBnZ2NfYWxsb2MuCgkoY29tcGxldGVfc3RhcnRfamF2YV9tZXRob2QpOiBEb24ndCBtZXNzIHdpdGggb2JzdGFja3MuCgkoc3RhcnRfamF2YV9tZXRob2QpOiBMaWtld2lzZS4KCShlbmRfamF2YV9tZXRob2QpOiBMaWtld2lzZS4KCSogZXhjZXB0LmMgKGxpbmtfaGFuZGxlcik6IFVzZSB4bWFsbG9jLgoJKGZyZWVfZWhfcmFuZ2VzKTogTmV3IGZ1bmN0aW9uLgoJKG1ldGhvZF9pbml0X2V4Y2VwdGlvbnMpOiBVc2UgaXQuCgkoYWRkX2hhbmRsZXIpOiBVc2UgeG1hbGxvYy4KCShleHBhbmRfc3RhcnRfamF2YV9oYW5kbGVyKTogRG9uJ3QgbWVzcyB3aXRoIG9ic3RhY2tzLgoJKHByZXBhcmVfZWhfdGFibGVfdHlwZSk6IExpa2V3aXNlLgoJKGV4cGFuZF9lbmRfamF2YV9oYW5kbGVyKTogTGlrZXdpc2UuCgkqIGV4cHIuYyAocHVzaF92YWx1ZSk6IExpa2V3aXNlLgoJKGNyZWF0ZV9sYWJlbF9kZWNsKTogTGlrZXdpc2UuCgkoYnVpbGRfam5pX3N0dWIpOiBMaWtld2lzZS4KCShqYXZhX2xhbmdfZXhwYW5kX2V4cHIpOiBMaWtld2lzZS4KCShub3RlX2luc3RydWN0aW9ucyk6IFVzZSB4cmVhbGxvYy4KCShqYXZhX3B1c2hfY29uc3RhbnRfZnJvbV9wb29sKTogRG9uJ3QgbWVzcyB3aXRoIG9ic3RhY2tzLgoJKHByb2Nlc3NfanZtX2luc3RydWN0aW9uKTogTGlrZXdpc2UuCgkqIGphdmEtdHJlZS5oIChjeWNsaWNfaW5oZXJpdGFuY2VfcmVwb3J0KTogUmVtb3ZlIGR1cGxpY2F0ZQoJZGVjbGFyYXRpb24uCgkqIGpjZi1wYXJzZS5jIChnZXRfY29uc3RhbnQpOiBEb24ndCBtZXNzIHdpdGggb2JzdGFja3MuCgkocmVhZF9jbGFzcyk6IExpa2V3aXNlLgoJKGpjZl9wYXJzZSk6IExpa2V3aXNlLgoJKiBsZXguYyAoZXhwcmVzc2lvbl9vYnN0YWNrKTogUmVtb3ZlLgoJKGphdmFfbGV4KTogRG9uJ3QgdXNlIG9ic3RhY2tfZnJlZS4KCSogcGFyc2UuaCAoZXhpdF9qYXZhX2NvbXBsZXRlX2NsYXNzKTogRG9uJ3QgbWVzcyB3aXRoIG9ic3RhY2tzLgoJKE1BTkdMRV9PVVRFUl9MT0NBTF9WQVJJQUJMRV9OQU1FKTogQWRqdXN0LgoJKE1BTkdMRV9BTElBU19JTklUSUFMSVpFUl9QQVJBTUVURVJfTkFNRV9JRCk6IExpa2V3aXNlLgoJKE1BTkdMRV9BTElBU19JTklUSUFMSVpFUl9QQVJBTUVURVJfTkFNRV9TVFJJTkcpOiBMaWtld2lzZS4KCSogcGFyc2UueSAoZ2FvbCk6IEFkZCBtb3JlIEdDIHJvb3RzLgoJKGFkZF9pbm5lcl9jbGFzc19maWVsZHMpOiBBZGp1c3QgY2FsbHMgdG8gTUFOR0xFXyogbWFjcm9zLgoJKGxvb2t1cF9maWVsZF93cmFwcGVyKTogTGlrZXdpc2UuCgkob2J0YWluX2luY29tcGxldGVfdHlwZSk6IERvbid0IG1lc3Mgd2l0aCBvYnN0YWNrcy4KCShidWlsZF9hbGlhc19pbml0aWFsaXplcl9wYXJhbWV0ZXJfbGlzdCk6IEFkanVzdCBjYWxscyB0byBNQU5HTEVfKgoJbWFjcm9zLgoJKGNyYWZ0X2NvbnN0cnVjdG9yKTogRG9uJ3QgbWVzcyB3aXRoIG9ic3RhY2tzLgoJKHNhZmVfbGF5b3V0X2NsYXNzKTogTGlrZXdpc2UuCgkoamF2YV9jb21wbGV0ZV9jbGFzcyk6IExpa2V3aXNlLgoJKHNvdXJjZV9lbmRfamF2YV9tZXRob2QpOiBMaWtld2lzZS4KCShidWlsZF9vdXRlcl9maWVsZF9hY2Nlc3NfbWV0aG9kcyk6IExpa2V3aXNlLgoJKGJ1aWxkX291dGVyX21ldGhvZF9hY2Nlc3NfbWV0aG9kKTogTGlrZXdpc2UuCgkobWF5YmVfYnVpbGRfdGhpc25fYWNjZXNzX21ldGhvZCk6IExpa2V3aXNlLgoJKGJ1aWxkX2RvdF9jbGFzc19tZXRob2RfaW52b2NhdGlvbik6IExpa2V3aXNlLgoJKGphdmFfY29tcGxldGVfdHJlZSk6IExpa2V3aXNlLgoJKGphdmFfY29tcGxldGVfbGhzKTogTGlrZXdpc2UuCgkoZG9fbWVyZ2Vfc3RyaW5nX2NzdGUpOiBMaWtld2lzZS4KCShwYXRjaF9zdHJpbmdfY3N0KTogTGlrZXdpc2UuCgkoYXJyYXlfY29uc3RydWN0b3JfY2hlY2tfZW50cnkpOiBMaWtld2lzZS4KCSogdHlwZWNrLmMgKGJ1aWxkX2phdmFfYXJyYXlfdHlwZSk6IExpa2V3aXNlLgoJKHBhcnNlX3NpZ25hdHVyZV9zdHJpbmcpOiBMaWtld2lzZS4KCShidWlsZF9qYXZhX3NpZ25hdHVyZSk6IExpa2V3aXNlLgoKMjAwMC0xMC0xMiAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgoKCUZpeCBmb3IgUFIgZ2NqLzM1NjoKCSogZ2phdmFoLmMgKGFkZF9jbGFzc19kZWNsKTogRG9uJ3Qgc3BlY2lhbC1jYXNlIGlubmVyIGNsYXNzZXMuCgkoYWRkX25hbWVsZXQpOiBMaWtld2lzZS4KCjIwMDAtMTAtMTEgIFJvZG5leSBCcm93biAgPFJvZG5leUJyb3duQG15bmQuY29tPgoKCSogamF2YS10cmVlLmg6IENvbnN0aWZ5IGN1cnJlbnRfZW5jb2RpbmcuCgkqIGxhbmcuYzogQ29uc3RpZnkgY3VycmVudF9lbmNvZGluZy4KCjIwMDAtMTAtMTAgIEplZmYgU3R1cm0gIDxqZWZmLnN0dXJtQGFwcG5ldC5jb20+CgoJKiBqdmdlbm1haW4uYyAoY2xhc3NfbWFuZ2xpbmdfc3VmZml4KTogT21pdCBgLicuCgkobWFpbik6IFVzZSBgJCcgd2hlbiBOT19ET0xMQVJfSU5fTEFCRUwgaXMgbm90IHNldCwgb3RoZXJ3aXNlIGAuJy4KCjIwMDAtMTAtMTAgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogZXhwci5jIChqYXZhX2xhbmdfZXhwYW5kX2V4cHIpOiBSZWluc3RhbGwgMTk5OS0wOC0xNCBBbnRob255J3MKCXBhdGNoLiBGaXhlcyBnY2ovMzQwLgoKMjAwMC0xMC0xMCAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgoKCSogbGV4LmMgKGphdmFfbmV3X2xleGVyKTogSW5pdGlhbGl6ZSBvdXRfZmlyc3QgYW5kIG91dF9sYXN0CglmaWVsZHMuCgkqIGxleC5oIChqYXZhX2xleGVyKTogQWRkZWQgb3V0X2J1ZmZlciwgb3V0X2ZpcnN0LCBvdXRfbGFzdC4KCjIwMDAtMTAtMDkgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogcGFyc2UueSAocG9wX2N1cnJlbnRfb3NiKTogTmV3IGZ1bmN0aW9uLgoJKGFycmF5X3R5cGU6KTogVXNlIGBkaW1zOicsIGNoYW5nZWQgYWN0aW9ucwoJYWNjb3JkaW5nbHkuIFN1Z2dlc3RlZCBieSBBbnRob255IEdyZWVuLgoJKGFycmF5X2NyZWF0aW9uX2V4cHJlc3Npb246KTogVXNlZCBwb3BfY3VycmVudF9vc2IuCgkoY2FzdF9leHByZXNzaW9uOik6IExpa2V3aXNlLgoJKHNlYXJjaF9hcHBsaWNhYmxlX21ldGhvZF9saXN0KTogRml4ZWQgaW5kZW50YXRpb24uCgoyMDAwLTEwLTA4ICBBbnRob255IEdyZWVuICA8Z3JlZW5AcmVkaGF0LmNvbT4KCgkqIHBhcnNlLnkgKGFycmF5X3R5cGVfbGl0ZXJhbCk6IFJlbW92ZSBwcm9kdWN0aW9uLgoJKHR5cGVfbGl0ZXJhbHMpOiBSZWZlciB0byBhcnJheV90eXBlLCBub3QgYXJyYXlfdHlwZV9saXRlcmFsLgoKMjAwMC0xMC0wNyAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJUGF0Y2ggY29udHJpYnV0ZWQgYnkgQ29yZXkgTWlueWFyZC4KCSogZGVjbC5jIChjaGVja19sb2NhbF9uYW1lZF92YXJpYWJsZSk6IE5ldyBmdW5jdGlvbi4KCSh0cmVlIGNoZWNrX2xvY2FsX3VubmFtZWRfdmFyaWFibGUpOiBMaWtld2lzZS4KCShmaW5kX2xvY2FsX3ZhcmlhYmxlKTogU3BsaXR0ZWQuIENhbGwgY2hlY2tfbG9jYWxfe3VufW5hbWVkX3ZhcmlhYmxlLgoKMjAwMC0xMC0wNyAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQHJlZGhhdC5jb20+CgoJKiBjbGFzcy5jIChsYXlvdXRfY2xhc3MpOiBIYW5kbGUgY2FzZSB3aGVyZSBzdXBlcmNsYXNzIGNhbid0IGJlCglsYXllZCBvdXQgeWV0LgoKMjAwMC0xMC0wNyAgSm9zZXBoIFMuIE15ZXJzICA8anNtMjhAY2FtLmFjLnVrPgoKCSogTWFrZWZpbGUuaW4gKGtleXdvcmQuaCk6IFJlZmVyIHRvIEdOVSBGVFAgc2l0ZSBmb3IgdXBkYXRlZAoJZ3BlcmYuCgoyMDAwLTEwLTA1ICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CgoJKiBqdnNwZWMuYyAoanZnZW5tYWluX3NwZWMpOiBBZGRlZCBgLWZkb2xsYXJzLWluLWlkZW50aWZpZXJzJy4KCSoganZnZW5tYWluLmMgKGNsYXNzX21hbmdsaW5nX3ByZWZpeCk6IFJlbW92ZWQuCgkoY2xhc3NfbWFuZ2xpbmdfc3VmZml4KTogTmV3IGdsb2JhbC4KCShtYWluKTogVXNlIGl0LgoJKiBnamF2YWguYyAoY3h4X2tleXdvcmRfc3Vic3QpOiBNYW5nbGUgQysrIGtleXdvcmRzIGJ5IGFwcGVuZGluZwoJYCQnLgoJKHByaW50X21ldGhvZF9pbmZvKTogSGFuZGxlIG92ZXJyaWRlcyBmb3Igc3RhdGljIGFuZCBmaW5hbAoJbWV0aG9kcy4KCShwcm9jZXNzX2ZpbGUpOiBHZW5lcmF0ZSBkZWNsYXJhdGlvbiBmb3IgY2xhc3Mgb2JqZWN0IGZpZWxkLgoJKiBjbGFzcy5jIChjeHhfa2V5d29yZHMpOiBOZXcgYXJyYXkuCgkodXRmOF9jbXApOiBOZXcgZnVuY3Rpb24uCgkoY3h4X2tleXdvcmRfcCk6IE5ldyBmdW5jdGlvbi4KCShsYXlvdXRfY2xhc3NfbWV0aG9kKTogTWFuZ2xlIEMrKyBrZXl3b3JkcyBieSBhcHBlbmRpbmcgYCQnLgoJKG1hbmdsZV9maWVsZCk6IE5ldyBmdW5jdGlvbi4KCShtYW5nbGVfY2xhc3NfZmllbGQpOiBVc2UgbWFuZ2xlX2ZpZWxkLiAgTWFuZ2xlIGNsYXNzIG5hbWUgYXMKCWBjbGFzcyQnLgoJKG1hbmdsZV9zdGF0aWNfZmllbGQpOiBVc2UgbWFuZ2xlX2ZpZWxkLgoKVHVlIE9jdCAgMyAxMzo0NDozNyAyMDAwICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAoZmluZF9sb2NhbF92YXJpYWJsZSk6IFJlbW92ZWQgdW5jZXNzYXJ5IHR5cGUgY2hlY2sgYW5kCglmaXhlZCByYW5nZSBjaGVjayB0eXBvLiBGcm9tIENvcmV5IE1pbnlhcmQuCgpXZWQgU2VwIDEzIDE2OjA2OjUyIDIwMDAgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogZGVjbC5jIChnaXZlX25hbWVfdG9fbG9jYWxzKTogTmV3IGxvY2FsIGBjb2RlX29mZnNldCcuIENhbGwKCWBtYXliZV9hZGp1c3Rfc3RhcnRfcGMnLgoJKiBleHByLmMgKG5vdGVfaW5zdHJ1Y3Rpb25zKTogTmV3IGZ1bmN0aW9uLgoJKGV4cGFuZF9ieXRlX2NvZGUpOiBEb24ndCBjb2xsZWN0IGluc24gc3RhcnRzIGhlcmUuCgkocGVla19vcGNvZGVfYXRfcGMpOiBOZXcgZnVuY3Rpb24uCgkobWF5YmVfYWRqdXN0X3N0YXJ0X3BjKTogTGlrZXdpc2UuCgkqIGphdmEtdHJlZS5oIChtYXliZV9hZGp1c3Rfc3RhcnRfcGMpOiBEZWNsYXJlLgoJKG5vdGVfaW5zdHJ1Y3Rpb25zKTogTGlrZXdpc2UuCgkqIGpjZi1wYXJzZS5jIChwYXJzZV9jbGFzc19maWxlKTogQ2FsbCBgbm90ZV9pbnN0cnVjdGlvbnMnLgoKV2VkIFNlcCAxMyAxMTo1MDozNSAyMDAwICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnkgKGZpZWxkX2FjY2VzczopOiBGaXhlZCBpbmRlbnRhdGlvbi4KCShxdWFsaWZ5X2FtYmlndW91c19uYW1lKTogUHJvcGVybHkgcXVhbGlmeSBgdGhpcy5hW2JdLmMnLgoKMjAwMC0wOS0wNyAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgoKCUZpeCBmb3IgUFIgZ2NqLzMwNzoKCSogcGFyc2UueSAocGF0Y2hfYmlub3ApOiBVc2UgSk5VTUVSSUNfVFlQRV9QLCBub3QKCUpQUklNSVRJVkVfVFlQRV9QLCBmb3IgYXJpdGhtZXRpYyBvcGVyYXRvcnMuCgkocGF0Y2hfbWV0aG9kX2ludm9jYXRpb24pOiBJbmRlbnRhdGlvbiBmaXguCgkodHJ5X2J1aWx0aW5fYXNzaWduY29udik6IEhhbmRsZSBib29sZWFuIHNwZWNpYWxseS4gIEZpeGVkIHR5cG8uCgkodmFsaWRfYnVpbHRpbl9hc3NpZ25jb252X2lkZW50aXR5X3dpZGVuaW5nX3ApOiBIYW5kbGUgYm9vbGVhbi4KCShkb191bmFyeV9udW1lcmljX3Byb21vdGlvbik6IENsZWFuZWQgdXAgY29kZS4KCSh2YWxpZF9jYXN0X3RvX3ApOiBIYW5kbGUgYm9vbGVhbiBjb3JyZWN0bHkuCgoyMDAwLTA5LTI3ICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CgoJKiBsZXguYyAoamF2YV9yZWFkX3VuaWNvZGUpOiBSZXNldCBic19jb3VudCB3aGVuIGZpbmlzaGVkIHdpdGgKCWBcdScgc2VxdWVuY2UuCgoyMDAwLTEwLTAxICBNYXJrIE1pdGNoZWxsICA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCUNvbnZlcnQgdG8gR0MuCgkqIE1ha2UtbGFuZy5pbiAocy1qYXZhKTogRG9uJ3QgZGVwZW5kIG9uIGdnYy1jYWxsYmFja3Muby4KCSogTWFrZWZpbGUuaW4gKEJBQ0tFTkQpOiBEb24ndCBpbmNsdWRlIGdnYy1jYWxsYmFja3Muby4KCSh0eXBlY2subyk6IERlcGVuZCBvbiBnZ2MuaC4KCSogY2xhc3MuYyAoYWRkX21ldGhvZF8xKTogVXNlIEdDIGZ1bmN0aW9ucyBmb3IgYWxsb2NhdGlvbi4KCShpbml0X2NsYXNzX3Byb2Nlc3NpbmcpOiBSZWdpc3RlciByb290cy4KCSogZGVjbC5jIChnZ2NfcCk6IFNldCB0byAxLgoJKHBlbmRpbmdfbG9jYWxfZGVjbHMpOiBNYWtlIGl0IHN0YXRpYy4KCShwdXNoX2p2bV9zbG90KTogVXNlIEdDIGZ1bmN0aW9ucyBmb3IgYWxsb2NhdGlvbi4KCShpbml0X2RlY2xfcHJvY2Vzc2luZyk6IFJlZ2lzdGVyIHJvb3RzLgoJKGdpdmVfbmFtZV90b19sb2NhbHMpOiBVc2UgR0MgZnVuY3Rpb25zIGZvciBhbGxvY2F0aW9uLgoJKGxhbmdfbWFya190cmVlKTogTmV3IGZ1bmN0aW9uLgoJKiBqYXZhLXRyZWUuaCAoTUFZQkVfQ1JFQVRFX1RZUEVfVFlQRV9MQU5HX1NQRUNJRklDKTogVXNlIEdDCglmdW5jdGlvbnMgZm9yIGFsbG9jYXRpb24uCgkqIGpjZi1wYXJzZS5jIChqY2ZfcGFyc2Vfc291cmNlKTogVXNlIGdnY19zdHJkdXAuCgkqIGxleC5jIChqYXZhX2xleCk6IFVzZSBidWlsZF9zdHJpbmcsIHJhdGhlciB0aGFuIHJlcGxpY2F0aW5nIGl0CglpbmxpbmUuCgkqIHBhcnNlLnkgKGdvYWwpOiBBZGQgbW9yZSByb290cy4KCShtYXJrX3BhcnNlcl9jdHh0KTogTmV3IGZ1bmN0aW9uLgoJKiB0eXBlY2suYzogSW5jbHVkZSBnZ2MuaC4KCjIwMDAtMDktMjkgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogcGFyc2UueSAobWF5YmVfeWFua19jbGluaXQpOiBBbHNvIGtlZXAgPGNsaW5pdD4gaWYgaXRzIGJvZHkKCWNvbnRhaW5zIHNvbWV0aGluZyBlbHNlIHRoYW4gTU9ESUZZX0VYUFIuCgoyMDAwLTA5LTIzICBNYXJrIE1pdGNoZWxsICA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCSogTWFrZS1sYW5nLmluIChKQVZBX1NSQ1MpOiBJbmNsdWRlIGphdmEtdHJlZS5oLgoJKiBNYWtlZmlsZS5pbiAocGFyc2Uubyk6IERlcGVuZCBvbiBnZ2MuaC4KCShjbGFzcy5vKTogTGlrZXdpc2UuCgkoY29uc3RhbnRzLm8pOiBMaWtld2lzZS4KCShkZWNsLm8pOiBMaWtld2lzZS4KCShleHByLm8pOiBMaWtld2lzZS4KCShqY2YtcGFyc2Uubyk6IExpa2V3aXNlLgoJKGpjZi13cml0ZS5vKTogTGlrZXdpc2UuCgkobWFuZ2xlLm8pOiBMaWtld2lzZS4KCSogY2xhc3MuYzogSW5jbHVkZSBnZ2MuaC4KCShidWlsZF9zdGF0aWNfZmllbGRfcmVmKTogUmVnaXN0ZXIgR0Mgcm9vdHMuCgkobGF5b3V0X2NsYXNzKTogTGlrZXdpc2UuCgkoaW5pdF9jbGFzc19wcm9jZXNzaW5nKTogTGlrZXdpc2UuCgkqIGNvbnN0YW50cy5jOiBJbmNsdWRlIGdnYy5oLgoJKGN1cnJlbnRfY29uc3RhbnRfcG9vbF9kYXRhX3JlZik6IFJlbW92ZS4KCSh0YWdfbm9kZXMpOiBNb3ZlIGl0IHRvIC4uLgoJKGdldF90YWdfbm9kZSk6IC4uLiBoZXJlLiAgUmVnaXN0ZXIgR0Mgcm9vdHMuCgkqIGRlY2wuYzogSW5jbHVkZSBnZ2MuaC4gIFJlbW92ZSBtYW55IGdsb2JhbCB0cmVlIGRlZmluaXRpb25zLgoJKHRocm93X25vZGUpOiBEZWZpbmUuCgkoamF2YV9nbG9iYWxfdHJlZXMpOiBMaWtld2lzZS4KCShwcmVkZWZfZmlsZW5hbWVzKTogTWFrZSB0aGUgc2l6ZSBhIGNvbnN0YW50LgoJKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogQWRqdXN0IGFjY29yZGluZ2x5LgoJKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogQ2FsbCBpbml0X2pjZl9wYXJzZS4gIFJlZ2lzdGVyIEdDIHJvb3RzLgoJKiBleHByLmM6IEluY2x1ZGUgZ2djLmguCgkoaW5pdF9leHByX3Byb2Nlc3NpbmcpOiBSZWdpc3RlciBHQyByb290cy4KCShidWlsZF9pbnZva2VpbnRlcmZhY2UpOiBMaWtld2lzZS4KCSogamF2YS10cmVlLmg6IFJlcGxhY2UgZXh0ZXJuIHRyZWUgZGVjbGFyYXRpb25zIHdpdGggbWFjcm9zLgoJKGphdmFfZ2xvYmFsX3RyZWVzKTogTmV3IHZhcmlhYmxlLgoJKGphdmFfdHJlZV9pbmRleCk6IE5ldyBlbnVtZXJhdGlvbi4KCShpbml0X2pjZl9wYXJzZSk6IERlY2xhcmUuCgkqIGpjZi1wYXJzZS5jOiBJbmNsdWRlIGdnYy5oLgoJKGN1cnJlbnRfY2xhc3MpOiBSZW1vdmUgZGVjbGFyYXRpb24uCgkobWFpbl9jbGFzcyk6IExpa2V3aXNlLgoJKGFsbF9jbGFzc19saXN0KTogTGlrZXdpc2UuCgkocHJlZGVmaW5lZF9maWxlbmFtZV9wKTogQWRqdXN0IGZvciBjb25zdGFudCBzaXplIG9mCglwcmVkZWZfZmlsZW5hbWVzLgoJKGluaXRfamNmX3BhcnNlKTogTmV3IGZ1bmN0aW9uLgoJKiBqY2Ytd3JpdGUuYzogSW5jbHVkZSBnZ2MuaC4KCShnZW5lcmF0ZV9jbGFzc2ZpbGUpOiBSZWdpc3RlciBHQyByb290cy4KCShhcHBlbmRfc3ludGhldGljX2F0dHJpYnV0ZSk6IExpa2V3aXNlLgoJKGFwcGVuZF9pbm5lcmNsYXNzX2F0dHJpYnV0ZV9lbnRyeSk6IExpa2V3aXNlLgoJKiBsYW5nLmM6IEluY2x1ZGUgZ2djLmguCgkobGFuZ19wcmludF9lcnJvcik6IFJlZ2lzdGVyIEdDIHJvb3RzLgoJKiBwYXJzZS5oIChzdHJ1Y3QgcGFyc2VyX2N0eHQpOiBSZW5hbWUgZmllbGRzIHRvIGF2b2lkIGNvbmZsaWN0cwoJd2l0aCBtYWNyb3MuCgkqIHBhcnNlLnk6IEluY2x1ZGUgZ2djLmguCgkod2ZsX29wZXJhdG9yKTogUmVtb3ZlLgoJKGdvYWwpOiBSZWdpc3RlciBHQyByb290cy4KCShqYXZhX3BvcF9wYXJzZXJfY29udGV4dCk6IEFkanVzdCBmb3IgbmV3IGZpZWxkIG5hbWVzLgoJKGphdmFfcGFyc2VyX2NvbnRleHRfc2F2ZV9nbG9iYWwpOiBMaWtld3NlLgoJKGphdmFfcGFyc2VyX2NvbnRleHRfcmVzdG9yZV9nbG9iYWwpOiBMaWtld2lzZS4KCShqYXZhX3BhcnNlcl9jb250ZXh0X3N1c3BlbmQpOiBMaWtld2lzZS4KCShqYXZhX3BhcnNlcl9jb250ZXh0X3Jlc3VtZSk6IExpa2V3aXNlLgoJKHZlcmlmeV9jb25zdHJ1Y3Rvcl9jaXJjdWxhcml0eSk6IFJlZ2lzdGVyIEdDIHJvb3RzLgoJKGxvb2t1cF9jbCk6IExpa2V3aXNlLgoJKGphdmFfcmVvcmRlcl9maWVsZHMpOiBMaWtld2lzZS4KCShidWlsZF9jdXJyZW50X3RoaXMpOiBMaWtld2lzZS4KCShjbGFzc19pbl9jdXJyZW50X3BhY2thZ2UpOiBMaWtld2lzZS4KCShhcmd1bWVudF90eXBlc19jb252ZXJ0aWJsZSk6IExpa2V3aXNlLgoJKHBhdGNoX2Nhc3QpOiBSZW5hbWUgd2ZsX29wIHBhcmFtZXRlciB0byBhdm9pZCBtYWNybyBjb25mbGljdHMuCgoyMDAwLTA5LTE0ICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CgoJKiBsZXguaDogVXNlIEhBVkVfSUNPTlZfSCwgbm90IEhBVkVfSUNPTlYuCgoyMDAwLTA5LTEzICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CgoJKiBqY2YtcGFyc2UuYzogSW5jbHVkZSA8bG9jYWxlLmg+LgoJKiBqdi1zY2FuLmM6IEluY2x1ZGUgPGxvY2FsZS5oPi4KCjIwMDAtMDktMTIgIFRvbSBUcm9tZXkgIDx0cm9tZXlAY3lnbnVzLmNvbT4KCgkqIGV4cHIuYyAocG9wX3R5cGVfMCk6IFJldHVybiBgT2JqZWN0JyBpZiB0cnlpbmcgdG8gbWVyZ2UgdHdvCglpbnRlcmZhY2UgdHlwZXMuCgkqIHZlcmlmeS5jIChtZXJnZV90eXBlcyk6IERvbid0IHJldHVybiBgVFlQRV9VTktOT1dOJyBmb3IKCWludGVyZmFjZSB0eXBlczsgYE9iamVjdCcgaXMgYWx3YXlzIGEgdmFsaWQgc3VwZXJ0eXBlLgoKMjAwMC0wOS0xMiAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgoKCUZpeCBmb3IgUFIgZ2NqLzMzOgoJKiBqdi1zY2FuLmMgKGhlbHApOiBEb2N1bWVudCAtLWVuY29kaW5nLgoJKG9wdGlvbnMpOiBBZGRlZCBgZW5jb2RpbmcnIGVudHJ5LgoJKE9QVF9FTkNPRElORyk6IE5ldyBkZWZpbmUuCgkobWFpbik6IEhhbmRsZSAtLWVuY29kaW5nLgoJSW5jbHVkZSA8bGFuZ2luZm8uaD4gaWYgbmxfbGFuZ2luZm8gZXhpc3RzLgoJKiBsYW5nLW9wdGlvbnMuaDogRG9jdW1lbnQgLS1jbGFzc3BhdGgsIC0tQ0xBU1NQQVRILCAtLW1haW4sIGFuZAoJLS1lbmNvZGluZy4KCSogamNmLXBhcnNlLmMgSW5jbHVkZSA8bGFuZ2luZm8uaD4gaWYgd2UgaGF2ZSBubF9sYW5naW5mby4KCShwYXJzZV9zb3VyY2VfZmlsZSk6IENvcnJlY3RseSBjYWxsIGphdmFfaW5pdF9sZXguICBBZGRlZCBgZmlucHV0JwoJYXJndW1lbnQuICBVc2UgbmxfbGFuZ2luZm8gdG8gZGV0ZXJtaW5lIGRlZmF1bHQgZW5jb2RpbmcuCgkqIGphdmEtdHJlZS5oIChjdXJyZW50X2VuY29kaW5nKTogRGVjbGFyZS4KCSogcGFyc2UueSAoamF2YV9wYXJzZXJfY29udGV4dF9yZXN0b3JlX2dsb2JhbCk6IERvbid0IHJlc3RvcmUKCWBmaW5wdXQnLgoJKGphdmFfcGFyc2VyX2NvbnRleHRfc2F2ZV9nbG9iYWwpOiBEb24ndCBzZXQgYGZpbnB1dCcgZmllbGQuCgkoamF2YV9wb3BfcGFyc2VyX2NvbnRleHQpOiBEb24ndCByZXN0b3JlIGBmaW5wdXQnLiAgRnJlZSBvbGQgbGV4ZXIKCWlmIHJlcXVpcmVkLgoJKiBsYW5nLmMgKGN1cnJlbnRfZW5jb2RpbmcpOiBOZXcgZ2xvYmFsLgoJKGxhbmdfZGVjb2RlX29wdGlvbik6IFJlY29nbml6ZSBgLWZlbmNvZGluZz0nLgoJKGZpbmlzaF9wYXJzZSk6IERvbid0IGNsb3NlIGZpbnB1dC4KCSogcGFyc2UuaCAoc3RydWN0IHBhcnNlcl9jdHh0KTogUmVtb3ZlZCBgZmlucHV0JyBhbmQKCWB1bmdldF91dGY4X3ZhbHVlJyBmaWVsZHMuICBBZGRlZCBgbGV4ZXInIGZpZWxkLgoJKGphdmFfaW5pdF9sZXgpOiBGaXhlZCBkZWNsYXJhdGlvbi4KCSogbGV4LmMgKGphdmFfbmV3X2xleGVyKTogTmV3IGZ1bmN0aW9uLgoJKGphdmFfZGVzdHJveV9sZXhlcik6IExpa2V3aXNlLgoJKGphdmFfcmVhZF9jaGFyKTogQWRkZWQgYGxleCcgYXJndW1lbnQuICBIYW5kbGUgaWNvbnYgY2FzZS4KCShqYXZhX3JlYWRfdW5pY29kZSk6IEFkZGVkIGBsZXgnIGFyZ3VtZW50LiAgQ291bnQgYmFja3NsYXNoZXMgaW4KCWxleGVyIHN0cnVjdHVyZS4KCShqYXZhX2luaXRfbGV4KTogQWRkZWQgYGZpbnB1dCcgYW5kIGBlbmNvZGluZycgYXJndW1lbnRzLiAgU2V0CglgbGV4ZXInIGZpZWxkIGluIGN0eHAuCgkoQkFEX1VURjhfVkFMVUUpOiBSZW1vdmVkLgoJKGphdmFfbGV4KTogSGFuZGxlIHNlZWluZyBVRU9GIGluIHRoZSBtaWRkbGUgb2YgYSBzdHJpbmcgbGl0ZXJhbC4KCSogbGV4Lmg6IEluY2x1ZGUgPGljb252Lmg+IGlmIEhBVkVfSUNPTlYgZGVmaW5lZC4KCShqYXZhX2xleGVyKTogTmV3IHN0cnVjdHVyZS4KCShVTkdFVEMpOiBSZW1vdmVkLgoJKEdFVEMpOiBSZW1vdmVkLgoJKERFRkFVTFRfRU5DT0RJTkcpOiBOZXcgZGVmaW5lLgoJKGphdmFfZGVzdHJveV9sZXhlcik6IERlY2xhcmUuCgoyMDAwLTA5LTEyICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CgoJRml4IGZvciBQUiBnY2ovMzQzOgoJKiBsZXguYyAoamF2YV9pbml0X2xleCk6IEluaXRpYWxpemUgamF2YV9pb19zZXJpYWxpemFibGUuCgkqIHBhcnNlLnkgKGphdmFfaW9fc2VyaWFsaXphYmxlKTogTmV3IGdsb2JhbC4KCSh2YWxpZF9yZWZfYXNzaWduY29udl9jYXN0X3ApOiBBbiBhcnJheSBjYW4gYmUgY2FzdCB0bwoJc2VyaWFsaXphYmxlLgoKMjAwMC0wOS0xMCAgWmFjayBXZWluYmVyZyAgPHphY2tAd29sZXJ5LmN1bWIub3JnPgoKCSogZGVjbC5jLCBleHByLmM6IEluY2x1ZGUgZGVmYXVsdHMuaCBpZiBub3QgYWxyZWFkeSBpbmNsdWRlZC4KCURvbid0IGRlZmluZSB0aGUgKl9UWVBFX1NJWkUgbWFjcm9zLgoKMjAwMC0wOS0wOSAgR2VvZmZyZXkgS2VhdGluZyAgPGdlb2Zma0BjeWdudXMuY29tPgoKCSogdHlwZWNrLmMgKGJ1aWxkX2phdmFfYXJyYXlfdHlwZSk6IENvcnJlY3QgZmlyc3QgcGFyYW1ldGVyCglpbiBBREpVU1RfRklFTERfQUxJR04gaW52b2NhdGlvbi4KCjIwMDAtMDktMDYgIFRvbSBUcm9tZXkgIDx0cm9tZXlAY3lnbnVzLmNvbT4KCgkqIGxhbmctc3BlY3MuaDogQWxzbyByZWNvZ25pemUgYC1mZW1pdC1jbGFzcy1maWxlcycuCgoyMDAwLTA5LTA1ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIHZlcmlmeS5jIChtZXJnZV90eXBlcyk6IExvYWQgdGhlIHR5cGVzIHRvIG1lcmdlIGlmIG5lY2Vzc2FyeS4KCjIwMDAtMDktMDIgIEFudGhvbnkgR3JlZW4gIDxncmVlbkByZWRoYXQuY29tPgoKCSogamNmLWlvLmM6IEluY2x1ZGUgemxpYi5oLgoJKG9wZW5faW5femlwKTogUmVhZCBjb21wcmVzc2VkIGNsYXNzIGZpbGUgYXJjaGl2ZXMuCgkqIHppcGZpbGUuaCAoWmlwRGlyZWN0b3J5KTogQWRkIHVuY29tcHJlc3NlZF9zaXplIGFuZAoJY29tcHJlc3Npb25fbWV0aG9kIGZpZWxkcy4KCSogemV4dHJhY3QuYyAocmVhZF96aXBfYXJjaGl2ZSk6IENvbGxlY3QgZmlsZSBjb21wcmVzc2lvbiBpbmZvLgoKMjAwMC0wOC0xNSAgQnJ5Y2UgTWNLaW5sYXkgIDxicnljZUBhbGJhdHJvc3MuY28ubno+CgoJKiBwYXJzZS55IChkb19yZXNvbHZlX2NsYXNzKTogQWxzbyBleHBsb3JlIHN1cGVyY2xhc3NlcyBvZgoJaW50ZXJtZWRpYXRlIGVuY2xvc2luZyBjb250ZXh0cyB3aGVuIHNlYXJjaGluZyBmb3IgaW5uZXIgY2xhc3Nlcy4KCjIwMDAtMDgtMTEgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogcGFyc2UueSAodmFyaWFibGVfZGVjbGFyYXRvcl9pZDopOiBCZXR0ZXIgZXJyb3IgbWVzc2FnZS4KCShleHByZXNzaW9uX3N0YXRlbWVudDopOiBVc2UgWVlOT1RfVFdJQ0UuCgkoY2FzdF9leHByZXNzaW9uOik6IExpa2V3aXNlLgoJKGFzc2lnbm1lbnQ6KTogTGlrZXdpc2UuCgoyMDAwLTA4LTExICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnkgKGRvX21lcmdlX3N0cmluZ19jc3RlKTogTmV3IGxvY2Fscy4gQ3JlYXRlIG5ldwoJU1RSSU5HX0NTVHMgZWFjaCB0aW1lLCB1c2UgbWVtY3B5LiBGaXhlcyBnY2ovMzExLgoKMjAwMC0wOC0wNyAgSGFucyBCb2VobSAgPGJvZWhtQGFjbS5vcmc+CgoJKiBib2VobS5jIChtYXJrX3JlZmVyZW5jZV9maWVsZHMpOiBTZXQgbWFya2luZyBiaXRzIGZvciBhbGwgd29yZHMgaW4KCWEgbXVsdGlwbGUtd29yZCByZWNvcmQuCgkoZ2V0X2JvZWhtX3R5cGVfZGVzY3JpcHRvcik6IFVzZSB0aGUgcHJvY2VkdXJlIG1hcmtpbmcgZGVzY3JpcHRvciBmb3IKCWphdmEubGFuZy5DbGFzcy4KCjIwMDAtMDgtMzEgIE1pa2UgU3R1bXAgIDxtcnNAd3JzLmNvbT4KCgkqIE1ha2UtbGFuZy5pbiAoamMxJChleGVleHQpLCBnY2poJChleGVleHQpLCBqdi1zY2FuJChleGVleHQpLAoJamNmLWR1bXAkKGV4ZWV4dCkpOiBNYWtlIHBhcmFsbGVsIHNhZmUuCgoyMDAwLTA4LTI5ICBaYWNrIFdlaW5iZXJnICA8emFja0B3b2xlcnkuY3VtYi5vcmc+CgoJKiBqY2YtcGFyc2UuYyAoc2V0X3NvdXJjZV9maWxlbmFtZSk6IENvbnN0aWZ5IGEgY2hhciAqLgoJKiBqY2Ytd3JpdGUuYyAoYXBwZW5kX2lubmVyY2xhc3Nlc19hdHRyaWJ1dGUsCgltYWtlX2NsYXNzX2ZpbGVfbmFtZSk6IENvbnN0aWZ5IGEgY2hhciAqLiAgRG9uJ3QgcmVjeWNsZSBhCgl2YXJpYWJsZSBmb3IgYW4gdW5yZWxhdGVkIHB1cnBvc2UuCgkqIHBhcnNlLnk6IChidWlsZF9hbGlhc19pbml0aWFsaXplcl9wYXJhbWV0ZXJfbGlzdCk6IENvbnN0aWZ5IGEgY2hhciAqLgoJKGJyZWFrZG93bl9xdWFsaWZpZWQpOiBEbyBub3QgbW9kaWZ5IElERU5USUZJRVJfUE9JTlRFUiBzdHJpbmdzLgoKMjAwMC0wOC0yOSAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBleHByLmMgKGNhbl93aWRlbl9yZWZlcmVuY2VfdG8pOiBGaXhlZCBpbmRlbnRhdGlvbi4KCSogamF2YS10cmVlLmggKENMQVNTX01FVEhPRF9DSEVDS0VEX1ApOiBBZGRlZCBsZWFkaW5nIGNvbW1lbnQuCgkqIHBhcnNlLnk6IGBmaW5pdCQnIHJlcGxhY2VzIGAkZmluaXQkJyBpbiBjb21tZW50cy4KCSh0cnlfYnVpbHRpbl9hc3NpZ25jb252KTogRml4ZWQgbGVhZGluZyBjb21tZW50LgoKMjAwMC0wOC0yNSAgR3JlZyBNY0dhcnkgIDxncmVnQG1jZ2FyeS5vcmc+CgoJKiBnamF2YWguYyAoY3h4X2tleXdvcmRfc3Vic3QpOiBVc2UgQVJSQVlfU0laRS4KCjIwMDAtMDgtMjQgIEdyZWcgTWNHYXJ5ICA8Z3JlZ0BtY2dhcnkub3JnPgoKCSogbGFuZy5jIChsYW5nX2RlY29kZV9vcHRpb24pOiBVc2UgQVJSQVlfU0laRS4KCSogcGFyc2UueSAoQklOT1BfTE9PS1VQKTogTGlrZXdpc2UuCgoyMDAwLTA4LTIyICBBbmRyZXcgSGFsZXkgIDxhcGhAY3lnbnVzLmNvbT4KCgkqIGphdmFvcC5oIChXT1JEX1RPX0lOVCk6IE1hc2sgbG93ZXIgMzIgYml0cyBvZiBhIGp3b3JkIGJlZm9yZQoJc2lnbiBleHRlbmRpbmcuIEZpeGVzIGdjai8zMjEuCgkqIGpjZi1wYXJzZS5jIChnZXRfY29uc3RhbnQpOiBNYXNrIGxvd2VyIDMyIGJpdHMgb2YgYSBqaW50IGJlZm9yZQoJY29tYmluaW5nIHRvIG1ha2UgYSBqbG9uZy4gRml4ZXMgZ2NqLzMyMS4KCjIwMDAtMDgtMjEgIE5peCAgPG5peEBlc3BlcmkuZGVtb24uY28udWs+CgoJKiBsYW5nLXNwZWNzLmg6IERvIG5vdCBwcm9jZXNzIC1vIG9yIHJ1biB0aGUgYXNzZW1ibGVyIGlmCgktZnN5bnRheC1vbmx5LgoKMjAwMC0wOC0xNiAgQW5kcmV3IEhhbGV5ICA8YXBoQGN5Z251cy5jb20+CgoJKiB0eXBlY2suYyAoYnVpbGRfamF2YV9hcnJheV90eXBlKTogUmV3cml0ZSBjb2RlIHRvIGRvIGFycmF5CglhbGlnbm1lbnQuICBUYWtlIGludG8gYWNjb3VudCBiYWNrLWVuZCBtYWNyb3Mgd2hlbiBhbGlnbmluZyBhcnJheQoJZGF0YS4gIFJlbW92ZSBzZXR0aW5nIG9mIFRZUEVfVVNFUl9BTElHTjsgSmF2YSBkb2Vzbid0IGFsbG93IHRoZQoJdXNlciB0byBzZXQgYWxpZ25tZW50LiBGaXhlcyBnY2ovMjUyIGFuZCAxNjAuCgoyMDAwLTA4LTA5ICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CgoJKiBwYXJzZS55IChjaGVja19hYnN0cmFjdF9tZXRob2RfZGVmaW5pdGlvbnMpOiBOb3cgcmV0dXJuIGBpbnQnLgoJQ2hlY2sgaW1wbGVtZW50ZWQgaW50ZXJmYWNlcy4gIEZpeGVzIFBSIGdjai8zMDUuCgoJKiBwYXJzZS55IChwYXRjaF9zd2l0Y2hfc3RhdGVtZW50KTogRGlzYWxsb3cgYGxvbmcnIGluIHN3aXRjaAoJZXhwcmVzc2lvbnMuICBGaXhlcyBQUiBnY2ovMzEwLgoKMjAwMC0wOC0xNSAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBkZWNsLmMgKGZpbml0X2xlZ19pZGVudGlmaWVyX25vZGUpOiBOZXcgZ2xvYmFsLgoJKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogVXNlIGBmaW5pdCQnIHRvIGluaXRpYWxpemUKCWZpbml0X2lkZW50aWZpZXJfbm9kZS4gVXNlIGAkZmluaXQkJyB0byBpbml0aWFsaXplCglmaW5pdF9sZWdfaWRlbnRpZmllcl9ub2RlLgoJKiBleHByLmMgKGV4cGFuZF9qYXZhX2ZpZWxkX29wKTogVXNlIElEX0ZJTklUX1AuCgkqIGphdmEtdHJlZS5oIChmaW5pdF9pZGVudGlmaWVyX25vZGUpOiBDaGFuZ2VkIGF0dGFjaGVkIGNvbW1lbnQuCgkoZmluaXRfbGVnX2lkZW50aWZpZXJfbm9kZSk6IE5ldyBkZWNsYXJhdGlvbi4KCShJRF9GSU5JVF9QKTogVGFrZSBmaW5pdF9pZGVudGlmaWVyX25vZGUgYW5kCglmaW5pdF9sZWdfaWRlbnRpZmllcl9ub2RlIGludG8gYWNjb3VudC4gVGhpcyBpcyBhIGJhY2t3YXJkCgljb21wYXRpYmlsaXR5IGhhY2suCgoyMDAwLTA4LTE0ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIGpjZi13cml0ZS5jIChnZW5lcmF0ZV9ieXRlY29kZV9jb25kaXRpb25hbCk6IFJlLWluc3RhbGxlZCBsb3N0CglKYW4gNiAyMDAwIHBhdGNoLgoJKGdlbmVyYXRlX2J5dGVjb2RlX2luc25zKTogQ2hlY2sgYG5hcmdzJyBiZWZvcmUgZW1pdHRpbmcgaXQuCgkqIHZlcmlmeS5jIChtZXJnZV90eXBlX3N0YXRlKTogRml4ZWQgdHlwby4KCSogQ2hhbmdlTG9nOiBGaXhlZCB0eXBvIGluIHNvbWUgamNmLXdyaXRlLmMgZW50cmllcyBtZW50aW9uaW5nCglnZW5lcmF0ZV9ieXRlY29kZV97Y29uZGl0aW9uYWwsaW5zbnN9LgoKU3VuIEF1ZyAxMyAwOTo0MTo0OSAyMDAwICBBbnRob255IEdyZWVuICA8Z3JlZW5AcmVkaGF0LmNvbT4KCgkqIGNoZWNrLWluaXQuYyAoY2hlY2tfaW5pdCk6IEFkZCBjYXNlIGZvciBCSVRfRklFTERfUkVGIChyZXF1aXJlZAoJZm9yIC1wZyBidWlsZHMpLgoKMjAwMC0wOC0xMCAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBjbGFzcy5jIChtYXliZV9sYXlvdXRfc3VwZXJfY2xhc3MpOiBGaXhlZCBpbmRlbnRhdGlvbi4KCSogamF2YS10cmVlLmggKENMQVNTX01FVEhPRF9DSEVDS0VEX1ApOiBOZXcgbWFjcm8uCgkoamF2YV9jaGVja19tZXRob2RzKTogTmV3IGZ1bmN0aW9uIGRlY2xhcmF0aW9uLgoJKiBqY2YtcGFyc2UuYyAoZ2V0X2NvbnN0YW50KTogTGV0IGBjaGFyX2xlbicgZ28gdXAgdG8gMy4gVXNlIGBzdHInCglpbnN0ZWFkIG9mIGBzdHJfcHRyJy4KCSogamNmLXdyaXRlLmMgKGdlbmVyYXRlX2J5dGVjb2RlX2luc25zKTogRW1pdCBudW1iZXIgdGhlIG9mIGFyZ3MKCW9mIGEgYGludm9rZWludGVyZmFjZScgYXQgdGhlIHJpZ2h0IHRpbWUuCgkqIHBhcnNlLmggKFdGTF9TVFJJUF9CUkFDS0VUKTogTmV3IG1hY3JvLgoJKFNFVF9UWVBFX0ZPUl9SRVNPTFVUSU9OKTogVXNlIGl0LgoJKiBwYXJzZS55IChidWlsZF91bnJlc29sdmVkX2FycmF5X3R5cGUpOiBSZXVzZSBgdHlwZV9vcl93ZmwnLgoJKGNoZWNrX2NsYXNzX2ludGVyZmFjZV9jcmVhdGlvbik6IERvbid0IGNoZWNrIGZvciBjcm9zcyBwYWNrYWdlCglpbm5lcmNsYXNzIG5hbWUgY2xhc2hlcy4KCShtZXRob2RfaGVhZGVyKTogQmVoYXZlIHByb3Blcmx5IGlmIE1ERUNMIGlzIGBlcnJvcl9tYXJrX25vZGUnLgoJKG1ldGhvZF9kZWNsYXJhdG9yKTogUmV0dXJuIGBlcnJvcl9tYXJrX25vZGUnIGlmIGJvZ3VzIGN1cnJlbnQKCWNsYXNzLgoJKHJlc29sdmVfY2xhc3MpOiBBcHBseSBXRkxfU1RSSVBfQlJBQ0tFVCBvbiBgY2wnIGlmIG5lY2Vzc2FyeS4KCShyZXNvbHZlX2FuZF9sYXlvdXQpOiBOZXcgbG9jYWwgYGRlY2xfdHlwZScsIHNldCBhbmQgdXNlZC4gQ2FsbAoJamF2YV9jaGVja19tZXRob2RzLgoJKGphdmFfY2hlY2tfbWV0aG9kcyk6IE5ldyBtZXRob2QuCgkoamF2YV9sYXlvdXRfY2xhc3Nlcyk6IFVzZSBpdC4KCShyZXNvbHZlX3F1YWxpZmllZF9leHByZXNzaW9uX25hbWUpOiBObyBFSCBjaGVjayBuZWNlc3NhcnkgaW4KCWFjY2VzcyQ8bj4uCgkoamF2YV9jb21wbGV0ZV9saHMpOiBVc2UgVkFSX0RFQ0wncyBERUNMX0lOSVRJQUwgd2hlbiBldmFsdWF0aW5nCglgY2FzZScgc3RhdGVtZW50LgoJKHBhdGNoX2Fzc2lnbm1lbnQpOiBTZXQgREVDTF9JTklUSUFMIG9uIGludGVncmFsIGZpbmFsIGxvY2FsLgoKMjAwMC0wOC0wOCAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBqYXZhLXRyZWUuaCAoZmxhZ19leHRyYW5lb3VzX3NlbWljb2xvbik6IE5ldyBleHRlcm4uCgkqIGxhbmctb3B0aW9ucy5oOiAoLVdleHRyYW5lb3VzLXNlbWljb2xvbik6IE5ldyBvcHRpb24uCgkqIGxhbmcuYyAoZmxhZ19yZWR1bmRhbnQpOiBGaXhlZCB0eXBvIGluIGxlYWRpbmcgY29tbWVudC4KCShmbGFnX2V4dHJhbmVvdXNfc2VtaWNvbG9uKTogTmV3IGdsb2JhbC4KCShsYW5nX2RlY29kZV9vcHRpb24pOiBTZXQgYGZsYWdfZXh0cmFuZW91c19zZW1pY29sb24nIHdoZW4KCS1XYWxsLiBEZWNvZGUgYC1XZXh0cmFuZW91cy1zZW1pY29sb24nLgoJKiBwYXJzZS55ICh0eXBlX2RlY2xhcmF0aW9uOik6IFJlbW92ZWQgYFNDX1RLJyBoYWNrLCBhZGRlZAoJYGVtcHR5X3N0YXRlbWVudCcgcnVsZS4KCShjbGFzc19ib2R5X2RlY2xhcmF0aW9uKTogTGlrZXdpc2UuCgkobWV0aG9kX2JvZHk6KTogQWNjZXB0IGA7JyBhcyBhIG1ldGhvZCBib2R5LgoJKHN0YXRpY19pbml0aWFsaXplcjopOiBSZW1vdmVkIGBTQ19USycgaGFjay4KCShjb25zdHJ1Y3Rvcl9ibG9ja19lbmQ6KTogTGlrZXdpc2UuCgkoZW1wdHlfc3RhdGVtZW50Oik6IFJlcG9ydCBkZXByZWNhdGVkIGVtcHR5IGRlY2xhcmF0aW9uLiBGaXhlcwoJZ2NqLzI5NQoKMjAwMC0wOC0wNyAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBwYXJzZS55IChidWlsZF9kb3RfY2xhc3NfbWV0aG9kX2ludm9jYXRpb24pOiBDaGFuZ2VkIHBhcmFtZXRlcgoJbmFtZSB0byBgdHlwZScuIEJ1aWxkIHNpZ25hdHVyZSBmcm9tIGB0eXBlJyBhbmQgY29udmVydCBpdCB0byBhCglTVFJJTkdfQ1NUIGlmIGl0J3MgYW4gYXJyYXkuCgkocGF0Y2hfaW5jb21wbGV0ZV9jbGFzc19yZWYpOiBgYnVpbGRfZG90X2NsYXNzX21ldGhvZF9pbnZvY2F0aW9uJwoJdG8gdXNlIGByZWZfdHlwZScgZGlyZWN0bHkuCgpTdW4gQXVnICA2IDAwOjQ3OjI0IDIwMDAgIE92aWRpdSBQcmVkZXNjdSAgPG92aWRpdUBjdXAuaHAuY29tPgoKCSogbGFuZy1vcHRpb25zLmg6IEFkZGVkIGEgY29tbWEgYWZ0ZXIgdGhlIGxhc3QgZWxlbWVudCB0byBhdm9pZAoJc3ludGF4IGVycm9ycyB3aGVuIG90aGVyIGxhbmd1YWdlcyBkZWZpbmUgYWRkaXRpb25hbCBvcHRpb25zLgoKMjAwMC0wOC0wNCAgWmFjayBXZWluYmVyZyAgPHphY2tAd29sZXJ5LmN1bWIub3JnPgoKCSogTWFrZS1sYW5nLmluIChqYzEsIGp2LXNjYW4pOiBEZXBlbmQgb24gJChCQUNLRU5EKSwgbm90IHN0YW1wLW9iamxpc3QuCgkqIE1ha2VmaWxlLmluOiBBZGQgQkFDS0VORDsgZGVsZXRlIE9CSlMsIE9CSkRFUFMuCgkoamMxKTogTGluayB3aXRoICQoQkFDS0VORCkuCgkoanYtc2Nhbik6IERlcGVuZCBvbiB2ZXJzaW9uLm8sIG5vdCBhbGwgb2YgJChPQkpTKSBvciAkKEJBQ0tFTkQpLgoKMjAwMC0wOC0wMiAgWmFjayBXZWluYmVyZyAgPHphY2tAd29sZXJ5LmN1bWIub3JnPgoKCSoganZzcGVjLmM6IEFkanVzdCB0eXBlIG9mIHNlY29uZCBhcmd1bWVudCB0bwoJbGFuZ19zcGVjaWZpY19kcml2ZXIsIGFuZCB1cGRhdGUgY29kZSBhcyBuZWNlc3NhcnkuCgoJKiBjbGFzcy5jIChidWlsZF9kdGFibGVfZGVjbCk6IEluaXRpYWxpemUgZHVtbXkuCgoyMDAwLTA4LTAxICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnkgKG1heWJlX3lhbmtfY2xpbml0KTogV2hlbiBnZW5lcmF0aW5nIGJ5dGVjb2RlOiBub24gZW1wdHkKCW1ldGhvZCBib2RpZXMgbm90IHRvIHJ1bGUgb3V0IGRpc2NhcmRpbmcgYDxjbGluaXQ+JzsgZG9uJ3QgdXNlCgk8Y2xpbml0PiB0byBpbml0aWFsaXplIHN0YXRpYyBmaWVsZHMgd2l0aCBjb25zdGFudCBpbml0aWFsaXplcnMuCgoyMDAwLTA4LTAxICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIGdqYXZhaC5jIChwcmludF9tZXRob2RfaW5mbyk6IEFkZGVkIGBzeW50aCcgcGFyYW1ldGVyLiBTa2lwCglzeW50aGV0aWMgbWV0aG9kcy4KCShtZXRob2Rfc3ludGhldGljKTogTmV3IGdsb2JhbC4KCShIQU5ETEVfTUVUSE9EKTogUmVjb2duaXplIHN5bnRoZXRpYyBtZXRob2QgYW5kIHRlbGwKCWBwcmludF9tZXRob2RfaW5mbycgYWJvdXQgaXQuCgkoSEFORExFX0VORF9NRVRIT0QpOiBEbyBub3QgaXNzdWUgYW4gYWRkaXRpb25hbCBgO1xuJyBpZiB3ZSdyZQoJcHJvY2Vzc2luZyBhIHN5bnRoZXRpYyBtZXRob2QuCgkqIGpjZi1yZWFkZXIuYyAoc2tpcF9hdHRyaWJ1dGUpOiBOZXcgZnVuY3Rpb24uCgkoIHNraXBfYXR0cmlidXRlKTogTGlrZXdpc2UuCgoyMDAwLTA4LTAxICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnkgKGJ1aWxkX291dGVyX2ZpZWxkX2FjY2Vzcyk6IEZpeGVkIGNvbW1lbnRzLgoJKGZpeF9jb25zdHJ1Y3RvcnMpOiBFbWl0IHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGlzJDxuPiBiZWZvcmUKCWNhbGxpbmcgJGZpbml0JC4KCShyZXNvbHZlX3F1YWxpZmllZF9leHByZXNzaW9uX25hbWUpOiBCdWlsZCBhbiBhY2Nlc3MgdG8gYGRlY2wnIGlmCgluZWNlc3NhcnkuCgoyMDAwLTA3LTMxICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIHBhcnNlLXNjYW4ueSAoY3VyZW50X2NsYXNzKTogTm9uIGxvbmdlciBjb25zdC4KCShpbm5lcl9xdWFsaWZpZXIsIGlubmVyX3F1YWxpZmllcl9sZW5ndGgpOiBEZWxldGVkLgoJKGN1cnJlbnRfY2xhc3NfbGVuZ3RoKTogTmV3IGdsb2JhbC4KCShicmFja2V0X2NvdW50KTogRml4ZWQgdHlwbyBpbiBsZWFkaW5nIGNvbW1lbnQuCgkoYW5vbnltb3VzX2NvdW50KTogTmV3IGdsb2JhbC4KCShjbGFzc19pbnN0YW5jZV9jcmVhdGlvbl9leHByZXNzaW9uOik6IEhhbmRsZSBhbm9ueW1vdXMgY2xhc3Nlcy4KCShhbm9ueW1vdXNfY2xhc3NfY3JlYXRpb246KTogTmV3IHJ1bGUuCgkocHVzaF9jbGFzc19jb250ZXh0KTogUmV3cml0dGVuLgoJKHBvcF9jbGFzc19jb250ZXh0KTogTGlrZXdpc2UuCgkoSU5ORVJfUVVBTElGSUVSKTogTWFjcm8gZGVsZXRlZC4KCShyZXBvcnRfY2xhc3NfZGVjbGFyYXRpb24pOiBjYWxsIGBwdXNoX2NsYXNzX2NvbnRleHQnIHdoZW4KCWVudGVyaW5nIHRoZSBmdW5jdGlvbi4gYGZwcmludGYnIGZvcm1hdCBtb2RpZmllZCBub3QgdG8gdXNlCglJTk5FUl9RVUFMSUZJRVIuCgkocmVwb3J0X2NsYXNzX2RlY2xhcmF0aW9uKTogQXNzaWduIGBwYWNrYWdlX25hbWUnIGFuZAoJYGN1cnJlbnRfY2xhc3MnIHRvIE5VTEwgc2VwYXJhdGVseS4KCjIwMDAtMDctMzEgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogZXhwci5jIChidWlsZF9pbnZva2VpbnRlcmZhY2UpOiBDYWxsIGxheW91dF9jbGFzc19tZXRob2RzIG9uCgl0YXJnZXQgaW50ZXJmYWNlLgoKMjAwMC0wNy0yNyAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgoJICAgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBjeWdudXMuY29tPgoJICAgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogY2xhc3MuYyAobWFrZV9jbGFzc19kYXRhKTogQ3JlYXRlIHZ0YWJsZSBmb3IgYWJzdHJhY3QgY2xhc3Nlcy4KCShnZXRfZGlzcGF0Y2hfdGFibGUpOiBDaGFuZ2VkIHRvIGNvcGUgd2l0aCBhYnN0cmFjdCBjbGFzc2VzLgoKMjAwMC0wNy0yNyAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgoKCSogcGFyc2UueSAocGF0Y2hfbWV0aG9kX2ludm9jYXRpb24pOiBEb24ndCByZXZlcnNlIHRoZSBhcmd1bWVudAoJbGlzdCB3aGVuIGRlYWxpbmcgd2l0aCBhbm9ueW1vdXMgY2xhc3MgY29uc3RydWN0b3JzLiBGaXhlZCB0eXBvIGluCgljb21tZW50LgoKMjAwMC0wNy0yNyAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBwYXJzZS55IChidWlsZF9hbGlhc19pbml0aWFsaXplcl9wYXJhbWV0ZXJfbGlzdCk6IFJldmVyc2UKCWNyYWZ0ZWQgbGlzdCB3aGVuIGJ1aWxkaW5nIGFsaWFzZXMgZm9yIGFub255bW91cyBjbGFzcwoJY29uc3RydWN0b3JzLgoKMjAwMC0wNy0yNSAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBwYXJzZS55IChqZGVwX3Jlc29sdmVfY2xhc3MpOiBEb24ndCBib3RoZXIgY2hlY2tpbmcgcG90ZW50aWFsCglpbm5lcmNsYXNzIGFjY2VzcyBpZiBgZGVjbCcgaXMgTlVMTC4KCShmaW5kX2luX2ltcG9ydHNfb25fZGVtYW5kKTogVFJFRV9QVVJQT1NFIG9mIGBpbXBvcnQnIGNvbnRhaW5zIHRoZQoJV0ZMLgoKMjAwMC0wNy0yNSAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBwYXJzZS5jOiBSZW1vdmUgKGFnYWluLikKCjIwMDAtMDctMjQgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogcGFyc2UueSAoZmluZF9hc19pbm5lcl9jbGFzcyk6IFJlbW92ZWQgMjAwMC0wNy0xOSBwYXRjaGVzLgoJKiBqY2YtcGFyc2UuYyAoSEFORExFX0lOTkVSQ0xBU1NFU19BVFRSSUJVVEUpOiBMb2NhbCBgZGVjbCcgbW92ZWQKCW91dHNpZGUgdGhlIGBpZicgc3RhdGVtZW50LCBhbGlhcyB0byBpbm5lcmNsYXNzIHJlbW92ZWQsIGBkZWNsJwoJdXNlZCB0byBtYXJrIHRoZSBjbGFzcyBjb21wbGV0ZS4KCjIwMDAtMDctMjEgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogcGFyc2UueSAoc2ltcGxlX25hbWU6KTogRml4ZWQgdHlwbyBpbiBlcnJvciBtZXNzYWdlLgoKMjAwMC0wNy0yMSAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBwYXJzZS55IChqYXZhX2NvbXBsZXRlX2xocyk6IExPT1BfRVhQUjosIFNXSVRDSF9FWFBSOiB0aGUgbm9kZQoJb3IgaXRzIGZpcnN0IG9wZXJhbmQgY2FuIGJlIGVycm9yIG1hcmtzLgoKMjAwMC0wNy0yMCAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBwYXJzZS5oIChTRVRfVFlQRV9GT1JfUkVTT0xVVElPTik6IFVzZSBHRVRfQ1BDLgoJKiBwYXJzZS55IChtZXRob2RfaGVhZGVyKTogTGlrZXdpc2UuCgoyMDAwLTA3LTE5ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnkgKHByb2Nlc3NfaW1wb3J0cyk6IENvbnNpZGVyIHRoYXQgb25lIG1pZ2h0IGJlIHRyeWluZyB0bwoJaW1wb3J0IGFuIGlubmVyY2xhc3MuIEZpeGVzIGdjai8yNTQKCjIwMDAtMDctMTkgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogcGFyc2UueSAoZmluZF9hc19pbm5lcl9jbGFzcyk6IEhhbmRsZSB0aGUgY2FzZSB3aGVyZSB0aGUKCWVuY2xvc2luZyBjb250ZXh0IG9mIGFuIGlubmVyY2xhc3MgaGFzIGJlZW4gbG9hZGVkIGFzIGJ5dGVjb2RlLgoKMjAwMC0wNy0xOSAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBwYXJzZS55IChzaW1wbGVfbmFtZTopOiBSZWplY3QgYCQnIGluIHR5cGUgbmFtZXMuCgkocmVzb2x2ZV90eXBlX2R1cmluZ19wYXRjaCk6IFVzZSBgdHlwZScgYXMgYSBzZWNvbmQKCWFyZ3VtZW50IHRvIHJlc29sdmVfbm9fbGF5b3V0LiBGaXhlcyBnY2ovMjU3LgoKMjAwMC0wNy0xOCAgQnJ5Y2UgTWNLaW5sYXkgIDxicnljZUBhbGJhdHJvc3MuY28ubno+CgoJKiBwYXJzZS55IChmaW5kX21vc3Rfc3BlY2lmaWNfbWV0aG9kc19saXN0KTogU2VsZWN0IHRoZSBvbmx5Cglub24tYWJzdHJhY3QgbWV0aG9kIGV2ZW4gaWYgbWF4IGhhcyBiZWVuIHNldC4KCUZpeGVzIGdjai8yODUsIGdjai8yOTguCgoyMDAwLTA3LTE4ICBKZWZmIFN0dXJtICA8amVmZi5zdHVybUBhcHBuZXQuY29tPgoKCSogbGFuZy1zcGVjcy5oOiBBZGRlZCAlKGpjMSkgdG8gamF2YSBjb21waWxlciBvcHRpb25zLgoKMjAwMC0wNy0xNCAgWmFjayBXZWluYmVyZyAgPHphY2tAd29sZXJ5LmN1bWIub3JnPgoKCSogLmN2c2lnbm9yZTogTmV3IGZpbGUuCgoyMDAwLTA3LTEzICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnkgKG5vdF9hY2Nlc3NpYmxlX3ApOiBBY2Nlc3MgZ3JhbnRlZCB0byBpbm5lcmNsYXNzZXMKCShpbmRpcmVjdGx5KSBleHRlbmRpbmcgdGhlIHJlZmVyZW5jZSB0eXBlLiBGaXhlcyBnY2ovMjQ5LgoKMjAwMC0wNy0xMyAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBwYXJzZS55IChwYXRjaF9tZXRob2RfaW52b2NhdGlvbik6IEZpeGVkIGNvbW1lbnQuCgkobWF5YmVfdXNlX2FjY2Vzc19tZXRob2QpOiBCdWlsZCB0aGlzJDxuPnMgdG8gdGhlIGNvbnRleHQgb2YgdGhlCgl0YXJnZXQgbWV0aG9kLCBvciBhIHR5cGUgdGhhdCBleHRlbmRzIGl0LiBGaXhlcyBnY2ovMjQyLgoKMjAwMC0wNy0xMyAgTWFyayBNaXRjaGVsbCAgPG1hcmtAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIHBhcnNlLmM6IFJlbW92ZS4KCjIwMDAtMDctMTMgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogcGFyc2UueSAoZm9sZF9jb25zdGFudF9mb3JfaW5pdCk6IEF2b2lkIGJ1bGxpc2ggY29udmVyc2lvbi4KCjIwMDAtMDctMTMgIFRvbSBUcm9tZXkgIDx0cm9tZXlAY3lnbnVzLmNvbT4KCgkqIGxhbmctc3BlY3MuaDogQWRkZWQgJXtJKn0uCgoyMDAwLTA3LTEzICBaYWNrIFdlaW5iZXJnICA8emFja0B3b2xlcnkuY3VtYi5vcmc+CgoJKiBsYW5nLXNwZWNzLmg6IFVzZSB0aGUgbmV3IG5hbWVkIHNwZWNzLiAgUmVtb3ZlIHVubmVjZXNzYXJ5IGJyYWNlcy4KCjIwMDAtMDctMTIgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiBwYXJzZS1zY2FuLmM6IFJlbW92ZS4KCjIwMDAtMDctMTAgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogY2xhc3MuYyAoc2V0X3N1cGVyX2luZm8pOiBIYW5kbGVkIHByb3RlY3RlZCBpbm5lciBjbGFzc2VzLgoJKGNvbW1vbl9lbmNsb3NpbmdfY29udGV4dF9wKTogQmFpbCBlYXJseSBpZiBhcmd1bWVudHMgYXJlbid0IGJvdGgKCWlubmVyIGNsYXNzZXMuCgkoZ2V0X2FjY2Vzc19mbGFnc19mcm9tX2RlY2wpOiBIYW5kbGUgcHJpdmF0ZSBhbmQgcHJvdGVjdGVkIGlubmVyCgljbGFzc2VzLgoJKiBqYXZhLXRyZWUuaCAoVFlQRV9QUk9URUNURURfSU5ORVJfQ0xBU1MpOiBOZXcgbWFjcm8uCgkoQ0xBU1NfUFJPVEVDVEVEKTogTGlrZXdpc2UuCgkoc3RydWN0IGxhbmdfdHlwZSk6IE5ldyBiaXRmaWVsZCBgcG9pYycuCgkqIHBhcnNlLnkgKGpkZXBfcmVzb2x2ZV9jbGFzcyk6IENhbGwgY2hlY2tfaW5uZXJfY2xhc3NfYWNjZXNzIG9uCglpbm5lciBjbGFzc2VzIG9ubHkuCgkoY2hlY2tfaW5uZXJfY2xhc3NfYWNjZXNzKTogUmVuYW1lZCBhcmd1bWVudHMsIGFkZGVkCgljb21tZW50cy4gSGFuZGxlcyBwcm90ZWN0ZWQgaW5uZXIgY2xhc3NlcyAoZml4ZXMgZ2NqLzIyNSkKCShub3RfYWNjZXNzaWJsZV9wKTogRml4ZWQgY29tbWVudHMuIEF2b2lkIGhhbmRsaW5nIGlubmVyIGNsYXNzZXMuCgoyMDAwLTA3LTEwICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnkgKHJlc29sdmVfcXVhbGlmaWVkX2V4cHJlc3Npb25fbmFtZSk6IFZlcmlmeSBxdWFsaWZpZWQKCWFjY2VzcyB0byBgdGhpcycuIEZpeGVzIGdjai8yMzkuCgoyMDAwLTA3LTEwICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIGpjZi13cml0ZS5jIChnZW5lcmF0ZV9jbGFzc2ZpbGUpOiBEb24ndCBpbnN0YWxsIENvbnN0YW50VmFsdWUKCWZvciBudWxsIHBvaW50ZXJzLgoKMjAwMC0wNy0wNyAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBwYXJzZS55IChyZXNvbHZlX3F1YWxpZmllZF9leHByZXNzaW9uX25hbWUpOiBIYW5kbGUgaW5uZXIgY2xhc3MKCWFjY2Vzcy4gRml4ZXMgZ2NqLzI1Ni4KCjIwMDAtMDctMDcgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogamNmLXdyaXRlLmMgKGdlbmVyYXRlX2NsYXNzZmlsZSk6IFByb3Blcmx5IGluc3RhbGwgdGhlCglDb25zdGFudFZhbHVlIGF0dHJpYnV0ZSBhbmQgdGhlIGluaXRpYWwgdmFsdWUgY29uc3RhbnQgcG9vbCBpbmRleAoJb24gc3RyaW5nIGNvbnN0YW50cy4KCSogcGFyc2UueSAoamF2YV9jb21wbGV0ZV9saHMpOiBLZWVwIERFQ0xfSU5JVElBTCB3aGVuIGVtaXR0aW5nCgljbGFzcyBmaWxlcy4KCjIwMDAtMDctMDYgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogcGFyc2UuaCAoQlVJTERfUFRSX0ZST01fTkFNRSk6IFN1cnJvdW5kIHdpdGggYSBkby93aGlsZQoJY29uc3RydWN0LgoJKiBwYXJzZS55IChmaW5kX2FzX2lubmVyX2NsYXNzKTogRml4ZWQgdHlwby4KCShkb19yZXNvbHZlX2NsYXNzKTogRXhwbG9yZSBlbmNsb3NpbmcgY29udGV4dHMgd2hlbiBzZWFyY2hpbmcgZm9yCglpbm5lcmNsYXNzZXMuIFJlbW92ZWQgY3VybHkgYnJhY2tldHMgYXJvdW5kIEJVSUxEX1BUUl9GUk9NX05BTUUuCgkoY2hlY2tfaW5uZXJfY2xhc3NfYWNjZXNzKTogQ2hlY2sgYGRlY2wnIHdoaWNoIGNhbiBiZSBudWxsIGluIGNhc2UKCW9mIHByZXZpb3VzIGVycm9ycy4KCjIwMDAtMDctMDUgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogamF2YS10cmVlLmggKGphdmFfZGVidWdfY29udGV4dCk6IERlY2xhcmVkIGBleHRlcm4nLgoJKHNhZmVfbGF5b3V0X2NsYXNzKTogTGlrZXdpc2UuCgkqIHBhcnNlLnkgKHJlc29sdmVfZmllbGRfYWNjZXNzKTogRmllbGQgbXVzdCBiZSBgc3RhdGljJyBpbiBvcmRlcgoJdG8gYmUgcmVwbGFjZWQgYnkgaXRzIGluaXRpYWwgdmFsdWUuIEFkZGVkIGNvbW1lbnRzLgoJKGZpbmRfYXBwbGljYWJsZV9hY2Nlc3NpYmxlX21ldGhvZHNfbGlzdCk6IEZpeGVkIHR5cG8uCgkoZmluZF9tb3N0X3NwZWNpZmljX21ldGhvZHNfbGlzdCk6IE1ldGhvZHMgZm91bmQgaW4gaW5uZXJjbGFzc2VzCgl0YWtlIG92ZXIgbWV0aG9kcyBmb3VuZHMgaW4gdGhlIGVuY2xvc2luZyBjb250ZXh0cy4KCShqYXZhX2NvbXBsZXRlX3RyZWUpOiBMb29zZW4gcmVzdHJpY3Rpb25zIG9uIHRoZSB0eXBlIG9mIERFQ0xzCgl0aGF0IGNhbiBiZSByZXBsYWNlZCBieSB0aGVpciBpbml0aWFsaXphdGlvbiB2YWx1ZXMuCgkodmFsaWRfcmVmX2Fzc2lnbmNvbnZfY2FzdF9wKTogUmVtb3ZlZCBjYWxsIHRvIGBlbmNsb3NpbmdfY29udGV4dF9wJy4KCjIwMDAtMDctMDUgIFRvbSBUcm9tZXkgIDx0cm9tZXlAY3lnbnVzLmNvbT4KCgkqIE1ha2UtbGFuZy5pbiAoUEFSU0VfRElSKTogTmV3IG1hY3JvLgoJKFBBUlNFX1JFTERJUik6IExpa2V3aXNlLgoJKFBBUlNFX0MpOiBMaWtld2lzZS4KCShQQVJTRV9TQ0FOX0MpOiBMaWtld2lzZS4KCSgkKFBBUlNFX0MpKTogTmV3IHRhcmdldC4KCSgkKFBBUlNFX1NDQU5fQykpOiBMaWtld2lzZS4KCShTRVRfQklTT04pOiBOZXcgbWFjcm8uCgkoQklTT05GTEFHUyk6IExpa2V3aXNlLgoJKEpBVkFCSVNPTkZMQUdTKTogTGlrZXdpc2UuCgoyMDAwLTA3LTAyICBCcnljZSBNY0tpbmxheSAgPGJyeWNlQGFsYmF0cm9zcy5jby5uej4KCgkqIGdqYXZhaC5jIChIQU5ETEVfTUVUSE9EKTogQ2FsbCBwcmludF9tZXRob2RfaW5mbyB3aXRoIGEgTlVMTCBzdHJlYW0KCWFyZ3VtZW50IG9uIHRoZSBmaXJzdCBwYXNzIGZvciBDTkkgYXMgd2VsbCBhcyBKTkkuCgkocHJpbnRfbWV0aG9kX2luZm8pOiBTZXQgdXAgbWV0aG9kIG5hbWUgb24gdGhlIGZpcnN0IHBhc3Mgb25seS4KCjIwMDAtMDctMDEgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogcGFyc2UueSAocGFyc2VyX3F1YWxpZmllZF9jbGFzc25hbWUpOiBSZW1vdmVkIHBhcmFtZXRlcgoJYGlzX3N0YXRpYycuCgkoY3JlYXRlX2ludGVyZmFjZSk6IFJlbW92ZWQgZmlyc3QgcGFzc2VkIHBhcmFtZXRlciB0bwoJcGFyc2VyX3F1YWxpZmllZF9jbGFzc25hbWUuCgkoY3JlYXRlX2NsYXNzKTogTGlrZXdpc2UuIERvbid0IGluc3RhbGwgYWxpYXMgb24gc3RhdGljCglpbm5lcmNsYXNzZXMuIEZpeGVzIGdjai8yNzUuCgoyMDAwLTA3LTAxICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnkgKG1heWJlX2dlbmVyYXRlX3ByZV9leHBhbmRfY2xpbml0KTogRG9uJ3QgYnVpbGQgYQoJZGVidWdhYmxlIHN0YXRlbWVudCB3aXRoIGVtcHR5X3N0bXRfbm9kZS4gRml4ZXMgZ2NqLzI3MgoKMjAwMC0wNy0wMSAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBleHByLmMgKGJ1aWxkX2luc3RhbmNlb2YpOiBMYXlvdXQgdHlwZSBhZnRlciBpdCdzIGxvYWRlZC4gRml4ZXMKCWdjai8yNzEuCgoyMDAwLTA2LTI5ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIGpjZi13cml0ZS5jIChwdXNoX2xvbmdfY29uc3QpOiBBcHByb3ByaWF0ZWx5IGNhc3Qgc2hvcnQgbmVnYXRpdmUKCWNvbnN0YW50IHRvIGp3b3JkLgoKMjAwMC0wNi0yOSAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBwYXJzZS55ICh2ZXJpZnlfY29uc3RydWN0b3Jfc3VwZXIpOiBVc2UgbG9vcCB2YXJpYWJsZQoJYG1fYXJnX3R5cGUnIGluaXRpYWxpemVkIHdpdGggYG1kZWNsX2FyZ190eXBlJy4KCjIwMDAtMDYtMjkgIFRvbSBUcm9tZXkgIDx0cm9tZXlAY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnkgKHJlc29sdmVfZmllbGRfYWNjZXNzKTogSGFuZGxlIGNhc2Ugd2hlcmUgYHR5cGVfZm91bmQnCglpcyBOVUxMLgoKMjAwMC0wNi0yNyAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBleHByLmMgKGxvb2t1cF9maWVsZCk6IFRoZSBzYW1lIGZpZWxkIGNhbiBiZSBmb3VuZCB0aHJvdWdoIHR3bwoJZGlmZmVyZW50IGludGVyZmFjZS4gRG9uJ3QgZGVjbGFyZSBpdCBhbWJpZ3VvdXMgaW4gdGhhdCBjYXNlLgoKMjAwMC0wNi0yNyAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgoKCSogbGV4LmMgKGphdmFfbGluZXRlcm1pbmF0b3IpOiBEb24ndCByZWNvZ25pemUgXHIgYWZ0ZXIgXG4uICBJZiBccgoJZm9sbG93cyBcciwgdGhlbiB1bmdldCBpdCBhdCBhIGxvd2VyIGxldmVsLgoKMjAwMC0wNi0yNiAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgoKCSogcGFyc2UueSAocmVzb2x2ZV9maWVsZF9hY2Nlc3MpOiBQYXNzIGRlY2wsIG5vdCBERUNMX0lOSVRJQUwsIHRvCglqYXZhX2NvbXBsZXRlX3RyZWUuCgoyMDAwLTA2LTI1ICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CgoJKiBwYXJzZS55IChmb3Jfc3RhdGVtZW50KTogV3JhcCBleHByZXNzaW9uIGluIGEgV0ZMIGlmIGl0IGlzIGEKCWNvbnN0YW50LiAgRm9yIFBSIGdjai8yNjguCgoyMDAwLTA2LTI1ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnkgKGRvX3Jlc29sdmVfY2xhc3MpOiBNaW5vciBvcHRpbWl6dGlvbiBpbiB0aGUgcGFja2FnZQoJbGlzdCBzZWFyY2guIFJlbW92ZWQgdW5uZWNlc3NhcnkgdGVzdCBhbmQgcmV0dXJuIHN0YXRlbWVudC4KCSh2YWxpZF9yZWZfYXNzaWduY29udl9jYXN0X3ApOiBPcmRlciBvZiBhcmd1bWVudHMgdG8KCWVuY2xvc2luZ19jb250ZXh0X3AgZml4ZWQuCgoyMDAwLTA2LTI0ICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CgoJKiBleHByLmMgKGxvb2t1cF9maWVsZCk6IFByaW50IGVycm9yIGFuZCByZXR1cm4gZXJyb3JfbWFya19ub2RlIGlmCglmaWVsZCByZWZlcmVuY2UgaXMgYW1iaWd1b3VzLgoKCSogcGFyc2UueSAoY2hlY2tfYWJzdHJhY3RfbWV0aG9kX2RlZmluaXRpb25zKTogQWxzbyBjaGVjayBpZgoJYG90aGVyX21ldGhvZCcgaXMgYWJzdHJhY3QuCgoyMDAwLTA2LTIzICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIGNsYXNzLmMgKHNldF9zdXBlcl9pbmZvKTogSGFuZGxlIEFDQ19QUklWQVRFIGZvciAoaW5uZXIpCgljbGFzc2VzLgoJKiBqYXZhLXRyZWUuaCAoVFlQRV9QUklWQVRFX0lOTkVSX0NMQVNTKTogTmV3IG1hY3JvLgoJKHN0cnVjdCBsYW5nX3R5cGUpOiBOZXcgZmllbGQgYHBpYycuCgkoQ0xBU1NfUFJJVkFURSk6IE5ldyBtYWNyby4KCSogcGFyc2UueSAoY2hlY2tfaW5uZXJfY2xhc3NfYWNjZXNzKTogTmV3IGZ1bmN0aW9uLgoJKGpkZXBfcmVzb2x2ZV9jbGFzcyk6IENhbGwgaXQuCgoyMDAwLTA2LTIzICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CgoJKiBwYXJzZS55IChwYXRjaF9pbmNvbXBsZXRlX2NsYXNzX3JlZik6IEluaXRpYWxpemUgdGhlIHJldHVybmVkCgljbGFzcy4gIEZvciBQUiBnY2ovMjYwLgoKMjAwMC0wNi0yMSAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBleGNlcHQuYyAocHJlcGFyZV9laF90YWJsZV90eXBlKTogVXNlIGBDQVRDSF9BTExfVFlQRScuCgoyMDAwLTA2LTIwICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIGNoZWNrLWluaXQuYyAoRU5BQkxFX0pDMV9DSEVDS0lORyk6IFJlcGxhY2VzIEVOQUJMRV9DSEVDS0lORyBmb3IKCUphdmEgc3BlY2lmaWMgY2hlY2tzLgoJKiBleHByLmMgKGJ1aWxkX2luc3RhbmNlb2YpOiBDTEFTU19JTlRFUkZBQ0UgYW5kIENMQVNTX0ZJTkFMIHVzYWdlCglzY3JlZW5lZCBieSBERUNMX1AuCgkqIGphdmEtdHJlZS5kZWYgKENBU0VfRVhQUik6IE1hcmtlZCAnZScuCgkoREVGQVVMVF9FWFBSKTogTGlrZXdpc2UuCgkqIGpjZi1wYXJzZS5jIChzZXRfc291cmNlX2ZpbGVuYW1lKTogQ0xBU1NfQ09NUExFVEVfUCB1c2FnZQoJc2NyZWVuZWQgYnkgREVDTF9QLgoJKiBqY2Ytd3JpdGUuYyAoRU5BQkxFX0pDMV9DSEVDS0lORyk6IFJlcGxhY2VzIEVOQUJMRV9DSEVDS0lORyBmb3IKCUphdmEgc3BlY2lmaWMgY2hlY2tzLgoJKGdlbmVyYXRlX2J5dGVjb2RlX2luc25zKTogVGVzdCB0cnlfYmxvY2sgZm9yIEJMT0NLIGJlZm9yZSB1c2luZwoJQkxPQ0tfRVhQUl9CT0RZLgoJKiBwYXJzZS55IChidWlsZF93Zmxfd3JhcCk6IEFkZGVkIGBsb2NhdGlvbicgYXJndW1lbnQuIFNldAoJRVhQUl9XRkxfTElORUNPTCBhY2NvcmRpbmdseS4KCShkaW1fZXhwcjopOiBXcmFwIGNvbnN0YW50cyB3aXRoIFdGTHMuCgkobWV0aG9kX2RlY2xhcmF0b3IpOiBVc2UgVFJFRV9UWVBFIG5vdCBUWVBFX05BTUUgb24gR0VUX0NQQy4KCShyZXNvbHZlX3BhY2thZ2UpOiBDaGVjayBmb3IgYHN0bXQnIG5vdCBiZWluZyBhIEJMT0NLIGJlZm9yZQoJYnVpbGRpbmcgYSBkZWJ1Z2dhYmxlIHN0YXRlbWVudCB3aXRoIGl0LgoJKG1ha2VfcXVhbGlmaWVkX3ByaW1hcnkpOiBBZGRlZCBleHRyYSBwYXJhbWV0ZXIgdG8gYnVpbGRfd2ZsX3dyYXAKCWludm9jYXRpb24uCgkocmVzb2x2ZV9maWVsZF9hY2Nlc3MpOiBNYWtlIHN1cmUgYGRlY2wnIGlzIGEgREVDTCBiZWZvcmUgdHJlYXRpbmcKCWl0IGFzIHN1Y2guCgkobWF5YmVfYnVpbGRfcHJpbXR0eXBlX3R5cGVfcmVmKTogTWFrZSBzdXJlIGB3ZmwnJ3Mgbm9kZSBpcyBhbgoJSURFTlRJRklFUl9OT0RFIGJlZm9yZSB0cmVhdGluZyBpdCBhcyBzdWNoLgoJKHBhdGNoX25ld19hcnJheV9pbml0KTogTWFrZSBzdXJlIGBlbHQnIGlzIGEgVFJFRV9MSVNUIGJlZm9yZQoJdHJlYXRpbmcgaXQgYXMgc3VjaC4KCShmaW5kX2FwcGxpY2FibGVfYWNjZXNzaWJsZV9tZXRob2RzX2xpc3QpOiBDTEFTU19JTlRFUkZBQ0UgbWFjcm8KCXRvIGJlIGFwcGxpZWQgb25seSBvbiBub24gYXJyYXkgdHlwZXMuCgoyMDAwLTA2LTE2ICBQZXIgQm90aG5lciAgPHBlckBib3RobmVyLmNvbT4KCgkqIGphdmEtdHJlZS5oIChMQUJFTF9SRVRVUk5fTEFCRUxTLCBMQUJFTF9QRU5ESU5HX0NIQUlOKTogIERvbid0CglkZWZpbmUgaW4gdGVybXMgb2YgREVDTF9SRVNVTFQsIGFzIHRoYXQgZmFpbHMgd2hlbiAtLWVuYWJsZS1jaGVja2luZy4KCjIwMDAtMDYtMTUgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGpjZi13cml0ZS5jIChDSEVDS19QVVQpOiBBZGQgc3RhdGljIHByb3RvdHlwZS4gIE1ha2UgcG9pbnRlcgoJdHlwZXMgdGhlIHNhbWUgaW4gY29tcGFyaXNvbi4KCShDSEVDS19PUCk6IEFkZCBzdGF0aWMgcHJvdG90eXBlLgoKMjAwMC0wNi0xMyAgSmFrdWIgSmVsaW5layAgPGpha3ViQHJlZGhhdC5jb20+CgoJKiB0eXBlY2suYyAoYnVpbGRfamF2YV9hcnJheV90eXBlKTogU2V0IFRZUEVfVVNFUl9BTElHTi4KCSogcGFyc2UueSAoamF2YV9jb21wbGV0ZV9jbGFzcyk6IFNldCBERUNMX1VTRVJfQUxJR04uCgkqIHBhcnNlLmM6IFJlYnVpbHQuCgoyMDAwLTA2LTExICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBkZWNsLmMgKGNyZWF0ZV9wcmltaXRpdmVfdnRhYmxlKTogUHJvdG90eXBlLgoKCSogamNmLXdyaXRlLmMgKGdlbmVyYXRlX2J5dGVjb2RlX2luc25zKTogSW5pdGlhbGl6ZSB2YXJpYWJsZQoJYHNhdmVkX2NvbnRleHQnLgoKCSogbGFuZy5jIChsYW5nX2dldF9hbGlhc19zZXQpOiBNYXJrIHBhcmFtZXRlciB3aXRoIEFUVFJJQlVURV9VTlVTRUQuCgoyMDAwLTA2LTA5ICBCcnljZSBNY0tpbmxheSAgPGJyeWNlQGFsYmF0cm9zcy5jby5uej4KCgkqIHBhcnNlLnkgKGZpbmRfYXBwbGljYWJsZV9hY2Nlc3NpYmxlX21ldGhvZHNfbGlzdCk6IFVzZSBhIGhhc2h0YWJsZQoJdG8gdHJhY2sgc2VhcmNoZWQgY2xhc3NlcywgYW5kIGRvIG5vdCBzZWFyY2ggdGhlIHNhbWUgY2xhc3MgbW9yZSB0aGFuCglvbmNlLiBDYWxsIGZpbmRfYXBwbGljYWJsZV9hY2Nlc3NpYmxlX21ldGhvZHNfbGlzdCBvbiBpbW1lZGlhdGUKCXN1cGVyY2xhc3MsIGluc3RlYWQgb2Ygc2VhcmNoX2FwcGxpY2FibGVfbWV0aG9kX2xpc3Qgb24gYWxsIGFuY2VzdG9ycy4KCUZpeCBmb3IgUFIgZ2NqLzIzOC4KCjIwMDAtMDYtMDkgIEJyeWNlIE1jS2lubGF5ICA8YnJ5Y2VAYWxiYXRyb3NzLmNvLm56PgoKCSogcGFyc2UueSAocmVnaXN0ZXJfZmllbGRzKTogUGVybWl0IHN0YXRpYyBmaWVsZHMgaW4gaW5uZXIgY2xhc3NlcwoJaWYgdGhleSBhcmUgZmluYWwuIEZpeCBmb3IgUFIgZ2NqLzI1NS4KCjIwMDAtMDYtMDYgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogcGFyc2UuaCAoUkVHSVNURVJfSU1QT1JUKTogVXNlIGBjaGFpbm9uJyB0byBsaW5rIG5ldyBlbnRyaWVzLgoJKiBwYXJzZS55IChmaW5kX2luX2ltcG9ydHMpOiBSZXR1cm5lZCB0eXBlIGNoYW5nZWQgdG8gdm9pZCwKCWxlYWRpbmcgY29tbWVudCBmaXhlZC4KCShyZWdpc3Rlcl9wYWNrYWdlKTogTmV3IGZ1bmN0aW9uLgoJKHF1YWxpZnlfYW5kX2ZpbmQpOiBMaWtld2lzZS4KCShwYWNrYWdlX2RlY2xhcmF0aW9uOik6IFVzZSBgcmVnaXN0ZXJfcGFja2FnZScuCgkoc2luZ2xlX3R5cGVfaW1wb3J0X2RlY2xhcmF0aW9uOik6IFJlbW92ZWQgbG9jYWwgdmFyaWFibGUKCWBub2RlJy4gQWRkZWQgbWlzc2luZyBgOycgZm9yIGNvbnNpc3RlbmN5LgoJKHR5cGVfaW1wb3J0X29uX2RlbWFuZF9kZWNsYXJhdGlvbjopOiBVc2UgYGNoYWlub24nIHRvIGxpbmsgbmV3CgllbnRyaWVzLgoJKGxvb2t1cF9maWVsZF93cmFwcGVyKTogTG9va3VwIGxvY2FsIHZhcmlhYmxlcyBkZWZpbmVkIGluIG91dGVyCgljb250ZXh0cyBmaXJzdC4KCShqYXZhX2NvbXBsZXRlX2NsYXNzKTogRG9uJ3QgcmV2ZXJzZSB0aGUgbGlzdCBvZiBpbXBvcnRlZCBvbiBkZW1hbmQuCgkoZG9fcmVzb2x2ZV9jbGFzcyk6IFJlb3JnYW5pemVkLiBSZW1vdmVkIGxvY2FsIHZhcmlhYmxlCglgb3JpZ2luYWxfbmFtZScuIENhbGwgYHF1YWxpZnlfYW5kX2ZpbmQnIHdpdGggdGhlIGN1cnJlbnQgcGFja2FnZQoJbmFtZSwgaW52b2tlIGBmaW5kX2luX2ltcG9ydHNfb25fZGVtYW5kJyByaWdodCBhZnRlci4gQ2FsbAoJYHF1YWxpZnlfYW5kX2ZpbmQnIHdpdGggdGhlIHBhY2thZ2VzIHdlJ3ZlIHNlZW4gc28gZmFyLiBGaXhlZAoJb3BlcmF0aW9ucyBudW1iZXJpbmcgaW4gY29tbWVudHMuCgkoamF2YV9leHBhbmRfY2xhc3MpOiBEb24ndCByZXZlcnNlIGBwYWNrYWdlX2xpc3QnLgoJKGZpbmRfbW9zdF9zcGVjaWZpY19tZXRob2RzX2xpc3QpOiBOZXcgbG9jYWwgdmFyaWFibGVzIGBhYnN0cmFjdCcKCWFuZCBgY2FuZGlkYXRlcycuIFVzZSB0aGVtIHRvIHBpY2sgdGhlIHJpZ2h0IG1ldGhvZC4KClR1ZSBKdW4gIDYgMTE6Mzk6MDUgMjAwMCAgVG9tIFRyb21leSAgPHRyb21leUBmZXJydWxlLmN5Z251cy5jb20+CgoJKiBwYXJzZS55IChjaGVja19tb2RpZmllcnNfY29uc2lzdGVuY3kpOiBEb24ndCBzdWJ0cmFjdCBvdXQKCWBQVUJMSUNfVEsnIGZyb20gYXJndW1lbnQgdG8gVEhJU19NT0RJRklFUl9PTkxZLgoKMjAwMC0wNi0wNCAgUGhpbGlwcCBUaG9tYXMgIDxwdGhvbWFzQHN1c2UuZGU+CgoJKiBNYWtlZmlsZS5pbiAoSU5UTExJQlMpOiBOZXcuCgkoTElCUyk6IEFkZCBhYm92ZS4KCShERVBMSUJTKTogRGl0dG8uCgpGcmkgSnVuICAyIDE2OjQ4OjU1IDIwMDAgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogY2xhc3MuYyAoZ2V0X2Rpc3BhdGNoX3RhYmxlKTogQnVpbGQgdGhlIHZ0YWJsZSBkdW1teSBlbnRyeSBsaXN0CgllbGVtZW50IHdpdGggYSBudWxsIHB1cnBvc2UuIEZpeGVkIGxlYWRpbmcgY29tbWVudC4KCShidWlsZF9kdGFibGVfZGVjbCk6IEJ1aWxkIGFuIGFjY3VyYXRlIGR0YWJsZSB0eXBlIHdoZW4gYXBwcm9wcmlhdGUKCWFuZCB1c2UgaXQuCgoyMDAwLTA2LTAyICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogbGFuZy5jIChsYW5nX2dldF9hbGlhc19zZXQpOiBOZXcuCgoyMDAwLTA1LTMxICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnkgKHJlc29sdmVfZmllbGRfYWNjZXNzKTogQ29tcGxldGUgdGhlIERFQ0xfSU5JVElBTCB0cmVlCgliZWZvcmUgdXNpbmcgaXQgYXMgdGhlIGFjY2Vzc2VkIGZpZWxkLgoKMjAwMC0wNS0zMSAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgoKCSogamF2YS10cmVlLmggKGJvb2xlYW5fYXJyYXlfdnRhYmxlLCBieXRlX2FycmF5X3Z0YWJsZSwKCWNoYXJfYXJyYXlfdnRhYmxlLCBzaG9ydF9hcnJheV92dGFibGUsIGludF9hcnJheV92dGFibGUsCglsb25nX2FycmF5X3Z0YWJsZSwgZmxvYXRfYXJyYXlfdnRhYmxlLCBkb3VibGVfYXJyYXlfdnRhYmxlKToKCURlY2xhcmUuCgkqIGV4cHIuYyAoZ2V0X3ByaW1pdGl2ZV9hcnJheV92dGFibGUpOiBOZXcgZnVuY3Rpb24uCgkoY3JlYXRlX3ByaW1pdGl2ZV92dGFibGUpOiBOZXcgZnVuY3Rpb24uCgkoamF2YV9sYW5nX2V4cGFuZF9leHByKTogRW5hYmxlIGNvZGUgdG8gc3RhdGljYWxseSBnZW5lcmF0ZQoJYXJyYXlzLgoJKiBkZWNsLmMgKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogQ3JlYXRlIHByaW1pdGl2ZSB2dGFibGVzLgoJKGJvb2xlYW5fYXJyYXlfdnRhYmxlLCBieXRlX2FycmF5X3Z0YWJsZSwgY2hhcl9hcnJheV92dGFibGUsCglzaG9ydF9hcnJheV92dGFibGUsIGludF9hcnJheV92dGFibGUsIGxvbmdfYXJyYXlfdnRhYmxlLAoJZmxvYXRfYXJyYXlfdnRhYmxlLCBkb3VibGVfYXJyYXlfdnRhYmxlKTogRGVmaW5lLgoKMjAwMC0wNS0yNiAgWmFjayBXZWluYmVyZyAgPHphY2tAd29sZXJ5LmN1bWIub3JnPgoKCSogamF2YS9wYXJzZS55IChmaW5kX2FwcGxpY2FibGVfYWNjZXNzaWJsZV9tZXRob2RzX2xpc3QpOgoJRG9uJ3QgYWRkIGFuIHVuaW5pdGlhbGl6ZWQgdmFsdWUgdG8gdGhlIGxpc3QuCgoyMDAwLTA1LTI1ICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CgoJKiBwYXJzZS55IChyZXNvbHZlX2ZpZWxkX2FjY2Vzcyk6IERvbid0IGNoZWNrIERFQ0xfTEFOR19TUEVDSUZJQwoJd2hlbiB0cnlpbmcgdG8gc2VlIGlmIGZpZWxkJ3MgY2xhc3Mgc2hvdWxkIGJlIGluaXRpYWxpemVkLiAgQWx3YXlzCglpbml0aWFsaXplIGZpZWxkJ3MgZGVjbGFyaW5nIGNsYXNzLCBub3QgcXVhbGlmaWVkIGNsYXNzLgoJRm9yIFBSIGdjai8xNjIuCgoJKiBwYXJzZS55IChhcnJheV9jb25zdHJ1Y3Rvcl9jaGVja19lbnRyeSk6IFBhc3MgYHdmbF92YWx1ZScsIG5vdAoJYHdmbF9vcGVyYXRvcicsIHRvIG1heWJlX2J1aWxkX3ByaW10dHlwZV90eXBlX3JlZi4KCUZpeGVzIFBSIGdjai8yMzUuCgoyMDAwLTA1LTIzICBCcnljZSBNY0tpbmxheSAgPGJyeWNlQGFsYmF0cm9zcy5jby5uej4KCiAgICAgICAqIHBhcnNlLnkgKHBhdGNoX21ldGhvZF9pbnZvY2F0aW9uKTogRG9uJ3QgdHJ5IHRvIGxvb2t1cCBtZXRob2RzCiAgICAgICBpbiBwcmltaXRpdmUgdHlwZXMuCgoyMDAwLTA1LTAyICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnkgKHJlc29sdmVfZmllbGRfYWNjZXNzKTogQ2FsbCB0aGUgYXBwcm9wcmlhdGUgPGNsaW5pdD4KCWJlZm9yZSBhY2Nlc3NpbmcgdGhlIGxlbmd0aCBvZiBhIHN0YXRpYyBhcnJheS4gQ3JhZnQgYSBkZWNsIGZvcgoJdGhlIGZpZWxkIHdoaWxlIGl0cyB0aW1lLiBGaXhlcyBQUiBnY2ovMTI5LgoKMjAwMC0wNS0wMSAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBwYXJzZS55IChyZXNvbHZlX3BhY2thZ2UpOiBDb3JyZWN0bHkgc2V0IGAqbmV4dCcgKHdhcyBvZmYgYnkKCW9uZS4pCgkocmVzb2x2ZV9xdWFsaWZpZWRfZXhwcmVzc2lvbl9uYW1lKTogRml4ZWQgY29tbWVudC4KClRodSBBcHIgMjcgMTc6NDc6MzQgMjAwMCAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBqY2YtcGFyc2UuYyAoamNmX3BhcnNlX3NvdXJjZSk6IFJlc2V0IGN1cnJlbnRfY2xhc3MgYW5kCgljdXJyZW50X2Z1bmN0aW9uX2RlY2wgdG8gTlVMTCBiZWZvcmUgcGFyc2luZyBhIG5ldyBmaWxlLgoKVGh1IEFwciAyNyAxNzoyNTozMyAyMDAwICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnkgKGJsb2NrX2VuZDopOiBJZiB0aGUgY29sbGVjdGVkIGJsb2NrIGRvZXNuJ3QgZmVhdHVyZSBhCglzdGF0ZW1lbnQsIGluc2VydCBhbiBlbXB0eSBzdGF0ZW1lbnQuCgoyMDAwLTA0LTE3ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnkgKG1heWJlX3lhbmtfY2xpbml0KTogTmV3IGZ1bmN0aW9uLgoJKG1heWJlX2dlbmVyYXRlX3ByZV9leHBhbmRfY2xpbml0KTogQWx3YXlzIGxpbmsgPGNsaW5pdD4gYXQgdGhlCgllbmQgb2YgdGhlIGxpc3Qgb2YgbWV0aG9kcyBiZWxvbmdpbmcgdG8gYSBjbGFzcy4KCShqYXZhX2NvbXBsZXRlX2V4cGFuZF9tZXRob2QpOiBDaGVjayB3aGV0aGVyIDxjbGluaXQ+IGlzIHJlYWxseQoJbmVjZXNzYXJ5IGFuZCBleHBhbmQgaXQgYWNjb3JkaW5nbHkuCgoyMDAwLTA0LTE3ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnkgKGZvbGRfY29uc3RhbnRfZm9yX2luaXQpOiBMZXQgVkFSX0RFQ0wgYW5kIEZJRUxEX0RFQ0wgYmUKCXByb2Nlc3NlZCBieSB0aGUgbWV0aG9kJ3Mgc3dpdGNoIHN0YXRlbWVudC4KCjIwMDAtMDUtMTkgIFRvbSBUcm9tZXkgIDx0cm9tZXlAY3lnbnVzLmNvbT4KCgkqIGphdmEtdHJlZS5oOiBBZGRlZCBpbml0IHN0YXRlIGVudW0uCgkqIGRlY2wuYyAoZW1pdF9pbml0X3Rlc3RfaW5pdGlhbGl6YXRpb24pOiBJbml0aWFsaXplIGNsYXNzCglpbml0aWFsaXphdGlvbiBjaGVjayB2YXJpYWJsZSBieSBsb29raW5nIGF0IGNsYXNzJyBzdGF0ZS4KCjIwMDAtMDUtMTkgIFRvbSBUcm9tZXkgIDx0cm9tZXlAY3lnbnVzLmNvbT4KCgkqIGphdmEtdHJlZS5oIChidWlsZF9pbnN0YW5jZW9mKTogRGVjbGFyZS4KCShidWlsZF9nZXRfY2xhc3MpOiBEZWNsYXJlLgoJKiBwYXJzZS55IChwYXRjaF9iaW5vcCk6IFVzZSBidWlsZF9pbnN0YW5jZW9mLgoJKiBleHByLmMgKGJ1aWxkX2luc3RhbmNlb2YpOiBOZXcgZnVuY3Rpb24uICBJZiBjbGFzcyBpcyBmaW5hbCwKCWRvbid0IG1ha2UgYSBmdW5jdGlvbiBjYWxsLgoJKGV4cGFuZF9qYXZhX0lOU1RBTkNFT0YpOiBVc2UgaXQuCgkoYnVpbGRfZ2V0X2NsYXNzKTogTmV3IGZ1bmN0aW9uLgoKMjAwMC0wNS0xOCAgQWxleGFuZHJlIE9saXZhICA8b2xpdmFAbHNkLmljLnVuaWNhbXAuYnI+CgoJKiBqY2Ytd3JpdGUuYyAoZ2VuZXJhdGVfY2xhc3NmaWxlKTogU2NhbiB0aGUgc291cmNlX2ZpbGUgZm9yCglzbGFzaGVzIHdpdGggdGhlIHJpZ2h0IHBvaW50ZXIgdmFyaWFibGUuCgpXZWQgTWF5IDE3IDE3OjI3OjQ0IDIwMDAgIEFuZHJldyBDYWduZXkgIDxjYWduZXlAYjEuY3lnbnVzLmNvbT4KCgkqIGxhbmcuYyAobGFuZ19kZWNvZGVfb3B0aW9uKTogVXBkYXRlIC1XdW51c2VkIGZsYWdzIGJ5IGNhbGxpbmcKCXNldF9XdW51c2VkLgoJKiBkZWNsLmMgKHBvcGxldmVsKTogUmVwbGFjZSB3YXJuX3VudXNlZCB3aXRoIHdhcm5fdW51c2VkX2xhYmVsLgoKMjAwMC0wNS0wOSAgWmFjayBXZWluYmVyZyAgPHphY2tAd29sZXJ5LmN1bWIub3JnPgoKCSogY2hlY2tfaW5pdC5jIChjaGVja19pbml0KTogQ29uc3RpZnkgbG9jYWwgY2hhciAqLgoJKiBjbGFzcy5jIChwdXNoX2NsYXNzKTogQ29uc3RpZnkgbG9jYWwgY2hhciAqLgoJKiBqYXZhX3RyZWUuaDogVXBkYXRlIHByb3RvdHlwZXMuCgkqIGpjZi1pby5jIChvcGVuX2NsYXNzKTogQ29uc3RpZnkgZmlsZW5hbWUgcGFyYW1ldGVyIGFuZAoJcmV0dXJuIHZhbHVlLgoJKGZpbmRfY2xhc3MpOiBSZW1vdmUgcmVkdW5kYW50IHN0cmluZyBjb3B5LiAgQ2FzdCByZXR1cm4gZnJvbQoJb3Blbl9jbGFzcy4KCSogamNmLXBhcnNlLmMgKHJlYWRfY2xhc3MsIHBhcnNlX2NsYXNzX2ZpbGUsIHl5cGFyc2UpOgoJQ29uc3RpZnkgbG9jYWwgY2hhciAqLgoJKiBqY2Ytd3JpdGUuYyAoZ2VuZXJhdGVfYnl0ZWNvZGVfaW5zbnMsIGdlbmVyYXRlX2NsYXNzZmlsZSk6CglDb25zdGlmeSBsb2NhbCBjaGFyICouCgkqIGpjZi5oIChKQ0YpOiBDb25zdGlmeSBmaWxlbmFtZSBhbmQgY2xhc3NuYW1lLgoJKEpDRl9GSU5JU0gpOiBDYXN0IGFyZ3MgdG8gRlJFRSB0byBjaGFyICogd2hlbiBhcHByb3ByaWF0ZS4KCSogbGFuZy5jIChpbml0X3BhcnNlKTogQ29uc3RpZnkgcGFyYW1ldGVyIGFuZCByZXR1cm4gdmFsdWUuCgkqIGxleC5jIChqYXZhX2dldF9saW5lX2NvbCk6IENvbnN0aWZ5IGZpbGVuYW1lIHBhcmFtZXRlci4KCSogcGFyc2UuaDogQ29uc3RpZnkgcGFyc2VyX2N0eHQuZmlsZW5hbWUuICBVcGRhdGUgcHJvdG90eXBlcy4KCSogcGFyc2UueSAoamF2YV9wYXJzZXJfY29udGV4dF9zdXNwZW5kLAoJaXNzdWVfd2FybmluZ19lcnJvcl9mcm9tX2NvbnRleHQsIHNhZmVfbGF5b3V0X2NsYXNzKTogQ29uc3RpZnkKCWxvY2FsIGNoYXIgKi4KCSogcGFyc2UuYzogUmVnZW5lcmF0ZS4KCjIwMDAtMDUtMDggIFRvbSBUcm9tZXkgIDx0cm9tZXlAY3lnbnVzLmNvbT4KCgkqIGV4cHIuYyAoYnVpbGRfam5pX3N0dWIpOiBDYWNoZSB0aGUgcmVzdWx0IG9mCglfSnZfTG9va3VwSk5JTWV0aG9kLgoKMjAwMC0wNS0wNSAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBkZWNsLmMgKHByZWRlZl9maWxlbmFtZXNfc2l6ZSk6IE5vdyA3LgoJKHByZWRlZl9maWxlbmFtZXMpOiBOZXcgc2V2ZW50aCBlbnRyeS4KCjIwMDAtMDUtMDQgIFRvbSBUcm9tZXkgIDx0cm9tZXlAY3lnbnVzLmNvbT4KCgkqIGJvZWhtLmMgKG1hcmtfcmVmZXJlbmNlX2ZpZWxkcyk6IERvbid0IG1hcmsgUmF3RGF0YSBmaWVsZHMuCglLZWVwIHRyYWNrIG9mIHdoZW4gd2UndmUgc2VlbiBhIHJlZmVyZW5jZSBmaWVsZCBhZnRlciBhCglub24tcmVmZXJlbmNlIGZpZWxkLgoJKGdldF9ib2VobV90eXBlX2Rlc2NyaXB0b3IpOiBIYW5kbGUgY2FzZSB3aGVyZSB3ZSBzZWUKCW5vbi1yZWZlcmVuY2UgZmllbGRzIGJ1dCBubyB0cmFpbGluZyByZWZlcmVuY2UgZmllbGQuCgkqIGRlY2wuYyAocmF3ZGF0YV9wdHJfdHlwZV9ub2RlKTogRGVmaW5lLgoJKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogSW5pdGlhbGl6ZSByYXdkYXRhX3B0cl90eXBlX25vZGUuCgkqIGphdmEtdHJlZS5oIChyYXdkYXRhX3B0cl90eXBlX25vZGUpOiBEZWNsYXJlLgoKMjAwMC0wNS0wNCAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogamNmLWR1bXAuYyAoU1BFQ0lBTF9JSU5DKTogRW5zdXJlIGFyZ3VtZW50cyBtYXRjaCBmb3JtYXQKCXNwZWNpZmllcnMgaW4gY2FsbHMgdG8gZnByaW50Zi4KCjIwMDAtMDUtMDMgIEFuZHJldyBIYWxleSAgPGFwaEBjeWdudXMuY29tPgoKCSogZXhwci5jIChidWlsZF9qYXZhX2pzcik6IFVzZSBlbWl0X2p1bXAsIG5vdCBleHBhbmRfZ290by4KCgkqIGphdmFvcC5oIChXT1JEX1RPX0lOVCk6IE5ldyBmdW5jdGlvbi4KCShJTU1FRElBVEVfczQpOiBVc2UgV09SRF9UT19JTlQuCgkqIGpjZi5oIChKUE9PTF9JTlQpOiBEaXR0by4KCgkqIGdqYXZhaC5jIChkZWNvZGVfc2lnbmF0dXJlX3BpZWNlKTogRG9uJ3QgdHJlYXQgYCQnIGFzIG5hbWVzcGFjZQoJc2VwYXJhdG9yLgoKMjAwMC0wNC0xOSAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgoKCSogY2xhc3MuYyAoYWRkX21ldGhvZF8xKTogU2V0IGJvdGggREVDTF9FWFRFUk5BTCBhbmQgTUVUSE9EX05BVElWRQoJb24gbmF0aXZlIGZ1bmN0aW9uLgoJKiBqY2YtcGFyc2UuYyAocGFyc2VfY2xhc3NfZmlsZSk6IENhbGwgYnVpbGRfam5pX3N0dWIgZm9yIG5hdGl2ZQoJSk5JIG1ldGhvZHMuCgkqIGV4cHIuYyAoYnVpbGRfam5pX3N0dWIpOiBOZXcgZnVuY3Rpb24uCgkqIGxhbmctc3BlY3MuaDogLWZqbmkgYW5kIC1mZW1pdC1jbGFzcy1maWxlIGFyZSBpbmNvbXBhdGlibGUuCgkqIHBhcnNlLmM6IFJlYnVpbHQuCgkqIHBhcnNlLnkgKGphdmFfY29tcGxldGVfZXhwYW5kX21ldGhvZHMpOiBFeHBhbmQgYSBuYXRpdmUgbWV0aG9kCglhbmQgY2FsbCBidWlsZF9qbmlfc3R1YiBpZiAtZmpuaSBnaXZlbi4KCSogbGFuZy1vcHRpb25zLmg6IERvY3VtZW50IC1mam5pLgoJKiBsYW5nLmMgKGZsYWdfam5pKTogTmV3IGdsb2JhbC4KCShsYW5nX2Zfb3B0aW9ucyk6IEFkZGVkIGBqbmknIGVudHJ5LgoJKiBqYXZhLXRyZWUuaCAoc29mdF9sb29rdXBqbmltZXRob2Rfbm9kZSwKCXNvZnRfZ2V0am5pZW52bmV3ZnJhbWVfbm9kZSwgc29mdF9qbmlwb3BzeXN0ZW1mcmFtZV9ub2RlKToKCURlY2xhcmUuCgkoZmxhZ19qbmkpOiBEZWNsYXJlLgoJKGJ1aWxkX2puaV9zdHViKTogRGVjbGFyZS4KCShzdHJ1Y3QgbGFuZ19kZWNsKTogQWRkZWQgYG5hdGl2ZScgZmxhZy4KCShNRVRIT0RfTkFUSVZFKTogUmVkZWZpbmVkIHRvIHVzZSBgbmF0aXZlJyBmaWVsZCBvZiBsYW5nIHNwZWNpZmljCglzdHJ1Y3R1cmUuCgkqIGRlY2wuYyAoc29mdF9sb29rdXBqbmltZXRob2Rfbm9kZSwgc29mdF9nZXRqbmllbnZuZXdmcmFtZV9ub2RlLAoJc29mdF9qbmlwb3BzeXN0ZW1mcmFtZV9ub2RlKTogTmV3IGdsb2JhbHMuCgkoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBTZXQgdGhlbS4gIF9Kdl9Jbml0Q2xhc3Mgb25seSB0YWtlcyBvbmUKCWFyZ3VtZW50LgoKCSogamF2YS10cmVlLmRlZjogUHV0IGludG8gYEMnIG1vZGUuCgoyMDAwLTA0LTI3ICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CgoJRml4IGZvciBQUiBnY2ovMjoKCSogZXhwci5jIChleHBhbmRfaW52b2tlKTogR2VuZXJhdGUgY2hlY2sgdG8gc2VlIGlmIG9iamVjdCBwb2ludGVyCglpcyBudWxsIGluIG5vbnZpcnR1YWwgaW52b2NhdGlvbiBjYXNlLgoJKiBqYXZhLXRyZWUuaCAoc29mdF9udWxscG9pbnRlcl9ub2RlKTogRGVjbGFyZS4KCSogZGVjbC5jIChzb2Z0X251bGxwb2ludGVyX25vZGUpOiBOZXcgZ2xvYmFsLgoJKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogSW5pdGlhbGl6ZSBzb2Z0X251bGxwb2ludGVyX25vZGUuCgkqIHBhcnNlLnkgKGludm9jYXRpb25fbW9kZSk6IFJldHVybiBJTlZPS0VfTk9OVklSVFVBTCBmb3IgYGZpbmFsJwoJb3IgYHByaXZhdGUnIG1ldGhvZHMuCgkocGF0Y2hfaW52b2tlKTogSGFuZGxlIElOVk9LRV9OT05WSVJUVUFMIGNhc2UuCgpXZWQgQXByIDI2IDE0OjI5OjMzIDIwMDAgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogZGVjbC5jIChjb21wbGV0ZV9zdGFydF9qYXZhX21ldGhvZCk6IERvbid0IGNhbGwgX0p2X0luaXRDbGFzcwoJZnJvbSA8Y2xpbml0PgoKMjAwMC0wNC0yNiAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgoKCSogemV4dHJhY3QuYyAoZmluZF96aXBfZmlsZV9zdGFydCk6IE5ldyBmdW5jdGlvbi4KCShyZWFkX3ppcF9hcmNoaXZlKTogVXNlIGl0LgoKMjAwMC0wNC0yNSAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBwYXJzZS55IChyZWdpc3Rlcl9pbmNvbXBsZXRlX3R5cGUpOiBIYW5kbGUgSkRFUF9BTk9OWU1PVVMuCgoyMDAwLTA0LTI0ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIGNsYXNzLmMgKGNvbW1vbl9lbmNsb3NpbmdfY29udGV4dF9wKTogTmV3IGZ1bmN0aW9uLgoJKiBqYXZhLXRyZWUuaCAoY29tbW9uX2VuY2xvc2luZ19jb250ZXh0X3ApOiBBZGRlZCBwcm90b3R5cGUuCgkqIHBhcnNlLmggKElOTkVSX0VOQ0xPU0lOR19TQ09QRV9DSEVDSyk6IFJlbGF4ZWQgdGVzdCB0byBhbGxvdwoJY2xhc3NlcyBzaGFyaW5nIGFuIG91dGVyIGNvbnRleHQgd2l0aCB0aGUgY3VycmVudCBpbnN0YW5jZS4KCSogcGFyc2UueSAoYnVpbGRfYWNjZXNzX3RvX3RoaXNuKTogRml4ZWQgbGVhZGluZyBjb21tZW50LgoJKHZlcmlmeV9jb25zdHJ1Y3Rvcl9zdXBlcik6IE5ldyBsb2NhbCBgc3VwcGVyX2lubmVyJy4gU2tpcAoJZW5jbG9zaW5nIGNvbnRleHQgYXJndW1lbnQgaW4gdGhlIGNhc2Ugb2YgaW5uZXIgY2xhc3MgY29uc3RydWN0b3JzLgoJKHBhdGNoX21ldGhvZF9pbnZvY2F0aW9uKTogSW5zZXJ0IHByb3BlciBjb250ZXh0IGFzIHNlY29uZAoJcGFyYW1ldGVyIHRvIHB1cmUgaW5uZXIgY2xhc3MgY29uc3RydWN0b3Igc3VwZXIgaW52b2NhdGlvbnMuCgpNb24gQXByIDI0IDE0OjU5OjM2IDIwMDAgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogcGFyc2UueSAoZW5kX2NsYXNzX2RlY2xhcmF0aW9uKTogUmVzZXQgdGhlIGludGVyZmFjZSBudW1iZXIKCWNvdW50ZXIuCgoyMDAwLTA0LTI0ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnkgKHNvdXJjZV9zdGFydF9qYXZhX21ldGhvZCk6IERlbGV0ZWQgdW5uZWNlc3NhcnkgY29kZS4KCShwYXRjaF9tZXRob2RfaW52b2NhdGlvbik6IEZpeGVkIGNvbW1lbnQuCgoyMDAwLTA0LTI0ICBSb2JlcnQgTGlwZSA8cm9iZXJ0bGlwZUB1c2EubmV0PgoKCSogcGFyc2UuaCAoX2pkZXApOiBNZW1iZXIgYGtpbmQnIG5vdyBFTlVNX0JJVEZJRUxELgoKMjAwMC0wNC0yMyAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgoKCSogYm9laG0uYyAobWFya19yZWZlcmVuY2VfZmllbGRzKTogVXNlIGludF9ieXRlX3Bvc2l0aW9uLgoKMjAwMC0wNC0yMiAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgoKCSogYm9laG0uYyAobWFya19yZWZlcmVuY2VfZmllbGRzKTogT25seSBjYWxsIGJ5dGVfcG9zaXRpb24gb24KCW5vbi1zdGF0aWMgZmllbGRzLgoKMjAwMC0wNC0yMiAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgoKCSogYm9laG0uYyAobWFya19yZWZlcmVuY2VfZmllbGRzKTogQWRkZWQgYGxhc3Rfdmlld19pbmRleCcKCWFyZ3VtZW50LiAgVXNlIERFQ0xfRklFTERfT0ZGU0VUIHRvIGRldGVybWluZSBmaWVsZCdzIG9mZnNldC4KClRodSBBcHIgMjAgMTc6NDE6MjggMjAwMCAgTW8gRGVKb25nICA8bWRlam9uZ0BjeWdudXMuY29tPgoKCSogcGFyc2UuaCAoSU5URVJGQUNFX0lOTkVSX01PRElGSUVSUyk6IE5ldyBtYWNyby4KCSogcGFyc2UueSAoY2hlY2tfY2xhc3NfaW50ZXJmYWNlX2NyZWF0aW9uKTogRml4ZWQgY29tbWVudHMuIFNlbGVjdAoJcGVybWl0dGVkIG1vZGlmaWVycyBmb3IgKGlubmVyKSBpbnRlcmZhY2VzLiBDaGFuZ2VkIGVycm9yIG1lc3NhZ2UKCXRvIHJlcG9ydCByZWplY3RlZCBtb2RpZmllcnMgdXNlZCB3aXRoIGxvY2FsIGNsYXNzZXMuCgoyMDAwLTA0LTIwICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIHBhcnNlLmggKElOTkVSX0VOQ0xPU0lOR19TQ09QRV9DSEVDSyk6IEltbWVkaWF0ZSBpbm5lciBjbGFzc2VzCglvZiBkaXJlY3RseSBpbmhlcml0ZWQgdHlwZSBjb25zaWRlcmVkIGluIHNjb3BlLgoJKiBwYXJzZS55IChkb19yZXNvbHZlX2NsYXNzKTogU2VhcmNoIGluaGVyaXRlZCBjbGFzc2VzIGZvciBpbm5lcgoJY2xhc3Nlcy4KCjIwMDAtMDQtMjAgIFRvbSBUcm9tZXkgIDx0cm9tZXlAY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnkgKG5vdF9hY2Nlc3NpYmxlX3ApOiBVc2UgbWVtYmVyJ3MgY2xhc3MsIG5vdCBjdXJyZW50CgljbGFzcywgd2hlbiBkb2luZyBpbmhlcml0YW5jZSBjaGVjayBmb3IgcHJvdGVjdGVkIHJlZmVyZW5jZS4KCUZpeGVzIFBSIGdjai8xMjQuCgpUaHUgQXByIDIwIDE4OjIwOjU4IDIwMDAgIEphc29uIFNjaHJvZWRlciAgPHNocm9kZUBzdWJuYXR1cmUuY29tPgoKCSogamNmLWR1bXAuYyAoU1BFQ0lBTF9JSU5DKTogRml4ZWQgdHlwbyBwcmludGluZyBpaW5jIGluc3RydWN0aW9uLgoKMjAwMC0wNC0xOSAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBwYXJzZS55IChsb29rdXBfZmllbGRfd3JhcHBlcik6IFNlYXJjaCBmb3IgZmluYWwgbG9jYWwgYWxpYXNlcy4KCShyZXNvbHZlX2V4cHJlc3Npb25fbmFtZSk6IExldCBsb29rdXBfZmllbGRfd3JhcHBlciBzZWFyY2ggZm9yCglmaW5hbCBsb2NhbCBhbGlhc2VzLiBGb3JjZSB0aGUgdmFsdWUgb2YgYG5hbWUnIGlmIG9uZSBpcyBmb3VuZC4KCShxdWFsaWZ5X2FtYmlndW91c19uYW1lKTogQ09OVkVSVF9FWFBSIGlzIGVub3VnaCB0byBub3cgd2UgaGF2ZQoJYW4gZXhwcmVzc2lvbiBuYW1lLiBGaXhlZCBjb21tZW50cy4KCjIwMDAtMDQtMTkgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogcGFyc2UueSAoeXllcnJvcik6IGBtc2cnIGNhbiBiZSBudWxsLCBkb24ndCB1c2UgaXQgaW4gdGhhdCBjYXNlLgoKMjAwMC0wNC0xOSAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgoKCSogZ2phdmFoLmMgKGN4eF9rZXl3b3JkX3N1YnN0KTogQXZvaWQgcG90ZW50aWFsIGluZmluaXRlIGxvb3AuCgoyMDAwLTA0LTE4ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnkgKG1heWJlX21ha2VfbmVzdGVkX2NsYXNzX25hbWUpOiBVc2UgYG9ic3RhY2tfZ3JvdzAnLgoKMjAwMC0wNC0xOCAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgoKCVBSIGdjai8yMTE6CgkqIGdqYXZhaC5jICh1dGY4X2NtcCk6IENoYW5nZWQgcmV0dXJuIHZhbHVlLgoJKGN4eF9rZXl3b3JkX3N1YnN0KTogSGFuZGxlIGFsbCBDKysga2V5d29yZHMuICBBbGxvY2F0ZSBuZXcgcmV0dXJuCglyZXN1bHQuCgkoY3h4X2tleXdvcmRzKTogTmV3IGdsb2JhbC4KCShnZXRfZmllbGRfbmFtZSk6IEhhbmRsZSBuZXcgcmVzdWx0IG9mIGN4eF9rZXl3b3JkX3N1YnN0LgoJKHByaW50X21ldGhvZF9pbmZvKTogTGlrZXdpc2UuCgoyMDAwLTA0LTE3ICBCcnljZSBNY0tpbmxheSAgPGJyeWNlQGFsYmF0cm9zcy5jby5uej4KCgkqIGdqYXZhaC5jIChwcmludF9uYW1lX2Zvcl9zdHViX29yX2puaSk6IERvbid0IHByZWZpeCBtZXRob2QgbmFtZXMKCXdpdGggYSBuZXdsaW5lLCBmb3IgQ05JLgoJKHByaW50X3N0dWJfb3Jfam5pKTogUHJpbnQgYSBzcGFjZSBvciBuZXdsaW5lIGJlZm9yZSBtZXRob2QgbmFtZSBmb3IKCUNOSSBhcyB3ZWxsIGFzIEpOSS4KCShwcmludF9jeHhfY2xhc3NuYW1lKTogRG9uJ3Qgd3JpdGUgbGVhZGluZyAiOjoiIGluIENOSSBzdHViIG1ldGhvZC4KCShwcm9jZXNzX2ZpbGUpOiBJbmNsdWRlIGdjai9jbmkuaCBpZiBnZW5lcmF0aW5nIENOSSBzdHVicy4KCjIwMDAtMDQtMTYgIFRvbSBUcm9tZXkgIDx0cm9tZXlAY3lnbnVzLmNvbT4KCgkqIGdqYXZhaC5jIChkZWNvbXBpbGVfbWV0aG9kKTogVXNlIHByaW50X2ZpZWxkX25hbWUuCglGaXhlcyBQUiBnY2ovMjA1LgoKMjAwMC0wNC0xNCAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBwYXJzZS55IChqYXZhX2V4cGFuZF9jbGFzc2VzKTogUmV2ZXJzZSB0aGUgcGFja2FnZSBsaXN0IG9uY2UuCgkoamF2YV9jb21wbGV0ZV9saHMpOiBQTFVTX0VYUFI6IGRvbid0IHRyeSByaHMgYW5kIGxocyBhdCBzdHJpbmcKCXJlZHVjdGlvbi4KCShwYXRjaF9iaW5vcCk6IE5ldyB0ZW1wIGBjbicuIENhbGwgcGF0Y2hfc3RyaW5nIG9uIExIUy9SSFMgb2YKCXRoZSBgPT0nIGFuZCBgIT0nIG9wZXJhdG9ycy4KCjIwMDAtMDQtMDUgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogamNmLXdyaXRlLmMgKGdlbmVyYXRlX2J5dGVjb2RlX2luc25zKTogQXQgaW52b2thdGlvbiB0aW1lLAoJYWx3YXlzIHJlbGF0ZSBhbiBpbnRlcmZhY2UgbWV0aG9kIHRvIHRoZSB0eXBlIG9mIGl0cyBzZWxlY3Rvci4KCjIwMDAtMDQtMDUgIFRvbSBUcm9tZXkgIDx0cm9tZXlAY3lnbnVzLmNvbT4KCglGaXggZm9yIFBSIGdjai8yOgoJKiBleHByLmMgKGV4cGFuZF9pbnZva2UpOiBHZW5lcmF0ZSBjaGVjayB0byBzZWUgaWYgb2JqZWN0IHBvaW50ZXIKCWlzIG51bGwgaW4gbm9udmlydHVhbCBpbnZvY2F0aW9uIGNhc2UuCgkqIGphdmEtdHJlZS5oIChzb2Z0X251bGxwb2ludGVyX25vZGUpOiBEZWNsYXJlLgoJKiBkZWNsLmMgKHNvZnRfbnVsbHBvaW50ZXJfbm9kZSk6IE5ldyBnbG9iYWwuCgkoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBJbml0aWFsaXplIHNvZnRfbnVsbHBvaW50ZXJfbm9kZS4KCSogcGFyc2UueSAoaW52b2NhdGlvbl9tb2RlKTogUmV0dXJuIElOVk9LRV9OT05WSVJUVUFMIGZvciBgZmluYWwnCglvciBgcHJpdmF0ZScgbWV0aG9kcy4KCShwYXRjaF9pbnZva2UpOiBIYW5kbGUgSU5WT0tFX05PTlZJUlRVQUwgY2FzZS4KCjIwMDAtMDQtMDUgIFRvbSBUcm9tZXkgIDx0cm9tZXlAY3lnbnVzLmNvbT4KCglGaXggZm9yIFBSIGdjai8xNDA6CgkqIHBhcnNlLnkgKGNoZWNrX2ZpbmFsX2Fzc2lnbm1lbnQpOiBSZWNvZ25pemUgYXNzaWdubWVudHMgdG8gdGhlCglgbGVuZ3RoJyBmaWVsZCBvZiBhbiBhcnJheSB3aGVuIGdlbmVyYXRpbmcgY2xhc3MgZmlsZXMuCgoyMDAwLTA0LTA1ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIGNsYXNzLmMgKGRlY2xfaGFzaCk6IFByb3RvdHlwZSByZW1vdmVkLgoJKGRlY2xfY29tcGFyZSk6IExpa2V3aXNlLgoKMjAwMC0wNC0wNSAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgoKCSogcGFyc2UuaCAoVEhJU19NT0RJRklFUl9PTkxZKTogQ2hhbmdlZCBtZWFuaW5nIG9mIGB2JyBwYXJhbWV0ZXIuCgkqIHBhcnNlLnkgKGNoZWNrX21vZGlmaWVyc19jb25zaXN0ZW5jeSk6IENoZWNrIGZvciBmaW5hbC92b2xhdGlsZQoJY2xhc2guICBGaXhlcyBQUiBnY2ovMTY0LgoKMjAwMC0wNC0wNSAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBjbGFzcy5jOiAoamF2YV9oYXNoX2hhc2hfdHJlZV9ub2RlKTogUmVuYW1lZCBmcm9tIGBkZWNsX2hhc2gnLAoJbWFkZSBnbG9iYWwuCgkoamF2YV9oYXNoX2NvbXBhcmVfdHJlZV9ub2RlKTogUmVuYW1lZCBmcm9tIGBkZWNsX2NvbXBhcmUsIG1hZGUKCWdsb2JhbC4KCShhZGRfbWV0aG9kXzEpOiBVc2UgYGphdmFfaGFzaF9oYXNoX3RyZWVfbm9kZScgYW5kCglgamF2YV9oYXNoX2NvbXBhcmVfdHJlZV9ub2RlJy4KCSogamF2YS10cmVlLmg6IChqYXZhX2hhc2hfaGFzaF90cmVlX25vZGUpOiBQcm90b3R5cGVkLgoJKGphdmFfaGFzaF9jb21wYXJlX3RyZWVfbm9kZSk6IExpa2V3aXNlLgoJKiBwYXJzZS55IChmaW5kX2FwcGxpY2FibGVfYWNjZXNzaWJsZV9tZXRob2RzX2xpc3QpOiBDcmVhdGUsCglkZWxldGUgYW5kIHVzZSBhIGhhc2ggdGFibGUgdG8gcmVtZW1iZXIgYWxyZWFkeSBzZWFyY2hlZCBpbnRlcmZhY2VzLgoKMjAwMC0wNC0wMyAgTWF0dCBXZWxzaCAgPG1kd0Bjcy5iZXJrZWxleS5lZHU+CgoJKiBqY2YtZGVwZW5kLmMgKGFkZF9lbnRyeSk6IEZpeGVkIGJ1ZyB3aGVyZSBsaXN0IHdhcyBhbHdheXMgcmVwbGFjZWQKCXdpdGggbGF0ZXN0IGVudHJ5LgoKMjAwMC0wNC0wNCAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogYm9laG0uYyAobWFya19yZWZlcmVuY2VfZmllbGRzLCBzZXRfYml0KTogUHJvdG90eXBlLgoJKHNldF9iaXQpOiBVbi1BTlNJLWZ5IGRlZmluaXRpb24uCgoJKiBjbGFzcy5jIChpbml0X3Rlc3RfaGFzaF9uZXdmdW5jLCBkZWNsX2hhc2gsIGRlY2xfY29tcGFyZSk6CglQcm90b3R5cGUuCgoJKiBkZWNsLmMgKGVtaXRfaW5pdF90ZXN0X2luaXRpYWxpemF0aW9uKTogTGlrZXdpc2UuCgoJKiBnamF2YWguYyAoam5pX3ByaW50X2NoYXIpOiBMaWtld2lzZS4KCgkqIHBhcnNlLnkgKGNyZWF0ZV9uZXdfcGFyc2VyX2NvbnRleHQpOiBMaWtld2lzZS4KClRodSBNYXIgMzAgMTU6MjY6NTYgMjAwMCAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBleHByLmMgKGphdmFfbGFuZ19leHBhbmRfZXhwcik6IEFkZGVkIEFudGhvbnkncyBUaHUgSmFuIDYgMjAwMAoJcGF0Y2ggbWlzc2luZyBodW5rLiBGaXhlZCBpbmRlbnRhdGlvbi4KCjIwMDAtMDMtMzAgIFRvbSBUcm9tZXkgIDx0cm9tZXlAY3lnbnVzLmNvbT4KCgkqIGdqYXZhaC5jIChEX05BTl9NQVNLKTogT25seSBkZWZpbmUgYXMgd29yZC1yZXZlcnNlZCB3aGVuCglIT1NUX0ZMT0FUX1dPUkRTX0JJR19FTkRJQU4gYW5kIEhPU1RfV09SRFNfQklHX0VORElBTiBkaXNhZ3JlZS4KCjIwMDAtMDMtMjggIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogcGFyc2Utc2Nhbi55IChwb3BfY2xhc3NfY29udGV4dCk6IFJlc2V0IGBpbm5lcl9xdWFsaWZpZXJfbGVuZ3RoJwoJd2hlbiBuZWdhdGl2ZSAqYmVmb3JlKiB1c2luZyBpdCBhcyBhbiBhcnJheSBpbmRleC4KCSogQ2hhbmdlTG9nOiBGaXhlZCB0eXBvLgoKMjAwMC0wMy0yOCAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBwYXJzZS1zY2FuLnkgKHBvcF9jbGFzc19jb250ZXh0KTogUmVzZXQgYGlubmVyX3F1YWxpZmllcl9sZW5ndGgnCgl0byAwIHdoZW4gaXQgcmVhY2hlcyAtMS4KCjIwMDAtMDMtMjcgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogamNmLXBhcnNlLmMgKGdldF9jb25zdGFudCk6IFByb3Blcmx5IGNhc3QgYG51bScgZHVyaW5nIHRoZQoJaW52b2NhdGlvbiBvZiBgYWRkX2RvdWJsZScuCgkqIGpjZi13cml0ZS5jIChwdXNoX2xvbmdfY29uc3QpOiBQcm9wZXJseSBjYXN0IGBsbycgYmVmb3JlCgljb21wYXJpbmcgaXQgdG8gc2hvcnQgYm91bmRzLgoJKiBwYXJzZS1zY2FuLnkgKGludGVyZmFjZV9kZWNsYXJhdGlvbjopOiBSdWxlIHJlLWFycmFuZ2Ugc28gdGhhdAoJYGludGVyZmFjZV9ib2R5OicgaXMgcmVkdWNlZCBhZnRlciB0aGUgY3VycmVudCBpbnRlcmZhY2UgaXMKCXB1c2hlZC4KCjIwMDAtMDMtMjYgIFRvbSBUcm9tZXkgIDx0cm9tZXlAY3lnbnVzLmNvbT4KCgkqIGp2c3BlYy5jIChqdmdlbm1haW5fc3BlYyk6IEFkZCBgJXs8Li4ufScgY29uc3RydWN0IGZvciBlYWNoCglKYXZhLXNwZWNpZmljIGAtZicgb3B0aW9uLgoKU3VuIE1hciAyNiAxMTozNzo1NSAyMDAwICBSaWNoYXJkIEtlbm5lciAgPGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1PgoKCSogZGVjbC5jIChpbml0X2RlY2xfcHJvY2Vzc2luZyk6IE9ubHkgY2FsbCBpbml0aWFsaXplX3NpemV0eXBlcyBvbmNlLgoJQWRqdXN0IG9yZGVyIG9mIG1ha2luZyB0eXBlcy4KCU1ha2UgYml0c2l6ZV8qX25vZGUgdmFsdWVzLgoKU2F0IE1hciAyNSAwOToxMjoxMCAyMDAwICBSaWNoYXJkIEtlbm5lciAgPGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1PgoKCSogY2xhc3MuYyAobWFrZV9maWVsZF92YWx1ZSk6IFVzZSBieXRlX3Bvc2l0aW9uLgoJKiBleHByLmMgKEpBVkFfQVJSQVlfTEVOR1RIX09GRlNFVCk6IFVzZSBieXRlX3Bvc2l0aW9uLgoJKGphdmFfYXJyYXlfZGF0YV9vZmZzZXQpOiBMaWtld2lzZS4KCSogamF2YS10cmVlLmggKE1BWUJFX0NSRUFURV9UWVBFX1RZUEVfTEFOR19TUEVDSUZJQyk6IEFkZCBjYXNlIHRvCgliemVybyBjYWxsLgoKMjAwMC0wMy0yMiAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBwYXJzZS55IChjaGVja19hYnN0cmFjdF9tZXRob2RfZGVmaW5pdGlvbnMpOiBOZXcgbG9jYWwKCWBlbmRfdHlwZV9yZWFjaGVkJy4gTWFrZSBzdXJlIHdlIGFsc28gY29uc2lkZXIgYGVuZF90eXBlJy4KCShqYXZhX2NoZWNrX2Fic3RyYWN0X21ldGhvZF9kZWZpbml0aW9ucyk6IE1ha2Ugc3VyZSB3ZSBldmVudHVhbGx5Cgljb25zaWRlciBgamF2YS5sYW5nLk9iamVjdCcuCgkobWF5YmVfdXNlX2FjY2Vzc19tZXRob2QpOiBEb24ndCB1c2UgYWNjZXNzIG1ldGhvZCBpZiBub3QgaW4gdGhlCgljb250ZXh0IG9mIGEgcHVyZSBpbm5lciBjbGFzcyBvciBpZiB0aGUgbWV0aG9kJ3MgY29udGV4dCBpcyByaWdodC4KCShmaW5kX2FwcGxpY2FibGVfYWNjZXNzaWJsZV9tZXRob2RzX2xpc3QpOiBOZXcgc3RhdGljIGZsYWcKCWBvYmplY3RfZG9uZScuIERvbid0IHNlYXJjaCBhYnN0cmFjdCBjbGFzc2VzIGFzIGludGVyZmFjZXMuIEZpeGVkCglpbmRlbnRhdGlvbi4gRml4ZWQgdGhlIGBqYXZhLmxhbmcuT2JqZWN0JyBvbmx5IHNlYXJjaC4gU2VhcmNoCgljbGFzcyBpbnRlcmZhY2UocykgZmlyc3QsIHRoZW4gZnVsbHkgc2VhcmNoIGVuY2xvc2luZyBjb250ZXh0cy4KCShmaW5kX21vc3Rfc3BlY2lmaWNfbWV0aG9kc19saXN0KTogUGljayB0aGUgY2xvc2VzdCBjYW5kaWRhdGUgd2hlbgoJdGhleSdyZSBhbGwgYWJzdHJhY3QuCgpNb24gTWFyIDIwIDA4OjU4OjUxIDIwMDAgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogamNmLXdyaXRlLmMgKGdlbmVyYXRlX2J5dGVjb2RlX2luc25zKTogVFJZX0ZJTkFMTFlfRVhQUjoKCXByb3Blcmx5IGluaXRpYWxpemUgYGZpbmlzaGVkX2xhYmVsJy4gRG9uJ3QgZW1pdCBnb3RvcyBmb3IgZW1wdHkKCXRyeSBzdGF0ZW1lbnRzLgoKMjAwMC0wMy0xOSAgTWFydGluIHYuIEz2d2lzICA8bG9ld2lzQGluZm9ybWF0aWsuaHUtYmVybGluLmRlPgoKCSogZXhjZXB0LmMgKGVtaXRfaGFuZGxlcnMpOiBDbGVhciBjYXRjaF9jbGF1c2VzX2xhc3QuCgoyMDAwLTAzLTE3ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnkgKGNoZWNrX21ldGhvZF90eXBlc19jb21wbGV0ZSk6IE5ldyBmdW5jdGlvbi4KCShjcmVhdGVfY2xhc3MpOiBSZXNldCBhbm9ueW1vdXMgY2xhc3MgY291bnRlciBvbmx5IHdoZW4gc2VlaW5nIGFuCglub24gaW5uZXIgY2xhc3NlLgoJKGphdmFfY29tcGxldGVfY2xhc3MpOiBKREVQX01FVEhPRDogRG9uJ3QgcmVjb21wdXRlIHNpZ25hdHVyZQoJaWYgaW5jb21wbGV0ZS4KCjIwMDAtMDMtMTcgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogY2xhc3MuYyAoYnVpbGRfc3RhdGljX3JlZik6IEZpeGVkIGluZGVudGF0aW9uIGluIGNvbW1lbnQuCgkqIGphdmEtdHJlZS5kZWYgKFRSWV9FWFBSKTogRml4ZWQgdHlwbyBpbiBuYW1lLgoJKENMQVNTX0xJVEVSQUwpOiBMaWtld2lzZS4KCSogamF2YS10cmVlLmg6IChUWVBFX0RPVF9DTEFTUyk6IE5ldyBtYWNyby4KCShzdHJ1Y3QgbGFuZ190eXBlKTogTmV3IGZpZWxkIGBkb3RfY2xhc3MnLgoJKiBqY2Ytd3JpdGUuYyAoZ2VuZXJhdGVfYnl0ZWNvZGVfaW5zbnMpOiBGaXhlZCBlcnJvciBtZXNzYWdlLgoJKGdlbmVyYXRlX2NsYXNzZmlsZSk6IE1ldGhvZCBgY2xhc3MkJyBpcyBzeW50aGV0aWMuCgkqIHBhcnNlLnkgKGJ1aWxkX2RvX2NsYXNzX21ldGhvZCk6IE5ldyBmdW5jdGlvbi4KCShidWlsZF9kb3RfY2xhc3NfbWV0aG9kX2ludm9jYXRpb24pOiBMaWtld2lzZS4KCShqYXZhX2NvbXBsZXRlX2V4cGFuZF9tZXRob2RzKTogRXhwYW5kIFRZUEVfRE9UX0NMQVNTIGlmIG5lY2Vzc2FyeS4KCShyZXNvbHZlX3F1YWxpZmllZF9leHByZXNzaW9uX25hbWUpOiBIYW5kbGUgQ0xBU1NfTElURVJBTC4KCShxdWFsaWZ5X2FtYmlndW91c19uYW1lKTogTGlrZXdpc2UuCgkocGF0Y2hfaW5jb21wbGV0ZV9jbGFzc19yZWYpOiBJbnZva2Ugc3ludGhldGljIG1ldGhvZCBpZiBuZWNlc3NhcnkuCgkoYnVpbGRfdHJ5X3N0YXRlbWVudCk6IEZpeGVkIGxlYWRpbmcgY29tbWVudC4KCkZyaSBNYXIgMTcgMDg6MDk6MTQgMjAwMCAgUmljaGFyZCBLZW5uZXIgIDxrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdT4KCgkqIGNsYXNzLmMgKG1ha2VfZmllbGRfdmFsdWUpOiBQcm9wZXJseSBoYW5kbGUgc2l6ZXMuCgkoZ2V0X2Rpc3BhdGNoX3ZlY3Rvcik6IFVzZSB0cmVlX2xvd19jc3QgYW5kIGhvc3RfaW50ZWdlcnAuCgkobGF5b3V0X2NsYXNzX21ldGhvZCk6IENvdW50IHVzaW5nIHRyZWVzLgoJKiBkZWNsLmMgKHB1c2hfcHJvbW90ZWRfdHlwZSk6IFNldCBUWVBFX3tNSU4sTUFYfV9WQUxVRSB3aXRoIGNvcHlfbm9kZS4KCSogZXhwci5jIChqYXZhX2FycmF5X2RhdGFfb2Zmc2V0KTogVXNlIGludF9iaXRfcG9zaXRpb24uCgkoYnVpbGRfbmV3YXJyYXksIGJ1aWxkX2FuZXdhcnJheSk6IFVzZSBob3N0X2ludGVnZXJwIGFuZCB0cmVlX2xvd19jc3QuCgkoYnVpbGRfaW52b2tldmlydHVhbCk6IFVzZSB0cmVlX2xvd19jc3QgYW5kIGRvIGNvbXB1dGF0aW9ucyB3aXRoIHRyZWVzLgoKMjAwMC0wMy0xNiAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgoKCSogbGFuZy5jIChmbGFnX2hhc2hfc3luY2hyb25pemF0aW9uKTogTmV3IGdsb2JhbC4KCShsYW5nX2Zfb3B0aW9ucyk6IEFkZGVkIGBoYXNoLXN5bmNocm9uaXphdGlvbicuCgkqIGxhbmctb3B0aW9ucy5oOiBNZW50aW9uIC1maGFzaC1zeW5jaHJvbml6YXRpb24uCgkqIGphdmEtdHJlZS5oIChmbGFnX2hhc2hfc3luY2hyb25pemF0aW9uKTogRGVjbGFyZS4KCSogZXhwci5jIChqYXZhX2xhbmdfZXhwYW5kX2V4cHIpOiBPbmx5IHB1c2ggYHN5bmNfaW5mbycgdmFsdWUgd2hlbgoJaGFzaCB0YWJsZSBzeW5jaHJvbml6YXRpb24gaXMgZGlzYWJsZWQuCgkqIGRlY2wuYyAoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBPbmx5IHB1c2ggYHN5bmNfaW5mbycgdmFsdWUgd2hlbgoJaGFzaCB0YWJsZSBzeW5jaHJvbml6YXRpb24gaXMgZGlzYWJsZWQuCgkqIGNsYXNzLmMgKG1ha2VfY2xhc3NfZGF0YSk6IE9ubHkgcHVzaCBgc3luY19pbmZvJyBmaWVsZCB3aGVuIGhhc2gKCXRhYmxlIHN5bmNocm9uaXphdGlvbiBpcyBkaXNhYmxlZC4gIFJlbW92ZWQgZGVhZCBjb2RlLgoKMjAwMC0wMy0xNiAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgoKCSogbGFuZy5jIChsYW5nX2RlY29kZV9vcHRpb24pOiBFbmFibGUgLVd1bnVzZWQgd2hlbiAtV2FsbCBnaXZlbi4KCjIwMDAtMDMtMTUgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogcGFyc2UuaCAoSU5ORVJfRU5DTE9TSU5HX1NDT1BFX0NIRUNLKTogRGlzcmVnYXJkIGFub255bW91cwoJY2xhc3Nlcy4KCSogcGFyc2UueSAocGF0Y2hfbWV0aG9kX2ludm9jYXRpb24pOiBIYW5kbGUgYW5vbnltb3VzIGNsYXNzZXMKCWNyZWF0aW9uIGluIHN0YXRpYyBjb250ZXh0LgoKMjAwMC0wMy0xNSAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBwYXJzZS5oIChJTk5FUl9FTkNMT1NJTkdfU0NPUEVfQ0hFQ0spOiBOZXcgbWFjcm8uCgkqIHBhcnNlLnkgKHJlc29sdmVfcXVhbGlmaWVkX2V4cHJlc3Npb25fbmFtZSk6IFVzZSBpdC4KCShwYXRjaF9tZXRob2RfaW52b2NhdGlvbik6IExpa2V3aXNlLgoKMjAwMC0wMy0xNSAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBwYXJzZS55IChyZWdpc3Rlcl9pbmNvbXBsZXRlX3R5cGUpOiBKREVQX0VOQ0xPU0lORyBzZXQKCWRlcGVuZGluZyBvbiB0aGUgdHlwZSBvZiBkZXBlbmRlbmN5IHdoaWNoIGRpY3RhdGVzIHdoYXQgdGhlCgljdXJyZW50IGNsYXNzIGlzLgoJKHVucmVzb2x2ZWRfdHlwZV9wKTogUmVzb2x2ZWQgdHlwZXMgbGltaXRlZCB0byB0aGUgY3VycmVudCBjbGFzcy4KCjIwMDAtMDMtMTUgIFRvbSBUcm9tZXkgIDx0cm9tZXlAY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBTZXQgdHlwZSBvZiBgc3luY19pbmZvJyB0byBiZQoJcG9pbnRlciB0byBPYmplY3QuCgoJKiBib2VobS5jIChnZXRfYm9laG1fdHlwZV9kZXNjcmlwdG9yKTogQ29ycmVjdGx5IGNvbXB1dGUgYGJpdHMnLgoJQ29ycmVjdGx5IGNvbXB1dGUgYml0IG51bWJlciBmb3IgY3VycmVudCBzbG90LiAgWmVybyBgaGlnaCcgYW5kCglgbG93JyBpbiBEU19MRU5HVEggY2FzZS4gIERvbid0IHNraXAgaW5oZXJpdGVkIGZpZWxkcy4gIFVzZQoJbWFya19yZWZlcmVuY2VfZmllbGRzLgoJKG1hcmtfcmVmZXJlbmNlX2ZpZWxkcyk6IE5ldyBmdW5jdGlvbi4KClR1ZSBNYXIgMTQgMTc6MTU6NDEgMjAwMCAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBwYXJzZS55IChyZWdpc3Rlcl9pbmNvbXBsZXRlX3R5cGUpOiBGaXhlZCBpbml0aWFsaXphdGlvbiBvZgoJSkRFUF9FTkNMT1NJTkcuCgoyMDAwLTAyLTI4ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIHBhcnNlLXNjYW4ueSAoaW5uZXJfcXVhbGlmaWVyLCBpbm5lcl9xdWFsaWZpZXJfbGVuZ3RoKTogTmV3CglzdGF0aWMgZ2xvYmFscy4KCShwdXNoX2NsYXNzX2NvbnRleHQsIHBvcF9jbGFzc19jb250ZXh0KTogTmV3IGZ1bmN0aW9uLgoJKGNsYXNzX2JvZHk6KTogQ2FsbCBwb3BfY2xhc3NfY29udGV4dC4KCShpbnRlcmZhY2VfYm9keTopOiBMaWtld2lzZS4KCShJTk5FUl9RVUFMSUZJRVIpOiBOZXcgbWFjcm8uCgkocmVwb3J0X2NsYXNzX2RlY2xhcmF0aW9uKTogQ2hhbmdlZCBvdXRwdXQgZm9ybWF0IGFuZCB1c2UKCUlOTkVSX1FVQUxJRklFUi4gQ2FsbCBwdXNoX2NsYXNzX2NvbnRleHQuCgoyMDAwLTAyLTE0ICBBbmRyZXcgSGFsZXkgIDxhcGhAY3lnbnVzLmNvbT4KCgkqIGNoZWNrLWluaXQuYyAoY2hlY2tfaW5pdCk6IEFkZCBuZXcgY2FzZXMgZm9yIHVuYXJ5IGFuZCBiaW5hcnkKCXRyZWUgbm9kZXMuCgoyMDAwLTAzLTEzICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnkgKHJlc29sdmVfcGFja2FnZSk6IFNldCBgbmV4dCcgb25jZSBhIHR5cGUgbmFtZSBoYXMgYmVlbgoJcHJvZ3Jlc3NpdmVseSBkaXNjb3ZlcmVkLgoJKHJlc29sdmVfcXVhbGlmaWVkX2V4cHJlc3Npb25fbmFtZSk6IFByb3BhZ2F0ZSByZXNvbHV0aW9uIG9ubHkgaWYKCXRoZXJlIGFyZSByZW1haW5pbmcgcXVhbGlmaWVycy4gVGFrZSBpbnRvIGFjY291bnQgYHEnIG1pZ2h0IGhhdmUKCWJlZW4gY2xlYXJlZCBhZnRlciByZS1xdWFsaWZpY2F0aW9uLgoJKiBwYXJzZS55IChwYXRjaF9tZXRob2RfaW52b2NhdGlvbik6IE5ldyBsb2NhbCBgcmVzb2x2ZWQnLgoJU2VjdGlvbiBkZWFsaW5nIHdpdGggcXVhbGlmaWVkIGV4cHJlc3Npb24gcmV3cml0dGVuIHRvIHVzZQoJcmVzb2x2ZV9maWVsZF9hY2Nlc3MuCgpNb24gTWFyIDEzIDEyOjIxOjEzIDIwMDAgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogcGFyc2UuaCAoUFVTSF9DUEMpOiBGaXhlZCBpbmRlbnRhdGlvbi4KCShERUJVR19DUEMpOiBOZXcgbWFjcm8uCgkoU0VUX0NQQ19JTklUSUFMSVpFUl9TVE1ULCBTRVRfQ1BDX1NUQVRJQ19JTklUSUFMSVpFUl9TVE1ULAoJU0VUX0NQQ19JTlNUQU5DRV9JTklUSUFMSVpFUl9TVE1UKTogTmV3IG1hY3Jvcy4KCSogcGFyc2UueSAoY2xhc3NfYm9keV9kZWNsYXJhdGlvbjopOiBVc2UKCVNFVF9DUENfSU5TVEFOQ0VfSU5JVElBTElaRVJfU1RNVC4KCShtZXRob2RfZGVjbGFyYXRpb246KTogQ2hlY2sgZm9yIG51bGwgY3VycmVudF9mdW5jdGlvbl9kZWNsLgoJKHN0YXRpY19pbml0aWFsaXplcjopOiBVc2UgU0VUX0NQQ19TVEFUSUNfSU5JVElBTElaRVJfU1RNVC4KCShqYXZhX3BhcnNlcl9jb250ZXh0X3BvcF9pbml0aWFsaXplZF9maWVsZCk6IEJldHRlciBoYW5kbGluZyBvZgoJZW1wdHkgbGlzdHMuCgkobWF5YmVfbWFrZV9uZXN0ZWRfY2xhc3NfbmFtZSk6IE1hcmsgbmVzdGVkIGNsYXNzIG5hbWUgYXMKCXF1YWxpZmllZCB3aGVuIG5lY2Vzc2FyeS4KCShlbmRfY2xhc3NfZGVjbGFyYXRpb24pOiBEb24ndCBjYWxsIGphdmFfcGFyc2VfY29udGV4dF9yZXN1bWUgd2hlbgoJb25lIG9yIG1vcmUgZXJyb3Igb2NjdXJyZWQuCgkoYWRkX2lubmVyX2NsYXNzX2ZpZWxkcyk6IFVzZSBTRVRfQ1BDX0lOSVRJQUxJWkVSX1NUTVQuCgkocmVnaXN0ZXJfZmllbGRzKTogVXNlIFNFVF9DUENfU1RBVElDX0lOSVRJQUxJWkVSX1NUTVQgYW5kCglTRVRfQ1BDX0lOSVRJQUxJWkVSX1NUTVQuCgkobWV0aG9kX2hlYWRlcik6IENoZWNrIGZvciBpbm5lciBjbGFzc2VzIGRlY2xhcmluZyBzdGF0aWMgbWV0aG9kcy4KCShyZXNvbHZlX3F1YWxpZmllZF9leHByZXNzaW9uX25hbWUpOiBIYW5kbGUgc2l0dWF0aW9uIHdoZXJlIGB0aGlzJwoJaXMgaW1wbGllZC4KCk1vbiBNYXIgMTMgMTE6MzY6NTEgMjAwMCAgSGFucyBCb2VobSA8Ym9laG1AYWNtLm9yZz4KCgkqIHR5cGVjay5jIChidWlsZF9wcmltX2FycmF5X3R5cGUpOiBDb3JyZWN0bHkgc2V0IHRoZSBoaWdoIHdvcmQgdG9vLgoKMjAwMC0wMy0wOSAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBwYXJzZS55IChqYXZhX2NvbXBsZXRlX2V4cGFuZF9tZXRob2RzKTogTGVhdmUgPGNsaW5pdD4gb3V0IG9mCglvcmRpbmFyeSBtZXRob2RzLgoJKG1heWJlX2dlbmVyYXRlX3ByZV9leHBhbmRfY2xpbml0KTogUHV0IDxjbGluaXQ+IGF0IHRoZSBlbmQgb2YgdGhlCglsaXN0IG9mIG1ldGhvZHMgZm9yIGludGVyZmFjZXMuCgoyMDAwLTAzLTA3ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnkgKHF1YWxpZnlfYW1iaWd1b3VzX25hbWUpOiBQcm9wZXJseSBoYW5kbGUgZXhwcmVzc2lvbnMKCXVzaW5nIGBudWxsJy4KCjIwMDAtMDMtMDcgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogcGFyc2UueSAoY2hlY2tfZmluYWxfYXNzaWdubWVudCk6IEV4dGVuZGVkIHRvIHByb2Nlc3MKCUNPTVBPVU5EX0VYUFIuCgkocGF0Y2hfYXNzaWdubWVudCk6IEhhdmUgY2hlY2tfZmluYWxfYXNzaWdubWVudCBjYWxsZWQgb25seSBvbmNlLgoKMjAwMC0wMy0wNyAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBqYXZhLXRyZWUuaCAoSVNfSU5JVF9DSEVDS0VEKTogTmV3IGZsYWcuCgkqIGNoZWNrLWluaXQuYyAoY2hlY2tfaW5pdCk6IFRlc3QgYW5kIHNldCBJU19JTklUX0NIRUNLRUQuCgkqIHBhcnNlLnkgKHBhdGNoX3N0cmluZyk6IENhbGwgZm9yY2VfZXZhbHVhdGlvbl9vcmRlciBvbiB0aGUKCWNvbXBsZXRlZCBzdHJpbmcgY29uY2F0ZW5hdGlvbiB0cmVlLgoJKiBleHByLmMgKGZvcmNlX2V2YWx1YXRpb25fb3JkZXIpOiBDYWxsIGZvcmNlX2V2YWx1YXRpb25fb3JkZXIgb24KCWZ1bmN0aW9uJ3MgYXJndW1lbnRzIHRvby4KCk1vbiBNYXIgIDYgMTg6MDc6MDcgMjAwMCAgUmljaGFyZCBLZW5uZXIgIDxrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdT4KCgkqIGRlY2wuYyAoZW1pdF9pbml0X3Rlc3RfaW5pdGlhbGl6YXRpb24pOiBNYXJrIEtFWSBhcyB1bnVzZWQuCgkqIGV4cHIuYyAoYnVpbGRfbmV3YXJyYXkpOiBDYXN0IFRSRUVfSU5UX0NTVF9MT1cgdG8gSE9TVF9XSURFX0lOVC4KCShidWlsZF9hbmV3YXJyYXkpOiBMaWtld2lzZS4KCSogcGFyc2UueSAocGF0Y2hfbmV3YXJyYXkpOiBMaWtld2lzZS4KCSogcGFyc2UuYzogUmVnZW5lcmF0ZWQuCgoyMDAwLTAzLTA2ICBCcnljZSBNY0tpbmxheSAgPGJyeWNlQGFsYmF0cm9zcy5jby5uej4KCgkqIGRlY2wuYyAoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBBZGRlZCBuZXcgY2xhc3MgZmllbGRzIGBkZXB0aCcsCglgYW5jZXN0b3JzJywgYW5kIGBpZHQnIHRvIGNsYXNzX3R5cGVfbm9kZS4gVXNlCglfSnZfTG9va3VwSW50ZXJmYWNlTWV0aG9kSWR4IGZvciBzb2Z0X2xvb2t1cGludGVyZmFjZW10aG9kX25vZGUuCgkqIGNsYXNzLmMgKG1ha2VfY2xhc3NfZGF0YSk6IFB1c2ggaW5pdGlhbCB2YWx1ZXMgZm9yIG5ldyBmaWVsZHMuCgkqIGphdmEtdHJlZS5oOiBVcGRhdGVkIHByb3RvdHlwZSBmb3IgYGJ1aWxkX2ludm9rZWludGVyZmFjZScuCgkqIGV4cHIuYyAoYnVpbGRfaW52b2tlaW50ZXJmYWNlKTogQ2hhbmdlZCBwYXJhbWV0ZXJzIHRvIGFjY2VwdAoJYG1ldGhvZCcgdHJlZS4gQ2FsY3VsYXRlIGluZGV4IG9mIGBtZXRob2QnIGluIGl0cyBkZWNsYXJpbmcKCWludGVyZmFjZS4gQnVpbGQgY2FsbCB0byBfSnZfTG9va3VwSW50ZXJmYWNlTWV0aG9kSWR4LgoJKGV4cGFuZF9pbnZva2UpOiBDYWxsIGBidWlsZF9pbnZva2VpbnRlcmZhY2UnIHdpdGggbmV3IHBhcmFtZXRlcnMuCgkqIHBhcnNlLnkgKHBhdGNoX2ludm9rZSk6IENhbGwgYGJ1aWxkX2ludm9rZWludGVyZmFjZScgd2l0aCBuZXcKCXBhcmFtZXRlcnMuCgoyMDAwLTAzLTA2ICBCcnljZSBNY0tpbmxheSA8YnJ5Y2VAYWxiYXRyb3NzLmNvLm56PgoKCSogdHlwZWNrLmMgKGxvb2t1cF9kbyk6IFNlYXJjaCBzdXBlcmludGVyZmFjZXMgZmlyc3QKCXdoZW4gbG9va2luZyB1cCBhbiBpbnRlcmZhY2UgbWV0aG9kLiBGcm9tIEdvZG1hciBCYWNrCgk8Z2JhY2tAY3MudXRhaC5lZHU+CgoyMDAwLTAzLTA2ICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CgoJKiBNYWtlLWxhbmcuaW4gKEpBVkFfU1JDUyk6IEFkZGVkIGJvZWhtLmMsIGxleC5jLgoKMjAwMC0wMy0wMiAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBqYXZhLXRyZWUuaCAobG9va3VwX2FyZ3VtZW50X21ldGhvZDIpOiBEZWNsYXJlZC4KCShzYWZlX2xheW91dF9jbGFzcyk6IFByb3RvdHlwZSBtb3ZlZCBmcm9tIHBhcnNlLmguCgkqIHBhcnNlLmggKHNhZmVfbGF5b3V0X2NsYXNzKTogUHJvdG90eXBlIG1vdmVkIHRvIGphdmEtdHJlZS5oLgoJKiBwYXJzZS55IChqYXZhX2NoZWNrX3JlZ3VsYXJfbWV0aG9kcyk6IExvY2FsIGBzdXBlcl9jbGFzcycgZ29uZS4KCUNhbGwgbG9va3VwX2FyZ3VtZW50X21ldGhvZDIgaW5zdGVhZCBvZiBsb29rdXBfYXJndW1lbnRfbWV0aG9kLgoJUGVyZm9ybSBtb2RpZmllciBtYXRjaCBmb3IgbWV0aG9kcyBmb3VuZCBkZWNsYXJlZCBpbiBpbXBsZW1lbnRlZAoJaW50ZXJmYWNlcy4gRml4ZWQgaW5kZW50YXRpb24gcHJvYmxlbS4gT3ZlcnJpZGluZy9oaWRpbmcgZXJyb3IKCXJlcG9ydCB0byB0YWtlIHBsYWNlIG9ubHkgZm9yIG1ldGhvZHMgZm91bmQgaW4gY2xhc3Nlcy4KCSogdHlwZWNrLmMgKGxvb2t1cF9hcmd1bWVudF9tZXRob2QpOiBDaGFuZ2VkIGxlYWRpbmcKCWNvbW1lbnQuIFJlLXdyaXR0ZW4gYnkgY2FsbGluZyBsb29rdXBfZG8uCgkobG9va3VwX2FyZ3VtZW50X21ldGhvZDIpOiBOZXcgZnVuY3Rpb24uCgkobG9va3VwX2phdmFfbWV0aG9kKTogUmUtd3JpdHRlbiBieSBjYWxsaW5nIGxvb2t1cF9kby4KCShsb29rdXBfZG8pOiBOZXcgZnVuY3Rpb24uCgpUaHUgTWFyICAyIDE1OjE4OjMzIDIwMDAgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogY2hlY2staW5pdC5jIChjaGVja19pbml0KTogUmVtb3ZlZCBkZWFkIGNvZGUuIEhhbmRsZSAoYmxhbmspCglmaW5hbCB2YXJpYWJsZXMuCgkqIHBhcnNlLnkgKGRlY2xhcmVfbG9jYWxfdmFyaWFibGVzKTogTmV3IGxvY2FsIGBmaW5hbF9wJywgc2V0IGl0CglhbmQgdXNlIGl0IHRvIGluaXRpYWxpemUgTE9DQUxfRklOQUwuCgkoY2hlY2tfZmluYWxfYXNzaWdubWVudCk6IE9ubHkgY2hlY2sgRklFTERfREVDTHMuCgoyMDAwLTAyLTE3ICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CgoJKiBNYWtlZmlsZS5pbiAoSkFWQV9PQkpTKTogQWRkZWQgYm9laG0uby4KCShib2VobS5vKTogTmV3IHRhcmdldC4KCSogTWFrZS1sYW5nLmluIChKQVZBX1NSQ1MpOiBBZGRlZCBib2VobS5jLgoJKiBqYXZhLXRyZWUuaCAoZmxhZ191c2VfYm9laG1fZ2MpOiBEZWNsYXJlLgoJKGdldF9ib2VobV90eXBlX2Rlc2NyaXB0b3IpOiBEZWNsYXJlLgoJKiBsYW5nLmMgKGxhbmdfZl9vcHRpb25zKTogQWRkZWQgYHVzZS1ib2VobS1nYycuCgkoZmxhZ191c2VfYm9laG1fZ2MpOiBOZXcgZ2xvYmFsLgoJKiBsYW5nLW9wdGlvbnMuaDogQWRkZWQgLWZ1c2UtYm9laG0tZ2MuCgkqIGJvZWhtLmM6IE5ldyBmaWxlLgoJKiBjbGFzcy5jIChnZXRfZGlzcGF0Y2hfdGFibGUpOiBJZiBjbGFzcyB1c2VzIGEgQm9laG0gdHlwZQoJZGVzY3JpcHRvciwgcHV0IGl0IGluIHRoZSB2dGFibGUuCgkobWFrZV9jbGFzc19kYXRhKTogUmVtb3ZlZCBkZWFkIGNvZGUuCgoyMDAwLTAzLTAzICBQZXIgQm90aG5lciAgPHBlckBib3RobmVyLmNvbT4KCgkqIGRlY2wuYyAoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiAgSW5pdGlhbGl6ZSBzaXpldHlwZSBwcm9wZXJseS4KCjIwMDAtMDMtMDEgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogamF2YS10cmVlLmggKExPQ0FMX0NMQVNTX1ApOiBOZXcgZmxhZyB1c2FnZSBhbmQgbWFjcm8uCgkoUFVSRV9JTk5FUl9DTEFTU19ERUNMX1AsIFBVUkVfSU5ORVJfQ0xBU1NfVFlQRV9QKTogTmV3IG1hY3Jvcy4KCSogamNmLWR1bXAuYyAoSEFORExFX0lOTkVSQ0xBU1NFU19BVFRSSUJVVEUpOiBOZXcgbWFjcm8uCgkqIGpjZi1wYXJzZS5jIChIQU5ETEVfSU5ORVJDTEFTU0VTX0FUVFJJQlVURSk6IExpa2V3aXNlLgoJKGpjZl9wYXJzZSk6IE5ldyBsb2NhbCBgY3VycmVudCcuIExvYWQgaW5uZXJjbGFzc2VzIHNlZW4gaW4gb3V0ZXIKCWNvbnRleHQgYmVpbmcgcHJvY2Vzc2VkLgoJKiBqY2YtcmVhZGVyLmMgKEhBTkRMRV9JTk5FUkNMQVNTRVNfQVRUUklCVVRFKTogTmV3IG1hY3JvLgoJKiBqY2Ytd3JpdGUuYyAoYXBwZW5kX2lubmVyY2xhc3Nlc19hdHRyaWJ1dGUpOiBOZXcgZnVuY3Rpb24uCgkoYXBwZW5kX2lubmVyY2xhc3Nlc19hdHRyaWJ1dGVfZW50cnkpOiBMaWtld2lzZS4KCShnZXRfYWNjZXNzX2ZsYWdzKTogSGFuZGxlIHN0YXRpYyBjbGFzc2VzLiBTZXQgYW5vbnltb3VzIGFuZCBsb2NhbAoJY2xhc3NlcyB0byBiZSBwcml2YXRlLgoJKGdlbmVyYXRlX2NsYXNzZmlsZSk6IEF0dHJpYnV0ZSBjb3VudCBhZGp1c3RlZC4gQ2FsbAoJYXBwZW5kX2lubmVyY2xhc3Nlc19hdHRyaWJ1dGUuCgkqIHBhcnNlLmggKFNLSVBfVEhJU19BTkRfQVJUSUZJQ0lBTF9QQVJNUyk6IFVzZQoJUFVSRV9JTk5FUl9DTEFTU19UWVBFX1AuCgkqIHBhcnNlLnkgKHBhcnNlcl9xdWFsaWZpZWRfY2xhc3NuYW1lKTogTmV3IHBhcmFtZXRlciBgaXNfc3RhdGljJywKCXByb2R1Y2Ugbm9uIHF1YWxpZmllZCBuYW1lIGFjY29yZGluZ2x5LgoJKGJsb2NrX3N0YXRlbWVudDopOiBTZXQgTE9DQUxfQ0xBU1NfUCB3aGVuIGRlY2xhcmluZyBsb2NhbCBjbGFzcy4KCShjcmVhdGVfaW50ZXJmYWNlKTogQWRkZWQgYXJndW1lbnQgdG8gcGFyc2VyX3F1YWxpZmllZF9jbGFzc25hbWUuCgkoY3JlYXRlX2NsYXNzKTogQWRkZWQgYXJndW1lbnQgdG8gcGFyc2VyX3F1YWxpZmllZF9jbGFzc25hbWUuIFNldHVwCglhbGlhcyBmb3IgdG9wIGxldmVsIGNsYXNzZXMuIFVzZSBQVVJFX0lOTkVSX0NMQVNTX0RFQ1BfUC4KCShhZGRfaW5uZXJfY2xhc3NfZmllbGRzKTogRml4ZWQgaW5kZW50YXRpb24uCgkobWV0aG9kX2RlY2xhcmF0b3IpOiBVc2UgUFVSRV9JTk5FUl9DTEFTU19ERUNQX1AuCgkobWV0aG9kX2RlY2xhcmF0b3IpOiBGaXhlZCB0eXBvIGluIGNvbW1lbnQuCgkoY3JhZnRfY29uc3RydWN0b3IpOiBVc2UgUFVSRV9JTk5FUl9DTEFTU19ERUNQX1AuCgkoYnVpbGRfY3VycmVudF90aGlzbik6IExpa2V3aXNlLgoJKHBhdGNoX21ldGhvZF9pbnZvY2F0aW9uKTogTGlrZXdpc2UuCgoyMDAwLTAzLTAxICBNYXJ0aW4gdm9uIExvZXdpcyAgPGxvZXdpc0BpbmZvcm1hdGlrLmh1LWJlcmxpbi5kZT4KCgkqIGRlY2wuYyAoY3VycmVudF9mdW5jdGlvbl9kZWNsKTogTW92ZSB0byB0b3BsZXYuYy4KCk1vbiBGZWIgMjggMDg6MjA6NDIgMjAwMCAgUmljaGFyZCBLZW5uZXIgIDxrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdT4KCgkqIGphdmEtdHJlZS5oIChMQUJFTF9QQyk6IFJlbGVjdCBuYW1lIGNoYW5nZXMgaW4gLi4vdHJlZS5oLgoJKERFQ0xfQklUX0lOREVYKTogVXNlIHVuZGVybHlpbmcgcmVwcmVzZW50YXRpb24uCgkqIHBhcnNlLmggKERFQ0xfSU5IRVJJVEVEX1NPVVJDRV9MSU5FKTogTGlrZXdpc2UuCgpTdW4gRmViIDI3IDE2OjQwOjMzIDIwMDAgIFJpY2hhcmQgS2VubmVyICA8a2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHU+CgoJKiBleHByLmMgKGJ1aWxkX2phdmFfcmV0KTogUGFzcyBwcm9wZXIgdHlwZSB0byBzaXplX2Jpbm9wLgoKMjAwMC0wMi0yNSAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQGN5Z251cy5jb20+CgoJKiBleHByLmMgKGJ1aWxkX2NsYXNzX2luaXQpOiBNYXJrIHRoZSBkZWNsIHRvIGJlIGlnbm9yZWQgYnkKCWNoZWNrX2luaXQuCgkqIGphdmEtdHJlZS5oIChERUNMX0JJVF9JTkRFWCk6IE1vdmUgZGVmaW5pdGlvbiBmcm9tIGNoZWNrLWluaXQuYwoJKiBjaGVjay1pbml0LmM6IE1vdmUgREVDTF9CSVRfSU5ERVggdG8gamF2YS10cmVlLmgKCSogY2xhc3MuYyAoaW5pdF90ZXN0X2hhc2hfbmV3ZnVuYyk6IE5ldyBmdW5jdGlvbi4KCShkZWNsX2hhc2gpOiBOZXcgZnVuY3Rpb24uCgkoZGVjbF9jb21wYXJlKTogTmV3IGZ1bmN0aW9uLgoJKiBkZWNsLmMgKGVtaXRfaW5pdF90ZXN0X2luaXRpYWxpemF0aW9uKTogTmV3IGZ1bmN0aW9uLgoJKGNvbXBsZXRlX3N0YXJ0X2phdmFfbWV0aG9kKTogVHJhdmVyc2UgdGhlIGluaXQgdGVzdCBoYXNodGFibGUsCgljYWxsaW5nIGVtaXRfaW5pdF90ZXN0X2luaXRpYWxpemF0aW9uLgoJKGFsd2F5c19pbml0aWFsaXplX2NsYXNzX3ApOiBEZWZpbmUuCgkqIGV4cHIuYyAoYnVpbGRfY2xhc3NfaW5pdCk6IFVzZSBpbml0aWFsaXphdGlvbiB0ZXN0cyB3aGVuCgllbWl0dGluZyBjbGFzcyBpbml0aWFsaXphdGlvbiBjb2RlLgoJKGFsd2F5c19pbml0aWFsaXplX2NsYXNzX3ApOiBEZWNsYXJlLgoJKiBqY2YtcGFyc2UuYyAocGFyc2VfY2xhc3NfZmlsZSk6IFNldCBhbHdheXNfaW5pdGlhbGl6ZV9jbGFzc19wIHRvCgkxLgoJKiBqYXZhLXRyZWUuaDogSW5jbHVkZSBoYXNoLmguCgkoREVDTF9GVU5DVElPTl9JTklUX1RFU1RfVEFCTEUpOiBEZWZpbmUuCgkoc3RydWN0IGxhbmdfZGVjbCk6IEFkZCBpbml0X3Rlc3RfdGFibGUgZmllbGQuCgkoaW5pdF90ZXN0X2hhc2hfZW50cnkpOiBEZWZpbmUuCgpGcmkgRmViIDI1IDE4OjQxOjMxIDIwMDAgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogZ2phdmFoLmMgKG1haW4pOiBBdm9pZCB1c2luZyBgYXJnaScgdG8gcmVwb3J0IHVuaW1wbGVtZW50ZWQKCW9wdGlvbnMuCgpGcmkgRmViIDI1IDE4OjQ3OjI1IDIwMDAgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogamNmLXdyaXRlLmMgKGdlbmVyYXRlX2J5dGVjb2RlX2luc25zKTogVFJZX0ZJTkFMTFlfRVhQUjoKCWluaXRpYWxpemUgbG9jYWxzIHRvIGF2b2lkIHdhcm5pbmdzLiBMb2NhbCBgZXhjZXB0aW9uX3R5cGUnIG1vdmVkCglpbnRvIGlmIHN0YXRlbWVudC4KCkZyaSBGZWIgMjUgMTg6MDA6MzcgMjAwMCAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBwYXJzZS55IChyZXNvbHZlX2V4cHJlc3Npb25fbmFtZSk6IFVzZSBgb3JpZycgYXMgYSBzZWNvbmQKCWFyZ3VtZW50IHRvIHJlc29sdmVfZmllbGRfYWNjZXNzLgoJKHJlc29sdmVfZmllbGRfYWNjZXNzKTogUmVtb3ZlZCB1bm5lY2Vzc2FyeSBjb2RlIHdoZW4gZGVhbGluZyB3aXRoCglzdGF0aWMgZmllbGRzLgoKV2VkIEZlYiAyMyAxNzo0MTo1MCAyMDAwICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIGNsYXNzLmMgKHB1c2hfc3VwZXJfZmllbGQpOiBEb24ndCBwdXNoIHRoZSBmaWVsZCB0d2ljZS4KCSogamNmLXBhcnNlLmMgKHBhcnNlX3NvdXJjZV9maWxlKTogQ2FsbCBqYXZhX3Jlb3JkZXJfZmllbGRzLgoJKiBwYXJzZS5oIChqYXZhX3Jlb3JkZXJfZmllbGRzKTogUHJvdG90eXBlZC4KCSogcGFyc2UueSAoamF2YV9yZW9yZGVyX2ZpZWxkcyk6IE5ldyBmdW5jdGlvbi4KCShqYXZhX2xheW91dF9jbGFzcyk6IFNpbXBsaWZpZWQgbm90IHRvIHdvcnJ5IGFib3V0IHJlLW9yZGVyaW5nLgoKMjAwMC0wMi0yMyAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgoKCSogZ2phdmFoLmMgKHByaW50X25hbWUpOiBJbiBKTkkgY2FzZSwgY29ycmVjdGx5IHF1b3RlIHN0cmluZy4KCShwcmludF9tZXRob2RfaW5mbyk6IERvbid0IGhhbmRsZSBvdmVycmlkZXMgaW4gSk5JIG1vZGUuCgoyMDAwLTAyLTIyICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnkgKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogYF9Kdl9Jc0luc3RhbmNlT2YnIHJldHVybmVkCgl2YWx1ZSB0eXBlIHNldCB0byBgYm9vbGVhbl90eXBlX25vZGUnLgoKTW9uIEphbiAxOCAxNDozMDowOSAyMDAwICBKb2VyZyBCcnVuc21hbm4gIDxqb2VyZy5icnVuc21hbm5AZmVybnVuaS1oYWdlbi5kZT4KCgkqIGpjZi1kdW1wLmMgKG1haW4pOiBUZXN0IGZvciBjb3JyZWN0IGNvbmRpdGlvbiBhZnRlcgoJb3V0cHV0IGZpbGUgY3JlYXRpb24uCgoyMDAwLTAyLTE5ICBBbnRob255IEdyZWVuICA8Z3JlZW5AY3lnbnVzLmNvbT4KCgkqIGpjZi1kZXBlbmQuYyAoYWRkX2VudHJ5KTogRml4IHRlc3QgZm9yIGZpcnN0IGxpc3QgZW50cnkuCgpTYXQgRmViIDE5IDE4OjQzOjEzIDIwMDAgIFJpY2hhcmQgS2VubmVyICA8a2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHU+CgoJKiBjbGFzcy5jIChidWlsZF9jbGFzc19yZWYsIHB1c2hfc3VwZXJfZmllbGQpOiBTZXQgREVDTF9TSVpFX1VOSVQuCgkqIGNvbnN0YW50cy5jIChidWlsZF9jb25zdGFudHNfY29uc3RydWN0b3IpOiBMaWtld2lzZS4KCjIwMDAtMDItMTkgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBjeWdudXMuY29tPgoKCSogamNmLWRlcGVuZC5jIChhZGRfZW50cnkpOiBBZGQgZW50cmllcyB0byB0aGUgZW5kIG9mIHRoZSBsaXN0LgoKV2VkIE5vdiAwMyAwMjoxNjowMCBQU1QgMTk5OSAgUGVra2EgTmlrYW5kZXIgIDxwZWtrYS5uaWthbmRlckBodXQuZmk+CgoJKiBkZWNsLmMgKElOVF9UWVBFX1NJWkUpOiBEZWZpbmUgaWYgbmVjZXNzYXJ5LgoJKGV4cGFuZF9qYXZhX3JldHVybik6IEhhbmRsZSB0aGUgY2FzZSBvZiBhIG5hdGl2ZSBpbnRlZ2VyIHNtYWxsZXIKCXRoYW4gYSBKVk0gaW50ZWdlci4KCjIwMDAtMDItMTggIE1hcnRpbiB2b24gTG9ld2lzICA8bG9ld2lzQGluZm9ybWF0aWsuaHUtYmVybGluLmRlPgoKCSogZ2phdmFoLmMgKGhlbHApOiBVc2UgR0NDQlVHVVJMLgoJKiBqdi1zY2FuLmMgKGhlbHApOiBMaWtld2lzZS4KCSogamNmLWR1bXAuYyAoaGVscCk6IExpa2V3aXNlLgoKVGh1IEZlYiAxNyAxNDozMDozNyAyMDAwICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIGpjZi13cml0ZS5jIChnZW5lcmF0ZV9ieXRlY29kZV9pbnNucyk6IERvbid0IGdlbmVyYXRlIGVtcHR5CglgZmluYWxseScgY2xhdXNlcy4KClRodSBGZWIgMTcgMTM6MjA6NTggMjAwMCAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBqY2YtcGFyc2UuYyAobG9hZF9jbGFzcyk6IENhbGwgYGZhdGFsJyBpZiBubyBmaWxlIGNvbnRhaW5pbmcKCXRoZSB0YXJnZXQgY2xhc3MgYXJlIGZvdW5kLgoKMjAwMC0wMi0xNiAgWmFjayBXZWluYmVyZyAgPHphY2tAd29sZXJ5LmN1bWIub3JnPgoKCSogTWFrZWZpbGUuaW4gKFBBUlNFX0MsIFBBUlNFX1NDQU5fQyk6IE1vdmUgZGVwZW5kZW5jaWVzIG9uCglsZXguYywgbGV4LmgsIGFuZCBQQVJTRV9IIHRvLi4uCgkocGFyc2UubywgcGFyc2Utc2Nhbi5vKTogLi4uaGVyZSwgcmVzcGVjdGl2ZWx5LgoKCSogbGV4LmM6IFNwbGl0IG91dCBjb2RlIHRoYXQgbWF5IHRyaWdnZXIgU0lHRlBFIGZyb20geXlsZXgoKQoJdG8gaXRzIG93biBmdW5jdGlvbi4KCSogbGV4LmggKEpBVkFfRkxPQVRfUkFOR0VfRVJST1IpOiBEb24ndCBzZXQgdmFsdWUuCgoyMDAwLTAyLTE2ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBNYWtlLWxhbmcuaW4gKGp2c3BlYy5vKTogRGVwZW5kIG9uICQoR0NDX0gpLCBub3QgZ2NjLmguCgoyMDAwLTAyLTE1ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnkgKG91dGVyX2ZpZWxkX2FjY2Vzc19wKTogU3RvcCBpbiB0aW1lIHdoZW4gb3V0ZXIgY29udGV4dHMKCWFyZSBleGhhdXN0ZWQuCgkocmVzb2x2ZV9xdWFsaWZpZWRfZXhwcmVzc2lvbl9uYW1lKTogUHJvcGVybHkgcXVhbGlmeSAqZXZlcnl0aGluZyoKCWFmdGVyIGEgcGFja2FnZS50eXBlIHRvIGJlIHJlc29sZWQgYXMgZXhwcmVzc2lvbiBuYW1lcy4KCShmaW5kX2FwcGxpY2FibGVfYWNjZXNzaWJsZV9tZXRob2RzX2xpc3QpOiBTYXZlL3Jlc3RvcmUgYGNsYXNzJyB0bwoJaXNvbGF0ZSBpdCBmcm9tIGEgcG9zc2libGUgb3V0ZXIgY29udGV4dCBzZWFyY2guCgoyMDAwLTAyLTE1ICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CgoJKiBnamF2YWguYyAoam5pX3ByaW50X2NoYXIpOiBOZXcgZnVuY3Rpb24uCgkocHJpbnRfZnVsbF9jeHhfbmFtZSk6IFVzZSBpdC4KCShkZWNvZGVfc2lnbmF0dXJlX3BpZWNlKTogTGlrZXdpc2UuCgkocHJpbnRfY3h4X2NsYXNzbmFtZSk6IExpa2V3aXNlLgoKMjAwMC0wMi0xNSAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogTWFrZWZpbGUuaW4gKGp2LXNjYW4sIGpjZi1kdW1wLCBnY2poKTogRGVwZW5kIG9uIGFuZCBsaW5rIHdpdGgKCXZlcnNpb24uby4KCShqY2YtZHVtcC5vLCBnamF2YWgubywganYtc2Nhbi5vKTogRGVwZW5kIG9uIHZlcnNpb24uaC4KCgkqIGdqYXZhaC5jOiBJbmNsdWRlIHZlcnNpb24uaC4KCgkqIGpjZi1kdW1wLmM6IExpa2V3aXNlLgoKCSoganYtc2Nhbi5jOiBMaWtld2lzZS4KClNhdCBGZWIgMTIgMDQ6MzQ6MDQgMjAwMCAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBwYXJzZS55IChvdXRlcl9maWVsZF9hY2Nlc3NfZml4KTogRmlyc3QgcGFyYW1ldGVyIG5vdyBhIHRyZWUKCW5vZGUuIENoZWNrIGZvciBhc3NpZ25lbWVudCB0byBmaW5hbC4gRmlyc3QgYXJndW1lbnQgdG8KCWJ1aWxkX291dGVyX2ZpZWxkX2FjY2Vzc19maXggbW9kaWZpZWQgdG8gYWNjb21tb2RhdGUgcHJvdG90eXBlLgoJKGJ1aWxkX291dGVyX2ZpZWxkX2FjY2Vzcyk6IERvbid0IGNoZWNrIGZvciBhc3NpZ25tZW50IHRvIGZpbmFsCgloZXJlLgoJKGphdmFfY29tcGxldGVfbGhzKTogTU9ESUZZX0VYUFIgY2FzZTogQ2hlY2sgZm9yIGBlcnJvcl9tYXJrX25vZGUnCglwb3NzaWJseSByZXR1cm5lZCBieSBvdXRlcl9maWVsZF9hY2Nlc3NfZml4LiBDaGFuZ2VkCglvdXRlcl9maWVsZF9hY2Nlc3NfZml4J3MgZmlyc3QgYXJndW1lbnQuCgkoY2hlY2tfZmluYWxfYXNzaWdubWVudCk6ICRmaW5pdCQncyBjb250ZXh0IGlzIE9LLgoJKHBhdGNoX3VuYXJ5b3ApOiBVc2Ugbm9kZSBpbnN0ZWFkIG9mIGl0cyBsaW5lL2NvbHVtbiB2YWx1ZSB3aGVuCgljYWxsaW5nIG91dGVyX2ZpZWxkX2FjY2Vzc19maXguCgpGcmkgRmViIDExIDE3OjM4OjI2IDIwMDAgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogcGFyc2UueSAoaW50ZXJmYWNlX2RlY2xhcmF0aW9uOik6IE5vIGxvbmdlciB0YWdnZWQKCTxub2RlPi4gUmUtaW5zdGFsbGVkIGRlZmF1bHQgYWN0aW9uLgoJKGNsYXNzX21lbWJlcl9kZWNsYXJhdGlvbjopOiBIYW5kbGUgaW5uZXIgaW50ZXJmYWNlcy4KCShpbnRlcmZhY2VfbWVtYmVyX2RlY2xhcmF0aW9uKTogSGFuZGxlIGlubmVyIGludGVyZmFjZXMgYW5kCgljbGFzc2VzLgoJKGNyZWF0ZV9pbnRlcmZhY2UpOiBQdXNoIGVycm9yIGlmIG9uZSBzZWVuLiBTdXNwZW5kIHBhcnNpbmcKCWNvbnRleHQgd2hlbiBwcm9jZXNzaW5nIGFuIGlubmVyIGludGVyZmFjZS4KCShyZWdpc3Rlcl9maWVsZHMpOiBJbm5lciBjbGFzcyBzdGF0aWMgZmllbGQgbGltaXRhdGlvbnMgbm90IHRvCglhcHBseSB0byBpbm5lciBpbnRlcmZhY2VzLgoKVGh1IEZlYiAxMCAyMjowNzozNSAyMDAwICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIGpjZi1wYXJzZS5jIChsb2FkX2NsYXNzKTogVXBkYXRlIGBqYXZhX2Vycm9yX2NvdW50JyB3aGVuIGEKCWNsYXNzJyBmaWxlIGNhbid0IGJlIGZvdW5kLgoJKHBhcnNlLnkpOiBBdm9pZCAoYnl0ZSljb2RlIGdlbmVyYXRpb24gd2hlbiBlcnJvcnMgc2Vlbi4KClRodSBGZWIgMTAgMjA6MTA6NDMgMjAwMCAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBwYXJzZS55IChqYXZhX2NvbXBsZXRlX2xocyk6IEhhbmRsZSBUUlVOQ19ESVZfRVhQUi4gRW5zdXJlIGBmYXRhbCcKCWRlY29kZXMgYSB2YWxpZCBub2RlLgoJKHBhdGNoX2Jpbm9wKTogSGFuZGxlIFRSVU5DX0RJVl9FWFBSLgoKVGh1IEZlYiAxMCAxNjowNDoyNiAyMDAwICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnkgKHJlc29sdmVfcGFja2FnZSk6IE5ldyBsb2NhbCBgYWNjJy4gVHJ5IHRvIHByb2dyZXNzaXZlbHkKCWJ1aWxkIGFuZCBndWVzcyBhIHBhY2thZ2UgYW5kIHR5cGUgbmFtZS4KClRodSBGZWIgMTAgMTI6NTI6MDkgMjAwMCAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBwYXJzZS55IChmaW5kX2FwcGxpY2FibGVfYWNjZXNzaWJsZV9tZXRob2RzX2xpc3QpOiBMb2FkIGFuZAoJbGF5b3V0IHRoZSBzZWFyY2ggY2xhc3MgaWYgbmVjZXNzYXJ5LgoJKGphdmFfY29tcGxldGVfdHJlZSk6IEtlZXAgdG8gb3JpZ2luYWwgdHlwZSBvZiB0aGUgZm9sZGVkIGluaXRpYWwKCXZhbHVlLgoKMjAwMC0wMi0wOSAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBjbGFzcy5jIChsYXlvdXRfY2xhc3MpOiBTZXQgYW5kIHRlc3QgQ0xBU1NfQkVJTkdfTEFJRE9VVC4KCUdlbmVyYXRlIGVycm9yIG1lc3NhZ2UgaWYgY2lyY3VsYXJpdHkgaXMgZGV0ZWN0ZWQuIE5ldyBzdGF0aWMKCWxvY2FsIGBsaXN0Jy4KCSogamF2YS10cmVlLmggKENMQVNTX0JFSU5HX0xBSURPVVQpOiBOZXcgZmxhZyB1c2FnZSwgbmV3IG1hY3JvLiAgKgoJKiBqY2Ytd3JpdGUuYyAoZ2VuZXJhdGVfYnl0ZWNvZGVfaW5zbnMpOiBWZXJ5IHNpbXBseSBoYW5kbGUKCVNBVkVfRVhQUi4KCSogcGFyc2UueSAoamF2YV9jaGVja19jaXJjdWxhcl9yZWZlcmVuY2UpOiBVc2UKCWBjeWNsaWNfaW5oZXJpdGFuY2VfcmVwb3J0JyBkdXJpbmcgcmVwb3J0LCBpZiBuZWNlc3NhcnkuCgkoamF2YV9jb21wbGV0ZV9saHMpOiBmaXhlZCBjb21tZW50IHdpdGggYFRIUk9XX0VYUFI6JyBjYXNlLiBBdm9pZAoJd2Fsa2luZyBORVdfQVJSQVlfSU5JVCB0d2ljZS4KCjIwMDAtMDItMDkgIFRvbSBUcm9tZXkgIDx0cm9tZXlAY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnkgKGNoZWNrX2NsYXNzX2ludGVyZmFjZV9jcmVhdGlvbik6IEFsbG93IGlubmVyIGNsYXNzZXMgdG8KCWJlIGBwcml2YXRlJyBvciBgcHJvdGVjdGVkJywgY2hlY2sgbW9kaWZpZXJzJyBjb25zaXN0ZW5jeS4gUHJldmVudAoJYmxvY2sgbG9jYWwgY2xhc3NlcyBmcm9tIGJlYXJpbmcgYW55IG1vZGlmaWVycy4KCjIwMDAtMDItMTAgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGV4Y2VwdC5jIChjaGVja19zdGFydF9oYW5kbGVycyk6IFJlLWFkZCBwcm90b3R5cGUgbG9zdCBpbiBsYXN0CglwYXRjaC4KCShtYXliZV9zdGFydF90cnkpOiBSZW1vdmUgZXhjZXNzIGFyZ3VtZW50IHRvIGBjaGVja19zdGFydF9oYW5kbGVycycuCgoyMDAwLTAyLTA5ICBBbmRyZXcgSGFsZXkgIDxhcGhAY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAoY2xlYXJfYmluZGluZ19sZXZlbCk6IFJlbW92ZSBleGNlc3MgaW5pdGlhbGl6ZXIuCgkobWF5YmVfcG9wbGV2ZWxzKTogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZS4KCShmb3JjZV9wb3BsZXZlbHMpOiBEaXR0by4KCShzdHJ1Y3QgYmluZGluZ19sZXZlbCk6IEFkZCBjb21tZW50LgoKMjAwMC0wMi0wNyAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBqY2Ytd3JpdGUuYyAoZ2VuZXJhdGVfY2xhc3NmaWxlKTogRG9uJ3QgY29uc2lkZXIKCXByZS1pbml0aWFsaXphdGlvbiB3aXRoIHJlZmVyZW5jZSB2YWx1ZSAodXNlIDxjbGluaXQ+IGluc3RlYWQuKQoJKiBwYXJzZS55IChqYXZhX2ZpeF9jb25zdHJ1Y3RvcnMpOiBObyBnZW5lcmF0ZWQgY29uc3RydWN0b3IgZm9yCglpbnRlcmZhY2VzLgoJKGJ1aWxkX291dGVyX2ZpZWxkX2FjY2Vzcyk6IFJlbW92ZWQgZGVidWcgbWVzc2FnZS4KCShvdXRlcl9maWVsZF9leHBhbmRlZF9hY2Nlc3NfcCk6IEFkYXB0ZWQgdG8gYnl0ZWNvZGUgZ2VuZXJhdGlvbi4KCShidWlsZF9vdXRlcl9maWVsZF9hY2Nlc3NfbWV0aG9kKTogVXNlIGZpeF9tZXRob2RfYXJndW1lbnRfbmFtZXMuCgkoYnVpbGRfb3V0ZXJfbWV0aG9kX2FjY2Vzc19tZXRob2QpOiBGaXhlZCBpbmRlbnRhdGlvbi4gQWRkZWQKCWNvbW1lbnQuIEhhbmRsZSBhY2Nlc3MgbWV0aG9kIGdlbmVyYXRpb24gZm9yIHN0YXRpYyBhbmQgYWxzbyB2b2lkCgltZXRob2RzLgoJKGJ1aWxkX2FjY2Vzc190b190aGlzbik6IEluc2VydGVkIGRlYnVnIG1lc3NhZ2UuCgkobWF5YmVfYnVpbGRfdGhpc25fYWNjZXNzX21ldGhvZCk6IFVzZSBmaXhfbWV0aG9kX2FyZ3VtZW50X25hbWVzLgoJKHJlc29sdmVfcXVhbGlmaWVkX2V4cHJlc3Npb25fbmFtZSk6IEZpeGVkIGNvbW1lbnQuCgkobm90X2FjY2Vzc2libGVfcCk6IEFkYXB0ZWQgdG8gYnl0ZWNvZGUgZ2VuZXJhdGlvbi4gQWRkZWQgY29tbWVudC4KCShwYXRjaF9tZXRob2RfaW52b2NhdGlvbik6IEFkZGVkIGNvbW1lbnQuCgkobWF5YmVfdXNlX2FjY2Vzc19tZXRob2QpOiBGaXhlZCBsZWFkaW5nIGNvbW1lbnQuIEhhbmRsZSBzdGF0aWMKCW1ldGhvZHMuCgkoamF2YV9jb21wbGV0ZV9saHMpOiBEb24ndCBzaG9ydGN1dCBoYW5kbGluZyBvZiBpbml0aWFsaXplZCB1cG9uCglkZWNsYXJhdGlvbiBTdHJpbmcgdHlwZSBzdGF0aWMgZmllbGRzIHdoZW4gZ2VuZXJhdGluZyBieXRlY29kZS4KCShwYXRjaF91bmFyeW9wKTogSGFuZGxlIG91dGVyIGZpZWxkIGFjY2VzcyB3aGVuIGdlbmVyYXRpbmcKCWJ5dGVjb2RlLgoKVGh1IEZlYiAgMyAyMDoyMzoxOSAyMDAwICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIGphdmEtdHJlZS5oIChGSUVMRF9USElTTik6IE5ldyBtYWNyby4KCSogamNmLXdyaXRlLmMgKGFwcGVuZF9zeW50aGV0aWNfYXR0cmlidXRlKTogTmV3IGZ1bmN0aW9uLgoJKGdlbmVyYXRlX2NsYXNzZmlsZSk6IFNldCAiU3ludGhldGljIiBhdHRyaWJ1dGUgb24gdGhpcyQ8bj4sCgl2YWwkPG5hbWU+IGZpZWxkcywgYWNjZXNzJDxuPiBhbmQgJGZpbml0JCBtZXRob2RzLiBGaXhlZCBpbmRlbnRhdGlvbi4KCSogcGFyc2UueSAoYWRkX2lubmVyX2NsYXNzX2ZpZWxkcyk6IFNldCBGSUVMRF9USElTTiBmb3IgY3JlYXRlZAoJdGhpcyQ8bj4gZmllbGRzLgoJKGJ1aWxkX291dGVyX2ZpZWxkX2FjY2Vzcyk6IFR1cm5lZCBvbiBhY2Nlc3MgZnVuY3Rpb25zIHVzYWdlIGFuZAoJZ2VuZXJhdGlvbiB3aGVuIGNvbXBpbGluZyB0byBieXRlY29kZS4KCShtYXliZV91c2VfYWNjZXNzX21ldGhvZCk6IExpa2V3aXNlLgoKMjAwMC0wMS0yNSAgQW5kcmV3IEhhbGV5ICA8YXBoQGN5Z251cy5jb20+CgoJKiBqYXZhLWV4Y2VwdC5oIChzdHJ1Y3QgZWhfcmFuZ2UpOiBBZGQgYGV4cGFuZGVkJyBmaWVsZC4KCShtYXliZV9zdGFydF90cnkpOiBBZGQgZW5kX3BjIGFyZy4KCShtYXliZV9lbmRfdHJ5KTogRGl0dG8uCgkqIGphdmEtdHJlZS5oIChmb3JjZV9wb3BsZXZlbHMpOiBuZXcgZnVuY3Rpb24uCgkqIGV4cHIuYyAoZXhwYW5kX2J5dGVfY29kZSk6IERvbid0IGNhbGwgbWF5YmVfc3RhcnRfdHJ5IG9yCgltYXliZV9lbmRfdHJ5LgoJKiBleGNlcHQuYyAoYWRkX2hhbmRsZXIpOiBSZXNldCBleHBhbmRlZC4KCShleHBhbmRfc3RhcnRfamF2YV9oYW5kbGVyKTogU2V0IGV4cGFuZGVkLgoJKGNoZWNrX3N0YXJ0X2hhbmRsZXJzKTogRG9uJ3QgZXhwYW5kIGEgc3RhcnQgaGFuZGxlciB0aGF0J3MKCWFscmVhZHkgYmVlbiBleHBhbmRlZC4KCShtYXliZV9zdGFydF90cnkpOiBBZGQgZW5kX3BjIGFyZy4gIE9ubHkgZXhwYW5kIGEgaGFuZGxlciB3aGljaAoJZW5kcyBhZnRlciBlbmRfcGMuCgkoZXhwYW5kX2VuZF9qYXZhX2hhbmRsZXIpOiBjYWxsIGZvcmNlX3BvcGxldmVscy4KCShmb3JjZV9wb3BsZXZlbHMpOiBuZXcgZnVuY3Rpb24uCgkqIGRlY2wuYyAoYmluZGluZ19sZXZlbCk6IEFkZCBzdGFydF9wYyBvZiBiaW5kaW5nIGxldmVsLgoJKG1heWJlX3B1c2hsZXZlbHMpOiBDYWxsIG1heWJlX3N0YXJ0X3RyeSB3aGVuIHB1c2hpbmcgYmluZGluZwoJbGV2ZWxzLgoJKG1heWJlX3BvcGxldmVscyk6IENhbGwgbWF5YmVfZW5kX3RyeSB3aGVuIHBvcHBpbmcgYmluZGluZyBsZXZlbHMuCgkoTEFSR0VTVF9QQyk6IERlZmluZS4KCShjbGVhcl9iaW5kaW5nX2xldmVsKTogVXNlIExBUkdFU1RfUEMuCgoJKiBqYXZhLXRyZWUuaCAoREVCVUdfSkFWQV9CSU5ESU5HX0xFVkVMUyk6IG5ldyBkZWZpbmUuCgkqIGRlY2wuYyAoREVCVUdfSkFWQV9CSU5ESU5HX0xFVkVMUyk6IG5ldyBkZWZpbmUuCgkoYmluZGluZ19kZXB0aCwgaXNfY2xhc3NfbGV2ZWwsIGN1cnJlbnRfcGMpOiBuZXcgdmFyaWFibGVzLgoJKHN0cnVjdCBiaW5kaW5nX2xldmVsKTogZGl0dG8uCgkoaW5kZW50KTogbmV3IGZ1bmN0aW9uLgoJKHB1c2hfanZtX3Nsb3QpOiBhZGQgZGVidWdnaW5nIGluZm8uCgkobWF5YmVfcHVzaGxldmVscyk6IGRpdHRvLgoJKG1heWJlX3BvcGxldmVscyk6IGRpdHRvLgoJKHB1c2hsZXZlbCk6IGRpdHRvLgoJKHBvcGxldmVsKTogZGl0dG8uCgkoc3RhcnRfamF2YV9tZXRob2QpOiBkaXR0by4KCShnaXZlX25hbWVfdG9fbG9jYWxzKTogY29tbWVudCBvbmx5LgoJKiBleGNlcHQuYyAoYmluZGluZ19kZXB0aCwgaXNfY2xhc3NfbGV2ZWwsIGN1cnJlbnRfcGMpOgoJbmV3IHZhcmlhYmxlcy4KCShleHBhbmRfc3RhcnRfamF2YV9oYW5kbGVyKTogYWRkIGRlYnVnZ2luZyBpbmZvLgoJKGV4cGFuZF9lbmRfamF2YV9oYW5kbGVyKTogZGl0dG8uCgoyMDAwLTAyLTA1ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBnamF2YWguYyAob3ZlcmxvYWRlZF9qbmlfbWV0aG9kX2V4aXN0c19wKTogQWRkIHByb3RvdHlwZS4KCShwcmludF9uYW1lX2Zvcl9zdHViX29yX2puaSwgcHJvY2Vzc19maWxlKTogQ29uc3RpZnkgYSBjaGFyKi4KCjIwMDAtMDItMDMgIFRvbSBUcm9tZXkgIDx0cm9tZXlAY3lnbnVzLmNvbT4KCgkqIGpjZi1pby5jIChqY2ZfcHJpbnRfdXRmOF9yZXBsYWNlKTogSGFuZGxlIFVURi04IGlucHV0LgoKMjAwMC0wMS0zMSAgU2NvdHQgQmFtYnJvdWdoICA8c2NvdHRiQG5ldHdpbmRlci5vcmc+CgoJKiBnY2MvamF2YS9qYXZhb3AuaCAoV09SRFNfVE9fRE9VQkxFKTogQWxsb3cgV09SRFNfVE9fRE9VQkxFIHRvCglhc3NlbWJsZSBkb3VibGVzIGNvcnJlY3RseSB3aGVuIEhPU1RfRkxPQVRfV09SRFNfQklHX0VORElBTiBpcwoJZGVmaW5lZCB0byBiZSAxLgoKV2VkIEZlYiAgMiAxODo0MzozNyAyMDAwICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIGphdmEtdHJlZS5kZWYgKElOU1RBTkNFX0lOSVRJQUxJWkVSU19FWFBSKTogTmV3IHRyZWUgY29kZS4KCSogamF2YS10cmVlLmggKFRZUEVfSUlfU1RNVF9MSVNUKTogTmV3IG1hY3JvLgoJKHN0cnVjdCBsYW5nX3R5cGUpOiBOZXcgZmllbGQgYGlpX2Jsb2NrJy4KCSogbGV4LmMgKGphdmFfaW5pdF9sZXgpOiBVc2UgQ1BDX0lOSVRJQUxJWkVSX0xJU1QsCglDUENfU1RBVElDX0lOSVRJQUxJWkVSX0xJU1QgYW5kIENQQ19JTlNUQU5DRV9JTklUSUFMSVpFUl9MSVNULgoJKiBwYXJzZS5oIChzdHJ1Y3QgcGFyc2VyX2N0eHQpOiBOZXcgZmllbGQgYGluc3RhbmNlX2luaXRpYWxpemVycycuCgkoQ1BDX0lOSVRJQUxJWkVSX0xJU1QsIENQQ19TVEFUSUNfSU5JVElBTElaRVJfTElTVCwKCUNQQ19JTlNUQU5DRV9JTklUSUFMSVpFUl9MSVNULCBDUENfSU5JVElBTElaRVJfU1RNVCwKCUNQQ19TVEFUSUNfSU5JVElBTElaRVJfU1RNVCwgQ1BDX0lOU1RBTkNFX0lOSVRJQUxJWkVSX1NUTVQpOiBOZXcKCW1hY3Jvcy4KCSogcGFyc2UueSAoYWRkX2luc3RhbmNlX2luaXRpYWxpemVyKTogTmV3IGZ1bmN0aW9uLgoJKGluX2luc3RhbmNlX2luaXRpYWxpemVyKTogTmV3IHN0YXRpYyBnbG9iYWwuCgkoY2xhc3NfYm9keV9kZWNsYXJhdGlvbjopOiBMaW5rIGluc3RhbmNlIGluaXRpYWxpemVyIGJsb2NrLgoJKHN0YXRpY19pbml0aWFsaXplcjopOiBVc2UgQ1BDX1NUQVRJQ19JTklUSUFMSVpFUl9TVE1ULgoJKGFycmF5X2NyZWF0aW9uX2V4cHJlc3Npb246KTogUmVtb3ZlIHVudXNlZCBsb2NhbC4KCShqYXZhX3BhcnNlcl9jb250ZXh0X3B1c2hfaW5pdGlhbGl6ZWRfZmllbGQpOiBGaXhlZCBsZWFkaW5nCgljb21tZW50LiBVc2UgQ1BDX1NUQVRJQ19JTklUSUFMSVpFUl9MSVNULCBDUENfSU5JVElBTElaRVJfTElTVCBhbmQKCUNQQ19JTlNUQU5DRV9JTklUSUFMSVpFUl9MSVNULgoJKGphdmFfcGFyc2VyX2NvbnRleHRfcG9wX2luaXRpYWxpemVkX2ZpZWxkKTogTGlrZXdpc2UuCgkoYWRkX2lubmVyX2NsYXNzX2ZpZWxkcyk6IFVzZSBDUENfSU5JVElBTElaRVJfU1RNVC4KCShyZWdpc3Rlcl9maWVsZHMpOiBVc2UgQ1BDX1NUQVRJQ19JTklUSUFMSVpFUl9TVE1UIGFuZAoJQ1BDX0lOSVRJQUxJWkVSX1NUTVQuCgkoZml4X2NvbnN0cnVjdG9ycyk6IE5ldyBsb2NhbCBgY2xhc3NfdHlwZScuIFVzZSBpdC4gQ2FsbAoJYWRkX2luc3RhbmNlX2luaXRpYWxpemVyLgoJKGphdmFfY29tcGxldGVfbGhzKTogTmV3IGNhc2UgSU5TVEFOQ0VfSU5JVElBTElaRVJTX0VYUFIuCgkocGF0Y2hfcmV0dXJuKTogRm9yYmlkIHJldHVybiBpbiBpbnN0YW5jZSBpbml0aWFsaXplcnMuCgkocGF0Y2hfdGhyb3dfc3RhdGVtZW50KTogRW5mb3JjZSBleGNlcHRpb24gaGFuZGxpbmcgaW4gdGhlIGNvbnRleHQKCW9mIGluc3RhbmNlIGluaXRpYWxpemVycy4KCjIwMDAtMDItMDMgIFRvbSBUcm9tZXkgIDx0cm9tZXlAY3lnbnVzLmNvbT4KCgkqIE1ha2UtbGFuZy5pbiAoamF2YS5tb3N0bHljbGVhbik6IFJlbW92ZSBleGVjdXRhYmxlcyBpbgoJYG1vc3RseWNsZWFuJy4KCjIwMDAtMDEtMzEgIFNjb3R0IEJhbWJyb3VnaCAgPHNjb3R0YkBuZXR3aW5kZXIub3JnPgoKCSogZ2NjL2phdmEvZ2phdmFoLmMgKERfTkFOX01BU0spOiBBbHRlcm5hdGUgZGVmaW5pdGlvbiByZXF1aXJlZCB3aGVuCglIT1NUX0ZMT0FUX1dPUkRTX0JJR19FTkRJQU4gaXMgZGVmaW5lZCB0byBiZSAxLgoJKGphdmFfZmxvYXRfZmluaXRlKTogQ29udmVydCB0byB1c2UgdW5pb24gV29yZCBmcm9tIGphdmFvcC5oLgoJKGphdmFfZG91YmxlX2Zpbml0ZSk6IENvbnZlcnQgdG8gdXNlIHVuaW9uIERXb3JkIGZyb20gamF2YW9wLmguCgoyMDAwLTAyLTAyICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CgoJKiBnamF2YWguYyAob3B0aW9ucyk6IEFkZGVkIGBqbmknIGVudHJ5LgoJKGhlbHApOiBEb2N1bWVudCAtam5pLgoJKGZsYWdfam5pKTogTmV3IGdsb2JhbC4KCShwcm9jZXNzX2ZpbGUpOiBIYW5kbGUgSk5JIG91dHB1dC4gIERvbid0IHByaW50IHRleHQgZnJvbQoJLXByZXBlbmQsIC1hZGQsIGV0Yywgd2hlbiBnZW5lcmF0aW5nIHN0dWJzLiAgT25seSByZW1vdmUgYC5jbGFzcycKCXN1ZmZpeCBpZiBpdCBhY3R1YWxseSBleGlzdHMuCgkobWFpbik6IENyZWF0ZSBhIGAuYycgZmlsZSB3aGVuIHJ1biB3aXRoIGAtLWpuaSAtLXN0dWJzJy4gIENyZWF0ZQoJY29ycmVjdCBvdXRwdXQgZmlsZSBuYW1lIHdpdGggYC0tam5pJy4KCShwcmludF9pbmNsdWRlKTogTWFuZ2xlIGhlYWRlciBuYW1lIGRpZmZlcmVudGx5IGluIEpOSSBjYXNlLgoJKEhBTkRMRV9NRVRIT0QpOiBJbiBKTkkgbW9kZSwgY2FsbCBwcmludF9tZXRob2RfaW5mbyB0byBnZW5lcmF0ZQoJbWV0aG9kIGxpc3QuCgkocHJpbnRfbWV0aG9kX2luZm8pOiBIYW5kbGUgSk5JIGNhc2UuICBQdXQgc2lnbmF0dXJlIGluZm8gaW50bwoJbWV0aG9kIG5hbWUuICBIYW5kbGUgY2FzZSB3aGVuIFNUUkVBTSBpcyBOVUxMLgoJKHByaW50X25hbWVfZm9yX3N0dWJfb3Jfam5pKTogTmV3IGZ1bmN0aW9uLgoJKHByaW50X3N0dWJfb3Jfam5pKTogUmVuYW1lZCBmcm9tIGBwcmludF9zdHViJy4gIEhhbmRsZSBKTkkuCgkocHJpbnRfY3h4X2NsYXNzbmFtZSk6IEhhbmRsZSBKTkkuCgkocHJpbnRfZnVsbF9jeHhfbmFtZSk6IExpa2V3aXNlLgoJKGRlY29kZV9zaWduYXR1cmVfcGllY2UpOiBMaWtld2lzZS4KCShvdmVybG9hZGVkX2puaV9tZXRob2RfZXhpc3RzX3ApOiBOZXcgZnVuY3Rpb24uCgkoc3RydWN0IG1ldGhvZF9uYW1lKTogQWRkZWQgYHNpZ25hdHVyZScgYW5kIGBzaWdfbGVuZ3RoJyBmaWVsZHMuCgkoSEFORExFX0VORF9GSUVMRCk6IERvIG5vdGhpbmcgaW4gSk5JIG1vZGUuCgoyMDAwLTAyLTAyICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CgoJKiBqdi1zY2FuLmM6IEluY2x1ZGUgdmVyc2lvbi5jLCA8Z2V0b3B0Lmg+LgoJKExPTkdfT1BULCBPUFRfSEVMUCwgT1BUX1ZFUlNJT04pOiBOZXcgbWFjcm9zLgoJKG9wdGlvbnMpOiBOZXcgYXJyYXkuCgkodXNhZ2UpOiBOZXcgZnVuY3Rpb24uCgkodmVyc2lvbik6IE5ldyBmdW5jdGlvbi4KCShtYWluKTogVXNlIGdldG9wdF9sb25nIHRvIHBhcnNlIGNvbW1hbmQgbGluZS4KCSogamNmLWR1bXAuYzogSW5jbHVkZSB2ZXJzaW9uLmMsIDxnZXRvcHQuaD4uCgkoTE9OR19PUFQsIE9QVF9jbGFzc3BhdGgsIE9QVF9DTEFTU1BBVEgsIE9QVF9IRUxQLCBPUFRfVkVSU0lPTiwKCU9QVF9KQVZBUCk6IE5ldyBtYWNyb3MuCgkob3B0aW9ucyk6IE5ldyBhcnJheS4KCSh1c2FnZSk6IFJldHVybiBgdm9pZCcuICBDaGFuZ2VkIG1lc3NhZ2UuCgkoaGVscCk6IE5ldyBmdW5jdGlvbi4KCSh2ZXJzaW9uKTogTmV3IGZ1bmN0aW9uLgoJKG1haW4pOiBVc2UgZ2V0b3B0X2xvbmdfb25seSB0byBwYXJzZSBjb21tYW5kIGxpbmUuCgkqIGdqYXZhaC5jOiBJbmNsdWRlIDxnZXRvcHQuaD4uCgkoTE9OR19PUFQsIE9QVF9jbGFzc3BhdGgsIE9QVF9DTEFTU1BBVEgsIE9QVF9IRUxQLCBPUFRfVEVNUCwKCU9QVF9WRVJTSU9OLCBPUFRfUFJFUEVORCwgT1BUX0ZSSUVORCwgT1BUX0FERCwgT1BUX0FQUEVORCwgT1BUX00sCglPUFRfTU0sIE9QVF9NRywgT1BUX01ELCBPUFRfTU1EKTogTmV3IG1hY3Jvcy4KCShvcHRpb25zKTogTmV3IGFycmF5LgoJKGphdmFfbm9fYXJndW1lbnQpOiBSZW1vdmVkLgoJKGhlbHApOiBVcGRhdGVkIHdpdGggbWlzc2luZyBvcHRpb25zLgoJKG1haW4pOiBVc2UgZ2V0b3B0X2xvbmdfb25seSB0byBwYXJzZSBjb21tYW5kIGxpbmUuCgkodXNhZ2UpOiBDaGFuZ2VkIG1lc3NhZ2UuCgpUdWUgRmViICAxIDIyOjIzOjQxIDIwMDAgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogamF2YS10cmVlLmRlZiAoTkVXX0FOT05ZTU9VU19BUlJBWV9FWFBSKTogTmV3IHRyZWUgY29kZS4KCSogcGFyc2UuaCAoQU5PTllNT1VTX0FSUkFZX0JBU0VfVFlQRSwgQU5PTllNT1VTX0FSUkFZX0RJTVNfU0lHLAoJQU5PTllNT1VTX0FSUkFZX0lOSVRJQUxJWkVSKTogTmV3IGFjY2VzcyBtYWNyb3MuCgkqIHBhcnNlLnkgKGFycmF5X2NyZWF0aW9uX2V4cHJlc3Npb246KTogSGFuZGxlIGFub255bW91cyBhcnJheXMuCgkoYnVpbGRfYXJyYXlfZnJvbV9uYW1lKTogRG9uJ3Qgc2V0IGByZXRfbmFtZScgaWYgbnVsbC4KCShyZXNvbHZlX3F1YWxpZmllZF9leHByZXNzaW9uX25hbWUpOiBOZXcgY2FzZSBORVdfQU5PTllNT1VTX0FSUkFZX0VYUFIuCgkocXVhbGlmeV9hbWJpZ3VvdXNfbmFtZSk6IExpa2V3aXNlLgoJKGphdmFfY29tcGxldGVfZXhwYW5kX2NsYXNzKTogTGlrZXdpc2UuCgpUdWUgRmViICAxIDE0OjU5OjM1IDIwMDAgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogamF2YS10cmVlLmRlZiAoU1lOQ0hST05JWkVEX0VYUFIpOiBGaXhlZCB0eXBvLgoJKiBwYXJzZS5oIChNQU5HTEVfQUxJQVNfSU5JVElBTElaRVJfUEFSQU1FVEVSX05BTUVfSUQpOiBOZXcgbWFjcm8uCgkoTUFOR0xFX0FMSUFTX0lOSVRJQUxJWkVSX1BBUkFNRVRFUl9OQU1FX1NUUik6IExpa2V3aXNlLgoJKFNLSVBfVEhJU19BTkRfQVJUSUZJQ0lBTF9QQVJNUyk6IFVzZSBERUNMX0ZJTklUX1AuCgkoQUlQTF9GVU5DVElPTl9GSU5JVF9JTlZPQ0FUSU9OKTogUmVwbGFjZXMKCUFJUExfRlVOQ1RJT05fQ09NUExFVEVEX0lOVk9DQVRJT04uCgkoQUlQTF9GVU5DVElPTl9DVE9SX0lOVk9DQVRJT04pOiBSZXBsYWNlcwoJQUlQTF9GVU5DVElPTl9JTlZPQ0FUSU9OX1JFQURZLgoJKEFJUExfRlVOQ1RJT05fREVDTEFSQVRJT04pOiBOZXcgZW51bSBlbnRyeS4KCSogcGFyc2UueSAocmVvcmRlcl9zdGF0aWNfaW5pdGlhbGl6ZWQpOiBOZXcgZnVuY3Rpb24uCgkoamF2YV9wYXJzZXJfY29udGV4dF9wb3BfaW5pdGlhbGl6ZWRfZmllbGQpOiBVc2UgaXQuCgkoYWRkX2lubmVyX2NsYXNzX2ZpZWxkcyk6IFVzZQoJTUFOR0xFX0FMSUFTX0lOSVRJQUxJWkVSX1BBUkFNRVRFUl9OQU1FX0lELiBDb21tZW50CglhdWdtZW50ZWQuIEluc3RhbGwgbWFya2VyIGFmdGVyIGxhc3QgYWxpYXMgaW5pdGlhbGl6ZXIsIGlmIGFueS4KCShnZW5lcmF0ZV9maW5pdCk6IEZpeGVkIHR5cG8uIERvbid0IHRyeSB0byByZXRhaW4gb25seSB0aGUgdXNlZAoJZmllbGRzLgoJKG1ldGhvZF9oZWFkZXIpOiBDb21wdXRlIGFuZCBzZXQgREVDTF9GVU5DVElPTl9OQVAuCgkobWV0aG9kX2RlY2xhcmF0b3IpOiBGaXhlZCBjb21tZW50LiBJbnNlcnQgYWxpYXMgaW5pdGlhbGl6ZXIgaW4KCXBhcmFtZXRlciBsaXN0LgoJKGJ1aWxkX2FsaWFzX2luaXRpYWxpemVyX3BhcmFtZXRlcl9saXN0KTogRml4ZWQgbGVhZGluZwoJY29tbWVudC4gTmV3IGNhc2UgZm9yIEFJUExfRlVOQ1RJT05fREVDTEFSQVRJT04uIE9sZCBlbnVtIHZhbHVlCglyZXBsYWNlZCBieSBuZXcgb25lcy4gVXNlIE1BTkdMRV9BTElBU19JTklUSUFMSVpFUl9QQVJBTUVURVJfTkFNRV9JRC4KCShqYXZhX2NvbXBsZXRlX2V4cGFuZF9jbGFzcyk6IENvZGUgdG8gcmV0YWluIG9ubHkgdXNlZCBhbGlhc2VzCglyZW1vdmVkLgoJKGphdmFfY29tcGxldGVfZXhwYW5kX21ldGhvZHMpOiBOZXcgbG9jYWwgYGZpcnN0X2RlY2wnLiBHZW5lcmF0ZQoJJGZpbml0JCBmaXJzdCwgdGhlbiBleHBhbmQgdGhlIGNvbnN0cnVjdG9ycywgcmVndWxhciBtZXRob2RzIGFuZAoJPGNsaW5pdD4uCgkoamF2YV9jb21wbGV0ZV9leHBhbmRfbWV0aG9kKTogRG9uJ3QgcmVwb3J0IGVycm9yIG9uIG1pc3NpbmcKCXJldHVybiBzdGF0ZW1lbnQgaWYgcHJldmlvdXNseSBkZXRlY3RlZCBib2d1cy4KCShmaXhfY29uc3RydWN0b3JzKTogRG9uJ3QgcGF0Y2ggY29uc3RydWN0b3IgcGFyYW1ldGVycyBsaXN0LgoJKHBhdGNoX21ldGhvZF9pbnZvY2F0aW9uKTogVXNlIG5ldyBBSVBMIGVudW0gdmFsdWVzLiBSZXZlcnNlCglhbGlhcyBpbml0aWFsaXplciBsaXN0IGZvciBhbm9ueW1vdXMgY2xhc3Nlcy4KCjIwMDAtMDEtMzAgIEFudGhvbnkgR3JlZW4gIDxncmVlbkByZWRoYXQuY29tPgoKCSogamNmLXdyaXRlLmMgKGdlbmVyYXRlX2J5dGVjb2RlX2luc25zKTogVXNlIFRZUEVfSVNfV0lERSB0bwoJZGV0ZXJtaW5lIGhvdyBtYW55IHN0YWNrIHNsb3RzIHRvIHBvcC4KCjIwMDAtMDEtMjkgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogcGFyc2UueSAoZm9ybWFsX3BhcmFtZXRlcjopOiBTZXQgYCQkJyB0byBOVUxMX1RSRUUgZm9yIGJldHRlcgoJZXJyb3IgaGFuZGxpbmcvcmVjb3ZlcnkuCgkqIGphdmEtdHJlZS5oIChTWU5DSFJPTklaRURfRVhQUik6IEZpeGVkIHR5cG8gaW4gY29tbWVudC4KCkZyaSBKYW4gMjggMjA6MTA6NTcgMjAwMCAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBqYXZhLXRyZWUuaCAoQVJHX0ZJTkFMX1AsIEZJRUxEX0xPQ0FMX0FMSUFTLAoJRklFTERfTE9DQUxfQUxJQVNfVVNFRCk6IE5ldyBtYWNyb3MuCgkoREVDTF9GVU5DVElPTl9OQVApOiBOZXcgbWFjcm8uCgkoc3RydWN0IGxhbmdfZGVjbCk6IE5ldyBmaWVsZCBgbmFwJy4KCShUWVBFX0ZJTklUX1NUTVRfTElTVCwgVFlQRV9DTElOSVRfU1RNVF9MSVNUKTogTmV3IG1hY3Jvcy4KCShzdHJ1Y3QgbGFuZ190eXBlKTogTmV3IGZpZWxkcyBgZmluaXRfc3RtdF9saXN0JyBhbmQKCWBjbGluaXRfc3RtdF9saXN0Jy4KCShDTEFTU19IQVNfRklOSVRfUCk6IERlZmluZWQgdXNpbmcgVFlQRV9GSU5JVF9TVE1UX0xJU1QuCgkqIHBhcnNlLmggKE1BTkdMRV9PVVRFUl9MT0NBTF9WQVJJQUJMRV9OQU1FKTogTmV3IG1hY3JvLgoJKFNLSVBfVEhJU19BTkRfQVJUSUZJQ0lBTF9QQVJNUywgTUFSS19GSU5BTF9QQVJNUywKCVVOTUFSS19GSU5BTF9QQVJNUywgQ1JBRlRFRF9QQVJBTV9MSVNUX0ZJWFVQKTogTmV3IG1hY3Jvcy4KCShBSVBMX0ZVTkNUSU9OX0NSRUFUSU9OLCBBSVBMX0ZVTkNUSU9OX0NPTVBMRVRFRF9JTlZPQ0FUSU9OLAoJQUlQTF9GVU5DVElPTl9JTlZPQ0FUSU9OX1JFQURZKTogTmV3IGVudW0gZmllbGRzLgoJKEJVSUxEX1RIUk9XKTogTWFjcm8gbGluZSBzZXBhcmF0b3IgcmUtaW5kZW50ZWQuCgkqIHBhcnNlLnkgKGVuZF9jbGFzc19kZWNsYXJhdGlvbik6IE5ldyBmdW5jdGlvbi4KCShtYXliZV9nZW5lcmF0ZV9wcmVfZXhwYW5kX2NsaW5pdCk6IE5ldyBuYW1lIGZvcgoJamF2YV9wcmVfZXhwYW5kX2NsaW5pdC4gQ3JlYXRlIDxjbGluaXQ+IG9mZiBUWVBFX0NMSU5JVF9TVE1UX0xJU1QsCglwcmUtZXhwYW5kIHN0YXRpYyBmaWVsZHMuCgkobWF5YmVfZ2VuZXJhdGVfY2xpbml0KTogRnVuY3Rpb24gZGVsZXRlZC4KCShjaGVja19mb3Jfc3RhdGljX21ldGhvZF9yZWZlcmVuY2UpOiBQcm90b3R5cGUncyBwYXJhbWV0ZXIgbGlzdAoJaW5kZW50ZWQuCgkoZ2VuZXJhdGVfZmluaXQpOiBOZXcgbmFtZSBmb3IgbWF5YmVfZ2VuZXJhdGVfZmluaXQuIENoYW5nZWQKCWxlYWRpbmcgY29tbWVudC4gRnVuY3Rpb24gcmV3cml0dGVuIHRvIHVzZQoJVFlQRV9GSU5JVF9TVE1UX0xJU1QuIENhbGwgYnVpbGRfYWxpYXNfaW5pdGlhbGl6ZXJfcGFyYW1ldGVyX2xpc3QuCgkoYnVpbGRfYWxpYXNfaW5pdGlhbGl6ZXJfcGFyYW1ldGVyX2xpc3QpOiBOZXcgZnVuY3Rpb24uCgkoamF2YV9wYXJzZXJfY29udGV4dF9wb3BfaW5pdGlhbGl6ZWRfZmllbGQpOiBMaWtld2lzZS4KCShhZGRfaW5uZXJfY2xhc3NfZmllbGRzKTogTGlrZXdpc2UuCgkodHlwZV9kZWNsYXJhdGlvbjopOiBDYWxsIGVuZF9jbGFzc19kZWNsYXJhdGlvbi4KCShjbGFzc19tZW1iZXJfZGVjbGFyYXRpb246KTogTGlrZXdpc2UuCgkoZm9ybWFsX3BhcmFtZXRlcl9saXN0Oik6IEZpeGVkIHR5cG9zLgoJKGZvcm1hbF9wYXJhbWV0ZXI6KTogVXNlIEFSR19GSU5BTF9QIHRvIG1hcmsgY3JlYXRlZCB0cmVlIGxpc3QKCWVsZW1lbnQuIEltcHJvdmVkIGVycm9yIGhhbmRsaW5nLgoJKGJsb2NrX3N0YXRlbWVudDopOiBDYWxsIGVuZF9jbGFzc19kZWNsYXJhdGlvbi4KCShhbm9ueW1vdXNfY2xhc3NfY3JlYXRpb246KTogTGlrZXdpc2UuCgkoY3JlYXRlX2Fub255bW91c19jbGFzcyk6IEZpeGVkIGNvbW1lbnRzLgoJKGNyZWF0ZV9jbGFzcyk6IENhbGwgYWRkX2lubmVyX2NsYXNzX2ZpZWxkcy4KCShyZWdpc3Rlcl9maWVsZHMpOiBTZXQgRklFTERfTE9DQUxfQUxJQVMgYWNjb3JkaW5nIHRvIEFSR19GSU5BTF9QLgoJKG1ldGhvZF9oZWFkZXIpOiBVc2UgTUFSS19GSU5BTF9QQVJNUy4KCShmaW5pc2hfbWV0aG9kX2RlY2xhcmF0aW9uKTogVXNlIFVOTUFSS19GSU5BTF9QQVJNUy4KCShtZXRob2RfZGVjbGFyYXRvcik6IFByb3BhZ2F0ZSBmaW5hbCBhcmd1bWVudCBmbGFnLgoJKGNyYWZ0X2NvbnN0cnVjdG9yKTogTmV3IGxvY2FsIGBhcnRpZmljaWFsJy4gQ2FsbAoJYnVpbGRfYWxpYXNfaW5pdGlhbGl6ZXJfcGFyYW1ldGVyX2xpc3QuIFVzZQoJQ1JBRlRFRF9QQVJBTV9MSVNUX0ZJWFVQLCBhc3NpZ24gREVDTF9GVU5DVElPTl9OQVAuCgkoc291cmNlX3N0YXJ0X2phdmFfbWV0aG9kKTogTWFyayBwYXJtIGRlY2xzIHdpdGggTE9DQUxfRklOQUwgaWYKCW5lY2Vzc2FyeS4KCShjb21wbGV0ZV9leHBhbmRfY2xhc3MpOiBHZXQgcmlkIG9mIHVudXNlZCBvdXRlciBjb250ZXh0IGxvY2FsCglhbGlhcyBmaWVsZHMuCgkoamF2YV9jb21wbGV0ZV9leHBhbmRfbWV0aG9kcyk6IEZpeGVkIGxlYWRpbmcKCWNvbW1lbnQuIEdlbmVyYXRlL3ByZS1leHBhbmQgPGNsaW5pdD4gZmlyc3QuIENoYW5nZWQgbWV0aG9kCglleHBhbnNpb24gb3JkZXIgdG8gcmVndWxhciwgJGZpbml0JCwgY29uc3RydWN0b3JzLCA8Y2xpbml0Pi4KCShqYXZhX2NvbXBsZXRlX2V4cGFuZF9tZXRob2QpOiBTZXQgY3VycmVudF9mdW5jdGlvbl9kZWNsLgoJKGZpeF9jb25zdHJ1Y3RvcnMpOiBGaXggY29uc3RydWN0b3IgcGFyYW1ldGVyIGxpc3QgdG8gYWNjb3VudCBmb3IKCW91dGVyIGNvbnRleHQgbG9jYWwgYWxpYXMgaW5pdGlhbGl6ZXJzLgoJKHZlcmlmeV9jb25zdHJ1Y3Rvcl9zdXBlcik6IFVzZSBTS0lQX1RISVNfQU5EX0FSVElGSUNJQUxfUEFSTVMuCgkocmVzb2x2ZV9leHByZXNzaW9uX25hbWUpOiBMb29rdXAgb3V0ZXIgY29udGV4dCBsb2NhbCBhbGlhc2VzLiBOZXcKCWxvY2FsIGBhY2Nlc3MnLCB1c2UgaXQuCgkocGF0Y2hfbWV0aG9kX2ludm9jYXRpb24pOiBQYXRjaCBpbm5lciBjbGFzcyBjdG9yIGludm9jYXRpb24gd2l0aAoJb3V0ZXIgY29udGV4dCBsb2NhbCBhbGlhc2VzIGluaXRpYWxpemF0aW9uIHZhbHVlcy4gJGZpbml0JAoJaW52b2NhdGlvbiBwYXRjaGluZyBub3cgaW5jbHVkZXMgdGhpbmdzIGdlbmVyYXRlZCB3aXRoCglidWlsZF9hbGlhc19pbml0aWFsaXplcl9wYXJhbWV0ZXJfbGlzdC4KCShhcmd1bWVudF90eXBlc19jb252ZXJ0aWJsZSk6IFVzZSBTS0lQX1RISVNfQU5EX0FSVElGSUNJQUxfUEFSTVMuCgkoYnVpbGRfc3VwZXJfaW52b2NhdGlvbik6IExpa2V3aXNlLgoJKHBhdGNoX2Fzc2lnbm1lbnQpOiBDaGFuZ2VkIGNvbW1lbnQuCgoyMDAwLTAxLTI3ICBBbmRyZXcgSGFsZXkgIDxhcGhAY3lnbnVzLmNvbT4KCgkqIGpjZi13cml0ZS5jIChlbWl0X2dvdG8pOiBSRVNFUlZFIDMgYnl0ZXMgZm9yIGluc24uCgkoZW1pdF9pZik6IERpdHRvLgoJKGVtaXRfanNyKTogRGl0dG8uCgoyMDAwLTAxLTI1ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBwYXJzZS5oIChPQlNPTEVURV9NT0RJRklFUl9XQVJOSU5HKTogRG9uJ3QgdXNlIEFOU0kgc3RyaW5nCgljb25jYXRlbmF0aW9uLgoJKE9CU09MRVRFX01PRElGSUVSX1dBUk5JTkcyKTogTmV3IG1hY3JvIGFsbG93aW5nIHR3byBhcmdzLgoKCSogcGFyc2UueSAocmVnaXN0ZXJfZmllbGRzKTogRG9uJ3QgcGFzcyBhIGZvcm1hdCBzcGVjaWZpZXIgdG8KCU9CU09MRVRFX01PRElGSUVSX1dBUk5JTkcuCgkoY2hlY2tfYWJzdHJhY3RfbWV0aG9kX2hlYWRlcik6IFVzZSBPQlNPTEVURV9NT0RJRklFUl9XQVJOSU5HMgoJaW5zdGVhZCBvZiBPQlNPTEVURV9NT0RJRklFUl9XQVJOSU5HLCBhbmQgZG9uJ3QgcGFzcyBhIGZvcm1hdAoJc3BlY2lmaWVyLgoJKGNoZWNrX21vZGlmaWVycyk6IENoYW5nZSBmdW5jdGlvbiBpbnRvIGEgbWFjcm8uCgkoY2hlY2tfY2xhc3NfaW50ZXJmYWNlX2NyZWF0aW9uKTogUGFzcyBhIGxpdGVyYWwgZm9ybWF0IHN0cmluZy4KCjIwMDAtMDEtMjEgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGJ1ZmZlci5oOiBQUk9UTyAtPiBQQVJBTVMuCgkqIGNoZWNrLWluaXQuYzogTGlrZXdpc2UuCgkqIGNsYXNzLmM6IExpa2V3aXNlLgoJKiBjb25zdGFudHMuYzogTGlrZXdpc2UuCgkqIGNvbnZlcnQuaDogTGlrZXdpc2UuCgkqIGRlY2wuYzogTGlrZXdpc2UuCgkqIGV4Y2VwdC5jOiBMaWtld2lzZS4KCSogZXhwci5jOiBMaWtld2lzZS4KCSogZ2phdmFoLmM6IExpa2V3aXNlLgoJKiBqYXZhLWV4Y2VwdC5oOiBMaWtld2lzZS4KCSogamF2YS10cmVlLmg6IExpa2V3aXNlLgoJKiBqY2YtZGVwZW5kLmM6IExpa2V3aXNlLgoJKiBqY2YtZHVtcC5jOiBMaWtld2lzZS4KCSogamNmLXBhcnNlLmM6IExpa2V3aXNlLgoJKiBqY2YtcGF0aC5jOiBMaWtld2lzZS4KCSogamNmLXJlYWRlci5jOiBMaWtld2lzZS4KCSogamNmLXdyaXRlLmM6IExpa2V3aXNlLgoJKiBqY2YuaDogTGlrZXdpc2UuCgkqIGp2LXNjYW4uYzogTGlrZXdpc2UuCgkqIGp2Z2VubWFpbi5jOiBMaWtld2lzZS4KCSoganZzcGVjLmM6IExpa2V3aXNlLgoJKiBsYW5nLmM6IExpa2V3aXNlLgoJKiBsZXguYzogTGlrZXdpc2UuCgkqIGxleC5oOiBMaWtld2lzZS4KCSogcGFyc2Utc2Nhbi55OiBMaWtld2lzZS4KCSogcGFyc2UuaDogTGlrZXdpc2UuCgkqIHBhcnNlLnk6IExpa2V3aXNlLgoJKiB0eXBlY2suYzogTGlrZXdpc2UuCgkqIHZlcmlmeS5jOiBMaWtld2lzZS4KCSogeHJlZi5jOiBMaWtld2lzZS4KCSogeHJlZi5oOiBMaWtld2lzZS4KCSogemV4dHJhY3QuYzogTGlrZXdpc2UuCgkqIHppcGZpbGUuaDogTGlrZXdpc2UuCgoyMDAwLTAxLTE4ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIGNsYXNzLmMgKG1ha2VfY2xhc3MpOiBVc2UgTUFZQkVfQ1JFQVRFX1RZUEVfVFlQRV9MQU5HX1NQRUNJRklDLgoJKGlzX2NvbXBpbGVkX2NsYXNzKTogUmVtb3ZlIHRlc3Qgb24gVFlQRV9MQU5HX1NQRUNJRklDLCB1c2UgVFlQRV9KQ0YuCgkqIGNvbnN0YW50cy5jIChidWlsZF9jb25zdGFudF9kYXRhX3JlZik6IENoZWNrIGZvciBjYWNoZWQKCWN1cnJlbnRfY29uc3RhbnRfcG9vbF9kYXRhX3JlZi4gQ2FjaGUgY3VycmVudF9jb25zdGFudF9wb29sX2RhdGFfcmVmCglpbiBUWVBFX0NQT09MX0RBVEVfUkVGLgoJKiBqYXZhLXRyZWUuaCAoVFlQRV9KQ0YsIFRZUEVfQ1BPT0wsIFRZUEVfQ1BPT0xfREFUQV9SRUYsCglNQVlCRV9DUkVBVEVfVFlQRV9UWVBFX0xBTkdfU1BFQ0lGSUM6KSBOZXcgbWFjcm9zLgoJKHN0cnVjdCBsYW5nX3R5cGUpOiBOZXcgZmllbGRzIGBjcG9vbCcgYW5kIGBjcG9vbF9kYXRhX3JlZicuCgkoTE9DQUxfRklOQUwpOiBOZXcgbWFjcm8uCgkqIGpjZi1wYXJzZS5jIChpbml0X291dGdvaW5nX2Nwb29sKTogQWx3YXlzIGFsbG9jYXRlIG5ldyBvdXRnb2luZwoJY29uc3RhbnQgcG9vbCAtLSBkb24ndCB0cnkgdG8gcmV1c2UuCgkocGFyc2VfemlwX2ZpbGVfZW50cmllcyk6IFVzZSBUWVBFX0pDRiwgZG9uJ3QgbGF6aWx5IGFsbG9jYXRlCglUWVBFX0xBTkdfU1BFQ0lGSUMuCgkoZmluZF9pbl9jdXJyZW50X3ppcCk6IFVzZSBUWVBFX0pDRi4KCSogcGFyc2UuaCAoamF2YV9jaGVja19maW5hbCk6IFByb3RvdHlwZSByZW1vdmVkLgoJKiBwYXJzZS55IChjcmVhdGVfY2xhc3MpOiBSZXZlcnNlZCBKYW4gMTIsIDIwMDAgZXh0cmEgYXJndW1lbnQgcGF0Y2guCgkobWF5YmVfY3JlYXRlX2NsYXNzX2ludGVyZmFjZV9kZWNsLAoJY2hlY2tfY2xhc3NfaW50ZXJmYWNlX2NyZWF0aW9uKTogTGlrZXdpc2UuCgkoamF2YV9leHBhbmRfZmluYWxzKTogRnVuY3Rpb24gcmVtb3ZlZC4KCShjbGFzc19kZWNsYXJhdGlvbjopOiBSZXZlcnNlZCBKYW4gMTIsIDIwMDAgZXh0cmEgYXJndW1lbnQgcGF0Y2guCgkoYmxvY2tfc3RhdGVtZW50Oik6IEZpeGVkIGNvbW1lbnQuCgkoYW5vbnltb3VzX2NsYXNzX2NyZWF0aW9uOik6IExpa2V3aXNlLgoJKGNoZWNrX2NsYXNzX2ludGVyZmFjZV9jcmVhdGlvbik6IFJldmVyc2VkIEphbiAxMiwgMjAwMCBleHRyYQoJYXJndW1lbnQgcGF0Y2guCgkoY2hlY2tfY2xhc3NfaW50ZXJmYWNlX2NyZWF0aW9uKTogTG9vc2VuZWQgZXJyb3IgcmVwb3J0IG9uIChpbm5lcikKCXB1YmxpYyBjbGFzcyBkZWNsYXJhdGlvbnMuIENQQ19JTk5FUl9QIHJlcGxhY2VzIEdFVF9DUENfTElTVC4KCShsaW5rX25lc3RlZF9jbGFzc190b19lbmNsb3NpbmcpOiBSZXZlcnNlZCBKYW4gMTIsIDIwMDAgcGF0Y2guCgkobWF5YmVfY3JlYXRlX2NsYXNzX2ludGVyZmFjZV9kZWNsKTogUmV2ZXJzZWQgSmFuIDEyLCAyMDAwIGV4dHJhCglhcmd1bWVudCBwYXRjaC4KCShjcmVhdGVfaW50ZXJmYWNlKTogTGlrZXdpc2UuCgkoYW5vbnltb3VzX2NsYXNzX2NvdW50ZXIpOiBOZXcgc3RhdGljIGdsb2JhbC4KCShjcmVhdGVfYW5vbnltb3VzX2NsYXNzKTogUmV2ZXJzZWQgSmFuIDEyLCAyMDAwIGV4dHJhIGFyZ3VtZW50CglwYXRjaC4gRml4ZWQgY29tbWVudHMuCgkoY3JlYXRlX2NsYXNzKTogUmV2ZXJzZWQgSmFuIDEyLCAyMDAwIGV4dHJhIGFyZ3VtZW50IHBhdGNoLiBSZXNldAoJYW5vbnltb3VzX2NsYXNzX2NvdW50ZXIgd2hlbiBkZWNsYXJpbmcgYSB0b3BsZXZlbCBjbGFzcy4KCShjcmFmdF9jb25zdHJ1Y3Rvcik6IEZpeGVkIGNvbnN0cnVjdG9yIG5hbWUgd2hlbiBoYW5kbGluZwoJYW5vbnltb3VzIGNsYXNzZXMuIEFub255bW91cyBjbGFzcyBjb25zdHJ1Y3RvcnMgdG8gZmVhdHVyZSBoaWRkZW4KCXRoaXMkPG4+IHBhcmFtZXRlci4KCShqYXZhX2ZpeF9jb25zdHJ1Y3RvcnMpOiBBZGRlZCBjb21tZW50LgoJKGphdmFfY2hlY2tfZmluYWwpOiBGdW5jdGlvbiByZW1vdmVkLgoJKGphdmFfY29tcGxldGVfZXhwYW5kX21ldGhvZHMpOiBGaXhlZCBjb21tZW50LiBEb24ndCBnZW5lcmF0ZQoJY2xhc3MgZGF0YSwgc2F2ZSBpdHMgb3V0Z29pbmcgY29uc3RhbnQgcG9vbCBpbnN0ZWFkLgoJKHZlcmlmeV9jb25zdHJ1Y3Rvcl9zdXBlcik6IFNraXAgYW5vbnltb3VzIGNsYXNzIGNvbnN0cnVjdG9yCgloaWRkZW4gdGhpcyQ8bj4gcGFyYW1ldGVyLgoJKGphdmFfZXhwYW5kX2NsYXNzZXMpOiBOZXcgbG9jYWwgYHNhdmVkX2N0eHAnLiBSZW1vdmVkIGNhbGwgdG8KCWphdmFfZXhwYW5kX2ZpbmFscyBhbmQgamF2YV9jaGVja19maW5hbC4gRXhwYW5kIGFub255bW91cyBjbGFzcwoJY29uc3RydWN0b3JzLiBHZW5lcmF0ZSBjbGFzcyBkYXRhLgoJKGJ1aWxkX3N1cGVyX2ludm9jYXRpb24pOiBTa2lwIGFub255bW91cyBjbGFzcyBoaWRkZW4gdGhpcyQ8bj4KCXBhcmFtZXRlci4KCSogdHlwZWNrLmMgKGJ1aWxkX2phdmFfc2lnbmF0dXJlKTogVXNlIFRZUEVfU0lHTkFUVVJFIGFuZAoJTUFZQkVfQ1JFQVRFX1RZUEVfVFlQRV9MQU5HX1NQRUNJRklDLgoJKHNldF9qYXZhX3NpZ25hdHVyZSk6IExpa2V3aXNlLgoKTW9uIEphbiAxOCAxNDozMDowOSAyMDAwICBKb2VyZyBCcnVuc21hbm4gIDxqb2VyZy5icnVuc21hbm5AZmVybnVuaS1oYWdlbi5kZT4KCgkqIGdqYXZhaC5jOiBEZWxldGUgQUNDX1ZJU0lCSUxJVFkgZGVmaW5lLgoJKiBqY2YuaDogQWRkIEFDQ19WSVNJQklMSVRZIGRlZmluZS4KCSogcGFyc2UueTogZmluYWw6IHJ1bGUgdGFnZ2VkIDx2YWx1ZT4uCgkoamF2YV9jaGVja19yZWd1bGFyX21ldGhvZHMpOiBVc2UgQUNDX1ZJU0lCSUxJVFkgZGVmaW5lIGZvcgoJZGVmYXVsdCBwYWNrYWdlIGFjY2VzcyBjaGVjay4KCShsb2NhbF92YXJpYWJsZV9kZWNsYXJhdGlvbl9zdGF0ZW1lbnQpOiBVc2UgZmluYWw6IHJ1bGUuCgpNb24gSmFuIDE3IDExOjU4OjE3IDIwMDAgIEpvZXJnIEJydW5zbWFubiAgPGpvZXJnLmJydW5zbWFubkBmZXJudW5pLWhhZ2VuLmRlPgoKCSogcGFyc2UueSAoZm9ybWF0X3BhcmFtZXRlcjopOiBVc2UgZmluYWw6IHJ1bGUgaW5zdGVhZCBvZiBtb2RpZmllcnM6LgoJKGZpbmFsOik6IE5ldyBydWxlLgoKMjAwMC0wMS0xNyAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgoKCSogZ2phdmFoLmMgKHByaW50X2ZpZWxkX2luZm8pOiBBbGxvdyBub24tc3RhdGljIGZpbmFsIGZpZWxkcy4KCkZyaSBKYW4gMTQgMTg6MDM6NDEgMjAwMCAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBwYXJzZS5oIChlbnVtIGpkZXBfY29kZSk6IE5ldyBlbnRyeSBgSkRFUF9BTk9OWU1PVVMnLgoJKiBwYXJzZS55IChwYXRjaF9hbm9ueW1vdXNfY2xhc3MpOiBOZXcgZnVuY3Rpb24uCgkoY3JlYXRlX2Fub255bW91c19jbGFzcyk6IFJlZ2lzdGVyIGluY29tcGxldGUgdHlwZSB3aGVuIHRoZQoJY2xhc3MvaW50ZXJmYWNlIHRvIGV4dGVuZHMvaW1wbGVtZW50IGlzbid0IGtub3duIHlldC4KCShwYXJzZXJfY2hlY2tfc3VwZXJfaW50ZXJmYWNlKTogU2ltcGxpZnkgYXJndW1lbnQgdG8gQ0xBU1NfSU5URVJGQUNFLgoJKHZlcmlmeV9jb25zdHJ1Y3Rvcl9zdXBlcik6IFR1bmVkIGVycm9yIG1lc3NhZ2UuCgpGcmkgSmFuIDE0IDAwOjE0OjI0IDIwMDAgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogamF2YS10cmVlLmggKEZPUl9MT09QX1ApOiBSZXBsYWNlcyBJU19GT1JfTE9PUF9QLgoJKEFOT05ZTU9VU19DTEFTU19QKTogTmV3IG1hY3JvLgoJKFRZUEVfU0lHTkFUVVJFLCBUWVBFX0pDRik6IE5ldyBtYWNyb3MuCgkoSU5ORVJfQ0xBU1NfVFlQRV9QKTogRml4ZWQgdHlwbyBpbiBsZWFkaW5nIGNvbW1lbnQuCgkqIHBhcnNlLnkgKGNyZWF0ZV9jbGFzcyk6IEFkZGVkIGxlYWRpbmcgYXJndW1lbnQuCgkobWF5YmVfY3JlYXRlX2NsYXNzX2ludGVyZmFjZV9kZWNsLAoJY2hlY2tfY2xhc3NfaW50ZXJmYWNlX2NyZWF0aW9uKTogTGlrZXdpc2UuCgkoY3JhZnRfY29uc3RydWN0b3IpOiBOZXcgZnVuY3Rpb24uCgkodmVyaWZ5X2NvbnN0cnVjdG9yX3N1cGVyKTogQWRkZWQgYXJndW1lbnQgaW4gcHJvdG90eXBlLgoJKGNsYXNzX2RlY2xhcmF0aW9uOik6IEluc2VydGVkIGxlYWRpbmcgYXJndW1lbnQuCgkoZm9yX2JlZ2luOik6IFVzZSBGT1JfTE9PUF9QLgoJKGFub255bW91c19jbGFzc19jcmVhdGlvbik6IENyZWF0ZSBXRkwgb2YgdGhlIGFub255bW91cyBjbGFzcyB0bwoJaW5zdGFudGlhdGUuIENhbGwgYnVpbGRfbmV3X2ludm9jYXRpb24uIEFkZGVkIGNvbW1lbnRzLgoJKGNoZWNrX2NsYXNzX2ludGVyZmFjZV9jcmVhdGlvbik6IEhhbmRsZSBwYXJhbWV0ZXIgYGFub255bW91cycgaW4KCXZlcmJvc2UgbW9kZSBjbGFzcyBjcmVhdGlvbiBhbm5vdW5jZS4KCShsaW5rX25lc3RlZF9jbGFzc190b19lbmNsb3NpbmcpOiBFeGNsdWRlIGFub255bW91cyBjbGFzc2VzLgoJKG1heWJlX2NyZWF0ZV9jbGFzc19pbnRlcmZhY2VfZGVjbCk6IERvbid0IHNldCBERUNMX0NPTlRFWFQgb24KCWFub255bW91cyBjbGFzcywgZXZlbiB0aG91Z2ggdGhleSBhcHBlYXIgdG8gaGF2ZSBhbiBlbmNsb3NpbmcKCWNvbnRleHQuCgkoY3JlYXRlX2ludGVyZmFjZSk6IFBhc3MgZXh0cmEgYXJndW1lbnQgdG8KCWNoZWNrX2NsYXNzX2ludGVyZmFjZV9jcmVhdGlvbi4KCShjcmVhdGVfYW5vbnltb3VzX2NsYXNzKTogU2V0IEFOT05ZTU9VU19DTEFTU19QIHRvIDEuCgkoY3JlYXRlX2NsYXNzKTogQ2FsbCBjaGVja19jbGFzc19pbnRlcmZhY2VfY3JlYXRpb24gYW5kCgltYXliZV9jcmVhdGVfY2xhc3NfaW50ZXJmYWNlX2RlY2wgd2l0aCBleHRyYSBuZXcgYXJndW1lbnQuIERvbid0CglhZGQgcHJpdmF0ZSB0aGlzJDxuPiB0byBhbm9ueW1vdXMgY2xhc3Nlcy4KCShtZXRob2RfZGVjbGFyYXRvcik6IEluc2VydCBoaWRkZW4gdGhpcyQ8bj4gdG8gYW5vbnltb3VzIGNsYXNzCgljb25zdHJ1Y3RvcnMuCgkoamF2YV9maXhfY29uc3RydWN0b3JzKTogRGVsZXRlZCBjb2RlIGNyZWF0aW5nIGRlZmF1bHQKCWNvbnN0cnVjdG9yLiBDYWxsIGNyYWZ0X2NvbnN0cnVjdG9yIGluc3RlYWQuCgkoamF2YV9jaGVja19yZWd1bGFyX21ldGhvZHMpOiBTZXQgYHNhd19jb25zdHJ1Y3RvcicgdG8gMSBmb3IKCWFub255bW91cyBjbGFzc2VzLgoJKGZpeF9jb25zdHJ1Y3RvcnMpOiBQYXNzIGV4dHJhIGFyZ3VtZW50IHRvIHZlcmlmeV9jb25zdHJ1Y3Rvcl9zdXBlci4KCSh2ZXJpZnlfY29uc3RydWN0b3Jfc3VwZXIpOiBOZXcgbG9jYWwgYHNkZWNsJywgdXNlIGl0LiBTZWFyY2ggZm9yCgltYXRjaGluZyBjb25zdHJ1Y3RvciAocG9zc2libHkgZmVhdHVyaW5nIGFyZ3VtZW50cykgaW4gc3VwZXIKCWNsYXNzLgoJKGxvb2t1cF9tZXRob2RfaW52b2tlKTogQ3JhZnQgY29uc3RydWN0b3IgYWNjb3JkaW5nIHRvIGFyZ3VtZW50cwoJbGlzdCB3aGVuIGRlYWxpbmcgd2l0aCBhbm9ueW1vdXMgY2xhc3MgY29uc3RydWN0b3JzLgoJKGJ1aWxkX3N1cGVyX2ludm9jYXRpb24pOiBQYXNzIGFyZ3VtZW50cyB0byBhbm9ueW1vdXMgY2xhc3Mgc3VwZXIKCWNvbnN0cnVjdG9ycy4KCShzZWFyY2hfbG9vcCk6IFVzZSBGT1JfTE9PUF9QLgoJKGxhYmVsZWRfYmxvY2tfY29udGFpbnNfbG9vcF9wKTogTGlrZXdpc2UuCgpXZWQgSmFuIDEyIDAwOjM4OjQ3IDIwMDAgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogY2xhc3MuYyAoc2V0X3N1cGVyX2luZm8pOiBTZXQgQ0xBU1NfU1RBVElDIHdoZW4gYXBwcm9wcmlhdGUuCgkoZW5jbG9zaW5nX2NvbnRleHRfcCk6IE5ldyBmdW5jdGlvbi4KCShnZXRfYWNjZXNzX2ZsYWdzX2Zyb21fZGVjbCk6IEhhbmRsZSBDTEFTU19TVEFUSUMuCgkobWF5YmVfbGF5b3V0X3N1cGVyX2NsYXNzKTogRXh0cmEgZmlyc3QgYXJndW1lbnQgcGFzc2VkIHRvCglkb19yZXNvbHZlX2NsYXNzLgoJKGxheW91dF9jbGFzc19tZXRob2QpOiBVc2UgSURfRklOSVRfUCwgREVDTF9DTElOSVRfUCBhbmQKCUlEX0lOSVRfUC4KCSogZGVjbC5jIChhY2Nlc3MwX2lkZW50aWZpZXJfbm9kZSk6IE5ldyBnbG9iYWwuCgkoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBhY2Nlc3MwX2lkZW50aWZpZXJfbm9kZSBpbml0aWFsaXplZC4KCShwdXNoZGVjbCk6IFNldCBERUNMX0NPTlRFWFQgb25seSBvbiBub24gdHlwZSBkZWNscy4KCSogZXhwci5jIChsb29rdXBfZmllbGQpOiBMb29rdXAgaW5uZXIgY2xhc3MgZmllbGRzIGluIGVuY2xvc2luZwoJY29udGV4dHMuCgkoZXhwYW5kX2ludm9rZSk6IFVzZSBJRF9JTklUX1AuCgkoZXhwYW5kX2phdmFfZmllbGRfb3ApOiBVc2UgREVDTF9DTElOSVRfUC4KCSogamF2YS10cmVlLmRlZiAoQ0xBU1NfTElURVJBTCk6IE5ldyB0cmVlIGNvZGUuCgkqIGphdmEtdHJlZS5oIChERUNMX0ZVTkNUSU9OX0FDQ0VTU19ERUNMLAoJREVDTF9GVU5DVElPTl9JTk5FUl9BQ0NFU1MsIEZJRUxEX0lOTkVSX0FDQ0VTUyk6IE5ldyBtYWNyb3MuCgkoc3RydWN0IGxhbmdfZGVjbCk6IE5ldyBmaWVsZCBgaW5uZXJfYWNjZXNzJy4KCShlbmNsb3NpbmdfY29udGV4dF9wKTogUHJvdG90eXBlZC4KCShERUNMX0lOSVRfUCwgREVDTF9GSU5JVF9QLCBERUNMX0NMSU5JVF9QLCBJRF9JTklUX1AsIElEX0ZJTklUX1AsCglJRF9DTElOSVRfUCk6IE5ldyBtYWNyb3MuCgkoQ0xBU1NfU1RBVElDKTogTmV3IG1hY3JvLgoJKENMQVNTX0FDQ0VTUzBfR0VORVJBVEVEX1ApOiBOZXcgbWFjcm8uCgkoT1VURVJfRklFTERfQUNDRVNTX0lERU5USUZJRVJfUCwgSU5ORVJfQ0xBU1NfREVDTF9QLAoJVE9QTEVWRUxfQ0xBU1NfREVDTF9QLCBJTk5FUl9DTEFTU19UWVBFX1AsIFRPUExFVkVMX0NMQVNTX1RZUEVfUCwKCUlOTkVSX0NMQVNTX1ApOiBOZXcgbWFjcm9zLgoJKERFQ0xfSU5ORVJfQ0xBU1NfTElTVCk6IE5ldyBtYWNyby4KCSogamNmLXBhcnNlLmMgKHl5cGFyc2UpOiBBdm9pZCB0aGUgdXNlIG9mIEFOU0kgc3RyaW5nCgljb25jYXRlbmF0aW9uLgoJKiBqY2Ytd3JpdGUuYyAoZ2VuZXJhdGVfYnl0ZWNvZGVfaW5zbnMpOiBiaW5vcDogQ2hhbmdlIHRoZSB0eXBlIG9mCgl0aGUgc2hpZnQgdmFsdWUgdG8gaW50LiBGaXhlZCB0eXBvIGluIGNvbW1lbnQuCgkqIGxleC5jIChpbnN0X2lkLCB3cHZfaWQpOiBJbml0aWFsaXplLgoJKiBtYW5nbGUuYyAodW5pY29kZV9tYW5nbGluZ19sZW5ndGgpOiBUYWtlIGAkJyBpbnRvIGFjY291bnQuCgkqIHBhcnNlLmggKERSRUNPVkVSLCBSRUNPVkVSKTogVGVybWluYXRlIHByb3Blcmx5LgoJKElERU5USUZJRVJfSU5ORVJfQ0xBU1NfT1VURVJfRklFTERfQUNDRVNTKTogTmV3IG1hY3JvLgoJKHR5cGVkZWYgc3RydWN0IF9qZGVwKTogTmV3IGZpZWxkIGBlbmNsb3NpbmcnLgoJKEpERVBfRU5DTE9TSU5HKTogTmV3IG1hY3JvLgoJKElTX0NMSU5JVCk6IERlbGV0ZWQgKERFQ0xfQ0xJTklUX1AgcmVwbGFjZXMgaXQuKQoJKHN0cnVjdCBwYXJzZXJfY3R4dCk6IE5ldyBmaWVsZHMgYG1hcmtlcl9iZWdpbm5pbmcnLCBgbWFya2VkX2VuZCcuCgkoR0VUX0NQQ19MSVNULCBDUENfSU5ORVJfUCwgR0VUX0NQQywgR0VUX0NQQ19VTiwgR0VUX0NQQ19VTl9NT0RFLAoJR0VUX0NQQ19ERUNMX05PREUsIEdFVF9FTkNMT1NJTkdfQ1BDLCBHRVRfTkVYVF9FTkNMT1NJTkdfQ1BDLAoJR0VUX0VOQ0xPU0lOR19DUENfQ09OVEVYVCk6IE5ldyBtYWNyb3MuCgkoUFVTSF9DUEMsIFBVU0hfRVJST1IsIFBPUF9DUEMpOiBOZXcgbWFjcm9zLgoJKGRvX3Jlc29sdmVfY2xhc3MpOiBBZGRlZCBleHRyYSBhcmd1bWVudCBpbiBwcm90b3R5cGUuCgkqIHBhcnNlLnkgKHJlc29sdmVfY2xhc3MpOiBBZGRlZCBleHRyYSBhcmd1bWVudCBpbiBwcm90b3R5cGUuCgkobWF5YmVfY3JlYXRlX2NsYXNzX2ludGVyZmFjZV9kZWNsKTogTGlrZXdpc2UuCgkobWF5YmVfdXNlX2FjY2Vzc19tZXRob2QsIGJ1aWxkX3dmbF93cmFwKTogTmV3IGZ1bmN0aW9ucy4KCShqYXZhX2NvbXBsZXRlX2V4cGFuZF9jbGFzc2VzLCBqYXZhX2NvbXBsZXRlX2V4cGFuZF9jbGFzcyk6CglMaWtld2lzZS4KCShqYXZhX3BhcnNlcl9jb250ZXh0X3B1c2hfaW5pdGlhbGl6ZWRfZmllbGQsCglqYXZhX3BhcnNlcl9jb250ZXh0X3N1c3BlbmQsIGphdmFfcGFyc2VyX2NvbnRleHRfcmVzdW1lKToKCUxpa2V3aXNlLgoJKG1heWJlX21ha2VfbmVzdGVkX2NsYXNzX25hbWUsIG1ha2VfbmVzdGVkX2NsYXNzX25hbWUsCglzZXRfbmVzdGVkX2NsYXNzX3NpbXBsZV9uYW1lX3ZhbHVlLAoJbGlua19uZXN0ZWRfY2xhc3NfdG9fZW5jbG9zaW5nLCBmaW5kX2FzX2lubmVyX2NsYXNzLAoJZmluZF9hc19pbm5lcl9jbGFzc19kbywgY2hlY2tfaW5uZXJfY2xhc3NfcmVkZWZpbml0aW9uLAoJYnVpbGRfdGhpc25fYXNzaWduLCBidWlsZF9jdXJyZW50X3RoaXNuLCBidWlsZF9hY2Nlc3NfdG9fdGhpc24sCgltYXliZV9idWlsZF90aGlzbl9hY2Nlc3NfbWV0aG9kLCBidWlsZF9vdXRlcl9maWVsZF9hY2Nlc3MsCglidWlsZF9vdXRlcl9maWVsZF9hY2Nlc3NfbWV0aG9kcywgYnVpbGRfb3V0ZXJfZmllbGRfYWNjZXNzX2V4cHIsCglidWlsZF9vdXRlcl9tZXRob2RfYWNjZXNzX21ldGhvZCwgYnVpbGRfbmV3X2FjY2Vzc19pZCwKCWJ1aWxkX291dGVyX2ZpZWxkX2FjY2Vzc19tZXRob2QsIG91dGVyX2ZpZWxkX2FjY2Vzc19wLAoJb3V0ZXJfZmllbGRfZXhwYW5kZWRfYWNjZXNzX3AsIG91dGVyX2ZpZWxkX2FjY2Vzc19maXgsCglidWlsZF9pbmNvbXBsZXRlX2NsYXNzX3JlZiwgcGF0Y2hfaW5jb21wbGV0ZV9jbGFzc19yZWYsCgljcmVhdGVfYW5vbnltb3VzX2NsYXNzKTogTGlrZXdpc2UuCgkoaW5zdF9pZCwgd3B2X2lkKTogTmV3IHN0YXRpYyBnbG9iYWwgdmFyaWFibGVzLgoJKHN5bmNocm9uaXplZDopOiBOZXcgcnVsZSwgdGFnZ2VkIDxub2RlPi4KCSh0eXBlX2RlY2xhcmF0aW9uOik6IE5vIGxvbmdlciB0YWdnZWQgPG5vZGU+LiBDYWxsIFBPUF9DUEMgaW4gc3ViCglydWxlcy4KCShhbm9ueW1vdXNfY2xhc3NfY3JlYXRpb246KTogTmV3IHJ1bGUsIHRhZ2dlZCA8bm9kZT4uCgkoTkVXX1RLKTogVGFnZ2VkIDxub2RlPi4KCSh0eXBlX2xpdGVyYWxzLCBhcnJheV90eXBlX2xpdGVyYWwpOiBOZXcgcnVsZXMsIHRhZ2dlZCA8bm9kZT4uCgkoY2xhc3NfZGVjbGFyYXRpb246KTogUmVtb3ZlZCBhY3Rpb24gd2hlbiByZWR1Y2luZyBieSBjbGFzc19ib2R5OgoJKGNsYXNzX2JvZHk6KTogU2V0IERFQ0xfRU5EX1NPVVJDRV9MSU5FIGFuZCBydWxlJ3MgcmV0dXJuZWQgdmFsdWUKCXVzaW5nIEdFVF9DUEMgaW4gc3ViLXJ1bGVzLgoJKGNsYXNzX21lbWJlcl9kZWNsYXJhdGlvbik6IEhhbmRsZSBpbm5lciBjbGFzc2VzLgoJKG1ldGhvZF9kZWNsYXJhdGlvbik6IFdoZW4gcmVkdWNpbmcgbWV0aG9kX2hlYWRlcjosIHJlc2V0CgljdXJyZW50X2Z1bmN0aW9uX2RlY2wgd2hlbiBhcHByb3ByaWF0ZS4KCShtZXRob2RfZGVjbGFyYXRvcjopOiBTZXQgdGhlIG51bWJlciBvZiBmb3JtYWwgcGFyYW1ldGVyIHRvIDAgZm9yCgltZXRob2QgZGVjbGFyZWQgd2l0aG91dCBhcmd1bWVudHMuCgkoY29uc3RydWN0b3JfZGVjbGFyYXRvcjopOiBMaWtld2lzZS4KCShzdGF0aWNfaW5pdGlhbGl6ZXI6KTogTGlzdCBvZiBlbGVtZW50cyBrZXB0IGluIGEgbGlzdC4KCShzdGF0aWM6KTogUnVsZSBtb2RpZmllcnM6IHJlcGxhY2VzIE1PRElGSUVSX1RLLiBFbmZvcmNlIGNvcnJlY3QKCXVzZSBvZiB0aGUga2V5d29yZCBgc3RhdGljJyBmb3IgdHlwZSBkZWNsYXJhdGlvbnMuCgkoYmxvY2tfc3RhdGVtZW50Oik6IEhhbmRsZSBpbm5lciBjbGFzcyBkZWNsYXJhdGlvbnMuCgkocHJpbWFyeV9ub19uZXdfYXJyYXk6KTogVXNlIHR5cGVfbGl0ZXJhbHM6LiBGaXhlZCBjb21tZW50LiBIYW5kbGUKCXR5cGUgcXVhbGlmaWVkIGB0aGlzJy4KCShjbGFzc19pbnN0YW5jZV9jcmVhdGlvbl9leHByZXNzaW9uKTogVXNlIGFub255bW91c19jbGFzc19jcmVhdGlvbjoKCXRvIGhhbmRsZSBpbm5lciBjbGFzcyBpbnN0YW5jZXMgY3JlYXRpb24uIEhhbmRsZSBxdWFsaWZpZWQgYG5ldycuCgkoc29tZXRoaW5nX2RvdF9uZXcpOiBBZGRlZCBhcHByb3ByaWF0ZSBhY3Rpb25zLgoJKGNyZWF0ZV9uZXdfcGFyc2VyX2NvbnRleHQpOiBOZXcgZnVuY3Rpb24uCgkoamF2YV9wdXNoX3BhcnNlcl9jb250ZXh0LCBqYXZhX3BhcnNlcl9jb250ZXh0X3NhdmVfZ2xvYmFsLAoJamF2YV9wYXJzZXJfY29udGV4dF9zdXNwZW5kKTogVXNlIGNyZWF0ZV9uZXdfcGFyc2VyX2NvbnRleHQuCgkoY2hlY2tfbW9kaWZpZXJzKTogQ2hhbmdlZCBsZWFkaW5nIGNvbW1lbnQuCgkoY2hlY2tfY2xhc3NfaW50ZXJmYWNlX2NyZWF0aW9uKTogSGFuZGxlIGludGVyY2xhc3Nlcy4KCShhZGRfc3VwZXJpbnRlcmZhY2VzKTogRml4ZWQgY29tbWVudC4KCShjcmVhdGVfaW50ZXJmYWNlKTogQnVpbGQgcXVhbGlmaWVkIG5hbWUgZnJvbSB0aGUgcmF3X25hbWUgaW5zdGVhZAoJb2YgaXRzIG1hdGNoaW5nIFdGTC4gUHVzaCB0aGUgaW5pdGlhbGl6ZWQgZmllbGRzIGxpc3QuIHJhd19uYW1lIGFkZGVkCglhcyBhbiBleHRyYSBhcmd1bWVudCB0byBtYXliZV9jcmVhdGVfY2xhc3NfaW50ZXJmYWNlX2RlY2wuCgkoY3JlYXRlX2NsYXNzKTogQnVpbGQgcXVhbGlmaWVkIG5hbWUgZnJvbSB0aGUgcmF3X25hbWUgaW5zdGVhZCBvZgoJaXRzIG1hdGNoaW5nIFdGTC4gUmVtb3ZlZCBhc3NpZ25tZW50IHRvCWN1cnJlbnRfcGFyc2VkX2NsYXNzX3VuLgoJQ2FsbCBQVVNIX0VSUk9SIGJlZm9yZSByZXR1cm5pbmcgYW4gZXJyb3IuIFN1c3BlbmQgdGhlIGN1cnJlbnQKCXBhcnNlciBjb250ZXh0IHdoZW4gcHJvY2Vzc2luZyBhbiBpbm5lciBjbGFzcy4gUHVzaCB0aGUKCWluaXRpYWxpemVkIGZpZWxkcyBsaXN0LiByYXdfbmFtZSBhZGRlZCBhcyBhbiBleHRyYSBhcmd1bWVudCB0bwoJbWF5YmVfY3JlYXRlX2NsYXNzX2ludGVyZmFjZV9kZWNsLiBBZGQgdGhlIHByaXZhdGUgdGhpcyQ8bj4KCWZpZWxkLgoJKGR1cGxpY2F0ZV9kZWNsYXJhdGlvbl9lcnJvcl9wKTogVXNlIEdFVF9DUEMgd2hlbiBjYWxsaW5nIGZpbmRfZmllbGQuCgkocmVnaXN0ZXJfZmllbGRzKTogR2V0IHRoZSBjbGFzcyB0eXBlIGZyb20gR0VUX0NQQyBhbmQgaGFuZGxlCglwcmV2aW91cyBlcnJvcnMuICBBZGRlZCBjb2RlIHRvIGhhbmRsZSB0aGUgY3JlYXRpb24gb2Ygc3RhdGljCglmaWVsZHMgaW4gaW5uZXIgY2xhc3Nlcy4gSW5pdGlhbGl6ZWQgZmllbGRzIGluaXRpYWxpemF0aW9uCglzdGF0ZW1lbnRzIGtlcHQgaW4gYSBsaXN0IG9mIGxpc3RzLgoJKG1heWJlX2dlbmVyYXRlX2Zpbml0KTogSW5pdGlhbGl6ZWQgZmllbGRzIGluaXRpYWxpemF0aW9uCglzdGF0ZW1lbnRzIGtlcHQgaW4gYSBsaXN0IG9mIGxpc3RzLiBVc2UgR0VUX0NQQy4KCShtYXliZV9nZW5lcmF0ZV9jbGluaXQpOiBMaWtld2lzZS4KCShtZXRob2RfaGVhZGVyKTogVXNlIEdFVF9DUEMgYW5kIEdFVF9DUENfVU4uCgkocGFyc2VyX3F1YWxpZmllZF9jbGFzc25hbWUpOiBIYW5kbGUgaW5uZXIgY2xhc3Nlcy4KCShyZWdpc3Rlcl9pbmNvbXBsZXRlX3R5cGUpOiBTZXQgSkRFUF9FTkNMT1NJTkcgdXNpbmcgR0VUX0NQQy4KCShqYXZhX2ZpeF9jb25zdHJ1Y3RvcnMpOiBIaWRlIHBvaW50ZXIgdG8gZW5jbG9zaW5nIGNvbnRleHQKCWluc3RhbmNlIGluIGNvbnN0cnVjdG9yIGxpc3Qgd2hlbiBkZWFsaW5nIHdpdGggaW5uZXIgY2xhc3Nlcy4KCShqZGVwX3Jlc29sdmVfY2xhc3MpOiBDYWxsIHJlc29sdmVfY2xhc3Mgd2l0aCBleHRyYSBmaXJzdCBhcmd1bWVudAoJSkRFUF9FTkNMT1NJTkcuCgkocmVzb2x2ZV9jbGFzcyk6IEFkZCBlbmNsb3NpbmcgY29udGV4dCBhcyBhIGZpcnN0IGV4dHJhIGFyZ3VtZW50Cgl0byBkb19yZXNvbHZlX2NsYXNzLgoJKGRvX3Jlc29sdmVfY2xhc3MpOiBDYWxsIGZpbmRfYXNfaW5uZXJfY2xhc3MuIEhhbmRsZSBXRkxzCglwcm9wZXJseS4KCShyZXNvbHZlX25vX2xheW91dCk6IEV4dHJhIGFyZ3VtZW50IGFkZGVkIHRvIHJlc29sdmVfY2xhc3MKCWludm9jYXRpb24uCgkocmVzZXRfbWV0aG9kX25hbWUpOiBVc2UgREVDTF9DTElOSVRfUCwgREVDTF9GSU5JVF9QLgoJKGphdmFfZ2V0X3JlYWxfbWV0aG9kX25hbWUpOiBVc2UgR0VUX0NQQ19VTi4KCShjaGVja19hYnN0cmFjdF9tZXRob2RfZGVmaW5pdGlvbnMpOiBVc2UgREVDTF9DTElOSVRfUC4KCShqYXZhX2NoZWNrX2Fic3RyYWN0X21ldGhvZHMpOiBIYW5kbGUgc3RhdGljIG1ldGhvZCBkZWNsYXJlZCBpbgoJaW5uZXIgY2xhc3NlcyBieSBhbiBlcnJvci4KCShqYXZhX2NoZWNrX3JlZ3VsYXJfbWV0aG9kcyk6IFVzZSBERUNMX0NMSU5JVF9QLgoJKHNvdXJjZV9zdGFydF9qYXZhX21ldGhvZCk6IEFsc28gc2V0IERFQ0xfTUFYX0xPQ0FMUy4KCShjcmVhdGVfYXJ0aWZpY2lhbF9tZXRob2QpOiBDYWxsIGphdmFfcGFyc2VyX2NvbnRleHRfc2F2ZV9nbG9iYWwKCWFuZCBqYXZhX3BhcnNlcl9jb250ZXh0X3Jlc3RvcmVfZ2xvYmFsIGluc3RlYWQgb2Ygc2F2aW5nL3Jlc3RvcmluZwoJdGhlIGNvbnRleHQgYnkgaGFuZC4KCShleHBhbmRfc3RhcnRfamF2YV9tZXRob2QpOiBJbXByb3ZlZCB2ZXJib3NlIG1vZGUgbWVzc2FnZS4KCShqYXZhX2NvbXBsZXRlX2V4cGFuZF9tZXRob2RzKTogRml4ZWQgbGVhZGluZyBjb21tZW50LiBVc2UKCURFQ0xfQ0xJTklUX1AuCgkoZml4X2NvbnN0cnVjdG9ycyk6IEFkZGVkIGFzc2lnbm1lbnQgdG8gdGhpcyQ8bj4gaWYgbmVjZXNzYXJ5LgoJKGphdmFfZXhwYW5kX2NsYXNzZXMpOiBDYWxsIGphdmFfY29tcGxldGVfZXhwYW5kX2NsYXNzZXMgaW5zdGVhZAoJb2YgamF2YV9jb21wbGV0ZV9leHBhbmRfbWV0aG9kcy4KCShtYWtlX3F1YWxpZmllZF9wcmltYXJ5KTogU2ltcGxpZmllZC4KCShtZXJnZV9xdWFsaWZpZWRfbmFtZSk6IE9wdGltaXplZCBmb3IgbWlzc2luZyBsZWZ0IG9yIHJpZ2h0IHBhcnRzLgoJKHJlc29sdmVfZXhwcmVzc2lvbl9uYW1lKTogSGFuZGxlIGFjY2VzcyB0byBvdXRlciBjbGFzcyBmaWVsZHMgZnJvbQoJaW50ZXJjbGFzc2VzLgoJKHJlc29sdmVfcXVhbGlmaWVkX2V4cHJlc3Npb25fbmFtZSk6IE5ldyBtYWNybwoJUkVTVE9SRV9USElTX0FORF9DVVJSRU5UX0NMQVNTLCB1c2VkLiBIYW5kbGUgY3JlYXRpb24gb2YgaW5uZXIKCWNsYXNzZXMuIFJlcG9ydCBlcnJvciBvbiBub24gYXBwcm9wcmlhdGUgcXVhbGlmaWNhdGlvbiBvZgoJYG5ldycuIEhhbmRsZSBxdWFsaWZpZWQgYHRoaXMnLgoJKG5vdF9hY2Nlc3NpYmxlX3ApOiBBbGxvdyBhY2Nlc3MgdG8gb3V0ZXIgY2xhc3MgcHJpdmF0ZSBmaWVsZHMgZnJvbQoJaW5uZXIgY2xhc3Nlcy4KCShwYXRjaF9tZXRob2RfaW52b2NhdGlvbik6IEhhbmRsZSBtZXRob2QgaW52b2NhdGlvbnMgdGhyb3VnaAoJYWNjZXNzIG1ldGhvZHMgYW5kIGlubmVyIGNsYXNzIGNvbnN0cnVjdG9yIGludm9jYXRpb25zLgoJKGZpbmRfYXBwbGljYWJsZV9hY2Nlc3NpYmxlX21ldGhvZHNfbGlzdCk6IFNlYXJjaCBlbmNsb3NpbmcKCWNvbnRleHRzIG9mIGFuIGlubmVyIGNsYXNzLgoJKHNlYXJjaF9hcHBsaWNhYmxlX21ldGhvZHNfbGlzdCk6IEZpeGVkIHR5cG8uCgkoYXJndW1lbnRfdHlwZXNfY29udmVydGlibGUpOiBIYW5kbGUgaW5uZXIgY2xhc3MgY29uc3RydWN0b3JzJwoJaGlkZGVuIG91dGVyIGNvbnRleHQgcmVmZXJlbmNlIGFyZ3VtZW50LgoJKHF1YWxpZnlfYW1iaWd1b3VzX25hbWUpOiBIYW5kbGUgcXVhbGlmaWVkIGB0aGlzJy4KCShqYXZhX2NvbXBsZXRlX2xocyk6IEhhbmRsZSB1c2Ugb2YgZmllbGQgYWNjZXNzZWQgdGhyb3VnaAoJYXJ0aWZpY2lhbCBhY2Nlc3MgbWV0aG9kcyBpbiB2YXJpb3VzIGNhc2VzIG9mIGFzc2lnbm1lbnRzLiBIYW5kbGUKCUNMQVNTX0xJVEVSQUwgbm9kZS4KCShjaGVja19maW5hbF9hc3NpZ25tZW50KTogVXNlIERFQ0xfQ0xJTklUX1AuCgkodmFsaWRfcmVmX2Fzc2lnbmNvbnZfY2FzdF9wKTogSGFuZGxlIHRoZSBkZXN0aW5hdGlvbiBiZWluZyBhbgoJZW5jbG9zaW5nIGNvbnRleHQgb2YgdGhlIHNvdXJjZS4KCShwYXRjaF91bmFyeW9wKTogSGFuZGxlIHVzZSBvZiBmaWVsZCBhY2Nlc3NlZCB0aHJvdWdoIGFydGlmaWNpYWwKCWFjY2VzcyBtZXRob2RzLgoJKHBhdGNoX3JldHVybik6IFVzZSBERUNMX0NMSU5JVF9QLgoJKHBhdGNoX3Rocm93X3N0YXRlbWVudCk6IFVzZSBERUNMX0NMSU5JVF9QLgoJKGNoZWNrX3Rocm93bl9leGNlcHRpb25zKTogVXNlIERFQ0xfRklOSVRfUCBhbmQgREVDTF9JTklUX1AuCgkqIHZlcmlmeS5jICh2ZXJpZnlfanZtX2luc3RydWN0aW9ucyk6IFVzZSBJRF9DTElOSVRfUCBhbmQKCUlEX0lOSVRfUC4KCjIwMDAtMDEtMTYgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBjeWdudXMuY29tPgoKCSogcGFyc2UueSAoYnVpbGRfc3RyaW5nX2NvbmNhdGVuYXRpb24pOiBPbmx5IHVzZQoJU3RyaW5nQnVmZmVyKFN0cmluZykgc2hvcnRjdXQgaWYgU3RyaW5nIGFyZyBpcyBjb25zdGFudC4KCldlZCBKYW4gMTIgMjA6MjA6MTEgMjAwMCAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBqY2Ytd3JpdGUuYyAoZ2VuZXJhdGVfYnl0ZWNvZGVfaW5zbnMpOiBiaW5vcDogQ2hhbmdlIHRoZSB0eXBlIG9mCgl0aGUgc2hpZnQgdmFsdWUgdG8gaW50LiBGaXhlZCB0eXBvIGluIGNvbW1lbnQuCgoyMDAwLTAxLTExICBNdW1pdCBLaGFuICA8a2hhbkB4cmF5bGl0aC53aXNjLmVkdT4KCgkqIGpjZi1wYXRoLmM6IERlbGV0ZSBQQVRIX1NFUEFSQVRPUiBhbmQgRElSX1NFUEFSQVRPUiBtYWNyb3MuCgkqIGpjZi13cml0ZS5jOiBMaWtld2lzZS4KCSogcGFyc2UueTogTGlrZXdpc2UuCgkqIHBhcnNlLmM6IFJlZ2VuZXJhdGUuCgoyMDAwLTAxLTA5ICBBbnRob255IEdyZWVuICA8Z3JlZW5AY3lnbnVzLmNvbT4KCgkqIGpjZi13cml0ZS5jIChnZW5lcmF0ZV9ieXRlY29kZV9pbnNucyk6IEVtaXQgaW52b2tlaW50ZXJmYWNlCglieXRlY29kZXMgaW4gdGhlIGNvcnJlY3Qgb3JkZXIuCgoyMDAwLTAxLTA5ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBNYWtlZmlsZS5pbiAoamNmLWR1bXAsIGdjamgpOiBNb3ZlIC4uL2Vycm9ycy5vIGJlZm9yZSAkKExJQlMpLgoKVGh1IEphbiAgNiAxNjozMToyOCAyMDAwICBBbnRob255IEdyZWVuICA8Z3JlZW5AY3lnbnVzLmNvbT4KCgkqIGV4cHIuYyAoamF2YV9sYW5nX2V4cGFuZF9leHByKTogU3dpdGNoIHRvIHBlcm1hbmVudCBvYnN0YWNrCgliZWZvcmUgYnVpbGRpbmcgY29uc3RhbnQgYXJyYXkgZGVjbC4KClRodSBKYW4gIDYgMDA6NTQ6MTAgMjAwMCAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBqY2Ytd3JpdGUuYyAoZ2VuZXJhdGVfYnl0ZWNvZGVfY29uZGl0aW9uYWwpOiBGaXhlZCBpbmRlbnRhdGlvbiBpbgoJbWV0aG9kIGludm9jYXRpb24gYW5kIHR5cG8gaW4gY29uZGl0aW9uYWwgZXhwcmVzc2lvbi4KCShnZW5lcmF0ZV9ieXRlY29kZV9pbnNucyk6IENPTkRfRVhQUiBjYW4gYmUgcGFydCBvZiBhIGJpbm9wLiBJc3N1ZQoJdGhlIGFwcHJvcHJpYXRlIE5PVEVfUE9QLgoJKiBwYXJzZS55IChwYXRjaF9iaW5vcCk6IFNoaWZ0IHZhbHVlIG1hc2sgdG8gZmVhdHVyZSB0aGUgcmlnaHQKCXR5cGUuCgoxOTk5LTEyLTMwICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBjbGFzcy5jIChhc3N1bWVfY29tcGlsZWQsIGFzc3VtZV9jb21waWxlZF9ub2RlKTogQWRkIHN0YXRpYwoJcHJvdG90eXBlLgoJKGFkZF9hc3N1bWVfY29tcGlsZWQpOiBVc2UgeG1hbGxvYy94c3RyZHVwLCBub3QgbWFsbG9jL3N0cmR1cC4KCgkqIGpjZi1kdW1wLmMgKEFSUkFZX05FV19OVU0pOiBDYXN0IGxvbmcgdG8gaW50IGluIHN3aXRjaC4KCgkqIGp2Z2VubWFpbi5jICh1c2FnZSk6IEFkZCBzdGF0aWMgcHJvdG90eXBlIHdpdGggQVRUUklCVVRFX05PUkVUVVJOLgoKCSogcGFyc2UuaCAoT0JTT0xFVEVfTU9ESUZJRVJfV0FSTklORyk6IFJlbmFtZSBwYXJhbWV0ZXIgYG1vZGlmaWVyJwoJdG8gYF9fbW9kaWZpZXInIHRvIGF2b2lkIHN0cmluZ2lmeWluZyBpdC4KCgkqIHBhcnNlLnkgKHZlcmlmeV9jb25zdHJ1Y3Rvcl9jaXJjdWxhcml0eSk6IERvbid0IGNhbGwgYSB2YXJpYWRpYwoJZnVuY3Rpb24gd2l0aCBhIG5vbi1saXRlcmFsIGZvcm1hdCBzdHJpbmcuCgkoamF2YV9jaGVja19hYnN0cmFjdF9tZXRob2RzKTogTW92ZSB1bnJlYWNoYWJsZSBjb2RlIGluc2lkZQoJYGNvbnRpbnVlJyBzdGF0ZW1lbnQuCgkobG9va3VwX21ldGhvZF9pbnZva2UpOiBDYWxsIHhzdHJkdXAsIG5vdCBzdHJkdXAuCgoJKiBleHByLmMgKGV4cGFuZF9qYXZhX2ZpZWxkX29wKTogQXZvaWQgdGhlIHVzZSBvZiBBTlNJIHN0cmluZwoJY29uY2F0ZW5hdGlvbi4KCgkqIGpjZi1wYXJzZS5jICh5eXBhcnNlKTogTGlrZXdpc2UuCgoJKiBqdi1zY2FuLmMgKG1haW4pOiBMaWtld2lzZS4KCjE5OTktMTItMzAgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIHBhcnNlLmggKEFCU1RSQUNUX0NIRUNLLCBKQ09OU1RSVUNUT1JfQ0hFQ0ssCglFUlJPUl9DQU5UX0NPTlZFUlRfVE9fQk9PTEVBTiwgRVJST1JfQ0FOVF9DT05WRVJUX1RPX05VTUVSSUMsCglFUlJPUl9DQVNUX05FRURFRF9UT19JTlRFR1JBTCk6IEF2b2lkIHRoZSB1c2Ugb2YgQU5TSSBzdHJpbmcKCWNvbmNhdGVuYXRpb24uCgoJKiBwYXJzZS55IChzeW5jaHJvbml6ZWQsIHZhcmlhYmxlX3JlZGVmaW5pdGlvbl9lcnJvciwKCWNoZWNrX2NsYXNzX2ludGVyZmFjZV9jcmVhdGlvbiwgY3JlYXRlX2ludGVyZmFjZSwgY3JlYXRlX2NsYXNzLAoJbWV0aG9kX2hlYWRlciwgZmluaXNoX21ldGhvZF9kZWNsYXJhdGlvbiwKCWNoZWNrX21vZGlmaWVyc19jb25zaXN0ZW5jeSwgbWV0aG9kX2RlY2xhcmF0b3IsCgljb21wbGV0ZV9jbGFzc19yZXBvcnRfZXJyb3JzLCBjaGVja19hYnN0cmFjdF9tZXRob2RfZGVmaW5pdGlvbnMsCglqYXZhX2NoZWNrX3JlZ3VsYXJfbWV0aG9kcywgY2hlY2tfdGhyb3dzX2NsYXVzZXMsCglqYXZhX2NoZWNrX2Fic3RyYWN0X21ldGhvZHMsIHJlYWRfaW1wb3J0X2RpciwKCWNoZWNrX3BrZ19jbGFzc19hY2Nlc3MsIGRlY2xhcmVfbG9jYWxfdmFyaWFibGVzLCBmaXhfY29uc3RydWN0b3JzLAoJY3V0X2lkZW50aWZpZXJfaW5fcXVhbGlmaWVkLCByZXNvbHZlX2V4cHJlc3Npb25fbmFtZSwKCXJlc29sdmVfcXVhbGlmaWVkX2V4cHJlc3Npb25fbmFtZSwgcGF0Y2hfbWV0aG9kX2ludm9jYXRpb24sCglqYXZhX2NvbXBsZXRlX2xocywgcGF0Y2hfYXNzaWdubWVudCwgdHJ5X2J1aWx0aW5fYXNzaWduY29udiwKCXBhdGNoX2Jpbm9wLCBwYXRjaF9hcnJheV9yZWYsIHBhdGNoX25ld2FycmF5LCBidWlsZF9sYWJlbGVkX2Jsb2NrLAoJcGF0Y2hfZXhpdF9leHByLCBwYXRjaF9leGl0X2V4cHIsIHBhdGNoX3N3aXRjaF9zdGF0ZW1lbnQsCglwYXRjaF90cnlfc3RhdGVtZW50LCBwYXRjaF9zeW5jaHJvbml6ZWRfc3RhdGVtZW50LAoJcGF0Y2hfdGhyb3dfc3RhdGVtZW50LCBjaGVja190aHJvd25fZXhjZXB0aW9ucywKCXBhdGNoX2NvbmRpdGlvbmFsX2V4cHIpOiBMaWtld2lzZS4KCkZyaSBEZWMgMjQgMDA6MjU6MjkgMTk5OSAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBNYWtlZmlsZS5pbiAoTElCREVQUyk6IEFkZGVkIGdjYydzIGVycm9ycy5vCgkoLi4vamNmLWR1bXAkKGV4ZWV4dCk6KTogTGluayB3aXRoIGdjYydzIGVycm9ycy5vCgkoLi4vZ2NqaCQoZXhlZXh0KTopOiBMaWtld2lzZS4KCSogZXhwci5jIChleHBhbmRfamF2YV9ORVcpOiBMYXlvdXQgdGhlIGVudGlyZSB0YXJnZXQgdHlwZSBpbnN0ZWFkIG9mCglsYXlpbmcgb3V0IGl0cyBtZXRob2RzIG9ubHkuCgkobG9va3VwX2ZpZWxkKTogTGF5b3V0IHRoZSBjbGFzcyBhZnRlciBoYXZpbmcgbG9hZGVkIGl0LgoJKiBqYXZhLXRyZWUuaCAoamF2YV9kZWJ1Z19jb250ZXh0KTogRGVjbGFyZWQuCgkqIGpjZi1pby5jICh0b3BsZXYuaCk6IEluY2x1ZGVkLgoJKGZpbmRfY2xhc3MpOiBSZW1vdmVkIGFzc2lnbm1lbnQgdG8gamNmJ3Mgb3V0b2ZzeW5jaAoJZmllbGQuIEZvcmNlIHNvdXJjZSBmaWxlIHRvIGJlIHJlYWQgaWYgbmV3ZXIgdGhhbiBpdHMgbWF0Y2hpbmcKCWNsYXNzIGZpbGUuIFR3ZWFrZWQgZGVidWcgbWVzc2FnZXMuCgkqIGpjZi1wYXJzZS5jIChqY2Zfb3V0X29mX3N5bmNoKTogRGVsZXRlZC4KCShyZWFkX2NsYXNzKTogQ2FsbCB0byBqY2Zfb3V0X29mX3N5bmNoIHJlbW92ZWQuCgkqIGpjZi5oICh0eXBlZGVmIHN0cnVjdCBKQ0YpOiBGaWVsZCBgb3V0b2ZzeW5jaCcgZGVsZXRlZC4KCShqY2Zfb3V0X29mX3N5bmNoKTogUHJvdG90eXBlIGRlbGV0ZWQuCgkqIHBhcnNlLmggKHN0cnVjdCBwYXJzZXJfY3R4dCk6IGBtaW51c19zZWVuJywgYGphdmFfZXJyb3JfZmxhZycsCglgZGVwcmVjYXRlZCcgYW5kIGBjbGFzc19lcnInOiBpbnRlZ2VyIHR1cm5lZCBpbnRvIGJpdCBmaWVsZHMuCglOZXcgYml0IGZpZWxkcyBgc2F2ZWRfZGF0YV9jdHgnIGFuZCBgc2F2ZWRfZGF0YScuIEZpeGVkIGNvbW1lbnRzLgoJKiBwYXJzZS55IChwYWNrYWdlX2xpc3QpOiBOZXcgZ2xvYmFsLgoJKHBhY2thZ2VfZGVjbGFyYXRpb246KTogUmVjb3JkIG5ld2x5IHBhcnNlZCBwYWNrYWdlIG5hbWUuCgkoZXh0cmFfY3R4cF9wdXNoZWRfcCk6IFN0YXRpYyBnbG9iYWwgZGVsZXRlZC4KCShqYXZhX3BhcnNlcl9jb250ZXh0X3NhdmVfZ2xvYmFsKTogQ3JlYXRlIGJ1ZmZlciBjb250ZXh0IGZvciB0aGUKCXB1cnBvc2Ugb2Ygc2F2aW5nIGdsb2JhbHMsIGlmIG5lY2Vzc2FyeS4KCShqYXZhX3BhcnNlcl9jb250ZXh0X3Jlc3RvcmVfZ2xvYmFsKTogUG9wIGNvbnRleHQgcHVzaGVkIGZvciB0aGUKCXB1cnBvc2Ugb2Ygc2F2aW5nIGdsb2JhbHMsIGlmIG5lY2Vzc2FyeS4KCShqYXZhX2RlYnVnX2NvbnRleHRfZG8pOiBOZXcgcHJvdG90eXBlIGFuZCBmdW5jdGlvbi4KCShqYXZhX2RlYnVnX2NvbnRleHQpOiBMaWtld2lzZS4KCShkb19yZXNvbHZlX2NsYXNzKTogVXNlIGFscmVhZHkgcGFyc2VkIHBhY2thZ2UgbmFtZXMgdG8gcXVhbGlmeQoJYW5kIGxvb2t1cCBjbGFzcyBjYW5kaWRhdGUuCgkoamF2YV9wcmVfZXhwYW5kX2NsaW5pdCk6IFJlbW92ZWQgdW5uZWNlc3NhcnkgbG9jYWwgdmFyaWFibGUuCgoxOTk5LTEyLTE3ICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CgoJKiBnamF2YWguYyAoZGVjb2RlX3NpZ25hdHVyZV9waWVjZSk6IFByaW50ICI6OiIgaW4gSkFycmF5PD4uICBUaGlzCglmaXhlcyBQUiBnY2ovMTE5LgoJKHByb2Nlc3NfZmlsZSk6IFVzZSBgXG5cJyBhdCBlbmQgb2YgZWFjaCBsaW5lIGluIHN0cmluZy4KClRodSBEZWMgMTYgMDA6MDk6NDUgMTk5OSAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBleHByLmMgKGV4cGFuZF9pbnZva2UpOiBMYXlvdXQgdGhlIGxvYWRlZCBjbGFzcyBiZWZvcmUKCWF0dGVtcHRpbmcgdG8gdXNlIGl0LgoJKGV4cGFuZF9qYXZhX2ZpZWxkX29wKTogQWxsb3cgZmluYWwgZmllbGQgYXNzaWdubWVudHMgdG8gdGFrZQoJcGxhY2UgaW4gJGZpbml0JC4KCSogdHlwZWNrLmMgKGNvbnZlcnQpOiBSZXR1cm4gZXJyb3JfbWFya19ub2RlIGlmIGV4cHIgaXMgbnVsbC4KCjE5OTktMTItMTQgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogY2xhc3MuYyAoY2xhc3NfZGVwdGgpOiBSZXR1cm4gLTEgaWYgdGhlIGNsYXNzIGRvZXNuJ3QgbG9hZAoJcHJvcGVybHkuCgkqIGV4cHIuYyAoY2FuX3dpZGVuX3JlZmVyZW5jZV90byk6IENoZWNrIGZvciBlcnJvcnMgZHVyaW5nIGRlcHRoCgljb21wdXRhdGlvbiBhbmQgcmV0dXJuIDAgYWNjb3JkaW5nbHkuCgkqIGpjZi1wYXJzZS5jIChwYXJzZV9zb3VyY2VfZmlsZSk6IENhbGwgamF2YV9maXhfY29uc3RydWN0b3JzIHRvCgljcmVhdGUgZGVmYXVsdCBjb25zdHJ1Y3RvcnMgYW5kIGFkZCBhbiBvdGhlciBlcnJvciBjaGVjay4KCSogcGFyc2UuaCAoamF2YV9maXhfY29uc3RydWN0b3JzKTogUHJvdG90eXBlZC4KCSogcGFyc2UueSAoamF2YV9wcmVfZXhwYW5kX2NsaW5pdCk6IExpa2V3aXNlLgoJKGJ1aWxkX3N1cGVyX2ludm9jYXRpb24pOiBSZS1wcm90b3R5cGVkIHRvIGZlYXR1cmUgb25lIGFyZ3VtZW50LgoJKGphdmFfY2hlY2tfY2lyY3VsYXJfcmVmZXJlbmNlKTogRGlyZWN0bHkgdXNlIGBjdXJyZW50Jy4KCShqYXZhX2ZpeF9jb25zdHJ1Y3RvcnMpOiBOZXcgZnVuY3Rpb24uCgkoamF2YV9jaGVja19yZWd1bGFyX21ldGhvZHMpOiBEb24ndCBjcmVhdGUgZGVmYXVsdCBjb25zdHJ1Y3RvcnMKCWhlcmUsIGJ1dCBhYm9ydCBpZiBub25lIHdlcmUgZm91bmQuCgkoamF2YV9jb21wbGV0ZV9leHBhbmRfbWV0aG9kcyk6IFByZS1wcm9jZXNzIDxjbGluaXQ+IGNhbGxpbmcKCWphdmFfcHJlX2V4cGFuZF9jbGluaXQuCgkoamF2YV9wcmVfZXhwYW5kX2NsaW5pdCk6IE5ldyBmdW5jdGlvbi4KCShmaXhfY29uc3RydWN0b3JzKTogYnVpbGRfc3VwZXJfaW52b2NhdGlvbiBpbnZva2VkIHdpdGggdGhlCgljdXJyZW50IG1ldGhvZCBkZWNsYXJhdGlvbiBhcyBhbiBhcmd1bWVudC4KCShidWlsZF9zdXBlcl9pbnZvY2F0aW9uKTogVXNlIHRoZSBjb250ZXh0IG9mIHRoZSBwcm9jZXNzZWQgbWV0aG9kCglkZWNsIGFyZ3VtZW50IGluc3RlYWQgb2YgY3VycmVudF9jbGFzcy4KCSogdHlwZWNrLmMgKGxvb2t1cF9qYXZhX21ldGhvZCk6IFRha2UgV0ZMcyBpbiBtZXRob2QgbmFtZXMgaW50bwoJYWNjb3VudC4KClR1ZSBEZWMgMTQgMTQ6MjA6MTYgMTk5OSAgUGVyIEJvdGhuZXIgIDxwZXJAYm90aG5lci5jb20+CgoJKiBjbGFzcy5jIChtYWtlX2NsYXNzX2RhdGEpOiBmbGFnX2tlZXBfaW5saW5lX2Z1bmN0aW9ucyB0byBrZWVwCglwcml2YXRlIG1ldGhvZHMgaW4gdGhlIG1ldGhvZCBhcnJheS4KCjE5OTktMTItMTUgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBjeWdudXMuY29tPgoKCSogY2hlY2staW5pdC5jIChjaGVja19pbml0KTogVGFrZSBpbnRvIGFjY291bnQgYm90aCB0eXBlcyBvZgoJYHRocm93J3Mgd2hlbiBjaGVja2luZyBmb3IgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuCgpGcmkgRGVjIDEwIDIxOjUzOjQ1IDE5OTkgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogcGFyc2UueSAoamF2YV9jb21wbGV0ZV9saHMpOiBGb3JjZSBjb252ZXJ0aW9uIG9mIGFycmF5CglkaW1lbnNpb25zIHRvIGludF90eXBlX25vZGUsIHRoYXQncyB3aGF0IHJ1bnRpbWUncyBBQkkgZXhwZWN0cy4KCkZyaSBEZWMgMTAgMTY6MTM6NDggMTk5OSAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBwYXJzZS5oIChFWFBSX1dGTF9RVUFMSUZJQ0FUSU9OKTogVGVtcG9yYXJ5IHVzZXMgdGhlIHRoaXJkCglvcGVyYW5kIG9mIGEgV0ZMLCB1bnRpbCB0aGUgSmF2YSBmcm9udC1lbmQgZ2V0cyBmaXhlZCB3aXRoIHJlZ2FyZAoJdG8gTWFyayBNaXRjaGVsbCdzIGdjYy90cmVlLmggcGF0Y2ggKDE5OTktMTItMDQuKQoKMTk5OS0xMi0xMCAgQW5kcmV3IEhhbGV5ICA8YXBoQGN5Z251cy5jb20+CgoJKiBwYXJzZS5oIChCVUlMRF9USFJPVyk6IEFkZCBzdXBwb3J0IGZvciBzamxqLWV4Y2VwdGlvbnMuCglkZWNsLmMgKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogQWRkIF9Kdl9TamxqX1Rocm93LgoJZXhwci5jIChidWlsZF9qYXZhX2F0aHJvdyk6IEFkZCBzdXBwb3J0IGZvciBzamxqLWV4Y2VwdGlvbnMuCglqYXZhLXRyZWUuaDogRGl0dG8uCglqY2Ytd3JpdGUuYzogRGl0dG8uCgpXZWQgRGVjICA4IDE1OjMzOjI2IDE5OTkgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogZXhwci5jIChqYXZhX2xhbmdfZXhwYW5kX2V4cHIpOiBTd2l0Y2ggdG8gcGVybWFuZW50IG9ic3RhY2sKCWJlZm9yZSBjYWxsaW5nIGV4cGFuZF9laF9yZWdpb25fc3RhcnQgYW5kIGV4cGFuZF9zdGFydF9hbGxfY2F0Y2guCgkqIGV4Y2VwdC5jIChleHBhbmRfc3RhcnRfamF2YV9oYW5kbGVyKTogU3dpdGNoIHRvIHBlcm1hbmVudAoJb2JzdGFjayBiZWZvcmUgY2FsbGluZyBleHBhbmRfZWhfcmVnaW9uX3N0YXJ0LgoJKGV4cGFuZF9lbmRfamF2YV9oYW5kbGVyKTogU3dpdGNoIHRvIHBlcm1hbmVudCBvYnN0YWNrIGJlZm9yZQoJY2FsbGluZyBleHBhbmRfc3RhcnRfYWxsX2NhdGNoLgoKMTk5OS0xMi01ICBBbnRob255IEdyZWVuICA8Z3JlZW5AY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBNYXJrIHRocm93X25vZGUgYXMgYSBub3JldHVybgoJZnVuY3Rpb24gd2l0aCBzaWRlIGVmZmVjdHMuCgkoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBNYXJrIGFsbCBtZW1vcnkgYWxsb2NhdGluZyBERUNMcyB3aXRoCglERUNMX0lTX01BTExPQy4KCldlZCBEZWMgIDEgMDQ6MjU6MDYgMTk5OSAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBleGNlcHQuYyAoZXhwYW5kX2VuZF9qYXZhX2hhbmRsZXIpOiBDYWxsCglleHBhbmRfcmVzdW1lX2FmdGVyX2NhdGNoIGFuZCBlbmRfY2F0Y2hfaGFuZGxlci4KClR1ZSBOb3YgMzAgMTI6MzY6MTUgMTk5OSAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQGN5Z251cy5jb20+CgoJKiB2ZXJpZnkuYyAodmVyaWZ5X2p2bV9pbnN0cnVjdGlvbnMpOiBDcmVhdGUgbmV3IHJldHVybiBsYWJlbAoJY2hhaW4gaWYgbm9uIGV4aXN0ZW50IChkb24ndCByZWx5IG9uIHRoZSB2ZXJpZmllZCBzdGF0ZSBvZiB0aGUganNyCgl0YXJnZXQuKQoKVHVlIE5vdiAzMCAxMjoyODozNCAxOTk5ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIGpjZi13cml0ZS5jIChnZW5lcmF0ZV9ieXRlY29kZV9pbnNucyk6IEZpeGVkIGluZGVudGF0aW9uIGZvcgoJQ09NUE9VTkRfRVhQUiBhbmQgRklYX1RSVU5DX0VYUFIgY2FzZXMuCgoJKiBwYXJzZS55IChwYXRjaF9hc3NpZ25tZW50KTogUmVtb3ZlZCBib2d1cyBmaW5hbCBjbGFzcyB0ZXN0IG9uCglsaHMgd2hlbiBjaGVja2luZyBvbiB3aGV0aGVyIHRvIGVtaXQgYW4gQXJyYXlTdG9yZUV4Y2VwdGlvbiBydW50aW1lCgljaGVjay4KCSogZXhwci5jIChleHBhbmRfamF2YV9hcnJheXN0b3JlKTogTGlrZXdpc2UuCgoxOTk5LTExLTI4IEFudGhvbnkgR3JlZW4gPGdyZWVuQGN5Z251cy5jb20+CgoJKiBkZWNsLmMgKGZpbmRfbG9jYWxfdmFyaWFibGUpOiBSZXVzZSBzaW5nbGUgc2xvdCBkZWNscyB3aGVuCgkgIGFwcHJvcHJpYXRlLgoKV2VkIE5vdiAyNCAxNzozMzoyNiAxOTk5ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIGpjZi1wYXJzZS5jIChzYXdfamF2YV9zb3VyY2UpOiBHbG9iYWwgdmFyaWFibGUgcmVtb3ZlZC4KCShyZWFkX2NsYXNzKTogRG9uJ3QgdXNlIGBzYXdfamF2YV9zb3VyY2UnLiBBZGRlZCBleHRyYSBicmFjZXMuCgkoeXlwYXJzZSk6IENvZGUgc2V0dGluZyBgc2F3X2phdmFfc291cmNlJyByZW1vdmVkLgoKMTk5OS0xMS0yNCAgTWFyayBNaXRjaGVsbCAgPG1hcmtAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIGV4Y2VwdC5jIChlbWl0X2hhbmRsZXJzKTogWmVybyBjYXRjaF9jbGF1c2VzIGFmdGVyIGVtaXR0aW5nIHRoZW0uCgpUdWUgTm92IDIzIDE3OjI5OjQwIDE5OTkgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogdmVyaWZ5LmMgKG1lcmdlX3R5cGVfc3RhdGUpOiBOb24gdmVyaWZpZWQgc3Vicm91dGluZXMgYmVpbmcKCWNvbnNpZGVyZWQgbW9yZSB0aGFuIG9uY2UgdG8gdHJpZ2dlciBwYXNzaXZlIHR5cGUgbWVyZ2UuCgpUdWUgTm92IDIzIDEwOjU1OjE4IDE5OTkgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogcGFyc2UueSAoY2F0Y2hfY2xhdXNlX3BhcmFtZXRlcjopOiBTdGlsbCBzZXQgYCQkJyB0byBOVUxMX1RSRUUKCWluIGNhc2Ugb2YgZXJyb3IuIEVycm9yIG1lc3NhZ2UgdHVuZWQuCgoxOTk5LTExLTIxICBBbnRob255IEdyZWVuICA8Z3JlZW5AY3lnbnVzLmNvbT4KCgkqIGNvbnN0YW50cy5jIChmaW5kX21ldGhvZHJlZl9pbmRleCk6IFVud3JhcCBtZXRob2QgbmFtZXMgYmVmb3JlCglpbnNlcnRpbmcgdGhlbSBpbiB0aGUgY29uc3RhbnQgcG9vbC4KCgkqIGpjZi1wYXJzZS5jIChqY2ZfcGFyc2UpOiBEaXNwbGF5IGBpbnRlcmZhY2UnIHdoZW4gYXBwcm9wcmlhdGUuCgoJKiBjbGFzcy5jIChhc3N1bWVfY29tcGlsZWRfbm9kZSk6IE5ldyB0eXBlZGVmLgoJKGFzc3VtZV9jb21waWxlZF90cmVlKTogTmV3IHN0YXRpYyBkYXRhLgoJKGZpbmRfYXNzdW1lX2NvbXBpbGVkX25vZGUpOiBOZXcgZnVuY3Rpb24uCgkoYWRkX2Fzc3VtZV9jb21waWxlZCk6IE5ldyBmdW5jdGlvbi4KCShhc3N1bWVfY29tcGlsZWQpOiBOZXcgZnVuY3Rpb24uCgkqIGNsYXNzLmMgKG1ha2VfY2xhc3NfZGF0YSk6IFVzZSBhc3N1bWVfY29tcGlsZWQuCgkoaXNfY29tcGlsZWRfY2xhc3MpOiBVc2UgYXNzdW1lX2NvbXBpbGVkLgoKCSogamF2YS10cmVlLmggKGFkZF9hc3N1bWVfY29tcGlsZWQpOiBEZWNsYXJlLgoKCSogbGFuZy5jIChsYW5nX2RlY29kZV9vcHRpb24pOiBQYXJzZSBuZXcgb3B0aW9ucy4KCldlZCBOb3YgMTcgMjE6MDk6MjggMTk5OSAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBjbGFzcy5jIChsYXlvdXRfY2xhc3MpOiBBbHdheXMgY29udmVydCBUWVBFX1NJWkVfVU5JVCB0bwoJaW50X3R5cGVfbm9kZTogdGhhdCdzIHdoYXQgYF9Kdl9BbGxvY09iamVjdCcgZXhwZWN0cy4KClRodSBOb3YgMTEgMDE6NTc6MTQgMTk5OSAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBwYXJzZS55IChsb29rdXBfbWV0aG9kX2ludm9rZSk6IFVzZSBsYW5nX3ByaW50YWJsZV9uYW1lIHRvCglyZWxpYWJseSBidWlsZCB0aGUgdHlwZSBuYW1lIGR1cmluZyBlcnJvciByZXBvcnQuIEZpeGVzIFBSIGdjai85Ny4KCjE5OTktMTEtMDkgIFRvbSBUcm9tZXkgIDx0cm9tZXlAY3lnbnVzLmNvbT4KCgkqIGpjZi1wYXRoLmM6IEluY2x1ZGUgPHN5cy9zdGF0Lmg+LgoJKGpjZl9wYXRoX2luaXQpOiBTZWFyY2ggZm9yIGxpYmphdmEuemlwLiAgRml4ZXMgUFIgZ2NqLzg0LgoJKERJUl9VUCk6IE5ldyBtYWNyby4KClR1ZSBOb3YgIDkgMTI6MTI6MzggMTk5OSAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBwYXJzZS55IChzb3VyY2VfZW5kX2phdmFfbWV0aG9kKTogUmVzdW1lIHBlcm1hbmVudCBhbGxvY2F0aW9uLAoJcmV2ZXJzaW5nIEFwciAyNyAxOTk4IHBhdGNoLgoJKHBhdGNoX3N0cmluZ19jc3QpOiBQb3Agb2JzdGFja3MgYWZ0ZXIgaGF2aW5nIHB1c2hlZCB0aGUgcGVybWFuZW50CglvbmVzLgoKMTk5OS0xMS0wNSAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgoKCSogY2xhc3MuYyAoZmluaXNoX2NsYXNzKTogRW1pdCBpbmxpbmVkIG1ldGhvZHMgaWYgYW55IG5hdGl2ZQoJbWV0aG9kcyBleGlzdCBpbiB0aGUgY2xhc3MuICBGaXhlcyBQUiBnY2ovODUuCgpUaHUgTm92ICA0IDE2OjI3OjAxIDE5OTkgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogcGFyc2UueSAocmVzb2x2ZV9xdWFsaWZpZWRfZXhwcmVzc2lvbl9uYW1lKTogSGFuZGxlIFBMVVNfRVhQUi4KCShxdWFsaWZ5X2FtYmlndW91c19uYW1lKTogTGlrZXdpc2UuCgpXZWQgTm92ICAzIDE1OjIwOjAyIE1TVCAxOTk5ICBHb2RtYXIgQmFjayA8Z2JhY2tAY3MudXRhaC5lZHU+CgoJKiB0eXBlY2suYzogKGxvb2t1cF9qYXZhX21ldGhvZCk6ICBzZWFyY2ggYWxsIGluaGVyaXRlZAoJaW50ZXJmYWNlcyB3aGVuIGxvb2tpbmcgdXAgaW50ZXJmYWNlIG1ldGhvZC4KCk1vbiBOb3YgIDEgMjM6NDI6MDAgMTk5OSAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBwYXJzZS55IChtZXRob2RfaGVhZGVyOik6IElzc3VlIGVycm9yIG1lc3NhZ2UgZm9yIHJ1bGUgYHR5cGUKCWVycm9yJy4KCShzeW5jaHJvbml6ZWQ6KTogRXJyb3IgcmVwb3J0IHdoZW4gbm90IHVzaW5nIHN5bmNocm9uaXplZC4KCk1vbiBOb3YgIDEgMDE6MzI6NDggMTk5OSAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBwYXJzZS55IChyZXNvbHZlX3F1YWxpZmllZF9leHByZXNzaW9uX25hbWUpOiBQcmV2ZW50IGB0aGlzJyBmcm9tCgliZWluZyB1c2VkIGJlZm9yZSB0aGUgc3VwZXJjbGFzcyBjb25zdHJ1Y3RvciBoYXMgYmVlbiBjYWxsZWQuCgkoY29tcGxldGVfZnVuY3Rpb25fYXJndW1lbnRzKTogVXNlIENBTExfRVhQTElDSVRfQ09OU1RSVUNUT1JfUAoJaW5zdGVhZCBvZiBgQ0FMTF9USElTX0NPTlNUUlVDVE9SX1AnLgoKU2F0IE9jdCAzMCAyMTozNToxMyAxOTk5ICBUb2RkIFQuIEZyaWVzIDx0b2RkQGxpZ2h0aG91c2UuZnJpZXMubmV0PgoKCSogY2hlY2staW5pdC5jOiBGaXggdHlwbyBpbiBjb21tZW50LgoKRnJpIE9jdCAyOSAxNDozNToxOCAxOTk5ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIGNsYXNzLmMgKGFkZF9tZXRob2RfMSk6IFNldCBERUNMX0lOTElORSB0byAxIGZvciBwcml2YXRlLCBzdGF0aWMKCWFuZCBmaW5hbCBtZXRob2QuCgpGcmkgT2N0IDI5IDE0OjIzOjMyIDE5OTkgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogcGFyc2UueSAoZXhwcmVzc2lvbl9zdGF0ZW1lbnQ6KTogQ2FsbCBmdW5jdGlvbiB0byByZXBvcnQKCWltcHJvcGVyIGludm9jYXRpb24gb2YgYSBjb25zdHJ1Y3Rvci4KCShwYXJzZV9jdG9yX2ludm9jYXRpb25fZXJyb3IpOiBOZXcgZnVuY3Rpb24uCgoxOTk5LTEwLTI2ICBNYXJrIE1pdGNoZWxsICA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCSogZGVjbC5jIChwb3BsZXZlbCk6IERvbid0IHNldCBCTE9DS19UWVBFX1RBR1Mgb3IgY2FsbAoJcmVtZW1iZXJfZW5kX25vdGUuCgoxOTk5LTEwLTIxICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CgoJKiBqdmdlbm1haW4uYyAobWFpbik6IF9Kdl9Db21waWxlcl9Qcm9wZXJ0aWVzIG5vdyBhbiBleHRlcm47IHNldAoJaW4gZ2VuZXJhdGVkIGBtYWluJy4KClRodSBPY3QgMjEgMDE6Mjc6MzEgMTk5OSAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBwYXJzZS55IChyZXNvbHZlX3F1YWxpZmllZF9leHByZXNzaW9uX25hbWUpOiBIYW5kbGUgTU9ESUZZX0VYUFIuCgkocXVhbGlmeV9hbWJpZ3VvdXNfbmFtZSk6IExpa2V3aXNlLgoKV2VkIE9jdCAyMCAwMTo0MTo0NyAxOTk5ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnkgKGphdmFfY29tcGxldGVfdHJlZSk6IGZvbGRfY29uc3RhbnRfZm9yX2luaXQgdG8gd29yayBvbgoJcGVybWFuZW50X29ic3RhY2suCgkoamF2YV9jb21wbGV0ZV9saHMpOiBMaWtld2lzZS4KCShhcnJheV9jb25zdHJ1Y3Rvcl9jaGVja19lbnRyeSk6IENvbXBsZXRlIGFuIGluaXRpYWxpemVyIGVsZW1lbnQKCW9uIHBlcm1hbmVudF9vYnN0YWNrLgoKMTk5OS0xMC0xOSAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgoKCSogamNmLXBhcnNlLmMgKHBhcnNlX3NvdXJjZV9maWxlKTogQ2FsbCBqY2ZfZGVwZW5kZW5jeV9hZGRfZmlsZS4KCUZyb20gTWlrZSBNb3JldG9uIDxtaWtlQHBpbGxpbS5kZW1vbi5jby51az4uCgoxOTk5LTEwLTE1ICBHcmVnIE1jR2FyeSAgPGdrbUBnbnUub3JnPgoKCSogamF2YS10cmVlLmggKGZsYWdfYm91bmRzX2NoZWNrKTogUmVtb3ZlIGV4dGVybiBkZWNsLgoJKiBsYW5nLmMgKGZsYWdfYm91bmRzX2NoZWNrKTogUmVtb3ZlIGdsb2JhbCB2YXJpYWJsZS4KCShsYW5nX2Zfb3B0aW9ucyk6IFJlbW92ZSAiYm91bmRzLWNoZWNrIiBlbnRyeS4KCShsYW5nX2luaXRfb3B0aW9ucyk6IERlZmF1bHQgZmxhZ19ib3VuZHNfY2hlY2sgdG8gIm9uIi4KCjE5OTktMTAtMTQgIFRvbSBUcm9tZXkgIDx0cm9tZXlAY3lnbnVzLmNvbT4KCgkqIGp2Z2VubWFpbi5jICh1c2FnZSk6IE5ldyBmdW5jdGlvbi4KCShtYWluKTogVXNlIGl0LiAgQWxzbywgaGFuZGxlIGAtRCcgb3B0aW9ucy4KCSoganZzcGVjLmMgKGxhbmdfc3BlY2lmaWNfZHJpdmVyKTogUmVjb2duaXplIC1ELgoJKGp2Z2VubWFpbl9zcGVjKTogQWRkZWQgYCV7RCp9JyB0byBqdmdlbm1haW4gaW52b2NhdGlvbi4KCgkqIGp2c3BlYy5jIChqdmdlbm1haW5fc3BlYyk6IFVzZSBgJXVtYWluJywgbm90IGp1c3QgYCV1Jy4KCjE5OTktMTAtMTQgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGpjZi1kdW1wLmMgKHByaW50X2NvbnN0YW50LCBkaXNhc3NlbWJsZV9tZXRob2QpOiBEb24ndCBjYWxsIGEKCXZhcmlhZGljIGZ1bmN0aW9uIHdpdGggYSBub24tbGl0ZXJhbCBmb3JtYXQgc3RyaW5nLgoKCSogcGFyc2Utc2Nhbi55IChyZXBvcnRfbWFpbl9kZWNsYXJhdGlvbik6IExpa2V3aXNlLgoKCSogcGFyc2UuaCAoRVJST1JfQ0FTVF9ORUVERURfVE9fSU5URUdSQUwpOiBMaWtld2lzZS4KCgkqIHBhcnNlLnkgKHJlYWRfaW1wb3J0X2RpciwgcGF0Y2hfYXNzaWdubWVudCwgcGF0Y2hfYmlub3AsCglwYXRjaF9hcnJheV9yZWYpOiBMaWtld2lzZS4KCgkqIHR5cGVjay5jIChidWlsZF9qYXZhX2FycmF5X3R5cGUpOiBMaWtld2lzZS4KCgkqIHZlcmlmeS5jICh2ZXJpZnlfanZtX2luc3RydWN0aW9ucyk6IExpa2V3aXNlLgoKVHVlIE9jdCAxMiAyMjoyODoxMCAxOTk5ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIGpjZi13cml0ZS5jIChSRUxPQ0FUSU9OX1ZBTFVFXzEpOiBGaXhlZCBpbnRlZ2VyIHZhbHVlIGZyb20gMCB0byAxLgoKMTk5OS0xMC0wNyAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQGN5Z251cy5jb20+CgoJKiBqY2Ytd3JpdGUuYyAoZ2VuZXJhdGVfY2xhc3NmaWxlKTogVXNlIFVOU0FGRV9QVVR4IGluIGNhc2VzCgl3aGVyZSBDSEVDS19QVVQgbWF5IGZhaWwgZm9yIHZhbGlkIHJlYXNvbnMuCgoJKiBqY2Ytd3JpdGUuYyAoVU5TQUZFX1BVVDEsIFVOU0FGRV9QVVQyLCBVTlNBRkVfUFVUMywKCVVOU0FGRV9QVVROKTogTmV3IG1hY3Jvcy4KCjE5OTktMTAtMDQgIFRvbSBUcm9tZXkgIDx0cm9tZXlAY3lnbnVzLmNvbT4KCgkqIGxleC5oIChCVUlMRF9PUEVSQVRPUjIpOiBSZXR1cm4gQVNTSUdOX0FOWV9USyBpbiBgbGl0ZScgY2FzZSBhcwoJd2VsbC4gIEZpeGVzIEphdmEgUFIgZ2NqLzU5LgoJKiBwYXJzZS1zY2FuLnkgKHl5ZXJyb3IpOiBSZXBvcnQgZXJyb3JzLgoKRnJpIFNlcCAyNCAxMjoyMzowNSAxOTk5ICBHbGVubiBDaGFtYmVycyAgPEdDaGFtYmVyc0Bwcm92c29sLmNvbT4KCgkqIGRlY2wuYyAoaW5zZXJ0X2Jsb2NrKTogUmVtb3ZlIHVuY29uZGl0aW9uYWwgYGFib3J0Jy4KCkZyaSBTZXAgMjQgMTA6NDg6MTAgMTk5OSAgQmVybmQgU2NobWlkdCAgPGJlcm5kc0BjeWdudXMuY28udWs+CgoJKiBkZWNsLmMgKGJ1aWx0aW5fZnVuY3Rpb24pOiBObyBsb25nZXIgc3RhdGljLiAgTmV3IGFyZyBDTEFTUy4gIEFyZwoJRlVOQ1RJT05fQ09ERSBub3cgb2YgdHlwZSBpbnQuICBBbGwgY2FsbGVycyBjaGFuZ2VkLgoJU2V0IHRoZSBidWlsdGluJ3MgREVDTF9CVUlMVF9JTl9DTEFTUy4KCjE5OTktMDktMjMgIFRvbSBUcm9tZXkgIDx0cm9tZXlAY3lnbnVzLmNvbT4KCgkqIGp2c3BlYy5jIChsYW5nX3NwZWNpZmljX2RyaXZlcik6IERvbid0IHJlYWQgc3BlYyBmaWxlIGlmCgktZnN5bnRheC1vbmx5IGdpdmVuLgoKMTk5OS0wOS0yMiAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgoKCSogbGFuZy1zcGVjcy5oOiBBZGRlZCBgJShqYzEpJyB0byB0aGUgamMxIHNwZWMuCgoJKiBqYXZhb3AuaCAoV09SRF9UT19GTE9BVCk6IFVzZSBgaW5saW5lJyB1bmNvbmRpdGlvbmFsbHkuCgkoV09SRFNfVE9fTE9ORyk6IExpa2V3aXNlLgoJKFdPUkRTX1RPX0RPVUJMRSk6IExpa2V3aXNlLgoKVHVlIFNlcCAxNCAxNjoyNDoxOSAxOTk5ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIGpjZi13cml0ZS5jIChSRUxPQ0FUSU9OX1ZBTFVFXzApOiBOZXcgbWFjcm8uCgkoUkVMT0NBVElPTl9WQUxVRV8xKTogTGlrZXdpc2UuCgkoZW1pdF9paW5jLCBlbWl0X3JlbG9jLCBwdXNoX2NvbnN0YW50MSwgcHVzaF9jb25zdGFudDIsCglwdXNoX2luX2NvbnN0LCBwdXNoX2xvbmdfY29uc3QpOiBQcm90b3R5cGVkLgoJKHB1c2hfY29uc3RhbnQxKTogQXJndW1lbnQgYGluZGV4JyBpcyBvZiB0eXBlIEhPU1RfV0lERV9JTlQuCgkocHVzaF9jb25zdGFudDIpOiBMaWtld2lzZS4KCShwdXNoX2ludF9jb25zdCk6IENhc3QgZmluZF9jb25zdGFudDEncyBpbnRlZ2VyIGFyZ3VtZW50cyB0byBgandvcmQnLgoJKGZpbmRfY29uc3RhbnRfd2lkZSk6IENhc3QgZmluZF9jb25zdGFudDIncyBpbnRlZ2VyIGFyZ3VtZW50cyB0bwoJYGp3b3JkJy4KCShmaW5kX2NvbnN0YW50X2luZGV4KTogQ2FzdCBmaW5kX2NvbnN0YW50MidzIGFuZCBmaW5kX2NvbnN0YW50MidzCglpbnRlZ2VyIGFyZ3VtZW50cyB0byBgandvcmQnLgoJKGVtaXRfcG9wKTogQXJndW1lbnQgYHZhbHVlJyBpcyBvZiB0eXBlIEhPU1RfV0lERV9JTlQuCgkoZW1pdF9zd2l0Y2hfcmVsb2MpOiBVc2UgUkVMT0NBVElPTl9WQUxVRV8wLgoJKGVtaXRfaWYpOiBVc2UgUkVMT0NBVElPTl9WQUxVRV8xLgoJKGVtaXRfZ290byk6IExpa2V3aXNlLgoJKGVtaXRfanNyKTogTGlrZXdpc2UuCgkoZ2VuZXJhdGVfYnl0ZWNvZGVfaW5zbnMpOiBVc2UgUkVMT0NBVElPTl9WQUxVRV8wLiBDYXN0IHNlY29uZAoJYXJndW1lbnQgdG8gcHVzaF9sb25nX2NvbnN0IHRvIEhPU1RfV0lERV9JTlQuCgoxOTk5LTA5LTE1ICBBbmRyZWFzIFNjaHdhYiAgPHNjaHdhYkBzdXNlLmRlPgoKCSogTWFrZWZpbGUuaW4gKHBhcnNlLm8pOiBEZXBlbmQgb24gJChKQVZBX1RSRUVfSCkuCgoxOTk5LTA5LTIwICBOaWNrIENsaWZ0b24gIDxuaWNrY0BjeWdudXMuY29tPgoKCSogbGFuZy5jIChsYW5nX2RlY29kZV9vcHRpb24pOiBFeHRlbmQgY29tbWVudC4KClRodSBTZXAgMTYgMTU6NDI6MzkgMTk5OSAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBwYXJzZS55IChqYXZhX21ldGhvZF9hZGRfc3RtdCk6IFRlc3QgYWdhaW5zdCBHRVRfQ1VSUkVOVF9CTE9DSwoJaW5zdGVhZCBvZiBmbmRlY2wuCgoxOTk5LTA5LTE2ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBnamF2YWguYyAoZ2V0X2ZpZWxkX25hbWUsIHByaW50X21ldGhvZF9pbmZvLCBwcmludF9pbmNsdWRlLAoJYWRkX25hbWVsZXQpOiBVc2UgeG1hbGxvYywgbm90IG1hbGxvYy4KCgkqIGpjZi1kZXBlbmQuYyAoYWRkX2VudHJ5KTogTGlrZXdpc2UuICBVc2UgeHN0cmR1cCwgbm90IHN0cmR1cC4KCShtdW5nZSk6IFVzZSB4cmVhbGxvYywgbm90IHJlYWxsb2MsIHRydXN0IHhyZWFsbG9jIHRvIGhhbmRsZSBhCglOVUxMIHBvaW50ZXIuCgoJKiBqY2YtaW8uYyAob3Blbl9pbl96aXAsIGZpbmRfY2xhc3MpOiBVc2UgeHN0cmR1cCwgbm90IHN0cmR1cC4KCgkqIGpjZi1wYXJzZS5jIChqY2Zfb3V0X29mX3N5bmNoLCB5eXBhcnNlKTogTGlrZXdpc2UuCgoJKiBqY2YtcGF0aC5jIChhZGRfZW50cnkpOiBMaWtld2lzZS4KCgkqIGpjZi5oIChBTExPQywgUkVBTExPQyk6IFVzZSB4bWFsbG9jL3hyZWFsbG9jLCBub3QgbWFsbG9jL3JlYWxsb2MuCgoJKiBqdi1zY2FuLmMgKHhtYWxsb2MpOiBSZW1vdmUgZGVmaW5pdGlvbi4KCgkqIGp2Z2VubWFpbi5jICh4bWFsbG9jKTogTGlrZXdpc2UuCgoJKiBqdnNwZWMuYyAobGFuZ19zcGVjaWZpY19kcml2ZXIpOiBVc2UgeGNhbGxvYywgbm90IHhtYWxsb2MvYnplcm8uCgoJKiBsZXguYyAoamF2YV9zdG9yZV91bmljb2RlKTogVXNlIHhyZWFsbG9jLCBub3QgcmVhbGxvYy4KCgkqIHBhcnNlLXNjYW4ueTogVXNlIGNvbmNhdCwgbm90IG9mIHhtYWxsb2MvYXNzaWduL3N0cmNweS4gIFVzZQoJY29uY2F0LCBub3QgeG1hbGxvYy9zcHJpbnRmLgoJKGphdmFfcHVzaF9wYXJzZXJfY29udGV4dCk6IFVzZSB4Y2FsbG9jLCBub3QgeG1hbGxvYy9iemVyby4KCSh4c3RyZHVwKTogUmVtb3ZlIGRlZmluaXRpb24uCgoJKiBwYXJzZS55IChkdXBsaWNhdGVfZGVjbGFyYXRpb25fZXJyb3JfcCwKCWNvbnN0cnVjdG9yX2NpcmN1bGFyaXR5X21zZywgdmVyaWZ5X2NvbnN0cnVjdG9yX2NpcmN1bGFyaXR5LAoJY2hlY2tfYWJzdHJhY3RfbWV0aG9kX2RlZmluaXRpb25zLCBqYXZhX2NoZWNrX3JlZ3VsYXJfbWV0aG9kcywKCWphdmFfY2hlY2tfYWJzdHJhY3RfbWV0aG9kcywgcGF0Y2hfbWV0aG9kX2ludm9jYXRpb24sCgljaGVja19mb3Jfc3RhdGljX21ldGhvZF9yZWZlcmVuY2UsIHBhdGNoX2Fzc2lnbm1lbnQsIHBhdGNoX2Jpbm9wLAoJcGF0Y2hfY2FzdCwgYXJyYXlfY29uc3RydWN0b3JfY2hlY2tfZW50cnksIHBhdGNoX3JldHVybiwKCXBhdGNoX2NvbmRpdGlvbmFsX2V4cHIpOiBVc2UgeHN0cmR1cCwgbm90IHN0cmR1cC4KCgkqIHpleHRyYWN0LmMgKEFMTE9DKTogVXNlIHhtYWxsb2MsIG5vdCBtYWxsb2MuCgpTdW4gU2VwIDEyIDIzOjMwOjA5IDE5OTkgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIE1ha2UtbGFuZy5pbiAoanZzcGVjLm8pOiBEZXBlbmQgb24gc3lzdGVtLmggYW5kIGdjYy5oLgoKCSoganZzcGVjLmM6IEluY2x1ZGUgZ2NjLmguICBEb24ndCBpbmNsdWRlIGdhbnNpZGVjbC5oLgoJKGRvX3NwZWMsIGxhbmdfc3BlY2lmaWNfcHJlX2xpbmssIGxhbmdfc3BlY2lmaWNfZHJpdmVyLAoJaW5wdXRfZmlsZW5hbWUsIGlucHV0X2ZpbGVuYW1lX2xlbmd0aCk6IERvbid0IGRlY2xhcmUuCgkobWFpbl9jbGFzc19uYW1lLCBqdmdlbm1haW5fc3BlYywgbGFuZ19zcGVjaWZpY19kcml2ZXIpOgoJQ29uc3RpZnkgYSBjaGFyKi4KCShsYW5nX3NwZWNpZmljX2RyaXZlcik6IEFsbCBjYWxscyB0byB0aGUgZnVuY3Rpb24gcG9pbnRlcgoJcGFyYW1ldGVyIG5vdyBleHBsaWNpdGx5IGNhbGwgYGZhdGFsJy4KClNhdCBTZXAgMTEgMTY6NDY6NDQgMTk5OSAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBwYXJzZS55IChmaW5kX2FwcGxpY2FibGVfYWNjZXNzaWJsZV9tZXRob2RzX2xpc3QpOiBTZWFyY2gKCWFic3RyYWN0IGNsYXNzZXMgYXMgaW50ZXJmYWNlcy4KClRodSBTZXAgIDkgMTc6MzM6MjggMTk5OSAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBjbGFzcy5jIChmaW5pc2hfY2xhc3MpOiBXZSdyZSBub3cgb3V0c2lkZSBhIHZhbGlkIG1ldGhvZAoJZGVjbGFyYXRpb24uIFRlbGwgdGhlIHJlc3Qgb2YgZ2NjIHNvLgoKMTk5OS0wOS0wOCAgQnJ1Y2UgS29yYiAgYXV0b2dlbkBsaW51eGJveC5jb20KCgkqIE1ha2VmaWxlLmluOiBHaXZlIHRoZSBncGVyZiB1c2VyIGEgaGludCBhYm91dCB3aHkgImdwZXJmIC1GIiBmYWlscy4KCjE5OTktMDktMDcgIFRvbSBUcm9tZXkgIDx0cm9tZXlAY3lnbnVzLmNvbT4KCgkqIGdqYXZhaC5jIChhZGRfY2xhc3NfZGVjbCk6IEdlbmVyYXRlIGluY2x1ZGUgZm9yIGdjai9hcnJheS5oLCBub3QKCWphdmEtYXJyYXkuaC4KCShkZWNvZGVfc2lnbmF0dXJlX3BpZWNlKTogRG9uJ3QgZW1pdCAiOjoiIGluIEpBcnJheTw+LgoJKHByaW50X25hbWVsZXQpOiBPbmx5IHByaW50IHRyYWlsaW5nIGA7JyB3aGVuIHByaW50aW5nIGEgY2xhc3MuCgpGcmkgU2VwIDEwIDEwOjMyOjMyIDE5OTkgIEJlcm5kIFNjaG1pZHQgIDxiZXJuZHNAY3lnbnVzLmNvLnVrPgoKCSogamF2YS10cmVlLmg6IERlbGV0ZSBkZWNsYXJhdGlvbnMgZm9yIGFsbCB0cmVlIG5vZGVzIG5vdyBtb3ZlZCB0bwoJZ2xvYmFsX3RyZWVzLgoJKiBkZWNsLmM6IERlbGV0ZSB0aGVpciBkZWZpbml0aW9ucy4KCjE5OTktMDktMDQgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiBNYWtlLWxhbmcuaW4gKGpjMSk6IERlcGVuZCBvbiBnZ2MtY2FsbGJhY2tzLm8uCgkqIE1ha2VmaWxlLmluIChPQkpTKTogQWRkIGdnYy1jYWxsYmFja3Muby4KCShPQkpERVBTKTogTGlrZXdpc2UuCgoxOTk5LTA5LTAzICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CgoJKiBwYXJzZS55IChzdHJpcF9vdXRfc3RhdGljX2ZpZWxkX2FjY2Vzc19kZWNsKTogUmV0dXJuIG9wZXJhbmQgaWYKCWl0IHNhdGlzZmllcyBKREVDTF9QLgoKMTk5OS0wOS0wMiAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgoKCSogZ2phdmFoLmMgKGRlY29kZV9zaWduYXR1cmVfcGllY2UpOiBFbWl0ICI6OiIgaW4gSkFycmF5PD4uCglIYW5kbGUgbmVzdGVkIGFycmF5cywgbGlrZSBgW1tJJy4KCjE5OTktMDktMDIgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGNsYXNzLmMgKGZpbmlzaF9jbGFzcyk6IFJlbW92ZSB1bnVzZWQgcGFyYW1ldGVyLCBhbGwgY2FsbGVycwoJY2hhbmdlZC4KCgkqIGV4cHIuYyAoYnVpbGRfamF2YV9hdGhyb3cpOiBDaGFuZ2UgcmV0dXJuIHR5cGUgdG8gdm9pZC4KCShqYXZhX2xhbmdfZXhwYW5kX2V4cHIpOiBNYWtlIHN1cmUgZWFjaCBjYXNlIGluIHN3aXRjaCByZXR1cm5zIGEKCXZhbHVlLgoKCSogamF2YS10cmVlLmggKGZpbmlzaF9jbGFzcyk6IEZpeCBwcm90b3R5cGUgdG8gdGFrZSB2b2lkIGFyZ3MuCgoJKiBqY2YtZHVtcC5jICh1c2FnZSk6IE1hcmsgd2l0aCBBVFRSSUJVVEVfTk9SRVRVUk4uCgkobWFpbik6IElzc3VlIHJldHVybiBmcm9tIG1haW4sIG5vdCBleGl0LgoKCSogamNmLXBhcnNlLmMgKHBhcnNlX2NsYXNzX2ZpbGUpOiBGaXggY2FsbCB0byBgZmluaXNoX2NsYXNzJy4KCgkqIGpjZi5oIChqY2ZfdW5leHBlY3RlZF9lb2YpOiBNYXJrIHdpdGggQVRUUklCVVRFX05PUkVUVVJOLgoKCSoganYtc2Nhbi5jIChtYWluKTogSXNzdWUgcmV0dXJuIGZyb20gbWFpbiwgbm90IGV4aXQuCgoJKiBwYXJzZS55IChjaGVja19hYnN0cmFjdF9tZXRob2RfZGVmaW5pdGlvbnMsCglqYXZhX2NoZWNrX2Fic3RyYWN0X21ldGhvZF9kZWZpbml0aW9ucyk6IEFkZCBzdGF0aWMgcHJvdG90eXBlcy4KCShqYXZhX2NvbXBsZXRlX2V4cGFuZF9tZXRob2RzKTogRml4IGNhbGwgdG8gYGZpbmlzaF9jbGFzcycuCgoJKiB2ZXJpZnkuYyAodmVyaWZ5X2p2bV9pbnN0cnVjdGlvbnMpOiBJbml0aWFsaXplIHZhcmlhYmxlcyBgb2xkcGMnCglhbmQgYHByZXZwYycuCgoxOTk5LTA4LTMwICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBsYW5nLmMgKGxhbmd1YWdlX3N0cmluZyk6IENvbnN0aWZ5LgoKMTk5OS0wOC0zMCAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogTWFrZWZpbGUuaW4gKExJQlMpOiBGaXggZGVmaW5pdGlvbiBzbyB3ZSBsaW5rIHdpdGggJChDTElCKS4KCVJlbW92ZSBoYWNrcyBmb3Igc3R1ZmYgd2hpY2ggY29tZXMgZnJvbSBsaWJpYmVydHkuCgoJKiBNYWtlLWxhbmcuaW46IExpa2V3aXNlLgoKTW9uIEF1ZyAzMCAxNjo0MTo0MSAxOTk5ICBIYW5zLVBldGVyIE5pbHNzb24gIDxocEBheGlzLnNlPgoKCSogTWFrZWZpbGUuaW4gKHhyZWYubyk6IERlcGVuZCBvbiB4cmVmLmMgZXhwbGljaXRseS4KCjE5OTktMDgtMjkgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGphdmEtdHJlZS5oIChsYW5nX3ByaW50YWJsZV9uYW1lKTogQ29uc3RpZnkgYSBjaGFyKi4KCgkqIGxhbmcuYyAobGFuZ19wcmludGFibGVfbmFtZSk6IExpa2V3aXNlLgoKRnJpIEF1ZyAyNyAyMzozMTo1NyAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBnamF2YWguYywgamNmLXdyaXRlLmMsIHZlcmlmeS5jOiBEbyBub3QgdXNlIEMrKyBzdHlsZQoJY29tbWVudHMgaW4gQyBjb2RlLgoKMTk5OS0wOC0yNiAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgoKCSogZ2phdmFoLmMgKHByaW50X2N4eF9jbGFzc25hbWUpOiBQcmludCAiOjoiIGJlZm9yZSBxdWFsaWZpZWQKCW5hbWUuCgpUaHUgQXVnIDI2IDA5OjEwOjU4IDE5OTkgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogcGFyc2UueSAobG9va3VwX2NsKTogQ2hhbmdlZCBsZWFkaW5nIGNvbW1lbnQuIE5vdyBkb2VzIGl0cyBiZXN0Cgl0byBzZXQgdGhlIGNvbHVtbiBudW1iZXIuCgkocXVhbGlmeV9hbWJpZ3VvdXNfbmFtZSk6IFRha2UgV0ZMIHdyYXBwZXJzIGludG8gYWNjb3VudC4KCldlZCBBdWcgMjUgMTU6Mzc6MTUgMTk5OSAgR3JlZ2cgVG93bnNlbmQgIDxnbXRAY3MuYXJpem9uYS5lZHU+CgoJKiB2ZXJpZnkuYyAodmVyaWZ5X2p2bV9pbnN0cnVjdGlvbnMpOiBEb24ndCBjaGVjayBpbnN0cnVjdGlvbgoJdmFsaWRpdHkgYmV5b25kIGVuZCBvZiBtZXRob2QuCgoxOTk5LTA4LTI1ICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CgoJKiBqdnNwZWMuYyAobGFuZ19zcGVjaWZpY19kcml2ZXIpOiBDb3JyZWN0bHkgaGFuZGxlIC0taGVscCBhZ2Fpbi4KCjE5OTktMDgtMjUgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGdqYXZhaC5jIChwcmludF9uYW1lLCBwcmludF9iYXNlX2NsYXNzbmFtZSwgdXRmOF9jbXAsCgljeHhfa2V5d29yZF9zdWJzdCwgZ2VuZXJhdGVfYWNjZXNzLCBuYW1lX2lzX21ldGhvZF9wLAoJZ2V0X2ZpZWxkX25hbWUsIHByaW50X2ZpZWxkX25hbWUsIHN1cGVyX2NsYXNzX25hbWUsIHByaW50X2luY2x1ZGUsCglkZWNvZGVfc2lnbmF0dXJlX3BpZWNlLCBwcmludF9jbGFzc19kZWNscywgdXNhZ2UsIGhlbHAsCglqYXZhX25vX2FyZ3VtZW50LCB2ZXJzaW9uLCBhZGRfbmFtZWxldCwgcHJpbnRfbmFtZWxldCk6IEFkZCBzdGF0aWMKCXByb3RvdHlwZS4KCShwcmludF9iYXNlX2NsYXNzbmFtZSwgdXRmOF9jbXAsIGN4eF9rZXl3b3JkX3N1YnN0LAoJbmFtZV9pc19tZXRob2RfcCk6IENvbnN0aWZ5IGEgY2hhciouCgkoZ2V0X2ZpZWxkX25hbWUpOiBMaWtld2lzZS4gIFByZWZlciB4c3RyZHVwIG92ZXIgbWFsbG9jL3N0cmNweS4KCVByb3ZpZGUgYSBmaW5hbCBlbHNlIGNsYXVzZSBpbiBhbiBpZi1lbHNlLWlmLgoJKHByaW50X2ZpZWxkX2luZm8pOiBBZGQgbWlzc2luZyBmaW5hbCBhcmcgaW4gZnVuY3Rpb24gY2FsbCB0bwoJYHByaW50X2ZpZWxkX25hbWUnLgoJKHByaW50X21ldGhvZF9pbmZvLCBkZWNvbXBpbGVfbWV0aG9kLCBkZWNvZGVfc2lnbmF0dXJlX3BpZWNlLAoJcHJpbnRfY19kZWNsLCBwcmludF9mdWxsX2N4eF9uYW1lLCBwcmludF9zdHViLAoJcHJpbnRfbWFuZ2xlZF9jbGFzc25hbWUsIHN1cGVyX2NsYXNzX25hbWUsIHByaW50X2luY2x1ZGUsCglhZGRfbmFtZWxldCwgYWRkX2NsYXNzX2RlY2wsIHByaW50X2NsYXNzX2RlY2xzLCBwcm9jZXNzX2ZpbGUsCgloZWxwKTogQ29uc3RpZnkgYSBjaGFyKi4KCgkqIGpjZi13cml0ZS5jIChqY2ZfaGFuZGxlciwgcHVzaF9jb25zdGFudDEsIHB1c2hfY29uc3RhbnQyLAoJcHVzaF9pbnRfY29uc3QsIGZpbmRfY29uc3RhbnRfd2lkZSwgZmluZF9jb25zdGFudF9pbmRleCwKCXB1c2hfbG9uZ19jb25zdCwgZmllbGRfb3AsIG1heWJlX3dpZGUsIGVtaXRfZHVwLCBlbWl0X3BvcCwKCWVtaXRfaWluYywgZW1pdF9sb2FkX29yX3N0b3JlLCBlbWl0X2xvYWQsIGVtaXRfc3RvcmUsIGVtaXRfdW5vcCwKCWVtaXRfYmlub3AsIGVtaXRfcmVsb2MsIGVtaXRfc3dpdGNoX3JlbG9jLCBlbWl0X2Nhc2VfcmVsb2MsCgllbWl0X2lmLCBlbWl0X2dvdG8sIGVtaXRfanNyLCBjYWxsX2NsZWFudXBzLAoJbWFrZV9jbGFzc19maWxlX25hbWUpOiBBZGQgc3RhdGljIHByb3RvdHlwZXMuCgkoZ2VuZXJhdGVfYnl0ZWNvZGVfcmV0dXJuLCBnZW5lcmF0ZV9ieXRlY29kZV9pbnNucyk6IFBhc3MgYQoJTlVMTF9QVFIsIG5vdCBhIE5VTExfVFJFRS4KCgkqIGp2LXNjYW4uYzogSW5jbHVkZSAiamNmLmgiLgoJKG1haW4pOiBEZWNsYXJlIHVzaW5nIERFRlVOIG1hY3JvLgoKCSoganZzcGVjLmMgKGZpbmRfc3BlY19maWxlLCBsYW5nX3NwZWNpZmljX3ByZV9saW5rLAoJbGFuZ19zcGVjaWZpY19kcml2ZXIpOiBBZGQgcHJvdG90eXBlcy4KCShmaW5kX3NwZWNfZmlsZSk6IENvbnN0aWZ5IGEgY2hhciouCgoJKiBrZXl3b3JkLmdwZXJmIChoYXNoLCBqYXZhX2tleXdvcmQpOiBBZGQgcHJvdG90eXBlcy4KCgkqIGxhbmcuYyAobGFuZ19wcmludF9lcnJvcik6IEFkZCBzdGF0aWMgcHJvdG90eXBlLgoJKGxhbmdfaW5pdCk6IFByZWZlciBtZW1jcHkgb3ZlciBiY29weSB0byBhdm9pZCBjYXN0cy4KCgkqIGxleC5jICh5eWxleCk6IEFkZCBzdGF0aWMgcHJvdG90eXBlLgoKCSogcGFyc2Utc2Nhbi55OiBJbmNsdWRlICJsZXguYyIgZWFybGllci4KCgkqIHBhcnNlLmg6IFJlbW92ZSByZWR1bmRhbnQgZGVjbGFyYXRpb24gZm9yIGB5eWxleCcuCgoJKiBwYXJzZS55IChqYXZhX2RlY2xfZXF1aXYsIGJpbm9wX2NvbXBvdW5kX3AsIHNlYXJjaF9sb29wLAoJbGFiZWxlZF9ibG9ja19jb250YWluc19sb29wX3ApOiBBZGQgc3RhdGljIHByb3RvdHlwZXMuCgkobm90X2FjY2Vzc2libGVfcCk6IE1ha2Ugc3RhdGljIHRvIG1hdGNoIHByb3RvdHlwZS4KCgkqIHZlcmlmeS5jIChzdGFydF9wY19jbXApOiBEb24ndCBuZWVkbGVzc2x5IGNhc3QgYXdheSBjb25zdC4KClN1biBBdWcgMjIgMTE6MDc6NDEgMTk5OSAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBwYXJzZS55IChjaGVja19tZXRob2RfcmVkZWZpbml0aW9uKTogQ2hhbmdlZCBsZWFkaW5nIGNvbW1lbnQuCgkoY2hlY2tfYWJzdHJhY3RfbWV0aG9kX2RlZmluaXRpb25zKTogTmV3IGZ1bmN0aW9uLgoJKGphdmFfY2hlY2tfYWJzdHJhY3RfbWV0aG9kX2RlZmluaXRpb25zKTogTmV3IGZ1bmN0aW9uLgoJKGphdmFfY2hlY2tfcmVndWxhcl9tZXRob2RzKTogQ2FsbCBpdC4KCSh2ZXJpZnlfY29uc3RydWN0b3Jfc3VwZXIpOiBGaXhlZCBpbmRlbnRhdGlvbi4KCShsb29rdXBfbWV0aG9kX2ludm9rZSk6IExpa2V3aXNlLgoKVGh1IEF1ZyAxOSAxMDoyNjoxOCAxOTk5ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnkgKG1ldGhvZF9oZWFkZXIpOiBSZXR1cm4gYSBudWxsIHBvaW50ZXIgaWYgdGhlIGN1cnJlbnQKCWNsYXNzIG5vZGUgaXMgbnVsbC4KCShmaW5pc2hfbWV0aG9kX2RlY2xhcmF0aW9uKTogUmV0dXJuIGlmIHRoZSBjdXJyZW50IGZ1bmN0aW9uIGRlY2wKCWlzIG51bGwuCgkoc291cmNlX3N0YXJ0X2phdmFfbWV0aG9kKTogTGlrZXdpc2UuCgkoamF2YV9tZXRob2RfYWRkX3N0bXQpOiBMaWtld2lzZS4KCldlZCBBdWcgMTggMTM6MTc6MTUgMTk5OSAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBjbGFzcy5jIChlbWl0X3JlZ2lzdGVyX2NsYXNzKTogUmVtb3ZlZCB1bm5lY2Vzc2FyeSBjYWxsIHRvCglzdGFydF9zZXF1ZW5jZS4KCSogcGFyc2UueSAobGFiZWxlZF9ibG9ja19jb250YWluc19sb29wX3ApOiBSZW1vdmVkIHVudXNlZCBsb2NhbAoJdmFyaWFibGUuCgpUdWUgQXVnIDE3IDIyOjUxOjQ0IDE5OTkgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogcGFyc2UueSAoamF2YV9yZWZvbGQpOiBBZGRlZCBwcm90b3R5cGUuCgpUdWUgQXVnIDE3IDIxOjQ4OjQxIDE5OTkgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogcGFyc2UueSAoQklOT1BfQ09NUE9VTkRfQ0FORElEQVRFUyk6IE5ldyBtYWNyby4KCShqYXZhX3N0YWJpbGl6ZV9yZWZlcmVuY2UpOiBSZW1vdmVkIHVubmVjZXNzYXJ5IGBlbHNlJy4KCShqYXZhX2NvbXBsZXRlX2xocyk6IFNldCBmbGFnIHRvIHJlbWVtYmVyIGJvb2xlYW4uIENhbGwKCWphdmFfcmVmb2xkLiBBZGRlZCBjb21tZW50cy4KCShqYXZhX2RlY2xfZXF1aXYpOiBOZXcgZnVuY3Rpb24uCgkoYmlub3BfY29tcG91bmRfcCk6IExpa2V3aXNlLgoJKGphdmFfcmVmb2xkKTogTGlrZXdpc2UuCgkocGF0Y2hfdW5hcnlvcCk6IFN0cmlwZWQgc3RhdGljIGZpZWxkIGFjY2VzcyBhc3NpZ25lZCB0byBkZWNsIGFuZAoJb3AuIENoYW5nZWQgcHJvbW90aW9uIHNjaGVtZSBmb3IgKysvLS0gb3BlcmF0b3JzLgoJKHNlYXJjaF9sb29wKTogTmV3IGZ1bmN0aW9uLgoJKGxhYmVsZWRfYmxvY2tfY29udGFpbnNfbG9vcF9wKTogTGlrZXdpc2UuCgkocGF0Y2hfbG9vcF9zdGF0ZW1lbnQpOiBDYWxsIGxhYmVsZWRfYmxvY2tfY29udGFpbnNfbG9vcF9wLiBBZGRlZAoJY29tbWVudC4KCShwYXRjaF9iY19zdGF0ZW1lbnQpOiBDYWxsIHNlYXJjaF9sb29wLiBGaXhlZCBjb21tZW50LgoKMTk5OS0wOC0xNCAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQGN5Z251cy5jb20+CgoJKiBleHByLmMgKGphdmFfbGFuZ19leHBhbmRfZXhwcik6IE1hcmsgc3RhdGljIGFycmF5IGRhdGEgYXMKCXJlZmVyZW5jZWQuCgpUdWUgQXVnCTEwIDAwOjI4OjMxIDE5OTkgIFJhaW5lciBPcnRoICA8cm9AVGVjaEZhay5VbmktQmllbGVmZWxkLkRFPgoKCSoganZnZW5tYWluLmMgKG1haW4pOiBOVUwtdGVybWluYXRlIG5hbWVfb2JzdGFjay4KCjE5OTktMDgtMTAgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGNoZWNrLWluaXQuYyAoY2hlY2tfYm9vbDJfaW5pdCwgZG9uZV9hbHRlcm5hdGl2ZSk6IEFkZCBzdGF0aWMKCXByb3RvdHlwZXMuCgoJKiBjbGFzcy5jIChhZGRfaW50ZXJmYWNlX2RvLCBtYXliZV9sYXlvdXRfc3VwZXJfY2xhc3MpOiBMaWtld2lzZS4KCShhZGRfbWV0aG9kLCBidWlsZF91dGY4X3JlZiwgYnVpbGRfY2xhc3NfcmVmLAoJYXBwZW5kX2dwcF9tYW5nbGVkX3R5cGUsIGxheW91dF9jbGFzc19tZXRob2QpOiBDb25zdGlmeSBhIGNoYXIqLgoKCSogZGVjbC5jIChwdXNoX3Byb21vdGVkX3R5cGUsIG1ha2VfYmluZGluZ19sZXZlbCk6IEFkZCBzdGF0aWMKCXByb3RvdHlwZXMuCgkocHVzaF9wcm9tb3RlZF90eXBlLCBwdXNoZGVjbCk6IENvbnN0aWZ5IGEgY2hhciouCgoJKiBleGNlcHQuYyAoZmluZF9oYW5kbGVyX2luX3JhbmdlLCBsaW5rX2hhbmRsZXIsCgljaGVja19zdGFydF9oYW5kbGVycyk6IEFkZCBzdGF0aWMgcHJvdG90eXBlcy4KCgkqIGV4cHIuYyAocHJvY2Vzc19qdm1faW5zdHJ1Y3Rpb24pOiBDb25zdGlmeSBhIGNoYXIqLgoKCSogZ2phdmFoLmMgKG1haW4pOiBDb25zdGlmeSBhIGNoYXIqLgoKCSogamF2YS10cmVlLmggKHZlcmlmeV9qdm1faW5zdHJ1Y3Rpb25zLCBwcm9jZXNzX2p2bV9pbnN0cnVjdGlvbik6CglDb25zdGlmeSBhIGNoYXIqLgoKCSogamNmLWRlcGVuZC5jIChmcmVlX2VudHJ5LCBhZGRfZW50cnksIG11bmdlLCBwcmludF9lbnRzKTogQWRkCglzdGF0aWMgcHJvdG90eXBlcy4KCShhZGRfZW50cnksIGpjZl9kZXBlbmRlbmN5X3NldF90YXJnZXQsIGpjZl9kZXBlbmRlbmN5X2FkZF90YXJnZXQsCgltdW5nZSwgcHJpbnRfZW50cyk6IENvbnN0aWZ5IGEgY2hhciouCgoJKiBqY2YtZHVtcC5jIChkaXNhc3NlbWJsZV9tZXRob2QpOiBDb25zdGlmeSBhIGNoYXIqLgoJKHByaW50X2NvbnN0YW50X3Bvb2wsIHByaW50X2V4Y2VwdGlvbl90YWJsZSk6IEFkZCBzdGF0aWMgcHJvdG90eXBlcy4KCShwcmludF9jb25zdGFudCwgcHJpbnRfZXhjZXB0aW9uX3RhYmxlLCBtYWluLCBkaXNhc3NlbWJsZV9tZXRob2QpOgoJQ29uc3RpZnkgYSBjaGFyKi4KCgkqIGpjZi1pby5jIChmaW5kX2NsYXNzZmlsZSwgZmluZF9jbGFzcyk6IExpa2V3aXNlLgoKCSogamNmLXBhcnNlLmMgKEpQT09MX1VURl9EQVRBLCBmaW5kX2luX2N1cnJlbnRfemlwKTogTGlrZXdpc2UuCgkoc2V0X3NvdXJjZV9maWxlbmFtZSwgcHJlZGVmaW5lZF9maWxlbmFtZV9wKTogQWRkIHN0YXRpYyBwcm90b3R5cGVzLgoJKHNldF9zb3VyY2VfZmlsZW5hbWUsIGdldF9jb25zdGFudCwgZ2V0X2NsYXNzX2NvbnN0YW50LAoJZmluZF9pbl9jdXJyZW50X3ppcCk6IENvbnN0aWZ5IGEgY2hhciouCgoJKiBqY2YtcGF0aC5jIChmcmVlX2VudHJ5LCBhcHBlbmRfZW50cnksIGFkZF9lbnRyeSwgYWRkX3BhdGgpOiBBZGQKCXN0YXRpYyBwcm90b3R5cGVzLgoJKGFkZF9lbnRyeSwgYWRkX3BhdGgsIGpjZl9wYXRoX2NsYXNzcGF0aF9hcmcsCglqY2ZfcGF0aF9DTEFTU1BBVEhfYXJnLCBqY2ZfcGF0aF9pbmNsdWRlX2FyZyk6IENvbnN0aWZ5IGEgY2hhciouCgoJKiBqY2YtcmVhZGVyLmMgKGdldF9hdHRyaWJ1dGUsIGpjZl9wYXJzZV9wcmVhbWJsZSwKCWpjZl9wYXJzZV9jb25zdGFudF9wb29sLCBqY2ZfcGFyc2VfY2xhc3MsIGpjZl9wYXJzZV9maWVsZHMsCglqY2ZfcGFyc2Vfb25lX21ldGhvZCwgamNmX3BhcnNlX21ldGhvZHMsCglqY2ZfcGFyc2VfZmluYWxfYXR0cmlidXRlcyk6IEFkZCBzdGF0aWMgcHJvdG90eXBlcy4KCShnZXRfYXR0cmlidXRlKTogQ29uc3RpZnkgYSBjaGFyKi4KCgkqIGpjZi5oIChmaW5kX2NsYXNzLCBmaW5kX2NsYXNzZmlsZSwgamNmX2RlcGVuZGVuY3lfc2V0X3RhcmdldCwKCWpjZl9kZXBlbmRlbmN5X2FkZF90YXJnZXQsIGpjZl9wYXRoX2NsYXNzcGF0aF9hcmcsCglqY2ZfcGF0aF9DTEFTU1BBVEhfYXJnLCBqY2ZfcGF0aF9pbmNsdWRlX2FyZyk6IENvbnN0aWZ5IGEgY2hhciouCgoJKiBqdi1zY2FuLmMgKG1haW4pOiBDb25zdGlmeSBhIGNoYXIqLgoJKGdjY19vYnN0YWNrX2luaXQpOiBBZGQgcHJvdG90eXBlIGFyZ3VtZW50cy4KCgkqIGp2Z2VubWFpbi5jIChnY2Nfb2JzdGFja19pbml0KTogTGlrZXdpc2UuCgkobWFpbik6IENvbnN0aWZ5IGEgY2hhciouCgoJKiBsYW5nLmMgKHB1dF9kZWNsX3N0cmluZywgcHV0X2RlY2xfbm9kZSwgamF2YV9kdW1teV9wcmludCk6IEFkZAoJc3RhdGljIHByb3RvdHlwZXMuCgkocHV0X2RlY2xfc3RyaW5nLCBsYW5nX3ByaW50X2Vycm9yKTogQ29uc3RpZnkgYSBjaGFyKi4KCShsYW5nX2luaXQpOiBSZW1vdmUgcmVkdW5kYW50IGV4dGVybiBwcm90b3R5cGUuCgoJKiBtYW5nbGUuYyAoZW1pdF91bmljb2RlX21hbmdsZWRfbmFtZSk6IENvbnN0aWZ5IGEgY2hhciouCgoJKiB0eXBlY2suYyAoY29udmVydF9pZWVlX3JlYWxfdG9faW50ZWdlciwgcGFyc2Vfc2lnbmF0dXJlX3R5cGUpOgoJQWRkIHN0YXRpYyBwcm90b3R5cGVzLgoJKGdldF90eXBlX2Zyb21fc2lnbmF0dXJlKTogQ29uc3RpZnkgYSBjaGFyKi4KCgkqIHZlcmlmeS5jIChjaGVja19wZW5kaW5nX2Jsb2NrLCB0eXBlX3N0YWNrX2R1cCwgc3RhcnRfcGNfY21wICk6CglBZGQgc3RhdGljIHByb3RvdHlwZXMuCgkoc3RhcnRfcGNfY21wKTogUHJlZmVyIFBUUiBvdmVyIEdFTkVSSUNfUFRSLgoJKHZlcmlmeV9qdm1faW5zdHJ1Y3Rpb25zKTogQ29uc3RpZnkgYSBjaGFyKi4KCgkqIHhyZWYuYyAoeHJlZl9mbGFnX3ZhbHVlKTogTGlrZXdpc2UuCgoJKiB4cmVmLmggKHhyZWZfZmxhZ192YWx1ZSk6IExpa2V3aXNlLgoKCSogemV4dHJhY3QuYyAobWFrZXdvcmQsIG1ha2Vsb25nKTogQWRkIHN0YXRpYyBwcm90b3R5cGVzLgoJKG1ha2V3b3JkLCBtYWtlbG9uZyk6IENvbnN0aWZ5IGEgdWNoKi4KCjE5OTktMDgtMDkgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGxhbmcuYyAoamF2YV9kdW1teV9wcmludCk6IENvbnN0aWZ5IGEgY2hhciouCgkobGFuZ19wcmludF9lcnJvcik6IExpa2V3aXNlLgoJKGxhbmdfaW5pdCk6IFJlbW92ZSByZWR1bmRhbnQgcHJvdG90eXBlIGZvciBgcHJpbnRfZXJyb3JfZnVuY3Rpb24nLgoJKGxhbmdfaW5pdF9zb3VyY2UpOiBMaWtld2lzZS4KCShsYW5nX2lkZW50aWZ5KTogQ29uc3RpZnkgYSBjaGFyKi4KCjE5OTktMDgtMDkgIFRvbSBUcm9tZXkgIDx0cm9tZXlAY3lnbnVzLmNvbT4KCgkqIGphdmFvcC5oIChXT1JEX1RPX0ZMT0FUKTogb25seSBpbmxpbmUgaWYgYnVpbGRpbmcgd2l0aCBnY2MuCgkoV09SRFNfVE9fTE9ORyk6IExpa2V3aXNlLgoJKFdPUkRTX1RPX0RPVUJMRSk6IExpa2V3aXNlLgoKMTk5OS0wOC0wNCAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogTWFrZWZpbGUuaW4gKGxhbmcubyk6IERlcGVuZCBvbiAkKFJUTF9IKSAkKEVYUFJfSCkuCgoJKiBleHByLmMgKGphdmFfc3RhY2tfcG9wLCBqYXZhX2FycmF5X2RhdGFfb2Zmc2V0LAoJYnVpbGRfamF2YV90aHJvd19vdXRfb2ZfYm91bmRzX2V4Y2VwdGlvbiwgY2FzZV9pZGVudGl0eSwKCWJ1aWxkX2phdmFfY2hlY2tfaW5kZXhlZF90eXBlKTogQWRkIHN0YXRpYyBwcm90b3R5cGVzLgoJKGxpbmVudW1iZXJfdGFibGUsIGV4cGFuZF9pbnZva2UsIGV4cGFuZF9qYXZhX2ZpZWxkX29wLAoJYnVpbGRfcHJpbXR5cGVfdHlwZV9yZWYsIGV4cGFuZF9ieXRlX2NvZGUpOiBDb25zdGlmeSBhIGNoYXIqLgoKCSogamF2YS10cmVlLmggKGJ1aWxkX3ByaW10eXBlX3R5cGVfcmVmLCBsaW5lbnVtYmVyX3RhYmxlKToKCUNvbnN0aWZ5IGEgY2hhciouCgkoamF2YV9sYW5nX2V4cGFuZF9leHByKTogQWRkIHByb3RvdHlwZS4KCgkqIGxhbmcuYzogSW5jbHVkZSBydGwuaCBhbmQgZXhwci5oLiAgUmVtb3ZlIGV4dGVybiBwcm90b3R5cGUgZm9yCglgamF2YV9sYW5nX2V4cGFuZF9leHByJy4KCgkqIGxleC5jIChqYXZhX2xleF9lcnJvcik6IENvbnN0aWZ5IGEgY2hhciouCgkoamF2YV9nZXRfdW5pY29kZSwgamF2YV9yZWFkX2NoYXIsIGphdmFfYWxsb2NhdGVfbmV3X2xpbmUsCglqYXZhX3VuZ2V0X3VuaWNvZGUsIGphdmFfc25lYWtfdW5pY29kZSk6IFByb3RvdHlwZS4KCgkqIHBhcnNlLXNjYW4ueSAoY3VycmVudF9jbGFzcywgcGFja2FnZV9uYW1lLCBtZXRob2RfZGVjbGFyYXRvciwKCXJlcG9ydF9jbGFzc19kZWNsYXJhdGlvbiwgeXllcnJvcik6IENvbnN0aWZ5IGEgY2hhciouCgoJKiBwYXJzZS5oIChqYXZhX3JlcG9ydF9lcnJvcnMpOiBQcm90b3R5cGUuCgkoeXllcnJvcik6IENvbnN0aWZ5IGEgY2hhciouCgoJKiBwYXJzZS55IChjbGFzc2l0Zl9yZWRlZmluaXRpb25fZXJyb3IsIGNoZWNrX21vZGlmaWVycywKCXBhcnNlX2pkazFfMV9lcnJvciwgbG9va3VwX3BhY2thZ2VfdHlwZSwKCWxvb2t1cF9wYWNrYWdlX3R5cGVfYW5kX3NldF9uZXh0LCBnZXRfcHJpbnRhYmxlX21ldGhvZF9uYW1lLAoJcHVyaWZ5X3R5cGVfbmFtZSk6IENvbnN0aWZ5IGEgY2hhciouCgkoYnVpbGRfc3VwZXJfaW52b2NhdGlvbiwgbWF5YmVfZ2VuZXJhdGVfZmluaXQsCgl2ZXJpZnlfY29uc3RydWN0b3Jfc3VwZXIsIHBhcnNlcl9hZGRfaW50ZXJmYWNlLAoJYWRkX3N1cGVyaW50ZXJmYWNlcywgamRlcF9yZXNvbHZlX2NsYXNzLCBub3RlX3Bvc3NpYmxlX2NsYXNzbmFtZSwKCWphdmFfY29tcGxldGVfZXhwYW5kX21ldGhvZHMsIGphdmFfZXhwYW5kX2ZpbmFscywKCWN1dF9pZGVudGlmaWVyX2luX3F1YWxpZmllZCwgamF2YV9zdGFiaWxpemVfcmVmZXJlbmNlLAoJZG9fdW5hcnlfbnVtZXJpY19wcm9tb3Rpb24sIG9wZXJhdG9yX3N0cmluZywgZG9fbWVyZ2Vfc3RyaW5nX2NzdGUsCgltZXJnZV9zdHJpbmdfY3N0ZSk6IFByb3RvdHlwZS4KCShzaW5nbGVfdHlwZV9pbXBvcnRfZGVjbGFyYXRpb24sIHl5ZXJyb3IsCgl2YXJpYWJsZV9yZWRlZmluaXRpb25fZXJyb3IsIGJ1aWxkX2FycmF5X2Zyb21fbmFtZSwKCWJ1aWxkX3VucmVzb2x2ZWRfYXJyYXlfdHlwZSwgY2hlY2tfY2xhc3NfaW50ZXJmYWNlX2NyZWF0aW9uLAoJcmVzb2x2ZV9jbGFzcywgY29tcGxldGVfY2xhc3NfcmVwb3J0X2Vycm9ycywKCW5vdGVfcG9zc2libGVfY2xhc3NuYW1lLCByZWFkX2ltcG9ydF9kaXIsCglmaW5kX2luX2ltcG9ydHNfb25fZGVtYW5kLCByZXNvbHZlX3BhY2thZ2UsIGZpeF9jb25zdHJ1Y3RvcnMsCgljaGVja19kZXByZWNhdGlvbiwgbG9va3VwX21ldGhvZF9pbnZva2UsCgltYXliZV9idWlsZF9wcmltdHR5cGVfdHlwZV9yZWYsIGFycmF5X2NvbnN0cnVjdG9yX2NoZWNrX2VudHJ5KToKCUNvbnN0aWZ5IGEgY2hhciouCgkoamF2YV9jb21wbGV0ZV9leHBhbmRfbWV0aG9kcywgamF2YV9leHBhbmRfZmluYWxzKTogTWFrZSBzdGF0aWMuCgkoY29udmVydF9uYXJyb3cpOiBSZW1vdmUgc3RhdGljIHByb3RvdHlwZS4KClR1ZSBBdWcgIDMgMjA6MjE6MjAgMTk5OSAgSiJvcm4gUmVubmVja2UgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogTWFrZWZpbGUuaW4gKGRlY2wubyk6IERlcGVuZHMgb24gJChzcmNkaXIpLy4uL2RlZmF1bHRzLmguCgoxOTk5LTA4LTAyICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogZGVjbC5jOiBJbmNsdWRlIGRlZmF1bHRzLmggaW5zdGVhZCBvZiBleHByLmguCgkqIHBhcnNlLnk6IExpa2V3aXNlLgoKMTk5OS0wOC0wMiAgSmFrdWIgSmVsaW5layAgPGpqQHVsdHJhLmxpbnV4LmN6PgoKCSogamF2YS9kZWNsLmMgKHN0YXJ0X2phdmFfbWV0aG9kKTogQ2hhbmdlIGFsbCB1c2VzIG9mCglQUk9NT1RFX1BST1RPVFlQRVMsIHNvIHRoYXQgaXQgdGVzdHMgaXQgYXMgYSBDIGV4cHJlc3Npb24uCglFbnN1cmUgZXhwci5oIGlzIGluY2x1ZGVkLgoJKiBqYXZhL2V4cHIuYyAocG9wX2FyZ3VtZW50cyk6IERpdHRvLgoJKiBqYXZhL3BhcnNlLnkgKGV4cGFuZF9zdGFydF9qYXZhX21ldGhvZCk6IERpdHRvLgoKMTk5OS0wOC0wMSAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogTWFrZWZpbGUuaW4gKEFMTF9DRkxBR1MpOiBBZGQgJy1XIC1XYWxsJy4KCjE5OTktMDctMzEgIEJlcm5kIFNjaG1pZHQgIDxiZXJuZHNAY3lnbnVzLmNvLnVrPgoKCSogZGVjbC5jOiBJbmNsdWRlICJmdW5jdGlvbi5oIi4KCSogZXhjZXB0LmM6IExpa2V3aXNlLgoJKiBwYXJzZS55OiBMaWtld2lzZS4KCSogTWFrZWZpbGUuaW46IFVwZGF0ZSBkZXBlbmRlbmNpZXMuCgoxOTk5LTA3LTMwICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBleHByLmMgKGJ1aWxkX2phdmFfc29mdF9kaXZtb2QpOiBQcm92aWRlIGEgZGVmYXVsdCBjYXNlIGluIHN3aXRjaC4KCShqYXZhX2xhbmdfZXhwYW5kX2V4cHIpOiBNYXJrIHBhcmFtZXRlcnMgYHRhcmdldCcsIGB0bW9kZScgYW5kCglgbW9kaWZpZXInIHdpdGggQVRUUklCVVRFX1VOVVNFRC4KCgkqIGdqYXZhaC5jIChwcm9jZXNzX2ZpbGUpOiBBZGQgYnJhY2VzIGFyb3VuZCBhbWJpZ3VvdXMgYGVsc2UnLgoKCSogamNmLWR1bXAuYyAocHJpbnRfYWNjZXNzX2ZsYWdzLCBsb2NhbHZhcl9mcmVlKTogQ2hhbmdlIHJldHVybgoJdHlwZSB0byB2b2lkLgoKCSogcGFyc2UueSAoamF2YV9jb21wbGV0ZV9leHBhbmRfbWV0aG9kKTogSW5pdGlhbGl6ZSB2YXJpYWJsZQoJYGV4Y2VwdGlvbl9jb3B5Jy4KCShyZXNvbHZlX3F1YWxpZmllZF9leHByZXNzaW9uX25hbWUpOiBMaWtld2lzZSBmb3IgYGZpZWxkX2RlY2wnLgoJKHBhdGNoX21ldGhvZF9pbnZvY2F0aW9uKTogTGlrZXdpc2UgZm9yIGBjbGFzc190b19zZWFyY2gnLgoJKHF1YWxpZnlfYW1iaWd1b3VzX25hbWUpOiBMaWtld2lzZSBmb3IgYG5hbWUnIGFuZCBgcHRyX3R5cGUnLgoJKHBhdGNoX2Fzc2lnbm1lbnQpOiBMaWtld2lzZSBmb3IgYGxoc190eXBlJy4KCgkqIHZlcmlmeS5jICh2ZXJpZnlfanZtX2luc3RydWN0aW9ucyk6IFJlbW92ZSB1bnVzZWQgdmFyaWFibGUKCWBjYWxsZXInLgoKMTk5OS0wNy0yNSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAodmFfbGlzdF90eXBlX25vZGUpOiBOZXcuCgoxOTk5LTA3LTI1ICBBbnRob255IEdyZWVuICA8Z3JlZW5AY3lnbnVzLmNvbT4KCgkqIGdqYXZhaC5jIChwcmludF9zdHViKTogTmV3IGZ1bmN0aW9uLgoJKE1FVEhPRF9JU19OQVRJVkUpOiBOZXcgbWFjcm8uCgkocHJpbnRfbWFuZ2xlZF9jbGFzc25hbWUpOiBNYWtlIHN0YXRpYy4KCShIQU5ETEVfRU5EX0ZJRUxEKTogRG9uJ3QgZW1pdCBmaWVsZHMgZHVyaW5nIHN0dWIgZ2VuZXJhdGlvbi4KCShwcm9jZXNzX2ZpbGUpOiBQZXJmb3JtIHN0dWIgZ2VuZXJhdGlvbi4KCShIQU5ETEVfTUVUSE9EKTogRG9uJ3QgZW1pdCBjbGFzcyBkZWNscyBkdXJpbmcgc3R1YgoJZ2VuZXJhdGlvbi4KCShIQU5ETEVfRU5EX01FVEhPRCk6IFRha2UgaW50byBhY2NvdW50IHN0dWIgZ2VuZXJhdGlvbi4KCShwcmludF9tZXRob2RfaW5mbyk6IEhhbmRsZSBzdHViIGdlbmVyYXRpb24uCgkocHJpbnRfc3R1Yik6IE5ldyBmdW5jdGlvbi4KCShwcmludF9jeHhfY2xhc3NuYW1lKTogTWFrZSBzaWduYXR1cmUgY29uc2lzdGFudCB3aXRoIG90aGVycy4KCShoZWxwKTogRGVzY3JpYmUgLXN0dWJzIG9wdGlvbi4KCShtYWluKTogQ3JlYXRlIHN0dWIgZmlsZS4KCSh2ZXJzaW9uKTogVXNlIHZlcnNpb24uYy4KCShwcmludF9mdWxsX2N4eF9uYW1lKTogTmV3IGZ1bmN0aW9uLgoJKHByaW50X2NfZGVjbCk6IFVzZSBwcmludF9mdWxsX2N4eF9uYW1lLgoKVGh1IEp1bCAyMiAxMjo0MToxMiAxOTk5ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIGNoZWNrLWluaXQuYyAoY2hlY2tfaW5pdCk6IEhhbmRsZSBNQVhfRVhQUi4KCjE5OTktMDctMTUgIEFuZHJldyBIYWxleSAgPGFwaEBjeWdudXMuY29tPgoKCSogbGFuZy5jIChmbGFnX3VzZV9kaXZpZGVfc3Vicm91dGluZSk6IE5ldyB2YXJpYWJsZS4KCSogdHlwZWNrLmM6IChjb252ZXJ0X2llZWVfcmVhbF90b19pbnRlZ2VyKTogQm91bmRzIGNoZWNrCglmcC10by1pbnRlZ2VyIGNvbnZlcnNpb24uCgkoY29udmVydCk6IENhbGwgY29udmVydF9pZWVlX3JlYWxfdG9faW50ZWdlciB3aGVuIGZsYWdfZmFzdF9tYXRoCglpcyBub3Qgc2V0LgoKCSogZXhwci5jIChidWlsZF9qYXZhX3NvZnRfZGl2bW9kKTogTmV3IGZ1bmN0aW9uLgoJKGJ1aWxkX2phdmFfYmlub3ApOiBDYWxsIGJ1aWxkX2phdmFfc29mdF9kaXZtb2QgaWYKCWZsYWdfdXNlX2RpdmlkZV9zdWJyb3V0aW5lIGlzIHNldC4KCSogZGVjbC5jOiBzb2Z0X2lkaXZfbm9kZSwgc29mdF9pcmVtX25vZGUsIHNvZnRfbGRpdl9ub2RlLCB0cmVlCglzb2Z0X2xyZW1fbm9kZTogbmV3IGJ1aWx0aW4gZnVuY3Rpb25zLgoJKGluaXRfZGVjbF9wcm9jZXNzaW5nKSBJbml0aWFsaXplIHRoZSBuZXcgYnVpbHRpbnMuCgkqIGphdmEtdHJlZS5oIHNvZnRfaWRpdl9ub2RlLCBzb2Z0X2lyZW1fbm9kZSwgc29mdF9sZGl2X25vZGUsIHRyZWUKCXNvZnRfbHJlbV9ub2RlOiBuZXcgYnVpbHRpbiBmdW5jdGlvbnMuCgkoYnVpbGRfamF2YV9zb2Z0X2Rpdm1vZCk6IE5ldyBmdW5jdGlvbi4KCSogcGFyc2UueTogQ2FsbCBidWlsZF9qYXZhX3NvZnRfZGl2bW9kIGlmCglmbGFnX3VzZV9kaXZpZGVfc3Vicm91dGluZSBpcyBzZXQuCgkqIHBhcnNlLmM6IFJlYnVpbHQuCgoJKiBqdnNwZWMuYyAobGFuZ19zcGVjaWZpY19kcml2ZXIpOiBBbHdheXMgYWxsb3cgYW4gZXh0cmEgYXJnIChmb3IKCWEgLS1zcGVjcz0gYXJnKSBldmVuIGlmIG5vdCBsaW5raW5nLgoJKiBsYW5nLW9wdGlvbnMuaCAoREVGSU5FX0xBTkdfTkFNRSAoIkphdmEiKSk6IEFkZAoJLWZ1c2UtZGl2aWRlLXN1YnJvdXRpbmUKClR1ZSBKdWwgMjAgMTM6MjA6MDUgMTk5OSAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBwYXJzZS55IChyZXNvbHZlX2FuZF9sYXlvdXQpOiBDaGVjayBtZXRob2RzIG9ubHkgb25jZS4KCShyZXNvbHZlX3F1YWxpZmllZF9leHByZXNzaW9uX25hbWUpOiBWZXJpZnkgdGhyb3duIGV4Y2VwdGlvbnMKCWNvbXBhdGliaWxpdHkuCgkoY2hlY2tfdGhyb3duX2V4Y2VwdGlvbnMpOiBSZWplY3QgZXhjZXB0aW9ucyB0aHJvd24gaW4KCWluaXRpYWxpemVyLiBFcnJvciBtZXNzYWdlIHR1bmVkLgoKMTk5OS0wNy0xNCAgQW5kcmV3IEhhbGV5ICA8YXBoQGN5Z251cy5jb20+CgoJKiBleHByLmMgKGV4cGFuZF9leHByKTogRG8gbm90IHJldHVybiB0aGUgbGFzdCBzdGF0ZW1lbnQgaW4gYQoJYmxvY2sgYXMgdGhlIGJsb2NrJ3MgdmFsdWUuCgpTYXQgSnVsICAzIDIyOjI2OjMyIDE5OTkgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogZXhwci5jIChmb3JjZV9ldmFsdWF0aW9uX29yZGVyKTogU2F2ZSB0aGUgQ09NUE9VTkRfRVhQUidlZAoJQ0FMTF9FWFBSLCB0byBhdm9pZCBvcmRlciBvZiBldmFsdWF0aW9uIGNoYW5nZXMuCgpGcmkgSnVsICAyIDE3OjQ0OjA4IDE5OTkgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogcGFyc2UueSAocXVhbGlmeV9hbWJpZ3VvdXNfbmFtZSk6IERvIG5vdCB1c2UKCUlERU5USUZJRVJfTE9DQUxfVkFMVUUgd2hlbiBuYW1lIGlzIGEgU1RSSU5HX0NTVC4KClRodSBKdWwgIDEgMjM6MzE6MTYgMTk5OSAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBjaGVjay1pbml0LmMgKGNoZWNrX2luaXQpOiBIYW5kbGUgTUFYX0VYUFIuCgkqIGV4cHIuYyAoZm9yY2VfZXZhbHVhdGlvbl9vcmRlcik6IEZvcmNlIG1ldGhvZCBjYWxsIGFyZ3VtZW50cyB0bwoJYmUgZXZhbHVhdGVkIGluIGxlZnQtdG8tcmlnaHQgb3JkZXIuCgkqIHBhcnNlLnkgKHF1YWxpZnlfYW1iaWd1b3VzX25hbWUpOiBMb29wIGFnYWluIHRvIHF1YWxpZnkKCU5FV19BUlJBWV9FWFBSIHByb3Blcmx5LgoKV2VkIEp1biAzMCAxNzoyNzo1OCAxOTk5ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnkgKHBhdGNoX2ludm9rZSk6IFJlc29sdmUgdW5yZXNvbHZlZCBpbnZva2VkIG1ldGhvZAoJcmV0dXJuZWQgdHlwZS4KCShxdWFsaWZ5X2FtYmlndW91c19uYW1lKTogU1RSSU5HX0NTVCB0byBxdWFsaWZ5IGV4cHJlc3Npb24gZm9yCgl0eXBlIG5hbWUgcmVzb2x1dGlvbi4KCjE5OTktMDYtMjQgIEFuZHJldyBIYWxleSAgPGFwaEBjeWdudXMuY29tPgoKCSogY2xhc3MuYyAoZmluaXNoX2NsYXNzKTogV2hlbmV2ZXIgYSBkZWZlcnJlZCBtZXRob2QgaXMKCW91dHB1dCwgcmVzY2FuIHRoZSBsaXN0IG9mIG1ldGhvZHMgdG8gc2VlIGlmIGEgbmV3IGNhbmRpZGF0ZSBmb3IKCW91dHB1dCBjYW4gYmUgZm91bmQuCgoxOTk5LTA2LTI4ICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CgoJKiBqdnNwZWMuYyAobGFuZ19zcGVjaWZpY19kcml2ZXIpOiBSZWNvZ25pemUgLS1oZWxwLgoKRnJpIEp1biAyNSAxMzozNToxOSAxOTk5ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnkgKHJlc29sdmVfcGFja2FnZSk6IEZpeGVkIGJvZ3VzIHJldHVybiBzdGF0ZW1lbnQuCgkocGF0Y2hfbWV0aG9kX2ludm9jYXRpb24pOiBSZXNvbHZlIG1ldGhvZCBpbnZvY2F0aW9uIGJlZ2lubmluZyB3aXRoCglhIHBhY2thZ2UgbmFtZSBxdWFsaWZpZXIuCgoxOTk5LTA2LTI1ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBNYWtlLWxhbmcuaW4gKGphdmEuc3RhZ2UxKTogRGVwZW5kIG9uIHN0YWdlMS1zdGFydC4KCShqYXZhLnN0YWdlMik6IExpa2V3aXNlIGZvciBzdGFnZTItc3RhcnQuCgkoamF2YS5zdGFnZTMpOiBMaWtld2lzZSBmb3Igc3RhZ2UzLXN0YXJ0LgoJKGphdmEuc3RhZ2U0KTogTGlrZXdpc2UgZm9yIHN0YWdlNC1zdGFydC4KClRodSBKdW4gMjQgMTM6MTI6MTUgMTk5OSAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBwYXJzZS55IChqYXZhX2NvbXBsZXRlX2xocyk6IFdoZW4gZG9pbmcgY3Jvc3MgcmVmZXJlbmNpbmcsIGRvbid0Cgl0cnkgdG8ga2VlcCBmaWxlIGxvY2F0aW9uIG9uIGEgV0ZMIGV4cGFuZGVkIGFzIGEgQ0FMTF9FWFBSLgoKV2VkIEp1biAyMyAxNDozNzoxNSAxOTk5ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnkgKGZpbmlzaF9tZXRob2RfZGVjbGFyYXRpb24pOiBJbnNlcnQgYSBSRVRVUk5fRVhQUiB3aGVuCgljb21waWxpbmcgdG8gY2xhc3MgZmlsZSBhIHZvaWQgbWV0aG9kIHdpdGggYW4gZW1wdHkgbWV0aG9kIGJvZHkuCglBcyBhIHNpZGUgZWZmZWN0LCB0aGUgYnl0ZWNvZGUgYmFja2VuZCB3aWxsIGdlbmVyYXRlIHRoZQoJYXBwcm9wcmlhdGUgYHJldHVybicgaW5zdHJ1Y3Rpb24uCgpUdWUgSnVuIDIyIDIwOjQzOjQ5IDE5OTkgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogcGFyc2UueSAobG9va3VwX3BhY2thZ2VfdHlwZV9hbmRfc2V0X25leHQpOiBOZXcgZnVuY3Rpb24gcHJvdG90eXBlLgoJKHJlc29sdmVfcGFja2FnZSk6IFNlYXJjaCBjdXJyZW50IGFuZCBpbXBvcnRlZCBwYWNrYWdlcy4KCShsb29rdXBfcGFja2FnZV90eXBlX2FuZF9zZXRfbmV4dCk6IE5ldyBmdW5jdGlvbi4KCjE5OTktMDYtMjIgIEFuZHJldyBIYWxleSAgPGFwaEBjeWdudXMuY29tPgoKCSogdmVyaWZ5LmMgKHZlcmlmeV9qdm1faW5zdHJ1Y3Rpb25zKTogQ2hlY2sgZm9yIHBlbmRpbmcgYmxvY2tzCgliZWZvcmUgaW52YWxpZCBQQyB0ZXN0IGFuZCBvcGNvZGUgc3dpdGNoLCBub3QgYWZ0ZXIuCgoxOTk5LTA2LTIxICBBbmRyZXcgSGFsZXkgIDxhcGhAY3lnbnVzLmNvbT4KCgkqIGV4Y2VwdC5jIChmaW5kX2hhbmRsZXJfaW5fcmFuZ2UpOiBUaGUgdXBwZXIgbGltaXQgZm9yIGV4Y2VwdGlvbgoJcmFuZ2VzIGlzIGV4Y2x1c2l2ZSwgbm90IGluY2x1c2l2ZTogKHN0YXJ0IDw9IHBjIDwgZW5kKS4KCShsaW5rX2hhbmRsZXIpOiBmaW5kIGNoaWxkIHBvaW50ZXIgd2hpY2ggcG9pbnRzIHRvIG91dGVyIGJ5CglzZWFyY2hpbmcgc2libGluZyBsaXN0OiBwcmV2aW91cyBjb2RlIGluY29ycmVjdGx5IGFzc3VtZWQgdGhhdAoJb3V0ZXItPm91dGVyLT5maXJzdF9jaGlsZCBtdXN0IHBvaW50IHRvIG91dGVyLgoJKiB2ZXJpZnkuYyAodmVyaWZ5X2p2bV9pbnN0cnVjdGlvbnMpOiBGSVhNRSBhZGRlZCB0byBjb2RlIGZvcgoJYGF0aHJvdycuCgkodmVyaWZ5X2p2bV9pbnN0cnVjdGlvbnMpOiBEbyBub3QgYXNzdW1lIHRoYXQgdGhlIGxhc3QgYmxvY2sKCXByb2Nlc3NlZCBpbiBhIHN1YnJvdXRpbmUgaXMgYSBibG9jayB3aGljaCBlbmRzIHdpdGggYSBgcmV0JwoJaW5zdHJ1Y3Rpb24uICBXaXRoIHNvbWUgY29udHJvbCBmbG93cyBpdCBpcyBwb3NzaWJsZSB0aGF0IHRoZSBsYXN0CglibG9jayBlbmRzIHdpdGggYW4gYGF0aHJvdycuCgpNb24gSnVuIDE0IDEzOjEzOjM5IDE5OTkgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogcGFyc2UueSAocXVhbGlmeV9hbWJpZ3VvdXNfbmFtZSk6IFJlb3JnYW5pemVkIHRoZSBwb3N0CglldmFsdWF0aW9uIG9mIG5vbiBXRkwgbGVhZGluZyBleHByZXNzaW9uIG5vZGVzLgoKRnJpIEp1biAxMSAyMTozNzoxOCAxOTk5ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnkgKHF1YWxpZnlfYW1iaWd1b3VzX25hbWUpOiBIYW5kbGUgQVJSQVlfUkVGIGFmdGVyCglDT05WRVJUX0VYUFIuCgpUaHUgSnVuIDEwIDIyOjI2OjE3IDE5OTkgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogcGFyc2UueSAocXVhbGlmeV9hbWJpZ3VvdXNfbmFtZSk6IEhhbmRsZSBxdWFsaWZpZWQgZXhwcmVzc2lvbgoJYmVnaW5uaW5nIHdpdGggYSBTVFJJTkdfQ1NULgoKVGh1IEp1biAxMCAyMDoyNzoyNSAxOTk5ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnkgKHJlZ2lzdGVyX2ZpZWxkcyk6IFNldCBERUNMX0lOSVRJQUwgb24gYm90aAoJcHJlLWluaXRpYWxpemVkIHN0YXRpYyBhbmQgcHVibGljIGZpZWxkcy4KCShyZXNvbHZlX2ZpZWxkX2FjY2Vzcyk6IFN0YXRpYyBmaWVsZCBhY2Nlc3MgZXhwcmVzc2lvbnMgdG8gYWx3YXlzCgl1c2UgcG9pbnRlciB0eXBlcy4KCShxdWFsaWZ5X2FtYmlndW91c19uYW1lKTogV29yayBvdXQgYnVyaWVkIENBTExfRVhQUiBmb3IgcHJvcGVyCglxdWFsaWZpY2F0aW9uLiBDT05WRVJUX0VYUFIgdG8gYmUgcmVzb2x2ZWQgYXMgYW4gZXhwcmVzc2lvbiBuYW1lLgoJKGphdmFfY29tcGxldGVfbGhzKTogSWRlbnRpZnkgYW5kIGFjY2VzcyBxdWFsaWZpZWQgZmluYWwKCWluaXRpYWxpemVkIGZpZWxkIGluIHN3aXRjaCBzdGF0ZW1lbnQgY2FzZSBleHByZXNzaW9uLgoJKGZvbGRfY29uc3RhbnRfZm9yX2luaXQpOiBQcmUtaW5pdGlhbGl6ZWQgZmllbGQgZGVjbCBjb25zdGFudCB0bwoJYmUgZm9sZGVkLgoKTW9uIEp1biAgNyAxNjowOTo1MSAxOTk5ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnkgKG5vdGVfcG9zc2libGVfY2xhc3NuYW1lKTogTWFyayByZXR1cm5lZCBub2RlIHdpdGgKCVFVQUxJRklFRF9QIG9ubHkgaWYgdGhlIG9yaWdpbmFsIGNsYXNzIG5hbWUgY29udGFpbmVkIGEgJy8nLgoKU2F0IEp1biAgNSAxMTo0Njo1OSAxOTk5ICBBbnRob255IEdyZWVuICA8Z3JlZW5AY3lnbnVzLmNvbT4KCgkqIE1ha2UtbGFuZy5pbiAoZ2NqaCk6IE1vcmUgcGFyYWxsZWwgYnVpbGQgZml4ZXMuCgoxOTk5LTA2LTAzICBNaWtlIFN0dW1wICA8bXJzQHdycy5jb20+CgoJKiBNYWtlLWxhbmcuaW4gKEpDRl9EVU1QX1NPVVJDRVMsIGp2Z2VubWFpbik6IEZpeCBwYXJhbGxlbCBidWlsZHMuCgpXZWQgSnVuICAyIDEwOjQ0OjM4IDE5OTkgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBjeWdudXMuY29tPgoKCSogZXhjZXB0LmMgKGxpbmtfaGFuZGxlcik6IENoYWluIGV4Y2VwdGlvbiBoYW5kbGVycyBpbiBvcmRlci4KCldlZCBKdW4gIDIgMTA6NDE6MjQgMTk5OSAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQGN5Z251cy5jb20+CgoJKiBleHByLmMgKGV4cGFuZF9ieXRlX2NvZGUpOiBGaWxsIHVucmVhY2hhYmxlIGJ5dGVjb2RlIHJlZ2lvbnMKCXdpdGggbm9wcyBhbmQgcHJvY2VzcyBhcyB1c3VhbCBpbiBvcmRlciB0byBhbHdheXMgc2V0IGNvcnJlY3QgRUgKCXJhbmdlcy4gIEVtaXQgZGV0YWlsZWQgd2FybmluZ3MgYWJvdXQgdW5yZWFjaGFibGUgYnl0ZWNvZGVzLgoKV2VkIEp1biAgMiAxMDozNToxMyAxOTk5ICBBbnRob255IEdyZWVuICA8Z3JlZW5AY3lnbnVzLmNvbT4KCgkqIGNsYXNzLmMgKGJ1aWxkX3V0ZjhfcmVmKTogTWFyayBjaW5pdCBhbmQgdXRmOCB0cmVlIG5vZGVzIGFzCgljb25zdGFudC4KCkZyaSBNYXkgMjggMTg6MjI6NDUgMTk5OSAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBwYXJzZS55IChsb29rdXBfZmllbGRfd3JhcHBlcik6IFVuaWZpZWQgcmV0dXJuZWQgdmFsdWUgdG8gTlVMTAoJICBvciB0aGUgc2VhcmNoZWQgZmllbGQgZGVjbC4KCkZyaSBNYXkgMjggMTE6MzQ6MDUgMTk5OSAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBwYXJzZS55IChmb2xkX2NvbnN0YW50X2Zvcl9pbml0KTogQ29udmVydCBudW1lcmljYWwgY29uc3RhbnQKCXZhbHVlcyB0byB0aGUgdHlwZSBvZiB0aGUgYXNzaWduZWQgZmllbGQuCgpUaHUgTWF5IDI3IDE5OjU3OjQwIDE5OTkgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogZXhwci5jIChsb29rdXBfZmllbGQpOiBSZWxheGVkIHRoZSB0ZXN0IG9uIGNsYXNzIGxvYWRpbmcgZXJyb3IKCWRldGVjdGlvbi4KCSogcGFyc2UueSAoZm9sZF9jb25zdGFudF9mb3JfaW5pdCk6IEVuYWJlbGVkIG9sZCBjb2RlLgoKV2VkIE1heSAyNiAxODowNjowMiAxOTk5ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnkgKHZhbGlkX3JlZl9hc3NpZ25jb252X2Nhc3RfcCk6IExldCBgX0p2X0NoZWNrQ2FzdCcKCWRlY2lkZSB0aGUgdmFsaWRpdHkgb2YgdGhlIGNhc3Qgb2YgYSBqYXZhLmxhbmcuQ2xvbmVhYmxlIHJlZmVyZW5jZQoJdG8gYW4gYXJyYXkuCgkocGF0Y2hfY29uZGl0aW9uYWxfZXhwcik6IEZpeGVkIGZpcnN0IGFyZ3VtZW50IHBhc3NlZCB0bwoJYmluYXJ5X251bWVyaWNfcHJvbW90aW9uLgoKV2VkIE1heSAyNiAxNTozMzowNiAxOTk5ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnkgKHF1YWxpZnlfYW1iaWd1b3VzX25hbWUpOiBUYWtlIGludG8gYWNjb3VudCB0aGF0IGEKCUNPTlZFUlRfRVhQUiBtaWdodCBzcGVjaWZ5IGEgdHlwZSBhcyBhIFdGTC4KClR1ZSBNYXkgMjUgMTU6MDY6MTMgMTk5OSAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBwYXJzZS55IChwYXRjaF9hc3NpZ25tZW50KTogU2F2ZSB0aGUgcmhzIGJlZm9yZSB1c2luZyBpdCBhcyBhbgoJYXJndW1lbnQgdG8gX0p2X0NoZWNrQXJyYXlTdG9yZS4KClR1ZSBNYXkgMjUgMTE6MjM6NTkgMTk5OSAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBsZXguYyAoamF2YV9wYXJzZV9kb2Nfc2VjdGlvbik6IEZpeGVkIGB0YWcnIGJ1ZmZlciBzaXplLgoKTW9uIE1heSAyNCAxMzoyNjowMCAxOTk5ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIGxleC5jIChqYXZhX2xleCk6IEFjY2VwdHMgYCsnIG9yIGAtJyBhZnRlciB0aGUgYmVnaW5uaW5nIG9mIGEKCWZsb2F0aW5nIHBvaW50IGxpdHRlcmFsIG9ubHkgd2hlbiB0aGUgZXhwb25lbnQgaW5kaWNhdG9yIGhhcyBiZWVuCglwYXJzZWQuCgpTYXQgTWF5IDIyIDEzOjU0OjQxIDE5OTkgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogcGFyc2UueSAoZm9ybWFsX3BhcmFtZXRlcjopOiBDb25zdHJ1Y3QgYXJndW1lbnQgdHJlZSBsaXN0CgllbGVtZW50IGV2ZW4gaWYgYSB5ZXQgdW5zdXBwb3J0ZWQgZmluYWwgcGFyYW1ldGVyIHdhcyBlbmNvdW50ZXJlZC4KClR1ZSBNYXkgMTggMDA6Mjg6NTggMTk5OSAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBwYXJzZS55IChmaW5pc2hfbWV0aG9kX2RlY2xhcmF0aW9uKTogSXNzdWUgZXJyb3JzIGZvciBuYXRpdmUgb3IKCWFic3RyYWN0IG1ldGhvZHMgZGVjbGFyZWQgd2l0aCBhIG1ldGhvZCBib2R5LCBhcyB3ZWxsIGFzIGZvciBub24KCW5hdGl2ZSBvciBub24gYWJzdHJhY3QgbWV0aG9kcyB3aXRoIG5vIG1ldGhvZCBib2R5LgoKMTk5OS0wNS0xOSAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogY2xhc3MuYyAoYnVpbGRfdXRmOF9yZWYpOiBJbml0aWFsaXplIHZhcmlhYmxlIGBmaWVsZCcuCgoJKiBkZWNsLmMgKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogSW5pdGlhbGl6ZSB2YXJpYWJsZSBgZmllbGQnLgoKCSogZXhwci5jIChidWlsZF9rbm93bl9tZXRob2RfcmVmKTogTWFyayBwYXJhbWV0ZXJzIGBtZXRob2RfdHlwZScsCglgbWV0aG9kX3NpZ25hdHVyZScgYW5kIGBhcmdfbGlzdCcgd2l0aCBBVFRSSUJVVEVfVU5VU0VELgoJKHByb2Nlc3NfanZtX2luc3RydWN0aW9uKTogTGlrZXdpc2UgZm9yIHBhcmFtZXRlciBgbGVuZ3RoJy4KCgkqIGp2c3BlYy5jIChsYW5nX3NwZWNpZmljX2RyaXZlcik6IE1hcmsgdmFyaWFibGVzIGBzYXdfbWF0aCcsCglgc2F3X2xpYmMnLCBgc2F3X2djJywgYHNhd190aHJlYWRsaWInIGFuZCBgc2F3X2xpYmdjaicgd2l0aAoJQVRUUklCVVRFX1VOVVNFRC4KCgkqIHBhcnNlLnkgKG1heWJlX2dlbmVyYXRlX2NsaW5pdCk6IFJlbW92ZSB1bnVzZWQgdmFyaWFibGUKCWBoYXNfbm9uX3ByaW1pdGl2ZV9maWVsZHMnLgoJKGZpbmRfaW5faW1wb3J0c19vbl9kZW1hbmQpOiBJbml0aWFsaXplIHZhcmlhYmxlcyBgbm9kZV90b191c2UnCglhbmQgYGNsJy4KCShwYXRjaF9iaW5vcCk6IExpa2V3aXNlIGZvciB2YXJpYWJsZSBgcHJvbV90eXBlJy4KCShwYXRjaF91bmFyeW9wKTogTGlrZXdpc2UgZm9yIHZhcmlhYmxlIGBwcm9tX3R5cGUnLgoKCSogdmVyaWZ5LmMgKHZlcmlmeV9qdm1faW5zdHJ1Y3Rpb25zKTogTGlrZXdpc2UgZm9yIHZhcmlhYmxlIGBsYXN0Jy4KCgkqIHhyZWYuYyAoeHJlZl90YWJsZSk6IEFkZCBtaXNzaW5nIGluaXRpYWxpemVyLgoKMTk5OS0wNS0xNCAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgoKCSogamF2YS1leGNlcHQuaCAoc3RydWN0IGVoX3JhbmdlKTogUmVtb3ZlZCB1bnVzZWQgYG5leHQnIG1lbWJlci4KCSogdmVyaWZ5LmMgKHZlcmlmeV9qdm1faW5zdHJ1Y3Rpb25zKTogQ2FsbCBjaGVja19uZXN0ZWRfcmFuZ2VzCglhZnRlciBhZGRpbmcgYWxsIGV4Y2VwdGlvbiBoYW5kbGVycy4gIFNvcnQgZXhjZXB0aW9uIHJhbmdlcyBpbgoJb3JkZXIgb2Ygc3RhcnQgUEMuCgkoc3RydWN0IHBjX2luZGV4KTogTmV3IHN0cnVjdHVyZS4KCShzdGFydF9wY19jbXApOiBOZXcgZnVuY3Rpb24uCgkqIGV4Y2VwdC5jIChhZGRfaGFuZGxlcik6IFJldHVybiBgdm9pZCcuICBEb24ndCBjYWxsIGxpbmtfaGFuZGxlcjsKCWluc3RlYWQgY29uc3RydWN0IGFuIG9yZGluYXJ5IGxpbmtlZCBsaXN0IGFuZCBkbyByYW5nZQoJY29hbGVzY2luZy4KCShjaGVja19uZXN0ZWRfcmFuZ2VzKTogTmV3IGZ1bmN0aW9uLgoJKGxpbmtfaGFuZGxlcik6IENoYW5nZWQgaW50ZXJmYWNlIHRvIGFsbG93IG1lcmdpbmcgb2YgZWhfcmFuZ2VzLgoJU3BsaXQgb3ZlcmxhcHBpbmcgcmFuZ2VzLiAgUmV0dXJuIGB2b2lkJy4KCk1vbiBNYXkgMTcgMTk6MjA6MjQgMTk5OSAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBwYXJzZS55IChjb25zdHJ1Y3Rvcl9ibG9ja19lbmQ6KTogTmV3IHJ1bGUsIHRhZ2dlZCA8bm9kZT4uCgkoY29uc3RydWN0b3JfYm9keTopOiBVc2UgYGNvbnN0cnVjdG9yX2Jsb2NrX2VuZCcgaW5zdGVhZCBvZgoJYGJsb2NrX2VuZCcuCgpNb24gTWF5IDE3IDE4OjAxOjQwIDE5OTkgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogcGFyc2UueSAoc3RhdGVtZW50X25zaTopOiBQb3AgYGZvcicgc3RhdGVtZW50IGJsb2NrLgoJKGphdmFfY29tcGxldGVfbGhzKTogTGFiZWxlZCBibG9ja3MgY29udGFpbmluZyBubyBzdGF0ZW1lbnQgYXJlCgltYXJrZWQgYXMgY29tcGxldGluZyBub3JtYWxseS4KCkZyaSBNYXkgMTQgMTI6MzE6MDggMTk5OSAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiB4cmVmLmMgKHhyZWZfc2V0X2N1cnJlbnRfZnApOiBOZXcgZnVuY3Rpb24sIGRlZmluZWQuCgkqIHhyZWYuaCAoeHJlZl9zZXRfY3VycmVudF9mcCk6IE5ldyBmdW5jdGlvbiwgcHJvdG90eXBlZC4KCkZyaSBNYXkgMTQgMTE6NTc6NTQgMTk5OSAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBjaGVjay1pbml0LmMgKGNoZWNrX2luaXQpOiBUYWtlIGludG8gYWNjb3VudCB0aGF0CglMQUJFTEVEX0JMT0NLX1NUTVQgY2FuIGJlIGVtcHR5LgoKVGh1IE1heSAxMyAxODozMDo0OCAxOTk5ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnkgKGphdmFfY2hlY2tfcmVndWxhcl9tZXRob2RzKTogV2FybmluZyBjaGVjayBvbiBub3QKCW92ZXJyaWRpbmcgbWV0aG9kcyB3aXRoIGRlZmF1bHQgYWNjZXNzIGluIG90aGVyIHBhY2thZ2VzIGRvZXMgbm90CglhcHBseSB0byBgPGNsaW5pdD4nLgoJKGphdmFfY29tcGxldGVfbGhzKTogSWYgYmxvY2sgYm9keSBpcyBhbiBlbXB0eV9zdG10X25vZGUsIHJlcGxhY2UKCWl0IGJ5IE5VTExfVFJFRS4gVGhpcyBwcmV2ZW50cyBnY2MgZnJvbSBnZW5lcmF0aW5nIGFuIGlycmVsZXZhbnQKCXdhcm5pbmcuCgpUaHUgTWF5IDEzIDEzOjIzOjM4IDE5OTkgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogY2hlY2staW5pdC5jIChjaGVja19pbml0KTogUmVtb3ZlZCBjb2RlIGFjY2VwdGluZyB0byBzZWUgdGhpbmdzCglmYWxsaW5nIHRocm91Z2ggZGVmYXVsdDosIHdoZW4gZG9pbmcgeHJlZnMuCgkqIGphdmEtdHJlZS5oIChkb19ub3RfZm9sZCk6IE5ldyBnbG9iYWwgdmFyaWFibGUsIGRlY2xhcmVkLgoJKiBwYXJzZS55IChkb19ub3RfZm9sZCk6IE5ldyBnbG9iYWwgdmFyaWFibGUsIGRlZmluZWQuCgkoamF2YV9jb21wbGV0ZV9leHBhbmRfbWV0aG9kKTogU2V0IGBkb19ub3RfZm9sZCcgdG8gdGhlIHZhbHVlIG9mCglgZmxhZ19lbWl0X3hyZWYnLiBXaGVuIGRvaW5nIHhyZWZzOiBjb3B5IHRoZSB0aHJvd24gZXhjZXB0aW9ucywKCWFuZCByZWluc3RhbGwgdGhlbSBhZnRlciB0aGVtIGhhdmUgYmVlbiBwdXJnZWQ7IGRvIG5vdCBjaGVjayBmb3IKCWluaXRpYWxpemF0aW9uczsgZG8gbm90IGlzc3VlIG1pc3NpbmcgcmV0dXJuIGVycm9ycy4KCShqYXZhX2NvbXBsZXRlX2xocyk6IERvIG5vdCBhdHRlbXB0IHRvIHBhdGNoIElOU1RBTkNFT0ZfRVhQUiBub2RlcwoJd2hlbiBkb2luZyB4cmVmcy4KCShwYXRjaF9iaW5vcCk6IFNraXAgdGhlIGZvbGQgcGFydCB3aGVuIGRvaW5nIHhyZWZzLgoJKGJ1aWxkX3N0cmluZ19jb25jYXRlbmF0aW9uKTogU2tpcCB0aGUgY29uY2F0ZW5hdGlvbiBwYXJ0IHdoZW4KCWRvaW5nIHhyZWZzLgoJKHBhdGNoX3N5bmNocm9uaXplZF9zdGF0ZW1lbnQpOiBEbyBub3QgZ2VuZXJhdGUgYSB0cnktZmluYWxseSB3aGVuCglkb2luZyB4cmVmcy4KCShwYXRjaF90aHJvd19zdGF0ZW1lbnQpOiBXaGVuIGRvaW5nIHhyZWZzLCBkbyBub3QgY2FsbCBCVUlMRF9USFJPVwoJYW5kIGtlZXAgdGhlIGxvY2F0aW9uIHdoZXJlIHRoZSB0aHJvdyB3YXMgc2Vlbi4KCSogdHlwZWNrLmMgKGNvbnZlcnQpOiBXaGVuIGBkb19ub3RfZm9sZCcgaXMgc2V0LCBkbyBub3QgYXR0ZW1wdAoJYW55IHRyZWF0bWVudCBvbiB0aGUgY29udmVydGVkIG5vZGUgYW4gc2ltcGx5IHJldHVybiBhIE5PUF9FWFBSIG9mCgl0aGUgdGFyZ2V0ZWQgdHlwZS4KCSogeHJlZi5jICh4cmVmX2dldF9kYXRhKTogTmV3IGZ1bmN0aW9uLCBkZWZpbmVkLgoJKiB4cmVmLmggKHhyZWZfZ2V0X2RhdGEpOiBOZXcgZnVuY3Rpb24sIGRlY2xhcmVkLgoJKFhSRUZfR0VUX0RBVEEpOiBVc2UgeHJlZl9nZXRfZGF0YS4KCjE5OTktMDUtMTMgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGdqYXZhaC5jIChwcmludF9pbmNsdWRlKTogQ2FzdCB0aGUgcmVzdWx0IG9mIGBzdHJsZW4nIHRvIGludAoJd2hlbiBjb21wYXJpbmcgYWdhaW5zdCBhIHNpZ25lZCB2YWx1ZS4KCShhZGRfbmFtZWxldCk6IExpa2V3aXNlLgoKMTk5OS0wNS0xMiAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogZXhwci5jIChleHBhbmRfaW52b2tlKTogTWFyayBwYXJhbWV0ZXIgYG5hcmdzJyB3aXRoCglBVFRSSUJVVEVfVU5VU0VELgoJKFBSRV9MT09LVVBfU1dJVENIKTogTGlrZXdpc2UgZm9yIHZhcmlhYmxlIGBtYXRjaCcuCgoJKiBqY2YtaW8uYyAoamNmX3VuZXhwZWN0ZWRfZW9mKTogTWFyayBwYXJhbWV0ZXIgYGNvdW50JyB3aXRoCglBVFRSSUJVVEVfVU5VU0VELgoKCSogamNmLXJlYWRlci5jIChnZXRfYXR0cmlidXRlKTogQ2FzdCBhIHZhbHVlIHRvIGxvbmcKCXdoZW4gY29tcGFyaW5nIGFnYWluc3QgYSBzaWduZWQgZXhwcmVzc2lvbi4gIExpa2V3aXNlLgoKCSogbGV4Lmg6IE5ldmVyIGRlZmluZSBIT1NUX1dJREVfSU5ULCBIT1NUX0JJVFNfUEVSX1dJREVfSU5UIG9yCglIT1NUX0JJVFNfUEVSX0NIQVIuCgoxOTk5LTA1LTExICBBbmRyZXcgSGFsZXkgIDxhcGhAY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnkgKHNvdXJjZV9lbmRfamF2YV9tZXRob2QpOiBJZiB0aGUgY3VycmVudCBtZXRob2QgY29udGFpbnMKCWFueSBleGNlcHRpb24gaGFuZGxlcnMsIGZvcmNlIGFzeW5jaHJvbm91c19leGNlcHRpb25zOiB0aGlzIGlzCgluZWNlc3NhcnkgYmVjYXVzZSBzaWduYWwgaGFuZGxlcnMgaW4gbGliamF2YSBtYXkgdGhyb3cgZXhjZXB0aW9ucy4KCSogZGVjbC5jIChlbmRfamF2YV9tZXRob2QpOiBEaXR0by4KCjE5OTktMDUtMTEgIFRvbSBUcm9tZXkgIDx0cm9tZXlAY3lnbnVzLmNvbT4KCgkqIE1ha2UtbGFuZy5pbiAoanZzcGVjLm8pOiBEb24ndCBkZWZpbmUgV0lUSF9USFJFQURfeCBvciBXSVRIX0dDX3gKCWZsYWdzLgoJKiBqdnNwZWMuYyAoVEhSRUFEX05BTUUpOiBSZW1vdmVkLgoJKEdDX05BTUUpOiBMaWtld2lzZS4KCShNQVRITElCKTogTGlrZXdpc2UuCgkoV0lUSExJQkMpOiBMaWtld2lzZS4KCShHQ0xJQik6IExpa2V3aXNlLgoJKFRIUkVBRExJQik6IExpa2V3aXNlLgoJKE1BVEhfTElCUkFSWSk6IExpa2V3aXNlLgoJKGxhbmdfc3BlY2lmaWNfZHJpdmVyKTogRG9uJ3QgYWRkIGAtbCcgb3B0aW9ucyB0byBjb21tYW5kIGxpbmUuCglJbnN0ZWFkLCBhZGQgYSBzaW5nbGUgLS1zcGVjcyBvcHRpb24uICBSZWNvZ25pemUgYC1MJyBvcHRpb25zIGFuZAoJdXNlIHRoZW0gdG8gc2VhcmNoIGZvciBzcGVjIGZpbGUuCgkoZmluZF9zcGVjX2ZpbGUpOiBOZXcgZnVuY3Rpb24uCgkoU1BFQ19GSUxFKTogTmV3IGRlZmluZS4KClR1ZSBNYXkgMTEgMTE6NDY6MzYgMTk5OSAgRGF2ZSBCcm9sbGV5ICA8YnJvbGxleUBjeWdudXMuY29tPgoKCSogbGFuZy1vcHRpb25zLmg6IC1NRCwgLU1NRCwgLU0gYW5kIC1NTSBub3QgbmVlZGVkIGhlcmUgZm9yCgljcHBsaWItZW5hYmxlZCBidWlsZC4KCjE5OTktMDUtMDUgIFBlciBCb3RobmVyICA8Ym90aG5lckBjeWdudXMuY29tPgoKCSogY2xhc3MuYyAobWFrZV9maWVsZF92YWx1ZSk6ICBERUNMX0lOSVRJQUwgbWF5IGJlIGEgc3RyaW5nIGxpdGVyYWw7Cgl0ZW1wb3JhcmlseSB6ZXJvIGl0IHdoaWxlIGNhbGxpbmcgcmVzdF9vZl9kZWNsX2NvbXBpbGF0aW9uLgoKCSogamF2YS10cmVlLmggKHN0cmluZ19wdHJfdHlwZV9ub2RlKTogIEFkZCBkZWNsYXJhdGlvbi4KCSogZGVjbC5jOiAgRGVmaW5lIGFuZCBpbml0aWFsaXplIHN0cmluZ19wdHJfdHlwZV9ub2RlLgoJKiBwYXJzZS55IChwYXRjaF9zdHJpbmdfY3N0KTogIFVzZSBzdHJpbmdfcHRyX3R5cGVfbm9kZS4KCgkqIHBhcnNlLmggKExPT1BfSEFTX0xBQkVMX1AsIExPT1BfSEFTX0xBQkVMX1NLSVBfUCk6ICBSZW1vdmVkLgoJKiBwYXJzZS55IChmb3Jfc3RhdGVtZW50KTogIE5vdyB1bmNvbmRpdGlvbmFsbHkgZXhpdF9ibG9jay4KCShmaW5pc2hfbGFiZWxlZF9zdGF0ZW1lbnQpOiAgTm8gbG9uZ2VyIGV4aXRfYmxvY2sgaWYgZm9yLWxvb3AuCgkocGF0Y2hfbG9vcF9zdGF0ZW1lbnQpOiAgQ2hlY2sgaGFyZGVyIGlmIHRoZSBsb29wIGlzIGFscmVhZHkgbGFiZWxlZC4KCgkqIHBhcnNlLnkgKHBhdGNoX2luaXRpYWxpemVkX3N0YXRpY19maWVsZCk6ICBSZW1vdmVkIGZ1bmN0aW9uLgoJKG1heWJlX2dlbmVyYXRlX2NsaW5pdCk6ICBSZW1vdmVkIHNwZWNpYWwgaGFuZGxpbmcgZm9yIGludGVyZmFjZXMuCgkoamF2YV9jb21wbGV0ZV9leHBhbmRfbWV0aG9kcyk6ICBEbyBhIHByZWxpbWluYXJ5IGphdmFfY29tcGxldGVfdHJlZQoJb24gPGNsaW5pdD4gdG8gZGV0ZXJtaW5lIGlmIGl0IGNhbiBiZSByZW1vdmVkLgoJKGphdmFfY29tcGxldGVfZXhwYW5kX21ldGhvZCk6ICBSZW1vdmUgc3BlY2lhbCBoYW5kbGluZyBmb3IgPGNsaW5pdD4uCgkoamF2YV9jb21wbGV0ZV9saHMpOiAgRm9yIEJMT0NLIGFuZCBFWFBSX1dJVEhfRklMRV9MT0NBVElPTgoJb3B0aW1pemUgaWYgd2UgZ2V0IGJhY2sgZW1wdHlfc3RtdF9ub2RlLgoJRm9yIE1PRElGWV9FWFBSLCByZS1kbyBjaGVja2luZyBvZiBzdGF0aWMgaW5pdGlhbGl6ZXJzLgoJKGZvbGRfY29uc3RhbnRfZm9yX2luaXQpOiAgRG9uJ3QgcmV0dXJuIGltbWVkaWF0ZSBpZiBWQVJfREVDTC4KCUZvciBWQVJfREVDTCwgcGFzcyBjb3JyZWN0IGNvbnRleHQuCgoJKiB2ZXJpZnkuYyAodmVyaWZ5X2p2bV9pbnN0cnVjdGlvbnMpOiAgQmV0dGVyIGVycm9yIG1lc3NhZ2VzLgoKMTk5OS0wNS0wMyAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgoKCSogcGFyc2Utc2Nhbi55IChpbnRlcmZhY2VfZGVjbGFyYXRpb24pOiBDYWxsCglyZXBvcnRfY2xhc3NfZGVjbGFyYXRpb24gZm9yIGludGVyZmFjZXMuCgoxOTk5LTA0LTMwIDIwOjU0IC0wNDAwICBaYWNrIFdlaW5iZXJnICA8emFja0ByYWJpLmNvbHVtYmlhLmVkdT4KCgkqIE1ha2VmaWxlLmluOiBSZW1vdmUgLXYgZnJvbSBiaXNvbiBjb21tYW5kIGxpbmVzLgoKRnJpIEFwciAzMCAxNzo1NDo0MCAxOTk5ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIGNoZWNrLWluaXQuYyAoY2hlY2tfaW5pdCk6IEV4Y2x1ZGUgYSBjYXNlIG9mIGVycm9yIHdoZW4gZG9pbmcKCXhyZWZzLgoJKiBjbGFzcy5jIChsYXlvdXRfY2xhc3NfbWV0aG9kKTogRG9uJ3QgZ2VuZXJhdGUgdGhlIGVycm9yIG1lc3NhZ2UKCXR3aWNlIHdoZW4gY29tcGlsaW5nIGZyb20gc291cmNlLgoJKiBsYW5nLW9wdGlvbnMuaDogQWRkZWQgYC1XcmVkdW5kYW50LW1vZGlmZXJzJyBhbmQKCWAtV3VudXN1cHBvcnRlZC1qZGsxMScgZmxhZ3MgYW5kIGhlbHAgdGV4dC4KCSogbGFuZy5jIChsYW5nX2RlY29kZV9vcHRpb24pOiBBZGRlZCBzdXBwb3J0IGZvcgoJYC1XdW5zdXBwb3J0ZWQtamRrMTEnIGFuZCBgLVdyZWR1bmRhbnQtbW9kaWZpZXJzJy4KCWZsYWdfc3RhdGljX2xvY2FsX2pkazExIGFuZCBmbGFnX3JlZHVuZGFudCBzZXQgYWNjb3JkaW5nbHkuCgkqIGxleC5jIChqYXZhX2xleCk6IENhbGwgQlVJTERfT1BFUkFUT1Igb24gQ0NCX1RLLgoJKiBwYXJzZS5oIChFWFBSX1dGTF9BRERfQ09MKTogTmV3IG1hY3JvLgoJKERFQ0xfRU5EX1NPVVJDRV9MSU5FKTogTGlrZXdpc2UuCgkoREVDTF9JTkhFUklURURfU09VUkNFX0xJTkUpOiBMaWtld2lzZS4KCSogcGFyc2UueSAoc3RhdGljX3JlZl9lcnIpOiBOZXcgZnVuY3Rpb24sIHByb3RvdHlwZWQuCgkoQ0NCX1RLKTogTm93IHRhZ2dlZCA8b3BlcmF0b3I+LgoJKGNsYXNzX2JvZHk6KTogUmVtZW1iZXIgdGhlIGxvY2F0aW9uIG9mIHRoZSBjbG9zaW5nICd9JyBvZiBhIGNsYXNzCglkZWZpbml0aW9uIHdoZW4gZG9pbmcgeHJlZnMuCgkoYmxvY2s6KTogTGlrZXdpc2UuCgkoYmxvY2tfZW5kOik6IExpa2V3aXNlLgoJKGNyZWF0ZV9jbGFzcyk6IFJlbWVtYmVyIHRoZSBsb2NhdGlvbiBvZiB0aGUgaW5oZXJpdGVkIGNsYXNzCglpZGVudGlmaWVyIHdoZW4gZG9pbmcgeHJlZnMuCgkocmVnaXN0ZXJfZmllbGRzKTogQWRkZWQgdGVzdCBvbiBmaXJzdCBvcGVyYW5kIG9mIGBpbml0JyBiZWZvcmUKCXRlc3RpbmcgaXQgVFJFRV9DT0RFLgoJKG1ldGhvZF9oZWFkZXIpOiBTdG9yZSB0aGUgbG9jYXRpb24gb2YgdGhlIGNsYXNzIGlkZW50aWZpZXIgaW4gdGhlCgljbGFzcyBkZWNsIHdoZW4gZG9pbmcgeHJlZnMuCgkoZmluaXNoX21ldGhvZF9kZWNsYXJhdGlvbik6IERvbid0IGNvbWJpbmUgZmlyc3QvbGFzdCBtZXRob2QgbGluZQoJd2hlbiBkb2luZyB4cmVmLgoJKGphdmFfY2hlY2tfcmVndWxhcl9tZXRob2RzKTogV2FybmluZyBjaGVjayBvbiBub3Qgb3ZlcnJpZGluZwoJbWV0aG9kcyB3aXRoIGRlZmF1bHQgYWNjZXNzIG9uIG90aGVyIHBhY2thZ2VzIG1vdmUgYmVmb3JlIGNoZWNrIG9uCglzdGF0aWMgbWV0aG9kcy4gSW5pdGlhbGl6YXRpb24gb2YgYGFmbGFncycgYWxzbyBtb3ZlZCB1cC4KCShyZXNvbHZlX2V4cHJlc3Npb25fbmFtZSk6IENhbGwgc3RhdGljX3JlZl9lcnIgdG8gcmVwb3J0IHRoZSBlcnJvci4KCShzdGF0aWNfcmVmX2Vycik6IE5ldyBmdW5jdGlvbiwgaW1wbGVtZW50ZWQuCgkocmVzb2x2ZV9maWVsZF9hY2Nlc3MpOiBSZXR1cm5lZCBzaW1wbGlmaWVkIHN0YXRpYyBmaWVsZCBhY2Nlc3MKCXdoZW4gZG9pbmcgeHJlZnMuCgkocmVzb2x2ZV9xdWFsaWZpZWRfZXhwcmVzc2lvbl9uYW1lKTogQ2hlY2sgZm9yIGlsbGVnYWwgdXNlIG9mCglzdGF0aWMgZmllbGRzIGluIGEgbm9uIHN0YXRpYyBjb250ZXh0LiBDYWxsIHN0YXRpY19yZWZfZXJyIHRvCglyZXBvcnQgZXJyb3IgaW4gdmFyaW91cyBwbGFjZXMuCgkoamF2YV9jb21wbGV0ZV90cmVlKTogRG8gbm90IGZvbGQgaW5pdGlhbGl6ZWQgc3RhdGljIGZpZWxkcyB3aGVuCglkb2luZyB4cmVmcy4KCShqYXZhX2NvbXBsZXRlX2xocyk6IExpa2V3aXNlLgoKMTk5OS0wNC0yOSAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQGN5Z251cy5jb20+CgoJKiBleHByLmMgKGdlbmVyYXRlX25hbWUpOiBVc2UgQVNNX0dFTkVSQVRFX0lOVEVSTkFMX0xBQkVMIHRvCgljcmVhdGUgaW50ZXJuYWwgbGFiZWxzLgoJKGxvb2t1cF9sYWJlbCk6IERpdHRvLgoKU2F0IEFwciAyNCAxNjo1MDoxOSAxOTk5ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIGNsYXNzLmMgKGxheW91dF9jbGFzc19tZXRob2QpOiBHZW5lcmF0ZSA8Y2xpbml0PidzIHJ0bCBmb3IKCWludGVyZmFjZXMuCgkqIGRlY2wuYyAoY29tcGxldGVfc3RhcnRfamF2YV9tZXRob2QpOiBEb24ndCBjYWxsIF9Kdl9Jbml0Q2xhc3MKCWZvciBpbnRlcmZhY2VzJyA8Y2xpbml0Pi4KCSogZXhwci5jIChsb29rdXBfZmllbGQpOiBTZWFyY2ggZm9yIGZpZWxkcyBpbiBpbnRlcmZhY2VzLgoJKGV4cGFuZF9pbnZva2UpOiBGaXhlZCBpbmRlbnRhdGlvbi4KCShleHBhbmRfamF2YV9maWVsZF9vcCk6IExpa2V3aXNlLiBVc2UgSVNfQ0xJTklULgoJKiBwYXJzZS5oIChKUFJJTUlUSVZFX1RZUEVfT1JfVk9JRF9QKTogTWFjcm8gcmVtb3ZlZC4KCShJU19DTElOSVQpOiBOZXcgbWFjcm8uCgkqIHBhcnNlLnkgKHR5cGVfZGVjbGFyYXRpb246KTogQ2FsbCBtYXliZV9nZW5lcmF0ZV9jbGluaXQgYWZ0ZXIgYW4KCWludGVyZmFjZSB3YXMgcGFyc2VkLgoJKG1heWJlX2dlbmVyYXRlX2NsaW5pdCk6IERvbid0IGdlbmVyYXRlIGlmIHRoZSBjdXJyZW50IGNsYXNzIGlzIGFuCglpbnRlcmZhY2Ugd2l0aCBvbmx5IGZpZWxkcyBvZiBwcmltaXRpdmUgdHlwZXMuCgkocmVzZXRfbWV0aG9kX25hbWUpOiBVc2UgSVNfQ0xJTklULgoJKGphdmFfY29tcGxldGVfZXhwYW5kX21ldGhvZCk6IEV4cGFuZCA8Y2xpbml0PiB3aGVuIGl0IGV4aXN0cyBmb3IKCWludGVyZmFjZXMuIFVzZSBJU19DTElOSVQuCgkocmVzb2x2ZV9leHByZXNzaW9uX25hbWUpOiBVc2UgREVDTF9DT05URVhUIGluc3RlYWQgb2YKCWN1cnJlbnRfY2xhc3MgdG8gYnVpbGQgc3RhdGljIGZpZWxkIHJlZmVyZW5jZXMuCgkoamF2YV9jb21wbGV0ZV9saHMpOiBVc2UgSVNfX0NMSU5JVC4gRG9uJ3QgdXNlIFNBVkVfRVhQUiBvbgoJQVJSQVlfUkVGIHdoZW4gZG9pbmcgeHJlZmVyZW5jaW5nLgoJKGNoZWNrX2ZpbmFsX2Fzc2lnbm1lbnQpOiBGaXhlZCB0eXBvIGluIGxlYWRpbmcgY29tbWVudC4gVXNlCglJU19DTElOSVQuCgkocGF0Y2hfYXJyYXlfcmVmKTogRG9uJ3QgZnVsbHkgZXhwYW5kIGFycmF5IHJlZmVyZW5jZXMgd2hlbgoJeHJlZmVyZW5jaW5nLgoJKHBhdGNoX3JldHVybik6IFVzZSBJU19DTElOSVQuCgkocGF0Y2hfdGhyb3dfc3RhdGVtZW50KTogTGlrZXdpc2UuCgoxOTk5LTA0LTIyICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CgoJKiBNYWtlLWxhbmcuaW4gKEpBVkFfU1JDUyk6IEFkZGVkIGNoZWNrLWluaXQuYy4KCldlZCBBcHIgMjEgMTE6MTM6MzYgMTk5OSAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBkZWNsLmMgKHByZWRlZl9maWxlbmFtZXMsIHByZWRlZl9maWxlbmFtZXNfc2l6ZSk6IE5ldyBnbG9iYWxzCgkoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBwcmVkZWZfZmlsZW5hbWVzIGFuZCBwcmVkZWZfZmlsZW5hbWVzX3NpemUKCWluaXRpYWxpemVkLgoJKiBqYXZhLXRyZWUuaCAocHJlZGVmX2ZpbGVuYW1lcywgcHJlZGVmX2ZpbGVuYW1lc19zaXplKTogRGVjbGFyZWQKCWV4dGVybi4KCSogamNmLXBhcnNlLmMgKHByZWRlZmluZWRfZmlsZW5hbWVfcCk6IE5ldyBmdW5jdGlvbi4KCSh5eXBhcnNlKTogQ2hlY2sgdGhhdCBmaWxlcyBvbiB0aGUgY29tbWFuZCBsaW5lIGFyZSBzcGVjaWZpZWQgb25seQoJb25jZSBhbmQgaXNzdWUgYSB3YXJuaW5nIG90aGVyd2lzZS4KCSogcGFyc2UuaCAoSlBSSU1JVElWRV9UWVBFX09SX1ZPSURfUCk6IE5ldyBtYWNyby4KCSogcGFyc2UueSAoc291cmNlX2VuZF9qYXZhX21ldGhvZCk6IE51bGxpZnkgTk9QIG1ldGhvZCBib2RpZXMsIHRvCglhdm9pZCBhIGdjYyB3YXJuaW5nIHdpdGggLVcgLVdhbGwgdHVybmVkIG9uLgoJKGphdmFfZXhwYW5kX2NsYXNzZXMpOiBBYm9ydCBpZiBlcnJvcnMgd2VyZSBlbmNvdW50ZXJlZC4KCShqYXZhX2NvbXBsZXRlX2xocyk6IElmIHRoZSBjcm9zcyByZWZlcmVuY2UgZmxhZyBpcyBzZXQsIHdyYXAKCWZpZWxkIERFQ0wgbm9kZSBhcm91bmQgYSBXRkwgd2hlbiByZXNvbHZpbmcgZXhwcmVzc2lvbiBuYW1lLgoKTW9uIEFwciAxOSAxNDo0NDo0OCAxOTk5ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIGxhbmcuYyAobGFuZ19kZWNvZGVfb3B0aW9uKTogRml4ZWQgcmV0dXJuZWQgdmFsdWUgd2hlbiBwYXJzaW5nCglgLWZ4cmVmPS4uLicgYW5kIGAtV2FsbCcuCgkqIHBhcnNlLnkgKHNvdXJjZV9lbmRfamF2YV9tZXRob2QpOiBEbyBub3QgZ2VuZXJhdGUgY29kZSB3aGVuCglmbGFnX2VtaXRfeHJlZiBpcyBzZXQuCgkocmVzb2x2ZV9leHByZXNzaW9uX25hbWUpOiBEbyBub3QgYnVpbGQgc3RhdGljIGZpZWxkIGFjY2VzcyB3aGVuCglmbGFnX2VtaXRfeHJlZiBpcyBzZXQuCgkocmVzb2x2ZV9maWVsZF9hY2Nlc3MpOiBObyBzcGVjaWFsIHRyZWF0bWVudCBvbiBgbGVuZ3RoJyB3aGVuCglmbGFnX2VtaXRfeHJlZiBpcyBzZXQuIERvIG5vdCBidWlsZCBxdWFsaWZpZWQgc3RhdGljIGZpZWxkIGFjY2VzcwoJd2hlbiBmbGFnX2VtaXRfeHJlZiBpcyBzZXQuCgkocGF0Y2hfaW52b2tlKTogS2VlcCB0aGUgbWV0aG9kIERFQ0wgYXMgb3BlcmFuZCAwIG9mIHRoZSBDQUxMX0VYUFIKCXdoZW4gZmxhZ19lbWl0X3hyZWYgaXMgc2V0LgoJKHBhdGNoX2Fzc2lnbm1lbnQpOiBEbyBub3QgZ2VuZXJhdGUgYXJyYXkgc3RvcmUgcnVudGltZSBjaGVjayB3aGVuCglmbGFnX2VtaXRfeHJlZiBpcyBzZXQuCgkqIHhyZWYuYyAoeHJlZl9mbGFnX3ZhbHVlKTogRml4ZWQgZnVuY3Rpb24gZGVjbGFyYXRpb24KCWluZGVudGF0aW9uLgoJKHhzZXRfc2V0X2RhdGEpOiBOZXcgZnVuY3Rpb24uCgkqIHhyZWYuaCAoeHJlZl9zZXRfZGF0YSk6IEFkZGVkIHByb3RvdHlwZSBmb3IgbmV3IGZ1bmN0aW9uLgoJKHR5cGVkZWYgc3RydWN0IHhyZWZfZmxhZ190YWJsZSk6IE5ldyBmaWVsZCBkYXRhLgoJKFhSRUZfR0VUX0RBVEEpOiBOZXcgbWFjcm8uCgoxOTk5LTA0LTE5ICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CgoJKiB4cmVmLmggKGVudW0pOiBSZW1vdmVkIHRyYWlsaW5nIGNvbW1hLgoKCSogcGFyc2UueSAocmVzb2x2ZV9xdWFsaWZpZWRfZXhwcmVzc2lvbl9uYW1lKTogQWRkZWQgbWlzc2luZwoJYGJyZWFrJy4KClRodSBBcHIgMTUgMTM6MDg6MDMgMTk5OSAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQGN5Z251cy5jb20+CgoJKiBnamF2YWguYzogTmV3IHByb3RvdHlwZXMgZm9yIGphdmFfZmxvYXRfZmluaXRlIGFuZAoJamF2YV9kb3VibGVfZmluaXRlLgoKTW9uIEFwciAxMiAxODoyNzozMiAxOTk5ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnkgKHBhdGNoX3VuYXJ5b3ApOiBGaXhlZCArKy8tLSBvcGVyYXRvciBjaGVjayBvbiBhcnJheQoJcmVmZXJlbmNlcy4KClR1ZSBBcHIgIDYgMjM6MTU6NTIgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogTWFrZWZpbGUuaW4gKFRSRUVfSCk6IEFkZCB0cmVlLWNoZWNrLmguCgkoUlRMX0gpOiBBZGQgZ2VucnRsLmguCgpUdWUgQXByICA2IDE1OjE1OjUxIDE5OTkgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogcGFyc2UueSAocGF0Y2hfYXNzaWdubWVudCk6IEFkZGVkIEFycmF5U3RvcmVFeGNlcHRpb24gcnVudGltZQoJY2hlY2suCgoxOTk5LTA0LTA2ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAY3lnbnVzLmNvbT4KCgkqIGV4cHIuYyAocG9wX3R5cGVfMCk6ICBOZXcgZnVuY3Rpb24uCgkocG9wX3R5cGUpOiAgVXNlIHBvcF90eXBlXzAuCgkqIGphdmEtdHJlZS5oIChwb3BfdHlwZV8wKTogIE5ldyBkZWNsYXJhdGlvbi4KCSogdmVyaWZ5LmMgKHZlcmlmeV9qdm1faW5zdHJ1Y3Rpb25zKTogIENoZWNrIHJldHVybiBpbnN0cnVjdGlvbnMuCgoJKiBwYXJzZS55IChwYXRjaF9iaW5vcCk6ICBEb24ndCBmb2xkIGlmIG5vbi1jb25zdGFudCBhbmQgZW1pdGluZwoJY2xhc3MgZmlsZXMuCgpNb24gQXByICA1IDE2OjA2OjA5IDE5OTkgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIE1ha2VmaWxlLmluIChnamF2YWgubyk6IERlcGVuZCBvbiAkKEpBVkFfVFJFRV9IKS4KCgkqIGdqYXZhaC5jOiBJbmNsdWRlIG1hdGguaCBlYXJsaWVyLiAgSW5jbHVkZSB0cmVlLmgvamF2YS10cmVlLmguCgkobWFpbl9qY2YpOiBEb24ndCBkZWZpbmUuCgkocHJvY2Vzc19maWxlKTogRG9uJ3Qgc2V0IGBtYWluX2pjZicuCgoJKiBqYXZhLXRyZWUuaCAobWFpbl9qY2YpOiBEb24ndCBkZWNsYXJlLgoKCSogamNmLXBhcnNlLmMgKG1haW5famNmKTogQWRkIHN0YXRpYyBkZWZpbml0aW9uLgoKCSogbGFuZy5jIChtYWluX2pjZik6IERvbid0IGRlZmluZS4KCk1vbiBBcHIgIDUgMTU6NDM6NTEgMTk5OSAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogY2xhc3MuYyAoYWRkX21ldGhvZF8xKTogQ2FzdCB0aGUgYXJndW1lbnQgb2YgYGJ6ZXJvJyB0byBQVFIuCgoJKiBkZWNsLmMgKGNvcHlfbGFuZ19kZWNsKTogTGlrZXdpc2UgZm9yIGBiY29weScuCgoJKiBqY2YtZGVwZW5kLmM6IEluY2x1ZGUgImNvbmZpZy5oIiwgbm90IDxjb25maWcuaD4uCgoJKiBqY2YtcGFyc2UuYyAoamNmX2ZpZ3VyZV9maWxlX3R5cGUpOiBDYXN0IHRoZSBhcmd1bWVudHMgb2YKCWBiY29weScgdG8gUFRSLgoKCSogamNmLXBhdGguYzogSW5jbHVkZSAiY29uZmlnLmgiLCBub3QgPGNvbmZpZy5oPi4KCgkqIGxleC5jOiBEb24ndCBpbmNsdWRlIHZhcmlvdXMgc3lzdGVtIGhlYWRlciBmaWxlcy4KCShqYXZhX2luaXRfbGV4KTogQ2FzdCB0aGUgYXJndW1lbnQgb2YgYGJ6ZXJvJyB0byBQVFIKCgkqIHBhcnNlLXNjYW4ueSAoamF2YV9wdXNoX3BhcnNlcl9jb250ZXh0KTogTGlrZXdpc2UuCgoJKiBwYXJzZS55IChqYXZhX3B1c2hfcGFyc2VyX2NvbnRleHQpOiBMaWtld2lzZS4KCShwYXRjaF9iY19zdGF0ZW1lbnQpOiBNYXRjaCBmb3JtYXQgc3BlY2lmaWVyIHRvIHZhcmlhYmxlIGFyZ3VtZW50LgoKCSogeHJlZi5jOiBEb24ndCBpbmNsdWRlIDxzdGRpby5oPi4KCk1vbiBBcHIgIDUgMTE6MjQ6MTkgMTk5OSAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBwYXJzZS55IChzdHJ1Y3QgcGFyc2VyX2N0eHQgKmN0eHApOiBOb3cgZ2xvYmFsLgoJKGRlY2xhcmVfbG9jYWxfdmFyaWFibGVzKTogVXNlIFdGTCBjb21wb3VuZCB2YWx1ZSBmb3IgdGhlCglkZWNsYXJhdGlvbiBzb3VyY2UgbGluZSB2YWx1ZSwgd2hlbiBkb2luZyBjcm9zcy1yZWZlcmVuY2luZy4KCjE5OTktMDMtMzEgIFRvbSBUcm9tZXkgIDx0cm9tZXlAY3lnbnVzLmNvbT4KCgkqIGdqYXZhaC5jIChwcmludF9maWVsZF9pbmZvKTogQWxsb3cgY29uc3RhbnRzIG9mIG90aGVyIHR5cGVzLgoJKHByaW50X2luY2x1ZGUpOiBHZW5lcmF0ZSBpbmNsdWRlIHdoZW4gbmV3IG5hbWUgaXMgcHJvcGVyIHByZWZpeAoJb2YgYWxyZWFkeSBwcmludGVkIG5hbWUuCgkoYWRkX25hbWVsZXQpOiBMaWtld2lzZS4KCShjeHhfa2V5d29yZF9zdWJzdCk6IE5ldyBmdW5jdGlvbi4KCShwcmludF9tZXRob2RfaW5mbyk6IFVzZSBpdC4KCShwcmludF9maWVsZF9uYW1lKTogTmV3IGZ1bmN0aW9uLgoJKGdldF9maWVsZF9uYW1lKTogTmV3IGZ1bmN0aW9uLgoJKHByaW50X2ZpZWxkX2luZm8pOiBVc2UgZ2V0X2ZpZWxkX25hbWUgYW5kIHByaW50X2ZpZWxkX25hbWUuCgpXZWQgTWFyIDMxIDExOjAwOjMyIDE5OTkgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIE1ha2VmaWxlLmluIChrZXl3b3JkLmgpOiBHZW5lcmF0ZSB1c2luZyBncGVyZiBsYW5ndWFnZSAnQycsIG5vdAoJJ0tSLUMnLCBzbyBncGVyZiB1c2VzIHRoZSBgY29uc3QnIGtleXdvcmQgb24gc3RyaW5ncy4KCgkqIGtleXdvcmQuZ3BlcmYgKGphdmFfa2V5d29yZCk6IENvbnN0LWlmeSBhIGNoYXIqLgoKVHVlIE1hciAzMCAxMTozMTo1MyAxOTk5ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnkgKHBhdGNoX2JjX3N0YXRlbWVudCk6IEZpeGVkIGlkZW50YXRpb24gYW5kIGEgYm9ndXMKCWBwcmludGYnIGZvcm1hdC4KClR1ZSBNYXIgMzAgMTE6Mjk6MjkgMTk5OSAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBwYXJzZS55IChwYXRjaF9hc3NpZ25tZW50KTogQWxsb3cgc3RhdGljIHZhcmlhYmxlcyBpbiBvdGhlcgoJY2xhc3NlcyB0byBiZSBhc3NpZ25lZC4KClN1biBNYXIgMjggMjI6MTI6MTAgMTk5OSAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogY2xhc3MuYyAobWF5YmVfYWRkX2ludGVyZmFjZSk6IFJlbW92ZSB1bnVzZWQgdmFyaWFibGUKCWBpbnRlcmZhY2VfYmluZm8nLgoJKG1ha2VfY2xhc3NfZGF0YSk6IFVzZSA9IGZvciBhc3NpZ25tZW50LCBub3QgPT0uICBMaWtld2lzZS4KCShlbWl0X3JlZ2lzdGVyX2NsYXNzZXMpOiBSZW1vdmUgdW51c2VkIHZhcmlhYmxlIGBkZWNsJy4KCgkqIGxleC5jOiBGaXggY29tbWVudCBzbyBhcyBub3QgdG8gY29udGFpbiBhbiBlbWJlZGRlZCBgLyonLgoKCSogdmVyaWZ5LmMgKHZlcmlmeV9qdm1faW5zdHJ1Y3Rpb25zKTogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZQoJYHNlbGZfdHlwZScuCgpTYXQgTWFyIDI3IDE1OjQ5OjE4IDE5OTkgIFBlciBCb3RobmVyICA8Ym90aG5lckBjeWdudXMuY29tPgoKCSogcGFyc2UueSAoY29tcGxldGVfbG9vcF9ib2R5KTogIFJlbmFtZSB0byBmaW5pc2hfbG9vcF9ib2R5LgoJKGNvbXBsZXRlX2xhYmVsZWRfc3RhdGVtZW50KTogIFJlbmFtZSB0byBmaW5pc2hfbGFiZWxlZF9zdGF0ZW1lbnQuCgkoY29tcGxldGVfZm9yX2xvb3ApOiAgUmVuYW1lIHRvIGZpbmlzaF9mb3JfbG9vcC4KCShjb21wbGV0ZV9tZXRob2RfZGVjbGFyYXRpb24pOiAgUmVuYW1lIHRvIGZpbmlzaF9tZXRob2RfZGVjbGFyYXRpb24uCgoJKiBqYXZhLXRyZWUuaCAoY29udGludWVfaWRlbnRpZmllcl9ub2RlKTogIE5ldyBnbG9iYWwgbm9kZS4KCSogZGVjbC5jOiAgRGVmaW5lIGFuZCBpbml0aWFsaXplIGNvbnRpbnVlX2lkZW50aWZpZXJfbm9kZS4KCSogcGFyc2UueSAoZ2VuZXJhdGVfbGFiZWxlZF9ibG9jayk6ICBSZW1vdmUgLSBubyBsb25nZXIgbmVlZGVkLgoJKGJ1aWxkX2xvb3BfYm9keSk6ICBVc2UgY29udGludWVfaWRlbnRpZmllcl9ub2RlIGZvciBjb250aW51ZSBibG9jay4KCShmaW5pc2hfbGFiZWxlZF9zdGF0ZW1lbnQpOiAgQWxzbyBkbyBwb3BfbGFiZWxlZF9ibG9jayBhY3Rpb25zLgoJKGphdmFfY29tcGxldGVfbGhzKTogIFBPUF9MT09QIGV2ZW4gaWYgZXJyb3IuCgkoYnVpbGRfbGFiZWxlZF9ibG9jayk6ICBTcGVjaWFsIGhhbmRsaW5nIGZvciBjb250aW51ZV9pZGVudGlmaWVyX25vZGUuCgkocGF0Y2hfbG9vcF9zdGF0ZW1lbnQpOiAgUmUtb3JnYW5pemUuCgkocGF0Y2hfYmNfc3RhdGVtZW50KTogIFJlLXdyaXRlLgoKU2F0IE1hciAyNyAxNToxMzoyMSAxOTk5ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIHBhcnNlLmggKEVYUFJfV0ZMX0dFVF9MSU5FQ09MKTogU2V0IGEgbGluZSBhbmQgY29sdW1uIGNvdW50Cgl1c2luZyBhIFdGTCBjb21wb3VuZCB2YWx1ZS4KCSogcGFyc2UueSAoeHJlZi5oKTogSW5jbHVkZS4KCShtYXliZV9jcmVhdGVfY2xhc3NfaW50ZXJmYWNlX2RlY2wpOiBTZXQgREVDTF9TT1VSQ0VfTElORSB0byB0aGUKCVdGTCBjb21wb3VuZCB2YWx1ZS4KCShyZWdpc3Rlcl9maWVsZHMpOiBTZXQgV0ZMIGNvbXBvdW5kIHZhbHVlIHRvIGxpbmVubyBpZiBkb2luZwoJeHJlZnMuCgkoamF2YV9jb21wbGV0ZV9leHBhbmRfbWV0aG9kKTogQ2FsbCBleHBhbmRfeHJlZiBpZiBmbGFnX2VtaXRfeHJlZgoJaXMgc2V0LgoJKiB4cmVmLmMgKHN5c3RlbS5oLCBqY2YuaCwgcGFyc2UuaCwgb2JzdGFjay5oKTogSW5jbHVkZS4KCSogeHJlZi5oIChleHBhbmRfeHJlZik6IFByb3RvdHlwZSByZW5hbWVkIGZyb20geHJlZl9nZW5lcmF0ZS4KClNhdCBNYXIgMjcgMTQ6MTY6MzIgMTk5OSAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBwYXJzZS5oIChCTE9DS19DSEFJTl9ERUNMKTogTmV3IHVzZSBHRVRfQ1VSUkVOVF9CTE9DSy4KCShHRVRfQ1VSUkVOVF9CTE9DSyk6IE5ldyBtYWNyby4KCSogcGFyc2UueSAoY3VycmVudF9zdGF0aWNfYmxvY2spOiBOZXcgZ2xvYmFsIHZhcmlhYmxlLgoJKG1ldGhvZF9ib2R5Oik6IERlZmluZSBhY3Rpb24uCgkoY29tcGxldGVfbWV0aG9kX2RlY2xhcmF0aW9uKTogU2V0IGN1cnJlbnRfZnVuY3Rpb25fZGVjbCB0byBOVUxMCgl3aGVuIHdvcmsgb24gdGhlIGN1cnJlbnQgbWV0aG9kIGlzIGRvbmUuCgkoZGVjbGFyZV9sb2NhbF92YXJpYWJsZXMpOiBVc2UgR0VUX0NVUlJFTlRfQkxPQ0suCgkoamF2YV9tZXRob2RfYWRkX3N0bXQpOiBMaWtld2lzZS4KCShqYXZhX2NvbXBsZXRlX2V4cGFuZF9tZXRob2QpOiBEaXNhYmxlIHRoZSB1c2Ugb2YgYHRoaXMnIHdoZW4KCWV4cGFuZGluZyA8Y2xpbml0Pi4KCShlbnRlcl9hX2Jsb2NrKTogSWYgbm8gY3VycmVudCBtZXRob2QgZXhpc3QsIHVzZQoJY3VycmVudF9zdGF0aWNfYmxvY2sgdG8gbGluayBzdGF0aWMgaW5pdGlhbGl6ZXIgYmxvY2tzLgoJKGV4aXRfYmxvY2spOiBSZXdyaXR0ZW4gdG8gdXNlIGN1cnJlbnRfc3RhdGljX2Jsb2NrIHdoZW4gbm8gY3VycmVudAoJbWV0aG9kIGRlY2wgZXhpc3RzLgoJKGxvb2t1cF9uYW1lX2luX2Jsb2Nrcyk6IFVzZSBHRVRfQ1VSUkVOVF9CTE9DSy4KCShwYXRjaF9yZXR1cm4pOiBGb3JiaWQgdGhlIHVzZSBvZiBgcmV0dXJuJyBpbiBzdGF0aWMgaW5pdGlhbGl6ZXJzLgoJKHBhdGNoX3Rocm93X3N0YXRlbWVudCk6IEZpeGVkIGluZGVudGF0aW9uLiBJc3N1ZSBzcGVjaWZpYyBlcnJvcgoJZm9yIHVuY2F1Z2h0IHRocm93biBjaGVja2VkIGV4Y2VwdGlvbiBpbiBzdGF0aWMgaW5pdGlhbGl6ZXIKCWJsb2Nrcy4gUmVtb3ZlZCBGSVhNRS4KCjE5OTktMDMtMjUgIFphY2sgV2VpbmJlcmcgIDx6YWNrQHJhYmkuY29sdW1iaWEuZWR1PgoKCSogamF2YS9NYWtlLWxhbmcuaW46IFJlbW92ZSBhbGwgcmVmZXJlbmNlcyB0byBnY2ouby9nY2ouYy4KCUxpbmsgZ2NqIGZyb20gZ2NjLm8uCgpUdWUgTWFyIDIzIDEwOjQ4OjI0IDE5OTkgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogcGFyc2UueSAoZmluZF9hcHBsaWNhYmxlX2FjY2Vzc2libGVfbWV0aG9kc19saXN0KTogV2hlbiBkZWFsaW5nCgl3aXRoIGludGVyZmFjZTogZW5zdXJlIHRoYXQgYSBnaXZlbiBpbnRlcmZhY2Ugb3IgamF2YS5sYW5nLk9iamVjdAoJYXJlIHNlYXJjaGVkIG9ubHkgb25jZS4KClR1ZSBNYXIgMjMgMTA6MDU6MjcgMTk5OSAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogZ2phdmFoLmMgKHByaW50X2NfZGVjbCk6IFJlbW92ZSB1bnVzZWQgYXJndW1lbnQgYGZsYWdzJy4KCgkqIGpjZi1kdW1wLmMgKHByaW50X2FjY2Vzc19mbGFncyk6IEFkZCBicmFjZXMgYXJvdW5kIGlmLWVsc2UuCgoJKiBqdnNwZWMuYyAobGFuZ19zcGVjaWZpY19kcml2ZXIpOiBXcmFwIHZhcmlhYmxlIGBsZW4nIGluIG1hY3JvCglDT01CSU5FX0lOUFVUUy4KCgkqIGxleC5jIChidWlsZF93Zmxfbm9kZSk6IEFkZCBzdGF0aWMgcHJvdG90eXBlLgoKCSogbGV4LmggKGJ1aWxkX3dmbF9ub2RlKTogUmVtb3ZlIHN0YXRpYyBwcm90b3R5cGUuCgoJKiBwYXJzZS55OiBJbmNsdWRlIGxleC5jIGVhcmx5IGVub3VnaCB0byBkZWNsYXJlIGV2ZXJ5dGhpbmcgbmVlZGVkLgoJRW5zdXJlIGNhbGxzIHRvIGBidWlsZF93Zmxfbm9kZScgcGFzcyB0aGUgcHJvcGVyIGFyZ3VtZW50cy4KCShjcmVhdGVfY2xhc3MpOiBSZW1vdmUgdW51c2VkIHZhcmlhYmxlIGBzdXBlcl9kZWNsJy4KCShnZXRfcHJpbnRhYmxlX21ldGhvZF9uYW1lKTogSW5pdGlhbGl6ZSB2YXJpYWJsZSBgbmFtZScuCgpNb24gTWFyIDIyIDIwOjE0OjI2IDE5OTkgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogQ2hhbmdlbG9nOiBGaXhlZCAxOTk5LTAzLTIyIHR5cG9zLgoJKiBsYW5nLmMgKGxhbmdfZGVjb2RlX29wdGlvbik6IEZpeGVkIHR5cG8gaW4gZXJyb3Igc3RyaW5nIGluIHRoZQoJWEFSRyBzZWN0aW9uLgoKMTk5OS0wMy0yMiAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBNYWtlZmlsZS5pbiAoSkFWQV9PQkpTKTogQWRkZWQgZW50cnkgeHJlZi5vLgoJKHhyZWYubyk6IE5ldyBydWxlLgoJKiBqYXZhLXRyZWUuaCAoZmxhZ19lbWl0X3hyZWYpOiBEZWNsYXJlZCBleHRlcm4uCgkqIGxhbmcuYyAoeHJlZi5oKTogSW5jbHVkZWQuCgkoZmxhZ19lbWl0X3hyZWYpOiBOZXcgZ2xvYmFsIHZhcmlhYmxlLgoJKGxhbmdfZGVjb2RlX29wdGlvbik6IEFkZGVkIHN1cHBvcnQgZm9yIC1meHJlZi4KCSogeHJlZi5jOiBDcmVhdGVkLgoJKiB4cmVmLmg6IExpa2V3aXNlLgoKMTk5OS0wMy0yMSAgTWFuZnJlZCBIb2xsc3RlaW4gIDxtYW5mcmVkQHMtZGlyZWt0bmV0LmRlPgoKCSogTWFrZS1sYW5nLmluICgkKEdDSikkKGV4ZWV4dCkpOiBBZGQgaW50bC5vIHRvIGxpc3Qgb2YgZmlsZXMgdG8gYmUKCWxpbmtlZCB3aXRoLgoKU3VuIE1hciAyMSAwODozMDozMCAxOTk5ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBNYWtlZmlsZS5pbiAoamNmLWR1bXAubyk6IERlcGVuZCBvbiAkKENPTkZJR19IKQoJJChzcmNkaXIpLy4uL3N5c3RlbS5oIGFuZCAkKEpBVkFfVFJFRV9IKS4KCShqY2YtaW8ubyk6IERlcGVuZCBvbiAkKEpBVkFfVFJFRV9IKS4KCShtYW5nbGUubyk6IExpa2V3aXNlLgoKCSogY2hlY2staW5pdC5jIChjaGVja19jb25kX2luaXQpOiBBZGQgc3RhdGljIHByb3RvdHlwZS4KCgkqIGNsYXNzLmMgKGJ1aWxkX2phdmFfbWV0aG9kX3R5cGUsIGhhc2hVdGY4U3RyaW5nLAoJbWFrZV9maWVsZF92YWx1ZSwgZ2V0X2Rpc3BhdGNoX3ZlY3RvciwgZ2V0X2Rpc3BhdGNoX3RhYmxlLAoJYXBwZW5kX2dwcF9tYW5nbGVkX3R5cGUsIG1hbmdsZV9zdGF0aWNfZmllbGQpOiBMaWtld2lzZS4KCShzdHJMZW5ndGhVdGY4KTogSGlkZSB1bnVzZWQgZGVmaW5pdGlvbi4KCShoYXNoVXRmOFN0cmluZyk6IENvbnN0LWlmeS4KCShtYWtlX2ZpZWxkX3ZhbHVlKTogVW4tQU5TSS1meS4KCgkqIGNvbnN0YW50cy5jOiBNb3ZlIGluY2x1c2lvbiBvZiBqY2YuaCBhYm92ZSBqYXZhLXRyZWUuaC4KCShzZXRfY29uc3RhbnRfZW50cnksIGZpbmRfY2xhc3Nfb3Jfc3RyaW5nX2NvbnN0YW50LAoJZmluZF9uYW1lX2FuZF90eXBlX2NvbnN0YW50LCBnZXRfdGFnX25vZGUsCglidWlsZF9jb25zdGFudF9kYXRhX3JlZik6IEFkZCBzdGF0aWMgcHJvdG90eXBlLgoKCSogZGVjbC5jIChwdXNoX2p2bV9zbG90LCBidWlsdGluX2Z1bmN0aW9uLAoJbG9va3VwX25hbWVfY3VycmVudF9sZXZlbCk6IExpa2V3aXNlLgoJKGJ1aWx0aW5fZnVuY3Rpb24pOiBDb25zdC1pZnkuCgoJKiBleGNlcHQuYyAoZXhwYW5kX3N0YXJ0X2phdmFfaGFuZGxlciwgZXhwYW5kX2VuZF9qYXZhX2hhbmRsZXIpOgoJQWRkIHN0YXRpYyBwcm90b3R5cGUuCgoJKiBleHByLmMgKGZsdXNoX3F1aWNrX3N0YWNrLCBwdXNoX3ZhbHVlLCBwb3BfdmFsdWUsCglqYXZhX3N0YWNrX3N3YXAsIGphdmFfc3RhY2tfZHVwLCBidWlsZF9qYXZhX2F0aHJvdywKCWJ1aWxkX2phdmFfanNyLCBidWlsZF9qYXZhX3JldCwgZXhwYW5kX2phdmFfbXVsdGlhbmV3YXJyYXksCglleHBhbmRfamF2YV9hcnJheXN0b3JlLCBleHBhbmRfamF2YV9hcnJheWxvYWQsCglleHBhbmRfamF2YV9hcnJheV9sZW5ndGgsIGJ1aWxkX2phdmFfbW9uaXRvciwgZXhwYW5kX2phdmFfcHVzaGMsCglleHBhbmRfamF2YV9yZXR1cm4sIGV4cGFuZF9qYXZhX05FVywgZXhwYW5kX2phdmFfSU5TVEFOQ0VPRiwKCWV4cGFuZF9qYXZhX0NIRUNLQ0FTVCwgZXhwYW5kX2lpbmMsIGV4cGFuZF9qYXZhX2Jpbm9wLCBub3RlX2xhYmVsLAoJZXhwYW5kX2NvbXBhcmUsIGV4cGFuZF90ZXN0LCBleHBhbmRfY29uZCwgZXhwYW5kX2phdmFfZ290bywKCWV4cGFuZF9qYXZhX2NhbGwsIGV4cGFuZF9qYXZhX3JldCwgcG9wX2FyZ3VtZW50cywgZXhwYW5kX2ludm9rZSwKCWV4cGFuZF9qYXZhX2ZpZWxkX29wLCBqYXZhX3B1c2hfY29uc3RhbnRfZnJvbV9wb29sKTogTGlrZXdpc2UuCgoJKGRlY29kZV9uZXdhcnJheV90eXBlLCBleHBhbmRfaWluYyk6IFVuLUFOU0ktZnkuCgkoYnVpbGRfamF2YV9hcnJheW51bGxfY2hlY2spOiBNYXJrIHBhcmFtZXRlcnMgYG5vZGUnIGFuZCBgdHlwZScKCXdpdGggQVRUUklCVVRFX1VOVVNFRC4KCShub3RlX2xhYmVsKTogTGlrZXdpc2UgZm9yIHBhcmFtZXRlciBgY3VycmVudF9wYycuCgkoZXhwYW5kX2phdmFfY2FsbCwgZXhwYW5kX2phdmFfcmV0KTogSGlkZSB1bnVzZWQgZGVmaW5pdGlvbi4KCgkqIGphdmEtdHJlZS5oIChtYWtlX2NsYXNzLCBidWlsZF9jb25zdGFudHNfY29uc3RydWN0b3IsCglqYXZhX3NldF9leGNlcHRpb25fbGFuZ19jb2RlLCBwb3BfbGFiZWxlZF9ibG9jaywgZW1pdF9oYW5kbGVycywKCWluaXRfb3V0Z29pbmdfY3Bvb2wsIHJlZ2lzdGVyX2NsYXNzLCBlbWl0X3JlZ2lzdGVyX2NsYXNzZXMsCglqYXZhX2xheW91dF9zZWVuX2NsYXNzX21ldGhvZHMpOiBQcm90b3R5cGUuCgkodW5pY29kZV9tYW5nbGluZ19sZW5ndGgpOiBDb25zdC1pZnkuCgkoYXBwZW5kX2dwcF9tYW5nbGVkX25hbWUsIGFwcGVuZF9ncHBfbWFuZ2xlZF9jbGFzc3R5cGUsCgllbWl0X3VuaWNvZGVfbWFuZ2xlZF9uYW1lLCBmb3JtYXRfaW50LCBmb3JtYXRfdWludCwKCWpjZl90cmltX29sZF9pbnB1dCwgamNmX3ByaW50X3V0ZjgsIGpjZl9wcmludF9jaGFyLAoJamNmX3ByaW50X3V0ZjhfcmVwbGFjZSwgb3Blbl9jbGFzcyk6IFByb3RvdHlwZS4KCgkqIGpjZi1kdW1wLmM6IEluY2x1ZGUgImNvbmZpZy5oIiwgbm90IDxjb25maWcuaD4uICBEb24ndCBpbmNsdWRlCgk8c3RkaW8uaD4uICBJbmNsdWRlIHRyZWUuaC9qYXZhLXRyZWUuaC4KCSh1dGY4X2VxdWFsX3N0cmluZyB1c2FnZSwgcHJvY2Vzc19jbGFzcyk6IEFkZCBzdGF0aWMgcHJvdG90eXBlLgoJKG9wZW5fY2xhc3MpOiBEb24ndCBwcm90b3R5cGUgdGhpcyBoZXJlLgoJKHV0ZjhfZXF1YWxfc3RyaW5nKTogTWF0Y2ggYXJndW1lbnRzIHRvIGZvcm1hdCBzcGVjaWZpZXJzLgoJKEhBTkRMRV9DT0RFX0FUVFJJQlVURSwgQlJBTkNILCBKU1IsIFJFVCwgTE9PS1VQX1NXSVRDSCwKCVRBQkxFX1NXSVRDSCwgZGlzYXNzZW1ibGVfbWV0aG9kKTogTGlrZXdpc2UuCgoJKiBqY2YtaW8uYzogSW5jbHVkZSB0cmVlLmgvamF2YS10cmVlLmguCgkob3Blbl9jbGFzcywgZmluZF9jbGFzc2ZpbGUsIGpjZl9wcmludF91dGY4LAoJamNmX3ByaW50X3V0ZjhfcmVwbGFjZSk6IENvbnN0LWlmeS4KCgkqIGpjZi1wYXJzZS5jIChwYXJzZV96aXBfZmlsZV9lbnRyaWVzLCBwcm9jZXNzX3ppcF9kaXIsCglwYXJzZV9jbGFzc19maWxlKTogQWRkIHN0YXRpYyBwcm90b3R5cGUuCgkoZmluZF9pbl9jdXJyZW50X3ppcCk6IE1hdGNoIGRlZmluaXRpb24gdG8gZXhpc3Rpbmcgc3RhdGljCglwcm90b3R5cGUuCgoJKiBqY2Ytd3JpdGUuYzogSW5jbHVkZSBqY2YuaCBiZWZvcmUgdHJlZS5oL2phdmEtdHJlZS5oLgoJKGFsbG9jX2NodW5rLCBhcHBlbmRfY2h1bmssIGFwcGVuZF9jaHVua19jb3B5LCBnZW5famNmX2xhYmVsLAoJZmluaXNoX2pjZl9ibG9jaywgZGVmaW5lX2pjZl9sYWJlbCwgZ2V0X2pjZl9sYWJlbF9oZXJlLAoJcHV0X2xpbmVudW1iZXIsIGxvY2FsdmFyX2FsbG9jLCBsb2NhbHZhcl9mcmVlLCBnZXRfYWNjZXNzX2ZsYWdzLAoJd3JpdGVfY2h1bmtzLCBhZGp1c3RfdHlwZWRfb3AsIGdlbmVyYXRlX2J5dGVjb2RlX2NvbmRpdGlvbmFsLAoJZ2VuZXJhdGVfYnl0ZWNvZGVfcmV0dXJuLCBwZXJmb3JtX3JlbG9jYXRpb25zLCBpbml0X2pjZl9zdGF0ZSwKCWluaXRfamNmX21ldGhvZCwgcmVsZWFzZV9qY2Zfc3RhdGUsIGdlbmVyYXRlX2NsYXNzZmlsZSk6CglBZGQgc3RhdGljIHByb3RvdHlwZS4KCShlbWl0X3Vub3ApOiBNYXJrIHBhcmFtZXRlciBgdHlwZScgd2l0aCBBVFRSSUJVVEVfVU5VU0VELgoJKG1ha2VfY2xhc3NfZmlsZV9uYW1lKTogQ29uc3QtaWZ5LgoKCSogamNmLmggKGZpbmRfY2xhc3NmaWxlKTogQ29uc3QtaWZ5LgoKCSoganYtc2Nhbi5jIChyZXNldF9yZXBvcnQpOiBSZW1vdmUgcHJvdG90eXBlLgoKCSoganZnZW5tYWluLmM6IEluY2x1ZGUgamNmLmgvdHJlZS5oL2phdmEtdHJlZS5oLgoJKGVycm9yKTogUmV3cml0ZSB0byBhbGxvdyB2YXJhcmdzLgoKCSogbGFuZy5jIChsYW5nX2Zfb3B0aW9ucyk6IENvbnN0LWlmeS4KCgkqIGxleC5jIChqYXZhX3BhcnNlX2VzY2FwZV9zZXF1ZW5jZSk6IEFkZCBzdGF0aWMgcHJvdG90eXBlLgoJKGphdmFfYWxsb2NhdGVfbmV3X2xpbmUpOiBNYXRjaCBkZWZpbml0aW9uIHRvIGV4aXN0aW5nIHN0YXRpYwoJcHJvdG90eXBlLgoKCSogbWFuZ2xlLmMgSW5jbHVkZSB0cmVlLmgvamF2YS10cmVlLmguCgkodW5pY29kZV9tYW5nbGluZ19sZW5ndGgsIGVtaXRfdW5pY29kZV9tYW5nbGVkX25hbWUsCglhcHBlbmRfZ3BwX21hbmdsZWRfbmFtZSwgYXBwZW5kX2dwcF9tYW5nbGVkX2NsYXNzdHlwZSk6IENvbnN0LWlmeS4KCgkqIHBhcnNlLmggKGpkZXBfY29kZSk6IFJlbW92ZSB0cmFpbGluZyBjb21tYSBpbiBlbnVtZXJhdGlvbi4KCShqYXZhX2dldF9saW5lX2NvbCk6IE1vdmUgcHJvdG90eXBlIG91dHNpZGUgb2YgIUpDMV9MSVRFIHRlc3QuCgkocmVzZXRfcmVwb3J0KTogQWRkIHByb3RvdHlwZS4KCgkqIHZlcmlmeS5jIChwdXNoX3BlbmRpbmdfbGFiZWwsIG1lcmdlX3R5cGVzKTogQWRkIHN0YXRpYwoJcHJvdG90eXBlcy4KCgkqIHppcGZpbGUuaCAob3BlbmRpcl9pbl96aXAsIG9wZW5faW5femlwKTogUHJvdG90eXBlLgoKMTk5OS0wMy0xOSAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBwYXJzZS55IChmaW5kX2FwcGxpY2FibGVfYWNjZXNzaWJsZV9tZXRob2RzX2xpc3QpOiBFeHRlbmQgdGhlCglzZWFyY2ggdG8gc3VwZXJpbnRlcmZhY2VzIHdoZW4gcmVsZXZhbnQuCgkoc2VhcmNoX2FwcGxpY2FibGVfbWV0aG9kc19saXN0KTogTmV3IGZ1bmN0aW9uLgoKMTk5OS0wMy0xOCAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBjbGFzcy5jICh1bm1hbmdsZV9jbGFzc25hbWUpOiBJbXBsZW1lbnRlZCBzdHJpY3RlciB0ZXN0aW5nCgliZWZvcmUgc2V0dGluZyB0aGUgUVVBTElGSUVEX1AgZmxhZyBvbiBhbiBpZGVudGlmaWVyLgoKVHVlIE1hciAxNiAxNToxNTo0MSAxOTk5ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnkgKGphdmFfY29tcGxldGVfbGhzKTogIENhbGwgZm9yY2VfZXZhbHVhdGlvbl9vcmRlcgoJYWZ0ZXIgcGF0Y2hfbmV3YXJyYXkuCgkocGF0Y2hfYmlub3ApOiAgRG9uJ3QgY2FsbCBmb2xkIGlmIHRoZXJlIGFyZSBzaWRlIGVmZmVjdHMuCgoxOTk5LTAzLTE2ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnkgKGphdmFfc3RhYmlsaXplX3JlZmVyZW5jZSk6IFVzZSBzYXZlX2V4cHIgaW5zdGVhZCBvZgoJYnVpbGRpbmcgYSBTQVZFX0VYUFIgbm9kZS4KCShqYXZhX2NvbXBsZXRlX2xocyk6IFBhdGNoIHRoZSByZXN1bHRpbmcgc3RyaW5nIG9mIHRoZSBgKz0nCglvcGVyYXRvciAoaWYgbmVjZXNzYXJ5KSBhbmQgY29tcGxldGUgdGhlIFJIUyBhZnRlciBoYXZpbmcgYnVpbHQKCXRoZSBjYXN0LgoKTW9uIE1hciAxNSAxMjoxODoyOSAxOTk5ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAY3lnbnVzLmNvbT4KCgkqIGNsYXNzLmMgKG1ha2VfY2xhc3MpOiAgRG9uJ3Qgc2V0IENMQVNTX1AgaGVyZSAoYmVjYXVzZQoJdGhpcyBmdW5jdGlvbiBpcyBhbHNvIGNhbGxlZCBieSBidWlsZF9qYXZhX2FycmF5X3R5cGUpLgoJKHB1c2hfY2xhc3MpOiAgU2V0IENMQVNTX1AgaGVyZSBpbnN0ZWFkLgoJKiBwYXJzZS5oIChUWVBFX0NMQVNTX1ApOiAgQ2hlY2sgZm9yIFRZUEVfQVJSQVlfUCBpcyByZWR1bmRhbnQuCgoJKiBqY2YtZHVtcC5jIChwcmludF9hY2Nlc3NfZmxhZ3MpOiAgVGFrZSBleHRyYSBwYXJhbWV0ZXIgdG8gaW5kaWNhdGUKCWNvbnRleHQuICBJZiB0aGUgY29udGV4dCBpcyBjbGFzcywgcGVyZmVyICJzdXBlciIgb3ZlciAic3luY2hyb25pemVkIi4KCSogamNmLXdyaXRlLmMgKGdlbmVyYXRlX2NsYXNzZmlsZSk6ICBEb24ndCBhZGQgQUNDX1NVUEVSIGlmIGludGVyZmFjZS4KCgkqIHBhcnNlLnkgKGNyZWF0ZV9jbGFzcyk6ICBEb24ndCBjYWxsIHBhcnNlcl9jaGVja19zdXBlciBoZXJlOwoJaXQgaXMgbm90IHJvYnVzdC4gIEFsd2F5cyB3YWl0IHVudGlsIGxhdGVyLgoKCSogcGFyc2UueSAobWV0aG9kX2hlYWRlcik6ICBGb3IgaW50ZXJmYWNlcywgc2V0IEFDQ19BQlNUUkFDVCAodG8KCW1hdGNoIHdoYXQgSkRLIDEuMiBkb2VzKSwgYnV0IGRvbid0IHNldCBBQ0NfUFVCTElDLgoKU2F0IE1hciAxMyAxODoxNjozNCAxOTk5ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAY3lnbnVzLmNvbT4KCgkqIGxleC5jIChqYXZhX3JlYWRfY2hhcik6ICBVTkdFVCBpbnZhbGlkIG5vbi1pbml0aWFsIHV0ZjggY2hhcmFjdGVyLgoJKiBsZXguaCAoVU5HRVRDKTogIENoYW5nZSBtaXNsZWFkaW5nIG1hY3JvLgoKMTk5OS0wMy0xMiAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBwYXJzZS55IChqYXZhX3N0YWJpbGl6ZV9yZWZlcmVuY2UpOiBSZXR1cm4gTk9ERSB3aGVuIHBhdGNoaW5nIGEKCUNPTVBPVU5EX0VYUFIuCgkoamF2YV9jb21wbGV0ZV9saHMpOiBQdXQgcGFyZW50aGVzaXMgYXJvdW5kIHRydXRoIHZhbHVlcy4KCjE5OTktMDMtMTIgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogY2xhc3MuYyAobGF5b3V0X2NsYXNzX21ldGhvZCk6IERvbid0IG1ha2UgcnRsIGZvciBpbnRlcmZhY2UKCW1ldGhvZHMuCgkqIHBhcnNlLmggKEdFVF9UWVBFX05BTUUpOiBOZXcgbWFjcm8uCgkqIHBhcnNlLnkgKGlmX3RoZW5fc3RhdGVtZW50Oik6IEZpeGVkIGluZGVudGF0aW9uLgoJKGlmX3RoZW5fZWxzZV9zdGF0ZW1lbnQ6KTogTGlrZXdpc2UuCgkoZm9yX3N0YXRlbWVudDopOiBGaXhlZCBzcGFjaW5nLgoJKHRyeV9zdGF0ZW1lbnQ6KTogRml4ZWQgaW5kZW50YXRpb24uCgkoY3JlYXRlX2ludGVyZmFjZSk6IERvbid0IGZvcmNlIGludGVyZmFjZXMgdG8gYmUgYWJzdHJhY3QuCgkobWV0aG9kX2hlYWRlcik6IEFic3RyYWN0IG1ldGhvZHMgYXJlIE9LIGluIGludGVyZmFjZXMuCgkoZGVjbGFyZV9sb2NhbF92YXJpYWJsZXMpOiBGaXhlZCB0eXBvIGluIGNvbW1lbnQuCgkoamF2YV9jb21wbGV0ZV9leHBhbmRfbWV0aG9kKTogRml4ZWQgaW5kZW50YXRpb24uCgkocmVzb2x2ZV9xdWFsaWZpZWRfZXhwcmVzc2lvbl9uYW1lKTogVXNlIEdFVF9UWVBFX05BTUUgdG8gcmVwb3J0Cglub24gYWNjZXNzaWJsZSBmaWVsZHMuCgkoamF2YV9zdGFiaWxpemVfcmVmZXJlbmNlKTogTmV3IGZ1bmN0aW9uLgoJKGphdmFfY29tcGxldGVfbGhzKTogRml4ZWQgaW5kZW50YXRpb24uIFVzZQoJamF2YV9zdGFiaWxpemVfcmVmZXJlbmNlIGluIGNvbXBvdW5kIGFzc2lnbmVtZW50LiBJbnNlcnQgdGhlCgljYXN0LiBJZiBub3QgcHJvY2Vzc2luZyBgKycgZml4IHN0cmluZyBjb25zdGFudHMgYmVmb3JlIHByb2Nlc3NpbmcKCWJpbm9wLgoKRnJpIE1hciAxMiAxOTo0Mjo1NSAxOTk5ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBjb25zdGFudHMuYyAoZmluZF9jbGFzc19vcl9zdHJpbmdfY29uc3RhbnQpOiBDYXN0IHZhcmlhYmxlIGBqJwoJdG8gYSBgandvcmQnIHdoZW4gY29tcGFyaW5nIGFnYWluc3Qgb25lLgoKCSogZXhwci5jIChqYXZhX2xhbmdfZXhwYW5kX2V4cHIpOiBSZW1vdmUgdW51c2VkIHZhcmlhYmxlcwoJYGhhc19maW5hbGx5X3AnIGFuZCBgb3AwJy4KCgkqIGdqYXZhaC5jIChwcmludF9maWVsZF9pbmZvKTogQ2FzdCBhIHZhbHVlIHRvIGppbnQgd2hlbiBjb21wYXJpbmcKCWFnYWluc3Qgb25lLiAgTGlrZXdpc2UgZm9yIGEgamxvbmcuCgkoYWRkX25hbWVsZXQpOiBMaWtld2lzZSBjYXN0IGEgYHNpemVvZicgdG8gYW4gaW50IHdoZW4gY29tcGFyaW5nCglhZ2FpbnN0IGEgc2lnbmVkIHF1YW50aXR5LgoKCSogamNmLWR1bXAuYyAocHJpbnRfc2lnbmF0dXJlX3R5cGUpOiBSZW1vdmUgdW51c2VkIHZhcmlhYmxlIGBkaWdpdCcuCgkocHJpbnRfc2lnbmF0dXJlKTogRG9uJ3QgbmVlZGxlc3NseSBkZXJlZmVyZW5jZSB2YXJpYWJsZSBgc3RyJwoKCSogamNmLXJlYWRlci5jIChnZXRfYXR0cmlidXRlKTogTWFyayB2YXJpYWJsZXMgYG1heF9zdGFjaycgYW5kCglgbWF4X2xvY2Fscycgd2l0aCBBVFRSSUJVVEVfVU5VU0VELgoJKGpjZl9wYXJzZV9jbGFzcyk6IExpa2V3aXNlIGZvciB2YXJpYWJsZSBgaW5kZXgnLgoKCSogcGFyc2UuaCAocmV2ZXJzZV9qZGVwX2xpc3QpOiBSZW1vdmUgc3RhdGljIHByb3RvdHlwZS4KCgkqIHBhcnNlLnkgKGJ1aWxkX2p1bXBfdG9fZmluYWxseSk6IFJlbW92ZSBwcm90b3R5cGUgYW5kIGRlZmluaXRpb24uCgkocmV2ZXJzZV9qZGVwX2xpc3QpOiBBZGQgc3RhdGljIHByb3RvdHlwZS4KCgkqIHR5cGVjay5jIChjb252ZXJ0X2llZWVfcmVhbF90b19pbnRlZ2VyKTogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZXMKCWBhc3NpZ25tZW50JyBhbmQgYGV4cHJfZGVjbCcuCgoJKiB2ZXJpZnkuYyAodmVyaWZ5X2p2bV9pbnN0cnVjdGlvbnMpOiBSZW1vdmUgdW51c2VkIGxhYmVsIGBiYWRfbGRjJy4KCjE5OTktMDMtMTIgIEFuZHJldyBIYWxleSAgPGFwaEBjeWdudXMuY29tPgoKCSogamNmLXBhdGguYyAoYWRkX2VudHJ5KTogYWxsb2NhIGxlbisyIHJhdGhlciB0aGFuIGxlbisxIGJ5dGVzOwoJd2UnbGwgbmVlZCBhIGRpcmVjdG9yeSBzZXBhcmF0b3IgYW5kIGEgbnVsbCBjaGFyYWN0ZXIuCgpXZWQgTWFyIDEwIDIzOjIwOjExIDE5OTkgIFBlciBCb3RobmVyICA8Ym90aG5lckBjeWdudXMuY29tPgoKCSogamNmLXdyaXRlLmMgKGdlbmVyYXRlX2J5dGVjb2RlX2luc25zKTogIEhhbmRsZSBfX2J1aWx0aW5fZm1vZCwgZm9yICUuCgogIFR1ZSBNYXIgIDkgMTE6NTI6MDggMTk5OSAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBwYXJzZS55IChtZXRob2RfaGVhZGVyKTogRG9uJ3Qgc2V0IEFDQ19BQlNUUkFDVCBmbGFncyBvbgoJaW50ZXJmYWNlcy4KCkZyaSBNYXIgIDUgMTU6MTc6MjkgMTk5OSAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGN5Z251cy5jb20+CgoJKiBsZXguYyAoamF2YV9wYXJzZV9lbmRfY29tbWVudCk6ICBUYWtlIGV4dHJhIHBhcmFtZXRlciAobmV4dCBjaGFyKS4KCgkqIGNsYXNzLmMgKGJ1aWxkX3V0ZjhfcmVmKTogIEZpeCBwb3NzaWJsZSBuYW1lIGNsYXNzL2FtYmlndWl0eS4KCgkqIGNsYXNzLmMgKGxheW91dF9jbGFzc19tZXRob2QpOiAgQSBzdGF0aWMgbWV0aG9kIGluIGEgYmFzZSBjbGFzcwoJaXMgbmV2ZXIgb3ZlcnJpZGRlbiwgc28gdHJlYXQgaXQgbGlrZSBpdCBkb2Vzbid0IGV4aXN0LgoJSG93ZXZlciwgZG8gY29tcGxhaW4gYWJvdXQgcHJpdmF0ZSBub24tc3RhdGljIG1ldGhvZCBvdmVycmlkaW5nCglwdWJsaWMgc3RhdGljIG1ldGhvZC4KCgkqIHBhcnNlLnk6ICBEb24ndCBzZXQgdW51c2VkIElOSVRJQUxJWkVEX1AgZmxhZy4KCSogamF2YS10cmVlLmggKElOSVRJQUxJWkVEX1ApOiAgUmVtb3ZlZCBuby1sb25nZXIgbmVlZGVkIGZsYWcuCgoJKiBwYXJzZS55IChmaW5kX2V4cHJfd2l0aF93ZmwpOiAgT3B0aW1pemUgdGFpbC1jYWxscy4KCShidWlsZF9hcnJheV9mcm9tX25hbWUpOiAgUmUtb3JkZXIgJmluZGV4W3N0cmluZ10gdG8gJnN0cmluZ1tpbmRleF0uCgoJKiBwYXJzZS55IChqYXZhX2NvbXBsZXRlX2xocyk6ICBEb24ndCBjYWxsIHBhdGNoX2Fzc2lnbm1lbnQgaWYgcmhzIGlzCgllcnJvcl9tYXJrIChpdCBtaWdodCBjYXRjaCBtb3JlIGVycm9ycywgYnV0IGl0IGlzIG1vcmUgbGlrZWx5IHRvIGxvc2UpLgoKU2F0IE1hciAgNiAxMToxNzoxNiAxOTk5ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBNYWtlZmlsZS5pbiAoamNmLXBhcnNlLm8pOiBEZXBlbmQgb24gJChQQVJTRV9IKS4KCShwYXJzZS1zY2FuLm8pOiBEZXBlbmQgb24gdG9wbGV2LmguCgoJKiBjbGFzcy5jIChtYWtlX21ldGhvZF92YWx1ZSk6IEFkZCBwcm90b3R5cGUuICBNYWtlIGl0IHN0YXRpYy4KCVJlbW92ZSB1bnVzZWQgc2Vjb25kIGFyZ3VtZW50LCBjYWxsZXIgY2hhbmdlZC4KCgkqIGV4cHIuYyAoamF2YV9sYW5nX2V4cGFuZF9leHByKTogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZQoJYHJldHVybl9sYWJlbCcuCgoJKiBqYXZhLXRyZWUuaDogRG9uJ3QgcHJvdG90eXBlIGZpbmRfaW5fY3VycmVudF96aXAuCglBZGQgcHJvdG90eXBlcyBmb3IgdmVyaWZ5X2NvbnN0YW50X3Bvb2wsIHN0YXJ0X2phdmFfbWV0aG9kLAoJZW5kX2phdmFfbWV0aG9kLCBnaXZlX25hbWVfdG9fbG9jYWxzLCBleHBhbmRfYnl0ZV9jb2RlLAoJb3Blbl9pbl96aXAsIHNldF9jb25zdGFudF92YWx1ZSwgZmluZF9jb25zdGFudDEsIGZpbmRfY29uc3RhbnQyLAoJZmluZF91dGY4X2NvbnN0YW50LCBmaW5kX3N0cmluZ19jb25zdGFudCwgZmluZF9jbGFzc19jb25zdGFudCwKCWZpbmRfZmllbGRyZWZfaW5kZXgsIGZpbmRfbWV0aG9kcmVmX2luZGV4LCB3cml0ZV9jb25zdGFudF9wb29sLAoJY291bnRfY29uc3RhbnRfcG9vbF9ieXRlcyBhbmQgZW5jb2RlX25ld2FycmF5X3R5cGUuCgoJKiBqY2YtZHVtcC5jOiBSZW1vdmUgdW51c2VkIHZhcmlhYmxlIGBMT05HX3RlbXAnLgoKCSogamNmLXBhcnNlLmM6IEluY2x1ZGUgcGFyc2UuaC4KCShqY2ZfcGFyc2Vfc291cmNlKTogUmVtb3ZlIHVudXNlZCBwYXJhbWV0ZXIsIGFsbCBjYWxsZXJzIGNoYW5nZWQuCgkoamNmX2ZpZ3VyZV9maWxlX3R5cGUpOiBBZGQgc3RhdGljIHByb3RvdHlwZS4KCShmaW5kX2luX2N1cnJlbnRfemlwKTogTGlrZXdpc2UuICBBbHNvIHJlbW92ZSB1bnVzZWQgcGFyYW1ldGVyLAoJYWxsIGNhbGxlcnMgY2hhbmdlZC4KCShyZWFkX2NsYXNzKTogSW5pdGlhbGl6ZSB2YXJpYWJsZSBgc2F2ZWRfcG9zJy4KCgkqIGpjZi1yZWFkZXIuYyAoamNmX3BhcnNlX3ByZWFtYmxlKTogTWFyayB2YXJpYWJsZXMKCWBtaW5vcl92ZXJzaW9uJyBhbmQgYG1ham9yX3ZlcnNpb24nIHdpdGggQVRUUklCVVRFX1VOVVNFRC4KCgkqIGxleC5jIChqYXZhX2lzX2VvbCk6IFdyYXAgcHJvdG90eXBlIGFuZCBkZWZpbml0aW9uIGluICFKQzFfTElURS4KCShqYXZhX2luaXRfbGV4KTogV3JhcCB2YXJpYWJsZSBgamF2YV9sYW5nX2ltcG9ydGVkJyBpbiAhSkMxX0xJVEUuCgkoamF2YV9wYXJzZV9kb2Nfc2VjdGlvbik6IEluaXRpYWxpemUgdmFyaWFibGUgYHNlZW5fc3RhcicuCgkoamF2YV9sZXgpOiBXcmFwIHZhcmlhYmxlIGBudW1iZXJfYmVnaW5uaW5nJyBpbiAhSkMxX0xJVEUuCgkoamF2YV9sZXhfZXJyb3IpOiBNYXJrIHBhcmFtZXRlcnMgYG1zZycgYW5kIGBmb3J3YXJkJyB3aXRoCglBVFRSSUJVVEVfVU5VU0VELgoJKGphdmFfZ2V0X2xpbmVfY29sKTogTWFyayBwYXJhbWV0ZXJzIGBmaWxlbmFtZScgYW5kIGBsaW5lJyB3aXRoCglBVFRSSUJVVEVfVU5VU0VELgoKCSogcGFyc2Utc2Nhbi55OiBJbmNsdWRlIHRvcGxldi5oLgoJKHl5ZXJyb3IpOiBNYXJrIHBhcmFtZXRlciBgbXNnJyB3aXRoIEFUVFJJQlVURV9VTlVTRUQuCgoJKiBwYXJzZS5oOiB1c2UgYHN0cnVjdCBKQ0YnLCBub3QgcGxhaW4gYEpDRicuCgkoamF2YV9wYXJzZXJfY29udGV4dF9zYXZlX2dsb2JhbCwgamF2YV9leHBhbmRfY2xhc3NlcwoJamF2YV9wYXJzZXJfY29udGV4dF9yZXN0b3JlX2dsb2JhbCwgamF2YV9wYXJzZSk6IEFkZCBwcm90b3R5cGVzLgoKCSogdHlwZWNrLmMgKGNvbnZlcnRfaWVlZV9yZWFsX3RvX2ludGVnZXIpOiBSZW1vdmUgdW51c2VkIHZhcmlhYmxlCglgbm9kZScuCgpXZWQgRmViIDI0IDE2OjEzOjU5IDE5OTkgIFBlciBCb3RobmVyICA8Ym90aG5lckBkZW5lYi5jeWdudXMuY29tPgoKCSogIGNoZWNrLWluaXQuYyAoY2hlY2tfaW5pdCk6ICBDT1BZTiB0YWtlcyB3b3JkIGNvdW50LCBub3QgYml0IGNvdW50LgoKRnJpIEZlYiAyNiAxNDowNjoyMSAxOTk5ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAY3lnbnVzLmNvbT4KCgkqIHR5cGVjay5jIChjb252ZXJ0X2llZWVfcmVhbF90b19pbnRlZ2VyKTogIFVzZSBzYXZlX2V4cHIgaW5zdGVhZCBvZgoJZXhwbGljaXQgYnVpbGRfZGVjbC4gIChBdm9pZHMgY3Jhc2ggaW4gcmVsb2FkIHdoZW4gb3B0aW1pemluZy4pCgpUaHUgRmViIDI1IDIxOjA1OjA0IDE5OTkgIFBlciBCb3RobmVyICA8Ym90aG5lckBjeWdudXMuY29tPgoKCSogZGVjbC5jIChjb21wbGV0ZV9zdGFydF9qYXZhX21ldGhvZCk6ICBIYW5kbGUgc3luY2hyb25pemVkIG1ldGhvZAoJZXZlbiB3aGVuIGNvbXBpbGluZyBmcm9tIGJ5dGVjb2RlLgoKMTk5OS0wMi0yNiAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgoKCSogZ2phdmFoLmMgKGFkZF9jbGFzc19kZWNsKTogT25seSBnZW5lcmF0ZSBgI2luY2x1ZGUnIGlmIG91dGVyCgljbGFzcyBpcyBub3QgdGhlIG5hbWUgb2YgdGhlIGNsYXNzIHdlIGFyZSBwcm9jZXNzaW5nLiAgQ29ycmVjdGx5CglhcHBlbmQgYC5oJyBpbiAjaW5jbHVkZS4KCShwcm9jZXNzX2ZpbGUpOiBDbGVhbiB1cCBuZXdsaW5lcyBhcm91bmQgZ2VuZXJhdGVkIGAjaW5jbHVkZSdzLgoJKGRlY29kZV9zaWduYXR1cmVfcGllY2UpOiBDb3JyZWN0bHkgaGFuZGxlIGlubmVyIGNsYXNzZXMuCgkoc3RydWN0IGluY2x1ZGUpOiBOZXcgc3RydWN0dXJlLgoJKGFsbF9pbmNsdWRlcyk6IE5ldyBnbG9iYWwuCgkocHJpbnRfaW5jbHVkZSk6IE5ldyBmdW5jdGlvbi4KCShhZGRfY2xhc3NfZGVjbCk6IFVzZSBpdC4KCShwcm9jZXNzX2ZpbGUpOiBMaWtld2lzZS4KCShhZGRfY2xhc3NfZGVjbCk6IEdlbmVyYXRlIGluY2x1ZGUgZm9yIGphdmEtYXJyYXkuaCBpZiBhcnJheQoJc2Vlbi4KCShwcm9jZXNzX2ZpbGUpOiBEb24ndCBnZW5lcmF0ZSBqYXZhLWFycmF5LmggaW5jbHVkZS4KCgkqIGdqYXZhaC5jIChhZGRfbmFtZWxldCk6IENoZWNrIGZvciBzdGFuZGFyZCBwYWNrYWdlIG5hbWVzIGhlcmUuCgkoYWRkX2NsYXNzX2RlY2wpOiBEb24ndCBjaGVjayBmb3Igc3RhbmRhcmQgcGFja2FnZSBuYW1lcyBoZXJlLgoKMTk5OS0wMi0yNSAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgoKCSogcGFyc2UueSAocmVhZF9pbXBvcnRfZGlyKTogVXNlIGB8PScsIG5vdCBgKz0nLCB0byBzZXQgYGZvdW5kJy4KCVdoZW4gcmVhZGluZyBhIHppcCBmaWxlLCBvbmx5IHVzZSBzdHJuY21wIGlmIGJvdGggc3RyaW5ncyBhcmUKCWJpZ2dlciB0aGFuIHRoZSBidWZmZXIgbGVuZ3RoLiAgSW5pdGlhbGl6ZSBgaycgd2hlbiBsb29waW5nCgl0aHJvdWdoIHppcCBmaWxlLgoKMTk5OS0wMi0yNCAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgoKCSogZ2phdmFoLmMgKHN0cnVjdCBuYW1lbGV0KTogTmV3IHN0cnVjdHVyZS4KCShhZGRfbmFtZWxldCk6IE5ldyBmdW5jdGlvbi4KCShwcmludF9uYW1lbGV0KTogTmV3IGZ1bmN0aW9uLgoJKHByaW50X2NsYXNzX2RlY2xzKTogVXNlIGFkZF9uYW1lbGV0IGFuZCBwcmludF9uYW1lbGV0IHRvIGdlbmVyYXRlCgluYW1lc3BhY2VzIGFuZCBub3QgY2xhc3Nlcy4KCShtZXRob2RfcHJpbnRlZCk6IE5ldyBnbG9iYWwuCgkoSEFORExFX0VORF9NRVRIT0QpOiBFeGFtaW5lIG1ldGhvZF9wcmludGVkLgoJKHByaW50X21ldGhvZF9pbmZvKTogU2V0IG1ldGhvZF9wcmludGVkIHdoZW4gcmVxdWlyZWQuICBQcmludAoJZXJyb3IgaWYgZnVuY3Rpb24gdG8gYmUgaWdub3JlZCBpcyBtYXJrZWQgdmlydHVhbC4gIEhhbmRsZSAkZmluaXQkCgltZXRob2QuCgkoTUVUSE9EX0lTX0ZJTkFMKTogTmV3IG1hY3JvLgoJKHByaW50X2ZpZWxkX2luZm8pOiBVc2UgaXQuCgkoSEFORExFX01FVEhPRCk6IENsZWFyIG1ldGhvZF9wcmludGVkLgoJKG1ldGhvZF9wYXNzKTogTmV3IGdsb2JhbC4KCShIQU5ETEVfRU5EX0ZJRUxEKTogQ2FsbCBhZGRfY2xhc3NfZGVjbCBvbiB0aGUgZmlyc3QgcGFzcy4KCShwcm9jZXNzX2ZpbGUpOiBEbyB0d28gcGFzc2VzIG92ZXIgYm90aCBmaWVsZHMgYW5kIG1ldGhvZHMuCgkoSEFORExFX01FVEhPRCk6IEV4YW1pbmUgbWV0aG9kX3Bhc3MuCgkocm9vdCk6IE5ldyBnbG9iYWwuCgkoYWRkX2NsYXNzX2RlY2wpOiBOZXcgZnVuY3Rpb24uCgkocHJpbnRfY2xhc3NfZGVjbHMpOiBEb24ndCBzY2FuIG92ZXIgZW50aXJlIGNvbnN0YW50IHBvb2wuCgoxOTk5LTAyLTIzICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CgoJKiBqdnNwZWMuYyAobGFuZ19zcGVjaWZpY19kcml2ZXIpOiBSZWNvZ25pemUgLWZzeW50YXgtb25seSBhbmQKCWRpc2FibGUgbGlua2luZyBpbiB0aGF0IGNhc2UuCgoxOTk5LTAyLTIwICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CgoJKiBqY2YuaCAoVVRGOF9HRVQpOiBNYXNrIGZpcnN0IGJ5dGUgb2YgMy1ieXRlIGVuY29kaW5nIHdpdGggMHgwZiwKCW5vdCAweDFmLgoKU3VuIEZlYiAyMSAxNDo1NjoxMSAxOTk5ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAoYnVpbGRfcmVzdWx0X2RlY2wpLCBqYXZhLXRyZWUuaDogIE5ldyBtZXRob2QuCgkoY29tcGxldGVfc3RhcnRfamF2YV9tZXRob2QpOiAgSGFuZGxlIHN5bmNocm9uaXplZCBtZXRob2RzLgoJRG9uJ3QgYnVpbGQgREVDTF9SRVNVTFQgaGVyZS4gIChPcmRlcmluZyBkZXBlbmRlbmN5IHByb2JsZW0uKQoJKHN0YXJ0X2phdmFfbWV0aG9kKTogIENhbGwgYnVpbGRfcmVzdWx0X2RlY2wgaGVyZSBpbnN0ZWFkICAuLi4KCSogcGFyc2UueSAoamF2YV9jb21wbGV0ZV9leHBhbmRfbWV0aG9kKTogIC4uLiBhbmQgaGVyZS4KCShleHBhbmRfc3RhcnRfamF2YV9tZXRob2QpOiBEb24ndCBjYWxsIGNvbXBsZXRlX3N0YXJ0X2phdmFfbWV0aG9kIGhlcmUuCgkoamF2YV9jb21wbGV0ZV9leHBhbmRfbWV0aG9kKTogIENhbGwgaXQgaGVyZSBpbnN0ZWFkLgoJKiBwYXJzZS5oIChCVUlMRF9NT05JVE9SX0VOVEVSLCBCVUlMRF9NT05JVE9SX0VYSVQpOiAgTW92ZWQgdG8gLi4KCSogamF2YS10cmVlLmg6ICAuLi4gaGVyZS4KCgkqIGV4cHIuYyAoZm9yY2VfZXZhbHVhdGlvbl9vcmRlcik6ICBGaXggdHlwbywgZG9uJ3QgaGFuZGxlIEFSUkFZX1JFRi4KCSogcGFyc2UueSAoamF2YV9jb21wbGV0ZV9saHMpOiAgRG9uJ3QgY2FsbCBmb3JjZV9ldmFsdWF0aW9uX29yZGVyCglmb3IgQVJSQVlfUkVGIC0gaXQgZG9lc24ndCB3b3JrIHdoZW4gYXJyYXkgYm91bmRzIGFyZSBjaGVja2VkLgoJKHBhdGNoX2FycmF5X3JlZik6ICBIYW5kbGUgaXQgaGVyZSBpbnN0ZWFkLgoKCSogamNmLXdyaXRlLmMgKGdlbmVyYXRlX2NsYXNzZmlsZSk6ICBFbWl0ICJFeGNlcHRpb25zIiBhdHRyaWJ1dGUuCgpGcmkgRmViIDE5IDE1OjM1OjAxIDE5OTkgIFBlciBCb3RobmVyICA8Ym90aG5lckBjeWdudXMuY29tPgoKCUZvcmNlIGxlZnQtdG8tcmlnaHQgZXZhbHVhdGlvbiBvZiBiaW5hcnkgb3BlcmF0aW9ucyBldGMuCgkqIGV4cHIuYyAoZm9yY2VfZXZhbHVhdGlvbl9vcmRlciksIGphdmEtdHJlZS5oOiAgTmV3IGZ1bmN0aW9uLgoJKiBwYXJzZS55IChqYXZhX2NvbXBsZXRlX2xocyk6ICBQYXNzIGJpbmFyeSBvcGVyYXRpb25zLCBwcm9jZWR1cmUKCWNhbGxzLCBhbmQgQVJSQVlfUkVGcyB0byBmb3JjZV9ldmFsdWF0aW9uX29yZGVyLgoJKHZhcmlvdXMpOiAgU2V0IFRSRUVfU0lERV9FRkZFQ1RTIG1vcmUgY2FyZWZ1bGx5LgoKCVRvbGVyYXRlIHJhbmRvbSAobm9uLVVURjgpIGVuY29kaW5nIGluIGNvbW1lbnRzIHdpdGhvdXQgY29tcGxhaW5pbmcuCgkqIGxleC5jIChqYXZhX3JlYWRfY2hhcik6ICBSZXR1cm4gMHhGRkZFIGlmIGJhZCBVVEY4IGVuY29kaW5nLgoJKGphdmFfaXNfZW9sKTogIEhhbmRsZSAnXHInIGZvbGxvd2VkIGJ5ICdcbicgaW5zdGVhZCBvZiB2aWNlIHZlcnNhLgoKCSogcGFyc2UueSAocmVzb2x2ZV9xdWFsaWZpZWRfZXhwcmVzc2lvbl9uYW1lKTogIEhhbmRsZSBlcnJvcl9tYXJrLgoJKGphdmFfY29tcGxldGVfbm9kZSBjYXNlIEVYUFJfV0lUSF9GSUxFX0xPQ0FUSU9OKTogIExpa2V3aXNlLgoKCSogcGFyc2UueSAoamF2YV9jb21wbGV0ZV9saHMpOiAgSWdub3JlIGFuIGVtcHR5IHN0YXRlbWVudCBpbiBhCglDT01QT1VORF9FWFBSLiAgRG9uJ3QgY29tcGxhaW4gYWJvdXQgZW1wdHkgc3RhdGVtZW50IGFmdGVyIHJldHVybi4KCkZyaSBGZWIgMTkgMTM6MDA6NTYgMTk5OSAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGN5Z251cy5jb20+CgoJKiBwYXJzZS55IChvYnRhaW5faW5jb21wbGV0ZV90eXBlKTogIERvbid0IHdyYXAgdW5rbm93biB0eXBlcwoJaW4gVFJFRV9MSVNUIC0ganVzdCBjaGFpbiB0aGUgUE9JTlRFUl9UWVBFcyB0b2dldGhlci4KCShyZXNvbHZlX2NsYXNzKTogIElmIHR5cGUgYWxyZWFkeSByZXNvbHZlZCwgcmV0dXJuIGRlY2wuCglBZnRlciByZXNvbHZpbmcsIHVwZGF0ZSBUUkVFX1RZUEUoY2xhc3NfdHlwZSksIGFuZCBuYW1lIChpZiBhcnJheSkuCgkqIHBhcnNlLmggKGRvX3Jlc29sdmVfY2xhc3MpLCBwYXJzZS55OiAgTWFrZSBub24tc3RhdGljLgoJKiBjbGFzcy5jIChtYXliZV9sYXlvdXRfc3VwZXJfY2xhc3MpOiAgVGFrZSB0aGlzX2NsYXNzIGFyZ3VtZW50LgoJRG8gZG9fcmVzb2x2ZV9jbGFzcyBpZiBuZWNlc3NhcnkuCgkobGF5b3V0X2NsYXNzLCBsYXlvdXRfY2xhc3NfbWV0aG9kcyk6IEFkanVzdCBjYWxscyBhcHByb3ByaWF0ZWx5LgoJKiBwYXJzZS5oIChKREVQX1RPX1JFU09MVkUsIEpERVBfUkVTT0xWRURfREVDTCwgSkRFUF9SRVNPTFZFRCwKCUpERVBfUkVTT0xWRURfUCk6ICBSZWRlZmluZWQgZm9yIG5ldyBUUkVFX0xJU1QtbGVzcyBjb252ZW50aW9uLgoJKiB0eXBlY2suYyAoYnVpbGRfamF2YV9hcnJheV90eXBlKTogIERvbid0IGNhbGwgbGF5b3V0X2NsYXNzLgoKV2VkIEZlYiAxNyAxNTo0NzoyMCAxOTk5ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnkgKGNoZWNrX3BrZ19jbGFzc19hY2Nlc3MpOiBBbGxvdyBwcml2YXRlIGNsYXNzIGFjY2VzcwoJd2l0aGluIHRoZSBzYW1lIHBhY2thZ2UuCgkoc3RyaXBfb3V0X3N0YXRpY19maWVsZF9hY2Nlc3NfZGVjbCk6IE5ldyBmdW5jdGlvbi4KCShwYXRjaF91bmFyeW9wKTogQ2FsbCBzdHJpcF9vdXRfc3RhdGljX2ZpZWxkX2FjY2Vzc19kZWNsIG9uICsrLy0tCglvcGVyYXRvciBhcmd1bWVudCBiZWZvcmUgdGVzdGluZyBpdHMgbmF0dXJlLgoKV2VkIEZlYiAgMyAxMjozODo0MyAxOTk5ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAY3lnbnVzLmNvbT4KCgkqIGphdmEtdHJlZS5kZWYgKEZJTkFMTFlfRVhQUik6ICBSZW1vdmVkLiAgKE5vdyB1c2VzIFRSWV9GSU5BTExZX0VYUFIuKQoJKFRSWV9FWFBSKTogIFNpbXBsaWZ5IC0gaXQgbm8gbG9uZ2VyIGhhcyBhIGZpbmFsbHkgY2xhdXNlLgoJKiBjaGVjay1pbml0LmMgKGNoZWNrX2luaXQpOiAgSGFuZGxlIFRSWV9GSU5BTExZX0VYUFIuCglTaW1wbGVyIGhhbmRsaW5nIG9mIFRSWV9FWFBSLCB3aGljaCBubyBsb25nZXIgaGFzIGEgZmluYWxseSBjbGF1c2UuCgkqIGV4cHIuYyAoamF2YV9sYW5nX2V4cGFuZF9leHByKTogIExpa2V3aXNlLgoJKiBqYXZhLXRyZWUuaCAoQ0FUQ0hfRVhQUl9HRVRfRVhQUik6ICBSZW1vdmVkIC0gbm8gbG9uZ2VyIG5lZWRlZC4KCSogcGFyc2UuaCAoamF2YV9nZXRfY2F0Y2hfYmxvY2spLCBwYXJzZS55OiAgUmVtb3ZlZCAtIG5vIGxvbmdlciBuZWVkZWQuCgkqIHBhcnNlLnkgKGphdmFfY29tcGxldGVfbGhzKTogIEFkZCBzdXBwb3J0IGZvciBUUllfRklBTkxMWV9FWFBSLgoJKGJ1aWxkX3RyeV9zdGF0ZW1lbnQpOiAgUmVtb3ZlIGZpbmFsbHkgcGFyYW1ldGVyIGFuZCBoYW5kbGluZy4KCShidWlsZF90cnlfZmluYWxseV9zdGF0ZW1lbnQpOiAgTmV3IGZ1bmN0aW9uLgoJKHBhdGNoX3RyeV9zdGF0ZW1lbnQpOiAgIE5vIGxvbmdlciBuZWVkIHRvIHN1cHBvcnQgZmluYWxseSBjbGF1c2UuCgkodHJ5X3N0YXRlbWVudCk6ICBVcGRhdGUgZ3JhbW1hciBhY3Rpb24gcnVsZXMuCgkqIGpjZi13cml0ZS5jIChnZW5lcmF0ZV9ieXRlY29kZV9pbnNucyk6ICBIYW5kbGUgVFJZX0ZJTkFMTFlfRVhQUi4KCVNpbXBsZXIgaGFuZGxpbmcgb2YgVFJZX0VYUFIsIHdoaWNoIG5vIGxvbmdlciBoYXMgYSBmaW5hbGx5IGNsYXVzZS4KCjE5OTgtMTEtMjYgIEFuZHJldyBIYWxleSAgPGFwaEB2aWFncmEuY3lnbnVzLmNvLnVrPgoKCSogamNmLXBhcnNlLmMgKGdldF9jb25zdGFudCk6IEFkZCBicmFjZXMgYXJvdW5kIGNvbXB1dGF0aW9uIG9mICdkJwoJd2hlbiBSRUFMX0FSSVRITUVUSUMgaXMgbm90IGRlZmluZWQuICBbT2N0IDI2IGZpeCBnb3Qgb3ZlcndyaXR0ZW4gLVBCXQoKMTk5OS0wMi0xNyAgQW5kcmV3IEhhbGV5ICA8YXBoQGN5Z251cy5jb20+CgoJKiBjbGFzcy5jIChidWlsZF91dGY4X3JlZik6IEJhY2sgb3V0IGJyb2tlbiBwYXRjaCB3aGljaCB3YXMKCWludGVuZGVkIHRvIHRvIG91dHB1dCBzaWduYXR1cmVzIHVzaW5nICcuJyBhcyBhIHNlcGFyYXRvci4KCgkqIGNsYXNzLmMgKG1ha2VfY2xhc3NfZGF0YSk6IE91dHB1dCBzaWduYXR1cmVzIHVzaW5nICcuJyBhcyBhCglzZXBhcmF0b3IsIHJhdGhlciB0aGFuICcvJy4KCShtYW5nbGVkX2NsYXNzbmFtZSk6IExpa2V3aXNlLgoJKG1ha2VfZmllbGRfdmFsdWUpOiBMaWtld2lzZS4KCShtYWtlX21ldGhvZF92YWx1ZSk6IExpa2V3aXNlLgoJKiBjb25zdGFudHMuYyAoYWxsb2NfY2xhc3NfY29uc3RhbnQpOiBMaWtld2lzZS4KCSogZXhwci5jIChidWlsZF9pbnZva2VpbnRlcmZhY2UpOiBMaWtld2lzZS4KClRodSBGZWIgMTEgMjE6MjU6NTEgMTk5OSAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBwYXJzZS55ICh2YWxpZF9idWlsdGluX2Fzc2lnbmNvbnZfaWRlbnRpdHlfd2lkZW5pbmdfcCk6IEdvdCByaWQKCW9mIGFuIGFuY2llbnQgd29ya2Fyb3VuZC4KCldlZCBGZWIgMTAgMjM6Mjc6MzMgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSoganZzcGVjLmMgKHhtYWxsb2MpOiBLaWxsIHRoZSBwcm90b3R5cGUuICBJdCBkb2VzIG5vdCBiZWxvbmcKCWhlcmUgYW55bW9yZS4KCjE5OTktMDItMTAgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogbGV4LmMgKHl5bGV4KTogRW5jb2RlIFwwIGFzIFVURjguCgoxOTk5LTAyLTEwICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CgoJKiBqdnNwZWMuYyAobGFuZ19zcGVjaWZpY19kcml2ZXIpOiBVc2UgbGliZ2NqLCBub3QgbGliamF2YS4KCSogTWFrZWZpbGUuaW4gKGpjZi1wYXRoLm8pOiBEZWZpbmUgTElCR0NKX1pJUF9GSUxFLgoJKGxpYmdjal96aXApOiBSZW5hbWVkLgoJKiBqY2YtcGF0aC5jIChhZGRfZW50cnkpOiBVc2UgTElCR0NKX1pJUF9GSUxFLCBub3QKCUxJQkpBVkFfWklQX0ZJTEUuCgkoamNmX3BhdGhfaW5pdCk6IFVzZSBMSUJHQ0pfWklQX0ZJTEUuCgoJKiBqdnNwZWMuYyAoVEhSRUFEX05BTUUpOiBSZW5hbWVkIC1scXRocmVhZHMgdG8gLWxnY2pjb29wLgoJKEdDX05BTUUpOiBSZW5hbWVkIC1sZ2MgdG8gLWxnY2pnYy4KClR1ZSBGZWIgIDkgMTk6MzE6MDkgMTk5OSAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBsZXguYyAoamF2YV9sYW5nX2Nsb25lYWJsZSk6IEluaXRpYWxpemUuCgkqIHBhcnNlLnkgKGphdmFfbGFuZ19jbG9uZWFibGUpOiBOZXcgc3RhdGljIHZhcmlhYmxlLgoJKHF1YWxpZnlfYW1iaWd1b3VzX25hbWUpOiBUYWtlIENPTlZFUlRfRVhQUiBpbnRvIGFjY291bnQgd2hlbgoJZG9pbmcgb25lIG1vcmUgcXVhbGlmaWNhdGlvbiByb3VuZC4KCSh2YWxpZF9yZWZfYXNzaWduY29udl9jYXN0X3ApOiBSZWplY3QgbnVsbCBzb3VyY2Ugb3IKCWRlc3RpbmF0aW9uLiBBbGxvdyBhbiBhcnJheSB0byBiZSBjYXN0IGludG8gamF2YS5sYW5nLkNsb25lYWJsZS4KCShwYXRjaF9jYXN0KTogU3dhcHBlZCB0d28gZmlyc3QgYXJndW1lbnRzIHRvIGZpcnN0IGNhbGwgdG8KCXZhbGlkX3JlZl9hc3NpZ25jb252X2Nhc3RfcC4KCk1vbiBGZWIgIDggMTE6NTA6NTAgMTk5OSAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBwYXJzZS5oOiBERUNMX1AgcmVuYW1lZCBKREVDTF9QLgoJKiBwYXJzZS55OiBERUNMX1AgcmVwbGFjZWQgYnkgSkRFQ0xfUC4KCShidWlsZF9hcnJheV9mcm9tX25hbWUpOiBBbHdheXMgdXNlIHBvaW50ZXIncyB0eXBlLgoJKHBhdGNoX2JjX3N0YXRlbWVudCk6IEV4dHJhIGNvZGUgdG8gc2VhcmNoIGNvbnRpbnVlIHRhcmdldCBpbiBhCglmb3IgbG9vcC4gRml4ZWQgY29tbWVudHMuIENvbnRpbnVlIHRhcmdldCBpcyBjdXJyZW50IGxvb3Agd2hlbgoJdW5sYWJlbGVkLgoKMTk5OS0wMi0wNSAgQW5kcmV3IEhhbGV5ICA8YXBoQGN5Z251cy5jb20+CgoJKiBjbGFzcy5jIChtYWtlX2NsYXNzX2RhdGEpOiBUaGUgc3VwZXJjbGFzcyBvZiBhbiBpbnRlcmZhY2Ugc2hvdWxkCgliZSBudWxsLCBub3QgY2xhc3MgT2JqZWN0LgoKCSogbGV4LmMgKGphdmFfbGV4KTogU2lnbiBleHRlbmQgaGV4IGxpdGVyYWxzLgoKMTk5OS0wMi0wNCAgQW5kcmV3IEhhbGV5ICA8YXBoQGN5Z251cy5jb20+CgoJKiBjbGFzcy5jIChidWlsZF91dGY4X3JlZik6IE91dHB1dCBzaWduYXR1cmVzIHVzaW5nICcuJyBhcyBhCglzZXBhcmF0b3IsIHJhdGhlciB0aGFuICcvJy4KCShtYWtlX2NsYXNzX2RhdGEpOiBMaWtld2lzZS4KCldlZCBGZWIgIDMgMjI6NTA6MTcgMTk5OSAgTWFyYyBFc3BpZSA8TWFyYy5Fc3BpZUBsaWFmYS5qdXNzaWV1LmZyPgoKCSogTWFrZS1sYW5nLmluICgkKEdDSikoZXhlZXh0KSk6IFJlbW92ZSBjaG9vc2UtdGVtcC5vLCBwZXhlY3V0ZS5vIGFuZAoJbWtzdGVtcC5vLiAgR2V0IHRoZW0gZnJvbSBsaWJpYmVydHkgbm93LgoKVHVlIEZlYiAgMiAxOTo0OToxMiAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBqY2YtaW8uYzogRG8gbm90IGluY2x1ZGUgc3lzL3N0YXQuaCBvciBzeXMvd2FpdC5oCgpUdWUgRmViICAyIDIwOjA0OjUwIDE5OTkgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGp2c3BlYy5jICh4bWFsbG9jKTogRml4IHRoZSBwcm90b3R5cGUgdG8gbWF0Y2ggdGhlIG9uZSBvYnRhaW5lZAoJZnJvbSBsaWJpYmVydHkuaAoKVHVlIEZlYiAgMiAxMDozOTo0NyAxOTk5ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAY3lnbnVzLmNvbT4KCglPcHRpbWl6ZTogYHJldHVybiAoYSA/IGIgOiBjKScgYXM6IGBpZiAoYSkgcmV0dXJuIGI7IGVsc2UgcmV0dXJuIGM7Jy4KCSogamNmLXdyaXRlLmMgKGdlbmVyYXRlX2J5dGVjb2RlX3JldHVybik6ICBOZXcgZnVuY3Rpb24uCgkoZ2VuZXJhdGVfYnl0ZWNvZGVfaW5zbnMpOiAgVXNlIGl0LCBmb3IgUkVUVVJOX0VYUFIuCgoJKiBqY2Ytd3JpdGUuYyAoZ2VuZXJhdGVfYnl0ZWNvZGVfaW5zbnMpOiAgRm9yIFJFQUxfQ1NUIHRoYXQgaXMgMCBvciAxLAoJZ2VuZXJhdGUgc3BlY2lhbCBbZmRdY29uc3RfWzAxXSBpbnN0cnVjdGlvbnMuCgoJKiBqY2YtcGFyc2UuYyAoeXlwYXJzZSk6ICBEb24ndCBlbWl0X3JlZ2lzdGVyX2NsYXNzZXMgaWYgLWZzeW50YXgtb25seS4KCgkqIHZlcmlmeS5jICh2ZXJpZnlfanZtX2luc3RydWN0aW9ucyk6ICBEbyBJTlZBTElEQVRFX1BDIGFmdGVyCgloYW5kbGluZyBPUENPREVfbG9va3Vwc3dpdGNoIG9yIE9QQ09ERV90YWJsZXN3aXRjaC4KCk1vbiBGZWIgIDEgMjA6NDQ6NDcgMTk5OSAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGN5Z251cy5jb20+CgoJKiBwYXJzZS55IChwYXRjaF9tZXRob2RfaW52b2NhdGlvbik6ICBIYW5kbGUgY2FsbGluZyBzdGF0aWMgbWV0aG9kcywKCWV2ZW4gaW4gdGhlIGZvcm0gRVhQUi5NRVRIT0QoQVJHUyksIG5vdCBqdXN0IFRZUEUuTUVUSE9EKEFSR1MpLgoKCSogcGFyc2UueSAoamF2YV9jb21wbGV0ZV9saHMpOiAgRG9uJ3QgY29tcGxhaW4gYWJvdXQgdW5yZWFjaGFibGUKCWV4aXQgY29uZGl0aW9uIGluIGEgZG8td2hpbGUgc3RhdGVtZW50LgoKRnJpIEphbiAyOSAxODoxOTowMiAxOTk5ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIGxleC5jIChqYXZhX3JlYWRfY2hhcik6IEZpeGVkIHV0ZjggZGVjb2RpbmcuCgkoamF2YV91bmljb2RlXzJfdXRmOCk6IEZpeGVkIHV0ZjggZW5jb2RpbmcgaW4gdGhlIDB4ODAwLTB4ZmZmZgoJcmFuZ2UuCgkqIHBhcnNlLnkgKHZhbGlkX2J1aWx0aW5fYXNzaWduY29udl9pZGVudGl0eV93aWRlbmluZ19wKTogRml4ZWQKCWNvbW1lbnRzLiBMb2NhbCB2YXJpYWJsZSBgYWxsX3ByaW1pdGl2ZScgaXMgZ29uZS4gQnJvYWRlbmVkCglhY2NlcHRhbmNlIG9mIGAwJyB0byBmbG9hdGluZyBwb2ludCB0YXJnZXRzLiBgbG9uZycgY2FuIG5vdyBiZQoJd2lkZW5lZCB0byBgZG91YmxlJyBvciBgZmxvYXQnLgoJKHZhbGlkX21ldGhvZF9pbnZvY2F0aW9uX2NvbnZlcnNpb25fcCk6IEFkZGVkIGxlYWRpbmcKCWNvbW1lbnQuIEZpeGVkIHRhYnVsYXRpb24uCgkoYnVpbGRfc3RyaW5nX2NvbmNhdGVuYXRpb24pOiBPcHRpbWl6ZSBvdXQgbGVmdCBvciByaWdodCBlbXB0eQoJc3RyaW5nIGNvbnN0YW50cy4KClRodSBKYW4gMjggMTg6NTE6MjYgMTk5OSAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGN5Z251cy5jb20+CgoJKiBqY2Ytd3JpdGUuYyAobG9jYWx2YXJfYWxsb2MpOiAgT25seSBlbWl0IGVudHJ5IGZvcgoJTG9jYWxWYXJpYWJsZVRhYmxlIGlmIGRlYnVnX2luZm9fbGV2ZWwgPiBESU5GT19MRVZFTF9URVJTRS4KCShnZW5lcmF0ZV9ieXRlY29kZV9pbnNucyk6ICBPbmx5IGNhbGwgcHV0X2xpbmVudW1iZXIgaWYKCWRlYnVnX2luZm9fbGV2ZWwgPiBESU5GT19MRVZFTF9OT05FLgoJKiBqdnNwZWMuYyAobGFuZ19zcGVjaWZpY19kcml2ZXIpOiAgSWYgbm8gLU8qIG9yIC1nKiBvcHRpb24KCWlzIHNwZWNpZmllZCwgYWRkIC1nMSAoZm9yIGNvbXBhdGliaWxpdHkgd2loIGphdmFjKS4KClRodSBKYW4gMjggMDk6MTc6NTEgMTk5OSAgSGFucy1QZXRlciBOaWxzc29uICA8aHBAYXhpcy5zZT4KCgkqIGphdmEvTWFrZWZpbGUuaW46IEFkZCBtaXNzaW5nIGRlcGVuZGVuY2llcyBmb3IgamNmLWR1bXAubywKCWdqYXZhaC5vLCBjaGVjay1pbml0Lm8sIGp2LXNjYW4ubwoKTW9uIEZlYiAgMSAwOTo1MDo0OCAxOTk5ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBNYWtlZmlsZS5pbiAoZ2phdmFoLm8pOiBEZXBlbmQgb24gJChDT05GSUdfSCkgYW5kIHN5c3RlbS5oLgoKCSogZ2phdmFoLmM6IEluY2x1ZGUgY29uZmlnLmggYW5kIHN5c3RlbS5oLgoKCSogamF2YW9wLmggKGlubGluZSk6IERvbid0IGRlZmluZSwgaXRzIGhhbmRsZWQgYnkgc3lzdGVtLmguCgkoV09SRF9UT19GTE9BVCwgV09SRFNfVE9fTE9ORywgV09SRFNfVE9fRE9VQkxFKTogQ2hhbmdlIHRoZXNlCglmcm9tIGBpbmxpbmUnIHRvIGBzdGF0aWMgaW5saW5lJy4KCgkqIGpjZi5oIChpbmxpbmUpOiBEb24ndCBkZWZpbmUsIGl0cyBoYW5kbGVkIGJ5IHN5c3RlbS5oLgoKCSogbGV4LmMgKGlubGluZSk6IExpa2V3aXNlLgoKU3VuIEphbiAzMSAyMDozNDoyOSAxOTk5ICBaYWNrIFdlaW5iZXJnICA8emFja0ByYWJpLmNvbHVtYmlhLmVkdT4KCgkqIGxhbmctc3BlY3MuaDogTWFwIC1RbiB0byAtZm5vLWlkZW50LgoKRnJpIEphbiAyOSAxNjo1MTo1NiAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogY2hlY2staW5pdC5jIChjaGVja19pbml0KTogRml4IENMRUFOVVBfUE9JTlRfRVhQUiB0eXBvLgoKMTk5OS0wMS0yOSAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgoKCSogcGFyc2UuaCAoQlVJTERfQVBQRU5EKTogSWYgQVJHIGlzIGEgbm9uLVN0cmluZyBvYmplY3QgcmVmZXJlbmNlLAoJdGhlbiBjYXN0IGl0IHRvIE9iamVjdCBiZWZvcmUgY2FsbGluZyBgYXBwZW5kJyBtZXRob2QuCgpUaHUgSmFuIDI4IDE0OjQ1OjM5IDE5OTkgIFBlciBCb3RobmVyICA8Ym90aG5lckBjeWdudXMuY29tPgoKCSogY2hlY2staW5pdC5jIChjaGVja19ib29sMl9pbml0LCBjaGVja19ib29sX2luaXQsIGNoZWNrX2luaXQpOgoJSGFuZGxlIFRSVVRIX0FORF9FWFBSLCBUUlVUSF9PUl9FWFBSLCBhbmQgVFJVVEhfWE9SX0VYUFIuCgkqIGpjZi13cml0ZS5jIChnZW5lcmF0ZV9ieXRlY29kZV9pbnNucyk6ICBMaWtld2lzZS4KClRodSBKYW4gMjggMTE6NTA6MTEgMTk5OSAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBqY2YtcGFyc2UuYyAoamNmX3BhcnNlKTogRG9uJ3QgcGFyc2UgdGhlIHNhbWUgY2xhc3MgZmlsZSB0d2ljZS4KCSogcGFyc2UueSAocGF0Y2hfY2FzdCk6IEFsbG93IGEgYm9vbGVhbiB0byBiZSBjYXN0IGludG8gYQoJYm9vbGVhbi4KCldlZCBKYW4gMjcgMTA6MTk6MjkgMTk5OSAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBwYXJzZS55OiAoY2xhc3NfZGVjbGFyYXRpb246KTogRml4ZWQgaW5kZW50YXRpb24uCgkoY2xhc3NfbWVtYmVyX2RlY2xhcmF0aW9uOik6IEV4dHJhIGA7JyBhZnRlciBmaWVsZCBkZWNsYXJhdGlvbiBub3cKCWFjY2VwdGVkLgoJKGludGVyZmFjZV9kZWNsYXJhdGlvbjopOiBSZW1vdmVkIGRlYnVnIG1lc3NhZ2VzIGluIGVycm9yIHJlcG9ydHMuCgkocGF0Y2hfYmlub3ApOiBOb2RlcyBjcmVhdGVkIGFuZCByZXR1cm5lZCBpbmhlcml0IHRoZSBvcmlnbmFsCglub2RlJ3MgQ09NUE9VTkRfQVNTSUdOX1AgZmxhZyB2YWx1ZS4KCShwYXRjaF9jYXN0KTogRml4IGNhc3QgZnJvbSBjaGFyIHRvIGZsb2F0aW5nIHBvaW50LgoKTW9uIEphbiAyNSAxNzozOToxOSAxOTk5ICBBbmRyZXcgSGFsZXkgIDxhcGhAY3lnbnVzLmNvbT4KCgkqIGV4Y2VwdC5jLCBqYXZhLWV4Y2VwdC5oIChleHBhbmRfcmVzdW1lX2FmdGVyX2NhdGNoKTogbmV3CglmdW5jdGlvbi4KCSogZXhwci5jIChqYXZhX2xhbmdfZXhwYW5kX2V4cHIpOiBjYWxsIGV4cGFuZF9yZXN1bWVfYWZ0ZXJfY2F0Y2gKCXRvIGJyYW5jaCBiYWNrIHRvIG1haW4gZmxvdyBvZiBjb250cm9sIGFmdGVyIGEgY2F0Y2ggYmxvY2suCgpTYXQgSmFuIDIzIDIzOjAyOjQzIDE5OTkgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIE1ha2VmaWxlLmluIChwYXJzZS5vKTogRGVwZW5kIG9uICQoQ09ORklHX0gpIGFuZAoJJChzcmNkaXIpLy4uL3N5c3RlbS5oLgoJKGNsYXNzLm8pOiBEZXBlbmQgb24gJChQQVJTRV9IKSBhbmQgJChzcmNkaXIpLy4uL291dHB1dC5oLgoJKGpjZi1wYXJzZS5vKTogRGVwZW5kIG9uICQoc3JjZGlyKS8uLi90b3BsZXYuaC4KCShqY2Ytd3JpdGUubyk6IExpa2V3aXNlLgoJKGp2LXNjYW4ubyk6IERlcGVuZCBvbiAkKENPTkZJR19IKSBhbmQgJChzcmNkaXIpLy4uL3N5c3RlbS5oLgoJKG1hbmdsZS5vKTogRGVwZW5kIG9uICQoc3JjZGlyKS8uLi90b3BsZXYuaC4KCShwYXJzZS1zY2FuLm8pOiBEZXBlbmQgb24gJChDT05GSUdfSCkgYW5kICQoc3JjZGlyKS8uLi9zeXN0ZW0uaC4KCSh6ZXh0cmFjdC5vKTogRGVwZW5kIG9uICQoQ09ORklHX0gpIGFuZCAkKHNyY2RpcikvLi4vc3lzdGVtLmguCgoJKiBjbGFzcy5jOiBJbmNsdWRlIG91dHB1dC5oIGFuZCBwYXJzZS5oLgoJKG1hbmdsZWRfY2xhc3NuYW1lKTogQWRkIHRoZSBgY29uc3QnIGtleXdvcmQgdG8gYSBjaGFyKi4KCShmaW5kX25hbWVkX21ldGhvZCk6IEhpZGUgdW51c2VkIGZ1bmN0aW9uIGRlZmluaXRpb24uCgkoYnVpbGRfdXRmOF9yZWYpOiBDaGFuZ2UgdHlwZSBvZiB2YXJpYWJsZSBgYycgdG8gdW5zaWduZWQgY2hhci4KCVVzZSBJU0FMUEhBL0lTRElHSVQgaW5zdGVhZCBvZiBpc2FscGhhL2lzZGlnaXQuCgkoYnVpbGRfY2xhc3NfcmVmKTogQWRkIHRoZSBgY29uc3QnIGtleXdvcmQgdG8gYSBjaGFyKi4KCShsYXlvdXRfY2xhc3NfbWV0aG9kKTogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZSBgYnVmJy4KCgkqIGRlY2wuYyAoZmluZF9sb2NhbF92YXJpYWJsZSk6IFJlbW92ZSB1bnVzZWQgdmFyaWFibGUgYHJ0bCcuCgkocHVzaGRlY2wpOiBMaWtld2lzZSBmb3IgdmFyaWFibGVzIGBkaWZmZXJlbnRfYmluZGluZ19sZXZlbCcgYW5kCglgb2xkZ2xvYmFsJy4KCShwdXNobGV2ZWwpOiBNYXJrIHBhcmFtZXRlciBgdW51c2VkJyB3aXRoIEFUVFJJQlVURV9VTlVTRUQuCgkobWF5YmVfYnVpbGRfY2xlYW51cCk6IExpa2V3aXNlIGZvciBwYXJhbWV0ZXIgYGRlY2wnLgoKCSogZXhjZXB0LmMgKGV4cGFuZF9zdGFydF9qYXZhX2hhbmRsZXIpOiBNYXJrIHBhcmFtZXRlciBgcmFuZ2UnCgl3aXRoIEFUVFJJQlVURV9VTlVTRUQuCgoJKiBleHByLmM6IEluY2x1ZGUgZXhjZXB0LmguCgkocG9wX3R5cGUpOiBSZW1vdmUgdW51c2VkIHZhcmlhYmxlIGBpJy4KCShwb3BfdmFsdWUpOiBMaWtld2lzZSBmb3IgdmFyaWFibGVzIGBuX3dvcmRzJyBhbmQgYGknLgoJKGV4cGFuZF9qYXZhX2FycmF5bG9hZCk6IExpa2V3aXNlIGZvciB2YXJpYWJsZSBgY29udmVydCcuCgkoamF2YV9sYW5nX2V4cGFuZF9leHByKTogTGlrZXdpc2UgZm9yIHZhcmlhYmxlcyBgb3AwJywgYHR5cGUnLAoJYG1vZGUnLCBgdW5zaWduZWRwJywgYG5vZGUnIGFuZCBgZWxlbWVudHMnLgoJKGV4cGFuZF9ieXRlX2NvZGUpOiBMaWtld2lzZSBmb3IgdmFyaWFibGVzIGBwcmV2X2VoX3JhbmdlcycgYW5kCglgZWhfcmFuZ2VzJy4KCShwcm9jZXNzX2p2bV9pbnN0cnVjdGlvbik6IEFkZCBhIGBjb25zdCcgcXVhbGlmaWVyIHRvIGEgY2hhciouCgoJKiBnamF2YWguYyAob3V0cHV0X2RpcmVjdG9yeSk6IEFkZCB0aGUgYGNvbnN0JyBrZXl3b3JkIHRvIGEgY2hhciouCgkodGVtcF9kaXJlY3RvcnkpOiBMaWtld2lzZS4KCShwcmludF9jX2RlY2wpOiBMaWtld2lzZS4KCShwcmludF9tZXRob2RfaW5mbyk6IExpa2V3aXNlLgoJKGRlY29kZV9zaWduYXR1cmVfcGllY2UpOiBMaWtld2lzZS4KCShwcmludF9tYW5nbGVkX2NsYXNzbmFtZSk6IExpa2V3aXNlLgoKCSogamF2YS1leGNlcHQuaDogUHJvdmlkZSBwcm90b3R5cGVzIGZvciBtYXliZV9zdGFydF90cnksCgltYXliZV9lbmRfdHJ5IGFuZCBhZGRfaGFuZGxlci4KCgkqIGphdmEtdHJlZS5oIChtYW5nbGVkX2NsYXNzbmFtZSk6IEFkZCB0aGUgYGNvbnN0JyBrZXl3b3JkIHRvIGEgY2hhciouCgkocGFyc2VfZXJyb3JfY29udGV4dCk6IExpa2V3aXNlLiAgQWxzbyBhZGQgQVRUUklCVVRFX1BSSU5URl8yLgoJKHB1c2hkZWNsX3RvcF9sZXZlbCwgYWxsb2NfY2xhc3NfY29uc3RhbnQsIHVuaWNvZGVfbWFuZ2xpbmdfbGVuZ3RoLAoJaW5pdF9leHByX3Byb2Nlc3NpbmcsIHB1c2hfc3VwZXJfZmllbGQsIGluaXRfY2xhc3NfcHJvY2Vzc2luZywKCWNhbl93aWRlbl9yZWZlcmVuY2VfdG8sIGNsYXNzX2RlcHRoLCB2ZXJpZnlfanZtX2luc3RydWN0aW9ucywKCW1heWJlX3B1c2hsZXZlbHMsIG1heWJlX3BvcGxldmVscywgcHJvY2Vzc19qdm1faW5zdHJ1Y3Rpb24sCglzZXRfbG9jYWxfdHlwZSwgbWVyZ2VfdHlwZV9zdGF0ZSwgcHVzaF90eXBlLCBsb2FkX3R5cGVfc3RhdGUsCglhZGRfaW50ZXJmYWNlLCBmaW5kX2luX2N1cnJlbnRfemlwLCBhcHBlbmRfZ3BwX21hbmdsZWRfY2xhc3N0eXBlLAoJZW1pdF91bmljb2RlX21hbmdsZWRfbmFtZSk6IEFkZCBwcm90b3R5cGVzLgoKCSogamNmLWR1bXAuYyAocHJpbnRfY29uc3RhbnQpOiBBZGQgdGhlIGBjb25zdCcga2V5d29yZCB0byBhIGNoYXIqLgoJKHByaW50X3NpZ25hdHVyZV90eXBlKTogVXNlIElTRElHSVQsIG5vdCBpc2RpZ2l0LgoJKHByaW50X3NpZ25hdHVyZSk6IFJlbW92ZSB1bnVzZWQgdmFyaWFibGUgYGonLgoKCSogamNmLWlvLmMgKGpjZl9maWxidWZfZnJvbV9zdGRpbyk6IENhc3QgdGhlIHJlc3VsdCBvZiBgZnJlYWQnIHRvCglpbnQgd2hlbiBjb21wYXJpbmcgYWdhaW5zdCBvbmUuCgoJKiBqY2YtcGFyc2UuYzogSW5jbHVkZSB0b3BsZXYuaC4KCgkqIGpjZi13cml0ZS5jOiBMaWtld2lzZS4gIERvbid0IGluY2x1ZGUgPHN0cmluZy5oPiBvciA8c3lzL3N0YXQuaD4uCgkobG9jYWx2YXJfZnJlZSk6IFJlbW92ZSB1bnVzZWQgdmFyaWFibGUgYGknLgoJKGdlbmVyYXRlX2J5dGVjb2RlX2NvbmRpdGlvbmFsKTogTGlrZXdpc2UgZm9yIHZhcmlhYmxlIGBraW5kJy4KCgkqIGp2LXNjYW4uYzogSW5jbHVkZSBjb25maWcuaCBhbmQgc3lzdGVtLmguICBSZW1vdmUgcmVkdW5kYW50CglPUyBoZWFkZXIgYW5kIGdhbnNpZGVjbC5oIGluY2x1ZGVzLgoJKHdhcm5pbmcpOiBBZGQgdGhlIGBjb25zdCcga2V5d29yZCB0byBhIGNoYXIqLiAgQWxzbyBhZGQKCUFUVFJJQlVURV9QUklOVEZfMSB0byB0aGUgcHJvdG90eXBlLiAgQ2hlY2sgQU5TSV9QUk9UT1RZUEVTLCBub3QKCV9fU1REQ19fLCB3aGVuIGRldGVybWluaW5nIHdoZXRoZXIgdG8gdXNlIEFOU0ktaXNtcy4KCShmYXRhbCk6IExpa2V3aXNlLiAgQWxzbyBhZGQgQVRUUklCVVRFX1VOVVNFRC4KCSh4bWFsbG9jKTogRG9uJ3QgcmVkdW5kYW50bHkgcHJvdG90eXBlIGhlcmUuCgkobWFpbik6IFJlbW92ZSB1bnVzZWQgcGFyYW1ldGVyIGBlbnZwJy4gIEFsc28gZml4IHRoZSBhcmd1bWVudHMKCXBhc3NlZCB0byBmdW5jdGlvbiBgZmF0YWwnIHRvIG1hdGNoIHRoZSBmb3JtYXQgc3BlY2lmaWVyLgoKCSogbGFuZy5jIChqYXZhX3RyZWVfY29kZV9uYW1lKTogQWRkIHRoZSBgY29uc3QnIGtleXdvcmQgdG8gYSBjaGFyKi4KCgkqIG1hbmdsZS5jOiBJbmNsdWRlIHRvcGxldi5oLgoJKGVtaXRfdW5pY29kZV9tYW5nbGVkX25hbWUpOiBEZWNsYXJlIHBhcmFtZXRlciBgbGVuJy4KCgkqIHBhcnNlLnkgKHBhcnNlX3dhcm5pbmdfY29udGV4dCk6IEFkZCB0aGUgYGNvbnN0JyBrZXl3b3JkIHRvIGEKCWNoYXIqLiAgQWxzbyBhZGQgQVRUUklCVVRFX1BSSU5URl8yIHRvIHRoZSBwcm90b3R5cGUuICBDaGVjawoJYEFOU0lfUFJPVE9UWVBFUycgbm90IGBfX1NURENfXycgZm9yIHdoZXRoZXIgdG8gdXNlIEFOU0ktaXNtcy4KCShpc3N1ZV93YXJuaW5nX2Vycm9yX2Zyb21fY29udGV4dCk6IEFkZCB0aGUgYGNvbnN0JyBrZXl3b3JkIHRvCglhIGNoYXIqLgoJKHBhcnNlX2Vycm9yX2NvbnRleHQpOiBMaWtld2lzZS4gIEFsc28gY2hlY2sgYEFOU0lfUFJPVE9UWVBFUycKCW5vdCBgX19TVERDX18nIGZvciB3aGV0aGVyIHRvIHVzZSBBTlNJLWlzbXMuCgoJKiB0eXBlY2suYyAoaW5jb21wbGV0ZV90eXBlX2Vycm9yKTogTWFyayBwYXJhbWV0ZXJzIGB2YWx1ZScgYW5kCglgdHlwZScgd2l0aCBBVFRSSUJVVEVfVU5VU0VELgoJKHBhcnNlX3NpZ25hdHVyZV90eXBlKTogVXNlIElTRElHSVQsIG5vdCBpc2RpZ2l0LgoKCSogdmVyaWZ5LmMgKGNoZWNrX3BlbmRpbmdfYmxvY2spOiBBZGQgdGhlIGBjb25zdCcga2V5d29yZCB0byBhIGNoYXIqLgoJKHZlcmlmeV9qdm1faW5zdHJ1Y3Rpb25zKTogTGlrZXdpc2UuICBSZW1vdmUgdW51c2VkIHZhcmlhYmxlcwoJYGZpZWxkX25hbWUnIGFuZCBgZGVmYXVsdF92YWwnLgoKCSogemV4dHJhY3QuYzogSW5jbHVkZSBjb25maWcuaCBhbmQgc3lzdGVtLmguICBSZW1vdmUgcmVkdW5kYW50CglPUyBoZWFkZXIgaW5jbHVkZXMuCgoJKiB6aXBmaWxlLmg6IFByb3RvdHlwZSBgcmVhZF96aXBfYXJjaGl2ZScuCgpUaHUgSmFuIDIxIDE2OjAwOjA2IDE5OTkgIEFuZHJldyBIYWxleSAgPGFwaEBjeWdudXMuY29tPgoKCSogdHlwZWNrLmMgKGNvbnZlcnQpOiBBbGxvdyBjb252ZXJzaW9ucyB0byB2b2lkIHR5cGU6IHNvbWUKCW9wdGltaXphdGlvbnMgaW4gZ2NjIGRvIHRoaXMuCgpUaHUgSmFuIDIxIDE1OjIxOjQ5IDE5OTkgIEFuZHJldyBIYWxleSAgPGFwaEBjeWdudXMuY29tPgoKCSogdHlwZWNrLmMgKGNvbnZlcnRfaWVlZV9yZWFsX3RvX2ludGVnZXIpOiBOZXcgZnVuY3Rpb24uCgkoY29udmVydCk6IFdoZW4gbm90IHVzaW5nIGZhc3QtbWF0aCBhbmQgdXNpbmcgaGFyZHdhcmUgZnAsIGNvbnZlcnQKCWFuIElFRUUgTmFOIHRvIHplcm8uCgoxOTk5LTAxLTE4ICBBbmRyZXcgSGFsZXkgIDxhcGhAY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnkgKHBhdGNoX2Jpbm9wKTogRG8gYSB0eXBlIGNvbnZlcnNpb24gZnJvbSBzaWduZWQgdG8KCXVuc2lnbmVkIGFuZCB0aGVuIGJhY2sgdG8gc2lnbmVkIHdoZW4gYSAiPj4+IiBpcyBmb3VuZC4KClN1biBKYW4gMTcgMjI6MzQ6MjIgMTk5OSAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBqYXZhLXRyZWUuaDogKGNoZWNrX2Zvcl9pbml0aWFsaXphdGlvbik6IEFkZGVkIHByb3RvdHlwZS4KCSogbGV4LmMgKGphdmFfcGFyc2VfZG9jX3NlY3Rpb24pOiBgXG4nIGJyZWFrcyB0aGUgYCovJyBzdHJpbmcuCgkqIHBhcnNlLnkgKGRvX3Jlc29sdmVfY2xhc3MpOiBSZW1vdmVkIHVudXNlZCBsb2NhbHMuCgkocmVhZF9pbXBvcnRfZGlyKTogTGlrZXdpc2UuCgkocmVzb2x2ZV9xdWFsaWZpZWRfZXhwcmVzc2lvbl9uYW1lKTogQXJyYXkgY3JlYXRpb24KCWV4cHJlc3Npb25zIGFyZSB2YWxpZCBwcmltYXJ5IGV4cHJlc3Npb25zLgoJKHF1YWxpZnlfYW1iaWd1b3VzX25hbWUpOiBMaWtld2lzZS4KCShwYXRjaF9zeW5jaHJvbml6ZWRfc3RhdGVtZW50KTogUmVtb3ZlZCB1bnVzZWQgbG9jYWwuCgpTdW4gSmFuIDE3IDIxOjU1OjQyIDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIE1ha2VmaWxlLmluICh6ZXh0cmFjdC5vKTogQWRkIGRlcGVuZGVuY2llcy4KCgkqIE1ha2VmaWxlLmluOiBEbyBub3QgcHV0IF5McyBhdCB0aGUgc3RhcnQgb2YgYSBsaW5lLgoKRnJpIEphbiAxNSAyMDoxNjoyMCAxOTk5ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAY3lnbnVzLmNvbT4KCgkqIGV4cHIuYyAocHJvY2Vzc19qdm1faW5zdHJ1Y3Rpb24pOiAgQ29lcmNlIHRvIGNvcnJlY3QgVGhyb3dhYmxlCglzdWItdHlwZSB0aGUgcmVzdWx0IG9mIHRoZSBjYWxsIHRoYXQgZ2V0cyB0aGUgZXhjZXB0aW9uIHZhbHVlLgoKCSogcGFyc2UueSAoamF2YV9jb21wbGV0ZV9leHBhbmRfbWV0aG9kcyk6ICBJZiBmbGFnc19zeW50YXhfb25seSwKCWRvbid0IGNhbGwgZmluaXNoX2NsYXNzLgoKCSogcGFyc2UueSAoamF2YV9jaGVja19yZWd1bGFyX21ldGhvZHMpOiAgSWYgTUVUSE9EX1BSSVZBVEUsCgljbGVhciBmb3VuZCBiZWZvcmUgY29udGludWluZy4KCgkqIHZlcmlmeS5jICh2ZXJpZnlfanZtX2luc3RydWN0aW9ucyk6ICBPbiBhbiBhcnJheSBsb2FkLCBhbGxvdwoJYW5kIGhhbmRsZSB0b3Agb2Ygc3RhY2sgdG8gYmUgVFlQRV9OVUxMLgoKCSogZ2phdmFoLmMgKGdlbmVyYXRlX2FjY2Vzcyk6ICBUcmFuc2xhdGUgSmF2YSBwYWNrYWdlIHByaXZhdGUgb3IKCXByb3RlY3RlZCBhY2Nlc3MgdG8gQysrIHB1YmxpYywgYnV0IHdpdGggYSBjb21tZW50LgoKMTk5OS0wMS0xMyAgQW5kcmV3IEhhbGV5ICA8YXBoQGN5Z251cy5jb20+CgoJKiBleHByLmMgKGdlbmVyYXRlX25hbWUpOiBOYW1lIHByZWZpeCBjaGFuZ2VkIHRvIGF2b2lkIGNsYXNoZXMKCXdpdGggYXNzZW1ibGVyIHRlbXAgbGFiZWxzLgoKCSogcGFyc2UueSAocGF0Y2hfc3luY2hyb25pemVkX3N0YXRlbWVudCk6IFNldCBUUkVFX1NJREVfRUZGRUNUUyBvbgoJTU9ESUZZX0VYUFIuICBXaXRob3V0IHRoaXMsIGNvZGUgZm9yIHRoZSBhc3NpZ25lbWVudCBtYXkgbm90IGJlCglnZW5lcmF0ZWQgYXQgYWxsIGFuZCB0aGUgc3luY2hyb25pemVkIHN0YXRlbWVudCB3aWxsIHJlYWQgYW4KCXVuaW5pdGlhbGl6ZWQgdmFyaWFibGUuCgpXZWQgSmFuIDEzIDAxOjI0OjU0IDE5OTkgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogY2xhc3MuYyAobWF5YmVfbGF5b3V0X3N1cGVyX2NsYXNzKTogRml4ZWQgcmV0dXJuZWQgdmFsdWUuCgkqIGxleC5jOiBBZGRlZCAxOTk5IHRvIHRoZSBjb3B5cmlnaHQuCgkoamF2YV9pbml0X2xleCk6IEluaXRpYWxpemUgamF2YV9sYW5nX2ltcG9ydGVkLgoJKiBsZXguaDogQWRkZWQgMTk5OSB0byB0aGUgY29weXJpZ2h0LgoJKiBwYXJzZS5oOiBBZGRlZCAxOTk5IHRvIHRoZSBjb3B5cmlnaHQuCgkoUkVHSVNURVJfSU1QT1JUKTogRml4ZWQgdHlwbyBpbiB0cmFpbGluZyBtYWNyby4KCShDVVJSRU5UX09TQik6IE5ldyBtYWNyby4KCShzdHJ1Y3QgcGFyc2VyX2N0eHQpOiBOZXcgZmllbGRzIG9zYl9kZXB0aCwgb3NiX2xpbWl0LgoJKiBwYXJzZS55IChqYXZhX2xhbmdfaWQpOiBOZXcgZ2xvYmFsIHZhcmlhYmxlLgoJKHR5cGVfaW1wb3J0X29uX2RlbWFuZF9kZWNsYXJhdGlvbik6IERvbid0IGltcG9ydCBqYXZhLmxhbmcuKiB0d2ljZS4KCShhcnJheV9jcmVhdGlvbl9leHByZXNzaW9uOik6IFVzZSBDVVJSRU5UX09TQi4KCShkaW1zOik6IFVzZXMgYSBzdGFjayB0byBrZWVwIHRyYWNrIG9mIGFycmF5IGRpbWVuc2lvbnMuCgkoY2FzdF9leHByZXNzaW9uOik6IFVzZSBDVVJSRU5UX09TQi4KCShmaW5kX2V4cHJfd2l0aF93ZmwpOiBSZXR1cm4gTlVMTCBpZiBub2RlIGZvdW5kIGRvZXNuJ3QgbWVldCB0aGUKCWNvbmRpdGlvbnMuCgkocmVnaXN0ZXJfZmllbGRzKTogRml4ZWQgdHlwb3MgaW4gY29tbWVudC4KCShjaGVja19tZXRob2RfcmVkZWZpbml0aW9uKTogRml4ZWQgY29tbWVudCBpbmRlbnRhdGlvbi4KCShqYXZhX2NoZWNrX3JlZ3VsYXJfbWV0aG9kcyk6IFNldCBzYXZlZCBmb3VuZCB3ZmwgdG8gTlVMTCBhZnRlcgoJaGF2aW5nIHJlaW5zdGFsbGVkIGl0IGluIHRoZSBwcmV2aW91c2x5IGZvdW5kIERFQ0xfTkFNRS4KClN1biBKYW4gMTAgMTM6MzY6MTQgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGdqYXZhaC5jIChqYXZhX2Zsb2F0X2Zpbml0ZSk6IFVzZSBhIHVuaW9uIHRvIGRvIHR5cGUgcHVubmluZy4KCShqYXZhX2RvdWJsZV9maW5pdGUpOiBMaWtld2lzZS4KClNhdCBKYW4gIDkgMTE6MjU6MDAgMTk5OSAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGN5Z251cy5jb20+CgoJKiBwYXJzZS55IChidWlsZF9uZXdfYXJyYXlfaW5pdCk6ICBEb24ndCBzZXQgRVhQUl9XRkxfTElORUNPTAoJb24gQ09OU1RSVUNUT1IgKHNpbmNlIHRoYXQgdHJhc2hlcyBUUkVFX0NTVF9SVEwpLgoJKHBhdGNoX25ld19hcnJheV9pbml0KTogIENsZWFyIFRSRUVfQ09OU1RBTlQgYWxzbyBpZiBJTkRJUkVDVF9SRUYuCgkocmVnaXN0ZXJfZmllbGRzKTogIFNldCBUUkVFX1NUQVRJQyBvbiBORVdfQVJSQVlfSU5JVCwgbm90IG9uCglDT05TVFJVQ1RPUiAod2hpY2ggY2F1c2VzIGV4cGFuZF9leHByIHRvIGNhbGwgb3V0cHV0X2NvbnN0YW50X2RlZikuCgkqIGV4cHIuYyAoamF2YV9sYW5nX2V4cGFuZF9leHByKTogIENoZWNrIFRSRUVfU1RBVElDIG9mIE5FV19BUlJBWV9JTklULgoKRnJpIEphbiAgOCAxNTo0ODowMyAxOTk5ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAY3lnbnVzLmNvbT4KCgkqIGNoZWNrLWluaXQuYyAoY2hlY2tfaW5pdCk6ICBJZiBjb21waWxpbmcgdG8gbmF0aXZlLCB3ZSBkb24ndAoJc2VlIFRIUk9XX0VYUFIuICBJbnN0ZWFkLCBsb29rIGZvciBhIGNhbGwgdG8gdGhyb3dfbm9kZSAoX0p2X1Rocm93KS4KCjE5OTktMDEtMDggIFRvbSBUcm9tZXkgIDx0cm9tZXlAY3lnbnVzLmNvbT4KCgkqIHBhcnNlLXNjYW4ueSAodmFyaWFibGVfZGVjbGFyYXRvcl9pZCk6IFNldCBvciBpbmNyZW1lbnQKCWJyYWNrZXRfY291bnQuCgkoYnJhY2tldF9jb3VudCk6IE5ldyBnbG9iYWwuCgkoZm9ybWFsX3BhcmFtZXRlcik6IEhhbmRsZSBjYXNlIHdoZXJlIGJyYWNrZXQgcGFpcnMgdHJhaWwgdmFyaWFibGUKCWRlY2xhcmF0b3IgaWQuCgoxOTk5LTAxLTA3ICBBbmRyZXcgSGFsZXkgIDxhcGhAdmlhZ3JhLmN5Z251cy5jby51az4KCgkqIGpjZi1wYXJzZS5jICh5eXBhcnNlKTogdmFyaWFibGUgbGVuIGNoYW5nZWQgZnJvbSBhIGNoYXIgdG8gYW4KCWludCB0byBwcmV2ZW50IG92ZXJmbG93LgoKV2VkIEphbiAgNiAxNzoxOTo0NiAxOTk5ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAY3lnbnVzLmNvbT4KCgkqIGphdmEtdHJlZS5oOiAgRGVjbGFyZSByZWFkX2NsYXNzLgoJKiBqY2YtcGFyc2UuYyAocmVhZF9jbGFzcyk6ICBOZXcgZnVuY3Rpb24uCgkobG9hZF9jbGFzcyk6ICBOb3cganVzdCBjYWxsIHJlYWRfY2xhc3MuCgoJKiBqYXZhLXRyZWUuaCAoamF2YV9wYXJzZV9hYm9ydF9vbl9lcnJvcik6ICBPbmx5IHJldHVybiBpZiBuZXcgZXJyb3JzLgoJKiBqY2YtcGFyc2UuYyAocGFyc2Vfc291cmNlX2ZpbGUpOiAgRGVjbGFyZSBzYXZlX2Vycm9yX2NvdW50LAoJd2hpY2ggaXMgbmVlZGVkIGJ5IGphdmFfcGFyc2VfYWJvcnRfb25fZXJyb3IgbWFjcm8sCgkqIHBhcnNlLnkgKGphdmFfbGF5b3V0X2NsYXNzZXMsIGphdmFfZXhwYW5kX2NsYXNzZXMpOiAgTGlrZXdpc2UuCgoJKiBwYXJzZS55IChyZWdpc3Rlcl9maWVsZHMpOiAgU2V0IFRSRUVfU1RBVElDIGZsYWcgb2YgTkVXX0FSUkFZX0lOSVQKCWNvbnN0cnVjdG9yLCBpZiBpbml0aWFsaXppbmcgYSBzdGF0aWMgZmllbGQuCgkocGF0Y2hfbmV3X2FycmF5X2luaXQpOiAgU2V0IFRSRUVfQ09OU1RBTlQgaWYgaXQgaXMuCgkqIGV4cHIuYyAoamF2YV9sYW5nX2V4cGFuZF9leHByKTogIEZvciBhIHN0YXRpYyBhcnJheSBjb25zdHJ1Y3RvcgoJb2YgcHJpbWl0aXZlIGVsZW1lbnRzLCBhbGxvY2F0ZSB0aGUgYXJyYXkgaXRzZWxmIHN0YXRpY2FsbHkuCglEaXNhYmxlZCB1bnRpbCB3ZSBjYW4gc2V0IHRoZSB2dGFibGUgZmllbGQgc3RhdGljYWxseS4KCgkqIGNoZWNrLWluaXQuYzogIE5ldyBmaWxlLiAgQ2hlY2tzIGZvciBkZWZpbml0ZSBhc3NpZ25tZW50LgoJKiBNYWtlZmlsZS5pbiAoSkFWQV9PQkpTKTogIEFkZCBjaGVjay1pbml0Lm8uCgkqIHBhcnNlLnkgKGphdmFfY29tcGxldGVfZXhwYW5kX21ldGhvZCk6IENhbGwgY2hlY2tfZm9yX2luaXRpYWxpemF0aW9uLgoJKiBwYXJzZS5oIChCTE9DS19FWFBSX0RFQ0xTLCBCTE9DS19FWFBSX0JPRFkpOiAgTW92ZWQgdG8gamF2YS10cmVlLmguCgpXZWQgSmFuICA2IDE0OjUzOjEwIDE5OTkgIEdyYWhhbSA8Z3JhaGFtc0ByY3AuY28udWs+CgoJKiBwYXJzZS55IDogaW5jbHVkZSBzeXN0ZW0uaCBpbnN0ZWFkIG9mIGluY2x1ZGluZwoJc3RhbmRhcmQgaGVhZGVycyBkaXJlY3RseSB3aXRoIHRoZSBleGNlcHRpb24gb2YgPGRpcmVudC5oPi4KCldlZCBKYW4gIDYgMTY6MjA6MDYgMTk5OSAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGN5Z251cy5jb20+CgoJKiBsZXguaDogIE1vdmVkIHN0YXRpYyBmdW5jdGlvbiBkZWNsYXJhdGlvbnMgdG8gbGV4LmMsCgl0byBzaHV0IHVwIHNvbWUgLVdhbGwgd2FybmluZ3MuCgkqIGxleC5jOiAgU3RhdGljIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyBtb3ZlZCBoZXJlLgoJKiBqY2YtZHVtcC5jOiAgU21hbGwgZml4ZXMgdG8gc2h1dCB1cCAtV2FsbCB3YXJuaW5ncy4KClR1ZSBKYW4gIDUgMjI6MTU6NDAgMTk5OSAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogTWFrZS1sYW5nLmluICgkKEdDSikubyk6IERlcGVuZCBvbiBwcmVmaXguaC4KClR1ZSBEZWMgMjIgMTE6MjU6MTkgMTk5OCAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGN5Z251cy5jb20+CgoJKiBleHByLmMgKHByb2Nlc3NfanZtX2luc3RydWN0aW9uKTogIERvIGxvYWRfdHlwZV9zdGF0ZSBhZnRlciBKU1IuCgkqIHZlcmlmeS5jICh2ZXJpZnlfanZtX2luc3RydWN0aW9ucyk6ICBGaXggb2ZmLWJ5LW9uZSBlcnJvci4KCgkqIGpjZi13cml0ZS5jIChDSEVDS19QVVQpOiAgQWRkICh2b2lkKSBjYXN0IHRvIGF2b2lkIC1XYWxsIHdhcm5pbmdzLgoJKGxvY2FsdmFyX2FsbG9jKTogIENoYW5nZSByZXR1cm4gdHlwZSB0byB2b2lkLAoJKGVtaXRfdW5vcCk6ICBSZW1vdmUgdW51c2VkIHZhcmlhYmxlIHNpemUuCgoJKiBqY2Ytd3JpdGUuYyAoc3RydWN0IGpjZl9ibG9jayk6ICBBZGQgbmV3IHVuaW9uLgoJKFBFTkRJTkdfQ0xFQU5VUF9QQywgUEVORElOR19FWElUX1BDLCBVTkRFRklORURfUEMpOiAgTmV3IG1hY3Jvcy4KCShjYWxsX2NsZWFudXBzKTogIE5ldyBmdW5jdGlvbnMuCgkoc3RydWN0IGpjZl9wYXJ0aWFsKTogIE5ldyBmaWVsZHMgbnVtX2ZpbmFsaXplcnMgYW5kIHJldHVybl92YWx1ZV9kZWNsLgoJKGdlbmVyYXRlX2J5dGVjb2RlX2luc25zKTogIFN1cHBvcnQgQ0xFQU5VUF9QT0lOVF9FWFBSIGFuZAoJV0lUSF9DTEVBTlVQX0VYUFIuICBIYW5kbGUgY2xlYW51cHMgaW4gUkVUVVJOX0VYUFIgYW5kIEVYSVRfQkxPQ0tfRVhQUi4KCSogbGFuZy5jIChsYW5nX2luaXQpOiAgQ2FsbCB1c2luZ19laF9mb3JfY2xlYW51cHMuCgkqIHBhcnNlLnkgKGphdmFfY29tcGxldGVfbGhzKTogIEZvciBTWU5DSFJPTklaRURfRVhQUiwgZGVmZXIKCWNvbXBsZXRpbmcgb3BlcmFuZHMgdG8gcGF0Y2hfc3luY2hyb25pemVkX3N0YXRlbWVudC4KCVN1cHBvcnQgQ0xFQU5VUF9QT0lOVF9FWFBSLCBXSVRIX0NMRUFOVVBfRVhQUi4KCShwYXRjaF9zeW5jaHJvbml6ZWRfc3RhdGVtZW50KTogUmUtd3JpdGUgc3VpbmcgQ0xFQU5VUF9QT0lOVF9FWFBSIGFuZAoJV0lUSF9DTEVBTlVQX0VYUFIgaW5zdGVhZCBvZiBUUllfRVhQUi4KClN1biBEZWMgMjAgMTY6MTU6NDQgMTk5OCAgSm9obiBGLiBDYXJyICA8amZjQG1pdC5lZHU+CgoJKiBNYWtlLWxhbmcuaW46IENvbW1lbnQgb3V0IGNvbnRyb2wtTHM7IHRoZXkgdXBzZXQgc29tZSBtYWtlcy4KCjE5OTgtMTItMTggIFRvbSBUcm9tZXkgIDx0cm9tZXlAY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnkgKGNoZWNrX2NsYXNzX2ludGVyZmFjZV9jcmVhdGlvbik6IFVzZSBESVJfU0VQQVJBVE9SCgljb25zaXN0ZW50bHkuCgoxOTk4LTEyLTE3ICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CgoJKiBwYXJzZS55IChESVJfU0VQQVJBVE9SKTogTmV3IGRlZmluZS4KCShjaGVja19jbGFzc19pbnRlcmZhY2VfY3JlYXRpb24pOiBVc2UgaXQuCgoJKiBwYXJzZS1zY2FuLnkgKHJlcG9ydF9tYWluX2RlY2xhcmF0aW9uKTogUmVjb2duaXplCglgamF2YS5sYW5nLlN0cmluZycgaW4gYXJndW1lbnQgdG8gbWFpbi4KCldlZCBEZWMgMTYgMTY6MTg6NTkgMTk5OCAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGN5Z251cy5jb20+CgoJKiBwYXJzZS55IChjcmVhdGVfaW50ZXJmYWNlKTogIFJlbW92ZSBib2d1cyB0ZXN0LgoKV2VkIERlYyAxNiAxNDo0MjoxOSAxOTk4ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAY3lnbnVzLmNvbT4KCgkqIGpjZi1wYXJzZS5jIChnZXRfY29uc3RhbnQpOiAgU2V0IFRSRUVfVFlQRSBmb3Igc3RyaW5nIGNvbnN0YW50cy4KCShIQU5ETEVfQ09OU1RBTlRWQUxVRSk6ICBJZiBmbGFnX2VtaXRfY2xhc3NfZmlsZXMsIGNhbGwgZ2V0X2NvbnN0YW50LgoKMTk5OC0xMi0xNiAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgoKCSogcGFyc2Utc2Nhbi55IChxdWFsaWZpZWRfbmFtZSk6IFVzZSBjb3JyZWN0IHNwcmludGYgZm9ybWF0LgoKMTk5OC0xMi0xNSAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgoKCSogZ2phdmFoLmMgKHByaW50X2ZpZWxkX2luZm8pOiBDaGFuZ2VkIGhvdyBtb3N0IG5lZ2F0aXZlIG51bWJlciBpcwoJcHJpbnRlZC4KCk1vbiBEZWMgMTQgMTg6NDk6MjkgMTk5OCAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGN5Z251cy5jb20+CgoJKiBwYXJzZS55IChmb2xkX2NvbnN0YW50X2Zvcl9pbml0KTogIE5ldyBmdW5jdGlvbi4KCShyZXNvbHZlX2V4cHJlc3Npb25fbmFtZSk6ICBEb24ndCByZXBsYWNlIHN0YXRpYyBmaW5hbAoJY29uc3RhbnQtaW5pdGlhbGl6ZWQgZmllbGRzIGJ5IGl0cyB2YWx1ZS4KCShqYXZhX2NvbXBsZXRlX2xocyk6ICBOZXcuICBTYW1lIGFzIGphdmFfY29tcGxldGVfdHJlZSwgZXhjZXB0IGRvZXMKCW5vdCByZXBsYWNlIHN0YXRpYyBmaW5hbCBjb25zdGFudC1pbml0aWFsaXplZCBmaWVsZHMgYnkgdGhlaXIgdmFsdWVzLgoJKHJlZ2lzdGVyX2ZpZWxkcyk6ICBJZiB0aGVyZSBpcyBhbiBpbml0aWFsaXplciwgc2V0IERFQ0xfSU5JVElBTCBhbmQKCU1PRElGWV9FWFBSX0ZST01fSU5JVElBTElaQVRJT05fUC4KCShqYXZhX2NvbXBsZXRlX3RyZWUpOiAgRm9yIE1PRElGWV9FWFBSLCB1c2UgamF2YV9jb21wbGV0ZV9saHMgZm9yIGxocy4KCU9ubHkgY2FsbCBwYXRjaF9pbml0aWFsaXplZF9zdGF0aWNfZmllbGQgaWYKCU1PRElGWV9FWFBSX0ZST01fSU5JVElBTElaQVRJT05fUC4KCShwYXRjaF9pbml0aWFsaXplZF9zdGF0aWNfZmllbGQpOiAgSWYgbm90IHZhbGlkIGNvbnN0YW50LCBjbGVhcgoJREVDTF9JTklUSUFMLgoKCSogcGFyc2UueSAobG9va3VwX2ZpZWxkX3dyYXBwZXIpOiAgRml4IHRoaW5rby4KCgkqIHBhcnNlLnkgKGphdmFfY29tcGxldGVfdHJlZSk6ICBJbiBFWFBSX1dJVEhfRklMRV9MT0NBVElPTiwKCXNldCBhbmQgcmVzdG9yZSBnbG9iYWwgbGluZW5vLgoKMTk5OC0xMi0xNCAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgoKCSogZ2phdmFoLmMgKHByaW50X2ZpZWxkX2luZm8pOiBJZiB2YWx1ZSB0byBwcmludCBpcyB0aGUgc21hbGxlc3QKCXZhbHVlIG9mIGl0cyBzaXplLCB0aGVuIHByaW50IGFzIGhleCB0byBhdm9pZCBsYXRlciB3YXJuaW5ncyBmcm9tCglDKysgY29tcGlsZXIuCgoxOTk4LTEyLTE0ICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CgoJKiBnamF2YWguYyAoZGVjb21waWxlX21ldGhvZCk6IERlY29tcGlsZSBgcmV0dXJuIG51bGwnLgoJKHByb2Nlc3NfZmlsZSk6IEdlbmVyYXRlIGAjcHJhZ21hIGludGVyZmFjZScuCgkobWV0aG9kX2RlY2xhcmVkKTogTmV3IGdsb2JhbC4KCShwcmludF9tZXRob2RfaW5mbyk6IFNldCBpdC4KCShIQU5ETEVfQ09ERV9BVFRSSUJVVEUpOiBPbmx5IHByaW50IGl0IG1ldGhvZF9kZWNsYXJlZCBzZXQuCgkocHJpbnRfbWV0aG9kX2luZm8pOiBIYW5kbGUgYWJzdHJhY3QgbWV0aG9kcy4KClN1biBEZWMgMTMgMTc6MzE6NDAgMTk5OCAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGN5Z251cy5jb20+CgoJKiBwYXJzZS55IChwYXRjaF9tZXRob2RfaW52b2NhdGlvbik6ICBJZiBjbGFzc19kZWNsIGlzIG51bGwKCShlLmcuIGFuIGFycmF5IHR5cGUpLCB1c2Ugb3JpZ2luYWwgdHlwZS4KCgkqIHBhcnNlLnkgKGNoZWNrX3Rocm93bl9leGNlcHRpb25zKTogIFRlbXBvcmFyeSBoYWNrIHRvIHN1cHByZXNzCgllcnJvcnMgYWJvdXQgdW5jYXVnaHQgZXhjZXB0aW9uIGZyb20gY2xvbmUgKG9mIGFycmF5LCBzcGVjaWZpY2FsbHkpLgoKMTk5OC0xMi0xMyAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgoKCSogZ2phdmFoLmMgKGRlY29tcGlsZV9tZXRob2QpOiBIYW5kbGUgYWxsIHR5cGVzIG9mIGByZXR1cm4nCglvcGNvZGUuICBEZWNvbXBpbGUgYHJldHVybiB0aGlzJyBhbmQgYHJldHVybicuCgkobWV0aG9kX2FjY2Vzcyk6IE5ldyBnbG9iYWwuCgkocHJpbnRfbWV0aG9kX2luZm8pOiBTZXQgaXQuCgkoZGVjb21waWxlX21ldGhvZCk6IERvbid0IGRlY29tcGlsZSBhIHN5bmNocm9uaXplZCBtZXRob2QuCgoxOTk4LTEyLTEzICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CgoJKiBqY2YtcmVhZGVyLmMgKGpjZl9wYXJzZV9vbmVfbWV0aG9kKTogUmVjb2duaXplCglIQU5ETEVfRU5EX01FVEhPRC4KCSogZ2phdmFoLmMgKEhBTkRMRV9FTkRfTUVUSE9EKTogTmV3IG1hY3JvLgoJKEhBTkRMRV9DT0RFX0FUVFJJQlVURSk6IE5ldyBtYWNyby4KCShkZWNvbXBpbGVfbWV0aG9kKTogTmV3IGZ1bmN0aW9uLgoJKHByaW50X21ldGhvZF9pbmZvKTogRG9uJ3QgcHJpbnQgYDtcbicgYXQgZW5kIG9mIGZ1bmN0aW9uIGRlY2wuCglJbmNsdWRlIGphdmEtb3Bjb2Rlcy5oLgoJKGRlY29tcGlsZWQpOiBOZXcgZ2xvYmFsLgoKU2F0IERlYyAxMiAyMDoxMzoxOSAxOTk4ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAY3lnbnVzLmNvbT4KCgkqIGNsYXNzLmMgKGJ1aWxkX2NsYXNzX3JlZik6ICBIYW5kbGUgUFJJTVRZUEUuY2xhc3MgaWYKCWZsYWdfZW1pdF9jbGFzc19maWxlcy4KCSogZXhwci5jIChleHBhbmRfamF2YV9maWVsZF9vcCk6ICBEb24ndCBvcHRpbWl6ZSBqYXZhLmxhbmcuWFhYLlRZUEUKCWlmIGZsYWdfZW1pdF9jbGFzc19maWxlcy4KCSogcGFyc2UueSAoamF2YV9jb21wbGV0ZV90cmVlKTogIFByZS1saW1pbmFyeSBzdXBwb3J0IGZvcgoJQ09NUE9ORU5UX1JFRiAtIG9ubHkgdG8gaGFuZGxlIFBSSU1DTEFTUy5UWVBFLgoKCSogcGFyc2UueSAocGF0Y2hfc3luY2hyb25pemVkX3N0YXRlbWVudCk6ICAgRG9uJ3QgY2FsbCBtb25pdG9yZXhpdAoJdW5sZXNzIGJsb2NrIENBTl9DT01QTEVURV9OT1JNQUxMWS4gIFByb3BhZ2F0ZSB0aGF0IGZsYWcgcHJvcGVybHkuCgoJKiBqYXZhLXRyZWUuaCAoREVDTF9MT0NBTF9TVEFUSUNfVkFMVUUpOiAgUmVtb3ZlZCAtIG5vIGxvbmdlciB1c2VkLgoKCSogemlwZmlsZS5oIChvcGVuZGlyX2luX3ppcCk6ICBOZXcgZGVjbGFyYXRpb24uCgkqIGpjZi1pby5jIChzYXdfamF2YV9zb3VyY2UpOiAgTW92ZWQgdG8gamNmLXBhcnNlLmMuCgkob3BlbmRpcl9pbl96aXApOiAgTmV3IGZ1bmN0aW9uLCB1c2luZyBjb2RlIGZyb20gb3Blbl9pbl96aXAuCgkob3Blbl9pbl96aXApOiAgQ2FsbCBvcGVuZGlyX2luX3ppcC4KCShmaW5kX2NsYXNzKTogIFJlbW92ZSBuby1sb25nZXItdXNlZCBkb19jbGFzc19maWxlIHBhcmFtZXRlciwKCWJ1dCBhZGQgc291cmNlX29rIHBhcmFtZXRlci4gIENoYW5nZSBsb2dpYyBzbyBpZiB3ZSBmaW5kIGEgLmphdmEgZmlsZSwKCXdlIGRvbid0IGxvb2sgZm9yIC5jbGFzcyBpbiBsYXRlciBjbGFzc3BhdGggZW10cmllcy4KCSogamNmLXBhcnNlLmMgKGxvYWRfY2xhc3MpOiAgUGFzcyBzYXdfamF2YV9zb3VyY2UgdG8gZmluZF9jbGFzcy4KCShqY2ZfZmlndXJlX2ZpbGVfdHlwZSk6ICBPbmx5IGNhbGwgb3Blbl9pbl96aXAgaWYgY29ycmVjdCBtYWdpYyBudW1iZXIuCgkqIGdqYXZhaC5jOiBVcGRhdGUgY2FsbCB0byBmaW5kX2NsYXNzLgoJKiBqY2YtZHVtcC5jOiAgTGlrZXdpc2UuCgoJKiBqY2Ytd3JpdGUuYyAocHV0X2xpbmVudW1iZXIpOiAgSGFuZGxlIGR1cGxpY2F0ZSBsaW5lIG51bWJlcnMuCgkoZ2VuZXJhdGVfYnl0ZWNvZGVfaW5zbnMpOiAgRm9yIEVYUFJfV0lUSF9GSUxFX0xPQ0FUSU9OLCBkbwoJbm90aGluZyBpZiBib2R5IGlzIGVtcHR5X3N0bXRfbm9kZS4KCVZhcmlvdXMgbGl0dGxlIGZpeGVzIHNvIFNQIGdldHMgY29ycmVjdGx5IGFkanVzdGVkLgoJRm9yIE5FV19BUlJBWV9JTklULCBoYW5kbGUgSUdOT1JFX1RBUkdFVC4KCUZvciBDQUxMX0VYUFIsIHRlc3QgaWYgc3RhdGljIGZpcnN0LgoJKGdlbmVyYXRlX2NsYXNzZmlsZSk6ICBJZ25vcmUgZmllbGRzIHRoYXQgYXJlIERFQ0xfQVJUSUZJQ0lBTCwKCXN1Y2ggYXMgdGhlIG9uZXMgd2UgY3JlYXRlIGZvciBPYmplY3QgYW5kIENsYXNzLgoJU2V0IGFuZCByZXN0b3JlIGN1cnJlbnRfZnVuY3Rpb25fZGVjbC4KCSogcGFyc2UueTogIENoZWNrL3NldCBJU19BTl9JTVBPUlRfT05fREVNQU5EX1AgaW4gcmVhZF9pbXBvcnRfZGlyLgoJKG5vdGVfcG9zc2libGVfY2xhc3NuYW1lKTogIE5ldyBmdW5jdGlvbi4KCShyZWFkX2ltcG9ydF9lbnRyeSk6ICBSZW1vdmVkLiAgTWVyZ2VkIHdpdGggcmVhZF9pbXBvcnRfZGlyLgoJKHJlYWRfaW1wb3J0X2Rpcik6ICBEb24ndCBjYWxsIGZpbmRfY2xhc3MgLSB0aGF0IG9ubHkgZ2l2ZXMgdXMKCXRoZSBmaXJzdCBjbGFzc3BhdGggZW50cnkgaGF2aW5nIHRoZSBuZWVkZWQgcGFja2FnZS4KCVVzZSB0aGUgc3RydWN0IGJ1ZmZlciBkYXRhIHN0cnVjdHVyZSBmcm9tIGJ1ZmZlci5oLgoJKHJlYWRfaW1wb3J0X2RpciwgZmluZF9pbl9pbXBvcnRzX29uX2RlbWFuZCk6ICBUaGUgcmVtZW1iZXJlZAoJY2xhc3MgbmFtZXMgbm93IHVzZSAnLicgKG5vdCAnLycpIGFzIHBhY2thZ2Ugc2VwYXJhdG9yLgoKCSogcGFyc2UueSAoamF2YV9jb21wbGV0ZV9leHBhbmRfbWV0aG9kcyk6ICBDYWxsIHdyaXRlX2NsYXNzZmlsZQoJaGVyZSwgYW5kIG5vdCBpbiBqYXZhX2V4cGFuZF9jbGFzc2VzICh3aGljaCBvbmx5IGdldHMgZmlyc3QgY2xhc3MpLgoKU2F0IERlYyAxMiAxOTo0NjowNCAxOTk4ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnkgKDx0eXBlX2RlY2xhcmF0aW9uPik6ICBEbyBtYXliZV9nZW5lcmF0ZV9jbGluaXQgbGFzdC4KCShyZWdpc3Rlcl9maWVsZHMpOiAgSWYgYSBzdGF0aWMgZmllbGRzIGhhcyBhbiBpbml0aWFsaXplciwganVzdAoJY2hhaW4gaXQgb24gY3R4cC0+c3RhdGljX2luaXRpYWxpemVkLCBhbmQgaGFuZGxlIGxhdGVyLgoJKGphdmFfY29tcGxldGVfZXhwYW5kX21ldGhvZHMpOiAgRm9yY2UgPGNsaW5pdD4gZmlyc3QuCgkocmVzb2x2ZV9leHByZXNzaW9uX25hbWUsIHJlc29sdmVfZmllbGRfYWNjZXNzKTogIEp1c3QgZ2V0IERFQ0xfSU5JVElBTAoJLSBpdCdzIGFscmVhZHkgYmVlbiBjb21wbGV0ZWQuCgkocGF0Y2hfaW5pdGlhbGl6ZWRfc3RhdGljX2ZpZWxkKTogIE5ldyBmdW5jdGlvbi4KCShqYXZhX2NvbXBsZXRlX2ZpZWxkKTogIENhbGwgaXQuCgpTYXQgRGVjIDEyIDE5OjIxOjExIDE5OTggIFBlciBCb3RobmVyICA8Ym90aG5lckBjeWdudXMuY29tPgoKCSogZXhwci5jIChlbmNvZGVfbmV3YXJyYXlfdHlwZSwgYnVpbGRfbmV3X2FycmF5KTogIE5ldyBmdW5jdGlvbnMuCgkqIGphdmEtdHJlZS5oOiAgRGVjbGFyZSBidWlsZF9uZXdfYXJyYXkuCgkqIGpjZi13cml0ZS5jIChwYXRjaF9uZXdhcnJheSk6ICBVc2UgYnVpbGRfbmV3X2FycmF5LgoKCSogZXhwci5jIChqYXZhX2xhbmdfZXhwYW5kX2V4cCk6ICBTdXBwb3J0IE5FV19BUlJBWV9JTklULgoJKiBqY2Ytd3JpdGUuYyAoZ2VuZXJhdGVfYnl0ZWNvZGVfaW5zbnMpOiAgU3VwcG9ydCBORVdfQVJSQVlfSU5JVC4KCgkqIHBhcnNlLnkgKHBhdGNoX25ld19hcnJheV9pbml0KTogIFJlLW9yZ2FuaXplLgoJTm93IGlzIHBhc3NlZCB0aGUgYWN0dWFsIGFycmF5IChwb2ludGVyKSB0eXBlIG9mIHRoZSB2YWx1ZS4KCVNldCB0aGUgdHlwZSBvZiB0aGUgQ09OU1RSVUNUT1IgdG8gYmUgYW4gQVJSQVlfVFlQRS4KCShwYXRjaF9hcnJheV9jb25zdHJ1Y3Rvcik6ICBSZW1vdmVkIC0gbWVyZ2VkIGludG8gcGF0Y2hfbmV3X2FycmF5X2luaXQuCgkoamF2YV9jb21wbGV0ZV90cmVlKTogIFVwZGF0ZSBwYXRjaF9uZXdfYXJyYXlfaW5pdC4KCgkqIGpjZi13cml0ZS5jIChmaW5kX2NvbnN0YW50X2luZGV4KTogIE5ldyBmdW5jdGlvbi4KCShnZW5lcmF0ZV9ieXRlY29kZV9pbnNucyk6ICBVc2UgZmluZF9jb25zdGFudF9pbmRleC4KCShnZW5lcmF0ZV9jbGFzc2ZpbGUpOiAgVXNlIGZpbmRfY29uc3RhbnRfaW5kZXggZm9yIENvbnN0YW50VmFsdWUuCgoxOTk4LTEyLTExICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CgoJKiBleHByLmMgKGludm9rZV9idWlsZF9kdGFibGUpOiBSZW5hbWVkIGR0YWJsZSAtPiB2dGFibGUuCgkqIGRlY2wuYyAoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBSZW5hbWVkIGR0YWJsZSAtPiB2dGFibGUuCgkqIGNsYXNzLmMgKG1ha2VfY2xhc3NfZGF0YSk6IFJlbmFtZWQgZHRhYmxlIC0+IHZ0YWJsZSwgYW5kCglkdGFibGVfbWV0aG9kX2NvdW50IC0+IHZ0YWJsZV9tZXRob2RfY291bnQuCgpUaHUgRGVjIDEwIDIwOjAwOjU0IDE5OTggIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogZGVjbC5jIChsb25nX3plcm9fbm9kZSwgZmxvYXRfemVyb19ub2RlLCBkb3VibGVfemVyb19ub2RlKTogTmV3CglnbG9iYWwgdmFyaWFibGVzLCBpbml0aWFsaXplZC4KCSogamF2YS10cmVlLmggKGxvbmdfemVyb19ub2RlLCBmbG9hdF96ZXJvX25vZGUsIGRvdWJsZV96ZXJvX25vZGUpOgoJRGVjbGFyZWQgbmV3IGdsb2JhbCB2YXJpYWJsZXMuCgkqIGxleC5jIChqYXZhX2xleCk6IFJldHVybiBsb25nX3plcm9fbm9kZSwgZmxvYXRfemVyb19ub2RlLAoJZG91YmxlX3plcm9fbm9kZSwgaW50ZWdlcl96ZXJvX25vZGUgdXBvbiBkaXJlY3QgbWF0Y2hpbmcuCgkqIHBhcnNlLnkgKHB1cmlmeV90eXBlX25hbWUpOiBBZGRlZCBmdW5jdGlvbiBwcm90b3R5cGUuCgkoZHVwbGljYXRlX2RlY2xhcmF0aW9uX2Vycm9yX3ApOiBDb25zaWRlciBuZXdfdHlwZSBhcyBwb3RlbnRpYWxseQoJYmVpbmcgYSBpbmNvbXBsZXRlIHR5cGUuIFVzZSBwdXJpZnlfdHlwZV9uYW1lIG9uIHR5cGUgc3RyaW5nLgoJKG1ldGhvZF9oZWFkZXIpOiBzYXZlZF90eXBlOiB1bnVzZWQgdmFyaWFibGUgcmVtb3ZlZC4gRG9uJ3QgZmlndXJlCglyZXR1cm4gdHlwZSBpZiBtZXRob2QgbmFtZSBpcyBpbnZhbGlkLgoJKGphdmFfY29tcGxldGVfdHJlZSk6IFNldCBDQU5fQ09NUExFVEVfTk9STUFMTFkgYWZ0ZXIgYG5vZGUnIHdhcwoJcHJvY2Vzc2VkIGJ5IHBhdGNoX3VuYXJ5b3AuCgkocGF0Y2hfdW5hcnlvcCk6IEZpeGVkIHR5cG8gaW4gY29tbWVudC4gUmUtY29udmVydCBwcmUvcG9zdAoJaW5jcmVtZW50L2RlY3JlbWVudCBub2RlIGludG8gaXRzIG9yaWdpbmFsIHR5cGUgYWZ0ZXIgYmluYXJ5CgludW1lcmljIHByb21vdGlvbiBvbiBpdHMgb3BlcmFuZHMuCgpUaHUgRGVjIDEwIDExOjAyOjQ5IDE5OTggIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogcGFyc2UueSAoYXJyYXlfaW5pdGlhbGl6ZXI6KTogQXJyYXkgaW5pdCBvcGVyYW5kIGlzIE5VTExfVFJFRQoJaW5zdGVhZCBvZiBhIFRSRUVfTElTVCBvZiBOVUxMX1RSRUVzIHdoZW4gcGFyc2luZyBge30nLiBgeyx9JyBpcwoJbm93IGFuIGVycm9yLiBGaXhlZCBpbmRlbnRhdGlvbiBwcm9ibGVtcy4KCShwYXRjaF9zdHJpbmcpOiBIYW5kbGUgZXJyb3JfbWFya19ub2RlIGFzIGFuIGFyZ3VtZW50LgoJKHBhdGNoX25ld19hcnJheV9pbml0KTogRml4ZWQgaW5kZW50YXRpb24gcHJvYmxlbXMuCgkoYXJyYXlfY29uc3RydWN0b3JfY2hlY2tfZW50cnkpOiBSZW1vdmVkIGNoZWNrIG9uIG51bGwgd2ZsX3ZhbHVlLgoJUmV0dXJuIGFuIGVycm9yIGlmIHdmbF92YWx1ZSdzIHdhbGsgcmV0dXJucyBhbiBlcnJvci4KCldlZCBEZWMgIDkgMTU6Mzc6MDUgMTk5OCAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBqYXZhLXRyZWUuZGVmIChORVdfQVJSQVlfSU5JVCk6IE5ldyBKYXZhIHRyZWUgY29kZS4KCSogbGV4LmMgKGphdmFfbGV4KTogUmVtZW1iZXIgY29sdW1uIHBvc2l0aW9uIGJlZm9yZSBhZHZhbmNpbmcgb25lCgl0b2tlbi4gUmV0YWluIGxvY2F0aW9uIGluZm9ybWF0aW9uIG9uIE9DQl9USy4KCSogbGV4LmggKHR5cGVkZWYgc3RydWN0IGphdmFfbGMpOiBBZGRlZCBuZXcgZmllbGQuCgkqIHBhcnNlLmggKEdFVF9TS0lQX1RZUEUpOiBOZXcgbWFjcm8uCgkoUVVBTF9ERUNMX1RZUEUpOiBSZWRlZmluZWQgdXNpbmcgR0VUX1NLSVBfVFlQRS4KCSogcGFyc2UueSAoYnVpbGRfbmV3X2FycmF5X2luaXQsIHBhdGNoX25ld19hcnJheV9pbml0LAoJcGF0Y2hfYXJyYXlfY29uc3RydWN0b3IsIG1heWJlX2J1aWxkX2FycmF5X2VsZW1lbnRfd2ZsLAoJYXJyYXlfY29uc3RydWN0b3JfY2hlY2tfZW50cnkpOiBOZXcgZnVuY3Rpb24gcHJvdG90eXBlcy4KCShzd2l0Y2hfYmxvY2s6KTogVGFnZ2VkIDxub2RlPi4KCShPQ0JfVEspOiBUYWdnZWQgPG9wZXJhdG9yPi4KCShhcnJheV9pbml0aWFsaXplcjopOiBJbnN0YWxsZWQgYWN0aW9ucy4KCSh2YXJpYWJsZV9pbml0aWFsaXplcik6IEJ1aWxkIGxvY2F0aW9uIGluZm9ybWF0aW9uIG9uIGVsZW1lbnQgaWYKCW5lY2Vzc2FyeS4KCShzd2l0Y2hfc3RhdGVtZW50Oik6IEZpeGVkIGluZGVudGF0aW9uIHR5cG8uCgkoc3dpdGNoX2Jsb2NrOik6IFJlZGVmaW5lZCBkZWZhdWx0IGFjdGlvbi4KCShqYXZhX2NvbXBsZXRlX3RyZWUpOiBIYW5kbGUgTkVXX0FSUkFZX0lOSVQgaW4gTU9ESUZZX0VYUFI6LgoJKHBhdGNoX2Fzc2lnbm1lbnQpOiBSZW1vdmVkIGR1cGxpY2F0ZSBjb2RlLgoJKG1heWJlX2J1aWxkX2FycmF5X2VsZW1lbnRfd2ZsLCBidWlsZF9uZXdfYXJyYXlfaW5pdCwKCXBhdGNoX25ld19hcnJheV9pbml0LCBwYXRjaF9hcnJheV9jb25zdHJ1Y3RvciwKCWFycmF5X2NvbnN0cnVjdG9yX2NoZWNrX2VudHJ5KTogTmV3IGZ1bmN0aW9ucy4KCk1vbiBEZWMgIDcgMTU6MTM6NTIgMTk5OCAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBwYXJzZS55IChhcnJheV9pbml0aWFsaXplcik6IFRhZ2dlZCA8bm9kZT4uCgkodmFyaWFibGVfaW5pdGlhbGl6ZXI6KTogVXNlIGRlZmF1bHQgcnVsZS4KCShhcnJheV9pbml0aWFsaXplcjopOiBEZWZpbmVkIGFjdGlvbnMuCgkodmFyaWFibGVfaW5pdGlhbGl6ZXJzOik6IExpa2V3aXNlLgoJKHJlc29sdmVfcXVhbGlmaWVkX2V4cHJlc3Npb25fbmFtZSk6IFVzZSBERUNMX0NPTlRFWFQgdG8gYnVpbGQKCW5vbi1zdGF0aWMgZmllbGQgYWNjZXNzZXMuCgkocGF0Y2hfaW52b2tlKTogRml4ZWQgaW5kZW50YXRpb24gdHlwby4KCShqYXZhX2NvbXBsZXRlX3RyZWUpOiBMaWtld2lzZS4KCShidWlsZF9sYWJlbGVkX2Jsb2NrKTogQ2hhbmdlZCBsZWFkaW5nIGNvbW1lbnQuIEdlbmVyYXRlIGFuIGVycm9yCglpbiBjYXNlIG9mIGR1cGxpY2F0ZSBsb29wIGxhYmVscy4KCShwYXRjaF9jb25kaXRpb25hbF9leHByKTogUGF0Y2ggcmVzdWx0cyBvZiBzdHJpbmcgY29uY2F0ZW5hdGlvbgoJb3BlcmF0aW9ucy4KClN1biBEZWMgIDYgMTM6NDU6MDAgMTk5OCAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGN5Z251cy5jb20+CgoJKiBjb25zdGFudHMuYyAoZmluZF9tZXRob2RyZWZfaW5kZXgpOiAgV2hlbiB0aGUgY2xhc3MgaXMgYW4gaW50ZXJmYWNlLAoJZ2VuZXJhdGUgQ09OU1RBTlRfSW50ZXJmYWNlTWV0aG9kcmVmIGluc3RlYWQgb2YgYSBDT05TVEFOVF9NZXRob2RSZWYuCgoJKiBkZWNsLmMgKGZpbml0X2lkZW50aWZpZXJfbm9kZSk6ICBVc2UgIiRmaW5pdCQiLCByYXRoZXIgdGhhbgoJIjxmaW5pdD4iICh3aGljaCBTdW4ncyB2ZXJpZmllciByZWplY3RzKS4KCSogcGFyc2UueSAobWF5YmVfZ2VuZXJhdGVfZmluaXQpOiAgTGVhdmUgb3V0IG1lYW5pbmdsZXNzIGZpbmFsIGZsYWcuCgkoZ2VuZXJhdGVfZmllbGRfaW5pdGlhbGl6YXRpb25fY29kZSk6ICBSZW1vdmVkLgoJKGZpeF9jb25zdHJ1Y3RvcnMpICBEb24ndCBhZGQgY2FsbCB0byAkZmluaXQkIGhlcmUgKHdyb25nIG9yZGVyKS4KCShwYXRjaF9tZXRob2RfaW52b2NhdGlvbik6ICBBZGQgJGZpbml0JCBjYWxsIGhlcmUuCgoJKiBqYXZhLXRyZWUuaCAoQ0FMTF9VU0lOR19TVVBFUik6ICBOZXcgbWFjcm8uCgkqIHBhcnNlLnkgKHBhdGNoX2ludm9rZSk6ICBSZW1vdmUgaW0gbG9jYWwgdmFyaWFibGUuCgkocGF0Y2hfbWV0aG9kX2ludm9jYXRpb24sIHBhdGNoX2ludm9rZSk6ICBEb24ndCBwYXNzIHN1cGVyIHBhcmFtZXRlci4KCShwYXRjaF9pbnZva2UpOiAgVXNlIENBTExfVVNJTkdfU1VQRVIgaW5zdGVhZCBvZiBmcm9tX3N1cGVyIHBhcmFtZXRlci4KCShyZXNvbHZlX3F1YWxpZmllZF9leHByZXNzaW9uX25hbWUpOiAgTWF5YmUgc2V0IENBTExfVVNJTkdfU1VQRVIuCgoJKiBqY2Ytd3JpdGUuYyAoZ2V0X2FjY2Vzc19mbGFncyk6ICBGaXggdHlwbyBBQ0NfUFVCTElDIC0+IEFDQ19GSU5BTC4KCgkqIHBhcnNlLnkgKGphdmFfY29tcGxldGVfdHJlZSk6ICBEb24ndCBjb21wbGFpbiBhYm91dCB1bnJlYWNoYWJsZQoJc3RhdGVtZW50IGlmIGl0IGlzIGVtcHR5X3N0bXRfbm9kZS4KCgkqIGpjZi13cml0ZS5jIChmaW5kX2NvbnN0YW50X3dpZGUpOiAgTmV3IGZ1bmN0aW9uLgoJKHB1c2hfbG9uZ19jb25zdCk6ICBVc2UgZmluZF9jb25zdGFudF93aWRlLgoKCSogamNmLXdyaXRlLmMgKGdlbmVyYXRlX2J5dGVjb2RlX2luc24pOiAgRml4IGJ1ZyBpbiBzd2l0Y2ggaGFuZGxpbmcuCgkoZ2VuZXJhdGVfYnl0ZWNvZGVfaW5zbik6ICBVc2UgY29ycmVjdCBkdXAgdmFyaWFudCBmb3IgTU9ESUZZX0VYUFIuCglBZGQgInJlZHVuZGFudCIgTk9URV9QVVNIL05PVEVfUE9QIHVzZXMgc28gY29kZV9TUF9tYXggZ2V0cyBzZXQuCglFbWl0IGludm9rZWludGVyZmFjZSB3aGVuIGNhbGxpbmcgYW4gaW50ZXJmYWNlIG1ldGhvZC4KCUVtaXQgaW52b2tlc3BlY2lhbCBhbHNvIHdoZW4gY2FsbGluZyBzdXBlciBvciBwcml2YXRlIG1ldGhvZHMuCgoJKiBqY2Ytd3JpdGUuYyAoZ2VuZXJhdGVfY2xhc3NmaWxlKTogIEVtaXQgQ29uc3RhbnRWYWx1ZSBhdHRyaWJ1dGVzLgoKU3VuIERlYyAgNiAxMzoyMToxOCAxOTk4ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAY3lnbnVzLmNvbT4KCgkqIGpjZi1kdW1wLmMgKElOVk9LRSk6ICBJZiBpbnZva2VpbnRlcmZhY2UsIHByaW50IG51bWJlciBvZiBhcmdzLgoKVGh1IERlYyAgMyAxNzoxMToxMiAxOTk4ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIGphdmEtdHJlZS5oIChqYXZhX2xheW91dF9zZWVuX2NsYXNzX21ldGhvZHMpOiBOZXcgZnVuY3Rpb24KCXByb3RvdHlwZS4KCShMQVlPVVRfU0VFTl9DTEFTU19NRVRIT0RTKTogTWFjcm8gcmVtb3ZlZC4KCSogamNmLXBhcnNlLmMgKHBhcnNlX2NsYXNzX2ZpbGUpOiBDYWxsIGphdmFfbGF5b3V0X3NlZW5fY2xhc3NfbWV0aG9kcy4KCSogcGFyc2UuaCAoUFJPTU9URV9SRUNPUkRfSUZfQ09NUExFVEUpOiBOZXcgbWFjcm8uCgkqIHBhcnNlLnkgKG1ldGhvZF9kZWNsYXJhdG9yOik6IERlZmluZWQgYWN0aW9uLgoJKGlzc3VlX3dhcm5pbmdfZXJyb3JfZnJvbV9jb250ZXh0KTogaW5wdXRfZmlsZW5hbWUgc2F2ZWQsIHNldCB0bwoJdGhlIGFwcHJvcHJpYXRlIHZhbHVlIGFuZCByZXN0b3JlZCBhZnRlciBqYXZhX2Vycm9yIGlzIGNhbGxlZC4KCShidWlsZF91bnJlc29sdmVkX2FycmF5X3R5cGUpOiBGaXhlZCBjb21tZW50LgoJKHJlZ2lzdGVyX2ZpZWxkcyk6IFVzZSBQUk9NT1RFX1JFQ09SRF9JRl9DT01QTEVURS4KCShtZXRob2RfaGVhZGVyKTogRGVhbCB3aXRoIHJldHVybiB0eXBlIHRoZSBzYW1lIHdheSB0eXBlIGFyZQoJaGFuZGxlZCBmb3IgZmllbGRzIGFuZCBtZXRob2QncyBwYXJhbWV0ZXJzIGFuZCBsb2NhbCB2YXJpYWJsZXMKCXR5cGVzIGFyZSBoYW5kbGVkLgoJKGNoZWNrX21ldGhvZF9yZWRlZmluaXRpb24pOiBSZW1vdmVkIGV4dHJhIENSLgoJKGRlY2xhcmVfbG9jYWxfdmFyaWFibGVzKTogVXNlIFBST01PVEVfUkVDT1JEX0lGX0NPTVBMRVRFLgoJKGphdmFfbGF5b3V0X3NlZW5fY2xhc3NfbWV0aG9kcyk6IE5ldyBmdW5jdGlvbi4KCShqYXZhX2xheW91dF9jbGFzc2VzKTogQ2FsbCBqYXZhX2xheW91dF9zZWVuX2NsYXNzX21ldGhvZHMuCgpUaHUgRGVjICAzIDE1OjU2OjUwIDE5OTggIFBlciBCb3RobmVyICA8Ym90aG5lckBjeWdudXMuY29tPgoKCSogcGFyc2UseSAocGF0Y2hfc3luY2hyb25pemVkX3N0YXRlbWVudCk6ICBTZXQgQ0FOX0NPTVBMRVRFX05PUk1BTExZLgoKVGh1IERlYyAgMyAxNTowODozMCAxOTk4ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAY3lnbnVzLmNvbT4KCgkqIGpjZi1kdW1wLmMgKG1haW4pOiAgRml4IGVycm9yIG1lc3NhZ2UuCgkqIGpjZi1wYXRoLmMgKGFkZF9lbnRyeSk6ICBTdHlsZSBmaXguCgpXZWQgRGVjICAyIDE1OjUyOjI1IDE5OTggIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogY2xhc3MuYyAobGF5b3V0X2NsYXNzX21ldGhvZCk6IENhbGwgYnVpbGRfamF2YV9hcmd1bWVudF9zaWduYXR1cmUKCW9uIGNvbnN0cnVjdG9ycyB0b28uCgkqIHBhcnNlLnkgKGNoZWNrX21ldGhvZF9yZWRlZmluaXRpb24pOiBVc2UgVFlQRV9BUkdVTUVOVF9TSUdOQVRVUkUuCgkocGF0Y2hfbWV0aG9kX2ludm9jYXRpb24pOiBEZWZpbmUgYSBwcmltYXJ5IHdoZW4gcmVzb2x2aW5nIGFuCglleHByZXNzaW9uIG5hbWUuIEF1Z21lbnRlZCBjb21tZW50IG9uIGNvZGUgY2hlY2tpbmcgaWxsZWdhbCBgdGhpcycKCXVzYWdlLiBMb29zZW5lZCBpdCB0ZXN0IGJ5IGFjY2VwdGluZyBORVdfQ0xBU1NfRVhQUi4KClR1ZSBEZWMgIDEgMTM6NTM6MjQgMTk5OCAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBjbGFzcy5jIChsYXlvdXRfY2xhc3NfbWV0aG9kKTogRG9uJ3QgcmVwb3J0IGVycm9yIG9uIG5vbi1zdGF0aWMKCW92ZXJyaWRpbmcgc3RhdGljIGlmIHRoZSBtZXRob2QgaXMgcHJpdmF0ZS4KCSogamF2YS10cmVlLmggKGZpbmlzaF9jbGFzcyk6IFByb3RvdHlwZSBhZGRlZC4KCSogbGV4LmMgKGphdmFfZ2V0X2xpbmVfY29sKTogSGFuZGxlIGNvbCBhcmd1bWVudCAtMiB2YWx1ZS4KCSogcGFyc2UuaDogQWxsIHN0YXRpYyBtZXRob2QgZGVjbGFyYXRpb25zIG1vdmVkIHRvIHBhcnNlLnkuCgkqIHBhcnNlLnk6IE5vdyBjb250YWlucyBhbGwgc3RhdGljIG1ldGhvZCBkZWNsYXJhdGlvbnMgcHJldmlvdXNseQoJZm91bmQgaW4gcGFyc2UuaC4KCShmaW5kX2V4cHJfd2l0aF93ZmwsIG1pc3NpbmdfcmV0dXJuX2Vycm9yLAoJdW5yZWFjaGFibGVfc3RtdF9lcnJvcik6IE5ldyBmdW5jdGlvbnMuCgkoamF2YV9nZXRfcmVhbF9tZXRob2RfbmFtZSk6IElkZW50aWZ5IGNvbnN0cnVjdG9ycyBiZWFyaW5nIGNsYXNzCgluYW1lcyBpbiBzb3VyY2UgY29kZSBjb21waWxlZCBjbGFzc2VzIG9ubHkuCgkoamF2YV9jb21wbGV0ZV9leHBhbmRfbWV0aG9kcyk6IENhbGwgbWlzc2luZ19yZXR1cm5fZXJyb3IuCgkoaW52b2NhdGlvbl9tb2RlKTogUHJpdmF0ZSBtZXRob2RzIGludm9rZWQgYXMgc3RhdGljIG1ldGhvZHMuCgkoamF2YV9jb21wbGV0ZV90cmVlKTogQ2FsbCB1bnJlYWNoYWJsZV9zdG10X2Vycm9yLgoKMTk5OC0xMi0wMSAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgoKCSogTWFrZWZpbGUuaW4gKCt0YXJnZXQpOiBSZW1vdmVkLgoJKCt4bWFrZV9maWxlKTogTGlrZXdpc2UuCgkoK3RtYWtlX2ZpbGUpOiBMaWtld2lzZS4KCSguTk9FWFBPUlQpOiBSZW1vdmVkIGR1cGxpY2F0ZS4KCkZyaSBOb3YgMjcgMTM6MjA6NTEgMTk5OCAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogTWFrZWZpbGUuaW4gKGpjMSwganYtc2Nhbik6IExpbmsgd2l0aCAkKFNVQkRJUl9PQlNUQUNLKS4KCgkqIGp2LXNjYW4uYzogRml4IHhtYWxsb2MgcHJvdG90eXBlLiAgUHJvdmlkZSBhbiB4bWFsbG9jIGRlZmluaXRpb24uCgoJKiBqdmdlbm1haW4uYzogUmVtb3ZlIHRoZSB4bWFsbG9jIHByb3RvdHlwZSwgd2UgZ2V0IGl0IGZyb20KCWxpYmliZXJ0eS5oLiAgUHJvdmlkZSBhbiB4bWFsbG9jIGRlZmluaXRpb24uCgoJKiBqdnNwZWMuYzogUmVtb3ZlIHRoZSB4bWFsbG9jIHByb3RvdHlwZS4KCgkqIHBhcnNlLXNjYW4ueTogSW5jbHVkZSBjb25maWcuaCBhbmQgc3lzdGVtLmguICBEb24ndCBpbmNsdWRlCglPUyBoZWFkZXJzIG9yIGdhbnNpZGVjbC5oLiAgRG9uJ3QgcHJvdG90eXBlIHhtYWxsb2MveHN0cmR1cC4KCVByb3ZpZGUgYW4geHN0cmR1cCBkZWZpbml0aW9uLgoKVGh1IE5vdiAyNiAyMjowMzo1OCAxOTk4ICBBbGV4YW5kcmUgT2xpdmEgIDxvbGl2YUBkY2MudW5pY2FtcC5icj4KCgkqIGpjZi1wYXRoLmMgKGFkZF9lbnRyeSk6IFJlY29nbml6ZSAiLmphciIgdG9vLgoJKiBsYW5nLXNwZWNzLmg6IExpa2V3aXNlLgoKVGh1IE5vdiAyNiAxMjo0NDowNyAxOTk4ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAY3lnbnVzLmNvbT4KCgkqIGpjZi13cml0ZS5jIChnZW5lcmF0ZV9ieXRlY29kZV9pbnNucyk6ICBJbiBDYWxsX0VYUFIsIGhhbmRsZQoJc29mdF9tb25pdG9yZW50ZXJfbm9kZSwgc29mdF9tb25pdG9yZXhpdF9ub2RlLCB0aHJvd19ub2RlLgoKCSogamNmLXdyaXRlLmMgKGdlbmVyYXRlX2J5dGVjb2RlX2luc25zKToKCUhhbmRsZSBwcmUvcG9zdC1pbmNyZW1lbnQvZGVjcmVtZW50IG9mIGxvbmcuCgoJKiBqY2Ytd3JpdGUuYyAoZ2VuZXJhdGVfYnl0ZWNvZGVfaW5zbnMpOgoJSGFuZGxlIG1pc3NpbmcgZXhjZXB0aW9uIGhhbmRsZXIgKGZpbmFsbHkgZm9yIHN5bmNocm9uaXplZCkuCgpXZWQgTm92IDI1IDA5OjQ3OjE1IDE5OTggIFBlciBCb3RobmVyICA8Ym90aG5lckBjeWdudXMuY29tPgoKCSogamF2YS10cmVlLmggKGVuZF9wYXJhbXNfbm9kZSk6ICBEZWNsYXJlIGdsb2JhbC4KCSogZGVjbC5jIChlbmRfcGFyYW1zX25vZGUpOiAgTmV3IGdsb2JhbC4KCShpbml0X2RlY2xfcHJvY2Vzc2luZywgc3RhcnRfamF2YV9tZXRob2QpOiAgVXNlIGVuZF9wYXJhbXNfbm9kZSBmb3IKCWVuZCBvZiBsaXN0IG9mIHBhcmFtZXRlciB0eXBlcy4gIEZvbGxvd3MgY29ycmVjdCBnY2MgY29udmVudGlvbnMuCgkqIGV4cHIuYyAocG9wX2FyZ3VtZW50X3R5cGVzLCBwb3BfYXJndW1lbnRzKTogIExpa2V3aXNlLgoJKiBsYW5nLmMgKHB1dF9kZWNsX25vZGUpOiAgTGlrZXdpc2UuCgkqIHR5cGVjay5jICh2YXJpb3VzIHBsYWNlcyk6ICBMaWtld2lzZS4KCSogY2xhc3MueSAodmFyaW91cyBwbGFjZXMpOiAgTGlrZXdpc2UuCgkqIHBhcnNlLnkgKHZhcmlvdXMgcGxhY2VzKTogIExpa2V3aXNlLgoKCSogcGFyc2UueSAoamF2YV9jb21wbGV0ZV90cmVlKTogIE1vdmUgQ0FOX0NPTVBMRVRFX05PUk1BTExZLgoJKGJ1aWxkX2p1bXBfdG9fZmluYWxseSk6ICBBZGQgbWlzc2luZyBDQU5fQ09NUExFVEVfTk9STUFMTFkuCgoJKiBjbGFzcy5jOiAgQWRkICNpbmNsdWRlIGZsYWdzLmgsIHJlbW92ZSBuby1sb25nZXIgbmVlZGVkIGRlY2xhcmF0aW9uLgoKCSogY2xhc3MuYyAobGF5b3V0X2NsYXNzX21ldGhvZCk6ICBSZW1vdmUgY29tbWVudGVkLW91dCBjb2RlLCByZS1mb3JtYXQuCglEb24ndCBhZGQgdnRhYmxlIGVudHJ5IChvciBpbmRleCkgZm9yIHByaXZhdGUgbWV0aG9kcy4KCSogZXhwci5jIChleHBhbmRfaW52b2tlKTogIEEgcHJpdmF0ZSBtZXRob2QgaXMgaW1wbGljaXRseSBmaW5hbC4KCSogY2xhc3MuYyAobWFrZV9jbGFzc19kYXRhKTogIElmIGlubGluaW5nIG9yIG9wdGltaXppbmcsCglza2lwIHByaXZhdGUgbWV0aG9kcy4KCgkqIGNsYXNzLmMgKGZpbmlzaF9jbGFzcyk6ICBOZXcgZnVuY3Rpb24uICBDYWxscyBleGlzdGluZyBtZXRob2RzLAoJYnV0IGFsbHMgZW1pdHMgZGVmZXJyZWQgaW5saW5lIGZ1bmN0aW9ucy4KCSogamNmLXBhcnNlLmMgKHBhcnNlX2NsYXNzX2ZpbGUpOiAgQ2FsbCBmaW5pc2hfY2xhc3MuCgkqIHBhcnNlLnkgKGphdmFfY29tcGxldGVfZXhwYW5kX21ldGhvZHMpOiAgTGlrZXdpc2UuCgoJKiBleHByLmMgKGJ1aWxkX2phdmFfYmlub3ApOiAgRXhwbGljaXQgZGVmYXVsdCwgdG8gc2lsZW5jZSAtV2FsbC4KCgkqIGV4cHIuYyAoQ0hFQ0tfUENfSU5fUkFOR0UpOiAgQWRkIHZvaWQgY2FzdCB0byBraWxsIHdhcm5pbmdzLgoKV2VkIE5vdiAyNSAwMDo1MDo1OCAxOTk4ICBNYXJjIEVzcGllIDxlc3BpZUBxdWF0cmFtYXJhbi5lbnMuZnI+CgoJKiBqY2Ytd3JpdGUuYyAoZ2VuZXJhdGVfYnl0ZWNvZGVfY29uZGl0aW9uYWwpOiBGaXggdHlwby4KClR1ZSBOb3YgMjQgMTc6MDY6MzggMTk5OCAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGN5Z251cy5jb20+CgoJKiAoZ2VuZXJhdGVfY2xhc3NmaWxlKTogQWx3YXlzIHdyaXRlIGNsYXNzIGFjY2VzcyBmbGFnIHdpdGgKCUFDQ19TVVBFUiBzZXQuCgpUdWUgTm92IDI0IDE2OjM0OjMzIDE5OTggIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogY2xhc3MuYyAobWF5YmVfbGF5b3V0X3N1cGVyX2NsYXNzKTogTmV3IGZ1bmN0aW9uLgoJKGxheW91dF9jbGFzcyk6IFJlb3JnYW5pemVkLiBMb29wIG9uIGNsYXNzIG1ldGhvZHMgZGlzcGF0Y2hlZCBpbnRvCglhIG5ldyBmdW5jdGlvbi4gQ2FsbCBtYXliZV9sYXlvdXRfc3VwZXJfY2xhc3MuCgkobGF5b3V0X2NsYXNzX21ldGhvZHMsIGxheW91dF9jbGFzc19tZXRob2QpOiBOZXcgZnVuY3Rpb25zLgoJKiBleHByLmMgKGV4cGFuZF9qYXZhX05FVyk6IENhbGwgbGF5b3V0X2NsYXNzX21ldGhvZHMgb24gbG9hZGVkCgljbGFzcy4KCShleHBhbmRfaW52b2tlKTogTGlrZXdpc2UuCgkqIGphdmEtdHJlZS5oIChhbGxfY2xhc3NfbGlzdCk6IE5ldyBnbG9iYWwgdmFyaWFibGUgZGVjbGFyZWQuCgkobGF5b3V0X2NsYXNzX21ldGhvZHMsIGxheW91dF9jbGFzc19tZXRob2QpOiBOZXcgZnVuY3Rpb24KCXByb3RvdHlwZXMuCgkoTEFZT1VUX1NFRU5fQ0xBU1NfTUVUSE9EUyk6IE5ldyBtYWNyby4KCSogamNmLXBhcnNlLmMgKGFsbF9jbGFzc19saXN0KTogTmV3IGdsb2JhbCB2YXJpYWJsZS4KCShsb2FkX2NsYXNzKTogRXh0ZW5kZWQgd2hhdCBjbGFzc19vcl9uYW1lIGNhbiBiZS4gVXNlIHBhcnNlcgoJY29udGV4dCBtZWNoYW5pc20gdG8gc2F2ZSBnbG9iYWxzIGJlZm9yZSBjYWxsaW5nIGpjZl9wYXJzZS4KCShqY2ZfcGFyc2Vfc291cmNlKTogRG9uJ3QgcGFyc2UgdHdpY2UgaWYgSEFTX0JFRU5fQUxSRUFEWV9QQVJTRURfUAoJaXMgc2V0IG9uIHRoZSBmaWxlIG5hbWUuCgkoamNmX3BhcnNlKTogTGF5b3V0IGNsYXNzIG1ldGhvZHMgd2hlbiBPYmplY3QgaXMgbG9hZGVkLCBvdGhlcndpc2UKCXJlY29yZCBjbGFzcyBpbiBhbGxfY2xhc3NfbGlzdCBmb3IgZGVsYXllZCBtZXRob2QgbGF5b3V0LgoJKHBhcnNlX2NsYXNzX2ZpbGUpOiBVc2UgTEFZT1VUX1NFRU5fQ0xBU1NfTUVUSE9EUy4KCSogbGFuZy5jIChwdXRfZGVjbF9ub2RlKTogRGVjb2RlIDxpbml0PiBpbnRvIHRoZSBkZWNsIGNvbnRleHQKCWNsYXNzIG5hbWUuCgkqIGxleC5jIChqYXZhX2FsbG9jYXRlX25ld19saW5lKTogVXNlIHhtYWxsb2MuCgkqIHBhcnNlLmggKElOQ09NUExFVEVfVFlQRV9QKTogUmVkZWZpbmVkIHRvIHdvcmsgd2l0aCBpbmNvbXBsZXRlCglwb2ludGVycywgbm90IFRSRUVfTElTVCBlbGVtZW50cy4KCShzdHJ1Y3QgcGFyc2VyX2N0eHQpOiBGaXhlZCBjb21tZW50IGluZGVudGF0aW9ucywgYWRkZWQgY29tbWVudHMKCWFuZCByZW9yZGVyZWQgc29tZSBmaWVsZHMuCgkoamF2YV9jaGVja19tZXRob2RzKTogRnVuY3Rpb24gcHJvdG90eXBlIHJlbW92ZWQuCgkqIHBhcnNlLnkgKGphdmFfcHVzaF9wYXJzZXJfY29udGV4dCk6IFVzZSB4bWFsbG9jLgoJKGphdmFfcGFyc2VyX2NvbnRleHRfcmVzdG9yZV9nbG9iYWwpOiBQb3AgZXh0cmEgcHVzaGVkIGN0eHAgb25seQoJd2hlbiB0aGVyZSdzIG5vdGhpbmcgbmV4dC4KCShtYXliZV9jcmVhdGVfY2xhc3NfaW50ZXJmYWNlX2RlY2wpOiBGaXhlZCBjb21tZW50LCBhZGQgbmV3CgljcmVhdGVkIGNsYXNzIGRlY2wgdG8gYWxsX2NsYXNzX2xpc3QuCgkobWV0aG9kX2hlYWRlcik6IFVzZSBHRVRfUkVBTF9UWVBFIG9uIGFyZ3VtZW50J3MgdHlwZXMuCgkobWV0aG9kX2RlY2xhcmF0b3IpOiBVc2UgR0VUX1JFQUxfVFlQRSwgY2hhbmdlIHR5cGUgdG8gdGhlIHJlYWwKCXR5cGUgaW4gVFJFRV9MSVNUIGRlcGVuZGVuY3kgbm9kZS4gQnVpbGQgYXJndW1lbnQgbGlzdCB3aXRoIHRoZQoJcmVhbCB0eXBlLgoJKGNyZWF0ZV9qZGVwX2xpc3QpOiBVc2UgeG1hbGxvYy4gUmVtb3ZlZCBhbGxvY2F0aW9uIGVycm9yIG1lc3NhZ2UuCgkob2J0YWluX2luY29tcGxldGVfdHlwZSk6IEZpeGVkIGxlYWRpbmcgY29tbWVudC4gQnJvYWRlbmVkCglpbmNvbWluZyBhcmd1bWVudCBtZWFuaW5nLgoJKHJlZ2lzdGVyX2luY29tcGxldGVfdHlwZSk6IFVzZSB4bWFsbG9jLiBSZW1vdmVkIGFsbG9jYXRpb24gZXJyb3IKCW1lc3NhZ2UuCgkoc2FmZV9sYXlvdXRfY2xhc3MpOiBGaXhlZCBsZWFkaW5nIGNvbW1lbnQuCgkoamRlcF9yZXNvbHZlX2NsYXNzKTogUmV2ZXJzZWQgaWYgc3RhdGVtZW50IGNvbmRpdGlvbiBhbmQgc3dpdGNoCglpZiBhbmQgZWxzZSBib2RpZXMuCgkocmVzb2x2ZV9hbmRfbGF5b3V0KTogRml4ZWQgbGVhZGluZyBjb21tZW50LiBCcm9hZGVuZWQgaW5jb21pbmcKCWFyZ3VtZW50IG1lYW5pbmcuCgkoY29tcGxldGVfY2xhc3NfcmVwb3J0X2Vycm9ycyk6IE5ldyBsb2NhbCB2YXJpYWJsZSBuYW1lLCBmb3IKCWNsYXJpdHkuIHB1cmlmeV90eXBlX25hbWUgdXNlZCBmb3IgYWxsIGVycm9yIGNhc2VzLgoJKGphdmFfZ2V0X3JlYWxfbWV0aG9kX25hbWUpOiBTdHJpY3RlciBjaGVjayBvbiBjb25zdHJ1Y3RvcnMuCgkoamF2YV9jaGVja19yZWd1bGFyX21ldGhvZHMpOiBSZXZlcnNlIG1ldGhvZHMgbGlzdCBvbmx5IGlmIG5vdAoJYWxyZWFkeSBsYWlkIG91dC4gTGF5b3V0IGFydGlmaWNpYWwgY29uc3RydWN0b3IuCgkoamF2YV9jaGVja19tZXRob2RzKTogRGVsZXRlZC4KCShzb3VyY2Vfc3RhcnRfamF2YV9tZXRob2QpOiBPYnRhaW4gaW5jb21wbGV0ZSB0eXBlIGZvciBwYXRjaGFibGUKCW1ldGhvZCBhcmd1bWVudHMuCgkoamF2YV9sYXlvdXRfY2xhc3Nlcyk6IEZpeGVkIGxlYWRpbmcgY29tbWVudC4gVXNlCglMQVlPVVRfU0VFTl9DTEFTU19NRVRIT0RTLCB1c2UgYSBsb29wIHRvIGNoZWNrIG1ldGhvZHMuIEFkZGVkIGVsc2UKCXN0YXRlbWVudCB0byBsYXlvdXQgb3BlcmF0aW9uLCByZXVzZSBMQVlPVVRfU0VFTl9DTEFTU19NRVRIT0RTCgliZWZvcmUgcmV0dXJuaW5nLiBGaXhlZCBjb21tZW50cy4KCShqYXZhX2V4cGFuZF9jbGFzc2VzKTogQ2hlY2sgZm9yIGVycm9ycyB1cCBmcm9udC4KCShwYXRjaF9tZXRob2RfaW52b2NhdGlvbik6IENsYXNzIHRvIHNlYXJjaCBpcyByZXNvbHZlZCBhbmQgbGFpZAoJb3V0LgoKVHVlIE5vdiAyNCAxMjo1NzoxMyAxOTk4ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAY3lnbnVzLmNvbT4KCgkqIGV4cHIuYyAoamF2YV9sYW5nX2V4cGFuZF9leHByKTogIEFkZCBtaXNzaW5nIGVtaXRfcXVldWUuCgoJKiBqYXZhb3AuaCAoaW50OCk6ICBSZW1vdmVkIC0gbm90IHVzZWQuCgkoamJ5dGUpOiAgUmVkZWZpbmUgcG9ydGFibHkgd2l0aCBjb3JyZWN0IHNpZ25lZG5lc3MuCgoJKiBqY2Ytd3JpdGUuYyAoZ2VuZXJhdGVfYnl0ZWNvZGVfaW5zbnMpOiAgRG9uJ3QgZnJlZSBzd19zdGF0ZS5jYXNlcy4KCgkqIGpjZi13cml0ZS5jIChnZW5lcmF0ZV9ieXRlY29kZV9pbnNucyk6ICBGaXggdHlwbwoJT1BDT0RFX2dldHN0YXRpYyB0byBPUENPREVfZ2V0ZmllbGQuCgoJKiBqYXZhLXRyZWUuZGVmIChDQVNFX0VYUFIsIERFRkFVTFRfRVhQUik6ICBLaW5kIGlzICd4Jywgbm90ICcxJy4KCSogcGFyc2UueSAoamF2YV9jb21wbGV0ZV90cmVlKTogIEZvciBDQVNFX0VYUFIgYW5kIERFRkFVTFRfRVhQUiwKCXNldCBUUkVFX1NJREVfRUZGRUNUUyAob3RoZXJ3aXNlIGV4cGFuZF9leHByIG1heSBza2lwIHRoZW0pLgoKVGh1IE5vdiAxOSAxMToxNjo1NSAxOTk4ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIGpjZi1wYXJzZS5jIChqY2ZfcGFyc2Vfc291cmNlKTogRnVuY3Rpb24gcmV0dXJuZWQgdHlwZSBpcwoJdm9pZC4gQWRkZWQgcHJvdG90eXBlLgoJKGpjZl9wYXJzZSk6IEZ1bmN0aW9uIHJldHVybmVkIHR5cGUgaXMgdm9pZC4KCSh5eXBhcnNlKTogUmVtb3ZlIGNhbGwgdG8gZmNsb3NlIG9uIHRoZSBsYXN0IHBhcnNlZCBmaWxlLgoKCSogamF2YS10cmVlLmggKGpjZl9wYXJzZSk6IENoYW5nZWQgamNmX3BhcnNlIHByb3RvdHlwZS4KCldlZCBOb3YgMTggMjM6NTQ6NTMgMTk5OCAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBjbGFzcy5jICh1bm1hbmdsZV9jbGFzc25hbWUpOiBTZXQgUVVBTElGSUVEX1Agd2hlbiBhcHByb3ByaWF0ZS4KCShsYXlvdXRfY2xhc3MpOiBDb3BlIHdpdGggbWV0aG9kcyBmZWF0dXJpbmcgV0ZMIGluIGRlY2wgbmFtZXMuCgkqIGRlY2wuYyAodW5xdWFsaWZpZWRfb2JqZWN0X2lkX25vZGUpOiBOZXcgZ2xvYmFsIHZhcmlhYmxlLAoJaW5pdGlhbGl6ZWQuCgkoYnVpbGRfZGVjbF9ub19sYXlvdXQpOiBSZW1vdmVkLgoJKiBleHByLmMgKGJ1aWxkX3ByaW10eXBlX3R5cGVfcmVmKTogSGFuZGxlIERvdWJsZS4KCShqYXZhX2xhbmdfZXhwYW5kX2V4cHIpOiBGaXhlZCBpbmRlbnRhdGlvbnMuCgkqIGphdmEtdHJlZS5oIChDTEFTU19NRVRIT0RfQ0hFQ0tFRF9QKTogRmxhZyBkZWxldGVkLgoJKGZsYWdfd2FsbCwgZmxhZ19yZWR1bmRhbnQsIGZsYWdfbm90X292ZXJyaWRpbmcsCglmbGFnX3N0YXRpY19sb2NhbF9qZGsxXzEsIHVucXVhbGlmaWVkX29iamVjdF9pZF9ub2RlKTogR2xvYmFsCgl2YXJpYWJsZSBkZWNsYXJhdGlvbnMuCgkoYnVpbGRfZGVjbF9ub19sYXlvdXQpOiBSZW1vdmVkIHByb3RvdHlwZS4KCShqYXZhX2dldF9yZWFsX21ldGhvZF9uYW1lKTogQWRkZWQgcHJvdG90eXBlLgoJKElTX1VOQ0hFQ0tFRF9FWFBSRVNTSU9OX1ApOiBSZW5hbWVkIElTX1VOQ0hFQ0tFRF9FWENFUFRJT05fUC4KCShqYXZhX3BhcnNlX2Fib3J0X29uX2Vycm9yKTogTWFjcm8gbm93IGp1c3QgcmV0dXJucy4KCSogamNmLXBhcnNlLmMgKGpjZl9wYXJzZV9zb3VyY2UpOiBDaGVjayBmY2xvc2UgcmV0dXJuZWQKCXZhbHVlLiBDYWxsIGVtaXRfcmVnaXN0ZXJfY2xhc3NlcyBpZiBqYXZhX3JlcG9ydF9lcnJvcnMgcmV0dXJucwoJemVyby4KCSogbGFuYy5jIChmbGFnX3dhbGwsIGZsYWdfcmVkdW5kYW50LCBmbGFnX25vdF9vdmVycmlkaW5nLAoJZmxhZ19zdGF0aWNfbG9jYWxfamRrMV8xKTogTmV3IGludGVnZXIgZmxhZ3MuCgkobGFuZ19kZWNvZGVfb3B0aW9uKTogTmV3IGZsYWdzIHNldCBoZXJlLgoJKiBwYXJzZS5oIChHRVRfUkVBTF9UWVBFLCBHRVRfTUVUSE9EX05BTUUpOiBOZXcgbWFjcm9zLgoJKE9CU09MRVRFX01PRElGSUVSX1dBUk5JTkcpOiBJc3N1ZSBlcnJvciBtZXNzYWdlIGNvbmRpdGlvbmFsbHkgdG8KCXRoZSBmbGFnX3JlZHVuZGFudCB2YXJpYWJsZS4KCShTRVRfVFlQRV9GT1JfUkVTT0xVVElPTik6IENvbnNpZGVyIE9iamVjdCBiZWluZyBqYXZhLmxhbmcuT2JqZWN0Cgl3aGVuIHBhcnNpbmcgamF2YS5sYW5nLk9iamVjdCBjbGFzcy4KCShCVUlMRF9NT05JVE9SX0VOVEVSLCBCVUlMRF9NT05JVE9SX0VYSVQpOiBBZGRlZCB0ZXJtaW5hbAoJTlVMTF9UUkVFIHRvIGJ1aWxkLgoJKHJlc29sdmVfcXVhbGlmaWVkX2V4cHJlc3Npb25fbmFtZSk6IEZpeGVkIGluZGVudGF0aW9uLgoJKHBhdGNoX2FycmF5X3JlZik6IENoYW5nZWQgcHJvdG90eXBlLgoJKG5vdF9pbml0aWFsaXplZF9hc19pdF9zaG91bGRfcCk6IFByb3RvdHlwZSByZW1vdmVkLgoJKGphdmFfcmVwb3J0X2Vycm9ycyk6IEFkZGVkIGZ1bmN0aW9uIHByb3RvdHlwZS4KCSogcGFyc2UueSAoZm9ybWFsX3BhcmFtZXRlcjopOiBDaGFuZ2VkIGVycm9yIG1lc3NhZ2UgZm9yIG5vdCB5ZXQKCXN1cHBvcnRlZCBmaW5hbCBwYXJhbWV0ZXJzLgoJKGNsYXNzX3R5cGVfbGlzdDopOiBTZXQgYm90aCBQVVJQT1NFIGFuZCBWQUxVRSBvZiBjcmVhdGVkCglUUkVFX0xJU1QgdG8gYmUgY2xhc3NfdHlwZS4KCShwcmltYXJ5X25vX25ld19hcnJheTopOiBIYW5kbGUgY2xhc3MgbGl0ZXJhbHMgb24gcHJpbWl0aXZlIHR5cGVzLgoJKHBhcnNlX3dhcm5pbmdfY29udGV4dCk6IFJlaW5zdGFsbGVkIGNvcnJlY3QgZm9yY2VfZXJyb3IgYW5kCglkb193YXJuaW5nIGZsYWdzIHNldHVwcy4KCShqYXZhX3JlcG9ydF9lcnJvcnMpOiBDaGFuZ2VkIHByb3RvdHlwZS4gUmV0dXJuIGphdmFfZXJyb3JfY291bnQKCXZhbHVlLgoJKHZhcmlhYmxlX3JlZGVmaW5pdGlvbl9lcnJvcik6IENvbnNpZGVyIHRyZWF0aW5nIHZhcmlhYmxlIHR5cGUgYXMKCWEgZmFrZSBwb2ludGVyLgoJKGNyZWF0ZV9pbnRlcmZhY2UpOiBXYXJuIGFib3V0IHJlZHVuZGFudCBhYnN0cmFjdCBtb2RpZmllciBpZgoJZmxhZ19yZWR1bmRhbnQgaXMgc2V0LiBDaGFuZ2VkIGVycm9yIG1lc3NhZ2UuCgkobG9va3VwX2ZpZWxkX3dyYXBwZXIpOiBTYXZlL3Jlc3RvcmUgZ2xvYmFscyBiZWZvcmUvYWZ0ZXIgbG9va2luZwoJdXAgZmllbGQuCgkoZHVwbGljYXRlX2RlY2xhcmF0aW9uX2Vycm9yX3ApOiBDb25zaWRlciB0cmVhdGluZyBkZWNsYXJhdGlvbgoJdHlwZSBhcyBhIGZha2UgcG9pbnRlci4KCShyZWdpc3Rlcl9maWVsZHMpOiBFeHRyYWN0IHJlYWwgdHlwZSBmcm9tIGRlcGVuZGVuY3kgbm9kZS4gQ2hlY2sKCWZvciBkdXBsaWNhdGUgZmllbGQgZGVjbGFyYXRpb24gYWZ0ZXIgdHlwZSBhZGp1c3RtZW50LiBVc2UKCURFQ0xfSU5JVElBTCB0byBzdG9yZSBzdGF0aWMgZmluYWwgaW5pdGlhbGl6ZWQgdmFsdWVzLgoJKG1ldGhvZF9oZWFkZXIpOiBFeHRyYWN0IHJlYWwgZnVuY3Rpb24gdHlwZSBmcm9tIGRlcGVuZGVuY3kgbm9kZS4KCShjaGVja19hYnN0cmFjdF9tZXRob2RfaGVhZGVyKTogVXNlIEdFVF9NRVRIT0RfTkFNRS4KCShvYnRhaW5faW5jb21wbGV0ZV90eXBlKTogTGF5b3V0IGZha2UgcG9pbnRlciB0eXBlLgoJKHNhZmVfbGF5b3V0X2NsYXNzKTogRG9uJ3QgdHJ5IHRvIGNoZWNrIGZvciBtZXRob2RzIGJlZm9yZSBsYXlvdXQuCgkoamF2YV9jb21wbGV0ZV9jbGFzcyk6IERvbid0IGNoZWNrIGZvciBjb3JyZWN0IHRocm93cyBjbGF1c2UKCWVsZW1lbnRzIGluaGVyaXRhbmNlIGhlcmUuCgkocmVzb2x2ZV9hbmRfbGF5b3V0KTogQnJvYWRlbmVkIG5hbWUgcGFyYW1ldGVyIG1lYW5pbmcuCgkocmVzZXRfbWV0aG9kX25hbWUpOiBVc2UgR0VUX01FVEhPRF9OQU1FLgoJKGphdmFfZ2V0X3JlYWxfbWV0aG9kX25hbWUpOiBOZXcgZnVuY3Rpb24uCgkoamF2YV9jaGVja19yZWd1bGFyX21ldGhvZHMpOiBEb24ndCBjaGVjayBtZXRob2RzIGluCglqYXZhLmxhbmcuT2JqZWN0LiAgVmVyaWZ5IGxpbmVhZ2Ugb2YgdGhyb3dzIGNsYXVzZSBlbGVtZW50cy4gVXNlCglmbGFnX25vX292ZXJyaWRpbmcgaW4gd2FybmluZyByZXBvcnQuCgkoY2hlY2tfdGhyb3dzX2NsYXVzZXMpOiBEb24ndCBjaGVjayBpZiBjbGFzcyB3YXMgZnJvbQoJYnl0ZWNvZGUuIFVzZSBJU19VTkNIRUNLRURfRVhDRVBUSU9OX1AgbWFjcm8uCgkoamF2YV9jaGVja19tZXRob2RzKTogRG9uJ3Qgc2V0IENMQVNTX01FVEhPRF9DSEVDS0VEX1AgZmxhZy4KCShkZWNsYXJlX2xvY2FsX3ZhcmlhYmxlcyk6IFVzZSBmbGFnX3N0YXRpY19sb2NhbF9qZGsxXzEgdG8gcmVwb3J0Cgl3YXJuaW5nIG9uIHVuc3VwcG9ydGVkIGZpbmFsIGxvY2FsIHZhcmlhYmxlcy4gVXNlIGJ1aWxkX2RlY2wKCWluc3RlYWQgb2YgYnVpbGRfZGVjbF9ub19sYXlvdXQuIEdldCByZWFsIGxvY2FsIHZhcmlhYmxlIHR5cGUgZnJvbQoJZGVwZW5kZW5jeSBub2RlLgoJKHNvdXJjZV9zdGFydF9qYXZhX21ldGhvZCk6IEdldCByZWFsIHBhcmFtZXRlciB0eXBlIGZyb20KCWRlcGVuZGVuY3kgbm9kZS4gQ2FsbCBidWlsZF9kZWNsIGluc3RlYWQgb2YgYnVpbGRfZGVjbF9ub19sYXlvdXQuCgkoamF2YV9sYXlvdXRfY2xhc3Nlcyk6IFJldmVyc2UgdHJlZSBhbmQgbGF5b3V0IHR5cGUgYW5kIGNsYXNzIGFzCglyZXF1aXJlZC4gTWFyayBjbGFzcyBhcyBsb2FkZWQgd2hlbiBkb25lLgoJKHJlc29sdmVfZmllbGRfYWNjZXNzKTogRml4ZWQgaW5kZW50YXRpb24uIFJlc3RyaWN0ZWQgY29uZGl0aW9uCglsZWFkaW5nIHRvIHN0YXRpYyBmaWVsZCBhY2Nlc3MgY29kZSBnZW5lcmF0aW9uLiBTZXQgZmllbGRfdHlwZQoJZGVjbCdzIFRSRUVfVFlQRSBpZiBRVUFMX0RFQ0xfVFlQRSBub3QgYXZhaWxhYmxlLgoJKHJlc29sdmVfcXVhbGlmaWVkX2V4cHJlc3Npb25fbmFtZSk6IEluaXRpYWxpemUgdHlwZV9mb3VuZCB0bwoJbnVsbC4gSGFuZGxlIHN0YXRpYyBmaWVsZCByZXNvbHZlZCBkdXJpbmcgcXVhbGlmaWNhdGlvbi4gRml4ZWQKCWxheW91dCBvbiBub24gcHJpbWl0aXZlIGZpZWxkIGRlY2wgdHlwZXMuCgkobm90X2FjY2Vzc2libGVfcCk6IEZpeGVkIHR5cG8gaW4gY29tbWVudC4KCShwYXRjaF9tZXRob2RfaW52b2NhdGlvbik6IFJlc29sdmUgYW5kIGxheW91dCBjbGFzcyB0byBzZWFyY2ggZnJvbQoJdHlwZS4KCShsb29rdXBfbWV0aG9kX2ludm9rZSk6IEtlZXAgaW50ZWdlciBjb25zdGFudCAwIGFzIGlzLiBSZXNvbHZlIGFuZAoJbGF5b3V0IG5vbiBwcmltaXRpdmUgdHlwZSwgaWYgbmVjZXNzYXJ5LiBNYWtlIG1ldGhvZCBub2RlIG9ubHkgdG8KCXJlcG9ydCBlcnJvcnMuCgkoZmluZF9hcHBsaWNhYmxlX2FjY2Vzc2libGVfbWV0aG9kc19saXN0KTogQ29uc2lkZXIgV0ZMJ2VkIG1ldGhvZAoJZGVjbCBuYW1lcy4gRml4ZWQgaW5kZW50YXRpb24uCgkoYXJndW1lbnRfdHlwZXNfY29udmVydGlibGUpOiBSZXNvbHZlIGFuZCBsYXlvdXQgdGFyZ2V0IHR5cGUgaWYKCW5lY2Vzc2FyeS4KCShqYXZhX2NvbXBsZXRlX3RyZWUpOiBGaXhlZCBpbmRlbnRhdGlvbiBwcm9ibGVtcy4gUmV3cm90ZQoJQ0FMTF9FWFBSIHRocm93biBleGNlcHRpb25zIGNoZWNrLiBSZS1pbnN0YWxsZWQgZnVydGhlciBwcm9jZXNzaW5nCglvZiB0aGUgYXNzaWdubWVudCBpbiBjZXJ0YWluIGNhc2VzLgoJKHBhdGNoX2Fzc2lnbm1lbnQpOiBDYWxsIG1heWJlX2J1aWxkX3ByaW10dHlwZV90eXBlX3JlZiB0byBwZXJmb3JtCglpbmxpbmluZyBvbiBjbGFzcyBsaXRlcmFscy4KCSh2YWxpZF9idWlsdGluX2Fzc2lnbmNvbnZfaWRlbnRpdHlfd2lkZW5pbmdfcCk6IENvcGUgd2l0aCBjb25zdGFudAoJMCBsaXRlcmFsLgoJKHZhbGlkX21ldGhvZF9pbnZvY2F0aW9uX2NvbnZlcnNpb25fcCk6IExpa2V3aXNlLgoJKHBhdGNoX3N0cmluZyk6IFRlbXBvcmFyeSBkaXNhYmxlIGZvcmJpZGRlbiB1c2Ugb2YgYHRoaXMnIGluCglleHBsaWNpdCBjb25zdHJ1Y3RvciBpbnZvY2F0aW9ucyB3aGVuIGRvaW5nIHN0cmluZyBjb25jYXRlbmF0aW9uCgl3aXRoaW4gdGhlaXIgc2NvcGUuCgkocGF0Y2hfdW5hcnlvcCk6IEFkZGVkIGNvbW1lbnQuIFJlaW5zdGFsbGVkIGNvZGUgdG8gZGlzYWJsZQoJZnVydGhlciBjaGVjayBvbiBhc3NpZ25tZW50IG9wZXJhdGlvbiB3aXRoIGNhc3QgZXhwcmVzc2lvbiBSSFMuCgkocGF0Y2hfc3dpdGNoX3N0YXRlbWVudCk6IEZpeGVkIGluZGVudGF0aW9uLgoJKGJ1aWxkX3RyeV9zdGF0ZW1lbnQpOiBDYWxsIGJ1aWxkX2RlY2wgaW5zdGVhZCBvZgoJYnVpbGRfZGVjbF9ub19sYXlvdXQuCgkocGF0Y2hfc3luY2hyb25pemVkX3N0YXRlbWVudCk6IExpa2V3aXNlLgoJKHBhdGNoX3Rocm93X3N0YXRlbWVudCk6IFVzZSBJU19VTkNIRUNLRURfRVhDRVBUSU9OX1AgaW5zdGVhZCBvZgoJSVNfVU5DSEVDS0VEX0VYUFJFU1NJT05fUC4KCShjaGVja190aHJvd25fZXhjZXB0aW9uc19kbyk6IENoYW5nZWQgbGVhZGluZyBjb21tZW50LiBSZXNvbHZlIGFuZAoJbGF5b3V0IGFyZ3VtZW50IGV4Y2VwdGlvbiB0eXBlLgoJKHB1cmdlX3VuY2hlY2tlZF9leGNlcHRpb25zKTogVXNlIElTX1VOQ0hFQ0tFRF9FWENFUFRJT05fUCBpbnN0ZWFkCglvZiBJU19VTkNIRUNLRURfRVhQUkVTU0lPTl9QLgoKV2VkIE5vdiAxOCAxNDoyMTo0OCAxOTk4ICBBbnRob255IEdyZWVuICA8Z3JlZW5AY3lnbnVzLmNvbT4KCgkqIGpjZi1wYXJzZS5jICh5eXBhcnNlKTogT3BlbiBjbGFzcyBmaWxlIGluIGJpbmFyeSBtb2RlLgoKU3VuIE5vdiAxNSAxNzoxNDoxNyAxOTk4ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAY3lnbnVzLmNvbT4KCgkqIGp2Z2VubWFpbi5jOiAgTmVlZCB0byAjaW5jbHVkZSAiZ2Fuc2lkZWNsLmgiICh0byBnZXQgUFJPVE8pLgoKCSogamNmLXdyaXRlLmMgKHBlcmZvcm1fcmVsb2NhdGlvbnMpOiAgTW92ZSBjaGVjayBvdXQgb25lIGxvb3AuCgpTdW4gTm92IDE1IDE1OjA5OjU2IDE5OTggIEFudGhvbnkgR3JlZW4gIDxncmVlbkBob3Nlci5jeWdudXMuY29tPgoKCSogTWFrZS1sYW5nLmluOiBGaXggcmVmZXJlbmNlIHRvIHNyY2Rpci4KCSoganYtc2Nhbi5jOiBBZGQgbWlzc2luZyB4bWFsbG9jIHByb3RvdHlwZS4KCSoganZnZW5tYWluLmM6IERpdHRvLgoKU3VuIE5vdiAxNSAxNDozNjoyOSAxOTk4ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAoZXJyb3JfbWFya19ub2RlKSwgamF2YS10cmVlLmg6ICBOZXcgZ2xvYmFsLgoJKiBwYXJzZS55OiAgVXNlIGVtcHR5X3N0bXRfbm9kZSBpbnN0ZWFkIG9mIHNpemVfemVyb19ub2RlLgoJKGJ1aWxkX2lmX2Vsc2Vfc3RhdGVtZW50KTogIElmIG1pc3NpbmcgZWxzZSwgdXNlIGVtcHR5X3N0bXRfbm9kZS4KCgkqIHBhcnNlLnkgKG5vdF9pbml0aWFsaXplZF9hc19pdF9zaG91bGRfcCk6ICBSZW1vdmVkLCB3aXRoIGl0cyBjYWxsZXJzLgoJKGphdmFfY29tcGxldGVfZXhwYW5kX21ldGhvZCk6ICBDb21wbGFpbiBpZiByZXR1cm4gaXMgbWlzc2luZy4KCShqYXZhX2NoZWNrX3JlZ3VsYXJfbWV0aG9kcyk6ICBDb21tZW50IG91dCBpbmNvcnJlY3QgZXJyb3IgY2hlY2suCgkobm90X2FjY2Vzc2libGVfcCk6ICBGaXggaW5jb3JyZWN0IGhhbmRsaW5nIG9mIHByb3RlY3RlZCBtZXRob2RzLgoJKHBhdGNoX21ldGhvZF9pbnZvY2F0aW9uKTogIFBhc3MgY29ycmVjdCBjb250ZXh0IHRvIG5vdF9hY2Nlc3NpYmxlX3AuCgkoZmluZF9hcHBsaWNhYmxlX2FjY2Vzc2libGVfbWV0aG9kc19saXN0KTogIExpa2V3aXNlLgoJKHF1YWxpZnlfYW1iaWd1b3VzX25hbWUpOiAgSWYgQVJSQVlfUkVGLCBpdCdzIGFuIGV4cHJlc3Npb24gbmFtZS4KCShqYXZhX2NvbXBsZXRlX3RyZWUpOiAgRm9yIENBU0VfRVhQUiBhbmQgREVGQVVMVF9FWFBSLCBzZXQKCVRSRUVfVFlQRSAodG8gdm9pZF90eXBlX25vZGUpOyAgb3RoZXJ3aXNlIGV4cGFuZF9leHByIGNyYXNoZXMuCgkocGF0Y2hfaWZfZWxzZV9zdGF0ZW1lbnQpOiAgRml4IHNldHRpbmcgb2YgQ0FOX0NPTVBMRVRFX05PUk1BTExZLgoKCSogamNmLXdyaXRlLmMgKENIRUNLX09QLCBDSEVDS19QVVQpOiAgQWRkIHNvbWUgZXJyb3IgY2hlY2tpbmcuCgkocHVzaF9pbnRfY29uc3QpOiAgUmVtb3ZlIHJldW5kYW50IE5PVEVfUFVTSC4KCShnZW5lcmF0ZV9ieXRlY29kZV9pbnNucyAtIGNhc2UgU1RSSU5HX0NTVCk6ICBEbyBOT1RFX1BVU0guCgkoLSBjYXNlIFNXSVRDSF9FWFBSKTogIEZpeCBjb2RlIGdlbmVyYXRpb24gYnVnLgoJKC0gY2FzZSBQUkVERUNSRU1FTlRfRVhQUiBldGMpOiAgUmVtb3ZlIHJlZHVuZGFudCBOT1RFX1BVU0guCgkoZ2VuZXJhdGVfY2xhc3NmaWxlKTogIE1vcmUgcm9idXN0IGZvciBhYnN0cmFjdCBtZXRob2RzLgoKU3VuIE5vdiAxNSAxMzo1MjozOSAxOTk4ICBBbnRob255IEdyZWVuICA8Z3JlZW5AY3lnbnVzLmNvbT4KCgkqIE1ha2VmaWxlLmluOiBqdi1zY2FuIGFuZCBqdmdlbm1haW4gYWxsIHJlcXVpcmUgbGliaWJlcnR5LgoJKiBNYWtlLWxhbmcuaW46IERpdHRvLgoKCSoganYtc2Nhbi5jOiBSZW1vdmUgeG1hbGxvYyBhbmQgeHN0cmR1cCBkZWZpbml0aW9ucy4KCSoganZnZW5tYWluOiBEaXR0by4KClN1biBOb3YgMTUgMTQ6MTA6NTYgMTk5OCAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGN5Z251cy5jb20+CgoJKiBqY2YtcGFyc2UuYyAoSEFORExFX0VYQ0VQVElPTlNfQVRUUklCVVRFKTogIE5ldyBtYWNyby4KCgkqIGpjZi1pby5jIChmaW5kX2NsYXNzKTogIFNpbXBsZXIvY2xlYW5lciBzdHJ1Y3R1cmUgZml4ZXMgYSBidWcuCgpTYXQgTm92IDE0IDE3OjE5OjE4IDE5OTggIFBlciBCb3RobmVyICA8Ym90aG5lckBjeWdudXMuY29tPgoKCUFsbG93IHVzZXMgb2YgaW50ZXJmYWNlIHR5cGVzIHRvIHZlcmlmeS4gIFRoaXMgaXMgbm90IHJlYWxseQoJdHlwZS1zYWZlLCBidXQgaXQgbWF0Y2hlcyB3aGF0IFN1biBkb2VzLCBhbmQgaXMgT0sgYXMgbG9uZyBhcwoJdGhlcmUgYXJlIGFwcHJvcHJpYXRlIHJ1bi10aW1lIGNoZWNrcy4KCSogdmVyaWZ5LmMgKG1lcmdlX3R5cGVzKTogIElmIG1lcmdpbmcgdHdvIGludGVyZmFjZSB0eXBlcywKCWp1c3Qgc2V0IHRoZSByZXN1bHQgdG8gamF2YS5sYW5nLk9iamVjdC4KCSogZXhwci5jIChwb3BfdHlwZSk6ICBBbnkgaW50ZXJmYWNlIGlzIG1hdGNoZXMgYnkgamF2YS5sYW5nLk9iamVjdC4KCjE5OTgtMTEtMTMgIFRvbSBUcm9tZXkgIDx0cm9tZXlAY3lnbnVzLmNvbT4KCgkqIGdqYXZhaC5jIChtYWluKTogSGFuZGxlIC0tb3V0cHV0LWNsYXNzLWRpcmVjdG9yeSBhcmd1bWVudC4KCSoganZzcGVjLmMgKGxhbmdfc3BlY2lmaWNfZHJpdmVyKTogVHJhbnNsYXRlIGAtZCcgaW50bwoJLWZvdXRwdXQtY2xhc3MtZGlyLgoJKiBqY2YuaCAoamNmX3dyaXRlX2Jhc2VfZGlyZWN0b3J5KTogRGVjbGFyZS4KCSogbGFuZy5jIChsYW5nX2RlY29kZV9vcHRpb24pOiBSZWNvZ25pemUgLWZvdXRwdXQtY2xhc3MtZGlyLgoJKiBsYW5nLW9wdGlvbnMuaDogTWVudGlvbiAtZm91dHB1dC1jbGFzcy1kaXIuCgkqIGpjZi13cml0ZS5jIChqY2Zfd3JpdGVfYmFzZV9kaXJlY3RvcnkpOiBOZXcgZ2xvYmFsLgoJKG1ha2VfY2xhc3NfZmlsZV9uYW1lKTogUHV0IGdlbmVyYXRlZCAuY2xhc3MgZmlsZSBpbnRvIGAtZCcKCWRpcmVjdG9yeSwgb3IgaW50byBzb3VyY2UgZGlyZWN0b3J5IGlmIC1kIG5vdCBnaXZlbi4gIEZ1bmN0aW9uIG5vdwoJc3RhdGljLgoJKHdyaXRlX2NsYXNzZmlsZSk6IEZyZWUgY2xhc3MgZmlsZSBuYW1lLiAgSGFuZGxlIGNhc2Ugd2hlcmUgY2xhc3MKCWZpbGUgbmFtZSBpcyBOVUxMLgoJKERJUl9TRVBBUkFUT1IpOiBOZXcgbWFjcm8uCglJbmNsdWRlIDxzeXMvc3RhdC5oPgoKCSogTWFrZWZpbGUuaW4gKHByZWZpeCk6IE5ldyBtYWNyby4KClRodSBOb3YgMTIgMTQ6MTU6MDcgMTk5OCAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGN5Z251cy5jb20+CgoJKiBwYXJzZS55IChwYXRjaF9pbnZva2UpOiAgRG8gbGVzcyBpZiBmbGFnX2VtaXRfY2xhc3NfZmlsZXMuCgkqIGV4cHIuYyAoYnVpbGRfa25vd25fbWV0aG9kX3JlZik6ICBEb24ndCBjaGVjayBmbGFnX2VtaXRfY2xhc3NfZmlsZXMKCWhlcmUgKGRvbmUgaW4gcGF0Y2hfaW52b2tlIGluc3RlYWQpLgoJKGNhc2VfaWRlbnRpdHkpOiAgTW92ZWQgaGVyZSBmcm9tIHBhcnNlLnkuCgoJKiBqYXZhLXRyZWUuaCAoQ0FOX0NPTVBMRVRFX05PUk1BTExZKTogIE5ldyBtYWNyby4KCSogcGFyc2UueSAoamF2YV9jb21wbGV0ZV90cmVlIGV0Yyk6ICBNYXliZSBzZXQgQ0FOX0NPTVBMRVRFX05PUk1BTExZLgoJKiBwYXJzZS55IChqYXZhX2NvbXBsZXRlX3RyZWUpOiAgUmUtb3JkZXIgQ09NUE9VTkRfRVhQUiBpbiBCTE9DSwoJc28gdGhleSBjYW4gYmUgZWZmaWNpZW50bHkgc2Nhbm5lZCB3aXRob3V0IHJlY3Vyc2lvbi4KCUVycm9yIGl0ICEgQ0FOX0NPTVBMRVRFX05PUk1BTExZIGZpcnN0IHBhcnQgb2YgQ09NUE9VTkRfRVhQUi4KCSogZXhwci5jIChqYXZhX2xhbmdfZXhwYW5kX2V4cHIpOiAgRXhwYW5kIHN0YXRlbWVudHMgb2YgQ09NUE9VTkRfRVhQUgoJaW4gQkxPQ0sgaXRlcmF0aXZlbHksIHJhdGhlciB0aGFuIHJlY3Vyc2l2ZWx5LgoKCSogcGFyc2UueSAoZG9fdW5hcnlfbnVtZXJpY19wcm9tb3Rpb24pOiAgTmV3IGZ1bmN0aW9uLgoJKHBhdGNoX3VuYXJ5b3AsIHBhdGNoX2Jpbm9wLCBwYXRjaF9hcnJheV9yZWYpOiAgVXNlIGl0LgoKCSogcGFyc2UueSAocGF0Y2hfbmV3YXJyYXkpOiAgVmFyaW91cyBmaXhlcy4KCglSZS1kbyBoYW5kbGluZyBvZiBzd2l0Y2ggc3RhdGVtZW50cyAoZm9yIHByb3BlciBibG9jayBzY29waW5nKS4KCSogcGFyc2UueTogIEFkZCBqdXN0IGEgc2luZ2xlIGJsb2NrIGZvciB0aGUgZW50dXJlIHN3aXRjaCBibG9jaywKCWJ1dCBkb24ndCBjcmVhdGUgYW55ICJjYXNlIGJsb2NrcyIuCgkoZ3JvdXBfb2ZfbGFiZWxzKTogIFJtZW92ZWQgdW5uZWVkZWQgbm9uLXRlcm1pbmFsLgoJQ0FTRV9FWFBSIGFuZCBERUZBVUxUX0VYUFIgYXJlIGFkZGVkIHRvIGN1cnJlbnQgYmxvY2suCgkqIGV4cHIuYyAoamF2YV9sYW5nX2V4cGFuZF9leHByKTogIElubGluZSBTV0lUQ0hfRVhQUiBoZXJlLgoJTm93IGFsc28gbmVlZCB0byBoYW5kbGUgQ0FTRV9FWFBSIGFuZCBERUZBVUxUX0VYUFIuCgkqIGphdmEtdHJlZS5oIChTV0lUQ0hfSEFTX0RFRkFVTFQpOiAgTmV3IG1hY3JvLgoJKiBwYXJzZS55ICh3Zmxfb3BlcmF0b3IsIHByaW50X2ludF9ub2RlKTogTWFrZSBub24tc3RhdGljLgoJKGphdmFfY29tcGxldGVfdHJlZSk6ICBDQVNFX0VYUFIgYW5kIERFRkFVTFRfRVhQUiBhcmUgbm93IHByb2Nlc3NlZAoJYXMgcGFydCBvZiByZWN1cnNpdmUgc2NhbiBvZiBibG9jay4KCShqYXZhX2V4cGFuZF9zd2l0Y2ggKTogIFJlbW92ZWQgLSBpbmxpbmVkIGludG8gamF2YV9sYW5nX2V4cGFuZF9leHByLgoJKHBhdGNoX3N3aXRjaF9zdGF0ZW1lbnQpOiAgTW9zdCB0ZXN0cyBtb3ZlIGRpbnRvIGphdmFfY29tcGxldGVfdHJlZS4KCgkqIHBhcnNlLnk6ICBNYWtlIHZhcmlvdXMgcHJvZHVjdGlvbiBiZSBub24tdHlwZWQgKHZvaWQpLgoJKiBwYXJzZS55IChwYXJzZV9lcnJvcik6ICBNZXJnZWQgaW50byBpc3N1ZV93YXJuaW5nX2Vycm9yX2Zyb21fY29udGV4dC4KCSogcGFyc2UueSAoYWRkX3N0bXRfdG9fY29tcG91bmQpOiAgRG9uJ3QgY3JlYXRlL2NoYW5nZSBleHRyYSBub2RlLgoJKHBhdGNoX21ldGhvZF9pbnZvY2F0aW9uX3N0bXQpOiAgUmVuYW1lZCB0byBwYXRjaF9tZXRob2RfaW52b2NhdGlvbi4KCgkqIGpjZi13cml0ZS5jIChzdHJ1Y3QgamNmX2hhbmRsZXIpOiAgTmV3IHR5cGUuCgkoc3RydWN0IGpjZl9zd2l0Y2hfc3RhdGUpOiAgTmV3IHR5cGUuCgkoU1dJVENIX0FMSUdOX1JFTE9DLCBCTE9DS19TVEFSVF9SRUxPQyk6ICBOZXcgcmVsb2NhdGlvbiBraW5kcy4KCShhbGxvY19oYW5kbGVyLCBlbWl0X3Vub3AsIGVtaXRfcmVsb2MpOiAgTmV3IGZ1bmN0aW9ucy4KCShhZGp1c3RfdHlwZWRfb3ApOiAgQWRkIGV4dHJhIHBhcmFtZXRlciAoIm1heCB0eXBlIiBvZmZzZXQpLgoJKGVtaXRfc3dpdGNoX3JlbG9jLCBlbWl0X2Nhc2UtcmVsb2MpOiAgTmV3IGZ1bmN0aW9uLgoJKGdlbmVyYXRlX2J5dGVjb2RlX2NvbmRpdGlvbmFsKTogIEhhbmRsZSBSRUFMX1RZUEUgY29tcGFyaXNvbnMuCgkoZ2VuZXJhdGVfYnl0ZWNvZGVfaW5zbnMpOiAgU3VwcG9ydCBSRUFMX0NTVCwgc3dpdGNoIHN0YXRlbWVudHMsCglleGNlcHRpb24gaGFuZGxpbmcsIG1ldGhvZCBjYWxscywgb2JqZWN0L2FycmF5IGNyZWF0aW9uLCBhbmQgbW9yZS4KCgkqIGNsYXNzLmM6ICBSZW1vdmUgc29tZSB1bnVzZWQgdmFyaWFibGVzLgoJKiBjb25zdGFudHMuYyAoZmluZF9zdHJpbmdfY29uc3RhbnQpOiAgTmV3IGZ1bmN0aW9uLgoJKGNvdW50X2NvbnN0YW50X3Bvb2xfYnl0ZXMpOiAgRml4IHRvIGNvcnJlY3RseSBoYW5kbGUgd2lkZSBjb25zdGFudHMuCgkqIGRlY2wuYyAoY29tcGxldGVfc3RhcnRfamF2YV9tZXRob2QpOiAgRG9uJ3QgX0p2X0luaXRDbGFzcwoJaWYgZmxhZ19lbWl0X2NsYXNzX2ZpbGVzLgoKMTk5OC0xMS0xMiAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgoKCSogamNmLWlvLmMgKGZpbmRfY2xhc3MpOiBBZGRlZCBleHBsYW5hdG9yeSBjb21tZW50LgoKCSogamNmLXBhdGguYyAoYWRkX2VudHJ5KTogTG9vayBmb3IgYC56aXAnIGF0IGVuZCBvZiBmaWxlbmFtZS4gIEFkZAoJdHJhaWxpbmcgc2xhc2ggdG8gYC56aXAnIGVudHJpZXMuCgoJKiBqdnNwZWMuYyAobGFuZ19zcGVjaWZpY19kcml2ZXIpOiBDb3JyZWN0bHkgaGFuZGxlIGNhc2Ugd2hlcmUKCUdDX05BTUUgbm90IGRlZmluZWQuCgoxOTk4LTExLTExICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CgoJKiBqdnNwZWMuYyAoR0NfTkFNRSk6IE5ldyBkZWZpbmUuCgkobGFuZ19zcGVjaWZpY19kcml2ZXIpOiBVc2UgR0NfTkFNRS4gIEFkZCBHQ19OQU1FIHRvIGNvbW1hbmQgbGluZQoJaWYgcmVxdWlyZWQuCgkqIE1ha2UtbGFuZy5pbiAoanZzcGVjLm8pOiBEZWZpbmUgV0lUSF9HQ188bmFtZT4uCgpXZWQgTm92IDExIDE5OjA4OjUyIDE5OTggIFBlciBCb3RobmVyICA8Ym90aG5lckBjeWdudXMuY29tPgoKCSogamNmLWR1bXAuYyAoVEFCTEVfU1dJVENIKTogIEZpeCB0eXBvcy4KCjE5OTgtMTEtMTEgIFRvbSBUcm9tZXkgIDx0cm9tZXlAY3lnbnVzLmNvbT4KCgkqIGpjZi1kdW1wLmMgKG1haW4pOiBDb3JyZWN0bHkgcmVjb2duaXplIGAtLSctc3R5bGUgbG9uZyBvcHRpb25zLgoKVHVlIE5vdiAxMCAxMjozNDowMyAxOTk4ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIGNsYXNzLmMgKGlzX2NvbXBpbGVkX2NsYXNzKTogQ2FsbCBzYWZlX2xheW91dF9jbGFzcyBmb3IgY2xhc3MKCWNvbXBpbGVkIGZyb20gc291cmNlLgoJKiBjb252ZXIuaCAoY29udmVydF90b19pbnRlZ2VyLCBjb252ZXJ0X3RvX3JlYWwsCgljb252ZXJ0X3RvX3BvaW50ZXIpOiBBZGRlZCBwcm90b3R5cGVzLgoJKiBkZWNsLmMgKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogTm9uIGxvbmdlciBwdXNoIHRoZSBkZWNscyBvZgoJYG1ldGhvZHRhYmxlJywgYGNvbnN0YW50cycsIGBDbGFzcycsIGBGaWVsZCcsIGBkaXNwYXRjaFRhYmxlJwoJYGpleGNlcHRpb24nIGFuZCBgTWV0aG9kJy4KCSogZXhwci5jIChidWlsZF9pbnZva2VpbnRlcmZhY2UpOiBOZXcgZnVuY3Rpb24uCgkoZXhwYW5kX2ludm9rZSk6IHN0YXRpYyB2YXJpYWJsZSBDTEFTU19JREVOVCBub3cgaW4KCWJ1aWxkX2ludm9rZWludGVyZmFjZS4gVXNlIGJ1aWxkX2ludm9rZWludGVyZmFjZS4KCShleHBhbmRfamF2YV9maWVsZF9vcCk6IE1vdmVkIGNvZGUgdG8gaW5saW5lCglqYXZhLmxhbmcuUFJJTVRZUEUuVFlQRSBpbnRvIGEgZnVuY3Rpb24uCgkoYnVpbGRfcHJpbXR5cGVfdHlwZV9yZWYpOiBOZXcgZnVuY3Rpb24uCgkqIGphdmEtdHJlZS5kZWYgKElOU1RBTkNFT0ZfRVhQUik6IE5ldyB0cmVlIGNvZGUuCgkqIGphdmEtdHJlZS5oIChDTEFTU19NRVRIT0RfQ0hFQ0tFRF9QLCBNRVRIT0RfREVQUkVDQVRFRCwKCUZJRUxEX0RFUFJFQ0FURUQsIENMQVNTX0RFUFJFQ0FURUQpOiBOZXcgZmxhZyBtYWNyb3MuCgkoREVDTF9DT05TVFJVQ1RPUl9QKTogRml4ZWQgdHlwbyBpbiBjb21tZW50LgoJKERFQ0xfTE9DQUxfU1RBVElDX1ZBTFVFKTogTmV3IG1hY3JvLgoJKGJ1aWxkX2ludm9rZWludGVyZmFjZSwgYnVpbGRfcHJpbXR5cGVfdHlwZV9yZWYpOiBOZXcgZnVuY3Rpb24KCXByb3RvdHlwZXMuCgkoamF2YV9wYXJzZV9hYm9ydF9vbl9lcnJvcik6IE1hY3JvIHJld3JpdHRlbi4KCSogamNmLXBhcnNlLmMgKGN1cnJlbnRfbWV0aG9kKTogQWRkIGNvbW1lbnQgdG8gZGVjbGFyYXRpb24uCgkocGFyc2VfemlwX2ZpbGVfZW50cmllcywgcHJvY2Vzc196aXBfZGlyLCB2b2lkIHBhcnNlX3NvdXJjZV9maWxlKToKCUZ1bmN0aW9uIHByb3RvdHlwZXMgZml4ZWQuCgkoamNmX3BhcnNlX3NvdXJjZSk6IHB1c2gvcG9wIHBhcnNlciBjb250ZXh0LiBzYXZlL3Jlc3RvcmUgZ2xvYmFsLgoJKHBhcnNlX3NvdXJjZV9maWxlKTogRml4ZWQgbGVhZGluZyBjb21tZW50LiBOb3cgdGFrZSBhCglJREVOVElGSUVSX05PREUgYXMgYW4gYXJndW1lbnQuIERvZXNuJ3QgY2hlY2sgbWV0aG9kcywgbGF5b3V0CgljbGFzc2VzIGFuZCBwb3AgdGhlIHBhcnNlciBjb250ZXh0IGFueW1vcmUuCgkoeXlwYXJzZSk6IFB1c2ggcGFyc2VyIGNvbnRleHQsIHNhdmUgZ2xvYmFscywgcGFyc2UgdGhlIHNvdXJjZQoJZmlsZSwgcmVzdG9yZSBnbG9iYWxzIGFuZCBwb3AgdGhlIHBhcnNlciBjb250ZXh0IHdoZW4gcHJvY2Vzc2luZyBhCglzb3VyY2UgZmlsZS4KCSogamNmLmggKFZFUkJPU0VfU0tFTEVUT04pOiBSZXBsYWNlcyBTT1VSQ0VfRlJPTlRFTkRfREVCVUcgZGVmaW5lLgoJKiBsZXguYyAoamF2YV9wYXJzZV9kb2Nfc2VjdGlvbik6IE5ldyBmdW5jdGlvbi4KCShqYXZhX2xleCk6IENhbGwgamF2YV9wYXJzZV9kb2Nfc2VjdGlvbiB3aGVuIGFwcHJvcHJpYXRlLiBCdWlsZCBhbgoJb3BlcmF0b3IgYXJvdW5kIElOU1RBTkNFT0ZfVEsuCgkqIGxleC5oIChqYXZhX2xpbmV0ZXJtaW5hdG9yLCBqYXZhX3NwcmludF91bmljb2RlLAoJamF2YV91bmljb2RlXzJfdXRmOCwgamF2YV9sZXhfZXJyb3IsIGphdmFfc3RvcmVfdW5pY29kZSk6CglQcm90b3R5cGVzIHJld3JpdHRlbi4KCShqYXZhX3BhcnNlX2VzY2FwZV9zZXF1ZW5jZSwgamF2YV9sZXR0ZXJfb3JfZGlnaXRfcCwKCWphdmFfcGFyc2VfZG9jX3NlY3Rpb24sIGphdmFfcGFyc2VfZW5kX2NvbW1lbnQsIGphdmFfZ2V0X3VuaWNvZGUsCglqYXZhX3JlYWRfdW5pY29kZSwgamF2YV9zdG9yZV91bmljb2RlLCBqYXZhX3JlYWRfY2hhciwKCWphdmFfYWxsb2NhdGVfbmV3X2xpbmUsIGphdmFfdW5nZXRfdW5pY29kZSwgamF2YV9zbmVha191bmljb2RlKToKCUFkZGVkIGZ1bmN0aW9uIHByb3RvdHlwZXMuCgkqIHBhcnNlLmggKFZFUkJPU0VfU0tFTEVUT04pOiBSZXBsYWNlcyBTT1VSQ0VfRlJPTlRFTkRfREVCVUcKCWRlZmluZS4KCShKTlVMTFBfVFlQRV9QLCBDSEVDS19NRVRIT0RTLCBDSEVDS19ERVBSRUNBVEVELCBSRUdJU1RFUl9JTVBPUlQpOgoJTmV3IG1hY3JvcwoJKHN0cnVjdCBwYXJzZXJfY3R4dCk6IE5ldyBmaWVsZHM6IGRlcHJlY2F0ZWQsCgljdXJyZW50X3BhcnNlZF9jbGFzc191biwgZ2NsYXNzX2xpc3QuCgkoZml4X21ldGhvZF9hcmd1bWVudF9uYW1lcywgaXNzdWVfd2FybmluZ19lcnJvcl9mcm9tX2NvbnRleHQsCglyZXNvbHZlX3BhY2thZ2UsIGxvb2t1cF9wYWNrYWdlX3R5cGUpOiBOZXcgZnVuY3Rpb24gcHJvdG90eXBlcy4KCShyZXNvbHZlX2V4cHJlc3Npb25fbmFtZSk6IEZpeGVkIGZ1bmN0aW9uIHByb3RvdHlwZS4KCShmaW5kX2FwcGxpY2FibGVfYWNjZXNzaWJsZV9tZXRob2RzX2xpc3QpOiBGaXhlZCBpbmRlbnRhdGlvbiwgYWRkZWQKCWV4dHJhIGFyZ3VtZW50IGluIHByb3RvdHlwZS4KCShjaGVja19maW5hbF9hc3NpZ25tZW50LCBidWlsZF9udWxsX29mX3R5cGUsIGNoZWNrX2RlcHJlY2F0aW9uLAoJY2hlY2tfbWV0aG9kX3JlZGVmaW5pdGlvbiwgcmVzZXRfbWV0aG9kX25hbWUsCglqYXZhX2NoZWNrX3JlZ3VsYXJfbWV0aG9kcywgamF2YV9jaGVja19hYnN0cmFjdF9tZXRob2RzLAoJbWF5YmVfYnVpbGRfcHJpbXR0eXBlX3R5cGVfcmVmKTogTmV3IGZ1bmN0aW9uIHByb3RvdHlwZS4KCSogcGFyc2UueSAoY29udmVyLmgpOiBJbmNsdWRlLgoJKElOU1RBTkNFT0ZfVEspOiBUYWdnZWQgPG9wZXJhdG9yPi4KCShzaW5nbGVfdHlwZV9pbXBvcnRfZGVjbGFyYXRpb24pOiBVc2UgUkVHSVNURVJfSU1QT1JUIG1hY3JvLgoJKHJlbGF0aW9uYWxfZXhwcmVzc2lvbjopOiBCdWlsZCBiaW5vcCBmb3IgaW5zdGFuY2VvZi4KCShqYXZhX3B1c2hfcGFyc2VyX2NvbnRleHQpOiBSZW1lbWJlciBjdHhwLT5nY2xhc3NfbGlzdCBhY3Jvc3MKCWNvbnRleHRzLgoJKGphdmFfcG9wX3BhcnNlcl9jb250ZXh0KTogU2ltcGx5IHJldHVybiBpZiBubyBjb250ZXh0CglleGlzdHMuIFJlbWVtYmVyIGdjbGFzc19saXN0IGFjcm9zcyBjb250ZXh0cy4KCShpc3N1ZV93YXJuaW5nX2Vycm9yX2Zyb21fY29udGV4dCk6IE5ldyBmdW5jdGlvbi4KCShwYXJzZV9lcnJvcl9jb250ZXh0KTogRG9uJ3Qgc2V0dXAgY3R4cC0+ZWxjIGhlcmUuIENhbGwKCWlzc3VlX3dhcm5pbmdfZXJyb3JfZnJvbV9jb250ZXh0IGluc3RlYWQuCgkocGFyc2Vfd2FybmluZ19jb250ZXh0KTogTGlrZXdpc2UuCgkobWF5YmVfY3JlYXRlX2NsYXNzX2ludGVyZmFjZV9kZWNsKTogUmVtb3ZlZCBERUNMX0FSVElGSUNJQUwKCXNldHVwLiBMaW5rIG5ldyBjbGFzcy9pbnRlcmZhY2UgdG8gY3R4cC0+Z2NsYXNzX2xpc3QuCgkoYWRkX3N1cGVyaW50ZXJmYWNlcyk6IFJlZ2lzdGVyIGludGVyZmFjZSBhcyBpbmNvbXBsZXRlIGlmIG5vdAoJbG9hZGVkLgoJKGNyZWF0ZV9jbGFzcyk6IFJlbWVtYmVyIGNsYXNzIHVucXVhbGlmaWVkIG5hbWUgaW4KCWN0eHAtPmN1cnJlbnRfcGFyc2VkX2NsYXNzX3VuLiBDaGVjayBjbGFzcyBkZXByZWNhdGlvbi4KCShyZWdpc3Rlcl9maWVsZHMpOiBDaGVjayBmaWVsZCBkZXByZWNhdGlvbi4gUmVtZW1iZXIgc3RhdGljIGZpbmFsCglmaWVsZCB2YWx1ZSBpbiBERUNMX0xPQ0FMX1NUQVRJQ19WQUxVRS4gQ2hhbmdlZCBjb21tZW50IGluIHBhcnQKCXByb2Nlc3NpbmcgSU5JVC4KCShtZXRob2RfaGVhZGVyKTogTmV3IGxvY2FsIHZhcmlhYmxlIE9SSUdfQVJHLiBVc2UgdW5xdWFsaWZpZWQKCWN1cnJlbnQgY2xhc3MgbmFtZSBmb3IgY2hlY2sgb24gY29uc3RydWN0b3IgZXJyb3JzLiBQcm9tb3RlIHJldHVybgoJdHlwZSBpZiBvZiByZWNvcmQgdHlwZS4gQXJndW1lbnQgbGlzdCBmaXggbW92ZWQgaW4KCWZpeF9tZXRob2RfYXJndW1lbnRfbmFtZXMsIGNhbGxlZCBoZXJlLiBDaGVjayBtZXRob2QgZGVwcmVjYXRpb24uCgkoZml4X21ldGhvZF9hcmd1bWVudF9uYW1lcyk6IE5ldyBmdW5jdGlvbi4KCShtZXRob2RfZGVjbGFyYXRvcik6IFByb21vdGUgcmVjb3JkIHR5cGVkIGFyZ3VtZW50cy4KCShzYWZlX2xheW91dF9jbGFzcyk6IENoZWNrIGNsYXNzIG1ldGhvZHMgYmVmb3JlIGxheW91dC4KCShqYXZhX2NvbXBsZXRlX2NsYXNzKTogQ29tcHV0ZSBmaWVsZCBsYXlvdXQgd2hlbiBwYXRjaGVkLgoJKGRvX3Jlc29sdmVfY2xhc3MpOiBUcnkgdG8gbG9hZCBjbGFzcyBhZnRlciBoYXZpbmcgaXQgcmVuYW1lZAoJYWZ0ZXIgdGhlIHBhY2thZ2UgbmFtZS4KCShnZXRfcHJpbnRhYmxlX21ldGhvZF9uYW1lKTogVXNlIERFQ0xfQ09OVEVYVC4KCShyZXNldF9tZXRob2RfbmFtZSk6IE5ldyBmdW5jdGlvbi4KCShjaGVja19tZXRob2RfcmVkZWZpbml0aW9uKTogVXNlIHJlc2V0X21ldGhvZF9uYW1lLgoJKGphdmFfY2hlY2tfcmVndWxhcl9tZXRob2RzKTogTmV3IGxvY2FsIHZhcmlhYmxlCglTQVZFRF9GT1VORF9XRkwuIFRlbXBvcmFyaWx5IHJlaW5zdGFsbCBvdmVycmlkaW5nL2hpZGluZyBtZXRob2QKCW5hbWVzIGZvciBlcnJvciByZXBvcnQuIENoZWNrIGZvciBjb21waWxlLXRpbWUgZXJyb3Igd2hlbiBtZXRob2QKCWZvdW5kIGhhcyBkZWZhdWx0IChwYWNrYWdlKSBhY2Nlc3MuCgkoamF2YV9jaGVja19hYnN0cmFjdF9tZXRob2RzKTogTm93IHRha2VzIGFuIGludGVyZmFjZSBERUNMIG5vZGUgYXMKCWFuIGFyZ3VtZW50LiBBbHNvIHJlaW5zdGFsbCByZWFsIG5hbWUgb24gdW5jaGVja2VkCglvdmVycmlkaW5nL2hpZGluZyBtZXRob2RzIGZvciBlcnJvciByZXBvcnQuCgkoamF2YV9jaGVja19tZXRob2RzKTogRml4ZWQgbGVhZGluZyBjb21tZW50LiBHZXQgY2xhc3NlcyB0byB2ZXJpZnkKCWZyb20gY3R4cC0+Z2NsYXNzX2xpc3QuIFVzZSBDSEVDS19NRVRIT0RTIG1hY3JvIGFuZCBzZXQKCUNMQVNTX01FVEhPRF9DSEVDS0VEX1Agb24gY2xhc3MgdmVyaWZpY2F0aW9uLgoJKGxvb2t1cF9qYXZhX21ldGhvZDIpOiBHZXQgcmVhbCBtZXRob2QgbmFtZSBpZiBuZWNlc3NhcnkuCgkoZmluZF9pbl9pbXBvcnRzKTogRG9uJ3QgY2hlY2sgcGFja2FnZSBjbGFzcyBhY2Nlc3MgaGVyZS4KCShyZXNvbHZlX3BhY2thZ2UsIGxvb2t1cF9wYWNrYWdlX3R5cGUpOiBOZXcgZnVuY3Rpb25zLgoJKGphdmFfbGF5b3V0X2NsYXNzZXMpOiBGaXhlZCBsZWFkaW5nIGNvbW1lbnQuIFRha2UgY2xhc3NlcyB0byBiZQoJbGFpZCBvdXQgZnJvbSBjdHhwLT5nY2xhc3NfbGlzdC4KCShqYXZhX2NvbXBsZXRlX2V4cGFuZF9tZXRob2RzKTogRG9uJ3QgZXhwYW5kIG5hdGl2ZSBhbmQgYWJzdHJhY3QKCW1ldGhvZHMuCgkoamF2YV9leHBhbmRfY2xhc3Nlcyk6IE5ldyBmdW5jdGlvbi4KCShyZXNvbHZlX2V4cHJlc3Npb25fbmFtZSk6IFVzZSBhZGRpdGlvbmFsIGFyZ3VtZW50IE9SSUcuICBSZXRyaWV2ZQoJdmFsdWVzIG9mIHN0YXRpYyBmaW5hbCBmaWVsZCBvZiBwcmltaXRpdmUgdHlwZXMuCgkocmVzb2x2ZV9maWVsZF9hY2Nlc3MpOiBIYW5kbGVzIHN0YXRpYyBmaW5hbCBmaWVsZCBvZiBwcm9tb3RpdmUKCXR5cGUuCgkocmVzb2x2ZV9xdWFsaWZpZWRfZXhwcmVzc2lvbl9uYW1lKTogSGFuZGxlIFNUUklOR19DU1QgYXMKCXByaW1hcmllcyBhbmQgcGFja2FnZSBuYW1lIHJlc29sdXRpb24uIENoZWNrIGRlcHJlY2F0aW9uIG9uIGZvdW5kCglkZWNscy4gU2V0IHdoZXJlX2ZvdW5kIGFuZCB0eXBlX2ZvdW5kIG9uIG5vbiBzdGF0aWMgZmllbGQgcmVzb2x2ZWQKCWR1cmluZyBxdWFsaWZpY2F0aW9uLiBMYXlvdXQgbm9uIHByaW1pdGl2ZSBmaWVsZCBkZWNsIHR5cGVzLgoJKGNoZWNrX2RlcHJlY2F0aW9uKTogTmV3IGZ1bmN0aW9uLgoJKG1heWJlX2FjY2Vzc19maWVsZCk6IFNpbXBsaWZpZWQuCgkocGF0Y2hfbWV0aG9kX2ludm9jYXRpb25fc3RtdCk6IExvY2FsIHZhcmlhYmxlIENMQVNTX1RZUEUKCXJlbW92ZWQuIFJldmVyc2UgbWV0aG9kJ3MgYXJndW1lbnQgd2hlbiBwcmltYXJ5IGlzIGEgdHlwZS4gRG9uJ3QKCXVzZSBDTEFTU19UWVBFIHRvIHJlcG9ydCBwcm9ibGVtcywgdXNlIElERU5USUZJRVJfV0ZMCglpbnN0ZWFkLiBJbmNsdWRlIGFic3RyYWN0IGNsYXNzIGluIHRoZSBsaXN0IG9mIGNsYXNzIHNlYXJjaGFibGUKCWZvciBjb25zdHJ1Y3RvcnMuIFVzZSBERUNMX0NPTlRFWFQgb2YgZm91bmQgbWV0aG9kIGZvciBhY2Nlc3MKCWNoZWNrcy4gQ2hlY2sgbWV0aG9kIGRlcHJlY2F0aW9uLgoJKHBhdGNoX2ludm9rZSk6IFBheSBleHRyYSBjYXJlIHRvIE5FV19DTEFTU19FWFBSIHR5cGUgY2FsbCB3aGVuCgljb252ZXJ0aW5nIGFyZ3VtZW50cy4gSGFuZGxlIElOVk9LRV9JTlRFUkZBQ0UuCgkobG9va3VwX21ldGhvZF9pbnZva2UpOiBTZWFyY2ggY29uc3RydWN0b3IgdXNpbmcgZXhpc3RpbmcKCWluZnJhc3RydWN0dXJlIChkb24ndCByZWx5IG9uIGxvb2t1cF9qYXZhX2NvbnN0cnVjdG9yIGFueW1vcmUpLgoJKGZpbmRfYXBwbGljYWJsZV9hY2Nlc3NpYmxlX21ldGhvZHNfbGlzdCk6IEV4dHJhIGFyZ3VtZW50IGZsYWcKCUxDLiBOb3cgaW5jbHVkZSBjb25zdHJ1Y3RvciBpbiB0aGUgc2VhcmNoLgoJKHF1YWxpZnlfYW1iaWd1b3VzX25hbWUpOiBDb25kaXRpb25hbCBleHByZXNzaW9uIGFyZSBwcmltYXJpZXMuCgkobm90X2luaXRpYWxpemVkX2FzX2l0X3Nob3VsZF9wKTogc3RhdGljIGZpbmFsIGFyZSBhbHdheXMKCWluaXRpYWxpemVkLgoJKGphdmFfY29tcGxldGVfdHJlZSk6IFBhc3MgZXh0cmEgTlVMTCBhcmd1bWVudCB0bwoJcmVzb2x2ZV9leHByZXNzaW9uX25hbWUuIFN0cmljdGVyIHRlc3QgdG8gY2Fycnkgb24gcGF0Y2hpbmcKCWFzc2lnbm1lbnRzLiBOZXcgY2FzZSBmb3IgSU5TVEFOQ0VPRl9FWFBSLgoJKGNvbXBsZXRlX2Z1bmN0aW9uX2FyZ3VtZW50cyk6IElubGluZSBQUklNVFlQRS5UWVBFIHJlYWQgYWNjZXNzLgoJKGNoZWNrX2ZpbmFsX2Fzc2lnbm1lbnQsIG1heWJlX2J1aWxkX3ByaW10dHlwZV90eXBlX3JlZik6IE5ldwoJZnVuY3Rpb25zLgoJKHBhdGNoX2Fzc2lnbm1lbnQpOiBEZXRlY3QgcmVzb2x2ZWQgc3RhdGljIGZpbmFscyBhbmQgY2Fycnkgbm9ybWFsCglhc3NpZ25tZW50IGVycm9yIGNoZWNrIG9uIHRoZW0uIElubGluZSBQUklNVFlQRS5UWVBFIHJlYWQgYWNjZXNzLgoJKHRyeV9idWlsdGluX2Fzc2lnbmNvbnYpOiBBY2Nlc3MgY29uc3RhbnQgMCBvbiBhbGwgcHJpbWl0aXZlCgl0eXBlcy4KCSh2YWxpZF9idWlsdGluX2Fzc2lnbmNvbnZfaWRlbnRpdHlfd2lkZW5pbmdfcCk6IEFjY2VwdCBpZGVudGljYWwKCXR5cGVzLiBBY2NlcHQgYWxsIHByb21vdGVkIHR5cGUgb24gaW50IHR5cGUuCgkodmFsaWRfcmVmX2Fzc2lnbmNvbnZfY2FzdF9wKTogQWNjZXB0IGEgbnVsbCBwb2ludGVyIHRvIGJlCglhc3NpZ25lZCB0byBhIHJlZmVyZW5jZS4KCSh2YWxpZF9tZXRob2RfaW52b2NhdGlvbl9jb252ZXJzaW9uX3ApOiBBY2NlcHQgdG8gY2hlY2sgbnVsbAoJcG9pbnRlcnMuCgkoYnVpbGRfYmlub3ApOiBNZXJnZSBkZWNsYXJhdGlvbiBhbmQgaW5pdGlhbGl6YXRpb24gb2YgbG9jYWwKCXZhcmlhYmxlIEJJTk9QLgoJKHBhdGNoX2Jpbm9wKTogTmV3IGNhc2UgZm9yIElOU1RBTkNFT0ZfRVhQUi4gTkVfRVhQUiB0byBhY2NlcHQgYWxsCgludW1lcmljIHR5cGVzLiBJbXByb3ZlZCB2YWxpZGl0eSB0ZXN0IGZvciBxdWFsaWZ5IG9wZXJhdG9ycyBvbgoJcmVmZXJlbmNlcy4KCShwYXRjaF91bmFyeW9wKTogQnJvYWRlbmVkIHJlamVjdGlvbiB0ZXN0IGZvciBQUkVERUNSRU1FTlRfRVhQUgoJYW5kIFBSRUlOQ1JFTUVOVF9FWFBSLiBBbHNvIGRldGVjdCByZXNvbHZlZCBzdGF0aWMgZmluYWxzIG9mIGEKCXByaW1pdGl2ZSB0eXBlIGFuZCBpc3N1ZSB0aGUgYXBwcm9wcmlhdGUgZXJyb3IgbWVzc2FnZS4KCShyZXNvbHZlX3R5cGVfZHVyaW5nX3BhdGNoKTogTWFyayBjbGFzcyBsb2FkZWQgd2hlbiByZXNvbHZlZC4KCShwYXRjaF9jYXN0KTogQWxsb3cgbnVsbCB0byBiZSBjYXNlZCB0byByZWZlcmVuY2UgdHlwZXMuCgkoYnVpbGRfbnVsbF9vZl90eXBlKTogTmV3IGZ1bmN0aW9uLgoJKHBhdGNoX2FycmF5X3JlZik6IEhhbmRsZSBhcnJheSBvbiByZWZlcmVuY2VzIGNvcnJlY3RseS4KCShwYXRjaF9yZXR1cm4pOiBSZW1vdmVkIHVudXNlZCBsb2NhbCB2YXJpYWJsZSBNT0RJRlkuIEZvcmNlCglib29sZWFuIHRvIGJlIHJldHVybmVkIGFzIGludGVnZXJzLiBBbGxvd3MgbnVsbCB0byBiZSByZXR1cm5lZCBieQoJYSBmdW5jdGlvbiByZXR1cm5pbmcgYSByZWZlcmVuY2UuCgkqIHR5cGVjay5jIChjb252ZXJ0X3RvX2ludGVnZXIsIGNvbnZlcnRfdG9fcmVhbCwKCWNvbnZlcnRfdG9fcG9pbnRlcik6IFByb3RvdHlwZXMgbW92ZWQgdG8gY29udmVydC5oCgkobG9va3VwX2FyZ3VtZW50X21ldGhvZCk6IFVzZSBtZXRob2QgcmVhbCBuYW1lLCBpZiBuZWNlc3NhcnkuCgoxOTk4LTEwLTMwICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CgoJKiBjbGFzcy5jIChidWlsZF9jbGFzc19yZWYpOiBDaGFuZ2VkIG5hbWUgb2YgcHJpbWl0aXZlIGNsYXNzZXMgdG8KCXN0YXJ0IHdpdGggYF9Kdl8nLgoKCSogY2xhc3MuYyAobWFrZV9jbGFzc19kYXRhKTogUmVuYW1lZCBmaWVsZHM6IG5tZXRob2RzIHRvCgltZXRob2RfY291bnQsIG1ldGhvZF9jb3VudCB0byBkdGFibGVfbWV0aG9kX2NvdW50LiAgQWx3YXlzIHNldAoJYHN0YXRlJyBmaWVsZCB0byAwLgoJKiBkZWNsLmMgKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogTGlrZXdpc2UuCgpXZWQgT2N0IDI4IDA4OjAzOjMxIDE5OTggIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogY2xhc3MuYyAobGF5b3V0X2NsYXNzKTogRG9uJ3QgbWFuZ2xlIDxmaW5pdD4sIHByb2R1Y2UKCV9fZmluaXQ8Y2xhc3M+IGluc3RlYWQuIERvbid0IHZlcmlmeSBhcnRpZmljaWFsIG1ldGhvZHMuCgkqIGRlY2wuYyAoZmluaXRfaWRlbnRpZmllcl9ub2RlKTogTmV3IGRlY2xhcmVkIGdsb2JhbC4KCShpbml0X2RlY2xfcHJvY2Vzc2luZyk6IGZpbml0X2lkZW50aWZpZXJfbm9kZSBpbml0aWFsaXplZC4KCSogamF2YS10cmVlLmRlZiAoQ09ORElUSU9OQUxfRVhQUik6IE5ldyBKYXZhIHRyZWUgY29kZS4KCSogamF2YS10cmVlLmggKGZpbml0X2lkZW50aWZpZXJfbm9kZSk6IERlY2xhcmVkIGFzIGV4dGVybi4KCShzdHJ1Y3QgbGFuZ19kZWNsKTogTmV3IGZpZWxkIGNhbGxlZF9jb25zdHJ1Y3Rvci4KCShERUNMX0NPTlNUUlVDVE9SX0NBTExTKTogQWNjZXNzIG1hY3JvIHRvIGNhbGxlZF9jb25zdHJ1Y3Rvci4KCShDTEFTU19IQVNfRklOSVRfUCk6IE5ldyBtYWNyby4KCShDQUxMX0NPTlNUUlVDVE9SX1ApOiBMZWFkaW5nIGNvbW1lbnQgY2hhbmdlZC4gTWFjcm8gbm93IGNoZWNrcwoJZXhwbGljaXQgY29uc3RydWN0b3IgaW52b2NhdGlvbi4KCShDQUxMX0VYUExJQ0lUX0NPTlNUUlVDVE9SX1AsIENBTExfVEhJU19DT05TVFJVQ1RPUl9QLAoJQ0FMTF9TVVBFUl9DT05TVFJVQ1RPUl9QKTogTmV3IG1hY3Jvcy4KCSh3cml0ZV9jbGFzc2ZpbGUpOiBBZGRlZCBwcm90b3R5cGUuCgkqIGpjZi1wYXJzZS5jIChqY2ZfcGFyc2Vfc291cmNlKTogUGFyc2UgYW5kIHJlbWVtYmVyIGZvcgoJZ2VuZXJhdGlvbiBpZiB0aGUgZmlsZSB3YXMgc2VlbiBvbiB0aGUgY29tbWFuZCBsaW5lLgoJKHBhcnNlX3NvdXJjZV9maWxlKTogRG9uJ3Qgd3JpdGUgdGhlIGNsYXNzIGZpbGUgaGVyZS4KCSh5eXBhcnNlKTogTG9vcCBvbiBmaWxlcyByZXdyaXR0ZW4uIFNldCBjdXJyZW50X2pjZi4KCShwYXJzZV96aXBfZmlsZV9lbnRyaWVzKTogUGFyc2UgY2xhc3MgZmlsZSBvbmx5IGlmIGl0IHdhcyBmb3VuZC4KCSogbGFuZy5jIChpbml0X3BhcnNlKTogRG9uJ3Qgb3BlbiBjb21tYW5kIGxpbmUgcHJvdmlkZWQgZmlsZW5hbWUKCWhlcmUuCgkobGFuZ19wYXJzZSk6IERvbid0IHNldCBtYWluX2pjZiBhbnltb3JlLgoJKiBwYXJzZS5oIChBQlNUUkFDX0NIRUNLKTogQ2FwaXRhbGl6ZWQgYXJndW1lbnRzLgoJKEpDT05TVFJVQ1RPUl9DSEVDSyk6IE5ldyBtYWNyby4KCShKQlNDX1RZUEVfUCk6IE5ldyBtYWNyby4KCShJTl9UUllfQkxPQ0tfUCwgRVhDRVBUSU9OU19QKTogRml4ZWQgbGVhZGluZyBjb21tZW50LgoJKENPTVBMRVRFX0NIRUNLX09QXzIpOiBOZXcgbWFjcm8uCgkoc3RydWN0IHBhcnNlX2N0eHQpOiBOZXcgZmllbGQgZXhwbGljaXRfY29uc3RydWN0b3JfcC4KCShjaGVja19jbGFzc19pbnRlcmZhY2VfY3JlYXRpb24pOiBGaXhlZCBwcm90b3R5cGUgaW5kZW50YXRpb24uCgkocGF0Y2hfbWV0aG9kX2ludm9jYXRpb25fc3RtdCk6IFByb3RvdHlwZSByZWZsZWN0cyBhZGRlZCBhcmd1bWVudC4KCShwYXRjaF9pbnZva2UpOiBMaWtld2lzZS4KCShjb21wbGV0ZV9tZXRob2RfZGVjbGFyYXRpb24sIGJ1aWxkX3N1cGVyX2ludm9jYXRpb24sCgl2ZXJpZnlfY29uc3RydWN0b3JfY2lyY3VsYXJpdHksCglidWlsZF90aGlzX3N1cGVyX3F1YWxpZmllZF9pbnZvY2F0aW9uLCBnZXRfcHJpbnRhYmxlX21ldGhvZF9uYW1lLAoJcGF0Y2hfY29uZGl0aW9uYWxfZXhwciwgbWF5YmVfZ2VuZXJhdGVfZmluaXQsIGZpeF9jb25zdHJ1Y3RvcnMsCgl2ZXJpZnlfY29uc3RydWN0b3Jfc3VwZXIsIGNyZWF0ZV9hcnRpZmljaWFsX21ldGhvZCwKCXN0YXJ0X2FydGlmaWNpYWxfbWV0aG9kX2JvZHksIGVuZF9hcnRpZmljaWFsX21ldGhvZF9ib2R5LAoJZ2VuZXJhdGVfZmllbGRfaW5pdGlhbGl6YXRpb25fY29kZSk6IE5ldyBmdW5jdGlvbiBwcm90b3R5cGVzLgoJKiBwYXJzZS55OiBGaXhlZCBsZWFkaW5nIGNvbW1lbnQKCShjb25zdHJ1Y3Rvcl9oZWFkZXI6LCBjb25zdHJ1Y3Rvcl9ib2R5OiwgYmxvY2tfZW5kOik6IFJ1bGVzIHRhZ2dlZAoJPG5vZGU+LgoJKHR5cGVfZGVjbGFyYXRpb246KTogQ2FsbCBtYXliZV9nZW5lcmF0ZV9maW5pdC4KCShtZXRob2RfZGVjbGFyYXRpb246KTogQWN0aW9uIGZvciBtZXRob2RfYm9keTogcGxhY2VkIGluIG5ldwoJZnVuY3Rpb24gY29tcGxldGVfbWV0aG9kX2RlY2xhcmF0aW9uLCBjYWxsZWQgaGVyZS4KCShjb25zdHJ1Y3Rvcl9kZWNsYXJhdGlvbjopOiBEZWZpbmVkIGFjdGlvbnMuIFJlbW92ZWQgbGVhZGluZwoJRklYTUUuCgkoY29uc3RydWN0b3JfaGVhZGVyOik6IE5ldyBydWxlIHdpdGggYWN0aW9uLgoJKGNvbnN0cnVjdG9yX2JvZHk6KTogUnVsZSByZXdyaXR0ZW4gdXNpbmcgYmxvY2tfYmVnaW46IGFuZAoJYmxvY2tfZW5kOi4gRGVmaW5lZCBhY3Rpb25zLgoJKGNvbnN0cnVjdG9yX2RlY2xhcmF0b3I6LCBleHBsaWNpdF9jb25zdHJ1Y3Rvcl9pbnZvY2F0aW9uOik6CglEZWZpbmVkIGFjdGlvbnMuCgkoYmxvY2s6KTogVXNlIG5ldyBydWxlcyBibG9ja19iZWdpbjogYmxvY2tfZW5kOi4KCShibG9ja19iZWdpbjosIGJsb2NrX2VuZDopOiBOZXcgcnVsZXMgYW5kIGFjdGlvbnMuCgkoYmxvY2tfc3RhdGVtZW50czopOiBGaXhlZCBlcnJvciBtZXNzYWdlIGZvciBleHBsaWNpdAoJY29uc3RydWN0b3JzLgoJKG1ldGhvZF9pbnZvY2F0aW9uOik6IENhbGwgYnVpbGRfdGhpc19zdXBlcl9xdWFsaWZpZWRfaW52b2NhdGlvbgoJaWYgcHJpbWFyeSBpcyBgdGhpcycgb3IgYHN1cGVyJyB3YXMgc2Vlbi4KCShjb25kaXRpb25hbF9leHByZXNzaW9uOik6IEFjdGlvbiBkZWZpbmVkLgoJKGV4dHJhX2N0eHBfcHVzaGVkX3ApOiBOZXcgc3RhdGljIGdsb2JhbCBmbGFnLgoJKGphdmFfcGFyc2VyX2NvbnRleHRfc2F2ZV9nbG9iYWwpOiBDcmVhdGUgcGFyc2VyIGNvbnRleHQgaWYKCW5lY2Vzc2FyeS4gVXNlIGV4dHJhX2N0eHBfcHVzaGVkX3AgdG8gcmVtZW1iZXIgaXQuCgkoamF2YV9wYXJzZXJfY29udGV4dF9yZXN0b3JlX2dsb2JhbCk6IFBvcCBleHRyYSBwYXJzZXIgY29udGV4dCBpZgoJb25lIGV4aXN0cy4KCShidWlsZF9hcnJheV9mcm9tX25hbWUpOiBBcnJheSBvbiBwcmltaXRpdmUgdHlwZXMgYXJlIG1hcmtlZAoJbG9hZGVkLgoJKHJlZ2lzdGVyX2ZpZWxkcyk6IFJlc3RvcmUgbmV3IG5hbWUgaW4gZmllbGQgaW5pdGlhbGl6ZXIKCWV4cHJlc3Npb24gaWYgdHlwZSB3YXMgYWx0ZXJlZC4gTm9uIHN0YXRpYyBmaWVsZHMgaW5pdGlhbGl6ZWQgdXBvbgoJZGVjbGFyYXRpb24gbWFya2VkIGluaXRpYWxpemVkLgoJKG1heWJlX2dlbmVyYXRlX2Zpbml0KTogTmV3IGZ1bmN0aW9uLgoJKG1heWJlX2dlbmVyYXRlX2NsaW5pdCk6IFVzZSBjcmVhdGVfYXJ0aWZpY2lhbF9tZXRob2QsCglzdGFydF9hcnRpZmljaWFsX21ldGhvZF9ib2R5LCBlbmRfYXJ0aWZpY2lhbF9tZXRob2RfYm9keS4gR2VuZXJhdGUKCWRlYnVnIGluZm8gZm9yIGVuY2xvc2VkIGluaXRpYWxpemF0aW9uIHN0YXRlbWVudHMuCgkobWV0aG9kX2hlYWRlcik6IEZpeGVkIGxlYWRpbmcgY29tbWVudC4gQ2hlY2sgY29uc3RydWN0b3IKCWZsYWdzLiBEZXRlY3QgY29uc3RydWN0b3IgZGVjbGFyYXRpb25zIGFuZCBzZXQgREVDTF9DT05TVFJVQ1RPUl9QCglhY2NvcmRpbmdseS4KCShjb21wbGV0ZV9tZXRob2RfZGVjbGFyYXRpb24sIGNvbnN0cnVjdG9yX2NpcmN1bGFyaXR5X21zZywKCXZlcmlmeV9jb25zdHJ1Y3Rvcl9jaXJjdWxhcml0eSk6IE5ldyBmdW5jdGlvbnMuCgkoZ2V0X3ByaW50YWJsZV9tZXRob2RfbmFtZSk6IE5ldyBmdW5jdGlvbi4KCShjaGVja19tZXRob2RfcmVkZWZpbml0aW9uKTogRG9uJ3QgcmVuYW1lIDxmaW5pdD4gbWV0aG9kcy4gRml4CglkZWNsYXJlZCBjb25zdHJ1Y3RvciBuYW1lcy4gRXJyb3IgbWVzc2FnZSBmb3IKCWNvbnN0cnVjdG9ycyBtb2RpZmllZC4KCShqYXZhX2NoZWNrX3JlZ3VsYXJfbWV0aG9kcyk6IExvY2FsIHZhcmlhYmxlIHNlZW5fY29uc3RydWN0b3IKCXJlbmFtZWQgc2F3X2NvbnN0cnVjdG9yLiBTa2lwIHZlcmlmaWNhdGlvbiBvbiBjb25zdHJ1Y3RvcnMuIENyZWF0ZQoJZGVmYXVsdCBjb25zdHJ1Y3RvciB3aXRoIGNyZWF0ZV9hcnRpZmljaWFsX21ldGhvZC4KCShqYXZhX2NoZWNrX21ldGhvZHMpOiBSZW1vdmVkIHVubmVjZXNzYXJ5IGVtcHR5IGxpbmUuCgkoY3JlYXRlX2FydGlmaWNpYWxfbWV0aG9kLCBzdGFydF9hcnRpZmljaWFsX21ldGhvZF9ib2R5LAoJZW5kX2FydGlmaWNpYWxfbWV0aG9kX2JvZHkpOiBOZXcgZnVuY3Rpb25zLgoJKGphdmFfbGF5b3V0X2NsYXNzZXMpOiBDaGFuZ2VkIGxlYWRpbmcgY29tbWVudC4gUmV2ZXJzZSBmaWVsZHMKCWxpc3QgaWYgbmVjZXNzYXJ5LiBBbHdheXMgbGF5b3V0IGphdmEubGFuZy5PYmplY3QgaWYgYmVpbmcKCWRlZmluZWQuCgkoamF2YV9jb21wbGV0ZV9leHBhbmRfbWV0aG9kcyk6IFZlcmlmeSBjb25zdHJ1Y3RvciBjaXJjdWxhcml0eS4KCShqYXZhX2NvbXBsZXRlX2V4cGFuZF9tZXRob2QpOiBDYWxsIGZpeF9jb25zdHJ1Y3RvciBvbgoJY29uc3RydWN0b3JzLiAgTG9jYWwgdmFyaWFibGUgbm9fYWNfZm91bmQgcmVtb3ZlZC4gUmVzdG9yZQoJYmluZGluZ3MgaWYgbWV0aG9kIGJvZHkgZXhwYW5zaW9uIGZhaWxlZC4KCShmaXhfY29uc3RydWN0b3JzLCB2ZXJpZnlfY29uc3RydWN0b3Jfc3VwZXIsCglnZW5lcmF0ZV9maWVsZF9pbml0aWFsaXphdGlvbl9jb2RlKTogTmV3IGZ1bmN0aW9uLgoJKGphdmFfZXhwYW5kX2NsYXNzZXMpOiBGaXhlZCBsZWFkaW5nIGNvbW1lbnQuIFdyaXRlIGNsYXNzIGZpbGUKCWhlcmUuCgkocmVzb2x2ZV9leHByZXNzaW9uX25hbWUpOiBDaGVjayBmb3IgaWxsZWdhbCBpbnN0YW5jZSB2YXJpYWJsZQoJdXNhZ2Ugd2l0aGluIHRoZSBhcmd1bWVudCBzY29wZSBvZiBhbiBleHBsaWNpdCBjb25zdHJ1Y3RvcgoJaW52b2NhdGlvbi4KCShyZXNvbHZlX3F1YWxpZmllZF9leHByZXNzaW9uX25hbWUpOiBQYXNzIGV4dHJhIGZyb21fc3VwZXIgZmxhZwoJd2hlbiBpbnZva2luZyBwYXRjaF9tZXRob2RfaW52b2NhdGlvbl9zdG10LiBOZXcgY2FzZSBmb3IKCWNvbmRpdGlvbmFsIGV4cHJlc3Npb24gd2hlbiB1c2VkIGFzIGEgcHJpbWFyeS4gQ2hlY2sgZm9yIGVycm9yCgl3aGVuIGFjcXVpcmluZyBzdXBlci4KCShwYXRjaF9tZXRob2RfaW52b2NhdGlvbl9zdG10KTogQWRkZWQgZXh0cmEgYXJndW1lbnQgc3VwZXIuIE5ldwoJbG9jYWwgdmFyaWFibGUgaXNfc3RhdGljX2ZsYWcuIFNldCBjbGFzc190b19zZWFyY2ggYWNjb3JkaW5nIHRvCgl0aGUgbmF0dXJlIG9mIHRoZSBjb25zdHJ1Y3RvciBpbnZvY2F0aW9uLiBEb24ndCBhZGQgYHRoaXMnCglhcmd1bWVudCB3aGVuIGV4cGFuZGluZyBORVdfQ0xBU1NfRVhQUi4gQ2hlY2sgZm9yIGlsbGVnYWwgbWV0aG9kCglpbnZvY2F0aW9uIHdpdGhpbiB0aGUgYXJndW1lbnQgc2NvcGUgb2YgZXhwbGljaXQgY29uc3RydWN0b3IKCWludm9jYXRpb24uIFNldCBpc19zdGF0aWMgYWNjb3JkaW5nIHRvIGlzX3N0YXRpY19mbGFnLiBQcm92aWRlCglleHRyYSBgc3VwZXInIGFyZ3VtZW50IHRvIHBhdGNoX2ludm9rZSBpbnZvY2F0aW9uLgoJKHBhdGNoX2ludm9rZSk6IE5ldyBhcmd1bWVudCBmcm9tX3N1cGVyLiBMb29wIG9uIGFyZ3VtZW50cwoJaW5kZW50YXRpb24gZml4ZWQuIFBhc3MgZnJvbV9zdXBlciB0byBpbnZvY2F0aW9uX21vZGUuIE5ldyBzd2l0Y2gKCWNhc2UgSU5WT0tFX1NVUEVSLiBGaXhlZCBlcnJvciBtZXNzYWdlIGluIHN3aXRjaCBkZWZhdWx0IGNhc2UuCglEb24ndCB1c2UgQ0FMTF9DT05TVFJVQ1RPUl9QIGJ1dCByYXRoZXIgYSB0ZXN0IG9uIHRoZSB0cmVlIG5vZGUKCXZhbHVlLgoJKGludm9jYXRpb25fbW9kZSk6IFJldHVybiBJTlZPS0VfU1VQRVIgbW9kZSB3aGVuIGFwcHJvcHJpYXRlLgoJKGxvb2t1cF9tZXRob2RfaW52b2tlKTogRml4ZWQgcHJvdG90eXBlcyBpbiBjYW5kaWRhdGVzIGxpc3QuIEVycm9yCgltZXNzYWdlIHRha2VzIGNvbnN0cnVjdG9ycyBpbnRvIGFjY291bnQuCgkoZmluZF9hcHBsaWNhYmxlX2FjY2Vzc2libGVfbWV0aG9kc19saXN0KTogRml4ZWQgaW5kZW50YXRpb24uCgkocXVhbGlmeV9hbWJpZ3VvdXNfbmFtZSk6IFRha2UgZXhwbGljaXQgY29uc3RydWN0b3IgaW52b2NhdGlvbgoJaW50byBhY2NvdW50LiBEZWFsIHdpdGggYSBjb25kaXRpb25hbCBleHByZXNzaW9uIGFzIGEgcHJpbWFyeSB0bwoJYSBtZXRob2QgY2FsbC4KCShqYXZhX2NvbXBsZXRlX3RyZWUpOiBBZGRlZCBsb2NhbCB3Zmxfb3AzLiBOZXcgQ09ORElUSU9OQUxfRVhQUgoJY2FzZS4gQWRkZWQgZXh0cmEgYXJndW1lbnQgdG8gcGF0Y2hfbWV0aG9kX2ludm9jYXRpb25fc3RtdC4KCVJlZ2lzdGVyIGNhbGxzIG1hZGUgdG8gZXhwbGljaXQgY29uc3RydWN0b3IgYHRoaXMnLiBEb24ndCBjYWxsCglzYXZlX2V4cHIgaW4gQVJSQVlfUkVGIGNhc2Ugd2hlbiBlbWl0dGluZyBjbGFzcyBmaWxlcy4gQ2hlY2sgZm9yCglpbGxlZ2FsIHVzZSBvZiB0aGlzIHdoZW4gZXhwYW5kaW5nIGV4cGxpY2l0IGNvbnN0cnVjdG9yIGludm9jYXRpb24KCWFyZ3VtZW50cy4KCShjb21wbGV0ZV9mdW5jdGlvbl9hcmd1bWVudHMpOiBTZXQgYW5kIHJlc2V0IHBhcnNlciBjb250ZXh0CglleHBsaWNpdF9jb25zdHJ1Y3Rvcl9wIGZpZWxkIHZhbHVlIHdoZW4gYXBwcm9wcmlhdGUuCgkoYnVpbGRfc3VwZXJfaW52b2NhdGlvbiwgYnVpbGRfdGhpc19zdXBlcl9xdWFsaWZpZWRfaW52b2NhdGlvbik6CglOZXcgZnVuY3Rpb25zLgoJKHBhdGNoX2Fzc2lnbm1lbnQpOiBGaXhlZCB0eXBvLgoJKHBhdGNoX3VuYXJ5b3ApOiBDaGVjayBvbiBmaW5hbCBmaWVsZHMgb2NjdXJzIG9ubHkgd2hlbiBhIGRlY2wKCWV4aXRzLgoJKHBhdGNoX3JldHVybik6IFRha2UgY29uc3RydWN0b3JzIGludG8gYWNjb3VudC4KCShwYXRjaF9jb25kaXRpb25hbF9leHByKTogTmV3IGZ1bmN0aW9uLgoJKiB0eXBlY2suYyAoYnVpbGRfamF2YV9zaWduYXR1cmUpOiBSZW1vdmVkIHVubmVjZXNzYXJ5IGVtcHR5IGxpbmUuCgpXZWQgT2N0IDI4IDAwOjQ2OjE1IDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIE1ha2VmaWxlLmluIChqY2YtZHVtcCwgZ2NqaCk6IExpbmsgaW4gJChMSUJTKSB0b28uCgoxOTk4LTEwLTI4ICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CgoJKiBkZWNsLmMgKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogUmVuYW1lZCBmaWVsZHMuCgkqIGNsYXNzLmMgKG1ha2VfY2xhc3NfZGF0YSk6IFJlbmFtZWQgYmZzaXplLCBuZmllbGRzLCBuc2ZpZWxkcywKCWludGVyZmFjZV9sZW4sIG1zaXplIGZpZWxkcy4KCgkqIGNsYXNzLmMgKG1ha2VfY2xhc3NfZGF0YSk6IFJlbW92ZWQgc3ViY2xhc3NfaGVhZCBhbmQKCXN1YmNsYXNzX25leHQgZmllbGRzLgoJKiBkZWNsLmMgKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogUmVtb3ZlZCBzdWJjbGFzc19oZWFkIGFuZAoJc3ViY2xhc3NfbmV4dCBmaWVsZHMuCgpXZWQgT2N0IDI4IDAwOjQ2OjE1IDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGpjZi13cml0ZS5jIChlbWl0X2xvYWRfb3Jfc3RvcmUpOiBBdm9pZCBpbXBsaWNpdCBpbnQgYXJndW1lbnRzLgoJKiBtYW5nbGUuYyAoZW1pdF91bmljb2RlX21hbmdsZWRfbmFtZSk6IFNpbWlsYXJseS4KCk1vbiBPY3QgMjYgMTI6MTc6MjMgMTk5OCAgTmljayBDbGlmdG9uICA8bmlja2NAY3lnbnVzLmNvbT4KCgkqIGpjZi1wYXJzZS5jIChnZXRfY29uc3RhbnQpOiBQbGFjZSBicmFjZXMgYXJvdW5kIGNvZGUgdG8gY29tcHV0ZQoJJ2QnIHdoZW4gUkVBTF9BUklUSE1FVElDIGlzIG5vdCBkZWZpbmVkLgoKU3VuIE9jdCAyNSAxNDo1ODowNSAxOTk4ICBILkouIEx1ICAoaGpsQGdudS5vcmcpCgoJKiBNYWtlLWxhbmcuaW4gKGp2LXNjYW4kKGV4ZWV4dCkpOiBBZGQgc3RhbXAtb2JqbGlzdCB0bwoJZGVwZW5kZW5jeS4KCjE5OTgtMTAtMjMgIFRvbSBUcm9tZXkgIDx0cm9tZXlAY3lnbnVzLmNvbT4KCgkqIGxhbmctc3BlY3MuaDogYC56aXAnIGZpbGVzIGFyZSBpbnB1dCB0byBqYzEuCgpUaHUgT2N0IDIyIDIzOjAxOjU0IDE5OTggIFBlciBCb3RobmVyICA8Ym90aG5lckBjeWdudXMuY29tPgoKCSoganZzcGVjcy5jOiAgQWRkIChidXQgZG9uJ3QgZW5hYmxlKSBzdXBwb3J0IGZvciBjb21iaW5pbmcgbXVsdGlwbGUKCS5jbGFzcyBhbmQgLmphdmEgaW5wdXQgZmlsZW5hbWVzIHRvIGEgc2luZ2xlIGpjMSBpbnZvY2F0aW9uLgoJQWRkIHN1cHBvcnQgZm9yIC1DIGZsYWcgKGNvcGlsZSB0byAuY2xhc3MgZmlsZXMpLgoJVHJhbnNsYXRlIC1jbGFzc3BhdGggYW5kIC1DTEFTU1BBVEggYXJndW1lbnRzLgoJKiBsYW5nLXNwZWNzLmg6ICBEb24ndCBzZXQgJTIgc3BlYy4KCjE5OTgtMTAtMjIgIFRvbSBUcm9tZXkgIDx0cm9tZXlAY3lnbnVzLmNvbT4KCgkqIGpjZi1wYXRoLmMgKGFkZF9lbnRyeSk6IERvbid0IGFkZCB0cmFpbGluZyBzZXBhcmF0b3IgaWYgZW50cnkgaXMKCWEgLnppcCBmaWxlLgoJKGFkZF9wYXRoKTogRG9uJ3QgYWRkIHRyYWlsaW5nIHNlcGFyYXRvciB0byBub24tZW1wdHkgcGF0aAoJZWxlbWVudHMuCgoJKiBsYW5nLmMgKGxhbmdfZGVjb2RlX29wdGlvbik6IENoZWNrIGZvciAtZmNsYXNzcGF0aCBhbmQKCS1mQ0xBU1NQQVRIIGJlZm9yZSBleGFtaW5pbmcgb3RoZXIgYC1mJyBvcHRpb25zLgoKCSogamF2YS10cmVlLmggKGZpbmFsaXplX2lkZW50aWZpZXJfbm9kZSk6IERvbid0IGRlY2xhcmUuCgkqIGNsYXNzLmMgKG1ha2VfY2xhc3NfZGF0YSk6IERvbid0IHB1c2ggImZpbmFsIiBmaWVsZC4KCSogZGVjbC5jIChpbml0X2RlY2xfcHJvY2Vzc2luZyk6IERvbid0IHB1c2ggImZpbmFsIiBmaWVsZC4KCShmaW5hbGl6ZV9pZGVudGlmaWVyX25vZGUpOiBSZW1vdmVkLgoJKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogRG9uJ3Qgc2V0IGZpbmFsaXplX2lkZW50aWZpZXJfbm9kZS4KCgkqIGNvbmZpZy1sYW5nLmluIChzdGFnZXN0dWZmKTogQWRkZWQgamNmLWR1bXAgYW5kIGp2LXNjYW4uCgpTdW4gT2N0IDExIDEwOjMxOjUyIDE5OTggIEFudGhvbnkgR3JlZW4gIDxncmVlbkBjeWdudXMuY29tPgoKCSogTWFrZS1sYW5nLmluIChqYXZhKTogRGVwZW5kIG9uIGpjZi1kdW1wIGFuZCBqdi1zY2FuLgoJKEpWX1NDQU5fU09VUkNFUyk6IE5ldyBtYWNyby4KCShKQ0ZfRFVNUF9TT1VSQ0VTKTogTGlrZXdpc2UuCgkoamNmLWR1bXAkKGV4ZWV4dCkpOiBOZXcgdGFyZ2V0LgoJKGp2LXNjYW4kKGV4ZWV4dCkpOiBOZXcgdGFyZ2V0LgoKMTk5OC0xMC0yMiAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgoKCSogTWFrZWZpbGUuaW4gKExFWCk6IFJlbW92ZWQuCgkoTEVYRkxBR1MpOiBMaWtld2lzZS4KCShTRVRfQklTT04pOiBOZXcgbWFjcm8uCgkoQklTT04pOiBSZW1vdmVkLgoJKCQoUEFSU0VfQykpOiBVc2UgU0VUX0JJU09OLiAgUnVuIGJpc29uIGZyb20gc3JjZGlyIHRvIGF2b2lkCglzcHVyaW91cyBkaWZmcyBpbiBwYXJzZS5jLgoJKCQoUEFSU0VfU0NBTl9DKSk6IExpa2V3aXNlLgoJKFBBUlNFX0RJUik6IE5ldyBtYWNyby4KCShQQVJTRV9DKTogVXNlIGl0LgoJKFBBUlNFX1NDQU5fQyk6IExpa2V3aXNlLgoJKFBBUlNFX1JFTERJUik6IE5ldyBtYWNyby4KCgkqIGpjZi1pby5jIChzYXdfamF2YV9zb3VyY2UpOiBEZWZpbmUgaGVyZSwgbm90IGluIGpjZi1wYXJzZS5jLgoKCSogamNmLWlvLmMgKGZpbmRfY2xhc3MpOiBVc2Ugc2F3X2phdmFfc291cmNlIHRvIGRldGVybWluZSB3aGVuIHRvCglsb29rIGZvciBgLmphdmEnIGZpbGUuCgkqIGpjZi1wYXJzZS5jIChzYXdfamF2YV9zb3VyY2UpOiBOZXcgZ2xvYmFsLgoJKHl5cGFyc2UpOiBTZXQgaXQgaWYgYC5qYXZhJyBmaWxlIHNlZW4uCgoJKiBNYWtlLWxhbmcuaW4gKEpBVkFfU1JDUyk6IEFkZGVkIGpjZi1wYXRoLmMuCgkoR0NKSF9TT1VSQ0VTKTogTGlrZXdpc2UuCgkqIE1ha2VmaWxlLmluIChkYXRhZGlyKTogTmV3IG1hY3JvLgoJKGxpYmphdmFfemlwKTogTGlrZXdpc2UuCgkoSkFWQV9PQkpTKTogQWRkZWQgamNmLXBhdGguby4KCSguLi9qY2YtZHVtcCQoZXhlZXh0KSk6IERlcGVuZCBvbiBhbmQgbGluayB3aXRoIGpjZi1kZXBlbmQuby4KCSguLi9nY2poJChleGVleHQpKTogTGlrZXdpc2UuCgkoamNmLXBhdGgubyk6IE5ldyB0YXJnZXQuCgkqIGphdmEtdHJlZS5oIChmaXhfY2xhc3NwYXRoKTogUmVtb3ZlZCBkZWNsLgoJKiBqY2YtcGFyc2UuYyAoZml4X2NsYXNzcGF0aCk6IFJlbW92ZWQuCgkobG9hZF9jbGFzcyk6IERvbid0IGNhbGwgZml4X2NsYXNzcGF0aC4KCSogcGFyc2UueSAocmVhZF9pbXBvcnRfZGlyKTogRG9uJ3QgY2FsbCBmaXhfY2xhc3NwYXRoLgoJKiBsZXguaDogRG9uJ3QgbWVudGlvbiBjbGFzc3BhdGguCgkqIGxleC5jIChqYXZhX2luaXRfbGV4KTogRG9uJ3QgaW5pdGlhbGl6ZSBjbGFzc3BhdGguCgkqIGpjZi1pby5jIChjbGFzc3BhdGgpOiBSZW1vdmVkIGdsb2JhbC4KCShmaW5kX2NsYXNzKTogVXNlIGpjZl9wYXRoIGl0ZXJhdGlvbiBmdW5jdGlvbnMuICBDb3JyZWN0bHkgc2VhcmNoCgljbGFzcyBwYXRoIGZvciAuamF2YSBmaWxlLgoJKG9wZW5faW5femlwKTogTmV3IGFyZ3VtZW50IGBpc19zeXN0ZW0nLgoJKiBqY2YtZHVtcC5jIChtYWluKTogQ2FsbCBqY2ZfcGF0aF9pbml0LiAgUmVjb2duaXplIGFsbCBuZXcKCWNsYXNzcGF0aC1yZWxhdGVkIG9wdGlvbnMuCgkqIGxhbmcuYyAobGFuZ19kZWNvZGVfb3B0aW9uKTogSGFuZGxlIC1mY2xhc3NwYXRoLCAtZkNMQVNTUEFUSCwKCWFuZCAtSS4KCShsYW5nX2luaXQpOiBDYWxsIGpjZl9wYXRoX2luaXQuCgkqIGxhbmctb3B0aW9ucy5oOiBNZW50aW9uIC1JLCAtZmNsYXNzcGF0aCwgYW5kIC1mQ0xBU1NQQVRILgoJKiBsYW5nLXNwZWNzLmg6IEhhbmRsZSAtSS4gIE1pbm9yIGNsZWFudXAgdG8gLU0gb3B0aW9ucy4KCUNvcnJlY3RseSBwdXQgYnJhY2VzIGFyb3VuZCBzZWNvbmQgc3RyaW5nIGluIGVhY2ggZW50cnkuCgkqIGdqYXZhaC5jIChtYWluKTogQ2FsbCBqY2ZfcGF0aF9pbml0LiAgUmVjb2duaXplIGFsbCB0aGUgbmV3CgljbGFzc3BhdGgtcmVsYXRlZCBvcHRpb25zLgoJKGhlbHApOiBVcGRhdGVkIGZvciBuZXcgb3B0aW9ucy4KCSogamNmLmg6IERlY2xhcmUgZnVuY3Rpb25zIGZyb20gamNmLXBhdGguYy4gIERvbid0IG1lbnRpb24KCWBjbGFzc3BhdGgnIGdsb2JhbC4KCSogamNmLXBhdGguYzogTmV3IGZpbGUuCgoJKiBqY2YtZGVwZW5kLmM6IEluY2x1ZGUgamNmLmguCgoJKiBqY2Ytd3JpdGUuYyAobG9jYWx2YXJfYWxsb2MpOiBSZXR1cm5zIGB2b2lkJy4KCShsb2NhbHZhcl9mcmVlKTogUmVtb3ZlZCB1bnVzZWQgdmFyaWFibGUuCgoJKiBsYW5nLmMgKE9CSkVDVF9TVUZGSVgpOiBEZWZpbmUgaWYgbm90IGFscmVhZHkgZGVmaW5lZC4KCShpbml0X3BhcnNlKTogVXNlIE9CSkVDVF9TVUZGSVgsIG5vdCAiLm8iLgoKV2VkIE9jdCAyMSAwNzo1NDoxMSAxOTk4ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIGNsYXNzLmMgKGVtaXRfcmVnaXN0ZXJfY2xhc3Nlcyk6IFJlbmFtZWQgZnJvbQoJZW1pdF9yZWdpc3Rlcl9jbGFzcy4KCSogamF2YS10cmVlLmggKGVtaXRfcmVnaXN0ZXJfY2xhc3Nlcyk6IFByb3RvdHlwZSByZW5hbWVkIGZyb20KCWVtaXRfcmVnaXN0ZXJfY2xhc3MuCgkqIGpjZi1wYXJzZS5jICh5eXBhcnNlKTogQ2FsbCBlbWl0X3JlZ2lzdGVyX2NsYXNzZXMgb25jZSBiZWZvcmUKCXJldHVybmluZy4KCSogcGFyc2UueSAoamF2YV9leHBhbmRfY2xhc3Nlcyk6IE5vIGxvbmdlciByZWdpc3RlciBjbGFzc2VzLgoKVHVlIE9jdCAyMCAwOToxNTozOCAxOTk4ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIGNsYXNzLmMgKGlzX2NvbXBpbGVkX2NsYXNzKTogTmV3IGxvY2FsIHZhcmlhYmxlCglzZWVuX2luX3ppcC4gSWRlbnRpZnkgY2xhc3NlcyBmb3VuZCBpbiBjdXJyZW50bHkgY29tcGlsZWQgc291cmNlCglmaWxlKHMpLgoJKiBkZWNsLmMgKGNvbXBsZXRlX3N0YXJ0X2phdmFfbWV0aG9kKTogRml4ZWQgdHlwby4KCSogamF2YS10cmVlLmggKENMQVNTX0ZST01fQ1VSUkVOVExZX0NPTVBJTEVEX1NPVVJDRV9QLAoJSEFTX0JFRU5fQUxSRUFEWV9QQVJTRURfUCwgSVNfQV9DT01NQU5EX0xJTkVfRklMRU5BTUVfUCk6IE5ldyBtYWNyb3MuCgkoQ0xBU1NfUCk6IE1vdmVkIGFyb3VuZC4KCShqYXZhX3BhcnNlX2Fib3J0X29uX2Vycm9yKTogTWFjcm8gbW92ZWQgZnJvbSBqY2YtcGFyc2UuYwoJKiBqY2YtcGFyc2UuYyAoamF2YV9wYXJzZV9hYm9ydF9vbl9lcnJvcik6IE1hY3JvIG1vdmVkIHRvCglqYXZhLXBhcnNlLmgKCShqY2ZfcGFyc2Vfc291cmNlKTogQ2hhbmdlZCBsZWFkaW5nIGNvbW1lbnQuIFJlbW92ZWQgdW5uZWNlc3NhcnkKCWZjbG9zZSBhbmQgQ0xBU1NfRlJPTV9TT1VSQ0VfUCBtYXJraW5nLgoJKHBhcnNlX3NvdXJjZV9maWxlKTogTmV3IGxvY2FsIHZhcmlhYmxlcyByZW1lbWJlcl9mb3JfZ2VuZXJhdGlvbgoJYW5kIGZpbGVuYW1lLiBNYXJrIHBhcnNlZCBmaWxlIG5hbWUgaWRlbnRpZmllciBub2RlLiBSZW1vdmVkIGJsb2NrCglleGVjdXRlZCB3aGVuIHBhcnNlX29ubHkgd2FzIG51bGwuIFNldCByZW1lbWJlcl9mb3JfZ2VuZXJhdGlvbi4KCVVzZSBpdCBhcyBhbiBhcmd1bWVudCB0byBqYXZhX3BvcF9wYXJzZXJfY29udGV4dC4KCSh5eXBhcnNlKTogTmV3IGxvY2FsIHZhcmlhYmxlcyBzZXZlcmFsX2ZpbGVzLCBsaXN0LCBuZXh0IG5vZGUgYW5kCgljdXJyZW50X2ZpbGVfbGlzdC4gU3BsaXQgYW1wZXJzYW5kIHNlcGFyYXRlZCBmaWxlIG5hbWVzIGludG8KCWN1cnJlbnRfZmlsZV9saXN0LiBJdGVyYXRlIHRocm91Z2ggdGhlIGxpc3QgYW5kIHBhcnNlIGFjY29yZGluZ2x5LgoJKiBwYXJzZS5oIChqYXZhX3BvcF9wYXJzZXJfY29udGV4dCk6IE5ldyBmdW5jdGlvbiBwcm90b3R5cGUuCgkqIHBhcnNlLnkgKGN0eHBfZm9yX2dlbmVyYXRpb24pOiBOZXcgc3RhdGljIGdsb2JhbCB2YXJpYWJsZS4KCShqYXZhX3BvcF9wYXJzZXJfY29udGV4dCk6IE5ldyBhcmd1bWVudCBnZW5lcmF0ZS4gTGluayBwb3BwZWQgY3R4cAoJdG8gY3R4cF9mb3JfZ2VuZXJhdGlvbiBsaXN0IGFjY29yZGluZ2x5LgoJKGphdmFfY29tcGxldGVfZXhwYW5kX21ldGhvZHMpOiBGaXhlZCBpbmRlbnRhdGlvbi4KCShqYXZhX2V4cGFuZF9jbGFzc2VzKTogTmV3IGZ1bmN0aW9uLgoKU2F0IE9jdCAxNyAxMToyNToyMSAxOTk4ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAY3lnbnVzLmNvbT4KCgkqIE1ha2VmaWxlLmluOiAgTGluayB3aXRoIGxpYmliZXJ0eS5hIGluc3RlYWQgb2YgbWVtbW92ZS5vLgoKRnJpIE9jdCAxNiAxMDo1OTowMSAxOTk4ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIGxleC5jIChzZXRqbXAuaCk6IE5vIGxvbmdlciBpbmNsdWRlZC4KCSogbGV4LmggKHNldGptcC5oKTogSW5jbHVkZWQuCgkqIHBhcnNlLmggKFNFVF9UWVBFX0ZPUl9SRVNPTFVUSU9OKTogTmV3IG1hY3JvLgoJKGR1cGxpY2F0ZV9kZWNsYXJhdGlvbl9lcnJvcl9wKTogUmVuYW1lZCBmcm9tCglkdXBsaWNhdGVfZGVjbGFyYXRpb25fZXJyb3IuCgkoYnVpbGRfYXJyYXlfZnJvbV9uYW1lKTogTmV3IGZ1bmN0aW9uIHByb3RvdHlwZS4KCSogcGFyc2UueSAoc2V0am1wLmgpOiBObyBsb25nZXIgaW5jbHVkZWQuCgkodmFyaWFibGVfZGVjbGFyYXRvcl9pZCk6IERlZmluZSBhY3Rpb24uCgkoYnVpbGRfYXJyYXlfZnJvbV9uYW1lKTogTmV3IGZ1bmN0aW9uLgoJKGR1cGxpY2F0ZV9kZWNsYXJhdGlvbl9lcnJvcl9wKTogUmVuYW1lZCBmcm9tCglkdXBsaWNhdGVfZGVjbGFyYXRpb25fZXJyb3IuICBGaXhlZCBsZWFkaW5nIGNvbW1lbnQuCgkocmVnaXN0ZXJfZmllbGRzKTogTWFpbiBgZm9yJyBsb29wIHJlb3JnYW5pemVkLiBVc2VzCglTRVRfVFlQRV9GT1JfUkVTT0xVVElPTiBhbmQgYnVpbGRfYXJyYXlfZnJvbV9uYW1lLgoJKG1ldGhvZF9kZWNsYXJhdG9yKTogVXNlcyBTRVRfVFlQRV9GT1JfUkVTT0xVVElPTiBhbmQgY2FsbAoJYnVpbGRfYXJyYXlfZnJvbV9uYW1lLgoJKHJlc29sdmVfY2xhc3MpOiBTZXQgQ0xBU1NfTE9BREVEX1Agb24gbmV3bHkgYnVpbGQgYXJyYXkgZGltZW5zaW9uCgl0eXBlcy4KCShyZWFkX2ltcG9ydF9kaXIpOiBEb24ndCB0cnkgdG8gc2tpcCBgLicgYW5kIGAuLicuCgkoZGVjbGFyZV9sb2NhbF92YXJpYWJsZXMpOiBVc2VzIFNFVF9UWVBFX0ZPUl9SRVNPTFVUSU9OIGFuZAoJYnVpbGRfYXJyYXlfZnJvbV9uYW1lLiBNYWluIGBmb3InIGxvb3AgcmVvcmdhbml6ZWQuCgkocmVzb2x2ZV9xdWFsaWZpZWRfZXhwcmVzc2lvbl9uYW1lKTogV2hlbiBidWlsZGluZyBhY2Nlc3MgdG8gYQoJZmllbGQsIHVzZSB0aGUgdHlwZSB3aGVyZSB0aGUgZmllbGQgd2FzIGZvdW5kLCBub3QgaXRzIG93biB0eXBlLgoJKG1heWJlX2FjY2Vzc19maWVsZCk6IFVzZSBmaWVsZCBERUNMX0NPTlRFWFQgaWYgdGhlIHR5cGUgd2hlcmUgdGhlCglmaWVsZCB3YXMgZm91bmQgaXMgbnVsbC4KCShxdWFsaWZ5X2FtYmlndW91c19uYW1lKTogU3dlZXAgdGhyb3VnaCBhbGwgc3VjY2Vzc2l2ZSBhcnJheQoJZGltZW5zaW9ucy4KCldlZCBPY3QgMTQgMTg6MjE6MjkgMTk5OCAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBqYXZhLXRyZWUuaCAocG9wX2xhYmVsZWRfYmxvY2ssIGxhbmdfcHJpbnRhYmxlX25hbWUsCgltYXliZV9hZGRfaW50ZXJmYWNlLCBzZXRfc3VwZXJfaW5mbywgZ2V0X2FjY2Vzc19mbGFnc19mcm9tX2RlY2wsCglpbnRlcmZhY2Vfb2ZfcCwgaW5oZXJpdHNfZnJvbV9wLCBmaXhfY2xhc3NwYXRoLAoJY29tcGxldGVfc3RhcnRfamF2YV9tZXRob2QsIGVtaXRfaGFuZGxlcnMsIGluaXRfb3V0Z29pbmdfY3Bvb2wsCgltYWtlX2NsYXNzX2RhdGEsIHJlZ2lzdGVyX2NsYXNzLCBhbGxvY19uYW1lX2NvbnN0YW50KTogTmV3CglmdW5jdGlvbiBwcm90b3R5cGVzLgoJKiBsYW5nLmMgKGxhbmdfZGVjb2RlX29wdGlvbik6IFNldCBhcmdjIGFyZ3VtZW50IHVudXNlZC4gRml4ZWQKCWluZGVudGF0aW9uLiBBZGRlZCBjYXN0IHRvIHJlbW92ZSB3YXJuaW5nLgoJKGxhbmdfcHJpbnRhYmxlX25hbWUpOiBTZXQgdiBhcmd1bWVudCB1bnVzZWQuCgkobGFuZ19wcmludF9lcnJvcik6IEFkZGVkIGFyZ3VtZW50IHRvIGxhbmdfcHJpbnRhYmxlX25hbWUgY2FsbC4KCShqYXZhX2R1bW15X3ByaW50LCBwcmludF9sYW5nX2RlY2wsIHByaW50X2xhbmdfdHlwZSwKCXByaW50X2xhbmdfaWRlbnRpZmllciwgbGFuZ19wcmludF94bm9kZSk6IEFsbCBhcmd1bWVudCBtYXJrZWQKCXVudXNlZC4KCSogbGV4LmMgKGphdmFfdW5nZXRfdW5pY29kZSk6IFJlbW92ZWQgdW5uZWNlc3NhcnkgYXJndW1lbnQuCgkoamF2YV9hbGxvY2F0ZV9uZXdfbGluZSk6IFVudXNlZCBsb2NhbCB2YXJpYWJsZSBpcyBnb25lLgoJKGphdmFfcmVhZF9jaGFyKTogQWRkZWQgcGFyZW50aGVzaXMgaW4gZXhwcmVzc2lvbnMgdG8gcmVtb3ZlCgl3YXJuaW5ncy4gIEFkZGVkIGZpbmFsIHJldHVybiBzdGF0ZW1lbnQuCgkoamF2YV9yZWFkX3VuaWNvZGUpOiBBZGRlZCBwYXJlbnRoZXNpcyBpbiBleHByZXNzaW9uIHRvIHJlbW92ZQoJd2FybmluZy4KCShqYXZhX3BhcnNlX2VuZF9jb21tZW50KTogRml4ZWQgamF2YV91bmdldF91bmljb2RlIGludm9jYXRpb24uCgkoamF2YV9wYXJzZV9lc2NhcGVfc2VxdWVuY2UpOiBMaWtld2lzZS4KCShqYXZhX2xleCk6IFVudXNlZCBsb2NhbCB2YXJpYWJsZXMgYXJlIGdvbmUuIEZpeGVkCglqYXZhX3VuZ2V0X3VuaWNvZGUgaW52b2NhdGlvbi4KCSogbGV4LmggKHNldF9mbG9hdF9oYW5kbGVyKTogUHJvdG90eXBlIGFkZGVkIHdoZW4gSkMxX0xJVEUgbm90CglkZWZpbmVkLgoJKiBwYXJzZS5oIChFUlJPUl9DQU5UX0NPTlZFUlRfVE9fQk9PTEVBTik6IEZpeGVkCglsYW5nX3ByaW50YWJsZV9uYW1lIGludm9jYXRpb24gaW4gbWFjcm8uCgkoRVJST1JfQ0FOVF9DT05WRVJUX1RPX05VTUVSSUMsIEVSUk9SX0NBU1RfTkVFREVEX1RPX0lOVEVHUkFMKToKCUxpa2V3aXNlLgoJKGR1cGxpY2F0ZV9kZWNsYXJhdGlvbl9lcnJvcik6IFN1cHByZXNzZWQgdW51c2VkIGFyZ3VtZW50IGluCglwcm90b3R5cGUuCgkoaWRlbnRpY2FsX3N1YnBhdGhfcCk6IEZ1bmN0aW9uIGRlY2xhcmF0aW9uIGlzIGdvbmUuCgkocGF0Y2hfaW52b2tlKTogU3VwcHJlc3NlZCB1bnVzZWQgYXJndW1lbnQgaW4gcHJvdG90eXBlLgoJKHBhdGNoX2Nhc3QsIGJ1aWxkX2xhYmVsZWRfYmxvY2ssIGNoZWNrX3Rocm93bl9leGNlcHRpb25zKToKCUxpa2V3aXNlLgoJKiBwYXJzZS55IChzZXRqbXAuaCk6IEluY2x1ZGVkCgkodG9wbGV2LmgpOiBMaWtld2lzZS4KCShmaWVsZF9kZWNsYXJhdGlvbjopOiBTdXBwcmVzc2VkIHVudXNlZCBsb2NhbAoJKGxhYmVsX2RlY2w6KTogRml4ZWQgYnVpbGRfbGFiZWxlZF9ibG9jayBpbnZvY2F0aW9uLgoJKGphdmFfcG9wX3BhcnNlcl9jb250ZXh0KTogUHV0IGV4dHJhIHBhcmVudGhlc2lzIGFyb3VuZCBhc3NpZ25tZW50CglpbiBpZi4KCSh5eWVycm9yKTogU3VwcHJlc3NlZCB1bnVzZWQgbG9jYWwgdmFyaWFibGVzLgoJKHZhcmlhYmxlX3JlZGVmaW5pdGlvbl9lcnJvcik6IEZpeGVkIGxhbmdfcHJpbnRhYmxlX25hbWUKCWludm9jYXRpb24uCgkoY3JlYXRlX2ludGVyZmFjZSk6IFN1cHByZXNzZWQgdW51c2VkIGxvY2FsIHZhcmlhYmxlcy4KCShjcmVhdGVfY2xhc3MpOiBMaWtld2lzZS4KCShkdXBsaWNhdGVfZGVjbGFyYXRpb25fZXJyb3IpOiBTdXBwcmVzc2VkIHVudXNlZCBhcmd1bWVudC4gRml4ZWQKCWxhbmdfcHJpbnRhYmxlX25hbWUgaW52b2NhdGlvbi4KCShyZWdpc3Rlcl9maWVsZHMpOiBTdXBwcmVzc2VkIHVudXNlZCBsb2NhbCB2YXJpYWJsZS4gRml4ZWQKCWR1cGxpY2F0ZV9kZWNsYXJhdGlvbl9lcnJvciBpbnZvY2F0aW9uLgoJKG1ldGhvZF9oZWFkZXIpOiBTdXBwcmVzc2VkIHVudXNlZCBsb2NhbCB2YXJpYWJsZS4KCShtZXRob2RfZGVjbGFyYXRvciwgcGFyc2VyX2NoZWNrX3N1cGVyKTogTGlrZXdpc2UuCgkoamF2YV9jb21wbGV0ZV9jbGFzcyk6IFN1cHByZXNzZWQgdW51c2VkIGxvY2FsIHZhcmlhYmxlLiBGaXhlZAoJZmF0YWwgZXJyb3IgbWVzc2FnZS4KCShjb21wbGV0ZV9jbGFzc19yZXBvcnRfZXJyb3JzKTogQWRkZWQgZGVmYXVsdDogaW4gc3dpdGNoLgoJKGphdmFfY2hlY2tfcmVndWxhcl9tZXRob2RzKTogRml4ZWQgbGFuZ19wcmludGFibGVfbmFtZQoJaW52b2NhdGlvbnMuCgkoY2hlY2tfdGhyb3dzX2NsYXVzZXMpOiBMaWtld2lzZS4KCShqYXZhX2NoZWNrX2Fic3RyYWN0X21ldGhvZHMpOiBTdXBwcmVzc2VkIHVudXNlZCBsb2NhbAoJdmFyaWFibGUuIEZpeGVkIGxhbmdfcHJpbnRhYmxlX25hbWUgaW52b2NhdGlvbi4KCShyZWFkX2ltcG9ydF9lbnRyeSk6IEFkZGVkIHN1cHBsZW1lbnRhbCByZXR1cm4gc3RhdGVtZW50LgoJKHJlYWRfaW1wb3J0X2Rpcik6IFN1cHByZXNzZWQgdW51c2VkIGxvY2FsIHZhcmlhYmxlcy4KCShjaGVja19wa2dfY2xhc3NfYWNjZXNzLCBkZWNsYXJlX2xvY2FsX3ZhcmlhYmxlcyk6IExpa2V3aXNlLgoJKHNvdXJjZV9zdGFydF9qYXZhX21ldGhvZCk6IFN1cHByZXNzZWQgdW51c2VkIGV4dGVybiB2YXJpYWJsZQoJZGVjbGFyYXRpb25zCgkoZXhwYW5kX3N0YXJ0X2phdmFfbWV0aG9kKTogU3VwcHJlc3NlZCB1bnVzZWQgZXh0ZXJuIGFuZCBsb2NhbAoJdmFyaWFibGUgZGVjbGFyYXRpb25zLgoJKGphdmFfY29tcGxldGVfZXhwYW5kX21ldGhvZHMpOiBMaWtld2lzZS4KCShqYXZhX2NvbXBsZXRlX2V4cGFuZF9tZXRob2QpOiBTdXBwcmVzc2VkIHVudXNlZCBsb2NhbCB2YXJpYWJsZXMuCgkobWFrZV9xdWFsaWZpZWRfbmFtZSk6IExpa2V3aXNlLgoJKHJlc29sdmVfcXVhbGlmaWVkX2V4cHJlc3Npb25fbmFtZSk6IEFkZGVkIGRlZmF1bHQ6IGluCglzd2l0Y2guIEZpeGVkIGxhbmdfcHJpbnRhYmxlX25hbWUgaW52b2NhdGlvbi4KCShjbGFzc19pbnN0YW5jZV9jcmVhdGlvbl9leHByZXNzaW9uKTogQWRkZWQgcGFyZW50aGVzaXMgYXJvdW5kCglleHByZXNzaW9ucy4KCShwYXRjaF9tZXRob2RfaW52b2NhdGlvbl9zdG10KTogRml4ZWQgbGFuZ19wcmludGFibGVfbmFtZSBhbmQKCXBhdGNoX2ludm9rZSBpbnZvY2F0aW9ucy4KCShjaGVja19mb3Jfc3RhdGljX21ldGhvZF9yZWZlcmVuY2UpOiBGaXhlZCBsYW5nX3ByaW50YWJsZV9uYW1lCglpbnZvY2F0aW9uLgoJKHBhdGNoX2ludm9rZSk6IFN1cHByZXNzZWQgdW51c2VkIGFyZ3VtZW50cyBhbmQgbG9jYWwgdmFyaWFibGVzLgoJKGxvb2t1cF9tZXRob2RfaW52b2tlKTogU3VwcHJlc3NlZCB1bnVzZWQgbG9jYWwgdmFyaWFibGVzLgoJKHF1YWxpZnlfYW1iaWd1b3VzX25hbWUpOiBBZGRlZCBkZWZhdWx0OiBpbiBzd2l0Y2guCgkoaWRlbnRpY2FsX3N1YnBhdGhfcCk6IEZ1bmN0aW9uIHJlbW92ZWQuCgkocGF0Y2hfYXNzaWdubWVudCk6IFN1cHByZXNzZWQgdW51c2VkIGxvY2FsIHZhcmlhYmxlcy4gU3VwcHJlc3NlZAoJdW5uZWNlc3NhcnkgaWYgc3RhdGVtZW50LiBGaXhlZCBsYW5nX3ByaW50YWJsZV9uYW1lIGludm9jYXRpb25zLgoJKHRyeV9idWlsdGluX2Fzc2lnbmNvbnYpOiBGaXhlZCBsYW5nX3ByaW50YWJsZV9uYW1lIGludm9jYXRpb25zLgoJKHZhbGlkX3JlZl9hc3NpZ25jb252X2Nhc3RfcCk6IFBhcmVudGhlc2lzIGFyb3VuZAoJZXhwcmVzc2lvbi4gU3VwcHJlc3NlZCB1bnVzZWQgbG9jYWwgdmFyaWFibGVzLgoJKGJ1aWxkX2Jpbm9wKTogU3VwcHJlc3NlZCB1bnVzZWQgbG9jYWwgdmFyaWFibGVzLiBmaXhlZAoJbGFuZ19wcmludGFibGVfbmFtZSBpbnZvY2F0aW9ucy4KCShzdHJpbmdfY29uc3RhbnRfY29uY2F0ZW5hdGlvbik6IFN1cHByZXNzZWQgdW51c2VkIGxvY2FsCgl2YXJpYWJsZXMuCgkocGF0Y2hfdW5hcnlvcCk6IEZpeGVkIGxhbmdfcHJpbnRhYmxlX25hbWUgaW52b2NhdGlvbi4KCShwYXRjaF9jYXN0KTogU3VwcHJlc3NlZCB1bm5lY2Vzc2FyeSBhcmd1bWVudC4gRml4ZWQKCWxhbmdfcHJpbnRhYmxlX25hbWUgaW52b2NhdGlvbi4KCShwYXRjaF9hcnJheV9yZWYpOiBGaXhlZCBsYW5nX3ByaW50YWJsZV9uYW1lIGludm9jYXRpb24uCgkocGF0Y2hfbmV3YXJyYXksIHBhdGNoX3JldHVybiwgcGF0Y2hfaWZfZWxzZV9zdGF0ZW1lbnQpOiBMaWtld2lzZS4KCShidWlsZF9sYWJlbGVkX2Jsb2NrKTogU3VwcHJlc3NlZCB1bnVzZWQgYXJndW1lbnQuCgkoZ2VuZXJhdGVfbGFiZWxlZF9ibG9jayk6IEZpeGVkIGJ1aWxkX2xhYmVsZWRfYmxvY2sgaW52b2NhdGlvbi4KCShidWlsZF9sb29wX2JvZHkpOiBTdXBwcmVzc2VkIHVudXNlZCBsb2NhbCB2YXJpYWJsZXMuCgkocGF0Y2hfbG9vcF9zdGF0ZW1lbnQpOiBMaWtld2lzZS4KCShwYXRjaF9leGl0KTogRml4ZWQgbGFuZ19wcmludGFibGVfbmFtZSBpbnZvY2F0aW9uLgoJKHBhdGNoX3N3aXRjaF9zdGF0ZW1lbnQpOiBMaWtld2lzZS4KCShjYXNlX2lkZW50aXR5KTogRmlyc3QgYXJndW1lbnQgbWFya2VkIHVudXNlZC4KCShwYXRjaF90cnlfc3RhdGVtZW50KTogRml4ZWQgbGFuZ19wcmludGFibGVfbmFtZSBpbnZvY2F0aW9ucy4KCShwYXRjaF9zeW5jaHJvbml6ZWRfc3RhdGVtZW50LCBwYXRjaF90aHJvd19zdGF0ZW1lbnQpOiBMaWtld2lzZS4KCShjaGVja190aHJvd25fZXhjZXB0aW9ucyk6IEZpeGVkIGNoZWNrX3Rocm93bl9leGNlcHRpb25zIGFuZAoJbGFuZ19wcmludGFibGVfbmFtZSBpbnZvY2F0aW9ucy4KCShjaGVja190aHJvd25fZXhjZXB0aW9uc19kbyk6IFN1cHByZXNzZWQgdW51c2VkIGFyZ3VtZW50LgoKMTk5OC0xMC0xNCAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgoKCSogamNmLXdyaXRlLmMgKHdyaXRlX2NsYXNzZmlsZSk6IEFkZCBvdXRwdXQgY2xhc3MgZmlsZSBhcyB0YXJnZXQuCgkqIGxhbmctb3B0aW9ucy5oOiBBZGRlZCAtTUQsIC1NTUQsIC1NLCBhbmQgLU1NLgoJKiBqY2YuaDogQWRkZWQgZGVjbGFyYXRpb25zIGZvciBkZXBlbmRlbmN5LXRyYWNraW5nIGZ1bmN0aW9ucy4KCSogbGFuZy1zcGVjcy5oOiBIYW5kbGUgLU0sIC1NTSwgTUQsIGFuZCAtTU1ELgoJKiBsYW5nLmMgKGxhbmdfZGVjb2RlX29wdGlvbik6IFJlY29nbml6ZSAtTUQgYW5kIC1NTUQuCgkoZmluaXNoX3BhcnNlKTogQ2FsbCBqY2ZfZGVwZW5kZW5jeV93cml0ZS4KCShkZXBlbmRlbmN5X3RyYWNraW5nKTogTmV3IGdsb2JhbC4KCShERVBFTkRfU0VUX0ZJTEUpOiBOZXcgZGVmaW5lLgoJKERFUEVORF9FTkFCTEUpOiBOZXcgZGVmaW5lLgoJKGluaXRfcGFyc2UpOiBFbmFibGUgZGVwZW5kZW5jeSB0cmFja2luZyBpZiByZXF1aXJlZC4KCUluY2x1ZGUgImZsYWdzLmgiLgoJKiBNYWtlZmlsZS5pbiAoSkFWQV9PQkpTKTogQWRkZWQgamNmLWRlcGVuZC5vLgoJKC4uL2pjZi1kdW1wJChleGVleHQpKTogRGVwZW5kIG9uIGFuZCBsaW5rIHdpdGggamNmLWRlcGVuZC5vLgoJKC4uL2djamgkKGV4ZWV4dCkpOiBMaWtld2lzZS4KCShqY2YtZGVwZW5kLm8pOiBOZXcgdGFyZ2V0LgoJKiBNYWtlLWxhbmcuaW4gKEpBVkFfU1JDUyk6IEFkZGVkIGpjZi1kZXBlbmQuYy4KCShHQ0pIX1NPVVJDRVMpOiBMaWtld2lzZS4KCSogamNmLWlvLmMgKG9wZW5fY2xhc3MpOiBDYWxsIGpjZl9kZXBlbmRlbmN5X2FkZF9maWxlLiAgQWRkZWQKCWRlcF9uYW1lIGFyZ3VtZW50LgoJKGZpbmRfY2xhc3NmaWxlKTogQWRkZWQgZGVwX25hbWUgYXJndW1lbnQuCgkoZmluZF9jbGFzcyk6IENvbXB1dGUgbmFtZSBvZiBkZXBlbmRlbmN5LgoJKG9wZW5faW5femlwKTogQ2FsbCBqY2ZfZGVwZW5kZW5jeV9hZGRfZmlsZS4KCSogZ2phdmFoLmMgKG91dHB1dF9maWxlKTogTm8gbG9uZ2VyIGdsb2JhbC4KCSh1c2FnZSk6IERvbid0IG1lbnRpb24gImdqYXZhaCIuCgkoaGVscCk6IExpa2V3aXNlLgoJKGphdmFfbm9fYXJndW1lbnQpOiBMaWtld2lzZS4KCSh2ZXJzaW9uKTogTGlrZXdpc2UuCgkobWFpbik6IFJlY29nbml6ZSBhbmQgaGFuZGxlIC1NIGZhbWlseSBvZiBvcHRpb25zLgoJKHByaW50X21hbmdsZWRfY2xhc3NuYW1lKTogUmV0dXJuIGlzIHZvaWQuCgkocHJvY2Vzc19maWxlKTogSGFuZGxlIGNhc2Ugd2hlcmUgb3V0cHV0IGlzIHN1cHByZXNzZWQuCgkoSEFORExFX0VORF9GSUVMRCk6IExpa2V3aXNlLgoJKEhBTkRMRV9NRVRIT0QpOiBMaWtld2lzZS4KCSogamNmLWRlcGVuZC5jOiBOZXcgZmlsZS4KClR1ZSBPY3QgMTMgMjM6MzQ6MTIgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogamF2YS10cmVlLmRlZjogQWRkIG1pc3NpbmcgbmV3bGluZSBhdCBFT0YuCgoxOTk4LTEwLTEzICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CgoJKiBqY2YtZHVtcC5jIChwcm9jZXNzX2NsYXNzKTogVXNlIEZBVEFMX0VYSVRfQ09ERSwgbm90IC0xLgoJKG1haW4pOiBMaWtld2lzZS4gIEV4aXQgd2l0aCBTVUNDRVNTX0VYSVRfQ09ERSBhdCBlbmQgb2YKCWZ1bmN0aW9uLgoJSW5jbHVkZSA8Y29uZmlnLmg+IGFuZCAic3lzdGVtLmgiLgoJKGRpc2Fzc2VtYmxlX21ldGhvZCk6IFVuZGVmaW5lIFJFVCB0byBhdm9pZCBjbGFzaCB3aXRoCgljb25maWcvaTM4Ni9pMzg2LmguCgpUdWUgT2N0IDEzIDAzOjUwOjI4IDE5OTggIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogZGVjbC5jIChydW50aW1lX2V4Y2VwdGlvbl90eXBlX25vZGUsIGVycm9yX2V4Y2VwdGlvbl90eXBlX25vZGUpOgoJTmV3IGdsb2JhbCB2YXJpYWJsZXMuCgkoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBJbml0aWFsaXplZC4KCSogZXhwci5jIChqYXZhX2xhbmdfZXhwYW5kX2V4cHIpOiBTZXQgY2F1Z2h0IGV4Y2VwdGlvbiB0eXBlIHRvCgludWxsIGlmIGNhdGNoIGhhbmRsZXIgYXJndW1lbnQgZG9lc24ndCBleGl0LgoJKiBqYXZhLXRyZWUuZGVmIChTWU5DSFJPTklaRURfRVhQUiwgVEhST1dfRVhQUik6IE5ldyBKYXZhIHNwZWNpZmljCgl0cmVlIGNvZGVzLgoJKiBqYXZhLXRyZWUuaCAocnVudGltZV9leGNlcHRpb25fdHlwZV9ub2RlLAoJZXJyb3JfZXhjZXB0aW9uX3R5cGVfbm9kZSk6IEdsb2JhbCB2YXJpYWJsZXMgZGVjbGFyZWQuCgkoREVDTF9GVU5DVElPTl9USFJPV1MpOiBOZXcgbWFjcm8uCgkoREVDTF9GVU5DVElPTl9CT0RZKTogTW9kaWZpZWQgY29tbWVudC4KCShERUNMX1NQRUNJRklDX0NPVU5UKTogTGlrZXdpc2UuCgkoc3RydWN0IGxhbmdfZGVjbCk6IE5ldyBmaWVsZCB0aHJvd3NfbGlzdC4KCShJU19VTkNIRUNLRURfRVhQUkVTU0lPTl9QKTogTmV3IG1hY3JvLgoJKiBsZXguYyAoamF2YV9sZXgpOiBHZW5lcmF0ZSBsb2NhdGlvbiBpbmZvcm1hdGlvbiBmb3IgVEhST1dfVEsuCgkqIHBhcnNlLmggKFBVU0hfRVhDRVBUSU9OUywgUE9QX0VYQ0VQVElPTlMsIElOX1RSWV9CTE9DS19QLAoJRVhDRVBUSU9OU19QKTogTmV3IG1hY3Jvcy4KCShlbnVtIGpkZXBfY29kZSk6IE5ldyB2YWx1ZSBKREVQX0VYQ0VQVElPTi4KCShCVUlMRF9NT05JVE9SX0VOVEVSLCBCVUlMRF9NT05JVE9SX0VYSVQsCglCVUlMRF9BU1NJR05fRVhDRVBUSU9OX0lORk8sIEJVSUxEX1RIUk9XLCBTRVRfV0ZMX09QRVJBVE9SLAoJUEFUQ0hfTUVUSE9EX1JFVFVSTl9FUlJPUik6IE5ldyBtYWNyb3MuCgkocGF0Y2hfbWV0aG9kX2ludm9jYXRpb25fc3RtdCk6IEFkZGVkIG5ldyBhcmd1bWVudCB0byBwcm90b3R5cGUuCgkocGF0Y2hfc3luY2hyb25pemVkX3N0YXRlbWVudCwgcGF0Y2hfdGhyb3dfc3RhdGVtZW50LAoJY2hlY2tfdGhyb3duX2V4Y2VwdGlvbnMsIGNoZWNrX3Rocm93bl9leGNlcHRpb25zX2RvLAoJcHVyZ2VfdW5jaGVja2VkX2V4Y2VwdGlvbnMsIGNoZWNrX3Rocm93c19jbGF1c2VzKTogTmV3IGZ1bmN0aW9uCglwcm90b3R5cGVzLgoJKiBwYXJzZS55IEZpeGVkIHR5cG8gaW4ga2V5d29yZCBzZWN0aW9uLgoJKHRocm93Oik6IFJ1bGUgdGFnZ2VkIDxub2RlPi4KCShUSFJPV19USyk6IEtleXdvcmQgdGFnZ2VkIDxvcGVyYXRvcj4uCgkobWV0aG9kX2hlYWRlcjopOiBMYXN0IGFyZ3VtZW50IHRvIGNhbGwgdG8gbWV0aG9kX2hlYWRlciBwYXNzZWQKCWZyb20gdGhyb3dzOiBydWxlLgoJKHRocm93czosIGNsYXNzX3R5cGVfbGlzdDosIHRocm93X3N0YXRlbWVudDosCglzeW5jaHJvbml6ZWRfc3RhdGVtZW50Oiwgc3luY2hyb25pemVkOik6IERlZmluZWQgYWN0aW9ucy4KCShtZXRob2RfaGVhZGVyKTogTmV3IGxvY2FsIHZhcmlhYmxlIGN1cnJlbnQuIFJlZ2lzdGVyIGV4Y2VwdGlvbnMKCWZyb20gdGhyb3dzIGNsYXVzZS4KCShqYXZhX2NvbXBsZXRlX3RyZWUpOiBDb21wbGV0ZSBhbmQgdmVyaWZ5IGV4Y2VwdGlvbnMgZnJvbSB0aHJvd3MKCWNsYXVzZS4KCShjb21wbGV0ZV9jbGFzc19yZXBvcnRfZXJyb3JzKTogRXJyb3IgbWVzc2FnZSBvbiBleGNlcHRpb25zIG5vdAoJZm91bmQKCShqYXZhX2NoZWNrX3JlZ3VsYXJfbWV0aG9kcyk6IEZpeGVkIHR5cG8uIFNob3J0Y3V0IG9uIHByaXZhdGUKCW92ZXJyaWRpbmcgbWV0aG9kcy4gQ2hhbmdlZCBlcnJvciBtZXNzYWdlIG9uIG1ldGhvZAoJcmVkZWZpbml0aW9uLiBDaGVjayBmb3IgdGhyb3dzIGNsYXVzZSBjb21wYXRpYmlsaXR5LgoJKGNoZWNrX3Rocm93c19jbGF1c2VzKTogTmV3IGZ1bmN0aW9uLgoJKGphdmFfY2hlY2tfYWJzdHJhY3RfbWV0aG9kcyk6IFVzZSBERUNMX05BTUUgZm9yIHdmbCBvciBjdXJyZW50CgltZXRob2QuIENoYW5nZWQgZXJyb3IgbWVzc2FnZSBvbiBtZXRob2QgcmVkZWZpbml0aW9uLgoJKGN1cnJlbnRseV9jYXVnaHRfdHlwZV9saXN0KTogTmV3IHN0YXRpYyB2YXJpYWJsZS4KCShqYXZhX2NvbXBsZXRlX2V4cGFuZF9tZXRob2RzKTogUHVyZ2UgdW5jaGVja2VkIGV4Y2VwdGlvbnMgZnJvbQoJdGhyb3dzIGNsYXVzZSBsaXN0LiBDYWxsIFBVU0hfRVhDRVBUSU9OUyBiZWZvcmUgd2FsayBhbmQKCVBPUF9FWENFUFRJT05TIGFmdGVyLgoJKHJlc29sdmVfcXVhbGlmaWVkX2V4cHJlc3Npb25fbmFtZSk6IFBhc3MgbmV3IGFyZ3VtZW50IGFzIE5VTEwgdG8KCXBhdGNoX21ldGhvZF9pbnZvY2F0aW9uX3N0bXQuCgkocGF0Y2hfbWV0aG9kX2ludm9jYXRpb25fc3RtdCk6IE5ldyBhcmd1bWVudCByZWZfZGVjbC4gSW52b2tlCglQQVRDSF9NRVRIT0RfUkVUVVJOX0VSUk9SIHdoZW4gcmV0dXJuaW5nIHdpdGggZXJyb3IuIFJldmVyc2UKCWFyZ3VtZW50IGxpc3Qgd2hlbiBhcHByb3ByaWF0ZS4gVXNlIG5ldyBhcmd1bWVudCBpZiBub24gbnVsbCB0bwoJc3RvcmUgc2VsZWN0ZWQgbWV0aG9kIGRlY2wuCgkocGF0Y2hfaW52b2tlKTogQ29udmVydCBpZiBuZWNlc3NhcnkgYXJncyBvZiBidWlsdGluIHR5cGVzIGJlZm9yZQoJZm9ybWluZyBDQUxMX0VYUFIuIEFyZ3VtZW50IGxpc3Qgbm8gbG9uZ2VyIHJldmVyc2VkIGhlcmUuCgkoaW52b2NhdGlvbl9tb2RlKTogVHJlYXQgZmluYWwgbWV0aG9kcyBhcyBzdGF0aWMgbWV0aG9kcy4KCShqYXZhX2NvbXBsZXRlX3RyZWUpOiBOZXcgY2FzZXMgZm9yIFRIUk9XX0VYUFI6IGFuZAoJU1lOQ0hST05JWkVEX0VYUFI6LiBDaGVjayB0aHJvd24gZXhjZXB0aW9ucyB3aGVuIGNvbXBsZXRpbmcKCWZ1bmN0aW9uIGNhbGwuCgkoY29tcGxldGVfZnVuY3Rpb25fYXJndW1lbnRzKTogTm8gbW9yZSBSRUNPUkRfVFlQRQoJY29udmVyc2lvbi4gRnVuY3Rpb24gcGFyYW1ldGVyIG5vZGVzIG5vIGxvbmdlciBzYXZlZC4KCSh2YWxpZF9yZWZfYXNzaWduY29udl9jYXN0X3ApOiBBdm9pZCBoYW5kbGluZyBudWxsIHR5cGUuCgkocGF0Y2hfYmlub3ApOiBGaXhlZCBudWxsIGNvbnN0YW50IHJlZmVyZW5jZSBoYW5kbGluZy4KCShidWlsZF90cnlfc3RhdGVtZW50KTogVXNlIEJVSUxEX0FTU0lHTl9FWENFUFRJT05fSU5GTyBhbmQKCUJVSUxEX1RIUk9XIG1hY3Jvcy4KCShwYXRjaF90cnlfc3RhdGVtZW50KTogRml4ZWQgY29tbWVudHMuIFJlY29yZCBjYXVnaHQgdHlwZXMgaW4KCWxpc3QsIHB1c2ggdGhlIGxpc3QsIGV4cGFuZCB0cnkgYmxvY2sgYW5kIHBvcCB0aGUgbGlzdC4KCShwYXRjaF9zeW5jaHJvbml6ZWRfc3RhdGVtZW50LCBwYXRjaF90aHJvd19zdGF0ZW1lbnQsCgljaGVja190aHJvd25fZXhjZXB0aW9ucywgY2hlY2tfdGhyb3duX2V4Y2VwdGlvbnNfZG8sCglwdXJnZV91bmNoZWNrZWRfZXhjZXB0aW9ucyk6IE5ldyBmdW5jdGlvbnMuCgkqIHR5cGVjay5jIChsb29rdXBfYXJndW1lbnRfbWV0aG9kKTogQWxsb3cgV0ZMIGluIHBsYWNlIG9mIG1ldGhvZAoJREVDTF9OQU1FIGR1cmluZyBtZXRob2QgZGVmaW5pdGlvbiBjaGVjawoKMTk5OC0xMC0wOSAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgoKCSogZ2phdmFoLmMgKGRlY29kZV9zaWduYXR1cmVfcGllY2UpOiBOZXcgZnVuY3Rpb24uCgkocHJpbnRfY19kZWNsKTogVXNlIGl0LiAgQWRkZWQgYG5hbWVfb3ZlcnJpZGUnIGFyZ3VtZW50LgoJKHByaW50X21ldGhvZF9pbmZvKTogVXNlIG5hbWVfb3ZlcnJpZGUgYXJndW1lbnQgdG8gcHJpbnRfY19kZWNsLgoJKHNlZW5fZmllbGRzKTogUmVtb3ZlZC4KCShwcmludF9maWVsZF9pbmZvKTogRG9uJ3QgdXBkYXRlIHNlZW5fZmllbGRzLgoJKHN0cnVjdCBtZXRob2RfbmFtZSk6IE5ldyBzdHJ1Y3R1cmUuCgkobWV0aG9kX25hbWVfbGlzdCk6IE5ldyBnbG9iYWwuCgkocHJpbnRfbWV0aG9kX2luZm8pOiBBZGQgbmV3IG1ldGhvZCB0byBsaXN0IG9mIG1ldGhvZHMuCgkobmFtZV9pc19tZXRob2RfcCk6IE5ldyBmdW5jdGlvbi4KCShwcmludF9maWVsZF9pbmZvKTogSWYgZmllbGQgbmFtZSBoYXMgc2FtZSBuYW1lIGFzIG1ldGhvZCwgdGhlbgoJY2hhbmdlIGZpZWxkIG5hbWUuCgkocHJvY2Vzc19maWxlKTogUGFyc2UgbWV0aG9kcyBiZWZvcmUgZmllbGRzLgoJKGZpZWxkX3Bhc3MpOiBOZXcgZ2xvYmFsLgoJKEhBTkRMRV9FTkRfRklFTEQpOiBUYWtlIGZpZWxkX3Bhc3MgaW50byBhY2NvdW50LgoKV2VkIE9jdCAgNyAxMjoxMDo0OCAxOTk4ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBNYWtlZmlsZS5pbiAoa2V5d29yZC5oKTogQWRkIC1MIEtSLUMgLUYgJywgMCcgZmxhZ3MgdG8gZ3BlcmYuCgkoa2V5d29yZC5oKTogUmVnZW5lcmF0ZSB1c2luZyBncGVyZiAyLjcuMSAoMTk5ODEwMDYgZWdjcykuCgpTYXQgT2N0ICAzIDEzOjI5OjQ2IDE5OTggIEFudGhvbnkgR3JlZW4gIDxncmVlbkBjeWdudXMuY29tPgoKCSoganZzcGVjLmM6IEZpeCBidWcgaW4ganZnZW5tYWluX3NwZWMgcGF0Y2guCgpGcmkgT2N0ICAyIDE3OjIyOjUyIDE5OTggIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogTWFrZWZpbGUuaW4gKGxhbmcubzopOiBJbnN0YWxsIGRlcGVuZGVuY3kgb24gamF2YS10cmVlLmRlZi4KCSogZGVjbC5jIChzb2Z0X2V4Y2VwdGlvbmluZm9fY2FsbF9ub2RlKTogTmV3IGdsb2JhbCB2YXJpYWJsZS4KCShpbml0X2RlY2xfcHJvY2Vzc2luZyk6IEZpeGVkIGluZGVudGF0aW9uLiBzb2Z0X2JhZGFycmF5aW5kZXhfbm9kZQoJdGFrZXMgZXh0cmEgaW50ZWdlciBhcmd1bWVudC4gc29mdF9leGNlcHRpb25pbmZvX2NhbGxfbm9kZQoJaW5pdGlhbGl6ZWQuCgkqIGV4Y2VwdC5jIChqYXZhX3NldF9leGNlcHRpb25fbGFuZ19jb2RlKTogTmV3IGZ1bmN0aW9uCgkobWV0aG9kX2luaXRfZXhjZXB0aW9ucyk6IENhbGxlZCBoZXJlLgoJKHByZXBhcmVfZWhfdGFibGVfdHlwZSk6IE5ldyBmdW5jdGlvbi4KCShleHBhbmRfZW5kX2phdmFfaGFuZGxlcik6IENhbGxlZCBoZXJlLgoJKiBleHByLmMgKGJ1aWxkX2phdmFfdGhyb3dfb3V0X29mX2JvdW5kc19leGNlcHRpb24pOiBOb3cgZmVhdHVyZXMKCW9uZSBhcmd1bWVudC4gTW9kaWZpZWQgZ2VuZXJhdGlvbiBvZiBjYWxsIHRvCglzb2Z0X2JhZGFycmF5aW5kZXhfbm9kZSB0byB1c2UgbmV3IGFyZ3VtZW50LgoJKGJ1aWxkX2phdmFfYXJyYXlhY2Nlc3MpOiBQYXNzIGZhdWx0eSBpbmRleCB2YWx1ZSB0bwoJYnVpbGRfamF2YV90aHJvd19vdXRfb2ZfYm91bmRzX2V4Y2VwdGlvbi4KCShnZW5lcmF0ZV9uYW1lKTogTmV3IGZ1bmN0aW9uLgoJKGphdmFfbGFuZ19leHBhbmRfZXhwcik6IE5ldyBsb2NhbCB2YXJpYWJsZXMgbm9kZSwgY3VycmVudCwKCWhhc19maW5hbGx5X3AuIEV4cGFuZCBUUllfRVhQUiBub2RlLgoJKHByb2Nlc3NfanZtX2luc3RydWN0aW9uKTogUmVwbGFjZSB0b3Agb2YgdGhlIHN0YWNrIHdpdGggdGhyb3duCglvYmplY3QgcmVmZXJlbmNlIHdoZW4gZW50ZXJpbmcgZXhjZXB0aW9uIGhhbmRsZXIuCgkqIGphdmEtdHJlZS5kZWYgKFRSWV9FWFBSLCBDQVRDSF9FWFBSLCBGSU5BTExZX0VYUFIpOiBOZXcgSmF2YQoJc3BlY2lmaWMgdHJlZSBjb2Rlcy4KCSogamF2YS10cmVlLmggKHNvZnRfZXhjZXB0aW9uaW5mb19jYWxsX25vZGUpOiBEZWNsYXJhdGlvbiBvZiBuZXcKCWdsb2JhbC4KCShERUNMX1NQRUNJRklDX0NPVU5UKTogTmV3IG1hY3JvLgoJKHByZXBhcmVfZWhfdGFibGVfdHlwZSwgamF2YV9zZXRfZXhjZXB0aW9uX2xhbmdfY29kZSwKCWdlbmVyYXRlX25hbWUpOiBOZXcgZnVuY3Rpb24gZGVjbGFyYXRpb25zLgoJKG1hdGNoX2phdmFfbWV0aG9kKTogRGVjbGFyYXRpb24gZGVsZXRlZC4KCShGSU5BTExZX0VYUFJfTEFCRUwsIEZJTkFMTFlfRVhQUl9CTE9DSywgQ0FUQ0hfRVhQUl9HRVRfRVhQUik6IE5ldwoJbWFjcm9zLgoJKiBsZXguYyAoVFJZX1RLLCBDQVRDSF9USyk6IEdlbmVyYXRlIGxvY2F0aW9uIGluZm9ybWF0aW9uLgoJKiBwYXJzZS5oIChyZWRlZmluaXRpb25fZXJyb3IsIHJlZmluZV9hY2Nlc3NpYmxlX21ldGhvZHNfbGlzdCwKCWNhbl9jYXN0X3RvX3ApOiBGdW5jdGlvbiBkZWNsYXJhdGlvbiByZW1vdmVkLgoJKGNsYXNzaXRmX3JlZGVmaW5pdGlvbl9lcnJvciwgdmFyaWFibGVfcmVkZWZpbml0aW9uX2Vycm9yLAoJcGFyc2VfamRrMV8xX2Vycm9yLCBmaW5kX2FwcGxpY2FibGVfYWNjZXNzaWJsZV9tZXRob2RzX2xpc3QsCglmaW5kX21vc3Rfc3BlY2lmaWNfbWV0aG9kc19saXN0LCBhcmd1bWVudF90eXBlc19jb252ZXJ0aWJsZSwKCWVudGVyX2FfYmxvY2ssIHZhbGlkX2J1aWx0aW5fYXNzaWduY29udl9pZGVudGl0eV93aWRlbmluZ19wLAoJdmFsaWRfY2FzdF90b19wLCB2YWxpZF9tZXRob2RfaW52b2NhdGlvbl9jb252ZXJzaW9uX3AsCgl0cnlfcmVmZXJlbmNlX2Fzc2lnbmNvbnYsIGFkZF9zdG10X3RvX2NvbXBvdW5kLAoJYnVpbGRfanVtcF90b19maW5hbGx5LCBidWlsZF90cmVlX2xpc3QsIHBhdGNoX3RyeV9zdGF0ZW1lbnQsCglqYXZhX2dldF9jYXRjaF9ibG9jayk6IE5ldyBmdW5jdGlvbiBkZWNsYXJhdGlvbnMuCgkqIHBhcnNlLnkgKHN0cmluZ19idWZmZXJfdHlwZSk6IEdsb2JhbCB2YXJpYWJsZSBkZWxldGVkLgoJKGdyb3VwX29mX2xhYmVscywgY2F0Y2hlcywgY2F0Y2hfY2xhdXNlLCBjYXRjaF9jbGF1c2VfcGFyYW1ldGVyLAoJZmluYWxseSk6IFJ1bGVzIHRhZ2dlZCA8bm9kZT4uCgkoVFJZX1RLLCBDQVRDSF9USyk6IFRva2VuIHRhZ2dlZCA8b3BlcmF0b3I+LgoJKGNsYXNzX2JvZHlfZGVjbGFyYXRpb246LCBjbGFzc19tZW1iZXJfZGVjbGFyYXRpb246LAoJZm9ybWFsX3BhcmFtZXRlcjosIGV4cGxpY2l0X2NvbnN0cnVjdG9yX2ludm9jYXRpb246LAoJaW50ZXJmYWNlX21lbWJlcl9kZWNsYXJhdGlvbjosIGNvbnN0YW50X2RlY2xhcmF0aW9uOiwKCXByaW1hcnlfbm9fbmV3X2FycmF5OiwgY2xhc3NfaW5zdGFuY2VfY3JlYXRpb25fZXhwcmVzc2lvbjosCglhcnJheV9jcmVhdGlvbl9leHByZXNzaW9uOik6IElzc3VlIGVycm9yIG9uIHVuc3Vwb3J0ZWQgSkRLMS4xCglmZWF0dXJlcy4KCSh0cnlfc3RhdGVtZW50OiwgY2F0Y2hlczosIGZpbmFsbHk6KTogRGVmaW5lIGFjdGlvbnMuCgkoY2F0Y2hfY2xhdXNlX3BhcmFtZXRlcik6IE5ldyBydWxlLgoJKGNhdGNoX2NsYXVzZTopOiBVc2UgbmV3IHJ1bGUgY2F0Y2hfY2xhdXNlX3BhcmFtZXRlci4KCShwYXJzZV9qZGsxXzFfZXJyb3IpOiBOZXcgZnVuY3Rpb24uCgkocmVkZWZpbml0aW9uX2Vycm9yKTogUmVuYW1lZCBjbGFzc2l0Zl9yZWRlZmluaXRpb25fZXJyb3IuCgkodmFyaWFibGVfcmVkZWZpbml0aW9uX2Vycm9yKTogTmV3IGZ1bmN0aW9uLgoJKGNoZWNrX2NsYXNzX2ludGVyZmFjZV9jcmVhdGlvbik6IENhbGwKCWNsYXNzaXRmX3JlZGVmaW5pdGlvbl9lcnJvci4KCShqYXZhX2NvbXBsZXRlX3RyZWUpOiBBZGRlZCBlcnJvciBtZXNzYWdlIG9uIEpERVBfVFlQRTogY2FzZS4KCShjb21wbGV0ZV9jbGFzc19yZXBvcnRfZXJyb3JzKTogRml4ZWQgaW5kZW50YXRpb24uCgkoZGVjbGFyZV9sb2NhbF92YXJpYWJsZXMpOiBDYWxsIHZhcmlhYmxlX3JlZGVmaW5pdGlvbl9lcnJvci4KCShzb3VyY2VfZW5kX2phdmFfbWV0aG9kKTogQ2FsbCBqYXZhX3NldF9leGNlcHRpb25fbGFuZ19jb2RlIGFuZAoJZW1pdF9oYW5kbGVycyB3aGVyZSBhcHByb3ByaWF0ZS4KCShqYXZhX21ldGhvZF9hZGRfc3RtdCk6IENhbGwgYWRkX3N0bXRfdG9fYmxvY2suCgkoYWRkX3N0bXRfdG9fYmxvY2spOiBOZXcgZnVuY3Rpb24uCgkobG9va3VwX21ldGhvZF9pbnZva2UpOiBGaXhlZCBvdXRzaWRlIGNvbW1lbnQuIG5ldyBsb2NhbCB2YXJpYWJsZQoJY2FuZGljYXRlcy4gIENhbGwgZmluZF9hcHBsaWNhYmxlX2FjY2Vzc2libGVfbWV0aG9kc19saXN0IGFuZAoJZmluZF9tb3N0X3NwZWNpZmljX21ldGhvZHNfbGlzdCB3aGVuIHNlYXJjaGluZyBmb3IgYQoJbWV0aG9kLiBNb2RpZmllZCBlcnJvciByZXBvcnQgdG8gbGlzdCBwb3NzaWJsZSBjYW5kaWRhdGVzIHdoZW4KCWFwcGxpY2FibGUuCgkoZmluZF9hcHBsaWNhYmxlX2FjY2Vzc2libGVfbWV0aG9kc19saXN0LAoJZmluZF9tb3N0X3NwZWNpZmljX21ldGhvZHNfbGlzdCwgYXJndW1lbnRfdHlwZXNfY29udmVydGlibGUpOiBOZXcKCWZ1bmN0aW9uLgoJKHJlZmluZV9hY2Nlc3NpYmxlX21ldGhvZHNfbGlzdCk6IEZ1bmN0aW9uIGRlbGV0ZWQuCgkoamF2YV9jb21wbGV0ZV90cmVlKTogSGFuZGxlIFRSWV9FWFBSLiBBUlJBWV9SRUYgaGFuZGxpbmc6IHNhdmUKCWV4cHIgKGlmIGFwcGxpY2FibGUpIGJlZm9yZSBjYWxsaW5nIHBhdGNoX2FycmF5X3JlZi4KCShidWlsZF9leHByX2Jsb2NrKTogRml4ZWQgQkxPQ0tfRVhQUl9CT0RZIGFzc2lnbm1lbnQuCgkoZW50ZXJfYmxvY2spOiBGaXhlZCBjb21tZW50LgoJKGVudGVyX2FfYmxvY2spOiBOZXcgZnVuY3Rpb24uCgkocGF0Y2hfYXNzaWdubWVudCk6IFJlb3JnYW5pemVkLiBDYWxsIHRyeV9yZWZlcmVuY2VfYXNzaWduY29udiBmb3IKCXJlZmVyZW5jZXMuIENhbGwgdmFsaWRfY2FzdF90b19wIGluc3RlYWQgb2YgY2FuX2Nhc3RfdG9fcC4KCSh0cnlfcmVmZXJlbmNlX2Fzc2lnbmNvbnYsCgl2YWxpZF9idWlsdGluX2Fzc2lnbmNvbnZfaWRlbnRpdHlfd2lkZW5pbmdfcCk6IE5ldyBmdW5jdGlvbnMuCgkodmFsaWRfcmVmX2Fzc2lnbmNvbnZfY2FzdF9wKTogRml4ZWQgaW52ZXJ0ZWQgdGVzdCBvbiBDTEFTU19GSU5BTC4KCSh2YWxpZF9jYXN0X3RvX3AsIHZhbGlkX21ldGhvZF9pbnZvY2F0aW9uX2NvbnZlcnNpb25fcCk6IE5ldwoJZnVuY3Rpb25zLgoJKGJ1aWxkX3N0cmluZ19jb25jYXRlbmF0aW9uKTogRG9uJ3QgcmVzb2x2ZSBTdHJpbmdCdWZmZXIuCgkocGF0Y2hfY2FzdCk6IEZpeGVkIGludmVydGVkIGFyZ3VtZW50cy4KCShwYXRjaF9hcnJheV9yZWYpOiBDb2RlIHRvIHNhdmUgYXJyYXkgZXhwciBkZWxldGVkLiBDYWxsCgl2YWxpZF9jYXN0X3RvX3AgaW5zdGVhZCBvZiBjYW5fY2FzdF90b19wLgoJKGdlbmVyYXRlX2xhYmVsZWRfYmxvY2spOiBDYWxsIGdlbmVyYXRlX25hbWUuCgkoYnVpbGRfanVtcF90b19maW5hbGx5LCBidWlsZF90cnlfc3RhdGVtZW50LCBqYXZhX2dldF9jYXRjaF9ibG9jaywKCXBhdGNoX3RyeV9zdGF0ZW1lbnQpOiBOZXcgZnVuY3Rpb25zLgoJKiB0eXBlY2suYyAobWF0Y2hfamF2YV9tZXRob2QpOiBGdW5jdGlvbiBkZWxldGVkLgoKRnJpIE9jdCAgMiAxMzo0ODozNiAxOTk4ICBBbnRob255IEdyZWVuICA8Z3JlZW5AY3lnbnVzLmNvbT4KCgkqIGp2c3BlYy5jOiBqdmdlbm1haW5fc3BlYyB1c2VzIGRpZmZlcmVudCB0ZW1wb3JhcnkgZmlsZSBuYW1lcy4KCkZyaSBPY3QgIDIgMTI6NTA6MTkgMTk5OCAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQGN5Z251cy5jb20+CgoJKiBqdnNwZWMuYyAobGFuZ19zcGVjaWZpY19kcml2ZXIpOiBGYWlsIGlmIHVzZXIgc3BlY2lmaWVzCgktLW1haW49IHdoZW4gbm90IGxpbmtpbmcuCgpNb24gU2VwIDI4IDEzOjQ4OjMzIDE5OTggIFRvbSBUcm9tZXkgIDx0cm9tZXlAY3lnbnVzLmNvbT4KCgkqIGNsYXNzLmMgKG1ha2VfY2xhc3NfZGF0YSk6IFB1c2ggdmFsdWUgZm9yIGB0aHJlYWQnIGZpZWxkLgoJKiBkZWNsLmMgKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogQWRkZWQgYHRocmVhZCcgZmllbGQgdG8gY2xhc3MuCgoJKiBjbGFzcy5jIChhZGRfZmllbGQpOiBBbHdheXMgbWFrZSBzdGF0aWMgZmllbGRzIGV4dGVybmFsbHkKCXZpc2libGUuCgpTYXQgU2VwIDI2IDA4OjIyOjQ3IDE5OTggIEFudGhvbnkgR3JlZW4gIDxncmVlbkBjeWdudXMuY29tPgoKCSogZXhwci5jIChidWlsZF9qYXZhX2F0aHJvdywKCWJ1aWxkX2phdmFfdGhyb3dfb3V0X29mX2JvdW5kc19leGNlcHRpb24sIGV4cGFuZF9pbnZva2UsCglidWlsZF9uZXdhcnJheSwgZXhwYW5kX2phdmFfbXVsdGlhbmV3YXJyYXksIGJ1aWxkX2phdmFfbW9uaXRvcik6CglVcGRhdGUgY29tbWVudHMgdG8gcmVmbGVjdCBfSnZfKiBmdW5jdGlvbiBuYW1lcy4KCkZyaSBTZXAgMjUgMTY6MDM6MDIgMTk5OCAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGN5Z251cy5jb20+CgoJKiBkZWNsLmMgKGNvbXBsZXRlX3N0YXJ0X2phdmFfbWV0aG9kKTogIERFQ0xfUkVTVUxUIGlzIGFsd2F5cyBwcm9tb3RlZC4KCSogZGVjbC5jIChzdGFydF9qYXZhX21ldGhvZCk6ICBIYW5kbGUgUFJPTU9URV9QUk9UT1RZUEVTIHRhcmdldCBtYWNyby4KCSogcGFyc2UueSAoZXhwYW5kX3N0YXJ0X2phdmFfbWV0aG9kKTogIExpa2V3aXNlLgoKVGh1IFNlcCAyNCAxMjoyMDozNSAxOTk4ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAY3lnbnVzLmNvbT4KCgkqIGV4cHIuYyAocG9wX2FyZ3VtZW50cyk6ICBIYW5kbGUgUFJPTU9URV9QUk9UT1RZUEVTIHRhcmdldCBtYWNyby4KCgkqIGNsYXNzLmMgKHB1c2hfY2xhc3MpOiAgSURFTlRJRklFUl9TSUdOQVRVUkVfVFlQRSBpcyBub3cgUE9JTlRFUl9UWVBFLgoJKGFkZF9maWVsZCk6ICBObyBsb25nZXIgbmVlZCB0byBjb252ZXJ0IGZyb20gUkVDT1JEX1RZUEUgdG8gcG9pbnRlciwKCSogZXhwci5jOiAgUmVtb3ZlIG5vLWxvbmdlci1uZWVkZWQgY2FsbHMgdG8gcHJvbW90ZV90eXBlLgoJKiBkZWNsLmMgKGdpdmVfbmFtZV90b19sb2NhbHMpOiAgTGlla3dpc2UuCgkqIGpjZi1wYXJzZS5jIChnZXRfY2xhc3NfY29uc3RhbnQpOiAgQ29tcGVuc2F0ZSBmb3IgbmV3IHNpZ25hdHVyZXMuCgkqIHBhcnNlLnk6ICBBZGQvcmVtb3ZlIHByb21vdGVfdHlwZSBjYWxscyBhcyBhcHByb3ByaWF0ZS4KCSogdHlwZWNrLmMgKHBhcnNlX3NpZ25hdHVyZV90eXBlKTogIFJldHVybnMgUE9JTlRFUl9UWVBFIGZvciBvYmplY3RzLgoJKHBhcnNlX3NpZ25hdHVyZV9zdHJpbmcpOiAgTGlrZXdpc2UuCgkoYnVpbGRfamF2YV9hcnJheV90eXBlKTogIEZpeCBmb3Igbm93IHNpZ25hdHVyZSBjb252ZW5pb25zLgoKCSogbGV4LmMgKGphdmFfbGV4KTogIEZpeCAoZnJvbSBBbGV4KSBmb3IgSkMxX0xJVEUgcHJvYmxlbS4KCldlZCBTZXAgMjMgMTQ6NDk6MzUgMTk5OCAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgoKCSogY2xhc3MuYyAoaW5pdF9jbGFzc19wcm9jZXNzaW5nKTogbGliamF2YSBmdW5jdGlvbiByZW5hbWVkIHRvCglfSnZfUmVnaXN0ZXJDbGFzcy4KClR1ZSBTZXAgMjIgMTI6MDA6MDIgMTk5OCAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBleHByLmMgKGphdmFfbGFuZ19leHBhbmRfZXhwcik6IE5ldyBjYXNlIGZvciBTV0lUQ0hfRVhQUi4KCSogamF2YS10cmVlLmRlZjogRml4ZWQgREVGVFJFRUNPREUgdGhpcmQgYXJndW1lbnQuCgkoVU5BUllfUExVU19FWFBSLCBORVdfQVJSQVlfRVhQUiwgTkVXX0NMQVNTX0VYUFIsIFRISVNfRVhQUiwKCUNBU0VfRVhQUiwgREVGQVVMVF9FWFBSKTogTmV3IHRyZWUgY29kZXMgZm9yIEphdmEuCgkqIGphdmEtdHJlZS5oOiAoSVNfQ1JBRlRFRF9TVFJJTkdfQlVGRkVSX1ApOiBOZXcgbWFjcm8uCgkoSkFWQV9VTkFSWV9QTFVTX0VYUFIsIEpBVkFfTkVXX0FSUkFZX0VYUFIsIEpBVkFfTkVXX0NMQVNTX0VYUFIsCglKQVZBX1RISVNfRVhQUik6IE5vdyByZXBsYWNlZCBieSB0cmVlIGNvZGUgZGVmaW5pdGlvbnMuCgkoQ0FMTF9DT05TVFJVQ1RPUl9QKTogTm93IHVzZXMgTkVXX0NMQVNTX0VYUFIuCgkqIGxhbmcuYyAoamF2YV90cmVlX2NvZGVfdHlwZSwgamF2YV90cmVlX2NvZGVfbGVuZ3RoLAoJamF2YV90cmVlX2NvZGVfbmFtZSk6IE5ldyBhcnJheXMuCgkobGFuZ19pbml0KTogQXBwZW5kIEphdmEgdHJlZSBub2RlIGRlZmluaXRpb25zIHRvIEdjYyBvbmVzLgoJKiBsZXguYyAoZXhwcmVzc2lvbl9vYnN0YWNrKTogRGVjbGFyZWQgYXMgZXh0ZXJuIHdoZW4gSkMxX0xJVEUKCWRlZmluZWQuCgkoamF2YV9pbml0X2xleCk6IEluaXRpYWxpemUgd2ZsX2FwcGVuZCwgd2ZsX3N0cmluZ19idWZmZXIsCgl3ZmxfdG9fc3RyaW5nLgoJKGphdmFfbGV4KTogQWxsb3cgZGVjbGFyYXRpb24gb2YgZW1wdHkgc3RyaW5nIGNvbnN0YW50cy4gUmV0YWluCglsb2NhdGlvbiBpbmZvcm1hdGlvbiBvbiBDQVNFX1RLIGFuZCBERUZBVUxUX1RLLgoJKiBwYXJzZS5oIChKRkxPQVRfVFlQRV9QLCBKSU5URUdSQUxfVFlQRV9QLCBKTlVNRVJJQ19UWVBFX1AsCglKUFJJTUlUSVZFX1RZUEVfUCwgSlNUUklOR19UWVBFX1AsIEpTVFJJTkdfUCwgSlJFRkVSRU5DRV9UWVBFX1ApOgoJTW9kaWZpZWQgdG8gYmUgbW9yZSByb2J1c3QuCgkoQlVJTERfQVBQRU5ELCBCVUlMRF9TVFJJTkdfQlVGRkVSKTogTmV3IG1hY3Jvcy4KCShidWlsZF9uZXdfaW52b2NhdGlvbiwgdHJ5X2J1aWx0aW5fYXNzaWduY29udiwKCXBhdGNoX3N3aXRjaF9zdGF0ZW1lbnQsIHN0cmluZ19jb25zdGFudF9jb25jYXRlbmF0aW9uLAoJYnVpbGRfc3RyaW5nX2NvbmNhdGVuYXRpb24sIHBhdGNoX3N0cmluZ19jc3QsIHBhdGNoX3N0cmluZywKCWphdmFfZXhwYW5kX3N3aXRjaCk6IE5ldyBmdW5jdGlvbiBkZWNsYXJhdGlvbnMuCgkqIHBhcnNlLnk6IFJ1bGVzIHJlbGF0ZWQgdG8gc3dpdGNoIGFuZCBFSCB0YWdnZWQgPG5vZGU+LgoJKGxhYmVsX2lkKTogU2V0IHRvIE5VTExfVFJFRQoJKHdmbF9zdHJpbmdfYnVmZmVyLCB3ZmxfYXBwZW5kLCB3ZmxfdG9fc3RyaW5nKTogTmV3IHN0YXRpYyBnbG9iYWwKCXRyZWUgbm9kZXMuCgkodGhpc19vcl9zdXBlcjopOiBGaXhlZCBpbmRlbnRhdGlvbi4KCShzdGF0ZW1lbnQ6LCBzdGF0ZW1lbnRfbnNpOiwgc3RhdGVtZW50X3dpdGhvdXRfdHJhaWxpbmdfc3Vic3RhdGVtZW50OiwKCXN0YXRlbWVudF9leHByZXNzaW9uOik6IFJlbW92ZWQgY2FsbCB0byBSVUxFIG9uIGFsbCBzdWItcnVsZXMuCgkoc3dpdGNoX2V4cHJlc3Npb246LCBzd2l0Y2hfbGFiZWxzOik6IE5ldyBydWxlcy4KCShzd2l0Y2hfc3RhdGVtZW50Oiwgc3dpdGNoX2Jsb2NrOiwgc3dpdGNoX2Jsb2NrX3N0YXRlbWVudF9ncm91cHM6LAoJc3dpdGNoX2Jsb2NrX3N0YXRlbWVudF9ncm91cDosIHN3aXRjaF9sYWJlbHM6LCBzd2l0Y2hfbGFiZWw6KToKCURlZmluZWQgYWN0aW9ucy4KCSh0aHJvd19zdGF0ZW1lbnQ6LCBzeW5jaHJvbml6ZWRfc3RhdGVtZW50OiwgdHJ5X3N0YXRlbWVudDopOgoJRGVmaW5lZCB0ZW1wb3JhcnkgYWN0aW9ucy4KCShjbGFzc19pbnN0YW5jZV9jcmVhdGlvbl9leHByZXNzaW9uOik6IENhbGwKCWJ1aWxkX25ld19pbnZvY2F0aW9uLiBGaXhlZCBpbmRlbnRhdGlvbi4KCShmaWVsZF9hY2Nlc3MpOiBGaXhlZCBpbmRlbnRhdGlvbi4KCShtZXRob2RfaW52b2NhdGlvbik6IExpa2V3aXNlLgoJKG1ha2VfcXVhbGlmaWVkX3ByaW1hcnkpOiBVc2UgVEhJU19FWFBSLgoJKHJlc29sdmVfcXVhbGlmaWVkX2V4cHJlc3Npb25fbmFtZSk6IFVzZSBORVdfQ0xBU1NfRVhQUi4gV2hlbgoJcmVzb2x2aW5nIGZyb20gU1VQRVIsIHNldCAqdHlwZV9mb3VuZC4KCShxdWFsaWZ5X2FtYmlndW91c19uYW1lKTogVXNlIE5FV19DTEFTU19FWFBSLgoJKGphdmFfY29tcGxldGVfdHJlZSk6IFJlbW92ZWQgdW51c2VkIGxvY2FsIHZhcmlhYmxlIGBsb2NhdGlvbicuIENhc2UKCWZvciBTV0lUQ0hfRVhQUiwgc2hhcmluZyBjb2RlIHdpdGggTE9PUF9FWFBSLiBVc2UgTkVXX0FSUkFZX0VYUFIsCglORVdfQ0xBU1NfRVhQUiwgVU5BUllfUExVU19FWFBSIGFuZCBUSElTX0VYUFIuIE5ldyBzdHJpbmcgaGFuZGxpbmcKCW9uIE1PRElGWV9FWFBSOiBhbmQgYWxsIGJpbmFyeSBvcGVyYXRvciB0cmVlIGNvZGUgY2FzZXMuIFJlbW92ZWQKCVNUUklOR19DU1Q6IGNhc2UuIGRlZmF1bHQ6IGNoZWNrcyBmb3IgcGF0Y2hhYmxlIHN0cmluZ3MuCgkoY29tcGxldGVfZnVuY3Rpb25fYXJndW1lbnRzKTogVHJhbnNmb3JtIHN0cmluZyBjb25zdGFudCBvcgoJY3JhZnRlZCBTdHJpbmdCdWZmZXIgaWYgbmVjZXNzYXJ5LgoJKGJ1aWxkX21ldGhvZF9pbnZvY2F0aW9uKTogRml4ZWQgY29tbWVudHMuCgkoYnVpbGRfbmV3X2ludm9jYXRpb24pOiBOZXcgZnVuY3Rpb24uCgkocGF0Y2hfYXNzaWdubWVudCk6IENhbGwgdHJ5X2J1aWx0aW5fYXNzaWduY29udiB0byBmaWd1cmUgYSB2YWxpZAoJYXNzaWdubWVudCBjb252ZXJzaW9uIGJldHdlZW4gYnVpbHRpbiB0eXBlcy4KCSh0cnlfYnVpbHRpbl9hc3NpZ25jb252KTogTmV3IGZ1bmN0aW9uLgoJKGJ1aWxkX2Jpbm9wKTogVXNlIFVSU0hJRlRfRVhQUiBkaXJlY3RseSB0byBjYWxsIGJ1aWxkLgoJKG9wZXJhdG9yX3N0cmluZyk6IFVzZSBVTkFSWV9QTFVTX0VYUFIuCgkocGF0Y2hfYmlub3ApOiBVc2UgVU5BUllfUExVU19FWFBSLiBIYW5kbGUgc3RyaW5nIGNvbmNhdGVuYXRpb24KCW9wZXJhdG9yLgoJKGRvX21lcmdlX3N0cmluZ19jc3RlLCBtZXJnZV9zdHJpbmdfY3N0ZSwKCXN0cmluZ19jb25zdGFudF9jb25jYXRlbmF0aW9uLCBidWlsZF9zdHJpbmdfY29uY2F0ZW5hdGlvbiwKCXBhdGNoX3N0cmluZywgcGF0Y2hfc3RyaW5nX2NzdCk6IE5ldyBmdW5jdGlvbi4KCShidWlsZF91bmFyeV9vcCk6IFVzZSBVTkFSWV9QTFVTX0VYUFIgYW5kIENPTlZFUlRfRVhQUi4KCShwYXRjaF91bmFyeW9wKTogTGlrZXdpc2UuIE5ldyB0ZXN0IG9mIHZhbGlkICsrLy0tIG9wZXJhbmRzLgoJKGJ1aWxkX25ld2FycmF5X25vZGUpOiBVc2UgTkVXX0FSUkFZX0VYUFIuCgkoYnVpbGRfdGhpcyk6IFVzZSBUSElTX0VYUFIuCgkoYnVpbGRfcmV0dXJuKTogRW5hYmxlIGRlYnVnIGluZm9ybWF0aW9uIG9uIHJldHVybiBzdGF0ZW1lbnQuCgkoYnVpbGRfaWZfZWxzZV9zdGF0ZW1lbnQpOiBMaWtld2lzZS4KCShjb21wbGV0ZV9sYWJlbGVkX3N0YXRlbWVudCk6IEZpeGVkIHJlbGF0ZWQgY29tbWVudC4KCShidWlsZF9sb29wX2JvZHkpOiBGaXhlZCBjb21tZW50LgoJKGJ1aWxkX2JjX3N0YXRlbWVudCk6IEVuYWJsZSBkZWJ1ZyBpbmZvcm1hdGlvbiBvbiBicmVhay9jb250aW51ZQoJc3RhdGVtZW50cy4KCShwYXRjaF9iY19zdGF0ZW1lbnQpOiBGaXhlZCB0eXBvcy4gSGFuZGxlIFNXSVRDSCBzdGF0ZW1lbnQKCWNvbnRleHQuCgkocGF0Y2hfc3dpdGNoX3N0YXRlbWVudCwgY2FzZV9pZGVudGl0eSwgamF2YV9leHBhbmRfc3dpdGNoKTogTmV3CglmdW5jdGlvbnMuCgpNb24gU2VwIDIxIDEzOjIxOjM1IDE5OTggIFBlciBCb3RobmVyICA8Ym90aG5lckBjeWdudXMuY29tPgoKCSogYnVmZmVyLmggKEJVRkZFUl9JTklUKTogIE5ldyBtYWNyby4KCSogamNmLXdyaXRlLmMgKHN0cnVjdCBqY2ZfcGFydGlhbCk6ICBOZXcgdHlwZS4gIFB1dCBnbG9iYWwgc3R1ZmYgaGVyZS4KCVBhc3MgKHN0cnVjdCBqY2ZfcGFydGlhbCAqc3RhdGUpIHRvIG1vc3QgZnVuY3Rpb25zLgoJKGpjZl9ibG9jaywgamNmX3JlbG9jYXRpb24pOiAgTmV3IHR5cGVzLgoJU3VwcG9ydCBsYWJlbHMsIGJyYW5jaGVzLCBjb25kaXRpb25hbHMsIGxvb3BzLgoKTW9uIFNlcCAyMSAxNTowODo0OCAxOTk4ICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CgoJKiBkZWNsLmMgKElOVF9UWVBFX1NJWkUpOiBEZWZpbmUgYXMgQklUU19QRVJfV09SRCBpZiBub3QgZGVmaW5lZC4KCk1vbiBTZXAgMjEgMTM6MjE6MzUgMTk5OCAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGN5Z251cy5jb20+CgoJKiBkZWNsLmMgKGludGVnZXJfdHlwZV9ub2RlKTogIE1ha2UgaXQgaGF2ZSBJTlRfVFlQRV9TSVpFLgoJKiB2ZXJpZnkuYyAodmVyaWZ5X2p2bV9pbnN0cnVjdGlvbnMpOiAgVXNlIGludF90eXBlX25vdCAoMzIgYml0cyksCglub3QgaW50ZWdlcl90eXBlX25vZGUgKElOVF9UWVBFX1NJWiBiaXRzKS4KCgkqIHBhcnNlLnkgKHBhdGNoX2lmX2Vsc2Vfc3RhdGVtZW50KTogIEFjY2VwdCBwcm9tb3RlZF9ib29sZWFuX3R5cGVfbm9kZS4KCgkqIGpjZi1yZWFkZXIuYyAoZ2V0X2F0dHJpYnV0ZSk6ICBOZXcgSEFORExFX0VYQ0VQVElPTl9UQUJMRSBob29rLgoJKiBqY2YtZHVtcC5jIChwcmludF9leGNlcHRpb25fdGFibGUpOiAgTmV3IGZ1bmN0aW9uLgoJKGRpc2Fzc2VtYmxlX21ldGhvZCk6ICBCZXR0ZXIgaGFuZGxpbmcgb2Ygd2lkZSBpbnN0cnVjdGlvbnMuCglNYWtlIG1vcmUgcm9idXN0IGZvciBiYWQgaW5wdXQuCgpXZWQgU2VwIDMwIDIwOjUzOjUxIDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGpjZi13cml0ZS5jIChPUDIsIE9QNCk6IFVzZSAiX2kiLCBub3QgIl9JIiB0byBhdm9pZCBwcm9ibGVtcyBvbgoJRnJlZUJTRC4KClRodSBTZXAgMTcgMTk6NDU6MDEgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogTWFrZWZpbGUuaW4gKGpjZi1kdW1wLCBqdmdlbm1haW4pOiBMaW5rIGluIG1lbW1vdmUubyB0b28uCgpUaHUgU2VwIDE3IDE2OjIxOjUyIDE5OTggIFRvbSBUcm9tZXkgIDx0cm9tZXlAY3lnbnVzLmNvbT4KCgkqIE1ha2VmaWxlLmluICgkKFBBUlNFX0gpKTogUmVtb3ZlZCB0YXJnZXQuCgpUaHUgU2VwIDE3IDAxOjU3OjA3IDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIE1ha2VmaWxlLmluIChKQVZBX09CSlMpOiBBZGQgbWVtbW92ZS5vCgkobWVtbW92ZS5vKTogTmV3IHRhcmdldCAmIHJ1bGVzLgoKVHVlIFNlcCAxNSAyMzoyMTo1NSAxOTk4ICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CgoJKiBleHByLmMgKGV4cGFuZF9pbnZva2UpOiBEb24ndCBnZW5lcmF0ZSBhIGNhbGwgdG8gdGhlIGNsYXNzIGluaXQKCWNvZGUuCgpNb24gU2VwIDE0IDEwOjE0OjQ3IDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIE1ha2VmaWxlLmluOiBBZGQgbWFueSBtaXNzaW5nIGRlcGVuZGVuY2llcy4KCSogYnVmZmVyLmMsIGNsYXNzLmMsIGNvbnN0YW50cy5jLCBkZWNsLmM6IFVzZSBzeXN0ZW0uaCBhbmQgdG9wbGV2LmgKCWFzIGFwcHJvcHJpYXRlLgoJKiBleGNlcHQuYywgZXhwci5jLCBqY2YtaW8uYyBqY2YtcGFyc2UuYywgamNmLXdyaXRlLmM6IExpa2V3aXNlLgoJKiBqdmdlbm1haW4uYyBsYW5nLmMgbWFuZ2xlLmMgdHlwZWNrLmMgdmVyaWZ5LmM6IExpa2V3aXNlLgoKRnJpIFNlcCAxMSAxNDowNToyMSAxOTk4ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAoY29tcGxldGVfc3RhcnRfamF2YV9tZXRob2QpOiAgSWYgbWV0aG9kIGlzIHN0YXRpYyAoYW5kCglub3QgcHJpdmF0ZSkgY2FsbCBfSnZfSW5pdENsYXNzLgoJKiBleHByLmMgKGV4cGFuZF9pbnZva2UpOiAgRG9uJ3QgY2FsbCBidWlsZF9jbGFzc19pbml0LgoKCSoganZzcGVjLmMgKGp2Z2VubWFpbl9zcGVjKTogIEZpeCBzcGVjIGZvciBnZW5lcmF0ZWQgLm8gZmlsZS4KClRodSBTZXAgMTAgMTA6MzM6MzEgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogTWFrZS1sYW5nLmluIChHQ0opOiBEZWZpbmUgYmVmb3JlIHVzaW5nLgoKV2VkIFNlcCAgOSAyMToyMzoxMCAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBnamF2YWguYyAoamF2YV9ub19hcmd1bWVudCk6IFJlbmFtZWQgZnJvbSBub19hcmd1bWVudCB0byBhdm9pZAoJbG9zaW5nIGR1ZSB0byBuYW1lc3BhY2UgcG9sbHV0aW9uIGluIEdOVSBnZXRvcHQuaAoKV2VkIFNlcCAgOSAxMzozMzozOSAxOTk4ICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CgoJKiBNYWtlLWxhbmcuaW4gKGphdmEuYWxsLmJ1aWxkKTogRG9uJ3QgbWVudGlvbiBqdmdlbm1haW4gb3IgZ2NqaC4KCShqYXZhLmFsbC5jcm9zcyk6IExpa2V3aXNlLgoJKGphdmEucmVzdC5lbmNhcCk6IExpa2V3aXNlLgoKVHVlIFNlcCAgOCAxMDozNDowNSAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBnamF2YWguYyAocHJpbnRfY2xhc3NfZGVjbHMpOiBGaXggdGhpbmtvIGluIGFyZ2xpc3QKCSogamN2LWlvLmMgKGZpbmRfY2xhc3NmaWxlKTogU2ltaWxhcmx5LgoKTW9uIFNlcCAgNyAxMzo1OTo0OSAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBNYWtlZmlsZS5pbiAoSU5DTFVERVMpOiBVcGRhdGUgZm9yIHJlY2VudCB0b3BsZXZlbCBnY2MgY2hhbmdlcy4KClNhdCBTZXAgIDUgMTY6MDg6MDEgMTk5OCAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgoKCSogTWFrZS1sYW5nLmluIChqYXZhLm1haW50YWluZXItY2xlYW4pOiBEb24ndCByZW1vdmUgcGFyc2UuaC4KCShqYXZhLm1vc3RseWNsZWFuKTogUmVtb3ZlIHBhcnNlLmMgYW5kIHBhcnNlLXNjYW4uYywgbm90IHBhcnNlLmguCgkqIE1ha2VmaWxlLmluIChQQVJTRV9DKTogTmV3IG1hY3JvLgoJKFBBUlNFX0gpOiBMaWtld2lzZS4KCShQQVJTRV9TQ0FOX0MpOiBMaWtld2lzZS4KCSgkKFBBUlNFX0MpKTogVGFyZ2V0IHJlbmFtZWQgZnJvbSBwYXJzZS5jLgoJKCQoUEFSU0VfU0NBTl9DKSk6IFRhcmdldCByZW5hbWVkIGZyb20gcGFyc2Utc2Nhbi5jLgoJKGNsZWFuKTogUmVtb3ZlIHBhcnNlLXNjYW4uYyBhcyB3ZWxsLgoJKHBhcnNlLm8pOiBEZXBlbmQgb24gJChQQVJTRV9DKS4KClNhdCBTZXAgIDUgMDg6NDg6NDAgMTk5OCAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQGN5Z251cy5jb20+CgoJKiBSRUFETUUsIGxpY2Vuc2UudGVybXM6IFJlbW92ZWQuCgoJKiBNYWtlLWxhbmcuaW4sIE1ha2VmaWxlLmluLCBjbGFzcy5jLCBjb25maWctbGFuZy5pbiwgY29uc3RhbnRzLmMsCglkZWNsLmMsIGV4Y2VwdC5jLCBleHByLmMsIGdqYXZhaC5jLCBqYXZhLWV4Y2VwdC5oLCBqYXZhLXRyZWUuaCwKCWphdmFvcC5kZWYsIGphdmFvcC5oLCBqY2YtZHVtcC5jLCBqY2YtaW8uYywgamNmLXBhcnNlLmMsCglqY2YtcmVhZGVyLmMsIGpjZi13cml0ZS5jLCBqY2YuaCwganZnZW5tYWluLmMsIGp2c3BlYy5jLAoJa2V5d29yZC5ncGVyZiwga2V5d29yZC5oLCBsYW5nLW9wdGlvbnMuaCwgbGFuZy1zcGVjcy5oLCBsYW5nLmMsCglsZXguYywgbGV4LmgsIG1hbmdsZS5jLCBwYXJzZS1zY2FuLnksIHBhcnNlLmgsIHBhcnNlLnksIHR5cGVjay5jLAoJdmVyaWZ5LmMsIHpleHRyYWN0LmMsIHppcGZpbGUuaDogRml4ZWQgY29weXJpZ2h0IGFzc2lnbm1lbnQsCglhbmQgSmF2YSB0cmFkZW1hcmsgYXR0cmlidXRpb24uCgpGcmkgU2VwICA0IDEwOjQyOjA1IDE5OTggIFRvbSBUcm9tZXkgIDx0cm9tZXlAY3lnbnVzLmNvbT4KCgkqIE1ha2VmaWxlLmluOiBVc2UgZ2NqaCwgbm90IGdqYXZhaC4KCSogY29uZmlnLWxhbmcuaW4gKHN0YWdlc3R1ZmYpOiBVc2UgZ2NqaCwgbm90IGdqYXZhaC4KCSogTWFrZS1sYW5nLmluOiBDaGFuZ2VkIGdqYXZhaCB0byBnY2poIGV2ZXJ5d2hlcmUuCgpUaHUgU2VwICAzIDE4OjA0OjA5IDE5OTggIFBlciBCb3RobmVyICA8Ym90aG5lckBjeWdudXMuY29tPgoKCSogZ2phdmFoLmM6ICBTdXBwb3J0IG5ldyAtcHJlcGVuZCAtYWRkIC1hcHBlbmQgZmxhZ3MuCgkocHJpbnRfbWV0aG9kX2luZm8pOiAgTWV0aG9kIGlzIG5vdCB2aXJ0dWFsIGlmIGNsYXNzIGlzIGZpbmFsLgoKVGh1IFNlcCAgMyAxMjowMzo1MyAxOTk4ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIGp2LXNjYW4uYzogRml4ZWQgY29weXJpZ2h0IGFzc2lnbm1lbnQuCgkqIGtleXdvcmQuZ3BlcmY6IExpa2V3aXNlLgoJKiBrZXl3b3JkLmg6IExpa2V3aXNlLgoJKiBsZXguYzogRml4ZWQgY29weXJpZ2h0IGFzc2lnbm1lbnQuCgkoamF2YV9sZXgpOiBQdXNoIHVuaWNvZGUgYmFjayB3aGVuIHBhcnNpbmcgJzwnLgoJKiBsZXguaDogRml4ZWQgY29weXJpZ2h0IGFzc2lnbm1lbnQuCgkqIHBhcnNlLXNjYW4ueTogTGlrZXdpc2UuCgkqIHBhcnNlLmg6IEZpeGVkIGNvcHlyaWdodCBhc3NpZ25tZW50LgoJKGJ1aWxkX2RlYnVnYWJsZV9zdG10LCBjb21wbGV0ZV9mb3JfbG9vcCk6IE5ldyBmdW5jdGlvbiBwcm90b3R5cGVzLgoJKiBwYXJzZS55OiBGaXhlZCBjb3B5cmlnaHQgYXNzaWdubWVudC4KCShmb3Jfc3RhdGVtZW50Oik6IENhbGwgY29tcGxldGVfZm9yX2xvb3AuIFNldCBFWElUX0VYUFIgdG8gYmUKCXNpemVfemVyb19ub2RlIHdoZW4gY29tcGxldGluZyBhIGxvb3Agd2l0aCBubyBleGl0IGNvbmRpdGlvbi4KCShmb3Jfc3RhdGVtZW50X25zaTopOiBEZWZpbmUgYWN0aW9uLgoJKGZvcl9pbml0OiwgZm9yX3VwZGF0ZTopOiBSZXR1cm4gc2l6ZV96ZXJvX25vZGUgd2hlbiBlbXB0eS4KCShkZWNsYXJlX2xvY2FsX3ZhcmlhYmxlcyk6IENhbGwgYnVpbGRfZGVidWdhYmxlX3N0bXQuCgkoYnVpbGRfZGVidWdhYmxlX3N0bXQpOiBOZXcgZnVuY3Rpb24uCgkoYnVpbGRfbG9vcF9ib2R5KTogQnVpbGQgZGVidWdhYmxlIHN0YXRlbWVudCBhcm91bmQgbG9vcAoJY29uZGl0aW9uIHBhcnQuCgkoY29tcGxldGVfbG9vcF9ib2R5KTogVGFrZSBpbnRvIGFjY291bnQgdGhlIGRlYnVnYWJsZSBzdGF0ZW1lbnQKCWFyb3VuZCB0aGUgRVhJVF9FWFBSLgoJKGNvbXBsZXRlX2xvb3BfYm9keSk6IE5ldyBmdW5jdGlvbi4KCShwYXRjaF9leGl0X2V4cHIpOiBGaXhlZCBjb25kaXRpb24gaW52ZXJzaW9uLgoKV2VkIFNlcCAgMiAxMTo1Mzo1OCAxOTk4ICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CgoJKiBNYWtlLWxhbmcuaW4gKGp2c3BlYy5vKTogVXNlIEdDQ19USFJFQURfRklMRSB0byBjb21wdXRlIGNvcnJlY3QKCW5hbWUgb2YgdGhyZWFkIGRlZmluZS4KCSoganZzcGVjLmMgKFRIUkVBRF9OQU1FKTogTmV3IG1hY3JvLgoJKEdDTElCKTogTGlrZXdpc2UuCgkoVEhSRUFETElCKTogTGlrZXdpc2UuCgkobGFuZ19zcGVjaWZpY19kcml2ZXIpOiBSZWNvZ25pemUgYXR0ZW1wdCB0byBsaW5rIHdpdGggdGhyZWFkCglsaWJyYXJ5IG9yIGdjIGxpYnJhcnkuICBSZWNvZ25pemUgLWxqYXZhIG9uIGNvbW1hbmQgbGluZSBzbyBpdAoJaXNuJ3QgbGlua2VkIGFnYWluc3QgbW9yZSB0aGFuIG9uY2UuCgpXZWQgU2VwICAyIDExOjI4OjM1IDE5OTggIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogcGFyc2Utc2Nhbi55IChyZXBvcnRfbWFpbl9kZWNsYXJhdGlvbik6IE5hbWUgb2YgdGhlIGNsYXNzCgljb250YWluaW5nIGBtYWluJyBjYW4gYmUgYSBxdWFsaWZpZWQgbmFtZS4KCk1vbiBBdWcgMzEgMTM6MjU6NTggMTk5OCAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgoKCSogY29uZmlnLWxhbmcuaW46IENoYW5nZWQgZ2phdmFjIHRvIGdqYyBldmVyeXdoZXJlLgoJKiBNYWtlLWxhbmcuaW46IENoYW5nZWQgZ2phdmFjIHRvIGdqYyBldmVyeXdoZXJlLgoKVGh1IEF1ZyAyNyAwMjoyODoyNyAxOTk4ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIE1ha2UtbGFuZy5pbiAoSkFWQV9UQVJHRVRfSU5ERVBFTkRFTlRfQklOX1RPT0xTKTogTmV3IHZhcmlhYmxlLgoJKGphdmEuaW5zdGFsbC1jb21tb246KTogTG9vcCBvdmVyIEpBVkFfVEFSR0VUX0lOREVQRU5ERU5UX0JJTl9UT09MUwoJYW5kIGluc3RhbGwgdGhlIGZpbGVzLgoJKiBNYWtlZmlsZS5pbiAoSkFWQV9PQkpTX0xJVEUpOiBOZXcgdmFyaWFibGUuCgkoY29tcGlsZXI6KTogTm93IGluY2x1ZGUganYtc2NhbiBhcyBhIGRlcGVuZGVuY3kuCgkoLi4vanYtc2NhbiQoZXhlZXh0KSwgcGFyc2Utc2Nhbi5jKTogTmV3IHRhcmdldHMuCgkoLi4vamNmLWR1bXAkKGV4ZWV4dCkpOiBXYXMgamNmLWR1bXAkKGV4ZWV4dCkgYmVmb3JlLgoJKiBjb25maWctbGFuZy5pbiAoY29tcGlsZXJzKTogUmVtb3ZlZCBnY2osIGdqYXZhaCBmcm9tIHRoZSBsaXN0LgoJKiBqY2YtcGFyc2UuYyAocGFyc2Vfc291cmNlX2ZpbGUpOiBDYWxsIGphdmFfbGF5b3V0X2NsYXNzZXMgYW5kCgljaGVjayBmb3IgZXJyb3JzIGV2ZW4gaWYgcGFyc2Vfb25seS4KCSogbGV4LmMgKGphdmFfaW5pdF9sZXgpOiBSZW9yZ2FuaXplZCBhbmQgc2tpcCBwYXJ0cyBpZiBKQzFfTElURSBpcwoJZGVmaW5lZC4KCSh5eWxleCk6IE5ldyBmdW5jdGlvbi4gVXNlcyBqYXZhX2xleCBib2R5LgoJKGphdmFfbGV4KTogUmVtb3ZlZCBjb21tZW50ZWQgb3V0IHN0YXRlbWVudC4gUmVtb3ZlIGxvY2FsIHZhcmlhYmxlCglsaXRlcmFsLiBVc2UgU0VUX0xWQUxfTk9ERV9UWVBFIGFuZCBTRVRfTFZBTF9OT0RFIHdoZXJlCglhcHByb3ByaWF0ZS4gIFVzZSBtYWNyb3MgRkxPQVRfVFlQRV9OT0RFLCBET1VCTEVfVFlQRV9OT0RFLAoJRENPTlNUMCwgU0VUX0ZMT0FUX0hBTkRMRVIsIFNFVF9SRUFMX1ZBTFVFX0FUT0YsCglTRVRfTFZBTF9OT0RFX1RZUEUgYW5kIEdFVF9UWVBFX1BSRUNJU0lPTi4gRG9uJ3QgY3JlYXRlIFNUUklOR19DU1QKCWlmIEpDMV9MSVRFIGlzIGRlZmluZWQuIFVzZSBCVUlMRF9JRF9XRkwgdG8gYnVpbGQgaWRlbnRpZmllcnMuIFVzZQoJU0VUX01PRElGSUVSX0NUWCwgU0VUX0xWQUxfTk9ERSwgQlVJTERfSURfV0ZMIGFuZCBHRVRfSURFTlRJRklFUgoJd2hlcmUgYXBwcm9wcmlhdGUuCgkoamF2YV9sZXhfZXJyb3IpOiBFbXB0eSBpZiBKQzFfTElURSBpcyBkZWZpbmVkLgoJKGphdmFfZ2V0X2xpbmVfY29sKTogUmV0dXJuIDAgaWYgSkMxX0xJVEUgaXMgZGVmaW5lZC4KCSogbGV4LmggKEpBVkFfRkxPQVRfUkFOR0VfRVJST1IsIEpBVkFfSU5URUdSQUxfUkFOR0VfRVJST1IsCglTRVRfTU9ESUZJRVJfQ1RYKTogTW92ZWQgaW50byB0aGUgc2VjdGlvbiBjb250YWluaW5nIHRoZSBtYWNyb3MKCWNvbmRpdGlvbmFsbHkgZGVmaW5lZCBieSBKQzFfTElURS4KCShCVUlMRF9PUEVSQVRPUixCVUlMRF9PUEVSQVRPUjIpOiBKdXN0IHJldHVybiB0aGUgVE9LRU4KCWFyZ3VtZW50IGlmIEpDMV9MSVRFIGlzIGRlZmluZWQuCgkoSE9TVF9CSVRTX1BFUl9XSURFX0lOVCwgSE9TVF9XSURFX0lOVCwgUkVBTF9WQUxVRV9BVE9GLAoJUkVBTF9WQUxVRV9JU0lORiwgUkVBTF9WQUxVRV9JU05BTik6IFByZXNldCB0byB2YWx1ZXMgaWYgSkMxX0xJVEUKCWlzIGRlZmluZWQuCgkoRENPTlNUMCwgU0VUX0ZMT0FUX0hBTkRMRVIsIEdFVF9JREVOVElGSUVSLCBTRVRfUkVBTF9WQUxVRV9BVE9GLAoJRkxPQVRfVFlQRSwgRE9VQkxFX1RZUEUsIFNFVF9NT0RJRklFUl9DVFgsIEdFVF9UWVBFX1BSRUNJU0lPTiwKCVNFVF9MVkFMX05PREUsIFNFVF9MVkFMX05PREVfVFlQRSwgQlVJTERfSURfV0ZMKTogTmV3IG1hY3Jvcywgc2V0Cgl0byBkaWZmZXJlbnQgdmFsdWVzIGFjY29yZGluZyB0byBKQzFfTElURS4KCSogcGFyc2UuaCAoaW50X2ZpdHNfdHlwZV9wLCBzdGFiaWxpemVfcmVmZXJlbmNlKTogUHJvdG90eXBlIG5vdAoJZGVjbGFyZWQgaWYgSkMxX0xJVEUgc2V0LgoJKGpkZXBfY29kZSwgdHlwZWRlZiBzdHJ1Y3QgX2pkZXAsIHR5cGVkZWYgc3RydWN0IF9qZGVwbGlzdCk6IE5vdAoJZGVmaW5lZCBpZiBKQzFfTElURSBub3Qgc2V0LgoJKHN0cnVjdCBwYXJzZXJfY3R4KTogUmVvcmdhbml6ZWQgYW5kIHNraXAgdGhlIGpjMSBmcm9udCBlbmQgcGFydAoJaWYgSkMxX0xJVEUgc2V0LgoJKGphdmFfbGF5b3V0X2NsYXNzZXMpOiBOZXcgZnVuY3Rpb24gZGVmaW5pdGlvbi4KCShqYXZhX3B1c2hfcGFyc2VyX2NvbnRleHQsIGphdmFfaW5pdF9sZXgsIHl5cGFyc2UsIHl5bGV4LAoJeXllcnJvcik6IFByb3RvdHlwZSBhbHdheXMgZGVjbGFyZWQuIEFsbCBvdGhlciBzdGF0aWMgZnVuY3Rpb24KCXByb3RvdHlwZXMgZGVjbGFyZWQgb25seSBpZiBKQzFfTElURSBpcyBub3Qgc2V0LgoJKiBwYXJzZS55ICh5eXBhcnNlLCB5eWxleCwgeXllcnJvcik6IE5vIGxvbmdlciBkZWNsYXJlZCBoZXJlLiBOb3cKCWRlY2xhcmVkIGluIHBhcnNlLmguCgkoamF2YV9sYXlvdXRfY2xhc3Nlcyk6IE5ldyBmdW5jdGlvbi4KCShqYXZhX2NvbXBsZXRlX2V4cGFuZF9tZXRob2RzKTogTm8gbG9uZ2VyIGxheW91dCB0aGUgY2xhc3MgaGVyZS4KCSogcGFyc2Utc2Nhbi55OiBOZXcgZmlsZS4KCSoganYtc2Nhbi5jOiBOZXcgZmlsZS4KClR1ZSBBdWcgMjUgMTA6MTc6NTQgMTk5OCAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgoKCSogZ2phdmFoLmMgKG1haW4pOiBIYW5kbGUgLWZyaWVuZCBvcHRpb24uCgkoZnJpZW5kX3NwZWNzKTogTmV3IGdsb2JhbC4KCShnZW5lcmF0ZV9hY2Nlc3MpOiBIYW5kbGUgZnJpZW5kX3NwZWNzLgoJKHByb2Nlc3NfZmlsZSk6IExpa2V3aXNlLgoJKE1BWF9GUklFTkRTKTogTmV3IG1hY3JvLgoJKGZyaWVuZF9jb3VudCk6IE5ldyBnbG9iYWwuCgkocHJpbnRfY3h4X2NsYXNzbmFtZSk6IEFkZGVkIGBwcmVmaXgnIGFyZ3VtZW50LiAgSWdub3JlIGFycmF5cy4KCUNoYW5nZWQgYWxsIGNhbGxlcnMuCgpNb24gQXVnIDI0IDIwOjE5OjI3IDE5OTggIFBlciBCb3RobmVyICA8Ym90aG5lckBjeWdudXMuY29tPgoKCSogamNmLWR1bXAuYyAocHJvY2Vzc19jbGFzcyk6ICBNb3ZlIEpDRl9GSU5JU0ggdXNlIHRvIG1haW4sCgkobWFpbik6ICBIYW5kbGUgcHJvY2Vzc2luZyBhbGwgdGhlIGVudHJpZXMgb2YgYSBuYW1lZCAuemlwIGFyY2hpdmUuCgkqIGpjZi1pby5jIChqY2ZfdHJpbV9vbGRfaW5wdXQpOiAgTmV3IGZ1bmN0aW9uLgoJKiBqY2YuaCAoR0VUX3UyX2xlLEdFVF91NF9sZSxKQ0ZfcmVhZHUyX2xlLEpDRl9yZWFkdTRfbGUpOiAgTmV3IG1hY3Jvcy4KCk1vbiBBdWcgMjQgMDc6MzU6MTMgMTk5OCAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGN5Z251cy5jb20+CgoJKiBsYW5nLmMgKGZsYWdfYXNzdW1lX2NvbXBpbGVkKTogIE1ha2UgZGVmYXVsdCBiZSBvbi4KCkZyaSBBdWcgMjEgMTc6Mjk6MDQgMTk5OCAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGN5Z251cy5jb20+CgoJKiBqY2YtZHVtcC5jOiAgQWRkIGJ1bmNoZXMgb2YgZmxhZ3MgdG8gY29udHJvbCBvdXRwdXQgbW9yZS4KCShwcm9jZXNzX2NsYXNzKTogIE5ldyBmdW5jdGlvbjsgIHN1cHBvcnQgcHJpbnRpbmcgbW9yZSB0aGFuIG9uZSBjbGFzcy4KCShtYWluKTogU3VwcG9ydCBuZXcgLS1wcmludC1tYWluIGFuZCAtLWphdmFwIGZsYWdzLgoJKiBqY2YtcmVhZGVyLmMgKElHTk9SRV9BVFRSSUJVVEUpOiAgTmV3IGhvb2suCgkqIGpjZi5oIChDUE9PTF9JTkRFWF9JTl9SQU5HRSk6ICBOZXcgbWFjcm8uCgpUaHUgQXVnIDIwIDE0OjI0OjQ3IDE5OTggIFBlciBCb3RobmVyICA8Ym90aG5lckBjeWdudXMuY29tPgoKCUNoYW5nZSBtYW5nbGluZyBvZiBkaXNwYXRjaCB0YWJsZSB0byBtYXRjaCBDKysgdnRhYmxlICh3L3RodW5rcykuCgkqIGNsYXNzLmMgKGJ1aWxkX2R0YWJsZV9kZWNsKSwgamF2YS10cmVlLmg6ICBOZXcgZnVuY3Rpb24uCgkobWFrZV9jbGFzc19kYXRhKTogIENhbGwgaXQuCgkqIGRlY2wuYyAoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiAgTGlrZXdpc2UuCgpXZWQgQXVnIDE5IDE3OjU3OjA3IDE5OTggIFdhcnJlbiBMZXZ5ICA8d2FycmVubEBjeWdudXMuY29tPgoKCSogZGVjbC5jIChpbml0X2RlY2xfcHJvY2Vzc2luZyk6IFVzZSBfSnZfTmV3T2JqZWN0QXJyYXksIG5vdAoJc29mdF9hbmV3YXJyYXk7IGFkanVzdCBhcmdzIHBhc3NlZC4KCSogZXhwci5jIChidWlsZF9hbmV3YXJyYXkpOiBBZGp1c3QgYXJncyBmb3Igc29mdF9hbmV3YXJyYXlfbm9kZSB0bwoJbWF0Y2ggX0p2X05ld09iamVjdEFycmF5LgoKV2VkIEF1ZyAxOSAwOTozMzoyMyAxOTk4ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAocHVzaF9sYWJlbGVkX2Jsb2NrLCBwb3BfbGFiZWxlZF9ibG9jayk6IE5ldyBmdW5jdGlvbnMuCgkqIGV4cHIuYyAobG9vcHVwX2xhYmVsKTogQ2FsbCBjcmVhdGVfbGFiZWxfZGVjbC4KCShjcmVhdGVfbGFiZWxfZGVjbCk6IE5ldyBmdW5jdGlvbi4KCShqYXZhX2xhbmdfZXhwYW5kX2V4cHIpOiBDYWxsIGV4cGFuZF9zdGFydF9iaW5kaW5ncyB3aXRoIGFyZ3VtZW50CglzZXQgdG8gemVyby4KCSogamF2YS10cmVlLmggQWRkZWQgc3BhY2UgYWZ0ZXIgUFJPVE8gaW4gZnVuY3Rpb24gZGVjbGFyYXRpb25zCgl3aGVuIG5lY2Vzc2FyeS4KCShJU19GT1JfTE9PUF9QLCBJU19CUkVBS19TVE1UX1ApOiBOZXcgbWFjcm9zLgoJKGNyZWF0ZV9sYWJlbF9kZWNsLCBwdXNoX2xhYmVsZWRfYmxvY2spOiBOZXcgZnVuY3Rpb24KCWRlY2xhcmF0aW9ucy4KCSogbGV4LmMgKGxhYmVsX2lkKTogSW5pdGlhbGl6ZS4KCShTVVBFUl9USywgVEhJU19USywgUkVUVVJOX1RLKTogTWVyZ2VkIGNvbW1vbiBhY3Rpb25zIGluIGZpbmFsCglzd2l0Y2guCgkqIHBhcnNlLmggQWRkZWQgc3BhY2UgYWZ0ZXIgUFJPVE8gaW4gZnVuY3Rpb24gZGVjbGFyYXRpb25zIHdoZW4KCW5lY2Vzc2FyeS4KCShMT09QX0VYUFJfQk9EWV9NQUlOX0JMT0NLLCBMT09QX0VYUFJfQk9EWV9VUERBVEVfQkxPQ0ssCglMT09QX0VYUFJfQk9EWV9DT05ESVRJT05fRVhQUiwgTE9PUF9FWFBSX0JPRFlfTEFCRUxFRF9CT0RZLAoJTE9PUF9FWFBSX0JPRFlfQk9EWV9FWFBSLCBMT09QX0hBU19MQUJFTF9QLCBMT09QX0hBU19MQUJFTF9TS0lQX1AsCglQVVNIX0xBQkVMRURfQkxPQ0ssIFBPUF9MQUJFTEVEX0JMT0NLLCBQVVNIX0xPT1AsIFBPUF9MT09QKTogTmV3CgltYWNyb3MuCgkoc3RydWN0IHBhcnNlcl9jdHh0KTogTmV3IGZpZWxkcyBjdXJyZW50X2xvb3AsCgljdXJyZW50X2xhYmVsZWRfYmxvY2suCgkoYnVpbGRfaWZfZWxzZV9zdGF0ZW1lbnQsIHBhdGNoX2lmX2Vsc2Vfc3RhdGVtZW50LAoJYWRkX3N0bXRfdG9fY29tcG91bmQsIHBhdGNoX2V4aXRfZXhwciwgYnVpbGRfbGFiZWxlZF9ibG9jaywKCWdlbmVyYXRlX2xhYmVsZWRfYmxvY2ssIGNvbXBsZXRlX2xhYmVsZWRfc3RhdGVtZW50LAoJYnVpbGRfYmNfc3RhdGVtZW50LCBwYXRjaF9iY19zdGF0ZW1lbnQsIHBhdGNoX2xvb3Bfc3RhdGVtZW50LAoJYnVpbGRfbmV3X2xvb3AsIGJ1aWxkX2xvb3BfYm9keSwgY29tcGxldGVfbG9vcF9ib2R5KTogTmV3IGZ1bmN0aW9uCglkZWNsYXJhdGlvbnMuCgkqIHBhcnNlLnkgKGphdmFfd2FybmluZ19jb3VudCk6IE5ldyBnbG9iYWwgdmFyaWFibGUuCgkobGFiZWxfaWQpOiBOZXcgc3RhdGljIHZhcmlhYmxlLgoJKEJSRUFLX1RLLCBDT05USU5VRV9USyk6IFRva2VuIHRhZ2dlZCA8b3BlcmF0b3I+LgoJKGJsb2NrOik6IFJldHVybiBzaXplX3plcm9fbm9kZSB3aGVuIGJsb2NrIGlzIGVtcHR5LgoJKGVtcHR5X3N0YXRlbWVudDopOiBSZXR1cm4gc2l6ZV96ZXJvX25vZGUuCgkoc3RhdGVtZW50Oik6IEltcGxlbWVudCBzdXBwbGVtZW50YWwgYWN0aW9uIHdoZW4gZm9yX3N0YXRlbWVudDogaXMKCXJlZHVjZWQuCgkobGFiZWxfZGVjbDopOiBOZXcgcnVsZS4KCShsYWJlbGVkX3N0YXRlbWVudDopOiBSZXdyaXR0ZW4gdXNpbmcgbGFiZWxfZGVjbC4gQWN0aW9ucwoJaW1wbGVtZW50ZWQuCgkobGFiZWxlZF9zdGF0ZW1lbnRfbnNpOik6IExpa2V3aXNlLgoJKGlmX3RoZW5fc3RhdGVtZW50KTogQWN0aW9ucyBpbXBsZW1lbnRlZC4KCSh3aGlsZV9leHByZXNzaW9uKTogTmV3IHJ1bGUuCgkod2hpbGVfc3RhdGVtZW50Oik6IFJld3JpdHRlbiB1c2luZyB3aGlsZV9leHByZXNzaW9uLiBBY3Rpb25zCglpbXBsZW1lbnRlZC4KCSh3aGlsZV9zdGF0ZW1lbnRfbnNpOik6IExpa2V3aXNlLgoJKGRvX3N0YXRlbWVudF9iZWdpbjopOiBOZXcgcnVsZS4KCShkb19zdGF0ZW1lbnQ6KTogUmV3cml0dGVuIHVzaW5nIGRvX3N0YXRlbWVudF9iZWdpbi4gQWN0aW9ucwoJaW1wbGVtZW50ZWQuCgkoZm9yX3N0YXRlbWVudDopOiBSZXdyaXR0ZW4gdXNpbmcgZm9yX2JlZ2luLiBBY3Rpb25zIGltcGxlbWVudGVkLgoJKGZvcl9zdGF0ZW1lbnRfbnNpOik6IExpa2V3aXNlLgoJKGZvcl9oZWFkZXI6LCBmb3JfYmVnaW46KTogTmV3IHJ1bGVzLgoJKGZvcl9pbml0Oik6IEFjdGlvbnMgaW1wbGVtZW50ZWQuCgkoc3RhdGVtZW50X2V4cHJlc3Npb25fbGlzdDosIGJyZWFrX3N0YXRlbWVudDosCgljb250aW51ZV9zdGF0ZW1lbnQ6KTogTGlrZXdpc2UuCgkoeXllcnJvcik6IENvdW50IG51bWJlciBvZiBpc3N1ZWQgd2FybmluZyhzKS4KCShqYXZhX3JlcG9ydF9lcnJvcnMpOiBSZXBvcnQgZXJyb3IocykgYW5kL29yIHdhcm5pbmcocykuCgkoamF2YV9jb21wbGV0ZV9jbGFzcyk6IFVzZSBidWlsZF9qYXZhX2FyZ3VtZW50X3NpZ25hdHVyZSB0bwoJcmVjb21wdXRlIGNvbXBsZXRlZCBtZXRob2Qgc2lnbmF0dXJlLgoJKGphdmFfY2hlY2tfcmVndWxhcl9tZXRob2RzKTogTmV3IGxvY2FscyBtZXRob2Rfd2ZsIGFuZCBhZmxhZ3MuCglVc2UgbWV0aG9kX3dmbCBpbnN0ZWFkIG9mIGxvb2t1cF9jbCBkdXJpbmcgZXJyb3IgcmVwb3J0cy4gRml4ZWQKCWluZGVudGF0aW9uIGFuZCBtb2RpZmllZCBzb21lIGVycm9yIG1lc3NhZ2VzLiBVc2UKCWxhbmdfcHJpbnRhYmxlX25hbWUgaW4gbWV0aG9kIGluc3RlYWQgb2YgdGhlIERFQ0xfTkFNRS4gTmV3IGNvZGUKCXRvIGlzc3VlIHdhcm5pbmdzIG9uIG1ldGhvZHMgbm90IG92ZXJyaWRpbmcgY29ycmVzcG9uZGluZyBtZXRob2RzCglwcml2YXRlIHRvIGEgZGlmZmVyZW50IHBhY2thZ2UuCgkoamF2YV9tZXRob2RfYWRkX3N0bXQpOiBDYWxsIGFkZF9zdG10X3RvX2NvbXBvdW5kLgoJKGFkZF9zdG10X3RvX2NvbXBvdW5kKTogTmV3IGZ1bmN0aW9uLgoJKGphdmFfY29tcGxldGVfdHJlZSk6IEhhbmRsZSBMQUJFTEVEX0JMT0NLX0VYUFIsIEVYSVRfQkxPQ0tfRVhQUiwKCUxPT1BfRVhQUiwgRVhJVF9FWFBSIGFuZCBDT05EX0VYUFIuCgkoYnVpbGRfaWZfZWxzZV9zdGF0ZW1lbnQsIHBhdGNoX2lmX2Vsc2Vfc3RhdGVtZW50LAoJYnVpbGRfbGFiZWxlZF9ibG9jaywgZ2VuZXJhdGVfbGFiZWxlZF9ibG9jaywKCWNvbXBsZXRlX2xhYmVsZWRfc3RhdGVtZW50LCBidWlsZF9uZXdfbG9vcCwgYnVpbGRfbG9vcF9ib2R5LAoJY29tcGxldGVfbG9vcF9ib2R5LCBwYXRjaF9sb29wX3N0YXRlbWVudCwgYnVpbGRfYmNfc3RhdGVtZW50LAoJcGF0Y2hfYmNfc3RhdGVtZW50LCBwYXRjaF9leGl0X2V4cHIpOiBOZXcgZnVuY3Rpb25zLgoJKiB0eXBlY2suYyAoYnVpbGRfamF2YV9zaWduYXR1cmUpOiBCdWlsZCBhcmd1bWVudCBzaWduYXR1cmUgYmVmb3JlCgllbmNsb3NpbmcgaXQgaW4gYmV0d2VlbiBwYXJlbnRoZXNpcy4KCk1vbiBBdWcgMTcgMTc6NDQ6MjQgMTk5OCAgV2FycmVuIExldnkgIDx3YXJyZW5sQGN5Z251cy5jb20+CgoJKiBNYWtlLWxhbmcuaW4gKEpBVkFfU1JDUyk6IENyZWF0ZWQgZm9yIGRlcGVuZGVuY2llcyAqIE1ha2VmaWxlLmluCgkoSkFWQV9PQkpTKTogQWRkZWQgcmVtaW5kZXIgY29tbWVudAoKVGh1IEF1ZyAxMyAxMDowMTo0NSAxOTk4ICBOaWNrIENsaWZ0b24gIDxuaWNrY0BjeWdudXMuY29tPgoKCSogZ2phdmFoLmMgKERfTkFOX01BU0spOiBBcHBlbmQgTEwgdG8gdGhlIGNvbnN0YW50IHRvIGZvcmNlIGl0IHRvCgliZSBpbnRlcnByZXRlZCBhcyBhIGxvbmcgbG9uZy4KClRodSBBdWcgMTMgMTQ6MzQ6MDcgMTk5OCAgV2FycmVuIExldnkgIDx3YXJyZW5sQGN5Z251cy5jb20+CgoJKiBkZWNsLmMgKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogVXNlIF9Kdl9Jbml0Q2xhc3MsIG5vdAoJc29mdF9pbml0aWFsaXNlX2NsYXNzLiAgVXNlIF9Kdl9OZXdNdWx0aUFycmF5LCBub3QKCXNvZnRfbXVsdGlhbmV3YXJyYXkuICBVc2UgX0p2X1Rocm93QmFkQXJyYXlJbmRleCwgbm90Cglzb2Z0X2JhZGFycmF5aW5kZXguICBVc2UgX0p2X0NoZWNrQ2FzdCwgbm90IHNvZnRfY2hlY2tjYXN0LiAgVXNlCglfSnZfQ2hlY2tBcnJheVN0b3JlLCBub3Qgc29mdF9jaGVja2FycmF5c3RvcmUuICBVc2UKCV9Kdl9Mb29rdXBJbnRlcmZhY2VNZXRob2QsIG5vdCBzb2Z0X2xvb2t1cGludGVyZmFjZW1ldGhvZC4KCldlZCBBdWcgMTIgMTQ6MjM6MTMgMTk5OCAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGN5Z251cy5jb20+CgoJKiBkZWNsLmMsIGphdmEtdHJlZS5oICh0aGlzX2lkZW50aWZpZXJfbm9kZSwgc3VwZXJfaWRlbnRpZmllcl9ub2RlLAoJbGVuZ3RoX2lkZW50aWZpZXJfbm9kZSk6ICBOZXcgZ2xvYmFsIHRyZWUgbm9kZSBjb25zdGFudHMuCgkqIHBhcnNlLnkgKGt3X3N1cGVyLCBrd190aGlzLCBrd19sZW5ndGgpOiAgUmVtb3ZlZCBnbG9iYWxzLgoJUmVwbGFjZSB1c2VzIGJ5IHN1cGVyX2lkZW50aWZpZXJfbm9kZSBldGMuCgkqIGxleC5jIChrd19zdXBlciwga3dfdGhpcywga3dfbGVuZ3RoKTogIERvbid0IGluaXRpYWxpemUuCgoJKiBwYXJzZS55IChyZXNvbHZlX2ZpZWxkX2FjY2Vzcyk6ICBEb24ndCBzcGVjaWFsLWNhc2UgIi5sZW5ndGgiIGlmCglmbGFnX2VtaXRfY2xhc3NfZmlsZXMuCgkocGF0Y2hfYXJyYXlfcmVmKTogIExlYXZlIGFzIEFSUkFZX1JFRiBpZiBmbGFnX2VtaXRfY2xhc3NfZmlsZXMuCgkqIGpjZi13cml0ZS5jIChnZW5lcmF0ZV9ieXRlY29kZV9pbnNucyk6ICBIYW5kbGUgQVJSQVlfUkVGIG9wY29kZQoJYW5kIEFSUkFZLmxlbmd0aC4KClR1ZSBBdWcgMTEgMTE6MzE6NTUgMTk5OCAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGN5Z251cy5jb20+CgoJKiBkZWNsLmMgKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogUmVtb3ZlIHVudXNlZCBtZXRob2RfdHlwZV9ub2RlIGZpZWxkcy4KCSogY2xhc3MuYyAobWFrZV9tZXRob2RfdmFsdWUpOiAgUmVtb3ZlIGluaXQgZm9yIHJlbW92ZWQgZmllbGRzLgoKCSogY2xhc3MuYyAobGF5b3V0X2NsYXNzKTogIFVzZSBidWlsZF9qYXZhX2FyZ3VtZW50X3NpZ25hdHVyZS4KCSogamF2YS10cmVlLmggKFRZUEVfQVJHVU1FTlRfU0lHTkFUVVJFKTogIE5ldyBtYWNyby4KCgkqIHR5cGVjay5jIChwdXNoX2phdmFfYXJndW1lbnRfc2lnbmF0dXJlKTogIFJlbW92ZWQuICBNZXJnZWQgaW50byAuLi4KCShidWlsZF9qYXZhX2FyZ3VtZW50X3NpZ25hdHVyZSk6ICBVc2UgVFlQRV9BUkdVTUVOVF9TSUdOQVRVUkUgY2FjaGUuCgkoYnVpbGRfamF2YV9zaWduYXR1cmUpOiAgRG9uJ3QgdXNlIHB1c2hfamF2YV9hcmd1bWVudF9zaWduYXR1cmUuCgoJKiB0eXBlY2suYyAobG9va3VwX2FyZ3VtZW50X21ldGhvZCk6ICBOZXcgZnVuY3Rpb24uCgkqIHBhcnNlLnkgKGphdmFfY2hlY2tfcmVndWxhcl9tZXRob2RzKTogIFVzZSBsb29rdXBfYXJndW1lbnRfbWV0aG9kCglpbnN0ZWFkIG9mIGxvb2t1cF9qYXZhX21ldGhvZDIgZm9sbG93ZWQgYnkgbG9va3VwX2phdmFfbWV0aG9kLgoKCSogcGFyc2UueSAoY2hlY2tfbWV0aG9kX3JlZGVmaW5pdGlvbik6ICBNaW5vciBvcHRpbWl6YXRpb24uCgoJKiBqY2Ytd3JpdGUuYyAoZ2VuZXJhdGVfYnl0ZWNvZGVfaW5zbnMpOiAgSGFuZGxlIFJFVFVSTl9FWFBSLAoJTUlOVVNfRVhQUiwgTVVMVF9FWFBSLCBUUlVOQ19ESVZfRVhQUiwgYW5kIFJESVZfRVhQUi4KCk1vbiBBdWcgMTAgMDk6NTc6MTUgMTk5OCAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgoKCSogTWFrZS1sYW5nLmluIChqYzEkKGV4ZWV4dCkpOiBEb24ndCBkZXBlbmQgb24gYy1jb21tb24ubyBvcgoJYy1wcmFnbWEuby4KCgkqIGdqYXZhaC5jIChqYXZhX2Zsb2F0X2Zpbml0ZSk6IFVzZSBLJlItc3R5bGUgZGVmaW5pdGlvbi4KCShqYXZhX2RvdWJsZV9maW5pdGUpOiBMaWtld2lzZS4KCShnZW5lcmF0ZV9hY2Nlc3MpOiBOb3cgcmV0dXJucyB2b2lkLiAgQ2hhbmdlZCBhbGwgY2FsbGVycy4KCShsYXN0X2FjY2Vzc19nZW5lcmF0ZWQpOiBSZW1vdmVkLgoJKHByb2Nlc3NfZmlsZSk6IE9ubHkgbWFrZSBhIHNpbmdsZSBwYXNzIG92ZXIgdGhlIC5jbGFzcyBmaWxlLgoKV2VkIEp1bCAyOSAxNzo1MDoyMyAxOTk4ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAY3lnbnVzLmNvbT4KCgkqIGNsYXNzLmMgKGdldF9kaXNwYXRjaF90YWJsZSk6ICBBZGQgZXh0cmEgZHVtbXkgdnRhYmxlIGVudHJ5LAoJZm9yIGNvbXBhdGliaWxpdHkgZm9yIEcrKyAod2l0aCAtZnZ0YWJsZS10aHVua3MpLgoJKiBleHByLmMgKGJ1aWxkX2ludm9rZXZpcnR1YWwpOiAgQWRkIG9uZSBmb3IgZXh0cmEgZHVtbXkgdnRhYmxlIGVudHJ5LgoKCSogZ2phdmFoLmMgKHByb2Nlc3NfZmlsZSk6ICBVc2UgcHVibGljIGluaGVyaXRhbmNlIGZvciBzdXBlci1jbGFzcy4KCldlZCBKdWwgMjkgMTM6MTk6MDMgMTk5OCAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBsZXguYyAoamF2YV9pbml0X2xleCk6IEluaXRpYWxpemUgY3R4cC0+cGFja2FnZS4KCSogcGFyc2UuaCAoc3RydWN0IHBhcnNlcl9jdHh0KTogcGFja2FnZSBhbmQgcGFja2FnZV9sZW4gcmVwbGFjZWQKCWJ5IHRyZWUgcGFja2FnZSwgYW4gaWRlbnRpZmllciBub2RlLiBGaWVsZCBtZXRob2RfZGVjbF9saXN0IGlzCglnb25lLiBGaXhlZCBjb21tZW50cy4KCShsb29rdXBfZmllbGRfd3JhcHBlciwgbWVyZ2VfcXVhbGlmaWVkX25hbWUsIG5vdF9hY2Nlc3NpYmxlLAoJY2xhc3NfaW5fY3VycmVudF9wYWNrYWdlKTogTmV3IGZ1bmN0aW9uIHByb3RvdHlwZXMuCgkqIHBhcnNlLnkgKGFycmF5X3R5cGU6KTogU2V0IGNsYXNzIGxvYWRlZCBmbGFnIG9uIHByaW1pdGl2ZSB0eXBlCglhcnJheXMuCgkocGFja2FnZV9kZWNsYXJhdGlvbjopOiBBc3NpZ24gY3R4cC0+cGFja2FnZSB0byB0aGUKCWlkZW50aWZpZXIgbm9kZS4KCShtZXRob2RfaW52b2NhdGlvbjopOiBIYW5kbGUgaW52b2NhdGlvbiBvZiBtZXRob2QgcXVhbGlmaWVkIGJ5Cglgc3VwZXInLgoJKHNpbmdsZV90eXBlX2ltcG9ydF9kZWNsYXJhdGlvbjopOiBSZW1vdmVkIGFtYmlndWl0eSBjaGVjay4KCShqYXZhX3BvcF9wYXJzZXJfY29udGV4dCk6IE5ldyBsb2NhbCB2YXJpYWJsZSBgbmV4dCcuIFJlc2V0IGFuZAoJc2V0IElNUE9SVF9DTEFTU0ZJTEVfTkFNRSBmbGFncyBvbiBjdXJyZW50IGFuZCBwcmV2aW91cyBpbXBvcnQKCWxpc3QuCgkoamF2YV9hY2NzdHJpbmdfbG9va3VwKTogVXNlIG5ldyBsb2NhbCBtYWNybyBDT1BZX1JFVFVSTi4KCShsb29rdXBfZmllbGRfd3JhcHBlcik6IE5ldyBmdW5jdGlvbi4KCShwYXJzZXJfcXVhbGlmaWVkX2NsYXNzbmFtZSk6IFVzZSBtZXJnZV9xdWFsaWZpZWRfbmFtZS4KCShwYXJzZXJfY2hlY2tfc3VwZXJfaW50ZXJmYWNlKTogQnJvYWRlbiBlcnJvciBtZXNzYWdlLgoJKGRvX3Jlc29sdmVfY2xhc3MpOiBDaGVjayBmb3IgcXVhbGlmaWVkIGNsYXNzIG5hbWUgaW4gdGhlIGN1cnJlbnQKCWNvbXBpbGF0aW9uIHVuaXQgaWYgYXBwcm9wcmlhdGUuCgkocHJvY2Vzc19pbXBvcnRzKTogQ2hlY2sgZm9yIGFscmVhZHkgZGVmaW5lZCBjbGFzc2VzLgoJKGNoZWNrX3BrZ19jbGFzc19hY2Nlc3MpOiBHb3QgcmlkIG9mIGNhbGwgdG8KCWdldF9hY2Nlc3NfZmxhZ3NfZnJvbV9kZWNsLgoJKGphdmFfY29tcGxldGVfZXhwYW5kX21ldGhvZHMpOiBDYWxsIHNhZmVfbGF5b3V0X2NsYXNzIGJhc2VkIG9uCgl0aGUgY3VycmVudCBjbGFzcyBzaXplLgoJKG1ha2VfcXVhbGlmaWVkX3ByaW1hcnkpOiBCdWlsZCBhIFdGTCBxdWFsaWZpY2F0aW9uIG9uIHByaW1hcnkgaWYKCW5vbmUgZXhpc3RzLgoJKG1lcmdlX3F1YWxpZmllZF9uYW1lKTogTmV3IGZ1bmN0aW9uLgoJKG1ha2VfcXVhbGlmaWVkX25hbWUpOiBVc2UgbWVyZ2VfcXVhbGlmaWVkX25hbWUuCgkocmVzb2x2ZV9leHByZXNzaW9uX25hbWUpOiBVc2Ugc2FmZV9sb29rdXBfZmllbGQuCgkocmVzb2x2ZV9maWVsZF9hY2Nlc3MpOiBHb3QgcmlkIG9mIGNhbGwgdG8gZ2V0X2FjY2Vzc19mbGFnc19mcm9tX2RlY2wuCgkocmVzb2x2ZV9xdWFsaWZpZWRfZXhwcmVzc2lvbl9uYW1lKTogTGlrZXdpc2UuIENoZWNrIG9uIHJlc29sdmVkCgllbGVtZW50IGFjY2Vzc2liaWxpdHkuCgkobm90X2FjY2Vzc2libGVfcCwgY2xhc3NfaW5fY3VycmVudF9wYWNrYWdlKTogTmV3IGZ1bmN0aW9ucy4KCShtYXliZV9hY2Nlc3NfZmllbGQpOiBHb3QgcmlkIG9mIGNhbGwgdG8gZ2V0X2FjY2Vzc19mbGFnc19mcm9tX2RlY2wuCgkocGF0Y2hfbWV0aG9kX2ludm9jYXRpb25fc3RtdCk6IE1lcmdlZCBjb21tb24gcGllY2VzLiBDaGVjawoJYWNjZXNzaWJpbGl0eSBvZiBpbnZva2VkIG1ldGhvZC4KCShjaGVja19mb3Jfc3RhdGljX21ldGhvZF9yZWZlcmVuY2UpOiBBZGQgcmV0dXJuZWQgdHlwZSBpbiBlcnJvcgoJbWVzc2FnZS4KCShpbnZvY2F0aW9uX21vZGUpOiBHZXQgcmlkIG9mIGJvZ3VzIGNoZWNrIG9uIFBSSVZBVEUgbWV0aG9kcy4KCShyZWZpbmVfYWNjZXNzaWJsZV9tZXRob2RzX2xpc3QpOiBNZXJnZWQgdHdvIGNvbmRpdGlvbnMgaW4gdGVzdC4KCShqYXZhX2NvbXBsZXRlX2NsYXNzKTogU2FuaXR5IGNoZWNrIG9uIHN0YWJpbGl6ZV9yZWYgZ29uZS4KCSogemV4dHJhY3QuYyAocmVhZF96aXBfYXJjaGl2ZSk6IENhc3QgbHNlZWsgc2Vjb25kIGFyZ3VtZW50IHRvIGxvbmcuCgpUdWUgSnVsIDI4IDIxOjM5OjIyIDE5OTggIFBlciBCb3RobmVyICA8Ym90aG5lckBjeWdudXMuY29tPgoKCSogY2xhc3MuYyAoaGFzaFV0ZjhTdHJpbmcpOiAgRml4IC0gdXNlIG5ldyBKYXZhU29mdCBzcGVjaWZpY2F0aW9uLgoKRnJpIEp1bCAyNCAxMDo0MzoyNSAxOTk4ICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CgoJKiBnamF2YWguYyAoRl9OQU4pOiBSZW1vdmVkLgoJKEZfTkFOX01BU0spOiBOZXcgbWFjcm8uCgkoRl9QT1NJVElWRV9JTkZJTklUWSk6IFJlbW92ZWQuCgkoRl9ORUdBVElWRV9JTkZJTklUWSk6IExpa2V3aXNlLgoJKGphdmFfZmxvYXRfZmluaXRlKTogUmV3cm90ZS4KCShEX05BTl9NQVNLKTogUmVuYW1lZC4KCShqYXZhX2RvdWJsZV9maW5pdGUpOiBSZXdyb3RlLgoJKERfUE9TSVRJVkVfSU5GSU5JVFkpOiBSZW1vdmVkLgoJKERfTkVHQVRJVkVfSU5GSU5JVFkpOiBMaWtld2lzZS4KCgkqIGpjZi1kdW1wLmMgKHByaW50X2NvbnN0YW50KTogW0NPTlNUQU5UX0RvdWJsZSwgQ09OU1RBTlRfRmxvYXRdCglJZiB2ZXJib3NlLCBwcmludCB1bmRlcmx5aW5nIHJlcHJlc2VudGF0aW9uIG9mIHZhbHVlIGluIGhleC4KCkZyaSBKdWwgMjQgMTQ6MTQ6MzIgMTk5OCAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGN5Z251cy5jb20+CgoJKiBidWZmZXIuaCwgYnVmZmVyLmM6ICBOZXcgZmlsZXMuCgkqIE1ha2VmaWxlLmluIChKQVZBX09CSlMpOiAgQWRkIGJ1ZmZlci5vLgoKCVN1cHBvcnQgbG9jYWxzIHZhcmlhYmxlcyBhbmQgd3JpdGluZyB0aGVpciBkZWJ1ZyBlbnRyaWVzIHRvIC5jbGFzcy4KCSogamNmLXdyaXRlLmM6ICBTaW1wbGlmeSBzb21lIGJ5IHVzZXIgbmV3IGJ1ZmZlciB0eXBlLgoJKHZvZGVfYnVmZmVyX2dyb3cpOiAgUmVtb3ZlZC4KCShzdHJ1Y3QgbG9jYWx2YXJfaW5mbyk6ICBOZXcgdHlwZS4KCShsb2NhbHN2YXJzLCBsb2NhbHZhcnRhYmxlKTogIE5ldyBidWZmZXJzLgoJKGxvY2FsdmFyX2FsbG9jLCBsb2NhbHZhcl9mcmVlKTogIE5ldyBmdW5jdGlvbnMuCgkoZ2VuZXJhdGVfYnl0ZWNvZGVfaW5zbnMpOiAgSGFuZGxlIGxvY2FsIHZhcmlhYmxlcy4KCShnZW5lcmF0ZV9jbGFzc2ZpbGUpOiAgV3JpdGUgTG9jYWxWYXJpYWJsZVRhYmxlIGF0dHJpYnV0ZS4KCkZyaSBKdWwgMjQgMTM6NDY6NTkgMTk5OCAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBqY2YtaW8uYyAob3Blbl9pbl96aXApOiBDaGVjayB0aGUgemlwZmlsZSBtYWdpYyBudW1iZXIuCgkqIHppcGZpbGUuaCAoWklQTUFHSUMpOiBOZXcgbWFjcm8uCgpGcmkgSnVsIDI0IDEwOjQzOjI1IDE5OTggIFRvbSBUcm9tZXkgIDx0cm9tZXlAY3lnbnVzLmNvbT4KCgkqIE1ha2VmaWxlLmluIChnamF2YWgubyk6IFVwZGF0ZWQgZGVwZW5kZW5jaWVzLgoJKGpjZi1kdW1wLm8pOiBMaWtld2lzZS4KCShhbGwuaW5kaXJlY3QpOiBVc2UgLi4vZ2phdmFoLgoJKC4uL2dqYXZhaCQoZXhlZXh0KSk6IExpa2V3aXNlLgoJKGNsZWFuKTogRG9uJ3QgcmVtb3ZlIGdqYXZhaC4KCShjbGVhbik6IFJlbW92ZSBwYXJzZS5jLCBub3QgamF2YS9wYXJzZS5jLgoJKiBNYWtlLWxhbmcuaW4gKGphdmEpOiBBZGRlZCBnamF2YWguCgkoZ2phdmFoJChleGVleHQpKTogTmV3IHRhcmdldC4KCShHSkFWQUhfU09VUkNFUyk6IE5ldyBtYWNyby4KCShqYXZhLmFsbC5idWlsZCk6IEFkZGVkIGdqYXZhaC4KCShqYXZhLmFsbC5jcm9zcyk6IExpa2V3aXNlLgoJKGphdmEucmVzdC5lbmNhcCk6IExpa2V3aXNlLgoJKiBjb25maWctbGFuZy5pbiAoY29tcGlsZXJzLCBzdGFnZXN0dWZmKTogQWRkZWQgZ2phdmFoLgoKVGh1IEp1bCAyMyAxODozMzo1NiAxOTk4ICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CgoJKiBnamF2YWguYyAoamF2YV9mbG9hdF9maW5pdGUpOiBOZXcgZnVuY3Rpb24uCgkoamF2YV9kb3VibGVfZmluaXRlKTogTGlrZXdpc2UuCgkoRl9QT1NJVElWRV9JTkZJTklUWSk6IE5ldyBtYWNyby4KCShGX05FR0FUSVZFX0lORklOSVRZKTogTGlrZXdpc2UuCgkoRl9OQU4pOiBMaWtld2lzZS4KCShEX1BPU0lUSVZFX0lORklOSVRZKTogTGlrZXdpc2UuCgkoRF9ORUdBVElWRV9JTkZJTklUWSk6IExpa2V3aXNlLgoJKERfTkFOKTogTGlrZXdpc2UuCgkocHJpbnRfZmllbGRfaW5mbyk6IFVzZSBqYXZhX2Zsb2F0X2Zpbml0ZSBhbmQgamF2YV9kb3VibGVfZmluaXRlLgoKVGh1IEp1bCAyMyAxNToyODoyNCAxOTk4ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnkgKG1ldGhvZF9oZWFkZXIpOiAgTmFtZSAidGhpcyIgaW1wbGljaXQgYXJndW1lbnQuCgpXZWQgSnVsIDIyIDE1OjQ3OjMwIDE5OTggIFBlciBCb3RobmVyICA8Ym90aG5lckBjeWdudXMuY29tPgoKCSogamNmLXdyaXRlLmM6ICBXcml0ZSBvdXQgTGluZU51bWJlclRhYmxlIGF0dHJpYnV0ZSBpbiAuY2xhc3MgZmlsZS4KCShsaW5lbnVtYmVyX2J1ZmZlciwgbGluZW51bWJlcl9wdHIsIGxpbmVudW1iZXJfbGltaXQpOiAgTmV3IHN0YXRpY3MuCgkocHV0X2xpbmVudW1iZXIpOiAgTmV3IGZ1bmN0aW9uLgoJKGdlbmVyYXRlX2J5dGVjb2RlX2luc25zLCBnZW5lcmF0ZV9jbGFzc2ZpbGUpOiAgV3JpdGUgbGluZSBudW1iZXJzLgoKV2VkIEp1bCAyMiAxNDozOTowMCAxOTk4ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIGphdmEtdHJlZS5oIChDQUxMX0VYUFJfRlJPTV9QUklNQVJZX1ApOiBDaGFuZ2VkIGluIFBSSU1BUllfUC4KCShsb29rdXBfbmFtZSwgYnVpbGRfa25vd25fbWV0aG9kX3JlZiwgYnVpbGRfY2xhc3NfaW5pdCwKCWJ1aWxkX2ludm9rZXZpcnR1YWwsIGludm9rZV9idWlsZF9kdGFibGUsIG1hdGNoX2phdmFfbWV0aG9kLAoJYnVpbGRfZmllbGRfcmVmLCBwdXNoZGVjbF9mb3JjZV9oZWFkLCBidWlsZF9qYXZhX2Jpbm9wLAoJYmluYXJ5X251bWVyaWNfcHJvbW90aW9uLCBidWlsZF9kZWNsX25vX2xheW91dCwKCWJ1aWxkX2phdmFfYXJyYXlhY2Nlc3MsIGJ1aWxkX25ld2FycmF5LCBidWlsZF9hbmV3YXJyYXksCglidWlsZF9qYXZhX2FycmF5X2xlbmd0aF9hY2Nlc3MsIGJ1aWxkX2phdmFfYXJyYXludWxsX2NoZWNrKTogTmV3CglleHRlcm4gZnVuY3Rpb24gcHJvdG90eXBlcy4KCShKQVZBX1VOQVJZX1BMVVNfRVhQUiwgSkFWQV9ORVdfQVJSQVlfRVhQUiwgSkFWQV9ORVdfQ0xBU1NfRVhQUiwKCUpBVkFfVEhJU19FWFBSLCBDQUxMX0NPTlNUUlVDVE9SX1ApOiBNYWNybyBkZWZpbml0aW9uIG1vdmVkIGluCglqYXZhLXRyZWUuaC4KCSogamNmLXBhcnNlLmMgKGluaXRfb3V0Z29pbmdfY3Bvb2wpOiBTZXQgY3VycmVudF9jb25zdGFudF9wb29sX2RhdGFfcmVmCgl0byBOVUxMCgkqIGpjZi5oIChqY2Zfb3V0X29mX3N5bmNoKTogTmV3IGV4dGVybiBmdW5jdGlvbiBwcm90b3R5cGUuCgkqIHBhcnNlLmg6IFN0YXRpYy9nbG9iYWwgZnVuY3Rpb24gaW1wbGVtZW50ZWQgaW4gcGFyc2UueQoJcHJvdG90eXBlZCBhbmQgZGVjbGFyYXRpb25zIG1vdmVkIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUuCgkoREVDTF9QKTogQ2hlY2sgdGhhdCB0aGUgYXJndW1lbnQgaXNuJ3QgbnVsbC4KCShKQVZBX1VOQVJZX1BMVVNfRVhQUiwgSkFWQV9ORVdfQVJSQVlfRVhQUiwgSkFWQV9ORVdfQ0xBU1NfRVhQUiwKCUpBVkFfVEhJU19FWFBSKTogTm8gbG9uZ2VyIGRlZmluZWQgaGVyZS4gU2VlIGphdmEtdHJlZS5oCgkoUVVBTF9ERUNMX1RZUEUpOiBOZXcgbWFjcm8uCgkoUEFSQU1TKTogTWFjcm8gZGVmaW5pdGlvbiByZW1vdmVkLgoJKiBwYXJzZS55OiAoeXlwYXJzZSwgeXllcnJvcik6IFVzZSBQUk9UTyBpbnN0ZWFkIG9mIFBBUkFNUy4KCShyZXR1cm5fc3RhdGVtZW50Oik6IENhbGwgYnVpbGRfcmV0dXJuLgoJKGZpZWxkX2FjY2VzczopOiBDYWxsIG1ha2VfcXVhbGlmaWVkX3ByaW1hcnkgaW4gc3ViIHJ1bGUuCgkobWV0aG9kX2ludm9jYXRpb246KTogQnVpbGQgbWV0aG9kIGludm9jYXRpb24gYW5kIGNhbGwKCW1ha2VfcXVhbGlmaWVkX3ByaW1hcnkgd2hlbiBwcm9jZXNzaW5nIHByaW1hcmllcy4KCShqYXZhX2NvbXBsZXRlX2NsYXNzKTogU2V0IElERU5USUZJRVJfU0lHTkFUVVJFX1RZUEUgYnkgY2FsbGluZwoJZ2V0X3R5cGVfZnJvbV9zaWduYXR1cmUuCgkoamF2YV9jaGVja19yZWd1bGFyX21ldGhvZCk6IEV4dHJhIGludGVnZXIgMCBhcmd1bWVudCB3aGVuIGNhbGxpbmcKCWxvb2t1cF9qYXZhX21ldGhvZDIuCgkobG9va3VwX2phdmFfaW50ZXJmYWNlX21ldGhvZDIpOiBFeHRyYSBtZXRob2QgREVDTCBhcmd1bWVudCB3aGVuCgljYWxsaW5nIGxvb2t1cF9qYXZhX2ludGVyZmFjZV9tZXRob2QyLgoJKGphdmFfbWV0aG9kX2FkZF9zdG10KTogU2V0IFRSRUVfU0lERV9FRkZFQ1RTIG9uIG5ld2x5IGNyZWF0ZWQKCUNPTVBPVU5EX0VYUFIgbm9kZS4KCShqYXZhX2NvbXBsZXRlX2V4cGFuZF9tZXRob2QpOiBMYXlvdXQgY3VycmVudCBjbGFzcyBpZmYgbm90CglhbHJlYWR5IGRvbmUuIERvbid0IHByb2Nlc3MgaW50ZXJmYWNlJ3MgbWV0aG9kcy4KCShqYXZhX2NvbXBsZXRlX2V4cGFuZF9tZXRob2QpOiBVc2Ugc3VwZXIgY2xhc3Mgb25seSBpZiBpdAoJZXhpc3RzLiBVc2UgY3VycmVudCBjbGFzcyBvdGhlcndpc2UuCgkobWFrZV9xdWFsaWZpZWRfcHJpbWFyeSk6IE5ldyBmdW5jdGlvbi4KCShyZXNvbHZlX2V4cHJlc3Npb25fbmFtZSk6IFByb2Nlc3MgcXVhbGlmaWVkIGV4cHJlc3Npb24gb3IKCWV4cHJlc3Npb24gZnJvbSBwcmltYXJ5IHRoZSBzYW1lIHdheS4KCShyZXNvbHZlX2V4cHJlc3Npb25fbmFtZSk6IFR3byBsYXN0IGFyZ3VtZW50cyB0bwoJcmVzb2x2ZV9maWVsZF9hY2Nlc3MgYXJlIG5vdyBOVUxMX1RSRUVzLgoJKHJlc29sdmVfZmllbGRfYWNjZXNzKTogTmV3IHZhcmlhYmxlIGlzX3N0YXRpYy4gTG9jYWwgZmllbGQgbXVzdAoJYmUgREVDTHMuIGlzX3N0YXRpYyBjb21wdXRlZCBvbiBmaWVsZCBERUNMcyBvbmx5LiBBcHBlbmQgY29kZSBpbgoJd2hlcmVfZm91bmQgdG8gdGhlIGZpZWxkIGFjY2VzcyBpZiBuZWNlc3NhcnkuIFVzZSBRVUFMX0RFQ0xfVFlQRQoJdG8gaW5pdGlhbGl6ZSBmaWVsZF90eXBlLgoJKHJlc29sdmVfcXVhbGlmaWVkX2V4cHJlc3Npb25fbmFtZSk6IE5ldyBsb2NhbCB2YXJpYWJsZSwKCXByZXZpb3VzX2NhbGxfc3RhdGljIGFuZCBpc19zdGF0aWMuIEhhbmRsZSBwcmltYXJpZXMgd2l0aCBmdW5jdGlvbgoJY2FsbHMsIGNhc3RzLCBhcnJheSByZWZlcmVuY2VzIGFuZCBgdGhpcycuIGBzdXBlcicgbm93IGhhbmRsZWQgYXMKCWAoc3VwZXJfY2xhc3MpdGhpcycuIFVzZSBpc19zdGF0aWMgdG8gY2xhcmlmeSBib29sZWFuIGV4cHJlc3Npb25zLgoJQWRkZWQgY29kZSB0byBoYW5kbGUgY2FzZSB3aGVyZSBhIHByb3BlciBoYW5kbGUgaXMgcmVxdWlyZWQgdG8KCWFjY2VzcyBhIGZpZWxkLiBVc2UgUVVBTF9ERUNMX1RZUEUgd2hlcmUgYXBwbGljYWJsZS4KCShtYXliZV9hY2Nlc3NfZmllbGQpOiBOZXcgZnVuY3Rpb24uCgkocGF0Y2hfbWV0aG9kX2ludm9jYXRpb25fc3RtdCk6IE5ldyBhcmd1bWVudHMgcHJpbWFyeSwgd2hlcmUsCglpc19zdGF0aWMuIEJyYW5jaCBvZiB0aGUgdGVzdCBvbiBDQUxMX0VYUFJfRlJPTV9QUklNQVJZX1AKCWRlbGV0ZWQuIFVzZSBgd2hlcmUnIGFzIGEgdHlwZSB0byBzZWFyY2ggZnJvbSBpZiBzcGVjaWZpZWQuIENoZWNrCglmb3Igc3RhdGljIG1ldGhvZCByZWZlcmVuY2Ugd2hlcmUgZm9yYmlkZGVuLiBBcHBlbmQgcHJpbWFyeSBvcgoJY3VycmVudF90aGlzIHRvIHRoZSBhcmd1bWVudCBsaXN0IGlmIG5vdCBjYWxsaW5nIGNvbnN0cnVjdG9yIG5vcgoJc3RhdGljIG1ldGhvZHMuCgkoY2hlY2tfZm9yX3N0YXRpY19tZXRob2RfcmVmZXJlbmNlKTogTmV3IGZ1bmN0aW9uLgoJKHBhdGNoX2ludm9rZSk6IExheW91dCB0aGUgY2xhc3Mgb24gd2hpY2ggbmV3IGlzIGRvbmUgaWYKCW5lY2Vzc2FyeS4KCShsb29rdXBfbWV0aG9kX2ludm9rZSk6IENoYW5nZWQgZm9ybWF0IHRvIHJlcG9ydCBlcnJvcnMgb24KCW1ldGhvZHMuCgkocXVhbGlmeV9hbWJpZ3VvdXNfbmFtZSk6IE5ldyBsb2NhbCB2YXJpYWJsZSB0aGlzX2ZvdW5kLiBOb3cKCWhhbmRsZSB0aGluZ3MgZnJvbSBwcmltYXJpZXMuIE1ldGhvZCBjYWxsIGFyZSBjb25zaWRlcmVkCglleHByZXNzaW9uIG5hbWVzLgoJKGlkZW50aWNhbF9zdWJwYXRoX3ApOiBOVUxMX1RSRUUgYXJndW1lbnRzIHRvIGJyZWFrZG93bl9xdWFsaWZpZWQKCWNoYW5nZWQgaW50byBOVUxMcy4KCShub3RfaW5pdGlhbGl6ZWRfYXNfaXRfc2hvdWxkX3ApOiBDb21wbHkgd2l0aCB0aGUgbmV3IERFQ0xfUC4KCShqYXZhX2NvbXBsZXRlX3RyZWUpOiBOZXcgY2FzZSBmbyBSRVRVUk5fRVhQUi4gUHJvY2VzcyBmdW5jdGlvbgoJY2FsbCBhcmd1bWVudHMgaW4gc2VwYXJhdGUgZnVuY3Rpb24uCgkoY29tcGxldGVfZnVuY3Rpb25fYXJndW1lbnRzKTogTmV3IGZ1bmN0aW9uLgoJKGJ1aWxkX21ldGhvZF9pbnZvY2F0aW9uKTogRG9uJ3QgdXNlIENBTExfRVhQUl9GUk9NX1BSSU1BUllfUAoJYW55bW9yZS4KCShwYXRjaF9hc3NpZ25tZW50KTogVGFrZSB0aGUgcmV0dXJuIGZ1bmN0aW9uIHNsb3QgaW50byBhY2NvdW50IGFzCglhIFJIUy4gRGlzdGluZ3Vpc2ggYXNzaWdubWVudCBmcm9tIGEgcmV0dXJuLgoJKHZhbGlkX3JlZl9hc3NpZ25jb252X2Nhc3RfcCk6IFVzZSBidWlsZF9qYXZhX2FyZ3VtZW50X3NpZ25hdHVyZQoJd2hlbiBjaGVja2luZyBtZXRob2RzIGluIGludGVyZmFjZXMuCgkocmVzb2x2ZV90eXBlX2R1cmluZ19wYXRjaCk6IE5VTEwgYXJndW1lbnQgdG8gdW5yZXNvbHZlX3R5cGVfcAoJaW5zdGVhZCBvZiBOVUxMX1RSRUUuCgkocGF0Y2hfbmV3YXJyYXkpOiBGaXhlZCB0eXBvIGluIGNvbW1lbnQuCgkoYnVpZF90aGlzKTogQnVpbGQgYSBXRkwgd2l0aCBga3dfdGhpcycgaW5zdGVhZCBvZiBhIEZJRUxEX0RFQ0wuCgkoYnVpbGRfcmV0dXJuLCBwYXRjaF9yZXR1cm4pOiBOZXcgZnVuY3Rpb25zLgoJKiB0eXBlY2suYyAobG9va3VwX2phdmFfY29uc3RydWN0b3IpOiBGaXhlZCB0eXBvIGluIGNvbW1lbnQuCgpUdWUgSnVsIDIxIDEyOjEwOjA0IDE5OTggIFBlciBCb3RobmVyICA8Ym90aG5lckBjeWdudXMuY29tPgoKCSogY29uc3RhbnRzLmMgKGZpbmRfbmFtZV9hbmRfdHlwZV9jb25zdGFudCwgZmluZF9maWVsZHJlZl9pbmRleCwKCWZpbmRfbWV0aG9kcmVmX2luZGV4KTogIE5ldyBtZXRob2RzLgoJKiBleHByLmMgKGJ1aWxkX2ludm9rZV9ub25faW50ZXJmYWNlKTogIElmIGZsYWdfZW1pdF9jbGFzc19maWxlcywKCWp1c3QgcmV0dXJuIGdpdmVuIG1ldGhvZC4gIEFsc28sIHJlbmFtZSB0byBidWlsZF9rbm93bl9tZXRob2RfcmVmLgoJKGV4cGFuZF9pbnZva2UpOiAgUmVuYW1lIGNhbGwgdG8gYnVpbGRfaW52b2tlX25vbl9pbnRlcmZhY2UuCgkqIGphdmEtdHJlZS5oLCBwYXJzZS5oOiAgVXBkYXRlIHByb3RvdHlwZS4KCSogcGFyc2UueSwgZGVjbC5jLCBqY2YtcGFyc2UuYzogIFN1cHByZXNzIGNhbGxzIHRvIGJhY2stZW5kIGZ1bmN0aW9ucwoJKHN1Y2ggYXMgZXhwYW5kX2V4cHJfc3RtdCkgaWYgZmxhZ19lbWl0X2NsYXNzX2ZpbGVzLgoJKiBqY2Ytd3JpdGUuYyAoUkVTRVJWRSwgT1AxLCBPUDIsIE9QNCwgTk9URV9QVVNILCBOT1RFX1BPUCwKCVNUQUNLX1RBUkdFVCwgSUdOT1JFX1RBUkdFVCk6ICBOZXcgbWFjcm9zLgoJKGNvZGVfYnVmZmVyLCBjb2RlX3B0ciwgY29kZV9saW1pdCwgY29kZV9TLCBjb2RlX1NQX21heCk6ICBOZXcgZ2xvYmFscy4KCShnZW5lcmF0ZV9ieXRlY29kZV9pbnNuKTogIE5ldyBmdW5jdGlvbiB0byBnZW5lcmF0ZSBtZXRob2QncyBieXRlY29kZS4KCShnZW5lcmF0ZV9jbGFzc2ZpbGUpOiAgTm9kZSBnZW5lcmF0ZSBDb2RlIGF0dHJpYnV0ZSBmb3IgYSBtZXRob2QuCgkoY29kZV9idWZmZXJfZ3JvdywgcHVzaF9jb25zdGFudDEsIHB1c2hfY29uc3RhbnQyLCBwdXNoX2ludF9jb25zdCwKCXB1c2hfbG9uZ19jb25zdCwgZmllbGRfb3AsIGFkanVzdF90eXBlZF9vcCwgbWF5YmVfd2lkZSk6CglOZXcgZnVuY3Rpb25zIHVzZWQgYnkgZ2VuZXJhdGVfYnl0ZWNvZGVfaW5zbi4KCgkqIHR5cGVjay5jIChzaWduYXR1cmVfaW5jbHVkZV9yZXR1cm4pOiAgUmVtb3ZlIHZhcmlhYmxlLgoJKHB1c2hfamF2YV9hcmd1bWVudF9zaWduYXR1cmUsIGJ1aWxkX2phdmFfYXJndW1lbnRfc2lnbmF0dXJlKTogIE5ldy4KCShidWlsZF9qYXZhX3NpZ25hdHVyZSk6ICBVc2UgcHVzaF9qYXZhX2FyZ3VtZW50X3NpZ25hdHVyZS4KCSogcGFyc2UueTogIFVzZSBidWlsZF9qYXZhX2FyZ3VtZW50X3NpZ25hdHVyZSBpbnN0ZWFkIG9mIGZpZGRsaW5nCgl3aXRoIHNpZ25hdHVyZV9pbmNsdWRlX3JldHVybi4KCkZyaSBKdWwgMTcgMDk6NDg6NTEgMTk5OCAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgoKCSogZ2phdmFoLmMgKHByaW50X2NfZGVjbCk6IEFsd2F5cyBnZW5lcmF0ZSBKQXJyYXk8PiogZm9yIGFycmF5Cgl0eXBlcy4KCgkqIE1ha2VmaWxlLmluIChhbGwuaW5kaXJlY3QpOiBBZGRlZCBnamF2YWgkKGV4ZWV4dCkuCgkoZ2phdmFoJChleGVleHQpKTogQWRkZWQgJChleGVleHQpLgoJKGNsZWFuKTogTGlrZXdpc2UuCgpUaHUgSnVsIDE2IDE1OjI5OjIwIDE5OTggIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogY2xhc3MuYyAobGF5b3V0X2NsYXNzKTogQ2FsbCB0byBqYXZhX2xheW91dF9wYXJzZWRfY2xhc3MgcmVwbGFjZQoJYnkgc2FmZV9sYXlvdXRfY2xhc3MuCgkqIGV4cHIuYyAoYnVpbGRfamF2YV9hcnJheV9sZW5ndGhfYWNjZXNzKTogUmVtb3ZlZCBzdGF0aWMgc3RvcmFnZQoJY2xhc3MgaW4gdGhlIGZ1bmN0aW9uIGRlZmluaXRpb24uCgkoYnVpbGRfamF2YV9hcnJheW51bGxfY2hlY2spOiBMaWtld2lzZS4KCUFsc28gZml4ZWQgdHlwb3MgaW4gdHdvIGNvbW1lbnRzLgoJKiBsZXguYyAoamF2YV9pbml0X2xleCk6IEluaXRpYWxpemUgc3RhdGljIGdsb2JhbCBrd19sZW5ndGguCgkoamF2YV9sZXgpOiBVc2UgQlVJTERfT1BFUkFUT1Igb24gUkVUVVJOX1RLLgoJKiBsZXguaCAoSkFWQV9GTE9BVF9SQU5HRV9FUlJPUik6IEFkZCBleHRyYSBhcmd1bWVudCB0bwoJamF2YV9sZXhfZXJyb3IuCgkoSkFWQV9JTlRFR1JBTF9SQU5HRV9FUlJPUik6IExpa2V3aXNlLgoJKiBwYXJzZS5oIChyZXNvbHZlX25vX2xheW91dCk6IE5ldyBzdGF0aWMgZnVuY3Rpb24gZGVjbGFyYXRpb24uCgkoZ2V0X2lkZW50aWZpZXJfaW5fc3RhdGljKTogRGVjbGFyYXRpb24gcmVtb3ZlZC4KCShqYXZhX2xheW91dF9wYXJzZWRfY2xhc3MpOiBGdW5jdGlvbiBuYW1lIGRlY2xhcmF0aW9uIGNoYW5nZWQgdG8KCXNhZmVfbGF5b3V0X2NsYXNzLgoJKGJ1aWxkX25ld2FycmF5X25vZGUsIHBhdGNoX25ld2FycmF5LCByZXNvbHZlX3R5cGVfZHVyaW5nX3BhdGNoLAoJbm90X2luaXRpYWxpemVkX2FzX2l0X3Nob3VsZF9wLCBidWlsZF90aGlzKTogTmV3IHN0YXRpYyBmdW5jdGlvbgoJZGVjbGFyYXRpb25zLgoJKHB1c2hkZWNsX2ZvcmNlX2hlYWQsIGJ1aWxkX2phdmFfYmlub3AsIGludF9maXRzX3R5cGVfcCwKCWJpbmFyeV9udW1lcmljX3Byb21vdGlvbiwgc3RhYmlsaXplX3JlZmVyZW5jZSwKCWJ1aWxkX2RlY2xfbm9fbGF5b3V0LCBidWlsZF9qYXZhX2FycmF5YWNjZXNzKTogRXh0ZXJuIGZ1bmN0aW9uCglkZWNsYXJhdGlvbnMgbW92ZWQgaW50byB0aGVpciBvd24gc2VjdGlvbi4KCShidWlsZF9uZXdhcnJheSwgYnVpbGRfYW5ld2FycmF5LCBidWlsZF9qYXZhX2FycmF5X2xlbmd0aF9hY2Nlc3MsCglidWlsZF9qYXZhX2FycmF5bnVsbF9jaGVjayk6IE5ldyBleHRlcm4gZnVuY3Rpb24gZGVjbGFyYXRpb25zLgoJKFVOQVJZX1BMVVNfRVhQUik6IE1hY3JvIHJlbmFtZWQgaW50byBKQVZBX1VOQVJZX1BMVVNfRVhQUi4KCShKQVZBX05FV19BUlJBWV9FWFBSLCBKQVZBX05FV19DTEFTU19FWFBSLCBKQVZBX1RISVNfRVhQUik6IE5ldwoJZmFrZSB0cmVlIGNvZGVzLgoJKENBTExfQ09OU1RSVUNUT1JfUCk6IE5ldyBtYWNyby4KCSogcGFyc2UueSAoa3dfbGVuZ3RoKTogTmV3IHN0YXRpYyBnbG9iYWwgdHJlZSBub2RlLgoJKHJldHVybl9zdGF0ZW1lbnQpOiBUYWdnZWQgPG5vZGU+LgoJKFJFVFVSTl9USyk6IFRhZ2dlZCA8b3BlcmF0b3I+LgoJKHZhcmlhYmxlX2RlY2xhcmF0b3JfaWQ6KTogQnVpbGQgdmFyaWFibGUgZGVjbGFyYXRpb24gd2l0aCBhbgoJZW1wdHkgaW5pdGlhbGl6YXRpb24gdmFsdWUgaWYgYSBzeW50YXggZXJyb3Igd2FzIGZvdW5kIGluIHRoZQoJaW5pdGlhbGl6YXRpb24gcGFydCBvZiB0aGUgdmFyaWFibGUgZGVjbGFyYXRpb24uCgkoc3RhdGVtZW50X3dpdGhvdXRfdHJhaWxpbmdfc3Vic3RhdGVtZW50Oik6IHJldHVybl9zdGF0ZW1lbnQ6IG5vdwoJdXNlcyB0aGUgZGVmYXVsdCBydWxlLgoJKHJldHVybl9zdGF0ZW1lbnQ6KTogVGVtcG9yYXJpbHkgZml4ZWQgdG8gcmV0dXJuIE5VTExfVFJFRS4KCShwcmltYXJ5X25vX25ld19hcnJheTopOiBDYWxsIGJ1aWxkX3RoaXMgd2hlbiBUSElTX1RLIHdhcyBwYXJzZWQuCgkoY2xhc3NfaW5zdGFuY2VfY3JlYXRpb25fZXhwcmVzc2lvbjopOiBDbGFzcyBjcmVhdGlvbiBydWxlcyBub3cKCWNhbGwgYnVpbGRfbWV0aG9kX2ludm9jYXRpb24gdXBvbiByZWR1Y3Rpb24uCgkoYXJyYXlfY3JlYXRpb25fZXhwcmVzc2lvbjopOiBSdWxlcyBjYWxsIGJ1aWxkX25ld2FycmF5X25vZGUgdXBvbgoJcmVkdWN0aW9uLgoJKGRpbV9leHByczopOiBCdWlsZCBhIGxpc3Qgb2YgZGltZW5zaW9uIGV4cHJlc3Npb25zLgoJKGRpbV9leHByOik6IFN0b3JlIGxvY2F0aW9uIG9mIHRoZSBPU0JfVEsgaW4gdGhlIGRpbWVuc2lvbgoJZXhwcmVzc2lvbiBub2RlLgoJKG1ldGhvZF9pbnZvY2F0aW9uOik6IEFkZGVkIGEgbmV3IGVycm9yIHJ1bGUuCgkoYnVpbGRfdW5yZXNvbHZlZF9hcnJheV90eXBlKTogV0ZMIGFyZ3VtZW50IG1heSBhbHNvIGJlIGFuIGFycmF5CglvbiBhIHByaW1pdGl2ZSB0eXBlLiBOYW1lIG9mIHRoZSBhcmd1bWVudCBjaGFuZ2VkIHRvIHJlZmxlY3QgdGhpcy4KCShtZXRob2RfZGVjbGFyYXRvcik6IEluc2VydCBhcmd1bWVudCB0eXBlIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlCglhcmd1bWVudCB0eXBlIGxpc3QgYW5kIGxhdGVyIHJldmVyc2UgdGhlIGxpc3QuCgkodW5yZXNvbHZlZF90eXBlX3ApOiBBcmd1bWVudCAncmV0dXJuZWQnIG1heSBiZSBvcHRpb25hbGx5CglOVUxMX1RSRUUuCgkoamF2YV9sYXlvdXRfY2xhc3NfZnJvbV9zb3VyY2UpOiBGdW5jdGlvbiByZW5hbWVkCglzYWZlX2xheW91dF9jbGFzcy4KCShyZXNvbHZlX2FuZF9sYXlvdXQpOiBOb3cgY2FsbCByZXNvbHZlX25vX2xheW91dCBhbmQKCXNhZmVfbGF5b3V0X2NsYXNzLgoJKHJlc29sdmVfbm9fbGF5b3V0KTogTmV3IGZ1bmN0aW9uLgoJKHB1cmlmeV90eXBlX25hbWUpOiBOZXcgZnVuY3Rpb24uCgkoY29tcGxldGVfY2xhc3NfcmVwb3J0X2Vycm9ycyk6IENhbGwgcHVyaWZ5X3R5cGVfbmFtZSBkdXJpbmcgZXJyb3IKCXJlcG9ydCBvbiBhIHR5cGUgbm90IGZvdW5kLgoJKHByb2Nlc3NfaW1wb3J0cyk6IGVycm9yX2ZvdW5kIGxvY2FsIHZhcmlhYmxlIGRvZXNuJ3QgbmVlZCB0byBiZQoJaW5pdGlhbGl6ZWQgdG8gemVyby4KCShkZWNsYXJlX2xvY2FsX3ZhcmlhYmxlcyk6IE5ldyBsb2NhbCB0eXBlX3dmbC4gRml4ZWQgdHlwbyBpbiBlcnJvcgoJbWVzc2FnZS4gdHlwZV93ZmwgYXNzaWduZWQgdG8gdW5yZXNvbHZlZCB0eXBlIGFuZCB1c2VkIHRvIHJlZ2lzdGVyCglpbmNvbXBsZXRlIHR5cGUuIEJ1aWxkIGEgV0ZMIGFyb3VuZCB0aGUgdmFyaWFibGUgaW5pdGlhbGl6YXRpb24KCXN0YXRlbWVudCBzbyB0aGF0IGRlYnVnIGluZm8gY2FuIGJlIGdlbmVyYXRlZCBvbiBpdC4KCShzb3VyY2Vfc3RhcnRfamF2YV9tZXRob2QpOiBSZXZlcnNlIGFyZ3VtZW50IGxpc3QgYWZ0ZXIgdGhleSd2ZQoJYmVlbiBwcm9jZXNzZWQuCgkoY3VycmVudF90aGlzKTogTmV3IHN0YXRpYyBnbG9iYWwgdmFyaWFibGUuCgkoamF2YV9jb21wbGV0ZV9leHBhbmRfbWV0aG9kcyk6IFNldCBjdXJyZW50X3RoaXMgd2hlbiBhcHByb3ByaWF0ZS4KCShyZXNvbHZlX2V4cHJlc3Npb25fbmFtZSk6IEJ1aWxkIGNvcnJlY3Qgc3RhdGljIGFuZCBub24gc3RhdGljCglmaWVsZCBhY2Nlc3MgYmVhcmluZyBhIHNpbXBsZSBuYW1lLgoJKHJlc29sdmVfZmllbGRfYWNjZXNzKTogUmVzb2x2ZSB0aGUgbGVuZ3RoIGZpZWxkIG9mIGFycmF5cy4gSGFuZGxlCglmLm0oKSBjYXNlcy4KCShwYXRjaF9tZXRob2RfaW52b2NhdGlvbl9zdG10KTogU2V0IHRoZSB0eXBlIG9mIHRoZSBtZXRob2QKCWludm9jYXRpb24gdG8gZXJyb3JfbWFya19ub2RlLiBUaGlzIHZhbHVlIGlzIGxhdGVyIG92ZXJyaWRkZW4gYnkgYQoJdmFsaWQgdHlwZSwgaWYgYW55LiBEb24ndCBoYW5kbGUgcXVhbGlmaWVkIGNvbnN0cnVjdG9yIGludm9jYXRpb24KCWFzIHF1YWxpZmllZCBtZXRob2QgaW52b2NhdGlvbi4gQ2FsbCBsb29rdXBfbWV0aG9kX2ludm9rZSB3aXRoIGl0cwoJbmV3IGZsYWcuIEl0J3Mgbm8gbG9uZ2VyIG5lY2Vzc2FyeSB0byBhY2Nlc3MgdGhlIHNlbGVjdGVkIG1ldGhvZAoJYXMgdGhlIHZhbHVlIG9mIGEgdHJlZSBsaXN0LiBIYW5kbGUgY29uc3RydWN0b3IgaW52b2NhdGlvbi4KCShwYXRjaF9pbnZva2UpOiBSZXZlcnNlIGFyZ3VtZW50IGxpc3Qgd2hlbiBpbnZva2luZyBub24gaW50ZXJmYWNlCgltZXRob2RzLiBJbnNlcnQgY2FsbCB0byBuZXcgYXMgdGhlIGZpcnN0IGFyZ3VtZW50IG9mIHRoZQoJY29uc3RydWN0b3IuCgkoaW52b2NhdGlvbl9tb2RlKTogUmV0dXJuIGEgSU5WT0tFX1NUQVRJQyBpcyB0aGUgaW52b2tlZCBtZXRob2QgaXMKCWRlZmluZWQgd2l0aGluIGEgZmluYWwgY2xhc3MuIFJldHVybiBJTlZPS0VfU1RBVElDIGlmIHRoZSBpbnZva2VkCgltZXRob2QgaXMgYSBjb25zdHJ1Y3Rvci4KCShsb29rdXBfbWV0aG9kX2ludm9rZSk6IE5ldyBsYyBhcmd1bWVudCBpcyBhIGZsYWcgdG8gaW5kaWNhdGUgYQoJY29uc3RydWN0b3IgbG9va3VwLiBOb3cgaGFuZGxlIGNvbnN0cnVjdG9yIGxvb2t1cC4gQ2hvb3NlIHRoZSBtb3N0CglzcGVjaWZpYyBtZXRob2QgaW4gY2FzZSBzZXZlcmFsIHdlcmUgbWF0Y2hpbmcgdGhlIGludm9jYXRpb24KCXJlcXVpcmVtZW50cy4gUmV0dXJuIGEgbWV0aG9kIGRlY2wgaW5zdGVhZCBvZiBhIHRyZWUgbGlzdCBmZWF0dXJpbmcKCW9uZSBzaW5nbGUgbWV0aG9kIGRlY2wgZWxlbWVudC4KCShyZWZpbmVfYWNjZXNzaWJsZV9tZXRob2RzX2xpc3QpOiBOZXcgbGMgZmxhZyBhcmd1bWVudCB0bwoJaW5kaWNhdGUgdGhhdCBhIGNvbnN0cnVjdG9yIGlzIGJlaW5nIGxvb2tlZCB1cC4KCShub3RfaW5pdGlhbGl6ZWRfYXNfaXRfc2hvdWxkX3ApOiBOZXcgZnVuY3Rpb24uCgkoamF2YV9jb21wbGV0ZV90cmVlKTogTm93IHByb2Nlc3MgZmFrZSB0cmVlIGNvZGVzCglKQVZBX05FV19BUlJBWV9FWFBSLCBKQVZBX05FV19DTEFTU19FWFBSIGFuZCBKQVZBX1RISVNfRVhQUi4gQ2FsbAoJc2F2ZV9leHByIG9uIHJlc29sdmVkIGZ1bmN0aW9uIGNhbGwgYXJndW1lbnRzLiBDYXNlIG9uCglVTkFSWV9QTFVTX0VYUFIgY2hhbmdlZCBpbnRvIGEgY2FzZSBvbiBKQVZBX1VOQVJZX1BMVVNfRVhQUi4KCShwYXRjaF9hc3NpZ25tZW50KTogTEhTIGNhbiBiZSBhIGZpZWxkIGFjY2VzcyBleHByZXNzaW9uLiBXaGVuCglkZWFsaW5nIHdpdGggcmVmZXJlbmNlLCBsaHNfdHlwZSBpcyB0aGUgcHJvbW90ZWQgdHlwZSBvZiB0aGUKCXJoc190eXBlLCBub3QgdGhlIFJIUy4gVXNlIG5vdF9pbml0aWFsaXplZF9hc19pdF9zaG91bGRfcCB3aGVyZQoJYXBwbGljYWJsZS4KCShvcGVyYXRvcl9zdHJpbmcpOiBKQVZBX1VOQVJZX1BMVVNfRVhQUiByZXBsYWNlcyBVTkFSWV9QTFVTX0VYUFIuCgkocGF0Y2hfYmlub3ApOiBVc2Ugbm90X2luaXRpYWxpemVkX2FzX2l0X3Nob3VsZF9wIHdoZXJlCglhcHBsaWNhYmxlLgoJKGJ1aWxkX3VuYXJ5b3ApOiBKQVZBX1VOQVJZX1BMVVNfRVhQUiByZXBsYWNlcyBVTkFSWV9QTFVTX0VYUFIuCgkocGF0Y2hfdW5hcnlvcCk6IExpa2V3aXNlLiBBbmQgdXNlIG5vdF9pbml0aWFsaXplZF9hc19pdF9zaG91bGRfcAoJd2hlcmUgYXBwbGljYWJsZS4KCShyZXNvbHZlX3R5cGVfZHVyaW5nX3BhdGNoKTogTmV3IGZ1bmN0aW9uLgoJKHBhdGNoX2Nhc3QpOiBDYWxsIHJlc29sdmVfdHlwZV9kdXJpbmdfcGF0Y2ggdG8gcmVzb2x2ZSB0eXBlIGFuZAoJcmVwb3J0IGVycm9yIGFjY29yZGluZ2x5LgoJKHBhdGNoX2FycmF5X3JlZik6IFVzZSBub3RfaW5pdGlhbGl6ZWRfYXNfaXRfc2hvdWxkX3Agd2hlcmUKCWFwcGxpY2FibGUuIEFycmF5IGJhc2UgZXhwcmVzc2lvbiBpcyBzYXZlZCBiZWZvcmUgYmVpbmcKCXVzZWQuIFByb21vdGUgdGhlIHR5cGUgb2YgYW4gYXJyYXkgZWxlbWVudHMgaWYgaXQgY29udGFpbnMgbm9uCglidWlsdGluIHR5cGVzLgoJKGJ1aWxkX25ld2FycmF5X25vZGUsIHBhdGNoX25ld2FycmF5LCBidWlsZF90aGlzKTogTmV3IGZ1bmN0aW9ucy4KClRodSBKdWwgMTYgMTA6NDY6NDcgMTk5OCAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgoKCSogZ2phdmFoLmMgKHByaW50X2NfZGVjbCk6IFVURjhfR0VUIGluY3JlbWVudHMgcG9pbnRlcjsgZG9uJ3QKCWluY3JlbWVudCBpdCBpbiBgZm9yJyBzdGF0ZW1lbnQuCgkocHJpbnRfZmllbGRfaW5mbyk6IElmIG51bWJlciBpcyBpbmYgb3IgbmFuLCBkb24ndCBwcmludCBpdC4KCShwcmludF9tZXRob2RfaW5mbyk6IElmIG1ldGhvZCBuYW1lIGlzIGBkZWxldGUnLCBqdXN0IGlnbm9yZSBpdC4KCShwcmludF9jX2RlY2wpOiBTcGVjaWFsLWNhc2UganN0cmluZ0FycmF5LgoKCSogZ2phdmFoLmMgKGhlbHApOiBOZXcgZnVuY3Rpb24uCgkobm9fYXJndW1lbnQpOiBOZXcgZnVuY3Rpb24uCgkodXNhZ2UpOiBDaGFuZ2VkIHRleHQuCgkobWFpbik6IFJld3JvdGUgYXJndW1lbnQgaGFuZGxpbmcuICBOb3cgaGFuZGxlcyAtdiwgLS1oZWxwLAoJLS12ZXJzaW9uLgoJKHZlcnNpb24pOiBOZXcgZnVuY3Rpb24uCgkoZm91bmRfZXJyb3IpOiBOZXcgZ2xvYmFsLgoJKG1haW4pOiBSZXR1cm4gZm91bmRfZXJyb3IuCgkoZ2VuZXJhdGVfYWNjZXNzKTogU2V0IGZvdW5kX2Vycm9yLgoJKHByaW50X2NfZGVjbCk6IExpa2V3aXNlLgoKV2VkIEp1bCAxNSAxMDozNjoyNyAxOTk4ICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CgoJKiBnamF2YWguYyAocHJpbnRfY19kZWNsKTogRG9uJ3QgcHJpbnQgIiwiIHdoZW4gZXhhbWluaW5nIGZpZWxkLgoJU2tpcCB0eXBlIG5hbWUgd2hlbiBsb29raW5nIGF0ICJbTCIgdHlwZXMuCgkocHJvY2Vzc19maWxlKTogTm93IHN0YXRpYy4KCShnZW5lcmF0ZV9hY2Nlc3MpOiBOb3cgcmV0dXJucyBpbnQuCgkobGFzdF9hY2Nlc3NfZ2VuZXJhdGVkKTogTmV3IGdsb2JhbC4KCShwcm9jZXNzX2ZpbGUpOiBDbGVhciBsYXN0X2FjY2Vzc19nZW5lcmF0ZWQ7IG1ha2UgbXVsdGlwbGUgcGFzc2VzCglvdmVyIHRoZSBjbGFzcy4KCShwcmludF9maWVsZF9pbmZvKTogSnVzdCByZXR1cm4gaWYgZ2VuZXJhdGVfYWNjZXNzIHJldHVybnMgdHJ1ZS4KCShwcmludF9tZXRob2RfaW5mbyk6IExpa2V3aXNlLiAgQWxzbywgYWxsb3cgPGluaXQ+IGZ1bmN0aW9ucyB0bwoJcGFzcyB0aHJvdWdoLgoJKHByaW50X2NfZGVjbCk6IEFkZGVkIGlzX2luaXQgYXJndW1lbnQuICBQcmludCBjb25zdHJ1Y3RvcnMKCXByb3Blcmx5LgoJKHByaW50X2N4eF9jbGFzc25hbWUpOiBVc2UgVVRGOF9HRVQgdG8gZXh0cmFjdCBjaGFyYWN0ZXJzIGZyb20KCXN0cmluZy4KCShwcmludF9iYXNlX2NsYXNzbmFtZSk6IE5ldyBmdW5jdGlvbi4KCShwcmludF9jbGFzc19kZWNscyk6IE5ldyBmdW5jdGlvbi4KCShwcm9jZXNzX2ZpbGUpOiBVc2UgaXQuCgkodXRmOF9jbXApOiBOZXcgZnVuY3Rpb24uCgpNb24gSnVsIDEzIDE0OjIxOjQ3IDE5OTggIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQGN5Z251cy5jb20+CgoJKiBsYW5nLW9wdGlvbnMuaDogRm9ybWF0IGNoYW5nZWQgdG8gbWF0Y2ggY2hhbmdlcyBpbiBnY2MvdG9wbGV2LmMKCXRvIGltcGxlbWVudCBhIC0taGVscCBvcHRpb24uCgoxOTk4LTA3LTEwICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBjeWdudXMuY29tPgoKCSogZGVjbC5jIChpbml0X2RlY2xfcHJvY2Vzc2luZyk6IFJldmVydCBjaGFuZ2UgdG8gZHRhYmxlX3R5cGUuCgpUaHUgSnVsICA5IDE4OjIyOjEyIDE5OTggIFBlciBCb3RobmVyICA8Ym90aG5lckBjeWdudXMuY29tPgoKCSogamF2YS10cmVlLmggKENMQVNTX1ApOiAgQ2hhbmdlZCBERUNMX0xBTkdfRkxBR183IC0+IFRZUEVfTEFOR19GTEFHXzQuCgoxOTk4LTA3LTA4ICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBjeWdudXMuY29tPgoKCSogZGVjbC5jIChpbml0X2RlY2xfcHJvY2Vzc2luZyk6IFNldCBDTEFTU19MT0FERURfUCBvbiBkdGFibGVfdHlwZS4KCgkqIGxhbmcuYyAobGFuZ19pbml0KTogRGVmYXVsdCBmbGFnX2V4Y2VwdGlvbnMgdG8gMSwgd2l0aG91dAoJY2hlY2tpbmcgdG8gc2VlIGlmIGl0J3MgMiBmaXJzdC4KCldlZCBKdWwgIDggMDM6MDE6MzIgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogY29uc3RhbnRzLmM6IEluY2x1ZGUgInN5c3RlbS5oIi4KCSogZGVjbC5jOiBMaWtld2lzZS4KCSogbGFuZy5jIChmbGFnX25ld19leGNlcHRpb25zKTogR2V0IHZpYSBleHRlcm4gbm93LgoJKGxhbmdfaW5pdF9vcHRpb25zKTogTmV3IGZ1bmN0aW9ucy4gIFR1cm4gb24gZmxhZ19uZXdfZXhjZXB0aW9ucy4KClR1ZSBKdWwgIDcgMTI6NTY6NDggMTk5OCAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBsZXguYyAoamF2YV9sZXgpOiBSZXR1cm4gMCB3aGVuIHdlIHNlZSBhbiBpbnZhbGlkIGNoYXJhY3RlciBpbgoJdGhlIGlucHV0LgoKCSogbGV4LmMgKGphdmFfcmVhZF9jaGFyKTogU3BlY2lmeSBleHRyYSBhcmd1bWVudCB3aGVuIGNhbGxpbmcKCWphdmFfbGV4X2Vycm9yLgoJKGphdmFfcmVhZF91bmljb2RlLCBqYXZhX3BhcnNlX2VuZF9jb21tZW50LAoJamF2YV9wYXJzZV9lc2NhcGVfc2VxdWVuY2UpOiBMaWtld2lzZSwKCShqYXZhX2xleCk6IFNwZWNpZnkgZXh0cmEgYXJndW1lbnQgd2hlbiBjYWxsaW5nCglqYXZhX2xleF9lcnJvci4gVGVzdCB0aGF0IElEcyBhcmUgYmVnaW5uaW5nIHdpdGggYSBsZWdhbCBjaGFyYWN0ZXIKCWZvciBJRHMuIEhhbmRsZSBpbnZhbGlkIGNoYXJhY3RlcnMgd2l0aCBhbiBlcnJvciBtZXNzYWdlIGFuZCBhCgljYWxsIHRvIGphdmFfbGV4X2Vycm9yLgoJKGphdmFfbGV4X2Vycm9yKTogQWRqdXN0IGNvbHVtbiBwb3NpdGlvbiBieSBuZXcgYXJndW1lbnQKCWBmb3J3YXJkJy4gSXNzdWUgYW4gZXJyb3IgZXZlbiBpZiBpbiB0aGUgbWlkZGxlIG9mIHJlcG9ydGluZyBhbgoJb3RoZXIgZXJyb3IuCgoxOTk4LTA3LTA3ICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBjeWdudXMuY29tPgoKCSogamNmLWlvLmMgKGZpbmRfY2xhc3MpOiBaZXJvIG91dCBCVUZGRVIgYmVmb3JlIHdlIHVzZSBpdCwgc2luY2UKCXdlIGRvbid0IGV4cGxpY2l0bHkgcHV0IGEgbnVsbCBwb2ludGVyIHdoZW4gd2UncmUgY29weWluZyBpdC4KClR1ZSBKdWwgIDcgMDk6Mzg6MzggMTk5OCAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgoKCSogZ2phdmFoLmMgKHByaW50X2N4eF9jbGFzc25hbWUpOiBOZXcgZnVuY3Rpb24uCgkoc3VwZXJfY2xhc3NfbmFtZSk6IExpa2V3aXNlLgoJKHByaW50X3N1cGVyX2ZpZWxkcyk6IFJlbW92ZWQuCgkoaW5fc3VwZXIpOiBSZW1vdmVkLgoJKHByaW50X2ZpZWxkX2luZm8pOiBOZXZlciBnZW5lcmF0ZSAjZGVmaW5lcy4KCShwcmludF9jX2RlY2wpOiBDaGFuZ2VkIGdlbmVyYXRlZCB0eXBlcyB0byBtYXRjaCBKTkkuICBObyBsb25nZXIKCXByaW50IGNsYXNzIG5hbWUgYmVmb3JlIG1ldGhvZCBuYW1lLgoJKHByaW50X21ldGhvZF9pbmZvKTogUHJpbnQgInN0YXRpYyIgYmVmb3JlIHN0YXRpYyBtZXRob2RzLgoJUHJpbnQgInZpcnR1YWwiIGJlZm9yZSBub24tZmluYWwgbWV0aG9kcy4KCSh1c2FnZSk6IFVzZSBleGl0KDEpLCBub3QgZXhpdCgtMSkuCgkobWFpbik6IExpa2V3aXNlLgoJKHByaW50X2ZpZWxkX2luZm8pOiBVc2UgJS4xN2cgdG8gcHJpbnQgYSBkb3VibGUuCgkobGFzdF9hY2Nlc3MpOiBOZXcgZ2xvYmFscy4KCShwcm9jZXNzX2ZpbGUpOiBJbml0aWFsaXplIGxhc3RfYWNjZXNzLgoJKHVzYWdlKTogTm93IHN0YXRpYy4KCShBQ0NfVklTSUJJTElUWSk6IE5ldyBkZWZpbmUuCgkoZ2VuZXJhdGVfYWNjZXNzKTogTmV3IGZ1bmN0aW9uLgoJKHByaW50X2ZpZWxkX2luZm8pOiBDYWxsIGl0LgoJKHByaW50X21ldGhvZF9pbmZvKTogTGlrZXdpc2UuICBBbHNvLCBnZW5lcmF0ZSBpbmZvcm1hdGlvbiBmb3IgYWxsCgltZXRob2RzLCBub3QganVzdCBuYXRpdmUgbWV0aG9kcy4gIFJldHVybiB2b2lkLgoJKHByaW50X2NfZGVjbCk6IFJldHVybiB2b2lkLgoJKHByaW50X2ZpZWxkX2luZm8pOiBSZXR1cm4gdm9pZC4KClRodSBKdWwgIDIgMTY6NTM6MTYgMTk5OCAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBNYWtlZmlsZS5pbiAoSkFWQUJJU09ORkxBR1MpOiBTcGVjaWZpYyBmbGFnIGZvciBiaXNvbiB3aGVuCglwcm9jZXNzaW5nIHRoZSBqYzEgZ3JhbW1hciBmaWxlLiBQcmVmaXggYmlzb24gZnVuY3Rpb25zIGFuZAoJdmFyaWFibGVzIHdpdGggamF2YV8uCgkocGFyc2UuYyk6IERlcGVuZGVuY2llcyBvbiBwYXJzZS5oIGFuZCBsZXguaAoJKiBleHByLmMgKGJ1aWxkX2phdmFfYXJyYXlhY2Nlc3MpOiBGdW5jdGlvbiBub3cgZ2xvYmFsLgoJKiBqYXZhLXRyZWUuaDogQ29tbWVudCByZW9yZ2FuaXplZCB0byBjYXJyeSBvbiBwcmV2aW91cwoJY2xhc3NpZmljYXRpb24gZWZmb3J0LgoJKFJFU09MVkVfRVhQUkVTU0lPTl9OQU1FX1AsIFJFU09MVkVfUEFDS0FHRV9OQU1FX1AsCglSRVNPTFZFX1RZUEVfTkFNRV9QKTogTmV3IGZsYWdzIG9uIFdGTHMuCgkqIGpjZi1wYXJzZS5jIChwYXJzZV9zb3VyY2VfZmlsZSk6IGphdmFfcGFyc2Vfc291cmNlX2ZpbGUgcmVuYW1lZAoJamF2YV9wYXJzZSAobmV3IHByZWZpeCBqYXZhXyBnZW5lcmF0ZWQgYnkgYmlzb24pLgoJKGphdmFfbGF5b3V0X3BhcnNlZF9jbGFzcywgamF2YV9yZWdpc3Rlcl9wYXJzZWRfY2xhc3MpOiBGdW5jdGlvbgoJY2FsbCByZW1vdmVkLgoJKHl5cGFyc2UpOiBSZW1vdmVkIHVubmVjZXNzYXJ5IGNhbGwgdG8gaW5pdF9vdXRnb2luZ19jcG9vbC4KCSogbGV4LmMgKHN0YXRpYyB0cmVlIHdmbF9vcCk6IFZhcmlhYmxlIGRlbGV0ZWQuCgkoamF2YV9pbml0X2xleCk6IEluaXRpYWxpemUga3dfc3VwZXIgYW5kIGt3X3RoaXMuIEluaXRpYWxpemUgbW9yZQoJY3R4cCBmaWVsZHMgdG8gTlVMTF9UUkVFLgoJKGphdmFfbGV4KTogTm8gbG9uZ2VyIGNyZWF0ZSBXRkwgZm9yIG9wZXJhdG9ycy4gRmlsZW5hbWUgY2FjaGluZwoJbWVjaGFuaXNtIGRlbGV0ZWQuIENhbGwgQlVJTERfT1BFUkFUT1IgZm9yIGAuJywgJygnLCAnWycuIFN0cmluZ3MKCWNyZWF0ZWQgYXMgU1RSSU5HX0NTVCBhbmQgbGF0ZXIgZXhwYW5kZWQuIFJlbW92ZWQgZXh0cmEgYXJndW1lbnQKCXRvIEJVSUxEX09QRVJBVE9SIGFuZCBCVUlMRF9PUEVSQVRPUjIuIEJ1aWxkIG9wZXJhdG9ycyBmb3IgVEhJUwoJYW5kIFNVUEVSLgoJKGJ1aWxkX3dmbF9ub2RlKTogUmVtb3ZlZCBjb2RlIGluIGNvbW1lbnRzLgoJKiBsZXguaCAoQlVJTERfT1BFUkFUT1IsIEJVSUxEX09QRVJBVE9SMik6IE5vIGxvbmdlciBidWlsZCBhIFdGTCBidXQKCXN0b3JlIHRva2VuIGFuZCBsb2NhdGlvbiBkYXRhIGluIHRoZSBjdXJyZW50IGJpc29uIHRva2VuLgoJKiBwYXJzZS5oOiBSZW1vdmVkIHByZS1wcm9jZXNzb3IgYmFzZWQgc3ltYm9sIHByZWZpeGVzIGhhY2suIE1vdmVkCglzdGF0aWMvZXh0ZXJuIGZ1bmN0aW9uIGRlY2xhcmF0aW9uIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZpbGUuCgkoc3RydWN0IHF1YWxpZmljYXRpb24pOiBEYXRhIHN0cnVjdHVyZSBkZWZpbml0aW9uIGRlbGV0ZWQuCgkoUkVTT0xWRV9DSEFJTl9SRU1BSU5ERVIpOiBNYWNybyBkZWZpbml0aW9uIGRlbGV0ZWQuCgkocXVhbGlmeV9hbWJpZ3VvdXNfbmFtZSk6IEZ1bmN0aW9uIGRlY2xhcmF0aW9uIG1vZGlmaWVkLiBGdW5jdGlvbgoJbm93IHJldHVybnMgbm90aGluZy4KCShidWlsZF9hcnJheV9yZWYsIHBhdGNoX2FycmF5X3JlZiwgbWFrZV9xdWFsaWZpZWRfbmFtZSwKCXJlc29sdmVfcXVhbGlmaWVkX2V4cHJlc3Npb25fbmFtZSwgbWF5YmVfZ2VuZXJhdGVfY2xpbml0LAoJcmVzb2x2ZV9maWVsZF9hY2Nlc3MpOiBOZXcgc3RhdGljIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucy4KCShidWlsZF9qYXZhX2FycmF5YWNjZXNzKTogTmV3IGV4dGVybiBmdW5jdGlvbiBkZWNsYXJhdGlvbi4KCShlbnVtIHsgUkVTT0xWRV9FWFBSRVNJT05fTkFNRS4uLn0pOiBFbnVtIGRlbGV0ZWQuCgkoQ0FMTF9FWFBSX1BSSU1BUlkpOiBNYWNybyBkZWxldGVkLgoJKEVYUFJfV0ZMX1FVQUxJRklDQVRJT04sIFFVQUxfV0ZMLCBRVUFMX1JFU09MVVRJT04pOiBOZXcgbWFjcm9zLgoJKHN0cnVjdCBwYXJzZXJfY3R4dCk6IEZpZWxkIGluaXRpYWxpemVkX2ZpbmFsCglyZW1vdmVkLiBub25fc3RhdGljX2luaXRpYWxpemVkLCBzdGF0aWNfaW5pdGlhbGl6ZWQ6IE5ldyBmaWVsZHMuCgkqIHBhcnNlLnkgKHN0YXRpYyB0cmVlIGt3X3N1cGVyLCBzdGF0aWMgdHJlZSBrd190aGlzKTogTmV3IGdsb2JhbAoJc3RhdGljLgoJKCV1bmlvbik6IHRyZWUgd2ZsIGZpZWxkIG9mIG9wZXJhdG9yIG1lbWJlciByZXBsYWNlZCBieSBpbnQKCWxvY2F0aW9uLiBXRkxzIGFyZSBub24gbG9uZ2VyIGNyZWF0ZWQgZm9yIG9wZXJhdG9ycy4KCShPU0JfVEssIERPVF9USywgVEhJU19USywgU1VQRVJfVEspOiBUYWdnZWQgPG9wZXJhdG9yPi4KCShxdWFsaWZpZWRfbmFtZTopOiBOb3cgY2FsbHMgbWFrZV9xdWFsaWZpZWRfbmFtZSB0byBidWlsZCB0aGUKCWlkZW50aWZpZXIuCgkodHlwZV9kZWNsYXJhdGlvbjopOiBDb25zaWRlciBnZW5lcmF0aW5nIDxjbGluaXQ+IHdoZW4gY2xhc3MKCXBhcnNpbmcgY29tcGxldGVkLgoJKHZhcmlhYmxlX2RlY2xhcmF0b3I6KTogRGlyZWN0bHkgYnVpbGQgYW4gYXNzaWdubWVudCBub2RlIHdoZW4gdGhlCgl2YXJpYWJsZSBpcyBpbml0aWFsaXplZCB3aGVuIGRlY2xhcmVkLgoJKHRoaXNfb3Jfc3VwZXI6KTogQnVpbGQgYSBXRkwgYW5kIHNldCBjdXJyZW50IGxvY2F0aW9uIHdoZW4gVEhJUwoJb3IgU1VQRVIgYXJlIHBhcnNlZC4KCShleHByZXNzaW9uX3N0YXRlbWVudDopOiBXcmFwIHN0YXRlbWVudCBhcm91bmQgYSBXRkwuCgkocHJpbWFyeV9ub19uZXdfYXJyYXk6KTogRml4ZWQgdHlwby4gQ2hhbmdlZCB2YWx1ZSByZXR1cm5lZCBieQoJVEhJU19USyBiZWNhdXNlIG9mIGl0cyBuZXcgdHlwZSAodGVtcG9yYXJ5KS4KCShkaW1fZXhwcnM6KTogVGVtcG9yYXJ5IGZpeCBiZWNhdXNlIG9mIE9TQl9USydzIG5ldyB0eXBlLgoJKGZpZWxkX2FjY2VzczopOiBCdWlsZCBxdWFsaWZpZWQgbmFtZSB3aXRoIFNVUEVSLgoJKG1ldGhvZF9pbnZvY2F0aW9uOik6IEZpeGVkIHJldHVybmVkIHZhbHVlIGJlY2F1c2Ugb2YgU1VQRVIncyBuZXcKCXR5cGUuCgkoYXJyYXlfYWNjZXNzOik6IFVzZSBPU0JfVEsgbG9jYXRpb24gaW5mb3JtYXRpb24uCgkocG9zdF9pbmNyZW1lbnRfZXhwcmVzc2lvbjosIHBvc3RfZGVjcmVtZW50X2V4cHJlc3Npb246LAoJdW5hcnlfZXhwcmVzc2lvbjosIHByZV9pbmNyZW1lbnRfZXhwcmVzc2lvbjosCglwcmVfZGVjcmVtZW50X2V4cHJlc3Npb246LCB1bmFyeV9leHByZXNzaW9uX25vdF9wbHVzX21pbnVzOiwKCWNhc3RfZXhwcmVzc2lvbjosIG11bHRpcGxpY2F0aXZlX2V4cHJlc3Npb246LAoJYWRkaXRpdmVfZXhwcmVzc2lvbjosIHNoaWZ0X2V4cHJlc3Npb246LCByZWxhdGlvbmFsX2V4cHJlc3Npb246LAoJZXF1YWxpdHlfZXhwcmVzc2lvbjosIGFuZF9leHByZXNzaW9uOiwgZXhjbHVzaXZlX29yX2V4cHJlc3Npb246LAoJaW5jbHVzaXZlX29yX2V4cHJlc3Npb246LCBjb25kaXRpb25hbF9hbmRfZXhwcmVzc2lvbjosCgljb25kaXRpb25hbF9vcl9leHByZXNzaW9uOiwgYXNzaWdubWVudDopOiBVc2UgbmV3IGxvY2F0aW9uL3Rva2VuCglpbmZvcm1hdGlvbiBhdmFpbGFibGUgb24gb3BlcmF0b3JzLgoJKGNyZWF0ZV9jbGFzcyk6IFNldCBzdXBlcl9kZWNsX3R5cGUgdG8gTlVMTF9UUkVFIHdoZW4gcHJvY2Vzc2luZwoJamF2YS5sYW5nLk9iamVjdC4KCShyZWdpc3Rlcl9maWVsZHMpOiBGaWVsZCBpbml0aWFsaXphdGlvbiBpcyBub3cgYSBNT0RJRllfRVhQUgoJbm9kZS4gQ2hhaW4gaW5pdGlhbGl6YXRpb24gY29kZSB0byB0aGUgbWF0Y2hpbmcgbGlzdHMgKGFjY29yZGluZwoJdGhlIHRoZSBmaWVsZCBkZWNsYXJhdGlvbiBtb2RpZmllcnMpLgoJKG1heWJlX2dlbmVyYXRlX2NsaW5pdCk6IE5ldyBmdW5jdGlvbi4KCShtZXRob2RfaGVhZGVyKTogRG9uJ3Qgc2V0IG1ldGhvZCdzIERFQ0xfTkFNRSB0byBhIFdGTCB3aGVuIGFkZGluZwoJbWV0aG9kcyB0byBqYXZhLmxhbmcuT2JqZWN0LgoJKHJlc29sdmVfYW5kX2xheW91dCk6IE5vdyBjYW4gcmV0dXJuIE5VTExfVFJFRSBpZiB0aGUgdHlwZQoJcmVzb2x1dGlvbiBmYWlscy4gT3RoZXJ3aXNlLCByZXR1cm4gdGhlIGNsYXNzIERFQ0wgaW5zdGVhZCBvZiBpdHMKCVRZUEUuCgkoY2hlY2tfbWV0aG9kX3JlZGVmaW5pdGlvbik6IERvbid0IHBhdGNoIG1ldGhvZCBERUNMX05BTUUgaWYgaXQKCWJlbG9uZ3MgdG8gamF2YS5sYW5nLk9iamVjdC4KCShwcm9jZXNzX2ltcG9ydHMpOiBTaW1wbHkgYXNzaWduIGVycm9yX2ZvdW5kIHRvIHRoZSB2YWx1ZSByZXR1cm5lZAoJYnkgY2hlY2tfcGtnX2NsYXNzX2FjY2Vzcy4KCShkZWNsYXJlX2xvY2FsX3ZhcmlhYmxlcyk6IERvbid0IHVzZSB0aGVpciBpbml0IHN0YXRlbWVudHMgKGlmCglhbnkpIHdoZW4gcGFyc2luZyBlcnJvciB3ZXJlIHByZXZpb3VzbHkgZm91bmQuIFJldXNlIE1PRElGWV9FWFBSCglidWlsZCBkdXJpbmcgcGFyc2luZyBhcyBhbiBpbml0IHN0YXRlbWVudC4KCShqYXZhX21ldGhvZF9hZGRfc3RtdCk6IE5vdyByZXR1cm4gdGhlIGN1cnJlbnQgbWV0aG9kIGJvZHkuCgkoamF2YV9sYXlvdXRfcGFyc2VkX2NsYXNzLCBqYXZhX3JlZ2lzdGVyX3BhcnNlZF9jbGFzcyk6IEZ1bmN0aW9ucwoJcmVtb3ZlZC4KCShqYXZhX2NvbXBsZXRlX2V4cGFuZF9tZXRob2RzKTogSW5pdGlhbGl6ZSB0aGUgY29uc3RhbnQgcG9vbCBvbiBhCglwZXIgY2xhc3MgYmFzaXMuIExheW91dCB0aGUgY2xhc3NlcyBiZWZvcmUgZXhwYW5kaW5nIHRoZWlyIG1ldGhvZAoJYm9kaWVzLiBEb24ndCB0cnkgZXhwYW5kIGFydGlmaWNpYWwgY29uc3RydWN0b3IgY29kZSBpZiBlcnJvciB3ZXJlCglmb3VuZC4gTWFrZSB0aGUgY2xhc3NlcyBkYXRhIGFuZCByZWdpc3RlciB0aGVtIGlmIG5vIGVycm9yIHdlcmUKCWZvdW5kLgoJKGphdmFfY29tcGxldGVfZXhwYW5kX21ldGhvZCk6IFJldHJpZXZlIGFuIGFydGlmaWNpYWwgY29uc3RydWN0b3IKCWFyZ3VtZW50IGxpc3QgYmVmb3JlIGVudGVyaW5nIGl0cyBib2R5LiBBc3NpZ24gdGhlIHRvcCBibG9jayB0bwoJdGhlIGFydGlmaWNpYWwgY29uc3RydWN0b3IgZnVuY3Rpb24gYm9keSBhbmQgc2V0IHR5cGVzIG9mIGRlY2xhcmVkCglibG9ja3MgYW5kIGNvbXBvdW5kIHN0YXRlbWVudHMgdG8gdm9pZC4gV2FsayBtZXRob2QgYm9keSBpZiBub3QgYW4KCWFydGlmaWNpYWwgY29uc3RydWN0b3IuCgkobWFrZV9xdWFsaWZpZWRfbmFtZSwgY3V0X2lkZW50aWZpZXJfaW5fcXVhbGlmaWVkKTogTmV3IGZ1bmN0aW9ucy4KCShyZXNvbHZlX2V4cHJlc3Npb25fbmFtZSk6IEZpeGVkIGNvbW1lbnRzLiBTYXZlL3Jlc3RvcmUgdGhlCgljdXJyZW50IGNsYXNzIENMQVNTX0xPQURFRF9QIGZsYWcgdmFsdWUuIEJ1aWxkIG5vbiBxdWFsaWZpZWQKCXN0YXRpYyBmaWVsZCBhY2Nlc3MgYW5kIGhhbmRsZSBxdWFsaWZpZWQgZXhwcmVzc2lvbiBuYW1lcy4KCShyZXNvbHZlX2ZpZWxkX2FjY2VzcywgcmVzb2x2ZV9xdWFsaWZpZWRfZXhwcmVzc2lvbl9uYW1lKTogTmV3CglmdW5jdGlvbnMuCgkocGF0Y2hfbWV0aG9kX2ludm9jYXRpb25fc3RtdCk6IFVzZSB0aGUgbmV3IGV4cHJlc3Npb24gcmVzb2x1dGlvbgoJc2NoZW1lLCBjYWxsaW5nIHJlc29sdmVfZmllbGRfYWNjZXNzIHdoZW4gdGhlIGZ1bmN0aW9uIGNhbGwgaXMKCXJlc29sdmVkIGFzIGFuIGV4cHJlc3Npb24uCgkocXVhbGlmeV9hbWJpZ3VvdXNfbmFtZSk6IEZ1bmN0aW9uIHJld3JpdHRlbiB0byB3b3JrIG9uIHF1YWxpZmllZAoJZXhwcmVzc2lvbiBwcm9kdWNlZCBieSBtYWtlX3F1YWxpZmllZF9uYW1lLgoJKGphdmFfY29tcGxldGVfdHJlZSk6IFByb21vdGUgdHlwZSB3aGVuIGZ1bmN0aW9uJ3MgYXJndW1lbnQgYXJlCglSRUNPUkRfVFlQRXMuIFdoaWxlIHByb2Nlc3NpbmcgdGhlIE1PRElGWV9FWFBSIGNhc2U6IGRvbid0IHBhdGNoCgl0aGUgYXNzaWdubWVudCB0byBkaXNjb3ZlciBmdXJ0aGVyIGVycm9ycyBpZiBSSFMgaXMgYSBleHByZXNzaW9uCgluYW1lIHRoYXQgZmFpbHMgdG8gZXZhbHVhdGUuIERlY2xhcmUgTEhTIGluaXRpYWxpemVkIGV2ZW4gdGhvdWdoCgl0aGUgYXNzaWdubWVudCBmYWlsZWQuIERvbid0IHVzZSB0aGUgbG9jYXRpb24gdmFyaWFibGUgYW5kIHJlbW92ZWQKCWV4dHJhIGFyZ3VtZW50IGluIHBhdGNoIGZ1bmN0aW9uIGNhbGxzLiBOb3cgaGFuZGxlIHRoZSBBUlJBWV9SRUYKCWNhc2UgYW5kIGJ1aWxkIGludGVybmFsIHN0cmluZyByZXByZXNlbnRhdGlvbiB3aGVuIFNUUklOR19DU1RzIGFyZQoJd2Fsa2VkLgoJKGJ1aWxkX21ldGhvZF9pbnZvY2F0aW9uKTogRG9uJ3Qgd3JhcCBmdW5jdGlvbiBjYWxsIGFyb3VuZCBhIFdGTC4KCShidWlsZF9hc3NpZ25tZW50KTogTGlrZXdpc2UuIFVzZSB0aGUgb3BlcmF0b3IgbG9jYXRpb24KCWluZm9ybWF0aW9uLgoJKHBhdGNoX2Fzc2lnbm1lbnQpOiBIYW5kbGUgYXJyYXkgYWNjZXNzIExIU3MuIEhhbmRsZSBlcnJvcgoJcHJvdmVuYW5jZSwgcmVzdWx0aW5nIGluIGEgYmV0dGVyIGVycm9yIHJlcG9ydC4KCShidWlsZF9iaW5vcCk6IFVzZSBvcF9sb2NhdGlvbiBmcm9tIG9wZXJhdG9yIGFzIGJpbm9wIGxvY2F0aW9uCglpbmZvcm1hdGlvbi4KCShidWlsZF91bmFyeW9wLCBidWlsZF9pbmNkZWMsIGJ1aWxkX2Nhc3QpOiBMaWtld2lzZS4KCShwYXRjaF9iaW5vcCk6IEV4dHJhY3QgbG9jYXRpb24gaW5mb3JtYXRpb24gZnJvbSB0aGUgbm9kZS4gRml4ZWQKCXR5cG8gaW4gZXJyb3IgbWVzc2FnZS4KCShwYXRjaF91bmFyeV9vcCk6IEV4dHJhY3QgbG9jYXRpb24gaW5mb3JtYXRpb24gZnJvbSB0aGUgbm9kZS4KCShidWlsZF9hcnJheV9yZWYsIHBhdGNoX2FycmF5X3JlZik6IE5ldyBmdW5jdGlvbnMuCgpXZWQgSnVsICAxIDEzOjExOjM2IDE5OTggIFRvbSBUcm9tZXkgIDx0cm9tZXlAY3lnbnVzLmNvbT4KCgkqIGV4cHIuYyAoZXhwYW5kX2phdmFfSU5TVEFOQ0VPRik6IENoYW5nZWQgY2FsbGluZyBjb252ZW50aW9uIHRvCgltYXRjaCBfSnZfSXNJbnN0YW5jZU9mLgoJKiBkZWNsLmMgKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogVXNlIF9Kdl9OZXdBcnJheSwgbm90Cglzb2Z0X25ld2FycmF5LiAgVXNlIF9Kdl9Jc0luc3RhbmNlT2YsIG5vdCBzb2Z0X2luc3RhbmNlb2YuCgpUdWUgSnVuIDMwIDE0OjEyOjU0IDE5OTggIFRvbSBUcm9tZXkgIDx0cm9tZXlAY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBGdW5jdGlvbnMgYXJlIG5vdyBuYW1lZAoJX0p2X01vbml0b3JFbnRlciBhbmQgX0p2X01vbml0b3JFeGl0LCBhbmQgcmV0dXJuIGppbnQuCgpNb24gSnVuIDI5IDE0OjQ3OjEwIDE5OTggIFBlciBCb3RobmVyICA8Ym90aG5lckBjeWdudXMuY29tPgoKCSogamF2YS10cmVlLmggKGxvYWRfY2xhc3MpOiAgQWRkIHByb3RvdHlwZS4KCSogY2xhc3MuYyAoaXNfY29tcGlsZWRfY2xhc3MpOiAgQWRkIG1pc3NpbmcgYXJnIHRvIGxvYWRfY2xhc3MuCgkqIGV4cHIuYyAoZXhwYW5kX2phdmFfTkVXKTogIENhbGwgbG9hZF9jbGFzcy4KCSogcGFyc2UueSAocHJvY2Vzc19pbXBvcnQpOiAgUmVtb3ZlZCBib2d1cyB1c2Ugb2Ygdm9pZCByZXR1cm4gdmFsdWUuCgpUaHUgSnVuIDI1IDExOjUwOjQ4IDE5OTggIFBlciBCb3RobmVyICA8Ym90aG5lckBjeWdudXMuY29tPgoKCSogZGVjbC5jLCBqYXZhLXRyZWUuaCAoc29mdF9hdGhyb3dfbm9kZSk6ICBSZW5hbWVkIHRvIHNvZnRfbm9kZS4KCUZ1bmN0aW9uIG5hbWUgaXMgIl9Kdl9UaHJvdyIgaW5zdGVhZCBvZiAic29mdF9hdGhyb3ciLgoJKiBkZWNsLmMsIGphdmEtdHJlZS5oIChzb2Z0X25ld19ub2RlKTogIFJlbmFtZWQgdG8gYWxsb2Nfb2JqZWN0X25vZGUuCglGdW5jdGlvbiBuYW1lIGlzICJfSnZfQWxsb2NPYmplY3QiIGluc3RlYWQgb2YgInNvZnRfbmV3Ii4KCVRha2VzIGFuIGV4dHJhIHBhcmFtZXRlciAob2JqZWN0IHNpemUpLgoJKiBleHByLmM6ICBVcGRhdGUgY2FsbHMuCgpXZWQgSnVuIDI0IDEzOjU5OjAyIDE5OTggIFBlciBCb3RobmVyICA8Ym90aG5lckBjeWdudXMuY29tPgoKCSogbGV4LmMgKGphdmFfZ2V0X2xpbmVfY29sKTogIEhhbmRsZSBlbmQtb2YtZmlsZS4KCSogZXhjZXB0LmMgKGV4cGFuZF9lbmRfamF2YV9oYW5kbGVyKTogIEhhbmRsZSBudWxsIHR5cGUgKGkuZS4gZmluYWxseSkuCgpXZWQgSnVuIDI0IDA5OjIyOjM0IEVEVCAxOTk4ICBBbmRyZXcgTWFjTGVvZCAgPGFtYWNsZW9kQGN5Z251cy5jb20+CgoJKiBsYW5nLmMgKGxhbmdfaW5pdCk6IE1ha2UgLWZleGNlcHRpb25zIHRoZSBkZWZhdWx0LgoJKiBleGNlcHQuYyAobWF5YmVfc3RhcnRfdHJ5LCBtYXliZV9lbmRfdHJ5KTogRG9uJ3QgZG8gYW55dGhpbmcgaWYKCWV4Y2VwdGlvbiBoYW5kbGluZyBpcyBub3QgdHVybmVkIG9uLgoKVHVlIEp1biAyMyAxMDoxNzowOSBFRFQgMTk5OCAgQW5kcmV3IE1hY0xlb2QgIDxhbWFjbGVvZEBjeWdudXMuY29tPgoKCSogbGFuZy5jIChmbGFnX25ld19leGNlcHRpb25zKTogTWFrZSB0aGlzIHRoaXMgZGVmYXVsdC4KCSogZGVjbC5jIChlbmRfamF2YV9tZXRob2QpOiBDYWxsIGVtaXRfaGFuZGxlcnMuCgkqIGV4Y2VwdC5jIChtZXRob2RfaW5pdF9leGNlcHRpb25zKTogU2V0IGxhbmd1YWdlIGNvZGUgYW5kIHZlcnNpb24uCgkoZXhwYW5kX3N0YXJ0X2phdmFfaGFuZGxlcik6IEVuYWJsZSBleGNlcHRpb24sIGFuZCBjYWxsCglleHBhbmRfZWhfcmVnaW9uX3N0YXJ0LgoJKGV4cGFuZF9lbmRfamF2YV9oYW5kbGVyKTogRW5hYmxlIGV4Y2VwdGlvbiwgYW5kIHNldCB1cCBjYXRjaCBibG9ja3MuCgkoZW1pdF9oYW5kbGVycyk6IE5ldyByb3V0aW5lIHRvIGdlbmVyYXRlIHRoZSBzYXZlZCBoYW5kbGVycy4KCSogamF2YS1leGNlcHQuaCAoZW1pdF9oYW5kbGVycyk6IEFkZCBwcm90b3R5cGUuCgpGcmkgSnVuIDEyIDExOjMxOjI0IDE5OTggIFBlciBCb3RobmVyICA8Ym90aG5lckBjeWdudXMuY29tPgoKCVdlIHVzZWQgdG8gaGF2ZSB0aHJlZSBkaWZmZXJlbnQgcmVwcmVzZW50YXRpb25zIG9mIHRoZSBjb25zdGFudCBwb29sOgoJdGhlIENQb29sIHN0cnVjdHVyZSwgdGhlIHRyZWVfY29uc3RhbnRfcG9vbCwgYW5kIHRoZSBjb25zdHJ1Y3R1cmVzCgl1c2VkIHRvIGJ1aWxkIHRoZSBDbGFzcyBvYmplY3QgKHdoaWNoIG1heSBuZWVkIGNsYXNzIGFuZCBzdHJpbmcKCWNvbnN0YW50cykgaW4gY29tcGlsZWQgY29kZS4gIE5vbmUgd2VyZSBhcHByb3ByaWF0ZSBmb3IgY29tcGlsaW5nCgl0byAuY2xhc3MgZmlsZXMsIHNvIEkgZGlkIGEgbWFqb3Igb3ZlcmhhdWwuCgoJRmlyc3QsIHRoZSB0cmVlX2NvbnN0YW50X3Bvb2wgYXJyYXkgd2FzIHJlbW92ZWQuICBUaGluZ3Mgd2VyZQoJbW9kaWZpZWQgdG8gdGhlIENQb29sIHN0cnVjdHVyZSBpbiB0aGUgSkNGIGNvdWxkIGJlIHVzZWQuCglTZWNvbmQsIGEgImNhcGFjaXR5IiBmaWVsZCB3YXMgYWRkZWQgdG8gdGhlIENQb29sLCBhbmQgZnVuY3Rpb25zCgl3cml0dGVuIHRvIHNlYXJjaCBmb3IgYSBtYXRjaGluZyBjb25zdGFudCwgYWRkaW5nIG9uZSBpZiBub3QgZm91bmQuCglUaGUgY29kZSB0aGF0IGdlbmVyYXRlZCB0aGUgQ2xhc3Mgb2JqZWN0IHdhcyBjaGFuZ2VkIHRvIHVzZSBhIENQb29sLgoJVGhlIGFjdHVhbCBUUkVFX0xJU1RzIHVzZWQgdG8gYnVpbGQgdGhlIENPTlNUUlVDVE9ScyB1c2VkIGZvcgoJdGhlIHN0YXRpYyBDbGFzcyBvYmplY3QgYXJlIG5vdyBvbmx5IGluIGJ1aWxkX2NvbnN0YW50c19jb25zdHJ1Y3Rvci4KCUZpbmFsbHksIEkgd3JvdGUgY29kZSB3aGljaCBjYW4gZ2VuZXJhdGUgYSAuY2xhc3MgZmlsZSAoaW5jbHVkaW5nIGl0cwoJY29uc3RhbnQgcG9vbCkgZnJvbSB0aGUgUkVDT1JEX1RZUEUgb2YgYSBjbGFzcy4gIFRoaXMgaXMgYSBiaWcgc3RlcAoJb24gdGhlIHdheSB0byBjb21waWxpbmcgSmF2YSBzb3VyY2UgaW50byAuY2xhc3MgZmlsZXMuCgoJKiBqY2Ytd3JpdGUuYzogIE5ldyBmaWxlLiBXcml0ZXMgb3V0IGEgUkVDT1JEX1RZUEUgYXMgYSAuY2xhc3MgZmlsZS4KCSogTWFrZWZpbGUuaW4gKEpBVkFfT0JKUyk6ICBBZGRlZCBqY2Ytd3JpdGUuby4KCgkqIGphdmEtdHJlZS5oIChDUE9PTF9VVEYsIENPTlNUQU5UX1Jlc29sdmVkRmxhZywKCUNPTlNUQU5UX1Jlc29sdmVkU3RyaW5nLCBDT05TVEFOVF9SZXNvbHZlZENsYXNzKTogIE5ldyBtYWNyb3MuCgkoTkFNRV9BTkRfVFlQRV9OQU1FLCBOQU1FX0FORF9UWVBFX1NJR05BVFVSRSwgQ09NUE9ORU5UX1JFRl9OQU1FLAoJQ09NUE9ORU5UX1JFRl9OQU1FX0FORF9UWVBFLCBDT01QT05FTlRfUkVGX1NJR05BVFVSRSk6IFJlZGVmaW5lZC4KCShDT01QT05FTlRfUkVGX0NMQVNTKTogIFJlcGxhY2VkIGJ5IENPTVBPTkVOVF9SRUZfQ0xBU1NfSU5ERVguCgkobGFuZ190eXBlKTogIFJlbW92ZWQgY29uc3RhbnRfcG9vbCBmaWVsZC4KCSogamNmLmggKENQb29sKTogIFJlbmFtZWQgc2l6ZSB0byBjb3VudC4gIEFkZGVkIGZpZWxkIGNhcGFjaXR5LgoJKENQT09fQ09VTlQsIENQT09MX1VJTlQsIENQT09MX1VTSE9SVDEsIENQT09MX1VTSE9SVDIsCglDUE9PTF9GSU5JU0gsIENQT09MX0lOSVQsIENQT09MX1JFSU5JVCk6ICBOZXcgbWFjcm9zLgoJUmV3cml0ZSBzb21lIG9mIHRoZSBvbGQgSkNGX1hYWCBpbiB0ZXJtcyBvZiBDUE9PTF9YWFggbWFjcm9zLgoKCSogY29uc3RhbnRzLmMgKGN1cnJlbnRfY29uc3RhbnRfcG9vbF90YWdzLCBjdXJyZW50X2NvbnN0YW50X3Bvb2xfZGF0YSwKCWN1cnJlbnRfY29uc3RhbnRfcG9vbF9sZW5ndGgpLCBqYXZhLXRyZWUuaDogUmVwbGFjZWQgYnkgb3V0Z29pbmdfY3Bvb2wuCgkqIGNvbnN0YW50cy5jIChidWlsZF9jb25zdGFudHNfY29uc3RydWN0b3IpOiAgVXNlIG5ldyBvdXRnb2luZ19jcG9vbC4KCShzZXRfY29uc3RhbnRfZW50cnksIGZpbmRfY29uc3RhbnQxLCBmaW5kX2NvbnN0YW50MiwKCWZpbmRfY2xhc3NfY29uc3RhbnQsIGNvdW50X2NvbnN0YW50X3Bvb2xfYnl0ZXMsIHdyaXRlX2NvbnN0YW50X3Bvb2wsCglmaW5kX3V0ZjhfY29uc3RhbnQsIGZpbmRfY2xhc3Nfb3Jfc3RyaW5nX2NvbnN0YW50KTogIE5ldyBmdW5jdGlvbnMuCgoJKiBqY2YtcGFyc2UuYyAobG9hZF9jbGFzcyk6ICBEb24ndCBzYXZlL3Jlc3RvcmUgdHJlZS1jb25zdGFudF9wb29sLgoJKGdldF9jb25zdGFudCk6ICBVc2UgY3VycmVudF9qY2YuY3Bvb2wgaW5zdGVhZCBvZiB0cmVlX2NvbnN0YW50X3Bvb2wuCgkoZ2l2ZV9uYW1lX3RvX2NsYXNzLCBnZXRfY2xhc3NfY29uc3RhbnQpOiAgTGlrZXdpc2UuCgkqIGpjZi1wYXJzZS5jLCBqYXZhLXRyZWUuaCAodHJlZV9jb25zdGFudF9wb29sKTogIFJlbW92ZWQuCgkoZ2V0X25hbWVfYW5kX3R5cGVfY29uc3RhbnQsIGdldF9yZWZfY29uc3RhbnQpOiAgUmVtb3ZlZC4KCSogcGFyc2UuaCAocGFyc2VyX2N0eHQpOiAgUmVtb3ZlIGZpZWxkIHRyZWVfY29uc3RhbnRfcG9vbC4KCSogcGFyc2UueTogIERvbid0IHNhdmUvcmVzdG9yZSB0cmVlX2NvbnN0YW50X3Bvb2wuCgkqIHZlcmlmeS5jICh2ZXJpZnlfanZtX2luc3RydWN0aW9ucyk6ICBVcGRhdGUgZm9yIG5ldyBhcHByb2FjaC4KCSogZXhwci5jIChleHBhbmRfaW52b2tlLCBleHBhbmRfamF2YV9maWVsZF9vcCk6IExpa2V3aXNlLgoKCSogbGFuZy1vcHRpb25zLmg6ICBBZGRlZCAtZmVtaXQtY2xhc3MtZmlsZSwgLWZlbWl0LWNsYXNzLWZpbGVzLgoJKiBsYW5nLmMgKGZsYWdfZW1pdF9jbGFzc19maWxlcyksIGphdmEtdHJlZS5oOiAgTmV3IGZsYWcuCgkobGFuZ19mX29wdGlvbnMpOiAgQWRkZWQgImVtaXQtY2xhc3MtZmlsZShzKSIuCgoJKiBleHByLmMgKGJ1aWxkX2phdmFfYXJyYXlhY2Nlc3MpOiAgR2VuZXJhdGUgbW9yZSBlZmZpY2llbnQgYXJyYXkKCWJvdW5kcyBjaGVja2luZywgYnkgdXNpbmcgdW5zaWduZWQgY29tcGFyZS4KCgkqIGV4cHIuYyAoZXhwYW5kX2ludm9rZSk6ICBSZS1hcnJhbmdlIGVycm9yIGNoZWNrcyB0byBtYWtlIG1vcmUgcm9idXN0LgoKV2VkIEp1biAxMCAxNzozNDo0MiAxOTk4ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIHBhcnNlLmg6IE5ldyBjb21tZW50IG9uIHRoZSBoYW5kbGluZyBvZiB1bnJlc29sdmVkIHR5cGUKCWlkZW50aWZpZXJzLiBKREVQcyBhcmUgbm93IHBhcnQgb2YgdGhlIGpkZXBfY29kZSBlbnVtLgoJKHR5cGVkZWYgc3RydWN0IGpkZXApOiBOb3cgdXNlIGVudW0gamRlcF9jb2RlIG9yIGludCwgZGVwZW5kaW5nIG9uCglhdmFpbGFiaWxpdHkuIEJvdGggYXJlIG5hcnJvd2VkIGRvd24gdG8gYW4gOCBiaXRzIGJpdGZpZWxkLgoJKENBTExfRVhQUl9QUklNQVJZKTogRml4ZWQgY29tbWVudC4KCldlZCBKdW4gMTAgMTA6NTQ6MzkgMTk5OCAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgoKCSogTWFrZS1sYW5nLmluIChqYXZhKTogQWRkZWQgZ2phdmFjIGFuZCBqdmdlbm1haW4uCgkoamF2YS5zdGFydC5lbmNhcCk6IERlcGVuZCBvbiBnamF2YWMuCgkoamF2YS5yZXN0LmVuY2FwKTogRGVwZW5kIG9uIGp2Z2VubWFpbi4KCgkqIE1ha2UtbGFuZy5pbiAoSkFWQV9JTlNUQUxMX05BTUUpOiBOYW1lIGlzIGdqYXZhYywgbm90IGMrKy4KCShKQVZBX0NST1NTX05BTUUpOiBMaWtld2lzZS4KCShqYXZhLmFsbC5idWlsZCk6IERlcGVuZCBvbiBqdmdlbm1haW4gYW5kIGdqYXZhYy4KCShqYXZhLmFsbC5jcm9zcyk6IERlcGVuZCBvbiBqdmdlbm1haW4gYW5kIGdqYXZhYy1jcm9zcy4KCShqdmdlbm1haW4kKGV4ZWV4dCkpOiBOZXcgdGFyZ2V0LgoJKGphdmEuaW5zdGFsbC1jb21tb24pOiBXcm90ZS4KCSogY29uZmlnLWxhbmcuaW4gKGNvbXBpbGVycywgc3RhZ2VzdHVmZik6IEFkZGVkIGdqYXZhYyBhbmQKCWp2Z2VubWFpbi4KCldlZCBKdW4gMTAgMTI6MTk6MDQgMTk5OCAgRGF2ZSBCcm9sbGV5ICA8YnJvbGxleUBjeWdudXMuY29tPgoKCSogbGFuZy5jIChsYW5nX2RlY29kZV9vcHRpb24pOiBOZXcgYXJnYy9hcmd2IGludGVyZmFjZS4KClR1ZSBKdW4gIDkgMTg6MTI6NDYgMTk5OCAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBDaGFuZ2VMb2c6IEZpeGVkIGVudHJpZXMgbm90IGNvbXBsaWFudCB3aXRoIHRoZSBHbnUgQ29kaW5nIFN0YW5kYXJkLgoJKiBkZWNsLmMgKGJ1aWxkX2RlY2xfbm9fbGF5b3V0KTogTmV3IGZ1bmN0aW9uLgoJKiBleHByLmMgKGphdmFfbGFuZ19leHBhbmRfZXhwcik6IExheW91dCBkZWNsYXJhdGlvbnMgZm91bmQgaW4KCWJsb2NrcyBiZWZvcmUgdGhleSdyZSBwdXNoZWQuCgkqIGpjZi1wYXJzZS5jIChsb2FkX2NsYXNzKTogU2F2ZSBjdXJyZW50IGxpbmUgd2hlbiBwYXJzaW5nIGNsYXNzCglmaWxlLgoJKHBhcnNlX3NvdXJjZV9maWxlKTogUmVnaXN0ZXIgY2xhc3MgYmVmb3JlIGV4cGFuZGluZyB0aGVpcgoJbWV0aG9kcy4KCSogbGFuZy5jIChwdXRfZGVjbF9ub2RlKTogUHJvZHVjZSBgbnVsbCcgd2hlbiBgdm9pZCAqJyBpcwoJcHJvY2Vzc2VkLgoJKiBsZXguYyAoc3RhdGljIHRyZWUgd2ZsX29wKTogTmV3IHN0YXRpYyBnbG9iYWwsIGZvciBlcnJvciByZXBvcnQKCW9uIGNhc3RzLgoJKGphdmFfaW5pdF9sZXgpOiB3Zmxfb3BlcmF0b3IgYW5kIHdmbF9vcCBpbml0aWFsaXplZAoJaGVyZS4gRmlsZW5hbWUgY2FjaGluZyBhZGRlZCBmb3Igd2ZsX29wLiBSZXR1cm4gd2ZsX29wIHdoZW4gYCgnIGlzCglwYXJzZWQuCgkqIHBhcnNlLmggKGJ1aWxkX3VuYXJ5b3AsIGJ1aWxkX2luY2RlYywgcGF0Y2hfdW5hcnlvcCwgYnVpbGRfY2FzdCwKCXBhdGNoX2Nhc3QsIHZhbGlkX3JlZl9hc3NpZ25jb252X2Nhc3RfcCwgY2FuX2Nhc3RfdG9fcCwKCWJ1aWxkX3VucmVzb2x2ZWRfYXJyYXlfdHlwZSk6IE5ldyBzdGF0aWMgZnVuY3Rpb24gZGVmaW5pdGlvbnMuCgkoYnVpbGRfZGVjbF9ub19sYXlvdXQpOiBOZXcgZXh0ZXJuIGZ1bmN0aW9uIGRlY2xhcmVkLgoJKE9CU09MRVRFX01PRElGSUVSX1dBUk5JTkcpOiBSZXBvcnQgZXJyb3Igb25seSBpZiB0aGUgV0ZMIG9mIHRoZQoJZmF1bHR5IG1vZGlmaWVyIGV4aXN0cy4KCShUWVBFX0lOVEVSRkFDRV9QLCBUWVBFX0NMQVNTX1ApOiBOZXcgbWFjcm9zLgoJKEVSUk9SX0NBU1RfTkVFREVEX1RPX0lOVEVHUkFMKTogRXJyb3IgbWVzc2FnZSB0dW5lZC4KCShVTkFSWV9QTFVTX0VYUFIpOiBOZXcgZmFrZSBvcGVyYXRvci4KCShzdHJ1Y3QgcGFyc2VyX2N0eHQpOiBOZXcgZmllbGQgb3NiX251bWJlci4KCSogcGFyc2UueSAoc3RhdGljIHRyZWUgd2ZsX29wZXJhdG9yKTogTmV3IHN0YXRpYyBXRkwgZm9yIG9wZXJhdG9yCglib3VuZCBlcnJvciBtZXNzYWdlcy4KCShERUNSX1RLLCBJTkNSX1RLKTogTW92ZWQuCgkoT1BfVEspOiBUYWdnZWQgPG9wZXJhdG9yPi4KCShhcnJheV90eXBlOik6IE5vdyBjYWxsIGJ1aWxkX3VucmVzb2x2ZWRfYXJyYXlfdHlwZS4KCShkaW1fZXhwcjopOiBDb3VudCB0aGUgbnVtYmVyIG9mICdbJyBzZWVuLgoJKHBvc3RfaW5jcmVtZW50X2V4cHJlc3Npb24sIHBvc3RfZGVjcmVtZW50X2V4cHJlc3Npb24sCglwcmVfaW5jcmVtZW50X2V4cHJlc3Npb24sIHByZV9kZWNyZW1lbnRfZXhwcmVzc2lvbiwKCXVuYXJ5X2V4cHJlc3Npb25fbm90X3BsdXNfbWludXMsIHVuYXJ5X2V4cHJlc3Npb246KTogQWN0aW9ucyBhcmUKCW5vdyBidWlsZGluZyB0aGUgY29ycmVzcG9uZGluZyB1bmFyeSBleHByZXNzaW9ucy4KCShjYXN0X2V4cHJlc3Npb246KTogQWN0aW9ucyBhcmUgbm93IGJ1aWxkaW5nIGNhc3QgZXhwcmVzc2lvbnMuCgkoYnVpbGRfdW5yZXNvbHZlZF9hcnJheV90eXBlKTogTmV3IGZ1bmN0aW9uLgoJKGNyZWF0ZV9pbnRlcmZhY2UpOiBSZXNldCB0aGUgbnVtYmVyIG9mIGRlY2xhcmVkIGludGVyZmFjZXMuCgkoY3JlYXRlX2NsYXNzKTogTGlrZXdpc2UuCgkobWV0aG9kX2hlYWRlcik6IE1ldGhvZHMgZGVjbGFyZWQgd2l0aGluIHRoZSBzY29wZSBvZiBhbiBpbnRlcmZhY2UKCWFyZSBub3cgaW1wbGljaXRseSBzZXQgcHVibGljIGFuZCBhYnN0cmFjdC4KCShqYXZhX2NvbXBsZXRlX2NsYXNzKTogVmFyaWFibGUncyBhbmQgcGFyYW1ldGVyJ3MgdHlwZSBhcmUgcGF0Y2hlZAoJd2l0aCBhIHByb21vdGVkIHR5cGUuCgkoZGVjbGFyZV9sb2NhbF92YXJpYWJsZXMpOiBSZXNvbHZlZCBub24gYnVpbHRpbiB0eXBlcyBhcmUgcHJvbW90ZWQKCWJlZm9yZSBiZWluZyB1c2VkIHRvIGJ1aWxkIGEgdmFyaWFibGUgZGVjbC4gUmVtb3ZlZCB0eXBlIHBhdGNoCglwb3N0ZWQgb24gdmFyaWFibGUgaW5pdGlhbGl6YXRpb24gc3RhdGVtZW50LgoJKHNvdXJjZV9zdGFydF9qYXZhX21ldGhvZCk6IFVzZSBidWlsZF9kZWNsX25vX2xheW91dCB0byBidWlsZCB0aGUKCWRlY2wgb2YgYSBwYXJhbWV0ZXIgb2YgaW5jb21wbGV0ZSB0eXBlLgoJKGphdmFfcmVnaXN0ZXJfcGFyc2VkX2NsYXNzKTogUHJvY2VzcyBpbnRlcmZhY2VzIHRvby4gQ2FsbAoJcmVzdF9vZl9kZWNsX2NvbXBpbGF0aW9uIG9uIGVhY2ggcHJvY2Vzc2VkIGNsYXNzIGRlY2xhcmF0aW9ucy4KCShqYXZhX2NvbXBsZXRlX2V4cGFuZF9tZXRob2RzKTogRG9uJ3QgYXR0ZW1wdCB0byBleHBhbmQgdGhpbmdzIGluCglpbnRlcmZhY2VzLgoJKGphdmFfY29tcGxldGVfdHJlZSk6IFByb2Nlc3MgQ09OVkVSVF9FWFBSLCBldmVuIHRob3VnaCBpdCBhbHdheXMKCWhhcyBhIHR5cGUuIFByb3BhZ2F0ZSBlcnJvcl9tYXJrX25vZGUgdG8gbm9kZSdzIHR5cGUgdG9vLiBQcm9tb3RlCgltZXRob2QncyBjYWxsIGFyZ3VtZW50IHR5cGUgYW5kIHJldHVybiBlcnJvcl9tYXJrX25vZGUgaWYKCWFyZ3VtZW50J3MgY29tcGxldGlvbiBkaWRuJ3Qgd29yay4gTU9ESUZZX0VYUFIgY2FuIGhhdmUgYSBXRkwgYXMgYQoJUkhTLiBGaXhlZCBidWcgaW4gdGhlIGhhbmRsaW5nIG9mIGJvZ3VzIFJIUyBvZiBhIGZpeGVkIHR5cGUuIE5vdwoJaGFuZGxlIHVuYXJ5IG9wZXJhdG9yIG5vZGVzLgoJKGJ1aWxkX2Fzc2lnbm1lbnQpOiBBZGRlZCBjb21tZW50LgoJKHByaW50X2ludF9ub2RlKTogTmV3IGZ1bmN0aW9uLgoJKHBhdGNoX2Fzc2lnbm1lbnQpOiBOZXcgc2Vjb25kIGFyZ3VtZW50LiBOZXcgZXJyb3IgaGFuZGxpbmcuIFVzZQoJcHJpbnRfaW50X25vZGUuIEhhbmRsZSByZWZlcmVuY2VzLiBVc2UgY2FuX2Nhc3RfdG9fcCB0byBpc3N1ZQoJZGlmZmVyZW50IGVycm9yIG1lc3NhZ2UgYWNjb3JkaW5nIHRvIHRoZSBjb250ZXh0IGFuZCBjaGVjayB1cG9uCgl0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIFJIUy4KCShjYW5fY2FzdF90b19wLCB2YWxpZF9yZWZfYXNzaWduY29udl9jYXN0X3ApOiBOZXcgZnVuY3Rpb25zLgoJKG9wZXJhdG9yX3N0cmluZyk6IEhhbmRsZSBtb3JlIG9wZXJhdG9ycy4KCShwYXRjaF9iaW5vcCk6IE5vIGxvbmdlciB1c2UgYSBmdW5jdGlvbiBzdGF0aWMKCXdmbF9vcGVyYXRvci4gSW1wcm92ZWQgZXJyb3IgbWVzc2FnZSBvbiBzaGlmdCBkaXN0YW5jZS4KCShidWlsZF91bmFyeW9wLCBidWlsZF9pbmNkZWMsIGJ1aWxkX2Nhc3QsIHBhdGNoX3VuYXJ5b3AsCglwYXRjaF9jYXN0KTogTmV3IGZ1bmN0aW9ucy4KCkZyaSBKdW4gIDUgMTg6MDM6MDcgMTk5OCAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGN5Z251cy5jb20+CgoJKiBqdnNwZWMuYzogIE5ldyBmaWxlLgoJKiBNYWtlLWxhbmcuaW46ICBOZXcgcnVsZXMgdG8gYnVpbGQgZ2phdmFjIGZyb20ganZzcGVjLmMgYW5kIC4uL2djYy5jLgoKCSogamF2YS10cmVlLmggKGlkZW50aWZpZXJfc3Vic3QpOiAgQWRkIGRlY2xhcmF0aW9uLgoKVGh1IEp1biAgNCAxMzo0NDoyMyAxOTk4ICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CgoJKiBqdmdlbm1haW4uYyAobWFpbik6IEdlbmVyYXRlIGNhbGwgdG8gSnZSdW5NYWluLgoKCSogY2xhc3MuYyAobWFrZV9jbGFzc19kYXRhKTogUHVzaCB2YWx1ZSBmb3IgInN5bmNfaW5mbyIgZmllbGQuCgkqIGRlY2wuYyAoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBQdXNoICJzeW5jX2luZm8iIGZpZWxkLgoKV2VkIEp1biAgMyAyMDozOToxNCAxOTk4ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAY3lnbnVzLmNvbT4KCgkqIHR5cGVjay5jIChidWlsZF9qYXZhX2FycmF5X3R5cGUpOiAgU2V0IFRZUEVfTkFNRSB0byBhY3R1YWwKCUphdmEgKHNvdXJjZSkgbmFtZSwgbm90IHNpZ25hdHVyZS4KCVNldCBUWVBFX0FMSUdOIHRvIChhdCBsZWFzdCkgdGhhdCBvZiBlbGVtZW50X3R5cGUuCgpUdWUgSnVuICAyIDE1OjE5OjE5IDE5OTggIFBlciBCb3RobmVyICA8Ym90aG5lckBjeWdudXMuY29tPgoKCSogY2xhc3MuYzogIE1vdmVkIGNsYXNzbmFtZS1tYW5nbGluZy1yZWthdGVkIGNvZGUgdG8gLi4uCgkqIG1hbmdsZS5jOiAgLi4uIHRoaXMgbmV3IGZpbGUuCgkqIGp2Z2VubWFpbi5jOiAgTmV3IHByb2dyYW0gKG5lZWRzIG1hbmdsZS5jKSB0byBnZW5lcmF0ZSBtYWluIHByb2dyYW0uCgkqIE1ha2VmaWxlLmluOiAgVXBkYXRlIGZvciBhYm92ZSBjaGFuZ2VzLgoKTW9uIEp1biAgMSAwOTo1ODozNiAxOTk4ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIGV4cHIuYyAodHJ1dGh2YWx1ZV9jb252ZXJzaW9uKTogQ29udmVydCBpbnRlZ2VyIGFuZCBmbG9hdGluZwoJcG9pbnQgdmFsdWUgdG8gdGhlaXIgdHJ1dGggdmFsdWUuCgkqIGxleC5jIChqYXZhX2xleCk6IEhhbmRsZSB0aGUgYG51bGwnIGxpdGVyYWwuCgkqIHBhcnNlLmggKEpSRUZFUkVOQ0VfVFlQRV9QLCBERUNMX1ApOiBOZXcgbWFjcm9zLgoJKEVSUk9SX0NBTlRfQ09OVkVSVF9UT19CT09MRUFOLCBFUlJPUl9DQU5UX0NPTlZFUlRfVE9fTlVNRVJJQywKCUVSUk9SX0NBU1RfTkVFREVEX1RPX0lOVEVHUkFMLCBFUlJPUl9WQVJJQUJMRV9OT1RfSU5JVElBTElaRUQpOgoJTmV3IG1hY3Jvcy4KCgkqIHBhcnNlLnk6IFJlb3JnYW5pemF0aW9uL2RvY3VtZW50YXRpb24gb24gdG9rZW4gZGVjbGFyYXRpb24uCgkoYmlub3BfbG9va3VwW10pOiBOZXcgYWRkZWQgbmV3IHRyZWUgY29kZXMuCgkocmVsYXRpb25hbF9leHByZXNzaW9uKTogQnVpbGQgY29ycmVzcG9uZGluZyBiaW5hcnkgb3BlcmF0b3JzLgoJKGVxdWFsaXR5X2V4cHJlc3Npb24sIGNvbmRpdGlvbmFsX2FuZF9leHByZXNzaW9uLAoJY29uZGl0aW9uYWxfb3JfZXhwcmVzc2lvbik6IExpa2V3aXNlLgoJKGphdmFfY29tcGxldGVfY2xhc3MpOiBGaXggY3Jhc2ggaW4gZGVidWcgbWVzc2FnZS4KCShqYXZhX2NvbXBsZXRlX3RyZWUpOiBDaGVjayBpbml0aWFsaXphdGlvbiBvZiBtZXRob2QgY2FsbAoJYXJndW1lbnRzLiBGdXJ0aGVyIGJvZ3VzIG5vZGUgZXZhbHVhdGlvbiB0byBkZXRlY3QgbW9yZSBlcnJvcgoJZHVyaW5nIGFzc2lnbm1lbnRzLiBIYW5kbGVzIG1vcmUgYmluYXJ5IG9wZXJhdG9ycy4KCShwYXRjaF9hc3NpZ25tZW50KTogVXNlIERFQ0xfUC4KCShidWlsZF9iaW5vcCk6IEZpeCBjcmFzaCB3aGVuIHVzaW5nIFVSU0hJRlRfRVhQUiwgYSBKYXZhIG9ubHkgdHJlZQoJY29kZS4KCShvcGVyYXRvcl9zdHJpbmcpOiBIYW5kbGUgbW9yZSBjYXNlLiBDb21wYWN0ZWQgc291cmNlLgoJKHBhdGNoX2Jpbm9wKTogQ2hhbmdlZCBmdW5jdGlvbiBjb21tZW50LiBDaGVja2luZyBmb3IKCXVuaW5pdGlhbGl6ZWQgZmlyc3Qgb3BlcmFuZCB0YWtlcyB0aGUgY29tcG91bmQgYXNzaWdubWVudCBpbnRvCglhY2NvdW50IGFuZCB1c2VzIERFQ0xfUC4gQ2hlY2tpbmcgZm9yIHVuaW5pdGlhbGl6ZWQgc2Vjb25kIG9wZXJhbmQKCWRlbGF5ZWQgdG8gcm91dGluZSdzIGVuZC4gVXNlIG1hY3JvcyB0byBpc3N1ZSB0eXBlIGJvdW5kIGVycm9yCgltZXNzYWdlcyBhbmQgaXNzdWUgbWVzc2FnZXMgb24gYm90aCBvcGVyYW5kcyBpZiB0aGVpciB0eXBlcyBhcmUKCWRpZmZlcmVudC4gRm9yY2UgZml4ZWQgdHlwZSBpbnRvIG5vZGUuIEhhbmRsZSBhbGwgYmluYXJ5CglvcGVyYXRvcnMuCgpXZWQgTWF5IDI3IDEwOjMwOjMxIDE5OTggIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogamF2YS10cmVlLmggKENPTVBPVU5EX0FTU0lHTl9QLCBJTklUSUFMSVpFRF9QKTogTmV3IG1hY3Jvcy4KCSogbGV4LmMgKGphdmFfbGV4KTogVXNlIEJVSUxEX09QRVJBVE9SIGFuZCBCVUlMRF9PUEVSQVRPUjIgdG8KCWJ1aWxkIG9wZXJhdG9yIG5vZGUgYW5kIHJldHVybiB0b2tlbnMuCgkqIGxleC5oIChCVUlMRF9PUEVSQVRPUiwgQlVJTERfT1BFUkFUT1IyKTogTmV3IG1hY3Jvcy4KCSogcGFyc2UuaCAoamF2YV9jb21wbGV0ZV90cmVlKTogQ2hhbmdlZCByZXR1cm5lZCB0eXBlIGluIHByb3RvdHlwZS4KCShidWlsZF9tZXRob2RfaW52b2NhdGlvbiwgYnVpbGRfYXNzaWdubWVudCwgcGF0Y2hfYXNzaWdubWVudCwKCXBhdGNoX2Jpbm9wKTogTmV3IHN0YXRpYyBmdW5jdGlvbiBkZWNsYXJhdGlvbnMuCgkoSkZMT0FUX1RZUEVfUCwgSk5VTUVSSUNfVFlQRV9QLCBKUFJJTUlUSVZFX1RZUEVfUCwgSlNUUklOR19QLAoJQlVJTERfRVhQUl9XRkwpOiBOZXcgbWFjcm9zLgoJKiBwYXJzZS55IChlbnVtIHRyZWVfY29kZSBiaW5vcF9sb29rdXBbXSk6IE5ldyBzdGF0aWMgZm9yIHRva2VuIHRvCglUUkVFX0NPREUgbG9va3VwLgoJKCV1bmlvbik6IFBhcnNlciB1bmlvbiBoYXMgbmV3IHN1Yi1zdHJ1Y3R1cmUgYG9wZXJhdG9yJy4KCShBU1NJR05fVEssIE1VTFRfQVNTSUdOX1RLLCBESVZfQVNTSUdOX1RLLCBSRU1fQVNTSUdOX1RLLAoJUExVU19BU1NJR05fVEssIE1JTlVTX0FTU0lHTl9USywgTFNfQVNTSUdOX1RLLCBTUlNfQVNTSUdOX1RLLAoJWlJTX0FTU0lHTl9USywgQU5EX0FTU0lHTl9USywgWE9SX0FTU0lHTl9USywgT1JfQVNTSUdOX1RLLAoJQVNTSUdOX0FOWV9USyk6IFRva2VucyB0YWdnZWQgYG9wZXJhdG9yJy4KCShFUV9USywgR1RFX1RLLCBaUlNfVEssIFNSU19USywgR1RfVEssIExURV9USywgTFNfVEssIEJPT0xfQU5EX1RLLAoJQU5EX1RLLCBCT09MX09SX1RLLCBPUl9USywgSU5DUl9USywgUExVU19USywgREVDUl9USywgTUlOVVNfVEssCglNVUxUX1RLLCBESVZfVEssIFhPUl9USywgUkVNX1RLLCBORVFfVEssIE5FR19USywgUkVMX1FNX1RLLAoJUkVMX0NMX1RLLCBOT1RfVEssIExUX1RLKTogVG9rZW5zIHRhZ2dlZCBgb3BlcmF0b3InLgoJKGFzc2lnbm1lbnRfb3BlcmF0b3I6KTogUnVsZSB0YWdnZWQgYG9wZXJhdG9yJy4KCShleHByZXNzaW9uX3N0YXRlbWVudDopOiBSZS1pbnN0YWxsZWQgZGVmYXVsdCBydWxlLgoJKG1ldGhvZF9pbnZvY2F0aW9uOik6IFN1YiBydWxlcyBjYWxsIGJ1aWxkX21ldGhvZF9pbnZvY2F0aW9uLgoJKHBvc3RmaXhfZXhwcmVzc2lvbjopOiBEb24ndCBhdHRlbXB0IHRvIHJlc29sdmUgbmFtZSBoZXJlLiBKdXN0CglyZXR1cm4gYW4gSUQuCgkobXVsdGlwbGljYXRpdmVfZXhwcmVzc2lvbjopOiBTdWItcnVsZXMgYnVpbGQgY29ycmVzcG9uZGluZyBiaW5vcAoJZXhwcmVzc2lvbiBub2RlLgoJKGFkZGl0aXZlX2V4cHJlc3Npb246LCBzaGlmdF9leHByZXNzaW9uOiwgYW5kX2V4cHJlc3Npb246LAoJZXhjbHVzaXZlX29yX2V4cHJlc3Npb246LCBpbmNsdXNpdmVfb3JfZXhwcmVzc2lvbjopOiBMaWtld2lzZS4KCShhc3NpZ25tZW50Oik6IFN1YiBydWxlIGludm9rZSBidWlsZF9hc3NpZ25tZW50LgoJKGFzc2lnbm1lbnRfb3BlcmF0b3I6KTogRGVmYXVsdCBydWxlcyBvbiBzdWIgcnVsZXMuCgkoZm9yY2VfZXJyb3IpOiBBZGRlZCBkb2N1bWVudGF0aW9uIG9uIHRoaXMgdmFyaWFibGUuCgkoZGVjbGFyZV9sb2NhbF92YXJpYWJsZXMpOiBCdWlsZCBpbml0aWFsaXphdGlvbiBjYWxsaW5nCglidWlsZF9hc3NpZ25tZW50LgoJKGV4cGFuZF9zdGFydF9qYXZhX21ldGhvZCk6IFJlbW92ZWQgdW51c2VkIHJ0eCBkZWNsYXJhdGlvbi4gTWFyawoJYXJndW1lbnRzIGFzIGFscmVhZHkgaW5pdGlhbGl6ZWQuCgkoamF2YV9tZXRob2RfYWRkX3N0bXQpOiBUeXBlIG9mIGJ1aWx0IENPTVBPVU5EX0VYUFIgc2V0IHRvIE5VTEwuCgkoamF2YV9jb21wbGV0ZV9leHBhbmRfbWV0aG9kcyk6IERvbid0IHByb2Nlc3MgbmV4dCBtZXRob2QgaWYKCWNvbXBsZXRpb24gb2YgdGhlIHByZXZpb3VzIG9uZSB0cmlnZ2VyZWQgZXJyb3JzLgoJKGphdmFfY29tcGxldGVfZXhwYW5kX21ldGhvZCk6IENhbGwgc291cmNlX2VuZF9qYXZhX21ldGhvZCBpZiBubwoJZXJyb3Igd2VyZSBmb3VuZCBkdXJpbmcgY29tcGxldGlvbi4KCShyZXNvbHZlX2V4cHJlc3Npb25fbmFtZSk6IFVzZSBJREVOVElGSUVSX0xPQ0FMX1ZBTFVFIHRvIHJldHJpZXZlCglsb2NhbHMgZGVjbGFyYXRpbG9uLiBIYW5kbGUgbmFtZXMgZm91bmQgd2l0aGluIGEgY2xhc3MuIFJldHVybgoJZXJyb3JfbWFya19ub2RlIHdoZW4gdGhpbmdzIGFyZW4ndCBmb3VuZC4KCShwYXRjaF9tZXRob2RfaW52b2NhdGlvbl9zdG10KTogUmV0dXJuIGVycm9yX21hcmtfbm9kZSBvbiBmYWlsdXJlcy4KCShwYXRjaF9pbnZva2UpOiBSZW1vdmVkIHVudXNlZCBsb2NhbC4gUmV0dXJuIHRoZSBjb3JyZWN0IG5vZGUuCgkoamF2YV9jb21wbGV0ZV90cmVlKTogTm93IHJldHVybnMgYSB2YWx1ZS4gVGhlIEJMT0NLIHNlY3Rpb24gYmluZHMKCWxvY2FsIGlkZW50aWZpZXJzIGFuZCB0aGUgdHlwZSBvZiBhIEJMT0NLIGlzIG5vdyB2b2lkLiBBc3NpZ24gdGhlCglyZXN1bHQgb2Ygb3BlcmFuZCBjb21wbGV0aW9uIG9uIENPTVBPVU5EX0VYUFIuIEFzc2lnbiB0aGUKCWVuY2Fwc3VsYXRlZCBub2RlIG9mIGEgV0ZMIHRvIHRoZSByZXN1bHQgb2YgaXRzIGNvbXBsZXRpb24sIGV4Y2VwdAoJd2hlbiB0aGUgbm9kZSBpcyBhbiBpZGVudGlmaWVyLiBOb3cgaGFuZGxlIE1PRElGWV9FWFBSIGFuZCBzZXZlcmFsCgliaW5hcnkgb3BlcmF0b3JzLiBSZXR1cm4gZXJyb3JfbWFya19ub2RlIG9uIGVycm9ycy4KCShidWlsZF9tZXRob2RfaW52b2NhdGlvbiwgYnVpbGRfYXNzaWdubWVudCwgcGF0Y2hfYXNzaWdubWVudCwKCWJ1aWxkX2Jpbm9wLCBvcGVyYXRvcl9zdHJpbmcsIHBhdGNoX2Jpbm9wKTogTmV3IGZ1bmN0aW9ucy4KCSogdHlwZWNrLmMgKGJpbmFyeV9udW1lcmljX3Byb21vdGlvbik6IE5ldyBmdW5jdGlvbi4KClRodSBNYXkgMjEgMTI6MDE6MDQgMTk5OCAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGN5Z251cy5jb20+CgoJKiBjbGFzcy5jIChpZGVudGlmaWVyX3N1YnN0KTogIE5ldyBjb252ZW5pZW5jZSB3cmFwcGVyIGZvciBpZGVudF9zdWJzdC4KCVJlcGxhY2UgbW9zdCB1c2VzIG9mIGlkZW50X3N1YnN0IGJ5IGlkZW50aWZpZXJfc3Vic3QuCgoJKiBjbGFzcy5jIChwdXNoX2NsYXNzX3N0YXRpY19kdW1teV9maWVsZCk6ICBSZW1vdmVkIGZ1bmN0aW9uLgoJKGJ1aWxkX2NsYXNzX3JlZik6ICBGaW5kIENsYXNzIG9iamVjdCBkZWNsIGJ5IGxvb2tpbmcgdXAgIkNOQU1FLmNsYXNzIiwKCWluc3RlYWQgb2YgbG9va2luZyBnb3QgImNsYXNzIiBzdGF0aWMgZmllbGQuICBDcmVhdGUgdGhhdCBkZWNsIGhlcmUuCgkoY2xhc3NfaWRlbnRpZmllcl9ub2RlKTogIFJlbW92ZWQ7ICBubyBsb25nZXIgbmVlZGVkLgoJKGluaXRfY2xhc3NfcHJvY2Vzc2luZyk6ICBEb24ndCBpbml0IGNsYXNzX2lkZW50aWZpZXJfbm9kZS4KCSogamNmLXBhcnNlLmMgKGpjZl9wYXJzZSk6ICBEb24ndCBjYWxsIHB1c2hfY2xhc3Nfc3RhdGljX2R1bW15X2ZpZWxkLgoJRG8gbnJldmVyc2UgMCB0aW1lcyAoaW5zdGVhZCBvZiB0d2ljZSkgZm9yIE9iamVjdCBhbmQgQ2xhc3MuCgkqIHBhcnNlLnkgKGphdmFfbGF5b3V0X3BhcnNlZF9jbGFzcyk6IE5vIHB1c2hfY2xhc3Nfc3RhdGljX2R1bW15X2ZpZWxkLgoKV2VkIE1heSAyMCAxNjozNTowNCAxOTk4ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAY3lnbnVzLmNvbT4KCgkqIGpjZi1wYXJzZS5jIChwYXJzZV9jbGFzcy1maWxlKTogIFNldCBsaW5vIHRvIHNtYWxsZXN0IGxpbmUgbnVtYmVyLAoJd2hpbGUgaW5pdGlhbGl6aW5nIGxpbmVudW1iZXJfY291bnQgYW5kIGxpbmVudW1iZXJfdGFibGUuCglEbyBpdCBiZWZvcmUgaW5pdF9mdW5jdGlvbl9zdGFydCAod2hpY2ggY2FsbHMgZW1pdF9saW5lX25vdGUpLgoJKiBleHByLmMgKGV4cGFuZF9ieXRlX2NvZGUpOiAgRG9uJ3QgbmVlZCB0byBjbGVhciBsaW5lbm8gaGVyZS4KCk1vbiBNYXkgMTggMTY6MjM6MzIgMTk5OCAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgoKCSogY2xhc3MuYyAoYXBwZW5kX2dwcF9tYW5nbGVkX3R5cGUpOiBJZiBgcXVhbGlmaWNhdGlvbnMnIGlzID49OSwKCXRoZW4gbWFuZ2xlIG51bWJlciBhcyBfTl8uCgoJKiBjbGFzcy5jIChtYW5nbGVfY2xhc3NfZmllbGQpOiBOZXcgZnVuY3Rpb24uCgkoYnVpbGRfY2xhc3NfcmVmKTogU2V0IGFzc2VtYmxlciBuYW1lIG9mIGNsYXNzIHJlZmVyZW5jZSB1c2luZwoJbWFuZ2xlX2NsYXNzX2ZpZWxkLgoJKHB1c2hfY2xhc3Nfc3RhdGljX2R1bW15X2ZpZWxkKTogTGlrZXdpc2UuCgpTdW4gTWF5IDE3IDEyOjUyOjM1IDE5OTggIE1pY2hhZWwgVGllbWFubiA8dGllbWFubkBjeWdudXMuY29tPgoKCSogcGFyc2UueSAoc291cmNlX3N0YXJ0X2phdmFfbWV0aG9kKTogVXNlIFRSRUVfU0VUX0NPREUgaW5zdGVhZAoJb2YgYXNzaWduaW5nIHRvIFRSRUVfQ09ERS4gIFRoZSBsYXR0ZXIgbWV0aG9kIGV4cGxvaXRzIGEgZmVhdHVyZQoJb2YgR0NDIHRoYXQgaXMgbm90IEFOU0kgY29tcGxpYW50LgoKVGh1IE1heSAxMiAxMzo0NDoyNyAxOTk4ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAocHVzaGRlY2xfZm9yY2VfaGVhZCk6IE5ldyBmdW5jdGlvbi4KCShwdXNobGV2ZWwpOiBSZW1vdmVkIGNvbmRpdGlvbmFsIHByaW50Zi4KCShjb21wbGV0ZV9zdGFydF9qYXZhX21ldGhvZCk6IERvbid0IGVudGVyIGxvY2FsIHZhcmlhYmxlIHNjb3BlIGlmCglmdW5jdGlvbiBpcyBjb21waWxlZCBmcm9tIHNvdXJjZSBjb2RlLgoJKiBleHByLmM6IHBhcnNlLmggbm93IGluY2x1ZGVkCgkoamF2YV9sYW5nX2V4cGFuZF9leHByKTogTmV3IGZ1bmN0aW9uLgoJKiBqY2YtaW8uYyAoZmluZF9jbGFzcyk6IFVzZSBTT1VSQ0VfRlJPTlRFTkRfREVCVUcgaW5zdGVhZCBvZgoJcHJpbnRmLiBUZXJtaW5hdGUgYnVmZmVyIHdoZW4gZG9pbmcgZGlyZWN0b3JpZXMuCgkqIGpjZi1wYXJzZS5jIChwYXJzZV9zb3VyY2VfZmlsZSk6IENhbGwgbGFuZ19pbml0X3NvdXJjZSBiZWZvcmUKCXBhcnNpbmcgYW5kIGJlZm9yZSBjb2RlIGdlbmVyYXRpb24uCgkqIGpjZi5oIChTT1VSQ0VfRlJPTlRFTkRfREVCVUcpOiBNYWNybyByZWRlZmluZWQgdG8gY29uZGl0aW9uYWxseQoJdXNlIHByaW50ZiBpZiB0aGUgbWFjcm8gaXMgZGVmaW5lZC4KCSogbGFuZy5jIChsYW5nX2luaXQpOiBJbnN0YWxsIGxhbmdfZXhwYW5kX2V4cHIgaG9vayBvbgoJamF2YV9sYW5nX2V4cGFuZF9leHByLgoJKGphdmFfZHVtbXlfcHJpbnQpOiBOZXcgZnVuY3Rpb24uCgkobGFuZ19pbml0X3NvdXJjZSk6IE5ldyBmdW5jdGlvbi4KCSogbGV4LmMgKGphdmFfbGV4KTogUmVtZW1iZXIgbG9jYXRpb24gb2YgYW4gb3BlbmluZyBicmFjZSBhdCB0aGUKCXNlY29uZCBuZXN0aW5nIGxldmVsLgoJKGphdmFfaXNfZW9sKTogVW5nZXQgY2hhcmFjdGVyIHNlZW4gYWZ0ZXIgYSBDUiBpZiBpdCBpcyBFT0YuCgkqIHBhcnNlLmg6IE5vdyBpbmNsdWRlcyBsZXguaAoJKFNPVVJDRV9GUk9OVEVORF9ERUJVRyk6IE1hY3JvIHJlZGVmaW5lZCB0byBjb25kaXRpb25hbGx5IHVzZQoJcHJpbnRmIGlmIHRoZSBtYWNybyBpcyBkZWZpbmVkLgoJKGV4cGFuZF9zdGFydF9qYXZhX21ldGhvZCwgYnVpbGRfZXhwcl9ibG9jaywgZW50ZXJfYmxvY2ssCglleGl0X2Jsb2NrLCBsb29rdXBfbmFtZV9pbl9ibG9ja3MsIG1heWJlX2Fic29yYl9zY29waW5nX2Jsb2Nrcyk6CglOZXcgc3RhdGljIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucy4KCShwdXNoZGVjbF9mb3JjZV9oZWFkKTogTmV3IGV4dGVybiBmdW5jdGlvbiBkZWNsYXJhdGlvbi4KCShJTkNPTVBMRVRFX1RZUEVfUCk6IE5ldyBtYWNyby4KCShKREVQX1BBUk0sIEpERVBfVFlQRSk6IE5ldyBlbnRyaWVzIGluIEpERVBzIGVudW0uCgkoQkxPQ0tfQ0hBSU5fREVDTCwgQkxPQ0tfRVhQUl9ERUNMUywgQkxPQ0tfRVhQUl9CT0RZLAoJQkxPQ0tfRVhQUl9PUklHSU4pOiBOZXcgbWFjcm9zLgoJKERFQ0xfU09VUkNFX0xJTkVfTUVSR0UsIERFQ0xfU09VUkNFX0xJTkVfRklSU1QsCglERUNMX1NPVVJDRV9MSU5FX0xBU1QpOiBOZXcgbWFjcm9zLgoJKHN0cnVjdCBwYXJzZXJfY3R4dCk6IFJlbW92ZWQgZmllbGQgY3VycmVudF9tZXRob2RfZGVjbCwgcmVkdW5kYW50Cgl3aXRoIHRoZSBmaWVsZCBjdXJyZW50X2Z1bmN0aW9uX2RlY2wuIEFkZGVkIGZpZWxkcwoJZmlyc3RfY2NiX2luZGVudDEgYW5kIHBlbmRpbmdfYmxvY2suCgkqIHBhcnNlLnkgKG1ldGhvZF9ib2R5LCBsaXRlcmFsLCBJTlRfTElUX1RLLCBGUF9MSVRfVEssCglCT09MX0xJVF9USywgQ0hBUl9MSVRfVEssIFNUUklOR19MSVRfVEssIE5VTExfVEssIFZPSURfVEspOiBSdWxlcwoJdGFnZ2VkIDxub2RlPgoJKFNPVVJDRV9GUk9OVEVORF9ERUJVRyk6IFVzZWQgYXMgbWFjcm8gYWNjZXB0aW5nIHZhcmFyZ3MuCgkoY29tcGlsYXRpb25fdW5pdDopOiBDb3NtZXRpYyBvbiBzdWIgcnVsZS4KCSh0eXBlX2RlY2xhcmF0aW9uOik6IENvc21ldGljIG9uIHN1YiBydWxlcy4gQWRkZWQgYW4gZXJyb3IgcnVsZS4KCSh2YXJpYWJsZV9pbml0aWFsaXplcjopOiBJbnN0YWxsZWQgZGVmYXVsdCBydWxlIG9uIGV4cHJlc3Npb246LgoJKG1ldGhvZF9kZWNsYXJhdGlvbjopOiBtZXRob2RfaGVhZGVyOiBzdGFydHMgYSBuZXcKCW1ldGhvZC4gbWV0aG9kX2JvZHk6IGluc3RhbGxzIHRoZSBmdW5jdGlvbiBib2R5LCBhYnNvcmJzIGJsb2NrcwoJZW1pdHRlZCBmb3IgdGVtcG9yYXJ5IHZhcmlhYmxlIHNjb3BpbmdzLCBwb3BzIGZ1bmN0aW9uJ3MgYm9keSBibG9jawoJYW5kIG1lcmdlcyBmdW5jdGlvbidzIGxhc3Qgc3RhdGVtZW50IGxpbmVubyBpbiBERUNMX1NPVVJDRV9MSU5FLgoJKG1ldGhvZF9ib2R5Oik6IEluc3RhbGxlZCBkZWZhdWx0IHJ1bGVzLgoJKGJsb2NrOik6IENhbGwgZW50ZXJfYmxvY2sgd2hlbiBhbiBvcGVuaW5nIGJyYWNlIGlzIHNlZW4uICBBYnNvcmIKCXNjb3BpbmcgYmxvY2tzIGFuZCBjYWxsIGV4aXRfYmxvY2sgd2hlbiBhIGNsb3NpbmcgYnJhY2UgaXMgc2Vlbi4KCShibG9ja19zdGF0ZW1lbnQ6KTogQ29zbWV0aWMgY2hhbmdlcy4KCShtZXRob2RfaW52b2NhdGlvbjopOiBDcmVhdGUgV0ZMIGFyb3VuZCBDQUxMX0VYUFIgbm9kZS4KCShwYXRjaF9zdGFnZSk6IEFkZGVkIGNvbW1lbnQgYXJvdW5kIGRlZmluaXRpb24uCgkobWV0aG9kX2hlYWRlcik6IFRyeSB0byB1c2UgZmlyc3RfY2NiX2luZGVudDEgYXMgdGhlIGZpcnN0IGxpbmUgb2YKCXRoZSBtZXRob2QsIHNvIEJQIGRlYnVnIGluZm8gYXJlIGVtaXR0ZWQgYXQgdGhlIGZpcnN0IG9wZW5pbmcKCWJyYWNlIG9mIHRoZSBmdW5jdGlvbi4gSWYgdGhlIGZ1bmN0aW9uIGhhcyBubyBib2R5LCB1c2UgdGhlCglsb2NhdGlvbiBvZiB0aGUgZnVuY3Rpb24ncyBuYW1lLiBPdmVycmlkZSBjdXJyZW50bHkgZGVmaW5lZCBtZXRob2QKCW5hbWUgd2l0aCB0aGUgbWF0Y2hpbmcgV0ZMIHNvIHdlIGNhbiBwb2ludCByZWRlZmluaXRpb24gZXJyb3JzCgl1c2luZyB0aGUgbG9jYXRpb24gd2hlcmUgdGhlIGZ1bmN0aW9uJ3MgbmFtZSB3YXMgZGVjbGFyZWQuCgkoY2hlY2tfYWJzdHJhY3RfbWV0aG9kX2hlYWRlcik6IEludGVycHJldHMgREVDTF9OQU1FIGFzIGFuCglpZGVudGlmaWVyIG9yIGFzIGEgV0ZMLCBhY2NvcmRpbmdseS4KCShqYXZhX2NvbXBsZXRlX2NsYXNzKTogTmV3IGNhc2VzIGZvciBKREVQX1RZUEUgYW5kIEpERVBfUEFSTS4KCShjaGVja19tZXRob2RfcmVkZWZpbml0aW9uKTogVXNlIERFQ0xfTkFNRSBhcyBhIFdGTC4gRXh0cmFjdAoJbG9jYXRpb24gYW5kIG5hbWUgaW5mb3JtYXRpb24gb3V0IG9mIGl0IGFuZCByZWluc3RhbGwgREVDTF9OQU1FIHRvCglpdHMgb3JpZ2luYWwgaWRlbnRpZmllciBub2RlIHZhbHVlLgoJKGxvb2t1cF9jbCk6IFVzZSBERUNMX1NPVVJDRV9MSU5FX0ZJUlNUIChmaXJzdCBsaW5lIG9mIHRoZQoJZnVuY3Rpb24ncyBzb3VyY2UgY29kZSkuCgkocmVhZF9pbXBvcnRfZGlyKTogVGVzdCB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgZmluZF9jbGFzcyBhbmQgaXNzdWUKCWEgZmF0YWwgYWNjb3JkaW5nbHkuCgkoZGVjbGFyZV9sb2NhbF92YXJpYWJsZXMpOiBQdXNoIGEgbmV3IGJsb2NrIGZvciB0aGUgc2NvcGUgb2YgdGhlCgluZXcgdmFyaWFibGUocykgaWYgY29kZSBoYXMgYmVlbiBhbHJlYWR5IGdlbmVyYXRlZCBhdCB0aGF0IG5lc3RpbmcKCWxldmVsLiBQaW5wb2ludCByZWRlZmluaXRpb24gZXJyb3JzIHVzaW5nIHRoZSB2YXJpYWJsZSBpZAoJV0ZMcy4gR2VuZXJhdGUgaW5pdGlhbGl6YXRpb24gY29kZSBpZiBuZWNlc3NhcnkuIElmIHRoZSB2YXJpYWJsZQoJdHlwZSBpcyBpbmNvbXBsZXRlLCByZWdpc3RlciBhIHBhdGNoIG9uIGl0cyBkZWNsLgoJKHNvdXJjZV9zdGFydF9qYXZhX21ldGhvZCk6IFJld3JpdHRlbi4gRGVmaW5lIGEgbmV3IGJsb2NrIGZvciB0aGUKCWZ1bmN0aW9uJ3MgcGFyYW1ldGVycy4gQnVpbGQgcGFyYW1ldGVyIGRlY2wgb3V0IG9mIGZ1bmN0aW9uJ3MKCWFyZ3VtZW50cyBhbmQgcmVnaXN0ZXIgdGhlbSBmb3IgYSBwYXRjaCBpZiB0aGVpciB0eXBlcyBhcmUKCWluY29tcGxldGUuCgkoZXhwYW5kX3N0YXJ0X2phdmFfbWV0aG9kKTogSW5jbHVkZXMgdGhlIHBhcnQgb2YKCXNvdXJjZV9zdGFydF9qYXZhX21ldGhvZCB0aGF0IHdhcyBwdXNoaW5nIHRoZSBwYXJhbWV0ZXIgZGVjbHMgYW5kCgljb21wbGV0aW5nIHRoZSBtZXRob2Qgc3RhcnQgY29kZS4KCShzb3VyY2VfZW5kX2phdmFfbWV0aG9kKTogUmVtb3ZlZCBjYWxsIHRoZSBleHBhbmRfZW5kX2JpbmRpbmdzIGFuZAoJcG9wbGV2ZWwgKGFscmVhZHkgdGFrZW4gY2FyZSBvZikuIFJlaW5zdGFsbCBmdW5jdGlvbidzIGFyZ3VtZW50cwoJYW5kIGdldCBmdW5jdGlvbidzIGxhc3QgbGluZSBvZiBjb2RlIGJlZm9yZSBjYWxsaW5nCglleHBhbmRfZnVuY3Rpb25fZW5kLgoJKGphdmFfbWV0aG9kX2FkZF9zdG10KTogTmV3IGNvbW1lbnQgYmVmb3JlIHRoZSBmdW5jdGlvbidzCgljb2RlLiBDb21wbGVtZW50IHRoZSBzZWNvbmQgb3BlcmFuZCBvZiB0aGUgY3VycmVudCBDT01QT1VORF9FWFBSCglpZiBuZWNlc3NhcnkuCgkoamF2YV9jb21wbGV0ZV9leHBhbmRfbWV0aG9kcyk6IERvbid0IGdlbmVyYXRlIGRlYnVnIGluZm8gb24gbGluZQoJemVybyB3aGVuIGV4cGFuZGluZyBhIGdlbmVyYXRlZCBjb25zdHJ1Y3Rvci4KCShqYXZhX2NvbXBsZXRlX2V4cGFuZF9tZXRob2QpOiBTZXQgc3RhcnQgYW5kIGVuZCBsaW5lIG51bWJlcnMgZm9yCglhIGFydGlmaWNpYWxseSBnZW5lcmF0ZWQgY29uc3RydWN0b3IgdG8gb25lIGFuZCBtYW51YWxseSBjYWxsCgllbnRlcl9ibG9jayBhbmQgZXhpdF9ibG9jayB3aGVuIGRlZmluaW5nIGl0LiBGb3IgYWxsIG1ldGhvZHM6CglleHBhbmQgZnVuY3Rpb24ncyBzdGFydCBjYWxsaW5nIHRoZSBuZXcgZXhwYW5kX3N0YXJ0X2phdmFfbWV0aG9kCglhbmQgaW52b2tlIGphdmFfY29tcGxldGVfdHJlZSBvbiB0aGUgZWZmZWN0aXZlIG1ldGhvZCdzIGJvZHksIGlmCglhbnkuCgkocmVzb2x2ZV9leHByZXNzaW9uX25hbWUpOiBOb3cgdXNlIGxvb2t1cF9uYW1lX2luX2Jsb2NrcyB0byBzZWFyY2gKCWxvY2FsIHZhcmlhYmxlIGRlY2xzIGFuZCBwcmludCBvdXQgYW4gZXJyb3Igd2hlbiB2YXJpYWJsZXMgYXJlCgl1bmRlZmluZWQuCgkocGF0Y2hfbWV0aG9kX2ludm9jYXRpb25fc3RtdCk6IEluc2VydGVkIGNvbW1lbnQgYmVmb3JlIHRoZQoJZnVuY3Rpb24ncyBjb2RlLgoJKGxvb2t1cF9tZXRob2RfaW52b2tlKTogQ2hhaW4gbWV0aG9kJ3MgYXJndW1lbnRzIHVzaW5nIGNoYWlub24KCXdpdGggdGhlIGN1cnJlbnQgYXJnIGxpc3QgYXMgYSBzZWNvbmQgYXJndW1lbnQuIEluc2VydGVkIG1pc3NpbmcKCUlERU5USUZJRVJfUE9JTlRFUiB3aGVuIHJlcG9ydGluZyBhbiBlcnJvciBvbiBtZXRob2RzIG5vdCBmb3VuZC4KCShyZWZpbmVfYWNjZXNzaWJsZV9tZXRob2RzX2xpc3QpOiBEb24ndCByZXRhaW4gY29uc3RydWN0b3JzLgoJKHBhdGNoX2FyZ3VtZW50cyk6IEZ1bmN0aW9uIHJlbW92ZWQuCgkoamF2YV9jb21wbGV0ZV90cmVlKTogSW5zZXJ0ZWQgY29tbWVudCBiZWZvcmUgdGhlIGZ1bmN0aW9uJ3MKCWNvZGUuIE5ldyBjYXNlIGZvciBCTE9DS3MuIE1vdmVkIHRoZSBXRkwgY2FzZSBhIGJpdAoJZnVydGhlci4gQ29tcGxldGUgZnVuY3Rpb24ncyBhcmd1bWVudHMuCgkoYnVpbGRfZXhwcl9ibG9jaywgZW50ZXJfYmxvY2ssIGV4aXRfYmxvY2ssIGxvb2t1cF9uYW1lX2luX2Jsb2NrcywKCW1heWJlX2Fic29yYl9zY29waW5nX2Jsb2Nrcyk6IE5ldyBmdW5jdGlvbnMuCgpNb24gQXByIDI3IDEwOjUwOjA1IDE5OTggIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogamNmLWlvLmMgKGZpbmRfY2xhc3MpOiBSZXNldCBqY2YtPmphdmFfc291cmNlIGFmdGVyIEpDRl9aRVJPLCBpZgoJcHJldmlvdXNseSBzZXQuCgkqIGpjZi1wYXJzZS5jIChwYXJzZV9zb3VyY2VfZmlsZSwgamF2YV9lcnJvcl9jb3VudCk6IE5ldyBmb3J3YXJkCglhbmQgZXh0ZXJuIGRlY2xhcmF0aW9ucy4KCShqYXZhX3BhcnNlX2Fib3J0X29uX2Vycm9yKTogTWFjcm8gbW92ZWQuCgkoamNmX3BhcnNlX3NvdXJjZSk6IGZhdGFsIGNhbGxlZCBpZiBmb3BlbiBmYWlscy4gTm93IGNhbGxzCglwYXJzZV9zb3VyY2VfZmlsZS4KCShwYXJzZV9zb3VyY2VfZmlsZSk6IE5ldyBwYXJzZV9vbmx5IHBhcmFtZXRlci4gUmVmbGVjdHMgdGhlCgllbGltaW5hdGlvbiBvZiB0aGUgc2Vjb25kIHBhc3MuCgkoeXlwYXJzZSk6IHBhcnNlX3NvdXJjZV9maWxlIGNhbGxlZCB3aXRoIGFyZ3VtZW50IHNldCB0byAwLgoJKiBqY2YuaCAoSkNGX1pFUk8pOiBTZXRzIGphdmFfc291cmNlIHRvIHplcm8uCgkqIGxleC5jIChqYXZhX2luaXRfbGV4KTogcGFzcyBhcmd1bWVudCBpcyBnb25lLiBGdW5jdGlvbiBtb2RpZmllZAoJdG8gYmUgY2FsbGVkIG9uY2UgZHVyaW5nIHRoZSBhbmFseXNpcyBvZiBhIGZpbGUuCgkoamF2YV91bmdldF91bmljb2RlKTogRml4ZWQgdHlwbyBpbiBmYXRhbCBtZXNzYWdlLgoJKGphdmFfZ2V0X2xpbmVfY29sKTogTGlrZXdpc2UuCgkoamF2YV9sdmFsKTogTGlrZXdpc2UuIFN0cmluZyBsaXRlcmFscyBubyBsb25nZXIgYnVpbHQgZHVyaW5nCglzZWNvbmQgcGFzcy4KCSogbGV4LmggKEpBVkFfQ09MVU1OX0RFTFRBKTogVGFrZSB0aGUgdGFidWxhdGlvbiBjaGFyYWN0ZXIgaW50bwoJYWNjb3VudC4KCSogcGFyc2UuaCAoTU9ESUZJRVJfV0ZMKTogTmV3IG1hY3JvLgoJKHBhcnNlX2NoZWNrX3N1cGVyLCBwYXJzZXJfY2hlY2tfc3VwZXJfaW50ZXJmYWNlKTogTm93IHJldHVybiBpbnQuCgkocGFyc2VyX2NoYWluX2luY29tcGxldGVfaXRlbSwgbm90X2J1aWx0aW5fcCwKCWNvbXBsZXRlX21ldGhvZF9kZWNsKTogRGVjbGFyYXRpb25zIHJlbW92ZWQuCgkoYnVpbGRfbWV0aG9kX2ludm9jYXRpb25fc3RtdCwgYnVpbGRfaW52b2tlKTogUmVuYW1lZCB1c2luZyB0aGUKCWBwYXRjaCcgaW5zdGVhZCBvZiBgYnVpbGQnCgkocmVnaXN0ZXItaW5jb21wbGV0ZV90eXBlLCBvYnRhaW5faW5jb21wbGV0ZV90eXBlLAoJamF2YV9jb21wbGV0ZV90cmVlLCBqYXZhX2NvbXBsZXRlX2V4cGFuZF9tZXRob2QsCgl1bnJlc29sdmVkX3R5cGVfcCwgY3JlYXRlX2pkZXBfbGlzdCk6IE5ldyBmdW5jdGlvbiBkZWNsYXJhdGlvbnMuCgkoSUNfVFlQRSwgSUNfREVQRU5ELCBERVBFTkRfREVDTCwgREVQRU5EX1dGTCwgQkVHSU5fT05MWV9QQVNTLAoJRU5EX09OTFlfUEFTUywgRUxTRV9PTkxZX1BBU1MpOiBNYWNybyBkZWxldGVkLgoJKGpkZXApOiBOZXcgdHlwZWRlZiBvbiBuZXcgc3RydWN0IF9qZGVwLgoJKEpERVBfREVDTCwgSkRFUF9ERUNMX1dGTCwgSkRFUF9LSU5ELCBKREVQX1NPTFYsIEpERVBfV0ZMLAoJSkRFUF9NSVNDLCBKREVQX0FQUExZX1BBVENILCBKREVQX0dFVF9QQVRDSCwgSkRFUF9DSEFJTiwKCUpERVBfVE9fUkVWT0xWRSwgSkRFUF9SRVNPTFZFRF9ERUNMLCBKREVQX1JFU09MVkVELAoJSkRFUF9SRVNPTFZFRF9QKTogTmV3IG1hY3Jvcy4KCShKREVQX05PX1BBVENILCBKREVQX1NVUEVSLCBKREVQX0ZJRUxELCBKREVQX01FVEhPRCwKCUpERVBfTUVUSE9EX1JFVFVSTiwgSkRFUF9NRVRIT0RfRU5ELCBKREVQX0lOVEVSRkFDRSwKCUpERVBfVkFSSUFCTEUpOiBOZXcgZW51bSB2YWx1ZXMgYW5kIGpkZXAga2luZHMuCgkoamRlcGxpc3QpOiBOZXcgdHlwZWRlZiBvbiBzdHJ1Y3QgX2pkZXBsaXN0LgoJKENMQVNTRF9GSVJTVCwgQ0xBU1NEX0xBU1QsIENMQVNTRF9DSEFJTiwgSkRFUF9JTlNFUlQpOiBOZXcKCW1hY3Jvcy4KCShDQUxMX0VYUFJfUFJJTUFSWSk6IE5ldyBtYWNyby4KCShzdHJ1Y3QgcGFyc2VyX2N0eHQpOiBGaWVsZHMgamF2YV9wYXNzLCBjdXJyZW50X21ldGhvZF9kZWNsLAoJbWV0aG9kX2RlY2xfbGlzdCBkZWxldGVkLiBOZXcgZmllbGQgamRlcGxpc3QuCgkoSU5DT01QTEVURV9QKTogTWFjcm8gZGVsZXRlZC4KCSogcGFyc2UueSAoc2luZ2xlX3R5cGVfaW1wb3J0X2RlY2xhcmF0aW9uOik6IFJlbW92ZWQgcGFzcyBzd2l0Y2guCgkodHlwZV9pbXBvcnRfb25fZGVtYW5kX2RlY2xhcmF0aW9uKTogTGlrZXdpc2UuCgkoZmllbGRfZGVjbGFyYXRpb246KTogUmVtb3ZlZCBwYXNzIHN3aXRjaCBvbiBhbGwgc3ViIHJ1bGVzLgoJKGNsYXNzX2RlY2xhcmF0aW9uOik6IENhbGwgdGhlIGNvbXBsZXRlX2NsYXNzX2RlY2wgcmVtb3ZlZCBvbgoJY2xhc3NfYm9keSBydWxlcy4KCShtZXRob2RfZGVjbGFyYXRpb246KTogUmVtb3ZlZCBzZWNvbmQgcGFzcyBzd2l0Y2guIE5vIGxvbmdlciBjaGFpbgoJbWV0aG9kcyBkZWNsIHdoZW4gbWV0aG9kX2hlYWRlciByZWR1Y2VkLgoJKG1ldGhvZF9oZWFkZXI6KTogU3ViIHJ1bGVzIG5vIGxvbmdlciBkZXBlbmQgb24gcGFzcyBzd2l0Y2guCgkobWV0aG9kX2RlY2xhcmF0b3I6KTogTGlrZXdpc2UuCgkobWV0aG9kX2JvZHk6KTogTGlrZXdpc2UuCgkoYWJzdHJhY3RfbWV0aG9kX2RlY2xhcmF0aW9uOik6IExpa2V3aXNlLgoJKGJsb2NrX3N0YXRlbWVudDopOiBMaWtld2lzZS4KCShsb2NhbF92YXJpYWJsZV9kZWNsYXJhdGlvbjopOiBMaWtld2lzZS4KCShhcmd1bWVudF9saXN0Oik6IExpa2V3aXNlLgoJKG1ldGhvZF9pbnZvY2F0aW9uOik6IExpa2V3aXNlLiBDYWxsIHRvCWJ1aWxkX21ldGhvZF9pbnZvY2F0aW9uX3N0bXQKCXJlbW92ZWQuIFBhcnRpYWwgQ0xBU1NfRVhQUiB0cmVlIG5vZGUgYnVpbHQgaW5zdGVhZC4KCShwb3N0Zml4X2V4cHJlc3Npb246KTogUmVtb3ZlZCBwYXNzIHN3aXRjaCBvbiBhbGwgc3ViIHJ1bGVzLgoJKGphdmFfcG9wX3BhcnNlcl9jb250ZXh0KTogRnJlZSBjbGFzc2RfbGlzdCBjb250ZW50LgoJKHl5ZXJyb3IpOiBDYWxsIG9ic3RyYWNrX2dyb3cwIHRvIGZpbmFsaXplIGVycm9yIG1lc3NhZ2UuCgkoY2hlY2tfY2xhc3NfaW50ZXJmYWNlX2NyZWF0aW9uKTogQ29tbWVudCBtb2RpZmllZCB0byByZWZsZWN0IG5ldwoJcmV0dXJuZWQgdmFsdWUgbWVhbmluZy4gUmVtb3ZlZCBzZWNvbmQgcGFzcyBzd2l0Y2guIFJldHVybiAxIGlmIGFuCgllcnJvciB3YXMgZm91bmQsIDAgb3RoZXJ3aXNlLiBBZGp1c3QgcG9pbnRlciBvbiBmaWxlbmFtZSBpZiBhCglsZWFkaW5nIHBhdGggc2VwYXJhdG9yIHdhcyBmb3VuZC4KCShtYXliZV9jcmVhdGVfY2xhc3NfaW50ZXJmYWNlX2RlY2wpOiBSZW1vdmVkIGZpcnN0IHBhc3Mgc3dpdGNoCgl3aGVuIGxpbmtpbmcgdGhlIGNsYXNzIGRlY2wgdG8gdGhlIGNsYXNzX2xpc3QuIEluc3RhbGwgYSBuZXcKCWpkZXBfbGlzdCBmb3IgdGhlIGNsYXNzLgoJKGFkZF9zdXBlcmludGVyZmFjZXMpOiBMaXN0IG9mIHVucmVzb2x2ZWQgaW50ZXJmYWNlcyBpcwoJZ29uZS4gVW5yZXNvbHZlZCBpbnRlcmZhY2VzIGFyZSBkaXJlY3RseSBhZGRlZCB0byB0aGUgY3VycmVudAoJZGVwZW5kZW5jaWVzIGxpc3QuCgkoY3JlYXRlX2ludGVyZmFjZSk6IFNlY29uZCBwYXNzIHNob3J0Y3V0IHJlbW92ZWQuCgljdHB4LT5tb2RpZmllcl9jdHggYWNjZXNzIHRocm91Z2ggTU9ESUZJRVJfV0ZMLgoJKGNyZWF0ZV9jbGFzcyk6IFNlY29uZCBwYXNzIHNob3J0Y3V0IHJlbW92ZWQuIENhbGwgdG8KCXJlZ2lzdGVyX2luY29tcGxldGVfdHlwZSByZXBsYWNlcyB0aGUgY2FsbCB0bwoJcGFyc2VyX2NoYWluX2luY29tcGxldGVfaXRlbS4KCShjb21wbGV0ZV9jbGFzc19kZWNsKTogRnVuY3Rpb24gcmVtb3ZlZC4KCShkdXBsaWNhdGVfZGVjbGFyYXRpb25fZXJyb3IpOiBOZXcgd2F5IG9mIHJldHJpZXZpbmcgcmVkZWNsYXJlZAoJaXRlbSB0eXBlLgoJKHJlZ2lzdGVyX2ZpZWxkcyk6IENhbGwgdG8gbG9va3VwX21vZGlmaWVyX2NsIHJlcGxhY2VkIGJ5CglNT0RJRklFUl9XRkwuIE5ldyB3YXkgb2YgaGFuZGxpbmcgdW5yZXNvbHZlZCB0eXBlLCB1c2luZwoJdW5yZXNvbHZlZF90eXBlX3AgYW5kIG9idGFpbl9pbmNvbXBsZXRlX3R5cGUuCglyZWdpc3Rlcl9pbmNvbXBsZXRlX3R5cGUgcmVwbGFjZXMgY2FsbCB0byBwYXJzZXJfY2hhaW5faW5jb21wbGV0ZV9pdGVtLgoJKHBhdGNoX3N0YWdlKTogTmV3IHN0YXRpYyBnbG9iYWwgdmFyaWFibGUuCgkobWV0aG9kX2hlYWRlcik6IE5ldyB3YXkgb2YgaGFuZGxpbmcgdW5yZXNvbHZlZCB0eXBlLCB1c2luZwoJdW5yZXNvbHZlZF90eXBlX3AgYW5kIG9idGFpbl9pbmNvbXBsZXRlX3R5cGUuIHBhdGNoX3N0YWdlIHVzZWQgdG8KCWluZGljYXRlcyB0aGF0IHRoZSBtZXRob2QgZGVjbCBuZWVkcyB0byBiZSBwYXRjaGVkLgoJKGNoZWNrX2Fic3RyYWN0X21ldGhvZF9oZWFkZXIpOiBDYWxsIHRvIGxvb2t1cF9tb2RpZmllcl9jbAoJcmVwbGFjZWQgYnkgTU9ESUZJRVJfV0ZMLgoJKG1ldGhvZF9kZWNsYXJhdG9yKTogSW5jb21wbGV0ZSBhcmd1bWVudCB0eXBlIGFyZSByZWdpc3RlcmVkCgljYWxsaW5nIHJlZ2lzdGVyX2luY29tcGxldGVfdHlwZS4gUGF0Y2ggb24gdGhlIGRlY2xhcmVkIG1ldGhvZCBpcwoJaXNzdWVkIGluIHRoYXQgY2FzZS4KCSh1bnJlc29sdmVkX3R5cGVfcCk6IE5ldyBmdW5jdGlvbi4KCShwYXJzZXJfY2hlY2tfc3VwZXJfaW50ZXJmYWNlKTogTmV3IGNvbW1lbnQgdG8gcmVmbGVjdCBmdW5jdGlvbidzCgltb2RpZmllZCByZXR1cm5lZCB0eXBlIChpbnQpLiBGdW5jdGlvbiBhbmQgaGFzIGEgbmV3IGFyZ3VtZW50Cgl0aGlzX3dmbC4gQ2FsbCB0byBwYXJzZV9lcnJvcl9jb250ZXh0IHVzZXMgdGhpc193ZmwgaW5zdGVhZCBvZgoJcmVseWluZyBvbiBsb29rdXBfY2wuCgkocGFyc2VyX2NoZWNrX3N1cGVyKTogQ29tbWVudCByZWZsZWN0cyBmdW5jdGlvbidzIG5ldyByZXR1cm5lZAoJdHlwZSAoaW50KS4gRnVuY3Rpb24gcmV0dXJucyBub24gemVybyB2YWx1ZSBvbiBlcnJvci4KCShjcmVhdGVfamRlcF9saXN0LCByZXZlcnNlX2pkZXBfbGlzdCwgb2J0YWluX2luY29tcGxldGVfdHlwZSwKCXJlZ2lzdGVyX2luY29tcGxldGVfdHlwZSwgamRlcF9yZXNvbHZlX2NsYXNzKTogTmV3IGZ1bmN0aW9ucyB0bwoJaGFuZGxlIGluY29tcGxldGUgdHlwZXMgaW4gZGVjbGFyYXRpb25zLgoJKGphdmFfY29tcGxldGVfY2xhc3MpOiBSZXdyaXR0ZW4gdG8gd29yayB3aXRoIHRoZSBuZXcgaW5jb21wbGV0ZQoJdHlwZSBoYW5kbGluZyBzY2hlbWUuCgkoY29tcGxldGVfY2xhc3NfcmVwb3J0X2Vycm9ycyk6IExpa2V3aXNlLgoJKGNvbXBsZXRlX21ldGhvZF9kZWNsKTogUmVtb3ZlZDogaXQgam9icyBpcyBub3cgaGFuZGxlZCBieQoJamF2YV9jb21wbGV0ZV9jbGFzcy4KCShkb19yZXNvbHZlX2NsYXNzKTogQ2xhc3MgbG9hZGVkIGluIG5vdCBhbHJlYWR5IGxvYWRlZCBhbmQgbm90Cglmb3VuZCBpbiBKYXZhIHNvdXJjZSBjb2RlLgoJKGphdmFfY2hlY2tfcmVndWxhcl9tZXRob2RzLCBqYXZhX2NoZWNrX2Fic3RyYWN0X21ldGhvZHMpOiBEb24ndAoJY2FsbCBjb21wbGV0ZV9tZXRob2RfZGVjbCBhbnltb3JlLgoJKGxvb2t1cF9tb2RpZmllcl9jbCwgbm90X2J1aWx0aW5fcCk6IEZ1bmN0aW9ucyBkZWxldGVkLgoJKHJlYWRfaW1wb3J0X2Rpcik6IEdvdCByaWQgb2YgdGhlIHBhc3MgbnVtYmVyIGRlcGVuZGVuY3kuCgkoZGVjbGFyZV9sb2NhbF92YXJpYWJsZXMpOiBOZXcgaGFuZGxpbmcgb2YgdW5yZXNvbHZlZCB0eXBlcyAocGF0Y2gKCWlzc3VlZCkuCgkoc291cmNlX3N0YXJ0X2phdmFfbWV0aG9kKTogTmV3IHBhcmFtZXRlciBsZXZlbC4gRnVuY3Rpb24gY2FsbGVkCgl3aXRoIGxldmVsIHNldCB0byAxIHdoZW4gYXJndW1lbnQgdHlwZXMgYXJlIHBvdGVudGlhbGx5Cgl1bnJlc29sdmVkLiAgQ2FsbGVkIHRvIGNvbXBsZXRlIHRoZSBqb2Igd2l0aCBsZXZlbCBzZXQgdG8gMiBvbmNlCgl0eXBlcyBhcmUgY29tcGxldGUuCgkoc291cmNlX2VuZF9qYXZhX21ldGhvZCk6IENhbGwgdG8gcGVybWFuZW50X2FsbG9jYXRpb24KCXJlbW92ZWQuIFdhaXRpbmcgdG8gYmUgcmVwbGFjZWQgYnkgYSBtb3JlIHN1aXRhYmxlIG9ic3RhY2sKCW1hbmFnZW1lbnQuCgkoamF2YV9jb21wbGV0ZV9leHBhbmRfbWV0aG9kcywgamF2YV9jb21wbGV0ZV9leHBhbmRfbWV0aG9kLAoJamF2YV9leHBhbmRfZmluYWxzKTogTmV3IGZ1bmN0aW9ucy4KCShidWlsZF9tZXRob2RfaW52b2NhdGlvbl9zdG10KTogUmVuYW1lZAoJcGF0Y2hfbWV0aG9kX2ludm9jYXRpb25fc3RtdC4gRXh0cmFjdHMgZnVuY3Rpb24gY2FsbCBleHByZXNzaW9uCgkod2ZsKSBhbmQgYXJndW1lbnRzIChhcmdzKSBmcm9tIENBTExfRVhQUiB0cmVlIG9wZXJhbmRzLgoJKGJ1aWxkX2ludm9rZSk6IFJlbmFtZWQgcGF0Y2hfaW52b2tlLiBGaXhlZCB0eXBvIGluIGZhdGFsCgljYWxsLiBQYXRjaCB0aGUgZnVuY3Rpb24gYW5kIGFyZ3VtZW50IG9wZXJhbmQgb2YgdGhlIENBTExfRVhQUgoJdHJlZSBhcmd1bWVudC4KCShwYXRjaF9hcmd1bWVudCwgamF2YV9jb21wbGV0ZV90cmVlKTogTmV3IGZ1bmN0aW9ucy4KCk1vbiBBcHIgMjAgMTg6MjY6NTcgMTk5OCAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGN5Z251cy5jb20+CgoJUmVjb3ZlciBmcm9tIG1pc3NpbmcgZmllbGRzIGFuZCBtZXRob2RzIChpLmUuIGVycm9yIGluc3RlYWQgb2YgZmF0YWwpLgoJKiBkZWNsLmMsIGphdmEtdHJlZS5oIChUWVBFX2lkZW50aWZpZXJfbm9kZSk6ICBOZXcgZ2xvYmFsIGNvbnN0YW50LgoJKiBleHByLmMgKGV4cGFuZF9pbnZva2UpOiAgUmVjb3ZlciBmcm9tIG1pc3NpbmcgbWV0aG9kLgoJKGV4cGFuZF9qYXZhX2ZpZWxkX29wKTogIFJlY292ZXIgZnJvbSBtaXNzaW5nIGZpZWxkLgoJSW5saW5lIHJlZmVyZW5jZXMgdG8gamF2YS5sYW5nLntJbnRlZ2VyLENoYXIsLi4ufS5UWVBFLgoJKiB0eXBlY2suYyAoZ2V0X3R5cGVfZnJvbV9zaWduYXR1cmUpLCBqYXZhLXRyZWUuaDogIE5ldyBmdW5jdGlvbi4KCSogY2xhc3MuYyAoYWRkX21ldGhvZCk6ICBVc2UgZ2V0X3R5cGVfZnJvbV9zaWduYXR1cmUuCgkoYnVpbGRfY2xhc3NfcmVmKTogIEhhbmRsZSBhIGNsYXNzIHRoYXQgd2FzIG5vdCBmb3VuZC4KCSogdHlwZWNrLmMgKGNvbnZlcnQpOiAgSGFuZGxlIGNvbnZlcnNpb24gdG8gcG9pbnRlcnMgKGZvciBjb252ZW5pZW5jZSkuCgkqIHZlcmlmeS5jICh2ZXJpZnlfanZtX2luc3RydWN0aW9ucyk6ICBVc2UgZ2V0X3R5cGVfZnJvbV9zaWduYXR1cmUKCWluc3RlYWQgb2YgbG9va3VwX2ZpZWxkIHRvIGhhbmRsZSBtaXNzaW5nIGZpZWxkcy4KCgkqIGpjZi1wYXJzZS5jIChwcm9jZXNzX3ppcF9kaXIpOiAgU2V0IGphdmFfc291cmNlLgoKMTk5OC0wNC0yMCAgQnJlbmRhbiBLZWhvZSAgPGJyZW5kYW5AY3lnbnVzLmNvbT4KCgkqIGpjZi1wYXJzZS5jIChzZXRfc291cmNlX2ZpbGVuYW1lKTogVXNlIFRZUEVfTkFNRSwgbm90IERFQ0xfTkFNRS4KClR1ZSBBcHIgMTQgMTU6NTk6NTQgMTk5OCAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBqY2YtcGFyc2UuYyAobG9hZF9jbGFzcyk6IERvbid0IGNoYW5nZSBpbnB1dF9maWxlbmFtZSBiZWZvcmUKCWNhbGxpbmcgamNmX3BhcnNlX3NvdXJjZSAoYnV0IHN0aWxsIGRvIGl0IGJlZm9yZSBjYWxsaW5nCglqY2ZfcGFyc2UpLgoJKGpjZl9wYXJzZV9zb3VyY2UpOiBBc3NpZ24gaW5wdXRfZmlsZW5hbWUgYWZ0ZXIgaGF2aW5nIHNhdmVkIHRoZQoJcGFyc2VyIGNvbnRleHQuCgkqIGxleC5jIChqYXZhX2luaXRfbGV4KTogQ2hhaW4gYSBXRkwgbm9kZSB0byB0aGUgaW1wb3J0IG9uIGRlbWFuZAoJbGlzdC4gY3R4cC0+bW9kaWZpZXJfY3R4IHplcm9lZCBhY2NvcmRpbmcgdG8gaXRzIG5ldwoJZGVmaW5pdGlvbi4gY3R4cC0+ZmlsZW5hbWUgaW5pdGlhbGl6ZWQuIFJlbW92ZWQKCUpBVkFfTU9ESUZJRVJfQ1RYX1VOTUFSSy4KCShqYXZhX3VuZ2V0X3VuaWNvZGUpOiBVcGRhdGUgdGhlIGNoYXJhY3RlciBiYXNlZCBjb2x1bW4gcG9zaXRpb24uCgkoamF2YV9hbGxvY2F0ZV9uZXdfbGluZSk6IHJlZl9jb3VudCBub3QgdXNlZCBhbnltb3JlLiBBbHdheXMgZnJlZQoJY3R4cC0+cF9saW5lLiBJbml0aWFsaXplIGNfbGluZS0+Y2hhcl9jb2wgdG8gMC4KCShqYXZhX2dldF91bmljb2RlKTogVXBkYXRlIHRoZSBjaGFyYWN0ZXIgYmFzZWQgY29sdW1uIHBvc2l0aW9uLgoJKGphdmFfbGV4KTogVXNlIGN0eHAtPmVsYyB0byBzdG9yZSBjdXJyZW50IHBvc2l0aW9uIGluIHNvdXJjZQoJZmlsZSwgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgcGFyc2VkIHRva2VuLiBTZXQgbW9kaWZpZXJfY3R4IGVudHJ5Cgljb3JyZXNwb25kaW5nIHRvIHRoZSBwYXJzZSBtb2RpZmllciB0byBhIFdGTCBub2RlLiBSZXR1cm4gYSBXRkwKCW5vZGUgd2hlbiBhbiBpZGVudGlmaWVyIGlzIHBhcnNlZC4KCShqYXZhX2xleF9lcnJvcik6IE5vdyB1c2VzIGN0eHAtPmVsYyB0byBzdG9yZSBjdXJyZW50IHBvc2l0aW9uIGluCglzb3VyY2UuCgkoYnVpbGRfd2ZsX25vZGUsIGphdmFfaXNfZW9sLCBqYXZhX2dldF9saW5lX2NvbCk6IE5ldyBmdW5jdGlvbnMuCgkqIGxleC5oIChidWlsZF93Zmxfbm9kZSk6IE5ldyBmdW5jdGlvbiBkZWZpbml0aW9ucy4KCShzdHJ1Y3QgamF2YV9saW5lKTogcmVmX2NvdW50IGFuZCBuZXh0IGZpZWxkcyBhcmUgZ29uZS4gTmV3IGZpZWxkCgljaGFyX2NvbC4KCShKQVZBX0xJTkVfQ0hFQ0ssIEpBVkFfTElORV9NQVJLLCBKQVZBX0xJTkVfQ0hBSU4sCglKQVZBX0xJTkVfVU5NQVJLLCBJRF9OQU1FLCBJRF9DTCk6IE1hY3JvIGRlZmluaXRpb25zIGRlbGV0ZWQuCgkoSkFWQV9DT0xVTU5fREVMVEEpOiBOZXcgbWFjcm8uCgkoamF2YV9sYyk6IE5ldyB0eXBlZGVmIG9uIG5ldyBzdHJ1Y3QgX2phdmFfbGMuCgkqIHBhcnNlLmggKGxvb2t1cF9jbCwgbG9va3VwX21vZGlmaWVyX2NsKTogQ2hhbmdlZCByZXR1cm5lZCB0eXBlcy4KCShwYXJzZV9lcnJvcl9jb250ZXh0LCBwYXJzZV93YXJuaW5nX2NvbnRleHQpOiBDaGFuZ2VkIHByb3RvdHlwZXMuCgkoamF2YV9nZXRfbGluZV9jb2wpOiBBZGRlZCBhcyBhbiBhdmFpbGFibGUgZ2xvYmFsIGZ1bmN0aW9uLgoJKEpBVkFfTU9ESUZJRVJfQ1RYX1VOTUFSSyk6IE1hY3JvIHJlbW92ZWQuCgkoSUNfREVDTCk6IFJlcGxhY2VkIGJ5IG1hY3JvIElDX1RZUEUKCShERVBFTkRfV0ZMKTogTmV3IG1hY3JvLgoJKFRISVNfTU9ESUZJRVJfT05MWSk6IE5vdyB3b3JrcyB3aXRoIFdGTCBhbmQgb25seSByZW1lbWJlcnMgdGhlIGZpcnN0Cgl3cm9uZyBtb2RpZmllci4KCShleGl0X2phdmFfY29tcGxldGVfY2xhc3MpOiBSZW1vdmVkIGEgY29tbWVudGVkIG91dCBzdGF0ZW1lbnQuCgkoc3RydWN0IHBhcnNlcl9jdHh0KTogQWRkZWQgY29tbWVudHMgb24gZmllbGRzLiBtb2RpZmllcl9jdHggaXMKCW5vdyBhbiBhcnJheSBvZiB0cmVlIG5vZGVzLiBEZWxldGVkIGZpZWxkcyBsaW5lX2xpc3QgYW5kCgllX2xpbmUuIE5ldyBmaWVsZCBlbGMsIHRvIHJlcGxhY2UgZV9saW5lLgoJKiBwYXJzZS55IChhcnJheV90eXBlOik6IEJ1aWxkIFdGTCBub2RlLgoJKHF1YWxpZmllZF9uYW1lOik6IEJ1aWxkIGEgc2luZ2xlIFdGTCBub2RlIG91dCBvZiB0d28uIFJldGFpbgoJdGhlIGxvY2F0aW9uIGluZm9ybWF0aW9uIG9mIHRoZSBmaXJzdCBub2RlIGluIHRoZSByZXN1bHRpbmcgbm9kZS4KCShwYWNrYWdlX2RlY2xhcmF0aW9uOik6IFVzZSBwYWNrYWdlIG5hbWUgYXMgYSBXRkwgbm9kZQoJKHNpbmdsZV90eXBlX2ltcG9ydF9kZWNsYXJhdGlvbjopOiBVc2UgaW1wb3J0ZWQgbmFtZSBhcyBhIFdGTCBub2RlLgoJKHR5cGVfaW1wb3J0X29uX2RlbWFuZF9kZWNsYXJhdGlvbjopOiBVc2Ugcm9vdCBvZiB0aGUgaW1wb3J0ZWQKCXBhY2thZ2VzIGFzIGEgV0ZMIG5vZGUuCgkoZmllbGRfZGVjbGFyYXRpb246KTogUmVtb3ZlZCB1bnVzZWQgbG9jYWwgdmFyaWFibGUgY2wuCgkobWV0aG9kX2RlY2xhcmF0aW9uOik6IERvbid0IGNhbGwgSkFWQV9NT0RJRklFUl9DVFhfVU5NQVJLLgoJKHl5ZXJyb3IpOiBOZXcgc3RhdGljIGVsYy4gUmVtb3ZlZCBzdGF0aWMgZXJyb3JfbGluZSwgZXJyb3JfcG9zLgoJTmV3IGxvY2FsIGNvZGVfZnJvbV9zb3VyY2UuIFNhdmUgY3R4cC0+ZWxjIGludG8gZWxjIGF0IHRoZSBmaXJzdAoJcGFzcy4gQ2FsbCBqYXZhX2dldF9saW5lX2NvbCB0byBnZXQgYSBzdHJpbmcgb2YgdGhlIGxpbmUgd2hlcmUKCXRoZSBlcnJvciBvY2N1cnJlZC4KCShkZWJ1Z19saW5lKTogUmVtb3ZlZCBzdGF0aWMgZnVuY3Rpb24uCgkocGFyc2VfZXJyb3JfY29udGV4dCwgcGFyc2Vfd2FybmluZ19jb250ZXh0KTogUGFyYW1ldGVyIGNsIGlzIG5vdwoJYSBXRkwgbm9kZS4gVXNlIGl0cyB2YWx1ZSB0byBpbml0aWFsaXplIGN0eHAtPmVsYy4KCShyZWRlZmluaXRpb25fZXJyb3IpOiBQYXJhbWV0ZXIgY2wgaXMgbm93IGEgV0ZMIG5vZGUuCgkocGFyc2VfYWRkX2ludGVyZmFjZSk6IE5ldyBwYXJhbWV0ZXIgd2ZsLiBObyBsb25nZXIgY2FsbAoJbG9va3VwX2NsLCB1c2Ugd2ZsIGluc3RlYWQuCgkoY2hlY2tfY2xhc3NfaW50ZXJmYWNlX2NyZWF0aW9uKTogUGFyYW1ldGVyIGNsIGlzIG5vdyBhIFdGTCBub2RlLgoJKG1heWJlX2NyZWF0ZV9jbGFzc19pbnRlcmZhY2VfZGVjbCk6IExpa2V3aXNlLgoJKGFkZF9zdXBlcmludGVyZmFjZXMpOiBOZXcgZnVuY3Rpb24uCgkoY3JlYXRlX2ludGVyZmFjZSk6IFJlbW92ZWQgbG9jYWwgY2wsIG5vZGUsIHN1cGVyX2RlY2wsCglzdXBlcl9kZWNsX3R5cGUuICBGdW5jdGlvbiBub3cgdXNlcyBpZCBhcyBhIFdGTCBub2RlLiBCZXR0ZXIKCXdhcm5pbmcvZXJyb3IgcmVwb3J0IG9uIG9ic29sZXRlIG9yIGZvcmJpZGRlbiBtaXggb2YKCW1vZGlmaWVycy4gTm93IGNhbGxzIGFkZF9zdXBlcmludGVyZmFjZXMgdG8gcmVnaXN0ZXIgaW50ZXJmYWNlcy4KCShjcmVhdGVfY2xhc3MpOiBSZW1vdmVkIGxvY2FsIGNsLCBub2RlLiBMb2NhbCB2YXJpYWJsZSBpZCBpcyB1c2VkCglhcyBhIFdGTCBub2RlLiBCZXR0ZXIgZXJyb3IgcmVwb3J0IG9uIGZvcmJpZGRlbiBtb2RpZmllcgoJbWl4LiBVc2VzIGFkZF9zdXBlcmludGVyZmFjZXMgdG8gcmVnaXN0ZXIgaW50ZXJmYWNlcy4KCShmaW5kX2ZpZWxkKTogQXJndW1lbnQgY2wgaXMgbm93IGEgV0ZMIG5vZGUuIE5vdyBzdG9yZSB0aGUgV0ZMCglub2RlIG9mIGEgZmllbGRzIHRoYXQgbmVlZHMgdG8gYmUgY2hlY2tlZCBmb3IgdGhlaXIKCWluaXRpYWxpemF0aW9uLgoJKG1ldGhvZF9oZWFkZXIpOiBMb2NhbCB2YXJpYWJsZSBub2RlIG5vbiBsb25nZXIgdXNlZC4gTG9jYWwKCXZhcmlhYmxlIGlkIHJlcGxhY2VzIGNsLgoJKGNoZWNrX21vZGlmaWVyc19jb25zaXN0ZW5jeSk6IExvY2FsIHZhcmlhYmxlIGNsIGlzIG5vdyBhIFdGTAoJbm9kZS4KCShtZXRob2RfZGVjbGFyYXRvcik6IExvY2FsIHZhcmlhYmxlIGNsIHJlcGxhY2VkIGJ5IHBhcmFtZXRlciBpZC4KCShwYXJzZXJfcXVhbGlmaWVkX25hbWUpOiBOb3cgdXNlcyBwYXJhbWV0ZXIgbmFtZSBhcyBhIFdGTCBub2RlLgoJKHBhcnNlcl9jaGVja19zdXBlcl9pbnRlcmZhY2UpOiBOZXcgcGFyYW1ldGVyIHdmbCwgZm9yIGFjaGlldmUKCWdyZWF0ZXIgYWNjdXJhY3kgZHVyaW5nIGVycm9yIHJlcG9ydHMuCgkocGFyc2VyX2NoYWluX2luY29tcGxldGVfaXRlbSk6IE5ldyBwYXJhbWV0ZXIgbmFtZWQgbG9jYXRpb24uIFVzZWQsCglhbG9uZyB0aGUgZGVjbCwgdG8gY29uc3RydWN0IHRoZSBpbmNvbXBsZXRlIGl0ZW0gbm9kZS4KCShqYXZhX2NvbXBsZXRlX2NsYXNzKTogcmVzb2x2ZV9jbGFzcyBub3cgdXNlcyBXRkwgbm9kZSBleHRyYWN0ZWQKCWZyb20gdGhlIGluY29tcGxldGUgaXRlbSBub2RlLiBNYWNybyBJQ19UWVBFIHJlcGxhY2VzIFRSRUVfUFVSUE9TRQoJd2hlcmUgYXBwcm9wcmlhdGUuCgkoY29tcGxldGVfbWV0aG9kX2RlY2wpOiBVbnJlc29sdmVkIGZ1bmN0aW9uJ3MgYXJndW1lbnQgdHlwZXMgYXJlIFdGTC4KCShyZXNvbHZlX2NsYXNzKTogUGFyYW1ldGVyIGNsIGlzIG5vdyBhIFdGTCBub2RlLgoJKHJlc29sdmVfYW5kX2xheW91dCk6IExpa2V3aXNlLgoJKGRvX3Jlc29sdmVfY2xhc3MpOiBMaWtld2lzZS4gVHJ5IGZpcnN0IHRvIHVzZSBjbCBhbmQgdGhlbiBkbyB0aGUKCWxvb2t1cCBvbiB0aGUgZGVjbCB3aGVuIGNhbGxpbmcgY2hlY2tfcGtnX2NsYXNzX2FjY2Vzcy4KCShjb21wbGV0ZV9jbGFzc19yZXBvcnRfZXJyb3JzKTogVXNlIElDX1RZUEUgaW4gcGxhY2Ugb2YKCVRSRUVfUFVSUE9TRSB3aGVyZSBhcHByb3ByaWF0ZS4gVXNlIERFUEVORF9XRkwgb24gZGVwZW5kZW5jeQoJaW5zdGVhZCBvZiBkb2luZyBhIGxvb2t1cCBvdmVyIHRoZSBkZWNsLgoJKGphdmFfY2hlY2tfZmluYWwpOiBVc2UgV0ZMIGluZm8gZnJvbSBmaWVsZCB0cmVlIGxpc3QuCgkobG9va3VwX2NsKTogUmV3cml0dGVuIGFuZCByZXR1cm5zIGEgc3RhdGljYWxseSBkZWZpbmVkIFdGTCBub2RlLgoJKGxvb2t1cF9tb2RpZmllcl9jbCk6IE5vdyB1c2VzIGluZm9ybWF0aW9uIGZyb20gV0ZMIG5vZGVzLgoJKHByb2Nlc3NfaW1wb3J0cyk6IExpa2V3aXNlLgoJKHJlYWRfaW1wb3J0X2Rpcik6IG5hbWUgYW5kIGNsIGFyZ3VtZW50cyByZXBsYWNlZCBieSBhIHNpbmdsZSBXRkwKCW5vZGUuIEZ1bmN0aW9uIG1vZGlmaWVkIGFjY29yZGluZ2x5LgoJKGZpbmRfaW5faW1wb3J0c19vbl9kZW1hbmQpOiBOb3cgdXNlcyBXRkwgbm9kZS4KCShjaGVja19wa2dfY2xhc3NfYWNjZXNzKTogY2wgYXJndW1lbnQgaXMgbm93IGEgV0ZMIG5vZGUuCgkoZGVjbGFyZV9sb2NhbF92YXJpYWJsZXMpOiBGaXhlZCB0byB1c2UgV0ZMIG5vZGVzLgoJKHJlc29sdmVfZXhwcmVzc2lvbl9uYW1lKTogTGlrZXdpc2UuCgkoYnVpbGRfbWV0aG9kX2ludm9jYXRpb25fc3RtdCk6IG5hbWVfY29tYm8gYXJndW1lbnQgcmVuYW1lZAoJd2ZsLiBGdW5jdGlvbiBtb2RpZmllZCB0byB1c2UgV0ZMIG5vZGVzLgoJKGJ1aWxkX2ludm9rZSk6IGNsIHVzZWQgYXMgYSBXRkwgbm9kZSB3aGVuIGNhbGxpbmcgYnVpbGRfZXhwcl93ZmwuCgkobG9va3VwX21ldGhvZF9pbnZva2UpOiBjbCBpcyBub3cgYSBXRkwgbm9kZS4gQWRkZWQgbWlzc2luZwoJSURFTlRJRklFUl9QT0lOVEVSIHRvIGNsYXNzIHR5cGUgZGVjbCBuYW1lLgoKVHVlIEFwciAxNCAxNToyMzoyOSAxOTk4ICBEYXZlIEJyb2xsZXkgIDxicm9sbGV5QGN5Z251cy5jb20+CgoJKiBsYW5nLmMgKGluaXRfcGFyc2UpOiBOb3cgcmV0dXJucyBjaGFyKiBjb250YWluaW5nIHRoZSBmaWxlbmFtZS4KCkZyaSBBcHIgMTAgMTE6MzY6MDQgMTk5OCAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGN5Z251cy5jb20+CgoJKiBjbGFzcy5jIChsYXlvdXRfY2xhc3MpOiAgTWFuZ2xlIHJlcGVhdGVkIGFyZyB0eXBlcyB0byBtYXRjaCBjYzFwbHVzLgoKCSogZGVjbC5jLCBqYXZhLXRyZWUuaCAoaW50ZWdlcl9mb3VyX25vZGUpOiAgTmV3IElOVEVHRVJfQ1NUIG5vZGUuCgkqIGNsYXNzLmMgKG1ha2VfY2xhc3NfZGF0YSk6ICBJZiBmbGFnX2Fzc3VtZV9jb21waWxlZCwgaW5pdGlhbCBjbGFzcwoJc3RhdGUgaXMgQ1NUQVRFX1BSRVBBUkVEOyBtYWtlIHN1cGVyY2xhc3MgYW5kIGludGVyZmFjZXMgZGlyZWN0CglyZWZlcmVuY2VzLCByYXRoZXIgdGhhbiBjb25zdGFudCBwb29sIGluZGV4ZXMuCgpUaHUgQXByICA5IDE2OjEwOjU2IDE5OTggIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogcGFyc2VyLnk6IEluY2x1ZGUgZmxhZ3MuaC4gUmVtb3ZlZCBkZWJ1ZyB2YXJpYWJsZSBwbC4KCShtZXRob2RfZGVjbGFyYXRpb246KTogVXNlcyBjdHhwLT5wYXJzZXJfY2NiX2luZGVudCBpbnN0ZWFkIG9mIHBsLgoJKGJsb2NrOik6IExpa2V3aXNlLgoJKGxhYmVsZWRfc3RhdGVtZW50X25zaTopOiBHZW5lcmF0ZSBkZWJ1ZyBpbmZvIHdoZW4gcmVkdWNpbmcKCWV4cHJlc3Npb25fc3RhdGVtZW50Oi4KCShjaGVja19wa2dfY2xhc3NfYWNjZXNzKTogZ2V0X2FjY2Vzc19mbGFnc19mcm9tX2RlY2wgaW52b2thdGlvbgoJZml4ZWQgZm9yIG5ldyBDTEFTU18qIGZsYWdzIGxvY2F0aW9uLgoJKHNvdXJjZV9lbmRfamF2YV9tZXRob2QpOiBTYXZlL3Jlc3RvcmUgcGFyc2VyIGNvbnRleHQgd2hlbgoJZW50ZXJpbmcvbGVhdmluZyB0aGlzIHJvdXRpbmUuIFJlc3RvcmUgbGluZW5vIHRvIGl0cyByaWdodCB2YWx1ZQoJYmVmb3JlIGNhbGxpbmcgZXhwYW5kX2VuZF9iaW5kaW5ncy4KCShidWlsZF9tZXRob2RfaW52b2NhdGlvbl9zdG10KTogYnVpbGRfaW52b2tlIGNhbGxlZCB3aXRoIHRoZQoJY3VycmVudCBsaW5lIGluZm9ybWF0aW9uLgoJKGJ1aWxkX2ludm9rZSk6IE5ldyBhcmd1bWVudCBjbC4gV3JhcCB0aGUgZnVuY3Rpb24gY2FsbCBhcm91bmQgYQoJd2ZsIG5vZGUuCgkocmVmaW5lX2FjY2Vzc2libGVfbWV0aG9kc19saXN0KTogQ2hhbmdlZCBjb21tZW50LCByZW1vdmVkCgl1bm5lY2Vzc2FyeSBjb2RlLgoJKiBwYXJzZS5oOiBGaXhlZCB0eXBvIGluIGNvbW1lbnRzLgoJKENMQVNTX09SX0lOVEVSRkFDRSk6IEhhbmRsZSB0aGUgbmV3IENMQVNTXyogZmxhZ3MgbG9jYXRpb24uCgkoSkFWQV9NQVlCRV9HRU5FUkFURV9ERUJVR19JTkZPKTogTmV3IG1hY3JvLgoJKHN0cnVjdCBwYXJzZXJfY3R4dCk6IE5ldyBmaWVsZHMgY2NiX2luZGVudCwgbGFzdF9jY2JfaW5kZW50MSwKCXBhcnNlcl9jY2JfaW5kZW50LgoJKiBsZXguYyAoamF2YV9sZXgpOiBSZWNvcmQgdGhlIGxhc3QgY2xvc2luZyBjdXJseSBicmFja2V0IG9mIGEKCWZ1bmN0aW9uLgoJKiBqY2YtcGFyc2UuYyAoamNmX3BhcnNlX3NvdXJjZSk6IE5vdyBjYWxscwoJamF2YV9jaGVja19tZXRob2RzLiBDbGFyaWZpZWQgY29tbWVudCwgZml4ZWQgdHlwby4KCjE5OTgtMDQtMDkgIERhdmUgQnJvbGxleSAgPGJyb2xsZXlAY3lnbnVzLmNvbT4KCgkqIGxhbmcuYyAoaW5pdF9wYXJzZSk6IEV4cG9zZSBmb3Igbm9uIFVTRV9DUFBMSUIgYnVpbGRzLgoJKGZpbmlzaF9wYXJzZSk6IEV4cG9zZSBmb3Igbm9uIFVTRV9DUFBMSUIgYnVpbGRzLgoKV2VkIEFwciAgOCAxMzowNjoyMyAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBsYW5nLmMgKGxhbmdfcHJpbnRfeG5vZGUpOiBOZXcgZnVuY3Rpb24uCgpGcmkgQXByICAzIDEzOjIyOjQxIDE5OTggIFBlciBCb3RobmVyICA8Ym90aG5lckBjeWdudXMuY29tPgoKCSogZGVjbC5jIChjbGFzc19kdGFibGVfZGVjbCksIGphdmEtdHJlZS5oOiAgTmV3IHRyZWUgbm9kZS4KCSogY2xhc3MuYyAoZ2V0X2Rpc3BhdGNoX3ZlY3RvciwgZ2V0X2Rpc3BhdGNoX3RhYmxlKTogIE5ldyBmdW5jdGlvbnMKCXVzZWQgdG8gYnVpbGQgYSBjbGFzcydzIGRpc3BhdGNoIHRhYmxlLgoJKG1ha2VfY2xhc3NfZGF0YSk6ICBHZW5lcmF0ZSBkaXNwYXRjaCB0YWJsZSBpZiBmbGFnX2Fzc3VtZV9jb21waWxlZC4KCVNldCBkdGFibGUgb2YgY2xhc3Mgb2JqZWN0IHRvIGFkZHJlc3Mgb2YgY2xhc3NfZHRhYmxlX2RlY2wuCgoJKiBkZWNsLmMgKGludF9kZWNsX3Byb2Nlc3NpbmcpOiAgTWFrZSBzb2Z0X2JhZGFycmF5aW5kZXhfbm9kZQoJYmUgdm9sYXRpbGUgYW5kIGhhdmUgc2lkZSBlZmZlY3RzIC0gZ2VuZXJhdGVzIGJldHRlciBjb2RlLgoKCSogY2xhc3MuYywgZXhwci5jLCBwYXJzZS55OiAgQ0xBU1NfSU5URVJGQUNFLCBDTEFTU19GSU5BTCwgZXRjOgoJVGhlc2UgZmxhZ3Mgd2VyZSBkZWZpbmVkIGZvciBUWVBFX0RFQ0xzLCBidXQgdXNlZCBvbiBSRUNPUkRfVFlQRXMuCgoJKiBleHByLmMgKGV4cGFuZF9pbnZva2UpOiAgSWYgY2xhc3MgaXMgZmluYWwsIG1ldGhvZCBpcwoJZWZmZWN0aXZlbHkgZmluYWwsIHNvIGNhbiBjYWxsIGl0IGRpcmVjdGx5LgoKCSogamF2YS10cmVlLmggKFRZUEVfTlZJUlRVQUxTLCBUWVBFX1ZUQUJMRSk6ICBOZXcgbWFjcm9zLgoKCSogTWFrZWZpbGUuaW4sIE1ha2UtbGFuZy5pbjogIEFkZCBtaXNzaW5nICQoZXhlZXh0KXMuCgpUaHUgTWFyIDE5IDE2OjU5OjE2IDE5OTggIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogcGFyc2UueSAoYnVpbGRfbWV0aG9kX2ludm9jYXRpb25fc3RtdCk6IFJlbW92ZWQgZXh0cmEgYXJndW1lbnQKCXRvIGJ1aWxkX2ludm9rZS4KCk1vbiBNYXIgMTYgMTc6MjU6MTkgMTk5OCAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBleHByLmMgKGR0YWJsZV9pbmRlbnQpOiBOb3cgc3RhdGljIGdsb2JhbC4KCShleHBhbmRfaW52b2tlKTogTm93IGNhbGwgaW52b2tlX2J1aWxkX2R0YWJsZSBhbmQKCWJ1aWxkX2ludm9rZXZpcnR1YWwuCgkoaW52b2tlX2J1aWxkX2R0YWJsZSwgYnVpbGRfaW52b2tldmlydHVhbCk6IE5ldyBmdW5jdGlvbnMuCgkqIGpjZi1pby5jIChmaW5kX2NsYXNzKTogRGVmZXIgaXNzdWluZyBhIHdhcm5pbmcgYnkgc2V0dGluZwoJamNmLT5vdXRvZnN5bmNoIHRvIDEuCgkqIGpjZi1wYXJzZS5jIChqY2Zfb3V0X29mX3N5bmNoKTogTmV3IGZ1bmN0aW9uLgoJKGxvYWRfY2xhc3MpOiBUZXN0IHRoaXNfamNmLm91dG9mc3luY2ggZmxhZyBhbmQgY2FsbAoJamNmX291dF9vZl9zeW5jaCBhY2NvcmRpbmdseS4KCSogamNmLmg6ICh0eXBlZGVmIHN0cnVjdCBKQ0YpOiBOZXcgZmxhZyBvdXRvZnN5bmNoLiBGaXhlZCB0eXBvIGluCgljb21tZW50IGluZGVudGF0aW9uLgoJKiBsZXguYyAoamF2YV9nZXRfdW5pY29kZSk6IEZpeGVkIGNvZGUgaW5kZW50YXRpb24uCgkoamF2YV9sZXgpOiBDcmVhdGUgc3RyaW5nIGxpdGVyYWwuIEZpeGVkIHR5cG8uIFJlbW92ZWQgc2V2ZXJhbAoJcHJlbWF0dXJlIG9ic3RhY2tfZnJlZS4KCSogcGFyc2UuaDogTmV3IGVudW1zIGZvciBuYW1lIHJlc29sdXRpb24gYW5kIGludm9jYXRpb24gbW9kZS4KCShzdHJ1Y3QgcXVhbGlmaWNhdGlvbik6IE5ldyBkYXRhIHN0cnVjdHVyZS4KCShSRVNPTFZFX0NIQUlOX1JFTUFJTkRFUiwgQlVJTERfUFRSX0ZST01fTkFNRSk6IE5ldyBtYWNyb3MuCgkoZG9fcmVzb2x2ZV9jbGFzcywgYnVpbGRfbWV0aG9kX2ludm9jYXRpb25fc3RtdCwKCWJyZWFrZG93bl9xdWFsaWZpZWQsIHF1YWxpZnlfYW1iaWd1b3VzX25hbWUsIHJlc29sdmVfYW5kX2xheW91dCwKCWRlYnVnX2xpbmUsIGlkZW50aWNhbF9zdWJwYXRoX3AsIGludm9jYXRpb25fbW9kZSwKCXJlZmluZV9hY2Nlc3NpYmxlX21ldGhvZHNfbGlzdCwgYnVpbGRfaW52b2tlLAoJbG9va3VwX21ldGhvZF9pbnZva2UpOiBOZXcgZnVuY3Rpb25zIGRlY2xhcmVkLgoJKGJ1aWxkX2ludm9rZXZpcnR1YWwsIGludm9rZV9idWlsZF9kdGFibGUsIG1hdGNoX2phdmFfbWV0aG9kLAoJYnVpbGRfZmllbGRfcmVmLCBqY2Zfb3V0X29mX3N5bmNoKTogTmV3IHJlZmVyZW5jZXMgdG8gZXh0ZXJuYWwKCWZ1bmN0aW9ucy4KCShzdHJ1Y3QgcGFyc2VfY3R4dCk6IFJlbW92ZWQgYXJ0aWZpY2lhbF9jb25zdHJ1Y3RvciBmaWVsZC4KCSogcGFyc2UueTogKGFycmF5X3R5cGU6KTogVHlwZSBkZWZpbmVkIGZvciB0aGlzIHJ1bGUuCgkoY2xhc3NfdHlwZTopOiBJbnN0YWxsZWQgZGVmYXVsdCBydWxlIGZvciBpbnRlcmZhY2VfdHlwZTouCgkoYXJyYXlfdHlwZTopOiBOb3cgYnVpbGQgSmF2YSBhcnJheSB0eXBlLgoJKHF1YWxpZmllZF9uYW1lOik6IE5vdyB1c2Ugb2JzdGFja19ncm93MC4KCShtZXRob2RfZGVjbGFyYXRpb246KTogU2tpcCB0aGUgYXJ0aWZpY2lhbCBjb25zdHJ1Y3RvciBhZGRlZCB0bwoJdGhlIGxpc3QsIGlmIGFueS4KCShhYnN0cmFjdF9tZXRob2RfZGVjbGFyYXRpb246KTogRXhlY3V0ZSB0aGUgY29kZSBvbmx5IGR1cmluZyBwYXNzIDEuCgkoYmxvY2s6KTogSW5zdGFsbGVkIGRlZmF1bHQgcnVsZSBpbiBibG9ja19zdGF0ZW1lbnRzOi4KCShibG9ja19zdGF0ZW1lbnQ6KTogQWRkIHRoZSBzdGF0ZW1lbnQgdG8gdGhlIG1ldGhvZCBkdXJpbmcgcGFzcyAyLgoJKHN0YXRlbWVudF9leHByZXNzaW9uKTogSW5zdGFsbGVkIGRlZmF1bHQgcnVsZSBmb3IKCW1ldGhvZF9pbnZvY2F0aW9uOi4KCShhcmd1bWVudF9saXN0Oik6IEFkZGVkIGNvZGUgdG8gYnVpbGQgdGhlIGFyZ3VtZW50IGxpc3QuCgkobWV0aG9kX2ludm9jYXRpb246KTogQWRkZWQgY2FsbCB0byBjcmVhdGUgdGhlIG1ldGhvZCBpbnZvY2F0aW9uCglub2RlLgoJKHl5ZXJyb3IpOiBOb3cgdXNlIG9ic3RhY2tfZ3JvdzAuIFJlbW92ZWQgYm9ndXMgb2JzdGFja19mcmVlLgoJKGRlYnVnX2xpbmUpOiBOZXcgZnVuY3Rpb24gZm9yIGRlYnVnLgoJKGNvbXBsZXRlX2NsYXNzX2RlY2wpOiBObyBsb25nZXIgZG8gc29tZXRoaW5nIGR1cmluZyBwYXNzIDEuCgkobWV0aG9kX2hlYWRlcik6IFVzZSBCVUlMRF9QVFJfRlJPTV9OQU1FLgoJKHBhcnNlcl9xdWFsaWZpZWRfY2xhc3NuYW1lKTogVXNlIG9ic3RhY2tfZ3JvdzAuIFJlbW92ZWQgYm9ndXMKCW9ic3RhY2tfZnJlZS4KCShwYXJzZXJfY2hhaW5faW5jb21wbGV0ZV9pdGVtKTogVXNlIEJVSUxEX1BUUl9GUk9NX05BTUUuIE1vZGlmaWVkCglmdW5jdGlvbidzIG1haW4gY29tbWVudC4KCShqYXZhX2NvbXBsZXRlX2NsYXNzKTogU2V0IENMQVNTX0xPQURFRF9QIG9uIGFsbCBmaXhlZCBpbmNvbXBsZXRlCgljbGFzc2VzLgoJKGNvbXBsZXRlX21ldGhvZF9kZWNsKTogVXNlIEJVSUxEX1BUUl9GUk9NX05BTUUgYW5kIHByb21vdGUgdHlwZXMuCgkocmVzb2x2ZV9jbGFzcyk6IE5vdyB3b3JrcyB3aXRoIGFycmF5cy4KCShkb19yZXNvbHZlX2NsYXNzLCByZXNvbHZlX2FuZF9sYXlvdXQpOiBOZXcgZnVuY3Rpb25zLgoJKGphdmFfY2hlY2tfcmVndWxhcl9tZXRob2RzKTogUmV2ZXJzZSBtZXRob2QgbGlzdCBiZWZvcmUgYW5kIGFmdGVyCgloYXZpbmcgcHJvY2Vzc2VkIGl0LiBObyBsb25nZXIgc2V0IGN0eHAtPmFydGlmaWNpYWxfY29uc3RydWN0b3IuCgkocmVhZF9pbXBvcnRfZGlyKTogVGVzdCBqY2YtPm91dG9mc3luY2ggYW5kIGNhbGwgamNmX291dF9vZl9zeW5jaAoJYWNjb3JkaW5nbHkuIEZpeGVkIHR5cG8gaW4gaXNzdWVkIGVycm9yIG1lc3NhZ2UuIE5vdyB1c2UKCW9ic3RhY2tfZ3JvdzAuCgkoZmluZF9pbl9pbXBvcnRzX29uX2RlbWFuZCk6IE5vdyB1c2Ugb2JzdGFja19ncm93MC4KCShkZWNsYXJlX2xvY2FsX3ZhcmlhYmxlcyk6IFVzZSBCVUlMRF9QVFJfRlJPTV9OQU1FLgoJKHNvdXJjZV9lbmRfamF2YV9tZXRob2QpOiBDYWxsIGV4cGFuZF9leHByX3N0bXQgaW5zdGVhZCBvZgoJZXhwYW5kX2V4cHIuIENhbGxzIGl0IGJlZm9yZSBjYWxsaW5nIGV4cGFuZF9mdW5jdGlvbl9lbmQuCgkoamF2YV9tZXRob2RfYWRkX3N0bXQpOiBEbyBub3RoaW5nIGlmIGVycm9ycyB3ZXJlIGZvdW5kIGR1cmluZwoJcGFyc2luZy4KCShqYXZhX2xheW91dF9wYXJzZWRfY2xhc3MpOiBTZXQgQ0xBU1NfTE9BREVEX1AgYW5kIGZpeGVkIHR5cG8uCgkoYnVpbGRfbWV0aG9kX2ludm9jYXRpb25fc3RtdCwgYnVpbGRfaW52b2tlLCBpbnZvY2F0aW9uX21vZGUsCglsb29rdXBfbWV0aG9kX2ludm9rZSwgcmVmaW5lX2FjY2Vzc2libGVfbWV0aG9kc19saXN0LAoJcXVhbGlmeV9hbWJpZ3VvdXNfbmFtZSwgYnJlYWtkb3duX3F1YWxpZmllZCwgaWRlbnRpY2FsX3N1YnBhdGhfcCk6CglOZXcgZnVuY3Rpb25zLgoJKiB0eXBlY2suYyAoYnVpbGRfamF2YV9zaWduYXR1cmUpOiBQcm9wZXJseSBlbmQgbWV0aG9kIHNpZ25hdHVyZQoJaWYgcmV0dXJuIHR5cGUgc2tpcHBlZC4KCShtYXRjaF9qYXZhX21ldGhvZCk6IE5ldyBmdW5jdGlvbi4KCk1vbiBNYXIgMTYgMTA6NDA6NDcgMTk5OCAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGN5Z251cy5jb20+CgoJKiBqY2YtaW8uYyAoZmluZF9jbGFzc2ZpbGUpOiAgSWYgVVNFX0pDRl9TVERJTywgZm9wZW4gaW4gYmluYXJ5IG1vZGUuCgpXZWQgRmViIDI1IDA4OjU1OjQ5IDE5OTggIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogZXhwci5jIChidWlsZF9pbnZva2Vfbm9uX2ludGVyZmFjZSk6IE5ldyBmdW5jdGlvbi4KCShtZXRob2RzX2lkZW50LCBuY29kZV9pZGVudCk6IE5vdyBzdGF0aWMgZ2xvYmFscy4KCShleHBhbmRfaW52b2tlKTogVXNlIGJ1aWxkX2ludm9rZV9ub25faW50ZXJmYWNlLgoJKiBqYXZhLXRyZWUuaCAoc3RydWN0IGxhbmdfZGVjbCk6IE5ldyBmaWVsZCBmdW5jdGlvbl9kZWNsX2JvZHkuCgkoREVDTF9GVU5DVElPTl9CT0RZKTogTmV3IG1hY3JvLgoJKiBqY2YtcGFyc2UuYyAoamNmX3BhcnNlX3NvdXJjZSk6IERlZXBlciBjaGVjayBiZWZvcmUgc2V0dGluZwoJQ0xBU1NfRlJPTV9TT1VSQ0VfUC4KCShwYXJzZV9zb3VyY2VfZmlsZSk6IEZpeGVkIHR5cG9zLiBDYWxsIGphdmFfbGF5b3V0X3BhcnNlZF9jbGFzcwoJYmVmb3JlIHN0YXJ0aW5nIHBhc3MgMi4gQ2FsbCB0byBqYXZhX2dlbmVyYXRlX3BhcnNlZF9jbGFzcyByZXBsYWNlZAoJYnkgamF2YV9yZWdpc3Rlcl9wYXJzZWRfY2xhc3MuCgkqIGxleC5jOiBGaXhlZCB0eXBvIGluIGhlYWRlci4gU29tZSBsaW5lIHdpZHRoIHJlbGF0ZWQgZm9ybWF0aW5nLgoJKiBsZXguaDogU29tZSBsaW5lIHdpZHRoIHJlbGF0ZWQgZm9ybWF0aW5nLgoJKiBwYXJzZS5oIChzb3VyY2VfZW5kX2phdmFfbWV0aG9kLCByZXNvbHZlX2V4cHJlc3Npb25fbmFtZSwKCWNvbXBsZXRlX2NsYXNzX2RlY2wsIG1heWJlX2NyZWF0ZV9jbGFzc19pbnRlcmZhY2VfZGVjbCwKCWNoZWNrX2NsYXNzX2ludGVyZmFjZV9jcmVhdGlvbik6IE5ldyBzdGF0aWMgZnVuY3Rpb24gZGVjbGFyYXRpb25zLgoJKGphdmFfbGF5b3V0X3BhcnNlZF9jbGFzcywgamF2YV9tZXRob2RfYWRkX3N0bXQpOiBOZXcgZnVuY3Rpb24KCWRlY2xhcmF0aW9ucy4KCShzdHJ1Y3QgcGFyc2VyX2N0eHQpOiBGaWVsZCBtYXJrX2NsYXNzX2dlbmVyYXRlIHJlbW92ZWQuIE5ldwoJZmllbGRzIGNsYXNzX2xpc3QgYW5kIGFydGlmaWNpYWxfY29uc3RydWN0b3IuCgkqIHBhcnNlLnk6IEZpeGVkIHR5cG8gaW4gaGVhZGVyLgoJKGNsYXNzX2RlY2xhcmF0aW9uOik6IENhbGwgY29tcGxldGVfY2xhc3NfZGVjbCB3aGVuIGNsYXNzIGJvZHkKCXBhcnNlZC4KCShtZXRob2RfZGVjbGFyYXRpb246KTogQ2FsbCBzb3VyY2VfZW5kX2phdmFfbWV0aG9kIGluIHBhc3MgMiB3aGVuCgl0aGUgbWV0aG9kIGJvZHkgaXMgZGVmaW5lZC4KCShwb3N0Zml4X2V4cHJlc3Npb246KTogRG8gZXhwcmVzc2lvbiBuYW1lIHJlc29sdXRpb24gb24gc3ViLXJ1bGUKCW5hbWUgZHVyaW5nIHBhc3MgMi4KCShjcmVhdGVfY2xhc3MsIGNyZWF0ZV9pbnRlcmZhY2UpOiBNZXJnZWQgY29tbW9uIHBpZWNlcy4KCShjaGVja19jbGFzc19pbnRlcmZhY2VfY3JlYXRpb24sIG1heWJlX2NyZWF0ZV9jbGFzc19pbnRlcmZhY2VfZGVjbCk6CglOZXcgZnVuY3Rpb25zLgoJKGNvbXBsZXRlX2NsYXNzX2RlY2wpOiBOZXcgZnVuY3Rpb24uCgkocmVnaXN0ZXJfZmllbGRzKTogRml4ZWQgbGluZSB3aWR0aCByZWxhdGVkIHR5cG8uCgkobWV0aG9kX2hlYWRlcik6IENvcnJlY3RseSBza2lwIGZpcnN0IGFyZ3VtZW50IHdoZW4gZml4aW5nCglhcmd1bWVudCBsaW5lLiBDaGFuZ2VkIHRoZSBsb29wLgoJKGphdmFfY2hlY2tfY2lyY3VsYXJfcmVmZXJlbmNlKTogTm93IHVzZSBjdHhwLT5jbGFzc19saXN0LgoJKGphdmFfY29tcGxldGVfY2xhc3MpOiBSZW1vdmVkIHN0YXJ0L3N0b3AgbWFya2luZy4KCShqYXZhX2NoZWNrX3JlZ3VsYXJfbWV0aG9kcyk6IE5vdyB0YWtlcyBhIGNsYXNzIGRlY2wgYXMgYW4KCWFyZ3VtZW50LiAgQWRkIGRlZmF1bHQgY29uc3RydWN0b3IgaWYgbm9uZSB3ZXJlIGVuY291bnRlcmVkLgoJKGphdmFfY2hlY2tfbWV0aG9kcyk6IE5vdyB1c2UgY3R4cC0+Y2xhc3NfbGlzdC4gQ2hhbmdlZCBjYWxsIHRvCglqYXZhX2NoZWNrX3JlZ3VsYXJfbWV0aG9kcy4KCShzb3VyY2Vfc3RhcnRfamF2YV9tZXRob2QpOiBTZXQgREVDTF9BUkdfVFlQRSBmb3IgZWFjaCBmdW5jdGlvbgoJYXJndW1lbnRzLgoJKHNvdXJjZV9lbmRfamF2YV9tZXRob2QsIGphdmFfbWV0aG9kX2FkZF9zdG10KTogTmV3IGZ1bmN0aW9ucy4KCShqYXZhX2dlbmVyYXRlX3BhcnNlZF9jbGFzcyk6IE5vIGxvbmdlciBleGlzdHMuCgkoamF2YV9sYXlvdXRfcGFyc2VkX2NsYXNzLCBqYXZhX3JlZ2lzdGVyX3BhcnNlZF9jbGFzcyk6IE5ldyBmdW5jdGlvbnMuCgkocmVzb2x2ZV9leHByZXNzaW9uX25hbWUpOiBOZXcgZnVuY3Rpb24uCgpUaHUgRmViIDEyIDExOjU0OjI4IDE5OTggIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogamNmLXBhcnNlLmM6IChwYXJzZV9zb3VyY2VfZmlsZSk6IENoZWNrIG9uIGVycm9ycyBhZnRlciBpbml0IGxleC4KCSogbGV4LmM6IChqYXZhX2luaXRfbGV4KTogRGVmZXIgY3R4cC0+amF2YV9wYXNzIGluaXRpYWxpemF0aW9uCgl1bnRpbCBwYXNzIGluaXRpYWxpemF0aW9ucyBhcmUgZG9uZS4gQ2FsbCByZWFkX2ltcG9ydF9kaXIgd2l0aAoJcGFzcyBzZXQgdG8gMC4KCSogcGFyc2UuaDogKGxvb2t1cF9tb2RpZmllcl9jbCk6IE5ldyBmdW5jdGlvbiBkZWNsYXJlZC4KCShJTlRFUkZBQ0VfRklFTERfTU9ESUZJRVJTKTogTmV3IG1hY3JvLgoJKE9CU09MRVRFX01PRElGSUVSX1dBUk5JTkcpOiBOZXcgbWFjcm8uCgkqIHBhcnNlLnk6IChyZWdpc3Rlcl9maWVsZHMpOiBDbGFzcyB0eXBlIGFuZCBjdXJyZW50IGZpZWxkIG5hbWUgaW4KCWxvY2FsIHZhcmlhYmxlcy4gQ2hlY2sgbW9kaWZpZXIocykgaWYgYWRkaW5nIGZpZWxkKHMpIHRvIGFuIGludGVyZmFjZS4KCShjaGVja19hYnN0cmFjdF9tZXRob2RfaGVhZGVyKTogTm93IHVzZSBPQlNPTEVURV9NT0RJRklFUl9XQVJOSU5HCglhbmQgcmVwb3J0IGVycm9ycyB1c2luZyB0aGUgZmF1bHR5IG1vZGlmaWVyIGxpbmUgY29udGV4dC4KCShsb29rdXBfbW9kaWZpZXJfY2wpOiBOZXcgZnVuY3Rpb24uCgkocmVhZF9pbXBvcnRfZGlyKTogRGV0ZWN0IGFuZCByZXBvcnQgZGVmYXVsdCBpbXBvcnQgcHJvY2Vzc2luZwoJZmFpbHVyZS4KCjE5OTgtMDItMTEgIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGN5Z251cy5jb20+CgoJQWRkIGEgcGFpciBvZiAtZmFzc3VtZS1jb21waWxlZC8tZm5vLWFzc3VtZS1jb21waWxlZCBvcHRpb25zLgoJKiBjbGFzcy5jIChpc19jb21waWxlZF9jbGFzcyk6IFJldHVybiAxIGFmdGVyIG1ha2luZyBzdXJlIGl0CglxdWFsaWZpZXMgYXMgbG9hZGVkLCBpZiBGTEFHX0FTU1VNRV9DT01QSUxFRCBpcyBzZXQuCgkqIGxhbmctb3B0aW9ucy5oOiBBZGQgLWZhc3N1bWUtY29tcGlsZWQvLWZuby1hc3N1bWUtY29tcGlsZWQuCgkqIGphdmEtdHJlZS5oIChmbGFnX2Fzc3VtZV9jb21waWxlZCk6IEFkZCBkZWNsLgoJKiBsYW5nLmMgKGxhbmdfZl9vcHRpb25zKTogQWRkIHRoZSBmbGFnLgoJKGZsYWdfYXNzdW1lX2NvbXBpbGVkKTogQWRkIGRlY2wsIGRlZmF1bHQgdG8gMC4KCldlZCBGZWIgMTEgMTE6Mjc6NTkgMTk5OCAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBjbGFzcy5jIChjbGFzc19kZXB0aCk6IENhbGwgdG8gbG9hZF9jbGFzcyB1c2VzIGV4dHJhIFZFUkJPU0UgYXJnLgoJKGlzX2NvbXBpbGVkX2NsYXNzKTogTGlrZXdpc2UuCgkobGF5b3V0X2NsYXNzKTogTGlrZXdpc2UuCgkobGF5b3V0X2NsYXNzKTogRGV0ZWN0IGFuZCBsYXkgb3V0IGNsYXNzZXMgZGVmaW5lZCBpbiBzb3VyY2UgY29kZS4KCShpbnRlcmZhY2Vfb2ZfcCwgYWRkX2ludGVyZmFjZV9kbywgbWF5X2FkZF9pbnRlcmZhY2UpOiBOZXcKCWZ1bmN0aW9uLgoJKGFkZF9pbnRlcmZhY2UpOiBOb3cgdXNlIGFkZF9pbnRlcmZhY2VfZG8uCgkoYWRkX21ldGhvZF8xKTogTmV3IGZ1bmN0aW9uLgoJKGFkZF9tZXRob2QpOiBOb3cgdXNlIGFkZF9tZXRob2RfMS4KCShwdXNobGV2ZWwpOiBEZWJ1ZyBtZXNzYWdlIGNvbmRpdGlvbmFsIHRvIFNPVVJDRV9GUk9OVEVORF9ERUJVRy4KCShjb21wbGV0ZV9zdGFydF9qYXZhX21ldGhvZCk6IE5ldyBmdW5jdGlvbi4KCShzdGFydF9qYXZhX21laG9kKTogTm93IGNhbGwgY29tcGxldGVfc3RhcnRfamF2YV9tZXRob2QuCgkqIGV4cHIuYyAobG9va3VwX2ZpZWxkKTogQ2FsbCB0byBsb2FkX2NsYXNzIHVzZXMgZXh0cmEgVkVSQk9TRSBhcmcuCgkoZXhwYW5kX2ludm9rZSk6IExpa2V3aXNlIGFuZCBmaXhlZCB0eXBvLgoJKmdqYXZhLmM6IChwcmludF9zdXBlcl9maWVsZCk6IFVzZSBuZXcgYXJndW1lbnQgdG8gZmluZF9jbGFzcwoJRE9fQ0xBU1NfRklMRS4KCShtYWluKTogTGlrZXdpc2UuCgkqamF2YS10cmVlLmg6IChDTEFTU19GUk9NX1NPVVJDRV9QKTogTmV3IGZsYWcgb24gUkVDT1JEX1RZUEUuCgkoSVNfQV9TSU5HTEVfSU1QT1JUX0NMQVNTRklMRV9OQU1FX1AsIElTX0FfQ0xBU1NGSUxFX05BTUUsCglRVUFMSUZJRURfUCwgSVNfQU5fSU1QT1JUX09OX0RFTUFORF9QKTogTmV3IGZsYWdzIG9uCglJREVOVElGSUVSX05PREUuCgkoQ0xBU1NfQ09NUExFVEVfUCk6IE5ldyBmbGFnIG9uIFRZUEVfREVDTC4KCShhZGRfbWV0aG9kXzEsIHB1c2hfY2xhc3MpOiBOZXcgcHJvdG90eXBlcy4KCSpqY2YtZHVtcC5jOiBmaW5kX2NsYXNzIG5vdyB1c2VzIG5ldyBET19DTEFTU19GSUxFIGFyZ3VtZW50LgoJKmpjZi1pby5jOiAob3Blbl9pbl96aXApOiBqY2Ygbm93IHN0b3JlcyBhIHBvaW50ZXIgdG8gdGhlIFppcAoJZGlyZWN0b3J5IHdoZXJlIHRoZSBjbGFzcyB3YXMgZm91bmQuCgkoZmluZF9jbGFzcyk6IE5ldyBhcmd1bWVudCBET19DTEFTU19GSUxFLiBGdW5jdGlvbiBmaW5kX2NsYXNzCgltb2RpZmllZCBhY2NvcmRpbmdseS4KCSpqY2YtcGFyc2UuYzogKGZpeF9jbGFzc19wYXRoKTogTmV3IGZ1bmN0aW9uLgoJKGxvYWRfY2xhc3MpOiBVc2UgbmV3IFZFUkJPU0UgYXJndW1lbnQuIGxvYWRfY2xhc3Mgbm93IGZpbmRzIGFuZAoJbG9hZHMvcGFyc2VzIC5jbGFzcy8uamF2YSBmaWxlcy4gU2F2ZSByZWFkX3N0YXRlIG9mIGN1cnJlbnRfamNmCglpZiBuZWNlc3NhcnkuCgkoamF2YV9wYXJzZXJfYWJvcnRfb25fZXJyb3IpOiBOZXcgbWFjcm8uCgkoamNmX3BhcnNlX3NvdXJjZSwgcGFyc2Vfc291cmNlX2ZpbGUpOiBOZXcgZnVuY3Rpb24uCgkoamNmX3BhcnNlKTogRml4ZWQgdHlwby4KCSh5eXBhcnNlKTogQ2FsbCBwYXJzZV9zb3VyY2VfZmlsZSAoKSBvbmx5LgoJKHByb2Nlc3NfemlwX2Rpcik6IEZpeGVkIHR5cG8sIGZpeCB6ZGlyLT5maWxlbmFtZV9sZW5ndGggd2hlbgoJd3JpdGluZyB0aGUgcmVhbCBjbGFzcyBuYW1lIGJhY2sgaW4gdGhlIHppcCBkaXJlY3RvcnkgZW50cnkuCgkoZmluZF9pbl9jdXJyZW50X3ppcCk6IElERU5USUZJRVJfQ0xBU1NfVkFMVUUgbWF5IGJlIG51bGwuCgkoamNmX2ZpZ3VyZV9maWxlX3R5cGUpOiBGaXhlZCBib2d1cyBhbGxvYyBhbmQgYmNvcHkuCgkqamNmLmg6ICh0eXBlZGVmIHN0cnVjdCBKQ0YpOiBOZXcgZmllbGRzIGphdmFfc291cmNlIGFuZCB6aXBkLgoJKGZpbmRfY2xhc3MpOiBQcm90b3R5cGUgZml4ZWQuCgkqbGV4LmM6IEFkZGVkIDE5OTggdGltZSBzdGFtcC4KCVJlbW92ZWQgYWxsIHN0YXRpYyBnbG9iYWwgdmFyaWFibGVzLCBtb3ZlZCBpbnRvIHRoZSBwYXJzZXIKCWNvbnRleHQgZGF0YSBzdHJ1Y3R1cmUuLiBOb3cgaW5jbHVkZSB1bmlzdGQuaCBpZiBTRUVLX1NFVCBub3QKCWRlZmluZWQuCgkoamF2YV9pbml0X2xleCk6IFJld3JpdHRlbi4KCShqYXZhX3NuZWFrX3VuaWNvZGUpOiBNb2RpZmllZCBjdXJyZW50IHVuaWNvZGUgYWNjZXNzIGluIGN1cnJlbnQgbGluZS4KCShqYXZhX3VuZ2V0X3VuaWNvZGUpOiBMaWtld2lzZS4KCShqYXZhX2FsbG9jYXRlX25ld19saW5lKTogTmV3IGFsbG9jYXRpb24gbWFuYWdlbWVudC4KCShqYXZhX3JlYWRfY2hhcik6IE1vZGlmaWVkIGFjY2VzcyBhbmQgc3RvcmFnZSBvZiB1bmdldF91dGY4X3ZhbHVlLgoJTmV3IHdheSBvZiBwcm9jZXNzaW5nIGN1cnJlbnQgdW5pY29kZS4KCShqYXZhX3N0b3JlX3VuaWNvZGUsIGphdmFfcmVhZF91bmljb2RlKTogRml4ZWQgdHlwbyBpbiBkZWNsYXJhdGlvbi4KCShqYXZhX2dldF91bmljb2RlKTogTm93IHVzZSB0aGUgcGFyc2VyIGNvbnRleHQuCgkoamF2YV9saW5ldGVybWluYXRvcik6IExpa2V3aXNlLgoJKGphdmFfbGV4KTogTm93IHVzZWQgamF2YV9sdmFsIGFyZ3VtZW50IChwb2ludGVyIHRvIFlZU1RZUEUpLCBwYXJ0CglvZiB0aGUgcmVlbnRyYW50IHBhcnNlciBpbXBsZW1lbnRhdGlvbi4gRnVuY3Rpb24gbm93IHVzZSB0aGUKCXBhcnNlciBjb250ZXh0IGRhdGEgc3RydWN0dXJlIGFuZCBqYXZhX2x2YWwuIEZpeGVkIHByb2R1Y3Rpb24gb2YKCXRoZSBmbG9hdCBhbmQgZG91YmxlIGNvbnN0YW50ICJvdXQgb2YgcmFuZ2UiIGVycm9yIG1lc3NhZ2UuIEZpeGVkCglvYnN0YWNrIHVzZS4gUmV0dXJuIGludGVnZXIgdmFsdWUgd2hlbiBoaXR0aW5nIGEgbW9kaWZpZXIuIE5vdwoJcmV0dXJuIHR5cGUgZm9yIFRSVUUsIEZBTFNFIGFuZCBvdGhlciBwcmVkZWZpbmVkIHR5cGVzLiBSZXR1cm4KCWlkZW50aWZpZXIgYXMgYSBUUkVFX0xJU1QgbGlzdCBjb250YWluaW5nIHRoZSBjdXJyZW50IGxpbmUgY29udGV4dAoJYXMgdGhlIFRSRUVfVkFMVUUgc3ViLW5vZGUuCgkoamF2YV91bmljb2RlXzJfdXRmOCk6IEZpeGVkIHR5cG8gaW4gZGVjbGFyYXRpb24uCgkoamF2YV9sZXhfZXJyb3IpOiBOb3cgdXNlIHRoZSBwYXJzZXIgY29udGV4dCBkYXRhIHN0cnVjdHVyZS4KCSpsZXguaDogQWRkZWQgMTk5OCB0aW1lIHN0YW1wLgoJKHN0cnVjdCBqYXZhX2xpbmUpOiBOZXcgZmllbGRzIHJlZl9jb3VudCBhbmQgbmV4dC4KCShKQVZBX0xJTkVfQ0hFQ0ssIEpBVkFfTElORV9NQVJLLCBKQVZBX0xJTkVfQ0hBSU4sCglKQVZBX0xJTkVfVU5NQVJLLCBJRF9OQU1FLCBJRF9DTCk6IE5ldyBtYWNyb3MuCgkoSkFWQV9GTE9BVF9SQU5HRV9FUlJPUiwgSkFWQV9JTlRFR1JBTF9SQU5HRV9FUlJPUiwgVU5HRVRDKTogRml4ZWQuCgkqcGFyc2UuaDogQWRkZWQgMTk5OCB0aW1lIHN0YW1wLgoJKGphdmFfcGFyc2Vfc291cmNlX2ZpbGUpOiBSZW5hbWVkIGZyb20gcGFyc2Vfc291cmNlX2ZpbGUuCgkoWVlFUlJPUl9OT1csIFlZTk9UX1RXSUNFKTogRml4ZWQuCgkoQ0xBU1NfTU9ESUZJRVJTLCBGSUVMRF9NT0RJRklFUlMsIE1FVEhPRF9NT0RJRklFUlMsCglJTlRFUkZBQ0VfTU9ESUZJRVIsIElOVEVSRkFDRV9NRVRIT0RfTU9ESUZJRVJTLAoJSkFWQV9NT0RJRklFUl9DVFhfVU5NQVJLLCBJQ19ERUNMLCBJQ19ERVBFTkQsIERFUEVORF9ERUNMLAoJVEhJU19NT0RJRklFUl9PTkxZLCBBQlNUUkFDVF9DSEVDSywgQkVHSU5fT05MWV9QQVNTLAoJRU5EX09OTFlfUEFTUywgRUxTRV9PTkxZX1BBU1MsIGV4aXRfamF2YV9jb21wbGV0ZV9jbGFzcywKCUNMQVNTX09SX0lOVEVSRkFDRSwgSU5DT01QTEVURV9QKTogTmV3IG1hY3Jvcy4KCShzdHJ1Y3QgcGFyc2VyX2N0eHQpOiBOZXcgZGF0YSBzdHJ1Y3R1cmUgdG8ga2VlcCB0aGUgcGFyc2VyIGNvbnRleHQuCgkqcGFyc2UueTogQWRkZWQgMTk5OCB0aW1lIHN0YW1wLCBnb3QgcmlkIG9mIHN0YXRpYyBnbG9iYWwgdmFyaWFibGVzLgoJKGphdmFfZXJyb3JfY291bnQsIGN0eHApOiBOZXcgZ2xvYmFsIHZhcmlhYmxlcy4KCSgldW5pb24pOiBOZXcgdmFsdWUgZmllbGQuCgkobnVtZXJpY190eXBlLCBpbnRlZ3JhbF90eXBlKTogUnVsZXMgcmVtb3ZlZC4KCShwcmltaXRpdmVfdHlwZSk6IFJ1bGUgZGVmaW5lZCB0byBoYW5kbGUgaW50ZWdyYWwsIGZsb2F0LCBkb3VibGUgYW5kCglib29sZWFuIHR5cGVzLgoJKHF1YWxpZmllZF9uYW1lLCBwYWNrYWdlX2RlY2xhcmF0aW9uLAoJc2luZ2xlX3R5cGVfaW1wb3J0X2RlY2xhcmF0aW9uLCB0eXBlX2ltcG9ydF9vbl9kZW1hbmRfZGVjbGFyYXRpb24sCgltb2RpZmllcnMsIGNsYXNzX2RlY2xhcmF0aW9uLCBzdXBlciwgaW50ZXJmYWNlcywKCWludGVyZmFjZV90eXBlX2xpc3QsIGNsYXNzX2JvZHksIGZpZWxkX2RlY2xhcmF0aW9uLAoJZmllbGRfZGVjbGFyYXRpb24sIHZhcmlhYmxlX2RlY2xhcmF0b3JzLCB2YXJpYWJsZV9kZWNsYXJhdG9yLAoJdmFyaWFibGVfZGVjbGFyYXRvcl9pZCwgbWV0aG9kX2RlY2xhcmF0aW9uLCBtZXRob2RfaGVhZGVyLAoJZm9ybWFsX3BhcmFtZXRlcl9saXN0LCBmb3JtYWxfcGFyYW1ldGVyLCBtZXRob2RfYm9keSwgYmxvY2ssCglzdGF0aWMsIGludGVyZmFjZV9kZWNsYXJhdGlvbiwgZXh0ZW5kc19pbnRlcmZhY2VzLAoJYWJzdHJhY3RfbWV0aG9kX2RlY2xhcmF0aW9uLCBsb2NhbF92YXJpYWJsZV9kZWNsYXJhdG9ycyk6IFJ1bGVzIG5vdwoJZGVmaW5lIGFjdGlvbnMuCgkoZm9yY2VfZXJyb3IsIGRvX3dhcm5pbmcpOiBOZXcgZ2xvYmFsIHN0YXRpY3MuCgkocHVzaF9wYXJzZXJfY29udGV4dCwgcGFyc2VyX2NvbnRleHRfc2F2ZV9nbG9iYWwsCglwYXJzZXJfY29udGV4dF9yZXN0b3JlX2dsb2JhbCwgcG9wX3BhcnNlcl9jb250ZXh0KTogTmV3IGZ1bmN0aW9ucy4KCSh5eWVycm9yKTogTm93IHVzZXMgdGhlIGdsb2JhbCBwYXJzZXIgY29udGV4dC4gRml4ZWQgdXNlIG9mIG9ic3RhY2suCgkocGFyc2VfZXJyb3IsIHBhcnNlX2Vycm9yX2NvbnRleHQsIHBhcnNlX3dhcm5pbmdfY29udGV4dCwKCWphdmFfYWNjc3RyaW5nX2xvb2t1cCwgcmVkZWZpbml0aW9uX2Vycm9yLCBjaGVja19tb2RpZmllcnMsCglwYXJzZXJfYWRkX2ludGVyZmFjZSwgY3JlYXRlX2ludGVyZmFjZSwgY3JlYXRlX2NsYXNzLCBmaW5kX2ZpZWxkLAoJZHVwbGljYXRlX2RlY2xhcmF0aW9uX2Vycm9yLCByZWdpc3Rlcl9maWVsZHMsIG1ldGhvZF9oZWFkZXIsCgljaGVja19tb2RpZmllcnNfY29uc2lzdGVuY3ksIGNoZWNrX2Fic3RyYWN0X21ldGhvZF9oZWFkZXIsCgltZXRob2RfZGVjbGFyYXRvciwgcGFyc2VyX3F1YWxpZmllZF9jbGFzc25hbWUsCglwYXJzZXJfY2hlY2tfc3VwZXJfaW50ZXJmYWNlLCBwYXJzZXJfY2hlY2tfc3VwZXIsCglwYXJzZXJfY2hhaW5faW5jb21wbGV0ZV9pdGVtLCBqYXZhX2NoZWNrX2NpcmN1bGFyX3JlZmVyZW5jZSwKCWxheW91dF9jbGFzc19mcm9tX3NvdXJjZSwgamF2YV9jb21wbGV0ZV9jbGFzcywKCWNvbXBsZXRlX21ldGhvZF9kZWNsLCByZXNvbHZlX2NsYXNzLCBjb21wbGV0ZV9jbGFzc19yZXBvcnRfZXJyb3JzLAoJamF2YV9jaGVja19maW5hbCwgY2hlY2tfbWV0aG9kX3JlZGVmaW5pdGlvbiwKCWphdmFfY2hlY2tfcmVndWxhcl9tZXRob2RzLCBqYXZhX2NoZWNrX2Fic3RyYWN0X21ldGhvZHMsCglqYXZhX2NoZWNrX21ldGhvZHMsIGxvb2t1cF9qYXZhX2ludGVyZmFjZV9tZXRob2QyLAoJbG9va3VwX2phdmFfbWV0aG9kMiwgbG9va3VwX2NsLCBmaW5kX25hbWVfaW5fc2luZ2xlX2ltcG9ydHMsCglwcm9jZXNzX2ltcG9ydHMsIGZpbmRfaW5faW1wb3J0cywgcmVhZF9pbXBvcnRfZW50cnksCglyZWFkX2ltcG9ydF9kaXIsIGZpbmRfaW5faW1wb3J0c19vbl9kZW1hbmQsCgljaGVja19wa2dfY2xhc3NfYWNjZXNzLCBub3RfYnVpbHRpbl9wLCBkZWNsYXJlX2xvY2FsX3ZhcmlhYmxlcywKCXNvdXJjZV9zdGFydF9qYXZhX21ldGhvZCwgamF2YV9nZW5lcmF0ZV9wYXJzZWRfY2xhc3MpOiBOZXcKCWZ1bmN0aW9ucy4KCSp0eXBlY2suYzogKHNpZ25hdHVyZV9pbmNsdWRlX3JldHVybik6IE5ldyBnbG9iYWwgdmFyaWFibGUuCgkoYnVpbGRfamF2YV9zaWduYXR1cmUpOiBVc2UgU0lHTkFUVVJFX0lOQ0xVREVfUkVUVVJOIGZpZ3VyZSB3aGV0aGVyCgl0byBhZGQgdGhlIGZ1bmN0aW9uIHJldHVybmVkIHR5cGUgaW4gdGhlIHNpZ25hdHVyZS4KCjE5OTgtMDItMDkgIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGN5Z251cy5jb20+CgoJKiBqY2YtaW8uYyAob3Blbl9pbl96aXApOiBVc2Ugc3RybmNtcCBhbmQgTEVOLgoKVGh1IEphbiAyOSAxNjoxMjoxMyAxOTk4ICBEYXZlIEJyb2xsZXkgIDxicm9sbGV5QGN5Z251cy5jb20+CgoJKiBNYWtlLWxhbmcuaW4gKGphdmEuaW5mbyk6IEFkZGVkLgoJKGphdmEuaW5zdGFsbC1pbmZvKTogQWRkZWQKCjE5OTgtMDEtMjcgIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGN5Z251cy5jb20+CgoJKiBNYWtlZmlsZS5pbiAoY2xlYW4pOiBBbHNvIHJlbW92ZSBqYXZhL3BhcnNlLmMuCgoxOTk4LTAxLTI2ICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBjeWdudXMuY29tPgoKCUFkZCBhIHBhaXIgb2YgLWZib3VuZHMtY2hlY2svLWZuby1ib3VuZHMtY2hlY2sgb3B0aW9ucy4KCSogbGFuZy5jIChsYW5nX2RlY29kZV9vcHRpb24pOiBBZGQgY29kZSB0byBncm9rIGFyZ3VtZW50cy4KCShmbGFnX2JvdW5kc19jaGVjayk6IEFkZCBkZWNsLgoJKGxhbmdfZl9vcHRpb25zKTogTmV3IGFycmF5IHcvIHRoZSBvcHRpb24gaW4gaXQuCgkqIGphdmEtdHJlZS5oIChmbGFnX2JvdW5kc19jaGVjayk6IEFkZCBkZWNsLgoJKiBsYW5nLW9wdGlvbnMuaDogTmV3IGZpbGUuCgkqIGV4cHIuYyAoYnVpbGRfamF2YV9hcnJheWFjY2Vzcyk6IFVzZSBmbGFnX2JvdW5kc19jaGVjayBpbnN0ZWFkCglvZiBhIHN0YXRpYyBtYWNybyB2YWx1ZS4KCShKQVZBX0FSUkFZX0VYQ0VQVElPTik6IERlbGV0ZSBtYWNyby4KCkZyaSBKYW4gMjMgMTQ6MTk6NDcgMTk5OCAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGN5Z251cy5jb20+CgoJKiB0eXBlY2suYyAoYnVpbGRfamF2YV9hcnJheV90eXBlKTogIEZpeCB0d28gYnVncyBpbiBwcmV2aW91cyBjaGFuZ2UuCgkqIGV4cHIuYyAoYnVpbGRfYW5ld2FycmF5KTogIEFkZCBtaXNzaW5nIHByb21vdGVfdHlwZS4KClRodSBKYW4gMjIgMTc6NDM6NDUgMTk5OCAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGN5Z251cy5jb20+CgoJQWRkIGFycmF5IHR5cGVzIHdpdGgga25vd24gbGVuZ3RoIHRvIG9wdGltaXplIGJvdW5kcyBjaGVja2luZy4KCSogdHlwZWNrLmMgKGJ1aWxkX2phdmFfYXJyYXlfdHlwZSk6ICBUYWtlIGxlbmd0aCBwYXJhbWV0ZXIuCgkoamF2YV9hcnJheV90eXBlX2xlbmd0aCwgYnVpbGRfcHJpbV9hcnJheV90eXBlKTogIE5ldyBmdW5jdGlvbnMuCgkqIGphdmEtdHJlZS5oOiAgVXBkYXRlIGZvciBuZXcgZnVuY3Rpb25zLgoJKiBleHByLmMsIHR5cGVjay5jLCB2ZXJpZnkuYzogVXBkYXRlIGJ1aWxkX2phdmFfYXJyYXlfdHlwZSBjYWxscy4KCSogY2xhc3MuYzogIFVzZSBidWlsZF9wcmltX2FycmF5X3R5cGUuCgkqIGV4cHIuYyAoY2FuX3dpZGVuX3JlZmVyZW5jZV90byk6ICBIYW5kbGUga25vd24tbGVuZ3RoIGFycmF5IHR5cGVzLgoJKHZlcmlmeV9qdm1faW5zdHJ1Y3Rpb25zKTogIEtlZXAgdHJhY2sgb2YgaW50ZWdlciBwdXNoIGluc3RydWN0aW9ucwoJZm9sbG93ZWQgYnkgbmV3YXJyYXkvYW5ld2FycmF5LCBzbyB3ZSBjYW4gYnVpbGQga25vd24tbGVuZ3RoIGFycmF5cy4KCShKQVZBX0FSUkFZX0RBVEFfT0ZGU0VUKTogIFJlcGxhY2UgYnkgLi4uCgkoamF2YV9hcnJheV9kYXRhX29mZnNldCk6ICBOZXcgZnVuY3Rpb24uCgkoYnVpbGRfamF2YV9hcnJheV9sZW5ndGhfYWNjZXNzKTogIE5ldyBmdW5jdGlvbi4gIE9wdGltaXplIGlmIGNvbnN0YW50LgoJKGJ1aWxkX2phdmFfYXJyYXlhY2Nlc3MpOiAgQ29uc3RhbnQgZm9sZCBib3VuZHMgY2hlY2suCgkoZXhwYW5kX2phdmFfbmV3YXJyYXksIGV4cGFuZF9qYXZhX2FuZXdhcnJheSk6ICBSZXBsYWNlZCBieSAuLi4KCShidWlsZF9uZXdhcnJheSwgYnVpbGRfYW5ld2FycmF5KTogIE5ldyBmdW5jdGlvbnMuCgkoQVJSQVlfTkVXX05VTSwgQVJSQVlfTkVXX1BUUik6ICBVc2UgYnVpbGRfe2EsfW5ld2FycmF5LgoJKiB2ZXJpZnkuYyAobWVyZ2VfdHlwZXMpOiAgSGFuZGxlIGtub3duLWxlbmdoIGFycmF5IHR5cGVzLgoKTW9uIEphbiAxOSAxMzowOToyNSAxOTk4ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAY3lnbnVzLmNvbT4KCgkqIGV4cHIuYyAoZXhwYW5kX2J5dGVfY29kZSk6ICBGaXggcGVyZm9ybWFjZSBidWcsIHdoaWNoIGNhdXNlZAoJc2VhcmNoaW5nIGxpbmVudW1iZXJfdGFibGUgdG8gYmUgbGluZWFyIHJhdGhlciB0aGFuIGNvbnN0YW50LgoKRnJpIERlYyAxMiAxOToxODo0MiAxOTk3ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAY3lnbnVzLmNvbT4KCgkqIE1ha2VmaWxlLmluIChCSVNPTiwgQklTT05GTEFHUyk6ICBBZGQgbWlzc2luZyBtYWNyb3MuCgoJKiBkZWNsLmMsIGphdmEtdHJlZS5oIChzb2Z0X2Ztb2Rfbm9kZSk6ICBOZXcgZ2xvYmFsLgoJKiBkZWNsLmMgKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogIERlZmluZSBfX2J1aWx0aW5fZm1vZC4KCSogZXhwci5jIChidWlsZF9qYXZhX2Jpbm9wKTogIEltcGxlbWVudCBUUlVOQ19NT0RfRVhQUiBmb3IgUkVBTF9UWVBFCgl1c2luZyBfX2J1aWx0aW5fZm1vZC4KClRodSBEZWMgIDQgMTM6MjI6NTkgMTk5NyAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBrZXl3b3JkLmg6IE5ldyBmaWxlLCBvdXRwdXQgb2Yga2V5d29yZC5ncGVyZiBhcyBwcm9jZXNzZWQgYnkKCWdwZXJmLgoJKiBsZXguYyAoamF2YV9sZXhfaW5pdCk6IEluaXRpYWxpemUgamF2YV9lcnJvcl9mbGFnLgoJKiBwYXJzZS5jIChZWUVSUk9SX05PVyk6IFVzZXMgamF2YV9lcnJvcl9mbGFnLgoJKiBwYXJzZS55OiBOZXcgc3RhdGljIGphdmFfZXJyb3JfZmxhZy4gVXNlbGVzcyBkZWZpbml0aW9uIG9mCglidWZmZXJfZXJyb3IgZ29uZS4KCSogcGFyc2UueSAoamF2YV9lcnJvcik6IFBvcnRhYmxlIGVycm9yIHJlY292ZXJ5IHVzaW5nCglqYXZhX2Vycm9yX2ZsYWcJKG5vdCB5ZXQgY29tcGxldGVseSB0dW5lZCkuCgoxOTk3LTEyLTA0ICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBsaXNhLmN5Z251cy5jb20+CgoJKiBNYWtlZmlsZS5pbiAocGFyc2UuYyk6IFVzZSAkKHNyY2RpcikgZm9yIHBhcnNlLnkuCgpXZWQgRGVjICAzIDE4OjM3OjQyIDE5OTcgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogTWFrZWZpbGUuaW46IChKQVZBX09CSlMpOiBOZXcgb2JqZWN0IGpjZi1wYXJzZS5vLgoJKHBhcnNlLmMsIGxleC5jLCBrZXl3b3JkLmgpOiBOZXcgcnVsZXMgZm9yIEphdmEgc291cmNlIGNvZGUKCWZyb250LWVuZC4KCSogcGFyc2UuYzogUmVuYW1lZCBpbnRvIGpjZi1wYXJzZS5jLgoJKiBqY2YtcGFyc2UuYyAoeXlwYXJzZSk6IEludm9rZSB0aGUgcGFyc2VyIHRvIHByb2Nlc3MgSmF2YSBzb3VyY2UgY29kZS4KCSoga2V5d29yZC5ncGVyZjogTmV3IGZpbGUsIEphdmEga2V5d29yZHMuCgkqIHBhcnNlLnk6IE5ldyBmaWxlLCBKYXZhIGxhbmd1YWdlIGdyYW1tYXIuCgkqIHBhcnNlLmg6IE5ldyBmaWxlLCBKYXZhIGxhbmd1YWdlIGdyYW1tYXIgZGVmaW5pdGlvbnMuCgkqIGxleC5jOiBOZXcgZmlsZSwgSmF2YSBsYW5ndWFnZSBsZXhlci4KCSogbGV4Lmg6IE5ldyBmaWxlLCBKYXZhIGxhbmd1YWdlIGxleGVyIGRlZmluaXRpb25zLgoKV2VkIERlYyAgMyAxNzowMDoxNyAxOTk3ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAoY2xpbml0X2lkZW50aWZpZXJfbm9kZSksIGphdmEtdHJlZS5oOiAgTmV3IGdsb2JhbC4KCSogamF2YS10cmVlLmggKElTX01FVEhPRF9JTklUX1AsIElTX01FVEhPRF9DTElOSVRfUCk6ICBSZW1vdmVkLgoJKiB2ZXJpZnkuYyAodmVyaWZ5X2p2bV9pbnN0cnVjdGlvbnMpOiAgSW5saW5lIHVzZSBvZiByZW1vdmVkIG1hY3Jvcy4KCSogZXhwci5jIChleHBhbmRfamF2YV9maWVsZF9vcCk6ICBDaGVjayBmb3IgaW52YWxpZCBhc3NpZ25tZW50Cgl0byBmaW5hbCBmaWVsZC4KCgkqIGpjZi1yZWFkZXIuYyAoZ2V0X2F0dHJpYnV0ZSk6ICBUZXN0IGZvciB3cm9uZyBhdHRyaWJ1dGUgbGVuZ3RoLgoKTW9uIE9jdCAyNyAxNzo0NjozNiAxOTk3ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAY3lnbnVzLmNvbT4KCgkqIHZlcmlmeS5jICh2ZXJpZnlfanZtX2luc3RydWN0aW9ucyk6ICBXaGVuIHByb2Nlc3NpbmcgYSBoYW5kbGVyLAoJYXR0ZW1wdCB0byBzZXQgdGhlIGN1cnJlbnRfc3ViciB0byB0aGUgcmlnaHQgdmFsdWUuCgkoTW9yZSBjb21wbGljYXRlZCBjb2RlIGNvbWJpbmVzIFNlcCAxNyBhbmQgT2N0IDIyIHZlcnNpb25zLikKCkZyaSBPY3QgMjQgMTE6MzY6NTQgMTk5NyAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGN5Z251cy5jb20+CgoJKiBjbGFzcy5jIChwdXNoX2NsYXNzKTogIEZpZ3VyZSBvdXQgKGd1ZXNzKSBuYW1lIG9mIHNvdXJjZSBmaWxlLgoJKiBwYXJzZS5jICAoc2V0X3NvdXJjZV9maWxlbmFtZSk6ICBTZXQgREVDTF9TT1VSQ0VfRklMRSBvZiBjbGFzcyBkZWNsLgoJKGdpdmVfbmFtZV90b19jbGFzcyk6ICBEb24ndCBndWVzcyBzb3VyY2UgbmFtZTsgIHVzZSBERUNMX1NPVVJDRV9GSUxFLgoJKHBhcnNlX2NsYXNzX2ZpbGUpOiAgQ2hhbmdlIHJldHVybiB0eXBlIGZyb20gaW50IHRvIHZvaWQuCglDYWxsIGRlYnVnX3N0YXJ0X3NvdXJjZV9maWxlL2RlYnVnX2VuZF9zb3VyY2VfZmlsZS4KCgkqIGV4cHIuYyAoYnVpbGRfamF2YV9iaW5vcCk6ICBGaXggbWFza2luZyAybmQgb3BlcmFuZC4KCSogZGVjbC5jIChpbml0X2RlY2xfcHJvY2Vzc2luZyk6ICBTZXQgc2l6ZXR5cGUgZmlyc3QuCgpXZWQgT2N0IDIyIDE5OjM5OjA1IDE5OTcgIFBlciBCb3RobmVyICA8Ym90aG5lckBjeWdudXMuY29tPgoKCSogdmVyaWZ5LmMgKHZlcmlmeV9qdm1faW5zdHJ1Y3Rpb25zKTogIERvbid0IHNldCBjdXJyZW50X3N1YnIgdG8gTlVMTC4KCShSZXZlcnQgU2VwIDE3IGNoYW5nZS4pCgpUdWUgT2N0IDIxIDE1OjA5OjAyIDE5OTcgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogcGFyc2UuYyAocHJvY2Vzc196aXBfZGlyKTogU2tpcCBaSVAgZW50cmllcyBub3QgYmVhcmluZyB0aGUKCS5jbGFzcyBleHRlbnNpb24gaW4gdGhlaXIgbmFtZSBhbmQgZml4IHRoaW5nIHNvIHdlIGRvbid0IHByb2Nlc3MKCXRoZW0gcGFyc2VfemlwX2ZpbGVfZW50cmllcygpLgoJKHBhcnNlX3ppcF9maWxlX2VudHJpZXMpOiBDbGVhbmVkIHVudXNlZCBsb2NhbCB2YXJpYWJsZXMuCgpNb24gT2N0IDIwIDE0OjUyOjQyIDE5OTcgIFBlciBCb3RobmVyICA8Ym90aG5lckBjeWdudXMuY29tPgoKCSogZXhwci5jIChjYW5fd2lkZW5fcmVmZXJlbmNlX3RvKTogIEFsbG93cyBlcXVhbCBhcnJheSBlbGVtZW50IHR5cGVzLgoJKGV4cGFuZF9ieXRlX2NvZGUpOiAgUFJFX1JFVCBtdXN0IGV4cGFuZCBPUEVSQU5EX1ZBTFVFICh0byBnZXQgaW5kZXgpLgoJKiBqY2YtZHVtcC5jIChSRVQpOiAgR2V0IChhbmQgcHJpbnQpIGluZGV4LgoKCSogdmVyaWZ5LmMgKHZlcmlmeV9qdm1faW5zdHJ1Y3Rpb25zIGNhc2UgT1BDT0RFX2FuZXdhcnJheSk6CglQcm9tb3RlIGVsZW1lbnQgdHlwZSB0byBQT0lOVEVSX1RZUEUuCgpNb24gT2N0IDIwIDEzOjQwOjQxIDE5OTcgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogamNmLXJlYWRlci5jLCBwYXJzZS5jOiAocGFyc2VfemlwX2ZpbGUsIHByb2Nlc3NfemlwX2RpciwKCWZpbmRfaW5fY3VycmVudF96aXAsIGpjZl9maWd1cmVfZmlsZV90eXBlKTogTW92ZWQgZnJvbQoJamNmLXJlYWRlci5jIHRvIHBhcnNlLmMuCgkqIHpleHRyYWN0LmM6IChyZWFkX3ppcF9hcmNoaXZlKTogdGFrZXMgZmlsZV9jb21tZW50X2xlbmd0aCBwb3NzaWJsZQoJZmllbGQgaW50byBhY2NvdW50LgoKTW9uIE9jdCAyMCAxMTo0NTowNiAxOTk3ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAY3lnbnVzLmNvbT4KCgkqIHZlcmlmeS5jICh2ZXJpZnlfanZtX2luc3RydWN0aW9ucyk6ICBWYXIgY2FuIGFsc28gYmUgcHJvbW90ZWQgdG8gaW50LgoKCSogdmVyaWZ5LmMgKG1lcmdlX3R5cGVzKTogIEhhbmRsZSBhcnJheSB0eXBlcyBldmVuIGJldHRlciAuLi4KCkZyaSBPY3QgMTcgMTU6NTY6MzcgMTk5NyAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGN5Z251cy5jb20+CgoJKiBleHByLmMgKGphdmFfc3RhY2tfcG9wKTogIEZpeCB1c2Ugb2YgTlVMTF9UUkVFIGZvciBUWVBFX1NFQ09ORC4KCgkqIGphdmEtdHJlZS5oIChQVVNIX0ZJRUxEKTogIFNldCBERUNMX0FSVElGSUNJQUwuCgkqIGNsYXNzLmMgKG1ha2VfY2xhc3NfZGF0YSk6ICBEb24ndCBidWlsZCBmaWVsZHNfZGVjbCBpZiBubyBmaWVsZHMuCglXaGVuIGJ1aWxkaW5nIGZpZWxkc19kZWNsLCBza2lwIGlmIERFQ0xfQVJUSUZJQ0lBTC4KCgkqIGV4cHIuYyAoamF2YV9zdGFja19zd2FwKTogIFVwZGF0ZSBzdGFja190eXBlX21hcC4KCSogdmVyaWZ5LmMgKG1lcmdlX3R5cGVzKTogIEhhbmRsZSBhcnJheSB0eXBlcyBiZXR0ZXIuCgpXZWQgT2N0IDE1IDE4OjA5OjQ1IDE5OTcgIFBlciBCb3RobmVyICA8Ym90aG5lckBjeWdudXMuY29tPgoKCSogY2xhc3MuYyAoYWRkX2ZpZWxkKTogIERvbid0IHByb21vdGUgc2hvcnQgaW50ZWdyYWwgZmllbGRzIHRvCglpbnQgYW55IG1vcmUgKHVubGVzcyBKQVZBX1BST01PVEVfVE9fSU5UKSwgc2luY2UgS2FmZmUgZG9lc24ndC4KCSogZXhwci5jIChwdXNoX3ZhbHVlKTogIFByb21vdGUgYW5kIGNvbnZlcnQgc2hvcnQgaW50ZWdyYWwgdmFsdWVzLgoKCSogZGVjbC5jLCBqYXZhLXRyZWUuaCAoaW50ZWdlcl90d29fbm9kZSk6ICBOZXcgY29uc3RhbnQgbm9kZS4KCSogdmVyaWZ5LmMgKG1lcmdlX3R5cGVzKTogIENoZWNrIGZvciBUWVBFX1JFVFVSTl9BRERSLgoKV2VkIE9jdCAxNSAxNzowNDo1MCAxOTk3ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIGNsYXNzLmMgKGFwcGVuZF9ncHBfbWFuZ2xlZF90eXBlKTogVXNlIGZ1bmN0aW9uIGFyZ3VtZW50Cgl1bnByb21vdGVkIHR5cGUgdG8gZ2VuZXJhdGUgbWFuZ2xlZCBuYW1lLgoKTW9uIE9jdCAxMyAxNjo1Mjo1NSAxOTk3ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIGNvbnN0YW50cy5jIChidWlsZF9jb25zdGFudF9kYXRhX3JlZik6IE5vdyB1c2VzIGN1cnJlbnRfY2xhc3MKCWluc3RlYWQgb2YgbWFpbl9jbGFzcy4KCShidWlsZF9jb25zdGFudHNfY29uc3RydWN0b3IpOiBOb3cgdXNlcyBjdXJyZW50X2NsYXNzIGluc3RlYWQgb2YKCW1haW5fY2xhc3MuCgkqIHppcGZpbGUuaDogKHN0cnVjdCBaaXBGaWxlQ2FjaGUpOiBOb3cgZGVmaW5lZCBoZXJlLiBEZWNsYXJhdGlvbgoJb2YgdGhlIGdsb2JhbCB2YXJpYWJsZSBTZWVwWmlwRmlsZXMgZG9uZSBoZXJlLgoJKiB6ZXh0cmFjdC5jIChyZWFkX3ppcF9hcmNoaXZlKTogZXh0cmFfZmllbGQgb3B0aW9uYWwgZmllbGQgdGFrZW4KCWludG8gYWNjb3VudCB3aGlsZSBjb21wdXRpbmcgdGhlIHBvc2l0aW9uIG9mIHRoZSBjbGFzcyBmaWxlIGluIHRoZQoJYXJjaGl2ZS4KCSogdmVyaWZ5LmMgKHZlcmlmeV9qdm1faW5zdHJ1Y3Rpb25zKTogVXNlIGN1cnJlbnRfamNmIHRvIHNlYXJjaAoJdGhlIGNvbnN0YW50IHBvb2wuCgkqIHBhcnNlLmMgKGxvYWRfY2xhc3MpOiBGaXJzdCBzZWFyY2ggZm9yIHRoZSBjbGFzcyB0byBsb2FkIGluIHRoZQoJY3VycmVudCB6aXAgZmlsZS4gU2F2ZXMgY3VycmVudF9qY2YgKHJlc3RvcmVkIGJlZm9yZSByZXR1cm5pbmcKCWZyb20gdGhhdCBmdW5jdGlvbikuIERvbid0IGNhbGwgSkNGX0ZJTklTSCBpbiB0aGUgY2xhc3Mgd2FzIGZvdW5kCglpbiB0aGUgY3VycmVudCBaSVAgZmlsZS4KCShqY2ZfcGFyc2UpOiBJZiB0aGUgY2xhc3Mgd2FzIGZvdW5kIGluIHRoZSBjdXJyZW50IFpJUCBmaWxlLCBzYXZlCglpdHMgdHJlZV9jb25zdGFudF9wb29sIChmb3IgbGF0ZXIgcmV1c2UpLgoJKHBhcnNlX2NsYXNzX2ZpbGUpOiBOZXcgZnVuY3Rpb24uIFByb2Nlc3MgZWFjaCBtZXRob2QgZGVmaW5lZCBpbgoJdGhlIGN1cnJlbnQgY2xhc3MgYW5kIHJlY29yZCB0aGUgY2xhc3MgYXMgdG8gYmUgbGF0ZXIgcmVnaXN0ZXJlZC4KCSh5eXBhcnNlKTogUmV3cml0dGVuLiBGaWd1cmUgdGhlIHR5cGUgb2YgdGhlIGN1cnJlbnQgZmlsZSBhbmQgc3dpdGNoCglhY2NvcmRpbmdseS4KCSogbGFuZy5jOiBOZXcgZ2xvYmFsIHZhcmlhYmxlIGN1cnJlbnRfamNmLgoJKGxhbmdfaW5pdCk6IFJlbW92ZWQgY29tcGlsaW5nX2Zyb21fc291cmNlIHRlc3QgKGRvbmUgbGF0ZXIsIGluCgl5eXBhcnNlKS4gUmVtb3ZlZCBjYWxsIHRoZSBqY2ZfcGFyc2UgKCkuCgkqIGpjZi5oIChKQ0ZfWklQLCBKQ0ZfQ0xBU1MsIEpDRl9TT1VSQ0UpOiBOZXcgZGVmaW5lZCB2YWx1ZXMuCgkodHlwZWRlZiBzdHJ1Y3QgSkNGKTogTmV3IGZpZWxkcyBzZWVuX2luX3ppcCAodG8gbWFyayBhIGNsYXNzIGZvdW5kCglpbiB0aGUgY3VycmVudCBaSVAgZmlsZSkgYW5kIHppcF9vZmZzZXQgKG9mZnNldCB0byB0aGUgY2xhc3MgZGF0YSBpbgoJdGhlIGN1cnJlbnQgemlwIGZpbGUpLgoJKiBqY2YtcmVhZGVyLmM6IHppcGZpbGUuaCBpbmNsdWRlZC4KCWxvY2FsVG9GaWxlOiBOZXcgWmlwRmlsZUNhY2hlIHN0YXRpYyBnbG9iYWwgdmFyaWFibGUKCShwYXJzZV96aXBfZmlsZV9lbnRyaWVzKTogTmV3IGZ1bmN0aW9uLiBCcm93c2UgdGhlIGN1cnJlbnQgWklQCglmaWxlIGRpcmVjdG9yeSBhbmQgcHJvY2VzcyBlYWNoIGNsYXNzIGZvdW5kLgoJKHByb2Nlc3NfemlwX2Rpcik6IE5ldyBmdW5jdGlvbi4gUmVnaXN0ZXIgZWFjaCBjbGFzcyBmb3VuZCBpbiB0aGUKCVpJUCBmaWxlIGRpcmVjdG9yeS4gVGhlIGNsYXNzIGFyZW4ndCBwYXJzZWQgYnV0IGEgdmFsaWQgSkNGIGlzCglsaW5rIHRvIGVhY2ggb2YgdGhlbS4KCShmaW5kX2luX2N1cnJlbnRfemlwKTogTmV3IGZ1bmN0aW9uLiBTZWFyY2ggZm9yIGEgY2xhc3MgaW4gdGhlCgljdXJyZW50IFpJUCBmaWxlIGRpcmVjdG9yeS4gSWYgZm91bmQsIHByZXBhcmUgdGhlIGNsYXNzIHNvIHRoYXQgaXQKCWNhbiBiZSBsb2FkZWQuCgkoamNmX2ZpZ3VyZV9maWxlX3R5cGUpOiBOZXcgZnVuY3Rpb24uIEV4YW1pbmUgdGhlIGZpbGUgc3RydWN0dXJlCgl0byBmaWd1cmUgYSBjbGFzcyBmaWxlLCBhIFpJUCBmaWxlLiBJZiBub25lIG9mIHRoZXNlIGNhdGVnb3JpZXMgYXJlCgltYXRjaGVkLCBhIHNvdXJjZSBmaWxlIGlzIGFzc3VtZWQuCgkqIGpjZi1pby5jOiBSZW1vdmVkIGRlZmluaXRpb24gb2YgWmlwRmlsZUNhY2hlIChtb3ZlZCBpbiB6aXBmaWxlLmgpLgoJU2VlblppcEZpbGU6IE5ldyBnbG9iYWwgdmFyaWFibGUuCgkob3Blbl9pbl96aXApOiBVc2UgemlwbWVtYmVyJ3MgbGVuZ3RoIHRvIGFjY2VsZXJhdGUgdGhlIHNlYXJjaCBmb3IKCWEgbWVtYmVyLiBJZiB6aXBtZW1iZXIgd2FzIE5VTEwgYW5kIHppcCBmaWxlIHN1Y2Nlc3NmdWxseSByZWFkLAoJcmV0dXJuIDAuCgkqIGphdmEtdHJlZS5oOiBOZXcgZ2xvYmFsIHZhcmlhYmxlIGN1cnJlbnRfamNmIGRlY2xhcmVkLiAgQWRkZWQKCWRlY2xhcmF0aW9uIGZvciBjdXJyZW50X2NvbnN0YW50X3Bvb2xfdGFncywgY3VycmVudF9jb25zdGFudF9wb29sX2RhdGEsCgljdXJyZW50X2NvbnN0YW50X3Bvb2xfbGVuZ3RoLCBjdXJyZW50X2NvbnN0YW50X3Bvb2xfZGF0YV9yZWYuCgkoc3RydWN0IGxhbmdfdHlwZSk6IEF1Z21lbnRlZCB3aXRoIHR3byBmaWVsZHMuIHN0cnVjdCBKQ0YgKmpjZiAodG8KCXN0b3JlIHRoZSBKQ0Ygb2YgY2xhc3NlcyBzZWVuIGluIGEgemlwIGZpbGUpIGFuZCB0cmVlICpjb25zdGFudF9wb29sCgkodG8gc2F2ZSBhIGxvYWRlZCBjbGFzcyBjb25zdGFudCBwb29sKS4gY3VycmVudF9jbGFzcyBkZWNsYXJlZCBoZXJlLgoJKiBleHByLmMgKGV4cGFuZF9pbnZva2UpOiBVc2UgY3VycmVudF9qY2YgaW5zdGVhZCBvZiBtYWluX2pjZiB0bwoJcmV0cmlldmUgbWV0aG9kX3JlZl9jb25zdGFudC4KCShQVVNIQyk6IGphdmFfcHVzaF9jb25zdGFudF9mcm9tX3Bvb2wgbm93IHVzZXMgY3VycmVudF9qY2YuCgkoT0JKRUNUKTogZ2V0X2NsYXNzX2NvbnN0YW50IG5vdyB1c2VzIGN1cnJlbnRfamNmLgoJKEFSUkFZX05FV19QVFIpOiBnZXRfY2xhc3NfY29uc3RhbnQgbm93IHVzZXMgY3VycmVudF9qY2YuCgkoQVJSQVlfTkVXX01VTFRJKTogZ2V0X2NsYXNzX2NvbnN0YW50IG5vdyB1c2VzIGN1cnJlbnRfamNmLgoJKGV4cGFuZF9pbnZva2UpOiBOb3cgdXNlcyBjdXJyZW50X2NsYXNzIGluc3RlYWQgb2YgbWFpbl9jbGFzcwoJKGJ1aWxkX2NsYXNzX2luaXQpOiBOb3cgdXNlcyBjdXJyZW50X2NsYXNzIGluc3RlYWQgb2YgbWFpbl9jbGFzcwoJKiBjbGFzcy5jOiBOZXcgc3RhdGljIGdsb2JhbCB2YXJpYWJsZSByZWdpc3RlcmVkX2NsYXNzLgoJKHJlZ2lzdGVyX2NsYXNzKTogTmV3IGZ1bmN0aW9uLgoJKGVtaXRfcmVnaXN0ZXJfY2xhc3MpOiBNb2RpZmllZCB0byB1c2UgcmVnaXN0ZXJlZF9jbGFzcyBpbnN0ZWFkIG9mCgltYWluX2NsYXNzCgkoaXNfY29tcGlsZWRfY2xhc3MpOiBOb3cgdGFrZSBpbnRvIGFjY291bnQgY2xhc3Mgc2VlbiBpbiB0aGUgYXJjaGl2ZS4KCk1vbiBPY3QgIDYgMTI6MDM6MjMgMTk5NyAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGN5Z251cy5jb20+CgoJKiBleGNlcHQuaDogIFJlbmFtZWQgdG86IGphdmEtZXhjZXB0LmguCgkqIHBhcnNlLmMsIGV4Y2VwdC5jLCBleHByLmMsIHZlcmlmeS5jOiAgVXBkYXRlICNpbmNsdWRlIGFjY29yZGluZ2x5LgoJKiBleGNlcHQuYzogIEFkZCBzZW1pLXdvcmtpbmcgKGNvbW1lbnRlZCBvdXQpIGltcGxlbWVudGF0aW9uLgoKCSogZXhwci5jIChleHBhbmRfaWluYyk6ICBBZGQgbmVlZGVkIGZsdXNoX3F1aWNrX3N0YWNrLgoJKiBwYXJzZS5jIChzZXRfc291cmNlX2ZpbGVuYW1lKTogIE5ldyBmdW5jdGlvbi4KCShnaXZlX25hbWVfdG9fY2xhc3MpOiAgU2V0IGlucHV0X2ZpbGVuYW1lIGZyb20gcGFja2FnZS5jbGFzc25hbWUuamF2YS4KCgkqIGpjZi1pby5jIChmaW5kX2NsYXNzKTogIERvbid0IGxvb2sgZmlyc3QgaW4gIi4iLgoKV2VkIE9jdCAgMSAxMToyNjoxMCAxOTk3ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIHpleHRyYWN0LmMgKHJlYWRfemlwX2FyY2hpdmUpOiBOb3cgdGFrZXMgaW50byBhY2NvdW50IHRoZQoJZXh0cmFfZmllbGQgZmllbGQuCgkqIGV4cHIuYyAoY2FuX3dpZGVuX3JlZmVyZW5jZV90byk6IE1vZGlmaWVkIHRvIGhhbmRsZSBzdWItaW50ZXJmYWNlcy4KClNhdCBTZXAgMjAgMTI6NDQ6MjggMTk5NyAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGN5Z251cy5jb20+CgoJKiBjb25zdGFudHMuYywgamF2YS10cmVlLmggKGJ1aWxkX2ludGVybmFsX2NsYXNzX25hbWUpOiAgTmV3IGZ1bmN0aW9uLgoJKGFsbG9jX2NsYXNzX2NvbnN0YW50KTogIFJlLWltcGxlbWVudCB1c2luZyBidWlsZF9pbnRlcm5hbF9jbGFzc19uYW1lLgoJKiBjbGFzcy5jIChtYWtlX2NsYXNzX2RhdGEpOiAgTGlrZXdpc2UuCgkqIGNsYXNzLmMgKGhhc2hVdGY4U3RyaW5nKTogIE1ha2UgaGFzaCBhbGdvcml0aG0gbWF0Y2ggU3RyaW5nLmhhc2hDb2RlLgoKV2VkIFNlcCAxNyAxMzoxNToyMyAxOTk3ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAY3lnbnVzLmNvbT4KCgkqIHZlcmlmeS5jICh2ZXJpZnlfanZtX2luc3RydWN0aW9ucyk6ICBUZW1wb3JhcmlseSBzZXQgY3VycmVudF9zdWJyCgl0byBOVUxMIGJlZm9yZSBwdXNoaW5nIGFuIGV4Y2VwdGlvbiBoYW5kbGVyIHRhcmdldC4KCgkqIGV4cHIuYyAoZmx1c2hfcXVpY2tfc3RhY2spOiAgU2F2ZSBmcm9tIGxvdyBzdGFjayBpbmRleGVzIHRvIGhpZ2guCgkoamF2YV9zdGFja19zd2FwLCBqYXZhX3N0YWNrX2R1cCk6ICBSZS13cml0ZSB0byBiZSBzYWZlIGZyb20KCWNsb2JiZXJpbmcgcmVnaXN0ZXJzLgoJKGJ1aWxkX2NsYXNzX2luaXQpOiAgTmV3IGZ1bmN0aW9uLgoKV2VkIFNlcCAxNyAxMTowMjo0MSAxOTk3ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIHR5cGVjay5jIChidWlsZF9qYXZhX2FycmF5X3R5cGUpOiBUZW1wb3JhcnkgdXNlCglwZXJtYW5lbnRfb2JzdGFjayB0byBjcmVhdGUgdGhlIGFycmF5ICdsZW5ndGgnIGZpZWxkLgoJKiBleHByLmMgKGxvb2t1cF9sYWJlbCk6IFRlbXBvcmF5IHVzZSBwZXJtYW5lbnRfb2JzdGFjayB0byBjcmVhdGUKCWxhYmVsIGlmIG5vdCBmb3VuZC4KCSogY2xhc3MuYyAocHVzaF9zdXBlcl9maWVsZCk6IFRlbXBvcnkgdXNlIHBlcm1hbmVudF9vYnN0YWNrLgoKTW9uIFNlcCAxNSAxMTozMzozMSAxOTk3ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIHR5cGVjay5jICh0eXBlX2Zvcl9tb2RlKTogTm93IGhhbmRsZXMgZG91YmxlX3R5cGVfbm9kZSBhbmQKCWZsb2F0X3R5cGVfbm9kZS4KCSogdmVyaWZ5LmMgKHZlcmlmeV9qdm1faW5zdHJ1Y3Rpb25zKTogVGhlIGluc3RydWN0aW9uIGZvbGxvd2luZwoJdGhlIHdpZGUgYnl0ZWNvZGUgaXMgY2hlY2tlZC4gT1BDT0RFX3JldCBhZGRlZCB0byB0aGUgbGlzdCBvZgoJd2lkZS4KClRodSBTZXAgMTEgMTk6NDU6MTggMTk5NyAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBjbGFzcy5jIChtYWtlX2NsYXNzKTogVGVtcG9yYXJ5IHVzZSBwZXJtYW5lbnRfb2JzdGFjay4gU2V0IHRoZQoJY2xhc3MgQ0xBU1NfUCBmaWVsZCB0byAxLgoJKHB1c2hfY2xhc3MpOiBUZW1wb3JhcnkgdXNlIHBlcm1hbmVudF9vYnN0YWNrLgoJKHNldF9zdXBlcl9pbmZvKTogVGVtcG9yYXJ5IHVzZSBwZXJtYW5lbnRfb2JzdGFjay4KCShhZGRfbWV0aG9kKTogVGVtcG9yYXJ5IHVzZSBwZXJtYW5lbnRfb2JzdGFjaywgc2V0CglNRVRIT0RfVFJBTlNJRU5UKCkuCgkoYWRkX2ZpZWxkKTogVGVtcG9yYXJ5IHVzZSBwZXJtYW5lbnRfb2JzdGFjay4gU2V0cwoJRklFTERfVk9MQVRJTEUoKSBhbmQgRklFTERfVFJBTlNJRU5UKCkuCgkoYnVpbGRfY2xhc3NfcmVmKTogVGVtcG9yYXJ5IHVzZSBwZXJtYW5lbnRfb2JzdGFjayBpZiB0aGUgY2xhc3MKCWlzbid0IGNvbXBpbGVkLgoJKGJ1aWxkX3N0YXRpY19maWVsZF9yZWYpOiBUZW1wb3JhcnkgdXNlIHBlcm1hbmVudF9vYnN0YWNrIHdoZW4KCWNyZWF0aW5nIGZpZWxkJ3MgcnRsLgoJKGdldF9hY2Nlc3NfZmxhZ3NfZnJvbV9kZWNsKTogSGFuZGxlIEFDQ19WT0xBVElMRSwgQUNDX1RSQU5TSUVOVCwKCUFDQ19TWU5DSFJPTklaRUQsIEFDQ19OQVRJVkUsIEFDQ19BQlNUUkFDVCBmbGFncyBmb3IgbWV0aG9kcwoJYW5kIGZpZWxkcy4gRnVuY3Rpb24gZmluYWxpemVkLCBhcyBmYXIgYXMgZmxhZyBoYW5kbGluZy4KCShwdXNoX2NsYXNzX3N0YXRpY19kdW1teV9maWVsZCk6IFRlbXBvcmFyeSB1c2UgcGVybWFuZW50X29ic3RhY2suCgkoZW1pdF9yZWdpc3Rlcl9jbGFzcyk6IEZvcmNlIGdlbmVyYXRpb24gb2YgY2xhc3MgcmVnaXN0cmF0aW9uIGF0CgktTzMgb3IgZGVlcGVyLgoJKiBkZWNsLmMgKGVuZF9qYXZhX21ldGhvZCk6IENhbGwgcGVybWFuZW50X2FsbG9jYXRpb24oKSBiZWZvcmUKCXJldHVybmluZy4KCSogZXhwci5jIChjYW5fd2lkZW5fcmVmZXJlbmNlX3RvKTogQWRkZWQgY29tbWVudCB0byBpbnRlcmZhY2UKCWhhbmRsaW5nLCBmaXhlZCB0eXBvLgoJKGxvb2t1cF9maWVsZCk6IE5vdyB1c2VzIENMQVNTX1AoKSB0byBjb3JyZWN0IEZJWE1FCgkoZXhwYW5kX2ludm9rZSk6IFZlcmlmaWNhdGlvbiBvbiBwdWJsaWMgJiYgIXN0YXRpYyAmJgoJIWFic3RyYWN0IG1vdmVkIGludG8gc29mdF9sb29rdXBpbnRlcmZhY2VtZXRob2QgKGthZmZlKS4KCVVzZSBPYmplY3QgY2xhc3MgZHRhYmxlIGlmIG9iamVjdHJlZiBpcyBhbiBhcnJheSB3aGVuIGV4cGFuZGluZwoJaW52b2tlaW50ZXJmYWNlLgoJKGphdmFfcHVzaF9jb25zdGFudF9mcm9tX3Bvb2wpOiBUZW1wb3JhcnkgdXNlIHBlcm1hbmVudF9vYnN0YWNrCglmb3IgQ09OU1RBTlRfc3RyaW5nCgkqIHBhcnNlLmMgKGdldF9yZWZfY29uc3RhbnQpOiBUZW1wb3JhcnkgdXNlIHBlcm1hbmVudF9vYnN0YWNrIHRvCgljcmVhdGUgY29uc3RhbnQgcmVmZXJlbmNlcy4KCShnZXRfY29uc3RhbnQpOiBUZW1wb3JhcnkgdXNlIHBlcm1hbmVudF9vYnN0YWNrIHRvIGNyZWF0ZSBjb25zdGFudC4KCShsb2FkX2NsYXNzKTogVGVtcG9yYXJ5IHVzZSBwZXJtYW5lbnRfb2JzdGFjayB0byBsb2FkIGNsYXNzLgoJKGpjZl9wYXJzZSk6IFRlbXBvcmFyeSB1c2UgcGVybWFuZW50X29ic3RhY2sgdG8gcGVyZm9ybSBjbGFzcwoJbGF5b3V0LgoJKiB0eXBlY2suYzogKHBhcnNlX3NpZ25hdHVyZV9zdHJpbmcpOiBUZW1wb3JhcnkgdXNlIHBlcm1hbmVudF9vYnN0YWNrLgoJKGJ1aWxkX2phdmFfc2lnbmF0dXJlKTogVGVtcG9yYXJ5IHVzZSBwZXJtYW5lbnRfb2JzdGFjay4KCSogdmVyaWZ5LmM6ICh2ZXJpZnlfanZtX2luc3RydWN0aW9uKTogcmVtb3ZlZCB1bm5lY2Vzc2FyeSB2ZXJpZmljYXRpb24KCW9uIEFDQ19TVVBFUiBmbGFnLgoJKiBqYXZhLXRyZWUuaCAoTUVUSE9EX05BVElWRSwgTUVUSE9EX1RSQU5TSUVOVCk6IERlZmluZWQuCgkoRklFTERfVk9MQVRJTEUsIEZJRUxEX1RSQU5TSUVOVCk6IERlZmluZWQuCgkoQ0xBU1NfUCk6IERlZmluZWQKClRodSBTZXAgMTEgMTE6NTc6MzIgMTk5NyAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGN5Z251cy5jb20+CgoJKiBjbGFzcy5jIChhcHBlbmRfZ3BwX21hbmdsZWRfdHlwZSk6ICBGaXggdHlwby4KCShlbWl0X3JlZ2lzdGVyX2NsYXNzKTogIFVzZSBtYWluX2NsYXNzIHRvIGdldCBjbGFzcyBvYmplY3QsIHJhdGhlcgoJdGhhbiBsb29raW5nIGZvciBuby1sb25nZXItZXhpc3Rpbmcgc3RhdGljIGRlY2wgc3RhcnRpbmcgd2l0aCBfQ0wuCgkqIHR5cGVjay5jIChwYXJzZV9zaWduYXR1cmVfdHlwZSk6ICBQcm9tb3RlIGFycmF5IGVsZW1lbnQgdHlwZQoJaWYgaXQgaXMgYSBSRUNPUkRfVFlQRS4KCldlZCBTZXAgMTAgMTY6MDk6MjMgMTk5NyAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGN5Z251cy5jb20+CgoJKiBjbGFzcy5jIChwdXNoX2NsYXNzX3N0YXRpY19kdW1teV9maWVsZCk6ICBOZXcgZnVuY3Rpb24uCgkobWFuZ2xlX3N0YXRpY19maWVsZCk6ICBOZXcuIERvIEcrKy1zdHlsZSBtYW5nbGluZyBvZiBzdGF0aWMgZmllbGRzLgoJKGxheW91dF9jbGFzcyk6ICBNYW5kbGUgc3RhdGljIGZpZWxkcyBoZXJlLCBub3QgaW4gYWRkX2ZpZWxkLgoJKGJ1aWxkX2NsYXNzX3JlZik6ICBUaGUgY2xhc3Mgb2JqZWN0IGlzIG5vdyBhIGR1bW15IHN0YXRpYyBmaWVsZC4KCSogZGVjbC5jIChmaW5kX2xvY2FsX3ZhcmlhYmxlKTogIExvb2sgZm9yIGJlc3QsIGluc3RlYWQgb2YgZmlyc3QgbWF0Y2guCgkqIGV4cHIuYyAocHVzaF90eXBlKTogIEFsd2F5cyBwcm9tb3RlX3R5cGUsIG5vdCBqdXN0IGZvciBSRUNPUkRfVFlQRS4KCShidWlsZF9qYXZhX2F0aHJvdyk6ICBEb24ndCBjaGVjayBoZXJlIGlmIGV4Y2VwdGlvbiBpcyBUaHJvd2FibGUuCgkqIGphdmEtdHJlZS5oIChUWVBFX1VOU0VUKTogIFJlbmFtZWQgdG8gVFlQRV9VTktOT1dOLgoJKFRZUEVfVVNFRCk6ICBSZW1vdmVkLiAgTm8gbG9uZ2VyIHVzZWQgLi4uCgkqIHBhcnNlLmMgKGpjZl9wYXJzZSk6ICBDYWxsIHB1c2hfY2xhc3Nfc3RhdGljX2R1bW15X2ZpZWxkLgoJKiB2ZXJpZnkuYyAocHVzaF9wZW5kaW5nX2xhYmVsKTogIE5ldyBmdW5jdGlvbi4KCShwdXNoX3BlbmRpbmdfYmxvY2spOiAgUmVuYW1lZCB0byBjaGVja19wZW5kaW5nX2Jsb2NrLgoJKG1lcmdlX3R5cGVzKTogIFJlbW92ZSB1bm5lZWRlZCBzdXVwb3J0IGZvciBUWVBFX1VOVVNFRC4KCSh2ZXJpZnlfanZtX2luc3RydWN0aW9ucyk6ICBPbmx5IHJlc2V0IHByZXZfZWhfcmFuZ2VzICh0byBmb3JjZQoJcmUtY2hlY2tpbmcgcG9zc2libGUgaGFuZGxlcnMpIGFmdGVyIGEgc3RvcmUgKGxlc3Mgd2FzdGVkIHdvcmspLgoJQ2hlY2sgZm9yIG51bGwgaGFuZGxlciAoZmluYWxseSkgYmVmb3JlIGNhbGxpbmcgYWRkX2hhbmRsZXIuCglWYXJpb3VzIGNoYW5nZXMgdG8gKGZpbmFsbHk/KSBjb3JyZWN0bHkgaGFuZGxlIHRyeS9maW5hbGx5LgoKMTk5Ny0wOS0wOSAgQnJlbmRhbiBLZWhvZSAgPGJyZW5kYW5AbGlzYS5jeWdudXMuY29tPgoKCSogY2xhc3MuYzogSW5jbHVkZSBzdGRpby5oLgoKVGh1IFNlcCAgNCAyMTozMDo1NSAxOTk3ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAY3lnbnVzLmNvbT4KCgkqIGV4cHIuYyAoZXhwYW5kX2ludm9rZSk6ICBVc2UgQ09NUE9VTkRfRVhQUiAoYW5kIFRSRUVfU0lERV9FRkZFQ1RTKQoJdG8gbWFrZSBzdXJlIGNsYXNzIGlzIGluaXRpYWxpemVkIGJlZm9yZSBzdGF0aWMvc3BlY2lhbCBpbnZva2UuCgoJKiB2ZXJpZnkuYyAodmVyaWZ5X2p2bV9pbnN0cnVjdGlvbnMpOiAgT24gYSBzdG9yZSBpbnN0cnVjdGlvbiwKCWNhbGwgZmluZF9sb2NhbF92YXJpYWJsZSB0byBmb3JjZSBwcmUtYWxsb2NhdGlvbiBvZiBkZWNsIGFuZCBydHguCgkqIGRlY2wuYyAocHVzaF9qdm1fc2xvdCk6ICBTZXQgREVDTF9SRUdJU1RFUiBvbiBzdGFjayBzbG90cy4KCldlZCBTZXAgIDMgMTY6MTM6MjMgMTk5NyAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGN5Z251cy5jb20+CgoJKiBjbGFzcy5jIChidWlsZF9jbGFzc19yZWYpOiAgIFN0cmlwIG9mZiAicHJvbW90ZWRfIiBpZiBuZWVkIGJlLgoJKG1ha2VfZmllbGRfdmFsdWUpOiBDYWxsIGJ1aWxkX2phdmFfc2lnbmF0dXJlIHdoZW4gbmVlZGVkLgoJKGxheW91dF9jbGFzcyk6ICBEb24ndCBtYWtlX2Z1bmN0aW9uX3J0bCBpZiBNRVRIT0RfQUJTVFJBQ1QuCgkqIGV4cHIuYyAoYnVpbGRfamF2YV9hdGhyb3cpOiAgRG9uJ3QgcHVzaF92YWx1ZSBvZiBleGNlcHRpb24uCgkoYnVpbGRfamF2YV9iaW5vcCk6ICBJbXBsZW1lbnQgQ09NUEFSRV9MX0VYUFIgYW5kIENPTVBBUkVfR19FWFBSIHRvCgltYXRjaCBzcGVjaWZpY2F0aW9uIG9mIFtmZF1jbXBbbGddIGZvciBOYU5zLgoJKGV4cGFuZF9ieXRlX2NvZGUpOiAgQWRkIHN1cHBvcnQgZm9yIGV4Y2VwdGlvbiBoYW5kbGVyIHJhbmdlcy4KCSogZXhjZXB0LmM6ICBBZGQgc2tlbGV0b24gZm9yIEVIIGNvZGUtZ2VuZXJhdGlvbi4KCSogdmVyaWZ5LmMgKG1lcmdlX3R5cGVzKTogIFRyZWF0IGFsbCBwcm9tb3RlZCBpbnRlZ3JhbCB0eXBlcyBhcyBlcXVhbC4KCSogY29uc3RhbnRzLmMgKGJ1aWxkX2NvbnN0YW50c19jb25zdHJ1Y3Rvcik6ICBUbyBmb3JjZSBjcmVhdGlvbiBvZgoJY3VycmVudF9jb25zdGFudF9wb29sX2RhdGFfcmVmLCBjYWxsIGJ1aWxkX2NvbnN0YW50X2RhdGFfcmVmLgoKCSogamF2YW9wLmRlZiAobGxvYWQpOiAgRml4IHR5cG8uCgkqIGpjZi1kdW1wLmMgKG1haW4pOiAgQ2xlYXIgZmlsZW5hbWUgdG8gcHJldmVudCBwb3NzaWJseS1iYWQgZnJlZS4KClR1ZSBTZXAgIDIgMTc6Mzc6MjUgMTk5NyAgQnJlbmRhbiBLZWhvZSAgPGJyZW5kYW5AbGlzYS5jeWdudXMuY29tPgoKCSogcGFyc2UuYzogRG9uJ3QgaW5jbHVkZSBmdW5jdGlvbi5oLgoKV2VkIEF1ZyAyNyAxODozMzowNCAxOTk3ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAY3lnbnVzLmNvbT4KCgkqIGV4Y2VwdC5bY2hdOiAgTmV3IGZpbGVzLgoJKiBNYWtlZmlsZS5pbiAoSkFWQV9PQkpTKTogIEFkZCBleGNlcHQubwoJKiBleHByLmM6ICBUZW1wb3Jhcnkgd2FybmluZyBhYm91dCB1bmltcGxlbWVudGVkIGV4Y2VwdGlvbnMuCgkqIHZlcmlmeS5jOiAgVmVyaWZ5IGV4Y2VwdGlvbiBoYW5kbGVycy4KCgkqIGpjZi1kdW1wLmMgKGRpc2Fzc2VtYmxlX21ldGhvZCk6ICBQcmludCBleGNlcHRpb24gdGFibGUuCgpXZWQgQXVnIDI3IDEzOjI2OjU4IDE5OTcgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogZXhwci5jICh2ZXJpZnlfanZtX2luc3RydWN0aW9ucyk6IFN0YXJ0ZWQgYSB0aG9yb3VnaAoJdmVyaWZpY2F0aW9uIG9mIGludm9rZSogYnl0ZWNvZGVzLgoJKGV4cGFuZF9ieXRlX2NvZGUpOiBmbHVzaCBxdWljayBzdGFjayBpZiBQQyBpcyB0aGUgdGFyZ2V0IG9mIGEKCWJyYW5jaC4gIGFuZCB1bmRlZiBSRVQgKGNvbmZsaWN0aW5nIHdpdGggY29uZmlnL2kzODYvaTM4Ni5oKS4KCShleHBhbmRfamF2YV9hcnJheWxvYWQpOiBGaXhlZCBib2d1cyBjYXN0LCB3aGVuIEJvb2xlYW4gdHlwZSBpcwoJdXNlZC4KCShleHBhbmRfaW52b2tlKTogTm93IGhhbmRsZXMgaW52b2tlaW50ZXJmYWNlIGFuZCBkbyBtb3JlCgl2ZXJpZmljYXRpb24gYWNjb3JkaW5nIHRvIHRoZSBieXRlY29kZS4KCShsb29rdXBfZmllbGQpOiBEb24ndCB0cnkgdG8gbG9hZCB0aGUgY2xhc3MgaWYgcHJvY2Vzc2luZwoJZHRhYmxlX3R5cGUuCgkoY2FuX3dpZGVuX3JlZmVyZW5jZV90byk6IE5vdyBoYW5kbGVzIGludGVyZmFjZXMuCgkqIGRlY2wuYyAoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBOZXcgZ2xvYmFsIHZhcmlhYmxlCglzb2Z0X2xvb2t1cGludGVyZmFjZW1ldGhvZF9ub2RlLCBkZWNsYXJlZCBpbiBqYXZhLXRyZWUuaC4KCUNhbGwgc2V0X3N1cGVyX2luZm8gb24gc3RyaW5nX3R5cGVfbm9kZS4KCSogamF2YS10cmVlLmggKENMQVNTX0lOVEVSRkFDRSwgQ0xBU1NfQUJTVFJBQ1QsIENMQVNTX1NVUEVSKTogTm93CglkZWZpbmVkLgoJKiBjbGFzcy5jIChzZXRfc3VwZXJfaW5mbyk6IEZpbGxzIHRoZSBDTEFTU18qIGZsYWdzIGFjY29yZGluZyB0bwoJYWNjZXNzX2ZsYWdzLgoJKGdldF9hY2Nlc3NfZmxhZ3NfZnJvbV9kZWNsKTogSGFuZGxlcyBhbGwgY2xhc3MgZmxhZ3MuCgpUdWUgQXVnIDI2IDE4OjU0OjM0IDE5OTcgIFBlciBCb3RobmVyICA8Ym90aG5lckBjeWdudXMuY29tPgoKCSogY2xhc3MuYyAoYWRkX21ldGhvZCk6ICBaZXJvIG91dCBuZXdseS1hbGxvY2F0ZWQgREVDTF9MQU5HX1NQRUNJRklDLgoJKiBwYXJzZS5jICh5eXBhcnNlKTogIENoZWNrIGZvciBhYnN0cmFjdCBtZXRob2QsIGFuZCBtaXNzaW5nIGNvZGUuCgkqIGV4cHIuYyAoZXhwYW5kX2J5dGVfY29kZSk6ICBDaGFuZ2UgaW50ZXJmYWNlLgoJKiBsYW5nLmMgKHB1dF9kZWNsX25vZGUpOiAgUHJpbnQgcHJvbW90ZWQgdHlwZXMgcHJldHRpZXIuCgkqIHZlcmlmeS5jICh2ZXJpZnlfanZtX2luc3RydWN0aW9uKTogIENoYW5nZSBpbnRlcmZhY2UuCglQYXJ0aWFsIHN1cHBvcnQgZm9yIHNjYW5uaW5nIGV4Y2VwdGlvbiB0YWJsZS4KCUZvciBsb2FkIGluc3RydWN0aW9ucywgaGFuZGxlIHByb21vdGVkIGludGVncmFsIHR5cGVzLgoKVGh1IEF1ZyAyMSAxMzo0ODowMSAxOTk3ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAY3lnbnVzLmNvbT4KCgkqIHZlcmlmeS5jOiAgTmV3IGZpbGUsIHdpdGggY29udGVudHMgbW92ZWQgZnJvbSBleHByLmMuCgkqIGV4cHIuYzogIEJ1bmNoIG9mIHN0dWZmIChtb3N0bHkgdmVyaWZpY2F0aW9uKSBtb3ZlZCB0byB2ZXJpZnkuYy4KCSogdHlwZWNrLmMgKGlzX2FycmF5X3R5cGVfcCk6ICBNb3ZlZCBoZXJlIGZyb20gZXhwci5jLgoJKiBqYXZhLXRyZWUuaDogIEFkZCBzb21lIG5vdy1uZWVkZWQgZnVuY3Rpb24gZGVjbGFyYXRpb25zLgoJKiBNYWtlZmlsZS5pbiAoSkFWQV9PQkpTKTogQWRkZWQgdmVyaWZ5Lm8uCgpXZWQgQXVnIDIwIDE0OjM0OjM0IDE5OTcgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogY2xhc3MuYyAoYWRkX21ldGhvZCk6IFNldHMgdGhlIE1FVEhPRF9TWU5DSFJPTklaRUQgZmxhZywgc2V0cyB0aGUKCU1FVEhPRF9BQlNUUkFDVCBmbGFnLgoKCSogamF2YS10cmVlLmggKE1FVEhPRF9TWU5DSFJPTklaRUQpOiBTZXQgdG8gREVDTF9MQU5HX0ZMQUdfNC4KCShJU19NRVRIT0RfQ0xJTklUX1AsIElTX01FVEhPRF9JTklUX1ApOiBOZXcgbWFjcm9zLgoJKE1FVEhPRF9BQlNUUkFDVCk6IFNldCB0byBERUNMX0xBTkdfRkxBR181CgoJKiBkZWNsLmMgKHNvZnRfbW9uaXRvcmVudGVyX25vZGUsIHNvZnRfbW9uaXRvcmV4aXRfbm9kZSk6IE5ldyBnbG9iYWwKCXZhcmlhYmxlcy4KCShzdGFydF9qYXZhX21ldGhvZCk6IEhvb2sgZm9yIFNZTkNIUk9OSVpFRCBtZXRob2RzLgoKCSogZXhwci5jIChidWlsZF9qYXZhX2pzciwgYnVpbGRfamF2YV9yZXQpOiBOZXcgZnVuY3Rpb25zCgkoSlNSLFBSRSk6IE5ldyBtYWNyb3MKCShQUkVfVEFCTEVfU1dJVENILCBQUkVfTE9PS1VQX1NXSVRDSCk6IEZpeGVkIGFuZCBzZWN1cmVkLgoJKHZlcmlmeV9qdm1faW5zdHJ1Y3Rpb25zKTogdGFibGVzd2l0Y2gsIGxvb2t1cHN3aXRjaCwKCW1vbml0b3JlbnRlciwgbW9uaXRvcmV4aXQsIGdvdG9fdzogdmVyaWZpZWQuCgkoTE9PS1VQX1NXSVRDSCwgVEFCTEVfU1dJVENIKTogRml4ZWQgZ2VuZXJhdGlvbiBvZiBkZWZhdWx0OiBsYWJlbAoJKGJ1aWxkX2phdmFfbW9uaXRvcik6IE5ldyBmdW5jdGlvbi4KCShNT05JVE9SX09QRVJBVElPTik6IE1vZGlmaWVkIHRvIGNhbGwgYnVpbGRfamF2YV9tb25pdG9yKCkKCSh2ZXJpZnlfanZtX2luc3RydWN0aW9ucyk6IFN0YXJ0ZWQgYSB0aG9yb3VnaCB2ZXJpZmljYXRpb24gb2YKCWludm9rZSogYnl0ZWNvZGVzLgoKVHVlIEF1ZyAxOSAxMzozNTo0OSAxOTk3ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAY3lnbnVzLmNvbT4KCglTdXBwb3J0IHZlcmlmaWNhdGlvbiBvZiBqc3IvcmV0IHN1YnJvdXRpbmVzICh1c2VkIGZvciB0cnkvZmluYWxseSkuCgkqIGRlY2wuYyAocmV0dXJuX2FkZHJlc3NfdHlwZV9ub2RlKTogIE5ldyB0eXBlIG5vZGUuCgkqIGphdmEtdHJlZS5oIChMQUJFTF9SRVRVUk5fTEFCRUwsIExBQkVMX1JFVFVSTl9UWVBFX1NUQVRFLAoJUkVUVVJOX01BUF9BREpVU1RFRCwgTEFCRUxfUkVUVVJOX0xBQkVMUywgTEFCRUxfSU5fU1VCUiwKCUxBQkVMX1NVQlJfU1RBUlQsIExBQkVMX1NVQlJfQ09OVEVYVCwgQkNPREVfVkVSSUZJRUQpOiAgTmV3IG1hY3Jvcy4KCShUWVBFX1VOU0VULCBUWVBFX1NFQ09ORCwgVFlQRV9OVUxMLCBUWVBFX1JFVFVSTl9BRERSLCBUWVBFX1VOVVNFRCwKCVRZUEVfVVNFRCk6ICBOZXcgbWFjcm9zIGZvciBzcGVjaWFsIHR5cGVzIGluIHR5cGVfbWFwLgoKCSogamF2YS10cmVlLmggKEJDT0RFX0pVTVBfVEFSR0VUKTogIFJlbmFtZWQgdG8gQkNPREVfVEFSR0VULgoJKEJDT0RFX0JBQ0tXQVJEU19UQVJHRVQsIENPREVfRk9SV0FSRFNfVEFSR0VUKTogIFJlcGxhY2VkIGJ5CglCQ09ERV9KVU1QX1RBUkdFVC4KCSogZXhwci5jIChleHBhbmRfYnl0ZV9jb2RlKTogIEZpeCBsb2dpYyB0byB3YXJuIG9mIHVudXNlZCBpbnN0cnVjdGlvbnMuCgoJKiBleHByLmMgKGNhbl93aWRlbl9yZWZlcmVuY2VfdG8pOiAgTmV3IGZ1bmN0aW9uLgoJKHBvcF90eXBlKTogIFVzZSBpdC4KCShtZXJnZV90eXBlX3N0YXRlKTogIFN1cHBvcnQgaGFuZGxpbmcgc3RhcnQgb2Ygc3Vicm91dGluZS4KCShwdXNoX3BlbmRpbmdfYmxvY2spOiAgUmV0dXJuIGNoYXIqIGVycm9yIG1lc3NhZ2UsIGluc3RlYWQgb2YgY2FsbGluZwoJZmF0YWwgb24gYW4gZXJyb3IuICBBbHNvIGhhbmRsZSBzdWJyb3V0aW5lcy4KCSh2ZXJpZnlfanZtX2luc3RydWN0aW9ucyk6ICBIYW5kbGUgZXJyb3JzIGZyb20gcHVzaF9wb2VuZGluZ19ibG9jay4KCVN1cHBvcnQganNyIGFuZCByZXQgaW5zdHJ1Y3Rpb25zLgoKVHVlIEF1ZyAxOSAxMzozMzozNiAxOTk3ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAY3lnbnVzLmNvbT4KCgkqIGpjZi1pby5jIChmaW5kX2NsYXNzZmlsZSk6ICBGaXggdGhpbmtvLgoJKiBqY2YtZHVtcC5jOiAgQWRkIENPTlZFUlQyICh0byBtYXRjaCBjaGFuZ2VkIGphdmFvcC5kZWYpLgoKVHVlIEF1ZyAxMiAyMDoxNDo0NSAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBNYWtlZmlsZS5pbiAoQklTT04pOiBSZW1vdmUuCgpUaHUgQXVnICA3IDIzOjA4OjI0IDE5OTcgIFBlciBCb3RobmVyICA8Ym90aG5lckBjeWdudXMuY29tPgoKCSogTWFrZWZpbGUuaW46ICBDb252ZXJ0IHRvIGF1dG9jb25mLgoJKiBjb25maWctbGFuZy5pbiAob3V0cHV0cyk6ICBBZGRlZCBqYXZhL01ha2VmaWxlLgoKCSogTWFrZS1sYW5nLmluLCBsYW5nLXNwZWNzLmgsIGNvbmZpZy1sYW5nLmluLCBNYWtlZmlsZS5pbjoKCVJlbmFtZSBjYzFqYXZhIHRvIGpjMS4KCgkqIGxhbmcuYyAoaW5pdF9wYXJzZSwgZmluaWhzX3BhcnNlKTogIE5ldyBmdW5jdGlvbnMgI2lmZGVmIFVTRV9DUFBMSUIuCgkqIE1ha2VmaWxlLmluIChJTlRFUk5BTF9DRkxBR1MpOiAgQWRkIEBleHRyYV9jX2ZsYWdzLgoKCSogY2xhc3MuYyAoY2xhc3NfZGVwdGgpOiAgRG8gbG9hZF9jbGFzcyBpZiBuZWVkZWQuCgoJTW9zdGx5IGJldHRlciB2ZXJpZmljYXRpb24uCgkqIGRlY2wuYyAocHVzaGRlY2wpOiAgU2V0IFRZUEVfU1RVQl9ERUNMIGZvciBhIHR5cGUuCgkoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiAgQ2hhbmdlIHJldHVybiB0eXBlIG9mIHNvZnRfY2hlY2tjYXN0LgoJKiBleHByLmMgKGV4cGFuZF9qYXZhX0NIRUNLQ0FTVCk6ICBEbyBwdXNoX3ZhbHVlIG9mIHRoZSAiY2FzdGVkIiB2YWx1ZS4KCSogbGFuZy5jIChwdXRfZGVjbF9zdHJpbmcsIHB1dF9kZWNsX25vZGUsIGxhbmdfcHJpbnRhYmxlX25hbWUsCglsYW5nX3ByaW50X2Vycm9yKTogIE5ldyBmdW5jdGlvbnMuCgkobGFuZ19pbml0KTogIFNldCBnbG9iYWwgaG9vayBwcmludF9lcnJvcl9mdW5jdGlvbiB0byBsYW5nX3ByaW50X2Vycm9yLgoJKiBleHByLmM6ICBJbiB0aGUgdHlwZV9tYXAgcHRyX3R5cGVfbm9kZSBpcyBvbmx5IHVzZWQgZm9yIG51bGwgbm93LgoJKHBvcF90eXBlLCBtZXJnZV90eXBlcyk6ICBIZW5jZSBwdHJfdHlwZV9ub2RlIG1hdGNoZXMgYW55IHJlZmVyZW5jZS4KCShtZXJnZV90eXBlcyk6ICBEZXJlcmVuY2UgcG9pbnRlciB0byByZWNvcmQgdHlwZXMgYmVmb3JlIGNvbXBhcmluZy4KCShkZWNvZGVfbmV3YXJyYXlfdHlwZSwgbWVyZ2VfdHlwZXMpOiAgT24gZXJyb3IganVzdCByZXR1cm4gTlVMTC4KCShidWlsZF9qYXZhX2Jpbm9wKTogIEFkZCBwcmVsaW1pbmFyeSBpbXBsZW1lbnRhdGlvbiAod2l0aCB3YXJuaW5nKQoJZm9yIENPTVBBUkVfTF9FWFBSIGFuZCBDT01QQVJFX0dfRVhQUiAoaS5lLiBbZmRdY21wW2xnXSkuCgkobG9va3VwX2xhYmVsKTogIFNldCBERUNMX0lHTk9SRURfUCAoZm9yIGR3YXJmMm91dCkuCgkoZXhwYW5kX2NvbXBhcmUsIGV4cGFuZF9qYXZhX2dvdG8sIGV4cGFuZF9qYXZhX2NhbGwpOiAgRG9uJ3QKCXB1c2hfcGVuZGluZ19ibG9jaywgc2luY2UgdGhhdCBvbmx5IG1ha2VzIHNlbnNlIHdoZW4gdmVyaWZ5aW5nLgoJKG1lcmdlX3R5cGVfc3RhdGUpOiAgRGlmZmVyZW50IHJldHVybiBjb2Rlcy4KCShwdXNoX3BlbmRpbmdfYmxvY2spOiAgQSBibG9jayBtYXkgbmVlZCB0byBiZSB2ZXJpZmllZCBtb3JlIHRoYW4gb25jZS4KCShleHBhbmRfYnl0ZV9jb2RlKTogIFdhcm4gYWJvdXQgdW51c2VkIGNvZGUgYXQgY29kZSBnZW5lcmF0aW9uIHRpbWUuCgkodmVyaWZ5X2p2bV9pbnN0cnVjdGlvbik6ICBDaGFuZ2VkIGxvZ2ljLCBzaW5jZSBjb2RlIG1heSBuZWVkIHRvIGJlCglyZS12ZXJpZmllZCBpZiB0eXBlLXN0YXRlIGhhcyBjaGFuZ2VkLiAgQWxzbywgYmV0dGVyIGVycm9yIGhhbmRsaW5nLgoJSW1wbGVtZW50IGFjbXBlcSwgYWNtcG5lLCBwb3AsIHBvcDIsIHN3YXAsIGNoZWNrY2FzdCwgaW5zdGFuY2VvZi4KCUltcHJvdmUgbmV3YXJyYXksIGFuZXdhcnJheSwgP2Fsb2FkLCBhdGhyb3csCgkqIGphdmEtdHJlZS5oIChMQUJFTF9DSEFOR0VEKTogIE5ldyBtYWNyby4KClR1ZSBBdWcgIDUgMTI6MjE6MjcgMTk5NyAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBkZWNsLmMgKHNvZnRfYXRocm93X25vZGUpOiBOZXcgZ2xvYmFsIHZhcmlhYmxlIGluaXRpYWxpemVkLgoJKiBqYXZhb3AuZGVmIChpMmIsIGkyYywgaTJzKTogSW52b2tlIENPTlZFUlQyCgkqIHR5cGVjay5jIChjb252ZXJ0KTogQWRkZWQgc3VwcG9ydCBmb3IgUkVBTF9UWVBFLgoJKGNvbnZlcnRfdG9fY2hhcik6IE5ldyBmdW5jdGlvbi4KCShjb252ZXJ0KTogSGFuZGxlIENIQVJfVFlQRS4KCSogZXhwci5jIChleHBhbmRfamF2YV9hcnJheXN0b3JlKTogTW9kaWZpZWQgYmVjYXVzZSBDSEFSL0JZVEUvQk9PTEVBTi8KCVNIT1JUIG5vdyBleHBlY3QgSU5UIGJ1dCBzdG9yZSBhcyBDSEFSL0JZVEUvQk9PTEVBTi9TSE9SVC4KCShleHBhbmRfamF2YV9hcnJheWxvYWQpOiBDSEFSL0JZVEUvQk9PTEVBTi9TSE9SVCBub3cgY29udmVydCByZXN1bHQgdG8KCXByb21vdGVkIHR5cGUuCgkodmVyaWZ5X2p2bV9pbnN0cnVjdGlvbnMpOiBBZGRlZCBicmVhayBhIHRoZSBlbmQgb2YgYm9ndXMgdW5vcDogbGFiZWwuCgkoT1BDT0RFXzxifGN8cz5hc3RvcmUpOiBQb3AgYW4gaW50IG9wZXJhbmQgZnJvbSB0aGUgdHlwZSBzdGFjawoJKE9QQ09ERV88YnxjfHM+YXN0b3JlKTogUHVzaCB0aGUgcHJvbW90ZWQgdHlwZSBvbnRvIHRoZSBzdGFjawoJKHByb2Nlc3NfanZtX2luc3RydWN0aW9uKTogTmV3IG1hY3JvIENPTlZFUlQyIGZvciBpMmMsIGkycyBhbmQgaTJiLgoJKEpBVkFfQVJSQVlfTEVOR1RIX09GRlNFVCwgSkFWQV9BUlJBWV9EQVRBX09GRlNFVCk6IE1vZGlmaWVkCgl0byBVc2UgVGhlIFJpZ2h0IFRoaW5ncy4KCShwb3BfdHlwZSk6IEFjY2VwdCBDSEFSL0JZVEUvQk9PTEVBTi9TSE9SVCBwcm9tb3RlZCB0eXBlIGFzCgljb21wYXRpYmxlIHdpdGggSU5ULiBCT09MRUFOIGlzIG1hZGUgZXF1aXZhbGVudCB0byBCWVRFLgoJKE9QQ09ERV9hdGhyb3csIE9QQ09ERV9hY29uc3RfbnVsbCwgT1BDT0RFX2lmbnVsbCwKCU9QQ09ERV9pZm5vbm51bGwpOiBOb3cgc3VwcG9ydGVkLgoJKGJ1aWxkX2phdmFfYXRocm93KTogTmV3IGZ1bmN0aW9uLgoKTW9uIEF1ZyAgNCAxNTo0Njo0NSAxOTk3ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAY3lnbnVzLmNvbT4KCglSZW5hbWUgbWV0aG9kIG5hbWUgPGluaXQ+IHRvIG1hdGNoIEcrKyAoYW5kIGZpeCBtYW5nbGluZykuCgkqIGNsYXNzLmMgKGxheW91dF9jbGFzcyk6ICBSZXBsYWNlIG1ldGhvZCBuYW1lIG9mIDxpbml0PiBieSBjbGFzcyBuYW1lLgoJKG1ha2VfbWV0aG9kX3ZhbHVlKTogIERvIGludmVyc2UgcmVuYW1pbmcgb2YgY29uc3RydWN0b3IgZnJvbSA8aW5pdD4uCgkqIGphdmEtdHJlZS5oIChERUNMX0NPTlNUUlVDVE9SX1ApOiAgTmV3IG1hY3JvLgoJKiB0eXBlY2suYyAobG9va3VwX2phdmFfY29uc3RydWN0b3IpOiAgTmV3IGZ1bmN0aW9uLgoJKiBleHByLmMgKGV4cGFuZF9pbnZva2UpOiAgSWYgbWV0aG9kX25hbWUgaXMgPGluaXQ+LCBjYWxsCglsb29rdXBfamF2YV9jb25zdHJ1Y3RvciB0byBmaW5kIGNvbnN0cnVjdG9yLgoKCSogcGFyc2UuYyAoZ2V0X2NvbnN0YW50KTogIEhhbmRsZSBDT05TVEFOVF9GbG9hdCBhbmQgQ09OU1RBTlRfRG91YmxlLgoKRnJpIEF1ZyAgMSAxMTozNzowOSAxOTk3ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIHBhcnNlLmMgKGdldF9jbGFzc19jb25zdGFudCk6IE1vZGlmaWVkIHRvIGhhbmRsZSBhcnJheSAiY2xhc3NlcyIKCSogdHlwZWNrLmMgKHNldF9sb2NhbF90eXBlKTogQnVnIGZpeGVkIHdoZW4gZmlsbGluZyB0eXBlX21hcFtdIHdpdGgKCXdpZGUgdHlwZS4KCShjb252ZXJ0KTogTW9kaWZpZWQgdG8gaGFuZGxlIHJlYWwgdHlwZS4KCSogamF2YS10cmVlLmggKHNvZnRfYmFkYXJyYXlpbmRleF9ub2RlLCBzb2Z0X2FuZXdhcnJheV9ub2RlLAoJc29mdF9tdWx0aWFuZXdhcnJheSwgc29mdF9uZXdhcnJheV9ub2RlLCBzb2Z0X3Rocm93X25vZGUpOiBOZXcgZ2xvYmFsCgl2YXJpYWJsZXMgZGVjbGFyZWQuCgkqIGRlY2wuYyAoc29mdF9iYWRhcnJheWluZGV4X25vZGUsIHNvZnRfYW5ld2FycmF5X25vZGUsCglzb2Z0X211bHRpYW5ld2FycmF5LCBzb2Z0X25ld2FycmF5X25vZGUsIHNvZnRfdGhyb3dfbm9kZSk6IE5ldwoJZ2xvYmFsIHZhcmlhYmxlcyBpbml0aWFsaXplZC4KCShmaW5kX2xvY2FsX3ZhcmlhYmxlKTogSGFuZGxlcyB0aGUgY2FzZSBvZiBhIHBvaW50ZXIKCShlbmRfamF2YV9tZXRob2QpOiBSZXN0b3JlIHRoZSB1c2Ugb2Ygb25lIG1vcmUgc2NvcGUKCSogZXhwci5jIChidWlsZF9qYXZhX2FycmF5bnVsbF9jaGVjaywgYnVpbGRfamF2YV9hcnJheWFjY2VzcywKCWJ1aWxkX2phdmFfYXJyYXlfbGVuZ3RoX2FjY2VzcywgZXhwYW5kX2phdmFfYXJyYXlsb2FkLAoJZXhwYW5kX2phdmFfYXJyYXlzdG9yZSwgZXhwYW5kX2phdmFfYXJyYXlfbGVuZ3RoLAoJZXhwYW5kX2phdmFfbXVsdGlhbmV3YXJyYXksIGV4cGFuZF9qYXZhX2FuZXdhcnJheSwKCWJ1aWxkX2phdmFfY2hlY2tfaW5kZXhlZF90eXBlLCBpc19hcnJheV90eXBlX3AsCglidWlsZF9qYXZhX3Rocm93X291dF9vZl9ib3VuZF9leGNlcHRpb24pOiBOZXcgZnVuY3Rpb25zLgoJKFNUT1JFX0lOVEVSTkFMKTogTm93IGZvcmNlcyB0eXBlIG9mIHRoZSBkZWNsIHRvIGJlIHR5cGUgb2YgdGhlIHZhbHVlLgoJKE9QQ09ERV9hcnJheWxlbmd0aCwgT1BDT0RFX25ld2FycmF5LCBPUENPREVfPHQ+YXN0b3JlLAoJT1BDT0RFXzx0PmFsb2FkKTogSW1wbGVtZW50ZWQgY29kZSBmb3IgdmVyaWZpY2F0aW9uLgoJKEFSUkFZX1NUT1JFLCBBUlJBWV9MT0FELCBBUlJBWV9MRU5HVEgsIEFSUkFZX05FV19QVFIsIEFSUkFZX05FV19OVU0KCUFSUkFZX05FV19NVUxUSSk6IE1hY3JvIGRlZmluZWQuCgkoQ09OVkVSVCk6IE1vZGlmaWVkIHRvIGludm9rZSBjb252ZXJ0KCkuCgkoY2FzZSBPUENPREVfYWxvYWQyKTogRml4ZWQgaW5kZXggdHlwbyBmcm9tIDIgdG8gMS4KClRodSBKdWwgMzEgMTI6NDg6MTggMTk5NyAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGN5Z251cy5jb20+CgoJKiBjbGFzcy5jIChwdXNoX2NsYXNzKTogIFNldCBERUNMX0FSVElGSUNJQUwgKGZvciBkYnhvdXQuYykuCgkoYnVpbGRfY2xhc3NfcmVmLCBpc19jb21waWxlZF9jbGFzcyk6ICBIYW5kbGUgcG9pbnRlci10by1yZWNvcmQgdHlwZXMuCgkobWFrZV9jbGFzc19kYXRhKTogIEZpZWxkIG5hbWUgbmVlZHMgJy8nIGFzIHBhY2thZ2UgcHJlZml4LgoJKiBleHByLmMgKHR5cGVfc3RhY2tfZHVwLCBqYXZhX3N0YWNrX2R1cCk6ICBGaXggZmVuY2Vwb3N0IGVycm9ycy4KCkZyaSBKdWwgMjUgMTE6NDQ6MjEgMTk5NyAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGN5Z251cy5jb20+CgoJSW1wbGVtZW50IGRlYnVnIGluZm9ybWF0aW9uIGZvciBsb2NhbCB2YXJpYWJsZXMuCgkqIGphdmEtdHJlZS5oIChERUNMX0NPREVfTEVOR1RILCBERUNMX0FSR19TTE9UX0NPVU5ULAoJREVDTF9MT0NBTF9TTE9UX05VTUJFUiwgREVDTF9MT0NBTF9TVEFSVF9QQywgREVDTF9MT0NBTF9FTkRfUEMsCglERUNMX0xPQ0FMX1NMT1RfQ0hBSU4pOiAgTmV3IG1hY3Jvcy4KCShzdHJ1Y3QgbGFuZ19kZWNsX3Zhcik6ICBOZXcgdHlwZS4KCSogcGFyc2UuYyAoZ2l2ZV9uYW1lX3RvX2xvY2Fscyk6ICBNb3ZlIHRvIGRlY2wuYy4KCSogZGVjbC5jIChnaXZlX25hbWVfdG9fbG9jYWxzKTogIFJlLXdyaXR0ZW4gdG8gRG8gVGhlIFJpZ2h0IFRoaW5nLgoJKHN0YXJ0X2phdmFfbWV0aG9kKTogIFJlLXdyaXRlIHBhcmFtZXRlciBoYW5kbGluZy4KCShwZW5kaW5nX2xvY2FsX2RlY2xzKTogIE5ldyBnbG9iYWwgdmFyaWFibGUuCgkocHVzaF9qdm1fc2xvdCwgbWF5YmVfcHVzaGxldmVscywgbWF5YmVfcG9wbGV2ZWxzKTogIE5ldyBmdW5jdGlvbnMuCgkoZmluZF9sb2NhbF92YXJpYWJsZSk6ICBBY2NlcHQgcGMgc28gd2UgY2FuIHNraXBzIGRlY2xzIG5vdCBpbiByYW5nZS4KCShzdHJ1Y3QgYmluZGluZ19sZXZlbCk6ICBBZGQgZW5kX3BjIGZpZWxkLgoJKiBleHByLmMgKGV4cGFuZF9ieXRlX2NvZGUpOiBDYWxsIG1heWJlX3B1c2hsZXZlbHMgYW5kIG1heWJlX3BvcGxldmVscy4KCSh2YXJpb3VzKTogIENoYW5nZSBzbyBjdXJyZW50IHBjIGdldHMgcGFzc2VkIHRvIGZpbmRfbG9jYWxfdmFyaWFibGUuCgoJKiBkZWNsLmMgKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogIFJlLWFycmFuZ2UgZmllbGRzIGluCgljbGFzc190eXBlX25vZGUgYW5kIGFuZCBtZXRob2RfdHlwZV9ub2RlIHRvIG1hdGNoIGthZmZlIDAuOS4xLgoJKiBjbGFzcy5jIChtYWtlX21ldGhvZF92YWx1ZSwgbWFrZV9jbGFzc19kYXRhKTogIFVwZGF0ZQoJaW5pdGlhbGl6YXRpb25zIHRvIG1hdGNoLgoKV2VkIEp1bCAxNiAxNzoxNzo1MCAxOTk3ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAY3lnbnVzLmNvbT4KCgkqIGNsYXNzLmMgKHVuaWNvZGVfbWFuZ2xpbmdfbGVuZ3RoLCBlbWl0X3VuaWNvZGVfbWFuZ2xlZF9uYW1lLAoJYXBwZW5kX2dwcF9tYW5nbGVkX25hbWUsIGFwcGVuZF9ncHBfbWFuZ2xlZF90eXBlKTogIE5ldyBmdW5jdGlvbnMuCgkocHVzaF9zdXBlcl9maWVsZCk6ICBOZXcgZnVuY3Rpb24uCgkobWFrZV9jbGFzc19kYXRhKTogIEhhbmRsZSBpbmhlcml0YW5jZSBvZiBjbGFzcyBzdGF0aWMgaW5pdGlhbGl6ZXIuCgkobGF5b3V0X2NsYXNzKTogIE5ldyBuYW1lIG1hbmdsaW5nLgoJKiBjb25zdGFudHMuYyAoYnVpbGRfY29uc3RhbnRfZGF0YV9yZWYpOiAgSW5pdCB0eXBlIG9mIGRhdGEgYXJyYXkKCXRvIGEgb25lLWVsZW1lbnQgYXJyYXkuCgkoYnVpbGRfY29uc3RhbnRzX2NvbnN0cnVjdG9yKTogIFNldCBERUNMX1NJWkUgZnJvbSBjb21wbGV0ZSBhcnJheSB0eXBlLgoJKiBkZWNsLmM6ICBSZW5hbWUgY2xhc3NfdHlwZSwgb2JqZWN0X3R5cGUgZXRjIHRvIGNsYXNzX3R5cGVfbm9kZSwKCW9iamVjdF90eXBlX25vZGUgZXRjLiAgTWFrZSBmb3JtZXIgaW5oZXJpdCBmcm9tIGxhdHRlci4KCSogZXhwci5jIChleHBhbmRfaW52b2tlKTogIEFkZCBjYXN0IG9mIGZ1bmN0aW9uIGFkZHJlc3MuCgkqIGphdmEtdHJlZS5oIChUWVBFX0FSUkFZX0VMRU1FTlQsIFBVU0hfU1VQRVJfVkFMVUUpOiAgTmV3LgoJKiBwYXJzZS5jICh5eXBhcnNlKTogIERvbid0IGNhbGwgbGF5b3V0X2NsYXNzIGhlcmUuCgkqIHR5cGVjay5jIChidWlsZF9qYXZhX2FycmF5X3R5cGUpOiAgU2V0IFRZUEVfQVJSQVlfRUxFTUVOVC4KClNhdCBKdW4gMTQgMTI6MDY6NTcgMTk5NyAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGN5Z251cy5jb20+CgoJKiBkZWNsLmMsIGNsYXNzLmM6ICBVcGRhdGUgbWV0aG9kIHR5cGUgdG8gbWF0Y2ggbGF0ZXN0IEthZmZlIHNuYXBzaG90LgoJKiBjb25zdGFudHMuYyAobG9va3VwX25hbWVfY29uc3RhbnQpOiAgUmVuYW1lZCB0byBhbGxvY19uYW1lX2NvbnN0YW50LgoJKGFsbG9jX2NsYXNzX2NvbnN0YW50KTogIE5ldy4KCSogZXhwci5jIChleHBhbmRfaW52b2tlKTogIE1ha2Ugc3VyZSBtZXRob2QncyBjbGFzcyBpcyBpbml0aWFsaXplZC4KCSogY2xhc3MuYyAoaW50ZXJpdHNfZnJvbV9wLCBlbWl0X3JlZ2lzdGVyX2NsYXNzKTogIE5ldyBmdW5jdGlvbnMuCgkqIHBhcnNlLmMgKHl5cGFyc2UpOiAgQ2FsbCBlbWl0X3JlZ2lzdGVyX2NsYXNzLgoKTW9uIEp1biAgOSAxODowODowNiAxOTk3ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAY3lnbnVzLmNvbT4KCgkqIGNvbnN0YW50cy5jOiAgTmV3IGZpbGUsIHRvIGhhbmRsZSBjb25zdGFudCBwb29sLgoJKiBNYWtlZmlsZS5pbiAoSkFWQV9PQkpTKTogIEFkZCBjb25zdGFudHMuby4KCSogZGVjbC5jIChpbml0X2RlY2xfcHJvY2Vzc2luZyk6ICBVcGRhdGUsIGZpeCwgZmluaXNoIHZhcmlvdXMgc3RydWN0cy4KCShwdXNoZGVjbF90b3BfbGV2ZWwpOiAgTmV3LgoJKiBwYXJzZS5jIChsYXlvdXRfY2xhc3MpOiAgTW92ZWQgdG8gY2xhc3MuYy4KCSogZXhwci5jIChqYXZhX3B1c2hfY29uc3RhbnRfZnJvbV9wb29sKTogIE5ldyBmdW5jdGlvbi4KCSogY2xhc3MuYyAoYnVpbGRfY2xhc3NfcmVmKTogIE1ha2Ugd29yayBmdWxseQoJKG1ha2VfY2xhc3NfZGF0YSk6ICBFbWl0IHN1cGVyLWNsYXNzLCBjb25zdGFudCBwb29sLCBpbnRlcmZhY2UgdmVjdG9yLgoKVHVlIEp1biAgMyAxMDoxNDozMSAxOTk3ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAY3lnbnVzLmNvbT4KCglqYXZhLXRyZWUuaCAoREVDTF9TSUdOQVRVUkUsIEJDT0RFX0VNSVRURUQpOiAgUmVtb3ZlLgoJKExBQkVMX1ZFUklGSUVELCBCQ09ERV9FWENFUFRJT05fVEFSR0VULCBUWVBFX0FSUkFZX1ApOiAgTmV3LgoJKiBjbGFzcy5jIChjbGFzc19kZXB0aCk6ICBOZXcgZnVuY3Rpb24uCgkobG9va3VwX25hbWVkX2NsYXNzKTogIFJlcGxhY2VkIGJ5IG5ldyBmdW5jdGlvbiBsb29rdXBfY2xhc3MuCgkqIGRlY2wuYyAob2JqZWN0X3R5cGVfbm9kZSwgc3RyaW5nX3R5cGVfbm9kZSk6ICBOZXcuCglSZW1vdmUgdmFyaW91cyB0eXBlcyB0aGF0IHdlIG5vIGxvbmdlciBuZWVkLgoJKiBleHByLmMgKHZlcmlmeV9qdm1faW5zdHJ1Y3Rpb25zKTogIE5ldyBzZXBhcmF0ZSB2ZXJpZmllciBwYXNzLgoJKHB1c2hfdHlwZSwgcG9wX3R5cGUpOiAgTmV3IGZ1bmN0aW9ucyBmb3IgdmVyaWZpZXIuCgkodHlwZV9zdGFja19kdXAsIHBvcF9hcmd1bWVudF90eXBlcywgbWVyZ2VfdHlwZXMpOiAgTGlrZXdpc2UuCgkoZXhwYW5kX2J5dGVfY29kZSk6ICBTaW1wbGlmeSwgc2luY2Ugd2UgYXNzdW1lIGFscmVhZHkgdmVyaWZpZWQuCgkoZXhwYW5kX2ludm9rZSk6ICBOb3cgbW9zdGx5IHdvcmtzLgoJKiBqYXZhb3AuZGVmOiAgUmVuYW1lIGxkYzEtPmxkYywgbGRjMi0+bGRjX3csIGxkYzJ3LT5sZGMyX3cuCgkqIGxhbmcuYyAobWFpbl9jbGFzcyk6ICBNb3ZlIHRvIHBhcnNlLmMuICBEb24ndCBtYWtlX2NsYXNzIHlldC4KCSogcGFyc2UuYzogIFdhaXQgdG8gYWxsb2NhdGUgY2xhc3Mgb2JqZWN0IHVudGlsIHdlIGtub3cgaXRzIG5hbWUuCgkobGF5b3V0X2NsYXNzKTogIENhbGN1bGF0ZSBERUNMX1ZJTkRFWCBmb3IgZWFjaCB2aXJ0dWFsIG1ldGhvZC4KCSogdHlwZWNrLmMgKGdldF9hcnJheV90eXBlKTogIFJlbmFtZSB0byAuLi4KCShidWlsZF9qYXZhX2FycmF5X3R5cGUpOiAgLi4uIGFuZCBwcm92aWRlIHdvcmtpbmcgaW1wbGVtZW50YXRpb24uCgkoYnVpbGRfamF2YV9zaWduYXR1cmUpOiAgTmV3IGZ1bmN0aW9uIC0gYnVpbGQgSmF2YSBzaWduYXR1cmUgb2YgdHlwZS4KCShzZXRfamF2YV9zaWduYXR1cmUpOiAgTmV3IGZ1bmN0aW9uIC0gY2FjaGUgc2lnbmF0dXJlIHdpdGggdHlwZS4KCShsb29rdXBfamF2YV9tZXRob2QpOiAgTmV3IGZ1bmN0aW9uLgoKVHVlIE1heSAgNiAyMjowODoyNCAxOTk3ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAZGVuZWIuY3lnbnVzLmNvbT4KCgkqIGNsYXNzLmMgKGlkZW50X3N1YnN0KTogIFRha2UgZXh0cmEgU1VGRklYIHBhcmFtZXRlci4KCShhZGRfZmllbGQpOiAgU2V0IERFQ0xfQVNTRU1CTEVSX05BTUUgb2Ygc3RhdGljIGZpZWxkczsgIG1vcmUuCgkoc2V0X2NvbnN0YW50X3ZhbHVlLCBidWlsZF9zdGF0aWNfZmllbGRfcmVmLCBpc19jb21waWxlZF9jbGFzcyk6ICBOZXcuCgkoYnVpbGRfY2xhc3NfcmVmKTogIEFjdHVhbGx5IGltcGxlbWVudC4KCSogZGVjbC5jLCBqYXZhLXRyZWUuaDogIFJlbmFtZWQgc29tZSB4eF90eXBlIHRvIHh4X3R5cGVfbm9kZS4KCSogZGVjbC5jIChidWlsdGluX2Z1bmN0aW9uKTogIE5ldy4KCShpbml0X2RlY2xfcHJvY2Vzc2luZyk6ICBVcGRhdGUgZm9yIGN1cnJlbnQgS2FmZmUuICBEZWNsYXJlIHNvbWUKCWJ1aWx0aW4gS2FmZmUgZnVuY3Rpb25zLgoJKiBleHByLmMgKGJ1aWxkX2FkZHJlc3Nfb2YpOiAgTmV3LgoJKGV4cGFuZF9qYXZhX05FVywgZXhwYW5kX2phdmFfSU5TVEFOQ0VPRiwgZXhwYW5kX2phdmFfQ0hFQ0tDQVNUKToKCVJlbmFtZWQgKGZyb20gZXhwYW5kX2phdmFfbmV3IGV0YyksIGFuZCBhZGRlZCB3b3JraW5nIGltcGxlbWVudGF0aW9ucy4KCShidWlsZF9maWVsZF9yZWYpOiAgTm93IGFsc28gaGFuZGxlIHN0YXRpYyBmaWVsZHMuCgkoZXhwYW5kX2ludm9rZSk6ICBJbXBsZW1lbnQgaW52b2tlc3RhdGljLCBhbmQgc3RhcnQgaW1wbGVtZW50IHJlc3QuCgkqIGphdmEtb3Bjb2Rlcy5oOiAgVXNlIGphdmFvcC5kZWYgdG8gYXZvaWQgZHVwbGljYXRlZCBsaXN0LgoJKiBqYXZhb3AuZGVmOiAgUmVuYW1lIGludm9rZXZpcnQgLT4gaW52b2tldmlydHVhbC4KCSogbGFuZy5jICh1c2VfaGFuZGxlcyk6ICBSZW1vdmVkLgoJKiBwYXJzZS5jOiAgQWRkIHN1cHBvcnQgZm9yIENvbnN0YW50VmFsdWUgYXR0cmlidXRlLgoJSGFuZGxlIG5lc3RlZCBsb2FkaW5nIG9mIGEgY2xhc3MuICAoSlBPT0xfVVRGKTogIE5ldy4KClR1ZSBNYXIgMTEgMjA6MTE6MDUgMTk5NyAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGRlbmViLmN5Z251cy5jb20+CgoJKiBleHByLmMgKGV4cGFuZF9qYXZhX3B1c2hjKTogIFN1cHBvcnQgI2lmbmRlZiBSRUFMX0FSSVRITUVUSUMgY2FzZS4KClRodSBGZWIgMjcgMTQ6MjQ6MjkgMTk5NyAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGRlbmViLmN5Z251cy5jb20+CgoJKiBNYWtlLWxhbmcuaW4gKGphdmEuaW5zdGFsbC1tYW4pOiAgTmV3IGVtcHR5IHJ1bGUuCgkqIHR5cGVjay5jIChzZXRfbG9jYWxfdHlwZSk6ICBOZXcgZnVuY3Rpb24uCgkqIGV4cHIuYyAoU1RPUkVfSU5URVJOQUwpOiAgQ2FsbCBmaW5kX2xvY2FsX3ZhcmlhYmxlLAoJbm90IGZpbmRfc3RhY2tfc2xvdC4gIENhbGwgc2V0X2xvY2FsX3R5cGUuCgpXZWQgRmViIDEyIDE2OjExOjA1IDE5OTcgIFBlciBCb3RobmVyICA8Ym90aG5lckBrYWxlc3Npbi5jeWdudXMuY29tPgoKCSogamF2YS10cmVlLmg6ICBWYXJpb3VzIG5ldyBtYWNyb3MgZm9yIGNvbnN0cnVjdGluZyBSRUNPUkRfVFlQRXMsCglhbmQgYnVpbGRpbmcgUkVDT1JEX1RZUEUgQ09OU1RSVUNUT1JzLgoJQWxzbyBzdXBwb3J0IGZvciBjcmVhdGluZyBVdGY4Q29uc3Qgb2JqZWN0cyBmcm9tIGFuIElOREVUSUZJRVJfTk9ERS4KCgkqIGxhbmcuYyAodXNlX2hhbmRsZXMpOiAgQ2hhbmdlIHRoZSBkZWZhdWx0IHRvIDAuCgkqIGRlY2wuYzogIERlZmluZSBhbmQgYnVpbGQgY2xhc3NfdHlwZSwgZmllbGRfdHlwZSwgdXRmOGNvbnN0X3R5cGUuCgkqIGNsYXNzLmMgKG1ha2VfY2xhc3NfZGF0YSwgbWFrZV9maWVsZF92YWx1ZSwKCWdldF9hY2Nlc3NfZmxhZ3NfZnJvbV9kZWNsLCBidWlsZF9jbGFzc19yZWYsIGJ1aWxkX3V0ZjhfcmVmLAoJaGFzaFV0ZjhTdHJpbmcsIHN0ckxlbmd0aFV0ZjgsIG1hbmdsZWRfY2xhc3NuYW1lOgoJRnVuY3Rpb25zIHRvIGJ1aWxkIHJlZmxlY3RpdmUgZGF0YSBzdHJ1Y3R1cmVzLgoJKiBwYXJzZS5jICh5eXBhcnNlKTogIENhbGwgbWFrZV9jbGFzc19kYXRhLgoKCSogamNmLWlvLmMgKG9wZW5fY2xhc3MsIGZpbmRfY2xhc3NmaWxlKTogIE5ldyBmdW5jdGlvbnMuCgkqIGpjZi1kdW1wLmM6ICBTdXBwb3J0IHJlYWRpbmcgY2xhc3NmaWxlIGZyb20gZXhwbGljaXRseS1uYW1lZAoJY2xhc3MgZmlsZSAod2l0aG91dCBDTEFTU1BBVEggc2VhcmNoaW5nKS4KClRodSBPY3QgMjQgMTQ6MTA6MTYgMTk5NiAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGRlbmViLmN5Z251cy5jb20+CgoJKiBqY2YtcmVhZGVyLmM6ICBBZGQgcGFyYW1ldGVyIGxpc3QgdG8gSEFORExFX0NPTlNUQU5UX1V0ZjguCgkqIHBhcnNlLmMgKEpQT09MX1VURl9MRU5HVEgsIEpQT09MX1VURl9EQVRBLCBIQU5ETEVfQ09OU1RBTlRfVXRmOCk6CglPdmVycmlkZSBqY2YtcmVhZGVyIG1hY3JvcyBzbyBDT05TVEFOVF9VdGY4IGJlY29tZXMgdHJlZSBub2RlIGhlcmUuCgkoZ2V0X2NvbnN0YW50KTogIE5vdyB0cml2aWFsIGZvciBDT05TVEFOVF9VdGY4LgoKCSogamNmLmg6ICBNYWtlIE5FV19DUE9PTCB0aGUgZGVmYXVsdC4KCSogamNmLmgsIGpjZi1yZWFkZXIuYywgcGFyc2UuYzogIFJlbW92ZSBzdXBwb3J0IGZvciAhTkVXX0NQT09MLgoKVGh1IE9jdCAyNCAxMzo1Mjo0NSAxOTk2ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAZGVuZWIuY3lnbnVzLmNvbT4KCglOZXcgZGlyZWN0b3J5Lgo=