RnJpIERlYyAzMSAxNjoyMzo0MyAxOTkzICBJYW4gTGFuY2UgVGF5bG9yICAoaWFuQHR3ZWVkbGVkdW1iLmN5Z251cy5jb20pCgoJTWlub3IgY2xlYW51cHMgc3VnZ2VzdGVkIGJ5IENvZGVDZW50ZXIuCgkqIGFvdXR4LmgsIGNvZmZnZW4uYywgZWNvZmYuYywgZWNvZmZsaW5rLmMsIGVsZi5jLCBsaWJiZmQuYywKCWxpbmtlci5jLCByZWxvYy5jLCBzZWN0aW9uLmMsIHNyZWMuYzogQWRkZWQgLypBUkdTVVNFRCovIGFzCglhcHByb3ByaWF0ZS4KCSogYW91dHguaCAoc3RydWN0IGV4dGVybmFsX2V4ZWMpOiBSZW1vdmVkIHVubmVjZXNzYXJ5IGRlY2xhcmF0aW9uLgoJKE5BTUUoYW91dCxzb21lX2FvdXRfb2JqZWN0X3ApKTogU2V0IHNvbWUgdGRhdGEgcG9pbnRlcnMgdG8gTlVMTC4KCShhZGp1c3Rfel9tYWdpYyk6IFJlbW92ZWQgdXNlbGVzcyB2YXJpYWJsZSBkYXRhX3ZtYS4KCShzdHJpbmd0YWJfaW5pdCk6IEluaXRpYWxpemUgaGFzaF96ZXJvLgoJKGFkZF90b19zdHJpbmd0YWIpOiBSZW1vdmVkIHVudXNlZCBmb3VydGggYXJndW1lbnQuCgkoTkFNRShhb3V0LHN3YXBfc3RkX3JlbG9jX291dCkpOiBSZW1vdmVkIHVzZWxlc3MgdmFyaWFibGUKCXJfYWRkZW5kLgoJKGFvdXRfbGlua19pbnB1dF9zZWN0aW9uKTogQWRkZWQgc29tZSBjYXN0cy4KCSogYXJjaGl2ZS5jIChnZXRfZXh0ZW5kZWRfYXJlbHRfZmlsZW5hbWUsIGRvX3NsdXJwX2NvZmZfYXJtYXAsCgliZmRfYXJfaGRyX2Zyb21fZmlsZXN5c3RlbSwgYnNkX3dyaXRlX2FybWFwLCBjb2ZmX3dyaXRlX2FybWFwKToKCU1pbm9yIGNvZGUgcmV3cml0aW5nIHRvIG1ha2UgaXQgbW9yZSBDIGxpa2UuCgkoZG9fc2x1cnBfYnNkX2FybWFwKTogQWRkZWQgc29tZSBjYXN0cy4KCSogZWNvZmYuYyAoZWNvZmZfd3JpdGVfb2JqZWN0X2NvbnRlbnRzKTogUmVtb3ZlZCB1c2VsZXNzIHZhcmlhYmxlCglzY25fYmFzZS4KCShlY29mZl93cml0ZV9hcm1hcCk6IEFkZGVkIHNvbWUgY2FzdHMuICBVc2UgIiIgcmF0aGVyIHRoYW4gIlwwIi4KCSogZWNvZmZsaW5rLmMgKGJmZF9lY29mZl93cml0ZV9kZWJ1Zyk6IEFkZGVkIGEgY2FzdC4KCSogbGliYW91dC5oIChzdHJ1Y3QgaW50ZXJuYWxfZXhlYyk6IFJlbW92ZWQgdW5uZWNlc3NhcnkKCWRlY2xhcmF0aW9uLgoJKiBsaW5rZXIuYyAoX2JmZF9nZW5lcmljX2luZGlyZWN0X2xpbmtfb3JkZXIpOiBBZGRlZCBhIGNhc3QuCgkqIG9wbmNscy5jIChuZXdfYmZkKTogUmVtb3ZlZCBhIGNhc3QuCgkqIHJlbG9jLmMgKGJmZF9nZW5lcmljX2dldF9yZWxvY2F0ZWRfc2VjdGlvbl9jb250ZW50cyk6IEFkZGVkCglzb21lIGNhc3RzLgoJKiBzcmVjLmMgKGludGVybmFsX3NyZWNfd3JpdGVfb2JqZWN0X2NvbnRlbnRzKTogUmVtb3ZlZCB1c2VsZXNzCgl2YXJpYWJsZSBieXRlc193cml0dGVuLgoKRnJpIERlYyAzMSAxMTo0NjoxMyAxOTkzICBEYXZpZCBKLiBNYWNrZW56aWUgIChkam1AdGhlcHViLmN5Z251cy5jb20pCgoJKiBpMzg2bWFjaDMuYyAoTl9UWFRBRERSKTogRG9uJ3QgZGVmaW5lIGFmdGVyIGFsbC4KCShURVhUX1NUQVJUX0FERFIpOiBEb24ndCBpbmNsdWRlIGV4ZWMgaGVhZGVyIHNpemUgaW4gdmFsdWUuCgpUaHUgRGVjIDMwIDE1OjQ3OjU0IDE5OTMgIERhdmlkIEouIE1hY2tlbnppZSAgKGRqbUB0aGVwdWIuY3lnbnVzLmNvbSkKCgkqIGkzODZtYWNoMy5jIChOX1RYVEFERFIpOiBEZWZpbmUuCgpUaHUgRGVjIDMwIDEzOjM3OjI0IDE5OTMgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AdHdlZWRsZWR1bWIuY3lnbnVzLmNvbSkKCglFeHRlbnNpdmUgY2hhbmdlcyB0byBtb3ZlIHRoZSBidWxrIG9mIHRoZSBsaW5rZXIgaW50byBCRkQgc28gdGhhdAoJbW9yZSBlZmZpY2llbnQgYmFja2VuZCBjb2RlIGNhbiBiZSB3cml0dGVuIGZvciBzcGVjaWZpYyBvYmplY3QKCWZpbGVzLiAgT25seSBleGlzdGluZyBlZmZpY2llbnQgYmFja2VuZCBpcyBhLm91dC4KCSogc2VjbGV0LmMsIHNlY2xldC5oOiBSZW1vdmVkLgoJKiBoYXNoLmMsIGxpbmtlci5jLCBnZW5saW5rLmg6IE5ldyBmaWxlcy4KCSogYmZkLWluLmg6IFJlbW92ZWQgYmZkX2Vycm9yX3ZlY3Rvci4gIERlY2xhcmVkIGhhc2ggdGFibGUKCXN0cnVjdHVyZXMgYW5kIGZ1bmN0aW9ucy4KCShKVU1QX1RBQkxFKTogUmVtb3ZlZCBiZmRfc2VjbGV0X2xpbmssIGFkZGVkCgliZmRfbGlua19oYXNoX3RhYmxlX2NyZWF0ZSwgYmZkX2xpbmtfYWRkX3N5bWJvbHMgYW5kCgliZmRfZmluYWxfbGluay4KCSogQWxsIGJhY2tlbmRzOiBDaGFuZ2VkIGFjY29yZGluZ2x5LgoJKiBiZmQtaW4yLmg6IFJlYnVpbHQuCgkqIGJmZC5jIChzdHJ1Y3QgX2JmZCk6IEFkZGVkIGxpbmtfbmV4dCBhbmQgYXJjaGl2ZV9wYXNzIGZpZWxkcy4KCVJlbW92ZWQgbGRfc3ltYm9scyBmaWVsZC4KCShiZmRfbm9ucmVwcmVzZW50YWJsZV9zZWN0aW9uLCBiZmRfdW5kZWZpbmVkX3N5bWJvbCwKCWJmZF9yZWxvY192YWx1ZV90cnVuY2F0ZWQsIGJmZF9yZWxvY19pc19kYW5nZXJvdXMsCgliZmRfZXJyb3JfdmVjdG9yKTogUmVtb3ZlZC4KCShiZmRfZGVmYXVsdF9lcnJvcl90cmFwLCBiZmRfZXJyb3JfdHJhcCwKCWJmZF9lcnJvcl9ub25yZXByZXNlbnRhYmx0cmFwKTogUmVtb3ZlZC4KCShiZmRfZ2V0X3JlbG9jYXRlZF9zZWN0aW9uX2NvbnRlbnRzKTogUGFzcyBsaW5rX2luZm8uICBQYXNzCglsaW5rX29yZGVyIGluc3RlYWQgb2Ygc2VjbGV0LiAgUGFzcyBzeW1ib2xzLgoJKGJmZF9yZWxheF9zZWN0aW9uKTogUGFzcyBsaW5rX2luZm8uCgkoYmZkX3NlY2xldF9saW5rKTogUmVtb3ZlZC4KCShiZmRfbGlua19oYXNoX3RhYmxlX2NyZWF0ZSwgYmZkX2xpbmtfYWRkX3N5bWJvbHMsCgliZmRfZmluYWxfbGluayk6IE5ldyBtYWNyb3MuCgkqIGxpYmJmZC1pbi5oOiBJZiBfX0dOVUNfXyBpcyBkZWZpbmVkIGFuZCBhbGxvY2EgaXMgbm90LCBkZWZpbmUKCWFsbG9jYSBhcyBfX2J1aWx0aW5fYWxsb2NhLiAgRGVjbGFyZSBpbnRlcm5hbCBsaW5raW5nIGZ1bmN0aW9ucy4KCSogbGliYmZkLmg6IFJlYnVpbHQuCgkqIGxpYmJmZC5jIChiZmRfc2Vlayk6IENvbW1lbnQgb3V0IGZzZWVrIGFzc2VydGlvbi4gIEl0J3Mgd29ya2VkCglmb3IgbW9udGhzLgoJKiByZWxvYy5jIChyZWxvY19ob3d0b190eXBlKTogQWRkZWQgZXJyb3JfbWVzc2FnZSBhcmd1bWVudCB0bwoJc3BlY2lhbF9mdW5jdGlvbiBmaWVsZC4gIENoYW5nZWQgYWxsIGNhbGxlcnMgYW5kIGFsbCBkZWZpbml0aW9ucy4KCShiZmRfZ2V0X3JlbG9jX3NpemUpOiBNYWtlIGFyZ3VtZW50IGEgY29uc3QgcG9pbnRlci4KCShiZmRfcGVyZm9ybV9yZWxvY2F0aW9uKTogQWRkIGVycm9yX21lc3NhZ2UgYXJndW1lbnQgdG8gaG9sZAoJc3RyaW5nIHNldCBpZiByZXR1cm4gdmFsdWUgaWYgYmZkX3JlbG9jX2Rhbmdlcm91cy4gIENoYW5nZWQgYWxsCgljYWxsZXJzLgoJKF9iZmRfZmluYWxfbGlua19yZWxvY2F0ZSwgX2JmZF9yZWxvY2F0ZV9jb250ZW50cyk6IE5ldyBmdW5jdGlvbnMuCgkqIHNlY3Rpb24uYyAoYXNlY3Rpb24pOiBSZW5hbWVkIHNlY2xldHNfaGVhZCBhbmQgc2VjbGV0c190YWlsIHRvCglsaW5rX29yZGVyX2hlYWQgYW5kIGxpbmtfb3JkZXJfdGFpbC4KCSogdGFyZ2V0cy5jIChiZmRfdGFyZ2V0KTogUmVwbGFjZWQgc2VjbGV0IGFyZ3VtZW50IHdpdGggbGlua19pbmZvCglhbmQgbGlua19vcmRlciBhbmQgc3ltYm9scyBhcmd1bWVudHMgaW4KCWJmZF9nZXRfcmVsb2NhdGVkX3NlY3Rpb25fY29udGVudHMuICBBZGRlZCBzeW1ib2xzIGFyZ3VtZW50IHRvCgliZmRfcmVsYXhfc2VjdGlvbi4gIFJlbW92ZWQgYmZkX3NlY2xldF9saW5rLiAgQWRkZWQKCWJmZF9saW5rX2hhc2hfdGFibGVfY3JlYXRlLCBiZmRfbGlua19hZGRfc3ltYm9scyBhbmQKCWJmZF9maW5hbF9saW5rLgoJKiBsaWJhb3V0LmggKHN0cnVjdCBhb3V0ZGF0YSk6IEFkZGVkIGV4dGVybmFsX3N5bXMsCglleHRlcm5hbF9zeW1fY291bnQsIGV4dGVybmFsX3N0cmluZ3MsIHN5bV9oYXNoZXMgZmllbGRzLgoJKG9ial9hb3V0X2V4dGVybmFsX3N5bXMsIG9ial9hb3V0X2V4dGVybmFsX3N5bV9jb3VudCwKCW9ial9hb3V0X2V4dGVybmFsX3N0cmluZ3MsIG9ial9hb3V0X3N5bV9oYXNoZXMpOiBOZXcgYWNjZXNzb3IKCW1hY3Jvcy4KCShXUklURV9IRUFERVJTKTogT25seSBvdXRwdXQgc3ltYm9scyBpZiBvdXRzeW1ib2xzIGlzIG5vdCBOVUxMLgoJKiBhb3V0eC5oOiBXcm90ZSBuZXcgYmFjayBlbmQgbGlua2VyIHJvdXRpbmVzLgoJKHRyYW5zbGF0ZV90b19uYXRpdmVfc3ltX2ZsYWdzKTogUmV0dXJuIGJvb2xlYW4gdmFsdWUuICBEb24ndCB1c2UKCWJmZF9lcnJvcl92ZWN0b3IuCgkoTkFNRShhb3V0LHdyaXRlX3N5bXMpKTogUmV0dXJuIGJvb2xlYW4gdmFsdWUuICBDaGVjayByZXR1cm4gdmFsdWUKCW9mIHRyYW5zbGF0ZV90b19uYXRpdmVfc3ltX2ZsYWdzIGFuZCBiZmRfd3JpdGUuCgkqIGFvdXQtdGFyZ2V0LmggKGZpbmFsX2xpbmtfY2FsbGJhY2spOiBOZXcgZnVuY3Rpb24uCgkoTVlfYmZkX2ZpbmFsX2xpbmspOiBOZXcgZnVuY3Rpb24uCgkqIGFvdXQtYWRvYmUuYyAoYW91dF9hZG9iZV93cml0ZV9vYmplY3RfY29udGVudHMpOiBDaGVjayByZXR1cm4KCXZhbHVlIG9mIGFvdXRfMzJfd3JpdGVfc3ltcy4KCSogaHAzMDBocHV4LmMgKE1ZKHdyaXRlX29iamVjdF9jb250ZW50cykpOiBMaWtld2lzZS4KCSogaTM4Nmx5bnguYyAoV1JJVEVfSEVBREVSUyk6IExpa2V3aXNlLgoJKiBsaWJhb3V0LmggKFdSSVRFX0hFQURFUlMpOiBMaWtld2lzZS4KCSogYm91dC5jOiBDaGFuZ2VkIGZ1bmN0aW9ucyB0byB1c2UgbGlua19pbmZvLT5jYWxsYmFja3MgcmF0aGVyCgl0aGFuIGJmZF9lcnJvcl92ZWN0b3IsIGFuZCBsaW5rX29yZGVycyByYXRoZXIgdGhhbiBzZWNsZXRzLgoJKiBjb2ZmLWFscGhhLmM6IExpa2V3aXNlLgoJKiBjb2ZmLWg4MzAwLmM6IExpa2V3aXNlLgoJKiBjb2ZmLWg4NTAwLmM6IExpa2V3aXNlLgoJKiBjb2ZmLXNoLmM6IExpa2V3aXNlLgoJKiBjb2ZmLXo4ay5jOiBMaWtld2lzZS4KCSogZWxmMzItaHBwYS5jOiBMaWtld2lzZS4KCSogcmVsb2MxNi5jOiBMaWtld2lzZS4KCSogY29mZi1hbHBoYS5jIChhbHBoYV9lY29mZl9nZXRfcmVsb2NhdGVkX3NlY3Rpb25fY29udGVudHMpOiBMb29rCgl1cCBfZ3AgaW4gdGhlIGhhc2ggdGFibGUgcmF0aGVyIHRoYW4gaW4gb3V0c3ltYm9scy4KCSogY29mZi1hMjlrLmMgKGEyOWtfcmVsb2MpOiBQYXNzIGVycm9ycyBiYWNrIGluIG5ldyBlcnJvcl9tZXNzYWdlCglhcmd1bWVudCByYXRoZXIgdGhhbiBwcmludGluZyB0aGVtLgoJKiBjb2ZmY29kZS5oIChiZmRfY29mZl9yZWxvYzE2X2V4dHJhX2Nhc2VzKTogVGFrZSBsaW5rX2luZm8gYW5kCglsaW5rX29yZGVyIGFyZ3VtZW50cyByYXRoZXIgdGhhbiBzZWNsZXQuICBDaGFuZ2VkIGFsbCB1c2VzIGFuZAoJZGVmaW5pdGlvbnMuCgkoYmZkX2NvZmZfcmVsb2MxNl9lc3RpbWF0ZSk6IFBhc3MgbGlua19pbmZvIGFyZ3VtZW50cy4gIENoYW5nZWQKCWFsbCB1c2VzIGFuZCBkZWZpbml0aW9ucy4KCSogbGliY29mZi5oOiBSZWJ1aWx0LgoJKiBlY29mZi5jIChlY29mZl9nZXRfZXh0cik6IElmIHN5bWJvbCBpcyBkZWZpbmVkIGJ5IGxpbmtlciwgYnV0Cglub3QgYnkgRUNPRkYsIG1ha2UgaXQgc2NBYnMuCgkoZWNvZmZfYmZkX2ZpbmFsX2xpbmspOiBSZW5hbWVkIGZyb20gZWNvZmZfYmZkX3NlY2xldF9saW5rIGFuZAoJcmV3cml0dGVuLgoJKiBlbGYzMi1taXBzLmMgKG1pcHNfZWxmX2ZpbmFsX2xpbmspOiBSZW5hbWVkIGZyb20KCW1pcHNfZWxmX3NlY2xldF9saW5rIGFuZCByZXdyaXR0ZW4uCgkqIGVsZjMyLWhwcGEuYyAoZWxmMzJfaHBwYV9zdHViX2Rlc2NyaXB0aW9uKTogQWRkZWQgbGlua19pbmZvCglmaWVsZC4KCShuZXdfc3R1YiwgYWRkX3N0dWJfYnlfbmFtZSwgaHBwYV9lbGZfYnVpbGRfYXJnX3JlbG9jX3N0dWIsCglocHBhX2VsZl9idWlsZF9sb25nX2JyYW5jaF9zdHViLCBocHBhX2xvb2tfZm9yX3N0dWJzX2luX3NlY3Rpb24pOgoJQWRkZWQgbGlua19pbmZvIGFyZ3VtZW50cy4gIENoYW5nZWQgYWxsIGNhbGxlcnMuCgkqIGVsZmNvZGUuaCAoZWxmX3NsdXJwX3N5bWJvbF90YWJsZSk6IERvbid0IHF1aXQgaWYgb3V0c3ltYm9scyBpcwoJbm90IE5VTEwuCgkqIG9hc3lzLmMgKG9hc3lzX3dyaXRlX3NlY3Rpb25zKTogUmV0dXJuIGJvb2xlYW4gdmFsdWUgcmF0aGVyIHRoYW4KCXVzaW5nIGJmZF9lcnJvcl92ZWN0b3IuCgkob2FzeXNfd3JpdGVfb2JqZWN0X2NvbnRlbnRzKTogQ2hlY2sgcmV0dXJuIHZhbHVlIG9mCglvYXN5c193cml0ZV9zZWN0aW9ucy4KCSogaG9zdHMvc3RkLWhvc3QuaDogRG9uJ3QgZGVjbGFyZSBxc29ydCBvciBzdHJ0b2wuCgkqIE1ha2VmaWxlLmluOiBSZWJ1aWxkIGRlcGVuZGVuY2llcy4KCShCRkRfTElCUyk6IFJlbW92ZWQgc2VjbGV0Lm8uICBBZGRlZCBoYXNoLm8gYW5kIGxpbmtlci5vLgoJKENGSUxFUyk6IFJlbW92ZWQgc2VjbGV0LmMuICBBZGRlZCBoYXNoLmMgYW5kIGxpbmtlci5jLgoJKEhGSUxFUyk6IFJlbW92ZWQgc2VjbGV0LmguICBBZGRlZCBnZW5saW5rLmguCgpUaHUgRGVjIDMwIDA3OjQxOjM2IDE5OTMgIFBldGVyIFNjaGF1ZXIgIChwZXNAcmVnZW50LmUtdGVjaG5pay50dS1tdWVuY2hlbi5kZSkKCgkqIHNlY3Rpb24uYyAoYmZkX2dldF9zZWN0aW9uX2NvbnRlbnRzKTogIFJldHVybiB6ZXJvIGZpbGxlZCBidWZmZXIKCWlmIHNlY3Rpb24gaGFzIG5vIGNvbnRlbnRzLgoKVHVlIERlYyAyOCAxMjo0Mzo1NCAxOTkzICBJYW4gTGFuY2UgVGF5bG9yICAoaWFuQHR3ZWVkbGVkdW1iLmN5Z251cy5jb20pCgoJKiBlbGYuYyAoYmZkX2VsZl9nZW5lcmljX3JlbG9jKTogSWYgdGhpcyBpcyBub3QgYW4gaW5wbGFjZSByZWxvYywKCXRoZW4gc2tpcCBiZmRfcGVyZm9ybV9yZWxvY2F0aW9uIGV2ZW4gaWYgdGhlIGFkZGVuZCBpcyBub24temVyby4KClR1ZSBEZWMgMjEgMDk6MjI6MTkgMTk5MyAgS2VuIFJhZWJ1cm4gIChyYWVidXJuQHJ0bC5jeWdudXMuY29tKQoKCSogY29mZmNvZGUuaCAoY29mZl93cml0ZV9yZWxvY3MpIFtTV0FQX09VVF9SRUxPQ19PRkZTRVRdOiBDb3B5CglhZGRlbmQgdG8gcl9vZmZzZXQgZmllbGQuCgoJKiBNYWtlZmlsZS5pbiAoQ0ZJTEVTKTogQWRkZWQgY29mZi1zcGFyYy5jLiAgUmVidWlsZCBkZXBlbmRlbmNpZXMuCgoJKiBjb2ZmLXNwYXJjLmMgKFNXQVBfSU5fUkVMT0NfT0ZGU0VULCBTV0FQX09VVF9SRUxPQ19PRkZTRVQsCglDQUxDX0FEREVORCk6IERlZmluZS4KCgkqIGFpeDM4Ni1jb3JlLmMgKGFpeDM4Nl9jb3JlX2ZpbGVfcCk6IFVzZSBjZF9yZWdzWzBdIGZvciBjb21wdXRpbmcKCXRoZSBvZmZzZXRvZiBiZWNhdXNlIEFJWCAvYmluL2NjIGRvZXMgbm90IGxpa2UgdG8gdGFrZSB0aGUgYWRkcmVzcwoJb2YgYW4gYXJyYXkuICAoRnJvbSBNaW5oIFRyYW4tTGUuKQoKVGh1IERlYyAxNiAxMzowNjozMiAxOTkzICBKZWZmcmV5IEEuIExhdyAgKGxhd0BzbmFrZS5jcy51dGFoLmVkdSkKCgkqIFRodSBEZWMgMTYgMTU6NDE6MDYgMTk5MyAgUGV0ZXIgSG9vZ2VuYm9vbSAgKGhvb2dlbkBjcy51dGFoLmVkdSkKCgkqIGVsZjMyLWhwcGEuYyAoaHBwYV9lbGZfYnVpbGRfYXJnX3JlbG9jX3N0dWIpOiBNYWtlIHN1cmUgdG8gY29weQoJdGhlIHJldHVybiBwb2ludGVyIGludG8gJXIyIGlmIG5vIGp1bXAtaW4tY2FsbC1kZWxheS1zbG90CglvcHRpbWl6YXRpb24gd2FzIGRvbmUuCgoJKiBob3N0cy9ocDMwMGJzZC5oOiBDb3JyZWN0bHkgaWRlbnRpZnkgNC4zQlNEIHZzIDQuNEJTRC4KCldlZCBEZWMgMTUgMDg6MDQ6MTYgMTk5MyAgRGF2aWQgSi4gTWFja2VuemllICAoZGptQHRoZXB1Yi5jeWdudXMuY29tKQoKCSogaG9zdHMvc3RkLWhvc3QuaDogKHRpbWUpOiBEb24ndCBkZWNsYXJlOyBjb25mbGljdHMgb24gTWFjaDMuCgoJKiBob3N0cy9pMzg2bWFjaDMuaCAoSE9TVF9QQUdFX1NJWkUpOiBTZXQgdG8gMSB0byBhdm9pZCBwYWRkaW5nLgoJKEhPU1RfU0VHTUVOVF9TSVpFKTogU2V0IHRvIDAgZm9yIHNhbWUgcmVhc29uLgoKCSogaTM4Nm1hY2gzLmMgKFBBR0VfU0laRSwgU0VHTUVOVF9TSVpFKTogU2FtZSBjaGFuZ2VzIGFzIGFib3ZlLgoJKFRFWFRfU1RBUlRfQUREUik6IENvcnJlY3QuCgkoTVlfYmFja2VuZF9kYXRhKTogRGVmaW5lLgoKCSogYW91dHguaCAoYWRqdXN0X29fbWFnaWMsIGFkanVzdF96X21hZ2ljLCBhZGp1c3Rfbl9tYWdpYyk6CglOZXcgZnVuY3Rpb25zOyBjb2RlIG1vdmVkIGZyb20gYW91dF88c2l6ZT5fYWRqdXN0X3NpemVzX2FuZF92bWFzLgoKVHVlIERlYyAxNCAyMTo0ODozMyAxOTkzICBKZWZmcmV5IEEuIExhdyAgKGxhd0BzbmFrZS5jcy51dGFoLmVkdSkKCiAgICAgICAgKiBzb20uYyAoc29tX2JlZ2luX3dyaXRpbmcpOiBGaXggdGhpbmtvcyBpbiBhdXhpbGlhcnkgaGVhZGVyCglzdXBwb3J0LgoJKGJmZF9zb21fYXR0YWNoX2F1eF9oZHIpOiBMaWtld2lzZS4KCk1vbiBEZWMgMTMgMjM6MzQ6NDggMTk5MyAgSmVmZnJleSBBLiBMYXcgIChsYXdAc25ha2UuY3MudXRhaC5lZHUpCgoJKiBlbGYzMi1ocHBhLmMgKGhwcGFfZWxmX2dlbl9yZWxvY190eXBlKTogSGFuZGxlICdUJyBmaWVsZAoJc2VsZWN0b3JzIGZvciBQSUMgY29kZS4KCgkqIHNvbS5jIChocHBhX3NvbV9nZW5fcmVsb2NfdHlwZSk6IEhhbmRsZSAnVCcgZmllbGQgc2VsZWN0b3JzLgoJKHNvbV93cml0ZV9maXh1cHMpOiBIYW5kbGUgUl9ETFRfUkVMLCBSX0ZTRUwsIFJfUlNFTCwgUl9MU0VMCglyZWxvY2F0aW9ucyBuZWVkZWQgYnkgUElDLgoKVHVlIERlYyAgNyAxNTo0Nzo1MSAxOTkzICBTdHUgR3Jvc3NtYW4gIChncm9zc21hbiBhdCBjeWdudXMuY29tKQoKCSogbmxtY29kZS5oOiAgRml4ZXMgdG8gYXZvaWQgY29tcGlsZXIgd2FybmluZ3MuLi4KClR1ZSBEZWMgIDcgMTU6MTA6NTQgMTk5MyAgSWFuIExhbmNlIFRheWxvciAgKGlhbkBjeWdudXMuY29tKQoKCSogbGlibmxtLmggKG5sbV9iYWNrZW5kX2RhdGEpOiBSZW1vdmVkIG1hY3JvIGRlZmluaXRpb24uCgkobmxtX2FscGhhX2JhY2tlbmRfZGF0YSk6IEFkanVzdGVkIGFjY29yZGluZ2x5LgoKU3VuIERlYyAgNSAxOTozMjowOCAxOTkzICBKZWZmcmV5IEEuIExhdyAgKGxhd0BzbmFrZS5jcy51dGFoLmVkdSkKCgkqIHNvbS5jIChzb21fYmVnaW5fd3JpdGluZyk6IEZsZXNoIG91dCBjb2RlIGZvciBoYW5kbGluZyBzaW1wbGUKCWF1eGlsaWFyeSBoZWFkZXJzLgoJKGJmZF9zb21fYXR0YWNoX2F1eF9oZHIpOiBOZXcgZnVuY3Rpb24uCgoJKiBzb20uaCAoc3RydWN0IHNvbWRhdGEpOiBBZGQgZmllbGRzIGZvciBhdHRhY2hpbmcgdmVyc2lvbiBhbmQKCWNvcHlyaWdodCBoZWFkZXJzLiAgQWRkIGFjY2Vzc29yIG1hY3Jvcy4KCgkqIHNvbS5jIChSX0RMVF9SRUwsIFJfQVVYX1VOV0lORCwgUl9TRUNfU1RNVCk6IEFkZCBwcm90ZWN0ZWQKCWRlZmluaXRpb25zIGZvciBvbGQgdmVyc2lvbnMgb2YgSFBVWCB3aGljaCBmYWlsIHRvIGRlZmluZSB0aGVtLgoJKHNvbV9ocHBhX2hvd3RvX3RhbGJlKTogQWRkIFJfRExUX1JFTCwgUl9BVVhfVU5XSU5ELCBhbmQgUl9TRUNfU1RNVAoJbm93IHRoYXQgdGhleSdyZSBzYWZlLiAgRGVsZXRlIGJvZ3VzIFJfU1RBVEVNRU5UIHJlbG9jYXRpb25zLgoKCSogc29tLmMgKHNvbV9ocHBhX2hvd3RvX3RhYmxlKTogQWRkIG1pc3NpbmcgUl9FTkRfVFJZLiAgRGVsZXRlIAoJZXh0cmEgUl9EQVRBX09WRVJSSURFLgoJKGhwcGFfc29tX2dlbl9yZWxvY190eXBlKTogR2VuZXJhdGUgYSByZWxvY2F0aW9uIGZvciB0aGUgcm91bmRpbmcKCW1vZGUgc2VsZWN0b3IgaWYgbmVlZGVkLgoJKHNvbV93cml0ZV9maXh1cHMpOiBIYW5kbGUgcmVxdWVzdHMgZm9yIGEgY2hhbmdlIGluIHRoZSBkZWZhdWx0Cglyb3VuZGluZyBtb2RlLiAgUm91bmRpbmcgbW9kZXMgZG8gbm90IGNvbnN1bWUgaW5wdXQgYnl0ZXMsIGJ1dAoJYXJlIGp1c3QgbWFya2VycyBtdWNoIGxpa2UgUl9FTlRSWSBhbmQgUl9FWElULgoKU2F0IERlYyAgNCAxOTo0MDozMiAxOTkzICBKZWZmcmV5IEEuIExhdyAgKGxhd0BzbmFrZS5jcy51dGFoLmVkdSkKCglGcmkgRGVjICAzIDA5OjU1OjE3IDE5OTMgIFBldGUgSG9vZ2VuYm9vbSAgKGhvb2dlbkBjcy51dGFoLmVkdSkKCgkqIGVsZjMyLWhwcGEuYzogKGhwcGFfZWxmX3JlbG9jKTogIERvIG5vdCBkbyBjb2RlIHJlb3JkZXJpbmcgd2hlbgoJdGhlIGJyYW5jaCBpbnN0cnVjdGlvbiBhcyBvcmlnaW5hbGx5IGJlZW4gbnVsbGlmaWVkLgoJaHBwYV9lbGZfcmVsb2MpOiAgQXZvaWQgdXNlbGVzcyBjYWxsIHRvIGJmZF9wdXRfMzIgKCkgaW4gdGhlCgljYXNlIG9mIG5vIGNvZGUgcmVvcmRlcmluZyBkdWUgdG8gYW4gTERPIGluc3RydWN0aW9uIGluIHRoZQoJZGVsYXkgc2xvdCBvZiB0aGUgYnJhbmNoLiAgTWFrZSBzdXJlIHRvIHJlbG9jYXRlIHRoZSBjb3JyZWN0CglpbnN0cnVjdGlvbi4gIERvIG5vdCBwZXJmb3JtIGluc3RydWN0aW9uIHJlb3JkZXJpbmcgZm9yIG1pbGxpY29kZQoJY2FsbHMuCgkoaHBwYV9lbGZfYnVpbGRfYXJnX3JlbG9jX3N0dWIpOiAgQ2hhbmdlIHRoZSByZWxvY2F0aW9uIHR5cGUKCXRvIFJfSFBQQV9TVFVCX0NBTExfMTcgd2hlbiBzcGVjaWFsIHByb2Nlc3NpbmcgbWlnaHQgYmUgbmVlZGVkLgoJKGhwcGFfZWxmX2J1aWxkX2xvbmdfYnJhbmNoX3N0dWIpOiBQcmV2ZW50IGNvZGUgcmVvcmRlcmluZyBvbgoJYSBjYWxsIGZyb20gYSBsaW5rZXIgc3R1YiB0byBhbm90aGVyIGxpbmtlciBzdHViIGFuZCBmb3IgbWlsbGljb2RlCgljYWxscy4gIERvIG5vdCB0cmFzaCB0aGUgcmV0dXJuIHJlZ2lzdGVyIGZvciBjYWxscyBmcm9tIG9uZSBsaW5rZXIKCXN0dWIgdG8gYSBzZWNvbmQgbGlua2VyIHN0dWIuCgoJKiBlbGYzMi1ocHBhLmM6IChlbGZfaHBwYV9ob3d0b190YWJsZSk6ICBQTEFCRUwgYW5kIERMVAoJcmVsb2NhdGlvbnMgYXJlIG5vdCBwYy1yZWxhdGl2ZS4KCgkqIGhwcGFfc3R1YnMuaDogKEJMRV9OX1hYWF8wXzMxKTogIE5ldyBpbnN0cnVjdGlvbiB1c2VkIGluCglsaW5rZXIgc3R1YiBjb2RlLiAKCShDT1BZXzJfMzEpOiAgTGlrZXdpc2UuCgpGcmkgRGVjICAzIDE4OjQwOjU4IDE5OTMgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AdHdlZWRsZWR1bWIuY3lnbnVzLmNvbSkKCgkqIGNvbmZpZy9zb2xhcmlzMi5taCAoSERFRklORVMpOiBSZW1vdmUgLURjb25zdD0KCSogaG9zdHMvc29sYXJpcy5oOiBJZiBub3QgX19HTlVDX18sIGRlZmluZSBjb25zdCBhcyBlbXB0eS4KClRodSBEZWMgIDIgMTU6NDM6MzIgMTk5MyAgSWFuIExhbmNlIFRheWxvciAgKGlhbkB0d2VlZGxlZHVtYi5jeWdudXMuY29tKQoKCSogZWNvZmYuYzogQWRkZWQgdmFyaW91cyBjYXN0cyBmb3IgMzIvNjQgYml0IGNyb3NzIHRhcmdldGluZy4KCShlY29mZl9ta29iamVjdF9ob29rKTogU2V0IFNFQ19TSEFSRURfTElCUkFSWSBmb3IgdGhlIC5yZWdpbmZvCglzZWN0aW9uIHNvIHRoYXQgdGhlIGxpbmtlciBpZ25vcmVzIGl0LgoJKiBlY29mZmxpbmsuYzogQWRkZWQgdmFyaW91cyBjYXN0cyBmb3IgMzIvNjQgYml0IGNyb3NzIHRhcmdldGluZy4KCShlY29mZl9hZGRfYnl0ZXMpOiBDaGFuZ2VkIG5lZWQgYXJndW1lbnQgdG8gc2l6ZV90LgoJKGJmZF9lY29mZl9kZWJ1Z19saW5rX290aGVyKTogQ2hlY2sgcmV0dXJuIHZhbHVlIG9mCgllY29mZl9hZGRfc3RyaW5nLgoKCSogbGliYmZkLWluLmggKG5ld19iZmQpOiBVc2Ugdm9pZCByYXRoZXIgdGhhbiBhbiBlbXB0eSBwYXJhbWV0ZXIKCWxpc3QuCgkqIGxpYmJmZC5oOiBSZWJ1aWx0LgoKCSogbGlibmxtLmggKHN0cnVjdCBubG1fb2JqX3RkYXRhKTogTmV3IGZpZWxkIGJhY2tlbmRfZGF0YS4KCShubG1fYmFja2VuZF9kYXRhLCBubG1fYWxwaGFfYmFja2VuZF9kYXRhKTogTmV3IGFjY2Vzc29yIG1hY3Jvcy4KCShzdHJ1Y3QgbmxtX2JhY2tlbmRfZGF0YSk6IE5ldyBmaWVsZCBub191bmluaXRpYWxpemVkX2RhdGEuCgkobmxtX25vX3VuaW5pdGlhbGl6ZWRfZGF0YSk6IE5ldyBhY2Nlc3NvciBtYWNyby4KCSogbmxtY29kZS5oIChubG1fY29tcHV0ZV9zZWN0aW9uX2ZpbGVfcG9zaXRpb25zKTogSGFuZGxlCglub191bmluaXRpYWxpemVkX2RhdGEuCgkobmxtX2V4dGVybmFsX3JlbG9jX2NvbXBhcmUpOiBTb3J0IHJlbG9jcyBieSBhZGRyZXNzIGZvciBhCglwYXJ0aWN1bGFyIHN5bWJvbCwgdG8gbWFrZSB0aGUgc29ydCBtb3JlIHN0YWJsZS4KCShubG1fd3JpdGVfb2JqZWN0X2NvbnRlbnRzKTogQ2FzdCB0aGUgYXJndW1lbnRzIHRvIHFzb3J0LiAgR2V0IHRoZQoJdmFsdWUgb2YgYSBkZWJ1Z2dpbmcgc3ltYm9sIHRoZSBzYW1lIHdheSB3ZSBnZXQgdGhlIHZhbHVlIG9mIGEKCW5vcm1hbCBzeW1ib2wuCgkqIG5sbTMyLWFscGhhLmM6IFZhcmlvdXMgY2hhbmdlcy4gIFdyaXRlIG91dCBHUCBhbmQgLmxpdGEgcmVsb2NzLgoJU2V0IG5vX3VuaW5pdGlhbGl6ZWRfZGF0YSB0byB0cnVlLgoJKiBubG0zMi1pMzg2LmMgKG5sbTMyX2kzODZfYmFja2VuZCksIG5sbTMyLXNwYXJjLmMKCShubG0zMl9zcGFyY19iYWNrZW5kKTogU2V0IG5vX3VuaW5pdGlhbGl6ZWRfZGF0YSBmaWVsZCBmYWxzZS4KCSogbmxtc3dhcC5oIChubG1fc3dhcF9maXhlZF9oZWFkZXJfb3V0KTogWmVybyBvdXQgZGVzdGluYXRpb24KCWJlZm9yZSBmaWxsaW5nIGl0IGluLgoKV2VkIERlYyAgMSAyMTo0Nzo1OCAxOTkzICBKZWZmcmV5IEEuIExhdyAgKGxhd0BzbmFrZS5jcy51dGFoLmVkdSkKCgkqIHNvbS5jIChzb21fc2VjdGlvbl90eXBlLCBzb21fZGVjb2RlX3N5bWNhbHNzKTogTmV3IGZ1bmN0aW9ucy4KCShzb21fZ2V0X3N5bWJvbF9pbmZvKTogVXNlIHRoZW0uCgkoc29tX3NsdXJwX3N5bWJvbF90YWJsZSk6IFNldCB0aGUgc2VjdGlvbiBvZiBjb21tb24gYW5kIHVuZGVmaW5lZAoJc3ltYm9scyBjb3JyZWN0bHkuCgpXZWQgRGVjICAxIDE0OjE1OjEwIDE5OTMgIEtlbiBSYWVidXJuICAocmFlYnVybkBjeWdudXMuY29tKQoKCSogZWxmY29kZS5oICh3cml0ZV9yZWxvY3MpOiBJbml0aWFsaXplIGxvY2FsIHZhciBMQVNUX1NZTV9JRFgsIHRvCgltYWtlIGdjYyBoYXBweS4KCgkqIG1pcHNic2QuYzogQ2hhbmdlcyBmcm9tIFJhbHBoIENhbXBiZWxsOgoJKG1pcHNfaG93dG9fdGFibGVfZXh0KTogTUlQU19SRUxPQ19MTzE2IHNob3VsZCB1c2UKCWNvbXBsYWluX292ZXJmbG93X2RvbnQuCgkoYW91dF9taXBzXypfdmVjKTogTWFrZSBuYW1lIHVzZSAiYS5vdXQiIGluc3RlYWQgb2YgImFvdXQiLCB0bwoJbWFrZSBnZGIgaGFwcHkuCgoJKiBiZmQuYyAoYmZkX2Vycm1zZ3MpOiBSZXdvcmQgaW52YWxpZC10YXJnZXQgbWVzc2FnZS4KCgkqIGNvbmZpZy5iZmQ6IEZvciBzcGFyYyotKi1jb2ZmLCB1c2Ugc3BhcmMtY29mZi4KCSogY29uZmlndXJlLmluOiBIYW5kbGUgc3BhcmNjb2ZmX3ZlYy4KCSogdGFyZ2V0cy5jIChzcGFyY2NvZmZfdmVjKTogRGVjbGFyZS4KCgkqIHJlbG9jLmMgKGJmZF9nZXRfcmVsb2Nfc2l6ZSk6IE5ldyBmdW5jdGlvbi4KCShzdHJ1Y3QgcmVsb2NfaG93dG9fdHlwZSk6IFVwZGF0ZSBkb2N1bWVudGF0aW9uIG9mIHNpemUgZmllbGQuCgpXZWQgRGVjICAxIDE0OjM5OjA1IDE5OTMgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AdHdlZWRsZWR1bWIuY3lnbnVzLmNvbSkKCgkqIG5sbTMyLWFscGhhLmM6IE5ldyBmaWxlOyBwcmVsaW1pbmFyeSBBbHBoYSBOZXRXYXJlIHN1cHBvcnQuCgkqIGNvbmZpZy5iZmQgKGFscGhhLSotbmV0d2FyZSopOiBOZXcgdGFyZ2V0OyB1c2UgYWxwaGEtbmxtLgoJKiBjb25maWcvYWxwaGEtbmxtLm10OiBOZXcgZmlsZS4KCSogY29uZmlndXJlLmluIChubG0zMl9hbHBoYV92ZWMpOiBOZXcgdmVjdG9yOyB1c2UgbmxtMzItYWxwaGEubywKCW5sbTMyLm8sIGFuZCBubG0uby4KCSogTWFrZWZpbGUuaW4gKEJGRDMyX0JBQ0tFTkRTKTogQWRkZWQgbmxtMzItYWxwaGEuby4KCShDRklMRVMpOiBBZGRlZCBubG0zMi1hbHBoYS5jLgoJUmVidWlsdCBkZXBlbmRlbmNpZXMuCgkqIHRhcmdldHMuYyAobmxtMzJfYWxwaGFfdmVjKTogRGVjbGFyZS4KCgkqIGxpYm5sbS5oIChzdHJ1Y3QgbmxtX2JhY2tlbmRfZGF0YSk6IE5ldyBmaWVsZHMKCW9wdGlvbmFsX3ByZWZpeF9zaXplLCBubG1fYmFja2VuZF9vYmplY3RfcCwgbmxtX3dyaXRlX3ByZWZpeCwKCW5sbV9zZXRfcHVibGljX3NlY3Rpb24sIG5sbV9nZXRfcHVibGljX29mZnNldC4gIFJlbW92ZWQgdW51c2VkCglubG1fd3JpdGVfcmVsb2MgZmllbGQuICBDaGFuZ2VkIG5sbV93cml0ZV9pbXBvcnQgdG8gcmVtb3ZlCgl1bm5lY2Vzc2FyeSBzeW1ib2wgYXJndW1lbnQuICBSZW5hbWVkIG5sbV93cml0ZV9leHRlcm5hbHMgdG8KCW5sbV93cml0ZV9leHRlcm5hbCwgYW5kIGNoYW5nZWQgY291bmQgYXJndW1lbnQgZnJvbSBiZmRfdm1hIHRvCgliZmRfc2l6ZV90eXBlLgoJKG5sbV9vcHRpb25hbF9wcmVmaXhfc2l6ZSwgbmxtX2JhY2tlbmRfb2JqZWN0X3BfZnVuYywKCW5sbV93cml0ZV9wcmVmaXhfZnVuYywgbmxtX3NldF9wdWJsaWNfc2VjdGlvbl9mdW5jLAoJbmxtX2dldF9wdWJsaWNfb2Zmc2V0X2Z1bmMpOiBOZXcgYWNjZXNzb3IgbWFjcm9zLgoJKG5sbV93cml0ZV9yZWxvY19mdW5jKTogUmVtb3ZlZC4KCShubG1fd3JpdGVfZXh0ZXJuYWxfZnVuYyk6IEFkanVzdGVkIGZvciBmaWVsZCByZW5hbWluZy4KCSogbmxtMzItaTM4Ni5jIChubG1faTM4Nl93cml0ZV9pbXBvcnQpOiBSZW5hbWVkIGZyb20KCW5sbV9pMzg2X3dyaXRlX3JlbG9jLiAgUmVtb3ZlZCBvbGQgbmxtX2kzODZfd3JpdGVfaW1wb3J0IHdoaWNoCglqdXN0IGNhbGxlZCBvbGQgbmxtX2kzODZfd3JpdGVfcmVsb2MuCgkobmxtX2kzODZfd3JpdGVfZXh0ZXJuYWwpOiBSZW5hbWVkIGZyb20gbmxtX2kzODZfd3JpdGVfZXh0ZXJuYWxzLgoJRGVjbGFyZWQuICBDaGFuZ2VkIHNlY29uZCBhcmd1bWVudCBmcm9tIGJmZF92bWEgdG8gYmZkX3NpemVfdHlwZS4KCShubG0zMl9pMzg2X2JhY2tlbmQpOiBBZGp1c3RlZCBmb3IgY2hhbmdlcyB0byBmaWVsZHMgYW5kIG5hbWVzLgoJKiBubG0zMi1zcGFyYy5jIChubG1fc3BhcmNfbWFuZ2xlX3JlbG9jcyk6IFJlbW92ZWQgdW51c2VkLAoJaWZkZWZmZWQgb3V0IGNvZGUuCgkobmxtX3NwYXJjX3dyaXRlX2ltcG9ydCk6IFJlbW92ZWQgc2Vjb25kIGFyZ3VtZW50LgoJKG5sbV9zcGFyY193cml0ZV9leHRlcm5hbCk6IFJlbmFtZWQgZnJvbQoJbmxtX3NwYXJjX3dyaXRlX2V4dGVybmFscy4gIENoYW5nZWQgc2Vjb25kIGFyZ3VtZW50IGZyb20gYmZkX3ZtYQoJdG8gYmZkX3NpemVfdHlwZS4KCShubG0zMl9zcGFyY19iYWNrZW5kKTogQWRqdXN0ZWQgZm9yIGNoYW5nZXMgdG8gZmllbGRzIGFuZCBuYW1lcy4KCSogbmxtY29kZS5oOiBSZW1vdmVkIHNvbWUgdW51c2VkIGNvZGUuCgkobmxtX29iamVjdF9wKTogRG9uJ3QgZGVzdHJveSB0ZGF0YSBwb2ludGVyLiAgQ2FsbAoJYmFja2VuZF9vYmplY3RfcCBmdW5jdGlvbiBpZiBpdCBleGlzdHMuCgkobmxtX3NsdXJwX3N5bWJvbF90YWJsZSk6IFJlbW92ZWQgdW51c2VkIHZhcmlhYmxlIHJjb3VudC4gIENhbGwKCXNldF9wdWJsaWNfc2VjdGlvbl9mdW5jIGlmIGl0IGV4aXN0cyBpbnN0ZWFkIG9mIGNoZWNraW5nCglOTE1fSElCSVQuCgkobmxtX2NvbXB1dGVfc2VjdGlvbl9maWxlX3Bvc2l0aW9ucyk6IEFjY291bnQgZm9yCglvcHRpb25hbF9wcmVmaXhfc2l6ZS4KCShubG1fd3JpdGVfb2JqZWN0X2NvbnRlbnRzKTogQWNjb3VudCBmb3Igb3B0aW9uYWxfcHJlZml4X3NpemUuCglSZW1vdmVkIHVzZWxlc3MgdmFyaWFibGUgd3JpdGVfcmVsb2NfZnVuYy4gIENoYW5nZWQgZGVjbGFyYXRpb24KCWFuZCBjYWxsIG9mIHdyaXRlX2ltcG9ydF9mdW5jLiAgQ2FsbCB3cml0ZV9wcmVmaXhfZnVuYyBpZiBpdAoJZXhpc3RzLiAgUmVtb3ZlZCB1bnVzZWQgdmFyaWFibGVzIGxlbiBhbmQgdGVtcC4gIENhbGwKCWdldF9wdWJsaWNfb2Zmc2V0X2Z1bmMgaWYgaXQgZXhpc3RzIHJhdGhlciB0aGFuIHNldHRpbmcgTkxNX0hJQklULgoJKiBubG1zd2FwLmg6IERlY2xhcmUgZnVuY3Rpb25zLgoKCSogYmZkLWluLmggKHVpbnQ2NF90eXBlTE9XLCB1aW50NjRfdHlwZUhJR0gpOiBGdWxseSBwYXJlbnRoZXNpemUKCWZvciBjbGFyaXR5LgoJKGZwcmludGZfdm1hLCBzcHJpbnRmX3ZtYSk6IFVzZSAlbHgsIG5vdCAleC4KCSogYmZkLWluMi5oOiBSZWJ1aWx0LgoJKiBob3N0cy9hbHBoYW9zZi5oICh1aW50NjRfdHlwZUxPVywgdWludDY0X3R5cGVISUdIKTogQ2FzdCByZXN1bHRzCgl0byB1bnNpZ25lZCBsb25nLgoKCSogY29uZmlnLmJmZDogRG9uJ3Qgc2V0IHRhcmdldDY0IGhlcmUsIGFzIHRoZSBzZXR0aW5nIGlzIGlnbm9yZWQuCgkqIGNvbmZpZ3VyZS5pbiAoZWNvZmZhbHBoYV9saXR0bGVfdmVjKTogU2V0IHRhcmdldDY0LgoKCSogY29uZmlnL2FscGhhb3NmLm10IChUREVGSU5FUyk6IFJlbW92ZWQ7IHNldHRpbmcgaG9zdCBwYXJhbWV0ZXJzCglpbiBUREVGSU5FUyBpcyB3cm9uZy4KCgkqIGNvZmYtYWxwaGEuYyAoYWxwaGFfZWNvZmZfZ2V0X3JlbG9jYXRlZF9zZWN0aW9uX2NvbnRlbnRzKToKCVJlbW92ZSB1bnVzZWQgdmFyaWFibGUgb3V0cHV0X3NlY3Rpb24uCgpUdWUgTm92IDMwIDE2OjQ1OjIzIDE5OTMgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AdHdlZWRsZWR1bWIuY3lnbnVzLmNvbSkKCgkqIGlyaXgtY29yZS5jOiBOZXcgZmlsZSBmb3IgSXJpeCA0IGFuZCBJcml4IDUgY29yZSBzdXBwb3J0LgoJRnVuY3Rpb25zIHRha2VuIG91dCBvZiBjb2ZmLW1pcHMuYy4gIEhhbmRsZSB2bWFwIHR5cGUgVk1BUEZJTEUuCgkqIGNvZmYtbWlwcy5jOiBJcml4IDQgY29yZSBmaWxlIHN1cHBvcnQgbW92ZWQgdG8gaXJpeC1jb3JlLmMuCgkqIHRhcmdldHMuYzogSWYgSVJJWF9DT1JFIGRlZmluZWQsIGluY2x1ZGUgaXJpeF9jb3JlX3ZlYyBpbgoJdGFyZ2V0X3ZlY3Rvci4KCSogY29uZmlnL2lyaXg0Lm1oIChIREVGSU5FUyk6IEFkZCAtRElSSVhfQ09SRS4KCShIREVQRklMRVMpOiBEZWZpbmUgdG8gYmUgaXJpeC1jb3JlLm8uCgkqIGNvbmZpZy9pcml4NS5taCAoSERFRklORVMpOiBEZWZpbmUgdG8gYmUgLURJUklYX0NPUkUuCgkoSERFUEZJTEVTKTogRGVmaW5lIHRvIGJlIGlyaXgtY29yZS5vLgoJKiBNYWtlZmlsZS5pbiAoT1BUSU9OQUxfQkFDS0VORFMpOiBBZGRlZCBpcml4LWNvcmUuby4gIFJlbW92ZWQKCXNjbzUtY29yZS5vLCB3aGljaCBubyBsb25nZXIgZXhpc3RzLgoJKENGSUxFUyk6IEFkZGVkIGFsbCAqLWNvcmUuYyBmaWxlcy4KCVJlYnVpbHQgZGVwZW5kZW5jaWVzLgoKV2VkIE5vdiAyNCAwMjowMjo0MSAxOTkzICBJYW4gTGFuY2UgVGF5bG9yICAoaWFuQHR3ZWVkbGVkdW1iLmN5Z251cy5jb20pCgoJKiBlbGZjb2RlLmggKG1hcF9wcm9ncmFtX3NlZ21lbnRzKTogUmVzdG9yZSBjaGVjayBvZiBmaWxlX3NpemUgIT0KCW1lbV9zaXplLCBidXQgb25seSBpZiBTSFRfUFJPR0JJVFMuCgoJKiBlY29mZmxpbmsuYzogTmV3IGZpbGUgdG8gaG9sZCBFQ09GRiBkZWJ1ZyBpbmZvcm1hdGlvbiBsaW5raW5nCglyb3V0aW5lcy4KCSogZWNvZmYuYyAoZWNvZmZfY2xlYXJfb3V0cHV0X2ZsYWdzLCBlY29mZl9yZWwsIGVjb2ZmX2R1bXBfc2VjbGV0LAoJZWNvZmZfYWRkX3N0cmluZywgZWNvZmZfZ2V0X2RlYnVnKTogUmVtb3ZlZC4gIEZ1bmN0aW9uYWxpdHkgbm93IGluCgllY29mZmxpbmsuYy4KCShlY29mZl9nZXRfZXh0ciwgZWNvZmZfc2V0X2luZGV4KTogTmV3IGZ1bmN0aW9ucy4KCShlY29mZl9zbHVycF9zeW1ib2xpY19pbmZvKTogRG9uJ3Qgc2F2ZSByYXdfc2l6ZS4KCShlY29mZl9iZmRfc2VjbGV0X2xpbmspOiBSZXdyb3RlIHRvIHVzZSBlY29mZmxpbmsuYyBmdW5jdGlvbnMuCgkoZWNvZmZfY29tcHV0ZV9zZWN0aW9uX2ZpbGVfcG9zaXRpb25zKTogRG9uJ3Qgc2V0IEVYRUNfUCBqdXN0CgliZWNhdXNlIHRoZXJlIGlzIGEgc3RhcnQgYWRkcmVzcy4KCShlY29mZl93cml0ZV9vYmplY3RfY29udGVudHMpOiBIYW5kbGUgZXh0ZXJuYWwgc3ltYm9scyBoZXJlLiAgVXNlCgllY29mZmxpbmsuYyBmdW5jdGlvbnMgdG8gd3JpdGUgb3V0IGRlYnVnZ2luZyBpbmZvcm1hdGlvbi4KCSogZWxmMzItbWlwcy5jIChtaXBzX2VsZl9yZWFkX2Vjb2ZmX2luZm8sIG1pcHNfZWxmX2dldF9leHRyLAoJbWlwc19lbGZfc2V0X2luZGV4KTogTmV3IGZ1bmN0aW9ucy4KCShtaXBzX2VsZl9zZWNsZXRfbGluayk6IERpc2NhcmQgZW1wdHkgc2VjdGlvbnMsIHRoZSAub3B0aW9ucwoJc2VjdGlvbiBhbmQgLmdwdGFiIHNlY3Rpb25zLiAgSGFuZGxlIGxpbmtpbmcgLm1kZWJ1ZyBzZWN0aW9uLgoJKiBsaWJlY29mZi5oIChlY29mZl9kYXRhX3R5cGUpOiBSZW1vdmVkIHJhd19zaXplIGFuZCBpZmRiYXNlLgoJKiBsaWJlbGYuaCAoZWxmX3N5bWJvbF90eXBlKTogQWRkZWQgbWlwc19leHRyIHRvIHRjX2RhdGEgdW5pb24uCgkqIGJmZC1pbi5oOiBBZGRlZCBwcm90b3R5cGVzIGZvciByb3V0aW5lcyBpbiBlY29mZmxpbmsuYyAoc29tZSBhcmUKCWNhbGxlZCBieSBnYXMsIHNvIHRoZXkgYXJlIHB1YmxpYykuCgkqIGJmZC1pbjIuaDogUmVidWlsdC4KCSogTWFrZWZpbGUuaW4gKEJGRF9MSUJTKTogQWRkZWQgZWNvZmZsaW5rLm8uCgkoQ0ZJTEVTKTogQWRkZWQgZWNvZmZsaW5rLmMuCgkoZWNvZmZsaW5rLm8pOiBOZXcgdGFyZ2V0LiAgUmVidWlsdCBkZXBlbmRlbmNpZXMuCgpNb24gTm92IDIyIDIyOjI2OjQyIDE5OTMgIEplZmZyZXkgQS4gTGF3ICAobGF3QHNuYWtlLmNzLnV0YWguZWR1KQoKCSogc29tLmMgKGhwcGFfb2JqZWN0X3ApOiBBbHNvIHJlY29nbml6ZSBTSEFSRURfTUFHSUNfQ05YIGFzCglhIHZhbGlkIG1hZ2ljIG51bWJlciBpZiBpdCdzIGJlZW4gZGVmaW5lZC4KCk1vbiBOb3YgMjIgMTQ6MTc6MzYgMTk5MyAgSWFuIExhbmNlIFRheWxvciAgKGlhbkB0d2VlZGxlZHVtYi5jeWdudXMuY29tKQoKCSogZWNvZmYuYyAoZWNvZmZfbWtvYmplY3QpOiBEb24ndCBjcmVhdGUgLnNjb21tb24gc2VjdGlvbjsgbGlua2VyCglubyBsb25nZXIgcmVxdWlyZXMgaXQuCgkoZWNvZmZfYmZkX3NlY2xldF9saW5rLCBlY29mZl9zaXplb2ZfaGVhZGVycywKCWVjb2ZmX3dyaXRlX29iamVjdF9jb250ZW50cyk6IERvbid0IHRyZWF0IC5zY29tbW9uIHNlY3Rpb24KCXNwZWNpYWxseS4KCk1vbiBOb3YgMjIgMTA6NTQ6MjcgMTk5MyAgRnJlZCBGaXNoICAoZm5mQGN5Z251cy5jb20pCgoJTWVyZ2VkIGNoYW5nZXMgZnJvbSBrZXZAc3B1ZHMuZ2VnLm1vdC5jb20gKEtldmluIEEuIEJ1ZXR0bmVyKToKCSogY29uZmlnL2RlbHRhODgubWggKEhERUZJTkVTKTogRGVmaW5lIHRoaXMgdG8gYmUgLURQVFJBQ0VfQ09SRS4KCSogY29uZmlnL2RlbHRhODgubWggKEhERVBGSUxFUyk6IERlZmluZWQgdG8gYmUgcHRyYWNlLWNvcmUuby4KCSogcHRyYWNlLWNvcmUuYzogIE5ldyBmaWxlIGZvciBkZWFsaW5nIHdpdGggY29yZSBmaWxlcyB3aXRoCglzdGFydCB3aXRoIHRoZSBwdHJhY2VfdXNlciBzdHJ1Y3R1cmUgZm91bmQgb24gQkNTIGNvbXBsaWFudCBzeXN0ZW1zLgoJKiB0YXJnZXRzLmMgKHB0cmFjZV9jb3JlX3ZlYyk6ICBOZXcgdmVjdG9yLgoKTW9uIE5vdiAyMiAwMjozMzoxMiAxOTkzICBKZWZmcmV5IEEuIExhdyAgKGxhd0BzbmFrZS5jcy51dGFoLmVkdSkKCgkqIE1pbmltYWwgc3VwcG9ydCBmb3IgcmVhZGluZyBTT00gZml4dXAgc3RyZWFtcy4gIEFsbG93cwoJb2JqZHVtcCAtciB0byBkbyBzb21ldGhpbmcgcmVhc29uYWJsZS4KCSogc29tLmMgKHNvbV9nZXRfcmVsb2NfdXBwZXJfYm91bmQpOiBJbXBsZW1lbnQuCgkoc29tX2Nhbm9uaWNhbGl6ZV9yZWxvYyk6IEltcGxlbWVudC4KCShzb21fc2V0X3JlbG9jX2luZm8sIHNvbV9zbHVycF9yZWxvY190YWJsZSk6IE5ldyBmdW5jdGlvbnMuCgpTdW4gTm92IDIxIDEzOjQ2OjU1IDE5OTMgIEtlbiBSYWVidXJuICAocmFlYnVybkBjYW1icmlkZ2UuY3lnbnVzLmNvbSkKCgkqIGhvc3RzL2x5bnguaCAoRlBSSU5URl9BTFJFQURZX0RFQ0xBUkVEKTogRGVmaW5lLgoJKiBob3N0cy9zcGFyY2x5bnguaDogSW5jbHVkZSBseW54LmggaW5zdGVhZCBvZiBkdXBsaWNhdGluZyBpdC4KCkZyaSBOb3YgMTkgMTQ6MzQ6MDQgMTk5MyAgSWFuIExhbmNlIFRheWxvciAgKGlhbkB0d2VlZGxlZHVtYi5jeWdudXMuY29tKQoKCSogY29mZi1hMjlrLmMgKGEyOWtfcmVsb2MpOiBGb3IgUl9JUkVMLCBkb24ndCBsZWZ0IHNoaWZ0CglzaWduZWRfdmFsdWUgYmVmb3JlIHNpZ24gZXh0ZW5kaW5nIGl0LiAgRG9uJ3Qgc3VidHJhY3Qgb3V0CglyZWxvY19lbnRyeS0+YWRkcmVzcy4gIFRoaXMgbWFrZXMgaXQgY29tcGF0aWJsZSB3aXRoIHdoYXQgZ2FzIGlzCglnZW5lcmF0aW5nLgoKCSogZWxmY29kZS5oIChlbGZfZmFrZV9zZWN0aW9ucyk6IEFjY2VwdCAuc2JzcyBhcyB0aGUgbmFtZSBmb3IgYQoJU0hUX05PQklUUyBzZWN0aW9ucy4KCShtYXBfcHJvZ3JhbV9zZWdtZW50cyk6IERvbid0IGxlYXZlIHRoZSBsb29wIGFmdGVyIHRoZSBmaXJzdAoJU0hUX05PQklUUyBzZWN0aW9uLgoJKGFzc2lnbl9maWxlX3Bvc2l0aW9uc19leGNlcHRfcmVsb2NzKTogT25seSBmb3JjZSBzaF9vZmZzZXQgYW5kCglzaF9hZGRyIHRvIG1hdGNoIG1vZHVsbyBtYXhwYWdlc2l6ZSBmb3IgYSBzZWN0aW9uIHdoaWNoIGlzIG5vdAoJU0hUX05PQklUUy4gIENoYW5nZWQgdGhlIG1ldGhvZCB1c2VkIHRvIGZvcmNlIHBhZ2UgYWxpZ25tZW50IGFmdGVyCglhIFNIVF9OT0JJVFMgc2VjdGlvbiB0byBvbmx5IGRvIGl0IGZvciB0aGUgbGFzdCBzdWNoIGNvbnNlY3V0aXZlCglzZWN0aW9uLCBhbmQgdG8gcmVhbGx5IGZvcmNlIHBhZ2UgYWxpZ25tZW50LgoKRnJpIE5vdiAxOSAwNDowMjowMSAxOTkzICBLZW4gUmFlYnVybiAgKHJhZWJ1cm5AY2FtYnJpZGdlLmN5Z251cy5jb20pCgoJKiBjb2ZmY29kZS5oIChjb2ZmX3NsdXJwX3N5bWJvbF90YWJsZSk6IFByaW50IG1vcmUgdmVyYm9zZSBtZXNzYWdlCglpbiB0aGUgY2FzZSBvZiBhbiB1bmtub3duIChvciB1bmhhbmRsZWQpIHN0b3JhZ2UgY2xhc3MuCgoJKiBjb25maWcvaTM4Ni1seW54Lm10IChUREVGSU5FUyk6IEZQUklOVEZfQUxSRUFEWV9ERUNMQVJFRCBzaG91bGQKCW5vdCBiZSBkZWZpbmVkIGhlcmUsIHNpbmNlIGl0IGlzIGEgaG9zdCBhdHRyaWJ1dGUsIG5vdCBhIHRhcmdldAoJb25lLgoJKiBjb25maWcvbTY4ay1seW54Lm10LCBjb25maWcvc3BhcmMtbHlueC5tdDogRGl0dG8uCgoJKiBjb2ZmY29kZS5oIChjb2ZmX2JmZF9yZWxvY190eXBlX2xvb2t1cCk6IERvbid0IGRlZmluZSBpZiBhbHJlYWR5CglkZWZpbmVkLgoKCSogY29mZi1zcGFyYy5jOiBEZWZpbmUgc29tZSByZWxvY2F0aW9ucywgYmFzZWQgb24gRUxGIHJlbG9jYXRpb25zLgoJKGVudW0gcmVsb2NfdHlwZSwgYmZkX2NvZmZfZ2VuZXJpY19yZWxvYywgY29mZl9zcGFyY19ob3d0b190YWJsZSwKCXN0cnVjdCBjb2ZmX3JlbG9jX21hcCwgc3BhcmNfcmVsb2NfbWFwLAoJY29mZl9zcGFyY19yZWxvY190eXBlX2xvb2t1cCk6IEJvcnJvd2VkIGZyb20gZWxmMzItc3BhcmMuYyBhbmQKCWVsZi5jLCByZW5hbWVkLgoJKGNvZmZfYmZkX3JlbG9jX3R5cGVfbG9va3VwKTogRGVmaW5lIHRvIGJlIGNvZmZfc3BhcmNfcmVsb2NfLi4uLgoJKHJ0eXBlMmhvd3RvKTogSW5kZXggaW50byBjb2ZmX3NwYXJjX2hvd3RvX3RhYmxlIHVzaW5nCglkc3QtPnJfdHlwZS4KClRodSBOb3YgMTggMTE6NDU6MzkgMTk5MyAgSWFuIExhbmNlIFRheWxvciAgKGlhbkB0d2VlZGxlZHVtYi5jeWdudXMuY29tKQoKCSogY29uZmlnLmJmZCAobWlwcyotKi1pcml4NSopOiBOZXcgdGFyZ2V0OyB1c2UgbWlwc2JlbGYuCgkqIGNvbmZpZ3VyZS5ob3N0IChtaXBzLXNnaS1pcml4NSopIE5ldyBob3N0OyB1c2UgaXJpeDUgKG5vCglob3N0cy9pcml4NS5oIGNyZWF0ZWQ7IGp1c3QgdXNlIHN0ZC1ob3N0LmgpLgoJKiBjb25maWcvaXJpeDUubWg6IE5ldyBmaWxlOyBsaWtlIGlyaXg0Lm1oLCBidXQgZG9uJ3QgdXNlIC1HIG9yCgktbG1hbGxvYy4KCSogTWFrZWZpbGUuaW46IFJlYnVpbHQgZGVwZW5kZW5jaWVzLgoKCSogZWNvZmZzd2FwLmg6IENoYW5nZWQgdHlwZSBvZiBpbnRlcm5hbCBwb2ludGVycyBmb3Igc3dhcCBvdXQKCWZ1bmN0aW9ucyB0byBjb25zdCAqLgoKCSogZWxmMzItbWlwcy5jIChtaXBzX2VsZl9nb3QxNl9yZWxvYyk6IE5ldyBmdW5jdGlvbi4gIEhhbmRsZSBHT1QxNgoJY29ycmVjdGx5IGZvciBhc3NlbWJsZXIsIGJ1dCBsaW5rZXIgc3VwcG9ydCBub3QgaW1wbGVtZW50ZWQuCgkoZWxmX21pcHNfaG93dG9fdGFibGUpOiBVc2UgbWlwc19lbGZfZ290MTZfcmVsb2MgZm9yIEdPVDE2LgoJKG1pcHNfZWxmX3N5bV9pc19nbG9iYWwpOiBOZXcgZnVuY3Rpb247IGF0IGxlYXN0IG9uIElyaXggNSwgYWxsCglub24gc2VjdGlvbiBzeW1ib2xzIGFyZSBjb25zaWRlcmVkIGdsb2JhbC4KCShlbGZfYmFja2VuZF9zeW1faXNfZ2xvYmFsKTogRGVmaW5lLgoJKG1pcHNfZWxmX2ZpbmFsX3dyaXRlX3Byb2Nlc3NpbmcpOiBOZXcgZnVuY3Rpb24uICBTZXQgdGhlIE1JUFMKCWFyY2hpdGVjdHVyZSBsZXZlbCBjb3JyZWN0bHkuCgkoZWxmX2JhY2tlbmRfZmluYWxfd3JpdGVfcHJvY2Vzc2luZyk6IERlZmluZS4KCShtaXBzX2VsZl9zZWN0aW9uX2Zyb21fc2hkcik6IEhhbmRsZSBTSFRfTUlQU19PUFRJT05TLgoJKG1pcHNfZWxmX2Zha2Vfc2VjdGlvbnMpOiBTZXQgZW50c2l6ZSBvZiAubWRlYnVnIG9yIC5yZWdpbmZvCglzZWN0aW9uIHRvIDEuICBIYW5kbGUgLm9wdGlvbnMgc2VjdGlvbi4KCShtaXBzX2VsZl9hY29tX3NlY3Rpb24sIG1pcHNfZWxmX2Fjb21fc3ltYm9sLAoJbWlwc19lbGZfYWNvbV9zeW1ib2xfcHRyKTogTmV3IHN0YXRpYyB2YXJpYWJsZXMsIHVzZWQgdG8gYnVpbGQgYQoJZ2VuZXJpYyAuYWNvbW1vbiBzZWN0aW9uIHRvIGhvbGQgU0hOX01JUFNfQUNPTU1PTiBzeW1ib2xzLgoJKG1pcHNfZWxmX3N5bWJvbF9wcm9jZXNzaW5nKTogSGFuZGxlIFNITl9NSVBTX0FDT01NT04gc3ltYm9scyBieQoJcHV0dGluZyB0aGVtIGFsbCBpbiBhIGdsb2JhbCAuYWNvbW1vbiBzZWN0aW9uLgoKCSogZWxmY29kZS5oIChiZmRfc2VjdGlvbl9mcm9tX3NoZHIpOiBEb24ndCBkdW1wIGNvcmUgaWYgdGFyZ2V0CglzZWN0aW9uIGhhcyBubyBFTEYgc2VjdGlvbiBkYXRhLgoJKGVsZl9tYWtlX3NlY3Rpb25zKTogU2V0IGFkZHJhbGlnbiBvZiByZWxvYyBzZWN0aW9uIHRvIDQuCgkoZWxmX2Zha2Vfc2VjdGlvbnMpOiBMaWtld2lzZS4KCShtYXBfcHJvZ3JhbV9zZWdtZW50cyk6CURvbid0IGNvbnNpZGVyIHNlY3Rpb24gMC4KCShhc3NpZ25fZmlsZV9wb3NpdGlvbnNfZXhjZXB0X3JlbG9jcyk6IERvbid0IGNvbnNpZGVyIHNlY3Rpb24gMC4KCUluIHRoZSBtYWluIGxvb3AsIHNraXAgdGhlIHN5bXRhYiBhbmQgc3RydGFiIHNlY3Rpb25zLCBzaW5jZSB0aGVpcgoJcG9zaXRpb25zIGFyZSBzZXQgZWxzZXdoZXJlLgoJKHN3YXBfb3V0X3N5bXMpOiBTZXQgYWRkcmFsaWduIG9mIHN5bXRhYiBzZWN0aW9uIHRvIDQuICBTZXQKCWFkZHJhbGlnbiBvZiBzdHJ0YWIgc2VjdGlvbnMgdG8gMS4KCShhc3NpZ25fZmlsZV9wb3NpdGlvbnNfZm9yX3JlbG9jcyk6IERvbid0IGNvbnNpZGVyIHNlY3Rpb24gMC4KCSh3cml0ZV9vYmplY3RfY29udGVudHMpOiBEb24ndCB3cml0ZSBvdXQgc2VjdGlvbiAwLgoKCSogbGliZWxmLmggKHN0cnVjdCBlbGZfYmFja2VuZF9kYXRhKTogQWRkZWQgZmllbGRzCgllbGZfYmFja2VuZF9zeW1faXNfZ2xvYmFsIGFuZCBlbGZfYmFja2VuZF9maW5hbF93cml0ZV9wcm9jZXNzaW5nLgoJKiBlbGYzMi10YXJnZXQuaCAoZWxmMzJfYmVkKTogQWRkZWQgY29ycmVzcG9uZGluZyBpbml0aWFsaXplcnMuCgkqIGVsZjY0LXRhcmdldC5oIChlbGY2NF9iZWQpOiBMaWtld2lzZS4KCSogZWxmY29kZS5oIChzeW1faXNfZ2xvYmFsKTogVGFrZSBhYmZkIGFyZ3VtZW50LiAgQ2FsbAoJZWxmX2JhY2tlbmRfc3ltX2lzX2dsb2JhbCBpZiBpdCBpcyBub3QgTlVMTC4KCShlbGZfbWFwX3N5bWJvbHMpOiBQYXNzIGFiZmQgdG8gc3ltX2lzX2dsb2JhbC4KCSh3cml0ZV9vYmplY3RfY29udGVudHMpOiBDYWxsIGVsZl9iYWNrZW5kX2ZpbmFsX3dyaXRlX3Byb2Nlc3NpbmcKCWlmIGl0IGlzIGRlZmluZWQuCgpXZWQgTm92IDE3IDE4OjQzOjI4IDE5OTMgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AdHdlZWRsZWR1bWIuY3lnbnVzLmNvbSkKCgkqIGxpYmVjb2ZmLmg6IEluY2x1ZGUgY29mZi9lY29mZi5oLgoJKHN0cnVjdCBlY29mZl9iYWNrZW5kX2RhdGEpOiBNb3ZlIGV4dGVybmFsIGRlYnVnZ2luZyBpbmZvcm1hdGlvbgoJZmllbGRzIGludG8gYSBzaW5nbGUgZmllbGQgcG9pbnRpbmcgdG8gYW4gZWNvZmZfZGVidWdfc3dhcAoJc3RydWN0dXJlLgoJKGVjb2ZmX2RhdGFfdHlwZSk6IE1vdmUgZGVidWdnaW5nIGluZm9ybWF0aW9uIGZpZWxkcyBpbnRvIGEgc2luZ2xlCglmaWVsZCBwb2ludGluZyB0byBhbiBlY29mZl9kZWJ1Z19pbmZvIHN0cnVjdHVyZS4KCSogY29mZi1hbHBoYS5jLCBjb2ZmLW1pcHMuYywgZWNvZmYuYzogQ29ycmVzcG9uZGluZyBjaGFuZ2VzLgoKV2VkIE5vdiAxNyAxNzozODo1OCAxOTkzICBTZWFuIEVyaWMgRmFnYW4gIChzZWZAY3lnbnVzLmNvbSkKCgkqIG5sbXN3YXAuaDogTmV3IGZpbGUgdG8gc3dhcCBmaXhlZCBoZWFkZXIuICBJbmNsdWRlZCBieSBOTE0KCWJhY2tlbmRzLgoJKiBsaWJubG0uaCAoc3RydWN0IHJlbG9jX2FuZF9zZWMpOiBEZWZpbmUuCgkoc3RydWN0IG5sbV9iYWNrZW5kX2RhdGEpOiBBZGQgZmllbGRzIGZpeGVkX2hlYWRlcl9zaXplLAoJbmxtX3JlYWRfaW1wb3J0LCBubG1fd3JpdGVfaW1wb3J0LCBubG1fc3dhcF9maGRyX2luLAoJbmxtX3N3YXBfZmhkcl9vdXQuCgkobmxtX2ZpeGVkX2hlYWRlcl9zaXplLCBubG1fcmVhZF9pbXBvcnRfZnVuYywKCW5sbV93cml0ZV9pbXBvcnRfZnVuYywgbmxtX3N3YXBfZml4ZWRfaGVhZGVyX2luX2Z1bmMsCglubG1fc3dhcF9maXhlZF9oZWFkZXJfb3V0X2Z1bmMsIG5sbV93cml0ZV9leHRlcm5hbF9mdW5jKTogTmV3CglhY2Nlc3NvciBtYWNyb3MuCgkqIG5sbWNvZGUuaDogVXNlIG5ldyBmdW5jdGlvbnMuCgkqIG5sbTMyLWkzODYuYzogUHJvdmlkZSBuZXcgZnVuY3Rpb25zLgoJKiBubG0zMi1zcGFyYy5jOiBOZXcgZmlsZTsgU1BBUkMgTkxNIGJhY2tlbmQuCgpXZWQgTm92IDE3IDEzOjU2OjEwIDE5OTMgIFN0YW4gU2hlYnMgIChzaGVic0BydGwuY3lnbnVzLmNvbSkKCgkqIGkzODZseW54LmMgKHN3YXBfc3RkX3JlbG9jX2luLCBzd2FwX2V4dF9yZWxvY19pbik6IElnbm9yZQoJZ2FyYmFnZSBiaXRzIGFwcGVhcmluZyBpbiB0aGUgdXBwZXIgZW5kIG9mIHN5bWJvbG51bXMuCgoJKiBjb25maWcvc3BhcmMtbHlueC5tdCAoVERFRklORVMpOiBBZGQgLURGUFJJTlRGX0FMUkVBRFlfREVDTEFSRUQuCgpUdWUgTm92IDE2IDE3OjAzOjQxIDE5OTMgIFN0dSBHcm9zc21hbiAgKGdyb3NzbWFuIGF0IGN5Z251cy5jb20pCgoJKiBseW54LWNvcmUuYyAobHlueF9jb3JlX2ZpbGVfcCk6ICBDaGFuZ2UgYmZkX3phbGxvYyB0byBiZmRfYWxsb2MuCgkqIG02OGtseW54LmM6ICBEZWZpbmUgY29yZSBmaWxlIG1hY3Jvcy4KCSogaG9zdHMvaTM4Nmx5bnguaCwgaG9zdHMvbTY4a2x5bnguaCwgaG9zdHMvbHlueC5oOiAgTW92ZSBhbGwKCW5vbi1hcmNoaXRlY3R1cmUgc3BlY2lmaWMgc3R1ZmYgaW50byBseW54LmguCgpUdWUgTm92IDE2IDE1OjQ1OjU0IDE5OTMgIEppbSBLaW5nZG9uICAoa2luZ2RvbkBsaW90aC5jeWdudXMuY29tKQoKCSogaTM4NmxpbnV4LmM6IERlZmluZSBuZXcgbWFjcm8gWk1BR0lDX0RJU0tfQkxPQ0tfU0laRSB0byAxMDI0LCBhbmQKCWNoYW5nZSBQQUdFX1NJWkUgdG8gNDA5Ni4KCk1vbiBOb3YgMTUgMTE6NDg6MDggMTk5MyAgS2VuIFJhZWJ1cm4gIChyYWVidXJuQHJ0bC5jeWdudXMuY29tKQoKCSogTWFrZWZpbGUuaW4gKGRpc3RzdHVmZik6IE5ldyB0YXJnZXQuCgoJKiBWRVJTSU9OOiBVcGRhdGVkLgoKU3VuIE5vdiAxNCAyMzozMzowMSAxOTkzICBKZWZmcmV5IEEuIExhdyAgKGxhd0BzbmFrZS5jcy51dGFoLmVkdSkKCgkqIHNvbS5jIChzb21fb2JqZWN0X3NldHVwKTogRG8gbm90IGNyZWF0ZSBkdW1teSAiLnRleHQiLCAiLmRhdGEiLAoJYW5kICIuYnNzIiBzZWN0aW9ucy4KCShzZXR1cF9zZWN0aW9ucyk6IERvIG5vdCBzZXQgU0VDX0hBU19DT05URU5UUyBpZiBhIHNlY3Rpb24ncyBzaXplCglpcyB6ZXJvLiAgUmVjb2duaXplIEJTUyB0eXBlIHNlY3Rpb25zIGFuZCB0dXJuIG9mZiBTRUNfTE9BRCBhbmQKCVNFQ19EQVRBIChzbyBiaW51dGlscy9zaXplIHdvcmtzKS4gIFNldCB0aGUgY29ycmVjdCB2YWx1ZSBmb3IKCWEgc2VjdGlvbidzIF9yYXdfc2l6ZS4KCShzb21fc2x1cnBfc3ltYm9sX3RhYmxlKTogUHJvZ3JhbSBlbnRyeSBwb2ludHMsIGFuZCBtaWxsaWNvZGUgYXJlCglhbHNvIGZ1bmN0aW9ucy4gIE1hcmsgdGhlbSBhcyBzdWNoLiAgQWxzbyBtYXJrIEwkKiBzeW1ib2xzIGFzCglkZWJ1Z2dpbmcgc3ltYm9scy4KCgkqIGJmZC1pbjIuaDogUmVidWlsdC4KClNhdCBOb3YgMTMgMTU6Mjc6MTUgMTk5MyAgSmVmZnJleSBBLiBMYXcgIChsYXdAc25ha2UuY3MudXRhaC5lZHUpCgoJKiBzb20uYyAoc29tX2JmZF9yZWxvY190eXBlX2xvb2t1cCk6IEFkZCBtaXNzaW5nIHByb3RvdHlwZS4gIFJldHVybnMKCWEgcG9pbnRlciB0byBjb25zdGFudCBkYXRhLiAgRGVsZXRlIGJvZ3VzICNkZWZpbmUgd2hpY2ggbWFkZSB0aGUgCglmdW5jdGlvbiB1c2VsZXNzLgoKCSogc29tLmMgKHNvbV9wcmVwX2Zvcl9maXh1cHMpOiBOZXcgZnVuY3Rpb24uCgkoc29tX3dyaXRlX2ZpeHVwcyk6IE5ldyBmdW5jdGlvbi4KCShzb21fd3JpdGVfc3BhY2Vfc3RyaW5ncyk6IE5ldyBmdW5jdGlvbi4KCShzb21fd3JpdGVfc3ltYm9sX3N0cmluZ3MpOiBOZXcgZnVuY3Rpb24uCgkoc29tX2JlZ2luX3dyaXRpbmcpOiBOZXcgZnVuY3Rpb24uCgpGcmkgTm92IDEyIDE1OjI5OjM2IDE5OTMgIEplZmZyZXkgQS4gTGF3ICAobGF3QHNuYWtlLmNzLnV0YWguZWR1KQoKCSogc29tLmMgKHNvbV93cml0ZV9vYmplY3RfY29udGVudHMpOiBEbyBub3QgYWJvcnQuICBGbGVzaCBvdXQuCgkoc29tX3NldF9zZWN0aW9uX2NvbnRlbnRzKTogRG8gbm90IGFib3J0LiAgRmxlc2ggb3V0LgoKCSogc29tLmMgKHNvbV93cml0ZV9oZWFkZXJzKTogTmV3IGZ1bmN0aW9uLgoJKHNvbV9wcmVwX2hlYWRlcnMpOiBOZXcgZnVuY3Rpb24uCgkoc29tX2J1aWxkX2FuZF93cml0ZV9zeW1ib2xfdGFibGUpOiBOZXcgZnVuY3Rpb24uCgoJKiBzb20uYyAoc29tX3NpemVvZl9oZWFkZXJzKTogQWRkIG1pc3NpbmcgcHJvdG90eXBlLgoJKHNvbV9zZXRfYXJjaF9tYWNoKTogRG8gbm90IGFib3J0LgoKCSogc29tLmMgKHNvbV9jb3VudF9zcGFjZXMpOiBOZXcgZnVuY3Rpb24uCgkoc29tX2NvdW50X3N1YnNwYWNlcyk6IE5ldyBmdW5jdGlvbi4KCShjb21wYXJlX3N5bXMpOiBOZXcgZnVuY3Rpb24uCgkoc29tX2NvbXB1dGVfY2hlY2tzdW0pOiBOZXcgZnVuY3Rpb24uCgoJKiBzb20uYyAoaHBwYV9zb21fZ2VuX3JlbG9jX3R5cGUpOiBOZXcgZnVuY3Rpb24uCgkoc29tX2JmZF9yZWxvY190eXBlX2xvb2t1cCk6IE5ldyBmdW5jdGlvbi4KCgkqIHNvbS5jICh0cnlfcHJldl9maXh1cCk6IE5ldyBmdW5jdGlvbi4KCShzb21fcmVsb2Nfc2tpcCk6IE5ldyBmdW5jdGlvbi4KCShzb21fcmVsb2NfYWRkZW5kKTogTmV3IGZ1bmN0aW9uLgoJKHNvbV9yZWxvY19jYWxsKTogTmV3IGZ1bmN0aW9uLgoKCSogc29tLmMgKHNvbV9pbml0aWFsaXplX3JlbG9jX3F1ZXVlKTogTmV3IGZ1bmN0aW9uLgoJKHNvbV9yZWxvY19xdWV1ZV9pbnNlcnQpOiBMaWtld2lzZS4KCShzb21fcmVsb2NfcXVldWVfZml4KTogTGlrZXdpc2UuCgkoc29tX3JlbG9jX3F1ZXVlX2ZpbmQpOiBMaWtld2lzZS4KCgkqIHNvbS5jIChzb21faHBwYV9ob3d0b190YWJsZSk6IFNPTSBob3d0byByZWxvY2F0aW9uIHRhYmxlLgoJKGhwcGFfc29tX3JlbG9jKTogTmV3IGZ1bmN0aW9uLgoKCSogc29tLmMgKHN0cnVjdCByZWxvY19xdWV1ZSk6IE5ldyBzdHJ1Y3R1cmUgdG8ga2VlcCB0cmFjayBvZgoJdGhlIGxhc3QgZm91ciBtdWx0aWJ5dGUgcmVsb2NhdGlvbnMgZW1pdHRlZC4KCShlbnVtIHBhX3N5bWJvbF90eXBlKTogVHlwZSB0byBmdWxseSBkZXNjcmliZSB0aGUgc3ltYm9sIHR5cGVzCglhc3NvY2lhdGVkIHdpdGggLmltcG9ydC8uZXhwb3J0IGFzc2VtYmxlciBkaXJlY3RpdmVzLgoKCSogc29tLmM6IEluY2x1ZGUgbGliaHBwYS5oCgoJKiBzb20uYyAoYmZkX3NvbV9zZXRfc2VjdGlvbl9hdHRyaWJ1dGVzKTogTmV3IGZ1bmN0aW9uLgoJKGJmZF9zb21fc2V0X3N1YnNlY3Rpb25fYXR0cmlidXRlcyk6IExpa2V3aXNlLgoJKGJmZF9zb21fc2V0X3N5bWJvTF90eXBlKTogTGlrZXdpc2UuCgkoYmZkX3NvbV9hdHRhY2hfdW53aW5kX2luZm8pOiBMaWtld2lzZS4KCSogc29tLmg6IERlY2xhcmUgbmV3IGV4cG9ydGVkIGZ1bmN0aW9ucy4KCgkqIHNvbS5oIChzdHJ1Y3Qgc29tX3N5bWJvbCk6IEFkZCBuZXcgZmllbGRzIHRvIGhvbGQgYWRkaXRpb25hbAoJaW5mb3JtYXRpb24gbmVlZGVkIHRvIGJ1aWxkL3dyaXRlIHN5bWJvbCB0YWJsZXMgYW5kIGZpeHVwIHN0cmVhbXMuCgkoc3RydWN0IHNvbV9zZWN0aW9uX2RhdGFfc3RydWN0KTogQWRkIG5ldyBmaWVsZHMgdG8gaG9sZCBhZGRpdGlvbmFsCglpbmZvcm1hdGlvbiBuZWVkZWQgdG8gYnVpbGQvd3JpdGUgc3BhY2UgYW5kIHN1YnNwYWNlIGhlYWRlcnMuCgkoc29tX3N5bWJvbF9kYXRhKTogTmV3IGFjY2Vzc29yIG1hY3JvIGZvciBTT00gc3ltYm9sIGluZm9ybWF0aW9uLgoJKFJfSFBQQV8qKTogQmFzaWMgcmVsb2NhdGlvbiB0eXBlcyB0byBiZSB1c2VkIGJ5IHRoZSBhc3NlbWJsZXIuCgpGcmkgTm92IDEyIDExOjAwOjI4IDE5OTMgIEppbSBLaW5nZG9uICAoa2luZ2RvbkBsaW90aC5jeWdudXMuY29tKQoKCSogdHJhZC1jb3JlLmMgKHRyYWRfdW5peF9jb3JlX2ZpbGVfcCk6IElmIG5ldyBob29rCglUUkFEX0NPUkVfQUxMT1dfQU5ZX0VYVFJBX1NJWkUgZGVmaW5lZCwgdGhlbiBza2lwIHRoZSBjaGVjayBmb3IgdGhlCgljb3JlZmlsZSBiZWluZyB0b28gYmlnLgoJKiBob3N0cy9pMzg2c2NvLmg6IERlZmluZSBpdC4KClRodSBOb3YgMTEgMTU6MTY6MjggMTk5MyAgSmVmZnJleSBBLiBMYXcgIChsYXdAc25ha2UuY3MudXRhaC5lZHUpCgoJKiBiZmQuYyAoc3RydWN0IF9iZmQpOiBBZGQgaHBwYWJzZF9jb3JlX2RhdGEuCgkqIHRhcmdldHMuYyAodGFyZ2V0X3ZlY3Rvcik6IEFkZCBocHBhYnNkX2NvcmVfdmVjLgoJKiBocHV4LWNvcmUuYyAoaHB1eF9jb3JlX2NvcmVfZmlsZV9wKTogRmFpbCBpZiBhbiB1bmtub3duIGNvcmUKCXNlY3Rpb24gaXMgZW5jb3VudGVyZWQgZHVyaW5nIGNvcmUgc2VjdGlvbiBzY2FubmluZy4KCSogaHBwYWJzZC1jb3JlLmM6IE5ldyBmaWxlLgoJKiBjb25maWcvaHBwYWJzZC5taDogRW5hYmxlIEhQUEEgQlNEIGNvcmUgZmlsZXMuCgoJKiBlbGYzMi1ocHBhLmMgKGhwcGFfZWxmX3JlbG9jKTogUmVtb3ZlIERFRlVOIGNydWQuICBSZW1vdmUgY29kZQoJd2hpY2ggaXMgZWl0aGVyIGNvbW1lbnRlZCBvdXQgb3IgaWZkZWYnZCBvdXQuICBBZGQsIHVwZGF0ZSBhbmQKCWNsZWFuIGNvbW1lbnRzLiAgRml4IHZhcmlvdXMgaW5kZW50aW9uIGFuZCBzcGFjaW5nIHByb2JsZW1zLiAgSGFuZGxlCglwcm9ibGVtcyByZWxhdGVkIHRvIHVzaW5nICJibGUiIHRvIGp1bXAgdG8gYSBzdHViIHJhdGhlciB0aGFuICJibCIKCSglcjMxIGlzIHRyYXNoZWQgYnkgImJsZSIsIGJ1dCBub3QgYnkgImJsIikuCgkoTkVXX0lOU1RSVUNUSU9OKTogUHV0IGluc2lkZSBjdXJseSBicmFjZXMuCgkoQ1VSUkVOVF9TVFVCX09GRlNFVCk6IEZpeCBpbmRlbnRpb24gcHJvYmxlbXMuCgkoaHBwYV9lbGZfYnVpbGRfYXJnX3JlbG9jX3N0dWIpOiBGaXggaW5kZW50aW9uIGFuZCBzcGFjaW5nIHByb2JsZW1zLgoJQWRkLCB1cGRhdGUgYW5kIGNsZWFuIGNvbW1lbnRzLiAgSGFuZGxlICJibGUiICVyMzEgbG9zc2FnZSBwcm9ibGVtcy4KCShocHBhX2VsZl9idWlsZF9sb25nX2JyYW5jaF9zdHViKTogTGlrZXdpc2UuCgkoaHBwYV9sb29rX2Zvcl9zdHVic19pbl9zZWN0aW9uKTogTGlrZXdpc2UuCgkoaHBwYV9lbGZfc3R1Yl9jaGVjayk6IFJlbW92ZSBvYnNvbGV0ZSBmdW5jdGlvbi4KCgkqIGhwcGFfc3R1YnMuaDogQWRkIG5ldyBpbnN0cnVjdGlvbnMgdG8gZGVhbCB3aXRoICVyMzEgbG9zc2FnZQoJcHJvYmxlbXMuICBEZWxldGUgdW51c2VkIGluc3RydWN0aW9ucy4KCQpUdWUgTm92ICA5IDExOjQwOjI3IDE5OTMgIFN0YW4gU2hlYnMgIChzaGVic0BydGwuY3lnbnVzLmNvbSkKCgkqIG02OGtseW54LmMgKFRBUkdFVF9JU19CSUdfRU5ESUFOX1ApOiBEZWZpbmUuCgpUdWUgTm92ICA5IDExOjI2OjA1IDE5OTMgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AdHdlZWRsZWR1bWIuY3lnbnVzLmNvbSkKCgkqIGVsZmNvZGUuaCAoZWxmX29iamVjdF9wKTogUmF0aGVyIHRoYW4gbG9va2luZyB0aHJvdWdoIGFuIGFycmF5CglvZiBhcmNoaXRlY3R1cmVzLCBnZXQgdGhlIEVMRiBFTV94eHggY29kZSBmcm9tIHRoZSBiYWNrZW5kCglpbmZvcm1hdGlvbi4gIExldCB0aGUgZ2VuZXJpYyBFTEYgdGFyZ2V0IG1hdGNoIGFueSBFTV94eHggY29kZSBub3QKCW1hdGNoZWQgYnkgYW5vdGhlciBFTEYgdGFyZ2V0LiAgQ2FsbCBlbGZfYmFja2VuZF9vYmplY3RfcCB0byBsZXQKCXRoZSBiYWNrZW5kIGRvIG1vcmUgY2hlY2tzIGFuZCBzZXQgZ2xvYmFsIGluZm9ybWF0aW9uLgoJKiBsaWJlbGYuaCAoc3RydWN0IGVsZl9iYWNrZW5kX2RhdGEpOiBBZGRlZCBlbGZfbWFjaGluZV9jb2RlIGFuZAoJZWxmX2JhY2tlbmRfb2JqZWN0X3AgZmllbGRzLgoJKHN0cnVjdCBiZmRfZWxmX2FyY2hfbWFwKTogUmVtb3ZlZC4KCShiZmRfZWxmX2FyY2hfbWFwLCBiZmRfZWxmX2FyY2hfbWFwX3NpemUpOiBEb24ndCBkZWNsYXJlLgoJKiBlbGYzMi10YXJnZXQuaCwgZWxmNjQtdGFyZ2V0Lmg6IEluaXRpYWxpemUgZWxmX21hY2hpbmVfY29kZQoJZmllbGQgd2l0aCBFTEZfTUFDSElORV9DT0RFLiAgSW5pdGlhbGl6ZSBlbGZfYmFja2VuZF9vYmplY3RfcAoJZmllbGQgd2l0aCBlbGZfYmFja2VuZF9vYmplY3RfcCAoaWYgaXQgaXMgZGVmaW5lZCkuCgkqIGVsZjMyLWdlbi5jLCBlbGYzMi1ocHBhLmMsIGVsZjMyLWkzODYuYywgZWxmMzItaTg2MC5jLAoJZWxmMzItbTY4ay5jLCBlbGYzMi1tODhrLmMsIGVsZjMyLW1pcHMuYywgZWxmMzItc3BhcmMuYywKCWVsZjY0LWdlbi5jIChFTEZfTUFDSElORV9DT0RFKTogRGVmaW5lZC4KCSogZWxmMzItbWlwcy5jOiBJbmNsdWRlIGVjb2Zmc3dhcC5oIHRvIGdldCBFQ09GRiBzd2FwcGluZwoJcm91dGluZXMuCgkobWlwc19lbGZfb2JqZWN0X3ApOiBTZXQgdGhlIHJpZ2h0IG1hY2hpbmUgbnVtYmVyLgoJKG1pcHNfZWxmX2Vjb2ZmX2RlYnVnX3N3YXApOiBEZWZpbmVkLgoJKGVsZl9iYWNrZW5kX29iamVjdF9wKTogRGVmaW5lZCB0byBiZSBtaXBzX2VsZl9vYmplY3RfcC4KCShlbGZfYmFja2VuZF9lY29mZl9kZWJ1Z19zd2FwKTogRGVmaW5lZCB0byBiZQoJbWlwc19lbGZfZWNvZmZfZGVidWdfc3dhcC4KCSogZWxmLmMgKGJmZF9lbGZfYXJjaF9tYXAsIGJmZF9lbGZfYXJjaF9tYXBfc2l6ZSk6IFJlbW92ZWQuCgoJKiBsaWJiZmQtaW4uaCAodGFyZ2V0X3ZlY3RvciwgZGVmYXVsdF92ZWN0b3IpOiBEZWNsYXJlLgoJKiBsaWJiZmQuaDogUmVidWlsdC4KCSogZm9ybWF0LmMgKHRhcmdldF92ZWN0b3IsIGRlZmF1bHRfdmVjdG9yKTogRG9uJ3QgZGVjbGFyZS4KCgkqIGVsZjMyLW1pcHMuYyAoZWxmX21pcHNfaG93dG9fdGFibGUpOiBEb24ndCBjb21wbGFpbiBvbiBvdmVyZmxvdwoJZm9yIFJfTUlQU18yNi4gIENvcnJlY3Qgb3ZlcmZsb3cgZGV0ZWN0aW9uIHJlcXVpcmVzIG1hdGNoaW5nIHRoZQoJdXBwZXIgZm91ciBiaXRzIG9mIHRoZSBkZXN0aW5hdGlvbiBhZ2FpbnN0IHRoZSBQQy4gIEZyb20gVGVkIExlbW9uCgk8bWVsbG9uQHBlcHBlci5uY2QuY29tPi4KCgkqIGJvdXQuYyAoYl9vdXRfcmVsb2NfdHlwZV9sb29rdXApOiBSZXR1cm4gdHlwZSBzaG91bGQgcG9pbnQgdG8KCWNvbnN0IGRhdGEuCgkqIGNvZmYtaTk2MC5jIChjb2ZmX2k5NjBfcmVsb2NfdHlwZV9sb29rdXApOiBMaWtld2lzZS4KCSogZWxmMzItaHBwYS5jIChlbGZfaHBwYV9yZWxvY190eXBlX2xvb2t1cCk6IExpa2V3aXNlLgoJKiBtaXBzYnNkLmMgKE1ZKHJlbG9jX2hvd3RvX3R5cGVfbG9va3VwKSk6IExpa2V3aXNlLgoJKiBjb2ZmLWkzODYuYyAoY29mZl9pMzg2X3JlbG9jKTogTWFkZSBob3d0byBjb25zdC4KCSogb2FzeXMuYyAob2FzeXNfd3JpdGVfZGF0YSk6IE1hZGUgaG93IGNvbnN0LgoKCSogbGliZWxmLmg6IEFkZGVkIHNvbWUgY29tbWVudHMuCgkoc3RydWN0IGVsZl9iYWNrZW5kX2RhdGEpOiBBZGRlZCBlbGZfYmFja2VuZF9lY29mZl9kZWJ1Z19zd2FwCglmaWVsZC4gIFJlbW92ZWQgdW51c2VkIHdyaXRlX3JlbG9jcyBmaWVsZC4KCSogZWxmMzItdGFyZ2V0Lmg6IEFkanVzdGVkIGVsZl9iYWNrZW5kX2RhdGEgaW5pdGlhbGl6YXRpb24KCWFjY29yZGluZ2x5LgoJKiBlbGY2NC10YXJnZXQuaDogQ29ycmVjdGVkIGVsZl9iYWNrZW5kX2RhdGEgaW5pdGlhbGl6YXRpb24gdG8KCWZpbGwgaW4gYWxsIGZpZWxkcyBhbmQgdG8gc2V0IGVsZl82NF9wIHRvIDEuCgpNb24gTm92ICA4IDE4OjEzOjE0IDE5OTMgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AdHdlZWRsZWR1bWIuY3lnbnVzLmNvbSkKCgkqIGVsZmNvZGUuaCAoYmZkX3NlY3Rpb25fZnJvbV9zaGRyKTogUmVtb3ZlIGR1cGxpY2F0ZSBhc3NpZ25tZW50Cgl0byBmaWxlcG9zIGluIFNIVF9TVFJUQUIgY2FzZS4KCShhc3NpZ25fZmlsZV9wb3NpdGlvbl9mb3Jfc2VjdGlvbik6IFNldCBCRkQgc2VjdGlvbiBmaWxlcG9zIGFzCgl3ZWxsIGFzIEVMRiBzZWN0aW9uIHNoX29mZnNldC4KCgkqIHJlbG9jLmM6IFVzZSBjb25zdCBpbnN0ZWFkIG9mIENPTlNULgoJKGJmZF9wZXJmb3JtX3JlbG9jYXRpb24pOiBNYWtlIHZhcmlhYmxlIGhvd3RvIGEgY29uc3QgcG9pbnRlci4KCSogYmZkLWluMi5oLCBsaWJiZmQuaDogUmVidWlsdC4KCk1vbiBOb3YgIDggMTI6MTk6MTUgMTk5MyAgSmltIEtpbmdkb24gIChraW5nZG9uQGxpb3RoLmN5Z251cy5jb20pCgoJKiBNYWtlZmlsZS5pbiAocmVhbGNsZWFuKTogRG9uJ3QgcmVtb3ZlIGdlbmVyYXRlZCBoZWFkZXJzLiAgUmV2ZXJ0cwoJY2hhbmdlIG9mIDIgSnVsIDE5OTMuCgpNb24gTm92ICA4IDA2OjA4OjMxIDE5OTMgIEQuIFYuIEhlbmtlbC1XYWxsYWNlICAoZ3VtYnlAY2lyZGFuLmN5Z251cy5jb20pCgoJKiBjb25maWd1cmUuYmZkOiBtYWtlIHVuaXh3YXJlIGVxdWl2YWxlbnQgdG8gc3lzdjQuCgoJKiBjb25maWcvaTM4Ni1ubG0ubXQ6IGJyaW5nIGluIGVsZiBjb25maWc7IG1ha2UgaXQgdGhlIGRlZmF1bHQuCgpTdW4gTm92ICA3IDIwOjIxOjM4IDE5OTMgIEplZmZyZXkgQS4gTGF3ICAobGF3QHNuYWtlLmNzLnV0YWguZWR1KQoKCSogbGliYmZkLmMgKGJmZF9wdXRfOCk6IEFkZCBwYXJlbnMgYXJvdW5kIHJlZmVyZW5jZSB0byAidmFsIgoJYXJndW1lbnQuCgpGcmkgTm92ICA1IDIxOjQ1OjA5IDE5OTMgIERhdmlkIEouIE1hY2tlbnppZSAgKGRqbUB0aGVwdWIuY3lnbnVzLmNvbSkKCgkqIGhvc3RzL2kzODZtYWNoMy5oIChIT1NUX1NFR01FTlRfU0laRSksCglpMzg2bWFjaDMuYyAoU0VHTUVOVF9TSVpFLCBURVhUX1NUQVJUX0FERFIpOiBDb3JyZWN0IHZhbHVlcyAoPykuCgpGcmkgTm92ICA1IDE1OjE3OjU3IDE5OTMgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AdHdlZWRsZWR1bWIuY3lnbnVzLmNvbSkKCgkqIGNvZmZjb2RlLmggKGNvZmZfd3JpdGVfb2JqZWN0X2NvbnRlbnRzKTogWmVybyBvdXQgaW50ZXJuYWxfYS4KCkZyaSBOb3YgIDUgMTA6NDE6MDcgMTk5MyAgRGF2aWQgSi4gTWFja2VuemllICAoZGptQHRoZXB1Yi5jeWdudXMuY29tKQoKCSogYW91dHguaCwgYXJjaGl2ZS5jLCBhcmNodXJlcy5jLCBiZmQuYywgY2FjaGUuYywgY29mZmNvZGUuaCwKCWNvcmUuYywgY3Rvci5jLCBmb3JtYXQuYywgaW5pdC5jLCBsaWJiZmQuYywgb3BuY2xzLmMsIHJlbG9jLmMsCglzZWN0aW9uLmMsIHN5bXMuYywgdGFyZ2V0cy5jOgoJRG9jIGNsZWFudXAgKHNwZWxsaW5nLCBwdW5jdHVhdGlvbiwgZ3JhbW1hciwgZm9ybWF0dGluZykuCgkqIGJmZC1pbjIuaCwgbGliYmZkLmg6IFJlYnVpbGQuCgpUaHUgTm92ICA0IDE0OjQ2OjE0IDE5OTMgIEpvaG4gR2lsbW9yZSAgKGdudUBydGwuY3lnbnVzLmNvbSkKCgkqIGJmZC1pbi5oIChiZmRfZ2V0X2NhY2hlYWJsZSwgYmZkX3NldF9jYWNoZWFibGUpOiAgTmV3IGFjY2Vzc29ycy4KCSogYmZkLmMsIG9wbmNscy5jOiAgSW1wcm92ZSBjb21tZW50cyBvbiBmaWxlIGRlc2NyaXB0b3IgY2FjaGVpbmcuCgpUaHUgTm92ICA0IDA4OjU0OjMwIDE5OTMgIEplZmZyZXkgQS4gTGF3ICAobGF3QHNuYWtlLmNzLnV0YWguZWR1KQoKCSogRnJvbSBQZXRlIEhvb2dlbmJvb20gKGhvb2dlbkBjcy51dGFoLmVkdSkKCSogZWxmMzItaHBwYS5jIChocHBhX2VsZl9nZXRfc2VjdGlvbl9jb250ZW50cyk6IEZpeCBsb2dpYyBlcnJvcgoJaW4gbGFzdCBjaGFuZ2UuICBBbHdheXMgcmVidWlsZCBzeW1ib2wgZXh0ZW5zaW9uIHNlY3Rpb24gdGhlIGZpcnN0Cgl0aW1lIHRob3VnaCBpZiBvdXRwdXQgc2VjdGlvbnMgZXhpc3QgKGZpeGVzIGxkIC1yIHByb2JsZW1zKS4KClRodSBOb3YgMDQgMDg6MDg6NDYgMTk5MyAgSmVmZnJleSBXaGVhdCAgKGNhc3NpZHlAY3lnbnVzLmNvbSkKCgkqIE1ha2VmaWxlLmluOiBBZGQgLlBIT05ZIGZvciBjaGVjayBhbmQgaW5zdGFsbGNoZWNrIHJ1bGVzLgoKVHVlIE5vdiAgMiAxNDo0MjoyNyAxOTkzICBCaWxsIENveCAoYmlsbEB0YXJrYXMuY3lnbnVzLmNvbSkKCgkqIGxpYmJmZC1pbi5oIChhcnRkYXRhKTogVXNlIGxvbmcsIG5vdCB0aW1lX3QgZm9yIHBvcnRhYmlsaXR5LCBhdAoJICBsZWFzdCB0byBIUFVYLiAgRmlsZSBiZWxvdyBpcyBhIGRlcml2ZWQgZmlsZS4KClR1ZSBOb3YgIDIgMTQ6NDI6MjcgMTk5MyAgQmlsbCBDb3ggKGJpbGxAdGFya2FzLmN5Z251cy5jb20pCgoJKiBsaWJiZmQuaCAoYXJ0ZGF0YSk6IFVzZSBsb25nLCBub3QgdGltZV90IGZvciBwb3J0YWJpbGl0eSwgYXQKCSAgbGVhc3QgdG8gSFBVWC4KClR1ZSBOb3YgIDIgMDk6MzI6MjUgMTk5MyAgSmltIEtpbmdkb24gIChraW5nZG9uQGxpb3RoLmN5Z251cy5jb20pCgoJKiBjb25maWcuYmZkOiBVc2UgYmlnbWlwcyBmb3IgbWlwcyotKi1ic2QqLgoKTW9uIE5vdiAgMSAxNDozMDowOSAxOTkzICBJYW4gTGFuY2UgVGF5bG9yICAoaWFuQHR3ZWVkbGVkdW1iLmN5Z251cy5jb20pCgoJKiBlbGZjb2RlLmggKGVsZl9zbHVycF9yZWxvY2FfdGFibGUsIGVsZl9zbHVycF9yZWxvY190YWJsZSk6CglIYW5kbGUgc3ltYm9sIG51bWJlciBvZiB6ZXJvLgoKCSogcmVsb2MuYyAoZW51bSBiZmRfcmVsb2NfY29kZV9yZWFsKTogQWRkZWQKCUJGRF9SRUxPQ19NSVBTX0xJVEVSQUwsIEJGRF9SRUxPQ19NSVBTX0dPVDE2LAoJQkZEX1JFTE9DX01JUFNfQ0FMTDE2LCBCRkRfUkVMT0NfTUlQU19HUFJFTDMyLgoJKiBiZmQtaW4yLmg6IFJlYnVpbHQuCgkqIGNvZmYtbWlwcy5jIChtaXBzX2JmZF9yZWxvY190eXBlX2xvb2t1cCk6IEhhbmRsZQoJQkZEX1JFTE9DX01JUFNfTElURVJBTC4KCSogZWxmMzItbWlwcy5jIChtaXBzX3JlbG9jX21hcCk6IEhhbmRsZSBuZXcgcmVsb2NzLgoJKG1pcHNfZWxmX2hpMTZfcmVsb2MsIG1pcHNfZWxmX2xvMTZfcmVsb2MpOiBSZWFycmFuZ2UgX2dwX2Rpc3AKCWNoZWNrcyBzbGlnaHRseS4KCgkqIGFvdXQtdGFyZ2V0LmggKE1ZX2JmZF9kZWJ1Z19pbmZvX3N0YXJ0LCBNWV9iZmRfZGVidWdfaW5mb19lbmQsCglNWV9iZmRfZGVidWdfaW5mb19hY2N1bXVsYXQgW3NpY10pOiBSZW1vdmUgdW51c2VkIGRlZmluaXRpb25zLgoJKE1ZX2JmZF9nZXRfcmVsb2NhdGVkX3NlY3Rpb25fY29udGVudHMsIE1ZX2JmZF9yZWxheF9zZWN0aW9uLAoJTVlfYmZkX3NlY2xldF9saW5rKTogRGVmaW5lLgoJKE1ZX2JmZF9yZWxvY190eXBlX2xvb2t1cCk6IFJlbmFtZSBmcm9tCglNWV9yZWxvY19ob3d0b190eXBlX2xvb2t1cC4KCShNWV9iZmRfbWFrZV9kZWJ1Z19zeW1ib2wpOiBSZW5hbWUgZnJvbSBNWV9tYWtlX2RlYnVnX3N5bWJvbC4KCShNWSh2ZWMpKTogVXNlIEpVTVBfVEFCTEUgcmF0aGVyIHRoYW4gbGlzdGluZyBmdW5jdGlvbnMuCgkqIGhwMzAwaHB1eC5jIChNWV9nZXRfc3ltdGFiLCBNWV9nZXRfc3ltdGFiX3VwcGVyX2JvdW5kLAoJTVlfY2Fub25pY2FsaXplX3JlbG9jLCBNWV93cml0ZV9vYmplY3RfY29udGVudHMpOiBEb24ndCBkZWZpbmUgaW4KCXRlcm1zIG9mIE1ZLCBiZWNhdXNlIHRoYXQgY2F1c2VzIGEgcmVjdXNpdmUgaW52b2NhdGlvbiBvZiBDQVQgd2hlbgoJZXhwYW5kZWQgd2l0aGluIEpVTVBfVEFCTEUsIGFuZCBBTlNJIGNvbXBpbGVycyBkb24ndCBleHBhbmQKCXJlY3Vyc2l2ZSBtYWNyb3MuCgkqIG1pcHNic2QuYyAoTVlfYmZkX3JlbG9jX3R5cGVfbG9va3VwKTogUmVuYW1lIGZyb20KCU1ZX3JlbG9jX2hvd3RvX3R5cGVfbG9va3VwLCBhbmQgZG9uJ3QgZGVmaW5lIGluIHRlcm1zIG9mIE1ZLgoJKE1ZX2Nhbm9uaWNhbGl6ZV9yZWxvYyk6IERvbid0IGRlZmluZSBpbiB0ZXJtcyBvZiBNWS4KCShhb3V0X21pcHNfbGl0dGxlX3ZlYywgYW91dF9taXBzX2JpZ192ZWMpOiBVc2UgSlVNUF9UQUJMRSByYXRoZXIKCXRoYW4gbGlzdGluZyBmdW5jdGlvbnMuCgpNb24gTm92ICAxIDA5OjEyOjI1IDE5OTMgIEppbSBLaW5nZG9uICAoa2luZ2RvbkBsaW90aC5jeWdudXMuY29tKQoKCSogY29uZmlnLmJmZDogVXNlIG02OGstZWxmIGZvciBtNjgqLSotc3lzdjQqLgoKU3VuIE9jdCAzMSAwOTozNTo0OSAxOTkzICBKaW0gS2luZ2RvbiAgKGtpbmdkb25AbGlvdGguY3lnbnVzLmNvbSkKCgkqIHRhcmdldHMuYzogTW92ZSBlbnVtIHRhcmdldF9mbGF2b3VyIG91dHNpZGUgb2Ygc3RydWN0IGFuZCBjaGFuZ2UKCXRoZSBuYW1lIHRvIGVudW0gYmZkX2ZsYXZvdXIuICBUaGlzIG1lYW5zIGJmZCBjbGllbnRzIGNhbiB1c2UgaXQuCgkqIGJmZC1pbi5oOiBBZGQgbWFjcm8gYmZkX2dldF9mbGF2b3VyLgoJKiBiZmQtaW4yLmg6IFJlYnVpbHQuCgoJKiBzb20uYzogQWRkIGNvbW1lbnQgYWJvdXQgaG93IGFib3J0KCkgb24gY29ycnVwdCBleGVjdXRhYmxlIGlzIGV2aWwuCgpTYXQgT2N0IDMwIDEyOjI3OjA5IDE5OTMgIERhdmlkIEouIE1hY2tlbnppZSAgKGRqbUB0aGVwdWIuY3lnbnVzLmNvbSkKCgkqIGFvdXR4LmggKGFvdXQsc2x1cnBfcmVsb2NfdGFibGUpOiBBdm9pZCBhIGdvdG8uCgpGcmkgT2N0IDI5IDE2OjA0OjMzIDE5OTMgIERhdmlkIEouIE1hY2tlbnppZSAgKGRqbUB0aGVwdWIuY3lnbnVzLmNvbSkKCgkqIGdlbi1hb3V0LmMsIGxpYmJmZC5jOiBleGl0KDEpIGluc3RlYWQgb2YgZXhpdCgtMSkuCgpGcmkgT2N0IDI5IDEzOjE3OjIxIDE5OTMgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AdHdlZWRsZWR1bWIuY3lnbnVzLmNvbSkKCgkqIGJmZC1pbi5oOiBBZGRlZCBjb21tYW5kcyBmb3Igb2JqZWN0IGZpbGUgZmxhZyB2YWx1ZXMuCgkqIGJmZC1pbjIuaDogUmVidWlsdC4KCSogZWxmY29kZS5oIChlbGZfb2JqZWN0X3ApOiBJZiB0eXBlIGlzIEVUX0RZTiwgc2V0IERZTkFNSUMgZmxhZywKCW5vdCBFWEVDX1AuCgkqIGJvdXQuYywgY29mZi1oODMwMC5jLCBjb2ZmLXNoLmM6IEFkZCBCRkRfSVNfUkVMQVhBQkxFIHRvCglvYmplY3RfZmxhZ3MgZmllbGQgZm9yIHRhcmdldCB2ZWN0b3IuCgkqIGFpeDM4Ni1jb3JlLmMsIGFvdXQtYWRvYmUuYywgYW91dC10YXJnZXQuaCwgYm91dC5jLCBjb2ZmLWEyOWsuYywKCWNvZmYtYWxwaGEuYywgY29mZi1hcG9sbG8uYywgY29mZi1oODMwMC5jLCBjb2ZmLWg4NTAwLmMsCgljb2ZmLWkzODYuYywgY29mZi1pOTYwLmMsIGNvZmYtbTY4ay5jLCBjb2ZmLW04OGsuYywgY29mZi1taXBzLmMsCgljb2ZmLXJzNjAwMC5jLCBjb2ZmLXNoLmMsIGNvZmYtd2UzMmsuYywgY29mZi16OGsuYywgaHB1eC1jb3JlLmMsCglpZWVlLmMsIG1pcHNic2QuYywgbmxtLXRhcmdldC5oLCBvYXN5cy5jLCBvc2YtY29yZS5jLCBzb20uYywKCXNyZWMuYywgdGVraGV4LmMsIHRyYWQtY29yZS5jOglSZW1vdmUgRFlOQU1JQyBmcm9tIG9iamVjdF9mbGFncwoJZmllbGQgZm9yIHRhcmdldCB2ZWN0b3IuCgpUaHUgT2N0IDI4IDIwOjAyOjMxIDE5OTMgIERhdmlkIEouIE1hY2tlbnppZSAgKGRqbUB0aGVwdWIuY3lnbnVzLmNvbSkKCgkqIGhvc3RzL3N0ZC1ob3N0Lmg6IERvbid0IGRlY2xhcmUgdGltZTsgY2F1c2VzIGVycm9yIG9uIG1hY2gzLgoJKiBjb25maWd1cmUuaW4gKGkzODZtYWNoM192ZWMpOiBSZXF1aXJlIGFvdXQzMi5vIHN0YWItc3ltcy5vLgoKVGh1IE9jdCAyOCAxNjozMzoyNiAxOTkzICBTdGFuIFNoZWJzICAoc2hlYnNAcnRsLmN5Z251cy5jb20pCgoJTHlueE9TIGFuZCBTcGFyYyBMeW54T1MgY2hhbmdlczoKCSogY29uZmlnLmJmZDogUmVjb2duaXplIHNwYXJjLSotbHlueG9zKi4KCSogY29uZmlndXJlLmhvc3Q6IFJlY29nbml6ZSBzcGFyYy0qLWx5bnhvcyouCgkqIGNvbmZpZ3VyZS5pbjogUmVjb2duaXplIFNwYXJjIEx5bnggdmVjdG9ycy4KCSogdGFyZ2V0cy5jIChzcGFyY2x5bnhfYW91dF92ZWMpOiBEZWNsYXJlLgoJKHNwYXJjbHlueF9jb2ZmX3ZlYyk6IERlY2xhcmUuCgkodGFyZ2V0X3ZlY3Rvcik6IEFkZCB0aGVtLgoJKiBjZi1pMzg2bHlueC5jOiBOZXcgZmlsZSwgcmVuYW1lZCBmcm9tIGkzODZseW54LWNmLmMuCgkqIGNmLW02OGtseW54LmM6IE5ldyBmaWxlLCByZW5hbWVkIGZyb20gbTY4a2x5bngtY2YuYy4KCSogY2Ytc3BhcmNseW54LmM6IE5ldyBmaWxlLCBzdXBwb3J0IGZvciBjb2ZmIGluIFNwYXJjIEx5bnhPUy4KCSogY29mZi1zcGFyYy5jOiBOZXcgZmlsZSwgYmFzaWMgU3BhcmMgY29mZiBzdXBwb3J0LgoJKiBzcGFyY2x5bnguYzogTmV3IGZpbGUsIHN1cHBvcnQgZm9yIGEub3V0IGluIFNwYXJjIEx5bnhPUy4KCSogTWFrZWZpbGUuaW46IENoYW5nZSBmaWxlbmFtZXMgYXBwcm9wcmlhdGVseSwgYWRkIFNwYXJjIHJ1bGVzLgoJKiBjb2ZmY29kZS5oIChjb2ZmX3NldF9hcmNoX21hY2hfaG9vayk6IFJlY29nbml6ZSBTcGFyYyBtYWdpYwoJbnVtYmVyLgoJKGNvZmZfc2V0X2ZsYWdzKTogVXNlIEx5bnhPUyBtYWdpYyBudW1iZXIgZm9yIGkzODYsIG02OGssIGFuZAoJU3BhcmMgTHlueE9TLCBzZXQgU3BhcmMgbWFnaWMgbnVtYmVyIGZvciBTcGFyY3MuCgkqIGNvbmZpZy9tNjhrLWx5bngubXQgKFNFTEVDVF9WRUNTKTogUmVtb3ZlIHJlZHVuZGFudCB2ZWN0b3IuCgkqIGNvbmZpZy9zcGFyYy1seW54Lm10OiBOZXcgZmlsZS4KCSogaG9zdHMvaTM4Nmx5bnguaDogQ29zbWV0aWMgaW1wcm92ZW1lbnRzLgoJKiBob3N0cy9tNjhrbHlueC5oOiBBZGQgaWZkZWZzLCAjZGVmaW5lIG9mIGNmcmVlLgoJKiBob3N0cy9zcGFyY2x5bnguaDogTmV3IGZpbGUuCgpUaHUgT2N0IDI4IDE2OjIzOjQwIDE5OTMgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AdHdlZWRsZWR1bWIuY3lnbnVzLmNvbSkKCglnY2MgLVdhbGwgbGludDoKCSogY29mZi1oODMwMC5jIChoODMwMF9yZWxvYzE2X2VzdGltYXRlKTogRGVjbGFyZSByZXR1cm4gdHlwZS4KCVJlbW92ZSB1c2VsZXNzIHN0YXRlbWVudCBwcm9iYWJseSBsZWZ0IGJ5IGNvZGUgY29weS4KCSogY3B1LWk5NjAuYyAoY29tcGF0aWJsZSk6IEZ1bGx5IGJyYWNrZXQgbWF0cml4IGluaXRpYWxpemVyLgoJKiBlbGYzMi1ocHBhLmMgKGhwcGFfZWxmX2J1aWxkX2FyZ19yZWxvY19zdHViKTogVXNlIGJmZF94bWFsbG9jCglyYXRoZXIgdGhhbiB4bWFsbG9jLiAgVXNlIHJlYWxsb2MgYW5kIGNoZWNrIHRoZSByZXR1cm4gdmFsdWUKCXJhdGhlciB0aGFuIHhyZWFsbG9jLgoJKGhwcGFfZWxmX2dldF9zZWN0aW9uX2NvbnRlbnRzKTogQWRkIHNvbWUgY2FzdHMuCgkqIGVsZjMyLWkzODYuYyAoZWxmX2kzODZfcmVsb2NfdHlwZV9sb29rdXApOiBSZW1vdmUgdW51c2VkCgl2YXJpYWJsZS4gIEFkZCBkZWZhdWx0IGNhc2UgdG8gc3dpdGNoLgoJKiBocDMwMGhwdXguYzogRGVjbGFyZSBhb3V0XzMyX3dyaXRlX3N5bXMuCgkqIGkzODZic2QuYywgaTM4NmxpbnV4LmMsIG5ldGJzZDM4Ni5jIChOX1NIQVJFRF9MSUIpOiBEZWZpbmUgYXMgMAoJKGRlZmluaXRpb24gZnJvbSBhb3V0L2FvdXQ2NC5oIGlzIGFsd2F5cyAwIGFueWhvdykuCgkqIGkzODZseW54LmMgKHN3YXBfc3RkX3JlbG9jX2luKTogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZS4KCSogaWVlZS5jIChpZWVlX3dyaXRlX2lkKTogbGVuZ3RoIGNhbiBuZXZlciBiZSBuZWdhdGl2ZS4KCShyZWFkX2lkKTogTGlrZXdpc2UuCgkoaWVlZV9hcmNoaXZlX3ApOiBSZW1vdmUgdW51c2VkIHZhcmlhYmxlLgoJKiBsaWJjb2ZmLWluLmggKGJmZF9wZXJmb3JtX3NsaXApOiBEZWNsYXJlLgoJKiBsaWJjb2ZmLmg6IFJlYnVpbHQuCgkqIG9hc3lzLmMgKG9hc3lzX3dyaXRlX3NlY3Rpb25zKTogUmVtb3ZlIHplcm8gaW5pdGlhbGl6YXRpb24gb2YKCXN0YXRpYyBzdHJ1Y3R1cmUuCgkqIHJlbG9jMTYuYzogSW5kZW50YXRpb24gY2hhbmdlLgoKV2VkIE9jdCAyNyAxNjo1MToyOSAxOTkzICBKaW0gS2luZ2RvbiAgKGtpbmdkb25AbGlvdGguY3lnbnVzLmNvbSkKCgkqIGNvbmZpZ3VyZS5pbiwgY29uZmlnL2kzODYtbWFjaDMubXQ6IFVwZGF0ZSBmb3IgbmV3IGNvbmZpZ3VyYXRpb24KCSgtLXdpdGgtdGFyZ2V0cwlhbmQgc28gb24pLgoJKiBob3N0cy9pMzg2bWFjaDMuaDogRGVjbGFyZSBlcnJuby4KCSogdGFyZ2V0cy5jOiBEZWNsYXJlIGkzODZtYWNoM192ZWMuCgpXZWQgT2N0IDI3IDEyOjE4OjA3IDE5OTMgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AdHdlZWRsZWR1bWIuY3lnbnVzLmNvbSkKCgkqIG5sbWNvZGUuaCAobmxtX3N3YXBfYXV4aWxpYXJ5X2hlYWRlcnNfaW4sCglubG1fc3dhcF9hdXhpbGlhcnlfaGVhZGVyc19vdXQpOiBIYW5kbGUgc2hhcmVkRGVidWdSZWNvcmRPZmZzZXQKCWFuZCBzaGFyZWREZWJ1Z1JlY29yZENvdW50IGZpZWxkcy4KClR1ZSBPY3QgMjYgMTY6MjE6MTIgMTk5MyAgSmltIEtpbmdkb24gIChraW5nZG9uQGxpb3RoLmN5Z251cy5jb20pCgoJKiB0YXJnZXRzLmMgKHRhcmdldF92ZWN0b3IpOiBSZW1vdmUgU0NPX0NPUkUuICBPbiBTZXAgMTEgMTk5MywKCXdlIHN0YXJ0ZWQgdXNpbmcgdHJhZC1jb3JlLmMgZm9yIFNDTyBpbnN0ZWFkLgoKCSogdGFyZ2V0cy5jICh0YXJnZXRfdmVjdG9yKTogUmUtZW5hYmxlIGdlbmVyaWMgRUxGIGFuZCBOTE0gdGFyZ2V0cy4KClR1ZSBPY3QgMjYgMTY6NTM6MTIgMTk5MyAgSWFuIExhbmNlIFRheWxvciAgKGlhbkB0d2VlZGxlZHVtYi5jeWdudXMuY29tKQoKCSogZWxmY29kZS5oIChhc3NpZ25fZmlsZV9wb3NpdGlvbl9mb3Jfc2VjdGlvbik6IEFsaWduIHNoX29mZnNldCB0bwoJc2hfYWRkcmFsaWduICh0aGlzIGlzIHdoYXQgVW5peFdhcmUgZG9lcywgYW5kIGl0IHNob3VsZG4ndCBodXJ0KS4KClR1ZSBPY3QgMjYgMTA6MTY6NTQgMTk5MyAgS2VuIFJhZWJ1cm4gIChyYWVidXJuQGN5Z251cy5jb20pCgoJRnJvbSBKZWZmIExhdyBhbmQgUGV0ZSBIb29nZW5ib29tIGF0IFV0YWg6CgoJKiBlbGYzMi1ocHBhLmggKGhwcGFfZWxmX3N0dWJfZmluaXNoKTogQWRkIHByb3RvdHlwZS4KCShFTEYzMl9IUFBBX1JfQVJHX1JFTE9DKTogUmVuYW1lZCB3aXRob3V0IHRoZSBFTEYzMiBwcmVmaXgKCWFuZCBtb3ZlZCBpbnRvIGxpYmhwcGEuaC4gIEFsbCByZWZlcmVuY2VzIGNoYW5nZWQuCgkoRUxGMzJfSFBQQV9SX0NPTlNUQU5ULCBFTEYzMl9IUFBBX1JfQURERU5EKTogTGlrZXdpc2UuCgkoZ2V0X29wY29kZSBhbmQgb3Bjb2RlIGRlZmluZXMpOiBNb3ZlIGludG8gbGliaHBwYS5oCgkqIGVsZjMyLWhwcGEuYyAoaHBwYV9lbGZfaW5zbjJmbXQpOiBSZW5hbWUgYW5kIG1vdmUgaW5mbwoJbGliaHBwYS5oLgoJKiBsaWJocHBhLmggKEhQUEFfUl8qKTogTW92ZWQgaGVyZS4gIFJlZm9ybWF0dGVkIHNsaWdodGx5IHRvIG1ha2UKCWZvciBlYXNpZXIgcmVhZGluZy4KCShnZXRfb3Bjb2RlKTogTW92ZWQgaGVyZS4gIEZJWE1FISB0aGlzIHJlYWxseSBzaG91bGQgYmUgYSBDIGZ1bmN0aW9uCglpbnNpZGUgdGhlIG9wY29kZSBsaWJyYXJ5IQoJKGJmZF9ocHBhX2luc24yZm10KTogTGlrZXdpc2UuCgoJKiB0YXJnZXRzLmMgKHRhcmdldF92ZWN0b3IpOiBFbmFibGUgZWxmMzItaHBwYSB2ZWN0b3IuCgoJKiBlbGYzMi1ocHBhLmMgKGhwcGFfZWxmX2dldF9zZWN0aW9uX2NvbnRlbnRzKTogQWRkIG5ldyBjb21tZW50cwoJYW5kIGNsYXJpZnkgZXhpc3RpbmcgY29tbWVudHMuICBEbyBub3QgdXNlIERFRlVOIHRvIGRlY2xhcmUgdGhpcwoJZnVuY3Rpb24uICBGaXggbnVtZXJvdXMgaW5kZW50aW9uIHByb2JsZW1zLiAgQ29ycmVjdGx5IGhhbmRsZSBjYXNlcwoJd2hlcmUgc3ltYm9sIGV4dGVuc2lvbiBzZWN0aW9uIG1heSBuZWVkIHRvIGJlIHJlYWQgZnJvbSBkaXNrLCAKCXJlYWQgZnJvbSBtZW1vcnksIG9yIGJ1aWx0IHRoZW4gcmVhZCBmcm9tIG1lbW9yeS4KCgkqIGVsZjMyLWhwcGEuaDogUmVmb3JtYXQgd2l0aCBnbnUtaW5kZW50IGFuZCBoYW5kIGZpeCBudW1lcm91cwoJZm9ybWF0dGluZyBhbmQgaW5kZW50aW9uIHByb2JsZW1zIGdudS1pbmRlbnQgY2FuIG5vdCBoYW5kbGUuCglDbGFyaWZ5IHNvbWUgY29tbWVudHMgYWJvdXQgcmVsb2NhdGlvbiB0eXBlcy4gIENvbW1lbnQgYmFzaWMKCXJlbG9jYXRpb24gImNsYXNzZXMiLiAgR3JvdXAgUEFSQU0gZGVjbGFyYXRpb25zIHRvZ2V0aGVyLgoJKEhQUEFfU1hUX3tOVUxMLCBTWU1ORFgsIFJHX1JFTE9DfSk6IE1ha2UgbWVtYmVycyBvZiBhIG5ldyAKCWVudW1lcmF0ZWQgdHlwZSByYXRoZXIgdGhhbiAjZGVmaW5lcy4KClR1ZSBPY3QgMjYgMDI6NDA6NDYgMTk5MyAgU3R1IEdyb3NzbWFuICAoZ3Jvc3NtYW4gYXQgY3lnbnVzLmNvbSkKCgkqIHNvbS5jIChocHBhX29iamVjdF9zZXR1cCk6ICBTZXQgU0VDX0NPREUgZm9yIC50ZXh0IHNlY3Rpb24gc28KCXRoYXQgR0RCIGNhbiBmaWd1cmUgb3V0IHRleHRfc3RhcnQgYW5kIHRleHRfZW5kLgoKTW9uIE9jdCAyNSAxNjowNToyMyAxOTkzICBJYW4gTGFuY2UgVGF5bG9yICAoaWFuQHR3ZWVkbGVkdW1iLmN5Z251cy5jb20pCgoJRml4IHVwIHdhcm5pbmdzIGZyb20gZ2NjIC1XYWxsOgoJKiBjb2ZmZ2VuLmMgKGNvZmZfcHJpbnRfc3ltYm9sKTogVXNlICVseCBhbmQgY2FzdCBuX3ZhbHVlIHRvCgl1bnNpZ25lZCBsb25nLiAgVXNlICVsZCBmb3IgdGFnbmR4LiAgVXNlICVseCBmb3Igb2Zmc2V0ICsgdm1hIGFuZAoJY2FzdCBpdCB0byB1bnNpZ25lZCBsb25nLgoJKiBlY29mZi5jIChlY29mZl9lbWl0X2FnZ3JlZ2F0ZSk6IFVzZSAlbGQuCQoJKGVjb2ZmX3ByaW50X3N5bWJvbCk6IFVzZSAlbGQsIGFuZCBjYXN0IGluZHggYW5kIHN5bV9iYXNlIHRvIGxvbmcuCgkqIGNvZmZjb2RlLmggKGR1bW15X3JlbG9jMTZfZXN0aW1hdGUpOiBTcGVjaWZ5IHJldHVybiB0eXBlLgoKCSogbGliYmZkLmMgKGJmZF93cml0ZSk6IElmIG5vdCBldmVyeXRoaW5nIGlzIHdyaXR0ZW4gb3V0LCBzZXQKCWJmZF9lcnJvciB0byBzeXN0ZW1fY2FsbF9lcnJvci4gIElmIHRoZSByZXR1cm4gdmFsdWUgaXMKCW5vbi1uZWdhdGl2ZSwgc2V0IGVycm5vIHRvIEVOT1NQQyAoaWYgRU5PU1BDIGlzIGRlZmluZWQpLgoJKGJmZF9zZWVrKTogSWYgdGhlIHNlZWsgZmFpbHMsIHNldCBiZmRfZXJyb3IgdG8gc3lzdGVtX2NhbGxfZXJyb3IuCgkoYmZkX2dlbmVyaWNfc2V0X3NlY3Rpb25fY29udGVudHMpOiBGb3IgYSBiYWQgb2Zmc2V0ICsgY291bnQsIHNldAoJYmZkX2Vycm9yIHRvIGJhZF92YWx1ZS4KCSogc2VjbGV0LmMgKHJlbCk6IERvbid0IGFib3J0LiAgSW5zdGVhZCwgcmV0dXJuIGZhbHNlLgoKTW9uIE9jdCAyNSAwOTo1OTozNyAxOTkzICBLZW4gUmFlYnVybiAgKHJhZWJ1cm5AY3lnbnVzLmNvbSkKCgkqIGFvdXR4LmggKHJlbG9jX3R5cGVfbG9va3VwKTogSGFuZGxlIEJGRF9SRUxPQ19TUEFSQ19XRElTUDIyLgoKRnJpIE9jdCAyMiAyMDozNTo1NCAxOTkzICBkYXZpZCBkIGB6b28nIHp1aG4gICh6b29AcnRsLmN5Z251cy5jb20pCgoJKiBjb25maWcuYmZkOiBoYW5kbGUgbWlwcyotKiBpbnN0ZWFkIG9mIG1pcHMtKiwgdXNlIG1pcHMqZWwKCSAgaW5zdGVhZCBvZiBtaXBzLSotKmwKCkZyaSBPY3QgMjIgMTQ6MDM6MzMgMTk5MyAgTWFyayBFaWNoaW4gIChlaWNoaW5AY3lnbnVzLmNvbSkKCgkqIG02OGstbHlueC5tdCwgaTM4Ni1seW54Lm10IChUREVGSU5FUyk6IHNldAoJRlBSSU5URl9BTFJFQURZX0RFQ0xBUkVEIGJlY2F1c2UgdGhlIG9iamR1bXAuYyBkZWNsYXJhdGlvbiBvZgoJZnByaW50ZiBjb2xsaWRlcyB3aXRoIHRoZSBuYXRpdmUgb25lLgoKRnJpIE9jdCAyMiAxMTo1MDoyNSAxOTkzICBJYW4gTGFuY2UgVGF5bG9yICAoaWFuQHR3ZWVkbGVkdW1iLmN5Z251cy5jb20pCgoJKiB0YXJnZXRzLmMgKHRhcmdldF92ZWN0b3IpOiBFbmFibGUgTUlQUyBFTEYgdmVjdG9ycy4KCkZyaSBPY3QgMjIgMDc6NTE6NTEgMTk5MyAgSmltIEtpbmdkb24gIChraW5nZG9uQGxpb3RoLmN5Z251cy5jb20pCgoJKiBjb25maWcuYmZkOiBVc2UgYmlnbWlwcyBmb3IgbWlwcy1zb255LWJzZCouCgoJKiBjb25maWd1cmUuaG9zdCwgY29uZmlnLmJmZDogQWRkICogdG8gZW5kIG9mIGFsbCBPUyBuYW1lcy4KClRodSBPY3QgMjEgMTI6MTY6MjYgMTk5MyAgS2VuIFJhZWJ1cm4gIChyYWVidXJuQGN5Z251cy5jb20pCgoJKiBlbGZjb2RlLmggKEZJTEVfQUxJR04pOiBSZW5hbWVkIGZyb20gRUFMSUdOLCB0byBhdm9pZCBjb25mbGljdAoJd2l0aCBVbHRyaXggaGVhZGVyIGZpbGVzLgoKCSogc29tLmggKHN0cnVjdCBzb21fc2VjdGlvbl9kYXRhX3N0cnVjdCk6IFJlbmFtZWQgZnJvbQoJc29tX3NlY3Rpb25fZGF0YSB0byBhdm9pZCBjb25mbGljdCB3aXRoIG1hY3JvIGJ5IHRoYXQgbmFtZS4KCglDaGFuZ2VzIGZyb20gSmVmZiBMYXcgYW5kIFBldGVyIEhvb2dlbmJvb20gYXQgVXRhaDoKCgkqIGVsZjMyLWhwcGEuYyAoaHBwYV9lbGZfcmVsb2MpOiAgVGFyZ2V0IHJlZ2lzdGVyIGZvciBhICdqdW1wCglpbiBkZWxheSBzbG90JyBvcHRpbWl6YXRpb24gaW4gY29tYmluYXRpb24gd2l0aCBhIGxvbmcgY2FsbAoJc3R1YiBzaG91bGQgYWx3YXlzIGJlIHIzMS4KCgkqIGVsZjMyLWhwcGEuYzogKGhwcGFfZWxmX3JlbG9jYXRlX2luc24pOiBUbyBiZSBjb25zaXN0ZW50CglhY3Jvc3MgYWxsIHJlbG9jYXRpb24gdHlwZXMsIHJldHJpZXZlIGluc3RydWN0aW9uIGFkZGVuZHMgZnJvbQoJdGhlIHJlbG9jYXRpb24gZW50cnkgcmF0aGVyIHRoYW4gZnJvbSB0aGUgaW5zdHJ1Y3Rpb24gaXRzZWxmLgoKCSogZWxmMzItaHBwYS5jOiAoaHBwYV9lbGZfcmVsb2NhdGVfaW5zbik6IEZpeCBhIHJlbG9jYXRpb24KCWVycm9yIHRoYXQgb25seSBvY2N1cnJlZCB3aGVuIHRoZSBhZGRlbmQgb2YgYW4gJ2FkZGlsJyBvcgoJJ2xkaWwnIHdhcyBsYXJnZXIgdGhhbiAyMSBiaXRzIGFuZCB2ZXJ5IGNsb3NlIHRvIGEgMksgYnl0ZQoJYm91bmRhcnkuCgoJKiBlbGYzMi1ocHBhLmM6IChocHBhX2VsZl9yZWxvYyk6ICBIYW5kbGUgdGhlIG9wdGltaXphdGlvbiBpbgoJd2hpY2ggYSBqdW1wIGlzIHBsYWNlZCBpbiB0aGUgZGVsYXkgc2xvdCBvZiBhIGZ1bmN0aW9uIGNhbGwuCglUaGUganVtcCB3YXMgYmVpbmcgYWNjb21wbGlzaGVkIHZpYSBhbiBhZGp1c3RtZW50IHRvIHRoZQoJcmV0dXJuIHBvaW50ZXIuICBUaGlzIG9wdGltaXphdGlvbiB3b3VsZCBicmVhayB0aGUgbG9uZyBjYWxsCglzdHViIGNvZGUsIGlmIHRoZXJlIHdhcyBhbnkuCgoJKiBlbGYzMi1ocHBhLmM6IChocHBhX2VsZl9idWlsZF9sb25nX2JyYW5jaF9zdHViKTogQ29ycmVjdGlvbnMKCXRvIGxvbmcgYnJhbmNoIHN0dWJzIHRvIGF2b2lkIHVzZSBvZiBnZW5lcmFsIHJlZ2lzdGVyIDIuCgoJKiBocHBhX3N0dWJzLmg6IE5ldyBzdHViIGluc3RydWN0aW9ucy4KCgkqIGVsZmNvZGUuaDogRGVjbGFyZSBiZmRfZWxmX2ZpbmRfc2VjdGlvbi4KCgkqIHNvbS5oIChzb21fc2VjdGlvbl9kYXRhKTogQWRkIG5ldyAic3Vic3BhY2VfaW5kZXgiIGZpZWxkLgoKCSogc29tLmMgKHNldHVwX3NlY3Rpb25zKTogU2F2ZSB0aGUgb3JpZ2luYWwgU09NIHN1YnNwYWNlIGluZGV4CglpbiB0aGUgQkZEIHNlY3Rpb24gYXNzb2NpYXRlZCB3aXRoIHRoYXQgc3Vic3BhY2UuICAKCShzb21fZ2V0X3N5bXRhYl91cHBlcl9ib3VuZCk6IEltcGxlbWVudC4KCShzb21fZ2V0X3N5bXRhYik6IEltcGxlbWVudC4KCShzb21fcHJpbnRfc3ltYm9sKTogSW1wbGVtZW50LgoJKHNvbV9zbHVycF9zdHJpbmdfdGFibGUpOiBOZXcgZnVuY3Rpb24gdG8gcmVhZCBhIHN0cmluZyB0YWJsZQoJZnJvbSBhIFNPTSBvYmplY3QgZmlsZS4KCShzb21fc2VjdGlvbl9mcm9tX3N1YnNwYWNlX2luZGV4KTogTmV3IGZ1bmN0aW9uIHRvIHJldHVybiB0aGUKCXNlY3Rpb24gd2hpY2ggY29ycmVzcG9uZHMgdG8gYSBTT00gc3Vic3BhY2UgaW5kZXguCgkoc29tX3NsdXJwX3N5bWJvbF90YWJsZSk6IE5ldyBmdW5jdGlvbiB0byByZWFkIHRoZSBzeW1ib2wKCXRhYmxlIGZyb20gYSBTT00gb2JqZWN0IGZpbGUuCgkoc29tX21ha2VfZW1wdHlfc3ltYm9sKTogQ2hlY2sgZm9yIGVycm9ycyBmcm9tIGJmZF96YWxsb2MuCgkoc29tX25ld19zZWN0aW9uX2hvb2spOiBJbml0aWFsaXplIHN1YnNwYWNlX2luZGV4IGZpZWxkIHRvCgktMSBpbnN0ZWFkIG9mIDAuCgoJKiBzb20uYyAoc29tX29iamVjdF9zZXR1cCk6IEZpeCBwb2xhcml0eSBvZiB0ZXN0IHRvIHNldCBIQVNfUkVMT0MuCglTZXQgRVhFQ19QIGZvciBleGVjdXRhYmxlcy4KCShzZXR1cF9zZWN0aW9ucyk6IENvcnJlY3RseSBpZGVudGlmeSB3aGVuIGEgc2VjdGlvbiBoYXMKCXJlbG9jYXRpb25zLgoJKGxvZzIpOiBOZXcgZnVuY3Rpb24uCgkoc2V0dXBfc2VjdGlvbnMpOiBDb3JyZWN0bHkgY29udmVydCBiZXR3ZWVuIFNPTSBhbGlnbm1lbnRzIGFuZCBCRkQKCWFsaWdubWVudHMuCgoJKiBzb20uYyAoc2V0dXBfc2VjdGlvbnMpOiBEbyBub3Qgc2V0IFNFQ19BTExPQyBvciBTRUNfTE9BRAoJZm9yIHNlY3Rpb25zIHdoaWNoIGNvcnJlc3BvbmQgdG8gU09NIHNwYWNlcywgZG9pbmcgc28gY29uZnVzZXMKCW1hbnkgdXRpbGl0aWVzLiAgU2V0IGFzc29ydGVkIFNFQ18qIGZsYWdzIGZvciBTT00gc3Vic3BhY2VzCgl3aGljaCBjb3JyZXNwb25kIHRvIEJGRCBzZWN0aW9ucy4KCgkqIGVsZjMyLWhwcGEuYzogKGVsZjMyX2hwcGFfYmFja2VuZF9mYWtlX3NlY3Rpb25zKTogVGhlIHN0YWIKCXN0cmluZyB0YWJsZSBzaG91bGQgaGF2ZSBzaF90eXBlID09IFNIVF9TVFJUQUIuICBBZGQKCXByb2Nlc3NpbmcgdG8gbWFrZSBpdCBzby4KCgkqIGVsZmNvZGUuaDogKGJmZF9zZWN0aW9uX2Zyb21fc2hkcik6IFN0cmluZyB0YWJsZXMgKG90aGVyCgl0aGFuIC5zdHJ0YWIpIHdlcmUgbm90IGdldHRpbmcgdGhlIGZpbGUgb2Zmc2V0cyByZWNvcmRlZCwgc28KCXRoZXkgY291bGQgbm90IGJlIHJlYWQgZnJvbSBkaXNrLgoKCSogZWxmY29kZS5oOiAoZWxmX21ha2Vfc2VjdGlvbnMpOiAgTGVhdmUgdGhlIHNoX2FkZHIgZmllbGQgb2YKCXRoZSBzZWN0aW9uIGhlYWRlciBhbmQgdGhlIHZtYSBmaWVsZCBvZiBhIHNlY3Rpb24gYXQgMCBpZiB0aGUKCXNlY3Rpb24gaXMgbm90IHBhcnQgb2YgdGhlIHByb2dyYW0gZXhlY3V0aW9uIGltYWdlLiAoZS5nLiwKCS5zdGFiKQoKCSogc29tLltoY106IENoYW5nZSB0YXJnZXQgdmVjdG9yIHByZWZpeCBmcm9tICJocHBhIiB0byAic29tIi4KCUNvbnNpc3RlbnRseSB1c2Ugb2JqX3NvbSBwcmVmaXggdG8gYWNjZXNzIGZpZWxkcyBpbiBiYWNrZW5kIGRhdGEKCXN0cnVjdHVyZXMuICBGaXggYWxsIGNhbGxlcnMvcmVmZXJlbmNlcy4KCgkqIHNvbS5oOiBEbyBub3QgaW5jbHVkZSBmaWxlcyBvbmx5IG5lZWRlZCBmb3IgY29yZSBmaWxlIHJlYWRpbmcgaGVyZS4KCUluY2x1ZGUgYS5vdXQgZm9yIGJvdGggSE9TVF9IUFBBSFBVWCBhbmQgSE9TVF9IUFBBQlNELiAgRGVsZXRlCglmb3J3YXJkIHN0cnVjdHVyZSBkZWNsYXJhdGlvbnMsIHRoZXkgYXJlIHVubmVjZXNzYXJ5LgoJKHN0cnVjdCBzb21kYXRhKTogRGVsZXRlIGF1eF9oZHIsIGFuZCBocF9zeW1ib2xfZW50cnlfc2l6ZSBmaWVsZHMuCglDaGFuZ2UgInN5bWJvbHMiIHRvICJzeW10YWIiLiAgQWRkICJzdHJpbmd0YWIiIGFuZCAicmVsb2NfZmlsZXBvcyIKCWZpZWxkcyBmb3IgZnV0dXJlIHVzZS4gIENoYW5nZSBvYmpfc29tXyogbWFjcm9zIGFzIGFwcHJvcHJpYXRlLgoJKHNvbV9zZWN0aW9uX2RhdGEpOiBOZXcgc3RydWN0dXJlIHRvIGtlZXAgU09NIHNwZWNpZmljIGluZm9ybWF0aW9uCglhYm91dCBCRkQgc2VjdGlvbnMgKGZvciBmdXR1cmUgdXNlKS4KCgkqIHNvbS5jOiBQcm92aWRlIFBBUkFNUyBkZWNsYXJhdGlvbnMgZm9yIGFsbCBmdW5jdGlvbnMgY3VycmVudGx5CglpbiB0aGlzIGZpbGUuCgkoc3RydWN0IGNvbnRhaW5lcik6IERlbGV0ZSB1bndhbnRlZCBzdHJ1Y3R1cmUgZGVmaW5pdGlvbi4KCShzb21fb2JqZWN0X3NldHVwKTogQWRkIGNvbW1lbnRzLiAgVXNlIHNvbV9ta29iamVjdCB0byBhbGxvY2F0ZQoJU09NIHNwZWNpZmljIGluZm9ybWF0aW9uIGluIHRoZSBCRkQ7IHVzZSBpbmZvcm1hdGlvbiBmcm9tIHRoZQoJZmlsZSBhbmQgKHBvc3NpYmx5IGVtcHR5KSBhdXhpbGlhcnkgaGVhZGVycyB0byBpbml0aWFsaXplIHRoaXMKCWluZm9ybWF0aW9uLiAgRGVsZXRlIHJlZHVuZGFudCBiZmRfZ2V0X3N5bWNvdW50IChhYmZkKSAiY2FsbHMiLgoJKHNldHVwX3NlY3Rpb25zKTogUmV0dXJuIHR5cGUgaXMgbm93IGJvb2xlYW4sIGZpeCByZXR1cm4gc3RhdGVtZW50cy4KCSJGaXgiIGhhbmRsaW5nIG9mIEJTUyBsaWtlIHN1YnNwYWNlcyBpbiB0aGUgY29tcHV0YXRpb24gb2YgdGhlCgljb250YWluaW5nIHNwYWNlJ3Mgc2l6ZS4gIElmIHRoZSBzdWJzcGFjZSBoYXMgcmVsb2NhdGlvbnMsIHNldCB0aGUKCWFwcHJvcHJpYXRlIEJGRCBzZWN0aW9uIGZsYWdzIGFuZCByZWNvcmQgdGhlIGluZGV4IGludG8gYW5kIHRoZQoJc2l6ZSBvZiB0aGUgZml4dXAgc3RyZWFtLiAgQWx3YXlzIHJldHVybiBhIHZhbHVlLgoJKHNvbV9vYmplY3RfcCk6IFNldCBiZmRfZXJyb3IgYXBwcm9wcmlhdGVseSBpZiBlcnJvcnMgYXJlIGRldGVjdGVkCglmcm9tIGJmZF97cmVhZCxzZWVrfSBmdW5jdGlvbnMuICBIYW5kbGUgRVhFQ0xJQk1BR0lDIHR5cGUgZmlsZXMuCglEbyBub3QgdHJ5IHRvIHJlYWQgYSBub24tZXhpc3RhbnQgYXV4aWxpYXJ5IGhlYWRlci4KCShzb21fbWtvYmplY3QpOiBGbGVzaCBvdXQuCgkoc29tX3NlY3Rpb25faG9vayk6IEFsbG9jYXRlIHNwYWNlIHRvIGhvbGQgU09NIHNwZWNpZmljIGluZm9ybWF0aW9uCglhYm91dCBzZWN0aW9ucy4KClRodSBPY3QgMjEgMTI6NDE6MzQgMTk5MyAgSmltIEtpbmdkb24gIChraW5nZG9uQGxpb3RoLmN5Z251cy5jb20pCgoJZ2NjIC1XYWxsIGxpbnQ6CgkqIGNvZmYtaDgzMDAuYywgY29mZmNvZGUuaDogQ2hhbmdlIHNocmluayBwYXJhbWV0ZXIKCWluICpfcmVsb2MxNl9lc3RpbWF0ZSB0byB1bnNpZ25lZCB0byBtYXRjaCBwcm90b3R5cGUuCgkqIGFyY2hpdmUuYzogQXZvaWQgIi8qIiBpbiBjb21tZW50LgoKVGh1IE9jdCAyMSAxMzowNToxNiAxOTkzICBJYW4gTGFuY2UgVGF5bG9yICAoaWFuQHR3ZWVkbGVkdW1iLmN5Z251cy5jb20pCgoJKiBkZXAtaW4uc2VkOiBDcmVhdGUgb3VyIG93biBsaW5lIGJyZWFrcyBmb3IgYSBtb3JlIGFlc3RoZXRpYwoJTWFrZWZpbGUuCgkqIE1ha2VmaWxlLmluOiBSZWJ1aWx0IGRlcGVuZGVuY2llcy4KCgkqIGVsZjMyLW1pcHMuYzogSW5jbHVkZSAic2VjbGV0LmgiLgoJKG1pcHNfZWxmX2Zha2Vfc2VjdGlvbnMpOiBGb3JjZSBzaXplIG9mIC5yZWdpbmZvIHNlY3Rpb24gdG8gc2l6ZW9mCglFbGYzMl9FeHRlcm5hbF9SZWdJbmZvLgoJKG1pcHNfZWxmX3NlY2xldF9saW5rKTogTmV3IGZ1bmN0aW9uLiAgTGluayB0aGUgLnJlZ2luZm8gc2VjdGlvbgoJc3BlY2lhbGx5LCBhbmQgcGFzcyBldmVyeXRoaW5nIGVsc2UgdG8gdGhlIGdlbmVyaWMgcm91dGluZS4KCShiZmRfZWxmMzJfYmZkX3NlY2xldF9saW5rKTogRGVmaW5lIG1hY3JvLgoJKiBlbGYzMi10YXJnZXQuaDogSWYgYmZkX2VsZjMyX2JmZF9zZWNsZXRfbGluayBpcyBhbHJlYWR5IGRlZmluZWQsCglkb24ndCBvdmVycmlkZSBpdC4KCldlZCBPY3QgMjAgMTI6MjI6MzcgMTk5MyAgSWFuIExhbmNlIFRheWxvciAgKGlhbkB0d2VlZGxlZHVtYi5jeWdudXMuY29tKQoKCSogbGlibmxtLmggKG5sbV9iYWNrZW5kX2RhdGEpOiBBZGRlZCBzaWduYXR1cmUgZmllbGQuCgkobmxtX3NpZ25hdHVyZSk6IE5ldyBtYWNyby4KCSogbmxtY29kZS5oIChubG1fb2JqZWN0X3AsIG5sbV93cml0ZV9vYmplY3RfY29udGVudHMpOiBVc2UgdGhlIE5MTQoJc2lnbmF0dXJlIGZyb20gdGhlIGJhY2tlbmQgcmF0aGVyIHRoYW4gdGhlIGNvbnN0YW50IE5MTV9TSUdOQVRVUkUuCgkqIG5sbTMyLWkzODYuYyAobmxtMzJfaTM4Nl9iYWNrZW5kKTogSW5pdGlhbGl6ZSBzaWduYXR1cmUgZmllbGQuCgoJKiBhb3V0ZjEuaCAoTUFDSFRZUEVfT0spOiBBY2NlcHQgTV9VTktOT1dOLgoJKE5BTUUoc3Vub3Msc2V0X2FyY2hfbWFjaCkpOiBUcmVhdCBNX1VOS05PV04gYXMgNjgwMDAsIG5vdCA2ODAyMC4KCldlZCBPY3QgMjAgMTA6Mjg6MjcgMTk5MyAgSmltIEtpbmdkb24gIChraW5nZG9uQGxpb3RoLmN5Z251cy5jb20pCgoJKiBob3N0cy9pMzg2YnNkLmggW19fYnNkaV9fXTogRGVmaW5lIEhPU1RfREFUQV9TVEFSVF9BRERSLgoKV2VkIE9jdCAyMCAxMDoxMDowNyAxOTkzICBLZW4gUmFlYnVybiAgKHJhZWJ1cm5AY3lnbnVzLmNvbSkKCgkqIE1ha2VmaWxlLmluIChIRklMRVMpOiBOZXcgdmFyaWFibGUsIGZvciB1c2UgaW4gIm1ha2UgZGVwIi4KCSguZGVwKTogRGVwZW5kIG9uICQoQ0ZJTEVTKSBhbmQgJChIRklMRVMpLiAgRGVsZXRlIC5kZXAxIGFuZAoJcmVtYWtlIGl0LCBzbyB0aGF0ICIkPyIgaXMgY29tcGxldGUuCgkoLmRlcDEpOiBEb24ndCBuZWVkIHRvIHJlbW92ZSAuZGVwMSBmaXJzdC4KCShkZXAuc2VkKTogRGVwZW5kIG9uIGNvbmZpZy5zdGF0dXMsIG5vdCBNYWtlZmlsZS4KCShDRklMRVMpOiBBZGQgbmxtLmMuCgpUdWUgT2N0IDE5IDE1OjI2OjI2IDE5OTMgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AdHdlZWRsZWR1bWIuY3lnbnVzLmNvbSkKCgkqIGNvZmYtYWxwaGEuYzogSW1wbGVtZW50ZWQgcmVsb2MgaGFuZGxpbmcgZm9yIHRoZSBsaW5rZXIsIG1hZGUKCXZhcmlvdXMgb3RoZXIgcmVsYXRlZCBjaGFuZ2VzLgoJKiBsaWJlY29mZi5oIChlY29mZl9iYWNrZW5kX2RhdGEpOiBBZGRlZCByZGF0YV9pbl90ZXh0IGZpZWxkLgoJUmVuYW1lZCBmaW5pc2hfcmVsb2MgdG8gYWRqdXN0X3JlbG9jX2luLiAgQWRkZWQgYWRqdXN0X3JlbG9jX291dAoJZmllbGQuCgkoZWNvZmZfYmZkX2dldF9yZWxvY2F0ZWRfc2VjdGlvbl9jb250ZW50cyk6IERvbid0IGRlZmluZS4KCSogZWNvZmYuYyAoZWNvZmZfc2VjX3RvX3N0eXBfZmxhZ3MsIGVjb2ZmX3N0eXBfdG9fc2VjX2ZsYWdzKToKCUhhbmRsZSAubGl0YSBzZWN0aW9uLgoJKGVjb2ZmX3NsdXJwX3JlbG9jX3RhYmxlKTogSGFuZGxlIFJFTE9DX1NFQ1RJT05fRklOSS4KCWZpbmlzaF9yZWxvYyBiYWNrZW5kIGZpZWxkIHJlbmFtZWQgdG8gYWRqdXN0X3JlbG9jX2luLgoJKGVjb2ZmX2JmZF9zZWNsZXRfbGluayk6IEFkanVzdCBudW1iZXIgb2YgYXV4IGVudHJpZXMgdG8KCWRlYnVnX2FsaWduIGJvdW5kYXJ5LgoJKGVjb2ZmX2NvbXB1dGVfc2VjdGlvbl9maWxlX3Bvc2l0aW9ucyk6IElmIHJkYXRhX2luX3RleHQgcHV0CgkucmRhdGEgc2VjdGlvbiBpbiB0ZXh0IHNlZ21lbnQsIG5vdCBkYXRhIHNlZ21lbnQuICBQdXQgLnBkYXRhCglzZWN0aW9uIGluIHRleHQgc2VnbWVudC4KCShlY29mZl93cml0ZV9vYmplY3RfY29udGVudHMpOiBMaWtld2lzZS4gIEFsc28sIGNhbGwKCWFkanVzdF9yZWxvY19vdXQsIGFuZCBoYW5kbGUgLmxpdGEsIC54ZGF0YSwgLnBkYXRhLCAuZmluaSBhbmQKCWFic29sdXRlIHNlY3Rpb25zIHdoZW4gd3JpdGluZyBvdXQgcmVsb2NzLgoJKiBjb2Zmc3dhcC5oIChjb2ZmX3N3YXBfYW91dGhkcl9vdXQpOiBGb3IgQUxQSEFFQ09GRiwgb3V0cHV0IDIgZm9yCglibGRyZXYgZmllbGQsIGFzIG9uIEFscGhhIE9TRi8xLiAgUGFkZGluZyBmaWVsZCBpcyBub3cgMiBieXRlcy4KCSogY29mZi1taXBzLmMgKG1pcHNfZWNvZmZfc3dhcF9yZWxvY19vdXQpOiBBZGRlZCBhc3NlcnRpb24uCgkobWlwc19hZGp1c3RfcmVsb2NfaW4pOiBSZW5hbWVkIGZyb20gbWlwc19maW5pc2hfcmVsb2MuCgkobWlwc19hZGp1c3RfcmVsb2Nfb3V0KTogTmV3IGZ1bmN0aW9uIChkb2VzIG5vdGhpbmcpLgoJKG1pcHNfZWNvZmZfYmFja2VuZF9kYXRhKTogSW5pdGlhbGl6ZSBuZXcgZmllbGRzLgoJKGVjb2ZmX2JmZF9nZXRfcmVsb2NhdGlvbl9zZWN0aW9uX2NvbnRlbnRzKTogRGVmaW5lIHRvIGJlCgliZmRfZ2VuZXJpY19nZXRfcmVsb2NhdGVkX3NlY3Rpb25fY29udGVudHMuCgoJKiByZWxvYy5jIChiZmRfcGVyZm9ybV9yZWxvY2F0aW9uKTogQWRkZWQgY2FzdHMgdG8gYXZvaWQgQWxwaGEKCU9TRi8xIGNjIGJ1Zy4KClRodSBPY3QgMTQgMDE6MTA6MzUgMTk5MyAgSWFuIExhbmNlIFRheWxvciAgKGlhbkB0d2VlZGxlZHVtYi5jeWdudXMuY29tKQoKCSogcmVsb2MuYyAoYmZkX3BlcmZvcm1fcmVsb2NhdGlvbik6IEFkZCBjb21tZW50cyBhdHRlbXB0aW5nIHRvCglleHBsYWluIFBDIHJlbGF0aXZlIHJlbG9jYXRpb25zLgoKCSogY29mZmNvZGUuaCAoc3R5cF90b19zZWNfZmxhZ3MpOiBEb24ndCBzZXQgU0VDX0RFQlVHR0lORyB1bnRpbCBpdAoJaXMgbWFkZSB0byB3b3JrLgoJKGNvZmZfY29tcHV0ZV9zZWN0aW9uX2ZpbGVfcG9zaXRpb25zKTogUmVtb3ZlIGNoZWNrIGZvcgoJVVNFX0RJU0NBUkRFRF9TRUNUSU9OU19DT1VOVC4KCSogY29mZi1pMzg2LmM6IERvbid0IGRlZmluZSBVU0VfRElTQ0FSREVEX1NFQ1RJT05TX0NPVU5ULiAgQmFzaW5nCglpdCBvbiBob3N0IGRlZmluZXMgaXMgd3JvbmcuCgoJKiBlY29mZi5jIChlY29mZl9iZmRfc2VjbGV0X2xpbmspOiBEb24ndCBsaW5rIGEgLnJlZ2luZm8gc2VjdGlvbi4KCShlY29mZl93cml0ZV9vYmplY3RfY29udGVudHMpOiBEb24ndCByZXF1aXJlIHRoZSAucmVnaW5mbyBzZWN0aW9uCgl0byBiZSBhIHBhcnRpY3VsYXIgc2l6ZS4KCldlZCBPY3QgMTMgMTg6Mzk6MDMgMTk5MyAgS2VuIFJhZWJ1cm4gIChyYWVidXJuQGNhbWJyaWRnZS5jeWdudXMuY29tKQoKCSogTWFrZWZpbGUuaW4gKGRlcC1pbik6IE5ldyBydWxlLCBmb3IgZWRpdGluZyBkZXBlbmRlbmNpZXMgaW50bwoJTWFrZWZpbGUuaW4gaW4gJChzcmNkaXIpLiAgVXNlIG1vdmUtaWYtY2hhbmdlLgoJKC5kZXAxLCBkZXApOiBVc2UgbW92ZS1pZi1jaGFuZ2UuCgkoQ0ZJTEVTKTogQWRkIGNvZmYtYXBvbGxvLmMuCgoJU3VuIE9jdCAxMCAxODowMjo1NiAxOTkzICBUcm95IFJvbGxvICh0cm95QGNibWUudW5zdy5FRFUuQVUpCgoJKiBNYWtlZmlsZS5pbjogUmVjb2duaXNlIG5ldyBmaWxlLCBjb2ZmLWFwb2xsby5vCgoJKiBjb2ZmLWFwb2xsby5jOiBOZXcgZmlsZQoKCSogY29mZmNvZGUuaDogUmVjb2duaXNlIGFwb2xsbyBtYWdpYyBudW1iZXJzIGFuZCB3cml0YWJsZSB0ZXh0CgoJKiBjb2Zmc3dhcC5oOiBTd2FwIEFwb2xsbyBvcHRpb25hbCBoZWFkZXIgZW50cmllcwoKCSogY29uZmlnLmJmZDogQWRkIGxpbmUgZm9yIEFwb2xsbwoKCSogY29uZmlndXJlLmhvc3Q6IFJlcGxhY2UgYXBvbGxvNjhiIGFuZCBhcG9sbG82OHYgd2l0aCBBcG9sbG8KCgkqIGNvbmZpZ3VyZS5pbjogUmVjb2duaXNlIGFwb2xsb2NvZmZfdmVjCgoJKiB0YXJnZXRzLmM6IExpa2V3aXNlCgoJKiBjb25maWcvYXBvbGxvLm1oLCBjb25maWcvYXBvbGxvLm10OiBOZXcgZmlsZXMKCgkqIGhvc3RzL2Fwb2xsbzY4Lmg6IFJlbW92ZSBpbmNsdXNpb24gb2Ygc3RyaW5ncy5oCgpXZWQgT2N0IDEzIDE0OjI4OjE3IDE5OTMgIEtlbiBSYWVidXJuICAocmFlYnVybkBjYW1icmlkZ2UuY3lnbnVzLmNvbSkKCgkqIGNvZmYtaTM4Ni5jIChpM2NvZmZfb2JqZWN0X3ApOiBOb3cgc3RhdGljLgoKCSogTWFrZWZpbGUuaW46IFVwZGF0ZWQgZGVwZW5kZW5jaWVzLgoJKC5kZXAsIC5kZXAxLCBkZXAuc2VkKTogTmV3IHRhcmdldHMsIHRvIG1ha2UgIm1ha2UgZGVwIiB3b3JrCgliZXR0ZXIuCgkqIGRlcC1pbi5zZWQ6IE5ldyBmaWxlLgoKCSogbTY4a2x5bngtY2YuYyAoT05MWV9ERUNMQVJFX1JFTE9DUyk6IERlZmluZSwgdG8gYXZvaWQgbmFtZQoJY29uZmxpY3RzIHdoZW4gIi0td2l0aC10YXJnZXRzPWFsbCIuCgkqIGNvZmYtbTY4ay5jIChtNjhrY29mZl9ob3d0b190YWJsZSwgbTY4a19ydHlwZTJob3d0bywKCW02OGtfaG93dG8ycnR5cGUpOiBSZW5hbWUgdmlhIG1hY3JvcyB0byBrZWVwIG5hbWVzcGFjZSBjbGVhbi4KCSogY29uZmlndXJlLmluOiBGb3IgbTY4a2x5bnhfY29mZl92ZWMsIGluY2x1ZGUgY29mZi1tNjhrLm8gZm9yCglub3cuCgpUdWUgT2N0IDEyIDE3OjAzOjI3IDE5OTMgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AdHdlZWRsZWR1bWIuY3lnbnVzLmNvbSkKCgkqIGVsZjMyLW1pcHMuYzogRXh0ZW5zaXZlIGFkZGl0aW9ucyB0byBkbyByZWxvY2F0aW9ucyBhbmQgdG8KCWhhbmRsZSBNSVBTIHNwZWNpZmljIHNlY3Rpb25zLgoJKiBsaWJlbGYuaCAoZWxmX2JhY2tlbmRfZGF0YSk6IFBhc3MgZm91cnRoIGFyZ3VtZW50IHRvCgllbGZfYmFja2VuZF9zZWN0aW9uX2Zyb21fYmZkX3NlY3Rpb24gdG8gcGVybWl0IGl0IHRvIGNvbnRyb2wgdGhlCglzZWN0aW9uIGluZGV4IHRvIHVzZS4KCShlbGZfb2JqX3RkYXRhKTogQWRkIGdwIGFuZCBncF9zaXplIGZpZWxkcy4KCShlbGZfZ3AsIGVsZl9ncF9zaXplKTogTmV3IGFjY2Vzc29yIG1hY3Jvcy4KCSogZWxmY29kZS5oOiBSZW1vdmVkIGEgbnVtYmVyIG9mIHVudXNlZCBsb2NhbCB2YXJpYWJsZXMuCgkoZWxmX2Zha2Vfc2VjdGlvbnMpOiBDbGVhciBzZWN0aW9uIGhlYWRlciBiZWZvcmUgY2FsbGluZwoJZWxmX2JhY2tlbmRfZmFrZV9zZWN0aW9ucywgbm90IGFmdGVyLgoJKHByZXBfaGVhZGVycyk6IFJldHVybiB0cnVlIGF0IGVuZC4KCShlbGZfc2VjdGlvbl9mcm9tX2JmZF9zZWN0aW9uKTogUGFzcyByZXR2YWwgYXJndW1lbnQgdG8KCWVsZl9iYWNrZW5kX3NlY3Rpb25fZnJvbV9iZmRfc2VjdGlvbi4KCSogZWxmMzItaHBwYS5jIChlbGYzMl9ocHBhX2JhY2tlbmRfc2VjdGlvbl9mcm9tX2JmZF9zZWN0aW9uKToKCUFjY2VwdCBhbmQgaWdub3JlIG5ldyByZXR2YWwgYXJndW1lbnQuCgkqIGJmZC5jOiBJbmNsdWRlIGxpYmVsZi5oLgoJKGJmZF9zZXRfZ3Bfc2l6ZSk6IEhhbmRsZSBFTEYgdGFyZ2V0cy4KCSogTWFrZWZpbGUuaW4gKGJmZC5vKTogRGVwZW5kcyB1cG9uIGxpYmVsZi5oLgoJKGVsZjMyLW1pcHMubyk6IERlcGVuZHMgdXBvbiAkKElOQ0RJUikvZWxmL21pcHMuaC4KCk1vbiBPY3QgMTEgMTc6MjU6MTggMTk5MyAgSWFuIExhbmNlIFRheWxvciAgKGlhbkB0d2VlZGxlZHVtYi5jeWdudXMuY29tKQoKCSogZWNvZmYuYyAoZWNvZmZfbWtvYmplY3QpOiBDaGVjayBiZmRfbWFrZV9zZWN0aW9uIHJldHVybiB2YWx1ZS4KCShlY29mZl9ta29iamVjdF9ob29rKTogTmV3IGZ1bmN0aW9uLgoJKGVjb2ZmX25ld19zZWN0aW9uX2hvb2ssIGVjb2ZmX3NpemVvZl9oZWFkZXJzLAoJZWNvZmZfY29tcHV0ZV9zZWN0aW9uX2ZpbGVfcG9zaXRpb25zLCBlY29mZl9zZXRfc2VjdGlvbl9jb250ZW50cywKCWVjb2ZmX3dyaXRlX29iamVjdF9jb250ZW50cyk6IEhhbmRsZSBkdW1teSBSRUdJTkZPIHNlY3Rpb24uCgkoZWNvZmZfZ2V0X3NlY3Rpb25fY29udGVudHMpOiBOZXcgZnVuY3Rpb24gdG8gaGFuZGxlIHJlYWRpbmcKCVJFR0lORk8gc2VjdGlvbi4KCSogbGliZWNvZmYuaCAoZWNvZmZfZ2V0X3NlY3Rpb25fY29udGVudHMpOiBDaGFuZ2UgZnJvbSBtYWNybwoJZGVmaW5pdGlvbiB0byBmdW5jdGlvbiBwcm90b3R5cGUuCgkoZWNvZmZfbWtvYmplY3RfaG9vayk6IE5ldyBwcm90b3R5cGUuCgkqIGNvZmYtYWxwaGEuYyAoYWxwaGFfZWNvZmZfbWtvYmplY3RfaG9vayk6IFJlbW92ZWQuCgkoYWxwaGFfZWNvZmZfYmFja2VuZF9kYXRhKTogVXNlIGVjb2ZmX21rb2JqZWN0X2hvb2suCgkqIGNvZmYtbWlwcy5jIChtaXBzX2Vjb2ZmX21rb2JqZWN0X2hvb2spOiBSZW1vdmVkLgoJKG1pcHNfZWNvZmZfYmFja2VuZF9kYXRhKTogVXNlIGVjb2ZmX21rb2JqZWN0X2hvb2suCgpGcmkgT2N0ICA4IDE1OjI1OjMzIDE5OTMgIFBldGVyIFNjaGF1ZXIgIChwZXNAcmVnZW50LmUtdGVjaG5pay50dS1tdWVuY2hlbi5kZSkKCgkqIGxpYmJmZC5jIChiZmRfZ2V0KjMyLCBiZmRfZ2V0KjY0KTogIFByZXZlbnQgQU5TSSBzaWduIGV4dGVuc2lvbgoJYnkgY2FzdGluZyB0aGUgbW9zdCBzaWduaWZpY2FudCBieXRlIHRvIGJmZF92bWEuCgpGcmkgT2N0ICA4IDAyOjM0OjIxIDE5OTMgIFBldGVyIFNjaGF1ZXIgIChwZXNAcmVnZW50LmUtdGVjaG5pay50dS1tdWVuY2hlbi5kZSkKCgkqIGNvbmZpZ3VyZS5pbjogIERvIG5vdCBkZWZpbmUgU0VMRUNUX1ZFQ1MsIFNFTEVDVF9BUkNISVRFQ1RVUkVTCglpZiBjb25maWd1cmluZyAtLXdpdGgtdGFyZ2V0cz1hbGwuCgpUaHUgT2N0ICA3IDE3OjM0OjA3IDE5OTMgIEtlbiBSYWVidXJuICAocmFlYnVybkBjYW1icmlkZ2UuY3lnbnVzLmNvbSkKCgkqIGFvdXR4LmggKGhvd3RvX3RhYmxlX3N0ZCk6IENvcnJlY3QgdGhlICJzaXplIiBmaWVsZCBpbiBzb21lCgllbnRyaWVzLgoKCSogcmVsb2MuYyAocmVsb2NfaG93dG9fdHlwZSk6IENoYW5nZSBkb2N1bWVudGF0aW9uIHRvIGRpc3BlbCBhbnkKCW5vdGlvbiB0aGF0IHRoZSAic2l6ZSIgZmllbGQgaXMgYSBwb3dlci1vZi10d28gaW5kaWNhdG9yLgoKVGh1IE9jdCAgNyAxMDo1MDozOCAxOTkzICBTdGV2ZSBDaGFtYmVybGFpbiAgKHNhY0BwaHlkZWF1eC5jeWdudXMuY29tKQoKICAgICAgICogY29mZnN3YXAuaDogKGJmZF9zd2FwX3JlbG9jX2luKTogYSBzeW1uZHggaXMgc2lnbmVkLgoKCU1ha2Ugc3VwcG9ydCBmb3IgcmVsYXhpbmcgbW9yZSBnZW5lcmljLgoJKiByZWxvYzE2LmM6IEFkZCBuZXcgdGFyZ2V0IGVudHJ5IC0gYmZkX2NvZmZfcmVsb2MxNl9lc3RpbWF0ZSwKCWZpeCBiaXQgcm90LgoJKiBsaWJjb2ZmLmgsIGxpYmNvZmYtaW4uaDogZGVjbGFyYXRpb25zLiBQcm90b3R5cGVzCgkqIGNvZmZjb2RlLmggKGJmZF9jb2ZmX3N0ZF9zd2FwX3RhYmxlKTogQWRkIGNhbGxzIHRvCgljb2ZmX3JlbG9jXzE2X2V4dHJhX2Nhc2VzIGFuZCBjb2ZmX3JlbG9jMTZfZXN0aW1hdGUuCgkoZHVtbXlfcmVsb2MxNl9lc3RpbWF0ZSk6IE5ldyBmdW5jdGlvbi4KCSogY29mZi1oODMwMC5jIChoODMwMF9yZWxvYzE2X2VzdGltYXRlKTogTmV3IGZ1bmN0aW9uCgpUaHUgT2N0ICA3IDE0OjI0OjEzIDE5OTMgIEtlbiBSYWVidXJuICAocmFlYnVybkBjYW1icmlkZ2UuY3lnbnVzLmNvbSkKCgkqIGVsZmNvZGUuaCAoRUFMSUdOKTogRGVmaW5lLCBkZXBlbmRlbnQgb24gQVJDSF9TSVpFLgoJKGFsaWduX2ZpbGVfcG9zaXRpb24pOiBOZXcgZnVuY3Rpb24uCgkoZWxmX2xvY2F0ZV9zaCk6IERpc2FibGVkIGZ1bmN0aW9uIGRlbGV0ZWQuCgkoYXNzaWduX2ZpbGVfcG9zaXRpb25zX2Zvcl9zeW10YWJfYW5kX3N0cnRhYnMpOiBBbGlnbiBwb3NpdGlvbiwKCXRoZW4gcGxhY2Ugc3ltdGFiLCB0aGVuIGRvIG90aGVyIHNlY3Rpb25zLgoJKG1hcF9wcm9ncmFtX3NlZ21lbnRzKTogQWxpZ24gcHJvZ3JhbSBoZWFkZXIuCgkoYXNzaWduX2ZpbGVfcG9zaXRpb25zX2V4Y2VwdF9yZWxvY3MpOiBBbGlnbiBzZWN0aW9uIGhlYWRlcnMuCgkoYXNzaWduX2ZpbGVfcG9zaXRpb25zX2Zvcl9yZWxvY3MpOiBBbGlnbiByZWxvY2F0aW9uIHNlY3Rpb25zLgoKVHVlIE9jdCAgNSAxMDo0NDozMiAxOTkzICBKaW0gS2luZ2RvbiAgKGtpbmdkb25AbGlvdGguY3lnbnVzLmNvbSkKCgkqIGNvbmZpZ3VyZS5ob3N0OiBSZWNvZ25pemUgaHBwYSotKi1oaXV4KiAoY3VycmVudGx5IHN5bm9ueW0gZm9yIGhwdXgpLgoJQ2hhbmdlIG90aGVyIGhwcGEgZW50cmllcyB0byB1c2UgLSotIG5vdCAtaHAtLgoJKiBjb25maWcuYmZkOiBSZWNvZ25pemUgaHBwYSotKi1oaXV4KiAoY3VycmVudGx5IHN5bm9ueW0gZm9yIGhwdXgpLgoKCSogY29mZi1yczYwMDAuYywgY3B1LXJzNjAwMC5jLCByczYwMDAtY29yZS5jOiBDaGFuZ2Ugbm9uLUFTQ0lJCgljaGFyYWN0ZXJzIGluIGNvbW1lbnQgdG8gb2N0YWwgZXNjYXBlcy4KClN1biBPY3QgIDMgMTI6MzU6MTUgMTk5MyAgU3RhbiBTaGVicyAgKHNoZWJzQHJ0bC5jeWdudXMuY29tKQoKCSogY29mZi1pMzg2bHlueC5jOiBSZW1vdmVkLCBuYW1lIHRvbyBsb25nLgoJKiBpMzg2bHlueC1jZi5jOiBOZXcgZmlsZSwgd2FzIGNvZmYtaTM4Nmx5bnguYy4KCSogY29uZmlndXJlLmluOiBSZWZsZWN0IGZpbGUgbmFtZSBjaGFuZ2VzLgoJKiBNYWtlZmlsZS5pbjogTWVudGlvbiBMeW54LXJlbGF0ZWQgZmlsZXMuCgoJKiBpMzg2bHlueC5jIChseW54XzMyX3N3YXBfZXh0X3JlbG9jX2luKTogZ2V0IHJlbG9jIGJpdHMgaW4gaTM4NgoJTHlueC1zcGVjaWZpYyB3YXkuCgoJKiBtNjhrbHlueC1jZi5jOiBOZXcgZmlsZSwgZGVmaW5lcyBjb2ZmIGZvcm1hdCBmb3IgTTY4SyBMeW54T1MuCgkqIG02OGtseW54LmM6IFJlbW92ZSBjb2ZmIHZlY3RvciBkZWZpbml0aW9uLCBub3cgaW4gbTY4a2x5bngtY2YuYy4KCgkqIGNvZmZjb2RlLmggKHNlY190b19zdHlwX2ZsYWdzKTogU2V0IHNlY3Rpb24gZmxhZyB0byBTVFlQX0lORk8KCWZvciAuc3RhYiwgLnN0YWJzdHIgYW5kIC5kZWJ1ZyBzZWN0aW9ucywgYW5kIHNldCBTRUNfREVCVUdHSU5HIGZvcgoJc2VjdGlvbnMgb2YgdHlwZSBTVFlQX0lORk8uICAoZnJvbSBNaW5oIFRyYW4tTGUpCgkoY29mZl9jb21wdXRlX3NlY3Rpb25fZmlsZV9wb3NpdGlvbnMpOiBBZGQgZGlzY2FyZGVkX3NlY3Rpb25zX2NvdW50Cgl0byBhYmZkLT5zZWN0aW9uX2NvdW50LCB3aGljaCBoZWxwcyBgc3RyaXAnIGtlZXAgdGhlIHNpemUKCW9mIHRoZSBleGVjdXRhYmxlIGhlYWRlciBjb25zdGFudC4KCSogY29mZi1pMzg2LmMgKGRpc2NhcmRlZF9zZWN0aW9uc19jb3VudCk6IE5ldyB2YXJpYWJsZSwgaW5pdGlhbGl6ZWQKCXRvIHplcm8uICBGb3IgdXNlIGJ5IGBzdHJpcCcuICBDdXJyZW50bHkgYmVpbmcgdXNlZCBvbmx5IGluIGFpeDM4NgoJY29mZiwgYnV0IG1heSBiZSB1c2VmdWwgZm9yIG90aGVyIGNvZmYgc3lzdGVtcy4gIChmcm9tIE1pbmggVHJhbi1MZSkKCgkqIGNvZmZzd2FwLmggKGNvZmZfc3dhcF9maWxlaGRyX291dCk6IEFkZGVkIGEgbWlzc2luZyBjYXN0LgoKCSogYXJjaGl2ZS5jOiBDb3NtZXRpYyBpbXByb3ZlbWVudHMuCgkqIG9wbmNscy5jOiBDb3NtZXRpYyBpbXByb3ZlbWVudHMuCgkobmV3X2JmZCk6IFJlbW92ZWQgcmVkdW5kYW50IHN0cnVjdHVyZSBzbG90IGluaXQuCgpTYXQgT2N0ICAyIDE4OjQ4OjE3IDE5OTMgIEppbSBLaW5nZG9uICAoa2luZ2RvbkBsaW90aC5jeWdudXMuY29tKQoKCSogY29uZmlnL25ld3MtbWlwcy5taCwgaG9zdHMvbmV3cy1taXBzLmg6IE5ldyBmaWxlcy4KCSogY29uZmlndXJlLmhvc3Q6IFVzZSBuZXdzLW1pcHMgZm9yIG1pcHMtc29ueS1ic2QqLgoKRnJpIE9jdCAgMSAxMzoxNDoxNyAxOTkzICBTdGFuIFNoZWJzICAoc2hlYnNAcnRsLmN5Z251cy5jb20pCgoJKiBjb25maWd1cmUuaW46IGkzODZseW54X2NvZmZfdmVjIHJlcXVpcmVzIGNvZmYtaTM4Nmx5bnguby4KCSogY29mZi1pMzg2bHlueC5jOiBOZXcgZmlsZSwgZGVmaW5lcyBMeW54IHRhcmdldCB2ZWN0b3IgYW5kIG5hbWUsCglpbmNsdWRlcyBjb2ZmLWkzODYuYy4KCSogY29mZi1pMzg2LmMgKGkzODZjb2ZmX3ZlYyk6IEFsbG93IHJlZGVmaW5pdGlvbiBvZiB0YXJnZXQgdmVjdG9yCglzeW1ib2wgYW5kIG5hbWUsIGlmIFRBUkdFVF9TWU0gYW5kL29yIFRBUkdFVF9OQU1FIGFyZSBkZWZpbmVkLgoJKiBpMzg2bHlueC5jOiBSZW1vdmUgY29mZiB2ZWN0b3IgZGVmaW5pdGlvbiBlbnRpcmVseS4KCShseW54XzMyX3N3YXBfZXh0X3JlbG9jX2luKTogRGVmaW5lLgoJKGx5bnhfMzJfc3dhcF9zdGRfcmVsb2NfaW4pOiBEZWZpbmUsIGdldCByZWxvYyBiaXRzIGluIGkzODYKCUx5bngtc3BlY2lmaWMgd2F5LgoJKGx5bnhfMzJfc3dhcF9leHRfcmVsb2Nfb3V0KTogRGVmaW5lLgoJKGx5bnhfMzJfc3dhcF9zdGRfcmVsb2Nfb3V0KTogRGVmaW5lLgoJKGx5bnhfMzJfc2x1cnBfcmVsb2NfdGFibGUpOiBEZWZpbmUsIGNhbGwgTHlueCBzd2FwcGluZyBmbnMuCgkobHlueF8zMl9zcXVpcnRfb3V0X3JlbG9jcyk6IERlZmluZSwgY2FsbCBMeW54IHN3YXBwaW5nIGZucy4KCShseW54XzMyX2Nhbm9uaWNhbGl6ZV9yZWxvYyk6IERlZmluZSwgY2FsbCBMeW54IHN3YXBwaW5nIGZucy4KCShXUklURV9IRUFERVJTKTogRGVmaW5lLCBjYWxsIEx5bnggc3dhcHBpbmcgZm5zLgoKCSogY29uZmlnL2kzODYtbHlueC5tdCAoU0VMRUNUX1ZFQ1MpOiBSZW1vdmUgcmVkdW5kYW50IHZlY3Rvci4KClRodSBTZXAgMzAgMTc6NTA6NTIgMTk5MyAgS2VuIFJhZWJ1cm4gIChyYWVidXJuQGNhbWJyaWRnZS5jeWdudXMuY29tKQoKCSogcmVsb2MuYyAoYmZkX3JlbG9jX2NvZGVfdHlwZSk6IEFkZCBsaW5rYWdlLXRhYmxlIHJlbGF0aXZlCglyZWxvY2F0aW9ucyBvZiBzaXplIDgsIDE2LCAzMi4gIFNvcnQgZ2VuZXJpYyByZWxvY3MgYnkgdHlwZSByYXRoZXIKCXRoYW4gc2l6ZS4gIEFkZGVkIGEgbGl0dGxlIGRvY3VtZW50YXRpb24gdG9vLgoKCSogYW91dHguaCAoaG93dG9fdGFibGVfc3RkKTogQWRkIEJBU0UxNiBhbmQgQkFTRTMyIHJlbG9jcy4KCShUQUJMRV9TSVpFKTogTmV3IG1hY3JvLgoJKHJlbG9jX3R5cGVfbG9va3VwKTogSGFuZGxlIEJGRF9SRUxPQ197MTYsMzJ9X0JBU0VSRUwgZm9yIHN0ZAoJcmVsb2NzLgoJKHN3YXBfc3RkX3JlbG9jX291dCk6IFdyaXRlIGJhc2VyZWwgcmVsb2NzIGNvcnJlY3RseS4KCShzd2FwX3N0ZF9yZWxvY19pbik6IEhhbmRsZSByX2Jhc2VyZWwgZmllbGQuICBBc3NlcnQgdGhhdAoJcl9qbXB0YWJsZSBhbmQgcl9yZWxhdGl2ZSBmaWVsZHMgYXJlIGNsZWFyLCBhbmQgdGhhdCB0aGUgY29tcHV0ZWQKCWluZGV4IGRvZXMgcmVmZXIgdG8gYSBkZWZpbmVkIGVudHJ5IG9mIHRoZSBob3d0byB0YWJsZS4KClR1ZSBTZXAgMjggMTQ6NDc6NDYgMTk5MyAgSmltIEtpbmdkb24gIChraW5nZG9uQGxpb3RoLmN5Z251cy5jb20pCgoJKiBzZWN0aW9uLmMgKGJmZF9tYWtlX3NlY3Rpb25fYW55d2F5KTogTmV3IGZ1bmN0aW9uLgoJKiBzZWN0aW9uLmM6IENoYW5nZSBjb21tZW50cyB0byBzYXkgc2V2ZXJhbCBzZWN0aW9ucyBjYW4gaGF2ZQoJdGhlIHNhbWUgbmFtZS4KCSogYmZkLWluMi5oOiBSZS1nZW5lcmF0ZSB0byByZWZsZWN0IGFib3ZlIGNoYW5nZS4KCSogY29mZmdlbi5jIChtYWtlX2Ffc2VjdGlvbl9mcm9tX2ZpbGUpOiBDYWxsIGJmZF9tYWtlX3NlY3Rpb25fYW55d2F5CglpZiBzdGlsbCBubyBzZWN0aW9uIGFmdGVyIHRoZSBiZmRfY29mZl9tYWtlX3NlY3Rpb25faG9vay4KCSogY29mZmNvZGUuaDogQWRkIGNvbW1lbnQgYWJvdXQgVFdPX0RBVEFfU0VDUy4KClR1ZSBTZXAgMjggMDM6MjI6MjQgMTk5MyAgUGV0ZXIgU2NoYXVlciAgKHBlc0ByZWdlbnQuZS10ZWNobmlrLnR1LW11ZW5jaGVuLmRlKQoKCSogZWNvZmYuYyAoZWNvZmZfc2x1cnBfc3ltYm9saWNfaW5mbyk6ICBBbHdheXMgZGV0ZXJtaW5lIHJhd19zaXplCglleHBsaWNpdGx5LgoJKiBlY29mZi5jIChlY29mZl9zZWNfdG9fc3R5cF9mbGFncywgZWNvZmZfc3R5cF90b19zZWNfZmxhZ3MpOiAgSGFuZGxlCgkuZmluaSBzZWN0aW9uLgoKTW9uIFNlcCAyNyAxODoyOToxOCAxOTkzICBTdGFuIFNoZWJzICAoc2hlYnNAcnRsLmN5Z251cy5jb20pCgoJKiBjb25maWcuYmZkIGNvbmZpZ3VyZS5ob3N0OiBNYXRjaCBvbiAqLWx5bnhvcyogZm9yIEx5bnhPUywKCWFkZCBtNjgqLSotbHlueG9zKi4KCSogY29uZmlndXJlLmluIDogUmVwbGFjZWQgaTM4Nmx5bnhfdmVjIHdpdGggaTM4Nmx5bnhfYW91dF92ZWMKCWFuZCBpMzg2bHlueF9jb2ZmX3ZlYy4KCUFkZGVkIG02OGtseW54X2FvdXRfdmVjIGFuZCBtNjhrbHlueF9jb2ZmX3ZlYy4KCSogdGFyZ2V0cy5jICh0YXJnZXRfdmVjdG9yKTogUmVtb3ZlZCBpMzg2bHlueF92ZWMsIGFkZGVkCgl7aTM4NixtNjhrfWx5bnhfe2FvdXQsY29mZn1fdmVjLgoJKiBpMzg2bHlueC5jOiBBZGRlZCBjb3B5IG9mIGkzODZjb2ZmLmMsIHJlbmFtZWQgYmZkIHRhcmdldCB0bwoJaTM4Nmx5bnhfY29mZl92ZWMuCgkqIG02OGtseW54LmM6IE5ldyBmaWxlLgoJKiBjb25maWcvaTM4Ni1seW54Lm10OiBSZXBsYWNlZCBpMzg2bHlueF92ZWMgd2l0aCBpMzg2bHlueF9hb3V0X3ZlYwoJYW5kIGkzODZseW54X2NvZmZfdmVjLgoJKiBjb25maWcvbTY4ay1seW54Lm10OiBOZXcgZmlsZS4KCSogaG9zdHMvaTM4Nmx5bnguaDogQWRkZWQgZGVmaW5pdGlvbiBvZiBjZnJlZSBhcyBmcmVlIChmcm9tIEVpY2hpbikuCgkqIGhvc3RzL202OGtseW54Lmg6IE5ldyBmaWxlLgoKTW9uIFNlcCAyNyAxODowMDo0MSAxOTkzICBKaW0gS2luZ2RvbiAgKGtpbmdkb25AbGlvdGguY3lnbnVzLmNvbSkKCgkqIGFyY2hpdmUuYzogRGVmaW5lIG9mZnNldG9mIGhlcmUuCgkqIGhvc3RzLyouaDogRG9uJ3QgZGVmaW5lIGl0IGhlcmUuCgpNb24gU2VwIDI3IDE5OjA5OjI3IDE5OTMgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AdHdlZWRsZWR1bWIuY3lnbnVzLmNvbSkKCgkqIGVsZmNvZGUuaCAoYmZkX3NlY3Rpb25fZnJvbV9zaGRyKTogU2V0IGZpbGVwb3MgZm9yIFNIVF9TVFJUQUIKCXNlY3Rpb24uCgpGcmkgU2VwIDI0IDE1OjQ3OjQwIDE5OTMgIEppbSBLaW5nZG9uICAoa2luZ2RvbkBsaW90aC5jeWdudXMuY29tKQoKCSogaHB1eC1jb3JlLmM6IEFkZCBjb21tZW50IGFib3V0IGhwdXggdmVyc2lvbiA3LgoKRnJpIFNlcCAyNCAxNjo1MDoyNiAxOTkzICBTdHUgR3Jvc3NtYW4gIChncm9zc21hbiBhdCBjeWdudXMuY29tKQoKCSogbHlueC1jb3JlLmMgKGx5bnhfY29yZV9maWxlX3ApOiAgQ2hhbmdlIHBlci10aHJlYWQgcmVnaXN0ZXIKCXNlY3Rpb24gbmFtZXMgZnJvbSAucmVnWFhYIHRvIC5yZWcvWFhYIHRvIGF2b2lkIHBhcnNpbmcgYW1iaWd1aXR5CglpbiBnZGIvY29yZWxvdy5jLiAgQ3JlYXRlIGFsaWFzIC5yZWcgc2VjdGlvbiBmb3IgdGhlIGN1cnJlbnRseQoJcnVubmluZyB0aHJlYWQuCgpGcmkgU2VwIDI0IDEzOjIyOjMyIDE5OTMgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AdHdlZWRsZWR1bWIuY3lnbnVzLmNvbSkKCgkqIGxpYmVjb2ZmLmggKGVjb2ZmX2JhY2tlbmRfZGF0YSk6IFJlbW92ZWQgYmlnX21hZ2ljIGFuZAoJbGl0dGxlX21hZ2ljIGZpZWxkcy4KCSogY29mZi1hbHBoYS5jIChhbHBoYV9lY29mZl9iYWNrZW5kX2RhdGEpOiBSZW1vdmVkIGluaXRpYWxpemF0aW9uCglvZiBiaWdfbWFnaWMgYW5kIGxpdHRsZV9tYWdpYy4KCSogY29mZi1taXBzLmMgKG1pcHNfZWNvZmZfYmFkX2Zvcm1hdF9ob29rKTogTWFrZSBzdXJlIG1hZ2ljIG51bWJlcgoJbWF0Y2hlcyBlbmRpYW5lc3Mgb2YgYmZkLgoJKG1pcHNfZWNvZmZfYmFja2VuZF9kYXRhKTogUmVtb3ZlZCBpbml0aWFsaXphdGlvbiBvZiBiaWdfbWFnaWMgYW5kCglsaXR0bGVfbWFnaWMuCgkqIGVjb2ZmLmMgKGVjb2ZmX3NldF9hcmNoX21hY2hfaG9vayk6IFNldCBNSVBTIG1hY2hpbmUgbnVtYmVyCgliYXNlZCBvbiBtYWdpYyBudW1iZXIuICBTdXBwb3J0IHI0MDAwIG1hZ2ljIG51bWJlcnMuCgkoZWNvZmZfZ2V0X21hZ2ljKTogTmV3IGZ1bmN0aW9uLgoJKGVjb2ZmX3dyaXRlX29iamVjdF9jb250ZW50cyk6IFVzZSBlY29mZl9nZXRfbWFnaWMsIG5vdCBmaWVsZHMgaW4KCXRoZSBiYWNrZW5kIHN0cnVjdHVyZS4KCSogY3B1LW1pcHMuYyAoYXJjaF9pbmZvX3N0cnVjdCk6IEFkZGVkIGNhc2UgZm9yIHI2MDAwLgoKCUZvciBNSVBTIGNvbmZpZ3VyYXRpb25zIHB1dCBib3RoIGJpZyBhbmQgbGl0dGxlIGVuZGlhbiB2ZXJzaW9ucyBpbgoJdGhlIGxpc3Qgb2YgdGFyZ2V0czsgdGhlIGNvZGUgaXMgZ2V0dGluZyBjb21waWxlZCBpbiBhbnlob3cuCgkqIGJpZ21pcHMubXQgKFNFTEVDVF9WRUNTKTogRGVmaW5lIHRvIGJlIGVjb2ZmX2xpdHRsZV92ZWMuCgkqIGRlY3N0YXRpb24ubXQgKFNFTEVDVF9WRUNTKTogRGVmaW5lIHRvIGJlIGVjb2ZmX2JpZ192ZWMuCgkqIG1pcHNiZWxmLm10IChTRUxFQ1RfVkVDUyk6IERlZmluZSB0byBiZSBiZmRfZWxmMzJfbGl0dGxlbWlwc192ZWMuCgkqIG1pcHNsZWxmLm10IChTRUxFQ1RfVkVDUyk6IERlZmluZSB0byBiZSBiZmRfZWxmMzJfYml0bWlwc192ZWMuCgkqIHJpc2Nvcy5tdCAoU0VMRUNUX1ZFQ1MpOiBEZWZpbmUgdG8gYmUgZWNvZmZfbGl0dGxlX3ZlYy4KCkZyaSBTZXAgMjQgMDA6NDI6MjMgMTk5MyAgUGV0ZXIgU2NoYXVlciAgKHBlc0ByZWdlbnQuZS10ZWNobmlrLnR1LW11ZW5jaGVuLmRlKQoKCSogb3NmLWNvcmUuYzogIE5ldyBmaWxlIGZvciBPU0YvMSBjb3JlIGZpbGUgc3VwcG9ydC4KCSogY29uZmlnL2FscGhhb3NmLm1oIChIREVGSU5FUyk6ICBBZGQgLURPU0ZfQ09SRS4KCShIREVQRklMRVMpOiAgU2V0IHRvIG9zZi1jb3JlLm8uCgkqIGJmZC1pbjIuaCAodW5pb24gdGRhdGEpOiAgQWRkIG9zZl9jb3JlX2RhdGEgbWVtYmVyLgoJKiB0YXJnZXRzLmM6ICBJZiBPU0ZfQ09SRSBpcyBkZWZpbmVkLCBhZGQgb3NmX2NvcmVfdmVjIHRvIHRhcmdldCBsaXN0LgoJKiBNYWtlZmlsZS5pbiAoT1BUSU9OQUxfQkFDS0VORFMpOiAgQWRkIG9zZi1jb3JlLm8uCgkob3NmLWNvcmUubyk6ICBOZXcgZGVwZW5kZW5jeS4KClRodSBTZXAgMjMgMjE6MDQ6NTMgMTk5MyAgSmltIEtpbmdkb24gIChraW5nZG9uQGxpb3RoLmN5Z251cy5jb20pCgoJKiBUT0RPOiBSZW1vdmUgbm90ZSBhYm91dCBtYWtpbmcgLS13aXRoLWJmZC10YXJnZXRzIHVzZSBjYW5vbmljYWwKCXRhcmdldCBjb25maWd1cmF0aW9uIG5hbWUgKGFscmVhZHkgZG9uZSk7IHJld29yZCBpdGVtIGFib3V0CglzZXBhcmF0aW5nIHJlYWRpbmcgYW5kIHdyaXRpbmcgc3R1ZmYgdG8gbm90IHJlZmVyIHRvIGEKCW5vbi1leGlzdGVudCBpdGVtLgoKCSogZWNvZmYuaCAoZWNvZmZfc2V0X2FyY2hfbWFjaF9ob29rKTogQWNjZXB0IE1JUFNfTUFHSUNfTElUVExFMgoJYW5kIE1JUFNfTUFHSUNfQklHMi4KClRodSBTZXAgMjMgMTE6MDY6MzQgMTk5MyAgS2VuIFJhZWJ1cm4gIChyYWVidXJuQGNhbWJyaWRnZS5jeWdudXMuY29tKQoKCSogZ2VuLWFvdXQuYyAobWFpbik6IE91dHB1dCBuZXdsaW5lIGFmdGVyIGVuZCBvZiBjb21tZW50LCBub3QKCWJlZm9yZS4gIChSZXBvcnRlZCBieSBKb25hdGhhbiBTdG9uZSwKCWpvbmF0aGFuQG9zY2FyLnN0YW5mb3JkLmVkdSkuCgpUaHUgU2VwIDIzIDEwOjQ4OjI3IDE5OTMgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AdHdlZWRsZWR1bWIuY3lnbnVzLmNvbSkKCgkqIGFyY2hpdmUuYyAoY29tcHV0ZV9hbmRfd3JpdGVfYXJtYXApOiBQdXQgd2VhayBzeW1ib2xzIGluIHRoZQoJYXJtYXAuCgoJKiBlbGZjb2RlLmggKGZpeF91cF9zdHJ0YWJzKTogU2V0IHNoX2VudHNpemUgZm9yIHRoZSAuc3RhYgoJc2VjdGlvbiwgbm90IHRoZSAuc3RhYnN0ciBzZWN0aW9uLiAgU2V0IHRoZSB0eXBlIG9mIHRoZSAuc3RhYnN0cgoJc2VjdGlvbiB0byBTSFRfU1RSVEFCLgoJKGVsZl9zZWN0aW9uX2Zyb21fYmZkX3NlY3Rpb24pOiBIYW5kbGUgU0hUX1NUUlRBQiBzZWN0aW9ucy4KCgkqIHNlY3Rpb24uYyAoU0VDX0RFQlVHR0lORyk6IE5ldyBzZWN0aW9uIGZsYWcuCgkqIGVsZmNvZGUuaCAoYmZkX3NlY3Rpb25fZnJvbV9zaGRyKTogSWYgc2VjdGlvbiBpcyBTSFRfUFJPR0JJVFMsCglhbmQgdGhlIG5hbWUgc3RhcnRzIHdpdGggLmRlYnVnLCAubGluZSBvciAuc3RhYiwgc2V0CglTRUNfREVCVUdHSU5HLiAgSWYgU0hUX1NUUlRBQiwgY2hlY2sgZm9yIC5kZWJ1ZyBhbmQgLnN0YWIuCgkqIGVsZjMyLXRhcmdldC5oIChUQVJHRVRfQklHX1NZTSwgVEFSR0VUX0xJVFRMRV9TWU0pOiBBZGRlZAoJU0VDX0RFQlVHR0lORyB0byBzZWN0aW9uX2ZsYWdzLgoJKiBlbGY2NC10YXJnZXQuaCAoVEFSR0VUX0JJR19TWU0sIFRBUkdFVF9MSVRUTEVfU1lNKTogQWRkZWQKCVNFQ19ERUJVR0dJTkcgYW5kIFNFQ19DT0RFIHRvIHNlY3Rpb25fZmxhZ3MuCgkqIGJmZC1pbjIuaDogVXBkYXRlZC4KCldlZCBTZXAgMjIgMTY6MzQ6MTQgMTk5MyAgSWFuIExhbmNlIFRheWxvciAgKGlhbkB0d2VlZGxlZHVtYi5jeWdudXMuY29tKQoKCSogYmZkLmMgKHRkYXRhKTogQWRkIGx5bnhfY29yZV9kYXRhLgoKCSogZWNvZmYuYyAoZWNvZmZfY29tcHV0ZV9zZWN0aW9uX2ZpbGVfcG9zaXRpb25zKTogU2V0IGZpbGVwb3MgZm9yCglzZWN0aW9ucyB3aXRoIFNFQ19MT0FEIHNldCwgZXZlbiBpZiBTRUNfSEFTX0NPTlRFTlRTIGlzIGNsZWFyLgoJKGVjb2ZmX3dyaXRlX29iamVjdF9jb250ZW50cyk6IERvbid0IHNldCBzY25wdHIgdG8gemVybyBqdXN0CgliZWNhdXNlIHNpemUgb2Ygc2VjdGlvbiBpcyB6ZXJvLiAgTmVlZGVkIGZvciBJcml4IDQuMC41Ri4KCldlZCBTZXAgMjIgMDk6NDk6MzIgMTk5MyAgSmltIEtpbmdkb24gIChraW5nZG9uQGxpb3RoLmN5Z251cy5jb20pCgoJKiBjb25maWcuYmZkOiBVc2UgaTk2MC1ib3V0LCBub3QgaTk2MC1jb2ZmIGZvciBpOTYwLSotbmluZHkqLgoKV2VkIFNlcCAyMiAwNzozNDowOSAxOTkzICBTdHUgR3Jvc3NtYW4gIChncm9zc21hbiBhdCBjeWdudXMuY29tKQoKCSogTWFrZWZpbGUuaW4gKE9QVElPTkFMX0JBQ0tFTkRTKTogIEFkZCBseW54LWNvcmUuby4KCSogYmZkLWluMi5oICh0ZGF0YSk6ICBBZGQgbHlueF9jb3JlX2RhdGE7CgkqIGNvbmZpZy5iZmQgY29uZmlndXJlLmhvc3Q6ICBHZXQgcmlkIG9mIHN1cGVyZmx1b3VzIG5ldGJzZCBhbmQKCWx5bnhvcyBlbnRyaWVzLgoJKiBjb25maWd1cmUuaW46ICBBZGQgbHlueC1jb3JlLm8gdG8gTHlueCBjb25maWcuCgkqIGkzODZseW54LmM6ICBBZGQgZGVmcyBmb3IgY29yZSBmaWxlIHN1cHBvcnQuCgkqIGx5bngtY29yZS5jOiAgTmV3IGZpbGUgd2l0aCBMeW54IGNvcmUgZmlsZSBzdXBwb3J0LgoJKiBob3N0cy9pMzg2bHlueC5oOiAgTW92ZSBsb3RzIG9mIGhvc3Qgc3BlY2lmaWMgaW5jbHVkZXMgdG8gaGVyZS4KCUFkZCBkZWYgb2YgSE9TVF9MWU5YLiAgUmVtb3ZlIHVubmVjZXNzYXJ5IGRlZnMuCgpNb24gU2VwIDIwIDE5OjE4OjEwIDE5OTMgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AdHdlZWRsZWR1bWIuY3lnbnVzLmNvbSkKCgkqIGVsZmNvZGUuaCAoYmZkX3NlY3Rpb25fZnJvbV9zaGRyKTogT25seSBzZXQgU0VDX0RBVEEgZm9yIGEKCVNIRl9QUk9HQklUUyBvciBTSFRfU1RSVEFCIHNlY3Rpb24gaWYgU0VDX0FMTE9DIGlzIHNldC4gIE5ldmVyIHNldAoJU0VDX0RBVEEgZm9yIGEgU0hGX05PQklUUyBzZWN0aW9uLgoKCSogbmxtMzItaTM4Ni5jIChubG1faTM4Nl9tYW5nbGVfcmVsb2NzKTogQ2hlY2sgU0VDX0xPQUQgcmF0aGVyCgl0aGFuIFNFQ19DT0RFIHwgU0VDX0RBVEEuICBBZGQgc29tZSBjYXN0cyB0byBhdm9pZCB3YXJuaW5ncy4KCSogbmxtY29kZS5oOiBBZGQgc29tZSBjYXN0cyB0byBhdm9pZCB3YXJuaW5ncy4KCShubG1fd3JpdGVfb2JqZWN0X2NvbnRlbnRzKTogSWdub3JlIHJlbG9jcyBmb3Igc2VjdGlvbnMgdGhhdCBhcmUKCW5laXRoZXIgY29kZSBub3IgZGF0YS4gIEp1c3QgdXNlIHRoZSBzeW1ib2wgdmFsdWUgZm9yIGRlYnVnZ2luZwoJc3ltYm9sczsgZG9uJ3Qgb2Zmc2V0IGJ5IHRoZSBzZWN0aW9uIHZtYS4KCkZyaSBTZXAgMTcgMTg6MDg6NTUgMTk5MyAgSWFuIExhbmNlIFRheWxvciAgKGlhbkB0d2VlZGxlZHVtYi5jeWdudXMuY29tKQoKCSogcmVsb2MuYyAoYmZkX3BlcmZvcm1fcmVsb2NhdGlvbik6IERvbid0IHJldHVybiBhbiBlcnJvciB3aGVuCglwZXJmb3JtaW5nIGEgcmVsb2MgYWdhaW5zdCBhbiB1bmRlZmluZWQgd2VhayBzeW1ib2wuCgkqIHN5bXMuYyAoYmZkX3ByaW50X3N5bWJvbF92YW5kZik6IFNob3cgdmFsdWUgb2YgQlNGX1dFQUsgcmF0aGVyCgl0aGFuIG9ic29sZXRlIEJTRl9FWFBPUlQuCgpGcmkgU2VwIDE3IDAyOjA0OjMxIDE5OTMgIEpvaG4gR2lsbW9yZSAgKGdudUBjeWdudXMuY29tKQoKCSogaG9zdHMve2FscGhhb3NmLmgsIGFtaXguaCwgYXBvbGxvNjguaCwgYXBvbGxvdjY4LmgsCglkZWNzdGF0aW9uLmgsIGRlbHRhODguaCwgZGd1eC5oLCBkb3NlLmgsIGdvMzIuaCwgaGFycmlzLmgsCglocDMwMC5oLCBocDMwMGJzZC5oLCBocHBhYnNkLmgsIGhwcGFocHV4LmgsIGkzODZhaXguaCwgaTM4NmJzZC5oLAoJaTM4NmxpbnV4LmgsIGkzODZseW54LmgsIGkzODZ2LmgsIGkzODZ2NC5oLCBpcml4My5oLCBpcml4NC5oLAoJbWlwc2JzZC5oLCBuY3IzMDAwLmgsIHJzNjAwMC5oLCBydGJzZC5oLCBzb2xhcmlzMi5oLCBzcGFyYy1sbC5oLAoJc3RkLWhvc3QuaCwgc3RyYXR1cy5oLCBzdW4zLmgsIHN5c3Y0LmgsIHRhaG9lLmgsIHVsdHJhMy5oLAoJdmF4dWx0LmgsIHZheHVsdDIuaCwgd2UzMmsuaH06ICBNYWtlIHN1cmUgdGhhdCAib2Zmc2V0b2YiIGlzCglkZWZpbmVkIG9uIGFsbCBob3N0cywgbm93IHRoYXQgYXJjaGl2ZS5jIHVzZXMgaXQuCgpUaHUgU2VwIDE2IDE4OjIwOjMwIDE5OTMgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AdHdlZWRsZWR1bWIuY3lnbnVzLmNvbSkKCgkqIGVsZmNvZGUuaCAoZWxmX21hcF9zeW1ib2xzKTogQ3JlYXRlIHNlY3Rpb24gc3ltYm9scyBmb3IgYWxsCglzZWN0aW9ucywgbm90IGp1c3QgYWxsb2NhdGVkIHNlY3Rpb25zOyBkZWJ1Z2dpbmcgc2VjdGlvbnMgY2FuIGhhdmUKCXJlbG9jcy4KCShlbGZfc3ltYm9sX2Zyb21fYmZkX3N5bWJvbCk6IElmIHRoZXJlIGlzIGFuIG91dHB1dCBzZWN0aW9uLCB1c2UKCXRoZSBzZWN0aW9uIGluZGV4IGZyb20gdGhhdCByYXRoZXIgdGhhbiB0aGUgaW5wdXQgc2VjdGlvbi4KClRodSBTZXAgMTYgMTI6MjA6NTAgMTk5MyAgS2VuIFJhZWJ1cm4gIChyYWVidXJuQGN5Z251cy5jb20pCgoJKiBsaWJiZmQtaW4uaCAoYmZkX2ZsdXNoLCBiZmRfc3RhdCk6IFJlZmxlY3QgSm9obidzIGNoYW5nZXMgdG8KCWxpYmJmZC5oLCB3aGljaCBpcyByZWdlbmVyYXRlZCBmcm9tIHRoaXMgZmlsZS4KCgkqIGJmZC1pbi5oIChzeW10eXBlKTogRGVsZXRlZCB0eXBlZGVmLgoKV2VkIFNlcCAxNSAxMTo0ODozNyAxOTkzICBJYW4gTGFuY2UgVGF5bG9yICAoaWFuQHR3ZWVkbGVkdW1iLmN5Z251cy5jb20pCgoJKiBsaWJiZmQuYyAoQ09FUkNFeHgpOiBDYXN0IHggdG8gYmZkX3NpZ25lZF92bWEgYmVmb3JlIGRvaW5nIHRoZQoJeG9yIGFuZCBzdWJ0cmFjdC4gIE90aGVyd2lzZSBpdCB3aWxsIG5vdCBzaWduIGV4dGVuZCBpZiB0aGUgdHlwZQoJb2YgYmZkX3ZtYSBpcyBsYXJnZXIgdGhhbiBpbnQuCgoJKiBlY29mZnN3YXAuaCAoZWNvZmZfc3dhcF9wZHJfaW4pOiBHZXQgcmVnb2Zmc2V0LCBpb3B0LCBmcmVnb2Zmc2V0CglhbmQgZnJhbWVvZmZzZXQgYXMgc2lnbmVkIG51bWJlcnMuICBGcm9tIFBldGVyIFNjaGF1ZXIuCgpUdWUgU2VwIDE0IDE4OjIwOjM2IDE5OTMgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AdHdlZWRsZWR1bWIuY3lnbnVzLmNvbSkKCgkqIGVsZjMyLWkzODYuYyAoZWxmX2hvd3RvX3RhYmxlKTogQWRkIGJmZF9lbGZfZ2VuZXJpY19yZWxvYwoJc3BlY2lhbCBmdW5jdGlvbiBmb3IgYWxsIHJlbG9jIGVudHJpZXMuCgkqIGVsZjMyLXRhcmdldC5oIChUQVJHRVRfTElUVExFX1NZTSk6IEFkZCBTRUNfQ09ERSB0bwoJc2VjdGlvbl9mbGFncy4KCSogbGliZWxmLmggKGVsZl9zeW1ib2xfdHlwZSk6IFJlbW92ZSBkZXNjLCB0eXBlIGFuZCBvdGhlciBmaWVsZHMuCgkqIE1ha2VmaWxlLmluIChlbGYzMi0qLm8pOiBUaGVzZSBkZXBlbmQgdXBvbiBlbGYzMi10YXJnZXQuaC4KClR1ZSBTZXAgMTQgMTQ6MzQ6NDUgMTk5MyAgU3RldmUgQ2hhbWJlcmxhaW4gIChzYWNAcGh5ZGVhdXguY3lnbnVzLmNvbSkKCgkqIGxpYmJmZC1pbi5oIChzdHJ1Y3QgYXJ0ZGF0YSk6ICBBZGQgYXJtYXBfdGltZXN0YW1wIGFuZAoJYXJtYXBfZGF0ZXBvcyBoZXJlIHRvby4KCk1vbiBTZXAgMTMgMjE6MDM6MTggMTk5MyAgSm9obiBHaWxtb3JlICAoZ251QGNhY29waG9ueS5jeWdudXMuY29tKQoKCUltcHJvdmUgdGltZXN0YW1wIHN1cHBvcnQgaW4gQlNEIGFyY2hpdmUgZmlsZXMgdG8gYXZvaWQgbGlua2VyCgl3YXJuaW5ncy4KCgkqIGxpYmJmZC5oIChzdHJ1Y3QgYXJ0ZGF0YSk6ICBBZGQgYXJtYXBfdGltZXN0YW1wIGFuZCBhcm1hcF9kYXRlcG9zLgoJKGJmZF9mbHVzaCwgYmZkX3N0YXQpOiAgQWRkIHByb3RvdHlwZXMuCgkqIGxpYmJmZC5jIChiZmRfZmx1c2gpOiAgQWRkLCBkb2VzIGZmbHVzaCBvbiBhIEJGRC4KCShiZmRfc3RhdCk6ICBBZGQsIGRvZXMgZnN0YXQgb24gYSBCRkQuCgoJKiBhcmNoaXZlLmMgKF9iZmRfd3JpdGVfYXJjaGl2ZV9jb250ZW50cyk6IEF0IGVuZCBvZiBmaWxlIHdyaXRpbmcsCgl2ZXJpZnkgYW5kIHBvc3NpYmx5IHVwZGF0ZSB0aGUgdGltZXN0YW1wIGluIHRoZSBhcm1hcCwgaWYgYSBCU0QKCWFyY2hpdmUuICBGSVhNRSEgIEtsdWRnZSByZWNvZ25pemVzIEJTRCBhcmNoaXZlLCByYXRoZXIgdGhhbgoJdmVjdG9yaW5nIHByb3Blcmx5LiAgU2hvdWxkIGFkZCB0byB4dmVjLgoJKGNvbXB1dGVfYW5kX3dyaXRlX2FybWFwKTogIE1vdmUgcHJvdG90eXBlIHRvIHRvcCwgYXZvaWQgUFJPVE8uCgkoYnNkX3dyaXRlX2FybWFwKTogU2F2ZSB0aW1lc3RhbXAgYW5kIGZpbGUgbG9jYXRpb24gdGhlcmVvZiwgd2hlbgoJd3JpdGluZyB0aGUgYXJtYXAgaW4gYSBCU0QgZmlsZS4KCShic2RfdXBkYXRlX2FybWFwX3RpbWVzdGFtcCk6ICBOZXcgZnVuY3Rpb24gdG8gY2hlY2sgYW5kCglyZXdyaXRlIHRoZSB0aW1lc3RhbXAuCgoJKiBob3N0cy9zdGQtaG9zdC5oIChvZmZzZXRvZik6ICBEZWZpbmUsIGlmIG5vdCBhbHJlYWR5LCBmb3IgYXJjaGl2ZS5jLgoKU2F0IFNlcCAxMSAxODoxMzo0MiAxOTkzICBKaW0gS2luZ2RvbiAgKGtpbmdkb25AcG9zZWlkb24uY3lnbnVzLmNvbSkKCgkqIGhvc3RzL2kzODZzY28uaDogRGVmaW5lIGEgYnVuY2ggb2Ygc3R1ZmYgZm9yIGNvcmUgZmlsZXMuCgkqIHNjby1jb3JlLmM6IFJlbW92ZSwgcmVwbGFjZSBieSB0cmFkLWNvcmUuYy4KCSogdHJhZC1jb3JlLmM6IElmIEhPU1RfU1RBQ0tfU1RBUlRfQUREUiBpcyBkZWZpbmVkLCB1c2UgaXQuCgkqIGNvbmZpZy9pMzg2c2NvLm1oOiBVc2UgdHJhZC1jb3JlIG5vdCBzY28tY29yZS4KCSogaG9zdHMvaTM4NmlzYy5oLCBjb25maWcvaTM4NmlzYy5taDogUmVtb3ZlLgoJKiBjb25maWd1cmUuaG9zdDogVXNlIGkzODZzY28gZm9yIGlzYy4KCSogY29uZmlnL2kzODYtc2NvLm10OiBSZW1vdmUsIGlkZW50aWNhbCB0byBpMzg2LWNvZmYubXQuCgkqIGNvbmZpZy5iZmQ6IFVzZSBpMzg2LWNvZmYgbm90IGkzODYtc2NvLgoKCSogY29uZmlnLmJmZDogUmVjb2duaXplIGlbMzRdODYtKi1zb2xhcmlzMiogc3BlY2lmaWNhbGx5IHJhdGhlcgoJdGhhbiB1c2luZyAqLSotc29sYXJpczIqIChpNDg2LXVua25vd24tc29sYXJpczIgaXMgaTM4Ni1lbGYsIG5vdAoJaTQ4Ni1lbGYgd2hpY2ggZG9lc24ndCBleGlzdCkuCgpGcmkgU2VwIDEwIDEyOjU2OjM2IDE5OTMgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AdHdlZWRsZWR1bWIuY3lnbnVzLmNvbSkKCgkqIGNvZmZzd2FwLmggKGNvZmZfc3dhcF9hb3V0aGRyX291dCk6IEZvciBBTFBIQUVDT0ZGLCBmb3JjZQoJcGFkZGluZyBmaWVsZCB0byB6ZXJvLgoKCSogY29uZmlnLmJmZCAoaVszNF04Ni0qLW5ldGJzZCopOiBOZXcgdGFyZ2V0OyB1c2UgaTM4Ni1uZXRic2QuCgkqIGNvbmZpZ3VyZS5pbjogUmVtb3ZlIGJvZ3VzIG5ldGJzZDM4NiBoYW5kbGluZy4KCgkqIGNvZmYtbWlwcy5jOiBEb24ndCB3YXJuIGFib3V0IG92ZXJmbG93IGZvciBNSVBTX1JfSk1QQUREUiByZWxvYy4KCUNvcnJlY3Qgb3ZlcmZsb3cgZGV0ZWN0aW9uIHJlcXVpcmVzIG1hdGNoaW5nIHRoZSB1cHBlciBmb3VyIGJpdHMKCW9mIHRoZSBkZXN0aW5hdGlvbiBhZ2FpbnN0IHRoZSBQQy4KClRodSBTZXAgIDkgMTY6NTc6NDYgMTk5MyAgS2VuIFJhZWJ1cm4gIChyYWVidXJuQGNhbWJyaWRnZS5jeWdudXMuY29tKQoKCSogY29uZmlndXJlLmluOiBNYWtlIDY0LWJpdCBzdHVmZiB3b3JrIHdpdGggIi0td2l0aC10YXJnZXRzPWFsbCIuCgpUdWUgU2VwICA3IDE0OjE3OjAyIDE5OTMgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AdHdlZWRsZWR1bWIuY3lnbnVzLmNvbSkKCgkqIGxpYmJmZC1pbi5oOiBSZW1vdmVkIHN3YXBwaW5nIHJvdXRpbmVzIGRlY2xhcmF0aW9ucy4KCSogYmZkLWluLmg6IEFkZGVkIHN3YXBwaW5nIHJvdXRpbmUgZGVjbGFyYXRpb25zLCBhbmQgcmVuYW1lZCB0aGVtCglmcm9tIF9kb18qIHRvIGJmZF8qLgoJKiBsaWJiZmQuYzogUmVuYW1lZCBzd2FwcGluZyByb3V0aW5lcyBmcm9tIF9kb18qIHRvIF9iZmRfKi4KCSogQ2hhbmdlZCBhbGwgY2FsbGVycy4KCSogbGliYmZkLmgsIGJmZC1pbjIuaDogUmVidWlsdC4KCk1vbiBTZXAgIDYgMTU6Mjg6MDcgMTk5MyAgSWFuIExhbmNlIFRheWxvciAgKGlhbkB0d2VlZGxlZHVtYi5jeWdudXMuY29tKQoKCSogZWxmMzItaTM4Ni5jIChlbGZfaG93dG9fdGFibGUpOiBTZXQgcGNyZWxfb2Zmc2V0IHRvIHRydWUgZm9yCglSXzM4Nl9QQzMyLgoKRnJpIFNlcCAgMyAxMzowNjoxMiAxOTkzICBLZW4gUmFlYnVybiAgKHJhZWJ1cm5AY2FtYnJpZGdlLmN5Z251cy5jb20pCgoJKiBjb25maWd1cmUuaW46IFJlb3JnYW5pemVkIHNldHRpbmcgb2YgbWFrZWZpbGUgdmFyaWFibGVzIHNvCgk2NC1iaXQgc3R1ZmYgd29ya3MgYWdhaW4uCgoJKiBsaWJiZmQtaW4uaCAoX2RvX2dldCosIF9kb19wdXQqKTogUmVuYW1lZCB2aWEgbWFjcm9zIHRvIGNsZWFuIHVwCgluYW1lc3BhY2UuCgoJKiBsaWJlbGYuaCAoZWxmMzJfc3ltYm9sX3R5cGUsIGVsZjY0X3N5bWJvbF90eXBlKTogRGVsZXRlZAoJIm5hdGl2ZV9lbGZfc3ltIiBmaWVsZCwgbWVyZ2VkIHRvIG1ha2UgbmV3IHR5cGUgImVsZl9zeW1ib2xfdHlwZSIuCgkoc3RydWN0IGVsZl9vYmpfdGRhdGEpOiBGaWVsZCBzeW1ib2xzIGlzIG5vdyBlbGZfc3ltYm9sX3R5cGUqLgoJRGVsZXRlZCBmaWVsZCByYXdfc3ltcy4KCShvYmpfc3ltYm9scyk6IFJlbW92ZSBjYXN0LgoJKG9ial9yYXdfc3ltcyk6IERlbGV0ZWQuCgkqIGVsZmNvZGUuaCAoZWxmX3NsdXJwX3N5bWJvbF90YWJsZSk6IERvbid0IHNldCByYXdfc3ltcyBvcgoJbmF0aXZlX2VsZl9zeW0gZmllbGRzLgoJKiBlbGYzMi1ocHBhLmM6IENoYW5nZWQgdXNlcyBvZiBlbGYzMl9zeW1ib2xfdHlwZSB0bwoJZWxmX3N5bWJvbF90eXBlLgoKCUZyb20gUGV0ZSBIb29nZW5ib29tIGFuZCBKZWZmIExhdzoKCgkqIGVsZjMyLWhwcGEuYyAoRUxGX01BWFBBR0VTSVpFKTogRGVmaW5lLgoKCSogZWxmMzItaHBwYS5jIChlbGZfaHBwYV90Y19zeW1ib2wpOiBJZiB0aGUgYXJndW1lbnQgcmVsb2NhdGlvbgoJYml0cyBhcmUgemVybyAoZS5nLiwgdGhleSBzcGVjaWZ5IG5vIHJlbG9jYXRpb25zKSwgdGhlbiBkbyBub3QKCWV2ZW4gYm90aGVyIGFkZGluZyB0aGVpciBlbnRyaWVzIHRvIHRoZSBzeW1leHRuIHNlY3Rpb24uCgoJKiBlbGYzMi1ocHBhLmMgKGVsZl9ocHBhX3RjX3N5bWJvbCk6IEFueSBmdW5jdGlvbiwgcmVnYXJkbGVzcwoJb2Ygc2NvcGUgY2FuIGhhdmUgYW4gYXJndW1lbnQgcmVsb2NhdGlvbiBzdHViLgoKCSogZWxmMzItaHBwYS5jOiAoRWxmMzJfaHBwYV9TdHViX2Rlc2NyaXB0aW9uKTogIFJlbmFtZSB0aGlzCglzdHJ1Y3R1cmUgYW5kIHR5cGUgdG8gZWxmMzJfaHBwYV9zdHViX2Rlc2NyaXB0aW9uLiAgVGhpcyBtYWtlcwoJaXQgY29uc2lzdGVudCB3aXRoIHRoZSBHTlUgY29kaW5nIGNvbnZlbnRpb25zLgoJKGVsZjMyX2hwcGFfc3R1Yl9kZXNjcmlwdGlvbik6IEFkZGVkIGEgJ25leHQnIGZpZWxkIHRvIGFsbG93CglsaW5raW5nIG9mIHN0dWIgZGVzY3JpcHRpb24gc3RydWN0dXJlcy4KCShlbGYzMl9ocHBhX3N0dWJfZGVzY3JpcHRpb24pOiBBZGRlZCBhICdzdHViX2xpc3RQJyBmaWVsZCB0bwoJa2VlcCB0cmFjayBvZiBpbmRpdmlkdWFsIHN0dWJzLgoJKEVsZjMyX2hwcGFfU3R1Yl9saXN0LCBFbGYzMl9ocHBhX1N0dWJfbGlzdF9zdHJ1Y3QpOiAgUmVtb3ZlZC4KCUNvbWJpbmVkIHdpdGggdGhlIGVsZjMyX2hwcGFfc3R1Yl9kZXNjcmlwdGlvbiBzdHJ1Y3R1cmUuCgkoZWxmMzJfaHBwYV9zdHViX25hbWVfbGlzdCk6ICBOZXcgdHlwZSB0byBrZWVwIHRyYWNrIG9mCglpbmRpdmlkdWFsIHN0dWJzLgoJKGFkZF9zdHViKTogIFJlbW92ZWQuCgkoYWRkX3N0dWJfYnlfbmFtZSk6IE5ldyBmdW5jdGlvbi4KCShmaW5kX3N0dWJfYnlfbmFtZSk6IE5ldyBmdW5jdGlvbi4KCShocHBhX2VsZl9idWlsZF9hcmdfcmVsb2Nfc3R1Yik6IEFsbG93IHJldXNpbmcgc3R1YnMgdGhhdAoJYWxyZWFkeSBleGlzdC4KCShocHBhX2VsZl9idWlsZF9sb25nX2JyYW5jaF9zdHViKTogQWxsb3cgcmV1c2luZyBzdHVicyB0aGF0CglhbHJlYWR5IGV4aXN0LgoKCSogZWxmMzItaHBwYS5jOiAocmV0dmFsX21pc21hdGNoZXMpOiAgVGhlIGRpcmVjdGlvbiBvZiBhcmd1bWVudAoJcmVsb2NhdGlvbiB3YXMgcmV2ZXJzZWQuCgkoaHBwYV9lbGZfYnVpbGRfYXJnX3JlbG9jX3N0dWIpOiBSZXR1cm4gYWRkcmVzcyB3YXMgbm90IGJlaW5nCglyZXN0b3JlZC4KCShocHBhX2VsZl9hcmdfcmVsb2NfbmVlZGVkX3ApOiBBZGQgYXJndW1lbnQgY29udGFpbmluZyBjYWxsZXIKCWFyZ3VtZW50IHJlbG9jYXRpb24gYml0cyBzbyB0aGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIGluIHRoZSBjaGVjawoJZm9yIHBsYWJlbCBzdHVicy4KCShocHBhX2VsZl9zdHViX2NoZWNrKTogUGFzcyBjYWxsZXIgYXJndW1lbnQgcmVsb2NhdGlvbiBiaXRzIGludG8KCWhwcGFfZWxmX2FyZ19yZWxvY19uZWVkZWRfcCgpLgoJKGhwcGFfbG9va19mb3Jfc3R1YnNfaW5fc2VjdGlvbik6IEFkZCBjaGVjayBmb3IgcGxhYmVsIHN0dWJzIGFuZAoJcGFzcyBjYWxsZXIgYXJndW1lbnQgcmVsb2NhdGlvbiBiaXRzIGludG8KCWhwcGFfZWxmX2FyZ19yZWxvY19uZWVkZWRfcCgpLgoKVGh1IFNlcCAgMiAwMDo1OTo1NSAxOTkzICBKaW0gS2luZ2RvbiAgKGtpbmdkb25AbGlvdGguY3lnbnVzLmNvbSkKCgkqIGxpYmhwcGEuaCAoaHBwYV9maWVsZF9hZGp1c3QpOiBSZW1vdmUgdW51c2VkIGBpbml0X3ZhbHVlJyB2YXJpYWJsZS4KCgkqIGhvc3RzL2RlbHRhODh2NC5oOiBOZXcgZm9yIFNWUjQuCgkqIGNvbmZpZ3VyZS5ob3N0OiBVc2UgaXQuCgpXZWQgU2VwICAxIDE0OjIzOjMyIDE5OTMgIEppbSBLaW5nZG9uICAoa2luZ2RvbkBsaW90aC5jeWdudXMuY29tKQoKCSogbGliYW91dC5oLCBuZXRic2QzODYuYzogQ2hhbmdlIE1fSTM4NiB0byBNXzM4Nl9ORVRCU0QuICBNX0kzODYKCWlzIGFuIFNDTyBwcmUtZGVmaW5lLgoKVHVlIEF1ZyAzMSAxMjo1MDoxOSAxOTkzICBJYW4gTGFuY2UgVGF5bG9yICAoaWFuQHR3ZWVkbGVkdW1iLmN5Z251cy5jb20pCgoJKiBubG1jb2RlLmggKG5sbV9vYmplY3RfcCk6IFNldCBIQVNfU1lNUyBpZiB0aGVyZSBhcmUgZXh0ZXJuYWwKCXJlZmVyZW5jZXMuCgkobmxtX3N3YXBfYXV4aWxpYXJ5X2hlYWRlcnNfe2luLG91dH0pOiBUaGUgY29weXJpZ2h0IGxlbmd0aCBpcwoJb25seSBvbmUgYnl0ZS4KCShubG1fZ2V0X3N5bXRhYl91cHBlcl9ib3VuZCk6IEluY2x1ZGUgZGVidWdnaW5nIHN5bWJvbHMgaW4gc3ltYm9sCgljb3VudC4KCShubG1fc2x1cnBfc3ltYm9sX3RhYmxlKTogTWFrZSBzeW1sZW5ndGggdW5zaWduZWQuICBSZWFkIGRlYnVnZ2luZwoJc3ltYm9scyBhcyBCRkQgbG9jYWwgc3ltYm9scy4KCShubG1fd3JpdGVfb2JqZWN0X2NvbnRlbnRzKTogRG9uJ3QgYm90aGVyIHdyaXRpbmcgb3V0IGV4cG9ydGVkCglzeW1ib2xzIG1vcmUgdGhhbiBvbmNlOyB0aGV5IG5vdyBhcHBlYXIgaW4gdGhlIHN5bWJvbCB0YWJsZSBtb3JlCgl0aGFuIG9uY2UgKHdpdGggYW5kIHdpdGhvdXQgYSBwcmVmaXgpIGlmIG5lY2Vzc2FyeS4gIFNldCBvZmZzZXQKCXZhbHVlcyB0byBiZSBub24temVybyBhcyBOTE1MSU5LIGRvZXMuCgpUdWUgQXVnIDMxIDEyOjA3OjQzIDE5OTMgIEppbSBLaW5nZG9uICAoa2luZ2RvbkBsaW90aC5jeWdudXMuY29tKQoKCSogbGliaHBwYS5oOiBSZXN0b3JlICN1bmRlZnMgb2YgZV9mc2VsIGFuZCBvdGhlciBlXyogc3ltYm9scy4KCkZyaSBBdWcgMjcgMTY6NDM6MzUgMTk5MyAgS2VuIFJhZWJ1cm4gIChyYWVidXJuQGNhbWJyaWRnZS5jeWdudXMuY29tKQoKCSogc2VjdGlvbi5jIChzdHJ1Y3Qgc2VjKTogTW92ZSBwb3NpdGlvbiBvZiB1c2VyX3NldF92bWEsIGFuZAoJZG9jdW1lbnQgaXQuCgkoU0VDX0JBTElHTik6IERpc2FibGUgZm9yIG5vdy4gIEkgZG9uJ3QgdGhpbmsgaXQncyBjdXJyZW50bHkgdXNlZC4KCgkqIGVsZjMyLWhwcGEuYyAoZWxmX2hwcGFfaG93dG9fdGFibGUpOiBOb3cgc3RhdGljLgoJKHN5bWV4dF9yb290UCwgc3ltZXh0X2xhc3RQLCBnbG9iYWxfdmFsdWUsIEdPVF92YWx1ZSwKCWdsb2JhbF9zeW1ib2wsIGdsb2JhbF9zeW1fZGVmaW5lZCwgc3ltZXh0bl9jb250ZW50cywKCXN5bWV4dG5fY29udGVudHNfcmVhbF9zaXplLCBlbGZfaHBwYV9zdHViX3Jvb3RQLAoJZWxmMzJfaHBwYV9zeW1leHRuX21hcCwgZWxmMzJfaHBwYV9zeW1leHRuX21hcF9zaXplKTogUmVseSBvbgoJZGVmYXVsdCBpbml0aWFsaXphdGlvbi4KCShocHBhX2VsZl9nZW5fcmVsb2NfdHlwZSk6IE1hY3JvICJVTkRFRklORUQiIGRvZXNuJ3QgbmVlZCBhCgl0cmFpbGluZyBzZW1pY29sb24uCgkoaHBwYV9sb29rX2Zvcl9zdHVic19pbl9zZWN0aW9uKTogSW50cm9kdWNlIHRlbXBvcmFyaWVzIHRvIG1ha2UKCWNvZGUgbW9yZSByZWFkYWJsZSBpbiA4MCBjb2x1bW5zLgoKCSogbGliaHBwYS5oIChhbGwgZnVuY3Rpb25zKTogTm93IGlubGluZSB1bmRlciBHTlUgQy4KCglNb3JlIHBhdGNoZXMgZnJvbSBKZWZmIExhdzoKCgkqIGVsZjMyLWhwcGEuYyAoQVJfV0FSTik6IEdpdmUgYXJndW1lbnQgd2hpY2ggY2F1c2VkIHRoZQoJaW52YWxpZCBhcmd1bWVudCByZWxvY2F0aW9uLgoJKEFSX1VOSU1QKTogRGVsZXRlIHVudXNlZCBtYWNyby4KCShocHBhX2VsZl9zZXRfc2VjdGlvbl9jb250ZW50cyk6IEFsd2F5cyByZXR1cm4gYSB2YWx1ZS4KCShlbGYzMl9ocHBhX2JhY2tlbmRfdGFibGVfcHJvY2Vzc2luZyk6IExpa2V3aXNlLgoJKGVsZjMyX2hwcGFfYmFja2VuZF9zZWN0aW9uX3Byb2Nlc3Npbmc6IExpa2V3aXNlLgoKCSogc29tLmM6IE5ldyBmaWxlIGNvbnRhaW5pbmcgU09NIHNwZWNpZmljIGNvZGUgZXh0cmFjdGVkCglmcm9tIGhwcGEuYwoKCSogc29tLmg6IE5ldyBmaWxlIGNvbnRhaW5pbmcgU09NIHNwZWNpZmljIGNvZGUgZXh0cmFjdGVkCglmcm9tIGxpYmhwcGEuaAoKCSogaHBwYS5jOiBEZWxldGVkLgoKCSogbGliaHBwYS5oOiBEZWxldGUgU09NIHNwZWNpZmljIGNvZGUuICBBZGQgZ2VuZXJpYyBQQQoJY29kZSB3aGljaCBjYW4gYmUgc2hhcmVkIGJ5IGJvdGggU09NIGFuZCBFTEYgYmFja2VuZHMuCgoJKiBNYWtlZmlsZS5pbjogUmVwbGFjZSBocHBhLmMgd2l0aCBzb20uYy4gIGVsZjMyLWhwcGEubwoJZGVwZW5kcyBvbiBsaWJocHBhLmggbm93LgoKCSogY29uZmlndXJlLmluIChocHBhX3ZlYyk6IE5lZWRzIHNvbS5vIG1vZHVsZSBpbnN0ZWFkIG9mCglocHBhLm8uCgoJKiBlbGYzMi1ocHBhLmM6IEluY2x1ZGUgbGliaHBwYS5oLiAgRG8gbm90IGRlZmluZQoJQllURVNfSU5fV09SRC4KCgkqIGVsZjMyLWhwcGEuaCAoaHBwYV9yZWxvY19maWVsZF9zZWxlY3Rvcl90eXBlKTogRGVsZXRlCglub3cgbGl2ZXMgaW4gbGliaHBwYS5oLgoJKGhwcGFfcmVsb2NfZmllbGRfc2VsZWN0b3JfdHlwZV9hbHQpOiBMaWtld2lzZS4KCgkqIGhvc3RzL2hwcGFic2QuaDogSW5jbHVkZSA8c3RkbGliLmg+IGFuZCA8dW5pc3RkLmg+LiAgRG8gbm90CglkZWZpbmUgbWFsbG9jIG9yIGZyZWUuCgoJKiBjb25maWcvaHBwYS1lbGYubXQgKFNFTEVDVF9BUkNISVRFQ1RVUkVTKTogRG9uJ3QgZGVmaW5lCglTRUxFQ1RfVkVDUy4KCgkqIGVsZjMyLWhwcGEuYyAoaHBwYV9lbGZfcmVsb2NhdGVfdW53aW5kX3RhYmxlKTogRGVsZXRlIHVudXNlZAoJdmFyaWFibGVzLgoJKGVsZl9ocHBhX3JlbG9jX3R5cGVfbG9va3VwKTogTGlrZXdpc2UuCgkoZWxmX2hwcGFfdGNfbWFrZV9zZWN0aW9ucyk6IExpa2V3aXNlLgoJKGhwcGFfZWxmX2FyZ19yZWxvY19uZWVkZWRfcCk6IExpa2V3aXNlLgoJKGhwcGFfZWxmX2J1aWxkX2xvbmdfYnJhbmNoX3N0dWIpOiBMaWtld2lzZS4KCShlbGZfcmVsb2NfbWFwKTogRGVsZXRlLCBubyBsb25nZXIgdXNlZC4KCShlbGZfaHBwYV9yZWxvY19tYXApOiBMaWtld2lzZS4KCShlbGYzMl9ocHBhX3N5bWV4dG5fbWFwX21heF9zaXplKTogTGlrZXdpc2UuCgkoZWxmMzJfaHBwYV9nZXRfc3ltX2V4dG4pOiBBYm9ydCBpZiB0eXBlIGlzIGJvZ3VzLgoKCSogZWxmMzItaHBwYS5jIChlbGYzMl9ocHBhX2JhY2tlbmRfZmFrZV9zZWN0aW9ucyk6IEFkZCBwcm9jZXNzaW5nCglvZiB0aGUgLmhwcGFfdW53aW5kIHNlY3Rpb24uCgpXZWQgQXVnIDI1IDE2OjEzOjQ5IDE5OTMgIEsuIFJpY2hhcmQgUGl4bGV5ICAocmljaEBzZW5kYWkuY3lnbnVzLmNvbSkKCgkqIGNvbmZpZy5iZmQ6IHJlY29nbml6ZSBtODgxMTAuCgpUdWUgQXVnIDI0IDE2OjMyOjM1IDE5OTMgIEtlbiBSYWVidXJuICAocmFlYnVybkBjYW1icmlkZ2UuY3lnbnVzLmNvbSkKCglNZXJnZWQgY2hhbmdlcyBmcm9tIEplZmYgTGF3IGFuZCBQZXRlIEhvb2dlbmJvb20gYXQgVXRhaDoKCgkqIGVsZmNvZGUuaCAoZWxmX3NlY3Rpb25fZnJvbV9iZmRfc2VjdGlvbik6IEFkZCBkZXRlY3Rpb24gb2YKCVNIVF9OT1RFIHNlY3Rpb25zLgoKCSogZWxmMzItaHBwYS5jOgoJKGhwcGFfZWxmX2J1aWxkX2xvbmdfYnJhbmNoX3N0dWIsaHBwYV9lbGZfbG9uZ19icmFuY2hfbmVlZGVkX3ApOgoJTmV3IGZ1bmN0aW9ucyBmb3Igc3VwcG9ydCBvZiBsb25nIGJyYW5jaCBzdHVicy4KCShocHBhX2VsZl9zdHViX2NoZWNrLGhwcGFfbG9va19mb3Jfc3R1YnNfaW5fc2VjdGlvbik6ICBBZGQKCWNoZWNrIGZvciBsb25nIGJyYW5jaCBzdHVicy4KCShocHBhX2xvb2tfZm9yX3N0dWJzKTogIFVudXNlZCBmdW5jdGlvbi4gIFJlbW92ZWQuCgkoaHBwYV9lbGZfc2V0X3NlY3Rpb25fY29udGVudHMpOiBJbXBsZW1lbnQgYSBQQS9FTEYtc3BlY2lmaWMKCXZlcnNpb24gb2YgYmZkX3NldF9zZWN0aW9uX2NvbnRlbnRzLgoJKGhwcGFfZWxmX2xvbmdfYnJhbmNoX25lZWRlZF9wKTogT25seSBvdXRwdXQgZGVidWdnaW5nIGRpYWdub3N0aWNzCgl3aGVuIEJGRCBpcyBjb25maWd1cmVkIGZvciBkZWJ1Z2dpbmcuCgoJKiBlbGYzMi1ocHBhLmM6IChlbGYzMl9ocHBhX2dldF9zeW1leHRuX2NoYWluKTogIE5ldyBmdW5jdGlvbgoJdG8gcmV0dXJuIGEgbGlzdCBvZiBzeW1ib2xzIHRoYXQgaGF2ZSBub24temVybyBhcmd1bWVudAoJcmVsb2NhdGlvbiBiaXRzLgoJKGhwcGFfZWxmX3N0dWJfZmluaXNoKTogTWFrZSBzdXJlIHN0dWIgZ2VuZXJhdGlvbiBpcyBkb25lIG9ubHkKCW9uY2UuCgoJKiBlbGYzMi1ocHBhLmM6IChocHBhX2VsZl9zdHViX3JlbG9jKTogIE5ldyBmdW5jdGlvbiBmb3IKCWdlbmVyYXRpb24gcmVsb2NhdGlvbiBlbnRyaWVzIHdpdGhpbiBhIHN0dWIuCgkoaHBwYV9lbGZfYnVpbGRfYXJnX3JlbG9jX3N0dWIpOiBDb3JyZWN0aW9ucyB0byBhcmd1bWVudAoJcmVsb2NhdGlvbiBzdHVicy4KCgkqIGVsZjMyLWhwcGEuYzogTmV3ICNkZWZpbmUncyBmb3IgYXJndW1lbnQgcmVsb2NhdGlvbiB0eXBlcy4KCShtaXNtYXRjaGVzLCByZXR2YWxfbWlzbWF0Y2hlcyk6IFVwZGF0ZWQgdG8gcmVmbGVjdCBuZXcKCWFyZ3VtZW50IHJlbG9jYXRpb24gdHlwZXMuCgkoQ1VSUkVOVF9TVFVCX09GRlNFVCk6IE5ldyBtYWNyby4KCgkqIGVsZmNvZGUuaCAobWFwX3Byb2dyYW1fc2VnbWVudHMpOiBTZXQgdGhlIFBGX1ggYml0IGZvciBkYXRhCglzZWdtZW50cy4KCgkqIGVsZjMyLWhwcGEuYzogKGVsZl9ocHBhX2hvd3RvX3RhYmxlKTogQWRkCglSX0hQUEFfU1RVQl9DQUxMXzE3IGZvciBzdXBwb3J0IG9mIGxpbmtlciBzdHViIGdlbmVyYXRpb24uCgkoaHBwYV9lbGZfcmVsb2MpOiBBZGQgc3VwcG9ydCBvZiBSX0hQUEFfU1RVQl9DQUxMXzE3CglyZWxvY2F0aW9uIHR5cGUuCgoJKiBlbGYzMi1ocHBhLmg6IChlbGYzMl9ocHBhX3JlbG9jX3R5cGUpOiBBZGQKCVJfSFBQQV9TVFVCX0NBTExfMTcgZm9yIHN1cHBvcnQgb2YgbGlua2VyIHN0dWIgZ2VuZXJhdGlvbi4KCgkqIGhwcGFfc3R1YnMuaDogQWRkIG5ldyBpbnN0cnVjdGlvbnMgdGhhdCBhcmUgdXNlZCBpbiBsaW5rZXIKCXN0dWIgZ2VuZXJhdGlvbi4KCgkqIGVsZjMyLWhwcGEuYyAoaHBwYV9lbGZfcmVsb2NhdGVfdW53aW5kX3RhYmxlKTogVGhlIG9mZnNldHMgaW4gYW4KCXVud2luZCBkZXNjcmlwdG9yIHdlcmUgaW5jb3JyZWN0LgoKCSogbGliZWxmLmggKGJmZF9lbGZfZmluZF9zZWN0aW9uKTogRGVjbGFyZS4KCgkqIGVsZjMyLWhwcGEuYzogKGVsZjMyX2hwcGFfYmFja2VuZF9zeW1ib2xfcHJvY2Vzc2luZyk6ICBOZXcKCWZ1bmN0aW9uIGluIHBsYWNlIG9mIGdsb2JhbF9zeW0gZmllbGQgaW4gZWxmX2JhY2tlbmRfZGF0YQoJc3RydWN0dXJlLgoJKGVsZjMyX2hwcGFfYmFja2VuZF9zeW1ib2xfdGFibGVfcHJvY2Vzc2luZywKCWVsZjMyX2hwcGFfYmFja2VuZF9zZWN0aW9uX3Byb2Nlc3NpbmcsCgllbGYzMl9ocHBhX2JhY2tlbmRfZmFrZV9zZWN0aW9ucywKCWVsZjMyX2hwcGFfYmFja2VuZF9zZWN0aW9uX2Zyb21fc2hkciwKCWVsZjMyX2hwcGFfYmFja2VuZF9zZWN0aW9uX2Zyb21fYmZkX3NlY3Rpb24pOiAgTmV3IGZ1bmN0aW9ucyB0bwoJcHJvdmlkZSBzdXBwb3J0IG9mIHN5bWJvbCBleHRlbnNpb24gc2VjdGlvbnMgYW5kIGFyZ3VtZW50CglyZWxvY2F0aW9uIHN0dWJzLgoJKGVsZl9pbmZvX3RvX2hvd3RvKTogIFJlbW92ZSBjYWxsIHRvIGFib3J0KCkuCgoJKiBlbGYzMi10YXJnZXQuaDogIFN1cHBvcnQgZm9yIHNwZWNpYWwgcHJvY2Vzc2luZyBieSB0aGUgYmFja2VuZC4KCShzdHJ1Y3QgZWxmX2JhY2tlbmRfZGF0YSk6ICBBZGRlZCBlbGZfYmFja2VuZF9zeW1ib2xfcHJvY2Vzc2luZywKCWVsZl9iYWNrZW5kX3N5bWJvbF90YWJsZV9wcm9jZXNzaW5nLAoJZWxmX2JhY2tlbmRfc2VjdGlvbl9wcm9jZXNzaW5nLCBlbGZfYmFja2VuZF9zZWN0aW9uX2Zyb21fc2hkciwKCWVsZl9iYWNrZW5kX2Zha2Vfc2VjdGlvbnMsIGFuZAoJZWxmX2JhY2tlbmRfc2VjdGlvbl9mcm9tX2JmZF9zZWN0aW9uIGZpZWxkcy4KCSogZWxmY29kZS5oOiAoYmZkX3NlY3Rpb25fZnJvbV9zaGRyKTogQWRkIGEgY2hlY2sgZm9yCglwcm9jZXNzb3Itc3BlY2lmaWMgc2VjdGlvbiB0eXBlcy4KCShlbGZfZmFrZV9zZWN0aW9ucyk6ICBBZGQgYSBjaGVjayBmb3IgcHJvY2Vzc29yLXNwZWNpZmljCglzZWN0aW9uIHR5cGVzLgoJKGJmZF9lbGYzMl93cml0ZV9vYmplY3RfY29udGVudHMpOiAgQWRkIGEgY2hlY2sgdG8gc2VlIGlmCgl0aGVyZSBpcyBhbnkgZmluYWwgc2VjdGlvbiBwcm9jZXNzaW5nIHRvIGJlIGRvbmUgYnkgdGhlCgliYWNrZW5kLgoJKGVsZl9zZWN0aW9uX2Zyb21fYmZkX3NlY3Rpb24pOiAgQWRkIGEgY2hlY2sgZm9yCglwcm9jZXNzb3Itc3BlY2lmaWMgc2VjdGlvbiB0eXBlcy4KCShlbGZfc2x1cnBfc3ltYm9sX3RhYmxlKTogIFJlbW92ZSByZWZlcmVuY2UgdG8gZ2xvYmFsX3N5bSBpbiB0aGUKCWVsZl9iYWNrZW5kX2RhdGEgc3RydWN0dXJlLiAgUmVwbGFjZSBpdCB3aXRoIGEgY2FsbCB0bwoJZWxmX2JhY2tlbmRfc3ltYm9sX3Byb2Nlc3NpbmcuCgkqIGxpYmVsZi5oOiBSZW1vdmUgZ2xvYmFsX3N5bSBmaWVsZCBpbiB0aGUgZWxmX2JhY2tlbmRfZGF0YQoJc3RydWN0dXJlLiAgUmVwbGFjZSBpdCB3aXRoIGEgc2VyaWVzIG9mIGJhY2tlbmQtc3BlY2lmaWMKCWZ1bmN0aW9ucy4KCgkqIGVsZjMyLWhwcGEuYyAoaHBwYV9lbGZfc3R1Yl9icmFuY2hfcmVsb2MpOiBUaGUgZm9ybWFsIGFyZ3VtZW50CglzdHViX3N5bSBzaG91bGQgYmUgY2FsbGVkIHRhcmdldF9zeW0uCgkoaHBwYV9lbGZfYnVpbGRfYXJnX3JlbG9jX3N0dWIpOiBSZWZlciB0byB0aGUgc3R1YiBiZmQgKGFiZmQpCglyYXRoZXIgdGhhbiB0aGUgb3V0cHV0IGJmZCAob3V0cHV0X2JmZCkuCgkoaHBwYV9lbGZfcmVsb2MpOiBHZXQgcmlkIG9mIHJlZmVyZW5jZXMgdG8gdGhlIGdsb2JhbF9zeW0gZmllbGQgaW4KCXRoZSBlbGZfYmFja2VuZF9kYXRhIHN0cnVjdHVyZS4KCgkqIGVsZmNvZGUuaCAoZWxmX2Zha2Vfc2VjdGlvbnMpOiBDaGVjayB0aGUgY29ycmVjdCBjb25kaXRpb24gZm9yCgkuYnNzLiAgQWxzbywgZGV0ZWN0IHRoZSBleGlzdGVuY2Ugb2YgYSAubm90ZSBzZWN0aW9uLgoKCSogZWxmMzItaHBwYS5jIChocHBhX2VsZl9yZWxvY2F0ZV9pbnNuKTogcl9mb3JtYXQgYXJndW1lbnQgc2hvdWxkCgloYXZlIGJlZW4gcl9maWVsZC4KCgkqIGhvc3RzL2hwcGFic2QuaCAoSE9TVF9NQUNISU5FX0FSQ0gpOiBSZWZlcmVuY2UgdG8gYmZkX2FyY2hfbTY4awoJc2hvdWxkIGJlIGEgcmVmZXJlbmNlIHRvIGJmZF9hcmNoX2hwcGEuCgoJKiBocHBhLmMgKGhwcGFfdmVjKTogUmVwbGFjZSBiZmRfZmFsc2Ugd2l0aCBfYmZkX2R1bW15X3RhcmdldCBpbgoJdGhlIGJmZF9jaGVja19mb3JtYXQgc3RydWN0dXJlIHRvIGF2b2lkIGEgdHlwZSBtaXNtYXRjaC4KCk1vbiBBdWcgMjMgMTk5MyAgU2VhbiBGYWdhbiAgKHNlZkBjeWdudXMuY29tKQoJCSBhbmQgSmltIEtpbmdkb24gIChraW5nZG9uQGN5Z251cy5jb20pCgoJQWRkIE5ldEJTRCBzdXBwb3J0OgoJKiBuZXRic2QzODYuYzogTmV3IGZpbGUuCgkqIGFvdXR4Lmg6IE1ha2Ugc3ltX2lzX2RlYnVnZ2VyX2luZm8gdHJ1ZSBmb3IgTl9GTi4KCSogTWFrZWZpbGUuaW4sIGFvdXQtdGFyZ2V0LmgsIGNvbmZpZy5iZmQsIGNvbmZpZ3VyZS5ob3N0LCBjb25maWd1cmUuaW4sCglsaWJhb3V0LmgsIHRhcmdldHMuYzogT3RoZXIgY2hhbmdlcy4KCkZyaSBBdWcgMjAgMTc6MDQ6NTkgMTk5MyAgSmltIEtpbmdkb24gIChraW5nZG9uQGxpb3RoLmN5Z251cy5jb20pCgoJKiBjb25maWcvbTg4ay1lbGYubXQ6IE5ldyBmaWxlLgoJKiBjb25maWcuYmZkOiBVc2UgaXQgZm9yIG04OCotKi1zeXN2NCouCgpGcmkgQXVnIDIwIDE1OjE2OjU4IDE5OTMgIEtlbiBSYWVidXJuICAocmFlYnVybkBjYW1icmlkZ2UuY3lnbnVzLmNvbSkKCgkqIGVsZmNvZGUuaCAoZWxmX2J1aWxkX3BoZHJzKTogVW51c2VkIGZ1bmN0aW9uIGRlbGV0ZWQuCgkoYmZkX3NoZHJfZnJvbV9zZWN0aW9uKTogRGl0dG8uCgkod3JpdGVfcmVsb2NzKTogRG9uJ3QgY2hhbmdlIHNlY3Rpb24gY29udGVudHMgZm9yIGFkZGVuZC4KCShlbGZfbG9jYXRlX3NoKTogUmV0dXJuIHR5cGUgaXMgbm93IGFsd2F5cyBlbGZfaW50ZXJuYWxfc2hkciwKCXNpbmNlIHRoZSBvdGhlciB0eXBlcyB3ZXJlIHJlYWxseSBhbGlhc2VzIGZvciB0aGlzIHR5cGUgYW55d2F5cy4KCURvbid0IGNvbXBpbGUgdGhpcyBmdW5jdGlvbiwgc2luY2UgaXQgaXMgc3RhdGljIGFuZCBkb2Vzbid0IGFwcGVhcgoJdG8gYmUgdXNlZCBpbiB0aGlzIGZpbGUuCgkoc3ltX2lzX2dsb2JhbCk6IFJldHVybiBub24temVybyBmb3Igd2VhayBzeW1ib2xzLiAgQWJvcnQgaWYKCXNlY3Rpb24gcG9pbnRlciBpcyBudWxsLgoJKHN3YXBfb3V0X3N5bXMpOiBSZW9yZGVyIHRlc3RzIHNvIGZ1bmN0aW9uIHN5bWJvbHMgY2FuIGJlIHdlYWsuCgkoZWxmX3NsdXJwX3N5bWJvbF90YWJsZSk6IERvbid0IHVzZSBCU0ZfRVhQT1JULgoJKGVsZl9zbHVycF9yZWxvY2FfdGFibGUpOiBNYWtlIFJFTE9DX1BST0NFU1NJTkcgc2VjdGlvbiBzbWFsbGVyIGJ5CglleHRyYWN0aW5nIG91dCBzb21lIGNvbW1vbiBjb2RlLiAgQWJvcnQgaWYgQkZEIHNlY3Rpb24gc3ltYm9sIGhhcwoJbnVsbCBuYW1lLgoJKGVsZl9zbHVycF9yZWxvY190YWJsZSk6IFRyYW5zbGF0ZSBFTEYgc2VjdGlvbiBzeW1ib2xzIGludG8gQkZECglzZWN0aW9uIHN5bWJvbHMuICBEb24ndCByZWFkIHNlY3Rpb24gY29udGVudHMgdG8gZmlsbCBpbiBhZGRlbmQKCWZpZWxkLgoKCSogZWxmMzItaTM4Ni5jIChlbGZfaG93dG9fdGFibGUpOiBBbGwgcGFydGlhbF9pbnBsYWNlIGZpZWxkcwoJc2hvdWxkIGJlICJ0cnVlIi4KCgkqIE1lcmdlZCBmcm9tIE9TRjoKCglUdWUgSnVuIDE1IDE0OjM4OjMyIDE5OTMgIE1pY2hhZWwgTWVpc3NuZXIgIChtZWlzc25lckBvc2Yub3JnKQoKCSogbGliZWxmLmggKHN0cnVjdCBFbGZfU3ltX0V4dHJhKTogTmV3IHN0cnVjdHVyZSB0byBjb250YWluIEVMRgoJc3BlY2lmaWMgaW5mb3JtYXRpb24gZm9yIGEgc3ltYm9sLiAgUHV0IGluIGVsZl9zeW1fbnVtLCB3aGljaAoJZ2l2ZXMgdGhlIGV4dGVybmFsIHN5bWJvbCBudW1iZXIgaW4gdGhlIGVsZiBvYmplY3QgZmlsZSwgc2luY2UKCWxvY2FsIHN5bWJvbHMgbXVzdCBjb21lIGJlZm9yZSBnbG9iYWwgc3ltYm9scy4KCShlbGZfc3ltX2V4dHJhKTogTmV3IG1hY3JvLgoJKGVsZl9zeW10YWJfbWFwKTogRGVsZXRlLCBpbiBmYXZvciBvZiB1c2luZyBFbGZfU3ltX0V4dHJhLgoJKiBlbGZjb2RlLmggKGVsZl9tYXBfc3ltYm9scyk6IFVzZSBFbGZfU3ltX0V4dHJhIHRvIG1hcCBpbnRlcm5hbAoJc3ltYm9sIG51bWJlciB0byBleHRlcm5hbCBudW1iZXIuICBTdG9yZSB0aGUgYWRkcmVzcyBvZiB0aGUKCUVsZl9TeW1fRXh0cmEgZmllbGQgZm9yIHRoZSBzeW1ib2wgaW4gdGhlIHVkYXRhIGZpZWxkLgoJKGVsZl93cml0ZV9vYmplY3RfY29udGVudHMpOiBVc2UgRWxmX1N5bV9FeHRyYSB0byBtYXAgb3V0IHN5bWJvbHMuCgoJU3VuIEp1biAyMCAxNjozMDoxMSAxOTkzICBNaWNoYWVsIE1laXNzbmVyICAobWVpc3NuZXJAb3NmLm9yZykKCgkqIGVsZmNvZGUuaCAoZWxmX29ial90ZGF0YSk6IEFkZCBmaWVsZCB0byBjb3VudCB0aGUgc2l6ZSBvZiB0aGUKCWFycmF5IG9mIHBvaW50ZXJzIHRvIHNlY3Rpb24gc3ltYm9scy4KCShlbGZfbWFwX3N5bWJvbHMpOiBCdW1wIHRoZSBtYXggaW5kZXggb2YgdGhlIHNlY3Rpb24gc3ltYm9scyBzbwoJdGhhdCB3ZSBkb24ndCBvdmVyd3JpdGUgbWVtb3J5LiAgU3RvcmUgdGhlIG1heCBpbmRleCBpbnRvIHRoZQoJZWxmX29ial90ZGF0YSBmaWVsZC4KCglTYXQgSnVuIDE5IDEwOjEyOjI3IDE5OTMgIE1pY2hhZWwgTWVpc3NuZXIgIChtZWlzc25lckBvc2Yub3JnKQoKCSogZWxmY29kZS5oIChlbGZfb2JqX3RkYXRhKTogQWRkIHBvaW50ZXIgdG8gYW4gYXJyYXkgb2YgcG9pbnRlcnMKCXRvIHRoZSBzZWN0aW9uIHN5bWJvbHMgd2UgY3JlYXRlZC4gIFJlbW92ZSB1bnVzZWQgZmllbGQKCWludGVybmFsX3N5bXMuCgkoZWxmX21hcF9zeW1ib2xzKTogRmlsbCBpbiBhcnJheSBvZiBwb2ludGVycyB0byBzZWN0aW9uIHN5bWJvbHMuCglPbmx5IGNyZWF0ZSBzZWN0aW9uIHN5bWJvbHMgZm9yIHNlY3Rpb25zIHRoYXQgaGF2ZSBTRUNfQUxMT0Mgc2V0LAoJYW5kIGhhdmUgbm9uLXplcm8gc2l6ZS4KCShlbGZfc3ltYm9sX2Zyb21fYmZkX3N5bWJvbCk6IElmIHVkYXRhIGlzIE5VTEwsIGFuZCB0aGlzIGlzIGEKCXNlY3Rpb24gc3ltYm9sLCBsb29rIHVwIHRoZSBzZWN0aW9uIGluIHRoZSBsaXN0IG9mIHNlY3Rpb24KCXN5bWJvbHMsIGFuZCBzZXQgdGhlIHVkYXRhIHBvaW50ZXIgYXBwcm9wcmlhdGVseS4gIE90aGVyd2lzZSwgaWYKCXVkYXRhIGlzIHN0aWxsIE5VTEwsIGZhaWwgYW4gYXNzZXJ0aW9uLCBhbmQgdXNlIDAsIGluc3RlYWQgb2YKCWRyb3BwaW5nIGNvcmUuCgpGcmkgQXVnIDIwIDEyOjE4OjA1IDE5OTMgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AdHdlZWRsZWR1bWIuY3lnbnVzLmNvbSkKCgkqIGNvbmZpZy5iZmQgKG1pcHMtKi1lbGZsKiwgbWlwcy0qLWVsZiopOiBOZXcgdGFyZ2V0cywgdXNpbmcKCW1pcHNsZWxmIGFuZCBtaXBzYmVsZiByZXNwZWN0aXZlbHkuCgkqIGNvbmZpZy9taXBzbGVsZi5tdCwgY29uZmlnL21pcHNiZWxmLm10OiBOZXcgZmlsZXMuCgkqIGVsZjMyLW1pcHMuYzogQWRkZWQgc29tZSByZWxvYyBpbmZvcm1hdGlvbi4KCSogY29uZmlndXJlLmluOiBGaXhlZCBlcnJvciBtZXNzYWdlLgoKCSogZWNvZmYuYyAoRUNPRkZfTE9OR19TSVpFKTogUmVtb3ZlZC4gIEp1c3QgdXNlIGNvbnN0YW50cy4KClRodSBBdWcgMTkgMDk6NDU6NTEgMTk5MyAgRGF2aWQgSi4gTWFja2VuemllICAoZGptQHRoZXB1Yi5jeWdudXMuY29tKQoKCSogTWFrZWZpbGUuaW4gKEJGRF9MSUJTLCBBTExfTUFDSElORVMsIEJGRDMyX0JBQ0tFTkRTLCBCRkQ2NF9CQUNLRU5EUywKCU9QVElPTkFMX0JBQ0tFTkRTKTogQWxwaGFiZXRpemUgZW50cmllcyBhbmQgYWRkIGEgZmV3IG1pc3Npbmcgb25lcy4KCSogYXJjaHVyZXMuYzogQWxwaGFiZXRpemUgZGVjbHMuCgoJKiBjb25maWd1cmUuaW4sIHRhcmdldHMuYzogQWRkIG1pc3NpbmcgdmVjdG9ycyB0byB0aGUgdGFibGVzLgoJKiB0YXJnZXRzLmMgKHRhcmdldF92ZWN0b3IpIFshU0VMRUNUX1ZFQ1NdOiBBZGQgREVGQVVMVF9WRUNUT1IuCglSZW1vdmUgaHAzMDBic2RfdmVjIGR1ZSB0byBjbGFzaCB3aXRoIHN1bm9zX2JpZ192ZWMuCgpUdWUgQXVnIDE3IDE4OjEyOjMyIDE5OTMgIEppbSBLaW5nZG9uICAoa2luZ2RvbkBsaW90aC5jeWdudXMuY29tKQoKCSogaG9zdHMvaTM4NnttYWNoMyxvc2YxbWt9Lmg6IE5ldyBmaWxlcywgZm9yIE1hY2ggaG9zdGluZy4KCSogaG9zdHMvaTM4Nm1hY2guaDogcmVtb3ZlZCwgcmVwbGFjZWQgYnkgaTM4Nm9zZjFtay5oLgoJKiBjb25maWcvaTM4Nm1hY2gzLm10LCBpMzg2bWFjaDMuYzogTmV3IGZpbGVzLCBmb3IgTWFjaCBhLm91dCBmb3JtYXQuCgkqIE1ha2VmaWxlLmluLCBjb25maWd1cmUuaG9zdCwgY29uZmlnLmJmZDogQ29ycmVzcG9uZGluZyBjaGFuZ2VzLgoJKiBob3N0cy9kZWNzdGF0aW9uLmg6IEluY2x1ZGUgPHN5cy9wYXJhbS5oPiBub3QgPG1hY2hpbmUvcGFyYW0uaD4uCgpUdWUgQXVnIDE3IDE1OjE5OjQxIDE5OTMgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AdHdlZWRsZWR1bWIuY3lnbnVzLmNvbSkKCgkqIGNvZmZnZW4uYyAoY29mZl9zZWN0aW9uX3N5bWJvbCk6IElmIHNlY3Rpb24ncyBvdXRwdXRfc2VjdGlvbiBpcwoJbm90IHlldCBzZXQsIHBvaW50IHRvIGl0c2VsZi4gIFRoaXMgaXMgbmVlZGVkIGJlY2F1c2UgdGhpcyBpcwoJY2FsbGVkIG9uIHRoZSBvdXRwdXQgZmlsZSwgbm90IHRoZSBpbnB1dCBmaWxlLgoKCSogY29mZi1yczYwMDAuYyAoZHVtbXlfcmVsb2MsIFJUWVBFMkhPV1RPKTogU2V0IGhvd3RvIGZpZWxkIHRvIGEKCWR1bW15IHZhbHVlLCByYXRoZXIgdGhhbiBsZWF2aW5nIGl0IE5VTEwuCgoJKiBhcmNodXJlcy5jIChiZmRfZGVmYXVsdF9zZXRfYXJjaF9tYWNoKTogU2V0IGJmZF9lcnJvciBvbgoJZmFpbHVyZS4KCSogYW91dHguaCAoTkFNRShhb3V0LHNldF9hcmNoX21hY2gpKTogQ2hlY2sgcmV0dXJuIHZhbHVlIG9mCgliZmRfZGVmYXVsdF9zZXRfYXJjaF9tYWNoLgoKVHVlIEF1ZyAxNyAwOTo0MjoxNiAxOTkzICBEYXZpZCBKLiBNYWNrZW56aWUgIChkam1AdGhlcHViLmN5Z251cy5jb20pCgoJKiBjb25maWcuYmZkIChjcHUpOiBFeHRyYWN0IGZyb20gY2Fub25pY2FsIG5hbWUgd2l0aCBzZWQuCgkqIGNvbmZpZ3VyZS5pbjogRG9uJ3QgcGFzcyBpdC4KClN1biBBdWcgMTUgMjA6NDU6NDUgMTk5MyAgSmltIEtpbmdkb24gIChraW5nZG9uQGxpb3RoLmN5Z251cy5jb20pCgoJKiBiZmQtaW4uaDogUmVtb3ZlIHtCWVRFLFdPUkQsTE9OR31fU0laRTsgdGhleSBhcmUgcG9pbnRsZXNzIGFuZAoJQllURV9TSVpFIGNvbmZsaWN0cyB3aXRoIGEgTWFjaCBoZWFkZXIuCgkqIGVjb2ZmLmM6IENoYW5nZSBMT05HX1NJWkUgdG8gRUNPRkZfTE9OR19TSVpFIGFuZCBkZWZpbmUgaXQuCgoJKiBjb25maWd1cmUuaG9zdDogTWFrZSBzdXJlIGFsbCBPUyBmaWVsZHMgZW5kIGluICouCgpGcmkgQXVnIDEzIDE2OjMzOjMzIDE5OTMgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AdHdlZWRsZWR1bWIuY3lnbnVzLmNvbSkKCgkqIGVjb2ZmLmMgKGVjb2ZmX3NsdXJwX3JlbG9jX3RhYmxlKTogVXNlIGJmZF9hYnNfc2VjdGlvbiBmb3IKCVJFTE9DX1NFQ1RJT05fTk9ORSBhbmQgUkVMT0NfU0VDVElPTl9BQlMuICBJZiBhIHJlbG9jIHNlY3Rpb24KCWRvZXNuJ3QgZXhpc3QsIGRvbid0IHRyeSB0byBjcmVhdGUgaXQuCgoJKiBubG1jb2RlLmggKG5sbV93cml0ZV9vYmplY3RfY29udGVudHMpOiBwcm9jZWR1cmUgb2Zmc2V0cyBhcmUKCWZyb20gc3RhcnQgb2YgY29kZSBzZWdtZW50LCBub3Qgc3RhcnQgb2YgZmlsZS4KCSogY29uZmlnL2kzODYtbmxtLm10IChERUZBVUxUX1ZFQ1RPUik6IEl0J3MgbmxtMzJfaTM4Nl92ZWMsIG5vdAoJYmZkX25sbTMyX2kzODZfdmVjLgoJKiBjb25maWd1cmUuaW4gKFNFTEVDVF9WRUNTIHN3aXRjaCk6IExpa2V3aXNlLgoKVGh1IEF1ZyAxMiAxMDozMjo0NyAxOTkzICBEYXZpZCBKLiBNYWNrZW56aWUgIChkam1AdGhlcHViLmN5Z251cy5jb20pCgoJKiBmb3JtYXQuYyAoYmZkX2NoZWNrX2Zvcm1hdCk6IElmIHRoZSB0YXJnZXQgbWF0Y2hlcyB0aGUgZGVmYXVsdAoJdGFyZ2V0LCBzZXQgbWF0Y2hfY291bnQgdG8gMSwgdG8gaWdub3JlIGFueSBwcmV2aW91cyBtYXRjaGVzLgoKCSogTWFrZWZpbGUuaW4gKEJGRDMyX0JBQ0tFTkRTKTogUmVtb3ZlIHNyZWMubywgYWRkIHJlbG9jMTYuby4KCgkqIGNvbmZpZ3VyZS5pbjogQWRkIHJlbG9jMTYubyB3aGVuIHdlIGFkZAoJY29mZi1oODMwMC5vLCBjb2ZmLWg4NTAwLm8sIGNvZmYtc2gubywgY29mZi16OGsuby4KCU1ha2VmaWxlLmluIChCRkRfTElCUyk6IFJlbW92ZSByZWxvYzE2Lm8uCgoJKiBjb25maWcvdTY4ay1jb2ZmLm10OiBGaXggdHlwbywgREVGQVVMVF9UQVJHRVQgZm9yCglERUZBVUxUX1ZFQ1RPUi4KCgkqIGNvbmZpZy9oODMwMC1jb2ZmLm10LCBoODUwMC1jb2ZmLm10LCBzaC1jb2ZmLm10LCBzdDIwMDAubXQsCgl6OGstY29mZi5tdCAoREVGQVVMVF9WRUNUT1IpOiBEZWZpbmUuICBEb24ndCBleHBsaWNpdGx5IGFkZAoJUy1yZWNvcmRzIHZpYSBTRUxFQ1RfVkVDUy4KCgkqIHRhcmdldHMuYyAodGFyZ2V0X3ZlY3RvciksIE1ha2VmaWxlLmluIChCRkRfTElCUyk6IEFsd2F5cwoJc3VwcG9ydCBTLXJlY29yZHMsIGZvciBjb252ZW5pZW5jZS4KClRodSBBdWcgMTIgMDg6MzA6MDUgMTk5MyAgSWFuIExhbmNlIFRheWxvciAgKGlhbkBjeWdudXMuY29tKQoKCSogY29mZi1hbHBoYS5jIChhbHBoYV9ob3d0b190YWJsZSwgYWxwaGFfZmluaXNoX3JlbG9jLAoJYWxwaGFfZWNvZmZfc3dhcF9yZWxvY197aW4sb3V0fSwgYWxwaGFfYmZkX3JlbG9jX3R5cGVfbG9va3VwKToKCVJlYWQgYW5kIHdyaXRlIEFscGhhIHJlbG9jcy4gIENhbid0IHByb2Nlc3MgdGhlbSB5ZXQuCgkqIGVjb2ZmLmMgKGVjb2ZmX3NsdXJwX3JlbG9jX3RhYmxlKTogUmVjb2duaXplIG5ldyByZWxvYyBzZWN0aW9ucy4KCUlmIHRoZSBzZWN0aW9uIGRvZXMgbm90IGFscmVhZHkgZXhpc3QsIGNyZWF0ZSBpdC4KCgkqIGVjb2Zmc3dhcC5oIChlY29mZl9zd2FwX3Bkcl97aW4sb3V0fSk6IEhhbmRsZSBuZXcgZmllbGRzIGRlZmluZWQKCW9uIHRoZSBBbHBoYS4KCgkqIGxpYmVjb2ZmLmggKGVjb2ZmX2JhY2tlbmRfZGF0YSk6IEFkZGVkIGNvbnN0cnVjdG9yX3JlbG9jIGFuZAoJZmluaXNoX3JlbG9jIGZpZWxkcy4KCSogZWNvZmYuYzogTW92ZSBNSVBTIHJlbG9jIHN1cHBvcnQgZnJvbSBoZXJlLi4uCgkqIGNvZmYtbWlwcy5jOiB0byBoZXJlLgoJKiBlY29mZi5jIChlY29mZl9zZXRfc3ltYm9sX2luZm8pOiBHZXQgY29uc3RydWN0b3IgcmVsb2MgaG93dG8KCWZyb20gYmFja2VuZC4KCShlY29mZl9zbHVycF9yZWxvY190YWJsZSk6IFJlbW92ZWQgTUlQUyBzcGVjaWZpYyBzdHVmZi4gIENhbGwKCWZpbmlzaF9yZWxvYyBiYWNrZW5kIGZ1bmN0aW9uLgoJKGVjb2ZmX3dyaXRlX29iamVjdF9jb250ZW50cyk6IFJlbW92ZWQgTUlQUyBzcGVjaWZpYyBhc3NlcnRpb25zLgoJKiBjb2ZmLW1pcHMuYyAobWlwc19maW5pc2hfcmVsb2MpOiBOZXcgZnVuY3Rpb24uCgkobWlwc19lY29mZl9iYWNrZW5kX2RhdGEpOiBGaWxsIGluIG5ldyBmaWVsZHMuCgkqIGNvZmYtYWxwaGEuYyAoYWxwaGFfZWNvZmZfYmFja2VuZF9kYXRhKTogVXNlIE5VTEwgZm9yIG5ldwoJZmllbGRzLgoJKiB0YXJnZXRzLmM6IEFkZGVkIGV4dGVybiBmb3IgZWNvZmZhbHBoYV9saXR0bGVfdmVjLgoKCSogYmZkLmMgKF9iZmRfaG9zdF9iaWdfZW5kaWFuKTogUmVtb3ZlZC4KCSogYmZkLWluLmggKEhPU1RfQllURV9PUkRFUl9CSUdfUCwgYmZkX2hlYWRlcl90d2lkZGxlX3JlcXVpcmVkKToKCVJlbW92ZWQuCgkqIGJmZC1pbjIuaDogUmVnZW5lcmF0ZWQuCgpXZWQgQXVnIDExIDEyOjExOjIzIDE5OTMgIERhdmlkIEouIE1hY2tlbnppZSAgKGRqbUB0aGVwdWIuY3lnbnVzLmNvbSkKCgkqIGNvbmZpZy5iZmQ6IE5ldyBmaWxlLCBicm9rZW4gb3V0IG9mIGNvbmZpZ3VyZS5pbi4KCSogY29uZmlndXJlLmluOiBVc2UgaXQsIGFuZCB1c2Ugc3RhbmRhcmQgdGFyZ2V0IG5hbWVzIGZvcgoJLS13aXRoLXRhcmdldHMsIHJlcGxhY2luZyAtLXdpdGgtYmZkLXRhcmdldHMuCgoJKiBhcmNodXJlcy5jIChhcmNodXJlc19pbml0X3RhYmxlKTogQWRkIGJmZF9zaF9hcmNoLgoKCSogY29uZmlndXJlLmluOiBJbmNsdWRlIGNvZmYtbTY4ay5vIGZvciBtNjhrY29mZnVuX3ZlYy4KCUluY2x1ZGUgbmxtMzIubyBhbmQgbmxtLm8gZm9yIGJmZF9ubG0zMl9pMzg2X3ZlYy4KCUZpeCBlcnJvciBpbiBlcnJvciBtZXNzYWdlLgoKCSogb2FzeXMuYzogTWFrZSBiZmRfZXJyb3JfdmVjdG9yIGV4dGVybi4KCgkqIGNvbmZpZ3VyZS5pbjogSW5jbHVkZSBzdGFiLXN5bXMubyBmb3IgYS5vdXQvYi5vdXQgdGFyZ2V0cwoJYW5kIGhwMzAwe2JzZCxocHV4fS4KCldlZCBBdWcgMTEgMDY6NDA6NTEgMTk5MyAgSWFuIExhbmNlIFRheWxvciAgKGlhbkBjeWdudXMuY29tKQoKCSogbmxtY29kZS5oIChubG1fY29tcHV0ZV9zZWN0aW9uX2ZpbGVfcG9zaXRpb25zKTogQWRkIHRoZSAuYnNzCglzZWN0aW9uIGJlZm9yZSBzZXR0aW5nIG91dHB1dF9oYXNfYmVndW4uCgkobmxtX3NldF9zZWN0aW9uX2NvbnRlbnRzKTogUmVtb3ZlIGFyZ3VtZW50IG5hbWVzIGZyb20KCW1hbmdsZV9yZWxvY3NfZnVuYyBwcm90b3R5cGUuCgkobmxtX3dyaXRlX29iamVjdF9jb250ZW50cyk6IFJlbW92ZSBzaGFkb3dpbmcgbG9jYWwgdmFyaWFibGUuCglEb24ndCB3cml0ZSBvdXQgZGVidWdnaW5nIHN5bWJvbHMgaWYgZGVidWdJbmZvT2Zmc2V0IGlzIC0xLiAgQWRkCgl0aGUgY29kZUltYWdlT2Zmc2V0IHRvIHRoZSBzdGFydCwgZXhpdCwgYW5kIGNoZWNrIHByb2NlZHVyZQoJb2Zmc2V0cy4KCSogbmxtMzItaTM4Ni5jIChubG1faTM4Nl93cml0ZV9yZWxvYywgbmxtX2kzODZfbWFuZ2xlX3JlbG9jcyk6CglEb24ndCBjaGVjayBwYXJ0aWFsX2lucGxhY2UgZmllbGQ7IGl0cyB2YWx1ZSBpcyBpcnJlbGV2YW50LgoKCSogQmFzZSB1c2Ugb2Ygc2NvLWNvcmUgb24gaG9zdCwgbm90IHRhcmdldC4KCSogY29uZmlndXJlLmhvc3QgKGlbMzRdODYtKi1zY28qKTogVXNlIGkzODZzY28gcmF0aGVyIHRoYW4gaTM4NnYuCgkqIGNvbmZpZy9pMzg2LXNjby5tdCAoVERFRklORVMpOiBSZW1vdmVkLgoJKiBjb25maWcvaTM4NnNjby5taDogTmV3IGZpbGUgdG8gdXNlIHNjby1jb3JlLgoJKiBob3N0cy9pMzg2c2NvLmg6IE5ldyBmaWxlOyBqdXN0IGluY2x1ZGVzIGhvc3RzL2kzODZ2LmguCgoJKiBlY29mZnN3YXAuaCAoZWNvZmZfc3dhcF97aGRyLGV4dH1fe2luLG91dH0pOiBVc2Ugc2lnbmVkCgljb252ZXJzaW9ucyBmb3Igc29tZSBmaWVsZHMuCgpUdWUgQXVnIDEwIDEzOjMyOjIzIDE5OTMgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AdHdlZWRsZWR1bWIuY3lnbnVzLmNvbSkKCgkqIGVjb2ZmLmMgKGVjb2ZmX2dwcmVsX3JlbG9jKTogSWYgX2dwIGlzIG5vdCBkZWZpbmVkLCBnaXZlIGFuCgllcnJvciByYXRoZXIgdGhhbiBhYm9ydGluZy4KCgkqIGxpYm5sbS5oIChzdHJ1Y3QgbmxtX2JhY2tlbmRfZGF0YSk6IEFkZGVkIG1hY2ggZmllbGQuCgkobmxtX21hY2hpbmUpOiBOZXcgYWNjZXNzb3IgbWFjcm8uCgkqIG5sbS5jIChubG1fbWtvYmplY3QpOiBTZXQgYXJjaGl0ZWN0dXJlIGFuZCBtYWNoaW5lIGZyb20gYmFja2VuZAoJaW5mb3JtYXRpb24uCgkqIG5sbTMyLWkzODYuYyAobmxtMzJfaTM4Nl9iYWNrZW5kKTogSW5pdGlhbGl6ZSBuZXcgbWFjaCBmaWVsZC4KClR1ZSBBdWcgMTAgMDk6MzE6MTggMTk5MyAgRGF2aWQgSi4gTWFja2VuemllICAoZGptQHRoZXB1Yi5jeWdudXMuY29tKQoKCSogY29uZmlndXJlLmluOiBSZXBsYWNlIGNhbGxzIHRvIHNvcnQgd2l0aCBzaGVsbCBjb2RlCgl0byB1bmlxIHRoZSBsaXN0cy4KClR1ZSBBdWcgMTAgMDY6MjM6MTYgMTk5MyAgS2VuIFJhZWJ1cm4gIChyYWVidXJuQGNhbWJyaWRnZS5jeWdudXMuY29tKQoKCSogY29uZmlndXJlLmluOiBJbmNsdWRlIGFvdXQzMi5vIGZvciBhbnkgYS5vdXQvYi5vdXQgZm9ybWF0cy4KCk1vbiBBdWcgIDkgMDk6Mzc6MTggMTk5MyAgRGF2aWQgSi4gTWFja2VuemllICAoZGptQHRoZXB1Yi5jeWdudXMuY29tKQoKCSogY29uZmlnL2kzODYtbGludXgubXQgKFNFTEVDVF9WRUNTKTogU3VwcG9ydCBiZmRfZWxmMzJfaTM4Nl92ZWMuCgkqIGNvbmZpZy9tNjhrLWVsZi5tdCAoU0VMRUNUX1ZFQ1MpOiBTdXBwb3J0IG02OGtjb2ZmX3ZlYy4KCSogY29uZmlnL2kzODYtZWxmLm10IChTRUxFQ1RfVkVDUyk6IFN1cHBvcnQgaTM4NmNvZmZfdmVjLgoJKiBjb25maWcvaHBwYS1lbGYubXQgKFNFTEVDVF9WRUNTKTogU3VwcG9ydCBocHBhX3ZlYy4KCSogY29uZmlnL3NwYXJjLWVsZi5tdCAoU0VMRUNUX1ZFQ1MpOiBTdXBwb3J0IHN1bm9zX2JpZ192ZWMuCgkqIGNvbmZpZy9pMzg2LXNjby5tdCAoU0VMRUNUX1ZFQ1MpOiBEb24ndCBkZWZpbmU7IElhbiBzYXlzIGl0IHdhcwoJanVzdCBhIGhhY2suCgpNb24gQXVnICA5IDEzOjE1OjAwIDE5OTMgIEsuIFJpY2hhcmQgUGl4bGV5ICAocmljaEBzZW5kYWkuY3lnbnVzLmNvbSkKCgkqIGNvbmZpZy9tODhrLWNvZmYubXQgKERFRkFVTFRfVkVDIC0+IERFRkFVTFRfVkVDVE9SKTogcmVuYW1lZC4KCk1vbiBBdWcgIDkgMTQ6MjY6NDUgMTk5MyAgS2VuIFJhZWJ1cm4gIChyYWVidXJuQGNhbWJyaWRnZS5jeWdudXMuY29tKQoKCSogc3ltcy5jIChCU0ZfRVhQT1JUKTogTm93IHNhbWUgYXMgQlNGX0dMT0JBTC4KCgkqIGJmZC5jIChiZmRfc2Nhbl92bWEpOiBOZXcgZnVuY3Rpb24uCgpNb24gQXVnICA5IDExOjI5OjUzIDE5OTMgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AY3lnbnVzLmNvbSkKCgkqIGJmZC1pbi5oIChiZmRfZ2V0X2FyY2hpdGVjdHVyZSwgYmZkX2dldF9tYWNoaW5lKTogUmVtb3ZlZAoJb2Jzb2xldGUgbWFjcm9zLgoJKiBiZmQtaW4yLmg6IFVwZGF0ZWQuCgoJKiBlY29mZi5jIChlY29mZl9zbHVycF9hcm1hcCk6IENvcnJlY3QgYnVnIGluIGluaXRpYWxpemF0aW9uIG9mCglzdHJpbmdiYXNlLgoKU3VuIEF1ZyAgOCAxMjoyMToxMyAxOTkzICBEYXZpZCBKLiBNYWNrZW56aWUgIChkam1AdGhlcHViLmN5Z251cy5jb20pCgoJKiBjb25maWd1cmUuaW46IFJlbW92ZSB1bm5lZWRlZCB0ZXN0LgoKU3VuIEF1ZyAgOCAxMjo0MToyMiAxOTkzICBKaW0gS2luZ2RvbiAgKGtpbmdkb25AbGlvdGguY3lnbnVzLmNvbSkKCgkqIE1ha2VmaWxlLmluICh7ZGlzdCxyZWFsfWNsZWFuKTogVXNlICQoTUFLRSksIG5vdCBtYWtlLgoKU2F0IEF1ZyAgNyAwOToxNDoyMSAxOTkzICBEYXZpZCBKLiBNYWNrZW56aWUgIChkam1AdGhlcHViLmN5Z251cy5jb20pCgoJKiBjb25maWcvc3QyMDAwLm10IChUREVGSU5FUyk6IERvbid0IGRlZmluZSBNUkk7IG5vdCB1c2VkLgoKCSogUE9SVElORywgVE9ETywgY29uZmlnL1JFQURNRTogVXBkYXRlIHRvIHJlZmxlY3QgYmVsb3cgY2hhbmdlcy4KCgkqIGNvbmZpZ3VyZS5pbjogUmVwbGFjZSBNSU5JTUlaRSBhbmQgLS13aXRoLW1pbmltYWwtYmZkIHdpdGgKCS0td2l0aC1iZmQtdGFyZ2V0cz0idGFyZ2V0MSx0YXJnZXQyLC4uLiIgYW5kIHRoZSBzcGVjaWFsIHRhcmdldAoJImFsbCIgdG8gZ2V0IHRoZSBwcmV2aW91cyBkZWZhdWx0IGJlaGF2aW9yLgoJRmlndXJlIG91dCB3aGljaCBhcmNoaXRlY3R1cmUgYW5kIGJhY2tlbmQgLm8gZmlsZXMgYXJlIG5lZWRlZCBmcm9tCglERUZBVUxUX1ZFQ1RPUiwgU0VMRUNUX1ZFQ1MsIGFuZCBTRUxFQ1RfQVJDSElURUNUVVJFUyBhcyBzZXQgaW4KCXRoZSAubXQgZmlsZXMuICBEZWZpbmUgVERFRkFVTFRTIGJhc2VkIG9uIHRoZW0sIGFsc28uCgoJKiBNYWtlZmlsZS5pbjogUmVtb3ZlIHJlZmVyZW5jZXMgdG8gTUlOSU1JWkUuCgkqIGFyY2h1cmVzLmMsIHRhcmdldHMuYzogRGl0dG8uCgoJKiBjb25maWcvKi5tdDogRGVmaW5lIERFRkFVTFRfVkVDVE9SLCBTRUxFQ1RfVkVDUywgYW5kCglTRUxFQ1RfQVJDSElURUNUVVJFUyBhcyB2YXJpYWJsZXMgcmF0aGVyIHRoYW4gYXMgLUQgYXJndW1lbnRzIHRvCglUREVGQVVMVFMuCgoJKiBjb25maWcvYTI5ay1jb2ZmLm10LGFscGhhb3NmLm10LCBpMzg2LXNjby5tdCwgaTk2MC1ib3V0Lm10LAoJaTk2MC1jb2ZmLm10IChUREVGQVVMVFMpOiBEb24ndCBwdXQgdGhlIGRlZmF1bHQgdmVjdG9yIGluCglTRUxFQ1RfVkVDUyBtYW51YWxseTsgaXQncyBhdXRvbWF0aWMgbm93LgoKCSogY29uZmlnL2kzODYtc2NvLm10IChUREVGQVVMVFMpOiBEb24ndCBwdXQgJnNjb19jb3JlX3ZlYyBpbgoJU0VMRUNUX1ZFQ1MgbWFudWFsbHk7IC1EU0NPX0NPUkUgZG9lcyBpdCBhdXRvbWF0aWNhbGx5IG5vdy4KCgkqIGNvbmZpZy9oODMwMC1jb2ZmLm10LCBjb25maWcvaDg1MDAtY29mZi5tdCwgY29uZmlnL3NoLWNvZmYubXQsCgljb25maWcvc3QyMDAwLm10LCBjb25maWcvejhrLWNvZmYubXQgKFRERUZBVUxUUyk6IERvbid0IGRlZmluZQoJQkZEOyBub3QgdXNlZC4KCgkqIGNvbmZpZy9ocHBhb3NmLm1oIChIREVGSU5FUyk6IERvbid0IGRlZmluZSBTRUxFQ1RfQVJDSElURUNUVVJFUzsKCXRoaXMgaXMgYSBob3N0LCBub3QgYSB0YXJnZXQuCgpTYXQgQXVnICA3IDA1OjI4OjAzIDE5OTMgIEZyZWQgRmlzaCAgKGZuZkBkZW5lYi5jeWdudXMuY29tKQoKCSogZWxmY29kZS5oIChlbGZfb2JqZWN0X3ApOiAgQWRkIGNvbW1lbnQgYWJvdXQgd2hhdCB0aGlzIGZ1bmN0aW9uCglkb2VzIGFuZCB0byB3YXRjaCBvdXQgZm9yIHNpZGUgZWZmZWN0cy4gIEFkZCBGSVhNRSBmb3IgbWVtb3J5IGxlYWtzLgoJRml4IGNvbW1lbnQgYWJvdXQgY2hlY2tpbmcgZm9yIG1hdGNoaW5nIGJ5dGUgb3JkZXIuICBQcmVzZXJ2ZQoJcG9pbnRlciB0byBvbGQgdGRhdGEgKGlmIGFueSksIGFuZCByZXN0b3JlIGl0IGlmIHdlIGRvbid0IG1hdGNoCglmaWxlIHdpdGggdGFyZ2V0IHZlY3Rvci4gIElmIHdlIGFyZSBnb2luZyB0byB1c2UgZ290bydzLCB1c2UgdGhlbQoJY29uc2lzdGVudGx5IGFuZCBtYWludGFpbmFibHkuCgkqIG5sbWNvZGUuaCAobmxtX29iamVjdF9wKTogIEV4cGFuZCBjb21tZW50cyBhYm91dCBsZWFrZWQgbWVtb3J5Cgl0byBub3RlIHRoYXQgdGhlIHByb2JsZW0gaXMgZXZlbiBtb3JlIHNlcmlvdXMgdGhhbiBqdXN0IGxlYWtlZAoJbWVtb3J5LiAgUmVwbGFjZSBnb3RvIHdpdGggbW9yZSB0cmFkaXRpb25hbCByZXR1cm4uCgpGcmkgQXVnICA2IDEyOjAwOjAzIDE5OTMgIERhdmlkIEouIE1hY2tlbnppZSAgKGRqbUB0aGVwdWIuY3lnbnVzLmNvbSkKCglGaXggaW5jb3JyZWN0IG9yIHVzZWxlc3MgbWFrZWZpbGUgdmFyaWFibGUgZGVmaW5pdGlvbnM6CgkqIGNvbmZpZy9uZXdzLm10LCBjb25maWcvdTY4ay1jb2ZmLm10IChUREVGQVVMVFMpOiBVc2UgdGhpcyB0bwoJZGVmaW5lIERFRkFVTFRfVkVDVE9SLCBpbnN0ZWFkIG9mIFRERUZJTkVTLgoJKiBjb25maWcvaTM4NmFpeC5taCAoTUlOSU1JWkUpOiBEb24ndCBkZWZpbmUuCgkqIGNvbmZpZy9ocHBhb3NmLm1oIChNSU5JTUlaRSk6IERvbid0IGNvbmRpdGlvbmFsaXplLgoJKiBjb25maWcvcnM2MDAwLm1oIChBTExPQ0EpLAoJKiBjb25maWcvaTM4NnYubWggKEFMTE9DQSksCgkqIGNvbmZpZy9pMzg2bGludXgubWggKEFMTE9DQSksCgkqIGNvbmZpZy9pMzg2aXNjLm1oIChBTExPQ0EpLAoJKiBjb25maWcvZ28zMi5taCAoRVhUUkFMSUJTKTogRG9uJ3QgZGVmaW5lOyBub3QgdXNlZC4KCSogY29uZmlnL3NvbGFyaXMyLm1oIChIREVGSU5FUyk6IFJlbmFtZWQgZnJvbSBIX0RFRklORVMuCgkqIGNvbmZpZy9hbHBoYW9zZi5tdCAoVERFRklORVMpOiBTZXQgaXQsIG5vdCBIREVGSU5FUy4KCSogY29uZmlnL3o4ay1jb2ZmLm10IChDQyk6IERvbid0IGRlZmluZS4gIEl0J3MgYSB0YXJnZXQsIG5vdCBhIGhvc3QuCgoJKiBjb25maWcvUkVBRE1FOiBOZXcgZmlsZSwgZXhwbGFpbmluZyB0aGUgdmFyaWFibGVzLgoKCSogdGFyZ2V0cy5jICh0YXJnZXRfdmVjdG9yKTogQWRkIGhwMzAwX2JzZF92ZWMuCgkqIE1ha2VmaWxlLmluIChCRkQzMl9CQUNLRU5EUywgQ0ZJTEVTKTogQWRkIGhwMzAwYnNkLgoJKGhwMzAwYnNkLm8pOiBOZXcgcnVsZS4KCkZyaSBBdWcgIDYgMTU6MTM6MjIgMTk5MyAgS2VuIFJhZWJ1cm4gIChyYWVidXJuQGNhbWJyaWRnZS5jeWdudXMuY29tKQoKCSogbGliZWxmLmggKE5BTUUpOiBQcm92aWRlIGEgZGVmYXVsdCBkZWZpbml0aW9uLCB0aGF0J3MgbmVpdGhlcgoJZm9yIDMyIGJpdHMgbm9yIGZvciA2NC4KCglUdWUgSnVuIDE1IDE0OjM4OjMyIDE5OTMgIE1pY2hhZWwgTWVpc3NuZXIgIChtZWlzc25lckBvc2Yub3JnKQoKCSogbGliZWxmLmggKGVsZl9oYXNoKTogQ2hhbmdlIGRlY2xhcmF0aW9uIHRvIGJmZF9lbGZfaGFzaCwgc2luY2UKCXRoYXQgaXMgd2hhdCBpcyBpbiBlbGYuYy4KCkZyaSBBdWcgIDYgMTI6Mjg6MzggMTk5MyAgSWFuIExhbmNlIFRheWxvciAgKGlhbkB0d2VlZGxlZHVtYi5jeWdudXMuY29tKQoKCSogZWNvZmYuYyAoZWNvZmZfc2V0X3N5bWJvbF9pbmZvKTogUmVtb3ZlZCBzcGVjaWFsIGhhbmRsaW5nIGZvcgoJc2NCc3MgYW5kIHNjU0JzcyBzeW1ib2xzLCBzaW5jZSBpdCB3YXMgd3JvbmcuCgoJKiBNYWtlZmlsZS5pbiAoY29mZi1taXBzLm8sIGNvZmYtYWxwaGEubyk6IERvbid0IGRlcGVuZCBvbgoJY29mZmNvZGUuaC4KCgkqIGNvZmZjb2RlLmggKHNlY190b19zdHlwX2ZsYWdzKTogSW5zcGlyZWQgYnkgbWJAdHRpLkNPTSAoTWljaGFlbAoJQmxvb20pOiBPbmx5IHNldCBTVFlQX0JTUyBmb3IgU0VDX0FMTE9DIHNlY3Rpb25zLgoKCSogZWNvZmYuYyAoZWNvZmZfc2x1cnBfYXJtYXApOiBGcm9tIEFybmUgSGVucmlrIEp1dWwKCTxhcm5lakBrYXJpLmZtLnVuaXQubm8+OiBIYW5kbGUgYSBDT0ZGIHN0eWxlIGFybWFwLgoKRnJpIEF1ZyAgNiAwOTo1OTo0NSAxOTkzICBKaW0gS2luZ2RvbiAgKGtpbmdkb25AbGlvdGguY3lnbnVzLmNvbSkKCgkqIGhwdXgtY29yZS5jOiBDYXN0IHJldHVybiB2YWx1ZSBmcm9tIGJmZF96YWxsb2MuCgpUaHUgQXVnICA1IDEzOjIyOjQ0IDE5OTMgIEtlbiBSYWVidXJuICAocmFlYnVybkBjYW1icmlkZ2UuY3lnbnVzLmNvbSkKCgkqIGFvdXR4LmggKGxvZzIpOiBEZWxldGUgaTM4Ny1zcGVjaWZpYyBjb2RlLgoKCSogTWFrZWZpbGUuaW4gKEJGRF9MSUJTKTogQWx3YXlzIGluY2x1ZGUgZWxmLm8uCgkoQkZEMzJfQkFDS0VORFMpOiBEb24ndCBpbmNsdWRlIGVsZi5vIGhlcmUuCgkob2ZpbGVzKTogRGVsZXRlIHJlZmVyZW5jZXMgdG8gb2ZpbGVzMiBhbmQgb2ZpbGVzMy4KCShkb19jbGVhbik6IERlbGV0ZSBvZmlsZXMuCgkoQkZESU5fSCk6IENoYW5nZWQgcmVmZXJlbmNlcyB0byAkKHNyY2RpcikvYmZkLWluMi5oLgoJKHN0bXAtYmZkLmgpOiBVc2UgYmZkLmgtbmV3IGFzIHRlbXBvcmFyeSBuYW1lLCBub3QgYmZkLmgyLgoJKGhlYWRlcnMpOiBVc2UgYmZkLWluMi5oLW5ldyBhcyB0ZW1wb3JhcnkgbmFtZSwgbm90IGJmZC5oLW5ldy4KCgkqIGJmZC1pbi5oOiBSZXdvcmRlZCBjb21tZW50IHRvIG1ha2UgaXQgY2xlYXIgdGhhdCBiZmQtaW4yLmggaXMgYQoJZ2VuZXJhdGVkIGZpbGUuCgoJKiByZWxvYy5jIChlbnVtIGJmZF9yZWxvY19jb2RlX3JlYWwpOiBBZGRlZCBpMzg2LWVsZiByZWxvYyB0eXBlcwoJKGZyb20gTWVpc3NuZXIncyBhZGRpdGlvbnMgdG8gYmZkLWluMi5oKS4KCgkqIGVsZjMyLWkzODYuYyAoRUxGX01BWFBBR0VTSVpFKTogRGVmaW5lLgoKCU1lcmdlZDoKCglXZWQgSnVuIDIzIDA2OjA1OjU4IDE5OTMgIE1pY2hhZWwgTWVpc3NuZXIgIChtZWlzc25lckBvc2Yub3JnKQoKCSogZWxmY29kZS5oIChlbGZfd3JpdGVfb2JqZWN0X2NvbnRlbnRzKTogRG9uJ3QgZHJvcCBjb3JlIGlmCgllbGZfc3ltYm9sX2Zyb20gcmV0dXJucyBhIE5VTEwgcG9pbnRlciB3aGVuIHByb2Nlc3NpbmcgYSBub24tZWxmCglzeW1ib2wsIHVzZSBhIDAgc2l6ZSBpbnN0ZWFkLgoKCVR1ZSBKdW4gMTUgMTQ6Mzg6MzIgMTk5MyAgTWljaGFlbCBNZWlzc25lciAgKG1laXNzbmVyQG9zZi5vcmcpCgoJKiBlbGZjb2RlLmggKGVsZl9oYXNoKTogRGVsZXRlIG1hY3JvIG1hcHBpbmcgZWxmX2hhc2ggdG8KCWJmZF9lbGYzMl9oYXNoLCBzaW5jZSB0aGUgaGFzaCB0YWJsZSBpcyBpbmRlcGVuZGVudCBvZiB0aGUgMzIvNjQKCWJpdCBzeXN0ZW0uCgoJKiBsaWJlbGYuaCAoZWxmX2hhc2gpOiBDaGFuZ2UgZGVjbGFyYXRpb24gdG8gYmZkX2VsZl9oYXNoLCBzaW5jZQoJdGhhdCBpcyB3aGF0IGlzIGluIGVsZi5jLgoKCVNhdCBKdW4gMTkgMTA6MTI6MjcgMTk5MyAgTWljaGFlbCBNZWlzc25lciAgKG1laXNzbmVyQG9zZi5vcmcpCgoJKiBlbGYzMi1pMzg2LmggKHJlbG9jX3R5cGUpOiBSZWZvcm1hdCBzcGFjaW5nLgoJKGVsZl9ob3d0b190YWJsZSk6IEFkZCB0aGUgcmVzdCBvZiB0aGUgMzg2L0VMRiByZWxvY2F0aW9ucy4KCShlbGZfaTM4Nl9yZWxvY190eXBlX2xvb2t1cCk6IERpdHRvLgoJKGVsZl9pMzg2X2luZm9fdG9faG93dG8pOiBEaXR0by4KCShlbGZfaTM4Nl9pbmZvX3RvX2hvd3RvX3JlbCk6IERpdHRvLgoKVGh1IEF1ZyAgNSAxMDowNzo0MyAxOTkzICBGcmVkIEZpc2ggIChmbmZAY3lnbnVzLmNvbSkKCgkqIG5sbWNvZGUuaCAobmxtX2dldF9yZWxvY191cHBlcl9ib3VuZCk6ICBUZXN0IHJldHVybiB2YWx1ZQoJb2YgbmxtX3NsdXJwX3N5bWJvbF90YWJsZSBhcyBib29sZWFuLCBub3QgcG9pbnRlci4KCSogbmxtY29kZS5oIChubG1fY2Fub25pY2FsaXplX3JlbG9jKTogIFRlc3QgcmV0dXJuIHZhbHVlCglvZiBubG1fc2x1cnBfcmVsb2NfZml4dXBzIGFzIGJvb2xlYW4sIG5vdCBwb2ludGVyLgoKV2VkIEF1ZyAgNCAxNjoyMjo1NSAxOTkzICBkYXZpZCBkIGB6b28nIHp1aG4gICh6b29AcnRsLmN5Z251cy5jb20pCgoJKiBjb25maWcvZ28zMi5taDogcmVtb3ZlIEhERUZJTkVTOyBzaW5jZSBfX01TRE9TX18gYW5kIF9fR08zMl9fCglhcmUgbm93IHByZWRlZmluZWQgYnkgR0NDCgpXZWQgQXVnICA0IDE2OjA2OjI5IDE5OTMgIERhdmlkIEouIE1hY2tlbnppZSAgKGRqbUB0aGVwdWIuY3lnbnVzLmNvbSkKCgkqIGNvZmZnZW4uYyAoY29mZl9wcmludF9zeW1ib2wpOiBBZGQgdGhlIHNlY3Rpb24gb2Zmc2V0IHRvIHRoZQoJbGluZSBudW1iZXIgYWRkcmVzcywgc28gaXQncyBwcmludGVkIHRoZSBzYW1lIHdheSBhcyB0aGUgZnVuY3Rpb24KCWFkZHJlc3MuICBPbmx5IHNob3dlZCB1cCBmb3IgbGluZSBudW1iZXJzIHRoYXQgYXJlbid0IGluIHRoZSBmaXJzdAoJc2VjdGlvbiAoLnRleHQpLgoKV2VkIEF1ZyAgNCAwODozMzo1NSAxOTkzICBJYW4gTGFuY2UgVGF5bG9yICAoaWFuQGN5Z251cy5jb20pCgoJKiBsaWJubG0uaCAobmxtX2JhY2tlbmRfZGF0YSk6IEFkZGVkIG5sbV9tYW5nbGVfcmVsb2NzLgoJKG5sbV9tYW5nbGVfcmVsb2NzX2Z1bmMpOiBOZXcgbWFjcm8uCgkqIG5sbTMyLWkzODYuYyAobmxtX2kzODZfd3JpdGVfcmVsb2MpOiBSZXdyb3RlIGNvcnJlY3RseS4KCShubG1faTM4Nl9tYW5nbGVfcmVsb2NzKTogTmV3IGZ1bmN0aW9uLgoJKiBubG1jb2RlLmggKG5sbV9jb21wdXRlX3NlY3Rpb25fZmlsZV9wb3NpdGlvbnMpOiBNb3ZlIGFsbCBjb21tb24KCXN5bWJvbHMgaW50byB0aGUgLmJzcyBzZWN0aW9uLgoJKG5sbV9zZXRfc2VjdGlvbl9jb250ZW50cyk6IENhbGwgdGhlIG1hbmdsZV9yZWxvY3MgZnVuY3Rpb24uCgkobmxtX3dyaXRlX29iamVjdF9jb250ZW50cyk6IFRyZWF0IGEgcmVsb2MgYWdhaW5zdCBhbnkgZGVmaW5lZAoJc3ltYm9sIGFzIGFuIGludGVybmFsIHJlbG9jLiAgRml4IGJ1ZyBpbiBleHRlcm5hbCByZWxvYyBjb3VudGluZy4KCUdldCB0aGUgb2Zmc2V0IGFuZCBkZWJ1Z2dpbmcgdHlwZSByaWdodCBmb3IgLmJzcyBzeW1ib2xzLiAgT25seQoJb3V0cHV0IGRlYnVnZ2luZyBzeW1ib2xzIGZvciBkZWZpbmVkIHN5bWJvbHMuCgoJKiBjb2ZmLWg4NTAwLmMgKHJ0eXBlMmhvd3RvKTogRG8gYW4gZnByaW50ZiB0byBzdGRlcnIgcmF0aGVyIHRoYW4KCXVzaW5nIHByaW50Zi4KCSogY29mZi16OGsuYyAocnR5cGUyaG93dG8pOiBMaWtld2lzZS4KCSogY29mZmNvZGUuaCAoZHVtbXlfcmVsb2MxNl9leHRyYV9jYXNlcyk6IExpa2V3aXNlLgoJKiBlbGYzMi1pMzg2LmMgKFRSQUNFKTogTGlrZXdpc2UuCgkqIGhwMzAwaHB1eC5jIChjb252ZXJ0X3N5bV90eXBlLCBzd2FwX3N0ZF9yZWxvY19pbik6IExpa2V3aXNlLgoJKiByczYwMDAtY29yZS5jIChyczYwMDBjb2ZmX2dldF9zZWN0aW9uX2NvbnRlbnRzKTogTGlrZXdpc2UuCgkqIGNvZmZnZW4uYyAoY29mZl9wcmludF9zeW1ib2wpOiBEbyBhbiBmcHJpbnRmIHRvIHRoZSBmaWxlCglhcmd1bWVudCByYXRoZXIgdGhhbiB1c2luZyBwcmludGYuCgpUdWUgQXVnICAzIDE4OjE3OjI1IDE5OTMgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AY3lnbnVzLmNvbSkKCgkqIGNvZmZzd2FwLmg6IEFkZGVkIG1hY3JvcyB1c2VkIHdoZW4gYWNjZXNzaW5nIHNldmVyYWwgZmllbGRzOwoJZGVmYXVsdCBpcyB0aGUgc2FtZSBhcyBiZWZvcmUuCgkoY29mZl9zd2FwX2FvdXRoZHJfe2luLG91dH0pOiBIYW5kbGUgdGhlIEFscGhhIEVDT0ZGIGZpZWxkcy4KCSogY29mZi1hbHBoYS5jOiBEZWZpbmVkIG1hY3JvcyB0byB1c2UgdGhlIHJpZ2h0IHNpemVzIGluCgljb2Zmc3dhcC5oLgoJKiBsaWJlY29mZi5oOiBCYWNrZW5kIGluZm9ybWF0aW9uIGlzIG5vdyBpbiB0YXJnZXQgdmVjdG9yLCBub3QKCUJGRC4gIFN0YXJ0IG9mIGJhY2tlbmQgaW5mb3JtYXRpb24gaXMgQ09GRiBiYWNrZW5kIGluZm9ybWF0aW9uLgoJKiBjb2ZmLWFscGhhLmMsIGNvZmYtbWlwcy5jOiBDaGFuZ2VkIGFjY29yZGluZ2x5LgoJKiBlY29mZi5jIChlY29mZl9ta29iamVjdCk6IE5ldyBmdW5jdGlvbi4KCShBUk1BUF9TVEFSVCk6IENoYW5nZWQgaW50byBiYWNrZW5kIGluZm9ybWF0aW9uLCBzaW5jZSBBbHBoYSB1c2VzCglhIGRpZmZlcmVudCBuYW1lLgoJKGVjb2ZmX3NsdXJwX2FybWFwKTogRG9uJ3Qgb3ZlcmxheSBhcmNoaXZlIGhlYWRlci4KCSogYmZkLmM6IEluY2x1ZGUgbGliY29mZi5oLgoKVHVlIEF1ZyAgMyAxNjozMzoxMSAxOTkzICBEYXZpZCBKLiBNYWNrZW56aWUgIChkam1AdGhlcHViLmN5Z251cy5jb20pCgoJKiBNYWtlZmlsZS5pbiAoaW5zdGFsbCk6IEZpeCBzaCBzeW50YXggZXJyb3IuCgoJKiBhb3V0ZjEuaDogTWFrZSBiZmRfZXJyb3JfdHJhcCBleHRlcm47IGl0J3MgZGVmaW5lZCBpbiBiZmQuYy4KClR1ZSBBdWcgIDMgMTU6MTk6MDkgMTk5MyAgRnJlZCBGaXNoICAoZm5mQGRlbmViLmN5Z251cy5jb20pCgoJKiBubG1jb2RlLmggKG5sbV9zbHVycF9zeW1ib2xfdGFibGUpOiBEb24ndCB1c2UgJyYnIG9uIGFycmF5cy4KClR1ZSBBdWcgIDMgMTE6MDY6MjggMTk5MyAgSWFuIExhbmNlIFRheWxvciAgKGlhbkBjeWdudXMuY29tKQoKCSogZWNvZmYuYzogTmV3IGZpbGUgZm9yIGdlbmVyaWMgRUNPRkYgZnVuY3Rpb25zLgoJKiBlY29mZnN3YXAuaDogTmV3IGZpbGUgZm9yIEVDT0ZGIHN3YXBwaW5nIGZ1bmN0aW9ucyB3aGljaCBkaWZmZXIKCW9ubHkgc2xpZ2h0bHkgZm9yIGRpZmZlcmVudCB0YXJnZXRzLgoJKiBsaWJlY29mZi5oOiBBZGRlZCBwcm90b3R5cGVzIGZvciBlY29mZi5jIGZ1bmN0aW9ucy4KCShlY29mZl9iYWNrZW5kX2RhdGEpOiBOZXcgc3RydWN0dXJlLgoJKGVjb2ZmX3RkYXRhKTogQWRkZWQgYmFja2VuZF9kYXRhIGZpZWxkLiAgQ2hhbmdlZCBleHRlcm5hbCBkYXRhCglwb2ludGVycyB0byBiZSBQVFIgcmF0aGVyIHRoYW4gdG8gYSBwYXJ0aWN1bGFyIHN0cnVjdC4KCShlY29mZl9zeW1ib2xfc3RydWN0KTogTW92ZWQgaW4gZnJvbSBjb2ZmLW1pcHMuYy4KCSogY29mZi1hbHBoYS5jLCBjb2ZmLW1pcHMuYzogTW92ZWQgY29tbW9uIGZ1bmN0aW9ucyBpbnRvIGVjb2ZmLmMuCglBZGRlZCBFQ09GRiBiYWNrZW5kIHN0cnVjdHVyZXMuICBJbmNsdWRlIGVjb2Zmc3dhcC5oLgoJKiBjb2ZmLW1zeW0uYzogUmVtb3ZlZDsgc3VwZXJzZWRlZCBieSBlY29mZnN3YXAuaC4KCSogYmZkLmM6IEluY2x1ZGUgY29mZi9pbnRlcm5hbC5oLgoJKiBNYWtlZmlsZS5pbiAoQkZEX0xJQlMpOiBSZW1vdmVkIGNvZmYtbWlwcy5vIGFuZCBjb2ZmLW1zeW0uby4KCUFkZGVkIGVjb2ZmLm8uCgkoQkZENjRfQkFDS0VORFMpOiBBZGRlZCBjb2ZmLWFscGhhLm8uCgkoQ0ZJTEVTKTogUmVtb3ZlZCBjb2ZmLW1zeW0uYy4gIEFkZGVkIGVjb2ZmLmMuCgkoYmZkLm8pOiBBZGRlZCBkZXBlbmRlbmN5IG9uICQoSU5DRElSKS9jb2ZmL3N5bS5oLgoJKGNvZmYtbWlwcy5vKTogQWRkZWQgZGVwZW5kZW5jeSBvbiBlY29mZnN3YXAuaCBhbmQgY29mZi9lY29mZi5oLgoJKGVjb2ZmLm8sIGNvZmYtYWxwaGEubyk6IE5ldyB0YXJnZXRzLgoJKGNvZmYtbXN5bS5vKTogUmVtb3ZlZCB0YXJnZXQuCgpNb24gQXVnICAyIDIzOjMzOjM4IDE5OTMgIEpvaG4gR2lsbW9yZSAgKGdudUBjeWdudXMuY29tKQoKCSogZWxmMzItaHBwYS5oLCBob3N0cy8qOiAgUmVtb3ZlIChvbmUgbW9yZSB0aW1lKSBhbGwgb2NjdXJyYW5jZXMKCW9mIEVYRlVOIGluIHRoZSBCRkQgc291cmNlcy4gIEhlYXZlIGhvIQoKTW9uIEF1ZyAgMiAxNjo0NTo1NyAxOTkzICBTdHUgR3Jvc3NtYW4gIChncm9zc21hbiBhdCBjeWdudXMuY29tKQoKCSogY29mZmNvZGUuaCAoY29mZl9zZXRfYXJjaF9tYWNoX2hvb2spOiAgQWRkIGNoZWNrIGZvciBJMzg2TFlOWE1BR0lDLgoKTW9uIEF1ZyAgMiAxMjoxODowMyAxOTkzICBkYXZpZCBkIGB6b28nIHp1aG4gICh6b29AcnRsLmN5Z251cy5jb20pCgoJKiBob3N0cy9zdW4zLmg6IHJlbW92ZSBzb21lIG1vcmUgY29uZmxpY3RpbmcgZGVjbHMKCk1vbiBBdWcgIDIgMTE6NDg6MjMgMTk5MyAgU3R1IEdyb3NzbWFuICAoZ3Jvc3NtYW4gYXQgY3lnbnVzLmNvbSkKCgkqIGkzODZseW54LmM6ICBSZW1vdmUgdW5uZWNlc3NhcnkgZGVmIG9mIE5fSEVBREVSX0lOX1RFWFQsCglyZWRlZmluZSBURVhUX1NUQVJUX0FERFIgdG8gYmUgMC4KClN1biBBdWcgIDEgMjI6NTQ6MDggMTk5MyAgU3R1IEdyb3NzbWFuICAoZ3Jvc3NtYW4gYXQgY3lnbnVzLmNvbSkKCgkqIGNvbmZpZ3VyZS5ob3N0LCBjb25maWd1cmUuaW4sIGhvc3RzL2kzODZseW54Lmg6ICBMeW54LzM4NgoJaG9zdCBhbmQgdGFyZ2V0IGluZm8uCgpGcmkgSnVsIDMwIDE4OjA4OjI3IDE5OTMgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AdHdlZWRsZWR1bWIuY3lnbnVzLmNvbSkKCgkqIG5sbTMyLWkzODYuYzogTmV3IGZpbGUuICBGaXJzdCBjdXQgYXQgaTM4NiBOTE0gY29kZS4KCSogbGlibmxtLmg6IEFkZGVkIHNvbWUgbW9yZSBwcm90b3R5cGVzLgoJKHN0cnVjdCBubG1fcmVsZW50KTogTmV3IHN0cnVjdHVyZS4KCShubG1OQU1FKHN5bWJvbF90eXBlKSk6IEFkZGVkIHJjbnQgYW5kIHJlbG9jcyBmaWVsZHMuCgkoc3RydWN0IG5sbV9vYmpfdGRhdGEpOiBBZGRlZCBuZXcgZmllbGRzOiBubG1fc3ltYm9scywKCW5sbV90ZXh0X2xvdywgbmxtX2RhdGFfbG93LCBubG1fcmVsb2NfZml4dXBzLAoJbmxtX3JlbG9jX2ZpeHVwX3NlY3MuCgkoc3RydWN0IG5sbV9iYWNrZW5kX2RhdGEpOiBOZXcgc3RydWN0dXJlLCB3aXRoIGFjY2Vzc29yIG1hY3Jvcy4KCSogbmxtY29kZS5oOiBVc2UgTkxNX0hJQklUIHJhdGhlciB0aGFuIE1TQi4KCShubG1fb2JqZWN0X3ApOiBTZXQgU0VDX1JFTE9DIGZvciAudGV4dCBhbmQgLmRhdGEuICBEb24ndCBzZXQKCVNFQ19EQVRBIGZvciAuYnNzLiAgU2V0IEhBU19SRUxPQyBhbmQgSEFTX1NZTVMgZm9yIGFiZmQuICBTZXQgdGhlCglhcmNoaXRlY3R1cmUuCgkobmxtX3N3YXBfZml4ZWRfaGVhZGVyX291dCwgbmxtX3N3YXBfdmFyaWFibGVfaGVhZGVyX291dCwKCWZpbmRfbm9uemVybywgbmxtX3N3YXBfYXV4aWxpYXJ5X2hlYWRlcnNfb3V0KTogTmV3IG91dGJvdW5kCglzd2FwcGluZyBmdW5jdGlvbnMuCgkobmxtX2dldF9zeW10YWJfdXBwZXJfYm91bmQsIG5sbV9zbHVycF9zeW1ib2xfdGFibGUpOiBJbmNsdWRlCglleHRlcm5hbCByZWZlcmVuY2VzIGluIHN5bWJvbCB0YWJsZSBhcyB1bmRlZmluZWQgc3ltYm9scy4KCShubG1fZ2V0X3N5bXRhYiwgbmxtX3NsdXJwX3N5bWJvbF90YWJsZSk6IEZpbGwgaW4gYWxvY2F0aW9uCglhcmd1bWVudCBpbiBnZXRfc3ltdGFiIHJhdGhlciB0aGFuIGluIHNsdXJwX3N5bWJvbF90YWJsZS4KCShubG1fc2x1cnBfc3ltYm9sX3RhYmxlKTogU2F2ZSBzeW1ib2wgaW5mb3JtYXRpb24gaW4gdGRhdGEuCgkobmxtX3ByaW50X3N5bWJvbCk6IE5ldyBmdW5jdGlvbi4KCShubG1fc2x1cnBfcmVsb2NfZml4dXBzLCBubG1fZ2V0X3JlbG9jX3VwcGVyX2JvdW5kLAoJbmxtX2Nhbm9uaWNhbGl6ZV9yZWxvYyk6IE5ldyBmdW5jdGlvbnMgdG8gcmVhZCByZWxvY3MuCgkobmxtX2NvbXB1dGVfc2VjdGlvbl9maWxlX3Bvc2l0aW9ucywgbmxtX3NldF9zZWN0aW9uX2NvbnRlbnRzLAoJbmxtX2V4dGVybmFsX3JlbG9jX2NvbXBhcmUsIG5sbV93cml0ZV9vYmplY3RfY29udGVudHMpOiBOZXcKCWZ1bmN0aW9ucyB0byBjcmVhdGUgTkxNIGZpbGVzLgoJKiBubG0tdGFyZ2V0Lmg6IERlZmluZSBhbGwgdGhlIG5sbSBmdW5jdGlvbnMgaGVyZSBlaXRoZXIgYXMKCWRlZmF1bHQgdmFsdWVzIG9yIGluIHRlcm1zIG9mIG5sbU5BTUUuICBVc2UgSlVNUF9UQUJMRShubG0pLiAgU2V0Cgl0aGUgYmFja2VuZF9kYXRhIGZpZWxkIHRvIFRBUkdFVF9CQUNLRU5EX0RBVEEuCgkqIG5sbTMyLWdlbi5jLCBubG02NC1nZW4uYzogRG9uJ3QgZGVmaW5lIGZ1bmN0aW9uIG1hY3JvcyBoZXJlOwoJdGhleSBhcmUgbm93IGluIG5sbS10YXJnZXQuaC4KCShUQVJHRVRfQkFDS0VORF9EQVRBKTogRGVmaW5lIGFzIE5VTEwuCgkqIG5sbS5jIChubG1fbWtvYmplY3QpOiBEbyBhbGxvY2F0ZSB0aGUgdGRhdGEgZmllbGQuCgkobmxtX3NldF9hcmNoX21hY2gpOiBOZXcgZnVuY3Rpb24uCgkqIHRhcmdldHMuYzogQWRkZWQgbmxtMzJfaTM4Nl92ZWMuCgkqIE1ha2VmaWxlLmluIChCRkQzMl9CQUNLRU5EUyk6IEFkZGVkIG5sbTMyLWkzODYuby4KCShDRklMRVMpOiBBZGRlZCBubG0zMi1pMzg2LmMuCgkobmxtMzItZ2VuLm8sIG5sbTY0LWdlbi5vKTogRGVwZW5kIG9uIG5sbS10YXJnZXQuaC4KCShubG0zMi1pMzg2Lm8pOiBOZXcgdGFyZ2V0LgoKVGh1IEp1bCAyOSAyMDoyMDozOSAxOTkzICBkYXZpZCBkIGB6b28nIHp1aG4gICh6b29AcnRsLmN5Z251cy5jb20pCgoJKiBob3N0cy9zdW4zLmg6IHJlbW92ZSBzb21lIGZ1bmN0aW9uIGRlY2xzIHRoYXQgY29uZmxpY3Qgdy8gQU5TSQoJQywgYW5kIGFyZW4ndCBuZWVkZWQgYW55d2F5IChyZXR1cm4gaW50KQoKV2VkIEp1bCAyOCAxNTo0NjozOCAxOTkzICBLZW4gUmFlYnVybiAgKHJhZWJ1cm5AY2FtYnJpZGdlLmN5Z251cy5jb20pCgoJKiBlbGZjb2RlLmg6IFVzZSBjYXN0cyB3aXRoIGJmZF9hbGxvYyBhbmQgYWxsb2NhLgoKVHVlIEp1bCAyNyAxMjo1MTo0MyAxOTkzICBGcmVkIEZpc2ggIChmbmZAZGVuZWIuY3lnbnVzLmNvbSkKCgkqIG5sbXszMiw2NH0tZ2VuLmMgKEpVTVBfVEFCTEVfUFJFRklYKTogIERlbGV0ZS4KCSogbmxtezMyLDY0fS1nZW4uYyAoSlVNUF9UQUJMRV9JTklUKTogIE5ldyBtYWNybyB0aGF0IHdvcmtzIHdpdGgKCW9sZGVyIGNwcCdzLCB0aGF0IGRvbid0IGRvIGFkZGl0aW9uYWwgcmVwbGFjZW1lbnQgb24gdGhlIEpVTVBfVEFCTEUKCW1hY3JvJ3MgYXJndW1lbnQuCgkqIG5sbS10YXJnZXQuaCAoSlVNUF9UQUJMRV9JTklUKTogIFVzZSBuZXcgbWFjcm8gaW4gcGxhY2Ugb2YKCUpVTVBfVEFCTEUgbWFjcm8uCgpNb24gSnVsIDI2IDE3OjM5OjAxIDE5OTMgIEppbSBLaW5nZG9uICAoa2luZ2RvbkBsaW90aC5jeWdudXMuY29tKQoKCVlldCBhbm90aGVyIHRyYWQtY29yZSB2YXJpYW50OgoJKiBjb25maWcvZXNpeC5taCwgaG9zdHMvZXNpeC5oOiBOZXcgZmlsZXMuCgkqIGNvbmZpZ3VyZS5ob3N0OiBVc2UgdGhlbS4KCk1vbiBKdWwgMjYgMTM6MjI6MTUgMTk5MyAgSWFuIExhbmNlIFRheWxvciAgKGlhbkBjeWdudXMuY29tKQoKCSogcmVsb2MuYyAoYmZkX3BlcmZvcm1fcmVsb2NhdGlvbik6IEhhbmRsZSB0aGUgY2FzZSBvZgoJY29tcGxhaW5fb3ZlcmZsb3dfYml0ZmllbGQsIHJpZ2h0c2hpZnQgPiBiaXRwb3MsIGFuZCBhIG5lZ2F0aXZlCgludW1iZXIuCgpNb24gSnVsIDI2IDE0OjQwOjEwIDE5OTMgIEtlbiBSYWVidXJuICAocmFlYnVybkBjYW1icmlkZ2UuY3lnbnVzLmNvbSkKCgkqIGVsZmNvZGUuaDogUmVpbXBsZW1lbnQgc2VnbWVudCB3cml0aW5nLgoJKGVsZl93cml0ZV9waGRycyk6IFVzZSBwcmVjb21wdXRlZCBlX3Bob2ZmIHJhdGhlciB0aGFuIG1ha2luZwoJYXNzdW1wdGlvbnMuCgkoZWxmX2J1aWxkX3BoZHJzKTogRGlzYWJsZWQsIGZvciBub3cuCgkoYXNzaWduX2ZpbGVfcG9zaXRpb25fZm9yX3NlY3Rpb24pOiBEb24ndCBjaGFuZ2UgZmlsZSBvZmZzZXQgZm9yCglTSFRfTk9CSVRTLgoJKGFzc2lnbl9maWxlX3Bvc2l0aW9uc19mb3Jfc3ltdGFiX2FuZF9zdHJ0YWJzKTogTmV3IGZ1bmN0aW9uLgoJKHN0cnVjdCBzZWdfaW5mbyk6IE5ldyB0eXBlLgoJKG1hcF9wcm9ncmFtX3NlZ21lbnRzKTogTmV3IGZ1bmN0aW9uLgoJKGFzc2lnbl9maWxlX3Bvc2l0aW9uc19leGNlcHRfcmVsb2NzKTogRm9yIGV4ZWN1dGFibGVzLCBsZWF2ZQoJc2VjdGlvbiBoZWFkZXJzICZjIGZvciBsYXN0LCBhbmQgcHJvcGVybHkgYWxpZ24gYWxsIHNlY3Rpb25zIHdpdGgKCWZsYWcgU0hGX0FMTE9DIHNldC4KCShwcmVwX2hlYWRlcnMpOiBObyBsb25nZXIgYWJvcnQgd2hlbiBFWEVDX1AgaXMgc2V0LgoJKHdyaXRlX3NoZHJzX2FuZF9laGRyKTogRGVsZXRlZCBhbGwgY29kZSByZWxhdGluZyB0byBwcm9ncmFtCglzZWdtZW50cy4KCgkqIGVsZmNvZGUuaCAodmFyaW91cyk6IERlbGV0ZWQgc29tZSB1bnVzZWQgY29kZSwgYW5kIGRlYnVnZ2luZwoJIm1hbGxvYygwKSIgY2FsbHMuCgkod3JpdGVfcmVsb2NzKTogQ2FjaGUgdmFsdWUgb2YgbGFzdCBzeW1ib2wgbG9va2VkIHVwLCB0byBzYXZlCgl0aW1lIGlmIHRoZSBzeW1ib2wgaXMgcmVmZXJyZWQgdG8gcmVwZWF0ZWRseS4KCShlbGZfZmFrZV9zZWN0aW9ucyk6IENoZWNrIG9ubHkgU0VDX1JFTE9DIGZsYWcsIG5vdCBudW1iZXIgb2YKCXJlbG9jcy4KCShhc3NpZ25fc2VjdGlvbl9udW1iZXJzKTogTGlrZXdpc2UuCgoJKiBNYWtlZmlsZS5pbiAob2ZpbGVzKTogU3RhcnMgaW4gd2lsZGNhcmRzIGJlbG9uZyBvdXRzaWRlIHF1b3Rlcy4KCgkqIGxpYmVsZi5oIChzdHJ1Y3QgZWxmX2JhY2tlbmRfZGF0YSk6IE5ldyBmaWVsZCwgbWF4cGFnZXNpemUuCgkoc3RydWN0IGVsZl9vYmpfdGRhdGEpOiBOZXcgZmllbGQsIHBoZHIuCgkqIGVsZjMyLXRhcmdldC5oIChlbGYzMl9iZWQpOiBJbml0aWFsaXplIG1heHBhZ2VzaXplIGZyb20KCUVMRl9NQVhQQUdFU0laRS4KCShFTEZfTUFYUEFHRVNJWkUpOiBEZWZhdWx0IHRvIDEuCgkqIGVsZjY0LXRhcmdldC5oIChlbGY2NF9iZWQsIEVMRl9NQVhQQUdFU0laRSk6IExpa2V3aXNlLgoJKiBlbGYzMi1zcGFyYy5jIChFTEZfTUFYUEFHRVNJWkUpOiBEZWZpbmUuCgkoZWxmX3NwYXJjX2hvd3RvX3RhYmxlKTogQWxsIHJlbG9jcyBzaG91bGQgaGF2ZSBwY3JlbF9vZmZzZXQ9dHJ1ZS4KCU1vc3Qgc2hvdWxkIGhhdmUgbGVuZ3RoIGZpZWxkIG9mIGAyJy4KCgkqIHJlbG9jLmMgKGJmZF9wZXJmb3JtX3JlbG9jYXRpb24pOiBIYW5kbGUgNjQtYml0IHJlbG9jcy4KCgkqIGNvbmZpZy9zcGFyYy1hb3V0Lm10IChUQVJHRVRfQkFDS0VORFMpOiBEZWZpbmUuCgpNb24gSnVsIDI2IDA4OjU2OjE2IDE5OTMgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AY3lnbnVzLmNvbSkKCgkqIGNvbmZpZ3VyZS5pbjogRG9uJ3QgbG9vayBpbiAke3NyY2Rpcn0gZm9yICR7dGFyZ2V0X21ha2VmaWxlX2ZyYWd9OwoJdGhlIHRvcCBsZXZlbCBzY3JpcHQgaGFzIGFscmVhZHkgYWRqdXN0ZWQgZm9yIGl0LgoKTW9uIEp1bCAyNiAwODowOToxOSAxOTkzICBTdGV2ZSBDaGFtYmVybGFpbiAgKHNhY0BwaHlkZWF1eC5jeWdudXMuY29tKQoKCSogc3JlYy5jIChzcmVjX3dyaXRlX3N5bWJvbHMpOiAgR2V0IENSIExGIGluIHRoZSByaWdodCBvcmRlci4KCk1vbiBKdWwgMjYgMDI6MDg6NDEgMTk5MyAgSmltIEtpbmdkb24gIChraW5nZG9uQGxpb3RoLmN5Z251cy5jb20pCgoJKiBob3N0cy92YXhic2QuaDogSW5jbHVkZSBzdGQtaG9zdC5oLiAgRG9uJ3QgaW5jbHVkZSA8bWFjaGluZS9wYXJhbS5oPi4KClNhdCBKdWwgMjQgMTY6MTM6MDEgMTk5MyAgSWFuIExhbmNlIFRheWxvciAgKGlhbkB0d2VlZGxlZHVtYi5jeWdudXMuY29tKQoKCSogcmVsb2MuYyAoYmZkX3BlcmZvcm1fcmVsb2NhdGlvbik6IEhhbmRsZSBjYXNlIG9mIHJpZ2h0c2hpZnQgIT0KCWJpdHBvcyB3aGVuIG92ZXJmbG93IGNoZWNraW5nLgoKRnJpIEp1bCAyMyAxMDoyMDoyNyAxOTkzICBEb3VnIEV2YW5zICAoZGplQGNhbnVjay5jeWdudXMuY29tKQoKCSogYmZkLmMgKGJmZF9ub25yZXByZXNlbnRhYmxlX3NlY3Rpb24sIGJmZF91bmRlZmluZWRfc3ltYm9sLAoJYmZkX3JlbG9jX3ZhbHVlX3RydW5jYXRlZCwgYmZkX3JlbG9jX2lzX2Rhbmdlcm91cywgYmZkX2Fzc2VydCk6CglTZW5kIGVycm9yIG1lc3NhZ2VzIHRvIHN0ZGVyci4KClRodSBKdWwgMjIgMTU6NTc6MjkgMTk5MyAgRnJlZCBGaXNoICAoZm5mQGRlbmViLmN5Z251cy5jb20pCgoJKiBubG17MzIsNjR9LXRhcmdldC5oOiAgUmVtb3ZlLgoJKiBubG0tdGFyZ2V0Lmg6ICBOZXcgZmlsZSwgbWVyZ2VkIGZyb20gbmxtezMyLDY0fS10YXJnZXQuaAoJKiBsaWJubG0uaCAoTkxNX0FSQ0hfU0laRSk6ICBEZWZpbmUgdG8gQVJDSF9TSVpFLgoJKiBubG0uYyAoQVJDSF9TSVpFKTogIFJlbW92ZSBkZWZpbmUgdG8gemVyby4KCSogbmxtMzItZ2VuLmMgKEFSQ0hfU0laRSk6ICBEZWZpbmUgdG8gMzIuCgkqIG5sbTMyLWdlbi5jIChKVU1QX1RBQkxFX1BSRUZJWCk6ICBEZWZpbmUgdG8gbmxtMzIuCgkqIG5sbXszMiw2NH0tZ2VuLmMgKG5sbS10YXJnZXQuaCk6ICBJbmNsdWRlLgoJKiB0YXJnZXRzLmMsIGxpYm5sbS5oLCBubG0uYywgbmxtezMyLDY0fS1nZW4uYywgbmxtezMyLDY0fS5jLAoJbmxtY29kZS5oOiAgQ29udmVydCBwcmVmaXhlcyBmcm9tIGJmZF9ubG08c2l6ZT4gdG8ganVzdAoJbmxtPHNpemU+LCBhbmQgdXNlIG1hY3JvcyBzZWxlY3Qgc2l6ZS4KClRodSBKdWwgMjIgMTU6NDA6MTQgMTk5MyAgSy4gUmljaGFyZCBQaXhsZXkgIChyaWNoQHNlbmRhaS5jeWdudXMuY29tKQoKCSogTWFrZWZpbGUuaW4gKE1ha2VmaWxlKTogYWRkIGNvbmZpZ3VyZS5pbiwgZHJvcCByZWR1bmRhbnQKCSAgJChzcmNkaXIpLCBkcm9wIHJlZHVuZGFudCAuLwoKVGh1IEp1bCAyMiAxMzozNDo1NyAxOTkzICBJYW4gTGFuY2UgVGF5bG9yICAoaWFuQHR3ZWVkbGVkdW1iLmN5Z251cy5jb20pCgoJKiBocHV4LWNvcmUuYzogTmV3IGZpbGU7IGJhY2tlbmQgZm9yIEhQL1VYIHN0eWxlIGNvcmUgZmlsZXMuCgkqIGJmZC5jIChzdHJ1Y3QgX2JmZCk6IFJlbmFtZWQgaHBwYV9jb3JlX2RhdGEgZmllbGQgdG8KCWhwdXhfY29yZV9kYXRhLgoJKiBiZmQtaW4yLmg6IFVwZGF0ZWQuCgkqIGhwcGEuYyAobWFrZV9iZmRfYXNlY3Rpb24sIGhwcGFfY29yZV9maWxlX3AsCglocHBhX2NvcmVfZmlsZV9mYWlsaW5nX2NvbW1hbmQsIGhwcGFfY29yZV9maWxlX2ZhaWxpbmdfc2lnbmFsLAoJaHBwYV9jb3JlX2ZpbGVfbWF0Y2hlc19leGVjdXRhYmxlX3ApOiBNb3ZlZCBpbnRvIGhwdXgtY29yZS5jLgoJUmVtb3ZlZCBmcm9tIHRhcmdldCB2ZWN0b3IuCgkqIGxpYmhwcGEuaCAoc3RydWN0IGhwcGFfY29yZV9zdHJ1Y3QgYW5kIGFjY2Vzc29yIG1hY3Jvcyk6IE1vdmVkCglpbnRvIGhwdXgtY29yZS5jLgoJKiB0YXJnZXRzLmM6IElmIEhQVVhfQ09SRSBpcyBkZWZpbmVkLCBhZGQgaHB1eF9jb3JlX3ZlYyB0bwoJdGFyZ2V0IGxpc3QuCgkqIGNvbmZpZy9ocDMwMC5taCAoSERFRklORVMpOiBTZXQgdG8gLURIUFVYX0NPUkUuCgkoSERFUEZJTEVTKTogU2V0IHRvIGhwdXgtY29yZS5vLgoJKiBjb25maWcvaHBwYWJzZC5taCwgY29uZmlnL2hwcGFocHV4Lm1oOiBMaWtld2lzZS4KCSogaG9zdHMvaHAzMDAuaCAoSE9TVF9IUDMwMEhQVVgpOiBEZWZpbmUuCgkqIE1ha2VmaWxlLmluIChPUFRJT05BTF9CQUNLRU5EUyk6IEFkZGVkIHNjby1jb3JlLm8sCglhaXgzODYtY29yZS5vLCBocHV4LWNvcmUuby4KCShzY28tY29yZS5vLCBhaXgzODYtY29yZS5vLCBocHV4LWNvcmUubyk6IE5ldyBkZXBlbmRlbmNpZXMuCgoJKiByZWxvYy5jIChlbnVtIGNvbXBsYWluX292ZXJmbG93KTogTmV3IGVudW1lcmF0aW9uIHdpdGggdGhlCgl2YXJpb3VzIGZsYXZvdXJzIG9mIG92ZXJmbG93IGNoZWNraW5nLgoJKHNydHVjdCByZWxvY19ob3d0b19zdHJ1Y3QpOiBDaGFuZ2VkIGNvbXBsYWluX29uX292ZXJmbG93IGZpZWxkCglmcm9tIGJvb2xlYW4gdG8gZW11bSBjb21wbGFpbl9vdmVyZmxvdy4gIFJlbW92ZWQgb2Jzb2xldGUgYWJzb2x1dGUKCWZpZWxkLgoJKEhPV1RPKTogUmVtb3ZlZCBhYnNvbHV0ZSBhcmd1bWVudC4KCShiZmRfcGVyZm9ybV9yZWxvY2F0aW9uKTogRG8gb3ZlcmZsb3cgY2hlY2tpbmcgb24gYWxsIHR5cGVzIG9mCglmaWVsZHMuCgkqIGJmZC1pbjIuaDogVXBkYXRlZCBhY2NvcmRpbmdseS4KCSogYWxsIHRhcmdldHM6IFVwZGF0ZWQgaW5pdGlhbGl6YXRpb24gb2YgcmVsb2MgaG93dG8gdGFibGVzLgoKV2VkIEp1bCAyMSAyMDozNDozNCAxOTkzICBLZW4gUmFlYnVybiAgKHJhZWJ1cm5AY2FtYnJpZGdlLmN5Z251cy5jb20pCgoJKiBvcG5jbHMuYyAoYmZkX2NyZWF0ZSk6IERvbid0IHVzZSBDKysga2V5d29yZCAidGVtcGxhdGUiIGFzIGEgQwoJdmFyaWFibGUgbmFtZS4KClR1ZSBKdWwgMjAgMTU6MDI6MjMgMTk5MyAgRnJlZCBGaXNoICAoZm5mQGRlbmViLmN5Z251cy5jb20pCgoJKiBjb2ZmLW02OGsuYyAobTY4a19ob3d0bzJydHlwZSk6ICBNYWtlIGFyZyBDT05TVCB0byBtYXRjaCBjYWxsZXJzLgoKCSogZWxmY29kZS5oOiAgRml4IHNldmVyYWwgaWxsZWdhbCBwb2ludGVyIGNvbWJpbmF0aW9uIHdhcm5pbmdzIGZvcgoJdXNhZ2VzIG9mIGJmZF9hbGxvYyBhbmQgYWxsb2NhLgoKCSogbGlibmxtLmggKG5sbV9vYmpfdGRhdGEpOiAgUmVuYW1lIGhpZGRlbiBzdHJ1Y3QgbWVtYmVycyB0byBhdm9pZAoJYXBwYXJlbnQgU3VuIEMgcHJlcHJvY2Vzc29yIHJlY3Vyc2lvbi4gIEZpeCBhY2Nlc3MgbWFjcm9zLgoJKiBubG1jb2RlLmg6ICBSZW1vdmUgc3B1cmlvdXMgJyYnIGJlZm9yZSBzZXZlcmFsIGFycmF5IHJlZmVyZW5jZXMuCgpUdWUgSnVsIDIwIDE0OjM2OjI3IDE5OTMgIEppbSBLaW5nZG9uICAoa2luZ2RvbkBkZW5lYi5jeWdudXMuY29tKQoKCSogUmVuYW1lIGZvciBET1MgdW5pcXVlbmVzczogY29mZi1tNjhrLXVuLmMgLT4gY29mZi11NjhrLmMKCWNvbmZpZy9tNjhrLWNvZmZ1bi5tdCAtPiB1NjhrLWNvZmYubXQuCgkqIE1ha2VmaWxlLmluLCBjb25maWd1cmUuaW46IENvcnJlc3BvbmRpbmcgY2hhbmdlcy4KClR1ZSBKdWwgMjAgMTY6MjE6NTIgMTk5MyAgS2VuIFJhZWJ1cm4gIChyYWVidXJuQGNhbWJyaWRnZS5jeWdudXMuY29tKQoKCSogZWxmMzItc3BhcmMuYyAoZWxmX3NwYXJjX2hvd3RvX3RhYmxlKTogRG9uJ3QgdXNlICImIiBiZWZvcmUKCWZ1bmN0aW9uIG5hbWU7IGl0J3MgdmFsaWQgd2l0aG91dCwgYW5kIHNvbWUgY29tcGlsZXJzIGdpdmUKCXdhcm5pbmdzIHdpdGggaXQgdGhlcmUuCgpUdWUgSnVsIDIwIDA4OjIxOjE1IDE5OTMgIEZyZWQgRmlzaCAgKGZuZkBkZW5lYi5jeWdudXMuY29tKQoKCSogYmZkLWluLmg6ICBBcHBseSBzb21lIG9mIHRoZSBjaGFuZ2VzIHRoYXQgd2VyZSBtYWRlIHRvIGJmZC1pbjIuaC4KCSogYmZkLmMgKHVuaW9uIHRkYXRhKTogIEFkZCBubG1fb2JqX2RhdGE7CgkqIHRhcmdldHMuYyAoZW51bSB0YXJnZXRfZmxhdm91cik6ICBBZGQgYmZkX3RhcmdldF9ubG1fZmxhdm91ci4KCk1vbiBKdWwgMTkgMjA6NDY6MTggMTk5MyAgRnJlZCBGaXNoICAoZm5mQGRlbmViLmN5Z251cy5jb20pCgoJKiBjb25maWd1cmUuaW4gKCotKi1uZXR3YXJlLCBpWzM0XTg2LSotbmV0d2FyZSk6ICBOZXcgY29uZmlncy4KCSogTWFrZWZpbGUuaW4gKEJGRDMyX0JBQ0tFTkRTKTogIEFkZCBubG0ubywgbmxtMzIubywgbmxtMzItZ2VuLm8uCgkqIE1ha2VmaWxlLmluIChCRkQ2NF9CQUNLRU5EUyk6ICBBZGQgbmxtNjQubywgbmxtNjQtZ2VuLm8uCgkqIE1ha2VmaWxlLmluIChDRklMRVMpOiAgQWRkIG5sbXszMiw2NH0uYywgbmxtezMyLDY0fS1nZW4uYy4KCSogTWFrZWZpbGUuaW4gKG5sbS5vLCBubG17MzIsNjR9Lm8sIG5sbXszMiw2NH0tZ2VuLm86ICBOZXcgdGFyZ2V0cy4KCSogYmZkLWluMi5oIChJTkxJTkUpOiAgRGVmaW5lcyBtb3ZlZCBoZXJlLgoJKiB7YW91dHguaCwgZWxmLmMsIGVsZmNvZGUuaH06ICBNb3ZlIElOTElORSBkZWZpbmVzIHRvIGJmZC1pbjIuaC4KCSogbGliZWxmLmggKENBVDQpOiAgTW92ZSBkZWZpbmUgdG8gYmZkLWluMi5oLgoJKiBiZmQtaW4yLmggKENBVDQpOiAgTWVyZ2UgQ0FUNCBtYWNybyB3aXRoIG90aGVyIENBVCBtYWNyb3MuCgkqIGJmZC1pbjIuaCAodW5pb24gdGRhdGEpOiAgQWRkIG5sbV9vYmpfZGF0YS4KCSogYmZkLWluMi5oIChlbnVtIHRhcmdldF9mbGF2b3VyKTogIEFkZCBiZmRfdGFyZ2V0X25sbV9mbGF2b3VyLgoJKiB0YXJnZXRzLmMgKGJmZF9ubG17MzIsNjR9X3tiaWcsbGl0dGxlfV92ZWMpOiAgQWRkIHByb3RvdHlwZXMuCgkqIHRhcmdldHMuYyAodGFyZ2V0X3ZlY3Rvcik6ICBBZGQgYmZkX25sbXszMiw2NH1fe2JpZyxsaXR0bGV9X3ZlYy4KCSogKGxpYm5sbS5oLCBubG0uYywgbmxtY29kZS5oLCBubG17MzIsNjR9LWdlbi5jLAoJbmxtezMyLDY0fS10YXJnZXQuaCwgbmxtezMyLDY0fS5jLCBjb25maWcvaTM4Ni1ubG0ubXQpOiAgTmV3IGZpbGVzCglmb3IgTkxNIHN1cHBvcnQuCgpNb24gSnVsIDE5IDE1OjA5OjAxIDE5OTMgIGRhdmlkIGQgYHpvbycgenVobiAgKHpvb0BydGwuY3lnbnVzLmNvbSkKCgkqIGNvbmZpZ3VyZS57aG9zdHMsaW59OiBhZGQgaVszNF04Ni0qLWx5bnhvcyogc3VwcG9ydAoKTW9uIEp1bCAxOSAxNDo1MzozMCAxOTkzICBLZW4gUmFlYnVybiAgKHJhZWJ1cm5AcnRsLmN5Z251cy5jb20pCgoJKiBlbGYuYywgZWxmY29kZS5oLCBsaWJlbGYuaDogU2VyaW91cyByZW9yZ2FuaXphdGlvbi4KCURlbGV0ZWQgYHRodW5rJyBzdHJ1Y3R1cmUsIG1lcmdlZCBpbnRvIHRkYXRhLCBkdXBsaWNhdGUgZGF0YQoJZWxpbWluYXRlZC4KCVJlYXJyYW5nZWQgZnVuY3Rpb25zLCBncm91cGluZyBieSBmdW5jdGlvbmFsaXR5LgoJQnJva2UgdXAgbWFueSBmdW5jdGlvbnMgaW4gZWxmY29kZS5oLCByZS1vcmRlcmVkIG1hbnkgcGFydHMgb2YKCWZpbGUgd3JpdGluZyB0byBoYW5kbGUgdW5wcmVkaWN0YWJsZSBzdGF0ZSBvZiBzZWN0aW9uIHJlbG9jYXRpb24KCXRhYmxlIGFzIHByb3ZpZGVkIGJ5IHZhcmlvdXMgYXBwbGljYXRpb25zLgoJU3RpbGwgbmVlZHMgY2xlYW51cDogTWVyZ2UgZnVuY3Rpb25zIGJhY2sgdG9nZXRoZXIsIHNwbGl0IG91dAoJZGF0YSBzdHJ1Y3R1cmUgd2l0aCBvbmx5IGRhdGEgdGhhdCBpcyB1c2VkIG9ubHkgd2hlbiB3cml0aW5nIG91dAoJb2JqZWN0IGZpbGUuCgoJKiBlbGYuYyAoYmZkX2VsZl9nZW5lcmljX3JlbG9jKTogTmV3IGZ1bmN0aW9uLCB0YWtlbiBmcm9tCgljb2ZmLW1pcHMuYy4KCSogZWxmMzItc3BhcmMuYyAoZWxmX3NwYXJjX2hvd3RvX3RhYmxlKTogVXNlIGl0LCB0byB3b3JrIGFyb3VuZAoJYmZkX3BlcmZvcm1fcmVsb2NhdGlvbiBsb3NzYWdlLgoKCSogTWFrZWZpbGUuaW4gKEJGRF9MSUJTKTogSW5jbHVkZSBjb2ZmLW1pcHMubyBhbmQgY29mZi1tc3ltLm8sIHNvCgl0aGF0IGdkYiB3aWxsIGxpbmsuCgkob2ZpbGVzKTogRG9uJ3QgdXNlIHNvcnQgb3IgdW5pcTsgZG8gaXQgd2l0aCBzaCBjb25zdHJ1Y3RzLgoKU3VuIEp1bCAxOCAxOTo0MjoxNCAxOTkzICBKaW0gS2luZ2RvbiAgKGtpbmdkb25AcnRsLmN5Z251cy5jb20pCgoJKiBjb2ZmY29kZS5oOiBSZWNvZ25pemUgSTM4NlBUWE1BR0lDLgoJKiBhb3V0ZjEuaCwgbGliYW91dC5oOiBBZGQgTV8zODZfRFlOSVguCgkqIHRyYWQtY29yZS5jIChUUkFEX0NPUkVfVVNFUl9PRkZTRVQsIFRSQURfQ09SRV9TVEFDS19GSUxFUE9TKToKCU5ldyBtYWNyb3M7IHVzZSBpdCBpZiBkZWZpbmVkLgoJKiBjb25maWcvc3ltbWV0cnkubWgsIGhvc3RzL3N5bW1ldHJ5Lmg6IE5ldyBmaWxlcy4KCkZyaSBKdWwgMTYgMTQ6NTY6MzEgMTk5MyAgSmltIEtpbmdkb24gIChraW5nZG9uQHJ0bC5jeWdudXMuY29tKQoKCSogUmVuYW1lIGVsZnszMiw2NH0tZ2VuZXJpYy5jIHRvICotZ2VuLmMgZm9yIDE0IGNoYXIgZmlsZW5hbWVzLgoJKiBNYWtlZmlsZS5pbjogQ2hhbmdlIGFjY29yZGluZ2x5LgoJKENGSUxFUyk6IEFkZCBlbGY2NC1nZW4uYy4KCkZyaSBKdWwgMTYgMDk6NTM6MjMgMTk5MyAgSWFuIExhbmNlIFRheWxvciAgKGlhbkBjeWdudXMuY29tKQoKCSogY29mZi1taXBzLmM6IFVzZSBNSVBTX0FPVVRfe09afU1BR0lDIHJhdGhlciB0aGFuIHtPWn1NQUdJQy4KClRodSBKdWwgMTUgMTY6MDI6MDcgMTk5MyAgSWFuIExhbmNlIFRheWxvciAgKGlhbkB0d2VlZGxlZHVtYi5jeWdudXMuY29tKQoKCSogY29mZi1tODhrLmMgKGhvd3RvX3RhYmxlKTogQ29ycmVjdGVkIGJpdHNpemUgZm9yIFJfUENSMjZMIGZyb20KCTE2IHRvIDI2LgoKV2VkIEp1bCAxNCAxNToyOTo1NiAxOTkzICBKaW0gS2luZ2RvbiAgKGtpbmdkb25AbGlvdGguY3lnbnVzLmNvbSkKCgkqIGhwcGEuYyBbSE9TVF9IUFBBQlNEXTogVXNlIGhwdXgtc3R5bGUgY29yZSBmaWxlcy4KCSogbGliaHBwYS5oIFtIT1NUX0hQUEFCU0RdOiBJbmNsdWRlIGhwdXggdmVyc2lvbiBvZiBjb3JlLmgKCldlZCBKdWwgMTQgMDk6MzA6NDggMTk5MyAgRG91ZyBFdmFucyAgKGRqZUBjYW51Y2suY3lnbnVzLmNvbSkKCgkqIGNvbmZpZ3VyZS5pbjogUmVjb2duaXplIGg4MzAwaC0qLSouCgpUdWUgSnVsIDEzIDEyOjAzOjAwIDE5OTMgIFN0ZXZlIENoYW1iZXJsYWluICAoc2FjQHBoeWRlYXV4LmN5Z251cy5jb20pCgoJKiBjb2ZmLWg4NTAwLmMgKHJlbG9jX3Byb2Nlc3NpbmcsIHJ0eXBlMmhvd3RvKTogTmV3IHJlbG9jYXRpb24KCXR5cGUgUl9IODUwMF9ISUdIXzE2LgoJKiBjb2ZmLXNoLmMgKHJfaW1tMzIpOiBHZXQgdGhlIHdpZHRoIG9mIHRoZSByZWxvYyByaWdodC4KClR1ZSBKdWwgMTMgMTY6NDg6NTYgMTk5MyAgRnJlZGVyaWMgUGllcnJlc3RlZ3V5IChGLlBpZXJyZXN0ZWd1eUBmcmNsLmJ1bGwuZnIpCgoJKiBjb25maWd1cmUuaW46IEFkZCBuZXcgdGFyZ2V0IG02OGstY29mZnVuIHRvIHRoZSBkcHgvMi4KCSogY29uZmlnL202OGstY29mZnVuLm10OiBOZXcgZmlsZSwgcmVuYW1lZCBmcm9tIGNvbmZpZy9kcHgyLm10LgoKTW9uIEp1bCAxMiAxMDo0Mjo0OSAxOTkzICBLZW4gUmFlYnVybiAgKHJhZWJ1cm5AZGVuZWIuY3lnbnVzLmNvbSkKCgkqIHJlbG9jLmMgKGVudW0gYmZkX3JlbG9jX2NvZGVfcmVhbCk6IE1vdmUgU1BBUkNfQkFTRTEzIHJlbG9jIGludG8KCXNwYXJjLWFvdXQtc3BlY2lmaWMgbGlzdC4KCgkqIGxpYmVsZi5oIChzdHJ1Y3QgZWxmX29ial90ZGF0YSk6IEFkZCBmaWVsZCBgdGh1bmsnLgoKCSogY29uZmlnL3NwYXJjLWVsZi5tdCAoVEFSR0VUX0JBQ0tFTkRTKTogTmV3IG1ha2UgdmFyaWFibGUuCgpUaHUgSnVsICAxIDE0OjUyOjQ3IDE5OTMgIEZyZWRlcmljIFBpZXJyZXN0ZWd1eSAoRi5QaWVycmVzdGVndXlAZnJjbC5idWxsLmZyKQoJCQkgIGFuZCBKaW0gS2luZ2RvbiAoa2luZ2RvbkBjeWdudXMuY29tKQoKCSogZWxmY29kZS5oOiBVc2UgbWVtc2V0IG5vdCBiemVyby4KCSogdHJhZC1jb3JlLmM6IERvbid0IGluY2x1ZGUgPHN5cy9maWxlLmg+LgoJKiBpMzg2bGludXguaDogSW5jbHVkZSA8c3lzL2ZpbGUuaD4uCgkqIGNvZmYtbTY4ay11bi5jOiBuZXcgZmlsZSB0byBoYW5kbGUgbmFtZXMgd2l0aCB1bmRlcnNjb3JlcyBvbgoJc3ZyMyBtYWNoaW5lcy4KCSogY29mZi1tNjhrLmMgKG02OGtfcnR5cGUyaG93dG8pOiBhZGRlZCAjaWZkZWYgT05MWV9ERUNMQVJFX1JFTE9DUwoJdG8gbm90IGR1cGxpY2F0ZSB0aGUgZnVuY3Rpb24gaW4gdGhlIGV4ZWN1dGFibGUuCgkoVEFSR0VUX1NZTSwgVEFSR0VUX05BTUUsIE5BTUVTX0hBVkVfVU5ERVJTQ09SRSk6IG5ldyBtYWNyb3MgbmVlZGVkCglieSBjb2ZmLW02OGstdW4uYy4KCSogY29mZmNvZGUuaCAoTUM2OEtCQ1NNQUdJQyk6IGNhc2UgYWRkZWQuCgkqIHRhcmdldHMuYzogQWRkIG02OGtjb2ZmdW5fdmVjLgoJKiBjb25maWd1cmUuaG9zdDogYWRkZWQgc3VwcG9ydCBmb3IgQnVsbCBkcHgvMi4KCSogY29uZmlnL2RweDIubWgsIGhvc3RzL2RweDIuaDogbmV3IGZpbGVzLgoJKiBNYWtlZmlsZS5pbjogYWRkZWQgdGFyZ2V0IGNvZmYtbTY4ay11bi4KCkZyaSBKdWwgIDkgMDA6NDM6MDYgMTk5MyAgSmltIEtpbmdkb24gIChraW5nZG9uQGxpb3RoLmN5Z251cy5jb20pCgoJKiBhb3V0ZjEuaDogQWRkIGRlZmluaXRpb24gb2YgTUFDSFRZUEVfT0suCgpUaHUgSnVsICA4IDE0OjM3OjQ0IDE5OTMgIERhdmlkIEouIE1hY2tlbnppZSAgKGRqbUB0aGVwdWIuY3lnbnVzLmNvbSkKCgkqIHJlbG9jLmMgKGJmZF9wZXJmb3JtX3JlbG9jYXRpb24pOiBEb24ndCBzdWJ0cmFjdCB0aGUgYWRkZW5kCglhZ2FpbiBmb3IgY29mZi4KCgkqIHN5bXMuYywgYmZkLWluMi5oOiBEb2MgZml4LgoKCSogY29mZmNvZGUuaCAoQ0FMQ19BRERFTkQpOiBDaGVjayBmb3IgY29tbW9uIHNlY3Rpb24gdXNpbmcgdGhlCglzZWN0aW9uIGZsYWcgYXMgd2VsbCBhcyB0aGUgc3ltYm9sIGZsYWcuCgpUaHUgSnVsICA4IDEzOjQzOjUyIDE5OTMgIEppbSBLaW5nZG9uICAoa2luZ2RvbkBsaW90aC5jeWdudXMuY29tKQoKCSogaG9zdHMvaTM4NmJzZC5oOiBDb25kaXRpb25hbGl6ZSBIT1NUX1NUQUNLX0VORF9BRERSIG9uIF9fYnNkaV9fLgoJaTM4NmJzZC5jOiBSZW1vdmUgZGVmaW5lcyBvZiBOX1RYVCo7IHRoZSB2ZXJzaW9ucyBpbiBhb3V0NjQuaCBzaG91bGQKCWJlIHN1ZmZpY2llbnQuICBEZWZpbmUgVEVYVF9TVEFSVF9BRERSLgoKV2VkIEp1bCAgNyAxMDo1NjoyMSAxOTkzICBJYW4gTGFuY2UgVGF5bG9yICAoaWFuQGN5Z251cy5jb20pCgoJKiBhb3V0eC5oICh0cmFuc2xhdGVfZnJvbV9uYXRpdmVfc3ltX2ZsYWdzKTogUmVtb3ZlZCBzdGF0ZXAKCWFyZ3VtZW50LiAgSnVzdCBsZXQgYW4gaW5kaXJlY3Qgc3ltYm9sIHBvaW50IHRvIHRoZSBuZXh0IHN5bWJvbAoJd2l0aG91dCBmb3JjaW5nIHRoZSBuZXh0IHN5bWJvbCB0byBiZSB1bmRlZmluZWQuICBDaGFuZ2VkIGFsbAoJY2FsbGVycy4KCSogaHAzMDBocHV4LmMgKHNsdXJwX3N5bWJvbF90YWJsZSk6IENoYW5nZWQgY2FsbCB0bwoJdHJhbnNsYXRlX2Zyb21fbmF0aXZlX3N5bV9mbGFncy4KCSogdGFyZ2V0cy5jOiBBZGRlZCBocDMwMGhwdXhfdmVjLgoJKiBNYWtlZmlsZS5pbiAoaHAzMDBocHV4Lm8pOiBBZGRlZCBkZXBlbmRlbmNpZXMuCgpUdWUgSnVsICA2IDEzOjI0OjU1IDE5OTMgIEtlbiBSYWVidXJuICAocmFlYnVybkBjYW1icmlkZ2UuY3lnbnVzLmNvbSkKCgkqIHJlbG9jLmMgKGVudW0gYmZkX3JlbG9jX2NvZGVfcmVhbCk6IFB1dCBzaW1wbGUgcG93ZXItb2YtdHdvCglyZWxvY3MgdG9nZXRoZXIsIGFuZCBhZGQgNjQtYml0IHZlcnNpb25zLgoJKGJmZF9nZW5lcmljX2dldF9yZWxvY2F0ZWRfc2VjdGlvbl9jb250ZW50cyk6IEFyZ3VtZW50IHRvIGFsbG9jYQoJaXMgc2l6ZV90LgoKCSogbGliYmZkLmMgKGJmZF94bWFsbG9jX2J5X3NpemVfdCk6IE5ldyBmdW5jdGlvbi4KCSogb3BuY2xzLmMgKGJmZF9jYWNoZV9pbml0LCBiZmRfb3Blbl9maWxlKTogQWRkIHByb3RvdHlwZXMgdG8KCWRlY2xhcmF0aW9ucy4KCShvYnN0YWNrX2NodW5rX2FsbG9jKTogVXNlIGJmZF94bWFsbG9jX2J5X3NpemVfdC4KCShuZXdfYmZkKTogUHJvdG90eXBlLXN0eWxlIGRlZmluaXRpb24sIHVzaW5nIERFRlVOLgoJKGJmZF9hbGxvY19ncm93LCBiZmRfYWxsb2MsIGJmZF96YWxsb2MsIGJmZF9yZWFsbG9jKTogU2l6ZQoJYXJndW1lbnQgaXMgdHlwZSBzaXplX3QsIG5vdCBiZmRfc2l6ZV90eXBlLgoJKiBpZWVlLmMgKG9ic3RhY2tfY2h1bmtfYWxsb2MpOiBVc2UgYmZkX3htYWxsb2NfYnlfc2l6ZV90LgoJKiBiZmQuYyAoYmZkX2RlZmF1bHRfZXJyb3JfdHJhcCwgYmZkX2Vycm9yX3RyYXAsCgliZmRfZXJyb3Jfbm9ucmVwcmVzZW50YWJsdHJhcCk6IFByb3RvdHlwZXMuCgkqIGxpYmJmZC1pbi5oIChiZmRfYWxsb2MsIGJmZF96YWxsb2MsIGJmZF9yZWFsbG9jLAoJYmZkX2FsbG9jX2dyb3cpOiBBZGp1c3RlZCBwcm90b3R5cGVzIGZvciBhcmcgdHlwZSBjaGFuZ2UuCgkqIGFyY2hpdmUuYyAoZ2V0X2VsdF9hdF9maWxlcG9zLCBkb19zbHVycF9ic2RfYXJtYXAsIG5vcm1hbGl6ZSwKCWRvX3NsdXJwX2NvZmZfYXJtYXAsIGJmZF9jb25zdHJ1Y3RfZXh0ZW5kZWRfbmFtZV90YWJsZSk6CglQcm90b3R5cGVzLgoJKiBlbGZjb2RlLmggKGVsZl9zdHJpbmdfZnJvbV9lbGZfc3RydGFiKTogUHJvdG90eXBlcy4KCSogbGliZWxmLmggKGVsZl9zdHJpbmdfZnJvbV9lbGZfc2VjdGlvbiwgZWxmX2dldF9zdHJfc2VjdGlvbik6CglQcm90b3R5cGVzLgoKCSogTWFrZWZpbGUuaW4gKEFMTF9NQUNISU5FUyk6IFJlbmFtZWQgZnJvbSBCRkRfTUFDSElORVMuCgkob2ZpbGVzKTogTmV3IHRhcmdldC4gIEJ1aWxkIGEgbGlzdCBvZiB1bmlxdWUgZmlsZSBuYW1lcywgaW4gY2FzZQoJYW55IGdvdCBkdXBsaWNhdGVkLgoJKFRBUkdFVExJQik6IFVzZSBsaXN0IG9mIGZpbGVzIGZyb20gb2ZpbGVzLgoJKiBjb25maWd1cmUuaW46IFNldCBCRkRfTUFDSElORVMgYW5kIEJGRF9CQUNLRU5EUyBkZXBlbmRpbmcgb24KCW1pbmltYWwtYmZkIGZsYWcgYW5kIHRhcmdldCBtYWtlZmlsZSBmcmFnIGNvbnRlbnRzLgoKCSogZWxmY29kZS5oIChlbGZfcmVhZCk6IERlbGV0ZSBzdGF0aWMgZGVjbGFyYXRpb24sIHNpbmNlIGZ1bmN0aW9uCgloYXMgbW92ZWQuCgkoZWxmX21hcF9zeW1ib2xzKTogV3JpdGUgb3V0IHNlY3Rpb24gc3ltYm9scyBmb3IgYWxsIHNlY3Rpb25zLCBmb3IKCW5vdy4KCShlbGZfc3ltYm9sX2Zyb21fYmZkX3N5bWJvbCk6IEFsbG93IG1hdGNoIGlmIGJvdGggc3ltYm9scyBhcmUKCXNlY3Rpb24gc3ltYm9scyBmb3IgdGhlIHNhbWUgc2VjdGlvbi4KCShlbGZfZmluZF9uZWFyZXN0X2xpbmUpOiBEb24ndCBwcmludCBtZXNzYWdlLCBqdXN0IHJldHVybiBmYWxzZS4KCgkqIGxpYmVsZi5oIChiZmRfZWxmX2xvY2F0ZV9zaCk6IERlY2xhcmF0aW9uIGRlbGV0ZWQuCgpNb24gSnVsICA1IDE2OjQ4OjExIDE5OTMgIERvdWcgRXZhbnMgIChkamVAY2FudWNrLmN5Z251cy5jb20pCgoJKiBjcHUtaDgzMDAuYyAoaDgzMDBfc2Nhbik6IEZpeCBwYXJzaW5nIG9mIGFyY2hpdGVjdHVyZSBzdHJpbmcuCgpGcmkgSnVsICAyIDE4OjI3OjAwIDE5OTMgIEppbSBLaW5nZG9uICAoa2luZ2RvbkBsaW90aC5jeWdudXMuY29tKQoKCSogTWFrZWZpbGUuaW4gKGNsZWFuKTogUmVtb3ZlIGJmZC5oIGFuZCBzdG1wLWJmZC5oLgoJKHJlYWxjbGVhbik6IFJlbW92ZSBnZW5lcmF0ZWQgaGVhZGVycy4KCkZyaSBKdWwgIDIgMTQ6NTE6NTEgMTk5MyAgUGV0ZXIgU2NoYXVlciAgKHBlc0ByZWdlbnQuZS10ZWNobmlrLnR1LW11ZW5jaGVuLmRlKQoKCSogc2VjdGlvbi5jIChiZmRfc2V0X3NlY3Rpb25fY29udGVudCk6ICBEZW55IGlmIGZpbGUgaXMgbm90IG9wZW5lZCB3aXRoCgl0aGUgcHJvcGVyIG1vZGUsIHNldCBvdXRwdXRfaGFzX2JlZ3VuIGlmIGZpbGUgaXMgb3BlbmVuZWQgZm9yIHVwZGF0ZS4KCSogYW91dHguaCAoYW91dF8qX3NldF9zZWN0aW9uX2NvbnRlbnQpOiAgUmVtb3ZlIGNoZWNrcyB0aGF0IGFyZSBub3cKCWRvbmUgaW4gYmZkX3NldF9zZWN0aW9uX2NvbnRlbnQuCgpGcmkgSnVsICAyIDA5OjI1OjIwIDE5OTMgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AY3lnbnVzLmNvbSkKCgkqIGhvc3RzL3N0ZC1ob3N0Lmg6IFJlbW92ZWQgZGVjbGFyYXRpb25zIG9mIHByaW50ZiwgZnByaW50ZiwKCWZjbnRsLCBmcmVhZCBhbmQgZndyaXRlLiAgVGhleSBhcmUgYWxsIGVycm9yIHByb25lIGZvciBvbmUgcmVhc29uCglvciBhbm90aGVyLiAgQ2hhbmdlZCBkZWNsYXJhdGlvbiBvZiBtZW1jaHIgZnJvbSBjaGFyICogdG8gUFRSLgoKCSogY29uZmlndXJlLmluIChtaXBzLSotcmlzY29zKik6IE5ldyB0YXJnZXQ7IHVzZSByaXNjb3MuCgkqIGNvbmZpZ3VyZS5ob3N0IChtaXBzLSotcmlzY29zKik6IE5ldyBob3N0OyB1c2UgcmlzY29zLgoJKiBjb25maWcvcmlzY29zLm1oIChIREVGSU5FUyk6IEFkZCAtRyA0LgoKCSogbGliYW91dC5oIChHRVRfU1dPUkQpOiBVc2UgdGhlIGJmZF9oX2dldF9zaWduZWQgZW50cnkgcG9pbnRzCglyYXRoZXIgdGhhbiBjYXN0aW5nIHRoZSByZXN1bHQgb2YgYmZkX2hfZ2V0LgoKRnJpIEp1bCAgMiAxMDoxMzo0OCAxOTkzICBKaW0gS2luZ2RvbiAgKGtpbmdkb25AbGlvdGguY3lnbnVzLmNvbSkKCgkqIGNvbmZpZ3VyZS5pbiwgaG9zdHMvZGVsdGE2OC5oLCBjb25maWcvZGVsdGE2OC5taDogQWRkIHN0dWZmIGZvcgoJTW90b3JvbGEgRGVsdGEgNjguCgpXZWQgSnVuIDMwIDA2OjAyOjQzIDE5OTMgIEtlbiBSYWVidXJuICAocmFlYnVybkBjYW1icmlkZ2UuY3lnbnVzLmNvbSkKCgkqIHRhcmdldHMuYyAoYmZkX2VsZjY0X3tiaWcsbGl0dGxlfV9nZW5lcmljX3ZlYyk6IERlY2xhcmUsIGFuZAoJaW5jbHVkZSBpbiBzZWFyY2ggbGlzdCBpZiBCRkQ2NCBpcyBkZWZpbmVkLgoKCSogbGliZWxmLmggKENBVDQpOiBBZGRlZCBhIHZlcnNpb24gZm9yIFNhYmVyLUMsIEFOU0kgbW9kZS4KCShiZmRfZWxmNjRfKik6IERlY2xhcmF0aW9ucyBmb3IgNjQtYml0IHZlcnNpb25zIG9mIG1hbnkgcm91dGluZXMuCgpUdWUgSnVuIDI5IDIyOjUwOjU5IDE5OTMgIEtlbiBSYWVidXJuICAocmFlYnVybkBjYW1icmlkZ2UuY3lnbnVzLmNvbSkKCgkqIGVsZjY0LXRhcmdldC5oLCBlbGY2NC1nZW5lcmljLmM6IE5ldyBmaWxlcy4KCSogTWFrZWZpbGUuaW4gKEJGRDY0X0JBQ0tFTkRTKTogSW5jbHVkZSBlbGY2NC1nZW5lcmljLm8uCgkoZWxmNjQtZ2VuZXJpYy5vKTogTGlzdCBkZXBlbmRlbmNpZXMuCgoJKiBNYWtlZmlsZS5pbjogTGlzdCB0YXJnZXQgYGFsbCcgZXhwbGljaXRseSBiZWZvcmUgaG9zdC90YXJnZXQKCW1ha2VmaWxlIGZyYWdtZW50cyBhcmUgaW5jbHVkZWQsIGluIGNhc2UgdGhleSBkZWZpbmUgYW55IG5ldwoJdGFyZ2V0cy4KCgkqIGVsZmNvZGUuaCAoRUxGX1JfSU5GTywgRUxGX1JfU1lNKTogRGVmaW5lIGFzIDMyLSBvciA2NC1iaXQKCXZlcnNpb25zIGFzIGFwcHJvcHJpYXRlLiAgVXNlcyB1cGRhdGVkLgoJKGVsZl9kZWJ1Z19zZWN0aW9uKTogRGVjbGFyZSBiZWZvcmUgdXNlLgoJKGVsZl9kZWJ1Z19maWxlKTogTmV3IGZ1bmN0aW9uLgoJKGJmZF9zZWN0aW9uX2Zyb21fc2hkciwgYmZkX3NoZHJfZnJvbV9zZWN0aW9uLCBlbGZfZmFrZV9zZWN0aW9ucyk6CglBbGlnbm1lbnQgdmFsdWUgaW4gc2VjdGlvbiBoZWFkZXIgaXMgbl9ieXRlcywgbm90IGxvZzIuCgkobmV3X3NlY3Rpb25faG9vayk6IERvIG5vdGhpbmcgZm9yIG5vdy4KCShiZmRfc2VjdGlvbl9mcm9tX3NoZHIpOiBVc2UgRWxmX0V4dGVybmFsX1JlbFthXSwgbm90IDMyLWJpdAoJdmVyc2lvbiBleHBsaWNpdGx5LgoJKGVsZl9jb3JlX2ZpbGVfcCk6IFNpbXBsaWZ5IGNoZWNrIGZvciBjb3JyZWN0IGNsYXNzICh3b3JkIHNpemUpLgoJKGVsZl9tYWtlX3NlY3Rpb25zLCBlbGZfZmFrZV9zZWN0aW9ucywgZWxmX3dyaXRlX29iamVjdF9jb250ZW50cyk6CglJbml0aWFsaXplIGFsbCBmaWVsZHMgd2hlbiBjcmVhdGluZyBkYXRhIHN0cnVjdHVyZXMuCgkoZWxmX2xvY2F0ZV9zaCk6IFJlbmFtZWQgZnJvbSBiZmRfZWxmWFhfbG9jYXRlX3NoLCBtYWRlIHN0YXRpYy4KCShlbGZfY29tcHV0ZV9zZWN0aW9uX2ZpbGVfcG9zaXRpb25zKTogU2V0IGNvcnJlY3QgY2xhc3MgaW4gb3V0cHV0CglmaWxlLgoJKGVsZl93cml0ZV9vYmplY3RfY29udGVudHMpOiBTZWN0aW9uIHN5bWJvbHMgaGF2ZSBlbXB0eSBuYW1lcyBpbgoJb3V0cHV0IGZpbGUuCgoJKiBsaWJiZmQuYyAoYmZkX3htYWxsb2MsIHphbGxvYyk6IEJlIHN1cmUgdG8gY2FzdCBtYWxsb2MsIG1lbXNldAoJYXJncyB0byBzaXplX3QgYmVmb3JlIGNhbGwuCgkoYmZkX2FkZF90b19zdHJpbmdfdGFibGUpOiBDYXN0IHphbGxvYyBhcmcgdG8gYmZkX3NpemVfdHlwZS4KClR1ZSBKdW4gMjkgMTA6NDk6NDIgMTk5MyAgSWFuIExhbmNlIFRheWxvciAgKGlhbkBjeWdudXMuY29tKQoKCSogY29mZi1taXBzLmMgKGVjb2ZmX2ZpbmRfbmVhcmVzdF9saW5lKTogSWYgcHJvY2VkdXJlIGhhcyBubyBsaW5lCgludW1iZXIgaW5mb3JtYXRpb24sIHJldHVybiAwIGZvciBsaW5lIG51bWJlci4KCk1vbiBKdW4gMjggMTA6NDU6MDIgMTk5MyAgSmltIEtpbmdkb24gIChraW5nZG9uQGxpb3RoLmN5Z251cy5jb20pCgoJKiBhb3V0eC5oIChzb21lX2FvdXRfb2JqZWN0X3ApOiBJZiAqb2xkcmF3cHRyIGlzIG5vbi1OVUxMLCBjb3B5IGl0CglpbnRvICpyYXdwdHIuCgpTdW4gSnVuIDI3IDA5OjA1OjE5IDE5OTMgIEppbSBLaW5nZG9uICAoa2luZ2RvbkBsaW90aC5jeWdudXMuY29tKQoKCSogaG9zdHMvcmlzY29zLmg6IERlZmluZSBOQlBHIGFuZCBVUEFHRVMuCgpTdW4gSnVuIDI3IDE2OjI4OjI2IDE5OTMgIEtlbiBSYWVidXJuICAocmFlYnVybkBjeWdudXMuY29tKQoKCSogZWxmY29kZS5oIChlbGZfc2x1cnBfc3ltYm9sX3RhYmxlKTogRG9uJ3QgdXNlIG9ial9yYXdfc3ltcyBhcwoJbHZhbHVlOyBpdCBjb250YWlucyBhIGNhc3QuCgpGcmkgSnVuIDI1IDE3OjA5OjU1IDE5OTMgIERhdmlkIEouIE1hY2tlbnppZSAgKGRqbUB0aGVwdWIuY3lnbnVzLmNvbSkKCgkqIGFvdXR4LmggKGhhc2gsIGNvbXBhcmUsIHN0cnVjdCBzdHJpbmd0YWJfZW50cnksIGFkZF90b19zdHJpbmd0YWIpOgoJVXNlIHVuc2lnbmVkIGhhc2ggdmFsdWVzIGZvciBiZXR0ZXIgaGFzaGluZy4KCShoYXNoKTogSGFzaCBpbiB0aGUgc3RyaW5nIGxlbmd0aCBmb3IgbG9uZyBzdHJpbmdzLgoKVGh1IEp1biAyNCAxNTo0Nzo1MSAxOTkzICBEYXZpZCBKLiBNYWNrZW56aWUgIChkam1AdGhlcHViLmN5Z251cy5jb20pCgoJKiBhb3V0eC5oIChjb21wYXJlKTogUmVwbGFjZSAzIGlmJ3Mgd2l0aCBhIHN1YnRyYWN0aW9uLgoJKHRyYW5zbGF0ZV90b19uYXRpdmVfc3ltX2ZsYWdzLCBhZGRfdG9fc3RyaW5ndGFiKTogUmVvcmRlciB0ZXN0cwoJaW4gZGVjcmVhc2luZyBvcmRlciBvZiBzdWNjZXNzLCBhcyBhbiBvcHRpbWl6YXRpb24uCgkoaGFzaCk6IFRha2UgYSBsZW5ndGggYXJnOyBpZ25vcmUgY2hhcnMgYWZ0ZXIgIzI1LCBmb3Igc3BlZWQuCgkoYWRkX3RvX3N0cmluZ3RhYik6IFBhc3MgbGVuZ3RoIHRvIGhhc2guCgpUaHUgSnVuIDI0IDE3OjI1OjUxIDE5OTMgIEtlbiBSYWVidXJuICAocmFlYnVybkBwb3NlaWRvbi5jeWdudXMuY29tKQoKCSogZWxmMzItc3BhcmMuYyAoc3BhcmNfcmVsb2NfbWFwKTogQWRkIFNQQVJDX1dESVNQMjIgcmVsb2MuCgoJKiBlbGZjb2RlLmggKGVsZl9uZXdfc2VjdGlvbl9ob29rKTogRG8gbm90aGluZyBmb3Igbm93LgoJKGVsZl93cml0ZV9vYmplY3RfY29udGVudHMpOiBPdXRwdXQgY29tbW9uIHN5bWJvbHMgdGhlIHdheSBFTEYKCXdhbnRzIHRoZW0uCgpXZWQgSnVuIDIzIDE2OjIwOjA3IDE5OTMgIEtlbiBSYWVidXJuICAocmFlYnVybkBwb3NlaWRvbi5jeWdudXMuY29tKQoKCSogbGliZWxmLmggKHN0cnVjdCBlbGZfb2JqX3RkYXRhIGFuZCBhc3NvY2lhdGVkIG1hY3Jvcyk6IE1vdmVkCgloZXJlIGZyb20gZWxmY29kZS5oLiAgQSBjb3VwbGUgb2Ygc2l6ZS1zcGVjaWZpYyBzdHJ1Y3R1cmUgcG9pbnRlcnMKCXdlcmUgY2hhbmdlZCB0byBQVFI7IHVzZXMgZml4ZWQgYXBwcm9wcmlhdGVseS4KCShlbGYzMl9zeW1ib2xfdHlwZSwgZWxmNjRfc3ltYm9sX3R5cGUpOiBTZXBhcmF0ZWQgZGVmaW5pdGlvbnMuCgkoYmZkX2VsZl9ta29iamVjdCk6IFJlbmFtZWQgZnJvbSBiZmRfZWxmMzJfbWtvYmplY3QuCgkoYmZkX2VsZjMyX21rb2JqZWN0LCBiZmRfZWxmNjRfbWtvYmplY3QsIGVsZl9ta29iamVjdCk6IE5ldwoJdGVtcG9yYXJ5IG1hY3JvcyB0byBlYXNlIG5hbWUgY2hhbmdlLgoJKiBlbGYuYyAoZWxmX3JlYWQsIGVsZl9ta29iamVjdCwgZWxmX2dldF9zdHJfc2VjdGlvbiwKCWVsZl9zdHJpbmdfZnJvbV9lbGZfc2VjdGlvbiwgYmZkX2VsZl9maW5kX3NlY3Rpb24pOiBNb3ZlZCBoZXJlCglmcm9tIGVsZmNvZGUuaC4KCSogZG9jL01ha2VmaWxlLmluIChsaWJiZmQuaCk6IFByb2Nlc3MgZWxmLmMgdG9vLgoJKiBNYWtlZmlsZS5pbiAoZWxmLm8pOiBOb3RlIG5ldyBkZXBlbmRlbmNpZXMuCgoJKiBlbGZjb2RlLmg6IExvdHMgb2Ygc3R1ZmYgbW92ZWQgZWxzZXdoZXJlLiAgRGVsZXRlZCBzb21lIHVudXNlZAoJY29kZSwgdHdlYWtlZCBzb21lIGRlYnVnIGhvb2tzLgoJKGVsZl9zbHVycF9yZWxvY2FfdGFibGUpOiBUcmFuc2xhdGUgRUxGIHNlY3Rpb24gc3ltYm9scyBpbnRvIEJGRAoJc2VjdGlvbiBzeW1ib2xzLgoKV2VkIEp1biAyMyAxMTozNDoyMSAxOTkzICBKaW0gS2luZ2RvbiAgKGtpbmdkb25AY3lnbnVzLmNvbSkKCgkqIGhvc3RzL3Jpc2Nvcy5oOiBOZXcgZmlsZS4KClR1ZSBKdW4gMjIgMTQ6MzU6MjAgMTk5MyAgS2VuIFJhZWJ1cm4gIChyYWVidXJuQHBvc2VpZG9uLmN5Z251cy5jb20pCgoJKiBlbGZjb2RlLmggKGJmZF9zZWN0aW9uX2Zyb21fc2hkciwgY2FzZSBTSFRfUFJPR0JJVFMpOiBFdmVuIGlmCglzZWN0aW9uIGFscmVhZHkgZXhpc3RzLCB1c2UgaXRzIHBvaW50ZXIgdG8gZmlsbCBpbiByYXdkYXRhIHNsb3QuCgpUdWUgSnVuIDIyIDE2OjM2OjUxIDE5OTMgIEppbSBLaW5nZG9uICAoa2luZ2RvbkBsaW90aC5jeWdudXMuY29tKQoKCSogaG9zdHMvc3RkLWhvc3QuaDogUmV0dXJuIHZhbHVlIG9mIHB1dHMgYW5kIGZwdXRzIGlzIGludCBub3Qgdm9pZC4KClR1ZSBKdW4gMjIgMTQ6MjU6NTggMTk5MyAgRGF2aWQgSi4gTWFja2VuemllICAoZGptQHRoZXB1Yi5jeWdudXMuY29tKQoKCSogYW91dHguaCAoaG93dG9fdGFibGVfZXh0KTogQ29tbWVudCB0aGUgZmllbGQgbmFtZXMuCgkqIHJlbG9jLmMgKGJmZF9wZXJmb3JtX3JlbG9jYXRpb24pOiBGaXggbWF4IGFuZCBtaW4gdmFsdWVzLgoKTW9uIEp1biAyMSAxODoxOToxNCAxOTkzICBLZW4gUmFlYnVybiAgKHJhZWJ1cm5AcG9zZWlkb24uY3lnbnVzLmNvbSkKCgkqIGVsZjMyLXRhcmdldC5oLCBlbGYzMi1ocHBhLmMsIGVsZmNvZGUuaDogVXNlIG5ldwoJc2l6ZS1pbmRlcGVuZGVudCBlbGYgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmVzLgoJKiBlbGZjb2RlLmggKHB1dF93b3JkLCBnZXRfd29yZCk6IERlZmluZSBhcyBhcHByb3ByaWF0ZSBmb3IKCWFyY2hpdGVjdHVyZSB3b3JkIHNpemUuICBTdHJ1Y3R1cmUgc3dhcHBpbmcgZnVuY3Rpb25zIGNoYW5nZWQgdG8KCXVzZSB0aGVtIGFzIGFwcHJvcHJpYXRlLgoKCSogY29uZmlndXJlLmluOiBJZiBjb21waWxpbmcgNjQtYml0IGJhY2sgZW5kcywgZG8gdGhlbSBiZWZvcmUKCTMyLWJpdCBvbmVzLgoKCSogbGliZWxmLmg6IFVzZSBuZXcgc2l6ZS1pbmRlcGVuZGVudCB2ZXJzaW9ucyBvZiBlbGYgaW50ZXJuYWwgZGF0YQoJc3RydWN0dXJlcy4KCShzeW1ib2xfdHlwZSk6IFJlb3JkZXJlZCB0byBwdXQgYW55IGZpZWxkcyBkZXBlbmRlbnQgb24gdGFyZ2V0CglzaXplIGF0IHRoZSBlbmQuCgkoZWxmX2JhY2tlbmRfZGF0YSk6IFJlbmFtZWQgZnJvbSBlbGYjI19iYWNrZW5kX2RhdGEgYW5kIG1hZGUKCXNpemUtaW5kZXBlbmRlbnQuCgkoZWxmX3NlY3RfdGh1bmspOiBOb3cgc2l6ZS1pbmRlcGVuZGVudC4KCgkqIGxpYmJmZC5jIChiZmRfbG9nMik6IE5vdyByZXR1cm5zIHVuc2lnbmVkIGludC4KCk1vbiBKdW4gMjEgMTI6MzA6NDcgMTk5MyAgSmltIEtpbmdkb24gIChraW5nZG9uQGN5Z251cy5jb20pCgoJKiBSZW5hbWUgY29uZmlnL204OGstYW91dC5tdCB0byBjb25maWcvbm9vcC5tdC4KCWNvbmZpZ3VyZS5pbjogVXNlIGl0IGZvciBtaXBzLSotYnNkKi4KClN1biBKdW4gMjAgMjA6MzI6MTkgMTk5MyAgS2VuIFJhZWJ1cm4gIChyYWVidXJuQHBvc2VpZG9uLmN5Z251cy5jb20pCgoJKiBjcHUtbTY4ay5jIChhcmNoX2luZm9fc3RydWN0KTogRWxpbWluYXRlICJwYXJ0aWFsbHkgYnJhY2tldGVkCglpbml0aWFsaXplciIgd2FybmluZyBmcm9tIGdjYy4KCSogY3B1LWg4NTAwLmMgKGFyY2hfaW5mb19zdHJ1Y3QpOiBMaWtld2lzZS4KCSogY3B1LXNoLmMgKGFyY2hfaW5mb19zdHJ1Y3QpOiBMaWtld2lzZS4KCgkqIGNwdS1oODMwMC5jIChsb2NhbF9iZmRfcmVsb2NfdHlwZV9sb29rdXAsIGhvd3RvKl9jYWxsYmFjaywKCWhvd3RvXyopOiBVbnVzZWQgZnVuY3Rpb25zIGFuZCB2YXJpYWJsZXMgY29tbWVudGVkIG91dC4KCSogY3B1LXo4ay5jIChsb2NhbF9iZmRfcmVsb2NfdHlwZV9sb29rdXAsIGhvd3RvKl9jYWxsYmFjaywKCWhvd3RvXyopOiBMaWtld2lzZS4KCSogY3B1LWg4NTAwLmMgKGNvbXBhdGlibGUpOiBMaWtld2lzZS4KCSogY3B1LXNoLmMgKGNvbXBhdGlibGUpOiBMaWtld2lzZS4KCgkqIGhwMzAwaHB1eC5jIChzd2FwX3N0ZF9yZWxvY19pbik6IERlbGV0ZSB1bnVzZWQgdmFyaWFibGVzLgoJQWx3YXlzIHNldCBhIHZhbGlkIGxlbmd0aCB2YWx1ZSwgZXZlbiBmb3IgaW52YWxpZCBpbnB1dC4KCgkqIHNyZWMuYyAoc3JlY193cml0ZV9zeW1ib2xzKTogVXNlIHNwcmludGZfdm1hLgoKCSogYmZkLWluLmggKHVpbnQ2NF90eXBlTE9XLCB1aW50NjRfdHlwZUhJR0gsIGludDY0X3R5cGUsCgl1aW50NjRfdHlwZSk6IFByb3ZpZGUgZGVmYXVsdCBkZWZpbml0aW9ucy4KCSogaG9zdHMvc3RkLWhvc3QuaCAoaW50NjQgc3R1ZmYpOiBSZW1vdmUgdGhlbSBmcm9tIGhlcmUuCgoJKiBiZmQtaW4uaCAoc3ByaW50Zl92bWEpOiBEZWZpbmUgcGFyYWxsZWwgdG8gZnByaW50Zl92bWEuCgoJKiBlbGYzMi1pMzg2LmMgKGVsZl9pMzg2X3JlbG9jX3R5cGVfbG9va3VwKTogRGVsZXRlIHVudXNlZAoJdmFyaWFibGUuICBBZGRlZCBkZWZhdWx0IGNhc2UgdG8gc3dpdGNoLgoKCSogYW91dHguaCAodHJhbnNsYXRlX2Zyb21fbmF0aXZlX3N5bV9mbGFncyk6IEJlZm9yZSBjYXN0aW5nCglwb2ludGVycyB0byBpbnRlZ2VycywgbWFrZSBzdXJlIHRoZSBpbnRlZ2VyIHR5cGUgaXMgd2lkZSBlbm91Z2guCgkqIGNvZmYtbWlwcy5jIChlY29mZl9zZXRfc3ltYm9sX2luZm8pOiBEaXR0by4KCgkqIHNlY3Rpb24uYyAoYmZkX2dldF9zZWN0aW9uX2NvbnRlbnRzKTogU2luY2UgYGNvdW50JyBpcyB1bnNpZ25lZCwKCWRvbid0IGJvdGhlciBjb21wYXJpbmcgZm9yIGxlc3MtdGhhbi16ZXJvLgoJKGJmZF9zZXRfc2VjdGlvbl9jb250ZW50cyk6IERpdHRvLgoKCSogZWxmY29kZS5oIChiZmRfYWRkX3RvX3N0cnRhYik6IE5vdyBzdGF0aWMuCgkoc3ltX2lzX2dsb2JhbCk6IE5ldyBmdW5jdGlvbi4KCShlbGZfbWFwX3N5bWJvbHMpOiBDYWxsIGl0LiAgTm93IHJldHVybnMgdm9pZC4gIFJlbW92ZWQgdW51c2VkCglsb2NhbCB2YXJpYWJsZS4KCShiZmRfc2VjdGlvbl9mcm9tX3NoZHIpOiBNYXJrIHN0cmluZyB0YWJsZXMgb3RoZXIgdGhhbiBmb3Igc2VjdGlvbgoJYW5kIHN5bWJvbCBuYW1lcyBhcyBub3JtYWwgc2VjdGlvbnMgaGF2aW5nIGNvbnRlbnRzLgoJKGZpeF91cF9zdHJ0YWJzKTogTmV3IGZ1bmN0aW9uOyBmaXhlcyB1cCBFTEYgaGVhZGVyIGZpZWxkcyBmb3IKCXN0YWIgc2VjdGlvbnMgd2l0aCBzdHJpbmcgdGFibGVzIGFzc29jaWF0ZWQuCgkoZWxmX3dyaXRlX29iamVjdF9jb250ZW50cyk6IE1hcCBmaXhfdXBfc3RydGFicyBvdmVyIGFsbCBCRkQKCXNlY3Rpb25zLiAgUmVvcmRlcmVkIGNvbmRpdGlvbiB0ZXN0cyBmb3Igc3ltYm9sIGZsYWdzOyBkZWZhdWx0IHRvCglsb2NhbC1vYmplY3QgdmFsdWUgaW5zdGVhZCBvZiBnbG9iYWwtb2JqZWN0LgoJKGVsZl9zeW1ib2xfZnJvbV9iZmRfc3ltYm9sKTogSGlkIGNvbmRpdGlvbmFsbHktdXNlZCB2YXJpYWJsZQoJaW5zaWRlIGNvbmRpdGlvbiB0ZXN0LgoJKGVsZl9wcmludF9zeW1ib2wpOiBVc2UgZnByaW50Zl92bWEuCgkoZWxmX2lkeF9vZl9zeW0sIGJmZF9zaGRyX2Zyb21fc2VjdGlvbik6IFVudXNlZCBmdW5jdGlvbnMKCWNvbW1lbnRlZCBvdXQuCgoJKiBiZmQtaW4uaCAoaW50NjRfdHlwZSwgdWludDY0X3R5cGUpOiBEZWZpbmUgdGhlc2UgaWYgd2UgZmFsbAoJYmFjayB0byAibG9uZyBsb25nIiBmb3IgSE9TVF82NF9CSVQuCgoJKiBsaWJlbGYuaCAoZWxmTkFNRSwgRWxmTkFNRSk6IE5ldyB2ZXJzaW9ucyB0byBnZXQgZGVzaXJlZCByZXN1bHRzCgl3aXRob3V0IHVzaW5nIGludmFsaWQgQU5TSSBDIHByZXByb2Nlc3NpbmcgdG9rZW5zLgoKCSogZWxmMzItdGFyZ2V0LmggKGJmZF9lbGYzMl9uZXdfc2VjdGlvbl9ob29rKTogRGVsZXRlIG1hY3JvLgoJKiBsaWJlbGYuaCAoYmZkX2VsZjMyX25ld19zZWN0aW9uX2hvb2spOiBEZWNsYXJlLgoJKiBlbGZjb2RlLmggKG5ld19zZWN0aW9uX2hvb2spOiBEZWZpbmUgaGVyZS4KCgkqIGhvc3RzL3NwYXJjLmgsIGhvc3RzL3N0ZC1ob3N0LmgsIGhvc3RzL2kzODZic2QuaDogUHJvdGVjdAoJYWdhaW5zdCBtdWx0aXBsZSBpbmNsdXNpb25zLgoKCSogaG9zdHMvbmV3cy5oOiBJbmNsdWRlIGhvc3RzL3N0ZC1ob3N0LmgsIG5vdCBwbGFpbiBzdGQtaG9zdC5oLgoKCSogTWFrZWZpbGUuaW4gKGJmZC5oKTogR2VuZXJhdGUgaW50byBjdXJyZW50IGRpcmVjdG9yeSBieSBncmFiYmluZwoJNjQtYml0IGRlZmluaXRpb24gKGlmIGFueSkgZnJvbSBzeXNkZXAuaC4KCSogYmZkLWluLmg6IFB1dCBpbiBtYXJrZXIgZm9yIHN5c2RlcC5oIGluY2x1c2lvbi4KCkZyaSBKdW4gMTggMTk6NTc6MjMgMTk5MyAgRGF2aWQgSi4gTWFja2VuemllICAoZGptQHRoZXB1Yi5jeWdudXMuY29tKQoKCSogcmVsb2MuYyAoYmZkX3BlcmZvcm1fcmVsb2NhdGlvbik6IENoZWNrIGZvciBvdmVyZmxvdyBvbgoJcGMtcmVsYXRpdmUgcmVsb2NhdGlvbnMgaWYgdGhlIGhvd3RvIGFza2VkIGZvciBpdC4KCkZyaSBKdW4gMTggMTY6MDA6MjAgMTk5MyAgSmltIEtpbmdkb24gIChraW5nZG9uQGN5Z251cy5jb20pCgoJKiBNYWtlZmlsZS5pbiAoc3RtcC1iZmQuaCk6IElnbm9yZSBub256ZXJvIGV4aXQgc3RhdHVzIGZyb20gZ3JlcC4KCkZyaSBKdW4gMTggMTY6NTQ6MjkgMTk5MyAgSmltIEtpbmdkb24gIChraW5nZG9uQGxpb3RoLmN5Z251cy5jb20pCgoJKiBjb25maWcvcmlzY29zLm17aCx0fTogTmV3IGZpbGVzLgoJKiBjb25maWd1cmUue2hvc3QsaW59OiBVc2UgdGhlbS4KCkZyaSBKdW4gMTggMTI6NTU6MTAgMTk5MyAgSy4gUmljaGFyZCBQaXhsZXkgIChyaWNoQGN5Z251cy5jb20pCgoJKiBlbGYzMi1taXBzLmM6IGNvbW1lbnQgY2hhbmdlLiAgVGhpcyBpcyBhIG1pcHMgZmlsZSwgbm90IDg4ay4KCk1vbiBKdW4gMTQgMTQ6MDI6NDEgMTk5MyAgSmltIEtpbmdkb24gIChraW5nZG9uQGN5Z251cy5jb20pCgoJKiBjYWNoZS5jIChiZmRfY2FjaGVfaW5pdCk6IEluY3JlbWVudCBvcGVuX2ZpbGVzIGFuZCBjYWxsIGNsb3NlX29uZQoJaWYgbmVjZXNzYXJ5LgoJKGJmZF9vcGVuX2ZpbGUpOiBEb24ndCBpbmNyZW1lbnQgb3Blbl9maWxlcyBoZXJlLgoKRnJpIEp1biAxOCAxMDowMDoxNCAxOTkzICBKaW0gS2luZ2RvbiAgKGtpbmdkb25AbGlvdGguY3lnbnVzLmNvbSkKCgkqIGNvbmZpZy9kZWx0YTg4Lm1oOiBEb24ndCBzZXQgQ0MuCgoJKiBNYWtlZmlsZS5pbjogQWRkIGVsZjMyLXttaXBzLG04OGssZ2VuZXJpY30uCgllbGYzMi17bWlwcyxtODhrLGdlbmVyaWN9LmM6IE5ldyBmaWxlcy4KCXRhcmdldHMuYyAodGFyZ2V0X3ZlY3Rvcik6IEluY2x1ZGUgYmZkX2VsZjMyX3ttaXBzLG04OGssZ2VuZXJpY31fdmVjLgoJZWxmY29kZS5oIChlbGZfb2JqZWN0X3ApOiBNYXRjaCBlbGYzMi1nZW5lcmljIGZvciBhbGwgbWFjaGluZXMgd2hpY2gKCWRvbid0IG1hdGNoIGEgZGlmZmVyZW50IHRhcmdldC4KCkZyaSBKdW4gMTggMDM6MTI6MTIgMTk5MyAgSm9obiBHaWxtb3JlICAoZ251QGN5Z251cy5jb20pCgoJRWxpbWluYXRlICJpbnQ4X3R5cGUiLCAiaW50MTZfdHlwZSIsICJpbnQzMl90eXBlIiwgYW5kIHRoZWlyCgl2YXJpYW50cyBmcm9tIHRoZSBCRkQgdW5pdmVyc2UuICBMZWF2ZSB0aGUgNjQtYml0IHR5cGVzIGZvciBub3csCglzaW5jZSB0aGV5IGFyZSBpbiBmbHV4LgoKCSogYW91dHguaCwgaHAzMDBocHV4LmM6ICBFbGltaW5hdGUgbmVlZGxlc3MgKGludDMyX3R5cGUpIGNhc3RzLgoJKiBsaWJhb3V0LmggKEdFVF9TV09SRCk6ICBDb252ZXJ0IChpbnQzMl90eXBlKSB0byAoaW50KS4KCSogaWVlZS5jOiAgQ29udmVydCB1aW50OGVfdHlwZSA9PiB1bnNpZ25lZCBjaGFyLgoJKiBvYXN5cy5jOiAgRXh0ZW5zaXZlIGNoYW5nZXMgdG8gZWxpbWluYXRlIG9ic29sZXRlIHR5cGVzLgoJVGhlc2UgZGVwZW5kIG9uIGNoYW5nZXMgaW4gLi4vaW5jbHVkZS9vYXN5cy5oIGFzIHdlbGwuCgkqIGhvc3RzLyouaDogIFJlbW92ZSBkZWNsYXJhdGlvbnMgb2YgYWxsIHRoZXNlIHR5cGVzLgoKTW9uIEp1biAxNCAxNDowMjo0MSAxOTkzICBKaW0gS2luZ2RvbiAgKGtpbmdkb25AY3lnbnVzLmNvbSkKCgkqIGhvc3RzL2RlbHRhODguaDogI2lmIDAgb3V0IHNvbWUgZGVjbGFyYXRpb25zIHdoaWNoIGNvbmZsaWN0IHdpdGgKCXN5c3RlbSBoZWFkZXJzLgoKTW9uIEp1biAxNCAxNzowODoxOCAxOTkzICBkYXZpZCBkIGB6b28nIHp1aG4gICh6b28gYXQgcnRsLmN5Z251cy5jb20pCgoJKiBNYWtlZmlsZS5pbiAoaW5zdGFsbCk6IHJlbW92ZSBwYXJlbnRkaXIgY3J1ZnQKCk1vbiBKdW4gMTQgMTk6MDQ6MDkgMTk5MyAgU3R1IEdyb3NzbWFuICAoZ3Jvc3NtYW5AY3lnbnVzLmNvbSkKCgkqIGhwcGEuYyAoaHBwYV9nZXRfc3ltYm9sX2luZm8pOiAgUmVtb3ZlIHJlZHVuZGFudCBjb3B5LgoJKiBFeHB1cmdhdGUgcmFuZG9tIERFRlVOcyB0aGF0IGhhdmUgY3JlcHQgaW4uCgpNb24gSnVuIDE0IDEwOjIzOjUzIDE5OTMgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AY3lnbnVzLmNvbSkKCgkqIGNvZmYtbWlwcy5jIChlY29mZl9zZXRfc3ltYm9sX2luZm8pOiBDb25zdHJ1Y3RvciBzZWN0aW9ucyBzaG91bGQKCW9ubHkgYmUgYWxpZ25lZCB0byBhIDQgYnl0ZSBib3VuZGFyeS4KClNhdCBKdW4gMTIgMTY6MTM6MTcgMTk5MyAgSmltIEtpbmdkb24gIChraW5nZG9uQGN5Z251cy5jb20pCgoJKiBob3N0cy9zdGQtaG9zdC5oIChzdHJ1Y3QgaW50NjRlX3N0cnVjdCk6IFJlbW92ZSBuZWVkbGVzcyB0eXBlZGVmCglrZXl3b3JkLgoKRnJpIEp1biAxMSAxNDoyNTozNCAxOTkzICBTdGV2ZSBDaGFtYmVybGFpbiAgKHNhY0BwaHlkZWF1eC5jeWdudXMuY29tKQoKCSogYW91dGYxLmggKHN1bm9zNF93cml0ZV9vYmplY3RfY29udGVudHMpOiBzZXQgZmxhZ3MgdG8gMSwgYnJlYWtpbmcKCTE5MjcgYnV0IGZpeGluZyBzb21lIG90aGVyIGltcG9ydGFudCB0aGluZ3MuCgpUaHUgSnVuIDEwIDIwOjM2OjIyIDE5OTMgIERvdWcgRXZhbnMgIChkamVAY2FudWNrLmN5Z251cy5jb20pCgoJKiBob3N0cy9zdGQtaG9zdC5oIChpbnQ2NGVfdHlwZSk6IEZpeCBkZWZpbml0aW9uLgoKVGh1IEp1biAxMCAxMTo0ODoyOCAxOTkzICBJYW4gTGFuY2UgVGF5bG9yICAoaWFuQGN5Z251cy5jb20pCgoJKiBjb2ZmLW1pcHMuYyAoZWNvZmZfc2VjX3RvX3N0eXBfZmxhZ3MpOiBVc2UgU1RZUF9NSVBTX0lOSVQgZm9yCglzZWN0aW9uIG5hbWVkIF9JTklULiAgRG9uJ3Qgc2V0IFNUWVBfVEVYVCB1bmxlc3MgU0VDX0NPREUgaXMgc2V0LgoJKGVjb2ZmX3N0eXBfdG9fc2VjX2ZsYWdzKTogVHJlYXQgYSBTVFlQX01JUFNfSU5JVCBzZWN0aW9uIGxpa2UKCWEgU1RZUF9URVhUIHNlY3Rpb24uCgpXZWQgSnVuICA5IDE2OjQ4OjEzIDE5OTMgIGRhdmlkIGQgYHpvbycgenVobiAgKHpvbyBhdCBjaXJkYW4uY3lnbnVzLmNvbSkKCgkqIE1ha2VmaWxlLmluIChpbnN0YWxsLCBoZWFkZXJzKTogZG9uJ3QgcHV0IGNvbW1lbnRzIGFmdGVyIGEgdGFiCglpbiB0aGUgYWN0aW9ucyBzZWN0aW9uIG9mIGEgcnVsZQoKV2VkIEp1biAgOSAxNTowMDowMSAxOTkzICBJYW4gTGFuY2UgVGF5bG9yICAoaWFuQGN5Z251cy5jb20pCgoJKiBjb2ZmLW1pcHMuYyAoZWNvZmZfbWtvYmplY3RfaG9vayk6IE1hcmsgWk1BR0lDIGZpbGVzIGFzIERfUEFHRUQuCgkoZWNvZmZfd3JpdGVfb2JqZWN0X2NvbnRlbnRzKTogSWYgbm90IERfUEFHRUQsIGRvbid0IGFkZCB0aGUKCXNlY3Rpb24gaGVhZGVycyB0byB0ZXh0X3NpemUuICBJZiBub3QgRF9QQUdFRCwgc2V0IHRoZSBtYWdpYwoJbnVtYmVyIHRvIE9NQUdJQyByYXRoZXIgdGhhbiBaTUFHSUMuICBJZiBjcmVhdGluZyBhIERfUEFHRUQKCWV4ZWN1dGFibGUsIHRoZSBleGVjdXRhYmxlIG11c3QgZnVsbHkgb2NjdXB5IGFuIGV2ZW4gbnVtYmVyIG9mCglwYWdlcy4KCShlY29mZl9zZXRfc3ltYm9sX2luZm8sIG1ha2VfYmZkX2FzZWN0aW9uLCBlY29mZl9saXR0bGVfdmVjLAoJZWNvZmZfYmlnX3ZlYyk6IENvbnNpc3RlbnRseSBzZXQgc2VjdGlvbiBhbGlnbm1lbnQgcG93ZXIgdG8gNCwKCXNpbmNlIEVDT0ZGIHNlY3Rpb25zIHNob3VsZCBiZSBtdWx0aXBsZXMgb2YgMTYgYnl0ZXMuCgkoZWNvZmZfbGl0dGxlX3ZlYywgZWNvZmZfYmlnX3ZlYyk6IEFkZGVkIERfUEFHRUQgdG8gb2JqZWN0X2ZsYWdzLgoJTWFkZSBhcl9wYWRfY2hhciBhbmQgYXJfbWF4X25hbWVsZW4gYWdyZWUgZm9yIGJvdGguCgpUdWUgSnVuICA4IDIwOjI4OjAyIDE5OTMgIE1hcmsgRWljaGluICAoZWljaGluIGF0IHR3ZWVkbGVkdW1iZXIpCgoJKiBlbGZjb2RlLmggKGVsZl9zbHVycF9zeW1ib2xfdGFibGUpOiBzdWJ0cmFjdCBzZWN0aW9uIHZtYSBmcm9tCglzeW1ib2wgdmFsdWUsIHNpbmNlIGJmZCBzeW1ib2xzIGFyZSBzZWN0aW9uIHJlbGF0aXZlLCBidXQgRUxGCglzeW1ib2xzIGFyZW4ndC4KClR1ZSBKdW4gIDggMTI6MDg6MjcgMTk5MyAgU3RldmUgQ2hhbWJlcmxhaW4gIChzYWNAcGh5ZGVhdXguY3lnbnVzLmNvbSkKCgkqIGNwdS1pOTYwLmMsIGNwdS1oODMwMC5jIChjb21wYXRpYmxlKTogTWFrZSBzdGF0aWMuCgpUdWUgSnVuICA4IDE0OjI3OjU2IDE5OTMgIEppbSBLaW5nZG9uICAoa2luZ2RvbkBydGwuY3lnbnVzLmNvbSkKCgkqIGhvc3RzL25ld3MuaCwgY29uZmlnL25ld3MubWg6IE5ldyBmaWxlcy4KClR1ZSBKdW4gIDggMTI6MDg6MjcgMTk5MyAgU3RldmUgQ2hhbWJlcmxhaW4gIChzYWNAcGh5ZGVhdXguY3lnbnVzLmNvbSkKCgkqIGJmZC1pbjIuaCwgYXJjaHVyZXMuYyAoYmZkX21hY2hfaDgzMDBbaF0pOiBuZXcgZGVmaW5lcy4KCSogY29mZi1oODMwMC5jOiBNb3JlIGFkZHJlc3NpbmcgbW9kZXMuCgkqIGNvZmZjb2RlLmggKGNvZmZfc2V0X2FyY2hfbWFjaF9ob29rKTogQ29wZSB3aXRoIEg4MzAwIG1hZ2ljCgludW1iZXIuCgkqIGNwdS1oODMwMC5jOiBSZW1vdmVkIGRpc2Fzc2VtYmxlIHN0dWZmLiAoaDgzMDBfc2Nhbik6IFJlY29nbmlzZQoJSDgvMzAwSCBuYW1lLiAoY29tcGF0aWJsZSk6IE5ldyBmdW5jdGlvbi4KCSogcmVsb2MxNi5jIChiZmRfY29mZl9yZWxvYzE2X2dldF9yZWxvY2F0ZWRfc2VjKTogQ29wZSB3aXRoIG1vcmUKCWFkZHJlc3NpbmcgbW9kZXMuCgpUdWUgSnVuICA4IDEwOjMwOjEzIDE5OTMgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AY3lnbnVzLmNvbSkKCgkqIGNvZmYtbWlwcy5jIChlY29mZl9jb21wdXRlX3NlY3Rpb25fZmlsZV9wb3NpdGlvbnMsCgllY29mZl93cml0ZV9vYmplY3RfY29udGVudHMpOiBPbmx5IHJvdW5kIHRvIHBhZ2UgYm91bmRhcmllcyBpZgoJRF9QQUdFRCBmbGFnIGlzIHNldCBmb3IgdGhlIG91dHB1dCBCRkQuCgpGcmkgSnVuICA0IDE1OjQ3OjUyIDE5OTMgIFN0ZXZlIENoYW1iZXJsYWluICAoc2FjQHBoeWRlYXV4LmN5Z251cy5jb20pCgoJKiBjb2ZmY29kZS5oIChnZXRfaW5kZXgsIGNvZmZfc2x1cnBfc3ltYm9sX3RhYmxlKTogRml4IHBvaW50ZXIKCWNhc3RzIHRvIHdvcmsgb24gbWFjaGluZSB3aGVyZSBzaXplb2YobG9uZykgIT0gc2l6ZW9mKGludCkgIT0KCXNpemVvZihjaGFyICopLgogICAgICAgICogY29mZmdlbi5jIChjb2ZmX2dldF9ub3JtYWxpemVkX3N5bXRhYik6IERpdHRvLgoJKiBjcHUtaDgzMDAuYyBjb2ZmLWg4MzAwLmM6IFN1cHBvcnQgZm9yIEg4LzMwMC1ILgoKRnJpIEp1biAgNCAxNToyNDoyNyAxOTkzICBLZW4gUmFlYnVybiAgKHJhZWJ1cm5AY2FtYnJpZGdlLmN5Z251cy5jb20pCgoJKiBjb2ZmZ2VuLmMgKGNvZmZfd3JpdGVfc3ltYm9scyk6IEZvciBlbXB0eSBzdHJpbmcgdGFibGUsIHdyaXRlCglvdXQgNCBpbiBjb3JyZWN0IGJ5dGUgb3JkZXIuICAoZnJvbSBtaW55YXJkQGJuci5jYSkKCgkqIGVsZjMyLWhwcGEuYzogRG9uJ3QgaW5jbHVkZSBsaWJocHBhLmggZm9yIG5vdzsgZGVmaW5lCglCWVRFU19JTl9XT1JEIGluc3RlYWQsIHVudGlsIFV0YWggc2VuZHMgYSBiZXR0ZXIgZml4LgoJKGhwcGFfZWxmX2J1aWxkX2FyZ19yZWxvY19zdHViKTogVXNlIHhtYWxsb2MgYW5kIHhyZWFsbG9jIGluc3RlYWQKCW9mIG1hbGxvYyBhbmQgcmVhbGxvYy4KCkZyaSBKdW4gIDQgMDc6NDk6MDEgMTk5MyAgSWFuIExhbmNlIFRheWxvciAgKGlhbkBjeWdudXMuY29tKQoKCSogY29uZmlndXJlLmluIChtaXBzLSotZWNvZmZsKik6IE5ldyB0YXJnZXQ7IHVzZSBkZWNzdGF0aW9uLgoJKG1pcHMtKi1lY29mZiopOiBBZGRlZCB0cmFpbGluZyAnKicuCgoJKiBjb2ZmLW1pcHMuYyAoZWNvZmZfZ2V0X2RlYnVnKTogR2V0IHRoZSBvZmZzZXQgZnJvbSB0aGUgZmlyc3QgUERSCglmb3IgdGhlIEZEUiwgbm90IGZyb20gdGhlIGZpcnN0IFBEUiBpbiB0aGUgZmlsZS4KClRodSBKdW4gIDMgMTY6NDE6MTAgMTk5MyAgU3R1IEdyb3NzbWFuICAoZ3Jvc3NtYW5AY3lnbnVzLmNvbSkKCgkqIGhwcGEuYyAoaHBwYV9nZXRfc3ltYm9sX2luZm8pOiAgTmV3IGZ1bmMgbmVlZGVkIGZvciBKVU1QX1RBQkxFLgoKVGh1IEp1biAgMyAxNTozMzo1NyAxOTkzICBEYXZpZCBKLiBNYWNrZW56aWUgIChkam1AcnRsLmN5Z251cy5jb20pCgoJKiBocHBhLmMgKGhwcGFfZ2V0X3N5bWJvbF9pbmZvKTogTmV3IGZ1bmN0aW9uLgoKVGh1IEp1biAgMyAxMzowNzo0MiAxOTkzICBLZW4gUmFlYnVybiAgKHJhZWJ1cm5AY2FtYnJpZGdlLmN5Z251cy5jb20pCgoJKiBlbGZjb2RlLmggKGVsZl9tYXBfc3ltYm9scyk6IERvbid0IGNyYXNoIGlmIG5vIHN5bWJvbHMgaGF2ZSBiZWVuCglhbGxvY2F0ZWQgeWV0LgoKCUZyb20gUGV0ZXIgSG9vZ2VuYm9vbSAoaG9vZ2VuQHNjaGFmZXIuY3MudXRhaC5lZHUpOgoJKiBsaWJocHBhLmggKE1BWENPTUxFTik6IERlZmluZSB1bmNvbmRpdGlvbmFsbHkuCgkoX1BBX1JJU0NfSUQpOiBPbmx5IGRlZmluZSBpZiBub3QgYWxyZWFkeSBkZWZpbmVkLgoJKiBlbGYzMi1ocHBhLmM6IEluY2x1ZGUgbGliaHBwYS5oLgoKCUZyb20gUmFscGggQ2FtcGJlbGw6CgkqIGhvc3RzL21pcHNic2QuaCAoSE9TVF9EQVRBX1NUQVJUX0FERFIpOiBEZWxldGUgZGVmaW5pdGlvbi4KCgkqIGVsZjMyLWhwcGEuaCAoc3ltZXh0X3Jvb3RQLCBzeW1leHRfbGFzdFApOiBEZWxldGUgZGVjbHMuCgpUaHUgSnVuICAzIDAwOjIzOjUzIDE5OTMgIGRhdmlkIGQgYHpvbycgenVobiAgKHpvbyBhdCBjaXJkYW4uY3lnbnVzLmNvbSkKCgkqIGNvbmZpZy9nbzMyLm1oOiBkZWZpbmUgRVhUUkFMSUJFUyB0byAtbG0gKGZvciBiaW51dGlscyksIGFsc28KCXJlbW92ZSBkZWZpbmVzIG9mIF9fTVNET1NfXyBhbmQgX19HTzMyX18gKHRoZXNlIGFyZSBpbiB0aGUKCWNvbXBpbGVyIG5vdykuCgpXZWQgSnVuICAyIDE3OjU3OjEzIDE5OTMgIEtlbiBSYWVidXJuICAocmFlYnVybkBjYW1icmlkZ2UuY3lnbnVzLmNvbSkKCglGcm9tIFV0YWg6CgkqIGhvc3RzL2hwcGFic2QuaDogRWxpbWluYXRlIHVzZSBvZiBvYnNvbGV0ZSBFWEZVTi4KCSogY29uZmlnL2hwcGFic2QubWg6IERvbid0IHVzZSByYW5saWIuCgpUdWUgSnVuICAxIDA0OjE1OjU3IDE5OTMgIEtlbiBSYWVidXJuICAocmFlYnVybkBrci1wYy5jeWdudXMuY29tKQoKCSogZWxmLmM6IE5ldyBmaWxlLCBmb3Igd29yZC1zaXplIGluZGVwZW5kZW50IGNvZGUuCgkqIGVsZmNvZGUuaCAoZWxmX2hhc2gpOiBNb3ZlZCB0byB0aGVyZSwgcmVuYW1lZCBiZmRfZWxmX2hhc2guCgkqIE1ha2VmaWxlLmluOiBJbmNsdWRlIGVsZi5vIGluIHN0YW5kYXJkIG9iamVjdHMuCgoJKiBiZmQtaW4uaCAoQ0FUMyk6IERlZmluZSBoZXJlLgoJKiBsaWJhb3V0LmgsIGxpYmVsZi5oOiBOb3QgaGVyZS4KCgkqIGxpYmVsZi5oIChzdHJ1Y3Qgc3RydGFiKTogRGVmaW5lIGhlcmUuCgkoYmZkX2VsZl9sb2NhdGVfc2gpOiBEZWNsYXJlIGhlcmUuCgkqIGVsZmNvZGUuaCAoc3RydWN0IHN0cnRhYik6IERlZmluaXRpb24gZGVsZXRlZC4KCgkqIHJlbG9jLmMgKGVudW0gYmZkX3JlbG9jX2NvZGVfcmVhbCk6IEFkZGVkIEhQUEFfUENSRUxfQ0FMTF8xMi4KCgkqIE1ha2VmaWxlLmluOiBNYWtlICJhbGwiLCBub3QgImJmZC5oIiwgYmUgdGhlIGRlZmF1bHQgdGFyZ2V0LgoJKHN0bXAtYmZkLmgpOiBOZXcgdGFyZ2V0OyBwcmV2ZW50cyByZWJ1aWxkaW5nIHdvcmxkIGlmIGJmZC5oCgloYXNuJ3QgcmVhbGx5IGNoYW5nZWQuCgoJVHVlIE1heSAyNSAxMjoxNToxNSAxOTkzICBNaWNoYWVsIE1laXNzbmVyICAobWVpc3NuZXJAb3NmLm9yZykKCgkqIGVsZmNvZGUuaCAoZWxmX2hhc2gpOiBQcm92aWRlIGVsZiBzdGFuZGFyZCBoYXNoIGZ1bmN0aW9uLgoJKHZhcmlvdXMpOiBLZXkgb2ZmIG9mIHRoZSBtYWNoaW5lcyB1c2VfcmVsYV9wIGZpZWxkIHRvIGRldGVybWluZQoJd2hldGhlciB0byB1c2UgUkVMIG9yIFJFTEEgcmVsb2NhdGlvbnMuCgkoZWxmX3N3YXBfcmVsb2Nfb3V0LCBlbGZfc3dhcF9yZWxvY19pbik6IE5ldyBmdW5jdGlvbnMuCgkoZWxmX21ha2Vfc2VjdGlvbnMpOiBBbGxvY2F0ZSBhIHBvaW50ZXIgdG8gaG9sZCBhbGwgZGF0YSBmb3IgYQoJZ2l2ZW4gc2VjdGlvbiwgYW5kIGNvcHkgZWFjaCBmcmFnbWVudCBpbnRvIHRoZSBkYXRhIHJlZ2lvbi4KCVVwZGF0ZSB0aGUgc2VjdGlvbidzIHBvaW50ZXIgd2l0aCB0aGUgUkVMIGltcGxpY2l0IGFkZGVuZHMgaWYgdGhlCgltYWNoaW5lIHVzZXMgUkVMIHJlbG9jYXRpb24uCgoJKiBlbGYzMi1pMzg2LmMgKGVsZl9iZmRfcmVsb2NfdHlwZV9sb29rdXApOiBSZW5hbWUgdG8KCWVsZl9pMzg2X2JmZF9yZWxvY190eXBlX2xvb2t1cCwgYW5kIHVzZSBjcHAgdG8gbWFwIHRoZSBuYW1lIGJhY2sKCWludG8gd2FzIGVsZjMyLXRhcmdldC5oIGV4cGVjdHMuCgkoZWxmX2luZm9fdG9faG93dG8pOiBSZW5hbWUgdG8gZWxmX2kzODZfaW5mb190b19ob3d0by4KCShlbGZfaTM4Nl9iZmRfcmVsb2NfdHlwZV9sb29rdXApOiBBZGQgcmVsb2NhdGlvbiBzdXBwb3J0LgoJKGVsZl9pMzg2X2luZm9fdG9faG93dG8pOiBBZGQgbWluaW1hbCByZWxvY2F0aW9uIHN1cHBvcnQuCgoJKiBsaWJlbGYuaCAoZWxmX2JhY2tlbmRfZGF0YSk6IEFkZCB1c2VfcmVsYV9wLCBlbGZfNjRfcCwKCWVsZl9pbmZvX3RvX2hvd3RvX3JlbCBmaWVsZHMuCgoJKiBlbGYzMi10YXJnZXQuaCAoZWxmX2JlZCk6IEFkZCBzdXBwb3J0IGZvciBuZXcgZmllbGRzIGluCgllbGZfYmFja2VuZF9kYXRhLgoKCVN1biBNYXkgMzAgMTY6Mzg6MjQgMTk5MyAgUGV0ZXIgSG9vZ2VuYm9vbSAgKGhvb2dlbkBmYXN0LmNzLnV0YWguZWR1KQoKCSogZWxmMzItaHBwYS5jOiBBZGQgc3ltYm9sIGV4dGVuc2lvbiBzZWN0aW9uIHN1cHBvcnQsIGZpeAoJcmVsb2NhdGlvbiBob3d0byB0YWJsZSwgYWRkIHN0dWIgZ2VuZXJhdGlvbiBzdXBwb3J0LgoKCSogZWxmMzItaHBwYS5oOiBBZGQgc3ltYm9sIGV4dGVuc2lvbiBzZWN0aW9uIHN1cHBvcnQsIGZpeAoJcmVsb2NhdGlvbiBob3d0byB0YWJsZSwgYWRkIHN0dWIgZ2VuZXJhdGlvbiBzdXBwb3J0LgoKCSogZWxmY29kZS5oIChiZmRfZWxmX2xvY2F0ZV9zaCk6IE5ldyBmdW5jdGlvbiB0byBsb2NhdGUgRUxGCglzZWN0aW9uIGhlYWRlci4KCgkqIGVsZmNvZGUuaCAoYmZkX2FkZF90b19zdHJ0YWIpOiBNYWRlIG5vbi1zdGF0aWMgZHVlIHRvIGEgY2FsbAoJZnJvbSBlbGYzMi1ocHBhLmMuCgoJKiBlbGZjb2RlLmggKGVsZl9pZHhfb2Zfc3ltKTogUmV0dXJuIFNUTl9VTkRFRiBpbnN0ZWFkIG9mIDAgd2hlbgoJdGhlIHN5bWJvbCBpcyBub3QgZm91bmQuCgoJKiBlbGZjb2RlLmggKGVsZl9jb21wdXRlX3NlY3Rpb25fZmlsZV9wb3NpdGlvbnMpOiBOb3QgYWxsIHNlY3Rpb24KCWZpbGUgcG9zaXRpb25zIHdlcmUgY29tcHV0ZWQuCgoJKiBlbGZjb2RlLmggKGVsZl9nZXRfc2VjdF90aHVuayk6IE5ldyBmdW5jdGlvbi4KCgkqIGhwcGEuYyAoc2lnbl9leHQpOiBSZWltcGxlbWVudC4KCgkqIGhwcGEuYyAocm91bmRfZG93bixyb3VuZCxyb3VuZF91cCxMLFIsTFMsUlMsTEQsUkQsTFIsUlIpOiBNYWtlCgl0aGVzZSBmdW5jdGlvbnMgc3RhdGljLgoKVHVlIEp1biAgMSAxNDo0MDo0MSAxOTkzICBQZXIgQm90aG5lciAgKGJvdGhuZXJAcnRsLmN5Z251cy5jb20pCgoJKiBNYWtlZmlsZS5pbiAoYmZkLmgpOiAgTW92ZSBjbG9zZXIgdG8gaGVhZGVycyAtIGFuZCBhZnRlciAnYWxsJyEKCgkqIGFvdXR4LmggKHRyYW5zbGF0ZV9mcm9tX25hdGl2ZV9zeW1fZmxhZ3MpOiAgRG9uJ3Qgc2V0CglCU0ZfREVCVUdHSU5HIGZvciBjb25zdHJ1Y3RvciBzeW1ib2xzLCBvbmx5IEJTRl9DT05TVFJVQ1RPUi4KCSogYW91dHguaCAodHJhbnNsYXRlX3RvX25hdGl2ZV9zeW1fZmxhZ3MpOiAgVHJhbnNsYXRlCgljb25zdHJ1Y3RvciBzeW1ib2xzIHByb3Blcmx5LgoKVGh1IE1heSAyNyAxNjowOTowNCAxOTkzICBTdGV2ZSBDaGFtYmVybGFpbiAgKHNhY0BwaHlkZWF1eC5jeWdudXMuY29tKQoKCSogYXJjaHVyZXMuYyAoYmZkX2RlZmF1bHRfYXJjaF9zdHJ1Y3QpOiB1c2UgNCBieXRlIGFsaWdubWVudCBhcyBhCgltaW5pbXVtLgoJKiBhb3V0LXRhcmdldC5oIChtaW5pbXVtX2FsaWdubWVudCk6IDggYnl0ZSBhbGlnbm1lbnQgaXMgcmlnaHQuCgkoZml4IGxkLzI2ODApCgpUaHUgTWF5IDI3IDEzOjM4OjQ3IDE5OTMgIEtlbiBSYWVidXJuICAocmFlYnVybkBjYW1icmlkZ2UuY3lnbnVzLmNvbSkKCgkqIGNvbmZpZ3VyZS5pbiwgTWFrZWZpbGUuaW46IEJ1aWxkIGJmZC1pbjIuaCBpbiBzb3VyY2UgZGlyZWN0b3J5LAoJZnJvbSBiZmQtaW4uaCBhbmQgLmMgZmlsZXMuICBCdWlsZCBiZmQuaCBpbiBidWlsZCBkaXJlY3RvcnksCglzdWJzdGl0dXRpbmcgaW4gcmVxdWVzdGVkIHRhcmdldCB3b3JkIHNpemUuICBJbnNlcnQgd29yZCBzaXplIGludG8KCW1ha2VmaWxlLCBhbmQgbWF5YmUgZW5hYmxlIDY0LWJpdCB0YXJnZXRzLgoKCSogYmZkLWluLmgsIGxpYmJmZC5jLCBkZW1vNjQuYywgdGFyZ2V0cy5jOiBEZWZpbmUgQkZENjQgaWYgNjQgYml0cwoJYXJlIGF2YWlsYWJsZS4gIENvbmRpdGlvbmFsaXplIG9uIHRoaXMuICBBc3N1bWUgSE9TVF82NF9CSVQKCXdpbGwgYmUgZGVmaW5lZCBpZiBuZWVkZWQsIHNvIDY0LWJpdCB0YXJnZXRzIGFyZSBjb25kaXRpb25hbGl6ZWQKCW9ubHkgaW4gdGhlIE1ha2VmaWxlLgoKVHVlIE1heSAyNSAxNDowMzo1NiAxOTkzICBLZW4gUmFlYnVybiAgKHJhZWJ1cm5AY2FtYnJpZGdlLmN5Z251cy5jb20pCgoJKiBsaWJiZmQuYyAoQ09FUkNFNjQpOiBSZXdyaXRlIHRvIGF2b2lkIG91dC1vZi1yYW5nZSB2YWx1ZXMuCgoJKiBjb2ZmLXNoLmMgKHJ0eXBlMmhvd3RvKTogUHV0IGVycm9yIG1lc3NhZ2Ugb24gc3RkZXJyLgoJKGV4dHJhX2Nhc2UpOiBEZWxldGUgdW51c2VkIHZhcmlhYmxlLgoKCSogY29mZi1taXBzLmMgKGVjb2ZmX3ByaW50X3N5bWJvbCk6IENhc3QgYmZkX3ZtYSB2YWx1ZXMgdG8gbG9uZwoJYmVmb3JlIGNhbGxpbmcgcHJpbnRmLgoKCSogZWxmY29kZS5oOiBOZXcgZmlsZSwgYWxtb3N0IGNvbXBsZXRlbHkgZGVyaXZlZCBmcm9tIG9sZCBlbGYzMi5jLgoJKiBlbGYzMi5jOiBOb3cganVzdCBkZWZpbmUgQVJDSF9TSVpFIGFuZCBpbmNsdWRlIGVsZmNvZGUuaC4KCSogTWFrZWZpbGUuaW4gKGVsZjY0Lm8pOiBMaXN0IGRlcGVuZGVuY2llcywgZG9uJ3QgYnVpbGQgYnkKCWRlZmF1bHQuCgkoZWxmNjQuYyk6IEFkZCB0byBsaXN0IG9mIHNvdXJjZXMuCgkoZWxmMzIubyk6IFVwZGF0ZSBkZXBlbmRlbmNpZXMuCgkqIGVsZjMyLSouYzogVXBkYXRlZCB0eXBlL21hY3JvL3N0cnVjdHVyZSBuYW1lcy4gIENsZWFuZWQgdXAKCW5hbWVzcGFjZSBwb2xsdXRpb247IHJlbmFtZSB2ZWN0b3JzLgoJKiB0YXJnZXRzLmMsIGNvbmZpZy8qLWVsZi5tdDogVXBkYXRlZC4KCSogQWxsIHVzZXMgb2YgMzItYml0IHZlcnNpb25zIG9mIHN0cnVjdHVyZXMsIHJvdXRpbmVzLCBhbmQgbWFjcm9zCglyZW5hbWVkLgoKCSogTWFrZWZpbGUuaW4gKGFyY2h1cmVzLm8sIHRhcmdldHMubyk6IERlcGVuZCBvbiBNYWtlZmlsZS4KCk1vbiBNYXkgMjQgMTU6NTM6MTMgMTk5MyAgS2VuIFJhZWJ1cm4gIChyYWVidXJuQGN5Z251cy5jb20pCgoJKiBlbGYzMi1pMzg2LmMgKGVudW0gcmVsb2NfdHlwZSk6IE5vIGNvbW1hIGFmdGVyIGxhc3QgZW51bWVyYXRvci4KCgkqIGVsZjMyLmMgKGVsZl9zdHJpbmdfZnJvbV9lbGZfc2VjdGlvbik6IEhhbmRsZSBpbmRleCBvZiB6ZXJvCglzcGVjaWFsbHkuCgkoYmZkX3NlY3Rpb25fZnJvbV9zaGRyLCBlbGZfc2x1cnBfc3ltYm9sX3RhYmxlKTogRG9uJ3QgbmVlZCB0byBkbwoJc28gaGVyZS4KCShlbGZfd3JpdGVfb2JqZWN0X2NvbnRlbnRzKTogRGVsZXRlZCBvbmUgdW51c2VkIHZhcmlhYmxlIGFuZAoJaW5pdGlhbGl6ZWQgYW5vdGhlciB0byBhdm9pZCBnY2Mgd2FybmluZ3MuCgkoZWxmX3NldF9zZWN0aW9uX2NvbnRlbnRzKTogRGVsZXRlIHVudXNlZCB2YXJpYWJsZS4KCkZyaSBNYXkgMjEgMTk6MDQ6MjEgMTk5MyAgU3R1IEdyb3NzbWFuICAoZ3Jvc3NtYW5AY3lnbnVzLmNvbSkKCgkqIGkzODZseW54LmM6ICBOZXcgbW9kdWxlIGZvciBMeW54IHZhcmlhbnQgb2YgYS5vdXQuCgkqIE1ha2VmaWxlLmluIChCRkRfQkFDS0VORFMgQ0ZJTEVTIGRlcGVuZHMpOiAgQWRkIGkzODZseW54LmMuCgkqIGdlbi1hb3V0LmM6ICBHZXQgcmlkIG9mIGRlZnVuY3QgZW5kaWFuIHN0dWZmLCBwcmludCBvdXQgdHJ1ZQoJcGFnZXNpemUuCgkqIHRhcmdldHMuYyAodGFyZ2V0X3ZlY3Rvcik6ICBBZGQgaTM4Nmx5bnhfdmVjLgoKRnJpIE1heSAyMSAxNzowMjoyMiAxOTkzICBKaW0gS2luZ2RvbiAgKGtpbmdkb25AbGlvdGguY3lnbnVzLmNvbSkKCgkqIGNvbmZpZ3VyZS5pbjogVXNlIGkzODYtc2NvLm10IGZvciBpWzM2XTg2LSotaXNjKi4KCkZyaSBNYXkgMjEgMTM6NDQ6MTggMTk5MyAgRGF2aWQgSi4gTWFja2VuemllICAoZGptQHJ0bC5jeWdudXMuY29tKQoKCSogYWl4Mzg2LWNvcmUuYywgYW91dC10YXJnZXQuaCwgYW91dHguaCwgY29mZi1hbHBoYS5jLAoJY29mZi1taXBzLmMsIGNvZmZnZW4uYywgZWxmMzIuYywgaWVlZS5jLCBsaWJhb3V0LmgsIGxpYmNvZmYtaW4uaCwKCWxpYmVsZi5oLCBtaXBzYnNkLmMsIG9hc3lzLmMsIHNjby1jb3JlLmMsIHNyZWMuYywgdGVraGV4LmMsCgl0cmFkLWNvcmUuYzogRGVmaW5lIGEgVEFSR0VUX2dldF9zeW1ib2xfaW5mbyBmdW5jdGlvbiBvciBtYWNyby4KCVJlbW92ZSB0aGUgYmZkX3ByaW50X3N5bWJvbF9ubSBjYXNlIGZyb20gVEFSR0VUX3ByaW50X3N5bWJvbC4KCgkqIGJmZC1pbi5oOiBEb24ndCBkZWZpbmUgYmZkX3ByaW50X3N5bWJvbF9ubS4KCURlZmluZSBzeW1ib2xfaW5mbyB0eXBlLgoJKEpVTVBfVEFCTEUpOiBTZXQgX2dldF9zeW1ib2xfaW5mbyBlbGVtZW50LgoKCSogc3ltcy5jIChjb2ZmX3NlY3Rpb25fdHlwZSwgYmZkX3N5bWJvbF9pbmZvKTogTmV3IGZ1bmN0aW9ucy4KCShiZmRfZGVjb2RlX3N5bWNsYXNzKTogVXNlIGNvZmZfc2VjdGlvbl90eXBlLgoKCSogdGFyZ2V0cy5jOiBBZGQgYmZkX2dldF9zeW1ib2xfaW5mbyBjYWxsLgoKV2VkIE1heSAxOSAxNTozMDo1MiAxOTkzICBTdHUgR3Jvc3NtYW4gIChncm9zc21hbkBjeWdudXMuY29tKQoKCSogY29mZi1pMzg2LmMgKGNvZmZfaTM4Nl9yZWxvYyk6ICBVc2UgdW5zaWduZWQgY2hhciB0byBhdm9pZAoJY29tcGxhaW50cyBmcm9tIGFuY2llbnQgZ2NjJ3MuCgpXZWQgTWF5IDE5IDE1OjUxOjE5IDE5OTMgIEppbSBLaW5nZG9uICAoa2luZ2RvbkBsaW90aC5jeWdudXMuY29tKQoKCSogdHJhZC1jb3JlLmM6ICBDaGVjayBtYWNybyBUUkFEX0NPUkVfRVhUUkFfU0laRV9BTExPV0VELgoJaG9zdHMvaTM4NmxpbnV4Lmg6ICBEZWZpbmUgaXQuCgpNb24gTWF5IDE3IDE1OjAwOjMzIDE5OTMgIEtlbiBSYWVidXJuICAocmFlYnVybkBkZW5lYi5jeWdudXMuY29tKQoKCSogVkVSU0lPTiwgYmZkLWluLmg6IEJ1bXAgdmVyc2lvbiBudW1iZXIgdG8gMi4yLgoKCSogaHBwYS5jIChhc3NlbWJsZV8zLCBkaXNfYXNzZW1ibGVfMywgYXNzZW1ibGVfMTIsCglkaXNfYXNzZW1ibGVfMTIsIGFzc2VtYmxlXzE3LCBkaXNfYXNzZW1ibGVfMTcsIGFzc2VtYmxlXzIxLAoJZGlzX2Fzc2VtYmxlXzIxLCBzaWduX2V4dCwgb25lcywgc2lnbl91bmV4dCwgbG93X3NpZ25fZXh0LAoJbG93X3NpZ25fdW5leHQsIHJvdW5kX2Rvd24sIHJvdW5kLCByb3VuZF91cCwgTCwgUiwgTFMsIFJTLCBMRCwgUkQsCglMUiwgUlIsIGhwcGFfZmllbGRfYWRqdXN0KTogTmV3IGZ1bmN0aW9ucy4KCk1vbiBNYXkgMTcgMTA6MDQ6MTYgMTk5MyAgSWFuIExhbmNlIFRheWxvciAgKGlhbkBjeWdudXMuY29tKQoKCSogY29mZi1taXBzLmMgKGVjb2ZmX3NldF9zeW1ib2xfaW5mbyk6IEFkZGVkIHN1cHBvcnQgZm9yIGluZGlyZWN0CglzdGFicyBzeW1ib2xzLCBpbmNsdWRpbmcgbmV3IGluZGlyZWN0X3B0cl9wdHIgYXJndW1lbnQuCgkoZWNvZmZfc2x1cnBfc3ltYm9sX3RhYmxlKTogUGFzcyBuZXcgYXJndW1lbnQgaW4gY2FsbHMgdG8KCWVjb2ZmX3NldF9zeW1ib2xfaW5mby4KCkZyaSBNYXkgMTQgMDA6MDU6MDYgMTk5MyAgS2VuIFJhZWJ1cm4gIChyYWVidXJuQGNhbWJyaWRnZS5jeWdudXMuY29tKQoKCSogY29uZmlndXJlLmluOiBGb3IgbTY4ayBzeXN2IHN5c3RlbXMsIHVzZSBtNjhrLWNvZmYuCgoJKiBjb25maWcvaHBwYS1lbGYubXQgKFRERUZJTkVTKTogRG9uJ3QgZGVmaW5lIERFRkFVTFRfVkVDVE9SIGhlcmUuCgkoVERFRkFVTFRTKTogRGVmaW5lIGl0IGhlcmUuICBVc2UgdGhlIG5ldyBuYW1lLgoKCSogZWxmMzItaHBwYS5jIChlbGZfaHBwYV9iYWNrZW5kX2RhdGEpOiBEZWxldGU7IHJlbHkgb24gZGVmYXVsdAoJdmFsdWVzIGluc3RlYWQuCgoJKiByZWxvYy5jIChiZmRfcmVsb2NfY29kZV9yZWFsX3R5cGUpOiBBZGQgc29tZSBIUFBBIHJlbG9jIHR5cGVzLgoKCSogYWl4Mzg2LWNvcmUuYyAoTk9fR0VUUyk6IEZpeCBQUk9UTyBpbnZvY2F0aW9uIHRvIGhhdmUgY29ycmVjdAoJbnVtYmVyIG9mIGFyZ3VtZW50cy4KCShhaXgzODZfY29yZV9maWxlX3ApOiBJbml0aWFsaXplIGNvcmVfc2l6ZSB0byBjb3JyZWN0IHZhbHVlLgoKV2VkIE1heSAxMiAxNDozOTo1OSAxOTkzICBJYW4gTGFuY2UgVGF5bG9yICAoaWFuQGN5Z251cy5jb20pCgoJKiBNYWtlZmlsZS5pbiAoQ0NfRk9SX0JVSUxEKTogTmV3IHZhcmlhYmxlLCBzZXQgdG8gJChDQykuCgkoRkxBR1NfVE9fUEFTUyk6IFBhc3MgZG93biBDQ19GT1JfQlVJTEQuCgoJKiBib3V0LmMgKGFvdXQzMl9zbHVycF9leHRlbmRlZF9uYW1lX3RhYmxlKTogRGVmaW5lIHRvIGJlCglfYmZkX3NsdXJwX2V4dGVuZGVkX25hbWVfdGFibGUgcmF0aGVyIHRoYW4gYmZkX3RydWUuCgoJKiBjb2ZmLW1pcHMuYzogSW5jbHVkZSBsaWJhb3V0LmggYW5kIGFvdXQvYW91dDY0LmggdG8gZ2V0CglkZWZpbml0aW9ucyBmb3IgTl9TRVRbQVREQl0uCgkoZWNvZmZfaG93dG9fdGFibGUpOiBNb3ZlZCBuZWFyIHRvcCBvZiBmaWxlLgoJKGVjb2ZmX3NldF9zeW1ib2xfaW5mbyk6IElmIGEgU1RBQlMgc3ltYm9sIG9mIHR5cGUgTl9TRVRbQVREQl0gaXMKCXNlZW4sIGNvb2sgdXAgYSBjb25zdHJ1Y3RvciBzZWN0aW9uIG9mIHRoZSBzYW1lIG5hbWUgYW5kIHB1dCBpbiBhCglyZWxvYyBwb2ludGluZyB0byB0aGUgc3ltYm9sLiAgVGhpcyBsZXRzIHRoZSBHTlUgbGlua2VyIGJ1aWxkCglnbG9iYWwgY29uc3RydWN0b3JzIGFuZCBkZXN0cnVjdG9ycyB3aXRob3V0IHVzaW5nIGNvbGxlY3QuCgpUdWUgTWF5IDExIDAwOjMzOjMxIDE5OTMgIEpvaG4gR2lsbW9yZSAgKGdudUBjeWdudXMuY29tKQoKCSogY29mZi1tODhrLmMgKG04OGtiY3NfdmVjKTogIFN5bWJvbHMgaGF2ZSB1bmRlcmJhcnMuCgpNb24gTWF5IDEwIDA1OjU1OjQ1IDE5OTMgIEtlbiBSYWVidXJuICAocmFlYnVybkBrci1wYy5jeWdudXMuY29tKQoKCSogaG9zdHMvbWluaWZyYW1lLmg6IE5ldyBmaWxlLgoJKiBjb25maWd1cmUuaG9zdDogVXNlIGl0LgoKU3VuIE1heSAgOSAxNjozNjo1OSAxOTkzICBGcmVkIEZpc2ggIChmbmZAY3lnbnVzLmNvbSkKCgkqIGNvbmZpZ3VyZS5pbiAoaHBwYSotKi1ic2QpOiAgQ2hhbmdlIHRvIGhwcGEqLSotYnNkKgoJKiBjb25maWd1cmUuaW4gKGhwcGEqLSotaHB1eCk6ICBDaGFuZ2UgdG8gaHBwYSotKi1ocHV4KgoJKiBjb25maWd1cmUuaW4gKG02OCotaHAtYnNkKTogIENoYW5nZSB0byBtNjgqLWhwLWJzZCoKCSogY29uZmlndXJlLmluIChtNjgqLSotaHB1eCk6ICBDaGFuZ2UgdG8gbTY4Ki0qLWhwdXgqCgkqIGNvbmZpZ3VyZS5pbiAoKi0qLWJzZCk6ICBDaGFuZ2UgdG8gKi0qLWJzZCoKCldlZCBNYXkgIDUgMTY6MDg6MzIgMTk5MyAgUGVyIEJvdGhuZXIgIChib3RobmVyQGN5Z251cy5jb20pCgoJKiBlbGYzMi1ocHBhLmMgKGVsZl9ocHBhX3JlbG9jX3R5cGVfbG9va3VwKTogIENhc3QgZW51bXMgdG8KCWludCwgZm9yIHRoZSBzYWtlIG9mIHRoZSBvbGQgUG9ydGFibGUgQyBDb21waWxlci4KCk1vbiBNYXkgIDMgMTQ6Mzc6MDEgMTk5MyAgU3R1IEdyb3NzbWFuICAoZ3Jvc3NtYW5AY3lnbnVzLmNvbSkKCgkqIE1ha2VmaWxlLmluIChDRklMRVMpOiAgQWRkIGNwdS1zaC5jIGFuZCBjb2ZmLXNoLmMuCgpNb24gTWF5ICAzIDE0OjAzOjIxIDE5OTMgIEtlbiBSYWVidXJuICAocmFlYnVybkBkZW5lYi5jeWdudXMuY29tKQoKCSogY29uZmlndXJlLmluOiBHZXQgdGFyZ2V0IG5hbWUgcmlnaHQgZm9yIG02OCotKi1ocHV4LgoKU3VuIE1heSAgMiAxMTozOTo0NCAxOTkzICBGcmVkIEZpc2ggIChmbmZAY3lnbnVzLmNvbSkKCgkqIHRyYWQtY29yZS5jIChOT19TSUdORURfR0VUKTogIE5ldyBtYWNyby4KCSogdHJhZC1jb3JlLmMgKHRyYWRfY29yZV92ZWMpOiAgVXNlIG5ldyBOT19TSUdORURfR0VUIGluc3RlYWQgb2YKCXNpZ25lZCBOT19HRVQsIHdoZXJlIGFwcHJvcHJpYXRlLgoKCSogY29uZmlndXJlLmluIChpWzM0XTg2LSotbGludXgqKTogIEFkZDsgYmZkX3RhcmdldCA9IGkzODYtbGludXguCgkqIGNvbmZpZ3VyZS5pbiAoKi0qLWxpbnV4Kik6ICBSZW1vdmUgdW50aWwgbGludXggcG9ydCBmb3IgYQoJbm9uLWkzODYvaTQ4NiBzeXN0ZW0gaXMgYWN0dWFsbHkgYXZhaWxhYmxlLgoKRnJpIEFwciAzMCAyMDowNDoxMCAxOTkzICBTdHUgR3Jvc3NtYW4gIChncm9zc21hbkBjeWdudXMuY29tKQoKCSogbGliaHBwYS5oOiAgI3VuZGVmIGVfKiBzeW1ib2xzIHdoaWNoIGNvbWUgZnJvbSA8bWFjaGluZS9zb20uaD4KCXdoZW4gY29tcGlsaW5nIHVuZGVyIEhQVVguCgpGcmkgQXByIDMwIDE3OjI1OjIzIDE5OTMgIFN0dSBHcm9zc21hbiAgKGdyb3NzbWFuQGN5Z251cy5jb20pCgoJKiBUaGUgZm9sbG93aW5nIHBhdGNoZXMgYXJlIGZyb20gSmVmZnJleSBMYXcgPGxhd0Bjcy51dGFoLmVkdT4uCgkqIGhwcGEuYyAoaHBwYV9jb3JlX2ZpbGVfcCk6IFByb3ZpZGUgYSB0ZW1wb3JhcnkgZHVtbXkgcm91dGluZQoJZm9yIEhPU1RfSFBQQUJTRC4KCSogaG9zdHMvaHBwYWJzZC5oOiBGaXggZGVjbGFyYXRpb25zIG9mIG1hbGxvYyBhbmQgZnJlZS4KCSogbGliaHBwYS5oOiBJbmNsdWRlIHN5c2RlcCBoZXJlLiAgQ29uZGl0aW9uYWxpemUKCWluY2x1ZGVzIGJhc2VkIG9uIEhPU1RfSFBQQUhQVVggb3IgSE9TVF9IUFBBQlNELgoJUHJvdmlkZSBkZWZpbml0aW9ucyBmb3IgTUFYQ09NTEVOIGFuZCBfUEFfUklTQ19JRCBzdWl0YWJsZQoJZm9yIEJTRC4KCkZyaSBBcHIgMzAgMTc6MzQ6MTEgMTk5MyAgS2VuIFJhZWJ1cm4gIChyYWVidXJuQGNhbWJyaWRnZS5jeWdudXMuY29tKQoKCSogZWxmMzItaHBwYS5jOiBEb24ndCBpbmNsdWRlIGEub3V0LmguICBBcHBhcmVudGx5IG5vdCBldmVuIHRoZQoJR05VIHZlcnNpb24gaXMgbmVlZGVkLgoKRnJpIEFwciAzMCAwOTozODo1OSAxOTkzICBKaW0gS2luZ2RvbiAgKGtpbmdkb25AY3lnbnVzLmNvbSkKCgkqIGNvZmZjb2RlLmg6IHVzZSBkdW1teV9yZWxvYzE2X2V4dHJhX2Nhc2VzIHJhdGhlciB0aGFuIGNhc3RpbmcgYWJvcnQuCgpUaHUgQXByIDI5IDExOjMwOjMyIDE5OTMgIEtlbiBSYWVidXJuICAocmFlYnVybkBkZW5lYi5jeWdudXMuY29tKQoKCSogTWFrZWZpbGUuaW46IEJ1aWxkIGVsZjMyLWhwcGEuby4KCgkqIHN5bXMuYyAoQlNGX0ZVTkNUSU9OKTogTmV3IHN5bWJvbCBmbGFnLgoKCSogZWxmMzItaHBwYS5jOiBGaXhlZCB0byB3b3JrIHdpdGggZWxmMzItdGFyZ2V0LmguCgoJKiBocDMwMGhwdXguYyAoTkFNRSwgTkFNRV9zd2FwX2V4ZWNfaGVhZGVyX2luKTogRml4IGZvcgoJdHJhZGl0aW9uYWwgQy4KCSogbGliYW91dC5oIChOQU1FKTogRG9uJ3QgZGVmaW5lIGlmIGFscmVhZHkgZGVmaW5lZC4KCgkqIGxpYmVsZi5oOiBQcm90ZWN0IGFnYWluc3QgbXVsdGlwbGUgaW5jbHVzaW9ucy4KCShlbGZfc3ltYm9sX3R5cGUpOiBNb3ZlZCBoZXJlLCBhZGRlZCBuZXcgZmllbGRzLgoJKHN0cnVjdCBlbGZfYmFja2VuZF9kYXRhKTogTmV3IGZpZWxkIGBnbG9iYWxfc3ltJzsgSSBzdXNwZWN0IHRoaXMKCW1heSBiZSBtaXNwbGFjZWQuCgkqIGVsZjMyLmMgKGVsZl9zeW1ib2xfdHlwZSk6IERlbGV0ZWQgZnJvbSBoZXJlLgoJKHN0cnVjdCBlbGZfb2JqX3RkYXRhKTogTmV3IGZpZWxkcyByYXdfc3ltcyBhbmQgaW50ZXJuYWxfc3ltcywgdG8KCXBvaW50IHRvIGJhY2tlbmQgdmVyc2lvbnMgb2Ygc3ltYm9scy4KCShvYmpfc3ltYm9scywgb2JqX3Jhd19zeW1zLCBvYmpfaW50ZXJuYWxfc3ltcyk6IE5ldyBtYWNyb3MuCgkoZWxmX3N3YXBfcGhkcl9vdXQsIGVsZl9idWlsZF9waGRycywgZWxmX3dyaXRlX3BoZHJzKTogTmV3CglmdW5jdGlvbnMuCgkoZWxmX3dyaXRlX29iamVjdF9jb250ZW50cyk6IFdyaXRlIHByb2dyYW0gaGVhZGVycyBpZiBhcHByb3ByaWF0ZS4KCShiZmRfc2VjdGlvbl9mcm9tX3NoZHIpOiBVbm5hbWVkIHNlY3Rpb25zIGdldCBlbXB0eSBzdHJpbmcgZm9yCgluYW1lLCBub3QgInVubmFtZWQiLiAgSGFuZGxlIFNIVF9OT0JJVFMgc2VwYXJhdGVseSBmcm9tCglTSFRfUFJPR0JJVFMsIGFuZCBzZXQgc29tZSBkaWZmZXJlbnQgZmxhZ3MuCgkoZWxmX2ZpbGVfcCk6IE5ldyByb3V0aW5lLgoJKGVsZl9vYmplY3RfcCwgZWxmX2NvcmVfZmlsZV9wKTogQ2FsbCBpdC4KCShlbGZfb2JqZWN0X3ApOiBIYW5kbGUgRU1fSFBQQS4KCShlbGZfc3ltYm9sX2Zyb20sIGVsZl9pZHhfb2Zfc3ltKTogTmV3IGZ1bmN0aW9ucy4KCShlbGZfbWFrZV9zZWN0aW9ucyk6IEdldCBzeW1ib2wgbnVtYmVyIHJpZ2h0IGZvciByZWxvY2F0aW9ucy4gIFNldAoJU0hGX0FMTE9DLCBTSEZfV1JJVEUsIFNIRl9FWEVDSU5TVFIgd2hlbiBhcHByb3ByaWF0ZS4KCShlbGZfZmFrZV9zZWN0aW9ucyk6IEJTUyBzZWN0aW9uIHNob3VsZCBiZSBTSFRfTk9CSVRTLCBub3QKCVNIVF9QUk9HQklUUy4gIEFsd2F5cyBnZW5lcmF0ZSBzeW10YWIgYW5kIHN0cnRhYiwgbm90IG9ubHkgaWYKCXJlbG9jYXRpb25zIGFyZSBuZWVkZWQuICBTZXQgU0hGXyogZmxhZ3MgYXMgYXBwcm9wcmlhdGUuCgkoZWxmX2NvbXB1dGVfc2VjdGlvbl9maWxlX3Bvc2l0aW9ucyk6IEhhbmRsZSBiZmRfYXJjaF9ocHBhLgoJKGVsZl93cml0ZV9vYmplY3RfY29udGVudHMpOiBGaXggb2ZmLWJ5LW9uZSBlcnJvciBpbiBzeW1ib2wgY291bnQuCglTdG9yZSBhIGNvcnJlY3QgdmFsdWUgZm9yIHRoZSBzeW1ib2w7IHdyaXRlIHRoZSBzaXplIGZpZWxkCglwcm9wZXJseTsgbWFrZSBzb21lIGd1ZXNzZXMgYWJvdXQgdGhlIHR5cGUgZmllbGQuICBTZXQgc2VjdGlvbgoJdHlwZSBjb3JyZWN0bHkgZm9yIHN0cmluZyB0YWJsZXMuCgkoc2VjdGlvbl9mcm9tX2VsZl9pbmRleCk6IENoZWNrIGZvciBhYnNvbHV0ZSBhbmQgY29tbW9uIHNlY3Rpb25zCglmaXJzdC4KCShlbGZfc2VjdGlvbl9mcm9tX2JmZF9zZWN0aW9uKTogRGl0dG8uCgkoZWxmX3NsdXJwX3N5bWJvbF90YWJsZSk6IFVzZSBlbGZfc3ltYm9sX3R5cGUgaW5zdGVhZCBvZiBhc3ltYm9sLgoJVXNlIGVtcHR5IHN0cmluZyBpbnN0ZWFkIG9mICJ1bm5hbWVkIiBmb3IgbmFtZWxlc3Mgc3ltYm9scy4KCUhhbmRsZSBTVFRZX0ZVTkMgdHlwZSwgYW5kIHdlaXJkbmVzcyB3aXRoICIkZ2xvYmFsJCIgc3ltYm9sIGZvcgoJSFBQQSAob25seT8pLiAgRG9uJ3QgZnJlZSByYXcgc3ltYm9sczsga2VlcCB0aGUgcG9pbnRlciBhcm91bmQgZm9yCglsYXRlci4KCShlbGZfc2V0X2FyY2hfbWFjaCk6IEhhbmRsZSBiZmRfYXJjaF9ocHBhLgoJKGVsZl9maW5kX25lYXJlc3RfbGluZSk6IEp1c3QgcmV0dXJuIGZhbHNlLgoJKGVsZl93cml0ZV9vYmplY3RfY29udGVudHMsIGVsZl9zZXRfc2VjdGlvbl9jb250ZW50cyk6IFNldAoJb3V0cHV0X2hhc19iZWd1biBmaWVsZCBhZnRlciBjb21wdXRpbmcgZmlsZSBwb3NpdGlvbnMuCgkoZWxmX3NldF9zZWN0aW9uX2NvbnRlbnRzKTogV3JpdGUgc2VjdGlvbiBjb250ZW50cyBpbW1lZGlhdGVseSwKCXJhdGhlciB0aGFuIGNhY2hpbmcgdGhlIHdob2xlIGZpbGUgYW5kIHdyaXRpbmcgaXQgYXQgY2xvc2UgdGltZS4KCgkqIGxpYmhwcGEuaCAoZW51bSBocHBhX3JlbG9jX2ZpZWxkX3NlbGVjdG9yX3R5cGUsIGVudW0KCWhwcGFfcmVsb2NfZmllbGRfc2VsZWN0b3JfdHlwX2FsdCwgZW51bSBocHBhX3JlbG9jX2V4cHJfdHlwZSwgZW51bQoJaHBwYV9yZWxvY19leHByX3R5cGVfYWx0KTogTmV3IGVudW1lcmF0b3IgdHlwZXMuCgoJKiBjb25maWcvaHBwYS1lbGYubXQsLiBjb25maWcvaHBwYW9zZi5taDogSFAgUEEvT1NGIHN1cHBvcnQuCgkqIGNvbmZpZ3VyZS5pbiwgY29uZmlndXJlLmhvc3Q6IFVzZSB0aGVtLgoKV2VkIEFwciAyOCAyMzoyMTowMSAxOTkzICBLZW4gUmFlYnVybiAgKHJhZWJ1cm5AY2FtYnJpZGdlLmN5Z251cy5jb20pCgoJKiBlbGYzMi10YXJnZXQuaDogQWxsb3cgb3ZlcnJpZGVzIG9mIGFybWFwIGRlZmF1bHRzLgoKCSogZWxmMzItaHBwYS5jLCBlbGYzMi1ocHBhLmg6IE5ldyBmaWxlcy4KCgkqIGNvbmZpZy9ocDMwMGhwdXgubXQ6IE5ldyBmaWxlLgoKVHVlIEFwciAyNyAwNTozOTo0MCAxOTkzICBLZW4gUmFlYnVybiAgKHJhZWJ1cm5Aa3ItcGMuY3lnbnVzLmNvbSkKCgkqIGFpeDM4Ni1jb3JlLmMgKE5PX0dFVFMpOiBOZXcgbWFjcm87IE5PX0dFVCBmb3Igc2lnbmVkIHZhbHVlcy4KCShhaXgzODZfY29yZV92ZWMpOiBVcGRhdGUgZm9yIG5ldyBmaWVsZHMuCgoJKiBhcmNoaXZlLmMgKGJmZF9nZW5lcmljX2FyY2hpdmVfcCk6IENhbGwgdGFyZ2V0LXNwZWNpZmljCglzbHVycF9hcm1hcCBjb2RlLCBpbnN0ZWFkIG9mIGJmZF9zbHVycF9hcm1hcC4KCShiZmRfc2x1cnBfYnNkX2FybWFwX2YyKTogTmV3IGZ1bmN0aW9uLgoJKiBsaWJiZmQtaW4uaCAoYmZkX3NsdXJwX2JzZF9hcm1hcF9mMik6IERlY2xhcmUgaXQuCgkqIGFvdXQtdGFyZ2V0LmggKEFSX1BBRF9DSEFSKTogRGVmaW5lIGl0IGlmIG5vdCBhbHJlYWR5IGRlZmluZWQuCgkodmVjKTogVXNlIGl0LgoJKiBsaWJhb3V0LmggKHN0cnVjdCBhb3V0ZGF0YSk6IE5ldyBmaWVsZCBmb3Igc3ViZm9ybWF0LCBmb3IKCWRpZmZlcmVudGlhdGluZyBiZXR3ZWVuIGhpZ2hseSBzaW1pbGFyIGEub3V0IGZvcm1hdHMuCgkqIGFvdXR4LmggKE5BTUVfc3dhcF9leGVjX2hlYWRlcl9pbik6IE5ldyBtYWNybywgZGVmYXVsdHMgdG8gbG9jYWwKCXZlcnNpb24gb2YgZnVuY3Rpb24uCgkoc3dhcF9leGVjX2hlYWRlcl9pbik6IERvbid0IGRlZmluZSBpZiBOQU1FX3N3YXBfZXhlY19oZWFkZXJfaW4gaXMKCWFscmVhZHkgZGVmaW5lZC4KCSogaHAzMDBocHV4LmM6IE5ldyBmaWxlLgoJKiBNYWtlZmlsZS5pbjogSW5jbHVkZSBpdC4KCk1vbiBBcHIgMjYgMTM6MjQ6NDMgMTk5MyAgU3RldmUgQ2hhbWJlcmxhaW4gIChzYWNAdGhlcHViLmN5Z251cy5jb20pCgoJKiBNYWtlZmlsZS5pbiwgYXJjaHVyZXMuYywgY29mZmNvZGUuaCwgdGFyZ2V0cy5jOiBTdXBwb3J0IGZvcgoJSGl0YWNoaSBTSC4KCk1vbiBBcHIgMjYgMTM6NTU6NDIgMTk5MyAgSmltIEtpbmdkb24gIChraW5nZG9uQGN5Z251cy5jb20pCgoJKiB0cmFkLWNvcmUuYyAodHJhZF91bml4X2NvcmVfZmlsZV9wKTogQ2hlY2sgdGhlIGZpbGUgc2l6ZS4KCk1vbiBBcHIgMjYgMTM6MjQ6NDMgMTk5MyAgU3RldmUgQ2hhbWJlcmxhaW4gIChzYWNAdGhlcHViLmN5Z251cy5jb20pCgoJKiBjb2ZmLWFscGhhLmM6IFJlbW92ZSBkdXBsaWNhdGUgZnVuY3Rpb24gYW5kIGFkZCB3YXJuaW5ncy4KCk1vbiBBcHIgMjYgMTE6MjU6NTggMTk5MyAgSWFuIExhbmNlIFRheWxvciAgKGlhbkBjeWdudXMuY29tKQoKCSogc2NvLWNvcmUuYyAoc2NvX2NvcmVfdmVjKTogQWRkIGluaXRpYWxpemVycyBmb3IgbmV3IHRhcmdldAoJZmllbGRzLgoKU2F0IEFwciAyNCAyMTozMzo0NSAxOTkzICBKaW0gS2luZ2RvbiAgKGtpbmdkb25AY3lnbnVzLmNvbSkKCgkqIGNvZmZjb2RlLmggW19MSVRdOiBSZWNvZ25pemUgLmxpdCBzZWN0aW9uLgoKRnJpIEFwciAyMyAxOTowMDozNiAxOTkzICBTdGV2ZSBDaGFtYmVybGFpbiAgKHNhY0B0aGVwdWIuY3lnbnVzLmNvbSkKCgkqIGNvZmYtYWxwaGEuYywgY3B1LWFscGhhLmMsIGNvbmZpZy9hbHBoYW9zZi5tdCwKCWNvbmZpZy9hbHBoYW9zZi5tdCwgaG9zdHMvYWxwaGFvc2YuaDogIE5ldyBmaWxlcy4KCkZyaSBBcHIgMjMgMTY6NDg6NDYgMTk5MyAgU3R1IEdyb3NzbWFuICAoZ3Jvc3NtYW5AY3lnbnVzLmNvbSkKCgkqIE1lcmdlIGluIEhQUEEvQlNEIGNoYW5nZXMgZnJvbSBVdGFoLgoJKiBocHBhLmM6ICBVc2UgdGhpcyBmb3IgYm90aCBIUFVYICYgQlNELgoJKiB0YXJnZXRzLmM6ICBFbmFibGUgaHBwYV92ZWMgZm9yIGJvdGggSFBVWCAmIEJTRC4KCSogY29uZmlnL2hwcGFic2QubXQ6ICBUREVGSU5FUyA9PiBUREVGQVVMVFMuCgkqIGhvc3RzL2hwcGFic2QuaDogICNkZWZpbmUgSE9TVF9IUFBBQlNELgoKV2VkIEFwciAyMSAwMTo1MDoxMCAxOTkzICBKb2huIEdpbG1vcmUgIChnbnVAY3lnbnVzLmNvbSkKCgkqIGxpYmJmZC5jOiAgV2hpdGVzcGFjZSBjaGFuZ2VzIGFyb3VuZCBieXRlc3dhcCBtYWNyb3MuCgkqIGxpYmJmZC1pbi5oOiAgV2hpdGVzcGFjZSBjaGFuZ2VzIGFyb3VuZCBieXRlc3dhcCBkZWNsYXJhdGlvbnMuCgpUdWUgQXByIDIwIDE1OjU5OjA3IDE5OTMgIFN0dSBHcm9zc21hbiAgKGdyb3NzbWFuQGN5Z251cy5jb20pCgoJKiBhb3V0ZjEuaCAoc3Vub3M0X2NvcmVfZmlsZV9wKTogIERvbid0IGRlZmF1bHQgYmZkX2Vycm9yIHRvCglzeXN0ZW1fZXJyb3IgYW55bW9yZS4gIEl0IGNvbmZ1c2VzIGJmZF9jaGVja19mb3JtYXQoKS4KCk1vbiBBcHIgMTkgMjM6MDM6MDggMTk5MyAgU3R1IEdyb3NzbWFuICAoZ3Jvc3NtYW5AY3lnbnVzLmNvbSkKCgkqIGJmZC5jOiAgQWRkIHNnaV9jb3JlX2RhdGEgdG8gdGRhdGEgdW5pb24uCgkqIGNvZmYtbWlwcy5jOiAgQWRkIElyaXggNC54IGNvcmUgZmlsZSBzdXBwb3J0LgoJKiBob3N0cy9pcml4NC5oOiAgI2RlZmluZSBIT1NUX0lSSVg0LgoKTW9uIEFwciAxOSAxODo1Mjo1MiAxOTkzICBLZW4gUmFlYnVybiAgKHJhZWJ1cm5AZGVuZWIuY3lnbnVzLmNvbSkKCgkqIGFvdXR4LmggKHRyYW5zbGF0ZV9mcm9tX25hdGl2ZV9zeW1fZmxhZ3MpOiBDaGVjayB0aGF0IHRoZQoJc3ltYm9sJ3Mgc2VjdGlvbiBkb2VzIGdldCBzZXQuCgkoc2x1cnBfc3ltYm9sX3RhYmxlKTogWmVybyBpbmRleCBtZWFucyBudWxsLXN0cmluZyBuYW1lLgoKCSogYW91dHguaCAoc3RydWN0IHN0cmluZ3RhYl9lbnRyeSwgc3RydWN0IHN0cmluZ3RhYl9kYXRhKTogTmV3CglkYXRhIHN0cnVjdHVyZXMuCgkoaGFzaCwgc3RyaW5ndGFiX2luaXQsIGFkZF90b19zdHJpbmd0YWIsIGVtaXRfc3RydGFiLCBjb21wYXJlKToKCU5ldyBmdW5jdGlvbnMuCgkod3JpdGVfc3ltcyk6IFVzZSB0aGVtLCB0byByZWR1Y2Ugc3RyaW5nIHRhYmxlIHNpemUuCgpNb24gQXByIDE5IDE2OjQ1OjEyIDE5OTMgIEZyZWQgRmlzaCAgKGZuZkBjeWdudXMuY29tKQoKCSogdHJhZC1jb3JlLmMgKHRyYWRfY29yZV92ZWMpOiAgQWRkIDYgbmV3IGluaXRpYWxpemVycyB0byBtYXRjaAoJICBuZXcgc2lnbmVkIGdldC9wdXQgZmllbGRzLiAgTWlub3IgcmVmb3JtYXR0aW5nIHRvIGxhYmVsCgkgIHNvbWUgZmllbGRzLgoKTW9uIEFwciAxOSAwNjowOTo0MSAxOTkzICBKaW0gS2luZ2RvbiAgKGtpbmdkb25AY3lnbnVzLmNvbSkKCgkqIGJmZC1pbi5oOiBJbnNlcnQgY29tbWVudCBhYm91dCBTVlIzIGNvbXBpbGVyIHdhcm5pbmdzLgoKCSogaG9zdHMve2hwMzAwLGkzODZpc2MsaTM4NnZ9Lmg6IFJlbW92ZSB1bnVzZWQgI2RlZmluZXMgb2Yge3IsfWluZGV4CgkoYmZkIHVzZXMgc3RyY2hyIGFuZCB0aGUgYnJva2VuIFNWUjMuMiBjcHAgbG9zZXMgd2l0aCB0aGUgZGVmaW5lcykuCgoJKiBsaWJiZmQuYzogYmZkX3B1dCo6IFJlbW92ZSBjYXN0cyB0byBiZmRfdm1hLgoKRnJpIEFwciAxNiAxNzo0OToyNyAxOTkzICBKaW0gS2luZ2RvbiAgKGtpbmdkb25AY3lnbnVzLmNvbSkKCgkqIGFvdXRmMS5oIChpbnRlcm5hbF9zdW5vc19jb3JlKTogTWFrZSBjX3N0YWNrdG9wIGEgYmZkX3ZtYS4KCShzd2FwY29yZV9zcGFyYyk6IE1ha2Ugc3AgYSBiZmRfdm1hLgoKVGh1IEFwciAxNSAwOTowOToxOCAxOTkzICBKaW0gS2luZ2RvbiAgKGtpbmdkb25AY3lnbnVzLmNvbSkKCgkqIGxpYmJmZC5jOiBBZGQgc2lnbmVkIHZlcnNpb25zIG9mIGJmZF97aF8sfXtnZXQscHV0fV9zaWduZWRfPHNpemU+LgoJbGliYmZkLmMsIGxpYmJmZC1pbi5oOiBBZGQgX2RvKnNpZ25lZCouCgl0YXJnZXRzLmMsIGFsbCB0YXJnZXRzOiBBZGQgYmZkKnNpZ25lZCouCgliZmQtaW4uaDogQWRkIGJmZF9zaWduZWRfdm1hLiAgQWRkIGNvbW1lbnRzLgoKCSogYmZkLWluLmggKGJmZF9lcnJvciksIGJmZC5jIChiZmRfZXJybXNncyk6IEFkZCBmaWxlX3RydW5jYXRlZC4KCgkqIGZvcm1hdC5jIChiZmRfY2hlY2tfZXJyb3IpOiBDaGVjayBlcnJvciByZXR1cm4gZnJvbQoJX2JmZF9jaGVja19mb3JtYXQgcm91dGluZXMuCgpXZWQgQXByIDE0IDIzOjQ4OjI1IDE5OTMgIEppbSBLaW5nZG9uICAoa2luZ2RvbkBjeWdudXMuY29tKQoKCSogcnM2MDAwLWNvcmUuYyAocnM2MDAwY29mZl9jb3JlX3ApOiBJbXByb3ZlIGVycm9yIGNoZWNraW5nIGFuZAoJcmVjb2duaXplIC5kYXRhIHNlY3Rpb24gaWYgcHJlc2VudC4KClRodSBBcHIgMTUgMDE6MDA6MjkgMTk5MyAgSm9obiBHaWxtb3JlICAoZ251QGN5Z251cy5jb20pCgoJKiBhb3V0eC5oIChhb3V0XypfYWRqdXN0X3NpemVzX2FuZF92bWFzKTogIEF2b2lkIGBzYW5pdHknCgljaGVjayBmb3IgdGhlIGNhc2Ugd2hlcmUgdGhlIHVzZXIgc2V0cyB0aGUgYWRkcmVzcyBvZiB0aGUgQlNTCglzZWN0aW9uIChhbmQgdGhlIGZpbGUgaGVhZGVyIGNhbid0IHNwZWNpZnkgdGhpcykuICBMZXQgdGhlIHVzZXIKCXNldCBpdCB3aGVyZXZlciB0aGV5IHdhbnQsIHJlZ2FyZGxlc3Mgb2Ygd2hhdCBnb2VzIGluIHRoZSBoZWFkZXIuCgoJKiBpZWVlLmMgKGllZWVfc2x1cnBfc2VjdGlvbnMpOiAgUGFzcyBhbGwgaWVlZSBzZWN0aW9uIG5hbWVzCglzdHJhaWdodCB0aHJvdWdoIGludG8gQkZEIHNlY3Rpb25zLiAgQWRkIGNvbW1lbnRzLgoKV2VkIEFwciAxNCAyMDozNDo1NCAxOTkzICBKb2huIEdpbG1vcmUgIChnbnVAY3lnbnVzLmNvbSkKCglDbGVhbnVwIGluIHByZXBhcmF0aW9uIGZvciBiZXR0ZXIgNjQtYml0IGhvc3Qgc3VwcG9ydC4KCgkqIGJmZC1pbi5oIChiZmRfNjRfdHlwZSk6ICBSZW1vdmUuCgkqIGxpYmJmZC5jIChfZG9fZ2V0YjY0LCBfZG9fcHV0YjY0KTogIFVzZSBiZmRfdm1hLCBub3QgYmZkXzY0X3R5cGUuCgoJKiBiZmQtaW4uaCAoYmZkX3NpemUpOiAgUmVtb3ZlLgoKCSogYmZkLWluLmggKGJmZF9vZmZzZXQpOiAgUmVtb3ZlLCBhZnRlciBmaXhpbmcgbGQvbGRsYW5nLltjaF0uCgoJKiBiZmQtaW4uaCAoYmZkX3dvcmQpOiAgUmVtb3ZlLgoJKiByZWxvYy5jIChyZWxvY19ob3d0b190eXBlKTogIFJlcGxhY2UgYmZkX3dvcmQgd2l0aCBiZmRfdm1hLgoKCSogYmZkLWluLmggKHJhd2RhdGFfb2Zmc2V0KTogIFJlbW92ZS4KCSogcmVsb2MuYyAoYXJlbGVudCk6ICBSZXBsYWNlIHJhd2RhdGFfb2Zmc2V0IHdpdGggYmZkX3NpemVfdHlwZS4KCShiZmRfcGVyZm9ybV9yZWxvY2F0aW9uKTogIExpbnQuCgkoZW51bSBiZmRfcmVsb2Nfc3RhdHVzKTogIENvbW1lbnQgY2xlYW51cC4KCgkqIGFvdXQtYWRvYmUuYywgY3B1LWg4MzAwLmMsIG1pcHNic2QuYywgc3JlYy5jOiBsaW50IC1XYWxsLgoKVHVlIEFwciAxMyAxMToxOTo1MiAxOTkzICBKaW0gS2luZ2RvbiAgKGtpbmdkb25AY3lnbnVzLmNvbSkKCgkqIGFvdXRmMS5oIChzd2FwY29yZV9zcGFyYyk6IEd1ZXNzIHRoZSByaWdodCB2YWx1ZSBvZiBVU1JTVEFDSy4KCk1vbiBBcHIgMTIgMTQ6MTg6MDAgMTk5MyAgSm9obiBHaWxtb3JlICAoZ251QGN5Z251cy5jb20pCgoJKiBlbGYzMi5jOiAgQ2xlYW4gdXAgb2xkIGNvbW1lbnRzLgoKRnJpIEFwciAgOSAxMDo0MzoyMCAxOTkzICBJYW4gTGFuY2UgVGF5bG9yICAoaWFuQGN5Z251cy5jb20pCgoJKiBjb25maWcvc3VuMy5oOiBTdHJpbmcgYXJndW1lbnQgdG8gZnByaW50ZiBpcyBjb25zdC4KCgkqIGNvZmYtbWlwcy5jOiBSZW5hbWVkIFBBR0VfU0laRSB0byBST1VORF9TSVpFLCB0byBhdm9pZCBjb25mdXNpb24KCW9uIHN5c3RlbXMgd2hpY2ggZGVmaW5lIFBBR0VfU0laRSBpbiA8bGltaXRzLmg+LgoKVGh1IEFwciAgOCAxMDoyODowMCAxOTkzICBQZXRlciBTY2hhdWVyICAocGVzQHJlZ2VudC5lLXRlY2huaWsudHUtbXVlbmNoZW4uZGUpCgoJKiB0cmFkLWNvcmUuYyAodHJhZF91bml4X2NvcmVfZmlsZV9mYWlsaW5nX3NpZ25hbCk6IFVzZSBuZXcgbWFjcm8KCVRSQURfVU5JWF9DT1JFX0ZJTEVfRkFJTElOR19TSUdOQUwgdG8gYWxsb3cgaG9zdCBmaWxlcyB0byBzcGVjaWZ5Cgl0aGUgY29yZSBmaWxlIGZhaWxpbmcgc2lnbmFsLgoJKiBob3N0cy9kZWNzdGF0aW9uLmggKFRSQURfVU5JWF9DT1JFX0ZJTEVfRkFJTElOR19TSUdOQUwpOiBEZWZpbmUKCXRvIHN1cHBseSB0aGUgY29yZSBmaWxlIGZhaWxpbmcgc2lnbmFsLgoKVGh1IEFwciAgOCAwOToxNzozNSAxOTkzICBJYW4gTGFuY2UgVGF5bG9yICAoaWFuQGN5Z251cy5jb20pCgoJKiBjb2ZmY29kZS5oIChzdHlwX3RvX3NlY19mbGFncyk6IE9ubHkgc2V0IFNFQ19TSEFSRURfTElCUkFSWSBmb3IKCWEgU1RZUF9OT0xPQUQgfCBTVFlQX0JTUyBzZWN0aW9uIGlmIEJTU19OT0xPQURfSVNfU0hBUkVEX0xJQlJBUlkKCWlzIGRlZmluZWQuICBPbiBtYW55IENPRkYgdGFyZ2V0cyBTVFlQX0JTUyBpcyBhbHdheXMgU1RZUF9OT0xPQUQuCgkqIGNvZmYtaTM4Ni5oIChCU1NfTk9MT0FEX0lTX1NIQVJFRF9MSUJSQVJZKTogRGVmaW5lLgoKV2VkIEFwciAgNyAxMTozMzowNiAxOTkzICBJYW4gTGFuY2UgVGF5bG9yICAoaWFuQGN5Z251cy5jb20pCgoJKiBjb2ZmLW1pcHMuYyAoUEFHRVNJWkUpOiBDb3JyZWN0IHZhbHVlLgoKVHVlIEFwciAgNiAxMjowNTo0NCAxOTkzICBJYW4gTGFuY2UgVGF5bG9yICAoaWFuQGN5Z251cy5jb20pCgoJKiBjb2ZmLW1pcHMuYyAoZWNvZmZfZmluZF9uZWFyZXN0X2xpbmUpOiBBZGRyZXNzIG9mIGZpcnN0IFBEUiBpcwoJYW4gb2Zmc2V0IChwYXRjaCBmcm9tIEplYW4tRGFuaWVsIEZla2V0ZSA8amRmQGxyaS5scmkuZnI+KS4KCk1vbiBBcHIgIDUgMTI6MDc6MTIgMTk5MyAgSWFuIExhbmNlIFRheWxvciAgKGlhbkBjeWdudXMuY29tKQoKCSogY29mZmNvZGUuaCAoc3R5cF90b19zZWNfZmxhZ3MpOiBTZXQgU0VDX1NIQVJFRF9MSUJSQVJZIGZvciBhCglTVFlQX05PTE9BRCB8IFNUWVBfQlNTIHNlY3Rpb24uICBEb24ndCBzZXQgU0VDX05FVkVSX0xPQUQgZm9yIGEKCVNUWVBfSU5GTyBzZWN0aW9uLgoJKGNvZmZfY29tcHV0ZV9zZWN0aW9uX2ZpbGVfcG9zaXRpb25zKTogRm9yY2Ugdm1hIGFuZCBsbWEgb2YgX0xJQgoJc2VjdGlvbiB0byBiZSB6ZXJvLgoJKGNvZmZfc2V0X3NlY3Rpb25fY29udGVudHMpOiBDb3VudCBudW1iZXIgb2YgZW50cmllcyBpbiBuZXcgbG1hCglmaWVsZCwgbm90IGluIHZtYS4KCSogY29mZmdlbi5jIChtYWtlX2Ffc2VjdGlvbl9mcm9tX2ZpbGUpOiBGb3JjZSBsaW5lbm9fY291bnQgb2YKCVNFQ19TSEFSRURfTElCUkFSWSBzZWN0aW9uIHRvIGJlIHplcm8sIHNpbmNlIGl0IGlzIG5vbi16ZXJvIG9uIHRoZQoJU0NPIDMuMnY0IHNoYXJlZCBsaWJyYXJ5LgoJKiBzZWNsZXQuYyAocmVsKTogQ29weSBvdmVyIGFueSBzZWN0aW9uIHdpdGggY29udGVudHMsIG5vdCBqdXN0Cglsb2FkYWJsZSBzZWN0aW9ucy4KCgkqIGNvZmYtbWlwcy5jIChlY29mZl9tYWtlX2VtcHR5X3N5bWJvbCk6IFplcm8gb3V0IG5ld2x5IGFsbG9jYXRlZAoJc3ltYm9sLgoKCSogY29mZi1pMzg2LmMgKGNvZmZfaTM4Nl9yZWxvYyk6IE5ldyBmdW5jdGlvbiwgdG8gZ2VuZXJhdGUKCXJlbG9jYXRlYWJsZSBvdXRwdXQgY29ycmVjdGx5LgoJKGhvd3RvX3RhYmxlKTogVXNlIGNvZmZfaTM4Nl9yZWxvYyBmb3IgYWxsIHJlbG9jIHR5cGVzLgoJKENBTENfQURERU5EKTogVXNlIGEgbW9yZSBlZmZpY2llbnQgaGFjayB0byBnZXQgdGhlIGNvcnJlY3QgYWRkZW5kCglmb3IgYSBjb21tb24gc3ltYm9sLgoJKGkzODZjb21tX3ZhbHVlKTogUmVtb3ZlZDsgbm8gbG9uZ2VyIG5lZWRlZC4KClN1biBBcHIgIDQgMTU6MDg6NDggMTk5MyAgU3RldmUgQ2hhbWJlcmxhaW4gIChzYWNAdGhlcHViLmN5Z251cy5jb20pCgoJKiBjb2ZmY29kZS5oIChjb2ZmX3NldF9zZWN0aW9uX2NvbnRlbnRzKTogRG9uJ3Qgd3JpdGUgb3V0CglzZWN0aW9ucyB3aXRob3V0IGEgZmlsZXBvcy4KCkZyaSBBcHIgIDIgMTQ6MzU6MDUgMTk5MyAgSWFuIExhbmNlIFRheWxvciAgKGlhbkBjeWdudXMuY29tKQoKCSogc2VjbGV0LmMgKHNlY2xldF9kdW1wX3NlY2xldCk6IENvcnJlY3QgU0VDX0hBU19DT05URU5UUyB0ZXN0LgoKV2VkIE1hciAzMSAxNzo0MTowNSAxOTkzICBJYW4gTGFuY2UgVGF5bG9yICAoaWFuQGN5Z251cy5jb20pCgoJKiByZWxvYy5jIChiZmRfcmVsb2NfY29kZV9yZWFsX3R5cGUpOiBBZGRlZCBCRkRfUkVMT0NfTUlQU19HUFJFTC4KCSogbGliZWNvZmYuaCAoZWNvZmZfZGF0YV90eXBlKTogQWRkZWQgZ3Bfc2l6ZSBmaWVsZC4KCSogY29mZi1taXBzLmMgKGVjb2ZmX21rb2JqZWN0X2hvb2spOiBJbml0aWFsaXplIGdwX3NpemUgdG8gOC4KCShlY29mZl9zZXRfc3ltYm9sX2luZm8pOiBDb21wYXJlIGFnYWluc3QgZ3Bfc2l6ZSwgbm90IGhhcmRjb2RlZCA4LgoJU2V0IGZsYWdzIHRvIDAgZm9yIGxhcmdlIGNvbW1vbiBzeW1ib2xzLgoJKGVjb2ZmX2dwcmVsX3JlbG9jKTogSGFuZGxlIG5vbi16ZXJvIGFkZGVuZCBmb3IgZXh0ZXJuYWwgc3ltYm9scywKCXdoaWNoIGNhbiBvY2N1ciBmb3IgZ2FzLWdlbmVyYXRlZCByZWxvY3MuCgkoZWNvZmZfYmZkX3JlbG9jX3R5cGVfbG9va3VwKTogQWRkZWQgQkZEX1JFTE9DX01JUFNfR1BSRUwgY2FzZS4KCSogYmZkLmMgKGJmZF9nZXRfZ3Bfc2l6ZSwgYmZkX3NldF9ncF9zaXplKTogTmV3IGZ1bmN0aW9ucy4KCSogTWFrZWZpbGUuaW4gKGJmZC5vKTogTm93IGRlcGVuZHMgb24gY29mZi9zeW0uaCBhbmQgbGliZWNvZmYuaC4KClR1ZSBNYXIgMzAgMDk6MzM6MTYgMTk5MyAgU3RldmUgQ2hhbWJlcmxhaW4gIChzYWNAdGhlcHViLmN5Z251cy5jb20pCgoJKiBzcmVjLmMgKHNyZWNfc2V0X3NlY3Rpb25fY29udGVudHMpOiBVc2UgbG1hIGZpZWxkIGZvciBsb2FkCglhZGRyZXNzLgoJKiBzZWN0aW9uLmM6IEFkZCBkZWNsYXJhdGlvbiBvZiBsbWEgZmllbGQgdG8gc2VjdGlvbiBzdHJ1Y3R1cmUuCgkqIGNvZmZjb2RlLmggKGNvZmZfd3JpdGVfb2JqZWN0X2NvbnRlbnRzKTogVXNlIGxtYSBmaWVsZCBmb3IgbG9hZAoJYWRkcmVzcy4KCSogYmZkLWluLmggKGJmZF9zZXRfc2VjdGlvbl92bWEpOiBTZXQgbG1hIGFsb25nIHdpdGggdm1hLgoKCSogYW91dHguaCAodHJhbnNsYXRlX2Zyb21fbmF0aXZlX3N5bV9mbGFncyk6IE5vdyBoYW5kbGVzIGluZGlyZWN0CglzeW1ib2xzIGluIGEgYmV0dGVyIHdheS4gKHRyYW5zbGF0ZV90b19uYXRpdmVfc3ltX2ZsYWcpOiBTZXQgdGhlCglOX0lORFIgYml0IHdoZW4gbmVjZXNzYXJ5LiAoYW91dDw+c2x1cnBfc3ltYm9sX3RhYmxlKTogTWFpbnRhaW4KCWluZGlyZWN0IHN0YXRlLgoJKiBzZWN0aW9uLmM6IEFkZGVkIEJGRF9JTkRfU0VDVElPTl9OQU1FIGFuZCBiZmRfaW5kX3NlY3Rpb24uCgkoYmZkX21ha2Vfc2VjdGlvbik6IENvcGUgd2l0aCBuZXcgYnVpbHRpbiBzZWN0aW9uLgoJKiBzeW1zLmMgKGJmZF9kZWNvZGVfc3ltY2xhc3MpOiBDYW4gbm93IHByaW50IGluZGlyZWN0IHNlY3Rpb24KCWluZm8uCgpXZWQgTWFyIDI0IDEzOjM2OjMzIDE5OTMgIFBlciBCb3RobmVyICAoYm90aG5lckBydGwuY3lnbnVzLmNvbSkKCgkqIGFvdXQtdGFyZ2V0LmggKE1ZKG9iamVjdF9wKSk6ICBGYWlsIGlmIE1BQ0hUWVBFX09LIGlzCglkZWZpbmVkLCBhbmQgeWllbGRzIGZhbHNlLgoJKiBhb3V0LW1pcHNic2QuYywgaTM4NmJzZC5jOiAgRGVmaW5lIE1BQ0hUWVBFX09LIGFwcHJvcHJpYXRlbHkuCgoJKiBhcmNoaXZlLmMgKHNuYXJmX2FyX2hkcik6ICBBZGQgc3VwcG9ydCBmb3IgcmVhZGluZyAob25seSwKCXNvIGZhcikgQlNELTQuNC1zdHlsZSBleHRlbmRlZCBoZWFkZXJzLgoJKiBhcmNoaXZlLmM6ICBTb21lIG1vcmUgY29tbWVudHMuCgpXZWQgTWFyIDI0IDAyOjA1OjEwIDE5OTMgIGRhdmlkIGQgYHpvbycgenVobiAgKHpvbyBhdCBwb3NlaWRvbi5jeWdudXMuY29tKQoKCSogTWFrZWZpbGUuaW46IGZpeCBydWxlIGZvciBkdmkgYW5kIGluZm8sIHNvIHRoYXQgdGhlIHJlY3Vyc2l2ZQoJbWFrZXMgZG9lcyB0aGUgcmlnaHQgdGhpbmcsIGluc3RlYWQgb2YgYWx3YXlzIGluZm8KCldlZCBNYXIgMjQgMDI6NTY6NDQgMTk5MyAgS2VuIFJhZWJ1cm4gIChyYWVidXJuQGNhbWJyaWRnZS5jeWdudXMuY29tKQoKCSogbGliYmZkLmMgKGJmZF9zZWVrKTogRGlzYWJsZSBvcHRpbWl6ZWQgaGFuZGxpbmcgZm9yIGFyY2hpdmVzIGFuZAoJYXJjaGl2ZSBtZW1iZXJzOyB0aGV5IG5lZWQgbW9yZSBzcGVjaWFsIHJlYXRtZW50LiAgRm9yIG5vdywgdmVyaWZ5Cgl0aGF0IGNvbXB1dGVkIGFuZCBhY3R1YWwgZmlsZSBwb3NpdGlvbnMgY29ycmVzcG9uZC4KClR1ZSBNYXIgMjMgMDg6NDU6MzMgMTk5MyAgS2VuIFJhZWJ1cm4gIChyYWVidXJuQGNhbWJyaWRnZS5jeWdudXMuY29tKQoKCSogbWlwc2JzZC5jOiBSZW5hbWVkIGZyb20gYW91dC1taXBzYnNkLmMuCgkoc2V0X2FyY2hfbWFjaCk6IERlbGV0ZSBub24tTUlQUyBjb2RlLgoJKHJlbG9jX2hvd3RvX3R5cGVfbG9va3VwKTogRGl0dG8uCgkqIE1ha2VmaWxlLmluOiBBZGp1c3RlZC4KCgkqIGxpYmJmZC5jIChiZmRfdGVsbCk6IFVwZGF0ZSBgd2hlcmUnIGZpZWxkLgoJKGJmZF9zZWVrKTogRG9uJ3QgZG8gYW55dGhpbmcgaWYgd2UncmUgbm90IGNoYW5naW5nIHRoZSBmaWxlCglwb3NpdGlvbi4gIElmIEZJTEVfT0ZGU0VUX0lTX0NIQVJfSU5ERVggaXMgZGVmaW5lZCwgY2hlY2sgYHdoZXJlJwoJZmllbGQgYWdhaW5zdCBhIFNFRUtfU0VUIHJlcXVlc3QuICBDYWxsIGJmZF90ZWxsIHRvIHJlLXVwZGF0ZQoJYHdoZXJlJyBmaWVsZCB3aGVuIGRvbmUuCgkoYmZkX3JlYWQsIGJmZF93cml0ZSkgW0ZJTEVfT0ZGU0VUX0lTX0NIQVJfSU5ERVhdOiBNYWludGFpbgoJYHdoZXJlJyBmaWVsZC4KCSogaG9zdHMvc3BhcmMuaDogRGVmaW5lIEZJTEVfT0ZGU0VUX0lTX0NIQVJfSU5ERVguCgpNb24gTWFyIDIyIDIzOjE4OjEwIDE5OTMgIGRhdmlkIGQgYHpvbycgenVobiAgKHpvbyBhdCBjaXJkYW4uY3lnbnVzLmNvbSkKCgkqIE1ha2VmaWxlLmluOiBhZGRlZCBpbnN0YWxsY2hlY2sgdGFyZ2V0CgpNb24gTWFyIDIyIDE0OjU3OjE4IDE5OTMgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AY3lnbnVzLmNvbSkKCgkqIGNvZmYtbWlwcy5jIChlY29mZl9zZXRfc3ltYm9sX2luZm8pOiBSZWxvY2F0ZSBlbmNhcHN1bGF0ZWQgc3RhYnMKCWlmIHRoZSB0eXBlIGlzIG5vdCBzdE5pbC4KClR1ZSBNYXIgMTYgMTA6MzU6MjcgMTk5MyAgS2VuIFJhZWJ1cm4gIChyYWVidXJuQGN5Z251cy5jb20pCgoJKiBlbGYzMi5jIChlbGZfbGl0dGxlX3ZlYywgZWxmX2JpZ192ZWMpOiBEZWxldGUgbm93LWludmFsaWQKCWZvcndhcmQgZGVjbGFyYXRpb25zLgoKCSogZWxmMzItc3BhcmMuYyAoZWxmX3NwYXJjX2hvd3RvX3RhYmxlKTogRG9uJ3QgdXNlIENPTlNUIGhlcmUsCglpdCdzIGltcGxpZWQgYnkgdGhlIHR5cGUuCgpGcmkgTWFyIDEyIDE4OjU4OjA4IDE5OTMgIGRhdmlkIGQgYHpvbycgenVobiAgKHpvbyBhdCBjaXJkYW4uY3lnbnVzLmNvbSkKCgkqIGNvbmZpZ3VyZS5ob3N0OiByZWNvZ25pemUgc3BhcmMtc3VuLXNvbGFyaXMyKiBpbnN0ZWFkIG9mIHNwYXJjLXN1bi1zb2xhcmlzKgoKVHVlIE1hciAgOSAwOToyMzoxMiAxOTkzICBKaW0gS2luZ2RvbiAgKGtpbmdkb25AY3lnbnVzLmNvbSkKCgkqIHJzNjAwMC1jb3JlLmM6IEFkZCAubGRpbmZvIHNlY3Rpb24uCgpGcmkgTWFyIDEyIDExOjU3OjUyIDE5OTMgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AY3lnbnVzLmNvbSkKCgkqIE1ha2VmaWxlLmluIChNQUtFT1ZFUlJJREVTKTogRGVmaW5lIHRvIGJlIGVtcHR5LgoKRnJpIE1hciAxMiAwODozMjoxMSAxOTkzICBTdGV2ZSBDaGFtYmVybGFpbiAgKHNhY0B0aGVwdWIuY3lnbnVzLmNvbSkKCgkqIHNlY3Rpb24uYyAoYmZkX3NldF9zZWN0aW9uX2NvbnRlbnRzKTogd2hpdGVzcGFjZQoJKiBzZWNsZXQuYyAoc2VjbGV0X2R1bXBfc2VjbGV0KTogRG9uJ3QgdHJ5IGFuZCBmaWxsIHNlY3Rpb25zIHdpdGgKCW5vIGNvbnRlbnRzLgoKVGh1IE1hciAxMSAxOToyNjoxNSAxOTkzICBkYXZpZCBkIGB6b28nIHp1aG4gICh6b28gYXQgY2lyZGFuLmN5Z251cy5jb20pCgoJKiBob3N0cy9nbzMyLmg6IGRvbid0IGRlZmluZSBQT1NJWF9VVElNRQoKVHVlIE1hciAgOSAxMDo1MjowMSAxOTkzICBGcmVkIEZpc2ggIChmbmZAY3lnbnVzLmNvbSkKCgkqIGVsZjMyLmMgKGVsZl9vYmplY3RfcCk6ICBVc2UgRUxGX0FSQ0ggc3RvcmVkIGluIHh2ZWMgdG8gbWF0Y2gKCWFnYWluc3QgbWFjaGluZSBhcmNoaXRlY3R1cmUgc3RvcmVkIGluIHRoZSBFTEYgaGVhZGVyLCB0byByZXNvbHZlCglhbWJpZ3VpdGllcy4KCSogZWxmMzIuYyAoYmZkX3NlY3Rpb25fZnJvbV9zaGRyKTogIEJmZF9tYWtlX3NlY3Rpb24gY2FuIHJldHVybgoJTlVMTCwgc28gb25seSB1c2UgcmVzdWx0cyB3aGVuIG5vbi1OVUxMLgoJKiB0YXJnZXRzLmMgKGVsZjMyX202OGtfdmVjLCBlbGYzMl9pODYwX3ZlYyk6ICBBZGQgZXh0ZXJuIGRlY2xzCglhbmQgYWRkIHRvIHZlY3RvciBvZiB0YXJnZXRzLgoKTW9uIE1hciAgOCAxNToxMzo0NCAxOTkzICBJYW4gTGFuY2UgVGF5bG9yICAoaWFuQGN5Z251cy5jb20pCgoJKiBjb2ZmLW1pcHMuYyAoZWNvZmZfc2V0X3N5bWJvbF9pbmZvKTogRW5jYXBzdWxhdGVkIFNUQUJTIHN5bWJvbHMKCWFyZSBhbHdheXMganVzdCBkZWJ1Z2dpbmcgc3ltYm9scy4KCgkqIGNvZmYtbWlwcy5jIChlY29mZl9bZ3NdZXRfc3ltX2luZGV4KTogTW92ZWQgbWFjcm9zIGZyb20gaGVyZS4uLgoJbGliZWNvZmYuaCAoZWNvZmZfW2dzXWV0X3N5bV9pbmRleCk6IC4uLnRvIGhlcmUuCgpNb24gTWFyICA4IDE0OjU1OjEzIDE5OTMgIEtlbiBSYWVidXJuICAocmFlYnVybkBjYW1icmlkZ2UuY3lnbnVzLmNvbSkKCgkqIGhwcGEuYyAoX1BBX1JJU0NfSUQpOiBEZWZpbmVkIGlmIG5vdCBhbHJlYWR5IGRlZmluZWQgKGUuZy4sIGZvcgoJaHB1eCA3KS4gIFBhdGNoIGZyb20gZnJpZWRtYW5AZ251LmFpLm1pdC5lZHUuCgkoaHBwYV9vYmplY3RfcCk6IE9ubHkgY2hlY2sgZm9yIERMX01BR0lDIGFuZCBTSExfTUFHSUMgaWYgdGhleSdyZQoJZGVmaW5lZCwgd2hpY2ggdGhleSBhcmVuJ3QgaW4gaHB1eCA3LjAuCgoJKiBhaXgzODYtY29yZS5jOiBJbmNsdWRlIHVpbmZvLmggYW5kIGNvcmVkdW1wLmguICBQYXRjaCBmcm9tIE1pbmgKCVRyYW4tTGUsIHRyYW5sZUBpbnRlbGxpY29ycC5jb20uCgpGcmkgTWFyICA1IDE0OjU0OjIxIDE5OTMgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AY3lnbnVzLmNvbSkKCgkqIGNvZmYtbWlwcy5jIChlY29mZl9nZW5lcmljX3JlbG9jKTogSWYgdGhlIGFkZGVuZCBpcyBub24temVybywgZ28KCWFoZWFkIGFuZCBkbyB0aGUgcmVsb2NhdGlvbi4KCShlY29mZl9yZWZoaV9yZWxvYyk6IERvbid0IHRvIHRoZSByZWxvY2F0aW9uIGhlcmUsIGp1c3QgcmVtZW1iZXIKCXdoYXQgbmVlZHMgdG8gYmUgZG9uZS4KCShlY29mZl9yZWZsb19yZWxvYyk6IERvIHRoZSBSRUZISSByZWxvY2F0aW9uIGhlcmUuCgpUaHUgTWFyICA0IDE0OjQ0OjAxIDE5OTMgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AY3lnbnVzLmNvbSkKCgkqIGNvZmYtbWlwcy5jIChlY29mZl9iZmRfcmVsb2NfdHlwZV9sb29rdXApOiBOZXcgZnVuY3Rpb24uCgkoZWNvZmZfd3JpdGVfb2JqZWN0X2NvbnRlbnRzKTogQWRkZWQgQkZEX0FTU0VSVCBjYWxscyB0byBlbnN1cmUKCXJlbG9jcyBhcmUgcmVhc29uYWJsZS4KCSogY29mZi1tc3ltLmM6IEVsaW1pbmF0ZWQgdXNlcyBvZiBERUZVTi4KCShlY29mZl9zd2FwX3Rpcl9vdXQpOiBOZXcgZnVuY3Rpb24uCgpUdWUgTWFyICAyIDE3OjUyOjU4IDE5OTMgIEZyZWQgRmlzaCAgKGZuZkBjeWdudXMuY29tKQoKCShVbHRyaXggMi4yIHN1cHBvcnQgZnJvbSBNaWNoYWVsIFJlbmRlbGwgPG1pY2hhZWxAbWVyY3VyeS5jcy5tdW4uY2E+KQoJKiBjb25maWd1cmUuaG9zdCAodmF4LSotdWx0cml4MiopOiAgQWRkIHRyaXBsZXQuCgkqIGhvc3RzL3ZheHVsdDIuaDogIE5ldyBmaWxlLgoJKiBjb25maWcvdmF4dWx0Mi5taDogIE5ldyBmaWxlLgoKCSogYW91dHguaCAoc3RyaW5nLmgpOiAgSW5jbHVkZSBmb3Igc3RyY2hyIGFuZCBmcmllbmRzLgoJKiBhcmNoaXZlLmMgKHN0cmluZy5oKTogIEluY2x1ZGUgZm9yIG1lbWNociBhbmQgZnJpZW5kcy4KCSogZWxmMzIuYyAoc3RyaW5nLmgpOiAgSW5jbHVkZSBmb3Igc3RycmNociBhbmQgZnJpZW5kcy4KClNhdCBGZWIgMjcgMDA6NDQ6MjQgMTk5MyAgS2VuIFJhZWJ1cm4gIChyYWVidXJuQGNhbWJyaWRnZS5jeWdudXMuY29tKQoKCSogYW91dGYxLmMgKHN1bm9zNF9yZWxvY190eXBlX2xvb2t1cCk6IFVudXNlZDsgZGVsZXRlZC4KCShNWV9zZXRfc2l6ZXMpOiBVc2Ugc3Vub3M0X3NldF9zaXplcy4KCgkqIGVsZjMyLmM6IFJlbmFtZWQgZnJvbSBlbGYuYy4gIFNldmVyYWwgQ1BVLXNwZWNpZmljIGZ1bmN0aW9ucwoJZGVsZXRlZCwgYXMgd2VsbCBhcyBlbGYtYmlnIGFuZCBlbGYtbGl0dGxlIHRhcmdldHMuCgkqIGxpYmVsZi5oOiBOZXcgZmlsZS4KCSogZWxmMzItc3BhcmMuYywgZWxmMzItaTM4Ni5jLCBlbGYzMi1pODYwLmMsIGVsZjMyLW02OGsuYzogTmV3CglmaWxlcywgbmV3IHRhcmdldHMuCgkqIE1ha2VmaWxlLmluLCBjb25maWcvKi1lbGYubXQsIHRhcmdldHMuYzogQWRqdXN0ZWQuCgoJKiBpMzg2bGludXguYyAoVEFSR0VUTkFNRSk6IFVzZSBoeXBoZW5zIGluc3RlYWQgb2YgcGFyZW50aGVzZXMuCgoJKiBjb2ZmY29kZS5oIChjb2ZmX2NvbXB1dGVfc2VjdGlvbl9maWxlX3Bvc2l0aW9ucyk6IERvbid0IG5lZWQKCXZhcmlhYmxlICJvbGRfc29mYXIiIGlmIGNvbXBpbGluZyBmb3IgaTk2MC4KCgkqIHJlbG9jLmMgKGJmZF9kZWZhdWx0X3JlbG9jX3R5cGVfbG9va3VwKTogRmlyc3QgYXJndW1lbnQgaXMgbm93IGEKCWJmZCBwb2ludGVyLgoJKiBsaWJiZmQuaDogVXBkYXRlZC4KCgkqIGllZWUuYyAoZXh0ZW4sIGVudmkpOiAic3RhdGljIiBiZWxvbmdzIGZpcnN0IGluIGRlY2xhcmF0aW9uLgoKRnJpIEZlYiAyNiAxNzozNzozNCAxOTkzICBTdGV2ZSBDaGFtYmVybGFpbiAgKHNhY0B0aGVwdWIuY3lnbnVzLmNvbSkKCgkqIHNyZWMuYzogYWRkIHN1cHBvcnQgZm9yIHN5bWJvbHNyZWMsIHNyZWNvcmRzIHdpdGggc3ltYm9scyBpbgoJdGhlbS4KClRodSBGZWIgMjUgMTE6NDM6MzAgMTk5MyAgSm9obiBHaWxtb3JlICAoZ251QGNhY29waG9ueS5jeWdudXMuY29tKQoKCSogaWVlZS5jOiAgY2FzdCBhbGwgYXJndW1lbnRzIG9mIGllZWVfd3JpdGVfYnl0ZSB0byBiZmRfYnl0ZQoJdG8gYXZvaWQgbGludCBjb21wbGFpbnRzLgoKVGh1IEZlYiAyNSAwMjoxNTo1MiAxOTkzICBLZW4gUmFlYnVybiAgKHJhZWJ1cm5AY2FtYnJpZGdlLmN5Z251cy5jb20pCgoJKiBlbGYuYyAoZWxmX3dyaXRlX29iamVjdF9jb250ZW50cyk6IFNlY3Rpb24gIi5zaHN0cnRhYiIgc2hvdWxkIGJlCgl0eXBlIFNIVF9TVFJUQUIuICBEb24ndCBhbHRlciBmaWxlIG9mZnNldCBmb3Igc2VjdGlvbiAwLgoJKHJlbG9jX3R5cGVfbmFtZXMpOiBOb3cgYW4gYXJyYXkgaW5zdGVhZCBvZiBhIG1hY3JvLiAgU3RpbGwgaW5zaWRlCgkiI2lmIDAiLCBzaW5jZSBpdCdzIHVzZWQgb25seSBpbiBkZWJ1Z2dpbmcgY29kZSBhbHNvIGluICIjaWYgMCIuCgkoc3RydWN0IGVsZl9yZWxvY19tYXBfZWx0LCBzdHJ1Y3QgZWxmX3JlbG9jX21hcCk6IE5ldyB0eXBlcy4KCShzb3J0X3JlbG9jX21hcCk6IE5ldyBmdW5jdGlvbi4KCShzcGFyY19yZWxvY19tYXApOiBOZXcgdmFyaWFibGUuCgkoZWxmX2JmZF9yZWxvY190eXBlX2xvb2t1cCk6IE5ldyBmdW5jdGlvbi4KClR1ZSBGZWIgMjMgMTI6MTc6MTYgMTk5MyAgSWFuIExhbmNlIFRheWxvciAgKGlhbkBjeWdudXMuY29tKQoKCSogYmZkLWluLmggKEpVTVBfVEFCTEUpOiBBZGRlZCBiZmRfcmVsb2NfdHlwZV9sb29rdXAgYW5kCgliZmRfbWFrZV9kZWJ1Z19zeW1ib2w7IHRoZXkgd2VyZSBhbHJlYWR5IGluIHRoZSB0YXJnZXQgc3RydWN0dXJlLgoJKiBBZGp1c3RlZCBhbGwgdXNlcyBvZiBKVU1QX1RBQkxFLgoJKiBjb2ZmZ2VuLmMsIGxpYmNvZmYtaW4uaCAoY29mZl9iZmRfbWFrZV9kZWJ1Z19zeW1ib2wpOiBSZW5hbWVkCglmcm9tIGNvZmZfbWFrZV9kZWJ1Z19zeW1ib2wuCgkqIGxpYmNvZmYuaDogVXBkYXRlZCBhY2NvcmRpbmdseS4KCgkqIE1pbm9yIGNsZWFudXBzIHByb3Zva2VkIGJ5IGdjYyB3YXJuaW5nczoKCSogYW91dHguaCAoTkFNRShhb3V0LCByZWxvY190eXBlX2xvb2t1cCkpLAoJY3B1LWg4MzAwLmMgKGxvY2FsX2JmZF9yZWxvY190eXBlX2xvb2t1cCksCgljcHUtejhrLmMgKGxvY2FsX2JmZF9yZWxvY190eXBlX2xvb2t1cCk6IEFkZGVkIGRlZmF1bHQgY2FzZSB0bwoJc3dpdGNoZXMuCgkqIGFyY2hpdmUuYyAoZG9fc2x1cnBfYnNkX2FybWFwLCBkb19zbHVycF9jb2ZmX2FybWFwKSwKCWllZWUuYyAoaWVlZV9zbHVycF9zZWN0aW9uX2RhdGEpLAoJZWxmLmMgKGVsZl9tYWtlX3NlY3Rpb25zLCBlbGZfZmFrZV9zZWN0aW9ucywKCWVsZl9jb21wdXRlX3NlY3Rpb25fZmlsZV9wb3NpdGlvbnMsIGVsZl93cml0ZV9vYmplY3RfY29udGVudHMpOgoJUmVtb3ZlZCB1bnVzZWQgdmFyaWFibGVzLgoJKiBhcmNodXJlcy5jOiBSZW1vdmVkIC8qIGZyb20gd2l0aGluIGNvbW1lbnQuCgkqIGJvdXQuYyAoYl9vdXRfc3F1aXJ0X291dF9yZWxvY3MpOiBJbml0aWFsaXplIHJfZXh0ZXJuLgoJKiBvYXN5cy5jIChvYXN5c193cml0ZV9kYXRhKTogSW5pdGlhbGl6ZSBpLgoKTW9uIEZlYiAyMiAxODo0MDowNiAxOTkzICBQZXIgQm90aG5lciAgKGJvdGhuZXJAcnRsLmN5Z251cy5jb20pCgoJKiBsaWJjb2ZmLmggKG9ial9yYXdfc3ltZW50X2NvdW4pOiAgTmV3IG1hY3JvLgoJKiBjb2ZmZ2VuLmMgKGNvZmZfZ2V0X25vcm1hbGl6ZWRfc3ltdGFiKTogIEluaXRpYWxpemUKCXJhd19zeW1lbnRfY291bnQuCgkqIGNvZmZnZW4uYyAoY29mZl9maW5kX25lYXJlc3RfbGluZSk6ICBOdW1lcm91cyBsaXR0bGUgZml4ZXMuCgpNb24gRmViIDIyIDE1OjAzOjA3IDE5OTMgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AY3lnbnVzLmNvbSkKCgkqIGNvZmYtbWlwcy5jIChlY29mZl9zZXRfc3ltYm9sX2luZm8pOiBzdEJsb2NrIHN5bWJvbHMgYXJlIGFsd2F5cwoJZGVidWdnaW5nIHN5bWJvbHMuCgkoZWNvZmZfZ2V0X2RlYnVnKTogT2Zmc2V0IHRoZSBmZHIgYWRyIGJ5IHRoZSBhZHIgb2YgdGhlIGZpcnN0IHBkciwKCWZvciBjb21wYXRpYmlsaXR5IHdpdGggdG9vbHMgZnJvbSBNSVBTLgoKCSogY29uZmlnL2JpZ21pcHMubXQ6IE5ldyBmaWxlOyBkZWZhdWx0IHZlY3RvciBpcyBlY29mZl9iaWdfdmVjLgoJKiBjb25maWcvaXJpeDMubXQsIGNvbmZpZy9pcml4NC5tdDogUmVtb3ZlZC4KCSogY29uZmlndXJlLmluIChtaXBzLSotZWNvZmYpOiBOZXcgdGFyZ2V0OyB1c2VzIGJpZ21pcHMubXQuCgkobWlwcy1zZ2ktKiwgbWlwcy1iaWctKik6IFVzZSBiaWdtaXBzIHJhdGhlciB0aGFuIGlyaXgzLgoKV2VkIEZlYiAxNyAyMzo0MDo0MSAxOTkzICBKb2huIEdpbG1vcmUgIChnbnVAY3lnbnVzLmNvbSkKCgkqIGhvc3RzL2hwMzAwYnNkLmg6ICBBZGQgZ3Jvc3MgaGFjayB0byBkZXRlcm1pbmUgd2hldGhlciB3ZQoJYXJlIHJ1bm5pbmcgb24gQlNEIDQuMyBvciBCU0QgNC40LCBhbmQgdXNlIGFwcHJvcHJpYXRlIGluY2x1ZGUKCWZpbGVzIChhbmQgc2V0IG90aGVyIHBhcmFtZXRlcnMpIHRvIG1hdGNoLgoKV2VkIEZlYiAxNyAxMjoyODoxMyAxOTkzICBLLiBSaWNoYXJkIFBpeGxleSAgKHJpY2hAY3lnbnVzLmNvbSkKCgkqIHRyYWQtY29yZS5jICh0cmFkX3VuaXhfbWFrZV9lbXB0eV9zeW1ib2wpOiB3cmFwIFBBUkFNUyBhcm91bmQgYW4KCSAgYW5zaSBkZWZpbml0aW9uIHdoaWNoIG90aGVyd2lzZSBjb25mdXNlcyBub24tYW5zaSBjb21waWxlcnMuCgoJKiBhb3V0LWFkb2JlLmMgKGFvdXRfYWRvYmVfb2JqZWN0X3ApOiBlbGltaW5hdGUgYSB3YXJuaW5nIGZyb20gdmF4CgkgIHVsdHJpeCBjYyBieSBmb3J3YXJkIGRlY2xhcmluZyBnZXRlbnYgYXMgaXMgZG9uZSBpbgoJICBiZmRfZmluZF90YXJnZXQuCgpUdWUgRmViIDE2IDE3OjU2OjU4IDE5OTMgIEsuIFJpY2hhcmQgUGl4bGV5ICAocmljaEBjeWdudXMuY29tKQoKCSogZWxmLmMgKGVsZl9pbmZvX3RvX2hvd3RvKTogY2FzdCBhbiBlbnVtIGludG8gdW5zaWduZWQgY2hhcgoJICBhdm9pZGluZyBhIGZhdGFsIGVycm9yIGluIHZheCB1bHRyaXggNC4yIGNjLgoKVHVlIEZlYiAxNiAwMDo0NDo1NCAxOTkzICBKb2huIEdpbG1vcmUgIChnbnVAY3lnbnVzLmNvbSkKCgkqIGJmZC1pbi5oLCBWRVJTSU9OOiAgUm9sbCB0byB2ZXJzaW9uIDIuMS4KCk1vbiBGZWIgMTUgMjA6NDM6NTEgMTk5MyAgSm9obiBHaWxtb3JlICAoZ251QGN5Z251cy5jb20pCgoJKiBvYXN5cy5jIChvYXN5c193cml0ZV9vYmplY3RfY29udGVudHMpOiAgTGludC4KCSogc3JlYy5jOiAgV2hpdGVzcGFjZSBjbGVhbnVwLgoKRnJpIEZlYiAxMiAxNDoyMzowNyAxOTkzICBJYW4gTGFuY2UgVGF5bG9yICAoaWFuQGN5Z251cy5jb20pCgoJKiBjb2ZmZ2VuLmMgKGNvZmZfcHJpbnRfc3ltYm9sKTogUHJpbnQgY29ycmVjdCB0YWduZHggdmFsdWU7CgljbGVhbmVkIHVwIG91dHB1dCBmb3JtYXR0aW5nIGEgYml0LgoKRnJpIEZlYiAxMiAwODoyODo1NiAxOTkzICBTdGV2ZSBDaGFtYmVybGFpbiAgKHNhY0B0aGVwdWIuY3lnbnVzLmNvbSkKCgkqIGNvZmZjb2RlLmggKGNvZmZfc2V0X2FyY2hfbWFjaF9ob29rKTogKkZJWE1FKiB0aGUgSDgvMzAwIGlzIGFsd2F5cwoJcmVsYXhhYmxlLiAgU2hvdWxkIGJlIG1vdmVkIHNvbWV3aGVyZSBlbHNlLgoKVGh1IEZlYiAxMSAxNDowOTo0MiAxOTkzICBLZW4gUmFlYnVybiAgKHJhZWJ1cm5AY2FtYnJpZGdlLmN5Z251cy5jb20pCgoJKiBhb3V0LW1pcHNic2QuYzogRWxpbWluYXRlZCB1c2VzIG9mIERFRlVOLgoJKGFvdXRfbWlwc18qX3ZlYyk6IEFkZGVkIHNlY2xldF9saW5rIGVsZW1lbnQuCgoJKiBNYWtlZmlsZS5pbiAoQkZEX0JBQ0tFTkRTLCBDRklMRVMsIGFvdXQtbWlwc2JzZC5vKTogQWRkZWQKCXN1cHBvcnQgZm9yIGFvdXQtbWlwc2JzZCB0YXJnZXQuCgoJKiBib3V0LmMgKGdldF92YWx1ZSk6IERvbid0IHRydW5jYXRlIDMyLWJpdCBhZGRlbmQgdG8gMTYgYml0cy4KCkZyaSBGZWIgIDUgMDg6MDg6NDMgMTk5MyAgU3RldmUgQ2hhbWJlcmxhaW4gIChzYWNAdGhlcHViLmN5Z251cy5jb20pCgoJKiBjcHUtaDg1MDAuYyAoc2Nhbl9tYWNoKTogcmV0dXJuIGZhbHNlIGlmIGl0J3Mgbm90IGFuIEg4LzUwMAoKVGh1IEZlYiAgNCAxMjo1Mjo0MCAxOTkzICBTdGV2ZSBDaGFtYmVybGFpbiAgKHNhY0B0aGVwdWIuY3lnbnVzLmNvbSkKCglBZGQgc3VwcG9ydCBmb3IgdGhlIEg4LzUwMAoKCSogY29mZi1oODUwMC5jLCBjcHUtaDg1MDAuYywgYXJjaHVyZXMuYywgY29mZmNvZGUuaCwgdGFyZ2V0cy5jCgpUaHUgRmViICA0IDEyOjM1OjAyIDE5OTMgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AY3lnbnVzLmNvbSkKCgkqIGxpYmVjb2ZmLmg6IE5ldyBmaWxlLiAgRGVmaW5lcyBFQ09GRiBiYWNrZW5kIGRhdGEgZm9yIGdkYi4KCSogY29mZi1taXBzLmM6IE5vdyBpbmNsdWRlcyBsaWJlY29mZi5oLgoJKGVjb2ZmX2RhdGFfdHlwZSk6IE1vdmVkIHRvIGxpYmVjb2ZmLmguCgkoZWNvZmZfc2x1cnBfc3ltYm9saWNfaW5mbyk6IE1hZGUgZ2xvYmFsbHkgdmlzaWJsZSBzbyB0aGF0IGdkYiBjYW4KCWNhbGwgaXQuICBJZiB0aGVyZSBpcyBldmVyIGFub3RoZXIgRUNPRkYgdGFyZ2V0LCB0aGlzIGFuZCB0aGUKCXN3YXBwaW5nIGZ1bmN0aW9ucyBzaG91bGQgYmUgYWNjZXNzZWQgdmlhIGFuIEVDT0ZGIHNwZWNpZmljIHRhcmdldAoJdmVjdG9yLgoJKiBNYWtlZmlsZS5pbiAoY29mZi1taXBzLm8pOiBEZXBlbmRzIG9uIGxpYmVjb2ZmLmguCgpXZWQgRmViICAzIDA5OjE0OjM2IDE5OTMgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AY3lnbnVzLmNvbSkKCgkqIGNvZmZjb2RlLmg6IFJlbW92ZWQgTUlQUyBzcGVjaWZpYyBpbmZvcm1hdGlvbiwgc2luY2UgY29mZi1taXBzLmMKCW5vIGxvbmdlciBpbmNsdWRlcyB0aGlzIGZpbGUuCgoJKiBjb2ZmLW1zeW0uYyAoZWNvZmZfc3dhcF9mZHJfaW4sIGVjb2ZmX3N3YXBfZXh0X2luKTogU2V0IHJlc2VydmVkCgliaXRzIHRvIDAgdG8gbWFrZSBjb21wYXJpc29uIHRlc3QgdXNlZnVsLgoKCSogY29uZmlnL2lyaXgzLm1oLCBjb25maWcvaXJpeDQubWggKEhERUZJTkVTKTogU2V0IHRvIC1HIDQgdG8KCWF2b2lkIG92ZXJmbG93aW5nIEdQIGFjY2Vzc2libGUgc2VjdGlvbnMgaW4gYmludXRpbHMvb2JqZHVtcC4KClR1ZSBGZWIgIDIgMTU6MzY6NTUgMTk5MyAgUGVyIEJvdGhuZXIgIChib3RobmVyQGN5Z251cy5jb20pCgoJKiBhb3V0eC5oIChOQU1FKGFvdXQsc2x1cnBfc3ltYm9sX3RhYmxlKSk6ICBNYWRlIHN5bWJvbAoJcmVhZGluZyBtb3JlIHJvYnVzdDogIEZhaWwgaWYgc3RyaW5nIGluZGV4IGlzIG91dCBvZiBzdHJpbmcKCXRhYmxlIHJhbmdlLgoKVHVlIEZlYiAgMiAxMTo0MzoyNSAxOTkzICBLZW4gUmFlYnVybiAgKHJhZWJ1cm5AY2FtYnJpZGdlLmN5Z251cy5jb20pCgoJKiBib3V0LmMgKGJfb3V0X2dldF9yZWxvY2F0ZWRfc2VjdGlvbl9jb250ZW50cywgY2FzZXMgUENSRUwyNCBhbmQKCVBDUkVMMTMpOiBEb24ndCB0YWtlIGRzdF9hZGRyZXNzIGludG8gYWNjb3VudDsgdGhlIGlucHV0IGZpbGUgaGFzCglhbHJlYWR5IHRha2VuIGNhcmUgb2YgdGhhdC4KClR1ZSBGZWIgIDIgMTE6NDE6MDYgMTk5MyAgSWFuIExhbmNlIFRheWxvciAgKGlhbkBjeWdudXMuY29tKQoKCSogY29mZi1taXBzLmM6IENvbXBsZXRlZCBzdXBwb3J0IGZvciBsaW5rZXIgYW5kIGJpbnV0aWxzLgoKTW9uIEZlYiAgMSAxNDo0NTozOCAxOTkzICBLZW4gUmFlYnVybiAgKHJhZWJ1cm5AY2FtYnJpZGdlLmN5Z251cy5jb20pCgoJKiBib3V0LmMgKGJfb3V0X2dldF9yZWxvY2F0ZWRfc2VjdGlvbl9jb250ZW50cywgY2FzZSBBQlMzMik6IEtlZXAKCW9yaWdpbmFsIGFkZGVuZCBmcm9tIHNlY3Rpb24gY29udGVudHMuCgpUaHUgSmFuIDI4IDIxOjAxOjM3IDE5OTMgIEpvaG4gR2lsbW9yZSAgKGdudUBjeWdudXMuY29tKQoKCUZpeCBtaW5vciBidWdzIHJlcG9ydGVkIGJ5IENhcmwgR3JlY28sIDxjZ3JlY29AcGFycm90LmNyZWlnaHRvbi5lZHU+OgoJKiBob3N0cy9kZWx0YTg4LmggKHN0cnRvbCk6ICBGaXggcHJvdG90eXBlLgoJKiBjb25maWcvbTg4ay1jb2ZmLm10IChTRUxFQ1RfQVJDSElURUNUVVJFUyk6ICBGaXggbmFtZS4KCldlZCBKYW4gMjcgMTc6MTY6NTEgMTk5MyAgS2VuIFJhZWJ1cm4gIChyYWVidXJuQGNhbWJyaWRnZS5jeWdudXMuY29tKQoKCSogZWxmLmM6IEdldCByaWQgb2YgIiNpZmRlZiBzcGFyYyIuCgkoUkVMT0NfVFlQRV9OQU1FUyk6IE5ldmVyIHVzZWQgKGN1cnJlbnRseSksIHNvIGRvbid0IGluY2x1ZGUgaXQuCgkoZWxmX3NwYXJjX2hvd3RvX3RhYmxlKTogUmVuYW1lZCBmcm9tIGVsZl9ob3d0b190YWJsZSwgYW5kIGFsd2F5cwoJdXNlZC4KCShlbGZfaW5mb190b19ob3d0byk6IFVzZSBydW50aW1lIGNvbmRpdGlvbmFscyBvbiBDUFUgdHlwZSwgbm90Cgljb21waWxlIHR5cGUgY29uZGl0aW9uYWxzIG9uIGhvc3QgQ1BVLgoJKGVsZl9saXR0bGVfdmVjLCBlbGZfYmlnX3ZlYyk6IFVzZSBiZmRfZGVmYXVsdF9yZWxvY190eXBlX2xvb2t1cCwKCW5vdCBudWxsIHBvaW50ZXIuCgkocmVsb2NfdHlwZSwgUkVMT0NfVFlQRV9OQU1FUyk6IEluY2x1ZGUgaTM4NiB2YWx1ZXMuCgpUdWUgSmFuIDI2IDExOjQzOjE0IDE5OTMgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AY3lnbnVzLmNvbSkKCgkqIHNlY3Rpb24uYyAoU0VDX0lTX0NPTU1PTik6IE5ldyBzZWN0aW9uIGZsYWcsIG5lZWRlZCBmb3IgTUlQUwoJRUNPRkYgd2hpY2ggaGFzIHR3byBjb21tb24gc2VjdGlvbnMuCgkoYmZkX2NvbV9zZWN0aW9uKTogU2V0IFNFQ19JU19DT01NT04gZmxhZy4KCSogYmZkLWluLmggKGJmZF9pc19jb21fc2VjdGlvbik6IE5ldyBtYWNybyB0byB0ZXN0IFNFQ19JU19DT01NT04uCgkqIGFvdXR4LmgsIGFyY2hpdmUuYywgYm91dC5jLCBjb2ZmLWEyOWsuYywgY29mZi1tODhrLmMsCgljb2ZmLW1pcHMuYywgY29mZmdlbi5jLCBpZWVlLmMsIG9hc3lzLmMsIHJlbG9jLmMsIHN5bXMuYzogVXNlCgliZmRfaXNfY29tX3NlY3Rpb24gbWFjcm8gcmF0aGVyIHRoYW4gY2hlY2tpbmcgZm9yIGVxdWFsaXR5IHRvCgliZmRfY29tX3NlY3Rpb24uCgpNb24gSmFuIDI1IDE1OjI3OjM2IDE5OTMgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AY3lnbnVzLmNvbSkKCgkqIGNvZmZjb2RlLmggKF9iZmRfY29mZl9ta29iamVjdF9ob29rKTogUGFzcyBhb3V0aGRyIGFyZ3VtZW50LgoJKGNvZmZfbWtvYmplY3RfaG9vayk6IEFjY2VwdCBhb3V0aGRyIGFyZ3VtZW50LgoJKiBjb2ZmZ2VuLmMgKGNvZmZfcmVhbF9vYmplY3RfcCk6IFBhc3MgYW91dGhkciB0byBta29iamVjdF9ob29rLgoJSGFuZGxlIE5VTEwgYW91dGhkciBhcmd1bWVudC4KCShjb2ZmX29iamVjdF9wKTogSWYgdGhlcmUgaXMgbm8gYW91dGhkciwgcGFzcyBpdCBhcyBOVUxMIHRvCgljb2ZmX3JlYWxfb2JqZWN0X3AuCgkqIGxpYmNvZmYuaDogUmVidWlsdCBmb3IgbWtvYmplY3RfaG9vayBjaGFuZ2VzLgoKCSogY29mZnN3YXAuaCAoY29mZl9zd2FwX2FvdXRoZHJfaW4sIGNvZmZfc3dhcF9hb3V0aGRyX2luKTogU3dhcAoJYWRkaXRpb25hbCBNSVBTIEVDT0ZGIGZpZWxkcy4KClNhdCBKYW4gMjMgMTg6MzY6MjAgUFNUIDE5OTMgIFJhbHBoIENhbXBiZWxsICAocmFscGhjQHB5cmFtaWQuY29tKQoKCSogY29uZmlndXJlLmhvc3Q6IGFkZGVkIG1pcHMtZGVjLWJzZCoKCSogY29uZmlndXJlLmluOiBhZGRlZCBtaXBzLWRlYy1ic2QqCgkqIGFvdXQtbWlwc2JzZC5jOiBuZXcgZmlsZSBmb3IgbWlwcy1kZWMtYnNkKgoJKiBhb3V0LXRhcmdldC5oOiBkb24ndCBkZWZpbmUgJycgaWYgJ01ZX0JGRF9UQVJHRVQnIGlzIGRlZmluZWQuCgkqIGFvdXR4Lmg6IGFkZGVkIG1pcHMgc3VwcG9ydC4KCSogYXJjaHVyZXMuYzogYWRkZWQgbWlwcyBzdXBwb3J0IHRvIGJmZF9kZWZhdWx0X3NjYW4oKS4KCSogY3B1LW1pcHMuYzogYWRkZWQgc3VwcG9ydCBmb3IgUjQwMDAgKHVudGVzdGVkKS4KCSogbGliYW91dC5oOiBhZGRlZCBNSVBTMSAmIE1JUFMyIG1hZ2ljIG51bWJlcnMuCgkqIHJlbG9jLmM6IGZpeCB0eXBvJ3MgaW4gY29tbWVudHMuIEFkZGVkIEJGRF9SRUxPQyBlbnRyaWVzIHdoaWNoIEkKCQlob3BlIHdpbGwgbWFrZSBpdCBpbnRvIGluY2x1ZGUvYmZkLmguCgkqIHRhcmdldHMuYzogYWRkZWQgYW91dF9taXBzXypfdmVjLgoKV2VkIEphbiAyMCAxNzoxNTo1MiAxOTkzICBJYW4gTGFuY2UgVGF5bG9yICAoaWFuQHR3ZWVkbGVkdW1iLmN5Z251cy5jb20pCgoJKiBjb25maWcvZGVjc3RhdGlvbi5tdDogU2V0IERFRkFVTFRfVkVDVE9SIHRvIGVjb2ZmX2xpdHRsZV92ZWMuCgpUdWUgSmFuIDE5IDA5OjA2OjE0IDE5OTMgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AY3lnbnVzLmNvbSkKCgkqIGJmZC1pbi5oIChiZmRfYXN5bWJvbF92YWx1ZSk6IEFkZCBuZWVkZWQgcGFyZW50aGVzZXMuCgoJKiBsaWJjb2ZmLWluLmg6IFVwZGF0ZSBwcm90b3R5cGUgZm9yIGNvZmZfY291bnRfbGluZW51bWJlcnMuCgpGcmkgSmFuIDE1IDE4OjEzOjE3IDE5OTMgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AdHdlZWRsZWR1bWIuY3lnbnVzLmNvbSkKCgkqIGNvZmYtbXN5bS5jIChlY29mZl9zd2FwX2hkcl9vdXQsIGVjb2ZmX3N3YXBfZmRyX291dCwKCWVjb2ZmX3N3YXBfcGRyX291dCwgZWNvZmZfc3dhcF9zeW1fb3V0LCBlY29mZl9zd2FwX2V4dF9vdXQsCgllY29mZl9zd2FwX3JuZHhfb3V0LCBlY29mZl9zd2FwX3JmZF9vdXQsIGVjb2ZmX3N3YXBfb3B0X2luLAoJZWNvZmZfc3dhcF9vcHRfb3V0LCBlY29mZl9zd2FwX2Rucl9pbiwgZWNvZmZfc3dhcF9kbnJfb3V0KTogTmV3CglmdW5jdGlvbnMuCgkqIGNvZmZzd2FwLmg6IElmIE5PX0NPRkZfUkVMT0NTIGlzIGRlZmluZWQsIGRvbid0IGRlZmluZQoJYmZkX3N3YXBfcmVsb2NfaW4gb3IgY29mZl9zd2FwX3JlbG9jX291dC4KCSogY29mZi1taXBzLmM6IEFkZGVkIGNvZGUgdG8gbGluayBhbmQgd3JpdGUgb3V0IHN5bWJvbGljIGRlYnVnZ2luZwoJaW5mb3JtYXRpb24sIGFuZCB0byBzd2FwIHJlbG9jcyBpbiBhbmQgb3V0LgoKVGh1IEphbiAxNCAxNTo1MTo1OCAxOTkzICBTdGV2ZSBDaGFtYmVybGFpbiAgKHNhY0B0aGVwdWIuY3lnbnVzLmNvbSkKCgkqIGxpYmNvZmYuaCwgY29mZmdlbi5jIChjb2ZmX2NvdW50X2xpbmVudW1iZXJzKSwgY29mZmNvZGUuaAoJKGNvZmZfd3JpdGVfb2JqZWN0X2NvbnRlbnRzKTogY29mZl9jb3VudF9saW5lbnVtYmVycyByZXR1cm5zIHRoZQoJbnVtYmVyIG9mIGxpbmUgbnVtYmVyIHJlY29yZHMgaXQgZm91bmQuCgoJKiBjb2ZmZ2VuLmMgKGNvZmZfd3JpdGVfbGluZW51bWJlcnMpOiBvbmx5IHdyaXRlIG91dCBsaW5lIG51bWJlcnMKCWluIHRoZSBzZWN0aW9uIHRoZXkgYmVsb25nIHRvLgoKTW9uIEphbiAxMSAxODozMjoyMiAxOTkzICBJYW4gTGFuY2UgVGF5bG9yICAoaWFuQHR3ZWVkbGVkdW1iLmN5Z251cy5jb20pCgoJKiB0YXJnZXRzLmMgKGJmZF90YXJnZXQpOiBBZGRlZCByZWxvY2F0ZWFibGUgYXJndW1lbnQgdG8KCV9iZmRfZ2V0X3JlbG9jYXRlZF9zZWN0aW9uX2NvbnRlbnRzLiAgQWRkZWQgX2JmZF9zZWNsZXRfbGluawoJdGFyZ2V0IHZlY3RvciBmb3IgbGlua2VyIHVzZS4KCSogYmZkLmMgKGJmZF9zZWNsZXRfbGluayk6IE5ldyBtYWNyby4KCSogYmZkLWluLmggKEpVTVBfVEFCTEUpOiBBZGRlZCBfYmZkX3NlY2xldF9saW5rLgoJKiBzZWNsZXQuYyAocmVsLCBzZWNsZXRfZHVtcF9zZWNsZXQpOiBBZGRlZCByZWxvY2F0ZWFibGUgYXJndW1lbnQKCWFuZCBib29sZWFuIHJldHVybiB2YWx1ZS4gIE1hZGUgc3RhdGljLgoJKGJmZF9nZW5lcmljX3NlY2xldF9saW5rKTogUmVuYW1lZCBmcm9tIHNlY2xldF9kdW1wLiAgQWRkZWQKCXJlbG9jYXRlYWJsZSBhcmd1bWVudC4KCSogcmVsb2MuYyAoYmZkX2dlbmVyaWNfZ2V0X3JlbG9jYXRlZF9zZWN0aW9uX2NvbnRlbnRzKTogQWRkZWQKCXJlbG9jYXRlYWJsZSBhcmd1bWVudCAoaWYgcmVsb2NhdGVhYmxlLCBzYXZlcyByZWxvY3MpLgoJKiBib3V0LmMgKGJfb3V0X2dldF9yZWxvY2F0ZWRfc2VjdGlvbl9jb250ZW50cyksCglyZWxvYzE2LmMgKGJmZF9jb2ZmX3JlbG9jMTZfZ2V0X3JlbG9jYXRlZF9zZWN0aW9uX2NvbnRlbnRzKTogQWRkZWQKCXJlbG9jYXRlYWJsZSBhcmd1bWVudCAoaWYgcmVsb2NhdGVhYmxlLCBqdXN0IGNhbGxzCgliZmRfZ2VuZXJpY19nZXRfcmVsb2NhdGVkX3NlY3Rpb25fY29udGVudHMpLgoJKiBsaWJjb2ZmLWluLmggKGJmZF9jb2ZmX3JlbG9jMTZfZ2V0X3ZhbHVlKTogQWRkZWQgcmVsb2NhdGVhYmxlCglhcmd1bWVudCB0byBwcm90b3R5cGUuCgkqIEFsbCB0YXJnZXRzOiBTZXQgbmV3IF9iZmRfc2VjbGV0X2xpbmsgdmVjdG9yIHRvCgliZmRfZ2VuZXJpY19zZWNsZXRfbGluay4KClNhdCBKYW4gIDkgMjE6Mjk6MzIgMTk5MyAgU3R1IEdyb3NzbWFuICAoZ3Jvc3NtYW4gYXQgY3lnbnVzLmNvbSkKCgkqIGNvZmZnZW4uYzogICNpbmNsdWRlIHNlY2xldC5oLgoKU2F0IEphbiAgOSAxOTo0ODoxNCAxOTkzICBTdHUgR3Jvc3NtYW4gIChncm9zc21hbiBhdCBjeWdudXMuY29tKQoKCSogaHBwYS5jIChocHBhX29iamVjdF9zZXR1cCk6ICBHZXQgcmlkIG9mIGFsbCBrbm93bGVkZ2Ugb2Ygc3RhYnMKCWRlYnVnIGluZm8uICBTZXR1cCBpbmZvIGFib3V0IGxpbmtlciBzeW1ib2xzIG9ubHksIGFuZCB1c2UKCXN0YW5kYXJkIGJmZCBmaWVsZHMgdG8gaG9sZCB0aGUgaW5mby4KCSogKGhwcGFfb2JqZWN0X3ApOiAgUmVtb3ZlIHVubmVlZGVkIGRlY2xzLgoJKiAoaHBwYV9uZXdfc2VjdGlvbl9ob29rKTogIEdldCByaWQgb2YgbW9zdCBvZiB0aGlzLgoJKiBsaWJocHBhLmggKHN0cnVjdCBocHBhZGF0YSk6ICBSZW1vdmUgdGVuIHBvdW5kcyBvZiB1c2VsZXNzIHVnbHkKCWZhdC4gIFJlbW92ZSBhbGwga25vd2xlZGdlIG9mIHN0YWJzLCByZW1vdmUgcmVkdW5kYW50IGtub3dsZWRnZSBvZgoJbGlua2VyIHN5bWJvbHMuCgkqIFJlbW92ZSBtYWNyb3MgZm9yIGFjY2Vzc2luZyBmaWVsZHMgd2hpY2ggYXJlIG5vdyBnb25lLgoKRnJpIEphbiAgOCAxNToyMDowMCAxOTkzICBTdGV2ZSBDaGFtYmVybGFpbiAgKHNhY0B0aGVwdWIuY3lnbnVzLmNvbSkKCgkqIGNvZmZjb2RlLmggKHNlY190b19zdHlwX2ZsYWdzKTogYWxsb3cgU0VDX05FVkVSX0xPQUQgdG8gdHVybiBvbgoJU1RZUF9OT0xPQUQgYml0LgoJKiBjb2ZmLXo4ay5jOiBkZWxldGUgdW51c2VkIHJlbG9jIGZ1bmN0aW9ucwoKRnJpIEphbiAgOCAxNTo0Nzo1MyAxOTkzICBJYW4gTGFuY2UgVGF5bG9yICAoaWFuQHR3ZWVkbGVkdW1iLmN5Z251cy5jb20pCgoJKiBiZmQuYyAoc3RydWN0IF9iZmQpOiBBZGRlZCBlY29mZl90ZGF0YSB0byB0ZGF0YSB1bmlvbi4KCSogdGFyZ2V0cy5jIChlbnVtIHRhcmdldF9mbGF2b3VyKTogQWRkZWQgYmZkX3RhcmdldF9lY29mZl9mbGF2b3VyLgoJKiBjb2ZmLW1zeW0uYzogVXNlIERFRlVOIGZvciBmdW5jdGlvbiBkZWZpbml0b25zLgoJKiBjb2ZmLW1pcHMuYzogQWRkZWQgY29kZSB0byByZWFkIGFuZCBwcmludCBzeW1ib2xzLCBhbmQgdG8gZmluZAoJbGluZSBudW1iZXJzLgoKCSogY29mZmNvZGUuaDogTW92ZWQgbWFueSBnZW5lcmljIGZ1bmN0aW9ucyBpbnRvIGNvZmZnZW4uYy4gIE1vdmVkCglzd2FwcGluZyBmdW5jdGlvbnMgaW50byBjb2Zmc3dhcC5oIGZvciBFQ09GRiB1c2UuICBNb3ZlZAoJcmVsb2NhdGlvbiBmdW5jdGlvbnMsIG9ubHkgdXNlZCBieSBoODMwMCBhbmQgejhrLCBpbnRvIHJlbG9jMTYuYy4KCUFkZGVkIGhvb2tzIGZvciBjb2ZmZ2VuLmMgZnVuY3Rpb25zIHRvIGJhY2tlbmQgZGF0YSBzdHJ1Y3R1cmUsIGFuZAoJYWRkZWQgaG9vayBmdW5jdGlvbnMuICBTdGlsbCBtb3JlIGNvdWxkIGJlIGRvbmUuCgkqIGNvZmZzd2FwLmg6IE5ldyBmaWxlIHRvIGhvbGQgQ09GRiBzd2FwcGluZyByb3V0aW5lcy4KCSogY29mZmdlbi5jOiBOZXcgZmlsZSB0byBob2xkIGdlbmVyaWMgQ09GRiBmdW5jdGlvbnMuCgkqIHJlbG9jMTYuYzogTmV3IGZpbGUgdG8gaG9sZCBoODMwMCBhbmQgejhrIHNwZWNpZmljIHJlbG9jYXRpb24KCWZ1bmN0aW9ucy4KCSogbGliY29mZi1pbi5oOiBBZGRlZCBkZWNsYXJhdGlvbnMgZm9yIGZ1bmN0aW9ucyBpbiBjb2ZmZ2VuLmMuCgkqIGxpYmNvZmYuaDogUmVidWlsdCB0byBpbmNvcnBvcmF0ZSBjaGFuZ2VzLgoJKiBjb2ZmLWg4MzAwLmM6IEZ1bmN0aW9uIG5hbWUgY2hhbmdlcy4KCSogY29mZi16OGsuYzogRnVuY3Rpb24gbmFtZSBjaGFuZ2VzLiAgVXNlIGNvZmZfcmVsb2MxNl9leHRyYV9jYXNlcwoJaG9vayByYXRoZXIgdGhhbiBkZWZpbmluZyBFWFRSQV9DQVNFUy4KCSogTWFrZWZpbGUuaW46IEJ1aWxkIG5ldyBmaWxlcyBjb2ZmZ2VuIGFuZCByZWxvYzE2LiAgQWRkZWQKCWRlcGVuZGVuY2llcyBvZiBjb2ZmLSoubyBvbiBjb2Zmc3dhcC5oIGFuZCBzZWNsZXQuaC4KClRodSBKYW4gIDcgMTY6MTY6MjYgMTk5MyAgUGVyIEJvdGhuZXIgIChib3RobmVyQGN5Z251cy5jb20pCgoJKiBpZWVlLmMgKGllZWVfc2x1cnBfc2VjdGlvbnMpOiAgQWRkIGNhc3QgdG8gYXZvaWQgd2FybmluZwoJYWJvdXQgZGlzY2FyZGluZyBjb25zdC4KCldlZCBKYW4gIDYgMDA6MTY6NDkgMTk5MyAgZGF2aWQgZCBgem9vJyB6dWhuICAoem9vIGF0IGNpcmRhbi5jeWdudXMuY29tKQoKCSogYXJjaGl2ZS5jLCBzZWNsZXQuYywgZWxmLmMgdXNlIGJmZF94bWFsbG9jIGluc3RlYWQgb2YgbWFsbG9jCgpUdWUgSmFuICA1IDA5OjM1OjU3IDE5OTMgIEtlbiBSYWVidXJuICAocmFlYnVybkBjYW1icmlkZ2UuY3lnbnVzLmNvbSkKCgkqIGNvbmZpZ3VyZS5pbiAocG9zdC10YXJnZXQpOiBJZiAtLXdpdGgtbWluaW1hbC1iZmQgaXMgc3BlY2lmaWVkLAoJc2V0IE1JTklNSVpFPTEuCgpNb24gSmFuICA0IDA3OjIwOjAxIDE5OTMgIFN0ZXZlIENoYW1iZXJsYWluICAoc2FjQHRoZXB1Yi5jeWdudXMuY29tKQoKCSogc3JlYy5jIChzcmVjX3dyaXRlX3JlY29yZHMpOiBvbmUgb2YgbXkgYm9hcmRzIHdhbnRzIGEgQ1IgYmV0d2VlbgoJcmVjb3Jkcy4KCldlZCBEZWMgMzAgMTI6NDY6MzAgMTk5MiAgSWFuIExhbmNlIFRheWxvciAgKGlhbkBjeWdudXMuY29tKQoKCSogYXJjaGl2ZS5jIChkb19zbHVycF9jb2ZmX2FybWFwKTogc2V0IHN5bWRlZl9jb3VudCBjb3JyZWN0bHkKCShpdCBicm9rZSBhIGNvdXBsZSBvZiB3ZWVrcyBhZ28pLgoKVHVlIERlYyAyOSAyMTo0MTowNSAxOTkyICBLZW4gUmFlYnVybiAgKHJhZWJ1cm5AY2FtYnJpZGdlLmN5Z251cy5jb20pCgoJKiBlbGYuYyAoYmZkX2VsZl9maW5kX3NlY3Rpb24pOiBTd2l0Y2ggYmFjayB0byAic3RydWN0IC4uLiIgZm9yCglyZXR1cm4gdHlwZSwgc28gbGliYmZkLmggZG9lc24ndCByZWZlcmVuY2UgdW5kZWZpbmVkIHR5cGVkZWZuYW1lcy4KClR1ZSBEZWMgMjkgMTM6NTQ6MzUgMTk5MiAgSWFuIExhbmNlIFRheWxvciAgKGlhbkBjeWdudXMuY29tKQoKCSogY29mZmNvZGUuaCAoY29mZl9yZWFsX29iamVjdF9wKTogdXNlIG5hbWUgSTM4NkFJWE1BR0lDIHJhdGhlcgoJdGhhbiBJMzg2U1ZNQUdJQy4KCShjb2ZmX3BvaW50ZXJpemVfYXV4KTogZG9uJ3QgcG9pbnRlcml6ZSBhIG5lZ2F0aXZlIHRhZ25keAoJKHNvbWV0aW1lcyBnZW5lcmF0ZWQgYnkgU0NPIDMuMnY0IGNjKS4KCgkqIGJvdXQuYyAoY2FsbGp4X2NhbGxiYWNrLCBjYWxsal9jYWxsYmFjaywKCWJfb3V0X2dldF9yZWxvY2F0ZWRfc2VjdGlvbl9jb250ZW50cyk6IHdhcm4gaWYgcmVsb2NhdGluZyBhZ2FpbnN0CglhbiB1bmRlZmluZWQgc3ltYm9sLgoKTW9uIERlYyAyOCAxNDozMDo1NSAxOTkyICBTdHUgR3Jvc3NtYW4gIChncm9zc21hbiBhdCBjeWdudXMuY29tKQoKCSogaHBwYS5jOiAgR2V0IHJpZCBvZiBERUZVTiwgdXNlIG1vcmUgY29udmVudGlvbmFsIHByb2xvZyBzdHVmZi4KCU1ha2UgYSBidW5jaCBtb3JlIHJvdXRpbmVzIGJlIHN0YXRpYy4KCSogaHBwYS5jIChmaWxsX3NwYWNlcyk6ICBHZXQgcmlkIG9mIHRoaXMsIHJlcGxhY2Ugd2l0aCBtdWNoIGJldHRlcgoJd3JpdHRlbiBzZXR1cF9zZWN0aW9ucygpLgoJKiAoc2V0dXBfc2VjdGlvbnMpOiAgTmV3IHJvdXRpbmUgdG8gY3JlYXRlIEJGRCBzZWN0aW9ucyBmb3IgZWFjaAoJc3BhY2UgYW5kIHN1YnNwYWNlIGluIFNPTSBmaWxlcy4KCSogKGhwcGFfb2JqZWN0X3NldHVwKTogIFVzZSBCRkQgc2VjdGlvbnMgY3JlYXRlZCBieQoJc2V0dXBfc2VjdGlvbnMoKSB0byBsb2NhdGUgR0RCIHN5bWJvbCB0YWJsZSBpbmZvLgoJKiAobWFrZV91bmlxdWVfc2VjdGlvbik6ICBOZXcgcm91dGluZSB0byBjcmVhdGUgYSBCRkQgc2VjdGlvbi4gIEl0CgllbnN1cmVzIHRoYXQgdGhlIGdpdmVuIG5hbWUgaXMgdW5pcXVlLCBhbmQgd2lsbCBnZW5lcmF0ZSBhIHVuaXF1ZQoJb25lIGlmIG5lY2Vzc2FyeS4KCSogKGhwcGFfb2JqZWN0X3ApOiAgQmVjb21lIG11Y2ggbW9yZSBwYXJhbm9pZCBhYm91dCBmaWxlIGhlYWRlci4KCSogKG1ha2VfYmZkX2FzZWN0aW9uKTogIENhbGwgYmZkX21ha2Vfc2VjdGlvbiB0byBkbyB0aGUgZGlydHkKCXdvcmsuICBTaW1wbGlmeSBjb2RlIHNvbWV3aGF0LgoJKiAoaHBwYV9jb3JlX2ZpbGVfcCk6ICBVc2UgcHJvcGVyIG5hbWUgZm9yIHN0YWNrIHNlY3Rpb24uCgkqIGxpYmhwcGEuaDogIFJlbW92ZSBtaWxsaWNvZGVfc3RhcnQsIG1pbGxpY29kZV9lbmQgZGVjbHMuCgpNb24gRGVjIDI4IDExOjAzOjIyIDE5OTIgIEtlbiBSYWVidXJuICAocmFlYnVybkBjeWdudXMuY29tKQoKCSogTWFrZWZpbGUuaW4gKGNvZmYtd2UzMmsubywgY29mZi16OGsubyk6IE5vdGUgZGVwZW5kZW5jaWVzLgoKCSogcmVsb2MuYyAoYmZkX3BlcmZvcm1fcmVsb2NhdGlvbik6IEZvciBub3JtYWwgMi0gb3IgNC1ieXRlCglyZWxvY3MsIGRvbid0IGJvdGhlciBkb2luZyB0aGUgYWRqdXN0bWVudCBpZiB0aGUgdmFsdWUgdG8gYWRkIGlzCgl6ZXJvLgoKU3VuIERlYyAyNyAxNzo0NTowNSAxOTkyICBGcmVkIEZpc2ggIChmbmZAY3lnbnVzLmNvbSkKCgkqIGJmZC5jIChiZmRfZ2V0X3NpemUpOiAgTmV3IGZ1bmN0aW9uIHRoYXQgZ2V0cyBhbiB1cHBlciBib3VuZAoJb24gdGhlIHBvc3NpYmxlIHNpemUgb2YgYW55IG9iamVjdCBpbiBhIGJmZC4KCSogZWxmLmMgKGJmZF9lbGZfZmluZF9zZWN0aW9uLCBlbGZfZ2V0X3N0cl9zZWN0aW9uLAoJZWxmX2dldF9zeW10YWJfdXBwZXJfYm91bmQpOiAgUmV3cml0ZSB0byBhdm9pZCBOVUxMIHBvaW50ZXIKCWRlcmVmZXJlbmNlcy4KCSogZWxmLmMgKGVsZl9iaWdfdmVjLCBlbGZfbGl0dGxlX3ZlYyk6ICBEb2N1bWVudCBsYXN0IHRocmVlCgltZW1iZXJzIGluaXRpYWxpemVkIHRvIE5VTEwuCgpUaHUgRGVjIDI0IDE3OjQ5OjA5IDE5OTIgIGRhdmlkIGQgYHpvbycgenVobiAgKHpvbyBhdCBjaXJkYW4uY3lnbnVzLmNvbSkKCgkqIGhwcGEuYzogY2hhbmdlIGEgJ2NvbnN0JyB0byAnQ09OU1QnLCBvciBlbHNlIEhQIEMgY29tcGlsZXIgZGllcwoKTW9uIERlYyAyMSAxNjozMzozNCAxOTkyICBQZXIgQm90aG5lciAgKGJvdGhuZXJAcnRsLmN5Z251cy5jb20pCgoJKiBob3N0cy9zdGQtaG9zdC5oOiAgTmV3IGZpbGUuICBBdHRlbXB0IGF0IGEgZ2VuZXJpYy9kZWZhdWx0CglzZXQgb2YgZGVmaW5pdGlvbnMsIHRvIGRpc2NvdXJhZ2UgcG9ydGluZyB0byBuZXcgaG9zdHMgYnkgY29weWluZy4KCSogaG9zdHMvbmV3cy5oOiAgUmVtb3ZlZC4KCSogaG9zdHMvc3BhcmMuaDogIFVzZSBzdGQtaG9zdC5oLgoJKiBiZmQtaW4uaDogIE5ldyBtYWNyb3MgYmZkX2FzeW1ib2xfYmZkIGFuZCBiZmRfYXN5bWJvbF9mbGF2b3VyOwoJcGVyaGFwcyB3ZSBjYW4gbGF0ZXIgcmVtb3ZlIHRoZSB0aGVfYmZkIGZpZWxkIGZyb20gZWFjaCBzeW1ib2wuCgkqIHN5bXMuYyAoc3RydWN0IHN5bWJvbF9jYWNoZV9lbnRyeSk6ICBSZW1vdmUgdW51c2VkIGZpZWxkCglhcHBfZGF0YS4gIEFkZCBjb21tZW50IG5vdGluZyB0aGF0IHRoZV9iZmQgaXMgYWxtb3N0IHJlZHVuZGFudCwKCWJ1dCBub3QgcXVpdGUuCgkqIGFvdXR4LmgsIGNvZmYtYTI5ay5jLCBjb2ZmLWkzODYuYywgY29mZi1pOTYwLmMsIGNvZmZjb2RlLmg6CglVc2UgbmV3IG1hY3JvcyBiZmRfYXN5bWJvbF9iZmQgYW5kIGJmZF9hc3ltYm9sX2ZsYXZvdXIuCgkqIGhwcGEuYyAoZmlsbF9zcGFjZXMpOiAgTWFrZSBzbGlnaHRseSBtb3JlIHJlYnVzdC4KCSogY29uZmlndXJlLmluOiAgQWxsb3cgc3RkLWhvc3QgYXMgdGhlICJkZWZhdWx0IiBob3N0LgoKTW9uIERlYyAyMSAxNzoyNDoxMyAxOTkyICBTdHUgR3Jvc3NtYW4gIChncm9zc21hbiBhdCBjeWdudXMuY29tKQoKCSogYmZkLmM6ICBBZGQgc3RydWN0IGhwcGFfY29yZV9kYXRhIHRvIHRkYXRhIHVuaW9uLgoJKiBocHBhLmM6ICBDb25kaXRpb25hbGl6ZSBvbiBIT1NUX0hQUEFIUFVYIGluc3RlYWQgb2YgaHA5MDAwczgwMC4KCUdldCByaWQgb2YgSFBQQS9CU0Qgc3BlY2lmaWMgY29kZS4gIFRoYXQgd2lsbCBnbyBzb21ld2hlcmUgZWxzZQoJc29tZWRheS4KCSogKGZpbGxfc3BhY2VzKTogIERvbid0IHNwaW4gZm9yZXZlciBhbmQgZGllIGlmIHlvdSBkb24ndCBmaW5kCgkkTUlMTElDT0RFJCBzdWJzcGFjZS4KCSogKGhwcGFfb2JqZWN0X3ApOiAgTWFrZSBzdXJlIHRoYXQgd2UgaGF2ZSBhIHJlYWwgaG9uZXN0LXRvLWN0aHVsdQoJZXhlYyBmaWxlIQoJKiAoaHBwYV9jb3JlX2ZpbGVfZmFpbGluZ19zaWduYWwsIGhwcGFfY29yZV9maWxlX2ZhaWxpbmdfY29tbWFuZCk6CglNYWtlIHRoZXNlIHdvcmsgZm9yIEhQVVguCgkqIChtYWtlX2JmZF9hc2VjdGlvbik6ICBOZXcgcm91dGluZSB0byBtYWtlIHNlY3Rpb24gY3JlYXRpb24gYQoJbGl0dGxlIGVhc2llci4KCSogKGhwcGFfY29yZV9maWxlX3ApOiAgQ29tcGxldGVseSByZXdyaXRlLCBsZWF2ZSBvdXQgYnVncy4KCSogbGliaHBwYS5oOiAgI2luY2x1ZGUgdGhlIHJpZ2h0IHN5c3RlbSBmaWxlcy4gIFJlZGVmaW5lIGFsbCBvZgoJdGhlIHN0cnVjdHMvbWFjcm9zIGZvciBoYWNraW5nIGNvcmUgZmlsZXMgdG8gdXNlIG1vcmUgc2Vuc2libGUKCUhQVVggY29yZSBmaWxlIHN0cnVjdHVyZXMuCgkqIHRhcmdldHMuYyAodGFyZ2V0X3ZlY3Rvcik6ICBDb25kaXRpb25hbGl6ZSBocHBhX3ZlYyBvbgoJSE9TVF9IUFBBSFBVWCwgbm90IGhwOTAwMHM4MDAuCgkqIGhvc3RzL2hwcGFocHV4Lmg6ICAjaW5jbHVkZSBzdGRsaWIuaCB0byBnZXQgY29ycmVjdCBkZWNscyBmb3IKCW1hbGxvYyBhbmQgcmVhbGxvYy4gICNkZWZpbmUgSE9TVF9IUFBBSFBVWC4KCk1vbiBEZWMgMjEgMTI6NDA6MTAgMTk5MiAgSWFuIExhbmNlIFRheWxvciAgKGlhbkBjeWdudXMuY29tKQoKCSogUGF0Y2hlcyBmcm9tIE1pbmggVHJhbi1sZSA8bXRyYW5sZUBwYXJpcy5pbnRlbGxpY29ycC5jb20+LgoJKiBjb25maWd1cmUuaW4gKGkzODYtKi1pc2MqLCBpMzg2LSotYWl4Kik6IE5ldyB0YXJnZXRzLgoJKiBjb25maWd1cmUuaG9zdCAoaTM4Ni0qLWlzYyosIGkzODYtKi1haXgqKTogTmV3IGhvc3RzLgoJKiBob3N0cy9pMzg2aXNjLmgsIGNvbmZpZy9pMzg2aXNjLm1oOiBOZXcgZmlsZXMgZm9yIEludGVyYWN0aXZlCglVbml4LgoJKiBob3N0cy9pMzg2YWl4LmgsIGNvbmZpZy9pMzg2YWl4Lm1oOiBOZXcgZmlsZXMgZm9yIEFJWCBvbiBQUy8yLgoJKiBhaXgzODYtY29yZS5jOiBOZXcgZmlsZSBmb3IgaGFuZGxpbmcgY29yZSBmaWxlcyBvbiBBSVggb24gUFMvMi4KCSogdGFyZ2V0cy5jOiBpZiBBSVgzODZfQ09SRSwgdXNlIGFpeDM4Nl9jb3JlX3ZlYy4KCSogY29mZmNvZGUuaCAoY29mZl9yZWFsX29iamVjdF9wKTogY2hlY2sgZm9yIEkzODZTVk1BR0lDIGFzIHdlbGwKCWFzIEkzODZNQUdJQy4KCkZyaSBEZWMgMTggMTA6MjA6MjcgMTk5MiAgU3RldmUgQ2hhbWJlcmxhaW4gIChzYWNAdGhlcHViLmN5Z251cy5jb20pCgoJKiBhb3V0ZjEuaCAoc3Vub3M0X3dyaXRlX29iamVjdF9jb250ZW50cyk6IHNldCBmbGFncyB0byAwLCBmaXhpbmcKCTE5MjcuCgpUaHUgRGVjIDE3IDE5OjM1OjMyIDE5OTIgIGRhdmlkIGQgYHpvbycgenVobiAgKHpvbyBhdCBjaXJkYW4uY3lnbnVzLmNvbSkKCgkqIE1ha2VmaWxlLmluOiBhZGRlZCBkdmkgdGFyZ2V0CgpUaHUgRGVjIDE3IDAwOjM2OjI0IDE5OTIgIEpvaG4gR2lsbW9yZSAgKGdudUBjeWdudXMuY29tKQoKCSogYmZkLmM6ICBVc2UgcmlnaHQgbmFtZSBmb3IgdGVraGV4IHRkYXRhIHN0cnVjdC4KCSogdGVraGV4LmM6ICBJbnNlcnQgbGVhZGluZ19jaGFyICgwKSBpbnRvIGJmZF90YXJnZXQgc3RydWN0LiAgU3R5bGUuCgkqIGxpYmNvZmYuaDogIFVwZGF0ZWQgdG8gZ2V0IHNwYWNpbmcgY2hhbmdlIGZyb20gY29mZmNvZGUuaC4KCSogdHJhZC1jb3JlLmM6ICBsZWFkaW5nX2NoYXIgaXMgMCAobm8gc3ltYm9scyEpLCBub3QgJ18nLgoKVHVlIERlYyAxNSAxNTo0MDozMCAxOTkyICBQZXIgQm90aG5lciAgKGJvdGhuZXJAY3lnbnVzLmNvbSkKCgkqIGFyY2hpdmUuYyAoZG9fc2x1cnBfYnNkX2FybWFwLCBkb19zbHVycF9jb2ZmX2FybWFwKTogIE5ldwoJZnVuY3Rpb25zLCB3aXRoIHRoZSAiZ3V0cyIgb2YgdGhlIG9sZCBiZmRfc2x1cnBfYnNkX2FybWFwCglhbmQgYmZkX3NsdXJwX2NvZmZfYXJtYXAsIGJ1dCBhc3N1bWluZyB3ZSd2ZSBhbHJlYWR5IGNoZWNrZWQKCWlmIHRoZSBhcm1hcCBpcyBwcmVzZW50IG9yIG5vdC4KCUFsc28sIHJld3JpdGUgYSBiaXQgdG8gYXZvaWQga2VlcGluZyBhcm91bmQgb2JzdGFjayBkYXRhCgl0aGF0IHdlIGRvbid0IG5lZWQuCgkqIGFyY2hpdmUuYyAoc25hcmZfYXJfaGVhZGVyLCBfYmZkX3NsdXJwX2V4dGVuZGVkX25hbWVfdGFibGUpOgoJVmFyaW91cyBmaXhlcyB0byBjb3JyZWN0bHkgaGFuZGxlIENPRkZfc3R5bGUgYXJjaGl2ZXMgbmFtZXMuCgkoTm90ZSB0aGF0IGJlY2F1c2UgdGhlc2UgaGF2ZSBhIHRyYWlsaW5nICcvJywgdGhlIG5hbWVzIGNhbgoJaGF2ZSBlbWJlZGRlZCBzcGFjZXMuKQoJKiBhcmNoaXZlLmMgKGJmZF9zbHVycF9hcm1hcCk6ICBOZXcgZnVuY3Rpb24sIHJlcGxhY2VzIG9sZAoJYmZkX3NsdXJwX2JzZF9hcm1hcCBhbmQgYmZkX3NsdXJwX2NvZmZfYXJtYXAuICBSZWNvZ25pemVzCglfZWl0aGVyXyBmb3JtYXQsIGFuZCBjYWxscyBkb19zbHVycF9ic2RfYXJtYXAgb3IKCWRvX3NsdXJwX2NvZmZfYXJtYXAgaWYgZWl0aGVyIGZvcm0gb2YgbWFwIGlzIHNlZW4uCgkqIGxpYmJmZC1pbi5oOiAgQ2hhbmdlZCBiZmRfc2x1cnBfYnNkX2FybWFwIGFuZAoJYmZkX3NsdXJwX2NvZmZfYXJtYXAgaW50byBtYWNybyBzeW5vbnltcyBmb3IgYmZkX3NsdXJwX2FybWFwLgoJKiBlbGYuYyAoZWxmX3NsdXJwX2FybWFwLCBlbGZfd3JpdGVfYXJtYXApOiAgRml4LgoJKiBNYWtlZmlsZS5pbiAoQVJfRkxBR1MpOiAgVXNlIHJjIGluc3RlYWQgb2Ygbm9uLXN0YW5kYXJkIHFjLgoKTW9uIERlYyAxNCAxNzowODowOCAxOTkyICBTdHUgR3Jvc3NtYW4gIChncm9zc21hbiBhdCBjeWdudXMuY29tKQoKCSogaHBwYS5jOiAgI2luY2x1ZGUgInN5c2RlcC5oIiwgbm90IDxzeXNkZXAuaD4uCgkqIGxpYmhwcGEuaDogIE1ha2UgbWlsbGljb2RlX3N0YXJ0IGFuZCBtaWxsaWNvZGVfZW5kIGJlIHVuc2lnbmVkCglpbnQgdG8gYmUgc2FtZSB0eXBlIGFzIENPUkVfQUREUiBpbiBHREIuICBXaHkgYXJlIHRoZXNlIGhlcmU/CgpTYXQgRGVjIDEyIDE1OjU0OjM2IDE5OTIgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AY3lnbnVzLmNvbSkKCgkqIGNvZmYtaTM4Ni5jIChDQUxDX0FEREVORCk6IGlmIHJlbG9jIGlzIFBDIHJlbGF0aXZlLCBhZGQgdGhlCgl2YWRkciBvZiB0aGUgc2VjdGlvbiB0byB0aGUgYWRkZW5kLgoJKiB0YXJnZXRzLmM6IGlmIE1JTklNSVpFIGlzIDEsIGFuZCBTQ09fQ09SRSBpcyBkZWZpbmVkLCBhZGQKCVNDT19DT1JFIHRvIFNFTEVDVF9WRUNTLgoJKHRhcmdldF92ZWN0b3IpOiBhZGQgc2NvX2NvcmVfdmVjLgoJKiBzY28tY29yZS5jIChzY29fY29yZV92ZWMpOiBhZGQgbGVhZGluZyB1bmRlcnNjb3JlIGluaXRpYWxpemVyLgoJKiBjb25maWd1cmUuaW4gKGlbMzRdODYtKi1zY28qKTogdXNlIHRhcmdldCBpMzg2LXNjby4KCSogY29uZmlnL2kzODYtc2NvLm10OiBuZXcgZmlsZTsgZGVmaW5lIFNDT19DT1JFLgoKVGh1IERlYyAxMCAwMjoxMzoxNSAxOTkyICBKb2huIEdpbG1vcmUgIChnbnVAY3lnbnVzLmNvbSkKCgkqIGFvdXQtYWRvYmUuYyAoYW91dF9hZG9iZV9vYmplY3RfcCk6ICBGaXggIXN0cmNtcCB0aGlua28uCgpGcmkgRGVjICA0IDE0OjAyOjQ5IDE5OTIgIEtlbiBSYWVidXJuICAocmFlYnVybkBjYW1icmlkZ2UuY3lnbnVzLmNvbSkKCgkqIGNvZmZjb2RlLmggKGJmZF9jb2ZmX3N0ZF9zd2FwX3RhYmxlKTogTm93IHN0YXRpYyBhbmQgY29uc3QuCgpUaHUgRGVjICAzIDE2OjU0OjU4IDE5OTIgIEtlbiBSYWVidXJuICAocmFlYnVybkBjYW1icmlkZ2UuY3lnbnVzLmNvbSkKCgkqIGhvc3RzL2kzODZsaW51eC5oOiBJbmNsdWRlIHVuaXN0ZC5oLgoKCSogYW91dHguaCAocHJpbnRfc3ltYm9sKTogYW91dF9zdGFiX25hbWUgcmV0dXJucyBhIGNvbnN0YW50CglzdHJpbmcuCgkqIGxpYmFvdXQuaCAoYW91dF9zdGFiX25hbWUpOiBGaXggcHJvdG90eXBlLgoJKiBzdGFiLXN5bXMuYyAoYW91dF9zdGFiX25hbWVzKTogQXJyYXkgaXMgbm93IGNvbnN0LgoJKGFvdXRfc3RhYl9uYW1lKTogUmV0dXJuIHZhbHVlIGlzIG5vdyBwb2ludGVyIHRvIGNvbnN0LgoKCSogYW91dHguaCwgYXJjaGl2ZS5jLCBhcmNodXJlcy5jLCBjb2ZmY29kZS5oLCBjdG9yLmMsIHJlbG9jLmMsCglzeW1zLmM6IERvYyBmaXhlcy4KCgkqIHN5bXMuYyAoYXN5bWJvbCk6IEFkZGVkIG5ldyBmaWVsZCAiYXBwX2RhdGEiLCBmb3IgZGF0YQoJcGFydGljdWxhciB0byB0aGUgYXBwbGljYXRpb24uICBTb21lIG9mIHRoZSBsaW5rZXIgZmxhZ3Mgb3VnaHQgdG8KCWdldCBtb3ZlZCB0byB0aGlzIGZpZWxkIHNvbWVkYXkuCgoJKiBhcmNodXJlcy5jIChiZmRfZGVmYXVsdF9zY2FuKTogUmVjb2duaXplIGEgZmV3IG1vcmUgbnVtYmVyczoKCTgwNDg2LCA4MDk2MCwgYW5kIDk2MC4KCgkqIGJmZC1pbi5oIChDT0ZGX1NXQVBfVEFCTEUpOiBOZXcgaXMganVzdCBhZGRyZXNzIG9mCgliZmRfY29mZl9zdGRfc3dhcF90YWJsZSwgY2FzdCB0byBQVFIuCgkqIGJmZC5jIChiZmRfY29mZl9zd2FwXyopOiBEZWxldGVkIG1hY3Jvcy4KCSogdGFyZ2V0cy5jIChzdHJ1Y3QgYmZkX3RhcmdldCk6IERlbGV0ZWQgQ09GRi1zcGVjaWZpYyBzd2FwcGluZwoJcm91dGluZSBwb2ludGVycy4KCSogY29mZmNvZGUuaCAodHlwZSBiZmRfY29mZl9iYWNrZW5kX2RhdGEpOiBOZXcgc3RydWN0dXJlIHR5cGUsCgljb250YWlucyBwb2ludGVycyB0byB0aGUgQ09GRi1zcGVjaWZpYyBzd2FwcGluZyByb3V0aW5lcy4KCShiZmRfY29mZl9zdGRfc3dhcF90YWJsZSk6IE5ldyBkYXRhIHN0cnVjdHVyZSwgdG8gYmUgdXNlZCB3aGVuCglOT19DT0ZGX1NZTUJPTFMgYW5kIE5PX0NPRkZfTElORU5PUyBhcmUgbm90IGRlZmluZWQuCgkoYmZkX2NvZmZfc3dhcF8qKTogTmV3IG1hY3Jvcy4KCSogY29mZi1taXBzLmMgKG1pcHNfY29mZl9zd2FwX3RhYmxlKTogTmV3IGRhdGEgc3RydWN0dXJlLgoJKGVjb2ZmX2JpZ192ZWMpOiBVc2UgaXQuCgkqIEFsbCBDT0ZGIHRhcmdldHM6IE1vdmVkIENPRkZfU1dBUF9UQUJMRSB0byB0YXJnZXQtc3BlY2lmaWMgZGF0YS4KCSogQWxsIG90aGVyIHRhcmdldHM6IERlbGV0ZWQgY29mZi1zcGVjaWZpYyB2ZWN0b3IgZW50cmllcy4KCgkqIHRyYWQtY29yZS5jOiBGaXhlZCBzb21lIGBQQVJBTVMnIHVzZXMgdGhhdCB3ZXJlIG1pc3NpbmcKCXBhcmVudGhlc2VzLgoKU3VuIE5vdiAyOSAwODozNzoxMyAxOTkyICBGcmVkIEZpc2ggIChmbmZAY3lnbnVzLmNvbSkKCgkqIGFvdXR4LmggKHNvbWVfYW91dF9vYmplY3RfcCk6ICBQcm90ZWN0IGFyZyBwcm90b3R5cGUgaW4KCWNhbGxiYWNrX3RvX3JlYWxfb2JqZWN0X3Agd2l0aCBQQVJBTVMgbWFjcm8gZm9yIG5vbi1BTlNJIGNvbXBpbGVycy4KClNhdCBOb3YgMjggMDQ6MDE6MjEgMTk5MiAgSm9obiBHaWxtb3JlICAoZ251QGN5Z251cy5jb20pCgoJKiBhb3V0LXRhcmdldC5oLCBhb3V0ZjEuaCwgdHJhZC1jb3JlLmMsIGNvZmZjb2RlLmgsIGxpYmFvdXQuaCwKCWxpYmJmZC1pbi5oLCBiZmQtaW4uaDogRWxpbWluYXRlIGFsbCBQUk9UTyBjYWxscywgcmVwbGFjZSB3aXRoCglQQVJBTVMgZm9yIHJlYWRhYmlsaXR5LgoKCSogYW91dHguaDogIEFkZCB0eXBlIHRvIGNhbGxiYWNrIHBhcmFtZXRlci4KCSogY29mZi1taXBzLmM6ICBEb24ndCBjYWxsIHRyYWQtY29yZS5oLCBub3QgbmVlZGVkLgoJKiB0cmFkLWNvcmUuYzogIEluY29ycG9yYXRlIHRyYWQtY29yZS5oIGRlY2xhcmF0aW9ucy4gIEZpeCBjb21tZW50cy4KCSogdHJhZC1jb3JlLmg6ICBFbGltaW5hdGUsIHVudXNlZC4KCldlZCBOb3YgMTggMTM6MTY6MTcgMTk5MiAgU3RldmUgQ2hhbWJlcmxhaW4gIChzYWNAdGhlcHViLmN5Z251cy5jb20pCgoJKiBmb3JtYXQuYyAoYmZkX2NoZWNrX2Zvcm1hdCk6IGlmIGRlZmF1bHQgdGFyZ2V0IGlzbid0IGZvdW5kCgl0aGVuIGxvb2sgdGhyb3VnaCB0aGUgZW50aXJlIGxpc3QgcmF0aGVyIHRoYW4gcmV0dXJuIGVhcmx5LgoKTW9uIE5vdiAxNiAxNDozMzowMyAxOTkyICBkYXZpZCBkIGB6b28nIHp1aG4gICh6b28gYXQgY2lyZGFuLmN5Z251cy5jb20pCgoJKiBjb25maWcvaTk2MC1jb2ZmLm10OiByZW9yZGVyIHZlYyB0byBtYXRjaCBiZmRfY2hlY2tfZm9ybWF0IChmcm9tIFBlcikKClRodSBOb3YgMTIgMTc6MDE6NDEgMTk5MiAgZGF2aWQgZCBgem9vJyB6dWhuICAoem9vIGF0IGNpcmRhbi5jeWdudXMuY29tKQoKCSogTWFrZWZpbGUuaW46IHBhc3MgZG93biBwcmVmaXggYW5kIGV4ZWNfcHJlZml4IGluIEZMQUdTX1RPX1BBU1MKClRodSBOb3YgMTIgMDk6NDY6NDcgMTk5MiAgU3RldmUgQ2hhbWJlcmxhaW4gIChzYWNAdGhlcHViLmN5Z251cy5jb20pCgoJKiBjb2ZmLXo4ay5jOiBjaGVja3BvaW50LCBtb3JlIGFkZHJlc3NpbmcgbW9kZXMgaGFuZGxlZAoJKiBjb2ZmY29kZS5oIChnZXRfdmFsdWUpOiBkb24ndCB0cnVuY2F0ZSByZWxvYy0+YWRkZW5kIGZpZWxkLCBpdCdzCglhIGxvbmcgbm93LgoKV2VkIE5vdiAxMSAyMzo1Nzo1NSAxOTkyICBCcmVuZGFuIEtlaG9lICAoYnJlbmRhbkBjeWdudXMuY29tKQoKCSogd2UzMmsubXQgKFRERUZBVUxUUyk6IFVzZSB3ZTMya2NvZmZfdmVjLCBub3QgaTM4NmNvZmZfdmVjLgoKVHVlIE5vdiAxMCAxNDowNDozOCAxOTkyICBkYXZpZCBkIGB6b28nIHp1aG4gICh6b28gYXQgY2lyZGFuLmN5Z251cy5jb20pCgoJKiBNYWtlZmlsZS5pbjogbWlub3IgdHdlYWtzIHRvIG1ha2UgJChDQykgY29tbWFuZCBsaW5lcyBtb3JlIGNvbnNpc3RlbnQKCk1vbiBOb3YgIDkgMjM6NTg6MTcgMTk5MiAgSm9obiBHaWxtb3JlICAoZ251QGN5Z251cy5jb20pCgoJKiBvcG5jbHMuYyAoYmZkX2Zkb3BlbnIsIGJmZF9jbG9zZSk6ICBBZGQgZG9jIGFib3V0IGNhY2hlaW5nCglhbmQgYWJvdXQgd2hlbiBmaWxlIGRlc2NyaXB0b3JzIGFyZSBjbG9zZWQuCgpTYXQgTm92ICA3IDAwOjQyOjIwIDE5OTIgIEtlbiBSYWVidXJuICAocmFlYnVybkBjYW1icmlkZ2UuY3lnbnVzLmNvbSkKCgkqIGJvdXQuYyAoYl9vdXRfc3F1aXJ0X291dF9yZWxvY3MpOiBNYWtlIHN1cmUgYWxpZ25tZW50IHJlbG9jcyBnZXQKCXdyaXR0ZW4gb3V0IGNvcnJlY3RseS4KClRodSBOb3YgIDUgMTU6MzQ6MTkgMTk5MiAgSWFuIExhbmNlIFRheWxvciAgKGlhbkBjeWdudXMuY29tKQoKCSogc2VjdGlvbi5jOiBOZXcgc2VjdGlvbiBiaXQgU0VDX1NIQVJFRF9MSUJSQVJZLgoJY29mZmNvZGUuaCAoc3R5cF90b19zZWNfZmxhZ3MpOiBpZiBTVFlQX05PTE9BRCAmJiAoU1RZUF9URVhUIHx8CglTVFlQX0RBVEEpLCBzZXQgU0VDX1NIQVJFRF9MSUJSQVJZLiAgVGhpcyBzZWVtcyB0byBiZSBjb3JyZWN0IGZvcgoJaTM4Ni1zeXN2LgoKVGh1IE5vdiAgNSAwNDo0MzowOSAxOTkyICBKb2huIEdpbG1vcmUgIChnbnVAY3lnbnVzLmNvbSkKCgkqIHRhcmdldHMuYyAoc3RydWN0IGJmZF90YXJnZXQpOiAgRWxpbWluYXRlIHRoZSBTREVGIGFuZCBTREVGX0ZNVAoJbWFjcm9zOyB1c2UgUEFSQU1TIHRvIGRlY2xhcmUgdGhlIGZ1bmN0aW9uIHBvaW50ZXJzIGludm9sdmVkLgoKCSogYmZkLWluLmgsIGJmZC5jLCBsaWJiZmQuaCwgcmVsb2MuYywgc2VjbGV0LmgsIHNlY3Rpb24uYywKCXRhcmdldHMuYzogUmVuYW1lIHN0cnVjdCBiZmRfc2VjbGV0X3N0cnVjdCB0byBzdHJ1Y3QgYmZkX3NlY2xldC4KClRodSBOb3YgIDUgMDI6NTk6MDkgMTk5MiAgSm9obiBHaWxtb3JlICAoZ251QGN5Z251cy5jb20pCgoJQ2xlYW51cDogIFJlcGxhY2UgYWxsIHVzZXMgb2YgRVhGVU4gaW4gdGhlIEJGRCBzb3VyY2VzLCB3aXRoIFBBUkFNUy4KCgkqIGFyY2h1cmVzLmMsIHJlbG9jLmMsIHNlY3Rpb24uYywgdGVraGV4LmM6ICBVc2UgUEFSQU1TIGluCglkZWNsYXJpbmcgcG9pbnRlcnMgdG8gZnVuY3Rpb25zLgoJKiBjYWNoZS5jLCBlbGYuYzogIE1vdmUgc3RhdGljIGZ1bmN0aW9uIGRlY2xzIHRvIHRvcCwgdXNlIFBBUkFNUy4KCSogc2VjbGV0Lmg6ICBEZWNsYXJlIGV4dGVybmFsIGZ1bmN0aW9uIHdpdGggUEFSQU1TLgoKCSogZG9jL2NoZXcuYyAoZXhmdW5zdHVmZik6ICBFbGltaW5hdGUuCgkocGFyYW1zdHVmZik6ICBSZXBsYWNlIGV4ZnVuc3R1ZmYgd2l0aCBmdW5jdGlvbiB0byBnZW5lcmF0ZSBQQVJBTVMuCgkqIGRvYy9wcm90by5zdHI6ICBVc2UgcGFyYW1zdHVmZiByYXRoZXIgdGhhbiBleGZ1bnN0dWZmLgoKCSogbGliYmZkLmg6ICBVcGRhdGUsIGJhc2VkIG9uIGNoYW5nZXMgaW4gc291cmNlIGNvZGUgYW5kIGNoZXcuCgpXZWQgTm92ICA0IDIyOjQ3OjI5IDE5OTIgIEpvaG4gR2lsbW9yZSAgKGdudUBjeWdudXMuY29tKQoKCSogbGliaWVlZS5oOiAgQWRkIEZJWE1FIGFib3V0IHJlbW92aW5nIGxpbWl0IG9uIG51bWJlciBvZiBzZWN0aW9ucy4KCSogYmZkLWluLmg6ICBJbXByb3ZlIGNvbW1lbnRzIHRvIG1ha2UgaXQgY2xlYXIgdGhhdCBiZmQuaCBpcwoJdGhlIHdyb25nIHBsYWNlIHRvIGVkaXQgdGhpcyBmaWxlLgoJKiBNYWtlZmlsZS5pbiAoaW5zdGFsbCk6ICBJbnN0YWxsIGFuc2lkZWNsLmggYW5kIG9ic3RhY2suaCBpbiB0aGUKCXNhbWUgcGxhY2VzIHdoZXJlIHdlIGluc3RhbGwgYmZkLmguCgpXZWQgTm92ICA0IDEzOjQwOjIzIDE5OTIgIFNlYW4gRXJpYyBGYWdhbiAgKHNlZkBjeWdudXMuY29tKQoKCSogY29mZmNvZGUuaCAoY29mZl9zd2FwX2F1eF9vdXQsIGNvZmZfc3dhcF9hdXhfaW4pOiAgY2hlY2sgZm9yCglzeW1ib2wgdHlwZSBiZWZvcmUgYmxpbmRseSBtb2RpZnlpbmcgdGhlIGF1eGVudC4gIFNwZWNpZmljYWxseSwKCW9ubHkgbW9kaWZ5IHRoZSBlbmRuZHggZmllbGRzIGZvciB0eXBlcyB0aGF0IG5lZWQgaXQsIGFuZCBkb24ndAoJc2V0IHRoZSBhcnJheSBpbmZvcm1hdGlvbiBmb3Igbm9uLWFycmF5cy4KCldlZCBOb3YgIDQgMDk6MzA6NTAgMTk5MiAgS2VuIFJhZWJ1cm4gIChyYWVidXJuQGN5Z251cy5jb20pCgoJKiBhb3V0eC5oIChzb21lX2FvdXRfb2JqZWN0X3ApOiBTZWN0aW9uIGxpc3Qgc2hvdWxkIGJlIHNldCB1cAoJY29ycmVjdGx5IGFueXdheXM7IGRvbid0IGhhdmUgdG8gc2V0IHVwICJuZXh0IiBwb2ludGVycyBtYW51YWxseS4KCk1vbiBOb3YgIDIgMTI6MzY6MTQgMTk5MiAgSWFuIExhbmNlIFRheWxvciAgKGlhbkBjeWdudXMuY29tKQoKCSogY29uZmlnL2RlbHRhODgubWgsIGNvbmZpZy9ocDMwMC5taCwgY29uZmlnL2hwcGFocHV4Lm1oLAoJY29uZmlnL2kzODZ2Lm1oOiByZW1vdmVkIC1EVVNHIGZyb20gSERFRklORVMuCglob3N0cy9kZWx0YTg4LmgsIGhvc3RzL2hwMzAwLmgsIGhvc3RzL2hwcGFocHV4LmgsIGhvc3RzL2kzODZ2Lmg6CglkZWZpbmVkIFVTRV9VVElNRS4KCWhvc3RzL2kzODZ2Lmg6IGRvbid0IGRlZmluZSBQT1NJWF9VVElNRS4KCkZyaSBPY3QgMzAgMTY6MTM6NTIgMTk5MiAgU3RldmUgQ2hhbWJlcmxhaW4gIChzYWNAdGhlcHViLmN5Z251cy5jb20pCgoJKiBpZWVlLmMgKGllZWVfc2x1cnBfc2VjdGlvbnMpOiBtYWtlIGEgcHJpdmF0ZSBjb3B5IG9mIHRoZQoJc2VjdGlvbidzIG5hbWUgYmVmb3JlIHRydW5jYXRpbmcgaXQuCgpUaHUgT2N0IDI5IDA4OjMwOjUwIDE5OTIgIFN0ZXZlIENoYW1iZXJsYWluICAoc2FjQHRoZXB1Yi5jeWdudXMuY29tKQoKCSogaHBwYS5jOiBhZGQgc3ltYm9sX2xlYWRpbmdfY2hhciBlbnRyeSBpbiB0cmFuc2ZlciB2ZWMKCixXZWQgT2N0IDI4IDE2OjExOjU3IDE5OTIgIFN0ZXZlIENoYW1iZXJsYWluICAoc2FjQHRoZXB1Yi5jeWdudXMuY29tKQoKCSogaWVlZS5jIChnZXRfc3ltYm9sKTogY2FuIG5vdyBjb3BlIHdoZW4gdHdvIHN5bWJvbHMgb2YgYQoJZGlmZmVyZW50IGNsYXNzLCBidXQgdGhlIHNhbWUgaW5kZXggbnVtYmVyIG9jY3VyIGNvbnNlY3V0aXZlbHkuCgkoZ2V0X3NlY3Rpb25fZW50cnkpOiBuaWNlciBuYW1lIGZvciBzZWN0aW9ucyBiZWluZyBmb3J3YXJkCglyZWZlcmVuY2VkLiAoaWVlZV9hcmNoaXZlX3ApOiBkb24ndCBmcmVlIHRoZSBmaWxlbmFtZSBzdHJpbmcsCglzaW5jZSBpdCB3YXMgbmV2ZXIgbWFsbG9jZWQuCgpXZWQgT2N0IDI4IDEzOjQyOjA5IDE5OTIgIEpvaG4gR2lsbW9yZSAgKGdudUBjeWdudXMuY29tKQoKCSogY29mZmNvZGUuaCAoY29mZl93cml0ZV9vYmplY3RfY29udGVudHMpOiAgWmVybyB0aW1lc3RhbXAgZmllbGQuCgpUdWUgT2N0IDI3IDEyOjI0OjM0IDE5OTIgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AY3lnbnVzLmNvbSkKCgkqIGNvZmZjb2RlLmggKGNvZmZfc3dhcF9hdXhfb3V0KTogc2V0IHRoZSBmY25hcnkgaW5mbyBiZWZvcmUKCW9wdGlvbmFsbHkgc2V0dGluZyB0aGUgZGltZW4gaW5mbywgc2luY2UgdGhleSBhcmUgaW4gdGhlIHNhbWUKCW1lbW9yeSBsb2NhdGlvbnMuICBBbHNvIHplcm8gb3V0IGV4dGVybmFsIGF1eGVudC4KCShjb2ZmX3dyaXRlX3N5bWJvbCk6IGRvbid0IHplcm8gZXh0ZXJuYWwgYXV4ZW50OyBub3cgZG9uZSBpbgoJY29mZl9zd2FwX2F1eF9vdXQuCgpGcmkgT2N0IDIzIDEzOjU1OjM1IDE5OTIgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AY3lnbnVzLmNvbSkKCgkqIENoZWNrIGZjbG9zZSByZXR1cm4gdmFsdWUgZm9yIGVycm9ycy4KCWxpYmJmZC5oOiBiZmRfY2FjaGVfY2xvc2Ugbm93IHJldHVybnMgYSBib29sZWFuLgoJY2FjaGUuYyAoYmZkX2NhY2hlX2RlbGV0ZSk6IHJldHVybiBmY2xvc2Ugc3VjY2VzcyB2YWx1ZS4KCShiZmRfY2FjaGVfY2xvc2UpOiByZXR1cm4gYmZkX2NhY2hlX2RlbGV0ZSByZXR1cm4gdmFsdWUuCglvcG5jbHMuYyAoYmZkX2Nsb3NlLCBiZmRfY2xvc2VfYWxsX2RvbmUpOiByZXR1cm4gcmVzdWx0IG9mCgliZmRfY2FjaGVfY2xvc2UuCgpGcmkgT2N0IDIzIDEwOjMyOjM2IDE5OTIgIFN0ZXZlIENoYW1iZXJsYWluICAoc2FjQHRoZXB1Yi5jeWdudXMuY29tKQoKCSogc2VjbGV0LmMgKHJlbCk6IGRvbid0IGxvYWQgc2VjdGlvbnMgd2l0aG91dCB0aGUgU0VDX0xPQUQgYml0LgoKVGh1IE9jdCAxNSAxMDoxNjozNSAxOTkyICBTdGV2ZSBDaGFtYmVybGFpbiAgKHNhY0B0aGVwdWIuY3lnbnVzLmNvbSkKCgkqIGNvZmYtbTY4ay5jIChtNjhrX2hvd3RvMnR5cGUsIFNFTEVDVF9SRUxPQyk6IG5ldyBmdW5jdGlvbiB0bwoJd29yayBvdXQgYSBjb2ZmIHJlbG9jYXRpb24gdHlwZSBmcm9tIGEgaG93dG8ncyBhdHRyaWJ1dGVzIHJhdGhlcgoJdGhhbiB1c2luZyB0aGUgaW5wdXQgcl90eXBlIGZpZWxkLiBUaGlzIGZpeGVzIFBSMTY3NyBhbmQgYWxsb3dzCgljb252ZXJzaW9uIG9mIGEub3V0IHJlbG9jcyB0byBjb2ZmIHJlbG9jcy4KCgkqIGNvZmZjb2RlLmggKGNvZmZfd3JpdGVfcmVsb2NzKTogaWYgc3VwcGxpZWQgYSByZWxvY2F0aW9uCglyZWxhdGl2ZSB0byBhbiBhYnNvbHV0ZSBzeW1ib2wsIHVzZSB0aGUgcmlnaHQgc3ltYm9sIGluZGV4LgoKCSogcmVsb2MuYyAoYmZkX3BlcmZvcm1fcmVsb2NhdGlvbik6IGRvIGEgcGFydGlhbCBsaW5rIGZvciBjb2ZmCglyZWxvY3MgcmlnaHQuCgpGcmkgT2N0IDIzIDA4OjE1OjU2IDE5OTIgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AY3lnbnVzLmNvbSkKCgkqIGNoYW5nZXMgdG8gc3VwcG9ydCBpMzg2LXN5c3Ygd2l0aCBzaGFyZWQgbGlicmFyaWVzOgoJKiBjb2ZmY29kZS5oIChzZWNfdG9fc3R5cF9mbGFncyk6IGlmIFRXT19EQVRBX1NFQ1MgaXMgZGVmaW5lZCwKCWNoZWNrIGZvciAuZGF0YTI7IGlmIF9MSUIgaXMgZGVmaW5lZCwgY2hlY2sgZm9yIGl0OyBtYXAKCVNFQ19ORVZFUl9MT0FEIHRvIFNUWVBfTk9MT0FELgoJKHN0eXBfdG9fc2VjX2ZsYWdzKTogbWFwIFNUWVBfTk9MT0FEIHRvIFNFQ19ORVZFUl9MT0FELgoJKG1ha2VfYV9zZWN0aW9uX2Zyb21fZmlsZSk6IGlmIFRXT19EQVRBX1NFQ1MsIGFjY2VwdCAuZGF0YTIuCgkoY29mZl93cml0ZV9vYmplY3RfY29udGVudHMpOiBmb3JjZSB2YWRkciBvZiAubGliIHRvIDA7IHNldCBzY25wdHIKCWlmIHNlY3Rpb24gaGFzIGNvbnRlbnRzLCBub3QganVzdCBpZiBpdCBpcyBsb2FkYWJsZTsgaWYKCVRXT19EQVRBX1NFQ1MsIGNoZWNrIGZvciAuZGF0YTIKCShjb2ZmX3NldF9zZWN0aW9uX2NvbnRlbnRzKTogc2V0IHZtYSBvZiAubGliIHNlY3Rpb24gdG8gbnVtYmVyIG9mCgkubGliIHNlY3Rpb25zLgoJKiBjb2ZmLWkzODYuYzogZGVmaW5lIFRXT19EQVRBX1NFQ1M7IHVzZSBhIHNwZWNpYWwgQ0FMQ19BRERFTkQ7Cglkb24ndCBkZWZpbmUgY29mZl93cml0ZV9hcm1hcCB0byBic2Rfd3JpdGVfYXJtYXAuCgkqIGhvc3RzL2kzODZ2Lmg6IGRvbid0IGluY2x1ZGUgPHV0aW1lLmg+LCBzaW5jZSBpdCBpcyBub3QgcHJvdmlkZWQKCWJ5IFNWUjMuMi4KClRodSBPY3QgMjIgMjI6NDA6MjAgMTk5MiAgQnJlbmRhbiBLZWhvZSAgKGJyZW5kYW5AbGlzYS5jeWdudXMuY29tKQoKCSogc29sYXJpczIuaDogR2V0IHRoZSBkZWZpbml0aW9uIG9mIGFsbG9jYSBmcm9tIGFsbG9jYS5oIGlmIHdlCglhcmVuJ3QgdXNpbmcgZ2NjLgoKVGh1IE9jdCAyMiAwMzowNzoyOCAxOTkyICBKb2huIEdpbG1vcmUgIChnbnVAY3lnbnVzLmNvbSkKCgkqIGNvbmZpZ3VyZS5pbiAoaTk2MC0qLXthb3V0LGJvdXR9KTogIFN1cHBvcnQgdGhlc2UuCgpXZWQgT2N0IDIxIDAzOjQ2OjM0IDE5OTIgIEpvaG4gR2lsbW9yZSAgKGdudUBjeWdudXMuY29tKQoKCSogY29uZmlnL2EyOWstYW91dC5tdCAoREVGQVVMVF9UQVJHRVQpOiAgU2V0IHRvIG9uZSB0aGF0IGV4aXN0cy4KClRodSBPY3QgMTUgMTU6MDU6MzkgMTk5MiAgUGVyIEJvdGhuZXIgIChib3RobmVyQGN5Z251cy5jb20pCgoJKiBhcG9sbG82OC5oLCBhcG9sbG92NjguaCwgaHAzMDAuaCwgaTM4NnYuaCwgaXJpeDMuaDogUmVtb3ZlCgluby1sb25nZXItdXNlZCBkZWZpbml0aW9ucyBvZiBMX1NFVCBhbmQgTF9JTkNSLgoJKiBpMzg2bGludXguaDogIFR3ZWFrcyB0byBzbW9vdGggTGludXggYnVpbGQuCgpUaHUgT2N0IDE1IDAxOjMyOjIyIDE5OTIgIEpvaG4gR2lsbW9yZSAgKGdudUBjeWdudXMuY29tKQoKCSogc2VjbGV0Lmg6ICBBZGQgZW51bSB0YWcgdG8gYmZkX3NlY2xldF9lbnVtX3R5cGUuCgoJKiBiZmQtaW4uaCAoZmlsZV9wdHIpOiAgVXBkYXRlIGNvbW1lbnRzLCBtYWtlIEZJWE1FIHJlIG9mZl90LgoKCSogYW91dC1hZG9iZS5jLCBhb3V0ZjEuaCwgYXJjaGl2ZS5jLCBib3V0LmMsIGNvZmYtcnM2MDAwLmMsCgljb2ZmY29kZS5oLCBlbGYuYywgaWVlZS5jLCBsaWJhb3V0LmgsIGxpYmJmZC5jLCBvYXN5cy5jLAoJc2NvLWNvcmUuYzogIExpbnQ6ICBTZWNvbmQgYXJndW1lbnQgb2YgYmZkX3NlZWsgaXMgYWx3YXlzIGZpbGVfcHRyLgoJVGhpcmQgYXJndW1lbnQgaXMgU0VFS19TRVQgb3IgU0VFS19DVVIuICBSZXN1bHQgaXMgYWx3YXlzIDAgb3IgLTEuCgoJKiBhb3V0LWFkb2JlLmMsIGFvdXRmMS5oLCBhb3V0eC5oLCBib3V0LmMgY29mZi1tNjhrLmMsIGNvZmYtejhrLmMsCgljb2ZmY29kZS5oLCBlbGYuYywgbGliYW91dC5oLCBsaWJiZmQtaW4uaCwgc3JlYy5jOiAgTGludC4KCkZyaSBPY3QgIDkgMDM6NDY6MzcgMTk5MiAgSm9obiBHaWxtb3JlICAoZ251QGN5Z251cy5jb20pCgoJKiBjb25maWd1cmUuaG9zdDogIE5ldyBmaWxlLCBjb250YWlucyBtYXBwaW5nIG9mIGhvc3QgY29uZmlncwoJdG8gaG9zdCBzdXBwb3J0IGZpbGUgbmFtZXMgZm9yIGJmZCwgYmludXRpbHMsIG9wY29kZXMuCgkqIGNvbmZpZ3VyZS5pbjogIFVzZSBpdC4KCSogaTM4NmFvdXQuYzogIENsZWFudXAsIGR1bXAgVEFSR0VUX0lTX0xJVFRMRV9FTkRJQU5fUC4KCSogaTM4NmJzZC5jOiAgQ2xlYW51cCwgcmVmb3JtYXQuCgkqIGNvbmZpZy9pMzg2LWJzZC5tdDogIENvbW1lbnQgY2hhbmdlcy4KCSogY29uZmlnL2kzODZic2QubWg6ICBOZXcgZmlsZSBmb3IgY29yZSBmaWxlIHN1cHBvcnQuCgkqIGhvc3RzL2kzODZic2QuaDogIE1lcmdlIGNoYW5nZXMgZnJvbSBQZXRlciBTY2hhdWVyLgoJKiBib3V0LmMgKEFMSUdOKTogIFJlbmFtZSB0byBBTElHTkVSLCBzaW5jZSBzeXN0ZW0gaGVhZGVyIGZpbGVzCglvbiBCU0QgNC40IGRlZmluZSBBTElHTiAoc2lnaCEpLgoKVGh1IE9jdCAgOCAyMjoxODoxMCAxOTkyICBNYXJrIEVpY2hpbiAgKGVpY2hpbiBhdCB0d2VlZGxlZHVtYmVyLmN5Z251cy5jb20pCgoJKiBsaWJhb3V0LmggKGFvdXRfYmFja2VuZF9kYXRhKTogYWRkZWQgZXhlY19oZWFkZXJfbm90X2NvdW50ZWQKCWZpZWxkLiBGb3IgWk1BR0lDIGZpbGVzIG9ubHksIHdoZW4gdGV4dF9pbmNsdWRlc19oZWFkZXIgaXMgc2V0LCBieQoJZGVmYXVsdCB0aGUgbGVuZ3RoIG9mIHRoZSBleGVjIGhlYWRlciBpcyBjb3VudGVkIGluIHRoZSB0ZXh0CglzZWN0aW9uIHNpemUuIEZvciBnbzMyLCBleGVjIGhlYWRlciBpcyBtYXBwZWQgaW4gYnV0IGRvZXMgKm5vdCoKCWNvbnRyaWJ1dGUgdG8gdGhlIHNpemUgb2Ygc2VjdGlvbi4KCSogYW91dHguaCAoYW91dF9hZGp1c3Rfc2l6ZXNfYW5kX3ZtYXMpOiBpZiBleGVjX2hlYWRlcl9ub3RfY291bnRlZAoJaXMgbm90IHNldCwgYnV0IHp0aWggaXMsIGFkZCB0aGUgc2l6ZSBvZiB0aGUgZXhlYyBoZWFkZXIgdG8gdGhlCglyZWNvcmRlZCBzaXplIG9mIHRoZSB0ZXh0IHNlY3Rpb24uCgkqIGFvdXRmMS5oIChzdW5vczRfYW91dF9iYWNrZW5kKTogY2xlYXIgZXhlY19oZWFkZXJfbm90X2NvdW50ZWQuCgkqIGkzODZhb3V0LmMgKGkzODZhb3V0X2JhY2tlbmRfZGF0YSk6IHNldCBleGVjX2hlYWRlcl9ub3RfY291bnRlZC4KCUFsc28gc2V0IHRleHRfaW5jbHVkZXNfaGVhZGVyLgoJKiBhb3V0LXRhcmdldC5oICgqX2JhY2tlbmRfZGF0YSk6IGNsZWFyZSBleGVjX2hlYWRlcl9ub3RfY291bnRlZAoJYnkgZGVmYXVsdCBpbiBNWShiYWNrZW5kX2RhdGEpLgoKVGh1IE9jdCAgOCAxODoxMjo0OSAxOTkyICBLZW4gUmFlYnVybiAgKHJhZWJ1cm5AY3lnbnVzLmNvbSkKCgkqIGFvdXQtdGFyZ2V0LmggKGNhbGxiYWNrKTogRG9uJ3QgZGVmaW5lIHRoaXMgZnVuY3Rpb24gaWYgaXQgd29uJ3QgYmUKCXVzZWQuCgoJKiBhb3V0eC5oIChzb21lX2FvdXRfb2JqZWN0X3ApOiBSZXN0b3JlIG9sZCBhb3V0X2RhdGEgdmFsdWUgaWYgdGhpcwoJdHlwZSBkb2Vzbid0IG1hdGNoLiAgRG9uJ3QgbG9zZSBpZiBmaWxlIHNlY3Rpb25zIGhhdmUgYWxyZWFkeSBiZWVuCgljcmVhdGVkLgoJKHNldF9hcmNoX21hY2gpOiBTZXQgcmVsb2NfZW50cnlfc2l6ZS4KCShzbHVycF9zeW1ib2xfdGFibGUpOiBVc2UgYmZkX2hfZ2V0X3sxNiw4fSBmb3IgcmVhZWRpbmcgc3ltYm9sIGRhdGEuCgoJKiBob3N0cy9pMzg2YnNkLmg6IE5ldyBmaWxlLgoJKiBjb25maWd1cmUuaW46IFJlY29nbml6ZSBpWzM0XTg2LSotYnNkIGhvc3QuCgoJKiBhb3V0LXRhcmdldC5oIChjYWxsYmFjaywgd3JpdGVfb2JqZWN0X2NvbnRlbnRzKTogRGVsZXRlIHVudXNlZAoJdmFyaWFibGVzLgoKCSogYW91dHguaCAocmVsb2NfdHlwZV9sb29rdXApOiBOZXcgZnVuY3Rpb24uCgkqIGFvdXQtdGFyZ2V0LmggKE1ZX3JlbG9jX2hvd3RvX3R5cGVfbG9va3VwKTogVXNlIGl0IGFzIGRlZmF1bHQuCgkqIGFvdXRmMS5oIChzdW5vczRfcmVsb2NfdHlwZV9sb29rdXApOiBEZWxldGVkLgoJKE1ZX3JlbG9jX2hvd3RvX3R5cGVfbG9va3VwKTogRG9uJ3QgZGVmaW5lIGl0LgoKCSogYW91dHguaCAoYWRqdXN0X3NpemVzX2FuZF92bWFzKTogRG9uJ3QgYm90aGVyIHdpdGggcGFkZGluZyBmb3IKCU9NQUdJQyBmaWxlcy4KCShzbHVycF9zeW1ib2xfdGFibGUpOiBVc2UgaGVhZGVyIGJ5dGUgb3JkZXIsIG5vdCB0YXJnZXQgYnl0ZQoJb3JkZXIsIGZvciByZWFkaW5nIHN5bWJvbCBkYXRhLgoKVGh1IE9jdCAgOCAxNzozMzozOSAxOTkyICBKb2huIEdpbG1vcmUgIChnbnVAY3lnbnVzLmNvbSkKCgkqIGNvbmZpZ3VyZS5pbjogIFVuZG8gc29tZSBicmFpbiBkYW1hZ2UgaW4gdGhlIGhvc3Qgc2VjdGlvbi4KCSogY29uZmlndXJlLmluOiAgUmVmb3JtYXQgdGhlIHRhcmdldCBzZWN0aW9uLCB0ZXN0IG1hbnkgY29uZmlncy4KCSogTWFrZWZpbGUuaW4gKG1ha2UpOiAgUmVtb3ZlIG9ic29sZXRlIGBtYWtlIG1ha2UnLgoJKiBhb3V0eC5oIChzb21lX2FvdXRfb2JqZWN0X3ApOiAgTWFrZSBkZWZpbmVzIGxpbmUgdXAuCgpUaHUgT2N0ICA4IDA4OjUyOjQ4IDE5OTIgIFN0ZXZlIENoYW1iZXJsYWluICAoc2FjQHRoZXB1Yi5jeWdudXMuY29tKQoKCU5vdyBhIGJmZCBrbm93cyB3aGV0aGVyIHVuZGVyc2NvcmVzIGFyZSBub3JtYWxseSBwcmVwZW5kZWQKCXRvIHN5bWJvbHMgaW4gaXRzIGZpbGUgZm9ybWF0LgoKCSogYW91dC1hZG9iZS5jLCBhb3V0LXRhcmdldC5oLCBib3V0LmMsIGNvZmYtYTI5ay5jLCBjb2ZmLWg4MzAwLmMsCgljb2ZmLXo4ay5jOiB0YXJnZXRzIHNldCBzbyB0aGV5IGhhdmUgbGVhZGluZyB1bmRlcnNjb3JlCgkqIGNvZmYtaTM4Ni5jLCBjb2ZmLWk5NjAuYywgY29mZi1tNjhrLmMsIGNvZmYtbWlwcy5jLCBjb2ZmLW04OGsuYywKCWNvZmYtcnM2MDAwLmMsIGNvZmYtd2UzMmsuYywgZWxmLmMsIGllZWUuYywgc3JlYy5jOiB0YXJnZXRzIHNldAoJd2l0aG91dCBsZWFkaW5nIHVuZGVyc2NvcmUgZmxhZwoJKiB0YXJnZXRzLmM6IGFkZCBzeW1ib2wgbGVhZGluZyBjaGFyIHRvIHh2ZWMgZGVzY3JpcHRpb24KCSogYmZkLWluLmggKGJmZF9nZXRfc3ltYm9sX2xlYWRpbmdfY2hhcik6IG5ldyBtYWNyby4KCk1vbiBPY3QgIDUgMTQ6MzI6NTUgMTk5MiAgUGVyIEJvdGhuZXIgIChib3RobmVyQGN5Z251cy5jb20pCgoJKiBhcmNoaXZlLmM6ICBNYWtlIGVycm5vIGdsb2JhbC4KCSogYXJjaGl2ZS5jIChfYmZkX3dyaXRlX2FyY2hpdmVfY29udGVudHMpOiAgSWYgcmVhZCBmYWlscyAoYW5kCgllcnJubyE9MCkgc2V0IGJmZF9lcnJvciB0byBtYWxmb3JtZWRfYXJjaGl2ZSAoc2luY2UgdGhpcyBwcm9iYWJseQoJaW5kaWNhdGVzIGEgdHJ1bmNhdGVkIGFyY2hpdmUpLCByYXRoZXIgdGhhbiBzeXN0ZW1fY2FsbF9lcnJvci4KCk1vbiBPY3QgIDUgMDM6MzM6MzkgMTk5MiAgTWFyayBFaWNoaW4gIChlaWNoaW4gYXQgdHdlZWRsZWR1bWJlci5jeWdudXMuY29tKQoKCSogTWFrZWZpbGUuaW46IGFkZGVkIHJ1bGVzIGZvciBpMzg2YnNkLmMKCSogaTM4NmJzZC5jOiBuZXcgZmlsZSwgc3VwcG9ydGluZyAzODZic2QuCgkqIGNvbmZpZ3VyZS5pbjogcmVjb2duaXplIGkzODYtKi1ic2QgdGFyZ2V0LgoJKiBjb25maWcvaTM4Ni1ic2QubXQ6IG5ldyBmaWxlIC0gMzg2YnNkIHRhcmdldCBjb25maWd1cmF0aW9uLgoKVGh1IE9jdCAgMSAxNzo1MTowNyAxOTkyICBkYXZpZCBkIGB6b28nIHp1aG4gICh6b28gYXQgY2lyZGFuLmN5Z251cy5jb20pCgoJKiBjb25maWd1cmUuaW46IHJlLWFycmFuZ2UgaG9zdCBzZWN0aW9uIHRvIHVzZSAqLSotKiBub3RhdGlvbiwKCWNsZWFuIHVwIHNvbWUgb2YgdGhlIHRhcmdldCBzZWN0aW9uIGFzIHdlbGwKCgkqIHNlY2xldC5jOiBjYXN0IHJlc3VsdCBvZiBiZmRfZ2V0X3JlbG9jYXRlZF9zZWN0aW9uX2NvbnRlbnRzIHRvCglhdm9pZCBjb21waWxlciB3YXJuaW5ncwoKVHVlIFNlcCAyOSAxMzoyNDowOSAxOTkyICBLZW4gUmFlYnVybiAgKHJhZWJ1cm5AY3lnbnVzLmNvbSkKCgkqIGNvZmZjb2RlLmggKGNvZmZfc2VjdGlvbl9zeW1ib2wpOiBDcmVhdGUgc2VjdGlvbiBpZiBpdCBkb2Vzbid0CglhbHJlYWR5IGV4aXN0LgoKCSogYm91dC5jOiBSZW1vdmVkIHNvbWUgdW51c2VkIHZhcmlhYmxlcy4KClR1ZSBTZXAgMjkgMDg6MzA6MjEgMTk5MiAgSWFuIExhbmNlIFRheWxvciAgKGlhbkBjeWdudXMuY29tKQoKCSogUG9ydGFiaWxpdHkgZml4ZXMgZnJvbSBwMzoKCWNvZmZjb2RlLmggKGNvZmZfd3JpdGVfcmVsb2NzKTogcmVtb3ZlZCBzYW5pdHkgY2hlY2sgdW50aWwgaXQKCXdvcmtzIG9uIGFsbCB0YXJnZXRzIChwZXIgYWR2aWNlIGZyb20gc2FjKS4KCWNvbmZpZy9ocDkwMDAubWg6IG5ldyBmaWxlIHRvIGRlZmluZSBVU0cuCglocHBhLmM6ICN1bmRlZiBocHBhIGJlZm9yZSB0aGUgSlVNUF9UQUJMRS4KCWhvc3RzL2hwcGFocHV4Lmg6ICNkZWZpbmUgTkFUSVZFX0hQUEFIUFVYX0NPTVBJTEVSIGlmIG5vdAoJX19TVERDX18uCgl0YXJnZXRzLmMgKGJmZF90YXJnZXRfbGlzdCk6IGlmIE5BVElWRV9IUFBBSFBVWF9DT01QSUxFUiwgbWFrZQoJbG9jYWwgdmFyaWFibGUgdGFyZ2V0IHZvbGF0aWxlIHRvIGF2b2lkIG15c3RlcmlvdXMgYnVnIGluCglIUDkwMDAvNzAwIGNjLgoKU2F0IFNlcCAyNiAwMzo1ODo0OSAxOTkyICBKb2huIEdpbG1vcmUgIChnbnVAY3lnbnVzLmNvbSkKCgkqIGNvbmZpZy9ocHBhYnNkLm1oLCBjb25maWcuaHBwYWhwdXgubWg6ICBSZW1vdmUgdmFyaW91cyBib2dvc2l0eS4KCSogaG9zdHMvaHBwYWhwdXguaDogIFJlbW92ZSBiY29weSBhbmQgaW5kZXggY2lyY3VtdmVudGlvbnMuCgpGcmkgU2VwIDI1IDIyOjM2OjUyIDE5OTIgIEpvaG4gR2lsbW9yZSAgKGdudUBjeWdudXMuY29tKQoKCSogY29mZi16OGsuYyAoZnVuY19kYSwgZnVuY19qcik6ICBMaW50LgoJKiBjb2ZmY29kZS5oOiAgVXNlIG1lbXNldCByYXRoZXIgdGhhbiBiemVyby4KCSogZWxmLmM6ICBVc2UgbWVtY3B5IHJhdGhlciB0aGFuIGJjb3B5LgoJKiB0ZWtoZXguYzogIFVzZSBtZW1zZXQgcmF0aGVyIHRoYW4gYnplcm8uCgpGcmkgU2VwIDI1IDE5OjE0OjQ4IDE5OTIgIEpvaG4gR2lsbW9yZSAgKGdudUBjeWdudXMuY29tKQoKCUFkZCBBZG9iZSBhLm91dCBzdXBwb3J0LgoKCSogYW91dC1hZG9iZS5jOiAgTmV3IGZpbGUuICBTbyBmYXIsIG9ubHkgcmVhZHMgYS5vdXQuYWRvYmUuICBGSVhNRS4KCSogY29uZmlnL2Fkb2JlLm10OiAgQWRkLgoJKiBjb25maWd1cmUuaW4gKCotYWRvYmUtKiB0YXJnZXQpOiAgQWRkLgoJKiB0YXJnZXRzLmMgKGFfb3V0X2Fkb2JlX3ZlYyk6ICBBZGQuCgkqIE1ha2VmaWxlLmluOiAgYWRkIGFvdXQtYWRvYmUuYy4KCgkqIGNvbmZpZ3VyZS5pbjogIFB1dCB0d28gZGFzaGVzIGluIGFsbCBlbnRyaWVzIHRvIGJlIG1hdGNoZWQuCglBZGQgY29tbWVudHMgdG8gcmVtaW5kIHBlb3BsZSB0byBkbyB0aGlzLgoJUmVvcmRlciBhbGwgZW50cmllcyB0aGF0IG1hdGNoIG1hbnVmYWN0dXJlciBuYW1lcywgdG8gb2NjdXIKCWxhc3QsIHNvIHRoZXkgd2lsbCBvbmx5IGJlIG1hdGNoZWQgaWYgbm8gbW9yZSBzcGVjaWZpYyBtYXRjaAoJb2NjdXJzLiAgUmVtb3ZlIG1hbnVmYWN0dXJlcnMgYGFvdXQnLCBgYm91dCcsIGBjb2ZmJywgYW5kIGBlbGYnLgoKRnJpIFNlcCAyNSAxNTowMzoyMiAxOTkyICBCcmVuZGFuIEtlaG9lICAoYnJlbmRhbkBydGwuY3lnbnVzLmNvbSkKCgkqIGVsZi5jIChzZWN0aW9uX2Zyb21fZWxmX2luZGV4KTogUmV0dXJuIGJmZF9hYnNfc2VjdGlvbiwgbm90IDAsCglzaW5jZSB3ZSBzaG91bGQgbmV2ZXIgaGF2ZSBhIE5VTEwgc2VjdGlvbi4KCShlbGZfc2x1cnBfc3ltYm9sX3RhYmxlKTogSWYgc3Rfc2huZHggZG9lc24ndCBtYXRjaCBhbnkgb2Ygb3VyCgl0ZXN0cywgc2V0IHRoZSBzZWN0aW9uIHRvIGJmZF9hYnNfc2VjdGlvbi4KCkZyaSBTZXAgMjUgMTE6MTE6NTcgMTk5MiAgU3RldmUgQ2hhbWJlcmxhaW4gIChzYWNAdGhlcHViLmN5Z251cy5jb20pCgoJKiBjb2ZmLXo4ay5jOiBnZXR0aW5nIGNsb3NlcgoJKiBjb2ZmY29kZS5oIChjb2ZmX2dldF9yZWxvY2F0ZWRfc2VjdGlvbl9jb250ZW50cyk6IGFsbG93CglFWFRSQV9DQVNFUyBob29rcyBmb3IgZGlmZmVyZW50IGFyY2hlcyB0byBwcm92aWRlIGRpZmZlcmVudCByZWxvYwoJdHlwZXMuCgkqIHNlY2xldC5oOiAjaWZuZGVmIGFyb3VuZCBpdCB0byBhbGxvdyBtdWx0aXBsZSBpbmNsdXNpb24KCSogc3JlYy5jOiBtaW5vciBkb2MgZml4CgpNb24gU2VwIDIxIDE0OjMzOjU4IDE5OTIgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AY3lnbnVzLmNvbSkKCgkqIGhvc3RzL2hwOTAwMC5oLCBob3N0cy9pcml4My5oOiBjaGFuZ2VzIGZyb20gV1JTLgoKU3VuIFNlcCAyMCAwODo0ODoyNSAxOTkyICBGcmVkIEZpc2ggIChmbmZAY3lnbnVzLmNvbSkKCgkqIGNvbmZpZ3VyZS5pbjogIFVzZSBpMzg2LWVsZiBmb3IgYWxsIGkzODYvaTQ4NiBzeXN2NCBob3N0cywgbm90CglqdXN0IG5jci4KClRodSBTZXAgMTcgMDY6NDA6NDYgMTk5MiAgS2VuIFJhZWJ1cm4gIChyYWVidXJuQGNhbWJyaWRnZS5jeWdudXMuY29tKQoKCSogYm91dC5jIChiX291dF9zbHVycF9yZWxvY190YWJsZSk6IENsZWFyIGhvd3RvIGZpZWxkIGJlZm9yZQoJZmlsbGluZyBpbiByZWxvYywgaW4gY2FzZSBpbW1lZGlhdGVseSBmb2xsb3dpbmcgY29kZSBkb2Vzbid0IHNldAoJaXQuCgpGcmkgU2VwIDExIDE1OjM3OjA2IDE5OTIgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AY3lnbnVzLmNvbSkKCgkqIGNvZmZjb2RlLmggKGNvZmZfcmVudW1iZXJfc3ltYm9scyk6IHNldCB0aGUgbGFzdCByZW51bWJlcmVkCglzeW1ib2wgcG9pbnRlciB0byBOVUxMLCBhcyBleHBlY3RlZCBieSBjb2ZmX3dyaXRlX2xpbmVudW1iZXJzLgoJKGNvZmZfd3JpdGVfcmVsb2NzKTogYXBwYXJlbnRseSBhIG5vbi16ZXJvIGFkZGVuZCBpcyBPSyBmb3IgcmVsb2MKCXR5cGUgUl9JSENPTlNUIHVzZWQgb24gdGhlIDI5ay4KClRodSBTZXAgMTAgMTM6Mjg6MjQgMTk5MiAgSm9obiBHaWxtb3JlICAoZ251QGN5Z251cy5jb20pCgoJKiBvcG5jbHMuYyAoYmZkX2Zkb3BlbnIpOiAgRGV0ZXJtaW5lIHdoZXRoZXIgdG8gZmRvcGVuIGZvcgoJdXBkYXRlLCBiYXNlZCBvbiBob3cgdGhlIHVuZGVybHlpbmcgZmlsZSB3YXMgb3BlbmVkLiAgT2Jzb2xldGVzCglGQVNDSVNUX0ZET1BFTi4KCSogaG9zdHMvcnM2MDAwLmgsIGhvc3RzL3RhaG9lLmgsIGhvc3RzL3ZheGJzZC5oOiAgUmVtb3ZlCglhbGwgRkFTQ0lTVF9GRE9QRU4gY29uZmlnIGRlZmluZXMuCgpUdWUgU2VwICA4IDIxOjM3OjU4IDE5OTIgIEtlbiBSYWVidXJuICAocmFlYnVybkBjYW1icmlkZ2UuY3lnbnVzLmNvbSkKCgkqIHNwYXJjLW9wYy5jOiBNb3ZlZCB0byBvcGNvZGVzIGxpYnJhcnksIG5vdyB0aGF0IHdlIGhhdmUgb25lLgoJKiBNYWtlZmlsZTogRG9uJ3QgY29tcGlsZSBpdC4KClR1ZSBTZXAgIDggMTA6MTA6MzQgMTk5MiAgSWFuIExhbmNlIFRheWxvciAgKGlhbkBjeWdudXMuY29tKQoKCSogYW91dHguaDogYWRqdXN0X3NpemVzX2FuZF92bWFzIGRpZCBub3QgcmV0dXJuIGFueXRoaW5nLgoKVGh1IFNlcCAgMyAxOToyOTowNCAxOTkyICBQZXIgQm90aG5lciAgKGJvdGhuZXJAcnRsLmN5Z251cy5jb20pCgoJKiBzZWN0aW9uLmMgKGJmZF9zZXRfc2VjdGlvbl9mbGFncyk6ICBSZW1vdmUgYSBzYW5pdHkgY2hlY2suCglJdCBpcyB1bmZvcnR1bmF0ZWx5IGJyb2tlbiwgYW5kIHByZXZlbnRzIHN0cmlwIGZyb20gd29ya2luZy4KClRodSBTZXAgIDMgMTY6MTQ6NDAgMTk5MiAgSmltIFdpbHNvbiAgKHdpbHNvbkBzcGhhZ251bS5jeWdudXMuY29tKQoKCSogc3BhcmMtb3BjLmMgKGNvbmRyKTogUmVtb3ZlIGV4dHJhbmVvdXMsIGJ1dCBoYXJtbGVzcywgYmFja2xhc2gKCWNyZWF0ZWQgYnkgbGFzdCBjaGFuZ2UuCgpUaHUgU2VwICAzIDEzOjUyOjM4IDE5OTIgIFBlciBCb3RobmVyICAoYm90aG5lckBydGwuY3lnbnVzLmNvbSkKCgkqIHJlbG9jLmMgKHJlbG9jX2hvd3RvX3N0cnVjdCk6ICBNYWtlIHNpemUgZmllbGQgYmUgdW5zaWduZWQuCgkqIGJmZC1pbi5oOiAgQnVtcCB0byB2ZXJzaW9uIDIuMC4KClRodSBTZXAgIDMgMDk6MDU6MzcgMTk5MiAgU3R1IEdyb3NzbWFuICAoZ3Jvc3NtYW4gYXQgY3lnbnVzLmNvbSkKCgkqIGJvdXQuYywgY3B1LXo4ay5jOiAgVXNlIGVudW1zIHdoZW4gaW5pdGlhbGl6aW5nIHN0cnVjdHMgdG8ga2VlcAoJYnJhaW5kYW1hZ2VkIEhQL0Fwb2xsbyBjb21waWxlciBoYXBweS4KCldlZCBTZXAgIDIgMDI6NTM6MjkgMTk5MiAgSm9obiBHaWxtb3JlICAoZ251QGN5Z251cy5jb20pCgoJKiBmb3JtYXQuYzogIEZpeCBkZXNjcmlwdGlvbiBvZiBzZWFyY2ggZm9yIG1hdGNoaW5nIHRhcmdldC4KCSogYW91dHguaCAoc29tZV9hb3V0X29iamVjdF9wKTogIFNldCBTRUNfQ09ERSBhbmQgU0VDX0RBVEEuCgkqIHRhcmdldHMuYzogIFVwZGF0ZSBkZXNjcmlwdGlvbiBvZiBzZWFyY2ggZm9yIG1hdGNoaW5nIHRhcmdldC4KCSogTWFrZWZpbGUuaW4gKGRvX2NsZWFuLCBjbGVhbik6ICBGaXggaW5mYW50IG1vcnRhbGl0eSB0eXBvLgoJKGRvY2Rpcik6ICBTZXQgdG8gLi9kb2MsIG5vdCAke3NyY2Rpcn0vZG9jLCB3aGljaCBoYXMgbm8gbWFrZWZpbGUuCgkoejhrIGFuZCB3ZTMyayBmaWxlcyk6ICBgKi5vOiAqLmMnOiBhdm9pZCBTdW4gTWFrZSBidWcuCgpXZWQgU2VwICAyIDAwOjI2OjMyIDE5OTIgIFBlciBCb3RobmVyICAoYm90aG5lckBydGwuY3lnbnVzLmNvbSkKCgkqIE1ha2VmaWxlLmluOiAgQWRkZWQgbW9zdGx5Y2xlYW4vY2xlYW4vZGlzdGNsZWFuIHJ1bGVzLgoKVHVlIFNlcCAgMSAxMzozODo0MCAxOTkyICBQZXIgQm90aG5lciAgKGJvdGhuZXJAY3lnbnVzLmNvbSkKCgkqIHRhcmdldHMuYyAodGFyZ2V0X3ZlY3Rvcik6ICBUYWtlIG91dCBvYXN5cyAodW5sZXNzIHRoYXQgaXMKCXRoZSBkZWZhdWx0KTogIEJlY2F1c2UgdGhlcmUgaXMgbm8gbWFnaWMgbnVtYmVyIGluIGFyY2hpdmVzLAoJdGhlcmUgY2FuIGJlIGFubm95aW5nIHRhcmdldCBtaXMtbWF0Y2hlcy4KCk1vbiBBdWcgMzEgMTA6MTE6MzcgMTk5MiAgSmltIFdpbHNvbiAgKHdpbHNvbkBzcGhhZ251bS5jeWdudXMuY29tKQoKCSogc3BhcmMtb3BjLmM6IFJpZ29yb3VzbHkgdXBkYXRlZCB0byBtYXRjaCBhcmNoaXRlY3R1cmUgbWFudWFsLgoKTW9uIEF1ZyAzMSAwODowNzo1OCAxOTkyICBTdGV2ZSBDaGFtYmVybGFpbiAgKHNhY0B0aGVwdWIuY3lnbnVzLmNvbSkKCgkqIGFvdXR4LmggKGFvdXQ8bj5zd2FwX2V4dF9yZWxvY19vdXQpLCBib3V0LmMKCShiX291dF9zcXVpcnRfb3V0X3JlbG9jcyk6IGZpeCBidWcgMTUwNiB3aGVyZSBhYnMgc3ltYm9scyBhdHRhY2hlZAoJdG8gdGhlIGJ1aWx0LWluIGFic19zZWN0aW9uIHdlcmUgbm90IHdyaXR0ZW4gb3V0IGNvcnJlY3RseS4KCkZyaSBBdWcgMjggMTY6Mjk6MTUgMTk5MiAgSWFuIExhbmNlIFRheWxvciAgKGlhbkBjeWdudXMuY29tKQoKCSogYXJjaGl2ZS5jIChiZmRfc2x1cnBfYnNkX2FybWFwKTogaWYgdGhlIHN5bWRlZl9jb3VudCBpcyB0b28KCWxhcmdlLCBhc3N1bWUgd2UncmUgdXNpbmcgYSBzd2FwcGVkIGJ5dGUgb3JkZXIgYW5kIGZhaWwgd2l0aAoJd3JvbmdfZm9ybWF0IHJhdGhlciB0aGFuIGR1bXBpbmcgY29yZS4KClRodSBBdWcgMjcgMTM6MDU6MjggMTk5MiAgQnJlbmRhbiBLZWhvZSAgKGJyZW5kYW5AY3lnbnVzLmNvbSkKCglBZGQgcHJlbGltaW5hcnkgc3VwcG9ydCBmb3IgdGhlIHdlMzJrOgoKCSogTWFrZWZpbGUuaW4sIGFyY2h1cmVzLmMsIGNvZmZvY29kZS5oLCBjb25maWd1cmUuaW4sIHRhcmdldHMuYzoKCU1pbm9yIGVkaXRzLgoJKiBjb2ZmLXdlMzJrLmMsIGNwdS13ZTMyay5jLCBjb25maWcvd2UzMmsubXQsIGhvc3RzL3dlMzJrLmg6IE5ldyBmaWxlcy4KCldlZCBBdWcgMjYgMTQ6MjA6MTYgMTk5MiAgU3RldmUgQ2hhbWJlcmxhaW4gIChzYWNAdGhlcHViLmN5Z251cy5jb20pCgoJKiBib3V0LmM6IGFkZGVkIHN1cHBvcnQgZm9yIHJlbGF4YWJsZSBhbGlnbm1lbnQgcmVsb2NzLgoKCSogc2VjbGV0LmMgKHJlbCwgc2VjbGV0X2R1bXBfc2VjbGV0LCBzZWNsZXRfZHVtcCk6IGdldCB0aGUgYXBwIHRvCglwYXNzIGRvd24gcG9pbnRlciB0byBwbGF5IGFyZWEgcmF0aGVyIHRoYW4gdXNlIGFsbG9jYQoKCSogY3B1LXo4ay5jIChjb21wYXRpYmxlKTogbWFkZSBzdGF0aWMgdG8gcmVkdWNlIG5hbWUgc3BhY2UKCXBvbHV0aW9uLgoKVHVlIEF1ZyAyNSAwODozOToxMCAxOTkyICBTdGV2ZSBDaGFtYmVybGFpbiAgKHNhY0B0aGVwdWIuY3lnbnVzLmNvbSkKCiAgICAgICAgQWRkIGJhc2ljIHN1cHBvcnQgZm9yIHRoZSB6OGs6CgoJKiBNYWtlZmlsZS5pbiwgYXJjaHVyZXMuYywgY29mZmNvZGUuaCwgY29uZmlndXJlLmluLCByZWxvYy5jLAoJc2VjdGlvbi5jLCB0YXJnZXRzLmMsCgoJKiBzeW1zLmM6IG1vdmUgbWlzLWluc2VydGVkIHBhdGNoLgoKRnJpIEF1ZyAxNCAxNTozOToyOSBQRFQgMTk5MiAgSG93YXJkIENodSAgKGh5Y0BoYW5hdW1hLmpwbC5uYXNhLmdvdikKCglEb2N1bWVudGF0aW9uIGZpeGVzOgoJKiBjdG9yLmMsIGZvcm1hdC5jLCBzZWN0aW9uLmMsIHJlbG9jLmM6IGFwcGVuZCAiIC0iIHRvIGl0ZW0gdGFncy4KCSogcmVsb2MuYywgc2VjdGlvbi5jLCBzeW1zLmMsIHRhcmdldHMuYzogYWRkIERPQ0REIGJlZm9yZSBAbm9kZQoJCWNvbW1lbnRzLgoJKiByZWxvYy5jOiBicmVhayBvdXQgYWRkZW5kIGl0ZW0gZnJvbSBzdXJyb3VuZGluZyB0ZXh0LgoKCSogZG9jLnN0ciAoRE9DREQpOiBEZWZpbmVkLiBBZGRzIHRleHQgdG8gb3V0cHV0LgoJKGJvZHl0ZXh0KTogUHV0IGJ1bGxldGl6ZSBiZWZvcmUga2lsbF9ib2d1c19saW5lcy4KCSogY2hldy5jIChidWxsZXRpemUpOiBFbmQgaXRlbWl6YXRpb24gYWZ0ZXIgYSBibGFuayBsaW5lLCB0bwoJcHJldmVudCBmb2xsb3dpbmcgdGV4dCBmcm9tIGJlaW5nIHN3YWxsb3dlZCB1cCBpbiBhbiBpdGVtLgoKTW9uIEF1ZyAyNCAyMDo1MDoyMiAxOTkyICBTdHUgR3Jvc3NtYW4gIChncm9zc21hbiBhdCBjeWdudXMuY29tKQoKCSogY29uZmlndXJlLmluOiAgQWRkIHNwYXJjbGl0ZSBhcyBhIHRhcmdldC4KCk1vbiBBdWcgMjQgMTI6MDY6MzEgMTk5MiAgU3RldmUgQ2hhbWJlcmxhaW4gIChzYWNAdGhlcHViLmN5Z251cy5jb20pCgoJKiBpZWVlLmMgKGllZWVfZ2V0X3N5bXRhYik6IGFsd2F5cyBudWxsIHRlcm1pbmF0ZSB0aGUgc3ltYm9sIGxpc3QsCglsaW50LgoKCSogY29mZmNvZGUuaCAoY29mZl9hZGRfbWlzc2luZ19zeW1ib2xzKTogaWYgc3ltYm9scyBkb24ndCBjb21lCglmcm9tIGEgY29mZiBmaWxlIChjc3ltIGlzIG51bGwpLCBkb250IGRlcmVmIHRoZW0KCgkqIGllZWUuYyAocGFyc2VfZXhwcmVzc2lvbik6IGdldCB0aGUgYW5zd2VyIHJpZ2h0IHdoZW4gYWRkaW5nIGFuCglhYnMrKHNlYytvZmYpLCAoaWVlZV9nZW5lcmljX3N0YXRfYXJjaF9lbHQpOiBjYWxsIGllZWVfb2JqZWN0X3AKCW9uIGVsdHMgc28gdGhhdCBmaWxlbmFtZSBpcyBmaWxsZWQgaW4uCgpUaHUgQXVnIDIwIDE5OjA1OjQ4IDE5OTIgIEtlbiBSYWVidXJuICAocmFlYnVybkBjeWdudXMuY29tKQoKCSogYm91dC5jIChob3d0b19hbGlnbl90YWJsZSk6IE5ldyBzZXQgb2YgcmVsb2NzLCB3aXRoIGVub3VnaAoJZGF0YSBmb3IgIm9iamR1bXAgLXIiIHRvIHdvcmsuCgkoYl9vdXRfcmVsb2NfdHlwZV9sb29rdXApOiBSZWNvZ25pemUgYWxpZ25tZW50IHJlbG9jcy4KClR1ZSBBdWcgMTggMTI6NTc6NDUgMTk5MiAgSWFuIExhbmNlIFRheWxvciAgKGlhbkBjeWdudXMuY29tKQoKIAkqIE1ha2VmaWxlLmluOiBhZGRlZCBGTEFHU19UT19QQVNTLCBhbmQgdXNlZCBpdCBmb3IgYWxsIHJlY3Vyc2l2ZQoJaW52b2NhdGlvbnMgb2YgbWFrZS4gIEFsc28sIGFsd2F5cyBjcmVhdGUgaW5zdGFsbGF0aW9uCglkaXJlY3Rvcmllcy4KCgkqIGNvbmZpZy9hcG9sbG92NjgubWg6IHJlbW92ZWQgLWcgZnJvbSBDQyBkZWZpbml0aW9uLgoKTW9uIEF1ZyAxNyAxMzo0MDowOCAxOTkyICBLZW4gUmFlYnVybiAgKHJhZWJ1cm5AY3lnbnVzLmNvbSkKCgkqIGNvbmZpZy9kZWNzdGF0aW9uLm1oIChIREVGSU5FUyk6IFNwZWNpZnkgIi1HIDQiIHRvIGF2b2lkCglvdmVyZmxvd2luZyBncC1vZmZzZXQgcmFuZ2UuCgpNb24gQXVnIDE3IDExOjQ0OjI4IDE5OTIgIFN0ZXZlIENoYW1iZXJsYWluICAoc2FjQHRoZXB1Yi5jeWdudXMuY29tKQoKCSogc3JlYy5jIChzcmVjX3NldF9zZWN0aW9uX2NvbnRlbnRzKTogZG9uJ3Qgd3JpdGUgb3V0IHNlY3Rpb25zCgl3aXRob3V0IHRoZSBMT0FEIGFuZCBBTExPQyBhdHRyaWJ1dGVzCgpNb24gQXVnIDE3IDExOjU1OjA3IDE5OTIgIEtlbiBSYWVidXJuICAocmFlYnVybkBjYW1icmlkZ2UuY3lnbnVzLmNvbSkKCgkqIGFyY2h1cmVzLmMsIGNwdS1tNjhrLmMsIGNwdS1zcGFyYy5jOiBVbmRvIDE2IEp1bmUgY2hhbmdlcy4KCSogbGliYW91dC5oIChzdHJ1Y3QgYW91dF9iYWNrZW5kX2RhdGEpOiBOZXcgY2FsbGJhY2sgInNldF9zaXplcyIuCgkqIGFvdXQtdGFyZ2V0LmggKGNhbGxiYWNrKTogRG9uJ3Qgc2V0IHBhZ2Uvc2VnIHNpemVzLgoJKG1rb2JqZWN0KTogRGl0dG8uCgkoc2V0X3NpemVzKTogTmV3IHJvdXRpbmUuCgkoYmFja2VuZF9kYXRhKTogUG9pbnQgdG8gaXQuCgkqIGFvdXRmMS5oIChzdW5vczRfc2V0X3NpemVzKTogSGVlZCBhcmNoaXRlY3R1cmUgd2hlbiBzZXR0aW5nIHNpemVzLgoJKHN1bm9zNF9hb3V0X2JhY2tlbmQpOiBQb2ludCB0byBpdC4KCSogYW91dHguaCAoc2V0X2FyY2hfbWFjaCk6IENhbGwgc2V0X3NpemVzIGNhbGxiYWNrLgoKRnJpIEF1ZyAxNCAxOToyMjoxOCAxOTkyICBQZXIgQm90aG5lciAgKGJvdGhuZXJAY3lnbnVzLmNvbSkKCgkqIGFvdXQtdGFyZ2V0Lmg6ICBNYWtlIF9iZmRfc2x1cnBfZXh0ZW5kZWRfbmFtZV90YWJsZSBiZQoJdGhlIGRlZmF1bHQuICBHaXZlbiB0aGF0IHdlICp3cml0ZSogdGhlIHN1Y2tlcnMgKGZvciBsb25nCglhcmNoaXZlIG1lbWJlciBuYW1lcyksIHdlIHJlYWxseSBvdWdodCB0byBiZSBhYmxlIHRvIHJlYWQgdGhlbSEKCSogdHJhZC1jb3JlLmM6ICBEb24ndCBpbmNsdWRlIDxtYWNoaW5lL3JlZy5oPi4gIEl0IGRvZXNuJ3QKCXNlZW0gdG8gYmUgbmVlZGVkLCBhbmQgbWFueSBtYWNoaW5lcyBkb24ndCBoYXZlIGl0LgoKVGh1IEF1ZyAxMyAwOTo1MzozOSAxOTkyICBTdGV2ZSBDaGFtYmVybGFpbiAgKHNhY0B0aGVwdWIuY3lnbnVzLmNvbSkKCgkqIGNvZmYtbTY4ay5jICh2ZWN0b3IpOiByZWFkIGFuZCB3cml0ZSBhcmNoaXZlcyBpbiBjb2ZmIGZvcm1hdC4KClR1ZSBBdWcgMTEgMTI6MTk6NDIgMTk5MiAgS2VuIFJhZWJ1cm4gIChyYWVidXJuQGN5Z251cy5jb20pCgoJKiBvcGMtc3BhcmMuYzogTmV3IGZpbGUuCgpTYXQgQXVnICA4IDIzOjE1OjM1IDE5OTIgIEZyZWQgRmlzaCAgKGZuZkBjeWdudXMuY29tKQoKCSogYm91dC5jIChiZmRfcmVsb2Nfc3RhdHVzX3R5cGUsIGNhbGxqX2NhbGxiYWNrKTogIENhc3Qgdm9pZCoKCXBvaW50ZXJzIHRvIGJmZF9ieXRlKiBiZWZvcmUgcGVyZm9ybWluZyBhcml0aG1ldGljIG9uIHRoZW0uICBTdWNoCgl1c2Ugd2l0aCBiYXJlIHZvaWQqIHBvaW50ZXJzIGlzIGEgZ2NjIGV4dGVuc2lvbi4KCSogY2FjaGUuYyAoYmZkX2NhY2hlX2RlbGV0ZSk6ICBGb3J3YXJkIGRlY2wgd2l0aCBwcm90b3R5cGUgZm9ybS4KCSogYXJjaGl2ZS5jIChub3JtYWxpemUpOiAgQWRkIHRvIENPTlNUIHRvIG1hdGNoIGFjdHVhbCB1c2FnZXMgd2l0aAoJQ09OU1QuCgpNb24gQXVnICAzIDAwOjM1OjI5IDE5OTIgIEZyZWQgRmlzaCAgKGZuZkBjeWdudXMuY29tKQoKCSogY29uZmlndXJlLmluOiAgUmVjb2duaXplIGk0ODYgaG9zdCBjcHUsIGFuZCB1c2UgaTM4Ni1lbGYKCWZvciBpNDg2LW5jci1zeXN2NC4KClNhdCBBdWcgIDEgMTM6NDk6NTkgMTk5MiAgRnJlZCBGaXNoICAoZm5mQGN5Z251cy5jb20pCgoJKiBjb25maWcvc3RyYXR1cy5tdCAoQ0MpOiAgUmVtb3ZlIGRlZmluaXRpb24uCgkqIGVsZi5jIChiZmRfc2VjdGlvbl9mcm9tX3NoZHIpOiAgVGVzdCBmb3IgdGhlIHBvc3NpYmlsaXR5IHRoYXQKCXNlY3Rpb25fZnJvbV9lbGZfaW5kZXggcmV0dXJucyBOVUxMIGFuZCBkb24ndCBkZXJlZmVyZW5jZSBpdC4KCk1vbiBKdWwgMjAgMDI6NDY6MDkgMTk5MiAgRC4gVi4gSGVua2VsLVdhbGxhY2UgIChndW1ieUBjeWdudXMuY29tKQoKCSogYWRkIGhwcGFfZGF0YSB0byBiZmQgdGRhdGEgKGluZGlyZWN0bHkgdmlhIHNlZikuCgoJKiBjb25maWcvaHBwYWhwdXgubWg6IGhwdXggaXMgLURVU0cgKHBhdGNoIGJ5IHNlZikKClNhdCBKdWwgMTggMTU6NTA6MTEgMTk5MiAgZGF2aWQgZCBgem9vJyB6dWhuICAoem9vIGF0IGNpcmRhbi5jeWdudXMuY29tKQoKCSogY29uZmlndXJlLmluOiBlcnJvciBtZXNzYWdlcyB0byBzdGRlcnIsIG5vdCBzdGRvdXQKCkZyaSBKdWwgMTcgMTg6MzI6NDYgMTk5MiAgSy4gUmljaGFyZCBQaXhsZXkgIChyaWNoQHJ0bC5jeWdudXMuY29tKQoKCSogYmZkLmMsIGNhY2hlLmMsIGNvZmYtYTI5ay5jLCBjb2ZmLWkzODYuYywgY29mZi1pOTYwLmMsCgkgIGNvZmYtbTY4ay5jLCBjb2ZmLW04OGsuYywgZGVtbzY0LmMsIGxpYmFvdXQuaCwgbGliYmZkLmMsCgkgIG9hc3lzLmMsIG9wbmNscy5jLCBzdW5vcy5jLCB0YXJnZXRzLmM6IHJlbW92ZWQgcmNzaWQncy4KCkZyaSBKdWwgMTcgMTc6MDY6NTYgMTk5MiAgZGF2aWQgZCBgem9vJyB6dWhuICAoem9vIGF0IGNpcmRhbi5jeWdudXMuY29tKQoKCSogY29uZmlndXJlLmluOiByZWNvZ25pemUgaHBwYSogaW5zdGVhZCBvZiBocHBhCgpUaHUgSnVsIDE2IDE2OjM5OjI1IDE5OTIgIFN0ZXZlIENoYW1iZXJsYWluICAoc2FjQHRoZXB1Yi5jeWdudXMuY29tKQoKCSogY29mZi1tNjhrLmM6IGFkZGVkIFJfUkVMTE9OR19ORUcgcmVsb2MgdHlwZSwgYW5kIGNoYW5nZWQKCVJUWVBFMkhPV1RPIHRvIGNvcGUgd2l0aCBzYW1lLgoJKiByZWxvYy5jIChiZmRfcGVyZm9ybV9yZWxvY2F0aW9uKTogYWRkZWQgc3VwcG9ydCBmb3Igc2l6ZSBvZiAtMgoJKHN1YnRyYWN0IGEgd29yZCByZWxvYyB0eXBlKS4gVXBkYXRlZCBkb2MuCgpUaHUgSnVsIDE2IDE2OjI4OjA5IDE5OTIgIEsuIFJpY2hhcmQgUGl4bGV5ICAocmljaEBydGwuY3lnbnVzLmNvbSkKCgkqIE1ha2VmaWxlLmluOiBtZXJnZWQgY2hhbmdlcyBmcm9tIHByb2dyZXNzaXZlLCByZW1vdmVkIHJjc2lkLgoKCSogYXJjaHVyZXMuYywgYXJjaGl2ZS5jLCBNYWtlZmlsZS5kb3M6IHJlbW92ZWQgcmNzaWQuCgpUaHUgSnVsIDE2IDA4OjA4OjI1IDE5OTIgIFN0ZXZlIENoYW1iZXJsYWluICAoc2FjQHRoZXB1Yi5jeWdudXMuY29tKQoKCSogYmZkLWluLmggOiBhZGQgQkZEX0lTX1JFTEFYQUJMRSBmbGFnCgkqIGJvdXQuYyAoYm91dF9zd2FwX2V4ZWNfaGVhZGVyX1tpbl9vdXRdKTogbmV3IGZpZWxkIGluIGV4ZWMKCWhlYWRlciBlX3JlbGF4YWJsZSwgbWFqb3IgaGFja2VyeSBpbiBjYWxsYmFja3MKCSogbGliYW91dC5oIDogYWRkIHNwYWNlIGZvciBhX3JlbGF4YWJsZS4KCSogc2VjbGV0LmMgKHJlbCk6IGRvbid0IHJlbGF4IGVtcHR5IHNlY3Rpb25zCgoKV2VkIEp1bCAxNSAwNzo1Nzo0NiAxOTkyICBTdGV2ZSBDaGFtYmVybGFpbiAgKHNhY0B0aGVwdWIuY3lnbnVzLmNvbSkKCgkqIHNlY3Rpb24uYyAoU1REX1NFQ1RJT04pOiBhZGQgc29tZSBjYXN0cyB0byB0aGUgaW5pdGlhbGl6ZXJzIGZvcgoJZHVtYiBjb21waWxlcnMKClR1ZSBKdWwgMTQgMTQ6MDY6MjggMTk5MiAgU3R1IEdyb3NzbWFuICAoZ3Jvc3NtYW4gYXQgY3lnbnVzLmNvbSkKCgkqIHJzNjAwMC1jb3JlLmMgKHJzNjAwMGNvZmZfY29yZV9wKTogIEdyZWF0bHkgc2ltcGxpZnkgZXhwcmVzc2lvbiwKCWFuZCBhZGQgYXBwcm9wcmlhdGUgY2FzdHMgdG8ga2VlcCAocGljYXl1bmUpIGFpeC1jYyBoYXBweS4KCk1vbiBKdWwgMTMgMDU6MDY6NTEgMTk5MiAgSm9obiBHaWxtb3JlICAoZ251IGF0IGN5Z251cy5jb20pCgoJKiBlbGYuYyAoZWxmX3NsdXJwX3N5bWJvbF90YWJsZSk6ICBOb3cgMm5kIGFyZyBpcyB3aGVyZSB0byB3cml0ZQoJc3ltYm9sIHBvaW50ZXJzLiAgUHVudCBleHBlbnNpdmUgJiB1c2VsZXNzIGJmZF9yZWFsbG9jLiAgVXNlCgltYWxsb2MgZm9yIHJhdyBzeW1ib2xzLCBhbmQgZnJlZSBpdCBiZWZvcmUgcmV0dXJuaW5nLgoJKGJmZF9zZWN0aW9uX2Zyb21fc2hkcik6ICBEbyBub3Qgc2x1cnAgc3ltYm9sIHRhYmxlIHVudGlsIHBvbGl0ZWx5Cglhc2tlZC4gCURvIG5vdCBldmVuIHNsdXJwIHN0cmluZyB0YWJsZXMuCgkoZWxmX2dldF9zeW10YWJfdXBwZXJfYm91bmQpOiAgQ291bnQgJ2VtIHdpdGhvdXQgcmVhZGluZyB0aGVtLgoJKGVsZl9nZXRfc3ltdGFiKTogIFRoaXMgaXMgaG93IHRvIHBvbGl0ZWx5IGFzay4gIFNjaGx1cnAhCglUaGlzIHNob3VsZCBwcm9iYWJseSBqdXN0ICpiZWNvbWUqIGVsZl9zbHVycF9zeW1ib2xfdGFibGUsIEZJWE1FLgoKV2VkIEp1bCAgOCAxNjoyNDozMyAxOTkyICBTdGV2ZSBDaGFtYmVybGFpbiAgKHNhY0B0aGVwdWIuY3lnbnVzLmNvbSkKCgkqIGFyY2hpdmUuYyAoYnNkX3dyaXRlX2FybWFwKTogd3JpdGUgdGhlIHRpbWVzdGFtcCBvZiB0aGUKCWFyY2hpdmUgaGVhZGVyIHRvIGJlIGp1c3QgYSBsaXR0bGUgYml0IGxhdGVyIHRoYW4gdGhlIHRpbWVzdGFtcCBvZgoJdGhlIGZpbGUsIG90aGVyd2lzZSB0aGUgbGlua2VyIHdpbGwgY29tcGxhaW4gdGhhdCB0aGUgaW5kZXggaXMKCW91dCBvZiBkYXRlLgoKVHVlIEp1bCAgNyAwMDoyMzoyMyAxOTkyICBGcmVkIEZpc2ggIChmbmZAY3lnbnVzLmNvbSkKCgkqIGNvbmZpZ3VyZS5pbjogQWRkIG02OGstZXJpY3Nzb24tKi4KClNhdCBKdWwgIDQgMDM6Mjk6NDEgMTk5MiAgSm9obiBHaWxtb3JlICAoZ251IGF0IGN5Z251cy5jb20pCgoJKiBzeW1zLmM6ICBEZWZpbmUgQlNGX0ZJTEUsIHVwZGF0ZSBCU0ZfU0VDVElPTl9TWU0gZGVzYy4KCSogZWxmLmM6ICBSZW1vdmUgdW5jb25kaXRpb25hbCBkZWJ1ZyBwcmludGYncy4KCShlbGZfd3JpdGVfb2JqZWN0X2NvbnRlbnRzLCBlbGZfc2x1cnBfc3ltYm9sX3RhYmxlKTogIEhhbmRsZQoJQlNGX1NFQ1RJT05fU1lNIDw9PiBTVFRfU0VDVElPTiwgQlNGX0ZJTEUgPD0+IFNUVF9GSUxFLgoJKGVsZl9zbHVycF9zeW1ib2xfdGFibGUpOiAgSGFuZCBvdXQgc3ltYm9scyBpbiBmb3J3YXJkLCBub3QKCXJldmVyc2Ugb3JkZXIuICBTaW1wbGlmeSBkdXBsaWNhdGUgY29kZS4KCkZyaSBKdWwgIDMgMjA6MjM6MzQgMTk5MiAgRnJlZCBGaXNoICAoZm5mQGN5Z251cy5jb20pCgoJKiBlbGYuYzogIFJlbW92ZSAiKHZvaWQpIiBjYXN0cyBmcm9tIGZ1bmN0aW9uIGNhbGxzIHdoZXJlIHRoZQoJcmV0dXJuIHZhbHVlIGlzIGlnbm9yZWQsIGluIGFjY29yZGFuY2Ugd2l0aCBHTlUgY29kaW5nIHN0YW5kYXJkcy4KClR1ZSBKdW4gMzAgMTY6NDk6MTIgMTk5MiAgRnJlZCBGaXNoICAoZm5mQGN5Z251cy5jb20pCgoJKiBocHBhLmM6ICBBcHBseSBKb2huJ3Mgc3RhbmRhcmQgZml4IHRvIGF2b2lkICJlbXB0eSB0cmFuc2xhdGlvbgoJdW5pdCIgd2FybmluZ3MgZnJvbSBzb21lIEFOU0ktQyBjb21waWxlcnMuCgpUaHUgSnVuIDI1IDA0OjM5OjI1IDE5OTIgIEpvaG4gR2lsbW9yZSAgKGdudSBhdCBjeWdudXMuY29tKQoKCSogaG9zdHMvc29sYXJpczIuaDogIENvbmZpZ3VyZSBzYW1lIGFzIHN5c3Y0LgoKVHVlIEp1biAyMyAyMTo1NDo0NCAxOTkyICBGcmVkIEZpc2ggIChmbmZAY3lnbnVzLmNvbSkKCgkqIGxpYmJmZC5oLCBsaWJiZmQtaW4uaCAoYmZkX3NlZWspOiAgTWFrZSBwcm90b3R5cGUgbWF0Y2ggZGVmaW5pdGlvbi4KCSogcmVsb2MuYyAoYmZkX2RlZmF1bHRfcmVsb2NfdHlwZV9sb29rdXApOiAgTWFrZSBjYXN0IG9uIHJldHVybgoJdHlwZSBtYXRjaCBhY3R1YWwgcmV0dXJuIHR5cGUuCgkqIHNlY3Rpb24uYyAoZWxmX3ByaW50X3N5bWJvbCk6ICBNYWtlIENPTlNULgoKTW9uIEp1biAyMiAxNzozNToyNCAxOTkyICBQZXIgQm90aG5lciAgKGJvdGhuZXJAY3lnbnVzLmNvbSkKCgkqIGkzODZsaW51eC5jLCBob3N0cy9pMzg2bGludXguaCwgY29uZmlnL2kzODYtbGludXgubXQ6CglOZXcgZmlsZXMsIGZvciBMaW51eCAoYSBmcmVlIFVuaXggY2xvbmUgZm9yIDM4NiBtYWNoaW5lcykuCgkqIE1ha2VmaWxlLmluLCBjb25maWd1cmUuaW4sIHRhcmdldHMuYzogIFVwZGF0ZSBhY2NvcmRpbmdseS4KCkZyaSBKdW4gMTkgMjA6MjM6MjEgMTk5MiAgU3RldmUgQ2hhbWJlcmxhaW4gIChzYWNAdGhlcHViLmN5Z251cy5jb20pCglMaW50cyBmb3IgYmZkX3JlbG9jX2NvZGVfdHlwZS0+YmZkX3JlbG9jX2NvZGVfcmVhbF90eXBlLCBhbmQKCWNvcnJlY3QgY2FsbGluZyBvZiBob3d0byBzcGVjaWFsIGZ1bmN0aW9ucyBhbmQgZml4ZXMgZnJvbSBSYWVidXJuCglmb3IgZ2FzPD5iZmRuZXNzCgkqIGFyY2h1cmVzLmM6IG51a2UgYmZkX3JlbG9jX2NvZGVfdHlwZQoJKiBib3V0LmMsIGNwdS1oODMwMC5jLCBjb2ZmLWk5NjAuYywgY29mZi1tODhrLmM6IHNwZWNpYWwgZnVuY3Rpb24gbGludAoJKiBjb2ZmY29kZS5oIChzdHlwX3RvX3NlY19mbGFncyk6IFNUWVBfSU5GTyBpcyBtYXJrZWQgYXMKCVNFQ19ORVZFUl9MT0FELCB2YXJpb3VzIG90aGVyIGJmZGdhcyBuZXduZXNzCgkqIHJlbG9jLmMtPmxpYmJmZC5oOiBjaGFuZ2UgcHJvdHlwZSBvZiBiZmRfZGVmYXVsdF9yZWxvY190eXBlX2xvb2t1cAoJKiB0YXJnZXRzLmM6IGNoYW5nZSBqdW1wIHRhYmxlIHZlY3RvciB0byBhYm92ZQoKCkZyaSBKdW4gMTkgMTk6MDA6NDUgMTk5MiAgSm9obiBHaWxtb3JlICAoZ251IGF0IGN5Z251cy5jb20pCgoJKiBlbGYuYyAoYmZkX2VsZl9maW5kX3NlY3Rpb24pOiAgTWFyayBhcyBJTlRFUk5BTF9GVU5DVElPTiBzbwoJaXRzIHByb3RvdHlwZSB3aWxsIGJlIGluY2x1ZGVkIGluIGxpYmJmZC5oLiAgQ2hhbmdlIHJlc3VsdCB0eXBlCgl0byBzdHJ1Y3QgKiAocmF0aGVyIHRoYW4gZXF1aXZhbGVudCB0eXBlZGVmKSBzbyBpdCBjYW4gYmUgdXNlZCBpbgoJdGhlIHByb3RvdHlwZSwgd2hlcmUgdGhleSB0eXBlZGVmIHdvbid0IGJlIGtub3duLgoJKiBsaWJiZmQuaDogIFVwZGF0ZWQgdmVyc2lvbi4KCkZyaSBKdW4gMTkgMTU6MjE6NTYgMTk5MiAgU3R1IEdyb3NzbWFuICAoZ3Jvc3NtYW4gYXQgY3lnbnVzLmNvbSkKCgkqIE1ha2VmaWxlLmluLCBhcmNodXJlcy5jLCBjb25maWd1cmUuaW4sIGNwdS1ocHBhLmMsIGhwcGEuYywgbGliaHBwYS5oLAoJdGFyZ2V0cy5jOiAgSFBQQSBtZXJnZS4KCkZyaSBKdW4gMTkgMTI6MjE6MzggMTk5MiAgSm9obiBHaWxtb3JlICAoZ251IGF0IGN5Z251cy5jb20pCgoJKiBjb25maWd1cmUuaW46ICBTZXBhcmF0ZSBTb2xhcmlzMiBmcm9tIFNZU1Y0IG9uIFNQQVJDLgoJKiBjb25maWcvc29sYXJpczIubWg6ICBLbHVkZ2UgYXJvdW5kIFN1biBjb21waWxlciBidWcuCgpXZWQgSnVuIDE3IDE0OjAyOjQ2IDE5OTIgIFN0dSBHcm9zc21hbiAgKGdyb3NzbWFuIGF0IGN5Z251cy5jb20pCgoJKiBsaWJhb3V0LmggKGFvdXRfYmFja2VuZF9kYXRhKTogIENoYW5nZSBkZWZzIG9mIHR3byBiaXRmaWVsZHMgdG8KCWJlIHVuc2lnbmVkIGNoYXJzIGluc3RlYWQgdG8gZ2V0IGFyb3VuZCByczYwMDAgY29tcGlsZXIgcHJvYmxlbS4KCldlZCBKdW4gMTcgMTM6NTU6MzEgMTk5MiAgRnJlZCBGaXNoICAoZm5mQGN5Z251cy5jb20pCgoJKiBlbGYuYyAoYmZkX3NlY3Rpb25fZnJvbV9zaGRyLCBlbGZfc2x1cnBfc3ltYm9sX3RhYmxlKToKCUNvcnJlY3QgbWlzY29uY2VwdGlvbiB0aGF0IHRoZXJlIGNhbiBiZSBvbmx5IG9uZSBzeW1ib2wgdGFibGUuCglPbmx5IGNhbGwgZWxmX3NsdXJwX3N5bWJvbF90YWJsZSBvbiB0aGUgZnVsbCBzeW1ib2wgdGFibGUsIG5vdAoJdGhlIGR5bmFtaWMgb25lIHdoaWNoIGlzIG9ubHkgYSBzdWJzZXQgb2YgdGhlIGZ1bGwgb25lLgoKV2VkIEp1biAxNyAxNTo1NDo1NyAxOTkyICBLZW4gUmFlYnVybiAgKFJhZWJ1cm5AQ3lnbnVzLkNPTSkKCgkqIGNvZmZjb2RlLmggKGNvZmZfY29tcHV0ZV9zZWN0aW9uX2ZpbGVfcG9zaXRpb25zKTogRm9yIEk5NjAsCglkb24ndCBhbGlnbiBzZWN0aW9ucyBpbiBmaWxlLgoKVHVlIEp1biAxNiAwNjoyODoyMSAxOTkyICBLZW4gUmFlYnVybiAgKFJhZWJ1cm5AQ3lnbnVzLkNPTSkKCgkqIHRhcmdldHMuYyAoc3RydWN0IGJmZF90YXJnZXQpOiBBZGRlZCBmaWVsZCBmb3IgdGFyZ2V0LXNwZWNpZmljCgkoYnV0IG5vdCBmaWxlLXNwZWNpZmljKSBkYXRhLCBmb3IgZGlzdGluZ3Vpc2hpbmcgbWlub3IKCWNoYXJhY3RlcmlzdGljcyBiZXR3ZWVuIChlLmcuKSBhLm91dCBmb3JtYXRzLgoKCSogc2VjdGlvbi5jIChzdHJ1Y3Qgc2VjKTogTmV3IGZpZWxkIHVzZXJfc2V0X3ZtYSBpbmRpY2F0ZXMgdm1hCglmaWVsZCBzaG91bGQgYmUgaGVlZGVkLCBub3QgYXNzdW1lZCB0byBiZSB1bnNldC4KCShTVERfU0VDVElPTik6IEluaXRpYWxpemUgdGhhdCBmaWVsZCBvZiBzdGFuZGFyZCBzZWN0aW9ucyB0byB6ZXJvLgoJKiBiZmQtaW4uaCAoYmZkX3NldF9zZWN0aW9uX3ZtYSk6IFNldCB1c2VyX3NldF92bWEgdG8gdHJ1ZS4KCgkqIGNvZmZjb2RlLmggKGNvZmZfd3JpdGVfcmVsb2NzKTogV3JpdGUgb3V0IHN3YXBwZWQgcmVsb2MsIG5vdAoJcHJlLXN3YXBwZWQgdmVyc2lvbi4KCgkqIGFyY2h1cmVzLmMgKHN0cnVjdCBiZmRfYXJjaF9pbmZvKTogRml4ZWQgb3JkZXIgb2YgY29tbWVudCBhbmQKCWZpZWxkIGRlY2wuICBOZXcgZmllbGRzIGluZGljYXRlIHNpemUgb2YgcGFnZSBhbmQgc2VnbWVudCBmb3IKCWFyY2hpdGVjdHVyZS4KCSogY3B1LW02OGsuYyAoTik6IEZpbGwgaW4gdmFsdWVzLgoJKiBjcHUtc3BhcmMuYyAoYXJjaF9pbmZvX3N0cnVjdCk6IERpdHRvLgoKCSogbGliYW91dC5oIChzdHJ1Y3QgYW91dF9iYWNrZW5kX2RhdGEpOiBWYXJpb3VzIGJpdHMgb2YgZGF0YSAobm90CglhbGwgdXNlZCBjdXJyZW50bHkpIHdpdGggY2hhcmFjdGVyaXN0aWNzIG9mIGEub3V0IGltcGxlbWVudGF0aW9uLgoJSW1wb3J0YW50IGZpZWxkIGZvciBub3cgaXMgdGV4dF9pbmNsdWRlc19oZWFkZXIsIGluZGljYXRpbmcgdGhhdAoJdGhlIHRleHQgc2VjdGlvbiBzdGFydHMgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIGZpbGUgaGVhZGVyLCB3aGljaAoJZ2V0cyBtYXBwZWQgaW4gd2l0aCBpdC4KCShzdHJ1Y3QgYW91dF9kYXRhKTogTmV3IGZpZWxkcyBpbmRpY2F0ZSB3aGV0aGVyIHZtYSBoYXMgYmVlbgoJYWRqdXN0ZWQgeWV0IChub3QgeWV0IHVzZWQpLCBhbmQgd2hhdCBtYWdpYyBudW1iZXIgd2lsbCBiZSB1c2VkIGluCgl0aGUgb3V0cHV0IGZpbGUgKHNob3VsZCBnbyBhd2F5IGluIGZhdm9yIG9mIHZtYV9hZGp1c3RlZCkuCgkoV1JJVEVfSEVBREVSUyk6IENvZGUgZm9yIGRlYWxpbmcgd2l0aCBzZWN0aW9uIHNpemVzIGFuZCByZWxhdGVkCgloZWFkZXIgZmllbGRzIHJlcGxhY2VkIHdpdGggY2FsbCB0byBhZGp1c3Rfc2l6ZXNfYW5kX3ZtYXMuCgkqIGFvdXR4LmggKHNvbWVfYW91dF9vYmplY3RfcCk6IEZpbGwgaW4gbWFnaWMgbnVtYmVyIGZpZWxkLgoJU2V0IFdQX1RFWFQgZmxhZyBmb3IgWk1BR0lDIGFzIHdlbGwgYXMgTk1BR0lDIGZpbGVzLgoJKHNldF9hcmNoX21hY2gpOiBTZXQgcGFnZSBzaXplIGFuZCBzZWdtZW50IHNpemUgb25jZSBDUFUKCXR5cGUgaXMga25vd24uCgkoYWRqdXN0X3NpemVzX2FuZF92bWFzKTogTmV3IGZ1bmN0aW9uOyBoYXMgbXVjaCBjb2RlIG1vdmVkCglmcm9tIHNldF9zZWN0aW9uX2NvbnRlbnRzIGFuZCBXUklURV9IRUFERVJTLiAgU2V0cyBvciBhZGp1c3RzIHZtYQoJYW5kIHNpemUgcGFyYW1ldGVycywgYXMgd2VsbCBhcyBtYW55IGhlYWRlciBmaWVsZHMsIGFmdGVyIGRlY2lkaW5nCglvbiBtYWdpYyBudW1iZXIgZm9yIG91dHB1dCBmaWxlLiAgQ2hlY2tzIHRvIGVuc3VyZSB0aGF0IHRoaXMKCWFkanVzdG1lbnQgaGFzIG9ubHkgYmVlbiBkb25lIG9uY2UuCgkoc2V0X3NlY3Rpb25fY29udGVudHMpOiBDYWxsIGFkanVzdF9zaXplc19hbmRfdm1hcyBpbnN0ZWFkIG9mCglkb2luZyBtdWNoIG9mIHRoZSB3b3JrIGhlcmUuCgoJKiBhb3V0LXRhcmdldC5oIChNWV9tYWtlX2RlYnVnX3N5bWJvbCwgTVlfYmFja2VuZF9kYXRhKTogUHJvdmlkZQoJZGVmYXVsdCAobnVsbCkgdmFsdWVzIG9mIHRoZXNlIGZpZWxkcy4KCSogYW91dGYxLmggKHN1bm9zNF93cml0ZV9vYmplY3RfY29udGVudHMpOiBEb24ndCBvdmVycmlkZSBhX3RleHQKCXZhbHVlIGluIGV4ZWMgaGVhZGVyLgoJKHN1bm9zNF9hb3V0X2JhY2tlbmQsIE1ZX2JhY2tlbmRfZGF0YSk6IERlZmluZSBiYWNrZW5kIGRhdGEKCWluZGljYXRpbmcgZmlsZSBoZWFkZXIgaXMgaW5jbHVkZWQgaW4gdGV4dCBzZWN0aW9uLgoKCSogYW91dGYxLmggKE1ZX3JlbG9jX2hvd3RvX3R5cGVfbG9va3VwKTogRml4IHR5cG8uCgoJKiBob3N0cy9zcGFyYy5oIChhYm9ydCwgZXhpdCk6IEhpZGUgdGhlc2UgbmFtZXMgaWYgY29tcGlsaW5nIHdpdGgKCWdjYyB2ZXJzaW9uIDIsIHRvIGF2b2lkIHdhcm5pbmdzLgoKTW9uIEp1biAxNSAxMjoyNjo1NiAxOTkyICBGcmVkIEZpc2ggIChmbmZAY3lnbnVzLmNvbSkKCgkqIGNvbmZpZy9uY3IzMDAwLm1oIChJTlNUQUxMLCBSQU5MSUIpOiAgRG9uJ3QgdXNlIC91c3IvdWNiL2luc3RhbGwsCglpdCdzIGJyb2tlbiBvbiBuY3IgMzAwMCdzLiAgVXNlIHNpbXBsZSAidHJ1ZSIgZm9yIFJBTkxJQi4KClNhdCBKdW4gMTMgMDk6MTY6NDMgMTk5MiAgTWljaGFlbCBUaWVtYW5uICAodGllbWFubkBydGwuY3lnbnVzLmNvbSkKCgkqIGNvbmZpZ3VyZS5pbiAobTY4MFswMTIzNF0wLXdycy0qKTogRml4IHR5cG8gaW4gbWF0Y2ggcGF0dGVybi4KCkZyaSBKdW4gMTIgMTk6NDg6MzQgMTk5MiAgSm9obiBHaWxtb3JlICAoZ251IGF0IGN5Z251cy5jb20pCgoJKiBzZWN0aW9uLmMgKFNURF9TRUNUSU9OKTogIFJlbW92ZSBleHRyYSBzZW1pY29sb24gaW4gZGVjbGFyYXRpb25zLgoJKiBjb25maWd1cmUuaW46ICBSZXdyaXRlIHRhcmdldCBwYXJzaW5nIHRvIHVzZSBzaW1wbGUgZm9ybWF0LgoJSGFuZGxlIHNwYXJjLXN1bi1zb2xhcmlzMiBjb25maWd1cmF0aW9uLgoJKiBhb3V0NjQuaDogIEF2b2lkIEFOU0kgQyBicmFpbiBkZWF0aCB3YXJuaW5nLgoJKiBlbGYuYzogIEF2b2lkIHRyaWdyYXBoICg/Pz8pIG9yIC8qIGluIGNvbW1lbnRzLgoKRnJpIEp1biAxMiAxNDo1MToxNCAxOTkyICBkYXZpZCBkIGB6b28nIHp1aG4gICh6b28gYXQgY2lyZGFuLmN5Z251cy5jb20pCgoJKiBjb25maWcvc3lzdjQubWg6IG5ldyBmaWxlLCBSQU5MSUI9ZWNobwoKCSogY29uZmlndXJlLmluOiBoYW5kbGUgU29sYXJpczIgYXMgLXN5c3Y0IG9yIC1zb2xhcmlzMgoKVGh1IEp1biAxMSAwMDo1MjowMyAxOTkyICBKb2huIEdpbG1vcmUgIChnbnUgYXQgY3lnbnVzLmNvbSkKCgkqIGVsZi5jIChlbGZfb2JqX3RkYXRhKTogIE1lcmdlIGVsZl9vYmpfdGRhdGFfc3RydWN0IGFuZAoJZWxmX2NvcmVfdGRhdGFfc3RydWN0IGludG8gYSBzaW5nbGUgY29tbW9uIHN0cnVjdC4gIENvcmUgZmlsZXMKCXdvdWxkbid0IGhhdmUgd29ya2VkIGF0IGFsbCB3aXRob3V0IHRoaXMuCgkoYmZkX2VsZl9maW5kX3NlY3Rpb24pOiAgTmV3IGZ1bmN0aW9uIGZvciBHREIncyB1bmRlcmNvdmVyIHVzZQoJdG8gZmluZCBzdHJpbmcgc2VjdGlvbnMgdGhhdCBCRkQgaGlkZXMgZnJvbSBpdC4KCShlbGZfZ2V0X3N0cl9zZWN0aW9uKTogIEF2b2lkIG11bHRpcGxlIGFsbG9jJnJlYWRzIGZvciBzYW1lIGRhdGE7CglsaW50LgoJKGVsZl9vYmplY3RfcCwgZWxmX2NvcmVfZmlsZV9wKTogIEFsbG9jYXRlIGludGVybmFsIGZpbGUgaGVhZGVyCglzdG9yYWdlIGR5bmFtaWNhbGx5LgoJKiBiZmQuYyAodW5pb24gey4uLn0gdGRhdGEpOiAgUmVtb3ZlIGVsZl9jb3JlX3RkYXRhX3N0cnVjdC4KCSogZGVtbzY0LmM6ICBQcmV2ZW50ICJlbXB0eSB0cmFuc2xhdGlvbiB1bml0IiB3YXJuaW5ncyBmcm9tIGlkaW90cy4KClR1ZSBKdW4gIDkgMTc6MTU6MjYgMTk5MiAgRnJlZCBGaXNoICAoZm5mIGF0IGN5Z251cy5jb20pCgoJKiBjb25maWcve2kzODZ2NC5taCwgbmNyMzAwMC5taH06ICBVcGRhdGUgUkFOTElCLCBhZGQgSU5TVEFMTC4KClNhdCBKdW4gIDYgMTc6MDI6NTEgMTk5MiAgSm9obiBHaWxtb3JlICAoZ251IGF0IGN5Z251cy5jb20pCgoJKiBjb25maWd1cmUuaW46ICBIYW5kbGUgU29sYXJpczIgYXMgKi1zdW4tc3lzdjQgb3IgYXMgKi1zdW4tc3Vub3M1LgoKU3VuIE1heSAzMSAwNTo0NTowMCAxOTkyICBkYXZpZCBkIGB6b28nIHp1aG4gKHpvb0BjeWdudXMuY29tKQoKCSogY29uZmlndXJlLmluOiBoYW5kbGUgbTY4MFswMTIzNF0wIGFzIGFsaWFzZXMgZm9yIG02OGsKClR1ZSBNYXkgMjYgMTY6NTA6NTkgMTk5MiAgU3RldmUgQ2hhbWJlcmxhaW4gIChzYWNAdGhlcHViLmN5Z251cy5jb20pCgoJKiBjb2ZmLWEyOWsuYzogZG8gYnl0ZSByZWxvY3MgY29ycmVjdGx5CgkqIGNvZmZjb2RlLmggKHN0eXBfdG9fc2VjX2ZsYWdzKTogbmV2ZXIgbG9hZCBJTkZPIHNlY3Rpb25zCgkqIHNlY2xldC5jIChyZWwpOiBkb24ndCByZWxvY2F0ZSBJTkZPIHNlY3Rpb25zCgpXZWQgTWF5IDIwIDA4OjE4OjE4IDE5OTIgIEtlbiBSYWVidXJuICAoUmFlYnVybkBDeWdudXMuQ09NKQoKCSogc2VjdGlvbi5jIChiZmRfKl9zeW1ib2wsIGJmZF8qX3NlY3Rpb24pOiBJbml0aWFsaXplIHN0YXRpY2FsbHkuCglNYWtlIHRoZSBzeW1ib2xzIHVubW9kaWZpYWJsZS4KCShiZmRfc2VjdGlvbl9pbml0KTogRGVsZXRlZC4KCSogaW5pdC5jIChiZmRfaW5pdCk6IERvbid0IGNhbGwgYmZkX3NlY3Rpb25faW5pdC4KCgkqIHNlY3Rpb24uYyAoYmZkX3NldF9zZWN0aW9uX2NvbnRlbnRzKTogRW5zdXJlIHRoYXQgcmFuZ2UgdG8gYmUKCXdyaXR0ZW4gaXMgd2l0aGluIHNlY3Rpb24gYm91bmRhcmllcy4KCShiZmRfZ2V0X3NlY3Rpb25fY29udGVudHMpOiBMaWtld2lzZS4gIERvbid0IGJvdGhlciBkaXNwYXRjaGluZyBpZgoJc2l6ZSBpcyB6ZXJvLgoKCSogbGliYmZkLmMgKGJmZF94bWFsbG9jKTogVGV4dCBvZiBlcnJvciBtZXNzYWdlIHNob3VsZCBiZSBjb25zdC4KCgkqIGNvZmYtaTk2MC5jIChob3d0b190YWJsZSk6IERlbGV0ZWQuCgkoaG93dG9fcmVsbG9uZywgaG93dG9faXBybWVkLCBob3d0b19vcHRjYWxsKTogTmV3IHZhcnM7CglpbnRlcmVzdGluZyBlbnRyaWVzIGZyb20gb2xkIGhvd3RvX3RhYmxlLgoJKFJUWVBFMkhPV1RPKTogQWRqdXN0ZWQgdG8gdXNlIHN3aXRjaC4KCShjb2ZmX2k5NjBfcmVsb2NfdHlwZV9sb29rdXApOiBOZXcgZnVuY3Rpb24uCgoJKiBjb2ZmY29kZS5oIChjb2ZmX25ld19zZWN0aW9uX2hvb2spOiBBbGxvY2F0ZSBzdG9yYWdlIGZvciBhdXgKCXJlY29yZHMgZm9yIHNlY3Rpb24gc3ltYm9sLgoJKG1ha2VfYWJzX3NlY3Rpb24pOiBVbnVzZWQ7IGRlbGV0ZWQuCgkocmVudW1iZXJfc3ltYm9scyk6IFJlLW9yZGVyIHN5bWJvbHMgc28gdW5kZWZpbmVkIHN5bWJvbHMgY29tZQoJbGFzdCwgYXMgQ09GRiBmb3JtYXQgZGVzaXJlcy4KCShjb2ZmX3dyaXRlX3N5bWJvbCk6IFB1dCBDX0ZJTEUgc3ltYm9scyBpbiBkZWJ1ZyBzZWN0aW9uIGFsd2F5cy4KCShjb2ZmX3NlY3Rpb25fc3ltYm9sKTogTmV3IGZ1bmN0aW9uOyBjcmVhdGVzIGEgc3ltYm9sIHdpdGggdGhlCglzYW1lIG5hbWUgYXMgYSBzZWN0aW9uLCBhbmQgc2V0cyB1cCBhdXggcmVjb3JkcyBmb3IgaXQuCgkoY29mZl9hZGRfbWlzc2luZ19zeW1ib2xzKTogTmV3IGZ1bmN0aW9uOyBhZGRzIHNlY3Rpb24gc3ltYm9scyB0bwoJc3ltYm9sIHRhYmxlIGlmIHRoZXkgYXJlbid0IHRoZXJlIGFscmVhZHkuICBTaG91bGQgc29tZWRheSBhbHNvCglhZGQgYSBkdW1teSBDX0ZJTEUgc3ltYm9sIGlmIG5vbmUgaXMgcHJlc2VudC4KCShjb2ZmX3dyaXRlX29iamVjdF9jb250ZW50cyk6IEFkZCBtaXNzaW5nIHN5bWJvbHMgYmVmb3JlIHByZXBhcmluZwoJc3ltYm9sIHRhYmxlIHRvIGJlIHdyaXR0ZW4uCgkoY29mZl9zbHVycF9yZWxvY190YWJsZSk6IFZlcmlmeSB0aGF0IHN5bWJvbCBpbmRpY2VzIHJlYWQgaW4gYXJlCglpbiBhIHJlYXNvbmFibGUgcmFuZ2UuCgkqIGxpYmNvZmYtaW4uaCAoc3RydWN0IGNvZmZfdGRhdGEpOiBOZXcgZmllbGQgY29udl90YWJsZV9zaXplLgoJKG9ial9jb252X3RhYmxlX3NpemUpOiBBY2Nlc3NvciBtYWNyby4KCgkqIGJvdXQuYyAoYl9vdXRfcmVsb2NfdHlwZV9sb29rdXApOiBOZXcgZnVuY3Rpb24uICBIYW5kbGVzIHRocmVlCglyZWxvYyB0eXBlcyBvbiBpOTYwLgoKCSogYmZkLWluLmggKGJmZF9nZXRfc2VjdGlvbl9uYW1lKTogTmV3IG1hY3JvLiAgTGlrZQoJYmZkX3NlY3Rpb25fbmFtZSwgYnV0IHJldHVybnMgcnZhbHVlLCBub3QgbHZhbHVlLgoJKGJmZF9nZXRfc2VjdGlvbl92bWEsIGJmZF9nZXRfc2VjdGlvbl9hbGlnbm1lbnQpOiBTaW1pbGFyLgoJKGJmZF9nZXRfc2VjdGlvbl9mbGFncyk6IE5vdyByZXR1cm5zIHJ2YWx1ZS4KCgkqIHJlbG9jLmMgKGVudW0gYmZkX3JlbG9jX2NvZGVfcmVhbCk6IEFkZCBzZXZlcmFsIG5ldyB2YWx1ZXMsIHNvbWUKCWdlbmVyYWwsIHNvbWUgc3BlY2lmaWMgdG8gc3BhcmMgb3IgaTk2MC4KCgkqIGFvdXR4LmggKHNldF9zZWN0aW9uX2NvbnRlbnRzKTogU2V0IFZNQSBmb3IgZWFjaCBzZWN0aW9uIGJhc2VkCglvbiBwcmV2aW91cyBzZWN0aW9uLiAgSWYgdGV4dCBzZWN0aW9uIFZNQSBkb2Vzbid0IGFwcGVhciB0byBoYXZlCgliZWVuIHNldCwgbWFrZSBhIGJlc3QgZ3Vlc3MgZnJvbSB0aGUgdHlwZSBvZiBmaWxlLgoKCSogYW91dC10YXJnZXQuaCAoTVlfcmVsb2NfaG93dG9fdHlwZV9sb29rdXApOiBEZWZpbmUgYXMgemVybyBpZgoJbm90IGRlZmluZWQuCgkoTVkodmVjKSk6IEluaXRpYWxpemUgcmVsb2NfdHlwZV9sb29rdXAgZmllbGQuCgoJKiBhb3V0eC5oIChob3d0b190YWJsZV8qKTogRXhwb3J0IGFzIGFvdXRfI18qX2hvd3RvX3RhYmxlLgoJKGJmZF9lcnJvcl90cmFwLCBiZmRfZXJyb3JfdmVjdG9yKTogRXh0ZXJuLCBub3QgY29tbW9uLgoKCSogYW91dGYxLmggKHN1bm9zNF9yZWxvY190eXBlX2xvb2t1cCk6IE5ldyBmdW5jdGlvbi4gIEhhbmRsZXMgYQoJZmV3IHR5cGVzIG9mIHJlbG9jcyBmb3Igc3BhcmM7IHdpbGwgbmVlZCBlbmhhbmNlbWVudC4KCgkqIGJvdXQuYyAoY2FsbGpfY2FsbGJhY2spOiBVc2UgREVGVU4gbWFjcm8gaW4gZGVmaW5pdGlvbi4KCSogY29mZi1pOTYwLmMgKG9wdGNhbGxfY2FsbGJhY2spOiBMaWtld2lzZS4KCgkqIHRhcmdldHMuYyAoYmZkX3RhcmdldCk6IEFkZGVkIGZpZWxkcyByZWxvY190eXBlX2xvb2t1cCBhbmQKCV9iZmRfbWFrZV9kZWJ1Z19zeW1ib2wuICBBbHNvIG1pbm9yIGNvbW1lbnQgY2hhbmdlcy4KCSogc3ltcy5jIChiZmRfbWFrZV9kZWJ1Z19zeW1ib2wpOiBOZXcgZGlzcGF0Y2hpbmcgbWFjcm8uCgkqIHJlbG9jLmMgKGJmZF9yZWxvY190eXBlX2xvb2t1cCk6IFRha2UgYSBCRkQgcHRyIGFzIGFyZyByYXRoZXIKCXRoYW4gYXJjaCBpbmZvLCBhbmQgZGlzcGF0Y2ggd2l0aCBCRkRfU0VORC4gIENhbGxlcnMgY2hhbmdlZC4KCSogYXJjaHVyZXMuYyAoc3RydWN0IGJmZF9hcmNoX2luZm8pOiBEZWxldGVkIGZpZWxkCglyZWxvY190eXBlX2xvb2t1cC4KCSogY3B1LSouYzogRG9uJ3QgaW5pdGlhbGl6ZSB0aGF0IGZpZWxkLgoKCSogYmZkLWluLmggKGVudW0gYmZkX2Vycm9yKTogQWRkIG5ldyB2YWx1ZSAiYmFkX3ZhbHVlIi4KCSogYmZkLmMgKGJmZF9lcnJtc2dzKTogTm93IGNvbnN0OyBhZGRlZCBlbnRyeSBmb3IgYmFkX3ZhbHVlLgoJKGJmZF9lcnJtc2cpOiBOb3cgcmV0dXJucyBwdHIgdG8gY29uc3QuCgkqIGJmZC1pbi5oIChiZmRfZXJybXNnKTogRml4IHByb3RvdHlwZS4KCgkqIGNhY2hlLmMgKEJGRF9DQUNIRV9NQVhfT1BFTik6IEZpeCB0eXBvIGluIGRvYy4KCSogcmVsb2MuYyAoYmZkX2dlbmVyaWNfcmVsYXhfc2VjdGlvbik6IERpdHRvLgoKCSogc2VjdGlvbi5jIChTZWN0aW9uIE91dHB1dCBkb2MpOiBJbXByb3ZlIGRlc2NyaXB0aW9uIG9mIHVzZSBvZgoJb3V0cHV0X3NlY3Rpb24gYW5kIG91dHB1dF9vZmZzZXQuCgpUdWUgTWF5IDE5IDIzOjQyOjEwIDE5OTIgIEQuIFYuIEhlbmtlbC1XYWxsYWNlICAoZ3VtYnlAY3lnbnVzLmNvbSkKCgkqIHNjby1jb3JlLmM6IG5ldyBmaWxlIGZyb20gbmV0LgoJKiBhb3V0eC5oICh0cmFuc2xhdGVfdG9fbmF0aXZlX3N5bV9mbGFncyk6IGJ1Z2ZpeCBmcm9tIG5ldDoKCSAgTm93IHdlIGhhdmUgdGhlIGhhaXJ5IGxpbmtlciwgaXQncyBwb3NzaWJsZSB0byBtb3ZlIHN5bWJvbHMgZnJvbQoJICBvbmUgc2VjdGlvbiBpbnRvIGFub3RoZXIuICBBY3R1YWxseSBtYWtlIHRoYXQgd29yayEKClNhdCBNYXkgMTYgMTc6NTc6NTkgMTk5MiAgSy4gUmljaGFyZCBQaXhsZXkgIChyaWNoQHJ0bC5jeWdudXMuY29tKQoKCSogaG9zdHMvc3VuMy5oOiBmaXggZGVjbGFyYXRpb24gb2YgZnJlZS4KClR1ZSBNYXkgMTIgMTQ6MDg6NTkgMTk5MiAgU3RldmUgQ2hhbWJlcmxhaW4gIChzYWNAdGhlcHViLmN5Z251cy5jb20pCgoJKiBjb2ZmLWEyOWsuYyAocGVyZm9ybV9yZWxvYyk6IGZpeCBidWcgaW4gam1wL2NhbGwgZXZhbHVhdGlvbgoJKiBjb2ZmLWg4MzAwLmMgKHJlbG9jX3Byb2Nlc3NpbmcpOiBhbGwgcmVsb2NzIGFyZSByZWxhdGl2ZSB0bwoJc2VjdGlvbiBzdGFydC4KCSogb3BuY2xzLmM6IGRvbid0IHVzZSBmZG9wZW4gb24gRE9TIHN5c3RlbXMKCglzaG9ydCBwYXRjaGVzIGZyb20gR2xlbm4gS2FzdGVuIChnbGVubkByZWFkeS5jb20pCgkqIHRhcmdldHMuYzogZW5hYmxlZCBvYXN5cyBzdXBwb3J0CgkqIG9hc3lzLmM6ICBJbnNlcnQgLiB3aGVuIFVOREVSU0NPUkVfSEFDSyBpcyBlbmFibGVkLAoJZml4IHByb2JsZW0gd2hlcmUgYSByZWxvY2F0aW9uIHdoaWNoIGNyb3NzZWQgYSBtb2RpZmljYXRpb24gYnl0ZQoJYm91bmRhcnkgZGlkIG5vdCB3b3JrLiBGaXggcHJvYmxlbSB3aGVyZSBhIHJlbG9jYXRpb24gbmVhciB0aGUgZW5kCglvZiBhIGRhdGEgcmVjb3JkIGRpZCBub3Qgd29yay4KCgpUdWUgTWF5ICA1IDE4OjExOjI1IDE5OTIgIFN0ZXZlIENoYW1iZXJsYWluICAoc2FjQHRoZXB1Yi5jeWdudXMuY29tKQoKCSogYXJjaGl2ZS5jIChiZmRfc2x1cnBfY29mZl9hcm1hcCk6IG9sZCB2ZXJzaW9ucyBvZiBCRkQgd3JvdGUKCWFyY2h2aWUgaGVhZGVyIHN0cmluZyBjb3VudHMgdGhlIGVuZGlhbiB3YXksIHRoaXMgaGV1cmlzdGljIHNlZXMKCWhvdyBiaWcgYW4gYXJjaGl2ZSBzdHJpbmcgdG8gcmVhZCBieSB0cnlpbmcgaXQgb25lIHdheSBhbmQgaWYgdGhlCglzdHJpbmcgdGFibGUgaXMgdW5yZWFzb25hYmx5IGJpZywgdHJ5aW5nIGl0IHRoZSBvdGhlci4gKkZJWE1FKi4KCSogb3BuY2xzLmMgKGJmZF9mZG9wZW5yKTogY2FuJ3QgZG8gZmRvcGVucyBvbiBWTVMKClR1ZSBNYXkgIDUgMTQ6MTg6MjQgMTk5MiAgUGVyIEJvdGhuZXIgIChib3RobmVyQHJ0bC5jeWdudXMuY29tKQoKCSogYmZkLWluLmg6ICBJbmNyZWFzZSB2ZXJzaW9uIG51bWJlciB0byAxLjk3LCBmb3IgY29uc2lzdGVuY3kKCXdpdGggLi4vYmludXRpbHMuCgkqIE1ha2VmaWxlLmluOiAgZG9jZGlyIGlzIC4vZG9jLCBub3QgJHtzcmNkaXJ9L2RvYy4KCk1vbiBNYXkgIDQgMTE6NDk6MTUgMTk5MiAgU3RldmUgQ2hhbWJlcmxhaW4gIChzYWNAdGhlcHViLmN5Z251cy5jb20pCgogICAgICAgICogYmZkLWluLmg6IGJ1bXAgdmVyc2lvbiB0byAxLjk2CiAgICAgICAgIE1ham9yIGNoYW5nZTsgY2hhbmdlZCBjYWxsaW5nIGNvbnZlbnRpb24gZm9yCgkgYmZkX2dldF9yZWxvY2F0ZWRfc2VjdGlvbl9jb250ZW50cyBzbyB0aGF0IGNhbGxlciBhbGxvY2F0ZXMKCSBtZW1vcnkgZm9yIHNlY3Rpb24gZGF0YS4KCSogY29mZmNvZGUuaCAoYmZkX2NvZmZfZ2V0X3JlbG9jYXRlZF9zZWN0aW9uX2NvbnRlbnRzKSwgcmVsb2MuYywKCXNlY2xldC5jLCB0YXJnZXRzLmMsIGJmZC5jOiByZWZsZWN0IG5ldyBjb252ZW50aW9uLgoJKiBjb2ZmY29kZS5oIChzdHlwX3RvX3NlY19mbGFncyk6IGlmIHN0eXBfZmxhZ3MgaXMgbm90IGEgc3BlY2lhbAoJY2FzZSwgdGhlbiB1c2UgcmVhc29uYWJsZSBkZWZhdWx0IHZhbHVlcyBmb3IgU0VDXyogZmxhZ3MuCgpGcmkgTWF5ICAxIDEyOjU4OjM0IDE5OTIgIFN0ZXZlIENoYW1iZXJsYWluICAoc2FjQHRoZXB1Yi5jeWdudXMuY29tKQoKCSogY29mZmNvZGUuaCAoY29mZl93cml0ZV9vYmplY3RfY29udGVudHMpOiB1c2UgUkVMU1ogdG8gd29yayBvdXQKCXNpemUgb2Ygb3V0cHV0IHJlbG9jIHN0cnVjdC4KCSogdGFyZ2V0cy5jLCBNYWtlZmlsZS5pbjogY29tbWVudCBvdXQgdGVraGV4IGZvciB0aGUgbW9tZW50LgoJKiBpZWVlLmM6IGlmIHNvbWUgcGxhY2VzIHdoZXJlIG51bGwgcG9pbnRlcnMgd2VyZSB1c2VkIGluc3RlYWQgb2YgJmJmZF9hYnNfc2VjdGlvbi4KCSogY29uZmlndXJlLmluOiB0YW5kZW0gdGFyZ2V0IGlzIHN0MjAwMAoJKiBjb2ZmLW02OGsuYzogcmVuYW1lIHN0YXRpYyBob3d0b190YWJsZSB0byBnbG9iYWwKCW02OGtjb2ZmX2hvd3RvX3RhYmxlLgoJKiBib3V0LmM6IHJlbW92ZSB1bm5lY2Vzc2FyeSBhYm9ydAoJKiBjb2ZmLWEyOWsuYzogdmFyaW91cyBjaGFuZ2VzIHRvIHRoZSB3YXkgcmVsb2NhdGlvbnMgd29yayB0byBjb3BlCgl3aXRoIHRoZSAibmV3IG9yZGVyIiBhbmQgbGF0ZW50IGJ1Z3MuCgkqIGNvZmZjb2RlLmg6IGxpbnQKCldlZCBBcHIgMjkgMTI6Mzc6MDcgMTk5MiAgU3RldmUgQ2hhbWJlcmxhaW4gIChzYWNAdGhlcHViLmN5Z251cy5jb20pCgoJKiBhb3V0eC5oIChhb3V0X3N3YXBfZXh0X3JlbG9jX291dCwgYW91dF9zd2FwX3N0ZF9yZWxvY19vdXQpCglib3V0LmMgKGJfb3V0X3NxdWlydF9vdXRfcmVsb2NzKTogdHJlYXQgYWJzIHN1bWJvbHMgdGhlIHJpZ2h0IHdheS4KCSogcmVsb2MuYyAoYmZkX3BlcmZvcm0tcmVsb2NhdGlvbik6IGRvbid0IHJlbG9jYXRlIHJlZnMgdG8KCWFic29sdXRlIHN5bWJvbHMgaWYgZG9pbmcgYSBwYXJ0aWFsIGxpbmsuCgpGcmkgQXByIDI0IDA3OjM1OjI2IDE5OTIgIFN0dSBHcm9zc21hbiAgKGdyb3NzbWFuIGF0IGN5Z251cy5jb20pCgoJKiBjb25maWd1cmUuaW46ICBBZGQgYTI5ay1hbWQtdWRpLgoKVGh1IEFwciAyMyAxODozNzo1NSAxOTkyICBGcmVkIEZpc2ggIChmbmZAY3lnbnVzLmNvbSkKCgkqIGFvdXR4LmggKGFvdXRfPGJpdHM+X3N3YXBfZXhlY19oZWFkZXJfaW4pOiAgWmVybyBvdXQgdGhlCglpbnRlcm5hbF9leGVjIHN0cnVjdHVyZSBiZWZvcmUgaW5pdGlhbGl6aW5nIHRoZSBmaWVsZHMgdGhhdAoJYXJlIHVzZWQsIHNvIHRoYXQgdGhlIHVudXNlZCBmaWVsZHMgYXJlIGluIGEga25vd24gc3RhdGUuCgpXZWQgQXByIDIyIDA5OjM2OjA4IDE5OTIgIEZyZWQgRmlzaCAgKGZuZkBjeWdudXMuY29tKQoKCSogdGVraGV4LmMgKHN0cnVjdCBkYXRhX3N0cnVjdCk6ICBDb252ZXJ0IGZyb20gdHlwZWRlZiB0aGF0Cgl0eXBlZGVmcyBub3RoaW5nIHRvIGEgbm9ybWFsIHN0cnVjdHVyZSBkZWNsYXJhdGlvbi4KCSogdGVraGV4LmMgKHBhc3Nfb3Zlcik6ICBQcm90b3R5cGUgYXJncyBmb3IgZnVuY3Rpb24gdGhhdAoJc2Vjb25kIGFyZyBwb2ludHMgdG8uCgpNb24gQXByIDIwIDIyOjIyOjUxIDE5OTIgIEsuIFJpY2hhcmQgUGl4bGV5ICAocmljaEBydGwuY3lnbnVzLmNvbSkKCgkqIE1ha2VmaWxlLmluOiByZW1vdmUgb2xkIHN0eWxlIHN0YWdpbmcuICBEbyBub3QgcHJpbnQgcmVjdXJzaW9uCgkgIGxpbmVzLgoKCSogTWFrZWZpbGUuaW46IHJld29yayBDRkxBR1Mgc28gdGhhdCBDRkxBR1MgY2FuIGJlIHBhc3NlZCBmcm9tIHRoZQoJICBNYWtlZmlsZSBjb21tYW5kIGxpbmUuICBSZW1vdmUgTUlOVVNfRy4gIERlZmF1bHQgQ0ZMQUdTIHRvIC1nLgoJICBQYXNzIENGTEFHUy4KCkZyaSBBcHIgMTcgMDk6MTU6MzEgMTk5MiAgU3RldmUgQ2hhbWJlcmxhaW4gIChzYWNAdGhlcHViLmN5Z251cy5jb20pCgoJKiBiZmQuYywgTWFrZWZpbGUuaW46IGFkZGVkIHRla2hleAoJKiBhb3V0eC5oIChzZXRfc2VjdGlvbl9jb250ZW50cyk6IHBhZ2VzIHNob3VsZCBiZSBwYWRkZWQgdG8gdGhlCglzaXplIG9mIGEgcGFnZSwgbm90IHRoZSBzaXplIG9mIGEgc2VnbWVudC4KCSogY29uZmlndXJlLmluOiBhZGRlZCBnbzMyIGhvc3QgYW5kIGkzODYtYW91dCB0YXJnZXQuCgkqIGkzODZhb3V0LmMsIGxpYmFvdXQuaDogbm93IHdvcmtzIGZvciBnbzMyIHRhcmdldAoJKiBpZWVlLmM6IGZpeCBiaXQgcm90LgoJKiBzZWNsZXQuYzogc3VwcG9ydCBmb3IgcGFkZGluZyBzZWNsZXQgdHlwZS4KCldlZCBBcHIgMTUgMTg6MTE6NTggMTk5MiAgSy4gUmljaGFyZCBQaXhsZXkgIChyaWNoQHJ0bC5jeWdudXMuY29tKQoKCSogTWFrZWZpbGUuaW46IGFkZGVkIC5OT0VYUE9SVDoKClR1ZSBBcHIgMTQgMTQ6MzQ6NDIgMTk5MiAgRnJlZCBGaXNoICAoZm5mQGN5Z251cy5jb20pCgoJKiBlbGYuYyAoYmZkX2FkZF9zdHJ0YWIsIGJmZF9hZGRfMl90b19zdHJ0YWIpOiAgQ09OU1Qgc3ByZWFkcwoJbGlrZSBvb3plLgoJKiBlbGYuYyAoZWxmX2NvbXB1dGVfc2VjdGlvbl9maWxlX3Bvc2l0aW9ucywKCWVsZl93cml0ZV9vYmplY3RfY29udGVudHMpOiAgUmV0dXJuIGJvb2xlYW4sIG5vdCBOVUxMICh3aGljaAoJY2FuIGJlIHZvaWQgKikuCgkqIGVsZi5jIChiZmRfc2VjdGlvbl9mcm9tX3NoZHIpOiAgSWZkZWYtb3V0IGRlYnVnZ2luZyBjb2RlLgoJQWxzbyBpZmRlZi1vdXQgY29kZSB0aGF0IGFib3J0cyBvbiB1bmhhbmRsZWQgc2VjdGlvbiB0eXBlcy4KCkZyaSBBcHIgMTAgMjI6Mjk6MTggMTk5MiAgRnJlZCBGaXNoICAoZm5mQGN5Z251cy5jb20pCgoJKiBjb25maWd1cmUuaW46ICBSZWNvZ25pemUgbmNyMzAwMCBjb25maWcKCSogTWFrZWZpbGUuaW4gKE1JTlVTX0cpOiAgUGFzcyBvbiB0byByZWN1cnNpdmUgbWFrZXMuCgkqIGhvc3RzL25jcjMwMDAuaCwgY29uZmlnL25jcjMwMDAubWg6ICBBZGQgaG9zdCBjb25maWcgZmlsZXMuCgpUaHUgQXByICAyIDE3OjQyOjQ1IDE5OTIgIEpvaG4gR2lsbW9yZSAgKGdudSBhdCBjeWdudXMuY29tKQoKCSogTWFrZWZpbGUuaW46ICBOb3cgdGhhdCB3ZSBoYXZlIHN5bS5oIGFuZCBzeW1jb25zdC5oLCBjb21waWxlCgljb2ZmLW1zeW0uYyBvbiBhbGwgc3lzdGVtcy4KCSogY29uZmlnL3tkZWNzdGF0aW9uLm1oLCBpcml4My5taCwgaXJpeDQubWh9OiAgUmVtb3ZlIGNvZmYtbXN5bS5vIGRlcC4KCSogY29mZi1tc3ltLmM6ICBVcGRhdGUgaW5jbHVkZSBmaWxlcyBhbmQgY29tbWVudHM7IGFkZCB3ZWFrZXh0IGJpdC4KCldlZCBBcHIgIDEgMjM6MTY6MzggMTk5MiAgSm9obiBHaWxtb3JlICAoZ251IGF0IGN5Z251cy5jb20pCgoJKiBhcmNoaXZlLmMsIGJmZC5jLCBib3V0LmMsIGNvZmZjb2RlLmgsIGluaXQuYywgcmVsb2MuYywKCXNlY3Rpb24uYywgc3JlYy5jLCBzeW1zLmMsIGNvZmYtaDgzMDAuYzogIExpbnQuCgpTdW4gTWFyIDI5IDA5OjM3OjU5IDE5OTIgIEpvaG4gR2lsbW9yZSAgKGdudSBhdCBjeWdudXMuY29tKQoKCSogYm91dC5jLCBjb2ZmLWEyOWsuYywgY29mZi1pOTYwLmM6ICBMaW50LgoJKiBjb25maWd1cmUuaW46ICBBZGQgbmV3IGhvc3QgYW5kIHRhcmdldCBjb25maWdzLgoJKiBlbGYuYyAoYmZkX3Byc3RhdHVzLCBiZmRfZnByZWdzZXQpOiAgQXZvaWQgdHlwZW5hbWUgb2YgcmVnaXN0ZXIKCXN0cnVjdHMsIHdoaWNoIHZhcnk7IGp1c3QgdXNlIG1lbWJlciBuYW1lLgoJKGVsZl9vYmplY3RfcCwgZWxmX2NvcmVfZmlsZV9wKTogIExpbnQsIGZpeCBjb21tZW50cy4KCSogY29uZmlnL3NwYXJjLWVsZi5tdCwgaG9zdHMvc3lzdjQuaDogIE5ldyBjb25maWcgZmlsZXMuCgpTYXQgTWFyIDI4IDEzOjA3OjAyIDE5OTIgIEZyZWQgRmlzaCAgKGZuZkBjeWdudXMuY29tKQoKCSogZWxmLmMgKGVsZl9vYmplY3RfcCwgZWxmX2NvcmVfZmlsZV9wKTogIEZpeCB0byB1c2Ugb25seSBhIHNpbmdsZQoJbG9jYWwsIGRpc3Bvc2FibGUsIGNvcHkgb2YgdGhlIGV4dGVybmFsIGZvcm0gb2Ygc2VjdGlvbiBoZWFkZXIKCXRhYmxlIGFuZCBwcm9ncmFtIGhlYWRlciB0YWJsZSBlbnRyaWVzLgoKVGh1IE1hciAyNiAxNjo1OTo1OCAxOTkyICBKb2huIEdpbG1vcmUgIChnbnUgYXQgY3lnbnVzLmNvbSkKCgkqIE1ha2VmaWxlLmluOiAgU2V0IE1JTklNSVpFIGJhY2sgdG8gMCBmb3IgYSByZWFsIHJlbGVhc2UuCgpUdWUgTWFyIDI0IDE1OjU3OjAzIDE5OTIgIEsuIFJpY2hhcmQgUGl4bGV5ICAocmljaEBjeWdudXMuY29tKQoKCSogY29uZmlndXJlLmluOiBjb25maWcvaXJpeDQubVtodF0sIGhvc3RzL2lyaXg0Lmg6IGFkZCBzdXBwb3J0IGZvcgoJICBpcml4NC4KCk1vbiBNYXIgMjMgMjI6Mzc6MzQgMTk5MiAgU3R1IEdyb3NzbWFuICAoZ3Jvc3NtYW4gYXQgY3lnbnVzLmNvbSkKCgkqIGNvZmYtbXN5bS5jIChlY29mZl9zd2FwX3JmZF9pbik6ICByZW1vdmUgJiBmb3IgYXJyYXkgcmVmLgoKVHVlIE1hciAxNyAxNDoxMjoyNSAxOTkyICBQZXIgQm90aG5lciAgKGJvdGhuZXJAcnRsLmN5Z251cy5jb20pCgoJKiBib3V0LmMgKGJfb3V0X3NsdXJwX3JlbG9jX3RhYmxlKTogIFVzZSBCRkRfQVNTRVJUIG1hY3JvLAoJbm90IGludGVybmFsIGJmZF9hc3NlcnQgZnVuY3Rpb24gKHR3aWNlKS4KClR1ZSBNYXIgMTcgMTA6NDU6MTIgMTk5MiAgU3RldmUgQ2hhbWJlcmxhaW4gIChzYWNAdGhlcHViLmN5Z251cy5jb20pCgoJKiBhb3V0LXRhcmdldC5oOiBjaGFuZ2UgYXJfbWF4X25hbWVsZW4gdG8gMTUgKHRoZSByaWdodCB2YWx1ZSkKCSogY29mZi1hMjlrLmMsIGNvZmZjb2RlLmg6IG1vcmUgaGFuZ292ZXJzIGZyb20gdGhlIGJmZF9hYnNfc2VjdGlvbgoJY2hhbmdlCgpNb24gTWFyIDE2IDE0OjU3OjIyIDE5OTIgIFN0ZXZlIENoYW1iZXJsYWluICAoc2FjQHJ0bC5jeWdudXMuY29tKQoKCSogYXJjaGl2ZS5jIChiZmRfZ2VuZXJpY19hcmNoaXZlX3ApOiBjaGVjayBmb3IgYm91dCBhcmNoaXZlcyB0b28uCgkqIGJvdXQuYzogbWFrZSBpdCB3b3JrIGFnYWluLgoKU2F0IE1hciAxNCAxNzozMDo0MCAxOTkyICBGcmVkIEZpc2ggIChmbmZAY3lnbnVzLmNvbSkKCgkqIGVsZi5jIChlbGZfY29yZWZpbGVfbm90ZSk6ICBDYWxsIGJmZF94bWFsbG9jKCkgaW5zdGVhZCBvZiBiYXJlCgltYWxsb2MoKS4KCSogcmVsb2MuYyAoYmZkX2dlbmVyaWNfZ2V0X3JlbG9jYXRlZF9zZWN0aW9uX2NvbnRlbnRzKTogIENhbGwKCWJmZF94bWFsbG9jKCkgaW5zdGVhZCBvZiBiYXJlIG1hbGxvYygpLgoKRnJpIE1hciAxMyAxNTo0NDozNyAxOTkyICBLLiBSaWNoYXJkIFBpeGxleSAgKHJpY2hAY3lnbnVzLmNvbSkKCgkqIE1ha2VmaWxlLmluOiBwYXNzIGRvd24gTUFLRUlORk8gb24gaW5mby4KCkZyaSBNYXIgMTMgMDc6NDE6MTMgMTk5MiAgU3RldmUgQ2hhbWJlcmxhaW4gIChzYWNAdGhlcHViLmN5Z251cy5jb20pCgoJKiBjb25maWcvbXQtPGZvbz4gbm93IDxmb28+Lm10LCBjb25maWcvbWgtPGZvbz4gbm93IDxmb28+Lm1oLgoJaG9zdC9oLTxmb28+IG5vdyBqdXN0IDxmb28+LgoJKiBjb25maWd1cmUuaW46IHJlZmxlY3QgY2hhbmdlcwoKVGh1IE1hciAxMiAxMToxNTowMiAxOTkyICBQZXIgQm90aG5lciAgKGJvdGhuZXJAY3lnbnVzLmNvbSkKCgkqIGxpYmJmZC1pbi5oIChzZXRfdGRhdGEpOiAgTWFrZSBjaGFuZ2Ugb2YgRmViIDI3IGluIHRoZQoJYWN0dWFsIHNvdXJjZSBmaWxlLCBub3QganVzdCB0aGUgZ2VuZXJhdGVkIGxpYmJmZC5oLgoKU2F0IE1hciAgNyAxMDozMzo0MSAxOTkyICBTdGV2ZSBDaGFtYmVybGFpbiAgKHNhY0B0aGVwdWIuY3lnbnVzLmNvbSkKCgkqIGNvZmYtaTk2MC5jIChpY29mZl9saXR0bGVfdmVjKTogYWRkIENPRkZfU1dBUF9UQUJMRSBzbyB3ZSBjYW4gcnVuCglnZGIgb24gbGl0dGxlLWVuZGlhbiA5NjAgY29kZS4KCSogYXJjaGl2ZS5jIChjb21wdXRlX2FuZF93cml0ZV9hcm1hcCk6IGluZGlyZWN0IHN5bWJvbHMgc2hvdWxkIGdvCglpbnRvIHRoZSBhcmNoaXZlIGhlYWRlciB0b28uCgpGcmkgTWFyICA2IDIxOjU1OjE2IDE5OTIgIEsuIFJpY2hhcmQgUGl4bGV5ICAocmljaEBjeWdudXMuY29tKQoKCSogTWFrZWZpbGUuaW46IGFkZGVkIGNoZWNrIHRhcmdldC4KClRodSBNYXIgIDUgMjM6NTE6NDIgMTk5MiAgSm9obiBHaWxtb3JlICAoZ251IGF0IGN5Z251cy5jb20pCgoJKiBjb2ZmLW1zeW0uYzogIE1vdmUgdGhpcyBmaWxlIGZyb20gZ2RiL2Vjb2ZmLmMuICBJdAoJaGFuZGxlcyBieXRlLXN3YXBwaW5nIGZvciBFQ09GRiAoTUlQUyBzeW1ib2wpIGZpbGVzLgoJKiBjb25maWcvbWgtZGVjc3RhdGlvbiwgY29uZmlnL21oLWlyaXgzOiAgQWRkIGNvZmYtbXN5bS5vCgl0byB0aGUgZmlsZXMgYnVpbHQgb24gTUlQUy1iYXNlZCBob3N0cy4KCSogTWFrZWZpbGUuaW46ICBBZGQgcnVsZSBmb3IgY29mZi1tc3ltLgoKVGh1IE1hciAgNSAyMTozNjowNSAxOTkyICBLLiBSaWNoYXJkIFBpeGxleSAgKHJpY2hAY3lnbnVzLmNvbSkKCgkqIE1ha2VmaWxlLmluOiBhZGRlZCBjbGVhbi1pbmZvIHRhcmdldC4gIE1JTklNSVpFPTEuCgpTdW4gTWFyICAxIDIyOjMyOjU4IDE5OTIgIFBlciBCb3RobmVyICAoYm90aG5lckBjeWdudXMuY29tKQoKCSogY29mZi1yczYwMDAuYzogIE1vdmUgY29yZSBmaWxlIGZ1bmN0aW9ucyBpbnRvIHNlcGFyYXRlCgluZXcgZmlsZSByczYwMDAtY29yZS5jLiAgVGhpcyBpcyBuZWVkZWQgYmVjYXVzZSByZWFkaW5nCgljb3JlIGZpbGVzIGRlcGVuZHMgb24gbmF0aXZlIGluY2x1ZGUgZmlsZXMgdGhhdCBjb25mbGljdAoJd2l0aCAuLi9pbmNsdWRlL2NvZmYvcnM2MDAwLmguCgkqIGNvbmZpZy9taC1yczYwMDA6ICBBZGQgcnM2MDAwLWNvcmUubyB0byBIREVQRklMRVMuCgpUaHUgRmViIDI3IDIyOjE5OjU1IDE5OTIgIFBlciBCb3RobmVyICAoYm90aG5lckBjeWdudXMuY29tKQoKCSogYW91dHguaCAoTkFNRShhb3V0LHByaW50X3N5bWJvbCkpOiBEb24ndCBwcmludAoJc3ltYm9sIGFkZHJlc3NzIGZvciB1bmRlZmluZWQgc3ltYm9scy4KCSogY29mZi1yczYwMDAuYzogIFZhcmlvdXMgdXBkYXRlcyAoZHVlIHRvIHRhcmdldC0KCWluZGVwZW5kZW50IGNoYW5nZXMpLgoJKiBsaWJiZmQuaDogIERpdHRvICh0ZGF0YSBmaWVsZCBpcyBub3cgYSB1bmlvbikuCgkqIGhvc3RzL2gtc3BhcmMuaDogIFJlbW92ZWQgcHJvdG90eXBlIGZvciBib2d1cyBmdW5jdGlvbgoJJ2Vtc2V0JyAocHJlc3VtYWJseSBzaG91bGQgaGF2ZSBiZWVuICdtZW1zZXQnIC0gd2hpY2ggaXMgdGhlcmUpLgoKVGh1IEZlYiAyNyAxMTo0NjozMyAxOTkyICBKb2huIEdpbG1vcmUgIChnbnUgYXQgY3lnbnVzLmNvbSkKCgkqIGNvbmZpZ3VyZS5pbiAobWlwcy1iaWctKiB0YXJnZXQpOiAgU2FtZSBpcyBJcmlzLgoKVGh1IEZlYiAyNyAwOToyNDo1NiAxOTkyICBTdGV2ZSBDaGFtYmVybGFpbiAgKHNhYyBhdCB0aGVwdWIuY3lnbnVzLmNvbSkKCgkqIGFvdXR4LmggKHRyYW5zbGF0ZV9mcm9tX25hdGl2ZV9zeW1fZmxhZ3MpOiB3aGVuIGNyZWF0aW5nIGFuCglhbGlhcyBzeW1ib2wsIGZpbGwgaW4gdGhlIHNlY3Rpb24gYXMgdW5kZWZpbmVkLCByYXRoZXIgdGhhbgoJbGVhdmluZyBpdCBibGFuay4gSWYgYW4gb3V0cHV0IHNlY3Rpb24gY2FuJ3QgYmUgZm91bmQgZm9yIGEKCXN5bWJvbCwgdGhlbiBkb24ndCBjb3JlIGR1bXAuCgpXZWQgRmViIDI2IDE4OjA0OjQwIDE5OTIgIEsuIFJpY2hhcmQgUGl4bGV5ICAocmljaEBjeWdudXMuY29tKQoKCSogTWFrZWZpbGUuaW4sIGNvbmZpZ3VyZS5pbjogcmVtb3ZlZCB0cmFjZXMgb2YgbmFtZXN1YmRpciwKCSAgLXN1YmRpcnMsICQoc3ViZGlyKSwgJCh1bnN1YmRpciksIHNvbWUgcmNzIHRyaWdnZXJzLiAgRm9yY2VkCgkgIGNvcHlyaWdodHMgdG8gJzkyLCBjaGFuZ2VkIHNvbWUgZnJvbSBDeWdudXMgdG8gRlNGLgoKV2VkIEZlYiAyNiAxOTo0MDo1OSAxOTkyICBTdGV2ZSBDaGFtYmVybGFpbiAgKHNhYyBhdCB0aGVwdWIuY3lnbnVzLmNvbSkKCgkqIGJmZC5jOiBsaW50CgkqIGNvZmYtaDgzMDAuYzogZml4IHN0dXBpZCByZWxvYyBzdWJ0cmFjdGlvbiBidWcKCSogY29mZmNvZGUuaCAoY29mZl9zd2FwX2F1eF9vdXQpOiBvbmx5IHN3YXAgYSB0dm5keCBieSAyIGJ5dGVzLAoJc2luY2UgdGhhdCdzIGhvdyB3aWRlIGl0IGlzLiAoY29mZl9zbHVycF9zeW1ib2xfdGFibGUpOiBhbHdheXMgemVybyBvdXQKCXRoZSBzeW1ib2wuZmxhZ3MgYW5kIGRvbmVfbGluZW5vIGZpZWxkcy4KClR1ZSBGZWIgMjUgMTQ6Mjk6MjQgMTk5MiAgU3RldmUgQ2hhbWJlcmxhaW4gIChzYWMgYXQgcnRsLmN5Z251cy5jb20pCgoJKiBjb2ZmY29kZS5oIChjb2ZmX3dyaXRlX3N5bWJvbCk6IHdyaXRlIG91dCB0aGUgY29ycmVjdCBudW1iZXIgb2YKCWF1eGVudHMuCgkqIGNwdS1oODMwMC5jOiBmaXggZGlzYXNzZW1ibHkgYnVnCgpGcmkgRmViIDIxIDIxOjM5OjU2IDE5OTIgIEpvaG4gR2lsbW9yZSAgKGdudSBhdCBjeWdudXMuY29tKQoKCSogYmZkLWluLmggKGJmZF9lcnJtc2cpLCBjb2ZmY29kZS5oIChjb2ZmX3N3YXBfYXV4X2luLAoJc2VjdGlvbl9mcm9tX2JmZF9pbmRleCksIGNwdS1oODMwMC5jIChob3d0bypfY2FsbGJhY2spLAoJcmVsb2MuYywgc2VjdGlvbi5jIChiZmRfbWFwX292ZXJfc2VjdGlvbnMpLCB0YXJnZXRzLmMKCShiZmRfdGFyZ2V0X2xpc3QpOiAgUHJvdG9saW50LgoJKiBsaWJiZmQuaDogIFVwZGF0ZSB0byBtYXRjaCBhIGxpYmJmZC1pbi5oIGZyb20gYSBtb250aCBhZ28uCgpGcmkgRmViIDIxIDEwOjU3OjU0IDE5OTIgIFN0ZXZlIENoYW1iZXJsYWluICAoc2FjIGF0IHJ0bC5jeWdudXMuY29tKQoKCSogY29mZmNvZGUuaCAoY29mZl9zd2FwX2F1eF9pbik6IGxpbnQsIChjb2ZmX3ByaW50X3N5bWJvbCk6IHByaW50cwoJb3V0IHRhZ25keCB0b28uCgkqIGFvdXR4LmggKHN3YXBfc3RkX3JlbG9jX291dCwgc3dhcF9leHRfcmVsb2Nfb3V0KTogdXNlIHRoZSBvdXRwdXQKCXNlY3Rpb24gb2YgYSBzeW1ib2wgcmF0aGVyIHRoYW4gdGhlIHNlY3Rpb24gb2YgYSByZWZmZWQgc3ltYm9sIHRvCglkZXRlcm1pbmUgdGhlIHJfaW5kZXggb2YgYW4gZW1taXR0ZWQgcmVsb2MuCgpUaHUgRmViIDIwIDE4OjEwOjM0IDE5OTIgIFBlciBCb3RobmVyICAoYm90aG5lciBhdCBjeWdudXMuY29tKQoKCSogUE9SVElORzogTmV3IChwcmVsaW1pbmFyeSkgcG9ydGluZyBndWlkZS4KCldlZCBGZWIgMTkgMjE6Mzk6MzcgMTk5MiAgSm9obiBHaWxtb3JlICAoZ251IGF0IGN5Z251cy5jb20pCgoJKiBib3V0LmMgKGNhbGxqX2NhbGxiYWNrKSwgY29mZi1hMjlrLmMgKGEyOWtfcmVsb2MpLCBjb2ZmLW04OGsuYwoJKGhvd3RvX2h2cnQxNik6ICBsaW50LgoKTW9uIEZlYiAxNyAxMjowMjoxNyAxOTkyICBQZXIgQm90aG5lciAgKGJvdGhuZXIgYXQgY3lnbnVzLmNvbSkKCgkqIGhwMzAwYnNkLmMgKG5ldyksIGNvbmZpZy9tdC1ocDMwMGJzZDogIE1ha2UgaHAzMDBic2QKCWEgZnVsbCBjb25maWd1cmF0aW9uICh3aXRoIHBvc3NpYmxlIGNyb3NzLWRldmVsb3BtZW50KSwKCWluc3RlYWQgb2YgdXNpbmcgaG9zdC1hb3V0LmMuCgpTdW4gRmViIDE2IDEzOjAxOjQ5IDE5OTIgIFBlciBCb3RobmVyICAoYm90aG5lciBhdCBjeWdudXMuY29tKQoKCSogYW91dC10YXJnZXQuaCAoTVkod3JpdGVfb2JqZWN0X2NvbnRlbnRzKToKCVNldCBvYmpfcmVsb2NfZW50cnlfc2l6ZSAoYWJmZCkuCgkqIGdlbi1hb3V0LmM6ICBDaGFuZ2UgdG8gZW1pdCBhIC5jIGZpbGVzLCBub3QgYSAuaCBmaWxlLgoKVGh1IEZlYiAxMyAyMDoxMTo0NyAxOTkyICBGcmVkIEZpc2ggIChmbmYgYXQgY3lnbnVzLmNvbSkKCgkqIGVsZi5jIChlbGZfc2x1cnBfc3ltYm9sX3RhYmxlKTogIFJlbW92ZSBvYnNvbGV0ZSB1c2Ugb2YKCUJTRl9BQlNPTFVURSBhbmQgcmVwbGFjZSB3aXRoIGJmZF9hYnNfc2VjdGlvbiByZWZlcmVuY2UuCgpUaHUgRmViIDEzIDE3OjIyOjQ0IDE5OTIgIFN0ZXZlIENoYW1iZXJsYWluICAoc2FjIGF0IHJ0bC5jeWdudXMuY29tKQoKCSogY29mZmNvZGUuaCAoZ2V0X25vcm1hbGl6ZWRfc3ltdGFiKTogZml4ZWQgYnVnIHdoZXJlIHN5bWJvbHMKCXdpdGggbW9yZSB0aGFuIG9uZSBhdXhlbnQgY2FuIGNhdXNlIG5hc3R5IGNvcmUgZHVtcHMuCgoJKiBjb2ZmY29kZS5oLCBsaWJjb2ZmLmM6IGFkZGVkIG5ldyBmaWVsZGVkIHRvIGNvZmZfc3ltYm9sX3N0cnVjdAoJImRvbmVfbGluZW5vIiBzbyB0aGF0IGEgc3ltYm9sIHdoaWNoIGFwcGVhcnMgdHdpY2UgaW4gdGhlIHN5bWJvbAoJdGFibGUgb25seSBnZXRzIGl0J3MgbGluZW51bWJlcnMgcmVsb2NhdGVkIG9uY2UuIE1vZGlmZWQKCShjb2ZmX3dyaXRlX25hdGl2ZV9zeW1ib2wpIGFuZCAoY29mZl9tYWtlX2VtcHR5X3N5bWJvbCkgdG8gbWFrZQoJdXNlIG9mIGl0LgoKVHVlIEZlYiAgNCAxNTozOTo1NSAxOTkyICBTdGV2ZSBDaGFtYmVybGFpbiAgKHNhYyBhdCBydGwuY3lnbnVzLmNvbSkKCgkqIGFvdXR4Lmg6ICh0cmFuc2xhdGVfZnJvbV9uYXRpdmVfc3ltX2ZsYWdzKTogZml4IGNvbnN0cnVjdG9yCglzdHVmZiB0byB1c2UgdGhlIE5ldyBPcmRlci4KCkZyaSBKYW4gMzEgMDE6MzQ6NDUgMTk5MiAgU3R1IEdyb3NzbWFuICAoZ3Jvc3NtYW4gYXQgY3lnbnVzLmNvbSkKCgkqIGllZWUuYzogIENoYW5nZSB0eXBlIG9mIGVudmlbXSB0byB1bnNpZ25lZCBjaGFyLgoKCSogY29uZmlndXJlLmluOiAgZml4IHZheCB1bHRyaXggY29uZmlndXJhdGlvbi4KCgkqIGVsZi5jIChiZmRfc2VjdGlvbl9mcm9tX3NoZHIpOiAgRGVhbCB3aXRoIG51bGwgcmV0dXJuIGZyb20KCWJmZF9tYWtlX3NlY3Rpb24oKS4gIChlbGZfb2JqZWN0X3ApOiAgU2VsZWN0IGVuZGlhbmVzcyBwcm9wZXJseS4KCkZyaSBKYW4gMzEgMDE6MTk6NTUgMTk5MiAgSm9obiBHaWxtb3JlICAoZ251IGF0IGN5Z251cy5jb20pCgoJKiBob3N0cy9oLXRhaG9lLmgsIGgtdmF4YnNkLmg6ICBGaXggc3RhY2sgaW4gY29yZSBmaWxlcy4KClRodSBKYW4gMzAgMjM6NTE6MDcgMTk5MiAgSm9obiBHaWxtb3JlICAoZ251IGF0IGN5Z251cy5jb20pCgoJKiBNYWtlZmlsZS5pbjogIGhvc3QtYW91dC5jIGRvZXNuJ3QgZGVwZW5kIG9uIGFvdXQtcGFyYW1zLmguCgkqIGFvdXQtdGFyZ2V0Lmg6ICBVc2UgVEFSR0VUX0JJR19FTkRJQU5fUCB0byBzZXQgdXAgdmVjdG9yLgoJKiBob3N0LWFvdXQuYzogIERvbid0IHVzZSBhb3V0LXBhcmFtcy5oOyBjb25maWd1cmUgdGhlc2Ugc3lzdGVtcwoJaW4gdGhlaXIgeG0gZmlsZXMsIG5vdCBpbiBhIHJhbmRvbWx5IGdlbmVyYXRlZCBmaWxlLgoJKiBob3N0cy9oLWhwMzAwYnNkLmgsIGgtdGFob2UuaCwgaC12YXhic2QuaCwgaC12YXh1bHQuaDoKCVNwZWNpZnkgYnl0ZSBvcmRlci4KCSogaG9zdHMvaC12YXhic2QuaDogIERlZmluZSB0aGUgZm9ybSBvZiBleGVjIGFuZCBjb3JlIGZpbGVzLgoKVGh1IEphbiAzMCAxMzowMjo0MSAxOTkyICBQZXIgQm90aG5lciAgKGJvdGhuZXIgYXQgY3lnbnVzLmNvbSkKCgkqIGNvbmZpZy9tdC10YWhvZSwgY29uZmlnL210LXZheDogIENoYW5nZSBERUZBVUxUX1ZFQ1RPUiB0bwoJaG9zdF9hb3V0X3ZlYyBoZXJlIGFzIHdlbGwuCgpUaHUgSmFuIDMwIDExOjQxOjQ1IDE5OTIgIFN0dSBHcm9zc21hbiAgKGdyb3NzbWFuIGF0IGN5Z251cy5jb20pCgoJKiBob3N0LWFvdXQuYzogIENoYW5nZSBUQVJHRVROQU1FIHRvICJhLm91dCIgdG8gYmUgY29tcGF0aWJsZSB3aXRoCglnZGIuICBjb25maWcvbXQtaHAzMDBic2Q6ICBDaGFuZ2UgREVGQVVMVF9WRUNUT1IgdG8gaG9zdF9hb3V0X3ZlYwoJdG8gcHJldmVudCB1bmRlZmluZWQgc3ltYm9sLgoKVGh1IEphbiAzMCAwNzoyNjo1MyAxOTkyICBTdGV2ZSBDaGFtYmVybGFpbiAgKHNhYyBhdCBydGwuY3lnbnVzLmNvbSkKCglWYXJpb3VzIGxpbnRzIGZvdW5kIG9uIFBlcnNTb255CgkqIGFvdXR4Lmg6IGNhc3QgYW4gZW51bQoJKiBjb2ZmLWEyOWsuYzogbWFueSBpbnRzIGluIHJlbG9jIHN0cnVjdHVyZSB0dXJuZWQgdG8gZW51bQoJKiBjb2ZmY29kZS5oOiBtb3JlIGVudW1zCgkqIGNwdS1oODMwMC5jOiBtb3JlIGVudW1zCgkqIG9wbmNscy5jOiBtb3JlIGVudW1zCgpUaHUgSmFuIDMwIDAxOjE5OjU2IDE5OTIgIEpvaG4gR2lsbW9yZSAgKGdudSBhdCBjeWdudXMuY29tKQoKCSogY29uZmlndXJlLmluOiAgTWFrZSBUYWhvZSBjb25maWd1cmF0aW9uIHdvcmsgYWdhaW4uCgkqIGJmZC1pbi5oOiAgUmVtb3ZlIHRyYWlsaW5nIGNvbW1hIGZyb20gZW51bSBkZWNsYXJhdGlvbi4KCSogaWVlZS5jOiAgQ2FuJ3QgcHV0IGJ5dGUgdmFsdWVzID4weDdGIGludG8gYSBzaWduZWQgY2hhci4KClR1ZSBKYW4gMjggMjE6MTA6NTEgMTk5MiAgRnJlZCBGaXNoICAoZm5mIGF0IGN5Z251cy5jb20pCgoJKiBNYWtlZmlsZS5pbjogIEFkZCBkZXBlbmRlbmNpZXMgZm9yIHZhcmlvdXMgY29mZi0qLm8gZmlsZXMuCgoJKiBlbGYuYzogIFJlbW92ZSBleHRyYW5lb3VzIHBhcmVuIGZyb20gY29yZV9wcnBzaW5mbyBhbmQKCWNvcmVfcHJwc3RhdHVzIG1hY3JvcywgcmVuYW1lIGNvcmVfcHJwc3RhdHVzIHRvIGNvcmVfcHJzdGF0dXMuCglSZXBsYWNlIHJlZmVyZW5jZXMgdG8gb2xkIHNlY3Rpb24gInNpemUiIG1lbWJlciB3aXRoIG5ldwoJIl9yYXdfc2l6ZSIgbWVtYmVyLiAgSW1wbGVtZW50IGVsZl9tYWtlX2VtcHR5X3N5bWJvbCwgd2hpY2gKCWlzIG5vdyB1c2VkLgoKVHVlIEphbiAyOCAxNDo1MTo0MCAxOTkyICBTdHUgR3Jvc3NtYW4gIChncm9zc21hbiBhdCBjeWdudXMuY29tKQoKCSogdHJhZC1jb3JlLmMsIGJmZC5jLCAuLi9pbmNsdWRlL2JmZC5oOiAgVmFyaW91cyBmaXhlcyBmb3IgUE1BWAoJY29yZSByZWFkaW5nLgoKVHVlIEphbiAyOCAxMDo0NjozMiAxOTkyICBTdGV2ZSBDaGFtYmVybGFpbiAgKHNhYyBhdCBydGwuY3lnbnVzLmNvbSkKCgkqIGNvZmZjb2RlLmggKGJmZF9jb2ZmX3JlbGF4X3NlY3Rpb24pOiBub3cgc3RhdGljLgoJKGJmZF9jb2ZmX2dldF9yZWxvY2F0ZWRfc2VjdGlvbl9jb250ZW50cyk6IHZhcmlvdXMgdHlwZSBsaW50cy4KCk1vbiBKYW4gMjcgMTk6NDQ6MDggMTk5MiAgU3RldmUgQ2hhbWJlcmxhaW4gIChzYWMgYXQgcnRsLmN5Z251cy5jb20pCgoJTmV3IGVudHJ5IHBvaW50IGluIHRoZSB0cmFuc2ZlciB2ZWN0b3IgLSBiZmRfcmVsYXhfc2VjdGlvbi4KCgkqIGFvdXQtdGFyZ2V0Lmg6IGFkZCB0byB2ZWN0b3IsIGNhbGwgZ2VuZXJpY19yZWxheAoJKiBiZmQtaW4uaDogYWRkIHRvIHZlY3RvcgoJKiBiZmQuYzogYWRkICNkZWZpbmUgZm9yIHZlY3RvcgoJKiBib3V0LmM6IGFkZCB0byB2ZWN0b3IsIGNhbGwgZ2VuZXJpY19yZWxheAoJKiBjb2ZmY29kZS5oOiBhZGQgdG8gdmVjdG9yLCBhbHNvIG5vdyBoYXMgY29mZiBzcGVjaWZpYyByZWxheCBjb2RlCglmb3IgdGhlIHJlbGF4YWJsZSBIOC8zMDAgcmVsb2NzLiBBbHNvIGNsZWFuIHVwIGFicyBzZWN0aW9uIGNydWZ0LgoJKiBlbGYuYzogY2FsbCBnZW5lcmljX3JlbGF4CgkqIGllZWUuYzogY2FsbCBuZXcgdmVjdG9yLCBjbGVhbiB1cCBzb21lIGJ1Z3MgZHVlIHRvIHRoZSBjcmVhdGlvbgoJb2YgYmZkX2Fic19zZWN0aW9uCgkqIGxpYmJmZC5oOiBhZGQgYmZkX2dlbmVyaWNfcmVsYXhfc2VjdGlvbiBFWEZVTgoJKiBvYXN5cy5jOiBjYWxsIGdlbmVyaWNfcmVsYXgKCSogcmVsb2MuYzogaW1wbGVtZW50IGdlbmVyaWNfcmVsYXgKCSogc2VjbGV0LmM6IG1vdmVkIG11Y2ggb2YgdGhpcyBpbnRvIGNvZmZjb2RlLmgKCSogc3JlYy5jOiBjYWxsIGdlbmVyaWNfcmVsYXgKCSogdGFyZ2V0cy5jOiBkZWZpbmUgbmV3IHRyYW5zZmVyIHZlY3RvcgoKRnJpIEphbiAyNCAxNDo0MDoxNyAxOTkyICBTdGV2ZSBDaGFtYmVybGFpbiAgKHNhYyBhdCBydGwuY3lnbnVzLmNvbSkKCgkqIGV2ZXJ5dGhpbmc6IG5vdyBtb2RpZmllZCB0byB1c2Ugc21hbGxlciByZWxvYyB0eXBlLiBTZWxmIGhvc3RzCglvbiBzdW4zICYgc3VuNC4KClNhdCBKYW4gMTggMTc6MDA6MTYgMTk5MiAgRnJlZCBGaXNoICAoZm5mIGF0IGN5Z251cy5jb20pCgoJKiBjb25maWcvbWgtc3RyYXR1cywgY29uZmlnL210LWk4NjAtZWxmLCBob3N0cy9oLXN0cmF0dXM6CglOZXcgZmlsZXMgZm9yIHN0cmF0dXMuCgoJKiBjb25maWd1cmUuaW46ICBBZGQgY29uZmlndXJhdGlvbiBmcmFnbWVudHMgZm9yIHN0cmF0dXMuCgpXZWQgSmFuIDE1IDEwOjAyOjQzIDE5OTIgIEZyZWQgRmlzaCAgKGZuZiBhdCBjeWdudXMuY29tKQoKCSogYW91dHguaCAoTkFNRShhb3V0LGZpbmRfbmVhcmVzdF9saW5lKSk6IERlY2xhcmUgdmFyaW91cyBmaWxlbmFtZQoJdmFyaWFibGVzIGFzIENPTlNUIHNpbmNlIHRoZXkgYXJlIHNldCB0byBwb2ludCB0byBhIGNvbnN0IGNoYXIKCXN0cmluZy4gIEZpeGVzIGNvbXBpbGVyIGNvbXBsYWludHMuCgpGcmkgSmFuIDEwIDE3OjQ0OjUzIDE5OTIgIEZyZWQgRmlzaCAgKGZuZiBhdCBjeWdudXMuY29tKQoKCSogaG9zdHMvaC1hbWl4LmggaG9zdHMvaC1pMzg2djQuaDogIENoYW5nZSBhYm9ydCgpIHRvIGEgZnVuY3Rpb24KCXJldHVybmluZyB2b2lkLgoKRnJpIEphbiAxMCAxNDozMzozMiAxOTkyICBQZXIgQm90aG5lciAgKGJvdGhuZXIgYXQgY3lnbnVzLmNvbSkKCgkqIGFvdXR4LmggKE5BTUUoYW91dCxmaW5kX25lYXJlc3RfbGluZSkpOiAgUmVjb2duaXplIE5fU09MCglzeW1ib2xzLCBzbyB0aGF0IHdlIGNhbiBlbWl0IHRoZSBjb3JyZWN0IGZpbGUgbmFtZSBldmVuCglpZiBpdCdzIGFuIGluY2x1ZGUgZmlsZS4KClRodSBKYW4gIDIgMTY6NDM6MzQgMTk5MiAgSm9obiBHaWxtb3JlICAoZ251IGF0IGN5Z251cy5jb20pCgoJKiBjb2ZmLWk5NjAuYzogIEFkZCBDT0ZGX1NXQVBfVEFCTEUgdG8gbGl0dGxlX3ZlYyBhcyB3ZWxsIGFzIGJpZ192ZWMuCgkoUmVwb3J0ZWQgYnkgam9obkBsYWJ0YW0ubGFidGFtLm96LmF1IChKb2huIENhcmV5KSkuCgpXZWQgSmFuICAxIDA0OjIzOjA2IDE5OTIgIEZyZWQgRmlzaCAgKGZuZiBhdCBjeWdudXMuY29tKQoKCSogZWxmLmM6ICBDaGFuZ2UgYWxsICcjaWYgSEFWRV9QUk9DRlMnIHRvICcjaWZkZWYgSEFWRV9QUk9DRlMnLgoKCSogY29uZmlnL21oLWFtaXgsIGNvbmZpZy9taC1pMzg2djQ6ICBSZW1vdmUgSERFRklORVMgdGhhdCB3YXMKCWJlaW5nIHVzZWQgdG8gLURIQVZFX1BST0NGUy4KCgkqIGhvc3RzL2gtYW1peCwgaG9zdHMvaC1pMzg2djQ6ICBBZGQgJyNkZWZpbmUgSEFWRV9QUk9DRlMnLiAgTW92ZQoJJyNpbmNsdWRlICJmb3Blbi1zYW1lLmgiJyB0byBlbmQgb2YgZmlsZSB0byBtYXRjaCBvdGhlciBoLSogZmlsZXMuCgpGcmkgRGVjIDIwIDEyOjA2OjE3IDE5OTEgIEZyZWQgRmlzaCAgKGZuZiBhdCBjeWdudXMuY29tKQoKCSogY29uZmlndXJlLmluOiAgQ2hhbmdlIHN2cjQgcmVmZXJlbmNlcyB0byBzeXN2NC4gIEFkZCBjYXNlCgkidW5rbm93biIgZm9yIHRhcmdldCB2ZW5kb3IgYW5kIGluZmVyIHNvbWUgdGFyZ2V0cyBiYXNlZAoJb24gdGhlIHNwZWNpZmllZCBvcGVyYXRpbmcgc3lzdGVtLgoKV2VkIERlYyAxOCAxNzoxNzo1OSAxOTkxICBTdHUgR3Jvc3NtYW4gIChncm9zc21hbiBhdCBjeWdudXMuY29tKQoKCSogYmZkLWluLmgsIGxpYmFvdXQuaDogIEFOU0lmeSBlbnVtcy4KCldlZCBEZWMgMTggMTY6MTI6MjUgMTk5MSAgU3RldmUgQ2hhbWJlcmxhaW4gIChzYWMgYXQgcnRsLmN5Z251cy5jb20pCgoJKiBhcmNoaXZlLmMgKG5vcm1hbGl6ZSk6IGNyZWF0ZWQgdmVyc2lvbiBmb3IgVk1TIHdoaWNoIHJlbW92ZXMgdGhlCglWTVMgZGlyZWN0b3J5IGNyYXAgZnJvbSB0aGUgZnJvbnQgYW5kIGVuZCBvZiBhIGZpbGVuYW1lLCBlZyB0dXJuCglbLS5mb29dYmFyLm9iajsxMjMgaW50byBiYXIub2JqCgkoYmZkX2NvbnN0cnVjdF9leHRlbmRlZF9uYW1lX3RhYmxlKTogbm93IHdyaXRlcyBpbmRleCBpbnRvIGFuCglleHRlbmRlZCBuYW1lIHRhYmxlIGluIGRlY2ltYWwgLSB0aGUgc2FtZSBiYXNlIHVzZWQgdG8gcmVhZCBhbgoJZXh0ZW5kZWQgbmFtZSB0YWJsZS4KCldlZCBEZWMgMTggMTQ6NDA6MzkgMTk5MSAgUGVyIEJvdGhuZXIgIChib3RobmVyIGF0IGN5Z251cy5jb20pCgoJKiBhb3V0LWVuY2FwLmM6ICBGaXggdG8gdXNlIGFvdXQtdGFyZ2V0LmguCgkqIGFvdXRmMS5oOiAgVXNlIHN0YW5kYXJkIE1ZX29iamVjdF9wIGFuZCBNWV9jYWxsYmFjawoJaW4gYW91dC10YXJnZXQuaC4gIFJlbW92ZSB0YXJnZXQtc3BlY2lmaWMgdmVyc2lvbnMuCgkqIGhvc3QtYW91dC5jOiAgUmUtd3JpdGUgdG8gdXNlIGFvdXQtdGFyZ2V0LmguCgkqIGdlbi1hb3V0LmM6ICBOZXcgZmlsZXMgdXNlIHdpdGggaG9zdC1hb3V0LmMgdG8gZ2VuZXJhdGUKCWhvc3Qtc3BlY2lmaWMgYS5vdXQtcmVsYXRlZCBwYXJhbWV0ZXJzLgoJKiBNYWtlZmlsZS5pbjogIGhvc3QtYW91dC5vIGRlcGVuZHMgb24gYW91dC1wYXJhbXMuaCwgd2hpY2ggaXMKCWdlbmVyYXRlZCBieSBnZW4tYW91dC4KCSogYW91dC10YXJnZXQuaDogIE1ha2UgYSBsaXR0bGUgbW9yZSBmbGV4aWJsZS4KCSogbGliYW91dC5oLCBhb3V0LXRhcmdldC5oOiAgUmVtb3ZlZCBXT1JLX09VVF9GSUxFX1BPU1RJT05TCgltYWNyby4gIEluc3RlYWQsIGlubGluZSBpdCBpbiBhb3V0LXRhcmdldC5oLgoJKiBuZXdzb3MzLmM6ICBEZWZpbmUgTl9TSEFSRURfTElCKHgpIGFzIDAgdG8gYXZvaWQKCWEgZ2NjIC1XYWxsIHdhcm5pbmcuCgkqIGFyY2hpdmUuYzogIEFkZCBtaXNzaW5nIGNvbW1hcyBpbiBERUZVTiBtYWNybyAoMiBwbGFjZXMpLgoJKiBlbGYuYywgY29mZmNvZGUuaCwgYW91dGYxLmg6ICBVc2UgQU5TSSBmdW5jdGlvbnMgaW5zdGVhZCBvZgoJQmVya2VsZXkgb25lcywgbm93IHRoYXQgbGliaWJlcnR5IGhhcyB0aGVtOgoJYmNvcHktPm1lbWNweSwgYnplcm8tPm1lbXNldCwgYmNtcC0+bWVtY21wLgoJKiBhb3V0eC5oOiAgVmFyaW91cyB0b3VjaC11cHM6ICBSZS1mb3JtYXR0aW5nLCBmaXggYSBjYXN0LAoJcmVtb3ZlIHVudXNlZCB2YXJpYWJsZS4KClR1ZSBEZWMgMTcgMTk6NDg6NTkgMTk5MSAgRnJlZCBGaXNoICAoZm5mIGF0IGN5Z251cy5jb20pCgoJKiBlbGYuYyAoZWxmX2NvcmVfZmlsZV9tYXRjaGVzX2V4ZWN1dGFibGVfcCk6ICBFbmNsb3NlIGNvcmVuYW1lCglhbmQgZXhlY25hbWUgaW5zaWRlIEhBVkVfUFJPQ0ZTIGlmZGVmIHNpbmNlIHRoZXkgYXJlIHVudXNlZAoJd2hlbiBpdCBpcyBub3QgZGVmaW5lZC4KCk1vbiBEZWMgMTYgMTI6MDA6MTAgMTk5MSAgRnJlZCBGaXNoICAoZm5mIGF0IGN5Z251cy5jb20pCgoJKiBlbGYuYzogIEZsYWcgYWxsIHNlY3Rpb25zIGFzIGVpdGhlciBjb2RlIG9yIGRhdGEuICBXZSBjYW4ndAoJYmUgc3VyZSB3aGF0IHRoZXkgYXJlIGFueXdheSwgc2luY2UgRUxGIGRvZXNuJ3QgZml0IHRoZQoJdHJhZGl0aW9uYWwgbW9kZWwgb2YgdGV4dCtkYXRhK2JzcyB2ZXJ5IHdlbGwuICBBZGQgbmV3IGxvY2FsCglmdW5jdGlvbiBlbGZfcmVhZCgpIHRvIHNpbXBsaWZ5IGNvZGUuICBSZWNvcmQgZW50cnkgcG9pbnQgaW4KCXRoZSBiZmQgc3RydWN0dXJlLgoKVGh1IERlYyAxMiAyMTowMToyMiAxOTkxICBKb2huIEdpbG1vcmUgIChnbnUgYXQgY3lnbnVzLmNvbSkKCgkqIGhvc3RzL2gtKi5oOiAgQ29uZmlndXJlIGZvcGVuIHVzaW5nIC4uL2luY2x1ZGUvZm9wZW4tKi5oCglyYXRoZXIgdGhhbiBOIGNvcGllcyBvZiB0aGUgc2FtZSBsaW5lcy4KCldlZCBEZWMgMTEgMTY6Mzk6NDUgMTk5MSAgU3RldmUgQ2hhbWJlcmxhaW4gIChzYWMgYXQgcnRsLmN5Z251cy5jb20pCgoJKiBjcHUtaDgzMDAuYzogZGlzYXNzZW1ibGUgYnJhbmNoIGRpc3BsYWNlbWVudHMgY29ycmVjdGx5CgkqIGNvZmYtaDgzMDAuYzogcHV0IHJlbG9jIG9mZnNldHMgb3V0IGluIDMyYml0cwoKCSogbWFrZWZpbGUuZG9zLCBjb25maWdkai5iYXQ6IE5ldyBmaWxlcyBmcm9tIERKCgkqIGNhY2hlLmM6IGZvcGVuIHdpdGggbmV3IG1hY3JvcyBpcyBuZWVkZWQgZm9yIERPUy4KCSogaWVlZS5jOiBlbnZpcm9uIHJlbmFtZWQgdG8gZW52aSB0byBzdG9wIGFuIGluY2x1ZGUgZmlsZQoJY29uZmxpY3QuCgkqIG9wbmNscy5jLCBjb2ZmLXJzNjAwMC5jOiBtb3JlIGZvcGVucyB3aXRoIG1hY3Jvcy4KClR1ZSBEZWMgMTAgMDQ6MDc6MjQgMTk5MSAgSy4gUmljaGFyZCBQaXhsZXkgIChyaWNoIGF0IHJ0bC5jeWdudXMuY29tKQoKCSogTWFrZWZpbGUuaW46IGluZm9kaXIgYmVsb25ncyBpbiBkYXRhZGlyLgoKU2F0IERlYyAgNyAxNjozOToyMyAxOTkxICBTdGV2ZSBDaGFtYmVybGFpbiAgKHNhYyBhdCBydGwuY3lnbnVzLmNvbSkKCgkgKiBNYWtlZmlsZS5pbjogZml4IHdoZXJlIGRvY2RpciBsaXZlcwoKCSAqIGFvdXR4LmgsIGFyY2hpdmUuYywgYXJjaHVyZXMuYywgYmZkLmMsIGNhY2hlLmMsIGNvZmYtbTg4ay5jLAoJIGNvZmZjb2RlLmgsIGNvcmUuYywgY3Rvci5jLCBlbGYuYywgZm9ybWF0LmMsIGllZWUuYywgaW5pdC5jLAoJIGxpYmJmZC5jLCBsaWJiZmQuaCwgbGliY29mZi5oLCBvcG5jbHMuYywgcmVsb2MuYywgc2VjdGlvbi5jLAoJIHNyZWMuYywgc3ltcy5jLCB0YXJnZXRzLmMgOiBhbGwgbmV3IGRvY3VtZW50YXRpb24gYW5kIGxpbnQKCSByZW1vdmFsLgoKClNhdCBEZWMgIDcgMDc6MjI6MDkgMTk5MSAgSm9obiBHaWxtb3JlICAoZ251IGF0IGN5Z251cy5jb20pCgoJKiBjb2ZmY29kZS5oLCBzcmVjLmM6ICBMaW50LgoKRnJpIERlYyAgNiAyMjo1ODo0OCAxOTkxICBLLiBSaWNoYXJkIFBpeGxleSAgKHJpY2ggYXQgcnRsLmN5Z251cy5jb20pCgoJKiBNYWtlZmlsZS5pbjogaW5zdGFsbCB1c2luZyBJTlNUQUxMX0RBVEEsIGFkZGVkIHN0YW5kYXJkcy50ZXh0CgkgIHN1cHBvcnQuCgoJKiBjb25maWd1cmUuaW46IG1hcmsgZGlyZWN0b3J5IGFzIHRhcmdldCBkZXBlbmRlbnQuICBjb25maWd1cmUKCSAgbm93cyB3b3JrcyBpbiBvYmpkaXIgYWx3YXlzIHNvIG1ha2UgZmlsZSBleGlzdGVuY2UgY2hlY2tzCgkgIGFnYWluc3QgJHtzcmNkaXJ9LgoKVGh1IERlYyAgNSAyMjo0NjoxOSAxOTkxICBLLiBSaWNoYXJkIFBpeGxleSAgKHJpY2ggYXQgcnRsLmN5Z251cy5jb20pCgoJKiBNYWtlZmlsZS5pbjogaWRlc3RkaXIgYW5kIGRkZXN0ZGlyIGdvIGF3YXkuICBBZGRlZCBjb3B5cmlnaHRzCgkgIGFuZCBzaGlmdCBncGwgdG8gdjIuICBBZGRlZCBDaGFuZ2VMb2cgaWYgaXQgZGlkbid0IGV4aXN0LiBkb2NkaXIKCSAgYW5kIG1hbmRpciBub3cga2V5ZWQgb2ZmIGRhdGFkaXIgYnkgZGVmYXVsdC4KCldlZCBEZWMgIDQgMTA6MTQ6MTcgMTk5MSAgU3RldmUgQ2hhbWJlcmxhaW4gIChzYWMgYXQgcnRsLmN5Z251cy5jb20pCgoJKiBhb3V0ZjEuaCAoc3Vub3NfPHNpemU+X29iamVjdF9wLCBzdW5vczRfY2FsbGJhY2spOiBtb3ZlZCB0aGUKCWNvbXB1dGF0aW9uIG9mIGFyY2ggYW5kIG1hY2hpbmUgdHlwZSBzbyBpdCdzIHdvcmtlZCBvdXQgYmVmb3JlCglzb21lX2FvdXRfb2JqZWN0X3AgaXMgY2FsbGVkLgoJKiBhb3V0eC5oOiAoc29tZV9hb3V0X29iamVjdF9wKTogZG9uJ3Qgc2V0IGFyY2ggYW5kIG1hY2ggdG8KCXVua25vd24uCgkqIGFyY2h1cmVzLmM6IGFkZCBleHRyYSBmaWVsZCAnc2VjdGlvbl9hbGlnbl9wb3dlcicgdG8gaG9sZAoJZGVmYXVsdCBzZWN0aW9uIGFsaWdubWVudCBpbiBvYmplY3QgZmlsZXMuCgkqIGNwdS1hMjlrLmMsIGNwdS1oODMwMC5jLCBjcHUtaTM4Ni5jLCBjcHUtaTk2MC5jLCBjcHUtbTY4ay5jLAoJY3B1LW04OGsuYywgY3B1LW1pcHMuYywgY3B1LXJzNjAwMC5jLCBjcHUtc3BhcmMuYywgY3B1LXZheC5jOgoJaW5pdGlhbGl6ZSB0aGUgbmV3IGZpZWxkLgoJKiBib3V0LmMgKGJfb3V0X2NhbGxiYWNrKTogcmVwbGFjZSB0aGUgdGV4dCBzaXplLCBzaW5jZSBhb3V0CglmcmllcyB0aGVtLgoJKiBhb3V0eC5oOiBEb2N1bWVudGF0aW9uIGluIHRoZSBuZXcgc3R5bGUKCldlZCBEZWMgIDQgMDI6MDA6MzAgMTk5MSAgSm9obiBHaWxtb3JlICAoZ251IGF0IGN5Z251cy5jb20pCgoJKiBiZmQuYyAoYmZkX2dldF9tdGltZSk6ICBEb24ndCBjYWNoZSBtdGltZSBhbnkgbW9yZTsgb25seQoJdXNlIHRoZSBzYXZlZCB2YWx1ZSBpZiBtdGltZV9zZXQgaXMgYWxyZWFkeSBzZXQgKGludGVuZGVkCglmb3IgYXJjaGl2ZSBmaWxlcywgdGhvdWdoIGFwcGFyZW50bHkgbm90IHVzZWQgeWV0KS4KClR1ZSBEZWMgIDMgMjI6NTQ6NTAgMTk5MSAgSm9obiBHaWxtb3JlICAoZ251IGF0IGN5Z251cy5jb20pCgoJKiB0YXJnZXRzLmM6ICBSZXZpc2UgY29tbWVudHMgYWJvdXQgaG93IHRvIGNvbmZpZ3VyZSB0aGUgdGFyZ2V0Cgl2ZWN0b3IsIHRvIG1hdGNoIHJlYWxpdHkuICBSZW1vdmUgbWVudGlvbiBvZiBvYnNvbGV0ZSBtZXRob2RzLgoJUmVtb3ZlIGxvbmcgbGlzdHMgb2YgY2FwaXRhbGl6ZWQgbWFjcm9zIHRoYXQgdHVybiBpbnRvIHRoZSBzYW1lCgl0aGluZyBpbiBsb3dlcmNhc2UuICBOb3JtYWwgdmVjdG9yIHNpbXBseSBsaXN0cyBhbGwga25vd24KCWxvd2VyY2FzZSB4dmVjIG5hbWVzOyBhbGwgb3RoZXIgY2FzZXMgYXJlIGhhbmRsZWQgYnkgU0VMRUNUX1ZFQ1MuCgoJKiBjb25maWcvbXQtaTM4Ni1jb2ZmOiAgU2V0IERFRkFVTFRfVkVDVE9SIHRvIHJlYWwgaWRlbnRpZmllciwKCW5vdCBtYWNybyBuYW1lLgoKCSogY29uZmlnL210LWk5NjAte2NvZmYsYm91dH06ICBVc2UgU0VMRUNUX1ZFQ1MgdG8gbWFrZSBhIHNob3J0CglsaXN0IG9mIHN1cHBvcnRlZCB0YXJnZXRzLgoKVHVlIERlYyAgMyAxNDowNjoxNSAxOTkxICBQZXIgQm90aG5lciAgKGJvdGhuZXIgYXQgY3lnbnVzLmNvbSkKCgkqIGFyY2hpdmUuYyAoYnNkX3dyaXRlX2FybWFwKTogIFRoZSBwYWQgYnl0ZSBzb21ldGltZXMgYWRkZWQgdG8KCXRoZSBzdHJpbmcgdGFibGUgaW4gYSBfXy5TWU1ERUYgbWVtYmVyIGlzIG5vdwoJY291bnRlZCBhcyBwYXJ0IG9mIHRoZSBzaXplIG9mIHRoZSBzdHJpbmcgdGFibGUuCglUaGlzIGlzIGNvbXBhdGlibGUgd2l0aCB0aGUgb2xkIHJhbmxpYiwgYXMgd2VsbCBhcyBTdW4ncy4KClR1ZSBEZWMgIDMgMTA6NTM6MzAgMTk5MSAgU3RldmUgQ2hhbWJlcmxhaW4gIChzYWMgYXQgcnRsLmN5Z251cy5jb20pCgoJKiBzcmVjLmM6IFJld3JvdGUgdG8gZml4IG1hbnkgYnVnczsgbm93IGdldHMgdGhlIHJlY29yZCB0eXBlCglyaWdodCwgZG9lc24ndCBjaG9rZSBvbiBpbnB1dCwgc2V0cyB0aGUgc3RhcnQgYWRkcmVzcyBpbiBhbiBTOSBhbmQKCWZpbGxzIGluIHRoZSBmaWxlbmFtZSBvbiBhbiBTMC4KClNhdCBOb3YgMzAgMjE6MTk6MTUgMTk5MSAgU3RldmUgQ2hhbWJlcmxhaW4gIChzYWMgYXQgcnRsLmN5Z251cy5jb20pCgoJKiBjcHUtaDgzMDAuYzogQWRkIHN1cHBvcnQgZm9yIE1FTUlORCBhZGRyZXNzaW5nIG1vZGUKCgkqIGNvZmYtYTI5ay5jOiBkZWZpbmVkIFJFTE9DX1BST0NFU1NJTkcgdG8gdGFrZSB0aGUgI2lmZGVmIG91dCBvZgoJY29mZmNvZGUuaAoJKiBjb2ZmY29kZS5oOiB1c2UgdGhlIG5ldyBtYWNybyBpZiBhdmFpbGFibGUKCgkqIGVsZi5jIChlbGZfY29yZWZpbGVfbm90ZSk6IGNhc3QgbWFsbG9jIHRvIGF2b2lkIHdhcm5pbmcuCgkqIE1ha2VmaWxlLmluOiBGaXhlZCBkZXBlbmRlbmNpZXMgZHVlIHRvIGZpbGUgcmVuYW1lCgoJKiBhb3V0LWVuY2FwLmMsIGFvdXRmMS5oLCBhb3V0eC5oLCBhcmNoaXZlLmMsIGJvdXQuYywgY29mZi1hMjlrLmMsCgljb2ZmLWg4MzAwLmMsIGNvZmYtaTM4Ni5jLCBjb2ZmLWk5NjAuYywgY29mZi1tNjhrLmMsIGNvZmYtbTg4ay5jLAoJY29mZi1taXBzLmMsIGNvZmYtcnM2MDAwLmMsIGNwdS1oMzAwLmMsIGVsZi5jLCBpMzg2YW91dC5jLAoJbmV3c29zMy5jLCBzdGFiLXN5bXMuYywgc3ltcy5jOiBBbGwgdGhlc2UgZmlsZXMgaGF2ZSBoYWQgdGhlaXIKCSNpbmNsdWRlcyBhbHRlcmVkIHRvIHBvaW50IHRvIHRoZSBuZXcgcGxhY2VzLgoKRnJpIE5vdiAyOSAyMDowNDo0OSAxOTkxICBGcmVkIEZpc2ggIChmbmYgYXQgY3lnbnVzLmNvbSkKCgkqIGNvbmZpZy9taC1pMzg2djQsIGNvbmZpZy9taC1pMzg2LWVsZiwgaG9zdHMvaC1pMzg2djQuaDogIE5ldyBmaWxlcy4KCgkqIGNvbmZpZ3VyZS5pbjogIEFkZCB2ZW5kb3IgIm5jciIgYXMgc3VwcG9ydGVkIHBlci10YXJnZXQgdmVuZG9yLgoJQWRkIHN2cjQgY2FzZSBmb3IgaTM4NiBwZXItaG9zdCBjYXNlLgoKCSogZWxmLmMgKGVsZl9vYmplY3RfcCwgZWxmX2NvcmVfZmlsZV9wKTogIEFkZCBtaXNzaW5nICJicmVhayIgdG8KCUVMRkRBVEEyTFNCIGNhc2VzLgoKRnJpIE5vdiAyOSAxMjoxNjo1MSAxOTkxICBQZXIgQm90aG5lciAgKGJvdGhuZXIgYXQgY3lnbnVzLmNvbSkKCgkqIHN5bXMuYyAoYmZkX2RlY29kZV9zeW1jbGFzcyk6ICBSZXR1cm4gJ0EnCglmb3Igc3ltYm9scyB0aGF0IGFyZSBib3RoIGFic29sdXRlIGFuZCBnbG9iYWwuCgkqIGFyY2hpdmUuYyAoYmZkX3NwZWNpYWxfdW5kb2N1bWVudGVkX2dsdWUpOiAgUmV0dXJuIE5VTEwKCWlmIGJmZF9hcl9oZHJfZnJvbV9maWxlc3lzdGVtIHJldHVybnMgTlVMTC4KClR1ZSBOb3YgMjYgMDk6MTA6NTUgMTk5MSAgU3RldmUgQ2hhbWJlcmxhaW4gIChzYWMgYXQgY3lnbnVzLmNvbSkKCgkqIE1ha2VmaWxlLmluOiBhZGRlZCBjb2ZmLWg4MzAwCgkqIGNvbmZpZ3VyZS5pbjogbm93IGg4IGlzIGEgY29mZiB0YXJnZXQKCSogY3B1LWg4MzAwLmM6IGZpeCB2YXJpb3VzIGRpc2Fzc2VtYmx5IHByb2JsZW1zCgkqIGxpYmNvZmYuaDogdG9vayBvdXQgc29tZSBjb2RlIHdoaWNoIGhhcyBiZWVuICMwZWQgZm9yIGEgbG9uZwoJdGltZS4KCSogdGFyZ2V0cy5jOiBhZGRlZCBoOCBjb2ZmCgkqIGNvZmYtYTI5ay5jLCBjb2ZmLWkzODYuYywgY29mZi1pOTYwLmMsIGNvZmYtbTY4ay5jLCBjb2ZmLW04OGsuYwoJYWRkZWQgbmV3IG1hY3JvIFJUWVBFMkhPV1RPIHRvIHRha2UgYSBsb2FkIG9mICNpZmRlZnMgb3V0IG9mCgljb2ZmY29kZS5oCgkqIGNvZmZjb2RlLmg6IFN0YXJ0ZWQgdG8gY2hhbmdlIHRoZSB3YXkgbWFjaGluZSBkZXBlbmRlbmNpZXMgYXJlCgloYW5kbGVkLCBmcm9tIHRoZSBuZXN0IG9mICNpZmRlZnMgdG8gbWFjcm9zIGRlZmluZWQgaW4gdGhlCglpbmNsdWRpbmcgY29mZi08Zm9vPi5jCgpGcmkgTm92IDIyIDA4OjExOjQyIDE5OTEgIEpvaG4gR2lsbW9yZSAgKGdudSBhdCBjeWdudXMuY29tKQoKCSogYW91dHguaCAoc29tZV9hb3V0X29iamVjdF9wKTogIFNldCB0aGUgYGV4ZWN1dGFibGUnIGJpdAoJaWYgdGhlIGVudHJ5IHBvaW50IGlzIGNvbnRhaW5lZCBpbiB0aGUgdGV4dCBzZWdtZW50LCBldmVuIGlmIHRoZQoJdGV4dCBzZWdtZW50IGlzIGF0IGxvY2F0aW9uIDAuCgoJKiBjb2ZmLW1pcHMuYywgY29mZmNvZGUuaDogIFBldGVyIFNjaGF1ZXIncyBwYXRjaCB0byBrbHVkZ2UgaW4KCW5vbnN0YW5kYXJkIE1JUFMgc2VjdGlvbnMgKC5yZGF0YSwgLnNkYXRhLCBldGMpLgoKCSogYW91dHguaCwgYmZkLmMsIGNvZmZjb2RlLmgsIGllZWUuYywgb2FzeXMuYywgdGFyZ2V0cy5jOiBDT05TVCBsaW50LgoJKiBsaWJiZmQtaW4uaCwgbGliYmZkLmgsIGFvdXR4LmgsIGNvZmZjb2RlLmgsIGVsZi5jLCBsaWJhb3V0Lmg6CglSZW5hbWUgQUxJR04gdG8gQkZEX0FMSUdOIHRvIGF2b2lkIGNvbmZsaWN0IHdpdGggQlNEIDxzeXMvcGFyYW0uaD4uCgkqIGxpYmJmZC5jOiAgTGludC4KCSogaG9zdC1hb3V0LmMsIHRyYWQtY29yZS5jOiAgRml4IHdyaXRlX2FybWFwIHByb3RvdHlwZXMuICBMaW50LgoKVGh1IE5vdiAyMSAxOTo1Njo0MCAxOTkxICBQZXIgQm90aG5lciAgKGJvdGhuZXIgYXQgY3lnbnVzLmNvbSkKCgkqIHN0YWItc3ltcy5jLCBzeW1zLmM6ICBNb3ZlZCBiZmRfc3RhYl9uYW1lKCkgYW5kIGJmZF9zdGFiX25hbWVzW10KCWZyb20gc3ltcy5jIHRvIG5ldyBmaWxlIHN0YWItc3ltcy5jLiAgQWxzbywgc2luY2UgR05VIGV4dGVuZGVkCgl0eXBlIGNvZGVzIHN1Y2ggYXMgTl9TRVRUIGFyZSBubyBsb25nZXIgaW4gLi4vaW5jbHVkZS9zdGFiLmRlZiwKCWluY2x1ZGUgdGhlbSBtYW51YWxseS4KCSogc3RhYi1zeW1zLmMsIGFvdXR4Lmg6IFJlbmFtZWQgYmZkX3N0YWJfbmFtZSgpIGFuZAoJYmZkX3N0YWJfbmFtZXNbXSB0byBhb3V0X3N0YWJfbmFtZSgpIGFuZCBhb3V0X3N0YWJfbmFtZXNbXS4KCSogbGliYW91dC5oOiBBZGRlZCBwcm90b3R5cGUgZm9yIGFvdXRfc3RhYl9uYW1lKCkuCgkqIE1ha2VmaWxlLmluOiAgVXBkYXRlIE1ha2VmaWxlIGZvciBuZXcgc3RhYi1zeW1zLltjb10uCgpUaHUgTm92IDIxIDExOjUwOjQ5IDE5OTEgIEpvaG4gR2lsbW9yZSAgKGdudSBhdCBjeWdudXMuY29tKQoKCSogbGliYW91dC5oIChXT1JLX09VVF9GSUxFX1BPU0lUSU9OUyk6ICBPbmUgbW9yZSB0cnkgYXQgdGhpcwoJcmF0aGVyIGNvbXBsaWNhdGVkIHNlZW1pbmcgcHJvYmxlbS4gIEVsaW1pbmF0ZSBMT0dJQ0FMXyB2ZXJzaW9ucywKCWp1c3QgbWFrZSBOX1hYWCB3b3JrIGJ5IGV4Y2x1ZGluZyB0aGUgaGVhZGVyIGZyb20gdGhlIHRleHQgc2VnbWVudC4KCSogYW91dHguaDogIEZpeCBjb21tZW50cyB0byBtYXRjaC4KClR1ZSBOb3YgMTkgMTg6NDk6MDEgMTk5MSAgUGVyIEJvdGhuZXIgIChib3RobmVyIGF0IGN5Z251cy5jb20pCgoJKiBsaWJhb3V0LmggKFdPUktfT1VUX0ZJTEVfUE9TSVRJT05TKTogIFVzZSBuZXcgTE9HSUNBTF9UWFRBRERSLAoJTE9HSUNBTF9UWFRPRkYsIExPR0lDQUxfVFhUU0laRSBtYWNyb3MgdG8gZmlndXJlIG91dCBudW1iZXJzCglmb3IgdGhlICJsb2dpY2FsIiB0ZXh0IHNlZ21lbnQgKGkuZS4gbmV2ZXIgY29uc2lkZXIgdGhlIGV4ZWMKCWhlYWRlciB0byBiZSBwYXJ0IG9mIHRoZSB0ZXh0IHNlZ21lbnQpLiAgVGhpcyBjaGFuZ2UgaXMKCW5lZWRlZCBmb3IgY29uc2lzdGVuY3kgd2l0aCB2YXJpb3VzIG90aGVyIHBhcnRzIG9mIGJmZCBhbmQgbGQuCgkqIGFvdXR4LmggKE5BTUUoYW91dCxzb2VfYW91dF9vYmplY3RfcCkpOiAgRml4IGNvbW1lbnQsCglhbmQgbW92ZSBjYWxjdWxhdGlvbiBvZiBvYmpfdGV4dHNlYyhhYmZkKS0+c2l6ZSB0byBsaWJhb3V0LmguCgkqIGJmZC1pbi5oOiAgUmVtb3ZlZCBib2d1cyAnOycuCgoJKiBNYWtlZmlsZS5pbjogIEFkZCBNSU5JTUlaRSBmbGFnIHRvIHNlbGVjdCBsZWFuCglvciBibG9hdGVkIHRhcmdldF92ZWN0b3IuCgkqIHRhcmdldHMuYzogIFVzZSBuZXcgTUlOSU1JWkUgbWFjcm8sIGFuZCBhZGQgdHJhZF9jb3JlIGlmIG5lZWRlZC4KCSogbmV3c29zMy5jOiAgRml4ZXMgdG8gLi4vaW5jbHVkZS9hb3V0NjQuaCByZW1vdmUgbmVlZAoJZm9yIHNwZWNpYWwgTl9UWFRPRkYgbWFjcm8sIGJ1dCByZXF1aXJlIE5fSEVBREVSX0lOX1RFWFQuCgpNb24gTm92IDE4IDEyOjAwOjU5IDE5OTEgIFBlciBCb3RobmVyICAoYm90aG5lciBhdCBjeWdudXMuY29tKQoKCSogYW91dC10YXJnZXQuaCwgYW91dGYxLmgsIG5ld3NvczMuYzogIE1ha2UgYW91dC10YXJnZXQuaAoJaGFuZGxlIGJvdGggbGl0dGxlIGFuZCBiaWctZW5kaWFuIHRhcmdldHMsIHdpdGggbGl0dGxlCgl0aGUgZGVmYXVsdCB1bmxlc3MgVEFSR0VUX0lTX0JJR19FTkRJQU5fUCBpcyBkZWZpbmVkLgoJKiBob3N0LWFvdXQuYzogIEFkZCBGSVhNRSBub3RlLgoKU3VuIE5vdiAxNyAxMzoyOTozOSAxOTkxICBQZXIgQm90aG5lciAgKGJvdGhuZXIgYXQgY3lnbnVzLmNvbSkKCgkqIHRhcmdldHMuYzogIE1ha2UgdGhlIGRlZmF1bHQgdGFyZ2V0X3ZlY3RvciBjb250YWluCglqdXN0ICZERUZBVUxUX1ZFQ1RPUi4gIFRoaXMgbWFrZXMgZXhlY3V0YWJsZXMgYSBsb3Qgc21hbGxlci4KCU9sZCBiZWhhdmlvciBjYW4gYmUgZ290dGVuIGJ5IGRlZmluaW5nIEFMTF9UQVJHRVRTLgoJKiBhb3V0ZjEuaCwgZGVtbzY0LmMsIGkzODZhb3V0LmMsIG5ld3NvczMuYywgc3Vub3MuYzoKCUZhY3RvcmVkIG91dCBjb21tb24gY29kZSBpbnRvIG5ldyBmaWxlIGFvdXQtdGFyZ2V0LmguCglTYXZlcyBhIGxvdCBvZiBkdXBsaWNhdGUgY29kZSBmb3IgYS5vdXQgdmFyaWFudHMuCgpGcmkgTm92IDE1IDEzOjAwOjQzIDE5OTEgIFBlciBCb3RobmVyICAoYm90aG5lciBhdCBjeWdudXMuY29tKQoKCUdldCAnbWFrZSBoZWFkZXJzJyB0byB3b3JrIHdoZW4gY29uZmlndXJlZCB3aXRoICtzdWJkaXJzLgoJKiBNYWtlZmlsZS5pbjogQWRkICQoc3ViZGlyKSB0byBkb2NkaXIgcGF0aC4KCSogZG9jL01ha2VmaWxlLmluIChwcm90b3MpOiBBZGQgJChzcmNkaXIpIHByZWZpeAoJdG8gbmFtZSBvZiBzZWQgc2NyaXB0cy4KClRodSBOb3YgMTQgMTk6NDk6MTAgMTk5MSAgUGVyIEJvdGhuZXIgIChib3RobmVyIGF0IGN5Z251cy5jb20pCgoJKiBhb3V0eC5oIChOQU1FKGFvdXQscHJpbnRfc3ltYm9sKSk6ICBGaXggdGhpbmtvLgoJKiBzeW1zLmMgKGJmZF9zdGFiX25hbWVzKTogIFR1cm4gb24gbmV3IEdOVV9FWFRSQV9TVEFCUyBtYWNybwoJdG8gaW5jbHVkZSBuYW1lcyBvZiBOX1NFVFQgZXRjLgoKVGh1IE5vdiAxNCAxOToxMToxMyAxOTkxICBGcmVkIEZpc2ggIChmbmYgYXQgY3lnbnVzLmNvbSkKCiAgICAJKiBlbGYuYzogIEFkZCBtaW5pbWFsIHN1cHBvcnQgZm9yIEVMRiBzeW1ib2wgdGFibGVzLiAgR2VuZXJhdGVzCgljYW5vbmljYWwgYmZkIHN5bWJvbCB0YWJsZXMgZnJvbSBFTEYgc3ltYm9sIHRhYmxlcy4gIENoYW5nZSB0aGUKCW5hbWUgb2Ygc29tZSBmdW5jdGlvbnMgZnJvbSBiZmRfPG5hbWU+IHRvIGVsZl88bmFtZT4uCgoJKiBzeW1zLmM6ICBUcml2aWFsIGZpeCB0byBjb21tZW50IHRvIHJlbW92ZSBhIHJlZHVuZGFudCAidG8iLgoKV2VkIE5vdiAxMyAxNzowMjowMSAxOTkxICBKb2huIEdpbG1vcmUgIChnbnUgYXQgY3lnbnVzLmNvbSkKCgkqIGNvZmYte2kzODYsbTY4ayxtODhrfS5jOiAgQ2hhbmdlIG5hbWUgb2YgZmlsZSBmb3JtYXQgdG8gc3RhbmRhcmQKCWZvcm0gdGhhdCBHREIgcmVjb2duaXplcyBhcyBDT0ZGLgoKV2VkIE5vdiAxMyAwOTowOTo0MSAxOTkxICBTdGV2ZSBDaGFtYmVybGFpbiAgKHNhYyBhdCBjeWdudXMuY29tKQoKCSogaWVlZS5jIChpZWVlX29iamVjdF9wKTogIGNhc3QgTlVMTCBjb3JyZWN0bHkuCgkqIGNvbmZpZ3VyZS5pbjogYWRkZWQgaGFycmlzIGhvc3QKCgkqIGNvZmYtYTI5ay5jOiBMb3RzIG9mIGNoYW5nZXMsIG1vc3QgZnJvbSBEYXZpZCBXb29kLgoKVHVlIE5vdiAxMiAwNzoyMTo0MSAxOTkxICBKb2huIEdpbG1vcmUgIChnbnUgYXQgY3lnbnVzLmNvbSkKCgkqIGNvZmYtbTg4ay5jIChjb2ZmX3dyaXRlX2FybWFwKTogIEp1c3QgI3VuZGVmIGl0LgoKTW9uIE5vdiAxMSAyMDozMDoxOCAxOTkxICBTdGV2ZSBDaGFtYmVybGFpbiAgKHNhYyBhdCBjeWdudXMuY29tKQoKCSogTWFrZWZpbGUuaW46IHN0YW5kYXJkaXplIG9uIE1JTlVTX0cgdG8gZGlzYWJsZSBkZWJ1Z2dpbmcKCSogY29mZi1tODhrLmM6IGNyZWF0ZSBjb2ZmIGFybWFwcyBpbnN0ZWFkIG9mIGJzZCBvbmVzLgoJKiBvcG5jbHMuYyAoYmZkX2Nsb3NlX2FsbF9kb25lKSwgKGJmZF9jbG9zZSk6IE1hc2sgb3V0IHJhbmRvbSBiaXRzCgl3aGVuIGNhbGxpbmcgY2htb2QuCgpNb24gTm92IDExIDE5OjA3OjMyIDE5OTEgIEZyZWQgRmlzaCAgKGZuZiBhdCBjeWdudXMuY29tKQoKCSogZWxmLmM6ICBBZGRpdGlvbnMgdG8gc3VwcG9ydCBFTEYgZm9ybWF0IGNvcmUgZmlsZXMuCgkqIGNvbmZpZy9taC1hbWl4OiAgQWRkIC1ESEFWRV9QUk9DRlMgdG8gSERFRklORVMsIHNpbmNlIGhvc3QKCWhhcyBzdXBwb3J0IGZvciAvcHJvYyAoYWxsIHRoZSBpbmNsdWRlIGZpbGVzIGluIHBhcnRpY3VsYXIpLgoKTW9uIE5vdiAxMSAxODozNjo0NyAxOTkxICBQZXIgQm90aG5lciAgKGJvdGhuZXIgYXQgY3lnbnVzLmNvbSkKCgkqIGFvdXR4LmggKE5BTUUoYW91dCxmaW5kX25lYXJlc3RfbGluZSkpOiAgSGFuZGxlIHRoZSBjYXNlCglvZiB0d28gTl9TTyBzdGFicywgb25lIGZvciBkaXJlY3RvcnksIGFuZCBvbmUgZm9yIGZpbGVuYW1lLgoKCSogYmZkLWluLmggKHByaW50X3ZtYSk6ICBGYWN0b3Igb3V0IGR1cGxpY2F0ZSBkZWZpbml0aW9uLgoKCUV4aXQgYSBsaXR0bGUgbW9yZSBncmFjZWZ1bGx5IHdoZW4gbWFsbG9jIHJldHVybnMgTlVMTC4KCSogbGliYmZkLmM6IE5ldyBmdW5jdGlvbiBiZmRfeG1hbGxvYyAobWFsbG9jIHdyYXBwZXIpLgoJKiBvcG5jbHMuYywgc3ltcy5jLCBib3V0LmMsIGFvdXR4Lmg6ICBSZXBsYWNlIG1hbGxvYyBieSBiZmRfeG1hbGxvYy4KCSogbGliYmZkLmg6IFJyZS1nZW5lcmF0ZWQgZHVlIHRvIGxpYmJmZC5jIHVwZGF0ZS4KClNhdCBOb3YgIDkgMTM6NDU6MDEgMTk5MSAgRnJlZCBGaXNoICAoZm5mIGF0IGN5Z251cy5jb20pCgoJKiBjb25maWcvbXQtbTY4ay1lbGY6ICBEZWZpbmUgREVGQVVMVF9WRUNUT1IgYXMgZWxmX2JpZ192ZWMuCgoJKiBlbGYuYyAoZWxmX29iamVjdF9wKTogIERvbid0IHRyeSB0byBjcmVhdGUgYSBiZmQgc2VjdGlvbiBmb3IKCXRoZSBmaXJzdCBFTEYgc2VjdGlvbiBoZWFkZXIuICBJdCBpcyBqdXN0IGEgcGxhY2Vob2xkZXIuCgpTYXQgTm92ICA5IDAzOjA0OjI2IDE5OTEgIEpvaG4gR2lsbW9yZSAgKGdudSBhdCBjeWdudXMuY29tKQoKCSogY29mZi1yczYwMDAuYywgY29uZmlnL21oLXJzNjAwMDogIE1ha2UgaXQgd29yayBvbiBhcmNoaXZlIGFuZAoJY29yZSBmaWxlcywgd2hlbiBjb21waWxpbmcgbmF0aXZlLgoJKiBob3N0cy9oLXJzNjAwMC5oOiAgRGVmaW5lIEZBU0NJU1RfRkRPUEVOIGZvciBiZmRfZmRvcGVuci4KCglGSVhNRTogIFRoZSBhb3V0ZjEuaCBjaGFuZ2UgYmVsb3cgbmVlZHMgdG8gYmUgcmV2ZXJzZWQgYmFjawoJdG8gdGhlIHdheSBpdCB3YXMuCgpUaHUgTm92ICA3IDExOjAzOjU1IDE5OTEgIFN0ZXZlIENoYW1iZXJsYWluICAoc2FjIGF0IHJ0bC5jeWdudXMuY29tKQoKCSogY29mZmNvZGUuaDogRGVmaW5lZCBuZXcgbWFjcm9zIFtQVVR8R0VUXUxJTkVOT19MTk5PIGZvcgoJbWFuaXB1bGF0aW9uIG9mIGxubm8gZmllbGRzIGluIGxpbmVubyBzdHJ1Y3RzIGluIGEgY29mZi08Zj4uaAoJaW5kZXBlbmRlbnQgd2F5LiBPdmVycmlkZSBpdCBpbiBjb2ZmLTxmPi5oIHRvIHlvdXIgZmF2b3VyaXRlCgludW1iZXIgaWYgeW91IGRvbid0IGhhdmUgYSAxNmJpdCBsbm5vIGZpZWxkLiAoY29mZl9zd2FwX2xpbmVub19pbikKCShjb2ZmX3N3YXBfbGluZW5vX291dCk6IG1vZGlmaWVkIHRvIHVzZSB0aGUgbmV3IG1hY3Jvcy4KCk1vbiBOb3YgIDQgMTE6Mzg6MzMgMTk5MSAgU3RldmUgQ2hhbWJlcmxhaW4gIChzYWMgYXQgY3lnbnVzLmNvbSkKCgkqIGFvdXRmMS5oIChzdW5vczRfY2FsbGJhY2spOiBOb3cgZGVmYXVsdHMgdG8gNjgwMjAgcmF0aGVyIHRoYW4KCXVua25vd24gYXJjaCB3aGVuIHRoZSBtYWdpYyBudW1iZXIgZG9lc24ndCBzcGVjaWZ5IHRoZQoJYXJjaGl0ZWN0dXJlLCBzaW5jZSBzb21lIE9TcyAoZWcgb2xkIHN1bjNzKSBkb24ndCBzZXQgdGhlIG51bWJlciwgYW5kCgkwMjAgaXMgcHJvYmFibHkgdGhlIHJpZ2h0IGFuc3dlciBhbnl3YXkuCgpTdW4gTm92ICAzIDEyOjA3OjA4IDE5OTEgIFBlciBCb3RobmVyICAoYm90aG5lciBhdCBjeWdudXMuY29tKQoKCSogaG9zdHMvaC1uZXdzLmgsIGhvc3RzL2gtcnRic2QuaDoKCUdldCByaWQgb2YgTUlTU0lOR19WRlBSSU5URiwgc2luY2UgbGliaWJlcnR5IHByb3ZpZGVzIG9uZS4KCSogYmZkLWluLmggKGJmZF9wcmludF9zeW1ib2xfdHlwZV9ob3B3IGVudW0pOiAgIEFkZCBuZXcgb3B0aW9uCgliZmRfcHJpbnRfc3ltYm9sX25tLCBmb3IgdXNlIGJ5IG5tLgoJKiBhb3V0eC5oIChOQU1FKGFvdXQscHJpbnRfc3ltYm9sKSk6ICBBZGQgY29kZSBmb3IgbmV3CgliZmRfcHJpbnRfc3ltYm9sX25tIG9wdGlvbiwgdG8gcHJpbnQgaW4gbm0gZm9ybWF0LgoJKiBjb2ZmY29kZS5oIChjb2ZmX3ByaW50X3N5bWJvbCksIGllZWUuYyAoaWVlZV9wcmludF9zeW1ib2wpCglvYXN5cy5jIChvYXN5c19wcmludF9zeW1ib2wpOiAgUHJvdmlkZSBzdHViIGltcGxlbWVudGF0aW9ucwoJZm9yIGJmZF9wcmludF9zeW1ib2xfbm0uCgkqIHN5bXMuYzogIE5ldyBmdW5jdGlvbiBiZmRfZGVjb2RlX3N5bWNsYXNzLCB1c2VkIGJ5IG5tIHByaW50ZXIuCglOZXcgZnVuY3Rpb24gYmZkX3N0YWJfbmFtZSB0byBsb29rIHVwIHN0cmluZyBuYW1lIG9mIHN0YWIgY29kZS4KClNhdCBOb3YgIDIgMTQ6MjY6MDMgMTk5MSAgU3RldmUgQ2hhbWJlcmxhaW4gIChzdGV2ZSBhdCBjeWdudXMuY29tKQoKCSogTWFrZWZpbGUuaW46IEFkZGVkIGN0b3IuYwoJKiBhcmNodXJlcy5jIChiZmRfZGVmYXVsdF9hcmNoX3N0cnVjdCkgYWRkZWQKCWJmZF9kZWZhdWx0X3JlbG9jX3R5cGVfbG9va3VwLgoJKiBjb2ZmY29kZS5oOiByZW1vdmVkIGEgbG9hZCBvZiAjaWYgMGVkIGNvZGUuCgkoY29mZl9jb21wdXRlX2ZpbGVfc2VjdGlvbl9wb3NpdGlvbnMpOiBub3cgd29ya3Mgb3V0IHRoZSBzZWN0aW9uCglhbGlnbm1lbnQgYW5kIHNpemUgY29ycmVjdGx5IGluIGFsbCBjYXNlcy4KCShjb2ZmX2dldF9zeW10YWIpOiBsb29rcyBmb3IgY29uc3RydWN0b3Igc3ltYm9scyBhbmQgY2FsbHMgdGhlCglyaWdodCBmdW5jdGlvbiB3aGVuIHRoZXkncmUgZm91bmQuIChjb2ZmX2Nhbm9uaWNhbGl6ZV9yZWxvYyk6Cglrbm93cyB3aGVuIGEgc2VjdGlvbiBpcyBmdWxsIG9mIGNvbnN0cnVjdG9ycyBhbmQgZG9lcyB0aGUgcmlnaHQKCXRoaW5nLgoJKiBjcHUtbTg4ay5jOiBBZGRlZCBkZWZhdWx0X3JlbG9jX3R5cGUgbG9va3VwIHRvIHRoZSBhcmNoaXRlY3R1cmUKCWRlc2NyaXB0aW9uLgoJKiBsaWJiZmQtaW4uaDogKGJmZF9kZWZhdWx0X3JlbG9jX3R5cGVfbG9va3VwKSBkZWZ1biAgYWRkZWQuCgkqIGxpYmNvZmYuaDogcmVtb3ZlZCAjaWYgMGVkIGNvZGUKCSogcmVsb2MuYzogKGJmZF9yZWxvY19jb2RlX3JlYWxfdHlwZSkgYWRkZWQgQkZEX1JFTE9DX0NUT1IgZm9yCglhcmNoIGluZGVwZW5kZW50IGNvbnN0cnVjdG9yIHJlbG9jYXRpb24gdHlwZS4KCShiZmRfcmVsb2NfdHlwZV9sb29rdXApOiByZW1vdmVkIHRoZSBjb21tZW50ICJ0aGlzIHdpbGwgZ28gYXdheSIKCXNpbmNlIGl0IHdvbid0LiAoYmZkX2hvd3RvXzMyKTogc3RvbGVuIGZyb20gODhrLCB0aGlzIGlzIGEgMzJiaXQKCXJlbG9jIHdoaWNoIGlzIHVzZWQgd2hlbiBCRkRfUkVMT0NfQ1RPUiBmYWxscyB0aHJvdWdoIHRvIGdpdmUgYQoJZGVmYXVsdCAzMmJpdCByZWxvYyBmb3IgY29uc3RydWN0b3JzLgoJKGJmZF9kZWZhdWx0X3JlbG9jX3R5cGVfbG9va3VwKTogYWRkZWQuCgkqIGFvdXRmMS5oOiBmaXhlZCBTRUdNRU5UX1NJWkUgdHlwby4KClRodSBPY3QgMzEgMTg6MjM6MDYgMTk5MSAgSm9obiBHaWxtb3JlICAoZ251IGF0IGN5Z251cy5jb20pCgoJKiBjb2ZmLXJzNjAwMC5jOiAgQ2hhbmdlIG5hbWUgdG8gImFpeGNvZmYtcnM2MDAwIiwgdG8gYXZvaWQKCW1hdGNoaW5nIHByZWZpeCAiY29mZiIuCgkqIGNvZmZjb2RlLmggKGNvZmZfc3dhcF9hdXhfaW4sIGNvZmZfc3dhcF9hdXhfb3V0KTogIEhhbmRsZQoJcnMvNjAwMCBjc2VjdCByZWNvcmRzLgoKU3VuIE9jdCAyNyAxNjo1Njo1OCAxOTkxICBTdGV2ZSBDaGFtYmVybGFpbiAgKHN0ZXZlIGF0IGN5Z251cy5jb20pCgoJKiBjb2ZmLW04OGsuYywgdGFyZ2V0cy5jOiBjaGFuZ2UgbmFtZSBvZiBtODhrX2JjcyB0byBtODhrYmNzCgkqIGNvbmZpZ3VyZS5pbjogYWRkIG1vdG9yb2xhIGRlbHRhODggY2FzZXMKCSogbGliYmZkLmgsIGxpYmJmZC1pbi5oLCBhcmNoaXZlLmMsIGllZWUuYywgZWxmLmMsIHNyZWMuYzogZml4Cgl3cml0ZV9hcm1hcCBwcm90b3R5cGUKCSogbGliYmZkLmM6IGFkZCBkb2Mgb24gYmZkX3dyaXRlX2JpZ2VuZGlhbl80Ynl0ZV9pbnQKCkZyaSBPY3QgMjUgMDI6NDg6MTkgMTk5MSAgSm9obiBHaWxtb3JlICAoZ251IGF0IGN5Z251cy5jb20pCgoJKiBSZW5hbWUgQ09GRi1yZWxhdGVkIGZpbGVzIGluIGBjb2ZmLUFSQ0guYycgZm9ybS4KCWNvZmYtYTI5ay5jLCBjb2ZmLWkzODYuYywgY29mZi1pOTYwLmMsIGNvZmYtbTY4ay5jLCBjb2ZmLW04OGsuYywKCWNvZmYtbWlwcy5jLCBjb2ZmLXJzNjAwMC5jIHRvIGJlIGV4YWN0LgoKCSogTWFrZWZpbGUuaW46ICBPbmx5IHN1cHBseSBUQVJHRVRfREVGQVVMVFMgdG8gdGFyZ2V0cy5jLCByZWR1Y2luZwoJbWFrZSBvdXRwdXQgY2x1dHRlci4KCSogY29uZmlnL210LSo6ICBEaXR0by4KClRodSBPY3QgMjQgMjI6NDA6MDcgMTk5MSAgSm9obiBHaWxtb3JlICAoZ251IGF0IGN5Z251cy5jb20pCgoJUlMvNjAwMCBzdXBwb3J0LCBieSBNZXRpbiBHLiBPemlzaWssIE1pbWkgUGj79G5nLVRo5W8gVvUsIGFuZAoJSm9obiBHaWxtb3JlLiAgQXJjaGl2ZSBzdXBwb3J0IGZyb20gRGFtb24gQS4gUGVybWV6ZWwuCgoJKiBNYWtlZmlsZS5pbjogIEFkZCBjcHUtcnM2MDAwLmMgYW5kIHJzNjAwMGNvZmYuYy4KCSogY29uZmlndXJlLmluOiAgQWRkIHJzNjAwMCBjYXNlLgoJKiB0YXJnZXRzLmM6ICBBZGQgcnM2MDAwIHZlY3Rvci4KCSogYXJjaHVyZXMuYzogIEFkZCByczYwMDAsIGZpeCBjb21tZW50IG9uIHJvbXAuCgkqIGJmZC1pbi5oIChlbnVtIGJmZF9lcnJvcik6ICBBZGQgbm9fZGVidWdfc2VjdGlvbiBlcnJvci4KCSogbGliY29mZi1pbi5oIChzdHJ1Y3QgY29mZl90ZGF0YSk6ICBSZW1vdmUgdW51c2VkIHN0cmluZ190YWJsZS4KCSogYmZkLmMgKGJmZF9lcnJtc2dzKTogIEFkZCBub19kZWJ1Z19zZWN0aW9uIGVycm9yIG1lc3NhZ2UuCgkqIHNlY3Rpb24uYyAoYmZkX21ha2Vfc2VjdGlvbik6ICBSZXR1cm4gTlVMTCBvbiBhdHRlbXB0IHRvIGNyZWF0ZQoJYSBzZWN0aW9uIHR3aWNlLgoJKiBjb2ZmY29kZS5oIChiZmRfc3dhcF9yZWxvY19pbik6ICBIYW5kbGUgcl90eXBlIGFuZCByX3NpemUuCgkoYmZkX3N3YXBfYW91dGhkcl9pbik6ICBIYW5kbGUgbG90cyBtb3JlIG1lbWJlcnMuCgkobWFrZV9hX3NlY3Rpb25fZnJvbV9maWxlKTogIElmIHNlY3Rpb24gaGFzIGFscmVhZHkgYmVlbiBzZWVuLAoJanVzdCByZXR1cm4gZmFsc2UgcmF0aGVyIHRoYW4gb3ZlcndyaXRpbmcgaXQuCgkoY29mZl9yZWFsX29iamVjdF9wKTogIFVuZGVyc3RhbmQgaW5jb21pbmcgbWFnaWMgbnVtYmVycy4KCShjb2ZmX3NldF9mbGFncyk6ICBVbmRlcnN0YW5kIG91dGdvaW5nIG1hZ2ljIG51bWJlcnMuCgkoY29mZl9jb21wdXRlX3NlY3Rpb25fZmlsZV9wb3NpdGlvbnMpOiAgb3V0Z29pbmcgYW91dGhkciBtYWdpYyAjLgoJKGJ1aWxkX2RlYnVnX3NlY3Rpb24pOiAgQWRkIGZuIGZvciByZWFkaW5nIGRlYnVnIHN0cmluZyBzZWN0aW9uLgoJKGdldF9ub3JtYWxpemVkX3N5bXRhYik6ICBIYW5kbGUgc3ltYm9sIG5hbWVzIGluIGRlYnVnIHN0cmluZyBzZWN0aW9uLgoJUmVtb3ZlIHVudXNlZCBvYmpfc3RyaW5nX3RhYmxlLgoJKGNvZmZfc2x1cnBfc3ltYm9sX3RhYmxlKTogIEhhbmRsZSByczYwMDAtc3BlY2lmaWMgc3RvcmFnZSBjbGFzc2VzLgoJKiBhb3V0eC5oICh0cmFuc2xhdGVfZnJvbV9uYXRpdmVfc3ltX2ZsYWdzLCBOX1NFVCopOiAgQ2hlY2sgZm9yCglleGlzdGluZyBzZWN0aW9uIGJlZm9yZSBtYWtpbmcgb25lLgoJKiBjcHUtcnM2MDAwLmM6ICBOZXcgZmlsZS4KCSogcnM2MDAwY29mZi5jOiAgTmV3IGZpbGUuCgpUaHUgT2N0IDI0IDAyOjAzOjI0IDE5OTEgIEZyZWQgRmlzaCAgKGZuZiBhdCBjeWdudXMuY29tKQoKCSogZWxmLmM6IEFkZCBwYXJ0aWFsIHN1cHBvcnQgZm9yIEVMRiBmb3JtYXQgY29yZWZpbGVzLiBTdGlsbCBuZWVkcwoJc3VwcG9ydCBmb3IgZXh0cmFjdGluZyByZWdpc3RlcnMgZnJvbSBjb3JlZmlsZXMuCgoJKiBjb25maWcvdC1tNjhrLWVsZjogIFNldCBERUZBVUxUX1ZFQ1RPUiB0byBlbGZfYmlnX3ZlYy4KCgkqIGNvbmZpZy97aC1hbWl4LGgtZGd1eCxoLWlyaXgzLGgtdWx0cmEzfTogRm9yIHN5c3RlbXMgd2hlcmUKCVJBTkxJQiBpcyBkZWZpbmVkIGFzIGVjaG8sIHNlbmQgdGhlIG91dHB1dCB0byAvZGV2L251bGwgdG8gaGVscAoJcmVkdWNlIGNsdXR0ZXIgaW4gdGhlIG91dHB1dCBmcm9tIGRvaW5nIGEgbWFrZS4KCk1vbiBPY3QgMjEgMTc6NDg6NDggMTk5MSAgSm9obiBHaWxtb3JlICAoZ251IGF0IGN5Z251cy5jb20pCgoJKiBob3N0cy9oLXZheHVsdC5oOiAgUmVtb3ZlIG1hbGxvYy9mcmVlIGRlY2xzIGNvdmVyZWQgaW4gc3RkbGliLmguCglGaXggSE9TVF9QQUdFX1NJWkUgYW5kIEhPU1RfU0VHTUVOVF9TSVpFLiAgRnJvbSBEYXZpZCBUYXlsb3IuCgpNb24gT2N0IDIxIDA5OjM0OjExIDE5OTEgIFN0ZXZlIENoYW1iZXJsYWluICAoc3RldmUgYXQgcnRsLmN5Z251cy5jb20pCgoJKiBjb2ZmY29kZS5oIChjb2ZmX2NvbXB1dGVfc2VjdGlvbl9maWxlX3Bvc2l0aW9ucyk6IG1ha2UgaXQgcGFkCglzZWN0aW9uIHNpemUgb3V0IGlmIHRoZXJlIGFyZSBhbGlnbm1lbnQgcmVzdHJpY3Rpb25zIHNvIHRoYXQgdGhlCglpbWFnZSB3aWxsIGJlIG9rIG9uIGEgc3lzdGVtIHdoZXJlIHNlY3Rpb24gcG9zaXRpb25zIGFyZSB3b3JrZWQKCW91dCBieSBhY2N1bXVsYXRpbmcgc2l6ZXMgcmF0aGVyIHRoYW4gZnJvbSB0aGUgc2VjdGlvbiBoZWFkZXJzLgoJKiB0YXJnZXRzLmMgKHByb3RvIHdyaXRlX2FybWFwKS4gQ2hhbmdlZCBvcmxfY291bnQgdG8gdW5zaWduZWQuCgkqIG9wbmNscy5jIChiZmRfY2xvc2VfYWxsX2RvbmUpLiBBZGRlZCBzbyB0aGF0IGdlbmVyYXRpdmUKCXByb2dyYW1zIGxpa2UgZ2FzIGNhbiBjbG9zZSBhIGJmZCB3aXRob3V0IGNhdXNpbmcgYmZkIGNvbmZ1c2lvbi4KCSogbGliYmZkLmggKGNoYW5nZWQgYmVjdWFzZSBvZiBwcm90b3MpCgkqIGFtZGNvZmYuYzogbWVzc2VkIHdpdGggdGhlIHdheSB0aGF0IGptcCBkaXNwbGFjZW1lbnRzIGFyZQoJY2FsY3VhbGF0ZWQuIFRoaXMgbWF5IG5vdCB5ZXQgYmUgdG90YWxseSBjb3JyZWN0LgoJKiBhcmNoaXZlLmMgKGNvZmZfd3JpdGVfYXJtYXApOiByZXdyb3RlIHRoZSB3YXkgdGhhdCByYW5saWJzIGFyZQoJd3JpdHRlbiBvdXQuCgkqIGNvZmZjb2RlLmggKGZpeHVwX3N5bWJvbF92YWx1ZSk6IG5vdyBkb2Vzbid0IGNvcmUgZHVtcCBpZiBhIG5vbgoJYWJzIHN5bWJvbCBoYXMgbm8gc2VjdGlvbiAobGlrZSBhIHJlZ2lzdGVyIHN5bWJvbCkuCgkoY29mZl93cml0ZV9zeW1ib2wpIG5vdyB6ZXJvcyBhdXhlbnQgYmVmb3JlIGZpbGxpbmcgaXQgdXAgdG8gaGVscAoJd2l0aCBzZW5zaXRpdmUgYXBwbGljYXRpb25zLgoJKiBsaWJiZmQuYyAoYmZkX3dyaXRlX2JpZ2VuZGlhbl80Ynl0ZV9pbnQpOiBhZGRlZC4KCldlZCBPY3QgMTYgMjI6NTg6NDUgMTk5MSAgSm9obiBHaWxtb3JlICAoZ251IGF0IGN5Z251cy5jb20pCgoJKiBiZmQuYzogIE1ha2Ugc3VyZSB3ZSBkb24ndCBnZXQgYSBtYWNybyBzdHJlcnJvcigpLgoJKiBvcG5jbHMuYyAoYmZkX2Zkb3BlbnIpOiAgSWYgRkFTQ0lTVF9GRE9QRU4sIHVzZSAiciIsIG5vdCAicisiLgoJKiB0cmFkLWNvcmUuYyAodHJhZF91bml4X2NvcmVfZmlsZV9mYWlsaW5nX2NvbW1hbmQpOiAgU3VwcHJlc3MKCWF0dGVtcHQgdG8gcmVjb3ZlciBjb21tYW5kLCBpZmRlZiBOT19DT1JFX0NPTU1BTkQuCgkqIGhvc3RzL2gtdGFob2UuaDogIEFkZCBGQVNDSVNUX0ZET1BFTiBhbmQgTk9fQ09SRV9DT01NQU5EOwoJcmV2YW1wIEhPU1RfKiwgZXRjLgoJKiBob3N0cy9oLWkzODZ2Lmg6ICBVc2UgPHV0aW1lLmg+LCBub3QgPHN5cy91dGltZS5oPiwgdW5saWtlIFBPU0lYLgoKV2VkIE9jdCAxNiAxMjo0Mzo0OSAxOTkxICBQZXIgQm90aG5lciAgKGJvdGhuZXIgYXQgY3lnbnVzLmNvbSkKCgkqIGFyY2hpdmUuYyAoYnNkX3dyaXRlX2FyZ21hcCk6IFRoZSBzaXplIG9mIHRoZSByYW5saWIgc3RydWN0dXJlcwoJc2hvdWxkIG5vdCBpbmNsdWRlIHRoZSBzaXplIGZpZWxkIGl0c2VsZi4KCSogYW91dHguaCwgbGliYW91dC5oIChOQU1FKGFvdXQsIHNpemVvZl9oZWFkZXJzKSk6ICBVc2UKCWFkYXRhKGFiZmQpLT5leGVjX2J5dGVzX3NpemUgZmllbGQgaW5zdGVhZCBvZiBjb25zdGFudCBtYWNybywKCWJlY2F1c2UgYW91dHguaCBjb21waWxlcyB0byBhIHNpbXBsZSAubyBmaWxlIHNoYXJlZCBieQoJYWxsIDMyLWJpdHMgYS5vdXQgdGFyZ2V0cy4KCldlZCBPY3QgMTYgMTE6MTE6MDUgMTk5MSAgSm9obiBHaWxtb3JlICAoZ251IGF0IGN5Z251cy5jb20pCgoJKiBjb25maWd1cmUuaW46ICBBbGxvdyBpMzg2LXNjby1zeXN2LgoJKiBib3V0LmM6ICBSZW1vdmUgdW51c2VkIGk5NjBfYWxpZ247IGxpbnQgZHVtbXkgY29yZSBmaWxlIGhhbmRsZXJzLgoJKiBjcHUtaDgzMDAuYzogIGxpbnQuCgoJKiBob3N0LWFvdXQuYzogIE5ldyBzdHJhdGVneS4gIFdlIHVzZSBjb21tb24gY29kZSwgaW5jbHVkZSBmaWxlcywKCWFuZCBkYXRhIHN0cnVjdHVyZXMgdG8gaGFuZGxlIHRoZSBmaWxlLCBidXQgc2V0IGEgZmV3IHBhcmFtZXRlcnMKCWZyb20gdGhlIGhvc3QncyBjb25maWcgZmlsZSAocGFnZSBzaXplLCB0ZXh0IHN0YXJ0IGFkZHIsIGV0YykuCgkqIGxpYmFvdXQuaDogIERlZmluZSBIUCBCU0QgbWFjaGluZSB0eXBlcy4KCSogYW91dGYxLmg6ICBIYW5kbGUgcmVhZGluZyBhLm91dHMgd2l0aCB0aGVzZSB0eXBlcy4KCgkqIHRyYWQtY29yZS5jOiAgUGFzcyB0aGUgdS51X2FyMCB2YWx1ZSBhcyB0aGUgbmVnYXRpdmUgb2YgdGhlCgl2aXJ0dWFsLW1lbW9yeS1hZGRyZXNzIG9mIHRoZSAucmVnIHNlY3Rpb24uICBXZSBjYW4ndCBqdXN0IG1ha2UgYQoJc2VjdGlvbiBmb3IgImFsbCB0aGUgcmVncyBhbmQgbm90aGluZyBlbHNlIiBiZWNhdXNlIG9ubHkgR0RCIGtub3dzCglleGFjdGx5IHdoZXJlIHRoZSByZWdzIGFyZSAoc2NhdHRlcmVkIGFyb3VuZCB0aGUgdXBhZ2UgYW5kIHN0YWNrKS4KCUNsZWFuIHVwIG1lbW9yeSBhbGxvY2F0aW9uLiAgUmVtb3ZlIGJpZy0gYW5kIGxpdHRsZS1lbmRpYW4KCXZlY3RvcnMsIHJlcGxhY2Ugd2l0aCBzaW5nbGUgdmVjdG9yOyB0aGlzIG9ubHkgcnVucyBvbiB0aGUgaG9zdCwKCWluIGhvc3QgYnl0ZSBvcmRlci4gIFJlcGxhY2UgYnl0ZXN3YXAgcm91dGluZXMgd2l0aCBhYm9ydHMgaW4gY2FzZQoJYW55b25lIGNhbGxzIHRoZW0uCgkqIHRhcmdldHMuYzogIFRoZXJlJ3Mgb25seSBvbmUgdHJhZF9jb3JlX3ZlYyBub3cuCgkqIGFvdXRmMS5oIChzdW5vc19jb3JlX2ZpbGVfcCk6ICBWTUEgb2YgLnJlZyogbm93IG5lZWRzIHRvIGJlIDAuCgpUdWUgT2N0IDE1IDA4OjI5OjAzIDE5OTEgIEpvaG4gR2lsbW9yZSAgKGdudSBhdCBjeWdudXMuY29tKQoKCSogaG9zdHMvaC1hbWl4LmggKGZyZWUpOiAgRml4IHByb3RvdHlwZS4KCgkqIGFvdXR4Lmg6ICBEb24ndCB1c2UgTlVMTCBhcyBhbiBpbnRlZ2VyLCBmb3IgYnJhaW5kZWFkIHN5c3RlbXMKCXRoYXQgZGVjbGFyZSBpdCBhcyAodm9pZCAqKTAuICAoRnJvbSBQZXRlciBTY2hhdWVyLikKCk1vbiBPY3QgMTQgMTc6MjA6NDcgMTk5MSAgUGVyIEJvdGhuZXIgIChib3RobmVyIGF0IGN5Z251cy5jb20pCgoJKiBvcG5jbHMuYyAoYmZkX2Zkb3BlbnIpOiAgQWRkIHBhcmVudGhlc2VzIHRvIGF2b2lkIHJlcG9ydGVkCglwcm9ibGVtIHdpdGggYmFkIFVsdHJpeCBzeXN0ZW0gaGVhZGVycy4KCSogYW91dHguaCAoTkFNRShhb3V0LHNldF9zZWN0aW9uX2NvbnRlbnRzKSk6ICBUcnkgdG8gaGFuZGxlIHRoZQoJdmFyaW91cyBraW5kcyBvZiBhbGlnbm1lbnRzIGZvciB0aGUgdmFyaW91cyBraW5kcyBvZgoJbWFnaWMgbnVtYmVycy4KCk1vbiBPY3QgMTQgMTQ6MjM6MTAgMTk5MSAgSm9obiBHaWxtb3JlICAoZ251IGF0IGN5Z251cy5jb20pCgoJKiBkb2MvTWFrZWZpbGU6ICBEb24ndCBhc3N1bWUgLiBpcyBvbiB0aGUgcGF0aCAoZnJvbSBKYW1lcyBDbGFyaykuCgpGcmkgT2N0IDExIDIyOjQ1OjE0IDE5OTEgIEpvaG4gR2lsbW9yZSAgKGdudSBhdCBjeWdudXMuY29tKQoKCSogTWFrZWZpbGUuaW46ICBBdm9pZCBTdW4gTWFrZSBWUEFUSCBidWdzLgoJKiB0YXJnZXRzLmM6ICBEZWNsYXJlIHRyYWRfY29yZSB2ZWN0b3JzIGV4dGVybi4KCkZyaSBPY3QgMTEgMTM6MDM6MDIgMTk5MSAgUGVyIEJvdGhuZXIgIChib3RobmVyIGF0IGN5Z251cy5jb20pCgoJKiBjb2ZmY29kZS5oOiBNb3ZlZCBBTElHTiBtYWNybyB0byBsaWJiZmQuaC4gUmVtb3ZlZCBpOTYwX2FsaWduLgoJKiBsaWJiZmQuaDogTW92ZWQgQUxJR04gbWFjcm8gaGVyZS4KCSogYm91dC5jIChiX291dF9jYWxsYmFjayk6IFJlcGxhY2UgaTk2MF9hbGlnbiBieSBhbGlnbl9wb3dlci4KCgkqIGxpYmFvdXQuaCAoc3RydWN0IGFvdXRkYXRhKTogIEFkZGVkIGZpZWxkcyBwYWdlX3NpemUsCglzZWdtZW50X3NpemUgYW5kIGV4ZWNfYnl0ZXNfc2l6ZS4gIFRoZXNlIGhlbHAgZ2VuZXJpYyBjb2RlCgkoaW4gYW91dHguaCBhbmQgbGliYW91dC5oKSB0byBmaWd1cmUgb3V0IHdoZXJlIHRvIGFsaWduCgl0aGUgdmFyaW91cyBzZWdtZW50cyBpbiBhIGRlbWFuZCBwYWdlZCBmaWxlLgoJKiBsaWJhb3V0LmggKFdSSVRFX0hFQURFUik6ICBVc2UgbmV3IChzdHJ1Y3QgYW91dGRhdGEpIGZpZWxkcwoJdG8gZGVjaWRlIGlmIHRoZSBleGVjIGhlYWRlciBjb3VudHMgaW4gYV90ZXh0ICh0ZXh0IHNlZ21lbnQgc2l6ZSkuCglBbHNvLCBhc3N1bWUgRF9QQUdFRCBmbGFnIGlzIHNldDsgZG9uJ3Qgc2V0IGl0IGhlcmUuCgkqIGJvdXQuYyAoYl9vdXRfY2FsbGJhY2spOiBBZGQgaW5pdGlhbGl6YXRpb24gb2YKCWFkYXRhIGZpZWxkcyBwYWdlX3NpemUsIHNlZ21lbnRfc2l6ZSwgYW5kIGV4ZWNfYnl0ZXNfc2l6ZS4KCSogaG9zdC1hb3V0LmMgKE5BTUUoaG9zdF9hb3V0LCBjYWxsYmFjaykgYW5kCglOQU1FKGhvc3RfYW91dCxta29iamVjdCk6IERpdHRvLgoJKiBpMzg2YW91dC5jIChhb3V0Mzg2X2NhbGxiYWNrKSBhbmQgbmV3IGFvdXQzODZfbWtvYmplY3QpOiBEaXR0by4KCSogbmV3c29zMy5jIChuZXdzb3MzX2NhbGxiYWNrKSBhbmQgbmV3IG5ld3Nvc19ta29iamVjdCk6IERpdHRvLgoJKiBhb3V0ZjEuYyAoc3Vub3M0X2NhbGxiYWNrKSBhbmQgbmV3IHN1bm9zX21rb2JqZWN0KTogRGl0dG8uCgkqIGFvdXR4LmggKE5BTUUoYW91dCxzb21lX2FvdXRfb2JqZWN0X3ApKTogRG9uJ3Qgc3VidHJhY3QKCUVYRUNfQllURVNfU0laRSBmcm9tIHRoZSBhX3Rlc3Qgc2l6ZTsgdGhpcyBpcyBvbmx5IGFwcHJvcHJpYXRlCglmb3Igc29tZSBzeXN0ZW1zIChtYWlubHkgc3Vub3MpLCBzbyBkbyBpdCBpbiB0aGUgY2FsbGJhY2sgaW5zdGVhZC4KCVNhbWUgcm91dGluZTogQWRkIHN0dWZmIHRvIHRoZSBUSElTX0lTX09OTFlfRE9DVU1FTlRBVElPTiBjb21tZW50LgoJKiBhb3V0eC5oIChOQU1FKGFvdXQsc2V0X3NlY3Rpb25fY29udGVudHMpOiBDaGFuZ2UgdGhlIHdheQoJZmlsZXBvcyBhbmQgc2l6ZSBvZiBzZWN0aW9ucyBhcmUgY2FycmllZCBvdXQgdG8gc3VwcG9ydAoJb2xkZXIgc3R5bGVzIG9mIGRlbWFuZCBwYWdlZCBleGVjdXRhYmxlcy4KCgpGcmkgT2N0IDExIDEyOjMzOjM2IDE5OTEgIFN0ZXZlIENoYW1iZXJsYWluICAoc3RldmUgYXQgY3lnbnVzLmNvbSkKCgkqIGJmZC1pbi5oOiBBZGRlZCBtb3JlIG1hY3JvcyB0byBDT0ZGX1NXQVBfVEFCTEUuCgkqIGJmZC5jOiBBZGRlZCBtYWNyb3MgdG8gZW5hYmxlIGdhcyB0byBzd2FwIGNvZmYgcmVjb3Jkcy4KCSogY29mZmNvZGUuaDogTWFrZSB0aGUgY29mZl9zd2FwXypfb3V0IHJvdXRpbmVzIHJldHVybiB0aGUgbnVtYmVyCglvZiBieXRlcyBzd2FwcGVkLCBhbmQgY2xlYW5lZCB1cCB0aGVpciBwcm90b3R5cGVzLgoJKiBjb25maWd1cmUuaW46IEFkZGVkIGVibW9uL2NvZmYgc3VwcG9ydAoJKiBlY29mZi5jOiBDaGFuZ2VkIG51bGwgZGVmaW5pdGlvbnMgb2YgY29mZl9zd2FwXypfb3V0IHRvIGNvbmZvcm0KCXRvIG5ldyBwcm90b3R5cGVzCgkqIHRhcmdldHMuYzogQWRkZWQgbmV3IGVudHJ5IHBvaW50cyBmb3IgY29mZiBzd2FwcGluZwoKRnJpIE9jdCAxMSAwMzowMTo1MiAxOTkxICBKb2huIEdpbG1vcmUgIChnbnUgYXQgY3lnbnVzLmNvbSkKCglSZXN0cnVjdHVyZSBjb25maWd1cmF0aW9uIHNjaGVtZSBmb3IgYmZkLCBiaW51dGlscywgbGQuCgoJKiBpbmNsdWRlL3N5cy9oLSouaDogIE1vdmUgdG8gYmZkL2hvc3RzL2gtKi5oLgoJKiBjb25maWd1cmUuaW46ICBSZXZpc2UgdG8gc3ltbGluayBzeXNkZXAuaCB0byBob3N0cy9oLXh4eC5oLgoJQ2hhbmdlIHNvbWUgY29uZmlnIG5hbWVzIHRvIG1hdGNoIG90aGVyIGRpcnMuCgkqICouYzogIEluY2x1ZGUgYmZkLmggYmVmb3JlIHN5c2RlcC5oLCBzbyBhbnNpZGVjbCBhbmQgUFJPVE8oKQoJZ2V0IGRlZmluZWQgZmlyc3QuCgkqIE1ha2VmaWxlLmluOiAgVXNlIC1JLiB0byBnZXQgc3lzZGVwLmguICBSZW1vdmUgcmVmcyB0bwoJLi4vaW5jbHVkZS9zeXNkZXAuaC4KCSogY3B1LWk5NjAuYzogIFN0cm5jbXAgbmVlZGVkIGEgbGVuZ3RoIGFyZy4KCSogZWNvZmYuYzogIERvbid0IGV2ZXIgY2FsbCB0cmFkX3VuaXhfY29yZV9maWxlX3AgZnJvbSBoZXJlLgoJKiBpMzg2YW91dC5jOiAgUmVtb3ZlIGRlYWQgTl9UWFRPRkYgb3ZlcnJpZGUuCgkqIHRyYWQtY29yZS5jOiAgRG9uJ3QgZGlzYWJsZSB0aGUgd2hvbGUgZmlsZSBpZiBTVU40X1NZUy4KCSogY29uZmlnLzogIFJlbmFtZSBzb21lIGNvbmZpZyBmaWxlcyB0byBtYXRjaCB1cCBoLSouaCBuYW1lcy4KCVJlbW92ZSBhbGwgdGhlIEhPU1RfU1lTIGRlZmluaXRpb25zIGZyb20gdGhlIGNvbmZpZyBmaWxlcy4KCSogaG9zdHMvaC1hbWl4LmgsIGgtaTM4NnYuaDogIERlZmluZSBQT1NJWF9VVElNRSwgbm90IFVTRy4KCSogaG9zdHMvaC1ocDkwMDAuaDogIFJlbW92ZSBVU0cgY29tbWVudC4KCSogaG9zdHMvaC1yczYwMDAuaDogIEluY2x1ZGUgPHN0ZGxpYi5oPiBmb3IgbWFsbG9jLgoJKiBob3N0cy9oLW5ld3MuaCwgaC1zcGFyYy02NC5oOiAgTmV3IGNvbmZpZyBmaWxlcyB0aGF0IGhhZAoJcHJldmlvdXNseSBiZWVuIGtsdWRnZWQgaW4gdGhlIDxzeXNkZXAuaD4gZmlsZS4KClRodSBPY3QgMTAgMTc6NTQ6MDggMTk5MSAgSm9obiBHaWxtb3JlICAoZ251IGF0IGN5Z251cy5jb20pCgoJKiBjb25maWcvKjogIHRyYWQtY29yZSBzdXBwb3J0IGlzIEhPU1QgZGVwZW5kZW50LCBub3QgdGFyZ2V0CglkZXBlbmRlbnQuICBUYXJnZXQgY29uZmlnIGZpbGVzIG9ubHkgc2V0IERFRkFVTFRfVkVDVE9SIGFuZC9vcgoJb3RoZXIgdmVjdG9yIGVsZW1lbnRzLiAgRXhjZXB0aW9uOiAgd2hlbiBob3N0LWFvdXQuYyBpcyBpbiB1c2UsCglpbiB3aGljaCBjYXNlIHdlJ3JlIGZvcmNlZCB0byBhc3N1bWUgd2UncmUgbmF0aXZlIChocCwgdmF4LAoJdGFob2UpLiAgUmVuYW1lIFhERVBGSUxFUyB0byBIREVQRklMRVMuCgkqIE1ha2VmaWxlLmluOiAgUmVuYW1lIFhERVBGSUxFUy4KCSogY29uZmlnL2gtc3VuKjogIERvbid0IGZvcmNlIHN0YXRpYyBsaW5raW5nLgoJKiB0cmFkLWNvcmUuYzogIERvY3VtZW50IGhvdyB0byB1c2UgaXQgbm93YWRheXMuCgkqIGkzODZhb3V0LmMsIG5ld3NvczMuYzogIENsZWFuIHVwLgoJKiBpMzg2Y29mZi5jOiAgQWxsb3cgMzg2IGNvZmYgZmlsZXMgdG8gYmUgdXNlZCBhcyBjb3JlIGZpbGVzIHRvbwoJKGZvciByZWFkaW5nIGNvcmUgZmlsZXMgZnJvbSBlbWJlZGRlZCBzeXN0ZW1zKS4KClR1ZSBPY3QgIDggMTU6MzA6MzkgMTk5MSAgSm9obiBHaWxtb3JlICAoZ251IGF0IGN5Z251cy5jb20pCgoJKiBBZGQgaTM4NmFvdXQuYyBmb3IgYS5vdXQgc3VwcG9ydCBvbiB0aGUgaTM4Ni4KClR1ZSBPY3QgIDggMTI6MTg6NTQgMTk5MSAgUm9sYW5kIEguIFBlc2NoICAocGVzY2ggYXQgY3lnbnVzLmNvbSkKCgkqIHJlbG9jLmMsIHNlY3Rpb24uYywgc3ltcy5jLCB0YXJnZXRzLmM6IGNvcnJlY3QgaW5mby1ub2RlCglzdHJ1Y3R1cmUgaW4gKmRvYyogY29tbWVudHMuCglkb2MvTWFrZWZpbGU6IHN0b3AgaGlkaW5nIGNvbXBsYWludHMgZnJvbSBtYWtlaW5mby4KClN1biBPY3QgIDYgMTk6MTA6MDYgMTk5MSAgSm9obiBHaWxtb3JlICAoZ251IGF0IGN5Z251cy5jb20pCgoJKiBhb3V0eC5oICguLi5zb21lX2FvdXRfb2JqZWN0X3ApOiAgVGFrZSBhIHRoaXJkIHBhcmFtZXRlciwKCXRoZSBpbnRlcm5hbF9leGVjIHN0cnVjdCwgYW5kIGF2b2lkIGV2ZXIgbG9va2luZyBhdCBhbgoJZXh0ZXJuYWxfZXhlYy4gIEFsbCBjYWxsZXJzIGNoYW5nZWQgdG8gcmVhZCB0aGUgZW50aXJlCglleHRlcm5hbF9leGVjIHN0cnVjdCwgc3dhcCBhbmQgY2hlY2sgaXRzIG1hZ2ljIG51bWJlciwKCXN3YXAgaW4gdGhlIHdob2xlIHN0cnVjdHVyZSwgYW5kIHBhc3MgdGhlIHN3YXBwZWQtaW4gdmVyc2lvbiB0bwoJc29tZV9hb3V0X29iamVjdF9wLgoJKiBib3V0LmM6ICBCcmluZyBpbnRvIG1vZGVybiBlcmEuICBVc2Ugc2luZ2xlIF9vYmplY3RfcCByb3V0aW5lCglmb3IgYmlnLSBhYW5kIGxpdHRsZS1lbmRpYW4uICBQcm92aWRlIGludGVybmFsIGFuZCBleHRlcm5hbAoJZXhlYyBoZWFkZXIgc3RydWN0cy4gIFVzZSBzZXBhcmF0ZSBzd2FwLWluIGFuZCBzd2FwLW91dCByb3V0aW5lcy4KCgkqIGxpYmFvdXQuaDogIE1vdmUgc3RydWN0IGludGVybmFsX2V4ZWMgZnJvbSAuLi9pbmNsdWRlL2FvdXQ2NC5oCgl0byBoZXJlLiAgQWRkIG9ial9zeW1ib2xfZW50cnlfc2l6ZSB0byBzdHJ1Y3QgYW91dGRhdGEuCgkqIGFvdXR4LmggKC4uLnNvbWVfYW91dF9vYmplY3RfcCk6ICBTZXQgb2JqX3N5bWJvbF9lbnRyeV9zaXplLgoKCSogLi4vaW5jbHVkZS9hb3V0NjQuaDogIENoYW5nZSBFWFRFUk5BTF9MSVNUX1NJWkUgdG8KCUVYVEVSTkFMX05MSVNUX1NJWkUuICBDYWxsZXJzIGNoYW5nZWQuCgpGcmkgT2N0ICA0IDE4OjE4OjQ2IDE5OTEgIEpvaG4gR2lsbW9yZSAgKGdudSBhdCBjeWdudXMuY29tKQoKCSogYmZkLmM6ICBSZW1vdmUgc3RyZXJyb3IoKSB0byBsaWJpYmVydHkuCgoJKiBlbGYuYzogIFJlbW92ZSBlbGZfc2V0X3NlY3Rpb25fY29udGVudHMsIHVzZSBnZW5lcmljIG9uZS4gIExpbnQuCgkqIGxpYmJmZC1pbi5oLCBsaWJiZmQuYzogIEFkZCBiZmRfZ2VuZXJpY19zZXRfc2VjdGlvbl9jb250ZW50cy4KCSogbGliYmZkLmMgKGJmZF9nZW5lcmljX3tnZXQsc2V0fV9zZWN0aW9uX2NvbnRlbnRzKTogIENoZWNrIHRoYXQKCWxhc3QgYnl0ZSBvZiB0cmFuc2Zlciwgbm90IGZpcnN0IGJ5dGUsIGlzIHdpdGhpbiB0aGUgc2VjdGlvbi4KCgkqIGhvc3QtYW91dC5jOiAgUmVtb3ZlIGBCU0QnIGFyY2hpdmUgc3VwcG9ydC4gIExpbnQuCgoJKiBhcmNodXJlcy5jOiBSZW5hbWUgYHN0cnVjdCBiZmRfYXJjaF9pbmZvX3N0cnVjdCcgdG8gYHN0cnVjdAoJYmZkX2FyY2hfaW5mbycuICBSZW5hbWUgYHR5cGVkZWYgYmZkX2FyY2hfaW5mb19zdHJ1Y3RfdHlwZScgdG8KCWBiZmRfYXJjaF9pbmZvX3R5cGUnLiAgQWxsIHVzZXMgY2hhbmdlZC4KCSogcmVsb2MuYzogIFJlbmFtZSBgYmZkX3JlbG9jX3N0YXR1c19lbnVtX3R5cGUnIHRvCglgYmZkX3JlbG9jX3N0YXR1c190eXBlJy4gIFJlbmFtZSBgYmZkX3JlbG9jX2NvZGVfZW51bV9yZWFsX3R5cGUnCgl0byBgYmZkX3JlbG9jX2NvZGVfcmVhbF90eXBlJy4gIChUaGlzIHNlZW1zIHRvIGJlIGEgbWlzbm9tZXIsCglpdCBuZWVkcyBhIGJldHRlciBuYW1lLikgIEFsbCB1c2VzIGNoYW5nZWQuCgkqIHRhcmdldHMuYzogIFJlbmFtZSBgZW51bSB0YXJnZXRfZmxhdm91cl9lbnVtJyB0byBgZW51bQoJdGFyZ2V0X2ZsYXZvdXInLCBhbmQgcmVtb3ZlIHRoZSBgX2VudW0nIGZyb20gYWxsIG9mIHRoZSBlbnVtCgl2YWx1ZXMgdGhlbXNlbHZlcy4gIEFsbCB1c2VzIGNoYW5nZWQuCgoJKiBjb25maWd1cmUuaW4sIGNvbmZpZy9oLWkzODZtYWNoOiAgaTM4NiBtYWNoIGhvc3QuCgkqIGNvbmZpZy90LWkzODYtYW91dDogIFVzZSBob3N0LWFvdXQuYy4KCgkqIHRyYWQtY29yZS5jOiAgR2l2ZSBpdCBpdHMgb3duIHh2ZWMncyB0byBtYWtlIGl0IGluZGVwZW5kZW50CglvZiBvdGhlciBmaWxlIGZvcm1hdHMuCgkqIGVjb2ZmLmMsIGhvc3QtYW91dC5jOiAgUmVtb3ZlIHJlZnMgdG8gdHJhZC1jb3JlLgoJKiBjb25maWcvdC1kZWMzMTAwLCB0LWhwMzAwYnNkLCB0LXRhaG9lLCB0LXZheDogIERlZmluZSBUUkFEX0NPUkUuCgkqIHRhcmdldHMuYzogICNpZmRlZiBUUkFEX0NPUkUsIGluY2x1ZGUgaXQgaW4gdGhlIHZlY3Rvci4KCkZyaSBPY3QgIDQgMTc6Mzg6MDMgMTk5MSAgU3RldmUgQ2hhbWJlcmxhaW4gIChzdGV2ZSBhdCBjeWdudXMuY29tKQoKCSogcmVsb2MuYzogRXh0ZW5kZWQgTkVXSE9XVE8gbWFjcm8KCSogaWVlZS5jOiBDaGFuZ2VkIHRoZSB3YXkgOGJpdCBwY3JlbCBpcyBkb25lCgkqIGNwdS1oODMwMC5jOiBnb3QgdGhlIHJlZ2lzdGVycyBpbiB0aGUgcmlnaHQgb3JkZXIKClRodSBPY3QgIDMgMTk6Mzk6NTUgMTk5MSAgSm9obiBHaWxtb3JlICAoZ251IGF0IGN5Z251cy5jb20pCgoJKiBiZmQtaW4uaDogIGVudW0gYm9vbGVhbiA9PiBlbnVtIGJmZF9ib29sZWFuIGZvciBTVlI0LiAgR3VtYnkncwoJcHJlZGljdGlvbiBpcyB2aW5kaWNhdGVkIQoKCSogYmZkLWluLmgsIGxpYmJmZC1pbi5oLCBkb2MvTWFrZWZpbGUsIGRvYy90b2xpYmJmZCwgZG9jL2ludG9iZmQ6CglSZW1vdmUgcmVmcyB0byBob3d0by5jLCBzaW5jZSBTdGV2ZSBmb3Jnb3QuCgpUaHUgT2N0ICAzIDA3OjQ5OjIxIDE5OTEgIFN0ZXZlIENoYW1iZXJsYWluICAoc3RldmUgYXQgY3lnbnVzLmNvbSkKCgkqIGVsZi5jOiB0b29rIHRoZSBhYm9ydCBvdXQgb2Ygc2V0X2FyY2hfbWFjaCBzbyB0aGF0IG9iamR1bXAgLWkgd2lsbAoJc3RpbGwgd29yay4gTm93IGFsbG93cyBhbnkgYXJjaGl0ZWN0dXJlL21hY2hpbmUgdG8gYmUgc2V0LgoKV2VkIE9jdCAgMiAxMzo1MDozNSAxOTkxICBTdGV2ZSBDaGFtYmVybGFpbiAgKHN0ZXZlIGF0IGN5Z251cy5jb20pCgoJKiBob3d0by5jIGRlbGV0ZWQgYW5kIG1vdmVkIGNvZGUgdG8gcmVsb2MuYwoKCSogbGliYmZkLmgsIGxpYmJmZC1pbi5oIHJlbW92ZWQgJGlkIHN0dWZmIGZvciByZWFsCgoJKiBjcHUtaDgzMDAuYyBNYWRlIGl0IG1hdGNoIHZhcmlvdXMgZGlmZmVyZW50IHNwZWxsaW5ncyBvZiBoODMwMC4KCgkqIGFyY2h1cmVzLmM6IFRvb2sgb3V0IHRoZSBmaXJzdCBjaGFyIGZpbHRlciB3aGljaCBtYWRlIGl0IG9ubHkKCWxvb2sgZm9yIGEgY3B1L2FyY2ggbWF0Y2ggd2hlbiB0aGUgZmlyc3QgY2hhcnMgb2Ygc3VwcGxpZWQgYW5kCgl0ZXN0ZWQgbmFtZXMgd2VyZSB0aGUgc2FtZS4KCgkqIHRhcmdldHMuYyByZW1vdmVkIG9hc3lzIHN0dWZmLCBwZW5kaW5nIHNvbWVvbmUgdG8gZml4IHRoZSBidWdzCglpbiBpdC4KCgpUdWUgT2N0ICAxIDEyOjI5OjQ0IDE5OTEgIEpvaG4gR2lsbW9yZSAgKGdudSBhdCBjeWdudXMuY29tKQoKCSogTWFrZWZpbGUuaW4sIGNvbmZpZ3VyZS5pbiwgdGFyZ2V0cy5jLCBlbGYuYzogIEFkZCBwcmVsaW1pbmFyeQoJRUxGIHN1cHBvcnQgZ29vZCBlbm91Z2ggZm9yIEdEQi4KCSogY29uZmlndXJlLmluLCBjb25maWcvaC1hbWl4LCBjb25maWcvdC1tNjhrLWVsZjogIEhhbmRsZQoJbTY4ay1jYm0tc3ZyNCBob3N0IGFuZCB0YXJnZXQuCgkqIGNvbmZpZy90LW02OGstY29mZiwgdC1tODhrLWNvZmYsIHQtbTg4ay1hb3V0OiAgTWFrZSBmaWxlcyBub25lbXB0eQoJc28gYGRpZmYnIGFuZCBgcGF0Y2gnIGNhbiBjb3BlLgoKVHVlIE9jdCAgMSAxMToyNDozMSAxOTkxICBTdGV2ZSBDaGFtYmVybGFpbiAgKHN0ZXZlIGF0IGN5Z251cy5jb20pCgoJKiBhcmNodXJlcy5jOiByZW1vdmVkIHRleGluZm8gZXJyb3IKCgkqIGluaXQuYzogYWRkZWQgdGV4aW5mbyBob29rcywgYW5kIHJlbW92ZWQgaW5pdGlhbGl6YXRpb24gZXJyb3IKCW1lc3NhZ2UuCgoJKiBsaWJjb2ZmLWluLmgsIGxpYmJmZC1pbi5oIHJlbW92ZWQgJGlkIGZpZWxkIHNvIGN2cyBjYW4gbWVyZ2UKCXdpdGhvdXQgY29tcGxhaW50cy4KClR1ZSBPY3QgIDEgMDU6MDI6NTMgMTk5MSAgSm9obiBHaWxtb3JlICAoZ251IGF0IGN5Z251cy5jb20pCgoJKiBjcHUtaTk2MC5jOiAgQXZvaWQgbnVtZXJpY2FsIGNvdW50IG9mIGluaXRpYWxpemVycy4KCglWYXggVWx0cml4IGNoYW5nZXMgZnJvbSBEYXZpZCBUYXlsb3IgPHRheWxvckB0aGluay5jb20+OgoJKiBob3N0LWFvdXQuYzogIE1ha2UgbGl0dGxlLWVuZGlhbiB2ZWN0b3IgcmVhbGx5IGxpdHRsZS1lbmRpYW4uCgkqIGNvbmZpZ3VyZS5pbjogIFNlcGFyYXRlIHZheCBhbmQgdGFob2UgY2FzZXMsIGhhbmRsZSB1bHRyaXguCgkqIGNvbmZpZy90LXZheDogIEFkZCB0cmFkLWNvcmUuby4KCSogY29uZmlnL2gtdmF4dWx0OiAgTmV3IGhvc3Qgc3lzdGVtLgoKTW9uIFNlcCAzMCAxNToxMzo0NiAxOTkxICBTdGV2ZSBDaGFtYmVybGFpbiAgKHN0ZXZlIGF0IGN5Z251cy5jb20pCgoJKiBiZmQtaW4uaCBWRVJTSU9OLCBjaGFuZ2UgdmVyc2lvbiBudW1iZXIgdG8gMC4xOCwgdGhpcyBtYWtlcyBhCglnYXAsIGJ1dCBub3cgaXMgdGhlIHNhbWUgYXMgdGhlIGxpbmtlciB2ZXJzaW9uIG51bWJlci4KCgkqIGNwdS1hMjlrLmMsIGNwdS1pMzg2LmMsIGNwdS1tNjhrLmMsIGNwdS1taXBzLmMsIGNwdS12YXguYywKCWNwdS1oODMwMC5jLCBjcHUtaTk2MC5jLCBjcHUtbTg4ay5jLCBjcHUtc3BhcmMuYzogYWRkZWQuIFRoZXNlCglmaWxlcyB3aWxsIGV2ZW50dWFsbHkgY29udGFpbiBwcm9jZXNzb3Igc3BlY2lmaWMgYml0cyBmb3IgYmZkLAoJbGlrZSBzdHJhbmdlIHJlbG9jYXRpb24gaW5mb3JtYXRpb24gYW5kIGRpcy9hc3NlbWJseS4gIFNvIGZhciBvbmx5Cgl0aGUgSDggaGFzIGJlZW4gZXZlbiBwYXJ0aWFsbHkgZG9uZS4gIFRoaXMgd29yayBhbHNvIHRpZXMgaW4gd2l0aAoJdGhlIGNoYW5nZSBpbiBoYW5kbGluZyBhcmNoaXRlY3R1cmVzLgoKCSogYW1kY29mZi5jOiAoYTI5a19yZWxvYykgZml4IGVycm9yIG1lc3NhZ2UuCgoJKiBhb3V0LWYxLmg6IChjaG9vc2VfcmVsb2Nfc2l6ZSkgbm93IGNhbGxzIGJmZF9nZXRfYXJjaCB0bwoJZGlzY292ZXIgdGhlIGFyY2hpdGVjdHVyZSBvZiB0aGUgYmZkLiAoc3Vub3M0X2NhbGxiYWNrKSBjYWxscyB0aGUKCWZ1bmN0aW9uIGJmZF9zZXRfYXJjaF9tYWNoIHJhdGhlciB0aGFuIHN0dWZmaW5nIHN0dWZmIGRpcmVjdGx5CglpbnRvIHRoZSBiZmQuIChzdW5vczRfd3JpdGVfb2JqZWN0X2NvbnRlbnRzKSwgY2hhbmdlZCBuYW1lcyBvZgoJYWNjZXNzb3IgZnVuY3Rpb25zLgoKCSogYW91dHguaDogKHNldF9hcmNoX21hY2gpIG5vdyBjYWxscyBiZmRfZGVmYXVsdF9zZXRfYXJjaF9tYWNoIHRvCglzZXR1cCB0aGUgZW52aXJvbm1lbnQuCgoJKiBhcmNoaXZlLmM6IChiZmRfc2x1cnBfY29mZl9hcm1hcCkgY29mZiBhcmNoaXZlcyBhbHdheXMgaGF2ZSB0aGUKCWhlYWRlcnMgaW4gYmlnIGVuZGlhbiBmb3JtYXQsIHJlZ2FyZGxlc3Mgb2YgdGhlIGVuZGlhbmVzcyBvZiB0aGUKCWhvc3Qgb3IgdGFyZ2V0LgoKCSogYXJjaHVyZXMuYzogdG90YWxseSBjaGFuZ2VkLiBOb3cgYW4gYXJjaGl0ZWN0dXJlIGlzIHJlcHJlc2VudGVkCgl3aXRoIGEgcG9pbnRlciB0byBhbiBpbmZvIHN0cnVjdHVyZSByYXRoZXIgdGhhbiBhbiBlbnVtZXJhdGVkIHR5cGUKCWFuZCBhIGxvbmcuIFRoZSBvbGQgaW5mbyBpcyBhdmFpbGFibGUgYXMgdHdvIGVsZW1lbnRzIGluIHRoZQoJc3RydWN0dXJlLiAgRnV0dXJlIGVuaGFuY2VtZW50cyB0byBhcmNoaXRlY3VyZSBzdXBwb3J0IHdpbGwKCWludm9sdmUgcG9pbnRlcnMgdG8gbWV0aG9kcyBiZWluZyBwbGFjZWQgaW50byB0aGUgaW5mbyBzdHJ1Y3R1cmUuCgoJKiBiZmQuYzogY2hhbmdlZCB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgYmZkIHN0cnVjdHVyZSBmb3IgdGhlIG5ldwoJYXJjaGl0ZWN0dXJlIHN0dWZmLgoKCSogYm91dC5jOiAoYl9vdXRfc2V0X2FyY2hfbWFjaCkgY2hhbmdlZCB0byB1c2UgdGhlIG5ldwoJYXJjaGl0ZWN0dXJlIG1lY2hhbmlzbS4KCgkqIGNvZmZjb2RlLmg6IChjb2ZmX3NldF9hcmNoX21hY2gsIGNvZmZfc2V0X2ZsYWdzKSBjaGFuZ2VkIHRvIHVzZQoJdGhlIG5ldyBhcmNoaXRlY3R1cmUgbWVjaGFuaXNtLgoKCSogY29uZmlndXJlLmluOiBhZGRlZCBoOCBzdHVmZi4KCgkqIGllZWUuYzogdG9vIG1hbnkgY2hhbmdlcyB0byBub3RlLiAgTm93IGllZWUgZmlsZXMgd3JpdHRlbiB3aXRoCgliZmQgZ2FzIGFuZCBsZCBjYW4gYmUgcmVhZCBieSBnbGQgYW5kIGllZWUgb25seSBsaW5rZXJzIGFuZAoJc2ltdWxhdG9ycy4KCgkqIGxpYmJmZC5jLCBsaWJiZmQuaDogY2hhbmdlZCBwcm90b3R5cGUgb2YgYmZkX3dyaXRlLgoKCSogbmV3c29zMy5jOiAobmV3b3MzX2NhbGxiYWNrKSBub3cgY2FsbHMgYmZkX3NldF9hcmNoX21hY2ggcmF0aGVyCgl0aGFuIGZpeGluZyB0aGUgc3RydWN0dXJlIGRpcmVjdGx5LgoKCSogb2FzeXMuYzogKG9hc3lzX29iamVjdF9wKSBub3cgY2FsbHMgYmZkX2RlZmF1bHRfc2V0X2FyY2hfbWFjaCByYXRoZXIKCXRoYW4gZml4aW5nIHRoZSBzdHJ1Y3R1cmUgZGlyZWN0bHkuCgoJKiBvcG5jbHMuYzogKG5ld19iZmQpIG1ha2VzIHN1cmUgdGhhdCBiZmRfaW5pdCBoYXMgYmVlbiBjYWxsZWQKCWJlZm9yZSBvcGVuaW5nIGEgYmZkLgoKCSogc3JlYy5jOiAoc3JlY19zZXRfYXJjaF9tYWNoKSBub3cgY2FsbHMgYmZkX2RlZmF1bHRfc2V0X2FyY2hfbWFjaAoJcmF0aGVyIHRoYW4gZml4aW5nIHRoZSBzdHJ1Y3R1cmUgZGlyZWN0bHkuCgoJKiB0YXJnZXRzLmM6ICh0YXJnZXRfdmVjdG9yKSBub3cgYnkgZGVmaW5pbmcgU0VMRUNUX1ZFQ1MgKHBlcmhhcHMKCWluIHRoZSB0L2htYWtlIGZpbGUpIGEgdXNlciBjYW4gc2VsZWN0IHdoaWNoIGJhY2tlbmRzIHRoZXkgd2FudAoJbGlua2VkIHdpdGggYmZkIHdpdGhvdXQgY2hhbmdpbmcgdGhlIHNvdXJjZS4KCgkqIGluaXQuYzogbmV3LCBsb29rcyBhZnRlciBpbml0aWFsaXppbmcgbW9kdWxlcy4KCgkqIGhvd3RvLmM6IGZvciBmdXR1cmUgdXNlLCB3aWxsIGFsbG93IGFuIGFwcGxpY2F0aW9uIHRvIHdvcmsgb3V0Cgl3aGF0IGNvb2tpZSB0byB1c2UgYXMgYSBoYW5kbGUgb24gYSByZWxjb2F0aW8gaG93dG8uCgpNb24gU2VwIDMwIDEzOjMxOjE1IDE5OTEgIEpvaG4gR2lsbW9yZSAgKGdudSBhdCBjeWdudXMuY29tKQoKCSogc3JlYy5jOiAgQmV0dGVyIGVycm9yIGNoZWNraW5nLCBwYXJ0bHkgZnJvbSBQZXRlciBTY2hhdWVyLgoJKHNyZWNfb2JqZWN0X3ApOiAgQXZvaWQgYXNzdW1pbmcgYW55IGZpbGUgdGhhdCBzdGFydHMgd2l0aCAnUycgaXMKCWFuIFMtcmVjb3JkIGZpbGUhICAoQ2hlY2sgZm9yIDMgdXBwZXJjYXNlLWhleCBkaWdpdHMgYWZ0ZXIgaXQuKQoJKElTSEVYKTogIERlZmluZSBuZXcgbWFjcm8gZm9yIGNoZWNraW5nIHN1cHBvc2VkbHkgaGV4IGNoYXJhY3RlcnMuCgkocGFzc19vdmVyKTogIFRyZWF0IGFzIEVPRiBhbnkgUy1yZWNvcmQgbGluZSB0aGF0OgoJICAgICogIGRvZXNuJ3QgaGF2ZSBoZXggaW4gZWl0aGVyIHNpemUgY2hhcmFjdGVyCgkgICAgKiAgcHJvZHVjZXMgYSBzaXplIGxhcmdlciB0aGFuIDB4N0YKCSAgICAqICBoYXMgYW4gdW5yZWNvZ25pemVkIHR5cGUgbnVtYmVyCgpUaHUgU2VwIDI2IDE1OjI3OjI5IDE5OTEgIEpvaG4gR2lsbW9yZSAgKGdudSBhdCBjeWdudXMuY29tKQoKCSogYW91dGYxLmgsIGFvdXR4LmgsIGJvdXQuYywgY29mZmNvZGUuaCwgaG9zdC1hb3V0LmMsIG9hc3lzLmMsCglvcG5jbHMuYzogIExpbnQgKHNhYmVyIGFjdHVhbGx5KS4KClRodSBTZXAgMjYgMTE6MjQ6MjQgMTk5MSAgUGVyIEJvdGhuZXIgIChib3RobmVyIGF0IGN5Z251cy5jb20pCgoJKiBsaWJhb3V0LmggKFdSSVRFX0hFQURFUlMpOiBTZXQgaGVhZGVyJ3MgYV90ZXh0IGZpZWxkIGFsd2F5cy4KCSogbmV3c29zMy5jOiBGaXhlZCB0d28gdHlwZXM6IG5ld29zMyAtPiBuZXdzb3MzLgoJKiByZWxvYy5jIChiZmRfcGVyZm9ybV9yZWxvY2F0aW9uKTogRml4IHBjLXJlbGF0aXZlIHJlbG9jYXRpb24KCXRvIHVzZSBjb3JyZWN0IHNlZ21lbnQuCgpNb24gU2VwIDIzIDE4OjI0OjM0IDE5OTEgIFBlciBCb3RobmVyICAoYm90aG5lciBhdCBjeWdudXMuY29tKQoKCSogYW91dHguaCAocHJpbnRfc3ltYm9sKTogIEhhbmRsZSBtaXNzaW5nIHN5bWJvbC0+bmFtZS4KCkZyaSBTZXAgMjAgMTI6MjY6MDEgMTk5MSAgU3R1IEdyb3NzbWFuICAoZ3Jvc3NtYW4gYXQgY3lnbnVzLmNvbSkKCgkqIGFvdXRmMS5oIChzd2FwY29yZV9zcGFyYyk6ICBDaGFuZ2UgbmFtZSBvZiBVU1JTVEFDSywgZml4IGNvbW1lbnQKCWF0IHRvcCBvZiByb3V0aW5lLgoKVHVlIFNlcCAxNyAxNzoyMzo0OSAxOTkxICBTdHUgR3Jvc3NtYW4gIChncm9zc21hbiBhdCBjeWdudXMuY29tKQoKCSogb2FzeXMuYywgY29uZmlndXJlLmluLCBjb25maWcvaC1pcml4MywgY29uZmlnL3QtaXJpeDM6CglhZGQgc2dpL2lyaXggc3VwcG9ydC4KClRodSBTZXAgMTIgMTQ6Mjk6MDkgMTk5MSAgSm9obiBHaWxtb3JlICAoZ251IGF0IGN5Z2ludC5jeWdudXMuY29tKQoKCUNoYW5nZXMgZm9yIHRoZSBBTUQgMjkwMDAgVWx0cmFjb21wdXRlciBwb3J0IGZyb20gRGF2aWQgV29vZC4KCSh3b29kQG55dS5lZHUpLgoKCSogb3BuY2xzLmMgKGJmZF9mZG9wZW5yKTogIEhhbmRsZSBOT19GQ05UTC4KCgkqIE1ha2VmaWxlLmluOiAgTWFrZSBzdWJkaXJzIHdvcmsgYnkgdXNpbmcgJChJTkNESVIpIGluIHRoZQoJY3J1ZGUgZGVwZW5kZW5jaWVzLgoKCSogY29mZmNvZGUuaCAoY29mZl9yZWFsX29iamVjdF9wKTogIFBhc3MgaW5mb3JtYXRpb24gYWJvdXQgdGhlCgljdXJyZW50IGZpbGUncyBjb2ZmIHN5bWJvbCBmb3JtYXQgdG8gQkZEIHZpYSB0aGUgY29mZl9kYXRhIHN0cnVjdC4KCShjb2ZmX2ZpbmRfbmVhcmVzdF9saW5lKTogIG9ial9pY29mID0+IGNvZmZfZGF0YS4KCShjb2ZmX3N3YXBfc3ltX3tpbixvdXR9KTogIENoZWNrIHRoYXQgU1lNTk1MRU4gPT0gRV9TWU1OTUxFTi4KCShjb2ZmX3N3YXBfYXV4X3tpbixvdXR9KTogIENoZWNrIHRoYXQgRklMTk1MRU4gPT0gRV9GSUxOTUxFTgoJYW5kIERJTU5VTSA9PSBFX0RJTU5VTS4KCSogY29uZmlndXJlLmluOiAgSGFuZGxlIGEyOWstKi0qIGhvc3RzLCBhbmQgdGFyZ2V0cwoJYTI5ay0qLWNvZmYsIGEyOWstKi1hb3V0LCBhbmQgYTI5ay0qLXN5bTEuCgkqIGxpYmNvZmYtaW4uaDogIEFkZCBsb2NhbF9uX2J0bWFzaywgbG9jYWxfbl9idHNoZnQsCglsb2NhbF9uX3RtYXNrLCBsb2NhbF9uX3RzaGlmdCwgbG9jYWxfc3ltZXN6LCBsb2NhbF9hdXhlc3osCglsb2NhbF9saW5lc3ogdG8gYGNvZmZfZGF0YScgKHRkYXRhKSBzdHJ1Y3QuCgkoY29mZl9kYXRhLCBjb2ZmX2RhdGFfdHlwZSwgY29mZl90ZGF0YSk6ICBSZW5hbWUgc3RydWN0IGljb2ZkYXRhLgoJKiBjb25maWcvaC11bHRyYTM6ICBIYW5kbGUgYTI5ay0qLSogaG9zdHMgYXMgVWx0cmFjb21wdXRlcnMuCgpUaHUgU2VwIDEyIDE0OjA3OjIyIDE5OTEgIFJvbGFuZCBILiBQZXNjaCAgKHBlc2NoIGF0IGN5Z2ludC5jeWdudXMuY29tKQoKCSogTWFrZWZpbGUuaW46ICQoTUFLRSkgZm9yIG1ha2UsICQoZG9jZGlyKSBmb3IgZG9jCgkqIGRvYy9NYWtlZmlsZTogcmVkdW5kYW50IGRlcGVuZGVuY2llcyBmb3IgU3VuLW1ha2UgVlBBVEggYnVnCgpUdWUgU2VwIDEwIDIwOjM0OjEyIDE5OTEgIEpvaG4gR2lsbW9yZSAgKGdudSBhdCBjeWdpbnQuY3lnbnVzLmNvbSkKCgkqIGFvdXRmMS5oIChzdW5vczRfY29yZV9maWxlX3ApOiAgUmVsZWFzZSB0aGUgcmlnaHQgc3RvcmFnZSBpbgoJZXJyb3IgY2FzZS4KCShzdW5vczRfY29yZV9maWxlX21hdGNoZXNfZXhlY3V0YWJsZV9wKTogIEZpeCBoZWFkZXIgY29tcGFyaXNvbi4KCSogYW91dHguaDogIEF2b2lkIHNoaWZ0cyBvZiAzMiBiaXRzLCB1bmRlZmluZWQgaW4gQy4gIExpbnQuCgkqIGJvdXQuYywgaWNvZmYuYywgaWVlZS5jLCBsaWJiZmQuYywgb2FzeXMuYzogIGdjYyAtTyAtVyBsaW50LgoKV2VkIFNlcCAgNCAwMDo0NDo1MiAxOTkxICBKb2huIEdpbG1vcmUgIChnbnUgYXQgY3lnaW50LmN5Z251cy5jb20pCgoJQWxsb3cgR0RCIHRvIHBhdGNoIG9iamVjdCBmaWxlcy4KCgkqIGFvdXRmMS5oIChzdW5vc19jb3JlX2ZpbGVfcCk6ICBTZXQgU0VDX0hBU19DT05URU5UUyBvbiBhbGwgc2VjdGlvbnMuCgkqIHRyYWQtY29yZS5oICh0cmFkX3VuaXhfY29yZV9maWxlX3ApOiAgRGl0dG8uCgkqIGFvdXR4LmggKGFvdXRfc2V0X3NlY3Rpb25fY29udGVudHMpOiAgT24gZmlyc3Qgb3V0cHV0LCBjaGVjawoJYWJmZC0+ZGlyZWN0aW9uIGFuZCBjb21wbGFpbiBpZiBlcnJvbmVvdXMuCgoJKiBNYWtlZmlsZS5pbjogIEFkZCBjcnVkZSBkZXBlbmRlbmNpZXMuCgpUdWUgU2VwICAzIDEzOjQ2OjE5IDE5OTEgIFN0ZXZlIENoYW1iZXJsYWluICAoc3RldmUgYXQgY3lnaW50LmN5Z251cy5jb20pCgoJKiBjb25maWcvKiBhb3V0eC5oIGNvbmZpZ3VyZSogc2hvcnRlbmVkIGFsbCB0aGUgaC90bWFrZS14eHh4Cgl0byBoL3QteHh4eCBmaWxlcyBzbyB0aGF0IGV2ZXJ5dGhpbmcgd2lsbCB3b3JrIG9uIFN5c3RlbSBWLgoKRnJpIEF1ZyAyMyAxMzo1MTowNiAxOTkxICBKb2huIEdpbG1vcmUgIChnbnUgYXQgY3lnaW50LmN5Z251cy5jb20pCgoJKiBhb3V0eC5oOiAgQWRkIGluZm9ybWF0aW9uIG9uIGhvc3QtYW91dC5jIGFuZCBob3cgdG8gY29uZmlndXJlCgl0byB1c2UgaXQsIHRvIHRoZSBtYW51YWwuCgkqIGNvbmZpZ3VyZS5pbjogIFRpeCB0eXBvLgoJKiBlY29mZi5jOiAgSWYgY29tcGlsaW5nIGZvciBERUMzMTAwLCB1c2UgdHJhZF91bml4IGNvcmUgZmlsZXMsCgllbHNlIGR1bW15IG91dCB0aGUgY29yZSBmaWxlIHN1cHBvcnQuCgkqIHRyYWQtY29yZS5jICh0cmFkX3VuaXhfY29yZV9maWxlX3ApOiAgSWYgSE9TVF9EQVRBX1NUQVJUX0FERFIgaXMKCXNwZWNpZmllZCwgdXNlIGl0IHRvIGxvY2F0ZSB0aGUgZGF0YSBzZWN0aW9uLgoJKiBjb2ZmY29kZS5oIChjb2ZmX3dyaXRlX3N5bWJvbHMpOiAgRGVjbGFyZSBidWZmZXIgYXMgYmZkX2J5dGVzCglyYXRoZXIgdGhhbiBhcyBjaGFycyAobGludCkuCgpUaHUgQXVnIDIyIDIyOjIwOjE5IDE5OTEgIFN0dSBHcm9zc21hbiAgKGdyb3NzbWFuIGF0IGN5Z2ludC5jeWdudXMuY29tKQoKCSogYW91dHguaCwgY29mZmNvZGUuaDogIHNhYmVyaXplZC4KClRodSBBdWcgMjIgMTE6Mjc6MDYgMTk5MSAgUm9sYW5kIEguIFBlc2NoICAocGVzY2ggYXQgY3lnaW50LmN5Z251cy5jb20pCgoJKiBiZmQudGV4aW5mbzogc29tZSBjbGVhbnVwLCByZWluY29ycG9yYXRlZCBtb3JlIGludHJvIG1hdHRlciBmcm9tCgliZmQuZG9jCgliZmQuYywgdGFyZ2V0cy5jOiBtaW5vciByZXdvcmRpbmcgb2YgZG9jIHNlZ21lbnRzCgoKV2VkIEF1ZyAyMSAxOToxMzoyMiAxOTkxICBKb2huIEdpbG1vcmUgIChnbnUgYXQgY3lnaW50LmN5Z251cy5jb20pCgoJKiB0cmFkLWNvcmUuYyAodHJhZF91bml4X2NvcmVfZmlsZV9wKTogIFVzZSBIT1NUX1RFWFRfU1RBUlRfQUREUiwKCWV0YywgcmF0aGVyIHRoYW4gVEVYVF9TVEFSVF9BRERSLgoJKiBob3N0LWFvdXQuYzogIFJlbW92ZSAjaWYgMCBhcm91bmQgd2hvbGUgdGhpbmcuCglVcGRhdGUgdG8gbW9kZXJuICgzMi82NC1iaXQpIGEub3V0IG5hbWluZyBjb252ZW50aW9ucy4KCUluY2x1ZGUgYSBsYXJnZSBjaHVuayBvZiAuLi9pbmNsdWRlL2Eub3V0LmdudS5oIHRvIGdldCBtYWNyb3MgdGhhdAoJYXJlIG5vdCBkZWZpbmVkIGJ5IHRoZSBzeXN0ZW0gaW5jbHVkZSBmaWxlcy4KCShob3N0X2FvdXRfezMyLDY0fV93cml0ZV9vYmplY3RfY29udGVudHMpOiAgVXNlIHRoZSBXUklURV9IRUFERVJTCgltYWNybyB1c2VkIGJ5IHRoZSBvdGhlciBhLm91dCBpbXBsZW1lbnRhdGlvbnMuCgkqIE1ha2VmaWxlLmluOiAgR2l2ZSBkZXBlbmRlbmNpZXMgdG8gT1BUSU9OQUxfQkFDS0VORFMuCgpXZWQgQXVnIDIxIDE0OjMzOjA2IDE5OTEgIFJvbGFuZCBILiBQZXNjaCAgKHBlc2NoIGF0IGN5Z2ludC5jeWdudXMuY29tKQoKCSogTWFrZWZpbGUuaW46IHVzZSB0YXJnZXRzICJiZmQuZHZpIiBhbmQgImJmZC5wcyIgaW5zdGVhZCBvZgoJdGV4ZG9jIGFuZCBwc2RvYzsgbWFrZSB0aGVzZSBkZXBlbmQgb24gZ2VuZXJhdGVkIC50ZXhpJ3MKCgkqIHNjYW5pdCwgKG5ldykgdW5QUk9UTzogdHVybiBQUk9UTyBtYWNyb3MgaW50byBBTlNJIGRlY2xhcmF0aW9ucyBpbgoJZG9jCgoJKiBiZmQuYywgcmVsb2MuYywgc3ltcy5jOiBtaW5vciBzcGVsbGluZy93b3JkaW5nIGZpeGVzIGluIGRvYwoJcG9ydGlvbnMKCgkqIE1ha2VmaWxlLmluLCBhd2tzY2FuLWlwLCBhd2tzY2FuLXAsIGRvYy9pbnRvYmZkLAoJbGliYmZkLmgsIGxpYmNvZmYuaCwgdG9saWJjb2ZmOyBuZXcgYmZkLWluLmgsIGxpYmJmZC1pbi5oLAoJbGliY29mZi1pbi5oOiAoYSkgdXNlIHNlcGFyYXRlIGZpbGVzIGZvciBpbnZhcmlhbnQgcGFydHMgb2YgYmZkLmgsCglsaWJiZmQuaCwgYW5kIGxpYmNvZmYuaDsgKGIpIGluIGdlbmVyYXRlZCBwYXJ0cyBvZiBzYW1lLCB1c2UgbGVzcwoJb2J0cnVzaXZlIG1hcmtzIGluZGljYXRpbmcgLmMgb3JpZ2lucy4KCgkqIGJmZC50ZXhpbmZvOiBnZW5lcmFsaXplIG1vc3QgcmVmZXJlbmNlcyB0byBsaW5rZXIKClR1ZSBBdWcgMjAgMTU6MTg6MDIgMTk5MSAgUm9sYW5kIEguIFBlc2NoICAocGVzY2ggYXQgY3lnaW50LmN5Z251cy5jb20pCgoJKiBNYWtlZmlsZS5pbjogaW5jbHVkZSBjb3JlLnAgaW4gUFJPVE9TIChidWlsZGluZyBiZXR0ZXIgYmZkLmgpCgkqIGFyY2h1cmVzLmM6IHJlbW92ZSBlbXB0eSBmb28oKSBkZWZpbml0aW9uIChjcmVwdCBpbiBhdCB2bjEuOSkKCk1vbiBBdWcgMTkgMTM6NDg6MjIgMTk5MSAgUm9sYW5kIEguIFBlc2NoICAocGVzY2ggYXQgY3lnaW50LmN5Z251cy5jb20pCgoJKiBiZmQudGV4aW5mbzogdXNlIEBzZXRjaGFwdGVybmV3cGFnZSBvbiBpbnN0ZWFkIG9mIGxvdHMgb2YKCUBwYWdlJ3M7IG1pbm9yIHJlcGhyYXNpbmcgaW4gSW50cm9kdWN0aW9uLgoKCSogYW91dHguaCwgYXJjaGl2ZS5jLCBhcmNodXJlcy5jLCBiZmQuYywgYmZkLnRleGluZm8sIGNhY2hlLmMsCgljb2ZmY29kZS5oLCBjb3JlLmMsIGZvcm1hdC5jLCBpZWVlLmMsIGxpYmJmZC5jLCBsaWJiZmQuaCwgbGliY29mZi5oLAoJb2FzeXMuYywgb3BuY2xzLmMsIHJlbG9jLmMsIHNlY3Rpb24uYywgc3ltcy5jLCB0YXJnZXRzLmMgKGRvY3VtZW50YXRpb24KCXNlZ21lbnRzKTogdXNlZCBCRkQgKGNhcHMpIG1vcmUgY29uc2lzdGVudGx5IGFzIGEgbmFtZSBpbgoJZGlzY291cnNlLCBmaXhlZCBhIGZldyBvdGhlciBtaW5vciB0eXBvcyBhbmQgdXNlcyBvZiBmb250cwoKClRodSBBdWcgIDggMTY6NDc6NDMgMTk5MSAgU3RldmUgQ2hhbWJlcmxhaW4gIChzdGV2ZSBhdCBjeWdpbnQuY3lnbnVzLmNvbSkKCgkqIGNvZmZjb2RlLmg6IGZpeGVkIGJ1ZyB3aGVyZSBzdHJpbmcgdGFibGUgc2l6ZSB3YXNuJ3QgYmVpbmcgc3dhcHBlZC4KClRodSBBdWcgIDEgMTY6MzU6MjggMTk5MSAgU3RldmUgQ2hhbWJlcmxhaW4gIChzdGV2ZSBhdCBjeWdpbnQuY3lnbnVzLmNvbSkKCgkqIHNlY3Rpb24uYzogYWRkZWQgU0VDX0NPTlNUUlVDVE9SX1RFWFR8REFUQXxCU1MgZmxhZ3MKCgkqIHN5bXMuYzogYWRkZWQgQlNGX0NPTlNUUlVDVE9SLCBCU0ZfV0FSTklORyBhbmQgQlNGX0lORElSRUNUCglmbGFncy4gKGJmZF9wcmludF9zeW1ib2xfdmFuZGYpIG5vdyBrbm93cyB3aGF0IHRvIGRvIHdpdGggdGhlCglhYm92ZSBmbGFncy4KCgkqIGFvdXR4Lmg6IG1hZGUgdHJhbnNsYXRlX2Zyb21fbmF0aXZlX3N5bV9mbGFncyBhbmQKCXRyYW5zbGF0ZV90b19uYXRpdmVfc3ltX2ZsYWdzIHByb2R1Y2UgdGhlIGFib3ZlIGZsYWdzLgoKCldlZCBKdWwgMzEgMDk6NTM6NTIgMTk5MSAgSm9obiBHaWxtb3JlICAoZ251IGF0IGN5Z2ludC5jeWdudXMuY29tKQoKCSogYWxsIGZpbGVzOiAgdXBkYXRlIGNvcHlyaWdodCBub3RpY2VzIGZvciBHUEwgdmVyc2lvbiAyLgoJSW5zdGFsbCBoZWFkZXIgY29tbWVudHMgYW5kIGF0dHJpYnV0ZSBtb3N0IG1vZHVsZXMgdG8gdGhlaXIKCWF1dGhvcnMuICBCRkQncyBuYW1lIGlzIG5vdyBvZmZpY2lhbGx5ICJCaW5hcnkgRmlsZSBEZXNjcmlwdG9yIiwKCXNvIHJlbW92ZSBhbnkgY29uZmxpY3RpbmcgcGVqb3JhdGl2ZXMuCglhcmNodXJlcy5oOiAgQ29uc2lzdHMgc29sZWx5IG9mIGNvbW1lbnRzOyByZW1vdmUgaXQuCgpGcmkgSnVsIDI2IDE4OjExOjM0IDE5OTEgIFN0ZXZlIENoYW1iZXJsYWluICAoc3RldmUgYXQgY3lnaW50LmN5Z251cy5jb20pCgoJKiBNYWtlZmlsZS5pbiwgYmZkLmM6IE1hZGUgaXQgY29tcGlsZSBhZ2Fpbi4KCkZyaSBKdWwgMTkgMDg6MTc6MDkgMTk5MSAgU3RldmUgQ2hhbWJlcmxhaW4gIChzdGV2ZSBhdCBjeWdpbnQuY3lnbnVzLmNvbSkKCgkqIG5ld3NvczMuYywgdGFyZ2V0cy5jLCBjb2ZmY29kZS5oOiBuZXcgcGF0Y2hlcyBmcm9tIERhdmlkIFdvb2QKCgpNb24gSnVsIDE1IDE2OjI3OjQyIDE5OTEgIFN0ZXZlIENoYW1iZXJsYWluICAoc3RldmUgYXQgY3lnaW50LmN5Z251cy5jb20pCgoJKiBhb3V0ZjEuaCBhcmNoaXZlLmMgYmZkLmMgY29mZmNvZGUuaCBjb3JlLmMgZWNvZmYuYyBpZWVlLmMKCWJmZC50ZXhpbmZvIG9hc3lzLmMgb3BuY2xzLmMgcmVsb2MuYyBzcmVjLmM6IE1vcmUgZG9jdW1lbnRhdGlvbiBvbgoJbGludCBmaXhlcy4KCgkqIGFtZGNvZmYuYyBiZmQudGV4aW5mbyBNYWtlZmlsZS5pbiA6IEZvbGRlZCBpbiBjaGFuZ2VzIGZvciBhbWQKCTI5ayBjb2ZmIGJ5IERhdmlkIFdvb2QgKHdvb2RAbGFiLnVsdHJhLm55dS5lZHUpLgoKVGh1IEp1bCAgNCAwOTo1MzoxNiAxOTkxICBTdGV2ZSBDaGFtYmVybGFpbiAgKHN0ZXZlIGF0IGN5Z2ludC5jeWdudXMuY29tKQoKCSogY29yZS5jOiBOZXcgZmlsZS4KCSogZm9ybWF0LmM6IE5ldyBmaWxlLgoJKiByZWxvYy5jOiBOZXcgZmlsZS4KCSogc2VjdGlvbi5jOiBOZXcgZmlsZS4KCSogc3ltcy5jOiBOZXcgZmlsZXcuCglDbGVhbmVkIHVwIHRoZSByZXN0IG9mIHRoZSBmaWxlcyBhIGJpdCwgYW5kIGFkZGVkIHNvbWUKCWRvY3VtZW50YXRpb24uCgpNb24gSnVsICAxIDEzOjI5OjQ3IDE5OTEgIERhdmlkIFdvb2QgKHdvb2QgYXQgZGF2aWQudWx0cmEubnlhLmVkdSkKCgkqIG9wbmNscy5jLCAuLi9pbmNsdWRlL3N5cy9oLXN1bjMuaCAuLi9pbmNsdWRlL3N5cy9oLXN1bjQuaDogZmNudGwKCXJlYWxseSB0YWtlcyAzIGFyZ3VtZW50cywgcGF0Y2hlZCBjb2RlIGFuZCBhbW1lbmRlZCBwcm90b3R5cGVzLgoKRnJpIEp1biAxNCAxMzoxOTo0MCAxOTkxICBTdGV2ZSBDaGFtYmVybGFpbiAgKHN0ZXZlIGF0IGN5Z2ludC5jeWdudXMuY29tKQoKCSogLi4vaW5jbHVkZS9iZmQuaCAoc3RydWN0IGJmZF90YXJnZXQpOiBBZGRlZCBuZXcgZmllbGQKCSJhbGlnbl9wb3dlcl9taW4iIHdoaWNoIGNvbnRhaW5zIHRoZSBtaW5pbXVtIGFsaWdubWVudCBmb3IgYQoJc2VjdGlvbi4gVGhpcyBpcyB1c2VkIGluIGNvZmZfbmV3X3NlY3Rpb25faG9vay4gVGhlIGZpZWxkCglpbnNlcnRpb24gbmVjZXNzaXRhdGVzIGFuIHVwZGF0ZSBvZiBhbGwgYmFja2VuZHMuLgoKCSogYW91dGYxLmgganVtcCB0YWJsZSBmaWVsZCBpbnNlcnRlZAoKCSogYXJjaGl2ZS5jKHNuYXJmX2FyX2hkcikoYmZkX3NsdXJwX2NvZmZfYXJtYXApIGNhbiBub3cgcGFyc2UgZGd1eCBzdHlsZSBleHRlbmRlZAoJZmlsZW5hbWVzIHRvby4KCgkqIGJvdXQuYyhiX291dF9zcXVpcnRfb3V0X3JlbG9jcykgZml4IHRvIGFzc2VydGlvbiB0ZXN0cy4gSnVtcAoJdGFibGUgZmllbGQgaW5zZXJ0ZWQuCgoJKiBjb2ZmY29kZS5oKGp1c3QgYWJvdXQgZXZlcnl0aGluZykgTm93IHBhdGNoZXMgdXAgc3ltYm9sIHRhYmxlcwoJdXNpbmcgYSBkaWZmZXJlbnQgbWVjaGFuaXNtLiBUaGUgSW50ZWwgbWFqb3IgYnVnIGhhcyBiZWVuIGZpeGVkLAoJYW5kIHRoZSBsaW5rZXIgY2FuIHNlbGYgaG9zdCBvbiB0aGUgQXZpaW9uIGFuZCBiZSBkZWJ1Z2dlZCB3aXRoCglnZGIuCgoJKiBlY29mZi5jOiBuZXcgaW5jbHVkZSBhbmQganVtcCB0YWJsZSBwYXRjaCwgaTM4NmNvZmYuYzogbmV3CglpbmNsdWRlIGFuZCBqdW1wIHRhYmxlIHBhdGNoLCAgaWNvZmYuYzogbmV3IGluY2x1ZGUgYW5kIGp1bXAgdGFibGUKCXBhdGNoLCBpZWVlLmM6IGNhbiBub3cgcmVhZCBhcmNoaXZlcyBjb250YWluaW5nIGllZWUgbW9kdWxlcy4sCglsaWJjb2ZmLmg6IGFkZGVkIChjb21iaW5lZF9lbnRyeV90eXBlKSwgbGliaWVlZS5oOiB1cGVkIG1heAoJc2VjdGlvbnMgdG8gMjAsIG02OGtjb2ZmLmM6IG5ldyBpbmNsdWRlIGFuZCBqdW1wIHRhYmxlIHBhdGNoLAoJbTg4a2Jjcy5jOiBuZXcgaW5jbHVkZSBhbmQganVtcCB0YWJsZSBwYXRjaCwgb2FzeXMuYzogdmFyaW91cyBidWdzCglmaXhlZC4gb3BuY2xzLmM6IGFkZGVkIGJmZF9hbGxvY19ncm93IGFuZCBiZmRfYWxsb2NfZmluaXNoLgoJc3JlYy5jOiBqdW1wIHRhYmxlIHBhdGNoLiB0cmFkLWNvZGUuYyBmaXhlZCAjSUYgdHlwZW8KCkZyaSBKdW4gIDcgMTI6MzU6NDYgMTk5MSAgU2VhbiBGYWdhbiAgKHNlZiBhdCBjeWdpbnQuY3lnbnVzLmNvbSkKCiAJKiBjb2ZmY29kZS5oIChjb2ZmX3N3YXBfYXV4X2luKTogYWRkZWQgZWxzZSBjYXNlIHRvIGRlYWwgd2l0aAogCWZpbGVuYW1lcyBsZXNzIHRoYW4gOSBjaGFyYWN0ZXJzLgoKClRodSBKdW4gIDYgMTg6Mjc6MzggMTk5MSAgU3RldmUgQ2hhbWJlcmxhaW4gIChzdGV2ZSBhdCBjeWdpbnQuY3lnbnVzLmNvbSkKCgkqIG9hc3lzLmMgKG9hc3lzX2FyY2hpdmVfcCk6IGZpeGVkIHNvIGl0IHdvcmtzCgoJKiBzcmVjLmM6IG5vdyBhbGxvd3MgYW55IG51bWJlciBvZiBzZWN0aW9ucyB0byBiZSBjcmVhdGVkIGluIGEKCWZpbGUuIE91dHB1dHMgYWRkcmVzc2VzIG9mIHRoZSByaWdodCBsZW5ndGguCgpUaHUgTWF5IDMwIDE1OjMwOjEwIDE5OTEgIFN0ZXZlIENoYW1iZXJsYWluICAoc3RldmUgYXQgY3lnaW50LmN5Z251cy5jb20pCgoJKiBiZmQuYyAoYmZkX2NoZWNrX2Zvcm1hdCk6IEZpeGVkIHByb2JsZW0gd2hlcmUgd2hlbiBhIGRlZmF1bHRlZAoJdGFyZ2V0IGRpZG4ndCBtYXRjaCwgdGhlIGZvcm1hdCBnb3Qgc2V0IHRvIHRoZSBhdHRlbXB0ZWQgbWF0Y2gsCglicmVha2luZyBhIGZ1dHVyZSB0ZXN0LgoKICAgICAgICAqLi4vaW5jbHVkZS9pMzg2Y29mZi5oIDogZml4ZWQgdHlwbyBpbiB0eXBlIGZpZWxkIHdpdGggc2l6ZQoKCSogaTM4NmNvZmYuYyBpY29mZi5jIG04OGstYmNzLmMgZWNvZmYuYyAuLi9pbmNsdWRlL2JmZC5oIDogQWRkZWQKCXN1cHBvcnQgaW4gdGhlIGp1bXAgdGFibGUgZm9yIHRoZSBzd2FwcGluZyByb3V0aW5lcyBleHBvcnRlZCB0bwoJZ2RiLiBOb3cgZ2RiIHdvcmtzIHdpdGggdGhlIDM4Ni4KClR1ZSBNYXkgMjggMTc6MjE6NDMgMTk5MSAgSm9obiBHaWxtb3JlICAoZ251IGF0IGN5Z2ludC5jeWdudXMuY29tKQoKCSogTWVyZ2UgaW4gY2hhbmdlcyBmcm9tIGdkYi0zLjk1IHJlbGVhc2UuCglNYWtlZmlsZS5pbjogIEFsbG93IGhtYWtlIGFuZCB0bWFrZSBmaWxlcyB0byBhZGQgT0ZJTEVTLgoJYW91dGYxLmg6CgliZmQuYzogIHN1cHBvcnQgc3BlY2lmaWMgdGFyZ2V0cyBhcyB3ZWxsIGFzIHNlYXJjaGluZy4gIFdoZW4KCXNlYXJjaGluZywgdGFrZSBkZWZhdWx0IHRhcmdldCBpbiBwcmVmZXJlbmNlIHRvIG90aGVycy4KCWJmZC5kb2M6ICB0eXBvcwoJaWVlZS5jLCBvYXN5cy5jOiAgQXZvaWQgdXNpbmcgdGhlICJ0ZGF0YSIgbWFjcm9zIGxlZnQgb2YgYXNzaWdubWVudC4KCWxpYmEub3V0Lmg6ICBEb24ndCBoYXJkLWNvZGUgZmlsZSBvZmZzZXRzOyB1c2UgTl8gbWFjcm9zIGZvciB0aGVtLgoJbGliYmZkLmg6ICBTdXBwb3J0IHNwZWNpZmljIHRhcmdldHMgYXMgd2VsbCBhcyBzZWFyY2hpbmcuCglvcG5jbHMuYzogIFN1cHBvcnQgc3BlY2lmaWMgdGFyZ2V0cyBhcyB3ZWxsIGFzIHNlYXJjaGluZy4KCXRhcmdldHMuYzogIFNlYXJjaCBpcyBzaG9ydC1jaXJjdWl0ZWQgaWYgZGVmYXVsdCB0YXJnZXQgbWF0Y2hlcy4KCWxpYm9hc3lzLmMsIGxpYmllZWUuYzogIFVuZG8gYm90aG5lciBjaGFuZ2VzIHRoYXQgbWFrZSBtYWNyb3MKCXdvcmsgdG8gdGhlIGxlZnQgb2YgYXNzaWdubWVudCwgYnV0IHdoaWNoIGRlcGVuZCBvbiB0aGUKCXJlcHJlc2VudGF0aW9ucyBvZiBkaWZmZXJlbnQgcG9pbnRlciB0eXBlcyBiZWluZyB0aGUgc2FtZS4KCkZyaSBNYXkgMjQgMTg6NTY6NTIgMTk5MSAgU3RldmUgQ2hhbWJlcmxhaW4gIChzdGV2ZSBhdCBjeWdpbnQuY3lnbnVzLmNvbSkKCgkqIGkzODZjb2ZmLmM6IGNyZWF0ZWQuCgkqIGNvZmZjb2RlLmg6IGFkZGVkIHN1cHBvcnQgZm9yIDM4Ni4KCSogTWFrZWZpbGUuaW46IGFkZGVkIHN1cHBvcnQgZm9yIDM4Ni4KCSogLi4vaW5jbHVkZS9pMzg2Y29mZi5oOiBjcmVhdGVkCgpXZWQgTWF5IDIyIDA3OjI2OjM4IDE5OTEgIFN0ZXZlIENoYW1iZXJsYWluICAoc3RldmUgYXQgY3lnaW50LmN5Z251cy5jb20pCgoJKiBjb2ZmY29kZS5oOiByZW1vdmVkIGFsbCBwdXRfeF88c2l6ZXM+CgkqIGxpYmJmZC5jOiBDaGFuZ2VkICNpZmRlZiBfX0dOVUNfXyB0byAjaWZkZWYgSE9TVF82NF9CSVQsIEFkZGVkCglERUZVTlMKCgpUdWUgTWF5IDIxIDA4OjU4OjU4IDE5OTEgIFN0ZXZlIENoYW1iZXJsYWluICAoc3RldmUgYXQgY3lnaW50LmN5Z251cy5jb20pCgkoYm90aG5lcikKCSogb3BuY2xzLmM6IENoYW5nZWQgb2JzdGFja19jaHVua19hbGxvYyB1c2UgeG1hbGxvYwoKTW9uIE1heSAyMCAxNzoxMjoxNyAxOTkxICBTdGV2ZSBDaGFtYmVybGFpbiAgKHN0ZXZlIGF0IGN5Z2ludC5jeWdudXMuY29tKQoKCSogZXZlcnl0aGluZzogUmVtb3ZlZCBzeXNkZXAuaCBmcm9tIGJmZC5oIGFuZCBwdXQgYmFjayBpbnRvIGZpbGVzCglmcm9tIHdoaWNoIGl0IHdhcyBzcGxpdCBvdXQuIE5vdyA2NCBiaXQgdmVyc2lvbiBpcyBidWlsdCB3aXRoIGEKCS1ESE9TVF82NF9CSVQ9ImxvbmcgbG9uZyIgb24gdGhlIGNvbXBpbGUgbGluZS4KCkZyaSBNYXkgMTcgMTk6MzU6MjYgMTk5MSAgU3RldmUgQ2hhbWJlcmxhaW4gIChzdGV2ZSBhdCBjeWdpbnQuY3lnbnVzLmNvbSkKCglDaGFuZ2VkIGFsbCB0aGUgW2dldHxwdXRdW25hbWVdIHJvdXRpbmVzIHRvIHVzZSAgW2dldHxwdXRdX1tzaXplCglpbiBieXRlc10uCgoJUHV0IGluIHN1cHBvcnQgZm9yIDY0IGJpdCB3b3JrLiBOb3cgdHdvIHZlcnNpb25zIG9mIGJmZCBtYXkgYmUKCWdlbmVyYXRlZCwgYWNjb3JkaW5nIHRvIHRoZSBzdGF0ZSBvZiBUQVJHRVRfNjRfQklULCBvbmUgd2hpY2ggaXMKCTMyIGJpdCBvbmx5LCBhbmQgb25lIHdoaWNoIGlzIDY0LzMyIGJpdHMuCglDcmVhdGVkIG5ldyBiYWNrIGVuZCAnZGVtbzY0JyB0byB0ZXN0IDY0IGJpdCBmdW5jdGlvbmFsaXR5LgoKCVJlbmFtZWQgc29tZSBmaWxlcyB0byB3b3JrIG9uIERPUy4KCgkqIGFyY2hpdmUuYzogbGludCAqIGJmZC5jOiBwcm90b3R5cGVzIGFuZCBsaW50LiAqIGVjb2ZmLmM6IGFkZGVkCgk2NGJpdCB0cmFuc2ZlciAJKiBpY29mZi5jOiBhZGRlZCA2NGJpdCB0cmFuc2ZlciAqIGllZWUuYzogbmFtZQoJY2hhZ2UsIDY0IGJpdCB0cmFuc2Zlci4gKiBsaWJhLm91dC5oOiBTcGxpdCBvdXQgY29tbW9uIGNvZGUgZnJvbQoJc3Vub3MgYW5kIG5ld3NvcyBpbnRvIGxpYmEub3V0LiBOYW1lIGNoYW5nZXMgYW5kIHByb3RvdHlwZSBtb2RzLiAqCglsaWJiZmQuYzogbGludCBhbmQgcHJvdG90eXBlcywgZXh0cmEgNjRiaXQgc3dhcHMuICogbGliYmZkLmg6Cglwcm90b3R5cGVzIGZvciBuZXcgZnVuY3Rpb25zLiAqIGxpYmNvZmYuaDogbGludCAqIGxpYmllZWUuaDogbWFrZQoJd29yayBvbiBET1MgKiBsaWJvYXN5cy5oOiBtYWtlIHdvcmsgb24gRE9TICogbTg4ay1iY3MuYzogTmFtZQoJY2hhbmdlIGFuZCA2NGJpdCBzdHVmZi4qIG5ld3NvczMuYzogY29tbW9uIGNvZGUgcmVtb3ZlZCwgbmV3IGp1bXAKCXRhYmxlLiAqIG9hc3lzLmM6IE5hbWUgY2hhbmdlICogb3BuY2xzLmM6IFBvcnRhYmlsaXR5IGZpeGVzICoKCXNyZWMuYzogTmFtZSBjaGFuZ2VzICogc3Vub3MuYzogUmVtb3ZlZCBjb21vbiBjb2RlLiAqIHRhcmdldHMuYzoKCUFkZGVkIGRlbW8gKiBhb3V0MzIsIGFvdXQ2NC5jIGluY2x1ZGUgIGFvdXR4LmggKiBib3V0LmM6IHVzZWQgdG8KCWJlIGNhbGxlZCBiLm91dC5jICogY29mZmNvZGUuaDogdXNlZCB0byBiZSBjYWxsZWQgY29mZi1jb2RlLmgsIG5vdwoJNjRiaXQgaXplZC4gKiBkZW1vNjQuYzogNjQgYml0IGEub3V0IGJhY2sgZW5kCgpUaHUgTWF5IDE2IDE2OjAyOjA3IDE5OTEgIFN0ZXZlIENoYW1iZXJsYWluICAoc3RldmUgYXQgY3lnaW50LmN5Z251cy5jb20pCglmcm9tIGJvdGhuZXIKIAkqIGxpYmllZWUuaDogTWFrZSBpZWVlX2RhdGEgYW5kIGllZWVfYXJfZGF0YSBtYWNyb3MgdXNhYmxlCglvbiBMSFMgb2YgYXNzaWdubWVudCwgZXZlbiB3aGVuIHVzaW5nIG9sZCBjb21waWxlcnMuCgkqIGxpYm9hc3lzLmg6IERpdHRvIGZvciBvYXN5c19kYXRhIGFuZCBvYXN5c19hcl9kYXRhLgoJKiBtNjhrY29mZi5jOiBBZGQgZW51bS10by1pbnQgY2FzdHMgdG8gYWNjb21vZGF0ZSBvbGQgY29tcGlsZXJzLgoJKiBuZXdzb3MzLmM6IEZpeCBkZWZpbml0aW9ucyBvZiBTRUdNRU5UX1NJWkUgYW5kIFRFWFRfU1RBUlRfQUREUi4KCSogb3BuY2xzLmM6IERlZmluZSBTX0lYVVNSLCBTX0lYR1JQLCBTX0lYT1RIIGlmIHVuZGVmaW5lZC4KCSogdGFyZ2V0cy5jOiBBZGQgZGVjbGFyYXRpb24gb2YgbmV3c29zM192ZWMuCgpNb24gTWF5IDEzIDEwOjAzOjI5IDE5OTEgIFN0ZXZlIENoYW1iZXJsYWluICAoc3RldmUgYXQgY3lnaW50LmN5Z251cy5jb20pCgoJKiBhb3V0LmM6IGZpeHhlZCBzb21lIG9mIHRoZSBwcm9ibGVtcyB3aXRoIGZpbGVwb3MgY2FsY3VsYXRpb24uCgkoc3dhcF9leHRfcmVsb2MpOiBmaXhlZCBwcm9ibGVtIHdpdGggY3JlYXRpb24gb2YgcmVsb2NzLgoJKGFvdXRfc2V0X3NlY3Rpb25fY29udGVudHMpOiBmaXhlZCBmaWxlcG9zIHByb2JsZW0KCgkqIGNvZmYtY29kZS5oOiAoc3dhcF9maWxlaGRyX2luLCBzd2FwX2ZpbGVoZHJfb3V0KSBhZGQuCgkoc3dhcF9maWxlaGRyKSBkZWxldGUuIENoYW5nZWQgYWxsIHRoZSB1c2FnZSBvZiBiZmRfaF9wdXRfeC4KCShzd2FwX2FvdXRoZHJfaW4sIHN3YXBfYW91dGhkcl9vdXQpIGFkZC4gKHN3YXBfYW91dGhkcikgZGVsZXRlLgoJKGNvZmZfcmVhbF9vYmplY3RfcCkgY2xlYW5lZCB1cCwgYWRkZWQgTUlQUy4gKGNvZmZfb2JqZWN0X3ApCgljbGVhbmVkIHVwLiAoY29mZl93cml0ZV9vYmplY3RfY29udGVudHMpIGNsZWFuZWQgdXAuCgoJKiBlY29mZi5jOiBUb3RhbGx5IGRpZmZlcmVudC4gTm93IHN1cHBvcnRzIGVjb2ZmIGZ1bGx5LgoKCSogaWNvZmYuYzogZml4ZWQgcHJvYmxlbXMgaW4gcmVsb2NhdGlvbiBjYWxsb3V0LgoKCSogbGliY29mZi5oOiAoc3RydWN0IGljb2ZkYXRhKSByZW1vdmVkIGhkciBzdHJ1Y3R1cmUgZnJvbSB0ZGF0YS4KCgkqIG02OGtjb2ZmLmM6IHVwZGF0ZWQgdGFyZ2V0IHZlY3Rvci4KCgkqIHN1bm9zLmM6IChjaG9vc2VfcmVsb2Nfc2l6ZSkgYWRkZWQ6IChzdW5vczRfY2FsbGJhY2spIGNhbGxzCgljaG9vc2VfcmVsb2Nfc2l6ZS4gKHN1bm9zNF93cml0ZV9vYmplY3RfY29udGVudHMpIG5vdyBjYWxscwoJY2hvb3NlX3JlbG9jX3NpemUgc28gb3V0cHV0cyByZWxvY3MgY29ycmVjdGx5LCBhbHNvIGNhbGN1bGF0ZXMgdGhlCglzaXplIG9mIHRoZSBzZWN0aW9ucyBjb3JyZWN0bHkuCgoKCkZyaSBNYXkgMTAgMTY6NTg6NTMgMTk5MSAgSm9obiBHaWxtb3JlICAoZ251IGF0IGN5Z2ludC5jeWdudXMuY29tKQoKCU1lcmdlIFBlciBCb3RobmVyJ3MgY2hhbmdlcyB0byBtb2R1bGFyaXplIEJGRCBhLm91dCBhIGJpdC4KCgkqIGxpYmJmZC5oLCBsaWJiZmQuYyAoYmZkX2dlbmVyaWNfZ2V0X3NlY3Rpb25fY29udGVudHMpOiAgQWRkLgoJKiBpZWVlLmM6ICBDYXN0IGVudW1zIHRvIGludCBiZWZvcmUgY29tcGFyaW5nIHRoZW0sIGZvciBicmFpbi0KCWRlYWQgY29tcGlsZXJzLgoJKiBjb2ZmLWNvZGUuaDogIFJlbW92ZSBjb2ZmX2dldF9zZWN0aW9uX2NvbnRlbnRzLCBhbmQgdXNlIHRoZQoJZ2VuZXJpYyBvbmUgaW5zdGVhZC4KCgkqIGFvdXQuYzogIERlcml2ZSBuZXcgbW9kdWxlIGZyb20gc3Vub3MuYywgY29udGFpbmluZyBnZW5lcmljCglzdXBwb3J0IGNvZGUgZm9yIGFsbCBraW5kcyBvZiBhLm91dCBmaWxlcy4KCgkqIHN1bm9zLmM6IFJlbW92ZSBhbGwgY29kZSB0aGF0IGdvZXMgaW4gYW91dC5jLiAgU3BsaXQgb3V0CgltYWNoaW5lIGRlcGVuZGVudCBmb2xsb3d1cCBpbiBzdW5vczRfb2JqZWN0X3AgaW50bwoJc3Vub3M0X2NhbGxiYWNrLiAgVXNlIEpVTVBfVEFCTEUoYW91dCkgZm9yIHRoZSB0cmFuc3ZlciB2ZWN0b3IsCglhbmQgcmVkZWZpbmUgb25seSB0aGUgbmFtZXMgd2UgQ0hBTkdFLCBub3QgYWxsIHRoZSBuYW1lcy4gIERyb3AKCXRoZSBsaXR0bGUtZW5kaWFuIHZlY3RvciwgYW5kIHJlbmFtZSB0aGUgdmVjdG9yIGFzIHN1bm9zNCByYXRoZXIKCXRoYW4gZ2VuZXJpYy4KCgkqIGIub3V0LmM6ICBVc2UgYW91dC5jIHJvdXRpbmVzIGZvciBtb3N0IG9mIHRoZSB3b3JrLiAgU2xpZ2h0CgljaGFuZ2VzIGZvciB0aGUgbmV3IHJlZ2ltZS4gIFJlbW92ZSBjbG9zZV9hbmRfY2xlYW51cCBhbmQKCWdldF9zZWN0aW9uX2NvbnRlbnRzIGluIGZhdm9yIG9mIGdlbmVyaWNzLiAgTmV3IHRyYW5zZmVyIHZlY3RvcgoJcmVnaW1lLgoKCSogbmV3c29zMy5jOiAgTmV3IHN1cHBvcnQgZm9yIFNvbnkgTkVXUywgYW5vdGhlciBhLm91dCBmb3JtYXQuCgoJKiBlY29mZi5jOiAgUmVtb3ZlIGNsb3NlX2FuZF9jbGVhbnVwLiAgTmV3IHR2ZWMgcmVnaW1lLgoJKiBpY29mZi5jLCBtODhrLWJjcy5jOiAgQWRkIHdyaXRlX2NvbnRlbnRzIHRvIHR2ZWMuCgkqIGllZWUuYywgb2FzeXMuYzogIFJlbW92ZSBjbG9zZV9hbmRfY2xlYW51cCwgYWRkIHdyaXRlX2NvbnRlbnRzCgl0byB0dmVjLgoJKiBvcG5jbHMuYyAoYmZkX2Nsb3NlKTogIENhbGwgZm9ybWF0LWRlcGVuZGVudCB3cml0ZV9jb250ZW50cwoJcm91dGluZSwgaWYgd3JpdGluZywgYmVmb3JlIGNhbGxpbmcgdGFyZ2V0LWRlcGVuZGVudAoJY2xvc2VfYW5kX2NsZWFudXAgcm91dGluZSAod2hpY2ggaXMgbm93IGFsd2F5cyBnZW5lcmljLCBJIHRoaW5rKS4KCSogc3JlYy5jOiAgVXNlIGJmZF9hbGxvYyBpbnN0ZWFkIG9mIG1hbGxvYy4gIFJlbW92ZQoJY2xvc2VfYW5kX2NsZWFudXAgYW5kIG1vdmUgY29kZSBmcm9tIGl0IHRvCglzcmVjX3dyaXRlX29iamVjdF9jb250ZW50cy4gIEFkZCB3cml0ZV9jb250ZW50cyB0byB0dmVjLgoJKiB0YXJnZXRzLmM6ICBSZW1vdmUgYS5vdXQgbGl0dGxlIHZlY3RvciwgcmVwbGFjZSBhLm91dCBiaWcKCXZlY3RvciB3aXRoIFN1bk9TIHZlY3Rvci4gIEZJWE1FOiAgTmVlZCBWYXggc3VwcG9ydCBhZ2FpbiBub3cuCgoJKiBsaWJiZmQuaDogIEFkZCB3cml0ZV9jb250ZW50cyBmb3JtYXQtZGVwZW5kZW50LXZlY3RvciB0byB0aGUKCWJmZF90YXJnZXQgdmVjdG9yLiAgU3VwcGx5IGEgZ2VuZXJpYyBjbG9zZV9hbmRfY2xlYW51cCByb3V0aW5lLgoJKiBsaWJhLm91dC5oOiAgSGFuZGxlIHRoZSBuZXcgYW91dC5jIHNwbGl0LiAgQWRkIHByb3RvdHlwZXMgZm9yCglhbGwgcm91dGluZXMgZGVmaW5lZCBpbiBhb3V0LmMuICBSZW5hbWUgInN1bm9zIiB0aGluZ3MgdG8gImFvdXQiCgl0aGluZ3MuICBBZGQgYSBmZXcgZmllbGRzIHdoZXJlIG5lZWRlZCBmb3IgdmFyaW91cyBmb3JtYXRzLgoJKiBNYWtlZmlsZS5pbjogIEFkZCBhb3V0LmMgYW5kIG5ld3NvczMuYy4KCgkqIGFyY2hpdmUuYywgaWVlZS5jLCBvYXN5cy5jOiAgTGludC4KCkZyaSBNYXkgMTAgMTI6MzQ6NDggMTk5MSAgU3RldmUgQ2hhbWJlcmxhaW4gIChzdGV2ZSBhdCBjeWdpbnQuY3lnbnVzLmNvbSkKCgkqIC4uL2luY2x1ZGUvYmZkLmgKCWNoYW5nZWQgZm9yd2FyZCBkZWNsYXJhdGlvbiBzdHJ1Y3Qgc3RhdDsgdG8gcmVkdWNlIHdhcm5pbmdzLiBDaGFuZ2VkCgljb21tZW50IG9uIGJmZF9oXzx4Pl94LgoKCSogLi4vaW5jbHVkZS9tNjhrY29mZi5oLCAuLi9pbmNsdWRlL2ludGVsLWNvZmYuaCwKCS4uL2luY2x1ZGUvbTg4ay1iY3MuaAoJTm93IHRoZXJlIGFyZSB0d28gaW5jYXJuYXRpb25zIG9mIHJlbG9jcywgbGluZW5vcyBhbmQgc3ltZW50cy4gT25lIGZvcgoJaW50ZXJuYWwgZGlnZXN0aW9uLCBhbmQgb25lIGZ1bGwgb2YgY2hhciBhcnJheXMgZm9yIEkvTy4gVGhlIG9yaWdpbmFsCgluYW1lcyBoYXZlIGdvbmUgdG8gZGV0ZWN0IGVycm9ycy4KCgkqIE1ha2VmaWxlLmluLCBtNjhrY29mZi5jLCB0YXJnZXRzLmMKCVRlc3QgbmV3IHN0cnVjdHVyZSBjb2RlIHdpdGggYSA2OGsgY29mZiBpbXBsZW1lbnRhaW9uCgoJKiBjb2ZmLWNvZGUuaCwgaWNvZmYuYywgY29mZnN3YXAuYywgbGliY29mZi5oCglGaXhlZCBhbGwgdGhlIHBsYWNlcyB3aGVyZSB0aGVyZSB3ZXJlIHByb2JsZW1zIHdpdGggdGhlIHNpemUgYW5kCglhbGlnbm1lbnRzIG9mIHN0cnVjdHVyZXMgb24gZGlzayBhbmQgc3RydWN0dXJlcyBpbiBtZW1vcnkuICNpZmVkIG91dAoJYWxsIHRoZSBjb2RlIGluIGNvZmZzd2FwLmMsIHNpbmNlIGl0IHNob3VsZCBiZSBkb25lIHVzaW5nIHRoZSB0YXJnZXQKCXN3YXAgcm91dGluZXMgbm93LgoKVGh1IE1heSAgOSAxMTowMDo0NSAxOTkxICBTdGV2ZSBDaGFtYmVybGFpbiAgKHN0ZXZlIGF0IGN5Z2ludC5jeWdudXMuY29tKQoKCSogaWVlZS5jIChkb19vbmUsIGllZWVfc2x1cnBfc2VjdGlvbl9kYXRhKTogbm93IHN1cHBvcnRzIHRoZSBsb2FkCgltdWx0aXBsZSByZWxvYyBjb21tYW5kLgoKCSogc3Vub3MuYyAoc3Vub3M0X3NldF9zZWN0aW9uX2NvbnRlbnRzKTogTWFkZSBpdCBzbyB0aGF0IHNlY3Rpb25zCglhcmUgYWx3YXlzIHBhZGRlZCB0byB0aGVpciBhbGlnbm1lbnQgc2l6ZS4KClNhdCBNYXkgIDQgMTU6NDk6NDMgMTk5MSAgSm9obiBHaWxtb3JlICAoZ251IGF0IGN5Z2ludC5jeWdudXMuY29tKQoKCSogYXJjaGl2ZS5jLCBiZmQuYywgY29mZi1jb2RlLmgsIG9wbmNscy5jLCBzdW5vcy5jLCB0cmFkLWNvcmUuYzoKCUNsZWFuIHVwIHR5cGVzIGFuZCBzdWNoIChzYWJlciBDIHByb2JsZW1zKS4KCSogZWNvZmYuYzogIENsZWFuIHVwIHR5cGVzIGFuZCBzdWNoLiAgUmVtb3ZlIHJvdXRpbmVzIHRoYXQgYXJlCglub3QgdXNlZC4gIEZpeCB1cCByZWFkaW5nIGFuZCBzd2FwcGluZyBvZiBzaG9ydHMgZnJvbSBmaWxlcy4KCiAgIE5vdGVzIG9uIGJmZC0wLjUuMi1wYXRjaDFhLCBmcm9tIFBlciBCb3RobmVyOgoKCSogYS5vdXQudmF4LmM6IFJlbW92ZSB0d28gYm9ndXMgInN0YXRpYyIgZnJvbSBwcm90b3R5cGVzLgoKCSogZWNvZmYuYzogR290IHJpZCBvZiBsb3RzIG9mIG5vbi13b3JraW5nIGp1bmsgKHRoYXQgaGFkCgliZWVuIGNvcGllZCBkaXJlY3RseSBmcm9tIGNvZmYtY29kZS5oKS4KCVVwZGF0ZWQgdG8gYmUgY29uc2lzdGVudCB3aXRoIHVwZGF0ZXMgdG8gaWNvZmYuYyBhbmQgY29mZi1jb2RlLmguCgoJKiBsaWJiZmQuaDogQWRkZWQgZGVmaW5pdGlvbnMgZm9yIFNfSVhVU1IsIFNfSVhHUlAsIGFuZCBTX0lYT1RICglpZiB0aGV5J3JlIG1pc3NpbmcgKGFzIHRoZXkgYXJlIGluIChCRFMtNC4zLWJhc2VkKSBOZXdzT1MtMykuCgoJKiBzdW5vcy5jIChuX3R4dG9mZik6IChSZS0pQWRkIHN1cHBvcnQgZm9yIHNvbnkuIFRoaXMgaXMgYSBrbHVkZ2UsCglidXQgdW50aWwgdGhlIHRhcmdldF92ZWN0b3IgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQsCglpdCdzIGFzIGdvb2QgYXMgYW55LiBOb3RlIHRoYXQgdGhlIHRleHQgb2Zmc2V0IGlzIHRoZSBvbmx5CglkaWZmZXJlbmNlIGJldHdlZW4gTmV3c09TIGFuZCBTdW5PcyAoaW5jbHVkaW5nIG1hZ2ljIG51bWJlcnMpLgoJKE1vc3Qgb2YgdGhlIHN1bm9zXyogcm91dGluZXMgc2hvdWxkIHRvIHJlbmFtZWQgYnNkXyoKCWFuZCBtb3ZlIHRvIGEgYnNkLmMgZmlsZS4gVGhlbiAoYW5kIHdoZW4gdGhlIHRhcmdldF92ZWN0b3IKCWlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkKSBpdCBtaWdodCBtYWtlIHNlbnNlIHRvIGNyZWF0ZQoJYSBzZXBhcmF0ZSBTb255IHRhcmdldC4pCgoJKiBzeXNkZXAuaDogRG9uJ3QgZGVjbGFyZSBmcmVhZCBhbmQgZndyaXRlLiBDYXVzZXMgdHJvdWJsZQoJb24gc29tZSBzeXN0ZW1zLCBhbmQgZG9lc24ndCBoZWxwIG9uIG90aGVycy4KCVNpbWlsYXJseSwgb25seSBkZWZpbmUgWF9PSyBpZiBub3QgYWxyZWFkeSBkZWZpbmVkLgoKCSogdHJhZC1jb3JlLmM6IERvbid0IGluY2x1ZGUgc3lzL3N0YXQuaCAtIGF0IGxlYXN0CglvbiBOZXdzT1MgMywgaXQgaGFzIGFscmVhZHkgYmVlbiBpbmNsdWRlZC4KClR1ZSBNYXIgIDUgMDE6NDc6NTcgMTk5MSAgSm9obiBHaWxtb3JlICAoZ251IGF0IGN5Z2ludC5jeWdudXMuY29tKQoKCSogY29mZi1jb2RlLmggKGJmZF9jb2ZmX3N3YXBfc3ltLCBiZmRfY29mZl9zd2FwX2F1eCwKCWJmZF9jb2ZmX3N3YXBfbGluZW5vKTogIEV4cG9ydCB0aGUgcm91dGluZXMgdGhhdCBieXRlLXN3YXAgQ09GRgoJc3ltYm9sIHRhYmxlcyBpZiBuZWNlc3Nhcnkgd2hlbiByZWFkaW5nIHRoZW0gaW4sIHNvIGdkYiBjYW4gdXNlCgl0aGVtLiAgQWRkICJiZmRfY29mZl8iIHRvIHRoZSBuYW1lcyBzbyB0aGV5IHdvbid0IGNvbmZsaWN0IHdpdGgKCW5hbWVzIGluIGNhbGxpbmcgcHJvZ3JhbXMuICBGSVhNRS1zb29uOiAgaWYgY29mZi1jb2RlLmggaXMKCWluY2x1ZGVkIGluIHR3byBCRkQgbW9kdWxlcywgdGhpcyB3aWxsIGNhdXNlIGR1cGxpY2F0ZQoJZGVmaW5pdGlvbnM7IHRoZSByb3V0aW5lcyBzaG91bGQgYmUgZXhwb3J0ZWQgdG8gYSBzZXBhcmF0ZSwKCWNvbW1vbiwgbW9kdWxlIChwcm9iYWJseSBhbG9uZyB3aXRoIGEgbWVzcyBvZiBvdGhlciBvbmVzKS4KClNhdCBNYXIgIDIgMTI6MTE6MjYgMTk5MSAgSm9obiBHaWxtb3JlICAoZ251IGF0IGN5Z2ludC5jeWdudXMuY29tKQoKCUltcHJvdmUgbW9kdGltZSBzdXBwb3J0LgoKCSogYmZkLmg6ICBBZGQgYm9vbGVhbiBtdGltZV9zZXQsIGFuZCBkZWNsYXJlIGJmZF9nZXRfbXRpbWUuCglSZW1vdmUgI2RlZmluZSBmb3IgYmZkX2dldF9tdGltZS4gIFJlbW92ZSBncmF0dWl0b3VzIGNvbW1lbnQuCgkqIGJmZC5jIChiZmRfZ2V0X210aW1lKTogIE5ldyBmbiwgY2FjaGVzIG10aW1lLCBnZXRzIGlmIG5vdCBjYWNoZWQuCglCVUc6ICBhcmNoaXZlIG1lbWJlcnMgc3RpbGwgZG8gbm90IGdldCBjb3JyZWN0IG1vZCB0aW1lcy4KCglJbXByb3ZlIGZsb2F0aW5nIHBvaW50IHN1cHBvcnQgZm9yIGNvcmUgZmlsZXMuCgoJKiBzdW5vcy5jIChzdHJ1Y3QgY29yZSk6ICBDaGFuZ2Ugdm9pZCAqZnBhX2R1bW15IHRvIGRvdWJsZSBmcF9zdHVmZi4KCShzdW5vczRfY29yZV9maWxlX3ApOiAgQ3JlYXRlIGEgc2Vjb25kIHJlZ2lzdGVycyBzZWN0aW9uIGluIHRoZQoJY29yZSBmaWxlLCBjYWxsZWQgIi5yZWcyIiwgZm9yIHRoZSBmbG9hdCByZWdpc3RlcnMuCgpUaHUgRmViIDE0IDE1OjQ5OjA2IDE5OTEgIEd1bWJ5IFZpbmF5YWsgV2FsbGFjZSAgKGd1bWJ5IGF0IGN5Z2ludC5jeWdudXMuY29tKQoKCSogbWFueSBjaGFuZ2VzIHRvIGltcHJvdmUgYXJjaGl2ZSBoYW5kbGluZzsgZm91bmQgYSBsb2dpYyBmbGF3IGluCgkgIGJmZF9jaGVja19mb3JtYXQgd2hpY2ggb25seSBqdXN0IGhhcHBlbmVkIHRvIHdvcmsgYnkgY29vbmNpZGVuY2UuCgpUaHUgRmViIDE0IDA3OjUzOjE2IDE5OTEgIFN0ZXZlIENoYW1iZXJsYWluICAoc3RldmUgYXQgY3lnaW50LmN5Z251cy5jb20pCgoJKiBiZmQuYyAoYmZkX3BlcmZvcm1fcmVsb2NhdGlvbik6IGZpeGVkIHRvIHVzZSBvdXRwdXRfb2Zmc2V0cwoJY29ycmVjdGx5LgoKCSogYmZkLmg6IGNoYW5nZWQgdHlwZSBvZiB1ZGF0YSBpbiBhc3ltYm9sIHRvIHZvaWQgKiwgbGlrZSBpdAoJc2hvdWxkIGJlLiBBZGRlZCBiZmRfcmVsb2NfZGFuZ2Vyb3VzIGVudW0gbWVtYmVyLgoKCSogY29mZi1jb2RlLmg6IEZpeGVkIGl0IHNvIHRoYXQgaW50ZXJuYWxseSBnZW5lcmF0ZWQgc3ltYm9scyBnZXQKCXRoZWlyIHZhbHVlcyByZWxvY2F0ZWQgY29ycmVjdGx5IGluIGFsbCBjYXNlcy4gUmVtb3ZlZCBjYWxscyB0bwoJeG1hbGxvYy4KCgkqIGljb2ZmLmM6IE5vdCB1bmRlcnN0YW5kaW5nIHRoZSBkZXN0aW5hdGlvbiBzeW1ib2wgb2YgYSByZWxvYyBpcwoJbm90IGEgZmFpbHVyZSBhbnkgbW9yZSwganVzdCAnZGFuZ2Vyb3VzJy4gVGhpcyBhbGxvd3MgbGlua2luZyBvZgoJYi5vdXQgYW5kIGNvZmYgaW1hZ2VzLgoKCSogc3Vub3MuYzogQ2xlYW5lZCB1cCB0aGUgd2F5IHRoYXQgWk1BR0lDIHNlY3Rpb24gc2l6ZXMgYXJlCgljYWxjdWxhdGVkLgoKClR1ZSBGZWIgMTIgMTM6MjU6NDYgMTk5MSAgU3RldmUgQ2hhbWJlcmxhaW4gIChzdGV2ZSBhdCBjeWdpbnQuY3lnbnVzLmNvbSkKCgkqIHN1bm9zLmMgKHRyYW5zbGF0ZV90b19uYXRpdmVfc3ltX2ZsYWdzKTogZml4ZWQKCXN5bV9wb2ludGVyLT5uX3ZhbHVlIHNvIHRoYXQgc3ltYm9scyBvbiB0aGUgd2F5IG91dCBnZXQgdGhlaXIKCXNlY3Rpb24gcmVsYXRpdmUgdmFsdWVzIGNhbGN1bGF0ZWQgY29ycmVjdGx5LgoKCSogY29mZi1jb2RlLmggKG1hbmdsZV9zeW1ib2xzKTogZml4ZWQgcHJvYmxlbSB3aGVyZSB0YWdzIHdlcmUgbm90CgliZWluZyByZWxvY2F0ZWQgZm9yIHN0cnVjdHMsIGVudW1zLCB1bmlvbnMuIEFsc28gdmFyaW91cyBsaW50cy4KCk1vbiBGZWIgMTEgMTk6NTI6MjYgMTk5MSAgR3VtYnkgVmluYXlhayBXYWxsYWNlICAoZ3VtYnkgYXQgY3lnaW50LmN5Z251cy5jb20pCgoJKiBhcmNoaXZlLmMgKGdldF9lbHRfYXRfZmlsZXBvcyk6IHN5c3RlbV9jYWxsX2Vycm9yIHJldHVybmVkCgkgIGluY29ycmVjdGx5LgoKU3VuIEZlYiAxMCAyMzoxODo0MCAxOTkxICBHdW1ieSBWaW5heWFrIFdhbGxhY2UgIChndW1ieSBhdCBjeWdpbnQuY3lnbnVzLmNvbSkKCgkqIFJlc29sdmUgdGhlIHVzZSBvZiBub19lcnJvciBhbmQgc3lzdGVtX2NhbGxfZXJyb3IuCgkgIFRoZSBiZmQgbGlicmFyeSBpdHNlbGYgbm93IHdpbGwgbmV2ZXIgc2V0IGJmZF9lcnJvciB0bwoJICBub19lcnJvci4KCgkgIFRoZSBjb2RlIHN0aWxsIG5lZWRzIHRvIGJlIGNvbWJlZCB0byBtYWtlIHN1cmUgYWxsIHRoZSBlcnJvcgoJICBjb2RlcyBhcmUgY29ycmVjdC4gIEkgc3VzcGVjdCB0aGV5IGFyZSBub3QgYWx3YXlzIHNldCBjb3JyZWN0bHkuCgoJKiBUaGUgbmFtZXMgb2YgYWxsIHRoZSBtZXNzYWdlcyBoYXZlIF8gcHJlcGVuZGVkIGJlY2F1c2UgdGhlIHN1bgoJICBidW5kbGVkIGNvbXBpbGVyIGNhbid0IGRpc3Rpbmd1aXNoIGZyb20gYSBtYWNybyB3aGljaCB0YWtlcyBhbgoJICBhcmd1bWVudCBhbmQgdGhlIHNhbWUgaWRlbnRpZmllciBpbiBhIG5vbi1tYWNybyBjb250ZXh0LgoKCSogVGhlIHJlYXNvbiBmb3IgdGhlIGFib3ZlIGJlaW5nIHRoYXQgZW50cnkgcG9pbnRzIHdoaWNoIHVzZWQgdG8KCSAgYmUgdHJhbXBvbGluZSBmdW5jdGlvbnMgYXJlIG5vdyBqdXN0IG1hY3JvcyB3aGljaCBleHBhbmQgdG8gYQoJICBkaXJlY3QgY2FsbCB0aHJvdWdoIHRoZSBiZmQncyB4ZmVyIHZlY3Rvci4KCgkqICguLi9pbmNsdWRlL2ludGVsLWNvZmYuaCkgRl9BUjMyV1I6IGZpeCB0aGlzIGNvbnN0YW50LiAgV2h5CgkgIG11c3QgZ2FzIGhhdmUgaXRzIG93biB2ZXJzaW9uIG9mIGV2ZXJ5dGhpbmcgKHRoZSBnYXMgdmVyc2lvbgoJICBoYWQgdGhlIGNvcnJlY3QgdmFsdWUpCgpUdWUgRmViICA1IDExOjQ2OjUzIDE5OTEgIFN0ZXZlIENoYW1iZXJsYWluICAoc3RldmUgYXQgY3lnaW50LmN5Z251cy5jb20pCgoJKiBiLm91dC5jOiBBZGRlZCBwYXRjaGVzIHN1cHBsaWVkIGJ5IGNocmlzYkBtaXBvbjIuaW50ZWwuY29tIHRvCglwcm9wZXJseSBzdXBwb3J0IGk5NjAgYXJjaGl0ZWN0dXJlIGFuZCBvdXRwdXQgY29ycmVjdCByZWxvYyBzdHVmZi4KCgkqIGJmZC5oOiBhZGRlZCBwcm90b3R5cGUgZm9yIGJmZF9wcmludGFibGVfYXJjaF9tYWNoLCBhZGRlZAoJQkZEX0ZBSUwKCgkqIGNvZmYtY29kZS5oOiBBcHBsaWVkIHBhdGNoZXMgZnJvbSBjaHJpc2IgdG8gc3VwcG9ydCBpOTYwCglhcmNoaXRlY3R1cmUsIHplcm8gcmVsb2NzIGFuZCBzd2FwIHRoZW0gY29ycmVjbHkgYW5kIGNvbmRpdGlvbmFsbHkKCWNvbXBpbGVkIHRoZSB0aW1lc3RhbXAuCgoJKiBzdW5vcy5jOiBNYWRlIHRoZSBkZWZhdWx0IHNlY3Rpb24gYWxpZ25tZW50IDJeMyBzbyB0aGF0IGRvdWJsZXMKCWFyZSBkb25lIHByb3Blcmx5LiBGaXhlZCB0aGUgc2FtZSByZWxvYyBidWcgdGhhdCB3YXMgaW4gYi5vdXQuYwoKCSogc3lzZGVwLmg6IE5vdyBjb21waWxlcyBvbiBhIFBvc2l4IGJveAoKV2VkIEphbiAzMCAyMTozNjoyNiAxOTkxICBKb2huIEdpbG1vcmUgIChnbnUgYXQgY3lnaW50LmN5Z251cy5jb20pCgoJKiBpY29mZi5jOiAgRml4IGNvbW1lbnQgb24gYmlnLWVuZGlhbiB2ZXJzaW9uLgoJKiBjb2ZmLWNvZGUuaDogIE1ha2UgSEFTX1JFTE9DIHJlYWxseSB3b3JrIChpdCdzIGJhY2t3YXJkcyBmcm9tCglGX1JFTEZMRykuICBTZXQgRl9BUjMyV1IgaW4gb3V0cHV0IGZpbGVzIGlmIGxpdHRsZSBlbmRpYW4KCWFyY2hpdGVjdHVyZS4KClR1ZSBKYW4gMjkgMjA6NTY6MTAgUFNUIDE5OTEgc3RldmVAY3lnbnVzLmNvbQoKCSogYXJjaHVyZXMuYyBmaXhlZCA9Lz09IHR5cG8KCgkqIHN1bm9zLmMgYWRkZWQgYXJjaGl0ZWN0dXJlIHN0dWZmIGZvciBvdXRwdXQuIEZpeGVkCglidWcgd2hlcmUgZmlsZXMgd2hlcmUgdm1hKGRhdGEpICE9IHNpemUodGV4dCkKCXdlcmUgcHJvY2Vzc2VkIHdyb25nLgoKCSogY29mZi1jb2RlLmggYWRkZWQgYSBsaW50IGNhc3QKCgkqICguLi9pbmNsdWRlL2Eub3V0LnN1bjQuaCkgZml4ZWQgaXQgc28gem1hZ2ljCgl3b3JrZWQKCk1vbiBKYW4gMjggMTk6MTU6MjkgUFNUIDE5OTEgc3RldmVAY3lnbnVzLmNvbQoKCSogYXJjaGl2ZS5jIHJlbW92ZWQgbG9hZHMgb2YgaW5jbHVkZXMsIGFuZCBmaXhlZCBidWcgd2hlcmUgc3RyaW5nCgl0YWJsZSBkaWRuJ3QgaGF2ZSBhIG51bGwgYXQgdGhlIGVuZC4KCgkqIGJmZC5jIGZpeGVkIGluY2x1ZGVzLCBhZGRlZCBzeW1ib2xzIGFyZ3VtZW50IHRvCgljYW5vbmljYWxpemVfcmVsb2MgZW50cnkgcG9pbnQuCgoJKiBsaWJiZmQuYyBmaXhlZCBpbmNsdWRlcyBhbmQgYWRkZWQgc29tZSBsaW50IHBhdGNoZXMuCgoJKiB0YXJnZXRzLmMgYWRkZWQgYm90aCBzb3J0cyBvZiBpbnRlbCBjb2ZmLgoKCSogYi5vdXQuYyBmaXhlZCBpbmNsdWRlZCwgY2hhbmdlZCB3YXMgdGhlIGNhbm9uaWNhbAoJcmVsb2NzIHdlcmUgZG9uZS4KCgkqIGljb2ZmLmMgYWRkZWQgc3VwcG9ydCBmb3IgY2FsbGogYW5kIGJpZyBhbmQgbGl0dGxlCgllbmlkaWFuIHRhYmxlcy4KCgkqIG9wbmNscy5jIGFkZGVkIGNobW9kK3hpbmcgZm9yIGZpbGVzIHdpdGggRVhFQ19QIHNldC4KCgkqIHN1bm9zLmMgZml4ZWQgaW5jbHVkZXMuIENoYW5nZWQgZGVmYXVsdCBzZWN0aW9uCglhbGlnbmVtZW50IHRvIHdvcmRzLiBGaXhlZCByZWxvY2F0aW9uIHN0dWZmIHRvIHdvcmsgd2l0aAoJbmV3IHNjaGVtZQoKCSogYmZkLmggdmFyaW91cyBuZXcgdHlwZXMgYWRkZWQsIHByb3RvdHlwZSBmb3IgbmV3CglyZWxvYyBjYWxscywgY2hhbmdlZCBiZmQtPmlvc3RyZWFtIHRvIGEgdm9pZCAqCgl0byBpbmNsdWRpbmcgZmlsZXMgZG9uJ3QgbmVlZCBzdGRpby5oLgoKCSogbGliY29mZi5oIGFkZGVkIGNvbnZlcnNpb24gdGFibGUgdG8gdGllIHJlbG9jcyB0bwoJY2Fub25pY2FsIHN5bWJvbHMKCgkqIHN5c2RlcC5oIGNyZWF0ZWQKCgkqIGNvZmYtY29kZS5oIGZpeGVkIGluY2x1ZGVzLiBBZGRlZCBjb2RlIHRvIHN1cHBvcnQKCWJpZyBhbmQgbGl0dGxlIGVuZGlhbiBmb3JtYXRzLiBWYXJpb3VzIGxpbnRzLiBCZXR0ZXIKCXByb2Nlc3Npbmcgb2Ygc3ltYm9scy4gQ2hhbmdlZCByZWxvYyBzdHVmZiB0byBuZXcKCW9yZGVyCgoJKiBsaWJiZmQuaCBmaXhlZCBpbmNsdWRlcwoKCk1vbiBKYW4gMjEgMTE6NTM6NTEgUFNUIDE5OTEgc3RldmVAY3lnbnVzLmNvbQoKCSogYmZkLmg6IGNoYW5nZWQgbmFtZSBvZiBhbGlnbm1lbnQgZW50cnkgaW4gc2VjX3N0cnVjdCB0bwoJYWxpZ25tZW50X3Bvd2VyLCBiZWNhdXNlIG9mIGNvbmZsaWN0aW5nIHVzZXMgd2l0aGluIGJmZC4KCU5vdyBpdCBzaG91bGQgYmUgb2J2aW91cyB0aGF0IGl0J3MgYSAyKipuIGFsaWdubWVudAoJc3BlY2lmaWVyLiBSZW1vdmVkIHN0YXJ0X3BhZCwgZW5kX2FsaWdubWVudCwgYmxvY2ssIG1pbnNpemUsCglvdXRwdXRfZmlsZV9hbGlnbm1lbnQsIHN1YnNlY3Rpb25fYWxpZ25tZW50IGFuZCBvcmlnaW5hbF92bWEgZmllbGRzLgoJQWRkZWQgYWxpZ25fcG93ZXIoKSBtYWNyby4gRml4ZWQgYmZkX3NlY3Rpb25fYWxpZ25tZW50CglhY2Vzc29yIG1hY3Jvcy4gQWRkZWQgYmZkX3N5bWJvbF9zYW1lX3RhcmdldCBtYWNyby4KCgkqIGIub3V0LmMgKGJfb3V0X3dyaXRlX29iamVjdF9jb250ZW50cyk6IGZpeGVkIHRvIHVzZQoJbmV3IGFsaWdubWVudCBtZW1iZXIuIEZpeGVkIChjYWxsal9jYWxsYmFjaykgdG8gdXNlIHNlY3Rpb24KCXJlbGF0aXZlIHN5bWJvbHMgcHJvcGVybHkuCgoJKiBzdW5vcy5jIChzdW5vczRfb2JqZWN0X3ApOiBmaXhlZCB0byB1c2UgbmV3IGFsaWdubWVudF9wb3dlci4KCUZpeGVkICh0cmFuc2xhdGVfZnJvbV9uYXRpdmVfc3ltX2ZsYWdzKSB0byBjb3JyZWN0bHkgbWFrZQoJc3ltYm9scyBzZWN0aW9uIHJlbGF0aXZlLgoKCSogYmZkLmMgKGJmZF9lcnJtc2cpOiBmaXhlZCB2YXJpb3VzIGVudW0gY2FzdCBwcm9ibGVtcy4KCShiZmRfbWFrZV9zZWN0aW9uKTogdG9vayBvdXQgaW5pdGlhbGl6YXRpb24gb2Ygb2Jzb2xldGUgbWVtYmVycy4KCShiZmRfcHJpbnRfc3ltYm9sX3ZhbmRmKTogYWRkZWQKCgkqIG9wbmNscy5jIChiZmRfY3JlYXRlKTogY3JlYXRlZC4KCgkqIGNvZmYtY29kZS5oIChjb2ZmX25ld19zZWN0aW9uX2hvb2spOiB0b29rIGF3YXkgcmVmcwoJdG8gb2Jzb2xldGUgbWVtYmVycy4gKG1ha2VfYV9zZWN0aW9uX2Zyb21fZmlsZSkgYWRkZWQKCWNvbnZlcnNpb24gYmV0d2VlbiBhbGlnbm1lbnQgdHlwZXMuIChjb2ZmX3N5bWJvbF9mcm9tKQoJYWRkZWQuIChjb2ZmX2NvdW50X2xpbmVudW1iZXJzKSBvbmx5IGNvdW50cyBsaW5lbnVtYmVycwoJaWYgc3ltYm9sIGlzIG9mIGNvZmYtdHlwZS4gKGNvZmZfbWFuZ2xlX3N5bWJvbHMpIG9ubHkKCWhlYXZpbHkgbWFuZ2xlcyBzeW1ib2xzIGlmIHN5bWJvbCBpcyBjb2ZmLXR5cGUuCgkoY29mZl93cml0ZV9zeW1ib2xzKSB2YXJpb3VzIGxpbnRzLiAoY29mZl93cml0ZV9vYmplY3RfY29udGVudHMpCgl2YXJpb3VzIGxpbnRzIGFuZCBtb2RpZmljYXRpb24gZm9yIGFsaWdubWVudCBjb252ZXJzaW9uLgoJKGNvZmZfc2x1cnBfcmVsb2NzKSBmaXhlZCBmb3IgdXNlIHdpdGggbmV3IGFzZWN0aW9uIHNoYXBlLgoKU2F0IEphbiAxOSAxNjoxMDo0MiBQU1QgMTk5MSBzdGV2ZUBjeWdudXMuY29tCgoJKiBhcmNoaXZlLmM+IGxvdHMgb2YgbGludC4KCgkqIGIub3V0LmM6IGFkZGVkIGNhbGxqIHJlbG9jYXRpb24gc3VwcG9ydCwgdXBncmF0ZWQgcmVsb2MgaG93dG8uCglGaXhlZCBzbyB0aGF0IGFzeW1ib2wgYW5kIHJlbG9jIHJlY29yZHMgYXJlIG91dHB1dAoJY29ycmVjdGx5LgoKCSogYmZkLmM6IGxvdHMgb2YgbGludCwgc3VwcG9ydCBmb3IgbmV3IGJmZCBlbnRyeSBwb2ludAoJYmZkX3ByaW50X3N5bWJvbC4KCgkqIGJmZC5oOiBjaGFuZ2VkIGRlZmluaXRpb24gb2YgYXN5bWJvbCB0byBjb250YWluIHBvaW50ZXIgdG8KCW93bmluZyBiZmQsIHJlbW92ZWQgdGFyZ2V0IGRlcGVuZGVuY2llcy4KCgkqIGNhY2hlLmM6IHRvb2sgb3V0IHByaW50IHN0YXRlbWVudHMsIHB1dCBpbiBCRkRfQVNTRVJUIGNhbGxzLgoKCSogY29mZi1jb2RlLmg6IHZhcmlvdXMgbGludHMsIGNvcnJlY3RlZCBsaW5lbnVtYmVyIG91dHB1dAoJZnVuY3Rpb25hbGl0eS4gQWRkZWQgc3VwcG9ydCBmb3IgbmV3IHN0eWxlIGFzeW1ib2xzIGFuZAoJYmZkX3ByaW50X3N5bWJvbC4gRml4ZWQgc28gdGhhdCBhc3ltYm9sIGFuZAoJcmVsb2MgcmVjb3JkcyBhcmUgaGFuZGxlZCBjb3JyZWN0bHkuIEFkZGVkIHRpbWVzdGFtcC4KCgkqIGljb2ZmLmM6IEFkZGVkIHN1cHBvcnQgZm9yIG5ldyBob3d0byBzaGFwZS4KCgkqIGxpYmEub3V0Lmg6IEFkZGVkIHN1cHBvcnQgZm9yIG5ldyBhc3ltYm9sIHNoYXBlCgoJKiBsaWJiZmQuYzogdmFyaW91cyBsaW50cwoKCSogbGliYmZkLmg6IHZhcmlvdXMgbGludHMKCgkqIGxpYmNvZmYuaDogYWRkZWQgc3VwcG9ydCBmb3IgbmV3IGFzeW1ib2wgc2hhcGUuCgoJKiBzdW5vcy5jOiB2YXJpb3VzIGxpbnRzLiBBZGRlZCBzdXBwb3J0IGZvciBuZXcgYXN5bWJvbCBzaGFwZQoJYW5kIGJmZF9wcmludF9zeW1ib2wuCgpXZWQgSmFuIDE2IDIxOjM4OjA5IFBTVCAxOTkxIHN0ZXZlQGN5Z251cy5jb20KCgkqIGIub3V0LmMgcmVtb3ZlZCBwcm90b3R5cGUgb2Ygc3Vub3M0X2VubmF0aXZhdGVfc3ltdGFiLCBsb3RzIG9mCglwb2ludGVyIGxpbnQuIEFkZGVkIHN1cHBvcnQgZm9yIGNhbGxqIHJlbG9jYXRpb24uIEZpeGVkIGJ1ZyB3aGVyZQoJdGhlIGxhc3QgMzIgYnl0ZXMgb2YgdGhlIHRleHQgc2VjdGlvbiB3ZXJlIG92ZXJ3cml0dGVuIGJ5IGRhdGEuIEZpeGVkIGJ1ZwoJd2hlcmUgYXJjaGl2ZXMgb2YgYi5vdXQgZGlkbid0IHdvcmsgZHVlIGJmZF9zbHVycF9leHRlbmRlZF9uYW1lX3RhYmxlCglyZXR1cm5pbmcgZmFsc2UuCgoJKiBzdW5vcy5jIGFkZGVkIHN1cHBvcnQgZm9yIG5fb3RoZXIgZmllbGQuIEJyYWNlZCB0aGUgaG93dG8gdGFibGUgc28KCXRoYXQgaXQgd29uJ3QgYmUgYWZmZWN0ZWQgYnkgYW55IGxlbmd0aGluZyBvZiB0aGUgaG93dG8gc3RydWN0IHR5cGVkZWYuCglWYXJpb3VzIGxpbnRzCgoJKiBiZmQuaCBhZGRlZCBzdXBwb3J0IGZvciBuX290aGVyIGZpZWxkLCBhZGRlZCBzcGVjaWFsX2Z1bmN0aW9uCglyZWxvYyB0eXBlLCBtb2RpZmllZCBiZmRfcGVyZm9ybV9yZWxvY2F0aW9uIHByb3RvdHlwZS4gQWRkZWQgYmZkX2hfZ2V0X3gKCW1hY3Jvcy4KCgkqIGJmZC5jIHVwZ3JhZGVkIGJmZF9wZXJmb3JtX3JlbG9jYXRpb24sIHZhcmlvdXMgbGludHMuCgpXZWQgSmFuIDE2IDAxOjU1OjUzIDE5OTEgIEpvaG4gR2lsbW9yZSAgKGdudSBhdCBydGwpCgoJKiBDaGFuZ2VMb2c6ICBTdGFydGVkIENoYW5nZUxvZyBmb3IgQkZELgoJKiBUT0RPOiAgQ3JlYXRlIGZpbGUgZm9yIHN1Z2dlc3Rpb25zLgoKCSogTWFrZWZpbGU6ICBTdXBwb3J0IGVhc3kgbG9hZGluZyBpbnRvIFNhYmVyIEMuCglBZGQgZGVwZW5kZW5jaWVzIGZvciBpY29mZi5vIGFuZCBiY3M4OGtjb2ZmLm8uCglSZW5hbWUgY29mZi5jIHRvIGNvZmYtY29kZS5oLiAgQ2hhbmdlIGNhbGxlcnMuCgoJKiBiZmQuYyAoYmZkX2NoZWNrX2Zvcm1hdCk6ICBBbGxvdyB0aGUgY2hlY2tfZm9ybWF0IHJvdXRpbmVzCgl0byByZXR1cm4gdGhlIGRlc2lyZWQgdGFyZ2V0IHZlY3RvciwgcmF0aGVyIHRoYW4ganVzdCBhIEJvb2xlYW4uCgliZmQuaCAoYmZkX2NoZWNrX2Zvcm1hdCk6ICBDaGFuZ2UgZnVuY3Rpb24gcG9pbnRlciByZXR1cm4gdHlwZS4KCWFyY2hpdmUuYyAoYmZkX2dlbmVyaWNfYXJjaGl2ZV9wKTogIGNoYW5nZSBjYWxsZWUuCgliLm91dC5jIChiX291dF9saXR0bGVfb2JqZWN0X3AsIGJfb3V0X2JpZ19vYmplY3RfcCwKCWJfb3V0X3JlYWxfb2JqZWN0X3ApOiAgY2hhbmdlIGNhbGxlZS4KCWxpYmJmZC5jIChfYmZkX2R1bW15X3RhcmdldCk6ICBEdW1teSByb3V0aW5lIHJlcGxhY2luZyBiZmRfZmFsc2UKCWluIGNoZWNrX2Zvcm1hdCB0cmFuc2ZlciB2ZWN0b3JzIHRoYXQgbmVlZCBhIGZpbGxlci4KCWxpYmJmZC5oIChiZmRfZ2VuZXJpY19hcmNoaXZlX3AsIF9iZmRfZHVtbXlfdGFyZ2V0KTogIEZpeCBkZWNscy4KCWJjczg4a2NvZmYuYzogIGNoYW5nZSBjYWxsZWUuCgljb2ZmLWNvZGUuaCAoY29mZl9yZWFsX29iamVjdF9wLCBjb2ZmX2JpZ19vYmplY3RfcCk6ICBjaGFuZ2UgY2FsbGVlLgoJaWNvZmYuYzogIGNoYW5nZSBjYWxsZWUuCglzdW5vcy5jIChzdW5vczRfb2JqZWN0X3AsIHN1bm9zNF9jb3JlX2ZpbGVfcCk6ICBjaGFuZ2UgY2FsbGVlLgoKCSogbGliYmZkLmMgKHphbGxvYyk6ICBJdCBzaG91bGQgYWN0dWFsbHkgemVybyB0aGUgc3RvcmFnZSEKCVRoaXMgd2FzIGNvbW1lbnRlZCBvdXQgZm9yIHNvbWUgcmVhc29uLgoKCSogbGliYmZkLmg6ICBBZGQgbWFsbG9jLCB4bWFsbG9jLCBtZW1jcHksIGFuZCBmYXRhbCBkZWNscy4KCVRoaXMgaXMgc28gY2FsbGVycyBjYW4gYXZvaWQgPHN0ZGxpYi5oPiB3aGljaCBkb2Vzbid0IGV4aXN0CglvbiBvbGRlciBzeXN0ZW1zLgoKCSogYmZkLmMgKG1hcF9vdmVyX3NlY3Rpb25zKTogIEFkZCBkZWJ1Z2dpbmcgY29kZSwgc2luY2UgSQoJbm90aWNlZCB0aGUgc2VjdGlvbiBjb3VudCBmb3Igc3Vub3MgY29yZSBmaWxlcyB3YXMgYmFkLCBidXQgb25seQoJR0RCIGhhZCBkZXRlY3RlZCB0aGUgcHJvYmxlbS4KCShiZmRfc2V0X3NlY3Rpb25fbGluZW5vX3NpemUsIGJmZF9zZXRfc2VjdGlvbl9saW5lbm9zLAoJYmZkX2dldF9zZWN0aW9uX2xpbmVub3MpOiAgUmVtb3ZlIG9ic29sZXRlIGZ1bmN0aW9ucy4KCShiZmRfYXBwbHlfcmVsb2NhdGlvbnMpOiAgVXNlIGxvbmdzLCBub3QgaW50cywgZm9yIHRoZSBtYXRoLgoKCSogYmZkLmg6ICBEZWNsYXJlIGVudW0gYm9vbGVhbiBhbmQgc3RydWN0IGJmZF90YXJnZXQgYXMgd2VsbAoJYXMgdHlwZWRlZnMgZm9yIHRoZW0uICBSZW1vdmUgb2Jzb2xldGUKCWJmZF9nZXRfc2VjdGlvbl9saW5lbm9fc2l6ZS4KCgkqIGNhY2hlLmM6ICBNYWtlIHRoZSAiZmRvcGVuIiBzdXBwb3J0IHdvcmsuICBLZWVwIGJldHRlciB0cmFjawoJb2YgaG93IG1hbnkgZmlsZXMgYXJlIG9wZW4uICBDZW50cmFsaXplIHRoZSBvcGVuaW5nIG9mIGZpbGVzCglhbmQgYmUgc3VyZSBiZmRfb3Blbltyd10gYWN0dWFsbHkgdHJ5IHRvIG9wZW4gdGhlIGZpbGUuICBFdmFkZQoJbGlua2VkIGxpc3QgaW5pdGlhbGl6YXRpb24gcHJvYmxlbXMuCgoJKiBiLm91dC5jLCBjb2ZmLWNvZGUuaCwgb3BuY2xzLmMsIHN1bm9zLmM6ICBsaW50LgoKCSogY29mZi1jb2RlLmggKGNvZmZfc2x1cnBfc3ltYm9sX3RhYmxlKTogIE51bGwtdGVybWluYXRlIHN5bXRhYiBuYW1lcy4KCgkqIGNwbHVzLWRlbS5jOiAgRGVsZXRlIGZpbGUsIHNpbmNlIGl0IGlzIG5vdCBwYXJ0IG9mIEJGRC4KCgkqIG9wbmNscy5jIChiZmRfb3BlbnIpOiAgRWxpbWluYXRlIG1pc3BsYWNlZCAjaWYgMCBjb2RlLgoJKGJmZF9vcGVuciwgYmZkX29wZW53KTogIEFjdHVhbGx5IG9wZW4gdGhlIGZpbGUsIGdpdmUgZXJyb3Igbm93LgoKCSogc3Vub3MuYyAoc3Vub3M0X2NvcmVfZmlsZV9wKTogIFNldCBzZWN0aW9uIGNvdW50LgoJKHN1bm9zNF9zZXRfc2VjdGlvbl9saW5lbm9zLCBzdGFiX25hbWVzLCBmcHJpbnRfbmFtZSk6ICBFbGltaW5pYXRlCglvYnNvbGV0ZSBkZWZpbml0aW9ucy4KCShfd3JpdGVfc3ltYm9sX3RhYmxlKTogIEluaXRpYWxpemUgPGlkeD4gY291bnRlci4KCShmb29wKTogIEVsaW1pbmF0ZSBkZWJ1Z2dpbmcgY29kZS4KDApMb2NhbCBWYXJpYWJsZXM6Cm1vZGU6IGNoYW5nZS1sb2cKbGVmdC1tYXJnaW46IDgKZmlsbC1jb2x1bW46IDc0CnZlcnNpb24tY29udHJvbDogbmV2ZXIKRW5kOgo=