TW9uIERlYyAzMCAxMDo1NzowMiAxOTkxICBQZXIgQm90aG5lciAgKGJvdGhuZXIgYXQgY3lnbnVzLmNvbSkKCglNYWlubHkgc3R1ZmYgdG8gaW1wcm92ZSBoYW5kbGluZyBvZiBUWVBFX0NPREVfUkVGIHZhbHVlcy4KCSogdmFsb3BzLmMgKHZhbHVlX2FkZHIpOiAgSWYgdGFraW5nIHRoZSBhZGRyZXMgb2YgYQoJVFlQRV9DT0RFX1JFRiwganVzdCBjYXN0IHRoZSBvYmplY3QgdG8gdGhlIGNvcnJlc3BvbmRpbmcKCVRZUEVfQ09ERV9QVFIuICBUaGlzIHlpZWxkcyBjb3JyZWN0IEMrKyBzZW1hbnRpY3MsIGFuZAoJcHJlc2VydmVzIHRoZSBsb2NhdGlvbiBpbmZvcm1hdGlvbiwgd2hpY2ggaGFzIHRoZSBuaWNlIGVmZmVjdAoJdGhhdCAmKCZSKSBnaXZlbiB0aGUgbG9jYXRpb24gY29udGFpbmluZyBSLgoJKiB2YWx1ZXMuYyAodmFsdWVfY29weSk6ICBNYWtlIG5vbi1zdGF0aWMgKHVzZWQgYnkgdmFsdWVfYWRkcikuCgkqIGV2YWwuYyAoZXZhbHVhdGVfc3ViZXhwX2Zvcl9hZGRyZXNzKTogIFVzZSB0aGUgZGVmYXVsdAoJc2NoZW1lICh3aXRoIHZhbHVlX2FkZHIpIGZvciBhIHZhcmlhYmxlIGlmIGl0IGhhcyBUWVBFX0NPREVfUkVGLgoJKiB2YWxvcHMuYyAodmFsdWVfYWRkciksIGV2YWwuYyAoZXZhbHVhdGVfc3ViZXhwX2Zvcl9hZGRyZXNzLAoJZXZhbHVhdGVfc3ViZXhwX3dpdGhfY29lcmNpb24pOiAgRmFjdG9yIG91dCBzb21lIGNvbW1vbgoJZXhwcmVzc2lvbnMgaW50byB2YXJpYWJsZXMsIGZvciBlYXNpZXIgcmVhZGluZy4KCSogZmluZHZhci5jIChsb2NhdGVfdmFyX3ZhbHVlKTogIFJlbW92ZSBjb2RlIHRvIGhhbmRsZQoJVFlQRV9DT0RFX1JFRiAtIGl0IHNob3VsZCBubyBsb25nZXIgYmUgbmVlZGVkLgoJKiB2YWxvcHMuYyAodmFsdWVfYXNzaWduKTogIERvIGEgQ09FUkNFX1JFRiBvbiB0aGUKCWRlc3RpbmF0aW9uIG9wZXJhbmQsIGZvciBjb3JyZWN0IEMrKyBzZW1hbnRpY3MuCgkqIHZhbGFyaXRoLmMgKHZhbHVlX3hfYmlub3ApOiAgRGl0dG86ICBEZS1yZWZlcmVuY2UgQysrCglyZWZlcmVuY2VzIGluIHRoZSBhcmd1bWVudHMuCgkqIHZhbG9wcy5jOiAgQU5TSS1meTogYmNvcHktPm1lbWNweSwgYnplcm8tPm1lbXNldC4KClNhdCBEZWMgMjggMTE6MzA6MjYgMTk5MSAgUGVyIEJvdGhuZXIgIChib3RobmVyIGF0IGN5Z251cy5jb20pCgoJKiBkd2FyZnJlYWQuYywgY29mZnJlYWQuYzogIFVzZSBJTklUX0NQTFVTX1NQRUNJRklDLgoJKiBzeW10YWIuYyAoZ2RiX21hbmdsZV9uYW1lKTogIFJlY29nbml6ZSBhbmQgaGFuZGxlCgljb25zdHJ1Y3RvcnMgc3BlY2lhbGx5LgoJKiBzeW10YWIuYyAoY2hlY2tfc3R1Yl9tZXRob2QpOiAgVGVzdCBmb3IgZmFpbHVyZSBmcm9tCgljcGx1cy1kZW1hbmdsZSBieSBjYWxsaW5nIGVycm9yKCkgaW5zdGVhZCBvZiBzZWctZmF1bHRpbmcgLi4uCgpGcmkgRGVjIDI3IDIyOjIxOjMwIDE5OTEgIEZyZWQgRmlzaCAgKGZuZiBhdCBjeWdudXMuY29tKQoKCSogZGVmcy5oOiAgQWRkIGRlZmluaXRpb24gb2YgbnVsbF9jbGVhbnVwKCkKCgkqIHByb2Nmcy5jOiAgTWFueSBzbWFsbCBjaGFuZ2VzIHRvIGFkZCBiYXNlIHN1cHBvcnQgZm9yIGEgbmV3CgkiaW5mbyBwcm9jIiBjb21tYW5kIChjdXJyZW50bHkgb25seSBwcmludGluZyBvZiB0aGUgYWRkcmVzcwoJc3BhY2UgbWFwcGluZyBpcyBpbXBsZW1lbnRlZCkgYW5kIGFsbG93IGl0ZXJhdGlvbiBvdmVyIHRoZQoJYWRkcmVzcyBzcGFjZSBtYXBwaW5nLCBjYWxsaW5nIGFuIGFyYml0cmFyeSBmdW5jdGlvbiBmb3IgZWFjaAoJbWFwcGluZyAodXNlZCBmb3Igc2hhcmVkIGxpYnJhcnkgc3VwcG9ydCkuCgoJKiBzb2xpYi5jOiAgQ2hhbmdlIGFsbCBpZmRlZnMgdGhhdCBjaGVja2VkIGZvciAic3VuIiB0byBjaGVjawoJZm9yICIhU1ZSNF9TSEFSRURfTElCUyIgaW5zdGVhZC4gIFJld3JpdGUgbG9va3VwX2Jhc2UoKSB0bwoJaGFuZGxlIGxvY2F0aW5nIHRoZSBkZWJ1ZyBiYXNlIGFkZHJlc3MgZXZlbiB3aGVuIG5vdCBjdXJyZW50bHkKCXN0b3BwZWQgYXQgdGhlIGR5bmFtaWMgbGlua2VyIGVudHJ5IHBvaW50LgoKCSogdXRpbHMuYzogIEFkZCBudWxsX2NsZWFudXAoKSBhcyBhIGtub3duIGZ1bmN0aW9uIHRoYXQgZG9lcwoJbm90aGluZyB0byBzZXJ2ZSBhcyBhIGJhc2UgZm9yIHBvc3NpYmx5IGxvbmcgY2xlYW51cCBjaGFpbnMKCXdpdGggbm8gc3BlY2lmaWMgImZpcnN0IGNsZWFudXAiIHRvIHNlcnZlIGFzIGFuIGFuY2hvci4KCgkqIHhtLXN5c3Y0Lmg6ICBBZGQgZGVmaW5lIG9mIFNWUjRfU0hBUkVEX0xJQlMKCkZyaSBEZWMgMjcgMTA6MTE6MzMgMTk5MSAgUGVyIEJvdGhuZXIgIChib3RobmVyIGF0IGN5Z251cy5jb20pCgoJKiBhcm0tb3Bjb2RlLmgsIG04OGstb3Bjb2RlLmgsIHBuLW9wY29kZS5oLCBucDEtb3Bjb2RlLmgsCglweXItb3Bjb2RlLmgsIHRhaG9lLW9wY29kZSwgdmF4LW9wY29kZS5oOiAgUmVtb3ZlZCAtCgl0aGVzZSBhcmUgYWxsIGVzc2VudGlhbGx5IHRoZSBzYW1lIGFzIHRoZSB2ZXJzaW9ucwoJaW4gLi4vaW5jbHVkZS9vcGNvZGUuICBUaGUgcmVtYWluaW5nICotb3Bjb2RlLmggaGVyZQoJYXJlIG5vdCBxdWl0ZSBzbyBvYnZpb3VzbHkgdGhlIHNhbWUsIGFuZCBuZWVkIHN0dWR5LgoJKiBhcm0tcGluc24uYywgZ291bGQtcGluc24uYywgbTg4ay1waW5zbi5jLCBweXItcGluc24uYywKCXRhaG9lLXBpbnNuLmMsIHZheC1waW5zbi5jOiAgQ2hhbmdlIHNvIHRoZXNlIGluY2x1ZGUKCW9wY29kZS9GT08uaCAoYWN0dWFsbHkgLi4vaW5jbHVkZS9vcGNvZGUvRk9PLmgpCglpbnN0ZWFkIG9mIHRoZSByZWNlbm50bHkgZGVwYXJ0ZWQgb3Bjb2RlLUZPTy5oIGZpbGVzLgoJKiBzcGFyYy1waW5zbi5jOiAgTm93IHRoYXQgd2UncmUgdXNpbmcgdGhlIG11Y2ggdGlnaHRlcgoJb3Bjb2RlIHRhYmxlIGluIC4uL2luY2x1ZGUvb3Bjb2RlL3NwYXJjLmgsIHdlIHNob3VsZG4ndAoJbmVlZCB0byBzb3J0IHRoZSBvcGNvZGVzIGJlZm9yZSBkaXMtYXNzZW1ibHkuCgoJKiBzeW10YWIuaCwgc3ltbWlzYy5jOiAgTWFrZSBjcGx1c19zdHJ1Y3RfZGVmYXVsdCBiZSBjb25zdC4KCSogc3ltdGFiLmgsIGJ1aWxkc3ltLmM6ICBBZGQgYW5kIHVzZSBJTklUX0NQTFVTX1NQRUNJRklDIG1hY3JvLgoJKiBzeW1taXNjLmM6ICBSZW1vdmUgdW51c2VkICduZmllbGRzJyB2YXJpYWJsZS4KCSogYnVpbGRzeW0uaDogIEFkZCBleHRlcm4gZGVjbCBvZiB1bmtub3duX3N5bXR5cGVfY29tcGxhaW50LAoJc2luY2UgaXQgdXNlZCB1c2VkIGJ5IHBhcnRpYWwtc3RhYi5oIChpbmNsdWRlZCB0d28gcGxhY2VzKS4KCSogcGFydGlhbC1zdGFiLmg6ICBSZS1hcnJhbmdlIERCWFJFQURfT05MWSAjaWZkZWZzIHNvIHRoYXQKCXdlIHNob3VsZCBuZXZlciBoaXQgdGhlIGRlZmF1bHQgY2FzZSAodW50aWwgbmV3IHN0YWIgY29kZXMKCWFyZSBhZGRlZCkuICBIZW5jZSwgd2UgY2FuIGxlYXZlIHRoZSBjb21wbGFpbnQgaW4gdGhlCglkZWZhdWx0IGNhc2UgaW4gZXZlbiB3aGVuIERCWFJFQURfT05MWSBpcyBvZmYuCgkqIHBhcnRpYWxfc3RhYi5oOiBSZWNvZ25pemUgYSBwYWlyIG9mIE5fU08gc3RhYnMgKG9uZSBmb3IgdGhlCglkaXJlY3RvcnksIG9uZSBmb3IgdGhlIGZpbGVuYW1lIHByb3Blcikgd2l0aG91dCBwZWVraW5nIGFoZWFkLgoJKiBkYnhyZWFkLmMsIG1pcHNyZWFkLmM6IEJlY2F1c2Ugb2YgcHJldmlvdXMgY2hhbmdlLCBkb24ndCBuZWVkCgl1Z2x5IENIRUNLX1NFQ09ORF9OX1NPIG1hY3JvLgoJKiBidWlsZHN5bS5oLCBkYnhyZWFkLmMsIG1pcHNyZWFkLmM6ICBNYWtlIG5leHRfc3ltYm9sX3RleHQgYQoJbWFjcm8gdGhhdCBpbnZva2VzIGEgZnVuY3Rpb24gcG9pbnRlciBpbiBuZXh0X3N5bWJvbF90ZXh0X2Z1bmMuCgkqIG1pcHNyZWFkLmM6ICBBZGRlZCBjb21tZW50cyB2YXJpb3VzIHBsYWNlcyB0bwoJZXhwbGFpbiB3aGF0IGlzIGdvaW5nIG9uLgoJKiBtaXBzcmVhZC5jIChwYXJzZV9zeW1ib2wpOiAgU3VwcG9ydCB0aGUgbmV3IChTR0ktc3BlY2lmaWM/KQoJc3ltYm9sIHR5cGVzIHN0U3RydWN0LCBzdFVuaW9uLCBhbmQgc3RFbnVtLgoJQWxzbywgc29tZSBmaXhlcyBpbiB0aGUgY29kZSBmb3IgZGVhbGluZyB3aXRoIHRhZ3MuCgkqIG1pcHNyZWFkLmM6ICBDaGFuZ2UgaGFuZGxpbmcgb2Ygc3RhcnR1cF9maWxlX3N0YXJ0IGFuZCBfZW5kCgktIG5vdyBqdXN0IHVzZSB0aGUgdGV4dGxvdyBhbmQgdGV4aGlnaCBvZiBhIHBzeW10YWIKCXRvIGNoZWNrIGlmIHdlJ3ZlIGZvdW5kIHRoZSBzdGFydHVwLWZpbGUuCgkqIG1pcHNyZWFkLmM6ICBSZXBsYWNlIHNfaWR4IGJ5IGdsb2JhbCBjdXJfc2R4IGluIG1hbnkgcGxhY2VzLgoJVGhpcyBpcyBzbyBtaXBzX25leHRfc3ltYm9sX3RleHQgY2FuIGdldCBhdCBpdC4KClRodSBEZWMgMjYgMTk6NTI6MDEgMTk5MSAgRnJlZCBGaXNoICAoZm5mIGF0IGN5Z251cy5jb20pCgoJKiBkYnhyZWFkLmMsIHN5bW1pc2MuYzogIE1vdmUgYWRkX3BzeW1ib2xfdG9fcGxpc3QoKSBmcm9tCglkYnhyZWFkLmMgdG8gc3ltbWlzYyBhbmQgY2hhbmdlIG5hbWUgdG8gYWRkX3BzeW1ib2xfdG9fbGlzdC4KCURpdHRvIGZvciBhZGRfcHN5bWJvbF9hZGRyX3RvX3BsaXN0KCkuICBBbHNvIGV4cGFuZCB0aGVpcgoJYm9keSB0byBub3QgdXNlIEFERF9QU1lNQk9MX1ZUX1RPX0xJU1QuCgoJKiBkd2FyZnJlYWQuYzogIFJlbW92ZSBhZGRfcHN5bWJvbF90b19saXN0KCkgYW5kIGNvbnZlcnQgdXNhZ2VzCgl0byB0aGUgQUREX1BTWU1CT0xfVE9fTElTVCBtYWNyby4KCgkqIGllZWUtZmxvYXQuYzogIENoYW5nZSAiI2lmZGVmIERFQlVHIiB0byAiI2lmZGVmIElFRUVfREVCVUciCgl0byBhdm9pZCBjb2xsaXNpb24gd2l0aCB0aGUgREVCVUcgZm9yIEFERF9QU1lNQk9MX1ZUX1RPX0xJU1QuCgoJKiBwYXJ0aWFsLXN0YWIuaCwgc3ltZmlsZS5oOiAgTW92ZSBkZWZpbml0aW9ucyBvZiB0aGUgbWFjcm9zCglBRERfUFNZTUJPTF9UT19MSVNUIGFuZCBBRERfUFNZTUJPTF9BRERSX1RPX0xJU1QgZnJvbQoJcGFydGlhbC1zdGFiLmggdG8gc3ltZmlsZS5oLiAgVGhleSBhcmVuJ3Qgc3RhYiBzcGVjaWZpYy4KCUNoYW5nZSBBRERfUFNZTUJPTF9WVF9UT19MSVNUIHRvIHVzZSBtZW1jcHkgcmF0aGVyIHRoYW4gc3RybmNweS4KClR1ZSBEZWMgMjQgMTE6Mzg6MDggMTk5MSAgSm9obiBHaWxtb3JlICAoZ251IGF0IGN5Z251cy5jb20pCgoJKiBNYWtlZmlsZS5pbjogIFJvbGwgVkVSU0lPTiB0byA0LjMuMi4KCk1vbiBEZWMgMjMgMTM6NTQ6MzUgMTk5MSAgUGVyIEJvdGhuZXIgIChib3RobmVyIGF0IGN5Z251cy5jb20pCgoJKiBtNjhrLW9wY29kZS5oLCBtaXBzLW9wY29kZS5oLCBzcGFyYy1vcGNvZGUuaDogIERlbGV0ZWQuCgkqIG02OGstcGluc24uYywgbWlwcy1waW5zbi5jLCBzcGFyYy1waW5zbi5jOgoJSW5jbHVkZSA8b3Bjb2RlL0ZPTy5oPiBpbnN0ZWFkIG9mIDxGT08tb3Bjb2RlLmg+LgoKCSogc3ltdGFiLmgsIHN5bXRhYi5jLCBjb2ZmcmVhZC5jLCBkd2FyZnJlYWQuYywgc3ltbWlzYy5jLAoJZGJ4cmVhZC5jOiAgVGhlIFRZUEVfQ1BMVVNfU1BFQ0lGSUMgc3RydWN0dXJlIGlzIG5vdyBvbmx5CglhbGxvY2F0ZWQgd2hlbiBpdCBpcyBuZWVkZWQuICBVbnRpbCBpdCBpcyBuZWVkZWQsIGl0IHBvaW50cwoJdG8gYSBzaGFyZWQgc3RhdGljYWxseSBhbGxvY2F0ZWQgc3RydWN0dXJlLgoKCSogYnVpbGRzeW0uaCwgYnVpbGRzeW0uYywgZGJ4cmVhZC5jOiBSZW1vdmUgdGhlIGtsdWRneSBjb2RlCglpbiByZWFkX29maWxlX3N5bXRhYiB0byByZWNvZ25pemUgdHdvIGluaXRpYWwgTl9TTyBzdGFicywKCWFuZCBsZXQgcHJvY2Vzc19vbl9zeW1ib2wgaGFuZGxlIGl0LiAgVGhpcyBpcyBjbGVhbmVyLCBtb3JlCgllZmZpY2llbnQsIGFuZCBsZXRzIG1pcHNyZWFkLmMgc2hhcmUgdGhlIHNhbWUgY29kZS4KCgkqIHN5bWZpbGUuaCwgcGFydGlhbC1zdGFiLmg6ICBNb3ZlIEFERF9QU1lNQk9MX1ZUX1RPX0xJU1QKCWFuZCByZWxhdGVkIG1hY3JvcyB0byBoZXJlIC4uLgoJKiBkYnhyZWFkLmM6IC4uLiBmcm9tIGhlcmUuCgkqIHN5bW1pc2MuYzogIE1vdmUgdGhlICJvdmVyZmxvdyIgaGFuZGxpbmcgZnJvbQoJQUREX1BTWU1CT0xfVlRfVE9fTElTVCBtYWNybyBpbnRvIG5ldyBmdW5jdGlvbiBleHRlbmRfcHN5bWJvbF9saXN0LgoJKiBkd2FyZnJlYWQuYzogIFJlLXdyaXRlIGFkZF9wc3ltYm9sX3RvX2xpc3QgdG8gdXNlCglBRERfUFNZTUJPTF9WVF9UT19MSVNUIG1hY3JvLgoKCSogbWlwc3JlYWQuYzogRXh0ZW5kIG1pcHNyZWFkLmMgdG8gaGFuZGxlIHN0YWJzLXN0eWxlIHN5bWJvbHMKCWVuY2Fwc3VsYXRlZCBpbiBlY29mZiBzeW1ib2xzLiAgVGhpcyBlbmFibGUgZnVsbCBnKysgZGVidWdnaW5nLiAgCgkqIHBhcnRpYWwtc3RhYi5oOiAgTW92ZSB0aGUgY29kZSBmb3IgcHJlLXNjYW5uaW5nIHN5bWJvbHMKCWFuZCBidWlsZGluZyBwc3ltdGFicyB0byBhbiBpbmNsdWRlIGZpbGUsIG91dCBmcm9tIGRieHJlYWQuYy4KCVRoaXMgd2F5LCB0aGUgc2FtZSBjb2RlIGNhbiBhbHNvIGJlIHVzZWQgYnkgbWlwc3JlYWQuYy4KCSogZGJ4cmVhZC5jLCBidWlsZHN5bS5oOiAgVmFyaW91cyBjaGFuZ2VzIHRvIGFsbG93IHNvbWUgZnVuY3Rpb25zCgl0byBiZSB1c2VkIGJ5IG1pcHNyZWFkLmMgKGFsc28gc29tZSBhcmd1YWJsZSBzdHlsaXN0aWMgY2hhbmdlcykuCgoJKiB0bS1taXBzLmg6ICBEZWZpbmUgQkxPQ0tfQUREUkVTU19BQlNPTFVURSwgYXQgbGVhc3QgZm9yIG5vdywKCXNpbmNlIG1pcHMtdGZpbGUgcHV0cyByZWxvY2F0YWJsZSBhZGRyZXNzZXMgaW50byBMQlJBQy9SQlJBQwoJc3RhYnMuCgoJKiBtaXBzcmVhZC5jOiAgUmVwbGFjZSBjb2RlIHRvIGhhbmRsZSBhbWJpZ3VvdXMgdGFnIGJsb2Nrcy4KCUluc3RlYWQgb2YgYWxsb2NhdGluZyBhIFRZUEVfQ09ERV9VTkRFRiwgZ3Vlc3MgKGJ5IGxvb2tpbmcKCWF0IHR5cGVzIGFuZCBvZmZzZXRzKSBpZiBhIHRhZyBpcyBhIHN0cnVjdCwgdW5pb24sIG9yIGVudW0uCglTdGlsbCBwYXRjaCBpdCBsYXRlciBpZiB3ZSBmaW5kIG91dCBmb3Igc3VyZS4KCSogbWlwc3JlYWQuYzogIEluIHZhcmlvdXMgd2F5cywgcmVwbGFjZSBGb3JpbidzCglpZGVvLXN5bmNyYXRpYyBjb2RlIGJ5IGNvZGUgdGhhdCBmaXRzIGJldHRlciB3aXRoIHRoZQoJcmVzdCBvZiBnZGIsIGZvciBib3RoIHN0YWJzLWJhc2VkIGFuZCBlY29mZi1iYXNlZCBzeW10YWJzLgoJRS5nLiAgdXNlIGVuZF9wc3ltdGFiOyBkb24ndCBkbyBleHRyYSBwYXNzZXMgb3ZlciBGRFIgdGFibGUgdG8KCXByZS1wYXJ0aXRpb24gZ2xvYmFsIGRhdGE7IGRvbid0IHVzZSBleHRlcm5hbCBzeW1ib2xzIHRvCgljcmVhdGUgc3RhdGljL2dsb2JhbCBzeW1ib2xzIChqdXN0IHB1dCB0aGVtIGluIHRoZQoJbWlzY192ZWN0b3IpOyB1c2UgQUREX1BTWU1CT0xfVE9fTElTVCBtYWNybzsgZG9uJ3QKCXNvcnQgcHN5bXRhYnMgb3Igc3ltdGFiczsgdXNlIG9ic3RhY2tzIG1vcmUuCgoJKiBzeW10YWIuYywgbWlwc3JlYWQuYywgZGJ4cmVhZC5jLCBidWlsZHN5bS5jOgoJQU5TSWZ5OiBSZXBsYWNlIGJjb3B5IGJ5IG1lbWNweSwgYnplcm8gYnkgbWVtc2V0LgoKU3VuIERlYyAyMiAxOTozMTowNCAxOTkxICBGcmVkIEZpc2ggIChmbmYgYXQgY3lnbnVzLmNvbSkKCgkqIHNvbGliLmMgKGxvY2F0ZV9iYXNlKTogIEZpeCB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHRoYXQgd2FzIAoJY2F1c2luZyByZXR1cm4gb2YgcmFuZG9tIHZhbHVlIHRvIGNhbGxlZS4KCgkqIGNvbmZpZy9taC1hbWl4LCBjb25maWcvbWgtaTM4NnY0OiAgQ2hhbmdlIHRvIGZpbmQgYWxsb2NhIGJ5Cgljb21waWxpbmcgYW5kIGxpbmtpbmcgYWxsb2NhLmMsIGV2ZW4gd2hlbiBpdCBpcyBub3Qgc3RyaWN0bHkKCXJlcXVpcmVkLiAgQWxzbyBhcnJhbmdlIHRvIGxpbmsgd2l0aCAtbHRlcm1saWIgcmF0aGVyIHRoYW4KCS1sdGVybWNhcC4KCgkqIE1ha2VmaWxlLmluOiAgTW92ZSBURVJNQ0FQIGRlZmluaXRpb24gdG8gcHJpb3IgdG8gaW5jbHVzaW9uCglvZiBob3N0IG1ha2VmaWxlIGZyYWdtZW50cyBzbyBpdCBjYW4gYmUgb3ZlcnJpZGRlbi4KCkZyaSBEZWMgMjAgMTY6MzM6MzkgMTk5MSAgSm9obiBHaWxtb3JlICAoZ251IGF0IGN5Z251cy5jb20pCgoJKiB4Y29mZnJlYWQuYyAocmVhZF9zeW1ib2xfbGluZW5vKTogIExvZ2ljIGVycm9yIGluIGluY3JlbWVudGluZwoJc3ltYm9sIHRhYmxlIGVudHJ5IG51bWJlci4gIChGcm9tIE1ldGluIE96aXNpay4pCgpGcmkgRGVjIDIwIDExOjM2OjM4IDE5OTEgIEZyZWQgRmlzaCAgKGZuZiBhdCBjeWdudXMuY29tKQoKCSogY29uZmlnL21oLWkzODZ2NDogIENoYW5nZSBYTV9DTElCUyB0byAiLWxjIC91c3IvdWNibGliL2xpYnVjYi5hIgoJc28gY29tcGlsZXMgd2l0aCBuYXRpdmUgY29tcGlsZXJzICh3aXRob3V0IGJ1aWx0aW4gYWxsb2NhKSBjYW4KCXBpY2sgdXAgdGhlIHZlcnNpb24gZnJvbSB0aGUgYnNkIGVtdWxhdGlvbiBsaWJyYXJ5LiAgSG93ZXZlciwgd2UKCXNlYXJjaCB0aGUgc3RhbmRhcmQgQyBsaWJyYXJ5IGZpcnN0IHNvIHdlIGRvbid0IHBpY2sgdXAgbG90cyBvZgoJb3RoZXIgYnJva2VuIHN0dWZmIGZyb20gbGlidWNiLmEsIHRoYXQgd2UgKmRvbid0KiB3YW50LgoKCSogY29uZmlndXJlLmluLCB0bS1hbWl4LmgsIHRtLWkzODZ2NC5oLCB4bS1hbWl4LmgsIHhtLWkzODZ2NC5oOgoJQ2hhbmdlIHN2cjQgcmVmZXJlbmNlcyB0byBzeXN2NC4KCgkqIHNvdXJjZS5jOiAgTW92ZSBkZWNsYXJhdGlvbiBvZiBleHRlcm5hbCBmdW5jdGlvbiBpbmRleCB0bwoJZnJvbnQgb2YgZmlsZSBzbyBpdCBpcyBpbiBzY29wZSBmb3IgYWxsIHJlZmVyZW5jZXMuCgoJKiB1dGlscy5jIChlcnJvciwgZmF0YWwpOiAgTWFrZSBkZWZpbml0aW9ucyBjb25zaXN0ZW50IHdpdGgKCWRlZnMuaCBkZWNsYXJhdGlvbnMgKGRlY2xhcmVkIGFzICJ2b2xhdGlsZSB2b2lkIikuCgpGcmkgRGVjIDIwIDEwOjU1OjM2IDE5OTEgIEpvaG4gR2lsbW9yZSAgKGdudSBhdCBjeWdudXMuY29tKQoKCSogcnM2ay1vcGNvZGUuaDogIEJ1Z2ZpeCBzZmUgYW5kIHN0YnJ4LiAgQnkgQWwgS29zc293LgoKV2VkIERlYyAxOCAxNzowOTowNiAxOTkxICBTdHUgR3Jvc3NtYW4gIChncm9zc21hbiBhdCBjeWdudXMuY29tKQoKCSogY29tbWFuZC5oLCBkZWZzLmgsIGV2YWwuaCwgZXhwcmVzc2lvbi5oLCByZW1vdGUtc2Euc3BhcmMuYywKCXNwYXJjLXRkZXAuYywgc3ltdGFiLmgsIHRhcmdldC5oLCB2YWx1ZS5oLCB2eC1zaGFyZS9wdHJhY2UuaCwKCXZ4LXNoYXJlL3hkcl9wdHJhY2UuaCwgdngtc2hhcmUveGRyX3JkYi5oOiAgQU5TSWZ5IGVudW1zLgoKTW9uIERlYyAxNiAxMjozMTo0NiAxOTkxICBGcmVkIEZpc2ggIChmbmYgYXQgY3lnbnVzLmNvbSkKCgkqIGNvbmZpZy9tdC1hbWl4LCBjb25maWcvbXQtaTM4NnY0OiAgQWRkIHNvbGliLm8gdG8gVERFUEZJTEVTCglmb3IgdGhlc2UgU1ZSNCBzeXN0ZW1zLgoKCSogc3ltZmlsZS5jIChzeW1ib2xfZmlsZV9hZGQpOiAgV2hlbiB2ZXJib3NlIGlzIHNldCwgcHJpbnQKCXRoZSBuYW1lcyBvZiBmaWxlcyBmcm9tIHdoaWNoIHN5bWJvbHMgYXJlIGJlaW5nIGxvYWRlZCwgYXMKCXdoZW4gZnJvbV90dHkgaXMgdHJ1ZS4KCgkqIHNvbGliLmM6ICBDb21wbGV0ZWx5IHJlb3JnYW5pemVkIChyZXdyaXR0ZW4pIHRvIHN1cHBvcnQKCVNWUjQgc2hhcmVkIGxpYnJhcmllcyBpbiBhIG1hbm5lciB2ZXJ5IGNsb3NlIHRvIHRoZSBvcmlnaW5hbAoJU3VuT1MgaW1wbGVtZW50YXRpb24uICBUaGlzIHN1cHBvcnQgaXMgZXhwZWN0ZWQgdG8gY2hhbmdlIGFuZAoJYmVjb21lIG1vcmUgZ2VuZXJhbCBhdCBzb21lIGZ1dHVyZSB0aW1lLiAgVGhlIFNWUjQgdmVyc2lvbgoJZG9lcyBub3QgeWV0IHdvcmsgZm9yIGF0dGFjaGVkIHByb2Nlc3NlcywgZm9yIGV4YW1wbGUuCgoJKiBkd2FyZnJlYWQuYzogIEFycmFuZ2UgaW4gZHdhcmZfYnVpbGRfcHN5bXRhYnMoKSBmb3IgdGhlIAoJcmVsb2NhdGlvbiBhZGRyZXNzIHRvIGJlIHZhbGlkIHdoZXRoZXIgb3Igbm90IHN5bWJvbHMgYXJlCgliZWluZyByZWFkIGZyb20gYSBzaGFyZWQgbGlicmFyeSBvciBhbiBleGVjdXRhYmxlLiAgVXNlIHRoZQoJcmVsb2NhdGlvbiBhZGRyZXNzIHJlY29yZGVkIGluIHRoZSBwc3ltdGFiIHdoZW4gcmVhZGluZwoJZnVsbCBzeW1ib2wgdGFibGVzIChpbiByZWFkX29maWxlX3N5bXRhYikuICBFbnN1cmUgdGhhdCB0aGUKCXJlbG9jYXRlZCBhZGRyZXNzIHJhbmdlcyBhcmUgcmVjb3JkZWQgaW4gcGFydGlhbCBzeW10YWJzLgoKCSogZWxmcmVhZC5jOiAgQWRkIG5ldyBmdW5jdGlvbiBlbGZfaW50ZXJwcmV0ZXIoKSB0byByZXR1cm4gdGhlCglzdHJpbmcgZnJvbSB0aGUgRUxGICIuaW50ZXJwIiBzZWN0aW9uLiAgVGhpcyBpcyB0aGUgaW50ZXJwcmV0ZXIKCXRoYXQgdGhlIGtlcm5lbCB0cmllcyB0byBydW4gYW5kIGZlZWQgdGhlIGV4ZWN1dGFibGUgdG8uCglFeHBhbmQgYXJndW1lbnRzIHRvIHJlY29yZF9taXNjX2Z1bmN0aW9uIHRvIGluY2x1ZGUgYSB0eXBlIGFyZy4KCU1vZGlmeSBlbGZfc3ltdGFiX3JlYWQoKSB0byBzdXBwbHkgdGhlIHR5cGUgYXJnLCBhbmQgdG8gZG8gc3ltYm9sCglyZWxvY2F0aW9ucyBmb3Igc3ltYm9scyByZWFkIGluIGZyb20gc2hhcmVkIGxpYnJhcmllcy4KCgkqIHByb2Nmcy5jOiAgQWRkIG5ldyBmdW5jdGlvbnMgcHJvY19iYXNlX2FkZHJlc3MoKSBhbmQKCXByb2NfYWRkcmVzc190b19mZCgpLCB1c2VkIGJ5IHNoYXJlZCBsaWJyYXJ5IHN1cHBvcnQuCgoJKiB0bS1zdnI0Lmg6ICBBZGQgbWFjcm9zIHRvIHN1cHBvcnQgU1ZSNCBzaGFyZWQgbGlicmFyaWVzLgoJRGVmaW5pdGlvbnMgZm9yIFNPTElCX0FERCwgU09MSUJfQ1JFQVRFX0lORkVSSU9SX0hPT0ssCglDTEVBUl9TT0xJQiwgYW5kIERJU0FCTEVfVU5TRVRUQUJMRV9CUkVBSy4KCkZyaSBEZWMgMTMgMjA6MTE6MjYgMTk5MSAgSm9obiBHaWxtb3JlICAoZ251IGF0IGN5Z251cy5jb20pCgoJKiBpbmZydW4uYywgcmVtb3RlLWViLmMsIHJlbW90ZS1uaW5keS5jLCByZW1vdGUtdnguYzogIFJlbW92ZQoJdW51c2VkIFNUQVJUX0lORkVSSU9SX0hPT0suCgoJKiByZW1vdGUtZWIuYzogIENoYW5nZSB0aW1lb3V0IHRvIDI0IHNlY29uZHMgKCoxMCBmaXRzIGluIGJ5dGUpCgl0byBhY2NvdW50IGZvciBzbG93IGxvYWRpbmcgZnJvbSBmbG9wcGllcy4KCShlYl9jcmVhdGVfaW5mZXJpb3IpOiAgTmV3IGZuLCBmcm9tIGViX3N0YXJ0IGFuZAoJbmluZHlfY3JlYXRlX2luZmVyaW9yLgoJKGViX2Nsb3NlKTogIE9ubHkgdXNlIGxvZ19maWxlIGlmIG5vbnplcm8uCgkoZWJfeGZlcl9pbmZlcmlvcl9tZW1vcnkpOiAgSWYgbm90IHdyaXRpbmcsIHRoZW4gcmVhZCEKCShlYl9yZWFkX2luZmVyaW9yX21lbW9yeSwgZWJfd3JpdGVfaW5mZXJpb3JfbWVtb3J5KTogIFJldHVybiBsZW5ndGguCgkoZWJfa2lsbCk6ICBBIG5ldyBuby1vcC4KCShlYl9tb3Vybl9pbmZlcmlvcik6ICBSZW1vdmUgYnJlYWtwb2ludHMsIHRoZW4gZ2VuZXJpY2FsbHkgd2VlcC4KCkZyaSBEZWMgMTMgMTY6MDk6MjMgMTk5MSAgRnJlZCBGaXNoICAoZm5mIGF0IGN5Z251cy5jb20pCgoJKiBicmVha3BvaW50LmMsIGZpbmR2YXIuYywgaW5mcnVuLmMsIHB1dGVudi5jLCBzdGFjay5jOiAgRml4CgltaXNjZWxsYW5lb3VzIGNvbXBhcmlzb25zIG9mIGludGVnZXIgd2l0aCBOVUxMIHRoYXQgZWxpY2l0Cgljb21waWxlciB3YXJuaW5ncyBhYm91dCBjb21wYXJpc29uIG9mIGludGVnZXIgd2l0aCBwb2ludGVyLCB3aGVuCglOVUxMIGlzICgodm9pZCAqKSAwKSByYXRoZXIgdGhhbiBqdXN0IGEgYmFyZSAwLgoKV2VkIERlYyAxMSAxMzowMjo1OCAxOTkxICBKb2huIEdpbG1vcmUgIChnbnUgYXQgY3lnbnVzLmNvbSkKCgkqIGJyZWFrcG9pbnQuYyAoYnJlYWtwb2ludF9yZV9zZXRfb25lKTogIERpc2FibGUgZWFjaCBicmVha3BvaW50Cgl3aGlsZSB3ZSByZXNldCBpdCwgaW4gY2FzZSBvZiBwcm9ibGVtcy4gIFByaW50IGJyZWFrcG9pbnQgbnVtYmVyCglpbiBlcnJvciBtZXNzYWdlcy4KCgkqIGJ1aWxkc3ltLmMgKHJlYWRfc3RydWN0X3R5cGUpOiAgQXZvaWQgc3VuMyBjb21waWxlciBidWcgd2l0aAoJZm9vWy0tbl0uCgoJKiBzb3VyY2UuYyAoZmluZF9zb3VyY2VfbGluZXMpOiBJZiBnZXR0aW5nIGZpbGUgbW9kIHRpbWUgZmFpbHMsCglkb24ndCB3YXJuLgoKCSogdGFyZ2V0LmMgKHRhcmdldF94ZmVyX21lbW9yeSk6ICBJZiBlcnJubyBpcyBzZXQsIHJldHVybiBpdCwKCXJhdGhlciB0aGFuIEVJTy4KClR1ZSBEZWMgMTAgMDQ6MDc6MjIgMTk5MSAgSy4gUmljaGFyZCBQaXhsZXkgIChyaWNoIGF0IHJ0bC5jeWdudXMuY29tKQoKCSogTWFrZWZpbGUuaW46IGluZm9kaXIgYmVsb25ncyBpbiBkYXRhZGlyLgoKU3VuIERlYyAgOCAyMToxMzozMyAxOTkxICBNaWNoYWVsIFRpZW1hbm4gICh0aWVtYW5uIGF0IHNwaGFnbnVtLmN5Z251cy5jb20pCgoJKiBzeW10YWIuaCAoc3RydWN0IGZuX2ZpZWxkKTogQWRkIG5ldyBmaWVsZHMgYGlzX3ByaXZhdGUnLAoJYGlzX3Byb3RlY3RlZCcsIGBpc19zdHViJywgbWFraW5nIHJvb20gYnkgcmVkdWNpbmcgdGhlIHNpemUgb2YKCWB2b2Zmc2V0Jy4KCShzdHJ1Y3QgZm5fZmllbGRsaXN0KTogRGVsZXRlIHRoZSBmaWVsZHMgYHByaXZhdGVfZm5fZmllbGRfYml0cycKCWFuZCBgcHJvdGVjdGVkX2ZuX2ZpZWxkX2JpdHMnLgoJKFRZUEVfRk5fe1BSSVZBVEUsUFJPVEVDVEVEfV9CSVRTKTogRGVsZXRlZC4KCShTRVRfVFlQRV9GTl97UFJJVkFURSxQUk9URUNURUR9KTogRGVsZXRlZC4KCShUWVBFX0ZOX3tQUklWQVRFLFBST1RFQ1RFRH0pOiBEZWxldGVkLgoJKFRZUEVfRk5fRklFTERfe1NUVUIsUFJJVkFURSxQUk9URUNURUR9KTogTmV3IG1hY3Jvcy4KCSogdmFsb3BzLmMsIHZhbHByaW50LmMsIHN5bXRhYi5jOiBBbGwgY2FsbGVycyB1cGRhdGVkLgoKCSogYnVpbGRzeW0uYyAocmVhZF9zdHJ1Y3RfdHlwZSk6IERlbGV0ZSB0aGUgYHZpc2liaWxpdHknIGZpZWxkCglmcm9tIGBzdHJ1Y3QgbmV4dF9mbmZpZWxkJywgYW5kIHJld29yayBjb2RlIHNvIHRoYXQgdmlzaWJpbGl0eQoJaW5mbyBpcyBzdG9yZWQgaW50byB0aGUgZm5fZmllbGQgZGlyZWN0bHkuICBBbHNvLCBoYWNrZWQgdG8gc2V0CglUWVBFX0ZOX0ZJRUxEX1NUVUIgZm9yIGJvdGggc3RhdGljIGFuZCBub3JtYWwgbWVtYmVyIGZ1bmN0aW9ucy4KClNhdCBEZWMgIDcgMTg6MTM6MTEgMTk5MSAgRnJlZCBGaXNoICAoZm5mIGF0IGN5Z251cy5jb20pCgoJKiBpMzg2LXRkZXAuYzogIEZpeCBhIHByb2JsZW0gb24gaTM4NiBzeXN0ZW1zIHdoZXJlIGJ1ZmZlcmVkIGNvZGUKCXN0cmVhbSBhY2Nlc3Mgd2FzIGZhaWxpbmcgdG8gdGFrZSBpbnRvIGFjY291bnQgdGhlIG1pbmltdW0gc2l6ZQoJZ3JhbnVsYXJpdHkgb2YgdGhlIGNvZGUgc2VjdGlvbi4gIEZvciBub3csIHRoZSBidWZmZXJpbmcgaXMgc2ltcGx5CglkaXNhYmxlZC4gIFRoZXJlIGlzIGEgc2ltaWxhciBwcm9ibGVtIGluIHRoZSBpMzg2IGRpc2Fzc2VtYmVyIGNvZGUKCXRoYXQgaGFzIG5vdCB5ZXQgYmVlbiBmaXhlZCAoRklYTUUpLgoKCSogZ21hbGxvYy5jOiAgVXNlIG1hY3JvcyB0byBoaWRlIHNvbWUgb2YgdGhlIHVnbHkgY2FzdGluZyByZXF1aXJlZAoJaW4gdGhlIHByZXZpb3VzbHkgYXBwbGllZCBmaXggZm9yIHBvaW50ZXJzIHdpdGggaGlnaCBiaXRzIHNldC4KClNhdCBEZWMgIDcgMTY6NDk6MzUgMTk5MSAgSm9obiBHaWxtb3JlICAoZ251IGF0IGN5Z251cy5jb20pCgoJKiBNYWtlZmlsZS5pbjogIFJvbGwgVkVSU0lPTiB0byA0LjMuMS4KClNhdCBEZWMgIDcgMDQ6MTI6MzUgMTk5MSAgSm9obiBHaWxtb3JlICAoZ251IGF0IGN5Z251cy5jb20pCgoJR0RCLTQuMyByZWxlYXNlIQoKCSogTWFrZWZpbGUuaW46ICBSb2xsIFZFUlNJT04gdG8gNC4zCgkqIFJFQURNRSwgVE9ETywgV0hBVFMuTkVXLCBkZXBlbmQ6ICBVcGRhdGUuCgoJKiBpbmZsb3cuYyAodGVybWluYWxfaW5mZXJpb3IpOiAgQXZvaWQgZXJyb3IgbXNnIGlmIGF0dGFjaGVkLgoKCSogZ21hbGxvYy5jOiAgRml4IGJ1ZyB0aGF0IGNhdXNlcyBtYWxsb2MgJiBmcmVlIHRvCglmYWlsIG9uIHN5c3RlbXMgd2hlcmUgcG9pbnRlcnMgaGF2ZSB0aGUgaGlnaCBiaXQgc2V0ICgweDgwMGVmY2YwCglmb3IgZXhhbXBsZSkuICBUaGUgcHJvYmxlbSBpcyB0aGF0IHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdHdvCglwb2ludGVycyBpcyBhIHNpZ25lZCBpbnRlZ2VyLCBzbyB0aGUgY29tcHV0YXRpb24KCgkgICAgICAgIChjaGFyICopIDB4ODAwZWZjZjAgLSAoY2hhciAqKSAwCgoJeWllbGRzIGEgbmVnYXRpdmUgdmFsdWUuICBUaGUgc2lnbiBvZiB0aGUgcmVzdWx0IG9mIHRoZSBtb2R1bHVzCglvcGVyYXRvciBpcyBtYWNoaW5lIGRlcGVuZGVudCBmb3IgbmVnYXRpdmUgb3BlcmFuZHMsIHRodXMgaXQgaXMKCXBvc3NpYmxlIGZvciBpdCB0byBlbmQgdXAgbmVnYXRpdmUuICBGcm9tIEZyZWQgRmlzaC4KClNhdCBEZWMgIDcgMDA6MDA6MTUgMTk5MSAgSy4gUmljaGFyZCBQaXhsZXkgIChyaWNoIGF0IHJ0bC5jeWdudXMuY29tKQoKCSogTWFrZWZpbGUuaW46IGluc3RhbGwgdXNpbmcgSU5TVEFMTF9QUk9HUkFNIGFuZCBJTlNUQUxMX0RBVEEuCgkgIGFkZGVkIGNsZWFuLWluZm8uICBhZGRlZCBzb21lIHN0YW5kYXJkcy50ZXh0IHN1cHBvcnQgYW5kIG1hZGUgaXQKCSAgbG9vayBsaWtlIG91ciBvdGhlciBNYWtlZmlsZXMuCgoJKiBjb25maWd1cmUuaW46IG1hcmsgdGhpcyBkaXJlY3RvcnkgdGFyZ2V0IGRlcGVuZGVudC4gIGNvbmZpZ3VyZQoJICBub3cgcnVucyBlbnRpcmVseSBpbiBvYmpkaXIgc28gbWFrZSBleGlzdGVuY2UgdGVzdHMgYW5kCgkgIHJlZmVyZW5jZXMgYWdhaW5zdCAke3NyY2Rpcn0uCgpGcmkgRGVjICA2IDA4OjMwOjM2IDE5OTEgIEZyZWQgRmlzaCAgKGZuZiBhdCBjeWdudXMuY29tKQoKCSogZHdhcmZyZWFkLmMgKGVudW1fdHlwZSwgc3RydWN0X3R5cGUpOiAgRml4ZXMgZm9yIG9wYXF1ZSBhbmQKCWFub255bW91cyBlbnVtZXJhdGlvbnMsIHN0cnVjdHVyZXMsIGFuZCB1bmlvbnMuICBOb3cgcGFzc2VzIGFsbAoJdGhlIGN1cnJlbnQgZ2RiIHRlc3Qgc3VpdGUgdGVzdHMuCgpUaHUgRGVjICA1IDIyOjQ2OjEzIDE5OTEgIEsuIFJpY2hhcmQgUGl4bGV5ICAocmljaCBhdCBydGwuY3lnbnVzLmNvbSkKCgkqIE1ha2VmaWxlLmluOiBpZGVzdGRpciBhbmQgZGRlc3RkaXIgZ28gYXdheS4gIEFkZGVkIGNvcHlyaWdodHMKCSAgYW5kIHNoaWZ0IGdwbCB0byB2Mi4gIEFkZGVkIENoYW5nZUxvZyBpZiBpdCBkaWRuJ3QgZXhpc3QuIGRvY2RpcgoJICBhbmQgbWFuZGlyIG5vdyBrZXllZCBvZmYgZGF0YWRpciBieSBkZWZhdWx0LgoKVGh1IERlYyAgNSAyMTo1MzoyMSAxOTkxICBKb2huIEdpbG1vcmUgIChnbnUgYXQgY3lnbnVzLmNvbSkKCgkqIHN5bXRhYi5jIChkZWNvZGVfbGluZV8xKTogIElmIFNLSVBfUFJPTE9HVUUgbGVhdmVzIHVzIGluCgltaWQtbGluZSwgYmUgbW9yZSBjYXJlZnVsIGFib3V0IHBvc3NpYmx5IGFkdmFuY2luZyB0byB0aGUgbmV4dCBsaW5lLgoKVGh1IERlYyAgNSAxODo1OTo1MSAxOTkxICBNaWNoYWVsIFRpZW1hbm4gICh0aWVtYW5uIGF0IGN5Z251cy5jb20pCgoJKiBjcGx1cy1kZW0uYyAoY3BsdXNfZGVtYW5nbGUpOiBDYWxsIGBzdHJpbmdfbmVlZCcgd2hlbgoJbnVsbC10ZXJtaW5hdGluZyBhIHBhcnRpYWxseS1jb21wdXRlZCBzdHJpbmcuCgpUaHUgRGVjICA1IDE4OjE5OjQzIDE5OTEgIEZyZWQgRmlzaCAgKGZuZiBhdCBjeWdudXMuY29tKQoKCSogZHdhcmZyZWFkLmMgKGVudW1fdHlwZSk6ICBCdWlsZCBhIGNvcnJlY3QgVFlQRV9OQU1FLCBhZGQgYQoJc3ltYm9sIHRvIHRoZSBzeW1ib2wgdGFibGUgZm9yIGVhY2ggbWVtYmVyIG9mIHRoZSBlbnVtLgoKCSogZHdhcmZyZWFkLmMgKHN0cnVjdF90eXBlKTogIEJ1aWxkIGEgY29ycmVjdCBUWVBFX05BTUUuCgoJKiBkd2FyZnJlYWQuYyAoYWRkX2VudW1fcHN5bWJvbCk6ICBOZXcgZnVuY3Rpb24gdG8gZXh0cmFjdCBlbnVtCgltZW1iZXIgbmFtZXMgYW5kIGFkZCB0aGVtIHRvIHRoZSBwYXJ0aWFsIHN5bWJvbCB0YWJsZSB3aGlsZQoJYnVpbGRpbmcgcGFydGlhbCBzeW1ib2wgdGFibGVzLgoKVGh1IERlYyAgNSAxNzozMTowNSAxOTkxICBKb2huIEdpbG1vcmUgIChnbnUgYXQgY3lnbnVzLmNvbSkKCgkqIHN5bXRhYi5jIChjaGVja19zdHViX21ldGhvZCk6ICBNdXN0IGFsbG9jYXRlIHR3byBleHRyYSBhcmd1bWVudAoJc2xvdHMgKG9uZSBmb3IgYHRoaXMnLCBvbmUgZm9yIGFyZ2xpc3QgdGVybWluYXRvcikuCgpUaHUgRGVjICA1IDEwOjUxOjA1IDE5OTEgIEZyZWQgRmlzaCAgKGZuZiBhdCBjeWdudXMuY29tKQoKCSogaW5mbG93LmMgKGNoaWxkX3Rlcm1pbmFsX2luZm8pOiBTdXBwbHkgbWlzc2luZyAnIicgY2hhcmFjdGVyLgoKCSogYnVpbGRzeW0uYyAoZGVmaW5lX3N5bWJvbCk6ICBTdXBwbHkgbWlzc2luZyBwYXJlbnRoZXNpcy4KClRodSBEZWMgIDUgMDM6MzQ6MjEgMTk5MSAgSm9obiBHaWxtb3JlICAoZ251IGF0IGN5Z251cy5jb20pCgoJKiBjb3JlZGVwLmMgKGZldGNoX2NvcmVfcmVnaXN0ZXJzKTogIEZlbmNlcG9zdCBlcnJvci4gIEZpeGVkIGJ5CglKYXkgTGVwcmVhdSA8bGVwcmVhdUBjcy51dGFoLmVkdT4uCgoJKiBpbmZsb3cuYzogIFJlbWVtYmVyIHdoZXRoZXIgR0RCIGhhcyBhIHRlcm1pbmFsLiAgQXZvaWQgc3dpdGNoaW5nCgl0ZXJtaW5hbHMgYmFjayBhbmQgZm9ydGggaWYgd2UgZG9uJ3QgaGF2ZSBvbmUuCgoJKiBjLWV4cC55IChwYXJzZV9udW1iZXIpOiAgWmVybyBpcyBub3QgYW4gdW5zaWduZWQgaW50IGNvbnN0YW50IQoJKiBkYnhyZWFkLmMgKHJlYWRfZGJ4X3N5bXRhYik6ICBFbnVtIHR5cGUgbnVtYmVycyBjYW4gYmUgaW4gKDEsMikgZm9ybS4KCglJbXByb3ZlIHR5cGUgcGFyc2luZy4KCSogYnVpbGRzeW0uYyAoZGVmaW5lX3N5bWJvbCwgcmVhZF9yYW5nZV90eXBlKTogQWRkCglsb25nX2tsdWRnZV9uYW1lIHRoYXQgcGFzc2VzIHRoZSBuYW1lcyBvZiByYW5nZSB0eXBlcyBiZWluZwoJZGVmaW5lZCwgZG93biB0byB3aGVyZSB3ZSBtdXN0IGNob29zZSBiZXR3ZWVuICdpbnQnIGFuZCAnbG9uZycKCXZhcmlhbnRzLiAgVGhpcyBmYWlscyBvbiBTdW4gQyBhbnl3YXkgc2luY2UgdGhlIGNvbXBpbGVyIGl0c2VsZiBpcwoJY29uZnVzZWQgYmV0d2VlbiBpbnQgYW5kIGxvbmcuCgkocmVhZF9hcnJheV90eXBlLCBjbGVhbnVwX3VuZGVmaW5lZF90eXBlcyk6ICBDb3JyZWN0IHRoZSBzaXplIG9mCglhcnJheSB0eXBlIHdob3NlIGVsZW1lbnQtdHlwZSBzaXplIGlzbid0IGltbWVkaWF0ZWx5IGtub3duLgoKCUVhcmx5IHByZXBhcmF0aW9uIHRvIGJsb3cgYXdheSBtYW55IGJ1aWx0aW4gdHlwZXMsIGJ1aWxkaW5nIHRoZW0KCW9uIHRoZSBmbHkgYXMgbmVlZGVkLiAgRG9uJ3QgY29tcGFyZSB0eXBlcyB0byBidWlsdGluIHR5cGVzIHdpdGgKCT09OyBleGFtaW5lIHRoZSByZWxldmFudCBmaWVsZHMgaW5zdGVhZC4KCSogY29mZnJlYWQuYyAocHJvY2Vzc19jb2ZmX3N5bWJvbDogQ19BUkcsIENfUkVHUEFSTSk6ICBBdm9pZCA9PS4KCSogYnVpbGRzeW0uYyAoZGVmaW5lX3N5bWJvbCwgY2FzZSAncCcpOiAgQXZvaWQgPT0uCgkqIHZhbG9wcy5jICh2YWx1ZV9hcmdfY29lcmNlKTogIEF2b2lkID09LiAgRG9uJ3QgYXNzdW1lIGhvc3QgYW5kCgl0YXJnZXQgdHlwZXMgYXJlIHRoZSBzYW1lLgoJKiB2YWxwcmludC5jICh2YWxfcHJpbnQpOiAgSSBmaW5hbGx5IHVuZGVyc3RhbmQgYXJyYXlzLCByZW1vdmUgRklYTUUuCgoJKiBzeW1taXNjLmMgKHByaW50cHN5bXNfY29tbWFuZCk6ICBSZWR1Y2UgcmVkdW5kYW5jeSwgYW5kIHB1dCBhbGwKCWFkZHJlc3NlcyBpbiBHREIgaXRzZWxmIGludG8gcGFyZW5zIGZvciBlYXN5IGNsZWFudXAgYW5kIGRpZmZpbmcuCgpXZWQgRGVjICA0IDIxOjA1OjMwIDE5OTEgIEZyZWQgRmlzaCAgKGZuZiBhdCBjeWdudXMuY29tKQoKCSogZHdhcmZyZWFkIChlbnVtX3R5cGUpOiAgQXJyYW5nZSBmb3IgdGhlIG9yZGVyIG9mIGVudW1lcmF0aW9uCgltZW1iZXJzIHRvIG1hdGNoIHRoZSBzb3VyY2UgY29kZSBvcmRlcjsgbm90IHRoZSBvcmRlciBpbiB0aGUKCUR3YXJmIGluZm9ybWF0aW9uLCB3aGljaCBpcyBleHBsaWNpdGx5IHJldmVyc2Ugb3JkZXIuCgpXZWQgRGVjICA0IDE4OjI0OjM5IDE5OTEgIEpvaG4gR2lsbW9yZSAgKGdudSBhdCBjeWdudXMuY29tKQoKCSogbWFpbi5jIChpbnB1dF9mcm9tX3Rlcm1pbmFsX3ApOiAgQ2hlY2sgd2hldGhlciBHREIgaGFzIGEKCXRlcm1pbmFsIGF0IGFsbC4KCShpbml0aWFsaXplX21haW4pOiAgUmV2aXNlIGRvYyBmb3IgYHNldCBlZGl0aW5nJy4KCldlZCBEZWMgIDQgMTU6MzY6MzkgMTk5MSAgRnJlZCBGaXNoICAoZm5mIGF0IGN5Z251cy5jb20pCgoJKiBkd2FyZnJlYWQuYyAoc3RydWN0X3R5cGUpOiAgSGFuZGxlIHN0cnVjdHVyZXMgYW5kIHVuaW9ucyB3aGljaAoJY29udGFpbiBESUUncyBvdGhlciB0aGFuIGp1c3QgbWVtYmVyIGRpZXMuCgpXZWQgRGVjICA0IDAxOjU5OjA1IDE5OTEgIEpvaG4gR2lsbW9yZSAgKGdudSBhdCBjeWdudXMuY29tKQoKCSogc3ltZmlsZS5jIChyZXJlYWRfc3ltYm9scyk6ICBBdm9pZCBrbHVkZ2luZyBtdGltZV9zZXQsIG5vdyB0aGF0CglCRkQgaXMgZml4ZWQuCgpUdWUgRGVjICAzIDE3OjI0OjU3IDE5OTEgIEpvaG4gR2lsbW9yZSAgKGdudSBhdCBjeWdudXMuY29tKQoKCSogTWFrZWZpbGUuaW46ICBWRVJTSU9OIDQuMi45Ni4KCgkqIG1haW4uYyAoaW5pdGlhbGl6ZV9tYWluKTogIFJldmlzZSBjb21tYW5kIGRlc2NyaXB0aW9ucy4KCSogY29tbWFuZC5jIChzaG93X3VzZXIpOiAgYGluZm8gdXNlcicgLT4gYHNob3cgdXNlcicuCQoJKiBzeW10YWIuYyAoX2luaXRpYWxpemVfc3ltdGFiKTogIFR5cG8gaW4gYGluZm8gdHlwZXMnIGRlc2MuCgoJKiBjb2ZmcmVhZC5jIChjb2ZmX3N5bWZpbGVfcmVhZCk6ICBBdm9pZCBzZWxlY3Rfc291cmNlX3N5bXRhYiwKCXNpbmNlIGl0IGlzIG5vdCBuZWVkZWQgYW5kIGNhbiBjYXVzZSBlcnJvcnMgd2hlbiBleGFtaW5pbmcgIi5vInMuCgkocmVhZF9jb2ZmX3N5bXRhYiwgZGVjb2RlX2Jhc2VfdHlwZSk6ICBVc2UgY29tcGxhaW4sIG5vdCBwcmludGYuCglQcmludCBzeW1ib2wgbmFtZSwgbm90IGl0cyBudW1iZXIuCglSZW1vdmUgIiNpZiBkZWZpbmVkKGNsaXBwZXIpICNkZWZpbmUgQkVMSUVWRV9QQ0NfUFJPTU9USU9OIiwgd2hpY2gKCXNvbWVkYXkgc2hvdWxkIGdvIGluIGEgY2xpcHBlciB0YXJnZXQgY29uZmlnIGZpbGUuCgoJKiBzeW1maWxlLmMgKGNvbXBhY3RfbWlzY19mdW5jdGlvbl92ZWN0b3IpOiAgSGFuZGxlIGVtcHR5IHZlY3Rvci4KCShjb21wbGFpbiwgY2xlYXJfY29tcGxhaW50cywgc3ltc19mcm9tX29iamZpbGUpOiAgRml4IGNvbXBsYWludAoJZm9ybWF0dGluZy4KCSogeGNvZmZleGVjLmM6ICBDaGFuZ2Ugc3ltc19mcm9tX29iamZpbGUgY2FsbGVyLgoKCSogc3BhcmMteGRlcC5jOiAgRm9yY2UgdG0tZmlsZSBhcyB0bS1zcGFyYy5oLCB0byBtYWtlIGl0IGNvbXBpbGUKCXdoZW4gY29uZmlndXJlZCBmb3IgY3Jvc3MgZGVidWdnaW5nLiAgRklYTUUsIHRoaXMgbmVlZHMgYSBtb3JlCglnZW5lcmFsIHNvbHV0aW9uLgoKTW9uIERlYyAgMiAxMTowNDowNSAxOTkxICBQZXIgQm90aG5lciAgKGJvdGhuZXIgYXQgY3lnbnVzLmNvbSkKCgkqIG1pcHMtdGRlcC5jIChpbml0X2V4dHJhX2ZyYW1lX2luZm8pOiAgRmxvYXQgcmVnaXN0ZXIKCSdpJyBoYXMgZ2RiLWludGVybmFsIG51bWJlciAnRlAwK2knLCBub3QgJzMyK2knLgoJKiBtaXBzcmVhZC5jIChuZXdfc3ltYm9sKTogIFRyYW5zbGF0ZSBnKysgc3BlY2lhbAoJc3ltYm9sICIkdCIgdG8gInRoaXMiLgoKU2F0IE5vdiAzMCAyMToyOTo1NSAxOTkxICBTdGV2ZSBDaGFtYmVybGFpbiAgKHNhYyBhdCBjeWdudXMuY29tKQoJQ2hhbmdlcyBkdWUgdG8gaW5jbHVkZSBmaWxlIHJlbmFtaW5nOgoKCSogeGNvZmZyZWFkLmM6CWludGVybmFsY29mZi5oCS0+Y29mZi9pbnRlcm5hbC5jLAoJICAJCWNvZmYtcnM2MDAwLmgJLT5jb2ZmL3JzNjAwMC5oCgkqIG1pcHNyZWFkLmM6CWNvZmYtbWlwcy5oCS0+Y29mZi9taXBzLmgKCSogZWxmcmVhZC5jOiAgICBlbGYtY29tbW9uLmgJLT5lbGYvY29tbW9uLmggCgkJCWVsZi1leHRlcm5hbC5oCS0+ZWxmL2V4dGVybmFsLmgsCgkJCWVsZi1pbnRlcm5hbC5oCS0+ZWxmL2ludGVybmFsLmgKCSogZHdhcmZyZWFkLmMJZHdhcmYuaAkJLT5lbGYvZHdhcmYuaAoJKiBkYnhyZWFkLmM6CWFvdXQ2NC5oCS0+YW91dC9hb3V0NjQuaAoJCQlzdGFiLmdudS5oCS0+YW91dC9zdGFiX2dudS5oCgkJICAgCgkqIGNvZmZyZWFkLmM6ICAgaW50ZXJuYWxjb2ZmLmgJLT5jb2ZmL2ludGVybmFsLmgKCSogYnVpbGRzeW0uYzogICBzdGFiLmdudS5oCS0+YW91dC9zdGFiX2dudS5oCgkqIGRlcGVuZCAgICAgICAgVXBkYXRlZCB0byB0YWtlIHRoZSBhYm92ZSBpbnRvIGFjY291bnQuCgpGcmkgTm92IDI5IDE2OjU5OjI1IDE5OTEgIEZyZWQgRmlzaCAgKGZuZiBhdCBjeWdudXMuY29tKQoKCSogY29uZmlndXJlLmluOiAgQWRkIFNWUjQgaTM4NiBjb25maWd1cmF0aW9ucy4KCgkqIGNvbmZpZy9taC1pMzg2djQsIGNvbmZpZy9tdC1pMzg2djQsIHRtLWkzODZ2NC5oLCB4bS1pMzg2djQuaDoKCU5ldyBmaWxlcyBmb3IgaTM4Ni9TVlI0LgoKCSogdG0taTM4NnYuaDogIEFsbG93IFNUQVJUX0lORkVSSU9SX1RSQVBTX0VYUEVDVEVEIGFuZAoJREVDUl9QQ19BRlRFUl9CUkVBSyB0byBiZSBwcmVkZWZpbmVkIGJ5IGZpbGVzIGluY2x1ZGluZyAKCXRtLWkzODZ2LmguCgoJKiBpMzg2LXRkZXAuYzogIEFkZCBzdXBwbHlfZ3JlZ3NldCgpLCBmaWxsX2dyZWdzZXQoKSwKCXN1cHBseV9mcHJlZ3NldCgpLCBhbmQgZmlsbF9mcHJlZ3NldCgpIGZ1bmN0aW9ucywgd2hpY2ggYXJlCgl0YXJnZXQgZGVwZW5kZW50IHN1cHBvcnQgZnVuY3Rpb25zIGZvciB0aGUgU1ZSNCAvcHJvYyByZWdpc3RlcgoJaW50ZXJmYWNlLgoKCSogZHdhcmZyZWFkLmMgKGVudW1fdHlwZSwgc3RydWN0X3R5cGUpOiAgRXhwYW5kIHJlY29nbml6ZWQKCWNvbXBpbGVyIGdlbmVyYXRlZCB0YWdzIHRvIGluY2x1ZGUgc3ltYm9scyBiZWdpbm5pbmcgd2l0aCAnLicgYXMKCXdlbGwgYXMgJ34nLgoKCSogc3ltdGFiLmMgKHNvdXJjZXNfaW5mbyk6ICBDaGFuZ2Ugc2ltcGxlIHByaW50ZiBvZiBlcnJvciBtZXNzYWdlCgl0byBjYWxsIHRvIGVycm9yKCkuCgpGcmkgTm92IDI5IDE2OjA0OjIxIDE5OTEgIFJvbGFuZCBILiBQZXNjaCAgKHBlc2NoIGF0IGN5Z251cy5jb20pCgoJKiBkb2MvZ2RiLnRleGluZm86IHJlbW92ZSBsZWFkaW5nIGNvbW1lbnRzIHRoYXQgc3Vydml2ZWQgTTQgYnV0CiAgICAgICAgZGVzY3JpYmVkIGl0cyByb2xlIGluIHRoZSBkb2M7IGFkZCBvbmUgbW9yZSBmb250IHRvIGNvbG9waG9uOwogICAgICAgIHN0cmVuZ3RoZW4gZGlzY2xhaW1lciBhYm91dCB1bnN1cHBvcnRlZCBjb25maWdzLgoKV2VkIE5vdiAyNyAwMToyMzo0MSAxOTkxICBKb2huIEdpbG1vcmUgIChnbnUgYXQgY3lnbnVzLmNvbSkKCglGaXggYnVncyBpbiBDKysgZGVidWdnaW5nLgoKCSogc3ltdGFiLmg6ICB0YXJnZXRfdHlwZSBpcyBub3QgdXNlZCBpbiByZWNvcmQgdHlwZXMuCglFbGltaW5hdGUgVFlQRV9NQUlOX1ZBUklBTlQgYW5kIFRZUEVfTkVYVF9WQVJJQU5ULiAgRWxpbWluYXRlCglsb29rdXBfbWV0aG9kX3R5cGUuICBBZGQgVFlQRV9UWVBFX1NQRUNJRklDIG1hY3JvLgoKCSogc3ltdGFiLmMgKGxvb2t1cF9tZW1iZXJfdHlwZSk6ICBEb24ndCBjaGFpbiB0aGVtIHVwLCBqdXN0CglhbGxvY2F0ZSBvbmUgaW4gc3ltYm9sX29ic3RhY2sgd2hlbiB3ZSBuZWVkIG9uZS4KCShhbGxvY2F0ZV9zdHViX21ldGhvZCk6ICBCdWlsZCBzdHViIGluIHN5bWJvbF9vYnN0YWNrLgoJKGNoZWNrX3N0dWJfbWV0aG9kKTogIE1vdmUgaGVyZSBmcm9tIHZhbHVlcy5jLiAgRG9uJ3QgZGVhbGxvY2F0ZQoJc3R1Yjsgb3ZlcndyaXRlIGl0LgoJKGxvb2t1cF9tZXRob2RfdHlwZSk6ICBHb25lIG5vdy4KCgkqIGJ1aWxkc3ltLmM6IEhhbmRsZSBnKysgdjEgc3RhYnMgYSBsaXR0bGUgYml0IGJldHRlci4KCUNoYW5nZSBzb21lIEMrKyBwYXJzaW5nIGVycm9yKClzIHRvIGNvbXBsYWluKCl0cy4KCSogYnVpbGRzeW0uYywgZmluZHZhci5jLCBwcmludGNtZC5jLCBzeW10YWIuYzogIE1ha2UgdW5pb25zIGFuZAoJc3RydWN0cyBoYXZlIHRoZSBzYW1lIHJlcHJlc2VudGF0aW9uIGFuZCB3b3JrIHRoZSBzYW1lIGFzIGZhciBhcwoJQysrIGlzIGNvbmNlcm5lZC4gCgkqIGJ1aWxkc3ltLmMsIHN5bXRhYi5jLCB2YWx1ZXMuYzogUmVtb3ZlIGFsbCByZWZlcmVuY2VzIHRvCglUWVBFX01BSU5fVkFSSUFOVCBhbmQgVFlQRV9ORVhUX1ZBUklBTlQuCgoJKiB2YWxvcHMuYzogIEltcHJvdmUgY29tbWVudHMgYW5kIGluZGVudGF0aW9uLiAgT25seSBjYWxsCgljaGVja19zdHViX21ldGhvZCB3aGVuIHRoZSBzdHViIGZsYWcgaXMgb24uCgkqIHZhbHByaW50LmM6ICBGaXggb3IgbWFyayBtaW5vciBidWdzIGFuZCB1bnBvcnRhYmlsaXRpZXMuCgkKCSogY29mZnJlYWQuYyAoYW5vbnltb3VzIHVuaW9ucyk6ICBBbGxvY2F0ZSBhIGNwbHVzIHN0cnVjdHVyZS4KCgkqIG1pcHNyZWFkLmM6ICBFbGltaW5hdGUgInRlbXBsYXRlIiB0eXBlcy4gIEJ1aWxkIG5ldywgcmVhbAoJdHlwZXMgd2hlbmV2ZXIgd2UgbmVlZCB0aGVtLiAgQWxsb2NhdGUgY3BsdXMgc3RydWN0dXJlcyBhcyBuZWVkZWQuCglCdWxsZXRwcm9vZiB0aGUgdHlwZSBwYXJzaW5nIGEgYml0IG1vcmUuICBNYXJrIHN0b3JhZ2UgbGVha3MuCgkocGFyc2VfdHlwZSk6ICBDb3B5IFRZUEVfVFlQRV9TUEVDSUZJQyB3aGVuIGNvcHlpbmcgYSByZWFsIHR5cGUKCW9uIHRvcCBvZiBhIHBhcnRpYWwgdHlwZS4KCkZyaSBOb3YgMjIgMTY6Mzk6NTcgMTk5MSAgSm9obiBHaWxtb3JlICAoZ251IGF0IGN5Z251cy5jb20pCgoJKiBpbmZsb3cuYyAodGVybWluYWxfaW5mZXJpb3IpOiAgQ2hlY2sgdGhlIHJlc3VsdHMgb2YgaW9jdGwncywgYW5kCglwcmludCBhIG1lc3NhZ2UgaWYgYW55IG9mIHRoZW0gZmFpbC4KCSh0ZXJtaW5hbF9vdXJzXzEpOiAgU3RvcmUgcmVzdWx0IG9mIGlvY3RsJ3MgZm9yIGRlYnVnZ2luZywgYnV0Cglkb24ndCBwcmludCAodGhlIHRlcm1pbmFsIGlzbid0IG91cnMuLi4pLgoKCSogdG0tdGFob2UuaCAoRlJBTUVfQVJHU19BRERSRVNTKTogIE5vIG5lZWQgdG8gb2Zmc2V0IGZyb20gZnJhbWUKCXBvaW50ZXIuCgoJKiBtMi1leHAueSAoTUFYLCBNSU4pOiAgUmVuYW1lIHRvIE1BWF9GVU5DLCBNSU5fRlVOQyB0byBhdm9pZAoJY29uZmxpY3RzIHdpdGggc3lzdGVtIGhlYWRlciBmaWxlcy4KCkZyaSBOb3YgMjIgMDg6Mjc6NDAgMTk5MSAgSm9obiBHaWxtb3JlICAoZ251IGF0IGN5Z251cy5jb20pCgoJKiBSb2xsIFZFUlNJT04gdG8gNC4yLjk1LgoKCSogYnVpbGRzeW0uYywgY29yZWRlcC5jLCBtZW0tYnJlYWsuYywgeGNvZmZyZWFkLmM6ICBQdXQgPHN0ZGlvLmg+CglmaXJzdCwgYmVmb3JlIGRlZnMuaC4KCSogY29uZmlnL21oLWkzODZzY286IE92ZXJyaWRlIGNvbXBpbGVyIHRvIGdjYywgcHJpbnQgd2FybmluZy4KCSogY29uZmlndXJlLmluOiAgSGFuZGxlIGkzODYtbm9uZS1hb3V0IHJhdGhlciB0aGFuIGkzODYtYW91dC1ub25lLgoJKiBpbmZwdHJhY2UuYywgbGFuZ3VhZ2UuaCwgdXRpbHMuYzogIExpbnQuCgkqIG0yLWV4cC55OiAgI3VuZGVmIE1BWCBhbmQgTUlOIGluIGNhc2Ugc3lzdGVtIGluY2x1ZGVzIHNldCB0aGVtLgoJKiB4bS10YWhvZS5oOiAgU2V0IEhPU1RfQllURV9PUkRFUi4gIEluY2x1ZGUgc3lzdGVtIHZlcnNpb25zIG9mCgl7QklHLExJVFRMRX1fRU5ESUFOIGFuZCB0aGUgSU5UX01BWCBmYW1pbHkgZmlyc3QsIHRvIGF2b2lkCglyZWRlZmluaXRpb24gd2FybmluZ3MuCgkqIGRlZnMuaDogIFJlb3JkZXIgdGhpbmdzIHNvIHRoYXQgdGhlIHhtLWZpbGUgZ2V0cyBmaXJzdCBjcmFjawoJYXQgI2RlZmluZSdzLCBmb2xsb3dlZCBieSBkZWZzLmggYW5kIHRoZW4gdGhlIHRtLWZpbGUuCgkqIE1ha2VmaWxlLmluOiAgUmVtb3ZlIHNwYWNlcyBhZnRlciAnaWdub3JlIGV4aXQgY29kZScgLSBmbGFncy4KCUxhdGUtbW9kZWwgQlNEICdtYWtlJ3MgZG9uJ3QgY29wZSB3aXRoIHRoZW0uCgpUaHUgTm92IDIxIDIzOjQ4OjU2IDE5OTEgIEpvaG4gR2lsbW9yZSAgKGdudSBhdCBjeWdudXMuY29tKQoKCSogTWFrZWZpbGUuaW46ICBSb2xsIG5ldyBmaWxlcyBpbnRvIHZhcmlvdXMgbGlzdHMuCgpUaHUgTm92IDIxIDE4OjI2OjExIDE5OTEgIEZyZWQgRmlzaCAgKGZuZiBhdCBjeWdudXMuY29tKQoKCSogZHdhcmZyZWFkLmMgKHN0cnVjdF90eXBlKTogIE11c3QgaW5pdGlhbGl6ZSB0aGUgYysrIHNwZWNpZmljCglwb3J0aW9uIG9mIHVuaW9uIHR5cGVzIGFzIHdlbGwgYXMgc3RydWN0IHR5cGVzLCBzaW5jZSBnZGIgYXR0ZW1wdHMKCXRvIHJlZmVyZW5jZSB0aGUgYysrIHNwZWNpZmljIGluZm8gZm9yIGJvdGggdHlwZXMuCgpUaHUgTm92IDIxIDEwOjIzOjUyIDE5OTEgIEpvaG4gR2lsbW9yZSAgKGdudSBhdCBjeWdudXMuY29tKQoKCSogTWFrZWZpbGUuaW46IFJvbGwgVkVSU0lPTiB0byA0LjIuOTAuCgoJKiBkZWZzLmg6ICBJbmNvcnBvcmF0ZSBwYXJhbS5oIGludG8gZGVmcy5oLiAgQWxsIHVzZXJzIGNoYW5nZWQuCgkqIHBhcmFtLW5vLXRtLmg6ICBDaGFuZ2UgdXNlcnMgdG8gZGVmaW5lIFRNX0ZJTEVfT1ZFUlJJREUgaW5zdGVhZC4KCSogcGFyYW0uaCwgcGFyYW0tbm8tdG0uaDogIFJlbW92ZWQuCgkqIFVwZGF0ZSBjb3B5cmlnaHRzIGluIGFsbCBjaGFuZ2VkIGZpbGVzLgoJKiBkYnhyZWFkLmMsIGR3YXJmcmVhZC5jLCBpbmZsb3cuYywgaW5mcnVuLmMsIG0yLWV4cC55LCBwdXRlbnYuYywKCXNvbGliLmMsIHN5bXRhYi5oLCB0bS11bWF4LmgsIHZhbHByaW50LmM6ICBMaW50LgoJKiB0bS1jb252ZXguaCwgdG0taHAzMDBocHV4LmgsIHRtLW1lcmxpbi5oLCB0bS1zcGFyYy5oLAoJeG0tbWVybGluLmg6ICBBdm9pZCBob3N0IGluY2x1ZGUgZmlsZXMgaW4gdGFyZ2V0IGRlc2NyaXB0aW9ucy4KCSogZ2V0cGFnZXNpemUuaDogIFJlbW92ZWQsIGxpYmliZXJ0eSBjb3BlcyBub3cuCgkqIE1ha2VmaWxlLmluOiAgUmVtb3ZlIGdldHBhZ2VzaXplLmgsIHBhcmFtLmgsIHBhcmFtLW5vLXRtLmguCgoJKiBleGVjLmMgKGV4ZWNfZmlsZXNfaW5mbyk6ICBJZiBgdmVyYm9zZScgaXMgc2V0LCBzaG93IGZpbGUgb2Zmc2V0CglhcyB3ZWxsLgoKCSogbWFpbi5jOiAgVXNlIGdldGN3ZCByYXRoZXIgdGhhbiBnZXR3ZC4KCSogc3RhbmRhbG9uZS5jOiAgRmFrZSBnZXRjd2QgcmF0aGVyIHRoYW4gZ2V0d2QuCgkqIHhtLSouaDogIFJlbW92ZSBmYWtlIHZhbHVlcyBvZiBNQVhQQVRITEVOLgoKCSogeGNvZmZleGVjLmM6ICBBZGQgLyogKi8gdG8gI2lmIDAnZCB0aGluZyB0byBoZWxwIEFOU0kuCgpXZWQgTm92IDIwIDE4OjM1OjU2IDE5OTEgIEpvaG4gR2lsbW9yZSAgKGdudSBhdCBjeWdudXMuY29tKQoKCSogUmVtb3ZlIGdkYi9ocC1pbmNsdWRlLiAgU3VwcG9ydCBmb3IgSFAgYS5vdXQgb2RkaXRpZXMgc2hvdWxkIGJlCglpbiBCRkQsIG5vdCBpbiBHREIuICBNb3ZlIGdkYi9ocC1pbmNsdWRlL2Eub3V0LmggdG8gaW5jbHVkZS9hLm91dC5ocC5oLgoKCSogaW5mcHRyYWNlLmMsIHRtLXN1bjM4Ni5oOiAgQ2FzaGllciA8YS5vdXQuZ251Lmg+LCByZW1vdmUgcmVmcy4KCgkqIGNvbmZpZ3VyZS5pbiwgeGNvbmZpZywgdGNvbmZpZywgTWFrZWZpbGUuaW4sIGRvYy9nZGJpbnQudGV4aW5mbzoKCU1ha2VmaWxlIGZyYWdtZW50cyBmb3IgdmFyaW91cyBob3N0cyBhbmQgdGFyZ2V0cyBub3cgY29tZSBmcm9tCglnZGIvY29uZmlnL21oLSogYW5kIGdkYi9jb25maWcvbXQtKi4gIFRoaXMgaXMgZm9yIGNvbnNpc3RlbmN5IHdpdGgKCW90aGVyIGNvbmZpZyBzZXR1cHMuCgoJKiByczYwMDAtcGluc24uYywgcnM2ay1vcGNvZGUuaDogIENsZWFuIHVwLgoJKiByczZrLW9wY29kZS5kZWY6ICBEZWxldGUuCgpXZWQgTm92IDIwIDA1OjA0OjQwIDE5OTEgIEZyZWQgRmlzaCAgKGZuZiBhdCBjeWdudXMuY29tKQoKCSogZHdhcmZyZWFkLmM6ICBSZWNvZ25pemUgb2Jzb2xldGUgZm9ybSBvZiBBVF9lbGVtZW50X2xpc3QKCWF0dHJpYnV0ZSBzdGlsbCB1c2VkIGJ5IGF0IGxlYXN0IG9uZSBBVCZUIGNvbXBpbGVyLCBhbmQgcG9zc2libHkKCW1vcmUuCgpUdWUgTm92IDE5IDA3OjUzOjU1IDE5OTEgIEZyZWQgRmlzaCAgKGZuZiBhdCBjeWdudXMuY29tKQoKCSogZHdhcmZyZWFkLmMgKGVudW1fdHlwZSwgc3RydWN0X3R5cGUpOiAgSWdub3JlIG5hbWVzIGludmVudGVkIGJ5CgloZWxwZnVsIGNvbXBpbGVycyBmb3IgYW5vbnltb3VzIHN0cnVjdHMsIHVuaW9ucywgYW5kIGVudW1zLgoKCSogYy1leHAueSwgbTItZXhwLnk6ICBBZGQgZGVmaW5lcyBmb3IgeXltYXhkZXB0aCwgeXlfeXlzLCBhbmQKCXl5X3l5diwgc28gbXVsdGlwbGUgcGFyc2VycyBwcm9kdWNlZCBieSBTVlI0IHZlcnNpb25zIG9mIHlhY2MKCWNhbiBjb2V4aXN0IGluIHRoZSBzYW1lIGV4ZWN1dGFibGUgd2l0aG91dCBjb2xsaXNpb24uCgoJKiBzeW10YWIuaDogIEFkZCBkZWNsYXJhdGlvbiBmb3IgbG9va3VwX3RlbXBsYXRlX3R5cGUoKSB0byBraWxsCgljb21waWxlciB3YXJuaW5ncyBhYm91dCBjb252ZXJzaW9ucyBmcm9tIGludCB0byBwb2ludGVyLgoKTW9uIE5vdiAxOCAxNzo0NToxOCAxOTkxICBGcmVkIEZpc2ggIChmbmYgYXQgY3lnbnVzLmNvbSkKCgkqIHByb2Nmcy5jOiAgTW92ZSBpbmNsdXNpb24gb2YgZGVmcy5oIHRvIGJlZm9yZSBwYXJhbS5oLCBhcyBpbgoJYWxsIHRoZSBvdGhlciBzb3VyY2UgZmlsZXMgdGhhdCBpbmNsdWRlIGJvdGguICBUaGlzIGlzIHJlcXVpcmVkCgl0byBzdXBwbHkgc29tZSB0eXBlZGVmcyB0aGF0IGFyZSB1c2VkIGluIGZpbGVzIGluY2x1ZGVkIGJ5IHBhcmFtLmguCgoJKiBtNjhrLXRkZXAuYyAobTY4a19za2lwX3Byb2xvZ3VlKTogIEFkZCBnZW5lcmljIG02OGsgc3VwcG9ydCBmb3IKCXNraXBwaW5nIGZ1bmN0aW9uIHByb2xvZ3VlcywgYWxhIHRoZSBvdGhlciBjcHUgZmFtaWxpZXMgKGkzODYsCgltaXBzLCBtODhrLCBldGMpLiAgQWRkIHRoZSBhYmlsaXR5IHRvIHNraXAgbW92bSBhbmQgZm1vdm0KCWluc3RydWN0aW9ucyBpbiB0aGUgcHJvbG9ndWVzLiAgU3RpbGwgbmVlZHMgc3VwcG9ydCBmb3IgcHJvZmlsZQoJKC1wIGNvbXBpbGVkKSBwcm9sb2d1ZSBzZXF1ZW5jZXMgKEZJWE1FKS4KCgkqIHRtLTY4ay5oOiAgQ2hhbmdlIFNLSVBfUFJPTE9HVUUgbWFjcm8gdG8gdXNlIHRoZSBuZXcgZ2VuZXJpYwoJbTY4ayBwcm9sb2d1ZSBza2lwcGluZyBmdW5jdGlvbiBieSBkZWZhdWx0LgoKCSogdG0tYWx0b3MuaCwgdG0taXNpLmg6ICBDb250aW51ZSB0byB1c2UgdGhlIG9sZCBkZWZpbml0aW9uIG9mCglTS0lQX1BST0xPR1VFLgoKTW9uIE5vdiAxOCAxNToxMjo0NSAxOTkxICBKb2huIEdpbG1vcmUgIChnbnUgYXQgY3lnbnVzLmNvbSkKCgkqIE1ha2VmaWxlLmluOiAgUmVtb3ZlIHRkZXNjIHN0dWZmLCBhbmQgZXh0cmEgYmxhbmtzIGJlZm9yZSBjb2xvbnMuCgkqIGJsb2NrZnJhbWUuYzogIFJlbW92ZSB0ZGVzYy1yZWxhdGVkIGNvZGUuICBEZWZhdWx0CglGUkFNRV9DSEFJTl9DT01CSU5FLgoJKiBpbmZydW4uYzogIFJlbW92ZSB0ZGVzYy1yZWxhdGVkIGNvZGUuCgkqIG04OGstdGRlcC5jIChmcmFtZV9jaGFpbl9jb21iaW5lLCBpbml0X2ZyYW1lX3BjKTogIFJlbW92ZSBjb3BpZXMKCW9mIGRlZmF1bHRhYmxlIHRoaW5ncy4KCSogdG0tbTg4ay5oOiAgTmV3IGZpbGUsIGNvbW1vbiB0byBhbGwgTW90byA4OGsgdGFyZ2V0IGNvbmZpZ3MuCglEZXJpdmVkIGZyb20gdG0tZGVsdGE4OC5oLgoJKiB0bS1kZWx0YTg4Lmg6ICBVc2UgaXQuCgkqIHhtLW04OGsuaDogIENvbW1vbiBmaWxlIGZvciA4OEsgaG9zdHMuICBSZW1vdmUgb2Jzb2xldGUgc3R1ZmYuCgkqIHhtLWRlbHRhODguaDogIFVzZSBpdC4KCSogdG0tKi5oOiAgUmVtb3ZlIEZSQU1FX0NIQUlOX0NPTUJJTkUgbWFjcm9zLCBzaW5jZSBhbGwgYXJlCglkZWZhdWx0LgoJKiBjb2ZmcmVhZC5jOiAgUmVtb3ZlIHRkZXNjIHN0dWZmLgoJKiB0Y29uZmlnL2RlbHRhODgsIHRjb25maWcvbTg4azogIFJlbW92ZSB0ZGVzYyBzdHVmZi4KCSogeGNvbmZpZy9tODhrOiAgUmVuYW1lIHRtLTg4ay5oIHRvIHRtLW04OGsuaC4KCk1vbiBOb3YgMTggMTM6NTE6MzcgMTk5MSAgUGVyIEJvdGhuZXIgIChib3RobmVyIGF0IGN5Z251cy5jb20pCgoJKiBzb3VyY2UuYyAob3Blbl9zb3VyY2VfZmlsZSk6ICBJZiBvcGVucCBmYWlscywgdHJ5IGFnYWluCgl1c2luZyBqdXN0IHRoZSBiYXNlIChub24tZGlyZWN0b3J5KSBwYXJ0IG9mIHRoZSBmaWxlbmFtZS4KCVRoaXMgc29sdmVzIHZhcmlvdXMgYW5ub3lpbmcgcHJvYmxlbXMsIHN1Y2ggYXMgd2hlbiB0aGUKCXNvdXJjZSB3YXMgY29tcGlsZWQgd2l0aCBhbiBhYnNvbHV0ZSBwYXRobmFtZSAtIGFuZCB0aGUKCXNvdXJjZSBmaWxlcyBoYXZlIG1vdmVkLiAgT3IgaWYgdGhlIHNvdXJjZSB3YXMgY29tcGlsZWQKCXVzaW5nIGEgcmVsYXRpdmUgcGF0aG5hbWUsIGl0IGNhbiBiZSBtb3JlIGNvbnZlbmllbnQKCXRvIGp1c3Qgc3BlY2lmaWMgdGhlIHNvdXJjZSBkaXJlY3RvcnkgdG8gdGhlIGRpciBjb21tYW5kLgoKTW9uIE5vdiAxOCAwMDowNDo0MSAxOTkxICBGcmVkIEZpc2ggIChmbmYgYXQgY3lnbnVzLmNvbSkKCgkqIGNwbHVzLWRlbS5jIChtdW5nZV9mdW5jdGlvbl9uYW1lKTogIEFkZCBtaXNzaW5nIHRoaXJkIGFyZyB0bwoJaW5zdGFuY2Ugb2YgY2FsbCB0byBkb190eXBlKCkuCgoJKiBkd2FyZnJlYWQuYzogIENoYW5nZXMgdG8gbWF0Y2ggbmV3IGR3YXJmLmguICBSZW1vdmUgCglBVF9kZXJpdl9saXN0LCBBVF9sb2NsaXN0LCBBVF9pbmNvbXBsZXRlLCBBVF9jb25zdF9kYXRhLAoJYW5kIEFUX2lzX2V4dGVybmFsLgoKU3VuIE5vdiAxNyAxNjoyMDo1MyAxOTkxICBNaWNoYWVsIFRpZW1hbm4gICh0aWVtYW5uIGF0IHJ0bC5jeWdudXMuY29tKQoKCSogc3ltdGFiLmggKHN0cnVjdCB0eXBlKTogTW92ZWQgQysrLXNwZWNpZmljIGZpZWxkcyBpbnRvIG5ldyB0eXBlCglgc3RydWN0IGNwbHVzX3N0cnVjdF90eXBlJy4gIE5vdyB0YWtlcyAxMCUgbGVzcyBtZW1vcnkuICBNYW55CgltYWNyb3MgY2hhbmdlZC4KCSogc3ltdGFiLmMgKGluaXRfdHlwZSk6IERvbid0IHNldCBmaWVsZHMgYmVsb25naW5nIHRvCglUWVBFX0NQTFVTX1NQRUNJRklDIHVubGVzcyBUWVBFIGlzIFRZUEVfQ09ERV9TVFJVQ1QuCgkqIGJ1aWxkc3ltLmMgKHJlYWRfdHlwZSk6IEFsbG9jYXRlIFRZUEVfQ1BMVVNfU1BFQ0lGSUMgZm9yCglUWVBFX0NPREVfU1RSVUNULgoJKHJlYWRfc3RydWN0X3R5cGUpOiBEaXR0by4gIEFsc28sIGFkZCBjb21tZW50cyBhYm91dCBob3cgd2UgY2FuCglkZWR1Y2UgVFlQRV9WUFRSX0ZJRUxETk8gZnJvbSBpbmhlcml0YW5jZSBpbmZvIGFuZCBmaWVsZG5hbWUgaW5mby4KCSogY29mZnJlYWQuYyAoZGVjb2RlX2Jhc2VfdHlwZSk6IEFsbG9jYXRlIFRZUEVfQ1BMVVNfU1BFQ0lGSUMgZm9yCglUWVBFX0NPREVfU1RSVUNULgoJKHJlYWRfc3RydWN0X3R5cGUpOiBEaXR0by4KCSogZHdhcmZyZWFkLmMgKHN0cnVjdF90eXBlKTogRGl0dG8uCgoJKiBzeW10YWIuYyAocmVhZF9yYW5nZV90eXBlKTogRG9uJ3Qgc2V0IFRZUEVfTUFJTl9WQVJJQU5ULgoJKGxvb2t1cF9wb2ludGVyX3R5cGUpOiBEb24ndCB1c2Ugb3Igc2V0IFRZUEVfTUFJTl9WQVJJQU5ULgoJKGxvb2t1cF9yZWZlcmVuY2VfdHlwZSk6IERpdHRvLgoKCSogY3BsdXMtZGVtLmM6IE1hbnkgY2hhbmdlcyBtYWRlIHRvIGhhbmRsZSBkZWNvZGluZyBvZgoJQU5TSS1tYW5nbGVkIG5hbWVzLgoJKiBzeW10YWIuYyAoZ2RiX21hbmdsZV9uYW1lKTogTWFuZ2xlL2RlbWFuZ2xlIEFOU0ktbWFuZ2xlZCBuYW1lcwoJYXMgd2VsbC4KCkZyaSBOb3YgMTUgMTc6NTc6NTkgMTk5MSAgU3R1IEdyb3NzbWFuICAoZ3Jvc3NtYW4gYXQgY3lnbnVzLmNvbSkKCgkqIG1pcHNyZWFkLmMgKHBhcnNlX3BhcnRpYWxfc3ltYm9scyk6ICBwYXRjaCB0byBrZWVwIERFQyBDCgljb21waWxlciBmcm9tIG1ha2luZyBnZGIgYm9tYiBvdXQuICBUaGFua3MgdG8gRWQgU2FudGlhZ28hCgpUaHUgTm92IDE0IDE5OjI3OjMwIDE5OTEgIEZyZWQgRmlzaCAgKGZuZiBhdCBjeWdudXMuY29tKQoKCSogc3ltZmlsZS5jOiAgQWRkIGZ1bmN0aW9uIGNvbXBhY3RfbWlzY19mdW5jdGlvbl92ZWN0b3IoKSB0bwoJcmVtb3ZlIGR1cGxpY2F0ZSBtaXNjIGZ1bmN0aW9uIHZlY3RvciBlbnRyaWVzLiAgU2VlIGNvbW1lbnRzCglpbiBzb3VyY2UgZm9yIHdoeSB0aGlzIGlzIG5lY2Vzc2FyeS9kZXNpcmFibGUuCgoJKiBkd2FyZnJlYWQuYzogIEFkZCBtaXNjIGZ1bmN0aW9uIHR5cGUgcGFyYW1ldGVyIHRvIGludGVybmFsCglyZWNvcmRfbWlzY19mdW5jdGlvbigpLiAgUmVtb3ZlIGNhbGxzIHRvIGluaXRfbWlzY19idW5jaGVzKCkKCWFuZCBjb25kZW5zZV9taXNjX2J1bmNoZXMoKSwgdGhlc2UgYXJlIG5vdyBkb25lIGluIGVsZnJlYWQuYy4KCgkqIGVsZnJlYWQuYzogIEFkZCBzdXBwb3J0IGZvciByZWFkaW5nIGJmZCBjYW5vbmljYWwgc3ltYm9sIHRhYmxlcwoJYW5kIGdlbmVyYXRpbmcgbWlzYyBmdW5jdGlvbiB2ZWN0b3IgZW50cmllcyBmb3IgZ2xvYmFsIGFuZAoJYWJzb2x1dGUgc3ltYm9scy4gIERvIGNhbGxzIHRvIGluaXRfbWlzY19idW5jaGVzKCkgYW5kCgljb25kZW5zZV9taXNjX2J1bmNoZXMoKSB3aGVyZSB0aGV5IHdpbGwgZW5jbG9zZSBhbGwgY2FsbHMgdG8KCXJlY29yZF9taXNjX2Z1bmN0aW9uKCksIGluY2x1ZGluZyB0aG9zZSBpbiBkd2FyZnJlYWQuYy4KClRodSBOb3YgMTQgMTc6MDI6MTEgMTk5MSAgUm9sYW5kIEguIFBlc2NoICAocGVzY2ggYXQgY3lnbnVzLmNvbSkKCgkqIGRvYy9NYWtlZmlsZS5pbjogbmV3IHRhcmdldHMgZ2RiLm1lLCBnZGIubXMsIGdkYi5tbQoJKHJvZmZhYmxlIGRvY3VtZW50YXRpb24pLgoJKiBkb2MvZ2RiLnRleGluZm86IGVtYmVkZGVkIGhpbnRzIChhcyBjb21tZW50cykgZm9yIGJldHRlcgoJdGV4aTJyb2ZmIGNvbnZlcnNpb24uCgpUaHUgTm92IDE0IDEzOjE4OjI1IDE5OTEgIEpvaG4gR2lsbW9yZSAgKGdudSBhdCBjeWdudXMuY29tKQoKCSogbTg4ay10ZGVwLmMgKGV4YW1pbmVfcHJvbG9ndWUpOiAgRGVhbCB3aXRoIE9SIGluc3RydWN0aW9ucwoJdGhhdCBzaHVmZmxlIHBhcmFtZXRlcnMgaW50byBvdGhlciByZWdzLgoJKiBzeW10YWIuYyAoZGVjb2RlX2xpbmVfMSk6ICBGaXggYnVnIGludHJvZHVjZWQgaW4gUGVyJ3MgY2hhbmdlCglvZiBOb3YgMTJ0aC4KCldlZCBOb3YgMTMgMTk6NTE6MTEgMTk5MSAgU3RldmUgQ2hhbWJlcmxhaW4gIChzYWMgYXQgY3lnbnVzLmNvbSkKCgkqIE1ha2VmaWxlLmluLCB4Y29uZmlnL2RlbHRhODggbWFkZSBpdCBpbnN0YWxsIGEgc3lzViBtYW51YWwgcGFnZTsKCWdkYi56IGludG8gdGhlIHJpZ2h0IHBsYWNlLgoKV2VkIE5vdiAxMyAxNjo0NToxMyAxOTkxICBKb2huIEdpbG1vcmUgIChnbnUgYXQgY3lnbnVzLmNvbSkKCglNb3Rvcm9sYSA4ODAwMCBwb3J0IHdpdGhvdXQgdGVhcnMsIEkgbWVhbiB3aXRob3V0IHRkZXNjcy4KCgkqIG04OGstdGRlcC5jOiAgQmxvdyBhd2F5IGFsbCB0ZGVzYyBzdHVmZi4KCVByb3ZpZGUgZnVuY3Rpb25zIGZvciBhbGwgdGhlIGZyYW1lLXJlbGF0ZWQgbWFjcm9zIGluCgl0bS1kZWx0YTg4LmguICBBZG9wdCBpOTYwLXN0eWxlIEVYVFJBX0ZSQU1FX0lORk8uCgkoZXhhbWluZV9wcm9sb2d1ZSwgZnJhbWVfZmluZF9zYXZlZF9yZWdzLCBza2lwX3Byb2xvZ3VlKTogIGJvcnJvdwoJZnJvbSBpOTYwLXRkZXAuYyBhbmQgYWRhcHQgdG8gdGhlIGZ1bmN0aW9uIHByb2xvZ3VlcyBvbiB0aGUgODhrLgoJKHJlYWRfbmV4dF9mcmFtZV9yZWcpOiAgQm9ycm93IGZyb20gbWlwcy10ZGVwLmMuCglGSVhNRTogIGZyYW1lX2xvY2Fsc19hZGRyZXNzIHNob3VsZCBnbyBhd2F5LgoKCSogdG0tZGVsdGE4OC5oOiAgRHVtcCBhbGwgdGhlIHRkZXNjIHN0dWZmLgoJTWFjcm9zIGZvciBhbGwgZnJhbWUtcmVsYXRlZCBzdHVmZiBjYWxsIGZucyBvZiBzYW1lIG5hbWUuCglSZW1vdmUgZHVwbGljYXRlZCBkZWZpbml0aW9ucy4gIEZQX1JFR05VTSBiZWNvbWVzIHNhbWUgYXMKCVNQX1JFR05VTS4gIAoKCSogeG0tODhrLmg6ICBFbGltaW5hdGUgbG90cyBvZiBsaWJyYXJ5IGRlcGVuZGVuY2llcywgbm93IGhhbmRsZWQKCWluIGxpYmliZXJ0eS4gIEVsaW1pbmF0ZSBLREIgbm9uc3VwcG9ydC4KCgkqIGRvYy9nZGJpbnQudGV4aW5mbzogIEFkZCBydWRpbWVudHMgb24gZnJhbWVzLiAgRklYTUUsIGFkZCBtb3JlLgoKCgkqIHN0YWNrLmMgKGZyYW1lX2luZm8pOiAgTWFyayBmcmFtZWxlc3MgZnVuY3Rpb25zLgoJUHJpbnQgbG9jYWxzIGFkZHJlc3MgKEZJWE1FLCByZW1vdmUgaWYgc2FtZSkuCgkqIGJsb2NrZnJhbWUuYzogIENvbW1lbnQgY2hhbmdlcywgRklYTUUgYWZ0ZXIuCgkqIGNvZmZyZWFkLmM6ICBFdmVuIHdpdGhvdXQgVERFU0MsIG5lZWQgdG8gemFwICJAIiBzeW1ib2xzLgoJRG9uJ3QgcmVnaXN0ZXIgZm9yIHdpZXJkIGZvcm1hdCBuYW1lczsgY2hhbmdlIHRoZSBuYW1lcyBpbiBCRkQuCgoJKiBhbGxvY2EuYywgbGFuZ3VhZ2UuYywgdGRlc2MuYzogIExpbnQuCgkqIHRkZXNjLmMsIHRkZXNjLWxpYjogRklYTUU6ICByZW1vdmUgdGhlc2UuCgpUdWUgTm92IDEyIDE5OjMwOjIyIDE5OTEgIEpvaG4gR2lsbW9yZSAgKGdudSBhdCBjeWdudXMuY29tKQoKCSogTWFrZWZpbGUuaW46ICBBZGQgdGRlc2MgbGlicmFyeSBzdXBwb3J0LiAgRml4dXBzIHRvIGxpbnQsCgljb3B5aW5nLmMgcnVsZXMuCgpUdWUgTm92IDEyIDEzOjQzOjI2IDE5OTEgIFBlciBCb3RobmVyICAoYm90aG5lciBhdCBjeWdudXMuY29tKQoKCSogc3ltdGFiLmMgKGRlY29kZV9saW5lXzEpOiAgUmVtb3ZlIHNwdXJpb3VzIGNhbGwgdG8gb3BlcmF0b3JfY2hhcnMuCgoJQWxsb3cgc2V0dGluZyBicmVha3BvaW50cyBvbiBDKysgZGVzdHJ1Y3RvcnMuCgkqIHZhbG9wcy5jIChkZXN0cnVjdG9yX25hbWVfcCk6ICBEb24ndCBjaGVjayBUWVBFX0hBU19ERVNUUlVDVE9SLAoJc2luY2UgaXQgbGllcy4gIFJlbHkgb24gY2FsbGVycyB0byBjYXRjaCBtaXNzaW5nIGRlc3RydWN0b3JzLgoJKiBzeW10YWIuYyAoZGVjb2RlX2xpbmVfMSk6ICBGb3IgZXhhbXBsZSAoc2VlIGFib3ZlKSwgaGVyZS4KCSogYnVpbGRzeW0uYywgc3ltdGFiLmg6ICBSZW1vdmUgVFlQRV9GTEFHU19IQVN7Q09OLERFfVNUUlVDVE9SCglmbGFncyBzaW5jZSB0aGV5IGFyZSBubyBsb25nZXIgdXNlZC4KCglGaXhlcyB0byBzdXBwb3J0IEMrKyBtZXRob2RzIHdpdGggZnVuY3Rpb25hbCBwYXJhbWV0ZXJzLgoJKiBjLWV4cC55IChmdW5jX21vZCBydWxlKTogIEFsbG93IChhbmQgaWdub3JlKSBsaXN0IG9mIHBhcmFtZXRlcgoJdHlwZXMgaW4gYSBmdW5jdGlvbiB0eXBlLgoJKiBldmFsLmMgKHBhcnNlX2FuZF9ldmFsX3R5cGUpLCB2YWx1ZS5oOiAgTmV3IGZ1bmN0aW9uLAoJcGFyc2VfYW5kX2V2YWxfdHlwZSwgaXMgYmFzZWQgb24gb2xkIGNvZGUgZnJvbSBjaGVja19zdHViX21ldGhvZC4KCUJ1dCBkb24ndCBhY3R1YWxseSBldmFsdWF0ZSB0aGUgY2FzdCwgc2luY2UgdGhhdCBjYWxscwoJdmFsdWVfY2FzdCgpLCB3aGNpaCBtYXkgZmFpbC4gIEp1c3QgZXh0cmFjdCB0aGUgdHlwZQoJZnJvbSB0aGUgcGFyc2VkIGV4cHJlc3Npb24uCgkqIHZhbHVlcy5jIChjaGVja19zdHViX21ldGhvZCk6ICBXaGlsZSBsb29waW5nIHRocm91Z2ggdGhlCglhcmd1bWVudHMsIGFkanVzdCBkZXB0aCAqYWZ0ZXIqIHBhcmFtZXRlciBoYXMgYmVlbiBoYW5kbGVkLgoJUmVwbGFjZSBjYWxsIGFuZCBzZXR1cCBvZiBwYXJzZV9hbmRfZXZhbCB3aXRoIG5ldyBmdW5jdGlvbgoJcGFyc2VfYW5kX2V2YWxfdHlwZS4KClR1ZSBOb3YgMTIgMDk6NDA6MDcgMTk5MSAgRnJlZCBGaXNoICAoZm5mIGF0IGN5Z251cy5jb20pCgoJKiB1dGlscy5jLCByZW0tbXVsdGkuc2hhcjogIFJlbW92ZSBmaXhlZCBhcmcgY291bnQgdmVyc2lvbiBvZgoJY29uY2F0KCkuCgoJKiBhbHRvcy14ZGVwLmMsIGFybS14ZGVwLmMsIGNvZmZyZWFkLmMsIGNvbW1hbmQuYywgY29udmV4LXhkZXAuYywKCWNvcmUuYywgZHdhcmZyZWFkLmMsIGdvdWxkLXhkZXAuYywgaW5mY21kLmMsIGxhbmd1YWdlLmMsCgltODhrLXhkZXAuYywgbWFpbi5jLCBwcmludGNtZC5jLCBweXIteGRlcC5jLCBzb3VyY2UuYywKCXN1bjM4Ni14ZGVwLmMsIHN5bW0teGRlcC5jLCB1bWF4LXhkZXAuYywgdmFsdWVzLmMsIHhjb2ZmcmVhZC5jOgoJQ2hhbmdlIGFsbCBpbnN0YW5jZXMgb2YgdXNlIG9mIGZpeGVkIGFyZ3MgY29uY2F0KCkgdG8gdmFyaWFibGUKCWFyZ3MgY29uY2F0KCkgbm93IGxvY2F0ZWQgaW4gbGliaWJlcnR5LgoKVHVlIE5vdiAxMiAwNzoyMzo0NiAxOTkxICBKb2huIEdpbG1vcmUgIChnbnUgYXQgY3lnbnVzLmNvbSkKCgkqIE1ha2VmaWxlLmluOiAgQWRkIHhjb2ZmcmVhZC5jLCB4Y29mZmV4ZWMuYy4KCSogeGNvZmZyZWFkLmM6ICBOZXcgZmlsZSBmb3IgaGFuZGxpbmcgQUlYIG1hbmdsZWQtY29mZiBmaWxlcy4KCSogeGNvbmZpZy9yczYwMDAsIHRjb25maWcvcnM2MDAwOiAgTmV3IGZpbGVzLgoJKiBidWlsZHN5bS5jOiAgQWRkIGhvb2tzIGZvciB4Y29mZnJlYWQuYy4KCSogcnM2MDAwLXBpbnNuLmMsIHJzNjAwMC10ZGVwLmMsIHJzNjAwMC14ZGVwLmMsIHRtLXJzNjAwMC5oLAoJeG0tcnM2MDAwLmgsIHJzNmstb3Bjb2RlLmRlZiwgcnM2ay1vcGNvZGUuaDogIE5ldyBmaWxlcy4KCSogeGNvZmZleGVjLmM6ICBOZXcgZmlsZSBmb3IgaGFuZGxpbmcgQUlYIHNoYXJlZCBsaWJyYXJpZXMuCgpNb24gTm92IDExIDE5OjE0OjMxIDE5OTEgIEZyZWQgRmlzaCAgKGZuZiBhdCBjeWdudXMuY29tKQoKCSogY29yZS5jOiAgTWlub3IgcmV3b3JkaW5nIG9mIG1lc3NhZ2UgdG8gdXNlciBjb250YWluaW5nIG5hbWUgb2YKCShhbmQgcG9zc2libHkgYXJndW1lbnRzIHRvKSB0aGUgcHJvZ3JhbSB0aGF0IGdlbmVyYXRlZCBhIGNvcmUKCWZpbGUuCgoJKiBlbGZyZWFkLmM6ICBSZW1vdmUgdGhlIHJlZ2lzdGVyX2FkZHIoKSBzdHViIG5vdyB0aGF0IGl0IGlzIG5vCglsb25nZXIgbmVlZGVkLgoKCSogcHJvY2ZzLmM6ICBNb3ZlIG1pc3BsYWNlZCAjZW5kaWYgZm9yIEFUVEFDSF9ERVRBQ0guICBBZGQgbmV3CglmZXRjaF9jb3JlX3JlZ2lzdGVycygpIGZ1bmN0aW9uIGZvciBjb3JlIGZpbGUgc3VwcG9ydC4KClNhdCBOb3YgIDkgMTM6Mzc6NTcgMTk5MSAgRnJlZCBGaXNoICAoZm5mIGF0IGN5Z251cy5jb20pCgoJKiBkd2FyZnJlYWQuYyAoZHdhcmZfcHN5bXRhYl90b19zeW10YWIpOiAgUmVtb3ZlIGxlZnRvdmVyIGNhbGwKCXRvIGRvX2NsZWFudXBzKCkgd2hpY2ggcmVzdWx0ZWQgZnJvbSBhIHByZXZpb3VzIGNoYW5nZS4KCgkqIGVsZnJlYWQuYzogIFJlLWVuYWJsZSBjb21waWxhdGlvbiBvZiByZWdpc3Rlcl9hZGRyKCkgc3R1YgoJd2hlbmV2ZXIgaXQgaXMgbm90IHN1cHBsaWVkIGJ5IGNvcmVkZXAuYwoKU2F0IE5vdiAgOSAwMDo0MDozMiAxOTkxICBKb2huIEdpbG1vcmUgIChnbnUgYXQgY3lnbnVzLmNvbSkKCglBZGQgdHJhY2tpbmcgb2Ygb2JqZWN0IGZpbGVzICh0aGF0IGNvbnRhaW4gc3ltYm9scykgdG8gZ2RiLgoJVGhpcyBpbmNsdWRlcyBhICJzdHJ1Y3Qgb2JqZmlsZSIgdGhhdCBvd25zIHN5bXRhYnMgYW5kIHBzeW10YWJzCgl0aGF0IHdlcmUgcmVhZCBpbiBmcm9tIHRoYXQgYmluYXJ5IGZpbGUuCgoJKiBzeW1maWxlLmg6ICBBZGQgc3RydWN0IG9iamZpbGUuICBBZGQgcG9pbnRlciB0byB0aGUgb2JqZmlsZQoJaW50byB0aGUgc3RydWN0IHN5bV9mbnMuCglSZXBsYWNlIGdsb2JhbCBgc3ltZmlsZScgYW5kIGBzeW1maWxlX210aW1lJyB3aXRoCglgc3ltZmlsZV9vYmpmaWxlJy4gIEFkZCBnbG9iYWwgb2JqZWN0X2ZpbGVzIGNoYWluLgoKCSogc3ltZmlsZS5jOiAgTW92ZSBwYXJhbS5oIGFib3ZlIHN5bXRhYi5oLgoJKHNvcnRfbWlzY19mdW5jdGlvbl92ZWN0b3IpOiAgQWRkLgoJKHN5bXNfZnJvbV9vYmpmaWxlKTogIFdhcyBzeW1zX2Zyb21fYmZkLgoJKHN5bWZpbGVfb3Blbik6ICBOb3cgcmV0dXJucyBvYmpmaWxlLgoJKGFsbG9jYXRlX29iamZpbGUpOiAgTmV3LgoJKGZyZWVfb2JqZmlsZSk6ICBOZXcsIHJlcGxhY2luZyBmcmVlX2FsbF8uKnN5bXRhYnMuCgkoc3ltZmlsZV9pbml0KTogIFRha2VzIG9iamZpbGUgYXJnLCBwdXRzIGl0IGluIHN5bV9mbnMgcmVzdWx0LgoJKHJlcmVhZF9zeW1ib2xzKTogIFNlYXJjaGVzIHdob2xlIGNoYWluIG9mIG9iamZpbGVzLgoJKGFsbG9jYXRlX3N5bXRhYik6ICBUYWtlcyBvYmpmaWxlIGFzIG5ldyBwYXJhbWV0ZXIsIGNoYWlucyB0aGVtLgoJSGFuZGxlIElOSVRfRVhUUkFfU1lNVEFCX0lORk8uCgkoZnJlZV9hbGxfcHN5bXRhYnMsIGZyZWVfYWxsX3N5bXRhYnMpOiAgTW92ZSBoZXJlIGZyb20gc3ltbWlzYy5jLgoKCSogZGJ4cmVhZC5jOiAgTWFrZSBtb3JlIGVycm9ycyBpbnRvIGNvbXBsYWludHMuCgkocHVzaF9zdWJmaWxlLCBwb3Bfc3ViZmlsZSk6ICBNb3ZlIHRvIGJ1aWxkc3ltLmMuCgkoZGJ4X3N5bWZpbGVfcmVhZCwgZGJ4X3N5bWZpbGVfaW5pdCwgZmlsbF9zeW1idWYsIHJlYWRfZGJ4X3N5bXRhYiwKCXN0YXJ0X3BzeW10YWIsIHBzeW10YWJfdG9fc3ltdGFiXzEsIHJlYWRfb2ZpbGVfc3ltdGFiLAoJZGJ4X3BzeW10YWJfdG9fc3ltdGFiLCApOiAgVXNlIGJmZCBvcHMsIGRvbid0IHVzZSBmaWxlIGRlc2NyaXB0b3IuCglQYXNzIG9iamZpbGUuICBDaGFuZ2UgY2FsbGVycy4KCShmaWxsX3N5bWJ1ZiwgU1dBUF9TWU1CT0wpOiAgVGFrZSBiZmQgYXMgYXJnLgoJKHJlYWRfZGJ4X3N5bXRhYik6ICBKdXN0IHdpcGUgb3V0IG5ldyBzeW1ib2xzLCBub3QgYWxsLCBvbiBlcnJvci4KCShlbmRfcHN5bXRhYik6ICBCbG93IGF3YXkgcHN5bXRhYiBpZiBlbXB0eS4KCShwcm9jZXNzX3N5bWJvbF9wYWlyKTogIFN3YWxsb3cgaW50byByZWFkX29maWxlX3N5bXRhYi4KCShwcm9jZXNzX29uZV9zeW1ib2wpOiAgVXNlIHB1c2hfY29udGV4dCBhbmQgcG9wX2NvbnRleHQuCgkodmlydHVhbF9jb250ZXh0KTogIERlbGV0ZSAjaWYgMCdkIG9ic29sZXRlIHN0dWZmLgoKCSogYnVpbGRzeW0uYyAoZW5kX3N5bXRhYik6ICBQYXNzIG9iamZpbGUuCgkoZGJ4X2xvb2t1cF90eXBlKTogIEhhbmRsZSBudWxsIHR5cGV2ZWN0b3IuCgkoZGJ4X2FsbG9jX3R5cGUpOiAgQ2hlY2sgZmlsZSBudW1iZXIsIG5vdCBzeW0gbnVtYmVyLCBmb3IgLTEuCgkoZmluZF9zeW1ib2xfaW5fbGlzdCk6ICBBZGQgZm9yIHhjb2ZmcmVhZC4KCShzdGFydF9zeW10YWIpOiAgRGVmYXVsdCB0eXBldmVjdG9yIGlzIGVtcHR5LiAgS2VlcCByZXVzaW5nIHNhbWUKCWNvbnRleHRfc3RhY2suCgkoZW5kX3N5bXRhYik6ICBUYWtlIG9iamZpbGUgYXJndW1lbnQgYW5kIHBhc3MgaXQgdG8KCWFsbG9jYXRlX3N5bXRhYi4gIERvbid0IG1ha2UgYSBzeW10YWIgaWYgbm8gYmxvY2tzIG9yIHN5bWJvbHMuCglIYW5kbGUgZW1wdHkgdHlwZXZlY3Rvci4KCShwdXNoX2NvbnRleHQpOiAgTmV3IGZ1bmN0aW9uIGZvciBjb250ZXh0IHN0YWNrIG5lc3RpbmcuCgkocmVhZF90eXBlKTogIE1hcmsgRklYTUUgd2hlcmUgd2UgbmVlZCB0byByZWludHJvZHVjZSB0eXBlIHNtYXNoaW5nLgoKCSogYnVpbGRzeW0uaCAocG9wX2NvbnRleHQpOiAgTWFjcm8sIHBhaXJlZCB3aXRoIHB1c2hfY29udGV4dC4KCShzdWJmaWxlX3N0YWNrKTogIE1vdmUgaGVyZSBmcm9tIGRieHJlYWQuYy4KCgkqIGNvZmZyZWFkLmMgKGVuZF9zeW10YWIsIHJlYWRfY29mZl9zeW10YWIpOiAgVGFrZSBhbmQgdXNlIG9iamZpbGUgYXJnLgoJKHJlYWRfY29mZl9zeW10YWIpOiAgQ2xlYW51cCBieSBmcmVlaW5nIG9iamZpbGUsIG5vdCBhbGwgc3ltdGFicy4KCgkqIG1pcHNyZWFkLmMgKHJlYWRfbWlwc19zeW10YWIsIHBhcnNlX3BhcnRpYWxfc3ltYm9scywgcGFyc2VfZmRyLAoJbmV3X3BzeW10YWIsIG5ld19zeW10YWIpOiAgVGFrZSBhbmQgdXNlIG9iamZpbGUgYXJnLgoKCSogZHdhcmZyZWFkLmMgKHNjYW5fY29tcGlsYXRpb25fdW5pdHMsIHN0YXJ0X3BzeW10YWIsCglwcm9jZXNzX2RpZXMsIGVuZF9zeW10YWIsIGR3YXJmX2J1aWxkX3BzeW10YWJzLAoJcmVhZF9sZXhpY2FsX2Jsb2NrX3Njb3BlLCByZWFkX2Z1bmNfc2NvcGUsIHJlYWRfZmlsZV9zY29wZSk6ICBUYWtlCglhbmQgdXNlIG9iamZpbGUgYXJndW1lbnQuCgkocHN5bXRhYl90b19zeW10YWJfMSwgcmVhZF9vZmlsZV9zeW10YWIpOiAgRG9uJ3QgdGFrZSBvciB1c2UgZmlsZQoJZGVzY3JpcHRvci4gIFVzZSBCRkQgaW50ZXJuYWwgZnVuY3Rpb25zIGluc3RlYWQuCgkoZW5kX3N5bXRhYik6ICBDYWxsIGdsb2JhbCBhbGxvY2F0ZV9zeW10YWIuCgoJKiBlbGZyZWFkLmMsIHRhcmdldC5jOiAgTWlub3IgY2hhbmdlcyB0byBhY2NvbW1vZGF0ZSBvYmpmaWxlcy4KCSogc3ltdGFiLmg6ICBwYXJ0aWFsX3N5bWJvbF90YWJsZSBoYXMgbm8gc3ltZmlsZV9uYW1lIG1lbWJlciBub3cuCgkoZm5fZmllbGRsaXN0cyB2b2Zmc2V0KTogIGF2b2lkIG5vbi1pbnQgYml0ZmllbGQuCgkoc3RydWN0IHN5bXRhYik6ICBBZGQgb2JqZmlsZSAqIGFuZCBvYmpmaWxlX2NoYWluICogb2Ygc3ltdGFicy4KCShzdHJ1Y3QgcGFydGlhbF9zeW10YWIpOiAgQWRkIG9iamZpbGUgKiBhbmQgb2JqZmlsZV9jaGFpbiAqIG9mCglwc3ltdGFicy4gIFJlbW92ZSBzeW1maWxlX25hbWUuCgoJKiBzeW1taXNjLmM6ICBMb3NlIGZyZWVfYWxsX3N5bXRhYnMsIGZyZWVfYWxsX3BzeW10YWJzLgoJKHByaW50c3ltc19jb21tYW5kKTogIFJlbmFtZSBmcm9tIHByaW50X3N5bXRhYnMuICBBZGQgc2VsZWN0aXZlCglsaXN0aW5nIGlmIDJuZCBhcmd1bWVudCBnaXZlbi4gIFByaW50IG9iamZpbGUgaW5mby4KCShwcmludHBzeW1zX2NvbW1hbmQpOiAgUmVuYW1lIGZyb20gcHJpbnRfcGFydGlhbF9zeW10YWJzLiAgRGl0dG8gYWxsLgoJKHByaW50b2JqZmlsZXNfY29tbWFuZCk6ICBOZXc7IHByaW50cyBvYmpmaWxlcyBsaXN0cywgYW5kIGNoZWNrcwoJZm9yIGNvbnNpc3RlbmN5IG9mIHN5bXRhYiwgcHN5bXRhYiwgYW5kIG9iamZpbGUgbGlzdHMuCgoJKiBzeW1maWxlLmgsIHN5bWZpbGUuYywgc3ltdGFiLmg6ICBMaW50CgpGcmkgTm92ICA4IDIzOjM4OjQ4IDE5OTEgIEpvaG4gR2lsbW9yZSAgKGdudSBhdCBjeWdudXMuY29tKQoKCSogY29tbWFuZC5jOiAgSW5jbHVkZSBwYXJhbS5oLgoJKiBkZWZzLmggKHdhcm5pbmdfc2V0dXAsIHdhcm5pbmcpOiAgRGVjbGFyZS4KCSogZXhwcHJpbnQuYyAocHJpbnRfc3ViZXhwLCBVTk9QX01FTVZBTCBjYXNlKTogIExpbnQuCgkqIGluZmxvdy5jIChuZXdfdHR5KTogIFVzZSBVU0VfT19OT0NUVFkgI2RlZmluZS4KCSogbGFuZ3VhZ2UuYywgcHJpbnRjbWQuYyAocHJpbnRfc2NhbGFyX2Zvcm1hdHRlZCksIHNpZ25hbWUuYywKCXN0YWNrLmM6ICBsaW50LgoKVGh1IE5vdiAgNyAxODoyNjoxNSAxOTkxICBTdGV2ZSBDaGFtYmVybGFpbiAgKHNhYyBhdCBydGwuY3lnbnVzLmNvbSkKCgkqIE1ha2VmaWxlLmluOiBsaW5rIHdpdGggbGliaWJlcnR5IGFmdGVyIGxpYnJlYWRsaW5lLCBzaW5jZQoJcmVhZGxpbmUgbWlnaHQgd2FudCBzb21ldGhpbmcgaW4gbGliaWJlcnR5LgoJKiBtODhrLXhkZXAuYzogRml4ZWQgdGhlIHJlZ2lzdGVyIG9mZnNldHMgaW4gdGhlIHB0cmFjZV91c2VyCglzdHJ1Y3QgZm9yIEJDUyA4OGsgbWFjaGluZXMuCgkqIHhtLW04OGsuaDogZG9uJ3QgZGVmaW5lIFVTSVpFIGlmIGFscmVhZHkgZGVmaW5lZC4KCSogY29uZmlndXJlLmluOiBBZGRlZCBkZWx0YTg4IHRhcmdldC4KClRodSBOb3YgIDcgMDQ6NTE6MTkgMTk5MSAgSm9obiBHaWxtb3JlICAoZ251IGF0IGN5Z251cy5jb20pCgoJKiBhbTI5ay1waW5zbi5jLCBhbTI5ay1vcGNvZGUuaDogIEZpeCBkZWNvZGluZyBvZiBtdGFjYywgZG1hYywgZm1hYy4KCgkqIHRtLSouaDogIFJlbW92ZSBSRUFEX0RCWF9GT1JNQVQsIENPRkZfRk9STUFULCBhbmQKCVJFQURfTUlQU19GT1JNQVQsIHdoaWNoIGhhdmUgYmVlbiB1bnVzZWQgc2luY2UgQkZELiAgU3RpbGwKCXJlbWFpbmluZyBpcyBDT0ZGX05PX0xPTkdfRklMRV9OQU1FUy4KCSogdG0tc3VuMy5oLCB0bS1hbHRvcy5oOiAgUmVtb3ZlIGRldHJpdHVzIGFjY2lkZW50YWxseSBsZWZ0IGZyb20KCWZ1bmN0aW9uIGNhbGxpbmcgY29kZSBtb3ZlZCB0byBtNjhrLXRkZXAuYy4KCldlZCBOb3YgIDYgMTc6MjE6NTkgMTk5MSAgSm9obiBHaWxtb3JlICAoZ251IGF0IGN5Z251cy5jb20pCgoJKiBjb2ZmcmVhZC5jOiAgRWxpbWluYXRlIGNfbnN5bXMgaW4gZmF2b3Igb2YgY19uYXV4LgoJQ29tcGxhaW4gaWYgbm8gYXV4ZW50cyBvbiAuYmYgYW5kIC5lZiBGQ04gc3ltYm9scywgYW5kIGFzc3VtZQoJbG90cyBvZiBsaW5lIG51bWJlcnMuCgkoaW5pdF9saW5lbm9zLCBlbnRlcl9saW5lbm9zKTogIFVzZSBhIHNlbnRpbmVsIGF0IHRoZSBlbmQgb2YgdGhlCglyZWFkLWluIGxpbmVub3MsIHRvIG1ha2UgZm9yIGEgZmFzdCwgc2FmZSBsb29wLWVuZCB0ZXN0LgoKV2VkIE5vdiAgNiAwMjo1NDowOCAxOTkxICBTdGV2ZSBDaGFtYmVybGFpbiAgKHNhYyBhdCBjeWdudXMuY29tKQoKCSogY29mZnJlYWQuYyAocmVhZF9jb2ZmX3N5bXRhYik6IGNvZmZyZWFkIHVzZWQgdG8gcmVseSBvbiB0aGUKCXhfc3ltLnhfbWlzYy54X2xuc3oueF9sbm5vIGZpZWxkIGdpdmluZyB0aGUgIyBvZiBsaW5ub3MgaW4gYQoJZnVuY3Rpb24uIFR3byBvZiB0aGUgZm9ybWF0cyBJJ20gdXNpbmcgKDI5ayBhbmQgODhrKSBkb24ndCBzZWVtIHRvCglzZXQgaXQuIFRocyBwYXRjaCB0byBmY25fbGFzdF9saW5lIGFuZCAoZW50ZXJfbGluZW5vcykgaXMgYW4KCWF0dGVtcHQgdG8gdXNlIHRoZSBhY3R1YWwgc2l6ZSBvZiB0aGUgbGlubm8gdGFibGUgaW4gdGhlIGZpbGUgdG8gc2V0Cgl0aGUgbnVtYmVyIG9mIGxpbmVub3MgdG8gcHJvY2Vzcy4KClR1ZSBOb3YgIDUgMjI6NDc6NDYgMTk5MSAgU3RldmUgQ2hhbWJlcmxhaW4gIChzYWMgYXQgY3lnbnVzLmNvbSkKCgkqIE1ha2VmaWxlLmluOiBwdXQgYSAtIGluZnJvbnQgb2YgdGhlIG12IHkudGFiLmMgYy1leHAudGFiLmMgYW5kCgltdiB5LnRhYi5jIG0yLWV4cC50YWIuYywgc28gdGhhdCBpZiBiaXNvbiBpcyB1c2VkLCBhbmQgdGhlIGZpbGVzCglhcmUgY3JlYXRlZCBpbiBwbGFjZSwgc28gdGhlIG12IGZhaWxzLCB0aGVuIHRoZSBtYWtlIGNvbnRpbnVlcy4KClR1ZSBOb3YgIDUgMTY6NDc6NDcgMTk5MSAgUGVyIEJvdGhuZXIgIChib3RobmVyIGF0IGN5Z251cy5jb20pCgoJQWRkIEMrKyBhcyBhIHNlcGFyYXRlIGxhbmd1YWdlLgoJKiBkZWZzLmggKGVudW0gbGFuZ3VhZ2UpOiBBZGQgbGFuZ3VhZ2VfY3BsdXMuCgkqIGR3YXJmcmVhZC5jIChlbmRfc3ltdGFiKTogIFN1cHBvcnQgbGFuZ3VhZ2VfY3BsdXMuCgkqIGMtZXhwLnk6ICBBZGQgbmV3IHN0cnVjdCBsYW5ndWFnZV9kZWZuIGNwbHVzX2xhbmd1YWdlX2RlZm4uCglEb24ndCBzZXQgYyB0byBiZSB0aGUgZGVmYXVsdCBsYW5ndWFnZSAoc2VlIG1haW4uYykuCgkqIGMtZXhwLnkgKHl5bGV4KTogIE9ubHkgbG9vayBmb3IgZmllbGQgb2YgdGhpcyBpZgoJbGFuZ3VhZ2UgaXMgQysrLiAgKEZpcnN0IGRpZmZlcmVuY2UgZnJvbSBDISkKCSogbGFuZ3VhZ2UuYzogIEFkZCBjYXNlIGJyYW5jaGVzIGZvciBDKysgKGN1cnJlbnRseSwgYWxsCgl0aGUgc2FtZSBhcyBDKS4gIEFsc28sIGFkZCBjKysgdG8gInVzYWdlIiBub3RlIGZvciAic2V0IGxhbmciLgoJKiB2YWxwcmludC5jICh0eXBlZGVmX3ByaW50KS4gIEFkZCBjYXNlIGJyYW5jaGVzIGZvciBDKysuIAoJKiBtYWluLmMgKG1haW4pOiAgTmV3IHdheSB0byBzZXQgaW5pdGlhbCBsYW5ndWFnZTogIExvb2sgYXQKCWZpbGUgZXh0ZW5zaW9uIG9mIHBzeW10YWIgY29udGFpbmluZyBtYWluKCkuICAoU2FtZSBhcyB3ZQoJZG8gZm9yIHN5bXRhYnMsIGJ1dCBhdm9pZCBsb2FkaW5nIHRoZSBzeW10YWIgeWV0LikKCSogc3ltdGFiLmM6IE5ldyByb3V0aW5lIGZpbmRfbWFpbl9wc3ltdGFiKCksIHVzZWQgYnkgbWFpbigpCgl0byBzZXQgaW5pdGlhbCBsYW5ndWFnZS4KCSogc3ltZmlsZS5jIChhbGxvY2F0ZV9zeW10YWIpOiAgTW92ZSBjb2RlIGZvciBtYXBwaW5nIGZpbGUKCWV4dGVuc2lvbnMtPiBsYW5ndWFnZXMgdG8gbmV3IGRlZHVjZV9sYW5ndWFnZV9mcm9tX2ZpbGVuYW1lKCkuCgoJRml4IGEgQysrIHByb2JsZW0gd2hlbiBsb29raW5nIGZvciBtZXRob2RzIGluIHN1cGVyLWNsYXNzZXMuCglUaGVyZSB3YXMgY29uZnVzaW9uIGJldHdlZW4gYmFzZSBhbmQgZGVyaXZlZCB0eXBlcy4KCSogdmFsb3BzLmMgKHZhbHVlX2ZuX2ZpZWxkKTogIENoYW5nZSBmdW5jdGlvbiBpbnRlcmZhY2UuCgkqIHZhbHVlcy5jOiAgVXNlIG5ldyB2YWx1ZV9mbl9maWVsZCBpbnRlcmZhY2UuCgpNb24gTm92ICA0IDEwOjQ5OjMzIDE5OTEgIFBlciBCb3RobmVyICAoYm90aG5lciBhdCBjeWdudXMuY29tKQoKCSogaW5mcnVuLmM6ICBGaXhlZCB0eXBvIGluIGNvbW1lbnQuCgkqIHV0aWxzLmM6ICBBbGwgdGhlIHYqZnByaW50ZiBlbXVsYXRpb24gaXMgbm93IGluIGxpYmliZXJ0eSwKCXNvIHdlIGNhbiBnZXQgcmlkIG9mIHNvbWUganVuay4KCSogeG0tc3VuM29zNC5oLCB4bS1zdW40b3M0LmgsIHhjb25maWcvZGVjc3RhdGlvbiwgeGNvbmZpZy9pMzg2c2NvLAoJeGNvbmZpZy9zdW4zb3M0LCB4Y29uZmlnL3N1bjRvczQ6IERvbmB0IG5lZWQgSEFWRV9TVFJTVFIgYW55IG1vcmUuCgkqIG02OGstcGluc24uYyAocHJpbnRfaW5zbl9hcmcpOiAgU3VwcG9ydCBCQi9CVy9CTAoJdHlwZSBvcGVyYW5kcywgYXMgdXNlZCBieSBicmFuY2ggaW5zdHJ1Y3Rpb25zLgoJKiBnbWFsbG9jLmM6IEZpeCBwcm90b3R5cGUgb2YgbWVtY3B5LgoJKiBlbGZyZWFkLmM6IENvbW1lbnQgb3V0IHJlZ2lzdGVyX2FkZHIsIHNpbmNlIGl0IGNvbmZsaWN0cwoJd2l0aCB0aGUgb25lIGluIGNvcmVkZXAuYy4KCSogYnVpbGRzeW0uaDogIFJlbW92ZSBleHRlcm4gZGVjbGFyYXRpb25zIG9mIHR3byBmdW5jdGlvbnMKCXRoYXQgYXJlIHJlYWxseSBzdGF0aWMgaW4gYnVpbGRzeW0uYy4KCSogdG0tbWlwcy5oOiBBZGQgc3ltYm9saWMgbmFtZXMgZm9yIG1vcmUgcmVnaXN0ZXJzLgoJKiBtaXBzLXhkZXAuYyAoc3RvcmVfaW5mZXJpb3JfcmVnaXN0ZXJzKTogVXNlIG5ldyByZWdpc3RlciBuYW1lcy4KCSogeG0tbWlwcy5oOiBTaW1wbGlmeSBSRUdJU1RFUl9VX0FERFIsIHNpbmNlIGl0IGlzIG5vdwoJb25seSB1c2VkIGZvciBjb3JlIGZpbGVzLCBub3QgcHRyYWNlLiAgVGhlcmVmb3JlLAoJdGhlIEtFUk5FTF9VX0FERFIgaGFjayBpcyBubyBsb25nZXIgbmVlZGVkLgoJVGhlIG1hcHBpbmcgdG8gcHRyYWNlIG51bWJlciBpcyBub3cgaW4gaW4gbWlwcy14ZGVwLmMuCgkqIG1pcHMteGRlcC5jOiAgRGVmaW5lIFJFR0lTVEVSX1BUUkFDRV9BRERSICh1c2luZyB0aGUKCW1hcHBpbmcgZnJvbSB0aGUgb2xkIFJFR0lTVEVSX1VfQUREUiksIGFuZCB1c2UgaXQKCWluIHtmZXRjaCxzdG9yZX1faW5mZXJpb3JfcmVnaXN0ZXJzLgoJKiBtaXBzcmVhZC5jOiBSZW5hbWUgI2luY2x1ZGUgZWNvZmYuaCB0byBuZXcgbmFtZSBjb2ZmLW1pcHMuaC4KCSogbWlwcy10ZGVwLmMgKG1pcHNfcHVzaF9kdW1teV9mcmFtZSwgbWlwc19wb3BfZnJhbWUpOgoJU2F2ZS9yZXN0b3JlIEZQIHJlZ3MgY29ycmVjdGx5ICg/KS4KCSogZGJ4cmVhZC5jOiBSZW1vdmUgZHVwbGljYXRlIGRlZmluZV9zeW1ib2wgYW5kIHR5cGVfc3lub255bV9uYW1lCgkodGhlc2UgaGFkIGJlZW4gcHJldmlvdXNseSBtb3ZlZCB0byBidWlsZHN5bS5jKS4KCUhlbmNlLCBkZWZpbmVfc3ltYm9sIGJlY29tZXMgZXh0ZXJuIGluc3RlYWQgb2Ygc3RhdGljLgoJKiBidWlsZHN5bS5jIChyZWFkX3N0cnVjdF90eXBlKTogIENvbW1lbnQgb3V0IGJvZ3VzIGhhbmRsaW5nCglvZiBDKysgb3BlcmF0b3IgbWV0aG9kcy4gIE1pbm9yIGhhY2tpbmcgb2YgcmVhZGluZyBvZiBjbGFzcwoJY29udGV4dHMuIE1ha2UgZGVmaW5lX3N5bWJvbCBub24tc3RhdGljLCBzbyBkYnhyZWFkLmMgY2FuIGNhbGwgaXQuCgpGcmkgTm92ICAxIDExOjA1OjQ3IDE5OTEgIEpvaG4gR2lsbW9yZSAgKGdudSBhdCBjeWdudXMuY29tKQoKCSogbWlwc3JlYWQuYyAocmVhZF9taXBzX3N5bXRhYiwgcmVhZF90aGVfbWlwc19zeW10YWIpOiAgVXNlIHJlYWwKCWZpbGVuYW1lIHdpdGggZXJyb3IgbWVzc2FnZXMuCgkqIHN0YWNrLmMgKGZyYW1lX3NlbGVjdF9jb21tYW5kKTogIFJlbmFtZSB0byBzZWxlY3RfZnJhbWVfY29tbWFuZAoJdG8gYXZvaWQgImZyIiBhbmQgImZyYSIgaGF2aW5nIG5vbnVuaXF1ZSBjb21wbGV0aW9ucy4KCSogc3ltZmlsZS5jIChzb3J0X3N5bXRhYl9zeW1zKTogIElnbm9yZSBzb3J0IG9mIHplcm8gc3ltdGFiICouCgkoc3ltZmlsZV9pbml0KTogIFByaW50IGZpbGUgZm9ybWF0IG5hbWUgd2hlbiB1bmFibGUgdG8gaGFuZGxlIGl0LgoJKGZyZWVfbmFtZWRfc3ltdGFicyk6ICBVc2UgQkxPQ0tWRUNUT1IgcmF0aGVyIHRoYW4gb2Jzb2xldGUgQkxPQ0tMSVNULgoJKiBzeW1taXNjLmMgKGZyZWVfc3ltdGFiKTogIE9ubHkgZnJlZSBsaW5ldGFibGUgaWYgbm9uemVyby4KCSogc3ltdGFiLmg6ICBSZW1vdmUgb2Jzb2xldGUgQkxPQ0tMSVNUIG1hY3Jvcy4KClRodSBPY3QgMzEgMTg6MTI6NDMgMTk5MSAgU3R1IEdyb3NzbWFuICAoZ3Jvc3NtYW4gYXQgY3lnbnVzLmNvbSkKCgkqIGluZnJ1bi5jICh3YWl0X2Zvcl9pbmZlcmlvcik6ICBhbm90aGVyIHN0ZXBpL25leHRpIGZpeC4gIEVuc3VyZQoJdGhhdCBzdG9wX3N0ZXAgaXMgMSBhdCBib3R0b20gb2YgbWFpbiBsb29wLiAgSSBkb24ndCBrbm93IHdoeSB0aGlzCgluZWVkcyB0byBiZSBkb25lLCBidXQgaXQgaGVscHMgbWUgc2xlZXAgYmV0dGVyIGF0IG5pZ2h0LgoKU3VuIE9jdCAyNyAxODoxODozOSAxOTkxICBTdHUgR3Jvc3NtYW4gIChncm9zc21hbiBhdCBjeWdudXMuY29tKQoKCSogbWFpbi5jIChpbml0aWFsaXplX2hpc3RvcnkpOiAgUmVhZCBoaXN0b3J5IGFmdGVyIHJlYWRpbmcgYWxsCglpbml0IGZpbGVzLgoKU3VuIE9jdCAyNyAxNDowOToyNSAxOTkxICBKb2huIEdpbG1vcmUgIChnbnUgYXQgY3lnbnVzLmNvbSkKCgkqIGJ1aWxkc3ltLmM6ICBCcmVhayBvdXQgaW5pdGlhbCBtYWxsb2Mgc2l6ZXMuCgkocmVjb3JkX2xpbmUpOiAgUmVjb3JkIGRpcmVjdGx5IGluIGEgc3ViZmlsZS4gIEFsbG9jIG9uIGRlbWFuZC4KCShjb21wYXJlX2xpbmVfbnVtYmVycyk6ICBBZGQgZnJvbSB4Y29mZnJlYWQuYy4KCShlbmRfc3ltdGFiKTogIE5ldyBwYXJhbXMgc2F5IHdoZXRoZXIgdG8gc29ydCBwZW5kaW5ncyBhbmQKCWxpbmV0YWJsZS4gIFBhdGNoIGJsb2NrIHN0YWJzIGlmIGRlZmluZWQuICBTaHJpbmsgbGluZXRhYmxlIGJlZm9yZQoJYWxsb2NhdGluZyB0aGUgc3ltdGFiLgoJKiBidWlsZHN5bS5oOiAgRGVsZXRlIGxpbmVfdmVjdG9yKiBhbmQgcHJldl9saW5lX251bWJlci4gIEFkZCAKCWdsb2JhbF9zdGFicyBhbmQgZmlsZV9zdGFicyBmb3IgeGNvZmZyZWFkLgoJKiBkYnhyZWFkLmMgKHN0YXJ0X3N1YmZpbGUpOiAgTW92ZSB0byBidWlsZHN5bS4gIENoYW5nZSBhYm92ZSBjYWxscy4KCSogc3ltdGFiLmg6ICBMSU5FVEFCTEUoc3ltdGFiKSBjYW4gbm93IGJlIG51bGwuICBaYXAgTElORUxJU1QuCgkqIHN5bW1pc2MuYywgc3ltdGFiLmM6ICBDb3BlIHdpdGggbnVsbCBMSU5FVEFCTEVzLgoKCSogYmxvY2tmcmFtZS5jOiAgUGFzcyBmcm9tbGVhZiB0byBJTklUX0VYVFJBX0ZSQU1FX0lORk8uCgkqIHRtLTI5ay5oLCB0bS04OGsuaCwgdG0taTk2MC5oLCB0bS1pcml4My5oLCB0bS1taXBzLmgsIHRtLXB5ci5oLAoJdG0tc3BhcmMuaDogIEFjY2VwdCBmcm9tbGVhZiBwYXJhbWV0ZXIuCgkqIGMtZXhwLnkgKHl5ZXJyb3IpOiAgUGFzcyBlcnJvciBtZXNzYWdlIGlmIGdpdmVuLgoJKiBjb25maWd1cmUuaW46ICBBZGQgcnM2MDAwIGhvc3QgYW5kIHRhcmdldC4KCSogaW5mbG93LmMgKG5ld190dHkpOiAgT19OT0NUVFkga2x1ZGdlIGZvciBSUy82MDAwLgoJKiBzeW1maWxlLmggKGVudHJ5X3BvaW50KTogIEFkZC4KClNhdCBPY3QgMjYgMDA6MTY6MzIgMTk5MSAgSm9obiBHaWxtb3JlICAoZ251IGF0IGN5Z3VzLmNvbSkKCgkqIGJ1aWxkc3ltLmM6ICBOZXcgZmlsZS4gIEJyZWFrcyBvdXQgc3ltYm9sLXRhYmxlLWJ1aWxkaW5nIHJvdXRpbmVzCglmcm9tIGRieHJlYWQuYywgc28gdGhleSBjYW4gYmUgc2hhcmVkIHdpdGggeGNvZmZyZWFkLmMuCgkqIGJ1aWxkc3ltLmg6ICBOZXcgZmlsZS4gIERlY2xhcmF0aW9ucyBmb3IgYnVpbGRzeW0uYyB1c2Vycy4KCSogZGJ4cmVhZC5jOiAgUmVtb3ZlIGxhcmdlIGNodW5rcyBpbnRvIGJ1aWxkc3ltLmMuCgkqIE1ha2VmaWxlLmluOiAgQWRkIGJ1aWxkc3ltLmMgYW5kIGJ1aWxkc3ltLmguCgoJKiBzeW1maWxlLmMgKHN5bXNfZnJvbV9iZmQpOiAgTmV3IHJvdXRpbmUuCgkoYWRkX3N5bWJvbF9maWxlKTogIENhbGwgaXQgdG8gZG8gdGhlIHJlYWwgd29yay4KCShzeW1zX2Zyb21fYmZkKTogIEluaXRpYWxpemUgZW50cnlfcG9pbnQgYmVmb3JlIGNhbGxpbmcgc3ltZmlsZV9pbml0LgoJKiBzeW10YWIuaCwgc3ltZmlsZS5jLCBjb2ZmcmVhZC5jLCBtaXBzcmVhZC5jLCBkd2FyZnJlYWQuYzoKCUF2b2lkIGRlY2xhcmluZyBvciBzZXR0aW5nIGVudHJ5X3BvaW50IChzeW1maWxlLmggJiBzeW1maWxlLmMgY29wZSkuCgpGcmkgT2N0IDI1IDEwOjU4OjE2IDE5OTEgIE1hcmsgRWljaGluICAoZWljaGluIGF0IGN5Z251cy5jb20pCgoJKiBjcGx1cy1kZW0uYyAoY3BsdXMtZGVtYW5nbGUpOiBhZGRlZCBzdXBwb3J0IGZvciB0ZW1wbGF0ZXMsIHN0YXRpYwoJZGF0YSwgYW5kIHRoZSBuZXcgKGNvcnJlY3QpIG1hbmdsaW5nIGZvciBkZXN0cnVjdG9ycy4KCgkqIGR3YXJmcmVhZC5jOiAoZHdhcmZ3YXJuKTogY3JlYXRlZCBhIHZhcmFyZ3MgdmVyc2lvbiBvZgoJZHdhcmZ3YXJuLCBmb3Igbm9uIF9fU1REQ19fIGNvbXBpbGVycy4KCgkqIGMtZXhwLnk6ICh5eWxleCk6IGFkZGVkIG1hdGNoIGZvciAidGVtcGxhdGUiIHRva2VuLgoJKHR5cGViYXNlKTogYWRkZWQgVEVNUExBVEUgbmFtZSAnPCcgdHlwZSAnPicgY2xhdXNlLCBmb3IgZXhwbGljaXQKCXNwZWNpZmljYXRpb24gb2YgdGVtcGxhdGUgdHlwZXMuCgoJKiBzeW10YWIuYzogKGxvb2t1cF90ZW1wbGF0ZV90eXBlKTogbmV3IGZ1bmN0aW9uIGZvciBmaW5kaW5nCgl0ZW1wbGF0ZXMgaW4gc3ltYm9sIHRhYmxlLgoJKHR5cGVfbmFtZV9ub190YWcpOiBjaGFuZ2VkIHRvIGV4cGxpY2l0bHkgY2hlY2sgZm9yIHMvdS9lIGF0IHRoZQoJYmVnaW5uaW5nIG9mIHRoZSBzeW1ib2wgLSBpZiBpdCBpcyBhIHRlbXBsYXRlLCBub25lIG9mIHRoZXNlIHdpbGwKCWJlIHRoZXJlIChidXQgdGhlIG5hbWUgd2lsbCBzdGlsbCBjb250YWluIHNwYWNlcy4pCgpGcmkgT2N0IDI1IDE4OjU5OjMyIDE5OTEgIFBlciBCb3RobmVyICAoYm90aG5lciBhdCBjeWdudXMuY29tKQoKCVZhcmlvdXMgZml4ZXMgdG8gaW1wcm92ZSBnKysgZGVidWdnaW5nLgoJKiBzeW10YWIuaDogIEFkZCBpc19jb25zdCBhbmQgaXNfdm9sYXRpbGUgZmxhZ3MgZm9yIGVhY2ggbWV0aG9kLgoJVGhlc2UgYXJlIGJpdCBmaWVsZHMgLSB0YWtlIHRoZWlyIHNwYWNlIGZyb20gdm9mZnNldCwKCXdoaWNoIHNocmlua3MgdG8gMzAgYml0cy4gIFNpbmNlIHZvZmZzZXQgaXMgbm93IGEgYml0ZmllbGQsCgltYWtlIGl0IHVuc2lnbmVkIGZvciBwb3J0YWJpbGl0eS4gIFRoaXMgY2hhbmdlcyBpdHMgaW50ZXJwcmV0YXRpb24KCXNsaWdodGx5OiAgU3RhdGljIG1ldGhvZHMgbm93IGhhdmUgdm9mZnNldCAxIGluc3RlYWQgb2YgLTEsCglhbmQgdmlydHVhbCBvZmZzZXRzIHN0YXJ0IGF0IDIsIG5vdCAxLgoJKiBzeW10YWIuYzogIFJlbmFtZWQgZ2RiX21hbmdsZV90eXBlbmFtZSB0byBnZGJfbWFuZ2xlX25hbWUsCglzaW5jZSBpdCBub3cgcmV0dXJucyBhbiBlbnRpcmUgbWFnbGVkIG1ldGhvZCBuYW1lLCBub3QganVzdAoJdGhlIHR5cGUgcGFydC4gIFRoaXMgYXZvaWRzIHNvbWUgZHVwbGljYXRpb24uCglJdCBhbHNvIGFsbG93cyB1cyB0byBjb3JyZWN0bHkgbWFuZ2xlIGNvbnN0IGFuZCB2b2xhdGlsZQoJbWV0aG9kcyAodXNpbmcgdGhlIG5ldyBpc19jb25zdCBhbmQgaXNfdm9sYXRpbGUgYml0IGZpZWxkcwoJbWVudGlvbmVkIGFib3ZlKS4KCSogdmFscHJpbnQuYyAodHlwZV9wcmludF9iYXNlKSwgdmFsdWVzLmMgKGNoZWNrX3N0dWJfbWV0aG9kKToKCVNpbXBsaWZ5IGJ5IHVzaW5nIG5ldyBnZGJfbWFuZ2xlX25hbWUuCgkqIHZhbHVlcy5jICh2YWx1ZV9oZWFkb2YpOiAgRml4IHRvIGNvcnJlY3RseSBoYW5kbGUgc2luZ2xlCglpbmhlcml0YW5jZSAoYWN0dWFsbHkgdHdvIGZpeGVzLCBlaXRoZXIgb2Ygd2hpY2ggc3VmZmljZXMpLgoJKiBkYnhyZWFkLmMgKHJlYWRfc3RydWN0X3R5cGUpOiAgSGFuZGxlIGNvbnN0IGFuZCB2b2xhdGlsZQoJbWV0aG9kIHNwZWNpZmllcnMuCgkqIGRieHJlYWQuYyAocmVhZF9zdHJ1Y3RfdHlwZSk6ICBZZXQgb25lIG1vcmUgcGxhY2Ugd2hlcmUKCXdlIG11c3QgaGFuZGxlICdcXCcgY29udGludWF0aW9ucy4KCSogdmFscHJpbnQuYyAodnRibF9wdHJfbmFtZSk6IEFkZCBmaW5hbCAnXDAnLgoKRnJpIE9jdCAyNSAxNjowNjozOCAxOTkxICBTdHUgR3Jvc3NtYW4gIChncm9zc21hbiBhdCBjeWdudXMuY29tKQoKCSogdG0tc3BhcmMuaCwgdG0tNjhrLmggKEVYVFJBQ1RfUkVUVVJOX1ZBTFVFKTogIGZpeCBvdXRwdXQgb2YKCXNob3J0IHJldHVybiB2YWx1ZXMgZm9yIHNwYXJjIGFuZCA2OGsuICBQYXRjaCBmcm9tIFBhdWwgRWdnZXJ0LgoKCSogY29mZnJlYWQuYywgY29yZWRlcC5jLCBpMzg2LXhkZXAuYzogIGluc3RhbGwgcGF0Y2hlcyBmb3IKCVN5c1YvMzg2IDMuMiBmcm9tIE1hdXJvIERlUGFsbWEuCgpGcmkgT2N0IDI1IDAyOjAyOjEzIDE5OTEgIEpvaG4gR2lsbW9yZSAgKGdudSBhdCBjeWdudXMuY29tKQoKCSogY29yZS5jIChjb3JlX2ZpbGVfaW5mbyksIGV4ZWMuYyAoZXhlY19maWxlX2luZm8pOiAgUHJpbnQgZmlsZQoJdHlwZS4gIFVzZSBwcmludGZfZmlsdGVyZWQuCgoJKiB2YWxvcHMuYyAodmFsdWVfZmV0Y2hfbGF6eSk6ICBBdm9pZCAwLWxlbmd0aCBmZXRjaGVzLgoKVGh1IE9jdCAyNCAyMzowNjo0MCAxOTkxICBGcmVkIEZpc2ggIChmbmYgYXQgY3lnbnVzLmNvbSkKCgkqIGR3YXJmcmVhZC5jOiAgQWRkIGNhc3RzIHRvIHJlbW92ZSBjb21waWxlciB3YXJuaW5ncy4KCgkqIHRtLTNiMS5oLCB0bS02OGsuaCwgdG0tYWx0b3MuaCwgdG0tYW1peC5oLCB0bS1ocDMwMGJzZC5oLAoJdG0taHAzMDBocHV4LmgsIHRtLWlzaS5oLCB0bS1uZXdzLmgsIHRtLXBuLmgsIHRtLXN1bjIuaCwKCXRtLXN1bjMuaDogIFJlbW92ZSBsb2NhbGx5IGR1cGxpY2F0ZWQgY29kZSBmb3IgY2FsbGluZyBmdW5jdGlvbnMKCWluIHRoZSBpbmZlcmlvci4gIFRoZSBvbmx5IGRpZmZlcmVuY2VzIHdlcmUgaW4gdGhlIHNwZWNpZmljIHRyYXAKCXZlY3RvcnMgdXNlZCBhbmQgd2hldGhlciBvciBub3QgYW4gZnB1IHdhcyBwcmVzZW50LiAgVGhlc2UgYXJlCglub3cgaGFuZGxlZCBieSBhcHByb3ByaWF0ZSBkZWZpbml0aW9ucyBvZiBCUFRfVkVDVE9SIGFuZAoJSEFWRV82ODg4MSByZXNwZWN0aXZlbHkuICBPdGhlciBtaW5vciBvYnZpb3VzIGNsZWFudXBzLgoKCSogdmFsb3BzLmM6ICBDb3JyZWN0IGEgbWlub3IgbWlzc3BlbGxpbmcuCgoJKiB1dGlscy5jOiAgUmVtb3ZlIGxvY2FsIEJTRC9VU0cgaGFja3MgdGhhdCBhcmUgbm93IGluIGxpYmliZXJ0eS4KCgkqIGR3YXJmcmVhZC5jOiAgUmVtb3ZlIHByb3RvdHlwZSBmb3IgZHdhcmZ3YXJuLiAgRG9lcyBub3Qgd29yawoJd2l0aCA8dmFyYXJncy5oPi4KClRodSBPY3QgMjQgMDk6MzM6NDQgMTk5MSAgSm9obiBHaWxtb3JlICAoZ251IGF0IGN5Z251cy5jb20pCgoJKiBzdGFjay5jIChmcmFtZV9jb21tYW5kKTogIEFsd2F5cyBwcmludC4gIFVzZSBuZXcKCWZyYW1lX3NlbGVjdF9jb21tYW5kIHRvIHNlbGVjdCBhIGZyYW1lIHdpdGhvdXQgcHJpbnRpbmcuCQoKCSogZHdhcmZyZWFkLmM6ICBVc2UgPHZhcmFyZ3MuaD4sIHNpbmNlIDxzdGRhcmcuaD4gaXMgbm90IHBvcnRhYmxlLgoKVGh1IE9jdCAyNCAwMTozMjo1MSAxOTkxICBGcmVkIEZpc2ggIChmbmYgYXQgY3lnbnVzLmNvbSkKCiAgICAgICAgKiBkd2FyZnJlYWQuYzogTmV3IGZpbGUgZm9yIERXQVJGIGRlYnVnZ2luZyBmb3JtYXQgc3VwcG9ydC4KCgkqIGVsZnJlYWQuYzogTmV3IGZpbGUgZm9yIEVMRiBvYmplY3QgZmlsZSBmb3JtYXQgc3VwcG9ydC4KCgkqIHByb2Nmcy5jOiBOZXcgZmlsZSBmb3IgU1ZSNCAvcHJvYyAocHJvY2VzcyBmaWxlIHN5c3RlbSkgc3VwcG9ydC4KCgkqIHRtLWFtaXguaCwgeG0tYW1peC5oLCB0Y29uZmlnL2FtaXgsIHhjb25maWcvYW1peDogTmV3IGZpbGVzIGZvcgoJQW1pZ2EgVU5JWCBzdXBwb3J0LgoKCSogeG0tc3ZyNC5oLCB0bS1zdnI0Lmg6IE5ldyBmaWxlcyBmb3IgU1ZSNCBzdXBwb3J0LgoKCSogeG0tbTY4ay5oOiBOZXcgZmlsZSBmb3IgaG9zdCBtYWNoaW5lcyB3aXRoIG02OGsgY3B1LgoKCSogTWFrZWZpbGUuaW46IEFkZCBlbGZyZWFkLmMgYW5kIGR3YXJmcmVhZC5jIHRvIFNGSUxFU19NQUlORElSLgoJQWRkIGVsZnJlYWQubyBhbmQgZHdhcmZyZWFkLm8gdG8gT0JTLgoKCSogc3ltZmlsZS5oOiBBZGQgImVsZiIgdG8gbGlzdCBvZiBzdXBwb3J0ZWQgZm9ybWF0cyBpbiBjb21tZW50LgoKCSogYy1leHAueSwgZGVmcy5oLCBzeW10YWIuaCwgdmFscHJpbnQuYzogIEFkZCB0aHJlZSBuZXcgYnVpbHRpbgoJdHlwZXMgdG8gZ2RiLCBidWlsdGluX3R5cGVfbG9uZ19kb3VibGUsIGJ1aWx0aW5fdHlwZV9jb21wbGV4LCBhbmQKCWJ1aWx0aW5fdHlwZV9kb3VibGVfY29tcGxleC4gIEFkZCBhbmQgdXNlIG5ldyBUQVJHRVRfU0hPUlRfQklULAoJVEFSR0VUX0lOVF9CSVQsIFRBUkdFVF9MT05HX0JJVCwgVEFSR0VUX0ZMT0FUX0JJVCwKCVRBUkdFVF9ET1VCTEVfQklULCBUQVJHRVRfTE9OR19ET1VCTEVfQklULCBUQVJHRVRfQ09NUExFWF9CSVQsIGFuZAoJVEFSR0VUX0RPVUJMRV9DT01QTEVYX0JJVCwgYXMgdGhlIHNpemVzIGluIGJpdHMgb2YgdGhlIGluZGljYXRlZAoJdHlwZXMgb24gdGhlIHRhcmdldCBtYWNoaW5lIChhbGEgdGhlIGV4aXN0aW5nIFRBUkdFVF9MT05HX0xPTkdfQklUKS4KCgkqIGluZnJ1bi5jOiAgV2hlbiB1c2luZyBTVlI0IC9wcm9jIGludGVyZmFjZSBpbnN0ZWFkIG9mIHB0cmFjZSgpLAoJY2FsbCBwcm9jX3NldF9leGVjX3RyYXAoKSB0byBzZXR1cCBjaGlsZCB0byBzdG9wIGF0IGZpcnN0IGluc3RydWN0aW9uLgoKCSogaW5mdGFyZy5jOiBXaGVuIHVzaW5nIFNWUjQgL3Byb2MgaW50ZXJmYWNlLCBjYWxsIHByb2Nfd2FpdCgpCglyYXRoZXIgdGhhbiB3YWl0KCkuCgoJKiBtNjhrLXRkZXAuYzogQWRkIG5ldyByb3V0aW5lcyBzdXBwbHlfZ3JlZ3NldCgpLCBmaWxsX2dyZWdzZXQoKSwKCXN1cHBseV9mcHJlZ3NldCgpLCBhbmQgZmlsbF9mcHJlZ3NldCgpLCB3aGljaCBhcmUgbWFjaGluZQoJZGVwZW5kZW50IHN1cHBvcnQgcm91dGluZXMgZm9yIFNWUjQgL3Byb2MgaW50ZXJmYWNlLgoKCSogdXRpbHMuYzogQWRkIHdhcm5pbmdfc2V0dXAoKSBhbmQgd2FybmluZygpLiAgV2FybmluZygpIGJlaGF2ZXMKCXRoZSBzYW1lIGFzIGVycm9yKCkgZXhjZXB0IHRoYXQgaXQgcmV0dXJucyBub3JtYWxseSByYXRoZXIgdGhhbgoJanVtcGluZyBiYWNrIHRvIGNvbW1hbmQgbGV2ZWwuICBNb2R1bGVzIHRoYXQgZG9uJ3Qgd2FudCB0byBjYWxsCgl3YXJuaW5nKCkgZm9yIHNvbWUgcmVhc29uLCBidXQgd2FudCB0byBwcm9kdWNlIHRoZWlyIG93biB3YXJuaW5ncywKCWNhbiBjYWxsIHdhcm5pbmdfc2V0dXAoKSB0byBlbnN1cmUgY29tcGF0aWJpbGl0eSB3aXRoIHRoZSB3YXkKCXdhcm5pbmcoKSBhbmQgZXJyb3IoKSBkZWFsIHdpdGggdGhlIHRlcm1pbmFsLgoKCSogc3ltdGFiLmM6IE1ha2UgaW50ZXJuYWwgZXJyb3JzIHByb2R1Y2UgbW9yZSB1c2VmdWwgbWVzc2FnZXMuCgoJKiB0bS02OGsuaDogTW92ZSBjb2RlIHRoYXQgaXMgZHVwbGljYXRlZCBpbiBhbG1vc3QgZXZlcnkgc2luZ2xlCgltNjhrIGJhc2VkIG1hY2hpbmUncyBjb25maWd1cmF0aW9uIGZpbGVzIHRvIHRoaXMgY29tbW9uIGZpbGUuCglEdXBsaWNhdGlvbnMgaW4gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMgc3RpbGwgbmVlZCB0byBiZSByZW1vdmVkCgkoRklYTUUpLgoKCSogaW5mcnVuLmMgKGNoaWxkX2NyZWF0ZV9pbmZlcmlvcik6IFN5c3RlbSBWIHZlcnNpb25zIG11c3QgY2FsbAoJc2V0cGdycCgpIHdpdGggbm8gYXJndW1lbnRzLCB0byBjb21wbHkgd2l0aCBwcm90b3R5cGluZyB0eXBpY2FsbHkKCWluIDx1bmlzdGQuaD4uCgoJKiBtdW5jaDogQWRkIHN1cHBvcnQgZm9yIFNWUjQgc3R5bGUgbm0gb3V0cHV0LgoKCSogZGJ4cmVhZC5jLCBtaXBzcmVhZC5jIHN5bW1pc2MuYywgc3ltdGFiLmM6ICBSZW1vdmUgdGhlIG9iamVjdAoJZmlsZSBzcGVjaWZpYyBmaWVsZHMgZnJvbSB0aGUgcGFydGlhbCBzeW1ib2wgdGFibGUgc3RydWN0dXJlIGFuZAoJcmVwbGFjZSB0aGVtIHdpdGggYSBwb2ludGVyIHRvIHByaXZhdGUgZGF0YSBmb3IgZWFjaCBkaWZmZXJlbnQKCWZsYXZvciBvZiBvYmplY3QgZmlsZSByZWFkZXIgdG8gaW5pdGlhbGl6ZSBhcHByb3ByaWF0ZWx5LgoKV2VkIE9jdCAyMyAwOTozODoyMCAxOTkxICBKb2huIEdpbG1vcmUgIChnbnUgYXQgY3lnbnVzLmNvbSkKCgkqIHhjb25maWcvc3VuWzM0XW9zNDogIEFkZCBub3RlIGFib3V0IHN0cnN0ciBib3RjaCBvbiBzdW5vczQuMC4zYwoJYW5kIHByZXZpb3VzLgoKCSogbWlwc3JlYWQuYyAoZml4dXBfdW5kZWZfdHlwZSk6ICBOZXcgZnVuY3Rpb24uICBJZiBhIHN0cnVjdCAvCgl1bmlvbiAvIGVudW0gaXMgZGVmaW5lZCBpbiBhIGhlYWRlciBmaWxlIGJ1dCBub3doZXJlIGVsc2UgdXNlZCwKCShieSB0eXBlZGVmaW5nLCBwb2ludGVyIHJlZmVyZW5jaW5nIG9yIGRlY2xhcmF0aW9uKSB0aGUgbWlwc3JlYWQgY29kZQoJYnVpbGRzIHRoZSBjb21wbGV0ZSB0cmVlIGZvciB0aGUgc3RydWN0dXJlIGJ1dCBsZWF2ZXMgaXRzIGNvZGUgYXMKCVRZUEVfQ09ERV9VTkRFRiBhcyBpdCBkb2Vzbid0IGtub3cgd2hhdCBraW5kIG9mIGFnZ3JlZ2F0ZSBpdCBpcy4KCUd1ZXNzIGl0cyB0eXBlIGJhc2VkIG9uIHRoZSBkZXRhaWxzIG9mIHRoZSBtZW1iZXJzLgoKVHVlIE9jdCAyMiAxODowNDozMiAxOTkxICBTdHUgR3Jvc3NtYW4gIChncm9zc21hbiBhdCBjeWdudXMuY29tKQoKCSogaW5mcnVuLmMgKHdhaXRfZm9yX2luZmVyaW9yKTogIENoZWNrIHJldHVybiB2YWx1ZSBmcm9tCglmaW5kX3BjX2xpbmUuCgpNb24gT2N0IDIxIDE3OjQ3OjAzIDE5OTEgIFN0dSBHcm9zc21hbiAgKGdyb3NzbWFuIGF0IGN5Z251cy5jb20pCgoJKiBpbmZydW4uYyAod2FpdF9mb3JfaW5mZXJpb3IpOiAgZml4IHN0ZXBpL25leHRpIHRoYXQgd2FzIGJyb2tlbgoJYnkgbXkgbGFzdCBlZGl0IHRvIHRoaXMgcm91dGluZS4KCk1vbiBPY3QgMjEgMTQ6Mjc6NDMgMTk5MSAgSm9obiBHaWxtb3JlICAoZ251IGF0IGN5Z251cy5jb20pCgoJKiB0bS1zdW4zLmggKEZJWF9DQUxMX0RVTU1ZKTogcHJvYmxlbSB3aXRoIGNyb3NzIGRlYnVnZ2luZy4KCUZJWF9DQUxMX0RVTU1ZIGRvZXMgdW5hbGlnbmVkIGFjY2Vzc2VzIGFuZC9vciBmb3JnZXRzIHRvIGJ5dGUgc3dhcAoJdGhlIHZhbHVlcyBiZWZvcmUgcHV0dGluZyB0aGVtIGludG8gdGhlIGR1bW15IGNvZGUuICAoRnJvbSBQZXRlcgoJU2NoYXVlcikKCk1vbiBPY3QgMjEgMTA6MDQ6MzkgMTk5MSAgU3RldmUgQ2hhbWJlcmxhaW4gIChzdGV2ZSBhdCBydGwuY3lnbnVzLmNvbSkKCgkqIGNvbmZpZ3VyZS5pbjogYWRkZWQgZWJtb24gdGFyZ2V0LgoKV2VkIE9jdCAxNiAyMjo0OTo1OCAxOTkxICBKb2huIEdpbG1vcmUgIChnbnUgYXQgY3lnbnVzLmNvbSkKCglHREItNC4yIHJlbGVhc2UhCgoJKiBNYWtlZmlsZS5pbjogIFJvbGwgVkVSU0lPTiB0byA0LjIuCgkqIFJFQURNRSwgVE9ETywgV0hBVFMuTkVXOiAgVXBkYXRlLgoKCSogY29yZS5jIChjb3JlX29wZW4pOiAgSW1wcm92ZSBlcnJvciBtZXNzYWdlIGZvciBiYWQgZmlsZS4KCVBhc3MgLnJlZyB2aXJ0dWFsIG1lbW9yeSBhZGRyZXNzIHRvIGZldGNoX2NvcmVfcmVnaXN0ZXJzIHRvIGhlbHAKCWl0IGZpbmQgdGhlIHJlZ2lzdGVycyBpbiB0aGUgY29yZS1maWxlIGhlYWRlci4KCSogY29yZWRlcC5jIChmZXRjaF9jb3JlX3JlZ2lzdGVycyk6ICBUYWtlIG5ldyBhcmd1bWVudCwgdXNlIGl0LAoJYW5kIHBhc3MgaXQgdG8gcmVnaXN0ZXJfYWRkciB0byBsb2NhdGUgdGhlIGJsb2NrIG9mIHJlZ2lzdGVycy4KCSogeG0tbWlwcy5oOiAgVXBkYXRlIEtFUk5FTF9VX0FERFIgZm9yIG5ldyBzY2hlbWUuICBDbGVhbnVwIGEgYml0LgoKCSogZGJ4cmVhZC5jIChyZWFkX2RieF9zeW10YWIsIHByb2Nlc3Nfb25lX3N5bWJvbCk6ICBIYW5kbGUKCVNlcXVlbnQgTl9GTl9TRVEgbGlrZSBldmVyeWJvZHkgZWxzZSdzIE5fRk4uCgoJKiBtYWluLmM6ICBDaXJjdW12ZW50IFNDTyBjYyBidWcgd2l0aCAjaWYgISFkZWZpbmVkKFVTRykuCgkqIHRtLWkzODZ2Lmg6ICAjZW5kaWYgZ3Vjay4KCSogeGNvbmZpZy9pMzg2KjogIFJlbW92ZSAtRGdldHBhZ2VzaXplKCk9NDA5NiBrbHVkZ2UuCgkqIHhjb25maWcvaTM4NnNjbzogIEFkZCBIQVZFX1NUUlNUUiB0byBhdm9pZCBBTlNJIGJkZWF0aC4KCSogeGNvbmZpZy90YWhvZTogIEFkZCBSRUdFWCwgd2hpY2ggc2VlbXMgdG8gYmUgbWlzc2luZy4KCgkqIGNvcmVkZXAuYzogIEFkZCA8c3lzL3R5cGVzLmg+IGZvciBTQ09uaXguCgkqIGRieHJlYWQuYyAocmVhZF9kYnhfc3ltbnRhYik6ICBBdm9pZCBjb3JlZHVtcCBvbiBtYWxmb3JtZWQgZmlsZS4KCSogcHJpbnRjbWQuYyAocHJpbnRfZm9ybWF0dGVkKTogIEZsdXNoIG91dHB1dCBiZWZvcmUgZGlzYXNzZW1ibHkuCgpUdWUgT2N0IDE1IDIwOjEyOjMyIDE5OTEgIFJvbGFuZCBILiBQZXNjaCAgKHBlc2NoIGF0IGZvd2FudG9uLmN5Z251cy5jb20pCgoJKiBkb2MvcmVmY2FyZC50ZXggKHNlYyAiV29ya2luZyBGaWxlcyIpOiBjb25zaXN0ZW50IG1ldGF2YXJzIGFuZAoJb3RoZXIgaW1wcm92ZW1lbnRzLCBkdWUgdG8gY29tbWVudHMgYnkgRnJhbudvaXMgUGluYXJkCgkocGluYXJkQGlyby51bW9udHJlYWwuY2EpIAoKCSogZG9jL2dkYi50ZXhpbmZvIChhcHBlbmRpeCAiSW5zdGFsbGluZyBHREIiKTogY2hhbmdlcyBpbgoJY29uZmlndXJlLCBhbmQgaW1wcm92ZW5ldHMgcmVsYXRlZCB0byBQaW5hcmQncyByZWZjYXJkIGNvbW1lbnRzCgpUdWUgT2N0IDE1IDA4OjQ1OjEyIDE5OTEgIEpvaG4gR2lsbW9yZSAgKGdudSBhdCBjeWdudXMuY29tKQoKCUNoYW5nZXMgZnJvbSBGcmVkIEZpc2g6CgkqIHRtLTY4ay5oIChGUElfUkVHTlVNKTogIEFkZC4KCSogaW5mcnVuLmMgKGNoaWxkX2NyZWF0ZV9pbmZlcmlvcik6ICBmbHVzaCBzdGRvdXQgYW5kIHN0ZGVycgoJYmVmb3JlIGZvcmtpbmcuCgkqIGNvbmZpZ3VyZS5pbjogIEhhbmRsZSBhbWlnYWRvcywgYW1peCBob3N0cyBhbmQgdGFyZ2V0cy4KCSogaW5mbG93LmM6ICBIYW5kbGUgVElPQ0dMVENfQlJPS0VOIGZvciBBbWlnYS4KCglGcm9tIEFuZHJlYXMgU2Nod2FiOgoJKiB2YWx1ZXMuYyAoc2hvd19jb252ZW5pZW5jZSk6ICBVc2UgcHJpbnRmX2ZpbHRlcmVkLgoJKiBtYWluLmMgKGRlZmluZV9jb21tYW5kKTogIENoZWNrIHJlc3VsdCBvZiBsb29rdXBfY29tbWFuZCBmb3IKCWV4YWN0IG1hdGNoLgoJKGVjaG9fY29tbWFuZCk6ICBVc2UgcHJpbnRmX2ZpbHRlcmVkLCBhbmQgZm9yY2Ugb3V0cHV0IG91dC4KCgkqIGRieHJlYWQuYyAocmVhZF9lbnVtX3R5cGUpOiAgQXZvaWQgTW9kdWxhLTIga2x1ZGdlIHRoYXQgYnJlYWtzIEMKCXByb2dyYW1zLgoJKiBpMzg3LXRkZXAuYyAoZG91YmxlX3RvX2kzODcpOiAgRml4IHR5cG8gZm9yIGRvdWJsZV90b19pZWVlX2V4dGVuZGVkLgoJKiB1dGlscy5jIChfaW5pdGlhbGl6ZV91dGlscyk6ICBJZiAhSVNBVFRZLCBkb24ndCBwYWdpbmF0ZS4KCSogY29uZmlndXJlLmluLCB0Y29uZmlnL2RlY3N0YXRpb24sIHhjb25maWcvZGVjc3RhdGlvbjogIFJlbmFtZQoJZGVjMzEwMCB0byBkZWNzdGF0aW9uLgoKTW9uIE9jdCAxNCAxMzozNzo1MCAxOTkxICBSb2xhbmQgSC4gUGVzY2ggIChwZXNjaCBhdCBjeWdudXMuY29tKQoKCSogZG9jL2dkYi50ZXhpbmZvOiBDYXRjaCB1cCB0byBjaGFuZ2VzIHJlY29yZGVkIGhlcmUgaW4gQ2hhbmdlTG9nCgkobm9kZXMgQ29udGludWluZyBhbmQgU3RlcHBpbmc7IE1lbW9yeTsgVGFyZ2V0cykgY2xhcmlmaWNhdGlvbnMKCWR1ZSB0byBMYXJyeSBCcmVlZAoKRnJpIE9jdCAxMSAyMzoyNzowNiAxOTkxICBKb2huIEdpbG1vcmUgIChnbnUgYXQgY3lnbnVzLmNvbSkKCgkqIHRtLXtpcml4MyxtaXBzLG5pbmR5OTYwLHBuLHN5bW1ldHJ5LHZ4OTYwfS5oOiAgTW92ZQoJUkVHSVNURVJfVV9BRERSIHRvIGNvcnJlc3BvbmRpbmcgeG0tIGZpbGUuICBTdWdnLiBieSBQZXRlciBTY2hhdWVyLgoKCSogc3ltbWlzYy5jIChwcmludF9wYXJ0aWFsX3N5bXRhYnMpOiAgQWRkIHByaW50cHN5bXMgZGVidWcgY21kLgoKCSogbTY4ay10ZGVwLmMgKG02OGtfcHVzaF9kdW1teV9mcmFtZSwgbTY4a19wb3BfZnJhbWUpOiAgQWRkCglnZW5lcmljIHJvdXRpbmVzIGZvciBjYWxsaW5nIGluZmVyaW9yIGZ1bmN0aW9ucy4KCgkqIGJsb2NrZnJhbWUuYyAoaW5zaWRlX21haW5fc2NvcGUsIGluc2lkZV9lbnRyeV9zY29wZSk6ICBOZXcuCgoJKiBjb3B5aW5nLmF3azogIEZpbHRlciBmb3JtZmVlZHMgb3V0IG9mIGNvcHlpbmcgJiB3YXJyYW50ZWUuCglNYWtlIHRoZW0gYXZhaWxhYmxlIGFzIGBzaG93IGNvcHlpbmcnIGFuZCBgc2hvdyB3YXJyYW50ZWUnIGFsc28uCgkqIG1haW4uYyAocHJpbnRfZ251X2FkdmVydGlzZW1lbnQpOiAgQWR2dCBgc2hvdycgY29tbWFuZHMuCgpUaHUgT2N0IDEwIDE3OjI1OjQ3IDE5OTEgIEpvaG4gR2lsbW9yZSAgKGdudSBhdCBjeWdudXMuY29tKQoKCSogbWFjaDM4Ni14ZGVwLmM6ICBFdmVuIHdoZW4gY3Jvc3MtY29tcGlsaW5nLCBsZWF2ZSBpbiB0aGUKCWNvcmUtZmlsZSByZWFkaW5nIGNvZGUuCgkqIGNvcmUuYyAoZ2V0X2NvcmVfcmVnaXN0ZXJzKTogIEF2b2lkIGNvcmVkdW1wIGlmIG5vIC5yZWcgc2VjdGlvbi4KCldlZCBPY3QgIDkgMTc6MDM6MzQgMTk5MSAgSm9obiBHaWxtb3JlICAoZ251IGF0IGN5Z251cy5jb20pCgoJKiBtaXBzcmVhZC5jLCBjb2ZmcmVhZC5jOiAgaW5pdGlhbGlzZSBUWVBFX1ZQVFJfRklFTEROTyB0byAtMS4KCVRoaXMgYXZvaWRzIGNvcmVkdW1wcyB1bmRlciBgc2V0IHByaW50IG9iamVjdCBvbicgaW4gdmFsdWVfaGVhZG9mCgkoY2FsbGVkIGVycm9uZW91c2x5IGJ5IHZhbHVlX2Zyb21fdnRhYmxlX2luZm8pIGZvciBgcCAmc3RydWN0JwoJb3IgYHAgKnN0cnVjdCcuICBGcm9tIFBldGVyIFNjaGF1ZXIuCgpNb24gT2N0ICA3IDAwOjA2OjUyIDE5OTEgIEpvaG4gR2lsbW9yZSAgKGdudSBhdCBjeWdudXMuY29tKQoKCSogTWFrZWZpbGUuaW46ICBSb2xsIHZlcnNpb24gdG8gNC4xLjIuCgkqIGRieHJlYWQuYzogIFVzZSBhb3V0NjQuaCwgbm90IGEub3V0LmdudS5oLiAgR2V0IGV4dGVybmFsIHN5bWJvbCBlbnRyeQoJc2l6ZSBmcm9tIEJGRCAoYnV0LCBGSVhNRSwgd2UgZG9uJ3QgeWV0IHJlYWQgZXh0ZXJuYWwgbmxpc3RzJ3MgYW5kCgljb252ZXJ0IHRoZW0gdG8gaW50ZXJuYWwgbmxpc3RzJ3MgYmVmb3JlIGhhbmRsaW5nIHRoZW0gLS0gd2Ugc3RpbGwKCWFzc3VtZSB0aGV5IGhhdmUgdGhlIHNhbWUgc2l6ZSBhbmQgYWxpZ25tZW50LikgIFVzZSBTRVRfTkFNRVNUUklORwoJZXZlcnl3aGVyZSB1c2VmdWwuCgkqIGV4ZWMuYyAoZXhlY19maWxlX2NvbW1hbmQpOiAgTW92ZSBkZWFkIGNvZmYtZW5jYXBzdWxhdGlvbiBjb2RlCgl0byBCRkQuCgkqIG04OGstdGRlcC5jLCBtODhrLXhkZXAuYzogIFJlbW92ZSBlbmNhcCB0ZXN0IGFuZCAjaW5jIDxhLm91dC5oPi4KCkZyaSBPY3QgIDQgMjI6MzA6MDYgMTk5MSAgSm9obiBHaWxtb3JlICAoZ251IGF0IGN5Z251cy5jb20pCgoJKiBjb25maWd1cmUuaW4sIHRtLWkzODZ2LmgsIHhtLWkzODZ2Lmg6IEludGVsIDM4NiBNYWNoIGhvc3QgcG9ydC4KCSogeG0taTM4Nm1hY2guaCwgbWFjaDM4Ni14ZGVwLmMsIHhjb25maWcvaTM4Nm1hY2g6ICBOZXcgZmlsZXMuCgpGcmkgT2N0ICA0IDE3OjA0OjMxIDE5OTEgIFBlciBCb3RobmVyICAoYm90aG5lciBhdCBjeWdudXMuY29tKQoKCU1vcmUgcGF0Y2hlcyBmcm9tIFBldGVyIFNjaGF1ZXIgPHBlc0ByZWdlbnQuZS10ZWNobmlrLnR1LW11ZW5jaGVuLmRlPjoKCSogbWlwcy14ZGVwLmMgKHN0b3JlX2luZmVyaW9yX3JlZ2lzdGVycyk6ICBEb24ndCB0cnkgdG8KCXdyaXRlIHRoZSAocHNldWRvKSBGUC4KCSogbWlwc3JlYWQuYyAocGFyc2VfcGFydGlhbF9zeW1ib2xzKTogIEltcHJvdmVkIGFsZ29yaXRobSBmb3IKCXNldHRpbmcgcHN0LT50ZXh0aGlnaC4KCkZyaSBPY3QgIDQgMTY6NDc6MzIgMTk5MSAgUm9sYW5kIEguIFBlc2NoICAocGVzY2ggYXQgY3lnbnVzLmNvbSkKCgkqIGRvYy9NYWtlZmlsZTogbWFrZSBURVhJTlBVVFMgaW5jbHVkZSAuIGV2ZXJ5d2hlcmUKCkZyaSBPY3QgIDQgMDA6MzU6NTYgMTk5MSAgSm9obiBHaWxtb3JlICAoZ251IGF0IGN5Z251cy5jb20pCgoJKiBjb2ZmcmVhZC5jLCBkYnhyZWFkLmMsIHN5bWZpbGUuYywgc3ltbWlzYy5jLCBzeW10YWIuaDogIFJlbW92ZQoJdmVzdGlnZXMgb2YgdHlwZXZlY3RvcnMsIHdoaWNoIHdlcmUgZm9yIHN5bXNlZ3MgYW5kIGFyZSBubyBsb25nZXIKCXVzZWQuICAoRnJvbSBhIHF1ZXN0aW9uIGJ5IEVsaW90IERyZXNzZWxoYXVzCgk8ZHJlc3NlbGhAUkZUMzAubmFzLm5hc2EuZ292PikuCgpUaHUgT2N0ICAzIDA5OjMzOjI2IDE5OTEgIEpvaG4gR2lsbW9yZSAgKGdudSBhdCBjeWdudXMuY29tKQoKICAgIAkqIGRieHJlYWQuYywgY29mZnJlYWQuYzogIHN0YXRpYy1pemUgZnVuY3Rpb25zIHRoYXQgd2VyZQoJZ3JhdHVpdGlvdXNseSBleHRlcm5hbC4gIChGcm9tIEZyZWQgRmlzaC4pCgoJKiBjLWV4cC55OiAgc3ltLT5jbGFzcyB0byBTWU1CT0xfQ0xBU1MgKHN5bSkuCgoJKiBkYnhyZWFkLmMgKGRieF9sb29rdXBfdHlwZSk6ICBLZWVwIGRvdWJsaW5nIHNpemUgb2YgdHlwZXZlY3RvcgoJdW50aWwgaXQgaXMgbGFyZ2UgZW5vdWdoLiAgICAKCgkqIGRieHJlYWQuYyAocmVhZF90eXBlKTogIEhhbmRsZSBlcnJvciBjYXNlIHNsaWdodGx5IGJldHRlci4KCU1ha2UgY29tcGxhaW50IG1lc3NhZ2Ugbm90IEMrKy1zcGVjaWZpYy4KCldlZCBPY3QgIDIgMTc6MjE6MDcgMTk5MSAgU3R1IEdyb3NzbWFuICAoZ3Jvc3NtYW4gYXQgY3lnbnVzLmNvbSkKCgkqIGluZnJ1bi5jICh3YWl0X2Zvcl9pbmZlcmlvcik6ICBGaXggc3RlcC9uZXh0IHNvIHRoYXQgeW91IG9ubHkKCXN0b3AgYXQgdGhlIGJlZ2lubmluZyBvZiBhIG5ldyBsaW5lLiAgVGhpcyBmaXhlcyB2YXJpb3VzIHByb2JsZW1zCgl3aXRoIGZvciBsb29wcywgbmVzdGVkIGlmLWVsc2UncyBhbmQgc3dpdGNoIHN0YXRlbWVudHMuCgpUdWUgT2N0ICAxIDA2OjMzOjU1IDE5OTEgIEpvaG4gR2lsbW9yZSAgKGdudSBhdCBjeWdudXMuY29tKQoKCSogc3ltdGFiLmMgKGxvb2t1cF9zeW10YWJfMSwgbG9va3VwX3N5bWJvbCk6ICAiZmF0YWwiIGVycm9ycwoJYmV0d2VlbiBzeW10YWJzIGFuZCBwc3ltdGFicyBiZWNvbWUgb3JkaW5hcnkgZXJyb3IoKXMuCgoJKiBkYnhyZWFkLmMgKHJlYWRfZGJ4X3N5bXRhYik6ICBSZWxvY2F0ZSBlbmRfb2ZfdGV4dF9hZGRyCglwcm9wZXJseSwgbWFraW5nICJlbmQgcGMiIGNvcnJlY3QgaW4gc2hhcmVkIGxpYiBwc3ltdGFicy4KCShGcm9tIEd1eSBIYXJyaXMgPGd1eUBhdXNwZXguY29tPi4pCgpNb24gU2VwIDMwIDEzOjE1OjMxIDE5OTEgIEpvaG4gR2lsbW9yZSAgKGdudSBhdCBjeWdudXMuY29tKQoKCSogZGJ4cmVhZC5jOiAgRW5hYmxlLCBidXQgc29mdGVuLCBjb25zdF92b2xfY29tcGxhaW50LgoJKHJlYWRfZGJ4X3N5bXRhYik6ICBOX1NUU1lNIGFuZCBOX0xDU1lNIGRlZmluZSBzdGF0aWMgdmFycy4KCURpdHRvIEdvdWxkIE5fTkJTVFMgYW5kIE5fTkJMQ1MuICBBbHNvLCBhbGwgdHlwZXMgaW4gdGhlIHBzeW10YWIKCXNob3VsZCBiZSBmaWxlLXNjb3BlLCBub3QgZ2xvYmFsLgoJKHJlYWRfc3RydWN0X3R5cGUpOiAgUmVtb3ZlIGFuY2llbnQgbXVsdGlwbGUtaW5oZXJpdGFuY2Ugd2FybmluZy4KCShyZWFkX3JhbmdlX3R5cGUpOiAgQ2hlY2sgYmFzZSB0eXBlLCBjb21wbGFpbiAmIHBhdGNoIGlmIHVuZGVmaW5lZC4KCSogc3RhY2suYyAoZnJhbWVfaW5mbyk6ICBEZW1hbmdsZSB0aGUgZnVuY3Rpb24gbmFtZSBpbiBgaW5mbyBzdGFjaycuCgkoRnJvbSBQZXRlciBTY2hhdWVyKQoKU2F0IFNlcCAyOCAxMDowMjozMyAxOTkxICBKb2huIEdpbG1vcmUgIChnbnUgYXQgY3lnbnVzLmNvbSkKCgkqIGV2YWwuYyAoZXZhbHVhdGVfc3ViZXhwX2Zvcl9hZGRyZXNzKTogIERvbid0IHVzZQoJVFlQRV9QT0lOVEVSX1RZUEUgZGlyZWN0bHkgKGl0IG1pZ2h0IGJlIHplcm8gaWYgdGhpcyB0eXBlIGhhcwoJbmV2ZXIgaGFkIGEgcG9pbnRlciBjcmVhdGVkIGJlZm9yZSk7IHVzZSBsb29rdXBfcG9pbnRlcl90eXBlLgoJKiBzeW10YWIuYyAobG9va3VwX21ldGhvZF90eXBlKTogIEFyZ3VtZW50cyB3ZXJlIHN3YXBwZWQgaW4gYWxsCgljYWxsZXJzLCBzbyBmaXggaXQgaGVyZS4gIEknbSBhbWF6ZWQgdGhpcyB3b3JrZWQgYXQgYWxsIQoKRnJpIFNlcCAyNyAxODowOTozMSAxOTkxICBKb2huIEdpbG1vcmUgIChnbnUgYXQgY3lnbnVzLmNvbSkKCgkqIGMtZXhwLnksIG0yLWV4cC55OiAgRGVmaW5lIG1vcmUgeXlzeW1ib2xzIHRoYXQgaGFwcGVuIHRvIGJlCgkiYnNzIiByYXRoZXIgdGhhbiAiZGF0YSIgc3ltYm9scywgYnV0IHdoaWNoIHN0aWxsIGNvbmZsaWN0LgoJKiBtMi1leHAueTogIExpbnQuCgoJKiBjb2ZmcmVhZC5jIChjb2ZmX3N5bWZpbGVfcmVhZCk6ICBVc2UgeG1hbGxvYywgbm90IG1hbGxvYy4KCSogY29yZS5jIChjb3JlX2ZpbGVzX2luZm8pOiAgU2hvcnRlbiBvdXRwdXQuCgkqIGV4ZWMuYyAoZXhlY19maWxlc19pbmZvKTogIERpdHRvLgoJKGJ1aWxkX3NlY3Rpb25fdGFibGUpOiAgSWdub3JlIHplcm8tbGVuZ3RoIHNlY3Rpb25zLgoJKiBsYW5ndWFnZS5jLCBwcmludGNtZC5jOiAgTGludC4KCSogbGFuZ3VhZ2UuaCAoZ2V0X2ZyYW1lX2xhbmd1YWdlKTogIERlY2xhcmUuCgkqIHNhYmVyLnN1cHByZXNzOiAgdXBkYXRlLgoJKiBzdGFjay5jIChmaW5kX3JlbGF0aXZlX2ZyYW1lKTogIFJlbW92ZSBjb21wbGV4IGNvZGUgdGhhdCB3YXMKCSNpZiAwJ2QsIHN0aWNrIHdpdGggc2ltcGxlIGNvZGUuICBMaW50LgogICAgICAgICogc2FiZXIuc3VwcHJlc3M6ICBVcGRhdGUgYSBiaXQuCgkqIHN5bWZpbGUuYyAoYWRkX3N5bWJvbF9maWxlX2NvbW1hbmQpOiAgQWRkICI/IiB0byBxdWVzdGlvbi4KCSogdXRpbHMuYyAocGFyc2VfZXNjYXBlKTogIEF2b2lkIFxhIGR1ZSB0byBiZGVhZCBjb21waWxlcnMuCgkqIHZhbHVlLmg6ICBEZWNsYXJlIHR5cGVkZWZfcHJpbnQuCgoJKiB2YWxwcmludC5jICh2YWxfcHJpbnQsIHR5cGVfcHJpbnRfYmFzZSk6ICBUWVBFX0NPREVfUkFOR0UgbGVzcwoJa2x1ZGdleS4KCgkqIG5pbmR5LXRkZXAuYyAobmluZHlfZnJhbWVfY2hhaW5fdmFsaWQpOiAgVXNlIGxvb2t1cF9taXNjX2Z1bmMuCgkoUmVwb3J0ZWQgYnkgTWFyayBQZWVrIDxtYXJrQGltYWdlbi5jb20+LikKCgkqIHNvbGliLmMgKHNvbGliX21hcF9zZWN0aW9ucyk6ICBSZWxvY2F0ZSBhbGwgc2VjdGlvbnMsIGV2ZW4KCXRob3VnaCBvbmx5IHRoZSB0ZXh0IHNlY3Rpb24ncyBzaXplIGlzIHRyYWNrZWQuICBNYXJrIGxkX3RleHQKCWZvciBldmVudHVhbCBlbGltaW5hdGlvbiBhcyB3ZSBnZW5lcmFsaXplIHRvIE4gc2VjdGlvbnMuCgoJKiBpbmZydW4uYyAod2FpdF9mb3JfaW5mZXJpb3IpOiAgRG9uJ3QgY2hlY2sgaWYgdGhlIFBDIGlzIGluIGEKCWNhbGxfZHVtbXkgaWYgd2Ugd2VyZSBzdG9wcGVkIGJ5IGEgcmFuZG9tIHNpZ25hbCB0aGF0IGlzIGJlaW5nCglwYXNzZWQgdG8gdGhlIHByb2dyYW0uICBUaGlzIHByb2R1Y2VkIHdpZXJkIHJlc3VsdHMgd2hlbiBjYWxsaW5nCglmdW5jdGlvbnMgaW4gdGhlIGluZmVyaW9yIGFuZCBzaWduYWxzIChlLmcuIFNJR0FMUk0pIHdlcmUgaW4gdXNlLgoKVHVlIFNlcCAyNCAxODowNTozMCAxOTkxICBKb2huIEdpbG1vcmUgIChnbnUgYXQgY3lnbnVzLmNvbSkKCgkqIGluZnJ1bi5jIChJTl9TSUdUUkFNUCk6ICBOb3QgcGFyZW50aGVzaXplZCBwcm9wZXJseS4KCUJ1Z2ZpeCBmcm9tIFBhdWwgRWdnZXJ0IDxlZ2dlcnRAdHdpbnN1bi5jb20+LgoJKiB0bS11bHRyYTMuaCAoSU5fU0lHVFJBTVApOiAgRGl0dG8uCgkqIHZhbHByaW50LmMgKHByaW50X2Zsb2F0aW5nKTogIFByaW50IDkgZGlnaXRzIGZvciBJRUVFIGZsb2F0cy4KCUZyb20gUGF1bCBFZ2dlcnQuCgpNb24gU2VwIDIzIDE1OjUwOjA3IDE5OTEgIEpvaG4gR2lsbW9yZSAgKGdudSBhdCBjeWdudXMuY29tKQoKCSogTWFrZWZpbGUuaW46ICBSb2xsIFZFUlNJT04gdG8gNC4xLjEuCgkqIHNvdXJjZS5jIChsaW5lX2luZm8pOiAgUGV0ZXIgU2NoYXVlciBmaXhlcyBhIGJ1ZyBJIGludHJvZHVjZWQgaW4KCWhleCBjb252ZXJzaW9uLgoKRnJpIFNlcCAyMCAxNjoxMDo1MiAxOTkxICBKb2huIEdpbG1vcmUgIChnbnUgYXQgY3lnbnVzLmNvbSkKCglHREItNC4xIHJlbGVhc2UhCgoJKiBNYWtlZmlsZS5pbiAoVkVSU0lPTik6ICBTZXQgdG8gNC4xLgkKCSogbGFuZ3VhZ2UuYyAoc2V0X2xhbmd1YWdlX2NvbW1hbmQpOiAgUHJpbnQgdXNlZnVsIGhlbHAgbWVzc2FnZSwKCWFuZCByZXN0b3JlIHRoZSBsYW5ndWFnZSBzdHJpbmcgYWZ0ZXIgZ2l2aW5nIGhlbHAuCgkqIHZhbHByaW50LmMgKHR5cGVkZWZfcHJpbnQpOiAgUHJpbnQgdHlwZWRlZiBpbiBDIG9yIE0yLgoJKiBzeW10YWIuYyAobGlzdF9zeW1ib2xzKTogIFVzZSBpdC4KCSogbWFpbi5jIChtYWluKTogIEF2b2lkIGFueSBvdXRwdXQgYmVmb3JlIChnZGIpIHByb21wdCB3aGVuIC1xLgoJKiBsYW5ndWFnZS5jIChzZXRfbGFuZ3VhZ2VfY29tbWFuZCk6ICBIYW5kbGUgZXJyb3JzIGJ5IHJlc3RvcmluZwoJdGhlIGxhbmd1YWdlIHN0cmluZyB0byBpdHMgY3VycmVudCBzdGF0ZSAoZml4IGZyb20gQS4gQmVlcnMpLgoJKiBkb2MvZ2RiaW50LnRleGluZm86ICBSb2xsIGluIGluZm9ybWF0aW9uIGZyb20gUkVBRE1FLiAgUmVhcnJhbmdlCgkiaG93IHRvIGluc3RhbGwiIGFuZCAiaG93IHRvIHByaW50IHRoZSBkb2MiIHN0dWZmIHNvIGl0IGRyb3BzCgllYXNpZXIgaW50byBSRUFETUUuCgkqIGNvbmZpZ3VyZS5pbjogIFJlbmFtZSBydHBjIENQVSB0byByb21wIHRvIG1hdGNoIGNvbmZpZy5zdWIuCgkqIFJFQURNRSwgV0hBVFMuTkVXLCBUT0RPOiAgVXBkYXRlIGZvciBnZGItNC4xLgoKRnJpIFNlcCAyMCAxNzozOToxNCAxOTkxICBSb2xhbmQgSC4gUGVzY2ggIChwZXNjaCBhdCBjeWdudXMuY29tKQoKCSogZG9jL2dkYi50ZXhpbmZvOiBVcGRhdGVzIGZyb20gQ2hhbmdlTG9nLiAgc2V0L3Nob3cgd3JpdGUsIAoJYXV0b2xvYWRpbmcgc2hhcmVkIGxpYnMsIGNvcHlyaWdodCBldGMgb24gR0RCIHN0YXJ0dXAsIGNsZWFuIHVwICRfCglhbmQgJF9fIGluZGV4IHJlZnMsIHNldC9zaG93IGxpc3RzaXplIGFuZCByZWxhdGVkIHVwZGF0ZXMgdG8gbGlzdAoJY21kLiAgTmV3IGhvc3QvdGFyZ2V0IGNvbmZpZ3MuCgpGcmkgU2VwIDIwIDE1OjQ2OjAwIDE5OTEgIFJvbGFuZCBILiBQZXNjaCAgKHBlc2NoIGF0IGN5Z251cy5jb20pCgoJKiBkb2MvTWFrZWZpbGU6IGdlbmVyYXRlIGF1eCB2ZXJzaW9uLW5vIGZpbGUgZG9jL2dkYlZOLm00Cglmcm9tIG1haW4gTWFrZWZpbGUuaW4gdmVyc2lvbiBkZWZpbml0aW9uCglkb2MvZ2RiLnRleGluZm86IHVzZSB2ZXJzaW9uIHJlY29yZGVkIGluIGRvYy9nZGJWTi5tNCBmb3IgY3VycmVudAoJR0RCIHZlcnNpb24gbm8gcmVmcyAKCU1ha2VmaWxlLmluIChzZXR1cC10by1kaXN0KTogZ2VuZXJhdGUgZG9jL2dkYlZOLm00IAoKCSogZG9jL2dkYi50ZXhpbmZvOiBtZXJnZSBuZXcgbGFuZ3VhZ2Utc3dpdGNoaW5nIGFuZCBsYW5nLXNwZWNpZmljCglkb2MgYnkgQW5kcmV3IEJlZXJzCgpGcmkgU2VwIDIwIDE1OjAwOjU3IDE5OTEgIFBlciBCb3RobmVyICAoYm90aG5lciBhdCBjeWdudXMuY29tKQoKCSogbWNoZWNrLmM6IEFkZCBfX09ORUZJTEUga2x1ZGdlIHRvIGFsbG93IGNvbXBpbGF0aW9uIGJ5IG5vbi1BTlNJCgljb21waWxlcnMgKHdoaWNoIG1heSBsYWNrIHN0ZGRlZi5oKS4KCkZyaSBTZXAgMjAgMTM6Mjk6NDIgMTk5MSAgSm9obiBHaWxtb3JlICAoZ251IGF0IGN5Z251cy5jb20pCgoJKiBkYnhyZWFkLmMgKHJlYWRfZGJ4X3N5bXRhYiwgcHJvY2Vzc19vbmVfc3ltYm9sKTogIE5fRk4gYW5kCglOX1dBUk5JTkcgYXJlIHRoZSBzYW1lIGV4Y2VwdCBmb3IgdGhlIE5fRVhUIGJpdCwgc28ganVzdCB1c2UgdGhlaXIKCXZhbHVlcyBhbG9uZSwgcmF0aGVyIHRoYW4gT1ItaW5nIHRoZW0gd2l0aCBOX0VYVC4KCkZyaSBTZXAgMjAgMTI6Mjc6NTUgMTk5MSAgU3R1IEdyb3NzbWFuICAoZ3Jvc3NtYW4gYXQgY3lnbnVzLmNvbSkKCgkqIG1pcHNyZWFkLmMgKHBhcnNlX2xpbmVzKTogIERlYWwgd2l0aCBuZWdhdGl2ZSBleHRlbmRlZCBsaW5lCglvZmZzZXRzIGNvcnJlY3RseS4KCgkqIGMtZXhwLnksIG0yLWV4cC55OiAgI2RlZmluZSB5eWVycmZsYWcgYW5kIHl5bmVycnMgdG8gYXZvaWQKCWdsb2JhbCBzeW1ib2wgY29uZmxpY3RzLgoKRnJpIFNlcCAyMCAwMjoyODoxNSAxOTkxICBKb2huIEdpbG1vcmUgIChnbnUgYXQgY3lnbnVzLmNvbSkKCgkqIC5nZGJpbml0OiAgTW92ZSAnc2V0IGNvbXBsYWludHMnIHRvIHRvcCwgc28gaXQgcnVucyBldmVuIGluCgljYXNlIHdlIGFyZW4ndCBkZWJ1Z2dpbmcgR0RCLgoJKiBsYW5ndWFnZS5jIChfaW5pdGlhbGl6ZV9sYW5ndWFnZSk6ICBGaXggdHlwZSBjaGVjayBhbmQgcmFuZ2UKCWNoZWNrIGRvY3VtZW50YXRpb24gc3RyaW5ncy4KCSogdXRpbHMuYyAoIUhBVkVfVlBSSU5URik6ICBEZWZpbmUgdmZwcmludGYgYXMgYSBmdW5jdGlvbiwgc28KCWxhbmd1YWdlLmMgY2FuIHVzZSBpdC4gIChUaG91Z2ggbGFuZ3VhZ2UuYyBzaG91bGQgcmVhbGx5IG5vdCBiZQoJaGFuZGxpbmcgd2FybmluZ3MvZXJyb3JzIHRoZSB3YXkgaXQgZG9lcywgRklYTUUuKQoJKiBzeW10YWIuYyAobG9va3VwX3ByaW1pdGl2ZV90eXBlKTogIGNvbnN0IGxpbnQuCgoJQnVnZml4IGZyb20gUGV0ZXIgU2NoYXVlcjoKCSogc291cmNlLmMgKGxpbmVzX3RvX2xpc3QpOiAgTWFrZSBzaWduZWQsIHRvIGF2b2lkIGNvbXBhcmlzb24KCWdvaW5nIHVuc2lnbmVkIGFuZCBjb21wbGFpbmluZyB0aGF0IC0zIGlzIHRvbyBoaWdoIGZvciAyMSBsaW5lcy4KCSogc3RhY2suYyAobGluZXNfdG9fbGlzdCk6ICBEaXR0by4KClRodSBTZXAgMTkgMjM6MzM6NDEgMTk5MSAgSm9obiBHaWxtb3JlICAoZ251IGF0IGN5Z251cy5jb20pCgoJKiBNYWtlZmlsZS5pbiAoSEZJTEVTKTogIEFkZCBtaW5pbW9uLmguCgkoVkVSU0lPTik6ICBSb2xsIHZlcnNpb24gbnVtYmVyIHRvIDQuMC45NS4KCShnZGIudGFyLlosIG1ha2UtcHJvdG8tZ2RiLmRpciwgc2V0dXAtdG8tZGlzdCwgZ2RiLVhYWC50YXIuWik6CglOZXcgcnVsZXMgZm9yIGJ1aWxkaW5nIGRpc3RyaWJ1dGlvbnMuICBOb3JtYWwgZGlzdHJpYnV0aW9uCglpcyBidWlsdCBieSBkb2luZyBgbWFrZSAtZiBNYWtlZmlsZS5pbiBnZGIudGFyLlonIGluIHRoZSBkaXJlY3RvcnkKCW9uZSBsZXZlbCB1cCBmcm9tIGhlcmU7IGl0IGNhbGxzIG1ha2UtcHJvdG8tZ2RiLmRpciB0byBidWlsZCBhCglkaXJlY3RvcnkgYHByb3RvLWdkYicgd2hpY2ggaXMgYW4gaW1hZ2Ugb2YgdGhlIHJlbGVhc2UuICBUaGUgb2xkCglgZ2RiLnRhci5aJyBydWxlIHN0aWxsIHdvcmtzIHRvby4KCSogY29uZmlnLnN1YiwgY29uZmlndXJlOiAgUm9sbCBpbiBsYXRlc3QgZnJvbSAuLgoKVGh1IFNlcCAxOSAxNzo0MToyNCAxOTkxICBSb2xhbmQgSC4gUGVzY2ggIChwZXNjaCBhdCBjeWdudXMuY29tKQoKCSogZG9jL2dkYmludC50ZXhpbmZvOiBSZW9yZGVyIGNvbnRlbnRzOyByZW9yZ2FuaXplIG5ldy1ob3N0LAoJbmV3LXRhcmdldCwgYW5kIG5ldy1jb25maWcgY2hhcHRlcnM7IGZpeCBtaW5vciB0eXBvczsgY29tZSBjbG9zZXIKCXRvIHVzdWFsIEdOVSBtYXJrdXAgY29udmVudGlvbnMgZm9yIEBmaWxlIEBzYW1wIEBjb2RlIEB2YXIuCgpUaHUgU2VwIDE5IDE3OjA0OjEyIDE5OTEgIFBlciBCb3RobmVyICAoYm90aG5lciBhdCBjeWdudXMuY29tKQoKCVBhdGNoZXMgZnJvbSBQZXRlciBTY2hhdWVyIDxwZXNAcmVnZW50LmUtdGVjaG5pay50dS1tdWVuY2hlbi5kZT46CgkqIG1pcHNyZWFkLmMgKHBhcnNlX3BhcnRpYWxfc3ltYm9scyk6IEVudGVyIHRoZSBuYW1lIG9mIGFsbAoJc3RydWN0cy91bmlvbnMuLi4gaW50byB0aGUgcHN5bXRhYiBzbyB3ZSBjYW4gYWNjZXNzIHRoZW0gaWYgdGhlCglzeW10YWIgaXMgbm90IHJlYWQgaW4uCgkqIG1pcHMtdGRlcC5jOiAgUmVtb3ZlIHNvbWUgdW5uZWVkZWQgI2luY2x1ZGVzLgoJKiB4Y29uZmlnL2RlYzMxMDA6IEFkZCBIQVZFX1NUUlNUUi4KClRodSBTZXAgMTkgMTU6MTQ6MjMgMTk5MSAgSm9obiBHaWxtb3JlICAoZ251IGF0IGN5Z251cy5jb20pCgoJKiBNYWtlZmlsZS5pbjogIENpcmN1bXZlbnQgU3VuIE1ha2UgYnVnIG9uICotZXhwLnRhYi5vLgoJKiBjLWV4cC55LCBtMi1leHAueTogIExpbnQuCgkqIG0yLWV4cC55OiAgQXZvaWQgdXNpbmcgeXl0bmFtZVtdIHdoaWNoIGlzIGEgQmlzb24taXNtLgoJKiB2YWxwcmludC5jICh2YWxfcHJpbnRfZmllbGRzKTogIENoZWNrIGZvciBzdHViIHR5cGUuCgkqIG1pcHNyZWFkLmMgKF9pbml0aWFsaXplX21pcHNyZWFkKTogIEF2b2lkIHVzaW5nCglidWlsdGluX3R5cGVfdm9pZCBhdCBpbml0aWFsaXplIHRpbWUuCgkobWlwc2NvZmZfc3ltZmlsZV9yZWFkKTogIHVzZSBpdCBub3cuCQoKV2VkIFNlcCAxOCAxNTo1NTo1MSAxOTkxICBKb2huIEdpbG1vcmUgIChnbnUgYXQgY3lnbnVzLmNvbSkKCglNZXJnZSBtdWx0aXBsZS1sYW5ndWFnZSBzdXBwb3J0LCBhbmQgcGFydGlhbCBNb2R1bGEtMiBzdXBwb3J0LAoJZnJvbSBBbmRyZXcgQmVlcnMgPGJlZXJzQGNzLmJ1ZmZhbG8uZWR1Pi4KCgkqIGkzODctdGRlcC5jOiAgTmV3IGZpbGUsIGNvbnNvbGlkYXRlcyBtb3N0IDgwMzg3IHN1cHBvcnQsCglhbmQgZWxpbWluYXRlcyBob3N0IGRlcGVuZGVuY3kgb24gZG91YmxlPC0+ZXh0ZW5kZWQgY29udmVyc2lvbnMuCgkqIGkzODYteGRlcC5jLCBzeW1tLXhkZXAuYzogIFJlbW92ZSBtb3N0IDM4NyBzdXBwb3J0LgoJKiB4Y29uZmlnL2kzODZ7c2NvLHYsdi1nLHYzMix2MzItZ306ICBOb3cgbmVlZCBpMzg3LXRkZXAuby4KCgkqIHN5bWZpbGUuYyAoYWxsb2NhdGVfc3ltdGFiKTogIE5ldyBmbiwgY29uc29saWRhdGVzIHRoZSB3b3JrCglvZiBhbGxvY2F0aW5nIGFuZCBpbml0aWFsaXppbmcgYSBuZXcgc3RydWN0IHN5bXRhYi4gIFNldCB0aGUKCWxhbmd1YWdlIG9mIHRoZSBzeW10YWIgYmFzZWQgb24gaXRzIGZpbGVuYW1lIGV4dGVuc2lvbi4KCSogc3ltZmlsZS5oOiAgRGVjbGFyZSBpdC4KCSogbWlwc3JlYWQuYyAobmV3X3N5bXRhYik6ICBVc2UgaXQuICBNaW5vciBmb3JtYXR0aW5nIGNoYW5nZXMuCgkqIGRieHJlYWQuYyAoZW5kX3N5bXRhYik6ICBVc2UgaXQuCgoJKiBtaXBzcmVhZC5jIChwYXJzZV9zeW1ib2wsIGNhc2Ugc3RQYXJhbSBhbmQgc3RQcm9jKTogIEFkZCAjaWYgMCdkCgljb2RlIGZvciBzYXZpbmcgdHlwZXMgb2YgcGFyYW1ldGVycyB3aXRoIGVhY2ggZnVuY3Rpb24gZGVmaW5pdGlvbi4KCSogZGJ4cmVhZC5jIChkZWZpbmVfc3ltYm9sLCBmdW5jdGlvbiBhbmQgcGFyYW1ldGVyIGNhc2VzKTogIERpdHRvLgoJKHJlYWRfZGJ4X3N5bXRhYiwgY2FzZSBOX0RFRkQpOiAgSWdub3JlLgoJKHJlYWRfZW51bV90eXBlKTogIFJlY29nbml6ZSBGQUxTRS9UUlVFIGVudW0gYXMgTW9kdWxhLTIgQk9PTEVBTi4KCShyZWFkX3JhbmdlX3R5cGUpOiAgUmVuYW1lIE1BWF9PRl9UWVBFIHRvIE1BWF9PRl9DX1RZUEUsIGV0Yy4KCSNpZiAwIG91dCBpdHMgdXNlcywgdGhvdWdoLCBzaW5jZSB0aGV5IHNldCBhIGRlYWQgdmFsdWUuCgkqIGNvZmZyZWFkLmMgKGVuZF9zeW10YWIpOiAgVXNlIGFsbG9jYXRlX3N5bXRhYi4KCShwcm9jZXNzX2NvZmZfc3ltYm9sKTogICNpZiAwJ2QgZm9yIGZ1bmN0aW9ucyBhbmQgcGFyYW1zIGFzIGFib3ZlLgoJKHJlYWRfZW51bV90eXBlKTogIFJlY29nbml6ZSBNb2R1bGEtMiBCT09MRUFOLgoJKiBzeW10YWIuYyAoYWRkX3BhcmFtX3RvX3R5cGUpOiAgI2lmIDAnZCBmdW5jdGlvbiB0byBhZGQgYQoJcGFyYW1ldGVyIHR5cGUgdG8gYSBmdW5jdGlvbiB0eXBlJ3MgZmllbGQgbGlzdC4KCgkqIGRlZnMuaCAobG9jYWxfaGV4X2Zvcm1hdCwgbG9jYWxfaGV4X3N0cmluZywgKl9jdXN0b20pOiAgQWRkLgoJKiBpMzg2LXhkZXAuYywgcHlyLXRkZXAuYywgcHlyLXhkZXAuYywgcmVtb3RlLXZ4LmMsIHNvbGliLmMsCglzb3VyY2UuYywgc3ltZmlsZS5jLCBkYnhyZWFkLmMsIGJyZWFrcG9pbnQuYywgY29yZS5jLCBleGVjLmMsCglpMzg3LXRkZXAuYywgaW5mY21kLmMsIG1pcHMtdGRlcC5jLCBzdGFjay5jLCBwcmludGNtZC5jOiAgT3V0cHV0CgloZXggd2l0aCBsb2NhbF9oZXhfc3RyaW5nIGZvciBNb2R1bGEtMiBzdXBwb3J0LgoKCSogYnJlYWtwb2ludC5jIChicmVha3BvaW50X2NvbmRfZXZhbCk6ICBVc2UgbmV3IHZhbHVlX3RydWUgdG8gdGVzdAoJYnJlYWtwb2ludCBjb25kaXRpb24gbGFuZ3VhZ2UtaW5kZXBlbmRlbnRseS4KCgkqIHBhcnNlLmM6ICBOZXcgZmlsZSB3aXRoIHRoZSBjb21tb24gY29kZSByZW1haW5zIG9mIGV4cHJlYWQueS4KCSogcGFyc2VyLWRlZnMuaDogIE5ldyBmaWxlIHdpdGggY29tbW9uIGRlY2xhcmF0aW9ucyBmcm9tIGV4cHJlYWQueS4KCSogYy1leHAueTogIE5ldyBmaWxlIHdpdGggdGhlIEMgcGFyc2VyIGZyb20gZXhwcmVhZC55LCBhbmQgb3RoZXIKCWxhbmd1YWdlLXNwZWNpZmljIGluZm9ybWF0aW9uLgoJKiBtMi1leHAueTogIE5ldyBmaWxlIHdpdGggdGhlIE1vZHVsYS0yIHBhcnNlciBhbmQgZXRjLgoJKiBleHByZWFkLnksIGV4cHJlYWQudGFiLmM6ICBSZW1vdmUuCgkqIGJyZWFrcG9pbnQuYywgZXZhbC5jLCBwcmludGNtZC5jLCBleHByZXNzaW9uLmg6ICBVc2UKCXBhcnNlX2V4cHJlc3Npb24gYW5kIHBhcnNlX2V4cF8xIHJhdGhlciB0aGFuIHBhcnNlX2NfZXhwcmVzc2lvbgoJYW5kIHBhcnNlX2NfMS4KCgkqIHN5bXRhYi5oIChlbnVtIGxhbmd1YWdlcyk6ICBNb3ZlIHRvIGRlZnMuaC4KCShlbnVtIHR5cGVfY29kZSk6ICBBZGQgVFlQRV9DT0RFX0NIQVIgYW5kIFRZUEVfQ09ERV9CT09MLgoJRGVjbGFyZSBNb2R1bGEtMiBidWlsdGluIHR5cGVzLgoJQWRkIE1BWF9PRl9UWVBFIGFuZCBNSU5fT0ZfVFlQRSBtYWNyb3MuCgoJKiBzeW10YWIuYyAoX2luaXRpYWxpemVfc3ltdGFiKTogIFJlbW92ZSBidWlsdGluIHR5cGUKCWRlZmluaXRpb24gYW5kIGluaXRpYWxpemF0aW9uIHRvICotZXhwLnkuICAKCShsb29rdXBfcHJpbWl0aXZlX3R5cGVuYW1lKTogIFVzZSBsYW5ndWFnZS1kZXBlbmRlbnQgdmVjdG9yLgoJKGxvb2t1cF90eXBlbmFtZSk6ICBGaXggYnVnLCBtYWtlIGl0IHdvcmsgaWYgcHJpbWl0aXZlIHR5cGVuYW1lLgoJKGxvb2t1cF91bnNpZ25lZF90eXBlbmFtZSk6ICBDYWxsIGFib3ZlLgoJKGNyZWF0ZV9hcnJheV90eXBlKTogIFNldCB1cCByYW5nZSB0eXBlIGZvciBhcnJheSBpbmRleC4KCShsaXN0X3N5bWJvbHMpOiAgQ2FsbCB0eXBlZGVmX3ByaW50IHRvIHByaW50IHR5cGVkZWZzLgoKCSogdmFsdWVzLmMgKHVucGFja19sb25nLCB2YWx1ZV9mcm9tX2xvbmdlc3QpOiAgSGFuZGxlCglUWVBFX0NPREVfQk9PTCBhbmQgVFlQRV9DT0RFX0NIQVIuCgoJKiBleHByZXNzaW9uLmggKGVudW0gZXhwX29wY29kZSk6ICBBZGQgTW9kdWxhLTIgc3BlY2lmaWMgb3Bjb2Rlcy4KCSogZXhwcHJpbnQuYzogIExvb2sgdXAgZXhwcmVzc2lvbiBvcGNvZGVzIGluIGxhbmd1YWdlLXNwZWNpZmljCgl0YWJsZSwgYmFzZWQgb24gZXhwcmVzc2lvbidzIGxhbmd1YWdlLiAgSGFuZGxlIHNvbWUgTW9kdWxhLTIKCXNwZWNpZmljIG9wY29kZXMuCgoJKiBzdGFjay5jIChmcmFtZV9pbmZvKTogIFByaW50IGxhbmd1YWdlIG9mIHN0YWNrIGZyYW1lLgoJKHNlbGVjdF9mcmFtZSk6ICBBbHNvIHNlbGVjdCBsYW5ndWFnZSwgaWYgaW4gYXV0by1tb2RlLgoJKGdldF9mcmFtZV9sYW5ndWFnZSk6ICBOZXcgc3Vicm91dGluZS4KCSogbWFpbi5jIChleGVjdXRlX2NvbW1hbmQpOiAgV2FybiBhcyBsYW5ndWFnZSBjaGFuZ2VzIGF1dG9tYXRpY2FsbHkuCgoJKiBwcmludGNtZC5jIChwdHlwZV9jb21tYW5kKTogIFBhcnNlIHR5cGVzIHVzaW5nIHRoZSBsYW5ndWFnZQoJcGFyc2VyLCBib3RoIGZvciBsYW5ndWFnZS1pbmRlcGVuZGVuY2UsIGFuZCBzbyB0aGF0IHNjb3BlcyBjYW4KCWJlIHNwZWNpZmllZC4KCgkqIGxhbmd1YWdlLmgsIGxhbmd1YWdlLmM6ICBOZXcgZmlsZXMgZm9yIGxhbmd1YWdlLXNwZWNpZmljIG1hY3JvcywKCWRlY2xhcmF0aW9ucywgYW5kIGRlZmluaXRpb25zLgoKCU1pc2MgZml4ZXM6CgoJKiBtYWluLmMgKG1haW4pOiAgSWYgZXJyb3IoKSBpcyBjYWxsZWQgZHVyaW5nIGVhcmx5Cglpbml0aWFsaXphdGlvbiwgcHJpbnQgaXRzIG1lc3NhZ2UgYW5kIHRoZW4gZXhpdCgxKSBmcm9tIEdEQi4KCgkqIHZhbHByaW50LmMgKHR5cGVfcHJpbnRfYmFzZSk6ICBBdm9pZCBwcmludGluZyBnYXJiYWdlIGZvciBpbnRzCglvZiB1bnVzdWFsIHNpemVzLgoJKF9pbml0aWFsaXplX3ZhbHByaW50KTogIFdhcm4gYWJvdXQgaG9zdC90YXJnZXQgc2l6ZSBhc3N1bXB0aW9uOwoJaW1wcm92ZSBsb25nIGxvbmcgc3VwcG9ydCBzbGlnaHRseS4JCgkKCSogY29udmV4LXRkZXAuYyAoY29tbV9yZWdpc3RlcnNfaW5mbyk6ICBBdm9pZCBwYXJzaW5nIGRlY2ltYWwgYW5kCgloZXggLS0gbGV0IHBhcnNlX2FuZF9ldmFsX2FkZHJlc3MgZG8gaXQuCgoJKiBkb2MvZ2RiaW50LnRleGluZm8gKExhbmd1YWdlcyk6ICBEb2MgaG93IHRvIGFkZCBhIGxhbmd1YWdlLgoKCSogTWFrZWZpbGUuaW46ICBDb3BlIHdpdGggbmV3IGZpbGVzIGFuZCByZW1vdmVkIGZpbGVzLgoKVHVlIFNlcCAxNyAwODozNzo0MSAxOTkxICBKb2huIEdpbG1vcmUgIChnbnUgYXQgY3lnaW50LmN5Z251cy5jb20pCgoJQWRkIEFuZHJldyBCZWVycycgY2hhbmdlcyBmb3IgTW9kdWxhLTIgc3VwcG9ydC4gIEhpcyBDaGFuZ2VMb2cKCWVudHJpZXMgYXJlIGVuY2xvc2VkIGhlcmVpbi4gIE5vdCBhbGwgb2YgdGhlc2UgY2hhbmdlcwoJaGF2ZSBiZWVuIG1lcmdlZCBpbnRvIHRoZSBtYXN0ZXIgR0RCIHNvdXJjZXMgLS0gY2hlY2sgdGhlCglDaGFuZ2VMb2cgYWJvdmUgaGVyZSBmb3IgdGhlIG1lcmdlIGxvZy4KCk1vbiBKdW4gIDMgMTc6MDU6NDUgRURUIDE5OTEKCiAgICAgbTItZXhwLnkgICAgICAgQ3JlYXRlZC4gIFRlc3RlZCBvdXRzaWRlIG9mIEdEQiBmb3IgYSBmZXcgZGF5cy4gIFByb3BlcgogICAgICAgICAgICAgICAgICAgIG9wZXJhdG9ycyB3ZXJlIGFkZGVkLCBDIHNwZWNpZmljIG9wZXJhdG9ycyBhbmQgdG9rZW5zCiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlZC4gIHl5bGV4KCkgcmV2YW1wZWQgdG8gc29tZSBleHRlbnQuICBTdGlsbCB0aGluZ3MKICAgICAgICAgICAgICAgICAgICBtaXNzaW5nIGZyb20gdGhlIGdyYW1tYXIsIHN1Y2ggYXMgc2V0cy4KICAgICAgICAgICAgICAgICAgICBUZXN0ZWQgZm9yIHR3byB3ZWVrcyBpbiBHREIgdjMuNS4KClR1ZSBKdW4gMTEgMTc6MjM6NDggRURUIDE5OTEKCiAgICAgbTItZXhwLnkgICAgICAgQWRkZWQgYm9vbGVhbiBjb25zdGFudHMgVFJVRSBhbmQgRkFMU0UgdG8gdGhlIGdyYW1tYXIKICAgICAgICAgICAgICAgICAgICBzbyB0aGV5IGFyZSBidWlsdC1pbi4gIFNvcnQgb2YgYSBoYWNrLgoKRnJpIEp1biAxNCAxMjo1Mzo1MSBFRFQgMTk5MQoKICAgICBtMi1leHAueSAgICAgICBBZGRlZCByYW5nZSBjaGVja2luZyBmb3IgbnVtZXJpYyBjb25zdGFudHMuICBBbnkgbnVtZXJpYwogICAgICAgICAgICAgICAgICAgIGNvbnN0YW50IGlzIGFzc3VtZWQgdG8gYmUgb2YgYnVpbHRpbiB0eXBlIElOVEVHRVIgdW5sZXNzOgogICAgICAgICAgICAgICAgICAgICgxKSBpdCBpcyBvY3RhbCBvciBoZXhhZGVjaW1hbCwgaW4gd2hpY2ggY2FzZSBpdCBpcyBhCiAgICAgICAgICAgICAgICAgICAgQ0FSRElOQUw7ICgyKSBpdCBpcyB0b28gYmlnIHRvIGZpdCBpbnRvIGFuIElOVEVHRVIsIGluCiAgICAgICAgICAgICAgICAgICAgd2hpY2ggY2FzZSBpdCBpcyBhIENBUkRJTkFMLgogICAgIGV2YWwuYyAgICAgICAgIEFkZGVkIHNpbXBsZSByYW5nZSBjaGVja2luZyBmb3IgKywgLSwgYW5kICogb24gaW50ZWdlcnMuCiAgICAgICAgICAgICAgICAgICAgRG9lc24ndCB3b3JrIHZlcnkgd2VsbCBmb3IgKiwgc2luY2UgNiAqIDEsMDAwLDAwMCwwMDAgPQogICAgICAgICAgICAgICAgICAgIDEsNzA1LDAzMiw3MDQsIHdoaWNoIGZhaWxzIHRoZSBzaW1wbGUgdGVzdCBvZiByZXN1bHQgPj0KICAgICAgICAgICAgICAgICAgICBmaXJzdF9vcGVyYW5kLCBubyBtYXR0ZXIgaW4gd2hhdCBvcmRlciB0aGUgb3BlcmFuZHMgYXJlLgoKVHVlIEp1biAxOCAxNDoxMTozMCBFRFQgMTk5MQoKICAgICBCcm9rZSB0aGUgcGFyc2VyIGludG8gcGFydHMsIG9uZSBjb250YWluaW5nIHRoZSBDIGdyYW1tYXIgYW5kIHRoZSBvdGhlcgogICAgIGNvbnRhaW5pbmcgY29kZSB0byBiZSBzaGFyZWQgYnkgYWxsIG9mIHRoZSBncmFtbWFycy4KCiAgICAgVGhlIGZvbGxvd2luZyBmaWxlcyBubyBsb25nZXIgZXhpc3Q6CgogICAgICAgICAgZXhwcmVhZC55CiAgICAgICAgICBleHByZWFkLnRhYi5jCgogICAgIFRoZSBmb2xsb3dpbmcgZmlsZXMgd2VyZSBhZGRlZDoKCiAgICAgICAgICBjLWV4cC55ICAgICAgICAoVGhlIEMgZ3JhbW1hcikKICAgICAgICAgIG0yLWV4cC55ICAgICAgIChUaGUgTW9kdWxhLTIgZ3JhbW1hcikKICAgICAgICAgIHBhcnNlci1jb2RlLmMgIChDb2RlIHRoYXQgaXMgc2hhcmVkIGJ5IHRoZSBhYm92ZSBncmFtbWFyKQogICAgICAgICAgcGFyc2VyLWNvZGUuaAogICAgICAgICAgcGFyc2VyLWRlZnMuaAoKICAgICBNYWtlZmlsZS5kaXN0ICBDaGFuZ2VkIHRvIHJlZmxlY3QgdGhlIGFib3ZlIGRlcGVuZGVuY2llcy4gIE5PVEU6ICBJdCBpcwogICAgICAgICAgICAgICAgICAgIG5vdyBuZWNlc3NhcnkgdG8gdXNlIHRoZSBCaXNvbiBjb21waWxlciBjb21waWxlciwgc2luY2UgaXQKICAgICAgICAgICAgICAgICAgICB3aWxsIGdlbmVyYXRlIGZ1bmN0aW9uL3ZhcmlhYmxlIHByZWZpeGVzIG90aGVyIHRoYW4geXkuCgpUdWUgSnVuIDE4IDE2OjQ3OjQ5IEVEVCAxOTkxCgogICAgIHN5bXRhYi5bY2hdICAgIEFkZGVkIHRoZSBleHRlcm5hbCB2YXJpYWJsZSB3b3JraW5nX2xhbmcsIHRoYW4gaG9sZHMgdGhlCiAgICAgICAgICAgICAgICAgICAgdmFsdWUgb2YgdGhlIGN1cnJlbnQgd29ya2luZyBsYW5ndWFnZS4KICAgICAgICAgICAgICAgICAgICBBZGRlZCB0aGUgZW5udW1lcmF0ZWQgdHlwZSBsYW5ndWFnZV9tb2RlLCB3aXRoIHRoZSB2YWx1ZXMKICAgICAgICAgICAgICAgICAgICBsYW5ndWFnZV9hdXRvIGFuZCBsYW5ndWFnZV9tYW51YWwsIHRoZSBmb3JtZXIgbWVhbmluZyB0aGF0CiAgICAgICAgICAgICAgICAgICAgR0RCIHNldHMgd29ya2luZ19sYW5nIGFzIG5lZWRlZCwgYW5kIHRoZSBsYXR0ZXIgbWVhbmluZwogICAgICAgICAgICAgICAgICAgIHRoYXQgdGhlIHZhbHVlIG9mIHdvcmtpbmdfbGFuZyBpcyB0b3RhbGx5IHVuZGVyIHVzZXIKICAgICAgICAgICAgICAgICAgICBjb250cm9sLgogICAgIHN5bXRhYi5bY2hdICAgIEFkZGVkIHRoZSBNb2R1bGEtMiBwZXJ2YXNpdmUgdHlwZXMgSU5URUdFUiwgQ0FSRElOQUwsCiAgICAgICAgICAgICAgICAgICAgUkVBTCwgQk9PTEVBTiBhbmQgQ0hBUi4gIEFsc28gYWRkZWQgdGhlIHR5cGUgY29kZXMKICAgICAgICAgICAgICAgICAgICBUWVBFX0NPREVfQk9PTCBhbmQgVFlQRV9DT0RFX0NIQVIuCiAgICAgdXRpbHMuYyAgICAgICAgQWRkZWQgc2V0X2xhbmd1YWdlX2NvbW1hbmQgYW5kIHNob3dfbGFuZ3VhZ2VfY29tbWFuZCB0bwogICAgICAgICAgICAgICAgICAgIGltcGxlbWVudCB0aGUgR0RCIHN1cHBvcnQgY29tbWFuZHMgInNldCBsYW5ndWFnZSIgYW5kCiAgICAgICAgICAgICAgICAgICAgInNob3cgbGFuZ3VhZ2UiLgogICAgIGV4cHJlc3Npb24uaCAgIEEgbnVtYmVyIG9mIGlkZW50aWZpZXJzIHdlcmUgYWRkZWQgdG8gdGhlIHR5cGUgZXhwX29wY29kZQogICAgICAgICAgICAgICAgICAgIHRvIGZhY2lsaXRhdGUgTW9kdWxhLTIgYnVpbHRpbiBmdW5jdGlvbnMsIGludGVnZXIKICAgICAgICAgICAgICAgICAgICBkaXZpc2lvbiwgYW5kIGFycmF5IGluZGV4aW5nLgoKV2VkIEp1biAxOSAxMzoyNTo1OCBFRFQgMTk5MQoKICAgICBsYW5ndWFnZS5oICAgICBBZGRlZCB0aGUgbWFjcm8gU1RSSUNUX1RZUEUsIHdoaWNoIGV2YWx1YXRlcyB0byBub24temVybwogICAgICAgICAgICAgICAgICAgIGlmIHRoZSBsYW5ndWFnZSBzcGVjaWZpZWQgYnkgd29ya2luZ19sYW5nIHJlcXVpcmVzIHRoZSB1c2UKICAgICAgICAgICAgICAgICAgICBvZiBzdHJpY3QgdHlwaW5nIG9mIGV4cHJlc3Npb25zLiAgRXZlbnR1YWxseSwgZXZlbiB0aGlzCiAgICAgICAgICAgICAgICAgICAgd2lsbCBiZSBhYmxlIHRvIGJlIGNoYW5nZWQgYnkgdGhlIHVzZXIuCiAgICAgICAgICAgICAgICAgICAgQWRkZWQgdGhlIG1hY3JvIFJBTkdFX0NIRUNLLCB3aGljaCBldmFsdWF0ZXMgdG8gbm9uLXplcm8KICAgICAgICAgICAgICAgICAgICBpZiB0aGUgbGFuZ3VhZ2Ugc3BlY2lmaWVkIGJ5IHdvcmtpbmdfbGFuZyByZXF1aXJlcyB0aGUKICAgICAgICAgICAgICAgICAgICBjaGVja2luZyBvZiBhIHZhbHVlIGFnYWluc3QgdGhlIGRvbWFpbiBvZiBpdHMgdHlwZS4KICAgICAgICAgICAgICAgICAgICBFdmVudHVhbGx5LCBldmVuIHRoaXMgd2lsbCBiZSBhYmxlIHRvIGJlIGNoYW5nZWQgYnkgdGhlCiAgICAgICAgICAgICAgICAgICAgdXNlci4KICAgICBsYW5ndWFnZS5bY2hdICBQcmVkaWNhdGVzIGludm9sdmluZyB0eXBlcyAoc2ltcGxlX3R5cGUsIG9yZGVyZWRfdHlwZSwKICAgICAgICAgICAgICAgICAgICBzYW1lX3R5cGUsIGludGVncmFsX3R5cGUsIG51bWVyaWNfdHlwZSwgY2hhcmFjdGVyX3R5cGUsCiAgICAgICAgICAgICAgICAgICAgYm9vbGVhbl90eXBlLCBmbG9hdF90eXBlKSBhcmUgYWRkZWQuICBUaGVzZSBwcmVkaWNhdGVzIGFyZQogICAgICAgICAgICAgICAgICAgIGJhc2VkIG9uIHRoZSBjdXJyZW50IHZhbHVlIG9mIHdvcmtpbmdfbGFuZywgYW5kIGFyZSBoYW5keQogICAgICAgICAgICAgICAgICAgIGluIHR5cGUtY2hlY2tpbmcuCgpXZWQgSnVuIDE5IDE1OjM5OjM0IEVEVCAxOTkxCgogICAgIGV2YWwuYyAgICAgICAgIEFkZGVkIHRoZSBmdW5jdGlvbiB0eXBlX2FycmF5X3Jhbmsgd2hpY2ggY29tcHV0ZXMgdGhlIHJhbmsKICAgICAgICAgICAgICAgICAgICBvZiBhbiBhcnJheSB0eXBlLgogICAgIHZhbGFyaXRoLmMgICAgIEFkZGVkIHRoZSBmdW50aW9uIHZhbHVlX2Jvb2wsIHdoaWNoIHdoZW4gZ2l2ZW4gYSBpbnRlZ2VyCiAgICAgdmFsdWUuaCAgICAgICAgdmFsdWUgKGllLiBzdHJ1Y3QgdmFsdWUgKikgYXMgYW4gYXJndW1lbnQsIGl0IHJldHVybnMgYQogICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gdmFsdWUgKGllLiAgc3RydWN0IHZhbHVlICopIHRydWUgaWYgdGhhdCBpbnRlZ2VyCiAgICAgICAgICAgICAgICAgICAgaXMgbm9uLXplcm8sIGFuZCBhIGJvb2xlYW4gdmFsdWUgZmFsc2Ugb3RoZXJ3aXNlLgogICAgIHZhbHByaW50LmMgICAgIEFkZGVkIGNhc2VzIGZvciBUWVBFX0NPREVfQk9PTCwgc28gTW9kdWxhLTIgQk9PTEVBTiB2YWx1ZXMKICAgICAgICAgICAgICAgICAgICB3aWxsIHByaW50IG91dCBwcm9wZXJseS4KCldlZCBKdW4gMTkgMTY6MzY6MzQgRURUIDE5OTEKCiAgICAgdmFsb3BzLmMgICAgICAgQWRkZWQgdGhlIGZ1bmN0aW9uIHZhbHVlX2NhcGl0YWxpemUsIHdoaWNoIHJldHVybnMgaXQKICAgICB2YWx1ZS5oICAgICAgICBhcmd1bWVudCBjYXBpdGFsaXplZCBpZiBpdHMgYXJndW1lbnQgaXMgYSBsb3dlcmNhc2UKICAgICAgICAgICAgICAgICAgICBsZXR0ZXIsIG9yIHRoZSBhcmd1bWVudCB1bmNoYW5nZWQgaWYgaXRzIGFyZ3VtZW50IGlzIG5vdCBhCiAgICAgICAgICAgICAgICAgICAgbGV0dGVyLgogICAgIHZhbGFyaXRoLmMgICAgIEFkZGVkIHRoZSBmdW5jdGlvbiByYW5nZV9jaGVja19wLCB3aGljaCByZXR1cm5zIG5vbi16ZXJvCiAgICAgdmFsdWUuaCAgICAgICAgaWYgaXRzIHZhbHVlIGFyZ3VtZW50IGlzIGJldHdlZW4gdGhlIGludGVncmFsIGJvdW5kcyB1cHBlcgogICAgICAgICAgICAgICAgICAgIGFuZCBsb3dlci4KICAgICAgICAgICAgICAgICAgICBBZGRlZCB0aGUgZnVuY3Rpb24gcmFuZ2VfY2hlY2tfZW51bV9wLCB3aGljaCBtYWtlcyBzdXJlCiAgICAgICAgICAgICAgICAgICAgdGhhdCBpdHMgdmFsdWUgYXJndW1lbnQgaXMgYSB2YWxpZCBtZW1iZXIgb2YgdGhlIGRvbWFpbiBvZgogICAgICAgICAgICAgICAgICAgIGl0cyB0eXBlIGFyZ3VtZW50LgogICAgICAgICAgICAgICAgICAgIEFkZGVkIHRoZSBmdW5jdGlvbiByYW5nZV9jaGVja19yYW5nZV9wLCB3aGljaCBtYWtlcyBzdXJlCiAgICAgICAgICAgICAgICAgICAgaXRzIHZhbHVlIGFyZ3VtZW50IGxpZXMgYmV0d2VlbiB0aGUgdXBwZXIgYW5kIGxvd2VyIGJvdW5kcwogICAgICAgICAgICAgICAgICAgIG9mIGl0cyB0eXBlIGFyZ3VtZW50LCB3aGljaCBtdXN0IGJlIGEgcmFuZ2VkIHR5cGUuCiAgICAgICAgICAgICAgICAgICAgQWRkZWQgdGhlIGZ1bmN0aW9uIGNoZWNrX2FycmF5X2luZGV4LCB3aGljaCByYW5nZSBhbmQgdHlwZQogICAgICAgICAgICAgICAgICAgIGNoZWNrcyBhbiBpbmRleCBvZiBhbiBhcnJheS4KICAgICAgICAgICAgICAgICAgICBBZGRlZCB0aGUgZnVuY3Rpb24gdmFsdWVfbXVsdGlfc3Vic2NyaXB0LCB3aGljaCBjb21wdXRlcwogICAgICAgICAgICAgICAgICAgIGFycmF5W2lkeDEsaWR4Mi4uLmlkeE5dLCBnaXZlbiBhIHZhbHVlIGFycmF5IGFuZCBhbiBhcnJheQogICAgICAgICAgICAgICAgICAgIG9mIHZhbHVlcyByZXByZXNlbnRpbmcgaW5kaWNpZXMuCiAgICAgdmFsdWVzLmMgICAgICAgQ2hhbmdlZCB2YWx1ZV9mcm9tX2xvbmcgdG8gd29yayB3aXRoIFRZUEVfQ09ERV9DSEFSIGFuZAogICAgICAgICAgICAgICAgICAgIHVucGFja19sb25nIHRvIHdvcmsgd2l0aCBUWVBFX0NPREVfQk9PTCBhbmQKICAgICAgICAgICAgICAgICAgICBUWVBFX0NPREVfQ0hBUi4KCldlZCBKdW4gMTkgMTg6MDQ6MDggRURUIDE5OTEKCiAgICAgc3ltdGFiLmMgICAgICAgU3RvcmVkIHBlcnZhc2l2ZSB0eXBlcyBpbiBhIHN0cnVjdHVyZSBhbmQgbWFrZQogICAgICAgICAgICAgICAgICAgIGxvb2t1cF9wZXJ2YXNpdmVfdHlwZSgpIGEgbG9va3VwIGZ1bmN0aW9uIHRoYXQgd2FzIGJhc2VkCiAgICAgICAgICAgICAgICAgICAgb24gd29ya2luZ19sYW5nLiAgSWYgbG9va3VwX3BlcnZhc2l2ZV90eXBlKCkgcmV0dXJuZWQKICAgICAgICAgICAgICAgICAgICBub24temVybywgdGhlbiB0aGF0IHZhbHVlIHdhcyByZXR1cm5lZCAoYSBmaXgsIHNpbmNlCiAgICAgICAgICAgICAgICAgICAgYmVmb3JlIGl0IHNpbXBseSB3b3VsZG4ndCByZXR1cm4gdGhlIHBlcnZhc2l2ZSB0eXBlLikKICAgICBsYW5ndWFnZS5oICAgICBBZGRlZCB0aGUgbWFjcm8gQ0FTVF9JU19DT05WRVJTSU9OLCB3aGljaCBldmFsdWF0ZXMgdG8KICAgICAgICAgICAgICAgICAgICBub24temVybyBpZiB0aGUgbGFuZ3VhZ2Ugc3BlY2lmaWVkIGJ5IHdvcmtpbmdfbGFuZyBtZWFucwogICAgICAgICAgICAgICAgICAgICJjb252ZXJzaW9uIiB3aGVuIGl0IHNheXMgImNhc3QiLgogICAgIHZhbG9wcy5jICAgICAgIEFkZGVkIHRoZSBmdW5jdGlvbiB2YWx1ZV9yZWFsX2Nhc3QoKSwgd2hpY2ggcGVyZm9ybXMgYQogICAgIHZhbHVlLmggICAgICAgICpjYXN0Kiwgbm90IGEgKmNvbnZlcnNpb24qLCB3aGljaCBpcyB3aGF0IHZhbHVlX2Nhc3QoKQogICAgICAgICAgICAgICAgICAgIGRvZXMgd2hlbiBpdCBjYW4uICBJbiBwYXJ0aWN1bGFyLAogICAgICAgICAgICAgICAgICAgIHZhbHVlX2Nhc3QoPGZsb2F0X3R5cGU+LDQpID0gNC4wLCB3aGlsZQogICAgICAgICAgICAgICAgICAgIHZhbHVlX3JlYWxfY2FzdCg8ZmxvYXRfdHlwZT4sNCkgPSBzb21lIG1lc3MuCiAgICAgZXZhbC5jICAgICAgICAgTW9kdWxhLTIgYnVpbHRpbiBmdW5jdGlvbnMgaW1wbGVtZW50ZWQ6ICBBQlMsIENBUCwgQ0hSLAogICAgIHBhcnNlci1jb2RlLmMgIEZMT0FULCBISUdILCBNQVgsIE1JTiwgT0RELCBPUkQsIFRSVU5DLCBhbmQgVkFMLiAgCiAgICAgZXhwcmVzc2lvbi5oICAgQWRkZWQgbWFjcm9zIE1BWF9PRl9UWVBFIGFuZCBNSU5fT0ZfVFlQRSB0byB3b3JrIHdpdGggTUFYCiAgICAgICAgICAgICAgICAgICAgYW5kIE1JTiBvbiBpbnRlZ3JhbCB0eXBlcy4gICpOT1RFKjogVGhlc2UgYXJlIGN1cnJlbnRseQogICAgICAgICAgICAgICAgICAgIGhhcmRjb2RlZCB0byB3b3JrIG9ubHkgaWYgdGhlcmUgYXJlIDggYml0cyBwZXIgc3RvcmFnZQogICAgICAgICAgICAgICAgICAgIHVuaXQuICBGSVhNRS4KICAgICBldmFsLmMgICAgICAgICBNYWRlIGxvZ2ljYWwgZnVuY3Rpb25zIGNhbGwgdmFsdWVfYm9vbCB0byByZXR1cm4gYQogICAgICAgICAgICAgICAgICAgIHByb3Blcmx5IHR5cGVkIGJvb2xlYW4gdmFsdWUsIGJhc2VkIG9uIHdvcmtpbmdfbGFuZy4KClRodSBKdW4gMjAgMTE6NTU6MjcgRURUIDE5OTEKCiAgICAgdmFscHJpbnQuYyAgICAgVHlwZXMgbm93IHByaW50IG91dCBpbiBhIE1vZHVsYS0yIGZhc2hpb24uICBUaGlzIHdvcmtzIGZvcgogICAgICAgICAgICAgICAgICAgIHRoZSBjYXNlcyB3aGVuIHRoZSB0eXBlIGlzIHByaW50ZWQgb3V0IHN0ZXAtYnktc3RlcCwgdGhhdAogICAgICAgICAgICAgICAgICAgIGlzLCBpdCBkb2Vzbid0IHdvcmsgd2hlbiB0aGUgbmFtZSBvZiBhIHN0cnVjdHVyZWQgdHlwZQogICAgICAgICAgICAgICAgICAgICh3aGljaCBpbmNsdWRlcyB0aGUga2V5d29yZCAic3RydWN0IiwgZXRjLikgIGlzIHNpbXBseQogICAgICAgICAgICAgICAgICAgIGRpc3BsYXllZC4KICAgICAgICAgICAgICAgICAgICBGSVhNRTogIFBlcmhhcHMgdGhpcyBpcyBiYWQuICBQYXJ0cyBvZiBpdCBzZWVtIHRvIGtsdWRnZXksCiAgICAgICAgICAgICAgICAgICAgc2luY2UgdHlwZSBzcGVjaWZpY2F0aW9ucyBpbiBDIGFuZCBNb2R1bGEtMiBhcmUgdmVyeQogICAgICAgICAgICAgICAgICAgIGRpZmZlcmVudC4gIFRoZSBDIHByaW50aW5nIG9mIGEgdHlwZSBpcyB2ZXJ5IHJlY3Vyc2l2ZSwKICAgICAgICAgICAgICAgICAgICB3aGVyZWFzIGluIE1vZHVsYS0yIGl0IGlzIGdlbmVyYWxseSB2ZXJ5IHNpbXBsZS4gIEMgaGFzCiAgICAgICAgICAgICAgICAgICAgdHlwZSBwcmVmaXhlcyBhbmQgc3VmZml4ZXMsIHdoaWNoIGhhdmUgbm8gcmVhbCBhbmFsb2d1ZSBpbgogICAgICAgICAgICAgICAgICAgIE1vZHVsYS0yLiAgTWF5YmUgdHlwZV9wcmludCgpIHNob3VsZCBjYWxsIGEgbGFuZ3VhZ2UKICAgICAgICAgICAgICAgICAgICBzcGVjaWZpYyB0eXBlIHByaW50ZXIuICBUaGlzIGlzIGFsc28gYWR2YW50YWdlb3VzIGlmIHdlCiAgICAgICAgICAgICAgICAgICAgY29tcGlsZSBHREIgdG8gZXhjbHVkZSBzb21lIG9mIHRoZSBsYW5ndWFnZXMuICBXZSdsbCBqdXN0CiAgICAgICAgICAgICAgICAgICAgbGVhdmUgdGhvc2UgZnVuY3Rpb25zIG91dC4KClRodSBKdW4gMjAgMTY6NTc6MTAgRURUIDE5OTEKCiAgICAgZGJ4cmVhZC5jICAgICAgV2hlbiByZWFkaW5nIHRoZSBjb21wbGV0ZSBzeW1ib2wgdGFibGUgaW4gKHZpYQogICAgICAgICAgICAgICAgICAgIHBzeW10YWJfdG9fc3ltdGFiKCkpLCB0aGUgbnVtYmVyIGFuZCB0eXBlcyBvZiBmdW5jdGlvbgogICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50cyBhcmUgYWRkZWQgdG8gYSBmdW5jdGlvbiB0eXBlLiAgZGVmaW5lX3N5bWJvbCgpCiAgICAgICAgICAgICAgICAgICAgY2FsbHMgYWRkX3BhcmFtX3RvX3R5cGUoKSB0byBhY2NvbXBsaXNoIHRoaXMuCiAgICAgICAgICAgICAgICAgICAgQXNzdW1wdGlvbjogIHdoZW4gd2UgY29tZSBhY3Jvc3MgYSBmdW5jdGlvbiBkZWZpbml0aW9uCiAgICAgICAgICAgICAgICAgICAgKE5fRlVOIHN5bWJvbCB3aXRoIGFuICdmJyBvciAnRicgaW4gdGhlIG5hbWUpLCBpdHMKICAgICAgICAgICAgICAgICAgICBhcmd1bWVudHMgd2lsbCBhcHBlYXIgYmVmb3JlIGFub3RoZXIgZnVuY3Rpb24gZGVmaW5pdGlvbi4KICAgICAgICAgICAgICAgICAgICBXaGVuIGEgZnVuY3Rpb24gaXMgZm91bmQsIGEgcG9pbnRlciB0byBpdHMgdHlwZSBpcyBwbGFjZWQKICAgICAgICAgICAgICAgICAgICBpbiB0aGUgZ2xvYmFsIGluX2Z1bmN0aW9uX3R5cGUuICBDaGFuZ2VzIHRoYXQKICAgICAgICAgICAgICAgICAgICBhZGRfcGFyYW1fdG9fdHlwZSgpIG1ha2VzIGFyZSB0byB0aGlzIGdsb2JhbC4KICAgICB2YWxwcmludC5jICAgICBUaGUgdHlwZSBvZiBhIGZ1bmN0aW9uIG5vdyBpbmNsdWRlcyAoZm9yIE1vZHVsYS0yKSB0aGUKICAgICAgICAgICAgICAgICAgICB0eXBlcyBvZiBpdHMgcGFyYW1ldGVycy4KICAgICBldmFsLmMgICAgICAgICBUeXBlIGNoZWNraW5nIGFuZCBhIGNoZWNrIGZvciB0aGUgcHJvcGVyIG51bWJlciBvZgogICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50cyBpcyBub3cgZG9uZSBmb3IgZnVuY3Rpb24gY2FsbHMuICBOb3Qgc3VyZSBvZiB0aGUKICAgICAgICAgICAgICAgICAgICBpbXBhY3QgdGhpcyBoYXMgb24gQysrIG1lbWJlciBmdW5jdGlvbiB5ZXQuCgpUaHUgSnVuIDIwIDE5OjU4OjQ4IEVEVCAxOTkxCgogICAgIHZhbHByaW50LmMgICAgIFJld3JvdGUgdGhlIHR5cGUgcHJpbnRlci4gIEJyb2tlIGl0IGludG8gdHdvIGxhbmd1YWdlCiAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWMgcGFydHMsIGFkZGluZyB0aGUgZnVuY3Rpb25zIHR5cGVfcHJpbnRfbTIoKSBhbmQKICAgICAgICAgICAgICAgICAgICB0eXBlX3ByaW50X20yXzEoKS4KICAgICAgICAgICAgICAgICAgICBBbiB1bmZvcnR1bmF0ZSBjb25zZXF1ZW5jZSBpcyB0aGlzOiAgaWYgeW91IGRlYnVnZ2luZyBhIEMKICAgICAgICAgICAgICAgICAgICBwcm9ncmFtIGluIE1vZHVsYS0yIG1vZGUgKHdoeT8pLCBpbmZvIHR5cGVzIGRvZXMgbm90IHdvcmsKICAgICAgICAgICAgICAgICAgICB3ZWxsIHdpdGggcmVndWxhciBleHByZXNzaW9ucywgc2luY2UgdGhlIHR5cGVzIGFyZSBwcmludGVkCiAgICAgICAgICAgICAgICAgICAgb3V0IGluIE1vZHVsYS0yIHRlcm1pbm9sb2d5LCBidXQgc3RvcmVkIGluIEMgdGVybWlub2xvZ3kuCiAgICAgbGFuZ3VhZ2UuW2NoXSAgQWRkZWQgdGhlIGZ1bmN0aW9ucyBuZXdfdHlwZV9sYXN0KCksIHR5cGVfa2V5d29yZCgpLCBhbmQKICAgICAgICAgICAgICAgICAgICB0eXBlX3NlcCgpIHRvIGFpZCBpbiB0aGUgcHJpbnRpbmcgb2YgdHlwZWRlZnMuCiAgICAgc3ltdGFiLmMgICAgICAgTWFkZSB0aGUgcHJpbnRpbmcgb2YgdHlwZWRlZnMgYXMgbGFuZ3VhZ2UgaW5kZXBlbmRlbnQgYXMKICAgICAgICAgICAgICAgICAgICBwb3NzaWJsZSB0aHJvdWdoIGNhbGxzIHRvIG5ld190eXBlX2xhc3QoKSwgdHlwZV9rZXl3b3JkKCksCiAgICAgICAgICAgICAgICAgICAgYW5kIHR5cGVfc2VwKCkuCgpGcmkgSnVuIDIxIDExOjUwOjI2IEVEVCAxOTkxCgogICAgIGRieHJlYWQuYyAgICAgIENoZWNrIGFsbCBpbmNvbWluZyBlbm51bWVyYXRlZCB0eXBlcy4gIElmIGl0IGxvb2tzIGxpa2UKICAgICAgICAgICAgICAgICAgICBNb2R1bGEtMidzIEJPT0xFQU4gdHlwZSwgdGhlbiBjaGFuZ2UgdGhlIHR5cGVfY29kZSBvZiB0aGUKICAgICAgICAgICAgICAgICAgICB0eXBlIHRvIFRZUEVfQ09ERV9CT09MIHNvIHdlIGNhbiBwcm9jZXNzIGl0IGFzIGEgYm9vbGVhbgogICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLgogICAgIHZhbHByaW50LmMgICAgIFJlcGxhY2VkIHNvbWUgb2YgdGhlIDB4JXggd2l0aCBjYWxscyB0byBzcHJpbnRmIGFuZAogICAgICAgICAgICAgICAgICAgIGhleGZvcm1hdCgpIGluIHZhbF9wcmludCgpLgogICAgIGxhbmd1YWdlLltjaF0gIEFkZGVkIHRoZSBmdW5jdGlvbiBoZXhfdG9fc3RyaW5nKCksIHdoaWNoIGNvbnZlcnRzIGl0cwogICAgICAgICAgICAgICAgICAgIGludGVncmFsIGFyZ3VtZW50IHRvIGEgaGV4YWRlY2ltYWwgbnVtYmVyIChmb3JtYXQgaXMKICAgICAgICAgICAgICAgICAgICBsYW5ndWFnZSBiYXNlZCkgYW5kIHJldHVybnMgdGhlIHJlc3VsdCBhcyBhIHN0cmluZy4KCk1vbiBKdW4gMjQgMTI6MjU6MDcgRURUIDE5OTEKCiAgICAgdmFscHJpbnQuYyAgICAgU29tZSBmdW5jdGlvbnMgY2FsbCB0eXBlX3ByaW50XzEoKSBkaXJlY3RseSwgaW5zdGVhZCBvZgogICAgIHZhbHVlLmggICAgICAgIHVzaW5nIHR5cGVfcHJpbnQoKSwgc28gdGhleSBjYW4gc3BlY2lmeSB3aGVyZSAoY29sdW1uKSB0bwogICAgICAgICAgICAgICAgICAgIHByaW50IHRoaW5ncy4gIFNpbmNlIHR5cGVfcHJpbnQoKSB0YWtlcyBjYXJlIG9mIGxhbmd1YWdlCiAgICAgICAgICAgICAgICAgICAgZGVwZW5kZW5jZSwgdGhhdCBuZWVkcyB0byBiZSBjYWxsZWQgZmlyc3QuICBBZGRlZCBhCiAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyIGRlcHRoIHRvIHR5cGVfcHJpbnQoKSAoc28gaXQgaXMgbm93IGxpa2UKICAgICAgICAgICAgICAgICAgICB0eXBlX3ByaW50XzEpLiAgQ2hhbmdlZCB0eXBlX3ByaW50IHRvIHR5cGVfcHJpbnRfYXQsIGFuZAogICAgICAgICAgICAgICAgICAgIG1hZGUgdHlwZV9wcmludCBhIG1hY3JvIHRoYXQgcGFzc2VzIGEgZGVwdGggYXJndW1lbnQgb2YKICAgICAgICAgICAgICAgICAgICB6ZXJvLgogICAgIHN5bW1pc2MuYyAgICAgIENoYW5nZWQgYWxsIGNhbGxzIHRvIHR5cGVfcHJpbnRfMSB0byBjYWxscyB0bwogICAgICAgICAgICAgICAgICAgIHR5cGVfcHJpbnRfYXQuCiAgICAgTWFrZWZpbGUuZGlzdCAgTWFkZSBpdCBwb3NzaWJsZSB0byBidWlsZCBHREIgZm9yIGEgc3BlY2lmaWMgc2V0IG9mCiAgICAgZGVwZW5kICAgICAgICAgbGFuZ3VhZ2VzLiAgRG8gdGhpcyBieSBwYXNzaW5nIGEgZGVmaW5pdGlvbiBmb3IgdGhlIG1hY3JvCiAgICAgICAgICAgICAgICAgICAgTEFOR1MgdG8gbWFrZS4gIExBTkdTIHNob3VsZCBiZSBhIHN0cmluZyBjb250YWluaW5nIGEKICAgICAgICAgICAgICAgICAgICBzcGFjZS1zZXBhcmF0ZWQgbGlzdCBvZiBsYW5ndWFnZSBuYW1lcyAoaWUuIExBTkdTPSJjIG0yIikuCiAgICAgICAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgaXMgdG8gYnVpbGQgYWxsIGxhbmd1YWdlcy4gIE5vdGUgdGhhdCBncmFtbWFyCiAgICAgICAgICAgICAgICAgICAgZmlsZXMgbXVzdCBmb2xsb3cgdGhlIG5hbWluZyBjb252ZW50aW9uIG9mIDxsYW5nPi1leHAueS4KICAgICBnZGIubGFuZyAgICAgICBUaGlzIGhvbGRzIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBMQU5HUyBtYWNyby4gIEl0IGlzCiAgICAgICAgICAgICAgICAgICAgZXhhbWluZWQgZXZlcnkgdGltZSBtYWtlIGlzIGNhbGxlZCwgYW5kIGlzIHVwZGF0ZWQgaWYKICAgICAgICAgICAgICAgICAgICBuZWNlc3NhcnkuCiAgICAgZXZhbC5jICAgICAgICAgQWRkZWQgI2lmZGVmIF9MQU5HXzxsYW5nPiB0byB0aGVzZSBmaWxlcy4KICAgICBleHByZWFkLmMgICAgICBTdGlsbCBuZWVkIHRvIGFkZCB0aGVtIHRvIGRieHJlYWQuYyBhbmQgY29mZnJlYWQuYy4KICAgICBtYWluLmMKICAgICBzb3VyY2UuYwogICAgIHN5bXRhYi5jCiAgICAgdXRpbHMuYwogICAgIHZhbGFyaXRoLmMKICAgICB2YWxwcmludC5jCgpNb24gSnVuIDI0IDE2OjMzOjExIEVEVCAxOTkxCgogICAgIGxhbmd1YWdlLltjaF0gIEFkZGVkIHRoZSBmdW5jdGlvbnMgaGV4Zm9ybWF0X3ByZSgpIGFuZAogICAgICAgICAgICAgICAgICAgIGhleF90b19zdHJpbmdfcHJlKCksIHdoaWNoIHRha2UgYSBwcmVmaXggYXJndW1lbnQgdG8KICAgICAgICAgICAgICAgICAgICBpbmNsdWRlIGluIHRoZSBmb3JtYXQgc3RyaW5nLiAgVGh1cywgaGV4Zm9ybWF0X3ByZSgiMDgiKSB3aWxsCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICIweDA4eCIgKGlmIHRoZSB3b3JraW5nIGxhbmd1YWdlIGlzIGxhbmd1YWdlX2MpLiAKICAgICAgICAgICAgICAgICAgICBNYWRlIGhleGZvcm1hdCgpIGFuZCBoZXhfdG9fc3RyaW5nKCkgY2FsbHMgdG8gdGhlIGFib3ZlCiAgICAgICAgICAgICAgICAgICAgd2l0aCAiIiBhcyB0aGUgcHJlZml4IGFyZ3VtZW50LgoKICAgICBhbTI5ay1waW5zbi5jLCBhcm0tcGluc24uYywgYnJlYWtwb2ludC5jLCBjb252ZXgtdGRlcC5jLCBleGVjLmMsIGNvcmUuYywKICAgICBkYnhyZWFkLmMsIGkzODYtcGluc24uYywgaTM4Ni1zdHViLmMsIGkzODYteGRlcC5jLCBpOTYwLXBpbnNuLmMsCiAgICAgaW5mY21kLmMsIGluZmxvdy5jLCBtNjhrLXBpbnNuLmMsIG02OGstc3R1Yi5jLCBtODhrLXBpbnNuLmMsCiAgICAgbWlwcy1waW5zbi5jLCBtaXBzLXRkZXAuYywgbnMzMmstcGluc24uYywgcHJpbnRjbWQuYywgcHlyLXBpbnNuLmMsCiAgICAgcHlyLXRkZXAuYywgcHlyLXhkZXAuYywgcmVtb3RlLXZ4LmMsIHJlbW90ZS5jLCBzb2xpYi5jLCBzb3VyY2UuYywKICAgICBzdGFjay5jLCBzdW4zODYteGRlcC5jLCBzeW1maWxlLmMsIHN5bW0teGRlcC5jLCBzeW1taXNjLmMsIHRhaG9lLXBpbnNuLmMsCiAgICAgdmFscHJpbnQuYywgdmF4LXBpbnNuLmMKCiAgICAgICAgICBDaGFuZ2VkIGFsbCBvY2N1cmVuY2VzIG9mIDB4JVswLTldKmwqeCBpbiBwcmludGYgZm9ybWF0IHN0cmluZ3MgdG8KICAgICAgICAgIGNhbGxzIHRvIGhleGZvcm1hdCgpIGFuZCBoZXhfdG9fc3RyaW5nKCkuICBGb3JtYXQgc3RyaW5ncyB3aXRob3V0CiAgICAgICAgICB0aGUgbGVhZGluZyAiMHgiIHdlcmUgaWdub3JlZC4KCiAgICAgZGVwZW5kICAgICAgICAgVXBkYXRlZCB0byB0YWtlIHRoZSBhYm92ZSBpbnRvIGFjY291bnQuCgoKVHVlIEp1biAyNSAxNToyNzoxOCBFRFQgMTk5MQoKICAgICBzeW10YWIuaCAgICAgICBBZGRlZCB0aGUgdHlwZXMgcmFuZ2VfbW9kZV90LCByYW5nZV9jaGVja190LCB0eXBlX21vZGVfdCwKICAgICAgICAgICAgICAgICAgICBhbmQgdHlwZV9jaGVja190IHRvIGtlZXAgdHJhY2sgb2YgdGhlIGN1cnJlbnQgc3RhdGUgb2YKICAgICAgICAgICAgICAgICAgICByYW5nZSBhbmQgdHlwZSBjaGVja2luZy4KICAgICBtYWluLmMgICAgICAgICBBZGRlZCB0aGUgdmFyaWFibGVzIHJhbmdlX21vZGUsIHJhbmdlX2NoZWNrLCB0eXBlX21vZGUsCiAgICAgICAgICAgICAgICAgICAgYW5kIHR5cGVfY2hlY2sgdG8gcmVjb3JkIHRoZSBjdXJyZW50IHN0YXRlIG9mIHJhbmdlIGFuZAogICAgICAgICAgICAgICAgICAgIHR5cGUgY2hlY2tpbmcuICBBZGRlZCBpbml0aWFsaXphdGlvbiBjb2RlIHRvIG1haW4oKS4KICAgICBsYW5ndWFnZS5oICAgICBDaGFuZ2VkIHRoZSBtYWNyb3MgU1RSSUNUX1RZUEUgYW5kIFJBTkdFX0NIRUNLIHRvIGV4YW1pbmUKICAgICAgICAgICAgICAgICAgICB0aGUgYWJvdmUgdmFyaWFibGVzLgoKClR1ZSBKdW4gMjUgMTc6NTc6MDggRURUIDE5OTEKCiAgICAgZGJ4cmVhZC5jICAgICAgcHJvY2Vzc19vbmVfc3ltYm9sKCkgdXBkYXRlcyB0aGUgdmFyaWFibGUgKGVudW0gbGFuZ3VhZ2UpCiAgICAgICAgICAgICAgICAgICAgc291cmNlX2xhbmcgYmFzZWQgb24gdGhlIGV4dGVuc2lvbiBvZiB0aGUgZmlsZW5hbWUKICAgICAgICAgICAgICAgICAgICBjb250YWluZWQgaW4gdGhlIE5fU08gc3libW9sIHRoYXQgc3RhcnRlZCB0aGlzIHN5bXRhYi4KICAgICAgICAgICAgICAgICAgICBXaGVuIGVuZF9zeW10YWIoKSBpcyBjYWxsZWQsIHRoZSB2YWx1ZSBvZiBzb3VyY2VfbGFuZyBpcwogICAgICAgICAgICAgICAgICAgIHB1dCBpbnRvIHRoZSBsYW5ndWFnZSBmaWVsZC4KICAgICBzdGFjay5jICAgICAgICBzZWxlY3RfZnJhbWUoKSBzZXRzIHdvcmtpbmdfbGFuZyAoYW5kIHBvc3NpYmx5IHR5cGVfY2hlY2sKICAgICAgICAgICAgICAgICAgICBhbmQgcmFuZ2VfY2hlY2spIHRvIHRoZSBsYW5ndWFnZSBmaWVsZCBvZiB0aGUgc3ltdGFiCiAgICAgICAgICAgICAgICAgICAgYXNzb2NpYXRlZCB3aXRoIHRoZSBmcmFtZSB0aGF0IGlzIHNlbGVjdGVkIGlmIHdvcmtpbmdfbW9kZQogICAgICAgICAgICAgICAgICAgIGlzIGxhbmd1YWdlX2F1dG8uICBJZiB3b3JraW5nX21vZGUgaXMgbGFuZ3VhZ2VfbWFudWFsLCBhCiAgICAgICAgICAgICAgICAgICAgd2FybmluZyBpcyBwcmludGVkIGFuZCB3b3JraW5nX2xhbmcgaXMgbm90IHNldC4KICAgICBsYW5ndWFnZS5jICAgICBBZGRlZCB0aGUgZnVuY3Rpb24gc2V0X3R5cGVfcmFuZ2UoKSwgd2hpY2ggc2V0cyB0aGUgdmFsdWUgb2YKICAgICAgICAgICAgICAgICAgICB0eXBlX2NoZWNrIGFuZCByYW5nZV9jaGVjayAoaWYgdGhlaXIgbW9kZXMgY2FsbCBmb3IKICAgICAgICAgICAgICAgICAgICBhdXRvbWF0aWMgc2V0dGluZykgYmFzZWQgb24gdGhlIGN1cnJlbnQgdmFsdWUgb2YKICAgICAgICAgICAgICAgICAgICB3b3JraW5nX2xhbmcuICBBIG5vbi16ZXJvIGFyZ3VtZW50IHdpbGwgY2F1c2UgdGhlIGN1cnJlbnQKICAgICAgICAgICAgICAgICAgICBzZXR0aW5ncyB0byBiZSBvdXRwdXQuCgoKV2VkIEp1biAyNiAxNDo1MTo0MCBFRFQgMTk5MQoKICAgICBldmFsLmMgICAgICAgICBBZGRlZCByYW5nZSBjaGVja3Mgb24gYXNzaWdubWVudC4KICAgICBtMi1leHAueSAgICAgICBBZGRlZCB0aGUgZ3JhbW1hciBmb3Igc2V0cyB0byB0aGUgbGFuZ3VhZ2UuICBDdXJyZW50bHksCiAgICAgICAgICAgICAgICAgICAgdGhlc2UgZG8gbm90IGRvIGFueXRoaW5nIGV4Y2VwdCBwcmludCBhbiBlcnJvciBtZXNzYWdlLgoKV2VkIEp1biAyNiAxNzowMTowNCBFRFQgMTk5MQoKICAgICBtMi1leHAueSAgICAgICBBZGRlZCB0aGUgYWJpbGl0eSBmb3IgcGFyc2VfbnVtYmVyKCkgdG8gcGFyc2UgbmVnYXRpdmUKICAgICAgICAgICAgICAgICAgICBudW1iZXJzLiAgQSBnbG9iYWwgZmxhZyBpcyBzZXQgdXBvbiBlbmNvdW50ZXJpbmcgYSB1bmFyeQogICAgICAgICAgICAgICAgICAgIG1pbnVzLiAgVGhpcyB3YXMgZG9uZSB0byBtYWtlLCBmb3IgZXhhbXBsZSwgMSBwYXJzZSBhcyBhCiAgICAgICAgICAgICAgICAgICAgQ0FSRElOQUwsIGFuZCBub3QgYXMgYW4gaW50ZWdlciwgcGVyIFdpcnRoJ3MgZXhhbXBsZXMgaW4KICAgICAgICAgICAgICAgICAgICBQcm9ncmFtbWluZyBpbiBNb2R1bGEtMiBlZC40LgogICAgIHZhbHByaW50LmMgICAgIEFkZGVkIHN1cHBvcnQgZm9yICJzZXQgcmFkaXggMiIgYnkgdGhlbiBzZXR0aW5nCiAgICAgICAgICAgICAgICAgICAgb3V0cHV0X2Zvcm1hdCB0byAndCcuCiAgICAgZXZhbC5jICAgICAgICAgSW1wbGVtZW50ZWQgcmFuZ2UgY2hlY2tpbmcgb24gc3VicmFuZ2UgdHlwZXMuICBBZGRlZCBjYWxscwogICAgICAgICAgICAgICAgICAgIHRvIHJhbmdlX2NoZWNrX3JhbmdlX3AgZm9yIEJJTk9QX0FTU0lHTiBhbmQgQklOT1BfVkFMLgogICAgICAgICAgICAgICAgICAgIEltcGxlbWVudGVkIE1JTiBhbmQgTUFYIGZvciBlbm51bWVyYXRlZCB0eXBlcy4gIFRoZQogICAgICAgICAgICAgICAgICAgIG1pbmltdW0gdmFsdWUgb2YgYW4gZW5udW1lcmF0ZWQgdHlwZSBpcyBkZWZpbmVkIGJ5IFdpcnRoCiAgICAgICAgICAgICAgICAgICAgYXMgdGhlIGZpcnN0IGlkZW50aWZpZXIsIGFuZCB0aGUgbWF4aW11bSBhcyB0aGUgbGFzdC4KICAgICBtMi1leHAueSAgICAgICBNYWRlIG9jdGFsIG51bWJlcnMgZW5kaW5nIHdpdGggIkIiIGJlIGNoYXJhY3RlcnMgYW5kIHRob3NlCiAgICAgICAgICAgICAgICAgICAgZW5kaW5nIHdpdGggIkMiIGJlIG51bWJlcnMsIHBlciBXaXJ0aCdzIGJvb2suIChwLiAzNCkKICAgICAgICAgIApUaHUgSnVuIDI3IDE0OjExOjUyIEVEVCAxOTkxCgogICAgIHN0YWNrLmMgICAgICAgIHNlbGVjdF9mcmFtZSgpIG5vdyBvbmx5IHNldHMgd29ya2luZ19sYW5nLCBpdCBkb2VzIG5vdAogICAgICAgICAgICAgICAgICAgIG5vdGlmeSB0aGUgdXNlci4gIElmIHdvcmtpbmdfbW9kZSBpcyBsYW5ndWFnZV9tYW51YWwsIHRoZW4KICAgICAgICAgICAgICAgICAgICBhIHdhcm5pbmcgaXMgaXNzdWVkIG9uY2UuCiAgICAgbWFpbi5jICAgICAgICAgQXQgdGhlIGVuZCBvZiBlYWNoIGNhbGwgdG8gZXhlY3V0ZV9jb21tYW5kKCksIHdvcmtpbmdfbGFuZwogICAgICAgICAgICAgICAgICAgIGlzIGNoZWNrZWQgYWdhaW5zdCB0aGUgbG9jYWwgc3RhdGljIChlbnVtIGxhbmd1YWdlKQogICAgICAgICAgICAgICAgICAgIGN1cnJlbnQuICBJZiB0aGV5IGRpZmZlciBhbmQgd29ya2luZ19tb2RlIGlzCiAgICAgICAgICAgICAgICAgICAgbGFuZ3VhZ2VfYXV0bywgdGhlIG5ldyBzZXR0aW5ncyBvZiBsYW5ndWFnZSwgdHlwZSBhbmQKICAgICAgICAgICAgICAgICAgICByYW5nZSBjaGVja2luZyBhcmUgcHJpbnRlZCBvdXQuCiAgICAgc3RhY2suYyAgICAgICAgTW9kaWZpZWQgZnJhbWVfaW5mbygpIHRvIGluY2x1ZGUgdGhlIGxhbmd1YWdlIG9mIHRoZQogICAgICAgICAgICAgICAgICAgIGN1cnJlbnQgZnJhbWUgaW4gdGhlIG91dHB1dCBvZiAiaW5mbyBmcmFtZSIuCiAgICAgbGFuZ3VhZ2UuW2NoXSAgQWRkZWQgdGhlIGZ1bmN0aW9uIGxhbmd1YWdlX3N0cigpIHdoaWNoIHJldHVybnMgdGhlIG5hbWUKICAgICAgICAgICAgICAgICAgICBvZiB0aGUgY3VycmVudCBsYW5ndWFnZS4KCkZyaSBKdW4gMjggMTU6MzM6MTQgRURUIDE5OTEKCiAgICAgbTItZXhwLnkgICAgICAgQWRkZWQgdGhlIGJ1aWx0LWluIHByb2NlZHVyZXMgSU5DLCBJTkNMLCBERUMsIGFuZCBERUNMIHRvCiAgICAgICAgICAgICAgICAgICAgdGhlIGxhbmd1YWdlLiAgSU5DTCBhbmQgREVDTCBjdXJyZW50bHkgY2F1c2UgYW4gZXJyb3IsCiAgICAgICAgICAgICAgICAgICAgc2luY2Ugc2V0cyBhcmUgbm90IGltcGxlbWVudGVkIHlldC4gIElOQyBhbmQgREVDIGFyZQogICAgICAgICAgICAgICAgICAgIGltcGxlbWVudGVkIGFzIFBSRUlOQ1JFTUVOVC9QUkVERUNSRU1FTlQgd2l0aCBvbmUKICAgICAgICAgICAgICAgICAgICBhcmd1bWVudCwgYW5kIGFzIEFTU0lHTl9NT0RJRlkgd2l0aCB0d28gYXJndW1lbnRzLgogICAgIGV2YWwuYyAgICAgICAgIEFkZGVkIHR5cGUgY2hlY2tpbmcgdG8gdGhlIGFib3ZlIGNhc2VzLgogICAgIHZhbHVlLmggICAgICAgIEFkZGVkIG5vdF9sdmFsX2NvbnN0YW50IHRvIHRoZSBsdmFsX3R5cGUgZW5udW1lcmF0ZWQgdHlwZS4KICAgICAgICAgICAgICAgICAgICBub3RfbHZhbF9jb25zdGFudCBtZWFucyB0aGF0IHRoZSB2YWx1ZSBpcyBhIGNvbnN0YW50CiAgICAgICAgICAgICAgICAgICAgdmFsdWU7IHRoYXQgaXMgMyBvciAnYScgb3IgVFJVRSwgbm90IGFzIGluIGEgY29uc3RhbnQKICAgICAgICAgICAgICAgICAgICBpZGVudGlmaWVyLiAgVGhpcyBpcyB1c2VkIHRvIGhlbHAgY29lcmNlIG51bWJlcnMgc3VjaCBhcyAzCiAgICAgICAgICAgICAgICAgICAgdG8gZWl0aGVyIHNpZ25lZCBvciB1bnNpZ25lZCBudW1iZXJzLgogICAgIHZhbG9wcy5jICAgICAgIEFkZGVkIHRoZSBmdW5jdGlvbiB2YWx1ZV9jb2VyY2VfY29uc3RhbnRzKCkgd2hpY2ggY29lcmNlcwogICAgICAgICAgICAgICAgICAgIGNvbnN0YW50IGludGVnZXJzIGFzIGZvbGxvd2luZzogIGlmIG9uZSBpcyBhIGNvbnN0YW50IGFuZAogICAgICAgICAgICAgICAgICAgIHRoZSBvdGhlciBpcyBub3QsIHRoZSBjb25zdGFudCdzIHR5cGUgaXMgc2V0IHRvIHRoZSB0eXBlCiAgICAgICAgICAgICAgICAgICAgb2YgdGhlIG90aGVyIGFyZ3VtZW50LiAgSWYgYm90aCBhcmUgY29uc3RhbnRzIGFuZCBvbmUgaXMKICAgICAgICAgICAgICAgICAgICBzaWduZWQsIHRoZSBvdGhlciBpcyBjb252ZXJ0ZWQgdG8gYSBzaWduZWQgY29uc3RhbnQuCgpTYXQgSnVuIDI5IDE3OjI2OjI5IEVEVCAxOTkxCgogICAgIHZhbGFyaXRoLmMgICAgIEFkZGVkIGEgYmV0dGVyIHJhbmdlIGNoZWNrZXIuICBJdCBub3cgY2hlY2tzIHJhbmdlCiAgICAgICAgICAgICAgICAgICAgKHN1Y2Nlc3NmdWxseSkgb24gaW50ZWdyYWwgb3BlcmF0aW9ucyBbKy1dIChzaWduZWQgYW5kCiAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQpIGZvciBhbnkgQyBzaXplZCB0eXBlLiAgU3RpbGwgZG9lcyBub3Qgd29yayB3ZWxsCiAgICAgICAgICAgICAgICAgICAgZm9yIG11bHRpcGxpY2F0aW9uLikKICAgICAgICAgICAgICAgICAgICBpbnRfaW5fc2l6ZSgpIHJldHVybnMgYW4gaW50ZWdlciB0aGF0IGlzIGNvZXJjZWQgdG8gZml0IGludG8KICAgICAgICAgICAgICAgICAgICBzcGVjaWZpZWQgbnVtYmVyIG9mIGJ5dGVzLgoKTW9uIEp1bCAgMSAxMzowNDoxNCBFRFQgMTk5MQoKICAgICBsYW5ndWFnZS5bY2hdICBBZGRlZCB0aGUgZnVuY3Rpb24gYmlub3BfcmVzdWx0X3R5cGUoKSwgd2hpY2ggcmV0dXJucyB0aGUKICAgICAgICAgICAgICAgICAgICBidWlsdGluIChzdHJ1Y3QgdHlwZSAqKSB0eXBlIHRoYXQgd291bGQgYmUgdGhlIHJlc3VsdCBvZiBhCiAgICAgICAgICAgICAgICAgICAgYmlub3Agb24gdGhlIHR3byB2YWx1ZXMgVjEgYW5kIFYyLgoKV2VkIEp1bCAgMyAxOToyMjo1MyBFRFQgMTk5MQoKICAgICBzb3VyY2UuYyAgICAgICBFeHRlbmRlZCBzb3VyY2VfaW5mbygpIHRvIGluY2x1ZGUgdGhlIHNvdXJjZSBsYW5ndWFnZSBpbgogICAgICAgICAgICAgICAgICAgIHRoZSBvdXRwdXQgZnJvbSAiaW5mbyBzb3VyY2UiLgogICAgIApGcmkgSnVsICA1IDEzOjQ4OjUyIEVEVCAxOTkxCgogICAgIHV0aWxzLmMgICAgICAgIE1vdmVkIHRoZSBzdXBwb3J0IGZ1bmN0aW9ucyBmb3IgdGhlIEdEQiBzZXQvc2hvdyBjb21tYW5kcwogICAgICAgICAgICAgICAgICAgIGRlYWxpbmcgd2l0aCBsYW5ndWFnZSBpbnRvIGxhbmd1YWdlLmMuCiAgICAgbGFuZ3VhZ2UuYyAgICAgQWRkZWQgdGhlIGZ1bmN0aW9uIGxhbmd1YWdlX2luZm8oKSwgd2hpY2ggZGlzcGxheXMgaW5mbwogICAgICAgICAgICAgICAgICAgIGFib3V0IHRoZSBjdXJyZW50IHdvcmtpbmcgbGFuZ3VhZ2UsIHR5cGUgYW5kIHJhbmdlIGNoZWNrCiAgICAgICAgICAgICAgICAgICAgc2V0dGluZ3MuICBDYWxsZWQgdmlhIHRoZSBHREIgY29tbWFuZCAiaW5mbyBsYW5ndWFnZSIuCiAgICAgICAgICAgICAgICAgICAgQWRkZWQgYW4gaW5pdGlhbGl6YXRpb24gcm91dGluZSBfaW5pdGlhbGl6ZV9sYW5ndWFnZSgpLAogICAgICAgICAgICAgICAgICAgIHRoYXQgc2V0cyBkZWZhdWx0cyBmb3IgdGhlIGxhbmd1YWdlLCB0eXBlIGFuZCByYW5nZQogICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlcyBhbmQgc2V0cyB1cCB0aGUgbmV3IEdEQiBjb21tYW5kcy4KICAgICBtYWluLmMgICAgICAgICBMYW5ndWFnZSBzZXR1cCBtb3ZlZCB0byBsYW5ndWFnZS5jLgogICAgIGRlcGVuZCAgICAgICAgIFJlYnVpbHQuCgpNb24gSnVsICA4IDEwOjEwOjIyIEVEVCAxOTkxCgogICAgIHZhbGFyaXRoLmMgICAgIERlYnVnZ2VkIHRoZSByYW5nZSBjaGVja2VyIGZvciBhcml0aG1ldGljLiAgU3RpbGwgZG9lcyBub3QKICAgICAgICAgICAgICAgICAgICB3b3JrIGZvciBtdWx0aXBsaWNhdGlvbiB2ZXJ5IHdlbGwuCgpNb24gSnVsICA4IDEyOjQwOjM3IEVEVCAxOTkxCgogICAgIGxhbmd1YWdlLltjaF0gIEFkZGVkIHRoZSBmdW5jdGlvbiB2YWx1ZV90cnVlKCkgd2hpY2ggcmV0dXJucyBub24temVybyBpZgogICAgICAgICAgICAgICAgICAgIGl0cyBhcmd1bWVudCByZXByZXNlbnRzIGEgYm9vbGVhbiB0cnVlIHZhbHVlLgogICAgIGJyZWFrcG9pbnQuYyAgIENoYW5nZWQgYnJlYWtwb2ludF9jb25kX2V2YWwoKSB0byBjYWxsIHZhbHVlX3RydWUoKSB0bwogICAgICAgICAgICAgICAgICAgIGNoZWNrIHRoZSB0cnV0aCBvZiBhbiBleHByZXNzaW9uLgoKVGh1IEp1bCAxMSAxMjo1MTozNCBFRFQgMTk5MQoKICAgICBsYW5ndWFnZS5bY2hdICBBZGRlZCB0aGUgcHJlZGljYXRlIHN0cnVjdHVyZWRfdHlwZSgpLCB3aGljaCByZXR1cm5zCiAgICAgICAgICAgICAgICAgICAgbm9uLXplcm8gaWYgdGhlIGFyZ3VtZW50IGlzIGEgc3RydWN0dXJlZCB0eXBlLgogICAgICAgICAgICAgICAgICAgIEFkZGVkIHRoZSBwcmVkaWNhdGUgcG9pbnRlcl90eXBlKCksIHdoaWNoIHJldHVybnMgbm9uLXplcm8KICAgICAgICAgICAgICAgICAgICBpZiB0aGUgYXJndW1lbnQgaXMgYSBwb2ludGVyIHR5cGUuCiAgICAgZXZhbC5jICAgICAgICAgQWRkZWQgdGhlIGFiaWxpdHkgdG8gZG8gYWRkaXRpb24gYW5kIHN1YnN0cmFjdGlvbiBvbgogICAgICAgICAgICAgICAgICAgIHBvaW50ZXJzIGFuZCBpbnRlZ2Vycy4gICBUaGlzIGNhc2Ugc2ltcGx5IGJ5cGFzc2VzIHRoZQogICAgICAgICAgICAgICAgICAgIHR5cGUgY2hlY2tlci4KClRodSBKdWwgMTEgMTQ6NDE6NDIgRURUIDE5OTEKCiAgICAgaW5jbHVkZS9zdGFiLmRlZgogICAgICAgICAgICAgICAgICAgIEFkZGVkIHRoZSBzeW1ib2wgTl9ERUZEICgweDRhKSB3aGljaCBpcyBhIGRlZmluaXRpb24KICAgICAgICAgICAgICAgICAgICBtb2R1bGUgZGVwZW5kZW5jeSB0aGF0IGlzIHVzZWQgYnkgdGhlIEdOVSBNb2R1bGEtMgogICAgICAgICAgICAgICAgICAgIGNvbXBpbGVyIGFuZCB0aGUgbGlua2VyLiAgSXQgaXMgbm90IGltcG9ydGFudCB0byBHREIsCiAgICAgICAgICAgICAgICAgICAgZXhjZXB0IHRoYXQgW2RieHxjb2ZmfG1pcHNdcmVhZC5jIHNob3VsZCBpZ25vcmUgdGhlc2UKICAgICAgICAgICAgICAgICAgICBzeW1ib2xzLgoKRnJpIEp1bCAxMiAxNjowNzowMCBFRFQgMTk5MQoKICAgICB2YWxwcmludC5jICAgICBDaGFuZ2VkIHRoZSBUWVBFX0xFTkdUSCh0eXBlKSA+PSAwIHRvIFRZUEVfTEVOR1RIKHR5cGUpID4KICAgICAgICAgICAgICAgICAgICAwIGluIHZhbF9wcmludCgpLiAgQWxzbyBhZGRlZCBzdGF0ZW1lbnRzIHRvIHRoZSBlbHNlIHBhcnQKICAgICAgICAgICAgICAgICAgICB0byBjb2VyY2UgdHlwZSAoYXJndW1lbnQgdG8gdmFsX3ByaW50KSB0byBhIHBvaW50ZXIgdHlwZQogICAgICAgICAgICAgICAgICAgIGlmIGl0IGlzIGFuICJhcnJheSBvZiB1bnNwZWNpZmllZCBsZW5ndGgiLgogICAgIHZhbG9wcy5jICAgICAgIEFkZGVkIHRoZSBmdW5jdGlvbiB2YWx1ZV9tMl9zdHJpbmcoKSwgd2hpY2ggcmV0dXJucyBhCiAgICAgICAgICAgICAgICAgICAgKHZhbHVlKSB2YWx1ZSB3aGljaCBpcyBhIGNvbnN0YW50IHN0cmluZywgd2hvc2UgdHlwZSBpcwogICAgICAgICAgICAgICAgICAgIChBUlJBWSBbMC4ubl0gT0YgQ0hBUikuICBUaGUgbGVuZ3RoIGZpZWxkIG9mIHRoZSB0eXBlCiAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlIGlzIHNldCB0byB6ZXJvLCBzbyBpdCB3aWxsIGJlIGludGVycHJldGVkIGFzIGFuCiAgICAgICAgICAgICAgICAgICAgImFycmF5IG9mIHVuc3BlY2lmaWVkIGxlbmd0aCIuCiAgICAgc3RhY2suYyAgICAgICAgTW92ZWQgdGhlIGxhbmd1YWdlL2ZyYW1lIG1pc21hdGNoIGNoZWNrIHRvCiAgICAgICAgICAgICAgICAgICAgbWFpbi5jOmV4ZWN1dGVfY29tbWFuZCgpLgogICAgIG1haW4uYyAgICAgICAgIFRoZSB3b3JraW5nIGxhbmd1YWdlIGlzIHJlY29yZGVkIGVhY2ggdGltZQogICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVfY29tbWFuZCgpIGlzIGV4ZWN1dGVkLiAgSWYgd29ya2luZyBsYW5nIGhhcwogICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgZHVyaW5nIGl0cyBleGVjdXRpb24sIHRoZW4gdGhlIG5ldwogICAgICAgICAgICAgICAgICAgIGxhbmd1YWdlL3R5cGUvcmFuZ2UgaW5mbyBpcyBwcmludGVkIG91dCBmb3IgdGhlIHVzZXIuICBJZgogICAgICAgICAgICAgICAgICAgIHRoZSB3b3JraW5nIGxhbmd1YWdlIGRvZXMgbm90IG1hdGNoIHRoZSBsYW5ndWFnZSBvZiB0aGUKICAgICAgICAgICAgICAgICAgICBmcmFtZSwgYSB3YXJuaW5nIGlzIGlzc3VlZC4KClNhdCBKdWwgMTMgMTY6MTY6MzkgRURUIDE5OTEKCiAgICAgZXZhbC5jICAgICAgICAgTW92ZWQgYWxsIHRoZSB0eXBlLWNoZWNraW5nIHN0dWZmIGZvciBvcGVyYXRvcnMgdG8KICAgICBsYW5ndWFnZS5bY2hdICBsYW5ndWFnZS5jLiAgVGhpcyBpcyBzbyB3ZSBjYW4ga2VlcCBsYW5ndWFnZS1zcGVjaWZpYwogICAgICAgICAgICAgICAgICAgIHN0dWZmIChsaWtlIGZvciB3aGF0IHR5cGUgb3BlcmF0b3JzIGFyZSBkZWZpbmVkKSBpbgogICAgICAgICAgICAgICAgICAgIGxhbmd1YWdlLmMuCiAgICAgbGFuZ3VhZ2UuW2NoXSAgQWRkZWQgdGhlIGZ1bmN0aW9uIGJpbm9wX3R5cGVfY2hlY2soKSwgd2hpY2ggY2hlY2tzIHRvIHNlZQogICAgICAgICAgICAgICAgICAgIGlmIGl0cyB0d28gKHZhbHVlKSBhcmd1bWVudHMgYXJlIHR5cGUtY29tcGF0aWJsZSB3aXRoIGl0cwogICAgICAgICAgICAgICAgICAgIG9wY29kZSBhcmd1bWVudC4gIFRoZSBvcGNvZGUgc2hvdWxkIHJlcHJlc2VudCBhbiBvcGVyYXRpb24KICAgICAgICAgICAgICAgICAgICBpbnZvbHZpbmcgYW4gb3BlcmF0b3IuICBBbHNvIGFkZGVkIHRoZSBtYWNybyBmdW5jdGlvbgogICAgICAgICAgICAgICAgICAgIHVub3BfdHlwZV9jaGVjaywgd2hpY2ggY2FsbHMgYmlub3BfdHlwZV9jaGVjayB3aXRoIGEKICAgICAgICAgICAgICAgICAgICBOVUxMIHNlY29uZCBhcmd1bWVudC4KICAgICBleHBwcmludC5jICAgICBBZGRlZCBNb2R1bGEtMiBvcGVyYXRvcnMgdG8gdGhlIG9wX3ByaW50X3RhYiwgc28gaW5mbwogICAgIGV4cHJlc3Npb24uaCAgIGJyZWFrIHdvcmtzIGNvcnJlY3RseS4gIEFsc28gYWRkZWQgIm9wX3N0cmluZyIsIHdoaWNoCiAgICAgICAgICAgICAgICAgICAgcmV0dXJucyB0aGUgc3RyaW5nIGNvcnJlc3BvbmRpbmcgdG8gdGhlIChlbnVtIGV4cF9vcGNvZGUpCiAgICAgICAgICAgICAgICAgICAgb3Bjb2RlIHRoYXQgaXMgaXRzIGFyZ3VtZW50LgoKClNhdCBKdWwgMTMgMTg6MjY6MTggRURUIDE5OTEKCiAgICAgY29mZnJlYWQuYyAgICAgQWRkZWQgY29kZSB0byByZWNvcmQgdGhlIHR5cGUgb2YgZnVuY3Rpb24gYXJndW1lbnRzIHdpdGgKICAgICAgICAgICAgICAgICAgICBlYWNoIHBhcmljdWxhciBmdW5jdGlvbi4gIENvZGUgaXMgdmVyeSBzaW1pbGFyIHRvIHRoYXQKICAgICAgICAgICAgICAgICAgICBhZGRlZCB0byBkYnhyZWFkLmMuICAKICAgICBkYnhyZWFkLmMgICAgICBNb3ZlZCBhZGRfcGFyYW1fdG9fdHlwZSgpIHRvIHN5bXRhYi5jCiAgICAgc3ltdGFiLltjaF0gICAgQWRkZWQgZnVuY3Rpb24gYWRkX3BhcmFtX3RvX3R5cGUoKSBmcm9tIGRieHJlYWQuYwoKICAgICAqKiogTk9URTogIFRoZSBhYm92ZSBhZGRpdGlvbnMgaGF2ZSBub3QgYmVlbiB0ZXN0ZWQuCgpNb24gSnVsIDE1IDEyOjUwOjQ3IEVEVCAxOTkxCgogICAgIGxhbmdhdWdlLltjaF0gIEFkZGVkIHRoZSBmdW5jdGlvbnMgdHlwZV9lcnJvciBhbmQgcmFuZ2VfZXJyb3IsIHdoaWNoIHdvcmsKICAgICAgICAgICAgICAgICAgICBsaWtlIGVycm9yKCkgZXhjZXB0IGlmIHRoZSB0eXBlL3JhbmdlIG1vZGUgaXMgc2V0IHRvCiAgICAgICAgICAgICAgICAgICAgKl9tb2RlX3dhcm4sIHRoZW4gdGhleSBkbyBub3QgZG8gYSByZXR1cm5fdG9fdG9wX2xldmVsKCksCiAgICAgICAgICAgICAgICAgICAgYnV0IG1lcmVseSBwcmludCBhIHdhcm5pbmcuCiAgICAgICAgICAgICAgICAgICAgQWxzbyBjaGFuZ2VkIFtzZXR8c2hvd11fW3R5cGV8cmFuZ2VdX2NvbW1hbmQoKSB0byBzdXBwb3J0CiAgICAgICAgICAgICAgICAgICAgdGhlIG5ldyAid2FybiIgZmVhdHVyZS4KClRodSBKdWwgMTggMTc6NTA6NTQgRURUIDE5OTEKCiAgICAgbWlwc3JlYWQuYyAgICAgQWRkZWQgY29kZSB0byByZWNvcmQgdGhlIHR5cGUgb2YgZnVuY3Rpb24gYXJndW1lbnRzIHdpdGgKICAgICAgICAgICAgICAgICAgICBlYWNoIHBhcnRpY3VsYXIgZnVuY3Rpb24uICBDb2RlIGlzIHZlcnkgc2ltaWxhciB0byB0aGF0CiAgICAgICAgICAgICAgICAgICAgYWRkZWQgdG8gZGJ4cmVhZC5jLiAgCgogICAgICoqKiBOT1RFOiAgVGhlIGFib3ZlIGFkZGl0aW9ucyBoYXZlIG5vdCBiZWVuIHRlc3RlZC4KCkZyaSBKdWwgMTkgMTE6MTk6MTAgRURUIDE5OTEKCiAgICAgZGVmcy5oICAgICAgICAgQWRkZWQgbWFjcm9zIE1BWF9PRl9TSVpFLCBNSU5fT0ZfU0laRSwgVU1BWF9PRl9TSVpFLCBhbmQKICAgICAgICAgICAgICAgICAgICBVTUlOX09GX1NJWkUsIHdoaWNoIHdoZW4gZ2l2ZW4gYSBzaXplIG9mIGEgbnVtZXJpYyB0eXBlLAogICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGUgbWF4aW11bSBhbmQgbWluaW11bSB2YWx1ZSBpdCBjYW4gaG9sZC4gIFVNQVguLi4KICAgICAgICAgICAgICAgICAgICBhbmQgVU1JTi4uLiByZXR1cm4gdGhlIHJlc3VsdCBmb3IgdW5zaWduZWQgdHlwZXMuCiAgICAgc3ltdGFiLmggICAgICAgQWRkZWQgdGhlIG1hY3JvcyBNQVhfT0ZfVFlQRSBhbmQgTUlOX09GX1RZUEUgdG8gb3BlcmF0ZSBvbgogICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0eXBlcy4gIFRoZXkgY2FsbCBhYm92ZSBtYWNyb3MuCiAgICAgZGJ4cmVhZC5jICAgICAgUmVuYW1lZCB0aGUgTUFYIGFuZCBNSU5fT0ZfVFlQRSBtYWNyb3MgdG8gLi4uX09GX0NUWVBFIHRvCiAgICAgICAgICAgICAgICAgICAgYXZvaWQgYSBuYW1lIGNvbmxpY3Qgd2l0aCB0aGUgYWJvdmUuCiAgICAgYy1leHAueSAgICAgICAgQWRkZWQgcmFuZ2UgY2hlY2tpbmcgb24gbnVtZXJpYyBjb25zdGFudHMgaW4KICAgICAgICAgICAgICAgICAgICBwYXJzZV9udW1iZXIoKSBmb3IgY29tcGxldGVuZXNzLgogICAgIHZhbGFyaXRoLmMgICAgIE1hZGUgYmlub3BfdXNlcl9kZWZpbmVkX3AoKSBhbmQgdW5vcF91c2VyX2RlZmluZWRfcCgpCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDAgaWYgd29ya2luZ19sYW5nIGlzIG5vdCBsYW5ndWFnZV9jLgoKVGh1IEF1ZyAgOCAxNDoxNzoyMiBFRFQgMTk5MQoKCW1haW4uYwoJcHJpbnRjbWQuYwoJYnJlYWtwb2ludC5jCURvY3VtZW50YXRpb24gc3RyaW5ncyBvZiBzb21lIGNvbW1hbmRzIGNoYW5nZWQgdG8KCQkJCWVsaW1pbmF0ZSB0aGUgcmVmZXJlbmNlcyB0byB0aGUgQyBsYW5ndWFnZSB3aGVyZQoJCQkJYXBwcm9wcmlhdGUuCgpUdWUgQXVnIDEzIDE1OjQ4OjAzIEVEVCAxOTkxCgoJbTItZXhwLnkJCUFkZGVkIHF1YWxpZmllZCBpZGVudGlmaWVycyB0byB0aGUgZ3JhbW1hci4gIFRoZSBzZW1hbnRpY3MKCQkJCWFyZSBzbGlnaHRseSBkaWZmZXJlbnQgZnJvbSB0aG9zZSBvZiB0aGUgR0RCIG9wZXJhdG9yIDo6CgljLWV4cC55CgltMi1leHAueQkJQWRkZWQgYSBydWxlIHRvIGVhY2ggZ3JhbW1hciBvZiB0aGUgZm9ybTogIHN0YXJ0IDo6PSBleHAgfAoJCQkJdHlwZV9leHAsIHdoZXJlIHR5cGVfZXhwIGlzIGFueSB2YWxpZCB0eXBlIGV4cHJlc3Npb24uCglleHByZXNzaW9uLmgJCglldmFsLmMJCUFkZGVkIHRoZSBvcGNvZGUgT1BfVFlQRSwgYW5kIGFuIGVycm9yIGNhc2UgaW4gZXZhbC5jLgoJcHJpbnRjbWQuYwlNb2RpZmllZCBwdHlwZV9jb21tYW5kKCkgc28gaXQgYWN0dWFsbHkgcGFyc2VzIHRoZSBpbnB1dAoJCQkJKG5lY2Vzc2FyeSBmb3IgdHlwZSBleHByZXNzaW9ucyB3aXRoIHNjb3BlIHF1YWxpZmllcnMpLgoJCQkJQWRkZWQgdGhlIGZ1bmN0aW9uIHB0eXBlX2V2YWwoKSB3aGljaCBleHBlY3RzIGFuCgkJCQlleHByZXNzaW9uIGNvbXBvc2VkIG9mIG9uZSBPUF9UWVBFIGVsZW1lbnQuCgkqLltjaF0JCVJlcGxhY2VkIGFsbCBvY2N1cmVuY2VzIG9mIHBhcnNlX2NfZXhwcmVzc2lvbiB3aXRoCgkJCQlwYXJzZV9leHByZXNzaW9uCgkqLltjaF0JCVJlcGxhY2VkIGFsbCBvY2N1cmVuY2VzIG9mIHBhcnNlX2NfMSB3aXRoIHBhcnNlX2V4cF8xCgpbRW5kIG9mIENoYW5nZUxvZyBlbnRyaWVzIGZyb20gQW5kcmV3IEJlZXJzIGZvciBNb2R1bGEtMiBzdXBwb3J0Ll0KCk1vbiBTZXAgMTYgMTc6MTk6NDYgMTk5MSAgSm9obiBHaWxtb3JlICAoZ251IGF0IGN5Z251cy5jb20pCgoJU21hbGwgZml4ZXMgZnJvbSBQZXRlciBTY2hhdWVyOgoKCSogaW5mcnVuLmMgKGNoaWxkX2F0dGFjaCk6ICBMaW50LgoJKiBzb2xpYi5jIChmaW5kX3NvbGliKTogIEhhbmRsZSBzaGFyZWQgbGlicyB2ZXJzaW9uIDIuCgoJU21hbGwgZml4ZXMgZnJvbSBEYXZpZCBXb29kOgoKCSogeG0tdWx0cmEzLmggKFNZU19TSUdMSVNUX01JU1NJTkcpOiAgVHlwby4KCglTbWFsbCBmaXhlczoKCgkqIHJlbW90ZS12eC5jOiAgTW92ZSA8c3RkaW8uaD4gdG8gdG9wLCBmb3IgRklMRS4gIEZpeCBmcm9tCglKb2huIFMgPGJhc3JhaSVrYW5nYS5kbmV0QGMzcG8uc20tYWxjLmFmLm1pbD4uCgoJKiB1dGlscy5jICh3cmFwX2hlcmUpOiAgQXZvaWQgd3JhcCBhY3Rpb24gb2YgZnB1dHNfZmlsdGVyZWQgaWYKCWNoYXJzX3Blcl9saW5lIGlzIGF0IG1heGltdW0gKHVzZXIgdHlwZWQgYHNldCB3aWR0aCAwJykuICBGaXgKCWZyb20gQW5kcmVhcyBTY2h3YWIgPHNjaHdhYkBsczUuaW5mb3JtYXRpay51bmktZG9ydG11bmQuZGU+LgoKVHVlIFNlcCAxNyAxNzozMTowNCAxOTkxICBTdHUgR3Jvc3NtYW4gIChncm9zc21hbiBhdCBjeWdudXMuY29tKQoKCSogY29yZWRlcC5jOiAgaW5jbHVkZSBwdHJhY2UuaCB3aGVyZSBuZWNlc3NhcnkuCgkqIG1pcHNyZWFkLmMocGFyc2VfbGluZXMpOiAgZml4IHVuc2lnbmVkIGNoYXIgcHJvYmxlbSB0aGF0IHdhcwoJbWVzc2luZyB1cCBsaW5lIG51bWJlcnMgb24gU0dJJ3MgYW5kIHBvc3NpYmx5IG90aGVyIE1JUFMgYmFzZWQKCXBsYXRmb3Jtcy4KCSogaW5mcnVuLmMgKGNoaWxkX2NyZWF0ZV9pbmZlcmlvcik6ICB1c2UgYmV0dGVyIHRlc3QgdG8gY2hlY2sKCXJldHVybiB2YWwgZnJvbSBzZXRwZ3JwKCkuCgkqIHRtLWlyaXgzLmgsIHhtLWlyaXgzLmgsIHRjb25maWcvaXJpeDMsIHhjb25maWcvaXJpeDM6ICBhZGQgdGhlc2UKCWZvciBzZ2kvaXJpeCBzdXBwb3J0LgoKV2VkIFNlcCAxOCAwNDozMzozMSAxOTkxICBQZXIgQm90aG5lciAgKGJvdGhuZXIgYXQgY3lnbnVzLmNvbSkKCgkqIG1pcHNyZWFkLmMgKHBhcnNlX3N5bWJvbCk6ICBQdXQgbm9uLXN0YXRpYyBwcm9jZWR1cmVzCglpbiB0aGUgZ2xvYmFsIGJsb2NrLgoKRnJpIFNlcCAxMyAwMDoxNDo1MiAxOTkxICBKb2huIEdpbG1vcmUgIChnbnUgYXQgY3lnbnVzLmNvbSkKCglQYXRjaCB0b2dldGhlciBgdGV4dF9zdGFydCcgYW5kIGB0ZXh0X2VuZCcgZm9yIDI5SyBwb3J0LgoKCSogZXhlYy5jIChleGVjX2NvbW1hbmQpOiAgSWYgTkVFRF9URVhUX1NUQVJUX0VORCwgZGVmaW5lIHRoZQoJdmFyaWFibGVzIGFuZCBzZXQgdGhlbSBiYXNlZCBvbiB0aGUgZXhlYyBmaWxlLgoJKiBhbTI5ay10ZGVwLmM6ICBkZWNsYXJlIHRleHRfc3RhcnQuCgkqIHZhbG9wcy5jIChjYWxsX2Z1bmN0aW9uX2J5X2hhbmQpOiAgZGVjbGFyZSB0ZXh0X2VuZC4KCgkqIGluZmVyaW9yLmg6ICBFbGltaW5hdGUgQ0FOTk9UX0VYRUNVVEVfU1RBQ0sgaW4gZmF2b3Igb2YKCWRlZmluaW5nIENBTExfRFVNTVlfTE9DQVRJT04gYXMgQkVGT1JFX1RFWFRfRU5ELiAgVGhpcyBpcwoJYmVjYXVzZSBtYWNoaW5lcyB0aGF0IGRvIHRoaXMgd2lsbCBhbHNvIGhhdmUgdG8ga25vdyB0bwoJc2V0IE5FRURfVEVYVF9TVEFSVF9FTkQuICBCZXNpZGVzLCBpdCB3YXMgYSByZWR1bmRhbnQgd2F5IHRvCglzYXkgdGhlIHNhbWUgdGhpbmcuCgkqIHRtLTI5ay5oLCB0bS1jb252ZXguaCwgdG0tbnAxLmg6ICBFbGltaW5hdGUKCUNBTk5PVF9FWEVDVVRFX1NUQUNLLCBkZWZpbmUgQ0FMTF9EVU1NWV9MT0NBVElPTiBhbmQKCU5FRURfVEVYVF9TVEFSVF9FTkQuCgpUaHUgU2VwIDEyIDAwOjIyOjI0IDE5OTEgIEpvaG4gR2lsbW9yZSAgKGdudSBhdCBjeWdpbnQuY3lnbnVzLmNvbSkKCglBTUQgMjkwMDAgY2hhbmdlcyBmcm9tIERhdmlkIFdvb2QgPHdvb2RAZGF2aWQudWx0cmEubnl1LmVkdT46CgoJKiBNYWtlZmlsZS5pbiAoQ0xJQlMpOiAgUHV0IFhNX0NMSUJTIGFuZCBUTV9DTElCUyBhdCBlbmQuCglQYXNzIE1VTkNIX0RFRklORSB0byBtdW5jaCB3aGVuZXZlciB3ZSBydW4gaXQuCgkqIGFtMjlrLXBpbnNuLmMgKHByaW50X2luc24pOiAgSGFuZGxlIE5PUCBzcGVjaWFsbHkuICBBdm9pZCAlI3gKCWZvcm1hdCBzdHJpbmc7IHVzZSAweCV4IGluc3RlYWQuCgkqIGFtMjlrLXRkZXAuYzogIFVzZSBEVU1NWV9TQVZFX0dSRUdTIGFuZCBSRVRVUk5fUkVHTlVNLgoJKiB1bHRyYS14ZGVwLmMsIHhtLXVsdHJhLmg6ICBOZXcgZmlsZXMgZm9yIFVsdHJhY29tcHV0ZXIgaG9zdCBzeXN0ZW0uCgkqIHhtLXJ0YnNkLmg6ICBOZXcgaG9zdCBzdXBwb3J0IGZvciBSVC9QQyBydW5uaW5nIEJTRCBVbml4LgoJKiBpbmZsb3cuYzogIEhhbmRsZSBgc2hvcnQnIHByb2Nlc3MgZ3JvdXAgSURzLgoJKiBpbmZwdHJhY2UuYyAoZmV0Y2hfcmVnaXN0ZXIpOiAgU3VwcG9ydCBDQU5OT1RfRkVUQ0hfUkVHSVNURVIsCglhbmQgY2hlY2sgZm9yIHB0cmFjZSBlcnJvcnMuCgkqIGNvZmZyZWFkLmMgKFNEQl9SRUdfVE9fUkVHTlVNKTogIERlZmluZSBpZiBub3QgYWxyZWFkeS4KCShjb2ZmX3N5bWZpbGVfaW5pdCk6ICBJbml0aWFsaXplIHRleHRfYmZkX3NjbnVtLgoJKHJlYWRfY29mZl9zeW10YWIpOiAgVXNlIGl0IHRvIGZpbmQgdGhlIHRleHQgW2FuZCBhYnNvbHV0ZT9dIHNlY3Rpb25zLgoJKiAuLi9jb25maWcuc3ViOiAgQWRkIHZlbmRvciBueXUgYW5kIG9zICJzeW1bMS05XSoiLgoJKiBjb25maWd1cmUuaW46IEFkZCBob3N0cyBydHBjLSotKiBhbmQgYTI5ay0qLSouCglNZXJnZSB0YXJnZXQgYXJtIGNhc2Ugd2l0aCBvdGhlciAiZWFzeSIgY2FzZXMuICBBZGQgdGFyZ2V0CgljYXNlcyBhMjlrLSotbm9uZSAocmVoYWNrIG9mIGFtMjlrKSwgYTI5ay0qLWtlcm4gKHJlbW90ZSB0bwoJVWx0cmFjb21wdXRlciBrZXJuZWwpLCBhbmQgYTI5ay0qLXN5bTEgKHVsdHJhY29tcHV0ZXIgT1MncyB1c2VyCglwcm9jZXNzKS4KCSogbWluaW1vbi5oLCByZW1vdGUtYWRhcHQuYywgcmVtb3RlLW1tLmM6ICBBZGQuCgkqIG11bmNoOiAgQ29wZSB3aXRoIFJUL1BDIHB1dHRpbmcgZm5zIGluIGRhdGEgc2VnbWVudC4KCVJlc3RvcmUgYWJpbGl0eSB0byBvdmVycmlkZSBgbm0nIGJ5IHNwZWNpZnlpbmcgTVVOQ0hfTk0uCgkqIHhjb25maWcvcnRic2QsIHhjb25maWcvdWx0cmEzOiAgTmV3IGhvc3Qgc3lzdGVtcy4KCSogdGNvbmZpZy9hMjlrOiAgUmVuYW1lIGZyb20gdGNvbmZpZy9hbTI5ay4gIEFkZCByZW1vdGUtbW0KCWFuZCByZW1vdGUtYWRhcHQuICBSZW1vdmUgZW5jYXBzdWxhdGVkIGNvZmYgI2RlZmluZSdzICh0aGUKCXN1cHBvcnQgc2hvdWxkIGdvIGluIEJGRCwgYW5kIGdkYiBzaG91bGRuJ3Qga25vdyBvciBjYXJlKS4KCSogdGNvbmZpZy9hMjlrLWtlcm46ICBTYW1lLCBidXQgZm9yIHJlbW90ZSBrZXJuZWwgZGVidWdnaW5nLgoJKiB0Y29uZmlnL3VsdHJhMzogIEZvciBkZWJ1Z2dpbmcgdXNlciBwcm9jZXNzZXMgb24gVWx0cmEzL1N5bTEuCgkqIHRtLTI5ay5oOiAgVXBkYXRlIEJBRE1BRyAodGhvdWdoIGl0IHNob3VsZCBnbyBhd2F5KS4KCUFsbG93IHRoZSByZWdpc3RlciBkZWZpbml0aW9ucyB0byBiZSBvdmVycmlkZGVuIGluIGFub3RoZXIKCXRtLWZpbGUuICBGaXggU1JfUkVHTlVNLiAgQWRkIGEgbWVzcyBvZiBfUkVHTlVNJ3MuICBTZXBhcmF0ZQoJUkVUVVJOX1JFR05VTSBmcm9tIEdSOTZfUkVHTlVNIGFuZCBEVU1NWV9TQVZFX0dSRUdTIGZyb20KCURVTU1ZX1NBVkVfR1I5NiwgZm9yIGhhbmRsaW5nIGtlcm5lbCBjYWxsaW5nIGNvbnZlbnRpb25zCgl0aGF0IHVzZSBHUjY0KyByYXRoZXIgdGhhbiBHUjk2Ky4KCSogdG0tdWx0cmEzLmg6ICBOZXcgZmlsZSwgZm9yIHVzZSBvbiBVbHRyYTMgVW5peCBhcyB3ZWxsIGFzIGZvcgoJcmVtb3RlIGRlYnVnZ2luZyBvZiBVbHRyYTMga2VybmVsLiAgSW5jbHVkZXMgdG0tMjlrLmggYW5kCglvdmVycmlkZXMgdmFyaW91cyB0aGluZ3MuCgoJKiByZW1vdGUtbW0uYyAobW1fYXR0YWNoLCBtbV93YWl0KTogIEhhbmRsZSBhdHRhY2ggbGlrZQoJY2hpbGRfYXR0YWNoIGRvZXMsIG1ha2luZyBhIGNsZWFuIHN0b3AgaW4gdGhlIG5ld2x5IGF0dGFjaGVkCglwcm9ncmFtLgoJKiByZW1vdGUtZWIuYzogIExpbnQuCgoJKiBjb2ZmcmVhZC5jOiAgTWFrZSBjb2ZmcmVhZCBpbmRlcGVuZGVudCBvZiBhbnkgcGFydGljdWxhcgoJdmFyaWFudCBvZiBDT0ZGLiAgQXZvaWQgI2luY2x1ZGUtaW5nIGFueSBwYXJ0aWN1bGFyIG9uZSBleGNlcHQKCWludGVybmFsY29mZi5oLiAgQkZEIG5vdyBwYXNzZXMga2V5IHZhbHVlcyBmb3Igc3ltYm9sIHJlYWRpbmcKCWFzIHBhcnQgb2YgaXRzIGNvZmZfZGF0YSBzdHJ1Y3R1cmUgKExJTkVTWiwgU1lNRVNaLCBBVVhFU1osCglhbmQgdGhlIHN5bWJvbCBtYXNrcyBhbmQgc2hpZnRzKTsgdXNlIHRoZW0uCglSZW1vdmUgb2Jzb2xldGUgZW5kX29mX3RleHRfYWRkci4KCgkqIGV4ZWMuYzogIFJlbW92ZSB1bnVzZWQgaW5jbHVkZSBmaWxlcy4KCldlZCBTZXAgMTEgMTk6Mzg6NDQgMTk5MSAgSm9obiBHaWxtb3JlICAoZ251IGF0IGN5Z2ludC5jeWdudXMuY29tKQoKCSogTWFrZWZpbGUuaW4gKGRvY3VtZW50YXRpb24gdGFyZ2V0cyk6ICBQYXNzICQoTTQpLgoJQnVnZml4IGZyb20gZWdnZXJ0QHR3aW5zdW4uY29tIChQYXVsIEVnZ2VydCkuCgoJKiBzdGFjay5jIChkb3duX3NpbGVudGx5X2NvbW1hbmQpOiAgQ2hlY2sgZm9yIHN0YWNrIGV4aXN0ZW5jZS4KClR1ZSBTZXAgMTAgMjM6MDg6MjkgMTk5MSAgSm9obiBHaWxtb3JlICAoZ251IGF0IGN5Z2ludC5jeWdudXMuY29tKQoKCSogTWFrZWZpbGUuaW4gKFZFUlNJT04pOiAgVXBkYXRlIHRvIDQuMC4zLgoKVHVlIFNlcCAxMCAwOToxOToyOSAxOTkxICBKb2huIEdpbG1vcmUgIChnbnUgYXQgY3lnaW50LmN5Z251cy5jb20pCgoJKiBjb3JlLmMgKGNvcmVfZmlsZV9jb21tYW5kKTogIFByaW50IGZyYW1lIGF0IGNvcmVkdW1wIHdpdGgKCWl0cyBsZXZlbCBudW1iZXIsIGJ5IGNhbGxpbmcgcHJpbnRfc3RhY2tfZnJhbWUuCgkqIGZyYW1lLmg6ICBBZGQgc2VsZWN0ZWRfZnJhbWVfbGV2ZWwsIHByaW50X3N0YWNrX2ZyYW1lLgoJKiBmcmFtZS5oLCBzdGFjay5jOiAgUmVtb3ZlIHByaW50X3NlbF9mcmFtZSwgcHJpbnRfc2VsZWN0ZWRfZnJhbWUuCgkqIGNvbnZleC10ZGVwLmMsIGNvbnZleC14ZGVwLmMsIGluZmNtZC5jLCBpbmZsb3cuYywgaW5mcnVuLmM6CglDaGFuZ2UgcHJpbnRfc2VsX2ZyYW1lIGFuZCBwcmludF9zZWxlY3RlZF9mcmFtZSBjYWxsZXJzIHRvCglwcmludF9zdGFja19mcmFtZS4KCgkqIGRieHJlYWQuYyAocmVhZF9vZmlsZV9zeW10YWIpOiAgQXZvaWQgZW1wdHkgZWxzZSBjbGF1c2UuCgkqIHN5bWZpbGUuYyAoZnJlZV9uYW1lZF9zeW10YWJzKTogIERpdHRvLgoJKiBtYWluLmMgKG1haW4pOiAgd3JhcF9oZXJlIG5lZWRzIGFuIGFyZy4KCSogc29saWIuYyAoZmluZF9zb2xpYik6ICBBdm9pZCBtZW1vcnkgYWNjZXNzIGlmIF9EWU5BTUlDIGlzIHplcm8uCgkoc29saWJfYWRkKTogIEF2b2lkIG5vaXNlLiAgCgkoc29saWJfY3JlYXRlX2luZmVyaW9yX2hvb2spOiAgTGludC4KCShzaGFyZWRsaWJyYXJ5X2NvbW1hbmQpOiAgTW92ZSBkb250X3JlcGVhdCB0byBoZXJlLgoJKiB1dGlscy5jIChlcnJvcik6ICBDYWxsIHdyYXBfaGVyZSB0byBmb3JjZSBidWZmZXJlZCBvdXRwdXQuCgoJU21hbGwgcGF0Y2hlcyBmcm9tIFBldGVyIFNjaGF1ZXI6CgoJKiBjb2ZmcmVhZC5jIChzdGFydF9zeW10YWIpOiAgRnJlZSBhbnkgZXhpc3RpbmcgbGluZV92ZWN0b3IgYmVmb3JlCgltYWxsb2MtaW5nIG5ldyBvbmUuCgkocmVhZF9jb2ZmX3N5bXRhYik6ICBEaXR0byBmb3IgdHlwZV92ZWN0b3IuCgoJKiBzb3VyY2UuYyAobGluZXNfdG9fbGlzdCk6ICBOZXcgdmFyaWFibGUsIHJlcGxhY2luZyBmdW5jdGlvbi4KCShhbGwgdXNlcyk6ICBVc2UgYXMgdmFyaWFibGUuCgkoX2luaXRpYWxpemVfc291cmNlKTogIEFkZCAnc2V0IGxpc3RzaXplJyBhbmQgJ3Nob3cgbGlzdHNpemUnLgoJKiB1dGlscy5jIChsaW5lc190b19saXN0KTogIFJlbW92ZSBmdW5jdGlvbi4KCSogc3RhY2suYyAocHJpbnRfZnJhbWVfaW5mbyk6ICBVc2UgYXMgdmFyaWFibGUuCgkqIGRlZnMuaCAobGluZXNfdG9fbGlzdCk6ICBSZW1vdmUgZGVjbGFyYXRpb24uCgpNb24gU2VwICA5IDEzOjQ1OjU3IDE5OTEgIEpvaG4gR2lsbW9yZSAgKGdudSBhdCBjeWdpbnQuY3lnbnVzLmNvbSkKCgkqIGJyZWFrcG9pbnQuYyAoaW5zZXJ0X2JyZWFrcG9pbnRzKTogIFJlc3RvcmUgd2FybmluZyBhYm91dAoJdGhlIHByb2dyYW0gbWlnaHQgYmUgcnVubmluZyBpbiBhbm90aGVyIHByb2Nlc3MsIGJ1dCBvbmx5IGZvcgoJc3lzdGVtcyB3aXRoIHRoaXMgYnJhaW4gZGVhdGggKCNpZmRlZiBPTkVfUFJPQ0VTU19XUklURVRFWFQpLgoJKiB4bS1ocDMwMGJzZC5oLCB4bS1taXBzLmgsIHhtLXZheC5oOiAgRGVmaW5lIGl0LgoKCSogdXRpbHMuYyAoZXJyb3IpOiAgaWYgZXJyb3JfcHJlX3ByaW50IGlzIHNldCwgcHJpbnQgdGhlIHN0cmluZwoJZmlyc3QuCgkqIG1haW4uYyAobWFpbiwgcHJpbnRfZ251X2FkdmVydGlzZW1lbnQsIHByaW50X2dkYl92ZXJzaW9uKToKCVJlZm9ybWF0IGxlZ2FsZXNlIHNvIGl0IGFsd2F5cyBwcmludHMsIGJ1dCBhY3RzIGFzIGFuICJJJ20gaGVyZSIKCW1lc3NhZ2Ugd2hpbGUgc3ltYm9scyBhcmUgYmVpbmcgcmVhZC4gIElmIGFueSBlcnJvcnMgb2NjdXIsCglwcmludCBhIGZldyBuZXdsaW5lcyB0byBzZXQgb2ZmIHRoZSBtZXNzYWdlIGFuZCBzdGFydCBpdCBhdCB0aGUKCWxlZnQgbWFyZ2luLiAgUmVtb3ZlIG1lbnRpb24gb2YgImhlbHAiIGNvbW1hbmQsIGFuZCBkb24ndCB5YWsKCWFib3V0IHN5bWJvbCByZWFkaW5nLgoJKGNhdGNoX2Vycm9ycyk6ICBFcnJvciBzdHJpbmcgaXMgbm93IHByaW50ZWQgZmlyc3QgaW4gY2FzZSBvZgoJZXJyb3IsIG5vdCBsYXN0LgoJKiBjb21tYW5kLmMgKHVuZGVmX2NtZF9lcnJvciwgbG9va3VwX2NtZCk6ICBPbiB1bmRlZmluZWQgY29tbWFuZCwKCXN1Z2dlc3QgdGhlICJoZWxwIiBjb21tYW5kLgoKCSogTWFrZWZpbGUuaW4gKFZFUlNJT04pOiAgU2V0IHRvIDQuMC4yLgoKVGh1IFNlcCAgNSAyMzo0OTo0OCAxOTkxICBKb2huIEdpbG1vcmUgIChnbnUgYXQgY3lnaW50LmN5Z251cy5jb20pCgoJKiAuZ2RiaW5pdDogIFJlbW92ZSB1c2VsZXNzICJyciIgY29tbWFuZC4gIFNldCBjb21wbGFpbnRzCgl0byAxIGZvciBwZW9wbGUgZGVidWdnaW5nIGdkYi4KCgkqIGJyZWFrcG9pbnQuYywgcmVtb3RlLXZ4LmM6ICBSZXdvcmQgc3RyaW5ncyBwcmludGVkIGJ5CgljYXRjaF9lcnJvcnMgY2FsbGVycy4KCldlZCBTZXAgIDQgMTE6MDc6NTAgMTk5MSAgSm9obiBHaWxtb3JlICAoZ251IGF0IGN5Z2ludC5jeWdudXMuY29tKQoKCSogV0hBVFMuTkVXOiAgImhpc3Rvcnkgd3JpdGUgLT4gaGlzdG9yeSBzYXZlIi4gIERvYyAid3JpdGUgb24vb2ZmIi4KCShGaXggZnJvbSBrZW5jQHZpZXdsb2dpYy5jb20uKQoKCUZpeCBzb21lIGluZnJhc3RydWN0dXJlIHRvIGJlIGFibGUgdG8gY29wZSB3aXRoIGhvc3QgYW5kIHRhcmdldAoJbWFjaGluZXMgd2l0aCBkaWZmZXJlbnQgc2l6ZWQgYmFzaWMgdHlwZXMgKGludHMsIHB0cnMsIGV0YykuCgkoSWRlYSBmcm9tIHBpZXJyZUBsYS50Y2UuY29tIChQaWVycmUgV2lsbGFyZCkuKQoKCSogdmFsdWVzLmMgKHZhbHVlX2Zyb21fbG9uZ2VzdCk6ICBSZW5hbWUgZnJvbSB2YWx1ZV9mcm9tX2xvbmcuCglIYW5kbGUgcG9pbnRlciB0eXBlcyBhcyB3ZWxsIGFzIGludGVnZXJzLCBzbyB0aGF0IHRhcmdldHMgd2l0aAoJZGlmZmVyZW50IHBvaW50ZXIgc2l6ZXMgZnJvbSB0aGUgaG9zdCBjYW4gYmUgYWNjb21vZGF0ZWQuCgkqIGJyZWFrcG9pbnQuYywgY29udmV4LXRkZXAuYywgZXZhbC5jLCBleHBwcmludC5jLCBwcmludGNtZC5jLAoJdmFsYXJpdGguYywgdmFsb3BzLmMsIHZhbHByaW50LmMsIHZhbHVlLmgsIHZhbHVlcy5jOiAgUmVuYW1lCgl1c2VzIG9mIHZhbHVlX2Zyb21fbG9uZyB0byB2YWx1ZV9mcm9tX2xvbmdlc3QuCgkqIGV2YWwuYywgZmluZHZhci5jLCBwcmludGNtZC5jLCB2YWxhcml0aC5jLCB2YWxvcHMuYzogIFBhc3MKCXRoZSBjb3JyZWN0IHBvaW50ZXIgdHlwZSB0byB2YWx1ZV9mcm9tX2xvbmd7ZXN0fS4KCgkqIGRvYy9nZGIudGV4aW5mbyAoJF8sICRfXyk6ICBEZXNjcmliZSB0eXBlcyBvZiB0aGVzZSB2YXJpYWJsZXMuCgoJKiByZW1vdGUtdnguYzogIFJlbW92ZSBvYnNvbGV0ZSBjb2RlIGZvciBjYWxsaW5nIGZ1bmN0aW9ucyB2aWEKCXZ4d29ya3Mga2x1ZGdlIGludGVyZmFjZSAoaXQgcmVmZXJlbmNlZCB2YWx1ZV9mcm9tX2xvbmcpLgoKCSogdmFsb3BzLmMgKHZhbHVlX3N0cmluZyk6ICBGaW5kIG1hbGxvYyB3aXRoIGxvb2t1cF9taXNjX2Z1bmMsIG5vdAoJcmF3IHNlYXJjaC4KClR1ZSBTZXAgIDMgMTg6Mzc6NDYgMTk5MSAgSm9obiBHaWxtb3JlICAoZ251IGF0IGN5Z2ludC5jeWdudXMuY29tKQoKCU1ha2Ugd3JpdGluZyB0byBmaWxlcyB3b3JrIHByb3Blcmx5LiAgKEZpeGVzIHRvIEJGRCBhcmUgYWxzbyBuZWVkZWQuKQoKCSogY29yZS5jIChjb3JlX29wZW4pOiAgT3BlbiBmaWxlIG91cnNlbHZlcywgcmVhZCBvciByL3csIGRlcGVuZGluZyBvbgoJd3JpdGVfZmlsZXMuICBVc2UgYmZkX2Zkb3BlbnIuICAKCSogZ2RiY29yZS5oICh3cml0ZV9maWxlcyk6ICBOZXcgdmFyaWFibGUuCgkqIGV4ZWMuYyAod3JpdGVfZmlsZXMpOiAgRGVmaW5lIHZhcmlhYmxlLCBhZGQgc2V0JnNob3cgZm9yIGl0LgoJKGV4ZWNfZmlsZV9jb21tYW5kKTogIFVzZSB3cml0ZV9maWxlcyB0byBvcGVuIGZvciByZWFkIG9yIHIvd3JpdGUuCgoJTWFrZSBzaGFyZWQgbGlicmFyeSByZWFkaW5nIGhhcHBlbiBhdXRvbWF0aWNhbGx5LiAgVGhlc2UgY2hhbmdlcwoJYXJlIG1vc3RseSBmcm9tIFBldGVyIFNjaGF1ZXIgPHBlc0ByZWdlbnQuZS10ZWNobmlrLnR1LW11ZW5jaGVuLmRlPi4KCgkqIGluZmVyaW9yLmggKHN0b3Bfc29vbl9xdWlldGx5KTogIEFkZCB0byBleHBvcnRlZCB2YXJpYWJsZXMuCgkqIGluZnJ1bi5jIChjaGlsZF9jcmVhdGVfaW5mZXJpb3IpOiAgY2FsbCBzb2xpYiBob29rLCBpZiBkZWZpbmVkLgoJKGNoaWxkX2F0dGFjaCk6ICBjYWxsIHNvbGliIGhvb2ssIGlmIGRlZmluZWQuCgkqIHNvbGliLmM6ICBJbmNsdWRlIGluZmVyaW9yLmguICBBZGQgZnJvbV90dHkgdG8gc29fbGlzdCBhcyBrbHVkZ2UuCgkoZmluZF9zb2xpYik6ICBVc2UgbG9va3VwX21pc2NfZnVuYyByYXRoZXIgdGhhbiBoYW5kLXJvbGxlZC4KCShzeW1ib2xfYWRkX3N0dWIpOiAgTmV3IHN0dWIgZm9yIGNhdGNoX2Vycm9ycy4KCShzb2xpYl9hZGQpOiAgQXZvaWQgb3V0cHV0IGlmICFmcm9tX3R0eS4gIENhdGNoIGVycm9ycyByYXRoZXIKCXRoYW4ganVzdCBjYWxsaW5nIHN5bWJvbF9maWxlX2FkZCBhbmQgYm9tYmluZy4KCShzb2xpYl9jcmVhdGVfaW5mZXJpb3JfaG9vayk6ICBJbnRlcmZhY2Ugd2l0aCB0aGUgdGFyZ2V0IHByb2Nlc3MKCXRvIGxldCBpdCByZWFkIGFuZCBhbGxvYyBzaGFyZWQgbGlicywgdGhlbiBmaWd1cmUgb3V0IHdoYXQgaXQgZGlkLgoKCSogY29yZS5jICh2YWxpZGF0ZV9maWxlcyk6ICBGaXggdHlwbywgc29mdGVuIHdhcm5pbmcuICAKCShGaXggZnJvbSBIaXJvdG8gS2Fnb3RhbmkgPGthZ290YW5pQGNzLnRpdGVjaC5hYy5qcD4uKQoKCSogdXRpbHMuYyAoZnB1dHNfZGVtYW5nbGVkKTogIEF2b2lkIGR1cGxpY2F0ZSBwcmludGluZyBpZgoJZGVtYW5nbGluZyBpcyBvZmYuICAoRml4IGZyb20gSi5ULiBDb25rbGluIDxqdGNAY2F5ZW5uZS5jb20+LikKCgkqIGluZnJ1bi5jIChwcm9jZWVkKTogIENhc3QgLTEgdG8gKENPUkVfQUREUikgYmVmb3JlIGNvbXBhcmluZy4KCShGaXggZnJvbSBwaWVycmVAbGEudGNlLmNvbSAoUGllcnJlIFdpbGxhcmQpLikKCgkqIG1haW4uYyAoY2F0Y2hfZXJyb3JzKTogIENoYW5nZSBhcmd1bWVudCB0byBhIGNoYXIgKiBmcm9tIGFuIGludCwKCXNpbmNlIGEgY2hhciAqIGNhbiBwb2ludCB0byBhIHN0cnVjdCBmdWxsIG9mIGdsb3AsIGJ1dCBhbiBpbnQKCWlzIG5vdCBndWFyYW50ZWVkIHRvIGJlIGFibGUgdG8gaG9sZCBhIHBvaW50ZXIuCgkqIGJyZWFrcG9pbnQuYyAoYnJlYWtwb2ludF9jb25kX2V2YWwsIGJwc3RhdF9zdG9wX3N0YXR1cywKCWJyZWFrcG9pbnRfcmVfc2V0X29uZSwgYnJlYWtwb2ludF9yZV9zZXQpOiAgQWRhcHQuCgkqIGNvcmUuYyAoY29yZV9vcGVuLCBzb2xpYl9hZGRfc3R1Yik6ICBBZGFwdC4KCSogcmVtb3RlLXZ4LmMgKHN5bWJvbF9zdHViLCBhZGRfc3ltYm9sX3N0dWIsIGNhbGxlcnMpOiAgQWRhcHQuCgpXZWQgQXVnIDI4IDE4OjE4OjA1IDE5OTEgIEpvaG4gR2lsbW9yZSAgKGdudSBhdCBjeWdpbnQuY3lnbnVzLmNvbSkKCgkqIE1ha2VmaWxlLmluOiAgVXBkYXRlIFZFUlNJT04gdG8gNC4wLjEuICBFdmFkZSBHTlUgTWFrZSBidWcKCWJ5IGFkZGluZyAuTk9FWFBPUlQgdGFyZ2V0LgoKRnJpIEF1ZyAyMyAxNzoxNDoyNSAxOTkxICBKb2huIEdpbG1vcmUgIChnbnUgYXQgY3lnaW50LmN5Z251cy5jb20pCgoJKiBHREItNC4wIHJlbGVhc2UhCgkqIFVwZGF0ZSBSRUFETUUuCgkqIE1ha2VmaWxlLmluIChWRVJTSU9OKTogIFJvbGwgdG8gNC4wLgoJKGdkYi50YXIuWik6ICBNYWtlIHJlZmNhcmQucHMgYXMgd2VsbCwgZm9yIHNoaXBtZW50LgoKRnJpIEF1ZyAyMyAxNDowNzowOSAxOTkxICBSb2xhbmQgSC4gUGVzY2ggIChwZXNjaCBhdCBjeWdpbnQuY3lnbnVzLmNvbSkKCgkqIGRvYy9nZGIudGV4aW5mbzogbWlub3IgcmV3b3JkaW5ncywgY3Jvc3NyZWYgdG8gcHR5cGUgZnJvbSBwcmludCwKCW1vcmUgb24gcHJpbnRzeW1zLiAKCgkqIGRvYy9NYWtlZmlsZSwgTWFrZWZpbGUuaW46IGdlbmVyYXRlICJnZGItYWxsLnRleGkiIHJhdGhlciB0aGFuCgkiZ2RiLWFsbC50ZXhpbmZvIiAKCgkqIGRvYy9yZGwtYXBwcy50ZXhpOiByZW5hbWVkIGZyb20gcmRsLWFwcHMudGV4aW5mbwoKCSogTWFrZWZpbGUuaW4sIGRvYy9NYWtlZmlsZSwgZG9jL2dkYi50ZXhpbmZvOgoJcmVmbGVjdCBhYm92ZSBuYW1lIGNoYW5nZQoKCSogV0hBVFMuTkVXOiBjb3JyZWN0IHBvaW50ZXIgdG8gcmVmY2FyZC4KCgkqIGRvYy9nZGIudGV4aW5mbzogdXBkYXRlIE5ldyBGZWF0dXJlcywgSW5zdGFsbGluZwoKCSogZG9jL2dkYmludC50ZXhpbmZvOiBhZGQgc2hvcnQgZGVzY3JpcHRpb24gb2YgY29uZmlndXJlICt0ZW1wbGF0ZQoKRnJpIEF1ZyAyMyAxMTo0NjowOCAxOTkxICBSb2xhbmQgSC4gUGVzY2ggIChwZXNjaCBhdCBjeWdpbnQuY3lnbnVzLmNvbSkKCgkqIGRvYy9nZGIudGV4aW5mbzogdXBkYXRlLCBmaXggYnVncyBpbiAiSW5zdGFsbGluZyIgYXBwZW5kaXgKCkZyaSBBdWcgMjMgMDE6MDI6MDAgMTk5MSAgSm9obiBHaWxtb3JlICAoZ251IGF0IGN5Z2ludC5jeWdudXMuY29tKQoKCSogTWFrZWZpbGUuaW46ICBBZGQgY29uZmlnLnN1YiwgbWFrZSBkb2MvcmRsLWFwcHMudGV4aW5mbyBmb3IKCXRhciBmaWxlLCBhZGQgZGVwZW5kZW5jaWVzIGZvciByZWZlcmVuY2VkIGRvYyBmaWxlcy4KClRodSBBdWcgMjIgMjI6MTc6MDYgMTk5MSAgU3R1IEdyb3NzbWFuICAoZ3Jvc3NtYW4gYXQgY3lnaW50LmN5Z251cy5jb20pCgoJKiBjb2ZmcmVhZC5jLCBzeW1maWxlLmMsIHN0YWNrLmM6ICBzYWJlcml6ZWQuCgpUaHUgQXVnIDIyIDE2OjIwOjI3IDE5OTEgIFJvbGFuZCBILiBQZXNjaCAgKHBlc2NoIGF0IGN5Z2ludC5jeWdudXMuY29tKQoKCSogZG9jL3JlZmNhcmQudGV4OiBwZXJtdXRlZCBFc3NlbnRpYWwgQ29tbWFuZHMgc2VjCgoJKiBkb2MvZ2RiLnRleGluZm86IG5ldyBDKysgY2hhcHRlcjsgcmV2aXNlZCBpbnN0YWxsYXRpb24gYXBwZW5kaXg7CgluZXcgZG9jIGZvcgoJCXNldC9zaG93IHN5bWJvbC1yZWxvYWRpbmcKCQlkZWZhdWx0IHNldCBjb21wbGFpbnRzIDAKCQlpbmZvIGFsbC1yZWdpc3RlcnMKCQlSRVQtcmVwZWF0IGRpc2FibGVkIGFmdGVyIHByb21wdGVkIGxvbmcgZGlzcGxheXMKCQlwcm9jZXNzSUQgKGF0dGFjaCkgaW50ZXJwcmV0YXRpb24gb2YgMm5kIEdEQiBjbWRsaW5lIGFyZwoKVGh1IEF1ZyAyMiAxNDowNTo0NyAxOTkxICBTdHUgR3Jvc3NtYW4gIChncm9zc21hbiBhdCBjeWdpbnQuY3lnbnVzLmNvbSkKCgkqIGV4cHJlYWQueSwgY29mZnJlYWQuYywgZGJ4cmVhZC5jLCB0YXJnZXQuYywgbWVtLWJyZWFrLmMsCgkgIGNwbHVzLWRlbS5jLCB2YWx1ZXMuYywgdmFscHJpbnQuYywgc3ltZmlsZS5jLCByZW1vdGUuYywKCSAgYnJlYWtwb2ludC5jLCBtYWluLmM6ICBsaW50LgoKVGh1IEF1ZyAyMiAwMjowMjoyNiAxOTkxICBKb2huIEdpbG1vcmUgIChnbnUgYXQgY3lnaW50LmN5Z251cy5jb20pCgoJSW5zdGFsbCBuZXcgY29uZmlndXJhdGlvbiBzY2hlbWUgZm9yIEdEQiBhbmQgZnJpZW5kcy4KCgkqIGNvbmZpZy5zdWI6ICBUcmFuc2xhdGUgb3JkaW5hcnkgbmFtZXMgdG8gdGhyZWUtcGFydCBuYW1lcy4KCSogY29uZmlndXJlOiAgVXNlIHRocmVlLXBhcnQgbmFtZXMgaW50ZXJuYWxseS4KCSogY29uZmlndXJlLmluOiAgVHJhbnNsYXRlIHRocmVlLXBhcnQgbmFtZXMgdG8gZmlsZW5hbWVzLgoKCSogUkVBRE1FLCBXSEFUUy5ORVc6ICBVcGRhdGUgZm9yIGdkYi00LjAuCgkqIE1ha2VmaWxlLmluOiAgUm9sbCBWRVJTSU9OIHRvIDMuOTkuCgpXZWQgQXVnIDIxIDE4OjIxOjA5IDE5OTEgIEpvaG4gR2lsbW9yZSAgKGdudSBhdCBjeWdpbnQuY3lnbnVzLmNvbSkKCgkqIGluZnB0cmFjZS5jIChLRVJORUxfVV9BRERSX0JTRCk6ICBJbmNsdWRlIGEub3V0LmdudS5oLgoJKiBpOTYwLXRkZXAuYywgbTY4ay10ZGVwLmMsIHNwYXJjLXRkZXAuYywgdG0taTk2MC5oLAoJdG0tbTY4ay5oLCByZW1vdGUtbmluZHkuYzogIENoYW5nZSBleHRfZm9ybWF0X1hYWCBzdHJ1Y3RzCgl0byBzaW5nbGUgc3RydWN0dXJlcyByYXRoZXIgdGhhbiBhcnJheXM7IHdoZW4gcGFzc2luZwoJdGhlaXIgYWRkcmVzcywgdXNlICYuICBUaGlzIGF2b2lkcyB0cm91YmxlIHdpdGggYmRlYWQgY29tcGlsZXJzLgoJKiBtY2hlY2suYzogRG9uJ3QgaW5jbHVkZSA8c3RkbGliLmg+OyBqdXN0IGRlY2xhcmUgInZvaWQgYWJvcnQoKTsiCglpbnN0ZWFkLiAgVGhpcyBhdm9pZHMgcG9ydGFiaWxpdHkgaGVhZGFjaGVzLgoJKiBtaXBzLXRkZXAuYyAobWlwc19kb19yZWdpc3RlcnNfaW5mbyk6ICBPbmx5IHByaW50IEZQIHJlZ3MgaWYKCWFza2VkIHRvLgoJKiBzb3VyY2UuYyAob3Blbl9zb3VyY2VfZmlsZSk6ICBBdm9pZCBBTlNJIGNvbnN0IGJkZWF0aCBieSAKCXNraXBwaW5nIGRlY2xhcmF0aW9uIGFuZCB0aGVuIGNhc3RpbmcgcmVzdWx0IHZhbHVlLgoJKiB0bS1ocDMwMGJzZC5oOiAgQ2xhcmlmeSBjb21tZW50LgoJKiB1dGlscy5jIChzdHJzdHIpOiAgUmVzdWx0IGlzIGNvbnN0IGNoYXIgKjsgQU5TSSBiZGVhdGguCgkqIHhtLWhwMzAwYnNkLmg6ICBEZWZpbmUgSE9TVF9CWVRFX09SREVSLiAgUmVkZWZpbmUgSU5UX01JTiwKCXNpbmNlIHN5c3RlbSBpbmNsdWRlIGZpbGUgZGVmaW5lcyBpdCBkaWZmZXJlbnRseSBmcm9tICJkZWZzLmgiLAoJdGhvdWdoIHRoZSB0d28gYXJlIGVxdWl2YWxlbnQgZm9yIG91ciBwdXJwb3Nlcy4KCSogdGNvbmZpZy9ocDMwMGJzZDogIEFkZCBtNjhrLXRkZXAuby4KClR1ZSBBdWcgMjAgMTY6MDE6MTEgMTk5MSAgSm9obiBHaWxtb3JlICAoZ251IGF0IGN5Z2ludC5jeWdudXMuY29tKQoKCSogdGNvbmZpZy9zdW4qNDogIFJlbW92ZSB3YXJuaW5ncyBhYm91dCBzeXN0ZW0gYXNzZW1ibGVyLgoKTW9uIEF1ZyAxOSAxMzo0NDo0NiAxOTkxICBKb2huIEdpbG1vcmUgIChnbnUgYXQgY3lnaW50LmN5Z251cy5jb20pCgoJKiBtY2hlY2suYzogIEF2b2lkIHdhcm5pbmcgYWJvdXQgdW5kZWNsYXJlZCBhYm9ydCBmbi4KCSogdG0tc3BhcmMuaCAoUENfQURKVVNUKTogIEF2b2lkIGNhbGxpbmcgZXJyb3IoKSBmcm9tIHRoaXM7CglpdCBjYXVzZXMgcmVjdXJzaXZlIGNhbGxzIHRvIGVycm9yKCkgd2hlbiB1c2VkIGluIGNsZWFudXBzLgoJVG8gZG8gc28gcmVxdWlyZXMgdGhhdCB3ZSBtYWtlIGl0IGEgZnVuY3Rpb24sIHNvIHdlIGRvLgoJKiBzcGFyYy10ZGVwLmMgKHNwYXJjX3BjX2FkanVzdCk6ICBOZXcgaW1wbGVtIG9mIFBDX0FESlVTVC4KCSogdXRpbHMuYyAoZG9fY2xlYW51cHMpOiAgUmVtb3ZlIHRoZSBjdXJyZW50IGNsZWFudXAgZnJvbSB0aGUKCWNoYWluICpiZWZvcmUqIGNhbGxpbmcgaXQsIGluIGNhc2UgZXJyb3IoKSBpcyBjYWxsZWQgZnJvbSBpdC4KCVRoZSByZXN1bHQgd29uJ3QgYmUgcHJldHR5LCBidXQgd29uJ3QgYmUgYW4gaW5maW5pdGUgbG9vcCBlaXRoZXIuCgpNb24gQXVnIDE5IDAwOjQxOjA0IDE5OTEgIE1pY2hhZWwgVGllbWFubiAgKHRpZW1hbm4gYXQgY3lnaW50LmN5Z251cy5jb20pCgoJKiBkYnhyZWFkLmMgKHJlYWRfc3RydWN0X3R5cGUpOiBHcm9rIGFub24gc3RydWN0cyBmb3IgQysrLgoJKHZiX25hbWUsIHZwdHJfbmFtZSk6IE51bGwgdGVybWluYXRlIHRoZXNlIHN0cmluZ3MuCgpGcmkgQXVnIDE2IDA4OjMxOjAzIDE5OTEgIEpvaG4gR2lsbW9yZSAgKGdudSBhdCBjeWdpbnQuY3lnbnVzLmNvbSkKCglNaW5vciBidWcgZml4ZXMgZnJvbSBCU0QgTmV0MiBnZGI6CgoJKiBibG9ja2ZyYW1lLmMgKGdldF9wcmV2X2ZyYW1lX2luZm8pOiAgSWYgRlJBTUVfQ0hBSU5fQ09NQklORQoJcmV0dXJucyAwLCB0aGVyZSBpcyBubyBwcmV2aW91cyBmcmFtZS4KCSogYnJlYWtwb2ludC5jIChjb21tYW5kc19jb21tYW5kKTogIElmICFmcm9tX3R0eSwgZG9uJ3QgY2FsbAoJaW5wdXRfZnJvbV90ZXJtaW5hbF9wKCkuCgkqIGRieHJlYWQuYyAocmVjb3JkX21pc2NfZnVuY3Rpb24pOiAgU3BlZWQgdXAgc2xpZ2h0bHkuCgkoY29tcGFyZV9wc3ltYm9scyk6ICBEaXR0by4KCSogaW5mY21kLmMgKGRvX3JlZ2lzdGVyc19pbmZvKTogIFRha2UgYSBzZWNvbmQgYXJndW1lbnQgdG8KCWRldGVybWluZSB3aGV0aGVyIHRvIHByaW50IGZsb2F0IHJlZ2lzdGVycy4gICJpbmZvIHJlZ2lzdGVycyIKCWRvZXMgbm90IGRvIHNvIGFueW1vcmUuICAiaW5mbyBhbGwtcmVnaXN0ZXJzIiBkb2VzLCBub3cuCgkqIG1pcHMtdGRlcC5jLCBweXItdGRlcC5jICh4eHhfZG9fcmVnaXN0ZXJzX2luZm8pOiAgVGFrZSBzZWNvbmQKCWFyZyBhbmQgaWdub3JlIGl0LgoJKiB0bS1taXBzLmgsIHRtLXB5ci5oIChET19SRUdJU1RFUlNfSU5GTyk6ICBQYXNzIHNlY29uZCBhcmcuCgkqIGluZmxvdy5jIChpbml0aWFsaXplX2luZmxvdyk6ICBTZXQgdGZsYWdzX291cnMgY29ycmVjdGx5LgoJCglPdGhlciBmaXhlczoKCgkqIGJyZWFrcG9pbnQuYyAoYnBzdGF0X2RvX2FjdGlvbnMpOiAgVXNlIGEgY2xlYW51cCB0byByZXN0b3JlCglleGVjdXRpbmdfYnJlYWtwb2ludF9jb21tYW5kcyBpZiB3ZSBhcmUgaW50ZXJydXB0ZWQgYnkgZXJyb3IuCgkqIGNvZmZyZWFkLmMgKGluaXRfbGluZW5vKTogIEF2b2lkIHByb2JsZW0gd2l0aCB6ZXJvLXNpemVkIGxpbmV0YWIKCXZlcnN1cyBtYWxsb2MvZnJlZS4gIEZyb206IGpvaG5AbGFidGFtLmxhYnRhbS5vei5hdSAoSm9obiBDYXJleSkuCgkqIGNvcmUuYyAoc29saWJfYWRkX3N0dWIsIGNvcmVfb3Blbik6ICBDYWxsIFNPTElCX0FERCBpbnNpZGUgYQoJY2F0Y2hfZXJyb3JzKCkgc28gd2UgY2FuIHNldHVwIHRoZSBmcmFtZSByZWdhcmRsZXNzIG9mIHdoZXRoZXIKCXRoZSBzaGFyZWQgbGlicyB3b3JrLgoJKiBpZWVlLWZsb2F0LmMgKGRvdWJsZV90b19pZWVlX2V4dGVuZGVkKTogIEdldCBleHBvbmVudCBmcm9tCglyaWdodCBwbGFjZSBpbiBsaXR0bGUtZW5kaWFuIHN5c3RlbXMuICBGcm9tIEpvaG4gQ2FyZXkuCgpUaHUgQXVnIDE1IDE4OjQzOjU3IDE5OTEgIEpvaG4gR2lsbW9yZSAgKGdudSBhdCBjeWdpbnQuY3lnbnVzLmNvbSkKCgkqIG1haW4uYzogUmVtb3ZlIHVudXNlZCB0ZXJtaW5hdGluZ19zaWduYWxzIGFuZCBjYXRjaF90ZXJtaW5hdGlvbigpLgoJKGxvbmdfb3B0aW9ucyk6ICBUZXJtaW5hdGUgd2l0aCBhIHplcm8gZWxlbWVudC4KCVtCdWdmaXggZnJvbSBBdHN1byBLYXdhZ3VjaGkgPGF0c3VvQGhhcms4Ni5oYXJsLmhpdGFjaGkuY28uanA+Ll0KCShnZGJfcmVhZGxpbmUpOiAgTWFrZSBjYWxsLWNvbXBhdGlibGUgd2l0aCByZWFkbGluZS4KCShpbml0X3NpZ25hbHMpOiAgSW1wcm92ZSBjb21tZW50cyByZSB2Zm9yayB2cy4gc2lnbmFsLgoKCSogdXRpbHMuYyAocHJvbXB0X2Zvcl9jb250aW51ZSk6ICBVc2UgbmV3IGdkYl9yZWFkbGluZSgpLgoJSWYgd2UgcHJvbXB0IGZvciBjb250aW51YXRpb24sIHdlIGRvbid0IGxldCBDUiByZXBlYXQgdGhlIHByZXZpb3VzCgljb21tYW5kLCBvbmNlIHdlIGdldCBiYWNrIHRvIGEgcHJvbXB0LiAgSXQncyB0b28gZWFzeSB0byBrZWVwCgloaXR0aW5nIENSLCBleHBlY3RpbmcgIi0tbW9yZS0tIiBwcm9tcHRzLCBhbmQgaGF2ZSBzb21lIGxvbmcKCWNvbW1hbmQgc3RhcnQgcmVwZWF0aW5nIG9uIHlvdS4KClR1ZSBBdWcgMTMgMTY6MTc6NTYgMTk5MSAgSm9obiBHaWxtb3JlICAoZ251IGF0IGN5Z2ludC5jeWdudXMuY29tKQoKCSogYmxvY2tmcmFtZS5jIChmcmFtZWxlc3NfbG9va19mb3JfcHJvbG9ndWUpOiAgU3BlZWQgdXAgYnkKCWNhbGxpbmcgU0tJUF9QUk9MT0dVRV9GUkFNRUxFU1NfUCBpZiBpdCdzIGRlZmluZWQuCgkqIHRtLXNwYXJjLmggKFNLSVBfUFJPTE9HVUUsIFNLSVBfUFJPTE9HVUVfRlJBTUVMRVNTX1ApOgoJRGVmaW5lIHR3byB2YXJpYW50cywgb25lIGZhc3Rlci4KCSogc3BhcmMtdGRlcC5jIChzcGFyY19mcmFtZV9jaGFpbik6ICBVc2UgdGFyZ2V0X3JlYWRfbWVtb3J5CglhbmQgcmV0dXJuIHplcm8sIHJhdGhlciB0aGFuIGdpdmluZyBhbiBlcnJvci4KCShzZXR1cF9hcmJpdHJhcnlfZnJhbWUpOiAgSW5pdGlhbGl6ZSB0aGUgUEMgaW4gdGhlIG5ldyBmcmFtZS4KCShza2lwX3Byb2xvZ3VlKTogIEFkZCBhIHNlY29uZCBhcmcgc2F5aW5nIHdoZXRoZXIgd2UncmUganVzdAoJY2hlY2tpbmcgZm9yIGEgZnJhbWVsZXNzIGZ1bmN0aW9uIG9yIG5vdC4KCgkqIGNvcmUuYyAoY29yZV9vcGVuLCBjb3JlX2Nsb3NlLCBjb3JlX3hmZXJfbWVtb3J5KTogIE1vdmUKCXNlY3Rpb24gdGFibGUgcG9pbnRlcnMgYW5kIGJmZCogaW50byB0aGUgdGFyZ2V0X29wcy4KCShjb3JlX29wZW4pOiAgQWxsb3cgZXJyb3JzIGluIHNoYXJlZCBsaWIgcmVhZGluZywgZXRjLgoJKGNvcmVfZmlsZXNfaW5mbyk6ICBEZXNjcmliZSBzaGFyZWQgbGlicmFyeSBzZWN0aW9ucy4KCgkqIGV4ZWMuYyAoZXhlY19vcGVuLCBleGVjX2Nsb3NlLCBleGVjX3hmZXJfbWVtb3J5LCB4ZmVyX21lbW9yeSwKCWV4ZWNfZmlsZXNfaW5mbywgc2V0X3NlY3Rpb25fY29tbWFuZCk6ICBNb3ZlIHNlY3Rpb24gdGFibGUKCXBvaW50ZXJzIGFuZCBiZmQqIGludG8gdGhlIHRhcmdldF9vcHMuCgkoYWRkX3RvX3NlY3Rpb25fdGFibGUpOiAgQWRkIEJGRCB0byBzZWN0aW9uIHRhYmxlLgoKCSogdGFyZ2V0LmMgKHRhcmdldF94ZmVyX21lbW9yeSwgdGFyZ2V0X2luZm8pOiAgUGFzcyB0YXJnZXQgdG8KCXhmZXJfbWVtb3J5IGFuZCB0YXJnZXRfaW5mbyBmdW5jdGlvbnMuCgkqIHRhcmdldC5oOiAgICcnCgoJKiBnZGJjb3JlLmg6ICBNb3ZlIHN0cnVjdCBzZWN0aW9uX3RhYmxlLgoJKiB0YXJnZXQuaDogIE5ldyBob21lIG9mIHN0cnVjdCBzZWN0aW9uX3RhYmxlLgoKCSogc29saWIuYyAoc29saWJfYWRkKTogIE5ldyBhcmd1bWVudCBpcyB0aGUgdGFyZ2V0X29wcyB3aG9zZQoJc2VjdGlvbiBsaXN0IGlzIHRvIGJlIGFkZGVkIHRvLCBpZiBhbnkuICBSZWFsbG9jYXRlIHRoZQoJc2VjdGlvbnMgaW4gdGhhdCB0YXJnZXQgdG8gYWRkIGFueSB0aGF0IGNvbWUgZnJvbSBzaGFyZWQgbGlicy4KCSh0aHJvdWdob3V0KSBzb19zZWN0aW9ucyByZW5hbWVkIHRvIHNlY3Rpb25zLgoJKHNvbGliX3hmZXJfbWVtb3J5KTogIERlbGV0ZWQuCgkqIHRtLXN1bm9zLmggKFNPTElCX0FERCk6ICBBZGQgdGFyZ2V0IGFyZ3VtZW50LgoJKFNPTElCX1hGRVJfTUVNT1JZKTogIERlbGV0ZS4KCgkqIGNvcmUuYywgZXhlYy5jLCBpbmZ0YXJnLmMsIHJlbW90ZS1lYi5jLCByZW1vdGUtbmluZHkuYywKCXJlbW90ZS12eC5jLCByZW1vdGUuYywgdGFyZ2V0LmMsIHRhcmdldC5oOiAgUmVtb3ZlIGFkZF9zeW1zIHZlY3RvcgoJZnJvbSB0YXJnZXRfb3BzLiAgSXQncyB0aGUgc2FtZSBvbiBhbGwgdGFyZ2V0cy4gIEFkZCB0d28gc2VjdGlvbgoJcG9pbnRlcnMgdG8gdGFyZ2V0X29wcy4KCgkqIHN0YWNrLmMgKGZpbmRfcmVsYXRpdmVfZnJhbWUpOiAgRHVtcCBhbmNpZW50IGFsZ29yaXRobSBmb3IKCSJkb3duIiwganVzdCB1c2UgaGFuZHkgIm5leHQiIHBvaW50ZXJzLgoJKGZyYW1lX2NvbW1hbmQpOiAgRG9uJ3QgZXJyb3IgaWYgdGhlcmUgaXMgbm8gc3RhY2s7IGxldCB1c2VyCglzZXQgb25lLgoKCSogaW5mbG93LmMgKG5ld190dHlfcHJlZm9yaywgbmV3X3R0eSk6ICBOZXcgcHJlZm9yayByb3V0aW5lCgltb2RpZmllcyBzdGF0aWMgc3RhdGUgaW4gdGhlIHBhcmVudCBwcm9jZXNzOyBuZXdfdHR5IGl0c2VsZgoJcnVucyBpbiB0aGUgY2hpbGQgYW5kIG1vZGlmaWVzIHRoZSBjaGlsZCdzIGZpbGUgZGVzY3JpcHRvcnMKCXRvIG1hdGNoIHRoZSBzYXZlZCBzdGF0aWMgc3RhdGUuCgkqIGluZnJ1bi5jIChjaGlsZF9jcmVhdGVfaW5mZXJpb3IpOiAgQ2FsbCBuZXdfdHR5X3ByZWZvcmssCglmb3JrLCB0aGVuIG5ld190dHkuCgoJKiBpbmZwdHJhY2UuYyAoY2hpbGRfeGZlcl9tZW1vcnkpOiAgQWRkIGlnbm9yZWQgdGFyZ2V0IGFyZy4KCSogcmVtb3RlLWViLmMgKGViX3hmZXJfaW5mZXJpb3JfbWVtb3J5KTogICcnCgkqIHJlbW90ZS1uaW5keS5jIChuaW5keV94ZmVyX2luZmVyaW9yX21lbW9yeSk6ICAnJwoJKiByZW1vdGUtdnguYyAodnhfeGZlcl9tZW1vcnkpOiAgICAnJwoJKiByZW1vdGUuYyAocmVtb3RlX3hmZXJfbWVtb3J5KTogICAnJy4gIFJlbmFtZSBmcm9tCglyZW1vdGVfeGZlcl9pbmZlcmlvcl9tZW1vcnkuCgoJKiBtYWluLmMgKG1haW4pOiAgT25seSB0cnkgdG8gYXR0YWNoICJjb3JlZmlsZSIgYXJndW1lbnQgaWYKCWl0IHN0YXJ0cyB3aXRoIGEgZGlnaXQuCgoJKiBzeW1maWxlLmMgKHN5bWJvbF9yZWxvYWRpbmcpOiAgTmV3ICJzZXQvc2hvdyIgdmFyaWFibGUuCgkoc3ltYm9sX2ZpbGVfYWRkKTogIFNob3J0ZW4gbWVzc2FnZSBhYm91dCBzeW1ib2wgcmVhZGluZy4KCShhZGRfc3ltYm9sX2ZpbGVfY29tbWFuZCk6ICBNZXJnZSB3aXRoIGFkZF9zeW1zX2FkZHJfY29tbWFuZCwKCXNpbmNlIHRoaXMgc2hvdWxkIHdvcmsgb24gYWxsIHRhcmdldHMgbm93LgoJKHN0b3Bfd2hpbmluZyk6ICBEZWZhdWx0IHRvIHplcm8sIHRvIHNodXQgdXAgY29tcGxhaW50cwoJYWJvdXQgYmFkIHN5bWJvbCB0YWJsZXMgb24gbWFueSBzeXN0ZW1zLgoJKGZyZWVfbmFtZWRfc3ltdGFicyk6ICBKdXN0IGV4aXQgdW5sZXNzIHN5bWJvbF9yZWxvYWRpbmcuCgoJKiB4bS1zdW4zb3M0LmgsIHhtLXN1bjRvczQuaDogIERlZmluZSBCUk9LRU5fTEFSR0VfQUxMT0NBLAoJYW5kIGFkZCBjb21tZW50IGV4cGxhaW5pbmcgc2hhcmVkIGxpYnJhcnkgc2NyZXcuCgoJKiBzb3VyY2UuYzogICNpZiBkZWZpbmVkID0+ICNpZmRlZi4KClRodSBBdWcgIDggMTI6MjM6MTkgMTk5MSAgSm9obiBHaWxtb3JlICAoZ251IGF0IGN5Z2ludC5jeWdudXMuY29tKQoKCSogZG9jL2dkYmludC50ZXhpbmZvOiAgSW1wcm92ZSBkb2Mgb24gcG9ydGluZyB0byBuZXcgT1Mncy4KClR1ZSBBdWcgIDYgMTc6MTY6MTUgMTk5MSAgUm9sYW5kIEguIFBlc2NoICAocGVzY2ggYXQgY3lnaW50LmN5Z251cy5jb20pCgoJKiBkb2MvcmRsLWFwcHMudGV4aW5mbzogcHJvdmlkZSBkZWZhdWx0IHJlYWRsaW5lLWFwcGVuZGl4IGZpbmRlcgoJKGRvYy9NYWtlZmlsZSBrbm93cyBob3cgdG8gbWFrZSBvbmUgZm9yIGxvY2FsIGNvbmZpZykKCgkqIE1ha2VmaWxlLmluOiB1c2UgZG9jL01ha2VmaWxlIGZvciBkb2MgdGFyZ2V0cwoKCSogZG9jL01ha2VmaWxlOiBHREIgZG9jdW1lbnRhdGlvbiBub3cgaGFzIGl0cyBvd24gTWFrZWZpbGUKCSAgZG9jL3JlZmNhcmQudGV4OiByZW5hbWVkIGZyb20gImdkYnJjLnRleCIKCSAgZG9jL2dkYmludC50ZXhpbmZvOiBhZGQgbWFya3VwIGluICJDbGVhbnVwcyIgY2hhcHRlcgoKCkZyaSBBdWcgIDIgMDA6MTM6MDYgMTk5MSAgSm9obiBHaWxtb3JlICAoZ251IGF0IGN5Z2ludC5jeWdudXMuY29tKQoKCSogdmFsdWVzLmMgKGJhc2VjbGFzc19hZGRyKTogIFdoZW4gcmVhZGluZyB0YXJnZXQgbWVtb3J5LCB1c2UgdGhlCglsZW5ndGggb2YgdGhlIGJhc2V0eXBlLCBub3QgdGhlIHVwcGVyIHR5cGUuICBXZSd2ZSBvbmx5IG1hbGxvYydkCgllbm91Z2ggc3BhY2UgZm9yIHRoZSBiYXNldHlwZSwgbGVhZGluZyB0byBlcnJvcnMgaW4gZnJlZSgpLgoKCSogZXhwcHJpbnQuYyAocHJpbnRfc3ViZXhwKTogIFByaW50IFVOT1BfTUVNVkFMIG9mIGFuIE9QX0xPTkcgdGhhdAoJZW5kcyB1cCBhcyBhIGZ1bmN0aW9uIHNwZWNpYWxseSwgc2luY2Ugd2Uga25vdyB0aGUgYWN0dWFsIHR5cGUgb2YKCXRoZSBwb2ludGVkLXRvIGFkZHJlc3MuICBUaGlzIChzb21ld2hhdCkgZml4ZXMgZGlzcGxheSBvZgoJZXhwcmVzc2lvbnMgdGhhdCBpbmNsdWRlIG1pc2NfZnVuY3Rpb25fdmVjdG9yIG5hbWVzLiAgVHJ5IGBjb25kIDEKCSFzdHJjbXAoImEiLCJiIiknIHRoZW4gYGkgYicuCgoJKiBpbmZydW4uYzogIE1vdmUgRE9fREVGRVJSRURfU1RPUkVTIGZyb20gcHJvY2VlZCgpIHRvIHJlc3VtZSgpLgoJVGhlIGNoaWxkIGNhbiBiZSBwcm9jZWVkZWQgZnJvbSBpbnNpZGUgd2FpdF9mb3JfaW5mZXJpb3IgaW4KCWV2YWx1YXRpbmcgYnJlYWtwb2ludCBjb25kaXRpb25zLCBhbmQgRE9fREVGRVJSRURfU1RPUkVTIHdhcwoJZ2V0dGluZyBza2lwcGVkIGluIHRoYXQgY2FzZS4KCgkqIGV4cHByaW50LmMgKHByaW50X3N1YmV4cCk6ICBVc2UgZmlsdGVyZWQgb3V0cHV0LCBzaW5jZSB0aGUKCXN1YnJvdXRpbmVzIHdlIGNhbGwgdXNlIGl0LCBvdGhlcndpc2UgdGhlIG91dHB1dCBpcyBob3JyaWJseQoJbWFuZ2xlZCwgc2luY2Ugb3V0cHV0IG9mIHdyYXBwYWJsZSBzdHVmZiBjb21lcyBvdXQgbGF0ZS4KCgkqIE1ha2VmaWxlLmluOiAgQnVtcCBWRVJTSU9OIHRvIDMuOTguMQoKCSogaW5mcnVuLmMgKGNoaWxkX2NyZWF0ZV9wcm9jZXNzKTogIFVzZSBleGVjbHAgdG8gZmluZCB0aGUKCXNoZWxsIHRvIGV4ZWMgb3VyIHRhcmdldCBwcm9ncmFtLiAgVGhpcyByZXF1aXJlcyBzb21lIGZpZGRsaW5nCgl3aXRoIGBlbnZpcm9uJyBzaW5jZSB0aGVyZSBpcyBubyBleGVjbHBlKCkuCgpUaHUgQXVnICAxIDE1OjM1OjE3IDE5OTEgIFJvbGFuZCBILiBQZXNjaCAgKHBlc2NoIGF0IGZvd2FudG9uLmN5Z251cy5jb20pCgoJKiBNYWtlZmlsZS5pbiwgZG9jL2dkYnJjLnRleCwgZG9jL3JjLSogKG5ldyBmaWxlcyk6CglNaW5vciByZWFycmFuZ2VtZW50IG9mIHJlZmNhcmQgcGVybWl0cyB0d28gbmV3IG1ha2UgdGFyZ2V0cy0tCglnZGJyYy5kdmkJICAgIERWSSBvdXRwdXQgZm9yIHJlZmNhcmQsIHVzaW5nIENNIGZvbnRzCglnZGJyYy5wcwkgICAgUG9zdFNjcmlwdCByZWZjYXJkLCB1c2luZyBQUyBmb250cwoKV2VkIEp1bCAzMSAxNjo0NjoyMSAxOTkxICBKb2huIEdpbG1vcmUgIChnbnUgYXQgY3lnaW50LmN5Z251cy5jb20pCgoJKiBHREItMy45OCByZWxlYXNlLgoKCSogVE9ETywgUHJvamVjdHMsIFdIQVRTLk5FVywgUkVBRE1FOiAgVXBkYXRlIGZvciBnZGItMy45OC4KCSogTWFrZWZpbGUuaW4gKGdkYi1hbGwudGV4aW5mbyk6ICBBdm9pZCB0b3VjaGluZyBmaWxlIGlmIE00IGRpZXMuCgpXZWQgSnVsIDMxIDE2OjM1OjU4IDE5OTEgIFJvbGFuZCBILiBQZXNjaCAgKHBlc2NoIGF0IGN5Z2ludC5jeWdudXMuY29tKQoKCSogZG9jL2dkYi50ZXhpbmZvOiBsYXN0IGNoYW5nZXMgZm9yIHJlbGVhc2UuCglNaW5vciB0eXBvIGFuZCBmb3JtYXR0aW5nIGZpeGVzOyBpbmNvcnBvcmF0ZWQgbW9zdCBmaXhlcyByZW1haW5pbmcgZnJvbQoJZmlsZWQgbWFpbCBjb21tZW50aW5nIG9uIGVhcmxpZXIgZHJhZnRzLgoKCUFkZGVkIHdhcm5pbmdzOiBwaXBlcyBkb24ndCB3b3JrIGluIHJ1biBjb21tYW5kOwoJICAgICAgICBjb25kaXRpb25zIGFyZSBjb252ZXJzZSBvZiBhc3NlcnRpb25zOwoJICAgICAgCXN0ZXAgb3ZlciBmbiB3aXRob3V0IGRlYnVnIGluZm8gZ29lcyB0byBuZXh0IGZuOwoJCXZhcnMgbWF5IGhhdmUgIndyb25nIiB2YWx1ZXMgbmVhciBmbiBlbnRyYW5jZSwgZXhpdAoKCUFkZGVkIGV4YW1wbGUgZnJvbSBLaW5nc3RvbiBvbiBwcmludGluZyByZXBlYXRlZCBub25hZGphY2VudCB2YWx1ZXMKCglBZGRlZCBleHBsaWNpdCBtZW50aW9uIHRoYXQgaW4gRW1hY3MgZ2RiIG1vZGUgQy1jIGFuZCBDLXogYXJlIGxpa2UKCXNoZWxsIG1vZGUgZm9yIHNpZ25hbHMKCglSZW5hbWVkICJTdGVwcGluZyBhbmQgQ29udGludWluZyIgdG8gIkNvbnRpbnVpbmcgYW5kIFN0ZXBwaW5nIiBzbyBpdAoJZG9lc24ndCBzb3VuZCBzbyBtdWNoIGxpa2UgaXRzIHBhcmVudCAiU3RvcHBpbmcgYW5kIENvbnRpbnVpbmciOyBhbHNvCgltb3ZlZCBlbnRyaWVzIG9uIGNvbnRpbnVlIHRvIHRvcCBvZiBzZWN0aW9uLCBzbyB0aGV5IGRvbid0IGdldCBsb3N0LgoKCUltcHJvdmVkIGluc3RhbGxhdGlvbiBkaXJlY3Rpb25zIGluIGFwcGVuZGl4LCBhZGRlZCBtYW51YWwgZm9ybWF0dGluZwoJaW5zdHJ1Y3Rpb25zIAoKVHVlIEp1bCAzMCAxNzoyNjozOSAxOTkxICBKb2huIEdpbG1vcmUgIChnbnUgYXQgY3lnaW50LmN5Z251cy5jb20pCgoJKiBjb25maWd1cmUuaW46ICBSZW1vdmUgeG0uaCBhbmQgdG0uaCBldmVuIGlmIHdlIGFyZW4ndCBsaW5raW5nCgluZXcgb25lcywgc28gIi4vY29uZmlndXJlIHN1bjQ7IC4vY29uZmlndXJlIG5vbmUiIGRvZXMgdGhlIHJpZ2h0Cgl0aGluZy4gIEFzc3VtZSB0aGF0IGFsbGRlcHMubWFrIGFuZCBkZXBlbmQgYXJlIGFscmVhZHkgYnVpbHQgaW4KCXNyY2RpciwgYW5kIGF2b2lkIHJ1bm5pbmcgIm1ha2UiIChwYXJ0aWN1bGFybHkgIm1ha2UgZGVwZW5kIiwKCXdoaWNoIGludm9sdmVzICJnY2MiKSBmcm9tIGluc2lkZSBjb25maWd1cmUuICBCdWlsZCBNYWtlZmlsZQoJZGlyZWN0bHkgcmF0aGVyIHRoYW4gYnVpbGRpbmcgTWFrZWZpbGUuY29uZiBmaXJzdC4KCSogY29uZmlndXJlOiAgUmVnZW5lcmF0ZSB3aXRoIGFib3ZlIGNoYW5nZXMuCgkqIE1ha2VmaWxlLmluOiAgVXNlICQoQklTT04pIHRvIGZpbmQgYmlzb24uICBSb2xsIFZFUlNJT04KCXRvIDMuOTguICBSZXZpc2UgZ2RiLnRhci5aIHByb2NlZHVyZSB0byBwcm9kdWNlIGEgZmlsZQoJY2FsbGVkIGdkYi0kKFZFUlNJT04pLnRhci5aIGJ1dCB3aGljaCB1bnBhY2tzIGludG8gYQoJZGlyZWN0b3J5IGNhbGxlZCAiZ2RiIi4gIE1vdmUgbm9uLXNvdXJjZSBmaWxlcyBvdXQgb2YKCSQoU0ZJTEVTX1NVQkRJUikuICBQcmV0dHkgdXAgYWxsZGVwcy5tYWsgd2l0aCBjb21tZW50cy4KCShkZXBlbmQpOiAgRG9uJ3QgdHJ5IHRvIGRvICJnY2MgZXhwcmVhZC55Ii4KCShleHByZWFkLm8pOiAgVXBkYXRlIGRlcGVuZGVuY2llcyBieSBoYW5kLgoKTW9uIEp1bCAyOSAxNToyMTowOSAxOTkxICBSb2xhbmQgSC4gUGVzY2ggIChwZXNjaCBhdCBjeWdpbnQuY3lnbnVzLmNvbSkKCgkqIGRvYy9nZGIudGV4aW5mbzoKCUZpeGVkIGEgdmFyaWV0eSBvZiBzbWFsbCB0eXBvcyB0aGF0IHByZXZlbnRlZCBpbmZvIGZyb20gZm9ybWF0dGluZwoJY2xlYW5seTsgYWx0ZXJlZCB0b28tbG9uZyBoZWFkaW5nIGZvciBHUEwgQXBwZW5kaXgsIGFzIGRpc2N1c3NlZAoJdy9STVM7IENoYW5nZWQgZGF0ZSBvbiBjb3ZlciB0byBKdWx5IDkxLgoKRnJpIEp1bCAyNiAxMzoyMDowMiAxOTkxICBSb2xhbmQgSC4gUGVzY2ggIChwZXNjaCBhdCBjeWdpbnQuY3lnbnVzLmNvbSkKCgkqIGRvYy9nZGIudGV4aW5mbzoKCSgxKSBBcHBsaWVkIHNvbWUgZml4ZXMgZHVlIHRvIGNvbW1lbnRzIGZyb20gTGFycnkgQnJlZWQgKGVhc2llciBvbmVzCgl0aHJvdWdoIGNoYXBzZWMgNS4yKQoJKDIpIEVsaW1pbmF0ZWQgdXNlIG9mIEBmb290bm90ZS0tLWhhZCBteSBkb3VidHMgYWJvdXQgaXQgYW55d2F5cywgYW5kCglpdCdzIGJyb2tlbiBpbiBsYXRlc3QgdGV4aW5mbwoJKDMpIEludHJvZHVjZWQgKnNvbWUqIHVzZSBvZiBbXSBmb3Igb3B0aW9uYWwgYXJndW1lbnRzLCB3aGVyZQoJZXhwbGFuYXRpb24gaXMgbm90IHNpbXBsZXIgYnkgbGlzdGluZyBjbWQgdyBhcmcgYW5kIGNtZCB3L291dCBhcmcKCXNlcGFyYXRlbHkuICBTdGlsbCBub3QgdXNpbmcgQGRlZmZuLgoJKDQpIERyb3BwZWQgaW4gR1BMLTIuICBOT1RFOiBvbmUgb2YgR1BMLTIgb3IgdGV4aW5mbyBpcyBicm9rZW47IGEKCWNvdXBsZSBvZiBoZWFkaW5ncyBhcmUgdG9vIGxvbmcuICBOZWVkIHBhdGNoZXMgdG8gdGV4aW5mbyBvciByZXZpc2lvbgoJdG8gR1BMLTIuCgoJKiBQYXJ0aWFsIHVwZGF0ZSB0byBSRUFETUUgKHdoaWNoIHN0aWxsIG5lZWRzIHdvcmsgZm9yIHRoaXMKCXJlbGVhc2UhKTogKDEpIHVzZSBvZiBjb25maWd1cmUgY29ycmVjdGVkIGZvciBuZXcgc2NyaXB0LCAKICAgICAgICAgICAgICAgICAgICgyKSAibWFrZSBnZGIuZHZpIiBhbmQgIm1ha2UgZ2RiLmluZm8iIG1lbnRpb25lZC4KCldlZCBKdWwgMjQgMDY6NDQ6MDIgMTk5MSAgSm9obiBHaWxtb3JlICAoZ251IGF0IGN5Z2ludC5jeWdudXMuY29tKQoKCSogc3ltdGFiLmMgKGxvb2t1cF9zeW1ib2wpOiAgRG9uJ3QgY29tcGxhaW4gcmlnaHQgb2ZmIGFib3V0CglubyBkZWJ1ZyBzeW1ib2xzOyB1c2UgdGhlIG1pc2MgZnVuY3Rpb24gdmVjdG9yIGZpcnN0LgoJKGxpc3Rfc3ltYm9scyk6ICBVc2UgbWlzYyBmdW5jdGlvbiB2ZWN0b3IgdG8gZmluZCBzeW1ib2xzCgl0aGF0IGRvbid0IGhhdmUgZGVidWcgaW5mbywgYW5kIHByaW50IHRoZW0uCgkoZmluZF9wY19zeW10YWIpOiAgVGVtcG9yYXJpbHkgYXZvaWQgZmF0YWwoKSB3aGVuIHBzeW10YWIKCVBDIHJhbmdlIGRvZXNuJ3QgbWF0Y2ggc3ltdGFiIFBDIHJhbmdlLCBhcyBpdCBkb2VzIG9uIHRoZSAKCU1JUFMgYmVjYXVzZSBvdXIgc3ltdGFiIHJlYWRpbmcgaXNuJ3QgcGVyZmVjdC4KCgkqIGRieHJlYWQuYyAoZGJ4X3N5bWZpbGVfcmVhZCk6ICBNYWtlIHdhcm5pbmcgYWJvdXQKCSJubyBkZWJ1ZyBzeW1ib2xzIiBzbGlnaHRseSBuaWNlci4KCgkqIHNvdXJjZS5jIChzZWxlY3Rfc291cmNlX3N5bXRhYik6ICBJZiAibWFpbiIgc3ltYm9sIGV4aXN0cywKCWJ1dCBkZWNvZGVfbGluZV9zcGVjIGNhbid0IGZpbmQgbGluZSBpbmZvLCBkb24ndCBqdXN0IHJldHVybgoJYSB6ZXJvOyB0cnkgb3RoZXIgc291cmNlIHN5bXRhYnMgb3IgZ2l2ZSBhbiBlcnJvci4KCgkqIG1pcHNyZWFkLmMgKHBhcnNlX3BhcnRpYWxfc3ltYm9scyk6ICBTb3J0IHRoZSBwc3ltdGFicyBieQoJdGhlaXIgbG93IGFkZHJlc3NlcyBmaXJzdCwgdGhlbiByaXAgdGhyb3VnaCBmaXhpbmcgaGlnaCBhZGRycy4KCgkqIG5zMzJrLW9wY29kZS5oIChzZnNyKTogIEJ1Z2ZpeCBmcm9tIFJ1bmUgTmVyZ31yZCwKCTxydW5lbmVAaWZpLnVpby5ubz4uCgkoTlMzMktfU1ZDX0lNTUVEX09QRVJBTkRTKTogIFJldmVyc2UgdGhlICNpZm5kZWYuCgpUdWUgSnVsIDIzIDE4OjUyOjQzIDE5OTEgIFJvbGFuZCBILiBQZXNjaCAgKHBlc2NoIGF0IGN5Z2ludC5jeWdudXMuY29tKQoKCSogTWlub3IsIG1vc3RseSBtZWNoYW5pY2FsLCBjbGVhbnVwIG9mIGRvYyBzdWJkaXIgZm9yIGNsZWFuIAoJbWFrZWluZm8naW5nIGFuZCBUZVhpbmc7IGFsc28gZW5zdXJlZCBnZGItYWxsLnRleGluZm8gKHBvc3QtbTQpIAoJYW5kIGdkYi5pbmZvIChwb3N0LSB0ZXhpbmZvMiBtYWtlaW5mbykgZ2VuZXJhdGVkIGZvciBkaXN0cmlidXRpb24uCgpTdW4gSnVsIDIxIDAzOjU0OjUyIDE5OTEgIEpvaG4gR2lsbW9yZSAgKGdudSBhdCBjeWdpbnQuY3lnbnVzLmNvbSkKCglNb3N0bHkgTUlQUyBhbmQgZ2VuZXJhbCBzeW1ib2wtcmVhZGluZyBmaXh1cHMuCgoJKiBkb2MvZ2RiaW50LnRleGluZm86ICBBZGQgZG9jdW1lbnRhdGlvbiBvbiBzeW1ib2wtcmVhZGluZwoJaW50ZXJmYWNlLgoKCSogbWlwc3JlYWQuYzogIFJlbW92ZSBrbHVkZ2VzIGFyb3VuZCAjaW5jbHVkZSAiZWNvZmYuaCIuCglSZW1vdmUgcmVkZWZpbml0aW9ucyBvZiBhX21hZ2ljLCBldGMsIG5vIGxvbmdlciB1c2VkLgoJKHBhcnNlX3N5bWJvbCwgKTogIENvbnZlcnQgIkludGVybmFsOiIgcHJpbnRmcyB0byBjb21wbGFpbigpdHMuCglGaXggZ2xvYmFsIG92ZXJ2aWV3IGNvbW1lbnRzIHRvIG1hdGNoIHN5bWZpbGUuYyBwcm90b2NvbC4KCShtaXBzY29mZl9uZXdfaW5pdCk6ICBFbGltaW5hdGUgY3VyX2hkciBpZiB3ZSBoYXZlIG9uZS4KCShtaXBzY29mZl9zeW1maWxlX3JlYWQpOiAgRWxpbWluYXRlIHVudXNlZCBjb2RlLiAgQXZvaWQKCXNvcnRpbmcgYWxsIHRoZSBzeW10YWJzLCB3aGVuIGFsbCB3ZSBoYXZlIHJlYWQgaGVyZSBpcyBwc3ltdGFicy4KCVRoZSBzeW10YWJzIGFyZSBzb3J0ZWQgYXMgdGhleSBhcmUgY3JlYXRlZCBhbnl3YXkuICBUZWxsCgljb25kZW5zZV9taXNjX2J1bmNoZXMgd2hldGhlciB3ZSdyZSBtYWlubGluZS4KCShwc3ltdGFiX3RvX3N5bXRhYl8xKTogIFBhc3MgZmlsZW5hbWUgd2hlbiByZWN1cnNpbmcsIHRvIG1ha2UKCXN0YWNrIHRyYWNlIG1vcmUgaW5mb3JtYXRpdmUuCgkocGFyc2VfcGFydGlhbF9zeW1ib2xzKTogIEFzc3VtZSBjdXJfaGRyIGFzIGFyZ3VtZW50LgoJKHJlYWRfbWlwc19zeW10YWIpOiAgRG9uJ3QgY2xvYmJlciBjdXJfaGRyLCBzbyBpdCBjYW4gYmUgZnJlZWQuCglQYXNzIGN1cl9oZHIgaW1wbGljaXRseSB0byBwYXJzZV9wYXJ0aWFsX3N5bWJvbHMuICBBdm9pZCBjaGVja2luZwoJdGhlIFRZUEVfTkFNRSBvZiBjaGFyICosIHNpbmNlIHRoYXQncyBkb25lIGluIHN5bWZpbGUuYy4KCShmcmVlX251bWFyZ3MsIHBhcnNlX3N5bWJvbCwgYWRkX3N5bWJvbCwgYWRkX2Jsb2NrLAoJc2hyaW5rX2xpbmV0YWJsZSk6ICBEZWNsYXJlIHRoZXNlIGZucyB2b2lkLiAKCSh1cGdyYWRlX3R5cGUpOiAgQ29udmVydCB0cmVlIG9mIGlmJ3MgdG8gc3dpdGNoLiAgQ2xlYW4gdXAKCWJvZ3VzICJvZmYgPT0gMCIgaGFuZGxpbmcgd2l0aCBhIGNvbXBsYWludC4gIEF2b2lkIHNldHRpbmcKCWZpZWxkIGJpdHBvcyBhbmQgYml0c2l6ZSBvZiBhcnJheSB3aXRoIGxvd2VyIGFuZCB1cHBlciBib3VuZHMuCglDaGVjayBzcGVjaWZpZWQgYml0c2l6ZSBvZiBlbGVtZW50cyBhZ2FpbnN0IHRoZWlyIGFjdHVhbCB0eXBlJ3MKCWJpdHNpemUsIGFuZCBjb21wbGFpbiBpZiBkaWZmZXJlbnQuICBDb21wbGFpbiBhYm91dCB1bmtub3duIAoJdHlwZSBxdWFsaWZpZXJzLgoJKHBhcnNlX2Zkcik6ICBEb24ndCBhc3N1bWUgc2l6ZW9mKGNoYXIgKikgPT0gc2l6ZW9mIChzdHJ1Y3QgKikuCgkocHN5bXRhYl90b19zeW10YWJfMSk6ICBQcmludCBuYW1lcyBvZiBzdWJzaWRpYXJ5IGZpbGVzIHRoYXQKCWFyZSBiZWluZyByZWFkIGluLiAgRklYTUUsIHdlIHJlYWQgZmFyIHRvbyBtYW55IGZpbGVzLiAgVGhpcyBjb2RlCglpcyBub3QgdGhlIHByb2JsZW0sIHRoZSBwcm9ibGVtIGlzIGluIHBhcnNlX2ZkciB3aGVyZSB0aGUgcHN5bXRhYnMKCWFyZSBzZXQgdXAuCgkoY3Jvc3NfcmVmKTogIFJlc3VsdCBzaG91bGQgaW5kaWNhdGUgdGhhdCB3ZSB1c2VkIG9uZSBhdXggZW50cnkKCW5vcm1hbGx5LCBvciB0d28gaWYgd2UgZW5jb3VudGVyZWQgYSAibmV4dCIgZW50cnkuICBUaGlzIHVzZWQKCXRvIGxlYXZlIHRoZSBjYWxsZXIgcG9pbnRpbmcgYXQgdGhlIHdyb25nIGF1eCBlbnRyeS4KCShhZGRfc3ltYm9sKTogIElmIG92ZXJmbG93ZWQgY3VyX2Jsb2NrLCByZWFsbG9jYXRlIGl0IGxhcmdlciwKCWNoYXNlIGFsbCBwb2ludGVycyB0byBpdCwgYW5kIGNvbXBsYWluKCksIHJhdGhlciB0aGFuIGNsb2JiZXIgbWVtb3J5LgoJKHNocmlua19ibG9jayk6ICBVc2UgeHJlYWxsb2MgcmF0aGVyIHRoYW4geG1hbGxvYy1hbmQtY29weS4KCShuZXdfZmllbGQpOiAgT25seSBhbGxvY2F0ZSBvbmUgZmllbGQgaW5pdGlhbGx5LCBub3QgdHdvLgoJUHVsbCArKyBvdXQgb2YgbWFjcm8gYXJndW1lbnQuICBTaW1wbGlmeS4KCShfaW5pdGlhbGl6ZV9taXBzcmVhZCk6ICBBdm9pZCBpbml0aWFsaXphdGlvbiBvZiBpbXBvcnRkCglnbG9iYWxfcHN5bWJvbHMgYW5kIHN0YXRpY19wc3ltYm9scy4gCgoJKiBzeW1maWxlLmMgKHBzeW10YWJfdG9fc3ltdGFiKTogIERlcGVuZCBvbiBYWFhfcHN5bXRhYl90b19zeW10YWIKCXRvIHByb3Blcmx5IHNldCBwc3QtPnN5bXRhYjsgYXZvaWQgc2VhcmNoaW5nIGZvciBpdC4KCShzeW1maWxlX2Zucyk6ICBJbXByb3ZlIGNvbW1lbnRzLCBhZGQgYSBGSVhNRS4KCSogZGJ4cmVhZC5jOiAgVXBkYXRlIGNvbW1lbnRzIHRvIHJlZmxlY3Qgc3ltZmlsZSBwcm90b2NvbC4KCShyZWFkX29maWxlX3N5bXRhYiwgZW5kX3N5bXRhYik6ICBSZXR1cm4gdGhlIHN5bXRhYi4KCShwc3ltdGFiX3RvX3N5bXRhYl8xKTogIFNldCBwc3QtPnN5bXRhYi4KCgkqIGNvZmZyZWFkLmMgKGNvZmZfc3ltZmlsZV9yZWFkKTogIHRlbGwgY29uZGVuc2VfbWlzY19idW5jaGVzCgl3aGV0aGVyIHdlJ3JlIG1haW5saW5lLgoKCSogc3ltZmlsZS5oIChzeW1fZm5zKTogIFJlbW92ZSB1bnVzZWQgc3ltX2Rpc2NhcmQgbWVtYmVyLgoJKiBjb2ZmcmVhZC5jLCBtaXBzcmVhZC5jLCBkYnhyZWFkLmM6ICBSZW1vdmUgWFhYX3N5bWZpbGVfZGlzY2FyZC4KCgkqIG10cmFjZS5jIChtdHJhY2UpOiAgVGFrZSBlZmZlY3QgaWYgbWFsbHdhdGNoIGlzIHNldCwgZXZlbiBpZgoJdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIG5vdC4KCSogaW5mY21kLmMgKGZpbmlzaF9jb21tYW5kKTogIFVzZSBmaWx0ZXJlZCBwcmludGZzLgoJKiBjcGx1cy1kZW0uYzogIEFkZCBzdHJ1Y3QgdGFncyB0byBhIGZldyB1bm5hbWVkIHN0cnVjdHMuCgkqIHZhbG9wcy5jICh2YWx1ZV9jb2VyY2VfYXJyYXkpOiAgSW1wcm92ZSBjb21tZW50cy4KCSogdmFscHJpbnQuYyAodHlwZV9wcmludF92YXJzcGVjX3N1ZmZpeCk6ICBQcmludCBhcnJheSBzaXplIG9ubHkKCWlmIGdyZWF0ZXIgdGhhbiB6ZXJvLgoJKiBtODhrLXRkZXAuYzogIFNoaWZ0IHNvbWUgbGluZXMgbGVmdCBieSBvbmUgc3BhY2UsIHRoYXQgaGFkCglhcHBhcmVudGx5IGJlZW4gdHJhc2hlZCBhdCBzb21lIHBvaW50LgoJKiBUT0RPOiAgTW9yZSB0aGluZ3MgdG8gZG8sIGEgZmV3IGdvdCBkb25lLgoKVGh1IEp1bCAxOCAyMjo0NjowNSAxOTkxICBKb2huIEdpbG1vcmUgIChnbnUgYXQgY3lnaW50LmN5Z251cy5jb20pCgoJKiBzeW10YWIuaCAoTE9DX0VYVEVSTkFMKTogIEVsaW1pbmF0ZSBpbiBmYXZvciBvZiBMT0NfU1RBVElDLgoJKGxkc3ltb2ZmLCBsZHN5bWxlbiwgZ2xvYmFsc19vZmZzZXQsIHN0YXRpY3Nfb2Zmc2V0KTogSW1wcm92ZQoJY29tbWVudHMuCgkqIGRieHJlYWQuYyAocmVhZF9kYnhfc3ltdGFiKTogIExPQ19FWFRFUk5BTCAtPiBMT0NfU1RBVElDLgoJKiBleHByZWFkLnksIGZpbmR2YXIuYywgc3ltbWlzYy5jOiAgRGl0dG8uCgkqIHByaW50Y21kLmMgKGFkZHJlc3NfaW5mbyk6ICBVcGRhdGUgcHJpbnRlZCBmb3JtcyBvZiBMT0NfCglzeW1ib2xzLiAgRWxpbSBMT0NfRVhURVJOQUwuICAKCShwcmludF9mcmFtZV9hcmdzKTogIEtlZXAgdHJhY2sgb2YgcGFyYW0gc3RhY2sgb2Zmc2V0cyBiZWZvcmUKCXJlLWxvb2tpbmcgdXAgdG8gZmluZCB0aGUgbG9jYWwgcmVnaXN0ZXIgcGFyYW0gaXMga2VwdCBpbi4KCgkqIG1pcHNyZWFkLmM6ICBVc2UgPHN5bWNvbnN0Lmg+IGFuZCA8c3ltLmg+IHJhdGhlciB0aGFuIDxzeW1zLmg+LgoJRnVydGhlciBpbnRlZ3JhdGlvbiBvZiBtaXBzcmVhZCBpbnRvIGdkYi4gIEVsaW1pbmF0ZSB1bnVzZWQKCXJvdXRpbmVzLCBkdXBsaWNhdGUgZGVjbGFyYXRpb25zLiAgSGFuZGxlIHN0YXRpYyBzeW1ib2xzIGluIAoJcHN5bXRhYnMgYXMgd2VsbCBhcyBleHRlcm5hbCBzeW1ib2xzLiAgV2hlbiByZWFkaW5nIHN5bXRhYnMsCglpbnNlcnQgc3ltYm9scyBpbnRvIHRoZSBjb3JyZWN0IGJsb2NrIChnbG9iYWwsIHN0YXRpYywgb3IgYSBsb2NhbAoJYmxvY2spLgoJKHJlYWRfbWlwc19zeW10YWIsIHBhcnNlX3BhcnRpYWxfc3ltYm9scyk6ICBEb24ndCBwYXNzIHVzZWxlc3MKCSJpbmNyZW1lbnRhbCIgYXJnLgoJKG1pcHNjb2ZmX3N5bWZpbGVfcmVhZCk6ICBEb24ndCBjYWxsIHNlbGVjdF9zb3VyY2Vfc3ltdGFiLgoJKHBhcnNlX3N5bWJvbCk6ICBVc2UgU1lNQk9MX1ZBTFVFX0FERFJFU1Mgd2hlcmUgYXBwcm9wcmlhdGUsCglyYXRoZXIgdGhhbiBTWU1CT0xfVkFMVUUuCgkocGFyc2VfZXh0ZXJuYWwpOiAgQ29tbWVudCBjbG9iYmVyaW5nIG9mIHRvcF9zdGFjay4KCShwYXJzZV9wYXJ0aWFsX3N5bWJvbHMpOiAgVXBkYXRlIGNvbW1lbnRzLiAgQWxsb2NhdGUgYW5kIHBhcnNlCglzdGF0aWMgc3ltYm9scyBhcyB3ZWxsIGFzIGV4dGVybmFsIHN5bWJvbHMuICBGSVhNRSwgZW51bSB2YWx1ZXMKCWFyZSBub3QgaGFuZGxlZCBpbiB0aGlzIHBhc3MsIGJ1dCBzaG91bGQgYmUuICBJbmxpbmUgbmV3X3BzeW1ib2wuCglVc2UgU1lNQk9MX1ZBTFVFX0FERFJFU1MuCgkocHN5bXRhYl90b19zeW10YWJfMSk6ICBSZWFkIHN5bWJvbHMgaW50byBnbG9iYWwgc3RhdGljIGJsb2NrCglieSBkZWZhdWx0ICh1bnRpbCBlbnRlciBzb21lIGZ1bmN0aW9uJ3MgbG9jYWwgYmxvY2sgY29udGV4dCkuCgkoc29ydF9ibG9ja3MpOiAgQ2xlYW4gdXAgU1RBVElDX0JMT0NLIGFzIHdlbGwgYXMgR0xPQkFMX0JMT0NLLgoJKGRlc3Ryb3lfYWxsX3N5bXRhYnMsIG5ld19wc3ltYm9sKTogIEVsaW1pbmF0ZSwgdW51c2VkLgoKCSogc291cmNlLmMgKHNlbGVjdF9zb3VyY2Vfc3ltdGFiKTogIFNlbGVjdCBhIHNvdXJjZSBzeW10YWIKCWZyb20gZWl0aGVyIHRoZSBzeW10YWJzIG9yLCBmYWlsaW5nIHRoYXQsIHRoZSBwc3ltdGFicy4KCShsaXN0X2NvbW1hbmQpOiAgVXBkYXRlIGVycm9yIG1lc3NhZ2UuCgkoZm9yd2FyZF9zZWFyY2hfY29tbWFuZCwgcmV2ZXJzZV9zZWFyY2hfY29tbWFuZCk6ICBVc2UgZ2V0Yywgbm90CglmZ2V0YywgZm9yIHNwZWVkLiAgRklYTUUsIGFkZCBjb21tZW50IGFib3V0IGJ1ZmZlcnMgdGhhdCBkaWUgaWYKCW92ZXJydW4gYnkgbG9uZyBsaW5lLgoKCSogdmFsdWVzLmMgKHVucGFja19maWVsZF9hc19sb25nLCBtb2RpZnlfZmllbGQpOiAgQXZvaWQgc2hpZnRpbmcKCWJ5IGFuIGVudGlyZSB3b3JkLCB3aGljaCBpcyBub3QgcG9ydGFibGUsIGlmIHdlIGhhdmUgYSAzMi1iaXQKCWZpZWxkLiAgKENvZGUgaW4gZGJ4cmVhZC5jIGFscmVhZHkgdHVybnMgc3VjaCBiaXRmaWVsZHMsIGlmCglhbGlnbmVkLCBpbnRvIG9yZGluYXJ5IGludHMsIGJ1dCBmaXhpbmcgdGhpcyB3aWxsIGhlbHAgZm9yIG90aGVyCglzeW1ib2wgZm9ybWF0cyBhbmQgZm9yIGZ1dHVyZSBjaGFuZ2VzLikKCSogY29yZS5jIChjb3JlX29wZW4pOiAgSGFuZGxlIEFOU0kgY29uc3QgYnJhaW4gZGVhdGguCgkqIHV0aWxzLmMgKHZwcmludGYpOiAgRml4IHZhcmFyZ3MgdHlwby4KClN1biBKdWwgMTQgMDA6NDI6NTMgMTk5MSAgSm9obiBHaWxtb3JlICAoZ251IGF0IGN5Z2ludC5jeWdudXMuY29tKQoKCSogZmluZHZhci5jIChmaW5kX3Zhcl92YWx1ZSk6ICBIYW5kbGUgJmZ1bmN0aW9uIGJldHRlci4KCSogVE9ETzogIERvY3VtZW50IHdvcmsgbmVlZGVkIG9uICZmbiBhbmQgJmFycmF5LgoJKiBwcmludGNtZC5jIChwcmludF9hZGRyZXNzX3N5bWJvbGljKTogIE5ldyBhcmcgaXMgdGhlIHByZWZpeAoJdG8gcHJpbnQgaWYgYSBuYW1lIGlzIHByaW50ZWQuCgkocHJpbnRfYWRkcmVzc19kZW1hbmdsZSk6ICBIb25vciAic2V0IHByaW50IGFkZHJlc3MiIG5vdy4KCVVzZSBuZXcgYXJnIGFib3ZlIHRvIGltcHJvdmUgc3BhY2luZyBvZiBvdXRwdXQuCgkqIHZhbHByaW50LmMgKHZhbF9wcmludCk6ICBXaGVuIHByaW50aW5nIGZ1bmN0aW9uIHBvaW50ZXJzLAoJcHJpbnQgc3ltYm9saWMgZm9ybSB0b28uCgkqIGJyZWFrcG9pbnQuYyAoYnJlYWtwb2ludF8xKTogIFVzZSBuZXcgcHJpbnRfYWRkcmVzc19zeW1ib2xpYy4KCk1vbiBKdWwgIDggMTk6MDI6NDYgMTk5MSAgSm9obiBHaWxtb3JlICAoZ251IGF0IGN5Z2ludC5jeWdudXMuY29tKQoKCSogY29yZS5jIChtZW1vcnlfZXJyb3IpOiAgUmV3b3JkIGVycm9yIG1zZyB0byBtaXNsZWFkIGxlc3MuCgoJKiBtaXBzLXBpbnNuLmMgKHByaW50X2luc25fYXJnICdkJyk6ICBQcmludCAkIHdpdGggcmVnIG5hbWUuCgoJKiBtaXBzcmVhZC5jIChyZWFkX21pcHNfc3ltdGFiLCByZWFkX3RoZV9taXBzX3N5bXRhYiwKCXBhcnNlX3BhcnRpYWxfc3ltYm9scyk6IFVzZSBuZXdlciBCRkQgaW50ZXJuYWxzIChleHRlcm5hbF9maWxlaGRyCglhbmQgZXh0ZXJuYWxfYW91dGhkciksIGJ5dGUtc3dhcCB0aGUgZmllbGRzIHRoYXQgd2UgY2FyZSBhYm91dAoJYmVmb3JlIHVzaW5nIHRoZW0sIGFuZCBtYWtlIHRoZSBmaWxlIGhlYWRlciBkYXRhIGxvY2FsIHRvCglyZWFkX3RoZV9taXBzX3N5bXRhYiByYXRoZXIgdGhhbiBnbG9iYWwuCgpTYXQgSnVsICA2IDAxOjM0OjE1IDE5OTEgIEpvaG4gR2lsbW9yZSAgKGdudSBhdCBjeWdpbnQuY3lnbnVzLmNvbSkKCgkqIG5zMzJrLW9wY29kZS5oIChtb3ZtdywgbW92bWQpOiAgRml4IG9wY29kZXMuICBCdWcgZml4Cglmcm9tIFJ1bmUgTmVyZ31yZCA8cnVuZW5lQGlmaS51aW8ubm8+IG9uIDUgSnVsIDE5OTEuCgoJKiBtYWluLmMgKGNvbW1hbmRfbGluZV9pbnB1dCk6ICBGbHVzaCBzdGRvdXQgYW5kIHN0ZGVycgoJYmVmb3JlIGV2ZXJ5IGNhbGwgdG8gcmVhZGxpbmUuICBUaGlzIHJlcG9ydGVkbHkgZml4ZXMgYSBidWcKCXRoYXQgY29tZXMgdXAgaW4gU3lzIFYgcnVubmluZyBlbWFjcy1nZGIgYW5kL29yIHh4Z2RiLAoJd2hlbiBzdGRpbi9vdXQgYXJlIHBpcGVzIG9yIHNvY2tldHMuCgpUaHUgSnVsICA0IDE0OjQ3OjA2IDE5OTEgIEpvaG4gR2lsbW9yZSAgKGdudSBhdCBjeWdpbnQuY3lnbnVzLmNvbSkKCgkqIGNvbmZpZ3VyZS5pbiwgTWFrZWZpbGUuaW46ICBBdm9pZCByZWJ1aWxkaW5nICJkZXBlbmQiIGFzIG11Y2guCglBdm9pZCBkZWNsYXJpbmcgTWFrZWZpbGUgZGVwZW5kZW5jaWVzLCBiZWNhdXNlIEdOVSBNYWtlIHN0dXBpZGx5Cgl0cmllcyB0byB1cGRhdGUgaXQgaWYgd2UgZG8uCgoJKiBjb2ZmcmVhZC5jOiAgUmV2aXNlIGZvciBtaW5vciBjaGFuZ2VzIHRvIGJmZCBpbnRlcm5hbCBjb2ZmCglpbmRleGVzLgoKCSogY29uZmlndXJlOiAgSWYgLXRlbXBsYXRlPSBpcyBnaXZlbiBhIHJlbGF0aXZlIHBhdGgsIG1ha2UgaXQgCglhYnNvbHV0ZSBiZWZvcmUgcmVjdXJyaW5nIGluIHN1YmRpcmVjdG9yaWVzLgoKCSogY29uZmlndXJlLCBjb25maWd1cmUuaW4sIE1ha2VmaWxlLmluOiAgSW5zdGFsbCAiY29uZmlndXJlIiBzY3JpcHQKCWFzIHJlcGxhY2VtZW50IGZvciBjb25maWcuZ2RiLgoJKiBjb25maWcuZ2RiLCBNYWtlZmlsZS5kaXN0LCBNYWtlZmlsZS5zZGlyOiAgUmVtb3ZlCgkqIFJFQURNRTogIFVwZGF0ZSBmb3IgY29uZmlndXJlLCBtb3N0bHkuICBGSVhNRS4KCgkqIEFkZCBkZWMzMTAwIGFzIGVxdWl2YWxlbnQgdG8gbGl0dGxlbWlwcy4gIEluZGljYXRlIGluIGFsbCBob3N0ICYKCXRhcmdldCBjb25maWcgZmlsZXMgdGhhdCB0aGV5IGFyZSBmb3IgdGhlIGhvc3QuICBXaGVuIHRoZSBsaW5lcwoJZ2V0IGNvcGllZCBpbnRvIHRoZSBNYWtlZmlsZSwgdGhpcyBtYWtlcyBpdCBtb3JlIG9idmlvdXMgd2hhdCdzCgl1cC4KCk1vbiBKdW4gMjQgMjM6NDk6MDcgMTk5MSAgSm9obiBHaWxtb3JlICAoZ251IGF0IGN5Z2ludC5jeWdudXMuY29tKQoKCSogc3BhcmMtb3Bjb2RlLmggKHRyYXAgb3Bjb2Rlcyk6ICBBdm9pZCBsZWFkaW5nIHNwYWNlcyBvcgoJdGFicywgd2hpY2ggZW5kIHVwIGluIHRoZSBkaXNhc3NlbWJsZXIgb3V0cHV0IGluYWR2ZXJ0ZW50bHkuCgpXZWQgTWF5IDI5IDIzOjAxOjAzIDE5OTEgIEpvaG4gR2lsbW9yZSAgKGdudSBhdCBjeWdpbnQuY3lnbnVzLmNvbSkKCglNYWtlIGl0IGNvbXBpbGUgY2xlYW5seSBpbiBhbiBBTlNJIEdDQzIgZW52aXJvbm1lbnQuCgoJKiBibG9ja2ZyYW1lLmM6ICA8c3RkaW8uaD4KCSogY3BsdXMtZGVtLmM6ICBmcmVlIHRha2VzIGEgdm9pZCAqLCBpZmRlZiBfX1NURENfXwoJKiBkYnhyZWFkLmMgKHJlYWRfaHVnZV9udW1iZXIpOiAgYXZvaWQgZ2NjMiBidWcgaG9pc3RpbmcgY2FsYyBvZgoJTE9OR19NQVgvcmFkaXguCgkqIGRlZnMuaCAoYWxsb2NhKTogIEF2b2lkIGRvaW5nIGFueXRoaW5nIGlmIGFsbG9jYSBhbHJlYWR5IGRlZidkLgoJKiBzdGRkZWYuaCwgc3RkbGliLmg6ICBSZW1vdmUgdGhlc2UgZmlsZXMuCgkqIHN5bXRhYi5jOiAgQXZvaWQgZGVjbGFyaW5nIHFzb3J0LCBjbG9zZS4KCSogc3ltZmlsZS5jOiAgQXZvaWQgZGVjbGFyaW5nIGNsb3NlLgoJKiB1dGlscy5jICh2cHJpbnRmKTogIERlY2xhcmUgImFwIiBhcmcgYXMgcHJvcGVyIHZhX2FsaXN0LgkKCSogc3BhcmMtdGRlcC5jOiAgQXZvaWQgaW5jbHVkaW5nIGxvdHMgb2YgU3VuLWhvc3Qtc3BlY2lmaWMgZmlsZXMuCgoJQXNzb3J0ZWQgb3RoZXIgY2hhbmdlcy4KCSogZGJ4cmVhZC5jOiAgaW5jbHVkZSAibGliYW91dC5oIiwgbm90ICJsaWJhLm91dC5oIi4KCSogcHJpbnRjbWQuYyAocHJpbnRfZnJhbWVfYXJncyk6ICBTZXQgcmVjdXJzZSBwcm9wZXJseSBmb3IKCWluZGVudGF0aW9uIG9mIHN0cnVjdCBhbmQgYXJyYXkgcGFyYW1ldGVycy4KCSogdmFsb3BzLmMgKHZhbHVlX2Nhc3QpOiAgQWxsb3cgY2FzdCB0byB2b2lkLgoJKiBpbmZydW4uYyAocmVzdW1lKTogIElmIE5PX1NJTkdMRV9TVEVQLCBjYWxsIG1hY2hpbmUgZGVwZW5kZW50CglzaW5nbGVfc3RlcCgpIGluIGEgdGFyZ2V0LWluZGVwZW5kZW50IGZhc2hpb24uCgkqIHNwYXJjLXRkZXAuYyAoc2luZ2xlX3N0ZXApOiAgRG9uJ3QgY2FsbCBwdHJhY2Ugb3Vyc2VsdmVzLCBqdXN0CglzZXQgdXAgdG8gYmUgcmVhZHkgdG8gY29udGludWUuICBUaGlzIG1ha2VzIHVzIHRhcmdldCBpbmRlcGVuZGVudC4KCSogaW5mcHRyYWNlLmMgKGNoaWxkX3Jlc3VtZSk6ICBSZW1vdmUgY2FsbCB0byBzaW5nbGVfc3RlcDsgbm93CgljYW4gc2luZ2xlIHN0ZXAgYSBTUEFSQyB0YXJnZXQgb2YgYW55IGtpbmQuCgpXZWQgTWF5IDIyIDE4OjE4OjI0IDE5OTEgIFJvbGFuZCBILiBQZXNjaCAgKHBlc2NoIGF0IGZvd2FudG9uLmN5Z251cy5jb20pCgoJKiBNYWtlZmlsZS5kaXN0LCBkb2MvZ2RiLnRleGluZm8sIGRvYy8qLW00LnRleGluZm86IHNwbGl0IHVwIEdEQgoJZG9jbiBpbnRvIHNlcGFyYXRlIHNlY3Rpb25zLS0tYmFzaWNhbGx5IGNoYXB0ZXJzLCBwbHVzIHR3byBsb29zZQoJcGllY2VzIHRoYXQgY2FuIGJlIGNvbmZpZ3VyZWQgdG8gZ28gaW4gZGlmZmVyZW50IHBsYWNlcy4gIFRoaXMKCWFsbG93cyBHTlUgbTQgdG8gcHJlcHJvY2VzcyB0aGUgbWFudWFsIHdpdGhvdXQgY29yZWR1bXBpbmcuCgoJKiBNYWtlZmlsZS5kaXN0OiB0ZWxsIFRlWCB3aGVyZSB0byBmaW5kIHRleGluZm8uCgpNb24gTWF5IDIwIDEyOjE1OjA0IDE5OTEgIFJvbGFuZCBILiBQZXNjaCAgKHBlc2NoIGF0IGZvd2FudG9uLmN5Z251cy5jb20pCgoJKiBNYWtlZmlsZS5kaXN0LCBkb2MvZ2RiLnRleGluZm86IHJlc3BlY3RpdmVseSBjcmVhdGUsIGFuZCB1c2UsCgl0aGUgbmV3IHRhcmdldCAicmRsLWFwcHMudGV4aW5mbyIgd2hpY2ggY2FwdHVyZXMgdGhlIE1ha2VmaWxlCgl2YXJpYWJsZSB0aGF0IHJlY29yZHMgd2hlcmUgdG8gZmluZCB0aGUgUmVhZGxpbmUgbGlicmFyaWVzLgoKU3VuIE1heSAxOSAwNTozNjo1OSAxOTkxICBKb2huIEdpbG1vcmUgIChnbnUgYXQgY3lnaW50LmN5Z251cy5jb20pCgoJKiB0YWhvZS1waW5zbi5jOiAgI2luY2x1ZGUgInRhaG9lLW9wY29kZS5oIiwgbm90ICJvcGNvZGUuaCIuCgkqIHRtLXRhaG9lLmggKEZJWF9DQUxMX0RVTU1ZKTogIElnbm9yZSBtb3JlIHBhcmFtZXRlcnMuCgkqIGRlZnMuaCAoY29uc3QsIHZvbGF0aWxlKTogIE9ubHkgZGVmaW5lIGlmIG5vdCBhbHJlYWR5IGRlZmluZWQuCgkqIE1ha2VmaWxlLmRpc3QgKGdkYi50YXIuWik6ICBDcmVhdGUgZG9jIHN1YmRpciB3L291dCBDVlMvUkNTIGNydWQuCgoJKiBSRUFETUU6ICBVcGRhdGUgZm9yIHJlbGVhc2UgMy45NS4KCSogY29uZmlnLmdkYjogIERvbid0IGNyZWF0ZSByZWFkbGluZSBkaXIgaW4gc3ViZGlyIGJ1aWxkcy4KCSogbWFpbi5jOiAgSW5jbHVkZSB3aXRoICIuLi4iIGZvcm0gZm9yIG5vbi1zeXN0ZW0gaW5jbHVkZSBmaWxlcywKCXNvICJnY2MgLU1NIiBmb3IgIm1ha2UgZGVwZW5kIiB3b3Jrcy4KCUluY2x1ZGUgcmVhZGxpbmUgZmlsZXMgd2l0aCAiLi4uaCIgcmF0aGVyIHRoYW4gPHJlYWRsaW5lLy4uLmg+LgoJKiBtaXBzcmVhZC5jOiAgSW5jbHVkZSAiZWNvZmYuaCIgcmF0aGVyIHRoYW4gImludGVsLWNvZmYuaCIuCgoJKiBjb2ZmcmVhZC5jOiAgVW5kbyBtaW5vciBkYW1hZ2UgZG9uZSBieSBSaWNoIFBpeGxleS4gIFVzZQoJZGlmZmVyZW50IGludGVybmFsIGFuZCBleHRlcm5hbCByZXByZXNlbnRhdGlvbnMgb2YgQ09GRgoJZGF0YSBzdHJ1Y3R1cmVzLiAgVXNlIG5ldyBCRkQgcm91dGluZXMgZm9yIHN3YXBwaW5nIHRoZW0gaW4gYW5kCglvdXQuCgkqIHN5bWZpbGUuYyAoZnJlZV9uYW1lZF9zeW10YWJzKTogIEF2b2lkIGZyZWVpbmcgZmlsZSBuYW1lcyB0aGF0CglhcmUgbnVsbCBvciBlbXB0eS4gIE9sZCBpOTYwIHRvb2xzIHNlZW0gdG8gcHJvZHVjZSBmaWxlcyB0aGF0CgljbGFpbSB0byBoYXZlIGVtcHR5IG5hbWVzLCBjYXVzaW5nIGVhY2ggc3VjY2Vzc2l2ZSBmaWxlIHJlYWQKCXRvIGJsb3cgYXdheSB0aGUgcHJldmlvdXMgb25lLgoJKiBzcGFyYy14ZGVwLmMgKGRlZmVycmVkX3N0b3Jlcyk6ICBSZXBhaXIgbWlub3IgZGFtYWdlIGJ5IFJpY2guCglNb3ZlIGRlZmVycmVkX3N0b3JlcyB0byB0b3Agb2YgZmlsZSwgYnV0IGRvbid0IHNlcGFyYXRlIGl0cwoJI2RlZmluZSdzIGZyb20gaXRzIHZhcmlhYmxlLiAgQWRkIGNvbW1lbnRhcnkuCgkqIE1ha2VmaWxlLmRpc3Q6ICBGaXggUmljaCBkYW1hZ2U7IHVuZG8gImNvbmZpZ3VyZSIgY2hhbmdlcyBpbgoJZmF2b3Igb2Yga2VlcGluZyB0aGUgKHdvcmtpbmcpIGNvbmZpZy5nZGIuICBNb3ZlIHJlYWRsaW5lCglsaWJyYXJ5IHVwIGEgbm90Y2guCgpGcmkgTWF5IDE3IDEyOjQ5OjU2IDE5OTEgIFBlciBCb3RobmVyICAodmlhIGdudSBhdCBjeWdpbnQuY3lnbnVzLmNvbSkKCgkqIGRieHJlYWQuYyAocmVhZF9zdHJ1Y3RfdHlwZSk6ICBUcnkgdG8gaGFuZGxlIGcrKyB2ZXJzaW9uIDEgTUkKCWRlYnVnIGluZm8uCgkqIGluZnB0cmFjZS5jIChmZXRjaF9yZWdpc3RlcnMpOiAgbm8gcmVzdWx0LCBzaW5jZSBub3cgdm9pZC4KCSogdGNvbmZpZy9uZXdzOiAgdGFyZ2V0IGRlcGVuZHMgb24gbTY4ay10ZGVwIHRvby4KCkZyaSBNYXkgMTcgMTQ6NDA6MTQgMTk5MSAgUm9sYW5kIEguIFBlc2NoICAocGVzY2ggYXQgZm93YW50b24uY3lnbnVzLmNvbSkKCgkqIE1ha2VmaWxlLmRpc3Q6IGFkZGVkIHJlYWRsaW5lL2luYy0qLnRleGluZm8gdG8gZGVwZW5kZW5jaWVzIGZvcgoJZ2RiLmR2aSB0YXJnZXQKCgkqIHJlYWRsaW5lL2luYy1oaXN0b3J5LnRleGluZm8sIHJlYWRsaW5lL2luYy1yZWFkbGluZS50ZXhpbmZvOgoJYXBwbGllZCB2YXJpb3VzIHNtYWxsIGZpeGVzIGR1ZSB0byBvciBpbnNwaXJlZCBieSBSTVMgY29tbWVudHMKCgkqIGRvYy9nZGIudGV4aW5mbzogZmluaXNoZWQgdXNpbmcgYWxsIFJNUyBjb21tZW50cywgc2F2ZSB0aG9zZSBmb3IKCWFwcGVuZGljZXMgb24gcmVhZGxpbmUgYW5kIGNtZCBoaXN0b3J5ICh3aGljaCBhcmUgaW4gb3RoZXIgc291cmNlCglmaWxlcykgCgpUaHUgTWF5IDE2IDE4OjA2OjA1IDE5OTEgIFJvbGFuZCBILiBQZXNjaCAgKHBlc2NoIGF0IGZvd2FudG9uLmN5Z251cy5jb20pCgoJKiBkb2MvZ2RiLnRleGluZm86ICgxKSBVcGRhdGVkIHcvcmVmIHRvIFJNUyBjb21tZW50cyB0aHJvdWdoCgljaGFwdGVyIDk7ICgyKSBkb2N1bWVudGVkICdicmVhaycgY29tbWFuZCdzIG1lbnUgbW9kZSBmb3IKCW92ZXJsb2FkZWQgbmFtZXMsIGluIHJlc3BvbnNlIHRvIGhncyBwcm9ibGVtIHJlcG9ydCBDKysgcC0zMQoKV2VkIE1heSAxNSAxMTowMjo0OCAxOTkxICBSb2xhbmQgSC4gUGVzY2ggIChwZXNjaCBhdCBmb3dhbnRvbi5jeWdudXMuY29tKQoKCSogZG9jL2dkYi50ZXhpbmZvOiAoMSkgYmV0dGVyIGludHJvZHVjdG9yeSBleGFtcGxlOyAoMikgbW9yZQoJY29uc2lzdGVudCB1c2Ugb2YgQGNvZGUsIEBzYW1wLCBAZmlsZSwgQGtiZCB0aHJvdWdob3V0OyBzbWFsbAoJY2xlYW51cHMgdG8gZmlyc3QgdGhyZWUgbm9kZXM7ICgzKSBuZXcgIkNvbnRyaWJ1dG9ycyIgbm9kZTsKCSg0KSBBcHBlbmRpeCwgUmVuYW1lZCBDb21tYW5kczsgKDUpIGRpdmVydCBzcGVjaWFsaXplZCBzdGFydHVwCglpbnN0cnVjdGlvbnMgdG8gIlRhcmdldHMiIGNoYXB0ZXIgZm9yIGdlbmVyaWMgbWFudWFscywgd2hpbGUKCWxlYXZpbmcgdGhlbSB1cCBmcm9udCBmb3IgbWFudWFscyBzcGVjaWZpYyB0byBzcGVjaWFsaXplZAoJZW52aXJvbm1lbnRzOyAoNikgYXBwbHkgZml4ZXMgZnJvbSBSTVMgY29tbWVudHMgdGhyb3VnaCBjaGFwdGVyIDQuCgoJKiBwcmV0ZXgubTQ6IG1vZGlmeSBleHBsYW5hdG9yeSB0ZXh0IHNsaWdodGx5IChhbmQgcmVkZWZpbmUKCSJyZWdleHAiKSB0byBrZWVwIEdOVSBtNCBmcm9tIGNvbXBsYWluaW5nLiAgKEl0IHN0aWxsIGNyYXNoZXMKCWxhdGVyLCBidXQgb25lIHN0ZXAgYXQgYSB0aW1lLi4uKQoKV2VkIE1heSAxNSAxMDozMjoxMiAxOTkxICBKb2huIEdpbG1vcmUgIChnbnUgYXQgY3lnaW50LmN5Z251cy5jb20pCgoJKiByZWFkbGluZS9yZWFkbGluZS5jICh1cGRhdGVfbGluZSk6ICBBdm9pZCBkZXJlZmVyZW5jaW5nIGEgcG9pbnRlcgoJYmVmb3JlIGNvbXBhcmluZyBpdCB0byBpdHMgYm91bmRzLiAgU2FiZXIgY2F1Z2h0IHRoaXMuCgkoaW5pdF90ZXJtaW5hbF9pbyk6ICBEb24ndCBzZXQgQkMgZnJvbSB0aGUgInBjPSIgdGVybWNhcCB2YXJpYWJsZSwKCWFuZCBvbmx5IHNldCBQQyBpZiB0Z2V0c3RyIHJldHVybmVkIG5vbi1udWxsLiAgU2FiZXIgY2F1Z2h0IHRoaXMuCgpUdWUgTWF5IDE0IDE2OjI5OjUzIFBEVCAxOTkxICBSb2xhbmQgUGVzY2ggKHBlc2NoIGF0IGN5Z2ludC5jeWdudXMuY29tKQoKCSogTWFrZWZpbGUuZGlzdDogcHV0IGdkYi5kdmkgc3R1ZmYgKHVwZGF0ZWQgdG8gdXNlIE00IHByZXByb2Nlc3NvcgoJc3R1ZmYgZm9yIGNvbmZpZyBtYW51YWwpIGhlcmUgd2hlcmUgaXQgY291bnRzOyB1cGRhdGVkCgl0byB1c2UgbmV3IHN1YmRpciBzdHJ1Y3R1cmUgKGdkYi9kb2MvKS4KCgkqIE1ha2VmaWxlOiBnZW5lcmF0ZWQgZnJvbSBhYm92ZSB2aWEgCgkJICAgIGNvbmZpZy5nZGIgbm9uZSAKCWJlZm9yZSBjaGVja2luCgoJKiBnZGJpbnQudGV4aW5mbzogYWRkZWQgaW5zdHJ1Y3Rpb25zIG9uIGdlbmVyYXRpbmcgZ2RiLmluZm8qIGZpbGVzCglsb2NhbGx5IGZvciByZWxlYXNlLiAgVGhlc2UgYXJlIG9yZGluYXJ5IGluZm8KCWZpbGVzLCBmb3JtYXR0ZWQgZnJvbSBnZGIudGV4aW5mbyAodmlhIGdkYi1hbGwudGV4aW5mbywgc2VlCglNYWtlZmlsZSktLS1idXQgZHVlIHRvIHVzZSBvZiB0ZXhpbmZvIDIsIGNhbid0IGNvdW50IG9uIG1ha2VpbmZvCgl0byBnZW5lcmF0ZSB0aGVzZSwgc28gd2UgZGlzdHJpYnV0ZSB0aGVtIGFscmVhZHkgZm9ybWF0dGVkLgoKCSogZ2RiLnRleGluZm86IGluY2x1ZGVkIGZ1bGwgSW5mbyBub2RlIGFuZCBtZW51IGNydWQgKGFzIGdlbmVyYXRlZAoJYnkgQy11IE0teCB0ZXhpbmZvLW1hc3Rlci1tZW51IHVzaW5nIHRoZSB0ZXhpbmZvLTIgZWxpc3AgY29kZSkuCgoJKiBNYWtlZmlsZTogdXBkYXRlZCAiZ2RiLmR2aSIgdGFyZ2V0IHRvIHVzZSBNNCBwcmVwcm9jZXNzb3I7CglwdXQgaW4gY29tbWVudHMtZm9yLWZ1dHVyZSBnZGIuaW5mbyB0YXJnZXQgKG9uZSBkYXkgbWFrZWluZm8gd2lsbAoJd29yayBhZ2FpbikuCgpUdWUgTWF5IDE0IDEzOjUxOjM2IFBEVCAxOTkxICBSb2xhbmQgUGVzY2ggKHBlc2NoIGF0IGN5Z2ludC5jeWdudXMuY29tKQoKCSogZ2RiLnRleGluZm86IFVwZGF0ZWQgdG8gaW5jbHVkZSBuZXcgb3Igb2xkIHVuZG9jdW1lbnRlZAoJY29tbWFuZHMsIGF0IGxlYXN0IHRoZSBmb2xsb3dpbmcgKHBlcmhhcHMgc29tZSBvdGhlcnMgSSBmb3Jnb3QgdG8KCXJlY29yZCk6IGluZm8gZiwgaW5mbyBmbG9hdCwgaW5mbyBwYXRoLCBpbmZvIHByb2dyYW0sIGluZm8gcywgaW5mbwoJc2V0LCBpbmZvIHNvdXJjZSwgaW5mbyB0ZXJtaW5hbCwgaW5mbyB0eXBlcywgaW5mbyB1c2VyLCBzZXQvc2hvdwoJcHJpbnQgb2JqZWN0LiAgCglBbHNvIGNvdmVyZWQgYWxsIHJlY2VudCBHREIgY29tbWFuZCByZW5hbWVzIGZvciB2NC4KCk1vbiBNYXkgMTMgMTQ6NTc6NDYgMTk5MSAgSm9obiBHaWxtb3JlICAoZ251IGF0IGN5Z2ludC5jeWdudXMuY29tKQoKCSogbWlwc3JlYWQuYzogIFJhdGhlciB0aGFuIGtlZXBpbmcgY291bnQgb2YgaG93IG1hbnkgc3ltdGFicwoJYW5kIHBzeW10YWJzIHdlIGhhdmUsIGZvciBzb3J0aW5nIHB1cnBvc2VzLCBjb3VudCB0aGVtIHdoZW4KCXdlIG5lZWQgdG8gc29ydC4gIFRoaXMgZml4ZXMgYnVnIGluIHJlcmVhZGluZyBvZiBzeW1ib2wgdGFibGVzLgoKRnJpIE1heSAxMCAxNTo0MzozMyBQRFQgMTk5MSAgUm9sYW5kIFBlc2NoIChwZXNjaCBhdCBjeWdpbnQuY3lnbnVzLmNvbSkKCgkqIGluZmNtZC5jOiByZW5hbWVkICJpbmZvIHBhdGgiIHRvICJzaG93IHBhdGhzIgogICAgICAgICogZ2RicmMudGV4OiBkb2N1bWVudGVkIGFib3ZlLgoKV2VkIE1heSAgOCAwNDo1MToxMSAxOTkxICBKb2huIEdpbG1vcmUgIChnbnUgYXQgY3lnaW50LmN5Z251cy5jb20pCgoJKiByZW1vdGUuYzogIEZpeCBjb21tZW50cy4KCSogdXRpbHMuYyAoZXJyb3IpOiAgRm9yY2Ugb3V0IGFueSBwZW5kaW5nIHdyYXAgb3V0cHV0LgoKU2F0IE1heSAgNCAxMToxMTowNyAxOTkxICBKb2huIEdpbG1vcmUgIChnbnUgYXQgY3lnaW50LmN5Z251cy5jb20pCgoJKiBNYWtlZmlsZS5kaXN0OiAgUm9sbCBWRVJTSU9OIHRvIDMuOTUuCglGaXggdXAgInNhYmVyX2dkYiIgdG8gd29yayBhZ2Fpbi4KCSogc2FiZXIuc3VwcHJlc3M6ICBVcGRhdGUuCgoJKiBjb2ZmcmVhZC5jLCBleGVjLmMsIGluZnB0cmFjZS5jLCBpbmZ0YXJnLmMsIHJlbW90ZS5jLCBzb2xpYi5jLAoJc3ltdGFiLmgsIHRhcmdldC5jLCB0YXJnZXQuaDogIExpbnQuCgkqIGNvcmUuYzogIHNldHVwIGFuZCBzZWxlY3QgZnJhbWUgYWZ0ZXIgcmVhZGluZyBzaGFyZWQgbGlicywKCWVsc2UgcmVhZGluZyBzaGFyZWQgbGlicyB3aWxsIGNsb2JiZXIgdGhlbS4gIExpbnQuCgkqIHV0aWxzLmMgKGVycm9yKTogIEZvcmNlIG91dCBhbnkgYnVmZmVyZWQgd3JhcCB0ZXh0LgoKRnJpIE1heSAgMyAyMjowMTo1NiAxOTkxICBKb2huIEdpbG1vcmUgIChnbnUgYXQgY3lnaW50LmN5Z251cy5jb20pCgoJKiByZW1vdGUuYzogIFJlbW92ZSBkZWNscyBvZiBtZW1vcnlfaW5zZXJ0X2JyZWFrcG9pbnQKCWFuZCBtZW1vcnlfcmVtb3ZlX2JyZWFrcG9pbnQsIG5vIGxvbmdlciB1c2VkLiAgKFN1Z2dlc3Rpb24gb2YKCUphbiBOb3JkZW4pLgoKCSogTWFrZWZpbGUuZGlzdDogIHVzZSAke3N1YmRpcn0gaW4gcGF0aHMgb2YgQkZEIGFuZCBMSUJJQkVSVFksCgl0byBtYWtlIGl0IGVhc2llciB0byBpbnRlcmZhY2UgdG8gImNvbmZpZ3VyZSInZCBsaWJyYXJpZXMuCgpGcmkgTWF5ICAzIDEzOjEwOjAxIFBEVCAxOTkxICBSb2xhbmQgUGVzY2ggKHBlc2NoIGF0IGZvd2FudG9uLmN5Z251cy5jb20pCgogICAgICAgICogdmFscHJpbnQuYzogIGludHJvZHVjZSAic2V0IHAiLCAic2V0IHByIiwgInNob3cgcCIgYW5kICJzaG93IHByIiBhcwoJYWxpYXNlcyBmb3Igc2V0L3Nob3cgcHJpbnQuCgpUaHUgTWF5ICAyIDExOjIyOjAyIDE5OTEgIEppbSBLaW5nZG9uICAoa2luZ2RvbiBhdCBjeWdpbnQuY3lnbnVzLmNvbSkKCgkqIGNvZmZyZWFkLmMgKGNvZmZfc3ltX2ZucykgW1RERVNDXTogTWFrZSB0aGUgdHlwZSBiZSBtODhrYmNzLgoKCSogbTg4ay10ZGVwLmMgKElFRUVfaXNOQU4pOiBOZXcgZnVuY3Rpb24uCgoJKiBpbmZydW4uYywgbTg4ay10ZGVwLmMsIG04OGsteGRlcC5jOiBDaGFuZ2UKCWluaXRpYWxpemVfe3RkZXNjLGRjb250ZXh0fSB0byBpbml0X3t0ZGVzYyxkY29udGV4dH0uCgoJKiBpbmZydW4uYyBbVERFU0NdOiBBZGQgYSBidW5jaCBvZiBjcnVkLgoKCSogeG0tODhrLmggW19fR05VQ19fXTogRG9uJ3QgZGVmaW5lIG1lbXNldC4KCgkqIG04OGsteGRlcC5jOiAjaWYgMCBvdXQgcHVzaF9icmVha3BvaW50LgoKCSogdG0tODhrLmg6IERlZmluZSBHRVRfU0FWRURfUkVHSVNURVIuCgoJKiB0bS04OGsuaDogRGVmaW5lIERHVVguCgoJKiBtODhrLW9wY29kZS5oIChVRVhULCBTRVhULCBNQUtFKTogUHV0IHBhcmVudGhlc2VzIGFyb3VuZCBhcmd1bWVudHMuCgoJKiBtODhrLXBpbnNuLmMgKHNwcmludF9hZGRyZXNzKTogRGVjbGFyZSBhdCB0b3Agb2YgZmlsZS4KCgkqIG04OGsteGRlcC5jOiAjaWYgMCBvdXQgY29yZV9maWxlX2NvbW1hbmQuCgoJKiB2YWx1ZXMuYyAoe3VucGFja18sdmFsdWVfYXNffXBvaW50ZXIpOiBKdXN0IGNhbGwKCXt1bnBhY2tfLHZhbHVlX2FzX31sb25nIChmb3Igbm93IGFueXdheSkuCgoJKiBtODhrLXRkZXAuYyAoZ2V0X3NhdmVkX3JlZ2lzdGVyKTogTWFrZSBnZXRfcmVnIGEgZGNfd29yZF90ICgqKSgpLgoJKHBzcl9yZWdpc3Rlcik6IENoYW5nZSByZXR1cm4gdHlwZSB0byBkY193b3JkX3QuCgoJKiBtODhrLXRkZXAuYyAodGRlc2NfcmVhZF9mdW5jdGlvbik6IENvbW1lbnQgb3V0IGNhbGwgdG8gcHRyYWNlLgoKCSogbTg4ay10ZGVwLmMgKGdldF9zYXZlZF9yZWdpc3Rlcik6IEFkZCBsdmFscCBwYXJhbWV0ZXIuCgoJKiBnZGJjb3JlLmggKHdyaXRlX21lbW9yeSk6IERvbid0IHByb3RvdHlwZSBpdC4KCgkqIHRtLTg4ay5oLCBtODhrLXRkZXAuYzogTWFrZSBzdGFja19lcnJvciwgc3RhY2tfam1wIGdsb2JhbC4KCW04OGsteGRlcC5jOiBEb24ndCBtZW50aW9uIHN0YWNrX2Vycm9yLgoKCSoge3gsdH1jb25maWcvbTg4ayAoe1gsVH1ERVBGSUxFUyk6IEFkZCBtaXNzaW5nIGZpbGVzLgoKCSogbXRyYWNlLmM6IERvbid0IHR5cGVkZWYgdGhpbmdzIGxpa2Ugc2l6ZV90LCBqdXN0ICNkZWZpbmUgdGhlbS4KCgkqIGNvZmZyZWFkLmMgW1RERVNDXTogI2lmIDAgb3V0IHJlZmVyZW5jZXMgdG8gY29mZnN5bi4KCgkqIHN5bXRhYi5oIChzdHJ1Y3Qgc3ltdGFiKTogSW5jbHVkZSBFWFRSQV9TWU1UQUJfSU5GTy4KCXRtLTg4ay5oOiBEZWZpbmUgRVhUUkFfU1lNVEFCX0lORk8uCgoJKiBjb2ZmcmVhZC5jIFtUREVTQ106IEluY2x1ZGUgInRkZXNjLmgiIGFuZCBtYWtlIHRkZXNjX2hhbmRsZQoJZGNfZGNvbnRleHRfdCBub3QgaW50LgoKCSogY29mZnJlYWQuYyBbVERFU0NdOiBVc2Ugc3lzdGVtIGluY2x1ZGUgZmlsZXMgbm90IDxpbnRlbC1jb2ZmLmg+LgoKCSogY29mZnJlYWQuYyBbVERFU0NdOiBNb3ZlIHNldHRpbmcgb2YgZGVidWdfaW5mbyBmcm9tCgljb2ZmX3N5bWZpbGVfcmVhZCB0byBmaW5kX2xpbmVub3MgYW5kIG1ha2UgaXQgd29yayB3aXRoIEJGRC4KCgkqIGNwbHVzLWRlbS5jIFtfX1NURENfX106IE1ha2UgeHttLHJlfWFsbG9jIHJldHVybiB2b2lkKi4KCgkqIHNpZ25hbWUuYzogQ2FzdCBjb25zdCBjaGFyKiB0byBjaGFyKiB3aGVuIGFzc2lnbmluZyB0byBzeXNfc2lnbGlzdC4KCgkqIHV0aWxzLmMgKHN0cnNhdmUpOiBNYWtlIGFyZyBjb25zdCBjaGFyKiBub3QgY2hhciouCgoJKiBpbmZydW4uYyAod2FpdF9mb3JfaW5mZXJpb3IpIFtTSElGVF9JTlNOX1JFR1NdOiBVc2UKCWJwc3RhdF9leHBsYWluc19zaWduYWwgKHN0b3BfYnBzdGF0KSBub3Qgc3RvcF9icmVha3BvaW50LgoKCSogdG0tODhrLmggKFNUQVJUX0lORkVSSU9SX0hPT0spOiBNYWtlIHRkZXNjX2hhbmRsZSBhIGRjX2hhbmRsZV90LgoKCSogdG0tODhrLmggKEVYVFJBQ1RfUkVUVVJOX1ZBTFVFKTogVXNlIGNoYXIgKiBub3Qgdm9pZCAqLgoKCSogZmluZHZhci5jIChyZWFkX3Zhcl92YWx1ZSwgY2FzZSBMT0NfQ09OU1RfQllURVMpOiBQdXQgdGhlIGFkZHJlc3MKCWluIGEgY2hhciAqLCBub3QgYSBDT1JFX0FERFIuICBVc2UgU1lNQk9MX1ZBTFVFX0JZVEVTLgoKCSogdG0tODhrLmggKElOSVRfRVhUUkFfRlJBTUVfSU5GTyk6IFVzZSBmY2kgbm90IHByZXYgKGZjaSBpcwoJcHJldiBleGNlcHQgZnJvbSBjcmVhdGVfbmV3X2ZyYW1lKS4gIE1ha2UgbmV4dF9mcmFtZSBhCglsb2NhbCB2YXJpYWJsZS4KCURlY2xhcmUgZ2V0X3ByZXZfY29udGV4dC4KCXt4LHR9bS04OGsuaDogRW5jbG9zZSBVU0cgYW5kIEJDUyBkZWZpbmVzIGluICNpZiAhZGVmaW5lZC4KCW04OGste29wY29kZS5oLHBpbnNuLmMseGRlcC5jLHRkZXAuY306IE5ldyBmaWxlcyAoc2FtZSBjb250ZW50cyBhcwoJYmVmb3JlOyB0aGV5IGhhZCBqdXN0IGJlZW4gbGVmdCBvdXQgb2YgdGhlIGRpc3RyaWJ1dGlvbiBmb3IgYSBsb25nCgl0aW1lKS4KClRodSBNYXkgIDIgMTc6NTM6NTYgMTk5MSAgSm9obiBHaWxtb3JlICAoZ251IGF0IGN5Z2ludC5jeWdudXMuY29tKQoKCU1pcHMgYnJpbmd1cCBhbmQgZ2VuZXJhbCBjbGVhbnVwCgoJKiBjcGx1cy1kZW0uYzogIE1vdmUgQ1BMVVNfTUFSS0VSIGRlZmluZSB0byBhZnRlciBkZWZzLmguCgkqIGluZnB0cmFjZS5jIChQVF9XUklURV9ELCBQVF9SRUFEX0QpOiAgVXNlIGNvcnJlY3QgdmFsdWVzLgoJKFRoaXMgc3RpbGwgZG9lc24ndCBzZWVtIHRvIG1ha2UgTUlQUyBia3B0cyB3b3JrLikKCSogbWlwc3JlYWQuYzogIFJlbW92ZSBkdXAgIlJlYWRpbmcgc3ltYm9sIGRhdGEuLi4iIG1zZy4KCShzeW1ib2xfZmlsZV9jb21tYW5kLCBhZGRfZmlsZV9jb21tYW5kKTogIFJlbW92ZSwgb2Jzb2wuCgkqIHByaW50Y21kLmMgKHB0eXBlX2NvbW1hbmQpOiAgU2F5ICJhbiBlbnVtIiByYXRoZXIgdGhhbiAiYSBlbnVtIi4KCVdyYXAgb3V0cHV0IGFwcHJvcHJpYXRlbHkuCgkqIHN0YWNrLmMgKGxvY2Fsc19pbmZvLCBjYXRjaF9pbmZvLCBhcmdzX2luZm8pOiAgQ2hlY2sKCXNlbGVjdGVkX2ZyYW1lIHJhdGhlciB0aGFuIHRhcmdldF9oYXNfc3RhY2sgb3IgY29yZWR1bXBpbmcuCgkqIHZhbHByaW50LmMgKHR5cGVfcHJpbnRfdmFyc3BlY19zdWZmaXgpOiAgV3JhcCAicHR5cGUiIG91dHB1dCBvZgoJZW51bXMgYXBwcm9wcmlhdGVseS4KCldlZCBNYXkgIDEgMTQ6MTA6MjIgMTk5MSAgSmltIEtpbmdkb24gIChraW5nZG9uIGF0IGN5Z2ludC5jeWdudXMuY29tKQoKCSogc2lnbmFtZS5jOiBJbmNsdWRlIGRlZnMuaCBhbmQgcGFyYW0uaC4KCgkqIGNwbHVzLWRlbS5jOiBJbmNsdWRlIGRlZnMuaCBhbmQgcGFyYW0uaC4KCU1ha2VmaWxlLmRpc3Q6IERvbid0IGhhY2sgaW4gdGhlICJwYXJhbS5oIi4KCXBhcmFtLmg6IERvbid0IGluY2x1ZGUgZGVmcy5oLgoKCSogZXhwcmVhZC55OiBVc2UgYSB1bmlvbiB0byBkZWFsIHdpdGggdGhlIGZhY3QgdGhhdCB0eXBlX3N0YWNrCgljYW4gaGF2ZSBib3RoIGludHMgYW5kIGVudW0gdHlwZV9waWVjZXMgaW4gaXQuCgkoe3B1c2gscG9wfV90eXBlX2ludCk6IE5ldyBmdW5jdGlvbnMuCgpUdWUgQXByIDMwIDEzOjE4OjU4IDE5OTEgIEppbSBLaW5nZG9uICAoa2luZ2RvbiBhdCBjeWdpbnQuY3lnbnVzLmNvbSkKCgkqIGNwbHVzLWRlbS5jIChjcGx1c19tYW5nbGVfb3BuYW1lKTogRG9uJ3QgY2FsbCBlcnJvci4KCXZhbHVlcy5jIChjaGVja19zdHViX21ldGhvZCk6IENhbGwgZXJyb3IgaWYgTlVMTCByZXR1cm4gZnJvbQoJY3BsdXNfbWFuZ2xlX29wbmFtZS4KCgkqIGJsb2NrZnJhbWUuYywgYnJlYWtwb2ludC5jLCBjb3JlLmMsIGNvbW1hbmQuYywgZmluZHZhci5jLAoJZXZhbC5jLCBleHBwcmludC5jLCBpbmZjbWQuYywgaW5mcnVuLmMsIG1haW4uYywgcHJpbnRjbWQuYywKCXJlbW90ZS5jLCBzb3VyY2UuYywgc3RhY2suYywgZGJ4cmVhZC5jLCBjb2ZmcmVhZC5jLCBzeW1maWxlLmgsCglzeW1maWxlLmMsIHV0aWxzLmMsIHZhbGFyaXRoLmMsIHZhbHVlcy5jLCB2YWxvcHMuYywgdG0tNjhrLmgsCgl0YXJnZXQuYywgaW5mdGFyZy5jLCBpZWVlLWZsb2F0LmMsIGVudmlyb24uYywgZGVmcy5oLAoJY29tbWFuZC5oLCBpbmZlcmlvci5oLCBnZGJjb3JlLmgsIHN5bXRhYi5oLCBleHByZXNzaW9uLmgsCglzeW10YWIuYywgY3BsdXMtZGVtLmMsIHZhbHVlLmgsIGV4cHJlYWQueSwgdmFscHJpbnQuYywKCWNvcHlpbmcuYXdrLCBzb2xpYi5jLCBpbmZsb3cuYywgc3ltbWlzYy5jCgk6IExpbnQuICBVc2UgcmVhZF9tZW1vcnkgbm90IHJlYWRfbWVtb3J5X2ludGVnZXIgb24gQ09SRV9BRERSJ3MuCglVc2Uge3ZhbHVlX2FzLHVucGFja31fcG9pbnRlciAoYWRkZWQgdG8gdmFsdWVzLmMpCglub3Qge3ZhbHVlX2FzLHVucGFja31fbG9uZyBvbiBDT1JFX0FERFIncy4KCVVzZSBsb25nZXN0X3RvX2ludCAoYWRkZWQgdG8gZGVmcy5oKSBpbnN0ZWFkIG9mIGNhc3QgdG8gaW50LgoJUmVtb3ZlIGZyb21fdHR5IGFyZyB0byBtb2RfcGF0aC4KCVB1dCBzeW1maWxlX2JmZCBpbiB7Y29mZixkYnh9cmVhZC5jIG5vdCBzeW1maWxlLmguCglVc2UgT1BfTlVMTCBpbnN0ZWFkIG9mIDAgd2hlcmUgZHVtbXkgZW51bSBleHBfb3Bjb2RlIG5lZWRlZC4KCgkqIHRtLXNwYXJjLmg6IFJlbW92ZSBHRVRfUldJTkRPV19SRUcuCgkoRlJBTUVfQ0hBSU4pOiBDYWxsIHNwYXJjX2ZyYW1lX2NoYWluLgoJc3BhcmMtdGRlcC5jIChzcGFyY19mcmFtZV9jaGFpbik6IE5ldyBmdW5jdGlvbi4KCXRtLXNwYXJjLmggKEVYVFJBQ1RfU1RSVUNUX1ZBTFVFX0FERFJFU1MpOiBjYWxsCglzcGFyY19leHRyYWN0X3N0cnVjdF92YWx1ZV9hZGRyZXNzIChhZGRlZCB0byBzcGFyYy10ZGVwLmMpLgoKCSogeG0tc3VuMzg2Lmg6IERvbid0IGRlZmluZSBTRVRfU1RBQ0tfTElNSVRfSFVHRS4KClR1ZSBBcHIgMzAgMTM6MTM6MzMgMTk5MSAgTWljaGFlbCBUaWVtYW5uICAodGllbWFubiBhdCBjeWdpbnQuY3lnbnVzLmNvbSkKCgkqIHZhbHByaW50LmMgKHR5cGVfcHJpbnRfYmFzZSk6IElmIHRoZSB0eXBlIGJlaW5nIHByaW50ZWQgaXMgYQoJc3RydWN0IGNvbnRhaW5pbmcgdW5kZWZpbmVkIHR5cGVzLCBwcmludCAiPHVuZGVmaW5lIHR5cGU+IgoJYXMgdGhlIHR5cGUgaW5zdGVhZCBvZiBjcmFzaGluZy4KCSogdmFsdWVzLmMgKHZhbHVlX2hlYWRvZik6IEdldCB0aGUgdnRhYmxlIHBvaW50ZXIgdGFraW5nCglUWVBFX1ZQVFJfQkFTRVRZUEUgaW50byBhY2NvdW50LgoJKiBzeW10YWIuYywgc3ltdGFiLmgsIGRieHJlYWQuYzogRml4IHZhcmlvdXMgd2hpdGVzcGFjZSBzcGxvdGNoZXMuCgpNb24gQXByIDI5IDEzOjIyOjUxIDE5OTEgIEppbSBLaW5nZG9uICAoa2luZ2RvbiBhdCBjeWdpbnQuY3lnbnVzLmNvbSkKCgkqIE1vdmUgQlJPS0VOX0xBUkdFX0FMTE9DQSBmcm9tIHRtLXN1bjM4Ni5oIHRvIHhtLXN1bjM4Ni5oLgoKCSogc3VuMzg2LXhkZXAuYyBbIUdEQl9UQVJHRVRfSVNfU1VOMzg2XTogSnVzdCBwcm92aWRlIGVtcHR5CglmdW5jdGlvbnMgd2hpY2ggZG9uJ3QgZG8gYW55dGhpbmcuCgl0bS1zdW4zODYuaDogRGVmaW5lIEdEQl9UQVJHRVRfSVNfU1VOMzg2LgoKCSogTWFrZWZpbGUuZGlzdDogQWRkIGNvbW1lbnQgYWJvdXQgdG0tc3VuM29zNC5oOiB0bS1zdW4zLmgsIGV0Yy4KCgkqIHN1bjMteGRlcC5jLCB0bS1zdW4zLmgsIHRtLTY4ay5oOiBDaGFuZ2UgVEFSR0VUX1NVTjMgdG8KCUdEQl9UQVJHRVRfSVNfU1VOMy4KCgkqIGluZnJ1bi5jOiBEb24ndCBpbmNsdWRlIHN5cy91c2VyLmggYW5kIGZyaWVuZHMgKHdyb25nIGZvcgoJY3Jvc3MtZGVidWdnaW5nIGFuZCBub3QgbmVjZXNzYXJ5IGFueW1vcmUgKHNlZSBJTl9TSUdUUkFNUCBpbgoJeG0tdmF4LmgpKS4KCVtTRVRfU1RBQ0tfTElNSVRfSFVHRV06IEluY2x1ZGUgPHN5cy97cmVzb3VyY2UsdGltZX0uaD4uCgl4bS10YWhvZS5oOiBEb24ndCBkZWZpbmUgX0RJUkVOVF8uCgoJKiB4bS10YWhvZS5oOiBSZW1vdmUgVVNFX09MRF9UVFkgKG5vdCBuZWVkZWQgbm93IHRoYXQgdGVybWluYWwuaAoJaW5jbHVkZXMgc2d0dHkuaCBiZWZvcmUgc3lzL2lvY3RsLmgpLgoKU3VuIEFwciAyOCAyMjowNDo0NyAxOTkxICBKaW0gS2luZ2RvbiAgKGtpbmdkb24gYXQgY3lnaW50LmN5Z251cy5jb20pCgoJKiBwYXJhbS1uby10bS5oOiBNYWtlIEJJVFNfQklHX0VORElBTiBkZWZpbmVkIHRvIDAvMSwgbm90IGRlZmluZWQKCW9yIG5vdCBkZWZpbmVkLiAgRG9uJ3QgZGVmaW5lIGl0IGJhc2VkIG9uIFRBUkdFVF9CWVRFX09SREVSIGlmCglpdCdzIGFscmVhZHkgZGVmaW5lZCAoaW4gdGhlIHRtLmggZmlsZSkuCgltaXBzLW9wY29kZS5oIChCSVRfRklFTERTXyopLAoJdmFsdWVzLmMgKG1vZGlmeV9maWVsZCwgdW5wYWNrX2ZpZWxkX2FzX2xvbmcpOgoJVXNlICNpZiBCSVRTX0JJR19FTkRJQU4gbm90ICNpZmRlZiBCSVRTX0JJR19FTkRJQU4uCgl7eCx0fW0tdGFob2UuaCwgdGFob2UtcGluc24uYywgdGFob2Utb3Bjb2RlLmg6IE5ldyBmaWxlcy4KCkZyaSBBcHIgMjYgMTI6MDI6MDYgMTk5MSAgSmltIEtpbmdkb24gIChraW5nZG9uIGF0IGN5Z2ludC5jeWdudXMuY29tKQoKCSogdG0tc3BhcmMuaDogQWRkIGNvbW1lbnRzIGFib3V0IGdjYyB2ZXJzaW9uIDIgYW5kIHN0cnVjdHVyZSBwYXNzaW5nLgoKCSogeGNvbmZpZy9pMzg2dnssMzJ9eywtZ306IEFkZCBYTV9DRkxBR1M9LURnZXRwYWdlc2l6ZSgpPTQwOTYuCglnbWFsbG9jLmM6ICNpZiAwIG91dCAhSEFWRV9HRVRQQUdFU0laRSBjb2RlLgoKCSogZXhwcmVhZC55IChhYnNfZGVjbCk6IEFjY2VwdCAnJicgYW5kICcmJyBhYnNfZGVjbC4KCgkqIHN5bXRhYi5jLCBzeW10YWIuaDogSGF2ZSBhIGJ1aWx0aW5fdHlwZV97LHVuc2lnbmVkX31sb25nX2xvbmcKCXJlZ2FyZGxlc3Mgb2YgTE9OR19MT05HLgoJZGVmcy5oIChUQVJHRVRfTE9OR19MT05HX0JJVCk6IE5ldyBtYWNyby4KCWV4cHJlYWQueSAodHlwZWJhc2UpOiBBZGQge3Vuc2lnbmVkLH0gbG9uZyBsb25nIHssaW50fS4KClRodSBBcHIgMjUgMTI6MzE6MjIgMTk5MSAgSmltIEtpbmdkb24gIChraW5nZG9uIGF0IGN5Z2ludC5jeWdudXMuY29tKQoKCSogdmFsb3BzLmMgKHR5cGVjbXApOiBJZiB0MiA9PSAwLCByZXR1cm4gMS4KCldlZCBBcHIgMjQgMDk6NDU6MTcgMTk5MSAgSmltIEtpbmdkb24gIChraW5nZG9uIGF0IGN5Z2ludC5jeWdudXMuY29tKQoJQ2hhbmdlcyBmcm9tIFRpZW1hbm46CgkqIGNwbHVzLWRlbS5jIChvcHRhYmxlKTogQWRkICJudyIsICJkbCIsICJjb21wb3VuZCIuCgkoY3BsdXNfbWFuZ2xlX29wbmFtZSk6IE5ldyBmdW5jdGlvbi4KCShkb190eXBlKTogQWRkIGNhc2UgJ1EnLgoJKiB2YWx1ZXMuYyAoY2hlY2tfc3R1Yl9tZXRob2QpOiBEbyBsb29rdXBfbWV0aG9kX3R5cGUgYW5kIHN0dWZmCglyYXRoZXIgdGhhbiBzbWFzaF90b19tZXRob2RfdHlwZS4KCXN5bXRhYi5jLCBzeW10YWIuaCAoYWxsb2NhdGVfc3R1Yl9tZXRob2QpOiBOZXcgZnVuY3Rpb24uCglkYnhyZWFkLmMgKHJlYWRfdHlwZSk6IElmIHdlIGdldCAiIyMiLCBkb24ndCBsb29rdXBfZnVuY3Rpb25fdHlwZQoJYW5kIHN0YXJ0IGNsb2JiZXJpbmcgaXQ7IGFsbG9jYXRlX3N0dWJfbWV0aG9kIGluc3RlYWQuCgkqIHByaW50Y21kLmMgKHhfY29tbWFuZCk6IERlcmVmZXJlbmNlIHJlZmVyZW5jZXMuCgkqIHZhbHByaW50LmMgKHR5cGVfcHJpbnRfdmFyc3BlY19wcmVmaXgsIGNhc2UgVFlQRV9DT0RFX01FVEhPRCk6CglEb24ndCBwcmludCAiICIgdHlwZV9wcmludF9iYXNlICguLi4pICI6OiIgaWYgIXBhc3NlZF9hX3B0ci4KCSogZGJ4cmVhZC5jIChyZWFkX3N0cnVjdF90eXBlKTogUHV0ICJvcCQiIGluc3RlYWQgb2YgIm9wZXJhdG9yIgoJaW4gdGhlIHN5bWJvbCB0YWJsZS4KCSogdmFsdWVzLmMgKGNoZWNrX3N0dWJfbWV0aG9kKTogRGVhbCB3aXRoIG9wZXJhdG9yIG5hbWVzLgoJKiB2YWxwcmludC5jIChjcGx1c192YWxfcHJpbnQpOiBDaGVjayBmb3IgZXJyb3IgaW4gYmFzZWNsYXNzX2FkZHIuCgkqIHZhbHVlcy5jOiBNb3ZlIGRlY2xhcmF0aW9uIG9mIGNwbHVzX2RlbWFuZ2xlIHRvIHRvcCBvZiBmaWxlLgoJKiB2YWx1ZXMuYyAoYmFzZWNsYXNzX2FkZHIpOiBJZiBjYW4ndCByZWFkIG1lbW9yeSwgc2V0ICpFUlJQCglyYXRoZXIgdGhhbiBjYWxsaW5nIGVycm9yKCkuCgkqIHZhbHVlLmg6IFJlbW92ZSByZWR1bmRhbnQgZGVjbGFyYXRpb24gb2YgdmFsdWVfc3RhdGljX2ZpZWxkLgoJKiB2YWx1ZXMuYyAodmFsdWVfc3RhdGljX2ZpZWxkKTogUmVjdXJzaXZlbHkgY2hlY2sgYWxsIGJhc2VjbGFzc2VzLgoJUmV0dXJuIE5VTEwgaWYgbm90IGZvdW5kLgoJKiB2YWx1ZXMuYywgdmFsdWUuaDogTmV3IGZ1bmN0aW9ucyB2YWx1ZV97aGVhZG9mLGZyb21fdnRhYmxlX2luZm99LgoJKiB2YWxwcmludC5jICh2YWxfcHJpbnQpOiBQcmludCBvdXQgZmlyc3QgZWxlbWVudCBvZiB2dGJsCglzcGVjaWFsbHkuCgkqIHZhbHByaW50LmM6IE1vdmUgcHJpbnQgY29udHJvbHMgdG8gdG9wIGFuZCBhZGQgb2JqZWN0cHJpbnQuCglBZGQgY29tbWFuZCAic2V0IHByaW50IG9iamVjdCBvbi9vZmYiLgoJKiB2YWxwcmludC5jICh2YWx1ZV9wcmludCwgaXNfdnRibF9tZW1iZXIpOiBQdXQgdGhpbmdzIGluIGxvY2FsCgl2YXJpYWJsZXMgcmF0aGVyIHRoYW4gY29udGludWFsbHkgZG9pbmcgVkFMVUVfVFlQRSAodmFsKSwgZXRjLgoJKiB2YWxvcHMuYyAodmFsdWVfc3RydWN0X2VsdF9mb3JfYWRkcmVzcyk6IENhbGwgY2hlY2tfc3R1Yl9tZXRob2QuCgkqIHZhbG9wcy5jICh2YWx1ZV9zdHJ1Y3RfZWx0KTogUmVtb3ZlIGZvdW5kLCBhcmcxX2FzX3B0ci4KCSogdmFsb3BzLmMgKHNlYXJjaF9zdHJ1Y3RfbWV0aG9kKTogR2l2ZSBlcnJvciBpZiBqID4gMCAmJiBhcmdzID09IDAuCgkqIHZhbG9wcy5jIChzZWFyY2hfc3RydWN0X2ZpZWxkKTogTmV3IGFyZ3VtZW50IGxvb2tpbmdfZm9yX2Jhc2VjbGFzcy4KCUdpdmUgZXJyb3IgaWYgdmFsdWVfc3RhdGljX2ZpZWxkIG9yIHZhbHVlX3ByaW1pdGl2ZV9maWVsZAoJcmV0dXJuIE5VTEwuCgl2YWxvcHMuYyAodmFyaW91cyk6IENhbGwgc2VhcmNoX3N0cnVjdF9maWVsZCB3aXRoIGV4dHJhIHBhcmFtZXRlci4KCSogc3ltdGFiLmMgKGRlY29kZV9saW5lXzEpOiBEZWFsIHdpdGggb3BlcmF0b3JzIHNwZWNpZmllZCBhcwoJIm9wZXJhdG9yIiA8b3B0aW9uYWwgd2hpdGVzcGFjZT4gPHN5bWJvbHMgZm9yIG9wZXJhdG9yPi4KCShvcGVyYXRvcl9jaGFycyk6IEhlbHAgZG8gaXQuCgkqIHN5bXRhYi5jIChsb29rdXBfc3RydWN0X2VsdF90eXBlKTogQ2FsbCBjaGVja19zdHViX3R5cGUuCglUYWtlIGFkZGl0aW9uYWwgYXJndW1lbnQgbm9lcnIuCglEb24ndCBkdW1wIGNvcmUgaWYgVFlQRV9GSUVMRF9OQU1FIGlzIE5VTEwuCglDaGVjayB0aGUgYmFzZWNsYXNzZXMgcmVjdXJzaXZlbHkuCgkqIHN5bWZpbGUuYyAoZmlsbF9pbl92cHRyX2ZpZWxkbm8pOiBEb24ndCBjYWxsIGNoZWNrX3N0dWJfdHlwZS4KCVJldHVybiB2b2lkIG5vdCBpbnQuIChhbHNvIGRlY2xhcmF0aW9ucyBpbiBzeW1maWxlLmggYW5kIHZhbHVlLmgpLgoJRGVhbCB3aXRoIG11bHRpcGxlIGluaGVyaXRhbmNlLgoJKiBwcmludGNtZC5jIChwcmludF9jb21tYW5kXzEpOiBBZGQgaWYgKG9iamVjdHByaW50KSBjb2RlLgoJKiBleHByZWFkLnkgKHZhcmlhYmxlKTogQWxsb3cgZm9yIGRlc3RydWN0b3Igd2l0aCBmb286On5uYW1lLgoJKiBldmFsLmMgKGV2YWx1YXRlX3N1YmV4cCwgY2FzZSBVTk9QX0xPR05PVCk6IElmIGZvbGxvd2luZyBvcGNvZGUKCWlzIE9QX1NDT1BFLCBnaXZlIGFuIGVycm9yLgoJKiBldmFsLmMgKGV2YWx1YXRlX3N1YmV4cCk6IFBhc3MgdGhpcmQgYXJnIHRvIGxvb2t1cF9zdHJ1Y3RfZWx0X3R5cGUuCgkqIGV2YWwuYyAoZXZhbHVhdGVfc3ViZXhwKSwgdmFsdWVzLmMgKHZhbHVlX3ZpcnR1YWxfZm5fZmllbGQpOgoJRG9uJ3QgYm90aGVyIHRvIGRvIGFueXRoaW5nIHdpdGgKCXJldHVybiB2YWx1ZSBmcm9tIGZpbGxfaW5fdnB0cl9maWVsZG5vLgoJKiBldmFsLmMgKGV2YWx1YXRlX3N1YmV4cCk6IElmIHZhbHVlX3N0YXRpY19maWVsZCByZXR1cm5zIE5VTEwsCglnaXZlIGFuIGVycm9yLgoJKiBkYnhyZWFkLmMgKHJlYWRfc3RydWN0X3R5cGUpOiBTZXQgZmNvbnRleHQgdG8gMCBmb3Igbm9ybWFsIG1lbWJlcgoJZnVuY3Rpb24uCgkqIGRieHJlYWQuYyAocmVhZF9zdHJ1Y3RfdHlwZSk6IEluaXRpYWxpemUgbmFtZSB0byAwLgoJKiBkYnhyZWFkLmMgKHJlYWRfb2ZpbGVfc3ltdGFiLCBOX0NBVENIKTogQWRkIG9mZnNldCB0byBidWZwLT5uX3ZhbHVlLgoJKiBkYnhyZWFkLmMgKGRieF9jcmVhdGVfdHlwZSk6IFplcm8gVFlQRV9WUFRSX0JBU0VUWVBFLgoJKHJlYWRfc3RydWN0X3R5cGUpOiBEb24ndCBib3RoZXIgdG8gc2V0IFRZUEVfVlRQUl97QkFTRVRZUEUsRklFTEROT30KCWlmIGl0J3MganVzdCBnb2luZyB0byBiZSB7MCwxfS4KCgkqIGRieHJlYWQuYyAodmlydHVhbF9jb250ZXh0KTogVXNlIFRZUEVfQkFTRUNMQVNTIHN0YXJ0aW5nIGF0IDAKCSh5ZXMsIGl0J3MgI2lmIDAsIGJ1dCBqdXN0IGluIGNhc2UuLi4pLgoKCSogdmF4LW9wY29kZS5oLCBleHByZWFkLnksIGV4cHByaW50LmMsIGNwbHVzLWRlbS5jOiBEZWNsYXJlIHNvbWUKCXRoaW5ncyAiY29uc3QiLgoKCSogaTM4Ni1zdHViLmM6IE5ldyBmaWxlLgoKCSogV0hBVFMuTkVXOiBSZW1vdmUgbWVudGlvbiBvZiByZWFkbGluZSBhbmQgbW9yZSBwYWdpbmcgKGluIDMuNSkuCglUcnkgdG8ga2VlcCBjb21tYW5kIG5hbWVzIHVwIHRvIGRhdGUgd2l0aCByZW5hbWluZy4KCgkqIGdtYWxsb2MuYyBbIUhBVkVfR0VUUEFHRVNJWkVdOiBUcnkgdG8gZmlndXJlIG91dCB0aGUgcGFnZXNpemUuCgoJKiBpbmZ1bi5jIChyZXN1bWUsIHJlc3VtZV9jbGVhbnVwcyk6IE5ldyBmdW5jdGlvbnMuCgkod2FpdF9mb3JfaW5mZXJpb3IsIHByb2NlZWQsIGNoaWxkX2NyZWF0ZV9pbmZlcmlvcik6IFVzZSByZXN1bWUKCW5vdCB0YXJnZXRfcmVzdW1lLgoKCSogcmVtb3RlLmMgKGdldHBrdCk6IERvbid0IHNldCBpbW1lZGlhdGVfcXVpdC4KCgkqIGJsb2NrZnJhbWUuYywgZnJhbWUuaCAocmVpbml0X2ZyYW1lX2NhY2hlKTogTmV3IGZ1bmN0aW9uLgoJc29saWIuYyAoc29saWJfYWRkKSwgc3ltZmlsZS5jICh7LGFkZF99c3ltYm9sX2ZpbGVfY29tbWFuZCk6CglVc2UgaXQuCgpUdWUgQXByIDIzIDEwOjM4OjQxIDE5OTEgIEppbSBLaW5nZG9uICAoa2luZ2RvbiBhdCBjeWdpbnQuY3lnbnVzLmNvbSkKCgkqIHN5bXRhYi5jIChsb29rdXBfc3ltYm9sKTogQWRkIDMgbW9yZSBvZiB0aG9zZSBsb29wcyB0aHJvdWdoCgl0aGUgc3ltdGFicyB3aGljaCB3ZSBhbGwga25vdyBhbmQgbG92ZTogKDEpIExvb2sgaW4gdGhlCglTVEFUSUNfQkxPQ0sgZm9yIG1hbmdsZWQgc3ltYm9scyByaWdodCBhZnRlciB3ZSBjaGVjayB0aGUgYmxvY2tzLAoJKDIsIDMpIExvb2sgaW4gdGhlIFNUQVRJQ19CTE9DSyBmb3IgYWxsIHRoZSBzeW10YWJzIGFuZCBwc3ltdGFicwoJYXQgdGhlIGVuZC4KCgkqIG1haW4uYyAoY2RfY29tbWFuZCk6IENhbGwgZG9udF9yZXBlYXQuCgoJKiBkYnhyZWFkLmMgKHJlYWRfc3RydWN0X3R5cGUpOiBJZiBjb25zdC92b2xhdGlsZSBjaGFyYWN0ZXIgaXMKCW1pc3NpbmcsIGRvbid0IGNvbXBsYWluLCBqdXN0IGNvbnRpbnVlLgoKCSogZGJ4cmVhZC5jIChyZWFkX3N0cnVjdF90eXBlKTogT25seSB0cnkgdG8gcmVhZCB0aGUgZmNvbnRleHQgaWYKCWl0IGlzIHRoZXJlLiAgQWxzbyBjaGFuZ2UgImVycm9yX3R5cGUgIiB0byAicmV0dXJuIGVycm9yX3R5cGUgIi4KCXZhbHVlcy5jICh2YWx1ZV92aXJ0dWFsX2ZuX2ZpZWxkKTogSWYgdGhlcmUgaXMgbm8gZmNvbnRleHQsCgl0aGVuIGRvIHRoaW5ncyB0aGUgd2F5IEdEQiAzLnggZGlkLgoJdmFsb3BzLmMgKHNlYXJjaF9zdHJ1Y3RfbWV0aG9kKTogQWRkIHR5cGUgdG8gdmFsdWVfdmlydHVhbF9mbl9maWVsZAoJYXJndW1lbnRzLgoKCSogZGJ4cmVhZC5jIChyZWFkX3N0cnVjdF90eXBlKTogRml4IHR5cG86ICpwcCAhPSAnXDAnIC0+ICoqcHAgIT0gJ1wwJy4KCk1vbiBBcHIgMjIgMDA6MDI6NDMgMTk5MSAgSmltIEtpbmdkb24gIChraW5nZG9uIGF0IGN5Z2ludC5jeWdudXMuY29tKQoKCSogcHJpbnRjbWQuYyAocHJpbnRfc2NhbGFyX2Zvcm1hdHRlZCk6IEFkZCAndCcgZm9yIGJpbmFyeS4KCgkqIGRieHJlYWQuYyAoZW5kX3BzeW10YWIpOiBJbml0aWFsaXplIHBzdC0+c3ltdGFiLgoKCSogY29yZS5jIChjb3JlX29wZW4pOiBDYWxsIEFERF9TT0xJQi4KCgkqIHRtLXNwYXJjLmg6IEluY2x1ZGUgPHN1bjQvcmVnLmg+IG5vdCA8bWFjaGluZS9yZWcuaD4uCglzcGFyYy10ZGVwLmM6IERvbid0IGluY2x1ZGUgPG1hY2hpbmUvcmVnLmg+LgoKCSogc3VuMy14ZGVwLmMgWyFUQVJHRVRfU1VOM106IEp1c3QgcHJvdmlkZSBlbXB0eSBmdW5jdGlvbnMgd2hpY2gKCWRvbid0IGRvIGFueXRoaW5nLgoKCSogY29yZS5jIChjb3JlX29wZW4pOiBBZGQgbWFrZV9jbGVhbnVwICh1bnB1c2hfdGFyZ2V0LCAmY29yZV9vcHMpLgoKCSogU2hhcmVkIGxpYnJhcnkvY29yZWZpbGUgY2hhbmdlcyBmcm9tIFBldGVyIFNjaGF1ZXI6Cgljb3JlLmMgKGNvcmVfY2xvc2UpOiBDYWxsIENMRUFSX1NPTElCLgoJKGNvcmVfb3Blbik6IFJlbW92ZSBjb21tZW50IGFib3V0ICJzaG91bGQgZGVhbCB3aXRoIHNoYXJlZCBsaWIiLgoJKGNvcmVfeGZlcl9tZW1vcnkpOiBJZiB3ZSBjYW4ndCB4ZmVyIHRoZSB1c3VhbCB3YXksIHRyeSB0aGUKCXNoYXJlZCBsaWJyYXJpZXMuCglzb2xpYi5jIChzb19saXN0KTogTmV3IGZpZWxkcyBzb19iZmQgYW5kIHNvX3NlY3Rpb25zeyxfZW5kfS4KCShmaW5kX3NvbGliKTogVXNlIHNvbGliX21hcF9zZWN0aW9ucyB0byBnZXQgbGRfdGV4dC4KCShzb2xpYl9tYXBfc2VjdGlvbnMsIHNvbGliX3hmZXJfbWVtb3J5KTogTmV3IGZ1bmN0aW9ucy4KCShjbGVhcl9zb2xpYik6IEZyZWUgc29fc2VjdGlvbnMgYW5kIGNsb3NlIHNvX2JmZC4KCXRtLXN1bm9zLmg6IEFkZCBzb2xpYl94ZmVyX21lbW9yeSwgc29saWJfYWRkLgoKCSogc3BhcmMtdGRlcC5jIChza2lwX3Byb2xvZ3VlKTogRG9uJ3Qgc2tpcCBhbnl0aGluZyB1bmxlc3MgdGhlcmUKCWlzIGEgInNhdmUiIGluc3RydWN0aW9uIGluIHRoZXJlIHNvbWV3aGVyZS4KCgkqIHN5bWZpbGUuYyAoc3ltYm9sX2ZpbGVfYWRkKTogQWRkIGNvbW1lbnQuCglzb2xpYi5jIChzb2xpYl9hZGQpOiBEb24ndCBtYWxsb2MgbmFtZSBwYXNzZWQgdG8gc3ltYm9sX2ZpbGVfYWRkLgoKCSogZXhlYy5jIChidWlsZF9zZWN0aW9uX3RhYmxlKTogSWYgKnN0YXJ0IGlzbid0IE5VTEwsIGZyZWUgaXQuCgkKCSogc3RhY2suYyAocGFyc2VfZnJhbWVfc3BlY2lmaWNhdGlvbik6IEVycm9yIGlmIE5VTEwgc2VsZWN0ZWRfZnJhbWUuCglpbmZjbWQuYyAoZmluaXNoX2NvbW1hbmQpOiBFcnJvciBpZiBOVUxMIHNlbGVjdGVkX2ZyYW1lLgoJaW5mbG93LmMgKGtpbGxfY29tbWFuZCk6IERlYWwgd2l0aCBOVUxMIHNlbGVjdGVkX2ZyYW1lLgoJc3RhY2suYyAocmVjb3JkX3NlbGVjdGVkX2ZyYW1lKTogU2V0ICpGUkFNRVAgdG8gTlVMTCBpZiB0aGVyZQoJaXMgbm8gc2VsZWN0ZWQgZnJhbWUuCglpbmZydW4uYyAocmVzdG9yZV9pbmZlcmlvcl9zdGF0dXMpOiBBZGQgY29tbWVudC4KCWZpbmR2YXIuYyAocmVhZF92YXJfdmFsdWUpOiBDaGVjayBmb3IgTlVMTCBmcmFtZSB3aGVyZSB3ZSBuZWVkCglhIGZyYW1lLgoJYnJlYWtwb2ludC5jIChnZXRfY2F0Y2hfc2Fscyk6IENoZWNrIGZvciBOVUxMIHNlbGVjdGVkX2ZyYW1lLgoKCSogYnJlYWtwb2ludC5jIChicHN0YXRfcHJpbnQpOiBUcnkgYWxsIGVsZW1lbnRzIG9uIHRoZSBicHN0YXQKCWNoYWluIGJlZm9yZSBnaXZpbmcgdXAgd2l0aCBhbiBpbnRlcm5hbCBlcnJvci4KClN1biBBcHIgMjEgMjE6NDM6MTAgMTk5MSAgSmltIEtpbmdkb24gIChraW5nZG9uIGF0IGN5Z2ludC5jeWdudXMuY29tKQoKCSogdmFsdWUuaCwgdmFsdWVzLmMgKHZhbHVlX3ssZnJlZV90b199bWFyayk6IE5ldyBmdW5jdGlvbnMuCglicmVha3BvaW50LmMgKGJwc3RhdF9zdG9wX3N0YXR1cyk6IFVzZSB0aGVtLgoKCSogdG0taTM4NnZ7LC1nfS5oOiBSZW1vdmUgTl9TRVRfTUFHSUMgZGVmaW5lLgoKU2F0IEFwciAyMCAyMTo0Mjo0NyAxOTkxICBKaW0gS2luZ2RvbiAgKGtpbmdkb24gYXQgY3lnaW50LmN5Z251cy5jb20pCgoJKiBpMzg2LXRkZXAuYzogUmVtb3ZlIHVubmVjZXNzYXJ5ICNpbmNsdWRlcy4KCgkqIHN5bXRhYi5jICh2YXJpb3VzKTogQ2hhbmdlIGVycm9yIHJldHVybiBvZiBmaW5kX2xpbmVfY29tbW9uIHRvIC0xLgoKCSogY29mZnJlYWQuYyAoZmluZF9saW5lbm9zKTogVXNlIExJTkVTWiBub3Qgc2l6ZW9mIChzdHJ1Y3QgbGluZW5vKS4KCgkqIGNvZmZyZWFkLmMgKGVuZF9zeW10YWIpOiBJbml0aWFsaXplIGxhbmd1YWdlLCBkaXJuYW1lLCBhbmQKCWZ1bGxuYW1lIGZpZWxkcy4KCkZyaSBBcHIgMTkgMTg6MTg6MzEgMTk5MSAgSmltIEtpbmdkb24gIChraW5nZG9uIGF0IGN5Z2ludC5jeWdudXMuY29tKQoKCSogbWlwcy10ZGVwLmMgKG1pcHNfZnJhbWVfY2hhaW4pOiBEb24ndCBjaGFpbiBpZiBzYXZlZF9wYyA9PSAwLgoKCSogc3RkZGVmLmggKHNpemVfdCk6IExldCBlaXRoZXIgX1NJWkVfVCBvciBfU0laRV9UXyBndWFyZCBpdC4KCgkqIG1pcHNyZWFkLmMgKHBhcnNlX3N5bWJvbCk6IFNldCBzdGFydHVwX2ZpbGVfe3N0YXJ0LGVuZH0gaWYKCWVudHJ5X3BvaW50IGlzIGluIGN1cnJlbnQgZmlsZS4KCgkqIGZpbmR2YXIuYyAocmVhZF9yZWdpc3Rlcl9nZW4pOiBBZGQgInRhcmdldCBieXRlLW9yZGVyIiBjb21tZW50LgoKV2VkIEFwciAxNyAxNzowOTo0OCAxOTkxICBKaW0gS2luZ2RvbiAgKGtpbmdkb24gYXQgY3lnaW50LmN5Z251cy5jb20pCgoJKiBpMzg2LXRkZXAuYyAoaTM4Nl9nZXRfZnJhbWVfc2V0dXApOiBVc2UgU1dBUF9UQVJHRVRfQU5EX0hPU1QKCWJlZm9yZSByZXR1cm5pbmcgbG9jYWxzIG9yIHNsb2NhbHMuCgoJKiBpMzg2LXRkZXAuYyAoaTM4Nl9mb2xsb3dfanVtcCk6IERvIG5vdCBhZGQgZGF0YTE2IHRvIHBvcyBpbgoJY2FsbCB0byBjb2Rlc3RyZWFtX3NlZWs7IGFkZCBvbmUgdG8gcG9zIGlmIChhbmQgb25seSBpZikKCXdlIGFyZSBkZWFsaW5nIHdpdGggYSBqdW1wIHdpdGggZGF0YTE2ID09IDEgKGkuZS4gMHg2NiwgMHhlOSkuCgpNb24gQXByIDE1IDEyOjA0OjMyIDE5OTEgIEppbSBLaW5nZG9uICAoa2luZ2RvbiBhdCBjeWdpbnQuY3lnbnVzLmNvbSkKCgkqIHZhbG9wcy5jIChjYWxsX2Z1bmN0aW9uX2J5X2hhbmQpOiBQdXQgZHVtbXkxIGluIHRhcmdldCBvcmRlcgoJYmVmb3JlIEZJWF9DQUxMX0RVTU1ZLgoKCSogdG0taTM4NnYuaCAoRklYX0NBTExfRFVNTVkpOiBEb24ndCBkZXBlbmQgb24gaG9zdCBieXRlIG9yZGVyLgoKU3VuIEFwciAxNCAxMTo1NToxOSAxOTkxICBKaW0gS2luZ2RvbiAgKGtpbmdkb24gYXQgY3lnaW50LmN5Z251cy5jb20pCgoJKiB2YWxvcHMuYyAocHVzaF93b3JkKTogQWRkIFNXQVBfVEFSR0VUX0FORF9IT1NULgoKCSogcmVtb3RlLmMgKHJlbW90ZV9vcGVuKTogU2VuZCAnKycgYmVmb3JlIGNhbGxpbmcgcHV0cGt0KCkuCgoJKiB0bS1pMzg2di5oIChSRUdJU1RFUl9WSVJUVUFMX1RZUEUpOiBSZXR1cm4gcG9pbnRlciB0byB2b2lkLAoJbm90IGludCwgZm9yIHBjLCBmcCwgYW5kIHNwLgoKCSogcmVtb3RlLmMgKHJlbW90ZV9vcGVuKTogQ2FsbCBzdGFydF9yZW1vdGUgYWZ0ZXIgcHV0cGt0KCI/Iik7CglpbmZydW4uYyAoc3RhcnRfcmVtb3RlKTogQWxzbyBjYWxsIHdhaXRfZm9yX2luZmVyaW9yICYgbm9ybWFsX3N0b3AuCgpTYXQgQXByIDEzIDIyOjExOjQyIDE5OTEgIEppbSBLaW5nZG9uICAoa2luZ2RvbiBhdCBzcGlmZi5jeWdudXMuY29tKQoKCSogZXhlYy5jOiBJbmNsdWRlIDxjdHlwZS5oPi4KCgkqIHN1bjMteGRlcC5jIChmZXRjaF9jb3JlX3JlZ2lzdGVycyk6IEFkZCAjaWZkZWYgRlAwX1JFR05VTS4KCkZyaSBBcHIgMTkgMDk6MzY6NTAgMTk5MSAgSmltIEtpbmdkb24gIChraW5nZG9uIGF0IGN5Z2ludC5jeWdudXMuY29tKQoKCSogdG0tNjhrLmggKE5VTV9SRUdTKTogQ29uZGl0aW9uYWxpemUgb24gVEFSR0VUX1NVTjMgbm90IHN1bi4KCXRtLXN1bjMuaDogRGVmaW5lIFRBUkdFVF9TVU4zLgoKCSogdXRpbHMuYzogVXNlIENQTFVTX01BUktFUiBub3QgJyQnLgoKCSogY3BsdXMtZGVtLmM6IFVzZSBDUExVU19NQVJLRVIgbm90ICckJy4gIElmIENQTFVTX01BUktFUiBpc24ndAoJZGVmaW5lZCwgZGVmaW5lIGl0IHRvICckJy4KCgkqIGFybS1vcGNvZGUuaDogTmV3IGZpbGUgKHNhbWUgY29udGVudHMgYXMgYmVmb3JlOyBpdCBoYWQKCWp1c3QgYmVlbiBsZWZ0IG91dCBvZiB0aGUgZGlzdHJpYnV0aW9uIGZvciBhIGxvbmcgdGltZSkuCgoJKiB0bS02OGsuaDogUHV0IGRlY2xhcmF0aW9uIG9mIGV4dF9mb3JtYXRfNjg4ODEgb3V0c2lkZSB0aGUgbWFjcm9zLgoKCSogbWFpbi5jOiBOZXcgSEFWRV9TSUdTRVRNQVNLICNpZmRlZnMuCgoJKiBjb2ZmcmVhZC5jIChyZWFkX2NvZmZfc3ltdGFiKTogQ2hlY2sgZm9yICJMRiUiIHdpdGggYWxsIHRoZQoJb3RoZXIgTColIHRoaW5ncy4KCgkqIGNvZmZyZWFkLmMgKFNEQl9UWVBFKTogTmV3IG1hY3JvLgoJdmFyaW91czogVXNlIGl0IGluc3RlYWQgb2YgY2hlY2tpbmcgYWdhaW5zdCBUX05VTEwuCgoJKiBNYWtlZmlsZS5kaXN0IChjcGx1cy1kZW0ubyk6IEhhY2sgaW4gYW4gI2luY2x1ZGUgInBhcmFtLmgiCgliZWZvcmUgd2UgY29tcGlsZSBpdC4KCWRlZnMuaDogUHJvdGVjdCBhZ2FpbnN0IG11bHRpcGxlIGluY2x1c2lvbi4KCXBhcmFtLmg6IEluY2x1ZGUgZGVmcy5oLgoJc2lnbmFtZS5jOiBDaGFuZ2UgI2lmZGVmIFNZU19TSUdMSVNUX01JU1NJTkcgdG8gI2lmLgoJcGFyYW0tbm8tdG0uaDogRGVmaW5lIFNZU19TSUdMSVNUX01JU1NJTkcgZnJvbSBVU0cuCgpUaHUgQXByIDE4IDE5OjQ5OjEwIDE5OTEgIEppbSBLaW5nZG9uICAoa2luZ2RvbiBhdCBjeWdpbnQuY3lnbnVzLmNvbSkKCgkqIGkzODYtcGluc24uYyAoT1BfRSk6IENoYW5nZSAlZCB0byAweCV4IGZvciBjb25zaXN0ZW5jeS4KCgkqIHB1dGVudi5jOiBOZXcgZmlsZQoJTWFrZWZpbGUuZGlzdDogQWRkIGl0IHRvICQoT0JTKS4KCgkqIG1pcHNyZWFkLmMgWyFDTVVDU106ICNpbmNsdWRlIDxzeW1zLmg+LgoKCSogbWlwcy14ZGVwLmMgKGZldGNoX2NvcmVfcmVnaXN0ZXJzKTogI2lmIDAgb3V0IHRoZSB3aG9sZSBmdW5jdGlvbi4KCgkqIE1vdmUgcmVhZF9tZW1vcnlfbm9icHQgZnJvbSBtZW0tYnJlYWsuYyB0byBicmVha3BvaW50LmMuCgpNb24gQXByIDE1IDIxOjQ1OjM1IDE5OTEgIEppbSBLaW5nZG9uICAoa2luZ2RvbiBhdCBjeWdpbnQuY3lnbnVzLmNvbSkKCgkqIHV0aWxzLmMgKF9pbml0aWFsaXplX3V0aWxzKTogUmVuYW1lICJzZXQgZGVtYW5nbGUiIHRvCgkic2V0IHByaW50IGRlbWFuZ2xlIiwgInNldCBhc20tZGVtYW5nbGUiIHRvICJzZXQgcHJpbnQKCWFzbS1kZW1hbmdsZSIgYW5kICJzZXQgc2V2ZW5iaXQtc3RyaW5ncyIgdG8gInNldCBwcmludAoJc2V2ZW5iaXQtc3RyaW5ncyIuCgoJKiBtYWluLmMgKGluaXRpYWxpemVfbWFpbik6IFJlbmFtZSAic2V0IGhpc3Rvcnkgd3JpdGUiIHRvCgkic2V0IGhpc3Rvcnkgc2F2ZSIuCgoJKiBtYWluLmMgKGluaXRpYWxpemVfbWFpbik6IFJlbmFtZSAic2V0IGNhdXRpb24iIHRvCgkic2V0IGNvbmZpcm0iLgoKCSogdmFsdWVzLmMgKF9pbml0aWFsaXplX3ZhbHVlcyk6IFJlbW92ZSAiaW5mbyBoaXN0b3J5IiBhbGlhcwoJZm9yICh3aGF0IGlzIG5vdykgInNob3cgdmFsdWVzIi4KCgkqIGluZmNtZC5jLCBnZGJjbWQuaDogQWRkIHVuc2V0bGlzdC4KCWluZmNtZC5jOiBBZGQgdW5zZXRfY29tbWFuZC4KCShfaW5pdGlhbGl6ZV9pbmZjbWQpOiBBZGQgInVuc2V0IiBhbmQgdXNlIGl0IGZvciAidW5zZXQgZW52Ii4KCgkqIGJyZWFrcG9pbnQuYyAoX2luaXRpYWxpemVfYnJlYWtwb2ludCk6IFJlbW92ZSAidW5zZXQiLgoKCSogdmFscHJpbnQuYzogQWRkICJzZXQvc2hvdyBwcmludCIsIHtzZXQsc2hvd31fcHJpbnQuCglSZW5hbWUgInNldCBhZGRyZXNzcHJpbnQiIHRvICJzZXQgcHJpbnQgYWRkcmVzcyIuCglSZW5hbWUgInNldCBhcnJheXByaW50IiB0byAic2V0IHByaW50IGFycmF5Ii4KCVJlbmFtZSAic2V0IGFycmF5LW1heCIgdG8gInNldCBwcmludCBlbGVtZW50cyIuCglSZW5hbWUgInNldCBwcmV0dHlwcmludCIgdG8gInNldCBwcmludCBwcmV0dHkiLgoJUmVuYW1lICJzZXQgdW5pb25wcmludCIgdG8gInNldCBwcmludCB1bmlvbiIuCglSZW5hbWUgInNldCB2dGJscHJpbnQiIHRvICJzZXQgcHJpbnQgdnRibCIuCgoJKiBtYWluLmM6IFJlbmFtZSB2ZXJzaW9uX2luZm8gdG8gc2hvd192ZXJzaW9uLgoJKF9pbml0aWFsaXplX21haW4pOiBSZW5hbWUgImluZm8gdmVyc2lvbiIgdG8gInNob3cgdmVyc2lvbiIuCgoJKiB2YWx1ZXMuYzogUmVuYW1lIHZhbHVlX2hpc3RvcnlfaW5mbyB0byBzaG93X3ZhbHVlcy4KCShfaW5pdGlhbGl6ZV92YWx1ZXMpOiBSZW5hbWUgImluZm8gdmFsdWVzIiB0byAic2hvdyB2YWx1ZXMiLgoKU3VuIEFwciAxNCAyMzowODozNCAxOTkxICBKaW0gS2luZ2RvbiAgKGtpbmdkb24gYXQgY3lnaW50LmN5Z251cy5jb20pCgoJKiBpbmZ0YXJnLmMgKGNoaWxkX29wZW4pLCByZW1vdGUtdnh7LC42OH0uYyAodnhfcHJvY19vcGVuKToKCU5ldyBmdW5jdGlvbiB0byBnaXZlIGNvcnJlY3QgZXJyb3IgbWVzc2FnZS4KClRodSBBcHIgMTEgMTc6MTk6NDEgMTk5MSAgSmltIEtpbmdkb24gIChraW5nZG9uIGF0IGN5Z2ludC5jeWdudXMuY29tKQoKCSogdGFyZ2V0Lmg6IEFkZCB0b19kb2MgYW5kIHRhcmdldF9wcmVvcGVuLgoJdGFyZ2V0LmM6IEFkZCB0YXJnZXRfcHJlb3BlbiBhbmQgdGFyZ2V0X2NvbW1hbmQuCglSZW1vdmUgdGFyZ2V0X2luZm8uCgkoYWRkX3RhcmdldCk6IENhbGwgYWRkX2NtZCBhbmQgbWVzcyB3aXRoIHRhcmdldGxpc3QtPmRvYy4KCWNvcmUuYywgZXhlYy5jLCByZW1vdGUtZWIuYywgcmVtb3RlLW5pbmR5LmMsIHJlbW90ZS12eC5jLAoJcmVtb3RlLXZ4LjY4LmMsIGluZnRhcmcuYywgcmVtb3RlLmM6IEFkZCBkb2MgZmllbGQgdG8gdGFyZ2V0IHN0cnVjdC4KCUNhbGwgdGFyZ2V0X3ByZW9wZW4gZnJvbSBvcGVuIHJvdXRpbmUuCgoJKiBtYWluLmM6IFJlbmFtZSBlZGl0aW5nX2luZm8gdG8gc2hvd19jb21tYW5kcy4KCShfaW5pdGlhbGl6ZV9tYWluKTogUmVuYW1lICJpbmZvIGVkaXRpbmciIHRvICJzaG93IGNvbW1hbmRzIi4KCgkqIHNvdXJjZS5jOiBSZW5hbWUgZGlyZWN0b3JpZXNfaW5mbyB0byBzaG93X2RpcmVjdG9yaWVzLgoJKF9pbml0aWFsaXplX3ZhbHVlcyk6IFJlbmFtZSAiaW5mbyBkaXJlY3RvcmllcyIgdG8gInNob3cgZGlyZWN0b3JpZXMiLgoKCSogdmFsdWVzLmM6IFJlbmFtZSBjb252ZW5pZW5jZV9pbmZvIHRvIHNob3dfY29udmVuaWVuY2UuCgkoX2luaXRpYWxpemVfdmFsdWVzKTogUmVuYW1lICJpbmZvIGNvbnZlbmllbmNlIiB0byAic2hvdyBjb252ZW5pZW5jZSIuCgoJKiBjb3B5aW5nLmF3ayAoX2luaXRpYWxpemVfY29weWluZyk6IFJlbmFtZSAiaW5mbyBjb3B5aW5nIiB0bwoJInNob3cgY29weWluZyIgYW5kICJpbmZvIHdhcnJhbnR5IiB0byAic2hvdyB3YXJyYW50eSIuCglSZW5hbWUge2NvcHlpbmcsd2FycmFudHl9X2luZm8gdG8gc2hvd197Y29weWluZyx3YXJyYW50eX0uCgoJKiBzeW1maWxlLmM6IFJlbmFtZSBhZGRfc3ltc19jb21tYW5kIHRvIGFkZF9zeW1ib2xfZmlsZV9jb21tYW5kLgoJKF9pbml0aWFsaXplX3N5bWZpbGUsIGFkZF9zeW1zX2FkZHJfY29tbWFuZCk6CglSZW5hbWUgYWRkLXN5bXMgdG8gYWRkLXN5bWJvbC1maWxlLgoKVGh1IEFwciAxOCAxODowODozMCAxOTkxICBKb2huIEdpbG1vcmUgIChnbnUgYXQgY3lnaW50LmN5Z251cy5jb20pCgoJKiBzeW1maWxlLmggKGZyZWVfbmFtZWRfc3ltdGFicyk6ICBSZW5hbWUgZnJvbSBmcmVlX25hbWVkX3N5bXRhYi4KCSogc3ltZmlsZS5jIChjbGVhcl9zeW10YWJfdXNlcnNfb25jZSwgY2FzaGllcl9wc3ltdGFiLAoJZnJlZV9uYW1lZF9zeW10YWJzKTogIE1vdmUgdGhlc2Ugcm91dGluZXMgZnJvbSBzeW1taXNjLmMuCgkqIHN5bW1pc2MuYyAoc2FtZSk6ICBzYW1lLgoJKGZyZWVfc3ltdGFiKTogIE1ha2Ugbm9uLXN0YXRpYy4KCSogc3ltdGFiLmggKGZyZWVfc3ltdGFiKTogIERlY2xhcmUgYXMgZXhwb3J0ZWQgdm9pZCBmbiBub3cuCgkqIGRieHJlYWQuYyAoZW5kX3N5bXRhYiwgZW5kX3BzeW10YWIpOiAgQ2hhbmdlIGNvbW1lbnRzLgoJKGluaXRpYWxpemVfZGJ4cmVhZCk6ICBDYWxsIGRieF9uZXdfaW5pdCgpIGluIGNhc2UgdGhlIGZpcnN0Cgljb21tYW5kIGlzIGFkZC1zeW1ib2xzLgoJKiB0YXJnZXQuYyAoZHVtbXlfdGFyZ2V0KTogIFBlcm1pdCBhZGRfc3ltc19hZGRyX2NvbW1hbmQuCgpTYXQgQXByIDEzIDE0OjQ2OjA3IDE5OTEgIEpvaG4gR2lsbW9yZSAgKGdudSBhdCBjeWdpbnQuY3lnbnVzLmNvbSkKCglQZXJtaXQgc3ltYm9scyB0byBiZSBzdXBlcnNlZGVkIHdoZW4gbmV3IHN5bWJvbCBmaWxlcyBoYXZlCgliZWVuIHJlYWQgaW4sIHBhcnRpY3VsYXJseSBmb3IgVnhXb3Jrcy4KCgkqIGRieHJlYWQuYyAocmVhZF9kYnhfc3ltdGFiKTogQWxsb3cgTl9TT0wgdG8gY2xlYW5seSB0YWtlIHVzIGJhY2sKCXRvIHRoZSBtYWluIGZpbGUsIGFzIHdlbGwgYXMgdG8gaW5jbHVkZSBmaWxlcy4gIEFsc28sIHB1dCBnbG9iYWwKCWZ1bmN0aW9ucyBpbnRvIHRoZSBnbG9iYWwgcHN5bXRhYiwgdG8gbWFrZSAiaSBmdW4iIHdvcmsuCgkoZW5kX3BzeW10YWIpOiAgRnJlZSBuYW1lZCBzeW10YWJzIGFuZCBwc3ltdGFicyBmb3IgYSBmaWxlLCBvbmNlIGEKCW5ldyBwc3ltdGFiIGZvciBpdCBoYXMgYmVlbiByZWFkLgoJKiBjb2ZmcmVhZC5jIChlbmRfcHN5bXRhYik6ICBGcmVlIG5hbWVkIHN5bXRhYnMgYW5kIHBzeW10YWJzIGZvcgoJYSBmaWxlLCBvbmNlIGEgbmV3IHN5bXRhYiBoYXMgYmVlbiByZWFkIGZvciBpdC4KCSogbWlwc3JlYWQuYzogIEZJWE1FLiAgV2UgbmVlZCB0byBkbyB0aGUgc2FtZSBmb3IgTUlQUywgYnV0IGl0Cglsb29rcyBoYXJkZXIgdG8gZGV0ZXJtaW5lIHRoZSB0b3AtbGV2ZWwgYmxvY2sgYmVmb3JlIGl0J3MgYmVlbgoJcXVldWVkIHRvIHRoZSBwc3ltdGFiIGxpc3QuCQoKCSogc3ltZmlsZS5jIChzeW1ib2xfZmlsZV9hZGQpOiAgVXNlIGZpbHRlcmVkIHByaW50aW5nIGFuZCB3cmFwIGl0LgoJSWYgd2UgaGF2ZSB3aXBlZCBvdXQgYW55IG9sZCBzeW1ib2wgdGFibGVzLCBjbGVhbiB1cCBhdCBlbmQgb2YKCXN5bWJvbCByZWFkaW5nLgoJKHN5bWJvbF9maWxlX2NvbW1hbmQpOiAgRG9uJ3QgcmVmZXJlbmNlIHN5bWZpbGVfZm5zIGlmIGl0J3MgemVyby4KCgkqIHN5bXRhYi5oIChHTE9CQUxfQkxPQ0ssIFNUQVRJQ19CTE9DSywgRklSU1RfTE9DQUxfQkxPQ0spOiAgTmV3CglkZWZpbmVzIGZvciB0aGUgYmxvY2tzIG9mIGEgYmxvY2t2ZWN0b3IgdGhhdCBjb250YWluIGdsb2JhbCBhbmQKCWZpbGUtc3RhdGljIHN5bWJvbHMgYW5kIHRoZSBmaXJzdCBvZiB0aGUgc21hbGxlciBzY29wZSBjb250b3Vycy4gCgkqIHN5bXRhYi5jIChsb29rdXBfc3ltYm9sLCBmaW5kX3BjX3N5bXRhYiwgZmluZF9wY19saW5lLAoJZGVjb2RlX2xpbmVfMSwgbWFrZV9zeW1ib2xfY29tcGxldGlvbl9saXN0KTogIFVzZSB0aGUgYWJvdmUuCgkqIGNvZmZyZWFkLmMgKGVuZF9zeW10YWIsIHBhdGNoX29wYXF1ZV90eXBlcyk6ICBEaXR0by4KCSogZGJ4cmVhZC5jIChlbmRfc3ltdGFiKTogIERpdHRvLgoJKiBleHByZWFkLnkgKGJsb2NrKTogIERpdHRvLgoJKiBtaXBzcmVhZC5jICh0aHJvdWdob3V0KTogIERpdHRvLgoJKiBzeW1taXNjLmMgKGZyZWVfbmFtZWRfc3ltdGFicyk6ICBEaXR0by4KCgkqIHN5bXRhYi5jIChsaXN0X3N5bWJvbHMpOiAgUHJvY2VzcyB0aGUgZmlyc3Qgc3ltYm9sIG9mIHRoZQoJc3RhdGljIHBzeW1ib2xzIGxpc3QuCgkodHlwZXNfaW5mbyk6ICBSZXN0b3JlIHRoaXMgZnVuY3Rpb24gZnJvbSBpdHMgdW50aW1lbHkgI2lmIDAuCglJdCdzIG5vdCBwZXJmZWN0LCBidXQgaXQgaXMgYmV0dGVyIHRoYW4gbm90aGluZy4KCShfaW5pdGlhbGl6ZV9zeW10YWIpOiAgUmVzdG9yZSAiaW5mbyB0eXBlcyIuCgpUaHUgQXByIDExIDA1OjIzOjE5IDE5OTEgIEpvaG4gR2lsbW9yZSAgKGdudSBhdCBjeWdpbnQuY3lnbnVzLmNvbSkKCgkqIG02OGstc3R1Yi5jOiAgUmVtb3RlIHN0dWIgZm9yIDY4MHgwJ3MsIGNyZWF0ZWQgZnJvbQoJcmVtLW02OGsuc2hhciAod2hpY2ggaXMgcmVtb3ZlZCkuCgkqIG5pbmR5LXNoYXJlL3tNYWtlZmlsZSxPbmluZHkuYyxibG91dC5oLGVudi5oLG5pbmR5LmMsdHR5Zmx1c2guY306CglSZW1vdmUgUkNTIGxvZyBzdHVmZiBub3cgdGhhdCB3ZSB1c2UgQ1ZTIGFuZCBpdCBibG93cyBvdXIgZGlmZnMuCgpXZWQgQXByIDEwIDE0OjE4OjA2IDE5OTEgIEpvaG4gR2lsbW9yZSAgKGdudSBhdCBjeWdpbnQuY3lnbnVzLmNvbSkKCgkqIHN5bW1pc2MuYyAoZnJlZV9uYW1lZF9zeW10YWIpOiAgTWFrZSBpdCB3b3JrLCBpbiBpdHMgY3VycmVudAoJa2x1ZGd5IGZhc2hpb24uICBDaGFuZ2UgcmVzdWx0IHRvIGluZGljYXRlIGlmIHdlIGJsZXcgYXdheSBia3B0cy4KCSogZGJ4cmVhZC5jIChlbmRfc3ltdGFiKTogIEFjY3VtdWxhdGUgcmVzdWx0IGZyb20KCWZyZWVfbmFtZWRfc3ltdGFiIGFuZCBwcmludCB3YXJuaW5nIGlmIHdlIGJsZXcgdXNlcidzIHN0YXRlLgoJKiBzeW1maWxlLmg6ICBmcmVlX25hbWVkX3N5bXRhYiBub3cgcmV0dXJucyBhbiBpbnQuCgpNb24gQXByICA4IDIzOjU3OjQzIDE5OTEgIEpvaG4gR2lsbW9yZSAgKGdudSBhdCBjeWdpbnQuY3lnbnVzLmNvbSkKCgkqIGRieHJlYWQuYyAoZGJ4X3N5bWZpbGVfcmVhZCk6ICBJbml0aWFsaXplIHBzeW1ib2wgbGlzdCBpZiB0aGlzCglpcyB0aGUgZmlyc3Qgc3ltYm9sIHJlYWQsIGV2ZW4gaWYgbm90IG1haW5saW5lLgoJKGRieF9wc3ltdGFiX3RvX3N5bXRhYik6ICBzeW1maWxlIG1pZ2h0IGJlIHplcm8sIGNvcGUuCgkqIGV4ZWMuYyAoZXhlY19vcHMpOiAgQWRkX3N5bXNfYWRkciBpcyB2YWxpZCBpbiBvdXIgdHZlYy4KCShzZXRfc2VjdGlvbl9jb21tYW5kKTogIE5ldyBjb21tYW5kICgic2VjdGlvbiB4eHggeXl5IiAtLSBzaG91bGQKCWJlIHJlbmFtZWQgdG8gInNldCBzZWN0aW9uIHh4eCB5eXkiIEZJWE1FKSB3aGljaCBzZXRzIHRoZQoJYmFzZSBhZGRyZXNzIG9mIGEgc2VjdGlvbiBvZiB0aGUgZXhlYyBmaWxlLCBvdmVycmlkaW5nIHRoZQoJdmlydHVhbCBhZGRyZXNzIHRoYXQgQkZEIHJlcG9ydHMuCgpGcmkgQXByICA1IDE3OjE0OjM5IDE5OTEgIEpvaG4gR2lsbW9yZSAgKGdudSBhdCBjeWdpbnQuY3lnbnVzLmNvbSkKCgkqIGV4ZWMuYzogIEFkZCBhZGRfc3ltc19hZGRyX2NvbW1hbmQgdG8gZXhlY19vcHMsIHNvIHlvdSBjYW4KCWxvYWQgc3ltYm9scyBhdCBhbnkgYWRkcmVzcyB3aGlsZSBleGFtaW5pbmcgYW4gZXhlYyBmaWxlLgoKVGh1IEFwciAgNCAxMDowOTozNSAxOTkxICBKb2huIEdpbG1vcmUgIChnbnUgYXQgY3lnaW50LmN5Z251cy5jb20pCgoJKiB0bS1pMzg2di5oIChGTE9BVF9JTkZPKTogIERvbid0IGRlZmluZSBpdCwgc2luY2UgdGhlIGNvZGUKCWZvciBwcmludGluZyB0aGUgZmxvYXQgaW5mbyBpcyBob3N0LWRlcGVuZGVudCwgbm90Cgl0YXJnZXQtZGVwZW5kZW50LiAgRklYTUUuCgkqIGkzODYtcGluc24uYzogIE1vdmUgI2luY2x1ZGVzIHRvIHRvcCwgcmVtb3ZlIHVzZWxlc3Mgb25lcy4KCSogaTM4Ni10ZGVwLmM6ICBEb24ndCBib3RoZXIgaW5jbHVkaW5nIDwuLi4vcmVnLmg+IHNpbmNlIHdlCglkb24ndCB1c2UgaXQgKGFuZCBpdCBkb2Vzbid0IGV4aXN0IG9uIGhvc3Qgc3lzdGVtcykuCgoJKiBpZWVlLWZsb2F0LmMgKGllZWVfZXh0ZW5kZWRfdG9fZG91YmxlKTogIENvbnZlcnQgTmFOIHRvIEluZi4KCUNvbnZlcnQgbmVnYXRpdmUgbnVtYmVycyBwcm9wZXJseS4KCShpZWVlX3Rlc3QpOiAgTWFrZSBudW1iZXJzIHJlYWxseSByYW5kb207IGZpeCBmb3JtYXQgYXJnLgoKCSogaW5mY21kLmMgKGF0dGFjaF9jb21tYW5kLCBkZXRhY2hfY29tbWFuZCk6ICBEb24ndCByZXBlYXQgb24gQ1IuCgkqIGNvcmUuYyAoY29yZV9kZXRhY2gpOiAgVW5wdXNoIGNvcmVfb3BzLCB3aGljaCBtaWdodCBub3QgYmUgb24KCXRvcC4gIFdlIHVzZWQgdG8ganVzdCBwb3AgdGhlIHRvcCwgd2hpY2ggYnJva2UgdGhpbmdzLiAgRG9uJ3QKCW5lZWQgZG9udF9yZXBlYXQoKSBhbnkgbW9yZS4KCShjb3JlX2ZpbGVfY29tbWFuZCk6ICBQc3N0ISAgRG9uJ3QgcmVwZWF0IGl0LgoJKiByZW1vdGUtbmluZHkuYyAobmluZHlfZGV0YWNoKTogIERvbid0IG5lZWQgZG9udF9yZXBlYXQoKSBub3cuCgkqIGV4cHByaW50LmMgKHByaW50X3N1YmV4cCk6ICBBdm9pZCBzd2l0Y2ggZmFsbHRocnUgb24KCUJJTk9QX0FTU0lHTl9NT0RJRlksIHNvIHdlIGNhbiBwcmludCArPSBhbmQgc3VjaC4KCSogZnJhbWUuaDogIEZpeCB0eXBvLgoJKiBpbmZsb3cuYyAoa2lsbF9jb21tYW5kKTogIEFmdGVyIGtpbGxpbmcgaW5mZXJpb3IsIHByaW50IG91cgoJY3VycmVudCBmcmFtZSBpbiB0aGUgY29yZSBmaWxlLCBpZiB3ZSBoYXZlIG9uZS4KCShnZW5lcmljX21vdXJuX2luZmVyaW9yKTogIFdoZW4gaW5mZXJpb3IgZGllcywgZWl0aGVyIHNlbGVjdAoJdGhlIGN1cnJlbnQgZnJhbWUgKGluIHRoZSBuZXcgdGFyZ2V0LCBlLmcuIGNvcmUgZmlsZSksIG9yIAoJc2V0IGJvdGggdGhlIGN1cnJlbnQgYW5kIHNlbGVjdGVkIGZyYW1lcyB0byBOVUxMLgoKCUNoYW5nZXMgZnJvbSBQZXRlciBTY2hhdWVyLgoKCSogaW5mcHRyYWNlLmM6ICBBdm9pZCA8c3lzL3B0cmFjZS5oPiBvbiBVU0cuCgoJKiBNYWtlIGFsbCBmaWxlIG5hbWVzIGZpdCBpbiAxNCBjaGFyYWN0ZXJzIChzaWdoIGFuZCBkYW1uISk6CgltdiBocDMwMGhwdXgteGRlcC5jIGhwMzAwdXgteGRlcC5jCgltdiBzeW1tZXRyeS14ZGVwLmMgc3ltbS14ZGVwLmMKCW12IHN5bW1ldHJ5LXRkZXAuYyBzeW1tLXRkZXAuYwoJbXYgY29udmV4LW9wY29kZS5oIGNvbnZ4LW9wY29kZS5oCgltdiB0bS12eHdvcmtzOTYwLmggdG0tdng5NjAuaAoJbXYgdG0tdnh3b3JrczY4LmggdG0tdng2OC5oCgltdiBNYWtlZmlsZS5zcmNkaXIgTWFrZWZpbGUuc2RpcgoJbXYgZ2RiLWludC50ZXhpbmZvIGdkYmludC50ZXhpbmZvCgltdiByZW1vdGUtc2EubTY4ay5zaGFyIHJlbS1tNjhrLnNoYXIKCW12IHJlbW90ZS1tdWx0aS5zaGFyIHJlbS1tdWx0aS5zaGFyCgkqIE1ha2VmaWxlLmRpc3QsIFJFQURNRSwgY29uZmlnLmdkYiwgY29udmV4LXBpbnNuLmMsCgl0Y29uZmlnL3N5bW1ldHJ5LCB0Y29uZmlnL3Z4d29ya3M5NjAsIHRjb25maWcvdnh3b3JrczY4LAoJeGNvbmZpZy9ocDMwMGhwdXgsIHhjb25maWcvc3ltbWV0cnk6ICBDaGFuZ2UgbmFtZXMgdG8gc2hvcnRlcgoJbmFtZXMuCgoJKiBjb21tYW5kLmMgKHVzZXJfaW5mb18xLCB1c2VyX2luZm8pOiAgTmV3IGNvbW1hbmQgZm9yIGxpc3RpbmcKCXRoZSB1c2VyLWRlZmluZWQgY29tbWFuZHMuCgpXZWQgQXByICAzIDE1OjAwOjI2IDE5OTEgIEpvaG4gR2lsbW9yZSAgKGdudSBhdCBjeWdpbnQuY3lnbnVzLmNvbSkKCgkqIGRieHJlYWQuYyAocmVhbGx5X2ZyZWVfcGVuZGluZ3MpOiAgQ2xlYXIgZmlsZV9zeW1ib2xzCglhbmQgZ2xvYmFsX3N5bWJvbHMgYWZ0ZXIgZnJlZWluZyB0aGVtOyBvdGhlcndpc2UsIHJ1bm5pbmcKCXRoaXMgZnVuY3Rpb24gdHdpY2UgKGlmIGl0IGFwcGVhcnMgdHdpY2Ugb24gdGhlIGNsZWFudXAKCWNoYWluKSwgd2UgdHJ5IHRvIGZyZWUgdGhpbmdzIHR3aWNlLgoKCSogZGJ4cmVhZC5jIChyZWFkX2RieF9zeW10YWIpOiAgQ2FsY3VsYXRlIGVuZF9vZl90ZXh0X2FkZHIKCWJhc2VkIG9uIHRleHRfYWRkciAodGhlIGFkZHJlc3Mgb2YgdGV4dCBpbiBjb3JlKSwgbm90IG9uIGFkZHIgKHRoZQoJb2Zmc2V0IGJldHdlZW4gdGV4dCBpbiB0aGUgLm8gZmlsZSBhbmQgaW4gY29yZSkuICBUaGlzIGNoYW5nZQoJaXMgZnJvbSBQZXRlciBTY2hhdWVyLgoKCSogbWFpbi5jOiAgRGVmaW5lIEFMTF9DTEVBTlVQUyBhcyBhIGNhc3Qgb2YgemVyby4KCShyZXR1cm5fdG9fdG9wX2xldmVsKTogIFVzZSBpdC4KCShtYWluKTogIERvIGFsbCBjbGVhbnVwcyBhZnRlciBlYWNoIGNvbW1hbmQgcnVuIGFzIHBhcnQKCW9mIHRoZSBnZGIgc3RhcnR1cCBzZXF1ZW5jZS4gIEFsc28gZG8gYWxsIGNsZWFudXBzIGJlZm9yZQoJZW50ZXJpbmcgdGhlIGNvbW1hbmQgbG9vcCwgYW5kIGV2ZXJ5IHRpbWUgd2UgZXhpdCB0aGUgY29tbWFuZAoJbG9vcCBhbmQgcmVlbnRlci4gIEJlZm9yZSwgdGhlIGNsZWFudXBzIGZyb20gdGhlIHN0YXJ0dXAgc2VxdWVuY2UKCXdlcmUgYmVpbmcgbGVmdCB1bmRvbmUgdW50aWwgdGhlIGZpcnN0IGVycm9yIQoJKGNvbW1hbmRfbG9vcCk6ICBSZW5hbWUgZG9fbm90aGluZyBjbGVhbnVwIHRvIGNvbW1hbmRfbG9vcF9tYXJrZXIKCXNvIHdlIGNhbiBzZWUgaXQgZWFzaWx5IHdoZW4gZXhhbWluaW5nIHRoZSBjbGVhbnVwIGNoYWluLgoJKGluaXRfc2lnbmFscyk6ICBBZGQgYW5vdGhlciBkb19ub3RoaW5nIGZvciBzaWduYWwgaGFuZGxpbmcuCgkocXVpdF9jb21tYW5kKTogIE9ubHkgdHJ5IHRvIGtpbGwgdGFyZ2V0IGlmIGl0IGhhcyBleGVjdXRpb24uCglQcm9ibGVtcyBpbiB0aGUgdGFyZ2V0IHN0YWNrIGdvdCB1cyBpbnRvIGEgc3RhdGUgd2hlcmUKCWluZmVyaW9yX3BpZCB3YXMgbm9uemVybyBidXQgbm9uZSBvZiB0aGUgdGFyZ2V0cyBoYWQgZXhlY3V0aW9uLgoJSW4gdGhpcyBzdGF0ZSB5b3UgY291bGRuJ3QgZXhpdCBnZGIuCgoJKiBkYnhyZWFkLmM6ICBUd28gY2hhbmdlcyBmcm9tIFBldGVyIFNjaGF1ZXIuCgkoZWNob19jb21tYW5kKTogIEZmbHVzaCBvdXRwdXQgYWZ0ZXIgYW4gZWNobyBjb21tYW5kLgoJKHNob3dfaGlzdG9yeSk6ICBQYXNzIGFsbCBhcmdzIHRvIGNtZF9zaG93X2xpc3QuCgoJKiB1dGlscy5jIChpbml0X21hbGxvYyk6ICBDYWxsIG10cmFjZSB0byB0dXJuIG9uIHRyYWNpbmcKCWlmIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBNQUxMT0NfVFJBQ0UgaXMgc2V0IHRvIGEgZmlsZSBuYW1lLgoJKiBtdHJhY2UuYzogIEFkZCBzb3VyY2UgZmlsZSB3aGljaCBwcm92aWRlcyBhIGxvZyBvZiBldmVyeSBtYWxsb2MsCglmcmVlLCBhbmQgcmVhbGxvYyB0byBhIHRyYWNlIGZpbGUuCgkqIG10cmFjZS5hd2s6ICBBZGQgc291cmNlIGZpbGUgd2hpY2ggYW5hbHl6ZXMgdGhlIHRyYWNlIGZpbGUuCgkqIE1ha2VmaWxlLmRpc3QgKEdOVV9NQUxMT0MsIE1BTExPQ1NSQyk6ICBBZGQgbXRyYWNlLntjLG8sYXdrfS4KCShWRVJTSU9OKTogIFJvbGwgdG8gMy45NC4zLgoKCSogYnJlYWtwb2ludC5jIChicmVha3BvaW50XzEpOiAgQWRkIGEgc3BhY2UgdG8gImkgd2F0Y2giIG91dHB1dC4KCShjaGVja19kdXBsaWNhdGVzKTogIERvbid0IGJvdGhlciB3aXRoIHdhdGNocG9pbnRzLgoJKHNldF9yYXdfYnJlYWtwb2ludCk6ICBDb21tZW50IGFib3V0IGRhbmdlciBvZiB0aGlzIHJvdXRpbmUuCgkod2F0Y2hfY29tbWFuZCk6ICBQYXJzZSBhbmQgZXZhbCBhbGwgYXJncyBiZWZvcmUgY2FsbGluZwoJc2V0X3Jhd19icmVha3BvaW50LgoKCSogc29saWIuYyAoZmluZF9zb2xpYik6ICBBdm9pZCBlcnJvciBpbiByZWZlcmVuY2luZyBtZW1vcnkgdG8KCXNlZSBpZiBhbnkgbW9yZSBzaGFyZWQgbGlicmFyaWVzIGhhdmUgYmVlbiBhZGRlZC4gIFRoaXMgaXMKCXBhcnRpY3VsYXJseSB1c2VmdWwgaWYgdGhlIHRhcmdldCBoYXMgdGVybWluYXRlZC4gIEJ1ZyByZXBvcnRlZAoJYnkgUGV0ZXIgU2NoYXVlci4KCglDaGFuZ2VzIGZyb20gUGV0ZXIgU2NoYXVlciA8cGVzcmVtQHJlZ2VudC5lLXRlY2huaWsudHUtbXVlbmNoZW4uZGU+CglpbiBicmluZ2luZyB1cCAzLjk0LjIgb24gdGhlIFN1bi0zLgoKICAgICAgICAqIE1ha2VmaWxlLmRpc3Q6ICBJbmNsdWRlIENGTEFHUyBpbiBydWxlIGZvciBjcGx1cy1kZW0uby4KICAgICAgICAqIGJyZWFrcG9pbnQuYyAoZW5hYmxlX2JyZWFrcG9pbnQpOiAgQ2hlY2sgZm9yIHZhbGlkIHdhdGNocG9pbnQKICAgICAgICBleHByZXNzaW9uIChpbiBzY29wZSkgYmVmb3JlIHJlZW5hYmxpbmcgd2F0Y2hwb2ludC4KCSogc2lnbmFtZS5jIChpbml0X3NpZ3MpOiAgQWRkIG1pc3NpbmcgZGVjbGFyYXRpb24gb2YgaSwgZml4CglzeXNfc2lnbGlzdCBkZWNsYXJhdGlvbi4KCSogc291cmNlLmMgKGxpc3RfY29tbWFuZCk6ICBGaXhlZCByYW5nZSBjb21wdXRhdGlvbiB0byB1c2UKCWxpbmVzX3RvX2xpc3QgKCkuCgkqIHN0YWNrLmMgKGJhY2t0cmFjZV9jb21tYW5kKTogIERvIG5vdCBhbGxvdyBjb21tYW5kIGlmIHRhcmdldCBoYXMKCW5vIHN0YWNrLCBwcmludCBpbmZvcm1hdGl2ZSBlcnJvciBtZXNzYWdlLgoJKiB0YXJnZXQuYyAodGFyZ2V0X2NvbW1hbmQpOiAgRG8gbm90IHdyaXRlIGludG8gY29tbWFuZCBsaW5lCgliZWNhdXNlIHRoaXMgZmFpbHMgaWYgdGhlIHRhcmdldCBjb21tYW5kIGlzIHVzZWQgaW4gYSB1c2VyIGRlZmluZWQKCWNvbW1hbmQuICBbVGhpcyBjaGFuZ2Ugd2FzIGVuaGFuY2VkIGJ5IGdudSB0byBzdXBwb3J0IGFueS0KCXVuaXF1ZS1wcmVmaXggbWF0Y2hpbmcgb24gdGFyZ2V0IG5hbWVzLl0KCSogdmFsb3BzLmMgKHZhbHVlX3N0cnVjdF9lbHQpOiAgQXZvaWQgaW5maW5pdGUgbG9vcCBvbiBhbgoJZXJyb25lb3VzIGF0dGVtcHQgdG8gcHJpbnQgdGhlIG1lbWJlciBvZiBmdW5jdGlvbiAodHJ5IHAgbWFpbi5wKS4KCk1vbiBBcHIgIDEgMTc6MDU6NDUgMTk5MSAgSm9obiBHaWxtb3JlICAoZ251IGF0IGN5Z2ludC5jeWdudXMuY29tKQoKCSogZXhwcmVhZC55IChuYW1lX25vX3R5cGVuYW1lKTogIEF2b2lkIHJlZHVjZS9yZWR1Y2UgZXJyb3JzCgljYXVzZWQgYnkgYW1iaWd1aXR5IGluIGhhbmRsaW5nIE5BTUVfT1JfSU5UIGFuZCBOQU1FX09SX1VJTlQuCglTaW5jZSB0aGUgR0RCIHBhcnNlciByZWFsbHkgZG9lc24ndCB1c2UgbmFtZV9ub190eXBlbmFtZSBpbiBhCgluYW1lLW9ubHkgY29udGV4dCwgdGhlIHBhcnNlciBjYW4ndCB0ZWxsIHRoZSBkaWZmIGJldHdlZW4KCW5hbWVzIGFuZCBudW1iZXJzIGhlcmUuICBBdm9pZCBhbGxvd2luZyBhIG5hbWVfbm9fdHlwZW5hbWUKCXRvIGJlIGEgTkFNRV9PUl8qSU5UIHRvIHJlc29sdmUgdGhlIGNvbmZsaWN0LgoKU3VuIE1hciAzMSAyMDoxMjowNyAxOTkxICBKb2huIEdpbG1vcmUgIChnbnUgYXQgY3lnaW50LmN5Z251cy5jb20pCgoJQnVnZml4ZXMgZnJvbSBNYXJrIEZveCAobWFya2ZAd3JzLmNvbSkgKHRlc3Q9dGVzdEZpZWxkLmMpOgoKCSogdmFscHJpbnQuYyAodmFsX3ByaW50X2ZpZWxkcyk6ICBiaXRmaWVsZCBwcmludGluZyBkaWRuJ3QgaGFuZGxlCglieXRlIG9yZGVyLiAgSW5kaXJlY3QgdGhyb3VnaCBhIGZldyBtb3JlIGZucyB0byBjb3BlLgoKCSogdmFsdWVzLmMgKG1vZGlmeV9maWVsZCk6ICBhbHNvIGNvcGUgd2l0aCBieXRlIG9yZGVyLgoKU2F0IE1hciAyMyAxMDowMjoyMSAxOTkxICBKb2huIEdpbG1vcmUgIChnbnUgYXQgY3lnaW50LmN5Z251cy5jb20pCgoJQ2xlYW51cCBmb3IgcmVsZWFzZSAzLjk0LjI6CgoJKiBNYWtlZmlsZS5kaXN0OiBQdWxsIFJFTU9URV9PQlMuICBGaXggc2FiZXIgaW5jbHVkZXMgZm9yIEJGRAoJaW5jbHVkZSBmaWxlcy4gIFJvbGwgdmVyc2lvbiB0byAzLjk0LjIuCgkKCSogY29mZnJlYWQuYyAoaW5pdF9zdHJpbmd0YWIpOiAgUmVhZCBsZW5ndGggaW50byB1bnNpZ25lZCBjaGFyCglhcnJheSBiZWZvcmUgc3dhcHBpbmc7IGRvbid0IGFzc3VtZSAzMi1iaXQgbG9uZ3MuCgoJKiB0YXJnZXQuYyAodGFyZ2V0X2luZm8pOiBEb24ndCBib3RoZXIgd2l0aCBnZXRfc3ltX2ZpbGUsIGp1c3QgdXNlCgl0aGUgc3ltZmlsZSBnbG9iYWwgdmFyaWFibGUuCgkqIHN5bXRhYi5oLCBzeW1maWxlLmMgKGdldF9zeW1fZmlsZSk6ICBEZWxldGUgaXQuCgoJKiBkYnhyZWFkLmMgKGRieF9zeW1maWxlX2luaXQpOiAgRG9uJ3QgZGVwZW5kIG9uIGxvbmcgPT0gNCBieXRlcy4KCShkZWZpbmVfc3ltYm9sKTogIFNldCBzeW1ib2wgbGluZSBudW1iZXIgdG8gMCBpZiBub3QgZ2NjLWNvbXBpbGVkLgoJKHJlYWRfdHlwZSk6ICBSZXBsYWNlIG9uZSBtb3JlIGVycm9yKCkgd2l0aCBjb21wbGFpbigpLgoKCSogbWlwc3JlYWQuYyAocGFyc2VfcGFydGlhbF9zeW1ib2xzKTogIFJlcGxhY2UgcHJpbnRmIHdpdGggY29tcGxhaW4uCgoJKiBpOTYwLXRkZXAuYzogIEZpeCBjb3B5cmlnaHQgYXR0cmlidXRpb24uCgoJKiBjb25maWcuZ2RiOiAgUXVvdGUgYWxsIGJhY2txdW90ZXMgaW4gZG91YmxlcXVvdGVzLiAgWW91IGNhbgoJcXVvdGUgbWUgb24gdGhhdC4gIEJTRCA0LjQgc2hlbGwgZm91bmQgdGhpcyBvbmUuCgoJKiBpbmZwdHJhY2UuYyAodGhyb3VnaG91dCk6ICBUaGUgdGhpcmQgYXJndW1lbnQgdG8gcHRyYWNlIGlzIGFuCglpbnQgKiwgbm90IGFuIGludC4KCgkqIGluZnJ1bi5jICh3YWl0X2Zvcl9pbmZlcmlvcik6ICBXaGVuIHByb2dyYW0gaGFzIHRlcm1pbmF0ZWQsIHdlCgloYXZlIHRvIGNhbGwgdGFyZ2V0X3Rlcm1pbmFsX291cnMgYmVmb3JlIHdlIHBvcCB0aGF0IHRhcmdldCBvZmYKCXRoZSBzdGFjayAoZS5nLiBiZWZvcmUgYSBjYWxsIHRvIHRhcmdldF9raWxsIG9yCgl0YXJnZXRfbW91cm5faW5mZXJpb3IpLiAgVGhpcyBmaXhlcyBwcm9ibGVtIHdoZXJlIGEgcHJvZ3JhbQoJdGVybWluYXRlcywgdGhlbiBHREIgc3RvcHMgZm9yICh0dHkgb3V0cHV0KSBhbmQgeW91IGhhdmUgdG8gdHlwZQoJImZnIiB0byB0aGUgc2hlbGwgdG8gcmVzdW1lIGl0LiAgRklYTUU6ICBUaGlzIGNvZGUgZm9yIHdoYXQgdG8KCWRvIGFmdGVyIHRlcm1pbmF0aW9uIHJlYWxseSBzaG91bGQgYmUgaW4gbm9ybWFsX3N0b3AgaW5zdGVhZC4KCgkqIGdkYmNvcmUuaCAocmVhZF9tZW1vcnlfY2hlY2spOiAgQ2hhbmdlIGRlY2xhcmF0aW9uOyBpdCBjaGFuZ2VkCgluYW1lcyBtb250aHMgYWdvLgoKCSogdGVybWluYWwuaDogIEluY2x1ZGUgPHNndHR5Lmg+IGJlZm9yZSA8c3lzL2lvY3RsLmg+LCBzaW5jZSBpbiBCU0QKCTQuNCBwcmVyZWxlYXNlcywgdGhpcyBhdm9pZHMgYSBidWcgaW4gdGhlaXIgc2d0dHkgY29tcGF0YWJpbGl0eQoJc3VwcG9ydC4KCSogcmVtb3RlLmM6ICBVc2UgdGVybWluYWwuaCByYXRoZXIgdGhhbiBoYW5kLXJvbGxpbmcgdGhlIHNhbWUuCgoJKiBzaWduYW1lLmMsIHNpZ25hbWUuaCAocHNpZ25hbCk6ICBBcmcgaXMgdW5zaWduZWQsIG5vdCBpbnQuCgkqIHV0aWxzLmMgKHN0cnNhdmUsIHN0cnN0cik6ICBGaXggYXJnIHR5cGVzLgoJKiB2YWxwcmludC5jICh2YWxfcHJpbnQpOiAgbGludAoKCU1JUFMgc3ltYm9sIHRhYmxlIHN1cHBvcnQgZnJvbSBQZXIgQm90aG5lcjoKCgkqIHN5bWZpbGUuYyAoc3ltdGFiX2Zucyk6ICBSZW1vdmUgaW5pdGlhbGl6ZXIgdGFibGUgdGhhdCBuZWVkcyB0bwoJYmUgaGFja2VkIGZvciBlYWNoIG5ldyBzeW1ib2wgZmlsZSBmb3JtYXQgc3VwcG9ydGVkLgoJKGFkZF9zeW10YWJfZm5zKTogIE5ldyBmdW5jdGlvbiwgY2hhaW5zIHN5bWJvbCB0YWJsZQoJaGFuZGxlcnMgaW50byB0aGUgZ2xvYmFsIGxpc3QuCgkoc3ltZmlsZV9pbml0KTogIFNlYXJjaCB0aGlzIGxpc3QuCgkqIHN5bWZpbGUuaDogIEFkZCBuZXh0IHBvaW50ZXIsIGRlY2xhcmUgYWRkX3N5bXRhYl9mbnMuCgkqIGNvZmZyZWFkLmMgKF9pbml0aWFsaXplX2NvZmZyZWFkKTogQ2FsbCBhZGRfc3ltdGFiX2Zucy4KCSogZGJ4cmVhZC5jIChfaW5pdGlhbGl6ZV9kYnhyZWFkKTogIENhbGwgYWRkX3N5bXRhYl9mbnMuCgoJKiBtaXBzcmVhZC5jIChwc3ltdGFiX3RvX3N5bXRhYl8xKTogcmV0dXJuIHZvaWQgaW5zdGVhZCBvZiAoc3RydWN0CglzeW1ib2wgKikuICBUaHVzLCB3ZSBubyBsb25nZXIgbmVlZCB0aGUgaGFjayB0byB0cmFzaAoJcHN0LT5maWxlbmFtZS4gIEdvb2QsIHNpbmNlIHRoYXQgaGFjayBjb25mdXNlZCBjb2RlIGluIHN5bWZpbGUuYyEKCgkocmVvcmRlcl9zeW10YWJzLCBkZXN0cm95X2FsbF9zeW10YWJzKTogIFJlbW92ZWQgc3RhdGljCglhbGxfc3ltdGFicywgd2hpY2ggd2FzIHVzZWQgdG8gcXNvcnQgc3ltdGFicyBpbiByZW9yZGVyX3N5bXRhYnMuCglJbnN0ZWFkLCB0aGUgbGF0dGVyIG5vdyB1c2VzIGEgdGVtcG9yYXJ5IGFycmF5IChzdGFjay1hbGxvY2F0ZWQKCWZyb20gYW4gb2JzdGFjaywgYW5kIHRoZW4gZnJlZWQpLgoKCShwYXJzZV9zeW1ib2wpOiAgQWRkZWQgYSBoYWNrIHRvIGZpeCB1cCBCTE9DS197U1RBUlQsRU5EfSBpZiB0aGV5CgloYXZlbid0IGJlZW4gc2V0IGluIHRoZSBvdXRlcm1vc3Qgc3RCbG9jayBvZiBhIHByb2NlZHVyZS4gVGhpcyB3YXMKCWEgcHJvYmxlbSB3aXRoIGY3NyBiaW5hcmllcyBvbiBVbHRyaXggNC4/LgoKCShuZXdfc3ltdGFiLCBuZXdfc3ltYm9sLCBuZXdfdHlwZSk6ICBDb250aW51ZSBjaGFuZ2luZyBjb2RlIHRvIHVzZQoJb2JzdGFja3MgbW9yZSBhbmQgb3RoZXJ3aXNlIGNvbmZvcm0gdG8gZGJ4cmVhZCBpbnRlcm5hbCBzdHlsZS4KCU1hZGUgdGhlIGZyZWVfY29kZSBvZiBzeW10YWJzIGJlIGZyZWVfbGluZXRhYmxlIChhcyBpbiBkYnhyZWFkKQoJaW5zdGVhZCBvZiBmcmVlX2NvbnRlbnRzLiAgVGhpcyBpbXBsaWVzIG1lbW9yeSBsZWFrcyB3aGVuIHJlYWRpbmcKCWEgbmV3IHN5bWJvbCB0YWJsZSwgdW50aWwgdGhlIGNvbnZlcnNpb24gaXMgZmluaXNoZWQuIERpZCBjaGFuZ2UKCShzdHJ1Y3Qgc3ltYm9sKSBhbmQgKHN0cnVjdCB0eXBlKSB0byBiZSBhbGxvY2F0ZWQgb24gdGhlCglzeW1ib2xfb2JzdGFjay4gIEJsb2NrcyBhbmQgYmxvY2t2ZWN0b3JzIGFyZSBhbW9uZyB0aGUgdGhpbmdzCglzdGlsbCAibGVha2luZy4iCgoJKiBtaXBzcmVhZC5jIChwYXJzZV9wYXJ0aWFsX3N5bWJvbHMsIHBhcnNlX2Zkcik6ICBJdCBoYXNuJ3QgYmVlbgoJdGVzdGVkIG11Y2gsIGJ1dCBpdCBzb2x2ZWQgb25lIHByb2JsZW0gKHJlcG9ydGVkIGJ5IE1laXNzbmVyKSwgYW5kCgljbGVhbnMgdXAgc29tZSBvdGhlciB0aGluZ3MuICBUaGUgcHJvYmxlbSBoYXBwZW5lZCB3aGVuIGFuCglpbmNsdWRlZCBmaWxlIGNvbnRhaW5zIGFjdHVhbCBjb2RlIChmdW5jdGlvbnMpIGFuZCBub3QganVzdAoJZGVmaW5pdGlvbnMuIFRoZSBtaXBzIGNvZmYgaXMgYSBsaXR0bGUgaW5jb252ZW5pZW50IHRoZXJlLCBzaW5jZQoJaXQgbWF5IGNhdXNlIGEgcHJvY2VkdXJlIHRvIGJlIG1hcHBlZCB0byB0aGUgd3JvbmcgcHN5bXRhYi4KCgkqIG1pcHMtdGRlcC5jIChoZXVyaXN0aWNfcHJvY19kZXNjKTogIE1pbm9yIGNsZWFudXAuCgkqIG1pcHMteGRlcC5jIChmZXRjaF9jb3JlX3JlZ2lzdGVycyk6ICBNaW5vciBjbGVhbnVwLiAgRklYTUUsCgl0aGlzIHdpbGwgbmVlZCB3b3JrIGZvciB0aGUgbmV3IGNvcmUgcGFyYWRpZ20uCgoJT3Bjb2RlIHBhdGNoZXMgZnJvbSB0aGUgbmV0OgoKCSogbWlwcy1vcGNvZGUuaDogZml4IGluY29ycmVjdCBkaXNhc3NlbWJseSBvZiB0aGUgbWZjMSwgY2ZjMSwgYW5kCgljdGMxIGluc3RydWN0aW9ucy4gQWxzbywgdGhlIGN2dC5kLncgYW5kIGN2dC5zLncgaW5zdHJ1Y3Rpb25zIHdlcmUKCW1pc3NpbmcgYWx0b2dldGhlciAtIHRoZXkgYXJlIGFkZGVkIGhlcmUuICBGcm9tIEJydWNlIEJhdW1hbi4KCSogbWlwcy1vcGNvZGUuaDogIFRoZSBsb3cgbWFzayBmb3IgQzAgaW5zdHJ1Y3Rpb25zIHdhcyB0b28gc21hbGwuCglGcm9tIEdhcnJldHQgTGF1LiAgSSBtb2RpZmllZCB0aGUgZml4IHRvIGNoZWNrIHRoZSBlbnRpcmUgMzItYml0CglvcGNvZGUuCgoJKiBuczMyay1vcGNvZGUuaDogIEZpeCBvcGNvZGVzIGZvciBkZWl3IGFuZCBkZWlkLiAgRnJvbSBCcnVjZQoJQmF1bWFuLgoKVGh1IE1hciAyMSAxMjo1Njo0NiAxOTkxICBKb2huIEdpbG1vcmUgIChnbnUgYXQgY3lnaW50LmN5Z251cy5jb20pCgoJUm9sbCBpbiBjaGFuZ2VzIGZyb20gUGVyIEJvdGhuZXIgKFR1ZSwgMjUgU2VwIDkwIDExOjExOjA0KToKCgkqIGRieHJlYWQuYyAocmVhZF90eXBlKTogUG9pbnRlciBzdWJ0cmFjdGlvbiAodmFsdWVfc3ViIGluCgl2YWxhcml0aC5jKSBzb21ldGltZXMgZmFpbGVkIGJlY2F1c2UgdGhlIHR5cGVzIG9mIHRoZQoJIHBvaW50ZXJzIGJlaW5nIHN1YnRyYWN0ZWQgd2VyZSBub3QgaWRlbnRpY2FsLgoJVGhlc2UgZGlmZmVyZWQgYmVjYXVzZSBkYnhyZWFkLmMgd2FzIGFsbG9jYXRpbmcgcG9pbnRlciB0eXBlcwoJdXNpbmcgZGJ4X2FsbG9jX3R5cGUrc21hc2hfdG9fcG9pbnRlcl90eXBlIGluc3RlYWQgb2YKCWxvb2t1cF9wb2ludGVyX3R5cGUuIEkgZmFpbGVkIHRvIGZpbmQgYSBqdXN0aWZpY2F0aW9uIGZvciB0aGUKCWZvcm1lciwgc28gSSBjaGFuZ2VkIGl0IHRvIHVzZSB0aGUgbGF0dGVyLiBTaW1pbGFybHksIEkKCXJlcGxhY2VkIHNtYXNoX3RvX2Z1bmN0aW9uX3R5cGUgYnkgbG9va3VwX2Z1bmN0aW9uX3R5cGUsCglhbmQgc21hc2hfdG9fcmVmZXJlbmNlX3R5cGUgYnkgbG9va3VwX3JlZmVyZW5jZV90eXBlLgoKCSogbWlwc3JlYWQuYyAocGFyc2Vfc3ltYm9sLCB1cGdyYWRlX3R5cGUsIHBhcnNlX3Byb2NlZHVyZSwgCglfaW5pdGlhbGl6ZV9taXBzcmVhZCk6ICBjb3JyZXNwb25kaW5nIGNoYW5nZXMuCgoJKiBzeW10YWIuYyAoc21hc2hfdG9fe3BvaW50ZXIscmVmZXJlbmNlLGZ1bmN0aW9ufV90eXBlKTogZWxpbWluYXRlLgoKCSogc291cmNlLmMgKG1vZF9wYXRoKTogRG8gdGlsZGVfZXhwYW5kIG9uIGVhY2ggY29tcG9uZW50IG9mIHRoZSBwYXRoLAoJcmF0aGVyIHRoYW4gb24gdGhlIChsaXN0IG9mKSBwYXRocyBhcyBhIHdob2xlLgoJKHByaW50X3NvdXJjZV9saW5lcyk6ICBTZXQgZmlyc3RfbGluZV9saXN0ZWQgaW4gYWRkaXRpb24gdG8KCWN1cnJlbnRfc291cmNlX3N5bXRhYiBhbmQgY3VycmVudF9zb3VyY2VfbGluZS4gIElmIHRoZSBzb3VyY2Ugd2FzCglub3QgZmluZGFibGUsIGFmdGVyIGEgImRpciIgY29tbWFuZCB0byBmaXggdGhlIHByb2JsZW0sCglhICJsaXN0IiB3b3VsZCBnZXQgdGhlIHdyb25nIGxpbmVzLgoKCVdoaWxlIEkgd2FzIHRoZXJlLi4uIChnbnUpOgoKCSogZGJ4cmVhZC5jIChyZWFkX3R5cGUpOiAgQ2hhbmdlIGVycm9yIHRvIGNvbXBsYWludC4KClRodSBNYXIgMjEgMTI6NTY6NDYgMTk5MSAgSm9obiBHaWxtb3JlICAoZ251IGF0IGN5Z2ludC5jeWdudXMuY29tKQoKCUZpcnN0IGF0dGVtcHQgYXQgZGV0YWlsZWQgdW5kZXJzdGFuZGluZyBvZiBzeW1ib2wgdGFibGUgbWVtb3J5IGFsbG9jLgoKCSogZGJ4cmVhZC5jIChkYnhfc3ltZmlsZV9yZWFkKTogIEZyZWUgb3VyIHN0cmluZyB0YWJsZSBpZiB3ZQoJYXJlbid0IHRoZSBtYWlubGluZS4gIEZyZWUgdGhlICJpbmZvIiBzdHJ1Y3Qgc2luY2Ugd2UncmUgZG9uZSB3aXRoCglpdC4gCgkoaW5pdF9wc3ltYm9sX2xpc3QpOiAgRnJlZSBhbnkgcHJldmlvdXNseSBhbGxvY2F0ZWQgcHN5bWJvbCBsaXN0cy4KCSgpOiBGSVhNRTogU2hvdWxkIHJlYWxsb2MtZG93biB0aGUgcHN5bWJvbCBsaXN0cyB3aGVuIGRvbmUgcmVhZGluZwoJdGhlIG1haW4gc3ltYm9sIGZpbGU/CgoJKiBzeW1taXNjLmMgKGZyZWVfc3ltdGFiKTogIEZyZWUgZnVsbG5hbWUgZmllbGQgdG9vLgoKCSogeG0taHAzMDBocHV4LmggKFVTRyk6ICAjdW5kZWYgdGhlbiAjZGVmaW5lIHNvIE1ha2VmaWxlIGNhbiAtRC4KCShSRUdJU1RFUl9BRERSKTogIE1ha2UgcmVzdWx0IHR5cGUgdW5zaWduZWQgaW50LgoKCSogeGNvbmZpZy97aTM4NiosaHAzMDBocHV4LGFsdG9zZ2FzLGFsdG9zfTogIEFsbCBjb25maWcgZmlsZXMgdGhhdAoJZGVmaW5lIFJFR0VYIG11c3QgYWxzbyBkZWZpbmUgUkVHRVgxIChpdHMgZGVwZW5kZW5jeSkuCgpUdWUgTWFyIDE5IDIxOjI4OjU3IDE5OTEgIEpvaG4gR2lsbW9yZSAgKGdudSBhdCBjeWdpbnQuY3lnbnVzLmNvbSkKCgkqIHRjb25maWcvaTk2MDogIE5vIGxvbmdlciB3b3JrcywgcG9pbnRzIHlvdSBhdCB2eHdvcmtzOTYwIG9yCgluaW5keTk2MC4KCgkqIHhnZGIuYywgWEdEQi1SRUFETUU6ICBSZW1vdmUgZmlsZS4gIFVzZXJzIGNhbiBnZXQgdGhlIG11Y2gKCWJldHRlciB4eGdkYi4KCSogTWFrZWZpbGUuZGlzdDogIFJlbW92ZSBhbGwgdHJhY2Ugb2YgeGdkYi4KCgkqIGJyZWFrcG9pbnQuYyAoYnJlYWtwb2ludF8xKTogIFBhc3MgZGVtYW5nbGUgYXJnIHRvCglwcmludF9hZGRyZXNzX3N5bWJvbGljLgoJKGNsZWFyX2JyZWFrcG9pbnRzKTogIFJlbW92ZSB1bnVzZWQgZnVuY3Rpb24uCgkoYnJlYWtwb2ludF9yZV9zZXRfb25lKTogIEd1dHMgb2YgYnJlYWtwb2ludF9yZV9zZXQuCgkoYnJlYWtwb2ludF9yZV9zZXQpOiAgVXNlIGNhdGNoX2Vycm9ycyB0byBkbyB0aGVtIGFsbCBhbnl3YXkuCgoJKiBnZGItaW50LnRleGluZm8gKEhvc3QgdmVyc3VzIFRhcmdldCk6ICBBZGQgc2VjdGlvbiBvbiB3aGF0IGlzCglhICJob3N0IiBmZWF0dXJlIHZlcnN1cyB3aGF0IGlzIGEgInRhcmdldCIgZmVhdHVyZS4KCgkqIGluZmNtZC5jIChwYXRoX2NvbW1hbmQsIHBhdGhfaW5mbyk6ICBIYW5kbGUgdGhlIFBBVEggdmFyaWFibGUKCShvYmplY3Qgc2VhcmNoIHBhdGgpIGFzIGNvbnZlbmllbnRseSBhcyB0aGUgc291cmNlIHNlYXJjaCBwYXRoLgoJKiBlbnZpcm9uLmMgKHNldF9pbl9lbnZpcm9uKTogIFNldCBzb21lIHZhcnMgaW4gR0RCJ3MgZW52aXJvbm1lbnQsCglpbiBhZGRpdGlvbiB0byB0aGUgY2hpbGQncy4gIFBBVEgsIEc5NjBCQVNFLCBHOTYwQklOIGZvciBzdGFydGVycy4KCSogc291cmNlLmMgKG1vZF9wYXRoKTogIE5ldyBmdW5jdGlvbiwgZnJvbSBndXRzIG9mCglkaXJlY3RvcnlfY29tbWFuZCwgbW9kaWZpZXMgYSBwYXRoLiAgVXNlZCBieSBwYXRoX2NvbW1hbmQuCgkoZGlyZWN0b3J5X2NvbW1hbmQpOiAgQ2FsbCBpdC4KCSogZGVmcy5oIChzdHJzYXZlKTogIERlY2xhcmUuCgoJKiB1dGlscy5jIChzZXZlbmJpdF9zdHJpbmdzKTogIEFkZCBuZXcgcHJpbnRpbmcgb3B0aW9uLgoJKHByaW50Y2hhcik6ICBVc2UgaXQuCgkoc3Ryc2F2ZSk6ICBQcm92aWRlIHRoaXMgaGFuZHkgaGVscGVyIHJvdXRpbmUuCgkoc2V0X3dpZHRoX2NvbW1hbmQpOiAgUmVuYW1lIHNldF9zY3JlZW5fd2lkdGhfY29tbWFuZC4KCShfaW5pdGlhbGl6ZV91dGlscyk6ICAic2V0IHNjcmVlbi13aWR0aCIgPT4gInNldCB3aWR0aCI7Cgkic2V0IHNjcmVlbi1oZWlnaHQiID0+ICJzZXQgaGVpZ2h0IjsgYWRkIHNldmVuYml0LXN0cmluZ3MuCgoJKiBpbmZjbWQuYyAoZG9fcmVnaXN0ZXJzX2luZm8pOiAgUHJpbnQgZmxvYXRpbmcgcG9pbnQgcmVnaXN0ZXJzCglpbiByYXcgaGV4IGFzIHdlbGwgYXMgZmxvYXQgZm9ybWF0LCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgaXMKCWEgInZpcnR1YWwiIGNvbnZlcnRpYmxlIHJlZ2lzdGVyLgoJKiB0bS1zcGFyYy5oIChQUklOVF9SRUdJU1RFUl9IT09LKTogIFByaW50IGV2ZXJ5IHBhaXIgb2YgZmxvYXQKCXJlZ3MgYXMgYSBkb3VibGUsIGp1c3QgaW4gY2FzZSBpdCdzIGJlaW5nIHVzZWQgdGhhdCB3YXkuCQoJKiB2YWx1ZXMuYyAodW5wYWNrX2xvbmcpOiAgQ29tbWVudCBvbiBhcnJheS9mdW5jdGlvbiBjb2VyY2lvbi4KCSh1bnBhY2tfZG91YmxlKTogIEFyZ3VtZW50IGlzIGluIHRhcmdldCBieXRlIG9yZGVyIG5vdy4gIEZvcgoJaW50ZWdlciBhcmd1bWVudHMsIGp1c3QgY2FsbCB1bnBhY2tfbG9uZyBhbmQgZmxvYXQgdGhlIHJlc3VsdC4KCSogbTY4ay10ZGVwLmM6IGluY2x1ZGUgZGVmcy5oIGZvciAiY29uc3QiIGhhbmRsaW5nLgoJKiByZW1vdGUtbmluZHkuYzogIFVzZSBpZWVlLWZsb2F0IHN0dWZmLgoJKG5pbmR5X2ZldGNoX3JlZ2lzdGVycyk6ICBVbnBhY2sgZG91YmxlIHJlZ3MgdG8gaG9zdCBkb3VibGUsIHRoZW4KCXRvIGV4dGVuZGVkLgoJKG5pbmR5X3N0b3JlX3JlZ2lzdGVycyk6ICBQYWNrIGV4dGVuZGVkcyB0byBob3N0IGRvdWJsZSwgZmxpcAoJYXJvdW5kIGJ5IG1pc3VzaW5nIHVucGFja19kb3VibGUsIHNlbmQgYXMgdGFyZ2V0IGRvdWJsZS4KCgkqIHRtLXZ4d29ya3M2OC5oIChGUkFNRV9DSEFJTik6ICBIYW5kbGUgY3VycmVudCBmcmFtZSBwb2ludGVyIG9mCgl6ZXJvLCBhcyB3aGVuIHN0b3BwZWQgYXQgdGhlIGZpcnN0IGluc3RydWN0aW9uIG9mIGEgcHJvY2Vzcy4KCgkqIGJsb2NrZnJhbWUuYzogIEZpeCBmaWxlbmFtZSBpbiBjb21tZW50IChwYXJhbS5oID0+IHRtLmgpLgoJKiBzcGFyYy10ZGVwLmMgKHNraXBfcHJvbG9ndWUpOiAgTW9yZSBleHBsaWNpdCBudWRnaW5nIGNvbW1lbnRzLgoJKiB0bS02OGsuaDogIEZpeCB0eXBvcy4KCkZyaSBNYXIgMTUgMDE6MDk6MzQgMTk5MSAgSm9obiBHaWxtb3JlICAoZ251IGF0IGN5Z2ludC5jeWdudXMuY29tKQoKCUNoYW5nZXMgZnJvbSBhIGJyaW5ndXAgb24gdGhlIERFQyBWYXggdW5kZXIgVWx0cml4IDQuMC4KCgkqIGNvcmVkZXAuYyAoZmV0Y2hfY29yZV9yZWdpc3RlcnMpOiAgUGFzcyBlbmQtYWRkcmVzcyBvZiByZWdpc3RlcgoJc2VjdGlvbiB0byByZWdpc3Rlcl9hZGRyIGFzIGV4cGVjdGVkLiAgRG9uJ3QgY2FsbCBzdXBwbHlfcmVnaXN0ZXIKCWlmIHdlJ2QganVzdCBwYXNzIGl0IGdhcmJhZ2UuCgoJKiBkYnhyZWFkLmMgKHJlYWRfZGJ4X3N5bXRhYik6ICBTa2lwIE5fTlNZTVMgb24gVWx0cml4LgoKCSogZXhlYy5jICh4ZmVyX21lbW9yeSk6ICBVc2UgYm9vbGVhbiB4ZmVyX2ZuIHJlc3VsdCwgbm90IGludC4KCgkqIHRhcmdldC5jIChwdXNoX3RhcmdldCwgdGFyZ2V0X2luZm8pOiAgQ2FzdCBlbnVtcyB0byBpbnQgZm9yIDwgb3IKCT4gY29tcGFyaXNvbi4KCgkqIHN0YWNrLmMgKHByaW50X2ZyYW1lX2luZm8pOiAgSWRlbnRpZnkgc291cmNlIGZpbGUgJiBsaW5lCglldmVuIGlmIHdlIGNhbid0IHByaW50IGl0LgoKCSogeG0tdmF4LmggKE1JU1NJTkdfVlBSSU5URik6ICBObyBsb25nZXIgbWlzc2luZyBpbiBVbHRyaXggVjQuMC4KClNhdCBNYXIgIDkgMTA6MDg6MjAgMTk5MSAgSm9obiBHaWxtb3JlICAoZ251IGF0IGN5Z2ludC5jeWdudXMuY29tKQoKCUNsZWFuIHVwIElFRUUgZmxvYXRpbmcgcG9pbnQgc3VwcG9ydC4KCgkqIGllZWUtZmxvYXQuaDogIE5ldyBmaWxlLgoJKiBpZWVlLWZsb2F0LmM6ICBXcml0ZSByZWFsIHJvdXRpbmVzIHRvIGNvbnZlcnQgYmV0d2VlbiBob3N0Cglkb3VibGVzIGFuZCB2YXJpb3VzIHRhcmdldCBJRUVFIGV4dGVuZGVkcy4KCSogbTY4ay14ZGVwLmM6ICBFbGltaW5hdGUgYXNzZW1ibGVyIGNvZGUgZm9yIGV4dGVuZGVkIGZsb2F0cy4KCSogeGNvbmZpZy97M2IxLGFsdG9zLGFsdG9zZ2FzLGhwMzAwYnNkLGlzaSxuZXdzLG5ld3MxMDAwLHN1bjJvczMsCglzdW4yb3M0LHN1bjMsc3VuM29zMyxzdW4zb3M0fTogIEVsaW1pbmF0ZSB1c2Ugb2YgbTY4ay14ZGVwLm8uCgkqIHRtLWk5NjAuaCwgdG0tNjhrLmggKFJFR0lTVEVSX0NPTlZFUlRfVE9fVklSVFVBTCwKCVJFR0lTVEVSX0NPTlZFUlRfVE9fUkFXKTogIFVzZSBpZWVlX2V4dGVuZGVkX3RvX2RvdWJsZSBhbmQKCWRvdWJsZV90b19pZWVlX2V4dGVuZGVkLgoJKiBpOTYwLXRkZXAuYzogIERlZmluZSBleHRfZm9ybWF0X2k5NjAuCgkqIG02OGstdGRlcC5jOiAgRGVmaW5lIGV4dF9mb3JtYXRfNjg4ODEuCgkqIHNwYXJjLXRkZXAuYzogIERlZmluZSBleHRfZm9ybWF0X3NwYXJjLCB0aG91Z2ggdW51c2VkLgoJKiBNYWtlZmlsZS5kaXN0IChIRklMRVMpOiAgQWRkIGllZWUtZmxvYXQuaC4KCSogaW5mdGFyZy5jOiAjaW5jbHVkZSAiaWVlZS1mbG9hdC5oIiBmb3IgdGhlIFJFR0lTVEVSX0NPTlZFUlQKCW1hY3Jvcy4KCglPYnNvbGV0ZSB0aGUgImNvZmZzdHJpcCIgcHJvZ3JhbSBpbiBmYXZvciBvZiB1c2luZyBCRkQncyBzdHJpcC4KCgkqIG5pbmR5LXNoYXJlL2NvZmZzdHJpcC5jOiAgUmVtb3ZlIGZpbGUuCgkqIG5pbmR5LXNoYXJlL25pbmR5LmMgKGNvZmZzdHJpcCk6ICBSb3V0aW5lIHRvIHJ1biBiZmRfc3RyaXAuCgkqIE1ha2VmaWxlLmRpc3Q6ICBSZW1vdmUgcmVmZXJlbmNlcyB0byBuaW5keS1zaGFyZS9jb2Zmc3RyaXAuYy4KCSogdGNvbmZpZy9uaW5keTk2MDogIFJlbW92ZSByZWZlcmVuY2UgdG8gY29mZnN0cmlwLm8uCgoJKiBNYWtlZmlsZS5kaXN0OiAgUm9sbCB2ZXJzaW9uIG51bWJlciB0byAzLjk0LjEgKG5vdCB5ZXQgZmluYWwpLgoKV2VkIE1hciAgNiAwOTo1Njo0NSAxOTkxICBKb2huIEdpbG1vcmUgIChnbnUgYXQgY3lnaW50LmN5Z251cy5jb20pCgoJKiBzeW1maWxlLmg6ICBBZGQgc3ltZmlsZV9iZmQsIGNvbW1vbiBiZXR3ZWVuIGRieHJlYWQgYW5kIGNvZmZyZWFkLgoJKiBkYnhyZWFkLmM6ICBSZW1vdmUgc3RhdGljIHN5bWZpbGVfYmZkLgoJKiBpbmZjbWQuYyAoZG9fcmVnaXN0ZXJzX2luZm8pOiAgQWRkIFBSSU5UX1JFR0lTVEVSX0hPT0ssIHRob3VnaAoJaXQgaXMgbm90IHVzZWQgeWV0LgoJKiBpbmZ0YXJnLmMgKGNoaWxkX2RldGFjaCk6ICBQb3AgdGhlIGNoaWxkX29wcyB2ZWN0b3IgaWYgdGhlCglkZXRhY2ggaXMgc3VjY2Vzc2Z1bC4KCSogcmVtb3RlLW5pbmR5LmMgKG5pbmR5X2NyZWF0ZV9pbmZlcmlvcik6ICBEb24ndCBwdXNoIGEgbmV3CgluaW5keV9vcHMgc2luY2UgbmluZHkgdXNlcyB0aGUgc2FtZSBvbmUgZm9yIGV4ZWN1dGlvbiBhbmQgbWVtb3J5CglleGFtaW5hdGlvbiBhbnl3YXkuCgkqIGNvcmUuYyAoY29yZV9vcHMpOiAgVXNlIGNoaWxkX2F0dGFjaCBhbmQgY2hpbGRfY3JlYXRlX2luZmVyaW9yCglyYXRoZXIgdGhhbiBkZWZhdWx0IGF0dGFjaCBhbmQgY3JlYXRlX2luZmVyaW9yIGZ1bmN0aW9ucy4KCglIYW5kbGUgZmxvYXRpbmcgcG9pbnQgcmVnaXN0ZXJzIGluIGNvcmUgZmlsZXMuCgoJKiBzcGFyYy14ZGVwLmMgKGZldGNoX2NvcmVfcmVnaXN0ZXJzKTogIFJld3JpdGUgZm9yIGZsb2F0IHN1cHBvcnQuCgkqIHN1bjMteGRlcC5jIChmZXRjaF9jb3JlX3JlZ2lzdGVycyk6ICBSZXdyaXRlIGZvciBmbG9hdCBzdXBwb3J0LgoJVGhpcyB2ZXJzaW9uIHVudGVzdGVkIHNpbmNlIEJGRCBkb2Vzbid0IHlldCBzdXBwb3J0IHN1bjMgY29yZQoJZmlsZXMuCgkqIGhwMzAwaHB1eC14ZGVwLmM6ICBSZXdyaXRlIGZldGNoX2NvcmVfcmVnaXN0ZXJzIHRvIG5ldyBjYWxsaW5nCgljb252ZW50aW9ucy4gIEZpeCBjb21tZW50cyBhbmQgc3R5bGUuICBUaGlzIHZlcnNpb24gaGFzIG5vdAoJYmVlbiBjb21waWxlZCB5ZXQsIHNpbmNlIHdlIGhhdmUgbm8gSFAgaW5ob3VzZS4KCSogY29yZS5jIChnZXRfY29yZV9yZWdpc3RlcnMpOiAgTG9vayBmb3IgdHdvIHNlY3Rpb25zLCAiLnJlZyIKCWFuZCAiLnJlZzIiLCBhbmQgcGFzcyBib3RoIHRvIGZldGNoX2NvcmVfcmVnaXN0ZXJzIHNlcXVlbnRpYWxseS4KCglSZXZpc2UgZGlyZWN0b3J5IHBhdGggeWV0IGFnYWluLgoKCSogc291cmNlLmMgKGZvcmdldF9jYWNoZWRfc291cmNlX2luZm8pOiAgTm90IHN0YXRpYyBhbnkgbW9yZS4KCShpbml0X3NvdXJjZV9wYXRoKTogIE5ldyBkZWZhdWx0IHNvdXJjZSBwYXRoIGlzICIkY2RpcjokY3dkIi4KCShkaXJfY29tbWFuZCk6ICBIYW5kbGUgdmFyaWFibGUgYXJndW1lbnRzICgkY2RpciwgJGN3ZCkuCgkoc291cmNlX2luZm8pOiAgUHJpbnQgIkNvbXBpbGF0aW9uIGRpcmVjdG9yeSIgcmF0aGVyIHRoYW4KCSJPcmlnaW5hbGx5IGNvbXBpbGVkIGluIiB0byByZW1pbmQgcGVvcGxlIG9mICRjZGlyLgoJKG9wZW5wKTogIElmIHRoZSBwYXRoIGNvbnRhaW5zICRjd2QsIHVzZSBjdXJyZW50IGRpcmVjdG9yeS4KCShvcGVuX3NvdXJjZV9maWxlKTogIElmIGNvbXBpbGF0aW9uIGRpcmVjdG9yeSBpcyBrbm93biwgcmVwbGFjZQoJZmlyc3QgJGNkaXIgaW4gcGF0aCB3aXRoIHRoZSBjb21waWxhdGlvbiBkaXJlY3RvcnkuCgkocHJpbnRfc291cmNlX2xpbmVzKTogIEV2ZW4gaWYgd2UgY2FuJ3QgcHJpbnQgdGhlIGxpbmVzLCBzZXQgdGhlCgljdXJyZW50IHN5bXRhYiBhbmQgbGluZSBmb3IgZnV0dXJlIGNvbW1hbmRzIGxpa2UgImluZm8gc291cmNlIiBvcgoJImJyZWFrcG9pbnQiLiAgQWxzbywgZXJyb3IgbWVzc2FnZSBub3cgY29udGFpbnMgdGhlIGZpbGUgbmFtZSwKCWxpbmUgbnVtYmVyLCBhbmQgZmlsZSBhY2Nlc3MgZXJyb3IgbWVzc2FnZS4KCShfaW5pdGlhbGl6ZV9zb3VyY2UpOiAgRml4IGhlbHAgdGV4dCB0byBkZXNjcmliZSBjaGFuZ2VzLgoJKiBtYWluLmMgKGNkX2NvbW1hbmQpOiAgRm9yZ2V0IGNhY2hlZCBzb3VyY2UgaW5mbyB3aGVuIHdlIGNoZGlyLgoJKiB1dGlscy5jIChzdHJzdHIpOiAgQWRkIHNpbXBsZSBpbXBsZW1lbnRhdGlvbi4KClR1ZSBNYXIgIDUgMDE6NDE6NDAgMTk5MSAgSm9obiBHaWxtb3JlICAoZ251IGF0IGZvd2FudG9uLmN5Z251cy5jb20pCgoJKiBjb2ZmcmVhZC5jIChyZWFkX29uZV9zeW0sIGluaXRfbGluZXRhYmxlLCBpbml0X3N0cmluZ3RhYik6CglCeXRlLXN3YXAgQ09GRiBzeW1ib2wgdGFibGVzIGlmIG5lY2Vzc2FyeSB3aGVuIHJlYWRpbmcgdGhlbSBpbi4KCVVzZSBjb21wbGFpbigpIHRvIHJlcGxhY2UgZXJyb3IgbWVzc2FnZSBpbiBvbmUgc3BvdC4gIE5lZWRzCgljb3JyZXNwb25kaW5nIGNoYW5nZSBpbiBiZmQvY29mZi1jb2RlLmggdG8gbWFrZSBzb21lIHN5bWJvbAoJc3dhcHBpbmcgcm91dGluZXMgbm9uLXN0YXRpYy4KCk1vbiBNYXIgIDQgMDA6NTM6NDAgMTk5MSAgSm9obiBHaWxtb3JlICAoZ251IGF0IGN5Z2ludC5jeWdudXMuY29tKQoKCU1lcmdlIGNoYW5nZXMgZnJvbSBFaXJpayBGdWxsZXIsIGZvciBVVGVrLgoKCSogZGVmcy5oIChlcnJubyk6ICBBZGQgZGVjbGFyYXRpb24uCgkqIGFsdG9zLXhkZXAuYywgYXJtLXhkZXAuYywgY29udmV4LXhkZXAuYywgZ291bGQteGRlcC5jLAoJaHAzMDBocHV4LXhkZXAuYywgaW5mcnVuLmMsIGluZmxvdy5jLCBpbmZwdHJhY2UuYywgaTM4Ni10ZGVwLmMsCglpMzg2LXhkZXAuYywgcHlyLXhkZXAuYywgbWlwcy14ZGVwLmMsIHJlbW90ZS1lYi5jLCByZW1vdGUtbmluZHkuYywKCXJlbW90ZS12eC5jLCBzb3VyY2UuYywgc3RhbmRhbG9uZS5jLCBzdHVmZi5jLCBzdW4zODYteGRlcC5jLAoJc3ltbWV0cnktdGRlcC5jLCBzeW1tZXRyeS14ZGVwLmMsIHVtYXgteGRlcC5jLCB1dGlscy5jOiAgRWxpbWluYXRlCglkZWNsYXJhdGlvbnMgb2YgZXJybm8uCgoJKiByZW1vdGUtZWIuYzogIERlZmluZSBCMTkyMDAgYW5kIEIzODQwMCBhcyBFWFRBIGFuZCBFWFRCLgoKCSogcmVtb3RlLXZ4LmM6ICBJbmNsdWRlIDxzeXMvdGltZS5oPiBmb3IgVVRlazsgU3VuIGdldHMgaXQgdmlhCgk8cnBjL3JwYy5oPiBhbmQgPHJwYy90eXBlcy5oPi4KClNhdCBNYXIgIDIgMTU6NDc6NTUgMTk5MSAgSm9obiBHaWxtb3JlICAoZ251IGF0IGN5Z2ludC5jeWdudXMuY29tKQoKCSogaTk2MC10ZGVwLmMgKGV4YW1pbmVfcHJvbG9ndWUpOiAgQWRkIG5ldyBhcmd1bWVudCBsaW1pdCwKCXdoaWNoIHN0b3BzIHRoZSBzY2FuIGF0IHRoZSBlbmQgb2YgdGhlIHByb2xvZ3VlLCBvciBhdCB0aGUgUEMuCglUaGlzIGZpeGVzIGEgcHJvYmxlbSB3aGVyZSBpdCB3YWxrcyBkb3duIGludG8gdGhlIGNvZGUgZm9yIHRoZQoJdXNlcidzIHN0YXRlbWVudHMgaWYgdGhhdCBjb2RlIGxvb2tzIGxpa2UgZnVuY3Rpb24gcHJvbG9ndWVzLgoJTWFyayBGb3ggYW5kIEkgaGF2ZSBiZWVuIGJvdW5jaW5nIHRoaXMgY29kZSBiYWNrIGFuZCBmb3J0aCwgbWFraW5nCglzbWFsbCBjaGFuZ2VzIHRvIGl0LiAgQ2FsbGVycyBjaGFuZ2VkIHRvIG1hdGNoLgoKVHVlIEZlYiAyNiAwMTo0NzowNyAxOTkxICBDeWdudXMgSm9obiBHaWxtb3JlICAoY3lnbnVzIGF0IHl1YmEpCgoJQ2xlYW51cCBmb3IgZ2RiLTMuOTQgcmVsZWFzZSBmaW5hbDoKCgkqIE1ha2VmaWxlLmRpc3Q6ICBSZW1vdmUgcmVtb3RlLXZ4LmMsIHJlbW90ZS1uaW5keS5jLCBhbmQgYWxsCgl0aGUgLmMgZmlsZXMgZnJvbSB2eC1zaGFyZSBhbmQgbmluZHktc2hhcmUsIGZyb20gdGhlIHZhcmlvdXMgCgltYWNyb3MsIHNpbmNlIHRoZXkgYXJlIG5vdCBmb3VuZCB2aWEgQUxMREVQRklMRVMuCgkoU0ZJTEVTKTogIEFkZCB0bS1pOTYwLmguCgkoYWxsZGVwcy5tYWsgcnVsZSk6ICBCcmVhayBvdXQgQUxMREVQRklMRVNfTUFJTkRJUiBhbmQKCUFMTERFUEZJTEVTX1NVQkRJUi4gIExpc3QgYWxsIHRoZSBuaW5keSBhbmQgdnh3b3JrcyBzdWJkaXIgZmlsZXMKCWluIHRoZSBTVUJESVIgbGlzdC4KCShUQUdGSUxFU19NQUlORElSKTogIENoYW5nZSBBTExERVBGSUxFUyB0byBBTExERVBGSUxFU19NQUlORElSLgoJKGdkYi50YXIuWik6ICBVc2UgQUxMREVQRklMRVNfU1VCRElSIGFzIHdlbGwgYXMgU0ZJTEVTX1NVQkRJUi4KCk1vbiBGZWIgMjUgMTY6MDI6MzUgMTk5MSAgQ3lnbnVzIEpvaG4gR2lsbW9yZSAgKGN5Z251cyBhdCBvbGRtYW4pCgoJKiBhbTI5ay10ZGVwLmM6ICBBZGQgY29udHJpYnV0aW9uIGxpbmUuCgkoZXhhbWluZV9wcm9sb2d1ZSk6ICBDYWNoZSBpbmZvcm1hdGlvbiBhYm91dCBmdW5jdGlvbiBwcm9sb2d1ZXMgaW4KCXRoZSBtaXNjLWZ1bmN0aW9uLXZlY3RvciB0byBhdm9pZCBsb3RzIG9mIHJlZmVyZW5jZXMgb3ZlciB0aGUKCXNlcmlhbCBsaW5lIHdoaWxlIGV4YW1pbmluZyBpbnN0cnVjdGlvbnMuCgoJKiBjb3JlLmMgKGNvcmVfY2xvc2UpOiAgTmV3IGZ1bmN0aW9uIG1hZGUgZnJvbSBjbGVhbnVwX2NvcmUuCgoJKiBjb3JlLmMsIGV4ZWMuYywgaW5mdGFyZy5jLCByZW1vdGUtZWIuYywgcmVtb3RlLW5pbmR5LmMsCglyZW1vdGUtdnguYywgcmVtb3RlLmMsIHRhcmdldC5jLCB0YXJnZXQuaCwgCglVcGRhdGUgdGFyZ2V0X29wcyB2ZWN0b3IgdG8gYWRkIGF0dGFjaCwgY2xvc2UsIGFuZCBsb2FkIGVudHJpZXMuCglVc2UgYWRkX3N5bXNfYWRkcl9jb21tYW5kLCBub3QgYWRkX2ZpbGVfYWRkcl9jb21tYW5kLCBmb3IKCWFkZF9maWxlLiAgQnJlYWsgb3V0IGNsb3NlIHJvdXRpbmUgZnJvbSBleGlzdGluZyBjb2RlLgoKCSogZGJ4cmVhZC5jIChyZWFsbHlfZnJlZV9wZW5kaW5ncyk6ICBEb24ndCBmcmVlIHBlbmRpbmdfYmxvY2tzOwoJdGhleSBhcmUgaW4gYW4gb2JzdGFjay4KCShyZWFkX2RieF9zeW10YWIpOiAgUmVsb2NhdGUgZW5kX29mX3RleHRfYWRkciBpbiB0aGUgcHN5bXRhYi4KCUxpbnQuCgkoZGVmaW5lX3N5bWJvbCk6ICBBZGQgc3ltYm9sIHR5cGUgcGFyYW1ldGVyOyBjaGFuZ2UgY2FsbGVyczsKCXBhc3MgdHlwZSBwYXJhbWV0ZXIgdG8gREJYX1BBUk1fU1lNQk9MX0NMQVNTIG1hY3JvIHRvIGFsbG93CglpdCB0byBpbmZsdWVuY2UgdGhlIHN5bWJvbCBjbGFzcyBvbiB0aGUgaTk2MC4KCShkZWZpbmVfc3ltYm9sKTogIFN3YXAgTE9DX0NPTlNUJ3MgaW50byB0YXJnZXQgYnl0ZSBvcmRlci4KCgkqIGV4ZWMuYyAoZXhlY19jbG9zZSk6ICBOZXcgZnVuY3Rpb24uCgkoZXhlY19maWxlX2NvbW1hbmQpOiAgQ2FsbCBpdC4KCgkqIGZpbmR2YXIuYyAocmVhZF9yZWxhdGl2ZV9yZWdpc3Rlcl9yYXdfYnl0ZXMpOiAgRG9jIGJ5dGUgb3JkZXIsCglGaXggYnl0ZSBvcmRlciBvZiBmcmFtZSBwb2ludGVyLgoJKHJlYWRfdmFyX3ZhbHVlKTogIFJlc3VsdCBvZiAwIGlmIHZhcidzIHZhbHVlIGNhbid0IGJlIGZvdW5kLAoJZS5nLiBtaXNzaW5nIEZSQU1FX0FSR1NfQUREUkVTUy4gIEJ5dGUtc3dhcCBMT0NfQ09OU1QgYW5kCglMT0NfTEFCRUwgdmFsdWVzIHRvIHRhcmdldCBvcmRlci4gIEFkZCBMT0NfTE9DQUxfQVJHLgoJKGxvY2F0ZV92YXJfdmFsdWUpOiAgVXNlIHJlYWRfdmFyX3ZhbHVlIGFuZCB1c2UgaXRzIGxhenkgYWRkcmVzcwoJYXMgdGhlIGxvY2F0aW9uIG9mIHRoZSB2YXIncyB2YWx1ZS4gIExpbnQuCgoJKiBpOTYwLXBpbnNuLmMgKG5leHRfaW5zbik6ICBBZGQgcm91dGluZSBmcm9tIHZ4Z2RiIGZvciBzY2FubmluZwoJaW5zdHJ1Y3Rpb25zLiAgICAgICAKCgkqIGk5NjAtdGRlcC5jIChhcmdfYWRkcmVzcywgaTk2MF9mcmFtZV9maW5kX3NhdmVkX3JlZ3MpOiAgUmVtb3ZlCglvYnNvbGV0ZSBJbnRlbCB2ZXJzaW9ucyBpbiBmYXZvciBvZiB2eGdkYiB2ZXJzaW9ucy4KCShjaGVja19ob3N0LCBieXRlc3dhcCwgYnl0ZXN3YXBfdmFsLCByZW9yZGVyX3ZhbCk6ICBFbGltaW5hdGUKCWNvZGUgZGVhbGluZyB3aXRoIGJ5dGUgb3JkZXIgb2YgdmFsdWVzLCB3aGljaCBJbnRlbCBkaWQgaW4gaG9zdCBieXRlCglvcmRlciByYXRoZXIgdGhhbiBnZGItNCdzIHRhcmdldCBieXRlIG9yZGVyLgoJKGk5NjBfZnJhbWVfY2hhaW5fdmFsaWQpOiAgTW92ZSB0byBuaW5keS10ZGVwLmMuCgkoZXhhbWluZV9wcm9sb2d1ZSwgc2tpcF9wcm9sb2d1ZSwgZnJhbWVfZmluZF9zYXZlZF9yZWdzLAoJZnJhbWVfYXJnc19hZGRyZXNzLCBsZWFmcHJvY19yZXR1cm4sIHNhdmVkX3BjX2FmdGVyX2NhbGwsCglwb3BfZnJhbWUpOiAgQWRkIHZ4Z2RiIHZlcnNpb25zIGZyb20gTWFyayBGb3guCgkoZXhhbWluZV9wcm9sb2d1ZSwgZnJhbWVfc3RydWN0X3Jlc3VsdF9hZGRyZXNzKTogIEFkZCBjb2RlCgl0byBkZWFsIHdpdGggdGhlIHNhdmVkIHZhbHVlIG9mIEcxMyAoc3RydWN0IHJldHVybiBhZGRyZXNzCglwb2ludGVyKS4KCShmcmFtZV9hcmdzX2FkZHJlc3MpOiAgTW9kaWZ5IE1hcmsncyB2ZXJzaW9uIHRvIHByZWZlciB0aGUKCXNhdmVkIHZhbHVlIG92ZXIgdGhlIGN1cnJlbnQgdmFsdWUgaW4gdGhlIHRvcG1vc3QgZnJhbWUuCglDYWNoZSByZXN1bHQgaW4gdGhlIGZyYW1lIGluZm8gdG8gYXZvaWQgcGVyZm9ybWFuY2UgaGFpciBpbgoJY2FsbGVycy4KCShwcmludF9mYXVsdCk6ICBBZGQgZ2RiOTYwIGNvZGUgZm9yIHByaW50aW5nIGZhdWx0cy4KCShfaW5pdGlhbGl6ZV9pOTYwKTogIEFjdHVhbGx5IGNhbGwgY2hlY2tfaG9zdC4KCgkqIGllZWUtZmxvYXQuYyAoaWVlZV9leHRlbmRlZF90b19kb3VibGUsIGllZWVfZG91YmxlX3RvX2V4dGVuZGVkKToKCWFkZCBzdHViIHJvdXRpbmVzLiAgRklYTUUsIHRoZXNlIGN1cnJlbnRseSBqdXN0IHJldHVybiB6ZXJvIQoKCSogaW5mY21kLmMgKHByb2dyYW1faW5mbyk6ICBVc2UgUFJJTlRfUkFORE9NX1NJR05BTC4KCShhdHRhY2hfY29tbWFuZCk6ICBDYWxsIHRhcmdldF9hdHRhY2gsIG5vdCB0YXJnZXRfb3Blbiwgbm93LgoKCSogaW5mcnVuLmMgKG5vcm1hbF9zdG9wKTogIE1ha2UgZ2xvYmFsLCBub3Qgc3RhdGljLCBmb3IgdnhfYXR0YWNoLgoJKGNoaWxkX2F0dGFjaCk6ICBSZW5hbWUgZnJvbSBjaGlsZF9vcGVuLgoJKHdhaXRfZm9yX2luZmVyaW9yKTogVXNlIFBSSU5UX1JBTkRPTV9TSUdOQUwuICBJZiBzdG9wX3BjIGlzIHplcm8sCglkb24ndCBjb25mdXNlIGl0IHdpdGggYSB6ZXJvIHN0ZXBfcmVzdW1lX2JyZWFrX2FkZHJlc3MuIAoKCSogaW5mdGFyZy5jIChjaGlsZF9kZXRhY2gpOiAgRWxpbWluYXRlIGluZmVyaW9yX3BpZCB0ZXN0LgoJKGNoaWxkX2ZpbGVzX2luZm8pOiAgQ2xlYW4gdXAgbWVzc2FnZSBhIGJpdC4KCShjaGlsZF9vcHMpOiAgVXNlIGNoaWxkX2F0dGFjaCwgbm90IGNoaWxkX29wZW4sIHRvIGF0dGFjaC4KCgkqIG1lbS1icmVhay5jOiAgI2lmZGVmIG91dCB0aGUgd2hvbGUgZmlsZSBpZiBCUkVBS1BPSU5UIGlzIG5vdAoJc2V0IChlLmcuIG9uIFZ4V29ya3Mgb3IgTklORFkpLiAgTW92ZSByZWFkX21lbW9yeV9ub2JwdCBmcm9tCglmaW5kdmFyLmMgdG8gaGVyZSwgc2luY2UgaXQgZGVwZW5kcyBvbiB0aGUgY29udGVudHMgb2YgdGhlCglzaGFkb3dfY29udGVudHMgb2YgYnJlYWtwb2ludHMsIGJ1dCBrZWVwIGlmICNpZiAwIHNpbmNlIGl0IGlzCgluZXZlciBjYWxsZWQuCgoJKiBuaW5keS10ZGVwLmM6ICBOZXcgZmlsZSwgY29udGFpbnMgbmluZHlfZnJhbWVfY2hhaW5fdmFsaWQsIG1vdmVkCglmcm9tIGk5NjAtdGRlcC5jLgoKCSogcHJpbnRjbWQuYyAoYWRkcmVzc19pbmZvKTogIEhhbmRsZSBMT0NfTE9DQUxfQVJHLiAgTGludC4KCShwdHlwZV9jb21tYW5kLCBkaXNwbGF5X2NvbW1hbmQpOiAgRWxpbWluYXRlIGhhdmVfaW5mZXJpb3JfcCBhbmQKCWhhdmVfY29yZV9maWxlX3AgaW4gZmF2b3Igb2YgdGFyZ2V0X2hhc19zdGFjayBvcgoJdGFyZ2V0X2hhc19leGVjdXRpb24uCgkocHJpbnRfZnJhbWVfYXJncyk6ICBIYW5kbGUgTE9DX0xPQ0FMX0FSRy4gIEVsaW1pbmF0ZSBkdXBsaWNhdGUKCWNvZGUgZm9yIGFjdHVhbGx5IGZpbmRpbmcgdGhlIHZhbHVlcyBvZiBhcmd1bWVudHMsIHRob3VnaCB3ZSBzdGlsbAoJa2VlcCB0cmFjayBvZiB0aGUgbWF4aW11bSBzdGFjayBvZmZzZXQgZm9yIHVzZSBpbiBwcmludGluZyB1bm5hbWVkCglhcmd1bWVudHMuICBIYW5kbGUgbWlzc2luZyBGUkFNRV9BUkdTX0FERFJFU1MuCgoJKiByZW1vdGUtbmluZHkuYyAoaTk2MF9wcmludF9mYXVsdCk6ICBNb3ZlIHRvIGk5NjAtdGRlcC5jLgoJKHN0cnVjdCBuaW5keV9yZWdzKTogIERlZmluZSByZWdpc3RlcnMgcGFzc2VkIHRvL2Zyb20gbmluZHkuCgkobmluZHlfZmV0Y2hfcmVnaXN0ZXJzLCBuaW5keV9zdG9yZS1yZWdpc3RlcnMpOiAgVHJhbnNsYXRlIGJldHdlZW4KCW5pbmR5IGFuZCBHREIgZm9ybWF0cyBmb3IgdGhlIHJlZ2lzdGVycy4KCShkY2FjaGVfaW5pdCk6ICBTdGF0aWNhbGx5IGFsbG9jYXRlIHRoZSBjYWNoZSwgc2luY2UgaXQgd2FzIGJlaW5nCglhbGxvY2F0ZWQgYnkgYSBtYWxsb2MgdGhhdCB3YXMgbmV2ZXIgZnJlZWQgYW55d2F5LgoJKG5pbmR5X2NyZWF0ZV9pbmZlcmlvcik6ICBFcnJvciwgbm90IGNvcmUgZHVtcCwgaWYgbm8gZXhlYyBmaWxlLgoJKG5pbmR5X2JlZm9yZV9tYWluX2xvb3ApOiAgVXNlIHRhcmdldF9sb2FkLCBub3QgdGFyZ2V0X2FkZF9maWxlLgoKCSogcmVtb3RlLXZ4LmMgKG5ldF9sb2FkKTogIFNwZWNpZnkgbGFyZ2UgdGltZW91dCBmb3IgbG9hZAoJcmVxdWVzdHMuICBBbGxvdyB1c2VyIHRvIGJyZWFrIG91dCB3aXRoIElOVEVSUlVQVC4KCShuZXRfYnJlYWspOiAgUmVtb3ZlIHVzZWxlc3MgY29kZSwgY2xlYW4gdXAuICBDaGFuZ2UgY2FsbGVycy4KCShwYXJzZS1hcmdzLCBza2lwX3doaXRlX3NwYWNlLCBmaW5kX3doaXRlX3NwYWNlKTogIENsZWFuIHVwIGFyZwoJcGFyc2luZyB0byBjb3BlIHdpdGggcXVvdGVkIHN0cmluZ3MuCgkobmV0X3dhaXQsIG5ldF9xdWl0KTogIE5ldmVyIGNhbGwgZXJyb3IsIGp1c3QgcmV0dXJuIHN0YXR1cy4KCSh2eF9yZWFkX3JlZ2lzdGVyLCB2eF93cml0ZV9yZWdpc3Rlcik6ICBDbGVhbnVwIHN0YXR1cyBjaGVja2luZy4KCSNpZmRlZiB0aGUgY29kZSBiYXNlZCBvbiB3aGljaCBDUFUgd2UgYXJlIHVzaW5nICg5NjAgb3IgNjhrKSwKCUZJWE1FLCB0aGlzIHNob3VsZCBiZSBjb21wbGV0ZWx5IGdlbmVyYWwgYnV0IGl0IGlzbid0IHlldC4KCSh2eF94ZmVyX21lbW9yeSwgdnhfcmVzdW1lKTogIENsZWFudXAgc3RhdHVzIGNoZWNraW5nLgoJKHZ4X3J1bl9maWxlc19pbmZvKTogIEltcHJvdmUgbWVzc2FnZS4KCSh2eF9sb2FkX2NvbW1hbmQpOiAgUmVuYW1lZCBmcm9tIHZ4X2FkZF9maWxlX2NvbW1hbmQuICBBbGxvdyBsb2FkCgl0byBiZSBpbnRlcnJ1cHRlZC4KCShuZXRfcHRyYWNlKTogIFJlbW92ZSB1bnVzZWQgcm91dGluZS4KCSh2eF93YWl0KTogIEFkb3B0IGNvZGUgZnJvbSB2eGdkYjk2MCB0byBjb3BlIHdpdGggYnJva2VuCgljb25uZWN0aW9ucyB0byB0YXJnZXQgbWFjaGluZSBhbmQgcHJvbXB0IHRvIGRpc2Nvbm5lY3QuICBSZW1vdmUKCWRlYnVnIHByaW50b3V0cy4gIE1hcCBzb21lIEVWRU5UXydzIHRvIFNJR25hbHMuCgkoYWRkX3N5bWJvbF9zdHViLCB2eF9vcGVuKTogIFByaW50IG5hbWVzIG9mIG9iamVjdCBmaWxlcyB3ZSBmb3VuZCwKCWFuZCAib2siIGlmIHdlIHJlYWQgdGhlaXIgc3ltYm9scyBPSy4gIENsYXJpZnkgb3V0cHV0IGluIGdlbmVyYWwuCgkodnhfYXR0YWNoLCB2eF9kZXRhY2gsIHZ4X2tpbGwpOiAgQWRkIHRoZXNlIGNvbW1hbmRzLgoJKHZ4X2NvbnZlcnRfZnJvbV92aXJ0dWFsLCB2eF9jb252ZXJ0X3RvX3ZpcnR1YWwpOiAgU2ltcGxpZnkuCgkodnhfcnVuX29wcyk6ICBUdXJuIG9mZiBhbGxfbWVtLCB0byBhdm9pZCBzcHVyaW91cyBtc2cgaW4gdGhlCgkiaW5mbyBmaWxlcyIgb3V0cHV0LCBhbmQgY3JlYXRlX2luZmVyaW9yLCBzaW5jZSB3ZSBhbHJlYWR5IGhhdmUKCWFuIGluZmVyaW9yLgoKCSogc3RhY2suYyAoZnJhbWVfaW5mbyk6ICBSZXBsYWNlIEZyYW1lX3Vua25vd24gd2l0aCAwLgoJKHByaW50X2ZyYW1lX2FyZ192YXJzKTogIEhhbmRsZSBMT0NfTE9DQUxfQVJHLgoJKHJldHVybl9jb21tYW5kKTogIFBvcCB1bnRpbCB0aGUgUEMgbWF0Y2hlcyBhcyB3ZWxsIGFzIHRoZSBGUCwKCXNvIGl0IHdvcmtzIGV2ZW4gaWYgdGhlIEZQIGlzIHNoYXJlZCB3aXRoIGFub3RoZXIgZnVuY3Rpb24sCglhcyBpbiAiZnJhbWVsZXNzIiBvciAibGVhZiIgcHJvY2VkdXJlcy4KCgkqIHN5bWZpbGUuYyAobG9hZF9jb21tYW5kKTogIHJlbmFtZWQgZnJvbSBhZGRfZmlsZV90YXJnZXRfY29tbWFuZC4KCShhZGRfc3ltc19hZGRyX2NvbW1hbmQpOiAgcmVuYW1lZCBmcm9tIGFkZF9maWxlX2FkZHJfY29tbWFuZC4KCShhZGRfc3ltc19jb21tYW5kKTogIFN0dWIgdG8gY2FsbCB0YXJnZXRfYWRkX3N5bXMuCgkoX2luaXRpYWxpemVfc3ltZmlsZSk6ICBDaGFuZ2UgY29tbWFuZCBuYW1lcyBhbmQgZGVzY3JpcHRpb25zLAoJYWRkLWZpbGUgPT4gYWRkLXN5bXMsIGFuZCBsb2FkIGZyb20gYWxpYXMgdG8gaXRzIG93biBjb21tYW5kLgoKCSogdGFyZ2V0LmMgKGtpbGxfb3JfYmVfa2lsbGVkLCBtYXliZV9raWxsX3RoZW5fYXR0YWNoLAoJbWF5YmVfa2lsbF90aGVuX2NyZWF0ZV9pbmZlcmlvcik6ICBEZWZhdWx0IGZvciBhdHRlbXB0cyB0byBzdGFydAoJYSBwcm9jZXNzLCBpZiBvbmUgaXMgYWxyZWFkeSBydW5uaW5nLCBpcyB0byBhc2sgYWJvdXQga2lsbGluZwoJaXQgYW5kIHJldHJ5IGlmIHllcy4KCSh1cHN0YWNrX2NyZWF0ZV9pbmZlcmlvcik6ICAjaWYtMCBpdCwgc3RyYXRhIG9ic29sZXRlIGl0LgoJKHB1c2hfdGFyZ2V0LCB1bnB1c2hfdGFyZ2V0LCBwb3BfdGFyZ2V0KTogIHRvX2Nsb3NlKCkgYSB0YXJnZXQKCWJlZm9yZSB1bnN0YWNraW5nIGl0LiAKCSh0YXJnZXRfaW5mbyk6ICBSZW5hbWVkIGZyb20gdGFyZ2V0X2ZpbGVzX2luZm8uCgkoX2luaXRpYWxpemVfdGFyZ2V0cyk6ICBSZW5hbWUgImkgZmlsZXMiIGFzICJpIHRhcmdldCIsIGFjY2Vzc2libGUKCXVuZGVyIGJvdGggbmFtZXMuCgoJKiB0YXJnZXQuaDogIEltcHJvdmUgY29tbWVudHMgYWJvdXQgdGhlIHRhcmdldF8gdmVjdG9yZWQgcm91dGluZXMuCgoJKiB0bS1pOTYwLmg6ICBSZW1vdmUgTklORFktc3BlY2lmaWMgc3R1ZmYgdG8gdG0tbmluZHk5NjAuaC4KCUNvbnZlcnQgY29tbWVudGluZyBzdHlsZSB0byBzdGFuZGFyZCBHTlUgc3R5bGUuCgkoREJYX1BBUk1fU1lNQk9MX0NMQVNTKTogYWxsb3cgTE9DX0xPQ0FMX0FSRydzIHRvIGJlIHJlY29nbml6ZWQuCgkoU0tJUF9QUk9MT0dVRSk6ICBObyBsb25nZXIgYSBuby1vcC4KCShTQVZFRF9QQ19BRlRFUl9DQUxMKTogIE5vdyBoYW5kbGVzIGxlYWYgcHJvY2VkdXJlcy4KCSgqX1JFR05VTSk6ICBTb3J0IHJlZ2lzdGVyIG51bWJlcnMuCgkoUkVHSVNURVJfQllURVMsIFJFR0lTVEVSX0JZVEUsIFJFR0lTVEVSX1JBV19TSVpFLAoJTUFYX1JFR0lTVEVSX1JBV19TSVpFLCBSRUdJU1RFUl9DT05WRVJUSUJMRSwKCVJFR0lTVEVSX0NPTlZFUlRfVE9fVklSVFVBTCwgUkVHSVNURVJfQ09OVkVSVF9UT19SQVcpOiAgRmxvYXQgcmVncwoJYXJlIG5vdyAxMCBieXRlIGV4dGVuZGVkcywgbm90IDggYnl0ZSBkb3VibGVzLgoJKEZSQU1FX0NIQUlOX1ZBTElEKTogIE1ha2UgdGhpcyBjb25maWctZGVwZW5kZW50LCBzaW5jZSBpdCBkaWZmZXJzCglmb3IgbmluZHkgdmVyc3VzIHZ4d29ya3MgdGFyZ2V0cy4gIEZJWE1FLCB0aGlzIHNob3VsZCBwb3NzaWJseSBnbwoJaW4gdGhlIHRhcmdldCB2ZWN0b3IuCgkoRVhUUkFfRlJBTUVfSU5GTywgSU5JVF9FWFRSQV9GUkFNRV9JTkZPKTogIENhY2hlIGJvdGgKCWZyYW1lX3NhdmVkX3JlZ3MgYW5kIGFyZyBwb2ludGVyIHdpdGggZWFjaCBmcmFtZS4KCShGUkFNRUxFU1NfRlVOQ1RJT05fSU5WT0NBVElPTik6ICBOZXcgbGVhZnByb2Mgc3VwcG9ydC4KCShGUkFNRV9BUkdTX0FERFJFU1MpOiAgVXNlIGNhY2hlZCByZXN1bHQuCgkoRlJBTUVfQVJHU19BRERSRVNTX0NPUlJFQ1QpOiAgTmV3LCBhdm9pZHMgZzE0IGd1ZXNzaW5nLgoJKEZSQU1FX0ZJTkRfU0FWRURfUkVHUyk6ICBDaGFuZ2UgYXJnIHRvIHN1YnNpZGlhcnkgZm4uCgkoUFJJTlRfUkFNRE9OX1NJR05BTCk6ICBDYWxsIHByaW50X2ZhdWx0LgoJKFBPUF9GUkFNRSk6ICBOb3cgd29ya3MuCgoJKiB0bS1uaW5keTk2MC5oOiAgQnJlYWsgdGhpcyBvZmYgdG0taTk2MC5oLiAgTklORFktc3BlY2lmaWMKCW9wdGlvbiBwYXJzaW5nIGFuZCBzdGFydHVwOyBTVEFDS19FTkRfQUREUiwgRlJBTUVfQ0hBSU5fVkFMSUQsCglCUkVBS1BPSU5ULCBhbmQgREVDUl9QQ19BRlRFUl9CUkVBSyBhcmUgaGVyZS4KCShBRERJVElPTkFMX09QVElPTl9IQU5ETEVSKTogIHVzZSB0YXJnZXRfbG9hZCwgbm90Cgl0YXJnZXRfYWRkX2ZpbGUuCgkKCSogdG0tdnh3b3Jrczk2MC5oOiAgQnJlYWsgdGhpcyBvZmYgdG0taTk2MC5oLiAgVnhHREIgc3BlY2lmaWMKCXN0YXJ0dXA7IERFQ1JfUENfQUZURVJfQlJFQUssIGFuZCBGUkFNRV9DSEFJTl9WQUxJRCBhcmUgaGVyZS4KCgkqIHZhbGFyaXRoLmMgKHZhbHVlX3N1YnNjcmlwdGVkX3J2YWx1ZSk6ICBBdm9pZCBoYW5kbGluZwoJZmxvYXRzIGFuZCBkb3VibGVzIHNwZWNpYWxseTsgaXQgZ2F2ZSBhbGlnbm1lbnQgZXJyb3JzLiAgTGludC4KCgkqIHZhbG9wcy5jICh2YWx1ZV9vZl92YXJpYWJsZSwgdmFsdWVfb2ZfdGhpcyk6ICBFcnJvciBpZiB1bmtub3duCgl2YWx1ZS4KCgkqIHZhbHByaW50LmMgKHByaW50X2Zsb2F0aW5nKTogIEJjb3B5IHJhdGhlciB0aGFuIHBvaW50ZXItZGVyZWYsCgl0byBhdm9pZCBhbGlnbm1lbnQgcHJvYmxlbXMuCgkodmFsdWVfcHJpbnQpOiAgSGFuZGxlIHVua25vd24gdmFsdWUgYWRkcmVzcy4KCShjcGx1c192YWxfcHJpbnQpOiAgVHdvIGFyZ3MgYXJlIGlnbm9yZWQ7IHJlbW92ZSB0aGVtLiAgQ2hhbmdlIGNhbGxlci4KCSh2YWxfcHJpbnQpOiAgVXNlIHVucGFja19sb25nIHJhdGhlciB0aGFuIHBvaW50ZXItZGVyZWYuCgoJKiB2YWx1ZXMuYzogIExpbnQuCgkodW5wYWNrX2xvbmcsIHVucGFja19kb3VibGUpOiAgVXNlIGJjb3B5IHJhdGhlciB0aGFuIHBvaW50ZXItZGVyZWYKCXRvIGF2b2lkIGFsaWdubWVudCBwcm9ibGVtcy4KCSh2YWx1ZV9iZWluZ19yZXR1cm5lZCk6ICBFcnJvciBpZiByZXR1cm4gdmFsdWUgdW5rbm93bi4KCShzZXRfcmV0dXJuX3ZhbHVlKTogIEFkZCBib2dvc2l0eSB3YXJuaW5nLCBGSVhNRS4gICAgICAgICoKCgkqIFRPRE86ICBBIHdvbWFuJ3Mgd29yayBpcyBuZXZlciBkb25lLgoKCSogTWFrZWZpbGUuZGlzdDogIERpc3RyaWJ1dGUgUkVNT1RFX09CUyBpbnRvIHRjb25maWcgZmlsZXMuCglTZXBhcmF0ZSBJTkNMVURFX0NGTEFHUyBmb3IgdXNlIHdpdGggbGludC4gIEFkZCBMSU5URklMRVMuCglBZGQgaWVlZS1mbG9hdC5vIHRvIE9CUy4KCSogdGNvbmZpZy97bmluZHk5NjAsdnh3b3JrczY4LHZ4d29ya3M5NjB9OiAgSW5jbHVkZSB0aGUgZGVzaXJlZAoJUkVNT1RFX09CUyByZW1vdGUtaW50ZXJmYWNlIGZpbGVzIGluIHRoZSBUREVQRklMRVMgYW5kIFRNX0ZJTEUuCgkqIHRjb25maWcvaTk2MDogIEZJWE1FLiAgSGFsZi1tZXJnZSwgcHJvZHVjZSB3YXJuaW5nIGlmIGNvbmZpZydkLgoKCUNoYW5nZXMgdG8gZ2VuZXJhbGl6ZSB0aGUgVnhXb3JrcyBSUEMgcHJvdG9jb2wgc2xpZ2h0bHksIHRvIGhhbmRsZQoJaTk2MCBhcyB3ZWxsIGFzIDY4MDAwLgoKCSogdngtc2hhcmUvZGJnUnBjTGliLmggKFZYX1NPVVJDRV9TVEVQKTogIEFkZC4KCSogdngtc2hhcmUvcmVnLmg6ICBQcm9kdWNlIGk5NjAgcmVncyAjaWZkZWYgSTgwOTYwCgkqIHZ4LXNoYXJlL3hkcl9wdHJhY2UuYzogIFNraXAgRlBBIHJlZ2lzdGVycyBpZiA5NjAuCgkqIHZ4LXNoYXJlL3hkcl9yZGIuaDogIEFkZCBTT1VSQ0VfU1RFUCBzdHJ1Y3QgYW5kIHhkciBkZWNsLgoJKiB2eC1zaGFyZS94ZHJfcmRiLmM6ICBBZGQgeGRyX1NPVVJDRV9TVEVQIHJvdXRpbmUuCgkqIHZ4LXNoYXJlL3hkcl9yZWdzLmM6ICBBZGQgeGRyX3JlZ3MsIHhkcl9mcF9zdGF0dXMsIHhkcl9leHRfZnAKCWZvciBpOTYwLiAgQ2hhbmdlIHhkcl92ZWN0b3JzIHRvIHhkcl9vcGFxdWVzIGZvciA2OGsgcmVnaXN0ZXJzLAoJc28gdGhleSB3aWxsIG1vdmUgaW4gdGFyZ2V0IGJ5dGUgb3JkZXIgcmF0aGVyIHRoYW4gbmV0d29yawoJYnl0ZSBvcmRlciAoaGFwcGVucyB0byBiZSB0aGUgc2FtZSkuCQoKTW9uIEZlYiAyNSAwMzo0MTo0NCAxOTkxICBKb2huIEdpbG1vcmUgIChnbnUgYXQgY3lnaW50LmN5Z251cy5jb20pCgoJKiB0bS1jb252ZXguaCAoRU5EX09GX1RFWFRfREVGQVVMVCk6ICBSZW1vdmUgI2lmIDAnZCBibG9jay4KClN1biBGZWIgMjQgMDA6NTU6NTMgMTk5MSAgSm9obiBHaWxtb3JlICAoZ251IGF0IGN5Z2ludC5jeWdudXMuY29tKQoKCSogYW0yOWstcGluc24uYywgCglBZGQgY29udHJpYnV0aW9uIGxpbmVzIHRvIHZhcmlvdXMgZmlsZXMsIHNob3dpbmcgd2hlcmUgdGhleQoJY2FtZSBmcm9tLgoKCSogYnJlYWtwb2ludC5jIChicmVha19pbnNuLCBjaGVja19icmVha19pbnNuX3NpemUsCglyZWFkX21lbW9yeV9ub2JwdCk6ICBSZW1vdmUgdG8gbWVtLWJyZWFrLmMuCgoJKiB4bS0qLmgsIHBhcmFtLW5vLXRtLmgsIHRtLTI5ay5oLCB2YWxwcmludC5jOiAgQ2hhbmdlIEJZVEVfT1JERVIgdG8KCUhPU1RfQllURV9PUkRFUi4KCgkqIHRtLTI5ay5oIChTVEFCX1JFR19UT19SRUdOVU0pOiAgV2FybiB1c2VyIGlmIHN5bWJvbCB0YWJsZQoJZW50cnkgaGFzIGJhZCByZWdpc3RlciBudW1iZXIuICBUaGlzIGNoYW5nZSBpcyBub3QKCXRlc3RlZCBpbiB0aGlzIHJlbGVhc2UsIEZJWE1FLgoKCSogZnJhbWUuaDogIEVsaW1pbmF0ZSBGcmFtZV91bmtub3duIGluIGZhdm9yIG9mIGEgc2ltcGxlIHplcm8uCgl0bS12YXguaDogIERpdHRvLgoKCSogdmFsdWUuaDogIEZvcmNlIHZhbHVlJ3MgY29udGVudHMgZmllbGQgdG8gYmUgYWxpZ25lZCB0byBob2xkCglhdCBsZWFzdCBhIGRvdWJsZSBvciBhIGxvbmcgbG9uZyAoaWYgc3VwcG9ydGVkKS4gIFRoaXMgYXZvaWRzCglkb2luZyBiY29weSdzIGluIGFuZCBvdXQgb2YgdGhlIGNvbnRlbnRzIGZpZWxkLgoKCShzdGVwXzEpOiAgQXZvaWQgY29yZWR1bXAgdW5kZXIgb2JzY3VyZSBjaXJjdW1zdGFuY2VzIHdoZW4gd2UKCWhhdmUgbm8gZnJhbWUuCgoJKiBzeW10YWIuaCAobWlzY19pbmZvKTogIEFkZCBmaWVsZCB0byBtaXNjIGZ1bmN0aW9uIHZlY3RvciBmb3IKCWFueSBraW5kIG9mIGNhY2hlZCBpbmZvcm1hdGlvbiB0aGUgdGFyZ2V0IGNvZGUgZGVzaXJlcy4gIEFNRAoJMjkwMDAgdXNlcyB0aGlzIHRvIGF2b2lkIHJlcGVhdGluZyBleGFtaW5lX2Z1bmN0aW9uX3Byb2xvZ3VlJ3MuCgoJKiBjb2ZmcmVhZC5jOiAgTGludC4gIFJlbW92ZSBzdGF0aWMgc3ltZmlsZSwgcmVhZF9zZWN0aW9uX2hlYWRlci4KCWNvcmUuYyAoaGF2ZV9jb3JlX2ZpbGVfcCk6ICBMaW50OiByZW1vdmUuCglleHBwcmludC5jIChwcmludF9zdWJleHApOiAgTGludC4KCWluZnB0cmFjZS5jLCB2YWxvcHMuYywgdmFscHJpbnQuYzogIGxpbnQuCgoJUm9sbCBpbiBjaGFuZ2VzIGZyb20gdnhnZGItNS4wLjE6CgoJKiBzeW10YWIuaDogIENvbW1lbnQgYnl0ZSBvcmRlciBvZiBlYWNoIGFkZHJlc3MgY2xhc3MuICBBZGQKCUxPQ19MT0NBTF9BUkcgZm9yIGZyYW1lLXJlbGF0aXZlIGFyZ3MgKDk2MCkuCglleHByZWFkLnk6ICBVc2UgTE9DX0xPQ0FMX0FSRyB3aGVyZSBMT0NfQVJHIGlzIHVzZWQuCglzeW10YWIuYywgc3ltbWlzYy5jOiAgZGl0dG8uCgkKCSogaW5mcnVuLmMgKGluaXRfd2FpdF9mb3JfaW5mZXJpb3IpOiAgQ2xlYXIgc3RvcF9zaWduYWwuCgoJKiByZW1vdGUuYyAocmVtb3RlX3Jlc3VtZSk6ICBFcnJvciBpZiByZXN1bWUgd2l0aCBhIHNpZ25hbC4KCgkqIHN5bWZpbGUuYyAocHJpbV9yZWNvcmRfbWlzY19mdW5jdGlvbik6ICBDbGVhciBtaXNjX2luZm8uCgkoZmlsbF9pbl92cHRyX2ZpZWxkbm8pOiAgQ2hlY2sgc3R1YiB0eXBlIG9mIGFyZy4KCgkqIHZhbG9wcy5jICh2YWx1ZV9jYXN0KTogIEF2b2lkIGxvb2tpbmcgdXAgbmFtZXMgb2YgdHlwZXMgd2hvc2UKCW5hbWUgd2UgZG9uJ3Qga25vdywgdG8gcHJldmVudCBjb3JlZHVtcC4gIFN1biBDQyBwcm9kdWNlcyB0eXBlZGVmCglydHggYW5kIHRoZSBuYW1lIG9mICpydHggaXMgemVyby4uLgoKTW9uIEZlYiAxOCAyMToxNjoyNSAxOTkxICBKb2huIEdpbG1vcmUgIChnbnUgYXQgY3lnaW50LmN5Z251cy5jb20pCgoJUm9sbCBpbiBjaGFuZ2VzIGZyb20gZmluYWwgQU1EIDI5MDAwIHBvcnQgKFRpZW1hbm4pLgoKCXRjb25maWcvYW0yOWs6ICBBZGQgQ09GRl9FTkNBUFNVTEFURSBhbmQgVEFSR0VUPVRBUkdFVF9BTTI5SwoJZm9yIC4uL2luY2x1ZGUvYS5vdXQuZW5jYXAuaC4gIFRoaXMgbWlnaHQgbm90IHdvcmsgbm93IHRoYXQgQkZECglpcyBzZXBhcmF0ZWx5IGNvbXBpbGVkLiAgSW5zdGVhZCwgQkZEIHN1cHBvcnQgZm9yIGVuY2FwIHdpbGwgaGF2ZQoJdG8gdHJhbnNsYXRlIG1hY2hpbmUgdHlwZSAyOWsgaW50byB0aGUgcmlnaHQgQ09GRl9NQUdJQy4KCQoJKiBpbmZjbWQuYzogUmVtb3ZlIHJlZmVyZW5jZXMgdG8gaW5mZXJpb3JfcGlkIHRoYXQgYXJlbid0IHVzZWQKCWluIGFjdHVhbCBwdHJhY2UgY2FsbHM7IHVzZSB0YXJnZXRfaGFzX2V4ZWN1dGlvbiwgZXRjLgoJKGhhdmVfaW5mZXJpb3JfcCk6ICBSZW1vdmUgZnVuY3Rpb24uCgkocHJvZ3JhbV9pbmZvKTogIFByaW50IHRhcmdldCBpbmZvIHJhdGhlciB0aGFuICJwcm9jZXNzIG51bWJlciI7Cglhdm9pZCBncmF0dWl0b3VzIG1lc3NhZ2VzIHVubGVzcyBmcm9tX3R0eS4KCShydW5fc3RhY2tfZHVtbXksIGZpbmlzaF9jb21tYW5kKTogIFNldCBwcm9jZWVkX3RvX2ZpbmlzaC4KCWluZnJ1bi5jOiBSZW1vdmUgaW5mZXJpb3JfcGlkIHJlZnMuICBEZWNsICYgaW5pdCBwcm9jZWVkX3RvX2ZpbmlzaC4KCW1haW4uYzogIExpbnQuICBMb3NlIGhhdmVfaW5mZXJpb3JfcCgpLgoJaW5mZXJpb3IuaCAoaGF2ZV9pbmZlcmlvcl9wKTogIFJlbW92ZSwgbGludC4KCShwcm9jZWVkX3RvX2ZpbmlzaCk6ICBBZGQgZmxhZyB0byBhc2sgdGhhdCBhbGwgcmVncyBiZSBzYXZlZAoJYnkgbm9ybWFsX3N0b3AsIGZvciB0aGUgZmV3IGNvbW1hbmRzIHRoYXQgbmVlZCBpdCwgc3BlZWRpbmcgdXAKCXNlcmlhbCBJL08uICBBZGQgY29tbWVudHMgdG8gc3RvcF9yZWdpc3RlcnMuCgoJKiByZW1vdGUtZWIuYzogIFJlbW92ZSBuZXdsaW5lIGZyb20gYnJlYWtwb2ludCBtZXNzYWdlIHdlIGdyZXAKCWZvci4gIE5ldmVyIHRpbWUgb3V0IHdoZW4gcnVubmluZyB0aGUgdXNlciBwcm9ncmFtLgoJCgoKV2VkIEZlYiAxMyAxNTozNDo0MCAxOTkxICBKb2huIEdpbG1vcmUgIChnbnUgYXQgY3lnaW50LmN5Z251cy5jb20pCgoJUm9sbCBpbiBjaGFuZ2VzIGZyb20gdnhnZGItNS4wLjE6CgoJKiBkYnhyZWFkLmMgKHJlYWRfZGJ4X3N5bXRhYik6IElmIHdlIGVuY291bnRlciBhICJGT1JUUkFOIENPTU1PTiIKCXN5bWJvbCBpbiBpdHMgcmF3IGZvcm0sIHdlIGFyZSBwcm9jZXNzaW5nIGFuIHVubGlua2VkICIubyIgZmlsZS4KCVNlZSBpZiB0aGUgdGFyZ2V0IGVudmlyb25tZW50IGhhcyBhc3NpZ25lZCBpdCBhbiBhZGRyZXNzLCB1c2luZwoJdGFyZ2V0X2xvb2t1cF9zeW1ib2wgKFZ4V29ya3MgZG9lcyksIGFuZCBlbnRlciBpdCBpbnRvIHRoZSBzeW10YWIKCXRoYXQgd2F5LgoKCSogdG0tdnh3b3Jrcy5oIChGUkFNRV9DSEFJTiwgRlJBTUVfQ0hBSU5fVkFMSUQpOiAgT3ZlcnJpZGUgdXN1YWwKCTY4ayB2ZXJzaW9ucyBmb3IgYSBzaW1wbGVyIHZlcnNpb24gdGhhdCBhc3N1bWVzIHplcm8gRlAgYXQgYm90dG9tLgoJRml4ZXMgYnVnIG9mIHRydW5jYXRlZCBzdGFjayByZXBvcnRzLgoKCSogdGFyZ2V0LmggKHRhcmdldF9sb29rdXBfc3ltYm9sKTogIERlZmluZSB0aGlzIHJvdXRpbmUncyBhcmdzCglhbmQgcmVzdWx0LCBmaW5hbGx5LgoKCSogdGFyZ2V0LmMgKG5vc3ltYm9sKTogIERlZmF1bHQgcm91dGluZSBmb3IgdGFyZ2V0X2xvb2t1cF9zeW1ib2wuCgkodGFyZ2V0X2RlZmF1bHQpOiAgRGVmYXVsdCBsb29rdXBfc3ltYm9sIGFuZCBjYWxsX2Z1bmN0aW9uIHRvby4KCShmaWxlc19pbmZvKTogIE9ubHkgcHJpbnQgaGFzX2FsbF9tZW1vcnkgd2FybmluZyBpZiBhIG5vbi1kdW1teQoJdGFyZ2V0IGZvbGxvd3MuCgoJKiByZW1vdGUtdnguYyAodnhfcmVhZF9yZWdpc3RlciwgdnhfY29udmVydF90b192aXJ0dWFsLAoJdnhfY29udmVydF9mcm9tX3ZpcnR1YWwpOiBJZiB0YXJnZXQgZG9lcyBub3QgaGF2ZSBmbG9hdGluZyBwb2ludCwKCXplcm8gcmVnaXN0ZXIgInZhbHVlcyIsIGFuZCBhdm9pZCBkb2luZyBjcm9zcy1uZXQgY29udmVyc2lvbnMuCgkodnhfbG9va3VwX3N5bWJvbCk6ICBSZW5hbWUgbmV0X2xvb2t1cF9zeW1ib2wsIGFkZCB0byB2ZWN0b3JzLgoJKHZ4X29wZW4pOiAgUmVhcnJhbmdlIGNvZGUgdGhhdCBhdHRhY2hlcyB0byB0YXJnZXQgYW5kIHJlYWRzCglzeW1ib2xzIGZvciBhbGwgbG9hZGVkIG1vZHVsZXMsIHRvIHdvcmsgaWYgc29tZSBvZiB0aGUgbW9kdWxlcwoJYXJlIG5vdCBhY2Nlc3NpYmxlLiAgQWRkIHN5bWJvbF9zdHViKCkgYW5kIGFkZF9zeW1ib2xfc3R1YigpCglhcyBjYWxsYmFja3MgZnJvbSBjYXRjaF9lcnJvcnMoKS4gIEFsbG93IGNvbm5lY3QgYXR0ZW1wdCB0byBiZQoJaW50ZXJydXB0ZWQgcGFpbmxlc3NseSB3aXRoIF5DIChGSVhNRSwgdGhlcmUgYXJlIHN0aWxsIHNvbWUgYnVncwoJaWYgdGhlIGludGVycnVwdCBoYXBwZW5zIGR1cmluZyBzeW1ib2wgcmVhZGluZy4pLiAgUHJpbnQKCWZpbmFsIG1lc3NhZ2Ugd2l0aCBwdXRzX2ZpbHRlcmVkLCBzaW5jZSBzeW1ib2wgbWVzc2FnZXMgYXJlCglub3cgZmlsdGVyZWQgdG9vLgoKCU1pc2MgY2xlYW51cDoKCgkqIG1haW4uYyAoY2F0Y2hfZXJyb3JzKTogIE9ubHkgcHJpbnQgZXJyc3RyaW5nIGlmIG5vbi1udWxsLgoJKGNvbW1hbmRfbG9vcCk6ICBBdm9pZCBhbiBpb2N0bCBwZXIgY29tbWFuZCB0byB0ZXN0IElTQVRUWS4KCgkqIHJlbW90ZS12eC5jIChuZXRfbG9hZCk6ICBtYWtlIHN0YXRpYzsgYXZvaWQgc29waG9tb3JpYyBtc2cuCgkodnhfeGZlcl9tZW1vcnkpOiAgUmV0dXJuIGNvcnJlY3QgcmVzdWx0IQoJKHZ4X2ZpbGVzX2luZm8pOiAgSW5kaWNhdGUgd2hldGhlciB0YXJnZXQgaGFzIGZsb2F0IG9yIG5vdC4KCSh2eF9sb29rdXBfc3ltYm9sKTogIENvbXBsYWluLCBub3QgZXJyb3IsIGlmIHRhcmdldCBnb25lLgoJKHZ4X29wZW4pOiAgUHJpbnQgIkNvbm5lY3RlZCIgbXNnIGJlZm9yZSBkaXNhYmxpbmcgaW1tZWRpYXRlLXF1aXQuCglbRklYTUU6ICBsb29rdXBfc3ltYm9sIGFuZCB2eF9vcGVuIGNoYW5nZXMgbmVlZCB0ZXN0aW5nLl0KCgl0YXJnZXQuYywgcmVtb3RlLWViLmMsIGluZnRhcmcuYywgYW0yOWstb3Bjb2RlLmgsIHRhcmdldC5oLAoJdG0tMjlrLmgsIHRtbS12eHdvcmtzNjguaCwgc3ltZmlsZS5jLCBnZGItaW50LnRleGluZm86IEFkZAoJY29udHJpYnV0b3IgbGluZXMgYW5kIHVwZGF0ZSBjb3B5cmlnaHRzIHRvIDE5OTEuCgoJQ2hhbmdlcyBmcm9tIGFuIGF0dGVtcHRlZCBILVBVWCBob3N0IHBvcnQ6CgoJKiBpbmZwdHJhY2UuYyAoUFRfQVRUQUNILCBQVF9ERVRBQ0gpOiAgSGFuZGxlIEhQL1VYLCB3aGljaCAKCWRlZmluZXMgUFRfQVRUQUNIIGFuZCBQVF9ERVRBQ0ggYnV0IG5vdCBQVF9LSUxMLgoJKiByZW1vdGUtZWIuYyAoZWJfb3Blbik6ICBNaXNwbGFjZWQgZW5kaWYga2lsbHMgc3lzdiBIL1BVWC4KCSogcmVtb3RlLXZ4LmM6IGluY2x1ZGUgPHN5cy90aW1lLmg+IGZvciBIUFVYLgoJKiBocDMwMGhwdXgteGRlcC5jIChmZXRjaF9jb3JlX3JlZ2lzdGVycyk6ICBSZXdyaXRlIG9sZAoJImNvcmVfZmlsZV9jb21tYW5kIiByb3V0aW5lIHRvIEJGRCByZWdpbWUuICBNYXkgbm90IHdvcmsgeWV0LgoKCUF0dGVtcHRlZCBwb3J0IG9mICJnZGItMy40IFZhbiBKYWNvYnNvbiB4Z2RiIiB0byBtb2Rlcm4gZ2RiLgoKCSogeGdkYi5jOiBSZXBsYWNlIFgxMCB2ZXJzaW9uIHdpdGggc29tZSBWSiB2ZXJzaW9uLgoJKEZJWE1FOiAgSXRzIGNvcHlyaWdodCBhc3NpZ25tZW50IGlzIG5vdCBvbiByZWNvcmQuKQoJKiB4Z2RiLmM6ICBVcGRhdGUgaW5jbHVkZSBmaWxlcyB0byBYMTFSNCAoWGF3IGNydWQpLgoJKHhnZGJfZGlzcGxheV9zb3VyY2UsIGNyZWF0ZV90ZXh0X3dpZGdldCk6IGZpeCBjYWxsIHRvCglnZXRfZmlsZW5hbWVfYW5kX2NoYXJwb3MuICBSZXdhY2sgc291cmNlIHdpbmRvdyBzdHVmZiBmb3IgWDExUjQKCShnbGVhbmVkIGZyb20gaW5jbHVkZSBmaWxlcywgYW5kICJubSdzIiBvZiBiaW5hcnkgbGlicmFyaWVzLCBzaW5jZQoJSSBoYWQgbm8gZG9jIGF2YWlsYWJsZSkuCgkoYXBwZW5kX3NlbGVjdGlvbiwgYXBwZW5kX3NlbGVjdGlvbl93b3JkKTogRGlzYWJsZSB3aXRoIEZJWE1FCglzaW5jZSBSNCBjaGFuZ2VkIGludGVyZmFjZSBoZXJlLgoJKGNyZWF0ZV9idXR0b25zKTogIEFkZCBiYWNrIHRoZSBvbGQgc2V0IG9mIGJ1dHRvbnMuCgkoeGdkYl9jcmVhdGVfd2luZG93KTogIEZpeCBjYWxsIHRvIFh0SW5pdGlhbGl6ZSAoJmFyZ2Mgbm90IGFyZ2MpLgoKCSogTWFrZWZpbGUuZGlzdCAoeGdkYiwgeGdkYi1pbml0LmMpOiAgVXBkYXRlIGZvciBYMTFSNCBvbiBTdW5zLgoJUm9sbCBWRVJTSU9OIHRvIDMuOTQgKG5vdCB5ZXQgZmluYWwgdGhvdWdoKS4KClNhdCBGZWIgIDkgMDk6NDY6MjUgMTk5MSAgSm9obiBHaWxtb3JlICAoZ251IGF0IGN5Z2ludC5jeWdudXMuY29tKQoKCSogb2JzdGFjay5oIChvYnN0YWNrX3B0cl9ncm93LCBvYnN0YWNrX3B0cl9ncm93X2Zhc3QsCglvYnN0YWNrX2ludF9ncm93LCBvYnN0YWNrX2ludF9ncm93X2Zhc3QpOiAgRWxpbWluYXRlCgljYXN0IG9uIGxlZnQgb2YgYXNzaWdubWVudCwgd2hpY2ggZ2l2ZXMgTUlQUyBjYyBmaXRzIGFuZCBpcwoJbm90IFN0YW5kYXJkIEMuCgoJKiBzcGFyYy1waW5zbi5jIChwcmludF9pbnNuKTogRWxpbWluYXRlICdzZXQnIHRlc3QsIHN1YnN1bWVkIGJ5CglGX0FMSUFTLiAgVXNlIHByaW50Ziwgbm90IGZwcmludGYsIHdoZW4gbm90IHBhc3NpbmcgYSBmaWxlCglwb2ludGVyLi4uCgkoY29tcGFyZV9vcGNvZGVzKTogQ2hlY2sgdGhhdCBpZGVudGljYWwgaW5zdHJ1Y3Rpb25zIGhhdmUKCWlkZW50aWNhbCBvcGNvZGVzLCBjb21wbGFpbiBvdGhlcndpc2UuCgoJKiBzcGFyYy1vcGNvZGUuaCAoc3QgJWZzcik6ICBGaXggb3Bjb2RlICJsb3NlIiBtYXNrLiAgVGhpcwoJd2FzIHJlcG9ydGVkIGJ5IFJvbGFuZCBNY0dyYXRoLgoJKHVuaW1wKTogT25seSBtYXRjaCBpZiBleGFjdGx5IHplcm8gaW5zdHJ1Y3Rpb24uICAoUm9sYW5kKQoJKGJyYW5jaGVzIGFuZCB0cmFwcyk6ICBHZW5lcmF0ZSBhbGwgdmFyaWF0aW9ucyBvZiB0aGVzZQoJaW5zdHJ1Y3Rpb25zIHdpdGggbWFjcm9zLCBiYXNlZCBvbiBhIHNpbmdsZSBjYWxsIHRoYXQgZGVmaW5lcwoJZWFjaCBjb25kaXRpb24gbmFtZSBhbmQgaXRzIGJpbmFyeSByZXByZXNlbnRhdGlvbi4KCShzZXQpOiAgVHVybiBvbiBhbGlhcyBiaXQsIHRvIGF2b2lkIHRlc3QgaW4gc3BhcmMtcGluc24uYy4KCgkqIHZhbHByaW50LmMgKHZhbF9wcmludF9maWVsZHMpOiAgVGFrZSwgYW5kIHVzZSwgZm9ybWF0IHBhcmFtZXRlci4KCVRoaXMgbWVhbnMgdGhhdCAicC94IHN0cnVjdCIgYWdhaW4gcHJpbnRzIHRoZSBlbGVtZW50cyBpbiB0aGUKCWRlc2lyZWQgZm9ybWF0LiAgQ2hhbmdlZCBjYWxsZXJzLgoKCSogc3RhY2suYyAoZnJhbWVfaW5mbyk6ICBVc2UgZmlsdGVyZWQgb3V0cHV0LCBhbmQgaW5kaWNhdGUgd3JhcAoJcG9pbnRzLiAgUmVtb3ZlIGtsdWRneSBmb3JtYXR0aW5nIGRlc2lnbmVkIHRvIGF2b2lkIGxpbmUgd3JhcC4KCgkqIHV0aWxzLmMgKHdyYXBfaGVyZSk6ICBJZiB0aGUgbGluZSBpcyBhbHJlYWR5IGZ1bGwgKGJlY2F1c2UKCXdlIGhhZCBwcmludGVkIGEgbG9uZyBpbmRlbnQgb3IgbG9uZyB3cmFwcGVkIHN0cmluZyksIGRvIGFuCglpbW1lZGlhdGUgbmV3bGluZS1hbmQtaW5kZW50LgoKCSogbTY4ay1waW5zbi5jIChwcmludF9pbnNuX2FyZyk6IEJ1Z2ZpeCBmcm9tCgludG10diF0aG9tcHNvbkBhbWVzLmFyYy5uYXNhLmdvdiAoTWlrZSBUaG9tcHNvbik6ICdia3B0ICMwJwoJaW5zdHJ1Y3Rpb24gaXMgaW5jb3JyZWN0bHkgZGlzYXNzZW1ibGVkIGFzIGJrcHQgIzguCgoJKiBkYnhyZWFkLmMgKGVuZF9wc3ltdGFiKTogQnVnZml4IGZyb20gUGV0ZXIgU2NoYXVlcgoJPHBlc3JlbUByZWdlbnQuZS10ZWNobmlrLnR1LW11ZW5jaGVuLmRlPjogSWYgeW91IHdhbnQgdG8gc2V0IGEKCWJyZWFrcG9pbnQgaW4gYSAqLnkgZmlsZSBnZGIgd2lsbCBzYXkgUmVhZGluZyBpbiBzeW1ib2xzIGZvciAqLnkuLi4KCWFuZCB0aGVuIHdpbGwgZHVtcCBjb3JlIChzb21ldGltZXMpLiBJIHRyYWNlZCBpdCBiYWNrIHRvIGFuCgl1bmluaXRpYWxpemVkIHN5bWZpbGVfbmFtZSBpbiBwc3ltdGFiX3RvX3N5bXRhYi4KCShjb25zdF92b2xfY29tcGxhaW50KTogIEFkZCBxdW90ZXMgdG8gbWVzc2FnZS4KCShkZWZpbmVfc3ltYm9sKTogIE9ubHkgYmVsaWV2ZSBsaW5lIG51bWJlciBpZiBnY2NfY29tcGlsZWQuCglBdm9pZCBhbGxvY2F0aW5nIHN5bWJvbCBpZiB3ZSB3aWxsIG5vdCByZXR1cm4gaXQuCgoJQWRkIHRhcmdldCBzdHJhdGEgc3VwcG9ydCBzbyB0aGF0IG5ld2x5IGVzdGFibGlzaGVkIHRhcmdldHMgZ28KCWludG8gdGhlaXIgcmlnaHQgcGxhY2UgaW4gdGhlIHRhcmdldCBzdGFjayAoZS5nLiBhIG5ldyBleGVjIGZpbGUKCWRvZXNuJ3Qgd2lwZSBvdXQgdGhlIGFiaWxpdHkgdG8gYWNjZXNzIHRoZSBydW5uaW5nIHByb2Nlc3MpLgoKCSogdGFyZ2V0LmgsIGNvcmUuYywgZXhlYy5jLCBpbmZ0YXJnLmMsIHJlbW90ZS1lYi5jLAoJcmVtb3RlLW5pbmR5LmMsIHJlbW90ZS12eC5jLCByZW1vdGUuYywgdGFyZ2V0LmM6ICBBZGQgdG9fc3RyYXR1bQoJYW5kIGluaXRpYWxpemUgaXQgcHJvcGVybHkgaW4gYWxsIHRoZSB0YXJnZXRzLgoKCSogdGFyZ2V0Lmg6ICBEb2N1bWVudCBzdHJhdGEuICBDaGFuZ2UgcmV0dXJuIHR5cGUgb2YgcHVzaF90YXJnZXQuCgoJKiB0YXJnZXQuYyAobm9tZW1vcnkpOiAgbmV3IGZ1bmN0aW9uIGZvciBkdW1teSBtZW1vcnkgYWNjZXNzLgoJKHRjb21wbGFpbik6ICBSZW5hbWUgY29tcGxhaW4sIG5vdyBhbHNvIHVzZWQgaW4gc3ltZmlsZS5jLgoJKHB1c2hfdGFyZ2V0KTogIFB1c2ggdGFyZ2V0cyB3aXRoaW4gc3RyYXRhLiAgTmV3IHJldHVybiB2YWx1ZSBzaG93cwoJd2hldGhlciBuZXcgdGFyZ2V0IGlzIG9uIHRvcCBvZiBzdGFjayBvciBub3QuICBBbHdheXMga2VlcCBkdW1teQoJdGFyZ2V0IG9uIHN0YWNrLgoJKHRhcmdldF9maWxlc19pbmZvKTogIElnbm9yZSBkdW1teSB0YXJnZXQuCgoJKiBjb3JlLmMgKGNvcmVfb3Blbik6ICBXYXJuIHVzZXIsIGFuZCBza2lwIGFjY2Vzc2luZyBmaWxlLCBpZiB0aGUKCWNvcmUgdGFyZ2V0IGlzIG5vdCB0aGUgdG9wbW9zdCB0YXJnZXQgaW4gdGhlIHN0YWNrLgoJKiByZW1vdGUtbmluZHkuYyAobmluZHlfY3JlYXRlX2luZmVyaW9yKTogIEF2b2lkIHVucHVzaF90YXJnZXQsIG5vdwoJYWxyZWFkeSBoYW5kbGVkLgoKCSogcmVtb3RlLXZ4LmM6ICBSZW1vdmUgdnhfcHJlcGFyZV90b19zdG9yZSBmcm9tIHZ4d29ya3MgbWVtb3J5Cgl0YXJnZXRfb3BzLCBpdCBkb2Vzbid0IGJlbG9uZyB0aGVyZSBzaW5jZSB3ZSBoYXZlIG5vIHJlZ3MgdGhlcmUuCglDaGFuZ2UgbmFtZSBvZiB0YXJnZXQgZnJvbSBtYWNoaW5lID0+IG1lbW9yeSB0byBjbGFyaWZ5LgoKVGh1IEZlYiAgNyAxNjozMjowOSAxOTkxICBKb2huIEdpbG1vcmUgIChnbnUgYXQgc3BpZmYuY3lnbnVzLmNvbSkKCgkqIEZyZWV6ZSB2ZXJzaW9uIDMuOTMgZm9yIHJlbGVhc2UuCgoJKiBNYWtlZmlsZS5kaXN0OiAgSGFuZGxlIHZ4LXNoYXJlIGFuZCBuaW5keS1zaGFyZSBzdWJkaXJzCglwcm9wZXJseSB3aGVuIGJ1aWxkaW5nIGdkYi50YXIuWi4KCgkqIHN5bXRhYi5jOiAgbGludDsgYWRkIG5vX3N5bXRhYl9tc2cgdG8gY29uc29saWRhdGUgdGhlIG1lc3NhZ2VzCglwcmludGVkIGluIHZhcmlvdXMgcGxhY2VzLCBzbyBJIGNvdWxkIGNoYW5nZSBqdXN0IG9uZSBjb3B5LgoKCSogZGJ4cmVhZC5jLCBjb2ZmcmVhZC5jOiAgQ2hhbmdlIHJlZmVyZW5jZXMgdG8gYmZkLT5pb3N0cmVhbQoJdG8gY2FzdCB0byBGSUxFICosIG5vdyB0aGF0IEJGRCBhdm9pZHMgbmVlZGluZyB0eXBlcyBkZWZpbmVkCglpbiBvdGhlciBoZWFkZXIgZmlsZXMuCgpUdWUgRmViICA1IDIxOjM5OjM1IDE5OTEgIEpvaG4gR2lsbW9yZSAgKGdudSBhdCBjeWdpbnQuY3lnbnVzLmNvbSkKCgkqIGNvbW1hbmQuYywgZGJ4cmVhZC5jLCBleHBwcmludC5jLCBpbmZjbWQuYywgaW5mcHRyYWNlLmMsCglpbmZydW4uYywgcHJpbnRjbWQuYywgcmVtb3RlLW5pbmR5LmMsIHNvdXJjZS5jLCBzcGFyYy10ZGVwLmMsCglzcGFyYy14ZGVwLmMsIHN5bWZpbGUuaCwgc3ltbWlzYy5jLCB1dGlscy5jLCB2YWxwcmludC5jOiBMaW50CgkoYWN0dWFsbHkgZ2NjIC1XYWxsKS4KCgkqIGRieHJlYWQuYzogIFJlbW92ZSBmaXJzdF9nbG9iYWxfc3ltLCBsYXN0X2dsb2JhbF9zeW0sIHNpbmNlCgl0aGV5IGFyZSBuZXZlciByZWZlcmVuY2VkLgoKCSogZGVmcy5oIChiYXVkX3JhdGUpOiAgRGVjbGFyZS4KCW1haW4uYzogRGVmaW5lIGl0LCBhbmQgYWRkIHRoZSAtYiBvcHRpb24gdG8gc2V0IGl0LgoKCSogZ2RiLWludC50ZXhpbmZvOiAgQWRkIHRleHQgb24gaG93IHRvIGRlZmluZSBhIG5ldyBob3N0IG9yIHRhcmdldAoJYXJjaGl0ZWN0dXJlLCBwcm9tcHRlZCBieSBQZXIgQm90aG5lcidzIHF1ZXN0aW9ucyBhYm91dCBNSVBTCglzdXBwb3J0LgoKCSogZ2RiLnRleGluZm86ICBEb2N1bWVudCAiY29tcGxhaW50cyIuICBDaGFuZ2UgZG9jIG9mIC1xIHNpbmNlCglnZGIgbm8gbG9uZ2VyIHByaW50cyB0aGUgY29weXJpZ2h0IGFuZCBibHVyYiBpZiB5b3Ugc3BlY2lmeSBhIGZpbGUKCW5hbWUgdG8gYmUgZGVidWdnZWQgKGp1c3QgbGlrZSBFbWFjcykuICBBZGQgZG9jIGZvciBOaW5keS1zcGVjaWZpYwoJY29tbWFuZCBsaW5lIGZsYWdzIGZvciBzcGVjaWZ5aW5nIHRhcmdldCBzZXJpYWwgcG9ydCBhbmQgc3VjaC4KCVVwZGF0ZSBjb3B5cmlnaHQgdG8gMTk5MS4KCgkqIGdkYmNvcmUuaDogIFJlbW92ZSBhIGxhcmdlIG1hc3Mgb2Ygbm93LXVzZWxlc3MgY3J1ZCwgc2luY2UgQkZECgloYXMgdGFrZW4gb3ZlciBmb3IgdXMgdGhlIGpvYiBvZiByaXBwaW5nIHVwIGV4ZWN1dGFibGUgZmlsZXMuICBUaGUKCWNydWQgY2F1c2VkIFBlciBCb3RobmVyJ3MgcG9ydCB0byBub3QgY29tcGlsZS4KCgkqIGluZnJ1bi5jIChub3JtYWxfc3RvcCk6ICBBdm9pZCBwcmludGluZyAiUHJvZ3JhbSBleGl0ZWQKCW5vcm1hbGx5IiBpZiB3ZSBhcmUgaW4gYmF0Y2ggbW9kZS4gIFRoaXMgYWxsb3dzIGEgR0RCIHdoaWNoCglleGVjdXRlcyBhIHByb2dyYW0gb24gYSB0YXJnZXQgc3lzdGVtLCB0byBiZWhhdmUgbGlrZSBhIFVuaXgKCWNvbW1hbmQgKGlucHV0IGZyb20gc3RkaW4sIG91dHB1dCB0byBzdGRvdXQsIG5vIGV4dHJhbmVvdXMKCW91dHB1dCkuCgoJKiBtYWluLmMgKG1haW4pOiAgQWxsb3cgYWRkaXRpb25hbCBtYWNoaW5lLWRlcGVuZGVudCBjb21tYW5kIGxpbmUKCW9wdGlvbnMgdG8gYmUgc3BlY2lmaWVkIHdpdGggdGhlIEFERElUSU9OQUxfT1BUSU9OUywKCUFERElUSU9OQUxfT1BUSU9OX0NBU0VTLCBBRERJVElPTkFMX09QVElPTl9IRUxQLCBhbmQKCUFERElUSU9OQUxfT1BUSU9OX0hBTkRMRVIgbWFjcm9zLiAgQWxzbyBhbGxvdyBtYWNoaW5lLWRlcGVuZGVudAoJcHJvY2Vzc2luZyB0byBvY2N1ciBqdXN0IGJlZm9yZSB0aGUgbWFpbiBsb29wIHdpdGgKCUJFRk9SRV9NQUlOX0xPT1BfSE9PSy4gIAoJKG1haW4pOiAgSWYgYSAiY29yZSBmaWxlIiBhcmd1bWVudCBpcyBzcGVjaWZpZWQsIGFuZCBpdCBpcyBub3QgYQoJY29yZSBmaWxlLCB0cnkgaXQgYXMgYSBwcm9jZXNzIElEIHRvIGF0dGFjaC4gIAoJKHN5bWJvbF9jb21wbGV0aW9uX2Z1bmN0aW9uKTogIEF0dGVtcHQgdG8gY29wZSB3aXRoIAoJInNob3cgc2NyZWVuLSIgVEFCLCBub3QgdmVyeSBzdWNjZXNzZnVsbHkuICBUaGlzIG5lZWRzIG1vcmUgd29yaywKCUZJWE1FLgoJKGJhdGNoX2ZpbGUpOiAgTmV3IGZ1bmN0aW9uLCByZXR1cm5zIHdoZXRoZXIgd2UgYXJlIHJlYWRpbmcKCWNvbW1hbmRzIGZyb20gYW4gaW50ZXJhY3RpdmUgdHR5IG9uIHN0ZGluLCBvciBmcm9tIHNvbWV3aGVyZSBlbHNlLgoJQ2FsbGVkIGJ5IG5vcm1hbF9zdG9wIHNpbmNlIGl0IGRvZXNuJ3QgZ2V0IGZyb21fdHR5IHBhc3NlZCBkb3duCgl0byBpdCBsaWtlIG1hbnkgY29tbWFuZHMgZG8uCgoJKiByZW1vdGUtbmluZHkuYzogIEhhbmRsZSBjb21tYW5kIGxpbmUgb3B0aW9ucyBmb3IgbmluZHkKCWNvbm5lY3Rpb24uCgkobmluZHlfYmVmb3JlX21haW5fbG9vcCk6ICBQcm9tcHQgdXNlciBmb3IgdHR5IG5hbWUgaWYgdGhleQoJZG9uJ3Qgc3BlY2lmeSBpdCBiZWZvcmUgZ2V0dGluZyB0byB0aGUgaW50ZXJhY3RpdmUgY29tbWFuZCBsb29wLgoKCSogdG0taTk2MC5jOiAgQWRkIEFERElUSU9OQUxfT1BUSU9OUywgZXRjLCB0byBoYW5kbGUgLU8sIC1icmssCglhbmQgLXIgY29tbWFuZCBsaW5lIG9wdGlvbnMuICBBbHNvIGFkZCBob29rIGJlZm9yZSBtYWluIGxvb3AKCXRvIG1ha2UgaXQgZWFzeSB0byBzcGVjaWZ5IGEgdHR5LgoKCSogVE9ETzogIE1vcmUgdGhpbmdzIHRvIGRvLCBvbmUgZG9uZS4KCk1vbiBGZWIgIDQgMjM6NTc6MzkgMTk5MSAgSm9obiBHaWxtb3JlIGFuZCBNaWtlIFRpZW1hbm4gIChhdCBjeWdpbnQuY3lnbnVzLmNvbSkKCgkqIGRieHJlYWQuYzogIE1ha2UgY29tcGxhaW50KCkgY2FsbHMgcGFzcyBwb2ludGVyLCBub3Qgc3RydWN0LgoJQWRkIGNvbXBsYWludHMgYWJvdXQgYmFkbHkgZm9ybWF0dGVkIEMrKyB0eXBlIGluZm9ybWF0aW9uCgkoY29uc3Qvdm9sYXRpbGUgaW5kaWNhdG9yLCBhbmQgcGFyc2UgZXJyb3JzIHJlc3VsdGluZyBpbgoJZXJyb3JfdHlwZSkuICBGaXggQysrIHZpcnR1YWwgbWVtYmVyIGZuIGNvbW1lbnQuCgkocmVhZF9zdHJ1Y3RfdHlwZSk6ICBBdm9pZCBidW1waW5nIHBvaW50ZXIgaWYgd2UgZ290IGEgcGFyc2UKCWVycm9yOyB0aGlzIHByZXZlbnRzIG91ciB3YWxraW5nIGJleW9uZCB0aGUgZW5kIG9mIGEgc3RyaW5nLgoJVGVybWluYXRlIGxvb3Agb24gbnVsbCBjaGFyIGFzIHdlbGwgYXMgc2VtaWNvbG9uLgoJKHByb2Nlc3Nfb25lX3N5bWJvbCk6ICBGaXggdGhlIExCUkFDIGZpeCBzbyB0aGF0IGl0IHVzZXMgdGhlCglsYXN0IHByZXZpb3VzIFNMSU5FLCBGVU4sIG9yIFNPIHJlY29yZCdzIFBDIGFkZHJlc3MuICBDKysgZGVidWcKCXN5bWJvbHMgZGlkIG5vdCBoYXZlIFNMSU5FIHJlY29yZHMgaW4gYSB1c2VmdWwgb3JkZXIgY29tcGFyZWQKCXRvIHRoZSBMQlJBQyByZWNvcmRzLgoJKGRlZmluZV9zeW1ib2wpOiAgSGFuZGxlICJjYXRjaCIgcmVjb3Jkcy4KCgkqIHN5bXRhYi5jIChjaGVja19zdHViX3R5cGUpOiAgQWRkZWQgbmV3IGNvbXBsYWluCglgc3R1Yl9ub25hbWVfY29tcGxhaW4nIGFuZCBhZGRlZCBhIGNvbnNpc3RlbmN5IGNoZWNrIHRvCglrZWVwIHRoZSBkZWJ1Z2dlciBmcm9tIGNyYXNoaW5nIHdoZW4gZmluaXNoaW5nIGZyb20gYW4KCWV4Y2VwdGlvbiBmcmFtZS4gIEEgcmVhbCBmaXggd2lsbCBiZSBuZWVkZWQgbGF0ZXIuCgpTYXQgRmViICAyIDEwOjQzOjA1IDE5OTEgIEpvaG4gR2lsbW9yZSAgKGdudSBhdCBjeWdpbnQuY3lnbnVzLmNvbSkKCgkqIGluZmNtZC5jIChhdHRhY2hfY29tbWFuZCk6ICBNYWtlIGdsb2JhbC4KCgkqIE1ha2VmaWxlLmRpc3QgKFJFTU9URV9PQlMpOiAgTWFrZSB0aGVzZSBjb21waWxlIGJ5IGRlZmF1bHQsCglidXQgbWFrZSB0aGVtIGVhc3kgdG8gY29tbWVudCBvdXQuICBQZXJoYXBzIGxhdGVyIHRoZXkgc2hvdWxkCgliZSBlbmFibGVkIGJ5IHdoYXQgQ1BVIHlvdSBjb25maWd1cmUgZm9yPyAgRklYTUUuCgkoVkVSU0lPTik6ICBSb2xsIHRvIDMuOTMuCgkocGluc24ubyk6ICBSZW1vdmUgcnVsZSBmb3Igb2Jzb2xldGUgZmlsZS4KCShkYnhyZWFkLm8sY29mZnJlYWQubyxtaXBzcmVhZC5vKTogIFVzZSAke3NyY2Rpcn0gZXhwbGljaXRseS4KCglSdW4gZG93biBhIHByb2JsZW0gdGhhdCBtYW5pZmVzdGVkIGJ5IHByaW50aW5nIHRoZSB3cm9uZyBmdW5jdGlvbgoJbmFtZSBpbiBzdGFjayB0cmFjZXMgb2YgcmVhZF9vZmlsZV9zeW10YWIuICBUdXJuZWQgb3V0IHRoYXQgdGhlIAoJcHJvYmxlbSB3YXMgdGhlIFN1bk9TIDQuMS4xIChhbmQgcHJldmlvdXMpIEMgY29tcGlsZXIgb3V0cHV0cwoJdGhlIExCUkFDIHN5bWJvbCB3aXRoIGFuIGFkZHJlc3MgaW4gdGhlICpkYXRhKiBzZWdtZW50LCB3aGljaAoJYmxldyBvdXIgYmluYXJ5IHNlYXJjaCB0aHJvdWdoIHRoZSBibG9ja3MuCgoJKiBkYnhyZWFkLmM6IFVzZSB0aGUgY29tcGxhaW4oKSBmYWNpbGl0eSBjb25zaXN0ZW50bHkgdG8gYml0Y2gKCWFib3V0IHByb2JsZW1zIGluIHRoZSBzeW1ib2wgZmlsZSB3ZSBhcmUgcmVhZGluZy4KCShmaW5pc2hfYmxvY2spOiAgQWRkIGNvZGUgdG8gY2hlY2sgdGhlIG5lc3Rpbmcgb2YgdGhlIGJsb2NrczsKCWNvbXBsYWluIGFuZCBQcm9jcnVzdCB0aGVtIHRvIGZpdCBpZiB3cm9uZy4KCShtYWtlX2Jsb2NrdmVjdG9yKTogIENoZWNrIHRoZSBvcmRlciBvZiB0aGUgYmxvY2tzLCBjb21wbGFpbiAKCVtidXQgZG9uJ3QgY29wZV0gaWYgd3JvbmcuCgkocHJvY2Vzc19vbmVfc3ltYm9sKTogIGlmbmRlZiBTVU5fRklYRURfTEJSQUNfQlVHLCBjaGVjayBMQlJBQwoJc3ltYm9scyB0byBiZSBzdXJlIHRoZWlyIFBDIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiB0aGUgbGFzdCBTTElORQoJKGxpbmUgbnVtYmVyKSBzeW1ib2wgd2UndmUgc2VlbiwgY29tcGxhaW5pbmcgYW5kIGFkb3B0aW5nIHRoZQoJU0xJTkUgUEMgdmFsdWUgaWYgd3JvbmcuCgoJKiBzeW1maWxlLmggKHN0cnVjdCBjb21wbGFpbnQsIGNvbXBsYWludF9yb290LCBjb21wbGFpbiwgCgljbGVhcl9jb21wbGFpbnRzKTogIEFkZC4KCSogc3ltZmlsZS5jIChjb21wbGFpbiwgY29tcGxhaW50X3Jvb3QsIGNsZWFyX2NvbXBsYWludHMpOiAgQWRkCglmYWNpbGl0eSB0byBkZWFsIHdpdGggbm9uLWZhdGFsIGNvbXBsYWludHMgYW5kIHRvIHJlZ3VsYXJpemUgdGhlaXIKCXN1cHByZXNzaW9uLgoJKHN5bWJvbF9maWxlX2FkZCk6ICBDbGVhciBjb21wbGFpbnQgY291bnRlcnMgdG8gYWxsb3cgbmV3IGNvbXBsYWludHMuCgkoaW5pdGlhbGl6ZV9zeW1maWxlKTogIEFkZCAnc2V0IGNvbXBsYWludHMnIGFuZCAnc2hvdyBjb21wbGFpbnRzJy4KCgkqIGRieHJlYWQuYyAoZGJ4X3N5bWZpbGVfcmVhZCk6ICBSZW1lbWJlciB0aGUgYWRkcmVzcyBhbmQgc2l6ZQoJb2YgdGhlIHN0cmluZyB0YWJsZSBmb3IgdGhlIG1haW4gc3ltYm9sIGZpbGUsIHNvIHdlIHdvbid0IHJlYWQgaXQKCW1vcmUgdGhhbiBvbmNlLgoJKGRieF9wc3ltdGFiX3RvX3N5bXRhYik6ICBGaXggdGhlIGNoZWNrIGZvciBtYWluIHN5bWJvbCBmaWxlLAoJdG8gYXZvaWQgcmVhZGluZyB0aGUgc3RyaW5nIHRhYmxlIHlldCBhZ2Fpbi4gIExpbnQuCgkodGhyb3VnaG91dCk6ICBJbXByb3ZlIGZpbHRlcmVkIG91dHB1dCwgaW5jbHVkaW5nIHdvcmQgd3JhcC4KCShyZWFkX3JhbmdlX3R5cGUpOiAgSW1wcm92ZSBCb3RobmVyJ3MgZml4IHRvIGhhbmRsZSBvdGhlciB0eXBlcyB0b28uCgoJKiB1dGlscy5jOiAgSW1wcm92ZSBsaW5lIHdyYXAgaW1wbGVtZW50YXRpb24uICBIYW5kbGUgdW5saW1pdGVkCgl3aWR0aCBieSBtYWtpbmcgY2hhcnNfcGVyX2xpbmUgdW5zaWduZWQuCgkocHV0c19maWx0ZXJlZCk6ICBOZXcsIGVhc3ksIGZ1bmN0aW9uLgkKCgkqIGRlZnMuaCAocHV0c19maWx0ZXJlZCk6ICBhZGQuCgoJKiBtaXBzcmVhZC5jIChjb21wYXJlX3N5bWJvbHMsIHNvcnRfc3ltdGFiKTogIFJlbW92ZSB0aGVzZSBmbnMsCgljYWxsIHRoZSBpZGVudGljYWwgc29ydF9zeW10YWJfc3ltcygpIGluIHN5bWZpbGUuYyBpbnN0ZWFkLgoKCSogZXhwcmVhZC55OiAgU3VnZ2VzdCB0aGUgYGZpbGUnIGNvbW1hbmQgcmF0aGVyIHRoYW4gYHN5bWJvbC1maWxlJy4KCgkqIGNvbW1hbmQuaCAoZW51bSB2YXJfdHlwZXMpOiAgQWRkIHppbnRlZ2VyIGZvciBzZXJvYWJsZQoJdW5zaWduZWQgaW50ZWdlci4KCSogY29tbWFuZC5jIChkb19zZXRzaG93X2NvbW1hbmQpOiAgSGFuZGxlIHZhcl96aW50ZWdlci4gIFJlc3RydWN0dXJlCgluZXN0ZWQgaWYncyBpbnRvIGEgc3dpdGNoLgoKCSogYnJlYWtwb2ludC5jIChicHN0YXRfcHJpbnQpOiBJZiBicHN0YXQgInByaW50IiBmbGFnIGlzIG5vdCBzZXQsCgl3ZSBkaWQgbm90IHN0b3AgYmVjYXVzZSBvZiBhIGJyZWFrcG9pbnQgKGl0IG11c3QgaGF2ZSBiZWVuIGZvcgoJc29tZSBvdGhlciByZWFzb24sIGxpa2UgYSAic3RlcGkiKSwgc28gZG9uJ3QgcHJpbnQgYW55dGhpbmcuCgoJKiBzeW10YWIuYzogSW5jbHVkZSA8c3lzL3R5cGVzLmg+IGFsbCB0aGUgdGltZS4gIE5vdyB0aGF0IEJGRAoJZG9lc24ndCBpbmNsdWRlIDxzeXMvdHlwZXMuaD4sIG9sZCBTdW5PUydzIHJlcXVpcmUgaXQgZm9yCgk8c3lzL3N0YXQuaD4uCgpTYXQgRmViICAyIDEwOjM5OjE1IDE5OTEgIFBlciBCb3RobmVyICAoYm90aG5lckBjcy53aXNjLmVkdSkKCglBIHRlc3QgcG9ydCBvZiBnZGItMy45Mi42IHRvIHRoZSBTb255IE5FV1MuCgoJKiBNYWtlZmlsZS5kaXN0CglEb24ndCBub3JtYWxseSBsaW5rIGluIHJlbW90ZS0gb3Igdnggc3R1ZmYuCglTb21lIG9mIGl0IGRvZXNuJ3QgY29tcGlsZSwgYW5kIGl0IHdhc3RlcyBzcGFjZSBmb3IgOTklCW9mIHRoZSB1c2Vycy4KCVJlbW92ZSByZWZlcmVuY2UgdG8gbm8tbG9uZ2VyLXVzZWQgSEFWRV9WUFJJTlRGLgoJRml4ZWQgQkZEX0RFUCB0eXBvIHRvIEJGRF9ESVIuCgkqIGRieHJlYWQuYwoJRml4IGNhc3QgaW4gYXJnIHRvIGJmZF9oX2dldGxvbmcuCglNYWtlIGNoYXIgKnByZWZpeCBiZSBjb25zdC4KCUZpeCBob3cgY2VydGFpbiByYW5nZSB0eXBlcyBhcmUgbWFwcGVkIGludG8gYnVpbHRpbiB1bnNpZ25lZCBpbnQgdHlwZXMuCgkqIGluZnJ1bi5jCglSZW1vdmUgMiAjaW5jbHVkZXMuIFRoZXkgY2F1c2UgZXJyb3JzIChvbiBTb255LCBhdCBsZWFzdCksCglhbmQgYXJlbid0IG5lZWRlZCAodGhleSB3ZXJuJ3QgaW4gZWFybGllciB2ZXJzaW9ucykuCgkqIHByaW50Y21kLmMKCXByaW50X2FkZHJlc3Nfc3ltYm9saWMgc2hvdWxkIG5ldmVyIGRlbWFuZ2xlIGxhYmVscwoJKHNpbmNlIGl0IHByaW50cyAqYXNzZW1ibGVyLWxldmVsKiBsYWJlbHMpLgoKCSAgICAgICBbVGhpcyB3YXMgc3VwZXJzZWRlZCBieSB0aGUgY2hhbmdlIHRvIHByaW50Y21kIGJlbG93Ll0KCgkqIHV0aWxzLmMKCUFkZCBzb21lICJ2b2xhdGlsZSIgcmV0dXJuIHR5cGVzIHRvIGF2b2lkIHdhcm5pbmdzLgoJSWYgTUlTU0lOR19WUFJJTlRGIGFkZCB2cHJpbnRmIGZ1bmN0aW9uIGFuZCBub3QganVzdCBtYWNybwoJKHNpbmNlIHZwcmludGYgaXMgdXNlZCBpbiBwcmludGNtZC5jKS4KCSogdmFscHJpbnQuYwoJVW5sZXNzIF9fR05VQ19fLCB1c2Ugb2JzdGFja19ncm93IGluc3RlYWQgb2Ygb2JzdGFja19wdHJfZ3Jvdy4KCShUaGUgbGF0dGVyIGlzbid0IGdyb2trZWQgYnkgc29tZSBQQ0MtYmFzZWQgY29tcGlsZXJzLikKCgkgICAgIFtUaGlzIGNoYW5nZSBpcyBpbiBhYmV5YW5jZSwgd2UgcHJlZmVyIHRvIGZpeCBvYnN0YWNrX3B0cl9ncm93Ll0KCglNYWtlIGNodW5rIHNpemUgb2YgZG9udF9wcmludF9vYnN0YWNrIDMyKjQgaW5zdGVhZCBvZiBkZWZhdWx0IDQwOTYuCgkqIG5pbmR5LXNoYXJlL2NvZmZzdHJpcC5jCglBZGRlZCBzb21lIGZvcndhcmQgZGVjbGFyYXRpb25zIChvdGhlcndpc2UsIGdjYyBjb21wbGFpbnMKCWFib3V0IGltcGxpY2l0IGV4dGVybiByZWRlZmluZWQgYXMgc3RhdGljKS4KClN1biBKYW4gMjAgMDI6Mzg6MTkgMTk5MSAgSm9obiBHaWxtb3JlICAoZ251IGF0IGN5Z2ludC5jeWdudXMuY29tKQoKCUNoYW5nZXMgaW5zcGlyZWQgYnkgUGVyIEJvdGhuZXI6CgkqIHByaW50Y21kLmMgKHByaW50X2FkZHJlc3Nfc3ltYm9saWMpOiAgVGFrZSBhZGRpdGlvbmFsIHBhcmFtZXRlcgoJc3BlY2lmeWluZyB3aGV0aGVyIHRvIGRlbWFuZ2xlLgoJKHByaW50X2FkZHJlc3MpOiAgUGFzcyBpbiBhc21fZGVtYW5nbGUgdG8gY29udHJvbCBkZW1hbmdsaW5nLgoJKHByaW50X2FkZHJlc3NfZGVtYW5nbGUpOiAgTmV3IGZuLCB0YWtlcyBleHBsaWNpdCBhcmcgdG8gY29udHJvbAoJZGVtYW5nbGluZy4KCSogdXRpbHMuYzogIEFkZCBuZXcgdmFycyBkZW1hbmdsZSBhbmQgYXNtX2RlbWFuZ2xlLCBhbmQgbGV0IHRoZW0KCWJlIHNldCBhbmQgc2hvd24uCgkoZnB1dHNfZGVtYW5nbGVkKTogIElmICFkZW1hbmdsZSwganVzdCBwcmludCB0aGUgYXJndW1lbnQuCgkoZnByaW50X3N5bWJvbCk6ICBJZiAhZGVtYW5nbGUsIGp1c3QgcHJpbnQgcmF3IHN5bWJvbC4KCSogdmFscHJpbnQuYyAodmFsX3ByaW50KTogIENhbGwgcHJpbnRfYWRkcmVzc19kZW1hbmdsZSByYXRoZXIgdGhhbgoJcHJpbnRfYWRkcmVzcywgdG8gY2F1c2UgZGVtYW5nbGluZyB0byBkZXBlbmQgb24gdGhlIGdsb2JhbAoJcmF0aGVyIHRoYW4gYXNzZW1ibGVyLWxldmVsIGRlbWFuZ2xpbmcgc2V0dGluZy4KCSogV0hBVFMuTkVXLCBnZGIudGV4aW5mbzogIERvY3VtZW50LgoKCSogbWFpbi5jIChzaG93X2NvbW1hbmQpOiAgU2hvdyBhbGwgc2V0dGluZ3MgaWYgbm8gYXJnLgoJKGluaXRpYWxpemVfbWFpbik6ICBNYWtlICJpbmZvIHNldCIgdGhlIHNhbWUgYXMgbmFrZWQgInNob3ciLgoJKiBjb21tYW5kLmMgKGNtZF9zaG93X2xpc3QpOiAgSGFuZGxlIHByZWZpeCBjb21tYW5kcyBpbiB0aGUKCWxpc3QsIGFuZCBwcmludCB0aGUgbmFtZSBvZiB0aGUgc2V0dGluZyBhcyB3ZWxsIGFzIGl0cyBFbmdsaXNoCglkZXNjcmlwdGlvbiBhbmQgdmFsdWUuCgoJQWxsb3cgZ2RiIGZ1bmN0aW9ucyB0byBzcGVjaWZ5IHdoZXJlIGEgbGluZSBzaG91bGQgd3JhcCBpZiBpdAoJZXhjZWVkcyB0aGUgc2l6ZSBvZiBhIHRlcm1pbmFsIGxpbmUuICBVc2UgaXQgdG8gbWFrZSB0aGUgb3V0cHV0CglwcmV0dGllci4KCSogdXRpbHMuYyAoc2V0X3NjcmVlbl93aWR0aF9jb21tYW5kKTogIE5ldyBmbiwgbWFsbG9jcyBhIGJ1ZmZlcgoJb2YgdGhlIHJpZ2h0IHNpemUgd2hlbiBzY3JlZW4gd2lkdGggY2hhbmdlcy4KCShzZXRfc2NyZWVuc2l6ZV9jb21tYW5kLCBzY3JlZW5zaXplX2luZm8pOiAgUmVtb3ZlICNpZiAwJ2QgZm5zLgoJKHdyYXBfaGVyZSk6ICBOZXcgZm4sIGluZGljYXRlcyBhIHBvaW50IGluIHRoZSBvdXRwdXQgd2hlcmUgd2UKCXNob3VsZCB3cmFwIHRoZSBsaW5lIHJhdGhlciB0aGFuIGp1c3QgbGV0dGluZyBpdCBvdmVyZmxvdyBhdCBhCglyYW5kb20gcGxhY2UuCgkoZnB1dHNfZmlsdGVyZWQpOiAgSW1wbGVtZW50IHdyYXBwaW5nLgoJKG5fc3BhY2VzKTogIE5ldyBmbiwgcmV0dXJucyBhIHBvaW50ZXIgdG8gTiBzcGFjZXMuCgkocHJpbnRfc3BhY2VzX2ZpbHRlcmVkKTogIFVzZSBuX3NwYWNlcy4KCSogZGVmcy5oIChuX3NwYWNlcyk6ICBEZWNsYXJlLgoJKiBzdGFjay5jIChwcmludF9mcmFtZV9pbmZvKTogIFdyYXAgd2l0aCA0LXNwYWNlIGluZGVudCBhZnRlcgoJZm4gbmFtZSBhbmQgYmVmb3JlIGZpbGVuYW1lIGFuZCBsaW5lIG51bWJlci4KCSogcHJpbnRjbWQuYyAocHJpbnRfZnJhbWVfYXJncyk6ICBXcmFwIHdpdGggNC1zcGFjZSBpbmRlbnQKCWJlZm9yZSBlYWNoIGFyZ3VtZW50IG5hbWUgaXMgcHJpbnRlZC4KCSogdmFscHJpbnQuYyAodmFsdWVfcHJpbnQpOiAgV3JhcCB3aXRoIG5vIGluZGVudGF0aW9uIGJlZm9yZQoJZWFjaCByZXBldGl0aW9uLgoJKHZhbF9wcmludF9maWVsZHMpOiAgV3JhcCB3aXRoIGluZGVudGF0aW9uIHJlbGF0aXZlIHRvIG5lc3RpbmcKCWxldmVsIGJlZm9yZSBlYWNoIGZpZWxkIG5hbWUuCgkodmFsX3ByaW50KTogIFdyYXAgd2l0aCBuZXN0aW5nIGluZGVudGF0aW9uIGJlZm9yZSBhcnJheSBlbGVtZW50cy4KCSogY29tbWFuZC5jIChkb19zZXRzaG93X2NvbW1hbmQpOiAgQXZvaWQgZXh0cmEgbmV3bGluZXMsCgl3cmFwIHdpdGggNC1zcGFjZSBpbmRlbnQgYXJvdW5kIHZhbHVlcyBwcmludGVkLCBlbmQgd2l0aCBwZXJpb2QuCgkqIFdIQVRTLk5FVywgZ2RiLnRleGluZm8sIGdkYi1pbnQudGV4aW5mbzogIERvY3VtZW50LgoKCSogYnJlYWtwb2ludC5jIChicmVha3BvaW50XzEpOiAgSW1wbGVtZW50IGFkZHJlc3NwcmludCBmb3IKCSJpbmZvIGJyZWFrcG9pbnRzIiBkaXNwbGF5LiAgQ2hhbmdlIGZpbGUgbmFtZSBhbmQgbGluZSBudW1iZXIKCWZvcm1hdCB0byAiIGF0IGZpbGU6bm5uIiByYXRoZXIgdGhhbiAiIChmaWxlIGxpbmUgbm5uKSIuCgkqIGdkYi50ZXhpbmZvOiAgRG9jdW1lbnQuCgoKRnJpIEphbiAxOCAwNzoyMToyNSAxOTkxICBKb2huIEdpbG1vcmUgIChnbnUgYXQgY3lnaW50LmN5Z251cy5jb20pCgoJRnJvemVuIGZvciBnZGItMy45Mi42IHJlbGVhc2UuCgoJUkVBRE1FLCBXSEFUUy5ORVc6ICBVcGRhdGUgZm9yIDMuOTIuNiByZWxlYXNlLgoKCXRjb25maWcve2FsdG9zLCBpMzg2diwgaTM4NnYzMiwgbTg4aywgdW1heH06ICBFbGltaW5hdGUKCWNvZmZyZWFkLm8gZnJvbSBjb25maWdzIHNpbmNlIGl0IGlzIG5vdyBidWlsdCBieSBkZWZhdWx0LgoJdGNvbmZpZy97M2IxLCBhbHRvc2dhcywgYXJtLCBjb252ZXgsIGhwMzAwYnNkLCBocDMwMGhwdXgsCglpMzg2di1nLCBpMzg2djMyLWcsIGlzaSwgbWVybGluLCBuZXdzLCBuZXdzMTAwMCwgbnAxLCBwbiwKCXB5cmFtaWQsIHN5bW1ldHJ5LCB2YXgsIHZ4d29ya3M2OH06ICBFbGltaW5hdGUgZGJ4cmVhZC5vCglmcm9tIGNvbmZpZ3Mgc2luY2UgaXQgaXMgbm93IGJ1aWx0IGJ5IGRlZmF1bHQuCgoJTWFrZWZpbGUuZGlzdDogVXBkYXRlIGZvciByZWxlYXNlIDMuOTIuNi4gIEhhbmRsZSBmaWxlcyB0aGF0CgloYXZlIGJlZW4gbW92ZWQgdG8gLi4vaW5jbHVkZSwgLi4vZ2V0b3B0LCBvciAuLi9iZmQuICBBZGQKCXNhYmVyLnN1cHByZXNzIGFuZCB0ZXN0cyBkaXJlY3RvcnkuICBBZGQgY29uZmlnLnN0YXR1cyB0bwoJdGhlIHJlbGVhc2UgKGl0IHdpbGwgc2F5ICJub25lIikuCgoJY29yZWRlcC5jOiAgTWlub3IgZm9ybWF0dGluZyBmaXhlcy4KCglUaGVzZSBjaGFuZ2VzIHdlcmUgbWFkZSBpbiBlYXJseSBEZWNlbWJlciBidXQgb25seSBjaGVja2VkIGluIG5vdzoKCSogbmluZHktc2hhcmUvT25pbmR5LmMsIG5pbmR5LXNoYXJlL2NvZmZzdHJpcC5jLAoJbmluZHktc2hhcmUvbmluZHkuYzogIGxpbnQKCSogbmluZHktc2hhcmUvbmluZHkuYyAobmluU3RvcFdoeSk6ICBEb24ndCBieXRlc3dhcCB0aGUgCglyZWdpc3RlciB2YWx1ZXMgY29taW5nIGJhY2sgZnJvbSB0aGUgdGFyZ2V0OyB3ZSBzdG9yZSB2YWx1ZXMKCWluIHRhcmdldCBieXRlIG9yZGVyIGV2ZXJ5d2hlcmUuCgpXZWQgSmFuIDE2IDE5OjAxOjM3IDE5OTEgIEpvaG4gR2lsbW9yZSAgKGdudSBhdCBjeWdpbnQuY3lnbnVzLmNvbSkKCgkqIGFtMjlrLW9wY29kZS5oLCBhbTI5ay1waW5zbi5jOiAgQWRkIDI5MDUwIG9wY29kZXMuCgoJKiB2YWxwcmludC5jIChjcGx1c192YWxfcHJpbnQsIHZhbF9wcmludF9maWVsZHMpOiAgTmV3IGZ1bmN0aW9ucywKCXdoaWNoIHByaW50IEMrKyBvYmplY3RzLiAgVGhleSBjb25zcGlyZSB0byBhdm9pZCBwcmludGluZyBhCgl2aXJ0dWFsIGJhc2UgY2xhc3MgbW9yZSB0aGFuIG9uY2UsIGZvbGxvd2luZyBhbGwgdGhlIHR3aXN0cyBhbmQKCXR1cm5zIG9mIEMrKyB2aXJ0dWFsIGJhc2UgcnVsZXMuCgkodmFsX3ByaW50KTogIENhbGwgdGhlIGFib3ZlIHJhdGhlciB0aGFuIGRvIGl0IGJ5IGhhbmQuCgoJKiBzeW1maWxlLmMgKHN5bWJvbF9maWxlX2FkZCk6ICBPbmx5IHJlc2V0IHN5bWZpbGVfbXRpbWUgZm9yIG1haW4KCXN5bWJvbCBmaWxlLCBub3QgZm9yIGFkZGVkIGZpbGVzIGxpa2Ugc2hhcmVkIGxpYnMuICBUaGlzIHJlYWxseQoJbmVlZHMgdG8gYmUgZ2VuZXJhbGl6ZWQgdG8gYSB0aW1lc3RhbXAgcGVyIGZpbGUuCgoJKiBjb3JlLmMgKGNsZWFudXBfY29yZSk6ICBBdm9pZCBjb3JlZHVtcCBpZiBubyBjb3JlIGZpbGUuCgkKCSogY29uZmlnLmdkYjogIEFjY2VwdCAtaG9zdCBvciAtdGFyZ2V0IGluIHBsYWNlIG9mICtob3N0IG9yCgkrdGFyZ2V0LgoKCSogY29mZnJlYWQuYyAoZmluZF9saW5lbm9zKTogIEF2b2lkIGRlc3VwcG9ydGVkIEJGRCBpbnRlcmZhY2UKCXRvIGxpbmUgbnVtYmVycy4gIFdlIHN0aWxsIHJlYWQgdGhlbSBtYW51YWxseSByYXRoZXIgdGhhbiB1c2luZwoJQkZEJ3MgImdlbmVyaWMiIGZlYXR1cmVzLgoKCSogZ2RicmMudGV4LCB0aHJlZWNvbC50ZXg6ICBBZGQgR0RCIHJlZmVyZW5jZSBjYXJkIGFuZCBpdHMKCWZvcm1hdHRpbmcgY29kZS4KCU1ha2VmaWxlLmRpc3Q6ICBBZGQgcmVmY2FyZCB0byBPVEhFUlMgbGlzdCBmb3IgY3JlYXRpbmcgdGFyIGZpbGVzLgoKCSogTWFrZWZpbGUuZGlzdDogIEVsaW1pbmF0ZSB1c2Ugb2YgJDwgaW4gZXhwbGljaXQgdGFyZ2V0cy4KCgkqIHJlYWRsaW5lL01ha2VmaWxlOiAgVXNlICQ8IHJhdGhlciB0aGFuICQqLmMsIHdoaWNoIGRvZXMgbm90CglpbmNsdWRlIHRoZSBWUEFUSCBpbiBHTlUgTWFrZS4KCgkqIHRjb25maWcvaTk2MC1ib3V0LCB0Y29uZmlnL2k5NjAtY29mZjogIFRoZXNlIGFyZSBpZGVudGljYWwKCWNvcGllcyBvZiB0Y29uZmlnL2k5NjAsIGFkZGVkIGZvciBnbG9iYWwgY29uZmlndXJhdGlvbgoJY29tcGF0YWJpbGl0eS4gIEFsbCBpOTYwIHZlcnNpb25zIGNhbiByZWFkIGJvdGggY29mZiBhbmQgYi5vdXQuCgoJKiB0bS04OGsuaDogIEZpeCBtdWx0aWxpbmUgbWFjcm8gdGhhdCBsYWNrZWQgXCdzLiAgUmVtb3ZlCglDT0ZGX0ZPUk1BVCBhbmQgQ09GRl9DSEVDS19YX1pFUk9FUyBzaW5jZSB0aGVzZSBhcmUgbm93IGhhbmRsZWQKCWF1dG9tYXRpY2FseS4KCgkqIFRPRE86ICBUaGluayBvZiBtb3JlIHRoaW5ncyB0byBkby4KCldlZCBKYW4gIDIgMTk6MDk6MjkgMTk5MSAgSm9obiBHaWxtb3JlICAoZ251IGF0IHNwaWZmLmN5Z251cy5jb20pCgoJdGNvbmZpZy97YW0yOWssaTk2MCxzdW4yKixzdW4zKixzdW40Kn06ICBFbGltaW5hdGUgY29uZmlnCglvZiBzZGIgdmVyc3VzIGRieCBkZWJ1ZyBzeW1ib2xzLiAgQWRkIGtsdWRnZSBmb3IgNjg4ODEgODAtYml0IHRvCgk2NC1iaXQgZmxvYXQgY29udmVyc2lvbi4KCgl0Y29uZmlnL3N1bjQsIHRjb25maWcvc3VuMywgeGNvbmZpZy9zdW40LCB4Y29uZmlnL3N1bjM6ICBNYWtlCgllcXVpdmFsZW50IHRvIHN1bj9vczQgc28gZ2xvYmFsIGNvbmZpZyB3b3Jrcy4KCldlZCBKYW4gIDIgMTg6MjA6NTEgMTk5MSAgSm9obiBHaWxtb3JlICAoZ251IGF0IHNwaWZmLmN5Z251cy5jb20pCgoJRml4IGZyb20gRWJlcmhhcmQgTWF0dGVzIDxtYXR0ZXNAYXp1LmluZm9ybWF0aWsudW5pLXN0dXR0Z2FydC5kZT4KCQoJKiBtYWluLmM6ICBPbmx5IGRlY2xhcmUgbGluZXNpemUgb25jZTsgZGVjbGFyZSBwYWdlc2l6ZSBub3QgYXQKCWFsbCwgc2luY2UgaXQgaXMgbmV2ZXIgdXNlZC4KCShtYWluKTogIENsZWFyIG5ld2x5IGFsbG9jYXRlZCBsaW5lIGJlZm9yZSBpdCBpcyB1c2VkLgoKRm9yIG9sZGVyIGNoYW5nZXMgc2VlIENoYW5nZUxvZy0xOTkwCgwKTG9jYWwgVmFyaWFibGVzOgptb2RlOiBpbmRlbnRlZC10ZXh0CmxlZnQtbWFyZ2luOiA4CmZpbGwtY29sdW1uOiA3NAp2ZXJzaW9uLWNvbnRyb2w6IG5ldmVyCkVuZDoK