IyA8Y29weXJpZ2h0PgojIENvcHlyaWdodCAoYykgMjAwOCBPcGVuIENhbmFyaWFzIGFuZCBvdGhlcnMuCiMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwojIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAojIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CiMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKIyAKIyBDb250cmlidXRvcnM6CiMgICAgIEEuIFPhbmNoZXotQmFyYnVkbyAgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24gCiMgPC9jb3B5cmlnaHQ+CiMKIyAkSWQ6IHBsdWdpbi5wcm9wZXJ0aWVzLHYgMS41IDIwMDkvMDYvMDcgMTM6MzQ6MTQgc2JveWtvIEV4cCAkCgpwbHVnaW5OYW1lID0gUVZUIE9wZXJhdGlvbmFsIEVjb3JlLWJhc2VkIFFWVE9wZXJhdGlvbmFsIE1vZGVsCnByb3ZpZGVyTmFtZSA9IEVjbGlwc2UgTW9kZWxpbmcgUHJvamVjdAoKX1VJX1FWVE9wZXJhdGlvbmFsX2NvbnRlbnRfdHlwZSA9IEVjb3JlIFFWVE9wZXJhdGlvbmFsIEZpbGUKCiMgUVZUbyBkaWFnbm9zdGljIGVycm9ycwpfVUlfVW5kZWZpbmVkRW50cnlPcGVyYXRpb25fZGlhZ25vc3RpYyA9IFRoZSBub24gYWJzdHJhY3Qgb3BlcmF0aW9uYWwgdHJhbnNmb3JtYXRpb24gJyd7MH0nJyBtdXN0IGRlZmluZSBhbiBFbnRyeSBPcGVyYXRpb24KX1VJX0ludmFsaWRFbnRyeU9wZXJhdGlvbl9kaWFnbm9zdGljID0gVGhlIGFic3RyYWN0IG9wZXJhdGlvbmFsIHRyYW5zZm9ybWF0aW9uICcnezB9Jycgc2hvdWxkIG5vdCBkZWNsYXJlIGFuIEVudHJ5IE9wZXJhdGlvbgpfVUlfVW5kZWZpbmVkTW9kZWxQYXJhbWV0ZXJzX2RpYWdub3N0aWMgPSBUaGUgb3BlcmF0aW9uYWwgdHJhbnNmb3JtYXRpb24gJyd7MH0nJyBtdXN0IGRlZmluZSBhdCBsZWFzdCBvbmUgTW9kZWwgUGFyYW1ldGVyCl9VSV9JbnZhbGlkQ2xhc3NJbmhlcml0YW5jZV9kaWFnbm9zdGljID0gQ2xhc3MgaW5oZXJpdGFuY2UgaXMgbm90IGFsbG93ZWQgKHswfSkKX1VJX1VuZXhwZWN0ZWRUYXJnZXRWYXJfZGlhZ25vc3RpYyA9IFVuZXhwZWN0ZWQgdGFyZ2V0IHZhcmlhYmxlICBpbiB0aGUgaW1wZXJhdGl2ZSBpdGVyYXRlIGV4cHJlc3Npb24gKHswfSkKX1VJX01pc2VlZFRhcmdldFZhcl9kaWFnbm9zdGljID0gTWlzc2VkIHRhcmdldCB2YXJpYWJsZSBpbiB0aGUgaW1wZXJhdGl2ZSBpdGVyYXRlIGV4cHJlc3Npb24gKHswfSkKX1VJX0JvZHlUeXBlRG9lc05vdENvbmZvcm1UYXJnZXRWYXJUeXBlX2RpYWdub3N0aWMgPSBCb2R5IGV4cHJlc3Npb24gdHlwZSBkb2VzbicndCBjb25mb3JtIHRvIHRhcmdldCB2YXJpYWJsZSB0eXBlIGluIHRoZSBpbXBlcmF0aXZlIGl0ZXJhdGUgZXhwcmVzc2lvbiAoezB9KQpfVUlfVW5leHBlY3RlZENvbmRpdGlvbkV4cHJlc3Npb25fZGlhZ25vc3RpYyA9IFVuZXhwZWN0ZWQgQ29uZGl0aW9uIGV4cHJlc3Npb24gIGluIHRoZSBpbXBlcmF0aXZlIGl0ZXJhdGUgZXhwcmVzc2lvbiAoezB9KSAKX1VJX0ludmFsaWRJbXBlcmF0aXZlSXRlcmF0ZUV4cE5hbWVfZGlhZ25vc3RpYyA9IEludmFsaWQgbmFtZSBmb3IgdGhlIGltcGVyYXRpdmUgaXRlcmF0ZSBleHByZXNzaW9uICh7MH0pCl9VSV9SZWZlcnJlZFR5cGVEb2VzTm90Q29uZm9ybVdpdGhTb3VyY2VFbGVtZW50VHlwZV9kaWFnbm9zdGljID0gVGhlIHJlZmVycmVkIHR5cGUgKHswfSkgZG9lc24nJ3QgY29uZm9ybSB0byB0aGUgc291cmNlIGNvbGxlY3Rpb24gZWxlbWVudCB0eXBlICh7MX0pCl9VSV9JbnZhbGlkQ29sbGVjdGlvblZhbHVlX2RpYWdub3N0aWMgPSBUaGUgbW9ub3ZhbHVlZCBsZWZ0IGV4cHJlc3Npb24gKHswfSkgY2FuJyd0IGJlIGFzc2lnbmVkIHRvIGEgbXVsdGl2YWx1ZWQgcmlnaHQgZXhwcmVzc2lvbiAoezF9KQpfVUlfTm9uQ29uZm9ybWFuY2VMZWZ0VmFsdWVUeXBlc19kaWFnbm9zdGljID0gVGhlIHZhbHVlIGV4cHJlc3Npb24gKHsxfSkgZG9lc24nJ3QgY29uZm9ybSB0byB0aGUgbGVmdCBleHByZXNzaW9uICh7MH0pCl9VSV9Ob25Db25mb3JtYW5jZUluc3RhbnRpYXRlZENsYXNzUmVmT2JqZWN0X2RpYWdub3N0aWMgPSBUaGUgaW5zdGFudGlhdGVkIGNsYXNzICh7MH0pIGRvZXNuJyd0IGNvbmZvcm0gdG8gdGhlIHJlZmVycmVkIG9iamVjdCAoezF9KQpfVUlfTm9uQ29uZm9ybWFuY2VTb3VyY2VDb250ZXh0dWFsUGFyYW1fZGlhZ25vc3RpYyA9ICBUaGUgc291cmNlIG9mIHRoZSBpbXBlcmF0aXZlIGNhbGwgZXhwcmVzc2lvbiAoezB9KSBkb2VzbicndCBjb25mb3JtIHRvIHRoZSBjb250ZXh0dWFsIHBhcmFtZXRlciAoezF9KQpfVUlfTm9uU291cmNlSW1wZXJhdGl2ZUNhbGxFeHBSZWZlcmVuY2luZ0NvbnRleHR1YWxPcGVyYXRpb25fZGlhZ25vc3RpYyA9IFRoZSBpbXBlcmF0aXZlIGNhbGwgZXhwcmVzc2lvbiB3aXRob3V0IHNvdXJjZSBjYW4nJ3QgcmVmZXIgYSBjb250ZXh0dWFsIGltcGVyYXRpdmUgb3BlcmF0aW9uICh7MH0pCl9VSV9JbnZhbGlkRW50cnlPcGVyYXRpb25OYW1lX2RpYWdub3N0aWMgPSBUaGUgZW50cnkgb3BlcmF0aW9uIG5hbWUgbXVzdCBiZSAnJ21haW4nJwpfVUlfSW52YWxpZEVudHJ5T3BlcmF0aW9uUGFyYW1ldGVyc19kaWFnbm9zdGljID0gVGhlIGVudHJ5IG9wZXJhdGlvbiBjYW5uJyd0IGhhdmUgcGFyYW1ldGVycwpfVUlfTm9uQ29uZm9ybWFuY2VJbnZSZXNvbHZlSW5FeHBTb3VyY2VUeXBlX0luTWFwcGluZ0luVHlwZV9kaWFnbm9zdGljID0gVGhlIHNvdXJjZSB0eXBlICh7MH0pIG9mIHRoZSBpbnZlcnNlIHJlc29sdmVJbiBleHByZXNzaW9uIGRvZXNuJyd0IGNvbmZvcm0gdG8gaW5NYXBwaW5nIHR5cGUgKHsxfSkgCl9VSV9Ob25Db25mb3JtYW5jZVJlc29sdmVJbkV4cFNvdXJjZVR5cGVfSW5NYXBwaW5nQ29udGV4dFR5cGVfZGlhZ25vc3RpYyA9IFRoZSBzb3VyY2UgdHlwZSAoezB9KSBvZiB0aGUgcmVzb2x2ZUluIGV4cHJlc3Npb24gZG9lc24nJ3QgY29uZm9ybSB0byBpbk1hcHBpbmcgY29udGV4dCB0eXBlICh7MX0pCg==