MTk5OC0wOC0yNSAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZGVjbC5jIChkdXBsaWNhdGVfZGVjbHMpOiBEb24ndCBjb21wbGFpbiBhYm91dCBkaWZmZXJlbnQKCWV4Y2VwdGlvbnMgZnJvbSBhbiBpbnRlcm5hbCBkZWNsIGV2ZW4gaWYgcGVkYW50aWMuCgoxOTk4LTA4LTE3ICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogcHQuYyAoY2hlY2tfZXhwbGljaXRfc3BlY2lhbGl6YXRpb24pOiBEb24ndCBhYm9ydCBvbiBib2d1cwoJZXhwbGljaXQgaW5zdGFudGlhdGlvbnMuCgoxOTk4LTA4LTE0ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBydHRpLmMgKGdldF90aW5mb19mbik6IERvbid0IG1lc3Mgd2l0aCB0aGUgY29udGV4dCBmb3Igbm93LgoKMTk5OC0wOC0xMyAgTXVtaXQgS2hhbiAgPGtoYW5AeHJheWxpdGgud2lzYy5lZHU+CgoJKiBkZWNsMi5jIChpbXBvcnRfZXhwb3J0X2NsYXNzKTogRG9uJ3QgdXNlIGRsbGV4cG9ydAoJYXR0cmlidXRlIGFzIGEgaGV1cmlzdGljLgoKMTk5OC0wNy0yOSAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZGVjbC5jIChwdXNoX292ZXJsb2FkZWRfZGVjbCk6IFVzZSBjdXJyZW50X25hbWVzcGFjZSBpbnN0ZWFkIG9mCglERUNMX0NPTlRFWFQgKGRlY2wpIHRvIGRldGVybWluZSB3aGVyZSB3ZSBnby4KCgkqIGRlY2wuYyAobG9va3VwX25hbWVfcmVhbCk6IEZpeCB0eXBvLgoKMTk5OC0wNy0yOCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY2xhc3MuYyAoZmluaXNoX3N0cnVjdF8xKTogQ29udmVydCBpbnRlZ2VyX3plcm9fbm9kZSB0bwogCXNzaXpldHlwZSBiZWZvcmUgcGFzc2luZyBpdCB0byBzZXRfcnR0aV9lbnRyeS4KCSogdHlwZWNrMi5jIChpbml0aWFsaXplcl9jb25zdGFudF92YWxpZF9wKTogQWxsb3cgY29udmVyc2lvbiBvZiAwCglvZiBhbnkgc2l6ZSB0byBhIHBvaW50ZXIuCgoxOTk4LTA3LTI3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiB0eXBlY2syLmMgKGJ1aWxkX2Z1bmN0aW9uYWxfY2FzdCk6IEhhbmRsZSBkZWZhdWx0LWluaXRpYWxpemF0aW9uLgoKCSogY2FsbC5jIChidWlsZF9vdmVyX2NhbGwpOiBQYXNzIDEgdG8gcG9wY2xhc3MuCgoJKiBwYXJzZS55IChkaXJlY3Rfbm90eXBlX2RlY2xhcmF0b3IpOiBBZGQgcHJlY2VkZW5jZSBkZWNsYXJhdGlvbgoJdG8gbm90eXBlX3VucXVhbGlmaWVkX2lkIGNhc2UuCgkqIE1ha2VmaWxlLmluIChFWFBFQ1QpOiBBZGp1c3QuCgoJKiB0cmVlLmMgKG92bF9tZW1iZXIpOiBGaXggZm9yIHNpbmdsZSBmdW5jdGlvbiBpbiBPVkwuCgoxOTk4LTA3LTI0ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBkZWNsLmMgKGxvb2t1cF9uYW1lX3JlYWwpOiBPSywgZG8gcmV0dXJuIHRoZSBmcm9tX29iaiB2YWx1ZQoJdW5sZXNzIGdvdF9vYmplY3QgZGVwZW5kcyBvbiB0ZW1wbGF0ZSBwYXJtcy4KCgkqIHBhcnNlLnkgKG5lc3RlZF9uYW1lX3NwZWNpZmllcl8xKTogUHVsbCBvdXQgdGhlIFRZUEVfTUFJTl9WQVJJQU5ULgoKCSogcHQuYyAoY29lcmNlX3RlbXBsYXRlX3Bhcm1zKTogQWxzbyBjb21wbGFpbiBhYm91dCBsb2NhbCBlbnVtcy4KCgkqIGNwLXRyZWUuaDogQWRkIHByb3RvdHlwZSBmb3Igc2V0X2lkZW50aWZpZXJfbG9jYWxfdmFsdWUuCgkqIGRlY2wuYyAoc2V0X2lkZW50aWZpZXJfbG9jYWxfdmFsdWVfd2l0aF9zY29wZSk6IE1ha2Ugc3RhdGljLAoJcHJvdG90eXBlLgoJKiBzZWFyY2guYyAoY292YXJpYW50X3JldHVybl9wKTogTGlrZXdpc2UuCgkqIGV4Y2VwdC5jIChidWlsZF90ZXJtaW5hdGVfaGFuZGxlciwgYWxsb2NfZWhfb2JqZWN0KTogTGlrZXdpc2UuCgoJKiBjYWxsLmMgKGJ1aWxkX21ldGhvZF9jYWxsKTogT25seSBwdWxsIG91dCB0aGUgdHlwZSBvZiBhIGRlc3RydWN0b3IKCWlmIGl0J3MgYSB0ZW1wbGF0ZSB0eXBlIHBhcm0uCgkqIGRlY2wuYyAobG9va3VwX25hbWVfcmVhbCk6IE5ldmVyIHJldHVybiB0aGUgZnJvbV9vYmogdmFsdWUuCgoxOTk4LTA3LTIzICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBleGNlcHQuYyAocHJvY2Vzc19zdGFydF9jYXRjaF9ibG9ja19vbGQpOiBDYWxsIHN0YXJ0X2RlY2xfMSBmb3IKCWNhdGNoIHBhcm0uCgkqIGRlY2wuYyAoc3RhcnRfZGVjbF8xKTogQXZvaWQgZHVwbGljYXRlIGVycm9yLgoKCSogaW5pdC5jIChleHBhbmRfZGVmYXVsdF9pbml0KTogT25seSBwZXJmb3JtIHRoZSBpbml0aWFsaXphdGlvbiBpZgoJaXQgd2lsbCBkbyBzb21ldGhpbmcuCgoxOTk4LTA3LTIzICBILkouIEx1ICAoaGpsQGdudS5vcmcpCgoJKiBwYXJzZS55IChiYXNlX2NsYXNzKTogQ2hlY2sgZm9yIGludmFsaWQgYmFzZSBjbGFzcy4KCjE5OTgtMDctMjMgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGRlY2wyLmMgKGltcG9ydF9leHBvcnRfdGVtcGxhdGUpOiBGb2xkIGluLi4uCgkoaW1wb3J0X2V4cG9ydF9jbGFzcyk6IC4uLnRvIGhlcmUuICBIYW5kbGUgZGxsaW1wb3J0L2V4cG9ydC4KCgkqIGNsYXNzLmMgKGJ1aWxkX3Z0YWJsZSk6IFBhc3MgYXRfZW9mIHRvIGltcG9ydF9leHBvcnRfdnRhYmxlLgoJKHByZXBhcmVfZnJlc2hfdnRhYmxlKTogTGlrZXdpc2UuCgkqIGRlY2wyLmMgKGltcG9ydF9leHBvcnRfY2xhc3MpOiBTcGxpdCBvdXQuLi4KCShmaW5pc2hfcHJldnRhYmxlX3ZhcmRlY2wpOiBGcm9tIGhlcmUuCgkqIGNsYXNzLmMgKGZpbmlzaF9zdHJ1Y3RfMSk6IENhbGwgaW1wb3J0X2V4cG9ydF9jbGFzcyBpZiBhdF9lb2YuCgoJKiBkZWNsLmMgKHN0YXJ0X2Z1bmN0aW9uKTogI2lmIDAgbXlzdGVyaW91cyBjb2RlIEkgd3JvdGUgYW5kIGhhdmUgCglmb3Jnb3R0ZW4gd2h5LgoJKiBydHRpLmMgKGdldF90aW5mb19mbik6IElmIHRoaXMgaXMgZm9yIGEgY2xhc3MgdHlwZSwgc2V0CglERUNMX0NPTlRFWFQuCgoxOTk4LTA3LTIyICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBpbmMvZXhjZXB0aW9uOiBDaGFuZ2UgdGVybWluYXRlIGFuZCB1bmV4cGVjdGVkIHRvICgpLgoKCSogcGFyc2UueSAobmFtZWRfY2xhc3NfaGVhZF9zYW5zX2Jhc2V0eXBlX2RlZm4pOiBBCgluYW1lZF9jbGFzc19oZWFkX3NhbnNfYmFzZXR5cGUgZm9sbG93ZWQgYnkgJ3snIG9yICc6JyBpcyBhIGRlZm4uCgoxOTk4LTA3LTIxICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiB0cmVlLmMgKGNhbm9uaWNhbF90eXBlX3ZhcmlhbnQpOiBOZXcgZm4gdG8gaGFuZGxlIGFycmF5cy4KCSogY3AtdHJlZS5oIChDQU5PTklDQUxfVFlQRV9WQVJJQU5UKTogUmVtb3ZlLgoJKiBwdC5jICh1bmlmeSwgZGVmYXVsdCBjYXNlKTogQWxzbyBmb2xkIGFyZy4gIEZpeCBhcnJheSBib3VuZHMgY2FzZS4KCSogbWV0aG9kLmMgKHByb2Nlc3Nfb3ZlcmxvYWRfaXRlbSk6IFVzZSBidWlsZF9vdmVybG9hZF92YWx1ZSBmb3IKCWFycmF5cy4KCjE5OTgtMDctMTkgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGxleC5jIChkb19pZGVudGlmaWVyKTogTG9vayBmb3IgY2xhc3MgdmFsdWUgZXZlbiBpZiB3ZSBkb24ndAoJaGF2ZSBhIGdsb2JhbCB2YWx1ZS4gIERvIGltcGxpY2l0IGRlY2xhcmF0aW9uIGlmIHBhcnNpbmcgaXMgMi4KCSogc2VtYW50aWNzLmMgKGZpbmlzaF9jYWxsX2V4cHIpOiBQYXNzIDIgaWYgd2UncmUgZG9pbmcgS29lbmlnCglsb29rdXAuCgoxOTk4LTA3LTE5ICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogZGVjbC5jIChwdXNodGFnKTogUmV2ZXJ0IHByZXZpb3VzIGNoYW5nZS4KCSogcHQuYyAobG9va3VwX3RlbXBsYXRlX2NsYXNzKTogRG9uJ3QgcHV0IG91dCBkZWJ1Z2dpbmcKCWluZm9ybWF0aW9uIGZvciB0eXBlcyB0aGF0IHVzZSB0ZW1wbGF0ZSBwYXJhbWV0ZXJzLgoKCSogZGVjbC5jIChwdXNodGFnKTogRG9uJ3QgcHV0IG91dCBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gZm9yCgljb21waWxlci1nZW5lcmF0ZWQgdHlwZWRlZnMuCgkKCSogZXJyb3IuYyAoZHVtcF90eXBlX3JlYWwpOiBEb24ndCBjcmFzaCB3aGVuIHByZXNlbnRlZCB3aXRoCglpbnRRSV90eXBlX25vZGUgb3IgdGhlIGxpa2UuCgoJKiBzZW1hbnRpY3MuYyAoZmluaXNoX3RyYW5zbGF0aW9uX3VuaXQpOiBGaXggc3BlbGxpbmcgZXJyb3IgaW4KCWNvbW1lbnQuCgoxOTk4LTA3LTE3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBkZWNsLmMgKGxvb2t1cF9uYW1lX3JlYWwpOiBQdWxsIG91dCBzaW5nbGUgZnVuY3Rpb24gaGVyZS4KCShzZWxlY3RfZGVjbCk6IE5vdCBoZXJlLgoJKHVucXVhbGlmaWVkX25hbWVzcGFjZV9sb29rdXApOiBVc2UgQ1BfREVDTF9DT05URVhULgoKCSogZGVjbC5jIChxdWFsaWZ5X2xvb2t1cCk6IFR3ZWFrIGFnYWluLgoKCSogcHQuYyAobG9va3VwX3RlbXBsYXRlX2NsYXNzKTogRG9uJ3QgbWVzcyB3aXRoIHRoZSBjb250ZXh0IG9mIHRoZQoJaW5zdGFudGlhdGlvbi4KCSogZGVjbDIuYyAoY3VycmVudF9kZWNsX25hbWVzcGFjZSk6IFJlbW92ZSBzcGVjaWFsIGhhbmRsaW5nIGZvcgoJdGVtcGxhdGVzLgoKCSogcHQuYyAodHN1YnN0LCBjYXNlIEZVTkNUSU9OX0RFQ0wpOiBGaXggZ2V0dGluZyBjb21wbGV0ZSBhcmdzIGZvcgoJYSBtZW1iZXIgdGVtcGxhdGUgc3BlY2lhbGl6YXRpb24uCgoJKiB0cmVlLmMgKG92bF9tZW1iZXIpOiBVc2UgZGVjbHNfbWF0Y2ggdG8gY29tcGFyZSBmdW5jdGlvbnMuCgkqIGRlY2wuYyAoZGVjbHNfbWF0Y2gpOiBDaGVjayB0aGUgY29udGV4dCBvZiBhIGZ1bmN0aW9uLgoKCSogcGFyc2UueSAocHJpbWFyeSk6IFVzZSBub3R5cGVfdW5xdWFsaWZpZWRfaWQgaW5zdGVhZCBvZiBJREVOVElGSUVSCglpbiBLb2VuaWcgbG9va3VwIHN1cHBvcnQgcnVsZXMuCgkqIHNlbWFudGljcy5jIChmaW5pc2hfY2FsbF9leHByKTogSGFuZGxlIHRoZSBuZXcgY2FzZXMuCgoJKiB0eXBlY2suYyAoYnVpbGRfeF9mdW5jdGlvbl9jYWxsKTogSGFuZGxlIG92ZXJsb2FkZWQgbWV0aG9kcy4KCgkqIGRlY2wuYyAoZ3Jva3ZhcmRlY2wpOiBEb24ndCBjYWxsIGJ1aWxkX3N0YXRpY19uYW1lIGZvciBleHRlcm4gIkMiLgoKMTk5OC0wNy0xNiAgTWFyayBNaXRjaGVsbCAgPG1hcmtAbWFya21pdGNoZWxsLmNvbT4KCgkqIHNlbWFudGljcy5jIChmaW5pc2hfb2JqZWN0X2NhbGxfZXhwcik6IFJldmVydCBwcmV2aW91cyBjaGFuZ2UuCgkqIGNhbGwuYyAoYnVpbGRfbmV3X21ldGhvZF9jYWxsKTogTGlrZXdpc2UuICBJbnN0ZWFkLCBjb252ZXJ0CglUWVBFX0RFQ0xzIHRvIElERU5USUZJRVJzIGhlcmUsIGluIHRoZSBwcmVzZW5jZSBvZiB0ZW1wbGF0ZXMuCgoxOTk4LTA3LTE2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBkZWNsLmMgKHF1YWxpZnlfbG9va3VwKTogSGFuZGxlIHRlbXBsYXRlcy4KCgkqIGRlY2wyLmMgKGRvX3VzaW5nX2RpcmVjdGl2ZSk6IERvbid0IHBhc3MgYW5jZXN0b3IuCgkqIGRlY2wuYyAocHVzaF91c2luZ19kaXJlY3RpdmUpOiBDYWxjdWxhdGUgYW5jZXN0b3IuCgoJKiBkZWNsMi5jIChkb19ub25tZW1iZXJfdXNpbmdfZGVjbCk6IEFsbG93IGZvciB0eXBlIHNoYWRvd2luZy4KCSogZGVjbC5jIChwdXNoZGVjbCk6IE1vdmUgdHlwZSBzaGFkb3dpbmcgaGFuZGxpbmcgZnJvbSBoZXJlLi4uCgkoZHVwbGljYXRlX2RlY2xzKTogLi4udG8gaGVyZS4KCSogZGVjbC5jIChzZXRfaWRlbnRpZmllcl9sb2NhbF92YWx1ZV93aXRoX3Njb3BlKTogTmV3IGZuLgoJKHB1c2hkZWNsKTogVXNlIGl0LgoJKHNldF9pZGVudGlmaWVyX2xvY2FsX3ZhbHVlLCBsb29rdXBfdHlwZV9jdXJyZW50X2xldmVsKTogTmV3IGZucy4KCSogZGVjbDIuYyAoZG9fbG9jYWxfdXNpbmdfZGVjbCk6IEhhbmRsZSB0eXBlcyBhbmQgYmluZGluZyBsZXZlbAoJc3R1ZmYgcHJvcGVybHkuCgoJKiBpbml0LmMgKGJ1aWxkX29mZnNldF9yZWYpOiBEb24ndCBjYWxsIG1hcmtfdXNlZCBvbiBhbiBPVkVSTE9BRC4KCSogZGVjbC5jIChzZWxlY3RfZGVjbCk6IEV4dHJhY3QgYSBsb25lIGZ1bmN0aW9uIGZyb20gYW4gT1ZFUkxPQUQuCgkobG9va3VwX25hbWVzcGFjZV9uYW1lKTogTGlrZXdpc2UuCgkqIHR5cGVjay5jIChidWlsZF91bmFyeV9vcCk6IE5vdCBoZXJlIGFueW1vcmUuCgoJKiBkZWNsMi5jIChkb19jbGFzc191c2luZ19kZWNsKTogTWFrZSBzdXJlIHdlIGdldCBhbiBpZGVudGlmaWVyLgoJKiBjbGFzcy5jIChoYW5kbGVfdXNpbmdfZGVjbCk6IElnbm9yZSBUWVBFX0RFQ0xzLgoKCSogZGVjbC5jIChxdWFsaWZ5X2xvb2t1cCk6IE5ldyBmbi4KCShsb29rdXBfbmFtZV9yZWFsKTogVXNlIGl0LgoKMTk5OC0wNy0xNiAgTWFydGluIHYuIExvZXdpcyAgPGxvZXdpc0BpbmZvcm1hdGlrLmh1LWJlcmxpbi5kZT4KCgkqIGRlY2wyLmMgKGFkZF91c2luZ19uYW1lc3BhY2UpOiBXaGVuIGRpcmVjdGx5IHVzaW5nIGEgbmFtZXNwYWNlCgl0aGF0IHdhcyBpbmRpcmVjdCBiZWZvcmUsIHByb21vdGUgaXQuCgoJKiBjcC10cmVlLmggKExPT0tVUF9QUkVGRVJfVFlQRVMsIExPT0tVUF9QUkVGRVJfTkFNRVNQQUNFUywKCUxPT0tVUF9QUkVGRVJfQk9USCwgTE9PS1VQX05BTUVTUEFDRVNfT05MWSwgTE9PS1VQX1RZUEVTX09OTFksCglMT09LVVBfUVVBTElGSUVSU19PTkxZLCBMT09LVVBfVEVNUExBVEVTX0VYUEVDVEVEKTogTmV3IG1hY3Jvcy4KCSogZGVjbC5jIChzZWxlY3RfZGVjbCk6IFJlcGxhY2UgdHdvIGZsYWcgcGFyYW1ldGVycyBieSBvbmUuCgkodW5xdWFsaWZpZWRfbmFtZXNwYWNlX2xvb2t1cCk6IExpa2V3aXNlLCBwYXNzIGZsYWcuCgkobG9va3VwX2ZsYWdzKTogTmV3IGZ1bmN0aW9uLgoJKGxvb2t1cF9uYW1lX3JlYWwpOiBDb21wdXRlIGZsYWdzLCBwYXNzIHRoZW0uCgkobG9va3VwX25hbWVzcGFjZV9uYW1lKTogQ2FsbCB3aXRoIHplcm8tZmxhZy4KCSogZGVjbDIuYyAoYW1iaWd1b3VzX2RlY2wpOiBBZGQgZmxhZyBwYXJhbWV0ZXIsIGNvbXBsYWluIG9ubHkKCWFjY29yZGluZyB0byBmbGFncy4KCShsb29rdXBfdXNpbmdfbmFtZXNwYWNlLCBxdWFsaWZpZWRfbG9va3VwX3VzaW5nX25hbWVzcGFjZSk6CglBZGQgZmxhZyBwYXJhbWV0ZXIsIHBhc3MgdGhlbSB0aHJvdWdoLgoJKiBsZXguYyAoZG9fc2NvcGVkX2lkKTogQ2FsbCB3aXRoIHplcm8tZmxhZy4KCjE5OTgtMDctMTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHR5cGVjay5jIChjb252ZXJ0X2Zvcl9hc3NpZ25tZW50KTogVXNlIGNvbXB0eXBlcy4KCjE5OTgtMDctMTYgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiBzZW1hbnRpY3MuYyAoZmluaXNoX29iamVjdF9jYWxsX2V4cHIpOiBNb3ZlIHRlc3QgZm9yIHRoZQoJZnVuY3Rpb24gY2FsbGVkIGJlaW5nIGEgVFlQRV9ERUNMIHRvIC4uLgoJKiBjYWxsLmMgKGJ1aWxkX25ld19tZXRob2RfY2FsbCk6IEhlcmUuCgoxOTk4LTA3LTE1ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBkZWNsMi5jIChhcmdfYXNzb2NfY2xhc3MpOiBBbHNvIGxvb2sgYXQgdGVtcGxhdGUgYXJndW1lbnRzLCBpZiBhbnkuCgkoYXJnX2Fzc29jKTogSGFuZGxlIGVycm9yX21hcmtfbm9kZSBhbmQgbXVsdGlwbGUgbGV2ZWxzIG9mIFRSRUVfTElTVC4KCgkqIGxleC5jIChsb29raW5nX2Zvcl90eXBlbmFtZSk6IERvbid0IGluaXRpYWxpemUuCgoJKiBkZWNsMi5jIChhbWJpZ3VvdXNfZGVjbCk6IENsYXJpZnkgZXJyb3IgbWVzc2FnZS4KCgkqIGRlY2wuYyAocHVzaF91c2luZ19kaXJlY3RpdmUpOiBJdGVyYXRlIG92ZXIgbmFtZXNwYWNlcyB1c2VkCglpbmRpcmVjdGx5LgoKMTk5OC0wNy0xNSAgTWFydGluIHYuIEz2d2lzICA8bG9ld2lzQGluZm9ybWF0aWsuaHUtYmVybGluLmRlPgoKCSogZGVjbDIuYyAoYWRkX3VzaW5nX25hbWVzcGFjZSk6IEl0ZXJhdGUgb3ZlciBuYW1lc3BhY2VzIHVzZWQKCWluZGlyZWN0bHkuCgoJKiBkZWNsLmMgKGxvb2t1cF9uYW1lX3JlYWwpOiBBY2NlcHQgbmFtZXNwYWNlIGFsaWFzZXMgYXMgbG9jYWxzLgoJKGNhdF9uYW1lc3BhY2VfbGV2ZWxzKTogSWdub3JlIGFsaWFzZXMuCgkoZHVwbGljYXRlX2RlY2xzKTogSWdub3JlIGR1cGxpY2F0ZSBhbGlhc2VzLgoJKiBkZWNsMi5jIChkb19uYW1lc3BhY2VfYWxpYXMpOiBQcm9jZXNzIGJsb2NrIGxldmVsIG5hbWVzcGFjZQoJYWxpYXNlcy4gU3RvcmUgYWxpYXMgd2l0aCBwdXNoZGVjbC4gUmVtb3ZlIG9kciBlcnJvcnMuCgkqIHBhcnNlLnkgKG5hbWVzcGFjZV9hbGlhcyk6IE5ldyBub24tdGVybWluYWwuCgkoZXh0ZGVmKTogVXNlIGl0LgoKMTk5OC0wNy0xNSAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZGVjbDIuYyAoYXJnX2Fzc29jX3R5cGUpOiBIYW5kbGUgTUVUSE9EX1RZUEUgbGlrZSBGVU5DVElPTl9UWVBFLgoJSGFuZGxlIFRFTVBMQVRFX1RZUEVfUEFSTS4KCShhcmdfYXNzb2MpOiBSZXdyaXRlLgoKCSogcHQuYyAoY29tcGxldGVfdGVtcGxhdGVfYXJncyk6IERvbid0IGxvb2sgYXQgdGhlIGNvbnRleHQgdW5sZXNzCgl3ZSBoYXZlIHRvLgoKCSogbWV0aG9kLmMgKGJ1aWxkX2RlY2xfb3ZlcmxvYWRfcmVhbCk6IEZpeCBuYW1lc3BhY2UgaGFuZGxpbmcuCgoJKiB0eXBlY2suYyAoYnVpbGRfdW5hcnlfb3ApOiBFeHRyYWN0IGEgbG9uZSBmdW5jdGlvbiBmcm9tIGFuCglPVkVSTE9BRC4KCgkqIGNhbGwuYyAoYnVpbGRfc2NvcGVkX21ldGhvZF9jYWxsKTogSGFuZGxlIGdldHRpbmcgYSBuYW1lc3BhY2UKCWZvciBiYXNldHlwZSBpbiBhIGRlc3RydWN0b3IgY2FsbC4KCShjaGVja19kdG9yX25hbWUpOiBIYW5kbGUgZW51bXMuCgoJKiBwYXJzZS55ICh1c2luZ19kaXJlY3RpdmUpOiBOZXcgbm9udGVybWluYWwuCgkoZXh0ZGVmLCBzaW1wbGVfc3RtdCk6IFVzZSBpdC4KCjE5OTgtMDctMTQgIE1hcnRpbiB2b24gTPZ3aXMgIDxsb2V3aXNAaW5mb3JtYXRpay5odS1iZXJsaW4uZGU+CgoJKiBkZWNsMi5jIChhZGRfZnVuY3Rpb24pOiBNb3ZlIGVycm9yIG1lc3NhZ2UgLi4uCgkoYXJnX2Fzc29jX25hbWVzcGFjZSk6IC4uLiBmcm9tIGhlcmUuCgoxOTk4LTA3LTE0ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBwYXJzZS55IChuYW1lc3BhY2VfcXVhbGlmaWVyKTogRml4IG11bHRpcGxlIGxldmVsIGhhbmRsaW5nLgoJKiBkZWNsMi5jIChuYW1lc3BhY2VfYW5jZXN0b3IpOiBVc2UgQ1BfREVDTF9DT05URVhULgoJKGFyZ19hc3NvYyk6IERvbid0IHNraXAgdGhlIGZpcnN0IGFyZ3VtZW50IG9mIGEgZnVuY3Rpb24uCgoJKiBjYWxsLmMgKGpvdXN0KTogRG9uJ3Qgd2FybiBhYm91dCAiY29uZnVzaW5nIiBjb252ZXJzaW9ucyB0byB0aGUKCXNhbWUgdHlwZS4KCjE5OTgtMDctMTQgIE1hcnRpbiB2b24gTPZ3aXMgIDxsb2V3aXNAaW5mb3JtYXRpay5odS1iZXJsaW4uZGU+CgoJKiBjbGFzcy5jIChwdXNoX25lc3RlZF9jbGFzcyk6IENvbXBsYWluIGFib3V0IG5hbWVzcGFjZXMuCgkqIGRlY2wuYyAoc3RhcnRfZGVjbCk6IEVudGVyIHRoZSBvYmplY3QncyBuYW1lc3BhY2UuCgkoY3BfZmluaXNoX2RlY2wpOiBMZWF2ZSBpdC4KCShncm9rZGVjbGFyYXRvcik6IExpa2V3aXNlLgoJKiBkZWNsMi5jIChjaGVja19kZWNsX25hbWVzcGFjZSk6IE5ldyBmdW5jdGlvbi4KCShmaW5pc2hfZmlsZSk6IENhbGwgaXQuCgkqIHBhcnNlLnkgKGNvbXBsZXhfZGlyZWN0X25vdHlwZV9kZWNsYXJhdG9yKTogU2V0IGNvbXBsZXhpdHkKCW9mIG5hbWVzcGFjZS1xdWFsaWZpZWQgaWRzIHRvIC0xLCBlbnRlciB0aGUgbmFtZXNwYWNlLgoKCSogbWV0aG9kLmMgKGJ1aWxkX3RlbXBsYXRlX2RlY2xfb3ZlcmxvYWQpOiBFeHBlY3QgX0RFQ0wgYXMgZmlyc3QKCXBhcmFtZXRlci4gUHV0IGNvbnRleHQgdGVtcG9yYXJpbHkgaW50byBjdXJyZW50X25hbWVzcGFjZS4KCSogcHQuYyAoY2hlY2tfZXhwbGljaXRfc3BlY2lhbGl6YXRpb24pOiBDaGFuZ2UgY2FsbGVyLgoJKHRzdWJzdCk6IExpa2V3aXNlLgoKCSogaW5pdC5jIChidWlsZF9vZmZzZXRfcmVmKTogQ2FsbCBtYXJrX3VzZWQgYW5kCgljb252ZXJ0X2Zyb21fcmVmZXJlbmNlIGZvciBuYW1lc3BhY2UgbWVtYmVycy4KCk1vbiBKdWwgMTMgMjM6MjU6MjggMTk5OCAgTWFydGluIHZvbiBMdndpcyAgPGxvZXdpc0BpbmZvcm1hdGlrLmh1LWJlcmxpbi5kZT4KCgkqIHNlYXJjaC5jIChteV90cmVlX2NvbnMpOiBUaGUgYml0ZmllbGQgaXMgYXQgaW5kZXggMi4KCk1vbiBKdWwgMTMgMTc6MjE6MDEgMTk5OCAgTmljayBDbGlmdG9uICA8bmlja2NAY3lnbnVzLmNvbT4KCgkqIGxhbmctb3B0aW9ucy5oOiBGb3JtYXQgY2hhbmdlZCB0byB3b3JrIHdpdGggbmV3IC0taGVscCBzdXBwb3J0CglpbiBnY2MvdG9wbGV2LmMKCQoxOTk4LTA3LTEyICBNYXJ0aW4gdm9uIEz2d2lzICA8bG9ld2lzQGluZm9ybWF0aWsuaHUtYmVybGluLmRlPgoKCSogZGVjbDIuYyAoYnVpbGRfZXhwcl9mcm9tX3RyZWUpOiBDaGFuZ2UgY2FsbHMgb2YgZG9faWRlbnRpZmllci4KCURvIEtvZW5pZyBsb29rdXAgaW4gQ0FMTF9FWFBSLgoJKGFyZ19hc3NvYyk6IEhhbmRsZSBlcnJvcl9tYXJrLgoJKiBsZXguYyAoaXNfZ2xvYmFsKTogTmV3IGZ1bmN0aW9uLgoJKGRvX2lkZW50aWZpZXIpOiBFeHBlY3QgYXJndW1lbnRzIGZvciBLb2VuaWcgbG9va3VwLgoJKiBwYXJzZS55IChwcmltYXJ5KTogQWRkIHJ1bGVzIGZvciBjYWxscyBvZiB1bnF1YWxpZmllZCBmdW5jdGlvbiBjYWxscy4KCShkb19pZCk6IENoYW5nZSBjYWxsIG9mIGRvX2lkZW50aWZpZXIuCgkqIHB0LmMgKGZpbmlzaF9zdG10X2V4cHIpOiBMaWtld2lzZS4KCSogc2VtYW50aWNzLmMgKGZpbmlzaF9pZF9leHByKTogTGlrZXdpc2UuCgkoZmluaXNoX2NhbGxfZXhwcik6IEFkZCBpbnRlZ2VyIHBhcmFtZXRlciB0byBpbmRpY2F0ZQoJYXJndW1lbnQtZGVwZW5kZW50IGxvb2t1cC4KCgkqIGRlY2wuYyAoc3RydWN0IGJpbmRpbmdfbGV2ZWwpOiBOZXcgZmllbGQgdXNpbmdfZGlyZWN0aXZlcy4KCShwdXNoX3VzaW5nX2RlY2wpOiBOb3Qgc29ycnkgYW55bW9yZS4KCShwdXNoX3VzaW5nX2RpcmVjdGl2ZSk6IE5ldyBmdW5jdGlvbi4KCShsb29rdXBfdGFnKTogVXNlIENQX0RFQ0xfQ09OVEVYVCB0byBpdGVyYXRlLgoJKHVucXVhbGlmaWVkX25hbWVzcGFjZV9sb29rdXApOiBOZXcgZnVuY3Rpb24sIGNvZGUgZnJvbSAuLi4KCShsb29rdXBfbmFtZV9yZWFsKTogLi4uIGhlcmUuCgkqIGRlY2wyLmMgKGxvb2t1cF91c2luZ19uYW1lc3BhY2UpOiBQYXNzIHVzaW5nIGxpc3QgaW5zdGVhZCBvZgoJaW5pdGlhbCBzY29wZS4KCSh2YWxpZGF0ZV9ub25tZW1iZXJfdXNpbmdfZGVjbCk6IE5ldyBmdW5jdGlvbi4KCShkb19ub25tZW1iZXJfdXNpbmdfZGVjbCk6IE5ldyBmdW5jdGlvbi4KCShkb190b3BsZXZlbF91c2luZ19kZWNsKTogVXNlIHRoZW0uCgkoZG9fbG9jYWxfdXNpbmdfZGVjbCk6IE5ldyBmdW5jdGlvbi4KCShkb191c2luZ19kaXJlY3RpdmUpOiBTdXBwb3J0IGJsb2NrLWxldmVsIGRpcmVjdGl2ZXMuCgkqIHBhcnNlLnkgKHNpbXBsZV9zdG10KTogU3VwcG9ydCB1c2luZyBkZWNsYXJhdGlvbnMgYW5kCglkaXJlY3RpdmVzLgoJKG5hbWVzcGFjZV9xdWFsaWZpZXIsIG5hbWVzcGFjZV91c2luZ19kZWNsKTogTmV3IG5vbi10ZXJtaW5hbHMuCgoJKiB4cmVmLmMgKGNsYXNzbmFtZSk6IE5ldyBmdW5jdGlvbi4KCShHTlVfeHJlZl9oaWVyKTogQ2hhbmdlIGNsYXNzIGFuZCBiYXNlIHBhcmFtZXRlcnMgdG8gdHJlZS4KCSogZGVjbC5jICh4cmVmX2Jhc2V5cGVzKTogQ2hhbmdlIGNhbGxlci4KCSogZnJpZW5kLmMgKG1ha2VfZnJpZW5kX2NsYXNzKTogTGlrZXdpc2UuCgoxOTk4LTA3LTEyICBLcmlhbmcgTGVyZHN1d2FuYWtpaiA8bGVyZHN1d2FAc2NmLWZzLnVzYy5lZHU+CgoJKiB0eXBlY2suYyAoY29tcHR5cGVzLCBjYXNlIFRFTVBMQVRFX1RFTVBMQVRFX1BBUk0pOiBBZGQgcGFyYW1ldGVyIAoJY29tcGFyaXNvbi4KCgkqIHB0LmMgKGZvcl9lYWNoX3RlbXBsYXRlX3Bhcm0sIGNhc2UgVEVNUExBVEVfREVDTCk6IElmIGl0IGlzIGEgCgl0ZW1wbGF0ZSB0ZW1wbGF0ZSBwYXJhbWV0ZXIsIHJlY29yZCBpdHMgdXNlLgoJKGZvcl9lYWNoX3RlbXBsYXRlX3Bhcm0sIGNhc2UgVEVNUExBVEVfVEVNUExBVEVfUEFSTSk6IFRyYXZlcnNlIAoJaXRzIHRlbXBsYXRlIGFyZ3VtZW50cyBpZiBleGlzdHMuCgoJKiBwdC5jIChjb2VyY2VfdGVtcGxhdGVfdGVtcGxhdGVfcGFybXMpOiBOZXcgZnVuY3Rpb24gZXF1aXZhbGVudAoJdG8gY29lcmNlX3RlbXBsYXRlX3Bhcm1zIHdoZW4gSVNfVE1QTF9QQVJNIGlzIHRydWUuCgkoY29lcmNlX3RlbXBsYXRlX3Bhcm1zKTogVXNlIGl0LiAgUmVtb3ZlIHRoZSBJU19UTVBMX1BBUk0gcGFyYW1ldGVyLAoJYWxsIGNhbGxlcnMgY2hhbmdlZC4KCgkoY29lcmNlX3RlbXBsYXRlX3Bhcm1zKTogQWNjZXNzIEFSR0xJU1QgcHJvcGVybHkgd2hlbiBjcmVhdGluZyBhCgluZXcgdmVjdG9yLiAgT25seSBhY2NlcHQgaW1wbGljaXQgVFlQRV9ERUNMIGFzIHZhbGlkIGFyZ3VtZW50IGZvcgoJYSB0ZW1wbGF0ZSB0ZW1wbGF0ZSBwYXJhbWV0ZXIgd2hlbiBpdCBpcyBhIGJhc2UgY2xhc3Mgb2YKCWN1cnJlbnRfY2xhc3NfdHlwZS4gIERvbid0IGRpc3BsYXkgZXJyb3IgbWVzc2FnZSB3aGVuIENPTVBMQUlOIGlzCglmYWxzZS4KCjE5OTgtMDctMTIgIEtsYXVzIEthZW1wZiAoa2thZW1wZkBwcm9naXMuZGUpCgogCSogcmVwby5jIChnZXRfYmFzZV9maWxlbmFtZSk6IFVzZSBmaWxlX25hbWVfbm9uZGlyZWN0b3J5LgogCShvcGVuX3JlcG9fZmlsZSk6IERpdHRvLgoJKiBjcC10cmVlLmggKGZpbGVfbmFtZV9ub25kaXJlY3RvcnkpOiBBZGQgcHJvdG90eXBlLgoKMTk5OC0wNy0xMiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZnJpZW5kLmMgKGRvX2ZyaWVuZCk6IFB1bGwgdGhlIGlkZW50aWZpZXIgb3V0IG9mIGRlY2xhcmF0b3IuCglVc2UgY3BfZXJyb3IgYW5kIGZyaWVuZHMuCgkqIGRlY2wyLmMgKHF1YWxpZmllZF9sb29rdXBfdXNpbmdfbmFtZXNwYWNlKTogRml4IGNhbGwgdG8gCglwdXJwb3NlX21lbWJlci4KCSogZGVjbC5jIChsb29rdXBfbmFtZV9yZWFsKTogRG9uJ3QgY2FsbCBjb21wbGV0ZV90eXBlIG9uIGEgbmFtZXNwYWNlLgoJKGdyb2t2YXJkZWNsKTogVXNlIERFQ0xfQ0xBU1NfU0NPUEVfUC4KCSogY3Z0LmMgKGNvbnZlcnRfcG9pbnRlcl90b19yZWFsKTogQ2hlY2sgZm9yIGVycm9yX21hcmtfbm9kZSBzb29uZXIuCgkqIGNsYXNzLmMgKHdhcm5faGlkZGVuKTogRml4IGZvciBPVkVSTE9BRC4KCUZyb20gZ3JhaGFtc0ByY3AuY28udWs6CgkqIGNwLXRyZWUuaCAoREVGQVJHX05PREVfQ0hFQ0spOiBOZXcgbWFjcm8uCiAJKERFRkFSR19MRU5HVEgsIERFRkFSR19QT0lOVEVSKTogVXNlIGl0LgoKU3VuIEp1bCAxMiAwMToyMDo1NyAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBnKysuMSAoLXRyYWRpdGlvbmFsKTogUmVtb3ZlIGR1cGxpY2F0ZWQgZG9jdW1lbnRhdGlvbi4KCjE5OTgtMDctMTEgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiBtZXRob2QuYyAoZmx1c2hfcmVwZWF0cyk6IEFkZCBucmVwZWF0cyBwYXJhbWV0ZXIuCgkoaXNzdWVfbnJlcGVhdHMpOiBMaWtld2lzZS4KCShpc19iYWNrX3JlZmVyZW5jZWFibGVfdHlwZSk6IE5ldyBmdW5jdGlvbi4gIERvbid0IGJhY2stcmVmZXJlbmNlCglURU1QTEFURV9UWVBFX1BBUk1zIGFzIHdlbGwgYXMgc2ltcGxlIHR5cGVzIGxpa2UgaW50ZWdlcnMuCgkoYnVpbGRfbWFuZ2xlZF9uYW1lX2Zvcl90eXBlKTogTGlrZXdpc2UuCgkoYnVpbGRfbWFuZ2xlZF9uYW1lX2Zvcl90eXBlX3dpdGhfR2NvZGUpOiBMaWtld2lzZS4KCShsYXN0dHlwZSk6IFJlbW92ZS4KCShucmVwZWF0cyk6IExpa2V3aXNlLgoJKE5yZXBlYXRzKTogTGlrZXdpc2UuCgkoc3RhcnRfc3F1YW5nbGluZyk6IERvbid0IGNsZWFyIHRoZSB2YXJpYWJsZXMgcmVtb3ZlZCBhYm92ZS4KCShlbmRfc3F1YW5nbGluZyk6IExpa2V3aXNlLgoJKGZsdXNoX3JlcGVhdHMpOiBUaWR5LiAgVXNlIG5yZXBlYXRzIHBhcmFtZXRlciByYXRoZXIgdGhhbgoJTnJlcGVhdHMgZ2xvYmFsLgoJKGlzc3VlX25yZXBlYXRzKTogTGlrZXdpc2UsIGJ1dCB3aXRoIG5yZXBlYXRzIGdsb2JhbC4gIFVzZQoJaXNfYmFja3JlZmVyZW5jZWFibGVfdHlwZS4KCShidWlsZF9vdmVybG9hZF9uZXN0ZWRfbmFtZSk6IFRpZHkuICBBZGQgY29tbWVudC4gIFVzZQoJYnVpbGRfbWFuZ2xlZF9uYW1lX2Zvcl90eXBlLgoJKGJ1aWxkX3VuZGVyc2NvcmVfaW50KTogQ29tbWVudC4KCShidWlsZF9vdmVybG9hZF9zY29wZV9yZWYpOiBVc2UgYnVpbGRfbWFuZ2xlZF9uYW1lX2Zvcl90eXBlLgoJKGJ1aWxkX292ZXJsb2FkX2ludCk6IExpa2V3aXNlLgoJKGJ1aWxkX3RlbXBsYXRlX3RlbXBsYXRlX3Bhcm1fbmFtZXMpOiBUaWR5LgoJKGJ1aWxkX3RlbXBsYXRlX3Bhcm1fbmFtZXMpOiBVc2UgYnVpbGRfbWFuZ2xlZF9uYW1lX2Zvcl90eXBlLgoJKGJ1aWxkX292ZXJsb2FkX2lkZW50aWZpZXIpOiBBZGQgY29tbWVudHMuCgkoYnVpbGRfbWFuZ2xlZF9uYW1lX2Zvcl90eXBlX3dpdGhfR2NvZGUpOiBTcGxpdCBvdXQgZnJvbQoJYnVpbGRfbWFuZ2xlZF9uYW1lLgoJKGJ1aWxkX21hbmdsZWRfbmFtZV9mb3JfdHlwZSk6IFVzZSBpdC4KCShidWlsZF9tYW5nbGVkX25hbWUpOiBSZXdvcmsgdG8gdXNlIGJ1aWxkX21hbmdsZWRfbmFtZV9mb3JfdHlwZQoJYW5kIHRvIG5vdCB1c2UgZ2xvYmFsIG5yZXBlYXRzL05yZXBlYXRzLiAgVGlkeS4KCShwcm9jZXNzX21vZGlmaWVycyk6IFRpZHkuCgkoY2hlY2tfYnR5cGUpOiBVc2UgaXNfYmFja3JlZmVyZW5jZWFibGVfdHlwZS4gIEFkZCBjb21tZW50LgoJUmVuYW1lIGBub2RlJyB0byBgdHlwZScuCgkocHJvY2Vzc19vdmVybG9hZF9pdGVtKTogU2V0IG51bWVyaWNfb3V0cHV0X25lZWRfYmFyIGhlcmUuCglVc2UgYnVpbGRfbWFuZ2xlZF9uYW1lX2Zvcl90eXBlLiAgVGlkeS4KCShidWlsZF9kZWNsX292ZXJsb2FkX3JlYWwpOiBUaWR5LiAgRG9uJ3QgdXNlIE5yZXBlYXRzLiAgVXNlCglidWlsZF9tYW5nbGVkX25hbWVfZm9yX3R5cGUuCgoJKiBwdC5jIChwdXNoX3RlbXBsYXRlX2RlY2xfcmVhbCk6IERvbid0IGxvb2sgYXQgREVDTF9URU1QTEFURV9JTkZPCglmb3IgVFlQRV9ERUNMcy4KCjE5OTgtMDctMDggIFZsYWRpbWlyIE4uIE1ha2Fyb3YgIDx2bWFrYXJvdkBjeWdudXMuY29tPgoKCSogY3AtdHJlZS5oICh3YXJuX2xvbmdfbG9uZyk6IERlZmluZS4KCSogZGVjbC5jIChncm9rZGVjbGFyYXRvcik6IEFkZCBmbGFnIGB3YXJuX2xvbmdfbG9uZycgYXMgZ3VhcmQgZm9yCgl3YXJuaW5nICJBTlNJIEMrKyBkb2VzIG5vdCBzdXBwb3J0IGBsb25nIGxvbmcnIi4KCSogZGVjbDIuYyAod2Fybl9sb25nX2xvbmcpOiBEZWZpbmUuCgkobGFuZ19kZWNvZGVfb3B0aW9uKTogUGFyc2UgLVdsb25nLWxvbmcsIC1Xbm8tbG9uZy1sb25nIG9wdGlvbnMuCgoxOTk4LTA3LTA3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBkZWNsLmMgKHhyZWZfdGFnKTogSGFuZGxlIGF0dHJpYnV0ZXMgYmV0d2VlbiAnY2xhc3MnIGFuZCBuYW1lLgoJKiBwYXJzZS55IChhZ2dyKTogTGlrZXdpc2UuCgkqIHNlbWFudGljcy5jIChmaW5pc2hfY2xhc3NfZGVmaW5pdGlvbik6IExpa2V3aXNlLgoJKiBNYWtlZmlsZS5pbiAoRVhQRUNURUQpOiBBZGp1c3QuCgoJKiBjcC10cmVlLmg6IERlY2xhcmUgZmxhZ19vcHRpb25hbF9kaWFncyBhbmQgd2Fybl9tdWx0aWNoYXIuCgkqIGRlY2wyLmM6IERlZmluZSB0aGVtLgoJKGxhbmdfZGVjb2RlX29wdGlvbik6IEhhbmRsZSB0aGVtLgoJKiBsYW5nLW9wdGlvbnMuaDogQWRkIC1mb3B0aW9uYWwtZGlhZ3MuCgkqIGNsYXNzLmMgKGZpbmlzaF9zdHJ1Y3QpOiBEb24ndCBjb21wbGFpbiBhYm91dCBtdWx0aXBsZSBtZWFuaW5ncyBvZiAKCW5hbWUgaWYgLWZuby1vcHRpb25hbC1kaWFncy4KCSogZGVjbC5jIChwdXNoZGVjbF9jbGFzc19sZXZlbCk6IExpa2V3aXNlLgoJKiBsZXguYyAocmVhbF95eWxleCk6IENoZWNrIHdhcm5fbXVsdGljaGFyLgoKMTk5OC0wNy0wNiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZGVjbC5jIChsb29rdXBfdGFnKTogVXNlIENQX0RFQ0xfQ09OVEVYVC4KCgkqIHRyZWUuYyAobWFrZV9iaW5mbyk6IEZpeCBsZW5ndGguCgoxOTk4LTA2LTMwICBCZW5qYW1pbiBLb3NuaWsgIDxia296QGJsaXNzLm5hYmkubmV0PgoKICAgICAgICAqIGRlY2wyLmMgKGxhbmdfZGVjb2RlX29wdGlvbik6IFJlbW92ZSB3YXJuX3RlbXBsYXRlX2RlYnVnZ2luZy4KICAgICAgICAqIGxhbmctb3B0aW9ucy5oOiBEaXR0by4KCk1vbiBKdW4gMjkgMjA6MTc6NDAgMTk5OCAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogZXhjZXB0LmMgKGJ1aWxkX2VoX3R5cGVfdHlwZV9yZWYpOiBSZW1vdmUgdW51c2VkIHZhcmlhYmxlIGBzdXNwJy4KCShwcm9jZXNzX3N0YXJ0X2NhdGNoX2Jsb2NrKTogTGlrZXdpc2UgZm9yIHZhcmlhYmxlcwoJYGZhbHNlX2xhYmVsX3J0eCcsIGBjYWxsX3J0eCcgYW5kIGByZXR1cm5fdmFsdWVfcnR4Jy4KCjE5OTgtMDYtMjkgIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGN5Z251cy5jb20+CgoJKiB0cmVlLmMgKGJ1aWxkX3NyY2xvYyk6IE1ha2Ugc3VyZSB3ZSBhbGxvY2F0ZSB0aGlzIG5vZGUgb24gdGhlCglwZXJtYW5lbnQgb2JzdGFjay4KClNhdCBKdW4gMjcgMjM6MzQ6MTggMTk5OCAgRnJlZCBGaXNoICA8Zm5mQG5pbmVtb29ucy5jb20+CgoJKiBnKytzcGVjLmMgKE5FRURfTUFUSF9MSUJSQVJZKTogRGVmaW5lIHRvIDEgaWYgbm90IGFscmVhZHkgZGVmaW5lZC4KCShsYW5nX3NwZWNpZmljX2RyaXZlcik6IEluaXRpYWxpemUgbmVlZF9tYXRoIHdpdGggTkVFRF9NQVRIX0xJQlJBUlkuCgkobGFuZ19zcGVjaWZpY19kcml2ZXIpOiBPbmx5IGFkZCAtbG0gYXV0b21hdGljYWxseSBpZiBuZWVkX21hdGggaXMKCW5vbnplcm8uCgpTYXQgSnVuIDI3IDEyOjIyOjU2IDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCiAgICAgICAgKiBNYWtlLWxhbmcuaW4gKGcrKyk6IERlcGVuZCBvbiBta3N0ZW1wLm8uICBMaW5rIGluIG1rc3RlbXAubwoKU2F0IEp1biAyNyAwNzozNjowOSAxOTk4ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBNYWtlZmlsZS5pbiAoRVhQUl9IKTogTmV3IGRlcGVuZGVuY3kgdmFyaWFibGUuCgkoZGVjbDIubyk6IERlcGVuZCBvbiAkKEVYUFJfSCkuCgkodHlwZWNrLm8pOiBMaWtld2lzZS4KCShpbml0Lm8pOiBMaWtld2lzZS4KCShleHByLm8pOiBMaWtld2lzZS4KCjE5OTgtMDYtMjUgIEJlbmphbWluIEtvc25payAgPGJrb3pAbGlzYS5jeWdudXMuY29tPgoKCSogZGVjbC5jIChzdGFydF9lbnVtKTogUHV0IGxvY2FsIGVudW1zIG9uIHBlcm1hbmVudF9vYnN0YWNrLgoKMTk5OC0wNi0yNSAgTWFyayBNaXRjaGVsbCAgPG1hcmtAbWFya21pdGNoZWxsLmNvbT4KCgkqIGNwLXRyZWUuaCAoY19nZXRfYWxpYXNfc2V0KTogRGVjbGFyZS4KCSogZGVjbC5jIChpbml0X2RlY2xfcHJvY2Vzc2luZyk6IFNldCBsYW5nX2dldF9hbGlhc19zZXQuCgoxOTk4LTA2LTI1ICBBbmRyZXcgTWFjTGVvZCAgPGFtYWNsZW9kQGN5Z251cy5jb20+CgoJKiBjcC10cmVlLmggKG1hcmtfYWxsX3J1bnRpbWVfbWF0Y2hlcyk6IEFkZCBmdW5jdGlvbiBwcm90b3R5cGUuCgkqIGV4Y2VwdC5jIChtYXJrX2FsbF9ydW50aW1lX21hdGNoZXMpOiBTZXQgVFJFRV9TWU1CT0xfUkVGRVJFTkNFRAoJZmxhZyBmb3IgYWxsIGZ1bmN0aW9uIGRlY2xzIHdoaWNoIGFyZSBpbiB0aGUgZXhjZXB0aW9uIHRhYmxlLiAKCSogZXhjZXB0aW9uLmNjIChfX2NwbHVzX3R5cGVfbWF0Y2hlcik6IENoZWNrIGZvciBDQVRDSF9BTExfVFlQRSBtYXRjaC4KCSogZGVjbDIuYyAoZmluaXNoX2ZpbGUpOiBDYWxsIG1hcmtfYWxsX3J1bnRpbWVfbWF0Y2hlcyB0byBtYWtlIHN1cmUKCWNvZGUgaXMgZW1pdHRlZCBmb3IgYW55IHJlZmVyZW5jZWQgcnR0aSBmdW5jdGlvbi4KCjE5OTgtMDYtMjUgIERhdmUgQnJvbGxleSAgPGJyb2xsZXlAY3lnbnVzLmNvbT4KCgkqIGxhbmctc3BlY3MuaDogVXNlIG5ldyB8IHN5bnRheCB0byBlbGltaW5hdGUKCXN0cmluZyBjb25jYXRlbmF0aW9uLgoKMTk5OC0wNi0yNSAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY3AtdHJlZS5oIChDUF9ERUNMX0NPTlRFWFQpOiBOZXcgbWFjcm8uCgkqIGRlY2wyLmMgKGlzX25hbWVzcGFjZV9hbmNlc3RvciwgbG9va3VwX3VzaW5nX25hbWVzcGFjZSk6IFVzZSBpdC4KCSogbWV0aG9kLmMgKGJ1aWxkX292ZXJsb2FkX25lc3RlZF9uYW1lKTogTGlrZXdpc2UuCgkqIHNpZy5jIChidWlsZF9zaWduYXR1cmVfcG9pbnRlcl9vcl9yZWZlcmVuY2VfdHlwZSk6IERvbid0IHNldAoJREVDTF9DT05URVhULgoKMTk5OC0wNi0yNCAgTWFydGluIHYuIEz2d2lzICA8bG9ld2lzQGluZm9ybWF0aWsuaHUtYmVybGluLmRlPgoKCVNldCBERUNMX0NPTlRFWFQgZm9yIGdsb2JhbHMgdG8gTlVMTF9UUkVFIGluc3RlYWQgb2YgZ2xvYmFsX25hbWVzcGFjZS4KCSogY3AtdHJlZS5oIChGUk9CX0NPTlRFWFQpOiBOZXcgbWFjcm8uCgkoREVDTF9NQUlOX1ApOiA6Om1haW4gc2hvdWxkIGhhdmUgYSBERUNMX0NPTlRFWFQgb2YgTlVMTF9UUkVFLgoJKiBkZWNsLmMgKG5hbWVzcGFjZV9iaW5kaW5nKTogUmVwbGFjZSBOVUxMX1RSRUUgd2l0aAoJZ2xvYmFsX25hbWVzcGFjZS4KCShzZXRfbmFtZXNwYWNlX2JpbmRpbmcsIHBvcF9uYW1lc3BhY2UsIGxvb2t1cF9uYW1lX3JlYWwpOiBMaWtld2lzZS4KCSogZGVjbDIuYyAoaXNfbmFtZXNwYWNlX2FuY2VzdG9yLCBsb29rdXBfdXNpbmdfbmFtZXNwYWNlKToKCUxpa2V3aXNlLgoJKiBkZWNsLmMgKHB1c2h0YWcpOiBVc2UgRlJPQl9DT05URVhULgoJKHB1c2hkZWNsLCBtYWtlX3R5cGVuYW1lX3R5cGUsIGRlZmluZV9mdW5jdGlvbiwgZ3Jva2RlY2xhcmF0b3IpOgoJTGlrZXdpc2UuCgkqIGRlY2wyLmMgKHNldF9kZWNsX25hbWVzcGFjZSwgZG9fbmFtZXNwYWNlX2FsaWFzKTogTGlrZXdpc2UuCgkqIHB0LmMgKHB1c2hfdGVtcGxhdGVfZGVjbF9yZWFsLCBsb29rdXBfdGVtcGxhdGVfY2xhc3MsIHRzdWJzdCk6CglMaWtld2lzZS4KCSogZGVjbDIuYyAoZGVjbF9uYW1lc3BhY2UpOiBSZXR1cm4gZ2xvYmFsX25hbWVzcGFjZSBpZiBubyBjb250ZXh0LgoJKiBtZXRob2QuYyAoYnVpbGRfb3ZlcmxvYWRfbmVzdGVkX25hbWUpOiBFeHBlY3QgbnVsbCBhcyBjb250ZXh0LgoJKiBwdC5jIChtYW5nbGVfY2xhc3NfbmFtZV9mb3JfdGVtcGxhdGUpOiBEbyBub3RoaW5nIGZvciBudWxsCgljb250ZXh0cy4KCShsb29rdXBfdGVtcGxhdGVfY2xhc3MpOiBBbGxvdyBmb3IgbnVsbCBpZF9jb250ZXh0LgoKMTk5OC0wNi0yNSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIG1ldGhvZC5jIChlbWl0X3RodW5rKTogU2V0IGN1cnJlbnRfZnVuY3Rpb25faXNfdGh1bmsgZm9yIHRoZQoJQVNNX09VVFBVVF9NSV9USFVOSyBjYXNlIGFzIHdlbGwuCgoxOTk4LTA2LTIzICBBbmRyZXcgTWFjTGVvZCAgPGFtYWNsZW9kQGN5Z251cy5jb20+CgoJKiBleGNlcHRpb24uY2MgKF9fY3BsdXNfdHlwZV9tYXRjaGVyKTogR2V0IGEgbWF0Y2hfaW5mbyBwb2ludGVyCglpbnN0ZWFkIG9mIGFuIGV4Y2VwdGlvbiB0YWJsZSBlbnRyeSBhcyBhIHBhcmFtZXRlci4KCjE5OTgtMDYtMjMgIEFuZHJldyBNYWNMZW9kICA8YW1hY2xlb2RAY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnkgKGZ1bmN0aW9uX3RyeV9ibG9jayk6IERvbid0IGNhbGwgc3RhcnRfY2F0Y2hfaGFuZGxlci4KCSogZXhjZXB0LmMgKGNhbGxfZWhfaW5mbyk6IFJlbW92ZSBjb2VyY2VkIGZpZWxkIGZyb20gZGVjbGFyYXRpb24uCgkoYnVpbGRfZWhfdHlwZV90eXBlX3JlZik6IE5ldyBmdW5jdGlvbiB0byBjcmVhdGUgYW4gYWRkcmVzcyBvZiBhCglydHRpIGZ1bmN0aW9uIGZvciB0aGUgbmV3IHN0eWxlIGV4Y2VwdGlvbiB0YWJsZXMuCgkoZXhwYW5kX3N0YXJ0X2NhdGNoX2Jsb2NrKTogU3BsaXQgZnVuY3Rpb24sIHRoaXMgY29udGFpbnMgdGhlCgljb21tb24gcGFydC4KCShwcm9jZXNzX3N0YXJ0X2NhdGNoX2Jsb2NrX29sZCk6IE5ldyBmdW5jdGlvbiB0byBwZXJmb3JtIHRoZSByZXN0CglvZiBleHBhbmRfc3RhcnRfY2F0Y2hfYmxvY2sgdW5kZXIgb2xkIHN0eWxlIGV4Y2VwdGlvbnMuCgkocHJvY2Vzc19zdGFydF9jYXRjaF9ibG9ja19vbGQpOiBOZXcgZnVuY3Rpb24gdG8gcGVyZm9ybSB0aGUgcmVzdAoJb2YgZXhwYW5kX3N0YXJ0X2NhdGNoX2Jsb2NrIHVuZGVyIG5ldyBzdHlsZSBleGNlcHRpb25zLgoJKGV4cGFuZF9lbmRfY2F0Y2hfYmxvY2spOiBPbmx5IHBvcCB0aGUgZmFsc2UgbGFiZWwgb2ZmIHRoZSBzdGFjayB1bmRlcgoJdGhlIG9sZCBzdHlsZSBvZiBleGNlcHRpb25zLgoJKiBzZW1hbnRpY3MuYyAoZmluaXNoX3RyeV9ibG9jayk6IERvbid0IGNhbGwgc3RhcnRfY2F0Y2hfaGFuZGxlci4KCSogZXhjZXB0aW9uLmNjIChzdHJ1Y3QgY3BfZWhfaW5mbyk6IEFkZCBvcmlnaW5hbF92YWx1ZSBmaWVsZC4KCShfX2NwbHVzX3R5cGVfbWF0Y2hlcik6IFBlcmZvcm0gdHlwZSBtYXRjaGluZyBvbiB0aGUgb3JpZ2luYWwgZXhjZXB0aW9uCgl2YWx1ZSwgYW5kIGlmIHdlIGhhdmUgYSBtYXRjaCwgc2V0IHRoZSBjdXJyZW50IHZhbHVlLgoJKF9fY3BfcHVzaF9leGNlcHRpb24pOiBTZXQgdGhlIG9yaWdpbmFsIGV4cGNldGlvbiB2YWx1ZS4KCjE5OTgtMDYtMjMgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGNhbGwuYyAoam91c3QpOiBGaXggY29uZnVzaW5nIGNvbnZlcnNpb24gd2FybmluZy4KCgkqIGNhbGwuYyAoYnVpbGRfb3BfZGVsZXRlX2NhbGwpOiBBZGQgcGxhY2VtZW50IHBhcm0uICBDaGVjawoJTE9PS1VQX1NQRUNVTEFUSVZFTFkuCgkqIGNwLXRyZWUuaCwgZGVjbDIuYywgaW5pdC5jOiBBZGp1c3QuCgkqIGRlY2wuYyAoZmluaXNoX2Z1bmN0aW9uKTogVXNlIGl0LgoKCSogcHQuYyAodHN1YnN0KTogRGlhZ25vc2UgY3JlYXRpbmcgdm9pZCBmaWVsZHMgb3IgdmFyaWFibGVzLgoKTW9uIEp1biAyMiAwODo1MDoyNiAxOTk4ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBjYWxsLmMgKGJ1aWxkX3Njb3BlZF9tZXRob2RfY2FsbCk6IFJlbW92ZSB1bnVzZWQgdmFyaWFibGUgYHRtcCcuCgoJKiBjcC10cmVlLmggKGNoZWNrX2R0b3JfbmFtZSk6IEFkZCBwcm90b3R5cGUuCgoJKiBpbml0LmMgKGV4cGFuZF9tZW1iZXJfaW5pdCk6IFJlbW92ZSB1bnVzZWQgdmFyaWFibGVzCglgcHRyX3R5cGVfbm9kZScsIGBwYXJtJyBhbmQgYHJ2YWwnLgoKCSogcHRyZWUuYyAocHJpbnRfbGFuZ190eXBlKTogVXNlIEhPU1RfV0lERV9JTlRfUFJJTlRfREVDIHNwZWNpZmllcgoJaW4gY2FsbCB0byBmcHJpbnRmLgoJKGxhbmdfcHJpbnRfeG5vZGUpOiBMaWtld2lzZS4KCgkqIHR5cGVjazIuYyAoZW51bV9uYW1lX3N0cmluZyk6IENhc3QgYXJndW1lbnQgdG8gc3ByaW50ZiB0byBsb25nCglhbmQgdXNlICVsZCBzcGVjaWZpZXIuCgoJKiB4cmVmLmMgKEdOVV94cmVmX2VuZF9zY29wZSk6IFVzZSBIT1NUX1dJREVfSU5UX1BSSU5UX0RFQwoJc3BlY2lmaWVyIGluIGNhbGwgdG8gZnByaW50Zi4KCShHTlVfeHJlZl9tZW1iZXIpOiBDYXN0IGFyZ3VtZW50IHRvIHNwcmludGYgdG8gaW50LgoKRnJpIEp1biAxOSAyMzoyMjo0MiAxOTk4ICBCcnVubyBIYWlibGUgIDxicnVub0BsaW51aXgubWF0aGVtYXRpay51bmkta2FybHNydWhlLmRlPgoKICAgICAgICAqIHR5cGVjazIuYyAocG9wX2luaXRfbGV2ZWwpOiBXYXJuIGFib3V0IGltcGxpY2l0IHplcm8gaW5pdGlhbGl6YXRpb24KICAgICAgICBvZiBzdHJ1Y3QgbWVtYmVycy4KClRodSBKdW4gMTggMDk6MzI6MzIgMTk5OCAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogY3AtdHJlZS5oOiBQcm90b3R5cGUgZnVuY3Rpb24gYGNoZWNrX2phdmFfbWV0aG9kJy4KCjE5OTgtMDYtMTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGNsYXNzLmMgKGZpbmlzaF9zdHJ1Y3QpOiBNYWtlIGNvbmZsaWN0aW5nIHVzZSBvZiBpZCBhIHBlZHdhcm4uCgkqIGRlY2wuYyAocHVzaGRlY2xfY2xhc3NfbGV2ZWwpOiBMaWtld2lzZS4KCjE5OTgtMDYtMTcgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiBwdC5jIChjb252ZXJ0X25vbnR5cGVfYXJndW1lbnQpOiBJc3N1ZSBhbiBlcnJvciB3aGVuIHByZXNlbnRlZAoJd2l0aCBhbiBpbnRlZ2VyIChyZWFsKSBjb25zdGFudCB0aGF0IGNhbm5vdCBiZSBzaW1wbGlmaWVkIHRvIGFuCglJTlRfQ1NUIChSRUFMX0NTVCkuCgoJKiBjcC10cmVlLmggKGNfZ2V0X2FsaWFzX3NldCk6IFJlbW92ZSBkZWNsYXJhdGlvbiBhZGRlZCBpbgoJMTk5OC0wNi0xMyBjaGFuZ2UgdGhhdCBzaG91bGQgbmV2ZXIgaGF2ZSBiZWVuIGNoZWNrZWQgaW4uCgoxOTk4LTA2LTE3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiB0eXBlY2suYyAoYnVpbGRfYmluYXJ5X29wX25vZGVmYXVsdCk6IENoYW5nZSAlIGluIGZvcm1hdCBzdHJpbmdzCgl0byAlJS4KCgkqIGRlY2wuYyAoZ3Jva3ZhcmRlY2wpOiBEb24ndCBidWlsZF9zdGF0aWNfbmFtZSBmb3IgZGVjbHMgdGhhdAoJYXJlbid0IGF0IG5hbWVzcGFjZSBzY29wZS4KCgkqIGluaXQuYyAocGVyZm9ybV9tZW1iZXJfaW5pdCk6IENhdGNoIGRlZmF1bHQtaW5pdGlhbGl6YXRpb24gb2YKCXJlZmVyZW5jZXMuCgoxOTk4LTA2LTE3ICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogZXJyZm4uYyAoY3BfdGhpbmcpOiBIYW5kbGUgdGhlIGAlJScgZm9ybWF0dGluZyBzZXF1ZW5jZS4KCjE5OTgtMDYtMTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIG1ldGhvZC5jIChoYWNrX2lkZW50aWZpZXIpOiBDb21wbGFpbiBhYm91dCBnZXR0aW5nIGEgbmFtZXNwYWNlCglvciBjbGFzcyB0ZW1wbGF0ZS4KCSogdHlwZWNrLmMgKGRlY2F5X2NvbnZlcnNpb24pOiBSZW1vdmUgY2hlY2sgZm9yIG5hbWVzcGFjZXMuCgkqIHR5cGVjazIuYyAoaW5jb21wbGV0ZV90eXBlX2Vycm9yKTogTGlrZXdpc2UuCgkqIHBhcnNlLnkgKHRlbXBsYXRlX2FyZyk6IEFkZCBQVFlQRU5BTUUgZXhwYW5zaW9uLgoKMTk5OC0wNi0xNiAgQW5kcmV3IE1hY0xlb2QgIDxhbWFjbGVvZEBjeWdudXMuY29tPgoKCSogZGVjbC5jIChncm9rdmFyZGVjbCk6IERvbid0IGJ1aWxkIGV4dGVybmFsIGFzc2VtYmxlciBuYW1lcyBmb3IgCglUWVBFTkFNRXMgaW4gb3RoZXIgbmFtZXNwYWNlcyBhcyB0aGVyZSBpcyBubyBkZWNsYXJhdG9yLgoJKiBlcnJvci5jIChjcF9maWxlX29mLCBjcF9saW5lX29mKTogRG9uJ3QgZXh0cmFjdCBmaWxlIG9yIGxpbmUgbnVtYmVyCglpbmZvIGZyb20gREVDTF9DT05URVhUIGlmIGl0IGlzIE5VTEwuCgoxOTk4LTA2LTE2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjYWxsLmMgKGNoZWNrX2R0b3JfbmFtZSk6IFNwbGl0IG91dC4KCShidWlsZF9zY29wZWRfbWV0aG9kX2NhbGwpOiBVc2UgaXQuCgkoYnVpbGRfbWV0aG9kX2NhbGwpOiBVc2UgaXQuCgkqIGluaXQuYyAoYnVpbGRfb2Zmc2V0X3JlZik6IFVzZSBpdC4KCgkqIHR5cGVjay5jIChidWlsZF9zdGF0aWNfY2FzdCk6IEZpeCBoYW5kbGluZyBvZiBwb2ludGVycyB0byBtZW1iZXJzLgoKCSogZGVjbC5jIChmaW5pc2hfZnVuY3Rpb24pOiBKdXN0IHJldHVybiBub3RoaW5nIGZyb20gYSBjb25zdHJ1Y3Rvci4KCSogdHlwZWNrLmMgKGNfZXhwYW5kX3JldHVybik6IENvbXBsYWluIGFib3V0IHJldHVybmluZyBhIHZvaWQKCWV4cHJlc3Npb24gZnJvbSBhIGRlc3RydWN0b3IuCgoxOTk4LTA2LTEzICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogY2xhc3MuYyAoYWx0ZXJfYWNjZXNzKTogQWNjZXB0IGEgQklORk8gZXhwbGFpbmluZyBob3cgdG8gZ2V0Cglmcm9tIHRoZSBlbnRpdHkgd2hvc2UgYWNjZXNzZWQgaXMgYmVpbmcgYWx0ZXJlZCB0byB0aGUgdHlwZSBkb2luZwoJdGhlIGFsdGVyaW5nLgoJKGhhbmRsZV91c2luZ19kZWNsKTogTmV3IGZ1bmN0aW9uIGNvbnRhaW5pbmcgY29kZSBzcGxpdCBvdXQgZnJvbSAuLi4KCShmaW5pc2hfc3RydWN0XzEpOiBIZXJlLgoKCSogY3AtdHJlZS5oIChjb21wbGV0ZV90eXBlX29yX2Vsc2UpOiBEZWNsYXJlLgoJKiBpbml0LmMgKGJ1aWxkX25ld18xLCBidWlsZF9kZWxldGUpOiBVc2UgaXQuCgkqIHR5cGVjay5jIChyZXF1aXJlX2NvbXBsZXRlX3R5cGUpOiBVc2UgY29tcGxldGVfdHlwZSwgcmF0aGVyIHRoYW4KCWV4cGFuZGluZyBpdCBpbmxpbmUuCgkoY29tcGxldGVfdHlwZV9vcl9lbHNlKTogTmV3IGZ1bmN0aW9uLgoJKGJ1aWxkX2NvbXBvbmVudF9yZWYpOiBVc2UgaXQuCgkocG9pbnRlcl9pbnRfc3VtKTogTWFrZSBzdXJlIHRoZSB0eXBlIHBvaW50ZWQgdG8gaXMgY29tcGxldGUuCgkocG9pbnRlcl9kaWZmKTogTGlrZXdpc2UuCgoJKiBwdC5jIChmb3JfZWFjaF90ZW1wbGF0ZV9wYXJtKTogVHJhdmVyc2UgdGhlIFRZUEVfQ09OVEVYVCBmb3IKCXR5cGVzLiAKCgkqIHNlYXJjaC5jIChnZXRfbWF0Y2hpbmdfdmlydHVhbCk6IE5vdGUgdGhhdCBtZW1iZXIgdGVtcGxhdGVzCgljYW5ub3Qgb3ZlcnJpZGUgdmlydHVhbCBmdW5jdGlvbnMuCgoxOTk4LTA2LTEyICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBjeWdudXMuY29tPgoKCSogcHQuYyAoY2hlY2tfZXhwbGljaXRfc3BlY2lhbGl6YXRpb24pOiBJZiBERUNMQVJBVE9SIHR1cm5lZCBpbnRvCglhbiBlcnJvcl9tYXJrX25vZGUgZnJvbSBsb29rdXBfdGVtcGxhdGVfZnVuY3Rpb24sIHJldHVybiB0aGUgc2FtZS4KCShkZXRlcm1pbmVfc3BlY2lhbGl6YXRpb24pOiBBbHNvIG1ha2Ugc3VyZSBURU1QTEFURV9JRCBpc24ndCBhbgoJZXJyb3JfbWFya19ub2RlLCBiZWZvcmUgd2UgdHJ5IHRvIHJlYWQgaXRzIG9wZXJhbmRzLgoJKiBkZWNsLmMgKGdyb2tkZWNsYXJhdG9yKTogSWYgd2UgZ290IGFuIGVycm9yX21hcmtfbm9kZSBmcm9tCgljaGVja19leHBsaWNpdF9zcGVjaWFsaXphdGlvbiwganVzdCByZXR1cm4gaXQgcmlnaHQgYmFjay4KCjE5OTgtMDYtMTIgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiBjbGFzcy5jIChpbnN0YW50aWF0ZV90eXBlKTogRG9uJ3QgdHJlYXQgdGVtcGxhdGUtaWRzIHRoYXQgZG9uJ3QKCXNwZWNpZnkgYW55IHRlbXBsYXRlIGFyZ3VtZW50cyBhcyBlcXVpdmFsZW50IHRvIG9yZGluYXJ5CglpZGVudGlmaWVycy4gIFVzZSBPRkZTRVRfUkVGIGluc3RlYWQgb2YgU0NPUEVfUkVGIHRvIHJlZmVyIHRvCglwb2ludGVyLXRvLW1lbWJlcnMgZm9yIG1lbWJlciB0ZW1wbGF0ZXMuICBUaWR5IHNsaWdodGx5LgoJKiBjcC10cmVlLmRlZiAoVEVNUExBVEVfSURfRVhQUik6IFJldmlzZSBkb2N1bWVudGF0aW9uLgoJKiBpbml0LmMgKGJ1aWxkX29mZnNldF9yZWYpOiBIYW5kbGUgdGVtcGxhdGUtaWRzIGxpa2Ugb3JkaW5hcnkKCWlkZW50aWZpZXJzLCBmb3IgdGhlIG1vc3QgcGFydCwgYnV0IHN0b3JlIGEgVEVNUExBVEVfSURfRVhQUiBpbiB0aGUKCW9mZnNldCBwYXJ0IG9mIHRoZSBPRkZTRVRfUkVGLgoJKiB0eXBlY2suYyAoYnVpbGRfdW5hcnlfb3ApOiBDaGFuZ2UgY2hlY2sgZm9yIHVua25vd24gdHlwZXMgdG8KCWxvb2sgZm9yIE9GRlNFVF9SRUZzLCBub3QgU0NPUEVfUkVGcy4KCjE5OTgtMDYtMTEgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiBwdC5jIChpc19tZW1iZXJfdGVtcGxhdGVfY2xhc3MpOiBOZXcgZnVuY3Rpb24uCgkocHVzaF90ZW1wbGF0ZV9kZWNsX3JlYWwpOiBVc2UgaXQuCgoxOTk4LTA2LTExICBCZW5qYW1pbiBLb3NuaWsgIDxia296QGVsbW8uY3lnbnVzLmNvbT4KCgkqIGZyaWVuZC5jIChkb19mcmllbmQpOiBBZGQgc3VwcG9ydCBmb3IgbmVzdGVkIGNsYXNzZXMgdXNpbmcKIAltZW1iZXIgZnVuY3Rpb25zIG9mIHRoZSBlbmNsb3NpbmcgY2xhc3MgYXMgZnJpZW5kcy4KCjE5OTgtMDYtMTAgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiBjYWxsLmMgKGNvbnZlcnRfZGVmYXVsdF9hcmcpOiBNYWtlIGdsb2JhbCwgbm90IHN0YXRpYy4KCShjb252ZXJ0X2FyZ19mb3JfZWxsaXBzaXMpOiBTcGxpdCBvdXQgZnJvbSAuLi4KCShidWlsZF9vdmVyX2NhbGwpOiBIZXJlLgoJKiBjcC10cmVlLmggKGNvbnZlcnRfZGVmYXVsdF9hcmcpOyBEZWNsYXJlLgoJKGNvbnZlcnRfYXJnX3RvX2VsbGlwc2lzKTogTGlrZXdpc2UuCgkoZG9fbWVtYmVyX2luaXQpOiBSZW1vdmUuCgkqIGluaXQuYyAoZG9fbWVtYmVyX2luaXQpOiBSZW1vdmU7IHRoaXMgY29kZSBpcyBkZWFkLgoJKGV4cGFuZF9tZW1iZXJfaW5pdCk6IFJlbW92ZSBtdWNoIG9mIHRoaXMgY29kZTsgaXQgaXMgZGVhZC4KCSogdHlwZWNrLmMgKGNvbnZlcnRfYXJndW1lbnRzKTogVXNlIGNvbnZlcnRfZGVmYXVsdF9hcmcgYW5kCgljb252ZXJ0X2FyZ19mb3JfZWxsaXBzaXMsIHJhdGhlciB0aGFuIGR1cGxpY2F0aW5nIGhlcmUuCgkKCSogY2FsbC5jIChjb252ZXJ0X2xpa2UpOiBEb24ndCBmYWlsIHNpbGVudGx5IGlmIAoJYnVpbGRfdXNlcl90eXBlX2NvbnZlcnNpb24gZmFpbHMuICBBbHdheXMgcmV0dXJuIGVycm9yX21hcmtfbm9kZSAKCWZvciBmYWlsdXJlLgoKMTk5OC0wNi0xMCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogc2VhcmNoLmMgKGNvdmFyaWFudF9yZXR1cm5fcCk6IENvbXBsYWluIGFib3V0IGFtYmlndW91cyBiYXNlLgoKCSogdHlwZWNrLmMgKGJ1aWxkX2NvbXBvbmVudF9yZWYpOiBEaWFnbm9zZSByZWYgdG8gbmVzdGVkIHR5cGUuCgoxOTk4LTA2LTEwICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBjeWdudXMuY29tPgoKCSogZGVjbC5jIChncm9rcGFybXMpOiBDaGVjayB0aGF0IElOSVQgaXNuJ3QgYW4gZXJyb3JfbWFya19ub2RlCgliZWZvcmUgZ2l2aW5nIGVycm9yIGFib3V0IGludmFsaWQgdHlwZSBmb3IgZGVmYXVsdCBhcmcuCgoxOTk4LTA2LTEwICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjYWxsLmMgKGJ1aWxkX21ldGhvZF9jYWxsKTogRml4IHRoaW5rby4KCjE5OTgtMDYtMTAgIERhdmUgQnJvbGxleSAgPGJyb2xsZXlAY3lnbnVzLmNvbT4KCgkqIGRlY2wyLmMgKGxhbmdfZGVjb2RlX29wdGlvbik6IE5ldyBhcmdjL2FyZ3YgaW50ZXJmYWNlLgoJKiBjcC10cmVlLmggKGxhbmdfZGVjb2RlX29wdGlvbik6IE5ldyBhcmdjL2FyZ3YgaW50ZXJmYWNlLgoJKiBsYW5nLXNwZWNzLmggKGRlZmF1bHRfY29tcGlsZXJzKTogT25seSBjYWxsIGNwcCBpZiAtRSwgLU0gb3IgLU1NIGlzCglzcGVjaWZpZWQgZm9yIGNwcGxpYi1lbmFibGVkIGNvbXBpbGVycy4KCSogbGV4LmMgKGxhbmdfaW5pdCk6IERvbid0IGNoZWNrX25ld2xpbmUgZm9yIGNwcGxpYi4KCShpbml0X3BhcnNlKTogRG9uJ3QgaW5pdGlhbGl6ZSBjcHBsaWIgaGVyZS4KCjE5OTgtMDYtMTAgIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGN5Z251cy5jb20+CgoJKiB0eXBlY2suYyAoYnVpbGRfY29tcG9uZW50X3JlZik6IE1ha2Ugc3VyZSBGSUVMRCBoYXMgYSBsYW5nX3NwZWNpZmljCglwaWVjZSBiZWZvcmUgY2hlY2tpbmcgREVDTF9NVVRBQkxFX1AuCgoxOTk4LTA2LTEwICBKb2huIENhcnIgIDxqZmNAbWl0LmVkdT4KCgkqIHRyZWUuYyAoZGVidWdfYmluZm8pOiBNYWtlIHByaW50ZiBmb3JtYXQgbWF0Y2ggYXJndW1lbnRzLgoKCSogZXJyb3IuYyAoT0JfUFVUSSk6IE1ha2UgcHJpbnRmIGZvcm1hdCBtYXRjaCBhcmd1bWVudHMuCgoxOTk4LTA2LTEwICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBpbml0LmMgKHBlcmZvcm1fbWVtYmVyX2luaXQpOiBIYW5kbGUgZGVmYXVsdC1pbml0aWFsaXphdGlvbi4KCgkqIGV4Y2VwdC5jIChidWlsZF90aHJvdyk6IEhhbmRsZSB0aHJvd2luZyBOVUxMLgoKCSogdHlwZWNrLmMgKGJ1aWxkX3hfZnVuY3Rpb25fY2FsbCk6IFVzZSByZXNvbHZlX29mZnNldF9yZWYuCgoJKiBzZWFyY2guYyAoY29tcHV0ZV9hY2Nlc3MpOiBPbmx5IHN0cmlwIGFuIGFub255bW91cyB1bmlvbgoJZm9yIGEgRklFTERfREVDTC4KCgkqIGNhbGwuYyAoYWRkX2J1aWx0aW5fY2FuZGlkYXRlcyk6IFR3ZWFrLgoKCSogY3Z0LmMgKGJ1aWxkX2V4cHJfdHlwZV9jb252ZXJzaW9uKTogUmVzdG9yZSBjb2RlIGZvciBjb252ZXJzaW9uCglmcm9tIGNsYXNzIHR5cGVzLgoJKiBkZWNsMi5jIChkZWxldGVfc2FuaXR5KTogVXNlIGl0LiAgQ2xlYW4gdXAuCgoJKiB0eXBlY2suYyAoY29tcF9wdHJfdHR5cGVzX3JlYWwpOiBGaXggY3YtcXVhbCBjb21wYXJpc29ucy4KCjE5OTgtMDYtMTAgIEJyYW5rbyBDaWJlaiAgPGJyYW5rby5jaWJlakBoZXJtZXMuc2k+CgogICAgICAgICogdHlwZWNrLmMgKGNfZXhwYW5kX3JldHVybik6IERvbid0IHdhcm4gYWJvdXQgdm9pZCBleHByZXNzaW9ucyBvbgogICAgICAgIHJldHVybiBzdGF0ZW1lbnRzIGluIGZ1bmN0aW9ucyByZXR1cm5pbmcgdm9pZC4KCjE5OTgtMDYtMDkgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiBwdC5jIChmbl90eXBlX3VuaWZpY2F0aW9uKTogUmV2aXNlIGRvY3VtZW50YXRpb24uICBUaWR5LgoJKHR5cGVfdW5pZmljYXRpb24pOiBMaWtld2lzZS4KCjE5OTgtMDYtMDkgIEFuZHJldyBNYWNMZW9kICA8YW1hY2xlb2RAY3lnbnVzLmNvbT4KCgkqIHNlbWFudGljcy5jIChmaW5pc2hfdHJ5X2Jsb2NrKTogUmVuYW1lIGV4cGFuZF9zdGFydF9jYXRjaCwgYW5kIGRlbGV0ZQoJZXhwYW5kX2VuZF9jYXRjaC4KCSogcGFyc2UueSAoZnVuY3Rpb25fdHJ5X2Jsb2NrKTogUmVuYW1lIGV4cGFuZF9zdGFydF9jYXRjaCwgYW5kIGRlbGV0ZQoJZXhwYW5kX2VuZF9jYXRjaC4KCSogZXhjZXB0LmMgKGV4cGFuZF9lbmRfZWhfc3BlYyk6IFJlbmFtZSBleHBhbmRfc3RhcnRfY2F0Y2gsIGFuZCBkZWxldGUKCWV4cGFuZF9lbmRfY2F0Y2guCgoxOTk4LTA2LTA5ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBzZWFyY2guYyAobG9va3VwX21lbWJlcik6IE5ldyBmbi4KCSogY2xhc3MuYyAoZmluaXNoX3N0cnVjdF8xKTogVXNlIGl0LgoJKiBkZWNsLmMgKGxvb2t1cF9uYW1lX3JlYWwpOiBVc2UgaXQuCgpNb24gSnVuICA4IDIwOjQ1OjUyIDE5OTggIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIE1ha2VmaWxlLmluIChkZWNsMi5vKTogRGVwZW5kIG9uIGR3YXJmMm91dC5oIGFuZCBkd2FyZm91dC5oLgoKCSogY3AtdHJlZS5oOiBBZGQgcHJvdG90eXBlIGZvciBgbWF5YmVfcHJpbnRfdGVtcGxhdGVfY29udGV4dCcgYW5kCiAJYG1heWJlX21ha2Vfb25lX29ubHknLgoKCSogZGVjbC5jIChhdXRvX2Z1bmN0aW9uKTogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZSBgZGVjbCcuCgoJKiBkZWNsMi5jOiBJbmNsdWRlIGR3YXJmMm91dC5oIGFuZCBkd2FyZm91dC5oLgoKCSogbGV4LmM6IFJlbW92ZSByZWR1bmRhbnQgZGVjbGFyYXRpb25zIG9mIGBzZXRfZmxvYXRfaGFuZGxlcicgYW5kCiAJYGFzbV9vdXRfZmlsZScuCgoxOTk4LTA2LTA4ICBBbmRyZXcgTWFjTGVvZCAgPGFtYWNsZW9kQGN5Z251cy5jb20+CgoJKiBleGNlcHQuYyAoaW5pdF9leGNlcHRpb25fcHJvY2Vzc2luZyk6IFJlbW92ZSBORVdfRUhfTU9ERUwgY29tcGlsZSAKCXRpbWUgZmxhZy4gIENhbGwgX19jcF9laF9pbmZvIGluc3RlYWQgb2YgX19jcF9leGNlcHRpb25faW5mby4KCSogZXhjZXB0aW9uLmNjIChzdHJ1Y3QgY3BfZWhfaW5mbyk6IFJlbW92ZSBORVdfRUhfTU9ERUwgZmxhZy4KCShfX2NwX2V4Y2VwdGlvbl9pbmZvKTogUmV0dXJuIG9mZnNldCBpbnRvIGNwX2VoX2luZm8gc3RydWN0dXJlIHRvIAoJbWF0Y2ggd2hhdCB1c2UgdG8gYmUgdGhlIHN0YXJ0IG9mIHRoaXMgc3RydWN0dXJlLgoJKF9fY3BfZWhfaW5mbyk6IE5ldyBmdW5jdGlvbiB0byByZXR1cm4gYSBwb2ludGVyIHRvIGNwX2VoX2luZm8gc3RydWN0LgoJKF9fY3BsdXNfdHlwZV9tYXRjaGVyLCBfX2NwX3B1c2hfZXhjZXB0aW9uKTogUmVtb3ZlIE5FV19FSF9NT0RFTAoJY29tcGlsZSB0aW1lIGZsYWcuCgkoX191bmNhdGNoX2V4Y2VwdGlvbiwgX19jaGVja19laF9zcGVjLCBzdGQ6OnVuY2F1Z2h0X2V4Y2VwdGlvbik6IENhbGwgCglfX2NwX2VoX2luZm8gaW5zdGVhZCBvZiBfX2NwX2V4Y2VwdGlvbl9pbmZvLgoKMTk5OC0wNi0wOCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZGVjbC5jIChjcF9maW5pc2hfZGVjbCk6IERpc2FibGUgaW5saW5pbmcgb2YgZXh0ZXJuIGlubGluZXMKCXdpdGggc3RhdGljIHZhcmlhYmxlcy4KCjE5OTgtMDYtMDggIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiBpbml0LmMgKGJ1aWxkX29mZnNldF9yZWYpOiBDb3JyZWN0IHByZXZpb3VzIGNoYW5nZSB0byB1c2UgYnVpbGQsCglub3QgYnVpbGRfbWluLgoKMTk5OC0wNi0wNyAgTWFyayBNaXRjaGVsbCAgPG1hcmtAbWFya21pdGNoZWxsLmNvbT4KCgkqIGNsYXNzLmMgKGluc3RhbnRpYXRlX3R5cGUpOiBIYW5kbGUgcG9pbnRlci10by1tZW1iZXJzIHdoZXJlIHRoZQoJbWVtYmVyIGlzIGEgdGVtcGxhdGUuCgkqIGluaXQuYyAoYnVpbGRfb2Zmc2V0X3JlZik6IExpa2V3aXNlLgoJKiB0eXBlY2suYyAoYnVpbGRfdW5hcnlfb3ApOiBMaWtld2lzZS4KCjE5OTgtMDYtMDcgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBsZXguYyAobGFuZ19pbml0X29wdGlvbnMpOiBOZXcgZnVuY3Rpb24uCgkobGFuZ19pbml0KTogUmVtb3ZlIGZsYWdfZXhjZXB0aW9ucyA9PSAyIGhhY2suCgkKMTk5OC0wNi0wNSAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogc2VhcmNoLmMgKGVudmVsb3BlX2FkZF9kZWNsKTogVHdlYWsgZm9yIGltcGxpY2l0IHR5cGVuYW1lLgoKCSogY2FsbC5jIChqb3VzdCk6IEFsc28gd2FybiBhYm91dCBjb25mdXNpbmcgY29udmVyc2lvbiBvcC9jb25zdHJ1Y3RvcgoJb3ZlcmxvYWQgcmVzb2x1dGlvbi4KCgkqIHNwZXcuYyAoeXlsZXgpOiBBbHNvIHJldHVybiB0aGUgVFlQRV9ERUNMIGlmIGdvdF9vYmplY3QuCglEb24ndCBjbGVhciBnb3Rfb2JqZWN0IGFmdGVyICd+Jy4KCSogY2FsbC5jIChidWlsZF9zY29wZWRfbWV0aG9kX2NhbGwpOiBUd2VhayBkZXN0cnVjdG9yIGhhbmRsaW5nLgoJKGJ1aWxkX21ldGhvZF9jYWxsKTogTGlrZXdpc2UuCgkqIHB0LmMgKHRzdWJzdF9jb3B5LCBjYXNlIE1FVEhPRF9DQUxMX0VYUFIpOiBEb24ndCBtZXNzIHdpdGgKCVRZUEVfTUFJTl9WQVJJQU5UIGZvciBkZXN0cnVjdG9ycy4KCSogc2VtYW50aWNzLmMgKGZpbmlzaF9vYmplY3RfY2FsbF9leHByKTogQ29tcGxhaW4gYWJvdXQgY2FsbGluZyBhCglUWVBFX0RFQ0wuCgoxOTk4LTA2LTA1ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAY3lnbnVzLmNvbT4KCgkqIGcrK3NwZWMuYyAobGFuZ19zcGVjaWZpY19wcmVfbGluaywgbGFuZ19zcGVjaWZpY19leHRyYV9vZmlsZXMpOgoJRGVmaW5lIC0gdXBkYXRlIG5lZWRlZCBieSBnY2MuYyBjaGFuZ2UuCgoxOTk4LTA2LTA1ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBlcnJvci5jIChjcF9wcmludGVycyk6IFVzZSAnbycgaW5zdGVhZCBvZiAnXycgZm9yIHRoZSBudWxsIGVudHJ5LgoKMTk5OC0wNi0wNSAgTWFydGluIHYuIExvZXdpcyAgPGxvZXdpc0BpbmZvcm1hdGlrLmh1LWJlcmxpbi5kZT4KCgkqIGNwLXRyZWUuaCAoREVDTF9OQU1FU1BBQ0VfQUxJQVMsIE9SSUdJTkFMX05BTUVTUEFDRSk6IERlY2xhcmUuCgkqIGRlY2wuYyAobG9va3VwX25hbWVfcmVhbCk6IEFkZCBuYW1lc3BhY2VzX29ubHkgcGFyYW1ldGVyLgoJSWYgc2V0LCByZXR1cm4gb25seSBOQU1FU1BBQ0VfREVDTHMuCgkoc2VsZWN0X2RlY2wpOiBMaWtld2lzZS4KCShpZGVudGlmaWVyX3R5cGVfdmFsdWUpOiBHaXZlIGFkZGl0aW9uYWwgcGFyYW1ldGVyLgoJKGxvb2t1cF9uYW1lX25vbmNsYXNzKTogTGlrZXdpc2UuCgkobG9va3VwX25hbWUpOiBMaWtld2lzZS4KCShmaW5kX2JpbmRpbmcpOiBTa2lwIG5hbWVzcGFjZSBhbGlhc2VzLgoJKGJpbmRpbmdfZm9yX25hbWUpOiBMaWtld2lzZS4KCShwdXNoX25hbWVzcGFjZSk6IENoZWNrIGZvciBuYW1lc3BhY2UgYWxpYXNlcy4KCShsb29rdXBfbmFtZV9uYW1lc3BhY2Vfb25seSk6IE5ldyBmdW5jdGlvbi4KCShiZWdpbl9vbmx5X25hbWVzcGFjZV9uYW1lcywgZW5kX29ubHlfbmFtZXNwYWNlX25hbWVzKTogTmV3IGZ1bmN0aW9ucy4KCSogZGVjbDIuYyAoc2V0X2RlY2xfbmFtZXNwYWNlKTogU2tpcCBuYW1lc3BhY2UgYWxpYXNlcy4KCShkb191c2luZ19kaXJlY3RpdmUpOiBMaWtld2lzZS4KCShkb19uYW1lc3BhY2VfYWxpYXMpOiBQcm9kdWNlIG5hbWVzcGFjZSBhbGlhc2VzLCBmaXggYWxpYXMgCglyZWRlY2xhcmF0aW9uLgoJKiBlcnJvci5jIChkdW1wX2RlY2wpOiBTdXBwb3J0IFNDT1BFX1JFRi4KCSogcGFyc2UueSAoZXh0ZGVmKTogV3JhcCBsb29rdXAgd2l0aCBuYW1lc3BhY2Vfb25seSBmb3IgbmFtZXNwYWNlCglhbGlhc2VzIGFuZCB1c2luZyBkZWNsYXJhdGlvbnMuCgoxOTk4LTA2LTA0ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiB0cmVlLmMgKHJlYWxseV9vdmVybG9hZGVkX2ZuKTogT25seSBzZWUgdGhyb3VnaCBvbmUgVFJFRV9MSVNULgoKCSogZXJyb3IuYyAoZHVtcF9leHByKTogQ2xlYW4gdXAgTkVXX0VYUFIgY2FzZS4KCjE5OTgtMDYtMDQgIE1hcnRpbiB2b24gTPZ3aXMgIDxsb2V3aXNAaW5mb3JtYXRpay5odS1iZXJsaW4uZGU+CgoJU3VnZ2VzdGVkIGJ5IEJyZW5kYW4gS2Vob2UKCSogZGVjbDIuYyAoZG9fdG9wbGV2ZWxfdXNpbmdfZGVjbCk6IFdoZW4gZGVjbCBpcyBhIFRZUEVfREVDTCwKCXRyZWF0IGl0IGFzIHVzaW5nIDo6ZGVjbC4KCgkqIGRlY2wyLmMgKGFyZ19hc3NvY190eXBlKTogUHJvY2VzcyB1bmtub3duX3R5cGVfbm9kZSBhbmQgT0ZGU0VUX1RZUEUuCgoJKiB0cmVlLmMgKG1hcGNhcik6IFN1cHBvcnQgTkVXX0VYUFIuCgoJKiBlcnJvci5jIChkdW1wX2V4cHIpOiBTdXBwb3J0IE5FV19FWFBSLgoKMTk5OC0wNi0wMyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogbWV0aG9kLmMgKG1ha2VfdGh1bmspOiBVc2Ugb3ZlcmxvYWQgbWFjaGluZXJ5IHRvIG1ha2UgbmFtZS4KCSogc2VhcmNoLmMgKGNvdmFyaWFudF9yZXR1cm5fcCk6IE5ldyBmbi4KCShnZXRfbWF0Y2hpbmdfdmlydHVhbCk6IFVzZSBpdC4KCgkqIGluaXQuYyAoYnVpbGRfbmV3XzEpOiBGaXggY2hlY2sgZm9yIHZvaWQuCgoxOTk4LTA2LTAxICBQZXIgQm90aG5lciAgPGJvdGhuZXJAY3lnbnVzLmNvbT4KCgkqIGNwLXRyZWUuaCAoVFlQRV9GT1JfSkFWQSk6ICBOZXcgbWFjcm8uCgkqIGRlY2wuYywgY3AtdHJlZS5oIChqYXZhX2J5dGVfdHlwZV9ub2RlLCBqYXZhX3Nob3J0X3R5cGVfbm9kZSwKCWphdmFfaW50X3R5cGVfbm9kZSwgamF2YV9sb25nX3R5cGVfbm9kZSwgamF2YV9mbG9hdF90eXBlX25vZGUsCglqYXZhX2RvdWJsZV90eXBlX25vZGUsIGphdmFfY2hhcl90eXBlX25vZGUsIGphdmFfYm9vbGVhbl90eXBlX25vZGUpOgoJTmV3ICJwcmltaXRpdmUiIHR5cGVzLCB3aXRoIHByZWRlZmluZWQgbmFtZXMgX19qYXZhX2J5dGUgZXRjLgoJKHJlY29yZF9idWlsdGluX2phdmFfdHlwZSk6ICBOZXcgZnVuY3Rpb24uCgkoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiAgTWFrZSBKYXZhIHR5cGVzIHdpdGggcmVjb3JkX2J1aWx0aW5famF2YV90eXBlLgoJKHB1c2h0YWcsIGdyb2tkZWNsYXJhdG9yKTogIFNldCBUWVBFX0ZPUl9KQVZBIGlmIGluIGV4dGVybiAiSkFWQSIuCgkoeHJlZl9iYXNleXBlcyk6ICBJZiBiYXNlIGNsYXNzIHdhcyBUWVBFX0ZPUl9KQVZBLCBzbyBpcyB0aGlzIGNsYXNzLgoJKGdyb2tmbmRlY2wpOiAgQ2FsbCBjaGVja19qYXZhX21ldGhvZCBmb3IgSmF2YSBjbGFzc2VzLgoJKiBtZXRob2QuYyAoaXNfamF2YV90eXBlKTogIFJlbW92ZWQuICBSZXBsYWNlZCB3aXRoIFRZUEVfRk9SX0pBVkEuCgkocHJvY2Vzc19vdmVybG9hZF9pdGVtKTogIE1hdGNoIHR5cGVzIGFnYWluc3Qgc3BlY2lmaWMKCWphdmFfWFhfdHlwZV9ub2RlIHR5cGVzLCByYXRoZXIgdGhhbiB1c2luZyBpc19qYXZhX3R5cGUuCgkqIGNsYXNzLmMgKGZpbmlzaF9zdHJ1Y3RfMSk6ICBEb24ndCBhZGQgZGVmYXVsdCBjb3B5IGNvbnN0cnVjdG9yCglvciBvcGVyYXRvcj0gaWYgVFlQRV9GT1JfSkFWQS4KCShwb3BfbGFuZ19jb25leHQpOiAgUmVzdG9yZSBzdHJpY3RfcHJvdG90eXAgcHJvcGVyIGlmIEphdmEuCgkqIGRlY2wyLmMgKGFjY2VwdGFibGVfamF2YV90eXBlLCBjaGVja19qYXZhX21ldGhvZCk6ICBOZXcgZnVuY3Rpb25zLgoJKiBwdC5jIChpbnN0YW50aWF0ZV9jbGFzc190ZW1wbGF0ZSk6ICBDb3B5IFRZUEVfRk9SX0pBVkEgZnJvbSBwYXR0ZXJuLgoJKHRzdWJzdCk6ICBNb3ZlIGNvbW1vbiBzdGF0ZW1lbnQgYWZ0ZXIgaWYgc3RhdGVtZW50LgoJKiB0eXBlY2suYyAoY29tcHR5cGVzKTogIElmIHN0cmljdCwgVFlQRV9GT1JfSkFWQSBtdXN0IG1hdGNoLgoKMTk5OC0wNi0wMSAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogcHQuYyAoZm9yX2VhY2hfdGVtcGxhdGVfcGFybSk6IFVzZSBmaXJzdF9ydGxfb3AuCgoJKiB0cmVlLmMgKGJ1aWxkX2NwbHVzX2FycmF5X3R5cGVfMSk6IEFsc28gY2hlY2sgaW5kZXhfdHlwZSBmb3IKCXRlbXBsYXRlIHBhcm1zLgoKMTk5OC0wNS0zMSAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogcHQuYyAodHN1YnN0KTogQWx3YXlzIGNvcHkgQklORk9fQkFTRVRZUEVTLgoKMTk5OC0wNS0yOSAgc2NvdHQgc255ZGVyICA8c255ZGVyQGQwc2dpZi5mbmFsLmdvdj4KCgkqIHRyZWUuYyAobGF5b3V0X2Jhc2V0eXBlcyk6IElmIHdlIGNoYW5nZSBUWVBFX1NJWkUsIGNoYW5nZQoJVFlQRV9TSVpFX1VOSVQgdG9vLgoKMTk5OC0wNS0yOSAgTWFyayBNaXRjaGVsbCAgPG1hcmtAbWFya21pdGNoZWxsLmNvbT4KCgkqIGRlY2wuYyAoZ3Jva2RlY2xhcmF0b3IpOiBEb24ndCBjb21wbGFpbiBhYm91dCBpbi1jbGFzcwoJaW5pdGlhbGl6YXRpb24gb2Ygc3RhdGljIGNvbnN0cyBpZiB3ZSBkb24ndCByZWFsbHkga25vdyB0aGUgdHlwZQoJb2YgdGhlIHZhcmlhYmxlLgoKMTk5OC0wNS0yOSAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY3AtdHJlZS5oIChERUNMX0RFU1RSVUNUT1JfUCk6IE5ldyBtYWNyby4KCSogbWV0aG9kLmMgKGJ1aWxkX2Rlc3RydWN0b3JfbmFtZSk6IE5ldyBmbi4KCSogZGVjbDIuYyAobWF5YmVfcmV0cm9maXRfaW5fY2hyZyk6IFNwbGl0IG91dC4uLgoJKGdyb2tjbGFzc2ZuKTogRnJvbSBoZXJlLiAgUmVvcmdhbml6ZS4KCSogZGVjbC5jIChncm9rX2N0b3JfcHJvcGVydGllcyk6IE1ha2Ugc3VyZSBjdG9ycyBmb3IgdHlwZXMgd2l0aCAKCXZiYXNlcyBoYXZlIHRoZSBpbl9jaHJnIHBhcm0uCgkqIHB0LmMgKGluc3RhbnRpYXRlX2NsYXNzX3RlbXBsYXRlKTogVXBkYXRlIAoJVFlQRV9VU0VTX1ZJUlRVQUxfQkFTRUNMQVNTRVMgZnJvbSB0c3Vic3RlZCBiYXNlcy4gIERvbid0IGNhbGwKCWdyb2tfKl9wcm9wZXJ0aWVzLgoJKHRzdWJzdCk6IENhbGwgZ3Jva19jdG9yX3Byb3BlcnRpZXMgYW5kIG1heWJlX3JldHJvZml0X2luX2NocmcuCgoxOTk4LTA1LTI4ICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogcHQuYyAoaW5zdGFudGlhdGVfZGVjbCk6IE1ha2UgdGVzdCBmb3Igd2hldGhlciBvciBub3Qgc3RhdGljCgl2YXJpYWJsZXMgc2hvdWxkIGJlIGluc3RhbnRpYXRlZCBlYXJseSBtYXRjaCBpdHMgY29tbWVudC4KCjE5OTgtMDUtMjggIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAoc3RhcnRfZGVjbCk6IEFsd2F5cyBwZWR3YXJuIGFib3V0IHZhY3VvdXNseSByZWRlY2xhcmluZyAKCWEgbWVtYmVyLgoJKHN0YXJ0X2Z1bmN0aW9uKTogQ2FsbCBjaGVja19kZWZhdWx0X2FyZ3MuCgkqIGRlY2wyLmMgKGdyb2tmaWVsZCk6IERvbid0IGNhbGwgY2hlY2tfZGVmYXVsdF9hcmdzLgoJKGNoZWNrX2RlZmF1bHRfYXJncyk6IFVzZSBjcF9lcnJvcl9hdC4KCSogbGV4LmMgKGRvX3BlbmRpbmdfZGVmYXJncyk6IENhbGwgY2hlY2tfZGVmYXVsdF9hcmdzLgoKMTk5OC0wNS0yNyAgQnJlbmRhbiBLZWhvZSAgPGJyZW5kYW5AY3lnbnVzLmNvbT4KCgkqIGNhbGwuYyAoYnVpbGRfbWV0aG9kX2NhbGwpOiBNYWtlIHN1cmUgZ2V0X3R5cGVfdmFsdWUgcmV0dXJucwoJc29tZXRoaW5nIGJlZm9yZSB3ZSB0cnkgdG8gdXNlIGl0cyBUWVBFX01BSU5fVkFSSUFOVC4KCShidWlsZF9zY29wZWRfbWV0aG9kX2NhbGwpOiBMaWtld2lzZS4KCjE5OTgtMDUtMjcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHR5cGVjazIuYyAoZGlnZXN0X2luaXQpOiBDb21wbGFpbiBhYm91dCBnZXR0aW5nIGEgVFJFRV9MSVNUIHRvCglpbml0aWFsaXplIGFuIGFycmF5LgoKCSogc2VhcmNoLmMgKGV4cGFuZF91cGNhc3RfZml4dXBzKTogRG9uJ3Qgc2V0IERFQ0xfQ09OVEVYVCBhbmQKCURFQ0xfVklSVFVBTF9QLgoKCSogZnJpZW5kLmMgKGRvX2ZyaWVuZCk6IENsYXJpZnkgdGVtcGxhdGUgd2FybmluZy4KCjE5OTgtMDUtMjcgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiBkZWNsLmMgKHNoYWRvd19sYWJlbCk6IERvbid0IHRyZWF0IGRlY2xzIGFzIGlkZW50aWZpZXJzLgoJKG1heWJlX3B1c2hfdG9fdG9wX2xldmVsKTogQ2xlYXIgc2hhZG93ZWRfbGFiZWxzLgoKCSogcHQuYyAoaW5zdGFudGlhdGVfZGVjbCk6IFJlc2V0IGxpbmVubyBhbmQgZmlsZW5hbWUgYWZ0ZXIgY2FsbGluZwoJcmVnZW5lcmF0ZV9kZWNsX2Zyb21fdGVtcGxhdGUuIAoKCSogZGVjbC5jIChncm9rZGVjbGFyYXRvcik6IERvbid0IHRyeSB0byB1c2UgVFlQRV9PQlNUQUNLIG9uIGFuCgllcnJvcl9tYXJrX25vZGUuCgoxOTk4LTA1LTI3ICBLZXZpbiBCdWhyICA8YnVockBzdGF0Lndpc2MuZWR1PgoKCSogcGFyc2UueSAoYmFzZV9jbGFzcyk6IFVzZSBpc19hZ2dyX3R5cGUsIG5vdCBJU19BR0dSX1RZUEUuCgoxOTk4LTA1LTI2ICBLcmlhbmcgTGVyZHN1d2FuYWtpaiAgPGxlcmRzdXdhQHNjZi51c2MuZWR1PgoKCSogcHQuYyAocHJvY2Vzc190ZW1wbGF0ZV9wYXJtKTogQWNjZXB0IFRZUEVOQU1FX1RZUEUgbm9kZXMuCgkoY29udmVydF9ub250eXBlX2FyZ3VtZW50KTogSGFuZGxlIGNhc2VzIHdoZW4gbm9udHlwZSB0ZW1wbGF0ZQoJcGFyYW1ldGVycyBiZWNvbWUgY2xhc3NlcyBhZnRlciBzdWJzdGl0dXRpb24uCgoxOTk4LTA1LTI2ICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogZnJpZW5kLmMgKGlzX2ZyaWVuZCk6IFVzZSBjb21wdHlwZXMsIHJhdGhlciB0aGFuID09IHRvIGNvbXBhcmUKCXR5cGVzLiAgTW9kaWZ5IGZvciBuZXcgcmVwcmVzZW50YXRpb24gb2YgdGVtcGxhdGUgZnJpZW5kcy4KCShtYWtlX2ZyaWVuZF9jbGFzcyk6IExpa2V3aXNlLgoJKiBwdC5jICh0c3Vic3RfZnJpZW5kX2NsYXNzKTogVW5kbyAxOTk4LTA1LTIxIGNoYW5nZS4gIFR3ZWFrLgoJKGluc3RhbnRpYXRlX2NsYXNzX3RlbXBsYXRlKTogRGVhbCB3aXRoIHRlbXBsYXRlIGZyaWVuZHMuCgoJKiBkZWNsLmMgKHN0b3JlX3Bhcm1fZGVjbHMpOiBSZW1vdmUgcmVkdW5kYW50IGNhbGwgdG8KCWV4cGFuZF9tYWluX2Z1bmN0aW9uLgoKMTk5OC0wNS0yNiAgQmVuamFtaW4gS29zbmlrICA8YmtvekBsb29ueS5jeWdudXMuY29tPgoKCSogZGVjbC5jIChzdGFydF9kZWNsKTogQ2hlY2sgZm9yIERFQ0xfTEFOR19TUEVDSUZJQyBiZWZvcmUKIAlERUNMX1VTRV9URU1QTEFURS4KCjE5OTgtMDUtMjYgIFBlciBCb3RobmVyICA8Ym90aG5lckBjeWdudXMuY29tPgoKCSogbGFuZ3VhZ2VfYXNfc3RyaW5nOiAgSGFuZGxlIGxhbmdfamF2YS4KCjE5OTgtMDUtMjYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAocHVzaGRlY2wpOiBEb24ndCBjb3B5IHRoZSB0eXBlX2RlY2wuCgoxOTk4LTA1LTI2ICBNYXJ0aW4gdi4gTPZ3aXMgIDxsb2V3aXNAaW5mb3JtYXRpay5odS1iZXJsaW4uZGU+CgoJKiBjbGFzcy5jIChwdXNoY2xhc3MpOiBBbHdheXMgc3RvcmUgVFlQRV9NQUlOX1ZBUklBTlQgaW4KCWN1cnJlbnRfY2xhc3NfdHlwZS4KCSogZGVjbC5jIChncm9rZGVjbGFyYXRvcik6IFB1dCB0eXBlZGVmcyBvbiB0aGUgdHlwZSdzIG9ic3RhY2suCgoJKiBwYXJzZS55IChjb21wbGV4X2RpcmVjdF9ub3R5cGVfZGVjbGFyYXRvcik6IFVzZSAkMSB0byBhY2Nlc3MKCXNjb3BlIG9mIG5vdHlwZV9xdWFsaWZpZWRfaWQuCgoxOTk4LTA1LTI2ICBEYXZlIEJyb2xsZXkgIDxicm9sbGV5QGN5Z251cy5jb20+CgoJKiBsZXguYyAocGFyc2Vfb3B0aW9ucyx5eV9jdXIseXlfbGltKTogQWRkIGZvciBjcHBsaWIuCgkoaW5pdF9wYXJzZSk6IEluaXRpYWxpemUgY3BwbGliIGludGVyZmFjZS4KCgkqIE1ha2VmaWxlLmluIChDWFhfT0JKUyk6IE1ha2Ugc3VyZSBkZXBlbmRlbmNpZXMgbmV2ZXIgZW5kIHdpdGggYW4KCWVtcHR5IGNvbnRpbnVhdGlvbi4KCjE5OTgtMDUtMjYgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiBkZWNsLmMgKHB1c2h0YWcpOiBBdm9pZCBjcmFzaGluZyBvbiBlcnJvbmVvdXMgaW5wdXQuCgoxOTk4LTA1LTI1ICBNYXJ0aW4gdi4gTPZ3aXMgIDxsb2V3aXNAaW5mb3JtYXRpay5odS1iZXJsaW4uZGU+CgoJKiBkZWNsLmMgKHB1c2hfbmFtZXNwYWNlKTogT25seSBwcm9kdWNlIG9uZSB1bmlxdWUgbmFtZSBmb3IKCWFub255bW91cyBuYW1lc3BhY2VzLgoJKGdldF91bmlxdWVfbmFtZSk6IFJlbW92ZS4KCjE5OTgtMDUtMjUgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiBjYWxsLmMgKHRvdXJuZXkpOiBEb24ndCBkbyBhbnkgZXh0cmEgY29tcGFyaXNvbnMuCgoJKiBkZWNsMi5jIChidWlsZF9hbm9uX3VuaW9uX3ZhcnMpOiBEb24ndCBjcmFzaCBvbiBlbXB0eSBzdWItdW5pb25zLgoKCSogY3AtdHJlZS5oIChwcm9jZXNzaW5nX3RlbXBsYXRlX3Bhcm1saXN0KTogRGVjbGFyZS4KCSogZGVjbC5jIChwdXNodGFnKTogRG9uJ3QgY2FsbCBwdXNoX3RlbXBsYXRlX2RlY2wgd2hlbiB3ZQoJc2hvdWxkbid0LiAKCSogcHQuYyAocHJvY2Vzc2luZ190ZW1wbGF0ZV9wYXJtbGlzdCk6IE5ldyB2YXJpYWJsZS4KCShUTVBMX0FSR1NfSEFWRV9NVUxUSVBMRV9MRVZFTFMpOiBOZXcgbWFjcm8uCgkoY29tcGxldGVfdGVtcGxhdGVfYXJncyk6IFVzZSBpdC4KCShhZGRfdG9fdGVtcGxhdGVfYXJncyk6IExpa2V3aXNlLgoJKGlubmVybW9zdF9hcmdzKTogTGlrZXdpc2UuCgkodHN1YnN0KTogTGlrZXdpc2UuCgkoYmVnaW5fdGVtcGxhdGVfcGFybV9saXN0KTogVXNlIHByb2Nlc3NpbmdfdGVtcGxhdGVfcGFybWxpc3QuCgkoZW5kX3RlbXBsYXRlX3Bhcm1fbGlzdCk6IExpa2V3aXNlLgoKCSogY3AtdHJlZS5oIChBTk9OX1VOSU9OX1RZUEVfUCk6IE5ldyBtYWNyby4KCSogZGVjbC5jIChncm9rZGVjbGFyYXRvcik6IFVzZSBpdC4KCSogZGVjbDIuYyAoZ3Jva194X2NvbXBvbmVudHMpOiBMaWtld2lzZS4KCSogaW5pdC5jIChpbml0aWFsaXppbmdfY29udGV4dCk6IExpa2V3aXNlLgoJKiBtZXRob2QuYyAoZG9fYnVpbGRfY29weV9jb25zdHJ1Y3Rvcik6IExpa2V3aXNlLgoJKGRvX2J1aWxkX2Fzc2lnbl9yZWYpOiBMaWtld2lzZS4KCSogc2VhcmNoLmMgKGNvbXB1dGVfYWNjZXNzKTogTGlrZXdpc2UuCgkqIHR5cGVjay5jIChidWlsZF9jb21wb25lbnRfcmVmKTogTGlrZXdpc2UuCgoJKiBkZWNsLmMgKGdyb2tkZWNsYXJhdG9yKTogRG9uJ3QgZ2l2ZSBhIGN2LXF1YWxpZmllZCB2ZXJzaW9uIG9mIGFuCgl1bm5hbWVkIHR5cGUgYSB0eXBlZGVmIG5hbWUgImZvciBsaW5rYWdlIHB1cnBvc2VzIi4KCgkqIHB0LmMgKGxvb2t1cF90ZW1wbGF0ZV9jbGFzcyk6IERvbid0IGxvb2sgYXQKCUlERU5USUZJRVJfQ0xBU1NfVkFMVUUgd2hlbiB0aGVyZSdzIG5vIGN1cnJlbnRfY2xhc3NfdHlwZS4KCgkqIG1ldGhvZC5jIChidWlsZF9vdmVybG9hZF9pbnQpOiBIYW5kbGUgZXJyb3IgY2FzZXMgZ3JhY2VmdWxseS4KCgkqIHB0LmMgKGluc3RhbnRpYXRlX2RlY2wpOiBIYW5kbGUgc3RhdGljIG1lbWJlciB2YXJpYWJsZXMKCWNvcnJlY3RseS4KCgkqIHB0LmMgKHRzdWJzdCk6IFVzZSB0aGUgdHN1YnN0J2QgdHlwZSB3aGVuIHByb2R1Y2luZyBuZXcKCVRFTVBMQVRFX1BBUk1fSU5ERVggbm9kZXMuCgoxOTk4LTA1LTI0ICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogdHJlZS5jIChjcF90cmVlX2VxdWFsKTogSGFuZGxlIHBvaW50ZXJzIHRvIG1lbWJlciBmdW5jdGlvbnMuCgoJKiBjYWxsLmMgKG1heWJlX2hhbmRsZV9pbXBsaWNpdF9vYmplY3QpOiBIYW5kbGUgUVVBTF9DT05Wcy4gIE1ha2UKCXN1cmUgdGhlIHR5cGUgb2YgdGhlIFJFRl9CSU5EIGlzIGEgcmVmZXJlbmNlIHR5cGUuCgkobWF5YmVfaGFuZGxlX3JlZl9iaW5kLCBjb21wYXJlX2ljcyk6IFJlbmFtZSByZWZlcmVuY2VfdHlwZSB0bwoJdGFyZ2V0X3R5cGUgZm9yIGNsYXJpdHkuCgoJKiBwYXJzZS55ICh4Y29uZCk6IE1vdmUgY2FsbCB0byBjb25kaXRpb25fY29udmVyc2lvbiAuLi4KCSogc2VtYW50aWNzLmMgKGZpbmlzaF9mb3JfY29uZCk6IEhlcmUuCgkqIHBhcnNlLmM6IFJlZ2VuZXJhdGVkLgoJCjE5OTgtMDUtMjQgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAocHVzaF9uYW1lc3BhY2UpOiBOYW1lc3BhY2VzIGhhdmUgdHlwZSB2b2lkLgoJKiB0eXBlY2syLmMgKGluY29tcGxldGVfdHlwZV9lcnJvcik6IENvbXBsYWluIGFib3V0IG5hbWVzcGFjZQoJdXNlZCBhcyBleHByZXNzaW9uLgoJKiB0eXBlY2suYyAoZGVjYXlfY29udmVyc2lvbik6IExpa2V3aXNlLgoKMTk5OC0wNS0yNCAgTWFydGluIHZvbiBM9ndpcyAgPGxvZXdpc0BpbmZvcm1hdGlrLmh1LWJlcmxpbi5kZT4KCgkqIGVycm9yLmMgKGR1bXBfZXhwcik6IFN1cHBvcnQgbmFtZXNwYWNlcy4KCjE5OTgtMDUtMjMgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGNwLXRyZWUuZGVmOiBBZGQgU1JDTE9DLgoJKiBjcC10cmVlLmg6IEFkZCBzdHJ1Y3QgdHJlZV9zcmNsb2MgYW5kIGFjY2Vzc29yIG1hY3Jvcy4KCSogdHJlZS5jIChidWlsZF9zcmNsb2MsIGJ1aWxkX3NyY2xvY19oZXJlKTogTmV3IGZucy4KCSogcHQuYyAoYWRkX3BlbmRpbmdfdGVtcGxhdGUpOiBVc2UgYnVpbGRfc3JjbG9jX2hlcmUuCgkocHVzaF90aW5zdF9sZXZlbCk6IFVwZGF0ZSBsYXN0X3RlbXBsYXRlX2Vycm9yX3RpY2sgYmVmb3JlIGVycm9yaW5nLgoJKGluc3RhbnRpYXRlX2RlY2wpOiBSZXN0b3JlIGxpbmVubyBhbmQgaW5wdXRfZmlsZW5hbWUgYmVmb3JlIAoJY2FsbGluZyBhZGRfcGVuZGluZ190ZW1wbGF0ZS4KCSogZGVjbDIuYyAoZmluaXNoX2ZpbGUpOiBTZXQgdXAgbGluZW5vIGFuZCBpbnB1dF9maWxlbmFtZSBmb3IKCXBlbmRpbmcgdGVtcGxhdGVzLgoKMTk5OC0wNS0yMiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZGVjbC5jIChsYW5nX3ByaW50X2Vycm9yX2Z1bmN0aW9uKTogTmV3IGZuLiAgCgkoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBTZXQgcHJpbnRfZXJyb3JfZnVuY3Rpb24gdG8gdXNlIGl0LgoJKiBlcnJmbi5jIChjcF90aGluZyk6IERvbid0IGNhbGwgbWF5YmVfcHJpbnRfdGVtcGxhdGVfY29udGV4dCBoZXJlLgoKCSogY2FsbC5jIChtYXliZV9oYW5kbGVfcmVmX2JpbmQpOiBQcm9wYWdhdGUgSUNTX1VTRVJfRkxBRyBhbmQKCUlDU19CQURfRkxBRy4KCgkqIGN2dC5jIChvY3BfY29udmVydCk6IERvbid0IHNldCBMT09LVVBfTk9fQ09OVkVSU0lPTiBmb3IKCWNvcHktaW5pdGlhbGl6YXRpb24uCgoJKiBjbGFzcy5jIChidWlsZF92dGFibGVfZW50cnkpOiBVc2UgaW50X2ZpdHNfdHlwZV9wLgoJKGJ1aWxkX3Z0YWJsZSk6IFBhc3MgYSBzaWduZWQgb2Zmc2V0IHRvIGJ1aWxkX3Z0YWJsZV9lbnRyeS4KCShwcmVwYXJlX2ZyZXNoX3Z0YWJsZSwgbW9kaWZ5X29uZV92dGFibGUsIGZpeHVwX3Z0YWJsZV9kZWx0YXMxLAoJc2V0X3J0dGlfZW50cnkpOiBMaWtld2lzZS4KCjE5OTgtMDUtMjIgIFBlciBCb3RobmVyICA8Ym90aG5lckBjeWdudXMuY29tPgoKCSogY3AtdHJlZS5oOiAgQWRkIGNvbW1lbnRzIGRvY3VtZW50aW5nIHdoaWNoIExBTkdfRkxBR1MgYXJlIHVzZWQuCgkoQ19UWVBFX1ZBUklBQkxFX1NJWkUsIENfREVDTF9WQVJJQUJMRV9TSVpFKTogIFJlbW92ZWQsIG5vdCB1c2VkLgoKMTk5OC0wNS0yMiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogcHQuYyAocHJpbnRfdGVtcGxhdGVfY29udGV4dCk6IFVzZSBmcHJpbnRmIGluc3RlYWQgb2YgY3BfZXJyb3IuCgoJKiBwdC5jIChkZXRlcm1pbmVfc3BlY2lhbGl6YXRpb24pOiBKdXN0IHJldHVybiBhbiBlcnJvcl9tYXJrX25vZGUuCglBbHNvIHByaW50IHRoZSBkZWNsIHdlIHdhbnQgaW4gZXJyb3IgbWVzc2FnZXMuICBJZiB3ZSBjb21wbGFpbiwKCXJldHVybiBlcnJvcl9tYXJrX25vZGUuCgkodHN1YnN0X2ZyaWVuZF9mdW5jdGlvbik6IFNldCBsaW5lbm8gYW5kIGlucHV0X2ZpbGVuYW1lIHNvIAoJZXJyb3IgbWVzc2FnZXMgd2lsbCBiZSB1c2VmdWwuCgkoaW5zdGFudGlhdGVfdGVtcGxhdGUpOiBKdXN0IHJldHVybiBhbiBlcnJvcl9tYXJrX25vZGUuCgkoY2hlY2tfZXhwbGljaXRfc3BlY2lhbGl6YXRpb24pOiBEb24ndCBtZXNzIHdpdGggYSByZXR1cm5lZAoJZXJyb3JfbWFya19ub2RlLgoKCSogcHQuYyAocHJpbnRfdGVtcGxhdGVfY29udGV4dCk6IEFkZCBuZXcgYXJndW1lbnQuCgkobWF5YmVfcHJpbnRfdGVtcGxhdGVfY29udGV4dCk6IE5ldyBmbi4KCShwdXNoX3RpbnN0X2xldmVsKTogSW5jcmVtZW50IHRpbnN0X2xldmVsX3RpY2suCgkocG9wX3RpbnN0X2xldmVsKTogTGlrZXdpc2UuCgkqIGVycmZuLmMgKGNwX3RoaW5nKTogQ2FsbCBtYXliZV9wcmludF90ZW1wbGF0ZV9jb250ZXh0LiAgVXNlCgl4cmVhbGxvYyBpbnN0ZWFkIG9mIHhtYWxsb2MuCgoJKiB0eXBlY2suYyAoYnVpbGRfdW5hcnlfb3AsIENPTlZFUlRfRVhQUik6IFByb3BhZ2F0ZSBUUkVFX0NPTlNUQU5ULgoKMTk5OC0wNS0yMSAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogcHQuYyAodHN1YnN0X2ZyaWVuZF9jbGFzcyk6IERvbid0IGNhbGwgcmVkZWNsYXJlX2NsYXNzX3RlbXBsYXRlCglpZiB0aGUgdGVtcGxhdGUgd2UgbG9va2VkIHVwIGlzIHRoZSBzYW1lIGFzIHRoZSBvbmUgd2UgYWxyZWFkeQoJaGF2ZS4KClRodSBNYXkgMjEgMTE6NTQ6NDQgMTk5OCAgRGF2ZSBCcm9sbGV5ICA8YnJvbGxleUBjeWdudXMuY29tPgoKCSogbGV4LmM6IChoYW5kbGVfc3lzdl9wcmFnbWEpOiBGSUxFKiBwYXJhbWV0ZXIgbm90IHVzZWQuCgkoY3BwX3JlYWRlcixwYXJzZV9pbik6IEFkZCBmb3IgY3BwbGliLgoJKGNoZWNrX25ld2xpbmUpOiBDYWxsIGhhbmRsZV9zeXN2X3ByYWdtYSB3aXRoIG5ldyBpbnRlcmZhY2UuCgkoY2hlY2tfbmV3bGluZSk6IENhbGwgR0VUX0RJUkVDVElWRV9MSU5FLCBub3QgZ2V0X2RpcmVjdGl2ZV9saW5lLgoKCSogaW5wdXQuYzogKHl5X2N1cix5eV9saW0seXlfZ2V0X3Rva2VuLEdFVEMpOiBBZGQgZm9yIGNwcGxpYi4KCShzdWJfZ2V0Y2gpOiBDYWxsIEdFVEMgZm9yIGNwcGxpYi4KCgkqIGNwLXRyZWUuaDogKGdldF9kaXJlY3RpdmVfbGluZSk6IERpZmZlcmVudCBwcm90b3R5cGUgZm9yIGNwcGxpYi4KCShHRVRfRElSRUNUSVZFX0xJTkUpOiBNYWNybyB3cmFwcGVyIGZvciBnZXRfZGlyZWN0aXZlX2xpbmUuCgoJKiBNYWtlZmlsZS5pbiAoQ1hYX09CSlMpOiBhZGQgQGV4dHJhX2N4eF9vYmpzQCBmb3IgY3BwbGliLgoKMTk5OC0wNS0yMSAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZGVjbDIuYyAobWF5YmVfbWFrZV9vbmVfb25seSk6IE5ldyBmbi4KCShpbXBvcnRfZXhwb3J0X3Z0YWJsZSk6IFVzZSBpdC4KCShpbXBvcnRfZXhwb3J0X2RlY2wpOiBMaWtld2lzZS4KCSogcHQuYyAobWFya19kZWNsX2luc3RhbnRpYXRlZCk6IExpa2V3aXNlLgoKMTk5OC0wNS0yMSAgTWFyayBNaXRjaGVsbCAgPG1taXRjaGVsbEB1c2EubmV0PgoKCSogZGVjbDIuYyAoZmluZF9yZXByZXNlbnRhdGl2ZV9tZW1iZXIpOiBSZW5hbWUgdG8gLi4uCgkoYnVpbGRfYW5vbl91bmlvbl92YXJzKTogTmV3IGZ1bmN0aW9uLgoJKGZpbmlzaF9hbm9uX3VuaW9uKTogRml4IHN0dXBpZGl0eSBvZiBwcmV2aW91cyBjaGFuZ2UuCgoxOTk4LTA1LTIwICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBkZWNsLmMgKGdyb2tmbmRlY2wpOiBIYW5kbGUgZGVmaW5pdGlvbiBvZiBzcGVjaWFsaXphdGlvbiBpbgoJZnJpZW5kIGRlY2xhcmF0aW9uLgoKCSogZXJyb3IuYyAoZHVtcF9kZWNsKTogRml4IExPT0tVUF9FWFBSIGhhbmRsaW5nLgoKMTk5OC0wNS0yMCAgTWFyayBNaXRjaGVsbCAgPG1taXRjaGVsbEB1c2EubmV0PgoKCSogY2xhc3MuYyAoZGVsZXRlX2R1cGxpY2F0ZV9maWVsZHNfMSk6IFVzZSBERUNMX0RFQ0xBUkVTX1RZUEVfUAoJdG8gbG9vayBmb3IgdHlwZSBkZWNsYXJhdGlvbnMuCgkoZmluaXNoX3N0cnVjdCk6IERlYWwgd2l0aCB0ZW1wbGF0ZXMgb24gdGhlIENMQVNTVFlQRV9UQUdTIGxpc3QuCgkqIGNwLXRyZWUuaCAoREVDTF9ERUNMQVJFU19UWVBFX1ApOiBOZXcgbWFjcm8uCgkoZmluaXNoX21lbWJlcl9jbGFzc190ZW1wbGF0ZSk6IERlY2xhcmUuCgkqIGRlY2wuYyAocHVzaHRhZyk6IFB1dCBtZW1iZXIgY2xhc3MgdGVtcGxhdGVzIG9uIHRoZQoJQ0xBU1NUWVBFX1RBR1MgbGlzdCwganVzdCBhcyBmb3Igb3JkaW5hcnkgbWVtYmVyIGNsYXNzZXMuCgkocHVzaGRlY2xfY2xhc3NfbGV2ZWwpOiBVc2UgREVDTF9ERUNMQVJFU19UWVBFX1AuCgkobG9va3VwX3RhZyk6IExvb2sgZm9yIElERU5USUZJRVJfQ0xBU1NfVkFMVUVzLCBqdXN0IGFzIHdpdGgKCUlERU5USUZJRVJfTkFNRVNQQUNFX1ZBTFVFcy4gCgkqIHBhcnNlLnkgKGNvbXBvbmVudF9kZWNsKTogTW92ZSBjb2RlIHRvIC4uLgoJKiBzZW1hbnRpY3MuYyAoZmluaXNoX21lbWJlcl9jbGFzc190ZW1wbGF0ZSk6IE5ldyBmdW5jdGlvbi4gIAoJRG9uJ3QgcHV0IG1lbWJlciBjbGFzcyB0ZW1wbGF0ZXMgb24gdGhlIGxpc3Qgb2YgY29tcG9uZW50cyBmb3IgYQoJY2xhc3MuIAoJKiBwYXJzZS5jOiBSZWdlbmVyYXRlZC4KCSogcHQuYyAoY2xhc3N0eXBlX21hbmdsZWRfbmFtZSk6IERvbid0IHRyeSBERUNMX0NPTlRFWFQgb24gdHlwZXMuCglJbiBmYWN0LCBkb24ndCB1c2UgREVDTF9DT05URVhUIGF0IGFsbCBoZXJlLgoKMTk5OC0wNS0yMCAgTWFydGluIHZvbiBMb2V3aXMgIDxsb2V3aXNAaW5mb3JtYXRpay5odS1iZXJsaW4uZGU+CgoJKiBkZWNsLmMgKHJlY29yZF91bmtub3duX3R5cGUpOiBOZXcgZnVuY3Rpb24uCgkoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBDYWxsIGl0IGZvciB0aGUgdW5rbm93biBhbmQgZ2xvYmFsIHR5cGUKCW5vZGVzLgoKMTk5OC0wNS0yMCAgTWFyayBNaXRjaGVsbCAgPG1taXRjaGVsbEB1c2EubmV0PgoKCSogZGVjbDIuYyAoZmluZF9yZXByZXNlbnRhdGl2ZV9tZW1iZXIpOiBOZXcgZnVuY3Rpb24uCgkoZmluaXNoX2Fub25fdW5pb24pOiBVc2UgaXQuCgoJKiBjcC10cmVlLmggKE1BSU5fTkFNRV9QKTogTmV3IG1hY3JvLgoJKERFQ0xfTUFJTl9QKTogTGlrd2lzZS4KCSogZGVjbC5jIChwdXNoZGVjbCk6IEF2b2lkIGNyYXNoaW5nIG9uIHJlZGVmaW5pdGlvbnMgb2YgYG1haW4nLgoJKGdyb2tmbmRlY2wpOiBVc2UgdGhlIG5ldyBtYWNyb3MuCgkoZ3Jva2RlY2xhcmF0b3IpOiBMaWtld2lzZS4KCShzdGFydF9mdW5jdGlvbik6IExpa2V3aXNlLgoJKHN0b3JlX3Bhcm1fZGVjbHMpOiBMaWtld2lzZS4KCShmaW5zaF9mdW5jdGlvbik6IExpa2V3aXNlLgoJKiBmcmllbmQuYyAoZG9fZnJpZW5kKTogTGlrZXdpc2UuCgkqIHR5cGVjay5jIChidWlsZF9mdW5jdGlvbl9jYWxsX3JlYWwpOiBMaWtld2lzZS4KCShidWlsZF91bmFyeV9vcCk6IExpa2V3aXNlLgoKV2VkIE1heSAyMCAwMjoxNjowMSAxOTk4ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBkZWNsMi5jIChzdGFydF9vYmplY3RzLCBmaW5pc2hfb2JqZWN0cywgZG9fZHRvcnMsCglkb19jdG9ycyk6IFNwbGl0IG91dCBmcm9tLi4uCgkoZmluaXNoX2ZpbGUpOiAuLi5oZXJlLgoKVHVlIE1heSAxOSAyMDozNjoyMyAxOTk4ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiB0cmVlLmMgKGlzX292ZXJsb2FkZWRfZm4pOiBEb24ndCBhYm9ydCBvbiBwbGFjZWhvbGRlcnMgZnJvbQoJcHVzaF9jbGFzc19kZWNscy4KClR1ZSBNYXkgMTkgMTU6MTY6MjIgMTk5OCAgQnJlbmRhbiBLZWhvZSAgPGJyZW5kYW5AY3lnbnVzLmNvbT4KCgkqIGNsYXNzLmMgKGlzX2VtcHR5X2NsYXNzKTogUmV0dXJuIDAgaWYgVFlQRSBpcyBhbiBlcnJvcl9tYXJrX25vZGUuCgoJKiBlcnJvci5jIChkdW1wX2V4cHIpOiBIYW5kbGUgYW4gQVJST1dfRVhQUi4KClR1ZSBNYXkgMTkgMTU6MTM6MzkgMTk5OCAgTWFyayBNaXRjaGVsbCAgPG1taXRjaGVsbEB1c2EubmV0PgoKCSogZGVjbC5jIChzYXZlYWJsZV9vYnN0YWNrKTogRGVjbGFyZS4KCShwdXNoZGVjbCk6IENvcHkgVFlQRV9ERUNMcyB0byB0aGUgc2FtZSBvYnN0YWNrIGFzIHRoZSB0eXBlIHRoZXkKCWRlY2xhcmUsIGlmIG5lY2Vzc2FyeS4KClR1ZSBNYXkgMTkgMTQ6NTA6MjcgMTk5OCAgTWFyayBNaXRjaGVsbCAgPG1taXRjaGVsbEB1c2EubmV0PgoKCSogY2FsbC5jIChjb21wYXJlX3F1YWwpOiBSZW1vdmUuCgkoaXNfc3Vic2VxKTogVHdlYWsuCgkoaXNfcHJvcGVybHlfZGVyaXZlZF9mcm9tKTogTmV3IGZ1bmN0aW9uLgoJKG1heWJlX2hhbmRsZV9yZWZfYmluZCk6IExpa2V3aXNlLgoJKG1heWJlX2hhbmRsZV9pbXBsaWNpdF9vYmplY3QpOiBMaWtld2lzZS4KCShjb21wYXJlX2ljcyk6IE1vZGlmeSBzdWJzdGFudGlhbGx5IHRvIGJyaW5nIGludG8gY29uZm9ybWFuY2Ugd2l0aAoJdGhlIHN0YW5kYXJkLgoJKiBjcC10cmVlLmggKFRZUEVfUFRSTUVNRlVOQ19PQkpFQ1RfVFlQRSk6IE5ldyBtYWNyby4KCShjb21wX2N2X3F1YWxpZmljYXRpb24pOiBEZWNsYXJlLgoJKGNvbXBfY3ZfcXVhbF9zaWduYXR1cmUpOiBMaWtld2lzZS4KCSogdHlwZWNrLmMgKGNvbXBfY3ZfcXVhbGlmaWNhdGlvbik6IExpa2V3aXNlLgoJKGNvbXBfY3ZfcXVhbF9zaWduYXR1cmUpOiBMaWtld2lzZS4KClR1ZSBNYXkgMTkgMTA6MDU6MDIgMTk5OCAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogTWFrZWZpbGUuaW4gKHBhcnNlLm8pOiBEZXBlbmQgb24gdG9wbGV2LmguCgoJKiBjbGFzcy5jICh0eXBlY29kZV9wKTogUmVtb3ZlIHByb3RvdHlwZSBhbmQgZGVmaW5pdGlvbi4KCgkqIGNwLXRyZWUuaCAoY3VycmVudGx5X29wZW5fY2xhc3MsIGlzX2VtcHR5X2NsYXNzLCBtZW1iZXJfcCk6CglBZGQgcHJvdG90eXBlLgoKCSogZGVjbC5jIChwdXNoX292ZXJsb2FkZWRfZGVjbF90b3BfbGV2ZWwpOiBSZW1vdmUgcHJvdG90eXBlIGFuZAoJZGVmaW5pdGlvbi4KCgkqIGVycmZuLmMgKGNwX2Vycm9yKTogQ2FzdCBmdW5jdGlvbiBwb2ludGVyIGBlcnJvcicgdG8gKGVycm9yZm4gKikKIAlpbiBjYWxsIHRvIGBjcF90aGluZycuCgkoY3Bfd2FybmluZyk6IExpa2V3aXNlIGZvciBmdW5jdGlvbiBwb2ludGVyIGB3YXJuaW5nJy4KCgkqIGV4Y2VwdC5jIChkb19mdW5jdGlvbl9jYWxsKTogUmVtb3ZlIHByb3RvdHlwZSBhbmQgZGVmaW5pdGlvbi4KCShjYWxsX2VoX2luZm8pOiBXcmFwIHZhcmlhYmxlIGB0MScgaW4gbWFjcm8gTkVXX0VIX01PREVMLgoKCSogbWV0aG9kLmMgKGlzX2phdmFfdHlwZSk6IEFkZCBwcm90b3R5cGUgYW5kIG1ha2UgaXQgc3RhdGljLgoKCSogcGFyc2UueTogSW5jbHVkZSB0b3BsZXYuaC4KCgkqIHB0LmMgKHR5cGVfdW5pZmljYXRpb24pOiBSZW1vdmUgdW51c2VkIHZhcmlhYmxlIGBhcmcnLgoJKGluc3RhbnRpYXRlX2RlY2wpOiBsaWtld2lzZSBmb3IgYHNhdmVfdGknLgoKCSogdHJlZS5jIChwcm9wYWdhdGVfYmluZm9fb2Zmc2V0cyk6IExpa2V3aXNlIGZvciBgYmFzZV9iaW5mb3MnLgoJClR1ZSBNYXkgMTkgMDI6NDM6MjUgMTk5OCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogaW5pdC5jIChidWlsZF9tZW1iZXJfY2FsbCk6IEhhbmRsZSB0ZW1wbGF0ZV9pZHMuCgkqIHBhcnNlLnkgKHByaW1hcnkpOiBBZGQgZ2xvYmFsX3Njb3BlIHRlbXBsYXRlX2lkLgoKTW9uIE1heSAxOCAyMzoyMjo1MiAxOTk4ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBkZWNsMi5jIChnZXRfc2VudHJ5KTogVXNlIGVuZF90ZW1wb3JhcnlfYWxsb2NhdGlvbi4KCURvbid0IGRlY2xhcmUgcGVybWFuZW50X29ic3RhY2suCgpNb24gTWF5IDE4IDEyOjI4OjQ0IDE5OTggIE1hcmsgTWl0Y2hlbGwgIDxtbWl0Y2hlbGxAdXNhLm5ldD4KCgkqIHBhcnNlLnkgKC5maW5pc2hfbmV3X3BsYWNlbWVudCk6IE5ldyBub24tdGVybWluYWwuCgkodW5hcnlfZXhwciwgbmV3X3R5cGVfaWQpOiBVc2UgaXQuICAKCSogcGFyc2UuYzogUmVnZW5lcmF0ZWQuCgkKTW9uIE1heSAxOCAxMjoyMDoyNyAxOTk4ICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBjeWdudXMuY29tPgoKCSogcHQuYyAocmVkZWNsYXJlX2NsYXNzX3RlbXBsYXRlKTogU2F5IHdoZXJlIHRoZSBvcmlnaW5hbCBkZWZpbml0aW9uCglvZiB0aGUgdGVtcGxhdGUtcGFyYW1ldGVyJ3MgZGVmYXVsdCBhcmd1bWVudCBhcHBlYXJlZC4KCk1vbiBNYXkgMTggMDM6MDA6NTcgMTk5OCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY2FsbC5jIChidWlsZF9vdmVyX2NhbGwpOiBUd2VhayBlbXB0eSBjbGFzcyBoYW5kbGluZy4KCgkqIGRlY2wuYyAobWFrZV90eXBlbmFtZV90eXBlKTogVXNlIGN1cnJlbnRseV9vcGVuX2NsYXNzLgoKCSogY2xhc3MuYyAoaW5zdGFudGlhdGVfdHlwZSk6IERvbid0IGFib3J0IG9uIFRSRUVfTk9OTE9DQUxfRkxBRy4KCk1vbiBNYXkgMTggMDE6NDM6MDEgMTk5OCAgTWFydGluIHYuIExvZXdpcyAgPGxvZXdpc0BpbmZvcm1hdGlrLmh1LWJlcmxpbi5kZT4KCgkqIGRlY2wuYyAobG9va3VwX25hbWVfcmVhbCk6IERvbid0IGxvb2sgYXQgSURFTlRJRklFUl9MT0NBTF9WQUxVRSAKCWZvciBhIHR5cGUgdW5sZXNzIGl0IGlzIG9uZS4KCgkqIGNsYXNzLmMgKGZpbmlzaF9zdHJ1Y3RfMSk6IFVzZSBPVkxfQ1VSUkVOVCBpbiBlcnJvciBtZXNzYWdlLgoKTW9uIE1heSAxOCAwMToyNDowOCAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBNYWtlZmlsZS5pbiAocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSwgb2JqZGlyKTogRGVmaW5lLgoKCSogTWFrZWZpbGUuaW4gKEJJU09OKTogVXNlIGJpc29uIGZyb20gdGhlIGJ1aWxkIHRyZWUgaWYgaXQgZXhpc3RzLgoJKEZMRVgpOiBTaW1pbGFybHkuCgpTdW4gTWF5IDE3IDE0OjUyOjA4IDE5OTggIE1hcnRpbiB2LiBMb2V3aXMgIDxsb2V3aXNAaW5mb3JtYXRpay5odS1iZXJsaW4uZGU+CgoJKiB0eXBlY2suYyAodHlwZV91bmtub3duX3ApOiBSZXR1cm4gdHJ1ZSBmb3IgVFJFRV9MSVNUIGFsc28uCgoJKiBjYWxsLmMgKGJ1aWxkX21ldGhvZF9jYWxsKTogVXNlIFRZUEVfTUFJTl9WQVJJQU5UIG9uIHR5cGVkZWZzLgoKU3VuIE1heSAxNyAxNDo1MTo0MSAxOTk4ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjYWxsLmMgKGJ1aWxkX3Njb3BlZF9tZXRob2RfY2FsbCk6IExpa2V3aXNlLgoKU3VuIE1heSAxNyAxMzo1Mzo0OCAxOTk4ICBNYXJrIE1pdGNoZWxsICA8bW1pdGNoZWxsQHVzYS5uZXQ+CgoJKiBpbml0LmMgKGJ1aWxkX25ld18xKTogQ2FsbCBzdXNwZW5kX21vbWVudGFyeSBhcm91bmQgdGhlIGNyZWF0aW9uCglvZiB2YWx1ZXMgdGhhdCBtdXN0IGJlIHNhdmVkIGZvciBleGNlcHRpb24gaGFuZGxpbmcuCgkqIHBhcnNlLnkgKC5idWlsZF9uZXdfcGxhY2VtZW50KTogTmV3IG5vbi10ZXJtaW5hbC4KCSh1bmFyeV9leHByLCBuZXdfcGxhY2VtZW50KTogVXNlIGl0LgoJKiBwYXJzZS5jOiBSZWdlbmVyYXRlZC4KCQpTdW4gTWF5IDE3IDEyOjMyOjA4IDE5OTggIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAoZHVwbGljYXRlX2RlY2xzKTogVXNlIENBTk9OSUNBTF9UWVBFX1ZBUklBTlQgdG8gY29tcGFyZQoJb2xkIGFuZCBuZXcgdHlwZXMuCgoJKiBwdC5jICh0c3Vic3QpOiBNYWtlIHN1cmUgdGhhdCBCSU5GT19UWVBFIG9mIG5ldyBiaW5mb3MgaXMgdGhlCgljYW5vbmljYWwgdHlwZS4KCgkqIGNhbGwuYyAoYnVpbGRfb3Zlcl9jYWxsKTogRG9uJ3QgdXNlIElTX1NJR05BVFVSRSBvbiBhIG5hbWVzcGFjZS4KCkZyaSBNYXkgMTUgMjA6Mjg6MDAgMTk5OCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZGVjbC5jIChzdGFydF9kZWNsKTogUmV2ZXJ0IHByb2JsZW0gY2hhbmdlLgoKCSogTWFrZWZpbGUuaW4gKENPTkZMSUNUUyk6IEZpeC4KCkZyaSBNYXkgMTUgMTU6MzQ6MDIgMTk5OCAgQmVuamFtaW4gS29zbmlrICA8YmtvekByaGluby5jeWdudXMuY29tPgoKICAgICAgICAqIGRlY2wuYyAoZHVwbGljYXRlX2RlY2xzKTogQ2xlYW4gdXAsIGFkZCBERUNMX0RBVEFfQVJFQSBiaXRzLgoKRnJpIE1heSAxNSAwMDo0NjowNSAxOTk4ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjbGFzcy5jIChmaW5pc2hfc3RydWN0XzEpOiBVc2UgQklORk9fU0laRS4KCgkqIGRlY2wuYyAoc3RhcnRfZGVjbCk6IFVzZSAndGVtJy4KClRodSBNYXkgMTQgMTY6MzA6NDcgRURUIDE5OTggIEFuZHJldyBNYWNMZW9kICA8YW1hY2xlb2RAY3lnbnVzLmNvbT4KCgkqIGV4Y2VwdGlvbi5jYzogSW5jbHVkZSBlaC1jb21tb24uaC4KCShzdHJ1Y3QgY3BfZWhfaW5mbyk6IGFkZCBlaF9pbmZvIHN0cnVjdCB3aXRoIE5FV19FSF9NT0RFTC4KCShfX2NwbHVzX3R5cGVfbWF0Y2hlcik6IEZpcnN0IHN0YWIgYXQgbmV3IEMrKyBydW50aW1lIHR5cGUgbWF0Y2hlci4KCShfX2NwX3B1c2hfZXhjZXB0aW9uKTogSW5pdGlhbGl6ZSBlaF9pbmZvIHN0cnVjdCBhcyB3ZWxsLgoJKiBleGNlcHQuYzogUmVtb3ZlIGxvY2FsIHN0cnVjdHMgYW5kIGluY2x1ZGUgZWgtY29tbW9uLmguCgkoaW5pdF9leGNlcHRpb25fcHJvY2Vzc2luZyk6IFNldCBsYW5ndWFnZSBhbmQgdmVyc2lvbiBjb2Rlcy4KCShjYWxsX2VoX2luZm8pOiBhZGQgcHJlc2VuY2Ugb2YgZWhfaW5mbyB0byBydW50aW1lIGRlc2NyaXB0aW9uIG9mIAoJc3RydWN0IGNwX2VoX2luZm8uCgkoZXhwYW5kX2VuZF9laF9zcGVjKTogY2FsbCBzdGFydF9jYXRjaF9ibG9jaygpIGFuZCBlbmRfY2F0Y2hfYmxvY2soKS4KCSogc2VtYW50aWNzLmMgKGZpbmlzaF90cnlfYmxvY2spOiBjYWxsIHN0YXJ0X2NhdGNoX2Jsb2NrKCkgYW5kIAoJZW5kX2NhdGNoX2Jsb2NrKCkuCgkqIHBhcnNlLnkgKGZ1bmN0aW9uX3RyeV9ibG9jayk6IGNhbGwgc3RhcnRfY2F0Y2hfYmxvY2soKSBhbmQgCgllbmRfY2F0Y2hfYmxvY2soKS4KClRodSBNYXkgMTQgMTI6Mjc6MzQgMTk5OCAgQnJlbmRhbiBLZWhvZSAgPGJyZW5kYW5AY3lnbnVzLmNvbT4KCgkqIHR5cGVjay5jIChvcmlnaW5hbF90eXBlKTogTmV3IGZ1bmN0aW9uLgoJKGNvbW1vbl90eXBlKTogVXNlIGl0IHRvIGdldCB0aGUgREVDTF9PUklHSU5BTF9UWVBFIGZvciBUMSBhbmQgVDIsCgl0byBzZWUgaWYgdGhleSdyZSBhY3R1YWxseSB0aGUgc2FtZS4KCSogY3AtdHJlZS5oIChvcmlnaW5hbF90eXBlKTogRGVjbGFyZS4KCldlZCBNYXkgMTMgMTI6NTQ6MzAgMTk5OCAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogTWFrZWZpbGUuaW4gKGxleC5vKTogRGVwZW5kIG9uIG91dHB1dC5oLgoJCgkqIGNhbGwuYyAoYWRkX2Z1bmN0aW9uX2NhbmRpZGF0ZSk6IFJlbW92ZSB1bnVzZWQgdmFyaWFibGUgYGNhbmQnLgoJKGFkZF9jb252X2NhbmRpZGF0ZSk6IExpa2V3aXNlLgoJKGJ1aWxkX2J1aWx0aW5fY2FuZGlkYXRlKTogTGlrZXdpc2UuCgkKCSogY3AtdHJlZS5oOiBBZGQgcHJvdG90eXBlIGZvciBgdHlwZXNfb3ZlcmxhcF9wJy4KCgkqIGRlY2wuYyAoc2lnbmFsX2NhdGNoKTogTWFyayBwYXJhbWV0ZXIgYHNpZycgd2l0aCBBVFRSSUJVVEVfVU5VU0VELgoKCSogZGVjbDIuYyAobWVyZ2VfZnVuY3Rpb25zKTogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZXMgYHRtcCcgYW5kCglgdGVtcG4nLgoKCSogZXJyb3IuYyAoZXhwcl9hc19zdHJpbmcpOiBNYXJrIHBhcmFtZXRlciBgdicgd2l0aCBBVFRSSUJVVEVfVU5VU0VELgoJKGNvZGVfYXNfc3RyaW5nKTogTGlrZXdpc2UuCgkobGFuZ3VhZ2VfYXNfc3RyaW5nKTogTGlrZXdpc2UuCgkocGFybV9hc19zdHJpbmcpOiBMaWtld2lzZS4KCShvcF9hc19zdHJpbmcpOiBMaWtld2lzZS4KCShhc3NvcF9hc19zdHJpbmcpOiBMaWtld2lzZS4KCShjdl9hc19zdHJpbmcpOiBMaWtld2lzZS4KCgkqIGxleC5jOiBJbmNsdWRlIG91dHB1dC5oLgoKCSogcHQuYyAodHlwZV91bmlmaWNhdGlvbik6IENhc3QgZmlyc3QgYXJndW1lbnQgb2YgYGJ6ZXJvJyB0byBhIGNoYXIqLgoKCSogc2VhcmNoLmMgKGRmc19ub19vdmVybGFwX3lldCk6IE1hcmsgcGFyYW1ldGVyIGB0JyB3aXRoCglBVFRSSUJVVEVfVU5VU0VELgoKCSogdGluZm8uY2MgKF9fY2xhc3NfdHlwZV9pbmZvOjpkY2FzdCk6IENoYW5nZSB0aGUgdHlwZSBvZiB2YXJpYWJsZQoJYGknIGZyb20gaW50IHRvIHNpemVfdC4KCgkqIHR5cGVjay5jIChsYW5ndWFnZV9sdmFsdWVfdmFsaWQpOiBNYXJrIHBhcmFtZXRlciBgZXhwJyB3aXRoCglBVFRSSUJVVEVfVU5VU0VELgoKVHVlIE1heSAxMiAyMTozNzo0OSAxOTk4ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBlcnJvci5jIChkdW1wX3NpbXBsZV9kZWNsKTogVXNlIERFQ0xfQ0xBU1NfU0NPUEVfUCBhbmQvb3IKCURFQ0xfTkFNRVNQQUNFX1NDT1BFX1AuCgkobGFuZ19kZWNsX25hbWUpOiBMaWtld2lzZS4KCSogcHQuYyAodHN1YnN0X2ZyaWVuZF9mdW5jdGlvbiwgdHN1YnN0KTogTGlrZXdpc2UuCgkqIGRlY2wuYyAocHVzaGRlY2wsIHJlZGVjbGFyYXRpb25fZXJyb3JfbWVzc2FnZSwgc3RhcnRfZGVjbCwgCgljcF9maW5pc2hfZGVjbCwgc3RhcnRfZnVuY3Rpb24pOiBMaWtld2lzZS4KCSogY2xhc3MuYyAoZmluaXNoX3N0cnVjdF8xKTogTGlrZXdpc2UuCgkqIGNhbGwuYyAoYnVpbGRfb3Zlcl9jYWxsKTogTGlrZXdpc2UuCgkoY29tcGFyZV9pY3MpOiBVc2UgREVSSVZFRF9GUk9NX1AuCgpUdWUgTWF5IDEyIDA3OjI0OjE4IDE5OTggIE1hcmsgTWl0Y2hlbGwgIDxtbWl0Y2hlbGxAdXNhLm5ldD4KCgkqIGNwLXRyZWUuaCAoQ0FOT05JQ0FMX1RZUEVfVkFSSUFOVCk6IE5ldyBtYWNyby4KCSogbWV0aG9kLmMgKGJ1aWxkX21hbmdsZWRfbmFtZSk6IFVzZSBpdC4KCShidWlsZF9kZWNsX292ZXJsb2FkX3JlYWwpOiBMaWtld2lzZS4KCgkqIGVycm9yLmMgKGR1bXBfc2ltcGxlX2RlY2wpOiBOZXcgZnVuY3Rpb24sIGJyb2tlbiBvdXQgZnJvbSAuLi4KCShkdW1wX2RlY2wpOiBVc2UgaXQuCgpNb24gTWF5IDExIDExOjM4OjA3IDE5OTggIE1hcmsgTWl0Y2hlbGwgIDxtbWl0Y2hlbGxAdXNhLm5ldD4KCgkqIHB0cmVlLmMgKGxhbmdfcHJpbnRfeG5vZGUpOiBBZGQgbWlzc2luZyBgYnJlYWsnLgoKCSogcHQuYyAodHN1YnN0KTogUmVtb3ZlIGR1cGxpY2F0ZSBjaGVjayBmb3IgSURFTlRJRklFUl9OT0RFLgoKCSogY2FsbC5jIChhZGRfdGVtcGxhdGVfY2FuZGlkYXRlKTogQWRqdXN0IGZvciBjaGFuZ2VzIHRvCglmbl90eXBlX3VuaWZpY2F0aW9uLiAKCShhZGRfdGVtcGxhdGVfY2FuZGlkYXRlX3JlYWwpOiBMaWtld2lzZS4KCShhZGRfdGVtcGxhdGVfY29udl9jYW5kaWRhdGUpOiBMaWtld2lzZS4KCShidWlsZF91c2VyX3R5cGVfY29udmVyc2lvbl8xKTogTGlrZXdpc2UuCgkoYnVpbGRfbmV3X2Z1bmN0aW9uX2NhbGwpOiBMaWtld2lzZS4KCShidWlsZF9vYmplY3RfY2FsbCk6IExpa2V3aXNlLgoJKGJ1aWxkX25ld19vcCk6IExpa2V3aXNlLgoJKGJ1aWxkX25ld19tZXRob2RfY2FsbCk6IExpa2V3aXNlLgoJKiBjbGFzcy5jIChpbnN0YW50aWF0ZV90eXBlKTogTGlrZXdpc2UuCgkqIGNwLXRyZWUuaCAodW5pZmljYXRpb25fa2luZF90KTogTmV3IHR5cGUuCgkoZm5fdHlwZV91bmlmaWNhdGlvbik6IEFkanVzdCBwcm90b3R5cGUuCgkodHlwZV91bmlmaWNhaXRvbik6IExpa2V3aXNlLgoJKiBwdC5jIChVTklGWV9BTExPV19OT05FKTogTmV3IG1hY3JvLgoJKFVOSUZZX0FMTE9XX01PUkVfQ1ZfUVVBTCk6IExpa2V3aXNlLgoJKFVOSUZZX0FMTE9XX0xFU1NfQ1ZfUVVBTCk6IExpa2V3aXNlLgoJKFVOSUZZX0FMTE9XX0RFUklWRUQpOiBMaWtld2lzZS4KCSh1bmlmeSk6IENoYW5nZSBwcm90b3R5cGUuCgkobWF5YmVfYWRqdXN0X3R5cGVzX2Zvcl9kZWR1Y3Rpb24pOiBOZXcgZnVuY3Rpb24uCgkoY2hlY2tfY3ZfcXVhbHNfZm9yX3VuaWZ5KTogTGlrZXdpc2UuCgkoZGV0ZXJtaW5lX3NwZWNpYWxpemF0aW9uKTogQWRqdXN0LgoJKGZuX3R5cGVfdW5pZmljYXRpb24pOiBMaWtld2lzZS4KCSh0eXBlX3VuaWZpY2F0aW9uKTogTGlrZXdpc2UuCgkodHlwZV91bmlmaWNhdGlvbl9yZWFsKTogTGlrZXdpc2UuICBVc2UKCW1heWJlX2FkanVzdF90eXBlc19mb3JfZGVkdWN0aW9uLiAgRml4IG1pc2hhbmRsaW5nIG9mCgliYWNrLXVuaWZpY2F0aW9uIG9mIHRlbXBsYXRlIGZ1bmN0aW9ucyBwYXNzZWQgYXMgYXJndW1lbnRzLiAgUGFzcwoJYXBwcm9wcmlhdGUgY29tYmluYXRpb24gb2YgVU5JRllfQUxMT1dfKiB0byB1bmlmeS4KCSh1bmlmeSk6IFJlbW92ZSB1bnVzZWQgTlRQQVJNUyBwYXJhbWV0ZXIuICBVc2UKCWNoZWNrX2N2X3F1YWxzX2Zvcl91bmlmeS4gIFJlbW92ZSBib2d1cyBjb2RlIHRoYXQgYWxsb3dlZAoJdG9vLWdlbmVyb3VzIHVuaWZpY2F0aW9uIGluIG9yZGVyIHRvIGFkaGVyZSBtb3JlIGNsb3NlbHkgdG8gc3RhbmRhcmQuCgkoZ2V0X2JpbmRpbmdzX3JlYWwpOiBBZGp1c3QuCgkoZ2V0X2NsYXNzX2JpbmRpbmdzKTogTGlrZXdpc2UuCgoJKiBtZXRob2QuYyAoYnVpbGRfb3ZlcmxvYWRfaWRlbnRpZmllcik6IE9ubHkgdXNlIHRoZSBpbm5lcm1vc3QKCXRlbXBsYXRlIGFyZ3VtZW50cyB3aGVuIG1hbmdsaW5nLgoJKiBwdC5jICh0c3Vic3RfdGVtcGxhdGVfYXJndW1lbnRfdmVjdG9yKTogTmV3IGZ1bmN0aW9uLgoJKGNvbXBsZXRlX3RlbXBsYXRlX2FyZ3MpOiBEZWFsIHdpdGggdGhlIHNpdHVhdGlvbiB3aGVyZSB0aGUKCWV4dHJhX2FyZ3MgY29udGFpbiBtb3JlIHRoYW4gb25lIGxldmVsIG9mIGFyZ3VtZW50cy4KCShsb29rdXBfdGVtcGxhdGVfY2xhc3MpOiBEZWFsIHdpdGggbWVtYmVyIHRlbXBsYXRlIGNsYXNzZXMsIHdoaWNoCgltYXkgaGF2ZSBtb3JlIHRoYW4gb25lIGxldmVsIG9mIGFyZ3VtZW50cy4KCSh0c3Vic3QpOiBEb24ndCB0c2J1c3QgaW50byB0aGUgVFJFRV9UWVBFIG9mIGFuIElERU5USUZJRVJfTk9ERS4KCUltcHJvdmUgaGFuZGxpbmcgb2YgbWVtYmVyIHRlbXBsYXRlIGNsYXNzZXMuICBVc2UKCURFQ0xfUFJJTUFSWV9URU1QTEFURSBpbnN0ZWFkIG9mIGlubGluZSBleHBhbnNpb24uICBVc2UKCXRzdWJzdF90ZW1wbGF0ZV9hcmd1bWVudF92ZWN0b3Igd2hlcmUgYXBwcm9wcmlhdGUuCgkocmVnZW5lcmF0ZV9kZWNsX2Zyb21fdGVtcGxhdGUpOiBCcmVhayBvdXQgZnJvbSAuLi4KCShpbnN0YW50aWF0ZV9kZWNsKTogSGVyZS4KCQoJKiBsZXguYyAoeXlwcmludCk6IFJlbW92ZSBUWVBFTkFNRV9FTExJUFNJUy4KCSogcGFyc2UuaDogUmVnZW5lcmF0ZWQuCgkqIHBhcnNlLmM6IFJlYWxseSByZWdlbmVyYXRlZC4KCQoJKiBjcC10cmVlLmggKGZpbmlzaF91bmFyeV9vcF9leHByKTogTmV3IGZ1bmN0aW9uLgoJKGZpbmlzaF9pZF9leHByKTogTGlrZXdpc2UuCgkoYmVnaW5fbmV3X3BsYWNlbWVudCk6IExpa2V3aXNlLgoJKGZpbmlzaF9uZXdfcGxhY2VtZW50KTogTGlrZXdpc2UuCgkoZmluaXNoX2RlY2xhcmF0b3IpOiBMaWtld2lzZS4KCShmaW5pc2hfdHJhbnNsYXRpb25fdW5pdCk6IExpa2V3aXNlLgoJKGZpbmlzaF9wYXJtbGlzdCk6IExpa2V3aXNlLgoJKGJlZ2luX2NsYXNzX2RlZmluaXRpb24pOiBMaWtld2lzZS4KCShmaW5pc2hfY2xhc3NfZGVmaW5pdGlvbik6IExpa2V3aXNlLgoJKGZpbmlzaF9kZWZhdWx0X2FyZ3MpOiBMaWtld2lzZS4KCShmaW5pc2hfaW5saW5lX2RlZmluaXRpb25zKTogTGlrZXdpc2UuCgkqIHBhcnNlLnkgKEdDQ19BU01fS0VZV09SRCk6IFJlbW92ZS4KCShUWVBFTkFNRV9FTExJUFNJUyk6IExpa2V3aXNlLgoJKiBwYXJzZS5jOiBSZWdlbmVyYXRlZC4KCVVzZSBuZXcgZnVuY3Rpb25zIGluIHNlbWFudGljcy5jIGluIHRoZSBhY3Rpb25zIGZvciBtYW55IHJ1bGVzLgoJKiBneHguZ3BlcmYgKEdDQ19BU01fS0VZV09SRCk6IEp1c3QgdXNlIEFTTV9LRVlXT1JELgoJKiBoYXNoLmg6IFJlZ2VuZXJhdGVkLgoJKiBzZW1hbnRpY3MuYyAoZmluaXNoX2V4cHJfc3RtdCk6IEFsbG93IE5VTEwgZXhwci4KCShmaW5pc2hfdW5hcnlfb3BfZXhwcik6IE5ldyBmdW5jdGlvbiwgY29udGFpbmluZwoJY29kZSBwcmV2aW91c2x5IGluIHBhcnNlLnkuCgkoZmluaXNoX2lkX2V4cHIpOiBMaWtld2lzZS4KCShiZWdpbl9uZXdfcGxhY2VtZW50KTogTGlrZXdpc2UuCgkoZmluaXNoX25ld19wbGFjZW1lbnQpOiBMaWtld2lzZS4KCShmaW5pc2hfZGVjbGFyYXRvcik6IExpa2V3aXNlLgoJKGZpbmlzaF90cmFuc2xhdGlvbl91bml0KTogTGlrZXdpc2UuCgkoZmluaXNoX3Bhcm1saXN0KTogTGlrZXdpc2UuCgkoYmVnaW5fY2xhc3NfZGVmaW5pdGlvbik6IExpa2V3aXNlLgoJKGZpbmlzaF9jbGFzc19kZWZpbml0aW9uKTogTGlrZXdpc2UuCgkoZmluaXNoX2RlZmF1bHRfYXJncyk6IExpa2V3aXNlLgoJKGZpbmlzaF9pbmxpbmVfZGVmaW5pdGlvbnMpOiBMaWtld2lzZS4KClN1biBNYXkgMTAgMjM6NDM6MTMgMTk5OCAgTWFyayBNaXRjaGVsbCAgPG1taXRjaGVsbEB1c2EubmV0PgoKCSogdHlwZWNrLmMgKGJ1aWxkX2NfY2FzdCk6IERvbid0IGRlY2F5IGFycmF5cyBhbmQgZnVuY3Rpb25zIHRvCglwb2ludGVyIHR5cGUgd2hlbiBjb252ZXJ0aW5nIHRvIGEgY2xhc3MgdHlwZS4KClN1biBNYXkgMTAgMjI6NTM6NTYgMTk5OCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY3AtdHJlZS5oIChERUNMX05BTUVTUEFDRV9TQ09QRV9QKTogTmV3IG1hY3JvLgoJKERFQ0xfQ0xBU1NfU0NPUEVfUCk6IExpa2V3aXNlLgoKU3VuIE1heSAxMCAyMjo0ODoyMiAxOTk4ICBILkouIEx1ICAoaGpsQGdudS5vcmcpCgoJKiBjbGFzcy5jIChmaW5pc2hfc3RydWN0XzEpOiBVc2UgT1ZMX0NVUlJFTlQgb24gVFJFRV9WRUNfRUxULgoJKiBkZWNsMi5jIChjb25zdHJ1Y3Rvcl9uYW1lX2Z1bGwpOiBMaWtld2lzZS4KClN1biBNYXkgMTAgMjI6NDg6MTIgMTk5OCAgTWlrZSBTdHVtcCAgPG1yc0B3cnMuY29tPgoKCSogdHJlZS5jIChtYXBjYXIpOiBBZGQgT1ZFUkxPQUQgc3VwcG9ydC4KCgkqIGluaXQuYyAocmVzb2x2ZV9vZmZzZXRfcmVmKTogV2UgbXVzdCB1c2UgYmFzZXR5cGVfcGF0aCBiZWZvcmUgd2UKCWRlc3Ryb3kgaXQgd2l0aCBhIGNhbGwgdG8gY29udmVydF9wb2ludGVyX3RvLgoKU2F0IE1heSAgOSAxNDo0NDozNyAxOTk4ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjbGFzcy5jIChjdXJyZW50bHlfb3Blbl9jbGFzcyk6IE5ldyBmbi4KCSogZGVjbC5jIChsb29rdXBfbmFtZV9yZWFsKTogVXNlIGl0LgoJKiBzZWFyY2guYyAobG9va3VwX2ZpZWxkKTogTGlrZXdpc2UuCgpGcmkgTWF5ICA4IDIzOjMyOjQyIDE5OTggIE1hcnRpbiB2b24gTG9ld2lzICA8bG9ld2lzQGluZm9ybWF0aWsuaHUtYmVybGluLmRlPgoKCSogY3AtdHJlZS5kZWYgKE9WRVJMT0FEKTogTmV3IG5vZGUuICAKCSogY3AtdHJlZS5oIChCSU5ESU5HX1RZUEUsIFNFVF9JREVOVElGSUVSX0dMT0JBTF9WQUxVRSwKCVNFVF9JREVOVElGSUVSX05BTUVTUEFDRV9WQUxVRSk6IERlZmluZS4KCShOQU1FU1BBQ0VfQklORElORyk6IFJlbW92ZS4KCShJREVOVElGSUVSX0dMT0JBTF9WQUxVRSwgSURFTlRJRklFUl9OQU1FU1BBQ0VfVkFMVUUpOiBVc2UKCW5hbWVzcGFjZV9iaW5kaW5nLgoJKE9WTF9GVU5DVElPTiwgT1ZMX0NIQUlOLCBPVkxfQ1VSUkVOVCwgT1ZMX05FWFQsIE9WTF9VU0VEKToKCURlZmluZS4KCSh0cmVlX292ZXJsb2FkKTogTmV3IHN0cnVjdC4KCShJREVOVElGSUVSX1RZUEVfVkFMVUUpOiBVc2UgaWRlbnRpZmllcl90eXBlX3ZhbHVlLgoJKFJFQUxfSURFTlRJRklFUl9UWVBFX1ZBTFVFKTogRGVmaW5lLgoJKElERU5USUZJRVJfSEFTX1RZUEVfVkFMVUUpOiBVc2UgSURFTlRJRklFUl9UWVBFX1ZBTFVFLgoJKGxhbmdfZGVjbF9mbGFncyk6IFJlbW92ZSBpbl9uYW1lc3BhY2UuCgkobGFuZ19kZWNsKTogUmVtb3ZlIGNoYWluLgoJKERFQ0xfQ0hBSU4sIERFQ0xfTkFNRVNQQUNFKTogUmVtb3ZlLgoJKGZsYWdfaG9ub3Jfc3RkKTogRGVjbGFyZSBleHRlcm4uCgkoaWRlbnRpZmllcl90eXBlX3ZhbHVlLCBwdXNoZGVjbF9uYW1lc3BhY2VfbGV2ZWwsIHB1c2hfdXNpbmdfZGVjbCwKCW5hbWVzcGFjZV9iaW5kaW5nLCBzZXRfbmFtZXNwYWNlX2JpbmRpbmcsCglsb29rdXBfZnVuY3Rpb25fbm9uY2xhc3MsIGNhdF9uYW1lc3BhY2VfbGV2ZWxzLAoJc2V0X2RlY2xfbmFtZXNwYWNlLCBsb29rdXBfYXJnX2RlcGVuZGVudCwgYmluZGluZ19pbml0LCBvdmxfY29ucywKCXNjcmF0Y2hfb3ZsX2NvbnMsIG92bF9tZW1iZXIsIGJ1aWxkX292ZXJsb2FkKTogRGVjbGFyZS4KCShkZWNsX2xpc3RfbGVuZ3RoLCBnZXRfbmFtZXNwYWNlX2lkLCBjdXJyZW50X25hbWVzcGFjZV9pZCwKCW92ZXJsb2FkZWRfZ2xvYmFsc19wKTogUmVtb3ZlLgoJKGxvb2t1cF91c2luZ19uYW1lc3BhY2UsIHF1YWxpZmllZF9sb29rdXBfdXNpbmdfbmFtZXNwYWNlKTogQ2hhbmdlCglyZXR1cm4gdHlwZS4KCShwdXNoX3NjcmF0Y2hfb2JzdGFjayk6IE5ldyBtYWNyby4KCSogY2FsbC5jIChhZGRfZnVuY3Rpb25fY2FuZGlkYXRlKTogU3BlY2lhbC1jYXNlIHR5cGUgb2YgT1ZFUkxPQUQgbm9kZS4KCShidWlsZF91c2VyX2NvbnZlcnNpb25zXzEpOiBJdGVyYXRlIHVzaW5nIE9WTF9ORVhUIGZvciBjdG9ycywKCWNvbnZzLCBmbnMuCgkoYnVpbGRfbmV3X2Z1bmN0aW9uX2NhbGwpOiBJdGVyYXRlIHVzaW5nIE9WTF9DSEFJTi4gIAoJUHJpbnQgREVDTF9OQU1FIGluIHdoZW4gcmVwb3J0aW5nIGFtYmlndWl0aWVzLgoJKGJ1aWxkX29iamVjdF9jYWxsKTogSXRlcmF0ZSB1c2luZyBPVkxfTkVYVCBmb3IgZm5zLCBjb252cy4KCShidWlsZF9uZXdfb3ApOiBDYWxsIGxvb2t1cF9mdW5jdGlvbl9ub25jbGFzcy4gIAoJSXRlcmF0ZSB1c2luZyBPVkxfTkVYVC4KCShidWlsZF9vcF9kZWxldGVfY2FsbCk6IENoYW5nZSBkZXRlY3Rpb24gb2YgbWVtYmVycy4KCURvIG5vdCB3cmFwIFRSRUVfTElTVCBhcm91bmQgZmllbGRzIGFuZCBzaW5nbGUgZ2xvYmFsIGZ1bmN0aW9ucy4KCShidWlsZF9vdmVyX2NhbGwpOiBEb24ndCBwdXNoIGEgY2xhc3MgbGV2ZWwgaWYgdGhlIGNvbnRleHQgaXMgYQoJbmFtZXNwYWNlLgoJKGJ1aWxkX25ld19tZXRob2RfY2FsbCk6IEl0ZXJhdGUgdXNpbmcgT1ZMX05FWFQuCgkqIGNsYXNzLmMgKGFkZF9tZXRob2QpOiBDaGFpbiBvdmVybG9hZGVkIG1lbWJlcnMgdXNpbmcKCWJ1aWxkX292ZXJsb2FkLiAgUmVtb3ZlIGNvcHlpbmcgb2YgbWV0aG9kLgoJKGdyb3dfbWV0aG9kKTogV2hlbiBpdGVyYXRpbmcgdGhyb3VnaCB0aGUgb2JzdGFjaywgZXhwZWN0IE9WRVJMT0FECglub2Rlcy4gIENoYWluIG92ZXJsb2FkIG1lbWJlcnMuCgkoZmluaXNoX3N0cnVjdF9tZXRob2RzKTogQ2hhaW4gb3ZlcmxvYWQgbWVtYmVycy4gIFVucGFjayBPVkVSTE9BRAoJbm9kZXMgaW4gY2FsbCB0byBnZXRfYmFzZWxpbmtzLgoJKGR1cGxpY2F0ZV90YWdfZXJyb3IpOiBFeHBlY3QgT1ZFUkxPQUQgbm9kZXMgd2hlbiB1bmNoYWluaW5nLgoJKGZpbmlzaF9zdHJ1Y3RfMSk6IEl0ZXJhdGUgb3ZlciBjdG9yIHVzaW5nIE9WTF9ORVhULiAgSGFuZGxlCglmZGVjbHMgdGhhdCBhcmUgT1ZFUkxPQUQgbm9kZXMuCgkodmFsaWRhdGVfbGhzKTogTmV3IGZ1bmN0aW9uLgoJKGluc3RhbnRpYXRlX3R5cGUpOiBEbyBub3QgY29weSBPVkVSTE9BRCBub2Rlcy4gIFJlbW92ZSBkZWFkCgljb2RlLiBVc2UgREVDTF9OQU1FIGluIGVycm9yIG1lc3NhZ2VzLiBTcGxpdCBjb2RlIGJldHdlZW4gZ2xvYmFsCglhbmQgbWVtYmVyIGZ1bmN0aW9uIHByb2Nlc3NpbmcuCgkqIGRlY2wuYyAoZ2xvYmFsX3R5cGVfbm9kZSk6IE5ldyBzdGF0aWMgdmFyaWFibGUuCgkoaW5fc3RkKTogTmV3IGdsb2JhbC4KCShzdHJ1Y3QgYmluZGluZ19sZXZlbCk6IE5ldyBmaWVsZCB1c2luZ3MuCgkocmVzdW1lX2JpbmRpbmdfbGV2ZWwpOiBBc3NlcnQgdGhhdCB3ZSBhcmUgbm90IGluIGEgY2xhc3MuCgkodG9wbGV2ZWxfYmluZGluZ3NfcCk6IEp1c3QgY2hlY2sgZm9yIG5hbWVzcGFjZV9wIG9yCglwc2V1ZG9fZ2xvYmFsLgoJKHJlc3VtZV9sZXZlbCk6IFJlbW92ZS4KCShmaW5kX2JpbmRpbmcpOiBOZXcgZnVuY3Rpb24uCgkoYmluZGluZ19mb3JfbmFtZSk6IENhbGwgaXQuCgkobmFtZXNwYWNlX2JpbmRpbmcsIHNldF9uYW1lc3BhY2VfYmluZGluZyk6IE5ldyBmdW5jdGlvbnMuCgkocHVzaF9uYW1lc3BhY2UpOiBBc3NvY2lhdGUgYmluZGluZyBsZXZlbCB3aXRoIG5ldyBuYW1lc3BhY2UsCglyZXN1bWVfYmluZGluZ19sZXZlbCBmb3IgZXhpc3RpbmcgbmFtZXNwYWNlLiAgUmVtb3ZlIG9sZCBjb2RlLgoJRmFrZSBzdGQgYnkgY291bnRpbmcuCgkoc3RvcmVfYmluZGluZ3MpOiBVc2UgUkVBTF9JREVOVElGSUVSX1RZUEVfVkFMVUUuCgkobWF5YmVfcHVzaF90b190b3BfbGV2ZWwpOiBTYXZlIGN1cnJlbnQgbmFtZXNwYWNlLgoJKHBvcF9mcm9tX3RvcF9sZXZlbCk6IFJlc3RvcmUgc2F2ZWQgbmFtZXNwYWNlLgoJKHBvcF9uYW1lc3BhY2UpOiBDYWxsIHN1c3BlbmRfYmluZGluZ19sZXZlbC4gIFJlbW92ZSBvbGQgY29kZS4KCShjYXRfbmFtZXNwYWNlX2xldmVscyk6IE5ldyBmdW5jdGlvbi4KCShzZXRfaWRlbnRpZmllcl90eXBlX3ZhbHVlX3dpdGhfc2NvcGUpOiBGb3IgbmFtZXNwYWNlIGJpbmRpbmdzLAoJc2V0IEJJTkRJTkdfVFlQRSwgYW5kIHVzZSBnbG9iYWxfdHlwZV9ub2RlLgoJVXNlIFJFQUxfSURFTlRJRklFUl9UWVBFX1ZBTFVFIG90aGVyd2lzZS4KCShpZGVudGlmaWVyX3R5cGVfdmFsdWUpOiBOZXcgZnVuY3Rpb24uCgkocHVzaHRhZyk6IElmIG5vIGNvbnRleHQsIHVzZSBjdXJyZW50X25hbWVzcGFjZS4KCShkdXBsaWNhdGVfZGVjbHMpOiBEb24ndCBwcm9jZXNzIERFQ0xfQ0hBSU4uCgkocHVzaGRlY2wpOiBTZXQgREVDTF9DT05URVhUIHRvIGN1cnJlbnRfbmFtZXNwYWNlLCBpZiBpdCBpcyBub3QKCWFscmVhZHkgc2V0LiBOZXZlciByZXNldCBpdCB0byBOVUxMX1RSRUUuICBMb29rdXAgZ2xvYmFsIHZhcmlhYmxlcwoJaW4gdGhlaXIgbmFtZXNwYWNlLiAgUHVzaCBvdmVybG9hZGVkIHRlbXBsYXRlcyBpZiB0aGV5IGFyZSBvbgoJbmFtZXNwYWNlIGxldmVsLgoJKHB1c2hkZWNsX25hbWVzcGFjZV9sZXZlbCk6IE5ldyBmdW5jdGlvbi4KCShwdXNoZGVjbF90b3BfbGV2ZWwpOiBJbXBsZW1lbnQgdXNpbmcgcHVzaGRlY2xfbmFtZXNwYWNlX2xldmVsLgoJKHB1c2hkZWNsX3VzaW5nX2RlY2wpOiBOZXcgZnVuY3Rpb24uCgkob3ZlcmxvYWRlZF9nbG9iYWxzX3ApOiBSZW1vdmUuCgkocHVzaF9vdmVybG9hZGVkX2RlY2wpOiBDcmVhdGUgT1ZFUkxPQUQgbm9kZXMsIGFuZCBpdGVyYXRlIHRocm91Z2gKCXRoZW0uIFVzZSBuYW1lc3BhY2VfYmluZGluZyBhbmQgc2V0X25hbWVzcGFjZV92YWx1ZS4KCShyZWRlY2xhcmF0aW9uX2Vycm9yX21lc3NhZ2UpOiBDb21wbGFpbiBpZiB0aGUgZGVjbGFyYXRpb25zIGNvbWUKCWZyb20gZGlmZmVyZW50IG5hbWVzcGFjZXMuCgkobG9va3VwX3RhZyk6IE9uIG5hbWVzcGFjZSBsZXZlbCwgbG9vayBpbiB0aGUgQklORElOR19UWVBFLgoJKGxvb2t1cF9uYW1lc3BhY2VfbmFtZSk6IFBhc3MgdHJlZV9iaW5kaW5ncyBmcm9tIHN0YWNrLiAgUmVtb3ZlCglvbGQgY29kZS4KCShzZWxlY3RfZGVjbCk6IE5ldyBmdW5jdGlvbi4KCShsb29rdXBfbmFtZV9yZWFsKTogQ2FsbCBpdCBmb3IgcXVhbGlmaWVkIGFuZCB1bnF1YWxpZmllZCBsb29rdXAuCglQYXNzIHRyZWVfYmluZGluZ3MgZnJvbSB0aGUgc3RhY2suCglJZiBwcmVmZXJfdHlwZSBpcyAxLCBhbHNvIGFjY2VwdCBuYW1lc3BhY2VzLgoJKGxvb2t1cF9mdW5jdGlvbl9ub25jbGFzcyk6IE5ldyBmdW5jdGlvbi4KCShpbml0X2RlY2xfcHJvY2Vzc2luZyk6IFNldCB0aGUgYmluZGluZyBsZXZlbCBvZiB0aGUgZ2xvYmFsCgluYW1lc3BhY2UgdG8gZ2xvYmFsX2JpbmRpbmdfbGV2ZWwuCglCdWlsZCBhIHByb3BlciB0eXBlIGxpc3QgZm9yIF9fYnVpbHRpbl9hcHBseS4KCUluaXRpYWxpemUgc3RkX25vZGUgdG8gImZha2Ugc3RkIiBpZiBmbGFnX2hvbm9yX3N0ZCBpcyBzZXQuCglJbml0aWFsaXplIGdsb2JhbF90eXBlX25vZGUuCglBbGxvY2F0ZWQgYmFkX2FsbG9jIGluIG5hbWVzcGFjZSBzdGQgaWYgZmxhZ19ob25vcl9zdGQuCgkoZGVmaW5lX2Z1bmN0aW9uKTogU2V0IHRoZSBERUNMX0NPTlRFWFQgdG8gdGhlIGN1cnJlbnRfbmFtZXNwYWNlLgoJKHN0YXJ0X2RlY2wpOiBBIG5hbWVzcGFjZSBpcyBub3QgY29uc2lkZXJlZCBhcyBhIGNvbnRleHQgaGVyZS4gIElmCgl0aGUgREVDTF9DT05URVhUIGlzIGEgbmFtZXNwYWNlLCBwdXNoIHRoZSBkZWNsLgoJKGNwX2ZpbmlzaF9kZWNsKTogQ2hlY2sgZm9yIG5hbWVzcGFjZXMgdXNlZCBhcyBpbml0aWFsaXplcnMuCgkoZ3Jva2ZuZGVjbCk6IEFkZCBuYW1lc3BhY2UgcGFyYW1ldGVyLiAgUmVtb3ZlIHByb2Nlc3Npbmcgb2YKCURFQ0xfQ0hBSU4uCgkoZ3Jva3ZhcmRlY2wpOiBBZGQgbmFtZXNwYWNlIHBhcmFtZXRlci4KCShncm9rZGVjbGFyYXRvcik6IFByb2Nlc3MgU0NPUEVzIHRoYXQgYXJlIG5hbWVzcGFjZXMuICBGb3IKCW1hbmdsaW5nLCB0ZW1wb3JhcmlseSBzZXQgdGhlIERFQ0xfQ09OVEVYVCBvbiBhbm9ueW1vdXMgc3RydWN0cy4KCShzdGFydF9mdW5jdGlvbik6IENoZWNrIGZvciBjb250ZXh0cyB0aGF0IGFyZSBuYW1lc3BhY2VzLiAgCglTZXQgY29udGV4dCBmb3IgZGVjbGFyYXRpb25zIHRoYXQgaGF2ZSBub3QgYmVlbiBwdXNoZWQuCgkoc3RvcmVfcGFybV9kZWNscyk6IENoZWNrIGZvciA6Om1haW4gb25seS4KCShmaW5pc2hfZnVuY3Rpb24pOiBMaWtld2lzZS4KCShzdGFydF9tZXRob2QpOiBDaGVjayBmb3IgY29udGV4dHMgdGhhdCBhcmUgbmFtZXNwYWNlcy4KCShzdGFydF9tZXRob2QpOiBSZW1vdmUgREVDTF9DSEFJTiBwcm9jZXNzaW5nLgoJKiBkZWNsMi5jIChmbGFnX2hvbm9yX3N0ZCk6IERlY2xhcmUuCgkobGFuZ19kZWNvZGVfb3B0aW9uKTogU2V0IGl0IGlmIC1maG9ub3Itc3RkIG9yIC1mbmV3LWFiaSBpcyBnaXZlbi4KCShkZWNsX25hbWVzcGFjZV9saXN0KTogTmV3IHN0YXRpYyBnbG9iYWwuCgkoZ3Jva194X2NvbXBvbmVudHMpOiBJZ25vcmUgbmFtZXNwYWNlcyBhcyB0eXBlIGNvbnRleHRzLgoJKGNoZWNrX2NsYXNzZm4pOiBFeHBlY3QgT1ZFUkxPQUQgbm9kZXMuCgkoZ3Jva2ZpZWxkKTogUmVtb3ZlIERFQ0xfQ0hBSU4gcHJvY2Vzc2luZy4KCShmaW5pc2hfZmlsZSk6IENhbGwgY2F0X25hbWVzcGFjZV9sZXZlbHMuCgkobWVyZ2VfZnVuY3Rpb25zKTogTmV3IGZ1bmN0aW9uLgoJKGFtYmlndW91c19kZWNsKTogUmV3cml0ZS4KCShsb29rdXBfdXNpbmdfbmFtZXNwYWNlKTogUHJvZHVjZSB0cmVlX2JpbmRpbmdzLgoJKHF1YWxpZmllZF9sb29rdXBfdXNpbmdfbmFtZXNwYWNlKTogTGlrZXdpc2UuCgkoc2V0X2RlY2xfbmFtZXNwYWNlLCBkZWNsX25hbWVzcGFjZSwgY3VycmVudF9kZWNsX25hbWVzcGFjZSwKCXB1c2hfZGVjbF9uYW1lc3BhY2UsIHBvcF9kZWNsX25hbWVzcGFjZSk6IE5ldyBmdW5jdGlvbnMuCgkoYXJnX2xvb2t1cCk6IE5ldyBzdHJ1Y3QuCgkoYWRkX2Z1bmN0aW9uLCBhcmdfYXNzb2NfbmFtZXNwYWNlLCBhcmdfYXNzb2NfY2xhc3MsCglhcmdfYXNzb2NfdHlwZSwgYXJnX2Fzc29jX2FyZ3MsIGFyZ19hc3NvYywgbG9va3VwX2FyZ19kZXBlbmRlbnQpOgoJTmV3IGZ1bmN0aW9ucy4KCShnZXRfbmFtZXNwYWNlX2lkLCBjdXJyZW50X25hbWVzcGFjZV9pZCk6IFJlbW92ZS4KCShkb190b3BsZXZlbF91c2luZ19kZWNsKTogUmV3cml0ZS4KCShkb19jbGFzc191c2luZ19kZWNsKTogQ29tcGxhaW4gYWJvdXQgbmFtZXNwYWNlIHF1YWxpZmllcnMuCgkoZG9fdXNpbmdfZGlyZWN0aXZlKTogU29ycnkgaWYgbm90IG9uIG5hbWVzcGFjZSBsZXZlbC4gIENvbXBsYWluCglhYm91dCB1bmtub3duIG5hbWVzcGFjZXMuCgkqIGVycm9yLmMgKGR1bXBfYWdncl90eXBlKTogQ2hlY2sgZm9yIG5hbWVzcGFjZSBjb250ZXh0cy4KCSogZXhjZXB0LmMgKGluaXRfZXhjZXB0aW9uX3Byb2Nlc3NpbmcpOiBQdXNoIHRlcm1pbmF0ZSBpbnRvIHN0ZC4KCSogZnJpZW5kLmMgKGlzX2ZyaWVuZCk6IEEgbmFtZXNwYWNlIGlzIG5vdCBhIGNvbnRleHQsIGhlcmUuCgkqIGluaXQuYyAoZXhwYW5kX21lbWJlcl9pbml0KTogUmVtb3ZlIERFQ0xfQ0hBSU4gcHJvY2Vzc2luZy4KCShidWlsZF9vZmZzZXRfcmVmKTogUHJvY2VzcyBPVkVSTE9BRCBub2Rlcy4KCSogbGFuZy1zcGVjcy5oIChfX0hPTk9SX1NURCk6IERlZmluZSBpZiAtZm5ldy1hYmkgb3IgLWZob25vci1zdGQuCgkqIGxleC5jIChpZGVudGlmaWVyX3R5cGUpOiBMb29wIHVzaW5nIE9WTF9DSEFJTi4KCShzZWVfdHlwZW5hbWUpOiBTZXQgbG9va2luZ19mb3JfdHlwZW5hbWUgdG8gMi4KCShyZWFsX3l5bGV4KTogTGlrZXdpc2UuCQoJKGRvX2lkZW50aWZpZXIpOiBFeHBlY3QgT1ZFUkxPQUQgbm9kZXMgaW5zdGVhZCBvZiBUUkVFX0xJU1RzLgoJKGRvX3Njb3BlZF9pZCk6IEV4cGVjdCBPVkVSTE9BRCBub2Rlcy4KCUNoYW5nZSBjYWxsaW5nIGNvbnZlbnRpb24gZm9yIHF1YWxpZmllZF9sb29rdXBfdXNpbmdfbmFtZXNwYWNlLgoJKGJ1aWxkX2xhbmdfZGVjbCk6IERvbid0IHNldCBpbl9uYW1lc3BhY2UgYW55bW9yZS4KCSogbWV0aG9kLmMgKHR5cGV2ZWNfc2l6ZSk6IE5ldyBnbG9iYWwuCgkoYnVpbGRfb3ZlcmxvYWRfbmVzdGVkX25hbWUpOiBSZXR1cm4gaWYgZ2xvYmFsX25hbWVzcGFjZS4KCU90aGVyd2lzZSwgYWx3YXlzIGV4cGVjdCBhIGRlY2xhcmF0aW9uIGNvbnRleHQuCgkoYnVpbGRfcXVhbGlmaWVkX25hbWUpOiBMaWtld2lzZS4KCU1ha2Ugc3VyZSB3ZSBkb24ndCB3cml0ZSBiZXlvbmQgdHlwZXZlY19zaXplLgoJKGJ1aWxkX2RlY2xfb3ZlcmxvYWRfcmVhbCk6IExpa2V3aXNlLgoJQWxsb2NhdGUgb25lIGV4dHJhIHNsb3QgZm9yIHRoZSBuYW1lc3BhY2UuCgkoaGFja19pZGVudGlmaWVyKTogTWFyayBjb2RlIGRlYWQuCglQcm9jZXNzIE9WRVJMT0FEIGFuZCBOQU1FU1BBQ0VfREVDTCBub2Rlcy4KCSogcGFyc2UueSAocHJvZ3JhbSk6IFBvcCBuYW1lc3BhY2VzIHVudGlsIGluIGdsb2JhbCBuYW1lc3BhY2UuCgkoZXh0ZGVmKTogSW4gYSB1c2luZy1kZWNsYXJhdGlvbiwgZG9uJ3QgZGlzY2FyZCB0aGUgaWRlbnRpZmllciBpZgoJdGhlcmUgaXMgbm8gZGVjbGFyYXRpb24uCgkobGVmdF9jdXJseSk6IElnbm9yZSB0eXBlIGNvbnRleHRzIHdoaWNoIGFyZSBuYW1lc3BhY2VzLgoJKHR5cGVuYW1lX3N1YjIpOiBVc2UgSURFTlRJRklFUl9UWVBFX1ZBTFVFIHRvIHJldHJpZXZlIHRoZSB0eXBlCgl1c2VkIGFzIHNjb3BlLgoJKiBwdC5jICh0ZW1wbGF0ZV9jbGFzc19kZXB0aCk6IEV4cGVjdCB0eXBlcyB0byBiZSBuYW1lc3BhY2VzLgoJKGRldGVybWluZV9zcGVjaWFsaXphdGlvbik6IFNpbXBsaWZ5IGJ5IGV4cGVjdGluZyBPVkVSTE9BRCBub2Rlcy4KCShwdXNoX3RlbXBsYXRlX2RlY2wpOiBQdXNoIGludG8gbmFtZXNwYWNlIGxldmVsLgoJUmVzZXQgY3R4IGlmIGl0IGlzIGEgbmFtZXNwYWNlLgoJU2V0IERFQ0xfQ09OVEVYVCB0byBjdXJyZW50X25hbWVzcGFjZSBpZiBub3Qgc2V0IGFscmVhZHkuCglJZ25vcmUgcmVhbCBjb250ZXh0cyB0aGF0IGFyZSBuYW1lc3BhY2VzLgoJKG1hbmdsZV9jbGFzc19uYW1lX2Zvcl90ZW1wbGF0ZSk6IFNraXAgZ2xvYmFsX25hbWVzcGFjZS4KCU1hbmdsZSBvdGhlciBuYW1lcGFjZXMgYXMgZGVjbGFyYXRpb25zLgoJKGxvb2t1cF90ZW1wbGF0ZV9mdW5jdGlvbik6IFNldCB0eXBlIG9mIE9WRVJMT0FEIG5vZGVzIHRvIHVua25vd24uCgkobG9va3VwX3RlbXBsYXRlX2NsYXNzKTogUHVzaCBpbnRvIG5hbWVzcGFjZSBvZiBjb250ZXh0LgoJSWYgdGhlIGNvbnRleHQgaXMgYSBuYW1lc3BhY2UsIHNldCBpdCB0byBnbG9iYWxfbmFtZXNwYWNlLgoJVXNlIGlkX2NvbnRleHQgZm9yIG1hbmdsaW5nLgoJKGZvcl9lYWNoX3RlbXBsYXRlX3Bhcm0pOiBIYW5kbGUgT1ZFUkxPQUQgYW5kIE5BTUVTUEFDRV9ERUNMIG5vZGVzLgoJKHRzdWJzdF9mcmllbmRfZnVuY3Rpb24pOiBJZ25vcmUgbmFtZXNwYWNlIGNvbnRleHRzLgoJUHVzaCBpbnRvIG5hbWVzcGFjZSBsZXZlbC4KCSh0c3Vic3QpOiBIYW5kbGUgTkFNRVNQQUNFX0RFQ0wgbm9kZXMuCglSZW1vdmUgREVDTF9DSEFJTiBwcm9jZXNzaW5nLgoJKHR5cGVfdW5pZmljYXRpb25fcmVhbCk6IFJlY29nbml6ZSBPVkVSTE9BRCBpbnN0ZWFkIG9mIFRSRUVfTElTVCBub2Rlcy4KCSogcHRyZWUuYyAocHJpbnRfbGFuZ19pZGVudGlmaWVyKTogUHJpbnQgYmluZGluZ3MuCgkobGFuZ19wcmludF94bm9kZSk6IFByaW50IE9WRVJMT0FEIG5vZGVzLgoJKiBydHRpLmMgKGluaXRfcnR0aV9wcm9jZXNzaW5nKTogUHVzaCB0eXBlX2luZm8gaW50byBzdGQuCgkqIHNlYXJjaC5jIChsb29rdXBfZm5maWVsZHNfaGVyZSk6IEV4cGVjdCBPVkVSTE9BRCBub2Rlcy4KCShsb29rdXBfZm5maWVsZHNfMSwgZ2V0X3ZpcnR1YWxzX25hbWVkX3RoaXMsIGdldF9tYXRjaGluZ192aXJ0dWFsLAoJZGZzX2RlYnVnX21hcmssIGRmc19wdXNoZGVjbHMsIGRmc19jb21wcmVzc19kZWNscywgYWRkX2NvbnZlcnNpb25zLAoJbG9va3VwX2ZuZmllbGRzX2hlcmUpOiBMaWtld2lzZS4KCVByb2Nlc3MgYWxsIG5vZGVzLCBpbnN0ZWFkIG9mIGdvaW5nIHRocm91Z2ggVFJFRV9DSEFJTi4KCSogc2lnLmMgKGJ1aWxkX3NpZ25hdHVyZV9wb2ludGVyX29yX3JlZmVyZW5jZV90eXBlKTogU2V0IGNvbnRleHQKCXRvIGdsb2JhbF9uYW1lc3BhY2UuCgkoYnVpbGRfc2lnbmF0dXJlX3RhYmxlX2NvbnN0cnVjdG9yKTogRXhwZWN0IE9WRVJMT0FEIG5vZGVzLgoJKiBzcGV3LmMgKHl5bGV4KTogU2F2ZSBvbGQgc2V0dGluZyBvZiBsb29raW5nX2Zvcl90eXBlbmFtZS4KCSogdHJlZS5jIChkZWNsX2xpc3RfbGVuZ3RoKTogUmVtb3ZlLgoJKGJpbmRpbmdfaW5pdCk6IE5ldyBmdW5jdGlvbi4KCShjb3VudF9mdW5jdGlvbnMpOiBSZXdyaXRlLgoJKGlzX292ZXJsb2FkZWRfZm4pOiBFeHBlY3QgT1ZFUkxPQUQgbm9kZXMuCgkocmVhbGx5X292ZXJsb2FkZWRfZm4sIGdldF9maXJzdF9mbiwgbHZhbHVlX3R5cGUpOiBMaWtld2lzZS4KCShvdmxfY29ucywgc2NyYXRjaF9vdmxfY29ucywgYnVpbGRfb3ZlcmxvYWQsIGJ1aWxkX292ZXJsb2FkX2FmdGVyLAoJb3ZsX21lbWJlcik6IE5ldyBmdW5jdGlvbnMuCgkqIHR5cGVjay5jIChyZXF1aXJlX2NvbXBsZXRlX3R5cGUpOiBFeHBlY3QgT1ZFUkxPQUQgbm9kZXMuCgkodHlwZV91bmtub3duX3ApOiBMaWtld2lzZS4KCShyZXF1aXJlX2luc3RhbnRpYXRlZF90eXBlKTogTGlrZXdpc2UuCgkoYnVpbGRfY29tcG9uZW50X3JlZik6IERlY2xhcmUgY29kZSBkZWFkLgoJKGJ1aWxkX3hfZnVuY3Rpb25fY2FsbCk6IENyZWF0ZSBhbmQgZXhwZWN0IE9WRVJMT0FEIG5vZGVzLgoJKGJ1aWxkX2Z1bmN0aW9uX2NhbGxfcmVhbCk6IENoZWNrIGZvciA6Om1haW4gb25seS4KCShidWlsZF91bmFyeV9vcCk6IExpa2V3aXNlLiAgRXhwZWN0IE9WRVJMT0FEIG5vZGVzLgoJKGNvbnZlcnRfZm9yX2Fzc2lnbm1lbnQpOiBDaGVjayBmb3IgVFJFRV9MSVNUIGJlZm9yZSBhY2Nlc3NpbmcKCVRSRUVfVkFMVUUuCgkqIGRlY2wuYyAoZHVwbGljYXRlX2RlY2xzKTogQ2hlY2sgZm9yIG5hbWVzcGFjZSBiaW5kaW5ncyBpbnN0ZWFkCglvZiBnbG9iYWwgYmluZGluZ3MuCgkocHVzaGRlY2wsIHB1c2hfb3ZlcmxvYWRlZF9kZWNsLCBsb29rdXBfdGFnLCBsb29rdXBfbmFtZV9yZWFsLAoJbG9va3VwX25hbWVfY3VycmVudF9sZXZlbCwgc3RhcnRfZGVjbCwgeHJlZl90YWcsIAoJZmluaXNoX2VudW0pOiBMaWtld2lzZS4KCSogaW5pdC5jIChidWlsZF9vZmZzZXRfcmVmKTogTGlrZXdpc2UuCgkqIHNlYXJjaC5jIChsb29rdXBfZmllbGQpOiBMaWtld2lzZS4KCShsb29rdXBfZm5maWVsZHMpOiBMaWtld2lzZS4KCShkZnNfZGVidWdfbWFyayk6IExpa2V3aXNlLgoJKiBkZWNsLmMgKHBvcGxldmVsKTogVXNlIFNFVF9JREVOVElGSUVSX1RZUEVfVkFMVUUuCgkocG9wbGV2ZWxfY2xhc3MsIHBvcF9mcm9tX3RvcF9sZXZlbCk6IExpa2V3aXNlLgoJKiBkZWNsMi5jIChmaW5pc2hfbWV0aG9kKTogTGlrZXdpc2UuCgkqIGNsYXNzLmMgKGJ1aWxkX3Z0YWJsZSk6IFVzZSBTRVRfSURFTlRJRklFUl9HTE9CQUxfVkFMVUUuCgkqIGRlY2wuYyAocmVjb3JkX2J1aWx0aW5fdHlwZSk6IExpa2V3aXNlLgoJKGluaXRfZGVjbF9wcm9jZXNzaW5nLCBncm9rZm5kZWNsKTogTGlrZXdpc2UuCgkqIGxleC5jIChnZXRfdGltZV9pZGVudGlmaWVyLCBkb19pZGVudGlmaWVyLCBkb19zY29wZWRfaWQpOiBMaWtld2lzZS4KCShtYWtlX2xhbmdfdHlwZSk6IExpa2V3aXNlLgoJKiBwYXJzZS55IChtYWtlX3RodW5rKTogTGlrZXdpc2UuCgkqIHB0LmMgKHRzdWJzdCk6IExpa2V3aXNlLgoJKiB0cmVlLmMgKGRlYnVnX2JpbmZvKTogTGlrZXdpc2UuCgkqIGV4Y2VwdGlvbi5jYywgbmV3LmNjLCBuZXcxLmNjLCBuZXcyLmNjLCB0aW5mby5jYywgdGluZm8uaCwgCgl0aW5mbzIuY2MsIGluYy9uZXcuaDogQWRkIHN0ZCBxdWFsaWZpY2F0aW9ucy4KCSogaW5jL25ldzogV3JhcCB3aXRoIG5hbWVzcGFjZSBzdGQgaWYgX19IT05PUl9TVEQuCgkqIGluYy90eXBlaW5mbzogTGlrZXdpc2UuCgpGcmkgTWF5ICA4IDAwOjQzOjUwIDE5OTggIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGNhbGwuYyAoYnVpbGRfdXNlcl90eXBlX2NvbnZlcnNpb25fMSk6IEhhbmRsZSBzZWNvbmRfY29udiAKCXByb3Blcmx5IGZvciB0ZW1wbGF0ZXMuCgpUaHUgTWF5ICA3IDE3OjA5OjI1IEVEVCAxOTk4ICBBbmRyZXcgTWFjTGVvZCAgPGFtYWNsZW9kQGN5Z251cy5jb20+CgoJKiBtZXRob2QuYyAoYnVpbGRfZGVjbF9vdmVybG9hZF9yZWFsKTogU2V0IFRSRUVfVVNFRCBmbGFnIHRvCgl6ZXJvIGZvciBidWlsZF90eXBlX3ZhcmlhbnRzIG5vZGVzIGFzIHdlbGwuCgpXZWQgTWF5ICA2IDE5OjI3OjA5IDE5OTggIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHB0LmMgKHRzdWJzdCk6IERvbid0IHRzdWJzdCB0aGUgdHlwZSBvZiBhbiBJREVOVElGSUVSX05PREUuCgpXZWQgTWF5ICA2IDE2OjQ5OjQ4IDE5OTggIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KCgkqIE1ha2VmaWxlLmluIChjYWxsLm8sIGNsYXNzLm8sIGRlY2wubywgZGVjbDIubywgZXJyZm4ubywgZXJyb3IubywKCWV4Y2VwdC5vLCBleHByLm8sIGZyaWVuZC5vLCBpbml0Lm8sIGxleC5vLCBtZXRob2QubywgcHQubywgcmVwby5vLAoJcnR0aS5vLCBzZWFyY2gubywgc2VtYW50aWNzLm8sIHNpZy5vLCB0cmVlLm8sIHR5cGVjay5vLCB0eXBlY2syLm8sIAoJeHJlZi5vKTogQWRkIHRvcGxldi5oIGRlcGVuZGVuY2llcy4KCldlZCBNYXkgIDYgMTY6NDQ6NTggMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogZXJyZm4uYyAoY3BfZXJyb3IsIGNwX3dhcm5pbmcpOiBSZW1vdmUgZGVjbGFyYXRpb25zIGZvcgoJZXJyb3IgYW5kIHdhcm5pbmcgcmVzcGVjdGl2ZWx5LgoKV2VkIE1heSAgNiAxNDoyODoxOCAxOTk4ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBlcnJvci5jOiBDb252ZXJ0IHRvIHVzaW5nIGN0eXBlIG1hY3JvcyBkZWZpbmVkIGluIHN5c3RlbS5oLgoJKiBtZXRob2QuYzogTGlrZXdpc2UuCgkqIHhyZWYuYzogTGlrZXdpc2UuCgkqIGxleC5jOiBMaWtld2lzZS4gIEFsc28gcmVtb3ZlIHJlZHVuZGFudCBzeXN0ZW0gaGVhZGVyIHN0dWZmLgoKV2VkIE1heSAgNiAwNjozNjo0MSAxOTk4ICBSb2JlcnQgTGlwZSAgPHJvYmVydGxAZGdpaS5jb20+CgoJKiBjYWxsLmMsIGNsYXNzLmMsIGRlY2wuYywgZGVjbDIuYywgZXJyZm4uYywgZXJyb3IuYywgZXhjZXB0LmMsIAoJZXhwci5jLCBmcmllbmQuYywgaW5pdC5jLCBsZXguYywgbWV0aG9kLmMsIHB0LmMsIHJlcG8uYywgcnR0aS5jLCAKCXNlYXJjaC5jLCBzZW1hbnRpY3MuYywgc2lnLmMsIHRyZWUuYywgdHlwZWNrLmMsIHR5cGVjazIuYywgCgl4cmVmLmM6IEFkZCBpbmNsdWRlIG9mIHRvcGxldi5oLgoKV2VkIE1heSAgNiAwMjozMzozOSAxOTk4ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiB0cmVlLmMgKHBlcm1fbWFuaXApOiBBbHNvIHJlZ2VuZXJhdGUgdGhlIFJUTCBvZiBhbiBleHRlcm4uCgkoY29weV90b19wZXJtYW5lbnQpOiBVc2UgZW5kX3RlbXBvcmFyeV9hbGxvY2F0aW9uLgoKVHVlIE1heSAgNSAyMzo1NDowNCAxOTk4ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBpbml0LmMgKGV4cGFuZF92ZWNfaW5pdCk6IFRoZSBpbml0aWFsaXphdGlvbiBvZiBlYWNoIGFycmF5CgllbGVtZW50IGlzIGEgZnVsbC1leHByZXNzaW9uLgoKVHVlIE1heSAgNSAxODoyNDoxMyBFRFQgMTk5OCAgQW5kcmV3IE1hY0xlb2QgIDxhbWFjbGVvZEBjeWdudXMuY29tPgoKCSogbWV0aG9kLmMgKGJ1aWxkX21hbmdsZWRfbmFtZSk6IEFkZCBhIGNhbGwgdG8gYnVpbGRfdHlwZV92YXJpYW50IAoJdG8gZ2V0IHRoZSByaWdodCB0eXBlLgoKVHVlIE1heSAgNSAwMToyNTowMyAxOTk4ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBNYWtlZmlsZS5pbjogQWRkIC5TVUZGSVhFUy4KCgkqIGNwLXRyZWUuZGVmOiBSZW1vdmUgTkFNRVNQQUNFX0RFQ0wuCgpTdW4gTWF5ICAzIDAxOjMyOjE0IDE5OTggIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGNhbGwuYyAoYnVpbGRfb3Zlcl9jYWxsKTogRG8gZXZhbHVhdGUgYXJnIGV2ZW4gaWYgaXQgaGFzIGVtcHR5IAoJY2xhc3MgdHlwZS4KCSogZGVjbC5jIChzdGFydF9mdW5jdGlvbik6IERvbid0IHB1c2ggYSBtZW1iZXIgZnVuY3Rpb24uCgpUaHUgQXByIDMwIDE4OjU5OjIzIDE5OTggIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KCgkqIE1ha2VmaWxlLmluIChnKytGQVEuaW5mbyk6IFB1dCAtbyBvcHRpb24gYmVmb3JlIGlucHV0IGZpbGUuCgpUaHUgQXByIDMwIDEzOjA1OjMzIEVEVCAxOTk4ICBBbmRyZXcgTWFjTGVvZCAgPGFtYWNsZW9kQGN5Z251cy5jb20+CgoJKiBneHhpbnQudGV4aTogQWRkIGluZm8gZm9yIHNxdWFuZ2xpbmcgY29kZXMgSyBhbmQgQi4KClR1ZSBBcHIgMjggMTM6MjI6MDEgMTk5OCAgTWFyayBNaXRjaGVsbCAgPG1taXRjaGVsbEB1c2EubmV0PgoKCSogc2VtYW50aWNzLmMgKGJlZ2luX3N0bXRfZXhwcik6IEF2b2lkIGR1cGxpY2F0aW5nIHRoZSBlZmZlY3Qgb2YKCXRoZSBleHByZXNzaW9uIGluIHRlbXBsYXRlcy4KCShmaW5pc2hfc3RtdF9leHByKTogTGlrZXdpc2UuCgoxOTk4LTA0LTI4ICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBjeWdudXMuY29tPgoKCSogZGVjbDIuYyAoYW1iaWd1b3VzX2RlY2wpOiBGaXggTkFNRSBwYXJtIHRvIGJlIGEgdHJlZSwgbm90IGludC4KCk1vbiBBcHIgMjcgMTM6NTg6MTAgMTk5OCAgTWFyayBNaXRjaGVsbCAgPG1taXRjaGVsbEB1c2EubmV0PgoKCSogZGVjbC5jIChtYXliZV9wdXNoX3RvX3RvcF9sZXZlbCk6IEFsd2F5cyBjbGVhcgoJY3VycmVudF90ZW1wbGF0ZV9wYXJtcyBhbmQgcHJvY2Vzc2luZ190ZW1wbGF0ZV9kZWNsLgoJKHB1c2h0YWcpOiBSZW1vdmUgY2hlY2sgb2YgY3VycmVudF9jbGFzc190eXBlIGFuZCBzb21lIGNvbW1lbnRzLAoJc2luY2UgbWF5YmVfcHVzaF90b190b3BfbGV2ZWwgbm8gbG9uZ2VyIGNyZWF0ZXMgY29uZnVzaW9uLgoKU3VuIEFwciAyNiAxMjoxMDoxOCAxOTk4ICBNYXJrIE1pdGNoZWxsICA8bW1pdGNoZWxsQHVzYS5uZXQ+CgoJKiBjcC10cmVlLmggKENMQVNTVFlQRV9JU19URU1QTEFURSk6IE5ldyBtYWNyby4KCShERUNMX0NMQVNTX1RFTVBMQVRFX1ApOiBMaWtld2lzZS4KCShERUNMX1BSSU1BUllfVEVNUExBVEUpOiBMaWtld2lzZS4KCShQUklNQVJZX1RFTVBMQVRFX1ApOiBVc2UgaXQuCgkocHVzaF90ZW1wbGF0ZV9kZWNsX3JlYWwpOiBOZXcgZnVuY3Rpb24uCgkocmVkZWNsYXJlX2NsYXNzX3RlbXBsYXRlKTogVGFrZSBuZXcgdGVtcGxhdGUgcGFyYW1ldGVycyBhcwoJaW5wdXQuIAoJKGlzX3NwZWNpYWxpemF0aW9uX29mKTogTmV3IGZ1bmN0aW9uLgoJKGNvbXBfdGVtcGxhdGVfYXJncyk6IERlY2xhcmUuCgkqIGRlY2wuYyAocHVzaHRhZyk6IEhhbmRsZSBmcmllbmQgdGVtcGxhdGUgY2xhc3Nlcy4KCSh4cmVmX3RhZyk6IExpa2V3aXNlLiAgVXNlIG5ldyBjYWxsaW5nIGNvbnZlbnRpb24gZm9yCglyZWRlY2xhcmVfY2xhc3NfdGVtcGxhdGUuCgkqIGRlY2wyLmMgKGdyb2tfeF9jb21wb25lbnRzKTogSGFuZGxlIGZyaWVuZCB0ZW1wbGF0ZXMuCgkqIGZyaWVuZC5jIChpc19mcmllbmQpOiBVc2UgaXNfc3BlY2lhbGl6YXRpb25fb2Ygd2hlcmUKCWFwcHJvcHJpYXRlLiAgRGVhbCB3aXRoIGZyaWVuZCBjbGFzcyB0ZW1wbGF0ZXMuCgkobWFrZV9mcmllbmRfY2xhc3MpOiBMZXQgYSBjbGFzcyB0ZW1wbGF0ZSBiZSBmcmllbmRzIHdpdGggaXRzZWxmLgoJKiBwdC5jIChjb21wX3RlbXBsYXRlX2FyZ3MpOiBSZW1vdmUgZGVjbGFyYXRpb24uCgkodHN1YnN0X2ZyaWVuZF9jbGFzcyk6IE5ldyBmdW5jdGlvbi4KCShwdXNoX3RlbXBsYXRlX2RlY2xfcmVhbCk6IE5ldyBmdW5jdGlvbi4KCShwdXNoX3RlbXBsYXRlX2RlY2wpOiBVc2UgaXQuCgkocmVkZWNsYXJlX2NsYXNzX3RlbXBsYXRlKTogQWRqdXN0IGZvciBuZXcgY2FsbGluZyBjb252ZW50aW9uLgoJKGNvbXBfdGVtcGxhdGVfYXJncyk6IEdpdmUgaXQgZXh0ZXJuYWwgbGlua2FnZS4KCShpbnN0YW50aWF0ZV9jbGFzc190eXBlKTogVXNlIHRzdWJzdF9mcmllbmRfY2xhc3MgdG8gZGVhbAoJd2l0aCBmcmllbmQgdGVtcGxhdGVzLgoJKiB0eXBlY2suYyAoY29tcHR5cGVzKTogVXNlIGNvbXBfdGVtcGxhdGVfYXJncywgcmF0aGVyIHRoYW4KCWV4cGFuZGluZyBpdCBpbmxpbmUuCgkqIHBhcnNlLnkgKGNvbXBvbmVudF9kZWNsKTogSGFuZGxlIGEgbmVzdGVkIHRlbXBsYXRlIHR5cGUgCglsaWtlIG90aGVyIGNvbXBvbmVudCB0eXBlIGRlY2xhcmF0aW9ucy4KCgkqIHB0LmMgKGNoZWNrX2V4cGxpY2l0X3NwZWNpYWxpemF0aW9uKTogSGFuZGxlIG92ZXJsb2FkZWQKCWNvbnN0cnVjdG9ycyBjb3JyZWN0bHkuCgoJKiBwdC5jIChtYWJ5YmVfZ2V0X3RlbXBsYXRlX2RlY2xfZnJvbV90eXBlX2RlY2wpOiBOZXcgZnVuY3Rpb24uCgkobG9va3VwX3RlbXBsYXRlX2NsYXNzKTogVXNlIGl0LgoKVGh1IEFwciAyMyAyMToxOTowNiAxOTk4ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjcC10cmVlLmRlZjogQWRkIFdSQVBQRVIuICBVU0VSX0NPTlYgbm93IG9ubHkgaGFzIHR3byBvcHMuCgkqIGNwLXRyZWUuaDogQWRkIFdSQVBQRVIgc3VwcG9ydC4KCSogY2FsbC5jIChhZGRfY2FuZGlkYXRlKTogU3BsaXQgb3V0IGZyb20gYWRkXypfY2FuZGlkYXRlIGZucy4KCShidWlsZF9vdmVyX2NhbGwpOiBUYWtlIHRoZSBjYW5kaWRhdGUgaW5zdGVhZCBvZiBmdW5jdGlvbiBhbmQgYXJncy4KCUVuZm9yY2UgYWNjZXNzIGNvbnRyb2wgaGVyZS4gIEVtaXQgb3ZlcmxvYWQgd2FybmluZ3MgaGVyZS4KCShhZGRfd2FybmluZyk6IE5ldyBmbi4KCShqb3VzdCk6IEFkZCBXQVJOIHBhcm0uICBJZiBub3Qgc2V0LCBjYWxsIGFkZF93YXJuaW5nIGluc3RlYWQgb2YKCXByaW50aW5nIGEgd2FybmluZy4gIFJlZW5hYmxlIHNvbWUgd2FybmluZ3MuCgkodG91cm5leSk6IFBhc3MgaXQuCgkoY29udmVydF9saWtlKTogQWRqdXN0LgoJKGJ1aWxkX25ld19vcCk6IEFkanVzdC4KCShidWlsZF9uZXdfZnVuY3Rpb25fY2FsbCk6IEFkanVzdC4KCShidWlsZF91c2VyX3R5cGVfY29udmVyc2lvbl8xKTogQWRqdXN0LgoJKFVTRVJfQ09OVl9GTik6IEFkanVzdC4KCSogdHJlZS5jIChidWlsZF9leHByX3dyYXBwZXIsIGJ1aWxkX2V4cHJfcHRyX3dyYXBwZXIsIAoJYnVpbGRfaW50X3dyYXBwZXIpOiBOZXcgZm5zLgoKVGh1IEFwciAyMyAxODoyNzo1MyAxOTk4ICBNYXJrIFAuIE1pdGNoZWxsICA8bW1pdGNoZWxsQHVzYS5uZXQ+CgoJKiBwdC5jICh1bmlmeSk6IEZpeCB0eXBvIGluIHByZXZpb3VzIGNoYW5nZS4KClRodSBBcHIgMjMgMDk6MzI6NTggMTk5OCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZXJyb3IuYyAoZHVtcF90eXBlX3JlYWwpOiBEZWNsYXJlIGNhbm9uaWNhbF9uYW1lLgoKCSogdHlwZWNrLmMgKGNvbXBfdGFyZ2V0X3R5cGVzKTogRml4IFBNRnMuCgpXZWQgQXByIDIyIDEzOjI0OjQ4IDE5OTggIE1hcmsgTWl0Y2hlbGwgIDxtbWl0Y2hlbGxAdXNhLm5ldD4KCgkqIGNsYXNzLmMgKGZpbmlzaF9zdHJ1Y3QpOiBTZXQgVFJFRV9QUklWQVRFIGFuZCBUUkVFX1BST1RFQ1RFRCBmb3IKCXRoZSBERUNMX1JFU1VMVHMgb2YgYSBtZW1iZXIgVEVNUExBVEVfREVDTCwgbm90IGp1c3QgdGhlCglURU1QTEFURV9ERUNMLgoKCSAqIHB0LmMgKHRzdWJzdCk6IERlY3JlYXNlIHRoZSB0ZW1wbGF0ZS1sZXZlbCBvZgoJIFRFTVBMQVRFX1RFTVBMQVRFX1BBUk1TLiAgTGlrZXdpc2UgZm9yIHRoZSBERUNMX0lOSVRJQUwgb2YgYQoJIFRFTVBMQVRFX1BBUk1fSU5ERVguCgkgKHRlbXBsYXRlX2RlY2xfbGV2ZWwpOiBOZXcgZnVuY3Rpb24uCgkgKHVuaWZ5KTogTWFrZSBzdXJlIHRvIHJlY29yZCB1bmlmaWNhdGlvbnMgZm9yIHRlbXBsYXRlCgkgcGFyYW1ldGVycywgZXZlbiB3aGVuIHRoZSBwYXJhbWV0ZXJzIGV4YWN0bHkgbWF0Y2ggdGhlIGFyZ3VtZW50cy4KCSBDb21iaW5lIGR1cGxpY2F0ZWQgY29kZSBmb3IgVEVNUExBVEVfVEVNUExBVEVfUEFSTXMgYW5kCgkgVEVNUExBVEVfVFlQRV9QQVJNUy4gIERvbid0IHRyeSB0byB1bmlmeSB0ZW1wbGF0ZSBwYXJhbWV0ZXJzIHRoYXQKCSBhcmVuJ3QgZnJvbSB0aGUgbGV2ZWwgd2UncmUgY3VycmVudGx5IHdvcmtpbmcgb24uCgpUdWUgQXByIDIxIDIyOjAwOjA0IDE5OTggIE1hcmsgTWl0Y2hlbGwgIDxtbWl0Y2hlbGxAdXNhLm5ldD4KCgkqIGVycmZuLmMgKGNwX3RoaW5nKTogVXNlIHhyZWFsbG9jLCBub3QgeG1hbGxvYywgdG8gY29weSBtZW1vcnkuCgoJKiBkZWNsMi5jIChjaGVja19tZW1iZXJfdGVtcGxhdGUpOiBTZXQgREVDTF9JR05PUkVEIGZvciBtZW1iZXIKCWNsYXNzIHRlbXBsYXRlcywgdG9vLgoKCSogZGVjbDIuYyAoZ3Jva2ZpZWxkKTogUmVtYW5nbGUgdGhlIG5hbWUgb2YgYSBtZW1iZXIgVFlQRV9ERUNMLgoKVHVlIEFwciAyMSAxODo1OToxMSAxOTk4ICBCZW5qYW1pbiBLb3NuaWsgIDxia296QHJoaW5vLmN5Z251cy5jb20+CgoJKiBkZWNsLmMgKGR1cGxpY2F0ZV9kZWNscyk6IE9ubHkgY2hlY2sgREVDTF9GUklFTkRfUCBpZiBmdW5jdGlvbi4KClR1ZSBBcHIgMjEgMTQ6MjI6MDAgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogY3AtdHJlZS5oIChpbnRUSV90eXBlX25vZGUsIHVuc2lnbmVkX2ludFRJX3R5cGVfbm9kZSk6IERlY2xhcmUuCgkqIGRlY2wuYyAoaW50VElfdHlwZV9ub2RlLCB1bnNpZ25lZF9pbnRUSV90eXBlX25vZGUpOiBEZWZpbmUuCgkoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBIYW5kbGUgVEkgdHlwZXMuCgkqIHR5cGVjay5jICh1bnNpZ25lZF90eXBlLCBzaWduZWRfdHlwZSk6IEhhbmRsZSBUSSB0eXBlcy4KClNhdCBBcHIgMTggMTU6MjU6MjEgMTk5OCAgSmltIFdpbHNvbiAgPHdpbHNvbkBjeWdudXMuY29tPgoKCSogZysrc3BlYy5jIChsYW5nX3NwZWNpZmljX2RyaXZlcik6IE5ldyBhcmd1bWVudCBpbl9hZGRlZF9saWJyYXJpZXMuCglOZXcgbG9jYWwgYWRkZWRfbGlicmFyaWVzLiAgSW5jcmVtZW50IGNvdW50IHdoZW4gYWRkIGxpYnJhcnkgdG8KCWFyZ2xpc3QuCgpGcmkgQXByIDE3IDIxOjI1OjAwIDE5OTggIE1hcmsgTWl0Y2hlbGwgIDxtbWl0Y2hlbGxAdXNhLm5ldD4KCgkqIGNwLXRyZWUuaCAodHlwZV9hc19zdHJpbmdfcmVhbCk6IE5ldyBmdW5jdGlvbi4KCSogcHQuYyAobWFuZ2xlX2NsYXNzX25hbWVfZm9yX3RlbXBsYXRlKTogVXNlIGl0LgoJKiBlcnJvci5jIChkdW1wX2FnZ3JfdHlwZSk6IENoYW5nZSBwcm90b3R5cGUuCgkoZHVtcF90eXBlX3ByZWZpeCk6IExpa2V3aXNlLgoJKGR1bXBfdHlwZV9zdWZmaXgpOiBMaWtld2lzZS4KCShkdW1wX3R5cGVfcmVhbCk6IENvbnZlcnQgZnJvbSBkdW1wX3R5cGUuICBJZiBkZXNpcmVkLCB0aGUKCSJjYW5vbmljYSIgbmFtZSBvZiBhIHR5cGVkZWYsIGkuZS4sIHRoZSBuYW1lIG9mIHRoZSB1bmRlcmx5aW5nCgl0eXBlLCBjYW4gYmUgcHJpbnRlZC4KCShkdW1wX3R5cGUpOiBDYWxsIGR1bXBfdHlwZV9yZWFsLgoKRnJpIEFwciAxNyAxNDozMDo0NSAxOTk4ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBkZWNsMi5jIChsYW5nX2RlY29kZV9vcHRpb24pOiAtZm5ldy1hYmkgaW1wbGllcyAtZnZ0YWJsZS10aHVua3MuCgoJKiB0eXBlY2suYyAoY29tcF90YXJnZXRfdHlwZXMpOiBUd2VhayBwZWRhbnRpYyBjYXNlLgoJKGNvbXBfdGFyZ2V0X3Bhcm1zKTogVHdlYWsgcGVkYW50aWMgY2FzZS4gIENsZWFuIHVwIHNvbWV3aGF0LgoJUmV0dXJuIC0xIG9yIDEgaW5zdGVhZCBvZiAxIG9yIDIuCgkoY29tcHBhcm1zKTogUmVtb3ZlIFNUUklDVCBoYW5kbGluZy4KCShjb252ZXJ0X2Zvcl9hc3NpZ25tZW50KTogRml4IGhhbmRsaW5nIG9mIHBtZnMuCgpGcmkgQXByIDE3IDE0OjA0OjE2IDE5OTggIE1hcmsgTWl0Y2hlbGwgIDxtbWl0Y2hlbGxAdXNhLm5ldD4KCgkqIHR5cGVjay5jIChjb21wX3RhcmdldF90eXBlcyk6IEhhbmRsZSByZWZlcmVuY2VzIGxpa2UgcG9pbnRlcnMuCgkoY29tcF90YXJnZXRfcGFybXMpOiBOb3RlIHRoYXQgcmV0dXJuIGNvZGUgZnJvbSBjb21wX3RhcmdldF90eXBlcwoJY2FuIGJlIG5lZ2F0aXZlIHRvIGluZGljYXRlIGZhaWx1cmUuCgpGcmkgQXByIDE3IDA5OjEwOjUyIDE5OTggIEFuZHJlYXMgU2Nod2FiICA8c2Nod2FiQGlzc2FuLmluZm9ybWF0aWsudW5pLWRvcnRtdW5kLmRlPgoKCSogTWFrZS1sYW5nLmluIChjKysuYWxsLmJ1aWxkKTogRG9uJ3QgZGVwZW5kIG9uICQoREVNQU5HTEVSX1BST0cpLAoJd2hpY2ggcmVxdWlyZXMgYSB3b3JraW5nIHRhcmdldCBjb21waWxlciB0byBidWlsZC4KCkZyaSBBcHIgMTcgMDg6NTc6MzUgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogdHJlZS5jIChhdm9pZF9vdmVybGFwKTogQWRkIHByb3RvdHlwZS4KCgkqIHNwZXcuYyAobnVtX3Rva2Vucyk6IEFkZCBwcm90b3R5cGUuCgkobnRoX25va2VuLCBhZGRfdG9rZW4sIGNvbnN1bWVfdG9rZW4sIGRlYnVnX3l5Y2hhcik6IExpa2V3aXNlLgoKCSogc2VhcmNoLmMgKGRmc19jaGVja19vdmVybGFwKTogQWRkIHByb3RvdHlwZS4KCShkZnNfbm9fb3ZlcmxhcF95ZXQpOiBMaWtld2lzZS4KCgkqIHB0LmMgKG9yaWdpbmFsX3RlbXBsYXRlKTogQWRkIHByb3RvdHlwZS4KCShpbmxpbmVfbmVlZHNfdGVtcGxhdGVfcGFybXMpOiBMaWtld2lzZS4KCShwdXNoX2lubGluZV90ZW1wbGF0ZV9wYXJtc19yZWN1cnNpdmUpOiBMaWtld2lzZS4KCShyZXRyaWV2ZV9zcGVjaWFsaXphdGlvbiwgcmVnaXN0ZXJfc3BlY2lhbGl6YXRpb24pOiBMaWtld2lzZS4KCShwcmludF9jYW5kaWRhdGVzLCByZWR1Y2VfdGVtcGxhdGVfcGFybV9sZXZlbCk6IExpa2V3aXNlLgoJKGJ1aWxkX3RlbXBsYXRlX2RlY2wsIG1hcmtfdGVtcGxhdGVfcGFybSk6IExpa2V3aXNlLgoJKHRzdWJzdF9mcmllbmRfZnVuY3Rpb24sIGdldF9iaW5kaW5nc19yZWFsKTogTGlrZXdpc2UuCgoJKiBtZXRob2QuYyAoc3RhcnRfc3F1YW5nbGluZyk6IEFkZCBwcm90b3R5cGUuCgkoZW5kX3NxdWFuZ2xpbmcsIGNoZWNrX2t0eXBlLCBpc3N1ZV9rdHlwZSk6IExpa2V3aXNlLgoJKGJ1aWxkX292ZXJsb2FkZWRfc2NvcGVfcmVmLCBjaGVja19idHlwZSk6IExpa2V3aXNlLgoJKGJ1aWxkX21hbmdsZWRfdGVtcGxhdGVfcGFybV9pbmRleCk6IExpa2V3aXNlLgoKCSogbGV4LmMgKGluaXRfY3BwX3BhcnNlKTogQWRkIHByb3RvdHlwZS4KCShoYW5kbGVfY3BfcHJhZ21hLCBoYW5kbGVfc3lzdl9wcmFnbWEpOiBMaWtld2lzZS4KCShyZWR1Y2VfY21wLCB0b2tlbl9jbXApOiBMaWtld2lzZS4KCgkqIGV4Y2VwdC5jIChjYWxsX2VoX2luZm8pOiBBZGQgcHJvdG90eXBlLgoJKHB1c2hfZWhfaW5mbywgZ2V0X2VoX2luZm8sIGdldF9laF92YWx1ZSwgZ2V0X2VoX3R5cGUpOiBMaWtld2lzZS4KCShnZXRfZWhfY2F1Z2h0LCBnZXRfZWhfaGFuZGxlcnMsIGRvX3BvcF9leGNlcHRpb24pOiBMaWtld2lzZS4KCgkqIGRlY2wyLmMgKGlzX25hbWVzcGFjZV9hbmNlc3Rvcik6IEFkZCBwcm90b3R5cGUuCgkobmFtZXNwYWNlX2FuY2VzdG9yLCBhZGRfdXNpbmdfbmFtZXNwYWNlKTogTGlrZXdpc2UuCgkoYW1iaWd1b3VzX2RlY2wpOiBMaWtld2lzZS4KCgkqIGRlY2wuYyAoaW5kZW50KTogQWRkIHByb3RvdHlwZS4KCgkqIGNhbGwuYyAoYWRkX3RlbXBsYXRlX2NhbmRpZGF0ZV9yZWFsKTogQWRkIHByb3RvdHlwZS4KCkZyaSBBcHIgMTcgMDE6NTc6MTIgMTk5OCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZGVjbDIuYyAoYnVpbGRfZXhwcl9mcm9tX3RyZWUpOiBKdXN0IHJldHVybiBhIFBNRi4KCkZyaSBBcHIgMTcgMDA6NDU6MTIgMTk5OCAgTWFyayBNaXRjaGVsbCAgPG1taXRjaGVsbEB1c2EubmV0PgoKCSogdHlwZWNrMi5jIChwcm9jZXNzX2luaXRfY29uc3RydWN0b3IpOiBEb24ndCBzdHJpcCBjdi1xdWFsaWZpZXJzCgl3aGVuIGRvaW5nIGluaXRpYWxpemF0aW9ucy4KCgkqIHB0LmMgKHVuaWZ5KTogVXNlIGNvbXB0eXBlcyB0byBjb21wYXJlIHR5cGUgYXJncy4KCkZyaSBBcHIgMTcgMDA6MjQ6MjIgMTk5OCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZGVjbC5jIChkdXBsaWNhdGVfZGVjbHMpOiBGaXggY2hlY2sgZm9yIHdoZW4gaXQncyBzYWZlIHRvIGZyZWUKCXRoZSBuZXcgZGVjbC4KCgkqIHB0LmMgKG1hbmdsZV9jbGFzc19uYW1lX2Zvcl90ZW1wbGF0ZSk6IERvbid0IHBhc3MgYSB0eXBlZGVmIHR5cGUKCXRvIHR5cGVfYXNfc3RyaW5nLgoKVGh1IEFwciAxNiAxNzo0NzozMCAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBwdC5jIChidWlsZF90ZW1wbGF0ZV9wYXJtX2luZGV4KTogQWRkIHByb3RvdHlwZS4KCgkqIHNlYXJjaC5jIChteV90cmVlX2NvbnMpOiBEb24ndCBjbGVhciB3b3JkcyBvdXRzaWRlIHRoZQoJbmV3bHkgYWxsb2NhdGVkIG5vZGUuCgpXZWQgQXByIDE1IDE1OjM0OjQ0IDE5OTggIERhdmUgQnJvbGxleSAgPGJyb2xsZXlAY3lnbnVzLmNvbT4KCgkqIGxleC5jIChpbml0X3BhcnNlKTogTm93IHJldHVybnMgY2hhciogY29udGFpbmluZyB0aGUgZmlsZW5hbWUuCgpXZWQgQXByIDE1IDEzOjIwOjA2IDE5OTggIEpvaG4gQ2FyciAgPGpmY0BtaXQuZWR1PgoJCQkgIEplZmYgTGF3ICAgPGxhd0BjeWdudXMuY29tPgoKCSogZXJyZm4uYzogUmV3b3JrIHRvIGF2b2lkIHByb2JsZW1zIHdoZW4gSE9TVF9XSURFX0lOVCBpcyBsb25nZXIKCXRoYW4gYSBwb2ludGVyLgoKU3VuIEFwciAxMiAyMjozMToxOSAxOTk4ICBSaWNoYXJkIEtlbm5lciAgPGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1PgoKCSogY3Z0LmMgKGNwX2NvbnZlcnRfdG9fcG9pbnRlcik6IFVzZSBUWVBFX1BSRUNJU0lPTi4KCkZyaSBBcHIgMTAgMTI6MTY6NDkgMTk5OCAgQmVuamFtaW4gS29zbmlrICA8YmtvekBsb29ueS5jeWdudXMuY29tPgoKCSogZGVjbC5jIChkdXBsaWNhdGVfZGVjbHMpOiBEb24ndCB3YXJuIGZvciByZWR1bmRhbnQgZGVjbHMgaWYKIAlmcmllbmQ6IGxldCBhZGRfZnJpZW5kIHRha2UgY2FyZSBvZiBpdC4KClRodSBBcHIgIDkgMDI6NDA6NDggMTk5OCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogc2lnLmMgKGJ1aWxkX3NpZ25hdHVyZV9wb2ludGVyX2NvbnN0cnVjdG9yKTogRG9uJ3Qgc2V0CglUUkVFX0hBU19DT05TVFJVQ1RPUiBmb3IgYSBzaWduYXR1cmUgcG9pbnRlci4KCSogY3Z0LmMgKG9jcF9jb252ZXJ0KTogRG9uJ3QgZm9yY2UgYSB0ZW1wb3JhcnkgZm9yIGludGVybmFsIHN0cnVjdHMuCgkqIGluaXQuYyAocmVzb2x2ZV9vZmZzZXRfcmVmKTogV2FybiBhYm91dCBpbXBsaWNpdCAmIG9uIHBtZnMgCgloZXJlLCB0b28uCgkqIHR5cGVjay5jIChidWlsZF91bmFyeV9vcCk6IE9ubHkgYWxsb3cgdGFraW5nIHRoZSBhZGRyZXNzIG9mIGEgCglyZWFsIGNvbnN0cnVjdG9yLgoJKiB0eXBlY2syLmMgKGRpZ2VzdF9pbml0KTogU2ltcGxpZnkuCgkoc3RvcmVfaW5pdF92YWx1ZSk6IERvbid0IHBlZHdhcm4gYWJvdXQgdXNpbmcgeyB9IGZvciBwbWZzLgoKVGh1IEFwciAgOSAyMjoxNjo1NyAxOTk4ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAY3lnbnVzLmNvbT4KCiAgICAgICAgKiBjcC10cmVlLmggKHN0YXJ0X2RlY2wpOiAgVXBkYXRlIHByb3RvdHlwZS4KICAgICAgICAqIGRlY2wuYyAoc3RhcnRfZGVjbCk6ICBMaWtlIHRoZSBDIHZlcnNpb24sIG5ldyBwYXJhbWV0ZXJzCiAgICAgICAgZm9yIHRoZSBhdHRyaWJ1dGVzLiAgQ2FsbCBjcGx1c19kZWNsX2F0dHJpYnV0ZXMgaGVyZSwKICAgICAgICAocHVzaGRlY2wpOiAgTGlrZSBDIHZlcnNpb24sIGRvIGJ1aWxkX3R5cGVfY29weSBpZiBUWVBFX0RFQ0wsCiAgICAgICAgKGdyb2tkZWNsYXJhdG9yKTogIFBhc3MgTlVMTCBmb3IgbmV3IHN0YXJ0X2RlY2wgYXJndW1lbnRzLgogICAgICAgICogcHQuYyAodHN1YnN0X2V4cHIpOiAgTGlrZXdpc2UuCiAgICAgICAgKiBwYXJzZS55OiAgTWVyZ2UgY3BsdXNfZGVjbF9hdHRyaWJ1dGUgY2FsbHMgaW50byBzdGFydF9kZWNsIGNhbGxzLgoJKiB0eXBlY2suYyAoY29tbW9uX3R5cGUpOiBDaGVjayBUWVBFX01BSU5fVkFSSUFOVC4KCSogbGV4LmMgKGJ1aWxkX2xhbmdfZGVjbCk6IEFkZCBsYW5nX25hbWVfamF2YS4KCSogY2xhc3MuYyAocHVzaF9sYW5nX2NvbnRleHQpOiBBZGQgbGFuZ19uYW1lX2phdmEuCgkqIG1ldGhvZC5jIChidWlsZF9tYW5nbGVkX25hbWUpOiBDaGVjayBmb3IgaXNfamF2YV90eXBlLgoKVGh1IEFwciAgOSAyMjoxNjo1NyAxOTk4ICBCZW5qYW1pbiBLb3NuaWsgIDxia296QGxvb255LmN5Z251cy5jb20+CgoJKiBkZWNsLmMgKGdyb2tkZWNsYXJhdG9yKTogQ2hlY2sgVFlQRV9NQUlOX1ZBUklBTlQuCgkqIGNhbGwuYyAoYnVpbGRfc2NvcGVkX21ldGhvZF9jYWxsKTogQ2hlY2sgZm9yIFRSRUVfQ09ERSBmb3IKCVZPSURfVFlQRSBpbnN0ZWFkIG9mIHR5cGUgPT0gIHZvaWRfdHlwZV9ub2RlLgoJKGJ1aWxkX21ldGhvZF9jYWxsKTogRGl0dG8uCgkqIGRlY2wuYyAobG9va3VwX25hbWVfcmVhbCk6IERpdHRvLgoJKGdyb2tkZWNsYXJhdG9yKTogRGl0dG8uCgkoc3RhcnRfZGVjbCk6IERpdHRvLgoJKGdyb2twYXJtcyk6IERpdHRvLgoJKHN0YXJ0X2Z1bmN0aW9uKTogRGl0dG8uCgkoZmluaXNoX2Z1bmN0aW9uKTogRGl0dG8uCgkoc3RhcnRfbWV0aG9kKTogRGl0dG8uCgpUaHUgQXByICA5IDAwOjE4OjQ0IDE5OTggIERhdmUgQnJvbGxleSAgKGJyb2xsZXlAY3lnbnVzLmNvbSkKCgkqIGxleC5jIChmaW5wdXQpOiBOZXcgdmFyaWFibGUuCgkoaW5pdF9jcHBfcGFyc2UpOiAgUmVuYW1lZCBmcm9tIGluaXRfcGFyc2UuCgkoaW5pdF9wYXJzZSk6IEhhbmRsZSAhVVNFX0NQUExJQi4gIENhbGwgaW5pdF9jcHBfcGFyc2Ugd2hlbiBmaW5pc2hlZC4KCShmaW5pc2hfcGFyc2UpOiBOZXcgZnVuY3Rpb24uCgkqIGNwLXRyZWUuaCAoaW5pdF9sZXgsIGluaXRfcGFyc2UpOiBSZW1vdmUgZGVjbGFyYXRpb25zLgoKTW9uIEFwciAgNiAwMjoyNTowNSAxOTk4ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjYWxsLmMgKGJ1aWxkX2NhbGwpOiBTdGlsbCBldmFsdWF0ZSB0aGUgYWN0dWFsIGFyZ3VtZW50LgoJKiBjbGFzcy5jIChpc19lbXB0eV9jbGFzcyk6IFVwZGF0ZSBmb3IgLWZuZXctYWJpLgoKCSogZGVjbDIuYzogLWZuZXctYWJpIGltcGxpZXMgLWZzcXVhbmdsZS4KCgkqIG1ldGhvZC5jIChkb19idWlsZF9hc3NpZ25fcmVmKTogRG9uJ3QgZG8gYW55dGhpbmcgdG8gY29weQoJYW4gZW1wdHkgY2xhc3MuCgkoZG9fYnVpbGRfY29weV9jb25zdHJ1Y3Rvcik6IExpa2V3aXNlLgoJKiBjYWxsLmMgKGJ1aWxkX292ZXJfY2FsbCk6IExpa2V3aXNlLgoKU2F0IEFwciAgNCAxODo0Mzo1OCAxOTk4ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiB0cmVlLmMgKGF2b2lkX292ZXJsYXApOiBSZXR1cm4gYSB2YWx1ZS4KClNhdCBBcHIgIDQgMTI6NTI6MzUgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogbWV0aG9kLmMgKGNoZWNrX2J0eXBlKTogQWRkIG1pc3NpbmcgYXJndW1lbnQgdG8geHJlYWxsb2MuCgkoY2hlY2tfa3R5cGUpOiBMaWtld2lzZS4KCkZyaSBBcHIgIDMgMDI6MjI6NTkgMTk5OCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCUltcGxlbWVudCBlbXB0eSBiYXNlIG9wdGltaXphdGlvbi4KCSogY2xhc3MuYyAoZmluaXNoX3N0cnVjdF8xKTogQWRkIHZiYXNlIGZpZWxkcyBlYXJsaWVyLiAgU2V0IAoJQ0xBU1NUWVBFX1NJWkUgb2YgYW4gZW1wdHkgYmFzZSB0byAwLiAgVHlwZXMgd2l0aCBiYXNlcyBjYW4gYmUgZW1wdHkuCgkqIHNlYXJjaC5jIChkZnNfY2hlY2tfb3ZlcmxhcCwgZGZzX25vX292ZXJsYXBfeWV0KTogTmV3IGZucy4KCSh0eXBlc19vdmVybGFwX3ApOiBOZXcgZm4uCgkqIHRyZWUuYyAoYXZvaWRfb3ZlcmxhcCk6IE5ldyBmbi4KCShidWlsZF9iYXNlX2ZpZWxkcyk6IFVzZSBpdCB0byBhdm9pZCBvdmVybGFwcGluZyBlbXB0eSBiYXNlcy4KCSogY3AtdHJlZS5oLCBkZWNsMi5jLCBsYW5nLW9wdGlvbnMuaDogQWRkIC1mbmV3LWFiaS4KCgkqIGRlY2wuYyAoY3BsdXNfZXhwYW5kX2V4cHJfc3RtdCk6IFN0cmlwIHVudXNlZCBJTkRJUkVDVF9SRUZzLgoKCVJlLWltcGxlbWVudCBhbGxvY2F0aW9uIG9mIGJhc2UgY2xhc3Mgc3Vib2JqZWN0cy4KCSogdHJlZS5jICh1bnNoYXJlX2Jhc2VfYmluZm9zKTogTmV3IGZuLgoJKGxheW91dF9iYXNldHlwZXMpOiBVc2UgaXQuICBOb3cgaGFuZGxlcyBvZmZzZXRzIG9mIGJvdGggdmlydHVhbCBhbmQKCW5vbi12aXJ0dWFsIGJhc2VzLCBhZnRlciBsYXlvdXRfdHlwZS4KCShsYXlvdXRfdmJhc2V0eXBlcyk6IFJlbW92ZS4KCShidWlsZF9iYXNlX2ZpZWxkcyk6IEdlbmVyYXRlIEZJRUxEX0RFQ0xzIGZvciBlYWNoIG5vbi12aXJ0dWFsIGJhc2UuCgkoYnVpbGRfdmJhc2VfcG9pbnRlcl9maWVsZHMpOiBTcGxpdCBvdXQgZnJvbSBvbGQgbGF5b3V0X2Jhc2V0eXBlcy4KCSogY2xhc3MuYyAoZmluaXNoX2Jhc2Vfc3RydWN0KTogTG9zZSBvZmZzZXQgaGFuZGxpbmcgY29kZS4KCU1vdmUgbm9udmR0b3Igd2FybmluZyBoZXJlLiAgRG9uJ3QgbWVzcyB3aXRoIHRfYmluZm8gYW55bW9yZS4KCShmaW5pc2hfc3RydWN0XzEpOiBEb24ndCBtZXNzIHdpdGggdF9iaW5mbyBhbnltb3JlLiAgVXNlIGZucyBhYm92ZS4KCSogY3AtdHJlZS5oOiBBZGp1c3QuCgpUaHUgQXByICAyIDE0OjI1OjEzIDE5OTggIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGNwLXRyZWUuaDogTG9zZSBDTEFTU1RZUEVfVkJBU0VfU0laRSwgc29tZSB1bnVzZWQgc3R1ZmYuCgkqIGRlY2wuYywgZGVjbDIuYywgcHQuYywgcHRyZWUuYywgbGV4LmM6IExpa2V3aXNlLgoJKiBjbGFzcy5jIChkdXBsaWNhdGVfdGFnX2Vycm9yKTogTGlrZXdpc2UuCgkoZmluaXNoX3N0cnVjdF8xKTogU2V0IENMQVNTVFlQRV9TSVpFLCBDTEFTU1RZUEVfTU9ERSwgQ0xBU1NUWVBFX0FMSUdOLgoJKiB0cmVlLmMgKGxheW91dF92YmFzZXR5cGVzKTogVXBkYXRlIGZyb20gbGF5b3V0X3JlY29yZCwgcmVtb3ZlCgl2YXJfc2l6ZSBzdXBwb3J0LCB1c2UgQ0xBU1NUWVBFX1NJWkUgaW5zdGVhZCBvZiBDTEFTU1RZUEVfVkJBU0VfU0laRS4KCShsYXlvdXRfYmFzZXR5cGVzKTogTGlrZXdpc2UuCgpXZWQgQXByICAxIDE4OjIyOjI1IDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGNsYXNzLmMsIE1ha2Ugc3VyZSBzeXN0ZW0uaCBpcyBpbmNsdWRlZCBqdXN0IGFmdGVyIGNvbmZpZy5oLgoJRGVsZXRlIGxpbmdlcmluZyBzdGRpbyBhbmQgZXJybm8gcmVmZXJlbmNlcyB0b28uCgkqIGRlY2wuYywgZXJyZm4uYywgcGFyc2UueSwgcHRyZWUuYyBzZWFyY2guYywgeHJlZi5jOiBMaWtld2lzZS4KCQpXZWQgQXByICAxIDE1OjM4OjM2IDE5OTggIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGZyaWVuZC5jIChpc19mcmllbmQpOiBGaXggYWNjZXNzIGNvbnRyb2wgZm9yIGxvY2FsIGNsYXNzZXMuCgoJKiBjbGFzcy5jIChpc19lbXB0eV9jbGFzcyk6IE5ldyBmbi4KCSogY2FsbC5jIChidWlsZF9jYWxsKTogRG9uJ3QgcGFzcyBlbXB0eSBjbGFzcyBvYmplY3RzIHRvIGEgZnVuY3Rpb24uCgpXZWQgQXByICAxIDE0OjU4OjM1IDE5OTggIE1hcmsgTWl0Y2hlbGwgIDxtbWl0Y2hlbGxAdXNhLm5ldD4KCgkqIGNhbGwuYyAoYnVpbGRfb3Zlcl9jYWxsKTogRG8gbmFtZSByZXNvbHV0aW9uIGZvciBkZWZhdWx0Cglhcmd1bWVudHMgb2YgZnVuY3Rpb24gdGVtcGxhdGVzIGluIHRoZSBzY29wZSBvZiB0aGUgdGVtcGxhdGVzLgoKVHVlIE1hciAzMSAxMzo0Mzo1NyAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBjYWxsLmM6IEluY2x1ZGUgc3lzdGVtLmguICBSZW1vdmUgaW5jbHVkZXMsIGRlY2xhcmF0aW9ucyBhbmQKCWRlZmluZXMgcHJvdmlkZWQgYnkgc3lzdGVtLmguCgkqIGNsYXNzLmMsIGN2dC5jLCBkZWNsLmMsIGRlY2wyLmMsIGVycmZuLmMgZXJyb3IuYzogTGlrZXdpc2UuCgkqIGV4Y2VwdC5jLCBleHByLmMgZnJpZW5kLmMsIGcrK3NwZWMuYywgaW5pdC5jLCBpbnB1dC5jOiBMaWtld2lzZS4KCSogbGV4LmMsIHBhcnNlLnksIHB0LmMsIHB0cmVlLmMgcmVwby5jIHJ0dGkuYywgc2VhcmNoLmM6IExpa2V3aXNlLgoJKiBzZW1hbnRpY3MuYywgc2lnLmMsIHNwZXcuYywgdHJlZS5jLCB0eXBlY2suYzogTGlrZXdpc2UuCgkqIHR5cGVjazIuYywgeHJlZi5jOiBMaWtld2lzZS4KCSogTWFrZWZpbGUuaW46IERlcGVuZGVuY2llcyB1cGRhdGVkIGFzIGFwcHJvcHJpYXRlLgoJKiBNYWtlLWxhbmcuaW46IExpa2V3aXNlLgoKTW9uIE1hciAzMCAxMjoxNTowMCAxOTk4ICBNYXJrIE1pdGNoZWxsICA8bW1pdGNoZWxsQHVzYS5uZXQ+CgogCSogcHQuYyAoZm5fdHlwZV91bmlmaWNhdGlvbik6IEFsbG93IGluY29tcGxldGUgdW5pZmljYXRpb24gd2l0aG91dCAKCWFuIGltbWVkaWF0ZSBlcnJvciBtZXNzYWdlLgoKTW9uIE1hciAzMCAwODo1NTo0MiAxOTk4ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiB0cmVlLmMgKG1lbWJlcl9wKTogTmV3IGZuLgoJKiBkZWNsMi5jIChmaW5pc2hfZmlsZSk6IE9ubHkgc2V0IERFQ0xfU1RBVElDX0ZVTkNUSU9OX1AgZm9yCglpbml0aWFsaXppbmcgY2xhc3MgbWVtYmVycy4KCgkqIGNwLXRyZWUuZGVmIChURU1QTEFURV9QQVJNX0lOREVYKTogQ2xhc3MgJ3gnLgoJKiBwdHJlZS5jIChsYW5nX3ByaW50X3hub2RlKTogSGFuZGxlIFRFTVBMQVRFX1BBUk1fSU5ERVguCgoJKiBjYWxsLmMgKGJ1aWxkX21ldGhvZF9jYWxsKTogSGFuZGxlIG5vbi1zY29wZWQgZGVzdHJ1Y3RvcnMsIHRvby4KCSogcHQuYyAodHN1YnN0X2NvcHkpOiBMaWtld2lzZS4KCgkqIHB0LmMgKHByaW50X3RlbXBsYXRlX2NvbnRleHQpOiBTcGxpdCBvdXQuLi4KCShwdXNoX3RpbnN0X2xldmVsKTogLi4uZnJvbSBoZXJlLgoKCSogZnJpZW5kLmMgKGlzX2ZyaWVuZCk6IERvbid0IHBhc3MgYSB0eXBlIHRvIGRlY2xfZnVuY3Rpb25fY29udGV4dC4KCgkqIHR5cGVjay5jIChjb252ZXJ0X2Zvcl9pbml0aWFsaXphdGlvbik6IEFsd2F5cyBoYW5kIG9mZgoJY29udmVyc2lvbnMgdG8gY2xhc3MgdHlwZS4KClN1biBNYXIgMjkgMjA6MDE6NTkgMTk5OCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZnJpZW5kLmMgKGlzX2ZyaWVuZCk6IExvY2FsIGNsYXNzZXMgaGF2ZSB0aGUgc2FtZSBhY2Nlc3MgYXMgdGhlCgllbmNsb3NpbmcgZnVuY3Rpb24uCgpTdW4gTWFyIDI5IDAwOjQ3OjMyIDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHR5cGVjay5jIChleHBhbmRfdGFyZ2V0X2V4cHIpOiBEZWxldGUgZGVhZCBmdW5jdGlvbi4KCgkqIHNlYXJjaC5jOiBQdXQgdmFyaW91cyBwcm90b3R5cGVzIGluc2lkZSAjaWZkZWYgTUlfTUFUUklYLgoKCSogcmVwby5jIChzYXZlX3N0cmluZyk6IERlbGV0ZSBkZWFkIGZ1bmN0aW9uLgoKCSogbWV0aG9kLmMgKHRodW5rX3ByaW50YWJsZV9uYW1lKTogRGVsZXRlIGRlYWQgZnVuY3Rpb24uCgoJKiBsZXguYyAoeXluZXh0Y2gpOiBEZWxldGUgZGVhZCBmdW5jdGlvbi4KCgkqIGV4cHIuYyAodHJlZV9leHRyYWN0X2FnZ3JfaW5pdCk6ICNpZiAwIG91dC4KCgkqIGV4Y2VwdC5jIChkb191bndpbmQpOiBEZWxldGUgZGVhZCBmdW5jdGlvbi4KCShlYXN5X2V4cGFuZF9hc20pOiBMaWtld2lzZS4KCgkqIGN2dC5jIChidWlsZF9jb252ZXJzaW9uX3R5cGVfMSk6IERlbGV0ZSBkZWFkIGZ1bmN0aW9uLgoKCSogY3AtdHJlZS5oIChwdXNoX2V4cHJlc3Npb25fb2JzdGFjayk6IERlY2xhcmUuCgoJKiBjYWxsLmMgKHNvdXJjZV90eXBlKTogI2lmIDAgb3V0LgoKCSogY2xhc3MuYyAoYWx0ZXJfYWNjZXNzKTogUmVtb3ZlIHVudXNlZCBsYWJlbC4gIEFkZCBicmFjZXMKCWFyb3VuZCBlbXB0eSBlbHNlIGNsYXVzZS4KCgkqIGxleC5jICh5eXByaW50KTogRml4IGFyZ3VtZW50IHRvIHByaW50Zi4KClNhdCBNYXIgMjggMTc6NDM6NTIgMTk5OCAgTWFyayBNaXRjaGVsbCAgPG1taXRjaGVsbEB1c2EubmV0PgoKCSogcHQuYyAodHN1YnN0KTogQ2xlYXIgVFJFRV9VU0VEIGZvciBuZXcgRlVOQ1RJT05fREVDTHMuCgoJKiBwdC5jIChpbnN0YW50aWF0ZV9jbGFzc190ZW1wbGF0ZSk6IE1ha2Ugc3VyZSB0ZW1wbGF0ZQoJYXJndW1lbnRzIGFyZSBwZXJtYW5lbnQuCgkqIGluaXQuYyAocmVzb2x2ZV9vZmZzZXRfcmVmKTogRG9uJ3QgZ28gbG9va2luZyBhcm91bmQgaW4KCXRlbXBsYXRlIHR5cGVzLgoKCSogc2VtYW50aWNzLmM6IEFkZCByb3V0aW5lcyB0byBoYW5kbGUgZXhwcmVzc2lvbnMsIGFuZCBzb21lCglkZWNsYXJhdGlvbiBwcm9jZXNzaW5nLgoJKiBwYXJzZS55OiBVc2UgdGhlbS4KCShjdXJyZW50X2NsYXNzX2RlcHRoKTogTW92ZSBkZWNsYXJhdGlvbiB0byBjcC10cmVlLmguCgkqIHBhcnNlLmM6IFJlZ2VuZXJhdGVkLgoJKiBjcC10cmVlLmg6IFVzZSB0aGVtLgoJKGN1cnJlbnRfY2xhc3NfZGVwdGgpOiBEZWNsYXJlLgoJKiBwdC5jICh0c3Vic3RfY29weSk6IFVzZSBiZWdpbl9zdG10X2V4cHIgYW5kIGZpbmlzaF9zdG10X2V4cHIuCgpGcmkgTWFyIDI3IDIwOjIzOjE4IDE5OTggIE1hcmsgTWl0Y2hlbGwgIDxtbWl0Y2hlbGxAdXNhLm5ldD4KCgkqIGVycm9yLmMgKGR1bXBfZGVjbCk6IEJlIGEgYml0IG1vcmUgZXhwbGljaXQgd2l0aCB0ZW1wbGF0ZQoJdHlwZSBhcmd1bWVudHMsIHdoZW4gdmVyYm9zZS4KCQpGcmkgTWFyIDI3IDE4OjE2OjQwIDE5OTggIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGluYy9leGNlcHRpb246IFJlb3JkZXIgY2xvc2luZyBicmFjZXMuCgpGcmkgTWFyIDI3IDEzOjIyOjE4IDE5OTggIE1hcmsgTWl0Y2hlbGwgIDxtbWl0Y2hlbGxAdXNhLm5ldD4KCgkqIHB0LmMgKHJlZGVjbGFyZV9jbGFzc190ZW1wbGF0ZSk6IE5ldyBmdW5jdGlvbi4KCSogY3BfdHJlZS5oIChyZWRlY2xhcmVfY2xhc3NfdGVtcGxhdGUpOiBEZWNsYXJlIGl0LgoJKiBkZWNsLmMgKHhyZWZfdGFnKTogVXNlIGl0LgoKVGh1IE1hciAyNiAxMToxNjozMCAxOTk4ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjYWxsLmMgKGJ1aWxkX292ZXJfY2FsbCk6IENoZWNrIElTX0FHR1JfVFlQRSwgbm90IAoJVFlQRV9MQU5HX1NQRUNJRklDLgoJKiB0eXBlY2suYyAoY29udmVydF9hcmd1bWVudHMpOiBMaWtld2lzZS4KCgkqIGRlY2wuYyAoZ3Jva2RlY2xhcmF0b3IpOiBSZW1vdmUgY29uc3QgYW5kIHZvbGF0aWxlIGZyb20gdHlwZSBhZnRlcgoJc2V0dGluZyBjb25zdHAgYW5kIHZvbGF0aWxlcC4KCgkqIGNsYXNzLmMgKGZpbmlzaF9zdHJ1Y3RfMSk6IERvbid0IHdhcm4gYWJvdXQgYm9vbCBiaXRmaWVsZCBsYXJnZXIKCXRoYW4gb25lIGJpdC4KClRodSBNYXIgMjYgMTA6MjU6NTIgMTk5OCAgTWFyayBNaXRjaGVsbCAgPG1taXRjaGVsbEB1c2EubmV0PgoKCSogcHQuYyAoY29udmVydF9ub250eXBlX2FyZ3VtZW50KTogU1RSSVBfTk9QUyB3aGVyZSBhcHByb3ByaWF0ZS4KClRodSBNYXIgMjYgMTA6MjQ6MDUgMTk5OCAgTWFyayBNaXRjaGVsbCAgPG1taXRjaGVsbEB1c2EubmV0PgoKCSogY2FsbC5jIChidWlsZF9vYmplY3RfY2FsbCk6IENvbXBsYWluIGFib3V0IGFtYmlndW91cyBvcGVyYXRvcigpLAoJcmF0aGVyIHRoYXQgY3Jhc2hpbmcuCgkoYnVpbGRfbmV3X29wKTogTGlrZXdpc2UuCgkoYnVpbGRfb3BfZGVsZXRlX2NhbGwpOiBMaWtld2lzZS4KClRodSBNYXIgMjYgMTA6MjM6MjQgMTk5OCAgTWFyayBNaXRjaGVsbCAgPG1taXRjaGVsbEB1c2EubmV0PgoKCSogY3Z0LmMgKHBlcmZvcm1fcXVhbGlmaWNhdGlvbl9jb252ZXJzaW9ucyk6IFVzZSBjb21wX3RhcmdldF90eXBlcwoJaW5zdGVhZCBvZiBjb21wX3B0cl90dHlwZXMuCgpXZWQgTWFyIDI1IDE2OjEwOjUwIDE5OTggIE1hcmsgTWl0Y2hlbGwgIDxtbWl0Y2hlbGxAdXNhLm5ldD4KCgkqIGNwLXRyZWUuaCAoZW5mb3JjZV9hY2Nlc3MpOiBEZWNsYXJlLgoJKiBjYWxsLmMgKGVuZm9yY2VfYWNjZXNzKTogTWFrZSBpdCBleHRlcm4sIG5vdCBzdGF0aWMuCgkqIGNsYXNzLmMgKGFsdGVyX2FjY2Vzcyk6IFVzZSBlbmZvcmNlX2FjY2VzczsgbW9kaWZ5IGNvZGUgZm9yIElTTwoJY29tcGxpYW5jZSwgcmF0aGVyIHRoYW4gQVJNIHJ1bGVzLgoKV2VkIE1hciAyNSAxMjoxMDo0NSAxOTk4ICBLcmlhbmcgTGVyZHN1d2FuYWtpaiAgPGxlcmRzdXdhQHNjZi51c2MuZWR1PgoKCSogY3AtdHJlZS5oOiBGaXggdHlwby4KCldlZCBNYXIgMjUgMDI6MDE6MDIgMTk5OCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZXhwci5jIChjcGx1c19leHBhbmRfZXhwcik6IE9ubHkgZG8gUENDX1NUQVRJQ19TVFJVQ1RfUkVUVVJOIHRoaW5nCglpZiAoYWdncmVnYXRlX3ZhbHVlX3AgKHR5cGUpKS4KCgkqIGRlY2wyLmMgKGNvbnN0cnVjdG9yX25hbWVfZnVsbCk6IEhhbmRsZSBUWVBFTkFNRV9UWVBFLgoKVHVlIE1hciAyNCAxNjoxMjowMSAxOTk4ICBNYXJrIE1pdGNoZWxsICA8bW1pdGNoZWxsQHVzYS5uZXQ+CgoJKiB0cmVlLmMgKG1hcGNhcik6IFdoZW4gZGVhbGluZyB3aXRoIGEgREVDTCwgdXNlIGl0J3MgY29uc3RhbnQKCXZhbHVlLCBpZiBhbnkuCgkqIHB0LmMgKGxvb2t1cF90ZW1wbGF0ZV9jbGFzcyk6IERvbid0IG1hbmdsZSB0aGUgbmFtZXMgb2YgdGVtcGxhdGUKCWNsYXNzZXMgd2hvc2UgYXJndW1lbnRzIGFyZSB1bmtub3duLgoKCSogcHQuYyAodHN1YnN0X2V4cHIpOiBIYW5kbGUgR09UT19TVE1UIGNvcnJlY3RseS4KClR1ZSBNYXIgMjQgMTI6MjE6NTUgMTk5OCAgQmVuamFtaW4gS29zbmlrICA8YmtvekBsaXNhLmN5Z251cy5jb20+CgoJKiBkZWNsLmMgKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogU2V0IFRZUEVfUFJFQ0lTT04gZm9yIGJvb2xzIHRvIDEuCgpUdWUgTWFyIDI0IDEyOjIxOjQ4IDE5OTggIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KCiAgICAgICAgKiBkZWNsLmMgKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogSW5pdGlhbGl6ZSBUWVBFX01BWF9WQUxVRSBmb3IKICAgICAgICBib29sZWFuX3R5cGVfbm9kZSB0byAxLgoKVHVlIE1hciAyNCAxMDoyMzo0NyAxOTk4ICBNYXJrIE1pdGNoZWxsICA8bW1pdGNoZWxsQHVzYS5uZXQ+CgoJKiBlcnJvci5jIChkdW1wX2V4cHIpOiBSZW1vdmUgdW51c2VkIHZhcmlhYmxlIGBsJy4KCgkqIHB0LmMgKGZvcl9lYWNoX3RlbXBsYXRlX3Bhcm0pOiBOZXcgZnVuY3Rpb24sIGNyZWF0ZWQgYnkKCWNvbnZlcnRpbmcgdXNlc190ZW1wbGF0ZV9wYXJtcy4KCSh0cmVlX2ZuX3QpOiBOZXcgdHlwZWRlZi4KCSh1c2VzX3RlbXBsYXRlX3Bhcm1zKTogVXNlIGl0LgoJKG1hcmtfdGVtcGxhdGVfcGFybSk6IE5ldyBmdW5jdGlvbi4KCShwdXNoX3RlbXBsYXRlX2RlY2wpOiBDaGVjayB0aGF0IHRoZSBhcmd1bWVudCBsaXN0IG9mIGEgcGFydGlhbAoJc3BlY2lhbGl6YXRpb24gdXNlcyBhbGwgdGhlIHRlbXBsYXRlIHBhcmFtZXRlcnMuCgoJKiBNYWtlLWxhbmcuaW4gKGMrK2ZpbHQpOiBEb24ndCBkZWxldGUgY3h4bWFpbi5jIGFmdGVyIHdlJ3JlIGRvbmUKCXdpdGggaXQ7IHdlIG1pZ2h0IHdhbnQgaXQgZm9yIGRlYnVnZ2luZy4KCSogY3AtdHJlZS5oICh0eXBlX3VuaWZpY2F0aW9uKTogQ2hhbmdlIGludGVyZmFjZS4KCSogY2xhc3MuYyAoZmluaXNoX3N0cnVjdF8xKTogU2tpcCBuZXN0ZWQgdGVtcGxhdGUgdHlwZXMsIGp1c3QgbGlrZQoJb3JkaW5hcnkgbmVzdGVkIHR5cGVzLgoJKGluc3RhbnRpYXRlX3R5cGUpOiBVc2UgbmV3IGludGVyZmFjZSB0byB0eXBlX3VuaWZpY2F0aW9uLgoJKiBsZXguYyAoaW5pdF9sZXgpOiBBZGQgX19zeiBhcyBvcG5hbWUgZm9yIHNpemVvZi4KCSogbWV0aG9kLmMgKGJ1aWxkX292ZXJsb2FkX3Njb3BlX3JlZik6IE5ldyBmdW5jdGlvbi4KCShidWlsZF9vdmVybG9hZF9pbnQpOiBIYW5kbGUgY29tcGxleCBleHByZXNzaW9ucy4gIFNldAoJbnVtZXJpY19vdXRwdXRfbmVlZF9iYXIgaWYgbmVjZXNzYXJ5LgoJKGJ1aWxkX292ZXJsb2FkX3ZhbHVlKTogSGFuZGxlIG5vbi1QQVJNX0RFQ0wgbm9kZXM7IHRoaXMKCXJvdXRpbmUgaXMgbm93IHVzZWQgYnkgYnVpbGRfb3ZlcmxvYWRfaW50LiAgUmVtb3ZlIHNvbWUKCWFzc2lnbm1lbnRzIHRvIG51bWVyaWNfb3V0cHV0X25lZWRfYmFyLiAgVXNlCglidWlsZF9vdmVybG9hZF9zY29wZV9yZWYuCgkoYnVpbGRfcXVhbGlmaWVkX25hbWUpOiBOb3RlIHRoYXQgc29tZSB0ZW1wbGF0ZSBtYW5nbGVkIG5hbWVzIGVuZAoJd2l0aCBkaWdpdHMsIGFuZCBzZXQgbnVtZXJpY19vdXRwdXRfbmVlZF9iYXIgYXBwcm9wcmlhdGVseS4gIFVzZQoJYnVpbGRfdW5kZXJzY29yZV9pbnQuCgkqIHB0LmMgKHVuaWZ5KTogQ2hhbmdlIGludGVyZmFjZS4KCSh0eXBlX3VuaWZpY2F0aW9uX3JlYWwpOiBMaWtld2lzZS4KCShkZXRlcm1pbmVfc3BlY2lhbGl6YXRpb24pOiBVc2UgbmV3IGludGVyZmFjZXMuCgkodHN1YnN0KTogRGVhbCBncmFjZWZ1bGx5IHdpdGggc2l0dWF0aW9ucyBpbiB3aGljaCB0aGUgYXJndW1lbnQKCXZlY3RvciBpcyBub3QgZnVsbHkgZmlsbGVkLgoJKGZuX3R5cGVfdW5pZmljYXRpb24pOiBVc2UgbmV3IGludGVyZmFjZXMuCgkodHlwZV91bmlmaWNhdGlvbik6IExpa2V3aXNlLiAgUmVtb3ZlIE5PUF9FWFBSIGhhY2suCgkodHlwZV91bmlmaWNhdGlvbl9yZWFsKTogTGlrZXdpc2UuCgkodW5pZnkpOiBMaWtld2lzZS4gIERlYWwgd2l0aCB1bmlmaWNhdGlvbiBvZiBjb21wbGV4IGV4cHJlc2lvbnMuCgpNb24gTWFyIDIzIDEyOjI0OjM3IDE5OTggIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHB0LmMgKGNvbXBsZXRlX3RlbXBsYXRlX2FyZ3MpOiBJbml0aWFsaXplIHNraXAgcHJvcGVybHkuCgoJKiBkZWNsLmMgKG1ha2VfdHlwZW5hbWVfdHlwZSk6IFJldmVydC4KCShtYWtlX2ltcGxpY2l0X3R5cGVuYW1lKTogUmVtb3ZlLgoJKGxvb2t1cF9uYW1lX3JlYWwpOiBEb24ndCBjYWxsIGl0LiAgQ2FsbCBsb29rdXBfZmllbGQgaWYgd2Ugc2VlIGEKCVRZUEVfREVDTCBmcm9tIGEgdGVtcGxhdGUgYmFzZS4KCSogc2VhcmNoLmMgKGxvb2t1cF9maWVsZCk6IERvIGltcGxpY2l0IHR5cGVuYW1lIHN0dWZmLgoKU3VuIE1hciAyMiAwMDo1MDo0MiAxOTk4ICBOaWNrIENsaWZ0b24gIDxuaWNrY0BjeWdudXMuY29tPgogICAgICAgICAgICAgICAgICAgICAgICAgIEdlb2ZmIE5vZXIgICAgPG5vZXJAY3lnbnVzLmNvbT4KCgkqIE1ha2VmaWxlLmluOiBWYXJpb3VzIGZpeGVzIGZvciBidWlsZGluZyBjeWd3aW4zMiBuYXRpdmUgdG9vbGNoYWlucy4KCSogTWFrZS1sYW5nLmluOiBMaWtld2lzZS4KCkZyaSBNYXIgMjAgMTg6MDc6MzkgMTk5OCAgS3JpYW5nIExlcmRzdXdhbmFraWogIDxsZXJkc3V3YUBzY2YudXNjLmVkdT4KCgkqIHB0LmMgKHRzdWJzdCwgVEVNUExBVEVfVEVNUExBVEVfUEFSTSk6IFNpbXBsaWZ5LgoKRnJpIE1hciAyMCAxMDo0MjowNyAxOTk4ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBkZWNsLmMgKG1ha2VfaW1wbGljaXRfdHlwZW5hbWUpOiBSZXdyaXRlIHJlbW92ZWQgY29kZS4KCShtYWtlX3R5cGVuYW1lX3R5cGUpOiBDYWxsIGl0IGlmIHRoZSB0eXBlIHdlIGxvb2sgdXAgY29tZXMgZnJvbQoJYSBiYXNlIHRoYXQgdXNlcyB0ZW1wbGF0ZSBwYXJtcy4KCgkqIHB0LmMgKGNvbXBsZXRlX3RlbXBsYXRlX2FyZ3MpOiBSZXdyaXRlLgoJKHRzdWJzdCwgRlVOQ1RJT05fREVDTCk6IFVzZSBpdC4KCkZyaSBNYXIgMjAgMDg6MTI6NDMgMTk5OCAgSC5KLiBMdSAgKGhqbEBnbnUub3JnKQoKCSogc2VtYW50aWNzLmMgKGZpbmlzaF9hc21fc3RtdCk6IEZpeCBjb21iaW5lIHN0cmluZ3MuIENhbGwKCWNfZXhwYW5kX2FzbV9vcGVyYW5kcyAoKSBpZiBvdXRwdXRfb3BlcmFuZHMsIGlucHV0X29wZXJhbmRzIG9yCgljbG9iYmVycyBpcyBub3QgTlVMTF9UUkVFLgoKRnJpIE1hciAyMCAwMDoxMDoxOSAxOTk4ICBLcmlhbmcgTGVyZHN1d2FuYWtpaiAgPGxlcmRzdXdhQHNjZi51c2MuZWR1PgoKCSogcHQuYyAoY29tcGxldGVfdGVtcGxhdGVfYXJncyk6IE5ldyBmdW5jdGlvbi4KCShnZXRfYmluZGluZ3MpOiBEZWFsIHdpdGggc3BlY2lhbGl6YXRpb25zIG9mIGZ1bmN0aW9uIHRlbXBsYXRlcwoJd2l0aCByZXR1cm4gdHlwZSBjb250YWluaW5nIHBhcmFtZXRlcnMgZnJvbSBvdXRlciBjbGFzcyAKCXRlbXBsYXRlcy4KCSh0c3Vic3QsIFRFTVBMQVRFX1RFTVBMQVRFX1BBUk0pOiBXaGVuIHJlZHVjaW5nIHBhcmFtZXRlciBsZXZlbCwKCXN1YnN0aXR1dGUgYXJndW1lbnRzIGFuZCBjb21wb3NlIGEgbmV3IHR5cGUuCgpUaHUgTWFyIDE5IDE5OjAxOjQ4IDE5OTggIE1hcmsgTWl0Y2hlbGwgIDxtbWl0Y2hlbGxAdXNhLm5ldD4KCgkqIHB0LmMgKHRzdWJzdCk6IENsZWFyIERFQ0xfUEVORElOR19JTkxJTkVfSU5GTyBmb3IgbmV3CglGVU5DVElPTl9ERUNMcy4KClRodSBNYXIgMTkgMTE6NTE6NTggMTk5OCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZGVjbC5jIChtYWtlX2ltcGxpY2l0X3R5cGVuYW1lKTogTG9zZSB1c2VsZXNzIGNvZGUuCgoJKiBjYWxsLmMgKHN0YW5kYXJkX2NvbnZlcnNpb24pOiBIYW5kbGUgQSogLT4gY29uc3QgQSogcHJvcGVybHkuCgoJKiBwdC5jIChnZXRfYmluZGluZ3NfcmVhbCk6IFJlbmFtZSBmcm9tIGdldF9iaW5kaW5ncy4gIEFkZCAKCWNoZWNrX3JldHR5cGUgcGFybS4KCShnZXRfYmluZGluZ3MpOiBQYXNzIDEuCgkoZ2V0X2JpbmRpbmdzX292ZXJsb2FkKTogUGFzcyAwLgoKV2VkIE1hciAxOSAwOTowODoxMiAxOTk4ICBNYXJrIE1pdGNoZWxsICA8bW1pdGNoZWxsQHVzYS5uZXQ+CgoJKiBwdC5jIChjaGVja19leHBsaWNpdF9zcGVjaWFsaXphdGlvbik6IFdoZW4gcmV2ZXJ0aW5nIGEgc3RhdGljCgltZW1iZXIgZnVuY3Rpb24sIGFsc28gcmVtb3ZlIHRoZSBgdGhpcycgcGFyYW1ldGVyIGZyb20KCWxhc3RfZnVuY3Rpb25fcGFybXMuCgpUaHUgTWFyIDE5IDAyOjI3OjQ4IDE5OTggIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHB0LmMgKHRzdWJzdF9jb3B5LCBDT05TVF9ERUNMKTogRG9uJ3QgYm90aGVyIHRzdWJzdGluZwoJYSBmdW5jdGlvbiBjb250ZXh0LgoKCSogZGVjbC5jIChzdG9yZV9iaW5kaW5ncyk6IFVzZSBmcmVlX2JpbmRpbmdfdmVjcy4KCShwb3BfZnJvbV90b3BfbGV2ZWwpOiBMaWtld2lzZS4KCldlZCBNYXIgMTggMTI6NDE6NDMgMTk5OCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZGVjbC5jIChtYWtlX2ltcGxpY2l0X3R5cGVuYW1lKTogT25seSBjaGFuZ2UgdGhlIHR5cGUgb2YgYSAKCVRZUEVOQU1FX1RZUEUuCgpXZWQgTWFyIDE4IDEwOjA5OjUxIDE5OTggIE1hcmsgTWl0Y2hlbGwgIDxtbWl0Y2hlbGxAdXNhLm5ldD4KCgkqIHNlbWFudGljcy5jOiBOZXcgZmlsZSwgY29udGFpbmluZyByb3V0aW5lcyB0byBwZXJmb3JtIHRoZQoJc2VtYW50aWMgcGhhc2Ugb2YgcGFyc2luZy4KCSogcGFyc2UueTogVXNlIGl0LgoJKiBwdC5jICh0c3Vic3RfZXhwcik6IExpa2V3aXNlLgoJKiBjcC10cmVlLmg6IERlY2xhcmUgdGhlIHZhcmlvdXMgZnVuY3Rpb25zIGluIHNlbWFudGljcy5jLgoJUHJvdmlkZSBtYWNyb3MgdG8gYWNjZXNzIF9TVE1UIHRyZWUgbm9kZXMuCgkqIGNwLXRyZWUuZGVmOiBBZGQgQVNNX1NUTVQgdHJlZSBub2RlLgoJKiBNYWtlZmlsZS5pbiwgTWFrZS1sYW5nLmluOiBBZGQgZGVwZW5kZW5jaWVzIG9uIGFuZCBmb3IKCXNlbWFudGljcy5jLgoJCldlZCBNYXIgMTggMDA6MjQ6MTAgMTk5OCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogcHQuYyAocHVzaF90ZW1wbGF0ZV9kZWNsKTogT25seSBjaGVjayBwcmltYXJ5IHRlbXBsYXRlcy4KCgkqIHB0LmMgKGNoZWNrX2V4cGxpY2l0X3NwZWNpYWxpemF0aW9uKTogQ29tcGxhaW4gYWJvdXQgZGVmYXVsdCBhcmdzCglpbiBleHBsaWNpdCBzcGVjaWFsaXphdGlvbi4KCgkqIHBhcnNlLnkgKG5vbW9kc19pbml0ZGNsMCk6IEFsc28gY2FsbCBjcF9maW5pc2hfZGVjbCBmb3IgYSAKCWNvbnN0cnVjdG9yX2RlY2xhcmF0b3IuCgpUdWUgTWFyIDE3IDE0OjQ0OjU0IDE5OTggIE1hcmsgTWl0Y2hlbGwgIDxtbWl0Y2hlbGxAdXNhLm5ldD4KCgkqIHR5cGVjazIuYyAoYnVpbGRfeF9hcnJvdyk6IERvbid0IGNyYXNoIHdoZW4gYW4gYWdncmVnYXRlIHR5cGUKCWhhcyBubyBvdmVybG9hZGVkIG9wZXJhdG9yIC0+LgoKCSogY2FsbC5jIChidWlsZF9maWVsZF9jYWxsKTogRG9uJ3QgY3Jhc2ggd2hlbiBwcmVzZW50ZWQgd2l0aCBhCglmaWVsZCB0aGF0IGlzIGFjdHVhbGx5IGEgbmVzdGVkIHR5cGUuCgoJKiBkZWNsLmMgKHB1c2h0YWcpOiBEZWFsIHdpdGggZnJpZW5kIGNsYXNzIGluamVjdGlvbiBpbiBsb2NhbAoJY2xhc3Nlcy4KCgkqIGNhbGwuYyAoYnVpbGRfb2JqZWN0X2NhbGwpOiBEb24ndCBjcmFzaCBpZiBPQkogaXMgYQoJcG9pbnRlci10by1tZW1iZXItZnVuY3Rpb24uCgpUdWUgTWFyIDE3IDExOjQwOjI2IDE5OTggIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHB0LmMgKHB1c2hfdGVtcGxhdGVfZGVjbCk6IENvbXBsYWluIGFib3V0IHRlbXBsYXRlIHdpdGggQyBsaW5rYWdlLAoJYW5vbnltb3VzIHRlbXBsYXRlIGNsYXNzLgoKTW9uIE1hciAxNiAxMjoxMDozOSAxOTk4ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjbGFzcy5jIChwdXNoY2xhc3MpOiBPbmx5IHVzZSB0aGUgbWlfbWF0cml4IHN0dWZmICNpZmRlZiBNSV9NQVRSSVguCgkqIHNlYXJjaC5jOiBMaWtld2lzZS4KCgkqIGxleC5jIChkb19wZW5kaW5nX2RlZmFyZ3MpOiBPbmx5IGNhbGwgCgltYXliZV97YmVnaW4sZW5kfV9tZW1iZXJfdGVtcGxhdGVfcHJvY2Vzc2luZyBmb3IgRlVOQ1RJT05fREVDTHMuCgoJKiBwYXJzZS55IChpbml0ZGNsMF9pbm5hcmRzKTogTW92ZSBtYXliZWFzbSBiYWNrIGludG8gaW5pdGRjbDAgZXQgYWwuCgpNb24gTWFyIDE2IDEwOjQ3OjIyIDE5OTggIE1hcmsgTWl0Y2hlbGwgIDxtbWl0Y2hlbGxAdXNhLm5ldD4KCgkqIHBhcnNlLnk6IERlYWwgd2l0aCBDT05TVFJVQ1RPUlMgaW4gbmV3X2luaXRpYWxpemVycy4KCk1vbiBNYXIgMTYgMTA6NTQ6MjEgMTk5OCAgTWFyayBNaXRjaGVsbCAgPG1taXRjaGVsbEB1c2EubmV0PgoKCSogcHQuYyAodHN1YnN0X2NvcHkpOiBEZWFsIHdpdGggQklORF9FWFBSIGluIGEgd2F5IHRoYXQgbW9yZQoJY2xvc2VseSBtaW1pY3MgdGhlIGJlaGF2aW9yIGluIHBhcnNlLnkuCgkodHN1YnN0X2V4cHIpOiBSZXR1cm4gdGhlIHJlc3V0aW5nIEJMT0NLIHdoZW4gbWFraW5nIGEgdHN1YnN0J2luZwoJaW50byBhIGNvbXBvdW5kIHN0YXRlbWVudC4KCQpTdW4gTWFyIDE1IDAyOjA3OjI2IDE5OTggIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGNwLXRyZWUuaCAoVEVNUExBVEVfUEFSTVNfRk9SX0lOTElORSk6IE5ldyBtYWNyby4KCSogcHQuYyAoaW5saW5lX25lZWRzX3RlbXBsYXRlX3Bhcm1zKTogTmV3IGZuLgoJKG9yaWdpbmFsX3RlbXBsYXRlKTogTmV3IGZuLgoJKHB1c2hfaW5saW5lX3RlbXBsYXRlX3Bhcm1zX3JlY3Vyc2l2ZSk6IE5ldyBmbi4KCShtYXliZV9iZWdpbl9tZW1iZXJfdGVtcGxhdGVfcHJvY2Vzc2luZyk6IFVzZSB0aGVtLgoJKG1heWJlX2VuZF9tZW1iZXJfdGVtcGxhdGVfcHJvY2Vzc2luZyk6IExpa2V3aXNlLgoJKGlzX21lbWJlcl9vcl9mcmllbmRfdGVtcGxhdGUpOiBSZW5hbWUgdG8gaXNfbWVtYmVyX3RlbXBsYXRlLgoJTWVtYmVyIGZ1bmN0aW9ucyBvZiBsb2NhbCBjbGFzc2VzIGFyZSBuZXZlciBtZW1iZXIgdGVtcGxhdGVzLgoKU3VuIE1hciAxNSAwMToxNDoyMiAxOTk4ICBLcmlhbmcgTGVyZHN1d2FuYWtpaiAgPGxlcmRzdXdhQHNjZi51c2MuZWR1PgoKCSogbGV4LmMgKGRvX2lkZW50aWZpZXIpOiBIYW5kbGUgVEVNUExBVEVfREVDTCB0aGF0IHdhcwoJYWRkZWQgaW4gdGhlIGNsYXNzIHNjb3BlIHRvIGNhdGNoIHJlZGVmaW5pdGlvbiBlcnJvci4KCgkqIHB0LmMgKHJlZHVjZV90ZW1wbGF0ZV9wYXJtX2xldmVsKTogQWxzbyBjb3B5IAoJdGhlIERFQ0xfVEVNUExBVEVfUEFSTVMgZmllbGQuCgpTdW4gTWFyIDE1IDEwOjU0OjA4IDE5OTggIE1hcmsgTWl0Y2hlbGwgIDxtbWl0Y2hlbGxAdXNhLm5ldD4KCgkqIHB0LmMgKHRzdWJzdCk6IENsZWFyIFRZUEVfUkVGRVJFTkNFX1RPIHdoZW4gY3JlYXRpbmcgYQogICAgICAgIHJlZHVjZWQtbGV2ZWwgdGVtcGxhdGUgdHlwZSBwYXJhbWV0ZXIuCgpTdW4gTWFyIDE1IDEyOjI2OjAyIDE5OTggIE1hbmZyZWQgSG9sbHN0ZWluICA8bWFuZnJlZEBzLWRpcmVrdG5ldC5kZT4KCgkqIGNwLXRyZWUuaCAoc3RydWN0IGxhbmdfZGVjbF9mbGFncyk6IEFkZCBuZWVkc19maW5hbF9vdmVycmlkZXIuCgkoREVDTF9ORUVEU19GSU5BTF9PVkVSUklERVJfUCk6IE5ldyBtYWNyby4KCSogY2xhc3MuYyAob3ZlcnJpZGVfb25lX3Z0YWJsZSk6IFNldCBERUNMX05FRURTX0ZJTkFMX09WRVJSSURFUl9QLgoJKiBkZWNsLmMgKGR1cGxpY2F0ZV9kZWNscyk6IFByb3BhZ2F0ZSBpdC4KCSogdHlwZWNrMi5jIChhYnN0cmFjdF92aXJ0dWFsc19lcnJvcik6IFVzZSB0d28gbG9vcHMgdG8gZW1pdAoJYWJzdHJhY3QgdmlydHVhbCBmdW5jdGlvbnMgYW5kIHZpcnR1YWwgZnVuY3Rpb25zIHdoaWNoIG5lZWQgYQoJZmluYWwgb3ZlcnJpZGVyIHNlcGFyYXRlbHkuCgkKVGh1IE1hciAxMiAwOTozOTo0MCAxOTk4ICBNYW5mcmVkIEhvbGxzdGVpbiAgPG1hbmZyZWRAcy1kaXJla3RuZXQuZGU+CgoJKiBsYW5nLXNwZWNzLmg6IFByb3Blcmx5IHB1dCBicmFja2V0cyBhcm91bmQgYXJyYXkgZWxlbWVudHMgaW4gCglpbml0aWFsaXplci4KCgkqIHR5cGVjay5jIChidWlsZF9iaW5hcnlfb3Bfbm9kZWZhdWx0KTogQ29ycmVjdGx5IHBsYWNlIHBhcmVucyBhcm91bmQKCSYmIGFuZCB8fCBpbiBleHByZXNzaW9uLgoKVGh1IE1hciAxMiAwOToyNjowNCAxOTk4ICBNYW5mcmVkIEhvbGxzdGVpbiAgPG1hbmZyZWRAcy1kaXJla3RuZXQuZGU+CgoJKiBjYWxsLmMgKGRlZmF1bHRfcGFybV9jb252ZXJzaW9ucyk6IFJlbW92ZSBwcm90b3R5cGUgZGVmaW5pdGlvbi4KCShidWlsZF9tZXRob2RfY2FsbCk6IFJlbW92ZSB1bnVzZWQgdmFyaWFibGUgcmVzdWx0LgoKCSogY3Z0LmMgKG9jcF9jb252ZXJ0KTogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZSBjb252ZXJzaW9uLgoKCSogZGVjbDIuYyAoYW1iaWd1b3VzX2RlY2wpOiBBZGQgZXhwbGljaXQgcGFyYW1ldGVyIGRlZmluaXRpb24gZm9yIG5hbWUuCgoJKiBleGNlcHQuYyAoZG9fdW53aW5kKTogI2lmIDAgZGVmaW5pdGlvbiBvZiB1bnVzZWQgdmFyaWFibGVzIGZjYWxsCglhbmQgbmV4dF9wYy4KCgkqIGV4cHIuYyAoZXh0cmFjdF9zY2FsYXJfaW5pdCk6ICNpZiAwIHByb3RvdHlwZSBhbmQgZnVuY3Rpb24gCglkZWZpbml0aW9uLgoKCSogaW5pdC5jIChleHBhbmRfYWdncl9pbml0XzEpOiBSZW1vdmUgdW51c2VkIHZhcmlhYmxlIGluaXRfdHlwZS4KCShidWlsZF9uZXdfMSk6IFJlbW92ZSB1bnVzZWQgdmFyaWFibGUgdC4KCgkqIHB0LmMgKGluc3RhbnRpYXRlX2NsYXNzX3RlbXBsYXRlKTogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZSBuZXd0YWc7CgljYXN0IGNhbGxlZCBmdW5jdGlvbiByZXR1cm4gdmFsdWUgdG8gdm9pZC4KCShkb19kZWNsX2luc3RhbnRpYXRpb24pOiBSZW1vdmUgdW51c2VkIHZhcmlhYmxlcyBuYW1lIGFuZCBmbi4KCgkqIHRyZWUuYyAoZ2V0X3R5cGVfZGVjbCk6IEFkZCBkZWZhdWx0IHJldHVybiB0byBzaHV0IHVwIGNvbXBpbGVyIGZyb20KCWNvbXBsYWluaW5nIGNvbnRyb2wgcmVhY2hlcyBlbmQgb2Ygbm9uLXZvaWQgZnVuY3Rpb24uCgoJKiB0eXBlY2suYyAoYnVpbGRfeF9jb25kaXRpb25hbF9leHByKTogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZSBydmFsLgoKVGh1IE1hciAxMiAwOToxMjoxNSAxOTk4ICBNYW5mcmVkIEhvbGxzdGVpbiAgPG1hbmZyZWRAcy1kaXJla3RuZXQuZGU+CgoJKiBjYWxsLmMgKGRlZmF1bHRfcGFybV9jb252ZXJzaW9ucyk6IFJlbW92ZSBwcm90b3R5cGUgZGVmaW5pdGlvbi4KCShidWlsZF9tZXRob2RfY2FsbCk6IFJlbW92ZSB1bnVzZWQgdmFyaWFibGUgcmVzdWx0LgoJKGJ1aWxkX292ZXJfY2FsbCk6IEFkZCBkZWZhdWx0IGNhc2UgaW4gZW51bWVyYXRpb24gc3dpdGNoLgoKVGh1IE1hciAxMiAwODozOToxMyAxOTk4ICBNYW5mcmVkIEhvbGxzdGVpbiAgPG1hbmZyZWRAcy1kaXJla3RuZXQuZGU+CgoJKiBkZWNsMi5jIChsYW5nX2RlY29kZV9vcHRpb24pOiBDaGFuZ2UgaidzIHR5cGUgdG8gc2l6ZV90LgoKCSogdHJlZS5jIChsYXlvdXRfdmJhc2V0eXBlcyk6IHJlY29yZF9hbGlnbiBhbmQgZGVzaXJlZF9hbGlnbiBhcmUgb2YKCXR5cGUgdW5zaWduZWQgaW50OyBjb25zdF9zaXplIGFuZCBub252aXJ0dWFsX2NvbnN0X3NpemUgbGlrZXdpc2UuCgpXZWQgTWFyIDExIDA3OjI1OjIwIDE5OTggIE1hcmsgTWl0Y2hlbGwgIDxtbWl0Y2hlbGxAdXNhLm5ldD4KCgkqIHBhcnNlLnkgKG5ld19pbml0aWFsaXplcik6IE1ha2Ugc3VyZSBhbGwgaW5pdGlhbGl6ZXJzIGFyZQoJbGlzdHMuCgpUdWUgTWFyIDEwIDA3OjMyOjM2IDE5OTggIE1hcmsgTWl0Y2hlbGwgIDxtbWl0Y2hlbGxAdXNhLm5ldD4KCgkqIGRlY2wyLmMgKGltcG9ydF9leHBvcnRfZGVjbCk6IE1hcmsgdGluZm8gZnVuY3Rpb25zIGZvcgoJY3YtcXVhbGlmaWVkIHZlcnNpb25zIG9mIGNsYXNzIHR5cGVzIGFzIERFQ0xfTk9UX1JFQUxMWV9FWFRFUk4uCgpGcmkgTWFyICA2IDIzOjI3OjM1IDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIG1ldGhvZC5jOiBGaXggdHlwby4KCkZyaSBNYXIgIDYgMTA6MDY6NTkgMTk5OCAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKICAgICAgICAqIG1ldGhvZC5jOiBJbmNsdWRlICJzeXN0ZW0uaCIgdG8gZ2V0IHN0ZGxpYi5oLCBzdGRpby5oLAogICAgICAgIGN0eXBlLmgsIHN0cmluZy5oLCBldGMuCiAgICAgICAgKGlzc3VlX25yZXBlYXRzKTogQWRkIGRlZmF1bHQgY2FzZSBpbiBlbnVtZXJhdGlvbiBzd2l0Y2guCiAgICAgICAgKGNoZWNrX2J0eXBlKTogTGlrZXdpc2UuCiAgICAgICAgKHByb2Nlc3Nfb3ZlcmxvYWRfaXRlbSk6IExpa2V3aXNlLgoJIAogICAgICAgICogTWFrZWZpbGUuaW4gKG1ldGhvZC5vKTogRGVwZW5kIG9uIHN5c3RlbS5oLgoKV2VkIE1hciAgNCAyMjoyNjo1MyAxOTk4ICBBbmRyZWFzIFNjaHdhYiAgPHNjaHdhYkBpc3Nhbi5pbmZvcm1hdGlrLnVuaS1kb3J0bXVuZC5kZT4KCgkqIGxleC5jIChkb19zY29wZWRfaWQpOiBGaXggcGFyZW50aGVzaXppbmcuCgpXZWQgTWFyICA0IDEyOjExOjUzIDE5OTggIE1pY2hhZWwgVGllbWFubiAgPHRpZW1hbm5AYXhvbi5jeWdudXMuY29tPgoKCSogcnR0aS5jIChnZXRfdGluZm9fZm5fZHluYW1pYyk6IElmIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGFuCglGTEFHX1JUVEkgaXMgdW5zZXQsIGluaXRpYWxpemUgdHlwZSBpbmZvIG1hY2hpbmVyeSBhbmQgY29udGludWUKCXdpdGggRkxBR19SVFRJIGVuYWJsZWQuCgkoZ2V0X3R5cGVpZCk6IERpdHRvLgoKV2VkIE1hciAgNCAxMTo0Nzo1NSAxOTk4ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiB0eXBlY2suYyAodW5hcnlfY29tcGxleF9sdmFsdWUpOiAmRDo6aSBoYXMgdHlwZSBCOjoqIGlmIGkgY29tZXMKCWZyb20gQi4KCldlZCBNYXIgIDQgMTE6Mjg6MDggMTk5OCAgTWFyayBNaXRjaGVsbCAgPG1taXRjaGVsbEB1c2EubmV0PgoKCSogcHQuYyAoZmluaXNoX21lbWJlcl90ZW1wbGF0ZV9kZWNsKTogRGVhbCBtb3JlIGdyYWNlZnVsbHkgd2l0aAoJaW52YWxpZCBkZWNsYXJhdGlvbnMuCgpUdWUgTWFyICAzIDAxOjM4OjE3IDE5OTggIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGN2dC5jLCBkZWNsLmMsIGRlY2wyLmMsIGluaXQuYywgcnR0aS5jLCB0eXBlY2suYywgdHlwZWNrMi5jLAoJY3AtdHJlZS5oOiBDbGVhbiB1cCBtb3JlIG9sZCBvdmVybG9hZGluZyBjb2RlLCBvbGQgUlRUSSBjb2RlLCBhbmQKCXNvbWUgZm9ybWF0dGluZyBxdWlya3MuCgoJKiBjYWxsLmMsIGNsYXNzLmMsIGNwLXRyZWUuaCwgY3Z0LmMsIGRlY2wuYywgaW5pdC5jLCBsZXguYywKCW1ldGhvZC5jLCBwdC5jLCBwdHJlZS5jLCB0eXBlY2suYzogUmVtb3ZlIHN1cHBvcnQgZm9yIAoJLWZuby1hbnNpLW92ZXJsb2FkaW5nIGFuZCBvdmVybG9hZGluZyBNRVRIT0RfQ0FMTF9FWFBSLgoJKiBjbGFzcy5oOiBSZW1vdmUuCgkqIE1ha2VmaWxlLmluOiBBZGp1c3QuCgoJKiBwdC5jICh1bmlmeSk6IERvbid0IGFsbG93IHJlZHVjZWQgY3YtcXVhbHMgd2hlbiBzdHJpY3QuCgoJKiBjYWxsLmMsIGNsYXNzLmMsIHB0LmMsIGNwLXRyZWUuaDogUmVtb3ZlIG5zdWJzdHMgcGFybSBmcm9tCgkqdHlwZV91bmlmaWNhdGlvbiogYW5kIHVuaWZ5LgoKTW9uIE1hciAgMiAxMjoxMTowNiAxOTk4ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBwYXJzZS55IChleHBsaWNpdF90ZW1wbGF0ZV90eXBlKTogUmVtb3ZlIFRFTVBMQVRFIGtleXdvcmQuCgkobmVzdGVkX25hbWVfc3BlY2lmaWVyKTogQW5kIGFkZCBpdCBiZWZvcmUgdGhpcyB1c2UuCgkodHlwZW5hbWVfc3ViMCk6IEFuZCB0aGlzIHVzZS4gIEFsc28gYWRkIHVzZSB3aXRob3V0IHRoZSBrZXl3b3JkLgoJKHR5cGVuYW1lX3N1YjEpOiBMaWtld2lzZS4KCSogcHQuYyAoaW5zdGFudGlhdGVfY2xhc3NfdGVtcGxhdGUpOiBEb24ndCBhY3R1YWxseSBpbnN0YW50aWF0ZSAKCWFueXRoaW5nIGlmIG91ciB0eXBlIHVzZXMgdGVtcGxhdGUgcGFybXMuCgpNb24gTWFyICAyIDExOjA0OjU5IDE5OTggIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAoc3RhcnRfZnVuY3Rpb24pOiBEb24ndCBjYWxsIHRlbXBvcmFyeV9hbGxvY2F0aW9uIGZvciBhCgluZXN0ZWQgZnVuY3Rpb24uCgpTdW4gTWFyICAxIDIxOjA2OjM3IDE5OTggIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHB0LmMgKGluc3RhbnRpYXRlX2NsYXNzX3RlbXBsYXRlKTogRG9uJ3QgbWVzcyB3aXRoIGZyaWVuZHMgaWYKCW91ciB0eXBlIHVzZXMgdGVtcGxhdGUgcGFybXMuCgpTYXQgRmViIDI4IDEyOjA2OjQ0IDE5OTggIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnkgKG5lc3RlZF9uYW1lX3NwZWNpZmllcik6IFVzZSBleHBsaWNpdF90ZW1wbGF0ZV90eXBlLgoJKHR5cGVuYW1lX3N1Yik6IEFsbG93IGEgdGVtcGxhdGVfdHlwZSwgYW4gZXhwbGljaXRfdGVtcGxhdGVfdHlwZSwKCW9yIGFuIGltcGxpY2l0IHRlbXBsYXRlIHR5cGUgYXQgdGhlIGVuZC4KCSogbGV4LmMgKHl5cHJpbnQpOiBIYW5kbGUgYSBQVFlQRU5BTUUgYmVpbmcgYSBURU1QTEFURV9ERUNMLgoJKiBkZWNsLmMgKG1ha2VfdHlwZW5hbWVfdHlwZSk6IEhhbmRsZSB0ZW1wbGF0ZS1pZCB3aGVyZSB0aGUgbmFtZQoJaXMgYSBURU1QTEFURV9ERUNMLgoJKiBjYWxsLmMgKGJ1aWxkX3Njb3BlZF9tZXRob2RfY2FsbCk6IEhhbmRsZSBtZW1iZXIgdGVtcGxhdGUgCglkZXN0cnVjdG9yIGNhbGwuCgkqIHB0LmMgKHRzdWJzdF9jb3B5LCBNRVRIT0RfQ0FMTF9FWFBSKTogRG9uJ3QgYXNzdW1lIGEgbWVtYmVyIAoJZGVzdHJ1Y3RvciBpcyByZXByZXNlbnRlZCBieSB0aGUgdHlwZS4KCgkqIGNwLXRyZWUuaCAoVFlQRU5BTUVfVFlQRV9GVUxMTkFNRSk6IE5ldyBtYWNyby4KCSogcGFyc2UueSAobmVzdGVkX25hbWVfc3BlY2lmaWVyKTogQWRkICd0ZW1wbGF0ZScgY2FzZS4KCShleHBsaWNpdF90ZW1wbGF0ZV90eXBlKTogTmV3IHJ1bGUuCgkodHlwZW5hbWVfc3ViKTogVXNlIGl0LgoJKiBkZWNsLmMgKG1ha2VfdHlwZW5hbWVfdHlwZSk6IEhhbmRsZSBnZXR0aW5nIGEgdGVtcGxhdGUtaWQgZm9yIE5BTUUuCgkqIHB0LmMgKHRzdWJzdCk6IExpa2V3aXNlLgoKRnJpIEZlYiAyNyAxMToxNzo1MCAxOTk4ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBwdC5jIChhZGRfdG9fdGVtcGxhdGVfYXJncyk6IEZpeCB0aGlua28uCgkoaW5zdGFudGlhdGVfY2xhc3NfdGVtcGxhdGUpOiBDYWxsIGl0IGxhdGVyLgoKCSogcHQuYyAoZ2V0X2NsYXNzX2JpbmRpbmdzKTogQWRkIG91dGVyX2FyZ3MgcGFybS4KCShtb3N0X3NwZWNpYWxpemVkX2NsYXNzKTogTGlrZXdpc2UuCgkoaW5zdGFudGlhdGVfY2xhc3NfdGVtcGxhdGUpOiBQYXNzIGl0LgoJKG1vcmVfc3BlY2lhbGl6ZWRfY2xhc3MpOiBMaWtld2lzZS4KCShsb29rdXBfdGVtcGxhdGVfY2xhc3MpOiBHZXQgY29udGV4dCBmcm9tIHRlbXBsYXRlIGlmIG5vbmUKCXdhcyBzcGVjaWZpZWQuCgkoZmluaXNoX21lbWJlcl90ZW1wbGF0ZV9kZWNsKTogRG9uJ3QgZG8gYW55dGhpbmcgd2l0aCBhCglwYXJ0aWFsIHNwZWNpYWxpemF0aW9uLgoJKiBkZWNsMi5jIChjaGVja19tZW1iZXJfdGVtcGxhdGUpOiBVc2UgSVNfQUdHUl9UWVBFIGluc3RlYWQgb2YKCUFHR1JFR0FURV9UWVBFX1AuCgkqIGNsYXNzLmMgKGZpbmlzaF9zdHJ1Y3QpOiBNZW1iZXIgY2xhc3MgdGVtcGxhdGVzIGhhdmUgYWxyZWFkeSBiZWVuCgljaGVja2VkIGZvciBuYW1lIGNsYXNoZXMuCgkqIGRlY2wuYyAocHVzaGRlY2xfd2l0aF9zY29wZSk6IEhhbmRsZSBwdXNoaW5nIGF0IGNsYXNzIGxldmVsLgoKRnJpIEZlYiAyNyAwMjoyNToxNiAxOTk4ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBwdC5jICh0c3Vic3QsIFRFTVBMQVRFX0RFQ0wpOiBTdXBwb3J0IG1lbWJlciBjbGFzcyB0ZW1wbGF0ZXMuCgkodHN1YnN0LCAqX1BBUk0pOiBTdXBwb3J0IG11bHRpcGxlIGxldmVscyBvZiB0ZW1wbGF0ZSBjbGFzc2VzLgoJKGluc3RhbnRpYXRlX2NsYXNzX3RlbXBsYXRlKTogTG9vayB1cCB0aGUgcGF0dGVybiBmcm9tIHRoZQoJb3JpZ2luYWwgdGVtcGxhdGUuCgkobG9va3VwX3RlbXBsYXRlX2NsYXNzKTogSGFuZGxlIGdldHRpbmcgYSB0ZW1wbGF0ZSBmb3IgZDEuCgkocHVzaF90ZW1wbGF0ZV9kZWNsKTogQ29ycmVjdCBzZXR0aW5nIG9mICdwcmltYXJ5Jy4KCShyZWR1Y2VfdGVtcGxhdGVfcGFybV9sZXZlbCk6IEFkZCAnbGV2ZWxzJyBwYXJtLgoJKGZpbmlzaF9tZW1iZXJfdGVtcGxhdGVfZGVjbCk6IFN1cHBvcnQgbWVtYmVyIGNsYXNzIHRlbXBsYXRlcy4KCSh0ZW1wbGF0ZV9jbGFzc19kZXB0aCk6IEhhbmRsZSBtdWx0aXBsZSBsZXZlbHMuCgkqIHBhcnNlLnkgKGNvbXBvbmVudF9kZWNsXzEsIGZuLmRlZjIpOiBSZW1vdmUgbWVtYmVyIHRlbXBsYXRlIGNhc2UuCgkoY29tcG9uZW50X2RlY2wpOiBBZGQgbWVtYmVyIHRlbXBsYXRlIGNhc2VzLgoJKiBkZWNsMi5jIChjaGVja19tZW1iZXJfdGVtcGxhdGUpOiBXZSBub3cgaGFuZGxlIG1lbWJlciB0ZW1wbGF0ZQoJY2xhc3Nlcy4KCSogZGVjbC5jIChwdXNodGFnKTogSGFuZGxlIG1lbWJlciB0ZW1wbGF0ZXMuCgkqIG1ldGhvZC5jIChkb19pbmxpbmVfZnVuY3Rpb25faGFpcik6IERvbid0IHRvdWNoCglJREVOVElGSUVSX0dMT0JBTF9WQUxVRS4KCSogaW5pdC5jIChidWlsZF9vZmZzZXRfcmVmKTogSWYgbmFtZSBpc24ndCBhbiBpZGVudGlmaWVyLCBqdXN0IAoJcmV0dXJuIGl0LgoJKiBzcGV3LmMgKHl5bGV4KTogSGFuZGxlIFBUWVBFTkFNRSBsaWtlIFRZUEVOQU1FLgoKCSogdHlwZWNrLmMgKGdldF9kZWx0YV9kaWZmZXJlbmNlKTogRG8gYWRqdXN0IGZvciBjb252ZXJzaW9ucyB0bwoJYW5kIGZyb20gdmlydHVhbCBiYXNlLgoKV2VkIEZlYiAyNSAwOTo1MToyOSAxOTk4ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiB0eXBlY2suYyAoZ2V0X2RlbHRhX2RpZmZlcmVuY2UpOiBHaXZlIGhhcmQgZXJyb3IgZm9yIGNvbnZlcnNpb24KCWZyb20gdmlydHVhbCBiYXNlLgoKCSogY3AtdHJlZS5oOiBUd2VhayBmb3JtYXR0aW5nLgoKV2VkIEZlYiAyNSAwMDozNTozMyAxOTk4ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBkZWNsLmMgKHB1c2hfbmFtZXNwYWNlKTogSGFuZGxlIHJlZGVjbGFyYXRpb24gZXJyb3IuCgoJKiBjcC10cmVlLmggKElERU5USUZJRVJfTkFNRVNQQUNFX1ZBTFVFKTogTmV3IG1hY3JvLgoJKElERU5USUZJRVJfTkFNRVNQQUNFX0JJTkRJTkdTKTogTmV3IG1hY3JvLgoJKE5BTUVTUEFDRV9CSU5ESU5HKTogTmV3IG1hY3JvLgoJKElERU5USUZJRVJfR0xPQkFMX1ZBTFVFKTogVXNlIE5BTUVTUEFDRV9CSU5ESU5HLgoJKiAqLmM6IFVzZSB0aGVtLgoKCSogcHQuYyAocHVzaF90ZW1wbGF0ZV9kZWNsKTogVXNlIGlubmVybW9zdF9hcmdzLgoKCSogZGVjbC5jIChnZXRfdW5pcXVlX25hbWUpOiBUd2VhayBmcm9tIGVhcmxpZXIgaW4gdGhlIG5hbWUuCgpUdWUgRmViIDI0IDIyOjE1OjA0IDE5OTggIE1hcnRpbiB2b24gTG9ld2lzICA8bG9ld2lzQGluZm9ybWF0aWsuaHUtYmVybGluLmRlPgoKCSogY3AtdHJlZS5kZWY6IEFkZCBDUExVU19CSU5ESU5HIG5vZGUuCgkqIGNwLXRyZWUuaCAodHJlZV9iaW5kaW5nKTogbmV3IHN0cnVjdAoJKEJJTkRJTkdfU0NPUEUsIEJJTkRJTkdfVkFMVUUpOiBuZXcgbWFjcm9zCgkoY3VycmVudF9uYW1lc3BhY2UsIGdsb2JhbF9uYW1lc3BhY2UpOiBkZWNsYXJlIGV4dGVybgoJKHN0cnVjdCBsYW5nX2RlY2xfZmxhZ3MpOiBuZXcgZmllbGQgaW5fbmFtZXNwYWNlCgkoREVDTF9OQU1FU1BBQ0VfVVNJTkcsIERFQ0xfTkFNRVNQQUNFX1VTRVJTKTogbmV3IG1hY3JvcwoJKERFQ0xfTkFNRVNQQUNFLCBTRVRfREVDTF9OQU1FU1BBQ0UpOiBuZXcgbWFjcm9zCgkoVFJFRV9JTkRJUkVDVF9VU0lORyk6IG5ldyBtYWNybwoJKiBkZWNsMi5jIChjdXJyZW50X25hbWVzcGFjZSwgZ2xvYmFsX25hbWVzcGFjZSk6IERlY2xhcmUuICBUaGUKCXZhbHVlIGlzIGEgTkFNRVNQQUNFX0RFQ0wgbm93LCBub3QgYSBUUkVFX0xJU1QuCgkoaXNfbmFtZXNwYWNlX2FuY2VzdG9yLCBuYW1lc3BhY2VfYW5jZXN0b3IpOm5ldyBzdGF0aWMgZnVuY3Rpb25zLgoJKGFkZF91c2luZ19uYW1lc3BhY2UsIGFtYmlndW91c19kZWNsKTogbGlrZXdpc2UuCgkobG9va3VwX3VzaW5nX25hbWVzcGFjZSk6IG5ldyBzdXBwb3J0IGZ1bmN0aW9uIGZvciBsb29rdXBfbmFtZS4KCShxdWFsaWZpZWRfbG9va3VwX3VzaW5nX25hbWVzcGFjZSk6IG5ldyBzdXBwb3J0IGZ1bmN0aW9uIGZvcgoJZG9fc2NvcGVkX2lkIGFuZCBsb29rdXBfbmFtZXNwYWNlX25hbWUKCShnZXRfbmFtZXNwYWNlX2lkKTogbWFyayBhcyBvYnNvbGV0ZS4KCShjdXJyZW50X25hbWVzcGFjZV9pZCk6IExpa2V3aXNlLgoJKGRvX25hbWVzcGFjZV9hbGlhcyk6IEltcGxlbWVudC4KCShkb191c2luZ19kaXJlY3RpdmUpOiBJbXBsZW1lbnQgYXMgY2FsbCB0byBhZGRfdXNpbmdfbmFtZXNwYWNlLgoJKiBkZWNsLmMgKGJpbmRpbmdfZm9yX25hbWUpOiBuZXcgZnVuY3Rpb24uCgkocHVzaF9uYW1lc3BhY2UsIHBvcF9uYW1lc3BhY2UpOiBpbXBsZW1lbnQuCgkocHVzaF9kZWNsKTogZG9uJ3QgaW5zdGFsbCBhIEZVTkNUSU9OX0RFQ0wgaW4gdGhlIGdsb2JhbCBicmFuY2guCgkobG9va3VwX25hbWVzcGFjZV9uYW1lKTogaW1wbGVtZW50IHVzaW5nIHF1YWxpZmllZCBsb29rdXAuCgkobG9va3VwX25hbWVfcmVhbCk6IEZvciBnbG9iYWwgc2NvcGluZywgbG9va3VwIGluCglnbG9iYWxfbmFtZXNwYWNlLiBGb3IgbmFtZXNwYWNlIHNjb3BpbmcsIGxvb2t1cCBpbiBnaXZlbgoJbmFtZXNwYWNlLiBGb3IgdW5zY29wZWQgbG9va3VwLCBpdGVyYXRlIG92ZXIgbmFtZXNwYWNlLAoJY29uc2lkZXJpbmcgdXNpbmcgZGlyZWN0aXZlcy4KCShpbml0X2RlY2xfcHJvY2Vzc2luZyk6IGluaXRpYWxpemUgZ2xvYmFsX25hbWVzcGFjZS4KCShncm9rdmFyZGVjbCk6IEJ1aWxkIGFzc2VtYmxlciBuYW1lIGFzIHN0YXRpYyBuYW1lIGZvciBnbG9iYWxzLgoJKGdyb2tkZWNsYXJhdG9yKTogUmVtb3ZlIG9sZCBuYW1lc3BhY2UgbWFuZ2xpbmcuCgkoeHJlZl90YWcpOiBXaGVuIGluc3RhbGxpbmcgYSBnbG9iYWwgYmluZGluZyBmb3IgdGhlCgl0YWcsIG1ha2Ugc3VyZSB3ZSBoYXZlIGFuIGlkZW50aWZpZXIuCgkqIG1ldGhvZC5jIChidWlsZF9vdmVybG9hZF9uZXN0ZWRfbmFtZSk6IG1hbmdsZSBuYW1lc3BhY2VzLgoJKGJ1aWxkX3F1YWxpZmllZF9uYW1lKTogTGlrZXdpc2UuCgkoYnVpbGRfZGVjbF9vdmVybG9hZF9yZWFsKTogTGlrZXdpc2UuCgkqIGxleC5jIChidWlsZF9sYW5nX2RlY2wpOiBzZXQgbmFtZXNwYWNlIGZvciBuZXcgZGVjbGFyYXRpb24gdG8KCWN1cnJlbnRfbmFtZXNwYWNlLgoJKGRvX3Njb3BlZF9pZCk6IGZpbmQgZ2xvYmFsIG5hbWVzIGluIGdsb2JhbCBvciBjdXJyZW50CgluYW1lc3BhY2UsIG9yIHVzaW5nIHF1YWxpZmllZCBuYW1lc3BhY2UgbG9va3VwLCBkZXBlbmRpbmcgb24KCWNvbnRleHQuCgkqIGluaXQuYyAoYnVpbGRfbWVtYmVyX2NhbGwpOiBXaGVuIHNjb3BlIGlzIG5hbWVzcGFjZSwgdXNlCglidWlsZF94X2Z1bmN0aW9uX2NhbGwgaW5zdGVhZC4KCShidWlsZF9vZmZzZXRfcmVmKTogV2hlbiBzY29wZSBpcyBuYW1lc3BhY2UsIGNvbGxhcHNlIHByb2Nlc3NpbmcKCXRvIGxvb2t1cF9uYW1lc3BhY2VfbmFtZSBpbnN0ZWFkLgoJKiBlcnJvci5jIChkdW1wX2RlY2wpOiBTdXBwb3J0IE5BTUVTUEFDRV9ERUNMLgoJKiBkZWNsLmMgKHB1c2hkZWNsKTogQmluZCBnbG9iYWxzIHRvIGN1cnJlbnQgbmFtZXNwYWNlLgoJKHB1c2hfb3ZlcmxvYWRlZF9kZWNsKTogTGlrZXdpc2UuCgkobG9va3VwX3RhZyk6IExpa2V3aXNlLgoJKGxvb2t1cF9uYW1lX2N1cnJlbnRfbGV2ZWwpOiBMaWtld2lzZS4KCSh4cmVmX3RhZyk6IExpa2V3aXNlLgoJKHN0YXJ0X2Z1bmN0aW9uKTogTGlrZXdpc2UuCgkqIGxleC5jIChkb19pZGVudGlmaWVyKTogTGlrZXdpc2UuCgkoaWRlbnRpZmllcl90eXBlZGVjbF92YWx1ZSk6IExpa2V3aXNlLgoJKHJlYWxfeXlsZXgpOiBMaWtld2lzZS4KCSogbWV0aG9kLmMgKGRvX2lubGluZV9mdW5jdGlvbl9oYWlyKTogTGlrZXdpc2UuCgkqIHBhcnNlLnkgKHVuc2NvcGVkKTogTGlrZXdpc2UuCgkqIHB0LmMgKGNoZWNrX2V4cGxpY2l0X3NwZWNpYWxpemF0aW9uKTogTGlrZXdpc2UuCgkobG9va3VwX3RlbXBsYXRlX2NsYXNzKTogTGlrZXdpc2UuCgkqIHJ0dGkuYyAoY2FsbF92b2lkX2ZuKTogTGlrZXdpc2UuCgkqIHNpZy5jIChidWlsZF9zaWd0YWJsZSk6IExpa2V3aXNlLgoJKiBwdHJlZS5jIChsYW5nX3ByaW50X3hub2RlKTogTmV3IGZ1bmN0aW9uLgoKVHVlIEZlYiAyNCAwMTo0MDoyNCAxOTk4ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBwdC5jIChpbnN0YW50aWF0ZV9jbGFzc190ZW1wbGF0ZSk6IERvbid0IGluc3RhbnRpYXRlIGlmIHBlZGFudGljCglhbmQgdGhlIGFyZ3MgdXNlIHRlbXBsYXRlIHBhcm1zLgoKCSogcHQuYyAocHVzaF90aW5zdF9sZXZlbCk6IElmIHRoZSBpbnN0YW50aWF0b24gdXNlcyB0ZW1wbGF0ZSBwYXJtcywKCWZhaWwgc2lsZW50bHkuCgkqIGRlY2wuYyAoeHJlZl9iYXNldHlwZXMpOiBEbyBjYWxsIGNvbXBsZXRlX3R5cGUgZm9yIGJhc2V0eXBlcwoJdGhhdCBpbnZvbHZlIHRlbXBsYXRlIHBhcmFtZXRlcnMuCgpUdWUgRmViIDI0IDAwOjM2OjQzIDE5OTggIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHR5cGVjazIuYyAocHJvY2Vzc19pbml0X2NvbnN0cnVjdG9yKTogRml4IGxhYmVsZWQgaW5pdCBjaGVjay4KCk1vbiBGZWIgMjMgMDU6MDg6NTUgMTk5OCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogcHQuYywgY2FsbC5jLCBkZWNsLmMsIG1ldGhvZC5jLCBjcC10cmVlLmg6IFJlbW92ZSB1bnVzZWQgTkFSR1MKCWFyZ3VtZW50IHRvIHRzdWJzdCBhbmQgZnJpZW5kcy4KCgkqIHB0LmMgKHRzdWJzdCwgRlVOQ1RJT05fREVDTCk6IFRpZHkuCgoJKiB0eXBlY2suYyAoYnVpbGRfeF9mdW5jdGlvbl9jYWxsKTogSGFuZGxlIHN0YXRpYyBtZW1iZXIgZnVuY3Rpb24KCXRlbXBsYXRlcyBsaWtlIG5vbi10ZW1wbGF0ZXMuICBIYW5kbGUgZnJpZW5kIHRlbXBsYXRlcyBsaWtlIG5vcm1hbAoJZnVuY3Rpb24gdGVtcGxhdGVzLgoJKiBwdC5jICh0c3Vic3QsICpfUEFSTSk6IERvbid0IHVzZSBvcmlnX2xldmVsLgoJKGdldF9iaW5kaW5ncyk6IERvbid0IGNhbGwgYWRkX3RvX3RlbXBsYXRlX2FyZ3MuCgkoaW5zdGFudGlhdGVfdGVtcGxhdGUpOiBMaWtld2lzZS4KCSh0c3Vic3QsIEZVTkNUSU9OX0RFQ0wpOiBDYWxsIGFkZF90b190ZW1wbGF0ZV9hcmdzIGFzIGFwcHJvcHJpYXRlLgoJKiBwdHJlZS5jIChwcmludF9sYW5nX3R5cGUpOiBQcmludCBpbmRleC9sZXZlbCBmb3IgdGVtcGxhdGUgcGFybXMuCgpNb24gRmViIDIzIDAyOjUyOjI5IDE5OTggIE1hcmsgTWl0Y2hlbGwgIDxtbWl0Y2hlbGxAdXNhLm5ldD4KCgkqIE1ha2UtbGFuZy5pbiAoY2MxcGx1cyk6IE5vdGUgdGhhdCBjYzFwbHVzIGRlcGVuZHMgb24KCWNwL2NwLXRyZWUuaCBhbmQgY3AvY3AtdHJlZS5kZWYuCgkKCSogY3AtdHJlZS5kZWYgKFRFTVBMQVRFX0NPTlNUX1BBUk0pOiBSZW1vdmUuCgkoVEVNUExBVEVfUEFSTV9JTkRFWCk6IE5ldyB0cmVlIGNvZGUsIHVzZWQgdG8gaW5kaWNhdGUgYQoJcG9zaXRpb24gaW4gYSB0ZW1wbGF0ZSBwYXJhbWV0ZXIgbGlzdC4KCSogY3AtdHJlZS5oICh0ZW1wbGF0ZV9wYXJtX2luZGV4KTogTmV3IHN0cnVjdHVyZSwgdXNlZCBhcyB0aGUgdHJlZQoJc3RydWN0dXJlIGZvciBhIFRFTVBMQVRFX1BBUk1fSU5ERVguCgkoVEVNUExBVEVfUEFSTV9JRFgpOiBOZXcgbWFjcm8uCgkoVEVNUExBVEVfUEFSTV9MRVZFTCk6IExpa2V3aXNlLgoJKFRFTVBMQVRFX1BBUk1fREVTQ0VOREFOVFMpOiBMaWtld2lzZS4KCShURU1QTEFURV9QQVJNX09SSUdfTEVWRUwpOiBMaWtld2lzZS4KCShURU1QTEFURV9QQVJNX0RFQ0wpOiBMaWtld2lzZS4KCShURU1QTEFURV9UWVBFX1BBUk1fSU5ERVgpOiBMaWtld2lzZS4KCShURU1QTEFURV9UWVBFX09SSUdfTEVWRUwpOiBMaWtld2lzZS4KCShURU1QTEFURV9UWVBFX0RFQ0wpOiBMaWtld2lzZS4KCShURU1QTEFURV9DT05TVF9JRFgpOiBSZW1vdmUuCgkoVEVNUExBVEVfQ09OU1RfTEVWRUwpOiBMaWtld2lzZS4KCShURU1QTEFURV9DT05TVF9TRVRfSU5GTyk6IExpa2V3aXNlLgoJKFRFTVBMQVRFX1RZUEVfU0VUX0lORk8pOiBMaWtld2lzZS4KCShURU1QTEFURV9UWVBFX0lEWCk6IFJlZGVmaW5lIGluIHRlcm1zIG9mIFRFTVBMQVRFX1BBUk1fSU5ERVgKCW5vZGUuCgkoVEVNUExBVEVfVFlQRV9MRVZFTCk6IExpa2V3aXNlLgoJKiBkZWNsLmMgKGRlY2xzX21hdGNoKTogQ2FsbCBjb21wX3RlbXBsYXRlX3Bhcm1zLCByYXRoZXIgdGhhbgoJZXhwYW5kaW5nIGl0IGlubGluZS4KCShkdXBsaWNhdGVfZGVjbHMpOiBJZiB0d28gdGVtcGxhdGUgZGVjbGFyYXRpb25zIGFyZSBiZWluZyBtZXJnZWQsCgl0aGVuIHRoZWlyIFRFTVBMQVRFX0lORk9zIHNob3VsZCBiZSBtZXJnZWQgYXMgd2VsbC4KCShncm9rZm5kZWNsKTogU2F2ZSB0ZW1wbGF0ZS1pZCBpbmZvcm1hdGlvbiB3aGVuIGRlY2xhcmluZyBhIGZyaWVuZAoJd2l0aCBleHBsaWNpdCB0ZW1wbGF0ZSBhcmd1bWVudHMuICBQYXNzIGFyZ3VtZW50cyB0bwoJY2hlY2tfZXhwbGljaXRfc3BlY2lhbGl6YXRpb24gdmlhIGNvcnJlY3QgY29udmVudGlvbjsgYXQgc29tZQoJcG9pbnQgY2hlY2tfZXhwbGljaXRfc3BlY2lhbGl6YXRpb24gY2hhbmdlZCwgYnV0IHRoZXNlIGNhbGwtc2l0ZXMKCWRpZCBub3QuCgkoZ3Jva2RlY2xhcmF0b3IpOiBUaWR5IHVwIHNsaWdodGx5LgoJKiBkZWNsMi5jIChjaGVja19jbGFzc2ZuKTogVGlkeSB1cCBzbGlnaHRseS4gIERvbid0IGFzc3VtZSB0aGF0Cgl0d28gdGVtcGxhdGUgZnVuY3Rpb25zIHdpdGggdGhlIHNhbWUgREVDTF9BU1NFTUJMRVJfTkFNRSB0aGUgc2FtZSwKCXNpbmNlIHRoZSBuYW1lcyBhcmUgbm90IHlldCBtYW5nbGVkLgoJKiBlcnJvci5jIChkdW1wX2RlY2wpOiBVc2UgVEVNUExBVEVfUEFSTV9JTkRFWCBpbnN0ZWFkIG9mCglURU1QTEFURV9DT05TVF9QQVJNLiAKCShkdW1wX2V4cHIpOiBMaWtld2lzZS4gIFVzZSB0aGUgVEVNUExBVEVfUEFSTV9ERUNMIHRvIGdldCBhdCB0aGUKCWRlY2wgZm9yIGEgbm9uLXR5cGUgcGFyYW1ldGVyLCByYXRoZXIgdGhhbiBwcmludGluZyBgPHRwYXJtIC4uLj4nLgoJKiBmcmllbmQuYyAoaXNfZnJpZW5kKTogSGFuZGxlIFRFTVBMQVRFX0RFQ0wgZnJpZW5kcy4KCShkb19mcmllbmQpOiBEZWFsIHdpdGggdGVtcGxhdGUgZnJpZW5kcy4KCSogbGV4LmMgKGRvX3BlbmRpbmdfaW5saW5lcyk6IENhbGwKCW1heWJlX2JlZ2luX21lbWJlcl90ZW1wbGF0ZV9wcm9jZXNzaW5nLCByYXRoZXIgdGhhbgoJY29uZGl0aW9uYWxseSBjYWxsaW5nIGJlZ2luX21lbWJlcl90ZW1wbGF0ZV9wcm9jZXNzaW5nLgoJKHByb2Nlc3NfbmV4dF9pbmxpbmUpOiBMaWtld2lzZS4gIENhbGwKCW1heWJlX2VuZF9tZW1iZXJfdGVtcGxhdGVfcHJvY2Vzc2luZywgcmF0aGVyIHRoYW4KCWNvbmRpdGlvbmFsbHkgY2FsbGluZyBlbmRfbWVtYmVyX3RlbXBsYXRlX3Byb2Nlc3NpbmcuCgkoZG9fcGVuZGluZ19kZWZhcmdzKTogTGlrZXdpc2UuCgkoZG9faWRlbnRpZmllcik6IFVzZSBURU1QTEFURV9QQVJNX0lOREVYIGluc3RlYWQgb2YKCVRFTVBMQVRFX0NPTlNUX1BBUk0uICAKCSogbWV0aG9kLmMgKGJ1aWxkX21hbmdsZWRfdGVtcGxhdGVfcGFybV9pbmRleCk6IE5ldyBmdW5jdGlvbi4KCShidWlsZF9vdmVybG9hZF92YWx1ZSk6IFVzZSBpdC4KCShidWlsZF9vdmVybG9hZF9uYW1lKTogTGlrZXdpc2UuCgkqIHB0LmMgKGZpbmlzaF9tZW1iZXJfdGVtcGxhdGVfZGVjbCk6IEFsbG93IGZyaWVuZCBkZWNsYXJhdGlvbnMuCgkodGVtcGxhdGVfY2xhc3NfZGVwdGgpOiBOZXcgZnVuY3Rpb24uCgkoaXNfbWVtYmVyX3RlbXBsYXRlKTogUmVuYW1lLCBhbmQgbW9kaWZ5LCB0byBiZWNvbWUuLi4KCShpc19tZW1iZXJfb3JfZnJpZW5kX3RlbXBsYXRlKTogTmV3IGZ1bmN0aW9uLgoJKGVuZF9tZW1iZXJfdGVtcGxhdGVfcHJvY2Vzc2luZyk6IFJlbmFtZSwgYW5kIG1vZGlmeSwgdG8gYmVjb21lLi4uCgkobWF5YmVfZW5kX21lbWJlcl90ZW1wbGF0ZV9wcm9jZXNzaW5nKS4KCShidWlsZF90ZW1wbGF0ZV9wYXJtX2luZGV4KTogTmV3IGZ1bmN0aW9uLgoJKHJlZHVjZV90ZW1wbGF0ZV9wYXJtX2xldmVsKTogTmV3IGZ1bmN0aW9uLgoJKHByb2Nlc3NfdGVtcGxhdGVfcGFybSk6IE1vZGlmeSB0byB1c2UgYnVpbGRfdGVtcGxhdGVfcGFybV9pbmRleC4KCShwdXNoX3RlbXBsYXRlX2RlY2wpOiBEZWFsIHdpdGggZnJpZW5kIHRlbXBsYXRlcy4KCSh1c2VzX3RlbXBsYXRlX3Bhcm1zKTogVXNlIFRFTVBMQVRFX1BBUk1fSU5ERVggaW5zdGVhZCBvZgoJVEVNUExBVEVfQ09OU1RfUEFSTS4KCSh0c3Vic3RfZnJpZW5kX2Z1bmN0aW9uKTogTmV3IGZ1bmN0aW9uLgoJKGluc3RhbnRpYXRlX2NsYXNzX3RlbXBsYXRlKTogR2VuZXJhdGUgdGhlIERFQ0xfRlJJRU5ETElTVAoJZm9yIGEgbmV3IGluc3RhbnRpYXRpb24gYnkgdXNpbmcgdHN1YnN0X2ZyaWVuZF9mdW5jdGlvbiByYXRoZXIKCXRoYW4ganVzdCB0c3Vic3QuCgkodHN1YnN0KTogRG9uJ3QgdHN1YnN0IGludG8gYSB0eXBlIHdoaWNoIGlzIGEgVEVNUExBVEVfREVDTC4KCVVzZSBURU1QTEFURV9QQVJNX0lOREVYIGluc3RlYWQgb2YgVEVNUExBVEVfQ09OU1RfUEFSTSwgYW5kIHRoZQoJYXBwcm9wcmlhdGUgbmV3IG1hY3Jvcy4gIFVzZSByZWR1Y2VfdGVtcGxhdGVfcGFybV9sZXZlbCB0bwoJZ2VuZXJhdGUgbG93ZXItbGV2ZWwgdGVtcGxhdGUgcGFyYW1ldGVycy4gIEhhbmRsZSB0c3Vic3QnaW5nIGludG8KCVRFTVBMQVRFX0RFQ0xTIHRoYXQgZGVjbGFyZSBURU1QTEFURV9URU1QTEFURV9QQVJNUy4gIERvbid0IGZvcmdldAoJdG8gdHN1YnN0IHRoZSBERUNMX0NPTlRFWFQgYW5kIERFQ0xfQ0xBU1NfQ09OVEVYVCBvZiBuZXdseSBjcmVhdGVkCgl0ZW1wbGF0ZXMuICBTaW1pbGFybHkgZm9yIHRoZSB0ZW1wbGF0ZSBwYXJhbWV0ZXJzIGZvciBhIG5ldwoJdGVtcGxhdGUuCgkodHN1YnN0X2NvcHkpOiBUaWR5IHVwIHNsaWdodGx5LiAgVXNlIFRFTVBMQVRFX1BBUk1fSU5ERVggaW5zdGVhZAoJb2YgVEVNUExBVEVfQ09OU1RfUEFSTS4gIEhhbmRsZSBUWVBFX0RFQ0xzIGJ5IHRzdWJzdGluZyBpbnRvIHRoZW0uCgkodW5pZnkpOiBVc2UgVEVNUExBVEVfUEFSTV9JTkRFWCBpbnN0ZWFkIG9mIFRFTVBMQVRFX0NPTlNUX1BBUk0uICAKCShnZXRfYmluZGluZ3MpOiBDYWxsIGFkZF90b190ZW1wbGF0ZV9hcmdzIGlmIG5lY2Vzc2FyeS4KCShpbnN0YW50aWF0ZV9kZWNsKTogSGFuZGxlIGluc3RhbnRpYXRpb25zIG9mIGZyaWVuZCB0ZW1wbGF0ZXMuCgkqIHNlYXJjaC5jIChsb29rdXBfZmllbGRfMSk6IERvbid0IHRyZWF0IHRoZSBUWVBFX0ZJRUxEUyBvZiBhCglURU1QTEFURV9UWVBFX1BBUk0gYXMgYSBsaXN0IG9mIGZpZWxkczsgaXQncyBub3QhCgkqIHNwZXcuYyAoeXlsZXgpOiBEbyBhIGxpdHRsZSBtYW51YWwgY29uc3RhbnQgcHJvcG9nYXRpb24gdG8KCWNsYXJpZnkgdGhlIGNvZGUuCgkKU3VuIEZlYiAyMiAxOTo1MzoyOSAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBlcnJvci5jOiBJbmNsdWRlIHN5cy90eXBlcy5oLgoKVGh1IEZlYiAxOSAxNDo0OTowOSAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBtZXRob2QuYyAoYnVpbGRfbWFuZ2xlZF9uYW1lKTogU3RhcnQgQ1BQIGRpcmVjdGl2ZXMgaW4gY29sdW1uIHplcm8uCgpUaHUgRmViIDE5IDEwOjM2OjQ4IDE5OTggIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHR5cGVjazIuYyAocHJvY2Vzc19pbml0X2NvbnN0cnVjdG9yKTogU29ycnkgYWJvdXQgbm9uLXRyaXZpYWwKCWxhYmVsZWQgaW5pdGlhbGl6ZXJzLgoJKiBwYXJzZS55IChpbml0bGlzdCk6IFJlZW5hYmxlIGxhYmVsZWQgaW5pdGlhbGl6ZXJzLgoKVGh1IEZlYiAxOSAxMDoxNTo1NSAxOTk4ICBLcmlhbmcgTGVyZHN1d2FuYWtpaiAgPGxlcmRzdXdhQHNjZi51c2MuZWR1PgoKCSogcHQuYyAoY29lcmNlX3RlbXBsYXRlX3Bhcm1zKSBBZGQgYSBuZXcgcGFyYW1ldGVyLCBpc190bXBsX3Bhcm0sCglhbGwgY2FsbGVycyBjaGFuZ2VkLiAgUmVseSBvbiB0aGUgbmV3IHBhcmFtZXRlciBpbnN0ZWFkIG9mIGFyZyAKCWJlaW5nIGEgVFJFRV9MSVNUIHdoZW4gZGV0ZXJtaW5lIHdoZXRoZXIgd2UgYXJlIHdvcmtpbmcgaW5zaWRlCgl0ZW1wbGF0ZSB0ZW1wbGF0ZSBwYXJhbWV0ZXIuICBDbGVhbiB1cCBpc190eXBlIHRlc3QuCgkKVGh1IEZlYiAxOSAxMDowNDoxMiAxOTk4ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjdnQuYyAoY3BfY29udmVydF90b19wb2ludGVyKTogUHJlc2VydmUgVFJFRV9DT05TVEFOVC4KCSogdHlwZWNrMi5jIChpbml0aWFsaXplcl9jb25zdGFudF92YWxpZF9wKTogQWxsb3cgY29udmVyc2lvbnMKCWJldHdlZW4gcG9pbnRlcnMgYW5kIHJlZnJlcmVuY2VzLgoKMTk5OC0wMi0xOSAgQnJlbmRhbiBLZWhvZSAgPGJyZW5kYW5AY3lnbnVzLmNvbT4KCgkqIHR5cGVjay5jIChidWlsZF91bmFyeV9vcCk6IE9ubHkgd2FybiBhYm91dCBpbmNyL2RlY3IgYSBwb2ludGVyCglpZiBwZWRhbnRpYyB8fCB3YXJuX3BvaW50ZXJfYXJpdGguCgpUaHUgRmViIDE5IDA5OjM3OjIxIDE5OTggIEtyaWFuZyBMZXJkc3V3YW5ha2lqICA8bGVyZHN1d2FAc2NmLnVzYy5lZHU+CgoJKiBwdC5jICh1bmlmeSk6IEhhbmRsZSBURU1QTEFURV9ERUNMLgoKMTk5OC0wMi0xOCAgQnJlbmRhbiBLZWhvZSAgPGJyZW5kYW5AY3lnbnVzLmNvbT4KCgkqIGNwLXRyZWUuaCAoc3RyaXBfYXR0cnMpOiBSZW1vdmUgZGVjbC4KCjE5OTgtMDItMTggIERvdWcgRXZhbnMgIDxkZXZhbnNAY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAoZHVwbGljYXRlX2RlY2xzKTogQ2FsbCBtZXJnZV9tYWNoaW5lX2RlY2xfYXR0cmlidXRlcy4KCVVwZGF0ZSBvbGRkZWNsJ3MgYXR0cmlidXRlcyB0b28uCgkoc3RyaXBfYXR0cnMpOiBSZW1vdmUgZnVuY3Rpb24uCgkqIHR5cGVjay5jIChjb21tb25fdHlwZSk6IENhbGwgbWVyZ2VfbWFjaGluZV90eXBlX2F0dHJpYnV0ZXMuCgpUdWUgRmViIDE3IDE0OjA3OjUyIDE5OTggIE1hcmsgTWl0Y2hlbGwgIDxtbWl0Y2hlbGxAdXNhLm5ldD4KCgkqIHBhcnNlLnkgKGluaXRkY2wwX2lubmFyZHMpOiBOZXcgZ3JhbW1hciBzeW1ib2wuCgkobm9tb2RzX2luaXRkZWNscywgbm9tb2RzX2luaXRkY2wwKTogQ2hhbmdlIHR5cGUgZnJvbSBpdHlwZSB0bwoJbm9uZSwgc2luY2UgdGhlIHJlc3VsdGluZyB2YWx1ZSBpcyBuZXZlciB1c2VkLgoJKHBhcnNlX2RlY2wpOiBOZXcgZnVuY3Rpb24uCgkoZGF0YWRlZik6IFJlbW92ZSByZWR1bmRhbnQgYWN0aW9ucy4KCShpbml0ZGNsMCwgbm90eXBlX2luaXRkY2wwLCBub21vZHNfaW5pdGRjbDApOiBVc2UgaW5pdGRjbDBfaW5uYXJkcy4KCSogcGFyc2UuYzogUmVnZW5lcmF0ZWQuCgkKVHVlIEZlYiAxNyAxMTo1NDoxNiAxOTk4ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBwYXJzZS55IChzaW1wbGVfc3RtdCk6IFVzZSBnZXRkZWNscygpIHRvIGNoZWNrIGZvciBkZWNsLgoKU2F0IEZlYiAxNCAxMTo1MDo1MSAxOTk4ICBNYW5mcmVkIEhvbGxzdGVpbiAgPG1hbmZyZWRAcy1kaXJla3RuZXQuZGU+CgoJKiBNYWtlLWxhbmcuaW4gKERFTUFOR0xFUl9JTlNUQUxMX05BTUUsIERFTUFOR0xFUl9DUk9TU19OQU1FKTogTmV3IAoJbWFjcm9zLgoJKGMrKy5pbnN0YWxsLWNvbW1vbik6IEluc3RhbGwgYysrZmlsdCBwcm9wZXJseSBhcyBuYXRpdmUgb3IgYXMgY3Jvc3MKCXZhcmlhbnQuCgkoYysrLnVuaW5zdGFsbCk6IEFkZCBjKytmaWx0LgoKRnJpIEZlYiAxMyAxNDo1NTozNyAxOTk4ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjYWxsLmMgKHN0YW5kYXJkX2NvbnZlcnNpb24pOiBGaXggbXVsdGktbGV2ZWwgcHRyIGNvbnZlcnNpb25zLgoKRnJpIEZlYiAxMyAxNDowNjoyMiAxOTk4ICBNaWtlIFN0dW1wICA8bXJzQHdycy5jb20+CgoJKiBpbml0LmMgKGJ1aWxkX25ldyk6IFByb3BhZ2F0ZSBlcnJvcl9tYXJrX25vZGUgdXAuCgpGcmkgRmViIDEzIDEzOjI0OjMyIDE5OTggIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnkgKHNpbXBsZV9zdG10KTogSWYgdGhlIGNvbmRpdGlvbiBpc24ndCBhIGRlY2xhcmF0aW9uLCAKCXN0YXJ0IHRoZSBjb250cm9sbGVkIGJsb2NrIGFmdGVyIHRoZSB0ZXN0LgoKRnJpIEZlYiAxMyAwMjoyNjoxMCAxOTk4ICBBbmRyZWFzIFNjaHdhYiAgPHNjaHdhYkBpc3Nhbi5pbmZvcm1hdGlrLnVuaS1kb3J0bXVuZC5kZT4KCgkqIGNhbGwuYyAoYnVpbGRfb3Zlcl9jYWxsKTogQ29udmVydCBidWlsdGluIGFicywgbGFicyBhbmQgZmFicyB0bwoJdHJlZS1jb2Rlcy4KCSogZGVjbC5jIChpbml0X2RlY2xfcHJvY2Vzc2luZyk6IFJlZW5hYmxlIGFicywgbGFicyBhbmQgZmFicyBhcwoJYnVpbHRpbnMuCgpGcmkgRmViIDEzIDAxOjM2OjQyIDE5OTggIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGNhbGwuYyAoc3RhbmRhcmRfY29udmVyc2lvbik6IEEgQkFTRV9DT05WIHJlcGxhY2VzIGFuIFJWQUxVRV9DT05WLgoKRnJpIEZlYiAxMyAwMDoyMTo1OSAxOTk4ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjcC10cmVlLmg6IEFkZCBhY2Nlc3NfcHJvdGVjdGVkX3ZpcnR1YWxfbm9kZS4KCSogY2xhc3MuYyAoaW5pdF9jbGFzc19wcm9jZXNzaW5nKTogSW5pdGlhbGl6ZSBpdC4KCSogZGVjbC5jICh4cmVmX2Jhc2V0eXBlcyk6IFVzZSBpdC4KCSogcGFyc2UueSAoYmFzZV9jbGFzc19hY2Nlc3NfbGlzdCk6IExpa2V3aXNlLgoKCSogTWFrZS1sYW5nLmluIChERU1BTkdMRVJfUFJPRyk6IEFkZCAkKGV4ZWV4dCkuCgkoYysrLmluc3RhbGwtY29tbW9uKTogSW5zdGFsbCBjKytmaWx0LgoKVGh1IEZlYiAxMiAxMjo0Njo1MSAxOTk4ICBCZW5qYW1pbiBLb3NuaWsgIDxia296QHJoaW5vLmN5Z251cy5jb20+CgoJKiBkZWNsLmMgKHNoYWRvd190YWcpOiBHaXZlIGVycm9yIGZvciB0eXBlZGVmLWluZyBidWlsdC1pbiB0eXBlcy4KCldlZCBGZWIgMTEgMjM6Mjg6MDUgMTk5OCAgTWFyayBNaXRjaGVsbCAgPG1taXRjaGVsbEB1c2EubmV0PgoKCSogY2FsbC5jIChyZWZlcmVuY2VfYmluZGluZyk6IFVzZSBjb21wdHlwZXMgd2hlbiBjb21wYXJpbmcKCVRZUEVfTUFJTl9WQVJJQU5UUyB0byBoYW5kbGUgbm9uLWNhbm9uaWNhbCBhcnJheS9pbmRleCB0eXBlcy4KCldlZCBGZWIgMTEgMTY6NDI6MDQgMTk5OCAgTWFyayBNaXRjaGVsbCAgPG1taXRjaGVsbEB1c2EubmV0PgoKCSogdHJlZS5jIChpc19vdmVybG9hZGVkX2ZuKTogVXNlIHJlYWxseV9vdmVybG9hZGVkX2ZuLgoJKHJlYWxseV9vdmVybG9hZGVkX2ZuKTogTW92ZSBjaGVjayBoZXJlIGZyb20gaXNfb3ZlcmxvYWRlZF9mbi4gCgkoZ2V0X2ZpcnN0X2ZuKTogVXNlIHJlYWxseV9vdmVybG9hZGVkX2ZuIGFuZCBpc19vdmVybG9hZGVkX2ZuLgoKV2VkIEZlYiAxMSAxNTo1NDoxOCAxOTk4ICBNYXJrIE1pdGNoZWxsICA8bW1pdGNoZWxsQHVzYS5uZXQ+CgoJKiB0eXBlY2suYyAoYnVpbGRfcHRybWVtZnVuYyk6IFR5cGUtY2hlY2sgcG9pbnRlci10by1tZW1iZXIKCWNvbnZlcnNpb25zLgoKTW9uIEZlYiAgOSAyMjoyMzozMSAxOTk4ICBNYXJrIE1pdGNoZWxsICA8bW1pdGNoZWxsQHVzYS5uZXQ+CgoJKiBjcC10cmVlLmggKHB1c2hfdGVtcGxhdGVfZGVjbCk6IFJldHVybiB0aGUgZGVjbCBwYXNzZWQgaW4sIG9yIGFuCgllcXVpdmFsZW50IGR1cGxpY2F0ZS4KCSogZGVjbC5jIChwdXNodGFnKTogVXNlIHRoZSByZXR1cm4gdmFsdWUgZnJvbSBwdXNoX3RlbXBsYXRlX2RlY2wuCgkoZHVwbGljYXRlX2RlY2xzKTogV2hlbiBkdXBsaWNhdGluZyBhIHRlbXBsYXRlIGRlY2xhcmF0aW9uLCBtZXJnZQoJdGhlIERFQ0xfVEVNUExBVEVfUkVTVUxUcyBhcyB3ZWxsLgoJKG1ha2VfaW1wbGljaXRfdHlwZW5hbWUpOiBEb24ndCB0cnkgdG8gZGl2ZSBpbnRvIHR5cGVuYW1lIHR5cGVzIHRvCglmaW5kIGEgY29udGV4dCBmb3IgbWFraW5nIGEgbmV3IGltcGxpY2l0IHR5cGVuYW1lLgoJKHN0YXJ0X2RlY2wpOiBVc2UgdGhlIHJldHVybiB2YWx1ZSBmcm9tIHB1c2hfdGVtcGxhdGVfZGVjbC4KCShncm9rZGVjbGFyYXRvcik6IENvbXBsYWluIGFib3V0IGRlY2xhcmF0aW9ucyBsaXN0IGBjb25zdCBvcGVyYXRvcgoJaW50Jy4gIFNpbmNlIHdlIGRvbid0IGNvcnJlY3RseSBoYW5kbGUgaW4tY2xhc3MgaW5pdGlhbGl6YXRpb25zIG9mCglub24tc3RhdGljIGRhdGEgbWVtYmVycywgY29tcGxhaW4gYWJvdXQgdGhpcyAobm93IGlsbGVnYWwpCglwcmFjdGljZS4gIElzc3VlIGFuIGVycm9yIGZvciBpbml0aWFsaXphdGlvbnMgb2Ygbm9uLWNvbnN0IHN0YXRpY3MKCXNpbmNlIHRoYXQgaXMgaWxsZWdhbCBhcyB3ZWxsLCBhbmQgc2luY2Ugd2UgZG9uJ3QgaGFuZGxlIHRoYXQgY2FzZQoJY29ycmVjdGx5IGVpdGhlci4KCShzdGFydF9mdW5jdGlvbik6IFVzZSB0aGUgcmV0dXJuIHZhbHVlIGZyb20gcHVzaF90ZW1wbGF0ZV9kZWNsLgoJKHN0YXJ0X21ldGhvZCk6IExpa2V3aXNlLgoJKiBkZWNsMi5jIChncm9rZmllbGQpOiBMaWtld2lzZS4gIFNpbmNlIHRoZSBjaGFuZ2UgdG8KCWdyb2tkZWNsYXJhdG9yIGVuc3VyZXMgdGhhdCBhbGwgaW5pdGlhbGl6ZWQgZmllbGRzIGFyZSBpbiBmYWN0CglzdGF0aWMsIHJlbW92ZSBhIHJlZHVuZGFudCB0ZXN0IGZvciBUUkVFX1BVQkxJQy4KCSogcGFyc2UueSAoaW5pdGxpc3QpOiBEaXNhYmxlIGxhYmVsZWQgaW5pdGlhbGl6ZXJzIHNpbmNlIHRoZXkgZG8KCW5vdCB3b3JrIGFzIHBlciB0aGUgZG9jdW1lbnRhdGlvbiwgYW5kIHNpbmNlIHRoZXkgZG8gbm90IHVzZSB0aGUKCXNhbWUgc3ludGF4IGFzIHRoZSBDIGZyb250IGVuZC4KCSogcHQuYyAocHVzaF90ZW1wbGF0ZV9kZWNsKTogUmV0dXJuIHRoZSBkZWNsIHBhc3NlZCBpbiwgb3IgYW4KCWVxdWl2YWxlbnQgZHVwbGljYXRlLgoJKGxvb2t1cF90ZW1wbGF0ZV9jbGFzcyk6IFdoZW4gc2VhcmNoaW5nIGluIGEgbmVzdGVkIGNvbnRleHQsCgl1c2UgdGhlIHJpZ2h0IGFyZ3VtZW50cy4KCSh1c2VzX3RlbXBsYXRlX3Bhcm1zKTogSGFuZGxlIHRoZSBERUNMX0lOSVRJQUwgZm9yIGEgQ09OU1RfREVDTC4KCSogdHlwZWNrLmMgKGJ1aWxkX2NvbXBvbmVudF9yZWYpOiBBc3NpZ24gdGhlIGNvcnJlY3QgdHlwZSB0byB0aGUKCXJlc3VsdCBvZiBidWlsZF92Zm5fcmVmLgoJClR1ZSBGZWIgMTAgMjM6NTY6NDYgMTk5OCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogcHQuYyAoY29udmVydF9ub250eXBlX2FyZ3VtZW50KTogRml4IHR5cG8uCgkoY2hlY2tfZXhwbGljaXRfc3BlY2lhbGl6YXRpb24pOiBBbGxvdyBvbGQtc3R5bGUgc3BlY2lhbGl6YXRpb24KCW9mIGNsYXNzIHRlbXBsYXRlIG1lbWJlcnMuCgpUdWUgRmViIDEwIDIwOjM2OjUyIDE5OTggIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCQkJICBNYW5mcmVkIEhvbGxzdGVpbiAgPG1hbmZyZWRAcy1kaXJla3RuZXQuZGU+CgoJKiBkZWNsLmMgKGdyb2tkZWNsYXJhdG9yKTogVXNlIERFQ0xfVVNFX1RFTVBMQVRFIGluc3RlYWQKCXdoZW4gZGVjaWRpbmcgdG8gb3ZlcnJpZGUgREVDTF9BU1NFTUJMRVJfTkFNRS4KClR1ZSBGZWIgMTAgMTU6MzA6NTUgRVNUIDE5OTggQW5kcmV3IE1hY0xlb2QgPGFtYWNsZW9kQHRvcnBlZG8udG8uY3lnbnVzLmNvbT4KCgkqIGRlY2wyLmMgKGxhbmdfZl9vcHRpb25zKTogQWRkIC1mc3F1YW5nbGUgdG8gb3B0aW9uIHByb2Nlc3NpbmcgbGlzdC4KCSogY3AtdHJlZS5oIChmbGFnX2RvX3NxdWFuZ2xpbmcpOiBBZGQgZGVjbGFyYXRpb24uCgkqIGxhbmctb3B0aW9ucy5oOiBBZGQgLWZzcXVhbmdsZSBhbmQgLWZuby1zcXVhbmdsZS4KCSogbWV0aG9kLmM6IEFkZCBtYWNyb3MgYW5kIHN0YXRpYyB2YXJpYWJsZXMgZm9yIHNxdWFuZ2xpbmcuCgkoYnVpbGRfb3ZlcmxvYWRfbmFtZSk6IFJlbmFtZSB0byBidWlsZF9tYW5nbGVkX25hbWUsIGFkZCBsb2dpYyBmb3IgQiAKCWNvbXByZXNzaW9uLCBhbmQgc3BsaXQgaW50byBwcm9jZXNzX21vZGlmaWVycyBhbmQgCglwcm9jZXNzX292ZXJsb2FkX2l0ZW0uCgkocHJvY2Vzc19tb2RpZmllcnMpOiBOZXcgZnVuY3Rpb24sIHRvIGhhbmRsZSBjb25zdGFudCwgcmVmZXJlbmNlLCAKCWFuZCBwb2ludGVyIHR5cGVzLiAKCShwcm9jZXNzX292ZXJsb2FkX2l0ZW0pOiBOZXcgZnVuY3Rpb24sIGhhbmRsZXMgaXNzdWUgb2YgdHlwZSBjb2Rlcy4KCShidWlsZF9vdmVybG9hZF9uYW1lKTogTmV3IGZ1bmN0aW9uLCBzdGFydCBzcXVhbmdsaW5nIGFuZCBjYWxsIAoJYnVpbGRfbWFuZ2xlZF9uYW1lLgoJKEFMTE9DQVRFX1RZUEVWRUMsIERFQUxMT0NBVEVfVFlQRVZFQyk6IFJlbW92ZSBtYWNybyBhbmQgZXhwYW5kIGlubGluZS4KCShzdGFydF9zcXVhbmdsaW5nKTogTmV3IGZ1bmN0aW9uIHRvIGluaXRpYWxpemUgc3F1YW5nbGluZyBzdHJ1Y3RzLgoJKGVuZF9zcXVhbmdsaW5nKTogTmV3IGZ1bmN0aW9uIHRvIGRlc3Ryb3kgc3F1YW5nbGluZyBzdHJ1Y3RzLgoJKG5yZXBlYXRzKTogUmVuYW1lIHZhcmlhYmxlIHRvIE5yZXBlYXRzLgoJKGlzc3VlX25yZXBlYXRzKTogTmV3IGZ1bmN0aW9uIGZvciBpc3N1aW5nICduJyB0eXBlIHJlcGVhdHMuCgkoY2hlY2tfa3R5cGUpOiBOZXcgZnVuY3Rpb24gdG8gY2hlY2sgZm9yIHR5cGUgSyBuYW1lIGNvbXByZXNzaW9uLgoJKGJ1aWxkX292ZXJsb2FkX25lc3RlZF9uYW1lKTogQWRkIGEgY2hlY2sgZm9yIEsgbmFtZSBjb21wcmVzc2lvbi4KCShidWlsZF9xdWFsaWZpZWRfbmFtZSk6IEFkZCBhIGNoZWNrIGZvciBLIG5hbWUgY29tcHJlc3Npb24gYW5kIGRvbid0Cgl1c2UgREVDTF9BU1NFTUJMRVJfTkFNRSB3aGVuIHNxdWFuZ2xpbmcgaXMgb24uCgkoY2hlY2tfYnR5cGUpOiBOZXcgZnVuY3Rpb24sIGNoZWNrcyBmb3IgQiB0eXBlIGNvbXByZXNzaW9uLgoJKGJ1aWxkX3N0YXRpY19uYW1lLCBidWlsZF9kZWNsX292ZXJsb2FkX3JlYWwpOiBJbml0aWF0ZSBzcXVhbmdsaW5nLgoJKGJ1aWxkX3R5cGVuYW1lX292ZXJsb2FkLCBidWlsZF9vdmVybG9hZF93aXRoX3R5cGUpOiBJbml0aWF0ZSAKCXNxdWFuZ2xpbmcKClN1biBGZWIgIDggMjM6NDc6MzggMTk5OCAgc2NvdHQgc255ZGVyICA8c3NzQGQwbGludXgwMS5mbmFsLmdvdj4KCgkqIG1ldGhvZC5jIChtYWtlX3RodW5rKTogQXZvaWQgbmFtZSBidWZmZXIgb3ZlcmZsb3cuCgpTYXQgRmViICA3IDE2OjQ4OjU0IDE5OTggIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHB0LmMgKGluc3RhbnRpYXRlX2RlY2wpOiBDYWxsIGNwX2ZpbmlzaF9kZWNsIGZvciB2YXJzIGV2ZW4gaWYgd2UKCWRvbid0IGRlZmluZSB0aGVtIHlldC4KCgkqIHBhcnNlLnkgKG5vbW9kc19pbml0ZGNsMCk6IEFkZCBjb25zdHJ1Y3Rvcl9kZWNsYXJhdG9yIGNhc2UuCgpGcmkgRmViICA2IDIxOjMyOjI1IDE5OTggIFJpY2hhcmQgS2VubmVyICA8a2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHU+CgoJKiBjb25maWctbGFuZy5pbiAoZGlmZl9leGNsdWRlcyk6IFVzZSBiYXNlbmFtZSBvbmx5LgoKVGh1IEZlYiAgNSAxOToxMDo0MCAxOTk4ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiB0aW5mbzIuY2M6IEFkZCB0aW5mbyBmb3Igc2lnbmVkIGNoYXIuCgpUaHUgRmViICA1IDE0OjM4OjIzIDE5OTggIE1pa2UgU3R1bXAgIDxtcnNAd3JzLmNvbT4KCgkqIHNlYXJjaC5jIChjb21wdXRlX2FjY2Vzcyk6IEhhbmRsZSBwcm90ZWN0ZWQgY29uc3RydWN0b3JzIGluIGRlcml2ZWQKCWNsYXNzZXMgYXMgYWNjZXNzaWJsZS4KCldlZCBGZWIgIDQgMDE6MjY6NDkgMTk5OCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZXhwci5jIChjcGx1c19leHBhbmRfZXhwciwgUENDX1NUQVRJQ19TVFJVQ1RfUkVUVVJOIGNvZGUpOgoJQ2FsbCBjb252ZXJ0X2Zyb21fcmVmZXJlbmNlIHNvb25lci4KClR1ZSBGZWIgIDMgMjM6NTA6NTIgMTk5OCAgTWFyayBNaXRjaGVsbCAgPG1taXRjaGVsbEB1c2EubmV0PgoKCSogY3Z0LmMgKG9jcF9jb252ZXJ0KTogT2J0YWluIHRoZSBjb25zdGFudCB2YWx1ZXMgZnJvbSBjb25zdGFudAoJZGVjbHMgZXZlbiBpZiB0aGUgZGVzdGluYXRpb24gdHlwZSBpcyB0aGUgc2FtZSBhcyB0aGUgdHlwZSBvZiB0aGUKCWRlY2wuIAoKCSogZGVjbDIuYyAoZmluaXNoX2ZpbGUpOiBNYWtlIHN1cmUgdGhhdCBzdGF0aWMgaW5saW5lcyB3aXRoCglkZWZpbml0aW9ucyBhcmUgbm90IG1hcmtlZCBERUNMX0VYVEVSTkFMIGJlZm9yZSByZXR1cm5pbmcuCgpUdWUgRmViICAzIDIyOjQzOjQyIDE5OTggIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGRlY2wuYzogTG9zZSBhcmdfbG9va2luZ19mb3JfdGVtcGxhdGUuCgkobG9va3VwX25hbWVfcmVhbCk6IExpa2V3aXNlLgoJKiBwYXJzZS55OiBMb3NlIHByb2Nlc3NpbmdfdGVtcGxhdGVfYXJnLCB0ZW1wbGF0ZV9hcmcxCgkocHJpbWFyeSk6IExpa2V3aXNlLgoJKiBzcGV3LmMgKHl5bGV4KTogU2V0IGxhc3RpZGRlY2wgZm9yIFBUWVBFTkFNRXMsIHRvby4KClR1ZSBGZWIgIDMgMjI6MDQ6MDEgMTk5OCAgS3JpYW5nIExlcmRzdXdhbmFraWogIDxsZXJkc3V3YUBzY2YudXNjLmVkdT4KCgkqIGVycm9yLmMgKGR1bXBfZGVjbCk6IEZpeCB0eXBlIG9mIGRlZmF1bHQgYXJndW1lbnRzIGZvciB0ZW1wbGF0ZQoJdGVtcGxhdGUgcGFyYW1ldGVycyBhbmQgbm9udHlwZSB0ZW1wbGF0ZSBwYXJhbWV0ZXJzLgoJKiBwYXJzZS55ICh0ZW1wbGF0ZV9wYXJtKTogSGFuZGxlIGludmFsaWQgZGVmYXVsdCB0ZW1wbGF0ZSAKCXRlbXBsYXRlIGFyZ3VtZW50cyBoZXJlLgoKCSogcGFyc2UueSAodGVtcGxhdGVfcGFybSk6IFVzZSB0ZW1wbGF0ZV9hcmcgaW5zdGVhZCBvZiBQVFlQRU5BTUUgCglmb3IgZGVmYXVsdCB0ZW1wbGF0ZSB0ZW1wbGF0ZSBhcmd1bWVudC4KCSogcHQuYyAoY29lcmNlX3RlbXBsYXRlX3Bhcm1zKTogTWVyZ2UgZGVmYXVsdCB0ZW1wbGF0ZSBhcmd1bWVudCAKCWNvZGVzLiAgQ2FuIHRyZWF0IFJFQ09SRF9UWVBFIGFzIHRlbXBsYXRlIG5hbWUgaWYgaXQgaXMgaW1wbGljaXRseQoJY3JlYXRlZC4gIEZpeCBhcmd1bWVudCBpbmRleCBpbiBlcnJvciBtZXNzYWdlLgoJKiB0eXBlY2suYyAoY29tcHR5cGVzKTogTWVyZ2UgdGVtcGxhdGUgYXJndW1lbnQgY29tcGFyaXNvbiBjb2RlcyBpbiAKCVRFTVBMQVRFX1RFTVBMQVRFX1BBUk0gYW5kIFJFQ09SRF9UWVBFLgoKVHVlIEphbiAgNiAwMTo0Mjo0NCAxOTk4ICBNdW1pdCBLaGFuIDxraGFuQHhyYXlsaXRoLndpc2MuZWR1PgoKCSogbGV4LmMgKGZpbGVfbmFtZV9ub25kaXJlY3RvcnkpOiBBbHNvIGNoZWNrIGZvciAnLycuCgpNb24gRmViICAyIDExOjI0OjIyIDE5OTggIE1hcmsgTWl0Y2hlbGwgIDxtbWl0Y2hlbGxAdXNhLm5ldD4KCgkqIHBhcnNlLnkgKHByaW1hcnkpOiBEZWFsIHdpdGggc3RhdGVtZW50LWV4cHJlc3Npb25zIGluCgl0ZW1wbGF0ZXMuIAoJKiBwdC5jICh0c3Vic3RfY29weSk6IEhhbmRsZSBCSU5EX0VYUFIuCgkqIHRyZWUuYyAobWFwY2FyKTogTGlrZXdpc2UuCgoJKiBjYWxsLmMgKGFkZF90ZW1wbGF0ZV9jYW5kaWRhdGVfcmVhbCk6IFBhc3MgZXh0cmEgcGFyYW1ldGVyIHRvCglmbl90eXBlX3VuaWZpY2F0aW9uLiAKCSogY3AtdHJlZS5oIChmbl90eXBlX3VuaWZpY2F0aW9uKTogQWRkIHBhcmFtZXRlci4KCSogcHQuYyAoZm5fdHlwZV91bmlmaWNhdGlvbik6IEFkZCBhZGRpdGlvbmFsIHBhcmFtZXRlciB0byBkZWFsIHdpdGgKCXN0YXRpYyBtZW1iZXIgZnVuY3Rpb25zLgoJKGdldF9iaW5kaW5ncyk6IERlYWwgd2l0aCBzdGF0aWMgbWVtYmVyIGZ1bmN0aW9ucy4KCgkqIGNwLXRyZWUuaCAoREVDTF9OT05TVEFUSUNfTUVNQkVSX0ZVTkNUSU9OX1ApOiBOZXcgbWFjcm8uCQoJKHJldmVydF9zdGF0aWNfbWVtYmVyX2ZuKTogRGVjbGFyZS4KCSogZGVjbC5jIChyZXZlcnRfc3RhdGljX21lbWJlcl9mbik6IFJlbW92ZSBkZWNsYXJhdGlvbi4gIENoYW5nZQoJbGlua2FnZSBmcm9tIGludGVybmFsIHRvIGV4dGVybmFsLgoJKGNwX2ZpbmlzaF9kZWNsKTogRGVhbCB3aXRoIHZpcnR1YWwgZnVuY3Rpb25zIGluIGNsYXNzZXMgbG9jYWwgdG8KCXRlbXBsYXRlIGZ1bmN0aW9ucy4KCSogZGVjbDIuYyAoZmluaXNoX2ZpbGUpOiBEb24ndCBmb3JnZXQgdG8gZW1pdCBpbmNyZW1lbnQvZGVjcmVtZW50CglleHByZXNzaW9ucyBpbiBpbml0aWFsaXplcnMgZm9yIGZpbGUtc2NvcGUgdmFyaWFibGVzLgoJKiBwYXJzZS55ICh0eXBlbmFtZV9zdWIyKTogSWYgdGhlIHR5cGVuYW1lIGRvZXNuJ3QgbmFtZXMgYQoJdGVtcGxhdGUsIHJhdGhlciB0aGFuIGEgdHlwZSwgaXNzdWUgYW4gZXJyb3IgbWVzc2FnZS4KCSogcHQuYyAoY2hlY2tfZXhwbGljaXRfc3BlY2lhbGl6YXRpb24pOiBIYW5kbGUgc3BlY2lhbGl6YXRpb25zIG9mCglzdGF0aWMgbWVtYmVyIGZ1bmN0aW9ucy4KCShjb2VyY2VfdGVtcGxhdGVfcGFybXMpOiBIYW5kbGUgb2Zmc2V0IHJlZmVyZW5jZXMgdG8gbGlzdHMgb2YKCW1lbWJlciBmdW5jdGlvbnMuCgkqIHNlYXJjaC5jIChub3RlX2RlYnVnX2luZm9fbmVlZGVkKTogRG9uJ3QgY3Jhc2ggd2hlbiBoYW5kZWQgYQoJdHlwZSB3aGljaCBpcyBiZWluZyBkZWZpbmVkLgoJKiB0eXBlY2suYyAoY29tcGxldGVfdHlwZSk6IERvbid0IGNyYXNoIHdoZW4gaGFuZGVkIE5VTExfVFJFRTsKCXRoYXQgY2FuIGhhcHBlbiB3aXRoIHNvbWUgaWxsZWdhbCBjb2RlLgoKTW9uIEZlYiAgMiAwMDo1NzozOCAxOTk4ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBjYWxsLmMgKHVzZXJfaGFyc2huZXNzKTogSW5pdGlhbGl6ZSBgY29kZScgdG8gMC4KCShidWlsZF9tZXRob2RfY2FsbCk6IEluaXRpYWxpemUgYGNhbmRpZGF0ZXMnLCBgY3AnIGFuZCBgbGVuJyB0byAwLgoJKG51bGxfcHRyX2NzdF9wKTogQWRkIHBhcmVudGhlc2VzIGFyb3VuZCAmJiB3aXRoaW4gfHwuCgkoc3RhbmRhcmRfY29udmVyc2lvbik6IExpa2V3aXNlLgoJKHpfY2FuZGlkYXRlKTogTGlrZXdpc2UuCgkoYnVpbGRfdXNlcl90eXBlX2NvbnZlcnNpb25fMSk6IEluaXRpYWxpemUgYGFyZ3MnIHRvIE5VTExfVFJFRS4KCShidWlsZF9vYmplY3RfY2FsbCk6IExpa2V3aXNlIGZvciBgbWVtX2FyZ3MnLgoJKGJ1aWxkX25ld19vcCk6IExpa2V3aXNlIGZvciBgbWVtX2FyZ2xpc3QnLiAgQWRkIGByZXR1cm4nIGZyb20KCWRlZmF1bHQgY2FzZSBpbiBlbnVtZXJhdGlvbiBzd2l0Y2guCgoJKiBjbGFzcy5jIChidWlsZF92dGFibGVfZW50cnkpOiBBZGQgZXhwbGljaXQgYnJhY2VzIHRvIGF2b2lkCglhbWJpZ3VvdXMgYGVsc2UnLgoJKGJ1aWxkX2NsYXNzX2luaXRfbGlzdCk6IExpa2V3aXNlLgoJKGZpbmlzaF9zdHJ1Y3RfMSk6IEluaXRpYWxpemUgYHdpZHRoJyB0byAwLgoJKGluc3RhbnRpYXRlX3R5cGUpOiBJbml0aWFsaXplIGBuYW1lJyB0byBOVUxMX1RSRUUuICBBZGQKCWV4cGxpY2l0IGJyYWNlcyB0byBhdm9pZCBhbWJpZ3VvdXMgYGVsc2UnLgoKCSogY3Z0LmMgKGNvbnZlcnRfdG9fYWdncik6IEFkZCBleHBsaWNpdCBicmFjZXMgdG8gYXZvaWQgYW1iaWd1b3VzCglgZWxzZScuCgoJKiBkZWNsLmMgKGdyb2tfcmVmZXJlbmNlX2luaXQpOiBFbGltaW5hdGUgdW51c2VkIHBhcmFtZXRlciwgYWxsCgljYWxsZXJzIGNoYW5nZWQuCgkocmVjb3JkX2J1aWx0aW5fdHlwZSk6IEluaXRpYWxpemUgYHRkZWNsJyB0byBOVUxMX1RSRUUuCgkoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBJbml0aWFsaXplIGB2Yl9vZmZfaWRlbnRpZmllcicgdG8gTlVMTF9UUkVFLgoJKGNwX2ZpbmlzaF9kZWNsKTogSW5pdGlhbGl6ZSBgdHR5cGUnIHRvIE5VTExfVFJFRS4KCShncm9rZGVjbGFyYXRvcik6IEFkZCBwYXJlbnRoZXNlcyBhcm91bmQgJiYgd2l0aGluIHx8LiAgQWRkCglleHBsaWNpdCBicmFjZXMgdG8gYXZvaWQgYW1iaWd1b3VzIGBlbHNlJy4KCShncm9rcGFybXMpOiBJbml0aWFsaXplIGB0eXBlJyB0byBOVUxMX1RSRUUuCgkoeHJlZl90YWcpOiBSZW1vdmUgdW51c2VkIGxhYmVsCWBqdXN0X3JldHVybicuCgkoZmluaXNoX2VudW0pOiBJbml0aWFsaXplIGBtaW5ub2RlJyBhbmQgYG1heG5vZGUnIHRvIE5VTExfVFJFRS4KCShmaW5pc2hfZnVuY3Rpb24pOiBJbml0aWFsaXplIGBjb25kJyBhbmQgYHRoZW5jbGF1c2UnIHRvIE5VTExfVFJFRS4KCShoYWNrX2luY29tcGxldGVfc3RydWN0dXJlcyk6IEFkZCBwYXJlbnRoZXNlcyBhcm91bmQgYXNzaWdubWVudAoJdXNlZCBhcyB0cnV0aCB2YWx1ZS4KCgkqIGRlY2wyLmMgKGNvZXJjZV9kZWxldGVfdHlwZSk6IEhpZGUgZGVmaW5pdGlvbiBvZiBgZTMnLgoKCSogZXJyb3IuYzogSW5jbHVkZSA8c3RkbGliLmg+LgoJKGR1bXBfZXhwcik6IENoYW5nZSB0aGUgdHlwZSBvZiBgaScgdG8gc2l6ZV90LiAgUmVtb3ZlIHVudXNlZAoJbGFiZWwgYGVycm9yJy4gCgoJKiBleGNlcHQuYyAoaW5pdF9leGNlcHRpb25fcHJvY2Vzc2luZyk6IFJlbW92ZSB1bnVzZWQgdmFyaWFibGUgYGQnLgoJKGV4cGFuZF90aHJvdyk6IExpa2V3aXNlIGZvciBgbGFiZWwnLgoKCSogZnJpZW5kLmMgKGFkZF9mcmllbmRzKTogQWRkIGV4cGxpY2l0IGJyYWNlcyB0byBhdm9pZCBhbWJpZ3VvdXMKCWBlbHNlJy4KCgkqIGluaXQuYyAoc29ydF9tZW1iZXJfaW5pdCk6IEluaXRpYWxpemUgYGxhc3RfZmllbGQnIHRvIE5VTExfVFJFRS4KCShzb3J0X2Jhc2VfaW5pdCk6IExpa2V3aXNlIGZvciBgYmluZm8nLgoJKGV4cGFuZF9tZW1iZXJfaW5pdCk6IExpa2V3aXNlIGZvciBgcnZhbCcuCgkoYnVpbGRfbWVtYmVyX2NhbGwpOiBBZGQgcGFyZW50aGVzZXMgYXJvdW5kIGFzc2lnbm1lbnQgdXNlZCBhcwoJdHJ1dGggdmFsdWUuCgkoYnVpbGRfb2Zmc2V0X3JlZik6IEFkZCBleHBsaWNpdCBicmFjZXMgdG8gYXZvaWQgYW1iaWd1b3VzIGBlbHNlJy4KCShidWlsZF9uZXcpOiBJbml0aWFsaXplIGBuZWx0cycgdG8gTlVMTF9UUkVFLiAgSW5pdGlhbGl6ZQoJYG9sZF9pbW1lZGlhdGVfc2l6ZV9leHBhbmQnIHRvIDAuCgkoYnVpbGRfbmV3XzEpOiBJbml0aWFsaXplIGBuZWx0cycgYW5kIGBhbGxvY19ub2RlJyB0byBOVUxMX1RSRUUuCgkoYnVpbGRfdmVjX2RlbGV0ZV8xKTogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZSBgYmxvY2snLgoJKGV4cGFuZF92ZWNfaW5pdCk6IEluaXRpYWxpemUgYGl0eXBlJyB0byBOVUxMX1RSRUUuCgoJKiBsZXguYzogSW5jbHVkZSA8c3RyaW5ncy5oPiBpZiB3ZSBkb24ndCBoYXZlIDxzdHJpbmcuaD4uICBQcm90ZWN0CglkZWNsYXJhdGlvbiBvZiBgaW5kZXgnIGFuZCBgcmluZGV4JyB3aXRoIGF1dG9jb25mIG1hY3Jvcy4KCShyZWluaXRfcGFyc2VfZm9yX2V4cHIpOiBSZW1vdmUgdW51c2VkIHZhcmlhYmxlcwoJYGxvb2tfZm9yX3NlbWljb2xvbicgYW5kIGBsb29rX2Zvcl9sYnJhYycuCgkoY29uc191cF9kZWZhdWx0X2Z1bmN0aW9uKTogSW5pdGlhbGl6ZSBgYXJncycgdG8gTlVMTF9UUkVFLgoJKHJlYWRlc2NhcGUpOiBJbml0aWFsaXplIGBmaXJzdGRpZycgdG8gMC4KCShyZWFsX3l5bGV4KTogQWRkIHBhcmVudGhlc2VzIGFyb3VuZCBhc3NpZ25tZW50IHVzZWQgYXMgdHJ1dGggdmFsdWUuIAoKCSogbWV0aG9kLmM6IEluY2x1ZGUgPHN0cmluZ3MuaD4gaWYgd2UgZG9uJ3QgaGF2ZSA8c3RyaW5nLmg+LgoJUHJvdGVjdCBkZWNsYXJhdGlvbiBvZiBgaW5kZXgnIHdpdGggYXV0b2NvbmYgbWFjcm8uCgoJKiBwYXJzZS55IChwcmltYXJ5KTogQWRkIGV4cGxpY2l0IGJyYWNlcyB0byBhdm9pZCBhbWJpZ3VvdXMgYGVsc2UnLgoJSW5pdGlhbGl6ZSBgdHlwZScgdG8gTlVMTF9UUkVFLgoJKHN0cnVjdHNwKTogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZSBgaWQnLgoKCSogcHQuYyAoY29lcmNlX3RlbXBsYXRlX3Bhcm1zKTogQWRkIGV4cGxpY2l0IGJyYWNlcyB0byBhdm9pZAoJYW1iaWd1b3VzIGBlbHNlJy4KCShsb29rdXBfdGVtcGxhdGVfY2xhc3MpOiBJbml0aWFsaXplIGB0ZW1wbGF0ZScgdG8gTlVMTF9UUkVFLgoJKGluc3RhbnRpYXRlX2NsYXNzX3RlbXBsYXRlKTogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZSBgbmFtZScgYW5kIGBlJy4KCSh0c3Vic3QpOiBMaWtld2lzZSBmb3IgYGknLiAgSW5pdGlhbGl6ZSBgbGFzdCcgdG8gTlVMTF9UUkVFLgoJKGRvX3BvcGxldmVsKTogSW5pdGlhbGl6ZSBgc2F2ZWRfd2Fybl91bnVzZWQnIHRvIDAuCgkodHlwZV91bmlmaWNhdGlvbik6IFJlbW92ZSB1bnVzZWQgdmFyYWJsZSBgcGFybScuCgkodW5pZnkpOiBMaWtld2lzZSBmb3IgYGonLgoKCSogcmVwby5jIChpbml0X3JlcG8pOiBBZGQgcGFyZW50aGVzZXMgYXJvdW5kIGFzc2lnbm1lbnQgdXNlZCBhcwoJdHJ1dGggdmFsdWUuCgkoZmluaXNoX3JlcG8pOiBSZW1vdmUgdW51c2VkIHZhcmFibGUgYHAnLgoJCgkqIHNlYXJjaC5jIChnZXRfYmluZm8pOiBJbml0aWl6ZSBgdHlwZScgdG8gTlVMTF9UUkVFLgoJKGdldF9iYXNlX2Rpc3RhbmNlKTogTGlrZXdpc2UuCgkobG9va3VwX2ZpZWxkKTogSW5pdGlhbGl6ZSBgcnZhbF9iaW5mb19oJywgYHR5cGUnLCBgYmFzZXR5cGVfcGF0aCcKCWFuZCBgbmV3X3YnIHRvIE5VTExfVFJFRS4KCShsb29rdXBfZm5maWVsZHMpOiBMaWtld2lzZSBmb3IgYHJ2YWxfYmluZm9faCcuCgkoYnJlYWR0aF9maXJzdF9zZWFyY2gpOiBBZGQgcGFyZW50aGVzZXMgYXJvdW5kIGFzc2lnbm1lbnQgdXNlZCBhcwoJdHJ1dGggdmFsdWUuCgkoZ2V0X3RlbXBsYXRlX2Jhc2UpOiBJbml0aWFsaXplIGB0eXBlJyB0byBOVUxMX1RSRUUuCgoJKiBzaWcuYyAoYXBwZW5kX3NpZ25hdHVyZV9maWVsZHMpOiBJbml0aWFsaXplIGBsYXN0X21mcHRyJyB0bwoJTlVMTF9UUkVFLgoJKGJ1aWxkX3NpZ25hdHVyZV90YWJsZV9jb25zdHJ1Y3Rvcik6IExpa2V3aXNlIGZvcgoJYGxhc3RfcmhzX2ZpZWxkJywgYHBmbicgYW5kIGB2dF9vZmYnLgoJKGJ1aWxkX3NpZ3RhYmxlKTogTGlrZXdpc2UgZm9yIGBpbml0Jy4KCgkqIHRyZWUuYyAoYnJlYWtfb3V0X2NhbGxzKTogSW5pdGlhbGl6ZSBgdDInIHRvIE5VTExfVFJFRS4KCShwcm9wYWdhdGVfYmluZm9fb2Zmc2V0cyk6IExpa2V3aXNlIGZvciBgZGVsdGEnLgoJKGhhc2hfdHJlZV9jb25zKTogSW5pdGlhbGl6ZSBoYXNoY29kZSB0byAwLgoJKGNhbl9mcmVlKTogTGlrZXdpc2UgZm9yIGBzaXplJy4KCShjcF90cmVlX2VxdWFsKTogQWRkIGV4cGxpY2l0IGJyYWNlcyB0byBhdm9pZCBhbWJpZ3VvdXMgYGVsc2UnLgoJCgkqIHR5cGVjay5jIChjb252ZXJ0X3NlcXVlbmNlKTogSGlkZSBwcm90b3R5cGUuCgkoY29tbW9uX3R5cGUpOiBBZGQgZXhwbGljaXQgYnJhY2VzIHRvIGF2b2lkIGFtYmlndW91cyBgZWxzZScuCgkoY29tcF90YXJnZXRfdHlwZXMpOiBMaWtld2lzZS4KCShidWlsZF94X2Z1bmN0aW9uX2NhbGwpOiBJbml0aWFsaXplIGBjdHlwZXB0cicgdG8gTlVMTF9UUkVFLgoJKGJ1aWxkX2Z1bmN0aW9uX2NhbGxfcmVhbCk6IEFkZCBleHBsaWNpdCBicmFjZXMgdG8gYXZvaWQgYW1iaWd1b3VzCglgZWxzZScuCgkoY29udmVydF9hcmd1bWVudHMpOiBJbml0aWFsaXplIGBjYWxsZWRfdGhpbmcnIHRvIDAuCgkoY29udmVydF9mb3JfaW5pdGlhbGl6YXRpb24pOiBJbml0aWFsaXplIGBzYXZldycgYW5kIGBzYXZlZScgdG8gMC4KCgkqIHR5cGVjazIuYyAoaW5jb21wbGV0ZV90eXBlX2Vycm9yKTogSW5pdGlhbGl6ZSBgZXJybXNnJyB0byAwLgoJKGRpZ2VzdF9pbml0KTogSW5pdGlhbGl6ZSBgb2xkX3RhaWxfY29udGVudHMnIHRvIE5VTExfVFJFRS4KCShidWlsZF94X2Fycm93KTogTGlrZXdpc2UgZm9yIGBsYXN0X3J2YWwnLgoKCSogeHJlZi5jIChHTlVfeHJlZl9kZWNsKTogSW5pdGlhbGl6ZSBgY2xzJyB0byAwLgoKU3VuIEZlYiAgMSAxMjo0NTozNCAxOTk4IEoib3JuIFJlbm5lY2tlIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIGRlY2wuYyAoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBVc2Ugc2V0X3NpemV0eXBlLgoJKiBkZWNsMi5jIChzaXpldHlwZSk6IERvbid0IGRlY2xhcmUuCgkqIHR5cGVjay5jIChjX3NpemVvZik6IENvbnZlcnQgcmVzdWx0IG9mICpfRElWX0VYUFIgdG8gc2l6ZXR5cGUuCgkoY19zaXplb2Zfbm93YXJuLCBidWlsZF9iaW5hcnlfb3Bfbm9kZWZhdWx0KTogTGlrZXdpc2UuCgkoYnVpbGRfY29tcG9uZW50X2FkZHIsIHVuYXJ5X2NvbXBsZXhfbHZhbHVlKTogTGlrZXdpc2UuCgkqIHJ0dGkuYyAoZXhwYW5kX2NsYXNzX2Rlc2MpOiBMaWtld2lzZS4KCSogY2xhc3MuYyAoZ2V0X3ZmaWVsZF9vZmZzZXQpOiBMaWtld2lzZS4KClRodSBKYW4gMjkgMTA6Mzk6MzAgMTk5OCAgTWFyayBNaXRjaGVsbCAgPG1taXRjaGVsbEB1c2EubmV0PgoKCSogcHQuYyAoY29udmVydF9ub250eXBlX2FyZ3VtZW50KTogTW92ZSBjaGVjayBmb3IgaXNfb3ZlcmxvYWRlZF9mbgoJZWFybHkgdG8gYXZvaWQgYm9ndXMgZXJyb3IuICBIYW5kbGUgb3ZlcmxvYWRlZCBmdW5jdGlvbgoJbmFtZXMgcHJvdmlkZWQgYXMgdGVtcGxhdGUgYXJndW1lbnRzIGNvcnJlY3RseS4KCShjb2VyY2VfdGVtcGxhdGVfcGFybXMpOiBEb24ndCBtaXNoYW5kbGUgb3ZlcmxvYWRlZCBmdW5jdGlvbnMgd2hlbgoJZGVhbGluZyB3aXRoIHRlbXBsYXRlIHRlbXBsYXRlIHBhcmFtZXRlcnMuCgkobG9va3VwX3RlbXBsYXRlX2NsYXNzKTogSXNzdWUgYW4gZXJyb3IgbWVzc2FnZSwgcmF0aGVyIHRoYW4KCWNyYXNoaW5nLCB3aGVuIHRoZSBUWVBFX0RFQ0wgcHJvdmlkZWQgaXMgbm90IGEgdGVtcGxhdGUgdHlwZS4KCldlZCBKYW4gMjggMjM6MTQ6NDQgMTk5OCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY2xhc3MuYyAoaW5zdGFudGlhdGVfdHlwZSk6IERvbid0IGp1c3QgcmV0dXJuIGEga25vd24gdHlwZSBpZgogCWl0J3Mgd3JvbmcuCgpXZWQgSmFuIDI4IDExOjA0OjA3IDE5OTggIE1hcmsgTWl0Y2hlbGwgIDxtbWl0Y2hlbGxAdXNhLm5ldD4KCgkqIGNsYXNzLmMgKGluc3RhbnRpYXRlX3R5cGUpOiBSZW1vdmUgaGFuZGxpbmcgb2YgRlVOQ1RJT05fREVDTAoJc2luY2UgdGhhdCBjb2RlIGNvdWxkIG5ldmVyIGJlIHJlYWNoZWQuCgkKCSogZXJyb3IuYyAoZHVtcF9kZWNsKTogQXZvaWQgYWJvcnRpbmcgaW4gdGhlIG1pZHN0IG9mIHByaW50aW5nIGFuCgllcnJvciBtZXNzYWdlIGFib3V0IGFuIGlsbGVnYWwgdGVtcGxhdGUgZGVjbGFyYXRpb24uCgoJKiBwYXJzZS55IChzdHJ1Y3RzcCk6IFByaW50IGFuIGVycm9yIG1lc3NhZ2UsIHJhdGhlciB0aGFuIGNyYXNoaW5nLAoJd2hlbiBhIGNsYXNzLWhlYWQgZG9lcyBub3QgbmFtZSBhIGNsYXNzLgoKCSogcHQuYyAoY29udmVydF9ub250eXBlX2FyZ3VtZW50KTogIEFsbG93IFJFQUxfVFlQRSBhbmQgQ09NUExFWF9UWVBFCgl0ZW1wbGF0ZSBhcmd1bWVudHMgYXMgYSBnKysgZXh0ZW5zaW9uLgoJCgkqIGNwLXRyZWUuZGVmIChBTElHTk9GX0VYUFIpOiBOZXcgdHJlZSBjb2RlLgoJKiBkZWNsMi5jIChncm9rX2FsaWdub2YpOiBJZiBwcm9jZXNzaW5nX3RlbXBsYXRlX2RlY2wsIGp1c3Qgc3RvcmUKCXRoZSBleHByZXNzaW9uLgoJKiB0eXBlY2suYyAoY19hbGlnbm9mKTogTGlrZXdpc2UuCgkqIGRlY2wyLmMgKGJ1aWxkX2V4cHJfZnJvbV90cmVlKTogSGFuZGxlIEFMSUdOT0ZfRVhQUi4KCSogZXJyb3IuYyAoZHVtcF9leHByKTogTGlrZXdpc2UuCgkqIHB0LmMgKHRzdWJzdF9jb3B5KTogTGlrZXdpc2UuCgkqIHRyZWUuYyAoY3BfdHJlZV9lcXVhbCk6IExpa2V3aXNlLgoJKiBwdC5jICh1c2VzX3RlbXBsYXRlX3Bhcm1zKTogQ29ycmVjdGx5IGRldGVybWluZSB3aGV0aGVyIG9yIG5vdCBhCglTSVpFT0ZfRVhQUi9BTElHTk9GX0VYUFIgdXNlcyB0ZW1wbGF0ZSBwYXJhbWV0ZXJzIHNvIHRoYXQgY29uc3RhbnQKCWZvbGRpbmcgY2FuIGJlIGRvbmUuCgkKCSogY3AtdHJlZS5oIChncm9rX2VudW1fZGVjbHMpOiBSZW1vdmUgdHlwZSBwYXJhbWV0ZXIuCgkqIGRlY2wuYyAoZ3Jva19lbnVtX2RlY2xzKTogTGlrZXdpc2UuCgkqIGRlY2wyLmMgKGdyb2tfeF9jb21wb25lbnRzKTogQ2FsbCBncm9rX2VudW1fZGVjbHMKCXVuY29uZGl0aW9uYWxseSwgc2luY2UgaXQgd2lsbCBkbyBub3RoaW5nIGlmIHRoZXJlIGlzIG5vCgljdXJyZW50X2xvY2FsX2VudW0uICBVc2UgdGhlIG5ldyBjYWxsaW5nIHNlcXVlbmNlLgoJKiBwdC5jICh0c3Vic3RfZW51bSk6IFVzZSB0aGUgbmV3IGNhbGxpbmcgc2VxdWVuY2UgZm9yCglncm9rX2VudW1fZGVjbHMuCgoJKiBkZWNsLmMgKHN0YXJ0X2Z1bmN0aW9uKTogTWFrZSBtZW1iZXIgZnVuY3Rpb25zIG9mIGxvY2FsIGNsYXNzZXMKCWluIGV4dGVybiBpbmxpbmUgZnVuY3Rpb25zIGhhdmUgY29tZGF0IGxpbmthZ2UgaGVyZS4uLgoJKGdyb2tkZWNsYXJhdG9yKTogUmF0aGVyIHRoYW4gaGVyZS4KCQpXZWQgSmFuIDI4IDEwOjU1OjQ3IDE5OTggIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHB0LmMgKGNvbnZlcnRfbm9udHlwZV9hcmd1bWVudCk6IFVzZSBkZWNsX2NvbnN0YW50X3ZhbHVlLgoKVHVlIEphbiAyNyAxNjo0MjoyMSAxOTk4ICBNYXJrIE1pdGNoZWxsICA8bW1pdGNoZWxsQHVzYS5uZXQ+CgoJKiBjYWxsLmMgKGFkZF90ZW1wbGF0ZV9jYW5kaWRhdGVfcmVhbCk6IE5ldyBmdW5jdGlvbi4KCShhZGRfdGVtcGxhdGVfY2FuZGlkYXRlKTogVXNlIGl0LgoJKGFkZF90ZW1wbGF0ZV9jb252X2NhbmRpZGF0ZSk6IExpa2V3aXNlLgoJKGpvdXN0KTogUGFzcyBleHRyYSBhcmd1bWVudCB0byBtb3JlX3NwZWNpYWxpemVkLgoJKiBjbGFzcy5jIChpbnN0YW50aWF0ZV90eXBlKTogSGFuZGxlIGEgc2luZ2xlIEZVTkNUSU9OX0RFQ0wuCgkoaXNfbG9jYWxfY2xhc3MpOiBSZW1vdmUuCgkoZmluaXNoX3N0cnVjdCk6IENoZWNrIFRJX1BFTkRJTkdfU1BFQ0lBTElaQVRJT05fRkxBRy4KCSogY3AtdHJlZS5oIChpc19sb2NhbF9jbGFzcyk6IFJlbW92ZS4KCShwZXJmb3JtX2FycmF5X3RvX3BvaW50ZXJfY29udmVyc2lvbik6IExpa2V3aXNlLgoJKGZpbmlzaF9tZW1iZXJfdGVtcGxhdGVfZGVjbCk6IEFkZC4KCShjaGVja19leHBsaWNpdF9zcGVjaWFsaXphdGlvbik6IFJldHVybiBhIHRyZWUsIG5vdCBhbiBpbnQuCgkobW9yZV9zcGVjaWFsaXplZCk6IFRha2UgYWRkaXRpb25hbCBhcmd1bWVudC4KCShnZXRfYmluZGluZ3MpOiBMaWtld2lzZS4KCShUSV9QRU5ESU5HX1NQRUNJQUxJWkFUSU9OX0ZMQUcpOiBOZXcgbWFjcm8uCgkqIGN2dC5jIChwZXJmb3JtX3F1YWxpZmljYXRpb25fY29udmVyc2lvbnMpOiBVc2UgY29tcF9wdHJfdHR5cGVzLgoJKHBlcmZvcm1fYXJyYXlfdG9fcG9pbnRlcl9jb252ZXJzaW9uKTogUmVtb3ZlLgoJKiBkZWNsLmMgKHNhdmVkX3Njb3BlKTogQWRkIHByb2Nlc3Npbmdfc3BlY2lhbGl6YXRpb24sCglwcm9jZXNzaW5nX2V4cGxpY2l0X2luc3RhbnRpYXRpb24gZmllbGRzLgoJKG1heWJlX3B1c2hfdG9fdG9wX2xldmVsKTogU2F2ZSB0aGVtLgoJKHBvcF9mcm9tX3RvcF9sZXZlbCk6IFJlc3RvcmUgdGhlbS4KCShncm9rZm5kZWNsKTogVXNlIG5ldyByZXR1cm4gdmFsdWUgZnJvbQoJY2hlY2tfZXhwbGljaXRfc3BlY2lhbGl6YXRpb24uIAoJKHN0YXJ0X2RlY2wpOiBEb24ndCBjaGVjayBmbGFnX2d1aWRpbmdfZGVjbHMgYmVmb3JlIHB1c2hpbmcKCWRlY2xzLiAKCShjcF9maW5pc2hfZGVjbCk6IFJlbW92ZSBwcmV2aW91cyAoYm9ndXMpIGNoYW5nZS4KCShncm9rX2RlY2xhcmF0b3IpOiBVc2UgZGVjbF9mdW5jdGlvbl9jb250ZXh0IHJhdGhlciB0aGFuCglpc19sb2NhbF9jbGFzcy4gCgkqIGRlY2wyLmMgKGZpbmlzaF9maWxlKTogUGFzcyBleHRyYSBhcmd1bWVudCB0byBnZXRfYmluZGluZ3MuCgkoYnVpbGRfZXhwcl9mcm9tX3RyZWUpOiBMZXQgYnVpbGRfeF9jb21wb25lbnRfcmVmIGNoZWNrIAoJdmFsaWRpdHkgb2YgYXJndW1lbnRzIHJhdGhlciB0aGFuIGRvaW5nIGl0IGhlcmUuCgkqIGxleC5jIChjb25zX3VwX2RlZmF1bHRfZnVuY3Rpb24pOiBSZW1vdmUgY29kZSBmb29saW5nIHdpdGgKCXByb2Nlc3Npbmdfc3BlY2lhbGl6YXRpb24sIHByb2Nlc3NpbmdfZXhwbGljaXRfaW5zdGFudGlhdGlvbgoJZmxhZ3MsIGFzIHRoYXQgaXMgbm93IGRvbmUgaW4ge21heWJlX3B1c2hfdG9wLHBvcF9mcm9tfV90b3BfbGV2ZWwuIAoJKiBtZXRob2QuYyAoYnVpbGRfb3ZlcmxvYWRfaWRlbnRpZmllcik6IE1hbmdsZSBsb2NhbCBjbGFzc2VzIGluCgl0ZW1wbGF0ZSBmdW5jdGlvbnMgY29ycmVjdGx5LgoJKiBwYXJzZS55IChmaW5pc2hfbWVtYmVyX3RlbXBsYXRlX2RlY2wpOiBNb3ZlIHRvIHB0LmMuCgkqIHB0LmMgKGZpbmlzaF9tZW1iZXJfdGVtcGxhdGVfZGVjbCk6IE1vdmVkIGhlcmUgZnJvbSBwYXJzZS55LgoJKHByaW50X2NhbmRpZGF0ZXMpOiBOZXcgZnVuY3Rpb24uCgkoZGV0ZXJtaW5lX3NwZWNpYWxpemF0aW9uKTogQ2hhbmdlIGludGVyZmFjZS4gIFByb3Blcmx5IGxvb2sgZm9yCgltb3N0IHNwZWNpYWxpemVkIHZlcnNpb25zIG9mIHRlbXBsYXRlIGNhbmRpZGF0ZXMuCgkoY2hlY2tfZXhwbGljaXRfc3BlY2lhbGl6YXRpb24pOiBGdWxseSBwcm9jZXNzIGV4cGxpY2l0CglpbnN0YW50aWF0aW9ucy4gCgkocHVzaF90ZW1wbGF0ZV9kZWNsKTogQXZvaWQgbG9va2luZyBhdCBDTEFTU1RZUEUgZmllbGRzIGluCglGVU5DVElPTl9ERUNMUy4gCgkoZGV0ZXJtaW5lX292ZXJsb2FkZWRfZnVuY3Rpb24pOiBSZW1vdmUuCgkoY29udmVydF9ub250eXBlX2FyZ3VtZW50KTogQ2hhbmdlIG5hbWUgZnJvbQoJY29udmVydF9ub250eXBlX3BhcmFtZXRlci4gIFVzZSBkZXRlcm1pbmVfb3ZlcmxvYWRlZF9mdW5jdGlvbgoJaW5zdGVhZCBvZiBpbnN0YW50aWF0ZV90eXBlLgoJKG1hbmdsZV9jbGFzc19uYW1lX2Zvcl90ZW1wbGF0ZSk6IEhhbmRsZSB0eXBlIGNvbnRleHRzIGFzIHdlbGwgYXMKCWZ1bmN0aW9uIGNvbnRleHRzLgoJKGNsYXNzdHlwZV9tYW5nbGVkX25hbWUpOiBMaWtld2lzZS4KCShsb29rdXBfdGVtcGxhdGVfY2xhc3MpOiBMaWtld2lzZS4KCSh0c3Vic3QpOiBMaWtld2lzZS4KCShtb3JlX3NwZWNpYWxpemVkKTogVGFrZSBleHBsaWN0IHRlbXBsYXRlIGFyZ3VtZW50cyBhcyBhCglwYXJhbWV0ZXIuIAoJKG1vc3Rfc3BlY2lhbGl6ZWQpOiBMaWtld2lzZS4KCShnZXRfYmluZGluZ3MpOiBMaWtld2lzZS4gIENoZWNrIHRoYXQgcmV0dXJuIHR5cGVzIG1hdGNoIGJlZm9yZQoJcHJvY2xhaW1pbmcgYSBmdW5jdGlvbiBhIG1hdGNoLgoJKGRvX2RlY2xfaW5zdGFudGlhdGlvbik6IFJlbW92ZSBjb2RlIHNlYXJjaGluZyBmb3IgZnVuY3Rpb24gdG8KCWluc3RhbnRpYXRlOyB0aGF0IGlzIG5vdyBkb25lIGluIGNoZWNrX2V4cGxpY2l0X3NwZWNpYWxpemF0aW9uLgoJKGFkZF9tYXliZV90ZW1wbGF0ZSk6IFBhc3MgZXh0cmEgYXJndW1lbnQgdG8gZ2V0X2JpbmRpbmdzLgoJKiB0cmVlLmMgKHJlYWxseV9vdmVybG9hZGVkX2ZuKTogVXNlIGlzX292ZXJsb2FkZWRfZm4gdG8gc2ltcGxpZnkKCWltcGxlbWVudGF0aW9uLgoJKiB0eXBlY2suYyAoYnVpbGRfY29tcG9uZW50X3JlZik6IENoZWNrIGZvciBpbnZhbGlkIGFyZ3VtZW50cy4KClR1ZSBKYW4gMjcgMDE6NDQ6MDIgMTk5OCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZXhwci5jIChjcGx1c19leHBhbmRfZXhwciwgQUdHUl9JTklUX0VYUFIpOiBEb24ndCBjaGVjayB0aGF0IAoJcmV0dXJuX3RhcmdldCBhbmQgY2FsbF90YXJnZXQgYXJlIGVxdWl2YWxlbnQuCgoJKiBwdC5jICh0eXBlX3VuaWZpY2F0aW9uX3JlYWwpOiBKdXN0IGFjY2VwdCBmdW5jdGlvbiBwYXJtcyB0aGF0Cglkb24ndCB1c2UgYW55IHRlbXBsYXRlIHBhcm1zLgoKU3VuIEphbiAyNSAwMzozMDowMCAxOTk4ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBkZWNsLmMgKGNwX2ZpbmlzaF9kZWNsKTogV2hlbiBiYWlsaW5nIG9uIGEgY29tZGF0IHZhcmlhYmxlLCBhbHNvCgl1bnNldCBERUNMX05PVF9SRUFMTFlfRVhURVJOLgoKCSogcGFyc2UueSAodHlwZW5hbWVfc3ViKik6IEZpeCBzdGQ6Oi4KClNhdCBKYW4gMjQgMTI6MTM6NTQgMTk5OCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZXJyb3IuYyAoZHVtcF9kZWNsKTogRml4IHR5cGUgZGVmYXVsdCB0ZW1wbGF0ZSBhcmdzLgoJKGR1bXBfdHlwZSk6IEhhbmQgVEVNUExBVEVfREVDTCBvZmYgdG8gZHVtcF9kZWNsLgoKRnJpIEphbiAyMyAxODozNDozNyAxOTk4ICBNdW1pdCBLaGFuIDxraGFuQHhyYXlsaXRoLndpc2MuZWR1PgoKCSogbGV4LmMgKERJUl9TRVBBUkFUT1IpOiBEZWZpbmUgdG8gYmUgJy8nIGlmIG5vdCBhbHJlYWR5IGRlZmluZWQuCgkoZmlsZV9uYW1lX25vbmRpcmVjdG9yeSk6IFVzZS4KCldlZCBKYW4gMjEgMTA6Mjk6NTcgMTk5OCAgS3JpYW5nIExlcmRzdXdhbmFraWogIDxsZXJkc3V3YUBzY2YudXNjLmVkdT4KCgkqIHB0LmMgKGNvZXJjZV90ZW1wbGF0ZV9wYXJtcyk6IERvbid0IGFjY2VzcyBlbGVtZW50cyBvZiBBUkdMSVNUCgl0aGF0IGFyZSBub3QgcmVhbGx5IHByZXNlbnQuICBTdWJzdGl0dXRlIGRlZmF1bHQgYXJndW1lbnRzIGluIAoJdGVtcGxhdGUgdGVtcGxhdGUgYXJndW1lbnRzLiAgQ29ycmVjdGx5IGNvbnZlcnQgVEVNUExBVEVfREVDTCB0byAKCVRFTVBMQVRFX1RFTVBMQVRFX1BBUk0uCgkoY29tcF90ZW1wbGF0ZV9hcmdzKTogVEVNUExBVEVfREVDTCBhbmQgVEVNUExBVEVfVEVNUExBVEVfUEFSTSAKCWFyZSBubyBsb25nZXIgdHJlYXRlZCBzcGVjaWFsbHkgaGVyZS4KCSogcGFyc2UueSAodGVtcGxhdGVfdGVtcGxhdGVfcGFybSk6IEZpeCBjb3B5IGVycm9yLgoJKiBkZWNsLmMgKGdyb2tkZWNsYXJhdG9yKTogV2FybiBhYm91dCBtaXNzaW5nIGB0eXBlbmFtZScgZm9yIG5lc3RlZAoJdHlwZSBjcmVhdGVkIGZyb20gdGVtcGxhdGUgdGVtcGxhdGUgcGFyYW1ldGVycy4KCSogcGFyc2UueSAoYmFkX3Bhcm0pOiBMaWtld2lzZQoKCSogY2xhc3MuYyAoZmluaXNoX3N0cnVjdCk6IEhhbmRsZSBURU1QTEFURV9URU1QTEFURV9QQVJNLgoJKHB1c2hfbmVzdGVkX2NsYXNzKTogTGlrZXdpc2UuCgkqIGNwLXRyZWUuZGVmIChURU1QTEFURV9URU1QTEFURV9QQVJNKTogTmV3IHRyZWUgY29kZS4KCSogY3AtdHJlZS5oIChERUNMX1RFTVBMQVRFX1RFTVBMQVRFX1BBUk1fUCk6IE5ldyBtYWNyby4KCShjb3B5X3RlbXBsYXRlX3RlbXBsYXRlX3Bhcm0pOiBEZWNsYXJlLgoJKiBkZWNsLmMgKGFyZ19sb29raW5nX2Zvcl90ZW1wbGF0ZSk6IE5ldyB2YXJpYWJsZS4KCShsb29rdXBfbmFtZV9yZWFsKTogSGFuZGxlIFRFTVBMQVRFX1RFTVBMQVRFX1BBUk0uCglUcnkgdG8gcmV0dXJuIFRFTVBMQVRFX0RFQ0wgb3IgVEVNUExBVEVfVEVNUExBVEVfUEFSTQoJbm9kZSBpZiBhcmdfbG9va2luZ19mb3JfdGVtcGxhdGUgaXMgbm9uemVyby4KCShwdXNoZGVjbCk6IEhhbmRsZSBURU1QTEFURV9URU1QTEFURV9QQVJNLgoJKGdyb2tfb3BfcHJvcGVydGllcywgeHJlZl90YWcsIHhyZWZfYmFzZXR5cGVzKTogTGlrZXdpc2UuCgkoZ3Jva2RlY2xhcmF0b3IpOiBIYW5kbGUgVEVNUExBVEVfREVDTC4KCSogZGVjbDIuYyAoY29uc3RydWN0b3JfbmFtZV9mdWxsKTogSGFuZGxlIFRFTVBMQVRFX1RFTVBMQVRFX1BBUk0uCgkqIGVycm9yLmMgKGR1bXBfdHlwZSk6IEFkZCBURU1QTEFURV9ERUNMIGFuZCBURU1QTEFURV9URU1QTEFURV9QQVJNLgoJKGR1bXBfdHlwZV9wcmVmaXgsIGR1bXBfdHlwZV9zdWZmaXgpIEhhbmRsZSBURU1QTEFURV9URU1QTEFURV9QQVJNLgoJKGR1bXBfZGVjbCk6IEhhbmRsZSB1bm5hbWVkIHRlbXBsYXRlIHR5cGUgcGFyYW1ldGVycy4KCUhhbmRsZSB0ZW1wbGF0ZSB0ZW1wbGF0ZSBwYXJhbWV0ZXJzLgoJKGR1bXBfZnVuY3Rpb25fbmFtZSk6IEhhbmRsZSB0ZW1wbGF0ZSB0ZW1wbGF0ZSBwYXJhbWV0ZXJzLgoJKiBpbml0LmMgKGlzX2FnZ3JfdHlwZWRlZiwgaXNfYWdncl90eXBlLCBnZXRfYWdncl9mcm9tX3R5cGVkZWYpOiAKCUhhbmRsZSBURU1QTEFURV9URU1QTEFURV9QQVJNLgoJKiBtZXRob2QuYyAoYnVpbGRfdGVtcGxhdGVfdGVtcGxhdGVfcGFybV9uYW1lcyk6IE5ldyBmdW5jdGlvbi4KCShidWlsZF90ZW1wbGF0ZV9wYXJtX25hbWVzKTogSGFuZGxlIFRFTVBMQVRFX0RFQ0wuCgkoYnVpbGRfb3ZlcmxvYWRfbmVzdGVkX25hbWUsIGJ1aWxkX292ZXJsb2FkX25hbWUpOiAKCUhhbmRsZSBURU1QTEFURV9URU1QTEFURV9QQVJNLgoJKiBwYXJzZS55IChtYXliZV9pZGVudGlmaWVyKTogTmV3IG5vbnRlcm1pbmFsLgoJKHRlbXBsYXRlX3R5cGVfcGFybSk6IFVzZSBpdC4KCSh0ZW1wbGF0ZV90ZW1wbGF0ZV9wYXJtLCB0ZW1wbGF0ZV9hcmcxKTogTmV3IG5vbnRlcm1pbmFsLgoJKHRlbXBsYXRlX3Bhcm0pOiBBZGQgdGVtcGxhdGVfdGVtcGxhdGVfcGFybSBydWxlcy4KCSh0ZW1wbGF0ZV9hcmcpOiBTZXQgcHJvY2Vzc2luZ190ZW1wbGF0ZV9hcmcuCgkodGVtcGxhdGVfYXJnMSk6IFJ1bGVzIG1vdmVkIGZyb20gdGVtcGxhdGVfYXJnLgoJKHByaW1hcnksIG5vbm5lc3RlZF90eXBlKTogU2V0IGFyZ19sb29raW5nX2Zvcl90ZW1wbGF0ZSBpZiB3ZSBhcmUKCXByb2Nlc3NpbmcgdGVtcGxhdGUgYXJndW1lbnRzLgoJKiBwdC5jIChiZWdpbl9tZW1iZXJfdGVtcGxhdGVfcHJvY2Vzc2luZyk6IEhhbmRsZSBURU1QTEFURV9ERUNMLgoJKHByb2Nlc3NfdGVtcGxhdGVfcGFybSk6IEhhbmRsZSB0ZW1wbGF0ZSB0ZW1wbGF0ZSBwYXJhbWV0ZXJzLgoJKGNvZXJjZV90ZW1wbGF0ZV9wYXJtcywgY29tcF90ZW1wbGF0ZV9hcmdzKTogTGlrZXdpc2UuCgkobWFuZ2xlX2NsYXNzX25hbWVfZm9yX3RlbXBsYXRlLCBsb29rdXBfdGVtcGxhdGVfY2xhc3MpOiBMaWtld2lzZS4KCSh1c2VzX3RlbXBsYXRlX3Bhcm1zKTogSGFuZGxlIFRFTVBMQVRFX0RFQ0wgYW5kIAoJVEVNUExBVEVfVEVNUExBVEVfUEFSTS4KCShjdXJyZW50X3RlbXBsYXRlX2FyZ3MpOiBIYW5kbGUgVEVNUExBVEVfREVDTC4KCSh0c3Vic3QsIHRzdWJzdF9jb3B5LCB1bmlmeSk6IEhhbmRsZSBURU1QTEFURV9URU1QTEFURV9QQVJNLgoJKiBzZWFyY2guYyAoZGZzX3dhbGssIGRmc19yZWNvcmRfaW5oZXJpdGFuY2UpOiAKCUhhbmRsZSBURU1QTEFURV9URU1QTEFURV9QQVJNLgoJKiB0cmVlLmMgKGNvcHlfdGVtcGxhdGVfdGVtcGxhdGVfcGFybSk6IE5ldyBmdW5jdGlvbi4KCShtYXBjYXIpOiBIYW5kbGUgVEVNUExBVEVfVEVNUExBVEVfUEFSTS4KCSogdHlwZWNrLmMgKGNvbXB0eXBlcyk6IEhhbmRsZSBURU1QTEFURV9URU1QTEFURV9QQVJNLgoKTW9uIEphbiAxOSAyMjo0MDowMyAxOTk4ICBNYXJrIE1pdGNoZWxsICA8bW1pdGNoZWxsQHVzYS5uZXQ+CgoJKiBkZWNsLmMgKHN0YXJ0X2RlY2wpOiBEb24ndCBhbGxvdyBkdXBsaWNhdGUgZGVmaW5pdGlvbnMgb2Ygc3RhdGljCglkYXRhIG1lbWJlcnMuCgoJKiBjYWxsLmMgKGJ1aWxkX3VzZXJfdHlwZV9jb252ZXJzaW9uXzEpOiBIYW5kbGUgdXNlci1kZWZpbmVkCgl0ZW1wbGF0ZSBjb252ZXJzaW9uIG9wZXJhdG9ycyBjb3JyZWN0bHkuCgoJKiBkZWNsMi5jIChidWlsZF9leHByX2Zyb21fdHJlZSk6IElzc3VlIGFuIGVycm9yIG1lc3NhZ2UgaWYgdGhlCglvYmplY3QgaW4gYSBDT01QT05FTlRfUkVGIGlzIGEgVEVNUExBVEVfREVDTC4KCQoJKiB0eXBlY2suYyAoaW5jb21wbGV0ZV90eXBlX2Vycm9yKTogSGFuZGxlIFRFTVBMQVRFX1RZUEVfUEFSTXMuCgkKCSogY2xhc3MuYyAoaXNfbG9jYWxfY2xhc3MpOiBOZXcgZnVuY3Rpb24uCgkqIGNwLXRyZWUuaCAoaXNfbG9jYWxfY2xhc3MpOiBEZWNsYXJlIGl0LgoJKGxhc3RfdHJlZSk6IExpa2V3aXNlLgoJKGJlZ2luX3RyZWUpOiBMaWtld2lzZS4KCShlbmRfdHJlZSk6IExpa2V3aXNlLgoJKGxvb2t1cF90ZW1wbGF0ZV9jbGFzcyk6IENoYW5nZSBwcm90b3R5cGUuCgkqIGRlY2wuYyAoY3BfZmluaXNoX2RlY2wpOiBDaGVjayBmb3IgTlVMTCB3aGVyZSBuZWNlc2FyeS4KCUNvbnNpZGVyIEZVTkNUSU9OX0RFQ0xTIHRvIGRlY2xhcmUgb2JqZWN0cyB3aXRoIHRvcC1sZXZlbCBiaW5kaW5nLAoJd2hlbiBjYWxsaW5nIG1ha2VfZGVjbF9ydGwuCgkoZ3Jva2RlY2xhcmF0b3IpOiBHaXZlIG1lbWJlcnMgb2YgbG9jYWwgY2xhc3NlcyBpbnRlcm5hbCBsaW5rYWdlLgoJKHN0YXJ0X2Z1bmN0aW9uKTogUmVtb3ZlIGRlY2xhcmF0aW9uIG9mIGxhc3RfdHJlZS4KCShmaW5pc2hfZnVuY3Rpb24pOiBTZXQgZmxhZ19rZWVwX2lubGluZV9mdW5jdGlvbnMgYXJvdW5kIGNhbGwgdG8KCXJlc3Rfb2ZfY29tcGlsYXRpb24gaWYgd2UgYXJlIHByb2Nlc3NpbmcgYSBtZW1iZXIgZnVuY3Rpb24gaW4gYQoJbG9jYWwgY2xhc3MuCgkoc3RhcnRfbWV0aG9kKTogQ2FsbCBwdXNoX3RlbXBsYXRlX2RlY2wgZm9yIG1lbWJlciBmdW5jdGlvbnMgb2YKCWxvY2FsIGNsYXNzZXMgaW4gdGVtcGxhdGUgZnVuY3Rpb25zLgoJKiBkZWNsMi5jIChpbXBvcnRfZXhwb3J0X2RlY2wpOiBEb24ndCBnaXZlIGV4dGVybmFsIGxpbmthZ2UgdG8KCWluc3RhbnRpYXRpb25zIG9mIHRlbXBsYXRlcyB3aXRoIGludGVybmFsIGxpbmthZ2UuCgkqIHBhcnNlLnkgKGxhc3RfdHJlZSk6IFJlbW92ZSBkZWNsYXJhdGlvbi4KCSh0ZW1wbGF0ZV90eXBlKTogUGFzcyBleHRyYSBwYXJhbWV0ZXIgdG8gbG9va3VwX3RlbXBsYXRlX2NsYXNzLgoJKHNlbGZfdGVtcGxhdGVfdHlwZSk6IExpa2V3aXNlLgoJKHN0cnVjdHNwKTogTW92ZSBjYWxsIHRvIHJlc2V0X3NwZWNpYWxpemF0aW9uIGludG8gbGVmdF9jdXJseS4KCShsZWZ0X2N1cmx5KTogQ2FsbCByZXNldF9zcGVjaWFsaXphdGlvbiwgYW5kIGJlZ2luX3RyZWUuCgkqIHB0LmMgKHNhdmVkX3RyZWVzKTogTmV3IHZhcmlhYmxlLgoJKG1hbmdsZV9jbGFzc19uYW1lX2Zvcl90ZW1wbGF0ZSk6IENoYW5nZSBwcm90b3R5cGUuICBVc2UKCWFkZGl0aW9uYWwgZnVuY3Rpb24gY29udGV4dCB0byBuYW1lIGxvY2FsIGNsYXNzZXMgaW4gdGVtcGxhdGVzCgljb3JyZWN0bHkuIAoJKGNsYXNzdHlwZV9tYW5nbGVkX25hbWUpOiBQYXNzIHRoZSBjb250ZXh0LgoJKHB1c2hfdGVtcGxhdGVfZGVjbCk6IEhhbmRsZSBsb2NhbCBjbGFzc2VzIGFuZCB0ZW1wbGF0ZXMsIGFuZAoJbWVtYmVyIGZ1bmN0aW9ucyBmb3Igc3VjaCBjbGFzc2VzLgoJKGNvbnZlcnRfbm9udHlwZV9wYXJhbWV0ZXIpOiBGaXggaGFuZGxpbmcgb2YgcG9pbnRlci10by1tZW1iZXIKCWNvbnN0YW50cy4gCgkobG9va3VwX3RlbXBsYXRlX2NsYXNzKTogSGFuZGxlIGxvY2FsIGNsYXNzZXMgaW4gdGVtcGxhdGVzLgoJKHRzdWJzdCk6IExpa2V3aXNlLiAgRG9uJ3QgYXNzdW1lIHRoYXQgdGVtcGxhdGUgaW5zdGFudGlhdGlvbnMKCWhhdmUgZXh0ZXJuYWwgbGlua2FnZTsgcGF5IGF0dGVudGlvbiB0byB0aGUgdGVtcGxhdGUgZGVjbGFyYXRpb24uIAoJKG1hcmtfZGVjbF9pbnN0YW50aWF0ZWQpOiBMaWtld2lzZS4KCShiZWdpbl90cmVlKTogTmV3IGZ1bmN0aW9uLgoJKGVuZF90cmVlKTogTGlrZXdpc2UuCgkKCSogZGVjbC5jICh4cmVmX2Jhc2V0eXBlcyk6IERvbid0IGNhbGwgY29tcGxldGVfdHlwZSBmb3IgYmFzZXR5cGVzCgl0aGF0IGludm9sdmUgdGVtcGxhdGUgcGFyYW1ldGVyczsgdGhhdCBjYW4gbGVhZCB0byBpbmZpbml0ZQoJcmVjdXJzaW9uIHVubmVjZXNzYXJpbHkuCgoJKiBwdC5jIChyZWdpc3Rlcl9zcGVjaWFsaXphdGlvbik6IERvIG5vdCByZWdpc3RlciBzcGVjaWFsaXphdGlvbnMKCXRoYXQgYXJlbid0IHJlYWR5IHRvIGJlIHJlZ2lzdGVyZWQgeWV0LgoJKGNoZWNrX2V4cGxpY2l0X3NwZWNpYWxpemF0aW9uKTogSGFuZGxlIGV4cGxpY2l0IHNwZWNpYWxpemF0aW9uIG9mCgljb25zdHJ1Y3RvcnMgYW5kIGRlc3RydWN0b3JzLgoJKGJ1aWxkX3RlbXBsYXRlX2RlY2wpOiBOZXcgZnVuY3Rpb24uCgkocHVzaF90ZW1wbGF0ZV9kZWxjKTogSGFuZGxlIG91dC1vZi1jbGFzcyBzcGVjaWFsaXphdGlvbnMgb2YKCW1lbWJlciB0ZW1wbGF0ZXMuCgkKICAgICAgICAqIHB0LmMgKGNoZWNrX2V4cGxpY2l0X3NwZWNpYWxpemF0aW9uKTogU2V0IHVwIHRoZSB0ZW1wbGF0ZQogICAgICAgIGluZm9ybWF0aW9uIGJlZm9yZSByZWdpc3RlcmluZyB0aGUgc3BlY2lhbGl6YXRpb24uCiAgICAgICAgKGNvZXJjZV90ZW1wbGF0ZV9wYXJtcyk6IEZpeCB0aGlua28uCiAgICAgICAgKHRzdWJzdCk6IEhhbmRsZSBzcGVjaWFsaXphdGlvbnMgb2YgbWVtYmVyIHRlbXBsYXRlcyBjb3JyZWN0bHkuCgoJKiBjbGFzcy5jIChmaW5pc2hfc3RydWN0X21ldGhvZHMpOiBSZW1vdmUgY2FsbHMgdG8KCWNoZWNrX2V4cGxpY2l0X3NwZWNpYWxpemF0aW9uIGZyb20gaGVyZS4KCShmaW5pc2hfc3RydWN0KTogQW5kIGluc2VydCB0aGVtIGhlcmUuCgkqIGNwLXRyZWUuaCAocGVyZm9ybV9xdWFsaWZpY2F0aW9uX2NvbnZlcnNpb25zKTogTmV3IGZ1bmN0aW9uLgoJKHBlcmZvcm1fYXJyYXlfdG9fcG9pbnRlcl9jb252ZXJzaW9uKTogTGlrZXdpc2UuCgkoYmVnaW5fZXhwbGljaXRfaW5zdGFudGlhdGlvbik6IExpa2V3aXNlLgoJKGVuZF9leHBsaWNpdF9pbnN0YW50aWF0aW9uKTogTGlrZXdpc2UuCgkoZGV0ZXJtaW5lX3NwZWNpYWxpemF0aW9uKTogUmVuYW1lZCBmcm9tCglkZXRlcm1pbmVfZXhwbGljaXRfc3BlY2lhbGl6YXRpb24uIAoJKGNvbXBfdGVtcGxhdGVfcGFybXMpOiBOZXcgZnVuY3Rpb24uCgkocHJvY2Vzc2luZ19leHBsaWNpdF9pbnN0YW50aWF0aW9uKTogTmV3IHZhcmlhYmxlLgoJKiBjdnQuYyAocGVyZm9ybV9xdWFsaWZpY2F0aW9uX2NvbnZlcnNpb25zKTogTmV3IGZ1bmN0aW9uLgoJKHBlcmZvcm1fYXJyYXlfdG9fcG9pbnRlcl9jb252ZXJzaW9uKTogTGlrZXdpc2UuCgkqIGRlY2wuYyAoZHVwbGljYXRlX2RlY2xzKTogRG9uJ3QgY29uc2lkZXIgdGVtcGxhdGUgZnVuY3Rpb25zCglhbGlrZSB1bmxlc3MgdGhleSBoYXZlIHRoZSBzYW1lIHBhcmFtZXRlcnMuICBSZWZpbmUgaGFuZGxpbmcgb2YKCWluc3RhbnRpYXRpb24vc3BlY2lhbGl6YXRpb24gbWlzbWF0Y2hlcy4KCShzdGFydF9kZWNsKTogRG9uJ3QgY2FsbCBwdXNoZGVjbCBmb3IgdGVtcGxhdGUgc3BlY2lhbGl6YXRpb25zLAoJc2luY2UgdGhleSBkb24ndCBhZmZlY3Qgb3ZlcmxvYWRpbmcuCgkoc3RhcnRfZnVuY3Rpb24pOiBMaWtld2lzZQoJKGdyb2tmbmRlY2wpOiBDYWxsIGNoZWNrX2V4cGxpY2l0X3NwZWNpYWxpemF0aW9uIGEgbGl0dGxlIGxhdGVyLgoJRG9uJ3QgY2FsbCBkdXBsaWNhdGVfZGVjbHMgZm9yIG1lbWJlcm0gdGVtcGxhdGUgc3BlY2lhbGl6YXRpb25zLgoJKGdyb2tkZWNsYXJhdG9yKTogRG9uJ3QgdXBkYXRlIHRlbXBsYXRlX2NvdW50IGZvciBjbGFzc2VzIHRoYXQgYXJlCgl0aGVtc2VsdmVzIHNwZWNpYWxpemF0aW9ucy4gIFJlbW92ZSB1c2Ugb2YgYDInIGFzIHBhcmFtZXRlciB0bwoJZ3Jva2ZuZGVjbCBzaW5jZSB0aGF0IHZhbHVlIGlzbid0IHVzZWQuCgkqIGxleC5jIChjb25zX3VwX2RlZmF1bHRfZnVuY3Rpb24pOiBTYXZlIGFuZCByZXN0b3JlCglwcm9jZXNzaW5nX2V4cGxpY2l0X2luc3RhbnRpYXRpb24gYXJvdW5kIGNhbGxzIHRvIGdyb2tmaWVsZC4KCSogcGFyc2UueSAoZmluaXNoX21lbWJlcl90ZW1wbGF0ZV9kZWNsKTogTmV3IGZ1bmN0aW9uLgoJKGNvbXBvbmVudF9kZWNsXzEpOiBVc2UgaXQuCgkoZm4uZGVmMik6IExpa2V3aXNlLgoJKHRlbXBsYXRlX2FyZ19saXN0X29wdCk6IE5ldyBub250ZXJtaW5hbC4JCgkodGVtcGxhdGVfdHlwZSk6IFVzZSBpdC4KCShzZWxmX3RlbXBsYXRlX3R5cGUpOiBMaWtld2lzZS4KCSh0ZW1wbGF0ZV9pZCk6IExpa2V3aXNlLgoJKG9iamVjdF90ZW1wbGF0ZV9pZCk6IExpa2V3aXNlLgoJKG5vdHlwZV90ZW1wbGF0ZV9kZWNsYXJhdG9yKTogTGlrd2lzZS4KCShiZWdpbl9leHBsaWNpdF9pbnN0YW50aWF0aW9uKTogTGlrZXdpc2UuCgkoZW5kX2V4cGxpY2l0X2luc3RhbnRpYXRpb24pOiBMaWtld2lzZS4KCShleHBsaWNpdF9pbnN0YW50aWF0aW9uKTogVXNlIHRoZW0uCgkqIHB0LmMgKGNvZXJjZV90ZW1wbGF0ZV9wYXJtcyk6IEFkZCBwYXJhbWV0ZXJzLgoJKHByb2Nlc3NpbmdfZXhwbGljaXRfaW5zdGFudGlhdGlvbik6IE5ldyB2YXJpYWJsZS4KCShjb252ZXJ0X25vbnR5cGVfcGFyYW1ldGVyKTogTmV3IGZ1bmN0aW9uLgoJKGRldGVybWluZV9vdmVybG9hZGVkX2Z1bmN0aW9uKTogTGlrZXdpc2UuCgkoYmVnaW5fZXhwbGljaXRfaW5zdGFudGlhdGlvbik6IExpa2V3aXNlLgoJKGVuZF9leHBsaWNpdF9pbnN0YW50aWF0aW9uKTogTGlrZXdpc2UuCgkocmV0cmlldmVfc3BlY2lhbGl6YXRpb24pOiBMaWtld2lzZS4KCShyZWdpc3Rlcl9zcGVjaWFsaXphdGlvbik6IExpa2V3aXNlLgoJKHByb2Nlc3NpbmdfZXhwbGljaXRfc3BlY2lhbGl6YXRpb24pOiBSZW1vdmVkLgoJKGRldGVybWluZV9zcGVjaWFsaXphdGlvbik6IEhhbmRsZSBzcGVjaWFsaXphdGlvbnMgb2YgbWVtYmVyCglmdW5jdGlvbnMgb2YgdGVtcGxhdGUgY2xhc3MgaW5zdGFudGlhdGlvbnMuCgkoY2hlY2tfZXhwbGljaXRfc3BlY2lhbGl6YXRpb24pOiBSZWZpbmUgdG8gY29uZm9ybSB0byBzdGFuZGFyZC4KCShjb21wX3RlbXBsYXRlX3Bhcm1zKTogTmV3IGZ1bmN0aW9uLgoJKGNvZXJjZV90ZW1wbGF0ZV9wYXJtcyk6IENhbGwgY29udmVydF9ub250eXBlX3BhcmFtZXRlci4KCSh0c3Vic3QpOiBSZWZpbmUgaGFuZGxpbmcgb2YgbWVtYmVyIHRlbXBsYXRlcy4gIFVzZQoJcmVnaXN0ZXJfc3BlY2lhbGl6YXRpb24uIAoJKGluc3RhbnRpYXRlX3RlbXBsYXRlKTogVXNlIHJldHJpZXZlX3NwZWNpYWxpemF0aW9uLgoJKGRvX2RlY2xfaW5zdGFudGlhdGlvbik6IExpa2V3aXNlLgoJKGluc3RhbnRpYXRlX2RlY2wpOiBMaWtld2lzZS4KCSh0eXBlX3VuaWZpY2F0aW9uKTogSW1wcm92ZSBoYW5kbGluZyBvZiBleHBsaWN0IHRlbXBsYXRlCglhcmd1bWVudHMuIAoJKiB0cmVlLmMgKG1hcGNhcik6IFJldHVybiBlcnJvcl9tYXJrX25vZGUsIHJhdGhlciB0aGFuIGFib3J0aW5nLAoJb24gVkFSX0RFQ0xTLCBGVU5DVElPTl9ERUNMUywgYW5kIENPTlNUX0RFQ0xTLgoJKiB0eXBlY2suYyAoYnVpbGRfdW5hcnlfb3ApOiBDYWxsIGRldGVybWluZV9zcGVjaWFsaXphdGlvbiwgcmF0aGVyCgl0aGFuIGRldGVybWluZV9leHBsaWNpdF9zcGVjaWFsaXphdGlvbi4KCk1vbiBKYW4gMTkgMTM6MTg6NTEgMTk5OCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY3Z0LmMgKGJ1aWxkX3VwX3JlZmVyZW5jZSk6IEEgVEFSR0VUX0VYUFIgaGFzIHNpZGUgZWZmZWN0cy4KCkZyaSBKYW4gMTYgMTE6NDA6NTAgMTk5OCAgQnJ1bm8gSGFpYmxlICA8YnJ1bm9AbGludWl4Lm1hdGhlbWF0aWsudW5pLWthcmxzcnVoZS5kZT4KCiAgICAgICAgKiBlcnJvci5jIChkdW1wX2RlY2wpOiBGb3IgZW51bSB0YWdzLCBvdXRwdXQgdGhlIHRhZywgbm90IGl0cyB2YWx1ZS4KCjE5OTgtMDEtMTMgIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGN5Z251cy5jb20+CgoJKiBkZWNsLmMgKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogT25seSBjYWxsIGluaXRfcnR0aV9wcm9jZXNzaW5nCglGTEFHX1JUVEkgaXMgc2V0LgoKTW9uIEphbiAxMiAwMTozNToxOCAxOTk4ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBpbml0LmMgKGJ1aWxkX25ld18xKTogU3BsaXQgb3V0IGZyb20gYnVpbGRfbmV3LgoJKGJ1aWxkX25ldyk6IEp1c3QgcmV0dXJuIGEgTkVXX0VYUFIuCgkqIGV4cHIuYyAoY3BsdXNfZXhwYW5kX2V4cHIpOiBIYW5kbGUgTkVXX0VYUFIuCgoJKiBkZWNsMi5jIChnZXRfdGVtcF9yZWd2YXIpOiBUd2Vhay4KCgkqIGNwLXRyZWUuaCAoVFJFRV9DQUxMU19ORVcpOiBDb21tZW50IG91dC4KCSogY2xhc3MuYyAocmVzb2x2ZXNfdG9fZml4ZWRfdHlwZV9wKTogUmVtb3ZlIHVzZS4KCSogbWV0aG9kLmMgKGJ1aWxkX29wZm5jYWxsKTogTGlrZXdpc2UuCgkqIGNhbGwuYyAoYnVpbGRfbmV3X29wKTogTGlrZXdpc2UuCgpXZWQgSmFuICA3IDIzOjQ3OjEzIDE5OTggIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGV4Y2VwdGlvbi5jYyAoX19laF9hbGxvYywgX19laF9mcmVlKTogTmV3IGZucy4KCShfX2NwX3B1c2hfZXhjZXB0aW9uLCBfX2NwX3BvcF9leGNlcHRpb24pOiBVc2UgdGhlbS4KCShfX3VuY2F0Y2hfZXhjZXB0aW9uKTogQ2FsbCB0ZXJtaW5hdGUgaGVyZSBpZiBubyBleGNlcHRpb24uCgkqIGV4Y2VwdC5jIChidWlsZF90ZXJtaW5hdGVfaGFuZGxlcik6IE5ldyBmbi4KCShleHBhbmRfc3RhcnRfY2F0Y2hfYmxvY2spOiBVc2UgaXQuCgkoZXhwYW5kX2V4Y2VwdGlvbl9ibG9ja3MpOiBMaWtld2lzZS4KCShhbGxvY19laF9vYmplY3QpOiBOZXcgZm4uCgkoZXhwYW5kX3Rocm93KTogVXNlIGl0LiAgUHJvdGVjdCBleGNlcHRpb24gaW5pdCB3aXRoIHRlcm1pbmF0ZS4KCSogdHlwZWNrLmMgKGJ1aWxkX21vZGlmeV9leHByKTogUmVtb3ZlIGNvZGUgdGhhdCBpZ25vcmVzIHRyaXZpYWwgCgltZXRob2RzLgoKTW9uIERlYyAyMiAxMTozNjoyNyAxOTk3ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CiAKCSogY2FsbC5jIChhZGRfYnVpbHRpbl9jYW5kaWRhdGUpOiBBZGQgZGVmYXVsdCBjYXNlIGluIGVudW1lcmF0aW9uCglzd2l0Y2guCgkoYnVpbGRfbmV3X29wKTogTGlrZXdpc2UuCgkoY29udmVydF9saWtlKTogTGlrZXdpc2UuCgkqIGN2dC5jIChidWlsZF9leHByX3R5cGVfY29udmVyc2lvbik6IExpa2V3aXNlLgoJKiB0cmVlLmMgKHJlYWxfbHZhbHVlX3ApOiBMaWtld2lzZS4KCShsdmFsdWVfcCk6IExpa2V3aXNlLgoJKGNwX3RyZWVfZXF1YWwpOiBMaWtld2lzZS4KCSogdHlwZWNrLmMgKGNvbXB0eXBlcyk6IExpa2V3aXNlLgoJKGJ1aWxkX2NvbXBvbmVudF9yZWYpOiBMaWtld2lzZS4KCShidWlsZF9mdW5jdGlvbl9jYWxsX3JlYWwpOiBMaWtld2lzZS4KCShidWlsZF9iaW5hcnlfb3Bfbm9kZWZhdWx0KTogTGlrZXdpc2UuCgkoYnVpbGRfdW5hcnlfb3ApOiBMaWtld2lzZS4KCShidWlsZF9tb2RpZnlfZXhwcik6IExpa2V3aXNlLgoJKiB0eXBlY2syLmMgKGluaXRpYWxpemVyX2NvbnN0YW50X3ZhbGlkX3ApOiBMaWtld2lzZS4KClN1biBEZWMgMjEgMTU6NTk6MDAgMTk5NyAgTmljayBDbGlmdG9uICA8bmlja2NAY3lnbnVzLmNvbT4KCgkqIGRlY2wyLmMgKGxhbmdfZGVjb2RlX29wdGlvbik6IEFkZCBzdXBwb3J0IGZvciAtV3Vua25vd24tcHJhZ21hcy4KClRodSBEZWMgMTggMTQ6NTE6NTAgMTk5NyAgTWFyayBNaXRjaGVsbCAgPG1taXRjaGVsbEB1c2EubmV0PgoKCSogcHQuYyAoY29lcmNlX3RlbXBsYXRlX3Bhcm1zKTogTWFrZSBzdXJlIHRvIGRpZ2VzdF9pbml0IGlmCglwb3NzaWJsZS4KCgkqIGRlY2wuYyAoZHVwbGljYXRlX2RlY2xzKTogTWFrZSB0aGUgbmV3ZGVjbCB2aXJ0dWFsIGlmIHRoZQoJb2xkZGVjbCB3YXMsIGp1c3QgYXMgaXMgZG9uZSB3aXRoIG90aGVyIGF0dHJpYnV0ZXMgb2Ygb2xkZGVjbC4KClRodSBEZWMgMTggMTQ6NDM6MTkgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogdHlwZWNrLmMgKHVuYXJ5X2NvbXBsZXhfbHZhbHVlKTogSWdub3JlIG9wMCB3aGVuIHRha2luZyB0aGUgCglhZGRyZXNzIG9mIGFuIE9GRlNFVF9SRUYuCgoJKiBjcC10cmVlLmRlZjogQWRkIEFHR1JfSU5JVF9FWFBSLgoJKiBlcnJvci5jLCB0cmVlLmMsIHR5cGVjay5jOiBSZXBsYWNlIHVzZXMgb2YgTkVXX0VYUFIgd2l0aAoJQUdHUl9JTklUX0VYUFIgd2hlcmUgYXBwcm9wcmlhdGUuCgkqIGV4cHIuYyAoY3BsdXNfZXhwYW5kX2V4cHIpOiBMaWtld2lzZS4gIFNpbXBsaWZ5LgoKCSogZGVjbDIuYyAoZmluaXNoX2ZpbGUpOiBSZW1vdmUgY2FsbCB0byByZWdpc3Rlcl9leGNlcHRpb25fdGFibGUuCgpXZWQgRGVjIDE3IDE3OjA4OjUyIDE5OTcgIEJlbmphbWluIEtvc25payAgPGJrb3pAcmhpbm8uY3lnbnVzLmNvbT4KCgkqIHB0LmMgKGluc3RhbnRpYXRlX2NsYXNzX3RlbXBsYXRlKTogRG9uJ3QgZG8gaW5qZWN0aW9uIHdoZW4KIAlwcm9jZXNzaW5nX3RlbXBsYXRlX2RlY2wgaXMgdHJ1ZSwgYXMgcG9sbHV0ZXMgY3VycmVudF9iaW5kaW5nX2xldmVsIAogICAgICAgIGZvciBiYXNlIGNsYXNzZXMuCgpXZWQgRGVjIDE3IDIxOjE3OjM5IDE5OTcgIFBldGVyIFNjaG1pZCA8c2NobWlkQGx0b2kuaWFwLnBoeXNpay50dS1kYXJtc3RhZHQuZGU+CgoJKiBwdC5jIChtYXliZV9mb2xkX25vbnR5cGVfYXJnKTogQWRkIHByb3RvdHlwZS4KClR1ZSBEZWMgMTYgMTA6MzE6MjAgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogdHJlZS5jIChtYXBjYXIpOiBIYW5kbGUgVFJZX0NBVENIX0VYUFIgZXQgYWwuCgkqIGVycm9yLmMgKGR1bXBfZXhwcik6IExpa2V3aXNlLgoKTW9uIERlYyAxNSAxMjoyMjowNCAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiB0eXBlY2suYyAoYnVpbGRfZnVuY3Rpb25fY2FsbF9yZWFsKTogUmVtb3ZlICJpbmxpbmUgY2FsbGVkIGJlZm9yZQoJZGVmaW5pdGlvbiIgcGVkd2Fybi4KCgkqIHB0LmMgKGNvZXJjZV90ZW1wbGF0ZV9wYXJtcyk6IFVzZSBtYXliZV9mb2xkX25vbnR5cGVfYXJnLgoKU3VuIERlYyAxNCAyMjozNDoyMCAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjdnQuYyAoY3BfY29udmVydF90b19wb2ludGVyKTogRml4IGJhc2UgY29udmVyc2lvbiBvZiBwbSdzLgoKCSogcHQuYyAodHlwZV91bmlmaWNhdGlvbl9yZWFsKTogQ2hhbmdlIF9fbnVsbCB0byB0eXBlIHZvaWQqIHdpdGggCglhIHdhcm5pbmcuCgpTdW4gRGVjIDE0IDIwOjM4OjM1IDE5OTcgIE1hcmsgTWl0Y2hlbGwgIDxtbWl0Y2hlbGxAdXNhLm5ldD4KCgkqIGNhbGwuYyAoaW1wbGljaXRfY29udmVyc2lvbik6IERvbid0IGNhbGwKCWJ1aWxkX3VzZXJfdHlwZV9jb252ZXJzaW9uXzEgd2l0aCBhIE5VTEwgZXhwciwgc2luY2UgaXQgd2lsbAoJY3Jhc2guIAoKCSogcHQuYyAodW5pZnkpOiBEb24ndCB0cnkgdG8gdW5pZnkgYXJyYXkgYm91bmRzIGlmIGVpdGhlciBhcnJheSBpcwoJdW5ib3VuZGVkLgoKRnJpIERlYyAxMiAxNjowOToxNCAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBlcnJmbi5jIChjcF9wZWR3YXJuLCBjcF9wZWR3YXJuX2F0LCBjcF9lcnJvcl9hdCwgY3Bfd2FybmluZ19hdCk6IAoJUmVwbGFjZSBleHRlcm4gZGVjbHMgd2l0aCBjYXN0cy4KCgkqIGRlY2wuYyAoZXhwYW5kX3N0YXJ0X2Vhcmx5X3RyeV9zdG10cyk6IERvbid0IG1lc3Mgd2l0aCBhIHNlcXVlbmNlLgoJVXBkYXRlIGxhc3RfcGFybV9jbGVhbnVwX2luc24uCgkoc3RvcmVfYWZ0ZXJfcGFybXMpOiBSZW1vdmUuCgkqIGNwLXRyZWUuaDogQWRqdXN0LgoKVGh1IERlYyAxMSAyMjoxODozNyAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBkZWNsMi5jIChjb21kYXRfbGlua2FnZSk6IEFsc28gc2V0IERFQ0xfQ09NREFULgoJKGZpbmlzaF9maWxlKTogQ2hlY2sgREVDTF9DT01EQVQgaW5zdGVhZCBvZiB3ZWFrfG9uZV9vbmx5LgoJKGltcG9ydF9leHBvcnRfdnRhYmxlKTogVXNlIG1ha2VfZGVjbF9vbmVfb25seSBpbnN0ZWFkIG9mCiAJY29tZGF0X2xpbmthZ2UgZm9yIHdpbjMyIHR3ZWFrLgoJKGltcG9ydF9leHBvcnRfZGVjbCk6IExpa2V3aXNlLgoJKiBwdC5jIChtYXJrX2RlY2xfaW5zdGFudGlhdGVkKTogTGlrZXdpc2UuCgoJKiBkZWNsMi5jIChmaW5pc2hfZmlsZSk6IExvc2UgaGFuZGxpbmcgb2YgdGVtcGxhdGVzIGluIHBlbmRpbmdfc3RhdGljcy4KClRodSBEZWMgMTEgMjE6MTI6MDkgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZGVjbDIuYyAoZmluaXNoX2ZpbGUpOiBMb3NlIGNhbGwgdG8gZXhwYW5kX2J1aWx0aW5fdGhyb3cuCgkqIGV4Y2VwdC5jIChleHBhbmRfYnVpbHRpbl90aHJvdyk6IFJlbW92ZS4KCSogY3AtdHJlZS5oOiBSZW1vdmUgcHRyX3B0cl90eXBlX25vZGUuCgkqIGRlY2wuYzogTGlrZXdpc2UuCgpUaHUgRGVjIDExIDIwOjQzOjMzIDE5OTcgIFRlZW11IFRvcm1hICA8dG90QHRyZW1hLmNvbT4KCQoJKiBkZWNsLmMgKHB0cl9wdHJfdHlwZV9ub2RlKTogRGVmaW5lLgoJKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogSW5pdGlhbGl6ZSBpdC4KCSogY3AtdHJlZS5oOiBEZWNsYXJlIGl0LgoJKiBleGNlcHRpb24uY2MgKF9fY3BfZXhjZXB0aW9uX2luZm8pOiBVc2UgX19nZXRfZWhfaW5mby4KCShfX2NwX3B1c2hfZXhjZXB0aW9uKTogRGl0dG8uCgkoX19jcF9wb3BfZXhjZXB0aW9uKTogRGl0dG8uCgoJRnJvbSBTY290dCBTbnlkZXIgPHNueWRlckBkMHNnaWYuZm5hbC5nb3Y+OgogICAgICAgICogZXhjZXB0LmMgKGV4cGFuZF9idWlsdGluX3Rocm93KTogVXNlIGdldF9zYXZlZF9wY19yZWYgaW5zdGVhZCBvZgoJc2F2ZWRfcGMuCgkoaW5pdF9leGNlcHRpb25fcHJvY2Vzc2luZyk6IFJlbW92ZWQgc2F2ZWRfcGMgaW5pdGlhbGl6YXRpb24uCgpXZWQgRGVjIDEwIDExOjA0OjQ1IDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHB0LmMgKGluc3RhbnRpYXRlX2RlY2wpOiBEZWZlciBhbGwgdGVtcGxhdGVzIGJ1dCBpbmxpbmUgZnVuY3Rpb25zLgoKTW9uIERlYyAgOCAyMzoxNzoxMyAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBpbml0LmMgKGV4cGFuZF92ZWNfaW5pdCk6IERvbid0IGZvbGQgYSBsaXN0IG9mIHBhcmFtZXRlcnMuCgoJKiBkZWNsLmMgKGNvcHlfYXJnc19wKTogSGFuZGxlIGNvcHkgZWxpc2lvbiBmb3IgdHlwZXMgd2l0aCB2aXJ0dWFsCiAJYmFzZXMuCiAgCSogY2FsbC5jIChidWlsZF9vdmVyX2NhbGwpOiBMaWtld2lzZS4KClN1biBEZWMgIDcgMjI6Mzg6MTIgMTk5NyAgTWFyayBNaXRjaGVsbCAgPG1taXRjaGVsbEB1c2EubmV0PgoKCSogcHQuYyAobG9va3VwX3RlbXBsYXRlX2Z1bmN0aW9uKTogQ29weSB0aGUgdGVtcGxhdGUgYXJndW1lbnRzLAoJbm90IGp1c3QgdGhlIGxpc3QgY29udGFpbmluZyB0aGVtLCB0byB0aGUgcGVybWFuZW50IG9ic3RhY2suCgpTdW4gRGVjICA3IDE1OjUzOjA2IDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGV4Y2VwdC5jIChleHBhbmRfc3RhcnRfY2F0Y2hfYmxvY2spOiBzdXNwZW5kX21vbWVudGFyeSBmb3IgdGhlCgl0ZXJtaW5hdGUgaGFuZGxlci4KCgkqIGVycm9yLmMgKGR1bXBfZGVjbCk6IEhhbmRsZSBMT09LVVBfRVhQUi4KClN1biBEZWMgIDcgMTU6NDU6MDcgMTk5NyAgTWFyayBNaXRjaGVsbCAgPG1taXRjaGVsbEB1c2EubmV0PgoKCSogcnR0aS5jIChidWlsZF9keW5hbWljX2Nhc3QpOiBDb3B5IHRoZSBjYXN0LXRvIHR5cGUgdG8gdGhlCglwZXJtYW5lbnQgb2JzdGFjayBpZiB3ZSBhcmUgcHJvY2Vzc2luZyBhIHRlbXBsYXRlIGRlY2wuCgkqIHR5cGVjay5jIChidWlsZF9zdGF0aWNfY2FzdCk6IExpa2V3aXNlLgoJKGJ1aWxkX2NvbnN0X2Nhc3QpOiBMaWtld2lzZS4KCShidWlsZF9yZWludGVycHJldF9jYXN0KTogTGlrZXdpc2UuCgoJKiBwdC5jIChjb2VyY2VfdGVtcGxhdGVfcGFybXMpOiBDb2VyY2Ugc29tZSBleHByZXNzaW9ucywgZXZlbgoJd2hlbiBwcm9jZXNzaW5nX3RlbXBsYXRlX2RlY2wuCgpTdW4gRGVjICA3IDAxOjQ2OjMzIDE5OTcgIEJydW5vIEhhaWJsZSAgPGJydW5vQGxpbnVpeC5tYXRoZW1hdGlrLnVuaS1rYXJsc3J1aGUuZGU+CgoJKiB0eXBlY2suYyAoYnVpbGRfYmluYXJ5X29wX25vZGVmYXVsdCwgcG9pbnRlcl9kaWZmKTogU3ltbWV0cmljCgloYW5kbGluZyBvZiBwb2ludGVyIGRpZmZlcmVuY2UgZXhwcmVzc2lvbnMuCgoJKiB0eXBlY2suYyAoY29tcF90YXJnZXRfdHlwZXMpOiBDb21wYXJpc29uIG9mIGZ1bmN0aW9uL21ldGhvZCB0eXBlcwoJaXMgaW5kZXBlbmRlbnQgb2YgbnB0cnMuCgpTdW4gRGVjICA3IDAxOjQwOjI3IDE5OTcgIE1hcmsgTWl0Y2hlbGwgIDxtbWl0Y2hlbGxAdXNhLm5ldD4KCgkqIHB0LmMgKHRzdWJzdCk6IEF2b2lkIGNyZWF0aW5nIHBvaW50ZXIgdG8gcmVmZXJlbmNlIGFuZAoJcmVmZXJlbmNlIHRvIHJlZmVyZW5jZSB0eXBlcy4KClNhdCBEZWMgIDYgMDE6Mjk6MzcgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogcGFyc2UueSAoZG9faWQpOiBOZXcgbm9udGVybWluYWwuCgkodGVtcGxhdGVfaWQpOiBVc2UgaXQuCgpGcmkgRGVjICA1IDAxOjE3OjM0IDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnkgKHRlbXBsYXRlX2lkKTogZG9faWRlbnRpZmllciBmb3IgUEZVTkNOQU1FcywgdG9vLgoJKiBzcGV3LmMgKHl5bGV4KTogRG9uJ3QgZG9faWRlbnRpZmllciBoZXJlLgoJKiBkZWNsMi5jIChidWlsZF9leHByX2Zyb21fdHJlZSk6IFJldmVydCBsYXN0IGNoYW5nZS4KCgkqIGRlY2wyLmMgKGJ1aWxkX2V4cHJfZnJvbV90cmVlKTogRXhwYW5kIHRoZSBuYW1lIGZvciBhIG1ldGhvZCBjYWxsLgoJKiBwYXJzZS55IChvYmplY3RfdGVtcGxhdGVfaWQpOiBEb24ndCB0cnkgdG8gdGFrZSB0aGUgREVDTF9OQU1FLgoKV2VkIERlYyAgMyAyMDowMjozOSAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBpbml0LmMgKGJ1aWxkX25ldyk6IFVzZSBhIFRBUkdFVF9FWFBSIGluc3RlYWQgb2YgU0FWRV9FWFBSIGZvcgogCWFsbG9jX2V4cHIuCiAgCSogY2FsbC5jIChidWlsZF9vcF9kZWxldGVfY2FsbCk6IEFkanVzdC4KCgkqIGV4Y2VwdC5jIChleHBhbmRfZW5kX2NhdGNoX2Jsb2NrKTogTG9zZSByZXRocm93IHJlZ2lvbi4KCShleHBhbmRfc3RhcnRfY2F0Y2hfYmxvY2spOiBMaWtld2lzZS4KCShleHBhbmRfZW5kX2NhdGNoX2Jsb2NrKTogRG9uJ3QgZXhwYW5kX2xlZnRvdmVyX2NsZWFudXBzLgoKV2VkIERlYyAgMyAxMzoyNDowNCAxOTk3ICBCZW5qYW1pbiBLb3NuaWsgIDxia296QHJoaW5vLmN5Z251cy5jb20+CgoJKiBwdC5jICh0c3Vic3QpOiBSZW1vdmUgdHJlZV9jb25zIGNhbGwgKHBsYWNlcyByZWR1bmRhbnQgaW5mbyBpbnRvCiAJREVDTF9URU1QTEFURV9JTlNUQU5USUFUSU9OKS4gCQoKV2VkIERlYyAgMyAxMTo0NDo1MiAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiB0cmVlLmMgKGlzX292ZXJsb2FkZWRfZm4pOiBIYW5kbGUgZ2V0dGluZyBhIGZuIHRlbXBsYXRlLgoJKHJlYWxseV9vdmVybG9hZGVkX2ZuKTogTGlrZXdpc2UuCgkqIGVycm9yLmMgKGR1bXBfZGVjbCk6IEhhbmRsZSBURU1QTEFURV9JRF9FWFBScyBiZXR0ZXIuCgkqIHB0LmMgKGNoZWNrX2V4cGxpY2l0X3NwZWNpYWxpemF0aW9uKTogVHdlYWsuCgkoZGV0ZXJtaW5lX2V4cGxpY2l0X3NwZWNpYWxpemF0aW9uKTogVHdlYWsuCgoJKiB0cmVlLmMsIGNwLXRyZWUuaCAoZ2V0X3RhcmdldF9leHByKTogTmV3IGZuLgoKV2VkIERlYyAgMyAwODo0NzoyNyAxOTk3ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KCgkqIHB0LmMgKGNoZWNrX2V4cGxpY2l0X3NwZWNpYWxpemF0aW9uKTogRml4IG1pc3NwZWxsaW5nIGluCglkaWFnbm9zdGljOiBgcHJlY2VlZGVkJy4KCSogdHlwZWNrLmMgKGdldF9kZWx0YV9kaWZmZXJlbmNlKTogRml4IG1pc3NwZWxsaW5nIGluIGRpYWdub3N0aWM6CglgY29udmVyc2lvbmEnLgoKMTk5Ny0xMi0wMiAgTWFyayBNaXRjaGVsbCAgPG1taXRjaGVsbEB1c2EubmV0PgoKCSogcHQuYyAoZGV0ZXJtaW5lX2V4cGxpY2l0X3NwZWNpYWxpemF0aW9uKTogQXZvaWQgYW4gaW50ZXJuYWwKCWVycm9yIGZvciBiYWQgc3BlY2lhbGl6YXRpb25zLgoKCSogbWV0aG9kLmMgKGJ1aWxkX292ZXJsb2FkX3ZhbHVlKTogSGFuZGxlIFNDT1BFX1JFRi4KClR1ZSBEZWMgIDIgMTk6MTg6NTAgMTk5NyAgTWlrZSBTdHVtcCAgPG1yc0B3cnMuY29tPgoKCSogY2xhc3MuYyAocHJlcGFyZV9mcmVzaF92dGFibGUpOiBFbmFibGUgZXZlbiBtb3JlIGNvbXBsZXggTUkKCXZ0YWJsZSBuYW1lcy4KClR1ZSBEZWMgIDIgMDE6Mzc6MTkgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZXhjZXB0aW9uLmNjIChfX2NoZWNrX2VoX3NwZWMpOiBPcHRpbWl6ZSBhIGJpdC4KCgkqIGV4Y2VwdGlvbi5jYyAoX19jcF9wb3BfZXhjZXB0aW9uKTogTG9zZSBoYW5kbGVyIGFyZy4KCSogZXhjZXB0LmMgKGRvX3BvcF9leGNlcHRpb24pOiBMaWtld2lzZS4KCShwdXNoX2VoX2NsZWFudXApOiBMZXQgdGhlIGNsZWFudXAgbWVjaGFuaXNtIHN1cHBseSB0aGUgaGFuZGxlci4KCShleHBhbmRfZW5kX2NhdGNoX2Jsb2NrKTogTGlrZXdpc2UuCgpGcmkgTm92IDI4IDAxOjU4OjE0IDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHB0LmMgKGNoZWNrX2V4cGxpY2l0X3NwZWNpYWxpemF0aW9uKTogQ29tcGxhaW4gYWJvdXQgdXNpbmcgYSAKCXRlbXBsYXRlLWlkIGZvciBhIG5vbi1zcGVjaWFsaXphdGlvbi4KCkZyaSBOb3YgMjggMTI6MzU6MTkgMTk5NyAgU2NvdHQgQ2hyaXN0bGV5ICA8c2NvdHRjQG5ldC1jb21tdW5pdHkuY29tPgoKCSogcmVwby5jOiBQcm90b3R5cGUgcmluZGV4IG9ubHkgaWYgbmVlZGVkLgoJKiB4cmVmLmM6IExpa2V3aXNlLgoKRnJpIE5vdiAyOCAwMTo1NjozNSAxOTk3ICBCcnVubyBIYWlibGUgIDxicnVub0BsaW51aXgubWF0aGVtYXRpay51bmkta2FybHNydWhlLmRlPgoKICAgICAgICAqIGVycm9yLmMgKGR1bXBfZGVjbCk6IEhhbmRsZSBURU1QTEFURV9JRF9FWFBSLgoKVGh1IE5vdiAyNyAwMDo1OTo0NiAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiB0eXBlY2suYyAoYnVpbGRfY29uc3RfY2FzdCk6IEhhbmRsZSByZWZlcmVuY2VzIGhlcmUgaW5zdGVhZCBvZgoJaGFuZGluZyBvZmYgdG8gY29udmVydF90b19yZWZlcmVuY2UuCgoJKiBleGNlcHQuYzogTG9zZSBVbmV4cGVjdGVkLCBTZXRUZXJtaW5hdGUsIFNldFVuZXhwZWN0ZWQsCiAJVGVybWluYXRlRnVuY3Rpb25DYWxsLgoJKGluaXRfZXhjZXB0aW9uX3Byb2Nlc3NpbmcpOiBMaWtld2lzZS4gIFRlcm1pbmF0ZSBldCBhbCBhcmUgbm93CiAJdGhlIGZucywgbm90IEFERFJfRVhQUnMuCgkodmFyaW91cyk6IExvc2UgcmVkdW5kYW50IGFzc2VtYmxlX2V4dGVybmFsIGNhbGxzLgoJKGRvX3Vud2luZCk6IHMvQnVpbHRpblJldHVybkFkZHJlc3MvYnVpbHRpbl9yZXR1cm5fYWRkcmVzc19mbmRlY2wvLgoKCSogY3AtdHJlZS5oIChzdHJ1Y3QgbGFuZ19kZWNsX2ZsYWdzKTogQWRkIGNvbWRhdC4KCShERUNMX0NPTURBVCk6IE5ldyBtYWNyby4KCSogZGVjbC5jIChkdXBsaWNhdGVfZGVjbHMpOiBQcm9wYWdhdGUgaXQuCgkoY3BfZmluaXNoX2RlY2wpOiBIYW5kbGUgaXQuCgkqIGRlY2wyLmMgKGltcG9ydF9leHBvcnRfZGVjbCk6IEp1c3Qgc2V0IERFQ0xfQ09NREFUIG9uIFZBUl9ERUNMcy4KCgkqIGNsYXNzLmM6IFJlbW92ZSBzdGF0aWMgcGVuZGluZ19oYXJkX3ZpcnR1YWxzLgogCShhZGRfdmlydHVhbF9mdW5jdGlvbik6IFRha2UgcG9pbnRlcnMgdG8gcGVuZGluZ192aXJ0dWFscwoJYW5kIHBlbmRpbmdfaGFyZF92aXJ0dWFscy4KCShmaW5pc2hfc3RydWN0XzEpOiBQYXNzIHRoZW0uICBEZWNsYXJlIHBlbmRpbmdfaGFyZF92aXJ0dWFscy4KCldlZCBOb3YgMjYgMjA6Mjg6NDkgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZGVjbDIuYyAoaW1wb3J0X2V4cG9ydF92dGFibGUpOiBJZiB3ZSBzdXBwb3J0IG9uZV9vbmx5IGJ1dCBub3QKCXdlYWsgc3ltYm9scywgbWFyayBpbnN0YW50aWF0ZWQgdGVtcGxhdGUgdnRhYmxlcyBvbmVfb25seS4KCShpbXBvcnRfZXhwb3J0X2RlY2wpOiBMaWtld2lzZSBmb3IgdGluZm8gZnVuY3Rpb25zLgoJKGZpbmlzaF92dGFibGVfdmFyZGVjbCk6IEFsc28gd3JpdGUgb3V0IHZ0YWJsZXMgZnJvbSBleHBsaWNpdGx5IAoJaW5zdGFudGlhdGVkIHRlbXBsYXRlIGNsYXNzZXMuCgkqIHB0LmMgKG1hcmtfY2xhc3NfaW5zdGFudGlhdGVkKTogUmV2ZXJ0IGxhc3QgY2hhbmdlLgoKCSogZXhjZXB0LmMgKGV4cGFuZF90aHJvdyk6IENhbGwgbWFya191c2VkIG9uIHRoZSBkZXN0cnVjdG9yLgoKV2VkIE5vdiAyNiAxNToxMzo0OCAxOTk3ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBsZXguYyAobGFuZ19pbml0KTogRW5hYmxlIGZsYWdfZXhjZXB0aW9ucyBieSBkZWZhdWx0IGlmIG5vCgljb21tYW5kIGxpbmUgc3dpdGNoIHdhcyBzcGVjaWZpZWQuCgoxOTk3LTExLTI2ICBNYXJrIE1pdGNoZWxsICA8bW1pdGNoZWxsQHVzYS5uZXQ+CgoJKiBwdC5jICh1bmlmeSk6IEhhbmRsZSBgdm9pZCcgdGVtcGxhdGUgcGFyYW1ldGVycyBpbgoJc3BlY2lhbGl6YXRpb25zLgoKV2VkIE5vdiAyNiAwMToxMToyNCAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBydHRpLmMgKGJ1aWxkX2R5bmFtaWNfY2FzdCk6IEhhbmRsZSB0ZW1wbGF0ZSBjYXNlIGhlcmUuCgkoYnVpbGRfZHluYW1pY19jYXN0XzEpOiBOb3QgaGVyZS4KCgkqIHR5cGVjazIuYyAoZGlnZXN0X2luaXQpOiBNYWtlIGNvcGllcyB3aGVyZSBhcHByb3ByaWF0ZS4KCgkqIGRlY2wyLmMgKGRlbGV0ZV9zYW5pdHkpOiByZXNvbHZlX29mZnNldF9yZWYuCgoJKiBleGNlcHQuYzogQ2FsbCB0ZXJtaW5hdGUgd2l0aG91dCBjYWNoaW5nIHNvIG1hbnkgYml0cy4KCgkqIGV4Y2VwdC5jIChleHBhbmRfc3RhcnRfY2F0Y2hfYmxvY2spOiBGaXggY2F0Y2hpbmcgYSByZWZlcmVuY2UKCXRvIHBvaW50ZXIuCgpUdWUgTm92IDI1IDExOjI4OjIxIDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGluaXQuYyAoYnVpbGRfbmV3KTogQ29weSBzaXplIHRvIHRoZSBzYXZlYWJsZSBvYnN0YWNrLgoKCSogaW5pdC5jIChidWlsZF9uZXcpOiBTdGljayBhIENMRUFOVVBfUE9JTlRfRVhQUiBpbnNpZGUgdGhlCiAJVFJZX0NBVENIX0VYUFIgZm9yIG5vdy4KCk1vbiBOb3YgMjQgMTI6MTU6NTUgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogdHlwZWNrLmMgKG1hcmtfYWRkcmVzc2FibGUpOiBEb24ndCBhc3N1bWUgYSBGVU5DVElPTl9ERUNMCgloYXMgREVDTF9MQU5HX1NQRUNJRklDLgoKCSogZXhjZXB0aW9uLmNjIChzdHJ1Y3QgY3BfZWhfaW5mbyk6IEFkZCBoYW5kbGVycyBmaWVsZC4KCShfX2NwX3B1c2hfZXhjZXB0aW9uKTogSW5pdGlhbGl6ZSBpdC4KCShfX2NwX3BvcF9leGNlcHRpb24pOiBEZWNyZW1lbnQgaXQuICBEb24ndCBwb3AgdW5sZXNzIGl0J3MgMC4KCShfX3Rocm93X2JhZF9leGNlcHRpb24pOiBSZW1vdmUuCgkqIGV4Y2VwdC5jIChjYWxsX2VoX2luZm8pOiBBZGQgaGFuZGxlcnMgZmllbGQuCgkoZ2V0X2VoX2hhbmRsZXJzKTogTmV3IGZuLgoJKHB1c2hfZWhfY2xlYW51cCk6IEluY3JlbWVudCBoYW5kbGVycy4KCkZyaSBOb3YgMjEgMTI6MjI6MDcgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZXhjZXB0LmMgKGV4cGFuZF9zdGFydF9laF9zcGVjKTogVXNlIHRoZSB0cnkvY2F0Y2ggY29kZS4KCShleHBhbmRfZW5kX2VoX3NwZWMpOiBMaWtld2lzZS4gIENhbGwgX19jaGVja19laF9zcGVjIGluc3RlYWQgb2YKCWRvaW5nIGV2ZXJ5dGhpbmcgaW5saW5lLgoJKGluaXRfZXhjZXB0aW9uX3Byb2Nlc3NpbmcpOiB0aHJvd190eXBlX21hdGNoIG5vdyB0YWtlcwogCWNvbnN0IHZvaWQgcG9pbnRlcnMuCgkqIGV4Y2VwdGlvbi5jYyAoX19jaGVja19laF9zcGVjKTogTmV3IGZuLgoJKiBpbmMvZXhjZXB0aW9uOiBOZWl0aGVyIHRlcm1pbmF0ZSBub3IgdW5leHBlY3RlZCByZXR1cm4uCgkqIGRlY2wuYzogTWFrZSBjb25zdF9wdHJfdHlwZV9ub2RlIHB1YmxpYy4KCSogdGluZm8yLmNjIChfX3Rocm93X3R5cGVfbWF0Y2hfcnR0aSk6IFRha2UgdGhlIHR5cGVpbmZvcyBjb25zdGx5LgoKCSogZXhjZXB0LmMgKGV4cGFuZF9zdGFydF9jYXRjaF9ibG9jayk6IFdlIG9ubHkgbmVlZCB0aGUgcmV0aHJvdwogCXJlZ2lvbiBmb3Igbm9uLXNqbGogZXhjZXB0aW9ucy4KCShleHBhbmRfZW5kX2NhdGNoX2Jsb2NrKTogTGlrZXdpc2UuICBVc2Ugb3V0ZXJfY29udGV4dF9sYWJlbF9zdGFjay4KClRodSBOb3YgMjAgMTQ6NDA6MTcgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogTWFrZS1sYW5nLmluIChDWFhfTElCMkZVTkNTKTogQWRkIG5ldyBvcCBuZXcgYW5kIG9wIGRlbGV0ZSBvYmpzLgoJKHZhcmlvdXMubyk6IExpa2V3aXNlLgoJKiBpbmMvbmV3OiBBZGQgcGxhY2VtZW50IGRlbGV0ZXMuICBBZGQgdGhyb3cgc3BlY3MgZm9yIGRlZmF1bHQgbmV3LgoJKiBuZXcuY2MgKHNldF9uZXdfaGFuZGxlcik6IE1vdmUgaGVyZSBmcm9tIGxpYmdjYzIuCgkqIG5ldzEuY2MgKG5ldyAobm90aHJvdykpOiBDYXRjaCBhIGJhZF9hbGxvYyB0aHJvd24gZnJvbSB0aGUgaGFuZGxlci4KCShuZXcpOiBNb3ZlIGZyb20gbGliZ2NjMi4gIFRocm93IGJhZF9hbGxvYy4KCSogbmV3Mi5jYzogTW92ZSB0aGUgcmVzdCBvZiB0aGUgb3AgbmV3cyBhbmQgb3AgZGVsZXRlcyBmcm9tIGxpYmdjYzIuCgkqIGRlY2wuYyAoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBVcGRhdGUgZXhjZXB0aW9uIHNwZWNzIG9uIG5ldyBhbmQKCWRlbGV0ZS4KCgkqIG1ldGhvZC5jIChidWlsZF9kZWNsX292ZXJsb2FkX3JlYWwpOiBEb24ndCBtZXNzIHdpdGggZ2xvYmFsIAoJcGxhY2VtZW50IGRlbGV0ZS4KCgkqIGluaXQuYyAoYnVpbGRfbmV3KTogQ2hlY2sgZm9yIG51bGwgdGhyb3cgc3BlYywgbm90IG5vdGhyb3dfdC4KCgkqIGRlY2wuYyAoZHVwbGljYXRlX2RlY2xzKTogRG9uJ3QgY29tcGxhaW4gYWJvdXQgZGlmZmVyZW50IGV4Y2VwdGlvbnMKCWZyb20gYW4gaW50ZXJuYWwgZGVjbGFyYXRpb24uCgoJKiBjYWxsLmMgKGJ1aWxkX29wX2RlbGV0ZV9jYWxsKTogRml4IGNoZWNrIGZvciBtZW1iZXIgZm5zIGFnYWluLgoKCSogZGVjbDIuYyAoaW1wb3J0X2V4cG9ydF9kZWNsKTogSW50ZXJmYWNlIGhhY2tlcnkgYWZmZWN0cwoJdmlydHVhbCBzeW50aGVzaXplZCBtZXRob2RzLgoKV2VkIE5vdiAxOSAxODoyNDoxNCAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBkZWNsLmMgKHN0YXJ0X2RlY2wpOiBEb24ndCBqdXN0IGNvbXBsYWluIGFib3V0IGEgbWlzbWF0Y2hlZCAKCXNjb3BlLCBmaXggaXQuCgoJKiBkZWNsLmMgKG1ha2VfaW1wbGljaXRfdHlwZW5hbWUpOiBIYW5kbGUgY2FzZSB3aGVyZSB0IGlzIG5vdAogCWFjdHVhbGx5IGZyb20gY29udGV4dC4KCSogdHJlZS5jIChnZXRfdHlwZV9kZWNsKTogTG9zZSBpZGVudGlmaWVyIGNhc2UuCgkqIHNwZXcuYyAoeXlsZXgpOiBMb3NlIHVzZWxlc3MgY2FsbCB0byBpZGVudGlmZXJfdHlwZWRlY2xfdmFsdWUuCgkqIHBhcnNlLnkgKG5vbm5lc3RlZF90eXBlKTogSnVzdCB1c2UgbG9va3VwX25hbWUuCgkoY29tcGxleF90eXBlX25hbWUpOiBKdXN0IHVzZSBJREVOVElGSUVSX0dMT0JBTF9WQUxVRS4KCldlZCBOb3YgMTkgMTE6NDU6MDcgMTk5NyAgTWljaGFlbCBUaWVtYW5uICA8dGllbWFubkBheG9uLmN5Z251cy5jb20+CgoJKiBlcnJvci5jIChkdW1wX2Z1bmN0aW9uX25hbWUpOiBUZXN0IERFQ0xfTEFOR19TUEVDSUZJQyBpbiBjYXNlCglUIHdhcyBidWlsdCBpbiBDIGxhbmd1YWdlIGNvbnRleHQgKGZvciBleGFtcGxlLCBieQoJb3V0cHV0X2Z1bmNfc3RhcnRfcHJvZmlsZXIpLgoKV2VkIE5vdiAxOSAxMDozOToyNyAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBkZWNsLmMgKG1ha2VfaW1wbGljaXRfdHlwZW5hbWUpOiBOZXcgZm4uCgkobG9va3VwX25hbWVfcmVhbCk6IFVzZSBpdC4gIFVzZSBjdXJyZW50X2NsYXNzX3R5cGUgYXMgdGhlIGNvbnRleHQuCgpNb24gTm92IDE3IDIzOjQyOjAzIDE5OTcgIEJydW5vIEhhaWJsZSA8aGFpYmxlQGlsb2cuZnI+CgoJKiBwdC5jIChkb19wb3BsZXZlbCk6IERvbid0IHByb2hpYml0IGp1bXBzIGludG8gdGhpcyBjb250b3VyLgoKTW9uIE5vdiAxNyAwMjowMToyOCAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBmcmllbmQuYyAoZG9fZnJpZW5kKTogV2FybiBhYm91dCBub24tdGVtcGxhdGUgZnJpZW5kcyBpbiB0ZW1wbGF0ZXMuCgoJKiBjYWxsLmMgKGJ1aWxkX29wX2RlbGV0ZV9jYWxsKTogRml4IGhhbmRsaW5nIG9mIGluaGVyaXRlZCBkZWxldGUuCgoJKiBzZWFyY2guYyAoZGZzX3JlY29yZF9pbmhlcml0YW5jZSk6IElnbm9yZSB0ZW1wbGF0ZSB0eXBlIHBhcm1zLgoKU2F0IE5vdiAxNSAwMDozMDo1MSAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjYWxsLmMgKGJ1aWxkX25ld19vcCk6IEZpeCBjb3B5IGVycm9yLgoJKGJ1aWxkX29wX25ld19jYWxsKTogTmV3IGZuLgoJKGJ1aWxkX29wX2RlbGV0ZV9jYWxsKTogTmV3IGZuLgoJKiBjcC10cmVlLmg6IERlY2xhcmUgdGhlbS4KCSogaW5pdC5jIChidWlsZF9uZXcpOiBVc2UgdGhlbS4gIFN1cHBvcnQgcGxhY2VtZW50IGRlbGV0ZS4KCShidWlsZF94X2RlbGV0ZSk6IFVzZSBidWlsZF9vcF9kZWxldGVfY2FsbC4KCShidWlsZF9kZWxldGUpOiBMaWtld2lzZS4KCSogZGVjbDIuYyAoZGVsZXRlX3Nhbml0eSk6IExpa2V3aXNlLgoJKGNvZXJjZV9kZWxldGVfdHlwZSk6IERvbid0IGNvbXBsYWluIGFib3V0IHBsYWNlbWVudCBkZWxldGUuCgpUaHUgTm92IDEzIDAxOjUyOjM2IDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGNhbGwuYyAoYnVpbGRfbmV3X2Z1bmN0aW9uX2NhbGwpOiBSZW1vdmUgdW51c2VkICdvYmonIHBhcm0uCgkqIGNwLXRyZWUuaCwgdHlwZWNrLmM6IEFkanVzdC4KCgkqIGluaXQuYyAoYnVpbGRfbmV3KTogTWFrZSB0aGUgY2xlYW51cCBsYXN0IGxvbmdlci4KCShleHBhbmRfdmVjX2luaXQpOiBDYWxsIGRvX3BlbmRpbmdfc3RhY2tfYWRqdXN0LgoKV2VkIE5vdiAxMiAxMTowNDozMyAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBwdC5jIChkb190eXBlX2luc3RhbnRpYXRpb24pOiBGaXggdHlwby4KCShtYXJrX2NsYXNzX2luc3RhbnRpYXRlZCk6IElmIHdlIHN1cHBvcnQgb25lX29ubHkgYnV0IG5vdCB3ZWFrIAoJc3ltYm9scywgZG9uJ3QgbWFyayB0aGlzIGFzIGtub3duLgoKCSogaW5pdC5jIChidWlsZF9uZXcpOiBIYW5kbGUgdmVjIGRlbGV0ZSBpbiBFSCBjbGVhbnVwLgoKV2VkIE5vdiAxMiAwODoxMTo1NSAxOTk3ICBCZW5qYW1pbiBLb3NuaWsgIDxia296QHJoaW5vLmN5Z251cy5jb20+CgoJKiBjYWxsLmMgKGJ1aWxkX21ldGhvZF9jYWxsKTogQ2FsbCBjb21wbGV0ZV90eXBlIGJlZm9yZSBjaGVja2luZwogCWZvciBkZXN0cnVjdG9yLgoKU3VuIE5vdiAgOSAwMToyOTo1NSAxOTk3ICBKaW0gV2lsc29uICAod2lsc29uQGN5Z251cy5jb20pCgoJKiBkZWNsLmMgKGFkZF9ibG9ja19jdXJyZW50X2xldmVsKTogRGVsZXRlLgoJKiBpbml0LmMgKGJ1aWxkX3ZlY19kZWxldGVfMSk6IERlbGV0ZSBidWlsZF9ibG9jayBhbmQKCWFkZF9ibG9ja19jdXJyZW50X2xldmVsIGNhbGxzLgoKV2VkIE5vdiAxMiAwMDo0ODoxNiAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBpbml0LmMgKGJ1aWxkX25ldyk6IEhhbmRsZSBmcmVlaW5nIGFsbG9jYXRlZCBtZW1vcnkgd2hlbiB0aGUKCWNvbnN0cnVjdG9yIHRocm93cy4KCgkqIGNhbGwuYyAoYnVpbGRfbmV3X21ldGhvZF9jYWxsKTogRml4IGZsYWdzIGFyZy4KCgkqIHB0LmMgKGRvX3R5cGVfaW5zdGFudGlhdGlvbik6IERvbid0IHRyeSB0byBpbnN0YW50aWF0ZQoJbWVtYmVyIHRlbXBsYXRlcy4KCShtYXJrX2RlY2xfaW5zdGFudGlhdGVkKTogSWYgd2Ugc3VwcG9ydCBvbmVfb25seSBidXQgbm90Cgl3ZWFrIHN5bWJvbHMsIG1hcmsgdGhpcyBvbmVfb25seS4KCSogZGVjbDIuYyAoaW1wb3J0X2V4cG9ydF92dGFibGUpOiBEb24ndCBkZWZlciBoYW5kbGluZyBvZiB2dGFibGVzCglpZiBNVUxUSVBMRV9TWU1CT0xfU1BBQ0VTLgoKVHVlIE5vdiAxMSAxMjowMjoxMiAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBleGNlcHQuYyAoZXhwYW5kX2VuZF9jYXRjaF9ibG9jayk6IExvc2UgY2FsbCB0byBfX3NqcG9wbnRocm93LgoKVHVlIE5vdiAxMSAwMjo1Mzo0NCAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AbGFzaGVyLmN5Z251cy5jb20+CgoJKiBleGNlcHQuYyAoZG9fcG9wX2V4Y2VwdGlvbik6IFJldHVybiBhIHZhbHVlLgoKTW9uIE5vdiAxMCAyMDoyNTozMSAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjYWxsLmMgKGJ1aWxkX25ld19tZXRob2RfY2FsbCk6IEhhbmRsZSBnZXR0aW5nIGEKIAlURU1QTEFURV9JRF9FWFBSIGFyb3VuZCBhIFRFTVBMQVRFX0RFQ0wuICBEb24ndCBsb29rIGZvciBhIGZpZWxkCiAJaWYgd2UgZ290IHRlbXBsYXRlIHBhcm1zLgoJKiB0eXBlY2suYyAoYnVpbGRfeF9mdW5jdGlvbl9jYWxsKTogUmVtZW1iZXIgdGhlIFRFTVBMQVRFX0lEX0VYUFIsCiAJbm90IGp1c3QgdGhlIGFyZ3MuCgkqIGRlY2wyLmMgKGJ1aWxkX2V4cHJfZnJvbV90cmVlKTogVHdlYWsgbGFzdCBjaGFuZ2UuCgkqIHB0LmMgKHRzdWJzdF9jb3B5KTogVXNlIGdldF9maXJzdF9mbiBpbnN0ZWFkIG9mIFRSRUVfVkFMVUUuCgkobWF5YmVfZm9sZF9ub250eXBlX2FyZyk6IFNwbGl0IG91dCBmcm9tIHRzdWJzdF9jb3B5LgoJKiB0cmVlLmMgKGdldF9maXJzdF9mbik6IEp1c3QgcmV0dXJuIGEgVEVNUExBVEVfSURfRVhQUi4KCk1vbiBOb3YgMTAgMjA6MDg6MzggMTk5NyAgS3JpYW5nIExlcmRzdXdhbmFraWogPGxlcmRzdXdhQHNjZi1mcy51c2MuZWR1PgoKCSogcHQuYyAodHN1YnN0X2NvcHkpOiBIYW5kbGUgZXhwbGljaXQgdGVtcGxhdGUgYXJndW1lbnRzIGluIAoJZnVuY3Rpb24gY2FsbHMuCgkqIHR5cGVjay5jIChidWlsZF94X2Z1bmN0aW9uX2NhbGwpOiBMaWtld2lzZS4KCSogZGVjbDIuYyAoYnVpbGRfZXhwcl9mcm9tX3RyZWUpOiBMb29rdXAgZnVuY3Rpb24gbmFtZSBpZiBpdCAKCWhhc24ndCBiZWVuIGRvbmUuCgoJKiBwdC5jICh0c3Vic3QpOiBJbnN0YW50aWF0ZSB0ZW1wbGF0ZSBmdW5jdGlvbnMgcHJvcGVybHkgd2hlbiAKCXRlbXBsYXRlIHBhcmFtZXRlciBkb2VzIG5vdCBhcHBlYXIgaW4gZnVuY3Rpb24gYXJndW1lbnRzIGFuZCByZXR1cm4gCgl0eXBlLgoJKGNvbXBfdGVtcGxhdGVfYXJncyk6IEhhbmRsZSBtZW1iZXIgdGVtcGxhdGVzIHJlcXVpcmVkIGJ5IHRzdWJzdC4KCk1vbiBOb3YgMTAgMjA6MDg6MzggMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZGVjbC5jIChncm9rZGVjbGFyYXRvcik6IFR3ZWFrIGNvbmRpdGlvbnMgZm9yIHBlZHdhcm4gaW4KIAlwcmV2aW91cyBjaGFuZ2UuCgpNb24gTm92IDEwIDIwOjA4OjI5IDE5OTcgIEJydW5vIEhhaWJsZSAgPGJydW5vQGxpbnVpeC5tYXRoZW1hdGlrLnVuaS1rYXJsc3J1aGUuZGU+CgoJKiBwdC5jIChjb2VyY2VfdGVtcGxhdGVfcGFybXMpOiBUd2VhayBlcnJvciBtZXNzYWdlLgoKCSogZGVjbC5jIChncm9rZGVjbGFyYXRvcik6IElmIC1XcmV0dXJuLXR5cGUsIHdhcm4gZXZlcnl0aW1lIGEKCXJldHVybiB0eXBlIGRlZmF1bHRzIHRvIGBpbnQnLCBldmVuIGlmIHRoZXJlIGFyZSBzdG9yYWdlLWNsYXNzCglzcGVjaWZpZXJzLgoKTW9uIE5vdiAxMCAwMzowNDoyMCAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJQ29tcGxldGUgbmVzdGVkIGV4Y2VwdGlvbiBzdXBwb3J0LgoJKiBleGNlcHQuYyAoZG9fcG9wX2V4Y2VwdGlvbik6IFNwbGl0IG91dC4uLgoJKHB1c2hfZWhfY2xlYW51cCk6IEZyb20gaGVyZS4gIEhhbmRsZSB0aGUgRUggcmVnaW9uIGJ5IGhhbmQuCgkoZXhwYW5kX3N0YXJ0X2NhdGNoX2Jsb2NrKTogQWRkIGEgbmV3IGxldmVsIGZvciB0aGUgY2F0Y2ggcGFybS4KCU1vdmUgdGhlIHJldGhyb3cgcmVnaW9uIG91dHNpZGUgdGhlIHR3byBjbGVhbnVwIHJlZ2lvbnMuCglQcm90ZWN0IHRoZSBpbml0aWFsaXplciBmb3IgdGhlIGNhdGNoIHBhcm0gd2l0aCB0ZXJtaW5hdGUuCgkoZXhwYW5kX2VuZF9jYXRjaF9ibG9jayk6IExpa2V3aXNlLiAgRW5kIHRoZSByZWdpb24gZm9yIHRoZSBlaF9jbGVhbnVwLgoJKiBleGNlcHRpb24uY2MgKF9fY3BfcG9wX2V4Y2VwdGlvbik6IE5vdyB0YWtlcyB0d28gcGFybXMuICBIYW5kbGUKCXBvcHBpbmcgb2ZmIHRoZSBtaWRkbGUgb2YgdGhlIHN0YWNrLgoJKiB0cmVlLmMgKGx2YWx1ZV9wLCByZWFsX2x2YWx1ZV9wKTogSGFuZGxlIFRSWV9DQVRDSF9FWFBSLCAKCVdJVEhfQ0xFQU5VUF9FWFBSLCBhbmQgVU5TQVZFX0VYUFIuCgkoYnVpbGRfY3BsdXNfbmV3KTogT25seSB3cmFwIENBTExfRVhQUnMuCgkqIGluaXQuYyAoZXhwYW5kX2RlZmF1bHRfaW5pdCk6IEhhbmRsZSBhIFRSWV9DQVRDSF9FWFBSIGFyb3VuZCAKCXRoZSBjb25zdHJ1Y3RvciBjYWxsLgoKU3VuIE5vdiAgOSAxODowMDoyNiAxOTk3ICBSaWNoYXJkIEtlbm5lciAgPGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1PgoKCSogTWFrZS1sYW5nLmluIChjKysuZGlzdGRpcik6IE1ha2UgaW5jIHN1YmRpcmVjdG9yeS4KCkZyaSBOb3YgIDcgMTE6NTc6MjggMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZGVjbDIuYyAoZmluaXNoX2ZpbGUpOiBQdXQgYmFjayBzb21lIGNvZGUuCgpUaHUgTm92ICA2IDExOjI4OjE0IDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGRlY2wyLmMgKGZpbmlzaF9maWxlKTogUmVtb3ZlIHJlZHVuZGFudCBjb2RlLgoJKiBtZXRob2QuYyAoZW1pdF90aHVuayk6IERvbid0IGxldCB0aGUgYmFja2VuZCBkZWZlciBnZW5lcmljIHRodW5rcy4KCldlZCBOb3YgIDUgMjM6NTI6NTAgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZXhjZXB0LmMgKGNhbGxfZWhfaW5mbyk6IFNwbGl0IG91dC4uLgoJKHB1c2hfZWhfaW5mbyk6IEZyb20gaGVyZS4KCShleHBhbmRfYnVpbHRpbl90aHJvdyk6IFVzZSBpdC4KCShleHBhbmRfc3RhcnRfY2F0Y2hfYmxvY2spOiBNb3ZlIHJlZ2lvbiBzdGFydCBiYWNrLgoKVHVlIE5vdiAgNCAxMzo0NToxMCAxOTk3ICBEb3VnIEV2YW5zICA8ZGV2YW5zQGNhbnVjay5jeWdudXMuY29tPgoKCSogbGV4LmMgKE1VTFRJQllURV9DSEFSUyk6ICN1bmRlZiBpZiBjcm9zcyBjb21waWxpbmcuCgkocmVhbF95eWxleCk6IFJlY29yZCB3aWRlIHN0cmluZ3MgdXNpbmcgdGFyZ2V0IGVuZGlhbm5lc3MsIG5vdCBob3N0LgoKMTk5Ny0xMS0wMyAgQnJlbmRhbiBLZWhvZSAgPGJyZW5kYW5AbGlzYS5jeWdudXMuY29tPgoKCSogcmVwby5jIChyaW5kZXgpOiBBZGQgZGVjbCB1bmNvbmRpdGlvbmFsbHkuCgkoZ2V0X2Jhc2VfZmlsZW5hbWUsIG9wZW5fcmVwb19maWxlKTogRG9uJ3QgY2FzdCByaW5kZXguCgkqIHhyZWYuYyAocmluZGV4KTogQWRkIGRlY2wgdW5jb25kaXRpb25hbGx5LgoJKGluZGV4KTogUmVtb3ZlIHVudXNlZCBkZWNsLgoJKG9wZW5feHJlZl9maWxlKTogRG9uJ3QgY2FzdCByaW5kZXguCgpTdW4gTm92ICAyIDE1OjA0OjEyIDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGNsYXNzLmMgKGJ1aWxkX3ZiYXNlX3BhdGgpOiBQcm9wYWdhdGUgdGhlIHJlc3VsdCB0eXBlIHByb3Blcmx5LgoKMTk5Ny0xMS0wMSAgQnJlbmRhbiBLZWhvZSAgPGJyZW5kYW5AbGlzYS5jeWdudXMuY29tPgoKCSogZXhjZXB0LmMgKGV4cGFuZF9idWlsdGluX3Rocm93KSBbIURXQVJGMl9VTldJTkRfSU5GT106IFJlcGxhY2UKCXJlbWFpbmluZyB1c2Ugb2Ygc2F2ZWRfdGhyb3dfdHlwZSB3aXRoIGEgY2FsbCB0byBnZXRfZWhfdHlwZS4KCjE5OTctMTAtMzEgIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGxpc2EuY3lnbnVzLmNvbT4KCgkqIGxleC5jIChGSUxFX05BTUVfTk9ORElSRUNUT1JZKTogRGVsZXRlIG1hY3JvLgoJKGZpbGVfbmFtZV9ub25kaXJlY3RvcnkpOiBOZXcgZnVuY3Rpb24sIGRvaW5nIHRoZSBzYW1lIGFzIHRoZSBtYWNyby4KCShzZXRfdHlwZWRlY2xfaW50ZXJmYWNlX2luZm8pOiBVc2UgaXQgaW5zdGVhZCBvZiB0aGUgbWFjcm8uCgkoY2hlY2tfbmV3bGluZSk6IExpa2V3aXNlLgoJKGhhbmRsZV9jcF9wcmFnbWEpOiBMaWtld2lzZS4KCgkqIHJlcG8uYyAoZ2V0X2Jhc2VfZmlsZW5hbWUpOiBDYXN0IHJlc3VsdCBvZiByaW5kZXggdG8gY2hhciouCgkob3Blbl9yZXBvX2ZpbGUpOiBMaWtld2lzZS4KCSogeHJlZi5jIChvcGVuX3hyZWZfZmlsZSk6IExpa2V3aXNlLgoJKiBlcnJvci5jIChkdW1wX2NoYXIpOiBNYWtlIGl0cyBhcmcgaW50LCBub3QgY2hhci4KCgkqIGV4Y2VwdC5jIChwdXNoX2VoX2luZm8pOiBQYXNzIHRoZSBudW1iZXIgb2YgZmllbGRzIC0gMSBkb3duLCBub3QKCXRoZSBleGFjdCBudW1iZXIgb2YgZmllbGRzLgoKRnJpIE9jdCAzMSAwMTo0Nzo1NyAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJU3VwcG9ydCBmb3IgbmVzdGVkIGV4Y2VwdGlvbnMuCgkqIHRpbmZvMi5jYyAoX19pc19wb2ludGVyKTogTmV3IGZuLgoJKiBleGNlcHRpb24uY2MgKHN0cnVjdCBjcF9laF9pbmZvKTogRGVmaW5lLgoJKF9fY3BfZXhjZXB0aW9uX2luZm8sIF9fdW5jYXRjaF9leGNlcHRpb24pOiBOZXcgZm5zLgoJKF9fY3BfcHVzaF9leGNlcHRpb24sIF9fY3BfcG9wX2V4Y2VwdGlvbik6IE5ldyBmbnMuCgkqIGV4Y2VwdC5jOiBMb3NlIHNhdmVkX3Rocm93X3t0eXBlLHZhbHVlLGNsZWFudXAsaW5fY2F0Y2h9LgogCUxvc2UgZW1wdHlfZm5kZWNsLgoJKGluaXRfZXhjZXB0aW9uX3Byb2Nlc3NpbmcpOiBMaWtld2lzZS4gIF9fZWhfcGMgaXMgbm93IGV4dGVybmFsLgoJKHB1c2hfZWhfaW5mbyk6IE5ldyBmbi4KCShnZXRfZWhfe2luZm8sdmFsdWUsdHlwZSxjYXVnaHR9KTogTmV3IGZucy4KCShwdXNoX2VoX2NsZWFudXApOiBKdXN0IGNhbGwgX19jcF9wb3BfZXhjZXB0aW9uLgoJKGV4cGFuZF9zdGFydF9jYXRjaF9ibG9jayk6IFVzZSBwdXNoX2VoX2luZm8uICBTdGFydCB0aGUgZWggcmVnaW9uCglzb29uZXIuCgkoZXhwYW5kX2VuZF9laF9zcGVjKTogVXNlIHB1c2hfZWhfaW5mby4KCShleHBhbmRfdGhyb3cpOiBDYWxsIF9fY3BfcHVzaF9leGNlcHRpb24gdG8gc2V0IHVwIHRoZSBleGNlcHRpb24gaW5mby4KCUp1c3QgcGFzcyB0aGUgZGVzdHJ1Y3RvciBvciAwIGFzIHRoZSBjbGVhbnVwLiAgQ2FsbCBfX3VuY2F0Y2hfZXhjZXB0aW9uCgl3aGVuIHdlIHJldGhyb3cuCgkoZXhwYW5kX2J1aWx0aW5fdGhyb3cpOiBEb24ndCByZWZlciB0byBlbXB0eV9mbmRlY2wuCgpUaHUgT2N0IDIzIDAyOjAxOjMwIDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHB0LmMgKGluc3RhbnRpYXRlX2RlY2wpOiBTRVRfREVDTF9JTVBMSUNJVF9JTlNUQU5USUFUSU9OIG9uIG5ldyBkZWNsLgoKMTk5Ny0xMC0yMiAgQnJlbmRhbiBLZWhvZSAgPGJyZW5kYW5AY3lnbnVzLmNvbT4KCgkqIG1ldGhvZC5jIChidWlsZF90ZW1wbGF0ZV9wYXJtX25hbWVzLCBidWlsZF9kZWNsX292ZXJsb2FkX3JlYWwpOgoJQWRkIHN0YXRpYyB0byBkZWZpbml0aW9ucy4KCSogcHQuYyAoYWRkX3RvX3RlbXBsYXRlX2FyZ3MsIG5vdGVfdGVtcGxhdGVfaGVhZGVyLAoJcHJvY2Vzc2luZ19leHBsaWNpdF9zcGVjaWFsaXphdGlvbiwgdHlwZV91bmlmaWNhdGlvbl9yZWFsKTogTGlrZXdpc2UuCgkoe2RldGVybWluZSxjaGVja31fZXhwbGljaXRfc3BlY2lhbGl6YXRpb24pOiBVc2UgYSBzaW5nbGUgc3RyaW5nIGZvcgoJZXJyb3IgbWVzc2FnZXMuCgpNb24gT2N0IDIwIDEyOjA2OjM0IDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGV4Y2VwdC5jIChleHBhbmRfZXhjZXB0aW9uX2Jsb2Nrcyk6IENhbGwgZG9fcGVuZGluZ19zdGFja19hZHVzdC4KCShleHBhbmRfZW5kX2NhdGNoX2Jsb2NrKTogTGlrZXdpc2UuCgkoZXhwYW5kX2VuZF9laF9zcGVjKTogTGlrZXdpc2UuCgpNb24gT2N0IDIwIDExOjQ0OjIwIDE5OTcgIE1hcmsgTWl0Y2hlbGwgIDxtbWl0Y2hlbGxAdXNhLm5ldD4KCgkqIGRlY2wuYyAoZHVwbGljYXRlX2RlY2xzKTogSGFuZGxlIHRlbXBsYXRlIHNwZWNpYWxpemF0aW9ucwoJY29ycmVjdGx5LiAKCSogZXJyb3IuYyAoZHVtcF9mdW5jdGlvbl9uYW1lKTogRml4IHByaW50aW5nIG9mIHNwZWNpYWxpemF0aW9ucyBvZgoJbWVtYmVyIGZ1bmN0aW9ucyB0aGF0IGFyZSBub3QgbWVtYmVyIHRlbXBsYXRlcy4KCSogY3AtdHJlZS5oIChwcm9jZXNzaW5nX3NwZWNpYWxpemF0aW9uKTogTWFrZSBnbG9iYWwuCgkqIHB0LmMgKHByb2Nlc3Npbmdfc3BlY2lhbGl6YXRpb24pOiBMaWtld2lzZS4KCSogbGV4LmMgKGNvbnNfdXBfZGVmYXVsdF9mdW5jdGlvbik6IFNhdmUgYW5kIHJlc3RvcmUKCXByb2Nlc3Npbmdfc3BlY2lhbGl6YXRpb24gdG8gYXZvaWQgY29uZnVzaW9uLgoJCk1vbiBPY3QgMjAgMTA6NTI6MjIgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZGVjbC5jIChpbml0X2RlY2xfcHJvY2Vzc2luZyk6IEdpdmUgbnVsbF9ub2RlIHVua25vd24qIHR5cGUuCgkqIHR5cGVjay5jIChjb21wX3RhcmdldF90eXBlcyk6IEhhbmRsZSBVTktOT1dOX1RZUEUuCgkoY29tbW9uX3R5cGUpOiBMaWtld2lzZS4KCSogZXJyb3IuYyAoYXJnc19hc19zdHJpbmcpOiBSZWNvZ25pemUgbnVsbF9ub2RlLgoKU3VuIE9jdCAxOSAwOToxMzowMSAxOTk3ICBSaWNoYXJkIEtlbm5lciAgPGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1PgoKCSogdHlwZWNrLmMgKHJhdGlvbmFsaXplX2NvbmRpdGlvbmFsX2V4cHIpOiBIYW5kbGUge01JTixNQVh9X0VYUFIuCgkodW5hcnlfY29tcGxleF9sdmFsdWUpOiBDYWxsIGl0IGZvciB7TUlOLE1BWH1fRVhQUi4KCgkqIGRlY2wuYyAoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBDYWxsIHVzaW5nX2VoX2Zvcl9jbGVhbnVwcy4KCgkqIE1ha2UtbGFuZy5pbiAoZysrKTogSW5jbHVkZSBwcmVmaXguby4KClRodSBPY3QgMTYgMTU6MzE6MDkgMTk5NyAgSnVkeSBHb2xkYmVyZyA8anVkeWdvbGRAc2Fud2FmcC5jb20+CgoJKiBwdC5jIChkZXRlcm1pbmVfZXhwbGljaXRfc3BlY2lhbGl6YXRpb24pOiBJbml0aWFsaXplICJkdW1teSIKCXRvIGtlZXAgUHVyaWZ5IHF1aWV0LgoKVGh1IE9jdCAxNiAwMDoxNDo0OCAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBtZXRob2QuYyAoYnVpbGRfb3ZlcmxvYWRfdmFsdWUpOiBIYW5kbGUgVEVNUExBVEVfQ09OU1RfUEFSTXMgaGVyZS4KCShidWlsZF9vdmVybG9hZF9pbnQpOiBOb3QgaGVyZS4KCldlZCBPY3QgMTUgMDA6MzU6MjggMTk5NyAgTWlrZSBTdHVtcCAgPG1yc0B3cnMuY29tPgoKCSogY2xhc3MuYyAoYnVpbGRfdHlwZV9wYXRobmFtZSk6IFJlbW92ZS4KCShwcmVwYXJlX2ZyZXNoX3Z0YWJsZSk6IEZpeCBwcm9ibGVtIHdpdGggY29tcGxleCBNSSB2dGFibGUgbmFtZXMuCgoxOTk3LTEwLTE0ICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBsaXNhLmN5Z251cy5jb20+CgoJKiBwYXJzZS55ICh1bmFyeV9leHByKTogR2l2ZSBhIHBlZHdhcm4gaWYgc29tZW9uZSB0cmllcyB0byB1c2UgdGhlCgkmJmxhYmVsIEdOVSBleHRlbnNpb24uCgpUdWUgT2N0IDE0IDEyOjAxOjAwIDE5OTcgIE1hcmsgTWl0Y2hlbGwgIDxtbWl0Y2hlbGxAdXNhLm5ldD4KCgkqIGRlY2wuYyAocHVzaHRhZyk6IFVuc2V0IERFQ0xfQVNTRU1CTEVSX05BTUUgYmVmb3JlIHNldHRpbmcgaXQsCglzbyBhcyB0byBhdm9pZCBpbmNvcnJlY3QgbWFuZ2xpbmdzLgoJKiBtZXRob2QuYyAoYnVpbGRfZGVjbF9vdmVybG9hZF9yZWFsKTogRG9uJ3QgbWFuZ2xlIHJldHVybiB0eXBlcwoJZm9yIGNvbnN0cnVjdG9ycy4KCQpUdWUgT2N0IDE0IDExOjQ2OjE0IDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGNwLXRyZWUuaCAoc2NyYXRjaGFsbG9jLCBidWlsZF9zY3JhdGNoX2xpc3QsIG1ha2Vfc2NyYXRjaF92ZWMsCglzY3JhdGNoX3RyZWVfY29ucyk6IERlZmluZSBhcyBtYWNyb3MgZm9yIG5vdy4KCSogY2FsbC5jLCBjbGFzcy5jLCBjdnQuYywgZGVjbC5jLCBkZWNsMi5jLCBleGNlcHQuYywgZXhwci5jLCBpbml0LmMsIAoJbGV4LmMsIG1ldGhvZC5jLCBwYXJzZS55LCBwdC5jLCBydHRpLmMsIHNlYXJjaC5jLCB0cmVlLmMsIHR5cGVjay5jLAoJdHlwZWNrMi5jOiBVc2UgdGhlbSBhbmQgdGhlIGV4cHJlc3Npb25fb2JzdGFjayB2YXJpYW50cy4KCk1vbiBPY3QgMTMgMTc6NDE6MjYgMTk5NyAgQmVuamFtaW4gS29zbmlrICA8YmtvekByaGluby5jeWdudXMuY29tPgoKCSogZGVjbC5jIChzdG9yZV9yZXR1cm5faW5pdCk6IEFsbG93IGNsYXNzZXMgd2l0aCBleHBsaWNpdCBjdG9ycyB0bwogCWJlIHVzZWQgd2l0aCB0aGUgbmFtZWQgcmV0dXJuIHZhbHVlcyBleHRlbnNpb24uCgpGcmkgT2N0IDEwIDEyOjIxOjExIDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHB0LmMgKGluc3RhbnRpYXRlX2RlY2wpOiBGaXggcHJldmlvdXMgY2hhbmdlLgoKVGh1IE9jdCAgOSAxMjowODoyMSAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBwdC5jICh0c3Vic3QpOiBGaXggdGhpbmtvLgoJKGluc3RhbnRpYXRlX2RlY2wpOiBSZWFsbHkgdXNlIHRoZSBvcmlnaW5hbCB0ZW1wbGF0ZS4KCgkqIGNhbGwuYyAoYnVpbGRfbmV3X21ldGhvZF9jYWxsKTogVXNlIHNpbXBsZSBjb25zdHJ1Y3Rvcl9uYW1lIGZvcgoJZXJyb3IgbWVzc2FnZXMuCgpXZWQgT2N0ICA4IDIyOjQ0OjQyIDE5OTcgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIG1ldGhvZC5jIChidWlsZF91bmRlcnNjb3JlX2ludCk6IERvbid0IHVzZSBBTlNJIHNwZWNpZmljCglmZWF0dXJlcy4KCldlZCBPY3QgIDggMDA6MTg6MjIgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZGVjbDIuYyAoZmluaXNoX3ByZXZ0YWJsZV92YXJkZWNsKTogQ2hlY2sgREVDTF9SRUFMTFlfRVhURVJOCglmb3Igb3VyIGtleSBtZXRob2Q7IGl0IG1pZ2h0IGhhdmUgYmVlbiBpbmxpbmVkIGJ5IC1PMy4KClR1ZSBPY3QgIDcgMjM6MDA6MTIgMTk5NyAgTWFyayBNaXRjaGVsbCAgPG1taXRjaGVsbEB1c2EubmV0PgoKCSogZGVjbC5jIChtYWtlX3R5cGVuYW1lX3R5cGUpOiBEbyBub3QgdHJ5IHRvIGNhbGwgbG9va3VwX2ZpZWxkIGZvcgoJbm9uLWFnZ3JlZ2F0ZSB0eXBlcy4KClR1ZSBPY3QgIDcgMjI6NTI6MTAgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogdHlwZWNrLmMgKGJ1aWxkX3JlaW50ZXJwcmV0X2Nhc3QpOiBUd2Vhay4KClR1ZSBPY3QgIDcgMjI6NDU6MzEgMTk5NyAgQWxleGFuZHJlIE9saXZhICA8b2xpdmFAZGNjLnVuaWNhbXAuYnI+CgoJKiB0eXBlY2suYyAoYnVpbGRfcmVpbnRlcnByZXRfY2FzdCk6IGNvbnZlcnRpbmcgYSB2b2lkIHBvaW50ZXIKCXRvIGZ1bmN0aW9uIHBvaW50ZXIgd2l0aCBhIHJlaW50ZXJwcmV0X2Nhc3QgcHJvZHVjZXMgYSB3YXJuaW5nCglpZiAtcGVkYW50aWMgaXMgaXNzdWVkCgpUdWUgT2N0ICA3IDIyOjQzOjQzIDE5OTcgIEJydW5vIEhhaWJsZSAgPGJydW5vQGxpbnVpeC5tYXRoZW1hdGlrLnVuaS1rYXJsc3J1aGUuZGU+CgoJKiB0eXBlY2suYyAoY19leHBhbmRfcmV0dXJuKTogRG9uJ3Qgd2FybiBhYm91dCByZXR1cm5pbmcgYQoJcmVmZXJlbmNlLXR5cGUgdmFyaWFibGUgYXMgYSByZWZlcmVuY2UuCgpUdWUgT2N0ICA3IDIxOjExOjIyIDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIG1ldGhvZC5jIChidWlsZF9zdGF0aWNfbmFtZSk6IEZpeCB0eXBvLgoKMTk5Ny0xMC0wNyAgQnJlbmRhbiBLZWhvZSAgPGJyZW5kYW5AbGlzYS5jeWdudXMuY29tPgoKCSogZGVjbC5jIChkdXBsaWNhdGVfZGVjbHMpOiBNYWtlIHN1cmUgREVDTF9MQU5HX1NQRUNJRklDIGlzIHNldCBvbgoJT0xEREVDTCBiZWZvcmUgd2UgdHJ5IHRvIGRvIERFQ0xfVVNFX1RFTVBMQVRFLgoKVHVlIE9jdCAgNyAwMDo0ODozNiAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBkZWNsLmMgKGR1cGxpY2F0ZV9kZWNscyk6IERvbid0IHdhcm4gYWJvdXQgdGVtcGxhdGUgaW5zdGFuY2VzLgoKCSogdHlwZWNrLmMgKG1hcmtfYWRkcmVzc2FibGUpOiBMb3NlIGFuY2llbnQgY29kZSB0aGF0IHVuc2V0cwoJREVDTF9FWFRFUk5BTC4KCgkqIHB0LmMgKGRvX2RlY2xfaW5zdGFudGlhdGlvbik6IExvc2Ugc3VwcG9ydCBmb3IgaW5zdGFudGlhdGluZwoJbm9uLXRlbXBsYXRlcy4KCgkqIGNhbGwuYyAoYnVpbGRfbmV3X2Z1bmN0aW9uX2NhbGwpOiBGaXggaGFuZGxpbmcgb2YgbnVsbCBleHBsaWNpdAogCXRlbXBsYXRlIGFyZ3MuCgkoYnVpbGRfbmV3X21ldGhvZF9jYWxsKTogTGlrZXdpc2UuCgpNb24gT2N0ICA2IDIzOjQ0OjM0IDE5OTcgIE1hcmsgTWl0Y2hlbGwgIDxtbWl0Y2hlbGxAdXNhLm5ldD4KCgkqIG1ldGhvZC5jIChidWlsZF91bmRlcnNjb3JlX2ludCk6IEZpeCB0eXBvLgoKMTk5Ny0xMC0wNiAgQnJlbmRhbiBLZWhvZSAgPGJyZW5kYW5AbGlzYS5jeWdudXMuY29tPgoKCSogdHJlZS5jIChwcmludF9sYW5nX3N0YXRpc3RpY3MpOiAjaWYgMCBjYWxsIHRvCglwcmludF9pbmxpbmVfb2JzdGFja19zdGF0aXN0aWNzIHVudGlsIGl0cyBkZWZpbml0aW9uIGlzIGNoZWNrZWQgaW4uCgpNb24gT2N0ICA2IDA5OjI3OjI5IDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGRlY2wyLmMgKGZpbmlzaF9maWxlKTogTW92ZSBkdW1wX3RyZWVfc3RhdGlzdGljcyB0byBlbmQuCgoJKiBwdC5jIChpbnN0YW50aWF0ZV9kZWNsKTogTG9vayBmb3IgdGhlIG9yaWdpbmFsIHRlbXBsYXRlLgoJKHRzdWJzdCk6IFNldCBERUNMX0lNUExJQ0lUX0lOU1RBTlRJQVRJT04gb24gcGFydGlhbCBpbnN0YW50aWF0aW9ucwoJb2YgbWVtYmVyIHRlbXBsYXRlcy4KCldlZCBPY3QgIDEgMDg6NDE6MzggMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogTWFrZWZpbGUuaW4gKGcrK0ZBUS4qKTogTmV3IHJ1bGVzLgoJKENPTkZMSUNUUyk6IFVwZGF0ZS4KCSogZysrRkFRLnRleGk6IE1vdmVkIGZyb20gbGliZysrLgoKCSogcGFyc2UueSAoUEZVTkNOQU1FKTogT25seSBzcGVjaWZ5IHRoZSB0eXBlIG9uY2UuCgoxOTk3LTEwLTAxICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBsYXNoZXIuY3lnbnVzLmNvbT4KCgkqIGxleC5jIChyZWFsX3l5bGV4KTogQ2xlYW4gdXAgdGhlIGNvZGUgdG8gZnVsbHkgYmVoYXZlIHRoZSB3YXkKCXRoZSBjLWxleC5jIHBhcnNlciBkb2VzIGZvciBjb21wbGV4IGFuZCByZWFsIG51bWJlcnMuCgpUdWUgU2VwIDMwIDA4OjUxOjM2IDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIG1ldGhvZC5jIChidWlsZF9kZWNsX292ZXJsb2FkX3JlYWwpOiBSZWZvcm1hdC4KClR1ZSBTZXAgMzAgMDA6MTg6MjYgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogbWV0aG9kLmMgKHN5bnRoZXNpemVfbWV0aG9kKTogSWYgYXRfZW9mLCBkZXRlcm1pbmUgb3VyIGxpbmthZ2UuCgoxOTk3LTA5LTI5ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KCgkqIGxleC5jIChyZWFsX3l5bGV4KTogVHJlYXQgYCQnIGp1c3QgbGlrZSBgXycsIGV4Y2VwdCBpc3N1ZSBhCglkaWFnbm9zdGljIGlmICFkb2xsYXJzX2luX2lkZW50IG9yIGlmIHBlZGFudGljLgoKCSogbGFuZy1zcGVjcy5oIChAYysrKTogLWFuc2kgbm8gbG9uZ2VyIGltcGxpZXMgLSQuCgoJKiBkZWNsMi5jIChsYW5nX2RlY29kZV9vcHRpb24pOgoJLXRyYWRpdGlvbmFsIGFuZCAtYW5zaSBub3cgZG8gbm90IG1lc3Mgd2l0aAoJZG9sbGFyc19pbl9pZGVudC4KCk1vbiBTZXAgMjkgMTk6NTc6NTEgMTk5NyAgSC5KLiBMdSAgKGhqbEBnbnUuYWkubWl0LmVkdSkKCgkqIE1ha2VmaWxlLmluIChwYXJzZS5vLCBkZWNsLm8pOiBBbHNvIGRlcGVuZCBvbgoJJChzcmNkaXIpLy4uL2V4Y2VwdC5oICQoc3JjZGlyKS8uLi9vdXRwdXQuaC4KCShkZWNsMi5vKTogQWxzbyBkZXBlbmQgb24gJChzcmNkaXIpLy4uL2V4cHIuaCAuLi9pbnNuLWNvZGVzLmgKCSQoc3JjZGlyKS8uLi9leGNlcHQuaCAkKHNyY2RpcikvLi4vb3V0cHV0LmguCgkodHlwZWNrLm8sIGluaXQubyk6IEFsc28gZGVwZW5kIG9uICQoc3JjZGlyKS8uLi9leHByLmgKCS4uL2luc24tY29kZXMuaC4KCgkqIGNhbGwuYywgY3AtdHJlZS5oLCBkZWNsLmMsIHRyZWUuYzogRmluaXNoIHByb3RvdHlwaW5nLgoKCSogZXhwci5jIChjcGx1c19leHBhbmRfZXhwcik6IE1ha2UgaXQgc3RhdGljLiAKCgkqIGRlY2wyLmMsIGluaXQuYywgdHlwZWNrLmM6IEluY2x1ZGUgImV4cHIuaCIuCgkoZXhwYW5kX2V4cHIpOiBVc2UgcHJvcGVyIHZhbHVlcyB3aGVuIGNhbGxpbmcgdGhlIGZ1bmN0aW9uLgoKTW9uIFNlcCAyOSAxMTowNTo1NCAxOTk3ICBBbGV4YW5kcmUgT2xpdmEgIDxvbGl2YUBkY2MudW5pY2FtcC5icj4KCgkqIGxhbmctb3B0aW9ucy5oOiBuZXcgLVdvbGQtc3R5bGUtY2FzdCBmbGFnLgoJKiBjcC10cmVlLmggKHdhcm5fb2xkX3N0eWxlX2Nhc3QpOiBuZXcgdmFyaWFibGUuCgkqIGRlY2wyLmMgKHdhcm5fb2xkX3N0eWxlX2Nhc3QpOiBkaXR0by4KCShsYW5nX2RlY29kZV9vcHRpb24pOiBzdXBwb3J0IC1Xb2xkLXN0eWxlLWNhc3QuCgkocmVwYXJzZV9hYnNkY2xfYXNfY2FzdHMpOiBwcm9kdWNlIG9sZC1zdHlsZS1jYXN0IHdhcm5pbmcuCgpNb24gU2VwIDI5IDA5OjIwOjUzIDE5OTcgIEJlbmphbWluIEtvc25payAgPGJrb3pAcmhpbm8uY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAoY3BfZmluaXNoX2RlY2wpOiBBbGxvdyBleHBhbmRfYWdncl9pbml0IHRvIHNldAogCVRSRUVfVVNFRCwgcmVzZXQgdmFsdWUgYmFzZWQgb24gYWxyZWFkeV91c2VkLgoKCSogaW5pdC5jIChleHBhbmRfbWVtYmVyX2luaXQpOiBSZXZlcnQgY2hhbmdlLgoJCk1vbiBTZXAgMjkgMDg6NTc6NTMgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY3AtdHJlZS5oLCBkZWNsLmMsIGRlY2wyLmMsIHB0LmM6CiAJTG9zZSBERUNMX0NfU1RBVElDIGFuZCBERUNMX1BVQkxJQy4gIERvbid0IHByZXRlbmQgc3RhdGljcyBhcmUgcHVibGljLgoKCSogZGVjbDIuYyAobGFuZ19kZWNvZGVfb3B0aW9uKTogQWRkIG1pc3NpbmcgOy4KClNhdCBTZXAgMjcgMTY6MjI6NDggMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZnJpZW5kLmMgKGRvX2ZyaWVuZCk6IERpc2FibGUgaW5qZWN0aW9uIGZvciBhbGwgdGVtcGxhdGUtZGVyaXZlZAogCWRlY2xzLgoJKiBkZWNsMi5jIChsYW5nX2RlY29kZV9vcHRpb24pOiBIYW5kbGUgLWZndWlkaW5nLWRlY2xzLgoJKiBwYXJzZS55IChub3R5cGVfdGVtcGxhdGVfZGVjbGFyYXRvcik6IE5ldyBub250ZXJtaW5hbC4KCShkaXJlY3Rfbm90eXBlX2RlY2xhcmF0b3IpOiBVc2UgaXQuCgkoY29tcGxleF9kaXJlY3Rfbm90eXBlX2RlY2xhcmF0b3IpOiBMaWtld2lzZS4KCShvYmplY3RfdGVtcGxhdGVfaWQpOiBBY2NlcHQgYW55IGtpbmQgb2YgaWRlbnRpZmllciBhZnRlciBURU1QTEFURS4KCShub3R5cGVfcXVhbGlmaWVkX2lkKTogRG9uJ3QgYWRkIHRlbXBsYXRlIGRlY2xhcmF0b3JzIGhlcmUuCgpTYXQgU2VwIDI3IDE2OjIxOjU4IDE5OTcgIE1hcmsgTWl0Y2hlbGwgIDxtbWl0Y2hlbGxAdXNhLm5ldD4KCiAgICAgICAgKiBjYWxsLmMgKGFkZF90ZW1wbGF0ZV9jYW5kaWRhdGUpOiBBZGQgZXhwbGljaXRfdGFyZ3MgcGFyYW1ldGVyLgogICAgICAgIChidWlsZF9zY29wZWRfbWV0aG9kX2NhbGwpOiBVc2UgaXQuCiAgICAgICAgKGJ1aWxkX292ZXJsb2FkX2NhbGxfcmVhbCk6IExpa2V3aXNlLgogICAgICAgIChidWlsZF91c2VyX3R5cGVfY29udmVyc2lvbl8xKTogTGlrZXdpc2UuCiAgICAgICAgKGJ1aWxkX25ld19mdW5jdGlvbl9jYWxsKTogTGlrZXdpc2UuCiAgICAgICAgKGJ1aWxkX29iamVjdF9jYWxsKTogTGlrZXdpc2UuCiAgICAgICAgKGJ1aWxkX25ld19vcCk6IExpa2V3aXNlLgogICAgICAgIChidWlsZF9uZXdfbWV0aG9kX2NhbGwpOiBMaWtld2lzZS4KICAgICAgICAoYnVpbGRfbmV3X2Z1bmN0aW9uX2NhbGwpOiBIYW5kbGUgVEVNUExBVEVfSURfRVhQUi4KICAgICAgICAoYnVpbGRfbmV3X21ldGhvZF9jYWxsKTogTGlrZXdpc2UuCgogICAgICAgICogY2xhc3MuYyAoZmluaXNoX3N0cnVjdF9tZXRob2RzKTogQWRkIHNwZWNpYWxpemF0aW9uIHBhc3MgdG8KICAgICAgICBkZXRlcm1pbmUgd2hpY2ggbWV0aG9kcyB3ZXJlIHNwZWNpYWxpemluZyB3aGljaCBvdGhlciBtZXRob2RzLgogICAgICAgIChpbnN0YW50aWF0ZV90eXBlKTogSGFuZGxlIFRFTVBMQVRFX0lEX0VYUFIuCgogICAgICAgICogY3AtdHJlZS5kZWYgKFRFTVBMQVRFX0lEX0VYUFIpOiBOZXcgdHJlZSBjb2RlLgoKICAgICAgICAqIGNwLXRyZWUuaCAobmFtZV9tYW5nbGluZ192ZXJzaW9uKTogTmV3IHZhcmlhYmxlLgoJKGZsYWdfZ3VpZGluZ19kZWNscyk6IExpa2V3aXNlLgogICAgICAgIChidWlsZF90ZW1wbGF0ZV9kZWNsX292ZXJsb2FkKTogTmV3IGZ1bmN0aW9uLgogICAgICAgIChiZWdpbl9zcGVjaWFsaXphdGlvbik6IExpa2V3aXNlLgogICAgICAgIChyZXNldF9zcGVjaWFsaXphdGlvbik6IExpa2V3aXNlLgogICAgICAgIChlbmRfc3BlY2lhbGl6YXRpb24pOiBMaWtld2lzZS4KICAgICAgICAoZGV0ZXJtaW5lX2V4cGxpY2l0X3NwZWNpYWxpemF0aW9uKTogTGlrZXdpc2UuCiAgICAgICAgKGNoZWNrX2V4cGxpY2l0X3NwZWNpYWxpemF0aW9uKTogTGlrZXdpc2UuCiAgICAgICAgKGxvb2t1cF90ZW1wbGF0ZV9mdW5jdGlvbik6IExpa2V3aXNlLgogICAgICAgIChmbl90eXBlX3VuaWZpY2F0aW9uKTogQWRkIGV4cGxpY2l0X3RhcmdzIHBhcmFtZXRlci4KICAgICAgICAodHlwZV91bmlmaWNhdGlvbik6IExpa2V3aXNlLgoKICAgICAgICAqIGRlY2wuYyAoZHVwbGljYXRlX2RlY2xzKTogQWRkIHNtYXJ0cyBmb3IgZXhwbGljaXQKICAgICAgICBzcGVjaWFsaXphdGlvbnMuCiAgICAgICAgKGdyb2tkZWNsYXJhdG9yKTogSGFuZGxlIFRFTVBMQVRFX0lEX0VYUFIsIGFuZCBmdW5jdGlvbgogICAgICAgIHNwZWNpYWxpemF0aW9ucy4KICAgICAgICAoZ3Jva2ZuZGVjbCk6IENhbGwgY2hlY2tfZXhwbGljaXRfc3BlY2lhbGl6YXRpb24uCgogICAgICAgICogZGVjbDIuYyAobGFuZ19kZWNvZGVfb3B0aW9uKTogSGFuZGxlIC1mbmFtZS1tYW5nbGluZy12ZXJzaW9uLgogICAgICAgIChidWlsZF9leHByX2Zyb21fdHJlZSk6IEhhbmRsZSBURU1QTEFURV9JRF9FWFBSLgogICAgICAgIChjaGVja19jbGFzc2ZuKTogSGFuZGxlIHNwZWNpYWxpemF0aW9ucy4KCiAgICAgICAgKiBlcnJvci5jIChkdW1wX2Z1bmN0aW9uX25hbWUpOiBQcmludCBzcGVjaWFsaXphdGlvbiBhcmd1bWVudHMuCgoJKiBmcmllbmQuYyAoZG9fZnJpZW5kKTogRG9uJ3QgY2FsbCBwdXNoZGVjbCBmb3IgdGVtcGxhdGUgCiAgICAgICAgaW5zdGFudGlhdGlvbnMuIAoKICAgICAgICAqIGluaXQuYyAoYnVpbGRfbWVtYmVyX2NhbGwpOiBIYW5kbGUgVEVNUExBVEVfSURfRVhQUi4KCiAgICAgICAgKiBsYW5nLW9wdGlvbnMuaDogQWRkIC1mbmFtZS1tYW5nbGluZy12ZXJzaW9uLCAtZmd1aWRpbmctZGVjbHMsIAoJYW5kIC1mbm8tZ3VpZGluZy1kZWNscy4KCiAgICAgICAgKiBsZXguYyAoaWRlbnRpZmllcl90eXBlKTogUmV0dXJuIFBGVU5DTkFNRSBmb3IgdGVtcGxhdGUgZnVuY3Rpb24KICAgICAgICBuYW1lcy4KCiAgICAgICAgKiBtZXRob2QuYyAoYnVpbGRfZGVjbF9vdmVybG9hZF9yZWFsKTogTmV3IGZ1bmN0aW9uLgogICAgICAgIChidWlsZF90ZW1wbGF0ZV9wYXJtX25hbWVzKTogTmV3IGZ1bmN0aW9uLgogICAgICAgIChidWlsZF9vdmVybG9hZF9pZGVudGlmaWVyKTogVXNlIGl0LgogICAgICAgIChidWlsZF91bmRlcnNjb3JlX2ludCk6IE5ldyBmdW5jdGlvbi4KICAgICAgICAoYnVpbGRfb3ZlcmxvYWRfaW50KTogVXNlIGl0LiAgQWRkIGxldmVscyBmb3IgdGVtcGxhdGUKICAgICAgICBwYXJhbWV0ZXJzLgogICAgICAgIChidWlsZF9vdmVybG9hZF9uYW1lKTogTGlrZXdpc2UuICBBbHNvLCBoYW5kbGUgVFlQRU5BTUVfVFlQRXMuCiAgICAgICAgKGJ1aWxkX292ZXJsb2FkX25lc3RlZF9uYW1lcyk6IEhhbmRsZSB0ZW1wbGF0ZSB0eXBlIHBhcmFtZXRlcnMuCiAgICAgICAgKGJ1aWxkX3RlbXBsYXRlX2RlY2xfb3ZlcmxvYWQpOiBOZXcgZnVuY3Rpb24uCgogICAgICAgICogcGFyc2UueSAoWVlTVFlQRSk6IE5ldyBudHlwZSBtZW1iZXIuCiAgICAgICAgKG5lc3RlZF9uYW1lX3NwZWNpZmllcik6IFVzZSBpdC4KICAgICAgICAobmVzdGVkX25hbWVfc3BlY2lmaWVyXzEpOiBMaWtld2lzZS4KICAgICAgICAoUEZVTkNOQU1FKTogTmV3IHRva2VuLgogICAgICAgICh0ZW1wbGF0ZV9pZCwgb2JqZWN0X3RlbXBsYXRlX2lkKTogTmV3IG5vbi10ZXJtaW5hbHMuCiAgICAgICAgKHRlbXBsYXRlX3Bhcm1fbGlzdCk6IE5vdGUgc3BlY2lhbGl6YXRpb25zLgogICAgICAgICh0ZW1wbGF0ZV9kZWYpOiBMaWtld2lzZS4KICAgICAgICAoc3RydWN0c3ApOiBMaWtld2lzZS4KICAgICAgICAoZm4uZGVmMik6IEhhbmRsZSBtZW1iZXIgdGVtcGxhdGUgc3BlY2lhbGl6YXRpb25zLgogICAgICAgIChjb21wb25lbnRfZGVjbF8xKTogTGlrZXdpc2UuCiAgICAgICAgKGRpcmVjdF9ub3R5cGVfZGVjbGFyYXRvcik6IEhhbmRsZSB0ZW1wbGF0ZS1pZHMuCiAgICAgICAgKGNvbXBvbmVudF9kZWNsXzEpOiBMaWtld2lzZS4KICAgICAgICAoZGlyZWN0X25vdHlwZV9kZWNsYXJhdG9yKTogSGFuZGxlIHRlbXBsYXRlLWlkcy4KICAgICAgICAocHJpbWFyeSk6IEhhbmRsZSBURU1QTEFURV9JRF9FWFBSLCBhbmQgdGVtcGxhdGUtaWRzLgoKICAgICAgICAqIHB0LmMgKHByb2Nlc3Npbmdfc3BlY2lhbGl6YXRpb25zKTogTmV3IHZhcmlhYmxlLgogICAgICAgICh0ZW1wbGF0ZV9oZWFkZXJfY291bnQpOiBMaWtld2lzZS4KICAgICAgICAodHlwZV91bmlmaWNhdGlvbl9yZWFsKTogTmV3IGZ1bmN0aW9uLgogICAgICAgIChwcm9jZXNzaW5nX2V4cGxpY2l0X3NwZWNpYWxpemF0aW9uKTogTGlrZXdpc2UuCiAgICAgICAgKG5vdGVfdGVtcGxhdGVfaGVhZGVyKTogTGlrZXdpc2UuCiAgICAgICAgKGlzX21lbWJlcl90ZW1wbGF0ZSk6IEhhbmRsZSBzcGVjaWFsaXphdGlvbnMuCiAgICAgICAgKGVuZF90ZW1wbGF0ZV9kZWNsKTogQ2FsbCByZXNldF9zcGVjaWFsaXphdGlvbi4KICAgICAgICAocHVzaF90ZW1wbGF0ZV9kZWNsKTogSGFuZGxlIG1lbWJlciB0ZW1wbGF0ZSBzcGVjaWFsaXphdGlvbnMuCiAgICAgICAgKHRzdWJzdCk6IExpa2V3aXNlLgogICAgICAgICh0c3Vic3RfY29weSk6IEhhbmRsZSBURU1QTEFURV9JRF9FWFBSLgogICAgICAgIChpbnN0YW50aWF0ZV90ZW1wbGF0ZSk6IEhhbmRsZSBzcGVjaWFsaXphdGlvbnMuCiAgICAgICAgKGluc3RhbnRpYXRlX2RlY2wpOiBMaWtld2lzZS4KICAgICAgICAoZm5fdHlwZV91bmlmaWNhdGlvbik6IEhhbmRsZSBleHBsaWNpdF90YXJncy4KICAgICAgICAodHlwZV91bmlmaWNhdGlvbik6IExpa2V3aXNlLiAgQWxsb3cgaW5jb21wbGV0ZSB1bmlmaWNhdGlvbgogICAgICAgIHdpdGhvdXQgYW4gZXJyb3IgbWVzc2FnZSwgaWYgYWxsb3dfaW5jb21wbGV0ZS4KICAgICAgICAoZ2V0X2JpbmRpbmdzKTogVXNlIG5ldyBjYWxsaW5nIHNlcXVlbmNlIGZvciBmbl90eXBlX3VuaWZpY2F0aW9uLgoKICAgICAgICAqIHNwZXcuYyAoeXlsZXgpOiBIYW5kbGUgUEZVTkNOQU1FLgoKICAgICAgICAqIHRyZWUuYyAoaXNfb3ZlcmxvYWRlZF9mbik6IEhhbmRsZSBURU1QTEFURV9JRF9FWFBSLgogICAgICAgIChyZWFsbHlfb3ZlcmxvYWRlZF9mbik6IExpa2V3aXNlLgogICAgICAgIChnZXRfZmlyc3RfZm4pOiBIYW5kbGUgZnVuY3Rpb24gdGVtcGxhdGVzLgoKICAgICAgICAqIHR5cGVjay5jIChidWlsZF94X2Z1bmN0aW9uX2NhbGwpOiBVc2UgcmVhbGx5X292ZXJsb2FkZWRfZm4uCiAgICAgICAgSGFuZGxlIFRFTVBMQVRFX0lEX0VYUFIuCiAgICAgICAgKGJ1aWxkX3hfdW5hcnlfb3ApOiBMaWtld2lzZS4KICAgICAgICAoYnVpbGRfdW5hcnlfb3ApOiBMaWtld2lzZS4KICAgICAgICAobWFya19hZGRyZXNzYWJsZSk6IFRlbXBsYXRlcyB3aG9zZSBhZGRyZXNzIGlzIHRha2VuIGFyZSBtYXJrZWQgIAogICAgICAgIGFzIHVzZWQuIAoKMTk5Ny0wOS0yNSAgQW5kcmVhcyBTY2h3YWIgIDxzY2h3YWJAaXNzYW4uaW5mb3JtYXRpay51bmktZG9ydG11bmQuZGU+CgoJKiBkZWNsLmMgKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogRGVjbGFyZSBfX2J1aWx0aW5fY29uc3RhbnRfcCBhcwoJYWNjZXB0aW5nIGFueSBraW5kIG9mIHR5cGUsIG5vdCBvbmx5IGludC4KCkZyaSBTZXAgMjYgMDA6MjI6NTYgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogc2VhcmNoLmMgKGdldF9tYXRjaGluZ192aXJ0dWFsKTogTm90aWNlIHZpcnR1YWwgYmFzZXMgd2hlbiBzb3JyeWluZwoJYWJvdXQgY292YXJpYW50IHJldHVybnMuCgoJKiBwYXJzZS55IChtZW1iZXJfaW5pdCk6IEFsc28gaW1wbHkgdHlwZW5hbWUgaGVyZS4gIFJlbW92ZSBhbmNpZW50CglleHRlbnNpb24gZm9yIGluaXRpYWxpemluZyBiYXNlIG1lbWJlcnMuCgpUaHUgU2VwIDI1IDExOjExOjEzIDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCglIYW5kbGUgbXVsdGktbGV2ZWwgdHlwZW5hbWVzIGFuZCBpbXBsaWNpdCB0eXBlbmFtZSBpbiBiYXNlIGxpc3QuCgkqIHBhcnNlLnkgKHR5cGVuYW1lX3N1YnssWzAtMl19KTogTmV3IHJ1bGVzLgoJKHN0cnVjdHNwLCBydWxlIFRZUEVOQU1FX0tFWVdPUkQpOiBVc2UgdHlwZW5hbWVfc3ViLgoJKG5vbm5lc3RlZF90eXBlKTogTmV3IHJ1bGUuCgkoY29tcGxldGVfdHlwZV9uYW1lKTogVXNlIGl0LgoJKGJhc2VfY2xhc3MuMSk6IFVzZSB0eXBlbmFtZV9zdWIgYW5kIG5vbm5lc3RlZF90eXBlLgoJKG5lc3RlZF9uYW1lX3NwZWNpZmllcik6IERvbid0IGVsaWRlIHN0ZDo6IGhlcmUuCgkqIGRlY2wuYyAobWFrZV90eXBlbmFtZV90eXBlKTogSGFuZGxlIGdldHRpbmcgYSB0eXBlIGZvciBOQU1FLgoJKGxvb2t1cF9uYW1lX3JlYWwpOiBUdXJuIHN0ZDo6IGludG8gOjogaGVyZS4KCglSdmFsdWUgY29udmVyc2lvbnMgd2VyZSByZW1vdmVkIGluIExvbmRvbi4KCSogY2FsbC5jIChpc19zdWJzZXEpOiBEb24ndCBjb25zaWRlciBsdmFsdWUgdHJhbnNmb3JtYXRpb25zLgoJKGJ1aWxkX2NvbnYpOiBMVkFMVUVfQ09OViBhbmQgUlZBTFVFX0NPTlYgZ2V0IElERU5USVRZX1JBTksuCgkoam91c3QpOiBSZWVuYWJsZSA/OiBrbHVkZ2UuCgoxOTk3LTA5LTIyICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBsaXNhLmN5Z251cy5jb20+CgoJKiBkZWNsLmMgKHN0YXJ0X2Z1bmN0aW9uKTogVXAgd2FybmluZyBvZiBubyByZXR1cm4gdHlwZSB0byBiZSBhCglwZWR3YXJuLgoKTW9uIFNlcCAyMiAxNDoxNTozNCAxOTk3ICBCZW5qYW1pbiBLb3NuaWsgIDxia296QHJoaW5vLmN5Z251cy5jb20+CgoJKiBpbml0LmMgKGV4cGFuZF9tZW1iZXJfaW5pdCk6IERvbid0IHNldCBUUkVFX1VTRUQuCgkqIGRlY2wuYyAoY3BfZmluaXNoX2RlY2wpOiBNYXJrIGRlY2xzIHVzZWQgaWYgdHlwZSBoYXMgVFJFRV9VU0VECglzZXQsZG9uJ3QgY2xlYXIgVFJFRV9VU0VEIHdob2xlc2FsZS4KClNhdCBTZXAgMjAgMTU6MzE6MDAgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY2FsbC5jIChidWlsZF9vdmVyX2NhbGwpOiBEbyByZXF1aXJlX2NvbXBsZXRlX3R5cGUgYmVmb3JlCglidWlsZF9jcGx1c19uZXcuCgpUaHUgU2VwIDE4IDE2OjQ3OjUyIDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHNlYXJjaC5jIChsb29rdXBfZmllbGQpOiBDYWxsIGNvbXBsZXRlX3R5cGUgaW4gYWxsIGNhc2VzLgoKCSogZGVjbC5jIChmaW5pc2hfZnVuY3Rpb24pOiBKdXN0IHdhcm4gYWJvdXQgZmxvd2luZyBvZmYgdGhlIGVuZC4KCldlZCBTZXAgMTcgMTA6MzE6MjUgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZGVjbC5jIChncm9rcGFybXMpOiBEb24ndCBiYXNoIGEgcGVybWFuZW50IGxpc3Qgbm9kZSBpZiB3ZSdyZQoJaW4gYSBmdW5jdGlvbi4KCjE5OTctMDktMTcgIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGxpc2EuY3lnbnVzLmNvbT4KCgkqIE1ha2VmaWxlLmluIChDT05GTElDVFMpOiBGaXggcy9yIGNvbmZsaWN0IGNvdW50IHRvIDE4LgoKVHVlIFNlcCAxNiAxNDowNjo1NiAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjYWxsLmMgKGJ1aWxkX25ld19vcCk6IEdpdmUgYmV0dGVyIGVycm9yIGZvciBzeW50YWN0aWNhbGx5CiAJY29ycmVjdCwgYnV0IHNlbWFudGljYWxseSBpbnZhbGlkLCB1c2Ugb2YgdW5kZWNsYXJlZCB0ZW1wbGF0ZS4KCgkqIGNhbGwuYyAoY29tcGFyZV9xdWFsKTogSGFuZGxlIHBtZnMuCgoJKiBkZWNsLmMgKHN0b3JlX3Bhcm1fZGVjbHMpOiBsYXN0X3Bhcm1fY2xlYW51cF9pbnNuIGlzIHRoZSBpbnNuCiAJYWZ0ZXIgdGhlIGV4Y2VwdGlvbiBzcGVjLgoKTW9uIFNlcCAxNSAxMTo1MjoxMyAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjYWxsLmMgKG51bGxfcHRyX2NzdF9wKTogSW50ZWdlciB0eXBlLCBub3QgaW50ZWdyYWwgdHlwZS4KCgkqIGNhbGwuYyAoam91c3QpOiBEaXNhYmxlIHdhcm5pbmdzIHVudGlsIHRoZXkgY2FuIGJlIG1vdmVkIHRvIHRoZQoJcmlnaHQgcGxhY2UuCgpGcmkgU2VwIDEyIDE2OjExOjEzIDE5OTcgIFBlciBCb3RobmVyICA8Ym90aG5lckBjeWdudXMuY29tPgoKCSogTWFrZWZpbGUuaW4sIGNvbmZpZy1sYW5nLmluOiAgQ29udmVydCB0byBhdXRvY29uZi4KClRodSBTZXAgMTEgMTc6MTQ6NTUgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZGVjbC5jIChsb29rdXBfbmFtZV9yZWFsKTogQWRkIGltcGxpY2l0ICd0eXBlbmFtZScgdG8gdHlwZXMgZnJvbQoJYmFzZSBjbGFzc2VzLgoKCSogcHQuYyAobW9zdF9zcGVjaWFsaXplZF9jbGFzcyk6IEZpeCB0eXBvLgoJKHRzdWJzdCk6IE1vdmUgY29uc3RhbnQgZm9sZGluZyB0byBUUkVFX1ZFQyBjYXNlLgoKVGh1IFNlcCAxMSAxMDowODo0NSAxOTk3ICBNYXJrIE1pdGNoZWxsICA8bW1pdGNoZWxsQHVzYS5uZXQ+CgoJKiBwdC5jIChkb19wb3BsZXZlbCk6IERvbid0IHdhcm4gYWJvdXQgdW51c2VkIGxvY2FsIHZhcmlhYmxlcwoJd2hpbGUgcHJvY2Vzc2luZ190ZW1wbGF0ZV9kZWNsIHNpbmNlIHdlIGRvbid0IGFsd2F5cyBrbm93IHdoZXRoZXIKCW9yIG5vdCB0aGV5IHdpbGwgbmVlZCBjb25zdHJ1Y3RpbmcvZGVzdHJ1Y3RpbmcuCgoJKiBwdC5jICh1c2VzX3RlbXBsYXRlX3Bhcm1zKTogQ2hlY2sgdGhlIHZhbHVlcyBvZiBhbiBlbnVtZXJhdGlvbgoJdHlwZSB0byBtYWtlIHN1cmUgdGhleSBkb24ndCBkZXBlbmQgb24gdGVtcGxhdGUgcGFybXMuCgoJKiBkZWNsLmMgKG1ha2VfdHlwZW5hbWVfdHlwZSk6IERvbid0IGxvb2t1cCB0aGUgZmllbGQgaWYgdGhlCgljb250ZXh0IHVzZXMgdGVtcGxhdGUgcGFybXMsIGV2ZW4gaWYgd2UncmUgbm90Cglwcm9jZXNzaW5nX3RlbXBsYXRlX2RlY2wgYXQgdGhlIG1vbWVudC4KCgkqIHB0LmMgKGNvZXJjZV90ZW1wbGF0ZV9wYXJtcyk6IEF2b2lkIGxvb2tpbmcgYXQgdGhlCglUWVBFX0xBTkdfREVDTCBwb3J0aW9uIG9mIGEgdHlwZW5hbWUgdHlwZSwgc2luY2UgdGhlcmUgd29uJ3QgYmUKCW9uZS4gCgkodHN1YnN0KTogRG8gY29uc3RhbnQgZm9sZGluZyBhcyBuZWNlc3NhcnkgdG8gbWFrZSBzdXJlIHRoYXQKCWFyZ3VtZW50cyBwYXNzZWQgdG8gbG9va3VwX3RlbXBsYXRlX2NsYXNzIHJlYWxseSBhcmUgY29uc3RhbnRzLiAKCldlZCBTZXAgMTAgMTE6MjE6NTUgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZXhjZXB0LmMgKGV4cGFuZF9idWlsdGluX3Rocm93KTogI2lmbmRlZiBEV0FSRjJfVU5XSU5EX0lORk8uCgkqIGRlY2wyLmMgKGZpbmlzaF9maWxlKTogT25seSByZWdpc3RlciBleGNlcHRpb24gdGFibGVzIGlmIHdlCgluZWVkIHRvLgoKCSogZGVjbC5jIChpbml0X2RlY2xfcHJvY2Vzc2luZyk6IEFkZCBfX2J1aWx0aW5fW2ZzXXAuCgpUdWUgU2VwICA5IDE5OjQ5OjM4IDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHB0LmMgKHVuaWZ5KTogSnVzdCByZXR1cm4gMCBmb3IgYSBUWVBFTkFNRV9UWVBFLgoKVHVlIFNlcCAgOSAxNzo1NzoyNSAxOTk3ICBNYXJrIE1pdGNoZWxsICA8bW1pdGNoZWxsQHVzYS5uZXQ+CgoJKiBlcnJvci5jIChkdW1wX2RlY2wpOiBBdm9pZCBjcmFzaGluZyB3aGVuIHByZXNlbnRlZCB3aXRoIGEKIAl1bmluaXRpYWxpemVkIGNvbnN0YW50LCBhcyBjYW4gb2NjdXIgd2l0aCBhIHRlbXBsYXRlIHBhcmFtZXRlci4KCShkdW1wX2V4cHIpOiBNYWtlIHN1cmUgdGhhdCB0aGVyZSBhcmUgZW5vdWdoIGxldmVscyBvZgogCWN1cnJlbnRfdGVtcGxhdGVfcGFybXMgYmVmb3JlIHdlIHN0YXJ0IGRpdmluZyB0aHJvdWdoIHRoZW0uCgoxOTk3LTA5LTA5ICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBsaXNhLmN5Z251cy5jb20+CgoJKiB0eXBlY2suYyAoYnVpbGRfaW5kaXJlY3RfcmVmKTogSGVlZCBGTEFHX1ZPTEFUSUxFIHNpbWlsYXIgdG8KCWMtdHlwZWNrLmMuCgpUdWUgU2VwICA5IDA5OjM2OjM5IDE5OTcgIEJlbmphbWluIEtvc25payAgPGJrb3pAcmhpbm8uY3lnbnVzLmNvbT4KCgkqIGV4Y2VwdC5jIChleHBhbmRfdGhyb3cpOiBDYWxsIGJ1aWxkX2RlbGV0ZSBmb3IgYWxsIAoJZXhjZXB0aW9uIHR5cGVzLCBub3QganVzdCBvYmplY3RzIHdpdGggZGVzdHJ1Y3RvcnMuCgpNb24gU2VwICA4IDAyOjMzOjIwIDE5OTcgIEpvZHkgR29sZGJlcmcgIDxqb2R5Z0BpZHQubmV0PgoKCSogZGVjbC5jIChjdXJyZW50X2xvY2FsX2VudW0pOiBSZW1vdmUgc3RhdGljLgoJKiBwdC5jICh0c3Vic3RfZW51bSk6IFNhdmUgYW5kIHJlc3RvcmUgdmFsdWUgb2YgY3VycmVudF9sb2NhbF9lbnVtCglpbiBjYXNlIHRlbXBsYXRlIGlzIGV4cGFuZGVkIGluIGVudW0gZGVjbC4KCShpbnN0YW50aWF0ZV9jbGFzc190ZW1wbGF0ZSkgOiBVc2UgbmV3IHRzdWJzdF9lbnVtIHNpZ25hdHVyZS4KCSh0c3Vic3RfZXhwcik6IExpa2V3aXNlLgoKTW9uIFNlcCAgOCAwMToyMTo0MyAxOTk3ICBNYXJrIE1pdGNoZWxsICA8bW1pdGNoZWxsQHVzYS5uZXQ+CgoJKiBwdC5jIChiZWdpbl9tZW1iZXJfdGVtcGxhdGVfcHJvY2Vzc2luZyk6IFRha2UgYSBmdW5jdGlvbiBhcwoJYXJndW1lbnQsIG5vdCBhIHNldCBvZiB0ZW1wbGF0ZSBhcmd1bWVudHMuICBVc2UgdGhlIHRlbXBsYXRlCglwYXJhbWV0ZXJzLCByYXRoZXIgdGhhbiB0aGUgYXJndW1lbnRzLiAgSGFuZGxlIG5vbi10eXBlIHBhcmFtZXRlcnMKCWNvcnJlY3RseS4gIFB1c2ggYSBiaW5kaW5nIGxldmVsIGZvciB0aGUgcGFyYW1ldGVycyBzbyB0aGF0IG11bHRpcGxlCgltZW1iZXIgdGVtcGxhdGVzIHVzaW5nIHRoZSBzYW1lIHBhcmFtZXRlciBuYW1lcyBjYW4gYmUgZGVjbGFyZWQuCgkoZW5kX21lbWJlcl90ZW1wbGF0ZV9wcm9jZXNzaW5nKTogUG9wIHRoZSBiaW5kaW5nIGxldmVsLgoJKHB1c2hfdGVtcGxhdGVfZGVjbCk6IE1hcmsgbWVtYmVyIHRlbXBsYXRlcyBhcyBzdGF0aWMgd2hlbgoJYXBwcm9wcmlhdGUuIAoKCSogbGV4LmMgKGRvX3BlbmRpbmdfaW5saW5lcyk6IFBhc3MgdGhlIGZ1bmN0aW9uLCBub3QgaXRzIHRlbXBsYXRlCglhcmd1bWVudHMsIHRvIGJlZ2luX21lbWJlcl90ZW1wbGF0ZV9wcm9jZXNzaW5nLgoJKHByb2Nlc3NfbmV4dF9pbmxpbmUpOiBMaWtld2lzZS4KCShkb19wZW5kaW5nX2RlZmFyZ3MpOiBMaWtld2lzZS4KCgkqIGVycm9yLmMgKGR1bXBfZXhwcik6IE9idGFpbiB0aGUgY29ycmVjdCBkZWNsYXJhdGlvbiBmb3IgYQoJVEVNUExBVEVfQ09OU1RfUEFSTS4gCgoJKiBjYWxsLmMgKGFkZF90ZW1wbGF0ZV9jb252X2NhbmRpZGF0ZSk6IE5ldyBmdW5jdGlvbi4KCShidWlsZF9vYmplY3RfY2FsbCk6IEhhbmRsZSBtZW1iZXIgdGVtcGxhdGVzLCBhcyBkb25lIGluIHRoZSBvdGhlcgoJYnVpbGRfIGZ1bmN0aW9ucy4KCQpTYXQgU2VwICA2IDEwOjIwOjI3IDE5OTcgIE1hcmsgTWl0Y2hlbGwgIDxtbWl0Y2hlbGxAdXNhLm5ldD4KCgkqIGRlY2wuYyAocmVwbGFjZV9kZWZhZyk6IFVuZG8gcHJldmlvdXMgY2hhbmdlLgoJKiBsZXguYyAoZG9fcGVuZGluZ19kZWZhcmdzKTogRGVhbCB3aXRoIG1lbWJlciB0ZW1wbGF0ZXMuCgkKCSogcHQuYyAoaXNfbWVtYmVyX3RlbXBsYXRlKTogQXZvaWQgY3Jhc2hpbmcgd2hlbiBwYXNzZWQgYQoJbm9uLWZ1bmN0aW9uIGFyZ3VtZW50LgoKRnJpIFNlcCAgNSAxNzoyNzozOCAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjbGFzcy5jIChncm93X21ldGhvZCk6IFJlbW92ZSBjaGVjayBmb3IgcmVkZWNsYXJhdGlvbi4KCkZyaSBTZXAgIDUgMDE6Mzc6MTcgMTk5NyAgTWFyayBNaXRjaGVsbCAgPG1taXRjaGVsbEB1c2EubmV0PgoKCSogY3AtdHJlZS5oIChJTk5FUk1PU1RfVEVNUExBVEVfUEFSTVMpOiBOZXcgbWFjcm8uCgkoREVDTF9JTk5FUk1PU1RfVEVNUExBVEVfUEFSTVMpOiBMaWtld2lzZS4KCShQUklNQVJZX1RFTVBMQVRFX1ApOiBVc2UgaXQuCgkqIGNhbGwuYyAoYnVpbGRfb3ZlcmxvYWRfY2FsbF9yZWFsKTogVXNlIGl0LgoJKiBjbGFzcy5jIChpbnN0YW50aWF0ZV90eXBlKTogTGlrZXdpc2UuCgkqIGRlY2wuYyAoZGVjbHNfbWF0Y2gpOiBMaWtld2lzZS4KCSogbWV0aG9kLmMgKGJ1aWxkX292ZXJsb2FkX2lkZW50aWZpZXIpOiBMaWtld2lzZS4KCSogcHQuYyAocHVzaF90ZW1wbGF0ZV9kZWNsKTogTGlrZXdpc2UuCgkoY2xhc3N0eXBlX21hbmdsZWRfbmFtZSk6IExpa2V3aXNlLgoJKGxvb2t1cF90ZW1wbGF0ZV9jbGFzcyk6IExpa2V3aXNlLgoJCgkqIGNwLXRyZWUuaCAoREVDTF9OVFBBUk1TKTogQ2hhbmdlIG5hbWUgZnJvbSBERUNMX05UX1BBUk1TIHRvCglERUNMX05UUEFSTVMgdG8gY29uZm9ybSB0byB1c2FnZSBlbHNld2hlcmUuCgkqIGNhbGwuYyAoYWRkX3RlbXBsYXRlX2NhbmRpZGF0ZSk6IExpa2V3aXNlLgoJKiBjbGFzcy5jIChpbnN0YW50aWF0ZV90eXBlKTogTGlrZXdpc2UuCgkqIHB0LmMgKGluc3RhbnRpYXRlX3RlbXBsYXRlKTogTGlrZXdpc2UuCgkoZ2V0X2JpbmRpbmdzKTogTGlrZXdpc2UuCgkKCSogY2xhc3MuYyAoZ3Jvd19tZXRob2QpOiBVc2UgREVDTF9GVU5DVElPTl9URU1QTEFURV9QIGluc3RlYWQgb2YKCWlzX21lbWJlcl90ZW1wbGF0ZS4KCgkqIHB0LmMgKHVuaWZ5KTogVW5kbyBjaGFuZ2VzIHRvIGFsbG93IG11bHRpcGxlIGxldmVscyBvZiB0ZW1wbGF0ZQoJcGFyYW1ldGVycy4gCgkodHlwZV91bmlmaWNhdGlvbik6IExpa2V3aXNlLgoJKGZuX3R5cGVfdW5pZmljYXRpb24pOiBMaWtld2lzZS4KCShnZXRfY2xhc3NfYmluZGluZ3MpOiBMaWtld2lzZS4KCSogY3AtdHJlZS5oIChMaWtld2lzZSkuCgkKCSogZGVjbC5jIChyZXBsYWNlX2RlZmFyZyk6IENoZWNrIHRoYXQgdGhlIHR5cGUgb2YgdGhlIGRlZmF1bHQKCXBhcmFtZXRlciBkb2VzIG5vdCBpbnZsb3ZlIGEgdGVtcGxhdGUgdHlwZSBiZWZvcmUgY29tcGxhaW5pbmcKCWFib3V0IHRoZSBpbml0aWFsaXphdGlvbi4KCgkqIGVycm9yLmMgKGR1bXBfZXhwcik6IERlYWwgd2l0aCB0ZW1wbGF0ZSBjb25zdGFudCBwYXJhbWV0ZXJzIGluCgltZW1iZXIgdGVtcGxhdGVzIGNvcnJlY3RseS4KCgkqIHB0LmMgKGlzX21lbWJlcl90ZW1wbGF0ZSk6IERlYWwgd2l0aCBjbGFzcyBzcGVjaWFsaXphdGlvbnMKCWNvcnJlY3RseS4gCgkodHN1YnN0KTogSGFuZGxlICJwYXJ0aWFsIGluc3RhbnRpYXRpb24iIG9mIG1lbWJlciB0ZW1wbGF0ZXMKCWNvcnJlY3RseS4gCgpXZWQgU2VwICAzIDEyOjMwOjI0IDE5OTcgIE1hcmsgTWl0Y2hlbGwgIDxtbWl0Y2hlbGxAdXNhLm5ldD4KCgkqIHB0LmMgKHR5cGVfdW5pZmljYXRpb24pOiBDaGFuZ2UgY2FsbGluZyBzcXVlbmNlIHRvIGFsbG93IGZvcgoJbXVsdGlwbGUgbGV2ZWxzIG9mIHRlbXBsYXRlIHBhcmFtZXRlcnMuCgkodHN1YnN0X2V4cHIpOiBMaWtld2lzZS4KCSh0c3Vic3QpOiBMaWtld2lzZS4KCSh0c3Vic3RfY29weSk6IExpa2V3aXNlLgoJKGluc3RhbnRpYXRlX3RlbXBsYXRlKTogTGlrZXdpc2UuCgkodW5pZnkpOiBMaWtld2lzZS4KCSogY2FsbC5jIChidWlsZF9vdmVybG9hZF9jYWxsX3JlYWwpOiBVc2UgaXQuCgkoYWRkX2J1aWx0aW5fY2FuZGlkYXRlKTogVXNlIGl0LgoJKGJ1aWxkX25ld19tZXRob2RfY2FsbCk6IFVzZSBpdC4KCSogY2xhc3MuYyAoaW5zdGFudGlhdGVfdHlwZSk6IFVzZSBpdC4KCSogZGVjbC5jIChncm9rZGVjbGFyYXRvcik6IFVzZSBpdC4KCSogZGVjbDIuYyAoZmluaXNoX2ZpbGUpOiBVc2UgaXQuCgkqIG1ldGhvZC5jIChidWlsZF9vdmVybG9hZF9pZGVudGlmaWVyKTogVXNlIGl0LgoJCgkqIGNhbGwuYyAoYWRkX3RlbXBsYXRlX2NhbmRpZGF0ZSk6ICBBZGQgYWRkaXRpb25hbCBwYXJhbWV0ZXIgZm9yCgl0aGUgZnVuY3Rpb24gcmV0dXJuIHR5cGUuICBDYWxsIGZuX3R5cGVfdW5pZmljYXRpb24gaXN0ZWFkIG9mCgl0eXBlX3VuaWZpY2F0aW9uLgoJKGJ1aWxkX3VzZXJfdHlwZV9jb252ZXJzaW9uXzEpOiBIYW5kbGUgbWVtYmVyIHRlbXBsYXRlcy4KCShidWlsZF9uZXdfZnVuY3Rpb25fY2FsbCk6IExpa2V3aXNlLgoJKGJ1aWxkX25ld19vcCk6IExpa2V3aXNlLgoJKGJ1aWxkX25ld19tZXRob2RfY2FsbCk6IExpa2V3aXNlLgoJCgkqIGNsYXNzLmMgKGdyb3dfbWV0aG9kKTogRG9uJ3QgZ2l2ZSBhbiBlcnJvciBtZXNzYWdlIGluZGljYXRpbmcKIAl0aGF0IHR3byBtZW1iZXIgdGVtcGxhdGVzIHdpdGggdGhlIHNhbWUgbmFtZSBhcmUgYW1iaWd1b3VzLgoJKGZpbmlzaF9zdHJ1Y3QpOiBUcmVhdCBtZW1iZXIgdGVtcGxhdGUgZnVuY3Rpb25zIGp1c3QgbGlrZSBtZW1iZXIKIAlmdW5jdGlvbnMuCgkKCSogY3AtdHJlZS5oIChjaGVja19tZW1iZXJfdGVtcGxhdGUpOiBBZGQgZGVjbGFyYXRpb24uCgkoYmVnaW5fbWVtYmVyX3RlbXBsYXRlX3Byb2Nlc3NpbmcpOiBMaWtld2lzZS4KCShlbmRfbWVtYmVyX3RlbXBsYXRlX3Byb2Nlc3NpbmcpOiBMaWtld2lzZS4KCShmbl90eXBlX3VuaWZpY2F0aW9uKTogTGlrZXdpc2UuCgkoaXNfbWVtYmVyX3RlbXBsYXRlKTogTGlrZXdpc2UuCgkodHN1YnN0KTogQ2hhbmdlIHByb3RvdHlwZS4KCSh0c3Vic3RfZXhwcik6IExpa2V3aXNlLgoJKHRzdWJzdF9jb3B5KTogTGlrZXdpc2UuCgkoaW5zdGFudGlhdGVfdGVtcGxhdGUpOiBMaWtld2lzZS4KCShnZXRfYmluZGluZ3MpOiBMaWtld2lzZS4KCgkqIGRlY2wuYyAoZGVjbHNfbWF0Y2gpOiBIYW5kbGUgbXVsdGlwbGUgbGV2ZWxzIG9mIHRlbXBsYXRlCglwYXJhbWV0ZXJzLiAKCShwdXNoZGVjbCk6IEhhbmRsZSB0ZW1wbGF0ZSB0eXBlIHBhcmFtcyBqdXN0IGxpa2Ugb3RoZXIgdHlwZQoJZGVjbGFyYXRpb25zLiAKCShwdXNoX2NsYXNzX2xldmVsX2JpbmRpbmcpOiBSZXR1cm4gaW1tZWRpYXRlbHkgaWYgdGhlCgljbGFzc19iaW5kaW5nX2xldmVsIGlzIE5VTEwuCgkoZ3Jva2ZuZGVjbCk6IElmIGNoZWNrX2NsYXNzZm4oKSByZXR1cm5zIGEgbWVtYmVyX3RlbXBsYXRlLCB1c2UKCXRoZSByZXN1bHQgb2YgdGhlIHRlbXBsYXRlLCBub3QgdGhlIHRlbXBsYXRlIGl0c2VsZi4KCQoJKiBkZWNsMi5jIChjaGVja19tZW1iZXJfdGVtcGxhdGUpOiBOZXcgZnVuY3Rpb24uICBDaGVjayB0byBzZWUKCXRoYXQgdGhlIGVudGl0eSBkZWNsYXJlZCB0byBiZSBhIG1lbWJlciB0ZW1wbGF0ZSBjYW4gYmUgb25lLgoJKGNoZWNrX2NsYXNzZm4pOiBBbGxvdyByZWRlY2xhcmF0aW9uIG9mIG1lbWJlciB0ZW1wbGF0ZSBmdW5jdGlvbnMKCXdpdGggZGlmZmVyZW50IHR5cGVzOyB0aGUgbmV3IGZ1bmN0aW9ucyBjYW4gYmUgc3BlY2lhbGl6YXRpb25zIG9yCglleHBsaWNpdCBpbnN0YW50aWF0aW9ucy4KCQoJKiBlcnJvci5jIChkdW1wX2RlY2wpOiBIYW5kbGUgbXVsdGlwbGUgbGV2ZWxzIG9mIHRlbXBsYXRlCglwYXJhbWV0ZXJzLiAKCShkdW1wX2Z1bmN0aW9uX2RlY2wpOiBVcGRhdGUgdG8gaGFuZGxlIGZ1bmN0aW9uCXRlbXBsYXRlcy4KCgkqIGxleC5jIChkb19wZW5kaW5nX2lubGluZXMpOiBTZXQgdXAgdGVtcGxhdGUgcGFyYW1ldGVyIGNvbnRleHQKCWZvciBtZW1iZXIgdGVtcGxhdGVzLgoJKHByb2Nlc3NfbmV4dF9pbmxpbmUpOiBMaWtld2lzZS4KCgkqIG1ldGhvZC4gKGJ1aWxkX292ZXJsb2FkX2lkZW50aWZpZXIpOiBBZGp1c3QgZm9yIG11bHRpcGxlIGxldmVscwoJb2YgdGVtcGxhdGUgcGFyYW1ldGVycy4KCQoJKiBwYXJzZS55IChmbi5kZWYyKTogQWRkIG1lbWJlciB0ZW1wbGF0ZXMuCgkoY29tcG9uZW50X2RlY2xfMSk6IExpa2V3aXNlLgoKCSogcHQuYyAoYmVnaW5fbWVtYmVyX3RlbXBsYXRlX3Byb2Nlc3NpbmcpOiBOZXcgZnVuY3Rpb24uCgkoZW5kX21lbWJlcl90ZW1wbGF0ZV9wcm9jZXNzaW5nKTogTGlrZXdpc2UuCgkoaXNfbWVtYmVyX3RlbXBsYXRlKTogTGlrZXdpc2UuCgkoZm5fdHlwZV91bmlmaWNhdGlvbik6IExpa2V3aXNlLgoJKGN1cnJlbnRfdGVtcGxhdGVfcGFybXMpOiBSZXR1cm4gYSB2ZWN0b3Igb2YgYWxsIHRoZSB0ZW1wbGF0ZQoJcGFybXMsIG5vdCBqdXN0IHRoZSBpbm5lcm1vc3QgbGV2ZWwgb2YgcGFybXMuCgkocHVzaF90ZW1wbGF0ZV9kZWNsKTogRGVhbCB3aXRoIHRoZSBwb3NzaWJpbGl0eSBvZiBtZW1iZXIKCXRlbXBsYXRlcy4gCgkobG9va3VwX3RlbXBsYXRlX2NsYXNzKTogTGlrZXdpc2UuCgkodXNlc190ZW1wbGF0ZV9wYXJtcyk6IExpa2V3aXNlLgoJKHRzdWJzdCk6IE1vZGlmeSBwcm9jZXNzaW5nIHRvIFRFTVBMQVRFX1RZUEVfUEFSTSBhbmQKCVRFTVBMQVRFX0NPTlNUX1BBUk0gdG8gZGVhbCB3aXRoIG11bHRpcGxlIGxldmVscyBvZiB0ZW1wbGF0ZQoJYXJndW1lbnRzLiAgIEFkZCBwcm9jZXNzaW5nIG9mIFRFTVBMQVRFX0RFQ0wgdG8gcHJvZHVjZSBuZXcKCVRFTVBMQVRFX0RFQ0xzIGZyb20gb2xkIG9uZXMuCgkoZG9fZGVjbF9pbnN0YW50aWF0aW9uKTogSGFuZGxlIG1lbWJlciB0ZW1wbGF0ZXMuCgoJKiBzZWFyY2guYyAobG9va3VwX2ZuZmllbGRzXzEpOiBIYW5kbGUgbWVtYmVyIHRlbXBsYXRlIGNvbnZlcnNpb24KCW9wZXJhdG9ycy4gCgoJKiB0cmVlLmMgKGNwX3RyZWVfZXF1YWwpOiBDaGVjayB0aGUgbGV2ZWxzLCBhcyB3ZWxsIGFzIHRoZQoJaW5kaWNlcywgb2YgVEVNUExBVEVfQ09OU1RfUEFSTXMuCgoJKiB0eXBlY2suYyAoY29tcHR5cGVzKTogQ2hlY2sgdGhlIGxldmVscywgYXMgd2VsbCBhcyB0aGUgaW5kaWNlcywKCWZvIFRFTVBMQVRFX1RZUEVfUEFSTXMuCgkoYnVpbGRfeF9mdW5jdGlvbl9jYWxsKTogVHJlYXQgbWVtYmVyIHRlbXBsYXRlcyBsaWtlIG1lbWJlcgoJZnVuY3Rpb25zLiAKCQpXZWQgU2VwICAzIDExOjA5OjI1IDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHR5cGVjay5jIChjX2V4cGFuZF9yZXR1cm4pOiBBbHdheXMgY29udmVydF9mb3JfaW5pdGlhbGl6YXRpb24KIAliZWZvcmUgY2hlY2tpbmcgZm9yIHJldHVybmluZyBhIHBvaW50ZXIgdG8gbG9jYWwuCgoJKiBwdC5jICh0eXBlX3VuaWZpY2F0aW9uKTogSWYgc3RyaWN0IGFuZCB0aGUgZnVuY3Rpb24gcGFybSBkb2Vzbid0Cgl1c2UgdGVtcGxhdGUgcGFybXMsIGp1c3QgY29tcGFyZSB0eXBlcy4KCldlZCBTZXAgIDMgMTA6MzU6NDkgMTk5NyAgS2xhdXMgRXNwZW5sYXViICA8a2VzcGVubGFAc3R1ZGVudC5pbmZvcm1hdGlrLnVuaS11bG0uZGU+CgoJKiBtZXRob2QuYyAoYnVpbGRfb3ZlcmxvYWRlZF92YWx1ZSk6IFJlcGxhY2UgZGlyZWN0IGNhbGwKCXRvIHRoZSBmbG9hdGluZyBwb2ludCBlbXVsYXRvciB3aXRoIFJFQUxfVkFMVUVfVE9fREVDSU1BTCBtYWNyby4KCldlZCBTZXAgIDMgMDA6MDI6NTMgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogdHlwZWNrLmMgKGNvbnZlcnRfYXJndW1lbnRzKTogRG9uJ3QgYXJiaXRyYXJpbHkgY2hvb3NlIHRoZSBmaXJzdAogCW9mIGEgc2V0IG9mIG92ZXJsb2FkZWQgZnVuY3Rpb25zLgoKVHVlIFNlcCAgMiAxMjowOToxMyAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBsZXguYyAocmVhbF95eWxleCk6IERvbid0IGVsaWRlIF9fRlVOQ1RJT05fXy4KCgkqIG1ldGhvZC5jIChidWlsZF9vdmVybG9hZF92YWx1ZSk6IEFkZCBpbl90ZW1wbGF0ZSBwYXJtLgoJKGJ1aWxkX292ZXJsb2FkX2ludCk6IExpa2V3aXNlLgoJKGJ1aWxkX292ZXJsb2FkX2lkZW50aWZpZXIpOiBQYXNzIGl0LgoKCSogZGVjbC5jIChkdXBsaWNhdGVfZGVjbHMpOiBEb24ndCBiYXNoIGEgcHJldmlvdXMgdGVtcGxhdGUKIAlkZWZpbml0aW9uIHdpdGggYSByZWRlY2xhcmF0aW9uLgoKCSogcHQuYyAodW5pZnkpOiBmbG9hdCBkb2Vzbid0IG1hdGNoIGRvdWJsZS4KCgkqIHB0LmMgKGRvX3R5cGVfaW5zdGFudGlhdGlvbik6IEhhbmRsZSBnZXR0aW5nIGEgX1RZUEUgb3IgYQogCVRZUEVfREVDTC4gIEhhbmRsZSBnZXR0aW5nIG5vbi10ZW1wbGF0ZSB0eXBlcy4KCSogcGFyc2UueSAoZXhwbGljaXRfaW5zdGFudGlhdGlvbik6IFVzZSB0eXBlc3BlYyBpbnN0ZWFkIG9mCglhZ2dyIHRlbXBsYXRlX3R5cGUuCgpUdWUgU2VwICAyIDEwOjI3OjA4IDE5OTcgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiB0eXBlY2suYyAoYnVpbGRfcHRybWVtZnVuYzEpOiBDbGVhbiB1cCBwdHItPmludCBjYXN0IHdhcm5pbmdzLgoKTW9uIFNlcCAgMSAxMzoxOTowNCAxOTk3ICBFdWdlbmUgTWFtY2hpdHMgPGV1Z2luQGlwcy5yYXMucnU+CgoJKiBjYWxsLmMgKGFkZF9idWlsdGluX2NhbmRpZGF0ZSk6IEFkZCBtaXNzaW5nIFRSRUVfVFlQRS4KCShjb21wYXJlX2ljcyk6IExpa2V3aXNlLgoKTW9uIFNlcCAgMSAxMzoxOTowNCAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjYWxsLmMgKGpvdXN0KTogV2FybiBhYm91dCBjaG9vc2luZyBvbmUgY29udmVyc2lvbiBvcCBvdmVyCiAJYW5vdGhlciBiZWNhdXNlIG9mICd0aGlzJyBhcmd1bWVudCB3aGVuIHRoZSBvdGhlciByZXR1cm4gdHlwZSBpcwogCWJldHRlci4KCShzb3VyY2VfdHlwZSk6IE5ldyBmbi4KCgkqIGNhbGwuYyAoYnVpbGRfbmV3X29wKTogU3RyaXAgbGVhZGluZyBSRUZfQklORCBmcm9tIGZpcnN0IG9wZXJhbmQKCXRvIGJ1aWx0aW4gb3BlcmF0b3IuCgoJKiBkZWNsMi5jIChtYXJrX3Z0YWJsZV9lbnRyaWVzKTogTWFyayBhYm9ydF9mbmRlY2wgYXMgdXNlZCB3aGVuIHdlCgl1c2UgaXRzIFJUTC4KClRodSBBdWcgMjggMDk6NDU6MjMgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY2FsbC5jIChudWxsX3B0cl9jc3RfcCk6IFJlbW92ZSBzdXBwb3J0IGZvciAodm9pZCopMC4KCldlZCBBdWcgMjcgMDI6MDM6MzQgMTk5NyAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogdHlwZWNrLmMgKGV4cGFuZF90YXJnZXRfZXhwcik6IE1ha2UgZGVmaW5pdGlvbiBtYXRjaCBkZWNsYXJhdGlvbi4KCgkqIGNsYXNzLmMgKGdldF9iYXNlZm5kZWNscyk6IE1ha2UgZGVmaW5pdGlvbiBtYXRjaCBkZWNsYXJhdGlvbi4KCk1vbiBBdWcgMjUgMTQ6MzA6MDIgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogaW5wdXQuYyAoc3ViX2dldGNoKTogRXZlbnR1YWxseSBnaXZlIHVwIGFuZCByZWxlYXNlIHRoZSBpbnB1dCBmaWxlLgoKCSogZGVjbC5jIChjcF9maW5pc2hfZGVjbCk6IElmICNwIGkvaSwgcHV0IGlubGluZSBzdGF0aWNzIGluIHRoZQoJcmlnaHQgcGxhY2UuCgoJKiBjYWxsLmMgKGpvdXN0KTogVHdlYWsgbWVzc2FnZS4KClNhdCBBdWcgMjMgMTg6MDI6NTkgMTk5NyAgTWFyayBNaXRjaGVsbCAgPG1taXRjaGVsbEB1c2EubmV0PgoKCSogZXJyb3IuYyAodHlwZV9hc19zdHJpbmcpOiBQdXQgY29uc3Qvdm9sYXRpbGUgb24gdGVtcGxhdGUgdHlwZQoJcGFyYW1ldGVycyB3aGVyZSBhcHByb3ByaWF0ZS4KClNhdCBBdWcgMjMgMTc6NDc6MjIgMTk5NyAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogY2FsbC5jIChzdHJpY3RseV9iZXR0ZXIpOiBNYWtlIGFyZ3VtZW50cyB1bnNpZ25lZCBpbnRzLgoKVGh1IEF1ZyAyMSAxODo0ODo0NCAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBsZXguYyAocmVhbF95eWxleCk6IFJlZmVyIHRvIF9fY29tcGxleCBpbnN0ZWFkIG9mIGNvbXBsZXguCgpUaHUgQXVnIDIxIDIyOjI1OjQ2IDE5OTcgIEoib3JuIFJlbm5lY2tlIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIGxleC5jIChyZWFsX3l5bGV4KTogRG9uJ3QgdXNlIGdldGMgZGlyZWN0bHkuCgpXZWQgQXVnIDIwIDE3OjI1OjA4IDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGNhbGwuYyAoaXNfc3Vic2VxKTogRG9uJ3QgdHJ5IHRvIGJlIGNsZXZlci4KCldlZCBBdWcgMjAgMDM6MTM6MzYgMTk5NyAgSC5KLiBMdSAgKGhqbEBnbnUuYWkubWl0LmVkdSkKCgkqIHBhcnNlLnksIHB0LmM6IEluY2x1ZGUgImV4Y2VwdC5oIi4KCSogY2FsbC5jLCBjbGFzcy5jLCBjbGFzcy5oLCBjcC10cmVlLmgsIGN2dC5jLCBkZWNsLmMsIGRlY2wyLmMsCiAJZXJyb3IuYywgZXhjZXB0LmMsIGV4cHIuYywgZnJpZW5kLmMsIGcrK3NwZWMuYywgaW5pdC5jLCBpbnB1dC5jLAogCWxleC5jLCBsZXguaCwgbWV0aG9kLmMsIHBhcnNlLnksIHB0LmMsIHJlcG8uYywgcnR0aS5jLCBzZWFyY2guYywKIAlzaWcuYywgc3Bldy5jLCB0cmVlLmMsIHR5cGVjay5jLCB0eXBlY2syLmMsIHhyZWYuYzogRmluaXNoCiAJcHJvdG90eXBpbmcuCgpXZWQgQXVnIDIwIDAxOjM0OjQwIDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGRlY2wyLmMgKG1hcmtfdnRhYmxlX2VudHJpZXMpOiBJbnN0ZWFkIG9mIHJlcGxhY2luZyBwdXJlCgl2aXJ0dWFscyB3aXRoIGEgcmVmZXJlbmNlIHRvIF9fcHVyZV92aXJ0dWFsLCBjb3B5IHRoZSBkZWNsIGFuZAoJY2hhbmdlIHRoZSBSVEwuCgpUdWUgQXVnIDE5IDAyOjI2OjA3IDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHB0LmMgKGxvb2t1cF9uZXN0ZWRfdHlwZV9ieV9uYW1lKTogSGFuZGxlIHR5cGVkZWYgd2llcmRuZXNzLgoKCSogdHlwZWNrMi5jIChteV9mcmllbmRseV9hYm9ydCk6IFJlcG9ydCBidWdzIHRvIGVnY3MtYnVnc0BjeWdudXMuY29tLgoKCSogcHQuYyAoaW5zdGFudGlhdGVfY2xhc3NfdGVtcGxhdGUpOiBDYWxsIHJlcG9fdGVtcGxhdGVfdXNlZAoJYmVmb3JlIGZpbmlzaF9wcmV2dGFibGVfdmFyZGVjbC4KCgkqIGNhbGwuYyAoaXNfc3Vic2VxKTogTmV3IGZuLgoJKGNvbXBhcmVfaWNzKTogVXNlIGl0LgoKCSogcmVwby5jIChmaW5pc2hfcmVwbyk6IERvbid0IGNyYXNoIG9uIG5vIGFyZ3MuCgoJKiBwYXJzZS55IChuYW1lZF9jb21wbGV4X2NsYXNzX2hlYWRfc2Fuc19iYXNldHlwZSk6IEhhbmRsZQogCWV4cGxpY2l0IGdsb2JhbCBzY29wZS4KCSogZGVjbDIuYyAoaGFuZGxlX2NsYXNzX2hlYWQpOiBOZXcgZm4uCgoJKiBwdC5jICh1bmlmeSk6IEFkZCBDT05TVF9ERUNMIGNhc2UuCgpUaHUgQXVnIDE0IDEwOjA1OjEzIDE5OTcgIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGxpc2EuY3lnbnVzLmNvbT4KCgkqIHJ0dGkuYyAocGVybWFuZW50X29ic3RhY2spOiBGaXggZGVjbCB0byBub3QgYmUgYSBwb2ludGVyLgoKCSogY3AtdHJlZS5oIChyZXBvcnRfdHlwZV9taXNtYXRjaCk6IEFkZCBwcm90b3R5cGUuCgkqIGNhbGwuYyAoYnVpbGRfb3ZlcmxvYWRfY2FsbF9yZWFsKTogUmVtb3ZlIGVycm9uZW91cyBmb3VydGgKCWFyZ3VtZW50IHRvIHJlcG9ydF90eXBlX21pc21hdGNoLgoJKGJ1aWxkX3VzZXJfdHlwZV9jb252ZXJzaW9uXzEpOiBSZW1vdmUgZXJyb25lb3VzIHNlY29uZCBhcmcgdG8KCXRvdXJuZXkuCgkoYnVpbGRfbmV3X2Z1bmN0aW9uX2NhbGwpOiBMaWtld2lzZS4KCShidWlsZF9vYmplY3RfY2FsbCk6IExpa2V3aXNlLgoJKGJ1aWxkX25ld19vcCk6IExpa2V3aXNlLgoJKGJ1aWxkX25ld19tZXRob2RfY2FsbCk6IExpa2V3aXNlLgoKV2VkIEF1ZyAxMyAxOToxOToyNSAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBlcnJvci5jIChkdW1wX2RlY2wpOiBEb24ndCBib3RoZXIgcHJvY2Vzc2luZyBhIGZ1bmN0aW9uIHdpdGggbm8KCURFQ0xfTEFOR19TUEVDSUZJQy4KCgkqIG1ldGhvZC5jIChlbWl0X3RodW5rKTogQ2FsbCBpbml0X2Z1bmN0aW9uX3N0YXJ0IGluIHRoZSBtYWNybyBjYXNlLgoKV2VkIEF1ZyAxMyAxMDo0NjoxOSAxOTk3ICBILkouIEx1ICAoaGpsQGdudS5haS5taXQuZWR1KQoKCSogZGVjbDIuYyAoREVGQVVMVF9WVEFCTEVfVEhVTktTKTogRGVmaW5lIHRvIGJlIDAgaWYgbm90CglkZWZpbmVkIGFuZCB1c2VkIHRvIHNldCBmbGFnX3Z0YWJsZV90aHVua3MuCgpUdWUgQXVnIDEyIDIwOjEzOjU3IDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnk6IERvbid0IGNsZWFyIHRoZSBpbmxpbmVzIGZyb20gdGhlaXIgb2JzdGFjayB1bnRpbCB0aGV5J3ZlIAoJYWxsIGJlZW4gcHJvY2Vzc2VkLgoKCSogZGVjbC5jIChkdXBsaWNhdGVfZGVjbHMpOiBEb24ndCBjb21wbGFpbiBhYm91dCBleGNlcHRpb24KIAlzcGVjaWZpY2F0aW9uIG1pc21hdGNoIGlmIGZsYWdfZXhjZXB0aW9ucyBpcyBvZmYuCgpNb24gQXVnIDExIDE1OjAxOjU2ICAxOTk3ICBNYXJjIExlaG1hbm4gPHBjZ0Bnb29mLmNvbT4KCgkqIE1ha2UtbGFuZy5pbiAoYysrLmRpc3RjbGVhbik6IFJlbW92ZSBnKysuYyBvbiBtYWtlIGRpc3RjbGVhbi4KClN1biBBdWcgMTAgMTI6MDY6MDkgMTk5NyAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+CgoJKiBjcC10cmVlLmg6IFJlcGxhY2UgU1RESU9fUFJPVE8gd2l0aCBQUk9UTyBpbiBpbmNsdWRlIGZpbGVzLgoJKiBjdnQuYywgZXJyb3IuYywgZXhjZXB0LmMsIGV4cHIuYywgZnJpZW5kLmMsIGluaXQuYywgcnR0aS5jOgoJSW5jbHVkZSA8c3RkaW8uaD4gYmVmb3JlIGluY2x1ZGUgZmlsZXMgdGhhdCBmb3JtZXJseSB1c2VkIFNURElPX1BST1RPLiAKCgkqIGRlY2wuYywgZysrc3BlYy5jLCBsZXguYywgbWV0aG9kLmMsIHJlcG8uYzoKCUluY2x1ZGUJImNvbmZpZy5oIiBmaXJzdCwgYXMgcGVyIGF1dG9jb25mIG1hbnVhbC4KCkZyaSBBdWcgIDggMTE6NDc6NDggMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZGVjbC5jIChkdXBsaWNhdGVfZGVjbHMpOiBUd2VhayB3b3JkaW5nLgoJKiBsZXguYyAoZG9fcGVuZGluZ19kZWZhcmdzKTogRG9uJ3QgZGllIGlmIHdlIHNlZSBhIGRlZmF1bHQgYXJnCgl0aGF0IGlzbid0IGEgREVGQVVMVF9BUkcuCgkqIGVycm9yLmMgKGR1bXBfZXhwcik6IEhhbmRsZSBERUZBVUxUX0FSRy4KCgkqIGRlY2wyLmMgKGxhbmdfZGVjb2RlX29wdGlvbik6IEhhbmRsZSAtZmhhbmRsZS1leGNlcHRpb25zLgoJKiBsYW5nLW9wdGlvbnMuaDogQWRkIC1maGFuZGxlLWV4Y2VwdGlvbnMuCgoJKiBjbGFzcy5jIChidWlsZF92dGFibGUpOiB2dGFibGVzIGFyZSBhcnRpZmljaWFsLgoJKHByZXBhcmVfZnJlc2hfdnRhYmxlKTogTGlrZXdpc2UuCgpXZWQgQXVnICA2IDExOjAyOjM2IDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGN2dC5jIChvY3BfY29udmVydCk6IEFmdGVyIGNvbnZlcnRpbmcgdG8gdGhlIHRhcmdldCB0eXBlLCBzZXQKIAlMT09LVVBfTk9fQ09OVkVSU0lPTi4KCgkqIGNhbGwuYyAoam91c3QpOiBXYXJuIGFib3V0IHBvdGVudGlhbGx5IGNvbmZ1c2luZyBwcm9tb3Rpb24gcnVsZXMKCXdpdGggLVdzaWduLXByb21vLgoJKiBjcC10cmVlLmgsIGxhbmctb3B0aW9ucy5oLCBkZWNsMi5jOiBTdXBwb3J0IC1Xc2lnbi1wcm9tby4KClR1ZSBBdWcgIDUgMTU6MTU6MDcgMTk5NyAgTWljaGFlbCBNZWlzc25lciAgPG1laXNzbmVyQGN5Z251cy5jb20+CgoJKiBleGNlcHRpb24uY2M6IERlY2xhcmUgX190ZXJtaW5hdGVfZnVuYyB3aXRoIG5vcmV0dXJuIGF0dHJpYnV0ZS4KCkZyaSBBdWcgIDEgMDM6MTg6MTUgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogcGFyc2UueTogQnJlYWsgb3V0IGVhdF9zYXZlZF9pbnB1dCwgaGFuZGxlIGVycm9ycy4KCShmdW5jdGlvbl90cnlfYmxvY2spOiBVc2UgY29tcHN0bXQgaW5zdGVhZCBvZiBjb21wc3RtdF9vcl9lcnJvci4KClRodSBKdWwgMzEgMTc6MTQ6MDQgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogdHJlZS5jIChidWlsZF9jcGx1c19uZXcpOiBEb24ndCBzZXQgVFJFRV9BRERSRVNTQUJMRS4KCkZyaSBKdWwgIDQgMDE6NDU6MTYgMTk5NyAgQW5kcmVhcyBTY2h3YWIgIDxzY2h3YWJAaXNzYW4uaW5mb3JtYXRpay51bmktZG9ydG11bmQuZGU+CgoJKiBNYWtlLWxhbmcuaW4gKGNwbGliMi50eHQsIGNwbGliMi5yZWFkeSk6IEluc3RlYWQgb2YgY2hlY2tpbmcgZm9yCglleGlzdGVuY2Ugb2YgY2MxcGx1cyBjaGVjayB3aGV0aGVyICQoTEFOR1VBR0VTKSBjb250YWlucyBDKysuCgpXZWQgSnVsIDMwIDEzOjA0OjIxIDE5OTcgIEFuZHJlYXMgU2Nod2FiICA8c2Nod2FiQGlzc2FuLmluZm9ybWF0aWsudW5pLWRvcnRtdW5kLmRlPgoKCSogbWV0aG9kLmMgKGRvX2J1aWxkX2NvcHlfY29uc3RydWN0b3IpOiBXaGVuIGNvcHlpbmcgYW4gYW5vbnltb3VzCgl1bmlvbiBtZW1iZXIgbG9vcCBhcm91bmQgdG8gaGFuZGxlIG5lc3RlZCBhbm9ueW1vdXMgdW5pb25zLiAgVXNlCgl0aGUgb2Zmc2V0IG9mIHRoZSBtZW1iZXIgcmVsYXRpdmUgdG8gdGhlIG91dGVyIHN0cnVjdHVyZSwgbm90IHRoZQoJdW5pb24uCgpUdWUgSnVsIDI5IDIxOjE3OjI5IDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGNhbGwuYyAocmVzb2x2ZV9hcmdzKTogTmV3IGZuLgoJKGJ1aWxkX25ld19mdW5jdGlvbl9jYWxsKTogVXNlIGl0LgoJKGJ1aWxkX29iamVjdF9jYWxsKTogTGlrZXdpc2UuCgkoYnVpbGRfbmV3X21ldGhvZF9jYWxsKTogTGlrZXdpc2UuCgpNb24gSnVsIDI4IDE2OjAyOjM2IDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGNhbGwuYyAoYnVpbGRfb3Zlcl9jYWxsKTogdHN1YnN0IGFsbCBkZWZhdWx0IHBhcm1zIGZyb20gdGVtcGxhdGVzLgoKV2VkIEp1bCAyMyAxMzozNjoyNSAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBkZWNsLmMgKHN0cnVjdCBjcF9mdW5jdGlvbik6IEFkZCBzdGF0aWNfbGFiZWxuby4KCShwdXNoX2NwX2Z1bmN0aW9uX2NvbnRleHQpOiBTYXZlIGl0LgoJKHBvcF9jcF9mdW5jdGlvbl9jb250ZXh0KTogUmVzdG9yZSBpdC4KClR1ZSBKdWwgMjIgMTQ6NDM6MjkgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogdHlwZWNrLmMgKGJ1aWxkX2NvbXBvbmVudF9yZWZfMSk6IENvbnZlcnQgZnJvbSByZWZlcmVuY2UuCgpUdWUgSnVsIDIyIDExOjA2OjIzIDE5OTcgIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGxpc2EuY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnkgKGN1cnJlbnRfZGVjbHNwZWNzLCBwcmVmaXhfYXR0cmlidXRlcyk6IEluaXRpYWxpemUgdG8KCU5VTExfVFJFRS4KCgkqIHBhcnNlLnkgKGluaXRkY2wwKTogTWFrZSBzdXJlIENVUlJFTlRfREVDTFNQRUNTIGlzIG5vbi1uaWwKCWJlZm9yZSB3ZSB0cnkgdG8gZm9yY2UgaXQgdG8gYmUgYSBUUkVFX0xJU1QuCgkoZGVjbCk6IE1ha2Ugc3VyZSAkMS50IGlzIG5vbi1uaWwuCgpTdW4gSnVsIDIwIDExOjUzOjA3IDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHB0LmMgKHVzZXNfdGVtcGxhdGVfcGFybXMpOiBIYW5kbGUgdGVtcGxhdGUgZmlyc3QtcGFyc2UgY29kZXMuCgoJKiBkZWNsLmMgKGNwX2ZpbmlzaF9kZWNsKTogT25seSB3YXJuIGFib3V0IHVzZXItZGVmaW5lZCBzdGF0aWNzLgoKRnJpIEp1bCAxOCAxNzo1NjowOCAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBwdC5jICh1bmlmeSk6IEhhbmRsZSBCT09MRUFOX1RZUEUuCgoJKiBjcC10cmVlLmg6IExvc2UgUEFSTV9ERUZBVUxUX0ZST01fVEVNUExBVEUuCgkqIHB0LmMgKHRzdWJzdCk6IERvbid0IHNldCBpdC4KCSogY2FsbC5jIChidWlsZF9vdmVyX2NhbGwpOiBVc2UgdXNlc190ZW1wbGF0ZV9wYXJtcy4KClRodSBKdWwgMTcgMTg6MDY6MzAgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogbWV0aG9kLmMgKGJ1aWxkX292ZXJsb2FkX25lc3RlZF9uYW1lKTogVXNlIHN0YXRpY19sYWJlbG5vCiAJaW5zdGVhZCBvZiB2YXJfbGFiZWxuby4KCShidWlsZF9xdWFsaWZpZWRfbmFtZSk6IE5ldyBmbi4KCShidWlsZF9vdmVybG9hZF9uYW1lKTogU3BsaXQgb3V0IGZyb20gaGVyZS4KCShidWlsZF9zdGF0aWNfbmFtZSk6IFVzZSBidWlsZF9xdWFsaWZpZWRfbmFtZS4KCSogZGVjbC5jIChjcF9maW5pc2hfZGVjbCk6IFN0YXRpY3MgaW4gZXh0ZXJuIGlubGluZSBmdW5jdGlvbnMgCgloYXZlIGNvbWRhdCBsaW5rYWdlLgoJKHN0YXJ0X2Z1bmN0aW9uKTogSW5pdGlhbGl6ZSBzdGF0aWNfbGFiZWxuby4KClRodSBKdWwgMTcgMTE6MjA6MTcgMTk5NyAgQmVuamFtaW4gS29zbmlrICA8YmtvekByaGluby5jeWdudXMuY29tPgoKCSogY2xhc3MuYyAoZmluaXNoX3N0cnVjdF9tZXRob2RzKTogYWRkIGNoZWNrIG9mIHdhcm5fY3Rvcl9kdG9yX3ByaXZhY3kKCWJlZm9yZSAiYWxsIG1lbWJlciBmdW5jdGlvbnMgaW4gY2xhc3MgW10gYXJlIHByaXZhdGUiCgpXZWQgSnVsIDE2IDIzOjQ3OjA4IDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGxleC5jIChkb19zY29wZWRfaWQpOiBjb252ZXJ0X2Zyb21fcmVmZXJlbmNlLgoJKiBpbml0LmMgKGJ1aWxkX29mZnNldF9yZWYpOiBMaWtld2lzZS4KCldlZCBKdWwgMTYgMTI6MzQ6MjkgMTk5NyAgQmVuamFtaW4gS29zbmlrICA8YmtvekBsaXNhLmN5Z251cy5jb20+CgoJKiBlcnJvci5jIChkdW1wX2V4cHIpOiBDaGVjayBUUkVFX09QRVJBTkQgYmVmb3JlIGR1bXBfZXhwcl9saXN0LgoKTW9uIEp1bCAxNCAwMzoyMzo0NiAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiB0eXBlY2suYyAoZ2V0X21lbWJlcl9mdW5jdGlvbl9mcm9tX3B0cmZ1bmMpOiBQcm9tb3RlIGluZGV4CiAJYmVmb3JlIHNhdmluZyBpdC4KClN1biBKdWwgMTMgMDA6MTE6NTIgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogdHJlZS5jIChsYXlvdXRfYmFzZXR5cGVzKTogTW92ZSBub24tdmlydHVhbCBkZXN0cnVjdG9yIHdhcm5pbmcuCgkqIGRlY2wuYyAoeHJlZl9iYXNldHlwZXMpOiBSZW1vdmUgbm9uLXZpcnR1YWwgZGVzdHJ1Y3RvciB3YXJuaW5nLgoKU2F0IEp1bCAxMiAxMjo0NzoxMiAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBkZWNsLmMgKGdyb2tkZWNsYXJhdG9yKTogQ2FsbCBhZGRfZGVmYXJnX2ZuIGZvciB0aGUgZnVuY3Rpb24KCXR5cGUsIHRvby4KCSogbGV4LmMgKGFkZF9kZWZhcmdfZm4pOiBBZGp1c3QuCgkoZG9fcGVuZGluZ19kZWZhcmdzKTogQWRqdXN0LiAgRG9uJ3Qgc2tpcCB0aGUgZmlyc3QgcGFybS4KCkZyaSBKdWwgMTEgMDE6Mzk6NTAgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZGVjbC5jIChidWlsZF9lbnVtZXJhdG9yKTogR2xvYmFsIGVudW1lcmF0b3JzIGFyZSBhbHNvIHJlYWRvbmx5LgoKCSogcnR0aS5jIChidWlsZF9keW5hbWljX2Nhc3RfMSk6IFJlbmFtZWQgZnJvbSBidWlsZF9keW5hbWljX2Nhc3QuCgkoYnVpbGRfZHluYW1pY19jYXN0KTogQ2FsbCBpdCBhbmQgY29udmVydF9mcm9tX3JlZmVyZW5jZS4KCgkqIGxleC5jIChhZGRfZGVmYXJnX2ZuKTogTmV3IGZuLgoJKHNuYXJmX2RlZmFyZyk6IERvbid0IGFkZCB0byBkZWZhcmdfdHlwZXMuCgkoZG9fcGVuZGluZ19kZWZhcmdzKTogTG9zZSBkZWZhcmdfdHlwZXMuICBBbGwgZm5zIHdlIHByb2Nlc3Mgbm93CgloYXZlIGRlZmFyZ3MuCgkqIGRlY2wuYyAoZ3Jva2ZuZGVjbCk6IENhbGwgYWRkX2RlZmFyZ19mbi4KCgkqIE1ha2VmaWxlLmluIChDT05GTElDVFMpOiBFeHBlY3QgMTggcy9yIGNvbmZsaWN0cy4KCSogY3AtdHJlZS5kZWY6IEFkZCBERUZBVUxUX0FSRy4KCSogc3Bldy5jICh5eWxleCk6IENhbGwgc25hcmZfZGVmYXJnIGFzIGFwcHJvcHJpYXRlLgoJKiBwYXJzZS55OiBOZXcgdG9rZW5zIERFRkFSRyBhbmQgREVGQVJHX01BUktFUi4KCShkZWZhcmdfYWdhaW4sIHBlbmRpbmdfZGVmYXJncywgZGVmYXJnLCBkZWZhcmcxKTogTmV3IHJ1bGVzLgoJKHN0cnVjdHNwKTogVXNlIHBlbmRpbmdfZGVmYXJncy4KCShwYXJtcywgZnVsbF9wYXJtKTogVXNlIGRlZmFyZy4KCSogbGV4LmMgKGluaXRfbGV4KTogSW5pdGlhbGl6ZSBpbmxpbmVfdGV4dF9maXJzdG9iai4KCShkb19wZW5kaW5nX2lubGluZXMpOiBOZXZlciBwYXNzIHRoZSBvYnN0YWNrIHRvIGZlZWRfaW5wdXQuCgkocHJvY2Vzc19uZXh0X2lubGluZSk6IENhbGwgZW5kX2lucHV0IGluc3RlYWQgb2YgcmVzdG9yZV9wZW5kaW5nX2lucHV0LgoJKGNsZWFyX2lubGluZV90ZXh0X29ic3RhY2ssIHJlaW5pdF9wYXJzZV9mb3JfZXhwciwgZG9fcGVuZGluZ19kZWZhcmdzLAoJZmluaXNoX2RlZmFyZywgZmVlZF9kZWZhcmcsIHNuYXJmX2RlZmFyZywgbWF5YmVfc25hcmZfZGVmYXJnKTogTmV3IGZucy4KCSogaW5wdXQuYyAoZW5kX2lucHV0KTogTmV3IGZuLgoJKHN1Yl9nZXRjaCk6IEF0IHRoZSBlbmQgb2Ygc29tZSBmZWQgaW5wdXQsIGp1c3Qga2VlcCByZXR1cm5pbmcgRU9GCgl1bnRpbCBzb21lb25lIGNhbGxzIGVuZF9pbnB1dC4KCVJlbW92ZSAnb2JzdGFjaycgZmllbGQgZnJvbSBzdHJ1Y3QgaW5wdXRfc291cmNlLgoJKiBkZWNsLmMgKGdyb2twYXJtcyk6IEhhbmRsZSBERUZBVUxUX0FSRy4KCShyZXBsYWNlX2RlZmFyZyk6IE5ldyBmbi4KCSogY3AtdHJlZS5oIChERUZBUkdfTEVOR1RILCBERUZBUkdfUE9JTlRFUik6IE5ldyBtYWNyb3MuCgpXZWQgSnVsICA5IDEzOjQ0OjEyIDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGNhbGwuYyAoaW1wbGljaXRfY29udmVyc2lvbik6IElmIG5vdGhpbmcgZWxzZSB3b3JrcywgdHJ5IGJpbmRpbmcKCWFuIHJ2YWx1ZSB0byBhIHJlZmVyZW5jZS4KCldlZCBKdWwgIDkgMTM6MDQ6MzggMTk5NyAgR2VvZmZyZXkgTm9lciAgPG5vZXJAY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBmaXggSnVuIDMwIHBhdGNoIC0tIG1vdmUKCWlmbmRlZiBmb3IgQ3lnd2luMzIgdG8gaW5jbHVkZSBTSUdTRUdWLgoKVGh1IEp1bCAgMyAwMTo0NDowNSAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjbGFzcy5jIChmaW5pc2hfc3RydWN0XzEpOiBPbmx5IGNvbXBsYWluIGFib3V0IHBvaW50ZXJzIHdpdGhvdXQKCWNvcHkgc3R1ZmYgaWYgdGhlcmUgYXJlIGFueSBjb25zdHJ1Y3RvcnMuCgoJKiBydHRpLmMgKGJ1aWxkX2R5bmFtaWNfY2FzdCk6IENhbGwgY29tcGxldGVfdHlwZSBvbiB0aGUgdHlwZXMuCgoJKiBkZWNsLmMgKGdyb2tmbmRlY2wpOiBJZiB0aGUgZnVuY3Rpb24gd2UgY2hvc2UgZG9lc24ndCBhY3R1YWxseQogCW1hdGNoLCBkaWUuCgoJKiBkZWNsMi5jIChncm9rY2xhc3Nmbik6IERvbid0IHNwZWNpZnkgJ2NvbnN0IGludCcgZm9yIHRoZQogCWFydGlmaWNpYWwgZGVzdHJ1Y3RvciBwYXJtLgoKCSogcHQuYyAodHlwZV91bmlmaWNhdGlvbik6IElmIHdlIGFyZSBjYWxsZWQgcmVjdXJzaXZlbHksIG5vdGhpbmcgCglkZWNheXMuCgpNb24gSnVuIDMwIDE3OjUzOjIxIDE5OTcgIEdlb2ZmcmV5IE5vZXIgIDxub2VyQGN5Z251cy5jb20+CgogICAgICAgICogZGVjbC5jIChpbml0X2RlY2xfcHJvY2Vzc2luZyk6IFN0b3AgdHJ5aW5nIHRvIGNhdGNoIHNpZ25hbHMKCW90aGVyIHRoYW4gU0lHQUJSVCBzaW5jZSB0aGUgQ3lnd2luMzIgbGlicmFyeSBkb2Vzbid0IHN1cHBvcnQKCXRoZW0gY29ycmVjdGx5IHlldC4gIFRoaXMgZml4ZXMgYSBzaXR1YXRpb24gaW4gd2hpY2ggZysrIGNhdXNlcwoJYSBoYW5nIG9uIFNJR1NFR1ZzIGFuZCBvdGhlciBzdWNoIHNpZ25hbHMgaW4gb3VyIFdpbjMyLWhvc3RlZAoJdG9vbHMuCgpNb24gSnVuIDMwIDE0OjUwOjAxIDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHRyZWUuYyAobWFwY2FyLCBjYXNlIENBTExfRVhQUik6IEhhbmRsZSBhbGwgdGhlIHBhcnNlIG5vZGUgZGF0YS4KCkZyaSBKdW4gMjcgMTU6MTg6NDkgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogdHlwZWNrMi5jIChzdG9yZV9pbml0X3ZhbHVlKTogQWx3YXlzIHJldHVybiB0aGUgdmFsdWUgaWYgb3VyIAoJdHlwZSBuZWVkcyBjb25zdHJ1Y3RpbmcuCgoJKiBtZXRob2QuYyAoaGFja19pZGVudGlmaWVyKTogQ29udmVydCBjbGFzcyBzdGF0aWNzIGZyb20KIAlyZWZlcmVuY2UsIHRvby4KClRodSBKdW4gMjYgMTE6NDQ6NDYgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogTWFrZS1sYW5nLmluIChjcGxpYjIucmVhZHkpOiBBZGQgJChMQU5HVUFHRVMpIGRlcGVuZGVuY3kuCgpUaHUgSnVuIDE5IDE2OjQ5OjI4IDE5OTcgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIHR5cGVjay5jIChjX2V4cGFuZF9yZXR1cm4pOiBNYWtlIHN1cmUgd2UgY2xlYW4gdXAgdGVtcG9yYXJpZXMgYXQKCXRoZSBlbmQgb2YgcmV0dXJuIHg7CgpUaHUgSnVuIDE5IDEyOjI4OjQzIDE5OTcgIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGxpc2EuY3lnbnVzLmNvbT4KCgkqIGxleC5jIChjaGVja19mb3JfbWlzc2luZ19zZW1pY29sb24pOiBBbHNvIGNoZWNrIGZvciBDVl9RVUFMSUZJRVIuCgpUdWUgSnVuIDE3IDE4OjM1OjU3IDE5OTcgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIGV4Y2VwdC5jIChleHBhbmRfYnVpbHRpbl90aHJvdyk6IEFkZCBzdXBwb3J0CiAJLWZuby1zamxqLWV4Y2VwdGlvbnMgLWZQSUMgZXhjZXB0aW9uIGhhbmRsaW5nIG9uIHRoZSBTUEFSQy4KCk1vbiBKdW4gMTYgMDE6MjQ6MzcgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogcmVwby5jIChleHRyYWN0X3N0cmluZyk6IE51bGwtdGVybWluYXRlLgoKCSogY3AtdHJlZS5oIChUSV9TUEVDX0lORk8pOiBOZXcgbWFjcm8uCgkoQ0xBU1NUWVBFX1RJX1NQRUNfSU5GTyk6IE5ldyBtYWNyby4KCSogcHQuYyAocHVzaF90ZW1wbGF0ZV9kZWNsKTogQ29ycmVjdGx5IGRldGVybWluZSAjIG9mIHRlbXBsYXRlIHBhcm1zIAoJZm9yIHBhcnRpYWwgc3BlY3MuCgoJKiBjYWxsLmMgKGNvbXBhcmVfaWNzKTogUmVhbGx5IGZpeCAndGhpcycgY29udmVyc2lvbnMuCgoJKiBwdC5jIChkb19kZWNsX2luc3RhbnRpYXRpb24pOiBEb24ndCBjcmFzaCBvbiBleHBsaWNpdCBpbnN0IG9mCglub24tdGVtcGxhdGUgZm4uCgoJKiBwdC5jIChwdXNoX3RlbXBsYXRlX2RlY2wpOiBDb21wbGFpbiBhYm91dCBtaXNtYXRjaCBpbiAjIG9mCiAJdGVtcGxhdGUgcGFybXMgYmV0d2VlbiBhIGNsYXNzIHRlbXBsYXRlIGFuZCBhIG1lbWJlciB0ZW1wbGF0ZS4KClN1biBKdW4gMTUgMDI6Mzg6MjAgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogbWV0aG9kLmMgKHN5bnRoZXNpemVfbWV0aG9kKTogWW91IGNhbid0IGNhbGwKIAlmdW5jdGlvbl9jYW5ub3RfaW5saW5lX3AgYWZ0ZXIgZmluaXNoX2Z1bmN0aW9uLgoJKiBkZWNsLmMgKGZpbmlzaF9mdW5jdGlvbik6IFR1cm4gb24gZmxhZ19pbmxpbmVfZnVuY3Rpb25zIGFuZCB0dXJuCiAJb2ZmIERFQ0xfSU5MSU5FIGJlZm9yZSBoYW5kaW5nIGEgc3ludGhlc2l6ZWQgbWV0aG9kIHRvIHRoZQogCWJhY2tlbmQuCgpUaHUgSnVuIDEyIDE3OjM1OjI4IDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIG1ldGhvZC5jIChzeW50aGVzaXplX21ldGhvZCk6IFJlbW92ZSBKdWx5IDMwIGNoYW5nZSB0byBuZXZlciBzZXQKIAlERUNMX0lOTElORSBpZiBhdF9lb2YuCgpUaHUgSnVuIDEyIDE1OjI1OjA4IDE5OTcgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIHhyZWYuYyAoR05VX3hyZWZfbWVtYmVyKTogRW5zdXJlIHRoYXQgdGhlIG5vZGUgaGFzIGEKCWRlY2xfbGFuZ19zcGVjaWZpYyBwYXJ0IGJlZm9yZSBjaGVja2luZyBERUNMX0ZSSUVORF9QLgoKVGh1IEp1biAxMiAxMjozNjowNSAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBwdC5jIChpbnN0YW50aWF0ZV9jbGFzc190ZW1wbGF0ZSk6IERpYWdub3NlIG5vbi1jbGFzcyB0eXBlcyB1c2VkCglhcyBiYXNlcy4KCldlZCBKdW4gMTEgMTc6MzM6NDAgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogdHlwZWNrLmMgKGJ1aWxkX2NvbmRpdGlvbmFsX2V4cHIpOiBVc2UgY29udmVydF9mb3JfaW5pdGlhbGl6YXRpb24KCWluc3RlYWQgb2YgY29udmVydF9hbmRfY2hlY2suCgpXZWQgSnVuIDExIDEyOjMxOjMzIDE5OTcgIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGxpc2EuY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnkgKHR5cGVzcGVjKTogRG9uJ3QgcGVkd2FybiBmb3IgdHlwZW9mLgoKVHVlIEp1biAxMCAwMDoyMjowOSAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiByZXBvLmMgKGZpbmlzaF9yZXBvKTogT25seSBjaGVjayBjaGFuZ2VzIGlmIHdlIHdvdWxkIHdyaXRlIGEKCXJlcG8gZmlsZS4KCgkqIGNhbGwuYyAoY29tcGFyZV9pY3MpOiBGaXggaGFuZGxpbmcgb2YgJ3RoaXMnIGNvbnZlcnNpb25zLgoKCSogcHQuYyAoZG9fZGVjbF9pbnN0YW50aWF0aW9uKTogU3VwcG9ydCBzdGF0aWMgZGF0YSB0b28uICBSZW5hbWUKCWZyb20gZG9fZnVuY3Rpb25faW5zdGFudGlhdGlvbi4KCSogY3AtdHJlZS5oOiBBZGp1c3QuCgkqIHBhcnNlLnk6IEFkanVzdC4KCgkqIHJlcG8uYyAoZXh0cmFjdF9zdHJpbmcpOiBOZXcgZm4uCgkoZ2V0X2Jhc2VfZmlsZW5hbWUpOiBVc2UgaXQuCgkoaW5pdF9yZXBvKTogQ29tcGFyZSBvbGQgYXJncyB3aXRoIGN1cnJlbnQgYXJncy4KCk1vbiBKdW4gIDkgMTQ6MjU6MzAgMTk5NyAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgoKCSogTWFrZWZpbGUuaW4sIE1ha2UtbGFuZy5pbjogUHJvdGVjdCBDLWxzIHdpdGggYSBjb21tZW50CiAJY2hhcmFjdGVyLCBpZGVhIGZyb20gUGF1bCBFZ2dlcnQgPGVnZ2VydEB0d2luc3VuLmNvbT4uCgpNb24gSnVuICA5IDAxOjUyOjAzIDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHR5cGVjay5jIChjX2V4cGFuZF9yZXR1cm4pOiBCZSBtb3JlIHBlcnNpc3RlbnQgaW4gbG9va2luZyBmb3IKIAlyZXR1cm5lZCB0ZW1wcy4KCgkqIGN2dC5jIChidWlsZF91cF9yZWZlcmVuY2UpOiBVc2UgTk9QX0VYUFIgZm9yIHN3aXRjaGluZyBmcm9tCiAJcG9pbnRlciB0byByZWZlcmVuY2UuCgoJKiBjbGFzcy5jIChidWlsZF92YmFzZV9wYXRoKTogRG9uJ3QgZG8gYW55dGhpbmcgaWYgUEFUSCBoYXMgbm8gc3RlcHMuCgpTdW4gSnVuICA4IDAzOjA3OjA1IDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGluaXQuYyAoYnVpbGRfbWVtYmVyX2NhbGwsIGJ1aWxkX29mZnNldF9yZWYpOgogCVVzZSBkb19zY29wZWRfaWQgaW5zdGVhZCBvZiBkb19pZGVudGlmaWVyLgoKCSogY3Z0LmMgKGNvbnZlcnQpOiBSZW1vdmUgYm9nb3NpdHkuCgpTYXQgSnVuICA3IDIwOjUwOjE3IDE5OTcgIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGxpc2EuY3lnbnVzLmNvbT4KCgkqIGN2dC5jIChidWlsZF91cF9yZWZlcmVuY2UpOiBEbyBjaGVja3Mgb2YgQVJHVFlQRSBhbmQKCVRBUkdFVF9UWVBFIGJlZm9yZSB0cnlpbmcgdG8gdXNlIGdldF9iaW5mby4KCkZyaSBKdW4gIDYgMTc6MzY6MzkgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY3Z0LmMgKGJ1aWxkX3VwX3JlZmVyZW5jZSk6IENhbGwgZ2V0X2JpbmZvIHRvIGdldCBhY2Nlc3MgY29udHJvbC4KCgkqIGRlY2wyLmMgKGltcG9ydF9leHBvcnRfZGVjbCk6IElmIHdlIGRvbid0IHN1cHBvcnQgd2Vha3MsIGxlYXZlCiAJc3RhdGljcyB1bmRlZmluZWQuCgpGcmkgSnVuICA2IDE1OjU1OjQ5IDE5OTcgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIGV4Y2VwdC5jIChleHBhbmRfYnVpbHRpbl90aHJvdyk6IEFkZCBzdXBwb3J0IGZvciBtYWNoaW5lcyB0aGF0CiAJY2Fubm90IGFjY2VzcyBnbG9iYWxzIGFmdGVyIHRocm93J3MgZXBpbG9ndWUgd2hlbgogCS1mbm8tc2psai1leGNlcHRpb25zIGlzIHVzZWQuCgpUaHUgSnVuICA1IDE2OjI4OjQzIDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnk6ICdzdGQ6OicgYmVjb21lcyAnOjonLgoJKiBsZXguYyAocmVhbF95eWxleCk6IFJlbW92ZSAnbmFtZXNwYWNlJyB3YXJuaW5nLgoJKiBpbml0LmMgKGJ1aWxkX21lbWJlcl9jYWxsKTogSWdub3JlICdzdGQ6OicuCgkoYnVpbGRfb2Zmc2V0X3JlZik6IExpa2V3aXNlLgoJKiBkZWNsMi5jIChkb191c2luZ19kaXJlY3RpdmUpOiBJZ25vcmUgJ3VzaW5nIG5hbWVzcGFjZSBzdGQ7Jy4KCShkb190b3BsZXZlbF91c2luZ19kZWNsKTogSWdub3JlICd1c2luZyBzdGQ6OndoYXRldmVyJy4KCSogZGVjbC5jIChwdXNoX25hbWVzcGFjZSk6IEp1c3Qgc29ycnkuCgkocG9wX25hbWVzcGFjZSk6IE5vcC4KCShpbml0X2RlY2xfcHJvY2Vzc2luZyk6IERlY2xhcmUgc3RkIG5hbWVzcGFjZS4KClR1ZSBKdW4gIDMgMTg6MDg6MjMgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogc2VhcmNoLmMgKHB1c2hfY2xhc3NfZGVjbHMpOiBBIG5hbWUgd2hpY2ggYW1iaWd1b3VzbHkgcmVmZXJzIHRvCiAJc2V2ZXJhbCBpbnN0YW50aWF0aW9ucyBvZiB0aGUgc2FtZSB0ZW1wbGF0ZSBqdXN0IHJlZmVycyB0byB0aGUKIAl0ZW1wbGF0ZS4KClR1ZSBKdW4gIDMgMTI6MzA6NDAgMTk5NyAgQmVuamFtaW4gS29zbmlrICA8YmtvekBjaXJkYW4uY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAoYnVpbGRfZW51bWVyYXRvcik6IGZpeCBwcm9ibGVtIHdpdGggdW5zaWduZWQgbG9uZwoJZW51bWVyYXRlZCB2YWx1ZXMgYmVpbmcgc21hc2hlZCB0byBpbnRzLCBjYXVzaW5nIG92ZXJmbG93Cgl3aGVuIGNvbXB1dGluZyBuZXh0IGVudW1lcmF0ZWQgdmFsdWUuIChmb3IgZW51bSB2YWx1ZXMgYXJvdW5kCglNQVhfVkFMKS4KCk1vbiBKdW4gIDIgMTc6NDA6NTYgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogdHlwZWNrLmMgKGJ1aWxkX2NvbXBvbmVudF9yZWYpOiBPbmx5IGNhbGwgbWFya191c2VkIG9uIGEgZGVjbC4KClRodSBNYXkgMjkgMTU6NTQ6MTcgMTk5NyAgQnJlbmRhbiBLZWhvZSAgPGJyZW5kYW5AbGlzYS5jeWdudXMuY29tPgoKCSogdHlwZWNrLmMgKGJ1aWxkX2NfY2FzdCk6IE1ha2UgdGhlIGNoZWNrIGZvciBhIHB0ciB0byBmdW5jdGlvbgoJbW9yZSBzcGVjaWZpYyBiZWZvcmUgcG9zc2libGUgZGVmYXVsdF9jb252ZXJzaW9uIGNhbGwuCgpUaHUgTWF5IDI5IDEzOjAyOjA2IDE5OTcgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIGV4Y2VwdC5jIChleHBhbmRfZXhjZXB0aW9uX2Jsb2Nrcyk6IFNpbXBsaWZ5IGFuZCBmaXggYW5kIG1ha2UKCXN1cmUgd2UgZG9uJ3QgZW5kIGEgcmVnaW9uIGluIGEgc2VxdWVuY2UsIGFzIGV4cGFuZF9lbmRfYmluZGluZ3MKCWRvZXNuJ3QgbGlrZSBpdC4KCldlZCBNYXkgMjggMTc6MDg6MDMgMTk5NyAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgoKCSogZXhjZXB0LmMgKGluaXRfZXhjZXB0aW9uX3Byb2Nlc3NpbmcpOiBNYXJrIHRlcm1pbmF0ZSBhcyBub3QKCXJldHVybmluZyBzbyB0aGF0IHRoZSBvcHRpbWl6ZXIgY2FuIG9wdGltaXplIGJldHRlci4KClR1ZSBNYXkgMjcgMTk6NDk6MTkgMTk5NyAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgoKCSogY3Z0LmMgKGNvbnZlcnQpOiBEb24ndCBkbyBhbnkgZXh0cmEgd29yaywgaWYgd2UgY2FuIGF2b2lkIGl0CgllYXNpbHkuCgpUdWUgTWF5IDI3IDE4OjIxOjQ3IDE5OTcgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqICouW2NoeV06IENoYW5nZSBjcF9jb252ZXJ0IHRvIG9jcF9jb252ZXJ0LCBjaGFuZ2UgY29udmVydCB0bwoJY3BfY29udmVydC4gIGNvbnZlcnQgaXMgbm93IHJlc2VydmVkIGZvciB0aGUgYmFja2VuZCwgYW5kIGRvZXNuJ3QKCWhhdmUgdGhlIHNlbWFudGljcyBhIGZyb250ZW5kIHBlcnNvbiBzaG91bGQgZXZlciB3YW50LgoKRnJpIE1heSAyMyAxMDo1ODozMSAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBsYW5nLXNwZWNzLmg6IERlZmluZSBfX0VYQ0VQVElPTlMgaWYgZXhjZXB0aW9ucyBhcmUgZW5hYmxlZC4KCUxvc2UgLXRyYWRpdGlvbmFsIHN1cHBvcnQuCgpUaHUgTWF5IDIyIDE1OjQxOjI4IDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHJ0dGkuYyAoZ2V0X3RpbmZvX3Zhcik6IFVzZSBUWVBFX1BSRUNJU0lPTiAoc2l6ZXR5cGUpLgoKCSogcGFyc2UueSAoc2VsZl9yZWZlcmVuY2UpOiBEbyBpdCBmb3IgdGVtcGxhdGVzLCB0b28uCgkqIGNsYXNzLmMgKHB1c2hjbGFzcyk6IERvbid0IG92ZXJsb2FkX3RlbXBsYXRlX25hbWU7IHRoZSBhbGlhcwoJZ2VuZXJhdGVkIGJ5IGJ1aWxkX3NlbGZfcmVmZXJlbmNlIHNlcnZlcyB0aGUgc2FtZSBwdXJwb3NlLgoKCSogdHJlZS5jIChsaXN0X2hhc2gpOiBNYWtlIHN0YXRpYywgdGFrZSBtb3JlIGFyZ3MuCgkobGlzdF9oYXNoX2xvb2t1cCk6IExpa2V3aXNlLgoJKGxpc3RfaGFzaF9hZGQpOiBNYWtlIHN0YXRpYy4KCShsaXN0X2hhc2hfY2Fub24pOiBMb3NlLgoJKGhhc2hfdHJlZV9jb25zKTogT25seSBidWlsZCBhIG5ldyBub2RlIGlmIG9uZSBpc24ndCBhbHJlYWR5IGluIHRoZQoJaGFzaHRhYmxlLgoJKGhhc2hfdHJlZV9jaGFpbik6IFVzZSBoYXNoX3RyZWVfY29ucy4KCSogY3AtdHJlZS5oOiBBZGp1c3QuCgkqIGRlY2wuYyAoZ3Jva2ZuZGVjbCk6IEp1c3QgY2hlY2sgSURFTlRJRklFUl9HTE9CQUxfVkFMVUUgaW5zdGVhZAoJb2YgY2FsbGluZyBsb29rdXBfbmFtZS4KCldlZCBNYXkgMjEgMTg6MjQ6MTkgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogcHQuYyAoaW5zdGFudGlhdGVfY2xhc3NfdGVtcGxhdGUpOiBUWVBFX1ZBTFVFUyBmb3IgYW4gZW51bQoJZG9lc24ndCByZWZlciB0byB0aGUgQ09OU1RfREVDTHMuCgpUdWUgTWF5IDIwIDIxOjA5OjMyIDE5OTcgIEJvYiBNYW5zb24gIDxtYW5zb25AY2hhcm1lZC5jeWdudXMuY29tPgoKCSogcnR0aS5jIChnZXRfdGluZm9fdmFyKTogRWl0aGVyIElOVF9UWVBFX1NJWkUgb3IgMzIsIHdoaWNoZXZlcgoJaXMgYmlnZ2VyLgoJKGV4cGFuZF9jbGFzc19kZXNjKTogQ29udmVydCB0aGUgbGFzdCBhcmd1bWVudCB0byBhIHNpemV0eXBlLgoKVHVlIE1heSAyMCAxMzo1NTo1NyAxOTk3ICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBsaXNhLmN5Z251cy5jb20+CgoJKiBneHguZ3BlcmYgKF9fY29tcGxleCwgX19jb21wbGV4X18sIF9faW1hZywgX19pbWFnX18sIF9fcmVhbCwKCV9fcmVhbF9fKTogQWRkIHJlc3dvcmRzLgoJKiBoYXNoLmg6IFJlZ2VuZXJhdGUuCgkqIGxleC5oIChyaWQpOiBBZGQgUklEX0NPTVBMRVguCgkoUklEX0xBU1RfTU9ESUZJRVIpOiBTZXQgdG8gUklEX0NPTVBMRVguCgkqIGxleC5jIChpbml0X2xleCk6IEFkZCBidWlsZGluZyBvZiBSSURfQ09NUExFWC4KCShyZWFsX3l5bGV4KTogR2VuZXJhbCBjbGVhbnVwIGluIGxpbmUgd2l0aCB3aGF0IGMtbGV4LmMgYWxzbyBoYXMsCglzYW5zIHRoZSBjcnVmdCBmb3IgdHJhZGl0aW9uYWw7IGFkZCBoYW5kbGluZyBvZiBTUEVDX0lNQUcsIGNvbXBsZXgKCXR5cGVzLCBhbmQgaW1hZ2luYXJ5IG51bWVyaWMgY29uc3RhbnRzLgoJKiBwYXJzZS55IChSRUFMUEFSVCwgSU1BR1BBUlQpOiBBZGQgdG9rZW5zLgoJKHVuYXJ5X2V4cHIpOiBBZGQgUkVBTFBBUlQgYW5kIElNQUdQQVJUIHJ1bGVzLgoJKiBjcC10cmVlLmggKGNvbXBsZXhfe2ludGVnZXIsZmxvYXQsZG91YmxlLGxvbmd9X3R5cGVfbm9kZSk6IERlY2xhcmUuCgkqIGRlY2wuYyAoY29tcGxleF97aW50ZWdlcixmbG9hdCxkb3VibGUsbG9uZ31fdHlwZV9ub2RlKTogRGVmaW5lCgl0eXBlcy4KCShpbml0X2RlY2xfcHJvY2Vzc2luZyk6IFNldCB1cCB0aGUgdHlwZXMuCgkoZ3Jva2RlY2xhcmF0b3IpOiBBZGQgaGFuZGxpbmcgb2YgUklEX0NPTVBMRVguICBTZXQgYW5kIHVzZQoJREVGQVVMVEVEX0lOVCBpbnN0ZWFkIG9mIEVYUExJQ0lUX0lOVCB3aGVuIHdlIGRlZmF1bHQgdG8gaW50IHR5cGUuCgkqIGNhbGwuYyAoYnVpbGRfbmV3X29wKTogQWRkIFJFQUxQQVJUX0VYUFIgYW5kIElNQUdQQVJUX0VYUFIgY2FzZXMuCgkqIGN2dC5jIChjcF9jb252ZXJ0KTogSGFuZGxlIENPTVBMRVhfVFlQRS4KCSogZXJyb3IuYyAoZHVtcF90eXBlX3ByZWZpeCwgZHVtcF90eXBlLCBkdW1wX3R5cGVfc3VmZml4KTogQWRkCglDT01QTEVYX1RZUEUgY2FzZS4KCSogbWV0aG9kLmMgKGJ1aWxkX292ZXJsb2FkX25hbWUpOiBBZGQgaGFuZGxpbmcgb2YgdGhlIGRpZmZlcmVudAoJQ09NUExFWF9UWVBFcywgcHJlZml4aW5nIHRoZW0gd2l0aCBgSicuCgkqIHB0LmMgKHByb2Nlc3NfdGVtcGxhdGVfcGFybSk6IERvbid0IGxldCB0aGVtIHVzZSBhIENPTVBMRVhfVFlQRQoJYXMgYSB0ZW1wbGF0ZSBwYXJtLgoJKHVzZXNfdGVtcGxhdGVfcGFybXMsIHRzdWJzdCwgdW5pZnkpOiBBZGQgQ09NUExFWF9UWVBFIGNhc2UuCgkqIHRyZWUuYyAobHZhbHVlX3ApOiBBZGQgUkVBTFBBUlRfRVhQUiBhbmQgSU1BR1BBUlRfRVhQUiBjYXNlcy4KCShtYXBjYXIpOiBIYW5kbGUgQ09NUExFWF9DU1QuCgkqIHR5cGVjay5jIChidWlsZF9iaW5hcnlfb3Bfbm9kZWZhdWx0KTogSGFuZGxlIENPTVBMRVhfVFlQRS4KCShjb21tb25fdHlwZSk6IEFkZCBjb2RlIGZvciBjb21wbGV4IHR5cGVzLgoJKGJ1aWxkX3VuYXJ5X29wKTogQWRkIFJFQUxQQVJUX0VYUFIgYW5kIElNQUdQQVJUX0VYUFIgY2FzZXMuCgkoY29udmVydF9mb3JfYXNzaWdubWVudCk6IExpa2V3aXNlLgoJKG1hcmtfYWRkcmVzc2FibGUpOiBBZGQgUkVBTFBBUlRfRVhQUiBhbmQgSU1BR1BBUlRfRVhQUiBjYXNlcy4KCk1vbiBNYXkgMTkgMTI6MjY6MjcgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogcHQuYyAodHN1YnN0KTogRG9uJ3QgcGFzcyB0aGUgTUlOVVNfRVhQUiBmb3IgYW4gYXJyYXkgZG9tYWluIHRvCgl0c3Vic3RfZXhwciwgYXMgaXQgbWlnaHQgdHJ5IHRvIGRvIG92ZXJsb2FkIHJlc29sdXRpb24uCgpTYXQgTWF5IDE3IDEwOjQ4OjMxIDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHB0LmMgKGluc3RhbnRpYXRlX2NsYXNzX3RlbXBsYXRlKTogT29wcy4KCkZyaSBNYXkgMTYgMTQ6MjM6NTcgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY3AtdHJlZS5kZWY6IEFkZCBUQUdfREVGTi4KCSogcHQuYyAodHN1YnN0X2VudW0pOiBOZXcgZm4uCgkoaW5zdGFudGlhdGVfY2xhc3NfdGVtcGxhdGUpOiBVc2UgaXQuCgkodHN1YnN0X2V4cHIpOiBTdXBwb3J0IFRBR19ERUZOLgoJKHRzdWJzdCk6IFN1cHBvcnQgbG9jYWwgZW51bXMuCgkodHN1YnN0X2NvcHkpOiBMaWtld2lzZS4KCSogZGVjbC5jIChmaW5pc2hfZW51bSk6IExpa2V3aXNlLgoJKHN0YXJ0X2VudW0pOiBJZiB0aGlzIGlzIGEgbG9jYWwgZW51bSwgc3dpdGNoIHRvIHBlcm1hbmVudF9vYnN0YWNrLgoKV2VkIE1heSAxNCAxOTowODoyOCAxOTk3ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiBkZWNsLmMgKHN0b3JlX3Bhcm1fZGVjbHMpOiBTZXQgbGFzdF9wYXJtX2NsZWFudXBfaW5zbiBoZXJlLgoJKGZpbmlzaF9mdW5jdGlvbik6IFB1dCB0aGUgYmFzZSBpbml0IGNvZGUgZm9yIGNvbnN0cnVjdG9ycyBqdXN0CglhZnRlciB0aGUgcGFybSBjbGVhbnVwIGluc25zLgoJKHN0cnVjdCBjcF9mdW5jdGlvbik6IEFkZCBsYXN0X3Bhcm1fY2xlYW51cF9pbnNuLgoJKHB1c2hfY3BfZnVuY3Rpb25fY29udGV4dCk6IExpa2V3aXNlLgoJKHBvcF9jcF9mdW5jdGlvbl9jb250ZXh0KTogTGlrZXdpc2UuCgkKVHVlIE1heSAxMyAxNTo1MToyMCAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBwdC5jICh0c3Vic3RfY29weSk6IEhhbmRsZSBCSVRfTk9UX0VYUFIuCgpXZWQgTWF5ICA3IDExOjE3OjU5IDE5OTcgIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGxpc2EuY3lnbnVzLmNvbT4KCgkqIG1ldGhvZC5jIChlbWl0X3RodW5rKSBbQVNNX09VVFBVVF9NSV9USFVOS106IEJ1aWxkIHVwIHRoZSBSVEwKCWZvciBUSFVOS19GTkRFQ0wgYmVmb3JlIHdlIHN3aXRjaCB0byB0ZW1wb3JhcnkgYWxsb2NhdGlvbi4KCk1vbiBNYXkgIDUgMTQ6NDY6NTMgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY2FsbC5jIChidWlsZF9uZXdfb3ApOiBIYW5kbGUgbnVsbCBhcmcyIGZvciA/Oi4KClRodSBNYXkgIDEgMTg6MjY6MzcgMTk5NyAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgoKCSogZXhjZXB0LmMgKGV4cGFuZF9leGNlcHRpb25fYmxvY2tzKTogRW5zdXJlIHRoYXQgd2UgZmxvdyB0aHJvdWdoCgl0aGUgZW5kIG9mIHRoZSBleGNlcHRpb24gcmVnaW9uIGZvciB0aGUgZXhjZXB0aW9uIHNwZWNpZmljYXRpb24uCglNb3ZlIGV4Y2VwdGlvbiByZWdpb24gZm9yIHRoZSBleGNlcHRpb24gc3BlY2lmaWNhdGlvbiBpbiwgc28gdGhhdAoJaXQgZG9lc24ndCBwcm90ZWN0IHRoZSBwYXJtIGNsZWFudXAuICBSZW1vdmUgc29tZSBvYnNvbGV0ZSBjb2RlLgoJKiBkZWNsLmMgKHN0b3JlX3Bhcm1fZGVjbHMpOiBMaWtld2lzZS4KCShmaW5pc2hfZnVuY3Rpb24pOiBMaWtld2lzZS4KClR1ZSBBcHIgMjkgMTU6Mzg6NTQgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogaW5pdC5jIChidWlsZF9uZXcpOiBGaXggbm90aHJvdyBoYW5kbGluZy4KClR1ZSBBcHIgMjkgMTQ6Mjk6NTAgMTk5NyAgQnJlbmRhbiBLZWhvZSAgPGJyZW5kYW5AbGlzYS5jeWdudXMuY29tPgoKCSogaW5pdC5jIChlbWl0X2Jhc2VfaW5pdCk6IERvbid0IHdhcm4gYWJvdXQgdGhlIGluaXRpYWxpemF0aW9uCglsaXN0IGZvciBhbiBhcnRpZmljaWFsIG1lbWJlci4KCkZyaSBBcHIgMjUgMTc6NDc6NTkgMTk5NyAgQnJlbmRhbiBLZWhvZSAgPGJyZW5kYW5AbGlzYS5jeWdudXMuY29tPgoKCSogZXhwci5jIChkb19jYXNlKTogSGFuZGxlICFTVEFSVCBjYXNlIGZvciB0aGUgZXJyb3IgbXNnLgoKRnJpIEFwciAyNSAxMTo1NToyMyAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBkZWNsMi5jLCBsYW5nLW9wdGlvbnMuaDogTmV3IG9wdGlvbiAtV2VmZmMrKy4KCSogY2xhc3MuYywgZGVjbC5jLCBpbml0LmMsIHR5cGVjay5jOiBNb3ZlIEVmZmVjdGl2ZSBDKysgd2FybmluZ3MKCXRvIC1XZWZmYysrLgoKCSogZGVjbDIuYyAoZmluaXNoX3ByZXZ0YWJsZV92YXJkZWNsKTogQ2hhbmdlIE5PX0xJTktBR0VfSEVVUklTVElDUwoJdG8gTVVMVElQTEVfU1lNQk9MX1NQQUNFUy4KCldlZCBBcHIgMjMgMTg6MDY6NTAgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogbWV0aG9kLmMgKGVtaXRfdGh1bmssIGdlbmVyaWMgY2FzZSk6IFNldCBjdXJyZW50X2Z1bmN0aW9uX2lzX3RodW5rLgoKCSogbWV0aG9kLmMgKGVtaXRfdGh1bmssIG1hY3JvIGNhc2UpOiBTZXQgdXAgREVDTF9SRVNVTFQuCgoJKiB0eXBlY2suYyAoY19leHBhbmRfcmV0dXJuKTogRG9uJ3QgY29tcGxhaW4gYWJvdXQgcmV0dXJuaW5nIHZvaWQKCXRvIHZvaWQgaW4gYW4gYXJ0aWZpY2lhbCBmdW5jdGlvbi4KCSogbWV0aG9kLmMgKG1ha2VfdGh1bmspOiBDaGFuZ2Ugc2V0dGluZ3Mgb2YgUkVBRE9OTFkvVk9MQVRJTEUsIAoJZG9uJ3Qgc2V0IERFQ0xfUkVTVUxULCBzZXQgREVDTF9BUlRJRklDSUFMLgoJKGVtaXRfdGh1bmssIGdlbmVyaWMgY29kZSk6IEFsc28gc2V0IHVwIERFQ0xfTEFOR19TUEVDSUZJQy4gCgpXZWQgQXByIDIzIDE0OjQzOjA2IDE5OTcgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIGluaXQuYyAoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBBZGQgc3Vwb3BydCBmb3Igc2V0am1wL2xvbmdqbXAgYmFzZWQKCWV4Y2VwdGlvbiBoYW5kbGluZy4KCSogZXhjZXB0LmMgKGluaXRfZXhjZXB0aW9uX3Byb2Nlc3NpbmcpOiBMaWtld2lzZS4KCShleHBhbmRfZW5kX2NhdGNoX2Jsb2NrKTogTGlrZXdpc2UuCgkoZXhwYW5kX2V4Y2VwdGlvbl9ibG9ja3MpOiBMaWtld2lzZS4KCShleHBhbmRfdGhyb3cpOiBMaWtld2lzZS4KCSogZXhjZXB0aW9uLmNjIChfX2RlZmF1bHRfdGVybWluYXRlKTogTGlrZXdpc2UuCgoJKiBpbml0LmMgKHBlcmZvcm1fbWVtYmVyX2luaXQpOiBVc2UgbmV3IG1ldGhvZCBvZiBleHByIGxldmVsCgljbGVhbnVwcywgaW5zdGVhZCBvZiBjbGVhbnVwc190aGlzX2NhbGwgYW5kIGZyaWVuZHMuCgkoZW1pdF9iYXNlX2luaXQpOiBMaWtld2lzZS4KCShleHBhbmRfYWdncl92YmFzZV9pbml0XzEpOiBMaWtld2lzZS4KCShleHBhbmRfdmVjX2luaXQpOiBMaWtld2lzZS4KCSogZGVjbC5jIChjcF9maW5pc2hfZGVjbCk6IExpa2V3aXNlLgoJKGV4cGFuZF9zdGF0aWNfaW5pdCk6IExpa2V3aXNlLgoJKHN0b3JlX3Bhcm1fZGVjbHMpOiBMaWtld2lzZS4KCShjcGx1c19leHBhbmRfZXhwcl9zdG10KTogTGlrZXdpc2UuCgkqIGRlY2wyLmMgKGZpbmlzaF9maWxlKTogTGlrZXdpc2UuCgkKCSogTWFrZS1sYW5nLmluIChleGNlcHRpb24ubyk6IE9rIHRvIGNvbXBpbGUgd2l0aCAtTyBub3cuCgoJKiBkZWNsLmMgKG1heWJlX2J1aWxkX2NsZWFudXBfMSk6IFdlIG5vIGxvbmdlciBoYXZlIHRvIHVuc2F2ZSwgYXMKCXdlIGtub3cgaXQgd2lsbCBiZSBkb25lIGxhdGVyIGJ5IHRoZSBiYWNrZW5kLgoKCSogZGVjbDIuYyAobGFuZ19mX29wdGlvbnMpOiBSZW1vdmUgc3VwcG9ydCBmb3Igc2hvcnQgdGVtcHMuCgkqIGxhbmctb3B0aW9ucy5oOiBMaWtld2lzZS4KCQpXZWQgQXByIDIzIDA0OjEyOjA2IDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHRyZWUuYyAodmFyYXJnc19mdW5jdGlvbl9wKTogTmV3IGZuLgoJKiBtZXRob2QuYyAoZW1pdF90aHVuayk6IFJlcGxhY2UgYnJva2VuIGdlbmVyaWMgY29kZSB3aXRoIGNvZGUgdG8KCWdlbmVyYXRlIGEgaGVhdnl3ZWlnaHQgdGh1bmsgZnVuY3Rpb24uCgpUdWUgQXByIDIyIDAyOjQ1OjE4IDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHB0LmMgKHByb2Nlc3NfdGVtcGxhdGVfcGFybSk6IHBlZHdhcm4gYWJvdXQgZmxvYXRpbmctcG9pbnQgcGFybXMuCgoJKiBkZWNsLmMgKGdyb2tkZWNsYXJhdG9yKTogaW5saW5lIG5vIGxvbmdlciBpbXBsaWVzIHN0YXRpYy4KCgkqIHNwZXcuYyAoeXlsZXgpOiBBbHdheXMgcmV0dXJuIHRoZSBUWVBFX0RFQ0wgaWYgd2UgZ290IGEgc2NvcGUuCgpNb24gQXByIDIxIDE1OjQyOjI3IDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGNsYXNzLmMgKGNoZWNrX2Zvcl9vdmVycmlkZSk6IFRoZSBzaWduYXR1cmUgb2YgYW4gb3ZlcnJpZGluZwoJZnVuY3Rpb24gaXMgbm90IGNoYW5nZWQuCgoJKiBjYWxsLmMgKGJ1aWxkX292ZXJfY2FsbCk6IE1vdmUgc2V0dGluZyBvZiBjb252IGludG8gdGhlIGxvb3AuCglOb3RlOiB0aGlzIGNoYW5nZSwgYWxvbmcgd2l0aCB0aGUgcmVsYXRlZCBjaGFuZ2VzIG9mIHRoZSAxOHRoIHRocnUKCXRoZSAyMHRoIG9mIEFwcmlsLCBmaXggYW4gaW5maW5pdGUgbG9vcCBwcm9ibGVtIGluIGNvbnZlcnNpb25zLgoKU3VuIEFwciAyMCAxNjoyNDoyOSAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjYWxsLmMgKGJ1aWxkX3VzZXJfdHlwZV9jb252ZXJzaW9uXzEpOiBSZWFsbHkgaWdub3JlIHJ2YWx1ZQoJY29udmVyc2lvbnMgd2hlbiBsb29raW5nIGZvciBhIFJFRkVSRU5DRV9UWVBFLgoKCSogY3Z0LmMgKGJ1aWxkX3VwX3JlZmVyZW5jZSk6IEV2aXNjZXJhdGUsIHVzZSBidWlsZF91bmFyeV9vcC4KCSogY3AtdHJlZS5oIChUUkVFX1JFRkVSRU5DRV9FWFBSKTogI2lmIDAuCgkqIHR5cGVjay5jIChkZWNheV9jb252ZXJzaW9uKTogRG9uJ3Qgc2V0IFRSRUVfUkVGRVJFTkNFX0VYUFIuCgkoYnVpbGRfdW5hcnlfb3ApOiBMaWtld2lzZS4KCSogY2FsbC5jIChidWlsZF9vdmVyX2NhbGwpOiBTZWUgdGhyb3VnaCBhIENPTlZFUlRfRVhQUiBhcm91bmQgdGhlCglBRERSX0VYUFIgZm9yIG9uIGEgdGVtcG9yYXJ5LgoJKiB0eXBlY2suYyAoY19leHBhbmRfcmV0dXJuKTogU2VlIHRocm91Z2ggYSBDT05WRVJUX0VYUFIgYXJvdW5kCgl0aGUgQUREUl9FWFBSIGZvciBhIGxvY2FsIHZhcmlhYmxlLgoKRnJpIEFwciAxOCAxMjoxMTozMyAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjYWxsLmMgKGJ1aWxkX3VzZXJfdHlwZV9jb252ZXJzaW9uXzEpOiBJZiB3ZSdyZSB0cnlpbmcgdG8KCWNvbnZlcnQgdG8gYSBSRUZFUkVOQ0VfVFlQRSwgb25seSBjb25zaWRlciBsdmFsdWUgY29udmVyc2lvbnMuCgkoYnVpbGRfbmV3X2Z1bmN0aW9uX2NhbGwpOiBQcmludCBjYW5kaWRhdGVzLgoJKGltcGxpY2l0X2NvbnZlcnNpb24pOiBUcnkgYSB0ZW1wIGJpbmRpbmcgaWYgdGhlIGx2YWx1ZSBjb252IGlzIEJBRC4KCShyZWZlcmVuY2VfYmluZGluZyk6IEJpbmRpbmcgYSB0ZW1wb3Jhcnkgb2YgYSByZWZlcmVuY2UtcmVsYXRlZCB0eXBlCglpcyBCQUQuCgpUaHUgQXByIDE3IDE0OjM3OjIyIDE5OTcgIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGxpc2EuY3lnbnVzLmNvbT4KCgkqIGluYy90eXBlaW5mbyAodHlwZV9pbmZvOjpiZWZvcmUpOiBBZGQgY3YtcXVhbGlmaWVyLXNlcS4KCSogdGluZm8yLmNjICh0eXBlX2luZm86OmJlZm9yZSk6IExpa2V3aXNlLgoKTW9uIEFwciAxNCAxMjozODoxNyAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjYWxsLmMgKGltcGxpY2l0X2NvbnZlcnNpb24pOiBPb3BzLgoKRnJpIEFwciAxMSAwMjoxODozMCAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjYWxsLmMgKGltcGxpY2l0X2NvbnZlcnNpb24pOiBUcnkgdG8gZmluZCBhIHJlZmVyZW5jZSBjb252ZXJzaW9uCgliZWZvcmUgYmluZGluZyBhIGNvbnN0IHJlZmVyZW5jZSB0byBhIHRlbXBvcmFyeS4KCldlZCBBcHIgIDIgMTI6NTE6MzYgMTk5NyAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgoKCSogZXhjZXB0aW9uLmNjIChfX2RlZmF1bHRfdW5leHBlY3RlZCk6IENhbGwgdGVybWluYXRlIGJ5IGRlZmF1bHQsCglzbyB0aGF0IGlmIHRoZSB1c2VyIG92ZXJyaWRlcyB0ZXJtaW5hdGUsIHRoZSBjb3JyZWN0IGZ1bmN0aW9uIHdpbGwKCWJlIGNhbGxlZC4KCQpXZWQgTWFyIDE5IDE0OjE0OjQ1IDE5OTcgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnkgKGxlZnRfY3VybHkpOiBBdm9pZCB0cnlpbmcgdG8gdXNlIGFueSBmaWVsZHMgb2YKCWVycm9yX21hcmtfbm9kZSwgYXMgdGhlcmUgYXJlbid0IGFueS4KClRodSBNYXIgMTMgMTY6MzM6MjIgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogbGV4LmMgKGRvX2lkZW50aWZpZXIpOiBBdm9pZCBicmVha2luZyBvbiBvdmVybG9hZGVkIG1ldGhvZHMKCWFzIGRlZmF1bHQgYXJndW1lbnRzLgoKV2VkIE1hciAxMiAxMzo1NToxMCAxOTk3ICBIYW5zLVBldGVyIE5pbHNzb24gIDxIYW5zLVBldGVyLk5pbHNzb25AYXhpcy5zZT4KCgkqIGNhbGwuYyAoYWRkX3RlbXBsYXRlX2NhbmRpZGF0ZSk6IEluaXRpYWxpemUgdGhlIHZhcmlhYmxlICJkdW1teSIuCgpNb24gTWFyIDEwIDE1OjEzOjE0IDE5OTcgIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGNhbnVjay5jeWdudXMuY29tPgoKCSogZGVjbC5jIChzdGFydF9kZWNsKTogTWFrZSBzdXJlIFRZUEUgaXNuJ3QgYW4gZXJyb3JfbWFya19ub2RlCgliZWZvcmUgd2UgdHJ5IHRvIHVzZSBUWVBFX1NJWkUgYW5kIFRSRUVfQ09OU1RBTlQgb24gaXQuCgpGcmkgTWFyICA3IDEzOjE5OjM2IDE5OTcgIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGxpc2EuY3lnbnVzLmNvbT4KCgkqIGNwLXRyZWUuaCAoY29tcF9wdHJfdHR5cGVzLCBtb3JlX3NwZWNpYWxpemVkKTogQWRkIGRlY2wuCgkoZGVidWdfYmluZm8pOiBEZWxldGUgZGVjbCwgbm90IG5lZWRlZC4KCgkqIHRyZWUuYyAoZm5hZGRyX2Zyb21fdnRhYmxlX2VudHJ5LCBmdW5jdGlvbl9hcmdfY2hhaW4sCglwcm9tb3Rlc190b19hZ2dyX3R5cGUpOiBEZWxldGUgZm5zLgoJKiBjcC10cmVlLmggKEZOQUREUl9GUk9NX1ZUQUJMRV9FTlRSWSwKCVNFVF9GTkFERFJfRlJPTV9WVEFCTEVfRU5UUlksIEZVTkNUSU9OX0FSR19DSEFJTiwKCVBST01PVEVTX1RPX0FHR1JfVFlQRSk6IERlbGV0ZSBhbHRlcm5hdGVzIHRvICNpZiAxLgoKCSogZGVjbC5jIChwZW5kaW5nX2ludmFsaWRfeHJlZnssX2ZpbGUsX2xpbmV9KTogRGVsZXRlIHVudXNlZCB2YXJzLgoKCSogZnJpZW5kLmMgKGlzX2ZyaWVuZF90eXBlKTogRGVsZXRlIGZuLgoJKiBjcC10cmVlLmggKGlzX2ZyaWVuZF90eXBlKTogRGVsZXRlIGRlY2wuCgoJKiBkZWNsLmMgKG9yaWdpbmFsX3Jlc3VsdF9ydHgsIGRvdWJsZV9mdHlwZV9kb3VibGUsCglkb3VibGVfZnR5cGVfZG91YmxlX2RvdWJsZSwgaW50X2Z0eXBlX2ludCwgbG9uZ19mdHlwZV9sb25nLAoJZmxvYXRfZnR5cGVfZmxvYXQsIGxkb3VibGVfZnR5cGVfbGRvdWJsZSwgbGFzdF9kdG9yX2luc24pOiBNYWtlIHN0YXRpYy4KCSogdHlwZWNrLmMgKG9yaWdpbmFsX3Jlc3VsdF9ydHgsIHdhcm5fc3ludGgpOiBEZWxldGUgZXh0ZXJuIGRlY2xzLgoKCSogZGVjbC5jIChwdXNoX292ZXJsb2FkZWRfZGVjbHssX3RvcF9sZXZlbH0pOiBNYWtlIHN0YXRpYywgYWRkaW5nCglmd2QgZGVjbHMuCgkqIGNwLXRyZWUuaCAocHVzaF9vdmVybG9hZGVkX2RlY2x7LF90b3BfbGV2ZWx9KTogRGVsZXRlIGRlY2xzLgoKCSogZGVjbC5jIChwdXNoZGVjbF9ub25jbGFzc19sZXZlbCk6ICNpZiAwLCB1bnVzZWQuCgkqIGNwLXRyZWUuaCAocHVzaGRlY2xfbm9uY2xhc3NfbGV2ZWwpOiAjaWYgMCBkZWNsLgoKCSogbGV4LmMgKHJlaW5pdF9sYW5nX3NwZWNpZmljKTogI2lmIDAsIHVudXNlZC4KCSogY3AtdHJlZS5oIChyZWluaXRfbGFuZ19zcGVjaWZpYyk6ICNpZiAwIGRlY2wuCgoJKiBkZWNsLmMgKHJldmVydF9zdGF0aWNfbWVtYmVyX2ZuKTogTWFrZSBzdGF0aWMsIGFkZGluZyBmd2QgZGVjbC4KCSogY3AtdHJlZS5oIChyZXZlcnRfc3RhdGljX21lbWJlcl9mbik6IERlbGV0ZSBkZWNsLgoKCSogY2xhc3MuYyAocm9vdF9sYW5nX2NvbnRleHRfcCk6IERlbGV0ZSBmbi4KCSogY3AtdHJlZS5oIChyb290X2xhbmdfY29udGV4dF9wKTogRGVsZXRlIGRlY2wuCgoJKiBkZWNsLmMgKHNldF9jdXJyZW50X2xldmVsX3RhZ3NfdHJhbnNwYXJlbmN5KTogI2lmIDAsIHVudXNlZC4KCSogY3AtdHJlZS5oIChzZXRfY3VycmVudF9sZXZlbF90YWdzX3RyYW5zcGFyZW5jeSk6ICNpZiAwIGRlY2wuCgoJKiBsZXguYyAoc2V0X3ZhcmRlY2xfaW50ZXJmYWNlX2luZm8pOiBNYWtlIHN0YXRpYy4KCSogY3AtdHJlZS5oIChzZXRfdmFyZGVjbF9pbnRlcmZhY2VfaW5mbyk6IERlbGV0ZSBkZWNsLgoKCSogY2FsbC5jIChmaW5kX3Njb3BlZF90eXBlKTogTWFrZSBzdGF0aWMuCgkqIGNwLXRyZWUuaCAoZmluZF9zY29wZWRfdHlwZSk6IERlbGV0ZSBkZWNsLgoKCSogc2VhcmNoLmMgKGNvbnZlcnRfcG9pbnRlcl90b192YmFzZSk6IE1ha2Ugc3RhdGljLgoJKiBjcC10cmVlLmggKGNvbnZlcnRfcG9pbnRlcl90b192YmFzZSk6IERlbGV0ZSBkZWNsLgoKCSogZGVjbC5jIChjb25zdF9wdHJfdHlwZV9ub2RlKTogTGlrZXdpc2UuCgkqIGNwLXRyZWUuaCAoY29uc3RfcHRyX3R5cGVfbm9kZSk6IERlbGV0ZSBkZWNsLgoKCSogdHlwZWNrLmMgKGNvbW1vbl9iYXNlX3R5cGUpOiBNYWtlIHN0YXRpYy4KCSogY3AtdHJlZS5oIChjb21tb25fYmFzZV90eXBlcyk6IERlbGV0ZSBlcnJvbmVvdXMgZGVjbC4KCgkqIHB0LmMgKGNsYXNzdHlwZV9tYW5nbGVkX25hbWUpOiBNYWtlIHN0YXRpYy4KCSogY3AtdHJlZS5oIChjbGFzc3R5cGVfbWFuZ2xlZF9uYW1lKTogRGVsZXRlIGRlY2wuCgoJKiBsZXguYyAoY2hlY2tfbmV3bGluZSk6IE1ha2Ugc3RhdGljLgoJKiBjcC10cmVlLmggKGNoZWNrX25ld2xpbmUpOiBEZWxldGUgZGVjbC4KCgkqIHR5cGVjay5jIChidWlsZF94X2FycmF5X3JlZik6IERlbGV0ZSBmbiwgc2FtZSBpZGVhIGFzCglncm9rX2FycmF5X2RlY2wuCgkqIGNwLXRyZWUuaCAoYnVpbGRfeF9hcnJheV9yZWYpOiBEZWxldGUgZGVjbC4KCgkqIGxleC5jIChjb3B5X2RlY2xfbGFuZ19zcGVjaWZpYyk6IERlbGV0ZSBmbiwgc2FtZSBpZGVhIGFzCgljb3B5X2xhbmdfZGVjbC4KCSogY3AtdHJlZS5oIChjb3B5X2RlY2xfbGFuZ19zcGVjaWZpYyk6ICNpZiAwIGRlY2wuCgoJKiBjbGFzcy5jIChidWlsZF92dGFibGVfZW50cnkpOiBNYWtlIHN0YXRpYy4KCSogY3AtdHJlZS5oIChidWlsZF92dGFibGVfZW50cnkpOiBEZWxldGUgZGVjbC4KCgkqIGNsYXNzLmMgKGJ1aWxkX3ZiYXNlX3BvaW50ZXIpOiBNYWtlIHN0YXRpYy4KCSogY3AtdHJlZS5oIChidWlsZF92YmFzZV9wb2ludGVyKTogRGVsZXRlIGRlY2wuCgoJKiBzaWcuYyAoYnVpbGRfc3B0cl9yZWYpOiBBZGQgZm9yd2FyZCBkZWNsIGFuZCBtYWtlIHN0YXRpYy4KCSogY3AtdHJlZS5oIChidWlsZF9zcHRyX3JlZik6IERlbGV0ZSBkZWNsLgoKCSogY2FsbC5jIChidWlsZF9uZXdfbWV0aG9kX2NhbGwpOiBBZGQgZm9yd2FyZCBkZWNsIGFuZCBtYWtlIHN0YXRpYy4KCSogY3AtdHJlZS5oIChidWlsZF9uZXdfbWV0aG9kX2NhbGwpOiBEZWxldGUgZGVjbC4KCgkqIGNhbGwuYyAoYnVpbGRfb2JqZWN0X2NhbGwpOiBNYWtlIHN0YXRpYy4KCSogY2xhc3MuYyAoY2hlY2tfZm9yX292ZXJyaWRlLCBjb21wbGV0ZV90eXBlX3AsIG1hcmtfb3ZlcnJpZGVycyk6CglMaWtld2lzZS4KCSogZGVjbC5jIChjcF9mdW5jdGlvbl9jaGFpbik6IExpa2V3aXNlLgoJKiBsZXguYyAoc2V0X3R5cGVkZWNsX2ludGVyZmFjZV9pbmZvLCByZWluaXRfcGFyc2VfZm9yX2Jsb2NrKToKCUxpa2V3aXNlLgoJKiBwdC5jIChjb21wX3RlbXBsYXRlX2FyZ3MsIGdldF9jbGFzc19iaW5kaW5ncywgcHVzaF90aW5zdF9sZXZlbCk6CglMaWtld2lzZS4KCSogdHJlZS5jIChidWlsZF9jcGx1c19hcnJheV90eXBlXzEpOiBMaWtld2lzZS4KCSogdHlwZWNrLmMgKGNvbXBfcHRyX3R0eXBlc197Y29uc3QscmVhbCxyZWludGVycHJldH0pOiBMaWtld2lzZS4KCShjb21wX3RhcmdldF9wYXJtcyk6IExpa2V3aXNlLgoKCSogaW5pdC5jIChidWlsZF9idWlsdGluX2NhbGwpOiBNYWtlIHN0YXRpYy4KCSogY3AtdHJlZS5oIChidWlsZF9idWlsdGluX2NhbGwpOiBEZWxldGUgZGVjbC4KCgkqIHR5cGVjay5jIChiaW5hcnlfb3BfZXJyb3IpOiBEZWxldGUgZGVjbC4KCSogY3AtdHJlZS5oIChiaW5hcnlfb3BfZXJyb3IpOiBMaWtld2lzZS4KClRodSBNYXIgIDYgMTY6MTM6NTIgMTk5NyAgQnJlbmRhbiBLZWhvZSAgPGJyZW5kYW5AbGlzYS5jeWdudXMuY29tPgoKCSogY2FsbC5jIChidWlsZF9tZXRob2RfY2FsbCk6IENvbXBhcmUgYWdhaW5zdCBlcnJvcl9tYXJrX25vZGUKCWRpcmVjdGx5LCByYXRoZXIgdGhhbiB0aGUgRVJST1JfTUFSSyB0cmVlIGNvZGUuCgkqIGN2dC5jIChjcF9jb252ZXJ0KTogTGlrZXdpc2UuCgkqIGRlY2wuYyAocHJpbnRfYmluZGluZ19sZXZlbCk6IExpa2V3aXNlLgoJKGR1cGxpY2F0ZV9kZWNscyk6IExpa2V3aXNlLgoJKGdyb2tkZWNsYXJhdG9yKTogTGlrZXdpc2UuCgkoZ3Jva2RlY2xhcmF0b3IpOiBMaWtld2lzZS4KCSogaW5pdC5jIChleHBhbmRfYWdncl9pbml0XzEpOiBMaWtld2lzZS4KCShkZWNsX2NvbnN0YW50X3ZhbHVlKTogTGlrZXdpc2UuCgkqIG1ldGhvZC5jIChidWlsZF9vcGZuY2FsbCk6IExpa2V3aXNlLgoJKGhhY2tfaWRlbnRpZmllcik6IExpa2V3aXNlLgoJKiB0eXBlY2suYyAoYnVpbGRfbW9kaWZ5X2V4cHIpOiBMaWtld2lzZS4KCgkqIHR5cGVjay5jIChidWlsZF9jX2Nhc3QpOiBEb24ndCBkZWNsIFRZUEUgYXMgcmVnaXN0ZXIgdHJlZS4KClN1biBNYXIgIDIgMDI6NTQ6MzYgMTk5NyAgQnJ1bm8gSGFpYmxlICA8YnJ1bm9AbGludWl4Lm1hdGhlbWF0aWsudW5pLWthcmxzcnVoZS5kZT4KCgkqIHB0LmMgKHVuaWZ5KTogU3RyaXAgTk9QX0VYUFIgd3JhcHBlcnMgYmVmb3JlIHVuaWZ5aW5nIGludGVnZXIgdmFsdWVzLgoKCSogcHQuYyAoY29lcmNlX3RlbXBsYXRlX3Bhcm1zKTogQWRkIG5ldyBlcnJvciBtZXNzYWdlLgoKCSogbWV0aG9kLmMgKGJ1aWxkX292ZXJsb2FkX3ZhbHVlKTogSW1wbGVtZW50IG5hbWUgbWFuZ2xpbmcgZm9yCglmbG9hdGluZy1wb2ludCB0ZW1wbGF0ZSBhcmd1bWVudHMuCgoJKiBtZXRob2QuYyAoYnVpbGRfb3ZlcmxvYWRfaW50LCBpY2F0LCBkaWNhdCk6IEZpeCBtYW5nbGluZyBvZiB0ZW1wbGF0ZQoJYXJndW1lbnRzIHdob3NlIGFic29sdXRlIHZhbHVlIGRvZXNuJ3QgZml0IGluIGEgc2lnbmVkIHdvcmQuCgpNb24gTWFyICAzIDEyOjE0OjU0IDE5OTcgIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGxpc2EuY3lnbnVzLmNvbT4KCgkqIGZyaWVuZC5jOiBOZXcgZmlsZTsgcHV0IGFsbCBvZiB0aGUgZnJpZW5kIHN0dWZmIGluIGhlcmUuCgkqIGluaXQuYzogSW5zdGVhZCBvZiBoZXJlLgoJKiBNYWtlZmlsZS5pbiAoQ1hYX09CSlMpOiBBZGQgZnJpZW5kLm8uCgkoZnJpZW5kLm8pOiBBZGQgZGVwZW5kZW5jaWVzLgoJKiBNYWtlLWxhbmcuaW4gKENYWF9TUkNTKTogQWRkICQoc3JjZGlyKS9jcC9mcmllbmQuYy4KClN1biBNYXIgIDIgMTE6MDQ6NDMgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY2FsbC5jIChidWlsZF9zY29wZWRfbWV0aG9kX2NhbGwpOiBDb21wbGFpbiBpZiB0aGUgc2NvcGUgaXNuJ3QgYQoJYmFzZS4KCldlZCBGZWIgMjYgMTE6MzE6MDYgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogcGFyc2UueSAobGVmdF9jdXJseSk6IERvbid0IGNyYXNoIG9uIGVycm9uZW91cyB0eXBlLgoKCSogaW5pdC5jIChidWlsZF9kZWxldGUpOiBGaXggdHlwZSBvZiByZWYuCgpUdWUgRmViIDI1IDEyOjQxOjQ4IDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHNlYXJjaC5jIChnZXRfdmJhc2VfMSk6IFJlbmFtZWQgZnJvbSBnZXRfdmJhc2UuCgkoZ2V0X3ZiYXNlKTogV3JhcHBlciwgbm93IG5vbi1zdGF0aWMuCgkoY29udmVydF9wb2ludGVyX3RvX3ZiYXNlKTogTm93IHN0YXRpYy4KCgkqIGNhbGwuYyAoYnVpbGRfc2NvcGVkX21ldGhvZF9jYWxsKTogQWNjZXB0IGEgYmluZm8gZm9yIEJBU0VUWVBFLgoJKiBpbml0LmMgKGJ1aWxkX2RlbGV0ZSk6IFBhc3Mgb25lLgoJKGJ1aWxkX3BhcnRpYWxfY2xlYW51cF9mb3IpOiBVc2UgYnVpbGRfc2NvcGVkX21ldGhvZF9jYWxsLgoJKiBkZWNsLmMgKGZpbmlzaF9mdW5jdGlvbik6IFBhc3MgYSBiaW5mby4KCk1vbiBGZWIgMjQgMTU6MDA6MTIgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY2FsbC5jIChidWlsZF9vdmVyX2NhbGwpOiBPbmx5IHN5bnRoZXNpemUgbm9uLXRyaXZpYWwgY29weSBjdG9ycy4KCgkqIHR5cGVjay5jIChidWlsZF9jX2Nhc3QpOiBMb3NlIG90aGVyIHJlZmVyZW5jZSB0byBmbGFnLgoKCSogY2FsbC5jIChidWlsZF9maWVsZF9jYWxsKTogRG9uJ3QgbG9vayBmb3IgW2NkXXRvcl9pZGVudGlmaWVyLgoJKiBkZWNsMi5jIChkZWxldGVfc2FuaXR5KTogUmVtb3ZlIG1lYW5pbmdsZXNzIHVzZSBvZgoJTE9PS1VQX0hBU19JTl9DSEFSR0UuCgkqIGRlY2wuYyAoZmluaXNoX2Z1bmN0aW9uKTogVXNlIGJ1aWxkX3Njb3BlZF9tZXRob2RfY2FsbCBpbnN0ZWFkCglvZiBidWlsZF9kZWxldGUgZm9yIHJ1bm5pbmcgdmJhc2UgZHRvcnMuCgkqIGluaXQuYyAoYnVpbGRfZGVsZXRlKTogQ2FsbCBvdmVybG9hZCByZXNvbHV0aW9uIGNvZGUgaW5zdGVhZCBvZgoJZHVwbGljYXRpbmcgaXQgYmFkbHkuCgpUaHUgRmViIDIwIDE1OjEyOjE1IDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGNhbGwuYyAoYnVpbGRfb3Zlcl9jYWxsKTogQ2FsbCBtYXJrX3VzZWQgYmVmb3JlIHRyeWluZyB0byBlbGlkZQoJdGhlIGNhbGwuCgoJKiBkZWNsLmMgKGltcGxpY2l0bHlfZGVjbGFyZSk6IERvbid0IHNldCBERUNMX0FSVElGSUNJQUwuCgpXZWQgRmViIDE5IDExOjE4OjUzIDE5OTcgIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGxpc2EuY3lnbnVzLmNvbT4KCgkqIHR5cGVjay5jIChidWlsZF9tb2RpZnlfZXhwcik6IEFsd2F5cyBwZWR3YXJuIGZvciBhIGNhc3QgdG8KCW5vbi1yZWZlcmVuY2UgdXNlZCBhcyBhbiBsdmFsdWUuCgpXZWQgRmViIDE5IDEwOjM1OjM3IDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGN2dC5jIChjcF9jb252ZXJ0X3RvX3BvaW50ZXIpOiBDb252ZXJ0IGZyb20gMCB0byBhIHBtZiBwcm9wZXJseS4KClR1ZSBGZWIgMTggMTU6NDA6NTcgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogcGFyc2UueSAoaGFuZGxlcik6IEZpeCB0ZW1wbGF0ZSB0eXBvLgoKU3VuIEZlYiAxNiAwMjoxMjoyOCAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBlcnJvci5jIChsYW5nX2RlY2xfbmFtZSk6IE5ldyBmbi4KCSogdHJlZS5jIChsYW5nX3ByaW50YWJsZV9uYW1lKTogVXNlIGl0LgoKRnJpIEZlYiAxNCAxNjo1NzowNSAxOTk3ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiBnKytzcGVjLmM6IEluY2x1ZGUgY29uZmlnLmggc28gdGhhdCB3ZSBjYW4gY2F0Y2ggYnplcm8gI2RlZmluZXMKCWZyb20gdGhlIGNvbmZpZyBmaWxlLgoKVHVlIEZlYiAxMSAxMzo1MDo0OCAxOTk3ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiBuZXcxLmNjOiBJbmNsdWRlIGEgZGVjbGFyYXRpb24gZm9yIG1hbGxvYywgdG8gYXZvaWQgd2FybmluZywgYW5kCglhdm9pZCBsb3NzaW5nIG9uIHN5c3RlbXMgdGhhdCByZXF1aXJlIG9uZSAob25lcyB0aGF0IGRlZmluZSBtYWxsb2MKCWluIHhtLmgpLgoKTW9uIEZlYiAxMCAyMjo1MToxMyAxOTk3ICBCcnVubyBIYWlibGUJPGJydW5vQGxpbnVpeC5tYXRoZW1hdGlrLnVuaS1rYXJsc3J1aGUuZGU+CgoJKiBkZWNsMi5jIChtYXhfdGluc3RfZGVwdGgpOiBOZXcgdmFyaWFibGUuCgkobGFuZ19kZWNvZGVfb3B0aW9uKTogUGFyc2UgIi1mdGVtcGxhdGUtZGVwdGgtTk4iIGNvbW1hbmQgbGluZQoJb3B0aW9uLgoJKiBwdC5jIChtYXhfdGluc3RfZGVwdGgpOiBWYXJpYWJsZSBtb3ZlZC4KCSogbGFuZy1vcHRpb25zLmg6IERlY2xhcmUgIi1mdGVtcGxhdGUtZGVwdGgtTk4iIGNvbW1hbmQgbGluZSBvcHRpb24KCWFzIGxlZ2FsLgoKRnJpIEZlYiAgNyAxNTo0MzozNCAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBkZWNsLmMgKHhyZWZfYmFzZXR5cGVzKTogQWxsb3cgYSBiYXNlIGNsYXNzIHRoYXQgZGVwZW5kcyBvbgoJdGVtcGxhdGUgcGFybXMgdG8gYmUgaW5jb21wbGV0ZS4KCgkqIGRlY2wyLmMgKGJ1aWxkX2V4cHJfZnJvbV90cmVlKTogU3VwcG9ydCB0eXBlaWQodHlwZSkuCgkqIHJ0dGkuYyAoZ2V0X3R5cGVpZCk6IFN1cHBvcnQgdGVtcGxhdGVzLgoJKGV4cGFuZF9zaV9kZXNjLCBleHBhbmRfY2xhc3NfZGVzYyk6IEZpeCBzdHJpbmcgbGVuZ3RoLgoJKGV4cGFuZF9wdHJfZGVzYywgZXhwYW5kX2F0dHJfZGVzYywgZXhwYW5kX2dlbmVyaWNfZGVzYyk6IExpa2V3aXNlLgoKVHVlIEZlYiAgNCAxMToyODoyNCAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBwdC5jICh1bmlmeSwgY2FzZSBURU1QTEFURV9DT05TVF9QQVJNKTogVXNlIGNwX3RyZWVfZXF1YWwuCgoJKiBwdC5jICh0c3Vic3QpOiBQdXQgaXQgYmFjayBmb3IgLWZuby1hbnNpLW92ZXJsb2FkaW5nLgoKTW9uIEZlYiAgMyAxODo0MToxMiAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBwdC5jICh0c3Vic3QsIGNhc2UgRlVOQ1RJT05fREVDTCk6IExvc2Ugb2Jzb2xldGUgY29kZSB0aGF0CglzbWFzaGVzIHRvZ2V0aGVyIHRlbXBsYXRlIGFuZCBub24tdGVtcGxhdGUgZGVjbHMgb2YgdGhlIHNhbWUKCXNpZ25hdHVyZS4KClRodSBKYW4gMzAgMTk6MTg6MDAgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogcHQuYyAodHN1YnN0KTogRG9uJ3QgcmVjdXJzZSBmb3IgdGhlIHR5cGUgb2YgYSBUWVBFTkFNRV9UWVBFLgoKV2VkIEphbiAyOSAxMTo0MDozNSAxOTk3ICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBsaXNhLmN5Z251cy5jb20+CgoJKiBkZWNsLmMgKGR1cGxpY2F0ZV9kZWNscyk6IE5leHQgcm91dGUsIHBlZHdhcm4gYWJvdXQgZGlmZmVyZW50CglleGNlcHRpb25zIGlmIC1wZWRhbnRpYyAqb3IqIG9sZGRlY2wgIURFQ0xfSU5fU1lTVEVNX0hFQURFUi4KClR1ZSBKYW4gMjggMjA6NDM6MjkgMTk5NyAgQnJlbmRhbiBLZWhvZSAgPGJyZW5kYW5AbGlzYS5jeWdudXMuY29tPgoKCSogY3AtdHJlZS5oIChIQVNfREVGQVVMVF9JTVBMRU1FTlRBVElPTik6IERlbGV0ZSBtYWNyby4KCShzdHJ1Y3QgbGFuZ190eXBlKTogRGVsZXRlIGhhc19kZWZhdWx0X2ltcGxlbWVudGF0aW9uIG1lbWJlci4KCUluY3JlYXNlIGR1bW15IHRvIDIxLgoJKiBkZWNsLmMgKHN0YXJ0X21ldGhvZCk6IERlbGV0ZSB1c2FnZS4KCgkqIGNwLXRyZWUuaCAoYnVpbGRfY2FsbCwgbnVsbF9wdHJfY3N0X3AsIGluX2Z1bmN0aW9uX3AsCglzdG9yZV9hZnRlcl9wYXJtcywgc3RhcnRfZGVjbF8xLCBhdXRvX2Z1bmN0aW9uKTogQWRkIGRlY2xzLgoJKGdldF9hcmdsaXN0X2xlbl9pbl9ieXRlcywgZGVjbGFyZV9pbXBsaWNpdF9leGNlcHRpb24sCgloYXZlX2V4Y2VwdGlvbnNfcCwgbWFrZV90eXBlX2RlY2wsIHR5cGVkZWNsX2Zvcl90YWcsCglzdG9yZV9pbl9wYXJtcywgcG9wX2ltcGxpY2l0X3RyeV9ibG9ja3MsIHB1c2hfZXhjZXB0aW9uX2NsZWFudXAsCglidWlsZF9jb21wb25lbnRfdHlwZV9leHByLCBjcGx1c19leGNlcHRpb25fbmFtZSwKCXttYWtlLGNsZWFyfV9hbm9uX3Bhcm1fbmFtZSwgZG9udF9zZWVfdHlwZW5hbWUpOiBSZW1vdmVkIGRlY2xzLgoJKiBjYWxsLmMgKGJ1aWxkX3RoaXMpOiBNYWtlIHN0YXRpYy4KCShpc19jb21wbGV0ZSk6IExpa2V3aXNlLgoJKGltcGxpY2l0X2NvbnZlcnNpb24pOiBMaWtld2lzZS4KCShyZWZlcmVuY2VfYmluZGluZyk6IExpa2V3aXNlLgoJKHN0YW5kYXJkX2NvbnZlcnNpb24pOiBMaWtld2lzZS4KCShzdHJpcF90b3BfcXVhbHMpOiBMaWtld2lzZS4KCShub25fcmVmZXJlbmNlKTogTGlrZXdpc2UuCgkoYnVpbGRfY29udik6IExpa2V3aXNlLgoJKHVzZXJfaGFyc2huZXNzKTogTGlrZXdpc2UuCgkocmFua19mb3JfaWRlYWwpOiBMaWtld2lzZS4KCSogZGVjbC5jIChzdGFydF9kZWNsXzEpOiBEZWxldGUgZm9yd2FyZCBkZWNsLgoJKHB1c2hfZGVjbF9sZXZlbCk6IE1ha2Ugc3RhdGljLgoJKHJlc3VtZV9iaW5kaW5nX2xldmVsKTogTWFrZSBzdGF0aWMuCgkobmFtZXNwYWNlX2JpbmRpbmdzX3ApOiBNYWtlIHN0YXRpYy4KCShkZWNsYXJlX25hbWVzcGFjZV9sZXZlbCk6IE1ha2Ugc3RhdGljLgoJKGxvb2t1cF9uYW1lX3JlYWwpOiBNYWtlIHN0YXRpYy4KCShkdXBsaWNhdGVfZGVjbHMpOiBNYWtlIHN0YXRpYy4gIFRha2UgcmVnaXN0ZXIgb2ZmIE5FV0RFQ0wgYW5kCglPTERERUNMIHBhcm0gZGVjbHMuCgkqIGRlY2wyLmMgKGdldF9zZW50cnkpOiBNYWtlIHN0YXRpYy4KCSh0ZW1wX25hbWVfcCk6IERlbGV0ZSBmbi4KCSogZXhjZXB0LmMgKGF1dG9fZnVuY3Rpb24pOiBEZWxldGUgZGVjbC4KCSogbGV4LmMgKGhhbmRsZV97Y3Asc3lzdn1fcHJhZ21hKTogTWFrZSBzdGF0aWMuCgkoaGFuZGxlX3N5c3ZfcHJhZ21hKSBbSEFORExFX1NZU1ZfUFJBR01BXTogQWRkIGZvcndhcmQgZGVjbC4KCSogbWV0aG9kLmMgKGRvX2J1aWxkX3tjb3B5X2NvbnN0cnVjdG9yLGFzc2lnbl9yZWZ9KTogTWFrZSBzdGF0aWMuCgkqIHB0LmMgKHRzdWJzdF9leHByX3ZhbHVlcyk6IE1ha2Ugc3RhdGljLgoJKiBydHRpLmMgKGNvbWJpbmVfc3RyaW5ncyk6IERlbGV0ZSBkZWNsLgoKVHVlIEphbiAyOCAxNjo0MDo0MCAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBwdC5jIChwdXNoX3RlbXBsYXRlX2RlY2wpOiBIYW5kbGUgZ2V0dGluZyBhIHR5cGVkZWYuCgoJKiBjYWxsLmMgKGJ1aWxkX25ld19mdW5jdGlvbl9jYWxsKTogQ29tcGxhaW4gYWJvdXQgdm9pZCBhcmcuCgpUdWUgSmFuIDI4IDE1OjI1OjA5IDE5OTcgIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGxpc2EuY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAoZHVwbGljYXRlX2RlY2xzKTogR2l2ZSBwZWR3YXJuIG9mIGRpZmZlcmVudCBleGNlcHRpb25zCglpZiAtcGVkYW50aWMsIGluc3RlYWQgb2Ygb2xkZGVjbCAhREVDTF9JTl9TWVNURU1fSEVBREVSLgoKTW9uIEphbiAyNyAxOToyMToyOSAxOTk3ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiBleGNlcHQuYyAoZXhwYW5kX3Rocm93KTogRG9uJ3QgZXhwYW5kIHRoZSBjbGVhbnVwIHRyZWUgaGVyZSwKCXNpbmNlIHdlIGFyZSBub3QgZ29pbmcgdG8gd3JpdGUgdGhlIHJ0bCBvdXQuICBGaXhlcyBwcm9ibGVtIHdpdGgKCS1nIC1PIG9uIFNQQVJDLgoKTW9uIEphbiAyNyAxNjoyNDozNSAxOTk3ICBTZWFuIE1jTmVpbCAgPHNlYW5AbWNuZWlsLmNvbT4KCgkqIE1ha2UtbGFuZy5pbjogQWRkICQoZXhlZXh0KSBhcyBuZWNlc3NhcnkuCgpNb24gSmFuIDI3IDEzOjIwOjM5IDE5OTcgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnkgKGhhbmRsZXJfc2VxKTogTXVzdCBoYXZlIGF0IGxlYXN0IG9uZSBjYXRjaCBjbGF1c2UuCgpTYXQgSmFuIDI1IDEyOjAwOjA1IDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGNhbGwuYyAoYWRkX2J1aWx0aW5fY2FuZGlkYXRlKTogUmVzdG9yZSA/OiBoYWNrLgoKCSogZGVjbC5jIChncm9rX29wX3Byb3BlcnRpZXMpOiBNb3JlIHdhcm5pbmdzLgoKU2F0IEphbiAyNSAwODo1MDowMyAxOTk3ICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBsaXNhLmN5Z251cy5jb20+CgoJKiBkZWNsLmMgKGR1cGxpY2F0ZV9kZWNscyk6IE9uIHNlY29uZCB0aG91Z2h0LCBkbyBpdCBhcyBhIHBlZHdhcm4KCXN0aWxsIGJ1dCBvbmx5IGlmICFERUNMX0lOX1NZU1RFTV9IRUFERVIgKG9sZGRlY2wpLgoKCSogZGVjbC5jIChkdXBsaWNhdGVfZGVjbHMpOiBTY2FsZSBiYWNrIHRvIGEgd2FybmluZywgYW5kIG9ubHkgZG8KCSdlbSBpZiAtcGVkYW50aWMuCgpGcmkgSmFuIDI0IDE3OjUyOjU0IDE5OTcgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAoZHVwbGljYXRlX2RlY2xzKTogcGVkd2FybiBtaXNtYXRjaGVkIGV4Y2VwdGlvbgoJc3BlY2lmaWNhdGlvbnMuCgpUaHUgSmFuIDIzIDE4OjE4OjU0IDE5OTcgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIGNhbGwuYyAoYnVpbGRfbmV3X21ldGhvZF9jYWxsKTogRG9uJ3QgZGlzcGxheSB0aGUgaW52aXNpYmxlCglhcmd1bWVudCBmb3IgY29udHJvbGxpbmcgdmlydHVhbCBiYXNlcy4KClRodSBKYW4gMjMgMTY6NDg6MTAgMTk5NyAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgoKCSogbmV3OiBBZGQgbm90aHJvdyBuZXcgYW5kIGRlbGV0ZSwgYmFkX2FsbG9jIGFuZCB0aHJvdyBzcGVjaWZpY2F0aW9ucwoJZm9yIGRlbGV0ZS4KCSogZGVjbC5jIChpbml0X2RlY2xfcHJvY2Vzc2luZyk6IEFkZCB0aHJvdyBzcGVjaWZpY2F0aW9uIGZvciBkZWxldGUuCgkqIG5ldy5jYyAobm90aHJvdyk6IERlZmluZS4KCSogbGV4LmMgKHJlYWxfeXlsZXgpOiBSZW1vdmluZyB3YXJuaW5nIHRoYXQgdGhyb3cgYW5kIGZyaWVuZHMgYXJlCglrZXl3b3Jkcy4KCSogbmV3MS5jYyAob3BlcmF0b3IgbmV3IChzaXplX3Qgc3osIGNvbnN0IG5vdGhyb3dfdCYpKTogRGVmaW5lLgoJKiBuZXcyLmNjIChvcGVyYXRvciBuZXdbXSAoc2l6ZV90IHN6LCBjb25zdCBub3Rocm93X3QmKTogRGVmaW5lLgoJKiBNYWtlLWxhbmcuaW46IEFkZCBuZXd7MSwyfS57Y2Msb30uCgpUaHUgSmFuIDIzIDE2OjM5OjA2IDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGxleC5jIChjb25zX3VwX2RlZmF1bHRfZnVuY3Rpb24pOiBGaXggcmV0dXJuIHR5cGUgb2Ygc3ludGggb3A9LgoKCSogaW5pdC5jIChlbWl0X2Jhc2VfaW5pdCk6IEFkZCB3YXJuaW5ncyBmb3IgdW5pbml0aWFsaXplZCBtZW1iZXJzCglhbmQgYmFzZXMuCgoJKiBkZWNsLmMgKHhyZWZfYmFzZXR5cGVzKTogQWRkIHdhcm5pbmcgZm9yIG5vbi1wb2x5bW9ycGhpYyB0eXBlCgl3aXRoIGRlc3RydWN0b3IgdXNlZCBhcyBiYXNlIHR5cGUuCgoJKiBkZWNsLmMgKGdyb2tfb3BfcHJvcGVydGllcyk6IEFkZCB3YXJuaW5nIGZvciBvcD0gcmV0dXJuaW5nIHZvaWQuCgkqIHR5cGVjay5jIChjX2V4cGFuZF9yZXR1cm4pOiBBZGQgd2FybmluZyBmb3Igb3A9IHJldHVybmluZyBhbnl0aGluZwoJb3RoZXIgdGhhbiAqdGhpcy4KCgkqIGNsYXNzLmMgKGZpbmlzaF9zdHJ1Y3RfMSk6IEFkZCB3YXJuaW5nIGZvciBjbGFzcyB3aXRoIHBvaW50ZXJzCglidXQgbm90IGNvcHkgY3RvciBvciBjb3B5IG9wPS4KCgkqIGNwLXRyZWUuaCAoVElfUEVORElOR19URU1QTEFURV9GTEFHKTogTmV3IG1hY3JvLgoJKiBwdC5jIChhZGRfcGVuZGluZ190ZW1wbGF0ZSk6IFVzZSBpdCBpbnN0ZWFkIG9mIExBTkdfRkxBR18wLgoJKGluc3RhbnRpYXRlX3RlbXBsYXRlKTogSWYgLWZleHRlcm5hbC10ZW1wbGF0ZXMsIGFkZCB0aGlzCglpbnN0YW50aWF0aW9uIHRvIHBlbmRpbmdfdGVtcGxhdGVzLgoKCSogZGVjbDIuYyAoY29weV9hc3NpZ25tZW50X2FyZ19wKTogRGlzYWJsZSBvbGQgaGFjayB0byBzdXBwb3J0CglCb29jaCBjb21wb25lbnRzLgoKVHVlIEphbiAyMSAxODozMjowNCAxOTk3ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiBjdnQuYyAoY3BfY29udmVydCk6IFBlZHdhcm4gZW51bSB0byBwb2ludGVyIGNvbnZlcnNpb25zLgoKTW9uIEphbiAyMCAxNzo1OTo1MSAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjYWxsLmMgKHN0YW5kYXJkX2NvbnZlcnNpb24pOiBIYW5kbGUgZ2V0dGluZyByZWZlcmVuY2VzLiAgVGFjawoJb24gUlZBTFVFX0NPTlYgaGVyZS4gIERvIGl0IGZvciBub24tY2xhc3MgdHlwZXMsIHRvby4KCShyZWZlcmVuY2VfYmluZGluZyk6IFBhc3MgcmVmZXJlbmNlcyB0byBzdGFuZGFyZF9jb252ZXJzaW9uLgoJKGltcGxpY2l0X2NvbnZlcnNpb24pOiBMaWtld2lzZS4KCShhZGRfYnVpbHRpbl9jYW5kaWRhdGUpOiBEaXNhYmxlIG9uZSA/OiBrbHVkZ2UuCgkoY29udmVydF9saWtlKTogSGFuZGxlIFJWQUxVRV9DT05WcyBmb3Igbm9uLWNsYXNzIHR5cGVzLgoJKGpvdXN0KTogRGlzYWJsZSB0aGUgb3RoZXIgPzoga2x1ZGdlLgoKTW9uIEphbiAyMCAxNDo1MzoxMyAxOTk3ICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBsaXNhLmN5Z251cy5jb20+CgoJKiBkZWNsLmMgKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogQWRkIGNvZGUgdG8gYnVpbGQgdXAgY29tbW9uCglmdW5jdGlvbiB0eXBlcyBiZWZvcmVoYW5kLCB0byBhdm9pZCBjcmVhdGlvbiB0aGVuIHJlbW92YWwgb2YKCXRoaW5ncyBhbHJlYWR5IGluIHRoZSBoYXNoIHRhYmxlLgoKTW9uIEphbiAyMCAxNDo0Mzo0OSAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBkZWNsLmMgKGZpbmlzaF9mdW5jdGlvbik6IEFsc28gemVybyBvdXQgREVDTF9JTkNPTUlOR19SVEwgZm9yCgl0aGUgYXJndW1lbnRzLgoKCSogZXJyb3IuYyAoZHVtcF9leHByLCBURU1QTEFURV9DT05TVF9QQVJNKTogRG9uJ3QgcmVxdWlyZQoJY3VycmVudF90ZW1wbGF0ZV9wYXJtcy4KCkZyaSBKYW4gMTcgMTA6MjU6NDIgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogc2VhcmNoLmMgKGxvb2t1cF9maWVsZCk6IERvbid0IHJldHVybiBhIGZ1bmN0aW9uLCBjaGVjayB3YW50X3R5cGUuCgpUaHUgSmFuIDE2IDE4OjE0OjM1IDE5OTcgIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGxpc2EuY3lnbnVzLmNvbT4KCgkqIGluaXQuYyAoYnVpbGRfbmV3KTogTWFrZSBzdXJlIFBMQUNFTUVOVCBoYXMgYSB0eXBlLgoKVGh1IEphbiAxNiAxNzo0MDoyOCAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBpbml0LmMgKGJ1aWxkX25ldyk6IFN1cHBvcnQgbmV3IChub3Rocm93KS4KCldlZCBKYW4gMTUgMTI6Mzg6MTQgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogcHQuYyAoaW5zdGFudGlhdGVfZGVjbCk6IEFsc28gZG8gcHVzaF90b190b3BfbGV2ZWwgYmVmb3JlIHNldHRpbmcKCXVwIERFQ0xfSU5JVElBTC4KCgkqIGNwLXRyZWUuaCAoUEFSTV9ERUZBVUxUX0ZST01fVEVNUExBVEUpOiBOZXcgbWFjcm8uCgkqIHB0LmMgKHRzdWJzdCk6IERlZmVyIGluc3RhbnRpYXRpb24gb2YgZGVmYXVsdCBhcmdzLgoJKiBjYWxsLmMgKGJ1aWxkX292ZXJfY2FsbCk6IFVudGlsIGhlcmUuCgpXZWQgSmFuIDE1IDEwOjA4OjEwIDE5OTcgIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGxpc2EuY3lnbnVzLmNvbT4KCgkqIHNlYXJjaC5jIChsb29rdXBfZmllbGQpOiBNYWtlIHN1cmUgd2UgaGF2ZSBhbgoJSURFTlRJRklFUl9DTEFTU19WQUxVRSBiZWZvcmUgd2UgdHJ5IHRvIHJldHVybiBpdC4KClRodSBKYW4gIDkgMDc6MTk6MDEgMTk5NyAgQnJlbmRhbiBLZWhvZSAgPGJyZW5kYW5AbGlzYS5jeWdudXMuY29tPgoKCSogY2FsbC5jIChidWlsZF9tZXRob2RfY2FsbCk6IERlbGV0ZSB1bnVzZWQgdmFyIFBBUk0uCgkoYnVpbGRfb3ZlcmxvYWRfY2FsbF9yZWFsKTogTGlrZXdpc2UuCgkoYnVpbGRfb2JqZWN0X2NhbGwpOiBEZWxldGUgdW51c2VkIHZhciBQLgoJKGJ1aWxkX25ld19vcCk6IExpa2V3aXNlLgoJKiBkZWNsLmMgKGJ1aWx0aW5fdHlwZV90ZGVzY3Nfe2FyciwgbGVuLCBtYXh9KTogI2lmIDAgb3V0IHN0YXRpYwoJdmFyIGRlZmluaXRpb25zLCB3aGljaCBhcmUgbmV2ZXIgdXNlZC4KCShzaGFkb3dfdGFnKTogRGVsZXRlIHVudXNlZCB2YXIgRk4uCgkqIGV4cHIuYyAoY3BsdXNfZXhwYW5kX2V4cHIpOiBEZWxldGUgdW51c2VkIHZhciBPUklHSU5BTF9UQVJHRVQuCgkqIGluaXQuYyAoYnVpbGRfbmV3KTogRGVsZXRlIHVudXNlZCB2YXIgQUxMT0NfVEVNUC4KCSogbWV0aG9kLmMgKGhhY2tfaWRlbnRpZmllcik6IERlbGV0ZSB1bnVzZWQgdmFyIENPTlRFWFQuCgkoZG9fYnVpbGRfY29weV9jb25zdHJ1Y3Rvcik6IERlbGV0ZSB1bnVzZWQgdmFyIE5BTUUuCgkoc3ludGhlc2l6ZV9tZXRob2QpOiBEZWxldGUgdW51c2VkIHZhciBCQVNFLgoJKiBwdC5jIChsb29rdXBfdGVtcGxhdGVfY2xhc3MpOiBEZWxldGUgdW51c2VkIHZhciBDT0RFX1RZUEVfTk9ERS4KCSogcnR0aS5jIChidWlsZF9oZWFkb2YpOiBEZWxldGUgdW51c2VkIHZhciBWUFRSLgoJKGdldF90eXBlaWQpOiBEZWxldGUgdW51c2VkIHZhciBULgoJKiB0eXBlY2suYyAoYnVpbGRfY29uZGl0aW9uYWxfZXhwcik6IERlbGV0ZSB1bnVzZWQgdmFycyBPUklHX09QMQoJYW5kIE9SSUdfT1AyLgoJKGJ1aWxkX3B0cm1lbWZ1bmMpOiBEZWxldGUgdW51c2VkIHZhcnMgVSBhbmQgTklOREVYLgoJKiB0eXBlY2syLmMgKGJ1aWxkX2Z1bmN0aW9uYWxfY2FzdCk6IERlbGV0ZSB1bnVzZWQgdmFyIEJJTkZPLgoKV2VkIEphbiAgOCAxMzowOTo1NCAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBzZWFyY2guYyAobG9va3VwX2ZpZWxkKTogVXNlIElERU5USUZJRVJfQ0xBU1NfVkFMVUUgdG8gbG9vayB1cAoJdGhpbmdzIGluIGEgdHlwZSBiZWluZyBkZWZpbmVkLgoJKiBkZWNsLmMgKGZpbmlzaF9lbnVtKTogUmV2ZXJzZSB0aGUgdmFsdWVzIHNvIHRoYXQgdGhleSBhcmUgaW4KCXRoZSBjb3JyZWN0IG9yZGVyLgoKCSogcHQuYyAoaW5zdGFudGlhdGVfY2xhc3NfdGVtcGxhdGUpOiBEb24ndCBpbml0aWFsaXplCglCSU5GT19CQVNFVFlQRVMgdW50aWwgdGhlIHZlY3RvciBpcyBmaWxsZWQgb3V0LgoJKHVuaWZ5KTogRG9uJ3QgYWJvcnQgb24gY29uZmxpY3RpbmcgYmluZGluZ3MsIGp1c3QgZmFpbC4KCShpbnN0YW50aWF0ZV9kZWNsKTogRG8gcHVzaF90aW5zdF9sZXZlbCBiZWZvcmUgYW55IHRzdWJzdGluZy4KCgkqIG1ldGhvZC5jIChidWlsZF9vdmVybG9hZF92YWx1ZSk6IEhhbmRsZSBnZXR0aW5nIGEKCVRFTVBMQVRFX0NPTlNUX1BBUk0gZm9yIGEgcG9pbnRlci4KClR1ZSBKYW4gIDcgMTQ6MDA6NTggMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogaW5pdC5jIChleHBhbmRfbWVtYmVyX2luaXQpOiBEb24ndCBnaXZlICdub3QgYSBiYXNlJyBlcnJvciBmb3IKCXRlbXBsYXRlcy4KCgkqIHB0LmMgKGluc3RhbnRpYXRlX2RlY2wpOiBDYWxsIGltcG9ydF9leHBvcnRfZGVjbCBsYXRlci4KCgkqIHB0LmMgKGluc3RhbnRpYXRlX2NsYXNzX3RlbXBsYXRlKTogUmV0dXJuIGEgdmFsdWUuCgoJKiBwYXJzZS55IChleHRlbnNpb24pOiBOZXcgcnVsZSBmb3IgX19leHRlbnNpb25fXy4KCShleHRkZWYsIHVuYXJ5X2V4cHIsIGRlY2wsIGNvbXBvbmVudF9kZWNsKTogVXNlIGl0LgoKVHVlIEphbiAgNyAwOToyMDoyOCAxOTk3ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiBjbGFzcy5jIChiYXNlX2JpbmZvKTogUmVtb3ZlIHVudXNlZCBiYXNlX2hhc192aXJ0dWFsIG1lbWJlci4KCShmaW5pc2hfYmFzZV9zdHJ1Y3QpOiBMaWtld2lzZS4KCShmaW5pc2hfc3RydWN0XzEpOiBMaWtld2lzZS4KClR1ZSBEZWMgMzEgMjA6MjU6NTAgMTk5NiAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgoKCSogc2VhcmNoLmMgKGV4cGFuZF91cGNhc3RfZml4dXBzKTogRml4IGJvZ3VzIGNvZGUgZ2VuZXJhdGlvbgoJcHJvYmxlbSB3aGVyZSB0aGUgZ2VuZXJhdGVkIGNvZGUgdXNlcyB0aGUgd3JvbmcgaW5kZXggaW50byB0aGUKCXJ1bnRpbWUgYnVpbHQgdnRhYmxlIG9uIHRoZSBzdGFjay4gIE9sZCBjb2RlIGNvdWxkIGNsb2JiZXIgcmFuZG9tCglzdGFjayB2YWx1ZXMuCgpUdWUgRGVjIDMxIDE1OjE2OjU2IDE5OTYgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIGluaXQuYyAocGVyZm9ybV9tZW1iZXJfaW5pdCk6IE1ha2Ugc3VyZSB0aGUgcGFydGlhbCBFSCBjbGVhbnVwcwoJbGl2ZSBvbiB0aGUgZnVuY3Rpb25fb2JzdGFjay4KCkZyaSBEZWMgMjcgMTA6MzE6NDAgMTk5NiAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+CgoJKiBNYWtlLWxhbmcuaW4gKGcrK3NwZWMubyk6IERvbid0IHVzZSAkPCB3aXRoIGFuIGV4cGxpY2l0IHRhcmdldDsKCXRoaXMgaXNuJ3QgcG9ydGFibGUgdG8gc29tZSB2ZXJzaW9ucyBvZiBgbWFrZScgKGUuZy4gU29sYXJpcyAyLjUuMSkuCgpUdWUgRGVjIDI0IDEwOjI0OjAzIDE5OTYgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGRlY2wuYyAoZ3Jva3ZhcmRlY2wpOiBBdm9pZCBBTlNJIHN0eWxlIGluaXRpYWxpemF0aW9uLgoKU3VuIERlYyAyMiAwNDoyMjowNiAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBwdC5jICh0c3Vic3QpOiBUd2VhayBhcmcgdHlwZXMgZm9yIGEgRlVOQ1RJT05fVFlQRS4KCkZyaSBEZWMgMjAgMTc6MDk6MjUgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogcHQuYyAoaW5zdGFudGlhdGVfY2xhc3NfdGVtcGxhdGUpOiBDYWxsIGdyb2tfe2N0b3Isb3B9X3Byb3BlcnRpZXMuCgpGcmkgRGVjIDIwIDEyOjE3OjEyIDE5OTYgIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGxpc2EuY3lnbnVzLmNvbT4KCgkqIGcrK3NwZWMuYyAobGFuZ19zcGVjaWZpY19kcml2ZXIpOiBQdXQgbWlzc2luZyBoeXBoZW4gaW4gZnJvbnQgb2YKCWFyZ3VtZW50cyB3ZSBjb21wYXJlIGFnYWluc3QuICBTdGFydCB0aGUgY291bnQgb2YgSSBhdCAxLCBub3QgMCwKCXNpbmNlIGFyZ3ZbMF0gaXMgc3RpbGwgdGhlIGNvbW1hbmQuCgpUaHUgRGVjIDE5IDExOjUzOjU3IDE5OTYgIFN0YW4gU2hlYnMgIDxzaGVic0BhbmRyb3MuY3lnbnVzLmNvbT4KCgkqIGxhbmctc3BlY3MuaDogQWNjZXB0IC5jcCBhcyBhbiBDKysgZXh0ZW5zaW9uLgoKTW9uIERlYyAxNiAyMjo0MzozMSAxOTk2ICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBsaXNhLmN5Z251cy5jb20+CgoJKiBjcC10cmVlLmggKHB0cl9yZWFzb25hYmx5X3NpbWlsYXIpOiBBZGQgZGVjbC4KClRodSBEZWMgMTIgMTU6MDA6MzUgMTk5NiAgQnJlbmRhbiBLZWhvZSAgPGJyZW5kYW5AbGlzYS5jeWdudXMuY29tPgoKCSogZGVjbC5jIChncm9rdmFyZGVjbCk6IENoYW5nZSBTUEVDQklUUyBwYXJtIHRvIGJlIHRoZSBTUEVDQklUU19JTgoJcG9pbnRlci4gIE5ldyBsb2NhbCBTUEVDQklUUyB3aXRoIHRoZSBwYXJtJ3MgdmFsdWUuCgkoZ3Jva2RlY2xhcmF0b3IpOiBQYXNzICZzcGVjYml0cyBkb3duLgoKCSogcGFyc2UueSAoZXhwcl9ub19jb21tYXMpOiBNYWtlIHN1cmUgJCQgaXMgbm90IGFuIGVycm9yX21hcmtfbm9kZQoJYmVmb3JlIHdlIHRyeSB0byBkbyBDX1NFVF9FWFBfT1JJR0lOQUxfQ09ERSBvbiBpdC4KCgkqIHNlYXJjaC5jIChlbnZlbG9wZV9hZGRfZGVjbCk6IENoZWNrIHRoYXQgdGhlIENMQVNTVFlQRV9DSUQgb2YKCUNPTlRFWFQgaXMgbm90IDAgYmVmb3JlIHdlIHRyeSB0byB1c2UgVFlQRV9ERVJJVkVTX0ZST00uCgoJKiBkZWNsLmMgKGNwbHVzX2V4cGFuZF9leHByX3N0bXQpOiBPbmx5IGV4cGFuZCB0aGUgZXhwciBpZiBFWFAgaXMKCW5vdCBhbiBlcnJvcl9tYXJrX25vZGUuCgpTYXQgRGVjICA3IDE3OjIwOjIyIDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGNwLXRyZWUuaCAoVFlQRV9NQUlOX0RFQ0wpOiBVc2UgVFlQRV9TVFVCX0RFQ0wuCgkqICouYzogVXNlIFRZUEVfTUFJTl9ERUNMIGluc3RlYWQgb2YgVFlQRV9OQU1FIHdoZXJlIGFwcHJvcHJpYXRlLgoJCkZyaSBEZWMgIDYgMTQ6NDA6MDkgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZGVjbC5jIChncm9rZGVjbGFyYXRvcik6IFdoZW4gZ2l2aW5nIGFuIGFub255bW91cyBzdHJ1Y3QgYSBuYW1lLAoJcmVwbGFjZSBUWVBFX05BTUUgaW5zdGVhZCBvZiBUWVBFX0lERU5USUZJRVIgKHNvIFRZUEVfU1RVQl9ERUNMIGlzCglub3QgYWZmZWN0ZWQpLgoKCSogdHlwZWNrMi5jIChidWlsZF9tX2NvbXBvbmVudF9yZWYpOiBJZiBjb21wb25lbnQgaXMgYSBwb2ludGVyCgl0byBkYXRhIG1lbWJlciwgcmVzb2x2ZSB0aGUgT0ZGU0VUX1JFRiBub3cuCgoJKiBjYWxsLmMgKGNvbnZlcnRfbGlrZSk6IERvbid0IGdvIGludG8gaW5maW5pdGUgcmVjdXJzaW9uLgoKCSogcHQuYyAoY29lcmNlX3RlbXBsYXRlX3Bhcm1zKTogVXNlIHRzdWJzdF9leHByIGZvciBub24tdHlwZSBhcmdzLgoKCSogY2xhc3MuYyAoZmluaXNoX3N0cnVjdF8xKTogU2V0IERFQ0xfQVJUSUZJQ0lBTCBvbiB0aGUgdnB0ci4KCSogdHJlZS5jIChsYXlvdXRfYmFzZXR5cGVzKTogQW5kIG9uIHRoZSB2YmFzZSBwdHIuCgpUaHUgRGVjICA1IDAyOjExOjI4IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAoQk9PTF9UWVBFX1NJWkUpOiBEZWZpbmUgaW4gdGVybXMgb2YgUE9JTlRFUl9TSVpFIG9yCglDSEFSX1RZUEVfU0laRSBzbyBib29sIGlzIGFsd2F5cyB0aGUgc2FtZSBzaXplIGFzIGFub3RoZXIgdHlwZS4KCgkqIGRlY2wuYyAocHVzaHRhZyk6IFNldCBERUNMX0lHTk9SRURfUCBmb3IgRFdBUkYsIHRvby4KClR1ZSBEZWMgIDMgMjM6MTg6MzcgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZGVjbDIuYyAoZ3Jva194X2NvbXBvbmVudHMpOiBSZW1vdmUgc3ludGhlc2l6ZWQgbWV0aG9kcyBmcm9tCglUWVBFX01FVEhPRFMgb2YgYW4gYW5vbnltb3VzIHVuaW9uLCBjb21wbGFpbiBhYm91dCBtZW1iZXIKCWZ1bmN0aW9ucy4KCSogZGVjbC5jIChzaGFkb3dfdGFnKTogV2lwZSBvdXQgbWVtb3J5IG9mIHN5bnRoZXNpemVkIG1ldGhvZHMgaW4KCWFub255bW91cyB1bmlvbnMuCgkoZmluaXNoX2Z1bmN0aW9uKTogSnVzdCBjbGVhciB0aGUgREVDTF9SVEwgb2Ygb3VyIGFyZ3VtZW50cy4KCkZyaSBOb3YgMjkgMjE6NTQ6MTcgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZGVjbDIuYyAoZmluaXNoX2ZpbGUpOiBFbWl0IERXQVJGIGRlYnVnZ2luZyBpbmZvIGZvciBzdGF0aWMgZGF0YQoJbWVtYmVycy4KCgkqIHB0LmMgKHRzdWJzdCk6IElmIHQgaXMgYSBzdHViIGRlY2wsIHJldHVybiB0aGUgc3R1YiBkZWNsIGZvciB0eXBlLgoKV2VkIE5vdiAyNyAxNDo0NzoxNSAxOTk2ICBCb2IgTWFuc29uICA8bWFuc29uQGNoYXJtZWQuY3lnbnVzLmNvbT4KCgkqIHR5cGVjay5jIChidWlsZF9jb21wb25lbnRfcmVmKTogRG9uJ3QgZGllIGlmIENPTVBPTkVOVCBpc24ndCBhCglJREVOVElGSUVSX05PREUuCgpXZWQgTm92IDI3IDE2OjA1OjE5IDE5OTYgIE1pY2hhZWwgTWVpc3NuZXIgIDxtZWlzc25lckB0aWt0b2suY3lnbnVzLmNvbT4KCgkqIE1ha2UtbGFuZy5pbiAoZysrLWNyb3NzJChleGVleHQpKTogRml4IHR5cG8uCgpXZWQgTm92IDI3IDA4OjE0OjAwIDE5OTYgIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGxpc2EuY3lnbnVzLmNvbT4KCglNYWtlIHRoZSBnKysgZHJpdmVyIG5vdyBiZSBhIHN0YW5kYWxvbmUgcHJvZ3JhbSwgcmF0aGVyIHRoYW4gb25lCgl0aGF0IHRyaWVzIHRvIHJ1biB0aGUgZ2NjIGRyaXZlciBhZnRlciBtdW5naW5nIHVwIHRoZSBvcHRpb25zLgoJKiBNYWtlLWxhbmcuaW4gKGcrKy5jLCBnKytzcGVjLm8pOiBOZXcgcnVsZXMuCgkoZysrLm8pOiBOZXcgcnVsZSwgYmFzZWQgb24gZ2NjLm8gd2l0aCAtRExBTkdfU1BFQ0lGSUNfRFJJVkVSCglhZGRlZC4KCShnKyskKGV4ZWV4dCkpOiBOZXcgcnVsZSwgYmFzZWQgb24geGdjYyBydWxlLgoJKGcrKy1jcm9zcyQoZXhlZXh0KSk6IE5vdyBqdXN0IGNvcGllcyBnKyskKGV4ZWV4dCkgb3Zlci4KCSogZysrc3BlYy5jOiBOZXcgZmlsZS4KCSogZysrLmM6IFJlbW92ZWQgZmlsZS4KClR1ZSBOb3YgMjYgMTk6MDE6MDkgMTk5NiAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgoKCSogY3Z0LmMgKGJ1aWxkX3VwX3JlZmVyZW5jZSk6IEFycmFuZ2UgZm9yIGFueSB0ZW1wb3JhcnkgdmFsdWVzCgl0aGF0IGhhdmUgYmVlbiBrZWVwIGluIHJlZ2lzdGVycyB1bnRpbCBub3cgdG8gYmUgcHV0IGludG8gbWVtb3J5LgoKTW9uIE5vdiAyNSAxNToxNjo0MSAxOTk2ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBNYWtlLWxhbmcuaW4gKGMrKy5zdGFnZVsxMjM0XSk6IERlcGVuZCB1cG9uIHN0YWdlWzEtNF0tc3RhcnQsIHNvCgl0aGF0IG1ha2UgLWozIGJvb3RzdHJhcCB3b3JrcyBiZXR0ZXIuCgpTdW4gTm92IDI0IDAyOjA5OjM5IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAocHVzaHRhZyk6IERvIHB1c2hkZWNsIGZvciBhbm9uIHRhZ3MuCgpUaHUgTm92IDIxIDE2OjMwOjI0IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHR5cGVjay5jIChjX2V4cGFuZF9yZXR1cm4pOiBGaXggbG9naWMuCgkodW5hcnlfY29tcGxleF9sdmFsdWUpOiBBdm9pZCB1bnVzZWQgd2FybmluZyBvbiBhZGRyZXNzIG9mIElOSVRfRVhQUi4KCldlZCBOb3YgMjAgMTg6NDc6MzEgMTk5NiAgQm9iIE1hbnNvbiAgPG1hbnNvbkBjaGFybWVkLmN5Z251cy5jb20+CgoJKiBnKysuYyAobWFpbik6IE1ha2Ugc3VyZSBhcmdsaXN0IGhhcyBhIGZpbmFsIE5VTEwgZW50cnkuICBBZGQKCVBFWEVDVVRFX0xBU1QgdG8gdGhlIGZsYWdzIHBhc3NlZCB0byBwZXhlY3V0ZSwgYXMgb3RoZXJ3aXNlCglzdGRpbi9zdGRvdXQgb2YgdGhlIGludm9rZWQgcHJvZ3JhbSBhcmUgcmVkaXJlY3RlZCB0bwoJbm93aGVyZXN2aWxsZS4KClR1ZSBOb3YgMTkgMTY6MTI6NDQgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZGVjbC5jIChpbXBsaWNpdGx5X2RlY2xhcmUpOiBTZXQgREVDTF9BUlRJRklDSUFMLgoKVHVlIE5vdiAxOSAxNTo0ODoxOSAxOTk2ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiBpbml0LmMgKHJlc29sdmVfb2Zmc2V0X3JlZik6IEhhbmRsZSBvYmoudmZuIGJldHRlci4KCSogdHlwZWNrLmMgKGJ1aWxkX2NvbXBvbmVudF9yZWYpOiBTZXQgVFJFRV9UWVBFIG9uIHJlc3VsdCBmcm9tCglidWlsZF92Zm5fcmVmLgoKVHVlIE5vdiAxOSAxMzoxNDozMyAxOTk2ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiB0eXBlY2suYyAoY29udmVydF9mb3JfYXNzaWdubWVudCk6IEFsc28gaGFuZGxlIGFuYWNocm9uaXN0aWMKCWltcGxpY2l0IGNvbnZlcnNpb25zIGZyb20gKDo6KikoKSB0byBjdiB2b2lkKi4KCSogY3Z0LmMgKGNwX2NvbnZlcnRfdG9fcG9pbnRlcik6IExpa2V3aXNlLgoKTW9uIE5vdiAxOCAxNzowNToyNiAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBsZXguYyAoaGFuZGxlX2NwX3ByYWdtYSk6IEZpeCBib2d1cyB3YXJuaW5nLgoKTW9uIE5vdiAxOCAxNjoxMDo0MyAxOTk2ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiBjdnQuYyAoY3BfY29udmVydF90b19wb2ludGVyKTogQXZvaWQgdGhpbmtpbmcgYSBQT0lOVEVSX1RZUEUKCShNRVRIT0RfVFlQRSkgaXMgYSBUWVBFX1BUUk1FTUZVTkNfUC4KClRodSBOb3YgMTQgMjM6MTg6MTcgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY2xhc3MuYyAoZmluaXNoX3N0cnVjdF8xKTogU3VwcG9ydCBEV0FSRjJfREVCVUcuCgkqIHNlYXJjaC5jIChkZnNfZGVidWdfbWFyayk6IExpa2V3aXNlLgoJKiBkZWNsMi5jIChmaW5pc2hfdnRhYmxlX3ZhcmRlY2wpOiBMaWtld2lzZS4KCSogZGVjbC5jIChwdXNodGFnLCBmaW5pc2hfZW51bSk6IExpa2V3aXNlLgoJKiBsZXguYyAoY2hlY2tfbmV3bGluZSk6IFVzZSBkZWJ1Z18qIGluc3RlYWQgb2YgY2FsbGluZyAqb3V0CglmdW5jdGlvbnMgZGlyZWN0bHkuCgpUaHUgTm92IDE0IDE1OjIxOjQ2IDE5OTYgIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGxpc2EuY3lnbnVzLmNvbT4KCgkqIE1ha2UtbGFuZy5pbiAoY3BsaWIyLnJlYWR5KTogQWRkIGVsc2UgY2xhdXNlIHRvIGF2b2lkIHByb2JsZW1zCglvbiBzb21lIHBpY2t5IGhvc3RzLgoKV2VkIE5vdiAxMyAxMjozMjowNyAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjbGFzcy5jIChmaW5pc2hfc3RydWN0XzEpOiBBIGNsYXNzIGhhcyBhIG5vbi10cml2aWFsIGNvcHkKCWNvbnN0cnVjdG9yIGlmIGl0IGhhcyB2aXJ0dWFsIGZ1bmN0aW9ucy4KCgkqIGN2dC5jIChjcF9jb252ZXJ0KTogQWx3YXlzIGNhbGwgYSBjb25zdHJ1Y3Rvci4KCgkqIGNhbGwuYyAocmVmZXJlbmNlX2JpbmRpbmcpOiBTdGlsbCB0YWNrIG9uIGEgUkVGX0JJTkQKCWZvciBiYWQgY29udmVyc2lvbnMuCgkoYnVpbGRfdXNlcl90eXBlX2NvbnZlcnNpb25fMSk6IFByb3BhZ2F0ZSBJQ1NfQkFEX0ZMQUcuCgoJKiB0eXBlY2suYyAoY29udmVydF9hcmd1bWVudHMpOiBQYXNzIExPT0tVUF9PTkxZQ09OVkVSVElORy4KCShjX2V4cGFuZF9yZXR1cm4pOiBMaWtld2lzZS4KCSogdHlwZWNrMi5jIChkaWdlc3RfaW5pdCk6IExpa2V3aXNlIGZvciB7IH0uCgkqIGluaXQuYyAoZXhwYW5kX2FnZ3JfaW5pdF8xKTogS2VlcCB0aGUgQ09OU1RSVUNUT1IgaGFuZGxpbmcuCgkqIGN2dC5jIChjcF9jb252ZXJ0KTogSGFuZGxlIGZhaWx1cmUgYmV0dGVyLgoKV2VkIE5vdiAxMyAxMTo1MToyMCAxOTk2ICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBsaXNhLmN5Z251cy5jb20+CgoJKiBnKysuYyAobWFpbik6IEFsc28gc2V0IFBFWEVDVVRFX1NFQVJDSCwgdG8gbWFrZSB0aGUgaW52b2NhdGlvbgoJb2YgR0NDIGJlIHBhdGgtcmVsYXRpdmUuIAoKV2VkIE5vdiAxMyAxMToyNzoxNiAxOTk2ICBNaWNoYWVsIE1laXNzbmVyICA8bWVpc3NuZXJAdGlrdG9rLmN5Z251cy5jb20+CgoJKiBNYWtlLWxhbmcuaW4gKGcrKy1jcm9zcyk6IEcrKy1jcm9zcyBkb2Vzbid0IG5lZWQgdmVyc2lvbi5vLCBidXQKCWl0IGRvZXMgbmVlZCBjaG9vc2UtdGVtcC5vIGFuZCBwZXhlY3V0ZS5vLgoKV2VkIE5vdiAxMyAwNzo1MzozOCAxOTk2ICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBsaXNhLmN5Z251cy5jb20+CgoJKiBnKysuYyAoZXJyb3IpIFshSEFWRV9WUFJJTlRGXTogUHV0IGVycm9yIGJhY2sgZm9yIHRoZSBvbmx5IHRpbWUKCXRoYXQgd2Ugc3RpbGwgdXNlIGl0LgoJKFBfdG1wZGlyLCBSX09LLCBXX09LLCBYX09LKSBbX19NU0RPU19fXTogRGVsZXRlIHVubmVjZXNzYXJ5IG1hY3Jvcy4KCldlZCBOb3YgMTMgMDI6MDA6MjYgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogaW5pdC5jIChleHBhbmRfZGVmYXVsdF9pbml0KTogQXZvaWQgY2FsbGluZyBjb25zdHJ1Y3RvcnMgdG8gCglpbml0aWFsaXplIHJlZmVyZW5jZSB0ZW1wcy4KCgkqIGN2dC5jIChjb252ZXJ0X3RvX3JlZmVyZW5jZSk6IEZpeC4KClR1ZSBOb3YgMTIgMTk6MTA6MDcgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY3Z0LmMgKGNwX2NvbnZlcnQpOiBTaW1wbGlmeSBmb3IgZmxhZ19hbnNpX292ZXJsb2FkaW5nLgoJKGNvbnZlcnRfdG9fcmVmZXJlbmNlKTogTGlrZXdpc2UuCgkqIHR5cGVjay5jIChjb252ZXJ0X2Zvcl9pbml0aWFsaXphdGlvbik6IExpa2V3aXNlLgoJKiBpbml0LmMgKGV4cGFuZF9kZWZhdWx0X2luaXQpOiBMaWtld2lzZS4KCShleHBhbmRfYWdncl9pbml0XzEpOiBMaWtld2lzZS4KCSogY3AtdHJlZS5oIChDT05WX05PTkNPTlZFUlRJTkcpOiBMb3NlLgoJKiB0eXBlY2suYyAoYnVpbGRfY19jYXN0KTogTG9zZSBhbGxvd19ub25jb252ZXJ0aW5nIHBhcm0uCgkqICouYzogQWRqdXN0LgoJKiBjYWxsLmMgKGJ1aWxkX3VzZXJfdHlwZV9jb252ZXJzaW9uXzEpOiBBc3N1bWUgTE9PS1VQX09OTFlDT05WRVJUSU5HLgoKVHVlIE5vdiAxMiAxNjoyOTowNCAxOTk2ICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBjYW51Y2suY3lnbnVzLmNvbT4KCgkqIHB0LmMgKHRzdWJzdF9leHByKTogUmV2ZXJzZSBhcmdzIHRvIGV4cGFuZF9zdGFydF9jYXRjaF9ibG9jay4KClR1ZSBOb3YgMTIgMTU6MjY6MTcgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogaW5pdC5jIChleHBhbmRfYWdncl9pbml0XzEpOiBEb24ndCBjcmFzaCBvbiBub24tY29uc3RydWN0b3IKCVRBUkdFVF9FWFBSLgoKVHVlIE5vdiAxMiAxNDowMDo1MCAxOTk2ICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBsaXNhLmN5Z251cy5jb20+CgoJKiBnKysuYzogSW5jbHVkZSBnYW5zaWRlY2wuaC4KCShWUFJPVE8sIFBWUFJPVE8sIFZBX1NUQVJUKTogRGVsZXRlLgoJKGNob29zZV90ZW1wX2Jhc2VfdHJ5LCBjaG9vc2VfdGVtcF9iYXNlLCBwZXJyb3JfZXhlYywKCXJ1bl9kb3MpIFtfX01TRE9TX19dOiBEZWxldGUgZm5zLgoJKHBmYXRhbF93aXRoX25hbWUpOiBEZWxldGUgZm4uCgkodGVtcF9maWxlbmFtZSk6IERlY2xhcmUgbGlrZSBpbiBnY2MuYy4KCShwZXhlY3V0ZSwgcHdhaXQsIGNob29zZV90ZW1wX2Jhc2UpOiBEZWNsYXJlIGZyb20gZ2NjLmMuCgkoZXJyb3JfY291bnQsIHNpZ25hbF9jb3VudCk6IERlZmluZS4KCShlcnJvcik6IERlbGV0ZSBib3RoIGRlZmluaXRpb25zLgoJKFBFWEVDVVRFX3tGSVJTVCxMQVNULFNFQVJDSCxWRVJCT1NFfSk6IERlZmluZSBmcm9tIGdjYy5jLgoJKHBmYXRhbF9wZXhlY3V0ZSk6IEFkZCBmbiBmcm9tIGdjYy5jLgoJKG1haW4pOiBSZW5hbWUgbG9jYWwgVkVSQk9TRSB2YXIgdG8gVkVSQk9TRV9GTEFHLiAgUmV3cml0ZSB0aGUKCWNvZGUgdG8gdXNlIHRoZSBwZXhlY3V0ZSBzdHVmZiBhbHNvIHVzZWQgYnkgZ2NjLmMuCgkoTUlOX0ZBVEFMX1NUQVRVUyk6IERlZmluZS4KCSogTWFrZS1sYW5nLmluIChnKyspOiBBZGQgZGVwZW5kZW5jeSBvbiBhbmQgbGlua2luZyB3aXRoCgljaG9vc2UtdGVtcC5vIGFuZCBwZXhlY3V0ZS5vLgoKCSogY3AtdHJlZS5oOiBJbmNsdWRlIGdhbnNpZGVjbC5oLgoJKFNURElPX1BST1RPKTogRGVsZXRlICN1bmRlZi8jZGVmaW5lLgoJKiBjdnQuYyAoTlVMTCk6IERlbGV0ZSAjdW5kZWYvI2RlZmluZS4KCSogZXhwci5jIChOVUxMKTogTGlrZXdpc2UuCgkqIGluaXQuYyAoTlVMTCk6IExpa2V3aXNlLgoJKiBydHRpLmMgKE5VTEwpOiBMaWtld2lzZS4KCSogeHJlZi5jIChOVUxMKTogTGlrZXdpc2UuCgoJKiBjcC10cmVlLmggKGJ1aWxkX3VzZXJfdHlwZV9jb252ZXJzaW9uKTogQWRkIHByb3RvdHlwZS4KCSogY2FsbC5jIChidWlsZF91c2VyX3R5cGVfY29udmVyc2lvbik6IERlbGV0ZSBwcm90b3R5cGUuICBDb3JyZWN0CglkZWNsIG9mIEZMQUdTIGFyZyB0byBiZSBhbiBpbnQuCgkqIGN2dC5jIChidWlsZF91c2VyX3R5cGVfY29udmVyc2lvbik6IExpa2V3aXNlLgoKVHVlIE5vdiAxMiAxMjoxNjoyMCAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjcC10cmVlLmRlZjogQWRkIFRSWV9CTE9DSyBhbmQgSEFORExFUi4KCSogZXhjZXB0LmMgKGV4cGFuZF9zdGFydF9jYXRjaF9ibG9jayk6IFN1cHBvcnQgdGVtcGxhdGVzLgoJKiBwYXJzZS55ICh0cnlfYmxvY2ssIGhhbmRsZXJfc2VxKTogTGlrZXdpc2UuCgkqIHB0LmMgKHRzdWJzdF9leHByKTogU3VwcG9ydCBUUllfQkxPQ0sgYW5kIEhBTkRMRVIuCgpNb24gTm92IDExIDEzOjU3OjMxIDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHB0LmMgKGN1cnJlbnRfdGVtcGxhdGVfYXJncyk6IE5ldyBmbi4KCShwdXNoX3RlbXBsYXRlX2RlY2wpOiBVc2UgaXQuCgkqIGRlY2wuYyAoZ3Jva2RlY2xhcmF0b3IpOiBVc2UgaXQuCgoJKiBkZWNsMi5jIChidWlsZF9leHByX2Zyb21fdHJlZSk6IERlcmVmZXJlbmNlIHJlZiB2YXJzLgoKCSogZGVjbC5jIChncm9rZGVjbGFyYXRvcik6IEdlbmVyYWxpemUgaGFuZGxpbmcgb2YgVFlQRU5BTUVfVFlQRXMgaW4KCXRoZSBkZWNsLXNwZWNpZmllci1zZXEuCgoJKiBkZWNsLmMgKGdyb2tfb3BfcHJvcGVydGllcyk6IERvbid0IGZvcmNlIHRoZSB0eXBlIG9mIGEgY29udmVyc2lvbgoJb3AgdG8gYmUgY29tcGxldGUuICBEb24ndCB3YXJuIGFib3V0IGNvbnZlcnRpbmcgdG8gdGhlIHNhbWUgdHlwZQoJZm9yIHRlbXBsYXRlIGluc3RhbnRpYXRpb25zLgoKCSogZGVjbDIuYyAoZmluaXNoX2ZpbGUpOiBEb24ndCBjYWxsIGluc3RhbnRpYXRlX2RlY2wgb24gc3ludGhlc2l6ZWQKCW1ldGhvZHMuCgpNb24gTm92IDExIDEzOjIwOjM0IDE5OTYgIEJvYiBNYW5zb24gIDxtYW5zb25AY2hhcm1lZC5jeWdudXMuY29tPgoKCSogdHlwZWNrLmMgKGdldF9kZWx0YV9kaWZmZXJlbmNlKTogUmVtb3ZlIHByZXZpb3VzIGJvZ3VzbmVzcy4KCURvbid0IGdpdmUgZXJyb3JzIGlmIGZvcmNlIGlzIHNldC4KCkZyaSBOb3YgIDggMTc6Mzg6NDQgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZGVjbDIuYyAoZmluaXNoX2ZpbGUpOiBEb24ndCBlbWl0IGRlYnVnIGluZm8uCgkqIGRlY2wuYyAocHVzaGRlY2wpOiBMb3NlIG9ic29sZXRlIGNvZGUuCgkoZ3Jva2RlY2xhcmF0b3IpOiBTdGlsbCBkbyB0aGUgbG9uZyBsb25nIHRoaW5nIGFmdGVyIGNvbXBsYWluaW5nLgoJKiBzZWFyY2guYyAobm90ZV9kZWJ1Z19pbmZvX25lZWRlZCk6IERvbid0IGRvIGFueXRoaW5nIGlmIHdlJ3JlIGluIGEgCgl0ZW1wbGF0ZS4KCSogbWV0aG9kLmMgKHN5bnRoZXNpemVfbWV0aG9kKTogRm9yIG5vbi1sb2NhbCBjbGFzc2VzLAoJcHVzaF90b190b3BfbGV2ZWwgZmlyc3QuCgpGcmkgTm92ICA4IDExOjUyOjI4IDE5OTYgIEJvYiBNYW5zb24gIDxtYW5zb25AY2hhcm1lZC5jeWdudXMuY29tPgoKCSogdHlwZWNrLmMgKGdldF9kZWx0YV9kaWZmZXJlbmNlKTogQWRkIG5vX2Vycm9yIHBhcmFtZXRlci4KCShidWlsZF9wdHJtZW1mdW5jKTogQ2FsbCBnZXRfZGVsdGFfZGlmZmVyZW5jZSB3aXRoIG5vX2Vycm9yIHNldDsKCXdlIGRvbid0IHdhbnQgZXJyb3IgbWVzc2FnZXMgd2hlbiBjb252ZXJ0aW5nIHVucmVsYXRlZAoJcG9pbnRlci10by1tZW1iZXIgZnVuY3Rpb25zLgoKVGh1IE5vdiAgNyAxMToxNjoyNCAxOTk2ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiBlcnJvci5jIChkdW1wX2V4cHIpOiBJbXByb3ZlIHRoZSB3b3JkaW5nIG9uIGVycm9yIG1lc3NhZ2VzIHRoYXQKCWludm9sdmUgcG9pbnRlciB0byBtZW1iZXIgZnVuY3Rpb25zLgoKVHVlIE5vdiAgNSAxNzoxMjowNSAxOTk2ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiBjdnQuYyAoY3BfY29udmVydF90b19wb2ludGVyKTogTW92ZSBjb2RlIGZvciBjb252ZXJzaW9ucyBmcm9tCgkoOjoqKSgpIHRvIHZvaWQqIG9yICgqKSgpIHVwIGEgYml0LCBzbyB0aGF0IHdlIGNhbiBjb252ZXJ0IGZyb20KCU1FVEhPRF9UWVBFcyBhcyB3ZWxsLgoKVHVlIE5vdiAgNSAxNDo1NDoxNyAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBydHRpLmMgKGdldF90aW5mb19mbik6IE1ha2Ugc3VyZSAndHlwZScgaXMgcGVybWFuZW50LgoJVGhlcmUgYXJlIG5vICdtZW1iZXInIHR5cGVzLgoJKGdldF90aW5mb19mbl9keW5hbWljKTogRGlhZ25vc2UgdHlwZWlkIG9mIG92ZXJsb2FkZWQgZm4uCgkoYnVpbGRfeF90eXBlaWQpOiBIYW5kbGUgZXJyb3JzLgoKTW9uIE5vdiAgNCAxNzo0MzoxMiAxOTk2ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiB0eXBlY2suYyAoY29udmVydF9mb3JfYXNzaWdubWVudCk6IEhhbmRsZSBhbmFjaHJvbmlzdGljIGltcGxpY2l0Cgljb252ZXJzaW9ucyBmcm9tICg6OiopKCkgdG8gdm9pZCogb3IgKCopKCkuCgkqIGN2dC5jIChjcF9jb252ZXJ0X3RvX3BvaW50ZXIpOiBMaWtld2lzZS4KCShjcF9jb252ZXJ0X3RvX3BvaW50ZXJfZm9yY2UpOiBSZW1vdmUgY3BfY29udmVydF90b19wb2ludGVyCgljb252ZXJzaW9ucyBmcm9tIGhlcmUuCgkqIGRlY2wyLmMgKGxhbmdfZGVjb2RlX29wdGlvbik6IEFkZCAtV3tuby0sfXBtZi1jb252ZXJzaW9ucy4KCSogbGFuZy1vcHRpb25zLmg6IExpa2V3aXNlLgoJKiBkZWNsMi5jICh3YXJuX3BtZjJwdHIpOiBEZWZpbmUuCgkqIGNwLXRyZWUuaDogRGVjbGFyZSBpdC4KCSogdHlwZWNrMi5jIChkaWdlc3RfaW5pdCk6IEFsbG93IHBtZnMgZG93biBpbnRvCgljb252ZXJ0X2Zvcl9pbml0aWFsaXphdGlvbi4KClN1biBOb3YgIDMgMDk6NDM6MDAgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogdHlwZWNrLmMgKGNfZXhwYW5kX3JldHVybik6IEZpeCBmb3IgcmV0dXJuaW5nIG92ZXJsb2FkZWQgZm4uCgpGcmkgTm92ICAxIDA4OjUzOjE3IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGNwLXRyZWUuaCAoRElSRUNUX0JJTkQpOiBDaGFuZ2UgZnJvbSBJTkRJUkVDVF9CSU5ELgoJKiBkZWNsLmMgKGdyb2tfcmVmZXJlbmNlX2luaXQpOiBQYXNzIERJUkVDVF9CSU5ELgoJKiBjdnQuYyAoYnVpbGRfdXBfcmVmZXJlbmNlKTogRG9uJ3QgbWFyayAndGhpcycgYWRkcmVzc2FibGUuICBVc2UKCURJUkVDVF9CSU5ELgoJKiBjYWxsLmMgKGNvbnZlcnRfbGlrZSk6IERvbid0IHBhc3MgSU5ESVJFQ1RfQklORC4KCSogdHlwZWNrLmMgKGNvbnZlcnRfYXJndW1lbnRzKTogTGlrZXdpc2UuCgkqIHR5cGVjay5jIChtYXJrX2FkZHJlc3NhYmxlKTogQWxsb3cgJnRoaXMgaWYgZmxhZ190aGlzX2lzX3ZhcmlhYmxlLgoKVGh1IE9jdCAzMSAxNzowODo0OSAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiB0eXBlY2suYyAobWFya19hZGRyZXNzYWJsZSk6IFN1cHBvcnQgVEFSR0VUX0VYUFIsIHVuaWZ5IHdpdGgKCXNpbWlsYXIgY29kZSBpbiBidWlsZF91cF9yZWYuCgkqIGN2dC5jIChidWlsZF91cF9yZWZlcmVuY2UpOiBEcmFzdGljYWxseSBzaW1wbGlmeS4KCk1vbiBPY3QgMjggMTI6NDU6MDUgMTk5NiAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogdHlwZWNrLmMgKHNpZ25lZF9vcl91bnNpZ25lZF90eXBlKTogSWYgdGhlIGdpdmVuIHR5cGUgYWxyZWFkeQoJYXMgdGhlIGNvcnJlY3Qgc2lnbmVkbmVzcywgdGhlbiBqdXN0IHJldHVybiBpdC4KCgkqIHR5cGVjay5jICh7dW4sfXNpZ25lZF90eXBlKTogSWYgY2FuJ3QgZG8gYW55dGhpbmcsIGNhbGwKCXNpZ25lZF9vcl91bnNpZ25lZF90eXBlLgoKVGh1IE9jdCAyNCAxNDoyMTo1OSAxOTk2ICBCb2IgTWFuc29uICA8bWFuc29uQGNoYXJtZWQuY3lnbnVzLmNvbT4KCgkqIGRlY2wyLmMgKGNvcHlfYXNzaWdubWVudF9hcmdfcCk6IERvbid0IGJ1eSB0aGUgZmFybSBpZgoJY3VycmVudF9jbGFzc190eXBlIGlzIE5VTEwuCgpXZWQgT2N0IDIzIDAwOjQzOjEwIDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkBnZXJiaWwuY3lnbnVzLmNvbT4KCgkqIGNsYXNzLmMgKGZpbmlzaF9zdHJ1Y3RfMSk6IEF2b2lkIGVtcHR5IHN0cnVjdHMgYnkgYWRkaW5nIGEgZmllbGQKCXNvIGxheW91dF90eXBlIGdldHMgdGhlIG1vZGUgcmlnaHQuCgoJKiB0eXBlY2suYyAoY19leHBhbmRfcmV0dXJuKTogRHJhc3RpY2FsbHkgc2ltcGxpZnkuCgpNb24gT2N0IDIxIDIyOjM0OjAyIDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHR5cGVjay5jIChkZWNheV9jb252ZXJzaW9uKTogSGFuZGxlIG92ZXJsb2FkZWQgbWV0aG9kcy4KCkZyaSBPY3QgMTggMTY6MDM6NDggMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY2FsbC5jIChidWlsZF9vdmVyX2NhbGwpOiBBIFRBUkdFVF9FWFBSIGhhcyBzaWRlLWVmZmVjdHMuCgpUaHUgT2N0IDE3IDExOjMxOjU5IDE5OTYgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIGN2dC5jIChjb252ZXJ0X3RvX3BvaW50ZXJfZm9yY2UpOiBBZGQgY29kZSB0byBzdXBwb3J0IHBvaW50ZXIgdG8KCW1lbWJlciBmdW5jdGlvbiB0byBwb2ludGVyIHRvIGZ1bmN0aW9uIGNvbnZlcnNpb25zLgoJKiBpbml0LmMgKHJlc29sdmVfb2Zmc2V0X3JlZik6IEFkZCBjb2RlIHRvIGFsbG93IGZha2VkIHVwIG9iamVjdHMsCglpZ25vcmluZyB0aGVtIGlmIHRoZXkgYXJlIG5vdCB1c2VkLCBhbmQgZ2l2aW5nIGFuIGVycm9yLCBpZiB0aGV5CglhcmUgbmVlZGVkLgoJKiB0eXBlY2suYyAoZ2V0X21lbWJlcl9mdW5jdGlvbl9mcm9tX3B0cmZ1bmMpOiBGb2xkIGUxIHRvIGltcHJvdmUKCWNvZGUsIGFuZCBzbyB0aGF0IHdlIGNhbiBnaXZlIGFuIGVycm9yLCBpZiB3ZSBuZWVkZWQgYW4gb2JqZWN0LAoJYW5kIG9uZSB3YXMgbm90IHByb3ZpZGVkLgoJKGJ1aWxkX2NfY2FzdCk6IERvbid0IGNhbGwgZGVmYXVsdF9jb252ZXJzaW9uIHdoZW4gd2Ugd2FudCB0bwoJY29udmVydCB0byBwb2ludGVyIHRvIGZ1bmN0aW9uIGZyb20gYSBNRVRIT0RfVFlQRS4KCk1vbiBPY3QgMTQgMDA6Mjg6NTEgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogTWFrZS1sYW5nLmluIChjcGxpYjIucmVhZHkpOiBGaXggbG9naWMuCgoJKiBkZWNsLmMgKHNoYWRvd190YWcpOiBPbmx5IGNvbXBsYWluIGFib3V0IG5vbi1hcnRpZmljaWFsIGZ1bmN0aW9uCgltZW1iZXJzLgoKCSogY2xhc3MuYyAoZmluaXNoX3N0cnVjdF8xKTogQWRkIHN5bnRoZXNpemVkIG1ldGhvZHMgdG8gVFlQRV9NRVRIT0RTLgoKRnJpIE9jdCAxMSAxNjoxMjo0MCAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBleHByLmMgKGNwbHVzX2V4cGFuZF9leHByKTogUHJlLXR3ZWFrIGNhbGxfdGFyZ2V0IGxpa2UKCWV4cGFuZF9pbmxpbmVfZnVuY3Rpb24gd291bGQuCgoJKiBwdC5jIChtYXJrX2RlY2xfaW5zdGFudGlhdGVkKTogSWYgZXh0ZXJuX3AsIGNhbGwKCW1hcmtfaW5saW5lX2Zvcl9vdXRwdXQuCgpUaHUgT2N0IDEwIDE1OjU4OjA4IDE5OTYgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIHR5cGVjay5jICh1bmFyeV9jb21wbGV4X2x2YWx1ZSk6IEFkZCBjb2RlIHRvIGhhbmRsZSBpbnRlcm1lZGlhdGUKCXBtZCBjb252ZXJzaW9ucy4KCgkqIHR5cGVjay5jIChnZXRfZGVsdGFfZGlmZmVyZW5jZSk6IEZpeCB3b3JkaW5nLCBhcyB3ZSBjYW4gYmUgdXNlZAoJZm9yIHBvaW50ZXIgdG8gZGF0YSBtZW1iZXJzLgoKVHVlIE9jdCAgOCAxMjo0Mzo1MSAxOTk2ICBCb2IgTWFuc29uICA8bWFuc29uQGNoYXJtZWQuY3lnbnVzLmNvbT4KCgkqIHB0LmMgKHRzdWJzdCk6IElmIHRoZSBmdW5jdGlvbiBkZWNsIGlzbid0IGEgbWVtYmVyIG9mIHRoaXMKCXRlbXBsYXRlLCByZXR1cm4gYSBjb3B5IG9mIHRoZSBkZWNsIChpbmNsdWRpbmcgY29weWluZyB0aGUKCWxhbmctc3BlY2lmaWMgcGFydCkgc28gd2UgZG9uJ3QgaG9zZSBvdXJzZWx2ZXMgbGF0ZXIuCgpUaHUgT2N0ICAzIDE2OjI0OjI4IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGNsYXNzLmMgKGZpbmlzaF9zdHJ1Y3QpOiBSZW1vdmUgRFdBUkYtc3BlY2lmaWMgdGFnIGhhbmRsaW5nLgoJKiBkZWNsLmMgKHB1c2h0YWcpOiBMaWtld2lzZS4KCShmaW5pc2hfZnVuY3Rpb24pOiBBbHdheXMgY2xlYXIgREVDTF9BUkdVTUVOVFMgb24gZnVuY3Rpb24gZGVjbHMgd2l0aAoJbm8gc2F2ZWQgUlRYLgoJKiBkZWNsMi5jIChmaW5pc2hfZmlsZSk6IEVtaXQgRFdBUkYgZGVidWdnaW5nIGluZm8gZm9yIHN0YXRpYyBkYXRhCgltZW1iZXJzLgoKV2VkIE9jdCAgMiAyMTo1ODowMSAxOTk2ICBCb2IgTWFuc29uICA8bWFuc29uQGNoYXJtZWQuY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAoZHVwbGljYXRlX2RlY2xzKTogTWFrZSBzdXJlIHRoZSBvbGQgREVDTF9MQU5HX1NQRUNJRklDCglpc24ndCB0aGUgc2FtZSBhcyB0aGUgbmV3IG9uZSBiZWZvcmUgd2Ugd2hhY2sgaXQuCgpNb24gU2VwIDMwIDEzOjM4OjI0IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGNsYXNzLmMsIGNwLXRyZWUuaCwgY3Z0LmMsIGRlY2wuYywgZGVjbDIuYywgZ3h4LmdwZXJmLCBoYXNoLmgsCglsZXguYywgbWV0aG9kLmMsIHBhcnNlLnksIHR5cGVjay5jLCB0eXBlY2syLmM6IFJlbW92ZQoJd2Fybl90cmFkaXRpb25hbCBhbmQgd2Fybl9zdHJpY3RfcHJvdG90eXBlczsgcmVtb3ZlIGFuY2llbnQKCSdvdmVybG9hZCcgY29kZTsgcmVtb3ZlIHJlZmVyZW5jZXMgdG8gZmxhZ190cmFkaXRpb25hbC4KCk1vbiBTZXAgMzAgMTI6NTg6NDAgMTk5NiAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgoKCSogaW5wdXQuYyAoc3ViX2dldGNoKTogSGFuZGxlIDgtYml0IGNoYXJhY3RlcnMgaW4gc3RyaW5nIGxpdGVyYWxzLgoKU3VuIFNlcCAyOSAwMzoxMjowMSAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiB0cmVlLmMgKG1hcGNhcik6IEhhbmRsZSBDT05TVFJVQ1RPUnMuCgkoY29weV90b19wZXJtYW5lbnQpOiBIYW5kbGUgZXhwcmVzc2lvbl9vYnN0YWNrIHByb3Blcmx5LgoKCSogTWFrZS1sYW5nLmluIChjcGxpYjIudHh0KTogQWxzbyBkZXBlbmQgb24gdGhlIGhlYWRlcnMuCgoJKiBydHRpLmMgKGdldF90aW5mb192YXIpOiBEb24ndCBhc3N1bWUgdGhhdCBQT0lOVEVSX1NJWkUgPT0KCUlOVF9UWVBFX1NJWkUuCgkoZXhwYW5kX2NsYXNzX2Rlc2MpOiBVc2UgVVNJdHlwZSBmb3Igb2Zmc2V0IGZpZWxkLgoJKiB0aW5mby5oIChzdHJ1Y3QgX19jbGFzc190eXBlX2luZm8pOiBMaWtld2lzZS4KCgkqIG1ldGhvZC5jIChidWlsZF9vdmVybG9hZF9pbnQpOiBUWVBFX1BSRUNJU0lPTiBzaG91bGQgYmUgYXBwbGllZAoJdG8gdHlwZXMuCgpTYXQgU2VwIDI4IDE0OjQ0OjUwIDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGNhbGwuYyAoYnVpbGRfbmV3X29wKTogQSBDT05EX0VYUFIgaW52b2x2aW5nIHZvaWQgbXVzdCBiZSBhCglidWlsdGluLgoKRnJpIFNlcCAyNyAxNjo0MDozMCAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiB0eXBlY2suYyAoYnVpbGRfeF9jb21wb25lbnRfcmVmKTogTmV3IGZuLgoJKGJ1aWxkX29iamVjdF9yZWYpOiBVc2UgaXQuCgkqIHBhcnNlLnkgKHByaW1hcnkpOiBVc2UgaXQuCgkqIGRlY2wyLmMgKGJ1aWxkX2V4cHJfZnJvbV90cmVlKTogVXNlIGl0LgoJKiBjcC10cmVlLmg6IERlY2xhcmUgaXQuCgoJKiBkZWNsLmMgKHN0YXJ0X2RlY2wpOiB2YXJpYWJsZS1zaXplZCBhcnJheXMgY2Fubm90IGJlIGluaXRpYWxpemVkLgoJKiBlcnJvci5jIChkdW1wX3R5cGVfc3VmZml4KTogSGFuZGxlIHZhcmlhYmxlIGFycmF5cy4KCkZyaSBTZXAgMjcgMTM6MTQ6MDUgMTk5NiAgQnJlbmRhbiBLZWhvZSAgPGJyZW5kYW5AbGlzYS5jeWdudXMuY29tPgoKCSogTWFrZS1sYW5nLmluIChleGNlcHRpb24ubyk6IFB1dCBiYWNrIGNvbXBpbGluZyBpdCB3aXRoIC1mUElDLgoKRnJpIFNlcCAyNyAwMzowMDowOSAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBkZWNsLmMgKGxvb2t1cF9uYW1lX3JlYWwpOiBEb24ndCB0cnkgdG8gbG9vayB1cCBhbnl0aGluZyBpbiBhCglUWVBFTkFNRV9UWVBFLgoKCSogdGluZm8yLmNjIChfX3Rocm93X3R5cGVfbWF0Y2hfcnR0aSk6IE9vcHMuCgpUaHUgU2VwIDI2IDIyOjExOjA1IDE5OTYgIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGxpc2EuY3lnbnVzLmNvbT4KCgkqIE1ha2UtbGFuZy5pbiAoZXhjZXB0aW9uLm8pOiBVc2UgLWZuby1QSUMgZm9yIG5vdy4KClRodSBTZXAgMjYgMTA6NTk6MDAgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogcnR0aS5jIChidWlsZF9keW5hbWljX2Nhc3QpOiBQYXNzIHRpbmZvIGZucyByYXRoZXIgdGhhbgoJY2FsbGluZyB0aGVtLgoJKGdldF90aW5mb19mbl9keW5hbWljKTogRXh0cmFjdGVkIGZyb20gYnVpbGRfdHlwZWlkLgoJKiB0aW5mbzIuY2MgKF9fZHluYW1pY19jYXN0KTogQWRqdXN0LgoJCgkqIHJ0dGkuYyAoYnVpbGRfdHlwZWlkKTogVXNlIHJlc29sdmVzX3RvX2ZpeGVkX3R5cGVfcC4KCShidWlsZF94X3R5cGVpZCk6IExpa2V3aXNlLgoKCSogcGFyc2UueTogQ2FsbCBidWlsZF94X3R5cGVpZCBpbnN0ZWFkIG9mIGJ1aWxkX3R5cGVpZC4KCSogY3AtdHJlZS5kZWY6IEFkZCBUWVBFSURfRVhQUi4KCSogcHQuYyAodHN1YnN0X2NvcHkpOiBIYW5kbGUgdHlwZWlkLgoJKiBkZWNsMi5jIChidWlsZF9leHByX2Zyb21fdHJlZSk6IExpa2V3aXNlLgoJKiBydHRpLmMgKGJ1aWxkX3hfdHlwZWlkKTogVGhyb3cgYmFkX3R5cGVpZCBmcm9tIGhlcmUuCgkoYnVpbGRfdHlwZWlkKTogTm90IGhlcmUuCgkqIGNwLXRyZWUuaDogRGVjbGFyZSBidWlsZF94X3R5cGVpZC4KCldlZCBTZXAgMjUgMTc6MjY6MTYgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY2FsbC5jIChjb252ZXJ0X2xpa2UpOiBQdWxsIG91dCBjb25zdGFudCB2YWx1ZXMuCgoJKiB0cmVlLmMgKG1hcGNhcik6IFVzZSBidWlsZF9jcGx1c19hcnJheV90eXBlLCBub3QgYnVpbGRfYXJyYXlfdHlwZS4KCldlZCBTZXAgMjUgMTc6Mjg6NTMgMTk5NiAgTWljaGFlbCBNZWlzc25lciAgPG1laXNzbmVyQHRpa3Rvay5jeWdudXMuY29tPgoKCSogZGVjbC5jIChpbml0X2RlY2xfcHJvY2Vzc2luZyk6IENyZWF0ZSBzaG9ydCBpbnQgdHlwZXMgYmVmb3JlCgljcmVhdGluZyBzaXplX3QgaW4gY2FzZSBhIG1hY2hpbmUgZGVzY3JpcHRpb24gbmVlZHMgdG8gdXNlCgl1bnNpZ25lZCBzaG9ydCBmb3Igc2l6ZV90LgoKVHVlIFNlcCAyNCAxODoxODo0NCAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBNYWtlLWxhbmcuaW4gKGV4Y2VwdGlvbi5vKTogVHVybiBvZmYgcGljLgoKCSogdGluZm8yLmNjIChfX3Rocm93X3R5cGVfbWF0Y2hfcnR0aSk6IEZpeCBjdi12YXJpYW50cyBvZiB0aGUgc2FtZQoJdHlwZSwgbXVsdGktbGV2ZWwgcHRyIGNvbnZlcnNpb25zLgoKCSogcnR0aS5jIChjYWxsX3ZvaWRfZm4pOiBSZW5hbWVkIGFuZCBnZW5lcmljaXplZCBmcm9tIHRocm93X2JhZF9jYXN0LgoJKHRocm93X2JhZF9jYXN0KTogVXNlIGl0LgoJKHRocm93X2JhZF90eXBlaWQpOiBOZXcgZm4uCgkoYnVpbGRfdHlwZWlkKTogVGhyb3cgYmFkX3R5cGVpZCBhcyBuZWVkZWQuCglVc2UgYnVpbGRfY2FsbC4KCShzeW50aGVzaXplX3RpbmZvX2ZuKTogSGFuZGxlIGZ1bmN0aW9ucyBhbmQgYXJyYXlzIGJlZm9yZSBjaGVja2luZwoJZm9yIGN2LXF1YWxzLgoKCSogUmVtb3ZlIC5oIGZyb20gc3RhbmRhcmQgQysrIGhlYWRlcnMsIGFkZCBuZXcuaCwgbW92ZSBpbnRvIGluYwoJc3ViZGlyZWN0b3J5LgoKCSogZXhjZXB0aW9uKjogUmVtb3ZlIHBvaW50ZXIgZnJvbSBvYmplY3QsIGNvbnN0cnVjdG9ycy4gIEFkZAoJZGVmYXVsdCBleGNlcHRpb246OndoYXQgdGhhdCB1c2VzIHR5cGVfaW5mbzo6bmFtZS4gIEFkZAoJX190aHJvd19iYWRfdHlwZWlkLgoKCSogaW5pdC5jIChidWlsZF9uZXcpOiBEb24ndCBhZGQgYSBjb29raWUgdG8gbmV3ICh2b2lkICopIFRbMl0uCgpNb24gU2VwIDIzIDE1OjIxOjUzIDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIE1ha2UtbGFuZy5pbjogQnVpbGRpbmcgQysrIGNvZGUgZGVwZW5kcyBvbiBjYzFwbHVzLgoKTW9uIFNlcCAyMyAxMjozODo0MCAxOTk2ICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBsaXNhLmN5Z251cy5jb20+CgoJKiBkZWNsLmMgKHN0cnVjdCBzYXZlZF9zY29wZSk6IERlY2xhcmUgUFJPQ0VTU0lOR19URU1QTEFURV9ERUNMIGFzCglhIEhPU1RfV0lERV9JTlQsIG5vdCBhIHRyZWUuCgpNb24gU2VwIDIzIDEyOjM2OjAyIDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGV4Y2VwdGlvbi5jYzogRG9uJ3QgaW5jbHVkZSA8c3RkbGliLmg+LgoKCSogTWFrZS1sYW5nLmluIChjKysuY2xlYW4pOiBSZW1vdmUgY3BsaWIyLiouCgpNb24gU2VwIDIzIDA5OjQyOjE5IDE5OTYgIERvdWcgRXZhbnMgIDxkamVAY2FudWNrLmN5Z251cy5jb20+CgoJKiBwYXJzZS55IChjb21wb25lbnRfZGVjbF8xLCBjb21wb25lbnRfY29zdHJ1Y3Rvcl9kZWNsYXJhdG9yIGNhc2UpOgoJUGFzcyBhdHRyaWJ1dGVzL3ByZWZpeF9hdHRyaWJ1dGVzIGluIHRyZWUgbGlzdC4KCk1vbiBTZXAgMjMgMDE6MTg6NTAgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogdGluZm97LDJ9LmNjOiAjaW5jbHVkZSA8c3RkZGVmLmg+IGluc3RlYWQgb2YgPHN0ZGxpYi5oPi4KClN1biBTZXAgMjIgMDU6MzE6MjIgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogbGV4LmMgKGRvX2lkZW50aWZpZXIpOiBEb24ndCBkbyBkZWZlcnJlZCBsb29rdXAgaW4gYSB0ZW1wbGF0ZQoJaGVhZGVyLgoKCSogdHlwZWNrMi5jIChzdG9yZV9pbml0X3ZhbHVlKTogT29wcy4KCgkqIG5ldy57aCxjY30sIGV4Y2VwdGlvbi57aCxjY30sIHR5cGVpbmZvLmgsIHRpbmZvezIuY2MsLmNjLC5ofTogCglOZXcgZmlsZXMgZm9yIEMrKyBsYW5nLXN1cHBvcnQgbGlicmFyeS4KCSogTWFrZS1sYW5nLmluIChDWFhfRVhUUkFfSEVBREVSUyk6IERlZmluZS4KCShDWFhfTElCMkZVTkNTKTogRGVmaW5lLgoJQW5kIHJ1bGVzIGZvciBidWlsZGluZyB0aGUgQysrIGxhbmctc3VwcG9ydCBjb2RlLgoJKiBjb25maWctbGFuZy5pbiAoaGVhZGVycyk6IERlZmluZS4KCShsaWIyZnVuY3MpOiBEZWZpbmUuCgpTYXQgU2VwIDIxIDE5OjE3OjI4IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGRlY2wyLmMgKGJ1aWxkX2V4cHJfZnJvbV90cmVlKTogSWYgQ09OU1RSVUNUT1IgaGFzIGEgdHlwZSwgY2FsbAoJZGlnZXN0X2luaXQuCgkqIHB0LmMgKHRzdWJzdF9jb3B5KTogQ29tcHV0ZSB0eXBlIGZvciBDT05TVFJVQ1RPUi4KCSogdHlwZWNrMi5jIChzdG9yZV9pbml0X3ZhbHVlKTogQ2hlY2sgZm9yIGluaXRpYWxpemluZyBwbWYgd2l0aCB7IH0KCWhlcmUuCgkocHJvY2Vzc19pbml0X2NvbnN0cnVjdG9yKTogTm90IGhlcmUuCgpUaHUgU2VwIDE5IDE2OjQxOjA3IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHB0LmMgKGJlZ2luX3RlbXBsYXRlX3Bhcm1fbGlzdCk6IEluY3JlbWVudAoJcHJvY2Vzc2luZ190ZW1wbGF0ZV9kZWNsIGhlcmUuCgkoZW5kX3RlbXBsYXRlX3Bhcm1fbGlzdCk6IE5vdCBoZXJlLgoJKHByb2Nlc3NfdGVtcGxhdGVfcGFybSk6IE5vIG5lZWQgdG8gYWRkIDEgdG8gaXQgbm93LgoJKiAqLmM6IFVzZSBwcm9jZXNzaW5nX3RlbXBsYXRlX2RlY2wgaW5zdGVhZCBvZiBjdXJyZW50X3RlbXBsYXRlX3Bhcm1zCgl0byBjaGVjayBmb3IgYmVpbmcgaW4gYSB0ZW1wbGF0ZS4KCgkqIHB0LmMgKHVzZXNfdGVtcGxhdGVfcGFybXMpOiBIYW5kbGUgU0NPUEVfUkVGLiAgRml4IENPTlNUUlVDVE9SLgoJKHRzdWJzdF9jb3B5KTogSGFuZGxlIENPTlNUUlVDVE9SLgoJKGluc3RhbnRpYXRlX2RlY2wpOiBTZXQgdXAgY29udGV4dCBwcm9wZXJseSBmb3IgdmFyaWFibGVzLgoJKiBkZWNsMi5jIChidWlsZF9leHByX2Zyb21fdHJlZSk6IEhhbmRsZSBDT05TVFJVQ1RPUi4KCSogY2xhc3MuYyAoZmluaXNoX3N0cnVjdCk6IFJldmVyc2UgQ0xBU1NUWVBFX1RBR1MuCgpXZWQgU2VwIDE4IDEzOjMwOjIwIDE5OTYgIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGxpc2EuY3lnbnVzLmNvbT4KCgkqIGxleC5jIChlbnVtIHRyZWVfbm9kZV9raW5kKSBbR0FUSEVSX1NUQVRJU1RJQ1NdOiBQdXQgdGhlIGVudW0gYmFjay4KCldlZCBTZXAgMTggMDQ6MjQ6MDcgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogbWV0aG9kLmMgKG1ha2VfdGh1bmspOiBDYWxsIGNvbWRhdF9saW5rYWdlIGJlZm9yZSBzZXR0aW5nIHRoZQoJVFJFRV9DT0RFLgoKCSogZGVjbDIuYyAoY29tZGF0X2xpbmthZ2UpOiBVc2UgbWFrZV9kZWNsX29uZV9vbmx5LgoJKGltcG9ydF9leHBvcnRfZGVjbCk6IExpa2V3aXNlLgoJKiBkZWNsLmMgKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogQ2hlY2sgc3VwcG9ydHNfb25lX29ubHkgaW5zdGVhZCBvZgoJU1VQUE9SVFNfV0VBSy4KClNhdCBTZXAgMTQgMDg6MzQ6NDEgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZGVjbDIuYyAoZ3Jva2ZpZWxkKTogVGlnaHRlbiBjaGVja2luZyBmb3IgYWNjZXNzIGRlY2xzLgoKCSogZGVjbC5jIChtYWtlX3R5cGVuYW1lX3R5cGUpOiBSZXNvbHZlIHJlZmVyZW5jZXMgdG8KCWN1cnJlbnRfY2xhc3NfdHlwZS4gIFNldCBDTEFTU1RZUEVfR09UX1NFTUlDT0xPTi4KCShsb29rdXBfbmFtZV9yZWFsKTogVHlwZXMgdGhhdCBkZXBlbmQgb24gYSB0ZW1wbGF0ZSBwYXJhbWV0ZXIgZ2V0CglhbiBpbXBsaWNpdCAndHlwZW5hbWUnIHVubGVzcyB0aGV5J3JlIGluIHRoZSBjdXJyZW50IHNjb3BlLgoJKHN0YXJ0X2RlY2xfMSk6IFdlIGRvbid0IGNhcmUgYWJvdXQgaW5jb21wbGV0ZSB0eXBlcyB0aGF0IGRlcGVuZAoJb24gYSB0ZW1wbGF0ZSBwYXJtLgoJKGdyb2tkZWNsYXJhdG9yKTogUmVzb2x2ZSAndHlwZW5hbWUncyBpbiB0aGUgdHlwZSBzcGVjaWZpZXIgdGhhdAoJcmVmZXIgdG8gbWVtYmVycyBvZiB0aGUgY3VycmVudCBzY29wZS4KCgkqIGNhbGwuYyAoYnVpbGRfb3Zlcl9jYWxsKTogUmVtb3ZlICdpbmxpbmUgY2FsbGVkIGJlZm9yZQoJZGVmaW5pdGlvbicgZGlhZ25vc3RpYy4KCShidWlsZF9tZXRob2RfY2FsbCk6IExpa2V3aXNlLgoJKiBkZWNsLmMgKGR1cGxpY2F0ZV9kZWNscyk6IERvd25ncmFkZSAndXNlZCBiZWZvcmUgZGVjbGFyZWQKCWlubGluZScgdG8gYSB3YXJuaW5nLCBvbmx5IHdpdGggLVdpbmxpbmUuCgpGcmkgU2VwIDEzIDE3OjMxOjQwIDE5OTYgIFN0YW4gU2hlYnMgIDxzaGVic0BhbmRyb3MuY3lnbnVzLmNvbT4KCgkqIG1wdy1tYWtlLnNlZDogRml4IGluY2x1ZGUgcGF0aHMsIGFkZCBAREFTSF9DX0ZMQUdAIHRvIGNvbXBpbGUuCgpXZWQgU2VwIDExIDIyOjM4OjEzIDE5OTYgIEdlcmFsZCBCYXVtZ2FydG5lciAgPGdiQGNzLnB1cmR1ZS5lZHU+CgoJKiBjYWxsLmMgKGJ1aWxkX21ldGhvZF9jYWxsKTogV2hlbiBjYWxsaW5nIGEgc2lnbmF0dXJlCglkZWZhdWx0IGltcGxlbWVudGF0aW9uLCBhcyBpbiBvdGhlciBjYXNlcywgbGV0IGluc3RhbmNlX3B0ciBzaW1wbHkKCWJlIGluc3RhbmNlLgoKV2VkIFNlcCAxMSAyMjoxNDo0NCAxOTk2ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiBwYXJzZS55IChzaW1wbGVfc3RtdCk6IENsZWFudXAgYW5kIHVzZSBkb19wb3BsZXZlbCAoKS4KCldlZCBTZXAgMTEgMjI6MTA6NDggMTk5NiAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgoKCSogZXhjZXB0LmMgKGV4cGFuZF9zdGFydF9jYXRjaF9ibG9jayk6IEFkZCBhIHB1c2hsZXZlbCBzbyB0aGF0IC1nCgl3b3JrcyBvbiBocHBhIGFuZCBTUEFSQy4KCldlZCBTZXAgMTEgMTA6MTg6MDYgMTk5NiAgQnJlbmRhbiBLZWhvZSAgPGJyZW5kYW5AbGlzYS5jeWdudXMuY29tPgoKCSogdHlwZWNrLmMgKGJ1aWxkX2luZGlyZWN0X3JlZik6IENhdGNoIFBUUiBiZWluZyBhbiBlcnJvcl9tYXJrX25vZGUuCgpNb24gU2VwICA5IDE5OjUxOjE0IDE5OTYgIEdlcmFsZCBCYXVtZ2FydG5lciAgPGdiQGNzLnB1cmR1ZS5lZHU+CgoJKiBjYWxsLmMgKGJ1aWxkX292ZXJfY2FsbCk6IENoZWNrIGZpcnN0IHdoZXRoZXIgREVDTF9DT05URVhUIGV4aXN0cwoJYmVmb3JlIHRlc3Rpbmcgd2hldGhlciBpdCdzIGEgc2lnbmF0dXJlLgoKU3VuIFNlcCAgOCAxNjowNjo1NyAxOTk2ICBHZXJhbGQgQmF1bWdhcnRuZXIgIDxnYkBjcy5wdXJkdWUuZWR1PgoKCSogY2FsbC5jIChidWlsZF9uZXdfbWV0aG9kX2NhbGwpOiBEb24ndCBjb21wbGFpbiBhYm91dCBzaWduYXR1cmUKCXBvaW50ZXJzIGFuZCByZWZlcmVuY2VzIG5vdCBiZWluZyBhbiBhZ2dyIHR5cGUuCgkoYnVpbGRfdGhpcyk6IElmIGEgc2lnbmF0dXJlIHBvaW50ZXIgb3IgcmVmZXJlbmNlIHdhcyBwYXNzZWQgaW4sCglqdXN0IHJldHVybiBpdC4KCShidWlsZF9uZXdfbWV0aG9kX2NhbGwpOiBJZiBpbnN0YW5jZSBpcyBhIHNpZ25hdHVyZSBwb2ludGVyLCBzZXQKCWJhc2V0eXBlIHRvIHRoZSBzaWduYXR1cmUgdHlwZSBvZiBpbnN0YW5jZS4KCSogc2lnLmMgKGJ1aWxkX3NpZ25hdHVyZV9tZXRob2RfY2FsbCk6IERlbGV0ZWQgYmFzZXR5cGUgYW5kCglpbnN0YW5jZSBwYXJhbWV0ZXJzLCB0aGV5IGNhbiBiZSBmb3VuZCBhcyB0aGUgREVDTF9DT05URVhUIG9mCglmdW5jdGlvbiBhbmQgYXMgdGhlIGZpcnN0IGFyZ3VtZW50IHBhc3NlZCBpbi4KCSogY3AtdHJlZS5oOiBDaGFuZ2VkIGRlY2xhcmF0aW9uIG9mIGJ1aWxkX3NpZ25hdHVyZV9tZXRob2RfY2FsbC4KCSogY2FsbC5jIChidWlsZF9tZXRob2RfY2FsbCk6IERlbGV0ZWQgZmlyc3QgdHdvIGFyZ3VtZW50cyBpbiBjYWxsCglvZiBidWlsZF9zaWduYXR1cmVfbWV0aG9kX2NhbGwuCgkoYnVpbGRfb3Zlcl9jYWxsKTogQWRkZWQgY2FsbCB0byBidWlsZF9zaWduYXR1cmVfbWV0aG9kX2NhbGwuCgpUaHUgU2VwICA1IDE2OjUxOjI4IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHR5cGVjay5jIChidWlsZF9jX2Nhc3QpOiBEb24ndCB0YWNrIGEgbm9uX2x2YWx1ZV9leHByIG9udG8gYQoJdGFyZ2V0X2V4cHIuCgpUaHUgU2VwICA1IDEwOjA1OjM4IDE5OTYgIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGxpc2EuY3lnbnVzLmNvbT4KCgkqIGN2dC5jIChjb252ZXJ0X3RvX3JlZmVyZW5jZSk6IFVzZSAlI1QsIG5vdCAlI0QsIGZvciBlcnJvci4KCldlZCBTZXAgIDQgMTc6MTY6MDkgMTk5NiAgQm9iIE1hbnNvbiAgPG1hbnNvbkBjaGFybWVkLmN5Z251cy5jb20+CgoJKiBleGNlcHQuYyAoZXhwYW5kX3N0YXJ0X3RyeV9zdG10cyk6IE1vdmUgdG8gZXhjZXB0LmMgaW4gdGhlIGJhY2tlbmQuCgkoZXhwYW5kX2VuZF90cnlfc3RtdHMpOiBSZW1vdmUuCgoJKiBpbml0LmMgKHBlcmZvcm1fbWVtYmVyX2luaXQpOiBVc2UgYWRkX3BhcnRpYWxfZW50cnkgKCkgaW5zdGVhZAoJb2YgZGlyZWN0bHkgbWFuaXB1bGF0aW5nIGxpc3RzLgoJKGVtaXRfYmFzZV9pbml0KTogRGl0dG8uCgpXZWQgU2VwICA0IDEyOjE0OjM2IDE5OTYgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIGV4Y2VwdC5jIChleHBhbmRfZXhjZXB0aW9uX2Jsb2Nrcyk6IEFsd2F5cyBtYWtlIHN1cmUgVVNFIGFuZAoJQ0xPQkJFUiBpbnNucyB0aGF0IGNhbWUgYXQgdGhlIGVuZCBzdGlsbCBkbywgdGhlIGJhY2tlbmQgcmVsaWVzCgl1cG9uIHRoaXMuCgpXZWQgU2VwICA0IDA3OjQ0OjQ4IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGNhbGwuYyAoYnVpbGRfb3Zlcl9jYWxsKTogV2UgY2FuIG9ubHkgdXNlIGEgVEFSR0VUX0VYUFIgb2YgdGhlCglyaWdodCB0eXBlLgoKVHVlIFNlcCAgMyAxOToyNjowNSAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjdnQuYyAoY29udmVydF90b19yZWZlcmVuY2UpOiBSZXZlcnQgbGFzdCBjaGFuZ2UsIGRvbid0IGNvbXBsYWluCglhYm91dCB0ZW1wIHdpdGhvdXQgdGFyZ2V0IGRlY2wuCgpUdWUgU2VwICAzIDEwOjIyOjU2IDE5OTYgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAoZ3Jva2RlY2xhcmF0b3IpOiBEb24ndCBjb3JlIGR1bXAgd2hlbiB2b2lkKCkgaXMgZ2l2ZW4uCgpUdWUgU2VwICAzIDAyOjM4OjU2IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAoY29weV9hcmdzX3ApOiBEb24ndCBjcmFzaC4KCkZyaSBBdWcgMzAgMTQ6MjY6NTcgMTk5NiAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgoKCSogcHQuYyAodHN1YnN0KTogQW5kIHN1cHBvcnQgdGVtcGxhdGUgYXJncyBpbnNpZGUgdGhlIGV4Y2VwdGlvbgoJc3BlY2lmaWNhdGlvbi4KCgkqIHB0LmMgKHRzdWJzdCk6IEFkZCBzdXBwb3J0IGZvciBleGNlcHRpb24gc3BlY2lmaWNhdGlvbnMgaW4KCXRlbXBsYXRlIGZ1bmN0aW9ucy4KCkZyaSBBdWcgMzAgMTA6MDE6NTUgMTk5NiAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgoKCSogY3AtdHJlZS5kZWYgKERFQ0xfU1RNVCk6IEVsaW1pbmF0ZSB0aGUgdGhyb3cgc3BlYyBmaWVsZCwgb25seSAzCglmaWVsZHMgbm93LgoJKiBjcC10cmVlLmggKHN0YXJ0X2RlY2wpOiBFbGltaW5hdGUgdGhlIHRocm93IHNwZWMgcGFyYW1ldGVyLgoJKHN0YXJ0X2Z1bmN0aW9uKTogTGlrZXdpc2UuCgkoc3RhcnRfbWV0aG9kKTogTGlrZXdpc2UuCgkoZ3Jva2ZpZWxkKTogTGlrZXdpc2UuCgkobWFrZV9jYWxsX2RlY2xhcmF0b3IpOiBBZGQgdGhyb3cgc3BlYyBwYXJhbWV0ZXIuCgkoc2V0X3F1YWxzX2FuZF9zcGVjKTogQWRkIHJvdXRpbmUuCgkqIGxleC5jIChzZXRfcXVhbHNfYW5kX3NwZWMpOiBMaWtld2lzZS4KCSogZGVjbC5oIChncm9rZGVjbGFyYXRvcik6IEVsaW1pbmF0ZSB0aGUgdGhyb3cgc3BlYyBwYXJhbWV0ZXIuCgkqIGRlY2wuYyAoc2hhZG93X3RhZyk6IEVsaW1pbmF0ZSB0aGUgdGhyb3cgc3BlYyBwYXJhbWV0ZXIgdG8KCWdyb2tkZWNsYXJhdG9yLgoJKGdyb2t0eXBlbmFtZSk6IExpa2V3aXNlLgoJKHN0YXJ0X2RlY2wpOiBFbGltaW5hdGUgdGhlIHRocm93IHNwZWMgcGFyYW1ldGVyLiAgRWxpbWluYXRlIHRoZQoJdGhyb3cgc3BlYyBwYXJhbWV0ZXIgdG8gZ3Jva2RlY2xhcmF0b3IuICBFbGltaW5hdGUgdGhlIHRocm93IHNwZWMKCWZpZWxkIGluIERFQ0xfU1RNVC4KCShjcF9maW5pc2hfZGVjbCk6IEVsaW1pbmF0ZSB0aGUgdGhyb3cgc3BlYyBmaWVsZCBpbiBERUNMX1NUTVQuCgkoZ3Jva2ZuZGVjbCk6IFJlbW92ZSB1c2VsZXNzIHNldCBvZiByYWlzZXMuCgkoZ3Jva2RlY2xhcmF0b3IpOiBFbGltaW5hdGUgdGhlIHRocm93IHNwZWMgcGFyYW1ldGVyLiAgRWxpbWluYXRlCgl0aGUgdGhyb3cgc3BlYyBwYXJhbWV0ZXIgdG8gc3RhcnRfZGVjbC4gIFB1bGwgdGhlIHRocm93IHNwZWMgb3V0CglvZiB0aGUgY2FsbCBkZWNsYXJhdG9yLgoJKGdyb2twYXJtcyk6IEVsaW1pbmF0ZSB0aGUgdGhyb3cgc3BlYyBwYXJhbWV0ZXIgdG8gZ3Jva2RlY2xhcmF0b3IuCgkoc3RhcnRfZnVuY3Rpb24pOiBFbGltaW5hdGUgdGhlIHRocm93IHNwZWMgcGFyYW1ldGVyLiAgRWxpbWluYXRlCgl0aGUgdGhyb3cgc3BlYyBwYXJhbWV0ZXIgdG8gZ3Jva2RlY2xhcmF0b3IuCgkoc3RhcnRfbWV0aG9kKTogTGlrZXdpc2UuCgkqIGRlY2wyLmMgKGdyb2tmaWVsZCk6IExpa2V3aXNlLgoJKGdyb2tiaXRmaWVsZCk6IEVsaW1pbmF0ZSB0aGUgdGhyb3cgc3BlYyBwYXJhbWV0ZXIgdG8gZ3Jva2RlY2xhcmF0b3IuCgkoZ3Jva29wdHlwZW5hbWUpOiBMaWtld2lzZS4KCShmaW5pc2hfZmlsZSk6IEVsaW1pbmF0ZSB0aGUgdGhyb3cgc3BlYyBwYXJhbWV0ZXIgdG8KCXN0YXJ0X2Z1bmN0aW9uLiAgQWRkIHRocm93IHNwZWMgdG8gbWFrZV9jYWxsX2RlY2xhcmF0b3IuCgkqIGV4Y2VwdC5jIChpbml0X2V4Y2VwdGlvbl9wcm9jZXNzaW5nKTogQWRkIHRocm93IHNwZWMgdG8KCW1ha2VfY2FsbF9kZWNsYXJhdG9yLiAgRWxpbWluYXRlIHRoZSB0aHJvdyBzcGVjIHBhcmFtZXRlciB0bwoJc3RhcnRfZGVjbC4KCShleHBhbmRfc3RhcnRfY2F0Y2hfYmxvY2spOiBFbGltaW5hdGUgdGhlIHRocm93IHNwZWMgcGFyYW1ldGVyIHRvCglncm9rZGVjbGFyYXRvci4KCShleHBhbmRfYnVpbHRpbl90aHJvdyk6IEFkZCB0aHJvdyBzcGVjIHRvIG1ha2VfY2FsbF9kZWNsYXJhdG9yLgoJRWxpbWluYXRlIHRoZSB0aHJvdyBzcGVjIHBhcmFtZXRlciB0byBzdGFydF9mdW5jdGlvbi4KCShzdGFydF9hbm9uX2Z1bmMpOiBMaWtld2lzZS4KCSogbGV4LmMgKG1ha2VfY2FsbF9kZWNsYXJhdG9yKTogQWRkIHRocm93IHNwZWMgcGFyYW1ldGVyLgoJKHNldF9xdWFsc19hbmRfc3BlYyk6IE5ldyByb3V0aW5lLgoJKGNvbnNfdXBfZGVmYXVsdF9mdW5jdGlvbik6IEFkZCB0aHJvdyBzcGVjIHRvIG1ha2VfY2FsbF9kZWNsYXJhdG9yLgoJRWxpbWluYXRlIHRoZSB0aHJvdyBzcGVjIHBhcmFtZXRlciB0byBncm9rZmllbGQuCgkqIG1ldGhvZC5jIChzeW50aGVzaXplX21ldGhvZCk6IEVsaW1pbmF0ZSB0aGUgdGhyb3cgc3BlYyBwYXJhbWV0ZXIKCXRvIHN0YXJ0X2Z1bmN0aW9uLgoJKiBwdC5jIChwcm9jZXNzX3RlbXBsYXRlX3Bhcm0pOiBFbGltaW5hdGUgdGhlIHRocm93IHNwZWMgcGFyYW1ldGVyCgl0byBncm9rZGVjbGFyYXRvci4KCSh0c3Vic3QpOiBBZGQgdGhyb3cgc3BlYyB0byBtYWtlX2NhbGxfZGVjbGFyYXRvci4KCSh0c3Vic3RfZXhwcik6IEVsaW1pbmF0ZSB0aGUgdGhyb3cgc3BlYyBwYXJhbWV0ZXIgdG8gc3RhcnRfZGVjbC4KCShkb19mdW5jdGlvbl9pbnN0YW50aWF0aW9uKTogRWxpbWluYXRlIHRoZSB0aHJvdyBzcGVjIHBhcmFtZXRlciB0bwoJZ3Jva2RlY2xhcmF0b3IuICBFbGltaW5hdGUgdGhlIHRocm93IHNwZWMgcGFyYW1ldGVyIHRvCglzdGFydF9mdW5jdGlvbi4KCSogcnR0aS5jIChzeW50aGVzaXplX3RpbmZvX2ZuKTogRWxpbWluYXRlIHRoZSB0aHJvdyBzcGVjIHBhcmFtZXRlcgoJdG8gc3RhcnRfZnVuY3Rpb24uCgkqIHBhcnNlLnkgKGRhdGFkZWYpOiBSZW1vdmUgbm9uLXdpbm5pbmcgb3B0aW1pemF0aW9uLgoJKGRlY2wpOiBMaWtld2lzZS4KCShmbmRlZik6IFJlbW92ZSBhbWJpZ3VvdXMgZXJyb3IgcHJvZHVjdGlvbnMgdW5jb3ZlcmVkIGJ5IGdyYW1tZXIKCWZpeGluZy4KCShjb25zdHJ1Y3Rvcl9kZWNsYXJhdG9yKTogQWRkIGV4Y2VwdGlvbl9zcGVjaWZpY2F0aW9uX29wdCBoZXJlLgoJKGNvbXBvbmVudF9jb25zdHJ1Y3Rvcl9kZWNsYXJhdG9yKTogTGlrZXdpc2UuCgkoZGlyZWN0X2FmdGVyX3R5cGVfZGVjbGFyYXRvcik6IExpa2V3aXNlLgoJKGNvbXBsZXhfZGlyZWN0X25vdHlwZV9kZWNsYXJhdG9yKTogTGlrZXdpc2UuCgkoZGlyZWN0X2Fic3RyYWN0X2RlY2xhcmF0b3IpOiBMaWtld2lzZS4KCShmbi5kZWYxKTogUmVtb3ZlIGV4Y2VwdGlvbl9zcGVjaWZpY2F0aW9uX29wdC4KCShmbi5kZWYyKTogTGlrZXdpc2UuCgkoY29uZGl0aW9uKTogTGlrZXdpc2UuCgkoaW5pdGRjbDApOiBMaWtld2lzZS4KCShpbml0ZGNsKTogTGlrZXdpc2UuCgkobm90eXBlX2luaXRkY2wwKTogTGlrZXdpc2UuCgkobm9tb2RzX2luaXRkY2wwKTogTGlrZXdpc2UuCgkoY29tcG9uZW50X2RlY2xfMSk6IExpa2V3aXNlLgoJKGNvbXBvbmVudF9kZWNsYXJhdG9yKTogTGlrZXdpc2UuCgkoYWZ0ZXJfdHlwZV9jb21wb25lbnRfZGVjbGFyYXRvcjApOiBMaWtld2lzZS4KCShhZnRlcl90eXBlX2NvbXBvbmVudF9kZWNsYXJhdG9yKTogTGlrZXdpc2UuCgkobm90eXBlX2NvbXBvbmVudF9kZWNsYXJhdG9yKTogTGlrZXdpc2UuCgpXZWQgQXVnIDI4IDAxOjQwOjMwIDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGNhbGwuYyAoYnVpbGRfb3Zlcl9jYWxsKTogQWxzbyB1c2UgYW4gSU5JVF9FWFBSIHdoZW4KCWluaXRpYWxpemluZyBhbnl0aGluZyBmcm9tIGFuIHJ2YWx1ZS4KCgkqIGNhbGwuYyAoYnVpbGRfb3Zlcl9jYWxsKTogQ2FsbCBzdGFiaWxpemVfcmVmZXJlbmNlIHdoZW4gYnVpbGRpbmcKCWFuIElOSVRfRVhQUiBpbnN0ZWFkIG9mIGNhbGxpbmcgdGhlIGNvcHkgY3Rvci4KCgkqIGNhbGwuYyAoam91c3QpOiBFeHRlbmQgdGhlIHByZXZpb3VzIGNoYW5nZSB0byBhbGwgY29tcGFyaXNvbnMuCgoJKiBkZWNsMi5jLCBtZXRob2QuYywgbGV4LmM6IFVzZSBNQUtFX0RFQ0xfT05FX09OTFkgYW5kIAoJTk9fTElOS0FHRV9IRVVSSVNUSUNTLgoKCSogZGVjbDIuYyAoZmluaXNoX2ZpbGUpOiBFbWl0IGFueSBzdGF0aWNzIHRoYXQgd2VyZW4ndCBhbHJlYWR5LgoKCSogdHlwZWNrLmMgKGJ1aWxkX3N0YXRpY19jYXN0KTogSW1wbGVtZW50LgoJKiB0cmVlLmMgKGJ1aWxkX2NwbHVzX25ldyk6IEhhbmRsZSBnZXR0aW5nIGEgVEFSR0VUX0VYUFIuCgkqIGRlY2wuYyAoZ3Jva3Bhcm1zKTogVXNlIGNhbl9jb252ZXJ0X2FyZyBpbnN0ZWFkIG9mCglpbXBsaWNpdF9jb252ZXJzaW9uIGRpcmVjdGx5LgoJKGNvcHlfYXJnc19wKTogTmV3IGZuLgoJKiBjdnQuYyAoY29udmVydF90b19yZWZlcmVuY2UpOiBEb24ndCBjb21wbGFpbiBhYm91dCB0ZW1wIHdpdGgKCXN0YXRpY19jYXN0LgoJKGJ1aWxkX3VwX3JlZmVyZW5jZSk6IEhhbmRsZSBUQVJHRVRfRVhQUnMuCgkqIGNhbGwuYyAoYnVpbGRfb3Zlcl9jYWxsKTogRWxpZGUgdW5uZWNlc3NhcnkgdGVtcHMuCgkoY2FuX2NvbnZlcnQqKTogVXNlIG5ldyBvdmVybG9hZGluZyBjb2RlLgoKVHVlIEF1ZyAyNyAxMzoxMjoyMSAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjYWxsLmM6IE1vdmUgVFlQRV9QVFIqX01BQ1JPUyAuLi4KCSogY3AtdHJlZS5oOiBUbyBoZXJlLgoJKiB0eXBlY2suYyAoYnVpbGRfcmVpbnRlcnByZXRfY2FzdCk6IEltcGxlbWVudC4KCgkqIGNhbGwuYyAoYWRkX2J1aWx0aW5fY2FuZGlkYXRlKTogVXNlIFRZUEVfUFRST0JfUCBpbnN0ZWFkIG9mCglwdHJfY29tcGxldGVfb2IuCgkoam91c3QpOiBJZiB3ZSdyZSBjb21wYXJpbmcgYSBmdW5jdGlvbiB0byBhIGJ1aWx0aW4gYW5kIHRoZSB3b3JzdAoJY29udmVyc2lvbiBmb3IgdGhlIGJ1aWx0aW4gaXMgd29yc2UgdGhhbiB0aGUgd29yc3QgY29udmVyc2lvbiBmb3IgdGhlCglmdW5jdGlvbiwgdGFrZSB0aGUgZnVuY3Rpb24uCgoJKiB0eXBlY2suYyAoYnVpbGRfY29uc3RfY2FzdCk6IEltcGxlbWVudC4KCShjb21wX3B0cl90dHlwZXNfY29uc3QpOiBMaWtlIGNvbXBfcHRyX3R0eXBlcywgZm9yIGNvbnN0X2Nhc3QuCgkoY29tcF9wdHJfdHR5cGVzX3JlaW50ZXJwcmV0KTogTGlrZSBjcHQsIGZvciByZWludGVycHJldF9jYXN0LgoKVHVlIEF1ZyAyNyAxMzoxNDo1OCAxOTk2ICBCb2IgTWFuc29uICA8bWFuc29uQGNoYXJtZWQuY3lnbnVzLmNvbT4KCgkqIHJ0dGkuYyAoYnVpbGRfZHluYW1pY19jYXN0KTogRG9uJ3QgdHJ5IHRvIGRlcmVmZXJlbmNlIGV4cHJ0eXBlCgl0b28gZWFybHkuIE1ha2Ugc3VyZSB3ZSBleHBsb2RlIGlmIGV4cHJ0eXBlIHR1cm5zIG91dCB0byBiZSBhCglOVUxMX1RSRUUgd2hlbiBpdCBzaG91bGRuJ3QgYmUuCgpUdWUgQXVnIDI3IDEwOjU2OjIxIDE5OTYgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIGNwLXRyZWUuaDogTmV3IHJvdXRpbmUgbWFrZV9jYWxsX2RlY2xhcmF0b3IuCgkqIGxleC5jIChtYWtlX2NhbGxfZGVjbGFyYXRvcik6IERlZmluZSBpdC4KCSogZXhjZXB0LmMgKGluaXRfZXhjZXB0aW9uX3Byb2Nlc3NpbmcpOiBVc2UgaXQuCgkoZXhwYW5kX2J1aWx0aW5fdGhyb3cpOiBMaWtld2lzZS4KCShzdGFydF9hbm9uX2Z1bmMpOiBMaWtld2lzZS4KCSogZGVjbDIuYyAoZmluaXNoX2ZpbGUpOiBMaWtld2lzZS4KCSogbGV4LmMgKGNvbnNfdXBfZGVmYXVsdF9mdW5jdGlvbik6IExpa2V3aXNlLgoJKiBwYXJzZS55OiBMaWtld2lzZS4KCSogcHQuYyAodHN1YnN0KTogTGlrZXdpc2UuCgkKTW9uIEF1ZyAyNiAxNzo0MDowMyAxOTk2ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiBkZWNsMi5jIChncm9rdHlwZWZpZWxkKTogUmVtb3ZlIHVudXNlZCBjb2RlLgoKTW9uIEF1ZyAyNiAxNzowMDozMyAxOTk2ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiBneHguZ3BlcmY6IENoYW5nZSBUWVBFX1FVQUwgaW50byBDVl9RVUFMSUZJRVIuCgkqIHBhcnNlLnk6IExpa2V3aXNlLiAgQ2hhbmdlIG1heWJlX3R5cGVfcXVhbCBpbnRvIG1heWJlX2N2X3F1YWxpZmllci4KCUNoYW5nZSB0eXBlX3F1YWxzIGludG8gY3ZfcXVhbGlmaWVycy4gIENoYW5nZSBub25lbXB0eV90eXBlX3F1YWxzIGludG8KCW5vbmVtcHR5X2N2X3F1YWxpZmllcnMuCgkqIGhhc2guaDogUmVidWlsZC4KCQoJKiBsZXguYyAobWFrZV9wb2ludGVyX2RlY2xhcmF0b3IpOiBDaGFuZ2UgdHlwZV9xdWFscyBpbnRvCgljdl9xdWFsaWZpZXJzLgoJKG1ha2VfcmVmZXJlbmNlX2RlY2xhcmF0b3IpOiBMaWtld2lzZS4KCQpUaHUgQXVnIDIyIDAxOjA5OjIyIDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAoc3RhcnRfZnVuY3Rpb24pOiBPbmx5IGNoZWNrIGludGVyZmFjZV8qIGZvciB0ZW1wbGF0ZXMKCXdpdGggZmxhZ19hbHRfZXh0ZXJuYWxfdGVtcGxhdGVzLgoKCSogY2FsbC5jIChidWlsZF9uZXdfb3ApOiBDaGVjayBmb3IgY29tcGFyaXNvbiBvZiBkaWZmZXJlbnQgZW51bSB0eXBlcy4KCShidWlsZF9vdmVyX2NhbGwpOiBGaXggYXJnICMgb3V0cHV0LgoKCSogdHlwZWNrLmMgKGJ1aWxkX2NvbXBvbmVudF9yZWYpOiBIYW5kbGUgcHJlLWZvdW5kIFRZUEVfREVDTC4KCldlZCBBdWcgMjEgMDA6MTM6MTUgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY2FsbC5jIChidWlsZF9uZXdfb3ApOiBDaGVjayBmb3IgZXJyb25lb3VzIGFyZ3MuCgoJKiBjYWxsLmMgKGJ1aWxkX25ld19tZXRob2RfY2FsbCk6IEFkZCBtaXNzaW5nIGFyZ3MgdG8gY3BfZXJyb3IuCgoJKiB0cmVlLmMgKGVycm9yX3R5cGUpOiBEb250IHByaW50IHJlZmVyZW5jZS10by1hcnJheS4KCgkqIHR5cGVjay5jIChjb252ZXJ0X2Zvcl9hc3NpZ25tZW50KTogRG9uJ3Qgc2F5IGNvbnRyYXZhcmlhbmNlIGZvcgoJcmVtb3ZpbmcgY29uc3QuCgpUdWUgQXVnIDIwIDEzOjIzOjAwIDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGNhbGwuYyAoYnVpbGRfb3Zlcl9jYWxsKTogRGlhZ25vc2UgYmFkIGNvbnZzIGZvciBgdGhpcycuCgoJKiBsZXguYyAoY29uc191cF9kZWZhdWx0X2Z1bmN0aW9uKTogU2V0IERFQ0xfQVJUSUZJQ0lBTAoJb24gX2N0b3JfYXJnLgoKCSogY2FsbC5jIChjb252ZXJ0X2xpa2UpOiBIYW5kbGUgYmFkIGNvbnZzLgoJKGJ1aWxkX292ZXJfY2FsbCk6IEhhbmRsZSBiYWQgY29udnMgYmV0dGVyLgoKCSogZGVjbDIuYzogLWZhbnNpLW92ZXJsb2FkaW5nIGlzIG5vdyB0aGUgZGVmYXVsdC4KCgkqIGNhbGwuYyAoYnVpbGRfbmV3X21ldGhvZF9jYWxsKTogQ2hlY2sgZm9yIGVycm9uZW91cyBhcmdzLgoKCSogcHQuYyAoaW5zdGFudGlhdGVfY2xhc3NfdGVtcGxhdGUpOiBQcm9wYWdhdGUKCVRZUEVfVVNFU19NVUxUSVBMRV9JTkhFUklUQU5DRS4KClR1ZSBBdWcgMjAgMTM6MDk6NTcgMTk5NiAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgoKCSogY2FsbC5jIChlbmZvcmNlX2FjY2Vzcyk6IEFkZCBzdGF0aWMgdG8gcm91dGluZS4KClN1biBBdWcgMTggMTQ6MzU6NTQgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY2FsbC5jIChidWlsZF91c2VyX3R5cGVfY29udmVyc2lvbl8xKTogRml4IGJhZCBoYW5kbGluZy4KCShjb21wYXJlX2ljcyk6IExpa2V3aXNlLgoKU2F0IEF1ZyAxNyAyMTo1NDoxMSAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjYWxsLmMgKHN0YW5kYXJkX2NvbnZlcnNpb24pOiBPb3BzLgoKU2F0IEF1ZyAxNyAxNjoyODoxMSAxOTk2ICBHZW9mZnJleSBOb2VyICA8bm9lckBjeWdudXMuY29tPgoKCSogZysrLmM6IFVwZGF0ZSB0ZXN0IGZvciB3aW4zMiAoJiYgISBjeWd3aW4zMikuCgpTYXQgQXVnIDE3IDAzOjQ1OjMxIDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHR5cGVjay5jIChjb21wX3B0cl90dHlwZXNfcmVhbCk6IEhhbmRsZSBPRkZTRVRfVFlQRXMgcHJvcGVybHkuCgkocHRyX3JlYXNvbmFibHlfc2ltaWxhcik6IE5ldyBmbi4KCSogY2FsbC5jIChCQURfUkFOSyk6IE5ldyByYW5rLgoJKElDU19CQURfRkxBRyk6IE5ldyBtYWNyby4KCShzdGFuZGFyZF9jb252ZXJzaW9uKTogSGFuZGxlIGFsbW9zdC1yaWdodCBwb2ludGVyIGNvbnZlcnNpb25zLgoJKHJlZmVyZW5jZV9iaW5kaW5nKTogSGFuZGxlIGJhZCBydmFsdWUgYmluZGluZ3MuCgkoYWRkXypfY2FuZGlkYXRlKTogU3R1ZmYuCgkoYnVpbGRfb3Zlcl9jYWxsKTogUGFzcyBiYWQgY29udmVyc2lvbnMgdG8gY29udmVydF9mb3JfaW5pdGlhbGl6YXRpb24uCgkoY29tcGFyZV9pY3MpOiBIYW5kbGUgYmFkIGNvbnZzLgoJKGpvdXN0KTogTGlrZXdpc2UuCgpGcmkgQXVnIDE2IDE1OjAyOjE5IDE5OTYgIEJvYiBNYW5zb24gIDxtYW5zb25AY2hhcm1lZC5jeWdudXMuY29tPgoKCSogaW5pdC5jIChleHBhbmRfdmVjX2luaXQpOiBVc2UgcHRyZGlmZl90eXBlX25vZGUgaW5zdGVhZCBvZgoJaW50ZWdlcl90eXBlX25vZGUgd2hlbiBjb21wdXRpbmcgcG9pbnRlciBvZmZzZXRzLgoKRnJpIEF1ZyAxNiAwMToyODozMiAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiB0cmVlLmMgKGx2YWx1ZV90eXBlKTogTmV3IGZuLgoJKGVycm9yX3R5cGUpOiBOZXcgZm4uCgkqIGNhbGwuYyAob3BfZXJyb3IpOiBVc2UgZXJyb3JfdHlwZS4KCShhZGRfY29udl9jYW5kaWRhdGUpOiBVc2UgbHZhbHVlX3R5cGUuCgkoYWRkX2J1aWx0aW5fY2FuZGlkYXRlcyk6IExpa2V3aXNlLgoJKiBlcnJvci5jIChhcmdzX2FzX3N0cmluZyk6IFVzZSBlcnJvcl90eXBlLgoKVGh1IEF1ZyAxNSAxNzoyNzoxMyAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBwdC5jIChpbnN0YW50aWF0ZV9kZWNsKTogRXZhbHVhdGUgREVDTF9JTklUSUFMIG9mIGEgVkFSX0RFQ0wgaGVyZS4KCSh0c3Vic3QpOiBOb3QgaGVyZS4KCgkqIGRlY2wuYyAoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBXaXRoIC1hbnNpLCBfX251bGwncyB0eXBlIGlzIHRoZQoJc2lnbmVkIGludGVncmFsIHR5cGUgd2l0aCB0aGUgc2FtZSBudW1iZXIgb2YgYml0cyBhcyBhIHBvaW50ZXIuCglJbnRyb2R1Y2UgYSBuZXcgdmFyaWFibGUgbnVsbF9ub2RlIGZvciBpdC4KCSogY3AtdHJlZS5oOiBBZGp1c3QuCgkqIGNhbGwuYyAobnVsbF9wdHJfY3N0X3ApOiBBZGp1c3QuCgpUaHUgQXVnIDE1IDE3OjA5OjU0IDE5OTYgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIGV4Y2VwdC5jIChkb191bndpbmQpOiBNYXJrICVpNyBhcyB1c2VkIG9uIHRoZSBTUEFSQyBzbyB3ZSBjYW4KCW9wdGltaXplLgoKVGh1IEF1ZyAxNSAwMTozNjo0OSAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBkZWNsMi5jIChpbXBvcnRfZXhwb3J0X2RlY2wpOiBJZ25vcmUgI3ByYWdtYSBpbnRlcmZhY2UgZm9yIHRpbmZvCglmbnMgb2YgY2xhc3NlcyB3aXRob3V0IHZpcnR1YWwgZnVuY3Rpb25zLgoKCSogY2FsbC5jIChhZGRfZnVuY3Rpb25fY2FuZGlkYXRlKTogSGFuZGxlIGB0aGlzJyBzcGVjaWFsbHkuCgkoY29tcGFyZV9pY3MpOiBMaWtld2lzZS4KClR1ZSBBdWcgMTMgMTI6MTY6MTAgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogdHlwZWNrLmMgKGJ1aWxkX2NvbmRpdGlvbmFsX2V4cHIpOiBGaXggaGFuZGxpbmcgb2YgX19udWxsLgoKCSogZGVjbDIuYyAoY29tZGF0X2xpbmthZ2UpOiBOZXcgZm4uCgkoaW1wb3J0X2V4cG9ydF92dGFibGUpOiBVc2UgaXQuCgkoaW1wb3J0X2V4cG9ydF9kZWNsKTogVXNlIGl0LgoJKiBtZXRob2QuYyAobWFrZV90aHVuayk6IFVzZSBpdC4KCk1vbiBBdWcgMTIgMDA6MDk6MTggMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogcHQuYyAoZW5kX3RlbXBsYXRlX2RlY2wpOiBJZiB3ZSBkb24ndCBhY3R1YWxseSBoYXZlIHBhcm1zLCByZXR1cm4uCgkqIHBhcnNlLnkgKHRlbXBsYXRlX2hlYWRlcik6IEFjY2VwdCAndGVtcGxhdGUgPD4nLgoKCSogZXJyZm4uYzogQWxsb3cgNSBhcmdzLgoKU3VuIEF1ZyAxMSAxNToyMDo1OCAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiB0cmVlLmMgKG1ha2VfdGVtcF92ZWMpOiBOZXcgZm4uCgkqIHB0LmMgKHB1c2hfdGVtcGxhdGVfZGVjbCk6IEhhbmRsZSBwYXJ0aWFsIHNwZWNzLgoJKGluc3RhbnRpYXRlX2NsYXNzX3RlbXBsYXRlKTogTGlrZXdpc2UuCgkobW9yZV9zcGVjaWFsaXplZCk6IFVzZSBnZXRfYmluZGluZ3MuCgkobW9yZV9zcGVjaWFsaXplZF9jbGFzcyk6IE5ldyBmbi4KCShnZXRfY2xhc3NfYmluZGluZ3MpOiBOZXcgZm4uCgkobW9zdF9zcGVjaWFsaXplZF9jbGFzcyk6IE5ldyBmbi4KCShkb19mdW5jdGlvbl9pbnN0YW50aWF0aW9uKTogTGlzdCBjYW5kaWRhdGVzIGZvciBhbWJpZ3VvdXMgY2FzZS4KCSogZGVjbC5jIChkdXBsaWNhdGVfZGVjbHMpOiBMb3NlIHJlZmVyZW5jZSB0byBERUNMX1RFTVBMQVRFX01FTUJFUlMuCgkoc2hhZG93X3RhZyk6IENhbGwgcHVzaF90ZW1wbGF0ZV9kZWNsIGZvciBwYXJ0aWFsIHNwZWNpYWxpemF0aW9ucy4KCSogcGFyc2UueTogTGlrZXdpc2UuCgkqIGNwLXRyZWUuaCAoREVDTF9URU1QTEFURV9TUEVDSUFMSVpBVElPTlMpOiBSZXBsYWNlcwoJREVDTF9URU1QTEFURV9NRU1CRVJTLgoJKiBjYWxsLmMgKHByaW50X3pfY2FuZGlkYXRlcyk6IFJlZHVjZSBkdXBsaWNhdGlvbi4KCkZyaSBBdWcgIDkgMTQ6MzY6MDggMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZGVjbDIuYyAobGFuZ19kZWNvZGVfb3B0aW9uKTogQWxsb3cgLWZhbnNpLW92ZXJsb2FkaW5nLgoKVGh1IEF1ZyAgOCAxNzowNDoxOCAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBwdC5jIChnZXRfYmluZGluZ3MpOiBOZXcgZm4uCgkobW9zdF9zcGVjaWFsaXplZCk6IExpa2V3aXNlLgoJKGRvX2Z1bmN0aW9uX2luc3RhbnRpYXRpb24pOiBVc2UgdGhlbS4KCShhZGRfbWF5YmVfdGVtcGxhdGUpOiBOZXcgZm4uCgkqIGNwLXRyZWUuaCAoREVDTF9NQVlCRV9URU1QTEFURSk6IE5ldyBtYWNyby4KCSogY2FsbC5jIChidWlsZF9uZXdfb3ApOiBIYW5kbGUgZ3VpZGluZyBkZWNscy4KCShidWlsZF9uZXdfZnVuY3Rpb25fY2FsbCk6IExpa2V3aXNlLgoJKiBkZWNsMi5jIChmaW5pc2hfZmlsZSk6IExpa2V3aXNlLgoKCSogZGVjbDIuYyAobWFya191c2VkKTogRG8gc3ludGhlc2lzIGhlcmUuCgkqIGNhbGwuYyAoYnVpbGRfbWV0aG9kX2NhbGwpOiBOb3QgaGVyZS4KCShidWlsZF9vdmVyX2NhbGwpOiBPciBoZXJlLgoJKiB0eXBlY2suYyAoYnVpbGRfZnVuY3Rpb25fY2FsbF9yZWFsKTogT3IgaGVyZS4KCSogdHJlZS5jIChib3RfbWFuaXApOiBDYWxsIG1hcmtfdXNlZCBvbiBmdW5jdGlvbnMgdXNlZCBpbiBkZWZhdWx0CglhcmdzLgoKVGh1IEF1ZyAgOCAxNzo0ODoxNiAxOTk2ICBNaWNoYWVsIE1laXNzbmVyICA8bWVpc3NuZXJAdGlrdG9rLmN5Z251cy5jb20+CgoJKiBkZWNsMi5jIChpbXBvcnRfZXhwb3J0X3Z0YWJsZSk6IERlbGV0ZSBjb2RlIHRoYXQgZGlzYWJsZWQgdnRhYmxlCgloZXVyaXN0aWMgb24gc3lzdGVtcyB3aXRoIEFTTV9PVVRQVVRfRVhURVJOQUwuCgpXZWQgQXVnICA3IDEyOjQ0OjExIDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHR5cGVjay5jIChidWlsZF94X2Z1bmN0aW9uX2NhbGwpOiBIYW5kbGUgc3RhdGljIGNhbGwgY29udGV4dAoJYmV0dGVyLgoKCSogZGVjbC5jIChmaW5pc2hfZnVuY3Rpb24pOiBTZXQgdGhlIERFQ0xfQ09OVEVYVCBvZiB0aGUgcmVzdWx0IHRvCgl0aGUgZnVuY3Rpb24sIG5vdCBpdHMgb3V0ZXIgYmxvY2suCgoJKiBjYWxsLmMgKGJ1aWxkX2ZpZWxkX2NhbGwpOiBQYXNzIGZpZWxkcyBvbiB0byBidWlsZF9vcGZuY2FsbAoJcmVnYXJkbGVzcyBvZiBUWVBFX09WRVJMT0FEU19DQUxMX0VYUFIuCgkoYnVpbGRfbWV0aG9kX2NhbGwpOiBQYXNzIG9uIHRvIGJ1aWxkX25ld19tZXRob2RfY2FsbCBzb29uZXIuCgoJKiB0eXBlY2suYyAoYnVpbGRfcHRybWVtZnVuYyk6IEp1c3QgcmV0dXJuIHdoYXQgaW5zdGFudGlhdGVfdHlwZQoJZ2l2ZXMgdXMuCgkqIGNsYXNzLmMgKGluc3RhbnRpYXRlX3R5cGUpOiBEb24ndCBwdXQgYSBQT0lOVEVSX1RZUEUgdG8KCU1FVEhPRF9UWVBFIG9uIGFuIGV4cHJlc3Npb24uICBBbHNvIG1ha2UgYSBjb3B5IG9mIHJocyBpbnN0ZWFkIG9mCgltb2RpZnlpbmcgaXQuCgpUdWUgQXVnICA2IDEyOjU4OjQ2IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGNhbGwuYyAoY29tcGFyZV9pY3MpOiBIYW5kbGUgcXVhbF9jb252IGFmdGVyIGx2YWx1ZV9jb252LgoJKGFkZF9idWlsdGluX2NhbmRpZGF0ZSk6IERvbid0IHRha2UgZW51bXMgZm9yICsrLgoJKGJ1aWxkX25ld19tZXRob2RfY2FsbCk6IEhhbmRsZSBub24tYWdncmVnYXRlcyBhbmQgZmllbGQgY2FsbHMuCglNb3ZlIG5ldyBvdmVybG9hZGluZyBjb2RlIGZyb20uLi4KCSogY3Z0LmM6IEhlcmUuCgoJKiBkZWNsLmMgKGdyb2twYXJtcyk6IERvbid0IGNoZWNrIGRlZmF1bHQgYXJncyBpbiB0ZW1wbGF0ZXMuCgpNb24gQXVnICA1IDE3OjE3OjA2IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGN2dC5jIChidWlsZF9uZXdfb3ApOiBGaXggYXJncyB0byBidWlsZF91bmFyeV9vcC4KCShhZGRfYnVpbHRpbl9jYW5kaWRhdGVzKTogRG9uJ3QgY2FsbCB0eXBlX3Byb21vdGVzX3RvIG9uIGZsb2F0LgoKCSogZGVjbC5jIChncm9rcGFybXMpOiBDaGVjayB0aGUgdHlwZSBvZiB0aGUgZGVmYXVsdCBhcmcuCgoJKiBjdnQuYyAoYnVpbGRfbmV3X29wKTogUGFzcyBub24tb3ZlcmxvYWRlZCBjYXNlcyBvbiByYXRoZXIgdGhhbgoJcmV0dXJuaW5nIE5VTExfVFJFRS4KCgkqIHR5cGVjay5jIChidWlsZF94X2JpbmFyeV9vcCk6IEF2b2lkIGRvaW5nIGV4dHJhIHdvcmsuCgkoYnVpbGRfeF91bmFyeV9vcCk6IExpa2V3aXNlLgoJKGJ1aWxkX3hfY29uZGl0aW9uYWxfZXhwcik6IExpa2V3aXNlLgoJKiBjdnQuYyAoYnVpbGRfb3Zlcl9jYWxsKTogUmV0dXJuLgoJKGFkZF9idWlsdGluX2NhbmRpZGF0ZSk6IEZpeCBNRU1CRVJfUkVGLgoJKGJ1aWxkX25ld19vcCk6IExpa2V3aXNlLgoKTW9uIEF1ZyAgNSAxNzowNzo0NyAxOTk2ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiBtZXRob2QuYyAoYnVpbGRfb3ZlcmxvYWRfbmFtZSk6IFB1dCBidWcgZml4IGludG8gY29kZSBidXQgbGVhdmUKCWRpc2FibGVkIGZvciBub3cgc28gd2UgY2FuIGJlIGJ1ZyBjb21wYXRpYmxlIHdpdGggb2xkZXIgcmVsZWFzZXMKCXRoYXQgZG8gcmVwZWF0cyBpbmNvcnJlY3RseS4gIEluIHRoZSBmdXR1cmUsIHdlIGNhbiBlbmFibGUgaXQuCgpNb24gQXVnICA1IDEzOjQ2OjI4IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGN2dC5jIChjb252ZXJ0X2xpa2UpOiBEb24ndCBjYWxsIGJ1aWxkX2NwbHVzX25ldyB0d2ljZS4KCgkqIGNhbGwuYywgY3AtdHJlZS5oLCBjdnQuYywgZGVjbDIuYywgaW5pdC5jLCBtZXRob2QuYywgcHQuYywgdHlwZWNrLmM6CglDb250cm9sIG5ldyBvdmVybG9hZGluZyBjb2RlIHdpdGggLWZhbnNpLW92ZXJsb2FkaW5nLgoKU3VuIEF1ZyAgNCAxNToyOToxMSAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjdnQuYyAoYnVpbGRfb3Zlcl9jYWxsKTogQ2FsbCBidWlsZF9jcGx1c19uZXcuCgkqIGNhbGwuYyAoYnVpbGRfbWV0aG9kX2NhbGwpOiBMaWtld2lzZS4KCSogdHlwZWNrLmMgKGJ1aWxkX2Z1bmN0aW9uX2NhbGxfcmVhbCk6IExpa2V3aXNlLgoJKGJ1aWxkX2NvbmRpdGlvbmFsX2V4cHIpOiBJZiBib3RoIG9wZXJhbmRzIGFyZSBUQVJHRVRfRVhQUnMsIHdyYXAKCXRoZSBDT05EX0VYUFIgaW4gYSBUQVJHRVRfRVhQUiBzbyB0aGV5IHVzZSB0aGUgc2FtZSBzbG90LgoKCSogY3Z0LmMgKGJ1aWxkX3VwX3JlZmVyZW5jZSk6IFByb3BhZ2F0ZSBJTkRJUkVDVF9CSU5EIHRvIAoJcmVjdXJzaXZlIGNhbGxzLgoJKiB0eXBlY2suYyAoY29tcGxldGVfdHlwZSk6IFByb3BhZ2F0ZQoJVFlQRV9ORUVEU197Q09OU1RSVUNUSU5HLERFU1RSVUNUT1J9LgoKU2F0IEF1ZyAgMyAxNDowNTowNyAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjdnQuYyAoam91c3QpOiBNb3JlID86IGtsdWRnaW5nLiAgU2lnaC4KCShidWlsZF9vdmVyX2NhbGwpOiBEb24ndCB0cnkgdG8gc3ludGhlc2l6ZSBnbG9iYWwgZm5zLgoKCSogc2VhcmNoLmMgKGxvb2t1cF9jb252ZXJzaW9ucyk6IFVzZSBiaW5mbyBtYXJraW5nLgoKU2F0IEF1ZyAgMyAxMjozMzo0MiAxOTk2ICBCb2IgTWFuc29uICA8bWFuc29uQGNoYXJtZWQuY3lnbnVzLmNvbT4KCgkqIHNlYXJjaC5jIChidWlsZF9taV9tYXRyaXgpOiBVc2UgdGhlIGNvcnJlY3QgdmFsdWUgb2YgY2lkCgl3aGVuIGRldGVybWluaW5nIHRoZSBuZXcgbWlfc2l6ZS4KClNhdCBBdWcgIDMgMDE6Mjc6NDEgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY3Z0LmMgKGFkZF9idWlsdGluX2NhbmRpZGF0ZXMpOiBEbyBjb25zaWRlciB0eXBlIGNvbnZlcnNpb24gb3BzCglmb3IgdGhlIGZpcnN0IHBhcm1zIG9mICs9IGV0IGFsLgoJKHN0cmlwX3RvcF9xdWFscyk6IE5ldyBmbi4KCShyZWZlcmVuY2VfYmluZGluZyk6IFVzZSBpdCBpbnN0ZWFkIG9mIFRZUEVfTUFJTl9WQVJJQU5ULgoJKGltcGxpY2l0X2NvbnZlcnNpb24pOiBMaWtld2lzZS4KCShhZGRfYnVpbHRpbl9jYW5kaWRhdGVzKTogQmUgY2FyZWZ1bCBhYm91dCBhcnJheXMuCgkoYnVpbGRfbmV3X21ldGhvZF9jYWxsKTogSGFuZGxlIHZ0YWJsZSBvcHRpbWl6YXRpb24uCgpGcmkgQXVnICAyIDAxOjI2OjU5IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGNwLXRyZWUuaCAoTE9PS1VQX05PX1RFTVBfQklORCk6IE5ldyBmbGFnLgoJKiBjdnQuYyAocmVmZXJlbmNlX2JpbmRpbmcpOiBVc2UgaXQuCgkoaW1wbGljaXRfY29udmVyc2lvbik6IFVzZSBpdC4KCShhZGRfYnVpbHRpbl9jYW5kaWRhdGUsIENPTkRfRVhQUik6IFVzZSBpdC4KCgkqIGN2dC5jIChidWlsZF9uZXdfZnVuY3Rpb25fY2FsbCk6IENoZWNrIGZvciBlcnJvciBhcmdzLgoKCSogdHlwZWNrLmMgKGNvbXB0eXBlcyk6IEp1c3QgY2hlY2sgREVSSVZFRF9GUk9NX1AsIG5vdCBVTklRVUVMWS4KCgkqIGd4eC5ncGVyZjogQWRkIF9fbnVsbC4KCSogaGFzaC5oOiBSZWdlbmVyYXRlLgoJKiBsZXguaDogQWRkIFJJRF9OVUxMLgoJKiBsZXguYyAoaW5pdF9sZXgpOiBDcmVhdGUgbnVsbF9wb2ludGVyX25vZGUgaGVyZSwgc3RpY2sgaXQgaW4KCVJJRF9OVUxMLgoJKiBkZWNsLmMgKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogU3RpbGwgc2V0IGl0cyB0eXBlIGhlcmUuCgkqIGN2dC5jIChjcF9jb252ZXJ0X3RvX3BvaW50ZXIpOiBEb24ndCBwcm9kdWNlIG51bGxfcG9pbnRlcl9ub2RlLgoJKGNvbnZlcnRfdG9fcG9pbnRlcl9mb3JjZSk6IExpa2V3aXNlLgoJKG51bGxfcHRyX2NzdF9wKTogQ2hlY2sgZm9yIG51bGxfcG9pbnRlcl9ub2RlOyBvbmx5IGFjY2VwdCAodm9pZCopMAoJaWYgKCEgcGVkYW50aWMpLgoJKiBjYWxsLmMgKGNvbnZlcnRfaGFyc2huZXNzKTogVXNlIG51bGxfcHRyX2NzdF9wLgoJKiB0eXBlY2suYyAoY29udmVydF9mb3JfYXNzaWdubWVudCk6IExpa2V3aXNlLiAgRG9uJ3QgcHJvZHVjZQoJbnVsbF9wb2ludGVyX25vZGUuCgoJKiBlcnJvci5jIChhcmdzX2FzX3N0cmluZyk6IEhhbmRsZSBsaXN0cyBvZiBhY3R1YWwgYXJncywgdG9vLgoJKiBjdnQuYyAobnVsbF9wdHJfY3N0KTogU3VwcG9ydCAodm9pZCopMCBmb3Igbm93LgoJKGJ1aWxkX3VzZXJfdHlwZV9jb252ZXJzaW9uXzEpOiBJbXByb3ZlIGRpYWdub3N0aWNzLgoJKGJ1aWxkX25ld19mdW5jdGlvbl9jYWxsKTogTGlrZXdpc2UuCgkoYnVpbGRfb2JqZWN0X2NhbGwpOiBMaWtld2lzZS4KCShidWlsZF9uZXdfbWV0aG9kX2NhbGwpOiBMaWtld2lzZS4gIE1vdmUgY2FsbCBiZWZvcmUgZGVmIGRpYWdub3N0aWMuLi4KCShidWlsZF9vdmVyX2NhbGwpOiBIZXJlLgoKCSogY3Z0LmMgKGJ1aWxkX25ld19tZXRob2RfY2FsbCk6IERvbid0IGNvbXBsYWluIGFib3V0IG5vIG1hdGNoIGlmCglMT09LVVBfU1BFQ1VMQVRJVkVMWS4KCShidWlsZF9vdmVyX2NhbGwpOiBGaXggJ3RoaXMnIGZvciB2aXJ0dWFsIGZuLgoJKGJ1aWxkX25ld19tZXRob2RfY2FsbCk6IEFkZCBkaWFnbm9zdGljLgoKVGh1IEF1ZyAgMSAxNjo0NTowOSAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjdnQuYyAoYWRkX2Z1bmN0aW9uX2NhbmRpZGF0ZSk6IEV4cGVjdCAndGhpcycgYW5kICdpbl9jaHJnJyBmb3IKCWNvbnN0cnVjdG9ycyB0byBiZSBwYXNzZWQgaW4uCgkoYnVpbGRfb3Zlcl9jYWxsKTogTGlrZXdpc2UuCgkoYnVpbGRfdXNlcl90eXBlX2NvbnZlcnNpb25fMSk6IFBhc3MgdGhlbSBpbi4KCShjb252ZXJ0X2xpa2UpOiBMaWtld2lzZS4KCShidWlsZF9vYmplY3RfY2FsbCk6IEhhbmRsZSBvdmVybG9hZGVkIGNvbnZlcnNpb25zLgoJKGJ1aWxkX292ZXJfY2FsbCk6IFBhc3MgdGhlIHJpZ2h0IGFyZ3MgdG8gYnVpbGRfdmZuX3JlZi4KCShzdGFuZGFyZF9jb252ZXJzaW9uKTogRml4IHBtZiBjb252cy4KCShqb3VzdCk6IEhhbmRsZSBjb21wYXJpbmcgc3RhdGljcyBhbmQgbm9uLXN0YXRpY3MuCgkoYnVpbGRfbmV3X21ldGhvZF9jYWxsKTogTmV3IGZuLgoJKiBjYWxsLmMgKGJ1aWxkX21ldGhvZF9jYWxsKTogQ2FsbCBpdCBpZiBORVdfT1ZFUi4KClRodSBBdWcgIDEgMTY6MDY6MTQgMTk5NiAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgoKCSogbGV4LmMgKGRvX2lkZW50aWZpZXIpOiBEb24ndCB1c2UgJU8gb24gSURFTlRJRklFUl9PUE5BTUVfUHMsIHVzZQoJJUQgaW5zdGVhZC4KClRodSBBdWcgIDEgMTU6MjQ6MDIgMTk5NiAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgoKCSogZXhjZXB0LmMgKGV4cGFuZF90aHJvdyk6IFVzZSBtYXliZV9idWlsZF9jbGVhbnVwX2FuZF9kZWxldGUKCWluc3RlYWQgb2YganVzdCBtYXliZV9idWlsZF9jbGVhbnVwIHNvIHRoYXQgd2UgZGVhbGxvY2F0ZSB0aGUKCXRocm93biBvYmplY3QuCgpUaHUgQXVnICAxIDE1OjE4OjAwIDE5OTYgIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGxpc2EuY3lnbnVzLmNvbT4KCgkqIGRlY2wyLmMgKGZpbmlzaF9wcmV2dGFibGVfdmFyZGVjbCk6IE1ha2Ugbm9uLXN0YXRpYyBmb3IgcHQuYydzIHVzZS4KCSogY3AtdHJlZS5oIChmaW5pc2hfcHJldnRhYmxlX3ZhcmRlY2wpOiBBZGQgZGVjbC4KClRodSBBdWcgIDEgMTE6NTM6NTEgMTk5NiAgQm9iIE1hbnNvbiAgPG1hbnNvbkBjaGFybWVkLmN5Z251cy5jb20+CgoJKiBwdC5jIChpbnN0YW50aWF0ZV9jbGFzc190ZW1wbGF0ZSk6IENhbGwgY29tcGxldGVfdHlwZS4gQWxzbywgaWYKCXdlJ3JlIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIHdlIGp1c3QgaW5zdGFudGlhdGVkIGEgdGVtcGxhdGUKCWNsYXNzIHdpdGggYSB2dGFibGUsIGNhbGwgZmluaXNoX3ByZXZ0YWJsZV92YXJkZWNsLgoKCSogZXJyb3IuYyAoZHVtcF9kZWNsKTogRG9uJ3QgZXhwbG9kZSAob3IgZXhwbG9kZSBtb3JlIGdyYWNlZnVsbHkKCWFzIGFwcHJvcHJpYXRlKSBpZiB0aGUgb2JqZWN0IGJlaW5nIGR1bXBlZCBoYXMgYSBudWxsIHR5cGUuCgkoZHVtcF9leHByKTogTGlrZXdpc2UuCgoJKiBzZWFyY2guYyAoYnVpbGRfbWlfbWF0cml4KTogRW5zdXJlIHRoYXQgbWlfc2l6ZSBpcyBsYXJnZSBlbm91Z2gsCglieSBjb3VudGluZyB0aGUgbnVtYmVyIG9mIG5vZGVzIHRoYXQgd2UnbGwgbmVlZCBiZWZvcmUgYWxsb2NhdGluZwoJdGhlIGFycmF5LgoJKGxvb2t1cF9mbmZpZWxkcyk6IEZpeCBjb21tZW50LgoJKGJyZWFkdGhfZmlyc3Rfc2VhcmNoKTogRml4IGNvbW1lbnQuCgpXZWQgSnVsIDMxIDA5OjU3OjA1IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHB0LmMgKGluc3RhbnRpYXRlX2NsYXNzX3RlbXBsYXRlKTogUHJvcGFnYXRlIFRZUEVfUEFDS0VEIGFuZAoJVFlQRV9BTElHTi4KCSogY2xhc3MuYyAoZmluaXNoX3N0cnVjdCk6IENhbGwgY3BsdXNfZGVjbF9hdHRyaWJ1dGVzIGhlcmUuCgkoZmluaXNoX3N0cnVjdF8xKTogTm90IGhlcmUuCgkqIGNwLXRyZWUuaDogQWRqdXN0LgoKCSogcHQuYyAodHlwZV91bmlmaWNhdGlvbik6IE5ldyBwYXJhbWV0ZXIgU1RSSUNULgoJKHVuaWZ5KTogSWYgU1RSSUNULCBkb24ndCBhbGxvdyBjdiBhZGRpdGlvbiBvciBiYXNlIGRlZHVjdGlvbi4KCSogY2FsbC5jLCBjbGFzcy5jLCBjdnQuYywgY3AtdHJlZS5oOiBBZGp1c3QuCgpUdWUgSnVsIDMwIDEzOjA2OjEzIDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHNlYXJjaC5jIChnZXRfdGVtcGxhdGVfYmFzZXtfcmVjdXJzaXZlfSk6IE5ldyBmbnMuCgkqIHB0LmMgKG1vcmVfc3BlY2lhbGl6ZWQpOiBOZXcgZm4uCgkoZG9fZnVuY3Rpb25faW5zdGFudGlhdGlvbik6IFVzZSBpdC4KCSh1bmlmeSk6IEhhbmRsZSBiYXNlIGRlZHVjdGlvbi4KCSogY3Z0LmMgKGpvdXN0KTogVXNlIG1vcmVfc3BlY2lhbGl6ZWQuCglEb24ndCBhcmJpdHJhcmlseSBjaG9vc2UgYmV0d2VlbiBub24tYnVpbHRpbiBjYW5kaWRhdGVzLgoJKGJ1aWxkX292ZXJfY2FsbCk6IENhbGwgcmVxdWlyZV9jb21wbGV0ZV90eXBlLgoKCSogZGVjbC5jIChzdGFydF9mdW5jdGlvbik6IFN0YXRpY3MgYXJlIHN0YXRpYyBldmVuIGluIGEgI3ByYWdtYQoJaW50ZXJmYWNlIGZpbGUuCgoJKiBkZWNsMi5jIChpbXBvcnRfZXhwb3J0X3Z0YWJsZSk6IERpc2FibGUgdnRhYmxlIGhldXJpc3RpYyBvbgoJc3lzdGVtcyB3aXRoIEFTTV9PVVRQVVRfRVhURVJOQUwuCgoJKiBjdnQuYyAoY29tcGFyZV9pY3MpOiBGaXggY29tcGFyaXNvbiBvZiBQTUVNX0NPTlYgYW5kIEJBU0VfQ09OVi4KCShzdGFuZGFyZF9jb252ZXJzaW9uKTogTm8gc3RkIGNvbnYgdG8gZW51bSB0eXBlLgoKCSogY3Z0LmMgKHN0YW5kYXJkX2NvbnZlcnNpb24pOiBGaXggb3JkZXIgb2YgYXJncyB0byBERVJJVkVEX0ZST01fUAoJZm9yIHB0bSdzLgoKCSogY3Z0LmMgKHJlZmVyZW5jZV9iaW5kaW5nKTogQmluZCBkaXJlY3RseSB0byBhIGJhc2Ugc3Vib2JqZWN0IG9mCglhIGNsYXNzIHJ2YWx1ZS4KCgkqIGN2dC5jIChidWlsZF9uZXdfb3ApOiBFbmZvcmNlIGFjY2VzcyBjb250cm9sLgoKVHVlIEp1bCAzMCAwOToyMjo1MyAxOTk2ICBCb2IgTWFuc29uICA8bWFuc29uQGNoYXJtZWQuY3lnbnVzLmNvbT4KCgkqIHR5cGVjazIuYyAocHJvY2Vzc19pbml0X2NvbnN0cnVjdG9yKTogV2hlbiBzY2FubmluZyB0aGUKCXVuaW9uIGZvciBhIG5hbWVkIGZpZWxkLCBza2lwIHRoaW5ncyB0aGF0IGFyZW4ndCBGSUVMRF9ERUNMcy4KCgkqIG1ldGhvZC5jIChzeW50aGVzaXplX21ldGhvZCk6IERvbid0IHNjYW4gZm5kZWNsJ3MgcnRsIGlmCgl3ZSdyZSBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlOyBqdXN0IGFzc3VtZSB0aGUgZnVuY3Rpb24gY2FuJ3QKCWJlIGlubGluZWQuCgpNb24gSnVsIDI5IDE1OjQ4OjMwIDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGN2dC5jIChidWlsZF9idWlsdGluX2NhbmRpZGF0ZSk6IFN0aWNrIGEgZHVtbXkgY29udmVyc2lvbiBpbiBpZgoJaXQgZmFpbGVkLgoKCSogY3Z0LmMgKGJ1aWxkX3VzZXJfdHlwZV9jb252ZXJzaW9uXzEpOiBIYW5kbGUgb3ZlcmxvYWRlZAoJY29udmVyc2lvbiBvcHMuCgoJKiBjdnQuYyAoYWRkX2J1aWx0aW5fY2FuZGlkYXRlcyk6IERvbid0IGNvbnNpZGVyIHR5cGUgY29udmVyc2lvbgoJb3BlcmF0b3JzIGZvciB0aGUgZmlyc3QgcGFyYW1ldGVyIG9mIG9wZXJhdG9yPS4KCk1vbiBKdWwgMjkgMTU6MzM6NTUgMTk5NiAgQm9iIE1hbnNvbiAgPG1hbnNvbkBjaGFybWVkLmN5Z251cy5jb20+CgoJKiB0eXBlY2suYyAoY29tcGxldGVfdHlwZSk6IE9ubHkgY2FsbCBsYXlvdXRfdHlwZSBpZiB3ZSdyZSBub3QKCWV4cGFuZGluZyBhIHRlbXBsYXRlLgoKTW9uIEp1bCAyOSAxNDo0MDozOCAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjdnQuYyAoY29tcGFyZV9pY3MpOiBPb3BzLgoKCSogY3Z0LmMgKG9wX2Vycm9yKTogT29wcy4KCgkqIGNwLXRyZWUuZGVmOiBBZGQgUlZBTFVFX0NPTlYsIHJlbmFtZSBFWEFDVF9DT05WIHRvIElERU5USVRZX0NPTlYuCgkqIGN2dC5jOiBBZGQgSURFTlRJVFlfUkFOSyBiZWZvcmUgb3RoZXJzLiAgVXNlIHJlYWxfbHZhbHVlX3AuCgkoYnVpbGRfY29udik6IFVzZSB0aGVtLgoJKGltcGxpY2l0X2NvbnZlcnNpb24pOiBVc2UgdGhlbS4KCShjb252ZXJ0X2xpa2UpOiBIYW5kbGUgdGhlbS4KCShidWlsZF9uZXdfb3ApOiBIYW5kbGUgYnVpbHRpbiBDT05EX0VYUFIgYWdhaW4uCgkoYWRkX2J1aWx0aW5fY2FuZGlkYXRlcyk6IFN0cmlwIGN2LXF1YWxzLiAgRml4IG9vcHMuICBJbmNsdWRlIGVudW1zCglpbiBsaXN0cyBvZiB0eXBlcyBmb3IgQ09ORF9FWFBSLgoJKGFkZF9idWlsdGluX2NhbmRpZGF0ZSk6IEFkZCBlbnVtIGNhbmRpZGF0ZXMgZm9yIENPTkRfRVhQUi4KCk1vbiBKdWwgMjkgMTI6MDU6NDAgMTk5NiAgQm9iIE1hbnNvbiAgPG1hbnNvbkBjaGFybWVkLmN5Z251cy5jb20+CgoJKiB0eXBlY2suYyAoYnVpbGRfbW9kaWZ5X2V4cHIpOiBBbHdheXMgYXR0ZW1wdCB0byBidWlsZCBhIGNhbGwgdG8KCXRoZSBhc3NpZ25tZW50IG9wZXJhdG9yLCBldmVuIGlmIHdlJ3JlIHVzaW5nIGEgZGVmYXVsdCBvbmUuCgkoY29udmVydF9mb3JfaW5pdGlhbGl6YXRpb24pOiBDYWxsIGNvbXBsZXRlX3R5cGUuCgpNb24gSnVsIDI5IDExOjI1OjA4IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGN2dC5jIChyZWZlcmVuY2VfYmluZGluZyk6IEEgUkVGX0JJTkQgZ2V0cyB0aGUgcmVmZXJlbmNlIHR5cGUuCgkoaW1wbGljaXRfY29udmVyc2lvbik6IExpa2V3aXNlLgoJKGNvbnZlcnRfbGlrZSk6IExpa2V3aXNlLgoJKGNvbXBhcmVfaWNzKTogTGlrZXdpc2UuCgkoY29tcGFyZV9xdWFsKTogTGlrZXdpc2UuCgkocHJpbnRfel9jYW5kaWRhdGVzKTogSGFuZGxlIG5vIGNhbmRpZGF0ZXMuCgkoYnVpbGRfbmV3X29wKTogRG9uJ3QgaGFuZGxlIGJ1aWx0aW4gQ09ORF9FWFBSIGZvciBub3cuCgpTYXQgSnVsIDI3IDExOjI3OjQ3IDE5OTYgIFN0YW4gU2hlYnMgIDxzaGVic0BhbmRyb3MuY3lnbnVzLmNvbT4KCgkqIGN2dC5jIChidWlsZF9idWlsdGluX2NhbmRpZGF0ZSk6IEluaXQgbG9jYWwgdmFyIGluIGFuIEFOU0kgd2F5LgoKRnJpIEp1bCAyNiAwMTowNzoyMiAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjdnQuYyAoam91c3QpOiBJZiB0aGUgY2FuZGlkYXRlcyBhcmUgdGhlIHNhbWUsIGFyYml0cmFyaWx5IHBpY2sgb25lLgoKCSogY3Z0LmMgKGJ1aWxkX2J1aWx0aW5fY2FuZGlkYXRlKTogT29wcy4KCShidWlsZF9uZXdfb3ApOiBPb3BzLgoKCSogbWV0aG9kLmMgKGJ1aWxkX29wZm5jYWxsKTogUGFzcyBDT05EX0VYUFIgb24uCgkqIGN2dC5jIChidWlsZF9idWlsdGluX2NhbmRpZGF0ZSk6IFJlb3JnYW5pemUsIHN1cHBvcnQgQ09ORF9FWFBSLgoJKGFkZF9idWlsdGluX2NhbmRpZGF0ZXssc30pOiBMaWtld2lzZS4KCShhZGRfYnVpbHRpbl9jYW5kaWRhdGVzKTogTGlrZXdpc2UuCgkocHJpbnRfel9jYW5kaWRhdGVzLCBvcF9lcnJvciwgYnVpbGRfbmV3X29wKTogTGlrZXdpc2UuCgkodHlwZV9kZWNheXNfdG8pOiBOZXcgZm4uCgkqIGxleC5jIChpbml0X2xleCk6IEp1c3Qgc2F5ID86IGZvciBDT05EX0VYUFIuCgpUaHUgSnVsIDI1IDA5OjMzOjMzIDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHR5cGVjay5jIChjb21wbGV0ZV90eXBlKTogQ2FsbCBsYXlvdXRfdHlwZSByYXRoZXIgdGhhbiBidWlsZGluZwoJYSBuZXcgYXJyYXkgdHlwZS4KCgkqIGN2dC5jIChhZGRfYnVpbHRpbl9jYW5kaWRhdGUpOiBQb2ludGVyIGFyaXRobWV0aWMgY2FuZGlkYXRlcwoJb25seSB1c2UgcHRyZGlmZl90LgoKV2VkIEp1bCAyNCAxMjo0NTowOCAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjdnQuYzogQWx3YXlzIGNvbXBpbGUgdGhlIG5ldyBvdmVybG9hZGluZyBjb2RlIChidXQgZG9uJ3QgdXNlIGl0KS4KCShpbXBsaWNpdF9jb252ZXJzaW9uKTogQWRkIGEgQkFTRV9DT05WIHdoZW4gY29udmVydGluZyB0bwoJdGhlIHNhbWUgY2xhc3MgdHlwZS4KCShjb252ZXJ0X2xpa2UpOiBIYW5kbGUgQkFTRV9DT05WLgoKVHVlIEp1bCAyMyAxMjo0NjozMCAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjdnQuYyAoYnVpbGRfbmV3X29wKTogU3VwcG9ydCB7TUFYLE1JTn1fRVhQUi4KCShhZGRfYnVpbHRpbl9jYW5kaWRhdGUpOiBMaWtld2lzZS4KCglORVdfT1ZFUiBjaGFuZ2VzOgoJKiB0eXBlY2suYyAoYnVpbGRfeF9mdW5jdGlvbl9jYWxsKTogVHJ5IGFuIG9wZXJhdG9yIGZ1bmN0aW9uCgl3aGVuZXZlciB3ZSBjYWxsIGFuIG9iamVjdCBvZiBjbGFzcyB0eXBlLgoJKiBtZXRob2QuYyAoYnVpbGRfb3BmbmNhbGwpOiBQYXNzIENBTExfRVhQUnMgdGhyb3VnaC4KCSogY3Z0LmMgKGltcGxpY2l0X2NvbnZlcnNpb24pOiBEbyBjb25zdC1yZWYgY2FzZSBmaXJzdC4KCShhZGRfY29udl9jYW5kaWRhdGUsIGJ1aWxkX29iamVjdF9jYWxsLCBvcF9lcnJvcik6IE5ldyBmbnMuCgkocHRyX2NvbXBsZXRlX29iLCBUWVBFX1BUUk9CX1ApOiB2b2lkIGlzIG5vdCBhbiBvYmplY3QgdHlwZS4KCSh7YWRkLGJ1aWxkfV9idWlsdGluX2NhbmRpZGF0ZXssc30sIHByaW50X3pfY2FuZGlkYXRlcyk6IERpc3BsYXkgCglidWlsdGluIGNhbmRpZGF0ZXMuCgkoYnVpbGRfbmV3X29wKTogSGFuZGxlIENBTExfRVhQUi4gIERvbid0IHRyeSB0byBkZWNheSB2b2lkLgoJRmFsbCBiYWNrIG9uIHByZWluY3JlbWVudCBoYW5kbGluZy4gIFVzZSBvcF9lcnJvci4gIAoJSGFuZGxlIHdhcm5fc3ludGguCgkoY29udmVydF9saWtlKTogUGFzcyBJTkRJUkVDVF9CSU5ELiAgRG9uJ3QgdHJ5IHRvIGRvIGFueXRoaW5nIHdpdGggCglhbiBlcnJvcl9tYXJrX25vZGUuCgkoYnVpbGRfb3Zlcl9jYWxsKTogSGFuZGxlIFBST01PVEVfUFJPVE9UWVBFUyBhbmQgZWxsaXBzaXMgcHJvbW90aW9ucwoJcHJvcGVybHkuCgpNb24gSnVsIDIyIDE2OjIxOjU1IDE5OTYgIEJvYiBNYW5zb24gIDxtYW5zb25AY2hhcm1lZC5jeWdudXMuY29tPgoKCSogcHQuYyAodHN1YnN0X2V4cHIpOiBIYW5kbGUgQ09OVElOVUVfU1RNVC4KCk1vbiBKdWwgMjIgMTU6Mzg6NTggMTk5NiAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgoKCSogdHlwZWNrLmMgKGJ1aWxkX2NvbXBvbmVudF9yZWZfMSk6IFVzZSBidWlsZF9jb21wb25lbnRfcmVmCglpbnN0ZWFkIG9mIG9wZW4gY29kaW5nIGl0IGhlcmUuCgpNb24gSnVsIDIyIDEyOjE4OjU0IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGcrKy5jIChtYWluKTogRG9uJ3QgbGluayB3aXRoIC1sZysrLgoKCU5FV19PVkVSIGNoYW5nZXM6CgkqIGN2dC5jIChjb252ZXJ0X3RvX3JlZmVyZW5jZSk6IERvbid0IHVzZSBjb252ZXJ0X2Zyb21fcmVmZWVuY2Ugb24KCXJlc3VsdCBvZiBidWlsZF90eXBlX2NvbnZlcnNpb24uCgkoY3BfY29udmVydCk6IE9ubHkgY2FsbCBidWlsZF9tZXRob2RfY2FsbCBmb3IgY3RvcnMgaWYKCWJ1aWxkX3R5cGVfY29udmVyc2lvbiBmYWlsZWQuCgkocHRyX2NvbXBsZXRlX29iKTogTmV3IGZ1bmN0aW9uLgoJKFRZUEVfUFRSeyxPQixNRU19X1ApOiBOZXcgbWFjcm9zLgoJKHthZGQsYnVpbGR9X2J1aWx0aW5fY2FuZGlkYXRleyxzfSk6IE5ldyBmdW5jdGlvbnMuCgkocHJpbnRfel9jYW5kaWRhdGVzKTogSGFuZGxlIGJ1aWx0aW5zLgoJKGJ1aWxkX3VzZXJfdHlwZV9jb252ZXJzaW9uXzEpOiBEb24ndCB1c2UgY29udmVyc2lvbiBmbnMgZm9yIAoJY29udmVydGluZyB0byBhIGJhc2UgdHlwZS4KCShidWlsZF91c2VyX3R5cGVfY29udmVyc2lvbl8xKTogU2V0IElDU19VU0VSX0ZMQUcgb24gQU1CSUdfQ09OVnMuCgkoYnVpbGRfdXNlcl90eXBlX2NvbnZlcnNpb24pOiBVc2UgY29udmVydF9mcm9tX3JlZmVyZW5jZS4KCShidWlsZF9uZXdfb3ApOiBOZXcgZnVuY3Rpb24uCgkoYnVpbGRfb3Zlcl9jYWxsKTogRml4IGhhbmRsaW5nIG9mIG1ldGhvZHMuCgkoY29tcGFyZV9pY3MpOiBIYW5kbGUgQU1CSUdfQ09OViBwcm9wZXJseS4KCSogdHlwZWNrMi5jOiBJbmNyZW1lbnQgYWJvcnQgY291bnQuCgkqIG1ldGhvZC5jIChidWlsZF9vcGZuY2FsbCk6IEZvcndhcmQgbW9zdCByZXF1ZXN0cyB0byBidWlsZF9uZXdfb3AuCgkqIGNwLXRyZWUuaCAoSVNfT1ZFUkxPQURfVFlQRSk6IFR3ZWFrLgoKRnJpIEp1bCAxOSAxNzo1OToyOSAxOTk2ICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBsaXNhLmN5Z251cy5jb20+CgoJKiBlcnJvci5jIChkdW1wX2V4cHIsIGNhc2UgQ09OU1RSVUNUT1IsIGNhc2UgQ0FTVF9FWFBSKTogVGFrZSBvdXQKCWludmFsaWQgc2Vjb25kIGFyZ3VtZW50IHRvIGR1bXBfZXhwcl9saXN0LgoKRnJpIEp1bCAxOSAxNDowNDowNSAxOTk2ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiBkZWNsLmMgKGxvb2t1cF9uYW1lX3JlYWwpOiBNYWtlIHN1cmUgd2UgZG8gb2JqLT5YOjppIGNvcnJlY3RseS4KClRodSBKdWwgMTggMTQ6NDg6MjMgMTk5NiAgQm9iIE1hbnNvbiAgPG1hbnNvbkBjaGFybWVkLmN5Z251cy5jb20+CgoJKiBkZWNsMi5jIChpbXBvcnRfZXhwb3J0X3Z0YWJsZSk6IEFTTV9PVVRQVVRfRVhURVJOQUwsIG5vdAoJQVNTRU1CTEVfRVhURVJOQUwuCgpNb24gSnVsIDE1IDE3OjQ4OjQzIDE5OTYgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIHR5cGVjazIuYyAocHJvY2Vzc19pbml0X2NvbnN0cnVjdG9yKTogTmV3IHBlZHdhcm4gZm9yIHVzaW5nIHsgfQoJdG8gaW5pdGlhbGl6ZSBhIHBvaW50ZXIgdG8gbWVtYmVyIGZ1bmN0aW9uLgoJKiB0eXBlY2suYyAoYnVpbGRfcHRybWVtZnVuYzEpOiBBdm9pZCB1c2Ugb2YgZGlnZXN0X2luaXQgc28gdGhhdAoJd2UgY2FuIGF2b2lkIHRoZSBuZXcgZXJyb3IuCgpNb24gSnVsIDE1IDE1OjQyOjAzIDE5OTYgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIHR5cGVjay5jIChidWlsZF9wdHJtZW1mdW5jMSk6IE5ldyBmdW5jdGlvbiB0byBoaWRlIGRldGFpbHMgb2YKCXBvaW50ZXIgdG8gbWVtYmVyIGZ1bmN0aW9ucyBiZXR0ZXIuCgpNb24gSnVsIDE1IDE0OjIzOjAyIDE5OTYgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIGluaXQuYyAocmVzb2x2ZV9vZmZzZXRfcmVmKTogUmVzb2x2ZSBPRkZTRVRfUkVGcyB0aGF0IGFyZQoJbWV0aG9kcyBpbnRvIHRoZSBhY3R1YWwgbWV0aG9kLCBhcyB3ZSBrbm93IHRoZSBpbXBsaWVkIG9iamVjdCBpcwoJbm90IHVzZWQuCgpNb24gSnVsIDE1IDEzOjA4OjI5IDE5OTYgIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGxpc2EuY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnkgKG1heWJlY29tbWFfd2Fybik6IE9ubHkgZW1pdCB0aGUgcGVkd2FybiBpZiB3ZSdyZSBub3QKCWluc2lkZSBhIHN5c3RlbSBoZWFkZXIuCgpGcmkgSnVsIDEyIDE2OjMwOjA1IDE5OTYgIEJvYiBNYW5zb24gIDxtYW5zb25AY2hhcm1lZC5jeWdudXMuY29tPgoKCSogY2FsbC5jIChidWlsZF9tZXRob2RfY2FsbCk6IENhbGwgY29tcGxldGVfdHlwZSBvbiB0aGUKCWluc3RhbmNlIHR5cGUuCgpUaHUgSnVsIDExIDE3OjE2OjQwIDE5OTYgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIHR5cGVjay5jIChidWlsZF9jb21wb25lbnRfcmVmKTogQWx3YXlzIGJ1aWxkIHVwIGFuIE9GRlNFVF9SRUYKCWZvciBvYmpfcHRyLT5mdW5jIHNvIHRoYXQgd2UgY2FuIGtub3cgd2hpY2ggb2JqZWN0IHRvIHVzZSBpbiBhCgltZXRob2QgY2FsbC4KCldlZCBKdWwgMTAgMTk6MzY6MzcgMTk5NiAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgoKCSogdHlwZWNrLmMgKGJ1aWxkX3B0cm1lbWZ1bmMpOiBSZW1vdmUgc29ycnksIG5vdyB3ZSBjYW4gY2FzdAoJYXJvdW5kIHRoaW5ncy4gIEFsc28gaW1wcm92ZSBtYWludGFpbmFiaWxpdHkuCgpXZWQgSnVsIDEwIDE4OjIwOjExIDE5OTYgIEJvYiBNYW5zb24gIDxtYW5zb25AY2hhcm1lZC5jeWdudXMuY29tPgoKCSogZGVjbC5jIChncm9rZGVjbGFyYXRvcik6IENoZWNrIGZvciBvdmVyZmxvdyB3aGVuIGV2YWx1YXRpbmcgYW4KCWFycmF5IGRpbWVuc2lvbi4KCldlZCBKdWwgMTAgMTc6MjY6MTkgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY3Z0LmMgKGNwX2NvbnZlcnQpOiBEb24ndCBjaGVjayBmb3IgYW1iaWd1aXR5IHdpdGggY29uc3RydWN0b3IKCWlmIE5FV19PVkVSLgoKCSogdHlwZWNrLmMgKGJ1aWxkX3hfZnVuY3Rpb25fY2FsbCk6IFBhc3MgZnVuY3Rpb24gb3ZlcmxvYWQKCXF1ZXN0aW9ucyB0byBuZXcgb3ZlcmxvYWRpbmcgY29kZSBpZiBORVdfT1ZFUi4KCSogaW5pdC5jIChleHBhbmRfYWdncl9pbml0XzEpOiBPbmx5IGNoZWNrIGZvciB0eXBlIGNvbnZlcnNpb24gb3BzCglpZiB3ZSdyZSBkb2luZyBjb3B5LWluaXRpYWxpemF0aW9uIChpLmUuIExPT0tVUF9PTkxZQ09OVkVSVElORykuCglEb24ndCBjaGVjayBmb3IgYW1iaWd1aXR5IHdpdGggY29uc3RydWN0b3IgaWYgTkVXX09WRVIuCgkqIGN2dC5jIChjb252ZXJ0X3RvX3JlZmVyZW5jZSk6IERlcmVmZXJlbmNlIHRoZSByZXN1bHQgb2YgYSB0eXBlCgljb252ZXJzaW9uIG9wZXJhdG9yLgoJKGJ1aWxkX2NvbnYpOiBQcm9wYWdhdGUgSUNTX1VTRVJfRkxBRy4KCShpbXBsaWNpdF9jb252ZXJzaW9uKTogQ2FsbCBpbnN0YW50aWF0ZV90eXBlLgoJUGFzcyBMT09LVVBfT05MWUNPTlZFUlRJTkcgaW5zdGVhZCBvZiBMT09LVVBfTk9STUFMLgoJKGFkZF9mdW5jdGlvbl9jYW5kaWRhdGUpOiBGaXggY3YtcXVhbHMgb24gYXJndHlwZS4KCShwcmludF96X2NhbmRpZGF0ZXMpOiBOZXcgZnVuY3Rpb24uCgkoYnVpbGRfbmV3X2Z1bmN0aW9uX2NhbGwpOiBDYWxsIGl0LgoJKGJ1aWxkX3VzZXJfdHlwZV9jb252ZXJzaW9uXzEpOiBJZiBMT09LVVBfT05MWUNPTlZFUlRJTkcsIGRvbid0Cgljb25zaWRlciBub24tY29udmVydGluZyBjb25zdHJ1Y3RvcnMuCglDYWxsIHByaW50X3pfY2FuZGlkYXRlcy4KCVJldHVybiBhbiBBTUJJR19DT05WIGZvciBhbiBhbWJpZ3VvdXMgY29udmVyc2lvbi4KCShidWlsZF91c2VyX3R5cGVfY29udmVyc2lvbik6IEhhbmRsZSBBTUJJR19DT05WLgoJKGNvbnZlcnRfbGlrZSk6IEZpeCB0ZXN0IGZvciBidWlsZGluZyBUQVJHRVRfRVhQUi4KCUNhbGwgaW5zdGFudGlhdGVfdHlwZS4KCUhhbmRsZSBBTUJJR19DT05WIGFuZCBMVkFMVUVfQ09OVi4KCShidWlsZF9vdmVyX2NhbGwpOiBIYW5kbGUgMCBhcmdzIGFuZCBlbGxpcHNpcy4KCSogY3AtdHJlZS5kZWY6IEFkZCBBTUJJR19DT05WLgoKVHVlIEp1bCAgOSAxNzo0ODo0OCAxOTk2ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiBkZWNsLmMgKGxvb2t1cF9uYW1lX3JlYWwpOiBJZiB3ZSBmaW5kIG1lbSBpbiBvYmogd2hlbiBwYXJzaW5nCglgb2JqLT5tZW0nLCBtYWtlIHN1cmUgd2UgcmV0dXJuIHRoZSByaWdodCB2YWx1ZS4KClR1ZSBKdWwgIDkgMTY6MTE6MjggMTk5NiAgQm9iIE1hbnNvbiAgPG1hbnNvbkBjaGFybWVkLmN5Z251cy5jb20+CgoJKiBzZWFyY2guYyAoZ2V0X2Jhc2VfZGlzdGFuY2UpOiBDYWxsIGNvbXBsZXRlX3R5cGUuCgpUdWUgSnVsICA5IDEyOjQ2OjM0IDE5OTYgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAoc3RvcmVfYmluZGluZ3MpOiBNYWtlIHN0YXRpYy4KCk1vbiBKdWwgIDggMTY6NDI6MzEgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogaW5pdC5jIChleHBhbmRfYWdncl9pbml0XzEpOiBEb24ndCBjaGVjayB0eXBlIGNvbnZlcnNpb25zIGlmCglORVdfT1ZFUi4KCgkqIGN2dC5jICh6X2NhbmRpZGF0ZSk6IFB1dCBiYWNrIHRlbXBsYXRlIGZpZWxkLgoJKGFkZF9mdW5jdGlvbl9jYW5kaWRhdGUpOiBTZXQgaXQuCgkoYWRkX3RlbXBsYXRlX2NhbmRpZGF0ZSk6IExpa2V3aXNlLgoJKGpvdXN0KTogVXNlIGl0LgoJKGNvbXBhcmVfcXVhbCk6IEhhbmRsZSByZWZlcmVuY2VzIGFuZCBwb2ludGVycyB0byBtZW1iZXJzLgoJKGNvbXBhcmVfaWNzKTogSGFuZGxlIHJlZmVyZW5jZSBiaW5kaW5ncy4KCgkqIGRlY2wuYyAoZHVwbGljYXRlX2RlY2xzKTogUHJvcGFnYXRlIERFQ0xfT05FX09OTFkuCgpNb24gSnVsICA4IDE2OjE4OjU2IDE5OTYgIEJvYiBNYW5zb24gIDxtYW5zb25AY2hhcm1lZC5jeWdudXMuY29tPgoKCSogY2FsbC5jIChjb21wdXRlX2NvbnZlcnNpb25fY29zdHMpOiBDYWxsIGNvbXBsZXRlX3R5cGUuCgoJKiB0cmVlLmMgKHZlY19iaW5mb19tZW1iZXIpOiBVc2UgY29tcHR5cGVzIGluc3RlYWQgb2YgY29tcGFyaW5nCglwb2ludGVycywgc28gd2UgY2FuIGhhbmRsZSB0ZW1wbGF0ZSBwYXJhbWV0ZXJzLgoKRnJpIEp1bCAgNSAxNjo1MTo1MyAxOTk2ICBCb2IgTWFuc29uICA8bWFuc29uQGNoYXJtZWQuY3lnbnVzLmNvbT4KCgkqIGN2dC5jIChjcF9jb252ZXJ0X3RvX3BvaW50ZXIpOiBXZSBoYXZlIHRvIGNhbGwgY29tcGxldGVfdHlwZQoJaGVyZTsgbGV0J3MgbWFrZSBpdCBleHBsaWNpdCBpbnN0ZWFkIG9mIGEgc2lkZSBlZmZlY3Qgb2YgYW4KCWVycm9yIGNoZWNrLgoKV2VkIEp1bCAgMyAxNjoyOTo1MSAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjdnQuYyAoel9jYW5kaWRhdGUpOiBSZW1vdmUgdGVtcGxhdGUgZmllbGQuCgkocmVmZXJlbmNlX2JpbmRpbmcpOiBIYW5kbGUgYmluZGluZyB0byB0ZW1wb3JhcnkuCgkoaW1wbGljaXRfY29udmVyc2lvbik6IExpa2V3aXNlLgoJKGFkZF9mdW5jdGlvbl9jYW5kaWRhdGUpOiBIYW5kbGUgYXJ0aWZpY2lhbCBjb25zdHJ1Y3RvciBwYXJtcy4KCUhhbmRsZSBmdW5jdGlvbnMgd2l0aCB0b28gZmV3IHBhcm1zLgoJKGFkZF90ZW1wbGF0ZV9jYW5kaWRhdGUpOiBOZXcgZnVuY3Rpb24uCgkoYnVpbGRfdXNlcl90eXBlX2NvbnZlcnNpb25fMSk6IEhhbmRsZSBjb25zdHJ1Y3RvcnMuCgkoY29udmVydF9saWtlKTogTGlrZXdpc2UuCgkoYnVpbGRfb3Zlcl9jYWxsKTogTGlrZXdpc2UuCgkoYnVpbGRfbmV3X2Z1bmN0aW9uX2NhbGwpOiBTdXBwb3J0IHRlbXBsYXRlcy4KCShjb21wYXJlX2ljcyk6IEZpeCByZWZlcmVuY2UsIGluaGVyaXRhbmNlIGhhbmRsaW5nLgoKTW9uIEp1bCAgMSAyMjo1ODoxOCAxOTk2ICBCb2IgTWFuc29uICA8bWFuc29uQGNoYXJtZWQuY3lnbnVzLmNvbT4KCgkqIGRlY2wuYzogQWRkIHNpZ25lZF9zaXplX3plcm9fbm9kZS4KCShpbml0X2RlY2xfcHJvY2Vzc2luZyk6IEJ1aWxkIGl0LgoJKiBjbGFzcy5jIChwcmVwYXJlX2ZyZXNoX3Z0YWJsZSk6IFVzZSBpdCBpbnN0ZWFkIG9mIHNpemVfemVyb19ub2RlCgl3aGVuIHdlJ3JlIHRyeWluZyB0byBtYWtlIGEgbmVnYXRpdmUgZGVsdGEuCgpNb24gSnVsICAxIDE3OjU2OjE5IDE5OTYgIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGxpc2EuY3lnbnVzLmNvbT4KCglTdG9wIGRvaW5nIHRoaXMgZGFtbiBpbmRleD09c3RyY2hyIHZhcmlhYmxlIG5hbWUgY29uZnVzaW9uLgoJKiBjbGFzcy5jIChhZGRfdmlydHVhbF9mdW5jdGlvbik6IENoYW5nZSBsb2NhbCB2YXIgSU5ERVggdG8gYmUKCW5hbWVkIElEWC4KCShhZGRfbWV0aG9kKTogTGlrZXdpc2UuCgkqIGxleC5jIChwcmludF9wYXJzZV9zdGF0aXN0aWNzKTogTGlrZXdpc2UuCgkqIHNlYXJjaC5jIChtYWtlX21lbW9pemVkX3RhYmxlX2VudHJ5KTogTGlrZXdpc2UuCgkobG9va3VwX2ZuZmllbGRzX2hlcmUpOiBMaWtld2lzZS4KCShsb29rdXBfZmllbGQpOiBMaWtld2lzZS4KCShsb29rdXBfZm5maWVsZHMpOiBMaWtld2lzZS4KCShnZXRfYmFzZWxpbmtzKTogTGlrZXdpc2UuCgkqIHNpZy5jIChidWlsZF9zaWduYXR1cmVfdGFibGVfY29uc3RydWN0b3IpOiBMaWtld2lzZS4KCShidWlsZF9zaWduYXR1cmVfbWV0aG9kX2NhbGwpOiBMaWtld2lzZS4KCSogdHlwZWNrLmMgKGJ1aWxkX3hfYXJyYXlfcmVmKTogQ2hhbmdlIElOREVYIHBhcm0gdG8gYmUgbmFtZWQgSURYLgoJKGdldF9tZW1iZXJfZnVuY3Rpb25fZnJvbV9wdHJmdW5jKTogTGlrZXdpc2UuCgkoYnVpbGRfcHRybWVtZnVuYyk6IENoYW5nZSBsb2NhbCB2YXIgSU5ERVggdG8gYmUgSURYLgoJKGNfZXhwYW5kX3N0YXJ0X2Nhc2UpOiBMaWtld2lzZS4KClNhdCBKdW4gMjkgMTQ6MDU6NDYgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY3Z0LmMgKGNwX2NvbnZlcnRfdG9fcG9pbnRlcik6IE1vdmUgdXNlci1kZWZpbmVkIHR5cGUgY29udmVyc2lvbgoJaGFuZGxpbmcgdG8gYmVmb3JlIGV4dHJhY3Rpb24gb2YgVFlQRV9QVFJNRU1GVU5DX0ZOX1RZUEUuCgkoY29udmVydF90b19yZWZlcmVuY2UpOiBVc2UgYnVpbGRfdHlwZV9jb252ZXJzaW9uIHRvIGNvbnZlcnQgdG8KCXRoZSByZWZlcmVuY2UgdHlwZSBkaXJlY3RseS4KCShzdGFuZGFyZF9jb252ZXJzaW9uKTogRml4IHZvaWQqIGNhc2UsIG5vbi1jb252ZXJzaW9ucy4KCShyZWZlcmVuY2VfYmluZGluZyk6IEZpeCBleHByID09IDAgY2FzZSwgbm9uLWNvbnZlcnNpb25zLgoJKGNvbnZlcnRfbGlrZSk6IFN1cHBvcnQgUkVGX0JJTkQuCgkoY29tcGFyZV9xdWFsKTogU3BsaXQgb3V0IGZyb20gY29tcGFyZV9pY3MuCgkoY29tcGFyZV9pY3MpOiBVc2UgaXQsIGhhbmRsZSBpY3NlcyB3aXRoIG9ubHkgYSBxdWFsX2NvbnYuCgoJKiBpbml0LmMgKGV4cGFuZF92ZWNfaW5pdCk6IERvbid0IGNyYXNoIGlmIGRlY2wgaXMgTlVMTC4KCkZyaSBKdW4gMjggMTE6NTI6NTEgMTk5NiAgU3RhbiBTaGVicyAgPHNoZWJzQGFuZHJvcy5jeWdudXMuY29tPgoKCSogbXB3LWNvbmZpZy5pbjogTmV3IGZpbGUsIGNvbmZpZ3VyeSBmb3IgTWFjIE1QVy4KCSogbXB3LW1ha2Uuc2VkOiBOZXcgZmlsZSwgbWFrZWZpbGUgZWRpdGluZyBmb3IgTVBXLgoKVGh1IEp1biAyNyAxNToxODozMCAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBwdC5jIChpbnN0YW50aWF0ZV9jbGFzc190ZW1wbGF0ZSk6IENhbGwgcmVwb190ZW1wbGF0ZV91c2VkLgoKCSogc2VhcmNoLmMgKGxvb2t1cF9jb252ZXJzaW9ucyk6IE9ubHkgbG9va3VwIGNvbnZlcnNpb25zIGluCgljb21wbGV0ZSB0eXBlcy4KClRodSBKdW4gMjcgMTI6NTk6NTMgMTk5NiAgQnJlbmRhbiBLZWhvZSAgPGJyZW5kYW5AbGlzYS5jeWdudXMuY29tPgoKCSogY3AtdHJlZS5kZWY6IFJlbmFtZWQgZnJvbSB0cmVlLmRlZiwgdG8gYXZvaWQgY29uZnVzaW9uIHdpdGgKCWdjYydzIHRyZWUuZGVmLgoJKiBjcC10cmVlLmgsIGxleC5jOiBJbmNsdWRlIGNwLXRyZWUuZGVmLgoJKiBNYWtlZmlsZS5pbiAoQ1hYX1RSRUVfSCk6IFJlZmVyZW5jZSBjcC10cmVlLmRlZi4KCldlZCBKdW4gMjYgMTg6Mjk6NDcgMTk5NiAgQm9iIE1hbnNvbiAgPG1hbnNvbkBjaGFybWVkLmN5Z251cy5jb20+CgoJKiBpbml0LmMgKGJ1aWxkX3ZlY19kZWxldGVfMSk6IENhbGwgY29tcGxldGVfdHlwZS4KCk1vbiBKdW4gMjQgMTc6MTc6MzIgMTk5NiAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgoKCSogZXhjZXB0LmMgKHN0YXJ0X2Fub25fZnVuYyk6IE1ha2Ugc3VyZSBhbm9ueW1vdXMgZnVuY3Rpb25zIGFyZQoJbmV2ZXIgZXh0ZXJuYWwuCgpGcmkgSnVuIDIxIDE1OjEwOjU4IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAoZmluaXNoX2Z1bmN0aW9uKTogSWYgZnVuY3Rpb25fZGVwdGggPiAxLCBzZXQgbmVzdGVkLgoKCSogZGVjbDIuYyAoZ3Jva2JpdGZpZWxkKTogUmV2ZXJ0IEJvYidzIGNoYW5nZS4KCSogY2xhc3MuYyAoZmluaXNoX3N0cnVjdF8xKTogRml4IGhhbmRsaW5nIG9mIG5hbWVkIGJpdGZpZWxkIHdpZHRocy4KClRodSBKdW4gMjAgMjM6MzU6MzggMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogcHQuYyAoYWRkX3BlbmRpbmdfdGVtcGxhdGUpOiBIYW5kbGUgdHlwZXMuCgkobG9va3VwX3RlbXBsYXRlX2NsYXNzKTogV2l0aCAtZmV4dGVybmFsLXRlbXBsYXRlcywganVzdCBhZGQgdGhlIGNsYXNzCgl0byBwZW5kaW5nX3RlbXBsYXRlcyBpbnN0ZWFkIG9mIGluc3RhbnRpYXRpbmcgaXQgbm93LgoJKiBkZWNsMi5jIChmaW5pc2hfZmlsZSk6IEhhbmRsZSB0eXBlcyBpbiBwZW5kaW5nX3RlbXBsYXRlcy4KClRodSBKdW4gMjAgMTQ6MDg6NDAgMTk5NiAgQm9iIE1hbnNvbiAgPG1hbnNvbkBjaGFybWVkLmN5Z251cy5jb20+CgoJKiBkZWNsMi5jIChncm9rYml0ZmllbGQpOiBIYW5kbGUgY29uc3RhbnQgZGVjbHMgYXBwcm9wcmlhdGVseS4KCUdpdmUgYW4gYXBwcm9wcmlhdGUgZXJyb3IgbWVzc2FnZSBub3cgaW5zdGVhZCBvZiBzcGV3aW5nIGNvcmUKCWxhdGVyLgoKVGh1IEp1biAyMCAxMzowMTo1MSAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBkZWNsMi5jOiBEb24ndCB0dXJuIG9uIHRodW5rcyBieSBkZWZhdWx0IGZvciBub3cuCgpXZWQgSnVuIDE5IDExOjM3OjA0IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHR5cGVjay5jIChjb21wbGV0ZV90eXBlKTogSGFuZGxlIGVycm9yX21hcmtfbm9kZS4KCShjb21tb25fdHlwZSwgT0ZGU0VUX1RZUEUpOiBIYW5kbGUgdGVtcGxhdGVfdHlwZV9wYXJtcy4KClR1ZSBKdW4gMTggMTA6MDI6MTUgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogcHQuYyAoaW5zdGFudGlhdGVfZGVjbCk6IElmIGF0X2VvZiwgY2FsbCBpbXBvcnRfZXhwb3J0X2RlY2wKCXJlZ2FyZGxlc3Mgb2YgREVDTF9JTkxJTkUuCgoJKiB0eXBlY2suYyAobWFya19hZGRyZXNzYWJsZSk6IFNldCBUUkVFX0FERFJFU1NBQkxFIG9uIENPTlNUUlVDVE9Scy4KCgkqIGNsYXNzLmMgKGZpbmlzaF9zdHJ1Y3RfYml0cyk6IENvcHkgVFlQRV9TSVpFLgoKCSogcnR0aS5jIChidWlsZF9keW5hbWljX2Nhc3QpOiBTdXBwb3J0IHRlbXBsYXRlcy4KCSogdHJlZS5kZWY6IFN1cHBvcnQgRFlOQU1JQ19DQVNUX0VYUFIuCgkqIHB0LmMgKHRzdWJzdF9jb3B5KTogTGlrZXdpc2UuCgkqIGRlY2wyLmMgKGJ1aWxkX2V4cHJfZnJvbV90cmVlKTogTGlrZXdpc2UuCgpNb24gSnVuIDE3IDE1OjIzOjM2IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHR5cGVjay5jIChidWlsZF9zdGF0aWNfY2FzdCk6IFN1cHBvcnQgdGVtcGxhdGVzLgoJKGJ1aWxkX2NvbnN0X2Nhc3QpOiBMaWtld2lzZS4KCSogdHJlZS5kZWY6IFN1cHBvcnQgQ09OU1QvU1RBVElDX0NBU1RfRVhQUi4KCSogcHQuYyAodHN1YnN0X2NvcHkpOiBMaWtld2lzZS4KCSogZGVjbDIuYyAoYnVpbGRfZXhwcl9mcm9tX3RyZWUpOiBMaWtld2lzZS4KClN1biBKdW4gMTYgMTI6MzM6NTcgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZGVjbDIuYyAoZmluaXNoX3Z0YWJsZV92YXJkZWNsKTogRG9uJ3QgdHJ1c3QKCVRSRUVfU1lNQk9MX1JFRkVSRU5DRUQgZm9yIHZ0YWJsZXMgb2YgbG9jYWwgY2xhc3Nlcy4KCkZyaSBKdW4gMTQgMTg6MTM6MzYgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogcHQuYyAodHN1YnN0X2NvcHkpOiBIYW5kbGUgb3BlcmF0b3IgVC4KCldlZCBKdW4gMTIgMTc6NTI6NDAgMTk5NiAgQnJlbmRhbiBLZWhvZSAgPGJyZW5kYW5AbGlzYS5jeWdudXMuY29tPgoKCSogaW5pdC5jIChidWlsZF9kZWxldGUpOiBNb3ZlIGNyZWF0aW9uIG9mIFBBUk1TIGluc2lkZSB0ZXN0IG9mCglUWVBFX0hBU19ERVNUUlVDVE9SLCBzaW5jZSBpdCdzIG5ldmVyIHVzZWQgb3V0c2lkZSBvZiB0aGF0IGJsb2NrLgoKVHVlIEp1biAxMSAxNTowOToxOCAxOTk2ICBCb2IgTWFuc29uICA8bWFuc29uQGNoYXJtZWQuY3lnbnVzLmNvbT4KCgkqIHR5cGVjay5jIChidWlsZF9jb25kaXRpb25hbF9leHByKTogRG9uJ3QgYXNzdW1lIHRoYXQKCXRoZSBhcmd1bWVudHMgdG8gPzogYXJlIGFsd2F5cyBwb2ludGVycyBvciByZWNvcmRzLgoKVHVlIEp1biAxMSAxMzo1NjoyMyAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBkZWNsMi5jIChpbXBvcnRfZXhwb3J0X2RlY2wpOiBTdGlsbCBlbWl0IHN0YXRpYy93ZWFrL2NvbWRhdAoJY29waWVzIG9mIGlubGluZSB0ZW1wbGF0ZSBmdW5jdGlvbnMgd2l0aCAtZm5vLWltcGxpY2l0LXRlbXBsYXRlcy4KClR1ZSBKdW4gMTEgMTE6NDI6MTMgMTk5NiAgQm9iIE1hbnNvbiAgPG1hbnNvbkBjaGFybWVkLmN5Z251cy5jb20+CgoJKiBpbml0LmMgKGJ1aWxkX2RlbGV0ZSk6IERldGVybWluZSB0aGUgY29tcGxldGUgYmFzZXR5cGUKCXBhdGggdG8gdGhlIGRlc3RydWN0b3Igd2UncmUgY2FsbGluZy4KCkZyaSBKdW4gIDcgMTU6MzA6MTAgMTk5NiAgQm9iIE1hbnNvbiAgPG1hbnNvbkBjaGFybWVkLmN5Z251cy5jb20+CgoJKiBkZWNsLmMgKGJ1aWxkX2VudW1lcmF0b3IpOiBBbHdheXMgY29weSB0aGUgSU5URUdFUl9DU1QgdXNlZCB0bwoJaW5pdGlhbGl6ZSB0aGUgZW51bSwgYmVjYXVzZSB3ZSByZWFsbHkgYW5kIHRydWx5IGRvbid0IGtub3cgd2hlcmUKCWl0IGNhbWUgZnJvbS4KCShzdGFydF9lbnVtKTogRG9uJ3QgY29weSBpbnRlZ2VyX3plcm9fbm9kZSBiZWNhdXNlCglidWlsZF9lbnVtZXJhdG9yIHdpbGwgZG8gaXQuCgpGcmkgSnVuICA3IDExOjExOjA5IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAoZmluaXNoX2Z1bmN0aW9uKTogRG8gYWNjZXNzIGNvbnRyb2wgb24gYmFzZSBkZXN0cnVjdG9ycy4KCgkqIHB0LmMgKHRzdWJzdCwgY2FzZSBGVU5DVElPTl9ERUNMKTogU2V0IHVwCglJREVOVElGSUVSX0dMT0JBTF9WQUxVRSBmb3IgbWVtYmVyIGZ1bmN0aW9ucyBzbyBwdXNoZGVjbCBkb2Vzbid0Cglob3NlIHVzLgoKRnJpIEp1biAgNyAxMDozNzozMyAxOTk2ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiBjdnQuYyAoYnVpbGRfdXBfcmVmZXJlbmNlKTogSWYgd2UgaGF2ZSBhbHJlYWR5IGV4dGVuZGVkIHRoZQoJbGlmZXRpbWUgb2YgdGhlIHRlbXBvcmFyeSwgZG9uJ3QgdHJ5IGl0IGFnYWluLgoJKiB0eXBlY2suYyAoY19leHBhbmRfcmV0dXJuKTogRG9uJ3QgdHJ5IGFuZCBjb252ZXJ0IHRoZSByZXR1cm4KCXZhbHVlIHR3aWNlIHdoZW4gd2Ugd2FudCBhIHJlZmVyZW5jZSwgb25jZSBpcyBlbm91Z2guCgkKVHVlIEp1biAgNCAxNTo0MTo0NSAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBwdC5jICh0c3Vic3RfZXhwciwgY2FzZSBERUNMX1NUTVQpOiBEb24ndCBwYXNzCglMT09LVVBfT05MWUNPTlZFUlRJTkcgYXQgYWxsIGZvciBub3cuCgoJKiBzZWFyY2guYyAoYWRkX2NvbnZlcnNpb25zKTogUHV0IHRoZSBjb252ZXJzaW9uIGZ1bmN0aW9uIGluCglUUkVFX1ZBTFVFLCB0aGUgYmFzZXR5cGUgaW4gVFJFRV9QVVJQT1NFLgoJKiBjdnQuYyAoYnVpbGRfdHlwZV9jb252ZXJzaW9uKTogQWRqdXN0LgoJKiBjdnQuYyAoYnVpbGRfZXhwcl90eXBlX2NvbnZlcnNpb24pOiBBZGp1c3QuCgkqIGNhbGwuYyAodXNlcl9oYXJzaG5lc3MpOiBBZGp1c3QuCgpNb24gSnVuICAzIDE1OjMwOjUyIDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIG1ldGhvZC5jIChlbWl0X3RodW5rKTogUHJldGVuZCB0aGlzIGlzIGEgRlVOQ1RJT05fREVDTCBmb3IgdGhlCgliYWNrZW5kJ3MgYmVuZWZpdC4KCk1vbiBKdW4gMTAgMTg6NTg6MTkgMTk5NiAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgoKCSogZXhjZXB0LmMgKGV4cGFuZF9zdGFydF9jYXRjaF9ibG9jayk6IEFkZCBhIGR1bW15IHJlZ2lvbiwgaWYgd2UKCWdldCBhbiBlcnJvciwgc28gdGhhdCB3ZSBjYW4gYXZvaWQgY29yZSBkdW1waW5nIGxhdGVyLgoKRnJpIE1heSAzMSAxNDo1NjoxMyAxOTk2ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiBjcC10cmVlLmggKE9GRlNFVF9SRUYpOiBSZW1vdmUuCgkqIHRyZWUuZGVmIChDUF9PRkZTRVRfUkVGKTogUmVuYW1lIHRvIE9GRlNFVF9SRUYuCgkqIGV4cHIuYyAoY3BsdXNfZXhwYW5kX2V4cHIpOiBDbGVhbnVwIGNhbGxlcnMgb2YgZXhwYW5kX2V4cHIuCgkqIGluaXQuYyAoZXhwYW5kX2FnZ3JfaW5pdF8xKTogTGlrZXdpc2UuCgkoYnVpbGRfbmV3KTogTGlrZXdpc2UuCgkqIHR5cGVjay5jIChleHBhbmRfdGFyZ2V0X2V4cHIpOiBMaWtld2lzZS4KCkZyaSBNYXkgMzEgMTQ6MjI6MDggMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogdHlwZWNrLmMgKGJ1aWxkX21vZGlmeV9leHByKTogRG9uJ3QgdXNlIFRSRUVfVkFMVUUgb24gYQoJVEFSR0VUX0VYUFIuCgpXZWQgTWF5IDI5IDE3OjA0OjMzIDE5OTYgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIGN2dC5jIChidWlsZF91cF9yZWZlcmVuY2UpOiBSZWRvIGhvdyBhbmQgd2hlbiB0ZW1wb3JhcmllcyBhcmUKCWNyZWF0ZWQuCgkqIGRlY2wuYyAoZ3Jva19yZWZlcmVuY2VfaW5pdCk6IERvbid0IHRyeSBhbmQgYmUgc21hcnQgYWJvdXQKCXJ1bm5pbmcgY2xlYW51cHMuCgpXZWQgTWF5IDI5IDE2OjAyOjA4IDE5OTYgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIGN2dC5jIChidWlsZF91cF9yZWZlcmVuY2UpOiBBZGQgTlVMTF9UUkVFIHRvIGFsbCBjYWxscyB0byBidWlsZAoJKFRBUkdFVF9FWFBSLi4uKSwgbm93IHRoYXQgaXQgaGFzIDQgYXJndW1lbnRzLgoJKiB0cmVlLmMgKGJ1aWxkX2NwbHVzX25ldyk6IExpa2V3aXNlLgoKVGh1IE1heSAyMyAxNjo0MDozMCAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBlcnJvci5jIChkdW1wX2V4cHIsIGNhc2UgQ0FTVF9FWFBSKTogSGFuZGxlIFQoKSBwcm9wZXJseS4KCgkqIHB0LmMgKGluc3RhbnRpYXRlX2RlY2wpOiBEb24ndCBjYWxsIHB1c2gvcG9wX2NwX2Z1bmN0aW9uX2NvbnRleHQuCgkqIGRlY2wuYyAoc3RydWN0IHNhdmVkX3Njb3BlKTogUmVtb3ZlIG5hbWVkX2xhYmVscywKCXtiYXNlLG1lbWJlcn1faW5pdF9saXN0LgoJKG1heWJlX3B1c2hfdG9fdG9wX2xldmVsKTogRG9uJ3Qgc2V0IHRoZW0uICBDYWxsCglwdXNoX2NwX2Z1bmN0aW9uX2NvbnRleHQgaWYgYXBwcm9wcmlhdGUuCgkocG9wX2Zyb21fdG9wX2xldmVsKTogTGlrZXdpc2UuCgoJKiBtZXRob2QuYyAoZG9fYnVpbGRfYXNzaWduX3JlZik6IFJlbW92ZSBvYnNvbGV0ZSBjaGVjayBvZgoJVFlQRV9IQVNfQVNTSUdOX1JFRiAoYmFzZXR5cGUpLgoKCSogZGVjbC5jIChncm9rZm5kZWNsKTogRGlhZ25vc2UgdXNlciBkZWZpbml0aW9uIG9mCglpbXBsaWNpdGx5LWRlY2xhcmVkIG1ldGhvZHMuCgpUaHUgTWF5IDIzIDEyOjEzOjA4IDE5OTYgIEJvYiBNYW5zb24gIDxtYW5zb25AY2hhcm1lZC5jeWdudXMuY29tPgoKCSogbWV0aG9kLmMgKGRvX2J1aWxkX2NvcHlfY29uc3RydWN0b3IpOiBBZGQgY29kZSB0byBnaXZlCgltZWFuaW5nZnVsIGVycm9yIG1lc3NhZ2VzIGluc3RlYWQgb2YgY3Jhc2hpbmcuCgkoZG9fYnVpbGRfYXNzaWduX3JlZik6IERvbid0IHN5bnRoZXNpemUgYXNzaWdubWVudCBvcGVyYXRvcnMgZm9yCgljbGFzc2VzIGNvbnRhaW5pbmcgcmVmZXJlbmNlIG9yIGNvbnN0IG1lbWJlcnMuCgoJKiBjbGFzcy5jIChzdHJ1Y3QgYmFzZV9pbmZvKTogUmVtb3ZlIGNhbnRfc3ludGhfY29weV9jdG9yCglhbmQgY2FudF9zeW50aF9hc25fcmVmLgoJKGZpbmlzaF9iYXNlX3N0cnVjdCk6IFJlbW92ZSB0aGUgY29kZSB0aGF0IHRyaWVzIHRvIGNvbmRpdGlvbmFsaXplCglzeW50aGVzaXMgb2YgY29weSBjb25zdHJ1Y3RvcnMgJiBhc3NpZ25tZW50IG9wZXJhdG9ycyBiYXNlZCBvbgoJYWNjZXNzIHBlcm1pc3Npb25zLiBJbnN0ZWFkLCBsZXQgaXQgZmFpbCB3aGVuIGl0IHRyaWVzIHRvCglzeW50aGVzaXplIHRoZSBjb3B5IGNvbnN0cnVjdG9yLiBUaGlzIHdpbGwgZ2l2ZSBtZWFuaW5nZnVsIGVycm9yCgltZXNzYWdlcyBpbnN0ZWFkIG9mIHNpbGVudGx5IGdlbmVyYXRpbmcgY29kZSB0byBwZXJmb3JtIGEgYml0Y29weS4KCldlZCBNYXkgMjIgMTE6NDU6MTkgMTk5NiAgQm9iIE1hbnNvbiAgPG1hbnNvbkBjaGFybWVkLmN5Z251cy5jb20+CgoJKiBsZXguYyAocmVhbF95eWxleCk6IFJlbW92ZSBvbGQtbi1jcnVmdHkgI2lmIDAgY29kZSBmb3IKCWRldGVybWluaW5nIHR5cGVzIGZvciBjb25zdGFudCB2YWx1ZXMuCgoJKiBkZWNsLmMgKHN0cnVjdCBuYW1lZF9sYWJlbF9saXN0KTogVXNlIGluc3RlYWQgb2Ygc3R1ZmZpbmcKCXJhbmRvbSBpdGVtcyBpbnRvIGEgVFJFRV9MSVNUIG5vZGUuCgkobmFtZWRfbGFiZWxfdXNlcyk6IFVzZSB0aGUgbmV3IHN0cnVjdC4KCShwb3BsZXZlbCk6IExpa2V3aXNlLgoJKGxvb2t1cF9sYWJlbCk6IExpa2V3aXNlLgoJKGRlZmluZV9sYWJlbCk6IEFkZCBhbiBlcnJvciBtZXNzYWdlIHRvIHRlbGwgdGhlIHVzZXIgdGhlIGxpbmUKCXdoZXJlIHRoZSBnb3RvIGlzIGxvY2F0ZWQgaW4gYWRkaXRpb24gdG8gdGhlIGRlc3RpbmF0aW9uIG9mIHRoZQoJZ290by4KCShpbml0X2RlY2xfcHJvY2Vzc2luZyk6IFVzZSBOVUxMIGluc3RlYWQgb2YgTlVMTF9UUkVFIHRvIGluaXRpYWxpemUKCW5hbWVkX2xhYmVsX3VzZXMuCgkoZmluaXNoX2Z1bmN0aW9uKTogTGlrZXdpc2UuCgkKCShzdGFydF9kZWNsKTogQ29tcGxhaW4gYWJvdXQgZGVmaW5pbmcgYSBzdGF0aWMgZGF0YSBtZW1iZXIKCWluIGEgZGlmZmVyZW50IHR5cGUgZnJvbSB3aGljaCBpdCB3YXMgZGVjbGFyZWQuCgpXZWQgTWF5IDIyIDA5OjMzOjIzIDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGN2dC5jIChidWlsZF9leHByX3R5cGVfY29udmVyc2lvbik6IEFkanVzdC4KClR1ZSBNYXkgMjEgMTE6MjE6NTYgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY2FsbC5jIChidWlsZF9tZXRob2RfY2FsbCk6IEFsd2F5cyBjb252ZXJ0ICd0aGlzJyB0byB0aGUKCWFwcHJvcHJpYXRlIHR5cGUuCgoJKiBzZWFyY2guYyAoYWRkX2NvbnZlcnNpb25zKTogUHV0IHRoZSBjb252ZXJzaW9uIGZ1bmN0aW9uIGluCglUUkVFX1ZBTFVFLCB0aGUgdHlwZSBpbiBUUkVFX1BVUlBPU0UuCgkqIGN2dC5jIChidWlsZF90eXBlX2NvbnZlcnNpb24pOiBBZGp1c3QuCgkqIGNhbGwuYyAodXNlcl9oYXJzaG5lc3MpOiBBZGp1c3QuCgoJKiBtZXRob2QuYyAoZW1pdF90aHVuayk6IENhbGwgdGVtcG9yYXJ5X2FsbG9jYXRpb24gYW5kCglwZXJtYW5lbnRfYWxsb2NhdGlvbiBhcm91bmQgdGhlIEFTTV9PVVRQVVRfTUlfVEhVTksgY2FzZSwgdG9vLgoKCSogdHJlZS5jIChidWlsZF9jcGx1c19hcnJheV90eXBlKTogSGFuZGxlIHR3ZWFraW5nIG9mCglUWVBFX01BSU5fVkFSSUFOVCBoZXJlLgoJKiB0eXBlY2suYyAoY29tbW9uX3R5cGUpOiBOb3QgaGVyZS4KCgkqIHR5cGVjay5jIChjb21wbGV0ZV90eXBlKTogT25seSB0cnkgdG8gY29tcGxldGUgYW4gYXJyYXkgdHlwZSBpZgoJaXQgaGFzIGEgZG9tYWluLgoKTW9uIE1heSAyMCAxNDo1NTo1OSAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBkZWNsLmMgKGdyb2t2YXJkZWNsKTogQ2FsbCBjb21wbGV0ZV90eXBlLgoJKGdyb2tkZWNsYXJhdG9yKTogQ2FsbCBjb21wbGV0ZV90eXBlIGZvciBQQVJNX0RFQ0xzLgoKRnJpIE1heSAxNyAxNjo0MToxNyAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBwdC5jIChpbnN0YW50aWF0ZV9jbGFzc190ZW1wbGF0ZSk6IFJlLXNldAoJQ0xBU1NUWVBFX0dPVF9TRU1JQ09MT04gYWZ0ZXIgY2FsbGluZyBmaW5pc2hfc3RydWN0XzEuCgpGcmkgTWF5IDE3IDE0OjU2OjU1IDE5OTYgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIGNwLXRyZWUuaCAoY3BfZXhwYW5kX2RlY2xfY2xlYW51cCk6IFJlbW92ZSwgdGhlIGJhY2tlbmQgaXMgbm93CglzbWFydCBlbm91Z2ggdG8gZG8gaXQgcmlnaHQuCgkqIHRyZWUuYyAoY3BfZXhwYW5kX2RlY2xfY2xlYW51cCk6IExpa2V3aXNlLgoJKiBkZWNsLmMgKGNwX2ZpbmlzaF9kZWNsKTogVXNlIGV4cGFuZF9kZWNsX2NsZWFudXAgaW5zdGVhZCBvZgoJY3BfZXhwYW5kX2RlY2xfY2xlYW51cC4KCShzdG9yZV9wYXJtX2RlY2xzKTogTGlrZXdpc2UuCgkoaGFja19pbmNvbXBsZXRlX3N0cnVjdHVyZXMpOiBMaWtld2lzZS4KCSogZXhjZXB0LmMgKHB1c2hfZWhfY2xlYW51cCk6IExpa2V3aXNlLgoKRnJpIE1heSAxNyAxMzoxMzo1MSAxOTk2ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiBleHByLmMgKGV4cGFuZF9leHByLCBjb25kIFVOU0FWRV9FWFBSKTogTW92ZSBmcm9tIHRoZSBDKysKCWZyb250ZW5kIHRvIHRoZSBiYWNrZW5kIHdoZXJlIGl0IGJlbG9uZ3MuCgkqIHRyZWUuYyAodW5zYXZlX2V4cHIpOiBMaWtld2lzZS4KCSh1bnNhdmVfZXhwcl9ub3cpOiBMaWtld2lzZS4KCSogdHJlZS5kZWYgKFVOU0FWRV9FWFBSKTogTGlrZXdpc2UuCgkqIGNwLXRyZWUuaCAodW5zYXZlX2V4cHIpOiBMaWtld2lzZS4KCSh1bnNhdmVfZXhwcl9ub3cpOiBMaWtld2lzZS4KCkZyaSBNYXkgMTcgMTE6MDI6NDEgMTk5NiAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgoKCSogaW5pdC5jIChlbWl0X2Jhc2VfaW5pdCk6IE1ha2Ugc3VyZSB0aGUgcGFydGlhbCBFSCBjbGVhbnVwcyBsaXZlCglvbiB0aGUgZnVuY3Rpb25fb2JzdGFjay4KClRodSBNYXkgMTYgMTU6Mjk6MzMgMTk5NiAgQm9iIE1hbnNvbiAgPG1hbnNvbkBjaGFybWVkLmN5Z251cy5jb20+CgoJKiBleHByLmMgKGRvX2Nhc2UpOiBEb24ndCB0cnkgdG8gZGVyZWZlcmVuY2UgbnVsbCBUUkVFX1RZUEVzCgl3aGVuIGNoZWNraW5nIGZvciBwb2ludGVyIHR5cGVzLgoKVGh1IE1heSAxNiAxMzozODo1OCAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBwdC5jIChpbnN0YW50aWF0ZV9jbGFzc190ZW1wbGF0ZSk6IFJlbW92ZSBvYnNvbGV0ZSBjaGVjayBmb3IKCWFjY2VzcyBkZWNsYXJhdGlvbnMuCgpUaHUgTWF5IDE2IDEzOjM0OjE1IDE5OTYgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIGNhbGwuYyAoYnVpbGRfb3ZlcmxvYWRfY2FsbCk6IFNpbXBsaWZ5IGNhbGxzIHRvCglidWlsZF9vdmVybG9hZF9jYWxsIGJ5IHJlbW92aW5nIGxhc3QgcGFyYW1ldGVyLgoJKGJ1aWxkX21ldGhvZF9jYWxsKTogTGlrZXdpc2UuCgkqIGNwLXRyZWUuaDogTGlrZXdpc2UuCgkqIG1ldGhvZC5jIChidWlsZF9vcGZuY2FsbCk6IExpa2V3aXNlLgoJKiB0eXBlY2suYyAoYnVpbGRfeF9mdW5jdGlvbl9jYWxsKTogTGlrZXdpc2UuCgpUaHUgTWF5IDE2IDEzOjE1OjQzIDE5OTYgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIGNhbGwuYyAoZGVmYXVsdF9wYXJtX2NvbnZlcnNpb25zKTogRmFjdG9yIG91dCBjb21tb24gY29kZS4KCShidWlsZF9tZXRob2RfY2FsbCk6IFVzZSBpdC4KCShidWlsZF9vdmVybG9hZF9jYWxsX3JlYWwpOiBVc2UgaXQuCgpXZWQgTWF5IDE1IDE0OjQ2OjE0IDE5OTYgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIGNhbGwuYyAoYnVpbGRfbWV0aG9kX2NhbGwpOiBBbGxvdyBpbXBsaWNpdCAmIG9uIE1FVEhPRF9UWVBFcywKCWJ1dCBwZWR3YXJuIGFzIHRoZSBjb2RlIGlzIGJvZ3VzLgoJKiB0eXBlY2suYyAoZGVjYXlfY29udmVyc2lvbik6IExpa2V3aXNlLgoJKGJ1aWxkX2Z1bmN0aW9uX2NhbGxfcmVhbCk6IFVzZSBidWlsZF9hZGRyX2Z1bmMgaW5zdGVhZCBvZgoJZGVmYXVsdF9jb252ZXJzaW9uLiAgRG9uJ3QgYWxsb3cgcG9pbnRlci10by1tZXRob2QgZnVuY3Rpb25zIGRvd24KCWhlcmUuCgkoYnVpbGRfdW5hcnlfb3ApOiBVc2UgcmVhbCBwb2ludGVyLXRvLW1lbWJlciBmdW5jdGlvbnMgaW5zdGVhZCBvZgoJZmFrZSBvbmVzLgoJKGJ1aWxkX3B0cm1lbWZ1bmMpOiBVc2UgYnVpbGRfYWRkcl9mdW5jIGluc3RlYWQgb2YgYnVpbGRfdW5hcnlfb3AuCgkoY29udmVydF9mb3JfYXNzaWdubWVudCk6IFJlbW92ZWQgc29tZSBvYnNvbGV0ZSBjb2RlLgoJKiBkZWNsMi5jIChyZXBhcnNlX2Fic2RjbF9hc19leHByKTogUGFzcyBjdXJyZW50X2NsYXNzX3JlZiB0bwoJYnVpbGRfeF9mdW5jdGlvbl9jYWxsIGluc3RlYWQgb2YgY3VycmVudF9jbGFzc19wdHIuICBPbmx5IGNhbGwKCWRpZ2VzdF9pbml0IG9uY2Ugb24gYW4gaW5pdGlhbGl6ZXIsIHdlIGRvIHRoaXMganVzdCBjaGVja2luZwoJVFJFRV9UWVBFLgoJKGJ1aWxkX2V4cHJfZnJvbV90cmVlKTogUGFzcyBjdXJyZW50X2NsYXNzX3JlZiB0bwoJYnVpbGRfeF9mdW5jdGlvbl9jYWxsIGluc3RlYWQgb2YgY3VycmVudF9jbGFzc19wdHIuCgkqIGluaXQuYyAoYnVpbGRfbWVtYmVyX2NhbGwpOiBMaWtld2lzZS4KCSogcGFzZS55OiBMaWtld2lzZS4KCSogZXJyb3IuYyAoZHVtcF9leHByKTogSGFuZGxlIE9GRlNFVF9SRUZzIGJldHRlci4KCSogcHQuYyAodW5pZnkpOiBIYW5kbGUgcG9pbnRlci10by1tZW1iZXIgZnVuY3Rpb25zIGJldHRlci4KCSogZGVjbC5jIChmaW5pc2hfZnVuY3Rpb24pOiBDbGVhciBvdXQgY3VycmVudF9jbGFzc19yZWYganVzdCBsaWtlCgl3ZSBkbyBmb3IgY3VycmVudF9jbGFzc19wdHIuCgoJKiB0eXBlY2suYyAoZ2V0X2RlbHRhX2RpZmZlcmVuY2UpOiBIYW5kbGUgdmlydHVhbCBiYXNlcyBiZXR0ZXIuCgpUdWUgTWF5IDE0IDE2OjM3OjM3IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHNpZy5jIChidWlsZF9zaWduYXR1cmVfdGFibGVfY29uc3RydWN0b3IpOiBVc2UgdGhlIGRlbHRhIGZvcgoJdGhlIG9yaWdpbmFsIGJhc2V0eXBlIGZvciB0aGlzIHZpcnR1YWwgZnVuY3Rpb24gd2l0aCB0aHVua3MuCgkoYnVpbGRfc2lnbmF0dXJlX21ldGhvZF9jYWxsKTogV2Ugc3RpbGwgbmVlZCB0byBhZGp1c3QgJ3RoaXMnCgl3aXRoIHRodW5rcy4KClR1ZSBNYXkgMTQgMTY6Mjc6MjUgMTk5NiAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgoKCSogY2FsbC5jIChidWlsZF9hZGRyX2Z1bmMpOiBOZXcgcm91dGluZS4gIFVzZWQgdG8gZ2V0IHRoZSBgcmVhbCcKCWFkZHJlc3Mgb2YgYSBmdW5jdGlvbiBvciBhIG1ldGhvZC4gIE5lZWRlZCB0byBhdm9pZCBnZXR0aW5nIGEKCXBvaW50ZXItdG8tbWVtYmVyIGZ1bmN0aW9uLgoJKGJ1aWxkX2NhbGwpOiBOZXcgcm91dGluZSB0byBidWlsZCBDQUxMX0VYUFJzLgoJKGJ1aWxkX21ldGhvZF9jYWxsKTogVXNlIGl0LgoJKiBjdnQuYyAoY29udmVydF90b19hZ2dyKTogTGlrZXdpc2UuCgkqIHR5cGVjay5jIChidWlsZF9mdW5jdGlvbl9jYWxsX3JlYWwpOiBMaWtld2lzZS4KCSogc2lnLmMgKGJ1aWxkX3NpZ25hdHVyZV90YWJsZV9jb25zdHJ1Y3Rvcik6IFVzZSBidWlsZF9hZGRyX2Z1bmMuCgkqIGNwLXRyZWUuaCAoYnVpbGRfY2FsbCwgYnVpbGRfYWRkcl9mdW5jKTogRGVjbGFyZSB0aGVtLgoKVHVlIE1heSAxNCAxMjo0Nzo0NyAxOTk2ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiBjcC10cmVlLmggKExPT0tVUF9BR0dSKTogUmVtb3ZlLCB1bnVzZWQuCgkqIHBhcnNlLnk6IFJlbW92ZSB1c2VzIG9mIExPT0tVUF9BR0dSLgoKVHVlIE1heSAxNCAxMjowNzo1MSAxOTk2ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiAqLltjaHldOiBSZW5hbWUgY3VycmVudF9jbGFzc19kZWNsIHRvIGN1cnJlbnRfY2xhc3NfcHRyLCBhbmQKCUNfQ19EIHRvIGN1cnJlbnRfY2xhc3NfcmVmLgoKTW9uIE1heSAxMyAxNjo1NToyMyAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjYWxsLmMgKGNvbnZlcnRfaGFyc2huZXNzKTogVGlnaHRlbiB1cCBwb2ludGVyIGNvbnZlcnNpb25zLgoKU2F0IE1heSAxMSAwNDozMzo1MCAxOTk2ICBEb3VnIEV2YW5zICA8ZGplQGNhbnVjay5jeWdudXMuY29tPgoKCSogZGVjbDIuYyAoZmluaXNoX3Z0YWJsZV92YXJkZWNsKTogU3Vycm91bmQgREVDTF9PTkVfT05MWSB3aXRoIGlmZGVmLgoJKGZpbmlzaF9maWxlKTogTGlrZXdpc2UuCgpGcmkgTWF5IDEwIDExOjA5OjU3IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGN2dC5jIChjb252ZXJ0X2ZuX3B0cik6IFdlIGRvbid0IHVzZSB0aHVua3MgZm9yIHBtZnMuCgoJKiBtZXRob2QuYyAoZW1pdF90aHVuayk6IFNldCBmbGFnX29taXRfZnJhbWVfcG9pbnRlciBpbiBkZWZhdWx0Cgljb2RlLgoKVGh1IE1heSAgOSAxODoxODozMCAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBkZWNsMi5jOiBUdXJuIG9uIHRodW5rcyBieSBkZWZhdWx0IHdoZXJlIHN1cHBvcnRlZC4KClR1ZSBNYXkgIDcgMjA6Mzk6NTcgMTk5NiAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgoKCSogY3AtdHJlZS5oIChidWlsZF9vdmVybG9hZF9jYWxsX21heWJlKTogUmVtb3ZlZC4KCSogY2FsbC5jIChidWlsZF9vdmVybG9hZF9jYWxsX3JlYWwpOiBJbnZlcnQgbWVhbmluZyBvZiBsYXN0IGFyZyB0bwoJYmUgcmVxdWlyZV9jb21wbGV0ZS4KCShidWlsZF9vdmVybG9hZF9jYWxsKTogTGlrZXdpc2UuCgkqIHR5cGVjay5jIChidWlsZF94X2Z1bmN0aW9uX2NhbGwpOiBVc2UgYnVpbGRfb3ZlcmxvYWRfY2FsbF9yZWFsCglpbnN0ZWFkIG9mIGJ1aWxkX292ZXJsb2FkX2NhbGxfbWF5YmUuCgpNb24gTWF5ICA2IDAxOjIzOjMyIDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGRlY2wyLmMgKGZpbmlzaF9maWxlKTogRG9uJ3QgdHJ5IHRvIGVtaXQgZnVuY3Rpb25zIHRoYXQgaGF2ZW4ndAoJYmVlbiBjb21waWxlZC4KCkZyaSBNYXkgIDMgMDk6MzA6MTMgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZGVjbDIuYyAoZmluaXNoX3Z0YWJsZV92YXJkZWNsKTogT29wcy4KCgkqIGRlY2wuYyAobWF5YmVfcHVzaF90b190b3BfbGV2ZWwpOiBEbyBzYXZlIHByZXZpb3VzX2NsYXNzXyouCglBbHNvIHN0b3JlIHRoZSBiaW5kaW5ncyBmcm9tIHByZXZpb3VzX2NsYXNzX3ZhbHVlcy4KCShwb3BfZnJvbV90b3BfbGV2ZWwpOiBSZXN0b3JlIHRoZW0uCgpUaHUgTWF5ICAyIDIxOjU2OjQ5IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGRlY2wyLmMgKGZpbmlzaF92dGFibGVfdmFyZGVjbCk6IE9ubHkgd3JpdGUgb3V0IHZ0YWJsZSBpZiBpdHMKCXN5bWJvbCBoYXMgYmVlbiByZWZlcmVuY2VkLgoJKGZpbmlzaF9maWxlKTogUmUtam9pbiBzeW50aGVzaXMvdnRhYmxlIGxvb3Agd2l0aCBpbmxpbmUgZW1pc3Npb24KCWxvb3AsIGRpc2FibGUgaW5saW5pbmcgd2hlbiBhbiBpbmxpbmUgaXMgb3V0cHV0LgoKVGh1IE1heSAgMiAxNzoyMDowMiAxOTk2ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiBleGNlcHQuYyAoaW5pdF9leGNlcHRpb25fcHJvY2Vzc2luZyk6IFNldHVwIHNhdmVkX2luX2NhdGNoLgoJKHB1c2hfZWhfY2xlYW51cCk6IFJlc2V0IF9fZWhfaW5fY2F0Y2guCgkoZXhwYW5kX3N0YXJ0X2NhdGNoX2Jsb2NrKTogU2V0IF9fZWhfaW5fY2F0Y2guCgpUaHUgTWF5ICAyIDE2OjIxOjE3IDE5OTYgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIGV4Y2VwdC5jIChwdXNoX2VoX2NsZWFudXApOiBBZGQgdHJhY2tpbmcgZm9yIHdoZXRoZXIgb3Igbm90IHdlCgloYXZlIGFuIGFjdGl2ZSBleGNlcHRpb24gb2JqZWN0LgoJKGV4cGFuZF9idWlsdGluX3Rocm93KTogVXNlIGl0IHRvIG1ha2Ugc3VyZSBhIHJldGhyb3cgd2l0aG91dCBhbgoJZXhjZXB0aW9uIG9iamVjdCBpcyBjYXVnaHQuCgpUaHUgTWF5ICAyIDExOjI2OjQxIDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAobWF5YmVfcHVzaF90b190b3BfbGV2ZWwpOiBDbGVhciBvdXQgY2xhc3MtbGV2ZWwgYmluZGluZ3MKCWNhY2hlLgoKV2VkIE1heSAgMSAxMToyNjo1MiAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBkZWNsMi5jIChmaW5pc2hfZmlsZSk6IEFsc28gdXNlIHNlbnRyaWVzIGZvciB2YXJzIHdpdGgKCURFQ0xfT05FX09OTFkgb3IgREVDTF9XRUFLIHNldCAoc2hvdWxkIGFueSBzdWNoIGhhcHBlbiB0byBiZQoJY3JlYXRlZCkuCgoJKiBsZXguYyAoaGFuZGxlX2NwX3ByYWdtYSk6IERpc2FibGUgI3ByYWdtYQoJaW50ZXJmYWNlL2ltcGxlbWVudGF0aW9uIGlmIFNVUFBPUlRTX09ORV9PTkxZID4gMS4KClR1ZSBBcHIgMzAgMTE6MjU6NDYgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogbWV0aG9kLmMgKGVtaXRfdGh1bmspOiBXcmFwIGRlZmF1bHQgY2FzZSBpbgoJdGVtcG9yYXJ5L3Blcm1hbmVudF9hbGxvY2F0aW9uLgoKCSogbWV0aG9kLmMgKG1ha2VfdGh1bmspOiBVc2UgREVDTF9PTkVfT05MWS4KCShlbWl0X3RodW5rKTogQ2FsbCBhc3NlbWJsZV9lbmRfZnVuY3Rpb24uCgpNb24gQXByIDI5IDE1OjM4OjI5IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGRlY2wyLmMgKGltcG9ydF9leHBvcnRfdnRhYmxlKTogVXNlIERFQ0xfT05FX09OTFkuCgkoaW1wb3J0X2V4cG9ydF9kZWNsKTogTGlrZXdpc2UuCgkoZmluaXNoX3ByZXZ0YWJsZV92YXJkZWNsKTogRGlzYWJsZSB2dGFibGUgaGFjayBpZgoJU1VQUE9SVFNfT05FX09OTFkgPiAxLgoKTW9uIEFwciAyOSAxNDozMjo0NyAxOTk2ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiB0eXBlY2suYyAoYnVpbGRfbW9kaWZ5X2V4cHIpOiBQUkVJTkNSRU1FTlRfRVhQUiBhbmQKCVBSRURFQ1JFTUVOVF9FWFBScyB0YWtlIHR3byBhcmd1bWVudHMsIG5vdCBvbmUuCgpNb24gQXByIDI5IDAwOjI3OjUzIDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGNsYXNzLmMgKGJ1aWxkX3Z0YWJsZV9lbnRyeSk6IERvbid0IGJ1aWxkIHRodW5rcyBmb3IgYWJzdHJhY3QKCXZpcnR1YWxzLgoKCSogbGV4LmMgKHJlYWxfeXlsZXgpOiBGaXggaGFuZGxpbmcgb2YgX19QUkVUVFlfRlVOQ1RJT05fXyBsaWtlIEMKCWZyb250ZW5kLgoKU2F0IEFwciAyNyAxNjo0NTozNSAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjbGFzcy5jIChzZXRfcnR0aV9lbnRyeSk6IFVzZSBzaXplX3plcm9fbm9kZS4KCShidWlsZF92dGFibGUpOiBMaWtld2lzZS4KClNhdCBBcHIgMjcgMTQ6NDg6NTcgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHBoeWRlYXV4LmN5Z251cy5jb20+CgoJKiBjbGFzcy5jIChmaW5pc2hfc3RydWN0XzEpOiBQYXNzIHNpemVfemVyb19ub2RlIHRvIHNldF9ydHRpX2VudHJ5LgoJKHByZXBhcmVfZnJlc2hfdnRhYmxlKTogTGlrZXdpc2UuCgpGcmkgQXByIDI2IDEzOjE0OjE0IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIG1ldGhvZC5jIChlbWl0X3RodW5rKTogQ2FsbCBtYXJrX3VzZWQgb24gdGhlIHRhcmdldCBmdW5jdGlvbi4KCgkqIGNhbGwuYyAoYnVpbGRfbWV0aG9kX2NhbGwpOiBEb24ndCB3YXJuIGFib3V0IHBlbmRpbmcgdGVtcGxhdGVzLgoKVGh1IEFwciAyNSAxNDo1NTo0NCAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBkZWNsMi5jIChmaW5pc2hfZmlsZSk6IEZpeCBsaXN0IHdhbGtpbmcgbG9naWMuCgoJKiB0eXBlY2syLmMgKGNoZWNrX2Zvcl9uZXdfdHlwZSk6IE9ubHkgd2FybiBpZiAtcGVkYW50aWMuCgpXZWQgQXByIDI0IDE1OjQxOjE1IDE5OTYgIEJvYiBNYW5zb24gIDxtYW5zb25AY2hhcm1lZC5jeWdudXMuY29tPgoKCSogY2xhc3MuYyAoZmluaXNoX3N0cnVjdF8xKTogUmVtb3ZlIG9sZCBjb2RlIGZvcgoJZG9udF9hbGxvd190eXBlX2RlZmluaXRpb25zLgoJKiBjcC10cmVlLmg6IExpa2V3aXNlLgoJKiBzcGV3LmM6IE1ha2Ugc3VyZSBjcC10cmVlLmggaXMgaW5jbHVkZWQgYmVmb3JlIHBhcnNlLmgsIHNvIHRoZQoJZGVmaW5pdGlvbiBvZiBmbGFnZ2VkX3R5cGVfdHJlZSBpcyBmb3VuZCBiZWZvcmUgaXQgaXMgdXNlZC4KCSogbGV4LmM6IExpa2V3aXNlLgoJKiBwYXJzZS55OiBBZGRlZCB0aGUgZnR5cGUgbWVtYmVyIHRvIHRoZSB0eXBlIHVuaW9uLCBhbmQgY2hhbmdlZCBhCgludW1iZXIgb2YgcnVsZXMgdG8gdXNlIGl0IGluc3RlYWQgb2YgdHR5cGUuIEFkZGVkIGNhbGxzIHRvCgljaGVja19mb3JfbmV3X3R5cGUoKSBhcyBhcHByb3ByaWF0ZS4KCSogdHlwZWNrMi5jIChjaGVja19mb3JfbmV3X3R5cGUpOiBOZXcgZnVuY3Rpb24gZm9yIGNoZWNraW5nCglpZiBhIG5ld2x5IGRlZmluZWQgdHlwZSBhcHBlYXJzIGluIHRoZSBzcGVjaWZpZWQgdHJlZS4KCSogY3AtdHJlZS5oOiBBZGQgbmV3IHR5cGUgZmxhZ2dlZF90eXBlX3RyZWUuIEFkZCBhIHByb3RvdHlwZQoJZm9yIGNoZWNrX2Zvcl9uZXdfdHlwZSgpLgoKV2VkIEFwciAyNCAwMDozNjoyMSAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBkZWNsMi5jIChmaW5pc2hfZmlsZSk6IE9ubHkgdXNlIGEgc2VudHJ5IGlmIHRoZSBkZWNsIGlzIHB1YmxpYy4KCgkqIHB0LmMgKHRzdWJzdF9leHByLCBERUNMX1NUTVQpOiBJZiB3ZSBkb24ndCBoYXZlIGFuIGluaXRpYWxpemVyLAoJZG9uJ3QgcGFzcyBMT09LVVBfT05MWUNPTlZFUlRJTkcuCgpUdWUgQXByIDIzIDE3OjE4OjQ3IDE5OTYgIEJvYiBNYW5zb24gIDxtYW5zb25AY2hhcm1lZC5jeWdudXMuY29tPgoKCSogdHlwZWNrLmMgKGNvbW1vbl90eXBlKTogRml4IHRoZSBBUlJBWV9UWVBFIGNhc2Ugc28gaXQKCXByb3Blcmx5IGtlZXBzIHRyYWNrIG9mIGNvbnN0IGFuZCB2b2xhdGlsZSB0eXBlIG1vZGlmaWVycy4KClR1ZSBBcHIgMjMgMTA6NTI6NTYgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogdHJlZS5jIChjcF90cmVlX2VxdWFsKTogQysrIHZlcnNpb24gb2Ygc2ltcGxlX2NzdF9lcXVhbC4KCSogcHQuYyAoY29tcF90ZW1wbGF0ZV9hcmdzKTogVXNlIGl0LgoKCSogcnR0aS5jIChnZXRfdGluZm9fZm4sIGJ1aWxkX2R5bmFtaWNfY2FzdCwgZXhwYW5kXypfZGVzYyk6IENhbGwKCWFzc2VtYmxlX2V4dGVybmFsIGZvciBhcnRpZmljaWFsIGZ1bmN0aW9uIGRlY2xzLgoKCSogZGVjbC5jIChjcF9maW5pc2hfZGVjbCk6IE9vcHMuCgpNb24gQXByIDIyIDE3OjI4OjI3IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGRlY2wyLmMgKGltcG9ydF9leHBvcnRfZGVjbCk6IFB1dCBzdGF0aWMgZGF0YSBtZW1iZXIgdGVtcGxhdGVzCglpbnRvIGNvbW1vbiBzdG9yYWdlLCBvciBtYWtlIHRoZW0gd2VhaywgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhleQoJYXJlIGR5bmFtaWNhbGx5IG9yIHN0YXRpY2FsbHkgaW5pdGlhbGl6ZWQuCgkoZ2V0X3NlbnRyeSk6IE5ldyBmdW5jdGlvbi4KCShmaW5pc2hfZmlsZSk6IERvIGltcG9ydF9leHBvcnRfZGVjbCBmb3Igc3RhdGljIGRhdGEgbWVtYmVycyBiZWZvcmUKCWJ1aWxkaW5nIHRoZSBpbml0L2ZpbmkgZnVuY3Rpb25zLiAgRG9uJ3QgaW5pdC9maW5pIGEgdmFyaWFibGUgdGhhdCdzCglFWFRFUk5BTC4gIFVzZSBhIHNlbnRyeSBmb3IgdmFyaWFibGVzIGluIGNvbW1vbi4gIEZpeCBtaXNtYXRjaGluZwoJcHVzaC9wb3BfdGVtcF9zbG90cy4KCSogZGVjbC5jIChjcF9maW5pc2hfZGVjbCk6IElmIERFQ0xfTk9UX1JFQUxMWV9FWFRFUk4sIGRvIHRoZQoJZXhwYW5kX3N0YXRpY19pbml0IHRoYW5nLgoJKiBtZXRob2QuYyAoZ2V0X2lkXzIpOiBOZXcgZnVuY3Rpb24uCgpNb24gQXByIDIyIDE1OjMyOjQ1IDE5OTYgIEJvYiBNYW5zb24gIDxtYW5zb25AY2hhcm1lZC5jeWdudXMuY29tPgoKCSogcGFyc2UueSAoZW1wdHlfcGFybXMpOiBNYWtlIHN1cmUgd2UgdXNlIEMrKy1zdHlsZSBwcm90b3R5cGVzCgl3aGVuIHdlJ3JlIGRlY2xhcmluZyBtZW1iZXIgZnVuY3Rpb25zLgoKU3VuIEFwciAyMSAxMDowODoyMiAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBNYWtlZmlsZS5pbiAoQ09ORkxJQ1RTKTogMTYgcy9yIGNvbmZsaWN0cy4KCSogcGFyc2UueSAoc2VsZl90ZW1wbGF0ZV90eXBlKTogTmV3IG5vbnRlcm1pbmFsLgoKVGh1IEFwciAxOCAwODo1Njo1NCAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBkZWNsLmMgKG1ha2VfdHlwZW5hbWVfdHlwZSk6IEhhbmRsZSBnZXR0aW5nIGEgVFlQRV9ERUNMIGZvciBhCgluYW1lLgoJKiBwYXJzZS55IChiYXNlX2NsYXNzLjEpOiBBbGxvdyAndHlwZW5hbWUgZm9vOjpiYXInLgoKCSogbGV4LmMgKGNoZWNrX25ld2xpbmUpOiBSZW1vdmUgI3ByYWdtYSBjb2RlIHRoYXQgcGxheXMgd2l0aCB0aGUKCWlucHV0IHN0cmVhbSwgc2luY2Ugd2Ugbm93IGRlYWwgd2l0aCB0b2tlbnMuICBDbGVhciBuZXh0Y2hhciB3aGVuCgl3ZSdyZSBkb25lLgoJKGhhbmRsZV9jcF9wcmFnbWEpOiBVc2UgcmVhbF95eWxleC4KCShoYW5kbGVfc3lzdl9wcmFnbWEpOiBEb24ndCBkbyBza2lwbGluZSBoZXJlLiAgT25seSBjYWxsIHJlYWxfeXlsZXgKCWluIG9uZSBwbGFjZS4KCgkqIGxleC5jIChjaGVja19mb3JfbWlzc2luZ19zZW1pY29sb24pOiBIYW5kbGUgU0VMRk5BTUUuCgoJKiBsZXguYyAoaGFuZGxlX2NwX3ByYWdtYSk6IEZpeCAiI3ByYWdtYSBpbXBsZW1lbnRhdGlvbiIuCgpXZWQgQXByIDE3IDE2OjUxOjMzIDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnk6IE5ldyB0b2tlbiBTRUxGTkFNRSBmb3IgcG90ZW50aWFsIGNvbnN0cnVjdG9yLgoJKiBzcGV3LmMgKHl5bGV4KTogSGFuZGxlIGl0LgoJKiBsZXguYyAoaWRlbnRpZmllcl90eXBlKTogUHJvZHVjZSBpdC4KCgkqIHBhcnNlLnkgKGNvbXBsZXRlX3R5cGVfbmFtZSk6IEluIDo6IGNhc2UsIGRvbid0IHB1c2ggY2xhc3MgYmluZGluZy4KCShjb21wbGV4X3R5cGVfbmFtZSk6IExpa2V3aXNlLgoKV2VkIEFwciAxNyAxNTowMjo0MCAxOTk2ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiB0eXBlY2suYyAoYnVpbGRfcmVpbnRlcnByZXRfY2FzdCk6IEhhbmRsZSBwb2ludGVyIHRvIG1lbWJlcgoJZnVuY3Rpb25zLgoKV2VkIEFwciAxNyAxMjoyODoyNiAxOTk2ICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBsaXNhLmN5Z251cy5jb20+CgoJKiBsZXguYyAoaGFuZGxlX2NwX3ByYWdtYSk6IE5ldyBmdW5jdGlvbiwgd2l0aCBkZWNsLCBkb2luZyB0aGUgY2MxcGx1cwoJcHJhZ21hcy4KCShjaGVja19uZXdsaW5lKTogUHV0IHRoZSB2dGFibGUvdW5pdC9pbXBsZW1lbnRhdGlvbi9pbnRlcmZhY2UgcHJhZ21hCgljb2RlIGludG8gaGFuZGxlX2NwX3ByYWdtYSwgcmVwbGFjaW5nIGl0IHdpdGggYSBjYWxsLgoJKGhhbmRsZV9zeXN2X3ByYWdtYSk6IEdpdmUgaW50IHJldHVybiB0eXBlLCBhbmQgdGFrZSBGSU5QVVQgYW5kIFRPS0VOCglhcmdzLiAgR2V0IHRoZSBuZXh0IHRva2VuIGFmdGVyIGhhbmRsaW5nIHRoZSBwcmFnbWEgdG9rZW4uCgpXZWQgQXByIDE3IDEwOjI4OjM0IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGN2dC5jIChjcF9jb252ZXJ0X3RvX3BvaW50ZXIpOiBBdm9pZCBkb2luZyBiYXNlIGFuYWx5c2lzIG9uIHBtZnMuCgkoY29udmVydF90b19wb2ludGVyX2ZvcmNlKTogTGlrZXdpc2UuCgoJKiBpbml0LmMgKGJ1aWxkX25ldyk6IEZpeCBhcnJheSBuZXcgd2l0aG91dCAtZmNoZWNrLW5ldy4KClR1ZSBBcHIgMTYgMTM6NDQ6NTggMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY3AtdHJlZS5oLCBjYWxsLmMsIGNsYXNzLmMsIGRlY2wuYywgcGFyc2UueSwgcHQuYywgcnR0aS5jLAoJdHJlZS5jOiBMb3NlIFRZUEVfTkVTVEVEX05BTUUuCgoJKiBwYXJzZS55IChuZXN0ZWRfbmFtZV9zcGVjaWZpZXJfMSk6IERvbid0IHRyZWF0IG5vbi1pZGVudGlmaWVycwoJYXMgaWRlbnRpZmllcnMuCgoJKiB0cmVlLmRlZjogQWRkIFZFQ19JTklUX0VYUFIuCgkqIGV4cHIuYyAoY3BsdXNfZXhwYW5kX2V4cHIpOiBIYW5kbGUgaXQuCgkqIGluaXQuYyAoYnVpbGRfbmV3KTogVXNlIGl0IGluc3RlYWQgb2YgdGhlIFJUTF9FWFBSIG5hc3RpbmVzcyBhbmQKCXRoZSBleHRyYSBmaWxlLXNjb3BlIHN5bWJvbCBuYXN0aW5lc3MuCgpNb24gQXByIDE1IDE2OjIxOjI5IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIG1ldGhvZC5jIChtYWtlX3RodW5rKTogVGh1bmtzIGFyZSBzdGF0aWMuCgkoZW1pdF90aHVuayk6IFVzZSBBU01fT1VUUFVUX01JX1RIVU5LIGlmIGl0J3MgZGVmaW5lZC4KCgkqIGRlY2wyLmMgKG1hcmtfdnRhYmxlX2VudHJpZXMpOiBFbWl0IHRodW5rcyBhcyBuZWVkZWQuCgkoZmluaXNoX2ZpbGUpOiBEb24ndCBlbWl0IHRoZW0gaGVyZS4KClN1biBBcHIgMTQgMTE6MzQ6MzkgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogcnR0aS5jIChidWlsZF9keW5hbWljX2Nhc3QpOiBIYW5kbGUgbnVsbCBwb2ludGVycy4KCShpZm5vbm51bGwpOiBOZXcgZnVuY3Rpb24uCgpGcmkgQXByIDEyIDA5OjA4OjI3IDE5OTYgIEJvYiBNYW5zb24gIDxtYW5zb25AY2hhcm1lZC5jeWdudXMuY29tPgoKCSogY2FsbC5jIChidWlsZF9tZXRob2RfY2FsbCk6IFJlbWVtYmVyIHRoZSBvcmlnaW5hbCBiYXNldHlwZSB3ZQoJd2VyZSBjYWxsZWQgd2l0aC4gR2l2ZSBhbiBlcnJvciBtZXNzYWdlIGluc3RlYWQgb2YgdHJ5aW5nCgkoaW5jb3JyZWN0bHkpIHRvIGNhbGwgYSBub24tc3RhdGljIG1lbWJlciBmdW5jdGlvbiB0aHJvdWdoIGEKCW5vbi1pbmhlcml0ZWQgY2xhc3MuCgoJKiBzZWFyY2guYyAoZXhwYW5kX3VwY2FzdF9maXh1cHMpOiBNYXJrIHRoZSBuZXcgZml4dXAgYXMKCURFQ0xfQVJUSUZJQ0lBTC4KClRodSBBcHIgMTEgMDM6NTc6MDkgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogaW5pdC5jIChidWlsZF9uZXcpOiBVc2UgYSBUQVJHRVRfRVhQUiBmb3IgYWxsb2NfZXhwci4KCgkqIGNsYXNzLmMgKHNldF9ydHRpX2VudHJ5KTogRml4IGZvciB0aHVua3MuCgoJKiBkZWNsMi5jIChpbXBvcnRfZXhwb3J0X2RlY2wpOiBTdGlsbCBlbWl0IHR5cGVpbmZvIGZucyBmb3IKCWN2LXZhcmlhbnRzIG9mIGJ1aWx0aW4gdHlwZXMuCgoJKiBydHRpLmMgKGV4cGFuZF9jbGFzc19kZXNjKTogU2V0IHVwIGJhc2VfaW5mb190eXBlX25vZGUgaGVyZS4KCShpbml0X3J0dGlfcHJvY2Vzc2luZyk6IEluc3RlYWQgb2YgaGVyZS4KCldlZCBBcHIgMTAgMTQ6MTc6MTMgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogcnR0aS5jIChpbml0X3J0dGlfcHJvY2Vzc2luZyk6IERvIGluaXQgcmVnYXJkbGVzcyBvZiAtZnJ0dGkuCgkoYnVpbGRfdHlwZWlkKTogT25seSBjb21wbGFpbiBhYm91dCB0YWtpbmcgZHluYW1pYyB0eXBlaWQgd2l0aG91dAoJLWZydHRpLgoKCSogZGVjbDIuYzogZmxhZ19ydHRpIGRlZmF1bHRzIHRvIDEuCgoJKiBydHRpLmMgKGdldF90aW5mb192YXIpOiBUaGUgZ2VuZXJhbCBjbGFzcyBjYXNlIGlzIG5vdyBzbWFsbGVyLgoJKGluaXRfcnR0aV9wcm9jZXNzaW5nKTogUGFjayB0aGUgbGF0dGVyIHRocmVlIGZpZWxkcyBvZiBiYXNlX2luZm8KCWludG8gMzIgYml0cy4KCldlZCBBcHIgMTAgMTM6NTA6MTQgMTk5NiAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgoKCSogaW5pdC5jIChleHBhbmRfbWVtYmVyX2luaXQpOiBEb24ndCBkdW1wIGlmIG5hbWUgaXMgTlVMTF9UUkVFLgoKV2VkIEFwciAxMCAxMjo1NjowMiAxOTk2ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiBzZWFyY2guYyAobWFrZV9tZW1vaXplZF90YWJsZV9lbnRyeSk6IFVuZGVmZXIgdGhlIHBvcCwgaWYgbmVjZXNzYXJ5LgoJKHB1c2hfbWVtb2l6ZWRfY29udGV4dCk6IFNwbGl0IG91dCBjb2RlIHRvIHVuZGVmZXIgcG9wX3R5cGVfbGV2ZWwgdG8KCShjbGVhcl9tZW1vaXplZF9jYWNoZSk6IGhlcmUuCgkocG9wX21lbW9pemVkX2NvbnRleHQpOiBXZSBjYW4gb25seSBoYW5kbGUgb25lIGxheWVyIG9mIGRlZmVycmFsIG9mCglwb3BfdHlwZV9sZXZlbCBzbyBjbGVhciB0aGUgY2FjaGUsIGlmIHRoZXJlIHdhcyBhIHByZXZpb3VzIGxldmVsLgoKVHVlIEFwciAgOSAyMzowNjowOSAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBydHRpLmMgKGluaXRfcnR0aV9wcm9jZXNzaW5nKTogQnVpbGQgdXAgYmFzZV9pbmZvX3R5cGVfbm9kZS4KCShleHBhbmRfY2xhc3NfZGVzYyk6IFVzZSBvbmUgcG9pbnRlciB0byBhbiBhcnJheSBvZiBiYXNlX2luZm8KCXN0cnVjdHMsIHBhc3NlZCB1c2luZyBhIENPTlNUUlVDVE9SLgoKVHVlIEFwciAgOSAxNDoyMDo1NyAxOTk2ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiBjbGFzcy5jIChidWlsZF92YmFzZV9wYXRoKTogUmVtb3ZlIGJsb2NrIGV4dGVybiBmb3IKCWZsYWdfYXNzdW1lX25vbm51bGxfb2JqZWN0cyBoZXJlLgoJKGJ1aWxkX3Zmbl9yZWYpOiBTcGxpdCBvdXQgZnVuY3Rpb25hbGl0eSBpbnRvIGJ1aWxkX3Z0YmxfcmVmLgoJKGJ1aWxkX3Z0YmxfcmVmKTogTmV3IHJvdXRpbmUuCgkoYnVpbGRfdnRhYmxlKTogU2V0IHVwIHJ0dGkgaW5mbyBoZXJlLgoJKGFkZF92aXJ0dWFsX2Z1bmN0aW9uKTogTm90ZSBpbiBDTEFTU1RZUEVfUlRUSSB0aGUgYmVzdAoJcGxhY2Ugd2hlcmUgd2UgY2FuIGdldCB0aGUgcnR0aSBwb2ludGVycyBmcm9tIHRvIGF2b2lkIGhhdmluZyB0bwoJc2VhcmNoIGFyb3VuZCBmb3IgYSBwbGFjZS4KCShmaW5pc2hfYmFzZV9zdHJ1Y3QpOiBMaWtld2lzZS4KCShmaW5pc2hfc3RydWN0XzEpOiBMaWtld2lzZS4gIE5ldmVyIGNyZWF0ZSB0b3RhbGx5IG5ldyB2dGFibGVzCgl3aXRoIHRvdGFsbHkgbmV3IHZ0YWJsZSBwb2ludGVycyBmb3IgcnR0aS4gIERpc2FibGUgY29kZSB0byBsYXlvdXQKCXZ0YWJsZSBwb2ludGVycyBiZXR0ZXIgdW50aWwgd2Ugd2FudCB0byBicmVhayBiaW5hcnkKCWNvbXBhdGliaWxpdHkuCgkqIHJ0dGkuYyAoYnVpbGRfaGVhZG9mX3N1Yik6IE5ldyByb3V0aW5lIHRvIGNvbnZlcnQgZG93biB0byBhCglzdWItb2JqZWN0IHRoYXQgaGFzIGFuIHJ0dGkgcG9pbnRlciBpbiB0aGUgdnRhYmxlLgoJKGJ1aWxkX2hlYWRvZik6IFVzZSBpdC4gIEFsc28sIHVzZSBidWlsZF92dGJsX3JlZiBub3cgdG8gYmUgbW9yZQoJbWFpbnRhaW5hYmxlLgoJKGJ1aWxkX2R5bmFtaWNfY2FzdCk6IE1ha2Ugc3VyZSB3ZSBoYXZlIHNhdmVkIGl0LCBpZiB3ZSBuZWVkIHRvLgoJKiBzZWFyY2guYyAoZGZzX2luaXRfdmJhc2VfcG9pbnRlcnMpOiBEaXNhYmxlIGNvZGUgdGhhdCBkZWFscyB3aXRoCglhIG1vcmUgZWZmaWNpZW50IHZ0YWJsZSBsYXlvdXQsIGVuYWJsZSBsYXRlci4KCSogY2FsbC5jIChmbGFnX2Fzc3VtZV9ub25udWxsX29iamVjdHMpOiBNb3ZlZCBkZWNsYXJhdGlvbiB0bwoJKiBjcC10cmVlLmg6IGhlcmUuICBEZWNsYXJlIGJ1aWxkX3Z0YmxfcmVmLgoJKiBwdC5jIChpbnN0YW50aWF0ZV9jbGFzc190ZW1wbGF0ZSk6IFVzZSBOVUxMX1RSRUUgaW5zdGVhZCBvZiAwIGluCglmdW5jdGlvbiBjYWxscyB0aGF0IHdhbnQgYSB0cmVlLgoKVHVlIEFwciAgOSAxMjoxMDoyNiAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBydHRpLmMgKGJ1aWxkX2R5bmFtaWNfY2FzdCk6IEhhbmRsZSBkb3duY2FzdGluZyB0byBYKiBnaXZlbgoJb3RoZXIgWCBzdWJvYmplY3RzIGluIHRoZSBtb3N0IGRlcml2ZWQgdHlwZS4gIEFjay4KCgkqIHJ0dGkuYyAoYnVpbGRfZHluYW1pY19jYXN0KTogTm8gbmVlZCB0byBzdHJpcCBjdi1xdWFscyBoZXJlLAoJZ2V0X3R5cGVpZCB3aWxsIGRvIGl0IGZvciB1cy4KCShnZXRfdHlwZWlkXzEpOiBCcmVhayBvdXQgY2FsbC1idWlsZGluZyBmb3IgZXhwYW5kXypfZGVzYyB0byB1c2UuCgkoZ2V0X3R5cGVpZCk6IENhbGwgaXQuCgkoZXhwYW5kXypfZGVzYyk6IExpa2V3aXNlLgoJKiBkZWNsLmMgKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogRG9uJ3Qgc2V0IFRZUEVfQlVJTFRfSU4gb24gY2hhciAqCglhbmQgdm9pZCAqLgoJKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogTG9zZSBidWlsdGluX3R5cGVfdGRlc2NzIGxvc3NhZ2UuCgkqIGRlY2wyLmMgKGZpbmlzaF92dGFibGVfdmFyZGVjbCk6IFJlbW92ZSBvYnNvbGV0ZSBjb2RlLgoKTW9uIEFwciAgOCAxNzoyMzoyMyAxOTk2ICBCb2IgTWFuc29uICA8bWFuc29uQGNoYXJtZWQuY3lnbnVzLmNvbT4KCgkqIHB0LmMgKHRzdWJzdCk6IFdoZW4gY2FsbGluZyBzZXRfbmVzdGVkX3R5cGVuYW1lLCB1c2UKCVRZUEVfTkVTVEVEX05BTUUgKGN1cnJlbnRfY2xhc3NfdHlwZSkgaW5zdGVhZCBvZgoJY3VycmVudF9jbGFzc19uYW1lLgoKCSogZGVjbC5jIChwdXNoZGVjbCk6IExpa2V3aXNlLgoJKHB1c2hkZWNsX2NsYXNzX2xldmVsKTogTGlrZXdpc2UuCgkoZ3Jva2RlY2xhcmF0b3IpOiBVc2UgTlVMTF9UUkVFIGluc3RlYWQgb2YgMCBpbiB0aGUgY2FsbCB0bwoJc2V0X25lc3RlZF90eXBlbmFtZS4KClN1biBBcHIgIDcgMTA6NDQ6MzEgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogcnR0aS5jIChzeW50aGVzaXplX3RpbmZvX2ZuKTogSGFuZGxlIGFycmF5cy4KCgkqIGNwLXRyZWUuaCAoREVDTF9SRUFMTFlfRVhURVJOKTogTmV3IG1hY3JvLgoKU2F0IEFwciAgNiAxMzo1NjoyNyAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBydHRpLmMgKHRocm93X2JhZF9jYXN0KTogVXNlIGVudHJ5IHBvaW50IF9fdGhyb3dfYmFkX2Nhc3QuCgkoaW5pdF9ydHRpX3Byb2Nlc3NpbmcpOiBMb3NlIGJhZF9jYXN0X3R5cGUuCgkoYnVpbGRfZHluYW1pY19jYXN0KTogVXNlIHRocm93X2JhZF9jYXN0LgoKCSogcnR0aS5jIChzeW50aGVzaXplX3RpbmZvX2ZuKTogSGFuZGxlIGVudW1zIGFuZCBwbWZzLgoKCSogZGVjbDIuYyAoZmluaXNoX2ZpbGUpOiBEb24ndCBzeW50aGVzaXplIGFydGlmaWNpYWwgZnVuY3Rpb25zCgl0aGF0IGFyZSBleHRlcm5hbCBhbmQgbm90IGlubGluZS4KCgkqIHJ0dGkuYyAoZ2V0X3RpbmZvX2ZuKTogSWYgYXRfZW9mLCBjYWxsIGltcG9ydF9leHBvcnRfZGVjbC4KCgkqIGRlY2wyLmMgKGZpbmlzaF9maWxlKTogSGFuZGxlIGhhdmluZyBuZXcgaW5saW5lcyBhZGRlZCB0bwoJc2F2ZWRfaW5saW5lcyBieSBzeW50aGVzaXMuCgoJKiBydHRpLmMgKGdldF9iYWRfY2FzdF9ub2RlKTogRG9uJ3QgcmVxdWlyZSA8dHlwZWluZm8+LgoKRnJpIEFwciAgNSAxNzowMjowOSAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJUlRUSSByZXdyaXRlIHRvIGluaXRpYWxpemUgbm9kZXMgYXMgbmVlZGVkLCBub3QgcmVxdWlyZSB0aGF0Cgl1c2VycyAjaW5jbHVkZSA8dHlwZWluZm8+LCBjb21wbGV0ZSBmdW5jdGlvbmFsaXR5IGFuZCByZWR1Y2Ugd2FzdGVkIAoJc3BhY2UuCgkqIHJ0dGkuYyAoaW5pdF9ydHRpX3Byb2Nlc3NpbmcpOiBOZXcgZm4uCgkoYnVpbGRfdHlwZWlkKTogVGhlIHZ0YWJsZSBlbnRyeSBpcyBub3cgYSBmdW5jdGlvbi4KCShnZXRfdGluZm9fdmFyKTogTmV3IGZuLgoJKGdldF90aW5mb19mbik6IExpa2V3aXNlLgoJKGdldF90eXBlaWQpOiBVc2UgaXQuCgkoYnVpbGRfZHluYW1pY19jYXN0KTogRGVjbGFyZSBhbmQgdXNlIGVudHJ5IHBvaW50IF9fZHluYW1pY19jYXN0LgoJKGJ1aWxkXypfZGVzYyk6IFJlbmFtZSB0byBleHBhbmRfKl9kZXNjIGFuZCByZXdyaXRlIHRvIHVzZSBlbnRyeQoJcG9pbnRzIF9fcnR0aV8qLgoJKGFkZF91bmluc3RhbnRpYXRlZF9kZXNjLCBnZXRfZGVmX3RvX2ZvbGxvdywgYnVpbGRfdF9kZXNjKTogTG9zZS4KCShzeW50aGVzaXplX3RpbmZvX2ZuKTogTmV3IGZuLgoJKiBtZXRob2QuYyAoYnVpbGRfdF9kZXNjX292ZXJsb2FkKTogTG9zZS4KCShidWlsZF9vdmVybG9hZF93aXRoX3R5cGUpOiBNb3JlIGdlbmVyaWMuCgkqIGRlY2wuYyAoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBDYWxsIGluaXRfcnR0aV9wcm9jZXNzaW5nLgoJKiBjbGFzcy5jIChzZXRfcnR0aV9lbnRyeSk6IFVzZSBnZXRfdGluZm9fZm4uCgkqIGRlY2wyLmMgKG1hcmtfdnRhYmxlX2VudHJpZXMpOiBNYXJrIHRoZSBydHRpIGZ1bmN0aW9uLgoJKGZpbmlzaF9wcmV2dGFibGVfdmFyZGVjbCk6IERvbid0IGJ1aWxkX3RfZGVzYy4KCShpbXBvcnRfZXhwb3J0X2RlY2wpOiBIYW5kbGUgdGluZm8gZnVuY3Rpb25zLgoJKGZpbmlzaF9maWxlKTogTGlrZXdpc2UuCgkqIHR5cGVjay5jIChpbmxpbmVfY29udmVyc2lvbik6IE5ldyBmbi4KCShidWlsZF9mdW5jdGlvbl9jYWxsX3JlYWwpOiBVc2UgaXQuCgkqIGNwLXRyZWUuaDogQWRkIGRlY2xzLgoKCSogbWV0aG9kLmMgKGhhY2tfaWRlbnRpZmllcik6IEFsc28gY29udmVydCBjb21wb25lbnRfcmVmcyBmcm9tCglyZWZlcmVuY2VzLgoKCSogbGV4LmMgKGNvbnNfdXBfZGVmYXVsdF9mdW5jdGlvbik6IFVzZSB0aGUgdHlwZSwgbm90IHRoZSBuYW1lLCBpbgoJZGVjbHNwZWNzLgoKCSogZGVjbDIuYyAoaW1wb3J0X2V4cG9ydF92dGFibGUpOiBGaXggd2VhayB2dGFibGVzLgoKRnJpIEFwciAgNSAxMzozMDoxNyAxOTk2ICBCb2IgTWFuc29uICA8bWFuc29uQGNoYXJtZWQuY3lnbnVzLmNvbT4KCgkqIHNlYXJjaC5jIChnZXRfYmFzZV9kaXN0YW5jZV9yZWN1cnNpdmUpOiBGaXggYWNjZXNzIGNoZWNrcyBmb3IKCXByb3RlY3RlZCBiYXNlcy4KCkZyaSBBcHIgIDUgMTE6MDI6MDYgMTk5NiAgQnJlbmRhbiBLZWhvZSAgPGJyZW5kYW5AbGlzYS5jeWdudXMuY29tPgoKCSogY2FsbC5jICh1bmFyeV9jb21wbGV4X2x2YWx1ZSk6IERlbGV0ZSB1bm5lZWRlZCBkZWNsLCBpdCdzIGluCgljcC10cmVlLmguCgkoY29udmVydF9oYXJzaG5lc3MpOiBBZGQgcHJvdG90eXBlcyB3cmFwcGVkIGJ5IFBST1RPLgoJKiBkZWNsMi5jIChncm9rX2Z1bmN0aW9uX2luaXQpOiBMaWtld2lzZS4KCShkb190b3BsZXZlbF91c2luZ19kZWNsKTogQ2hhbmdlIHRvIHZvaWQgcmV0dXJuIHR5cGUuCgkqIGNsYXNzLmMgKGJ1aWxkX3Z0YWJsZV9lbnRyeSk6IFJlbW92ZSBkZWNsIG9mIG1ha2VfdGh1bmsuCgkobWVyZ2Vfb3ZlcnJpZGVzKTogRml4IG9yZGVyIG9mIGFyZyBkZWZpbml0aW9ucy4KCShmaW5pc2hfdnRibHMpOiBMaWtld2lzZS4KCShmaXh1cF92dGFibGVfZGVsdGFzKTogTGlrZXdpc2UuCgkobW9kaWZ5X2FsbF9kaXJlY3RfdnRhYmxlcyk6IExpa2V3aXNlLgoJKG1vZGlmeV9hbGxfaW5kaXJlY3RfdnRhYmxlcyk6IExpa2V3aXNlLgoJKiBzZWFyY2guYyAoZ2V0X2Jhc2VfZGlzdGFuY2VfcmVjdXJzaXZlKTogTGlrZXdpc2UuCgkoZ2V0X2Fic3RyYWN0X3ZpcnR1YWxzXzEpOiBMaWtld2lzZS4KCShmaXh1cF92aXJ0dWFsX3VwY2FzdF9vZmZzZXRzKTogTGlrZXdpc2UuCgkobG9va3VwX2ZuZmllbGRzXzEpOiBBZGQgcHJvdG90eXBlcyB3cmFwcGVkIGJ5IFBST1RPLgoJKiBpbml0LmMgKHBlcmZvcm1fbWVtYmVyX2luaXQpOiBGaXggb3JkZXIgb2YgYXJnIGRlZmluaXRpb25zLgoJKGV4cGFuZF9hZ2dyX2luaXRfMSk6IEFkZCBwcm90b3R5cGVzIHdyYXBwZWQgYnkgUFJPVE8uCgkqIGNwLXRyZWUuaCAobWFrZV90aHVuayk6IEFkZCBkZWNsLgoJKG92ZXJsb2FkX3RlbXBsYXRlX25hbWUsIHB1c2hfdGVtcGxhdGVfZGVjbCk6IEFkZCBkZWNscy4KCShkb190b3BsZXZlbF91c2luZ19kZWNsKTogQ2hhbmdlIHRvIHZvaWQgcmV0dXJuIHR5cGUuCgkodmVjX2JpbmZvX21lbWJlcik6IEFkZCBkZWNsLgoKVGh1IEFwciAgNCAxMzozMzoxMCAxOTk2ICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBsaXNhLmN5Z251cy5jb20+CgoJKiB0eXBlY2suYyAobWFya19hZGRyZXNzYWJsZSwgY29udmVydF9mb3JfYXNzaWdubWVudCwKCWNvbnZlcnRfZm9yX2luaXRpYWxpemF0aW9uLCBwb2ludGVyX2ludF9zdW0sIHBvaW50ZXJfZGlmZiwKCXVuYXJ5X2NvbXBsZXhfbHZhbHVlKTogQWRkIHByb3RvdHlwZXMgd3JhcHBlZCBieSBQUk9UTy4KCShjb252ZXJ0X3NlcXVlbmNlKTogI2lmIDAgZm4gZGVjbCwgc2luY2UgZGVmaW5pdGlvbiBhbHNvIGlzLgoKVGh1IEFwciAgNCAxMTowMDo1MyAxOTk2ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiBydHRpLmMgKGJ1aWxkX2R5bmFtaWNfY2FzdCk6IE1ha2Ugc3VyZSB3ZSBzdHJpcCBxdWFsaWZpZXJzIG9uCgljYXN0IHRvIHBvaW50ZXIgdHlwZXMgZm9yIHR5cGUgc2VhcmNoaW5nLgoKV2VkIEFwciAgMyAxNzoxMDo1NyAxOTk2ICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBsaXNhLmN5Z251cy5jb20+CgoJKiB0eXBlY2suYyAoZ2V0X2RlbHRhX2RpZmZlcmVuY2UpOiBVc2UgY3BfZXJyb3IsIG5vdCBlcnJvciwgaW4gdGhlCgljYXNlIHdoZXJlIEJJTkZPID09IDAuCgpXZWQgQXByICAzIDEyOjAxOjAyIDE5OTYgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIGNhbGwuYyAoYnVpbGRfbWV0aG9kX2NhbGwpOiBGaXggd29yZGluZyBvZiBlcnJvciBtZXNzYWdlcyBzbwoJY29uc3RydWN0b3JzIGNvbWUgb3V0IHJpZ2h0LgoKVHVlIEFwciAgMiAxNjowNjo1OSAxOTk2ICBCb2IgTWFuc29uICA8bWFuc29uQGNoYXJtZWQuY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAocHVzaF9vdmVybG9hZGVkX2RlY2wpOiBEb24ndCB3YXJuIGFib3V0IGhpZGRlbgoJY29uc3RydWN0b3JzIHdoZW4gYm90aCB0aGUgdHlwZSBhbmQgdGhlIGZ1bmN0aW9uIGFyZSBkZWNsYXJlZAoJaW4gYSBzeXN0ZW0gaGVhZGVyIGZpbGUuCgpNb24gQXByICAxIDA5OjAzOjEzIDE5OTYgIEJvYiBNYW5zb24gIDxtYW5zb25AY2hhcm1lZC5jeWdudXMuY29tPgoKCSogY2xhc3MuYyAoZmluaXNoX3N0cnVjdF8xKTogUHJvcGFnYXRlIHRoZSBUWVBFX1BBQ0tFRAoJZmxhZyBmb3IgdGhlIHR5cGUgdG8gdGhlIHR5cGUncyBmaWVsZHMuCgpTYXQgTWFyIDMwIDEyOjE0OjMzIDE5OTYgIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGxpc2EuY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnkgKGNvbXBsZXhfcGFybWxpc3QsIEVMTElQU0VTKTogVGFrZSBvdXQgQVJNLWJhc2VkIHdhcm5pbmcuCgpGcmkgTWFyIDI5IDE1OjUxOjM2IDE5OTYgIEJvYiBNYW5zb24gIDxtYW5zb25AY2hhcm1lZC5jeWdudXMuY29tPgoKCSogY2xhc3MuYyAoYmFzZV9pbmZvLCBmaW5pc2hfYmFzZV9zdHJ1Y3QpOiBSZXBsYWNlIAoJbmVlZHNfdmlydHVhbF9kdG9yIHdpdGggYmFzZV9oYXNfdmlydHVhbC4KCgkoZmluaXNoX3N0cnVjdF8xKTogUmVtb3ZlIHRoZSBvbGQgY29kZSB0aGF0IHRyaWVkIHRvIG1ha2UgZGVmYXVsdAoJZGVzdHJ1Y3RvcnMgdmlydHVhbC4gVXNlIGJhc2VfaGFzX3ZpcnR1YWwgd2hlbiBjaGVja2luZyBpZiB3ZSBuZWVkCgl0byBhZGQgYSB2dGFibGUgZW50cnkgZm9yIHRoZSBydHRpIGNvZGUuCgpGcmkgTWFyIDI5IDE0OjAyOjM2IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHB0LmMgKHB1c2hfdGVtcGxhdGVfZGVjbCk6IENvbXBsYWluIGFib3V0IHRlbXBsYXRlIGRlY2wgd2l0aAoJaW5hcHByb3ByaWF0ZSBkZWNsYXJhdGlvbi4KCkZyaSBNYXIgMjkgMTI6MTU6MzUgMTk5NiAgQm9iIE1hbnNvbiAgPG1hbnNvbkBjaGFybWVkLmN5Z251cy5jb20+CgoJKiB0eXBlY2suYyAoYnVpbGRfeF91bmFyeV9vcCk6IFJlbW92ZSBib2d1cyBjaGVjayBmb3IgdGFraW5nCgl0aGUgYWRkcmVzcyBvZiBhIG1lbWJlciBmdW5jdGlvbi4KCkZyaSBNYXIgMjkgMTE6NTY6MDIgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogcGFyc2UueSAoY29uc3RydWN0b3JfZGVjbGFyYXRvcik6IE9ubHkgcHVzaCB0aGUgY2xhc3MgaWYKCXdlIGFyZSBub3QgYWxyZWFkeSBpbiB0aGUgY2xhc3MuCgpGcmkgTWFyIDI5IDA5OjQxOjAyIDE5OTYgIEplZmZyZXkgQS4gTGF3ICA8bGF3QGN5Z251cy5jb20+CgoJKiBtZXRob2QuYyAoZW1pdF90aHVuayk6IFJlbW92ZSBjdXJyZW50X2NhbGxfaXNfaW5kaXJlY3Qgbm9uc2Vuc2UuCglBZGQgYWRkaXRpb25hbCBhcmd1bWVudCB0byBJTklUX0NVTVVMQVRJVkVfQVJHUy4KClRodSBNYXIgMjggMTY6NDE6MzkgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZGVjbC5jIChzaGFkb3dfdGFnKTogRml4IGVycm9yIGFib3V0IGFub24gdW5pb24gd2l0aCBtZXRob2RzLgoKCSogcGFyc2UueSAoc2VsZl9yZWZlcmVuY2UpOiBPbmx5IGdlbmVyYXRlIGEgc2VsZi1yZWZlcmVuY2UgaWYgdGhpcwoJaXMgYSBub24tdGVtcGxhdGUgY2xhc3MuCgkob3B0LmNvbXBvbmVudF9kZWNsX2xpc3QpOiBPbmx5IHVzZSBpdCBpZiBpdCB3YXMgZ2VuZXJhdGVkLgoKCSogcGFyc2UueSAoY29tcG9uZW50X2RlY2xfMSk6IFVzZSBjb25zdHJ1Y3Rvcl9kZWNsYXJhdG9yLgoJKGZuLmRlZjIpOiBMaWtld2lzZS4KCShub3R5cGVfY29tcG9uZW50X2RlY2xhcmF0b3IwKTogTGlrZXdpc2UuCgpUaHUgTWFyIDI4IDE1OjExOjM1IDE5OTYgIEJvYiBNYW5zb24gIDxtYW5zb25AY2hhcm1lZC5jeWdudXMuY29tPgoKCSogdHlwZWNrLmMgKGJ1aWxkX3hfdW5hcnlfb3ApOiBBZGQgY2hlY2tzIGZvciB0YWtpbmcgdGhlIGFkZHJlc3MKCW9mIGEgVEFSR0VUX0VYUFIgb3Igb2YgYSBtZW1iZXIgZnVuY3Rpb24sIGFuZCBnaXZlIGFwcHJvcHJpYXRlCgl3YXJuaW5ncy4KClRodSBNYXIgMjggMTQ6NDk6MjYgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogcHQuYyAocHJvY2Vzc190ZW1wbGF0ZV9wYXJtKTogQWxsb3cgdGVtcGxhdGUgdHlwZSBwYXJtcyB0byBiZQoJdXNlZCBhcyB0eXBlcyBmb3IgdGVtcGxhdGUgY29uc3QgcGFybXMuCgpXZWQgTWFyIDI3IDE1OjUxOjE5IDE5OTYgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIGluaXQuYyAoZXhwYW5kX3ZlY19pbml0KTogRW5zdXJlIHRoZSBlaCBjbGVhbnVwcyBhcmUgb24gdGhlCglmdW5jdGlvbl9vYnN0YWNrLgoKV2VkIE1hciAyNyAxMDoxNDozMCAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBkZWNsLmMgKGxvb2t1cF9uYW1lX3JlYWwpOiBCZSBldmVuIG1vcmUgcGlja3kgYWJvdXQgdGhlCglhbWJpZ3VvdXMgbG9va3VwIHdhcm5pbmcuCgkoZ3Jva2RlY2xhcmF0b3IpOiBUd2VhayBTQ09QRV9SRUYgY29uc3RydWN0b3IgZGVjbGFyYXRvcnMgaGVyZS4KCSogcGFyc2UueSAoY29uc3RydWN0b3JfZGVjbGFyYXRvcik6IFJhdGhlciB0aGFuIGhlcmUuCgoJKiBwYXJzZS55IChjb25zdHJ1Y3Rvcl9kZWNsYXJhdG9yKTogTmV3IG5vbnRlcm1pbmFsLgoJKGZuLmRlZjEpOiBVc2UgaXQuCgkoZXhwbGljaXRfaW5zdGFudGlhdGlvbik6IExpa2V3aXNlLgoKVHVlIE1hciAyNiAxMzo0MTozMyAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJQWRkIGltcGxpY2l0IGRlY2xhcmF0aW9uIG9mIGNsYXNzIG5hbWUgYXQgY2xhc3Mgc2NvcGUuCgkqIGRlY2wuYyAobG9va3VwX25hbWVfcmVhbCk6IFJlc3RyaWN0IHBlZHdhcm4gYWJvdXQgYW1iaWd1b3VzIGxvb2t1cC4KCSogcGFyc2UueSAoc2VsZl9yZWZlcmVuY2UpOiBOZXcgbm9udGVybWluYWwuCgkob3B0LmNvbXBvbmVudF9kZWNsX2xpc3QpOiBVc2UgaXQuCgkoZm4uZGVmMSk6IEFkZCBuZXN0ZWRfbmFtZV9zcGVjaWZpZXIgdHlwZV9uYW1lIGNhc2VzLgoJKiBjbGFzcy5jIChidWlsZF9zZWxmX3JlZmVyZW5jZSk6IE5ldyBmdW5jdGlvbi4KCShmaW5pc2hfc3RydWN0KTogSGFuZGxlIGFjY2Vzc19kZWZhdWx0IGxhdGVyLCBtb3ZlIHNlbGYtcmVmZXJlbmNlCglkZWNsIHRvIHRoZSBlbmQuCgkqIHB0LmMgKGxvb2t1cF90ZW1wbGF0ZV9jbGFzcyk6IEhhbmRsZSBnZXR0aW5nIGEgVFlQRV9ERUNMLgoJKiBjcC10cmVlLmg6IEFkanVzdC4KCgkqIHB0LmMgKGRvX2Z1bmN0aW9uX2luc3RhbnRpYXRpb24pOiBTZXBhcmF0ZSBoYW5kbGluZyBvZiBtZW1iZXIKCWZ1bmN0aW9ucyBhbmQgbm9uLW1lbWJlciBmdW5jdGlvbnMgcHJvcGVybHkuCgpNb24gTWFyIDI1IDE0OjIzOjIyIDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHB0LmMgKHByb2Nlc3NfdGVtcGxhdGVfcGFybSk6IEltcHJvdmUgZXJyb3IgZm9yICd2b2xhdGlsZSBjbGFzcyBLJy4KCgkqIGNsYXNzLmMgKGZpbmlzaF9zdHJ1Y3RfMSk6IENoZWNrIHRoZSByaWdodCBzbG90IGZvciBkZXN0cnVjdG9ycy4KCgkqIGRlY2wuYyAoc3RhcnRfZW51bSk6IENvbXBsYWluIGFib3V0IGVudW0gdGVtcGxhdGVzLgoKTW9uIE1hciAyNSAxMzoyNTozMSAxOTk2ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiBpbml0LmMgKHJlc29sdmVfb2Zmc2V0X3JlZik6IE9mZnNldCBwb2ludGVycyB0byBtZW1iZXIgZGF0YSBieSBvbmUuCgkqIHR5cGVjay5jICh1bmFyeV9jb21wbGV4X2x2YWx1ZSk6IExpa2V3aXNlLgoKTW9uIE1hciAyNSAxMzozMDo0MiAxOTk2ICBCb2IgTWFuc29uICA8bWFuc29uQGNoYXJtZWQuY3lnbnVzLmNvbT4KCgkqIHR5cGVjay5jIChjX2V4cGFuZF9yZXR1cm4pOiBDaGVjayBmb3IgYSByZXR1cm5lZCBsb2NhbAoJYXJyYXkgbmFtZSwgc2ltaWxhciB0byB0aGUgY2hlY2sgZm9yIGFuIEFERFJfRVhQUi4KCk1vbiBNYXIgMjUgMTM6MDc6MTkgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZGVjbC5jIChjcF9maW5pc2hfZGVjbCk6IERvbid0IGJ1aWxkIGNsZWFudXBzIGZvciBzdGF0aWMKCXZhcmlhYmxlcyBoZXJlLgoKRnJpIE1hciAyMiAxNzo1Nzo1NSAxOTk2ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiB0eXBlY2suYyAoYnVpbGRfbW9kaWZ5X2V4cHIpOiBGaXggZXJyb3IgbWVzc2FnZXMgdG8gYmUgbW9yZQoJYWNjdXJhdGUuCgkqIGNwLXRyZWUuaCAoYXNzb3BfYXNfc3RyaW5nKTogUGFyYWxsZWwgdG8gb3BfYXNfc3RyaW5nLCBidXQgZm9yCglhc3NpZ25tZW50IG9wZXJhdG9ycy4KCSogZXJyb3IuYyAoYXNzb3BfYXNfc3RyaW5nKTogTGlrZXdpc2UuICBBZGQgc3VwcG9ydCBmb3IgYCVRJyBmb3IKCWFzc2lnbm1lbnQgb3BlcmF0b3JzLgoKRnJpIE1hciAyMiAxMzo0ODoyOSAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBkZWNsLmMgKGdyb2tkZWNsYXJhdG9yKTogQ2FsbCBiYWRfc3BlY2lmaWVycyBmb3IgdHlwZWRlZnMuICBBbHNvCglnaXZlIGFuIGVycm9yIGlmIGluaXRpYWxpemVkLiAgUGVkd2FybiBhYm91dCBuZXN0ZWQgdHlwZSB3aXRoIHRoZQoJc2FtZSBuYW1lIGFzIGl0cyBlbmNsb3NpbmcgY2xhc3MuCgoJKiBwdC5jICh0c3Vic3QsIGNhc2UgVFlQRV9ERUNMKTogU2V0IERFQ0xfQ09OVEVYVC4KCgkqIHR5cGVjay5jIChyZXF1aXJlX2NvbXBsZXRlX3R5cGUpOiBCZSBzdXJlIHRvIGluc3RhbnRpYXRlIHRoZQoJTUFJTl9WQVJJQU5UIG9mIHRoZSB0eXBlLgoKCSogZGVjbDIuYyAoZmluaXNoX2ZpbGUpOiBJbnN0YW50aWF0ZSBwZW5kaW5nIHRlbXBsYXRlcyBiZWZvcmUKCXByb2Nlc3Npbmcgc3RhdGljIGNvbnN0cnVjdG9ycyBhbmQgZGVzdHJ1Y3RvcnMuCgoJKiBwdC5jIChpbnN0YW50aWF0ZV9kZWNsKTogRG9uJ3QgaW5zdGFudGlhdGUgZnVuY3Rpb25zIGF0IHRvcGxldmVsCgl1bmxlc3MgYXRfZW9mLgoKRnJpIE1hciAyMiAwOTozMDoxNyAxOTk2ICBCb2IgTWFuc29uICA8bWFuc29uQGJlYXV0eS5jeWdudXMuY29tPgoKCSogZGVjbDIuYyAoZGVsZXRlX3Nhbml0eSk6IElmIGVycm9yX21hcmtfbm9kZSBpcyBwYXNzZWQKCWluIGFzIGFuIGV4cHJlc3Npb24sIHF1aXQgd2hpbGUgd2UncmUgYWhlYWQuCgoJKiBkZWNsLmMgKGdyb2tkZWNsYXJhdG9yKTogR2l2ZSBhbiBlcnJvciBtZXNzYWdlIGlmIGBmcmllbmQnCglpcyBjb21iaW5lZCB3aXRoIGFueSBzdG9yYWdlIGNsYXNzIHNwZWNpZmllcnMuCgpXZWQgTWFyIDIwIDE0OjUxOjU1IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnkgKG5hbWVkX2NvbXBsZXhfY2xhc3NfaGVhZF9zYW5zX2Jhc2V0eXBlKTogRG9uJ3QgY3Jhc2ggb24KCWRlZmluaXRpb24gb2Ygbm9uZXhpc3RlbnQgbmVzdGVkIHR5cGUuCgoJKiBlcnJvci5jIChkdW1wX2RlY2wsIGNhc2UgVFlQRV9ERUNMKTogRml4IGRlY2lzaW9uIGZvciB3aGV0aGVyIG9yCglub3QgdG8gc2F5ICd0eXBlZGVmJy4KCldlZCBNYXIgMjAgMDA6MTE6NDcgMTk5NiAgQnJlbmRhbiBLZWhvZSAgPGJyZW5kYW5AbGlzYS5jeWdudXMuY29tPgoKCSogY3AtdHJlZS5oIChzdHJ1Y3QgbGFuZ190eXBlKTogTWFrZSBzZWFyY2hfc2xvdCBhIHRyZWUsIG5vdCBhIGNoYXIqLgoJKiBzZWFyY2guYyAoZGZzX3dhbGssIGRmc19pbml0X3ZiYXNlX3BvaW50ZXJzLAoJZXhwYW5kX3VwY2FzdF9maXh1cHMpOiBSZW1vdmUgY2FzdCBvZiBDTEFTU1RZUEVfU0VBUkNIX1NMT1QuCgkoZGZzX2ZpbmRfdmJhc2VzKTogUmVtb3ZlIGNhc3QgZm9yIENMQVNTVFlQRV9TRUFSQ0hfU0xPVCBpbml0LgoKVHVlIE1hciAxOSAxNzo1NjowMyAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBleGNlcHQuYyAoYnVpbGRfdGhyb3cpOiBTdXBwb3J0IG1pbmltYWwgcGFyc2UuCgkqIHB0LmMgKHRzdWJzdF9jb3B5KTogU3VwcG9ydCBUSFJPV19FWFBSLgoJKiBkZWNsMi5jIChidWlsZF9leHByX2Zyb21fdHJlZSk6IExpa2V3aXNlLgoKCSogcHQuYyAobWFuZ2xlX2NsYXNzX25hbWVfZm9yX3RlbXBsYXRlKTogQWx3YXlzIGFsbG9jYXRlCglzY3JhdGNoX2ZpcnN0b2JqLgoKVHVlIE1hciAxOSAxNjozNDozMSAxOTk2ICBCb2IgTWFuc29uICA8bWFuc29uQGJlYXV0eS5jeWdudXMuY29tPgoKCSogY3Z0LmMgKGNwX2NvbnZlcnRfdG9fcG9pbnRlcik6IEdpdmUgYW4gYXBwcm9wcmlhdGUgZXJyb3IKCXdoZW4gdHJ5aW5nIHRvIGNhc3QgZnJvbSBhbiBpbmNvbXBsZXRlIHR5cGUuCgpUdWUgTWFyIDE5IDE2OjAwOjMzIDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHB0LmMgKGluc3RhbnRpYXRlX2NsYXNzX3RlbXBsYXRlKTogRG9uJ3QgYm90aGVyIHNldHRpbmcgdXAKCUNMQVNTVFlQRV9UQUdTIGV4cGxpY2l0bHksIGFzIHRoZSBuZXN0ZWQgdHlwZXMgd2lsbCBhZGQKCXRoZW1zZWx2ZXMuCgpUdWUgTWFyIDE5IDE1OjQ4OjQzIDE5OTYgIEJvYiBNYW5zb24gIDxtYW5zb25AYmVhdXR5LmN5Z251cy5jb20+CgoJKiBkZWNsLmMgKHNoYWRvd190YWcpOiBSZW1vdmUgb2xkIGVycm9yIGNoZWNrIGZvciB1c2FnZSBvZgoJYW4gZW51bSB3aXRob3V0IGEgcHJldmlvdXMgZGVjbGFyYXRpb24uCgkoeHJlZl90YWcpOiBBZGQgZXJyb3IgbWVzc2FnZSBhYm91dCB1c2FnZSBvZiBlbnVtcyB3aXRob3V0IGEKCXByZXZpb3VzIGRlY2xhcmF0aW9uLgoKVHVlIE1hciAxOSAwOToyMTozNSAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBsZXguYyAoZG9faWRlbnRpZmllcik6IE9ubHkgZG8gbmFtZSBjb25zaXN0ZW5jeSBjaGVjayBpZiB3ZSdyZQoJcGFyc2luZy4KCgkqIHB0LmMgKHB1c2hfdGVtcGxhdGVfZGVjbCk6IERvbid0IGNyYXNoIGlmIHdlIGdldCBhIG1lbWJlciBkZWZuCgl0aGF0IGRvZXNuJ3QgbWF0Y2guCgoJKiBkZWNsLmMgKHhyZWZfdGFnX2Zyb21fdHlwZSk6IE5ldyBmdW5jdGlvbiB0byBkbyBhbiB4cmVmIHdpdGhvdXQKCWFsd2F5cyBoYXZpbmcgdG8gZmlndXJlIG91dCBjb2RlX3R5cGVfbm9kZS4KCSogY3AtdHJlZS5oOiBEZWNsYXJlIGl0LgoJKiBwdC5jIChpbnN0YW50aWF0ZV9jbGFzc190ZW1wbGF0ZSk6IFVzZSBpdCBmb3IgZnJpZW5kIGNsYXNzZXMuCgkobG9va3VwX3RlbXBsYXRlX2NsYXNzKTogVXNlIGl0LgoKCSogdHlwZWNrMi5jIChidWlsZF9mdW5jdGlvbmFsX2Nhc3QpOiBQdWxsIG91dCBhIHNpbmdsZSBwYXJtIGJlZm9yZQoJcGFzc2luZyBpdCB0byBidWlsZF9jX2Nhc3QuCgpUdWUgTWFyIDE5IDA5OjA3OjE1IDE5OTYgIEJvYiBNYW5zb24gIDxtYW5zb25AYmVhdXR5LmN5Z251cy5jb20+CgoJKiBleHByLmMgKGRvX2Nhc2UpOiBHaXZlIGFuIGVycm9yIG1lc3NhZ2UgaWYgYSBwb2ludGVyIGlzCglnaXZlbiBhcyBhIGNhc2UgdmFsdWUuCgpNb24gTWFyIDE4IDIxOjU3OjU0IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHR5cGVjay5jIChidWlsZF9jX2Nhc3QpOiBEb24ndCBwdWxsIHNpbmdsZSBURU1QTEFURV9ERUNMIG91dCBvZgoJYW4gb3ZlcmxvYWQgbGlzdC4KCgkqIGxleC5jIChjb25zX3VwX2RlZmF1bHRfZnVuY3Rpb24pOiBSZWFsbHksIG5vdywgaW50ZXJmYWNlIGhhY2tlcnkKCWRvZXMgbm90IGFwcGx5IHRvIHN5bnRoZXNpemVkIG1ldGhvZHMuCgpNb24gTWFyIDE4IDE4OjIwOjU3IDE5OTYgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIGNhbGwuYyAoYnVpbGRfbWV0aG9kX2NhbGwpOiBDdG9ycyBhbmQgZHRvcnMgbm93IGhhdmUgc3BlY2lhbCBuYW1lcwoJd2l0aCByZXNwZWN0IHRvIGxvb2t1cHMuCgkqIGNsYXNzLmMgKGFkZF9tZXRob2QpOiBMaWtld2lzZS4KCShncm93X21ldGhvZCk6IExpa2V3aXNlLgoJKGZpbmlzaF9zdHJ1Y3RfbWV0aG9kcyk6IExpa2V3aXNlLgoJKHdhcm5faGlkZGVuKTogTGlrZXdpc2UuCgkoZmluaXNoX3N0cnVjdF8xKTogTGlrZXdpc2UuCgkqIGN2dC5jIChjb252ZXJ0X3RvX3JlZmVyZW5jZSk6IExpa2V3aXNlLgoJKGNvbnZlcnRfdG9fYWdncik6IExpa2V3aXNlLgoJKGNwX2NvbnZlcnQpOiBMaWtld2lzZS4KCSogZGVjbDIuYyAoY2hlY2tfY2xhc3Nmbik6IExpa2V3aXNlLgoJKiBpbml0LmMgKGV4cGFuZF9tZW1iZXJfaW5pdCk6IExpa2V3aXNlLgoJKGV4cGFuZF9kZWZhdWx0X2luaXQpOiBMaWtld2lzZS4KCShleHBhbmRfYWdncl9pbml0XzEpOiBMaWtld2lzZS4KCShidWlsZF9vZmZzZXRfcmVmKTogTGlrZXdpc2UuCgkoYnVpbGRfbmV3KTogTGlrZXdpc2UuCgkoYnVpbGRfZGVsZXRlKTogTGlrZXdpc2UuCgkqIGxleC5jIChkb19pbmxpbmVfZnVuY3Rpb25faGFpcik6IExpa2V3aXNlLgoJKiBzZWFyY2guYyAobG9va3VwX2ZpZWxkXzEpOiBMaWtld2lzZS4KCShsb29rdXBfZm5maWVsZHNfaGVyZSk6IExpa2V3aXNlLgoJKGxvb2t1cF9maWVsZCk6IExpa2V3aXNlLgoJKGxvb2t1cF9mbmZpZWxkcyk6IExpa2V3aXNlLgoJKGdldF92aXJ0dWFsX2Rlc3RydWN0b3IpOiBMaWtld2lzZS4KCShkZnNfZGVidWdfbWFyayk6IExpa2V3aXNlLgoJKGRmc19wdXNoZGVjbHMpOiBMaWtld2lzZS4KCShkZnNfY29tcHJlc3NfZGVjbHMpOiBMaWtld2lzZS4KCSogdHJlZS5jIChsYXlvdXRfYmFzZXR5cGVzKTogTGlrZXdpc2UuCgkqIHR5cGVjay5jIChidWlsZF9jb21wb25lbnRfcmVmKTogTGlrZXdpc2UuCgkoYnVpbGRfeF9mdW5jdGlvbl9jYWxsKTogTGlrZXdpc2UuCgkoYnVpbGRfbW9kaWZ5X2V4cHIpOiBMaWtld2lzZS4KCShjb252ZXJ0X2Zvcl9pbml0aWFsaXphdGlvbik6IExpa2V3aXNlLgoJKGJ1aWxkX2Z1bmN0aW9uYWxfY2FzdCk6IExpa2V3aXNlLgoJKiBjcC10cmVlLmggKENMQVNTVFlQRV9GSVJTVF9DT05WRVJTSU9OKTogTGlrZXdpc2UuCgkoQ1RPUl9OQU1FKTogTmV3LgoJKERUT1JfTkFNRSk6IE5ldy4KCSogZGVjbC5jIChjdG9yX2lkZW50aWZpZXIpOiBOZXcuCgkoZHRvcl9pZGVudGlmaWVyKTogTmV3LgoJKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogU2V0IHRoZW0uCgpNb24gTWFyIDE4IDE4OjAwOjUxIDE5OTYgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIHR5cGVjay5jIChidWlsZF9jb21wb25lbnRfcmVmKTogRG9uJ3QgZ2V0IGNvbmZ1c2VkIGJ5IGZpZWxkcyB3aG9zZQoJY29udGV4dCBoYXMgbm8gdHlwZSBuYW1lLCBsaWtlIHBvaW50ZXIgdG8gbWVtYmVyIGZ1bmN0aW9ucy4KCk1vbiBNYXIgMTggMTM6MTk6MDMgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZGVjbC5jIChncm9rZGVjbGFyYXRvcik6IEhhbmRsZSB0eXBlZGVmIHdpdGhvdXQgZGVjbGFyYXRvci4KCgkqIHB0LmMgKHRzdWJzdCk6IEhhbmRsZSBTQ09QRV9SRUYgaW4gZGVjbGFyYXRvci4KCgkqIHBhcnNlLnkgKGJhZF9wYXJtKTogQ2F0Y2ggYW5vdGhlciBjYXNlIG9mIG1pc3NpbmcgYHR5cGVuYW1lJy4KCgkqIGxleC5jICh5eXByaW50KTogSGFuZGxlIFRZUEVfREVDTHMuCgoJKiBkZWNsLmMgKHN0YXJ0X2Z1bmN0aW9uKTogRG9uJ3QgdHJ5IHRvIGJlIGNsZXZlci4KCgkqIGxleC5jOiBMb3NlIGNvbXBpbGVyX2Vycm9yX3dpdGhfZGVjbC4KCSogdHlwZWNrMi5jOiBMb3NlIGVycm9yX3dpdGhfYWdncl90eXBlLgoJKGluY29tcGxldGVfdHlwZV9lcnJvcik6IFVzZSBjcF8qIGluc3RlYWQgb2Ygb2xkIGZ1bmN0aW9ucy4KCShyZWFkb25seV9lcnJvcik6IExpa2V3aXNlLgoJKiB0eXBlY2suYyAoY29udmVydF9hcmd1bWVudHMpOiBMaWtld2lzZS4KCSogc2VhcmNoLmMgKGxvb2t1cF9uZXN0ZWRfZmllbGQpOiBMaWtld2lzZS4KCSogbWV0aG9kLmMgKG1ha2VfdGh1bmspOiBMaWtld2lzZS4KCSogZGVjbC5jIChncm9rcGFybXMpOiBMaWtld2lzZS4KCSogY3AtdHJlZS5oOiBVcGRhdGUuCgoJKiB0cmVlLmMgKG1pbl90cmVlX2NvbnMpOiBDYWxsIGNvcHlfdG9fcGVybWFuZW50IGZvciB0aGUgcHVycG9zZQoJYW5kIHZhbHVlLgoKTW9uIE1hciAxOCAxMToyNTo1MiAxOTk2ICBCb2IgTWFuc29uICA8bWFuc29uQGJlYXV0eS5jeWdudXMuY29tPgoKCSogbWV0aG9kLmMgKGJ1aWxkX29wZm5jYWxsKTogV2hlbiBkZWxldGluZyBhIHBvaW50ZXIgdG8gYW4KCWFycmF5LCBidWlsZCBhIG5ldyBwb2ludGVyIHRvIHRoZSB0cmVlIHBhc3QgYW55IEFSUkFZX1RZUEUKCW5vZGVzLgoKTW9uIE1hciAxOCAxMDoxMTo0NiAxOTk2ICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBsaXNhLmN5Z251cy5jb20+CgoJKiBkZWNsLmMgKGxvb2t1cF9uYW1lX3JlYWwpOiBJbml0aWFsaXplIGxvY2FsIHZhciBUWVBFIHRvIE5VTExfVFJFRS4KCkZyaSBNYXIgMTUgMTE6MDM6NTcgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogcHQuYyAoaW5zdGFudGlhdGVfZGVjbCk6IE9ubHkgY2FsbCBpbXBvcnRfZXhwb3J0X2RlY2wgaWYgYXRfZW9mCglhbmQgISBERUNMX0lOTElORS4KCgkqIGRlY2wuYyAoZmluaXNoX2Z1bmN0aW9uKTogRG9uJ3Qgc2V0IG5lc3RlZCBiYXNlZCBvbgoJaGFja19kZWNsX2Z1bmN0aW9uX2NvbnRleHQuCgkqIHBhcnNlLnkgKGZ1bmN0aW9uX3RyeV9ibG9jayk6IENoZWNrIGZvciBuZXN0ZWQgZnVuY3Rpb24uCgkocGVuZGluZ19pbmxpbmVzKTogTGlrZXdpc2UuCgoJKiBkZWNsMi5jIChidWlsZF9leHByX2Zyb21fdHJlZSk6IElmIGEgdW5hcnkgb3AgYWxyZWFkeSBoYXMgYQoJdHlwZSwganVzdCByZXR1cm4gaXQuCgoJKiBkZWNsMi5jIChmaW5pc2hfcHJldnRhYmxlX3ZhcmRlY2wpOiBVc2UgQURKVVNUX1ZUQUJMRV9MSU5LQUdFLgoKCSogZGVjbDIuYyAod2Fsa192dGFibGVzKTogdmFyZGVjbF9mbiByZXR1cm5zIGludDsgcmV0dXJuIDEgaWYgaXQgZG9lcy4KCShmaW5pc2hfZmlsZSk6IENoZWNrIHRoZSByZXR1cm4gdmFsdWUgb2Ygd2Fsa192dGFibGVzLgoJKGZpbmlzaF9wcmV2dGFibGVfdmFyZGVjbCk6IFJldHVybiBpbnQuCgkoZmluaXNoX3Z0YWJsZV92YXJkZWNsKTogTGlrZXdpc2UuCgkocHJ1bmVfdnRhYmxlX3ZhcmRlY2wpOiBMaWtld2lzZS4KCSogbGV4LmMgKHNldF92YXJkZWNsX2ludGVyZmFjZV9pbmZvKTogTGlrZXdpc2UuCgkqIGNwLXRyZWUuaDogQWRqdXN0IHJldHVybiB0eXBlcy4KCgkqIGNsYXNzLmMgKGRlbGV0ZV9kdXBsaWNhdGVfZmllbGRzXzEpOiBEb24ndCBjb21wbGFpbiBhYm91dAoJZHVwbGljYXRlIG5lc3RlZCB0eXBlcyBpZiB0aGV5J3JlIHRoZSBzYW1lIHR5cGUuCgkoZmluaXNoX3N0cnVjdCk6IFJlbW92ZSBjaGVjayBmb3IgZHVwbGljYXRlLgoJKiBkZWNsMi5jIChncm9rZmllbGQpOiBEb24ndCBjaGVjayBmb3IgdHlwZWRlZiBvZiBhbm9ueW1vdXMgdHlwZS4KClRodSBNYXIgMTQgMTA6MDA6MTkgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY3AtdHJlZS5oOiBMb3NlIFNJR05BVFVSRV9HUk9LS0lOR19UWVBFREVGLgoKCSogZGVjbC5jIChncm9rZGVjbGFyYXRvcik6IExvc2Ugc3BlY2lhbCBoYW5kbGluZyBvZiBjbGFzcy1sZXZlbAoJdHlwZWRlZi4gIExvc2UgU0lHTkFUVVJFX0dST0tLSU5HX1RZUEVERUYuICBTZXQKCVNJR05BVFVSRV9IQVNfT1BBUVVFX1RZUEVERUNMUyBsYXRlci4KCgkqIGN2dC5jIChjb252ZXJ0X3BvaW50ZXJfdG9fcmVhbCk6IFJldGFpbiBjdi1xdWFscyBpbiBjb252ZXJzaW9uLgoKCSogcHQuYyAodHN1YnN0X2NvcHkpOiBTdHJpcCBjdi1xdWFscyBmcm9tIGRlc3RydWN0b3IgbmFtZSB0eXBlcy4KCgkqIHNlYXJjaC5jIChjb21wdXRlX2FjY2Vzcyk6IEZpeCBoYW5kbGluZyBvZiBhbm9ueW1vdXMgdW5pb24KCW1lbWJlcnMuCgkqIGNsYXNzLmMgKGZpbmlzaF9zdHJ1Y3RfYW5vbik6IFByb3BhZ2F0ZSBUUkVFX3tQUklWQVRFLFBST1RFQ1RFRH0KCWZyb20gYW5vbnltb3VzIHVuaW9ucyB0byB0aGVpciBtZW1iZXJzLgoKCSogdHlwZWNrLmMgKGJ1aWxkX3hfZnVuY3Rpb25fY2FsbCk6IEZvciBzdGF0aWMgbWVtYmVyIGZ1bmN0aW9ucywKCWhhbmQgb2ZmIHRvIGJ1aWxkX21lbWJlcl9jYWxsLgoKV2VkIE1hciAxMyAxNDowMzozNCAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiB0eXBlY2suYyAoYnVpbGRfY29tcG9uZW50X3JlZik6IEhhbmRsZSBPRkZTRVRfUkVGcy4KCgkqIGluaXQuYyAoZXhwYW5kX3ZlY19pbml0KTogRml4IGluaXQgPT0gMCBjYXNlLgoKVHVlIE1hciAxMiAxNDozNjowMiAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBpbml0LmMgKGJ1aWxkX25ldyk6IFBlZHdhcm4gYWJvdXQgaW5pdCBhbmQgYXJyYXkgbmV3LgoJKGV4cGFuZF92ZWNfaW5pdCk6IEhhbmRsZSBsaXN0cywgdXNlIGNvbnZlcnRfZm9yX2luaXRpYWxpemF0aW9uLgoKCSogdHlwZWNrLmMgKGNvbnZlcnRfZm9yX2luaXRpYWxpemF0aW9uKTogUGFzcyBMT09LVVBfTk9fQ09OVkVSU0lPTgoJd2hlbiBjb252ZXJ0aW5nIHRvIGFuIGFnZ3JlZ2F0ZSB0eXBlLgoJKiBjdnQuYyAoY3BfY29udmVydCk6IFBhc3MgaXQgdGhyb3VnaC4KCgkqIHR5cGVjay5jIChidWlsZF9jb25kaXRpb25hbF9leHByKTogSGFuZGxlIHVzZXItZGVmaW5lZAoJY29udmVyc2lvbnMgdG8gc2xpZ2h0bHkgZGlmZmVyZW50IHR5cGVzLgoKCSogZGVjbC5jIChncm9rZGVjbGFyYXRvcik6IEZvcmNlIGFuIGFycmF5IHR5cGUgaW4gYSBwYXJtIHRvIGJlCglwZXJtYW5lbnQuCgoJKiBkZWNsMi5jIChkb191c2luZ19kaXJlY3RpdmUpOiBTb3JyeS4KCShkb19uYW1lc3BhY2VfYWxpYXMpOiBMaWtld2lzZS4KCSogbGV4LmMgKHJlYWxfeXlsZXgpOiBXYXJuIGFib3V0IHVzaW5nIHRoZSBgbmFtZXNwYWNlJyBrZXl3b3JkLgoKU3VuIE1hciAxMCAyMjoyNjowOSAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBwYXJzZS55IChkYXRhZGVmKTogTW92ZSBjYWxsIHRvIG5vdGVfbGlzdF9nb3Rfc2VtaWNvbG9uIHVwLgoKRnJpIE1hciAgOCAxMTo0NzoyNiAxOTk2ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiB0cmVlLmMgKHVuc2F2ZV9leHByKTogRG9uJ3QgdW5zYXZlLCBVTlNBVkVfRVhQUnMuCgpGcmkgTWFyICA4IDExOjI5OjA2IDE5OTYgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAoY3BfZmluaXNoX2RlY2wpOiBUaGUgZXhjZXB0aW9uIHJlZ2lvbnMgaGF2ZSB0byBiZQoJbmVzdGVkLCBub3Qgb3ZlcmxhcHBpbmcuICBXZSBzdGFydCB0aGUgZXhjZXB0aW9uIHJlZ2lvbiBmb3IgYQoJZGVjbCwgYWZ0ZXIgaXQgaGFzIGJlZW4gZnVsbHkgYnVpbHQsIGFuZCBhbGwgdGVtcG9yYXJpZXMgZm9yIGl0CgloYXZlIGJlZW4gY2xlYW5lZCB1cC4KClRodSBNYXIgIDcgMTc6NDY6MDYgMTk5NiAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgoKCSogdHJlZS5jICh2ZWNfYmluZm9fbWVtYmVyKTogRG9uJ3QgY29yZSBkdW1wIGlmIHdlIGhhdmUgbm8gYmFzZXMuCgpUaHUgTWFyICA3IDE0OjExOjQ5IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHRyZWUuZGVmOiBBZGQgUkVUVVJOX0lOSVQuCgkqIHB0LmMgKGluc3RhbnRpYXRlX2RlY2wpOiBIYW5kbGUgUkVUVVJOX0lOSVQuCgkqIGRlY2wuYyAoc3RvcmVfcmV0dXJuX2luaXQpOiBIYW5kbGUgbWluaW1hbF9wYXJzZV9tb2RlLgoKCSogdHJlZS5jIChjcF9idWlsZF90eXBlX3ZhcmlhbnQpOiBKdXN0IHJldHVybiBhbiBlcnJvcl9tYXJrX25vZGUuCgkqIGRlY2wuYyAobWFrZV90eXBlbmFtZV90eXBlKTogRG9uJ3QgdHJ5IHRvIGdldCB0aGUgZmlsZSBhbmQgbGluZQoJb2YgYW4gaWRlbnRpZmllci4KCSogdHlwZWNrLmMgKGNvbXB0eXBlcyk6IEhhbmRsZSBUWVBFTkFNRV9UWVBFLgoKV2VkIE1hciAgNiAxODo0Nzo1MCAxOTk2ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAa2FsZXNzaW4uY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAocG9wbGV2ZWwpOiBNYWtlIHN1cmUgd2UgY2xlYXIgb3V0IGFuZCByZXN0b3JlIG9sZCBsb2NhbAoJbm9uLVZBUl9ERUNMIHZhbHVlcyBieSBkZWZhdWx0IHdoZW4gdGhleSBnbyBvdXQgb2Ygc2NvcGUuCgpXZWQgTWFyICA2IDA5OjU3OjM2IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIG1ldGhvZC5jIChidWlsZF9vdmVybG9hZF92YWx1ZSk6IFVzZSBERUNMX0FTU0VNQkxFUl9OQU1FIGluCglyZWZlcnJpbmcgdG8gYWRkcmVzc2VzIG9mIHZhcmlhYmxlcyBhbmQgZnVuY3Rpb25zLgoKCSogZXJyb3IuYyAoZHVtcF9leHByKTogU3VwcG9ydCBTSVpFT0ZfRVhQUi4KCgkqIGluaXQuYyAoZG9fZnJpZW5kKTogVXNlIHRoZSByZXR1cm4gdmFsdWUgb2YgY2hlY2tfY2xhc3Nmbi4KCgkqIHR5cGVjay5jIChjb252ZXJ0X2FyZ3VtZW50cyk6IENhbGwgY29tcGxldGVfdHlwZS4KCgkqIG1ldGhvZC5jIChoYWNrX2lkZW50aWZpZXIpOiBBZnRlciBnaXZpbmcgYW4gZXJyb3IsIHNldCB2YWx1ZSB0bwoJZXJyb3JfbWFya19ub2RlLgoKVHVlIE1hciAgNSAxNjowMDoxNSAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiB0cmVlLmMgKGhhY2tfZGVjbF9mdW5jdGlvbl9jb250ZXh0KTogS2x1ZGdlIGFyb3VuZCBERUNMX0NPTlRFWFQKCWxvc3NhZ2UgZm9yIGxvY2FsIGNsYXNzZXMuCgkqIGNwLXRyZWUuaDogRGVjbGFyZSBpdC4KCSogZGVjbC5jIChsb29rdXBfbmFtZV9yZWFsKTogRXZpbCwgcGFpbmZ1bCBoYWNrIGZvciBsb2NhbCBjbGFzc2VzLgoJKGdyb2tmbmRlY2wpOiBTZXQgREVDTF9DTEFTU19DT05URVhUIGFuZCBERUNMX05PX1NUQVRJQ19DSEFJTiBoZXJlLgoJVXNlIGhhY2tfZGVjbF9mdW5jdGlvbl9jb250ZXh0LgoJKGdyb2tkZWNsYXJhdG9yKTogRG9uJ3Qgc2V0IERFQ0xfTk9fU1RBVElDX0NIQUlOIGhlcmUuCgkoc3RhcnRfZnVuY3Rpb24pOiBVc2UgaGFja19kZWNsX2Z1bmN0aW9uX2NvbnRleHQuCgkoZmluaXNoX2Z1bmN0aW9uKTogTGlrZXdpc2UuCgkqIG1ldGhvZC5jIChzeW50aGVzaXplX21ldGhvZCk6IExpa2V3aXNlLgoJKiBsZXguYyAocHJvY2Vzc19uZXh0X2lubGluZSk6IExpa2V3aXNlLgoJKGRvX3BlbmRpbmdfaW5saW5lcyk6IExpa2V3aXNlLgoJKiBkZWNsMi5jIChmaW5pc2hfZmlsZSk6IFVuc2V0IERFQ0xfU1RBVElDX0ZVTkNUSU9OX1Agd2hlbiB3ZSdyZQoJZG9uZSB3aXRoIGl0LgoKTW9uIE1hciAgNCAyMjozODozOSAxOTk2ICBHZXJhbGQgQmF1bWdhcnRuZXIgIDxnYkBhbGV4YW5kZXIuY3MucHVyZHVlLmVkdT4KCgkqIHNpZy5jIChidWlsZF9zaWduYXR1cmVfcG9pbnRlcl9vcl9yZWZlcmVuY2VfdHlwZSk6IEFsaWduCglzaWduYXR1cmUgcG9pbnRlcnMvcmVmZXJlbmNlcyBvbiA4LWJ5dGUgYm91bmRhcmllcyBzbyB0aGV5IGNhbiBiZQoJZ3JhYmJlZCAyIHdvcmRzIGF0IGEgdGltZSBvbiBhIFNwYXJjLgoKVHVlIE1hciAgNSAxMDoyMTowMSAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBtZXRob2QuYyAoaGFja19pZGVudGlmaWVyKTogUmVxdWlyaW5nIGEgc3RhdGljIGNoYWluIGlzIG5vdyBhCgloYXJkIGVycm9yLgoJKiBkZWNsLmMgKGdyb2tkZWNsYXJhdG9yKTogU2V0IERFQ0xfTk9fU1RBVElDX0NIQUlOIG9uIG5lc3RlZAoJZnVuY3Rpb25zLgoKTW9uIE1hciAgNCAyMDowMzozMyAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBpbml0LmMgKGJ1aWxkX29mZnNldF9yZWYpOiBDYWxsIGNvbXBsZXRlX3R5cGUuCgoJKiBkZWNsLmMgKHBvcF9mcm9tX3RvcF9sZXZlbCk6IEFsd2F5cyBwb3AgcHJldmlvdXNfY2xhc3NfdHlwZS4KCgkqIHBhcnNlLnk6IEhhbmRsZSBtdWx0aXBsZSBkZWNscyBpbiBhIGZvci1pbml0LXN0YXRlbWVudC4KCSogcHQuYyAodHN1YnN0X2V4cHIpOiBMaWtld2lzZS4KCgkqIHB0LmMgKHRzdWJzdCk6IFVzZSB0c3Vic3RfZXhwciBmb3IgdGhlIHNlY29uZCBvcGVyYW5kIG9mIGFuCglBUlJBWV9SRUYuCgoJKiBkZWNsLmMgKG1heWJlX3B1c2hfdG9fdG9wX2xldmVsKTogRG9uJ3Qgc2F2ZSBwcmV2aW91c19jbGFzc190eXBlLgoJKHBvcGxldmVsX2NsYXNzKTogU2V0IGl0IGhlcmUuCgkocG9wX2Zyb21fdG9wX2xldmVsKTogUG9wIGl0IGhlcmUgaWYgd2UncmUgcmV0dXJuaW5nIHRvIGNsYXNzIHNjb3BlLgoJKiBjbGFzcy5jIChwdXNoY2xhc3MpOiBEb24ndCBzZXQgaXQgaGVyZS4KCgkqIGRlY2wuYyAobWF5YmVfcHVzaF90b190b3BfbGV2ZWwpOiBTYXZlIGN1cnJlbnRfdGVtcGxhdGVfcGFybXMsCglhbmQgY2xlYXIgaXQgaWYgIXBzZXVkby4KCShwb3BfZnJvbV90b3BfbGV2ZWwpOiBSZXN0b3JlIGl0LgoKCSogZGVjbDIuYyAoZmluaXNoX2ZpbGUpOiBQdXNoIHRoZSBkdW1teSBlYWNoIHRpbWUgd2Ugd2FsayB0aGUgbGlzdAoJb2YgdnRhYmxlcy4KCgkqIGVycm9yLmMgKGR1bXBfZXhwcik6IFN1cHBvcnQgTE9PS1VQX0VYUFIgYW5kIGFjdHVhbGx5IGRvCglzb21ldGhpbmcgZm9yIENBU1RfRVhQUi4KCQpNb24gRmViIDE5IDE0OjQ5OjE4IDE5OTYgIFJ1c3R5IFJ1c3NlbGwgIDxydXN0eUBhZGVsYWlkZS5tYXB0ZWsuY29tLmF1PgoKCSogY3Z0LmMgKGNwX2NvbnZlcnQpOiBXYXJuIGFib3V0IGltcGxpY2l0IGNvbnZlcnNpb24gb2YgdGhlCglhZGRyZXNzIG9mIGEgZnVuY3Rpb24gdG8gYm9vbCwgYXMgaXQgaXMgYWx3YXlzIHRydWUuCgpGcmkgRmViIDIzIDIzOjA2OjAxIDE5OTYgIFJ1c3R5IFJ1c3NlbGwgIDxydXN0eUBhZGVsYWlkZS5tYXB0ZWsuY29tLmF1PgoKCSogdHlwZWNrLmMgKGNfZXhwYW5kX3JldHVybik6IEZpeCB3YXJuaW5nIGZvciBsb2NhbCBleHRlcm5zIHJldHVybmVkLgoKTW9uIE1hciAgNCAxNTowMzoxMSAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiB0cmVlLmMgKG1hcGNhcik6IFByb3BhZ2F0ZSBjb25zdCBhbmQgdm9sYXRpbGUgcHJvcGVybHkuCgoJKiB0eXBlY2suYyAoY29tcGxldGVfdHlwZSk6IEJlIHN1cmUgdG8gaW5zdGFudGlhdGUgdGhlCglNQUlOX1ZBUklBTlQgb2YgdGhlIHR5cGUuCgoJKiBtZXRob2QuYyAoc3ludGhlc2l6ZV9tZXRob2QpOiBDbGFzcyBpbnRlcmZhY2UgaGFja2VyeSBkb2VzIG5vdAoJYXBwbHkgdG8gc3ludGhlc2l6ZWQgbWV0aG9kcy4KCk1vbiBNYXIgIDQgMTQ6MDU6MjMgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogcHQuYyAoY29tcF90ZW1wbGF0ZV9hcmdzKTogVXNlIGNvbXB0eXBlcyByYXRoZXIgdGhhbiBqdXN0CgljaGVja2luZyBmb3IgVEVNUExBVEVfVFlQRV9QQVJNIGVxdWl2YWxlbmNlLgoKCSogdHlwZWNrLmMgKGJ1aWxkX3hfZnVuY3Rpb25fY2FsbCk6IENhbGwgY29tcGxldGVfdHlwZSBiZWZvcmUKCWNoZWNraW5nIFRZUEVfT1ZFUkxPQURTX0NBTExfRVhQUi4KCk1vbiBNYXIgIDQgMTg6NDg6MzAgMTk5NiAgTWFuZnJlZCBIb2xsc3RlaW4gICA8bWFuZnJlZEBsdHMuc2VsLmFsY2F0ZWwuZGU+CgoJKiBnKysuYyAobWFpbik6IENoZWNrIGFsc28gZm9yIG5ldyBkZWZpbmUgQUxUX0xJQk0uCgpGcmkgTWFyICAxIDEzOjA5OjMzIDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHB0LmMgKGluc3RhbnRpYXRlX2NsYXNzX3RlbXBsYXRlKTogSWYgd2UgZG9uJ3QgaGF2ZSBhIHBhdHRlcm4KCXlldCwgdGhhdCdzIE9LLgoJKGNvZXJjZV90ZW1wbGF0ZV9wYXJtcyk6IElmIHdlIHNlZSBhIGxvY2FsIGNsYXNzLCBiYWlsLgoKCSogZGVjbC5jIChncm9rX3JlZmVyZW5jZV9pbml0KTogTWFrZSBzdXJlIHRoZXJlJ3MgYSB0eXBlIGJlZm9yZQoJY2hlY2tpbmcgaXRzIGNvZGUuCgoJKiBwdC5jIChkb19mdW5jdGlvbl9pbnN0YW50aWF0aW9uKTogQXZvaWQgY3Jhc2hpbmcgb24gaW52YWxpZCBkZWNscy4KCShwdXNoX3RlbXBsYXRlX2RlY2wpOiBMaWtld2lzZS4KCgkqIHBhcnNlLnkgKG5hbWVkX2NsYXNzX2hlYWQpOiBTZXQKCUNMQVNTVFlQRV9URU1QTEFURV9TUEVDSUFMSVpBVElPTiBoZXJlIGlmIHdlIGhhdmUgYmFzZXR5cGVzLgoKCSogZGVjbC5jICh4cmVmX3RhZyk6IERpYWdub3NlIHJlZGVjbGFyYXRpb24gb2YgdGVtcGxhdGUKCXR5cGUtcGFyYW1ldGVyIG5hbWUuCgoJKiBlcnJvci5jIChkdW1wX3R5cGUpOiBIYW5kbGUgYW5vbnltb3VzIHRlbXBsYXRlIHR5cGUgcGFybXMuCgoJKiBwdC5jIChpbnN0YW50aWF0ZV90ZW1wbGF0ZSk6IFVzZSBUWVBFX01BSU5fREVDTCBpbnN0ZWFkIG9mCglUWVBFX1NUVUJfREVDTC4KCShjb2VyY2VfdGVtcGxhdGVfcGFybXMpOiBMaWtld2lzZS4KClRodSBGZWIgMjkgMTY6MjY6MDEgMTk5NiAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgoKCSogY2xhc3MuYyAoaW5zdGFudGlhdGVfdHlwZSwgY2FzZSB7QVJSQVksSU5ESVJFQ1R9X1JFRiwKCWNhc2UgQUREUl9FWFBSKTogRG9uJ3QgbW9kaWZ5IHJocyBpZiBhIHN1Ymluc3RhbnRpYXRpb24gZmFpbHMuCgpUaHUgRmViIDI5IDA4OjIwOjI1IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHB0LmMgKGluc3RhbnRpYXRlX3RlbXBsYXRlKTogVGFrZSB0aGUgTUFJTl9WQVJJQU5UIG9mIHRoZSB0eXBlCgliZWZvcmUgdHJ5aW5nIHRvIGdldCBpdHMgU1RVQl9ERUNMLgoJKGNvZXJjZV90ZW1wbGF0ZV9wYXJtcyk6IExpa2V3aXNlLgoKCSogcGFyc2UueSAodGVtcGxhdGVfdHlwZV9wYXJtKTogSWYgdGhleSBkaWRuJ3QgdXNlICdjbGFzcycsCglwcmV0ZW5kIHRoZXkgZGlkIGFmdGVyIGdpdmluZyBhbiBlcnJvci4KCgkqIHB0LmMgKGNvZXJjZV90ZW1wbGF0ZV9wYXJtcyk6IERpYWdub3NlIHVzZSBvZiBsb2NhbCBjbGFzcy4KCgkqIGRlY2wuYyAoZ3Jva19yZWZlcmVuY2VfaW5pdCk6IFVzZSBpbnN0YW50aWF0ZV90eXBlLgoKCSogZXJyb3IuYyAoZHVtcF9leHByKTogSGFuZGxlIFRFTVBMQVRFX0RFQ0xzLgoKCSogcGFyc2UueSAobmFtZWRfY2xhc3NfaGVhZCk6IERpYWdub3NlIG1pc21hdGNoaW5nIHR5cGVzIGFuZCB0YWdzLgoKCSogZGVjbC5jIChwdXNoZGVjbCk6IFR5cGUgZGVjbHMgYW5kIGNsYXNzIHRlbXBsYXRlcyBjbGFzaCB3aXRoCglhcnRpZmljaWFsIHR5cGUgZGVjbHMsIG5vdCBoaWRlIHRoZW0uCgoJKiBkZWNsLmMgKHJlZGVjbGFyYXRpb25fZXJyb3JfbWVzc2FnZSk6IERpYWdub3NlIHJlZGVmaW5pdGlvbiBvZgoJdGVtcGxhdGVzIHByb3Blcmx5LgoJKGR1cGxpY2F0ZV9kZWNscyk6IERpYWdub3NlIGRpc2FsbG93ZWQgb3ZlcmxvYWRzIGZvciB0ZW1wbGF0ZQoJZnVuY3Rpb25zLCB0b28uCgoJKiBkZWNsLmMgKHN0YXJ0X2RlY2wpOiBDYWxsIGNvbXBsZXRlX3R5cGUgYmVmb3JlIGNoZWNraW5nIGZvciBhCglkZXN0cnVjdG9yLgoKCSogcHQuYyAodHN1YnN0KTogVXNlIHRzdWJzdF9leHByIG9uIHRoZSBlbHRzIG9mIGEgVkVDLgoKCSogZGVjbC5jICh4cmVmX3RhZyk6IEEgVEVNUExBVEVfVFlQRV9QQVJNIGlzIGEgbWF0Y2guCgpXZWQgRmViIDI4IDA5OjI4OjQ0IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAoZ3Jva19vcF9wcm9wZXJ0aWVzKTogRG9uJ3QgY2hlY2sgZm9yIG9wZXJhdG9yKysoaW50KSBpbgoJYSB0ZW1wbGF0ZS4KCgkqIHRyZWUuYyAocGVybV9tYW5pcCk6IFJldHVybiBhIGNvcHkgb2YgdmFyaWFibGUgYW5kIGZ1bmN0aW9uCglkZWNscyB3aXRoIGV4dGVybmFsIGxpbmthZ2UuCgoJKiB0cmVlLmRlZjogQ2hhbmdlIHNvbWUgb2YgdGhlIG1pbiB0cmVlIGNvZGVzIHRvIHR5cGUgIjEiLgoJKiBwdC5jICh1c2VzX3RlbXBsYXRlX3Bhcm1zKTogSGFuZGxlICdlJ3MsIHJldHVybiAxIGZvciBMT09LVVBfRVhQUnMuCgkqIG1ldGhvZC5jIChidWlsZF9vdmVybG9hZF9pbnQpOiBFbWl0IHNvbWV0aGluZyBhcmJpdHJhcnkgZm9yCglhbnl0aGluZyBidXQgYW4gSU5URUdFUl9DU1QgaWYgd2UncmUgaW4gYSB0ZW1wbGF0ZS4KCgkqIGRlY2wuYyAoY3BfZmluaXNoX2RlY2wpOiBDYWxsIGNvbXBsZXRlX3R5cGUgYmVmb3JlIGRlY2lkaW5nCgl3aGV0aGVyIG9yIG5vdCB0byBsYXkgb3V0IHRoZSBkZWNsLgoKCSogbGV4LmMgKGRvX2lkZW50aWZpZXIpOiBDaGVjayBmb3IgREVDTF9JTklUSUFMIGJlZm9yZSB1c2luZyBpdC4KClR1ZSBGZWIgMjcgMTY6MzU6MzIgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogdHlwZWNrMi5jIChidWlsZF94X2Fycm93KTogQ2FsbCBjb21wbGV0ZV90eXBlLgoKCSogcHQuYyAoYWRkX3BlbmRpbmdfdGVtcGxhdGUpOiBCcm9rZW4gb3V0LgoJKGxvb2t1cF90ZW1wbGF0ZV9jbGFzcyk6IElmIC1mZXh0ZXJuYWwtdGVtcGxhdGVzLCBjYWxsIGl0IGZvciBhbGwKCXRoZSBtZXRob2RzIG9mIGltcGxlbWVudGVkIHR5cGVzLgoJKGluc3RhbnRpYXRlX2NsYXNzX3RlbXBsYXRlKTogSW5zdGVhZCBvZiBpbnN0YW50aWF0aW5nIHRoZW0gaGVyZS4KCShpbnN0YW50aWF0ZV9kZWNsKTogSGFuZGxlIC1mZXh0ZXJuYWwtdGVtcGxhdGVzIGVhcmxpZXIuCgpUdWUgRmViIDI3IDE1OjUxOjMyIDE5OTYgIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGxpc2EuY3lnbnVzLmNvbT4KCgkqIHNlYXJjaC5jLCBsZXguYywgZGVjbC5jLCBjbGFzcy5jLCBjcC10cmVlLmg6IERvbid0IHdyYXAgdGhlCgltZW1vaXplZCBsb29rdXAgc3R1ZmYgaW5zaWRlIEdBVEhFUl9TVEFUSVNUSUNTLgoKVHVlIEZlYiAyNyAxMDozODowOCAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBkZWNsLmMgKHN0YXJ0X2RlY2wpOiBDb21wbGFpbiBhYm91dCBhcnJheSBvZiBpbmNvbXBsZXRlIHR5cGUKCWhlcmUuCgkoZ3Jva2RlY2xhcmF0b3IpOiBOb3QgaGVyZS4KCgkqIHBhcnNlLnkgKHRlbXBsYXRlX3Bhcm0pOiBFeHBhbmQgZnVsbF9wYXJtIGlubGluZSBzbyB3ZSBjYW4gc2V0Cgl0aGUgcnVsZSdzIHByZWNlZGVuY2UuCgoJKiBwdC5jICh0c3Vic3RfZXhwcik6IElmIHdlJ3JlIGluIGEgdGVtcGxhdGUsIGp1c3QgZG8gdHN1YnN0X2NvcHkuCgkodHN1YnN0KTogdHN1YnN0X2V4cHIgdGhlIERFQ0xfSU5JVElBTCBvZiBGSUVMRF9ERUNMcy4KCSogZGVjbDIuYyAoZ3Jva2JpdGZpZWxkKTogRG9uJ3QgY2hlY2sgZm9yIGludGVnZXIgY29uc3RhbnQgaGVyZS4KCSogY2xhc3MuYyAoZmluaXNoX3N0cnVjdF8xKTogQ2hlY2sgaGVyZS4KCgkqIGRlY2wuYyAoZGVmaW5lX2xhYmVsKTogTWFrZSB0aGUgbWluIGRlY2wgZ28gb24gcGVybWFuZW50X29ic3RhY2suCgoJKiBwdC5jICh1bmlmeSk6IERvbid0IGhhbmRsZSBDT05TVF9ERUNMcy4KCSh1c2VzX3RlbXBsYXRlX3Bhcm1zKTogRG9uJ3QgY2hlY2sgREVDTF9JTklUSUFMIG9uIGEgQ09OU1RfREVDTC4KCSh0c3Vic3RfY29weSk6IExpa2V3aXNlLgoKCSogbGV4LmMgKGRvX2lkZW50aWZpZXIpOiBEbyBwdWxsIHRoZSBERUNMX0lOSVRJQUwgb3V0IG9mIGEKCUNPTlNUX0RFQ0wgZm9yIGEgdGVtcGxhdGUgcGFybS4KCk1vbiBGZWIgMjYgMTI6NDg6MTggMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZGVjbC5jIChncm9rZGVjbGFyYXRvcik6IENvbXBsYWluIGFib3V0IGFycmF5IG9mIGluY29tcGxldGUgdHlwZQoJaGVyZS4KCShzdGFydF9kZWNsXzEpOiBOb3QgaGVyZS4KCgkqIHB0LmMgKHRzdWJzdCk6IEhhbmRsZSBwb2ludGVyLXRvLWZ1bmN0aW9uIGRlY2xhcmF0b3JzLgoKCSogbWV0aG9kLmMgKGhhY2tfaWRlbnRpZmllcik6IElmIHBlZGFudGljLCBkaWFnbm9zZSBsb2NhbCBjbGFzcwoJbWV0aG9kcyB0aGF0IHJlcXVpcmUgYSBzdGF0aWMgY2hhaW4uCgoJKiBkZWNsLmMgKGdyb2tfb3BfcHJvcGVydGllcyk6IE5vIGxvbmdlciBzdGF0aWMuCgkqIGNwLXRyZWUuaDogRGVjbGFyZSBpdC4KCSogcHQuYyAodHN1YnN0KTogQ2FsbCBpdCBmb3Igb3BlcmF0b3JzLgoJVXNlIHRzdWJzdF9jb3B5IGZvciBUUkVFX1ZFQ3MuCgoJKiBwYXJzZS55ICh0ZW1wbGF0ZV9hcmcpOiBUaGUgZXhwciBoYXMgcHJlY2VkZW5jZSBsaWtlICc+Jy4KCkZyaSBGZWIgMjMgMTQ6NTE6NTIgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogcHQuYyAoY29lcmNlX3RlbXBsYXRlX3Bhcm1zKTogRG9uJ3QgY29lcmNlIGFuIGV4cHJlc3Npb24gdXNpbmcKCXRlbXBsYXRlIHBhcm1zLgoJKHVzZXNfdGVtcGxhdGVfcGFybXMpOiBBbHNvIGNoZWNrIERFQ0xfSU5JVElBTCBpbiBDT05TVF9ERUNMcy4KCSh0c3Vic3QpOiBEb24ndCB1c2UgYnVpbGRfaW5kZXhfMl90eXBlIGlmIHRoZSBtYXhfdmFsdWUgdXNlcyB0ZW1wbGF0ZQoJcGFybXMuCgkqIG1ldGhvZC5jIChidWlsZF9vdmVybG9hZF9pbnQpOiBFbWl0IHNvbWV0aGluZyBhcmJpdHJhcnkgZm9yIGFuCglleHByZXNzaW9uIHVzaW5nIHRlbXBsYXRlIHBhcm1zLgoKCSogcGFyc2UueSAodGVtcGxhdGVfY2xvc2VfYnJhY2tldCk6IE5ldyBub24tdGVybWluYWwgdG8gY2F0Y2ggdXNlCglvZiAnPj4nIGluc3RlYWQgb2YgJz4gPicgaW4gdGVtcGxhdGUgY2xhc3MgbmFtZXMuCgkodGVtcGxhdGVfdHlwZSk6IFVzZSBpdC4KCSogTWFrZWZpbGUuaW4gKENPTkZMSUNUUyk6IENhdXNlcyBvbmUgbW9yZSByL3IgY29uZmxpY3QuCgoJKiB0cmVlLmRlZjogQWRkIENBU1RfRVhQUi4KCSogdHlwZWNrMi5jIChidWlsZF9mdW5jdGlvbmFsX2Nhc3QpOiBVc2UgQ0FTVF9FWFBSIGluc3RlYWQgb2YKCUNPTlZFUlRfRVhQUiBmb3IgbWluaW1hbF9wYXJzZV9tb2RlLgoJKiB0eXBlY2suYyAoYnVpbGRfY19jYXN0KTogTGlrZXdpc2UuCgkqIHB0LmMgKHRzdWJzdF9jb3B5KTogTGlrZXdpc2UuCgkqIGRlY2wyLmMgKGJ1aWxkX2V4cHJfZnJvbV90cmVlKTogTGlrZXdpc2UuCgkqIGVycm9yLmMgKGR1bXBfZXhwcik6IExpa2V3aXNlLgoKRnJpIEZlYiAyMyAxMDozNjo0NiAxOTk2ICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBsaXNhLmN5Z251cy5jb20+CgoJKiBleGNlcHQuYyAoU2V0VGVybWluYXRlLCBTZXRVbmV4cGVjdGVkKTogUHV0IGJhY2sgZ2xvYmFsIHZhcnMuCgkoaW5pdF9leGNlcHRpb25fcHJvY2Vzc2luZyk6IFB1dCBiYWNrIGRlY2wvaW5pdCBvZgoJc2V0X3VuZXhwZWN0ZWRfZm5kZWNsIGFuZCBzZXRfdGVybWluYXRlX2ZuZGVjbCwgbmVlZGVkIHRvIGdldCB0aGUKCWZucyBmcm9tIGxpYnN0ZGMrKy4KCgkqIGRlY2wuYyAoc3RydWN0IGJpbmRpbmdfbGV2ZWwpOiBEZWxldGUgQUNDRVBUX0FOWSBiaXRmaWVsZC4KCShkZWNsYXJlX3VuaW5zdGFudGlhdGVkX3R5cGVfbGV2ZWwsIHVuaW5zdGFudGlhdGVkX3R5cGVfbGV2ZWxfcCk6CglEZWxldGUgdW51c2VkIGZucy4KCSogY3AtdHJlZS5oIChkZWNsYXJlX3VuaW5zdGFudGlhdGVkX3R5cGVfbGV2ZWwsCgl1bmluc3RhbnRpYXRlZF90eXBlX2xldmVsX3ApOiBEZWxldGUgcHJvdG90eXBlcy4KClRodSBGZWIgMjIgMTk6MzY6MTUgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogcHQuYyAodHN1YnN0X2V4cHIpOiBBZGQgZGVmYXVsdCByZXR1cm4uCgpUaHUgRmViIDIyIDE2OjQ3OjI0IDE5OTYgIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGxpc2EuY3lnbnVzLmNvbT4KCgkqIGVycm9yLmMgKGZuZGVjbF9hc19zdHJpbmcpOiBEZWxldGUgdW51c2VkIGFyZyBDTkFNRS4KCSogc2lnLmMgKGJ1aWxkX3NpZ25hdHVyZV90YWJsZV9jb25zdHJ1Y3RvciwKCWJ1aWxkX3NpZ25hdHVyZV9tZXRob2RfY2FsbCk6IEZpeCBjYWxscy4KCgkqIGNsYXNzLmMgKHRoZV9udWxsX3Z0YWJsZV9lbnRyeSk6IERlbGV0ZSB2YXIgZGVmaW5pdGlvbi4KCShpbml0X2NsYXNzX3Byb2Nlc3NpbmcpOiBEZWxldGUgdHJlZSB0aGVfbnVsbF92dGFibGVfZW50cnkgaW5pdC4KCSogZGVjbC5jIChub19wcmludF97ZnVuY3Rpb25zLCBidWlsdGluc30pOiBEZWNsYXJlIGFzIHN0YXRpYy4KCShfX3RwX2Rlc2NfdHlwZV9ub2RlKTogI2lmIDAgdmFyIGRlZmluaXRpb24uCgkoaW5pdF90eXBlX2Rlc2MpOiAjaWYgMCBpbml0IG9mIF9fdHBfZGVzY190eXBlX25vZGUuCgkodmJfb2ZmX2lkZW50aWZpZXIpOiBNb3ZlIHZhciBkZWNsIGludG8gaW5pdF9kZWNsX3Byb2Nlc3NpbmcuCgkoY3VycmVudF9mdW5jdGlvbl9hc3NpZ25zX3RoaXMpOiBEZWNsYXJlIGFzIHN0YXRpYy4KCShpbnRfZnR5cGVfcHRyX3B0cl9pbnQsIHZvaWRfZnR5cGVfcHRyX2ludF9pbnQpOiBEZWxldGUgdmFyIGRlY2xzLgoJKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogRGVsZXRlIGluaXQgb2Ygdm9pZF9mdHlwZV9wdHJfcHRyX2ludC4KCU1vdmUgZGVjbHMgb2Ygc3RyaW5nX2Z0eXBlX3B0cl9wdHIgYW5kIGludF9mdHlwZV9zdHJpbmdfc3RyaW5nIGhlcmUuCgkqIGRlY2wyLmMgKGRlbGV0ZV9zYW5pdHkpOiBEZWxldGUgZGVmaW5pdGlvbi9tb2Qgb2YgbG9jYWwgdmFyIEVMVF9TSVpFLgoJKiBpbml0LmMgKEJJX2hlYWRlcl90eXBlLCBCSV9oZWFkZXJfc2l6ZSk6IERlY2xhcmUgYXMgc3RhdGljLgoJKiBwdC5jICh0ZW1wbGF0ZV9jbGFzc2VzKTogRGVsZXRlIHVudXNlZCB2YXIuCgkoYWRkX3BlbmRpbmdfdGVtcGxhdGUpOiBEZWxldGUgZGVjbCBmb3Igbm9uLWV4aXN0ZW50IGZuLgoJKGxvb2t1cF90ZW1wbGF0ZV9jbGFzcyk6IERlbGV0ZSB2YXJzIENPREUgYW5kIFRBR19DT0RFLgoJKGluc3RhbnRpYXRlX3RlbXBsYXRlKTogRGVsZXRlIHVudXNlZCB2YXIgVEFSR1MuCgkqIGNwLXRyZWUuaCAodmJfb2ZmX2lkZW50aWZpZXIsIGN1cnJlbnRfZnVuY3Rpb25fYXNzaWduc190aGlzKToKCURlbGV0ZSBkZWNscy4KCShfX3RwX2Rlc2NfdHlwZV9ub2RlKTogI2lmIDAgdmFyIGRlY2wuCgkoZm5kZWNsX2FzX3N0cmluZyk6IEZpeCBwcm90b3R5cGUuCgpUaHUgRmViIDIyIDE1OjU2OjE5IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHRyZWUuZGVmOiBBZGQgR09UT19TVE1ULgoJKiBwdC5jICh0c3Vic3RfZXhwcik6IFN1cHBvcnQgZ290byBhbmQgbGFiZWxzLgoJKiBkZWNsLmMgKGRlZmluZV9sYWJlbCk6IFN1cHBvcnQgbWluaW1hbCBwYXJzaW5nLgoJKiBwYXJzZS55IChzaW1wbGVfc3RtdCk6IExpa2V3aXNlLgoKVGh1IEZlYiAyMiAxNTozMDoxMiAxOTk2ICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBsaXNhLmN5Z251cy5jb20+CgoJKiB4cmVmLmMgKEdOVV94cmVmX21lbWJlcik6IE9ubHkgZGVmaW5lL3NldCB2YXIgSSBpZgoJWFJFRl9TSE9SVF9NRU1CRVJfTkFNRVMgaXMgZGVmaW5lZCwgdG8gbWF0Y2ggd2hlbiBpdCdzIGFjdHVhbGx5Cgl1c2VkLgoJKEdOVV94cmVmX2VuZF9zY29wZSk6IERlbGV0ZSB1bnVzZWQgZmlmdGggYXJnIFRSTlMuCgkoR05VX3hyZWZfZW5kKTogRml4IGNhbGwuCgkqIGRlY2wuYyAocG9wbGV2ZWwsIHBvcGxldmVsX2NsYXNzLCBmaW5pc2hfbWV0aG9kKTogRml4IGNhbGxzLgoJKiBjcC10cmVlLmggKEdOVV94cmVmX2VuZF9zY29wZSk6IEZpeCBwcm90b3R5cGUuCgoJKiB0cmVlLmMgKGJ1aWxkX2V4Y2VwdGlvbl92YXJpYW50KTogRGVsZXRlIHVudXNlZCB2YXJzIEksIEEsIFQsCglUMiwgYW5kIENOQU1FLgoJKGxheW91dF92YmFzZXR5cGVzKTogRGVsZXRlIHVudXNlZCB2YXIgTk9OVklSVFVBTF9WQVJfU0laRS4KCShtYXBjYXIpOiBEZWxldGUgdW51c2VkIHZhciBDT0RFLgoJKGJ1aWxkX2NwbHVzX25ldyk6IERlbGV0ZSB1bnVzZWQgYXJnIFdJVEhfQ0xFQU5VUF9QLgoJKGJyZWFrX291dF9jbGVhbnVwcyk6IEZpeCBjYWxsLgoJKGJvdF9tYW5pcCk6IExpa2V3aXNlLgoJKiBjYWxsLmMgKGJ1aWxkX21ldGhvZF9jYWxsKTogTGlrZXdpc2UuCgkqIGN2dC5jIChidWlsZF91cF9yZWZlcmVuY2UsIGNvbnZlcnRfdG9fcmVmZXJlbmNlLCBjcF9jb252ZXJ0KToKCUxpa2V3aXNlLgoJKiB0eXBlY2suYyAodW5hcnlfY29tcGxleF9sdmFsdWUsIGJ1aWxkX21vZGlmeV9leHByLAoJY29udmVydF9mb3JfaW5pdGlhbGl6YXRpb24pOiBMaWtld2lzZS4KCSogdHlwZWNrMi5jIChidWlsZF9mdW5jdGlvbmFsX2Nhc3QpOiBMaWtld2lzZS4KCSogY3AtdHJlZS5oIChidWlsZF9jcGx1c19uZXcpOiBGaXggcHJvdG90eXBlLgoKCSogcmVwby5jIChvcGVuX3JlcG9fZmlsZSk6IERlbGV0ZSB1bnVzZWQgdmFyIFEuCgkocmVwb19jb21waWxlX2ZsYWdzLCByZXBvX3RlbXBsYXRlX2RlY2xhcmVkLAoJcmVwb190ZW1wbGF0ZV9kZWZpbmVkLCByZXBvX2NsYXNzX2RlZmluZWQsIHJlcG9faW5saW5lX3VzZWQsCglyZXBvX3Z0YWJsZV91c2VkLCByZXBvX3RpbmZvX3VzZWQpOiAjaWYgMCB1bnVzZWQgZm5zLgoJKHJlcG9fZ2V0X2lkLCByZXBvX3Z0YWJsZV91c2VkKTogRGVjbGFyZSBhcyBzdGF0aWMuIAoJKiBjcC10cmVlLmggKG1hcmtfe2RlY2wsY2xhc3N9X2luc3RhbnRpYXRlZCwgZmluaXNoX3JlcG8pOiBBZGQKCXByb3RvdHlwZXMuCgpUaHUgRmViIDIyIDE0OjUzOjM1IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnkgKHBlbmRpbmdfaW5saW5lcyk6IEFkZCBmdW5jdGlvbl90cnlfYmxvY2sgY2FzZS4KCgkqIHB0LmMgKHVuaWZ5KTogRml4IGZvciB0ZW1wbGF0ZSBjb25zdCBwYXJtcy4KClRodSBGZWIgMjIgMTM6MjQ6MTUgMTk5NiAgQnJlbmRhbiBLZWhvZSAgPGJyZW5kYW5AbGlzYS5jeWdudXMuY29tPgoKCSogbGV4LmMgKGV4dHJhY3RfaW50ZXJmYWNlX2luZm8pOiBEZWxldGUgZm9yd2FyZCBkZWNsLgoJKGRlZmF1bHRfY29weV9jb25zdHJ1Y3Rvcl9ib2R5LCBkZWZhdWx0X2Fzc2lnbl9yZWZfYm9keSk6IERlbGV0ZQoJZGVjbHMgZm9yIG5vbi1leGlzdGVudCBmdW5jdGlvbnMuCgkoc3ludGhfZmlyc3RvYmosIGlubGluZV90ZXh0X2ZpcnN0b2Jqcyk6IERlbGV0ZSB1bnVzZWQgdmFycy4KCShpbml0X2xleCk6IERlbGV0ZSBzZXR0aW5nIHRoZW0uCgkoY29uc191cF9kZWZhdWx0X2Z1bmN0aW9uKTogRGVsZXRlIHVudXNlZCB2YXJzIEZVTkNfQlVGLAoJRlVOQ19MRU4sIGFuZCBDT01QTEVYLiAgRGVsZXRlIGNvZGUgc2V0dGluZyBDT01QTEVYLiAgRGVsZXRlIG9sZAoJI2lmIDAnZCBzeW50aCBjb2RlLgoJKHRvcGxldmVsLCBleHByZXNzaW9uX29ic3RhY2spOiBEZWxldGUgdW51c2VkIGV4dGVybiBkZWNscy4KCSh0cmVlX25vZGVfa2luZCk6IERlbGV0ZSB1bnVzZWQgZW51bS4KCSh0cmVlX25vZGVfY291bnRzLCB0cmVlX25vZGVfc2l6ZXMpOiBXcmFwIHdpdGggI2lmZGVmCglHQVRIRVJfU1RBVElTVElDUy4KCSh0cmVlX25vZGVfa2luZF9uYW1lcyk6IERlbGV0ZSB1bnVzZWQgZXh0ZXJuIGRlY2wuCgkoc3ludGhfb2JzdGFjayk6IERlbGV0ZSB1bnVzZWQgdmFyLgoJKGluaXRfbGV4KTogRG9uJ3Qgc2V0IGl0LgoJKGluaXRfcGFyc2UpOiBBZGQgZGVjbCBiZWZvcmUgdXNlLgoJKHJlZHVjZV9jb3VudCk6IE9ubHkgZGVmaW5lICNpZmRlZiBHQVRIRVJfU1RBVElTVElDUyAmJiBSRURVQ0VfTEVOR1RILgoJKGN1cnJlbnRfdW5pdF97bmFtZSwgbGFuZ3VhZ2V9KTogRGVsZXRlIHVudXNlZCB2YXJzLiAKCShjaGVja19uZXdsaW5lKTogRG9uJ3QgYm90aGVyIHNldHRpbmcgdGhlbSwganVzdCBhY2NlcHQgdGhlICNwcmFnbWEuCgkqIGNwLXRyZWUuaCAoaW5pdF9yZXBvLCBwZWVrX3l5bGV4KTogQWRkIHByb3RvdHlwZXMuCgkoY3VycmVudF91bml0X3tuYW1lLCBsYW5ndWFnZX0pOiBEZWxldGUgZGVjbHMuCgoJKiBzZWFyY2guYzogV3JhcCBhbGwgb2YgdGhlIG1lbW9pemVkIGZ1bmN0aW9ucywgbWFjcm9zLCBhbmQKCXZhcmlhYmxlcyBpbnNpZGUgI2lmZGVmIEdBVEhFUl9TVEFUSVNUSUNTLgoJKGxvb2t1cF9maWVsZCwgbG9va3VwX2ZuZmllbGRzKTogTGlrZXdpc2UuCgkoaW5pdF9zZWFyY2hfcHJvY2Vzc2luZyk6IExpa2V3aXNlLgoJKHJlaW5pdF9zZWFyY2hfc3RhdGlzdGljcyk6IFdyYXAgd2hvbGUgZnVuY3Rpb24uCgkqIGxleC5jIChyZWluaXRfbGFuZ19zcGVjaWZpYyk6IFdyYXAgY2FsbCB0byByZWluaXRfc2VhcmNoX3N0YXRpc3RpY3MuCgoJKiBkZWNsLmMgKGZpbmlzaF9mdW5jdGlvbik6IE9ubHkgY2FsbCBwb3BfbWVtb2l6ZWRfY29udGV4dCBpZgoJR0FUSEVSX1NUQVRJU1RJQ1MgaXMgZGVmaW5lZC4KCShzdGFydF9mdW5jdGlvbik6IExpa2V3aXNlIGZvciBwdXNoX21lbW9pemVkX2NvbnRleHQuCgkqIGNsYXNzLmMgKHB1c2hjbGFzcywgcG9wY2xhc3MpOiBMaWtld2lzZS4KCgkqIGNwLXRyZWUuaCAoQ0xBU1NUWVBFX01UQUJMRV9FTlRSWSk6IE1vdmUgZGVmaW5pdGlvbiBmcm9tIGhlcmUuLi4KCSogc2VhcmNoLmMgKENMQVNTVFlQRV9NVEFCTEVfRU5UUlkpOiAuLi4gdG8gaGVyZS4KCgkqIGN2dC5jIChjcF9jb252ZXJ0KTogRGVsZXRlIHVudXNlZCBsb2NhbCB2YXIgRk9STS4KCSogY3AtdHJlZS5oIChjYW5fY29udmVydCwgY2FuX2NvbnZlcnRfYXJnLCByZWFsX2x2YWx1ZV9wKTogQWRkCglwcm90b3R5cGVzLgoKVGh1IEZlYiAyMiAxMzoxOTo0NCAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBwdC5jIChkb19wb3BsZXZlbCk6IE9vcHM7IHJlYWxseSByZXR1cm4gd2hhdCB3ZSBnZXQgZnJvbQoJcG9wbGV2ZWwgdGhpcyB0aW1lLgoKVGh1IEZlYiAyMiAxMTo0MTo0NCAxOTk2ICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBsaXNhLmN5Z251cy5jb20+CgoJKiBjcC10cmVlLmggKGlzX2FnZ3JfdHlwZSk6IEFkZCBwcm90b3R5cGUuCgoJKiBjcC10cmVlLmggKHtwdXNoLHBvcH1fY3BfZnVuY3Rpb25fY29udGV4dCk6IEFkZCBkZWNscy4KCSogbWV0aG9kLmMgKHtwdXNoLHBvcH1fY3BfZnVuY3Rpb25fY29udGV4dCk6IERlbGV0ZSBkZWNscy4KCSogZXhjZXB0LmMgKHN0YXJ0X2VoX3Vud2luZGVyLCBlbmRfZWhfdW53aW5kZXIpOiBEZWNsYXJlIGFzIHZvaWQuCgkoU2V0VW5leHBlY3RlZCwgU2V0VGVybWluYXRlKTogRGVsZXRlIHVudXNlZCB2YXJzLgoJKGluaXRfZXhjZXB0aW9uX3Byb2Nlc3NpbmcpOiBEb24ndCBzZXQgU2V0VW5leHBlY3RlZCBvcgoJU2V0VGVybWluYXRlLiAgRG9uJ3Qgc2V0IFNFVF9VTkVYUEVDVEVEX0ZOREVDTCBvciBTRVRfVEVSTUlOQVRFX0ZOREVDTC4KCShvdXRwdXRfZXhjZXB0aW9uX3RhYmxlX2VudHJ5KTogRGVsZXRlIHVudXNlZCBhcnJheSBMQUJFTC4KCShleHBhbmRfaW50ZXJuYWxfdGhyb3cpOiBEZWxldGUgdW51c2VkIHZhciBQQVJBTVMuCgkoZXhwYW5kX3N0YXJ0X2NhdGNoX2Jsb2NrKTogRGVsZXRlIHVudXNlZCB2YXIgQ0xFQU5VUC4KCShlbWl0X2V4Y2VwdGlvbl90YWJsZSk6IERlbGV0ZSB1bnVzZWQgdmFyIEVIX05PREVfREVDTC4KCShleHBhbmRfYnVpbHRpbl90aHJvdyk6IERlbGV0ZSB1bnVzZWQgdmFycyBVTldJTkRfQU5EX1RIUk9XIGFuZAoJR09UT19VTldJTkRfQU5EX1RIUk9XLiAgRG9uJ3Qgc2V0IHRoZW0uCgkoZW5kX2VoX3Vud2luZGVyKTogQWRkIHRvcCBkZWNsLgoJKHBvcF9ydGxfZnJvbV9wZXJtKTogRGVsZXRlIHVudXNlZCBkZWNsIG9mIFBFUk1BTkVOVF9PQlNUQUNLLgoJKGV4Y2VwdGlvbl9zZWN0aW9uLCBwdXNoX3J0bF9wZXJtLCBkb19mdW5jdGlvbl9jYWxsLAoJbGFuZ19pbnRlcmltX2VoLCBwdXNoX2VoX2NsZWFudXAsIGVoX291dGVyX2NvbnRleHQsCglleHBhbmRfZW5kX2VoX3NwZWMsIGVuZF9laF91bndpbmRlcik6IERlY2xhcmUgYXMgc3RhdGljLgoJKHNhdmVkX3BjLCBzYXZlZF90aHJvd190eXBlLCBzYXZlZF90aHJvd192YWx1ZSwgc2F2ZWRfY2xlYW51cCwKCXRocm93X3VzZWQpOiBMaWtld2lzZS4KCSogY3AtdHJlZS5oIChleHBhbmRfZW5kX2VoX3NwZWMpOiBEZWxldGUgcHJvdG90eXBlLgoKCSogc2VhcmNoLmMgKGRmc19tYXJrLCBkZnNfbWFya192dGFibGVfcGF0aCwKCWRmc191bm1hcmtfdnRhYmxlX3BhdGgsIGRmc19tYXJrX25ld192dGFibGUsCglkZnNfdW5tYXJrX25ld192dGFibGUsIGRmc19jbGVhcl9zZWFyY2hfc2xvdCwKCWRmc19zZWFyY2hfc2xvdF9ub25lbXB0eV9wLCBiZnNfbWFya2VkcCwgYmZzX3VubWFya2VkcCwKCWJmc19tYXJrZWRfdnRhYmxlX3BhdGhwLCBiZnNfdW5tYXJrZWRfdnRhYmxlX3BhdGhwLAoJYmZzX21hcmtlZF9uZXdfdnRhYmxlcCwgYmZzX3VubWFya2VkX25ld192dGFibGVwKTogI2lmIDAgdW51c2VkCglmdW5jdGlvbnMuCgkobl9maWVsZHNfc2VhcmNoZWQsIG5fY2FsbHNfbG9va3VwX2ZpZWxkLCBuX2NhbGxzX2xvb2t1cF9maWVsZF8xLAoJbl9jYWxsc19sb29rdXBfZm5maWVsZHMsIG5fY2FsbHNfbG9va3VwX2ZuZmllbGRzXzEsCgluX2NhbGxzX2dldF9iYXNlX3R5cGUsIG5fb3V0ZXJfZmllbGRzX3NlYXJjaGVkLCBuX2NvbnRleHRzX3NhdmVkKToKCU9ubHkgZGVmaW5lICNpZmRlZiBHQVRIRVJfU1RBVElTVElDUy4KCShyZWluaXRfc2VhcmNoX3N0YXRpc3RpY3MpOiBPbmx5IGluaXQgc29tZSB2YXJzIGlmIEdBVEhFUl9TVEFUSVNUSUNTCglpcyBkZWZpbmVkLgoJKHZiYXNlX2RlY2wpOiBEZWxldGUgdmFyIGRlZmluaXRpb24uCgkoaW5pdF9zZWFyY2gpOiBEZWxldGUgb2xkIGRlY2wuCgkoaW5pdF92YmFzZV9wb2ludGVycyk6IERlbGV0ZSBidWlsZGluZyBvZiBWQkFTRV9ERUNMLCBzaW5jZSBpdCdzCgluZXZlciBhY3R1YWxseSB1c2VkLgoJKGV4cGFuZF9pbmRpcmVjdF92dGJsc19pbml0KTogRGVsZXRlIGluaXQgb2YgVkJBU0VfREVDTC4KCShnZXRfYmFzZV9kaXN0YW5jZV9yZWN1cnNpdmUpOiBEZWxldGUgdW51c2VkIGZvdXJ0aCBhcmcKCUJBU0VUWVBFX1BBVEguICBGaXggY2FsbCAuCgkoZ2V0X2Jhc2VfZGlzdGFuY2UpOiBGaXggY2FsbC4KCShwdXNoX2NsYXNzX2RlY2xzKTogRGVsZXRlIHVudXNlZCB2YXIgSUQuCgkobWFrZV9tZW1vaXplZF90YWJsZV9lbnRyeSk6IERlY2xhcmUgYXMgc3RhdGljLgoJKGJyZWFkdGhfZmlyc3Rfc2VhcmNoKTogRGVjbGFyZSBhcyBzdGF0aWMuCgkodHJlZV9oYXNfYW55X2Rlc3RydWN0b3JfcCk6IERlY2xhcmUgYXMgc3RhdGljLgoJKHBvcF9jbGFzc19kZWNscyk6IERlbGV0ZSB1bnVzZWQgYXJnIHBvcF9jbGFzc19kZWNscy4KCSogY2xhc3MuYyAocG9wY2xhc3MpOiBGaXggY2FsbCB0byBwb3BfY2xhc3NfZGVjbHMuCgkqIGNwLXRyZWUuaCAobWFrZV9tZW1vaXplZF90YWJsZV9lbnRyeSwgYnJlYWR0aF9maXJzdF9zZWFyY2gsCgl0cmVlX2hhc19hbnlfZGVzdHJ1Y3Rvcl9wKTogRGVsZXRlIHByb3RvdHlwZXMuCgoJKiBydHRpLmMgKGJ1aWxkX3B0bWZfZGVzYyk6IERlbGV0ZSB1bnVzZWQgYXJnIFRZUEUuCgkoYnVpbGRfdF9kZXNjKTogRml4IGNhbGwuICBEZWxldGUgdW51c2VkIHZhcnMgRUxFTVMgYW5kIFRULgoJKGJ1aWxkX2R5bmFtaWNfY2FzdCk6IERlbGV0ZSB1bnVzZWQgbG9jYWwgdmFycyBUTVAxIGFuZCBSRVRWQUwuCgkoYnVpbGRfdXNlcl9kZXNjKTogRGVsZXRlIHVudXNlZCB2YXIgVC4KCShidWlsZF9jbGFzc19kZXNjKTogRGVsZXRlIHVudXNlZCB2YXJzIFQgYW5kIE9GRi4KCShidWlsZF90X2Rlc2MpOiBEZWxldGUgdW51c2VkIHZhciBOQU1FX1NUUklORy4KCShidWlsZF9oZWFkb2YpOiBNYWtlIHN0YXRpYy4KCShnZXRfYmFkX2Nhc3Rfbm9kZSk6IExpa2V3aXNlLgoJKGdldF9kZWZfdG9fZm9sbG93KTogTGlrZXdpc2UuCgkqIGNwLXRyZWUuaCAoaW5pdF90eXBlX2Rlc2MpOiBBZGQgcHJvdG90eXBlLgoJKGJ1aWxkX2hlYWRvZik6IFJlbW92ZSBwcm90b3R5cGUuCgpUaHUgRmViIDIyIDAwOjU0OjIyIDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHB0LmMgKHRzdWJzdCk6IE9ubHkgbG9vayBmb3IgbWF0Y2hpbmcgZGVjbHMgYXQgZmlsZSBzY29wZSBmb3IKCW5vbi1tZW1iZXIgZnVuY3Rpb25zLgoKCSogY2FsbC5jIChidWlsZF9zY29wZWRfbWV0aG9kX2NhbGwpOiBIYW5kbGUgc2NvcGVkIGRlc3RydWN0b3IKCWNhbGxzIGluIHRlbXBsYXRlcy4KCgkqIGRlY2wuYyAoKl90b3BfbGV2ZWwpOiBBbHNvIHNhdmUgcHJldmlvdXNfY2xhc3NfdmFsdWVzLgoKCSogcHQuYyAodHN1YnN0X2V4cHIpOiBTdXBwb3J0IGRvIHt9IHdoaWxlIGxvb3BzLgoJKiBwYXJzZS55IChzaW1wbGVfc3RtdCk6IExpa2V3aXNlLgoJKiB0cmVlLmRlZjogTGlrZXdpc2UuCgoJKiBtZXRob2QuYyAoYnVpbGRfb3ZlcmxvYWRfaWRlbnRpZmllcik6IEZvciBhIGNsYXNzIG5lc3RlZCBpbiBhCgl0ZW1wbGF0ZSBjbGFzcywgZG9uJ3QgbWFuZ2xlIGluIHRoZSB0ZW1wbGF0ZSBwYXJtcyBmcm9tIG91cgoJY29udGV4dC4KCgkqIGxleC5jLCBjcC10cmVlLmg6IFJlbW92ZSBzdXBwb3J0IGZvciB0ZW1wbGF0ZSBpbnN0YW50aWF0aW9ucyBpbgoJdGhlIHBlbmRpbmdfaW5saW5lcyBjb2RlLgoJKiBwdC5jOiBSZW1vdmUgZGVhZCBmdW5jdGlvbnMgYW5kIHVudXNlZCBhcmd1bWVudHMuCgkodXNlc190ZW1wbGF0ZV9wYXJtcyk6IFRZUEVOQU1FX1RZUEVzIGFsd2F5cyB1c2UgdGVtcGxhdGUgcGFybXMuCgkqIHBhcnNlLnk6IFN0b3AgcGFzc2luZyBhbnl0aGluZyB0byBlbmRfdGVtcGxhdGVfZGVjbC4KCSogdHJlZS5jIChwcmludF9sYW5nX3N0YXRpc3RpY3MpOiBPbmx5IHByaW50IHRpbnN0IGluZm8gI2lmZGVmCglHQVRIRVJfU1RBVElTVElDUy4KCldlZCBGZWIgMjEgMTY6NTc6MzMgMTk5NiAgQnJlbmRhbiBLZWhvZSAgPGJyZW5kYW5AbGlzYS5jeWdudXMuY29tPgoKCSogaW5pdC5jIChleHBhbmRfcmVjdXJzaXZlX2luaXR7LF8xfSk6IERlbGV0ZSBkZWNscy4gCgkoc29ydF9tZW1iZXJfaW5pdCk6IERlbGV0ZSB1bnVzZWQgdmFyIElOSVQuCgkoZW1pdF9iYXNlX2luaXQpOiBEZWxldGUgdW51c2VkIHZhciBYLgoJKGJ1aWxkX29mZnNldF9yZWYpOiBEZWxldGUgdW51c2VkIHZhciBDTkFNRS4KCShzb3J0X21lbWJlcl9pbml0KTogRGVsZXRlIHVudXNlZCB2YXIgRklFTERTX1RPX1VOTUFSSy4KCShlbWl0X2Jhc2VfaW5pdCk6IERlbGV0ZSB1bnVzZWQgbG9jYWwgdmFyIEJBU0UuICBEZWxldGUgZXh0ZXJuCglkZWNsIG9mIElOX0NIQVJHRV9JREVOVElGSUVSLgoJKGJ1aWxkX2RlbGV0ZSk6IERlbGV0ZSB1bnVzZWQgbG9jYWwgdmFyIFZJUlRVQUxfU0laRS4KCgkqIGluaXQuYyAoYnVpbGRfdmVjX2RlbGV0ZSk6IERlbGV0ZSB1bnVzZWQgdGhpcmQgYXJnIEVMVF9TSVpFLgoJKGJ1aWxkX2RlbGV0ZSk6IEZpeCBjYWxsLgoJKiBkZWNsMi5jIChkZWxldGVfc2FuaXR5KTogTGlrZXdpc2UuCgkqIGNwLXRyZWUuaCAoYnVpbGRfdmVjX2RlbGV0ZSk6IFVwZGF0ZSBwcm90b3R5cGUuCgoJKiB0eXBlY2suYyAoY29tbW9uX2Jhc2VfdHlwZSk6IERlbGV0ZSB1bnVzZWQgdmFyIFRNUC4KCShidWlsZF9iaW5hcnlfb3ApOiBEZWxldGUgbG9jYWwgdmFyIEFSR1NfU0FWRS4KCShidWlsZF9hcnJheV9yZWYpOiBEZWxldGUgdW51c2VkIHZhciBJVFlQRS4KCShjX2V4cGFuZF9yZXR1cm4pOiBEZWxldGUgdW51c2VkIHZhciBVU0VfVEVNUC4KCgkqIHR5cGVjay5jIChjb21wZXhjZXB0dHlwZXMpOiBEZWxldGUgdW51c2VkIGFyZyBTVFJJQ1QuCgkoY29tcHR5cGVzKTogRml4IGNhbGxzLgoJKiBkZWNsLmMgKGR1cGxpY2F0ZV9kZWNscyk6IExpa2V3aXNlLgoJKiBjcC10cmVlLmggKGNvbXBleGNlcHR0eXBlcyk6IERlbGV0ZSBleHRyYSBhcmcuCgoJKiBkZWNsMi5jIChjaGVja19jbGFzc2ZuKTogRGVsZXRlIHVudXNlZCBzZWNvbmQgYXJnIENOQU1FLgoJKiBkZWNsLmMgKHN0YXJ0X2RlY2wsIGdyb2tmbmRlY2wpOiBGaXggY2FsbHMuCgkqIGluaXQuYyAoZG9fZnJpZW5kKTogTGlrZXdpc2UuCgkqIGNwLXRyZWUuaCAoY2hlY2tfY2xhc3Nmbik6IFVwZGF0ZSBwcm90b3R5cGUuCgoJKiBjcC10cmVlLmggKHNpZ25hdHVyZV9lcnJvciwgaW1wb3J0X2V4cG9ydF92dGFibGUsCglhcHBlbmRfc2lnbmF0dXJlX2ZpZWxkcywgaWRfaW5fY3VycmVudF9jbGFzcywgbWFya191c2VkLAoJY29weV9hc3NpZ25tZW50X2FyZ19wKTogQWRkIGRlY2xzLgoJKiBkZWNsMi5jIChtYXJrX3VzZWQpOiBEZWxldGUgZGVjbC4KCgkqIGNsYXNzLmMgKG5fKik6IFdyYXAgd2l0aCAjaWZkZWYgR0FUSEVSX1NUQVRJU1RJQ1MuCgoJKiBjbGFzcy5jIChnZXRfdnRhYmxlX2VudHJ5KTogRGlhYmxlIHVudXNlZCBmdW5jdGlvbi4KCShkb2luZ19oYXJkX3ZpcnR1YWxzKTogRGVsZXRlIHVudXNlZCBzdGF0aWMgZ2xvYmFsIHZhci4KCShmaW5pc2hfc3RydWN0XzEpOiBEb24ndCBpbml0IERPSU5HX0hBUkRfVklSVFVBTFMuCgkocHJlcGFyZV9mcmVzaF92dGFibGUpOiBEZWxldGUgdW51c2VkIHZhcnMgUEFUSCBhbmQgUkVTVUxULgoJKG92ZXJyaWRlcyk6IERlbGV0ZSB1bnVzZWQgdmFycyBSRVRUWVBFIGFuZCBCQVNFX1JFVFRZUEUuCgkobW9kaWZ5X29uZV92dGFibGUpOiBEZWxldGUgdW51c2VkIHZhciBPTERfUlRUSS4KCShmaW5pc2hfc3RydWN0X2Fub24pOiBEZWxldGUgdW51c2VkIHZhcnMgT0ZGU0VUIGFuZCBYLgoJKGZpbmlzaF9zdHJ1Y3RfYml0cyk6IERlbGV0ZSB1bnVzZWQgdmFyIE1FVEhPRF9WRUMuCgkoZ2V0X2Jhc2VmbmRlY2xzKTogRGVsZXRlIHVudXNlZCB2YXIgUFVSUE9TRS4gIERlbGV0ZSB1bnVzZWQKCWZvci1zY29wZSBsb2NhbCB2YXJpYWJsZSBNRVRIT0RTLgoKCSogY2FsbC5jICh1c2VyX2hhcnNobmVzcyk6IERlbGV0ZSB1bnVzZWQvdW5uZWVkZWQgYXJnIFBBUk0uCgkoaWRlYWxfY2FuZGlkYXRlKTogRGVsZXRlIHVudXNlZCBhcmdzIEJBU0VUWVBFIGFuZCBQQVJNUy4KCShidWlsZF9tZXRob2RfY2FsbCk6IERlbGV0ZSB1bnVzZWQgYXJncyBwYXNzZWQgaW50byBpZGVhbF9jYW5kaWRhdGUuCgkoYnVpbGRfb3ZlcmxvYWRfY2FsbF9yZWFsKTogTGlrZXdpc2UuICBEZWxldGUgdW51c2VkIHZhciBPVkVSTE9BRF9OQU1FLgoJKiBjcC10cmVlLmggKHN5bnRoZXNpemVfbWV0aG9kKTogQWRkIGRlY2wuCgoJKiBkZWNsLmMgKG5vdGVfbGV2ZWxfZm9yX2Zvcik6IEdpdmUgdm9pZCByZXR1cm4gdHlwZS4KCShwdXNoZGVjbF9ub25jbGFzc19sZXZlbCk6IExpa2V3aXNlLgoJKGZpbmlzaF9mdW5jdGlvbik6IERlbGV0ZSB1bnVzZWQgdmFycyBWRklFTERTIGFuZCBBTExPQ0FURURfVEhJUy4KCShwb3BsZXZlbCk6IERlbGV0ZSB1bnVzZWQgdmFyIElNUExJQ0lUX1RSWV9CTE9DSy4KCShzdXNwZW5kX2JpbmRpbmdfbGV2ZWwpOiBEZWxldGUgdW51c2VkIHZhciBMRVZFTC4KCShkdXBsaWNhdGVfZGVjbHMpOiBEZWxldGUgdW51c2VkIHZhciBDVFlQRS4KCShkdXBsaWNhdGVfZGVjbHMpOiBEZWxldGUgdW51c2VkIHZhciBQUkVWSU9VU19DX0RFQ0wuCgkoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBEZWxldGUgdW51c2VkIHZhcnMgRkxPQVRfRU5ETElOSyBhbmQKCVBUUl9FTkRMSU5LLgoJKGdyb2tkZWNsYXJhdG9yKTogRGVsZXRlIHVudXNlZCB2YXIgQy4KCShncm9rZGVjbGFyYXRvcik6IERlbGV0ZSB1bnVzZWQgdmFyIFNJWkVfVkFSSUVTLgoJKGdyb2twYXJtcyk6IERlbGV0ZSB1bnVzZWQgdmFyIFNBV19WT0lELgoJKHN0YXJ0X2Z1bmN0aW9uKTogRGVsZXRlIHVudXNlZCB2YXIgT0xEREVDTC4KCShjcGx1c19leHBhbmRfZXhwcl9zdG10KTogRGVsZXRlIHVudXNlZCB2YXIKCVJFTU9WRV9JTVBMSUNJVF9JTU1FRElBVEVMWS4gCgoJKiBjcC10cmVlLmggKHB1c2hkZWNsX25vbmNsYXNzX2xldmVsKTogRml4IHByb3RvdHlwZS4KCgkqIE1ha2VmaWxlLmluIChDT05GTElDVFMpOiBVcGRhdGUgdG8gMTIgc2hpZnQvcmVkdWNlLgoKV2VkIEZlYiAyMSAwMDowNjoxNyAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiB0cmVlLmMgKGJ1aWxkX21pbik6IFNldCBUUkVFX0NPTVBMRVhJVFkgdG8gbGluZW5vLgoJKGJ1aWxkX21pbl9udCk6IExpa2V3aXNlLgoJKiBwdC5jIChkb19wdXNobGV2ZWwpOiBFbWl0IGxpbmUgbm90ZS4KCShkb19wb3BsZXZlbCk6IFJldHVybiB3aGF0IHdlIGdldCBmcm9tIHBvcGxldmVsLgoJKHRzdWJzdF9leHByKTogU2V0IGxpbmVubyBmcm9tIFRSRUVfQ09NUExFWElUWSBpbiBzdG10IG5vZGVzLgoJKiBwYXJzZS55OiBVc2UgZG9fcHVzaGxldmVsIGFuZCBkb19wb3BsZXZlbC4KCSogY3AtdHJlZS5oOiBEZWNsYXJlIGRvX3BvcGxldmVsLgoJCgkqIGNwLXRyZWUuaDogRGVjbGFyZSBhdF9lb2YuCgkqIGRlY2wuYyAoY3BfZmluaXNoX2RlY2wpOiBQYXNzIGl0IHRvIHJlc3Rfb2ZfZGVjbF9jb21waWxhdGlvbi4KCSogZGVjbDIuYyAoaW1wb3J0X2V4cG9ydF9kZWNsKTogUmVuYW1lZCBmcm9tIGltcG9ydF9leHBvcnRfaW5saW5lLgoJKGZpbmlzaF9maWxlKTogQ2FsbCBpdCB0byBkbyBpbnRlcmZhY2UgaGFuZGxpbmcgZm9yIHN0YXRpY3MuCgkqIHB0LmMgKHRzdWJzdF9jb3B5KTogQ2FsbCBtYXJrX3VzZWQgb24gdmFyaWFibGVzIGFuZCBmdW5jdGlvbnMKCXVzZWQgaGVyZS4KCgkqIGRlY2wyLmMgKGZpbmlzaF9maWxlKTogRG9uJ3QgZW1pdCBzdGF0aWNzIHdlIGNhbid0IGdlbmVyYXRlLgoJKiBwdC5jIChpbnN0YW50aWF0ZV9kZWNsKTogRG9uJ3Qgc2V0IGludGVyZmFjZSBvbiBpbnN0YW50aWF0aW9ucwoJd2UgY2FuJ3QgZ2VuZXJhdGUuCgoJKiBjcC10cmVlLmggKHN0cnVjdCB0aW5zdF9sZXZlbCk6IENoYW5nZSAnY2xhc3NuYW1lJyB0byAnZGVjbCcuCgkqIHRyZWUuYyAocHJpbnRfbGFuZ19zdGF0aXN0aWNzKTogUHJpbnQgbWF4IHRlbXBsYXRlIGRlcHRoLgoJKiBwdC5jIChwdXNoX3RpbnN0X2xldmVsKTogRHVtcCBlbnRpcmUgaW5zdGFudGlhdGlvbiBjb250ZXh0LgoJKGluc3RhbnRpYXRlX2NsYXNzX3RlbXBsYXRlKTogVXNlIGl0IGFuZCBwb3BfdGluc3RfbGV2ZWwuCgkoaW5zdGFudGlhdGVfZGVjbCk6IExpa2V3aXNlLgoKCSogY2FsbC5jIGNsYXNzLmMgY3AtdHJlZS5oIGRlY2wuYyBkZWNsMi5jIGVycm9yLmMgbGV4LmMgbWV0aG9kLmMKCXB0LmMgcHRyZWUuYyB0cmVlLmRlZjogUmVtb3ZlIGFsbCB0cmFjZXMgb2YgVU5JTlNUQU5USUFURURfUF9UWVBFLgoKVHVlIEZlYiAyMCAxODoyMTo1MSAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjYWxsLmMgY2xhc3MuYyBjcC10cmVlLmggY3Z0LmMgZGVjbC5jIGRlY2wyLmMgZXJyb3IuYyBleHByLmMKCWluaXQuYyBsZXguYyBtZXRob2QuYyBwYXJzZS55IHB0LmMgcmVwby5jIHNlYXJjaC5jIHNwZXcuYyB0cmVlLmMKCXRyZWUuZGVmIHR5cGVjay5jIHR5cGVjazIuYyB4cmVmLmM6IE1hc3NpdmUsIHN5c3RlbWljIGNoYW5nZXMgZm9yCgl0aGUgbmV3IHRlbXBsYXRlIGltcGxlbWVudGF0aW9uLgoKVHVlIEZlYiAyMCAxNzoxNDoyOSAxOTk2ICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBsaXNhLmN5Z251cy5jb20+CgoJKiBkZWNsMi5jIChjaGVja19jcF9jYXNlX3ZhbHVlKTogVXNlIFNUUklQX1RZUEVfTk9QUy4KClRodSBGZWIgMTUgMTg6NDQ6NDIgMTk5NiAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgoKCSogZGVjbC5jIChjcF9maW5pc2hfZGVjbCk6IERlbGF5IGVtaXR0aW5nIHRoZSBkZWJ1ZyBpbmZvcm1hdGlvbiBmb3IKCWEgdHlwZWRlZiB0aGF0IGhhcyBiZWVuIGluc3RhbGxlZCBhcyB0aGUgY2Fub25pY2FsIHR5cGVkZWYsIGlmIHRoZQoJdHlwZSBoYXMgbm90IHlldCBiZWVuIGRlZmluZWQuCgpUaHUgRmViIDE1IDA5OjM5OjA4IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGRlY2wyLmMgKGdyb2tmaWVsZCk6IFN0aWxsIGNhbGwgcG9wX25lc3RlZF9jbGFzcyBmb3IgYWNjZXNzIGRlY2xzLgoKV2VkIEZlYiAxNCAxNzozMDowNCAxOTk2ICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBsaXNhLmN5Z251cy5jb20+CgoJKiBkZWNsLmMgKGxvb2t1cF9sYWJlbCk6IENhbGwgbGFiZWxfcnR4LgoKCSogZGVjbC5jIChtYWtlX2JpbmRpbmdfbGV2ZWwpOiBOZXcgZnVuY3Rpb24uCgkocHVzaGxldmVsLCBwdXNobGV2ZWxfY2xhc3MpOiBDYWxsIGl0IGluc3RlYWQgb2YgZXhwbGljaXQKCWR1cGxpY2F0ZSBjYWxscyB0byB4bWFsbG9jLgoKCSogZGVjbC5jIChpbml0X2RlY2xfcHJvY2Vzc2luZyk6IERlbGV0ZSB1c2VsZXNzIGJ1aWxkX3BvaW50ZXJfdHlwZQoJY2FsbC4KCgkqIGRlY2wuYyAoZmxvYXRfZnR5cGVfZmxvYXQsIGxkb3VibGVfZnR5cGVfbGRvdWJsZSk6IEFkZCBkZWZpbml0aW9ucy4KCShzaXpldF9mdHlwZV9zdHJpbmcpOiBEZWxldGUgdmFyaWFibGUuCgkoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBBZGQgYnVpbHQtaW4gZnVuY3Rpb25zIGZhYnNmLCBmYWJzbCwKCXNxcnRmLCBzcXJ0bCwgc2luZiwgc2luLCBzaW5sLCBjb3NmLCBjb3MsIGNvc2wuICBOZXcgbG9jYWwKCXZhcmlhYmxlIHN0cmxlbl9mdHlwZSwgdXNlZCBmb3Igc3RybGVuLgoKV2VkIEZlYiAxNCAxNjoyMToyNSAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBkZWNsLmMgKHB1c2hfdG9fdG9wX2xldmVsKTogU3RhcnQgZnJvbSBjdXJyZW50X2JpbmRpbmdfbGV2ZWwKCWFnYWluIGZvciBub3c7IHRoZSBzdGwgaGFja3MgZGVwZW5kIG9uIGcrKyBiZWluZyBicm9rZW4gaW4gdGhpcwoJd2F5LCBhbmQgaXQnbGwgYmUgZml4ZWQgaW4gdGhlIHRlbXBsYXRlIHJld3JpdGUuCgoJKiB0cmVlLmRlZjogQWRkIFVTSU5HX0RFQ0wuCgkqIGRlY2wyLmMgKGRvX2NsYXNzX3VzaW5nX2RlY2wpOiBJbXBsZW1lbnQuCgkoZ3Jva2ZpZWxkKTogUGFzcyBhY2Nlc3MgZGVjbHMgb2ZmIHRvIGRvX2NsYXNzX3VzaW5nX2RlY2wgaW5zdGVhZCBvZgoJZ3Jva2RlY2xhcmF0b3IuCgkqIGVycm9yLmMgKGR1bXBfZGVjbCk6IEhhbmRsZSBVU0lOR19ERUNMcy4KCSogZGVjbC5jIChncm9rZGVjbGFyYXRvcik6IFJlbW92ZSBjb2RlIGZvciBoYW5kbGluZyBhY2Nlc3MgZGVjbHMuCgkqIGNsYXNzLmMgKGZpbmlzaF9zdHJ1Y3RfMSk6IEFkanVzdCBhY2NvcmRpbmdseSwgdHJlYXQgdXNpbmctZGVjbHMKCWFzIGFjY2VzcyBkZWNscyBmb3Igbm93LgoJKGZpbmlzaF9zdHJ1Y3QpOiBEb24ndCBjaGVjayBVU0lOR19ERUNMcyBmb3Igb3RoZXIgdXNlcyBvZiB0aGUgbmFtZS4KCgkqIHNlYXJjaC5jIChnZXRfbWF0Y2hpbmdfdmlydHVhbCk6IFVzZSBjcF9lcnJvcl9hdC4KCldlZCBGZWIgMTQgMTA6MzY6NTggMTk5NiAgQnJlbmRhbiBLZWhvZSAgPGJyZW5kYW5AbGlzYS5jeWdudXMuY29tPgoKCSogdHlwZWNrLmMgKGNvbXB0eXBlcyk6IERlZmF1bHQgQ09NUF9UWVBFX0FUVFJJQlVURVMgdG8gMSwgdG8KCW1hdGNoIGMtdHlwZWNrLmMuCgkoc2VsZl9wcm9tb3RpbmdfYXJnc19wKTogTW92ZSB0aGUgY2hlY2sgdGhhdCBUWVBFIGlzIG5vbi1uaWwKCWJlZm9yZSB0cnlpbmcgdG8gbG9vayBhdCBpdHMgbWFpbiB2YXJpYW50LgoJKHVuc2lnbmVkX3R5cGUsIHNpZ25lZF90eXBlKTogQWRkIGNoZWNraW5nIG9mIERJL1NJL0hJL1FJIG5vZGVzLgoKCSogY3AtdHJlZS5oIChERUNMX1dBSVRJTkdfRlJJRU5EUywgU0VUX0RFQ0xfV0FJVElOR19GUklFTkRTKToKCURlbGV0ZSBtYWNyb3MuCgkqIGluaXQuYyAoeHJlZl9mcmllbmQsIGVtYnJhY2Vfd2FpdGluZ19mcmllbmRzKTogRGVsZXRlIGZ1bmN0aW9ucy4KCShkb19mcmllbmQpOiBEZWxldGUgY2FsbCB0byB4cmVmX2ZyaWVuZC4KCSogY2xhc3MuYyAoZmluaXNoX3N0cnVjdF8xKTogRGVsZXRlIGNhbGwgdG8gZW1icmFjZV93YWl0aW5nX2ZyaWVuZHMuCgoJKiB0eXBlY2suYyAoY29udmVydF9zZXF1ZW5jZSk6ICNpZiAwIHVudXNlZCBmdW5jdGlvbi4KCgkqIGNwLXRyZWUuaCAoREVDTF9JTl9NRU1PUllfUCk6IE5ldyBtYWNybyB3LyB0aGUgY2hlY2sgdGhhdCB1c2VkIHRvCgliZSBpbiBkZWNsX2luX21lbW9yeV9wLgoJKGRlY2xfaW5fbWVtb3J5X3ApOiBEZWxldGUgZGVjbC4KCSogZXhwci5jIChkZWNsX2luX21lbW9yeV9wKTogRGVsZXRlIGZuLgoJKiB0eXBlY2suYyAobWFya19hZGRyZXNzYWJsZSk6IFVzZSBERUNMX0lOX01FTU9SWV9QLgoKCSogZGVjbC5jIChjcF9maW5pc2hfZGVjbCk6IFVzZSBERUNMX0lOX01FTU9SWV9QLgoKVHVlIEZlYiAxMyAxMjo1MToyMSAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjbGFzcy5jIChmaW5pc2hfc3RydWN0XzEpOiBDaGVjayBmb3IgYSBwdXJlLXNwZWNpZmllciBvbiBhCglub24tdmlydHVhbCBmdW5jdGlvbiBoZXJlLgoKCSogZGVjbDIuYyAoZ3Jva19mdW5jdGlvbl9pbml0KTogRG9uJ3QgY2hlY2sgd2hldGhlciB0aGUgZnVuY3Rpb24KCWlzIHZpcnR1YWwgaGVyZS4KCShncm9rZmllbGQpOiBEb24ndCBjYWxsIGNoZWNrX2Zvcl9vdmVycmlkZSBoZXJlLgoKCSogZGVjbC5jIChwdXNoX3RvX3RvcF9sZXZlbCk6IFN0YXJ0IGZyb20gaW5uZXJfYmluZGluZ19sZXZlbCwKCWNoZWNrIGNsYXNzX3NoYWRvd2VkIGluIGNsYXNzIGxldmVscy4KCk1vbiBGZWIgMTIgMTc6NDY6NTkgMTk5NiAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgoKCSogZGVjbC5jIChyZXN1bWVfbGV2ZWwpOiBJZ25vcmUgdGhpbmdzIHRoYXQgZG9uJ3QgaGF2ZSBuYW1lcywgaW5zdGVhZAoJb2YgY29yZSBkdW1waW5nLgoKTW9uIEZlYiAxMiAxNTo0Nzo0NCAxOTk2ICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBsaXNhLmN5Z251cy5jb20+CgoJKiBkZWNsMi5jIChncm9rZmllbGQpOiBTZXQgREVDTF9WSU5ERVggcHJvcGVybHkgZm9yIEZVTkNUSU9OX0RFQ0xzLgoKU2F0IEZlYiAxMCAxNzo1OTo0NSAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjbGFzcy5jIChmaW5pc2hfc3RydWN0XzEpOiBTZXQgREVDTF9WSU5ERVggcHJvcGVybHkgb24gYQoJc3ludGhlc2l6ZWQgZHRvci4KCgkqIHBhcnNlLnkgKGNvbXBsZXRlX3R5cGVfbmFtZSk6IEJpbmQgZ2xvYmFsX3Njb3BlIGVhcmxpZXIuCgkoY29tcGxleF90eXBlX25hbWUpOiBMaWtld2lzZS4KCShxdWFsaWZpZWRfdHlwZV9uYW1lKTogUmVtb3ZlLgoKVGh1IEZlYiAgOCAxNToxNToxNCAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBkZWNsLmMgKGdyb2tmbmRlY2wpOiBNb3ZlIGNvZGUgdGhhdCBsb29rcyBmb3IgdmlydHVhbHMgaW4gYmFzZQoJY2xhc3Nlcy4uLgoJKiBjbGFzcy5jIChjaGVja19mb3Jfb3ZlcnJpZGUpOiAuLi4gdG8gYSBuZXcgZnVuY3Rpb24uCgkoZmluaXNoX3N0cnVjdF8xKTogQ2FsbCBpdC4KCgkqIGNwLXRyZWUuaDogRGVjbGFyZSB3YXJuX3NpZ25fY29tcGFyZS4KCgkqIHR5cGVjay5jIChidWlsZF9iaW5hcnlfb3Bfbm9kZWZhdWx0KTogQ2hlY2sgd2Fybl9zaWduX2NvbXBhcmUKCXJhdGhlciB0aGFuIGV4dHJhX3dhcm5pbmdzIHRvIGRlY2lkZSB3aGV0aGVyIHRvIHdhcm4gYWJvdXQKCWNvbXBhcmlzb24gb2Ygc2lnbmVkIGFuZCB1bnNpZ25lZC4KCgkqIGRlY2wyLmMgKGxhbmdfZGVjb2RlX29wdGlvbik6IEhhbmRsZSB3YXJuX3NpZ25fY29tcGFyZS4gIC1XYWxsCglpbXBsaWVzIC1Xc2lnbi1jb21wYXJlLiAgLVdhbGwgZG9lc24ndCBpbXBseSAtVy4KCldlZCBGZWIgIDcgMTU6Mjc6NTcgMTk5NiAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgoKCSogdHlwZWNrLmMgKGJ1aWxkX2NvbXBvbmVudF9yZWYpOiBGaXggdG8gaGFuZGxlIGFub24gdW5pb25zIGluIGJhc2UKCWNsYXNzZXMgYXMgd2VsbC4KCldlZCBGZWIgIDcgMTQ6Mjk6MTIgMTk5NiAgQnJlbmRhbiBLZWhvZSAgPGJyZW5kYW5AbGlzYS5jeWdudXMuY29tPgoKCSogY2xhc3MuYyAocmVzb2x2ZXNfdG9fZml4ZWRfdHlwZV9wKTogRGVsZXRlIGNvZGUgZGVhbGluZyB3aXRoCglhIFdJVEhfQ0xFQU5VUF9FWFBSLCBzaW5jZSB3ZSBkb24ndCBnZW5lcmF0ZSB0aGVtIGFueSBtb3JlLgoJKiBjdnQuYyAoYnVpbGRfdXBfcmVmZXJlbmNlKTogTGlrZXdpc2UuCgkqIGRlY2wuYyAoZ3Jva19yZWZlcmVuY2VfaW5pdCk6IExpa2V3aXNlLgoJKGNwX2ZpbmlzaF9kZWNsKTogTGlrZXdpc2UuCgkqIGVycm9yLmMgKGR1bXBfZXhwcik6IExpa2V3aXNlLgoJKiB0cmVlLmMgKHJlYWxfbHZhbHVlX3ApOiBMaWtld2lzZS4KCShsdmFsdWVfcCk6IExpa2V3aXNlLgoJKGJ1aWxkX2NwbHVzX25ldyk6IExpa2V3aXNlLgoJKHVuc2F2ZV9leHByX25vdyk6IExpa2V3aXNlLgoJKiB0eXBlY2suYyAodW5hcnlfY29tcGxleF9sdmFsdWUsIGJ1aWxkX21vZGlmeV9leHByLAoJY19leHBhbmRfcmV0dXJuKTogTGlrZXdpc2UuCgpUdWUgRmViICA2IDEzOjM5OjIyIDE5OTYgIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGxpc2EuY3lnbnVzLmNvbT4KCglNYWtlIHRoZSBDKysgZnJvbnQtZW5kIHBheSBhdHRlbnRpb24gdG8gYXR0cmlidXRlcyBmb3Igc3RydWN0dXJlcy4KCSogY2xhc3MuYyAoZmluaXNoX3N0cnVjdCk6IE5ldyBhcmd1bWVudCBBVFRSSUJVVEVTLCBwYXNzZWQgZG93biBpbnRvCglmaW5pc2hfc3RydWN0XzEuCgkoZmluaXNoX3N0cnVjdF8xKTogTmV3IGFyZ3VtZW50IEFUVFJJQlVURVM7IGNhbGwgY3BsdXNfZGVjbF9hdHRyaWJ1dGVzLgoJVGFrZSBvdXQgb2xkIHJvdW5kX3VwX3NpemUgdXNlIGFuZCBzZXR0aW5nIHRoZSBERUNMX0FMSUdOIHBvc3NpYmx5Cgl1c2luZyBpdC4gIFRha2Ugb3V0IHNldHRpbmcgb2YgVFlQRV9BTElHTiB0byByb3VuZF91cF9zaXplLCB3aGljaAoJY2FuIG92ZXJyaWRlIHdoYXQgdGhlIGF0dHJpYnV0ZSBzZXQuCgkqIGNwLXRyZWUuaCAoZmluaXNoX3N0cnVjdCk6IFVwZGF0ZSBwcm90b3R5cGUuCgkqIHBhcnNlLnkgKHRlbXBsYXRlX2luc3RhbnRpYXRlX29uY2UpOiBQYXNzIGEgTlVMTF9UUkVFIGZvciB0aGUKCWF0dHJpYnV0ZXMgdG8gZmluaXNoX3N0cnVjdC4KCShzdHJ1Y3RzcCk6IEZvciBhIENMQVNTIGRlY2wsIGFkZCBtYXliZV9hdHRyaWJ1dGUgdG8gcnVsZSBhbmQgcGFzcyB0aGF0Cgl2YWx1ZSBkb3duIGludG8gZmluaXNoX3N0cnVjdC4KCSogTWFrZWZpbGUuaW4gKENPTkZMSUNUUyk6IFN3aXRjaCB0byA3IHNoaWZ0L3JlZHVjZSBjb25mbGljdHMuCgpUdWUgRmViICA2IDEzOjEyOjE1IDE5OTYgIFBlciBCb3RobmVyICA8Ym90aG5lckBrYWxlc3Npbi5jeWdudXMuY29tPgoKCSogZGVjbC5jIChwb3BsZXZlbCk6ICBSZS13b3JkIGRlYWQgZm9yIGxvY2FsIGhhbmRsaW5nLgoJKHB1c2hkZWNsKTogIFJlbW92ZSB1c2VsZXNzIERFQ0xfREVBRF9GT1JfTE9DQUwgdGVzdC4KCShjcF9maW5pc2hfZGVjbCk6ICBJZiBpc19mb3Jfc2NvcGUsIGNoZWNrIGZvciBkdXBsaWNhdGVzIHNvCgl3ZSBjYW4gZGlzYWJsZSBpc19mb3Jfc2NvcGUuICBPdGhlcndpc2UsIHByZXNlcnZlX3RlbXBfc2xvdHMuCgoJKiBsZXguYyAoZG9faWRlbnRpZmllcik6ICBVc2UgZ2xvYmFsIGJpbmRpbmcgaW4gcHJlZmVyZW5jZSBvZgoJZGVhZCBmb3IgbG9jYWwgdmFyaWFibGUuCgpNb24gRmViICA1IDE3OjQ2OjQ2IDE5OTYgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIGluaXQuYyAoaW5pdGlhbGl6aW5nX2NvbnRleHQpOiBIYW5kbGUgYW5vbiB1bmlvbiBjaGFuZ2VzLCB0aGUKCWNvbnRleHQgd2hlcmUgZmllbGRzIG9mIGFub24gdW5pb25zIGNhbiBiZSBpbml0aWFsaXplZCBub3cgaGFzIHRvIGJlCglmb3VuZCBieSB3YWxraW5nIHVwIHRoZSBUWVBFX0NPTlRFWFQgY2hhaW4uCgpGcmkgRmViICAyIDE0OjU0OjA0IDE5OTYgIERvdWcgRXZhbnMgIDxkamVAY2hhcm1lZC5jeWdudXMuY29tPgoKCSogZGVjbC5jIChzdGFydF9kZWNsKTogI2lmZGVmIG91dCBjb2RlIHRvIHNldCBERUNMX0NPTU1PTgoJaWYgQVNNX09VVFBVVHssX0FMSUdORUR9X0JTUyBpcyBkZWZpbmVkLgoJKG9ic2N1cmVfY29tcGxleF9pbml0KTogSWYgYnNzIGlzIHN1cHBvcnRlZCwgYWx3YXlzIHNldAoJREVDTF9JTklUSUFMIHRvIGVycm9yX21hcmtfbm9kZS4KClRodSBGZWIgIDEgMTY6MTk6NTYgMTk5NiAgQnJlbmRhbiBLZWhvZSAgPGJyZW5kYW5AbGlzYS5jeWdudXMuY29tPgoKCSogaW5pdC5jIChpc19mcmllbmQpOiBNYWtlIHN1cmUgdGhlcmUncyBhIGNvbnRleHQgYmVmb3JlIHdlIHNlZSBpZgoJaXQncyBhbiBhZ2dyIHR5cGUuCgpUaHUgRmViICAxIDE1OjQ0OjUzIDE5OTYgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIGluaXQuYyAoaXNfZnJpZW5kKTogQ2xhc3NlcyBhcmUgbm90IGZyaWVuZGx5IHdpdGggbmVzdGVkIGNsYXNzZXMuCgpUaHUgRmViICAxIDE1OjI3OjM3IDE5OTYgIERvdWcgRXZhbnMgIDxkamVAY2hhcm1lZC5jeWdudXMuY29tPgoKCSogbGV4LmMgKGNoZWNrX25ld2xpbmUpOiBQYXNzIGxhc3QgY2hhcmFjdGVyIHJlYWQgdG8gSEFORExFX1BSQUdNQSwKCWFuZCByZWNvcmQgaXRzIHJlc3VsdC4KClRodSBGZWIgIDEgMDk6Mjc6MDEgMTk5NiAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgoKCSogY2xhc3MuYyAoZmluaXNoX3N0cnVjdF9hbm9uKTogU3dpdGNoIGFyb3VuZCBjb2RlIHRvIG5vdCBtb3ZlIGFub24KCXVuaW9uIGVsZW1lbnRzIGFyb3VuZCwgbm9yIG1lc3MgdXAgdGhlaXIgY29udGV4dHMsIG5vciBvZmZzZXRzLAoJaW5zdGVhZCB3ZSBub3cgYnVpbGQgdXAgdGhlIHJpZ2h0IG51bWJlciBvZiBDT01QT05FTlRfUkVGcyBmb3IgYWxsCgl0aGUgYW5vbiB1bmlvbnMgdGhhdCBtYXkgYmUgcHJlc2VudCBhdCBidWlsZF9jb21wb25lbnRfcmVmIHRpbWUuCgkqIHR5cGVjay5jIChsb29rdXBfYW5vbl9maWVsZCk6IE5ldyByb3V0aW5lIHRvIGhhbmRsZSBmaWVsZCBsb29rdXAKCW9uIGZpZWxkcyB3aXRob3V0IG5hbWVzLiAgV2UgZmluZCB0aGVtLCBiYXNlZCB1cG9uIHRoZWlyIHVuaXF1ZSB0eXBlCglpbnN0ZWFkLgoJKiB0eXBlY2suYyAoYnVpbGRfY29tcG9uZW50X3JlZik6IEFsbG93IEZJRUxEX0RFQ0wgY29tcG9uZW50cy4KCUhhbmRsZSBmaW5kaW5nIGNvbXBvbmVudHMgaW4gYW5vbnltb3VzIHVuaW9ucywgYW5kIGVuc3VyZSB0aGF0IGEKCUNPTVBPTkVOVF9SRUYgaXMgYnVpbHQgZm9yIGVhY2ggbGV2ZWwgYXMgbmVjZXNzYXJ5LgoKVHVlIEphbiAzMCAxODoxODoyMyAxOTk2ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiBjdnQuYyAoYnVpbGRfdXBfcmVmZXJlbmNlKTogTWFrZSB0aGUgSU5ESVJFQ1RfQklORCBjYXNlIGNvbWUgYWZ0ZXIKCWNvZGUgdGhhdCBlbnN1cmVzIHRoYXQgY29weSBjdG9ycyBhcmUgdXNlZCBpZiBhcHByb3ByaWF0ZS4KClR1ZSBKYW4gMzAgMTc6MzU6MTQgMTk5NiAgQnJlbmRhbiBLZWhvZSAgPGJyZW5kYW5AbGlzYS5jeWdudXMuY29tPgoKCSogaW5pdC5jIChidWlsZF92ZWNfZGVsZXRlKTogT25seSBnaXZlIGFuIGVycm9yIGlmIGJhc2UgaXNuJ3QgYW4KCWVycm9yX21hcmtfbm9kZS4KCk1vbiBKYW4gMjkgMTc6MDk6MDYgMTk5NiAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgoKCSogc3Bldy5jIChkb19hZ2dyKTogYG5ldyBzdHJ1Y3QgUzsnIGlzbid0IGEgZm9yd2FyZCBkZWNsYXJhdGlvbi4KCSh5eWxleCk6IElmIHdlIHNlZSBgbmV3Jywga2VlcCBzbHVycGluZy4KClRodSBKYW4gMjUgMTg6MzE6MzYgMTk5NiAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgoKCSogY2xhc3MuYyAoZmluaXNoX3N0cnVjdF8xKTogTW92ZSBjb2RlIGZvciBoYW5kbGluZyBhbm9uIHVuaW9ucy4uLgoJKGZpbmlzaF9zdHJ1Y3RfYW5vbik6IHRvIGhlcmUuICBGaXh1cCBzbyB0aGF0IHdlIGRvIHRoZSBvZmZzZXQKCWNhbGN1bGF0aW9ucyByaWdodCwgYW5kIHNvIHRoYXQgdGhlIGZpZWxkcyBhcmUgcGh5c2ljYWxseSBtb3ZlZCB0bwoJdGhlIGNvbnRhaW5lcnMncyBjaGFpbi4KClRodSBKYW4gMjUgMTg6Mjc6MzcgMTk5NiAgQnJlbmRhbiBLZWhvZSAgPGJyZW5kYW5AbGlzYS5jeWdudXMuY29tPgoKCSogZGVjbC5jIChncm9rZGVjbGFyYXRvcik6IEF2b2lkIHRyeWluZyB0byBnZXQgYW4gb3BlcmFuZCBvZmYgYW4KCWlkZW50aWZpZXIgbm9kZS4KCldlZCBKYW4gMjQgMTE6MjU6MzAgMTk5NiAgSmltIFdpbHNvbiAgPHdpbHNvbkBjaGVzdG51dC5jeWdudXMuY29tPgoKCSogdHlwZWNrLmMgKHBvaW50ZXJfaW50X3N1bSk6IFVzZSBUWVBFX1BSRUNJU0lPTiAoc2l6ZXR5cGUpIG5vdAoJUE9JTlRFUl9TSVpFIHRvIGFncmVlIHdpdGggZXhwci5jLgoKVGh1IEphbiAyNSAxMzowMToyMyAxOTk2ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiBzZWFyY2guYyAobG9va3VwX2ZpZWxkKTogRG9uJ3QgcmVwb3J0IGFtYmlndWl0aWVzIGlmIHByb3RlY3QgaXMgMCwKCWluc3RlYWQgcmV0dXJuIE5VTExfVFJFRS4KCldlZCBKYW4gMjQgMTM6MDE6MjYgMTk5NiAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgoKCSogY2xhc3MuYyAoZmluaXNoX3N0cnVjdF8xKTogQ2FsbCB3YXJuX2hpZGRlbiBpZiB3ZSB3YW50IHdhcm5pbmdzCglhYm91dCBvdmVybG9hZGVkIHZpcnR1YWwgZnVuY3Rpb25zLgoJKHdhcm5faGlkZGVuKTogTmV3IHJvdXRpbmUgdG8gd2FybiBvZiB2aXJ0dWFsIGZ1bmN0aW9ucyB0aGF0IGFyZQoJaGlkZGVuIGJ5IG90aGVyIHZpcnR1YWwgZnVuY3Rpb25zLCB0aGF0IGFyZSBub3Qgb3ZlcnJpZGRlbi4KCShnZXRfYmFzZWZuZGVjbHMpOiBOZXcgcm91dGluZSwgdXNlZCBieSB3YXJuX2hpZGRlbi4KCShtYXJrX292ZXJyaWRlcnMpOiBOZXcgcm91dGluZSwgdXNlZCBieSB3YXJuX2hpZGRlbi4KCSogc2VhcmNoLmMgKGdldF9tYXRjaGluZ192aXJ0dWFsKTogUmVtb3ZlIG9sZCB3YXJuaW5nIHRoYXQganVzdAoJaXNuJ3QgdmVyeSB1c2VmdWwuCgpUdWUgSmFuIDIzIDEyOjI2OjEwIDE5OTYgIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGxpc2EuY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAob3V0cHV0X2J1aWx0aW5fdGRlc2NfZW50cmllcyk6ICNpZiAwIHRoZSBmdW5jdGlvbiBkZWZpbml0aW9uLgoKCSogdHlwZWNrLmMgKG51bGxfcHRyX2NzdF9wKTogRGVsZXRlIHVudXNlZCBmbi4KCShidWlsZF9mdW5jdGlvbl9jYWxsX21heWJlKTogRGVsZXRlIHVudXNlZCBmbi4KCgkqIGV4cHIuYyAoZXh0cmFjdF9pbml0KTogI2lmIDAgdGhlIGNvZGUgYWZ0ZXIgdW5jb25kaXRpb25hbCByZXR1cm4gMAoJZm9yIG5vdy4KCglEZWxldGUgb2xkIGNhZGlsbGFjIGNvZGUuCgkqIGVkc2VsLmM6IFJlbW92ZSBmaWxlLgoJKiBNYWtlLWxhbmcuaW4gKENYWF9TUkNTKTogVGFrZSBlZHNlbC5jIG9mZiB0aGUgbGlzdC4KCSogTWFrZWZpbGUuaW4gKENYWF9PQkpTKTogRGVsZXRlIGVkc2VsLm8uCgkoZWRzZWwubyk6IERlbGV0ZSBydWxlLgoJKiBjcC10cmVlLmggKGZsYWdfY2FkaWxsYWMpOiBEZWxldGUgdmFyIGRlY2wuCgkqIGxhbmctb3B0aW9ucy5oOiBEZWxldGUgIi1mY2FkaWxsYWMiIGFuZCAiLWZuby1jYWRpbGxhYyIuCgkqIGRlY2wyLmMgKGZsYWdfY2FkaWxsYWMpOiBEZWxldGUgdmFyIGRlZmluaXRpb24uCgkobGFuZ19kZWNvZGVfb3B0aW9uKTogRGVsZXRlIGhhbmRsaW5nIG9mIC1mY2FkaWxsYWMgYW5kIC1mbm8tY2FkaWxsYWMuCgkoZ3Jva2ZpZWxkKTogRGVsZXRlIGNvZGUgZGVwZW5kaW5nIG9uIGZsYWdfY2FkaWxsYWMuCgkoZmluaXNoX2Fub25fdW5pb24pOiBMaWtld2lzZS4KCSogY2xhc3MuYyAoZmluaXNoX3N0cnVjdF8xKTogTGlrZXdpc2UuCgkocHVzaGNsYXNzKTogTGlrZXdpc2UuCgkocG9wY2xhc3MpOiBMaWtld2lzZS4KCShwdXNoX2xhbmdfY29udGV4dCk6IExpa2V3aXNlLgoJKHBvcF9sYW5nX2NvbnRleHQpOiBMaWtld2lzZS4KCSogZGVjbC5jIChpbml0X2RlY2xfcHJvY2Vzc2luZyk6IExpa2V3aXNlLgoJKHN0YXJ0X2RlY2wpOiBMaWtld2lzZS4KCShjcF9maW5pc2hfZGVjbCk6IExpa2V3aXNlLgoJKHhyZWZfdGFnKTogTGlrZXdpc2UuCgkoZmluaXNoX2VudW0pOiBMaWtld2lzZS4KCShzdGFydF9mdW5jdGlvbik6IExpa2V3aXNlLgoJKGZpbmlzaF9mdW5jdGlvbik6IExpa2V3aXNlLgoJKGZpbmlzaF9zdG10KTogTGlrZXdpc2UuCgkqIGxleC5jIChsYW5nX2luaXQpOiBMaWtld2lzZS4KCShjaGVja19uZXdsaW5lKTogTGlrZXdpc2UuCgoJKiBsZXguYyAoZG9fcGVuZGluZ19pbmxpbmVzKTogRGVsZXRlIHN5bnRoZXNpemVkIG1ldGhvZCBrbHVkZ2UuCgoJRGVsZXRlIGRlZnVuY3QsIGFuY2llbnQgZ2FyYmFnZSBjb2xsZWN0aW9uIGltcGxlbWVudGF0aW9uLgoJKiBydHRpLmM6IE5ldyBmaWxlIHdpdGggdGhlIFJUVEkgc3R1ZmYgZnJvbSBnYy5jLgoJKiBnYy5jOiBSZW1vdmVkIGZpbGUgKG1vdmVkIHRoZSByZW1haW5pbmcgc3R1ZmYgaW50byBydHRpLmMpLgoJKiBNYWtlZmlsZS5pbiAoQ1hYX09CSlMpOiBSZXBsYWNlIGdjLm8gd2l0aCBydHRpLm8uCgkocnR0aS5vKTogTmV3IHJ1bGUsIHJlcGxhY2luZyBnYy5vLgoJKiBNYWtlLWxhbmcuaW4gKENYWF9TUkNTKTogUmVwbGFjZSBnYy5jIHdpdGggcnR0aS5jLgoJKiBjcC10cmVlLmg6IERlbGV0ZSBnYy1yZWxhdGVkIGZuIGRlY2xzLgoJKERFQ0xfR0NfT0ZGU0VUKTogRGVsZXRlIG1hY3JvLgoJKGZsYWdfZ2MpOiBEZWxldGUgZXh0ZXJuIGRlY2wuCgkqIGRlY2wuYyAoY3VycmVudF9mdW5jdGlvbl9vYnN0YWNrX2luZGV4KTogRGVsZXRlIHZhciBkZWNsLgoJKGN1cnJlbnRfZnVuY3Rpb25fb2JzdGFja191c2FnZSk6IERlbGV0ZSB2YXIgZGVjbC4KCShzdGFydF9mdW5jdGlvbik6IERlbGV0ZSBjbGVhcmluZyBvZiBjdXJyZW50X2Z1bmN0aW9uX29ic3RhY2tfaW5kZXgKCWFuZCBjdXJyZW50X2Z1bmN0aW9uX29ic3RhY2tfdXNhZ2UuCgkoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBEZWxldGUgY29kZSByZWx5aW5nIG9uIC1mZ2MuCglEZWxldGUgY2FsbCB0byBpbml0X2djX3Byb2Nlc3NpbmcuCgkoY3BfZmluaXNoX2RlY2wpOiBEZWxldGUgY2FsbHMgdG8gYnVpbGRfc3RhdGljX2djX2VudHJ5IGFuZAoJdHlwZV9uZWVkc19nY19lbnRyeS4gIERlbGV0ZSBnYyBjb2RlIHNldHRpbmcgREVDTF9HQ19PRkZTRVQuCgkoc3RvcmVfcGFybV9kZWNscyk6IERlbGV0ZSAtZmdjIGNhbGxzIHRvIGNwX2V4cGFuZF9kZWNsX2NsZWFudXAKCWFuZCB0byBleHBhbmRfZXhwciBvZiBhIF9fZ2NfbWFpbiBjYWxsLgoJKG1heWJlX2djX2NsZWFudXApOiBEZWxldGUgdmFyIGRlY2wuCgkoZmluaXNoX2Z1bmN0aW9uKTogRGVsZXRlIGNhbGwgdG8gZXhwYW5kX2djX3Byb2xvZ3VlX2FuZF9lcGlsb2d1ZS4KCSogZGVjbDIuYyAoZmxhZ19nYyk6IERlbGV0ZSB2YXIgZGVjbC4KCShsYW5nX2Zfb3B0aW9ucyk6IERlbGV0ZSBvZmZlcmluZyBvZiAtZmdjLgoJKGxhbmdfZGVjb2RlX29wdGlvbik6IERlbGV0ZSAtZmdjIGFuZCAtZm5vLWdjIGhhbmRsaW5nLgoJKGdldF90ZW1wX3JlZ3Zhcik6IERlbGV0ZSBnYyBjb2RlLgoJKiBpbml0LmMgKGJ1aWxkX25ldyk6IERlbGV0ZSBnYyBjb2RlLgoJKiBsZXguYyAoaW5pdF9sZXgpOiBEZWxldGUgY2hlY2tpbmcgb2YgZmxhZ19nYy4KCgkqIHR5cGVjay5jIChjb252ZXJ0X2FyZ3VtZW50cyk6IERlbGV0ZSBnYyBjb2RlLgoJKGJ1aWxkX2NvbXBvbmVudF9hZGRyKTogRGVsZXRlIC1mZ2Mgd2FybmluZy4KCShidWlsZF9tb2RpZnlfZXhwcik6IERlbGV0ZSBnYyBjb2RlLgoKCSogZGVjbDIuYyAoYnVpbGRfcHVzaF9zY29wZSk6IERlbGV0ZSBmbi4KCSogY3AtdHJlZS5oIChidWlsZF9wdXNoX3Njb3BlKTogRGVsZXRlIGRlY2wuCgoJKiBzZWFyY2guYyAoY2xlYXJfc2VhcmNoX3Nsb3RzKTogRGVsZXRlIGZuLgoJKiBjcC10cmVlLmggKGNsZWFyX3NlYXJjaF9zbG90cyk6IERlbGV0ZSBkZWNsLgoKCSogc2VhcmNoLmMgKHRyZWVfbmVlZHNfY29uc3RydWN0b3JfcCk6IERlbGV0ZSBmbi4KCSogY3AtdHJlZS5oICh0cmVlX25lZWRzX2NvbnN0cnVjdG9yX3ApOiBEZWxldGUgZGVjbC4KCgkqIHRyZWUuYyAoaWRfY21wKTogRGVsZXRlIGZuLgoKCSogdHJlZS5jIChzZXRfZm5hZGRyX2Zyb21fdnRhYmxlX2VudHJ5KTogRGVsZXRlIGZuLgoJKiBjcC10cmVlLmggKHNldF9mbmFkZHJfZnJvbV92dGFibGVfZW50cnkpOiBEZWxldGUgZGVjbC4KCgkqIHRyZWUuYyAoZGVjbF92YWx1ZV9tZW1iZXIpOiBEZWxldGUgZm4uCgkqIGNwLXRyZWUuaCAoZGVjbF92YWx1ZV9tZW1iZXIpOiBEZWxldGUgZGVjbC4KCgkqIHRyZWUuYyAobGlzdF9oYXNoX2xvb2t1cF9vcl9jb25zKTogRGVsZXRlIGZuLgoJKiBjcC10cmVlLmggKGxpc3RfaGFzaF9sb29rdXBfb3JfY29ucyk6IERlbGV0ZSBkZWNsLgoKCSogbWV0aG9kLmMgKGNwbHVzX2V4Y2VwdGlvbl9uYW1lKTogRGVsZXRlIGZuLgoJKEVYQ0VQVElPTl9OQU1FX3tQUkVGSVgsIExFTkdUSH0pOiBEZWxldGUgbWFjcm9zLgoKCSogc3Bldy5jIChzaGlmdF90b2tlbnMpOiBEZWxldGUgZm4uCgpNb24gSmFuIDIyIDE3OjQ5OjMzIDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGV4Y2VwdC5jIChpbml0X2V4Y2VwdGlvbl9wcm9jZXNzaW5nKTogUGFzcyAxIHRvIG5lZWRzX3BvcCBpbiBjYWxscwoJdG8gY3BfZmluaXNoX2RlY2wuCgkqIHBhcnNlLnk6IExpa2V3aXNlLgoKTW9uIEphbiAyMiAxNzozNDoyOSAxOTk2ICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBsaXNhLmN5Z251cy5jb20+CgoJKiB0cmVlLmMgKGJ1aWxkX2NwbHVzX3N0YXRpY2ZuX3R5cGUpOiBEZWxldGUgZnVuY3Rpb24gZGVmaW5pdGlvbjsKCW5ldmVyIHVzZWQuCgkqIGNwLXRyZWUuaCAoYnVpbGRfY3BsdXNfc3RhdGljZm5fdHlwZSk6IERlbGV0ZSBkZWNsLgoKCSogdHJlZS5jICh2aXJ0dWFsX21lbWJlcik6IERlbGV0ZSBmdW5jdGlvbiBkZWZpbml0aW9uOyBuZXZlciB1c2VkLgoJKiBjcC10cmVlLmggKHZpcnR1YWxfbWVtYmVyKTogRGVsZXRlIGRlY2wuCgpGcmkgSmFuIDE5IDE4OjAzOjE0IDE5OTYgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIHR5cGVjay5jIChidWlsZF9jb21wb25lbnRfcmVmKTogSGFuZGxlIGdldHRpbmcgdmJhc2UgcG9pbnRlcnMKCW91dCBvZiBjb21wbGV4IG11bHRpcGxlIGluaGVyaXRhbmNlIGJldHRlci4KCkZyaSBKYW4gMTkgMTY6Mjc6NDAgMTk5NiAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgoKCSogdHlwZWNrLmMgKGJ1aWxkX29iamVjdF9yZWYpOiBNYWtlIHN1cmUgd2UgdXNlIHRoZSByZWFsIHR5cGUsIG5vdAoJYW55IHJlZmVyZW5jZSB0eXBlLgoKRnJpIEphbiAxOSAxNjowMTo0NyAxOTk2ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiB0cmVlLmMgKGJ1aWxkX2V4Y2VwdGlvbl92YXJpYW50KTogRG9uJ3QgY3JlYXRlIG5ldyB0eXBlcyBpZiB3ZQoJZG9uJ3QgaGF2ZSB0bywgYWxzbyBidWlsZCBuZXcgdHlwZXMgb24gdGhlIHJpZ2h0IG9ic3RhY2suCgpGcmkgSmFuIDE5IDE0OjA5OjQ0IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAoc3RvcmVfYmluZGluZ3MpOiBTcGxpdCBvdXQgZnJvbSBwdXNoX3RvX3RvcF9sZXZlbC4KCShwdXNoX3RvX3RvcF9sZXZlbCk6IENhbGwgaXQgZm9yIGItPnR5cGVfc2hhZG93ZWQgb24gY2xhc3MgYmluZGluZwoJbGV2ZWxzLgoKRnJpIEphbiAxOSAxMzo1MzoxNCAxOTk2ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiBzZWFyY2guYyAoZXhwYW5kX3VwY2FzdF9maXh1cHMpOiBGaXggc28gdGhhdCBvZmZzZXRzIHN0b3JlZCBpbgoJdmJhc2Vfb2Zmc2V0cyBhcmUgYWx3YXlzIHJpZ2h0LiAgRml4ZXMgYSBwcm9ibGVtIHdoZXJlIHZpcnR1YWwgYmFzZQoJdXBjYXN0aW5nIGFuZCBkb3duY2FzdGluZyBjb3VsZCBiZSB3cm9uZyBkdXJpbmcgY29udmVyc2lvbnMgb24gdGhpcwoJZHVyaW5nIHZpcnR1YWwgZnVuY3Rpb24gZGlzcGF0Y2ggYXQgY3Rvci9kdG9yIHRpbWUgd2hlbiBkeW5hbWljCgl2dGFibGUgZml4dXBzIGZvciBkZWx0YXMgYXJlIG5lZWRlZC4gIFRoaXMgb25seSBzb3VuZHMgZWFzaWVyIHRoYW4KCWl0IGlzLiAgOi0pCgkoZml4dXBfdmlydHVhbF91cGNhc3Rfb2Zmc2V0cyk6IENoYW5nZSB0byByZWZsZWN0IG5ldyBjYWxsaW5nCgljb252ZW50aW9uIGZvciBleHBhbmRfdXBjYXN0X2ZpeHVwcy4KCkZyaSBKYW4gMTkgMTI6MjM6MDggMTk5NiAgQnJlbmRhbiBLZWhvZSAgPGJyZW5kYW5AbGlzYS5jeWdudXMuY29tPgoKCSogZGVjbDIuYyAoZ3Jva2JpdGZpZWxkKTogU3RyaXAgdGhlIE5PUHMgZnJvbSBXSURUSCBiZWZvcmUgd2UKCWNoZWNrIHRoYXQgaXQncyB1c2FibGUgYXMgdGhlIGJpdGZpZWxkIHdpZHRoLgoKV2VkIEphbiAxNyAyMToyMjo0MCAxOTk2ICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBsaXNhLmN5Z251cy5jb20+CgoJKiBkZWNsMi5jIChncm9rZmllbGQpOiBDYWxsIGNwbHVzX2RlY2xfYXR0cmlidXRlcyB3aXRoIHRoZSBhdHRybGlzdC4KCVBhc3MgYSBudWxsIHRyZWUgdG8gZ3Jva2RlY2xhcmF0b3IgZm9yIGl0cyBBVFRSTElTVCBhcmcsIHNpbmNlIGl0J3MKCW9ubHkgZXZlciB1c2VkIGZvciBmdW5jdGlvbnMgaW4gaXQuCgpXZWQgSmFuIDE3IDEyOjEwOjM4IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnkgKHF1YWxpZmllZF90eXBlX25hbWUpOiBVc2UgdGhlIFRZUEVfREVDTCwgbm90IHRoZSB0eXBlLgoJKG5lc3RlZF90eXBlKTogTGlrZXdpc2UuCgkobmVzdGVkX25hbWVfc3BlY2lmaWVyKTogVXNlIGxhc3RpZGRlY2wuCgoJKiBkZWNsLmMgKGdyb2tkZWNsYXJhdG9yKTogQWRqdXN0IGFjY29yZGluZ2x5LgoJKiBpbml0LmMgKGV4cGFuZF9tZW1iZXJfaW5pdCk6IExpa2V3aXNlLgoJKiBwYXJzZS55IChiYXNlX2NsYXNzKTogTGlrZXdpc2UuCgkqIHR5cGVjazIuYyAoYnVpbGRfZnVuY3Rpb25hbF9jYXN0KTogTGlrZXdpc2UuCgoJKiB0eXBlY2syLmMgKGJ1aWxkX2Z1bmN0aW9uYWxfY2FzdCk6IEZpbGwgaW4gbmFtZSBhZnRlciB3ZSd2ZQoJY2hlY2tlZCBmb3Igbm9uLWFnZ3IgdHlwZS4KCldlZCBKYW4gMTcgMTA6MTg6MDEgMTk5NiAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgoKCSogZGVjbDIuYyAod2Fybl9wb2ludGVyX2FyaXRoKTogRGVmYXVsdCB0byBvbi4KClR1ZSBKYW4gMTYgMTI6NDU6MzggMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogbGV4LmMgKGlzX3JpZCk6IE5ldyBmdW5jdGlvbi4KCSogZGVjbC5jIChncm9rZGVjbGFyYXRvcik6IERpYWdub3NlIHJlc2VydmVkIHdvcmRzIHVzZWQgYXMKCWRlY2xhcmF0b3ItaWRzLgoKVHVlIEphbiAxNiAxMTozOTo0MCAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiB0cmVlLmMgKGdldF9kZWNsX2xpc3QpOiBEb24ndCBsb3NlIGN2LXF1YWxzLgoKCSogZGVjbC5jIChncm9rZGVjbGFyYXRvcik6IEZpeCBTQ09QRV9SRUYgaGFuZGxpbmcgYW5kIGRpYWdub3NlCgl0eXBlc3BlY3MgdXNlZCBhcyBkZWNsYXJhdG9yLWlkcy4KClR1ZSBKYW4gMTYgMTE6MDk6NDIgMTk5NiAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgoKCSogZGVjbC5jIChwb3BsZXZlbCk6IFdoZW4gcG9waW5nIGEgbGV2ZWwsIGRvbid0IGdpdmUgYSB3YXJuaW5nIGZvcgoJYW55IHN1YmJsb2NrcyB0aGF0IGFscmVhZHkgZXhpc3QuCgpUdWUgSmFuIDE2IDAwOjI1OjMzIDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHR5cGVjay5jIChidWlsZF9vYmplY3RfcmVmKTogRmluaXNoIHdoYXQgSSBzdGFydGVkLgoKCSogcGFyc2UueSAocXVhbGlmaWVkX3R5cGVfbmFtZSk6IERvbid0IGNoZWNrIFRZUEVfQlVJTFRfSU4uCgoJKiBkZWNsMi5jIChjb25zdHJ1Y3Rvcl9uYW1lX2Z1bGwpOiBIYW5kbGUgVEVNUExBVEVfVFlQRV9QQVJNcy4KCgkqIGRlY2wuYyAoZ3Jva2RlY2xhcmF0b3IpOiBBbHNvIGFjY2VwdCBURU1QTEFURV9UWVBFX1BBUk0gYXMgYQoJc2NvcGUuCgpNb24gSmFuIDE1IDE2OjE5OjMyIDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAoeHJlZl90YWcpOiBIYW5kbGUgcGFzc2luZyBhIHR5cGUgaW4gZGlyZWN0bHkuCgoJKiBwYXJzZS55IChxdWFsaWZpZWRfdHlwZV9uYW1lKTogUHVsbCBvdXQgdGhlIHR5cGUuCgkobmVzdGVkX3R5cGUpOiBMaWtld2lzZS4KCVRha2UgdHlwZXMgZGlyZWN0bHkgaW5zdGVhZCBvZiBhcyBpZGVudGlmaWVycy4KCSogY2FsbC5jIChidWlsZF9zY29wZWRfbWV0aG9kX2NhbGwpOiBUYWtlIHR5cGVzIGRpcmVjdGx5IGluc3RlYWQgb2YKCWFzIGlkZW50aWZpZXJzLgoJKiBkZWNsLmMgKHhyZWZfYmFzZXR5cGVzKTogTGlrZXdpc2UuCgkqIGluaXQuYyAoZXhwYW5kX21lbWJlcl9pbml0KTogTGlrZXdpc2UuCgkoYnVpbGRfbWVtYmVyX2NhbGwpOiBMaWtld2lzZS4KCShidWlsZF9vZmZzZXRfcmVmKTogTGlrZXdpc2UuCgkqIHR5cGVjazIuYyAoYnVpbGRfc2NvcGVkX3JlZik6IExpa2V3aXNlLCByZW1vdmUgYm9ndXMgY29kZS4KCSogbWV0aG9kLmMgKGRvX2J1aWxkX2Fzc2lnbl9yZWYpOiBMaWtld2lzZS4KCSogZGVjbC5jIChncm9rZGVjbGFyYXRvcik6IEhhbmRsZSBhIHR5cGUgYXBwZWFyaW5nIGFzIHRoZQoJZGVjbGFyYXRvci1pZCBmb3IgY29uc3RydWN0b3JzLgoJKiBtZXRob2QuYyAoZG9fYnVpbGRfY29weV9jb25zdHJ1Y3Rvcik6IGN1cnJlbnRfYmFzZV9pbml0X2xpc3Qgbm93Cgl1c2VzIHRoZSB0eXBlcyBkaXJlY3RseSwgbm90IHRoZWlyIG5hbWVzLgoJKiBpbml0LmMgKHNvcnRfYmFzZV9pbml0KTogTGlrZXdpc2UuCgkoZXhwYW5kX21lbWJlcl9pbml0KTogTGlrZXdpc2UuCgkqIGluaXQuYyAoaXNfYWdncl90eXBlKTogTmV3IGZ1bmN0aW9uLCBsaWtlIGlzX2FnZ3JfdHlwZWRlZi4KCk1vbiBKYW4gMTUgMDg6NDU6MDEgMTk5NiAgSmVmZnJleSBBIExhdyAgPGxhd0BjeWdudXMuY29tPgoKCSogdHJlZS5jIChsYXlvdXRfYmFzZXR5cGVzKTogQ2FsbCBidWlsZF9sYW5nX2ZpZWxkX2RlY2wgaW5zdGVhZAoJb2YgYnVpbGRfbGFuZ19kZWNsIGlmIGZpcnN0IGFyZyBpcyBhIEZJRUxEX0RFQ0wuCgpUaHUgSmFuIDExIDE0OjU1OjA3IDE5OTYgIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGxpc2EuY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAoY3BfZmluaXNoX2RlY2wpOiBPbmx5IGNsZWFyIFRSRUVfVVNFRCBpZiBERUNMX05BTUUgaXMKCW5vbi1lbXB0eS4KCSogZXhjZXB0LmMgKGV4cGFuZF9zdGFydF9jYXRjaF9ibG9jayk6IFNldCBUUkVFX1VTRUQgdG8gYXZvaWQKCXdhcm5pbmdzIGFib3V0IHRoZSBjYXRjaCBoYW5kbGVyLgoKTW9uIEphbiAgOCAxNzozNToxMiAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiB0eXBlY2suYyAoYnVpbGRfbW9kaWZ5X2V4cHIpOiBVc2UgYSBDT01QT1VORF9FWFBSIGluc3RlYWQgb2YKCWV4cGFuZF90YXJnZXRfZXhwci4KClRodSBKYW4gIDQgMTI6MzA6MzIgMTk5NiAgQnJlbmRhbiBLZWhvZSAgPGJyZW5kYW5AbGlzYS5jeWdudXMuY29tPgoKCUZpeCBhY2Nlc3MgY29udHJvbCB0byB1c2UgdHJlZXMgcmF0aGVyIHRoYW4gaW50ZWdlcnMuCgkqIGNsYXNzLmMgKGFjY2Vzc197ZGVmYXVsdCwgcHVibGljLCBwcm90ZWN0ZWQsIHByaXZhdGUsCglkZWZhdWx0X3ZpcnR1YWwsIHB1YmxpY192aXJ0dWFsLCBwcml2YXRlX3ZpcnR1YWx9X25vZGUpOiBBZGQKCWRlZmluaXRpb25zLgoJKGluaXRfY2xhc3NfcHJvY2Vzc2luZyk6IERvIGNyZWF0aW9uIG9mIHRob3NlIG5vZGVzLgoJKiBjcC10cmVlLmggKGFjY2Vzc190eXBlKTogRGVsZXRlIGVudW0gZGVjbC4KCShhY2Nlc3Nfe2RlZmF1bHQsIHB1YmxpYywgcHJvdGVjdGVkLCBwcml2YXRlLCBkZWZhdWx0X3ZpcnR1YWwsCglwdWJsaWNfdmlydHVhbCwgcHJpdmF0ZV92aXJ0dWFsfV9ub2RlKTogQWRkIGRlY2xzLgoJKGNvbXB1dGVfYWNjZXNzKTogQ2hhbmdlIHJldHVybiB0eXBlLgoJKiBzZWFyY2guYyAoY29tcHV0ZV9hY2Nlc3MpOiBIYXZlIHRyZWUgcmV0dXJuIHR5cGUsIGluc3RlYWQgb2YgZW51bS4KCShsb29rdXBfZmllbGQpOiBEZWNsYXJlIFRISVNfViBhbmQgTkVXX1YgdG8gYmUgdHJlZSBub2Rlcy4KCSogbGV4LmMgKHJlYWxfeXlsZXgpOiBVc2UgeXlsdmFsLnR0eXBlIGZvciBnaXZpbmcgdGhlIHZhbHVlIG9mIHRoZQoJYWNjZXNzXyogbm9kZSBmb3IgZWFjaCBvZiBSSURfe1BVQkxJQywgUFJJVkFURSwgUFJPVEVDVEVEfS4KCSogcGFyc2UueSAoVklTU1BFQyk6IE1ha2UgdHR5cGUgcmF0aGVyIHRoYW4gaXR5cGUuCgkoYmFzZV9jbGFzc19hY2Nlc3NfbGlzdCk6IExpa2V3aXNlLgoJKiAqLltjeV06IENoYW5nZSBhbGwgcmVmcyBvZiBgYWNjZXNzX3B1YmxpYycgdG8gYGFjY2Vzc19wdWJsaWNfbm9kZScsCglldGMuCgkqIGNhbGwuYyAoYnVpbGRfbWV0aG9kX2NhbGwpOiBNYWtlIEFDQ0VTUyBiZSBhIHRyZWUuCgkqIGNsYXNzLmMgKGFsdGVyX2FjY2VzcywgZmluaXNoX3N0cnVjdF8xLCBmaWx0ZXJfc3RydWN0KTogTGlrZXdpc2UuCgkqIGN2dC5jIChjb252ZXJ0X3RvX2FnZ3IpOiBMaWtld2lzZS4KCSogaW5pdC5jIChidWlsZF9vZmZzZXRfcmVmLCByZXNvbHZlX29mZnNldF9yZWYsIGJ1aWxkX2RlbGV0ZSk6CglMaWtld2lzZS4KCSogbWV0aG9kLmMgKGhhY2tfaWRlbnRpZmllcik6IExpa2V3aXNlLgoJKiB0eXBlY2suYyAoYnVpbGRfY29tcG9uZW50X3JlZl8xLCBidWlsZF9jb21wb25lbnRfcmVmKTogKTogTGlrZXdpc2UuCgpUaHUgSmFuICA0IDExOjAyOjIwIDE5OTYgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIHR5cGVjay5jIChwb2ludGVyX2ludF9zdW0sIHBvaW50ZXJfZGlmZik6IE1ha2UgY29kZSBhZ3JlZSB3aXRoIEMKCWZyb250ZW5kLCBhbmQgbWFrZSBpdCBtb3JlIGNvbnNpc3RlbnQgd2l0aCByZXNwZWN0IHRvCgl3YXJuX3BvaW50ZXJfYXJpdGguCgpUdWUgSmFuICAyIDAwOjEzOjM4IDE5OTYgIFJ1c3R5IFJ1c3NlbGwgIDxydXN0eUBhZGVsYWlkZS5tYXB0ZWsuY29tLmF1PgoKCSogZGVjbC5jIChwdXNoZGVjbCk6IENoZWNrIGZvciBkdXBsaWNhdGUgcGFyYW1ldGVyIG5hbWVzLgoKV2VkIEphbiAgMyAwOToyNTo0OCAxOTk2ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiBkZWNsLmMgKGV4cGFuZF9zdGF0aWNfaW5pdCk6IENhbGwgYXNzZW1ibGVfZXh0ZXJuYWwgZm9yIGF0ZXhpdC4KCldlZCBKYW4gIDMgMDc6NTU6MTkgMTk5NiAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgoKCSogZXhjZXB0LmMgKGRvX3Vud2luZCk6IFJlbW92ZSBzb21lIGdlbmVyYXRlZCBkZWFkIGNvZGUuCgkoZWhfb3V0ZXJfY29udGV4dCk6IE5ldyByb3V0aW5lLCBmYWN0b3Igb3V0IHNvbWUgY29tbW9uIGNvZGUgZnJvbQoJZXhwYW5kX2J1aWx0aW5fdGhyb3cgYW5kIGVuZF9laF91bndpbmRlci4gIEFkZCBjb2RlIHRvIGRvIHJldHVybgoJYWRkcmVzcyBtYXNraW5nIGZvciB0aGUgUEEuCgkoZXhwYW5kX2J1aWx0aW5fdGhyb3cpOiBVc2UgZWhfb3V0ZXJfY29udGV4dCBpbnN0ZWFkIG9mIG9wZW4gY29kaW5nCglpdCBoZXJlLgoJKGVuZF9laF91bndpbmRlcik6IExpa2V3aXNlLgoKVHVlIEphbiAgMiAxNzowMDo1NiAxOTk2ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiBleGNlcHQuYyAoZXhwYW5kX3Rocm93KTogQ2FsbCBhc3NlbWJsZV9leHRlcm5hbCBmb3IgX19lbXB0eSwgaWYgd2UKCXVzZSBpdC4KClRodSBEZWMgMjggMTE6MTM6MTUgMTk5NSAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgoKCSogZXhjZXB0LmMgKGV4cGFuZF9idWlsdGluX3Rocm93KTogVXNlIFJFVFVSTl9BRERSX09GRlNFVCBpbnN0ZWFkIG9mCglOT1JNQUxfUkVUVVJOX0FERFJfT0ZGU0VULgoJKGVuZF9laF91bndpbmRlcik6IExpa2V3aXNlLgoKV2VkIERlYyAyNyAyMjoxODoxNiAxOTk1ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiBnYy5jIChidWlsZF9keW5hbWljX2Nhc3QpOiBNYWtlIHN1cmUgd2UgZG9uJ3QgY2FzdCBhd2F5IGNvbnN0Cgl3aGVuIGRlYWxpbmcgd2l0aCByZWZlcmVuY2VzLCBhbmQgbWFrZSBzdXJlIHdlIGhhbmRsZSBkeW5hbWljCgljYXN0aW5nIHRvIGEgY3YgcXVhbGlmaWVkIHJlZmVyZW5jZS4KClRodSBEZWMgMjEgMjM6NTA6MzUgMTk5NSAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgoKCSogZXhjZXB0LmMgKHN0cnVjdCBlaF9jb250ZXh0KTogTmV3IHN0cnVjdHVyZSB0b3AgaG9sZCBlaCBjb250ZXh0CglpbmZvcm1hdGlvbi4KCShwdXNoX2VoX2NvbnRleHQpOiBOZXcgcm91dGluZS4KCShwb3BfZWhfY29udGV4dCk6IExpa2V3aXNlLgoJKiBkZWNsLmMgKHB1c2hfY3BfZnVuY3Rpb25fY29udGV4dCk6IFVzZSB0aGVtLgoJKHBvcF9jcF9mdW5jdGlvbl9jb250ZXh0KTogTGlrZXdpc2UuCgpXZWQgRGVjIDIwIDEyOjQyOjUxIDE5OTUgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGRlY2wyLmMgKGZpbmlzaF9maWxlKTogQWxzbyBwcnVuZSB1bmludGVyZXN0aW5nIGZ1bmN0aW9ucyBpbiB0aGUKCWlubGluZSBlbWlzc2lvbiBsb29wLgoKV2VkIERlYyAyMCAwMjozMjowNyAxOTk1ICBKZWZmcmV5IEEgTGF3ICA8bGF3QGN5Z251cy5jb20+CgoJKiBzaWcuYyAoYnVpbGRfc2lnbmF0dXJlX3RhYmxlX2NvbnN0cnVjdG9yKTogTWFyayBmdW5jdGlvbnMKCWluIHRoZSBzaWduYXR1cmUgYXMgcmVmZXJlbmNlZC4KClR1ZSBEZWMgMTkgMjI6MzY6NTYgMTk5NSAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZGVjbDIuYyAoZmluaXNoX2ZpbGUpOiBEbyBhbGwgdGhlIHZ0YWJsZS9zeW50aGVzaXMgc3R1ZmYgYmVmb3JlCgl0aGUgaW5saW5lIGVtaXNzaW9uIHN0dWZmLgoKTW9uIERlYyAxOCAxNTo1MTozMyAxOTk1ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjcC10cmVlLmgsIGRlY2wyLmMgKGZsYWdfd2Vhayk6IE5ldyBmbGFnIHRvIGNvbnRyb2wgdGhlIHVzZSBvZgoJd2VhayBzeW1ib2xzLgkKCSogbGFuZy1vcHRpb25zLmg6IEFkZCAtZntuby0sfXdlYWsuCgkqIGRlY2wuYyAoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBJZiB0aGUgdGFyZ2V0IGRvZXMgbm90IHN1cHBvcnQgd2VhawoJc3ltYm9scywgZG9uJ3QgdXNlIHRoZW0uCgkqIGRlY2wyLmMsIHB0LmM6IHMvU1VQUE9SVFNfV0VBSy9mbGFnX3dlYWsvLgoKU3VuIERlYyAxNyAyMToxMzoyMyAxOTk1ICBSdXN0eSBSdXNzZWxsICA8cnVzdHlAYWRlbGFpZGUubWFwdGVrLmNvbS5hdT4KCgkqIGluaXQuYyAoZXhwYW5kX21lbWJlcl9pbml0KTogd2FybmluZyBmb3IgYmFzZSBpbml0IGFmdGVyIG1lbWJlcnMuCgpGcmkgRGVjIDE1IDE1OjMyOjE4IDE5OTUgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGN2dC5jIChidWlsZF9leHByX3R5cGVfY29udmVyc2lvbik6IERvbid0IGNvbnZlcnQgdG8gYSByZWZlcmVuY2UKCXR5cGUuCgpUaHUgRGVjIDE0IDE2OjA1OjU4IDE5OTUgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIG1ldGhvZC5jIChyZXBvcnRfdHlwZV9taXNtYXRjaCk6IEltcHJvdmUgd29yZGluZyBmb3Igdm9sYXRpbGUKCW1pc21hdGNoZXMuCgpUaHUgRGVjIDE0IDE0OjE2OjI2IDE5OTUgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIGluaXQuYyAoZXhwYW5kX2FnZ3JfaW5pdF8xKTogVXNlIGV4cGFuZF9hZ2dyX2luaXRfMSBpbnN0ZWFkIG9mCglleHBhbmRfYXNzaWdubWVudCwgYXMgdGhlIGxhdGVyIGRvZXNuJ3QgaGFuZGxlIHRoaW5ncyB0aGF0IGhhdmUKCWNvcHkgY29uc3RydWN0b3JzIHdlbGwuICBUaGUgY29tcGlsZXIgd291bGQgZG8gYml0d2lzZSBjb3B5aW5nLAoJaW5zdGVhZCBvZiBjdG9yIGNhbGxpbmcgaW4gc29tZSBjYXNlcy4KCldlZCBEZWMgMTMgMTc6MDU6NTQgUFNUIDE5OTUgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgoKCSogZysrLmMgKG15X3N0cmVycm9yKTogUmV0dXJuICJjYW5ub3QgYWNjZXNzIiBpZiBlcnJubyBpcyAwLgoJKHBmYXRhbF93aXRoX25hbWUsIHBlcnJvcl9leGVjKTogRG9uJ3QgYXNzdW1lIHRoYXQKCXRoZSByZXR1cm5lZCB2YWx1ZSBmcm9tIG15X3N0cmVycm9yIGNvbnRhaW5zIG5vICclJ3MuCgkoY29uY2F0KTogUmVtb3ZlLgoJKHN5c19uZXJyb3IpOiBEZWNsYXJlIG9ubHkgaWYgSEFWRV9TVFJFUlJPUiBpcyBub3QgZGVmaW5lZC4KCldlZCBEZWMgMTMgMTY6MjI6MzggMTk5NSAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCUxvc2UgQ0xBU1NUWVBFX01FVEhPRFMvREVDTF9ORVhUX01FVEhPRCBjaGFpbjsgbWFrZQoJVFlQRV9NRVRIT0RTL1RSRUVfQ0hBSU4gbWVhbiB3aGF0IHRoZXkgdXNlZCB0by4JCgkqIGRlY2wyLmMgKGNvbnN0cnVjdG9yX25hbWVfZnVsbCk6IFJlZmVyIHRvIENMQVNTVFlQRV9NRVRIT0RfVkVDCglpbnN0ZWFkIG9mIFRZUEVfTUVUSE9EUy4KCSogZGVjbC5jIChkdXBsaWNhdGVfZGVjbHMpOiBMb3NlIHJlZmVyZW5jZXMgdG8gREVDTF9ORVhUX01FVEhPRC4KCSogdHJlZS5jICh0cmVlX2NvcHlfbGFuZ19kZWNsX2Zvcl9kZWZlcnJlZF9vdXRwdXQpOiBMaWtld2lzZS4KCSogY3AtdHJlZS5oIChDTEFTU1RZUEVfTUVUSE9EUyk6IExvc2UuCgkoQ0xBU1NUWVBFX01FVEhPRF9WRUMpOiBQb2ludCB0byBsYW5nX3NwZWMtPm1ldGhvZHMgaW5zdGVhZCBvZgoJVFlQRV9NRVRIT0RTLgoJKHN0cnVjdCBsYW5nX2RlY2wpOiBMb3NlIG5leHRfbWV0aG9kIGZpZWxkLgoJKERFQ0xfTkVYVF9NRVRIT0QpOiBMb3NlLgoJKiBjbGFzcy5jIChmaW5pc2hfc3RydWN0X21ldGhvZHMpOiBEb24ndCBtZXNzIHdpdGggVFlQRV9NRVRIT0RTLgoJKGZpbmlzaF9zdHJ1Y3QpOiBKdXN0IHVzZSBUWVBFX01FVEhPRFM7IHdlIGRvbid0IG5lZWQgZm5fZmllbGRzCglhbnltb3JlLgoJKGZpbmlzaF9zdHJ1Y3RfbWV0aG9kcyk6IERvbid0IG1lc3Mgd2l0aCB0aGUgVFJFRV9DSEFJTnMgaW4KCWZuX2ZpZWxkcy4KCgkqIHNlYXJjaC5jIChhZGRfY29udmVyc2lvbnMpOiBEb24ndCB1c2UgVFJFRV9DSEFJTiB0byB0cmF2ZXJzZSBtZXRob2QKCXZlY3Rvci4KCgkqIGNhbGwuYyAoYnVpbGRfbWV0aG9kX2NhbGwpOiBTeW50aGVzaXplIGhlcmUgZXZlbiB3aGVuIG5vdCBpbmxpbmluZy4KCSogdHlwZWNrLmMgKGJ1aWxkX2Z1bmN0aW9uX2NhbGxfcmVhbCk6IExpa2V3aXNlLgoKV2VkIERlYyAxMyAxNTowMjozOSAxOTk1ICBJYW4gTGFuY2UgVGF5bG9yICA8aWFuQGN5Z251cy5jb20+CgoJKiBjcC9sZXguYyAoY2hlY2tfbmV3bGluZSk6IElmIERCWF9ERUJVR0dJTkdfSU5GTyBhbmQgd3JpdGVfc3ltYm9scwoJPT0gREJYX0RFQlVHLCBjYWxsIGRieG91dF9zdGFydF9uZXdfc291cmNlX2ZpbGUgYW5kCglkYnhvdXRfcmVzdW1lX3ByZXZpb3VzX3NvdXJjZV9maWxlIHdoZW4gYXBwcm9wcmlhdGUuCgpUdWUgRGVjIDEyIDIwOjM4OjU1IDE5OTUgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIGV4Y2VwdC5jIChzdGFydF9hbm9uX2Z1bmMpOiBQdXNoIHRvIHRoZSB0b3AgbGV2ZWwuCgkoZW5kX2Fub25fZnVuYyk6IFBvcCBmcm9tIHRoZSB0b3AgbGV2ZWwuCgpNb24gRGVjIDExIDE4OjU2OjE0IDE5OTUgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIGNwLXRyZWUuaCAoYnVpbGRfY2xlYW51cCk6IE5ldyByb3V0aW5lIHRvIGJ1aWxkIGNsZWFudXBzLgoJKiBkZWNsLmMgKGV4cGFuZF9zdGF0aWNfaW5pdCk6IFVzZSBidWlsZF9jbGVhbnVwIHRvIGJ1aWxkIGEgY2xlYW51cAoJY2FsbCBhdCBjdG9yIHRpbWUgYW5kIHVzZSBhdGV4aXQgdG8gcnVuIGl0IGxhdGVyLgoJKiBkZWNsMi5jIChidWlsZF9jbGVhbnVwKTogTmV3IHJvdXRpbmUsIHRha2VuIGZyb20gZmluaXNoX2ZpbGUuCgkoZmluaXNoX2ZpbGUpOiBVc2UgYnVpbGRfY2xlYW51cCBpbnN0ZWFkLCBhbmQgZG9uJ3QgcHV0IGZ1bmN0aW9uCglsb2NhbCBzdGF0aWNzIGluIGdsb2JhbCBkdG9yIGxpc3QuCgkKV2VkIERlYyAgNiAxNDozNDoyOSAxOTk1ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiBleGNlcHQuYyAoZXhwYW5kX3Rocm93KTogRW5zdXJlIHRoYXQgd2UgaGF2ZSBjbGVhbnVwcywgaWYgd2UgdHJ5CglhbmQgZXhwYW5kIGNsZWFudXBzLgoKV2VkIERlYyAgNiAxMTo0ODoyMSAxOTk1ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiBleGNlcHQuYyAoZXhwYW5kX3Rocm93KTogQWRkIGxvZ2ljIHRvIG1hbmFnZSBkeW5hbWljIGNsZWFudXBzIGZvcgoJdGhlIEVIIG9iamVjdC4KCShleHBhbmRfZW5kX2NhdGNoX2Jsb2NrKTogVXNlIHRoZSBtYWdpYyBvZiBleHBhbmRfZ290bywgaW5zdGVhZCBvZgoJZW1pdF9qdW1wIHNvIHRoYXQgd2UgZ2V0IHRoZSBjbGVhbnVwIGZvciBhbnkgY2F0Y2ggY2xhdXNlIHBhcmFtZXRlcgoJYW5kIHRoZSBjbGVhbnVwIGZvciB0aGUgZXhjZXB0aW9uIG9iamVjdC4gIFVwZGF0ZSB0byByZWZsZWN0IGxhYmVsCgljaGFuZ2VzLgoJKHB1c2hfZWhfY2xlYW51cCk6IE5ldyByb3V0aW5lIHRvIHJlZ2lzdGVyIGEgY2xlYW51cCBmb3IgYW4KCWV4Y2VwdGlvbiBvYmplY3QuCgkoZW1wdHlfZm5kZWNsKTogVXNlZCB0byBkZWZhdWx0IGNsZWFudXAgYWN0aW9ucyB0bwoJbm90aGluZy4KCShpbml0X2V4Y2VwdGlvbl9wcm9jZXNzaW5nKTogU2V0dXAgZW1wdHlfZm5kZWNsLiAgU2V0dXAKCXNhdmVkX2NsZWFudXAuCgkoZXhwYW5kX3N0YXJ0X2NhdGNoX2Jsb2NrKTogVXBkYXRlIHRvIHJlZmxlY3QgbGFiZWwgY2hhbmdlcy4gIENhbGwKCXB1c2hfZWhfb2JqZWN0IHRvIHJlZ2lzdGVyIHRoZSBjbGVhbnVwIGZvciB0aGUgRUggb2JqZWN0LgoJKHN0YXJ0X2Fub25fZnVuYyk6IE5ldyByb3V0aW5lIHRvIHN0YXJ0IGJ1aWxkaW5nIGxhbWJkYSBleHByZXNzaW9ucwoJZnJvbSB0cmVlcy4KCShlbmRfYW5vbl9mdW5jKTogTmV3IHJvdXRpbmUgdG8gZW5kIHRoZW0uCgkoc3RydWN0IGxhYmVsTm9kZSk6IENoYW5nZSBzbyB0aGF0IHdlIGNhbiB1c2UgdHJlZSBsYWJlbHMsIG9yIHJ0eAoJbGFiZWxzLgoJKHNhdmVkX2NsZWFudXApOiBPYmplY3QgdG8gY2hlY2sgZm9yIGR5bmFtaWMgY2xlYW51cHMgZm9yIHRoZQoJZXhjZXB0aW9uIGhhbmRsaW5nIG9iamVjdC4KCShwdXNoX2xhYmVsX2VudHJ5KTogQ2hhbmdlIHNvIHRoYXQgd2UgY2FuIHVzZSB0cmVlIGxhYmVscywgb3IgcnR4CglsYWJlbHMuCgkocG9wX2xhYmVsX2VudHJ5KTogTGlrZXdpc2UuCgkodG9wX2xhYmVsX2VudHJ5KTogTGlrZXdpc2UuCgkoZXhwYW5kX3N0YXJ0X2FsbF9jYXRjaCk6IFVzZSB0cmVlIGxhYmVsIGluc3RlYWQgb2YgcnR4IGxhYmVsLCBzbwoJdGhhdCB3ZSBjYW4gZ2V0IHRoZSBtYWdpYyBvZiBleHBhbmRfZ290by4KCShleHBhbmRfZW5kX2FsbF9jYXRjaCk6IFVwZGF0ZSB0byByZWZsZWN0IGxhYmVsIGNoYW5nZXMuCgoJKiBjbGFzcy5jIChidWlsZF92Zm5fcmVmKTogUmVtb3ZlIGJ1aWxkaW5nX2NsZWFudXAgbG9naWMsIGFzIHdlIG5vdwoJdXNlIFVOU0FWRV9FWFBScy4KCXR5cGVjay5jIChnZXRfbWVtYmVyX2Z1bmN0aW9uX2Zyb21fcHRyZnVuYyk6IFJlbW92ZSByZW1uYW50cyBvZgoJYnVpbGRpbmdfY2xlYW51cCBsb2dpYywgYXMgd2Ugbm93IHVzZSBVTlNBVkVfRVhQUnMuCgkqIGNwLXRyZWUuaCAodW5zYXZlX2V4cHIpOiBEZWNsYXJlIGl0LgoJKiBkZWNsLmMgKGJ1aWxkaW5nX2NsZWFudXApOiBSZW1vdmUuCgkobWF5YmVfYnVpbGRfY2xlYW51cCk6IFJlbW92ZSBidWlsZGluZ19jbGVhbnVwIGxvZ2ljLCBhbmQgdXNlCglVTlNBVkVfRVhQUiBpbnN0ZWFkLgoKU3VuIERlYyAgMyAwMTozNDo1OCAxOTk1ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiBnYy5jIChidWlsZF90X2Rlc2MpOiBVcGRhdGUgZXJyb3IgbWVzc2FnZSB0byBzYXkgPHR5cGVpbmZvPi4KClRodSBOb3YgMzAgMTI6MzA6MDUgMTk5NSAgQnJlbmRhbiBLZWhvZSAgPGJyZW5kYW5AbGlzYS5jeWdudXMuY29tPgoKCSogZGVjbC5jIChwdXNoZGVjbCk6IE9ubHkgd2FybiBhYm91dCBzaGFkb3dpbmcgYSBsb2NhbCB2YXJpYWJsZSBpZgoJd2Fybl9zaGFkb3cgaXMgdHJ1ZS4KClN1biBOb3YgMjYgMTY6MDY6NTUgMTk5NSAgUnVzdHkgUnVzc2VsbCAgPHJ1c3R5QGFkZWxhaWRlLm1hcHRlay5jb20uYXU+CgoJKiB0eXBlY2suYyAoYnVpbGRfYmluYXJ5X29wX25vZGVmYXVsdCk6IEFkZGVkIHdhcm5pbmcgYWJvdXQKCWNvbXBhcmlzb25zIGJldHdlZW4gZGlmZmVyZW50IGVudW0gdHlwZXMgd2l0aCAtV2FsbCwgdW5sZXNzCgktZmVudW0taW50LWVxdWl2IHNldC4KCldlZCBOb3YgMjIgMTU6NDQ6MDIgMTk5NSAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgoKCSogY2xhc3MuYyAoZmluaXNoX3N0cnVjdF8xKTogU2tpcCBkb3duIHRvIHRoZSBpbm5lciB0eXBlIGluCgltdWx0aWRpbWVuc2lvbmFsIGFycmF5cy4gIEVuc3VyZXMgY3RvcnMgd2lsbCBiZSBtYWRlIGZvciB0eXBlcyB0aGF0CgluZWVkIGNvbnN0cnVjdGluZy4KCldlZCBOb3YgMjIgMTQ6MTk6MjIgMTk5NSAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgoKCSogZGVjbC5jIChsYXN0X2R0b3JfaW5zbik6IE5ldyB0byB0cmFjayB0aGUgbGFzdCBjb21waWxlciBnZW5lcmF0ZWQKCWluc24gaW4gYSBkdG9yLgoJKHN0b3JlX3Bhcm1fZGVjbHMpOiBTZXQgaXQuCgkoZmluaXNoX2Z1bmN0aW9uKTogVXNlIGl0IHRvIHNlZSBpZiB0aGUgZHRvciBpcyBlbXB0eS4gIEF2b2lkIGRvaW5nCgl2dGFibGUgc2V0dXAgYWxsIHRoZSB0aW1lLCBpZiB3ZSBjYW4uCgkoc3RydWN0IGNwX2Z1bmN0aW9uKTogQWRkIGxhc3RfZHRvcl9pbnNuLgoJKHB1c2hfY3BfZnVuY3Rpb25fY29udGV4dCk6IFNhdmUgaXQuCgkocG9wX2NwX2Z1bmN0aW9uX2NvbnRleHQpOiBSZXN0b3JlIGl0LgoKV2VkIE5vdiAyMiAxMTo1MjoxOSAxOTk1ICBQYXVsIFJ1c3NlbGwgIDxSdXN0eS5SdXNzZWxsQGFkZWxhaWRlLm1hcHRlay5jb20uYXU+CgoJKiB0eXBlY2suYyAoYnVpbGRfdW5hcnlfb3ApOiBTZXQgVFJFRV9OT19VTlVTRURfV0FSTklORyB0byBhdm9pZAoJd2FybmluZ3MuCgpUdWUgTm92IDIxIDE3OjE1OjIzIDE5OTUgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIHR5cGVjay5jIChleHBhbmRfdGFyZ2V0X2V4cHIpOiBNYWtlIHN1cmUgdGFyZ2V0cyBnZXQgcHV0IGludG8gdGhlCgljdXJyZW50IHRlbXBfc2xvdF9sZXZlbCwgc28gdGhhdCB0aGUgZnJlZV90ZW1wX3Nsb3RzIGNhbGwgd2lsbCByZXVzZQoJdGhlbS4KClR1ZSBOb3YgMjEgMTM6MzI6MDMgMTk5NSAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgoKCSogY2xhc3MuYyAoZmluaXNoX3N0cnVjdF8xKTogRGVsYXkgZGVsdGEgZml4dXBzIGZvciB2aXJ0dWFsIGJhc2VzCgl1bnRpbCBhZnRlciB3ZSBoYXZlIGRvbmUgdGhlIGhhcmQgdmlydHVhbHMsIHRvIGF2b2lkIGEgYm9ndXMgYGV2ZXJ5Cgl2aXJ0dWFsIGZ1bmN0aW9uIG11c3QgaGF2ZSBhIHVuaXF1ZSBmaW5hbCBvdmVycmlkZXInIGZvciB2aXJ0dWFsCglmdW5jdGlvbnMgdGhhdCBhcmUgb25seSBvdmVycmlkZGVuIGJ5IGhhcmQgdmlydHVhbHMuCgpUaHUgTm92ICA5IDEzOjM1OjMwIDE5OTUgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHB0LmMgKGRvX2Z1bmN0aW9uX2luc3RhbnRpYXRpb24pOiBEb24ndCB0cnkgdG8gZmluZCBhIGZpbGUtc2NvcGUKCXRlbXBsYXRlIGZvciBhIG1lbWJlciBmdW5jdGlvbi4KClR1ZSBOb3YgMTQgMDY6MjA6MzUgMTk5NSAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgoKCSogZysrLmMgKG1haW4pOiBBZGQgaGFuZGxpbmcgb2YgLW5vZGVmYXVsdGxpYnMuCgpNb24gTm92IDEzIDE1OjQ1OjM0IDE5OTUgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIGNwLXRyZWUuaCAoSU5ESVJFQ1RfQklORCk6IEFkZCBhIHdheSBmb3IgdGhlIGZyb250ZW5kIHRvCglkaXN0aW5ndWlzaCBiZXR3ZWVuIGRpcmVjdCBiaW5kaW5ncyBvZiByZWZlcmVuY2UgdmFyaWFibGVzLCBhbmQKCWluZGlyZWN0IGJpbmRpbmdzIG9mIHJlZmVyZW5jZSB2YXJpYWJsZXMuCgkqIGN2dC5jIChidWlsZF91cF9yZWZlcmVuY2UpOiBVc2UgaXQuCgkqIHR5cGVjay5jIChjb252ZXJ0X2FyZ3VtZW50cyk6IFVzZSBpdCB0byBpbmRpY2F0ZSB0aGlzIGlzIGFuCglpbmRpcmVjdCBiaW5kaW5nLgoJKiBkZWNsLmMgKGNwX2ZpbmlzaF9kZWNsKTogRW5zdXJlIHRoYXQgd2UgcmV1c2Ugc3RhY2sgc2xvdHMgYXMgZmFzdAoJYXMgdGhleSBhcmUgdW51c2VkLgoJKGV4cGFuZF9zdGF0aWNfaW5pdCk6IExpa2V3aXNlLgoJKGNwbHVzX2V4cGFuZF9leHByX3N0bXQpOiBMaWtld2lzZS4KCSogZGVjbDIuYyAoZmluaXNoX2ZpbGUpOiBMaWtld2lzZS4KCSogaW5pdC5jIChwZXJmb3JtX21lbWJlcl9pbml0KTogTGlrZXdpc2UuCgkoZW1pdF9iYXNlX2luaXQpOiBMaWtld2lzZS4KCShleHBhbmRfYWdncl92YmFzZV9pbml0XzEpOiBMaWtld2lzZS4KCkZyaSBOb3YgMTAgMDk6MTg6MDkgMTk5NSAgQnJlbmRhbiBLZWhvZSAgPGJyZW5kYW5AbGlzYS5jeWdudXMuY29tPgoKCSogZGVjbC5jIChwdXNoX25hbWVzcGFjZSk6IFJld3JpdGUgdG8gdXNlIGJ1aWxkX2xhbmdfZGVjbCwgc28gd2UKCWdldCBhIERFQ0xfTEFOR19TUEVDSUZJQyBub2RlLgoJKiBjcC10cmVlLmggKGxhbmdfZGVjbF9mbGFncyk6IEFkZCBuZXcgbWVtYmVyIGBsZXZlbCcuCgkoTkFNRVNQQUNFX0xFVkVMKTogRG9uJ3QgdXNlIGRlY2wuYXJndW1lbnRzLCBpbnN0ZWFkIHVzZSB0aGUKCWRlY2xfZmxhZ3MgbGV2ZWwgbWVtYmVyLgoKTW9uIE5vdiAgNiAxODozNjoxMyAxOTk1ICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBsaXNhLmN5Z251cy5jb20+CgoJKiBjYWxsLmMgKGJ1aWxkX21ldGhvZF9jYWxsKTogTWFrZSBzdXJlIGluc3RhbmNlIGhhcyBhCglUWVBFX0xBTkdfU1BFQ0lGSUMgbm9kZSBiZWZvcmUgd2UgZGl2ZSBpbnRvIGl0LiAgCgpTYXQgTm92ICA0IDIwOjAxOjUyIDE5OTUgIEphc29uIE1vbGVuZGEgIDxjcmFzaEBwaHlkZWF1eC5jeWdudXMuY29tPgoKCSogbWV0aG9kLmMgKG1ha2VfdGh1bmspOiB1c2UgVFJFRV9TRVRfQ09ERSB0byBzZXQgdGh1bmsncyB0cmVlIGNvZGUuCgpUaHUgTm92ICAyIDE3OjU2OjU3IDE5OTUgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAoZHVwbGljYXRlX2RlY2xzKTogV2hlbiBzbWFzaGluZyBkZWNscywgc21hc2ggc3RhdGljbmVzcyBpbgoJdGhlIHVzdWFsIHdheS4KClRodSBOb3YgIDIgMTY6NDQ6MDIgMTk5NSAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgoKCSogZGVjbC5jIChwb3BsZXZlbCk6IEhhbmRsZSB0aGUgbWVyZ2luZyBvZiBzdWJibG9ja3Mgb2YgY2xlYW51cHMKCXdoZW4gZmluaXNoaW5nIGJsb2NrcyB0aGF0IGhhdmUgYWxyZWFkeSBiZWVuIGNyZWF0ZWQgKHVzdWFsbHkgZHVlIHRvCgl0aGUgZml4dXAgZ290byBjb2RlKS4gIEZpeGVzIGJhZCBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24uCgpXZWQgTm92ICAxIDEyOjMzOjUzIDE5OTUgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIG1ldGhvZC5jIChoYWNrX2lkZW50aWZpZXIpOiBEb24ndCBhYm9ydCB3aGVuIHdlIGdldCBhIFRSRUVfTElTVAoJdGhhdCdzIG5vdCBhIGxpc3Qgb2Ygb3ZlcmxvYWRlZCBmdW5jdGlvbnMuCgpXZWQgTm92ICAxIDExOjM4OjU4IDE5OTUgIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGxpc2EuY3lnbnVzLmNvbT4KCgkqIGRlY2wyLmMgKG1hcmtfdnRhYmxlX2VudHJpZXMpOiBDaGVjayBERUNMX0xBTkdfU1BFQ0lGSUMgb24gZm4KCWJlZm9yZSB0cnlpbmcgdG8gdXNlIERFQ0xfQUJTVFJBQ1RfVklSVFVBTF9QLgoKVHVlIE9jdCAzMSAxMTo1Njo1NSAxOTk1ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBkZWNsMi5jIChtYXJrX3VzZWQpOiBOZXcgZnVuY3Rpb24gZm9yIGhvb2tpbmcgaW50byBzZXR0aW5nIG9mCglUUkVFX1VTRUQgb24gZGVjbHMuCgkqIGNhbGwuYyAoYnVpbGRfbWV0aG9kX2NhbGwpOiBVc2UgaXQuCgkqIGNsYXNzLmMgKGluc3RhbnRpYXRlX3R5cGUpOiBMaWtld2lzZS4KCSogaW5pdC5jIChidWlsZF9vZmZzZXRfcmVmKTogTGlrZXdpc2UuICBEb24ndCBjYWxsIGFzc2VtYmxlX2V4dGVybmFsCglmb3IgYWxsIGxpa2UtbmFtZWQgZnVuY3Rpb25zLgoJKiBtZXRob2QuYyAoaGFja19pZGVudGlmaWVyKTogTGlrZXdpc2UuCgkoZW1pdF90aHVuayk6IERvbid0IGNhbGwgYXNzZW1ibGVfZXh0ZXJuYWwuCgkobWFrZV90aHVuayk6IENyZWF0ZSB0aHVuayBhcyBhIEZVTkNUSU9OX0RFQ0wgc28gdGhhdCBpdAoJZ2V0cyB0aGUgcmlnaHQgbW9kZSBhbmQgRU5DT0RFX1NFQ1RJT05fSU5GTyB3b3Jrcy4KCQoJKiBwYXJzZS55OiBVc2UgbWFya191c2VkLiAgUGFzcyBvcGVyYXRvciBuYW1lcyB0byBkb19pZGVudGlmaWVyLgoJKiBsZXguYyAoZG9faWRlbnRpZmllcik6IEhhbmRsZSBvcGVyYXRvciBuYW1lcy4KCgkqIGRlY2wyLmMgKGdyb2tjbGFzc2ZuKTogVHdlYWsgX19pbl9jaHJnIGF0dHJpYnV0ZXMuCgpUaHUgT2N0IDI2IDE2OjQ1OjU4IDE5OTUgIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGxpc2EuY3lnbnVzLmNvbT4KCgkqIGVycmZuLmM6IEluY2x1ZGUgc3RkaW8uaC4KCShjcF9zcHJpbnRmKTogVGFrZSBvdXQgZGVjbCBvZiBzcHJpbnRmLCBhbmQgY2FzdCBzcHJpbnRmIHRvIGVycm9yZm4qLgoKV2VkIE9jdCAyNSAxODo1ODo0MSAxOTk1ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiB0eXBlY2syLmMgKGRpZ2VzdF9pbml0KTogQWx3YXlzIGNvbnZlcnQgaW5pdGlhbGl6ZXJzIHRvIHRoZQoJcmlnaHQgdHlwZS4KCldlZCBPY3QgMjUgMTM6MjU6MjQgMTk5NSAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgoKCSogaW5pdC5jIChtZW1iZXJfaW5pdF9va19vcl9lbHNlKTogRG9uJ3QgYWxsb3cgbWVtYmVyIGluaXRpYWxpemVycwoJZm9yIGluZGlyZWN0IG1lbWJlcnMsIGFzIGl0IGlzIGludmFsaWQuCgpXZWQgT2N0IDI1IDExOjM1OjI4IDE5OTUgIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGxpc2EuY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAoZ3Jva2RlY2xhcmF0b3IpOiBEb24ndCBhbGxvdyBgZnJpZW5kIHNpZ25lZCAoKScuCgpGcmkgT2N0IDIwIDEwOjMwOjU5IDE5OTUgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnkgKGZvci5pbml0LnN0YXRlbWVudCk6IENhdGNoIGNvbXBvdW5kIHN0YXRlbWVudHMgaW5zaWRlIGZvcgoJaW5pdGlhbGl6YXRpb25zLCBpZiB3ZSdyZSBiZWluZyBwZWRhbnRpYy4KCkZyaSBPY3QgMjAgMTA6MDM6NDIgMTk5NSAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgoKCSogZGVjbC5jIChsb29rdXBfdGFnKTogUmV0dXJuIE5VTExfVFJFRSBpZiB3ZSBkb24ndCBmaW5kIHdoYXQgd2UgYXJlCglsb29raW5nIGZvci4KClRodSBPY3QgMTkgMTQ6MjY6MTAgMTk5NSAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgoKCSogZXJyb3IuYyAoZHVtcF9leHByKTogRG9uJ3QgY29yZSBkdW1wIHdoZW4gYSBib29sZWFuIGV4cHJlc3Npb24gaXMKCXVzZWQgYXMgYSBkZWZhdWx0IGFyZ3VtZW50LgoKVGh1IE9jdCAxOSAxMDozNjozMCAxOTk1ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjbGFzcy5jIChmaW5pc2hfc3RydWN0X2JpdHMpOiBDaGVjayBhZ2dyZWdhdGVfdmFsdWVfcCBpbnN0ZWFkIG9mCglSRVRVUk5fSU5fTUVNT1JZLgoKV2VkIE9jdCAxOCAxODoxMjozMiAxOTk1ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjbGFzcy5jIChmaW5pc2hfc3RydWN0X2JpdHMpOiBBbHNvIHNldCBUUkVFX0FERFJFU1NBQkxFIG9uIGEKCUJMS21vZGUgdHlwZSB0aGF0IHdvdWxkIG90aGVyd2lzZSBiZSByZXR1cm5lZCBpbiByZWdpc3RlcnMuCgpNb24gT2N0IDE2IDEyOjMyOjE5IDE5OTUgIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGxpc2EuY3lnbnVzLmNvbT4KCgkqIGcrKy5jIChXSVRITElCQyk6IE5ldyBtYWNyby4KCShtYWluKTogRGVjbGFyZSBzYXdfbGliYy4gIFVzZSBXSVRITElCQyBpZiBgLWxjJyB3YXMgdXNlZDsgc2V0CglzYXdfbGliYyBhbmQgcGFzcyBpdCBhdCB0aGUgZW5kIGlmIGl0IHdhcyBzZXQuCgpXZWQgT2N0IDExIDE2OjMwOjM0IDE5OTUgIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGxpc2EuY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnkgKGZuLmRlZjEpOiBDYWxsIHNwbGl0X3NwZWNzX2F0dHJzIGluCglkZWNsbW9kcyBub3R5cGVfZGVjbGFyYXRvciBjYXNlLgo=