VHVlIE1heSAxOCAwMzo1MzozNyAxOTk5ICBDcmFpZyBCdXJsZXkgIDxjcmFpZ0BqY2Itc2MuY29tPgoKCUltcHJvdmUgb3Blbi1jb2Rpbmcgb2YgY29tcGxleCBkaXZpZGU6CgkqIGZsYWdzLmg6IERlY2xhcmUgbmV3IGZyb250LWVuZC1tYWxsZWFibGUgZmxhZy4KCSogdG9wbGV2LmM6IERlZmluZSBuZXcgZmxhZy4KCSogb3B0YWJzLmMgKGV4cGFuZF9jbXBseGRpdl9zdHJhaWdodCk6IE5ldyBmdW5jdGlvbiB0byBkbyBvcmlnaW5hbAoJb3Blbi1jb2RpbmcuCgkoZXhwYW5kX2NtcGx4ZGl2X3dpZGUpOiBOZXcgZnVuY3Rpb24gdG8gZG8gbmV3IG9wZW4tY29kaW5nLAoJZnJvbSBUb29uIE1vZW5lLCB3aXRoIGNoYW5nZXMgKGNhbGwgdG8gZW1pdF9iYXJyaWVyLCBkcm9wcGluZwoJb2Ygc3B1cmlvdXMgYG9rID0gMTsnLCBwbHVzIHRoZSBvYnZpb3VzIGBicmVhazsnIC0+IGByZXR1cm4gMDsnKS4KCShleHBhbmRfYmlub3ApOiBBIGJpdCBvZiBzcGFjaW5nIGZpeGluZywgd2hpbGUgYXQgaXQuCglVc2UgbmV3IGZ1bmN0aW9ucyBpbnN0ZWFkIG9mIGlubGluaW5nIHRoZSBvcGVuLWNvZGluZyBjb2RlLgoKVHVlIE1heSAxOCAwMDo1MTo0NiAxOTk5ICBLcmlzdGVyIFdhbGZyaWRzc29uIDxjYXRvQGRmLmx0aC5zZT4KCgkqIGNvbmZpZ3VyZS5pbiAoYXJtKi0qLW5ldGJzZCopOiBVc2UgY29sbGVjdDIuCgkoaVszNDU2N104Ni0qLW5ldGJzZCopOiBMaWtld2lzZS4KCShtNjhrKi0qLW5ldGJzZCopOiBMaWtld2lzZS4KCShuczMyay0qLW5ldGJzZCopOiBMaWtld2lzZS4KCShzcGFyYy0qLW5ldGJzZCopOiBMaWtld2lzZS4KCSh2YXgtKi1uZXRic2QqKTogTGlrZXdpc2UuCgkqIGNvbmZpZ3VyZTogUmVidWlsdC4KClR1ZSBNYXkgMTggMDA6MjE6MzQgMTk5OSAgWmFjayBXZWluYmVyZyAgPHphY2tAcmFiaS5waHlzLmNvbHVtYmlhLmVkdT4KCgkqIGNwcHNwZWMuYzogSW5zZXJ0IC1uby1nY2MgaW50byBjb21tYW5kIGxpbmUgdW5sZXNzIC1nY2Mgd2FzCglnaXZlbiBieSB1c2VyLgoJKiBnY2MuYyAoZGVmYXVsdF9jb21waWxlcnMpOiBEZWZpbmUgX19HTlVDX18gYW5kCglfX0dOVUNfTUlOT1JfXyBvbmx5IGlmIC1uby1nY2Mgd2FzIG5vdCBnaXZlbi4KCSogb2JqYy9sYW5nLXNwZWNzLmg6IExpa2V3aXNlLgoJKiBjcHAudGV4aTogRG9jdW1lbnQgLXggYW5kIC1zdGQgb3B0aW9uczsgZXhwbGFpbiB0aGF0IC1sYW5nCglpcyBubyBsb25nZXIgc3VwcG9ydGVkLiAgTWlub3IgcmVsYXRlZCBjb3JyZWN0aW9ucy4KCk1vbiBNYXkgMTcgMjM6NTY6MzkgMTk5OSAgQWxleGFuZHJlIE9saXZhICA8b2xpdmFAZGNjLnVuaWNhbXAuYnI+CgoJKiBNYWtlZmlsZS5pbiAoc3RtcC1maXhwcm90byk6IFBhc3MgbG9jYXRpb24gb2YgbWtpbnN0YWxsZGlycyB0bwoJZml4cHJvdG8uCgkqIGZpeHByb3RvOiBBdm9pZCB1bnBvcnRhYmxlIGNvbnN0cnVjdHMgc3VjaCBhcyBgYmFzZW5hbWUnIGFuZAoJYG1rZGlyIC1wJy4gIFVzZSBta2luc3RhbGxkaXJzIGZyb20gdGhlIGVudmlyb25tZW50IGlmIGBta2RpciAtcCcKCWZhaWxzLgoKCSogZml4aW5jL2ZpeGluY2wuYzogUmVtb3ZlICNlcnJvciwgaXQgaXMgbm90IHBvcnRhYmxlLgoKTW9uIE1heSAxNyAyMzo1MDo0MSAxOTk5ICBNYXJjIEVzcGllIDxlc3BpZUBjdnMub3BlbmJzZC5vcmc+CgoJKiBjb2xsZWN0Mi5jIChtYWluKTogIEZpeCB0eXBvIGluIENPTExFQ1QyX0hPU1RfSU5JVElBTElaQVRJT04uCgpNb24gTWF5IDE3IDE5OjQ1OjQxIDE5OTkgIFJhaW5lciBPcnRoICA8cm9AVGVjaEZhay5VbmktQmllbGVmZWxkLkRFPgoKCSogZml4aW5jL2ZpeGluY2wuYyAocHJvY2Vzcyk6IFdhaXQgZm9yIGNoaWxkcmVuIGZyb20gY2hhaW5fb3BlbigpCgl0byBhdm9pZCBjcmVhdGluZyB6b21iaWVzLgoKCSogZml4aW5jL2luY2xoYWNrLnRwbDogUmVtb3ZlZCBuby1vcCBwaXBlLgoKCSogZml4aW5jL2luY2xoYWNrLnNoIGZpeGluYy9maXhpbmNsLnNoOiByZWdlbmVyYXRlCgpNb24gTWF5IDE3IDA3OjIzOjM0IDE5OTkgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiB0cmVlLmRlZiAoVFlQRV9OT05DT1BJRURfUEFSVFMpOiBSZXZpc2UgZG9jdW1lbnRhdGlvbiB0byBtYXRjaAoJcmVhbGl0eS4KCSogZXhwci5jIChpbml0X25vbmNvcGllZF9wYXJ0cyk6IERvbid0IGdlbmVyYXRlIGluaXRpYWxpemVycyBmb3IKCXBhcnRzIHRoYXQgZG9uJ3QgbmVlZCB0aGVtLgoKTW9uIE1heSAxNyAwMjo1NjozNSBQRFQgMTk5OSBKZWZmIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogdmVyc2lvbi5jOiBCdW1wIGZvciBzbmFwc2hvdC4KClNhdCBPY3QgMzEgMDU6MDg6MzQgQ0VUIDE5OTggSmFuIEh1Ymlja2EgIChodWJpY2thQGZyZWVzb2Z0LmN6KQoKCSogcmVnLXN0YWNrLmM6IERvIG5vdCBlbWl0IHBvcCBpbnNucyBhZnRlciBjYzAgc2V0dGVyLgoJKGVtaXRfcG9wX2luc24pOiBEbyBub3QgZW1pdCBpbnNuIGluIGNhc2UgV0hFTiBpcyBOVUxMLgoJKGNvbXBhcmVfZm9yX3N0YWNrX3JlZyk6IFVwZGF0ZSBSRUdfREVBRCBub3RlIGFuZCAKCWRvIG5vdCBlbWl0IHB1c2ggaW5zbi4KCgkqIGkzODYuYzogKG91dHB1dF9mbG9hdF9jb21wYXJlKTogSGFuZGxlIG5ldyBSRUdfREVBRCBub3Rlcy4KCk1vbiBNYXkgMTcgMDE6NTc6MzcgMTk5OSAgRGF2aWQgRGFuZXkgPGRhbmV5QGlidy5jb20ubmk+CgoJKiBpMzg2L3NvbDIuaCAoTElOS19TUEVDKTogRG8gbm90IHBhc3MgIi16IHRleHQiIHRvIHRoZSBsaW5rZXIKCWlmIC1taW1wdXJlLXRleHQuCgoxOTk5LTA1LTE3ICBBbmRyZWFzIFNjaHdhYiAgPHNjaHdhYkBpc3Nhbi5jcy51bmktZG9ydG11bmQuZGU+CgoJKiBtNjhrLmMgKHN0YW5kYXJkXzY4ODgxX2NvbnN0YW50X3ApOiBEb24ndCBhY2NlcHQgLTAuMCBhcyB2YWxpZAoJNjg4ODEgY29uc3RhbnQuCgoJKiBmb2xkLWNvbnN0LmMgKGZvbGRfdHJ1dGhvcCk6IFdoZW4gY29udmVydGluZyBhIG9uZS1iaXQKCWNvbXBhcmlzb24gZG9uJ3Qgc2lnbiBleHRlbmQgdGhlIGNvbnN0YW50LgoKCSogY3NlLmMgKGNzZV9pbnNuKTogQ29weSBTUkNfQ09OU1QgYmVmb3JlIHB1dHRpbmcgaXQgaW4gdGhlCglSRUdfRVFVQUwgbm90ZS4KCjE5OTktMDUtMTcgIE1pa2UgU3R1bXAgIDxtcnNAd3JzLmNvbT4KCgkqIHJzNjAwMC92eHBwYy5oIChDUFBfU1BFQyk6IEZpeCBzdXBwb3J0IGZvciB2YXJhcmcgZnVuY3Rpb25zLgoKU2F0IE1heSAxNSAxNDoyMjo0MCAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBmaXhpbmMvaGFja3NoZWxsLnRwbDogRml4IG1pcy1hcHBsaWVkIHBhdGNoLgoJKiBmaXhpbmMvaW5jbGhhY2suc2g6IFJlZ2VuZXJhdGVkLgoKVGh1IE1heSAxMyAyMTowNTo1NSAxOTk5ICBNYXJrIEtldHRlbmlzICA8a2V0dGVuaXNAZ251Lm9yZz4KCgkqIGZpeGluYy9ta2ZpeGluYy5zaDogQWRkIHRoZSBIdXJkICgqLSotZ251KikgdG8gdGhlIGxpc3Qgb2YKCXRhcmdldHMgdGhhdCBkbyBub3QgbmVlZCBhbnkgZml4ZXMuCgpTYXQgTWF5IDE1IDE0OjEyOjM4IDE5OTkgIE1pY2hhZWwgSGF5ZXMgIDxtLmhheWVzQGVsZWMuY2FudGVyYnVyeS5hYy5uej4KCgkqIGNvbmZpZy9jNHgvYzR4Lm1kIChzZXRfbG9fc3VtKzIpOiBOZXcgc3BsaXR0ZXIgdG8gbG9hZCBsYXJnZQoJY29uc3RfaW50cy4KClNhdCBNYXkgMTUgMTQ6MDk6MDggMTk5OSAgTWljaGFlbCBIYXllcyAgPG0uaGF5ZXNAZWxlYy5jYW50ZXJidXJ5LmFjLm56PgoKCSogY29uZmlnL2M0eC9jNHgubWQgKGRlY3JlbWVudF9hbmRfYnJhbmNoX29uX2NvdW50KTogRGlzYWJsZWQuCgkoZG9sb29wX2JlZ2luLCBkb2xvb3BfZW5kKTogTmV3IHBhdHRlcm5zLgoJKCpycHRiX2luaXQpOiBBZGRlZCBleHRyYSBvcGVyYW5kcy4KCkZyaSBNYXkgMTQgMjE6MzE6MzYgMTk5OSAgTWljaGFlbCBIYXllcyAgPG0uaGF5ZXNAZWxlYy5jYW50ZXJidXJ5LmFjLm56PgoKCSogY29uZmlnL2M0eC9jNHgubWQgKCp1bXVscWkzX2hpZ2hwYXJ0X2Nsb2JiZXIpOiBGaXggb3BlcmFuZCAyCgljb25zdHJhaW50cyBvcmRlci4KCjE5OTktMDUtMTQgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBjeWdudXMuY29tPgoKCSogZml4aW5jL2ZpeGluYy54ODYtbGludXgtZ251IChGRF9aRVJPKTogRml4IG9wZXJhbmQgbnVtYmVycyBpbgoJYXNtIGlucHV0IG9wZXJhbmRzLgoKVGh1IE1heSAxMyAxNTozNDoxOCAxOTk5ICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQGdudS5vcmc+CgoJKiByczYwMDAuYyAobWFza19jb25zdGFudCk6IERlbGV0ZS4KCShtYXNrX29wZXJhbmQpOiBNb3ZlIG1hc2tfY29uc3RhbnQoKSBib2R5IHRvIGhlcmUuCgkqIHJzNjAwMC5oIChtYXNrX2NvbnN0YW50KTogRGVsZXRlIGRlY2xhcmF0aW9uLgoJKiByczYwMDAubWQgKG5hYnNkaTIpOiBSZXZlcnNlIHN1YnRyYWN0aW9uIGluIHNwbGl0dGVyLgoKVGh1IE1heSAxMyAwMjoyNTowMSAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBjcHAudGV4aTogRml4IHNvbWUgdHlwb3MuCgpUaHUgTWF5IDEzIDAxOjQ5OjU1IDE5OTkgIEdyYWhhbSBTdG90dCA8R3JhaGFtU0BSQ1AuY28udWs+CgoJKiBsb29wLmMgKG1heWJlX2VsaW1pbmF0ZV9iaXYpOiBDaGVjayByZWdubyBhZ2FpbnN0CgltYXhfcmVnX2JlZm9yZV9sb29wLgoKCSogaTM4Ni5jIChtZW1vcnlfYWRkcmVzc19pbmZvKTogQ29ycmVjdCB0aGUgc2NhbGUKCWZhY3RvciB0ZXN0LgoKVGh1IE1heSAxMyAwMTozMToxOSAxOTk5ICBOaWNrIEJ1cnJldHQgIDxuaWNrLmJ1cnJldHRAYnRpbnRlcm5ldC5jb20+CgoJKiBhcm0ubWQgKG5vcCk6IEJhY2tvdXQgQXByIDI3IGNoYW5nZS4gRW5zdXJlIFJFR0lTVEVSX1BSRUZJWCBpcwoJYXBwbGllZCB0byBlYWNoIHJlZ2lzdGVyLgoJKiBhb2YuaCAoQVNNX0ZJTEVfU1RBUlQpOiBEZWZpbmUgcmVnaXN0ZXIgYHIwJy4KCjE5OTktMDUtMTIgMjA6MjIgLTA0MDAgIFphY2sgV2VpbmJlcmcgIDx6YWNrQHJhYmkuY29sdW1iaWEuZWR1PgoKCSogY29uZmlndXJlLmluOiBNYWtlIC0tZW5hYmxlLWNwcCBhbmQgLS13aXRoLWNwcC1pbnN0YWxsLWRpcgoJZG9jdW1lbnRlZCBvcHRpb25zLiAgRW5hYmxlIHRoZSBjcHAgZHJpdmVyIGJ5IGRlZmF1bHQuCgkqIGNvbmZpZ3VyZTogUmVidWlsdC4KCldlZCBNYXkgMTIgMTg6MDg6NDggMTk5OSAgRGF2aWQgRWRlbHNvaG4gICAgIDxlZGVsc29obkBnbnUub3JnPgoJCQkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiByczYwMDAuYyAocHJpbnRfb3BlcmFuZCkgW3ddOiBDYWxjdWxhdGUgc2lnbmVkIGNvbnN0YW50IG1vcmUgY2xlYXJseS4KCShyczYwMDBfYWxsb2NhdGVfc3RhY2tfc3BhY2UpOiBQcmludCBhcyBoZXhhZGVjaW1hbCB2YWx1ZS4KCSogcnM2MDAwLmggKENPTlNUX09LX0ZPUl9MRVRURVJfUCk6ICdMJyBjaGVja3MgZm9yIGEgc2lnbmVkLAoJMTYtYml0IHNoaWZ0ZWQgY29uc3RhbnQuICBGaXggdHlwbyBmb3IgJ1AnLgoJKEVYVFJBX0NPTlNUQVJJTlQpOiAnVCcgY2hlY2tzIGZvciBhIDMyLWJpdCBtYXNrIG9wZXJhbmQuCgkqIHJzNjAwMC5tZCAobW92c2ksIGFkZHNpM19pbnRlcm5hbDEsIG1vdmRpLCBhZGRkaTNfaW50ZXJuYWwxKToKCVVzZSAnTCcgZm9yIHNoaWZ0ZWQgY29uc3RhbnQuCgkoYW5kZGkzX2ludGVybmFsMyk6IEZpeCB0eXBvLgoJKDMyLWJpdCBtYXNrIHBhdHRlcm5zKTogVXNlICdUJy4KCldlZCBNYXkgMTIgMDc6MzA6MzEgMTk5OSAgQnJ1Y2UgS29yYiA8ZGRzaW5jMDlAaXgubmV0Y29tLmNvbT4KCgkqIGZpeGluYy9maXhpbmNsLmMocXVvdGVkX2ZpbGVfZXhpc3RzKTogbmV3IHByb2NlZHVyZSB0byBlbnN1cmUgdGhhdAoJYSBmaWxlIGV4aXN0cyBiZWZvcmUgdHJ5aW5nIHRvIGNvcHkgaXQgaW50byB0aGUgZGVzdGluYXRpb24KCShleHRyYWN0X3F1b3RlZF9maWxlcyk6IHVzZSB0aGF0IHJvdXRpbmUuCgpXZWQgTWF5IDEyIDA3OjI3OjMxIDE5OTkgIENyYWlnIEJ1cmxleSAgPGNyYWlnQGpjYi1zYy5jb20+CgoJQWxsb3cgZnJvbnQgZW5kIChsaWtlIGc3NydzKSB0byBvdmVycmlkZSBtYWludGVuYW5jZSBvZiBlcnJubzoKCSogZXhwci5jIChleHBhbmRfYnVpbHRpbik6IEJvdGhlciB3aXRoIGVycm5vIG9ubHkgaWYKCWZsYWdfZXJybm9fbWF0aC4KCSogZmxhZ3MuaDogRGVjbGFyZSBmbGFnX2Vycm5vX21hdGguCgkqIHRvcGxldi5jOiBEZWZpbmUgZmxhZ19lcnJub19tYXRoLgoKVHVlIE1heSAxMSAyMzo1NTo0OSAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBmaXhwcm90bzogQ2hhbmdlICJta2RpciIgY2FsbHMgdG8gIm1rZGlyIC1wIgoKCSogZml4aW5jL2luY2xoYWNrLmRlZiAoaW9fZGVmX3F1b3Rlcyk6IENvbnNpc3RlbnRseSBhbGxvdyBtdWx0aXBsZQoJd2hpdGVzcGFjZSBjaGFyYWN0ZXJzIGJldHdlZW4gdGhlICJkZWZpbmUiIGFuZCB0aGUgbmFtZSBvZiB0aGUgbWFjcm8uCgkqIGZpeGluYy9maXhpbmNsLngsIGZpeGluYy9pbmNsaGFjay5zaDogUmVidWlsdC4KClR1ZSBNYXkgMTEgMjA6NDY6MzcgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGFscGhhLmMgKGFscGhhX2V4cGFuZF9ibG9ja19tb3ZlKTogSGFuZGxlIFRJbW9kZSByZWdpc3RlcnMKCXVzZWQgd2l0aCBBRERSRVNTT0YuCgkoYWxwaGFfZXhwYW5kX2Jsb2NrX2NsZWFyKTogSGFuZGxlIEFERFJFU1NPRiBzcGVjaWFsbHkuCgoxOTk5LTA1LTExICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAY3lnbnVzLmNvbT4KCgkqIGZpeGluYy9maXhpbmMueDg2LWxpbnV4LWdudSAoRkRfWkVSTyk6IFJlbW92ZSB1bm5lY2Nlc3NhcnkKCW1lbW9yeSBvdXRwdXQgb3BlcmFuZCB3aGljaCBpcnJpdGF0ZXMgZ2NjLgoKVHVlIE1heSAxMSAxMTo0NToxNiAxOTk5ICBEYXZlIEJyb2xsZXkgIDxicm9sbGV5QGN5Z251cy5jb20+CgoJKiB0b3BsZXYuYyAoZG9jdW1lbnRlZF9sYW5nX29wdGlvbnMpOiBBZGQgLU1ELCAtTU1ELCAtTSBhbmQgLU1NIGZvcgoJY3BwbGliLWVuYWJsZWQgY29tcGlsZXJzLgoKVHVlIE1heSAxMSAxMTozNDo1NiAxOTk5ICBWbGFkaW1pciBNYWthcm92ICA8dm1ha2Fyb3ZAdG9mdS50by5jeWdudXMuY29tPgoKCSogY29uZmlnL3NwYXJjL3NwYXJjLmggKEdPX0lGX0xFR0lUSU1BVEVfQUREUkVTUyk6IEFkZCBwYXJlbnRoZXNlcwoJYXJvdW5kICYmLgoKTW9uIE1heSAxMCAxMzo1MToyNCAxOTk5ICBOaWNrIENsaWZ0b24gIDxuaWNrY0BjeWdudXMuY29tPgoKCSogdG0udGV4aSAoRlVOQ1RJT05fQVJHKTogU3RhY2sgZWxlbWVudCBvZiBQQVJBTExFTCBtdXN0IGNvbWUKCWZpcnN0LgoKVHVlIE1heSAxMSAwMTozMjowMSAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBmaXhpbmMvaW5jbGhhY2suZGVmIChzdW5fYXV0aF9wcm90byk6IEFwcGx5IHRvIGFsbCB0YXJnZXRzLgoJKHN5c3pfc3RkbGliX2Zvcl9zdW4pOiBTaW1pbGFybHkuCgkqIGZpeGluYy9maXhpbmNsLngsIGZpeGluYy9pbmNsaGFjay5zaDogUmVidWlsdC4KCk1vbiBNYXkgMTAgMjA6MzQ6MTAgMTk5OSAgSmltIFdpbHNvbiAgPHdpbHNvbkBjeWdudXMuY29tPgoKCSogY29uZmlnL21pcHMvZWxmLmggKFVOSVFVRV9TRUNUSU9OX1ApOiBVbmRlZi4KCSogY29uZmlnL21pcHMvZWxmNjQuaCAoVU5JUVVFX1NFQ1RJT05fUCk6IFVuZGVmLgoJKiBjb25maWcvbWlwcy9taXBzLmggKFVOSVFVRV9TRUNUSU9OX1ApOiBEZWZpbmUgdG8gMC4KCjE5OTktMDUtMTAgMTg6MjEgLTA0MDAgIFphY2sgV2VpbmJlcmcgIDx6YWNrQHJhYmkuY29sdW1iaWEuZWR1PgoKCSogY3BwZmlsZXMuYyAoaW5pdGlhbGl6ZV9pbnB1dF9idWZmZXIpOiBOZXcgZnVuY3Rpb24uCgkoZmluY2x1ZGUpOiBDYWxsIGl0LCBpZiBwZmlsZS0+aW5wdXRfYnVmZmVyIGlzIE5VTEwuICBBY2NlcHQKCWFueSBjaGFyYWN0ZXIgZGV2aWNlIGFzIGFuIGlucHV0IGZpbGUuCgkocmVhZF9hbmRfcHJlc2Nhbik6IFVzZSBwZmlsZS0+aW5wdXRfYnVmZmVyIGFuZAoJcGZpbGUtPmlucHV0X3NwZWNjYXNlLgoJKiBjcHBpbml0LmMgKGNwcF9jbGVhbnVwKTogRnJlZSBwZmlsZS0+aW5wdXRfYnVmZmVyIGFuZAoJcGZpbGUtPmlucHV0X3NwZWNjYXNlLgoJKiBjcHBsaWIuaCAoY3BwX3JlYWRlcik6IEFkZCBpbnB1dF9idWZmZXIsIGlucHV0X3NwZWNjYXNlLCBhbmQKCWlucHV0X2J1ZmZlcl9sZW4gbWVtYmVycy4gIFVzZSBtZW1jcHkgaW4gQ1BQX1BVVFNfUS4KCgkqIGNwcG1haW4uYzogQnVmZmVyIG91dHB1dCBpbiB0aGUgdG9rZW5fYnVmZmVyOyB0aHJvdHRsZQoJbnVtYmVyIG9mIGNhbGxzIHRvIGZ3cml0ZTsgY2hlY2sgZm9yIGVycm9ycyBmcm9tIGZ3cml0ZS4KCjE5OTktMDUtMTAgMTg6MjEgLTA0MDAgIFphY2sgV2VpbmJlcmcgIDx6YWNrQHJhYmkucGh5cy5jb2x1bWJpYS5lZHU+CgoJKiBjcHBzcGVjLmM6IFRyZWF0IHR3byBub24tb3B0aW9uIGFyZ3VtZW50cyBhcyBpbnB1dCBhbmQKCW91dHB1dCBmaWxlLiAgVGhyZWUgb3IgbW9yZSBub24tb3B0aW9uIGFyZ3MgaXMgYW4gZXJyb3IuCglDbGVhbiB1cC4KCSogZ2NjLmMgKGRlZmF1bHRfY29tcGlsZXJzKTogUGFzcyAtJCB0byB0aGUgcHJlcHJvY2Vzc29yLgoJKiBvYmpjL2xhbmctc3BlY3MuaDogTGlrZXdpc2UuCgpNb24gTWF5IDEwIDEyOjU5OjIwIDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIG9wdGFicy5jIChlbWl0X2NtcF9hbmRfanVtcF9pbnNucyk6IEhhbmRsZSB0aGUgY2FzZSB3aGVyZSBib3RoCglvcGVyYW5kcyB0byB0aGUgY29tcGFyaXNvbiBhcmUgY29uc3RhbnRzLgoKTW9uIE1heSAxMCAwNzoyODoxMCAxOTk5ICBCcnVjZSBLb3JiIDxhdXRvZ2VuQGF1dG9nZW4uZnJlZXNlcnZlcnMuY29tPgoKCSogZml4aW5jL2luY2xoYWNrLmRlZihhcm1fbm9yY3JvZnRfaGludCk6IGNoZWNrIGJlZm9yZSBmaXhpbmcKCShub19kb3VibGVfc2xhc2gpOiBwb3J0YWJpbGl0eQoJKG1hdGhfZXhjZXB0aW9uKTogYWRkZWQgcmVtaW5kZXIgY29tbWVudAoKTW9uIE1heSAxMCAwMToyODoxMCAxOTk5ICBDcmFpZyBCdXJsZXkgIDxjcmFpZ0BqY2Itc2MuY29tPgoKCUZyb20gRnJpIE1heSA3ICA5OjMxOjQxIDE5OTkgRG9ubiBUZXJyeSAoZG9ubkBpbnRlcml4LmNvbSk6CgkqIHZhcmFzbS5jIChtYXJrX2NvbnN0YW50X3Bvb2wpOiBBZGQgc29tZSB0cmFuc2l0aXZlIGNsb3N1cmUuCgpTdW4gTWF5ICA5IDIyOjUxOjA0IDE5OTkgIENyYWlnIEJ1cmxleSAgPGNyYWlnQGpjYi1zYy5jb20+CgoJRml4IGdjYy5kZy85OTA1MDYtMC5jOgoJKiBjLXR5cGVjay5jIChyZXF1aXJlX2NvbXBsZXRlX3R5cGUpOiBIYW5kbGUgRVJST1JfTUFSSyBpbnB1dC4KClN1biBNYXkgIDkgMTM6MTk6MTIgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogZ2NzZS5jIChjcHJvcF9pbnNuKTogRG8gbm90IHRyeSB0byBzaW1wbGlmeSBhIHNpbXBsZSBqdW1wLgoKU3VuIE1heSAgOSAxMToxMjoxOSAxOTk5ICBQaGlsaXAgQmx1bmRlbGwgPGJwQG5leHVzLmNvLnVrPgoKCSogY29uZmlnL2FybS9hcm0uaCAoQVNNX09VVFBVVF9NSV9USFVOSyk6IEFkZCAoUExUKSB0byBicmFuY2ggaWYKCW5lY2Vzc2FyeS4gIFJlcG9ydGVkIGJ5IGppbUBmZWRlcmF0ZWQuY29tLgoKU2F0IE1heSAgOCAyMzowNTozNSAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBwYS5oIChQUklOVF9PUEVSQU5EX0FERFJFU1MpOiBPdXRwdXQgIiVyMCIsIG5vdCAicjAiIGZvciB0aGUKCWJhc2UgcmVnaXN0ZXIgaW4gYW4gYWJzb2x1dGUgbWVtb3J5IGFkZHJlc3MuCgkqIHBhLm1kIChjb25kaXRpb25hbCBtb3Zlcyk6IEF2b2lkIHVzaW5nIGltbWVkaWF0ZSB6ZXJvIGZvcgoJcmVnaXN0ZXIgemVyby4KClNhdCBNYXkgIDggMDY6MjM6MjEgMTk5OSAgUGhpbGlwIEJsdW5kZWxsICA8cGJAbmV4dXMuY28udWs+CgoJQmFzZWQgb24gcGF0Y2ggYnkgU2NvdHQgQmFtYnJvdWdoOgoJKiBjb25maWcvYXJtL2FybS5oIChORUVEX1BMVF9HT1QpOiBOZXcgbWFjcm8uICBTZXQgdG8gMCBpZiBub3QKCWFscmVhZHkgZGVmaW5lZC4KCSogY29uZmlnL2FybS9lbGYuaCAoTkVFRF9QTFRfR09UKTogRGVmaW5lIHRvIGZsYWdfcGljLgoJKiBjb25maWcvYXJtL2FybS5tZCAoY2FsbF9zeW1ib2wsIGNhbGxfdmFsdWVfc3ltYm9sIGV0IGFsLik6IElmCglORUVEX1BMVF9HT1QgaXMgdHJ1ZSwgYWRkIGV4cGxpY2l0ICIoUExUKSIgdG8gZ2VuZXJhdGVkIGJyYW5jaGVzLgoJKiBjb25maWcvYXJtL2FybS5jIChvdXRwdXRfZnVuY19lcGlsb2d1ZSwKCW91dHB1dF9yZXR1cm5faW5zdHJ1Y3Rpb24pOiBMaWtld2lzZSBmb3IgY2FsbHMgdG8gYWJvcnQuCgpTYXQgTWF5ICA4IDAxOjU3OjU4IDE5OTkgIERvbm4gVGVycnkgKGRvbm5AaW50ZXJpeC5jb20pCgoJKiBjYWxscy5jIChydHhfZm9yX2Z1bmN0aW9uX2NhbGwpOiBFeHRlbmQgZnVuY3Rpb24gcG9pbnRlciBiZWluZwoJcGFzc2VkIHRvIGNoa3JfY2hlY2tfZXhlY19saWJmdW5jLCBpZiBuZWVkZWQuCgpTYXQgTWF5ICA4IDAxOjUxOjUwIDE5OTkgIERhdmlkIEVkZWxzb2huICA8ZWRlbHNvaG5AZ251Lm9yZz4KCgkqIGdpbmNsdWRlL3N0ZGFyZy5oIChfX3ZhX3JvdW5kZWRfc2l6ZSk6IFVzZSBsb25nIHR5cGUgZm9yCglyb3VuZGluZyBvbiBBSVguCgkqIGdpbmNsdWRlL3ZhcmFyZ3MuaDogTGlrZXdpc2UuCgpTYXQgTWF5ICA4IDAxOjQ3OjIwIDE5OTkgIEFuZHJlYXMgU2Nod2FiICA8c2Nod2FiQGlzc2FuLmNzLnVuaS1kb3J0bXVuZC5kZT4KCgkqIGludm9rZS50ZXhpOiBSZW1vdmUgZHVwbGljYXRlcyBpbiB0aGUgZGVzY3JpcHRpb24gb2YgLWQKCWxldHRlcnMuICBGaXggdXNlIG9mIEBpdGVtIHZzLiBAaXRlbXguCgpTYXQgTWF5ICA4IDAxOjQzOjAyIDE5OTkgIEZyYW56IFNpcmwgIDxGcmFuei5TaXJsLWtlcm5lbEBsYXV0ZXJiYWNoLmNvbT4KCgkqIHJzNjAwMC5oIChSUzYwMDBfVkFSQVJHU19PRkZTRVQpOiBEaWUgZGllIGRpZS4KCShDVU1VTEFUSVZFX0FSR1MpOiBSZW1vdmUgdmFyYXJnc19vZmZzZXQ7IHVwZGF0ZSBjb21tZW50YXJ5LgoJKiByczYwMDAuYyAoc2V0dXBfaW5jb21pbmdfdmFyYXJncyk6IEZpeCB0eXBvIGxhc3QgY2hhbmdlLgoJKGluaXRfY3VtdWxhdGl2ZV9hcmdzKTogUmVtb3ZlIHZhcmFyZ3Nfb2Zmc2V0IHJlZmVyZW5jZXMuCgoJKiByczYwMDAvbGludXguaCAoTk9fSU1QTElDSVRfRVhURVJOX0MpOiBEZWZpbmUuCgkoTURfRVhFQ19QUkVGSVgsIE1EX1NUQVJURklMRV9QUkVGSVgpOiBVbmRlZmluZS4KClNhdCBNYXkgIDggMDE6MzQ6MTkgMTk5OSAgQW5kcmVhcyBTY2h3YWIgIDxzY2h3YWJAaXNzYW4uY3MudW5pLWRvcnRtdW5kLmRlPgoKCSogcmVsb2FkMS5jIChnZW5fbW9kZV9pbnQpOiBOZXcgZnVuY3Rpb24uCgkocmVsb2FkX2NzZV9tb3ZlMmFkZCk6IFVzZSBpdCB0byBnZW5lcmF0ZSB0aGUgbmV3IGNvbnN0YW50cy4KClNhdCBNYXkgIDggMDE6MjU6MDkgMTk5OSAgQW5kcmVhcyBTY2h3YWIgIDxzY2h3YWJAaXNzYW4uY3MudW5pLWRvcnRtdW5kLmRlPgoKCSogdmFyYXNtLmMgKG91dHB1dF9jb25zdGFudCk6IERvIG5vdGhpbmcgaWYgLWZzeW50YXgtb25seS4KCkZyaSBNYXkgIDcgMTk6MTA6MTUgMTk5OSAgVmxhZGltaXIgTWFrYXJvdiAgPHZtYWthcm92QHRvZnUudG8uY3lnbnVzLmNvbT4KCgkqIHNwYXJjLmggKEdPX0lGX0xFR0lUSU1BVEVfQUREUkVTUyk6IFByb2hpYml0IFJFRytSRUcgYWRkcmVzc2luZwoJZm9yIFRGbW9kZSB3aGVuIHRoZXJlIGFyZSBubyBpbnN0cnVjdGlvbnMgd2hpY2ggYWNjZXB0IFJFRytSRUcKCWluc3RydWN0aW9ucy4KCkZyaSBNYXkgIDcgMTI6Mzg6NTQgMTk5OSAgSmltIFdpbHNvbiAgPHdpbHNvbkBjeWdudXMuY29tPgoKCSogbWlwcy9lbGY2NC5oIChNQUtFX0RFQ0xfT05FX09OTFksIFVOSVFVRV9TRUNUSU9OX1ApOiBEZWZpbmUuCgkqIG1pcHMvbWlwcy5jIChtaXBzX3NlbGVjdF9ydHhfc2VjdGlvbik6IFdoZW4gVEFSR0VUX01JUFMxNiwgdXNlCglmdW5jdGlvbl9zZWN0aW9uIGluc3RlYWQgb2YgdGV4dF9zZWN0aW9uLgoJKiBtaXBzL21pcHMuaCAoRU5DT0RFX1NFQ1RJT05fSU5GTyk6IEFkZCBjaGVjayBmb3IgVU5JUVVFX1NFQ1RJT05fUAoJaW4gVEFSR0VUX01JUFMxNiBTVFJJTkdfQ1NUIGhhbmRsaW5nLgoKRnJpIE1heSAgNyAwOTo1NDoxMSAxOTk5ICBOaWNrIENsaWZ0b24gIDxuaWNrY0BjeWdudXMuY29tPgoKCVBhdGNoIGZyb206IE5pY2sgQnVycmV0dCAgPG5pY2suYnVycmV0dEBidGludGVybmV0LmNvbT4KCgkqIGFybS5jIChhcm1fcG9rZV9mdW5jdGlvbl9uYW1lKTogTmV3IGZ1bmN0aW9uIHRvIGltcGxlbWVudAoJLW1wb2tlLWZ1bmN0aW9uLW5hbWUuCgkqIGFvZi5oIChBU01fREVDTEFSRV9GVU5DVElPTl9OQU1FKTogQ2FsbCBpdC4KCSogYW91dC5oIChBU01fREVDTEFSRV9GVU5DVElPTl9OQU1FKTogTGlrZXdpc2UuCgkqIGVsZi5oIChBU01fREVDTEFSRV9GVU5DVElPTl9OQU1FKTogTGlrZXdpc2UuCgkqIGFybS5oOiBQcm90b3R5cGUgaXQuCgkoVEFSR0VUX1NXSVRDSEVTKTogQWRkIGBuby1wb2tlLWZ1bmN0aW9uLW5hbWUnLgoKRnJpIE1heSAgNyAxNDoxOTozMSAxOTk5ICBSYWluZXIgT3J0aCAgPHJvQFRlY2hGYWsuVW5pLUJpZWxlZmVsZC5ERT4KCgkqIGZpeGluYy9zZXJ2ZXIuYyAobG9hZF9kYXRhKTogQ2FzdCB0ZXh0X3NpemUgdG8gbG9uZywgYWRhcHQKCWZvcm1hdC4KCSogZml4aW5jL3NlcnZlci5jIChyZWFkX3BpcGVfdGltZW91dCk6IERlY2xhcmUgdm9sYXRpbGUsIG1vZGlmaWVkCglpbiBzaWduYWwgaGFuZGxlci4KCShzaWdfaGFuZGxlcik6IEFkZCBkZWJ1ZyBjb2RlLgoJKiBmaXhpbmMvc2VydmVyLmMgKHJ1bl9zaGVsbCk6IERvbid0IFwtZXNjYXBlIGNkLCBpdCBicmVha3MgdGhlCglVbHRyaXggVjQuMyAvYmluL3NoLgoJKiBmaXhpbmMvc2VydmVyLmMgKGRlZl9hcmdzKTogVXNlIHN0YXRpYyBpbnN0ZWFkIG9mIFNUQVRJQyB0bwoJYXZvaWQgcmVkZWZpbml0aW9uIGVycm9yIGZyb20gbGlua2VyIGlmZiBERUJVRy4KCgkqIGZpeGluYy9oYWNrc2hlbGwudHBsOiBEb24ndCBzdHJpcCB0cmFpbGluZyBkaXJlY3RvcnkgZnJvbQoJREVTVERJUiAtIHRoYXQgaXMgYWxyZWFkeSBkb25lCgoJKiBmaXhpbmMvZml4aW5jbC5jIChydW5fY29tcGlsZXMpOiBmaXggbWVtb3J5IGxlYWsKClRodSBNYXkgIDYgMjA6MzQ6MDAgMTk5OSAgTWFyayBNaXRjaGVsbCAgPG1hcmtAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIHJlc291cmNlLmMgKG1hcmtfcmVmZXJlbmNlZF9yZXNvdXJjZXMpOiBNYWtlIHZvbGF0aWwKCW1vbm90b25pY2FsbHkgaW5jcmVhc2luZy4KCShtYXJrX3NldF9yZXNvdXJjZXMpOiBMaWtld2lzZS4KClRodSBNYXkgIDYgMjA6MDI6MzMgMTk5OSAgRnJlZCBGaXNoICA8Zm5mQGJlLmNvbT4KCgkqIHJzNjAwMC94bS1iZW9zLmggKEhBVkVfVlBSSU5URik6IERvbid0IHJlZGVmaW5lIGlmIGFscmVhZHkgZGVmaW5lZC4KCShIQVZFX1BVVEVOViwgSEFWRV9BVEVYSVQsIEhBVkVfUkVOQU1FKTogTGlrZXdpc2UuCgpXZWQgTWF5ICA1IDIwOjI4OjMyIDE5OTkgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGluc3RhbGwudGV4aSAoSGVhZGVyIERpcnMpOiBzL0dQTFVTL0dQTFVTUExVUy8uCgpXZWQgTWF5ICA1IDIzOjQ0OjE1IDE5OTkgIEoib3JuIFJlbm5lY2tlIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIHVucm9sbC5jIChjb3B5X2xvb3BfYm9keSk6IERvbid0IGNvcHkgVlRPUCBub3RlcyBmcm9tIGNvcHlfbm90ZXNfZnJvbS4KCldlZCBNYXkgIDUgMTY6MjY6MTMgMTk5OSAgVmxhZGltaXIgTWFrYXJvdiAgPHZtYWthcm92QHRvZnUudG8uY3lnbnVzLmNvbT4KCgkqIGZ1bmN0aW9uLmMgKHB1cmdlX2FkZHJlc3NvZl9yZXBsYWNlbWVudHMpOiBSZW5hbWUgaW50bwoJcHVyZ2VfYml0ZmllbGRfYWRkcmVzc29mX3JlcGxhY2VtZW50cy4KCShwdXJnZV9hZGRyZXNzb2ZfcmVwbGFjZW1lbnRzKTogTmV3IHZhcmlhYmxlLgoJKHB1cmdlX2FkZHJlc3NvZl8xKTogQWRkIGNvZGUgZm9yIGNoYW5naW5nIGFkZHJlc3NvZiBpbiBub3RlcyBmb3IKCWZpZWxkIHZhbHVlcyB3aGljaCBhcmUgZXh0cmFjdGVkIGJ5IHVzYWdlIE1FTSB3aXRoIG5hcnJvd2VyIG1vZGUuCgkocHVyZ2VfYWRkcmVzc29mKTogSW5pdGlhbGl6ZSBwdXJnZV9iaXRmaWVsZF9hZGRyZXNzb2ZfcmVwbGFjZW1lbnRzLgoKV2VkIE1heSAgNSAwNzo0MDowMiAxOTk5ICBOaWNrIENsaWZ0b24gIDxuaWNrY0BjeWdudXMuY29tPgoKCVBhdGNoIGZyb206IE5pY2sgQnVycmV0dCAgPG5pY2suYnVycmV0dEBidGludGVybmV0LmNvbT4KCSogY29uZmlnL2FybS9hcm0uaCAoQVJNX01DT1VOVF9OQU1FKTogRGVmaW5lLgoJKEZVTkNUSU9OX1BST0ZJTEVSKTogUmVtb3ZlIGFzc2VtYmxlciBkaWFsZWN0IGRlcGVuZGVuY3kgYW5kIHVzZQoJQVJNX01DT1VOVF9OQU1FLgoJKFRSQU1QT0xJTkVfVEVNUExBVEUpOiBSZW1vdmUgYXNzZW1ibGVyIGRpYWxlY3QgZGVwZW5kZW5jeS4KCgkqIGNvbmZpZy9hcm0vYW9mLmggKEFSTV9NQ09VTlRfTkFNRSk6IERlZmluZS4KCjE5OTktMDUtMDUgMDk6NTggLTA0MDAgIFphY2sgV2VpbmJlcmcgIDx6YWNrQHJhYmkuY29sdW1iaWEuZWR1PgoKCSogZ2NjLmMgKGRlZmF1bHRfY29tcGlsZXJzKTogRml4IGJyYWNlIG5lc3RpbmcgYnVnLgoJKiBvYmpjL2xhbmctc3BlY3MuaDogVXNlICVpLCBub3QgJWcubWksIGZvciB0aGUgaW5wdXQgZmlsZQoJd2hlbiBwcm9jZXNzaW5nIGFuIC5taSBmaWxlLgoKVHVlIE1heSAgNCAxMzoxNzo1NSAxOTk5ICBNYXJrIE1pdGNoZWxsICA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCSogcmVzb3VyY2UuYyAobWFya19zZXRfcmVzb3VyY2VzKTogSGFuZGxlIFVOU1BFQ19WT0xBVElMRSwKCUFTTV9JTlBVVCwgVFJBUF9JRiwgYW5kIEFTTV9PUEVSQU5EUyBqdXN0IGxpa2UgaW4KCW1hcmtfcmVmZXJlbmNlZF9yZXNvdXJjZXMuCgpNb24gTWF5ICAzIDIyOjM4OjQxIDE5OTkgIERhdmlkIEVkZWxzb2huICA8ZWRlbHNvaG5AZ251Lm9yZz4KCgkqIHJzNjAwMC9haXg0My5oIChTVUJUQVJHRVRfT1ZFUlJJREVfT1BUSU9OUyk6IENoYW5nZSBub24tUG93ZXJQQwoJYW5kIEFJWDY0IGNvbWJpbmF0aW9uIHRvIHdhcm5pbmcuICBBZGQgd2FybmluZyBmb3IgZGlzYWJsaW5nCglQb3dlclBDNjQgc3VwcG9ydCB3aGVuIHVzaW5nIDY0LWJpdCBtb2RlLgoJKExJQl9TUEVDKTogRG8gbm90IGxpbmsgd2l0aCBsaWJnLmEgaW4gNjQtYml0IG1vZGUuCgkoTElOS19TUEVDKTogRG8gbm90IGV4cG9ydCBsaWJnLmV4cCBzeW1ib2xzIGluIDY0LWJpdCBtb2RlLgoJKiByczYwMDAvcnM2MDAwLmggKE1ZX0lTQ09GRik6IFRyZWF0IGltcG9ydC9leHBvcnQgZmlsZXMgYXMgdmFsaWQKCVhDT0ZGIGZpbGVzLgoJKHJlYWRfb25seV9kYXRhX3NlY3Rpb24sIHByaXZhdGVfZGF0YV9zZWN0aW9uLAoJcmVhZF9vbmx5X3ByaXZhdGVfZGF0YV9zZWN0aW9uKTogQWx3YXlzIGFsaWduIENTRUNUcyB0byBkb3VibGV3b3JkCglib3VuZGFyeSByZWdhcmRsZXNzIG9mIG1vZGUuCgkoVEVYVF9TRUNUSU9OX0FTTV9PUCk6IEFsaWduIHRleHQgQ1NFQ1Qgb24gZG91Ymxld29yZCBib3VuZGFyeSBpbgoJNjQtYml0IG1vZGUuCgkoREFUQV9TRUNUSU9OX0FTTV9PUCk6IEFsd2F5cyBhbGlnbiBDU0VDVCB0byBkb3VibGV3b3JkIGJvdW5kYXJ5LgoJKEFTTV9PVVRQVVRfTE9DQUwpOiBVc2Ugcm91bmRlZCBzaXplIGluIDY0LWJpdCBtb2RlIHRvCgltYWludGFpbiBkb3VibHdvcmQgYWxpZ25tZW50LgoKTW9uIE1heSAgMyAxNDo0NToyMyAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBtbjEwMjAwLm1kIChidHN0IGluc25zKTogYnRzdCBkb2VzIG5vdCBsZWF2ZSBjYzAgaW4gYSB1c2FibGUKCXN0YXRlIGZvciByZWR1bmRhbnQgdHN0IGVsaW1pbmF0aW5vLgoJKiBtbjEwMzAwLm1kIChidHN0IGluc25zKTogTGlrZXdpc2UuCgpNb24gTWF5ICAzIDE2OjE0OjMyIDE5OTkgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIG1pcHMuaCAoUG1vZGUpOiBSZXZlcnQgT2N0IDE0dGggY2hhbmdlIHdoaWNoIGFkZGVkIGEgY2FzdC4KClN1biBNYXkgIDIgMTQ6MDI6MjEgMTk5OSAgTWFyayBNaXRjaGVsbCAgPG1hcmtAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIHRyZWUuaCAoc3RydWN0IHRyZWVfZGVjbCk6IEFkZCBjb21kYXRfZmxhZy4KCShERUNMX0NPTURBVCk6IERlZmluZSBpdC4KCSogdG9wbGV2LmMgKHdyYXB1cF9nbG9iYWxfZGVjbGFyYXRpb25zKTogRG9uJ3Qgb3V0cHV0IGEKCURFQ0xfQ09NREFUIGZ1bmN0aW9uIGp1c3QgYmVjYXVzZSBpdCdzIHB1YmxpYy4KClN1biBNYXkgIDIgMTU6MTY6NDIgMTk5OSAgSm9zZXBoIFMuIE15ZXJzICA8anNtMjhAY2FtLmFjLnVrPgoKCSogcGRwMTEuaCAoVEFSR0VUX1NXSVRDSEVTKTogRml4IGVycm9yIGluIHByZXZpb3VzIGNoYW5nZS4KCShBU1NFTUJMRVJfRElBTEVDVCk6IERlZmluZS4KCShDT05ESVRJT05BTF9SRUdJU1RFUl9VU0FHRSk6IFJlbmFtZSBmbG9hdGluZyBwb2ludCByZWdpc3RlcnMgaWYKCXJlcXVpcmVkIGZvciB0aGUgVU5JWCBhc3NlbWJsZXIuCgkoQVNNX09VVFBVVF9JTlQpOiBSZW1vdmUuICBUaGUgY29tcGlsZXIgd2lsbCBzeW50aGVzaXplIGl0LgoJKEFTTV9PVVRQVVRfQUREUl9WRUNfUFJPTE9HVUUpOiBSZW1vdmUuCgkoQVNNX09QRU5fUEFSRU4sIEFTTV9DTE9TRV9QQVJFTik6IENoYW5nZSB0byAiWyIgYW5kICJdIi4KCShUUkFNUE9MSU5FX1RFTVBMQVRFKTogVXNlIEFTTV9PVVRQVVRfU0hPUlQuCgkqIHBkcDExLmMgKG91dHB1dF9hZGRyX2NvbnN0X3BkcDExKTogQ29weSBvZiBvdXRwdXRfYWRkcl9jb25zdAoJYWRhcHRlZCB0byBvdXRwdXQgY29uc3RhbnRzIGluIG9jdGFsLgoJKiBwZHAxMS5jLCBwZHAxMS5oLCBwZHAxMS5tZDogVXNlIG91dHB1dF9hZGRyX2NvbnN0X3BkcDExIGluc3RlYWQKCW9mIG91dHB1dF9hZGRyX2NvbnN0LiAgT3V0cHV0IGNvbnN0YW50cyBpbiBvY3RhbC4gIFVzZSBhc3NlbWJsZXIKCWRpYWxlY3QgYWx0ZXJuYXRpdmVzIHdoZXJlIERFQyBhbmQgVU5JWCBhc3NlbWJsZXJzIHVzZSBkaWZmZXJlbnQKCWluc3RydWN0aW9uIG5hbWVzLgoKU3VuIE1heSAyIDAxOjE1OjA2IFBEVCAxOTk5IEplZmYgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiB2ZXJzaW9uLmM6IEJ1bXAgZm9yIHNuYXBzaG90LgoKRnJpIEFwciAzMCAxMzo1NTo0MyAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogdmEtcHBjLmggKF9fdmFfc3RhcnRfY29tbW9uKTogTGV0IF9fYnVpbHRpbl9zYXZlcmVncyBkbyB0aGUgd29yay4KCSogcnM2MDAwLmMgKGV4cGFuZF9idWlsdGluX3NhdmVyZWdzKTogRm9yIFY0LCBpbml0aWFsaXplIGEgcHJpdmF0ZQoJdmFfbGlzdCBzdHJ1Y3QsIGFuZCByZXR1cm4gYSBwb2ludGVyIHRvIGl0LgoJKHNldHVwX2luY29taW5nX3ZhcmFyZ3MpOiBWNCBzYXZlIGFyZWEgYmFzZWQgb2ZmIHZpcnR1YWxfc3RhY2tfdmFycwoJaW5zdGVhZCBvZiBmcmFtZV9wb2ludGVyLgoKVGh1IEFwciAyOSAyMzowMjoyMiAxOTk5ICBNYXJrIE1pdGNoZWxsICA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCSogZW1pdC1ydGwuYyAoc3RhcnRfc2VxdWVuY2UpOiBFeHBhbmQgY29tbWVudHMuCgkoc3RhcnRfc2VxdWVuY2VfZm9yX3J0bF9leHByKTogTGlrZXdpc2UuCgkocHVzaF90b19zZXF1ZW5jZSk6IExpa2V3aXNlLgoJKGVuZF9zZXF1ZW5jZSk6IExpa2V3aXNlLgoJKiBleHByLmMgKGluaGliaXRfZGVmZXJfcG9wKTogTGlrZXdpc2UuCgkqIGV4cHIuaCAoaW5oaWJpdF9kZWZlcl9wb3ApOiBMaWtld2lzZS4KCShOT19ERUZFUl9QT1ApOiBMaWtld2lzZS4KCShPS19ERUZFUl9QT1ApOiBMaWtld2lzZS4KClRodSBBcHIgMjkgMjI6MTM6NDYgMTk5OSAgUm9iZXJ0IExpcGUgIDxyb2JlcnRsaXBlQHVzYS5uZXQ+CgoJKiBjb25maWd1cmUuaW4gKGk/ODYtVW5peFdhcmU3Ki1zeXN2KTogU2V0IHRocmVhZF9maWxlIHRvICdwb3NpeCcKCS0tZW5hYmxlLXRocmVhZHNbPXt5ZXMscHRocmVhZHMscG9zaXh9XSBpcyBwYXNzZWQgYXMgYSBjb21tYW5kCglsaW5lIHBhcmFtZXRlciB0byBjb25maWd1cmUuCgkqIGNvbmZpZy9pMzg2L3N5c3Y1LmggKExJQl9TUEVDKTogQWRkIHN1cHBvcnQgZm9yICctcHRocmVhZCcuCgkoQ1BQX1NQRUMpOiBMaWtld2lzZS4KClRodSBBcHIgMjkgMTc6MjM6NTkgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGVtaXQtcnRsLmMgKG9wZXJhbmRfc3Vid29yZCk6IFJlbGlnaW91c2x5IG1hc2sgYW5kIHNpZ24tZXh0ZW5kCglmcm9tIDMyLWJpdHMgdG8gSE9TVF9XSURFX0lOVC4KClRodSBBcHIgMjkgMTU6NTg6NTIgMTk5OSAgUm9iZXJ0IExpcGUgIDxyb2JlcnRsaXBlQHVzYS5uZXQ+CgoJKiBmaXhpbmMvcmVnZXguYywgZml4aW5jL3JlZ2V4Lmg6IFJlbW92ZWQuICAgUmVwbGFjZSB3aXRoLi4uCgkqIGZpeGluYy9nbnUtcmVnZXguYywgZml4aW5jL2dudS1yZWdleC5oOiBJbXBvcnRlZCBmcm9tIEdEQiA0LjE4LgoJKiBmaXhpbmMvTWFrZWZpbGUuaW4gKE9CSiwgSERSKTogSGFuZGxlIG5hbWUgY2hhbmdlcyBmcm9tIGFib3ZlLgoJKGdudS1yZWdleC5vKTogRGVmaW5lIFJFR0VYX01BTExPQyB0byBhdm9pZCBtZW1vcnkgbGVhay4KCSogZml4aW5jL2ZpeGluY2wuYzogbmV3IHJlZ2V4LmggaGVhZGVyIG5hbWUKCSogTWFrZWZpbGUuaW46IG5ldyByZWdleC5bY2hdIGZpbGUgbmFtZXMKClRodSBBcHIgMjkgMTI6NTM6MzMgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGNhbGxzLmMgKGVtaXRfY2FsbF8xKTogUGFzcyByb3VuZGVkX3N0YWNrX3NpemUgdG8gZW1pdF9jYWxsCglpbnN0ZWFkIG9mIHRoZSB1bnJvdW5kZWQgc2l6ZS4KCjE5OTktMDQtMjggMTQ6NDAgQnJ1Y2UgS29yYiA8ZGRzaW5jMDlAaXgubmV0Y29tLmNvbT4KCgkqIGZpeGluYy9ta2ZpeGluYy5zaDogTWFrZXN1cmUgdGhlIHJlc3VsdCBzaGVsbCBzY3JpcHQgaXMgd3JpdGFibGUKCldlZCBBcHIgMjggMTA6MzY6MzkgMTk5OSAgQW5kcmVhcyBTY2h3YWIgIDxzY2h3YWJAaXNzYW4uY3MudW5pLWRvcnRtdW5kLmRlPgoKCSogY29uZmlnL202OGsvbTY4ay5tZCAoY21wc2krMSk6IFVzZSBjbXAudyB3aGVuIGNvbXBhcmluZyBhIDE2IGJpdAoJY29uc3RhbnQgd2l0aCBhbiBhZGRyZXNzIHJlZ2lzdGVyLgoKV2VkIEFwciAyOCAwMDoxNDo0MSBQRFQgMTk5OSBKZWZmIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogdmVyc2lvbi5jOiBCdW1wIGZvciBzbmFwc2hvdC4KClR1ZSBBcHIgMjcgMTk6NTA6MjUgRURUIDE5OTkgIEFuZHJldyBNYWNMZW9kICA8YW1hY2xlb2RAY3lnbnVzLmNvbT4KCgkqIHJ0bC5oIChSRUdfRUhfUkVHSU9OKTogVXBkYXRlIGNvbW1lbnQgdG8gaW5kaWNhdGUgYSB2YWx1ZSBvZiAtMQoJaW5kaWNhdGVzIG5vIHRocm93IGFuZCBubyBub25sb2NhbCBnb3Rvcy4KCSogb3B0YWJzLmMgKGVtaXRfbGliY2FsbF9ibG9jayk6IEVtaXQgUkVHX0VIX1JFR0lPTiB3aXRoIGEgdmFsdWUKCW9mIC0xIGluc3RlYWQgb2YgMCB0byBpbmRpY2F0ZSBhIG5vbmxvY2FsIGdvdG8gd29uJ3QgaGFwcGVuIGVpdGhlci4KCSogZmxvdy5jIChjb3VudF9iYXNpY19ibG9ja3MsIGZpbmRfYmFzaWNfYmxvY2tzXzEpOiBJZ25vcmUgbGliY2FsbAoJYmxvY2tzLCBsb29rIGZvciBSRUdfRUhfUkVHSU9OIG5vdGUgZXhjbHVzaXZlbHkuCgkobWFrZV9lZGdlcyk6IENoZWNrIGZvciBSRUdfRUhfUkVHSU9OID4gMCBmb3Igc3BlY2lmaWVkIGhhbmRsZXJzLgoKVHVlIEFwciAyNyAxNTozMzo0MiAxOTk5ICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQGdudS5vcmc+CgoJKiByczYwMDAuaCAocmVhZF9vbmx5X2RhdGFfc2VjdGlvbiwgcHJpdmF0ZV9kYXRhX3NlY3Rpb24sCglyZWFkX29ubHlfcHJpdmF0ZV9kYXRhX3NlY3Rpb24sIHRvY19zZWN0aW9uKTogQWxpZ24gQ1NFQ1Qgb24KCWRvdWJsZXdvcmQgYm91bmRhcnkgZm9yIDY0LWJpdCB0YXJnZXQuCgkoREFUQV9TRUNUSU9OX0FTTV9PUCk6IExpa2V3aXNlLgoJKiByczYwMDAuYyAocnM2MDAwX3N0YWNrX2luZm8pOiBMZWFmIHByb2NlZHVyZSBzdGFjayBsaW1pdCBpcyAyODguCgpUdWUgQXByIDI3IDIwOjE5OjQ3IDE5OTkgIEoib3JuIFJlbm5lY2tlIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIHNoLm1kIChpbnN2KTogVXNlIGNvcHlfYWRkcl90b19yZWcuCgoJKiBmaW5hbC5jIChpbnNuX2xlbmd0aHNfbWF4X3VpZCk6IE5ldyB2YXJpYWJsZS4KCShpbml0X2luc25fbGVuZ3Rocywgc2hvcnRlbl9icmFuY2hlcyk6IFNldCBpdC4KCShnZXRfYXR0cl9sZW5ndGhzKTogVGVzdCBpbnNuIHVpZCBhZ2FpbnN0IGluc25fbGVuZ3Roc19tYXhfdWlkLgoKMTk5OS0wNC0yNyAwODozMiAtMDQwMCAgWmFjayBXZWluYmVyZyAgPHphY2tAcmFiaS5jb2x1bWJpYS5lZHU+CgoJKiBleHByLmMgKGVtaXRfbW92ZV9pbnNuXzEpOiBBYm9ydCBpZiBNT0RFIGFyZ3VtZW50IGlzIGludmFsaWQuCgkoY29tcGFyZSk6IFB1bnQgaWYgVFJFRV9PUEVSQU5EIChleHAsIDApIGlzIGFuIEVSUk9SX01BUksuCgpUdWUgQXByIDI3IDAxOjMzOjQzIDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIE1ha2VmaWxlLmluIChPUkRJTkFSWV9GTEFHU19UT19QQVNTKTogUmVubWFlZCBmcm9tIEZMQUdTX1RPX1BBU1MuCglSZW1vdmUgIkNDIi4KCShGTEFHU19UT19QQVNTKTogTmV3IHZhcmlhYmxlLgoKVHVlIEFwciAyNyAwMDozNjo0NCAxOTk5ICBOaWNrIEJ1cnJldHQgIDxuaWNrLmJ1cnJldHRAYnRpbnRlcm5ldC5jb20+CgoJKiBhcm0ubWQgKG5vcCk6IE91dHB1dCBpbnN0cnVjdGlvbiB1c2luZyBvdXRwdXRfYXNtX2luc24gdG8gZml4Cglhc3NlbWJsZXIgZGlhbGVjdCBwcm9ibGVtcy4KCk1vbiBBcHIgMjYgMjM6NTU6NTAgMTk5OSAgUm9iZXJ0IExpcGUgIDxyb2JlcnRsaXBlQHVzYS5uZXQ+CgoJKiBNYWtlZmlsZS5pbiAoZml4aW5jLnNoKTogRml4IGRlcGVuZGVuY2llcy4KCgkqIGZpeGluYy9pbmNsaGFjay5kZWYgKGF2b2lkX2Jvb2wpOiBFbmFibGUgbWF0Y2ggaWYgdHlwZWRlZnMgYXJlCglwcmVwZW5kZWQgYnkgc3BhY2VzLgoJKHNjbzVfc3RhdF93cmFwcGVycyk6IE5ldyBmaXguICAgTWFrZSBzeXMvc3RhdC5oIEMrKyBzYWZlLgoJKiBmaXhpbmMvZml4aW5jbC5zaCwgZml4aW5jL2ZpeGluY2wueCwgZml4aW5jL2luY2xoYWNrLnNoOiBSZWJ1aWx0LgoKTW9uIEFwciAyNiAyMzoyODo1NCAxOTk5ICBNdW1pdCBLaGFuICA8a2hhbkB4cmF5bGl0aC53aXNjLmVkdT4KICAgICAgICAgICAgICAgICAgICAgICAgICBEb25uIFRlcnJ5ICA8ZG9ubkBpbnRlcml4LmNvbT4KCgkqIGZ1bmN0aW9uLmMgKHB1dF92YXJfaW50b19zdGFjayk6IENoYW5nZSBwdHJfbW9kZSB0byBQbW9kZQoJaW4gc2V0dXAgZm9yIGNoa3Jfc2V0X3JpZ2h0X2xpYmZ1bmMgY2FsbHMuCgkoYXNzaWduX3BhcmFtcyk6IExpa2V3aXNlLgoJKiBleHByLmMgKGVtaXRfcHVzaF9pbnNuKTogQ2hhbmdlIHB0cl9tb2RlIHRvIFBtb2RlIGluCglzZXR1cCBmb3IgY2hrcl9jb3B5X2JpdG1hcF9saWJmdW5jIGFuZCBjaGtyX3NldF9yaWdodF9saWJmdW5jIGNhbGxzLgoJKGV4cGFuZF9hc3NpZ25tZW50KTogQ2hhbmdlIHB0cl9tb2RlIHRvIFBtb2RlIGluCglzZXR1cCBmb3IgY2hrcl9hZGRfbGliZnVuYyBhbmQgY2hrcl9jb3B5X2JpdG1hcF9saWJmdW5jLgoJKHN0b3JlX2V4cHIpOiBDaGFuZ2UgcHRyX21vZGUgdG8gUG1vZGUgaW4KCXNldHVwIGZvciBjaGtyX2FkZF9saWJmdW5jIGFuZCBjaGtyX2NvcHlfYml0bWFwX2xpYmZ1bmMuCgkoZXhwYW5kX2V4cHIpOiBDaGFuZ2UgcHRyX21vZGUgdG8gUG1vZGUgaW4KCXNldHVwIGZvciBjaGtyX2NoZWNrX2FkZHJfbGliZnVuYy4KCShleHBhbmRfYnVpbHRpbik6IENoYW5nZSBwdHJfbW9kZSB0byBQbW9kZSBpbgoJc2V0dXAgZm9yIGNoa3JfY2hlY2tfc3RyX2xpYmZ1bmMsIGNoa3JfY29weV9iaXRtYXBfbGliZnVuYyBhbmQKCWNoa3JfY2hlY2tfYWRkcl9saWJmdW5jLgoJKiBjYWxscy5jIChydHhfZm9yX2Z1bmN0aW9uX2NhbGwpOiBDaGFuZ2UgcHRyX21vZGUgdG8gUG1vZGUgaW4KCXNldHVwIGZvciBjaGtyX2NoZWNrX2V4ZWNfbGliZnVuYy4KCShleHBhbmRfY2FsbCk6IENoYW5nZSBwdHJfbW9kZSB0byBQbW9kZSBpbgoJc2V0dXAgZm9yIGNoa3Jfc2V0X3JpZ2h0X2xpYmZ1bmMuCgkoZXhwYW5kX2NhbGwpOiBDaGFuZ2UgcHRyX21vZGUgdG8gUG1vZGUgaW4KCXNldHVwIGZvciBjaGtyX3NldF9yaWdodF9saWJmdW5jLgoJKHN0b3JlX29uZV9hcmcpOiBDaGFuZ2UgcHRyX21vZGUgdG8gUG1vZGUgaW4KCXNldHVwIGZvciBjaGtyX3NldF9yaWdodF9saWJmdW5jLgoKCSogYy1wYXJzZS5pbiAoYWJzZGNsMSk6IEFsbG93IGF0dHJpYnV0ZXMgaW4gZXhwbGljaXQgdHlwZXNwZWNzLgoJKCVleHBlY3QpOiBVcGRhdGUuCgkqIGMtcGFyc2UueTogUmVnZW5lcmF0ZS4KCSogYy1wYXJzZS5jOiBMaWtld2lzZS4KCSogb2JqYy9vYmpjLXBhcnNlLmM6IExpa2V3aXNlLgoJKiBvYmpjL29iamMtcGFyc2UueTogTGlrZXdpc2UuCgpNb24gQXByIDI2IDIxOjE3OjQxIDE5OTkgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGMtcHJhZ21hLmMgKHB1c2hfYWxpZ25tZW50KTogRG9uJ3QgaWdub3JlIGFsaWdubWVudHMgZ3JlYXRlciB0aGFuCgk0IGJ5dGVzLgoJKGhhbmRsZV9wcmFnbWFfdG9rZW4pOiBMaWtld2lzZS4KCgkqIGMtcHJhZ21hLmM6IFN1cHBvcnQgZm9yICNwcmFnbWEgcGFjayAocHVzaCwgPGlkPiwgPG4+KS4KCShzdHJ1Y3QgYWxpZ25fc3RhY2spOiBBZGQgaWQgZmllbGQuCgkocHVzaF9hbGlnbm1lbnQsIHBvcF9hbGlnbm1lbnQpOiBUYWtlIGlkIHBhcmFtZXRlci4KCShoYW5kbGVfcHJhZ21hX3Rva2VuKTogQWRkIG5lY2Vzc2FyeSBzdGF0ZXMuCgkqIGMtcHJhZ21hLmggKGVudW0gcHJhZ21hX3N0YXRlKTogQWRkIG5lY2Vzc2FyeSBzdGF0ZXMuCgpUdWUgQXByIDI3IDEzOjU4OjIzIDE5OTkgIE1pY2hhZWwgSGF5ZXMgIDxtLmhheWVzQGVsZWMuY2FudGVyYnVyeS5hYy5uej4KCgkqIGNvbmZpZy9jNHgvYzR4Lm1kICgqY21wcWYsICpjbXBxZl9ub292LCAqY21wcWlfdGVzdCwKCSpjbXBxaV90ZXN0X25vb3YpOiBSZW1vdmUgPyBtb2RpZmllciBmcm9tIGNvbnN0cmFpbnRzIGxpc3QuCgkoKnNtdWxxaTNfaGlnaHBhcnRfY2xvYmJlciwgKnVtdWxxaTNfaGlnaHBhcnRfY2xvYmJlcik6IFN3YXAKCW91dHB1dCBzdHJpbmdzIHRvIG1hdGNoIG5ldyBjb25zdHJhaW50IG9yZGVyaW5nLgoKMTk5OS0wNC0yNiAxOToxNiAtMDQwMCAgWmFjayBXZWluYmVyZyAgPHphY2tAcmFiaS5jb2x1bWJpYS5lZHU+CgoJKiBjcHBoYXNoLmMgKGR1bXBfZGVmaW5pdGlvbik6IE5ldyBmdW5jdGlvbi4KCSogY3BwaGFzaC5oOiBQcm90b3R5cGUgaXQuCgoJKiBjcHBsaWIuYyAoaGFuZGxlX2RpcmVjdGl2ZSk6IERvbid0IG91dHB1dCBhbnl0aGluZyBoZXJlLgoJU3RyZWFtbGluZS4KCShwYXNzX3RocnVfZGlyZWN0aXZlKTogVGFrZSBhIGxlbmd0aCwgbm90IGEgcG9pbnRlciB0byB0aGUKCWVuZC4gIEFsbCBjYWxsZXJzIGNoYW5nZWQuCgkoZG9fZGVmaW5lKTogSGFuZGxlIC1kRCwgLWROLCAtZzMgZW50aXJlbHkgaGVyZS4gIFN0cmVhbWxpbmUuCgkoZG9faW5jbHVkZSk6IEhhbmRsZSAtZEkgaGVyZS4KCShkb19pZGVudCk6IENvcnJlY3QgdG8gbWF0Y2ggY2NjcC4KCShkb19wcmFnbWEpOiBDb3B5IHRoZSBwcmFnbWEgdGhyb3VnaCBoZXJlLgoJKGRvX2Fzc2VydCwgZG9fdW5hc3NlcnQpOiBUaWR5LgoKCSogY3BwaW5pdC5jIChjcHBfZmluaXNoKTogSWYgLWRNIHdhcyBzcGVjaWZpZWQsIHdhbGsgdGhlIG1hY3JvCgloYXNoIHRhYmxlIGFuZCBjYWxsIGR1bXBfZGVmaW5pdGlvbiBvbiBhbGwgdGhlIGVudHJpZXMuCgkqIGNwcG1haW4uYzogY3BwX2ZpbmlzaCBtYXkgcHJvZHVjZSBvdXRwdXQuCgpNb24gQXByIDI2IDE1OjI3OjMzIDE5OTkgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiB0b3BsZXYuYyAoY29tcGlsZV9maWxlKTogTW92ZSBjYWxsIHRvIGNoZWNrX2dsb2JhbF9kZWNsYXJhdGlvbnMKCWFmdGVyIG91dHB1dF9leGNlcHRpb25fdGFibGUgdG8gcmVzdG9yZSBiZWhhdmlvciBhcyBpdCB3YXMgYmVmb3JlCgkxOTk5LTA0LTIyIGNoYW5nZS4KCjE5OTktMDQtMjYgMTA6NTAgLTA3MDAgQnJ1Y2UgS29yYiA8ZGRzaW5jMDlAaXgubmV0Y29tLmNvbT4KCgkqIGZpeGluYy9maXhpbmNsLmM6ICBJbXByb3ZlIHRoZSBoYW5kbGluZyBvZiBjaGlsZCBwcm9jZXNzIGV4aXRzCgkqIGZpeGluYy9zZXJ2ZXIuW2NoXTogRXhwb3J0IHRoZSBpbnRlcmZhY2UgZm9yIHNodXR0aW5nIGRvd24KCXRoZSBzZXJ2ZXIgcHJvY2VzcwoJKiBmaXhpbmMvaW5jbGhhY2sudHBsOiBSZW1vdmUgdW5uZWNlc3NhcnkgY2hhcmFjdGVyIHF1b3RlCgkqIGZpeGluYy9maXhpbmNsLnNoLCBmaXhpbmMvaW5jbGhhY2suc2g6IFJlZ2VuZXJhdGUKCk1vbiBBcHIgMjYgMTA6NDE6NDIgRURUIDE5OTkgIEFuZHJldyBNYWNMZW9kICA8YW1hY2xlb2RAY3lnbnVzLmNvbT4KCgkqIGFscGhhLm1kIChidWlsdGluX3NldGptcF9yZWNlaXZlcik6IFVzZSBhIGxhYmVsX3JlZiBpbnN0ZWFkIG9mCglhIGNvZGUgbGFiZWwuCgoxOTk5LTA0LTI2IDA5OjQ3IC0wNDAwICBaYWNrIFdlaW5iZXJnICA8emFja0ByYWJpLmNvbHVtYmlhLmVkdT4KCgkqIHJ0bC50ZXhpOiBEb2N1bWVudCB0aGUgcnRsIGNsYXNzZXMgYW5kIHRoZWlyIHJlbGF0aW9uIHRvCglmb3JtYXRzLgoKTW9uIEFwciAyNiAwMTowMjozOCAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogYWxwaGEubWQgKGZpeF90cnVuYyBwYXR0ZXJucyk6IFVzZSByZWdfbm9fc3VicmVnX29wZXJhbmQgb24gb3AwCglmb3IgbGVzcyB3b3JrIGluIHJlbG9hZC4KCShtb3ZzZiBhbmQgbW92ZGYgcGF0dGVybnMpOiBQdXQgZnAgcmVnIGFsdGVybmF0aXZlcyBmaXJzdC4KCk1vbiBBcHIgMjYgMDE6NTU6NTYgMTk5OSAgTWFyYyBFc3BpZSAgPGVzcGllQGN2cy5vcGVuYnNkLm9yZz4KCgkqIGNvbmZpZ3VyZS5pbiAob3BlbmJzZCk6IEZhY3Rvcml6ZSB4bWFrZV9maWxlLgoJKGl4ODYgb3BlbmJzZCk6IFRyaW0gb2Jzb2xldGUgY29tbWVudC4KCSh2YXggb3BlbmJzZCk6IEZpeCB0eXBvLgoJKiBjb25maWd1cmU6IFJlYnVpbHQuCgpNb24gQXByIDI2IDAxOjMwOjU5IDE5OTkgRG9ubiBUZXJyeSA8ZG9ubkBpbnRlcml4LmNvbT4KCgkqIGV4cHIuYyAoZXhwYW5kX2Fzc2lnbm1lbnQpOiBJbXByb3ZlIHRlc3QgZm9yIHBvaW50ZXIgdHlwZS4KCk1vbiBBcHIgMjYgMDA6MjY6MTggMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGFscGhhLmMgKHByaW50X29wZXJhbmRfYWRkcmVzcyk6IEFjY291bnQgZm9yIHRoZSBzdWJyZWcgd29yZC4KCk1vbiBBcHIgMjYgMDE6MDg6MzYgMTk5OSAgVG9zaGl5YXN1IE1vcml0YSAgKHRtQG5ldGNvbS5jb20pCgoJKiBmb2xkLWNvbnN0LmMgKG1ha2VfcmFuZ2UpOiBBbHdheXMgaW5pdGlhbGl6ZSBhcmcwIGFuZCBhcmcxLgoJKGZvbGQpOiBTaW1pbGFybHkgZm9yIGFsdDAgYW5kIGFsdDEuCgkqIGZ1bmN0aW9uLmMgKGZpeHVwX3Zhcl9yZWZzX2luc25zKTogSW5pdGlhbGl6ZSBpbnNuX2xpc3QuCgkoaW5zdGFudGlhdGVfdmlydHVhbF9yZWdzXzEpOiBJbml0aWFsaXplIG9mZnNldC4KCSogb3B0YWJzLmMgKGV4cGFuZF9iaW5vcCk6IEluaXRpYWxpemUgY2FycnlfaW4sIGNhcnJ5X291dCwgb3AwX3hoaWdoCglhbmQgb3AxX3hoaWdoLgoJKiBzdG10LmMgKGV4cGFuZF9lbmRfY2FzZSk6IEluaXRpYWxpemUgbWludmFsIGFuZCBtYXh2YWwuCgpNb24gQXByIDI2IDAxOjAyOjM0IDE5OTkgIE5hdGhhbiBTaWR3ZWxsICA8bmF0aGFuQGFjbS5vcmc+CgoJKiB0b3BsZXYuYyAocmVwb3J0X2Vycm9yX2Z1bmN0aW9uKTogUmVvcmRlciBmaWxlIHN0YWNrIGFuZAoJZnVuY3Rpb24gbmFtZSBwcmludGluZy4gIElnbm9yZSBGSUxFIHBhcmFtZXRlci4KCk1vbiBBcHIgMjYgMDA6NTg6NTQgMTk5OSAgSmVycnkgUXVpbm4gPGpxdWlubkBub3J0ZWxuZXR3b3Jrcy5jb20+CgoJKiBwYS5oIChhcmNoaXRlY3R1cmVfdHlwZSk6IE5ldyBlbnVtLgoJKHBhX2FyY2hfc3RyaW5nLCBwYV9hcmNoKTogRGVjbGFyZS4KCShNQVNLX1BBXzEwLCBNQVNLX1BBXzIwKTogTmV3IGZsYWdzLgoJKFRBUkdFVF9TV0lUQ0hFUyk6IEFkZCBwYS1yaXNjLTItMC4gIFVwZGF0ZSBkb2NzIGZvciBQQTEuMCBjb2RlZ2VuLgoJKFRBUkdFVF9PUFRJT05TKTogQWRkIC1tYXJjaD0gb3B0aW9uLgoJKiBwYS5jIChwYV9hcmNoLCBwYV9hcmNoX3N0cmluZyk6ICBEZWZpbmUuCgkob3ZlcnJpZGVfb3B0aW9ucyk6ICBTZXQgdGhlbS4KCSogcGEvcGEtaHB1eDEwLmggKEFTTV9GSUxFX1NUQVJUKTogIE91dHB1dCBMRVZFTCAyLjAgYXNtIGRpcmVjdGl2ZSBmb3IKCTIuMCBhcmNoaXRlY3R1cmUuCgkqIGludm9rZS50ZXhpIChPcHRpb24gU3VtbWFyeSwgSFBQQSBPcHRpb25zKTogIERvY3VtZW50IG5ldwoJYXJjaGl0ZWN0dXJlIGZsYWdzLgoKCSogcGEvcGEtaHB1eC5oLCBwYS9wYS1ocHV4MTAuaCwgcGEvcGEtaHB1eDkuaCwgcGEvcGEtb3NmLmgsIHBhLmgsCglwYS5jLCBwYS5tZCwgY29uZmlndXJlLmluLCBjb25maWd1cmU6IFJlcGxhY2UgVEFSR0VUX1NOQUtFIGJ5CglUQVJHRVRfUEFfMTEgYW5kIE1BU0tfU05BS0UgYnkgTUFTS19QQV8xMS4KCk1vbiBBcHIgMjYgMDA6Mjg6MjUgMTk5OSAgVGhlb2RvcmUgUGFwYWRvcG91bG8gPFRoZW9kb3JlLlBhcGFkb3BvdWxvQHNvcGhpYS5pbnJpYS5mcj4KCgkqIGZsYWdzLmggKGlubGluZV9tYXhfaW5zbnMpOiBEZWNsYXJlLgoJKiBpbnRlZ3JhdGUuYyAoaW5saW5lX21heF9pbnNucyk6IE5ldyB2YXJpYWJsZS4KCShmdW5jdGlvbl9jYW5ub3RfaW5saW5lX3ApOiBVc2UgaXQuCgkqIHRvcGxldi5jIChtYWluKTogQWRkIHRoZSBmbGFnIC1maW5saW5lLWxpbWl0LW4uCgkoZGlzcGxheV9oZWxwKTogRG9jdW1lbnQgLWZpbmxpbmUtbGltaXQtbi4KCSogaW52b2tlLnRleGk6IERvY3VtZW50IC1maW5saW5lLWxpbWl0LW4KClN1biBBcHIgMjUgMjM6MDM6MzIgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIHN0bXQuYyAoZXhwYW5kX2FzbV9vcGVyYW5kcyk6IFJlbG9hZCBpbi1vdXQgcmVnLW9ubHkgbWVtb3J5IG9wZXJhbmRzLgoKU3VuIEFwciAyNSAxMzowNjoxMyAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogZnVuY3Rpb24uYyAoYXNzaWduX3Bhcm1zL1NUQUNLX0JZVEVTKTogUmV2ZXJ0IGxhc3QgY2hhbmdlLAoJYW5kIHRoYXQgb2YgMTkgTm92LgoKU3VuIEFwciAyNSAxMjozMDo1MCAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogY2FsbHMuYyAoZW1pdF9jYWxsXzEpOiBOZXcgYXJnIHJvdW5kZWRfc3RhY2tfc2l6ZTsgdXBkYXRlIGNhbGxlcnMuCglVcGRhdGUgcGVuZGluZ19zdGFja19hZGp1c3QgYmFzZWQgb24gdGhpcyB2YWx1ZS4KCShjb21wdXRlX2FyZ3VtZW50X2Jsb2NrX3NpemUpOiBJbmNsdWRlIHBlbmRpbmdfc3RhY2tfYWRqdXN0IGluCglQUkVGRVJSRURfU1RBQ0tfQk9VTkRBUlkgYWxpZ25tZW50LgoJKiBmdW5jdGlvbi5jIChhc3NpZ25fcGFybXMpOiBEb24ndCByb3VuZCB0byBQUkVGRVJSRURfU1RBQ0tfQk9VTkRBUlkuCgpTdW4gQXByIDI1IDE0OjM4OjEwIEVEVCAxOTk5ICBKb2huIFdlaGxlICAoam9obkBmZWl0aC5jb20pCgoJKiBzdHVwaWQuYyAoc3R1cGlkX21hcmtfcmVmcyk6IEdlbmVyYXRlIGEgUkVHX1VOVVNFRCBub3RlCglmb3IgYSByZWdpc3RlciB3aGljaCBpcyBjbG9iYmVyZWQgZXZlbiBpZiB0aGUgcmVnaXN0ZXIKCXdhcyB1c2VkIGJ5IGFuIGVhcmxpZXIgaW5zdHJ1Y3Rpb24uCgoJKiBpMzg2Lm1kIChmaXhfdHJ1bmNzZmRpMiwgZml4X3RydW5jZGZkaTIsCglmaXhfdHJ1bmN4ZmRpMik6IERvbid0IGJvdGhlciB3aXRoIHRoZSBnZW5fcmVnX1JUWC4KCShmaXhfdHJ1bmNzZnNpMiwgZml4X3RydW5jc2ZkaTIsIGZpeF90cnVuY2Rmc2kyLAoJZml4X3RydW5jZGZkaTIsIGZpeF90cnVuY3hmc2kyLCBmaXhfdHJ1bmN4ZmRpMik6IFVwZGF0ZQoJb3BlcmFuZCBjb25zdHJhaW50cyBhbmQgbW9kZXMuCgkqIGkzODYuYyAob3V0cHV0X2ZpeF90cnVuYyk6IFVzZSBISW1vZGUgcmVnaXN0ZXIgdG8gYXZvaWQKCW1lbW9yeSBzdGFsbHMuICBDYWxsIG91dHB1dF9tb3ZlX2RvdWJsZSBpbnN0ZWFkIG9mIG91dHB1dF90b19yZWcuCgkob3V0cHV0X3RvX3JlZyk6IFJlbW92ZS4KCSogaTM4Ni5oOiBMaWtld2lzZS4KCgkqIGkzODYubWQgKG5lZ3NmMiwgbmVnZGYyLCBuZWd4ZjIpOiBTZXQgdGhlIHR5cGUKCWF0dHJpYnV0ZSB0byBmcG9wLgoKU2F0IEFwciAyNCAyMzoxNTo1NyAxOTk5ICBEb25uIFRlcnJ5IChkb25uQGludGVyaXguY29tKQoKCSogYWxwaGEubWQgKGNhbGxfdmFsdWVfbnQpOiBDb3JyZWN0IHN1YnNjcmlwdHMuCgpTYXQgQXByIDI0IDIwOjQ5OjIwIDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBhbHBoYS5oIChQUklOVF9PUEVSQU5EX0FERFJFU1MpOiBCcmVhayBvdXQgdG8gLi4uCgkqIGFscGhhLmMgKHByaW50X29wZXJhbmRfYWRkcmVzcyk6IGhlcmUuICBIYW5kbGUgc3VicmVncy4KCkZyaSBBcHIgMjMgMjI6MzU6NDEgRURUIDE5OTkgIEpvaG4gV2VobGUgIChqb2huQGZlaXRoLmNvbSkKCgkqIGFjY29uZmlnLmggKEhBVkVfR0FTX0ZJTERTX0ZJU1RTKTogQWRkLgoJKiBjb25maWd1cmUuaW46IENoZWNrIGFzc2VtYmxlciBpbnN0cnVjdGlvbnMuCgkqIGNvbmZpZ3VyZTogUmVidWlsZC4KCSogY29uZmlnLmluOiBMaWtld2lzZS4KCSogaTM4Ni5tZCAoZmxvYXRoaXNmMiwgZmxvYXRoaWRmMiwgZmxvYXRoaXhmMik6IE5ldyBwYXR0ZXJucy4KCSogaTM4Ni5jIChwcmludF9vcGVyYW5kKTogVXNlIHRoZSBwcm9wZXIgc3VmZml4IGZvciBhIDM4NyBISW1vZGUKCW9wZXJhbmQuICBBYm9ydCBpZiBhIDM4NyBvcGVyYW5kIGhhcyBhbiB1bnN1cHBvcnRlZCBzaXplLgoKRnJpIEFwciAyMyAxNjo1Nzo0MCAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogYWxwaGEuYyAoYWxwaGFfd3JpdGVfdmVyc3RhbXApOiBNYXJrIGBmaWxlJyB1bnVzZWQuCgkqIGFscGhhLmggKEZVTkNUSU9OX1ZBTFVFKTogVXNlIGdlbl9ydHhfUkVHIG5vdCBnZW5fcnR4LgoJKExJQkNBTExfVkFMVUUpOiBMaWtld2lzZS4KCShHT19JRl9MRUdJVElNQVRFX1NJTVBMRV9BRERSRVNTKTogSGFuZGxlIG5vcm1hbCBzdWJyZWdzLgoKRnJpIEFwciAyMyAxNDo1NzozMyAxOTk5ICBEb25uIFRlcnJ5ICA8ZG9ubkBpbnRlcml4LmNvbT4KCgkqIGFscGhhMzIuaCAoSU5JVElBTElaRV9UUkFNUE9MSU5FKTogR2V0IG9mZnNldHMgcmlnaHQuCgoJKiBhbHBoYS5jIChhbHBoYV9pbml0aWFsaXplX3RyYW1wb2xpbmUpOiBBZGQgY292ZXJ0X21lbW9yeV9hZGRyZXNzCgljYWxscyBhcyBuZWVkZWQuCgpGcmkgQXByIDIzIDE0OjM2OjQ3IDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBhbHBoYS5jIChhbHBoYV9leHBhbmRfcHJvbG9ndWUpOiBEb24ndCBuZWdhdGUgZnJhbWUgc2l6ZQoJZm9yIHVzZSB3aXRoIHN1YnEuCgpGcmkgQXByIDIzIDA5OjQzOjE4IDE5OTkgIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQGN5Z251cy5jb20+CgoJKiBwcmludC1ydGwuYyAocHJpbnRfcnR4KTogRGlzcGxheSBMQUJFTF9OVVNFUyBmb3IgbGFiZWxzLgoKVGh1IEFwciAyMiAyMzowODozNyAxOTk5ICBNYXJrIE1pdGNoZWxsICA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCSogdG9wbGV2LmggKHdyYXB1cF9nbG9iYWxfZGVjbGFyYXRpb25zKTogRGVjbGFyZS4KCShjaGVja19nbG9iYWxfZGVjbGFyYXRpb25zKTogTGlrZXdpc2UuCgkqIHRvcGxldi5jICh3cmFwdXBfZ2xvYmFsX2RlY2xhcmF0aW9ucyk6IE5ldyBmdW5jdGlvbiwgc3BsaXQgb3V0Cglmcm9tIC4uLgoJKGNoZWNrX2dsb2JhbF9kZWNsYXJhdGlvbnMpOiBMaWtld2lzZS4uLgoJKGNvbXBpbGVfZmlsZSk6IEhlcmUuCgpUaHUgQXByIDIyIDIyOjM0OjQxIDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBjLXBhcnNlLmluIChleHByX25vX2NvbW1hcyk6IFZlcmlmeSB3ZSd2ZSBhbiBleHByIGJlZm9yZQoJY2FsbGluZyBDX1NFVF9FWFBfT1JJR0lOQUxfQ09ERS4KClRodSBBcHIgMjIgMjI6MjI6MTUgRURUIDE5OTkgIEpvaG4gV2VobGUgIChqb2huQGZlaXRoLmNvbSkKCgkqIHRvcGxldi5jIChyZXN0X29mX2NvbXBpbGF0aW9uKTogQWx3YXlzIHNldAoJY3VycmVudF9mdW5jdGlvbl91c2VzX29ubHlfbGVhZl9yZWdzIGFwcHJvcHJpYXRlbHkuCgpUaHUgQXByIDIyIDE0OjM5OjQzIDE5OTkgIE11bWl0IEtoYW4gIDxraGFuQHhyYXlsaXRoLndpc2MuZWR1PgoKCSogaTM4Ni94bS1jeWd3aW4uaCAoSEFWRV9CQ09QWSk6IERlbGV0ZSB1bm5lZWRlZCBtYWNyby4KCShIQVZFX0JaRVJPKTogTGlrZXdpc2UuCgkoSEFWRV9CQ01QKTogTGlrZXdpc2UuCgkoSEFWRV9SSU5ERVgpOiBMaWtld2lzZS4KCShIQVZFX0lOREVYKTogTGlrZXdpc2UuCgkoRElSX1NFUEFSQVRPUl8yKTogRGVmaW5lLgoJKEdFVF9FTlZfUEFUSF9MSVNUKTogVHVybiBwYXRoIGxpc3RzIGludG8gUE9TSVguCgkoUEFUSF9TRVBBUkFUT1IpOiBVc2UgJzonLgoKMTk5OS0wNC0yMiBCcnVjZSBLb3JiIDxkZHNpbmMwOUBpeC5uZXRjb20uY29tPgoKCSogY29uZmlndXJlLmluOiBlbmFibGUgZGlzYWJsaW5nIG9mIGZhc3QgZml4aW5jbHVkZXMKCSogY29uZmlndXJlOiByZWdlbmVyYXRlCgoxOTk5LTA0LTIxIDE0OjU1IC0wNDAwICBaYWNrIFdlaW5iZXJnICA8emFja0ByYWJpLmNvbHVtYmlhLmVkdT4KCgkqIGdlbi1wcm90b3MuYzogI3VuZGVmIGFib3J0IGFmdGVyIGluY2x1ZGluZyBzeXN0ZW0uaC4KCURlbGV0ZSBkZWZucyBvZiBmYW5jeV9hYm9ydCBhbmQJZmF0YWwuCgkqIGZpeC1oZWFkZXIuYzogRGVsZXRlIGRlZm4gb2YgZmFuY3lfYWJvcnQuCgpXZWQgQXByIDIxIDEyOjA5OjM4IDE5OTkgIE11bWl0IEtoYW4gIDxraGFuQHhyYXlsaXRoLndpc2MuZWR1PgoKCSogY2NjcC5jIChzaW1wbGlmeV9maWxlbmFtZSk6IEFsd2F5cyBwcmVzZXJ2ZSBsZWFkaW5nIGRvdWJsZSBzbGFzaC4KCldlZCBBcHIgMjEgMTg6MTU6NTUgMTk5OSAgTWljaGFlbCBIYXllcyAgPG0uaGF5ZXNAZWxlYy5jYW50ZXJidXJ5LmFjLm56PgoKCSogY29uZmlnL2M0eC9jNHgubWQ6IEFkZCBuZXcgcGVlcGhvbGVzIHRvIHJlbW92ZSByZWR1bmRhbnQgbG9hZHMuCgpXZWQgQXByIDIxIDE3OjQxOjI5IDE5OTkgIE1pY2hhZWwgSGF5ZXMgIDxtLmhheWVzQGVsZWMuY2FudGVyYnVyeS5hYy5uej4KCgkqIGNvbmZpZy9jNHgvYzR4Lm1kIChiaW5hcnkgcGF0dGVybnMpOiBSZW9yZGVyIGFsdGVybmF0aXZlcwoJc28gdGhhdCB0d28gb3BlcmFuZCBpbnN0cnVjdGlvbnMgYXJlIGNob3NlbiBiZWZvcmUgdGhyZWUgb3BlcmFuZAoJaW5zdHJ1Y3Rpb25zLgoKVHVlIEFwciAyMCAyMzozODo1OCAxOTk5ICBOYXRoYW4gU2lkd2VsbCAgPG5hdGhhbkBhY20ub3JnPgoKCSogb2JqYy9NYWtlLWxhbmcuaW4gKG9iamMtcGFyc2UuYyk6IFB1dCBCSVNPTiBwYXJhbWV0ZXJzIGluIGNvcnJlY3QKCW9yZGVyLgoKCSogTWFrZWZpbGUuaW4gKGMtcGFyc2UuYyk6IFB1dCBCSVNPTiBwYXJhbWV0ZXJzIGluIGNvcnJlY3QKCW9yZGVyLgoKVHVlIEFwciAyMCAxNjozODoxMSAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogYWxwaGEubWQgKG50X2xkYSk6IE5ldyBwYXR0ZXJuLgoJKiBhbHBoYS5jIChhbHBoYV9leHBhbmRfcHJvbG9ndWUpOiBVc2UgaXQgZm9yIGxhcmdlIGZyYW1lcwoJdW5kZXIgd2luZG93cyBudC4KClR1ZSBBcHIgMjAgMTc6NTc6MTQgMTk5OSAgQ2F0aGVyaW5lIE1vb3JlICA8Y2xtQGN5Z251cy5jb20+CgoJKiBjb25maWcvYXJtL2FybS5tZCAobW92aGkpOiAgQWRkIGNoZWNrIGZvciBvZGQgb2Zmc2V0LgoKVHVlIEFwciAyMCAxMzoxNDo1OCBFRFQgMTk5OSAgSm9obiBXZWhsZSAgKGpvaG5AZmVpdGguY29tKQoKCSogaTM4Ni5jIChvdXRwdXRfbW92ZV9kb3VibGUpOiBBYm9ydCBpZiBhIG5vbi1vZmZzZXR0YWJsZQoJbWVtb3J5IG9wZXJhbmQgaXMgZW5jb3VudGVyZWQuICBEZWxldGUgdW51c2VkIGNvZGUuCgkoZmluZF9hZGRyX3JlZyk6IFJlbW92ZS4KCk1vbiBBcHIgMTkgMjE6MTM6MDIgMTk5OSAgQ3JhaWcgQnVybGV5ICA8Y3JhaWdAamNiLXNjLmNvbT4KCgkqIHRyZWUuZGVmIChCTE9DSyk6IEZpeCB0eXBvIGluIGNvbW1lbnQuCgoxOTk5LTA0LTE5IDE0OjUxIC0wNDAwICBaYWNrIFdlaW5iZXJnICA8emFja0ByYWJpLmNvbHVtYmlhLmVkdT4KCgkqIGNwcGxpYi5jIChvdXRwdXRfbGluZV9jb21tYW5kKTogRHJvcCBDT05ESVRJT05BTCBhcmd1bWVudC4KCVdlIGNhbiBvbWl0IHVubmVjZXNzYXJ5IGxpbmUgY29tbWFuZHMgaWYgZmlsZV9jaGFuZ2UgPT0KCXNhbWVfZmlsZSBhbmQgcGZpbGUtPmxpbmVubyAhPSAwLiAgQWxsIGNhbGxlcnMgY2hhbmdlZC4KCShjcHBfZ2V0X3Rva2VuIFtjYXNlICdcbiddKTogRG9uJ3QgYnVtcCBwZmlsZS0+bGluZW5vIGlmCglDUFBfT1BUSU9OUyAocGZpbGUpLT5ub19saW5lX2NvbW1hbmRzIGlzIHNldC4KCSogY3BwbGliLmg6IEZpeCBwcm90b3R5cGUgb2Ygb3V0cHV0X2xpbmVfY29tbWFuZC4KCjE5OTktMDQtMTggMTc6NDYgLTA0MDAgIFphY2sgV2VpbmJlcmcgIDx6YWNrQHJhYmkuY29sdW1iaWEuZWR1PgoKCSogY3BwZmlsZXMuYyAoZmluZF9wb3NpdGlvbiwgcmVhZF9hbmRfcHJlc2Nhbik6IFVzZSBgdW5zaWduZWQKCWxvbmcnIHZhcmlhYmxlcyBjb25zaXN0ZW50bHkgdG8gY291bnQgbGluZSBhbmQgY29sdW1uIG51bWJlcnMuCgpTdW4gQXByIDE4IDE1OjUwOjMzIEVEVCAxOTk5ICBKb2huIFdlaGxlICAoam9obkBmZWl0aC5jb20pCgoJKiBvdXRwdXQuaCAoY3VycmVudF9mdW5jdGlvbl9pc19sZWFmLAoJY3VycmVudF9mdW5jdGlvbl91c2VzX29ubHlfbGVhZl9yZWdzKTogRGVjbGFyZS4KCSogZnVuY3Rpb24uYyAoY3VycmVudF9mdW5jdGlvbl9pc19sZWFmLAoJY3VycmVudF9mdW5jdGlvbl91c2VzX29ubHlfbGVhZl9yZWdzKTogRGVmaW5lLgoJKGluaXRfZnVuY3Rpb25fc3RhcnQpOiBJbml0aWFsaXplIGN1cnJlbnRfZnVuY3Rpb25faXNfbGVhZgoJYW5kIGN1cnJlbnRfZnVuY3Rpb25fdXNlc19vbmx5X2xlYWZfcmVncy4KCSogZmluYWwuYyAobGVhZl9mdW5jdGlvbik6IERvbid0IGRlZmluZS4KCShmaW5hbF9zdGFydF9mdW5jdGlvbik6IFJlcGxhY2UgdXNlcyBvZiBsZWFmX2Z1bmN0aW9uIHdpdGgKCWN1cnJlbnRfZnVuY3Rpb25fdXNlc19vbmx5X2xlYWZfcmVncy4KCSogdG9wbGV2LmMgKHJlc3Rfb2ZfY29tcGlsYXRpb24pOiBTZXQgY3VycmVudF9mdW5jdGlvbl9pc19sZWFmCglwcmlvciB0byBpbnZva2luZyBsb2NhbCByZWdpc3RlciBhbGxvY2F0aW9uLgoJKHJlc3Rfb2ZfY29tcGlsYXRpb24pOiBSZXBsYWNlIHVzZXMgb2YgbGVhZl9mdW5jdGlvbiB3aXRoCgljdXJyZW50X2Z1bmN0aW9uX3VzZXNfb25seV9sZWFmX3JlZ3MuCgkqIGRieG91dC5jIChkYnhvdXRfc3ltYm9sLCBkYnhvdXRfcGFybXMpOiBMaWtld2lzZS4KCSogZHdhcmYyb3V0LmMgKGFkZF9sb2NhdGlvbl9vcl9jb25zdF92YXVsZV9hdHRyaWJ1dGUpOiBMaWtld2lzZS4KCSogZHdhcmZvdXQuYyAoYWRkX2xvY2F0aW9uX29yX2NvbnN0X3ZhbHVlX2F0dHJpYnV0ZSk6IExpa2V3aXNlLgoJKiBzZGJvdXQuYyAoc2Rib3V0X3N5bWJvbCk6IExpa2V3aXNlLgoJKiBzcGFyYy5oIChGVU5DVElPTl9QUk9MT0dVRSwgRlVOQ1RJT05fRVBJTE9HVUUpOiBMaWtld2lzZS4KCSogc3BhcmMuYyAoZWxpZ2libGVfZm9yX2VwaWxvZ3VlX2RlbGF5LCBvdXRwdXRfcmV0dXJuLAoJc3BhcmNfcmV0dXJuX3BlZXBob2xlX29rKTogTGlrZXdpc2UuCgkqIHNwYXJjLm1kIChsZWFmX2Z1bmN0aW9uIGF0dHJpYnV0ZSwgdW50eXBlZF9yZXR1cm4pOiBMaWtld2lzZS4KCSogaTM4Ni5jIChpeDg2X2NvbXB1dGVfZnJhbWVfc2l6ZSk6IERvbid0IGFsaWduIHRoZSBzdGFjawoJZm9yIGxlYWYgZnVuY3Rpb25zIHdoaWNoIGRvbid0IGFsbG9jYXRlIGFueSBzdGFjayBzbG90cy4KCSogdG0udGV4aTogVXBkYXRlIGRvY3VtZW50YXRpb24uCgpTdW4gQXByIDE4IDAyOjE1OjA5IFBEVCAxOTk5IEplZmYgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiB2ZXJzaW9uLmM6IEJ1bXAgZm9yIHNuYXBzaG90LgoKU3VuIEFwciAxOCAwMDowODo0NSAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogYWxwaGEuaCAoR09fSUZfTEVHSVRJTUFURV9TSU1QTEVfQUREUkVTUyk6IENvcnJlY3QgbGFzdCBjaGFuZ2UgLS0KCW1ha2Ugc3VyZSBGUF9CQVNFX1AgcmVnaXN0ZXJzIGFyZSBvbmx5IHVzZWQgd2l0aCBhbiBpbnRlZ2VyLgoKU2F0IEFwciAxNyAyMjo1NDoxNyAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogYWxwaGEuaCAoUkVHX09LX0ZQX0JBU0VfUCk6IE5ldyBtYWNyby4KCShHT19JRl9MRUdJVElNQVRFX1NJTVBMRV9BRERSRVNTKTogVXNlIGl0LgoJKiBhbHBoYS5tZCAoYWRkZGkzKzEpOiBOZXcgaW5zbiB0byBoYW5kbGUgbGFyZ2UgY29uc3RhbnRzIG9mZgoJdGhlIHNvZnQgZnJhbWUgcG9pbnRlci4KCShhZGRkaTMrMik6IERvbid0IHNwbGl0IHNvZnQgZnJhbWUgcG9pbnRlciBvciBhcmcgcG9pbnRlciBhZGRpdGlvbnMuCgpTdW4gQXByIDE4IDE3OjI0OjEwIDE5OTkgIE1pY2hhZWwgSGF5ZXMgIDxtLmhheWVzQGVsZWMuY2FudGVyYnVyeS5hYy5uej4KCgkqIGNvbmZpZy9jNHgvYzR4LmMgKGxlZ2l0aW1pemVfb3BlcmFuZHMpOiBVc2UgcnR4X2Nvc3QKCXRvIGRldGVybWluZSBpZiBpdCBpcyB3b3J0aHdoaWxlIGZvcmNpbmcgYSBjb25zdGFudCBpbnRvIGEgcmVnaXN0ZXIuCgkqIGNvbmZpZy9jNHgvYzR4LmggKENPTlNUX0NPU1RTKTogQW4gaW50ZWdlciB2YWx1ZSBvZiAyNTUgb3IgNjU1MzUKCXVzZWQgd2l0aCBhIGxvZ2ljYWwgYW5kIG9yIGFuIGludGVnZXIgdmFsdWUgb2YgMTYgb3IgMjQgdXNlZCB3aXRoCglhIHJpZ2h0IHNoaWZ0IGhhcyB6ZXJvIGNvc3Qgb24gdGhlIEM0MC4KClNhdCBBcHIgMTcgMjE6MzA6MTEgMTk5OSAgQmVybmQgU2NobWlkdCA8Y3J1eEBwb29sLmluZm9ybWF0aWsucnd0aC1hYWNoZW4uZGU+CgoJKiBnY3NlLmMgKGNvbXB1dGVfbG9jYWxfcHJvcGVydGllcyk6IElmIHNldHAgaXMgbm9uemVybywgY2xlYXIKCVRSQU5TUCBpbnN0ZWFkIG9mIHNldHRpbmcgaXQgdG8gYWxsIG9uZXMuCgpTYXQgQXByIDE3IDIxOjEwOjEwIDE5OTkgIEphbiBIdWJpY2thIDxodWJpY2thQGZyZWVzb2Z0LmN6PgoKCSogaTM4Ni5jIChpMzg2X3ByZWZlcnJlZF9zdGFja19ib3VuZGFyeV9zdHJpbmcpOiBOZXcgZ2xvYmFsIHZhcmlhYmxlLgoJKGkzODZfcHJlZmVycmVkX3N0YWNrX2JvdW5kYXJ5KTogTmV3IGdsb2JhbCB2YXJpYWJsZS4KCShvdmVycmlkZV9mdW5jdGlvbnMpOiBTZXQgaXQuICBUaWR5IG9wdGlvbiBzZXR0aW5nIGNvZGUuCgkqIGkzODYuaCAoVEFSR0VUX09QVElPTlMpOiBOZXcgY29tbWFuZCBsaW5lIG9wdGlvbi4KCShpMzg2X3ByZWZlcnJlZF9zdGFja19ib3VuZGFyeV9zdHJpbmcpOiBEZWNsYXJlIGl0LgoJKGkzODZfcHJlZmVycmVkX3N0YWNrX2JvdW5kYXJ5KTogTGlrZXdpc2UuCgkoUFJFRkVSUkVEX1NUQUNLX0JPVU5EQVJZKTogVXNlIGkzODZfcHJlZmVycmVkX3N0YWNrX2JvdW5kYXJ5LgoKU2F0IEFwciAxNyAxOToyMjozOCAxOTk5ICBKYW4gSHViaWNrYSA8aHViaWNrYUBmcmVlc29mdC5jej4KCgkqIGkzODYuYyAoazZfY29zdCk6IFRha2UgaW50byBhY2NvdW50IHRoZSBkZWNvZGluZyB0aW1lLgoKU2F0IEFwciAxNyAxOToxMzoyMiAxOTk5ICBEb25uIFRlcnJ5ICA8ZG9ubkBpbnRlcml4LmNvbT4KCgkqIGkzODYuaCAoUFJJTlRfT1BFUkFORF9QVU5DVF9WQUxJRF9QKTogQWxsb3cgXy4KCSogaTM4Ni5jIChwcmludF9vcGVyYW5kKTogTmV3ICVfIG9wZXJhdG9yLgoJKGxvYWRfcGljX3JlZ2lzdGVyKTogUHJvcGVyIG51bWJlciBvZiBsZWFkaW5nIF8gaW4gR09UIGxpdGVyYWwuCgkqIGkzODYubWQgKHByb2xvZ3VlX2dldF9wY19hbmRfc2V0X2dvdCk6IExpa2V3aXNlLgoJKiBpMzg2L3VuaXguaCAoQVNNX09VVFBVVF9NSV9USFVOSyk6IExpa2V3aXNlLgoKU2F0IEFwciAxNyAxOToxMzowNyAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogYWxwaGEuYyAoYWxwaGFfZXhwYW5kX3Byb2xvZ3VlKTogVXNlIGdlbl9hZGRkaTMgaW5zdGVhZCBvZgoJZW1pdF9tb3ZlX2luc24rcGx1c19jb25zdGFudC4gIEZvciBOVCwgZG9uJ3QgdXNlIHRoZSBzdGFjayBwcm9iZQoJbG9vcCBwb2ludGVyIHRvIGFsbG9jYXRlIHN0YWNrIHNwYWNlLgoJKiBhbHBoYS5tZCAoYWRkZGkzKTogQWx3YXlzIHVzZSBsZGEgdG8gc2V0IHRoZSBzdGFjayBwb2ludGVyLgoKMTk5OS0wNC0xNyAyMDoxMSAtMDQwMCAgWmFjayBXZWluYmVyZyAgPHphY2tAcmFiaS5jb2x1bWJpYS5lZHU+CgoJKiBjLWF1eC1pbmZvLmMsIGVtaXQtcnRsLmMsIGV4cGxvdy5jLCBleHBtZWQuYywgZ2NzZS5jLAoJaGFpZmEtc2NoZWQuYywgb3B0YWJzLmMsIHJlb3JnLmMsIHJlc291cmNlLmMsIHNjaGVkLmM6IEluY2x1ZGUKCXRvcGxldi5oIGZvciByZWFsIGRlY2xhcmF0aW9uIG9mIHRyaW1fZmlsZW5hbWUuCgkqIE1ha2VmaWxlLmluOiBVcGRhdGUgZGVwZW5kZW5jaWVzLgoKU2F0IEFwciAxNyAxNDozNjoxOSAxOTk5ICBDcmFpZyBCdXJsZXkgIDxjcmFpZ0BqY2Itc2MuY29tPgoKCSogdHJlZS5jIChjaGFpbm9uKTogQ2hlY2sgZm9yIGNpcmN1bGFyaXR5IG9ubHkgaWYKCUVOQUJMRV9DSEVDS0lORyBpcyBkZWZpbmVkLgoKMTk5OS0wNC0xNyAxMDoxNSAtMDQwMCAgWmFjayBXZWluYmVyZyAgPHphY2tAcmFiaS5jb2x1bWJpYS5lZHU+CgoJKiBjY2NwLmM6IE1ha2UgZmF0YWwgbm9uLXN0YXRpYy4KClNhdCBBcHIgMTcgMjM6NDc6MjQgMTk5OSAgTWljaGFlbCBIYXllcyAgPG0uaGF5ZXNAZWxlYy5jYW50ZXJidXJ5LmFjLm56PgoKCSogY29uZmlnL2M0eC9jNHgubWQgKCphbmRxaTNfMjU1X2Nsb2JiZXIsKmFuZHFpM182NTUzNV9jbG9iYmVyKToKCU5ldyBsb2dpY2FsIGFuZCBwYXR0ZXJucyB1c2luZyBDNDAgYml0LWZpZWxkIGluc2VydCBpbnN0cnVjdGlvbnMuCgkoKmxzaHJxaTNfMjRfY2xvYmJlciwqYXNocnFpM18yNF9jbG9iYmVyLCpsc2hycWkzXzE2X2Nsb2JiZXIsCgkqYXNocnFpM18xNl9jbG9iYmVyKTogTmV3IHNoaWZ0IHBhdHRlcm5zIHVzaW5nIEM0MCBiaXQtZmllbGQgaW5zZXJ0CglpbnN0cnVjdGlvbnMuCgoxOTk5LTA0LTE2IDIyOjQ0IC0wNDAwICBaYWNrIFdlaW5iZXJnICA8emFja0ByYWJpLmNvbHVtYmlhLmVkdT4KCgkqIHN5c3RlbS5oOiBBbHdheXMgcHJvdG90eXBlIGFib3J0LiAgUHJvdG90eXBlIGZhdGFsLiAgRGVmaW5lCglhYm9ydCB0byBjYWxsIGZhdGFsLCBub3QgZnByaW50Zi9leGl0LiAgRGVmaW5lIGEgc3R1YiBtYWNybwoJZm9yIHRyaW1fZmlsZW5hbWUuCgkqIHRvcGxldi5jOiBEZWZpbmUgRElSX1NFUEFSQVRPUi4gICh0cmltX2ZpbGVuYW1lKTogTmV3CglmdW5jdGlvbi4KCSogdG9wbGV2Lmg6IFByb3RvdHlwZSB0cmltX2ZpbGVuYW1lLCBhbmQgI3VuZGVmIHN5c3RlbS5oJ3Mgc3R1Yi4KCgkqIGdjYy5jLCBnZW5hdHRyLmMsIGdlbmF0dHJ0YWIuYywgZ2VuY29kZXMuYywgZ2VuY29uZmlnLmMsCglnZW5lbWl0LmMsIGdlbmV4dHJhY3QuYywgZ2VuZmxhZ3MuYywgZ2Vub3Bpbml0LmMsIGdlbm91dHB1dC5jLAoJZ2VucGVlcC5jLCBnZW5yZWNvZy5jOiBNYWtlIGZhdGFsIG5vbi1zdGF0aWMuCgkqIGdjb3YuYywgZ2VuZ2VucnRsLmMsIHByb3RvaXplLmM6ICN1bmRlZiBhYm9ydCBhZnRlcgoJaW5jbHVkaW5nIHN5c3RlbS5oLgoKCSogY29uZmlnL2kzODYvZGd1eC5oLCBjb25maWcvbTY4ay94bS1hbWl4Lmg6IFJlbW92ZSBzdGFsZSBjb2RlCglyZWxhdGluZyB0byBhYm9ydC4KClNhdCBBcHIgMTcgMTE6MjU6NDQgMTk5OSAgTWljaGFlbCBIYXllcyAgPG0uaGF5ZXNAZWxlYy5jYW50ZXJidXJ5LmFjLm56PgoKCSogY29uZmlnL2M0eC9jNHgubWQgKG11bHFmM19jbHJxZl9jbG9iYmVyLCBtdWxxaTNfY2xycWlfY2xvYmJlcik6CglOZXcgcGF0dGVybnMgdG8gc3VwcG9ydCBwYXJhbGxlbCBtdWx0aXBseSBhbmQgbG9hZCBvZiB6ZXJvLgoKRnJpIEFwciAxNiAwMToyMzo0NyAxOTk5ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiB0cmVlLmMgKHZhbGlkX21hY2hpbmVfYXR0cmlidXRlKTogSWYgd2UncmUgbW9kaWZ5aW5nIHRoZQoJRlVOQ1RJT05fVFlQRSB3aXRoaW4gYSBQT0lOVEVSX1RZUEUgYW5kIHdlIGRvbid0IGdldCBhIGRlY2wsCgl1cGRhdGUgdGhlIFBPSU5URVJfVFlQRS4KCkZyaSBBcHIgMTYgMDA6MTk6MzEgMTk5OSAgSmFuIEh1Ymlja2EgPGh1Ymlja2FAZnJlZXNvZnQuY3o+CgoJKiBpMzg2LmMgKHg4Nl9hZGp1c3RfY29zdCk6IE1vdmUgYnJlYWsgc3RhdGVtZW50IHRvIGNvcnJlY3QgcGxhY2UuCgpUaHUgQXByIDE1IDIzOjE3OjMzIDE5OTkgIEplcnJ5IFF1aW5uIDxqcXVpbm5Abm9ydGVsbmV0d29ya3MuY29tPgoKCSogcGEuaCAoSEFWRV9QUkVfSU5DUkVNRU5ULCBIQVZFX1BPU1RfSU5DUkVNRU5ULAoJSEFWRV9QUkVfREVDUkVNRU5ULCBIQVZFX1BPU1RfREVDUkVNRU5UKTogRml4IHBhX2NwdSB2YWx1ZSBmcm9tCgk4MDAwIHRvIFBST0NFU1NPUl84MDAwLgoKVGh1IEFwciAxNSAyMDo0Njo1NyAxOTk5ICBEb25uIFRlcnJ5IChkb25uQGludGVyaXguY29tKQoKCSogZXhwci5jIChleHBhbmRfYXNzaWdubWVudCk6IEZvcmNlIHBvaW50ZXJzIHRvIHByb3BlciBtb2RlIGlmCglQT0lOVEVSU19FWFRFTkRfVU5TSUdORUQgaXMgZGVmaW5lZC4KCgkqIHhtLWFscGhhLmggKGFsbG9jYS5oKTogQWRkIEludGVyaXggdG8gbGlzdCBvZiBzcGVjaWFsIG1hY2hpbmVzCgl0aGF0IGRvbid0IGxpa2UgYWxsb2NhLmgsIHBlbmRpbmcgdXNpbmcgYXV0b2NvbmYgcmVzdWx0cy4KCgkqIGV4Y2VwdC5jIChzdGFydF9jYXRjaF9oYWRsZXIpOiBCZSBzdXJlIHJ0aW1lX2FkZHJlc3MgaXMgUG1vZGUKCWlmIFBPSU5URVJTX0VYVEVORF9VTlNJR05FRC4KCgkqIGV4Y2VwdC5jIChleHBhbmRfZWhfcmV0dXJuKTogRm9yY2UgcG9pbnRlcnMgdG8gcHJvcGVyIG1vZGUgaWYKCVBPSU5URVJTX0VYVEVORF9VTlNJR05FRC4KClRodSBBcHIgMTUgMjM6MTM6MzUgMTk5OSAgTWljaGFlbCBIYXllcyAgPG0uaGF5ZXNAZWxlYy5jYW50ZXJidXJ5LmFjLm56PgoKCSogY29uZmlnL2M0eC9jNHguaDogIFR3ZWFrZWQgY29tbWVudCBmb3JtYXR0aW5nLgoJKiBjb25maWcvYzR4L2M0eC5jOiAgTGlrZXdpc2UuCgpUaHUgQXByIDE1IDAyOjQ1OjE5IDE5OTkgIE11bWl0IEtoYW4gIDxraGFuQHhyYXlsaXRoLndpc2MuZWR1PgoKCSogYWNsb2NhbC5tNCAoR0NDX0ZVTkNfTUtESVJfVEFLRVNfT05FX0FSRyk6IERlZmluZS4KCSogY29uZmlndXJlLmluOiBVc2UuCgkqIGNvbmZpZ3VyZTogUmVidWlsdC4KCSogYWNjb25maWcuaCAoTUtESVJfVEFLRVNfT05FX0FSRyk6IEFkZC4KCSogY29uZmlnLmluOiBSZWJ1aWx0LgoJKiBzeXN0ZW0uaDogVXNlLgoKVGh1IEFwciAxNSAwMTowMzoyMSAxOTk5ICBKYW4gSHViaWNrYSA8aHViaWNrYUBmcmVlc29mdC5jej4KCQkJICBKZWZmIExhdyA8bGF3QGN5Z251cy5jb20+CgoJKiBpMzg2Lm1kIChRSW1vZGUgYWRkIHBhdHRlcm4pOiBTdXBwb3J0IGxlYSBpbnN0cnVjdGlvbi4KCShISW1vZGUgYWRkIHBhdHRlcm4pOiBMaWtld2lzZS4KCgkqIGkzODYubWQgKGFzaGxzaSBwYXR0ZXJucyk6IENhbGwgb3V0cHV0X2FzaGwgaW5zdGVhZCBvZiBvdXRwdXRfYXNobHNpMy4KCShhc2hscWkpOiBVc2UgZXhwYW5kZXIsIHNlcGFyYXRlIExFQSBhbmQgU0FMIC8gQUREIHBhdHRlcm5zOyBjYWxsCglvdXRwdXRfYXNobC4KCShhc2hsaGkpOiBMaWtld2lzZS4KCSogaTM4Ni5oIChvdXRwdXRfYXNobCk6IFJlbmFtZWQgZnJvbSBvdXRwdXRfYXNobHNpMy4KCSogaTM4Ni5jIChvdXRwdXRfYXNobCk6IExpa2V3aXNlOyBzdXBwb3J0IEhJbW9kZSBhbmQgUUltb2RlIG9wZXJhbmRzCglhcyB3ZWxsLgoKCSogaTM4Ni5tZCAobm90c2ksIG5vdGhpLCB4b3JzaSwgeG9yaGksIGFuZCB4b3JxaSBwYXR0ZXJucyk6IENhbGwKCW1lbW9yeV9hZGRyZXNzX2Rpc3BsYWNlbWVudF9sZW5ndGggaW5zdGVhZCBvZiBtZW1vcnlfYWRkcmVzc19sZW5ndGguCgkqIGkzODYuYyAobWVtb3J5X2FkZHJlc3NfaW5mbyk6IFJlbmFtZWQgZnJvbSBtZW1vcnlfYWRkcmVzc19sZW5ndGguCglBY2NlcHQgbmV3IGFyZ3VtZW50IERJU1BfTEVOR1RILiAgQWxsIGNhbGxlcnMgY2hhbmdlZC4gIElmIERJU1BfTEVOR1RILAoJdGhlbiByZXR1cm4gdGhlIGRpc3BsYWNlbWVudCBsZW5ndGguICBFbHNlIHJldHVybiBsZW5ndGggb2YgdGhlCgllbnRpcmUgbWVtb3J5IGFkZHJlc3MuICBIYW5kbGUgTVVMVCBjYXNlIGNvcnJlY3RseS4KCSogaTM4Ni5oIChtZW1vcnlfYWRkcmVzc19pbmZvKTogVXBkYXRlIGRlY2xhcmF0aW9uLgoKCSogaTM4Ni5tZCAobWVtb3J5X2JpdF90ZXN0KTogRml4IHBhcmVuIGVycm9yLgoKV2VkIEFwciAxNCAyMToyOToxOCAxOTk5ICBBbmRyZXcgSGFsZXkgIDxhcGhAY3lnbnVzLmNvbT4KCgkqIGZsb3cuYzogKG1ha2VfZWRnZXMpOiBBbHdheXMgbWFrZSBlZGdlcyBmcm9tIGEgYmFzaWMgYmxvY2sKCXRvIGl0cyBleGNlcHRpb24gaGFuZGxlcnMsIGV2ZW4gaWYgdGhlIGJsb2NrIGVuZHMgd2l0aCBhIGp1bXAuCgoxOTk5LTA0LTE0IDIzOjI2IC0wNDAwICBaYWNrIFdlaW5iZXJnICA8emFja0ByYWJpLmNvbHVtYmlhLmVkdT4KCgkqIGdyYXBoLmMgKG5vZGVfZGF0YSk6IFJldHVybiB2b2lkLiAgSWdub3JlIHJlc3VsdCBvZgoJcHJpbnRfcnRsX3NpbmdsZS4gIENoYW5nZSBjYWxsZXIgdG8gbWF0Y2guCgkqIGludGVncmF0ZS5jIChzdWJzdF9jb25zdGFudHMpOiBJbml0aWFsaXplIG9wMF9tb2RlIHRvIGFuCglpbnZhbGlkIG1vZGUsIGFuZCBhYm9ydCBiZWZvcmUgdXNlIGlmIGl0J3Mgc3RpbGwgaW52YWxpZC4KCShDYW4gb25seSBoYXBwZW4gaWYgdGhlIFJUWF9DTEFTUywgUlRYX0ZPUk1BVCB0YWJsZXMgYXJlIGNvcnJ1cHRlZC4pCgkqIG9iamMvb2JqYy1hY3QuYyAoZ2V0X29iamNfc3RyaW5nX2RlY2wsCglidWlsZF9zZWxlY3Rvcl90cmFuc2xhdGlvbl90YWJsZSwgZ2VuZXJhdGVfcHJvdG9jb2xfbGlzdCwKCXN5bnRoX2lkX3dpdGhfY2xhc3Nfc3VmZml4LCBidWlsZF9rZXl3b3JkX3NlbGVjdG9yLAoJYnVpbGRfc2VsZWN0b3JfZXhwciwgZ2VuX2RlY2xhcmF0b3IpOiBBYm9ydCB3aGVuIHRoZSB0cmVlCglzdHJ1Y3R1cmUgaXMgY29ycnVwdGVkLgoKV2VkIEFwciAxNCAxOTo1Nzo0OSAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBjb25maWd1cmUuaW4gKGFscGhhIGludGVyaXgpOiBVc2Ugc3ltYm9saWMgbmFtZXMgdG8gc2V0Cgl0YXJnZXRfY3B1X2RlZmF1bHQuCgkqIGNvbmZpZ3VyZTogUmVidWlsdC4KCgkqIGV4cGxvdy5jIChhbGxvY2F0ZV9keW5hbWljX3N0YWNrX3NwYWNlKTogVW5kbyBsYXN0IGNoYW5nZS4gIFVzZQoJY29udmVydF9tZW1vcnlfYWRkcmVzcyBpbnN0ZWFkLgoKV2VkIEFwciAxNCAxOTo0MjowMiAxOTk5ICBEb25uIFRlcnJ5IChkb25uQGludGVyaXguY29tKQoKCSogYWxwaGEvbGliMWZ1bmNzLmFzbTogTmV3IGZpbGUuCgkqIGFscGhhL3QtaW50ZXJpeCAobGliMWZ1bmNzLmFzbSk6IEFkZCB0byBidWlsZC4KCgkqIGV4cGxvdy5jIChhbGxvY2F0ZV9keW5hbWljX3N0YWNrX3NwYWNlKTogQ29ycmVjdGx5IGNvbnZlcnQgVEFSR0VUCgl0byBQbW9kZS4KCldlZCBBcHIgMTQgMTQ6MjY6MzYgMTk5OSAgSm9obiBXZWhsZSAgKGpvaG5AZmVpdGguY29tKQoKCSogaTM4Ni5tZCAodHJ1bmN4ZmRmKTogT3V0cHV0IHRoZSB0ZW1wbGF0ZSBzdXBwbGllZAoJYnkgb3V0cHV0X21vdmVfZG91YmxlIHdpdGggdGhlIGNvcnJlY3Qgb3BlcmFuZHMuCgoJKiBpMzg2Lm1kIChleHRlbmRzZmRmLCBleHRlbmRzZnhmLCBleHRlbmRkZnhmKTogVXNlCglvdXRwdXRfZmxvYXRfZXh0ZW5kIGluc3RlYWQgc3BlY2lmeWluZyAnIycgYXMgdGhlIHRlbXBsYXRlLgoJKiBpMzg2LmMgKG91dHB1dF9mbG9hdF9leHRlbmQpOiBEZWZpbmUuCgkqIGkzODYuaCAob3V0cHV0X2Zsb2F0X2V4dGVuZCk6IERlY2xhcmUuCgpXZWQgQXByIDE0IDEwOjQ4OjAzIDE5OTkgIENhdGhlcmluZSBNb29yZSAgPGNsbUBjeWdudXMuY29tPgoKCSogY29uZmlnL21pcHMvZWxmLmgsIGNvbmZpZy9taXBzL2VsZjY0LmgKCShDVE9SU19TRUNUSU9OX0FTTV9PUCk6IERlZmluZS4KCShEVE9SU19TRUNUSU9OX0FTTV9PUCk6IERlZmluZS4KCShFWFRSQV9TRUNUSU9OUyk6IERlZmluZS4KCShJTlZPS0VfX21haW4pOiBEZWZpbmUuCgkoTkFNRV9fTUFJTik6IERlZmluZS4KCShTWU1CT0xfX01BSU4pOiBEZWZpbmUuCgkoRVhUUkFfU0VDVElPTlNfRlVOQ1RJT05TKTogRGVmaW5lLgoJKFNFQ1RJT05fRlVOQ1RJT05fVEVNUExBVEUpOiBEZWZpbmUuCgkoQVNNX09VVFBVVF9DT05TVFJVQ1RPUik6IERlZmluZS4KCShBU01fT1VUUFVUX0RFU1RSVUNUT1IpOiBEZWZpbmUuCgkoQ1RPUl9MSVNUX0JFR0lOKTogRGVmaW5lLgoJKENUT1JfTElTVF9FTkQpOiBEZWZpbmUuCgkoRFRPUl9MSVNUX0JFR0lOKTogRGVmaW5lLgoJKERUT1JfTElTVF9FTkQpOiBEZWZpbmUuCgkoTElCX1NQRUMpOiBEZWZpbmUuCgkoU1RBUlRGSUxFX1NQRUMpOiBEZWZpbmUuCgkoRU5ERklMRV9TUEVDKTogRGVmaW5lLgoJKiBjb25maWcvbWlwcy9saW51eC5oOiAgVW5kZWZpbmUgYWxsIG9mIHRoZSBhYm92ZS4KCSogY29uZmlnL21pcHMvcnRlbXM2NC5oOiBMaWtld2lzZS4KCSogY29uZmlnL21pcHMvdC1yMzkwMDogTGlrZXdpc2UuCgkqIGNvbmZpZy9taXBzL3QtZWxmOiBOZXcgZmlsZS4KCSogY29uZmlnL21pcHMvdnh3b3Jrcy5oOiBOZXcgZmlsZS4KCSogY29uZmlndXJlLmluIChtaXBzLXdycy12eHdvcmtzKTogVXNlIG1pcHMvdnh3b3Jrcy5oLgoJKG1pcHMqLSotKmVsZiopOiAgVXNlIHQtZWxmIGluc3RlYWQgb2YgdC1lY29mZi4KCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgoKV2VkIEFwciAxNCAwOTo1OTozOCAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogcmVsb2FkMS5jIChlbWl0X3JlbG9hZF9pbnNucyk6IEFsc28gZmluZCBlcXVpdmFsZW50IG1lbXMKCWZvciBzdWJyZWdzIG9mIHBzZXVkb3MuCgoJKiBhbHBoYS5jIChhbGlnbmVkX21lbW9yeV9vcGVyYW5kKTogUmVjb2duaXplIHRoZSBvdXRwdXQgb2YKCUxFR0lUSU1JWkVfUkVMT0FEX0FERFJFU1MuICBFeGFtaW5lIHJlZ19lcXVpdl9tZW1vcnlfbG9jIGluCgl0aGUgZXZlbnQgb2YgYSBwc2V1ZG8uCgkodW5hbGlnbmVkX21lbW9yeV9vcGVyYW5kKTogTGlrZXdpc2UuICBEb24ndCBvdGhlcndpc2UgYWNjZXB0Cgljb21wbGV0ZWx5IGlsbGVnYWwgYWRkcmVzc2VzLgoJKG5vcm1hbF9tZW1vcnlfb3BlcmFuZCk6IExpa2V3aXNlLiAgSGFuZGxlIHN1YnJlZ3Mgb2YgcHNldWRvcy4KCShnZXRfYWxpZ25lZF9tZW0pOiBSZXZlcnQgcHJldmlvdXMgY2hhbmdlLiAgQWJvcnQgaWYgd2UgZG9uJ3QgaGF2ZSBhCgltZW0uICBEdXJpbmcgcmVsb2FkLCBjYWxsIGZpbmRfcmVwbGFjZW1lbnQgb24gYWxsIGlsbGVnYWwgbWVtb3JpZXMuCgkoZ2V0X3VuYWxpZ25lZF9hZGRyZXNzKTogTGlrZXdpc2UuCgkqIGFscGhhLmggKFNFQ09OREFSWV9JTlBVVF9SRUxPQURfQ0xBU1MpOiBVc2UgIWFsaWduZWRfbWVtb3J5X29wZXJhbmQKCWluc3RlYWQgb2YgdW5hbGlnbmVkX21lbW9yeV9vcGVyYW5kLgoJKiBhbHBoYS5tZDogUmV2ZXJ0IGV4dHJhIGFyZ3VtZW50IHRvIGdldF9hbGlnbmVkX21lbS4KCShyZWxvYWRfaW5xaSk6IFVzZSBhbnlfbWVtb3J5X29wZXJhbmQgaW4gY29uc3RyYWludHMuICBBYm9ydCBpZgoJd2UncmUgbm90IGdpdmVuIHNvbWUgc29ydCBvZiBtZW0uCgkocmVsb2FkX2luaGkpOiBMaWtld2lzZS4KCShyZWxvYWRfb3V0cWksIHJlbG9hZF9vdXRoaSk6IExpa2V3aXNlLgoKV2VkIEFwciAxNCAwOTozOToyMCAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogaTM4Ni5tZCAobmVnaGkpOiBVc2UgdGhlIHdob2xlIHJlZ2lzdGVyIHdoZW4gd2lkZW5pbmcgdGhlIG9wLgoKMTk5OS0wNC0xNCAxMjozNyAtMDQwMCAgWmFjayBXZWluYmVyZyAgPHphY2tAcmFiaS5jb2x1bWJpYS5lZHU+CgoJKiBjcHBlcnJvci5jLCBjcHBleHAuYywgY3BwbGliLmM6IE5ldmVyIGNhbGwgYWJvcnQuCgkqIGNwcGhhc2guYzogT25seSBjYWxsIGFib3J0IHdoZW4gd2UgZGV0ZWN0IGNvcnJ1cHRpb24gb2YgdGhlCgltYWxsb2MgYXJlbmEuCgkqIGNwcG1haW4uYzogRG9uJ3QgZGVmaW5lIGZhdGFsIG9yIGZhbmN5X2Fib3J0LgoKV2VkIEFwciAxNCAwOToxOTozOSAxOTk5ICBKYW4gSHViaWNrYSA8aHViaWNrYUBmcmVlc29mdC5jej4KCgkqIGkzODYuYyAoeDg2X2FkanVzdF9jb3N0KTogQWdpIHN0YWxsIHRha2VzIDEgY3ljbGUgb24gUGVudGl1bSwgZnN0CglyZXF1aXJlcyB2YWx1ZSB0byBiZSByZWFkeSBvbmUgZXh0cmEgY3ljbGUuCgpXZWQgQXByIDE0IDExOjI4OjM0IDE5OTkgIERhdmUgQnJvbGxleSAgPGJyb2xsZXlAY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy9pMzg2L2kzODYuYyAobWVtb3J5X2FkZHJlc3NfbGVuZ3RoKTogQWRkIG1pc3NpbmcgcGFyZW50aGVzaXMuCgpXZWQgQXByIDE0IDEzOjU5OjI3IDE5OTkgIE1hcnRpbiB2b24gTG9ld2lzICA8bG9ld2lzQGluZm9ybWF0aWsuaHUtYmVybGluLmRlPgoKCSogZXh0ZW5kLnRleGkgKERlcHJlY2F0ZWQgRmVhdHVyZXMpOiBOZXcgbm9kZS4KCSogaW52b2tlLnRleGkgKC1XZGVwcmVjYXRlZCk6IERvY3VtZW50LgoKV2VkIEFwciAxNCAwMDoxODoyMiAxOTk5ICBKYW4gSHViaWNrYSA8aHViaWNrYUBmcmVlc29mdC5jej4KCgkqIGkzODYubWQgKFNJbW9kZSBsb2dpY2FsIGNvbXBhcmUpOiBBdm9pZCBvdXRwdXR0aW5nIG5vbi1wYXJpYWJsZSB0ZXN0dwoJYW5kIHRlc3RsIG9uIFBlbnRpdW0uCgkocmVnaXN0ZXIgYW5kIG1lbW9yeSBiaXQgdGVzdHMpOiBMaWtld2lzZS4KCShzZXRjYywgbm9ybWFsIGFuZCByZXZlcnNlZCBjb25kaXRpb25hbCBicmFuY2hlcyk6IFVzZSBzaG9ydGVyCglzZXF1ZW5jZSBmb3IgdGVzdGluZyBmbGFncyBzdG9yZWQgaW4gRUFYLgoKCSogaTM4Ni5tZCAoeG9yc2kzKTogRG8gbm90IG91dHB1dCBOT1QgaW5zdHJjdGlvbnMgb24gUGVudGl1bS4KCSh4b3JxaTMpOiBMaWtld2lzZS4KCSh4b3JoaTMpOiBMaWtld2lzZS4KCShub3RzaTIpOiBMaWtld2lzZS4KCShub3RxaTIpOiBMaWtld2lzZS4KCShub3RoaTIpOiBMaWtld2lzZTsgZG8gbm90IG91dHB1dCBwcmVmaXhlZCBvcGNvZGVzIHdoZW4gcG9zc2libGUuCgoJKiBpMzg2Lm1kIChuZWdoaTIpOiBEbyBub3Qgb3V0cHV0IHByZWZpeGVkIG9wY29kZSB3aGVuIHBvc3NpYmxlLgoJKGFzaGxoaTMpOiBMaWtld2lzZS4KCldlZCBBcHIgMTQgMDA6MDg6NDYgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGkzODYuYyAobWVtb3J5X2FkZHJlc3NfbGVuZ3RoKTogTmV3IGZ1bmN0aW9uLgoJKiBpMzg2LmggKG1lbW9yeV9hZGRyZXNzX2xlbmd0aCk6IERlY2xhcmUgaXQuCgpUdWUgQXByIDEzIDIyOjUyOjA0IDE5OTkgIERvbm4gVGVycnkgKGRvbm5AaW50ZXJpeC5jb20pCgkJCSAgTWFydGluIEhlbGxlciAoSW5nLi1CdWVyb19IZWxsZXJAdC1vbmxpbmUuZGUpCgoJKiBjb25maWd1cmUuaW4gKGludGVyaXggQWxwaGEpOiBBZGQuCgkod2lubnQgQWxwaGEpOiBVc2UgYWxwaGEzMi5oCgkoaW50ZXJpeCBpMzg2KTogUGFyYWxsZWwgQWxwaGEzMi4KCSogY29uZmlndXJlOiBSZWJ1aWx0LgoKCSogY29uZmlnL2ludGVyaXguaDogTW92ZSBjb21tb24gZWxlbWVudHMgZnJvbSBpMzg2LWludGVyaXguaC4KCSogY29uZmlnL2kzODYvaTM4Ni1pbnRlcml4Lmg6IERlbGV0ZSBzYW1lLgoJKiBjb25maWcvYWxwaGEvYWxwaGEtaW50ZXJpeC5oOiBOZXcgZmlsZS4KCgkqIGNvbmZpZy9hbHBoYS9hbHBoYTMyLmg6IE5ldyBmaWxlLCBwYXJ0IGZyb24gd2luLW50LmguCgkqIGNvbmZpZy9hbHBoYS93aW4tbnQuaDogRGVsZXRpb25zICgtPiBhbHBoYTMyLmgpLgoJKiBjb25maWcvYWxwaGEvaW50ZXJpeC5oOiBOZXcgZmlsZQoKCSogY29uZmlnL2FscGhhL2FscGhhLm1kIChpbnRlcml4KTogQ29tbWVudC4KCgkqIGNvbmZpZy9hbHBoYS94bS1hbHBoYS1pbnRlcml4Lmg6IE5ldyBmaWxlLgoKCSogY29uZmlnL2FscGhhL3QtaW50ZXJpeDogTmV3IGZpbGUuCgoJKiBmaXhpbmMvbWtmaXhpbmMuc2ggKGludGVyaXgvQWxwaGEpOiBBZGQuCgoxOTk5LTA0LTEzICBNaWtlIFN0dW1wICA8bXJzQHdycy5jb20+CgoJKiBpMzg2L3Z4aTM4Ni5oIChDUFBfQ1BVX1NQRUMpOiBEZWZpbmUgYXBwcm9wcmlhdGVseSBmb3Igdnh3b3Jrcy4KCShDUFBfUFJFREVGSU5FUywgTElCX1NQRUMsIFNUQVJURklMRV9TUEVDLCBFTkRGSUxFX1NQRUMpOiBsaWtld2lzZS4KClR1ZSBBcHIgMTMgMjE6MDE6MzYgMTk5OSAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogYy1jb21tb24uYyAoZGVmYXVsdF92YWxpZF9sYW5nX2F0dHJpYnV0ZSk6IE5ldyBmbi4KCSh2YWxpZF9sYW5nX2F0dHJpYnV0ZSk6IE5ldyBjYWxsYmFjayBwdHIuCgkoZGVjbF9hdHRyaWJ1dGVzKTogQ2FsbCBpdC4gIE1vdmUgaW5pdF9wcmlvcml0eSBzdXBwb3J0IGludG8KCUMrKyBmcm9udGVuZC4KClR1ZSBBcHIgMTMgMTc6NDc6MTQgMTk5OSAgSm9obiBXZWhsZSAgKGpvaG5AZmVpdGguY29tKQoKCSogaTM4Ni5tZCAobW92ZGkpOiBBZGQgc3BsaXR0ZXIuCgpXZWQgQXByIDE0IDEwOjA0OjI3IDE5OTkgIE1pY2hhZWwgSGF5ZXMgIDxtLmhheWVzQGVsZWMuY2FudGVyYnVyeS5hYy5uej4KCgkqIGNvbmZpZy9jNHgvYzR4Lm1kIChzdG9yZXFmX2ludCwgc3RvcmVxZl9pbnRfY2xvYmJlciwgbG9hZHFmX2ludCwKCWxvYWRxZl9pbnRfY2xvYmJlcik6IEFkZCBuZXcgcGF0dGVybnMgd2l0aCBjb3JyZXNwb25kaW5nIHNwbGl0dGVycwoJdG8gaGFuZGxlIG1vdmVzIG9mIGZsb2F0aW5nIHBvaW50IHZhbHVlcyBpbnRvIGFuZCBvdXQgb2YgaW50YWdlcgoJcmVnaXN0ZXJzIGJ5IHVzaW5nIG1lbW9yeS4KCgkqIGNvbmZpZy9jNHgvYzR4LmMgKGM0eF9jaGVja19sZWdpdF9hZGRyKTogRGlzYWxsb3cgUFJFX0lOQyBmb3IgbW9kZXMKCW90aGVyIHRoYW4gUUZtb2RlIGFuZCBRSW1vZGUuCgkobWl4ZWRfc3VicmVnX29wZXJhbmQpOiBOZXcgZnVuY3Rpb24uCgkoYzR4X2VtaXRfbW92ZV9zZXF1ZW5jZSk6IElmIG1vdmluZyBhIGZsb2F0aW5nIHBvaW50IHZhbHVlIGludG8gb3IKCW91dCBvZiBhbiBpbnRlZ2VyIHJlZ2lzdGVyLCB1c2UgdGhlIG5ldyBwYXR0ZXJucyBzdG9yZXFmX2ludF9jbG9iYmVyCglvciBsb2FkcWZfaW50X2Nsb2JiZXIuCgkocmVnX2ltbV9vcGVyYW5kLCAqX3JlZ19vcGVyYW5kKTogQ2FsbCByZWdfb3BlcmFuZCBpbnN0ZWFkIG9mCglyZWdpc3Rlcl9vcGVyYW5kLgoJKHJlZ19vcGVyYW5kLCBzcmNfb3BlcmFuZCk6IERpc2FsbG93IG9wZXJhbmQgaWYgaXQgc2F0aXNpZmVzCgltaXhlZF9zdWJyZWdfb3BlcmFuZC4KCgkqIGNvbmZpZy9jNHgvYzR4LmggKG1peGVkX3N1YnJlZ19vcGVyYW5kKTogQWRkIHByb3RvdHlwZS4KClR1ZSBBcHIgMTMgMTQ6NDk6MTMgMTk5OSAgSmFuIEh1Ymlja2EgIDxodWJpY2thQGZyZWVzb2Z0LmN6PgoKCSogaTM4Ni5jIChhZ2lfZGVwZW5kZW50KTogSGFuZGxlIHB1c2ggb3BlcmF0aW9uIG1vcmUgY29ycmVjdGx5LgoKVHVlIEFwciAxMyAxNDo0NToxNyAxOTk5ICBKYW4gSHViaWNrYSAgPGh1Ymlja2FAZnJlZXNvZnQuY3o+CgoJKiBpMzg2Lm1kIChhbmRkaTMpOiBBZGQgJSBjb25zdHJhaW50LgoJKGlvcmRpMywgeG9yZGkzKTogTGlrZXdpc2UuCgpUdWUgQXByIDEzIDE0OjI5OjU4IDE5OTkgIEphbiBIdWJpY2thICA8aHViaWNrYUBmcmVlc29mdC5jej4KCgkqIGkzODYubWQgKGV4dGVuZGhpc2kyKTogT3V0cHV0IG1vdiBpbnN0ZWFkIG9mIGN3IGluc3RydWN0aW9uIGZvciBLNgoJdG8gaW1wcm92ZSBkZWNvZGluZyBiYW5kd2lkdGguCgkqIGkzODYubWQgKGV4dGVuZGhpcWkyKTogTGlrZXdpc2UuCgpUdWUgQXByIDEzIDE0OjI2OjMxIDE5OTkgIEphbiBIdWJpY2thICA8aHViaWNrYUBmcmVlc29mdC5jej4KCgkqIGkzODYubWQgKG1vdnNmX3B1c2gpOiBIYW5kbGUgbWVtb3J5IHRvIG1lbW9yeSBjYXNlIHRvbywgbmV3IHNwbGl0dGVyLgoJKG1vdmRmX3B1c2gsIG1vdnhmX3B1c2gpOiBMaWtld2lzZS4KCShtb3ZzZl9wdXNoX21lbW9yeSwgbW92ZGZfcHVzaF9tZW1vcnksIG1vdnhmX3B1c2hfbWVtb3J5KTogUmVtb3ZlLgoKVHVlIEFwciAxMyAxNDoxNDowNiAxOTk5ICBKYW4gSHViaWNrYSAgPGh1Ymlja2FAZnJlZXNvZnQuY3o+CgoJKiBpMzg2Lm1kOiBEbyBub3Qgb3V0cHV0IG1vdiAlMCxyZWcgb24gQU1EIEs2LgoKVHVlIEFwciAxMyAxMjoxNDowNyAxOTk5ICBEYXZlIEJyb2xsZXkgIDxicm9sbGV5QGN5Z251cy5jb20+CgoJKiBjcHBpbml0LmMgKGNwcF9zdGFydF9yZWFkKTogRml4IGJ1ZmZlciBvdmVyd3JpdGUuCgkqIE1ha2VmaWxlLmluIChjcHBpbml0Lm8pOiBUeXBvIGluIGRlcGVuZGVuY2llcy4KClR1ZSBBcHIgMTMgMDU6MDQ6NTkgMTk5OSAgUmljaGFyZCBFYXJuc2hhdyAgKHJlYXJuc2hhQGFybS5jb20pCgoJKiBhcm0uaCAoZnVuY3Rpb24gcHJvdG90eXBlcyBmb3IgYXJtLmMpOiBJZmRlZiB0aGVzZSBvdXQgaWYKCUhBVkVfQ09ORklHX0ggaXMgbm90IGRlZmluZWQuCgpUdWUgQXByIDEzIDAyOjExOjExIDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHBhLmM6IEF2b2lkIFVzaW5nIGltbWVkaWF0ZSB6ZXJvIGZvciByZWdpc3RlciB6ZXJvLgoJKiBwYS5tZDogTGlrZXdpc2UuCgoJKiBwYS5jIChwcmludF9vcGVyYW5kLCBjYXNlICdmJyk6IE5ldyBjYXNlIGZvciBGUCByZWdpc3RlciBvciAwLjAuCgkocHJpbnRfb3BlcmFuZCwgY2FzZSAncicpOiBVc2UgJXIwIGZvciB6ZXJvIHZhbHVlLgoJKiBwYS5tZCAobW92ZSBwYXR0ZXJucywgZmNtcCBwYXR0ZXJucyk6IFVzZSBuZXcgJWYgb3V0cHV0IGFyZy4KCgkqIHBhLmM6IFVzZSBhIHJlZ2lzdGVyIG5hbWUsIG5vdCBhIHJhdyBpbW1lZGlhdGUgaW4gYnJhbmNoLAoJY29tcGFyZS9jbGVhciwgc3ViLCBzdWJiLCB1YWRkY20gYW5kIHZzaGQgaW5zdHJ1Y3Rpb25zLgoJKiBwYS5tZDogTGlrZXdpc2UuCgoJKiBwYS5tZCwgcGEuaCwgZWUuYXNtLCBlZV9mcC5hc20sIGxpYjJmdW5jcy5hc206IExpa2V3aXNlLgoKCSogcGEuYzogVXNlIGEgcmVnaXN0ZXIgbmFtZSwgbm90IGEgcmF3IGltbWVkaWF0ZSBpbiAiYnYiIGluc3RydWN0aW9ucy4KCSogcGEubWQsIHBhLmgsIGVlLmFzbSwgZWVfZnAuYXNtLCBsaWIyZnVuY3MuYXNtOiBMaWtld2lzZS4KCgkqIHBhLmM6IFJlbW92ZSBzcGFjZSByZWdpc3RlciBzcGVjaWZpY2F0aW9uIGluIG1lbW9yeSBhZGRyZXNzZXMsCglleGNlcHQgd2hlcmUgaXQgaXMgYWN0dWFsbHkgbmVlZGVkLgoJKiBwYS5tZCwgcGEuaCwgZWUuYXNtLCBlZV9mcC5hc20sIGxpYjJmdW5jcy5hc206IExpa2V3aXNlLgoKTW9uIEFwciAxMiAyMzozNDozNSAxOTk5ICBKZWZmIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogdmVyc2lvbi5jOiBCdW1wIGZvciBzbmFwc2hvdC4KCk1vbiBBcHIgMTIgMTQ6NTg6MzAgMTk5OSAgSmFuIEh1Ymlja2EgIDxodWJpY2thQGZyZWVzb2Z0LmN6PgoKCSogcmVnLXN0YWNrLmMgKGNoZWNrX3N0YWNrX3JlZ3NfbWVudGlvbmVkKTogUmVtb3ZlIHZhcmlhYmxlIFNJWkUuCgpNb24gQXByIDEyIDE5OjE1OjE3IDE5OTkgIERhbmllbCBKYWNvYm93aXR6ICA8ZGFuQGRlYmlhbi5vcmc+CgoJKiByczYwMDAvc3lzdjQuaCAoQ1BQX09TX0xJTlVYX1NQRUMpOiBBZGQgbWlzc2luZyBiYWNrc2xhc2guCgpNb24gQXByIDEyIDE5OjExOjM4IDE5OTkgIE11bWl0IEtoYW4gIDxraGFuQHhyYXlsaXRoLndpc2MuZWR1PgoKCSogaTM4Ni9jeWd3aW4uaCAoU1VCVEFSR0VUX1NXSVRDSEVTKTogQWRkIC1tY29uc29sZTsgZml4CgktbW5vLW5vcC1mdW4tZGxsaW1wb3J0IGFuZCBtaW5vciBkb2MgZml4ZXMuCgkoU1RBUlRGSUxFX1NQRUMpOiBDeWd3aW4gRExMcyBkb24ndCBoYXZlIGRsbGNydDAuCgkoTElOS19TUEVDKTogQWRkIC1tY29uc29sZSBzdXBwb3J0LgoJKiBpMzg2L21pbmd3MzIuaCAoTElCX1NQRUMpOiBNYWtlIGxpYnJhcmllcyBjb25zaXN0ZW50IHdpdGgKCUN5Z3dpbi4KCShMSU5LX1NQRUMpOiBSZW1vdmUuIFVzZSBDeWd3aW4ncyB2ZXJzaW9uLgoJKE1BVEhfTElCUkFSWSk6IE1ha2UgaXQgbnVsbC4KCSogaTM4Ni9jcnRkbGwuaCAoTUFUSF9MSUJSQVJZKTogTGlrZXdpc2UuCgpGcmkgQXByIDEyIDE1OjAwOjUyIDE5OTkgIFN0YW4gQ294ICA8c2NveEBjeWdudXMuY29tPgoKCSogYy1kZWNsLmMgKGNfZGVjb2RlX29wdGlvbiwgc3RhcnRfZGVjbCwgc3RhcnRfZnVuY3Rpb24sCglmaW5pc2hfZnVuY3Rpb24pIDogUmVjb2duaXplIC1Xbm8tbWFpbiBzbyB3ZSBjYW4gYXZvaWQgd2FybmluZ3MuCgoxOTk5LTA0LTEyICBaYWNrIFdlaW5iZXJnICA8emFja0ByYWJpLmNvbHVtYmlhLmVkdT4KCgkqIGNwcGhhc2guYyAoY29sbGVjdF9leHBhbnNpb24sIG1hY3JvZXhwYW5kLAoJcHVzaF9tYWNyb19leHBhbnNpb24pOiBNYWtlIHRoZSBlc2NhcGUgY2hhcmFjdGVyIGluIG1hY3JvCglidWZmZXJzICdccicsIG5vdCAnQCcuICBSZW1vdmUgY29kZSB0byBwcm90ZWN0IGxpdGVyYWwKCW9jY3VycmVuY2VzIG9mIHRoZSBlc2NhcGUgY2hhcmFjdGVyOyAnXHInIGNhbm5vdCBhcHBlYXIKCWluIGEgbWFjcm8gYnVmZmVyIHVubGVzcyB3ZSBwdXQgaXQgdGhlcmUuCgkqIGNwcGxpYi5jIChza2lwX2NvbW1lbnQsIGNvcHlfY29tbWVudCwgY3BwX3NraXBfaHNwYWNlLAoJY29weV9yZXN0X29mX2xpbmUsIGNwcF9nZXRfdG9rZW4sIHBhcnNlX3N0cmluZywKCXBhcnNlX2Fzc2VydGlvbik6ICdccicgbWlnaHQgYmUgYSBiYWNrc2xhc2gtbmV3bGluZSBtYXJrZXIsIG9yCglpdCBtaWdodCBiZSBhIG1hY3JvIGVzY2FwZSBtYXJrZXIsIGRlcGVuZGluZyBvbgoJQ1BQX0JVRkZFUiAocGZpbGUpLT5oYXNfZXNjYXBlcy4gICdAJyBpcyBub3QgYSBzcGVjaWFsCgljaGFyYWN0ZXIuCgkqIGNwcGxpYi5oOiBVcGRhdGUgY29tbWVudGFyeS4KCk1vbiBBcHIgMTIgMDk6MzA6MDMgMTk5OSAgUmljaGFyZCBFYXJuc2hhdyAgKHJlYXJuc2hhQGFybS5jb20pCgoJKiBhcm0uaCAodGFyZ2V0X2ZwX25hbWUsIHN0cnVjdHVyZV9zaXplX3N0cmluZywgYXJtX2NwdV9zZWxlY3QpOgoJQ29uc3QtaWZ5LgoJKiBhcm0uYyAodGFyZ2V0X2ZwX25hbWUsIHN0cnVjdHVyZV9zaXplX3N0cmluZyk6IENvbnN0LWlmeS4KCgkqIGFybS5tZCAocmVsb2FkX2luaGksIHJlbG9hZF9vdXRoaSk6IE1ha2UgdGhlIHNjcmF0Y2ggREltb2RlLgoJKiBhcm0uYyAoYXJtX3JlbG9hZF9pbl9oaSk6IEhhbmRsZSBjYXNlcyB3aGVuIHRoZSBpbnB1dCBpcyBzdGlsbAoJYSBwc2V1ZG8sIG1ha2UgdXNlIG9mIHNjcmF0Y2ggcmVnaXN0ZXJzIGZvciByZWxvYWRpbmcgdGhlIGFkZHJlc3MKCWFzIGFwcHJvcHJpYXRlLgoJKGFybV9yZWxvYWRfb3V0aGkpOiBTaW1pbGFybHkgZm9yIHdoZW4gdGhlIG91dHB1dCBpcyBzdGlsbCBhIHBzZXVkby4KCgkqIHJpc2NpeC5oIChTVUJUQVJHRVRfU1dJVENIRVMpOiBEb2N1bWVudC4KCjE5OTktMDQtMTIgIEJydWNlIEtvcmIgIDxkZHNpbmMwOUBpeC5uZXRjb20uY29tPgoKCSogZml4aW5jbHVkZXM6CgltYWtlIGZpeGluY2x1ZGVzIGJlaGF2ZSBsaWtlIHRoZSBzY3JpcHRzIGluIGZpeGluYy8KCgkqIE1ha2VmaWxlLmluKCBzdG1wLWZpeGluYyApOgoJZW5zdXJlIHRoZSBTSEVMTCB2YWx1ZSBpcyB0aGF0IG9mIHRoZSBtYWtlCgoJKiBmaXhpbmNsL2luY2xoYWNrLnRwbDoKCXRoZSBmaWxlIG5hbWUgbGlzdHMgb3VnaHQgdG8gYmUgcmVzdHJpY3RlZCB0byAiKi5oIiBhbnl3YXkKCUMrKyBmaWxlcyBtYXkgYmUgbmFtZWQgLi4uL1thLXpdKysvLi4uIGFsc28KCUFkZGluZyBjb3B5cmlnaHQgeWVhciBhbmQgYXR0cmlidXRpb24gdG8gb3V0cHV0CgoJKiBmaXhpbmNsL2luY2xoYWNrLmRlZjoKCWZpeGVkIGJyb2tlbiBleHByZXNzaW9uCglDbGFyaWZ5IGEgc29tZSBjb21tZW50cwoKCSogZml4aW5jbC9maXhpbmNsLnRwbDoKCUNsYXJpZnkgYSBzb21lIGNvbW1lbnRzCglSZW1vdmUgZGVhZCB0ZW1wbGF0ZSB0ZXh0CglDb3JyZWN0IHRoZSBjb3VudGluZyBvZiByZWd1bGFyIGV4cHJlc3Npb25zCgpNb24gQXByIDEyIDAzOjA3OjQ0IDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBhbHBoYS5jIChhbGlnbmVkX21lbW9yeV9vcGVyYW5kKTogSGFuZGxlIG91dCBvZiByYW5nZSBzdGFjayBzbG90cy4KCVRha2UgYSBuZXcgU0NSQVRDSCBhcmd1bWVudCBmb3IgdGhlIG9jY2FzaW9uLiAgVXBkYXRlIGFsbCBjYWxsZXJzLgoJKGdldF91bmFsaWduZWRfYWRkcmVzcyk6IEFib3J0IG9uIG91dCBvZiByYW5nZSBzdGFjayBzbG90cy4KCSogYWxwaGEubWQgKGFkZGRpMyBzcGxpdHRlcik6IENoZWNrIHNfcF9ydHggbm90IFJFR05PLgoJKHJlbG9hZF9pbnFpKTogQ2hlY2sgZm9yIGFsaWduZWQgbWVtcyBiZWZvcmUgdW5hbGlnbmVkLgoJKHJlbG9hZF9pbmhpKTogTGlrZXdpc2UuCgpNb24gQXByIDEyIDAzOjExOjMwIDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGZsb3cuYyAoZmxvd19kZWxldGVfaW5zbik6IElmIHdlIGRlbGV0ZSBhIENPREVfTEFCRUwsIGFsc28gcmVtb3ZlCglpdCBmcm9tIHRoZSBub25sb2NhbF9nb3RvX2hhbmRsZXJfbGFiZWxzIGxpc3QuCgkqIGp1bXAuYyAoZGVsZXRlX2luc24pOiBMaWtld2lzZS4KCShqdW1wX29wdGltaXplXzEpOiBBbHNvIHJlY29tcHV0ZSBMQUJFTF9OVVNFUyB3aGVuIHdlIGFyZSBqdXN0CgltYXJraW5nIGxhYmVscy4KCSogcnRsLmggKHJlbW92ZV9ub2RlX2Zyb21fZXhwcl9saXN0KTogRGVjbGFyZS4KCSogcnRsYW5hbC5jIChyZW1vdmVfbm9kZV9mcm9tX2V4cHJfbGlzdCk6IE5ldyBmdW5jdGlvbi4KCk1vbiBBcHIgMTIgMDI6Mzc6MDIgMTk5OSAgSmFuIEh1Ymlja2EgIDxodWJpY2thQGZyZWVzb2Z0LmN6PgoKCSogcmVnLXN0YWNrLmM6IFVwZGF0ZSBjb21tZW50LCBpbmNsdWRlIHZhcnJheS5oLgoJKHN0YWNrX3JlZ3NfbWVudGlvbmVkX2RhdGEpOiBOZXcgZ2xvYmFsIHZhcmlhYmxlLgoJKGNoZWNrX3N0YWNrX3JlZ3NfbWVudGlvbmVkKTogTmV3IGZ1bmN0aW9uLgoJKHN0YWNrX3JlZ3NfbWVudGlvbmVkKTogTmV3IGZ1bmN0aW9uLgoJKHJlZ190b19zdGFjayk6IEluaXRpYWxpemUgYW5kIGZyZWUgc3RhY2tfcmVnc19tZW50aW9uZWRfZGF0YSwKCXVzZSBzdGFja19yZWdzX21lbnRpb25lZC4KCShyZWNvcmRfYXNtX3JlZ19saWZlKTogQ2hhbmdlIGluc24gdHlwZSBjYWNoZSBmb3IgY2hhbmdlZCBpbnNuLgoJKHJlY29yZF9yZWdfbGlmZSk6IERvIG5vdCBjaGFuZ2UgdGhlIGluc24gbW9kZS4KCShlbWl0X3BvcF9pbnNuKTogTGlrZXdpc2UuCgkoZW1pdF9zd2FwX2luc24pOiBMaWtld2lzZS4KCShtb3ZlX2Zvcl9zdGFja19yZWcpOiBMaWtld2lzZS4KCShzdGFja19yZWdfbGlmZV9hbmFseXNpcyk6IFVzZSBzdGFja19yZWdzX21lbnRpb25lZC4KCShlbWl0X3N3YXBfaW5zbik6IExpa2V3aXNlLgoJKHN1YnN0X3N0YWNrX3JlZ3MpOiBMaWtld2lzZS4KCShjb252ZXJ0X3JlZ3MpOiBMaWtld2lzZS4KCSoganVtcC5jIChmaW5kX2Nyb3NzX2p1bXApOiBVc2Ugc3RhY2tfcmVnc19tZW50aW9uZWQuCgkqIHJ0bC5oIChzdGFja19yZWdzX21lbnRpb25lZCk6IERlY2xhcmUuCgpNb24gQXByIDEyIDAwOjU3OjEwIDE5OTkgIFRoZW9kb3JlIFBhcGFkb3BvdWxvICA8VGhlb2RvcmUuUGFwYWRvcG91bG9Ac29waGlhLmlucmlhLmZyPgoKCSogaW50ZWdyYXRlLmMgKElOVEVHUkFURV9USFJFU0hPTEQpOiBTeW5jIGl0IHdpdGggdGhlIGNvbW1lbnQuCgpTdW4gQXByIDExIDEwOjI0OjE4IDE5OTkgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiBydGwuaCAocnR4X2RlZik6IFVwZGF0ZSBkb2N1bWVudGF0aW9uIGZvciBqdW1wIGFuZCBjYWxsLgoKU3VuIEFwciAxMSAwNzo0Mzo0NCAxOTk5ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBqdW1wLmMgKGp1bXBfb3B0aW1pemVfMSk6IE1ha2UgdGhlIGRlZmluaXRpb24gc3RhdGljIHRvIG1hdGNoCgl0aGUgcHJvdG90eXBlLgoKU2F0IEFwciAxMCAyMjo1MTo1MyAxOTk5ICBKYW4gSHViaWNrYSAgPGh1Ymlja2FAbGltYXgucGFydS5jYXMuY3o+CgoJKiBmbG93LmMgKGxpZmVfYW5hbHlzaXMpOiBOZXcgcGFyYW1ldGVyIHJlbW92ZV9kZWFkX2NvZGUuCgkobGlmZV9hbmFseXNpc18xKTogTGlrZXdpc2UuCgkocHJvcGFnYXRlX2Jsb2NrKTogTGlrZXdpc2U7IHVzZSBpdC4KCSogb3V0cHV0Lmg6IFVwZGF0ZSBwcm90b3R5cGUuCgkqIHRvcGxldi5jOiBVcGRhdGUgY2FsbHMgdG8gbGlmZV9hbmFseXNpcy4KClNhdCBBcHIgMTAgMjI6MTI6MTIgMTk5OSAgSmFuIEh1Ymlja2EgIDxodWJpY2thQGZyZWVzb2Z0LmN6PgoKCSogcmVjb2cuYyAoY29uc3RyYWluX29wZXJhbmRzKTogSWdub3JlIHVuYXJ5IG9wZXJhdG9ycyB3aGVuCgltYXRjaGluZyBvcGVyYW5kcy4gIFJlY29nbml6ZSAnNScuLic5JyBhcyB3ZWxsLgoKU2F0IEFwciAxMCAyMTo1MzowMiAxOTk5ICBQaGlsaXBwIFRob21hcyAgKGt0aG9tYXNAZ3dkZy5kZSkKCQkJICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogY29uZmlndXJlLmluOiBTZXQgdGFyZ2V0X2NwdV9kZWZhdWx0MiBmb3IgdGFyZ2V0X2FsaWFzIGs2LgoJKiBpMzg2LmggKFRBUkdFVF9TV0lUQ0hFUyk6IFJlbW92ZSBuby08Y3B1PiBlbnRyaWVzLgoJKENDMV9DUFVfU1BFQyk6IExpa2V3aXNlLgoJKENQUF9DUFVfREVGQVVMVF9TUEVDKTogU3RyZWFtbGluZSBkZWZpbml0aW9uLiAgQWRkIEs2IHZlcnNpb24uCgkoQ1BQX0s2X1NQRUMpOiBOZXcuCgkoQ1BQX0NQVV9TUEVDKTogQWRkIEs2IHZhcmlhbnQuCgkoRVhUUkFfU1BFQ1MpOiBMaWtld2lzZS4KCkZyaSBBcHIgIDkgMTE6Mjk6MTcgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGZsb3cuYyAobWVyZ2VfYmxvY2tzX25vbW92ZSk6IFJld3JpdGUgdG8gcHJvcGVybHkgaGFuZGxlIHR3bwoJYmxvY2tzIHRoYXQgdmFuaXNoIGVudGlyZWx5IGR1cmluZyBtZXJnaW5nLgoKU2F0IEFwciAxMCAyMDowOTo1NSAxOTk5ICBKb2huIFdlaGxlICAoam9obkBmZWl0aC5jb20pCgoJKiBpMzg2Lm1kIChmbG9hdHNpc2YyLCBmbG9hdGRpc2YyLCBmbG9hdHNpZGYyLCBmbG9hdGRpZGYyLAoJZmxvYXRzaXhmMiwgZmxvYXRkaXhmMiwgbW92c2ljYywgbW92aGljYywgbW92c2ZjYywgbW92ZGZjYywKCW1vdnhmY2MsIG1vdmRpY2MpOiBSZW1vdmUgdW51c2VkIHJlZ2lzdGVyIGNvbnN0cmFpbnRzIGZyb20KCXRoZSBzcGxpdHRlcnMuCgoJKiBpMzg2Lm1kIChmaXh1bnNfdHJ1bmNzZnNpMiwgZml4dW5zX3RydW5jZGZzaTIsCglmaXh1bnNfdHJ1bmN4ZnNpMik6IERlbGV0ZS4KCgkqIHJlZy1zdGFjay5jIChkZWxldGVfaW5zbl9mb3Jfc3RhY2tlcik6IEVuc3VyZSB0aGF0Cgl0aGUgb25seSBzaWRlIGVmZmVjdHMgb2YgYSBQQVJBTExFTCBhcmUgY2xvYmJlcnMuCgkoc3Vic3Rfc3RhY2tfcmVncyk6IEhhbmRsZSBzdWJzdF9zdGFja19yZWdzX3BhdCBkZWxldGluZwoJYSBQQVJBTExFTC4KCSogaTM4Ni5tZCAoZXh0ZW5kc2ZkZjIsIGV4dGVuZGRmeGYyLAoJZXh0ZW5kc2Z4ZjIpOiBSZXdyaXRlIHVzaW5nIGEgc3BsaXR0ZXIuCgkqIGkzODYuYyAob3V0cHV0X29wX2Zyb21fcmVnKTogUmVtb3ZlLgoJKiBpMzg2Lmg6IExpa2V3aXNlLgoKU2F0IEFwciAxMCAxMzowOToxOCAxOTk5ICBOaWNrIENsaWZ0b24gIDxuaWNrY0BjeWdudXMuY29tPgoKCSogY29uZmlnL2FybS9hcm0uYyAoZGlfb3BlcmFuZCk6IEFsbG93IFNVQlJFR3MgYXMgd2VsbC4KCShzb2Z0X2RmX29wZXJhbmQpOiBBbGxvdyBTVUJSRUdzIGFzIHdlbGwuCgpTYXQgQXByIDEwIDA2OjE0OjMxIDE5OTkgIEphbiBIdWJpY2thICA8aHViaWNrYUBwYXJ1LmNhcy5jej4KCgkqIGV4dGVuZC50ZXhpIChBc3NlbWJsZXIgSW5zdHJ1Y3Rpb25zIHdpdGggQyBFeHByZXNzaW9uIE9wZXJhbmRzKToKCURvY3VtZW50IHRoZSBpMzg2IGZsb2F0aW5nIHBvaW50IG9wZXJhbmRzLgoKMTk5OS0wNC0xMCAgTWlrZSBTdHVtcCAgPG1yc0B3cnMuY29tPgoKCSogY29uZmlndXJlLmluICgqLSotdnh3b3Jrcyk6IEFkZCB2eFdvcmtzIHRocmVhZCBzdXBwb3J0IGZvciBhbGwKCXZ4V29ya3MgdGFyZ2V0cy4KCSogY29uZmlndXJlLmluICh0aHVtYi13cnMteHZ3b3Jrcyk6IEFkZCB2eFdvcmtzIHN1cHBvcnQgZm9yIHRodW1iLgoJKiBjb25maWd1cmU6IFJlYnVpbHQuCgpTYXQgQXByIDEwIDA2OjA0OjUwIDE5OTkgIERvbm4gVGVycnkgIChkb25uQGludGVyaXguY29tKQoKCSogaTM4Ni90LWludGVyaXg6IFVzZSBtb3N0bHkgc3lzdGVtIGhlYWRlcnMgdW5jaGFuZ2VkLgoJVXNlIHN5c3RlbSBhc3NlcnQuaAoJKiBmaXhpbmMvZml4aW5jLmludGVyaXg6IERpdHRvIChtYWtlIGFsbW9zdCBuby1vcCkuCgkqIGNvbmZpZy94LWludGVyaXguaCAoX0FMTF9TT1VSQ0UpOiBhZGQgLUQKCSogY29uZmlnL3gtaW50ZXJpeC5oIChjcnRpLm8pOiBEZWxldGUgZGVwZW5kZW5jeS4KCSogY29uZmlnL3htLWludGVyaXguaCAoT05MWV9JTlRfRklFTERTKTogRGVmaW5lIG9ubHkgd2hlbiBib290c3RyYXBwaW5nLgoJKiBpMzg2L3htLWkzODYtaW50ZXJpeC5oOiBOZXcgZmlsZS4KCSogaTM4Ni9pbnRlcml4LmggKEFTTV9PVVRQVVRfTElNSVRFRF9TVFJJTkcpOiBGaXggd2FybmluZ3MuCgkqIGkzODYvaTM4Ni1pbnRlcml4Lmg6IFJlbmFtZWQgZnJvbSBpbnRlcml4LmguCgkqIGNvbmZpZ3VyZS5pbiAoaW50ZXJpeCk6IFVzZSBuZXcgZmlsZXMuCgkqIGNvbmZpZ3VyZTogUmVidWlsdC4KClNhdCBBcHIgMTAgMDU6MjU6MjggMTk5OSAgRGFuaWVsIEphY29ib3dpdHogIDxkYW5AZGViaWFuLm9yZz4KCgkqIHJzNjAwMC9zeXN2NC5oIChDUFBfT1NfTElOVVhfU1BFQyk6IEZpeCBjb25kaXRpb25zCglmb3IgLUR1bml4IGFuZCAtRGxpbnV4LCBhbmQgcmVtb3ZlIGR1cGxpY2F0ZSBkZWZpbml0aW9uLgoJQ2hhbmdlIC1Bc3lzdGVtKGxpbnV4KSB0byAtQXN5c3RlbShwb3NpeCkuCgkoQ1BQX09TX1NPTEFSSVNfU1BFQyk6IEZpeCBjb25kaXRpb25zIGZvciAtRHVuaXgsIC1Ec3VuLAoJLURTVlI0LCAtRF9fRVhURU5TSU9OU19fLgoKCSogcnM2MDAwL2xpbnV4LmggKENQUF9QUkVERUZJTkVTKTogUmVtb3ZlIC1EdW5peCwKCS1EbGludXgsIC1Bc3lzdGVtKGxpbnV4KSwgYW5kIC1Bc3lzdGVtKHVuaXgpLgoKU2F0IEFwciAxMCAwNToxNDo1MCAxOTk5ICBNYXJrIEVsYnJlY2h0ICA8c25vd2JhbGwzQHVzYS5uZXQ+CgoJKiBpMzg2L2RqZ3BwLmggKFNFVF9BU01fT1ApOiBEZWZpbmUuCgoJKiBjY2NwLmMgKERJUl9TRVBBUkFUT1IpOiBNb3ZlIHRvIHRoZSB0b3Agb2YgdGhlIGZpbGUuCgkoaXNfZGlyX3NlcGFyYXRvcik6IE5ldyBmdW5jdGlvbi4KCShzaW1wbGlmeV9maWxlbmFtZSk6IFVzZSBpdC4KCSogY29sbGVjdDIuYyAoZmluZF9hX2ZpbGUpOiBVc2UgSEFWRV9ET1NfQkFTRURfRklMRV9TWVNURU0gaW4gcGxhY2UKCW9mIHRoZSBESVJfU0VQQVJBVE9SIHRlc3QuCglDb25zaWRlciBhbnkgZmlsZSBzdGFydGluZyB3aXRoIGEgZHJpdmVuYW1lIHRvIGJlIGFic29sdXRlLgoJSWYgdGhlIGFic29sdXRlIGZpbGVuYW1lIHRlc3QgZmFpbHMgYW5kIEVYRUNVVEFCTEVfU1VGRklYIGlzCglkZWZpbmVkLCBhcHBlbmQgRVhFQ1VUQUJMRV9TVUZGSVggdG8gdGhlIGZpbGUgYW5kIHRyeSBhZ2Fpbi4KCSogY3BwaW5pdC5jIChiYXNlX25hbWUpOiBVc2UgSEFWRV9ET1NfQkFTRURfRklMRV9TWVNURU0KCWluIHBsYWNlIG9mIF9fTVNET1NfXyBhbmQgX1dJTjMyLgoJKiBjcHBmaWxlcy5jIChzaW1wbGlmeV9wYXRobmFtZSk6IExpa2V3aXNlLgoJKiBnY2MuYyAoSVNfRElSX1NFUEFSQVRPUik6IERlZmluZSBuZXcgbWFjcm8uIFJldHVybnMgdHJ1ZSBpZiBhCgljaGFyYWN0ZXIgaXMgYSBkaXJlY3Rvcnkgc2VwYXJhdG9yLgoJKGZpbmRfYV9maWxlKTogVXNlIGl0LgoJKGNvbnZlcnRfZmlsZW5hbWUpOiBMaWtld2lzZS4KCShwcm9jZXNzX2NvbW1hbmQpOiBMaWtld2lzZS4KCShkb19zcGVjXzEpOiBMaWtld2lzZS4KCShpc19kaXJlY3RvcnkpOiBMaWtld2lzZS4KCShtYWluKTogTGlrZXdpc2UuCgkqIHByZWZpeC5jIChJU19ESVJfU0VQQVJBVE9SKTogRGVmaW5lLiBUZXN0cyB3aGV0aGVyIGEgY2hhcmFjdGVyIGlzCglhIGRpcmVjdG9yeSBzZXBhcmF0b3IuCgkodHJhbnNsYXRlX25hbWUpOiBVc2UgaXQuCgkodXBkYXRlX3BhdGgpOiBDaGFuZ2UgRElSX1NFUEFSQVRPUl8yIHRvIERJUl9TRVBBUkFUT1IuIEZpeAoJd2FybmluZyBpbiBibG9jayB3aGVyZSAnLycgaXMgY2hhbmdlZCB0byBESVJfU0VQQVJBVE9SLgoJKiBpMzg2L3htLWRqZ3BwLmggKERJUl9TRVBBUkFUT1IpOiBTZXQgdG8gJy8nLgoJKERJUl9TRVBBUkFUT1JfMik6IE5ldyBtYWNyby4gU2V0IHRvICdcJy4KCShIQVZFX0RPU19CQVNFRF9GSUxFU1lTKTogRGVmaW5lLgoJKiBpMzg2L3htLW1pbmd3MzIuaDogVXBkYXRlZCBjb3B5cmlnaHQuIFNldAoJRElSX1NFUEFSQVRPUl8yIHRvICcvJy4gRGVmaW5lIEhBVkVfRE9TX0JBU0VEX0ZJTEVfU1lTVEVNLgoJKiBpMzg2L3htLW9zMi5oOiBMaWtld2lzZS4KCSogd2lubnQveG0td2lubnQuaDogTGlrZXdpc2UuCgkqIGkzODYveG0tZG9zLmg6IExpa2V3aXNlLiAgQWRkIGNvcHlyaWdodC4KCjE5OTktMDQtMTAgIEpvc2VwaCBTLiBNeWVycyAgPGpzbTI4QGNhbS5hYy51az4KCgkqIHBkcDExLmggKFRBUkdFVF9TV0lUQ0hFUyk6IEFkZCBvcHRpb24gdG8gdmFyeSBhc3NlbWJsZXIgc3ludGF4LgoJKFRBUkdFVF9ERUZBVUxUKTogUG9zc2libHkgdXNlIFVOSVggc3ludGF4LgoJKFRBUkdFVF9VTklYX0FTTSwgVEFSR0VUX1VOSVhfQVNNX0RFRkFVTFQpOiBOZXcgbWFjcm9zLgoJKFJFR0lTVEVSX05BTUVTKTogVXNlICJyNSIgaW5zdGVhZCBvZiAiZnAiLgoJKEFTTV9PVVRQVVRfQUxJR04pOiBVc2UgIi5ldmVuIiBkaXJlY3RpdmUsIGFuZCBhYm9ydCBmb3IgYW55CglncmVhdGVyIGFsaWdubWVudC4KCSogMmJzZC5oIChUQVJHRVRfVU5JWF9BU01fREVGQVVMVCk6IERlZmF1bHQgdG8gVU5JWCBhc3NlbWJsZXIKCXN5bnRheCBmb3IgMkJTRC4KCSogcGRwMTEuYyAob3V0cHV0X2FzY2lpKTogVXNlIHdvcmtpbmcgc3ludGF4IGZvciAiLmJ5dGUiLgoJKHByaW50X29wZXJhbmRfYWRkcmVzcyk6IFVzZSAiKiIgaW5zdGVhZCBvZiAiQCIgd2hlbiB1c2luZyBVTklYCglhc3NlbWJsZXIgc3ludGF4LgoKU2F0IEFwciAxMCAwMzo1MDoxMiAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBydGwuaCAocmVidWlsZF9qdW1wX2xhYmVscyk6IERlY2xhcmUuCgkqIGp1bXAuYyAoanVtcF9vcHRpbWl6ZV8xKTogUmVuYW1lZCBmcm9tIGp1bXBfb3B0aW1pemUuICBNYWtlIHN0YXRpYy4KCUFkZCBuZXcgYXJndW1lbnQgTUFSS19MQUJFTFNfT05MWS4gIFF1aXQgYWZ0ZXIgbWFya19hbGxfbGFiZWxzIGlmCglyZXF1ZXN0ZWQuCgkoanVtcF9vcHRpbWl6ZSwgcmVidWlsZF9qdW1wX2xhYmVscyk6IE5ldyB3cmFwcGVyIGZ1bmN0aW9ucyBmb3IKCWp1bXBfb3B0aW1pemVfMS4KCSogdG9wbGV2LmMgKHJlc3Rfb2ZfY29tcGlsYXRpb24pOiBVc2UgcmVidWlsZF9qdW1wX2xhYmVscyBpbnN0ZWFkIG9mCglydW5uaW5nIHRoZSBlbnRpcmUganVtcCBvcHRpbWl6ZXIuCgoJKiBydGwuaCAobG9jYWxfYWxsb2MpOiBSZXR1cm5zIGFuIGludGVnZXIgbm93LgoJKiBsb2NhbC1hbGxvYy5jIChyZWNvcmRlZF9sYWJlbF9yZWYpOiBOZXcgZmlsZSBzY29wZWQgdmFyaWFibGUuCgkobG9jYWxfYWxsb2MpOiBJbml0aWFsaXplIHJlY29yZGVkX2xhYmVsX3JlZiB0byB6ZXJvLiAgUmV0dXJuIGl0cwoJdmFsdWUgd2hlbiBsb2NhbCBhbGxvY2F0aW9uIGhhcyBjb21wbGV0ZWQuCgkodXBkYXRlX2VxdWl2X3JlZ3MpOyBJZiB3ZSBjcmVhdGUgYW4gZXF1aXZhbGVuY2UgZm9yIGEgTEFCRUxfUkVGLAoJc2V0IHJlY29yZGVkX2xhYmVsX3JlZi4KCSogdG9wbGV2LmMgKHJlc3Rfb2ZfY29tcGlsYXRpb24pOiBSdW4gdGhlIGp1bXAgb3B0aW1pemVyIGFmdGVyCglyZWdpc3RlciBhbGxvY2F0aW9uIGFuZCByZWxvYWRpbmcgaWYgbmVlZGVkLgoKRnJpIEFwciAgOSAyMTowMjo1NyAxOTk5ICBLcmlzdGVyIFdhbGZyaWRzc29uICAoY2F0b0BkZi5sdGguc2UpCgoJKiBpMzg2L2dhcy5oIChBU01fT1VUUFVUX01BWF9TS0lQX0FMSUdOKTogRml4IHR5cG8uCgkqIGkzODYvZnJlZWJzZC1lbGYuaCAoQVNNX09VVFBVVF9NQVhfU0tJUF9BTElHTik6IExpa2V3aXNlLgoKMTk5OS0wNC0wOSAgWmFjayBXZWluYmVyZyAgPHphY2tAcmFiaS5jb2x1bWJpYS5lZHU+CgoJKiBjcHBoYXNoLmMgKHNwZWNpYWxfc3ltYm9sKTogV2hlbiBleHBhbmRpbmcgX19MSU5FX18sIHVzZSB0aGUKCXRvcCBmaWxlIGJ1ZmZlciwgbm90IHRoZSB0b3AgYnVmZmVyLgoKRnJpIEFwciAgOSAxMzo0MTowNCAxOTk5ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CgoJKiBNYWtlZmlsZS5pbiAoY2hlY2stZysrLCBjaGVjay1nY2MsIGNoZWNrLWc3NywgY2hlY2stb2JqYyk6IEFkZAoJY2QgLi4gdG8gVENMX0xJQlJBUlkgY29tbWFuZC4KCkZyaSBBcHIgIDkgMTM6MDQ6NTIgMTk5OSAgTmljayBDbGlmdG9uICA8bmlja2NAY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy9hcm0vdW5rbm93bi1lbGYuaCAoU1VCVEFSR0VUX0NQVV9ERUZBVUxUKTogT25seSBkZWZpbmUgaWYKCW5vdCBhbHJlYWR5IHNwZWNpZmllZC4KCkZyaSBBcHIgIDkgMTE6MTg6NTUgMTk5OSAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogYy1jb21tb24uYyAoZGVjbF9hdHRyaWJ1dGVzLCBBX0lOSVRfUFJJT1JJVFkpOiBBbGxvdyBhcnJheXMKCW9mIGNsYXNzZXMsIHRvby4KCkZyaSBBcHIgIDkgMTA6NDA6MTAgMTk5OSAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBzbmFmdS5ydXRnZXJzLmVkdT4KCgkqIHJzNjAwMC5jIChyczYwMDBfb3ZlcnJpZGVfb3B0aW9ucywgcHR0LCByczYwMDBfZmlsZV9zdGFydCwKCXJzNjAwMF9mbG9hdF9jb25zdCwgcnM2MDAwX3JlcGxhY2VfcmVnbm8sIGRlYnVnX3N0YWNrX2luZm8sCglyczYwMDBfb3V0cHV0X2xvYWRfdG9jX3RhYmxlLCBvdXRwdXRfcHJvbG9nLCBvdXRwdXRfZXBpbG9nKToKCUNvbnN0LWlmeSBhIGNoYXIqLgoJKG91dHB1dF9taV90aHVuayk6IExpa2V3aXNlLiAgTWFyayBwYXJhbWV0ZXIgYHRodW5rX2ZuZGVjbCcgd2l0aAoJQVRUUklCVVRFX1VOVVNFRC4gIEhpZGUgdW51c2VkIHZhcmlhYmxlcyBgcjAnLCBgc3AnLCBgdG9jJywKCWBzY2hhaW4nLCBgcjEyJywgYGJ1ZicgYW5kIGBsYWJlbG5vJy4KCShvdXRwdXRfYXNjaWkpOiBDb25zdC1pZnkgYSBjaGFyKi4KCShyczYwMDBfZ2VuX3NlY3Rpb25fbmFtZSk6IEluaXRpYWxpemUgdmFyaWFibGUgYGxhc3RfcGVyaW9kJy4KCShyczYwMDBfYWRqdXN0X3ByaW9yaXR5KTogTWFyayBwYXJhbWV0ZXIgYGluc24nIHdpdGgKCUFUVFJJQlVURV9VTlVTRUQuCgkocnM2MDAwX3RyYW1wb2xpbmVfdGVtcGxhdGUsIHJzNjAwMF9kbGxfaW1wb3J0X3JlZiwKCXJzNjAwMF9sb25nY2FsbF9yZWYsIHJzNjAwMF9lbmNvZGVfc2VjdGlvbl9pbmZvKTogQ29uc3QtaWZ5IGEgY2hhciouCgoJKiByczYwMDAuaCAob2Zmc2V0dGFibGVfbWVtX29wZXJhbmQsIG9wdGltaXphdGlvbl9vcHRpb25zKTogQWRkCglwcm90b3R5cGVzLgoKCSogcnM2MDAwLm1kIChtb3ZkaSwgZGVmaW5lX3NwbGl0KTogQ2FzdCBhIHZhbHVlIHRvIEhPU1RfV0lERV9JTlQKCXdoZW4gY29tcGFyaW5nIGFnYWluc3Qgb25lLgoKVGh1IEFwciAgOCAxOToyMDoxOCAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBleHByLmMgKGV4cGFuZF9leHByLCBjYXNlIEFSUkFZX1JFRiwgQ09NUE9ORU5UX1JFRiwgQklUX0ZJRUxEX1JFRik6CglEbyBub3QgdHJ5IHRvIG9wdGltaXplIGFuIGFnZ3JlZ2F0ZSBhZGRyZXNzIHdoaWNoIGhhcyBWT0lEbW9kZS4KCU1pcnJvcnMgTWFyY2ggMjMgY2hhbmdlIHRvIGV4cGFuZF9hc3NpZ25tZW50LgoKCSogZmxvdy5jIChkZWxldGVfdW5yZWFjaGFibGVfYmxvY2tzKTogRG8gbm90IHJlcXVpcmUgRURHRV9GQUxMVEhSVQoJZm9yIGFuIGVkZ2Ugd2hlbiB0aWR5aW5nIGFuIGVkZ2Ugd2hpY2ggY29ubmVjdHMgY29uc2VjdXRpdmUgYmFzaWMKCWJsb2Nrcy4KCgkqIGZsb3cuYyAoY2FuX2RlbGV0ZV9sYWJlbF9wKTogRG8gbm90IGNvbnZlcnQgYSBsYWJlbCBpbnRvIGEKCWRlbGV0ZWQgbGFiZWwgaGVyZS4KCgkqIGNzZS5jIChmbHVzaF9oYXNoX3RhYmxlKTogTmV3IGZ1bmN0aW9uLgoJKGNzZV9pbnNuKTogRmx1c2ggdGhlIGhhc2ggdGFibGUgd2hlbiB3ZSBlbmNvdW50ZXIgYSB2b2xhdGlsZSBhc20uCgkoY3NlX2Jhc2ljX2Jsb2NrKTogVXNlIGZsdXNoX2hhc2hfdGFibGUgaW5zdGVhZCBvZiBkb2luZyBpdAoJaW5saW5lLgoKCSogcmVsb2FkMS5jIChyZWxvYWRfY3NlX3JlZ3NfMSk6IEZsdXNoIGtub3duIHJlZ2lzdGVyIHZhbHVlcyBpZgoJd2UgZW5jb3VudGVyIGEgdm9sYXRpbGUgYXNtLgoKCSogbG9vcC5jIChzdHJlbmd0aF9yZWR1Y2UpOiBSZS1lbmFibGUgSm9lcm4ncyBsb29wIGltcHJvdmVtZW50cy4KClRodSBBcHIgIDggMDk6Mzc6NDAgMTk5OSAgTmljayBDbGlmdG9uICA8bmlja2NAY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy9hcm0vYXJtLmMgKGFybV9wcmludF9vcGVyYW5kKTogVW5kbyBwcmV2aW91cyBjaGFuZ2UgLQoJYWx3YXlzIHByaW50IGxhcmdlIGNvbnN0YW50cyBpbiBkZWNpbWFsLgoKVGh1IEFwciAgOCAxMDoyMjoyMyAxOTk5ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBjb25maWd1cmUuaW4gKGhvc3RfeG1fZmlsZSwgYnVpbGRfeG1fZmlsZSk6IEluY2x1ZGUgaHdpbnQuaC4KCVVzZSBjYXNlIHN0YXRlbWVudHMgaW5zdGVhZCBvZiAiaWYgdGVzdCAtYSAuLi4gLWEgLi4uIC1hIC4uLiIKCgkqIG1hY2htb2RlLmg6IERvbid0IGRlZmluZSBIT1NUX1dJREVfSU5ULCBldGMuIFdyYXAgdXNlIG9mCglIT1NUX1dJREVfSU5UIGluICNpZmRlZi4KCgkqIG1pcHMuaDogSW5jbHVkZSBod2ludC5oIGluc3RlYWQgb2YgcHJvdmlkaW5nIGRlZmluaXRpb25zIGZvcgoJSE9TVF9XSURFX0lOVCwgZXRjLiAgV3JhcCB1c2VzIG9mIEhPU1RfV0lERV9JTlQgaW4gI2lmZGVmLgoKVGh1IEFwciAgOCAwNjoxNjoxNCAxOTk5ICBKb2huIFdlaGxlICAoam9obkBmZWl0aC5jb20pCgoJKiBpMzg2Lm1kICh0cnVuY2Rmc2YyLCB0cnVuY3hmc2YyLAoJdHJ1bmN4ZmRmMik6IFJld3JpdGUgdXNpbmcgYSBzcGxpdHRlci4KClRodSBBcHIgIDggMDE6MjY6MDUgMTk5OSAgQXJnIEhhYXMgIChhaGFhc0BuZW9zb2Z0LmNvbSkKCQkJICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBmcmVlYnNkLWVsZi5oIChBU01fT1VUUFVUX01BWF9TS0lQX0FMSUdOKTogQXZvaWQgYW1iaWd1b3VzCgllbHNlIHN0YXRlbWVudC4KCSogZ2FzLmggKEFTTV9PVVRQVVRfTUFYX1NLSVBfQUxJR04pOiBMaWtld2lzZS4KCSogbGludXguaCAoQVNNX09VVFBVVF9NQVhfU0tJUF9BTElHTik6IExpa2V3aXNlLgoJKiBvcGVuYnNkLmggKEFTTV9PVVRQVVRfTUFYX1NLSVBfQUxJR04pOiBMaWtld2lzZS4KCldlZCBBcHIgIDcgMjI6NDA6MTkgMTk5OSAgSmltIFdpbHNvbiAgPHdpbHNvbkBjeWdudXMuY29tPgoKCSogaTk2MC9pOTYwLmMgKGk5NjBfZnVuY3Rpb25fcHJvbG9ndWUpOiBEb24ndCBzYXZlIHN0YXRpYyBjaGFpbgoJcG9pbnRlci4KCSogaTk2MC9pOTYwLmggKFNUQUNLX0NIQUlOX1JFR05VTSk6IENoYW5nZSBmcm9tIHIzIHRvIGcxMi4KCShUUkFNUE9MSU5FX1RFTVBMQVRFKTogTGlrZXdpc2UuCgkoRlJBTUVfUE9JTlRFUl9SRVFVSVJFRCk6IENoZWNrIGN1cnJlbnRfZnVuY3Rpb25faGFzX25vbmxvY2FsX2dvdG8uCgkqIGk5NjAvaTk2MC5tZCAobm9ubG9jYWxfZ290byk6IFJld3JpdGUuCgpUdWUgQXByICA2IDE3OjQ5OjQ5IDE5OTkgIFBoaWxpcCBCbHVuZGVsbCAgPHBiQG5leHVzLmNvLnVrPgoKCSogY29uZmlnL2FybS9saWIxZnVuY3MuYXNtOiBUZXN0IGZvciBfX0VMRl9fIG5vdCBfX2VsZl9fLgoKV2VkIEFwciAgNyAxNDowNzozNCAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBoODMwMC5jIChoODMwMF9hZGp1c3RfaW5zbl9sZW5ndGgpOiBBbHNvIGF2b2lkIHJlY29nbml6aW5nCglBRERSX1ZFQyBhbmQgQUREUl9ESUZGX1ZFQyBpbnNucy4KCgkqIGg4MzAwLmMgKGg4MzAwX2FkanVzdF9pbnNuX2xlbmd0aCk6IEF2b2lkIHRyeWluZyB0byByZWNvZ25pemUKCVVTRSwgQ0xPQkJFUiBvciBTRVFVRU5DRSBpbnNucy4KCgkqIHVucm9sbC5jICh1bnJvbGxfbG9vcCk6IEZvciBIQVZFX2NjMCBtYWNoaW5lcywgYWRqdXN0IGNvcHlfZW5kX2x1aWQKCXRvIGFjY291bnQgZm9yIHRoZSB1bmNvcGllZCBpbnNuIHRoYXQgc2V0cyBjYzAgYXQgdGhlIGVuZCBvZiB0aGUgbG9vcC4KCgkqIHVucm9sbC5jIChjb3B5X2xvb3BfYm9keSk6IEFsd2F5cyBlbnN1cmUgYXQgbGVhc3QgdHdvIGluc25zCglhcmUgaW4gdGhlIGNvcGllZCBsb29wLgoKV2VkIEFwciAgNyAxNDo1MjoxOCAxOTk5ICBDYXRoZXJpbmUgTW9vcmUgIDxjbG1AY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy9taXBzL2VsZi5oIChNQUtFX0RFQ0xfT05FX09OTFkpOiBEZWZpbmUuCgkoVU5JUVVFX1NFQ1RJT05fUCk6IERlZmluZS4KCjE5OTktMDQtMDcgIEJydWNlIEtvcmIgIDxkZHNpbmMwOUBpeC5uZXRjb20uY29tPgoKCSogZml4aW5jL2luY2xoYWNrLnRwbCAmIGZpeGluY2wudHBsOgoJUmVtb3ZlIGR5bmFtaWMgY29udGVudCBmcm9tIGdlbmVyYXRlZCBmaWxlcwoKV2VkIEFwciAgNyAxMzoxNjoyMiAxOTk5ICBKb2huIFdlaGxlICAoam9obkBmZWl0aC5jb20pCgoJKiBpMzg2LmMgKG91dHB1dF9tb3ZlX21lbW9yeSk6IFJlbW92ZS4KCSogaTM4Ni5oOiBMaWtld2lzZS4KCgkqIGkzODYubWQgKG1vdnNpLCBtb3ZoaSwgbW92c3RyaWN0aGksIG1vdnFpLCBtb3ZzdHJpY3RxaSwKCW1vdnNmLCBtb3ZkZiwgbW92eGYsIG1vdmRpKTogQ2hlY2sgbm9fbmV3X3BzZXVkb3MgaW5zdGVhZAoJb2YgKHJlbG9hZF9pbl9wcm9ncmVzcyB8IHJlbG9hZF9jb21wbGV0ZWQpLgoKV2VkIEFwciAgNyAwMzoxNjo0NSAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogYWxwaGEuYyAocmVnX25vX3N1YnJlZ19vcGVyYW5kKTogTmV3IGZ1bmN0aW9uLgoJKiBhbHBoYS5oIChQUkVESUNBVEVfQ09ERVMpOiBBZGQgaXQuCgkqIGFscGhhLm1kIChmbG9hdGRpP2YgcGF0dGVybnMpOiBVc2UgaXQgZm9yIG9wMS4KCgkqIGFscGhhLmMgKGFscGhhX2VuZF9mdW5jdGlvbik6IERvbid0IGZsYWcgd2VhayBmdW5jdGlvbnMuCgpXZWQgQXByICA3IDAyOjExOjU1IDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBleHByLmMgKGV4cGFuZF9idWlsdGluKSBbQlVJTFRfSU5fUkVUVVJOX0FERFJFU1NdOiBVc2UKCWNvcHlfdG9fbW9kZV9yZWc7IGRvbid0IGZvcmNlIGNvbnN0YW50cyBpbnRvIGEgcmVnaXN0ZXIuCgpUdWUgQXByICA2IDIyOjU1OjI1IDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiB0b3BsZXYuYyAoY29tcGlsZV9maWxlKTogVHlwbyBmbG93X2R1bXAgLT4gZmxvdzJfZHVtcC4KCjE5OTktMDQtMDYgIEpvc2VwaCBTLiBNeWVycyAgPGpzbTI4QGNhbS5hYy51az4KCgkqIHBkcDExLmMgKHNpbXBsZV9tZW1vcnlfb3BlcmFuZCk6IEFkZCBkZWZhdWx0IGNhc2UgaW4gc3dpdGNoLgoJKiBwZHAxMS5oIChUQVJHRVRfU1dJVENIRVMpOiBBZGQgaGVscCBzdHJpbmdzLgoJKE5PVElDRV9VUERBVEVfQ0MpOiBEb24ndCBpbmNsdWRlIGV4Y2VzcyBhcmd1bWVudCB0byBmb3JtYXQuCgkoQVNNX09VVFBVVF9ET1VCTEVfSU5UKTogUmVtb3ZlLgoKVHVlIEFwciAgNiAyMjowOTo0MCAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogZXhwci5jIChleHBhbmRfYnVpbHRpbl9zZXRqbXApOiBQdXQgc2V0am1wIHJldHVybiBsYWJlbCBvbgoJbm9ubG9jYWxfZ290b19oYW5kbGVyX2xhYmVscyBmb3IgZmxvdy4KClR1ZSBBcHIgIDYgMjI6MDU6MjEgMTk5OSAgSmFuIEh1Ymlja2EgIDxodWJpY2thQHBhcnUuY2FzLmN6PgoJCQkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBmbG93LmMgKHZlcmlmeV9mbG93X2luZm8pOiBOZXcgZnVuY3Rpb24uCgkoZmluZF9iYXNpY19ibG9ja3MpOiBDYWxsIGl0IGlmIEVOQUJMRV9DSEVDS0lORy4KCShtZXJnZV9ibG9ja3MpOiBEb24ndCBtZXJnZSBpZiB0aGVyZSBhcmUgbm9uLWRlbGV0YWJsZSBsYWJlbHMuCgkqIHRvcGxldi5jIChmYXRhbF9pbnNuKTogQWxsb3cgYSBwcmludGYtc3R5bGUgYXJnIGxpc3QuCgkqIHRvcGxldi5oIChmYXRhbF9pbnNuKTogVXBkYXRlIHByb3RvdHlwZS4KClR1ZSBBcHIgIDYgMTY6MTg6NTggMTk5OSAgSmFuIEh1Ymlja2EgIDxodWJpY2thQHBhcnUuY2FzLmN6PgoKCSogZmxvdy5jIChzcGxpdF9lZGdlKSB1cGRhdGUgY29ycmVjdGx5IGZsb3cgZ3JhcGgsIGRpc2FibGUKCUVER0VfQ1JJVElDQUwgZmxhZyBvbiB0aGUgc3BsaXQgZWRnZSwgdXBkYXRlIE5VU0VTIGZvciBuZXcgbGFiZWwuCgpUdWUgQXByICA2IDE1OjQ3OjUxIDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBlbWl0LXJ0bC5jIChnZW5fcnR4X0NPTlNUX0RPVUJMRSk6IFVzZSBYV0lOVCBub3QgWElOVC4KCUNsZWFyIHRoaXJkIGFuZCBmb2xsb3dpbmcgc2xvdHMsIGlmIHRoZXkgZXhpc3QuCgpUdWUgQXByICA2IDE1OjQ1OjI4IDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBmbG93LmMgKGNyZWF0ZV9iYXNpY19ibG9jayk6IE1ha2Ugc3VyZSB0aGUgYmIgbm90ZSBpcyBpbiB0aGUgYmxvY2suCgkoY2FuX2RlbGV0ZV9ub3RlX3ApOiBSZW5hbWUgZnJvbSBkZWxldGVfbm90ZV9wLgoJKGRlbGV0ZV9pbnNuX2NoYWluKTogUHJlc2VydmUgdW5kZWxldGVhYmxlIGxhYmVscyB0b28uCgkodGlkeV9mYWxsdGhydV9lZGdlKTogVXNlIG5leHRfcmVhbF9pbnNuIGluc3RlYWQgb2YgY29uZnVzaW5nCglpbmxpbmUgY29kZS4KCjE5OTktMDQtMDYgIFphY2sgV2VpbmJlcmcgIDx6YWNrQHJhYmkuY29sdW1iaWEuZWR1PgoKCSogY3BwZXhwLmMgKHBhcnNlX2NoYXJjb25zdCk6IEluaXRpYWxpemUgYy4KCShjcHBfcGFyc2VfZXhwcik6IEluaXRpYWxpemUgcnByaW8uCgkqIGNwcGZpbGVzLmMgKG1lcmdlX2luY2x1ZGVfY2hhaW5zKTogSW5pdGlhbGl6ZSBwcmV2LgoJKGZpbmNsdWRlKTogU2V0IGZwLT5saW5lX2Jhc2UgdG8gZnAtPmJ1ZiBiZWZvcmUgcmV0dXJuaW5nLgoJKiBjcHBoYXNoLmMgKG1hY3JvZXhwYW5kKTogSW5pdGlhbGl6ZSB0b2tlbi4KCSogY3Bwc3BlYy5jIChsYW5nX3NwZWNpZmljX2RyaXZlcik6IENoYW5nZSBzdWZmIHRvCgljb25zdCBjaGFyICpjb25zdCAqLgoKMTk5OS0wNC0wNiAgWmFjayBXZWluYmVyZyAgPHphY2tAcmFiaS5jb2x1bWJpYS5lZHU+CgoJKiBjcHBpbml0LmMgKGluc3RhbGxfcHJlZGVmcyk6IERlbGV0ZSBmdW5jdGlvbi4KCShjcHBfc3RhcnRfcmVhZCk6IERvbid0IGNhbGwgaW5zdGFsbF9wcmVkZWZzLgoJKGNwcF9oYW5kbGVfb3B0aW9uKTogUmVtb3ZlIGNhc2UgJ3UnIGFuZCBhbGwgcmVmcyB0bwoJb3B0cy0+aW5oaWJpdF9wcmVkZWZzLgoJKHByaW50X2hlbHApOiBEb24ndCBtZW50aW9uIC11bmRlZi4KCShpbml0aWFsaXplX2J1aWx0aW5zKTogRGVmaW5lIF9fSEFWRV9CVUlMVElOX1NFVEpNUF9fLCB0bwoJbWF0Y2ggY2NjcC4KCSogY3BwbGliLmggKHN0cnVjdCBjcHBfb3B0aW9ucyk6IFJlbW92ZSBpbmhpYml0X3ByZWRlZnMKCW1lbWJlci4KCgkqIGNjY3AuYyAocHJlZGVmcyk6IERlbGV0ZSB2YXJpYWJsZS4KCShtYWluKTogUmVtb3ZlIGNhc2UgJ3UnIGluIGFyZ3VtZW50IHBhcnNlIGxvb3AsCgknaW5oaWJpdF9wcmVkZWZzJyB2YXJpYWJsZSwgYW5kIHRoZSBjb2RlIGJsb2NrIHRoYXQgd291bGQKCXByb2Nlc3MgQ1BQX1BSRURFRklORVMuCgkoaW5pdGlhbGl6ZV9idWlsdGlucyk6IERvbid0IGRlZmluZSBfX09CSkNfXywgdGhlIGRyaXZlciB3aWxsCglkbyB0aGF0LgoKCSogZ2NjLmMgKGRlZmF1bHRfY29tcGlsZXJzKTogUmVtb3ZlIC11bmRlZiBmcm9tIGFsbCBzcGVjcyB0aGF0CglpbnZva2UgYSBDIHByZXByb2Nlc3Nvci4KCSogY2gvbGFuZy1zcGVjcy5oOiBMaWtld2lzZS4KCSogY3AvbGFuZy1zcGVjcy5oOiBMaWtld2lzZS4KCSogZi9sYW5nLXNwZWNzLmg6IExpa2V3aXNlLgoJKiBvYmpjL2xhbmctc3BlY3MuaDogTGlrZXdpc2UuCgpNb24gQXByICA1IDExOjU1OjMxIDE5OTkgIERvbm4gVGVycnkgIChkb25uQGludGVyaXguY29tKQoKCSogTWFrZWZpbGUuaW4gKFNVQkRJUl9GTEFHU19UT19QQVNTKTogRml4IG1pc2FwcGxpZWQgcGF0Y2guCgpNb24gQXByICA1IDExOjUxOjM4IDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIG02OGsubWQgKG1vdmRmKTogSGlkZSBHUFIgc291cmNlcyAmIGRlc3RpbmF0aW9ucyBmcm9tIHJlZ2NsYXNzLgoKTW9uIEFwciAgNSAwOTo1NDo0MiAxOTk5ICBKZWZmIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogdmVyc2lvbi5jOiBCdW1wIGZvciBzbmFwc2hvdC4KCk1vbiBBcHIgIDUgMDU6NTU6MTUgMTk5OSAgQnJ1Y2UgS29yYiAgPGRkc2luYzA5QGl4Lm5ldGNvbS5jb20+CgoJKiBmaXhpbmNsLnRwbDogU2VwYXJhdGUgIi1lIiBmcm9tIGl0cyBhcmd1bWVudCwgYSBsYQoJdGhlIFNhdCBBcHIgIDMgMTc6MDU6MTMgMTk5OSBmaXguCgkqIGdlbmZpeGVzOiBFbnN1cmUgdGhhdCB0aGUgc2VydmVyIHNoZWxsIGlzIF9OT1RfIGNzaC4KCk1vbiBBcHIgIDUgMDM6NTI6MzAgMTk5OSAgSmVmZiBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHZlcnNpb24uYzogQnVtcCBmb3Igc25hcHNob3QuCgpNb24gQXByICA1IDA0OjQ3OjE0IDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGkzODYuYyAoeDg2X2RvdWJsZV93aXRoX2FkZCk6IFR1cm4gb2ZmIGZvciBQZW50aXVtIGFuZCBQUHJvLgoJKHNtYWxsX3NoaWZ0X29wZXJhbmQsIG91dHB1dF9hc2hsc2kzKTogTmV3IGZ1bmN0aW9ucy4KCSogaTM4Ni5oIChzbWFsbF9zaGlmdF9vcGVyYW5kLCBvdXRwdXRfYXNobHNpMyk6IERlY2xhcmUuCgkqIGkzODYubWQgKGFzaGxzaTMpOiBTaW1wbGlmeSBhaGxzaTMgcGF0dGVybnMuICBSZW1vdmUgc3BsaXR0ZXJzCgl0aGF0IGFyZSBubyBsb25nZXIgbmVlZGVkLgoKU3VuIEFwciAgNCAwNDowNTowNCAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBzdG10LmMgKGV4cGFuZF9sb29wX2VuZCk6IFdoZW4gY29weWluZyB0aGUgbG9vcCBleGl0IHRlc3QsCglkbyBub3Qgd2FsayBpbnRvIGEgbmVzdGVkIGxvb3AuCgpTdW4gQXByICA0IDAwOjE0OjU0IDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGZpeGluYy9oYWNrc2hlbGwudHBsOiBTa2lwIGxpbmtzIHRvIGRpcmVjdG9yaWVzLCB0byBhdm9pZAoJcmVtb3ZpbmcgdGhlbS4KCSogZml4aW5jL2luY2xoYWNrLnRwbDogTGlrZXdpc2UuCgkqIGZpeGluYy9maXhpbmMuc2gsIGZpeGluYy9maXhpbmNsLngsIGZpeGluYy9pbmNsaGFjay5zaDogUmVidWlsdC4KClNhdCBBcHIgIDMgMjM6NDY6MTMgMTk5OSAgRGF2aWQgRWRlbHNvaG4gIDxlZGVsc29obkBnbnUub3JnPgoKCSogcnM2MDAwLm1kIChhZGRzaTMsIGlvcnNpMywgeG9yc2kzLCBhZGRkaTMsIGlvcmRpMywgeG9yZGkzLAoJbW92c2lfZ290LCBtb3ZzaSwgbW92c2YpOiBVc2Ugbm9fbmV3X3BzZXVkb3MuCgkqIHJzNjAwMC5jIChyczYwMDBfZ290X3JlZ2lzdGVyKTogTGlrZXdpc2UuCgkob2Zmc2V0dGFibGVfbWVtX29wZXJlYW5kKTogVXNlIHx8IG5vdCB8LgoKU2F0IEFwciAgMyAyMjowMjo1NiAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBhY2NvbmZpZy5oIChFTkFCTEVfQ0hFQ0tJTkcpOiBSZW1vdmUgcmVkdW5kYW50ICN1bmRlZi4KCSogY29uZmlnLmluOiBSZWJ1aWx0LgoKU2F0IEFwciAgMyAxNjoyMjo1OSAxOTk5ICBUb3NoaXlhc3UgTW9yaXRhICAodG1AbmV0Y29tLmNvbSkKCgkqIGdjYy50ZXhpOiBBZGQgaW5mbyBvbiByZWdtb3ZlIHBhc3MuCgoJKiByZWdtb3ZlLmMgKGZpeHVwX21hdGNoXzEpOiBDb25zaXN0ZW50bHkgZXZhbHVhdGUKCUhBVkVfUE9TVF9JTkNSRU1FTlQgYW5kIEhBVkVfUE9TVF9ERUNSRU1FTlQuCgpTYXQgQXByICAzIDE5OjIxOjA1IDE5OTkgIEFsZXhhbmRyZSBPbGl2YSAgPG9saXZhQGRjYy51bmljYW1wLmJyPgoKCSogY29uZmlndXJlLmluIChERUZBVUxUX0xJTktFUiwgREVGQVVMVF9BU1NFTUJMRVIpOiBVc2UgZ3JlcAoJaW5zdGVhZCBvZiB0ZXN0IGFuZCBzZWQgdG8gY2hlY2sgd2hldGhlciB0aGV5J3JlIEdOVSBwcm9ncmFtcy4KCSogY29uZmlndXJlOiBSZWJ1aWx0LgoKU2F0IEFwciAgMyAxNzo1NzozNSAxOTk5ICBBbGV4YW5kcmUgT2xpdmEgIDxvbGl2YUBkY2MudW5pY2FtcC5icj4KCgkqIE1ha2VmaWxlLmluIChpbnN0YWxsLWhlYWRlcnMtdGFyLCBpbnN0YWxsLWhlYWRlcnMtY3Bpbyk6IEF2b2lkCglwcm9ibGVtcyB3aXRoIENEUEFUSC4KCVJlcG9ydGVkIGJ5IFJhbGYgQ2FuaXMgPGNhbmlzQGJpZ2Zvb3QuY29tPgoKU2F0IEFwciAgMyAxMzo1MDoxNiAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBmaXhpbmMueDg2LWxpbnV4LWdudTogRGVsZXRlZC4KClNhdCBBcHIgIDMgMTc6MDU6MTMgMTk5OSAgQWxleGFuZHJlIE9saXZhICA8b2xpdmFAZGNjLnVuaWNhbXAuYnI+CgoJKiBpbmNsaGFjay50cGw6IEluc2VydCBzcGFjZXMgYmV0d2VlbiBgc2VkIC1lJyBhbmQgJy4uLicuCglSZXBvcnRlZCBieSBLYXZlaCBSLiBHaGF6aSA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCSogZml4aW5jL2ZpeGluY2wuc2gsIGZpeGluYy9maXhpbmNsLngsIGZpeGluYy9pbmNsaGFjay5zaDogUmVnZW4uCgpTYXQgQXByICAzIDE0OjU0OjQ2IDE5OTkgIENyYWlnIEJ1cmxleSAgPGNyYWlnQGpjYi1zYy5jb20+CgoJKiB0cmVlLmRlZiAoQkxPQ0spOiBGaXggdHlwbyBpbiBjb21tZW50LgoKU2F0IEFwciAgMyAwMDo1MzoyOSAxOTk5ICBKb2huIFdlaGxlICAoam9obkBmZWl0aC5jb20pCgoJKiBpMzg2Lm1kIChmbG9hdHNpc2YyLCBmbG9hdGRpc2YyLCBmbG9hdHNpZGYyLCBmbG9hdGRpZGYyLAoJZmxvYXRzaXhmMiwgZmxvYXRkaXhmMik6IFJld3JpdGUgdXNpbmcgYSBzcGxpdHRlci4KCkZyaSBBcHIgIDIgMTc6MzY6MTAgMTk5OSAgTmljayBDbGlmdG9uICA8bmlja2NAY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy9hcm0vYXJtLmMgKGFybV9wcmludF9vcGVyYW5kKTogUHJpbnQgbGFyZ2UgY29uc3RhbnRzIGluCgloZXggcmF0aGVyIHRoYW4gZGVjaW1hbC4KCkZyaSBBcHIgIDIgMTc6MjM6NTggMTk5OSAgTmljayBDbGlmdG9uICA8bmlja2NAY3lnbnVzLmNvbT4KCgkqIHByaW50LXJ0bC5jIChwcmludF9ydHgpOiBVc2UgYm90aCBIT1NUX1dJREVfSU5UX1BSSU5UX0RFQwoJYW5kIEhPU1RfV0lERV9JTlRfUFJJTlRfSEVYIHRvIGRpc3BsYXkgY29uc3RhbnRzLgoKMTk5OS0wNC0wMiAgWmFjayBXZWluYmVyZyAgPHphY2tAcmFiaS5jb2x1bWJpYS5lZHU+CgoJKiBjb25maWcvaTM4Ni9pMzg2Lmg6IERvY3VtZW50IGFsbCBUQVJHRVRfU1dJVENIRVMgb3IgYWRkCglleHBsaWNpdCBudWxsIGluaXRpYWxpemVyLgoKCSogY29uZmlnL2kzODYvY3lnd2luLmg6IERvY3VtZW50IGFsbCBTVUJUQVJHRVRfU1dJVENIRVMuCgkqIGNvbmZpZy9pMzg2L2RndXguaDogTGlrZXdpc2UuCgkqIGNvbmZpZy9pMzg2L29zZjFlbGYuaDogTGlrZXdpc2UuCgkqIGNvbmZpZy9pMzg2L3dpbjMyLmg6IExpa2V3aXNlLgoJKiBjb25maWcvaTM4Ni9vc2Zyb3NlLmg6IExpa2V3aXNlLiAgRHJvcCBvYnNvbGV0ZSAtbW5vLWlkZW50IG9wdGlvbi4KCkZyaSBBcHIgIDIgMTc6NDk6NDQgMTk5OSAgVG9zaGl5YXN1IE1vcml0YSAgPHRtQG5ldGNvbS5jb20+CgoJKiByZWdtb3ZlLmMgKGZpeHVwX21hdGNoXzEpOiBSZW1vdmUgbm93IHVzZWxlc3MgaWYgKDApLgoKU2F0IEFwciAgMyAxMTozNzoyMCAxOTk5ICBNaWNoYWVsIEhheWVzICA8bS5oYXllc0BlbGVjLmNhbnRlcmJ1cnkuYWMubno+CgoJKiB0bS50ZXhpIChVU0VfTE9BRF9QT1NUX0RFQ1JFTUVOVCwgVVNFX0xPQURfUFJFX0RFQ1JFTUVOVCwKCVVTRV9TVE9SRV9QT1NUX0RFQ1JFTUVOVCwgVVNFX1NUT1JFX1BSRV9ERUNSRU1FTlQpOiBEb2N1bWVudC4KCShVU0VfTE9BRF9QT1NUX0lOQ1JFTUVOVCwgVVNFX0xPQURfUFJFX0lOQ1JFTUVOVCwKCVVTRV9TVE9SRV9QT1NUX0lOQ1JFTUVOVCwgVVNFX1NUT1JFX1BSRV9JTkNSRU1FTlQpOiBGaXggZG9jdW1lbnRhdGlvbi4KCgkqIHJ0bC5oCShVU0VfTE9BRF9QT1NUX0RFQ1JFTUVOVCwgVVNFX0xPQURfUFJFX0RFQ1JFTUVOVCwKCVVTRV9TVE9SRV9QT1NUX0RFQ1JFTUVOVCwgVVNFX1NUT1JFX1BSRV9ERUNSRU1FTlQsCglVU0VfTE9BRF9QT1NUX0lOQ1JFTUVOVCwgVVNFX0xPQURfUFJFX0lOQ1JFTUVOVCwKCVVTRV9TVE9SRV9QT1NUX0lOQ1JFTUVOVCwgVVNFX1NUT1JFX1BSRV9JTkNSRU1FTlQpOiBQcm92aWRlIGRlZmF1bHQKCWRlZmluaXRpb24uCgoJKiBleHByLmMgKFVTRV9MT0FEX1BPU1RfSU5DUkVNRU5ULCBVU0VfTE9BRF9QUkVfSU5DUkVNRU5ULAoJVVNFX1NUT1JFX1BPU1RfSU5DUkVNRU5ULCBVU0VfU1RPUkVfUFJFX0lOQ1JFTUVOVCk6IERlbGV0ZSBkZWZhdWx0CglkZWZpbml0aW9uLgoKRnJpIEFwciAgMiAxNjowMzowNSAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBmaXhpbmMuZGd1eCwgZml4aW5jLmludGVyaXgsIGZpeGluYy5pcml4LCBmaXhpbmMucHR4OiBEZWxldGVkLgoJKiBmaXhpbmMuc2NvLCBmaXhpbmMuc3ZyNCwgZml4aW5jLndpbm50LCBmaXhpbmMud3JhcDogTGlrZXdpc2UuCgpGcmkgQXByICAyIDE1OjQ2OjI1IDE5OTkgIERvbm4gVGVycnkgIChkb25uQGludGVyaXguY29tKQoKCSogY29uZmlndXJlLmluOiBTZXQgYW5kIHN1YnN0aXR1dGUgcXVvdGVkX2NjX3NldF9ieV9jb25maWd1cmUuCgkqIGNvbmZpZ3VyZTogUmVidWlsdC4KCSogTWFrZWZpbGUuaW4gKFNVQkRJUl9GTEFHU19UT19QQVNTKTogRml4IHF1b3RpbmcgcHJvYmxlbSB3aXRoIGBgLgoKRnJpIEFwciAgMiAxNDozNTo0NSAxOTk5ICBTdGFuIENveCAgPHNjb3hAY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy9pMzg2L2N5Z3dpbi5oIChDUFBfU1BFQyk6IFVzZSBtaW5nd19pbmNsdWRlX3BhdGggaW5zdGVhZAoJb2YgYSBoYXJkY29kZWQgcGF0aCBmb3IgLW1uby1jeWd3aW4uCgkobWluZ3dfaW5jbHVkZV9wYXRoKTogTmV3LgoKMTk5OS0wNC0wMiAgSm9zZXBoIFMuIE15ZXJzICA8anNtMjhAY2FtLmFjLnVrPgoKCSogcGRwMTEuYzogSW5jbHVkZSAicmVjb2cuaCIuCgkob3V0cHV0X2Z1bmN0aW9uX3Byb2xvZ3VlKTogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZXMgYG5yZWdzJywgYGknLAoJYG9mZnNldCcuCgkob3V0cHV0X2Z1bmN0aW9uX2VwaWxvZ3VlKTogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZXMKCWBtYXlfY2FsbF9hbGxvY2EnLCBgbnJlZ3MnLCBgcmVnbm8nLCBgYWRqdXN0X2ZwJy4KCShvdXRwdXRfYXNjaWkpOiBNYXJrIGFzIHJldHVybmluZyB2b2lkLgoJKHByaW50X29wZXJhbmRfYWRkcmVzczogTGlrZXdpc2UuCgkoc2ltcGxlX21lbW9yeV9vcGVyYW5kKTogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZXMgYHBsdXMwJywgYHBsdXMxJywKCWBvZmZzZXQnLgoJKiBwZHAxMS5oOiBEZWNsYXJlIGZ1bmN0aW9ucyBgYXJpdGhfb3BlcmFuZCcsCglgY29uc3RfaW1tZWRpYXRlX29wZXJhbmQnLCBgZXhwYW5kX3NoaWZ0X29wZXJhbmQnLAoJYGxlZ2l0aW1hdGVfYWRkcmVzc19wJywgYG5vdGljZV91cGRhdGVfY2Nfb25fc2V0JywgYG91dHB1dF9hc2NpaScsCglgb3V0cHV0X2Z1bmN0aW9uX2VwaWxvZ3VlJywgYG91dHB1dF9mdW5jdGlvbl9wcm9sb2d1ZScsCglgcHJpbnRfb3BlcmFuZF9hZGRyZXNzJywgYHJlZ2lzdGVyX21vdmVfY29zdCcsCglgc2ltcGxlX21lbW9yeV9vcGVyYW5kJy4KCShIQVJEX1JFR05PX01PREVfT0spOiBQYXJlbnRoZXNpemUgYFJFR05PJyBhcmcuCgkoUkVHTk9fUkVHX0NMQVNTKTogTGlrZXdpc2UuCgkqIHBkcDExLm1kOiBBZGQgZXhwbGljaXQgYGludCcgdG8gYHN0YXRpYyBjb3VudCcgKGluIHR3byBwbGFjZXMpLgoJKGFkZGhpMyk6IEFkZCBleHBsaWNpdCBicmFjZXMgdG8gYXZvaWQgYW1iaWd1b3VzIGVsc2UuCgkoYWRkcWkzKTogTGlrZXdpc2UuCgkoYXNobGhpMyk6IExpa2V3aXNlLgoKRnJpIEFwciAgMiAxNDoxNzoxMCAxOTk5ICBKZXJyeSBKYW1lcyAgPGplcnJ5QGNzLnVjc2IuZWR1PgoKCSogZ2NjL2ludm9rZS50ZXhpOiBBZGQgZG9jdW1lbnRhdGlvbiBmb3IgYWRkaXRpb25hbCBzdXBwb3J0ZWQKCU1JUFMgQ1BVIHR5cGVzLCBvcHRpb25zIC1taXBzMTYgYW5kIC1tZW50cnksIGFuZCBBQkkgYW5kIElTQQoJZGVmYXVsdHMuCgpGcmkgQXByICAyIDE0OjEyOjA2IDE5OTkgIEpvaG4gV2VobGUgIChqb2huQGZlaXRoLmNvbSkKCgkqIGkzODYubWQ6IERlbGV0ZSBmbG9hdGluZyBwb2ludCBjb21wYXJlLCBhZGQsIHN1YnRyYWN0LAoJbXVsdGlwbHksIGFuZCBkaXZpZGUgcGF0dGVybnMgd2hpY2ggYWxsb3dlZCBpbnRlZ2VyCglvcGVyYW5kcy4KCSogaTM4Ni5jIChvdXRwdXRfMzg3X2JpbmFyeV9vcCk6IERlbGV0ZSB1bnVzZWQgY29kZS4KCShvdXRwdXRfZmxvYXRfY29tcGFyZSk6IExpa2V3aXNlLgoKRnJpIEFwciAgMiAxMTo1MzozNyAxOTk5ICBKb2huIFdlaGxlICAoam9obkBmZWl0aC5jb20pCgoJKiBpMzg2Lm1kIChtb3ZzZisxLCBtb3ZkZisxLCBtb3Z4ZisxKTogVXBkYXRlIGNvbnN0cmFpbnRzCglzbyB0aGF0IFNFQ09OREFSWV9NRU1PUllfUkVMT0FEIGlzIHVzZWQuICBSZW1vdmUgZGVhZCBjb2RlLgoKMTk5OS0wNC0wMiAgQnJ1Y2UgS29yYiAgPGRkc2luYzA5QGl4Lm5ldGNvbS5jb20+CgoJKiBmaXhpbmMvbWtmaXhpbmMuc2g6IEFkZGVkIHN1cHBvcnQgZm9yIHg4Ni1pbnRlcml4LgoJKiBmaXhpbmMvZml4aW5jLmludGVyaXg6IEZpeGluY2x1ZGVzIHNjcmlwdCwgc2xpZ2h0IGNoYW5nZXMKCWZyb20gLi9maXhpbmMuaW50ZXJpeC4gIFVudGVzdGVkIChuZWVkcyBpbnRlcml4IGJveCkuCgkqIGZpeGluYy9pbmNsaGFjay5kZWY6CglDb21wbGV0ZSB0aGUgY2hhbmdlIHRvIHRoZSAnZml4aW5jLnRtcCcgZmlsZS4KCUZpeGVkIHJlZ2V4IGZvciBmaW5kaW5nIEMrKyBoZWFkZXJzLgoJKiBmaXhpbmNsLngsIGZpeGluY2wuc2gsIGluY2xoYWNrLnNoOiBSZWdlbmVyYXRlLgoKRnJpIEFwciAgMiAxMTozNjoxMiAxOTk5ICBKYW4gSHViaWNrYSAgKGh1Ymlja2FAcGFydS5jYXMuY3opCgoJKiBpMzg2LmMgKHByaW50X29wZXJhbmRfYWRkcmVzcywgY2FzZSBSRUcpOiBEbyBub3QgdXNlIEVTSSBhZGRyZXNzaW5nCgltb2RlIGZvciB0aGUgSzYuCgoJKiBpMzg2LmMgKHByaW50X29wZXJhbmRfYWRkcmVzcywgY2FzZSBNVUxUKTogVXNlIG1vcmUgZWZmaWNpZW50CgllbmNvZGluZyAobXVsdCAocmVnKSAoY29uc3RfaW50IDIpKS4KClRodSBBcHIgIDEgMTc6MDE6NTAgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCglNb3ZlIG92ZXIgcGF0Y2ggZnJvbSBCZXJuZCBTY2htaWR0IGZyb20gR0MgYnJhbmNoOgoJKiBlbWl0LXJ0bC5jIChnZW5fcnR4X0NPTlNUX0RPVUJMRSk6IE5ldyBmdW5jdGlvbi4KCShnZW5fcnR4KTogQ2FsbCBpdC4gIFRpZHkgY2FzZXMuCgkqIHJ0bC5oIChnZW5fcnR4X0NPTlNUX0RPVUJMRSk6IFByb3RvdHlwZSBpdC4KCSogZ2VuZ2VucnRsLmM6IEFkZCBjb21tZW50YXJ5LgoJKHNwZWNpYWxfcnR4KTogQWxzbyBtYXRjaCBDT05TVF9ET1VCTEUuCgkoZ2VuY29kZSk6IEVtaXQgY2FsbCB0byBtZW1zZXQgaW5zdGVhZCBvZiBiemVyby4KCkZyaSBBcHIgIDIgMTI6NTg6MjYgMTk5OSAgTWljaGFlbCBIYXllcyAgPG0uaGF5ZXNAZWxlYy5jYW50ZXJidXJ5LmFjLm56PgoKCSogY29uZmlnL2M0eC9jNHgubWQgKGFzaGxoaTMsIGxzaHJoaTMsIGFzaHJoaTMpOiBGb3JjZSBvcGVyYW5kIDEKCWludG8gYSByZWdpc3RlciBpZiBzaGlmdCBjb3VudCBub3QgY29uc3RhbnQuCgkoYXNobGhpM19yZWcsIGxzaHJoaTNfcmVnLCBhc2hyaGkzX3JlZyk6IEVuc3VyZSB0aGF0IG9wZXJhbmQgMQoJaXMgYSByZWdpc3Rlci4KCkZyaSBBcHIgIDIgMTI6MTk6MTcgMTk5OSAgTWljaGFlbCBIYXllcyAgPG0uaGF5ZXNAZWxlYy5jYW50ZXJidXJ5LmFjLm56PgoKCSogY29uZmlnL2M0eC9jNHgubWQgKCpkYik6IEVuYWJsZSBwYXR0ZXJuIGlmIFRBUkdFVF9MT09QX1VOU0lHTkVECglpcyBub256ZXJvLgoJKG1vdnN0cnFpX3NtYWxsLCBtb3ZzdHJxaV9sYXJnZSwgKmNtcHN0cnFpKTogQWRkICsgbW9kaWZpZXIgdG8gYWRkcmVzcwoJcmVnaXN0ZXIgY29uc3RyYWludHMuCgkoKm1vdmhpX2Nsb2JiZXIrMSk6IE1vZGlmeSBzcGxpdHRlciBwYXR0ZXJuIHRvIGhhbmRsZSBkZXN0aW5hdGlvbgoJcmVnaXN0ZXIgdGhhdCBpcyB1c2VkIGluIHRoZSBzb3VyY2UgYWRkcmVzcy4KCSgqeG9yaGkzX2Nsb2JiZXIpOiBSZXBsYWNlIEFORCB3aXRoIFhPUiBpbiBjYWxsIHRvIGxlZ2l0aW1pemVfb3BlcmFuZHMuCgpGcmkgQXByICAyIDEyOjE2OjE1IDE5OTkgIE1pY2hhZWwgSGF5ZXMgIDxtLmhheWVzQGVsZWMuY2FudGVyYnVyeS5hYy5uej4KCgkqIGNvbmZpZy9jNHgvYzR4Lmg6IEFkZGVkIG1vcmUgY29tbWVudHMuCgpGcmkgQXByICAyIDExOjU4OjIyIDE5OTkgIE1pY2hhZWwgSGF5ZXMgIDxtLmhheWVzQGVsZWMuY2FudGVyYnVyeS5hYy5uej4KCgkqIGNvbmZpZy9jNHgvYzR4LmMgKGM0eF9lbWl0X21vdmVfc2VxdWVuY2UpOiBGb3JjZSBpbnZhbGlkIFFJbW9kZQoJY29uc3RhbnRzIGludG8gbWVtb3J5IGlmIHdlIGdldCBjYWxsZWQgZGlyZWN0bHkgZnJvbSBnZW5fbW92ZV9pbnNuCglyYXRoZXIgdGhhbiBlbWl0X21vdmVfaW5zbi4KCShjNHhfbGVnaXRpbWl6ZV9hZGRyZXNzKTogRml4IHVwIExBQkVMX1JFRiBhZGRyZXNzZXMuCgpUaHUgQXByICAxIDEyOjA0OjA1IDE5OTkgIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KCgkqIGV4cHIuYyAoc3RvcmVfZmllbGQpOiBXaGVuIGNoZWNrIGRpcmVjdF9zdG9yZSwgYXNzdW1lIGFsbCBjb21wbGV4Cgltb2RlcyBjYW4gYmUgZGlyZWN0bHkgc3RvcmVkLgoKMTk5OS0wNC0wMSAgQnJ1Y2UgS29yYiAgPGRkc2luYzA5QGl4Lm5ldGNvbS5jb20+CgoJKiBmaXhpbmMvZ2VuZml4ZXM6IE5ldyBzaGVsbCBzY3JpcHQgdGhhdCBydW5zIGF1dG9nZW4KCXRvIGNyZWF0ZSB0aGUgZ2VuZXJhdGVkIGZpbGVzLgoKMTk5OS0wNC0wMSAgTWFuZnJlZCBIb2xsc3RlaW4gIDxtYW5mcmVkQHMtZGlyZWt0bmV0LmRlPgoKCSogTWFrZWZpbGUuaW4gKGNwcG1haW4kKGV4ZWV4dCkpOiBEZXBlbmQgb24gaW50bC5vLiAgTGluayBpbiBpbnRsLm8uCgpUaHUgQXByICAxIDAzOjQ4OjM0IDE5OTkgIEguSi4gTHUgIChoamxAZ251Lm9yZykKCgkqIGkzODYuYyAob3V0cHV0X2ZwX2NvbmRpdGlvbmFsX21vdmUpOiBBYm9ydCBmb3IgTFQsIExFLCBHRSwgYW5kIEdUCglzaWduZWQgaW50ZWdlciBjb21wYXJpc29ucy4KCgkqIGkzODYuYyAob3V0cHV0X2ludF9jb25kaXRpb25hbF9tb3ZlKTogVXNlICJlbnVtIHJ0eF9jb2RlIiBmb3IgY29kZQoJdHlwZS4KCgkqIGkzODYuYyAobm90aWNlX3VwZGF0ZV9jYyk6IE5vIG5lZWQgdG8gY2hlY2sgdGhlIElOVCBtb2RlIGZvcgoJY29uZGl0aW9uYWwgbW92ZXMgc2luY2UgRkxPQVQgY29uZGl0aW9uYWwgbW92ZXMgZG9uJ3QgYWZmZWN0IGNjMC4KClRodSBBcHIgIDEgMDI6MTc6MTggMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogZml4aW5jL2luY2xoYWNrLmRlZiAoenp6X2tpX3N5c2NhbGxzLCB6enpfdGltZSk6IEZpeCB0cmlnZ2VyCglzdHJpbmcgdG8gb25seSBtYXRjaCBvbiBocHV4MTEuCgkqIGZpeGluYy9maXhpbmNsLngsIGZpeGluYy9pbmNsaGFjay5zaCwgZml4aW5jL2ZpeGluYy5zaDogUmVidWlsdC4KClRodSBBcHIgIDEgMDE6MDk6MjcgMTk5OSAgQWxleGFuZHJlIE9saXZhICA8b2xpdmFAZGNjLnVuaWNhbXAuYnI+CgoJKiBmaXhpbmMvaGFja3NoZWxsLnRwbDogQ29tcGxldGUgdHJhbnNpdGlvbiB0byBmaXhpbmMudG1wLgoJKiBmaXhpbmMvaW5jbGhhY2suc2g6IFJlYnVpbHQuCgoJKiBmaXhpbmMvaW5jbGhhY2suZGVmOiBGaXggdHlwb3MgaW4gY19hc20uaCBmaXguCgkqIGZpeGluYy9maXhpbmNsLngsIGZpeGluYy9pbmNsaGFjay5zaCwgZml4aW5jL2ZpeGluYy5zaDogUmVidWlsdC4KCldlZCBNYXIgMzEgMTc6MjA6MTEgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogdG9wbGV2LmMgKHJlc3Rfb2ZfY29tcGlsYXRpb24pOiBBbGxvdyBkYnJfc2NoZWR1bGUgdG8gd3JpdGUgdG8KCXRoZSBkdW1wIGZpbGUgdG9vLgoKV2VkIE1hciAzMSAxMjozMjo0MyAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogZmxvdy5jIChmaW5kX2Jhc2ljX2Jsb2Nrcyk6IE5ldyBhcmd1bWVudCBgZG9fY2xlYW51cCcuCglDb25kaXRpb25hbGx5IGNhbGwgZGVsZXRlX3VucmVhY2hhYmxlX2Jsb2Nrcy4KCShmcmVlX2Jhc2ljX2Jsb2NrX3ZhcnMpOiBaZXJvIEVOVFJZL0VYSVQgZGF0YS4KCShhbGxvY2F0ZV9mb3JfbGlmZV9hbmFseXNpcyk6IEtpbGwuICBTcGxpdCBpbnRvLi4uCgkoYWxsb2NhdGVfYmJfbGlmZV9kYXRhLCBhbGxvY2F0ZV9yZWdfbGlmZV9kYXRhKTogLi4uIG5ldyBmdW5jdGlvbnMuCgkobGlmZV9hbmFseXNpc18xKTogVXBkYXRlLgoJKiBnY3NlLmMgKGdjc2VfbWFpbik6IFVwZGF0ZSBmaW5kX2Jhc2ljX2Jsb2NrcyBjYWxsLgoJKiB0b3BsZXYuYyAocmVzdF9vZl9jb21waWxhdGlvbik6IExpa2V3aXNlLgoJKiBzdHVwaWQuYyAoc3R1cGlkX2xpZmVfYW5hbHlzaXMpOiBVcGRhdGUgbGlmZSBkYXRhIGNhbGxzLgoJKiBydGwuaCwgb3V0cHV0Lmg6IFVwZGF0ZSBwcm90b3R5cGVzLgoKV2VkIE1hciAzMSAxMjoxMDowMCAxOTk5ICBCcnVjZSBLb3JiICA8ZGRzaW5jMDlAaXgubmV0Y29tLmNvbT4KCgkqIGluY2xoYWNrLmRlZiAoc2V2ZXJhbCk6IEFkZGVkIHNwYWNlcyBpbiB0ZXN0cyB0byBlbnN1cmUKCWNvcnJlY3Qgc2hlbGwgc3ludGF4LiAgQWRkZWQgY19hc20uaCBmaXggZnJvbSBmaXhpbmNsdWRlcy4KCUFsc28gY29ycmVjdGVkIHRoZSBjb3JyZWN0ZWQgZml4IHRvIEMrKyBjb21tZW50cyA6LX0KCgkqIGluY2xoYWNrLnRwbDogQ2hhbmdlZCBtZXRob2Qgb2YgdHJhdmVyc2luZyBzeW1saW5rIHRyZWVzCglzbyB0aGF0IGZpbGUgbmFtZSBtYXRjaGluZyB3aWxsIHdvcmsgY29ycmVjdGx5LgoKCSogZml4aW5jbC5jLCBoYWNrc2hlbGwudHBsOiBGYWxsb3V0IGZyb20gYWJvdmUuCgkqIGZpeGluY2wueCwgaW5jbGhhY2suc2gsIGZpeGluY2wuc2g6IFJlYnVpbHQuCgpUdWUgTWFyIDMwIDEwOjQzOjQ5IDE5OTkgIFBoaWxpcCBCbHVuZGVsbCAgPHBiQG5leHVzLmNvLnVrPgoKCSogY29uZmlnL2FybS9hb3V0LmggKERCWF9ERUJVR0dJTkdfSU5GTyk6IEF2b2lkIHJlZGVmaW5pdGlvbiBpZgoJZGJ4ZWxmLmggd2FzIHByZXZpb3VzbHkgaW5jbHVkZWQuCgkoQ1BQX0FQQ1NfUENfREVGQVVMVF9TUEVDKTogTm8gbmVlZCB0byB1bmRlZmluZS4KCgkqIGNvbmZpZy9hcm0vbGludXgtZWxmLmggKEZQX0RFRkFVTFQpOiBDb3JyZWN0bHkgb3ZlcnJpZGUgdGhlCglkZWZpbml0aW9uIGZyb20gYXJtLmguCgpXZWQgTWFyIDMxIDEwOjMzOjM3IDE5OTkgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIE1ha2VmaWxlLmluIChjLWdwZXJmLmgpOiBHZW5lcmF0ZSB1c2luZyBncGVyZiBsYW5ndWFnZSAnQycsIG5vdAoJJ0tSLUMnLCBzbyBncGVyZiB1c2VzIHRoZSBgY29uc3QnIGtleXdvcmQgb24gc3RyaW5ncy4KCgkqIGMtcGFyc2UuZ3BlcmYgKHJlc3dvcmQpOiBDb25zdC1pZnkgYSBjaGFyKi4KCldlZCBNYXIgMzEgMDE6NDk6MzEgMTk5OSAgSWFuIExhbmNlIFRheWxvciAgPGlhbkB6ZW1idS5jb20+CgoJKiB0LXJ0ZW1zIChMSU1JVFNfSF9URVNULCBMSUJHQ0MyX0lOQ0xVREVTKTogRGVmaW5lLgoKV2VkIE1hciAzMSAwMDo1MDo0OCAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBzeXN0ZW0uaCAoU1RERVJSX0ZJTEVOTyk6IEZpeCB0eXBvLgoKCSogaW5jbGhhY2suZGVmIChib29sKTogQWxzbyBmaXggYm9ndXMgYm9vbCBpbiBjdXJzZXNfY29sci9jdXJzZXMuaC4KCSogZml4aW5jbC54LCBpbmNsaGFjay5zaCwgZml4aW5jbC5zaDogUmVidWlsdC4KClR1ZSBNYXIgMzAgMjA6NTE6NDAgMTk5OSAgTWFyayBNaXRjaGVsbCAgPG1hcmtAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIGFsaWFzLmMgKGFsaWFzX3NldF9jb21wYXJlKTogUmVtb3ZlLgoJKHJlY29yZF9hbGlhc19zdWJzZXQpOiBVc2Ugc3BsYXlfdHJlZV9jb21wYXJlX2ludHMgaW5zdGVhZCBvZgoJYWxpYXNfc2V0X2NvbXBhcmUuCgkoaW5pdF9hbGlhc19vbmNlKTogTGlrZXdpc2UuCgkqIGNzZS5jOiBJbmNsdWRlIHNwbGF5LXRyZWUuaC4KCShyZWdfcXR5KTogUmVtb3ZlLgoJKHJlZ190aWNrKTogTGlrZXdpc2UuCgkocmVnX3RhYmxlKTogTGlrZXdpc2UuCgkoY3NlX3JlZ19pbmZvKTogTmV3IHN0cnVjdHVyZS4KCShjc2VfcmVnX2luZm9fZnJlZV9saXN0KTogTmV3IHZhcmlhYmxlLgoJKGNzZV9yZWdfaW5mb190cmVlKTogTGlrZXdpc2UuCgkoY2FjaGVkX3JlZ25vKTogTGlrZXdpc2UuCgkoY2FjaGVkX2NzZV9yZWdfaW5mbyk6IExpa2V3aXNlLgoJKGFsbF9taW51c19vbmUpOiBSZW1vdmUuCgkoY29uc2VjX2ludHMpOiBMaWtld2lzZS4KCShHRVRfQ1NFX1JFR19JTkZPKTogTmV3IG1hY3JvLgoJKFJFR19USUNLKTogTGlrZXdpc2UuICBVc2UgdGhyb3VnaG91dCBpbnN0ZWFkIG9mIHJlZ190aWNrLgoJKFJFR19JTl9UQUJMRSk6IExpa2V3aXNlLiAgVXNlIHRocm91Z2hvdXQgaW5zdGVhZCBvZiByZWdfaW5fdGFibGUuCgkoUkVHX1FUWSk6IExpa2V3aXNlLiAgVXNlIHRocm91Z2hvdXQgaW5zdGVhZCBvZiByZWdfcXR5LgoJKGdldF9jc2VfcmVnX2luZm8pOiBOZXcgZnVuY3Rpb24uCgkoZnJlZV9jc2VfcmVnX2luZm8pOiBMaWtld2lzZS4KCShuZXdfYmFzaWNfYmxvY2spOiBSZWluaXRpYWxpemUgY3NlX3JlZ19pbmZvX3RyZWUgaW5zdGVhZCBvZgoJcmVnX3RpY2ssIGFsbF9taW51c19vbmUsIGFuZCBjb25zZWNfaW50cy4KCSogTWFrZWZpbGUuaW4gKGNzZS5vKTogRGVwZW5kIG9uIHNwbGF5LXRyZWUuaAoKVHVlIE1hciAzMCAxMzoxOTozNiAxOTk5ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBsaWJnY2MyLmMgKHRocm93X2hlbHBlcik6IEp1c3QgcmV0dXJuIHRoZSBTUCBvZmZzZXQsIHJhdGhlciB0aGFuCglhIHdob2xlIHVkYXRhLiAgSW5jbHVkZSBhcmdzX3NpemUgaW4gdGhlIG9mZnNldC4KCShfX3Rocm93LCBfX3JldGhyb3cpOiBBZGp1c3QuCgpUdWUgTWFyIDMwIDExOjM5OjI3IDE5OTkgIENyYWlnIEJ1cmxleSAgPGNyYWlnQGpjYi1zYy5jb20+CgoJKiBleHRlbmQudGV4aSAoRXh0ZW5kZWQgQXNtKTogRGVsZXRlIHNwdXJpb3VzIGBiJyBiZWZvcmUKCWBAZW5kIGV4YW1wbGUnLCB3aGljaCB3YXMgY29uZnVzaW5nIHRleGkyaHRtbC4KClR1ZSBNYXIgMzAgMDA6MjY6MzQgMTk5OSAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZHdhcmYyb3V0LmMgKG91dHB1dF9saW5lX2luZm8pOiBEb24ndCBlbWl0IHJlZHVuZGFudCBpbmZvLgoJRG8gc3RhcnQgYSBuZXcgcm93IGlmIHRoZSBmaWxlIGNoYW5nZXMgYW5kIHRoZSBsaW5lICMgZG9lc24ndC4KCk1vbiBNYXIgMjkgMTU6NDg6MzkgMTk5OSAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogaW52b2tlLnRleGkgKEludm9raW5nIEcrKywgQysrIERpYWxlY3QgT3B0aW9ucyk6IFVwZGF0ZS4KCk1vbiBNYXIgMjkgMTU6MDU6MzkgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGV4Y2VwdC5jIChzdGFydF9keW5hbWljX2hhbmRsZXIpOiBGb3JjZSBqbXBfYnVmIGFkZHJlc3MgdG8KCWFuZCBvcGVyYW5kIGJlZm9yZSBtb3ZpbmcgdG8gbWVtb3J5LgoKTW9uIE1hciAyOSAxNToxMToxMCAxOTk5ICBDcmFpZyBCdXJsZXkgIDxjcmFpZ0BqY2Itc2MuY29tPgoKCSogaW52b2tlLnRleGkgKENvZGUgR2VuIE9wdGlvbnMpOiBBdHRlbXB0IHRvIGNsYXJpZnkKCS1mY2hlY2stbWVtb3J5LXVzYWdlLiAgTWlub3IgZWRpdHMgdG8gLWZwcmVmaXgtZnVuY3Rpb24tbmFtZS4KCk1vbiBNYXIgMjkgMjA6NTI6NDcgMTk5OSAgSiJvcm4gUmVubmVja2UgIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIGxvb3AuYyAobWF5YmVfZWxpbWluYXRlX2Jpdik6IEZvciBsaWJjYWxscyB0aGF0IHNldCBhIGdpdiwgc2tpcCB0bwoJZW5kIG9mIGxpYmNhbGwuCgpNb24gTWFyIDI5IDIwOjM1OjQ5IDE5OTkgIEoib3JuIFJlbm5lY2tlICA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiBzaC5tZCAobXVsc2kzKTogVGFnIGFuIGV4dHJhIFJFR19FUVVBTCBub3RlIHRvIHRoZSBtaWRkbGUgaW5zbi4KCk1vbiBNYXIgMjkgMTE6NTA6MzQgMTk5OSAgSmVycnkgUXVpbm4gIDxqcXVpbm5Abm9ydGVsbmV0d29ya3MuY29tPgoKCSogcGEuaCAoSEFWRV9QUkVfSU5DUkVNRU5UKTogRGlzYWJsZSB3aGVuIG9wdGltaXppbmcgZm9yIGEgUEE4MDAwCgljbGFzcyBtYWNoaW5lLgoJKEhBVkVfUFJFX0RFQ1JFTUVOVCwgSEFWRV9QT1NUX0lOQ1JFTUVOVCk6IExpa2V3aXNlLgoJKEhBVkVfUE9TVF9ERUNSRU1FTlQpOiBMaWtld2lzZS4KCk1vbiBNYXIgMjkgMDg6MjQ6NDMgMTk5OSAgQnJ1Y2UgS29yYiAgPGtvcmJAZGF0YWRlc2lnbi5jb20+CgoJKiBmaXhpbmMvbWtmaXhpbmMuc2g6IEZpeCBwb3J0YWJpbGl0eSBwcm9ibGVtcyB3aXRoIG9sZCBzaGVsbHMuCgoJKiBmaXhpbmMvUkVBRE1FOiBVcGRhdGVkIGZvciByZWxlYXNlIGFubm91bmNlbWVudAoKU3VuIE1hciAyOCAyMDoyNjo1NSAxOTk5ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiByZWNvZy5oIChpbnNuX291dGZ1biwgaW5zbl9vcGVyYW5kX3ByZWRpY2F0ZSk6IEFkZCBwcm90b3R5cGUKCWFyZ3VtZW50cy4KCgkqIHJ0bC5oIChub3RlX3N0b3Jlcyk6IExpa2V3aXNlLgoKCSogcnRsYW5hbC5jIChub3RlX3N0b3Jlcyk6IExpa2V3aXNlLgoKU3VuIE1hciAyOCAxNTozNDoyOCAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogdmFyYXNtLmMgKG91dHB1dF9jb25zdGFudF9wb29sKTogQWx3YXlzIG1hcmsgdGhlIGNvbnN0YW50IHBvb2wuCgpTdW4gTWFyIDI4IDE2OjA5OjAxIDE5OTkgIEplcnJ5IFF1aW5uICA8anF1aW5uQG5vcnRlbG5ldHdvcmtzLmNvbT4KCgkqIHBhLm1kIChwYTcxMDBMQ3NoaWZ0bWVtLCBwYTcxMDBMQ2FsdSk6IENoYW5nZSBzaW11bHRhbmVpdHkuICBVc2UKCXNoaWZ0L21lbSBvcHMgaW4gcGE3MTAwTENhbHUuCgoJKiBwYS5jIChwYV9hZGp1c3RfY29zdCk6IERvbid0IGRvIGNvc3QgYWRqdXN0bWVudHMgb24gcGE4MDAwLgoJKHBhX3Jlb3JnKTogRG9uJ3QgY2FsbCBwYV9jb21iaW5lX2luc3RydWN0aW9ucyBvbiBwYTgwMDAuCgpTdW4gTWFyIDI4IDE1OjI3OjI2IDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHJlbG9hZDEuYyAocmVsb2FkKTogUmVtb3ZlIGFjY2lkZW50YWwgY29kZSBkdXBsaWNhdGlvbi4KClN1biBNYXIgMjggMTI6MjI6MTIgMTk5OSAgUm9iZXJ0IExpcGUgIChyb2JlcnRsaXBlQHVzYS5uZXQpCgoJKiBpMzg2L3N5c3Y1Lmg6IE5ldyBmaWxlIHRvIGRlc2NyaWJlIFVuaXhXYXJlNy9TVlI1LgoJKiBjb25maWd1cmUuaW4gKGk/ODYtVW5peFdhcmU3Ki1zeXN2KTogVXNlIGl0LgoJKiBpMzg2L3Vkay5oOiBVc2Ugc3lzdjUuaC4gIE5vdyB1c2VzIER3YXJmLTIuCgpTdW4gTWFyIDI4IDAxOjE1OjA0IDE5OTkgIEplZmYgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiB2ZXJzaW9uLmM6IEJ1bXAgZm9yIHNuYXBzaG90LgoKU3VuIE1hciAyOCAwMDo0NDoyNyAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBzZGJvdXQuYyAoc2Rib3V0X3N5bWJvbCk6IERvIG5vdCBjYWxsIGJ1aWxkX3BvaW50ZXJfdHlwZSwgYnVpbGQKCW9uZSBvbiB0aGUgZmx5IGFuZCBkbyBub3QgY2FjaGUgdGhlIHJlc3VsdC4KCgkqIGdjYy5jcHMsIGNwcC5jcHM6IERlbGV0ZSB1bndhbnRlZCBmaWxlcy4KClNhdCBNYXIgMjcgMjM6Mzc6NDAgMTk5OSAgSm9obiBXZWhsZSAgKGpvaG5AZmVpdGguY29tKQoKCSogaTM4Ni5tZCAobW92ZGljYyszLCBtb3ZkaWNjKzQpOiBSZXdyaXRlIHVzaW5nIHNwbGl0X2RpLgoJKiBpMzg2LmMgKG91dHB1dF9pbnRfY29uZGl0aW9uYWxfbW92ZSk6IERlbGV0ZSB1bnVzZWQgY29kZS4KClNhdCBNYXIgMjcgMjE6MTc6MzYgMTk5OSAgRGF2aWQgRWRlbHNvaG4gIDxlZGVsc29obkBnbnUub3JnPgoKCSogcnM2MDAwL3thaXg0MS5oLGFpeDQzLmh9IChBU01fQ1BVX1NQRUMpOiBBZGQgNjA0ZS4KClNhdCBNYXIgMjcgMTY6MTM6NTAgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogZmxvdy5jIChtYXJrX3VzZWRfcmVncyk6IEltcHJvdmUgaGFuZGxpbmcgb2YgQVNNcy4KCjE5OTktMDMtMjYgIFphY2sgV2VpbmJlcmcgIDx6YWNrQHJhYmkuY29sdW1iaWEuZWR1PgoKCSogTWFrZWZpbGUuaW4gKHhjcHAsIGNwcHNwZWMubyk6IE5ldyB0YXJnZXRzLgoJKENQUF9JTlNUQUxMX05BTUUpOiBOZXcgbWFjcm8uCgkoaW5zdGFsbC1jcHApOiBJbnN0YWxsIHhjcHAuICBVc2UgQ1BQX0lOU1RBTExfTkFNRS4KCShhbGwuYnVpbGQsIHN0YXJ0LmVuY2FwKTogQnVpbGQgeGNwcC4KCgkqIGNwcHNwZWMuYzogTmV3IGZpbGUsIGltcGxlbWVudHMgYXJndW1lbnQgZmlsdGVyaW5nIGZvciBhCgl1c2VyLXZpc2libGUgQyBwcmVwcm9jZXNzb3IuCgkqIGNwcC5zaDogUmVtb3ZlZC4KCkZyaSBNYXIgMjYgMjA6NDE6NDYgMTk5OSAgSmltIFdpbHNvbiAgPHdpbHNvbkBjeWdudXMuY29tPgoKCSogTWFrZWZpbGUuaW4gKHN0bXAtZml4aW5jKTogVXNlIHRvb2xkaXIgaW5zdGVhZCBvZiBnY2NfdG9vbGRpci4KCkZyaSBNYXIgMjYgMTY6MDI6MzcgMTk5OSAgTmljayBDbGlmdG9uICA8bmlja2NAY3lnbnVzLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbiAoYXJtLSotdnh3b3JrcyopOiBKdXN0IGluY2x1ZGUgYXJtL3Z4YXJtLmguCgkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KCSogY29uZmlnL2FybS92eGFybS5oOiBEZWZpbmUgU1VCVEFSR0VUX0NQVV9ERUZBVUxUIGJlZm9yZQoJaW5jbHVkaW5nIGFybS9jb2ZmLmgKCjE5OTktMDItMTYgIFNjb3R0IEJhbWJyb3VnaCAgPHNjb3R0YkBjb3JlbGNvbXB1dGVyLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbiAoYXJtKi0qLWxpbnV4LWdudSopOiBTZXQgdGhyZWFkX2ZpbGUgdG8gJ3Bvc2l4JyBpZgoJLS1lbmFibGUtdGhyZWFkc1s9e3llcyxwdGhyZWFkcyxwb3NpeH1dIGlzIHBhc3NlZCBhcyBhIGNvbW1hbmQKCWxpbmUgcGFyYW1ldGVyIHRvIGNvbmZpZ3VyZS4KCgkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KCgkqIGdjYy9jb25maWcvYXJtL3QtbGludXggKFRBUkdFVF9MSUJHQ0MyX0NGTEFHUyk6IEluY2x1ZGUgLWZQSUMuCgpGcmkgTWFyIDI2IDE5OjQyOjE5IDE5OTkgIEoib3JuIFJlbm5lY2tlICA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiBsb29wLmMgKGNvbWJpbmVfZ2l2cyk6IEZpeCBpbmRleCBpbnRvIGNhbl9jb21iaW5lIHdoZW4gZG9pbmcKCWJlbmVmaXQgYWRqdXN0bWVudCBmb3IgcmVtYWluaW5nIGdpdnMgd2hlbiBoYXZpbmcgY29tYmluZWQgYSBnaXYuCgpGcmkgTWFyIDI2IDExOjM4OjAxIDE5OTkgIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQGN5Z251cy5jb20+CgoJKiBjb25maWcvYXJtL3QtYXJtLWVsZiAoRVhUUkFfTVVMVElMSUJfUEFSVFMpOiBEZWZpbmUuCgpGcmkgTWFyIDI2IDEwOjQ4OjI3IDE5OTkgIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQGN5Z251cy5jb20+CgoJKiBjb25maWcvYXJtL2xpbnV4LWVsZi5oOiBJbmNsdWRlIGRieGVsZi5oCgpGcmkgTWFyIDI2IDEwOjQzOjQ3IDE5OTkgIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQGN5Z251cy5jb20+CgoJKiBjb25maWcvc3ZyNC5oOiBJbmNsdWRlIG5ldyBoZWFkZXIgZmlsZSBkYnhlbGYuaC4KCShEQlhfREVCVUdHSU5HX0lORk8pOiBSZW1vdmUgZGVmaW5pdGlvbi4KCShEQlhfVVNFX0JJTkNMKTogUmVtb3ZlIGRlZmluaXRpb24uCgkoREJYX0JMT0NLU19GVU5DVElPTl9SRUxBVElWRSk6IFJlbW92ZSBkZWZpbml0aW9uLgoJKEFTTV9JREVOVElGWV9HQ0MpOiBSZW1vdmUgZGVmaW5pdGlvbi4KCShBU01fSURFTlRJRllfR0NDX0FGVEVSX1NPVVJDRSk6IFJlbW92ZSBkZWZpbml0aW9uLgoJKEFTTV9PVVRQVVRfU09VUkNFX0xJTkUpOiBSZW1vdmUgZGVmaW5pdGlvbi4KCShEQlhfRlVOQ1RJT05fRklSU1QpOiBSZW1vdmUgZGVmaW5pdGlvbi4KCShEQlhfT1VUUFVUX01BSU5fU09VUkNFX0ZJTEVfRU5EKTogUmVtb3ZlIGRlZmluaXRpb24uCgoJKiBjb25maWcvZWxmb3MuaDogSW5jbHVkZSBuZXcgaGVhZGVyIGZpbGUgZGJ4ZWxmLmguCgkoREJYX0RFQlVHR0lOR19JTkZPKTogUmVtb3ZlIGRlZmluaXRpb24uCgkoREJYX0JMT0NLU19GVU5DVElPTl9SRUxBVElWRSk6IFJlbW92ZSBkZWZpbml0aW9uLgoJKEFTTV9JREVOVElGWV9HQ0MpOiBSZW1vdmUgZGVmaW5pdGlvbi4KCShBU01fSURFTlRJRllfR0NDX0FGVEVSX1NPVVJDRSk6IFJlbW92ZSBkZWZpbml0aW9uLgoJKEFTTV9PVVRQVVRfU09VUkNFX0xJTkUpOiBSZW1vdmUgZGVmaW5pdGlvbi4KCShEQlhfRlVOQ1RJT05fRklSU1QpOiBSZW1vdmUgZGVmaW5pdGlvbi4KCgkqIGNvbmZpZy9kYnhlbGYuaDogTmV3IGhlYWRlciBmaWxlLgoJKERCWF9ERUJVR0dJTkdfSU5GTyk6IERlZmluZS4KCShEQlhfQkxPQ0tTX0ZVTkNUSU9OX1JFTEFUSVZFKTogRGVmaW5lLgoJKERCWF9GVU5DVElPTl9GSVJTVCk6IERlZmluZS4KCShEQlhfVVNFX0JJTkNMKTogRGVmaW5lLgoJKERCWF9DT05USU5fTEVOR1RIKTogRGVmaW5lLgoJKEFTTV9JREVOVElGWV9HQ0MpOiBEZWZpbmUuCgkoQVNNX0lERU5USUZZX0dDQ19BRlRFUl9TT1VSQ0UpOiBEZWZpbmUuCgkoQVNNX09VVFBVVF9TT1VSQ0VfTElORSk6IERlZmluZS4KCShEQlhfT1VUUFVUX01BSU5fU09VUkNFX0ZJTEVfRU5EKTogRGVmaW5lLgoKRnJpIE1hciAyNiAwMTo1OToxNSAxOTk5ICAiQ2hhcmxlcyBNLiBIYW5udW0iICA8cm9vdEBpaGFjay5uZXQ+CgoJKiBmb2xkLWNvbnN0LmMgKGZvbGRfdHJ1dGhvcCk6IE9wdGltaXplIGJpdGZpZWxkIHJlZmVyZW5jZXMgd2l0aAoJZGlmZmVyZW50IG1hc2tzIGFzIGxvbmcgYXMgdGhlaXIgc2l6ZSBhbmQgYml0IHBvc2l0aW9uIGFyZSB0aGUgc2FtZS4KCgkqIGZvbGQtY29uc3QuYyAoZm9sZF90cnV0aG9wKTogQnVpbGQgYSB0eXBlIGZvciBib3RoIHRoZSBsaHMgYW5kCglyaHMgYW5kIHVzZSBpdCBhcHByb3ByaWF0ZWx5LgoKCSogZm9sZC1jb25zdC5jIChmb2xkX3RydXRob3ApOiBNYXNrIHRoZSBsaHMgYW5kIHJocyBhZnRlciBtZXJnaW5nCglhZGphY2VudCBiaXRmaWVsZCByZWZlcmVuY2VzLgoKCSogZm9sZC1jb25zdC5jIChmb2xkX3RydXRob3ApOiBWZXJpZnkgdGhhdCB0aGUgbGhzIGFuZCByaHMgYXJlCglpbiB0aGUgc2FtZSBiaXQgcG9zaXRpb24gd2hlbiBvcHRpbWl6aW5nIGJpdGZpZWxkIHJlZmVyZW5jZXMKCXdoaWNoIGhhdmUgdGhlIHNhbWUgbWFzay4KClRodSBNYXIgMjUgMjI6NTM6MjcgMTk5OSAgTWFydGluIHZvbiBM9ndpcyAgPGxvZXdpc0BpbmZvcm1hdGlrLmh1LWJlcmxpbi5kZT4KCgkqIGdjYy50ZXhpIChDb3B5IEFzc2lnbm1lbnQpOiBOZXcgbm9kZS4KCjE5OTktMDMtMjUgIFphY2sgV2VpbmJlcmcgIDx6YWNrQHJhYmkuY29sdW1iaWEuZWR1PgoKCSogZ2NjLmM6IENvbXBpbGUgdW5jb25kaXRpb25hbGx5IGFsbCBjb2RlIGZvcm1lcmx5IGRlcGVuZGVudAoJb24gI2lmZGVmIExBTkdfU1BFQ0lGSUNfRFJJVkVSLgoJKiBnY2NzcGVjLmM6IE5ldyBmaWxlIHdpdGggc3R1YiBsYW5nX3NwZWNpZmljX2RyaXZlciwKCWxhbmdfc3BlY2lmaWNfcHJlX2xpbmsuCgkqIE1ha2VmaWxlLmluOiBMaW5rIGdjY3NwZWMubyBpbnRvIHhnY2MuICBBZGQgcnVsZSB0byBjb21waWxlCgpUaHUgTWFyIDI1IDIxOjA4OjAyIDE5OTkgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGdjYy50ZXhpIChUZW1wb3Jhcmllcyk6IFVwZGF0ZS4KClRodSBNYXIgMjUgMTY6NTM6NTMgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGNvbWJpbmUuYyAoZGlzdHJpYnV0ZV9ub3Rlcyk6IFBsYWNlIFJFR19MQUJFTCBhbHNvIHdoZXJlCglSRUdfRVFVQUwgaW5kaWNhdGVzLgoKVGh1IE1hciAyNSAxMjo0NjozNyAxOTk5ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CgoJKiBhMjlrL2EyOWsuaCAoVEFSR0VUX1NXSVRDSEVTKTogQWRkIGRvYyBzdHJpbmdzLgoJKiBpOTYwL2k5NjAuaCAoVEFSR0VUX1NXSVRDSEVTKTogQWRkIGRvYyBzdHJpbmdzLgoJKiBpbnZva2UudGV4aSAoYTI5ayk6IEFkZCBkb2N1bWVudGF0aW9uIGZvciAtbW5vLW11bHRtIG9wdGlvbi4KClRodSBNYXIgMjUgMTQ6MDQ6NTQgMTk5OSAgQW5kcmV3IE1hY0xlb2QgIDxhbWFjbGVvZEBjeWdudXMuY29tPgoKCSogcnRsLnRleGkgKFJUWF9GUkFNRV9SRUxBVEVEX1ApOiBBZGQgZG9jdW1lbnRhdGlvbi4KCSogcnRsLmggKHN0cnVjdCBydHhfZGVmKTogVXBkYXRlIGNvbW1lbnQgZm9yIGZyYW1lX3JlbGF0ZWQgZmllbGQuCgkoc2V0X3VuaXF1ZV9yZWdfbm90ZSk6IERlY2xhcmUgcHJvdG90eXBlLgoJKiBkd2FyZjJvdXQuYyAoZHdhcmYyb3V0X2ZyYW1lX2RlYnVnX2V4cHIpOiBTcGxpdCBvdXQgZnJvbQoJJ2R3YXJmMm91dF9mcmFtZV9kZWJ1ZycgdG8gaGFuZGxlIG9ubHkgZXhwcmVzc2lvbnMsIGFuZCBwcm9jZXNzCgljb21wb25lbnQgcGFydHMgb2YgYSBQQVJBTExFTCBleHByZXNzaW9uLgoJKGR3YXJmMm91dF9mcmFtZV9kZWJ1Zyk6IFByb2Nlc3MgaW5zbnMgb25seSwgYW5kIGNhbGwKCW5ldyBmdW5jdGlvbiAnZHdhcmYyb3V0X2ZyYW1lX2RlYnVnX2V4cHInIGZvciBwYXR0ZXJucy4KCSogZW1pdC1ydGwuYyAoc2V0X3VuaXF1ZV9yZWdfbm90ZSk6IE5ldyBmdW5jdGlvbiB0byBhZGQgYSByZWcgbm90ZSwKCWJ1dCBpZiB0aGVyZSBpcyBhbiBleGlzdGluZyBvbmUsIGRlbGV0ZSBpdCBmaXJzdC4KCSogZXhwbWVkLmMgKGV4cGFuZF9tdWx0LCBleHBhbmRfZGl2bW9kKTogVXNlIHNldF91bmlxdWVfcmVnX25vdGUuCgkqIG9wdGFicy5jIChhZGRfZXF1YWxfbm90ZSwgZXhwYW5kX2Jpbm9wKTogVXNlIHNldF91bmlxdWVfcmVnX25vdGUuCgkoZW1pdF9ub19jb25mbGljdF9ibG9jaywgZW1pdF9saWJjYWxsX2Jsb2NrKTogVXNlIHNldF91bmlxdWVfcmVnX25vdGUuCgkoZXhwYW5kX2ZpeCk6IFVzZSBzZXRfdW5pcXVlX3JlZ19ub3RlLgoKVGh1IE1hciAyNSAxMTo0Nzo0OSAxOTk5ICBBcnQgSGFhcyAgPGFoYWFzQG5lb3NvZnQuY29tPgoKCSogdGxpbmsuYyAoc3ltYm9sX2hhc2hfbmV3ZnVuYyk6IFJlbW92ZSByZWR1bmRhbnQgY2FsbCB0bwoJaGFzaF9uZXdmdW5jLgoJKGZpbGVfaGFzaF9uZXdmdW5jLCBkZW1hbmdsZWRfaGFzaF9uZXdmdW5jKTogTGlrZXdpc2UuCgpUaHUgTWFyIDI1IDEwOjA1OjU2IDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBpMzg2LmggKFBSRUZFUlJFRF9TVEFDS19CT1VOREFSWSk6IFNldCB0byAxMjguCgoxOTk5LTAzLTI1ICBQaGlsaXAgQmx1bmRlbGwgIDxwYkBuZXh1cy5jby51az4KCglCYXNlZCBvbiBwYXRjaCBmcm9tIEppbSBTdHVkdCAgPGppbUBmZWRlcmF0ZWQuY29tPjoKCSogY29uZmlnL2FybS9saW51eC1lbGYuaCAoU1RBUlRGSUxFX1NQRUMsIEVOREZJTEVfU1BFQyk6IENvcHkKCWRlZmluaXRpb25zIGZyb20gY29uZmlnL2xpbnV4LmguCgkoREJYX0JMT0NLU19GVU5DVElPTl9SRUxBVElWRSk6IERlZmluZSB0byAxLgoKVGh1IE1hciAyNSAwMjoxMjo0MiAxOTk5ICBGaW5uIEhha2Fuc3NvbiAgPGZpbm5AYXhpcy5jb20+CgoJKiBsb29wLmMgKHN0cmVuZ3RoX3JlZHVjZSk6IENvcnJlY3QgYSBjb21tZW50LgoKCSogcnRsLmggKE1FTV9DT1BZX0FUVFJJQlVURVMpOiBSZW1vdmUgdW5uZWNlc3NhcnkgZW5kaW5nIGJhY2tzbGFzaC4KClRodSBNYXIgMjUgMDI6MDI6MTMgMTk5OSAgQXhlbCBUaGltbSAgPEF4ZWwuVGhpbW1AcGh5c2lrLmZ1LWJlcmxpbi5kZT4KCgkqIE1ha2VmaWxlLmluIChSQU5MSUJfVEVTVCk6IEltcHJvdmUgdGVzdC4KClRodSBNYXIgMjUgMDE6MTU6MzMgMTk5OSAgRG9ubiBUZXJyeSAgPGRvbm5AaW50ZXJpeC5jb20+CgoJKiBjb21iaW5lLmMgKGZvcmNlX3RvX21vZGUsIGNhc2UgUExVUyk6IFVzZSBzaWduIGV4dGVuZGVkIG1hc2sKCXdoZW4gbWFza2luZyB0aGUgbG93IGJpdHMgb3V0IG9mIGEgY29uc3RhbnQuCgpUdWUgTWFyIDIzIDE1OjQ1OjI1IDE5OTkgIFJpY2hhcmQgRWFybnNoYXcgIChyZWFybnNoYUBhcm0uY29tKQoJCQkgIEplZmYgTGF3ICA8bGF3QGN5Z251cy5jb20+CgoJKiBmb2xkLWNvbnN0LmMgKG1ha2VfcmFuZ2UpOiBJZiBvcmlnX3R5cGUgaXMgdW5zZXQsIHNldCBpdCBhcyBzb29uCglhcyB3ZSBrbm93IHRoZSB0eXBlLiAgUmVtb3ZlIG5vdyB1bm5lY2Vzc2FyeSBzZXQgb2Ygb3JpZ190eXBlIGZvcgoJY29udmVyc2lvbnMuCgpXZWQgTWFyIDI0IDIzOjI3OjI1IDE5OTkgIE1hcmsgRWxicmVjaHQgIDxzbm93YmFsbDNAdXNhLm5ldD4KCQkJICBKZWZmIExhdyAgPGxhd0BjeWdudXMuY29tPgoKCSogc3lzdGVtLmggKFNURElOX0ZJTEVOTyk6IFByb3ZpZGUgZGVmYXVsdCBkZWZpbml0aW9uIGlmIG9uZSBpcyBub3QKCXByb3ZpZGVkIGJ5IHRoZSBzeXN0ZW0gaGVhZGVyIGZpbGVzLgoJKFNURE9VVF9GSUxFTk8sIFNUREVSUl9GSUxFTk8pOiBMaWtld2lzZS4KCgkqIGkzODYveG0tZGpncHAuaCAoQ09MTEVDVDJfSE9TVF9JTklUSUFMSVpBVElPTik6IE5ldyBtYWNyby4KCSogY29sbGVjdDIuYyAobWFpbik6IFVzZSBpdC4KCShwZXhlY3V0ZV9waWQpOiBOZXcgdmFyaWFibGUuIEhvbGRzIHJldHVybiB2YWx1ZSBmcm9tIGNhbGwgdG8gcGV4ZWN1dGUuCgkoY29sbGVjdDJfZXhlY3V0ZSk6IFJld29yayB0byB1c2UgcGV4ZWN1dGUgaW5zdGVhZCBvZiBmb3JrLgoJKGNvbGxlY3QyX3dhaXQpOiBVc2UgcHdhaXQoKSBpbnN0ZWFkIG9mIHdhaXQoKS4KCgkqIGkzODYvZGpncHAuaDogRml4IHR5cG8uCgpXZWQgTWFyIDI0IDIzOjI0OjMwIDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGZpeGluYy9ta2ZpeGluYy5zaDogUmVjb2duaXplIGN5Z3dpbiogaW5zdGVhZCBvZiBvbmx5CgljeWd3aW4zMi4KCldlZCBNYXIgMjQgMTU6NDQ6MTIgMTk5OSAgTmljayBDbGlmdG9uICA8bmlja2NAY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy9tMzJyL20zMnIuYyAoaW5pdF9pZGVudHMpOiBBY2NlcHQgYm90aCBOQU1FIGFuZCBfX05BTUVfXwoJdmVyc2lvbnMgb2YgYXR0cmlidXRlIG5hbWVzIGFuZCB2YWx1ZXMuCgkobTMycl92YWxpZF9tYWNoaW5lX2RlY2xfYXR0cmlidXRlKTogTGlrZXdpc2UuCgkobTMycl9lbmNvZGVfc2VjdGlvbl9pbmZvKTogTGlrZXdpc2UuCgpXZWQgTWFyIDI0IDIxOjQyOjE1IDE5OTkgIEoib3JuIFJlbm5lY2tlICA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiByZWxvYWQxLmMgKGNob29zZV9yZWxvYWRfcmVncyk6IElmIG91dHB1dC1yZWxvYWRpbmcgZm9yIGEKCXNpbXBsZSBtb3ZlIGluc24sIHRyeSB0byBpbmhlcml0IGFuIGVxdWl2YWxlbmNlIGZvciB0aGUgaW5wdXQuCgoxOTk5LTAyLTI0ICBNaWtlIFN0dW1wICA8bXJzQHdycy5jb20+CgoJKiBhcm0vYW91dC5oIChEQlhfT1VUUFVUX01BSU5fU09VUkNFX0ZJTEVOQU1FKTogRml4IHF1b3RpbmcuCgoxOTk5LTAzLTI0ICBKaW0gQmxhbmR5ICA8amltYkB6d2luZ2xpLmN5Z251cy5jb20+CgoJKiBsaWJnY2MyLmMgKF9fQ1RPUl9MSVNUX18sIF9fRFRPUl9MSVNUX18pOiBJbml0aWFsaXplIG9uIGFsbAoJcGxhdGZvcm1zLgoKV2VkIE1hciAyNCAwMTozNTowMSAxOTk5ICBHZW9mZiBLZWF0aW5nICA8Z2VvZmZrQG96ZW1haWwuY29tLmF1PgoKCSogZm9sZC1jb25zdC5jIChmb2xkKTogUmVjb2duaXplIGEgcm90YXRlIGJ5IGFuIHVuc2lnbmVkIGFtb3VudC4KClR1ZSBNYXIgMjMgMjM6MzI6MTQgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogcGEubWQgKHJvdGxzaTMpOiBOZXcgZXhwYW5kZXIuICBTeW50aGVzaXplIGEgdmFyaWFibGUgcm90YXRlCglsZWZ0IHVzaW5nIGEgdmFyaWFibGUgcm90YXRlIHJpZ2h0LiAgUHJvdmlkZSBhbm9ueW1vdXMgcGF0dGVybiBmb3IKCXJvdGF0ZSBsZWZ0IGJ5IGEgY29uc3RhbnQgdmFsdWUuCgoJKiBleHByLmMgKGV4cGFuZF9hc3NpZ25tZW50KTogRG8gbm90IHRyeSB0byBvcHRpbWl6ZSBhbiBhZ2dyZWdhdGUKCWFkZHJlc3Mgd2hpY2ggaGFzIFZPSURtb2RlLgoKVHVlIE1hciAyMyAyMjo1MTo0OCAxOTk5ICBNdW1pdCBLaGFuICA8a2hhbkB4cmF5bGl0aC53aXNjLmVkdT4KCQkJICBEb25uIFRlcnJ5ICA8ZG9ubkBpbnRlcml4LmNvbT4KCgkqIHByb3RvaXplLmMgKGFic3BhdGgpOiBQcmVzZXJ2ZSBtdWx0aXBsZSBsZWFkaW5nIHNsYXNoZXMgZm9yCglfV0lOMzIgYW5kIEludGVyaXguCgoxOTk5LTAxLTIzICBNaWtlIFN0dW1wICA8bXJzQHdycy5jb20+CgoJKiBhcm0vdnhhcm0uaDogU3BsaXQgb3V0IHZ4V29ya3Mgc3VwcG9ydCBpbnRvIHNlcGFyYXRlIGhlYWRlcmZpbGUKCWFuZCB2eGlmeS4KCSogYXJtL2FybS5jIChjcHVfZGVmYXVsdHMpOiBBbGxvdyBhcm03MTAgYXMgZGVmYXVsdC4KCgkqIGNvbmZpZ3VyZS5pbjogU3BsaXQgb3V0IHZ4V29ya3Mgc3VwcG9ydCBmb3IgQXJtLgoJKiBjb25maWd1cmU6IFJlYnVpbHQuCgpUdWUgTWFyIDIzIDExOjIwOjAzIDE5OTkgIFBlciBCb3RobmVyICA8Ym90aG5lckBjeWdudXMuY29tPgoKCSogdHJlZS5jIChmaXJzdF9ydGxfb3AsIGhhc19jbGVhbnVwcyk6IEhhbmRsZSBHT1RPX1NVQlJPVVRJTkVfRVhQUi4KClR1ZSBNYXIgMjMgMDk6MDA6MzkgMTk5OSAgTmljayBDbGlmdG9uICA8bmlja2NAY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy9hcm0vcmlzY2l4MS5oIChTVUJUQVJHRVRfU1dJVENIRVMpOiBBZGQgZG9jIHN0cmluZy4KCSogY29uZmlnL2FybS9yaXNjaXgxLTEuaCAoU1VCVEFSR0VUX1NXSVRDSEVTKTogQWRkIGRvYyBzdHJpbmcuCgpUdWUgTWFyIDIzIDA3OjUwOjIwIDE5OTkgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiBmdW5jdGlvbi5jOiBJbmNsdWRlIGhhc2guaC4KCShpbnNuc19mb3JfbWVtX2VudHJ5KTogTmV3IHN0cnVjdC4KCShwdXRfcmVnX2ludG9fc3RhY2spOiBUYWtlIGFuIG9wdGlvbmFsIGhhc2gtdGFibGUgbWFwcGluZyBNRU1zIHRvCgl0aGUgSU5TTnMgdGhhdCB1c2UgdGhlbS4KCShmaXh1cF92YXJfcmVmcyk6IExpa2V3aXNlLgoJKHB1dF9hZGRyZXNzb2ZfaW50b19zdGFjayk6IExpa2V3aXNlLgoJKHB1cmdlX2FkZHJlc3NvZl8xKTogTGlrZXdpc2UuICBLZWVwIHRoZSBoYXNoLXRhYmxlIHVwIHRvIGRhdGUgaWYKCXdlIGFkZCBuZXcgaW5zdHJ1Y3Rpb25zLgoJKGZpeHVwX3Zhcl9yZWZzX2luc25zKTogVXNlIGl0IHRvIGF2b2lkIHNlYXJjaGluZyB0aGUgZW50aXJlCglpbnN0cnVjdGlvbiBjaGFpbi4KCShpbnNuc19mb3JfbWVtX25ld2Z1bmMpOiBOZXcgZnVuY3Rpb24uCgkoaW5zbnNfZm9yX21lbV9jb21wKTogTGlrZXdpc2UuCgkoaW5zbnNfZm9yX21lbV93YWxrKTogTGlrZXdpc2UuCgkoY29tcHV0ZV9pbnNuc19mb3JfbWVtKTogTGlrZXdpc2UuCgkocG9wX2Z1bmN0aW9uX2NvbnRleHRfZnJvbSk6IFBhc3MgTlVMTCBmb3IgdGhlIGhhc2gtdGFibGUuCgkocHV0X3Zhcl9pbnRvX3N0YWNrKTogTGlrZXdpc2UuCgkoZ2VuX21lbV9hZGRyZXNzb2YpOiBMaWtld2lzZS4KCShmbHVzaF9hZGRyZXNzb2YpOiBMaWtld2lzZS4KCShwdXJnZV9hZGRyZXNzb2YpOiBDYWxsIGNvbXB1dGVfaW5zbnNfZm9yX21lbSB0byBwcmUtY29tcHV0ZSB0aGUKCWhhc2ggdGFibGUuCgkqIE1ha2VmaWxlLmluIChPQkpTKTogSW5jbHVkZSBoYXNoLm8uCgkoZnVuY3Rpb24ubyk6IERlcGVuZCBvbiBoYXNoLmguCgpUdWUgTWFyIDIzIDAwOjM5OjE0IDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGkzODYvb3BlbmJzZC5oIChUQVJHRVRfREVGQVVMVCk6IFVzZSBzeW1ib2xpYyBuYW1lcyBpbnN0ZWFkIG9mCgludW1iZXJzLgoJKiBpMzg2L25ldGJzZC5oLCBpMzg2L2ZyZWVic2QuaDogTGlrZXdpc2UuCgoJKiBjcnRzdHVmZi5jOiBVc2UgQU5TSSBmdW5jdGlvbiBkZWZpbml0aW9ucy4gIEZpeCBtaW5vciB3aGl0ZXNwYWNlCglwcm9ibGVtcy4KCgkqIGkzODYvb3BlbmJzZC5oIChUQVJHRVRfREVGQVVMVCk6IERlZmluZS4KCSogY29uZmlndXJlLmluOiBEbyBub3Qgc2V0IFRBUkdFVF9DUFVfREVGQVVMVCBmb3IgeDg2IE9wZW5CU0QKCWNvbmZpZ3VyYXRpb25zLgoJKiBjb25maWd1cmU6IFJlYnVpbHQuCgpUdWUgTWFyIDIzIDAwOjM5OjEwIDE5OTkgIEpvaG4gV2VobGUgIChqb2huQGZlaXRoLmNvbSkKCgkqIGkzODYvZnJlZWJzZC5oIChUQVJHRVRfREVGQVVMVCk6IERlZmluZSBpbnN0ZWFkCglvZiBUQVJHRVRfQ1BVX0RFRkFVTFQuCgkqIGkzODYvbmV0YnNkLmggKFRBUkdFVF9ERUZBVUxUKTogTGlrZXdpc2UuCgpNb24gTWFyIDIyIDIzOjUyOjAxIDE5OTkgIE11bWl0IEtoYW4gIDxraGFuQHhyYXlsaXRoLndpc2MuZWR1PgoJCQkgIERvbm4gVGVycnkgIDxkb25uQGludGVyaXguY29tPgoKCSogc2Rib3V0LmMgKHN5bXMuaCk6IERvbid0IGluY2x1ZGUgb24gSW50ZXJpeC4KCSogdG9wbGV2LmMgKG1haW4pOiBObyBzYnJrIG9uIEludGVyaXguCgoJKiBjb25maWd1cmUuaW46IEFkZCBpMzg2LXBjLWludGVyaXggc3VwcG9ydC4KCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgoJKiBmaXhpbmMuaW50ZXJpeDogTmV3IGZpbGUuCgkqIGNvbmZpZy9pbnRlcml4Lmg6IE5ldyBmaWxlLgoJKiBjb25maWcveC1pbnRlcml4OiBOZXcgZmlsZS4KCSogY29uZmlnL3htLWludGVyaXguaDogTmV3IGZpbGUuCgkqIGkzODYvaW50ZXJpeC5oOiBOZXcgZmlsZS4KCSogaTM4Ni9pbnRlcml4LmM6IE5ldyBmaWxlLgoJKiBpMzg2L3QtaW50ZXJpeDogTmV3IGZpbGUuCgpNb24gTWFyIDIyIDIzOjQxOjQ5IDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGkzODYuaCAoUFJFRkVSUkVEX1NUQUNLX0JPVU5EQVJZKTogRGVmaW5lLgoKTW9uIE1hciAyMiAyMzo0MTozMSAxOTk5ICBKb2huIFdlaGxlICAoam9obkBmZWl0aC5jb20pCgoJKiBpMzg2LmMgKGl4ODZfY29tcHV0ZV9mcmFtZV9zaXplKTogTmV3IGZ1bmN0aW9uLgoJKGl4ODZfcHJvbG9ndWUsIGl4ODZfZXBpbG9ndWUpOiBVc2UgaXQuCgkqIGkzODYuaCAoSU5JVElBTF9FTElNSU5BVElPTl9PRkZTRVQpOiBMaWtld2lzZS4KCSogcmVsb2FkMS5jOiBQcm92aWRlIGRlZmF1bHQgZm9yIFBSRUZFUlJFRF9TVEFDS19CT1VOREFSWS4KCk1vbiBNYXIgMjIgMTg6MDY6NTkgMTk5OSAgSmltIFdpbHNvbiAgPHdpbHNvbkBjeWdudXMuY29tPgoKCSogbWlwcy9taXBzLmggKFRBUkdFVF9TV0lUQ0hFUywgVEFSR0VUX09QVElPTlMpOiBBZGQgb3B0aW9uIGRvYwoJc3RyaW5ncy4KCSogbWlwcy9hYmk2NC5oIChTVUJUQVJHRVRfVEFSR0VUX09QVElPTlMpOiBMaWtld2lzZS4KCk1vbiBNYXIgMjIgMTY6MTg6MjcgMTk5OSAgTmljayBDbGlmdG9uICA8bmlja2NAY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy9hcm0vZWxmLmggKFZBTElEX01BQ0hJTkVfREVDTF9BVFRSSUJVVEUpOiBEbyBub3QgYm90aGVyCglwYXNzaW5nIEFUVFJJQlVURVMgdG8gYXJtX3ZhbGlkX21hY2hpbmVfZGVjbF9hdHRyaWJ1dGUuCgoJKiBjb25maWcvYXJtL2NvZmYuaCAoVkFMSURfTUFDSElORV9ERUNMX0FUVFJJQlVURSk6IERvIG5vdCBib3RoZXIKCXBhc3NpbmcgQVRUUklCVVRFUyB0byBhcm1fdmFsaWRfbWFjaGluZV9kZWNsX2F0dHJpYnV0ZS4KCgkqIGNvbmZpZy9hcm0vYXJtLmggKERFRkFVTFRfUlRYX0NPU1RTKTogRG8gbm90IGJvdGhlciBwYXNzaW5nCglPVVRFUl9DT0RFIHRvIGFybV9ydHhfY29zdHMgLSBpdCBpcyBub3QgdXNlZC4KCShhcm1fY29tcGFyZV9mcCk6IERlbGV0ZSBkZWNsYXJhdGlvbi4KCShGSU5BTF9QUkVTQ0FOX0lOU04pOiBEbyBub3QgYm90aGVyIHBhc3NpbmcgT1BWRUMgb3IgTk9QRVJBTkRTIHRvCglhcm1fZmluYWxfcHJlc2Nhbl9pbnNuIC0gdGhleSBhcmUgbm90IHVzZWQuCgkoY29uc3Rfb2tfZm9yX29wKTogUmVtb3ZlIHByb3RvdHlwZS4KCShhcm1fcnR4X2Nvc3RzKTogRml4IHByb3RvdHlwZS4KCShhcm1fdmFsaWRfbWFjaGluZV9kZWNsX2F0dHJpYnV0ZSk6IEZpeCBwcm90b3R5cGUuCgkoZmluYWxfcHJlc2Nhbl9pbnNuKTogRml4IHByb3RvdHlwZS4KCgkqIGNvbmZpZy9hcm0vYXJtLm1kOiBSZW1vdmUgcmVmZXJlbmNlcyB0byBhcm1fY29tcGFyZV9mcC4KCgkqIGNvbmZpZy9hcm0vYXJtLmMgKGFybV9jb21wYXJlX2ZwKTogRGVsZXRlLgoJKGNvbnN0X29rX2Zvcl9vcCk6IE1ha2UgZnVuY3Rpb24gc3RhdGljLiAgQWRkIHByb3RvdHlwZS4gIFJlbW92ZQoJbW9kZSBwYXJhbWV0ZXIgLSBpdCBpcyB1bnVzZWQuCgkoYXJtX3J0eF9jb3N0cyk6IFJlbW92ZSBvdXRlcl9jb2RlIHBhcmFtZXRlci4KCShyZWxvYWRfbWVtb3J5X29wZXJhbmQpOiBEZWNsYXJlIG1vZGUgcGFyYW1ldGVyIHVudXNlZC4KCShwb3dlcl9vZl90d29fb3BlcmFuZCk6IERlY2xhcmUgbW9kZSBwYXJhbWV0ZXIgdW51c2VkLgoJKGVxdWFsaXR5X29wZXJhdG9yKTogRGVjbGFyZSBtb2RlIHBhcmFtZXRlciB1bnVzZWQuCgkobG9hZF9tdWx0aXBsZV9vcGVyYXRpb24pOiBEZWNsYXJlIG1vZGUgcGFyYW1ldGVyIHVudXNlZC4KCShzdG9yZV9tdWx0aXBsZV9vcGVyYXRpb24pOiBEZWNsYXJlIG1vZGUgcGFyYW1ldGVyIHVudXNlZC4KCShtdWx0aV9yZWdpc3Rlcl9wdXNoKTogRGVjbGFyZSBtb2RlIHBhcmFtZXRlciB1bnVzZWQuCgkoYXJtX3ZhbGlkX21hY2hpbmVfZGVjbF9hdHRyaWJ1dGUpOiBSZW1vdmUgYXR0cmlidXRlcyBwYXJhbWV0ZXIgLQoJaXQgaXMgdW51c2VkLgoJKHNlbGVjdF9kb21pbmFuY2VfY2NfbW9kZSk6IFJlbW92ZSBvcCBwYXJhbWV0ZXIgLSBpdCBpcyB1bnVzZWQuCgkoZ2VuX2NvbXBhcmVfcmVnKTogUmVtb3ZlIGZwIHBhcmFtZXRlciAtIGl0IGlzIHVudXNlZC4KCShmaW5hbF9wcmVzY2FuX2luc24pOiBSZW1vdmUgb3B2ZWMgYW5kIG5vcGVyYW5kcyBwYXJhbWV0ZXJzIC0gdGhleQoJYXJlIHVudXNlZC4KCk1vbiBNYXIgMjIgMTQ6MzU6MjggMTk5OSAgTmljayBDbGlmdG9uICA8bmlja2NAY3lnbnVzLmNvbT4KCgkqIHRtLnRleGkgKE1EX1NDSEVEX0lOSVQpOiBBZGQgbWlzc2luZyBjbG9zaW5nIHBhcmVudGhlc2lzLgoKTW9uIE1hciAyMiAyMjoyNDozMCAxOTk5ICBKIm9ybiBSZW5uZWNrZSAgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogcmVsb2FkMS5jIChyZWxvYWRfYXNfbmVlZGVkKTogU2V0IHJlbG9hZF9pc19vdXRwdXRfcmVsb2FkIC8KCXJlbG9hZF9oYXNfb3V0cHV0X3JlbG9hZCBmb3IgYXV0b19pbmMgZXhwcmVzc2lvbnMgdGhhdCBjb3VsZCBiZQoJcmVsb2FkZWQuICBDYWxsIGZvcmdldF9vbGRfcmVsb2FkcyBmb3IgUkVHX0lOQyBub3Rlcy4KCk1vbiBNYXIgMjIgMjE6NTE6NTcgMTk5OSAgSiJvcm4gUmVubmVja2UgIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIGNzZS5jIChjc2VfaW5zbik6IERvbid0IGNoYW5nZSB0aGUgcmVzdWx0IHJlZ2lzdGVyIG9mIGEgbGliY2FsbC4KCk1vbiBNYXIgMjIgMjE6MDg6NTkgMTk5OSAgSiJvcm4gUmVubmVja2UgIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIHJ0bC5oIChzaGFsbG93X2NvcHlfcnR4KTogRGVjbGFyZS4KCSogcnRsLmMgKHNoYWxsb3dfY29weV9ydHgpOiBOZXcgZnVuY3Rpb24uCgkqIHJlbG9hZC5jIChmaW5kX3JlbG9hZHNfdG9wbGV2KTogVXNlIHNoYWxsb3dfY29weV9ydHggaW5zdGVhZCBvZgoJY29weV9ydHguCgpNb24gTWFyIDIyIDEwOjQ0OjMzIDE5OTkgIFZsYWRpbWlyIE1ha2Fyb3YgIDx2bWFrYXJvdkB0b2Z1LnRvLmN5Z251cy5jb20+CgoJKiBjb25maWcvaDgzMDAvaDgzMDAubWQgKGFkanVzdF9sZW5ndGgpOiBOZXcgYXR0cmlidXRlLgoJKG1vZGhpMysxLCBhbmRzaTMrMSwgaW9yc2kzKzEsIGV4dHp2KzEsIGV4dHp2KzIpOiBDaGFuZ2UgaW5zbgoJZGVmYXVsdCB2YWx1ZSBvZiBhdHRyaWJ1dGUgImFkanVzdF9sZW5ndGgiIG9udG8gIm5vIi4KCgkqIGNvbmZpZy9oODMwMC9oODMwMC5jIChoODMwMF9hZGp1c3RfaW5zbl9sZW5ndGgpOiBBZGp1c3QKCWxlbmd0aCBvbmx5IGlmIHRoZSBhdHRyaWJ1dGUgImFkanVzdF9sZW5ndGgiIHZhbHVlIGlzICJ5ZXMiLgoJVXNlIDAgaWYgdGhlIHNoaWZ0IGlzIG5lZ2F0aXZlLgoKCSogZmluYWwuYyAoc2hvcnRlbl9icmFuY2hlcyk6IENoZWNrIGluc24gbGVuZ3RoIGFmdGVyIGl0cwoJYWRqdXN0aW5nLgoKU3VuIE1hciAyMSAxNzozMzo0OCAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBpODYwLmggKFRBUkdFVF9TV0lUQ0hFUyk6IEFkZCBkb2N1bWVudGF0aW9uIGZvciBkZWZhdWx0IGNhc2UuCgkqIGk4NjAvcGFyYWdvbi5oIChUQVJHRVRfU1dJVENIRVMpOiBBZGQgZG9jdW1lbnRhdGlvbiBmb3IgZGVmYXVsdCBjYXNlLgoJKiBpMzcwLmggKFRBUkdFVF9TV0lUQ0hFUyk6IEFkZCBkb2N1bWVudGF0aW9uIGZvciBkZWZhdWx0IGNhc2UuCgkqIGZ4ODAuaCAoVEFSR0VUX1NXSVRDSEVTKTogQWRkIGRvY3VtZW50YXRpb24gZm9yIGRlZmF1bHQgY2FzZS4KCSogZWx4c2kuaCAoVEFSR0VUX1NXSVRDSEVTKTogQWRkIGRvY3VtZW50YXRpb24gZm9yIGRlZmF1bHQgY2FzZS4KCSogY2xpcHBlci5oIChUQVJHRVRfU1dJVENIRVMpOiBBZGQgZG9jdW1lbnRhdGlvbiBmb3IgZGVmYXVsdCBjYXNlLgoJKiAxNzUwYS5oIChUQVJHRVRfU1dJVENIRVMpOiBBZGQgZG9jdW1lbnRhdGlvbiBmb3IgZGVmYXVsdCBjYXNlLgoJKiBwYS5oIChUQVJHRVRfU1dJVENIRVMpOiBBZGQgZG9jdW1lbnRhdGlvbiBmb3IgZGVmYXVsdCBjYXNlLgoJKFRBUkdFVF9PUFRJT05TKTogTGlrZXdpc2UgZm9yIGRlZmF1bHQgY2FzZS4KCSogbW4xMDMwMC5oIChUQVJHRVRfU1dJVENIRVMpOiBBZGQgZG9jdW1lbnRhdGlvbiBmb3IgZGVmYXVsdCBjYXNlLgoJKiBoODMwMC5oIChUQVJHRVRfU1dJVENIRVMpOiBBZGQgZG9jdW1lbnRhdGlvbiBmb3IgZGVmYXVsdCBjYXNlLgoKCSogZ2NzZS5jIChkdW1wX2hhc2hfdGFibGUpOiBGaXggd2hpdGVzcGFjZSBpbiBkZWNsYXJhdGlvbi4KCShjb21wdXRlX3RyYW5zcG91dCk6IFJlbmFtZWQgZnJvbSBwcmVfY29tcHV0ZV90cmFuc3BvdXQuCgkoY29tcHV0ZV9wcmVfKik6IERlbGV0ZWQuCgkocHJlX2V4cHJfcmVhY2hlc19oZXJlX3ApOiBOZXcgYXJndW1lbnQsIENIRUNLX1BSRV9DT01QLiAgQWxsCgljYWxsZXJzIGNoYW5nZWQuCgkoaW5zZXJ0X2luc25fZW5kX2JiKTogUmVuYW1lZCBmcm9tIHByZV9pbnNlcnRfaW5zbi4KCShwcmVfKik6IERlbGV0ZSB1bnVzZWQgdmFyaWFibGVzLiAgT25seSBsZWF2ZSBsb2NhbCBwcm9wZXJ0aWVzIGFuZAoJZ2xvYmFsIHJlZHVuZGFudC9vcHRpbWFsIGNvbXB1dGF0aW9uIHBvaW50cy4KCShhbGxvY19wcmVfbWVtLCBmcmVlX3ByZV9tZW0pOiBDb3JyZXNwb25kaW5nIGNoYW5nZXMuCgkoY29tcHV0ZV9wcmVfZGF0YSk6IFNpbXBsaWZ5IGFuZCBjYWxsIHByZV9sY20gdG8gcnVuIHRoZSBsYXp5Cgljb2RlIG1vdGlvbiBkYXRhZmxvdyBhbmFseXNpcy4KCShwcmVfaW5zZXJ0LCBwcmVfaW5zZXJ0X2NvcGllcywgcHJlX2RlbGV0ZSk6IFJldmFtcCB0byB1c2UgTENNCgliYXNlZCByZWR1bmRhbnQgYW5kIG9wdGltYWwgY29tcHV0YXRpb24gcG9pbnRzLgoKCSogYmFzaWMtYmxvY2suaCAocHJlX2xjbSwgcHJlX3Jldl9sY20pOiBEZWNsYXJlLgoKCSogdG9wbGV2LmMgKG1haW4pOiBBIGRlYnVnIG9wdGlvbiB3aXRob3V0IGEgbGV2ZWwgZGVmYXVsdHMgdG8KCWxldmVsIDIuCgpTdW4gTWFyIDIxIDEyOjEzOjAxIDE5OTkgIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQGN5Z251cy5jb20+CgoJKiBmbG93LmMgKGNhbl9kZWxldGVfbGFiZWxfcCk6IERvIG5vdCBhbGxvdyB1c2VyIHNwZWNpZmllZAoJbGFiZWxzIHRvIGJlIGRlbGV0ZWQuCgkqIGR3YXJmMm91dC5jIChnZW5fbGFiZWxfZGllKTogR2VuZXJhdGUgYWRkcmVzc2VzIGZvciBkZWxldGVkCgkocHJvZ3JhbW1lciBzcGVjaWZpZWQpIGxhYmVscy4KCSogZHdhcmZvdXQuYyAob3V0cHV0X2xhYmVsX2RpZSk6IEdlbmVyYXRlIGFkZHJlc3NlcyBmb3IgZGVsZXRlZAoJKHByb2dyYW1tZXIgc3BlY2lmaWVkKSBsYWJlbHMuCgoxOTk5LTAzLTIxICBNYW5mcmVkIEhvbGxzdGVpbiAgPG1hbmZyZWRAcy1kaXJla3RuZXQuZGU+CgoJKiBNYWtlZmlsZS5pbiAoeGdjYyQoZXhlZXh0KSk6IEFkZCBpbnRsLm8gdG8gbGlzdCBvZiBmaWxlcyB0byBiZQoJbGlua2VkIHdpdGguCgpTdW4gTWFyIDIxIDAxOjE1OjAzIDE5OTkgIEplZmYgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiB2ZXJzaW9uLmM6IEJ1bXAgZm9yIHNuYXBzaG90LgoKU2F0IE1hciAyMCAyMjoyNjoyMyAxOTk5ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBzcGFyYy5oIChUQVJHRVRfU1dJVENIRVMpOiBBZGQgbnVsbCBkZXNjcmlwdGlvbiB0byBkZWZhdWx0IGNhc2UuCgpTYXQgTWFyIDIwIDIxOjQ2OjA2IDE5OTkgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGMtbGV4LmMgKHl5bGV4KTogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZSBgYnl0ZXMnLgoKCSogZmxvdy5jIChwcmludF9ydGxfd2l0aF9iYik6IENhc3QgdGhlIHJldHVybiB2YWx1ZSBvZiBhbGxvY2EuCgoJKiBmdW5jdGlvbi5jIChhc3NpZ25fcGFybXMpOiBXcmFwIHZhcmlhYmxlIGB2YXJhcmdzX3NldHVwJyBpbgoJbWFjcm8gU0VUVVBfSU5DT01JTkdfVkFSQVJHUy4KCSh0aHJlYWRfcHJvbG9ndWVfYW5kX2VwaWxvZ3VlX2luc25zKTogTWFyayBwYXJhbWV0ZXIgYGYnIHdpdGgKCUFUVFJJQlVURV9VTlVTRUQuCgoJKiBsb2NhbC1hbGxvYy5jIChub19lcXVpdik6IExpa2V3aXNlIGZvciBwYXJhbWV0ZXIgYHN0b3JlJy4KCgkqIHNjaGVkLmMgKHNjaGVkdWxlX2luc25zKTogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZXMgYGluc24nIGFuZCBgbmV4dCcuCgoJKiB0bGluay5jIChzeW1ib2xfaGFzaF9uZXdmdW5jLCBzeW1ib2xfaGFzaF9sb29rdXAsCglmaWxlX2hhc2hfbmV3ZnVuYywgZmlsZV9oYXNoX2xvb2t1cCwgZGVtYW5nbGVkX2hhc2hfbmV3ZnVuYywKCWRlbWFuZ2xlZF9oYXNoX2xvb2t1cCwgc3ltYm9sX3B1c2gsIHN5bWJvbF9wb3AsIGZpbGVfcHVzaCwKCWZpbGVfcG9wLCB0bGlua19pbml0LCB0bGlua19leGVjdXRlLCBmcm9iX2V4dGVuc2lvbiwKCW9ic3RhY2tfZmdldHMsIHRmZ2V0cywgcGZnZXRzLCBmcmVhZHN5bSwgcmVhZF9yZXBvX2ZpbGUsCgltYXliZV90d2VhaywgcmVjb21waWxlX2ZpbGVzLCByZWFkX3JlcG9fZmlsZXMsCglkZW1hbmdsZV9uZXdfc3ltYm9scywgc2Nhbl9saW5rZXJfb3V0cHV0KTogQWRkIHN0YXRpYyBwcm90b3R5cGUuCgoJKHN5bWJvbF9oYXNoX25ld2Z1bmMsIGZpbGVfaGFzaF9uZXdmdW5jLCBkZW1hbmdsZWRfaGFzaF9uZXdmdW5jKToKCU1ha2UgdGhlIHRoaXJkIGFyZ3VtZW50IGEgYGhhc2hfdGFibGVfa2V5Jy4KCgkqIHRvcGxldi5jIChkZWJ1Z19zdGFydF9zb3VyY2VfZmlsZSk6IE1hcmsgcGFyYW1ldGVyIGBmaWxlbmFtZScKCXdpdGggQVRUUklCVVRFX1VOVVNFRC4KClN1biBNYXIgMjEgMDI6Mjg6MjEgMTk5OSAgQW5kcmVhcyBTY2h3YWIgIDxzY2h3YWJAaXNzYW4uY3MudW5pLWRvcnRtdW5kLmRlPgoKCSogdG0udGV4aSAoVmFyYXJncyk6IERvbid0IHNwbGl0IGFyZ3VtZW50IG9mIEBpdGVtIGFjcm9zcyBsaW5lcy4KCgkqIGludm9rZS50ZXhpOiBGaXggdXNlIG9mIEBpdGVtIHZzIEBpdGVteC4KClN1biBNYXIgMjEgMDk6NTk6NTQgMTk5OSAgTWljaGFlbCBIYXllcyAgPG0uaGF5ZXNAZWxlYy5jYW50ZXJidXJ5LmFjLm56PgoKCSogY29uZmlnL2M0eC9jNHguaCAoVEFSR0VUX1NXSVRDSEVTKTogQWRkIG51bGwgZGVzY3JpcHRpb24gdG8KCWRlZmF1bHQgY2FzZS4KClNhdCBNYXIgMjAgMjM6MzM6NTQgMTk5OSAgTWljaGFlbCBIYXllcyAgPG0uaGF5ZXNAZWxlYy5jYW50ZXJidXJ5LmFjLm56PgoKCSogbG9vcC5jIChjaGVja19kYnJhX2xvb3ApOiBGaXggZGVidWcgbWVzc2FnZS4KClNhdCBNYXIgMjAgMTU6NTQ6MzUgMTk5OSAgTWljaGFlbCBIYXllcyAgPG0uaGF5ZXNAZWxlYy5jYW50ZXJidXJ5LmFjLm56PgoKCSogY29uZmlnL2M0eC9jNHgubWQgKGRlY3JlbWVudF9hbmRfYnJhbmNoX29uX2NvdW50KTogRW1pdCBycHRiX2VuZAoJcGF0dGVybiBpbnN0ZWFkIG9mIGRlY3JlbWVudF9hbmRfYnJhbmNoX3VudGlsX3plcm8gcGF0dGVybi4KClNhdCBNYXIgMjAgMTE6Mzk6NTggMTk5OSAgTWljaGFlbCBIYXllcyAgPG0uaGF5ZXNAZWxlYy5jYW50ZXJidXJ5LmFjLm56PgoKCSogY29uZmlnL2M0eC9jNHguaCAoVEFSR0VUX1NXSVRDSEVTKTogQWRkIGRvY3VtZW50YXRpb24uCgkqIGNvbmZpZy9jNHgvYzR4LmggKFRBUkdFVF9PUFRJT05TKTogQWRkIGRvY3VtZW50YXRpb24uCgpGcmkgTWFyIDE5IDIzOjI2OjI5IDE5OTkgIE1hcnRpbiB2b24gTPZ3aXMgIDxsb2V3aXNAaW5mb3JtYXRpay5odS1iZXJsaW4uZGU+CgoJKiBleHByLmMgKGV4cGFuZF9leHByKTogSGFuZGxlIEVSUk9SX01BUksgbXVjaCBlYXJsaWVyLgoKRnJpIE1hciAxOSAxNToyODozOCAxOTk5ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBjY2NwLmMgKGNyZWF0ZV9kZWZpbml0aW9uKTogQ2FzdCB0byBVX0NIQVIqIHdoZW4gYXNzaWduaW5nIHRvIG9uZS4KCgkqIGNwcGZpbGVzLmMgKHJlYWRfYW5kX3ByZXNjYW4pOiBMaWtld2lzZS4KCVN0YXJ0IGEgI2RlZmluZSBpbiBjb2x1bW4gMC4KCgkqIGNwcGxpYi5jIChjcHBfZGVmaW5lKTogQ2FzdCB0byBVX0NIQVIqIHdoZW4gYXNzaWduaW5nIHRvIG9uZS4KCShjcHBfcHVzaF9idWZmZXIpOiBMaWtld2lzZSBmb3IgY3BwX2J1ZmZlciouCgkoZG9faW5jbHVkZSk6IENoYW5nZSB0aGUgdHlwZSBvZiBgZmJlZycgYW5kIGBmZW5kJyB0byB1bnNpZ25lZCBjaGFyKi4KCShkb19lbmRpZik6IENhc3QgdG8gY2hhciogd2hlbiBhc3NpZ25pbmcgdG8gb25lLgoJKGRvX2Fzc2VydCk6IExpa2V3aXNlLgoJKGRvX3VuYXNzZXJ0KTogTGlrZXdpc2UuCgkoY3BwX3JlYWRfY2hlY2tfYXNzZXJ0aW9uKTogQ2hhbmdlIHRoZSB0eXBlIG9mIGBuYW1lJyB0byBVX0NIQVIqLgoJRG9uJ3QgZG8gdW5uZWNlc3NhcnkgY2FzdCB0byBjaGFyKiBhbnltb3JlLgoKCSogZ2VucmVjb2cuYyAobWFrZV9pbnNuX3NlcXVlbmNlKTogQ2FzdCB0byBjaGFyKiogd2hlbiBhc3NpZ25pbmcKCXRvIG9uZS4gIENhc3QgdGhlIGZpcnN0IGFyZ3VtZW50IG9mIGJ6ZXJvIHRvIFBUUi4KCgkqIGxvb3AuYyAoc3RyZW5ndGhfcmVkdWNlKTogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZSBgbm90ZScuCgoJKiByZWxvYWQxLmMgKG5ld19pbnNuX2NoYWluKTogQ2FzdCB0byBzdHJ1Y3QgaW5zbl9jaGFpbiogd2hlbgoJYXNzaWduaW5nIHRvIG9uZS4KCgkqIHJ0bC5jIChjb3B5X3J0eCk6IFVzZSBtZW1jcHkgaW5zdGVhZCBvZiBiY29weS4KCkZyaSBNYXIgMTkgMTE6MTk6MzEgMTk5OSAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogY2FsbHMuYyAoaW5pdGlhbGl6ZV9hcmd1bWVudF9pbmZvcm1hdGlvbik6IE1hcmsgcGFyYW1ldGVycwoJYG51bV9hY3R1YWxzJyBhbmQgYG5fbmFtZWRfYXJncycgd2l0aCBBVFRSSUJVVEVfVU5VU0VELgoKCSogZGJ4b3V0LmMgKGRieG91dF9zdGFydF9uZXdfc291cmNlX2ZpbGUpOiBMaWtld2lzZSBmb3IgcGFyYW1ldGVyCglgZmlsZW5hbWUnLgoJKGRieG91dF9maW5pc2gpOiBMaWtld2lzZSBmb3IgcGFyYW1ldGVycyBgZmlsZScgYW5kIGBmaWxlbmFtZScuCgkoZGJ4b3V0X3ByZXBhcmVfc3ltYm9sKTogTGlrZXdpc2UgZm9yIHBhcmFtZXRlciBgZGVjbCcuCgkoZGJ4b3V0X2JlZ2luX2Z1bmN0aW9uKTogTGlrZXdpc2UuCgoJKiBleHBsb3cuYyAoaGFyZF9mdW5jdGlvbl92YWx1ZSk6IExpa2V3aXNlIGZvciBwYXJhbWV0ZXIgYGZ1bmMnLgoKCSogZnVuY3Rpb24uYyAobG9jYXRlX2FuZF9wYWRfcGFybSk6IExpa2V3aXNlIGZvciBwYXJhbWV0ZXIgYGZuZGVjbCcuCgoJKiBleHBtZWQuYyAoZXhwYW5kX2Rpdm1vZCk6IE9taXQgdW51c2VkIGFyZ3VtZW50IHRvIGBleHBhbmRfYWJzJy4KCSogZXhwci5jIChleHBhbmRfZXhwcik6IExpa2V3aXNlLgoJKiBleHByLmggKGV4cGFuZF9hYnMpOiBEZWxldGUgdW51c2VkIGFyZ3VtZW50IGZyb20gcHJvdG90eXBlLgoJKiBvcHRhYnMuYyAoZXhwYW5kX2Ficyk6IFJlbW92ZSB1bnVzZWQgcGFyYW1ldGVyIGB1bnNpZ25lZHAnLgoKCSogc2Rib3V0LmMgKHNkYm91dF9pbml0KTogTWFyayBwYXJhbWV0ZXIgYHN5bXMnIHdpdGggQVRUUklCVVRFX1VOVVNFRC4KCShzZGJvdXRfZW5kX2Jsb2NrKTogTGlrZXdpc2UgZm9yIHBhcmFtZXRlciBgbicuCgoJKiB0b3BsZXYuYyAoZGVidWdfZGVmaW5lKTogTGlrZXdpc2UgZm9yIHBhcmFtZXRlcnMgYGxpbmVubycgYW5kCglgYnVmZmVyJy4KCShkZWJ1Z191bmRlZik6IExpa2V3aXNlLgoKCSogdmFyYXNtLmMgKG5hbWVkX3NlY3Rpb24pOiBMaWtld2lzZSBmb3IgcGFyYW1ldGVyICdyZWxvYycuCgkoYXNzZW1ibGVfZXh0ZXJuYWwpOiBMaWtld2lzZSBmb3IgcGFyYW1ldGVyIGBkZWNsJy4KCShhc3NlbWJsZV9hbGlhcyk6IExpa2V3aXNlIGZvciBwYXJhbWV0ZXIgYHRhcmdldCcuCgpGcmkgTWFyIDE5IDAxOjU0OjMwIDE5OTkgIFRoZW9kb3JlIFBhcGFkb3BvdWxvICA8VGhlb2RvcmUuUGFwYWRvcG91bG9Ac29waGlhLmlucmlhLmZyPgoKCSogdG9wbGV2LmMgKHJlYWRfaW50ZWdyYWxfcGFyYW1ldGVyKTogQ29uc3RpZnkuICBCZXR0ZXIgY29udHJvbCBvZgoJZXJyb3IgbWVzc2FnZXMuCgkobWFpbik6IFVzZSByZWFkX2ludGVncmFsX3BhcmFtZXRlciB0byBzZXQgb3B0aW1pemUsIGlkX2NsYXNoX2xlbiwKCWxhcmdlcl90aGFuX3NpemUsIGFuZCB0aGUgZGVidWdnaW5nIGxldmVsLgoJKiB0b3BsZXYuaCAocmVhZF9pbnRlZ3JhbF9wYXJhbWV0ZXIpOiBVcGRhdGUgcHJvdG90eXBlLgoKRnJpIE1hciAxOSAwMTo0MjowNSAxOTk5ICBaYWNrIFdlaW5iZXJnICA8emFja0ByYWJpLnBoeXMuY29sdW1iaWEuZWR1PgoKCSogc3lzdGVtLmg6IFVzZSBwdXRjX3VubG9ja2VkLCBmcHV0Y191bmxvY2tlZCwgYW5kCglmcHV0c191bmxvY2tlZCBvbmx5IGlmIHB1dGNfdW5sb2NrZWQgaGFzIGEgcHJvdG90eXBlIGFscmVhZHkuCglQcm90b3R5cGUgZnB1dHNfdW5sb2NrZWQgaWYgbmVjZXNzYXJ5LgoJKiBjb25maWd1cmUuaW46IENoZWNrIGZvciBwcm90b3R5cGVzIG9mIHB1dGNfdW5sb2NrZWQgYW5kCglmcHV0c191bmxvY2tlZC4KCSogYWNjb25maWcuaDogVXBkYXRlZC4KCSogY29uZmlnLmluLCBjb25maWd1cmU6IFJlYnVpbHQuCgpGcmkgTWFyIDE5IDAyOjQ1OjEyIDE5OTkgIEFsZXhhbmRyZSBPbGl2YSAgPG9saXZhQGRjYy51bmljYW1wLmJyPgoKCSogTWFrZWZpbGUuaW4gKElOVExfVEFSR0VUUyk6IE5ldyBtYWNyby4KCSgkKElOVExfVEFSR0VUUykpOiBEZXBlbmQgb24gZ2VuZXJhdGVkIHNvdXJjZXM7IGRyb3AgZGVwZW5kZW5jaWVzCglvbiBjcC9wYXJzZS5jIGFuZCBvYmpjL29iamMtcGFyc2UuYy4KCSgkKHNyY2RpcikvY3AvcGFyc2UuYyk6IE1vdmUgdG8gY3AvTWFrZS1sYW5nLmluLgoJKiBvYmpjL01ha2UtbGFuZy5pbiAoJChJTlRMX1RBUkdFVFMpKTogRGVwZW5kIG9uIG9iamMvb2JqYy1wYXJzZS5jLgoKVGh1IE1hciAxOCAyMjoyODo1MyAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBpODYwLmggKFRBUkdFVF9TV0lUQ0hFUyk6IEFkZCBkb2N1bWVudGF0aW9uLgoJKiBpODYwL3BhcmFnb24uaCAoVEFSR0VUX1NXSVRDSEVTKTogQWRkIGRvY3VtZW50YXRpb24uCgkqIGkzNzAuaCAoVEFSR0VUX1NXSVRDSEVTKTogQWRkIGRvY3VtZW50YXRpb24uCgkqIGZ4ODAuaCAoVEFSR0VUX1NXSVRDSEVTKTogQWRkIGRvY3VtZW50YXRpb24uCgkqIGVseHNpLmggKFRBUkdFVF9TV0lUQ0hFUyk6IEFkZCBkb2N1bWVudGF0aW9uLgoJKiBjbGlwcGVyLmggKFRBUkdFVF9TV0lUQ0hFUyk6IEFkZCBkb2N1bWVudGF0aW9uLgoJKiAxNzUwYS5oIChUQVJHRVRfU1dJVENIRVMpOiBBZGQgZG9jdW1lbnRhdGlvbi4KCSogcGEuaCAoVEFSR0VUX1NXSVRDSEVTKTogQWRkIGRvY3VtZW50YXRpb24uCgkoVEFSR0VUX09QVElPTlMpOiBMaWtld2lzZS4KCSogbW4xMDMwMC5oIChUQVJHRVRfU1dJVENIRVMpOiBBZGQgZG9jdW1lbnRhdGlvbi4KCSogaDgzMDAuaCAoVEFSR0VUX1NXSVRDSEVTKTogQWRkIGRvY3VtZW50YXRpb24uCgpUaHUgTWFyIDE4IDE1OjU4OjI2IDE5OTkgIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQGN5Z251cy5jb20+CgoJKiBsb29wLmMgKHN0cmVuZ3RoX3JlZHVjZSk6IERvIG5vdCBwZXJmb3JtIHBzZXVkbyByZXBsYWNlbWVudHMKCWlmIHRoZSBsb29wIGNvbnRhaW5zIHZvbGF0aWxlIG1lbW9yeSByZWZlcmVuY2VzLgoKVGh1IE1hciAxOCAxOTowOTo1MCAxOTk5ICBKIm9ybiBSZW5uZWNrZSAgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogcmVsb2FkLmMgKGZpbmRfcmVsb2Fkc190b3BsZXYpOiBXaGVuIHByb2Nlc3NpbmcgWCByZWN1cnNpdmVseSwKCWRvbid0IGFsdGVyIGl0IGRlc3RydWN0aXZlbHkgZXhjZXB0IGJ5IGZpbGxpbmcgaW4gY29uc3RhbnRzLgoKVGh1IE1hciAxOCAxMDoxNDoxOCAxOTk5ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBjY2NwLmMgKGRlZmF1bHRfaW5jbHVkZSk6IEluaXRpYWxpemUgc3RydWN0dXJlIG1lbWJlcnMuCgkocGFzc190aHJ1X2RpcmVjdGl2ZSk6IENoYW5nZSB0aGUgdHlwZSBvZiAna2V5d29yZF9sZW5ndGgnIHRvIGludC4KCShtYWluKTogQ2FzdCBgYmluZHRleHRkb21haW4nIGFuZCBgdGV4dGRvbWFpbicgdG8gKHZvaWQpLgoKCSogY29sbGVjdDIuYyAobWFpbik6IExpa2V3aXNlLgoKCSogY3BwbWFpbi5jIChtYWluKTogTGlrZXdpc2UuCgoJKiBnY2MuYyAobWFpbik6IExpa2V3aXNlLgoKCSogZ2Nvdi5jIChtYWluKTogTGlrZXdpc2UuCgoJKiBwcm90b2l6ZS5jIChtYWluKTogTGlrZXdpc2UuCgoJKiB0b3BsZXYuYyAobWFpbik6IExpa2V3aXNlLgoKMTk5OS0wMy0xOCAgR2F2aW4gUm9taWctS29jaCAgPGdhdmluQGN5Z251cy5jb20+CgoJKiBjb25maWcvbWlwcy9taXBzLmMgKG1pcHNfZXhwbGljaXRfdHlwZV9zaXplX3N0cmluZyk6IENvcnJlY3QKCWl0cyB0eXBlLgoKVGh1IE1hciAxOCAwMToyNDoyNSAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBjb25maWd1cmUuaW46IFVzZSAiZXhpdCAxIiwgbm90ICJleGl0ICgxKSIuCgkqIGNvbmZpZ3VyZTogUmVidWlsdC4KCldlZCBNYXIgMTcgMjM6MTc6NDIgMTk5OSAgTWFyayBLZXR0ZW5pcyAgPGtldHRlbmlzQGdudS5vcmc+CgoJKiBjb25maWcvdC1nbnUgKFNZU1RFTV9IRUFERVJfRElSKTogTmV3IHZhcmlhYmxlLiAgU2V0IHRvCglgL2luY2x1ZGUnIGluIG9yZGVyIHRvIGZpbmQgdGhlIHN5c3RlbSdzIGxpbWl0cy5oLgoKV2VkIE1hciAxNyAyMzowMDoxOCAxOTk5ICBSb2JlcnQgTGlwZSAgPHJvYmVydGxpcGVAdXNhLm5ldD4KCgkqIGZpeGluYy9maXhpbmNsLmM6IEluY2x1ZGUgYXV0by1ob3N0LmggaW5zdGVhZCBvZiBjb25maWcuaC4KCSogZml4aW5jL3Byb2NvcGVuLmM6IExpa2V3aXNlLgoJKiBmaXhpbmMvcmVnZXguYzogTGlrZXdpc2UuCgkqIGZpeGluYy9zZXJ2ZXIuYzogTGlrZXdpc2UuCgpXZWQgTWFyIDE3IDIyOjQ2OjEzIDE5OTkgIE1hcmsgRWxicmVjaHQgIDxzbm93YmFsbDNAdXNhLm5ldC4KCgkqIGNvbmZpZy9pMzg2L2dvMzIuaDogRGVsZXRlLgoJKiBjb25maWcvaTM4Ni9kamdwcC5oOiBOZXcuIFJlbmFtZWQgZnJvbSBnbzMyLmguCglBZGRlZCAtRERKR1BQPTIgdG8gQ1BQX1BSRURFRklORVMuCgkqIGNvbmZpZy9pMzg2L2dvMzItcnRlbXMuaDogRGVsZXRlLgoJKiBjb25maWcvaTM4Ni9kamdwcC1ydGVtcy5oOiBOZXcuIFJlbmFtZWQgZnJvbSBnbzMyLXJ0ZW1zLmguCglBZGRlZCAtRERKR1BQPTIgdG8gQ1BQX1BSRURFRklORVMuCgkqIGNvbmZpZy9pMzg2L3htLWdvMzIuaDogRGVsZXRlLgoJKiBjb25maWcvaTM4Ni94bS1kamdwcC5oOiBOZXcuIFJlbmFtZWQgZnJvbSB4bS1nbzMyLmguCgkqIGNvbmZpZy9pMzg2L3gtZ28zMjogRGVsZXRlLgoJKiBjb25maWcvaTM4Ni94LWRqZ3BwOiBOZXcuIFJlbmFtZWQgZnJvbSB4LWdvMzIuCgkqIGNvbmZpZy9pMzg2L3QtZ28zMjogRGVsZXRlLgoJKiBjb25maWcvaTM4Ni90LWRqZ3BwOiBOZXcuIFJlbmFtZWQgZnJvbSB0LWdvMzIuCgkqIGNvbmZpZ3VyZS5pbihwYy1tc2Rvc2RqZ3BwKTogU2V0IHhtX2ZpbGUgdG8gaTM4Ni94bS1kamdwcC5oLgoJU2V0IHRtX2ZpbGUgdG8gaTM4Ni9kamdwcC5oLiBTZXQgdG1ha2VfZmlsZSB0byBpMzg2L3QtZGpncHAuCglTZXQgeG1ha2VfZmlsZSB0byBpMzg2L3gtZGpncHAuCgkoKi1nbzMyLW1zZG9zLCAqLWdvMzIqKTogUmVtb3ZlIGVudHJpZXMuICBXYXJuIHRoYXQgR08zMi9ESkdQUCBWMS5YCglpcyBub3cgdW5zdXBwb3J0ZWQgYW5kICotcGMtbXNkb3NkamdwcCBmb3IgREpHUFAgVjIuWCBzaG91bGQgYmUKCXVzZWQgaW5zdGVhZC4KCSogY29uZmlndXJlOiBSZWJ1aWx0LgoKCSogZ2NjLmMgKHByb2Nlc3NfY29tbWFuZCk6IER1bXAgbGlua19jb21tYW5kX3NwZWMgdG9vLgoKV2VkIE1hciAxNyAyMDozODowOCAxOTk5ICBKZXJyeSBRdWlubiAgPGpxdWlubkBub3J0ZWxuZXR3b3Jrcy5jb20+CgkJCSAgSmVmZiBMYXcgIDxsYXdAY3lnbnVzLmNvbT4KCgkqIHBhLm1kOiBBZGQgcmVhbCBQQTgwMDAgc2NoZWR1bGluZyBpbmZvcm1hdGlvbi4KCgkqIHBhLmggKHByb2Nlc3Nvcl90eXBlKTogQWRkIFBST0NFU1NPUl84MDAwIHN5bWJvbC4KCShJU1NVRV9SQVRFKTogUmV2YW1wLCBpbmNsdWRpbmcgUEE4MDAwIHN1cHBvcnQuCgkqIHBhLmMgKG92ZXJyaWRlX29wdGlvbnMpOiBBZGQgODAwMCBhcyAtbXNjaGVkdWxlPSBvcHRpb24uCglEbyBub3QgY2FsbCBzdHJjbXAgaWYgcGFfY3B1X3N0cmluZyBpcyBudWxsLgoJKiBwYS5tZCAoYXR0ciBjcHUpOiBBZGQgODAwMC4KCSogaW52b2tlLnRleGk6IEFkZCBkb2N1bWVudGF0aW9uIGZvciBQQTgwMDAgc2NoZWR1bGluZy4KCldlZCBNYXIgMTcgMTg6MjA6MjQgMTk5OSAgRGF2aWQgUy4gTWlsbGVyICA8ZGF2ZW1AcmVkaGF0LmNvbT4KCgkqIGNvbmZpZy9zcGFyYy9zcGFyYy5oIChUQVJHRVRfU1dJVENIRVMsIFRBUkdFVF9PUFRJT05TKToKCUFkZCBkZXNjcmlwdGlvbnMuCgkqIGNvbmZpZy9zcGFyYy9zcDY0LWVsZi5oIChTVUJUQVJHRVRfU1dJVENIRVMpOiBMaWtld2lzZS4KCSogY29uZmlnL3NwYXJjL3NwbGV0LmggKFNVQlRBUkdFVF9TV0lUQ0hFUyk6IExpa2V3aXNlLgoKV2VkIE1hciAxNyAxNDo1MToxOSAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogZmxvdy5jIChjb21wdXRlX2ltbWVkaWF0ZV9kb21pbmF0b3JzKTogTmV3IGZ1bmN0aW9uLgoJKiBiYXNpYy1ibG9jay5oIChjb21wdXRlX2ltbWVkaWF0ZV9kb21pbmF0b3JzKTogRGVjbGFyZSBpdC4KCgkqIGFscGhhLmggKEhBUkRfUkVHTk9fTU9ERV9PSyk6IEFsbG93IG9ubHkgNCBhbmQgOCBieXRlIHVuaXQgbW9kZXMKCWluIEZQIHJlZ3MuCgkoTU9ERVNfVElFQUJMRV9QKTogRGVmaW5lIGFzeW1tZXRyaWNseSB3cnQgbW9kZXMgaWxsZWdhbCBpbiBGUCByZWdzLgoKV2VkIE1hciAxNyAxNDo0MTo0MSAxOTk5ICBOaWNrIENsaWZ0b24gIDxuaWNrY0BjeWdudXMuY29tPgoKCSogY29uZmlnL2FybS9hb3V0LmggKEFTTV9HRU5FUkFURV9JTlRFUk5BTF9MQUJFTCk6IEZpeCBjb21waWxlCgl0aW1lIHdhcm5pbmcuCgkqIGNvbmZpZy9hcm0vYXJtLm1kOiBGaXggdmFyaW91cyBjb21waWxlIHRpbWUgd2FybmluZ3MuCgkqIGNvbmZpZy9hcm0vYXJtLmg6IEZpeCB2YXJpb3VzIGNvbXBpbGUgdGltZSB3YXJuaW5ncy4gIEFkZAoJZnVuY3Rpb24gcHJvdG90eXBlcy4KCSogY29uZmlnL2FybS9hcm0uYzogRml4IHZhcmlvdXMgY29tcGlsZSB0aW1lIHdhcm5pbmdzLgoJKGFybV9vdmVycmlkZV9vcHRpb25zKTogUmVvcmdhbml6ZSB0byBzZXBhcmF0ZSB0dW5pbmcgZnJvbQoJdGFyZ2V0dGluZy4KCShiaXRfY291bnQpOiBOZXcgZnVuY3Rpb246IFJldHVybiBhIGNvdW50IG9mIHRoZSBudW1iZXIgb2YgYml0cwoJc2V0IGluIGEgd29yZC4KCldlZCBNYXIgMTcgMjE6Mjk6MTIgMTk5OSAgSiJvcm4gUmVubmVja2UgIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIHJlbG9hZDEuYyAoZWxpbWluYXRlX3JlZ3MpOiBEb24ndCBrZWVwIFJFR19ERUFEIG5vdGVzIGFyb3VuZCBmb3IKCXRoaW5ncyB0aGF0IHdlcmUgZWxpbWluYXRlZC4KCldlZCBNYXIgMTcgMTI6MTY6MjYgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGZ1bmN0aW9uLmMgKGZpeHVwX3Zhcl9yZWZzXzEpOiBGaXJzdCB0cnkgbW92aW5nIHRoZSBleHByZXNzaW9uCglkaXJlY3RseSBpbnRvIGEgcmVnaXN0ZXIuICBEb24ndCBzZXBhcmF0ZSBjYzAgc2V0dGVyIGFuZCB1c2VyLgoKV2VkIE1hciAxNyAxMToyMDoyOSAxOTk5ICBEYXZlIEJyb2xsZXkgIDxicm9sbGV5QGN5Z251cy5jb20+CgoJKiBjcHBmaWxlcy5jIChQSVBFX0JVRik6ICNkZWZpbmUgUElQRV9CVUYgaWYgbm90IGRlZmluZWQgYWxyZWFkeS4KCldlZCBNYXIgMTcgMDk6MjU6MDYgMTk5OSAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogYy1sZXguYzogRG9uJ3QgaW5jbHVkZSBzZXRqbXAuaC4KCShwYXJzZV9mbG9hdCk6IE5ldyBzdGF0aWMgZnVuY3Rpb24uCgkocGZfYXJncyk6IE5ldyBzdHJ1Y3QuCgkoeXlsZXgpOiBVc2UgdGhlbSBpbiBjYWxsIHRvIGBkb19mbG9hdF9oYW5kbGVyJy4KCjE5OTktMDMtMTYgIEFuZHJlYXMgU2Nod2FiICA8c2Nod2FiQGlzc2FuLmNzLnVuaS1kb3J0bXVuZC5kZT4KCgkqIGNleHAueSAoeXllcnJvcik6IENhbGwgdmVycm9yIHRvIGdldCBhIHVzZWZ1bCBlcnJvciBtZXNzYWdlLgoJKiBjZXhwLmM6IFJlYnVpbHQuCgoJKiAuZ2RiaW5pdDogTW92ZSBjb21tYW5kIHRvIHB1dCBicmVha3BvaW50IGF0IGFib3J0IHRvIGVuZCBvZiBmaWxlCglzbyB0aGF0IGdkYiBkb2VzIG5vdCBiYWlsIG91dCBlYXJseS4KClR1ZSBNYXIgMTYgMTU6MzA6MTkgMTk5OSAgTmljayBDbGlmdG9uICA8bmlja2NAY3lnbnVzLmNvbT4KCgkqIHJ0bC5oOiBSZW5hbWUgcHJvdG90eXBlIGZvciBmcmVlX2JiX21lbW9yeSB0byBmcmVlX2JiX21lbS4KClR1ZSBNYXIgMTYgMjM6NDA6MDkgMTk5OSAgSiJvcm4gUmVubmVja2UgIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIHNoLm1kIChtb3ZzaV9pKTogTW92ZSB0L3IgYWx0ZXJuYXRpdmUgYWZ0ZXIgci9ySSBhbHRlcm5hdGl2ZS4KClR1ZSBNYXIgMTYgMTM6NDQ6NTAgMTk5OSAgSmltIFdpbHNvbiAgPHdpbHNvbkBjeWdudXMuY29tPgoKCSogbW4xMDIwMC9tbjEwMjAwLm1kIChhZGRzaTMsIHN1YnNpMywgYXNobHNpMywgbHNocnNpMywgYXNocnNpMyk6CglEZWxldGUgZW1pdF9saWJyYXJ5X2NhbGxfdmFsdWUgZGVjbGFyYXRpb24uCgoxOTk5LTAzLTE2ICBaYWNrIFdlaW5iZXJnICA8emFja0ByYWJpLmNvbHVtYmlhLmVkdT4KCgkqIGNwcGZpbGVzLmMgKHJlYWRfYW5kX3ByZXNjYW4pOiBNYXAgYmFja3NsYXNoLW5ld2xpbmUgdG8gJ1xyJwoJKHdoaWNoIGNhbm5vdCBvdGhlcndpc2UgYXBwZWFyIGluIHRoZSBwcm9jZXNzZWQgYnVmZmVyKSBhbmQKCW1vdmUgaXQgb3V0IG9mIHRva2VucyB0aGF0IGl0IGFwcGVhcnMgaW4gdGhlIG1pZGRsZSBvZi4KCUltcHJvdmUgcGVyZm9ybWFuY2UuCgkoZmluZF9wb3NpdGlvbik6IE5ldyBmdW5jdGlvbi4KCgkqIGNwcGxpYi5jOiBcciAob25lIGNoYXJhY3RlcikgaW5kaWNhdGVzIGJhY2tzbGFzaAoJbmV3bGluZSwgbm90IFxcXG4gKHR3byBjaGFyYWN0ZXJzKS4gIEl0IGNhbm5vdCBhcHBlYXIgaW4gdGhlCgltaWRkbGUgb2YgYSB0b2tlbi4gIENhbGwgQ1BQX0JVTVBfTElORSAocGZpbGUpIHdoZW5ldmVyCglwYXJzaW5nIG1vdmVzIHBhc3QgXG4gb3IgXHIuICBJbmNyZW1lbnQgcGZpbGUtPmxpbmVubyB3aGVuZXZlcgoJYSBcbiBpcyBwbGFjZWQgaW50byB0b2tlbl9idWZmZXIuICBPbmx5IG9uZSBtYXJrIGNhbiBleGlzdCBhdAoJYSB0aW1lLCBhbmQgQ1BQX0JVTVBfTElORSBtdXN0IG5vdCBiZSB1c2VkIHdoaWxlIGl0IGlzCglhY3RpdmUuICBJdCBpcyBhdXRvbWF0aWNhbGx5IGNsZWFyZWQgYnkgY3BwX3BvcF9idWZmZXIgYW5kCglwYXJzZV9nb3RvX21hcmsuICBcciBpcyBub3QgaW4gaXNfaG9yX3NwYWNlIG9yIGlzX3NwYWNlLgoKCShORVdMSU5FX0ZJWCwgTkVXTElORV9GSVgxLCBhZGp1c3RfcG9zaXRpb24sCgl1cGRhdGVfcG9zaXRpb24sIGNvdW50X25ld2xpbmVzLCBwYXJzZV9tb3ZlX21hcmspOiBSZW1vdmVkLgoJKHBhcnNlX3N0cmluZywgY29weV9jb21tZW50KTogTmV3IGZ1bmN0aW9ucy4KCShwYXJzZV9uYW1lKTogUmV0dXJucyB2b2lkLgoJKHBhcnNlX3NldF9tYXJrLCBwYXJzZV9jbGVhcl9tYXJrLCBwYXJzZV9nb3RvX21hcmspOiBUYWtlIG9ubHkKCW9uZSBhcmd1bWVudCwgYSBjcHBfcmVhZGVyICouICBDaGFuZ2UgZm9yIG5ldyBtYXJraW5nIHNjaGVtZS4KCShza2lwX2NvbW1lbnQpOiBIYW5kbGUgQ0hJTEwgbGluZSBjb21tZW50cyB0b28uICBTZWNvbmQKCWFyZ3VtZW50IGlzIG5vdyBmaXJzdCBjaGFyYWN0ZXIgb2YgY29tbWVudCBtYXJrZXI7IGFsbCBjYWxsZXJzCgljaGFuZ2VkLiAgSXNzdWUgZXJyb3IgZm9yIHVudGVybWluYXRlZCBibG9jayBjb21tZW50IGhlcmUuCgkoY3BwX3NraXBfaHNwYWNlKTogUmVjb2duaXplIENISUxMIGNvbW1lbnRzLgoJKGNvcHlfcmVzdF9vZl9saW5lKTogTGlrZXdpc2UuICBDYWxsIHNraXBfY29tbWVudCBhbmQKCXBhcnNlX3N0cmluZyBkaXJlY3RseSwgZG9uJ3QgZ28gdGhyb3VnaCBjcHBfZ2V0X3Rva2VuLiAgRW1pdAoJIi8qKi8iIGZvciBibG9jayBjb21tZW50cyBpZiAtdHJhZGl0aW9uYWwgKGNyZWF0ZV9kZWZpbml0aW9uCgluZWVkcyB0aGlzKS4KCShkb19kZWZpbmUpOiBEb24ndCBwbGF5IHdpdGggcHV0X291dF9jb21tZW50cy4KCShjcHBfcHVzaF9idWZmZXIpOiBJbml0aWFsaXplIC0+bWFyayB0byAtMS4KCShjcHBfYnVmX2xpbmVfYW5kX2NvbCk6IEp1c3QgcmVhZCBvdXQgdGhlIHZhbHVlcyBpbiB0aGUgYnVmZmVyCglzdHJ1Y3R1cmUuCgkob3V0cHV0X2xpbmVfY29tbWFuZCk6IFVzZSBjcHBfYnVmX2xpbmVfYW5kX2NvbC4gIEZpeAoJZm9ybWF0dGluZy4gIFJlbW92ZSBzdGFsZSBjb2RlLgoJKGNwcF9nZXRfdG9rZW4pOiBCcmVhayBvdXQgc3RyaW5nIHBhcnNpbmcgY29kZSB0bwoJcGFyc2Vfc3RyaW5nLiAgVXNlIHNraXBfY29tbWVudCBmb3IgQ0hJTEwgY29tbWVudHMgdG9vLiAgVXNlCgljb3B5X2NvbW1lbnQgZm9yIHB1dF9vdXRfY29tbWVudHMgaW5zdGVhZCBvZiBkaW5raW5nIHdpdGgKCW1hcmtzLiAgUmVtb3ZlIHN0YWxlIGNvZGUuICBEb24ndCBjYWxsIG91dHB1dF9saW5lX2NvbW1hbmQKCXVubGVzcyBpdCdzIG5lY2Vzc2FyeS4KCgkqIGNwcGxpYi5oIChwYXJzZV9tYXJrZXIpOiBSZW1vdmVkLgoJKHN0cnVjdCBjcHBfYnVmZmVyKTogTGluZV9iYXNlIGlzIG5vdyBhbiB1bnNpZ25lZCBjaGFyICo7IGFkZAoJYG1hcmsnIFtsb25nXSwgcmVtb3ZlIGBtYXJrcycgW3N0cnVjdCBwYXJzZV9tYXJrZXIgKl0uCgkocGFyc2Vfc2V0X21hcmssIHBhcnNlX2NsZWFyX21hcmssIHBhcnNlX2dvdG9fbWFyayk6IFVwZGF0ZQoJcHJvdG90eXBlcy4KCShDUFBfQlVNUF9MSU5FLCBDUFBfQlVNUF9CVUZGRVJfTElORSk6IE5ldyBtYWNyb3MuCgkqIGNwcGluaXQuYyAoaXNfaG9yX3NwYWNlLCBpc19zcGFjZSk6ICdccicgaXMgbm90IGNvbnNpZGVyZWQKCXdoaXRlc3BhY2UuCgkqIGNwcGV4cC5jIChjcHBfcGFyc2VfZXhwcmVzc2lvbik6IFVzZSBjcHBfc2tpcF9oc3BhY2UsIG5vdAoJU0tJUF9XSElURV9TUEFDRS4KCSogY3BwaGFzaC5jIChtYWNhcmcpOiBEaXNhYmxlIGxpbmUgY29tbWFuZHMgd2hpbGUgZXhwYW5kaW5nLgoKVHVlIE1hciAxNiAxMTozMDoxOSAxOTk5ICBHYXZpbiBSb21pZy1Lb2NoICA8Z2F2aW5AY3lnbnVzLmNvbT4KCgkqIGMtbGV4LmMgKHl5bGV4KSA6IFJlbW92ZSB3YXJuaW5nIGZvciBpbnRlZ2VyIGxpdGVyYWxzIGJlaW5nCglsYXJnZXIgdGhhbiB0aGUgbGFyZ2VzdCB0YXJnZXQgaW50LiAgQWRkIHdhcm5pbmcgZm9yIGludGVnZXIKCWxpdGVyYWwgYmVpbmcgbGFyZ2VyIHRoYW4gdGhhbiBpdHMgY2hvc2VuIHR5cGUuCgpUdWUgTWFyIDE2IDEwOjUzOjE3IDE5OTkgIEdhdmluIFJvbWlnLUtvY2ggIDxnYXZpbkBjeWdudXMuY29tPgoKCSogaW52b2tlLnRleGk6IEFkZCAtbWxvbmczMiBkb2N1bWVudGF0aW9uLgoJKiBjb25maWcvbWlwcy9taXBzLmggKG1pcHNfZXhwbGljaXRfdHlwZV9zaXplX3N0cmluZyk6IE5ldy4KCShUQVJHRVRfU1dJVENIRVMpOiBBZGQgJ2xvbmczMicuCgkoVEFSR0VUX09QVElPTlMpOiBBZGQgJ2V4cGxpY2l0LXR5cGUtc2l6ZScuCgkoQ0MxX1NQRUNTKTogU2V0IC1tZXhwbGljaXQtdHlwZS1zaXplLgoJKExPTkdfTUFYX1NQRUMpOiBDaGFuZ2UgYSB1c2Ugb2YgJ25vLWxvbmc2NCcgdG8gJ2xvbmczMicuCgkqIGNvbmZpZy9taXBzL2FiaTY0LmggKExPTkdfTUFYX1NQRUMpOiBTYW1lLiAgQWRkICdtYWJpPTMyJy4KCSogY29uZmlnL21pcHMvbWlwcy5jIChtaXBzX2V4cGxpY2l0X3R5cGVfc2l6ZV9zdHJpbmcpOiBOZXcuCgkob3ZlcnJpZGVfb3B0aW9ucyk6IFVzZSBpdC4KCSogY29uZmlnL21pcHMvb3Nmcm9zZS5oIChDQzFfU1BFQ1MpOiBTZXQgLW1leHBsaWNpdC10eXBlLXNpemUuCgoJKiBjb25maWcvbWlwcy9taXBzLmggKFNVQlRBUkdFVF9DUFBfU0laRV9TUEVDKToKCVBvaW50ZXIgc2l6ZSBub3cgZGVwZW5kcyBvbiBib3RoIHNpemUgbG9uZ3MgYW5kIHNpemUgb2YgR1AKCXJlZ2lzdGVycy4KClR1ZSBNYXIgMTYgMTA6MjI6MjIgMTk5OSAgR2F2aW4gUm9taWctS29jaCAgPGdhdmluQGN5Z251cy5jb20+CgoJKiBjb25maWcvbWlwcy9pcmlzLmggKENUT1JTX1NFQ1RJT05fQVNNX09QLERUT1JTX1NFQ1RJT05fQVNNX09QLAoJZHRvcnNfc2VjdGlvbik6IFVzZSBQbW9kZSA9PSBESW1vZGUgcmF0aGVyIHRoYW4gVEFSR0VUX0xPTkc2NC4KCSogY29uZmlnL21pcHMvbWlwcy5jIChvdmVycmlkZV9vcHRpb25zKTogQWxsb3cgLW1sb25nNjQgYW5kCgktbWludDY0IHdpdGggLW1pcHMyIG9yIGxlc3MuCgkqIGNvbmZpZy9taXBzL21pcHMuaCAoTUFTS19MT05HNjQpOiBGaXggY29tbWVudC4KCShQT0lOVEVSX1NJWkUpOiBVc2UgUG1vZGUgPT0gREltb2RlIHJhdGhlciB0aGFuIFRBUkdFVF9MT05HNjQuCgkoUG1vZGUpOiBNYWtlIFBtb2RlIHRoZSBzbWFsbGVyIG9mIGxvbmdzIG9yIGdwIHJlZ2lzdGVycy4KCSogaW52b2tlLnRleGk6IE5vdGUgdGhlIG5ldyBzaXplIGZvciBwb2ludGVycy4KCk1vbiBNYXIgMTUgMjI6NDU6MjUgMTk5OSAgRGF2aWQgRWRlbHNvaG4gIDxlZGVsc29obkBnbnUub3JnPgoKCSogcnM2MDAwLmggKEFTTV9PVVRQVVRfe0RPVUJMRSxGTE9BVH0pOiBBbHdheXMgZ2VuZXJhdGUgSUVFRSA3NTQKCWJpdC1wYXR0ZXJuIGRpcmVjdGx5LgoJKEFTTV9PVVRQVVRfUkVHX3tQVVNILFBPUH0pOiBEZWxldGUuCgkqIHJzNjAwMC5jIChmaXJzdF9yZWdfdG9fc2F2ZSk6IElmIHByb2ZpbGluZyBhbmQgY29udGV4dCBuZWVkZWQsCglhbGxvY2F0ZSBhIHJlZyB0byBzYXZlIHN0YXRpYyBjaGFpbiBmb3IgYWxsIEFCSXMuICBGb3IgQUlYCglwcm9maWxpbmcsIGNhbGN1bGF0ZSBwYXJhbWV0ZXIgcmVnaXN0ZXJzIHRvIHNhdmUgYmFzZWQgb24gbmVlZC4KCShvdXRwdXRfZnVuY3Rpb25fcHJvZmlsZXIpOiBTYXZlIGFuZCByZXN0b3JlIHN0YXRpYyBjaGFpbiBhcm91bmQKCXByb2ZpbGUgY2FsbCBmb3IgYWxsIEFCSXMuCgoxOTk5LTAzLTE1ICBaYWNrIFdlaW5iZXJnICA8emFja0ByYWJpLmNvbHVtYmlhLmVkdT4KCgkqIGNwcGluaXQuYzogSW5zdGVhZCBvZiBvbmUgcGVuZGluZyBsaXN0LCBrZWVwIHNlcGFyYXRlIGxpc3RzCglmb3IgZWFjaCBjYXRlZ29yeSBvZiBwZW5kaW5nIG9wdGlvbjogLUQvLVUsIC1BLCAtaW5jbHVkZSwKCS1pbWFjcm9zLiAgTW92ZSB0aGUgZm91ciBwYXJ0aWFsIGluY2x1ZGUtcGF0aCBsaXN0cyBpbnRvIHRoZQoJcGVuZGluZyBibG9jay4gIFVzZSBoZWFkIGFuZCB0YWlsIHBvaW50ZXJzIHNvIHdlIGRvbid0IGV2ZXIKCWhhdmUgdG8gcmV2ZXJzZSB0aGUgbGlzdHMuCgoJKGNwcF9zdGFydF9yZWFkKTogQnJlYWsgb3V0IGJsb2NrcyBvZiBjb2RlIHRvIHRoZWlyIG93bgoJZnVuY3Rpb25zOiBpbnN0YWxsX3ByZWRlZnMgYW5kIGluaXRpYWxpemVfZGVwZW5kZW5jeV9vdXRwdXQuCglVc2UgcGF0aF9pbmNsdWRlIGZvciBDX0lOQ0xVREVfUEFUSCBhbmQgZnJpZW5kcyBhcyB3ZWxsIGFzCglDUEFUSC4gIFJlbW92ZSBpbmNsdWRlX2RlZmF1bHRzIGd1bmsuICBXYXJuIGFib3V0IHRoZQoJY29tYmluYXRpb24gb2YgLWxhbmctY2hpbGwgYW5kIC10cmlncmFwaHMuICBPcHRpbWl6ZSBzdHJpbmcKCWJhc2hpbmcuICBXYWxrIGVhY2ggcGVuZGluZyBsaXN0IG9uY2UsIGRlYWxsb2NhdGluZyBhcyB3ZSBnby4KCgkoYXBwZW5kX2luY2x1ZGVfY2hhaW4pOiBCcm91Z2h0IG92ZXIgZnJvbSBjcHBmaWxlcy5jLiAgTWFyawoJZGlycyBhcyBzeXN0ZW0gaW5jbHVkZSBkaXJzIGlmIGFuZCBvbmx5IGlmIGFwcGVuZGluZyB0bwoJc3lzdGVtIGluY2x1ZGUgcGF0aC4gSWYgb3B0cy0+dmVyYm9zZSwgcHJpbnQgYSBub3RpY2Ugd2hlbiBhCglkaXIgaXMgZHJvcHBlZCBmcm9tIHRoZSBpbmNsdWRlIHBhdGggYmVjYXVzZSBpdCBkb2Vzbid0CglleGlzdC4gIEZpeCBtZW1vcnkgbGVhazogdGhpcyBmdW5jdGlvbiBpcyBub3Qgc3VwcG9zZWQgdG8gY29weQoJaXRzIERJUiBhcmd1bWVudC4KCgkobnJldmVyc2VfcGVuZGluZywgcHVzaF9wZW5kaW5nKTogUmVtb3ZlZC4KCShBUFBFTkQpOiBOZXcgbWFjcm8gZm9yIGFkZGluZyB0byBwZW5kaW5nIGxpc3RzLgoJKHBhdGhfaW5jbHVkZSk6IENhbiBub3cgYWRkIHRvIGFueSBwYXJ0aWFsIGluY2x1ZGUgcGF0aC4KCShiYXNlX25hbWUpOiBCcmluZyBvdmVyIGZyb20gY2NjcC5jLgoJKGNwcF9vcHRpb25zX2luaXQpOiBBbGxvY2F0ZSB0aGUgcGVuZGluZyBibG9jay4KCShjcHBfaGFuZGxlX29wdGlvbik6IEFkZCAtLXZlcnNpb24uICBFeGl0IGFmdGVyIC0taGVscC4gIEZpeAoJZm9ybWF0dGluZy4gIE9yZGVyIC1pZm9vIG9wdGlvbnMgYnkgZnJlcXVlbmN5IG9mIHVzYWdlLgoJKGluc3RhbGxfcHJlZGVmcyk6IE5ldyBmdW5jdGlvbiwgc2ltcGxpZmllZCB2ZXJzaW9uIG9mIGNvZGUKCXRoYXQgd2FzIGluIGNwcF9zdGFydF9yZWFkLgoJKGluaXRpYWxpemVfZGVwZW5kZW5jeV9vdXRwdXQpOiBMaWtld2lzZS4gIFVuZGVyc3RhbmQgT0JKRUNUX1NVRkZJWC4KCgkqIGNwcGZpbGVzLmMgKHNpbXBsaWZ5X3BhdGhuYW1lKTogRXhwb3J0LgoJKG1lcmdlX2luY2x1ZGVfY2hhaW5zKTogRG9uJ3QgbnJldmVyc2UgdGhlIGxpc3RzLiAgSWYKCW9wdHMtPnZlcmJvc2UsIHByaW50IGEgbm90aWNlIHdoZW4gYSBkdXBsaWNhdGUgZGlyIGlzIGRldGVjdGVkCglhbmQgZHJvcHBlZCBmcm9tIHRoZSBpbmNsdWRlIHBhdGguCgkoZmluY2x1ZGUpOiBGaXggZXhjZXNzaXZlIGNsZXZlcm5lc3MgaW4gc2V0dGluZwoJZnAtPnN5c3RlbV9oZWFkZXJfcC4KCShhY3R1YWxfZGlyZWN0b3J5KTogU2V0IHgtPnN5c3AgZnJvbQoJQ1BQX0JVRkZFUiAocGZpbGUpLT5zeXN0ZW1faGVhZGVyX3Agc28gdGhhdCBvbmUgc3lzdGVtIGhlYWRlcgoJbWF5IGluY2x1ZGUgYW5vdGhlciB3aXRoICIiLgoJKGRlcHNfb3V0cHV0KTogRml4IGRvdWJsZSBhZGp1c3RtZW50IG9mIGRlcHNfc2l6ZSB3aGljaCB3b3VsZAoJY2F1c2UgYWxsIGRlcGVuZGVuY2llcyBhZnRlciB0aGUgZmlyc3QgdHdvIGxpbmVzIHRvIGJlIGxvc3QuCgoJKiBjcHBsaWIuYyAoY3BwX3VuYXNzZXJ0KTogTmV3IGZ1bmN0aW9uLgoJKiBjcHBsaWIuaDogTGF5IG91dCBzdHJ1Y3QgY3BwX3BlbmRpbmcgaGVyZS4gIEFkanVzdAoJcHJvdG90eXBlcy4gIEFkZCBpbmNsdWRlX3ByZWZpeF9sZW4gdG8gc3RydWN0IGNwcF9vcHRpb25zLgoKTW9uIE1hciAxNSAxNjowMTo1MiAxOTk5ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CgoJKiBjb25maWcvbWlzcC9taXBzLmggKFJFR0lTVEVSX01PVkVfQ09TVCk6IE1ha2UgdGhlIGNvc3Qgb2YgbW92aW5nCglmcm9tIEhJL0xPL0hJTE8vTUQgaW50byBnZW5lcmFsIHJlZ2lzdGVycyB0aGUgc2FtZSBhcyBmb3Igb25lCglvZiBtb3ZpbmcgZ2VuZXJhbCByZWdpc3RlcnMgdG8gSEkvTE8vSElMTy9NRC4KCk1vbiBNYXIgMTUgMTI6Mzk6MzggMTk5OSAgTmljayBDbGlmdG9uICA8bmlja2NAY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy9tMzJyL20zMnIuYyAoaW5pdF9pZGVudHMpOiBOZXcgZnVuY3Rpb24uICBJbml0aWFsaXplCglzdGF0aWMgdHJlZSBub2RlcyBmb3IgbTMyciBzcGVjaWZpYyBhdHRyaWJ1dGUgaWRlbnRpZmllcnMuICBSZW1vdmUKCWxlYWRpbmcgYW5kIHRyYWlsaW5nIGRvdWJsZSB1bmRlcnNjb3JlcyBmcm9tIHRoZSBhdHRyaWJ1dGUgbmFtZXMuCgkobTMycl92YWxpZF9tYWNoaW5lX2RlY2xfYXR0cmlidXRlKTogQ2FsbCBpbml0X2lkZW50cy4KCShtMzJyX2VuY29kZV9zZWN0aW9uX2luZm8pOiBDYWxsIGluaXRfaWRlbnRzLgoKTW9uIE1hciAxNSAxMDoyMDoyMCAxOTk5ICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogcmVsb2FkLmMgKGZpbmRfcmVsb2Fkcyk6IEFkZCBhIFJFR19MQUJFTCBub3RlIGlmIHdlIHN1YnN0aXR1dGUgYQoJTEFCRUxfUkVGIGZvciBzb21ldGhpbmcgZWxzZS4KCk1vbiBNYXIgMTUgMDg6MjQ6MTcgMTk5OSAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogZm9sZC1jb25zdC5jIChleGFjdF9yZWFsX2ludmVyc2UpOiBNb3ZlIHZhcmlhYmxlIGBmbG9hdF9lcnJvcicKCWludG8gdGhlIHNjb3BlIHdoZXJlIGl0IGlzIHVzZWQuCgkoY29uc3RfYmlub3BfMSk6IE5ldyBzdGF0aWMgZnVuY3Rpb24uCgkoY2JfYXJncyk6IE5ldyBzdHJ1Y3QuCgkoY29uc3RfYmlub3ApOiBVc2UgdGhlbSBpbiBjYWxsIHRvIGBkb19mbG9hdF9oYW5kbGVyJy4KCShmb2xkX2NvbnZlcnRfMSk6IE5ldyBzdGF0aWMgZnVuY3Rpb24uCgkoZmNfYXJncyk6IE5ldyBzdHJ1Y3QuCgkoZm9sZF9jb252ZXJ0KTogVXNlIHRoZW0gaW4gY2FsbCB0byBgZG9fZmxvYXRfaGFuZGxlcicuCgpNb24gTWFyIDE1IDIyOjUwOjE4IDE5OTkgIE1pY2hhZWwgSGF5ZXMgIDxtLmhheWVzQGVsZWMuY2FudGVyYnVyeS5hYy5uej4KCgkqIHJ0bGFuYWwuYyAoYXV0b19pbmNfcCk6IE5ldyBmdW5jdGlvbi4KCSogcnRsLmggKGF1dG9faW5jX3ApOiBQcm90b3R5cGUgaXQuCgkqIHJlbG9hZDEuYyAoYWRkX2F1dG9faW5jX25vdGVzKTogTmV3IGZ1bmN0aW9uLgoJKHJlbG9hZCk6IFN0cmlwIFJFR19JTkMgbm90ZXMgYW5kIGNhbGwgYWRkX2F1dG9faW5jX25vdGVzCglmb3IgZWFjaCBpbnNuIHRvIHJlc3RvcmUgdGhlbSBjb3JyZWN0bHkuCgoxOTk5LTAzLTE1ICBNYW5mcmVkIEhvbGxzdGVpbiAgPG1hbmZyZWRAcy1kaXJla3RuZXQuZGU+CgoJKiBmaXhpbmMvTWFrZWZpbGUuaW4gKHByb2NvcGVuLm8pOiBMaXN0IHRoZSBhY3R1YWwKCWRlcGVuZGVuY2llcy4KClN1biBNYXIgMTQgMTY6MjI6MTAgMTk5OSAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogY3NlLmMgKGNoZWNrX2ZvbGRfY29uc3RzKTogTmV3IHN0YXRpYyBmdW5jdGlvbi4KCShjZmNfYXJncyk6IE5ldyBzdHJ1Y3QuCgkoc2ltcGxpZnlfcmVsYXRpb25hbF9vcGVyYXRpb24pOiBVc2UgdGhlbSBpbiBjYWxsIHRvCglgZG9fZmxvYXRfaGFuZGxlcicuCgoJKiB0b3BsZXYuYyAoZG9fZmxvYXRfaGFuZGxlcik6IE5ldyBmdW5jdGlvbiB0byB3cmFwIGNhbGxzIHRvCglzZXRqbXAvc2V0X2Zsb2F0X2hhbmRsZXIuCgoJKiB0b3BsZXYuaCAoZG9fZmxvYXRfaGFuZGxlcik6IEFkZCBleHRlcm4gcHJvdG90eXBlLgoKCSogdHJlZS5jIChidWlsZF9yZWFsX2Zyb21faW50X2NzdF8xKTogTmV3IHN0YXRpYyBmdW5jdGlvbi4KCShicmZpY19hcmdzKTogTmV3IHN0cnVjdC4KCShidWlsZF9yZWFsX2Zyb21faW50X2NzdCk6IFVzZSB0aGVtIGluIGNhbGwgdG8KCWBkb19mbG9hdF9oYW5kbGVyJy4KClN1biBNYXIgMTQgMDE6MTU6MDYgMTk5OSAgSmVmZiBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHZlcnNpb24uYzogQnVtcCBmb3Igc25hcHNob3QuCgpTYXQgTWFyIDEzIDE3OjM3OjE4IDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBoYWlmYS1zY2hlZC5jIChzY2hlZF9hbmFseXplXzEpOiBPbmx5IGNsZWFyIHJlZ19sYXN0X3VzZXMgb24gYSBTRVQuCgpTYXQgTWFyIDEzIDExOjM2OjE2IDE5OTkgIFJpY2hhcmQgRWFybnNoYXcgIChyZWFybnNoYUBhcm0uY29tKQoKCSogYXJtLmMgKGFybV9zcGxpdF9jb25zdGFudCk6IERvbid0IHRyeSB0byBmb3JjZSBhIGNvbnN0YW50IHRvCgltZW1vcnkgYWZ0ZXIgYXJtX3Jlb3JnIGhhcyBydW4uCgkoYWZ0ZXJfYXJtX3Jlb3JnKTogTmV3IHN0YXRpYyB2YXJpYWJsZS4KCShhcm1fcmVvcmcpOiBTZXQgaXQuCgkob3V0cHV0X2Z1bmNfZXBpbG9ndWUpOiBDbGVhciBpdC4KCkZyaSBNYXIgMTIgMjA6MjY6MzIgMTk5OSAgRGF2aWQgRWRlbHNvaG4gIDxlZGVsc29obkBnbnUub3JnPgoKCSogY29uZmlndXJlLmluICh7cnM2MDAwLHBvd2VycGN9LWlibS1haXgqKTogU2V0IGZsb2F0X2Zvcm1hdCB0byBub25lLgoJKiBjb25maWd1cmU6IFJlYnVpbHQuCgpGcmkgTWFyIDEyIDIwOjQ1OjMwIDE5OTkgIEoib3JuIFJlbm5lY2tlICA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiB1bnJvbGwuYyAobG9vcF9pdGVyYXRpb25zKTogRG9uJ3QgcmV0dXJuIGEgZmluYWwgdmFsdWUgZm9yIEVRCgljb21wYXJpc29uIGxvb3BzLgoKRnJpIE1hciAxMiAxMjozNTowMSAxOTk5ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CgoJKiByZWxvYWQxLmMgKGNhbGN1bGF0ZV9uZWVkc19hbGxfaW5zbnMpOiBXaGVuIGlnbm9yZSBlcXVpdmFsZW5jZQoJc2V0dGluZyBpbnNuLCBjbGVhciBuZWVkX2VsaW0sIG5lZWRfcmVsb2FkLCBhbmQgbmVlZF9vcGVyYW5kX2NoYW5nZS4KCkZyaSBNYXIgMTIgMDc6NTQ6NDMgMTk5OSAgQnJ1Y2UgS29yYiAgPGtvcmJAZGF0YWRlc2lnbi5jb20+CgoJKiBmaXhpbmMvZml4aW5jLio6IFNvbWUgY2hhbmdlcyBmcm9tIHRoZSBmaXhpbmNsLWJyYW5jaAoJd2VyZSBub3QgYXBwbGllZCAoPz8hISkuICBDb3JyZWN0ZWQuCgoJKiBmaXhpbmMvTWFrZWZpbGUuaW46IFNhbWUgdGhpbmcuCgpGcmkgTWFyIDEyIDAwOjUxOjQzIDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGV4cHIuYyAoZXhwYW5kX2V4cHIpOiBBbGxvdyBhIENBTExfRVhQUiB3aXRoIGEgbW9kZSB3aWRlciB0aGFuCglNQVhfSU5URUdFUl9DT01QVVRBVElPTl9NT0RFLgoKVGh1IE1hciAxMSAxNDowMDo1OCAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogYWxwaGEuaCAoSEFSRF9SRUdOT19NT0RFX09LKTogRGlzYWxsb3cgUUkvSEltb2RlIGluIGZwIHJlZ3MuCgkoTU9ERVNfVElFQUJMRV9QKTogVXBkYXRlLgoKCSogYWxwaGEubWQgKGV2NV9lMCk6IENvbmZsaWN0IGxvYWRzIGFuZCBzdG9yZXMuCgpUaHUgTWFyIDExIDEzOjU1OjUyIDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBtYWNobW9kZS5oIChzbWFsbGVzdF9tb2RlX2Zvcl9zaXplKTogUHJvdG90eXBlLgoJKiBzdG9yLWxheW91dC5jIChzbWFsbGVzdF9tb2RlX2Zvcl9zaXplKTogUmVtb3ZlIHN0YXRpYy4KClRodSBNYXIgMTEgMjE6MjU6NTkgMTk5OSAgSiJvcm4gUmVubmVja2UgIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIGxvb3AuYyAoc3RyZW5ndGhfcmVkdWNlKTogRG9uJ3QgZG8gYml2IGluY3JlbWVudCAtPiBERVNUX1JFRyBnaXYKCWNvbnZlcnNpb24gaWYgd2UgZG9uJ3Qga25vdyB0aGUgbGlmZXRpbWUuCgpUaHUgTWFyIDExIDIwOjM3OjU5IDE5OTkgIEoib3JuIFJlbm5lY2tlICA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiByZWxvYWQuMWMgKGRlbGV0ZV9hZGRyZXNzX3JlbG9hZHNfMSk6IENoZWNrIGZvciByZWxvYWRzIG9mCglDVVJSRU5UX0lOU04gZXZlbiBpZiBpdCBzZXRzIERTVC4KClRodSBNYXIgMTEgMTA6Mjk6NTAgMTk5OSAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZHdhcmYyb3V0LmMgKGFkZF9BVF9sYmxfb2Zmc2V0KTogUmVuYW1lIGZyb20gYWRkX0FUX3NlY3Rpb25fb2Zmc2V0LgoJKHByaW50X2RpZSwgc2l6ZV9vZl9kaWUsIHZhbHVlX2Zvcm1hdCwgb3V0cHV0X2RpZSk6IEFkanVzdC4KClRodSBNYXIgMTEgMTA6Mjc6NDIgMTk5OSAgUm9iZXJ0IExpcGUgIDxyb2JlcnRsaXBlQHVzYS5uZXQ+CgoJKiBkd2FyZjJvdXQuYyAoVEVYVF9TRUNUSU9OX0xBQkVMLCBERUJVR19MSU5FX1NFQ1RJT05fTEFCRUwsCglERUJVR19JTkZPX1NFQ1RJT05fTEFCRUwsIEFCQlJFVl9TRUNUSU9OX0xBQkVMLAoJdGV4dF9zZWN0aW9uX2xhYmVsLCBkZWJ1Z19saW5lX3NlY3Rpb25fbGFiZWwsCglkZWJ1Z19pbmZvX3NlY3Rpb25fbGFiZWwsIGFiYnJldl9zZWN0aW9uX2xhYmVsKTogTmV3LgoJKG91dHB1dF9jb21waWxhdGlvbl91bml0X2hlYWRlcik6IEVtaXQgbGFiZWwgYXNzb2NpYXRlZAoJd2l0aCBzZWN0aW9uIGluc3RlYWQgb2Ygc2VjdGlvbiBuYW1lIGl0c2VsZi4KCShvdXRfcHVibmFtZXMsIG91dHB1dF9hcmFuZ2VzLCBvdXRwdXRfbGluZV9pbmZvLAoJZHdhcmYyb3V0X2ZpbmlzaCk6IExpa2V3aXNlLgoJKGR3YXJmMm91dF9pbml0KTogQnVpbGQgaW50ZXJuYWwgbGFiZWwgbmFtZXMgZm9yIHNlY3Rpb25zCglmcm9tIHN0YXRpYyBsYWJlbHMuCgpUaHUgTWFyIDExIDE3OjI4OjMyIDE5OTkgIEoib3JuIFJlbm5lY2tlICA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiBzaC5tZCAobXVsc2kzKTogRW5kIG11bC5sIHNlcXVlbmNlIHdpdGggYSBuby1vcCBtb3ZlLgoKVGh1IE1hciAxMSAwODo1MjowMiAxOTk5ICBCcnVjZSBLb3JiICA8a29yYkBkYXRhZGVzaWduLmNvbT4KCgkqIE1ha2VmaWxlLmluOiBBY3RpdmF0ZWQgZml4aW5jL21rZml4aW5jLnNoLgoJKiBjb25maWd1cmUuaW46IEFjdGl2YXRlZCBmaXhpbmMvbWtmaXhpbmMuc2guCgpUaHUgTWFyIDExIDAxOjM4OjAyIDE5OTkgIE11bWl0IEtoYW4gIDxraGFuQHhyYXlsaXRoLndpc2MuZWR1PgoKCSogY3BwZmlsZXMuYyAoSU5PX1RfRVEpOiBIYW5kbGUgVVdJTi4KCgkqIGMtY29tbW9uLmMgKGRlY2xfYXR0cmlidXRlcyk6IEZsYWcgdW5yZWNvZ25pemVkIGF0dHJpYnV0ZQoJZnVuY3Rpb25zIGFzIHdhcm5pbmdzIGluc3RlYWQgb2YgYXMgZXJyb3JzLgoKCVN1cHBvcnQgZm9yIGkzODYtcGMtdXdpbi4KCSogaTM4Ni91d2luLmg6IE5ldyBmaWxlLgoJKiBpMzg2L3htLXV3aW4uaDogTmV3IGZpbGUuCgkqIGkzODYvdC11d2luOiBOZXcgZmlsZS4KCSogaTM4Ni91d2luLmFzbTogTmV3IGZpbGUuCgkqIGNvbmZpZ3VyZS5pbiAoaVszNDU2XTg2LSotdXdpbiopOiBEZWZpbmUuCglBZGQgV29ya2Fyb3VuZCBmb3IgdmZvcmsgYnVnIHdoZW4gaG9zdGVkIG9uIHV3aW4uCgkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KCgkqIGNjY3AuYyAoSU5PX1RfRVEpOiBVbmRlZmluZS4gVVdJTiBoYXMgaW5vZGVzLgoJKGFic29sdXRlX2ZpbGVuYW1lKTogVVdJTiB1c2VzIFBPU0lYIHBhdGhuYW1lcyBvbmx5LgoJKiBsaWJnY2MyLmMgKGdldHBhZ2VzaXplKTogRG8gbm90IGRlZmluZSBmb3IgVVdJTi4KCShtcHJvdGVjdCk6IExpa2V3aXNlLgoJKiBwcm90b2l6ZS5jIChkaXJlbnQuaCk6IENvbmRpdGlvbmFsbHkgaW5jbHVkZS4KCShmcHV0Yyk6IFByb3RvdHlwZSBvbmx5IGlmIGl0J3Mgbm90IGEgbWFjcm8uCgpXZWQgTWFyIDEwIDAyOjQ5OjA0IDE5OTkgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbjogUmVtb3ZlIGluaXRfcHJpb3JpdHkgc3R1ZmYuCgoxOTk5LTAzLTExICBDb2xpbiBTbWl0aCAgPGNvbGluQHdycy5jb20+CgoJKiBzZGJvdXQuYyAocGxhaW5fdHlwZV8xKTogTWFrZSBib29sZWFuIHR5cGVzIHdvcmsgYmV0dGVyIHdpdGggc2RiLgoKVGh1IE1hciAxMSAwMDoyMDo1MiAxOTk5ICBBbGV4YW5kcmUgT2xpdmEgIDxvbGl2YUBkY2MudW5pY2FtcC5icj4KCgkqIGdjYy50ZXhpOiBVcGRhdGUgYnVnIHJlcG9ydGluZyBpbnN0cnVjdGlvbnMgdG8gbWF0Y2gKCWN1cnJlbnQgZXptbG0gbGlzdCByZWFsaXR5LgoKV2VkIE1hciAxMCAyMzoxMToxOSAxOTk5ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBnY2MuYyAocHJpbnRfZmlsZV9uYW1lLCBwcmludF9wcm9nX25hbWUsIHNwZWNfbWFjaGluZSwKCXJlYWRfc3BlY3MsIHNldF9zcGVjLCBsb29rdXBfY29tcGlsZXIsIGJ1aWxkX3NlYXJjaF9saXN0LAoJcHV0ZW52X2Zyb21fcHJlZml4ZXMsIGZpbmRfYV9maWxlLCByZWNvcmRfdGVtcF9maWxlLAoJZGVsZXRlX2lmX29yZGluYXJ5LCBoYW5kbGVfYnJhY2VzLCBkb19zcGVjLCBkb19zcGVjXzEsIGZpbmRfZmlsZSwKCWlzX2RpcmVjdG9yeSwgdmFsaWRhdGVfc3dpdGNoZXMsIHVzZWRfYXJnLCBkZWZhdWx0X2FyZywKCXBmYXRhbF93aXRoX25hbWUsIHBlcnJvcl93aXRoX25hbWUsIHBmYXRhbF9wZXhlY3V0ZSwgZmF0YWwsIGVycm9yLAoJbm90aWNlLCBhZGRfcHJlcHJvY2Vzc29yX29wdGlvbiwgYWRkX2Fzc2VtYmxlcl9vcHRpb24sCglhZGRfbGlua2VyX29wdGlvbiwgcHJvY2Vzc19jb21tYW5kLCBleGVjdXRlLAoJdW51c2VkX3ByZWZpeF93YXJuaW5ncywgY2xlYXJfYXJncywgZmF0YWxfZXJyb3IsCglsYW5nX3NwZWNpZmljX2RyaXZlciwgdXNlcl9zcGVjcywgY29tcGlsZXIsIGxpbmtfY29tbWFuZF9zcGVjLAoJb3B0aW9uX21hcCwgdHJhbnNsYXRlX29wdGlvbnMsIG1ha2VfdGVtcF9maWxlLCB0ZW1wX25hbWUsCglwcm9ncmFtbmFtZSwgcGF0aF9wcmVmaXgsIG1hY2hpbmVfc3VmZml4LCBqdXN0X21hY2hpbmVfc3VmZml4LAoJZ2NjX2V4ZWNfcHJlZml4LCBzdGFuZGFyZF9leGVjX3ByZWZpeCwgc3RhbmRhcmRfZXhlY19wcmVmaXhfMSwKCW1kX2V4ZWNfcHJlZml4LCBtZF9zdGFydGZpbGVfcHJlZml4LCBtZF9zdGFydGZpbGVfcHJlZml4XzEsCglzdGFuZGFyZF9zdGFydGZpbGVfcHJlZml4LCBzdGFuZGFyZF9zdGFydGZpbGVfcHJlZml4XzEsCglzdGFuZGFyZF9zdGFydGZpbGVfcHJlZml4XzIsIHRvb2xkaXJfYmFzZV9wcmVmaXgsIHRvb2xkaXJfcHJlZml4LAoJbXVsdGlsaWJfZGlyLCB0ZW1wX2ZpbGVuYW1lLCB0ZW1wX2ZpbGUsIGNvbW1hbmQsIHN3aXRjaHN0ciwKCWluZmlsZSwgb3V0ZmlsZXMsIGlucHV0X2ZpbGVuYW1lLCBpbnB1dF9iYXNlbmFtZSwgaW5wdXRfc3VmZml4LAoJY2hlY2tfbGl2ZV9zd2l0Y2gsIG1haW4pOiBRdWFsaWZ5IGEgY2hhciogd2l0aCB0aGUgYGNvbnN0JyBrZXl3b3JkLgoKV2VkIE1hciAxMCAyMDoyODoyOSAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBsY20uYzogTmV3IGZpbGUuCgkqIE1ha2VmaWxlLmluIChPQkpTKTogQWRkIGxjbS5vLgoJKGxjbS5vKTogQWRkIGRlcGVuZGVuY2llcy4KCgkqIGdjc2UuYyAoY29tcHV0ZV9wcmVfbG9jYWxfcHJvcGVydGllcyk6IERlbGV0ZS4KCShjb21wdXRlX3ByZV9kYXRhKTogVXNlIGNvbXB1dGVfbG9jYWxfcHJvcGVydGllcyBpbnN0ZWFkIG9mCgljb21wdXRlX3ByZV9sb2NhbF9wcm9wZXJ0aWVzLgoKCSogZ2NzZS5jOiBNb3JlIGNvbW1lbnRzLCB3aGl0ZXNwYWNlIGFuZCBzaW1pbGFyIGZpeGVzLgoJKGR1bXBfY3VpZF90YWJsZSwgbWF5YmVfc2V0X3JkX2dlbiwgZHVtcF9jcHJvcF9kYXRhKTogRGVsZXRlLgoJKGR1bXBfcHJlX2RhdGEsIGNvbXB1dGVfY3Byb3BfbG9jYWxfcHJvcGVydGllcyk6IExpa2V3aXNlLgoJKG9uZV9jbGFzc2ljX2djc2VfcGFzcyk6IExvc2UgdW51c2VkIGFyZ3VtZW50LiAgQWxsIGNhbGxlcnMgY2hhbmdlZC4KCShjb21wdXRlX2hhc2hfdGFibGUsIGNvbXB1dGVfZXhwcl9oYXNoX3RhYmxlKTogTGlrZXdpc2UuCgkoY29tcHV0ZV9zZXRfaGFzaF90YWJsZSwgb25lX3ByZV9nY3NlX3Bhc3MsIG1hcmtfY2FsbCk6IExpa2V3aXNlLgoJKGNwcm9wX2luc24sIGNwcm9wLCBvbmVfY3Byb3BfcGFzcyk6IEFkZCBuZXcgYXJndW1lbnQgQUxURVJfSlVNUFMuCglBbGwgY2FsbGVycyBjaGFuZ2VkLiAgT25seSBhbHRlciBqdW1wcyBpZiBBTFRFUl9KVU1QUyBpcyBub256ZXJvLgoJTG9zZSB1bnVzZWQgYXJndW1lbnQuCgkoZ2NzZV9tYWluKTogQWx3YXlzIHJ1biBhIGNwcm9wIHBhc3MgYWZ0ZXIgZmluaXNoaW5nIGdsb2JhbCBjc2UuCgkoY29tcHV0ZV9sb2NhbF9wcm9wZXJ0aWVzKTogTmV3IGZ1bmN0aW9uLgoJKGhhc2hfc2Nhbl9wYXQsIGhhc2hfc2Nhbl9pbnNuKTogTm8gbG9uZ2VyIGNhbGwgbWF5YmVfc2V0X3JkX2dlbi4KCShjb21wdXRlX2Nwcm9wX2RhdGEpOiBVc2UgY29tcHV0ZV9sb2NhbF9wcm9wZXJ0aWVzLgoKCSogZ2NzZS5jOiBVcGRhdGUgdmFyaW91cyBjb21tZW50cy4KCShjdXJyZW50X2Z1bmN0aW9uX2NhbGxzX2xvbmdqbXApOiBEZWxldGUgZGVjbGFyYXRpb24uCgoJKiBnY3NlLmMgKHJ1bl9qdW1wX29wdF9hZnRlcl9nY3NlKTogTmV3IHZhcmlhYmxlLgoJKGdjc2VfbWFpbik6IFJldHVybnMgYW4gaW50ZWdlci4KCShoYXNoX3NjYW5fc2V0KTogUmVjb3JkIGluaXRpYWxpemF0aW9ucyBmcm9tIENPTlNUX0RPVUJMRXMgdG9vLgoJKHRyeV9yZXBsYWNlX3JlZyk6IFVwZGF0ZSBzb21lIGNvbW1lbnRzLgoJKGNwcm9wX2luc24pOiBBbGxvdyBwcm9wYWdhdGlvbiBpbnRvIHNvbWUgSlVNUF9JTlNOcyB0b28uCgkqIHJ0bC5oIChnY3NlX21haW4pOiBVcGRhdGUgcHJvdG90eXBlLgoJKiB0b3BsZXYuYyAocmVzdF9vZl9jb21waWxhdGlvbik6IElmIGdjc2VfbWFpbiByZXR1cm5zIG5vbnplcm8sCgl0aGVuIHJ1biBhIGp1bXAgb3B0aW1pemF0aW9uIHBhc3MuCgkqIGp1bXAuYyAoZGVsZXRlX2JhcnJpZXJfc3VjY2Vzc29ycyk6IERlbGV0ZSBub3AganVtcHMgdG9vLgoKV2VkIE1hciAxMCAxOTowNDozMSAxOTk5ICBKIm9ybiBSZW5uZWNrZSAgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogc2guYyAoZnBfYXJpdGhfcmVnX29wZXJhbmQpOiBBY3R1YWxseSB0ZXN0IGlmIHJlZyBpcyBzdWl0YWJsZQoJZm9yIEZQIGFyaXRobWV0aWMuICBDaGFuZ2VkIGNhbGxlci4KCSogc2gubWQgKHN1YnNmMywgc3Vic2ZfaSk6IFVzZSBmcF9hcml0aF9yZWdfb3BlcmFuZC4KCldlZCBNYXIgMTAgMTg6NTY6MzEgMTk5OSAgSiJvcm4gUmVubmVja2UgIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIHJlbG9hZDEuYyAoY2hvb3NlX3JlbG9hZF9yZWdzKTogV2hlbiBpbmhlcml0aW5nIGZyb20gdGhlIGZyYW1lCglwb2ludGVyLCBkb24ndCBjbG9iYmVyIGl0LgoKV2VkIE1hciAxMCAwODowMTo1MiAxOTk5ICBCcnVjZSBLb3JiICA8a29yYkBkYXRhZGVzaWduLmNvbT4KCgkqIGZpeGluYy9maXhpbmMuKjogUmVzeW5jLWVkIHdpdGggdGhlIGZpbGVzIGluIHRoaXMKCWRpcmVjdG9yeS4KCgkqIGZpeGluYy9ta2ZpeGluYy5zaDogVGhlIG1hY2hpbmUgY2FzZSBlbGVtZW50cyB3ZXJlCglvdXQtb2Ytb3JkZXIuICAodGhlIGl4ODYtKi1saW51eC1nbnUqIGVudHJ5IG5lZWRlZCB0bwoJYmUgZWFybGllcikuCgpXZWQgTWFyIDEwIDAwOjAxOjI0IDE5OTkgIEoib3JuIFJlbm5lY2tlICA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiByZWxvYWQxLmMgKHJlbG9hZF9jb21iaW5lX25vdGVfc3RvcmUpOiBGaXggY2FsY3VsYXRpb24gb2YgbnVtYmVyCglvZiBhZmZlY3RlZCByZWdpc3RlcnMuCgpUdWUgTWFyICA5IDE1OjQ4OjE1IDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBmbG93LmMgKHRpZHlfZmFsbHRocnVfZWRnZSk6IEJlIG1vcmUgY2FyZWZ1bCBmaW5kaW5nIHRoZSBsYXN0CglCQVJSSUVSIG9mIGEgbGlzdC4gIERlbGV0ZSB0aGUgY2MwIHNldHRlciBhcyB3ZWxsIGFzIGEgY29uZCBqdW1wLgoKVHVlIE1hciAgOSAxNToyNjowMiAxOTk5ICBIYW5zLVBldGVyIE5pbHNzb24gIDxocEBiaXRyYW5nZS5jb20+CgoJKiBpMzg2Lm1kIChhc2hsc2kzIHNwbGl0dGVyKTogRml4IHR5cG8gaW4gbGFzdCBjaGFuZ2UuCgpUdWUgTWFyICA5IDExOjM1OjIwIDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiByZWctc3RhY2suYyAoc3RhY2tfcmVnX2xpZmVfYW5hbHlzaXMpOiBVc2UgcmV0dXJuanVtcF9wCglpbnN0ZWFkIG9mIGFuIGV4cGxpY2l0IHRlc3QgZm9yIFJFVFVSTi4KClR1ZSBNYXIgIDkgMDk6MzM6MTYgMTk5OSAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogTWFrZWZpbGUuaW4gKHRvcGxldi5vKTogRGVwZW5kIG9uICQoQkFTSUNfQkxPQ0tfSCkuCgoJKiB0b3BsZXYuYzogSW5jbHVkZSBiYXNpYy1ibG9jay5oLgoKVHVlIE1hciAgOSAwMjowODoxNyAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBjYWxscy5jIChsb2FkX3JlZ2lzdGVyX3BhcmFtZXRlcnMpOiBOZXcgZnVuY3Rpb24uCgkoZXhwYW5kX2NhbGwpOiBVc2UgaXQuCgoJKiBjYWxscy5jIChleHBhbmRfY2FsbCk6IFNsaWdodGx5IHJlb3JnYW5pemUgY29kZS4KCgkqIGNhbGxzLmMgKGNvbXB1dGVfYXJndW1lbnRfYWRkcmVzc2VzKTogTmV3IGZ1bmN0aW9uLgoJKHJ0eF9mb3JfZnVuY3Rpb25fY2FsbCk6IE5ldyBmdW5jdGlvbi4KCShleHBhbmRfY2FsbCk6IFVzZSB0aGVtLgoKCSogaTM4Ni5tZCAoemVyb19leHRlbmRoaXNpMik6IFNwbGl0IGludG8gYW4gZXhwYW5kZXIgYW5kIGFub255bW91cwoJcGF0dGVybi4gIEFkZCBuZXcgYW5vbnltb3VzIHBhdHRlcm4gZm9yIHVzZSB3aGVuIG9wdGltaXppbmcgZm9yCglzaXplIG9yIGZvciB0aGUgUFByby4KCSh6ZXJvX2V4dGVuZHFpaGkyLCB6ZXJvX2V4dGVuZHFpc2kyKTogTGlrZXdpc2UuCgpNb24gTWFyICA4IDIzOjQzOjQ3IDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBoYWlmYS1zY2hlZC5jIChzY2hlZF9hbmFseXplXzEpOiBGaXggbGFzdCBjaGFuZ2UgLS0gYWRkIGNsb2JiZXIKCWRlcGVuZGVuY2llcyB0byBzZXRzIGluIHRoZSBub24taGFyZC1yZWcgY2FzZSB0b28uCgpNb24gTWFyICA4IDE4OjU1OjIxIDE5OTkgIE1hcmMgRXNwaWUgIDxlc3BpZUBjdnMub3BlbmJzZC5vcmc+CgoJKiBjb25maWcvb3BlbmJzZC5oIChIQU5ETEVfU1lTVl9QUkFHTUEpOiBEZWZpbmUuCgpNb24gTWFyICA4IDE2OjA0OjQ0IDE5OTkgIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KCgkqIGxvY2FsLWFsbG9jLmMgKGNvbWJpbmVfcmVncyk6IERvbid0IGNvbWJpbmUgaWYgd2UgaGF2ZSBhIGhhcmQgcmVnCglmb3Igd2hpY2ggQ0xBU1NfTElLRUxZX1NQSUxMRURfUCBpcyB0cnVlLgoKCSogdW5yb2xsLmMgKGxvb3BfaXRlcmF0aW9ucyk6IE9ubHkgY2FsbCBsb29wX2ZpbmRfZXF1aXZfdmFsdWUgaWYgd2UKCWhhdmUgYSBSRUcgb3IgU1VCUkVHLgoKTW9uIE1hciAgOCAxNToyNzo0MiAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBpMzg2Lm1kIChhc2hsc2kzKTogUmV2aXNlIGNvbW1lbnRzLiAgUHJvdmlkZSBuZXcgYW5vbnltb3VzCglwYXR0ZXJuIGZvciBQZW50aXVtIGFuZCBQUHJvL1BJSS4gIFJldmVyc2UgY29uc3RyYWludHMgaW4KCWdlbmVyaWMgYXNobHNpMyBhbm9ueW1vdXMgcGF0dGVybi4KCgkqIGNhbGxzLmMgKGluaXRpYWxpemVfYXJndW1lbnRfaW5mbyk6IEFjY2VwdCBhIHBvaW50ZXIgdG8KCUNVTVVMQVRJVkVfQVJHUy4KCShleHBhbmRfY2FsbCk6IFBhc3MgdGhlIGFkZHJlc3Mgb2YgQ1VNVUxBVElWRV9BUkdTLgoKCSogcnM2MDAwL3htLXN5c3Y0LmggKEhPU1RfQklUU19QRVJfTE9OR0xPTkcpOiBSZW1vdmUgI2lmIDAuCgoJKiBtbjEwMzAwLmggKENBU0VfRFJPUFNfVEhST1VHSCk6IERlbGV0ZS4KCSogbW4xMDIwMC5oIChDQVNFX0RST1BTX1RIUk9VR0gpOiBEZWxldGUuCgkqIGg4MzAwLmggKENBU0VfRFJPUFNfVEhST1VHSCk6IERlbGV0ZS4KCgkqIGZsb3cuYyAobWVyZ2VfYmxvY2tzX25vbW92ZSk6IEZvciBIQVZFX2NjMCB0YXJnZXRzLCBtYWtlIHN1cmUKCXRvIGFsc28gZGVsZXRlIHRoZSBjYzAgc2V0dGVyIHdoZW4gZGVsZXRpbmcgYSBjb25kaXRpb25hbCBicmFuY2gKCXRvIHRoZSBuZXh0IGJsb2NrLgoKTW9uIE1hciAgOCAxODo0NzoxMSAxOTk5ICBKIm9ybiBSZW5uZWNrZSAgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogcmVnbW92ZS5jIChjb3B5X3NyY190b19kZXN0KTogTmV3IGFyZ3VtZW50IG1heF9vbGRfdWlkLgoKTW9uIE1hciAgOCAwODoyMzowMCAxOTk5ICBCcnVjZSBLb3JiICA8a29yYkBkYXRhZGVzaWduLmNvbT4KCgkqIENoYW5nZUxvZzogTWVyZ2VkIGVudHJpZXMgZnJvbSBmaXhpbmNsLWJyYW5jaC4KClN1biBNYXIgIDcgMTE6NDg6NTYgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGhhaWZhLXNjaGVkLmMgKEVOQ09ERV9CTE9DS0FHRSk6IERvbid0IHNoaWZ0IHVuaXQgdG9vIGZhci4KCShwcmludF9leHApOiBTcGVjaWFsIGNhc2UgYWRkaXRpb24gb2YgYSBjb25zdGFudC4KCShwcmludF92YWx1ZSkgW0NPTlNUX0lOVF06IFVzZSBIT1NUX1dJREVfSU5UX1BSSU5UX0hFWC4KClN1biBNYXIgIDcgMTE6MjE6MDIgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGhhaWZhLXNjaGVkLmMgKHJlZ19sYXN0X2Nsb2JiZXJzKTogTmV3LgoJKHJlZ19wZW5kaW5nX2Nsb2JiZXJzLCBiYl9yZWdfbGFzdF9jbG9iYmVycyk6IE5ldy4KCShjb21wdXRlX2Jsb2NrX2JhY2t3YXJkX2RlcGVuZGVuY2VzKTogQWxsb2NhdGUgbWVtb3J5IGZvciB0aGVtLgoJKHNjaGVkdWxlX3JlZ2lvbik6IExpa2V3aXNlLgoJKHNjaGVkX2FuYWx5emVfMSk6IENsb2JiZXJzIGRvbid0IGludGVyZmVyZSB3aXRoIG9uZSBhbm90aGVyLgoJVGhleSBkbyBpbnRlcmZlcmUgd2l0aCBzZXRzIC4uLgoJKHNjaGVkX2FuYWx5emVfMik6IC4uLiBhbmQgdXNlcy4KCShzY2hlZF9hbmFseXplKTogTGlrZXdpc2UuCgkoc2NoZWRfYW5hbHl6ZV9pbnNuKTogVXBkYXRlIHJlZ19sYXN0X2Nsb2JiZXJzIGFwcHJvcHJpYXRlbHkuCgpTdW4gTWFyICA3IDA4OjMwOjM3IDE5OTkgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGdtb24tc29sMi5jOiBJbmNsdWRlIGNvbmZpZy5oIGFuZCBzeXN0ZW0uaC4gIERvbid0IHJlZHVuZGFudGx5CglpbmNsdWRlIHN5c3RlbSBoZWFkZXIgZmlsZXMuCgkoc2Njc2lkKTogUmVtb3ZlLgoJKG1vbmNvbnRyb2wsIG1vbnN0YXJ0dXAsIF9tY2xlYW51cCwgaW50ZXJuYWxfbWNvdW50KTogUHJvdG90eXBlLgoJKF9tY2xlYW51cCk6IEFkZCB0aGUgYGNvbnN0JyBrZXl3b3JkIHRvIGEgY2hhciouCgkoaW50ZXJuYWxfbWNvdW50KTogRGVjbGFyZSBgZXRleHQnIGFzIGEgY2hhcltdIG5vdCBhIGZ1bmN0aW9uLgoJQ2FzdCBgZXRleHQnIHRvIGNoYXIqIHdoZW4gY2FsbGluZyBgbW9uc3RhcnR1cCcuCgoJKiBzcGFyYy5jIChmcmFtZV9iYXNlX25hbWUsIHNhdmVfcmVncywgcmVzdG9yZV9yZWdzLAoJYnVpbGRfYmlnX251bWJlciwgc3BhcmNfY21vZGVsX3N0cmluZywgc3BhcmNfYWxpZ25fbG9vcHNfc3RyaW5nLAoJc3BhcmNfYWxpZ25fanVtcHNfc3RyaW5nLCBzcGFyY19hbGlnbl9mdW5jc19zdHJpbmcsIGNvZGVfbW9kZWwsCgljcHVfZGVmYXVsdCwgY3B1X3RhYmxlLCBvdXRwdXRfZnVuY3Rpb25fcHJvbG9ndWUsCglvdXRwdXRfZnVuY3Rpb25fZXBpbG9ndWUsIG91dHB1dF9yZXR1cm4sCglzcGFyY19mbGF0X291dHB1dF9mdW5jdGlvbl9wcm9sb2d1ZSwgdWx0cmFfY29kZV9uYW1lcywKCXNwYXJjX2ZsYXRfb3V0cHV0X2Z1bmN0aW9uX2VwaWxvZ3VlKTogQ29uc3RpZnkgYSBjaGFyKi4KCShoeXBlcnNwYXJjX2FkanVzdF9jb3N0KTogQWRkIGEgZGVmYXVsdCBjYXNlIGluIGEgc3dpdGNoLgoKCSogc3BhcmMuaCAoc3BhcmNfY21vZGVsX3N0cmluZywgT1ZFUlJJREVfT1BUSU9OUywKCXNwYXJjX2NwdV9zZWxlY3QsIHNwYXJjX2FsaWduX2xvb3BzX3N0cmluZywKCXNwYXJjX2FsaWduX2p1bXBzX3N0cmluZywgc3BhcmNfYWxpZ25fZnVuY3Nfc3RyaW5nLAoJb3V0cHV0X3JldHVybik6IENvbnN0aWZ5IGEgY2hhciouCgoJKiBzcGFyYy5tZCAobW92ZGkpOiBDaGFuZ2UgdGhlIGNvbXBhcmlzb24gb2YgSE9TVF9CSVRTX1BFUl9XSURFX0lOVAoJc28gdGhhdCB3ZSBjaGVjayAiPT0gMzIiLCBpbnN0ZWFkIG9mICIhPSA2NCIuICBDYXN0IGEgdmFsdWUgdG8KCUhPU1RfV0lERV9JTlQgd2hlbiBjb21wYXJpbmcgYWdhaW5zdCBvbmUuICBIaWRlIHRoZSBkZWNsYXJhdGlvbgoJZm9yIHZhcmlhYmxlIGBjaGFpbicuCgpTdW4gTWFyICA3IDA4OjA1OjI3IDE5OTkgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIHN5c3RlbS5oIChjb25zdCwgaW5saW5lKTogTW92ZSB0aGUgc3RhZ2UyIGhhbmRsaW5nIG9mIHRoZXNlCglrZXl3b3Jkcy1hcy1tYWNyb3MgZnJvbSBoZXJlLi4uCgoJKiBnYW5zaWRlY2wuaCAoY29uc3QsIGlubGluZSk6IC4uLnRvIGhlcmUuCgpTdW4gTWFyICA3IDAyOjQ0OjE1IDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiByZWNvZy5jIChwdXNoX29wZXJhbmQsIHBvcF9vcGVyYW5kKTogVk9JRG1vZGUgbmVlZG4ndCBtYXRjaCBtb2Rlcy4KClN1biBNYXIgIDcgMDE6NTg6NDcgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGNzZS5jIChjYW5vbl9oYXNoKTogTmV2ZXIgcmVqZWN0IGhhcmQgcmVncyBpbiBDQ21vZGUuCgpTdW4gTWFyICA3IDAxOjE1OjA0IDE5OTkgIEplZmYgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiB2ZXJzaW9uLmM6IEJ1bXAgZm9yIHNuYXBzaG90LgoKU2F0IE1hciAgNiAxNzoxODo0NCAxOTk5ICBSaWNoYXJkIEVhcm5zaGF3ICAocmVhcm5zaGFAYXJtLmNvbSkKCQkJICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogZmxvdy5jIChtYWtlX2VkZ2VzKTogSGFuZGxlIGNhc2VzaSB0aGF0IGp1bXAgdG8gZGVmYXVsdCBicmFuY2guCglJZiBDQVNFX0RST1BTX1RIUk9VR0gsIGZvcmNlIGZhbGx0aHJ1IHRvIGJsb2NrIGFmdGVyIGNhc2VzaS4KClNhdCBNYXIgIDYgMDc6NDk6MjMgMTk5OSAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogYy1hdXgtaW5mby5jIChkYXRhX3R5cGUsIGFmZml4X2RhdGFfdHlwZSwgZ2VuX2RlY2wsCglnZW5fZm9ybWFsX2xpc3RfZm9yX3R5cGUsIGdlbl9mb3JtYWxfbGlzdF9mb3JfZnVuY19kZWYsIGdlbl90eXBlKToKCVF1YWxpZnkgYSBjaGFyKiB3aXRoIHRoZSBgY29uc3QnIGtleXdvcmQuCgoJKiBjLWNvbW1vbi5jIChkZWNsYXJlX2hpZGRlbl9jaGFyX2FycmF5LCBhZGRfYXR0cmlidXRlLCBpZl9lbHQsCglkZWNsYXJlX2Z1bmN0aW9uX25hbWUsIGRlY2xfYXR0cmlidXRlcywgZm9ybWF0X2NoYXJfaW5mbywKCWNoZWNrX2Zvcm1hdF9pbmZvLCBiaW5hcnlfb3BfZXJyb3IpOiBMaWtld2lzZS4KCgkqIGNleHAueSAoeXllcnJvciwgZXJyb3IsIHBlZHdhcm4sIHdhcm5pbmcsIHRva2VuKTogTGlrZXdpc2UuCgoJKiBnY3NlLmMgKGR1bXBfaGFzaF90YWJsZSk6IExpa2V3aXNlLgoKCSogaW50ZWdyYXRlLmMgKGZ1bmN0aW9uX2Nhbm5vdF9pbmxpbmVfcCk6IExpa2V3aXNlLgoKCSogb3B0YWJzLmM6IEluY2x1ZGUgaW5zbi1jb25maWcuaCBlYXJsaWVyLgoJKGluaXRfbGliZnVuY3MsIGluaXRfaW50ZWdyYWxfbGliZnVuY3MsIGluaXRfZmxvYXRpbmdfbGliZnVuY3MpOgoJUXVhbGlmeSBhIGNoYXIqIHdpdGggdGhlIGBjb25zdCcga2V5d29yZC4KCgkqIHJlYWwuYyAoYXNjdG9lMjQsIGFzY3RvZTUzLCBhc2N0b2U2NCwgYXNjdG9lMTEzLCBhc2N0b2UsCglhc2N0b2VnLCBtdGhlcnIsIGVyZWFsX2F0b2YpOiBMaWtld2lzZS4KCgkqIHJlYWwuaCAoZXJlYWxfYXRvZik6IExpa2V3aXNlLgoKCSogc2JpdG1hcC5jIChkdW1wX3NiaXRtYXBfdmVjdG9yKTogTGlrZXdpc2UuCgoJKiBzYml0bWFwLmggKGR1bXBfc2JpdG1hcF92ZWN0b3IpOiBMaWtld2lzZS4KCgkqIHN0bXQuYyAobmVzdGluZywgbl9vY2N1cnJlbmNlcywgZXhwYW5kX3N0YXJ0X2Nhc2UpOiBMaWtld2lzZS4KCgkqIHRvcGxldi5jIChyZXN0X29mX2NvbXBpbGF0aW9uKTogTGlrZXdpc2UuCgoJKiB0cmVlLmggKGZ1bmN0aW9uX2Nhbm5vdF9pbmxpbmVfcCwgZXhwYW5kX3N0YXJ0X2Nhc2UpOiBMaWtld2lzZS4KCkZyaSBNYXIgIDUgMjM6MTY6NDIgMTk5OSAgRGF2aWQgRWRlbHNvaG4gIDxlZGVsc29obkBnbnUub3JnPgoKCSogcnM2MDAwLmggKEFTTV9PVVRQVVRfUkVHX3tQVVNILFBPUH0pOiBBZGQgNjQtYml0IHN1cHBvcnQgYW5kIGRvCglub3Qgb3ZlcndyaXRlIEFJWCBsaW5rIHJlZ2lzdGVyIHNhdmUgYXJlYS4KCkZyaSBNYXIgIDUgMjM6MDg6MDEgMTk5OSAgSiJvcm4gUmVubmVja2UgIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIHJlbG9hZC5jIChmaW5kX3JlbG9hZHNfc3VicmVnX2FkZHJlc3MpOiBBY3R1YWxseSBjcmVhdGUgdGhlIFVTRQoJZm9yIHRoZSByZWdpc3Rlciwgbm90IHRoZSBuZXcgbWVtb3J5IGxvY2F0aW9uLgoKRnJpIE1hciAgNSAyMTo0MTowNyAxOTk5ICBKIm9ybiBSZW5uZWNrZSAgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogcmVsb2FkMS5jIChlbWl0X3JlbG9hZF9pbnNucyk6IElmIHBzZXVkbyB0aGF0IGNhbid0IGJlIHJlcGxhY2VkCgl3aXRoIGl0cyBlcXVpdmFsZW50IGNvbnN0YW50LCBmYWxsIGJhY2sgdG8gcmVsb2FkX2luLgoKRnJpIE1hciAgNSAxMzoyMDozOSAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogTWFrZWZpbGUuaW46IERlbGV0ZSAuZmxvdzIgZGVidWdnaW5nIGZpbGVzLgoKRnJpIE1hciAgNSAxMTozNjoxMSAxOTk5ICBOaWNrIENsaWZ0b24gIDxuaWNrY0BjeWdudXMuY29tPgoKCSogY29uZmlnL2FybS9hcm0uYyAoYXJtX292ZXJyaWRlX29wdGlvbnMpOiBDaGFuZ2UgZGVmYXVsdCB0YXJnZXQKCWNwdSBzZWxlY3Rpb24gc28gdGhhdCBlbmFibGluZyBUQVJHRVRfQVBDU18zMiBkb2VzIG5vdCBvdmVycmlkZQoJZGVmYXVsdCB0YXJnZXQgQ1BVLgoKRnJpIE1hciAgNSAxOToyNjoyMyAxOTk5ICBKIm9ybiBSZW5uZWNrZSAgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogc2guaCAoU0xPV19CWVRFX0FDQ0VTUyk6IERlZmluZSB0byAxLgoJKEJPT0xfVFlQRV9TSVpFKTogRGVmaW5lLgoKRnJpIE1hciAgNSAwMjoxNDo1NCAxOTk5ICBKb2huIFdlaGxlICAoam9obkBmZWl0aC5jb20pCgoJKiBmdW5jdGlvbi5jIChhc3NpZ25fc3RhY2tfdGVtcF9mb3JfdHlwZSk6IEFib3J0CglpZiBtb2RlID09IEJsa21vZGUgYW5kIGFsaWduIGlzIGxlc3MgdGhhbgoJQklHR0VTVF9BTElHTk1FTlQgLyBCSVRTX1BFUl9VTklULgoJKGFzc2lnbl9zdGFja190ZW1wX2Zvcl90eXBlKTogUm91bmQgdGhlIHNpemUgcGFyYW1ldGVyCglwYXNzZWQgdG8gYXNzaWduX3N0YWNrX2xvY2FsIGluc3RlYWQgb2Ygc2l6ZSBpdHNlbGYuCgpUaHUgTWFyICA0IDE1OjAwOjM1IDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBmbG93LmMgKGRlbGV0ZV91bnJlYWNoYWJsZV9ibG9ja3MpOiBNYXJrIGJsb2NrcyBhcyB0aGV5CglhcmUgcHV0IG9uIHRvIHRoZSB3b3JrbGlzdCwgbm90IGFzIHRoZXkgYXJlIHRha2VuIG9mZi4KClRodSBNYXIgIDQgMDA6MDU6NDQgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogZnVuY3Rpb24uYyAoY3VycmVudF9mdW5jdGlvbl9oYXNfY29tcHV0ZWRfanVtcCk6IFJlbW92ZSBkdXBsaWNhdGUKCWRlZmluaXRpb24uCgpXZWQgTWFyICAzIDE5OjA5OjExIDE5OTkgIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KCgkqIG02OGsvbTY4MDIwLWVsZi5oIChJTklUX1NFQ1RJT05fQVNNX09QLCBGSU5JX1NFQ1RJT05fQVNNX09QKTogVW5kZWYuCgkoU1RBUlRGSUxFX1NQRUMsIEVOREZJTEVfU1BFQyk6IERlZmluZSB0byBlbXB0eSBzdHJpbmcuCgoJKiBzcGFyYy9lbGYuaCAoTVVMREkzX0xJQkNBTEwsIERJVkRJM19MSUJDQUxMLCBVRElWREkzX0xJQkNBTEwsCglNT0RESTNfTElCQ0FMTCwgVU1PRERJM19MSUJDQUxMLCBTVERDXzBfSU5fU1lTVEVNX0hFQURFUlMpOiBVbmRlZi4KCShJTklUX1NVQlRBUkdFVF9PUFRBQlMpOiBEZWZpbmUgdG8gZW1wdHkuCgpXZWQgTWFyICAzIDAwOjAwOjM3IDE5OTkgIEoib3JuIFJlbm5lY2tlICA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiBzaC5jIChmb3JjZV9pbnRvKTogTmV3IGZ1bmN0aW9uLgoJKGV4cGFuZF9ibG9ja19tb3ZlKTogVXNlIGl0LgoKVHVlIE1hciAgMiAxMDozOTo0MyAxOTk5ICBOaWNrIENsaWZ0b24gIDxuaWNrY0BjeWdudXMuY29tPgoKCSogY2NjcC5jIChzdHJ1Y3QgZGVmYXVsdF9pbmNsdWRlKTogQWRkICdpbmNsdWRlZCcgZmllbGQuCgkobWFpbik6IFNldCAnaW5jbHVkZWQnIGZpZWxkIHdoZW4gYSBkZWZhdWx0IGluY2x1ZGUgZGlyZWN0b3J5CglpcyBhZGRlZCB0byB0aGUgY2hhaW4uICBJZiAtdiBpcyBzcGVjaWZpZWQgbGlzdCBhbGwgZGVmYXVsdAoJaW5jbHVkZSBkaXJlY3RvcmllcyB3aGljaCBkbyBub3QgZ2V0IGFwcGVuZGVkIHRvIHRoZSBjaGFpbi4KClR1ZSBNYXIgIDIgMDk6MjQ6MTAgMTk5OSAgTmljayBDbGlmdG9uICA8bmlja2NAY3lnbnVzLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbiAoZ3h4X2luY2x1ZGVfZGlyKTogUmVuYW1lIHRvCglnY2NfZ3h4X2luY2x1ZGVfZGlyIGluIG9yZGVyIHRvIHByZXZlbnQgaXQgYmVpbmcgb3ZlcnJpZGRlbiBieQoJYSB0b3AgbGV2ZWwgTWFrZWZpbGUuCgkoZ2NjX3Rvb2xkaXIpOiBJZiAkZXhlY19wcmVmaXggIT0gJHByZWZpeCB0aGVuIHVzZSB0aGUKCWRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgdHdvIGFzIHRoZSBiYXNpcyBmb3IgZ2NjX3Rvb2xkaXIuCgoJKiBjb25maWd1cmU6IFJlYnVpbGQuCgoJKiBNYWtlZmlsZS5pbjogUmVuYW1lIGd4eF9pbmNsdWRlX2RpciB0byBnY2NfZ3h4X2luY2x1ZGVfZGlyLgoKVHVlIE1hciAgMiAxNjo0NTozMSAxOTk5ICBKIm9ybiBSZW5uZWNrZSAgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogdW5yb2xsLmMgKGNvcHlfbG9vcF9ib2R5KTogRG9uJ3QgbWFrZSBleHRyYSBjb3BpZXMgb2YKCU5PVEVfSU5TTl9MT09QX0NPTlQgbm90ZXMuCgpUdWUgTWFyICAyIDA3OjQ0OjU2IDE5OTkgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiB0cmVlLmMgKHNhdmVfdHJlZV9zdGF0dXMpOiBEb24ndCB0cmVhdCBmdW5jdGlvbnMgd2l0aCBubyBjb250ZXh0CglhcyBuZXN0ZWQuCgpUdWUgTWFyICAyIDA5OjM3OjA1IDE5OTkgIFJvYmVydCBMaXBlICA8cm9iZXJ0bGlwZUB1c2EubmV0PgoKCSogTWFrZWZpbGUuaW4gKE1BS0VJTkZPKTogVXNlIG1ha2VpbmZvIGJ1aWx0IGZyb20gc2libGluZwoJdHJlZSB3aGVuIGF2YWlsYWJsZS4KClR1ZSBNYXIgIDIgMTA6MTI6NDggMTk5OSAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogYWxwaGEuYyAoYWxwaGFfY3B1X25hbWUsIGFscGhhX2NwdV9zdHJpbmcsIGFscGhhX3RwX3N0cmluZywKCWFscGhhX2Zwcm1fc3RyaW5nLCBhbHBoYV9mcHRtX3N0cmluZywgYWxwaGFfbWxhdF9zdHJpbmcsCgljdXJyZW50X2Z1bmN0aW9uX2ZpbGUpOiBBZGQgdGhlIGBjb25zdCcga2V5d29yZC4KCShub3JtYWxfbWVtb3J5X29wZXJhbmQpOiBNYXJrIHBhcmFtZXRlciBgbW9kZScgd2l0aAoJQVRUUklCVVRFX1VOVVNFRC4KCShhbHBoYV9leHBhbmRfdW5hbGlnbmVkX2xvYWQpOiBBZGQgYSBkZWZhdWx0IGNhc2UgdG8gYSBzd2l0Y2guCgoJKiBhbHBoYS5oIChhbHBoYV9jcHVfc3RyaW5nLCBhbHBoYV9mcHJtX3N0cmluZywgYWxwaGFfZnB0bV9zdHJpbmcsCglhbHBoYV90cF9zdHJpbmcsIGFscGhhX21sYXRfc3RyaW5nKTogQWRkIHRoZSBgY29uc3QnIGtleXdvcmQuCgkobm9ybWFsX21lbW9yeV9vcGVyYW5kKTogQWRkIHByb3RvdHlwZS4KCgkqIGFscGhhLm1kOiBDYXN0IGFuIGV4cHJlc3Npb24gdG8gYHVuc2lnbmVkIEhPU1RfV0lERV9JTlQnIHdoZW4KCWNvbXBhcmluZyBhZ2FpbnN0IG9uZS4KClR1ZSBNYXIgIDIgMTA6MDA6MjEgMTk5OSAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogbWlwcy5jIChhYm9ydF93aXRoX2luc24pOiBNYWtlIGZ1bmN0aW9uIHN0YXRpYywgYWRkIGEgcHJvdG90eXBlLAoJY29uc3RpZnkgMm5kIHBhcmFtZXRlciBhbmQgbWFyayB3aXRoIEFUVFJJQlVURV9OT1JFVFVSTi4KCShjdXJyZW50X2Z1bmN0aW9uX2ZpbGUsIG1pcHNfY3B1X3N0cmluZywgbWlwc19pc2Ffc3RyaW5nLAoJbWlwc19hYmlfc3RyaW5nLCBtaXBzX25vX21pcHMxNl9zdHJpbmcsIG1pcHNfZW50cnlfc3RyaW5nLAoJbWlwc19tb3ZlXzF3b3JkLCBtaXBzX21vdmVfMndvcmRzLCBvdXRwdXRfYmxvY2tfbW92ZSwgbG9hZF9zdG9yZSwKCW92ZXJyaWRlX29wdGlvbnMsIG1ha2VfdGVtcF9maWxlLCBtaXBzMTZfZnBfYXJncyk6IFF1YWxpZnkgYSBjaGFyKgoJd2l0aCB0aGUgYGNvbnN0JyBrZXl3b3JkLgoKCSogbWlwcy5oIChjdXJyZW50X2Z1bmN0aW9uX2ZpbGUsIG1pcHNfY3B1X3N0cmluZywgbWlwc19pc2Ffc3RyaW5nLAoJbWlwc19hYmlfc3RyaW5nLCBtaXBzX2VudHJ5X3N0cmluZywgbWlwc19ub19taXBzMTZfc3RyaW5nLAoJbWlwc19tb3ZlXzF3b3JkLCBtaXBzX21vdmVfMndvcmRzLCBvdXRwdXRfYmxvY2tfbW92ZSk6IExpa2V3aXNlLgoJKGFib3J0X3dpdGhfaW5zbik6IFJlbW92ZSBleHRlcm4gcHJvdG90eXBlLgoKCSogbWlwcy5tZDogUXVhbGlmeSBhIGNoYXIqIHdpdGggdGhlIGBjb25zdCcga2V5d29yZC4KCVJlbW92ZSBtYW55IHVudXNlZCB2YXJpYWJsZXMgbmFtZWQgYGxhYmVsJy4KClR1ZSBNYXIgIDIgMDE6Mjc6NTIgMTk5OSAgSC5KLiBMdSAgKGhqbEBnbnUub3JnKQoKCSogTWFrZWZpbGUuaW4gKGNwcF9pbnN0YWxsX2RpciwgSU5TVEFMTF9DUFAsIFVOSU5TVEFMTF9DUFApOiBOZXcKCXZhcmlhYmxlcy4KCShpbnN0YWxsLWNwcCwgdW5pbnN0YWxsLWNwcCk6IE5ldyB0YXJnZXRzLgoJKGluc3RhbGwtbm9ybWFsKTogRGVwZW5kIG9uICQoSU5TVEFMTF9DUFApLgoJKHVuaW5zdGFsbCk6IERlcGVuZCBvbiAkKFVOSU5TVEFMTF9DUFApLgoJKiBjb25maWd1cmUuaW4gKGNwcF9pbnN0YWxsX2Rpcik6IE5ldywgc3Vic3RpdHV0ZS4KCSh0bWFrZV9maWxlKTogQWRkZWQgdC1pbnN0YWxsLWNwcCBmb3IgLS1lbmFibGUtY3BwLgoJKiBjb25maWd1cmU6IFJlYnVpbHQuCgkqIGNwcC5zaDogTmV3IGNwcCBzY3JpcHQuCgkqIGNvbmZpZy90LWluc3RhbGwtY3BwOiBOZXcgdGFyZ2V0IGZyYWdtZW50LgoKVHVlIE1hciAgMiAwMTo0MDowMSAxOTk5ICBGcmFueiBTaXJsICA8RnJhbnouU2lybC1rZXJuZWxAbGF1dGVyYmFjaC5jb20+CgkJCSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogY3NlLmMgKGZvbGRfcnR4KTogVXBkYXRlIGNvbW1lbnRzIGZvciAoY29uc3QgKG1pbnVzIChsYWJlbCkgKGxhYmVsKSkpCgljYXNlLgoJKGNzZV9pbnNuKTogQXZvaWQgY3JlYXRpbmcgYSBib2d1cyBSRUdfRVFVQUwgbm90ZSBmb3IKCShjb25zdCAobWludXMgKGxhYmVsKSAobGFiZWwpKSkKCShyZWNvcmRfanVtcF9jb25kKTogRml4IG1pc21hdGNoZWQgcGFyZW4gaW4gY29tbWVudC4KClR1ZSBNYXIgIDIgMDE6MDc6MTIgMTk5OSAgRGFuIE5pY29sYWVzY3UgIDxkYW5uQGdvZHppbGxhLmljcy51Y2kuZWR1PgoKCSogZmluYWwuYyAoZW5kX2ZpbmFsKTogVGhlcmUgYXJlIDExIHdvcmRzIGluIHRoZSAibWFpbiBoZWFkZXIiCglzdHJ1Y3R1cmUsIG5vdCAxMC4KClR1ZSBNYXIgIDIgMDA6MDk6MTggMTk5OSAgTWFyYyBFc3BpZSAgPGVzcGllQGN2cy5vcGVuYnNkLm9yZz4KCgkqIGV4dGVuZC50ZXhpOiBSZWZlcmVuY2UgX19leHRlbnNpb25fXyBpbiB0aGUgaW5kZXguCgpNb24gTWFyICAxIDE5OjA5OjMyIDE5OTkgIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KCgkqIE1ha2VmaWxlLmluIChDUk9TU19GTE9BVF9IKTogRGVsZXRlLgoJKEZMT0FUX0gpOiBVc2UgZmxvYXRfaF9maWxlLgoJKHJlc3QuY3Jvc3MsIHN0bXAtaW50LWhkcnMpOiBEZWxldGUgZ2Zsb2F0LmggZGVwZW5kZW5jeS4KCShnZmxvYXQuaCk6IERlbGV0ZS4KCShzdG1wLWludC1oZHJzKTogVXNlIEZMT0FUX0ggaW5zdGVhZCBvZiBnZmxvYXQuaC4KCShtb3N0bHljbGVhbik6IERlbGV0ZSBnbG9hdC5oIHJlZmVyZW5jZS4KCShpbnN0YWxsLWNyb3NzLXJlc3QsIGluc3RhbGwtZmxvYXQtaC1jcm9zcywgc3RtcC1oZWFkZXJzKTogVXBkYXRlCgljb21tZW50cy4KCSogY29uZmlndXJlLmluIChzcGFyY3Y5LSotc29sYXJpczIqKTogU2V0IGZsb2F0X2Zvcm1hdCB0byBub25lLgoJKHNwYXJjLSotc29sYXJpczIqKTogU2V0IGZsb2F0X2Zvcm1hdCB0byBub25lIGZvciAyLjUgYW5kIGhpZ2hlci4KCShmbG9hdF9oX2ZpbGUpOiBTZXQgZnJvbSBmbG9hdF9mb3JtYXQuICBTdWJzdGl0dXRlIGludG8gTWFrZWZpbGUuaW4uCgkoZmxvYXRfZm9ybWF0KTogTm8gbG9uZ2VyIHN1YnN0aXR1dGUgaW50byBNYWtlZmlsZS5pbi4KCSogY3Jvc3MtbWFrZSAoRkxPQVRfSCk6IERlbGV0ZS4KCSogY29uZmlnL21pcHMvdC1jcm9zczY0IChGTE9BVF9IKTogRGVsZXRlLgoJKiBjb25maWd1cmU6IFJlYnVpbHQuCgpNb24gTWFyICAxIDE2OjM2OjE4IDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIG1pcHMubWQgKGRpdl90cmFwX25vcm1hbCwgZGl2X3RyYXBfbWlwczE2KTogUmVxdWlyZSB0aGUgZGVwZW5kZW50CglpbnNuIHRvIGJlIGFuIElOU04gYmVmb3JlIGxvb2tpbmcgYXQgaXRzIHBhdHRlcm4uCgpNb24gTWFyICAxIDE1OjAzOjUxIDE5OTkgIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy9tNjhrL2xiMXNmNjguYXNtICh1ZGl2c2kzKTogQ2hhbmdlIGptaSB0byBqY3MuICBGaXggY29tbWVudHMuCgkqIGNvbmZpZy9tNjhrL202OGsuaCAoTEVHSVRJTUFURV9JTkRFWF9SRUdfUCk6IFJlamVjdCBTSUdOX0VYVEVORCBvZgoJSEltb2RlIHJlZyB3aGVuIFRBUkdFVF81MjAwLgoKTW9uIE1hciAgMSAyMTo0NDozMCAxOTk5ICBKIm9ybiBSZW5uZWNrZSAgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCUZyb20gVG9zaGl5YXN1IE1vcml0YToKCSogc2guaCAoQ0FDSEVfTE9HKTogU0gyIGhhcyBjYWNoZSwgdG9vLgoKTW9uIE1hciAgMSAxNDoyMzozNiAxOTk5ICBDYXRoZXJpbmUgTW9vcmUgIDxjbG1AY3lnbnVzLmNvbT4KCgkqIHRvcGxldi5jIChjb21waWxlX2ZpbGUpOiBEaXNhYmxlIC1mZnVuY3Rpb24tc2VjdGlvbnMgYW5kCglkZWJ1Z2dpbmcgd2FybmluZyBpZiB0aGUgb2JqZWN0IGZvcm1hdCBpcyBlbGYuCgpNb24gTWFyICAxIDExOjQ2OjI1IDE5OTkgIFZsYWRpbWlyIE4uIE1ha2Fyb3YgIDx2bWFrYXJvdkBjeWdudXMuY29tPgoKCSogY29uZmlnL2g4MzAwL2g4MzAwLmMgKHByaW50X29wZXJhbmQpOiBVc2UgMTYgYml0IGFkZHJlc3NpbmcKCXdoZW4gdGhlIGRhdGEgaW4gOC1iaXQgYXJlYSBhbmQgY2FuIG5vdCBiZSBhZGRyZXNzZWQgYnkgOC1iaXQuCgpTdW4gRmViIDI4IDE2OjQwOjAwIDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBmbG93LmMgKGNyZWF0ZV9iYXNpY19ibG9jayk6IERpc3JlZ2FyZCBpbnRlZ3JhdGVkIGJiIG5vdGVzLgoKU3VuIEZlYiAyOCAxNTo1NzowNiAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogc3BhcmMubWQgKGJsb2NrYWdlLCBub25sb2NhbF9nb3RvX3JlY2VpdmVyKTogU2V0IGxlbmd0aCB0byAwLgoKU3VuIEZlYiAyOCAxNDo0Nzo1MyAxOTk5ICBBcnR1cm8gTW9udGVzICA8bWl0b3N5c0Bjb2xvbXNhdC5jb20uY28+CgoJKiBjb25maWcvaTM4Ni90LXNjbzVnYXMgKGNydGkubyk6IE5ldyB0YXJnZXQuCgpTdW4gRmViIDI4IDE1OjEwOjE3IDE5OTkgIERhdmlkIEVkZWxzb2huICA8ZWRlbHNvaG5AZ251Lm9yZz4KCgkqIHJzNjAwMC5tZCAoZWxmX2hpZ2gsIG1vdnNpX2dvdCwgKm1vdnNpX2dvdF9pbnRlcm5hbCwKCSptb3ZzaV9nb3RfaW50ZXJuYWxfbWVtLCBHT1Qgc3BsaXR0ZXIsIG1vdmRmX2hhcmRmbG9hdDMyLAoJbW92ZGZfc29mdGZsb2F0MzIsIG1vdmRmX2hhcmRmbG9hdDY0LCBtb3ZkZl9zb2Z0ZmxvYXQ2NCwKCWxvYWRfbXVsdGlwbGUsIGFsbG9jYXRlX3N0YWNrLCBjYWxsX2luZGlyZWN0X2FpeDMyLAoJY2FsbF9pbmRpcmVjdF9haXg2NCwgY2FsbF92YWx1ZV9pbmRpcmVjdF9haXgzMiwKCWNhbGxfdmFsdWVfaW5kaXJlY3RfYWl4NjQsIGNhbGxfaW5kaXJlY3RfbnQsCgljYWxsX3ZhbHVlX2luZGlyZWN0X250KTogVXNlIGdwY19yZWdfb3BlcmFuZCBpbnN0ZWFkIG9mCglyZWdpc3Rlcl9vcGVyYW5kLgoKU3VuIEZlYiAyOCAxNToxMDoxNyAxOTk5ICBNaWNoYWVsIE1laXNzbmVyICA8bWVpc3NuZXJAY3lnbnVzLmNvbT4KCgkqIHJzNjAwMC5tZCAob25lX2NtcGxzaTIsIGFuZHNpMywgaW9yc2kzLCB4b3JzaTMsICplcXZzaTMsCgkqYW5kY3NpMywgKmlvcmNzaTMsICpuYW5kc2kzLCAqbm9yc2kzKTogQWRkIGFsdGVybmF0aXZlcyB0byB1c2UgQ1IKCW90aGVyIHRoYW4gY3IwLgoJKiByczYwMDAuYyAoYW5keyw2NH1fb3BlcmFuZCk6IElmIHRoZSB1c2VyIGRpZCAtZmZpeGVkLWNyMCwgZG9uJ3QKCWFsbG93IGFuZGkuIG9yIGFuZGlzLiB3aGljaCBhbHdheXMgc2V0IGNyMC4KClN1biBGZWIgMjggMDE6MTU6MDQgMTk5OSAgSmVmZiBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHZlcnNpb24uYzogQnVtcCBmb3Igc25hcHNob3QuCgpTdW4gRmViIDI4IDAyOjAwOjM4IDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGludm9rZS50ZXhpOiBVcGRhdGUgaW5mb3JtYXRpb24gZm9yIFBBIHNjaGVkdWxpbmcuCgpTYXQgRmViIDI3IDIzOjIxOjQ3IDE5OTkgIEplcnJ5IFF1aW5uICA8anF1aW5uQG5vcnRlbG5ldHdvcmtzLmNvbT4KCQkJICBNaWtlIFN0dW1wICA8bXJzQHdycy5jb20+CgoJKiBwYS5jIChvdmVycmlkZV9vcHRpb25zKTogQ2hhbmdlIGRlZmF1bHQgdG8gNzEwMExDLgoKCSogcGEuaCAoUkVHX0FMTE9DX09SREVSKTogQ2hhbmdlIG9yZGVyIHRvIGFsbG9jYXRlIGxlZnQgaGFsZiBvZgoJZmxvYXQgcmVncyBiZWZvcmUgcmlnaHQgaGFsZiBvZiBmbG9hdCByZWdzLgoKU2F0IEZlYiAyNyAyMjo0ODozOCAxOTk5ICBILkouIEx1ICAoaGpsQGdudS5vcmcpCgkJCSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogZnJhbWUuaDogVXBkYXRlIHNvbWUgY29tbWVudHMuCgkqIGRlZmF1bHRzLmggKFRBUkdFVF9BVFRSSUJVVEVfV0VBSyk6IERlZmluZS4KCSogY3J0c3R1ZmYuYyAoX19yZWdpc3Rlcl9mcmFtZV9pbmZvLCBfX2RlcmVnaXN0ZXJfZnJhbWVfaW5mbyk6IERlY2xhcmUKCXVzaW5nIFRBUkdFVF9XRUFLX0FUVFJJQlVURS4KCShfX2RvX2dsb2JhbF9kdG9yc19hdXgpOiBDaGVjayBpZiBfX2RlcmVnaXN0ZXJfZnJhbWVfaW5mbyBpcwoJemVybyBiZWZvcmUgY2FsbGluZyBpdC4KCShfX2RvX2dsb2JhbF9kdG9ycyk6IExpa2V3aXNlLgoJKGZyYW1lX2R1bW15KTogQ2hlY2sgaWYgX19yZWdpc3Rlcl9mcmFtZV9pbmZvIGlzIHplcm8gYmVmb3JlCgljYWxsaW5nIGl0LgoJKF9fZnJhbWVfZHVtbXkpOiBMaWtld2lzZS4KClNhdCBGZWIgMjcgMTk6MTg6MjQgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogU0VSVklDRTogVXBkYXRlIGZyb20gdGhlIEZTRi4KClNhdCBGZWIgMjcgMTQ6MzE6MjIgMTk5OSAgQXJ0dXJvIE1vbnRlcyAgPG1pdG9zeXNAY29sb21zYXQuY29tLmNvPgoKCSogY29uZmlnL2kzODYvdC1zY281IChjcnRpLm8pOiBOZXcgdGFyZ2V0LgoJKiBjb25maWcvaTM4Ni9zY281LmggKFNUQVJURklMRV9TUEVDKTogSW5jbHVkZSBjcnRpLm8gd2hlbgoJbGlua2luZyAtc2hhcmVkLgoJKiBjb25maWd1cmUuaW4gKGlbMzQ1NjddODYtKi1zY28zLjJ2NSopOiBBZGQgY3J0aS5vLgoKU2F0IEZlYiAyNyAwMToxMjo0MCAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBtZC50ZXhpIChwcm9sb2d1ZSxlcGlsb2d1ZSk6IERvY3VtZW50IG5hbWVkIHBhdHRlcm5zLgoKRnJpIEZlYiAyNiAxOTozMToyNSAxOTk5ICBEYXZlIExvdmUgIDxmeEBnbnUub3JnPgoKCSogbWQudGV4aSwgaW52b2tlLnRleGk6IEZpeCB1bnRlcm1pbmF0ZWQgQHhyZWZzLgoKRnJpIEZlYiAyNiAxNTozMzo0NSAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogZ2VuYXR0cnRhYi5jIChzaW1wbGlmeV9rbm93aW5nKTogRml4IHVuaW5pdGlhbGl6ZWQgcmVhZAoJaW4gRmViIDIxIGNoYW5nZS4KCgkqIGdlbmV4dHJhY3QuYyAobWFpbik6IENsZWFyIHJlY29nX29wZXJhbmRzIGJlZm9yZSBleHRyYWN0aW5nLgoKRnJpIEZlYiAyNiAwMjoyNDo1NyAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBjLXByYWdtYS5jIChhZGRfd2Vhayk7IERlbGV0ZS4gIE1vdmVkIGludG8uLi4KCSogdmFyYXNtLmMgKGFkZF93ZWFrKTogTmV3IGV4dGVybmFsIGZ1bmN0aW9uLgoJKGRlY2xhcmVfd2Vhayk6IElmIEhBTkRMRV9QUkFHTUFfV0VBSywgdGhlbiBhZGQgdGhlIGZ1bmN0aW9uIHRvCgl0aGUgbGlzdCBvZiB3ZWFrIGZ1bmN0aW9ucy4KCSogYy1wcmFnbWEgKGFkZF93ZWFrKTogRGVjbGFyZS4KClRodSBGZWIgMjUgMjM6NDM6NTkgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCglGbG93IHJld3JpdGUgdG8gdXNlIGJhc2ljIGJsb2NrIHN0cnVjdHVyZXMgYW5kIGVkZ2UgbGlzdHM6CgoJKiBiYXNpYy1ibG9jay5oICh4X2Jhc2ljX2Jsb2NrX2hlYWQsIHhfYmFzaWNfYmxvY2tfZW5kKTogS2lsbC4KCShiYXNpY19ibG9ja19jb21wdXRlZF9qdW1wX3RhcmdldCwgYmFzaWNfYmxvY2tfbGl2ZV9hdF9zdGFydCk6IEtpbGwuCgkoc3RydWN0IGVkZ2VfZGVmKTogTmV3LgoJKHN0cnVjdCBiYXNpY19ibG9ja19kZWYpOiBOZXcuCgkoYmFzaWNfYmxvY2tfaW5mbyk6IE5ldy4KCShCTE9DS19IRUFELCBCTE9DS19FTkQpOiBVcGRhdGUuCgkoRU5UUllfQkxPQ0tfUFRSLCBFWElUX0JMT0NLX1BUUik6IE5ldy4KCSh1aWRfYmxvY2tfbnVtYmVyKTogS2lsbC4KCShiYXNpY19ibG9ja19mb3JfaW5zbiwgQkxPQ0tfRk9SX0lOU04pOiBOZXcuCgkoQkxPQ0tfTlVNKTogVXBkYXRlLgoJKiBmbG93LmMgKFhOTUFMTE9DKTogS2lsbC4KCShtYXhfdWlkX2Zvcl9mbG93KTogS2lsbC4KCSh1aWRfYmxvY2tfbnVtYmVyKTogS2lsbC4KCSh1aWRfdm9sYXRpbGUpOiBUdXJuIGludG8gYSBiaXRtYXAuCgkoU0VUX0lOU05fVk9MQVRJTEUpOiBOZXcuCgkoYmFzaWNfYmxvY2tfaW5mbyk6IE5ldy4KCShlbnRyeV9leGl0X2Jsb2Nrcyk6IE5ldy4KCSh4X2Jhc2ljX2Jsb2NrX2hlYWQsIHhfYmFzaWNfYmxvY2tfZW5kKTogS2lsbC4KCShiYXNpY19ibG9ja19jb21wdXRlZF9qdW1wX3RhcmdldCwgYmFzaWNfYmxvY2tfbGl2ZV9hdF9zdGFydCk6IEtpbGwuCgkoZmxvd19pbnRfbGlzdF9ibG9ja3MsIGJhc2ljX2Jsb2NrX3N1Y2MsIGJhc2ljX2Jsb2NrX3ByZWQpOiBLaWxsLgoJKGJhc2ljX2Jsb2NrX2xvb3BfZGVwdGgpOiBLaWxsLgoJKGJhc2ljX2Jsb2NrX2Zvcl9pbnNuKTogTmV3LgoJKGZpbmRfYmFzaWNfYmxvY2tzKTogU3BsaXQgb3V0IGluaXRpYWwgYmxvY2sgY291bnRpbmcgaW50bwoJY291bnRfYmFzaWNfYmxvY2tzLiAgQ2FsbCBmdW5jdGlvbnMgc3BsaXQgb3V0IG9mIGZpbmRfYmFzaWNfYmxvY2tzXzEuCgkoY291bnRfYmFzaWNfYmxvY2tzKTogTmV3LgoJKGZpbmRfYmFzaWNfYmxvY2tzXzEpOiBTcGxpdCBvdXQgZWRnZSByZWNvZ25pdGlvbiwgdW5yZWFjaGFibGUKCWJsb2NrIGRlbGV0aW9uLgoJKGNyZWF0ZV9iYXNpY19ibG9jayk6IE5ldy4KCShjb21wdXRlX2JiX2Zvcl9pbnNuKTogTmV3LgoJKGNsZWFyX2VkZ2VzKTogTmV3LgoJKGZyZWVfYmJfbWVtb3J5KTogS2lsbC4KCShhZGRfZWRnZSwgYWRkX2VkZ2VfdG9fbGFiZWwpOiBLaWxsLgoJKG1hcmtfbGFiZWxfcmVmKTogS2lsbC4KCShtYWtlX2VkZ2VzKTogUmV3cml0ZSB0byB1c2UgZWRnZSBsaXN0cy4KCShtYWtlX2VkZ2UsIG1ha2VfbGFiZWxfZWRnZSk6IE5ldy4KCShtYXJrX2NyaXRpY2FsX2VkZ2VzKTogTmV3LgoJKHNwbGl0X2VkZ2UsIGluc2VydF9pbnNuX29uX2VkZ2UpOiBOZXcuCgkoY29tbWl0X29uZV9lZGdlX2luc2VydGlvbiwgY29tbWl0X2VkZ2VfaW5zZXJ0aW9ucyk6IE5ldy4KCShkZWxldGVfdW5yZWFjaGFibGVfYmxvY2tzKTogUmV3cml0ZSB0byB1c2UgZWRnZSBsaXN0cy4KCVNwbGl0IG91dCBFSCByZWdpb24gbWFuaXB1bGF0aW9uIGludG8gZGVsZXRlX2VoX3JlZ2lvbnMuCglDYWxsIHRpZHlfZmFsbHRocnVfZWRnZSBhbmQgbWVyZ2VfYmxvY2tzLgoJKGRlbGV0ZV9laF9yZWdpb25zKTogTmV3LgoJKGRlbGV0ZV9ub3RlX3ApOiBOZXcuCgkoZGVsZXRlX2luc25fY2hhaW4pOiBOZXcuCgkoZGVsZXRlX2Jsb2NrKTogU3BsaXQgb3V0IGNvZGUgaW50byBkZWxldGVfaW5zbl9jaGFpbiBhbmQKCXRpZHlfZmFsbHRocnVfZWRnZS4gIFVwZGF0ZSBlZGdlIGxpc3RzLgoJKGV4cHVuZ2VfYmxvY2spOiBOZXcuCgkoZmxvd19kZWxldGVfaW5zbik6IE5ldz8KCShjYW5fZGVsZXRlX2xhYmVsX3ApOiBOZXc/CgkobWVyZ2VfYmxvY2tzX25vbW92ZSwgbWVyZ2VfYmxvY2tzKTogTmV3LgoJKHRpZHlfZmFsbHRocnVfZWRnZSk6IE5ldy4KCShjYWxjdWxhdGVfbG9vcF9kZXB0aCk6IE5ldy4KCShsaWZlX2FuYWx5c2lzKTogQWxsb2NhdGUgYW5kIGZyZWUgdWlkX3ZvbGF0aWxlLgoJKGZyZWVfYmFzaWNfYmxvY2tfdmFycyk6IFVwZGF0ZSBmb3IgbmV3IHN0cnVjdHVyZXMuCgkocmVjb3JkX3ZvbGF0aWxlX2luc25zKTogVXNlIFNFVF9JTlNOX1ZPTEFUSUxFLgoJKG1hcmtfcmVnc19saXZlX2F0X2VuZCk6IFRpZHkgRVhJVF9JR05PUkVfU1RBQ0sgdXNhZ2UuCgkobWFya191c2VkX3JlZ3MpOiBMaWtld2lzZS4KCShsaWZlX2FuYWx5c2lzXzEpOiBVc2UgYmIgZ2xvYmFsX2xpdmVfYXRfc3RhcnQsIGdsb2JhbF9saXZlX2F0X2VuZCwKCWxvY2FsX3NldCByZWdzZXRzLiAgVXNlIGJiLT5hdXggdG8gc3RvcmUgbmV3X2xpdmVfYXRfZW5kLiAgQmVnaW4KCWxpZmUgcHJvcGFnYXRpb24gZnJvbSBFWElUX0JMT0NLIHJhdGhlciB0aGFuIGxhc3QgYmxvY2suICBDbGVhcgoJcmVnc19ldmVyX2xpdmUgYWZ0ZXIgbWFya19yZWdzX2xpdmVfYXRfZW5kLgoJKGFsbG9jYXRlX2Zvcl9saWZlX2FuYWx5c2lzKTogVXBkYXRlIGZvciBuZXcgc3RydWN0dXJlcy4KCShwcm9wYWdhdGVfYmxvY2spOiBTcGxpdCBvdXQgbG9vcCBkZXB0aCBjYWxjdWxhdGlvbiB0bwoJY2FsY3VsYXRlX2xvb3BfZGVwdGguCgkocmVnbm9fdW5pbml0aWFsaXplZCk6IFVzZSBiYi0+Z2xvYmFsX2xpdmVfYXRfc3RhcnQuCgkocmVnbm9fY2xvYmJlcmVkX2F0X3NldGptcCk6IExpa2V3aXNlLgoJKGR1bXBfYmJfZGF0YSk6IExpa2V3aXNlLgoJKGZpbmRfYXV0b19pbmMpOiBVc2UgQkxPQ0tfRk9SX0lOU04gaW5zdGVhZCBvZiBCTE9DS19OVU0uCgkoZHVtcF9mbG93X2luZm8pOiBVcGRhdGUgZm9yIG5ldyBzdHJ1Y3R1cmVzLgoJKGR1bXBfZWRnZV9pbmZvKTogTmV3LgoJKHByaW50X3J0bF93aXRoX2JiKTogVXBkYXRlIGZvciBuZXcgc3RydWN0dXJlcy4KCShjb21wdXRlX3ByZWRzX3N1Y2NzKTogRG8gbm8gd29yayAtLSBjb252ZXJ0IGVkZ2UgbGlzdHMuCgkoc2V0X2Jsb2NrX2Zvcl9pbnNuKTogRnJvbSBjb3Jwc2Ugb2Ygb2xkIHNldF9ibG9ja19udW0uCgkoc2V0X2Jsb2NrX251bSk6IENhbGwgaXQuCgoJKiBydGwuYyAobm90ZV9pbnNuX25hbWUpOiBBZGQgTk9URV9JTlNOX0JBU0lDX0JMT0NLLgoJKiBydGwuaCAocnR1bmlvbl9kZWYpOiBBZGQgYmIgZW50cnkuCgkoTk9URV9CQVNJQ19CTE9DSyk6IE5ldy4KCShOT1RFX0lOU05fQkFTSUNfQkxPQ0spOiBOZXcuCgoJKiB2YXJyYXkuaCAodmFycmF5X2RhdGFfdGFnKTogQWRkIGJiIGVudHJ5LgoJKFZBUlJBWV9CQl9JTklULCBWQVJSQVlfQkIpOiBOZXcuCgoJKiBlbWl0LXJ0bC5jIChlbWl0X2xhYmVsX2JlZm9yZSk6IE5ldy4KCgkqIGV4Y2VwdC5jIChleHBhbmRfcmV0aHJvdyk6IERlbGV0ZSBpbnNucyBmb2xsb3dpbmcgdGhlIGNhbGwgdG8KCXJldGhyb3cuICBQdXQgdGhlIFJFR19FSF9SRVRIUk9XIG9uIHRoZSBjYWxsLgoKCSoganVtcC5jIChyZXR1cm5qdW1wX3AsIHJldHVybmp1bXBfcF8xKTogTmV3LgoKCSogZXhwci5oIChub25sb2NhbF9nb3RvX2hhbmRsZXJfbGFiZWxzKTogTmV3IGRlY2xhcmF0aW9uLgoJKiBmdW5jdGlvbi5jIChub25sb2NhbF9nb3RvX2hhbmRsZXJfbGFiZWxzKTogRGVmaW5lIGl0LgoJKHB1c2hfZnVuY3Rpb25fY29udGV4dF90byk6IFNhdmUgaXQuCgkocG9wX2Z1bmN0aW9uX2NvbnRleHRfZnJvbSk6IFJlc3RvcmUgaXQuCgkoaW5pdF9mdW5jdGlvbl9zdGFydCk6IENsZWFyIGl0LgoJKG5vbmxvY2FsX2xhYmVsX3J0eF9saXN0KTogS2lsbC4KCSogZnVuY3Rpb24uaCAoc3RydWN0IGZ1bmN0aW9uKTogQWRkIHN0b3JhZ2Ugc3BhY2UgZm9yIGl0LgoJKiBzdG10LmMgKGV4cGFuZF9ubF9oYW5kbGVyX2xhYmVsKTogUmV0dXJuIHRoZSBuZXcgbGFiZWwuCgkoZXhwYW5kX25sX2dvdG9fcmVjZWl2ZXJzKTogQ29sbGVjdCBhIGxpc3Qgb2YgdGhlbSBpbgoJbm9ubG9jYWxfZ290b19oYW5kbGVyX2xhYmVscy4KCgkqIE1ha2VmaWxlLmluIChwcmludC1ydGwubyk6IERlcGVuZCBvbiBiYXNpYy1ibG9jay5oLgoJKGZsb3cubyk6IERlcGVuZCBvbiBpbnNuLWZsYWdzLmguCgoJKiBmdW5jdGlvbi5jICh0aHJlYWRfcHJvbG9ndWVfYW5kX2VwaWxvZ3VlX2luc25zKTogRG8gbm90CgloYWxmLWhlYXJ0ZWRseSB1cGRhdGUgYmIgc3RydWN0dXJlcy4KCgkqIHRvcGxldi5jOiBBZGQgZmxvdzIgZHVtcCBhcyAtZHcuCgkocmVzdF9vZl9jb21waWxhdGlvbik6IEZpbmlzaCAuZ3JlZyBiZWZvcmUgZmxvdzIuCgoJKiBncmFwaC5jIChkcmF3X2VkZ2UpOiBIYW5kbGUgY2xhc3MgMy4KCShwcmludF9ydGxfZ3JhcGhfd2l0aF9iYik6IE1ha2UgYWJub3JtYWwgZWRnZXMgcmVkIGNsYXNzIDIsCgljaGFuZ2Ugbm9uLWZhbGwtdGhydSBidXQgYWRqYWNlbnQgdG8gZ3JlZW4gY2xhc3MgMy4gIFVwZGF0ZQoJdG8gdXNlIG5ldyBzdHJ1Y3R1cmVzLgoKCSogcHJpbnQtcnRsLmMgKHByaW50X3J0eCk6IEhhbmRsZSBOT1RFX0lOU05fQkFTSUNfQkxPQ0suCgoJKiByZWctc3RhY2suYyAoQkxPQ0tfTlVNKTogQ29udmVydCB0byBmdW5jdGlvbi4gIEFib3J0IGlmCglibG9ja19udW1iZXIgaXMgLTEuCgkocmVnX3RvX3N0YWNrKTogSW5pdGlhbGl6ZSBibG9ja19udW0gdG8gLTEuCgoJKiBjb21iaW5lLmMgKHNldF9ub256ZXJvX2JpdHNfYW5kX3NpZ25fY29waWVzKTogVXBkYXRlIHJlZmVyZW5jZQoJdG8gYmFzaWNfYmxvY2tfbGl2ZV9hdF9zdGFydCB0byBiYi0+Z2xvYmFsX2xpdmVfYXRfc3RhcnQuCgkodHJ5X2NvbWJpbmUpOiBMaWtld2lzZS4KCShyZWdfZGVhZF9hdF9wKTogTGlrZXdpc2UuCgkqIGdsb2JhbC5jIChnbG9iYWxfY29uZmxpY3RzKTogTGlrZXdpc2UuCglIYW5kbGUgc3RhY2sgcmVncyBvbiBhbGwgYWJub3JtYWwgZWRnZXMsIG5vdCBqdXN0IGNvbXB1dGVkIGp1bXBzLgoJKG1hcmtfZWxpbWluYXRpb24pOiBVcGRhdGUgcmVmZXJlbmNlIHRvIGJhc2ljX2Jsb2NrX2xpdmVfYXRfc3RhcnQuCgkoYnVpbGRfaW5zbl9jaGFpbik6IExpa2V3aXNlLgoJKiBoYWlmYS1zY2hlZC5jIChoYWlmYV9lZGdlKTogUmVuYW1lIGZyb20gZWRnZSBmb3IgY29uZmxpY3QuCgkoaXNfY2ZnX25vbnJlZ3VsYXIpOiBMb29rIGF0IG5vbmxvY2FsX2dvdG9faGFuZGxlcl9sYWJlbHMgaW5zdGVhZAoJb2Ygbm9ubG9jYWxfbGFiZWxfcnR4X2xpc3QuCgkoY2hlY2tfbGl2ZV8xKTogVXBkYXRlIHJlZmVyZW5jZSB0byBiYXNpY19ibG9ja19saXZlX2F0X3N0YXJ0LgoJKHVwZGF0ZV9saXZlXzEpOiBMaWtld2lzZS4KCShmaW5kX3ByZV9zY2hlZF9saXZlKTogTGlrZXdpc2UuCgkoZmluZF9wb3N0X3NjaGVkX2xpdmUpOiBMaWtld2lzZS4KCSogbG9jYWwtYWxsb2MuYyAodXBkYXRlX2VxdWl2X3JlZ3MpOiBMaWtld2lzZS4KCShibG9ja19hbGxvYyk6IExpa2V3aXNlLgoJKiByZWxvYWQxLmMgKHJlbG9hZCwgcmVsb2FkX2NvbWJpbmUpOiBMaWtld2lzZS4KCSogcmVnbW92ZS5jIChtYXJrX2ZsYWdzX2xpZmVfem9uZXMpOiBMaWtld2lzZS4KCSogcmVzb3VyY2UuYyAobWFya190YXJnZXRfbGl2ZV9yZWdzKTogTGlrZXdpc2UuCgkqIHNjaGVkLmMgKHNjaGVkdWxlX2Jsb2NrKTogTGlrZXdpc2UuCgoJKiByZWdjbGFzcy5jIChyZWdzZXRfcmVsZWFzZV9tZW1vcnkpOiBEb24ndCBmcmVlCgliYXNpY19ibG9ja19saXZlX2F0X3N0YXJ0LgoKCSogdW5yb2xsLmMgKGNvcHlfbG9vcF9ib2R5KTogRG9uJ3QgZHVwbGljYXRlIE5PVEVfSU5TTl9CQVNJQ19CTE9DSy4KClRodSBGZWIgMjUgMjE6MzI6MzQgMTk5OSAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZml4aW5jLndyYXA6IEFsc28gaGFuZGxlIHN0cnVjdCBxdWV1ZSBpbiBzeXMvc3RyZWFtLmguCgkqIGZpeGluYy5zdnI0OiBMaWtld2lzZS4KCgkqIGR3YXJmMm91dC5jIChzY29wZV9kaWVfZm9yKTogU2V0IHNjb3BlX2RpZSB0byBjb21wX3VuaXRfZGllCglyYXRoZXIgdGhhbiBhc3NlcnRpbmcgaXQuCgpUaHUgRmViIDI1IDIzOjMzOjA2IDE5OTkgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGNwcGV4cC5jIChsZWZ0X3NoaWZ0LCByaWdodF9zaGlmdCwgcGFyc2VfY2hhcmNvbnN0LCBDT01QQVJFLAoJY3BwX3BhcnNlX2V4cHIpOiBSZXBsYWNlIHVzZXMgb2YgbG9uZy9IT1NUX0JJVFNfUEVSX0xPTkcgd2l0aAoJSE9TVF9XSURFU1RfSU5UL0hPU1RfQklUU19QRVJfV0lERVNUX0lOVC4KCgkqIE1ha2VmaWxlLmluIChjcHBtYWluLm8sIGNwcGxpYi5vLCBjcHBoYXNoLm8sIGNwcGFsbG9jLm8sCgljcHBlcnJvci5vLCBjcHBleHAubywgY3BwZmlsZXMubywgY3BwaW5pdC5vLCBmaXgtaGVhZGVyLm8sCglzY2FuLWRlY2xzLm8pOiBEb24ndCBkZXBlbmQgb24gbWFjaG1vZGUuaC4KCgkqIGNwcGV4cC5jOiBEb24ndCBkZWZpbmUgQ0hBUl9CSVQgb3IgSE9TVF9CSVRTX1BFUl9XSURFX0lOVCBhbnltb3JlLgoJUmVwbGFjZSBhbGwgaW5zdGFuY2VzIG9mIEhPU1RfV0lERV9JTlQgd2l0aCBIT1NUX1dJREVTVF9JTlQuCgoJKiBjcHBmaWxlcy5jOiBMaWtld2lzZS4KCgkqIGNwcGxpYi5jOiBMaWtld2lzZS4KCgkqIGNwcGxpYi5oOiBMaWtld2lzZS4gIEFsc28gZG9uJ3QgaW5jbHVkZSBtYWNobW9kZS5oIGFueW1vcmUuCgpUaHUgRmViIDI1IDE4OjQ2OjI2IDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBnY2MuYyAoZGVmYXVsdF9jb21waWxlcnMpOiBEZWZpbmUgX19GQVNUX01BVEhfXyB3aGVuIGFwcHJvcHJpYXRlLgoJKiBvYmpjL2xhbmctc3BlY3MuaDogTGlrZXdpc2UuCgpUaHUgRmViIDI1IDE2OjE5OjQzIDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHBhLm1kIChjYWxsIHBhdHRlcm5zKTogTG9zZSB1bnVzZWQgYXJndW1lbnQgdG8gb3V0cHV0X2NhbGwuCgoJKiBwcmludC1ydGwuYyAocHJpbnRfcnRsKTogUHJpbnQgL2ogYW5kIC9jIGZvciB0aGUganVtcC9jYWxsIGZsYWdzLgoKMTk5OS0wMi0yNSAgWmFjayBXZWluYmVyZyAgPHphY2tAcmFiaS5jb2x1bWJpYS5lZHU+CgoJKiBjcHBoYXNoLmMgKGluc3RhbGwpOiBSZW5hbWUgdG8gY3BwX2luc3RhbGwsIGFkZCBjcHBfcmVhZGVyKgoJZmlyc3QgYXJndW1lbnQuICBBbGwgY2FsbGVycyBjaGFuZ2VkLgoJKGhhc2h0YWIpOiBSZW1vdmVkLgoJKGNwcF9sb29rdXAsIGNwcF9pbnN0YWxsKTogQ2hhbmdlIGFsbCByZWZzIHRvIGhhc2h0YWIgdG8KCXBmaWxlLT5oYXNodGFiLgoJKGNwcF9oYXNoX2NsZWFudXApOiBSZW1vdmVkLgoJKiBjcHBoYXNoLmg6IEFkanVzdCBwcm90b3R5cGVzLgoJKiBjcHBsaWIuaCAoc3RydWN0IGNwcF9yZWFkZXIpOiBBZGQgaGFzaHRhYiBwb2ludGVyLgoJKiBjcHBpbml0LmMgKGNwcF9yZWFkZXJfaW5pdCk6IEFsc28gYWxsb2NhdGUgc3BhY2UgZm9yIHRoZQoJaGFzaHRhYi4KCShjcHBfY2xlYW51cCk6IERlbGV0ZSBhbGwgbWFjcm9zIGFuZCBmcmVlIHRoZSBoYXNodGFiLgoKVGh1IEZlYiAyNSAyMTo1Mjo1NCAxOTk5ICBKIm9ybiBSZW5uZWNrZSAgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogc2guaCAoUEFTU19JTl9SRUdfUCk6IEZvciBUQVJHRVRfSElUQUNISSwgZG9uJ3QgcGFzcyBzdHJ1Y3R1cmVzCglpbiByZWdpc3RlcnMuCgoJKiBleHByLmggKFBSRVRFTkRfT1VUR09JTkdfVkFSQVJHU19OQU1FRCk6IFByb3ZpZGUgZGVmYXVsdCBkZWZpbml0aW9uLgoJKiBmdW5jdGlvbi5jIChhc3NpZ25fcGFybXMpOiBIb25vciBQUkVURU5EX09VVEdPSU5HX1ZBUkFSR1NfTkFNRUQuCgkqIGNhbGxzLmMgKGV4cGFuZF9jYWxsKTogTGlrZXdpc2UuCgoJKiBzaC5jIChzaF9leHBhbmRfcHJvbG9ndWUpOiBGb3IgVEFSR0VUX0hJVEFDSEksIGRvbid0IHB1c2ggdmFyYXJncyAvCglzdGRhcmcgYXJndW1lbnRzLgoJKiBzaC5oIChDUFBfU1BFQyk6IEFkZCAtRF9fSElUQUNISV9fIGZvciAtbWhpdGFjaGkuCgkoRlVOQ1RJT05fQVJHKTogRm9yIFRBUkdFVF9ISVRBQ0hJLCBkb24ndCBwYXNzIHVubmFtZWQKCWFyZ3VtZW50cyBpbiByZWdpc3RlcnMuCgkoUFJFVEVORF9PVVRHT0lOR19WQVJBUkdTX05BTUVEKTogRGVmaW5lLgoJKiB2YS1zaC5oIChlbnRpcmUgZmlsZSk6IElmIF9fSElUQUNISV9fIGlzIGRlZmluZWQsIHVzZSBzaFsxMjNdCglmbGF2b3IgdmFyYXJncy4KClRodSBGZWIgMjUgMTQ6MzI6NDAgMTk5OSAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogY3NlLmMgKGR1bXBfY2xhc3MpOiBSZXZlcnQgbGFzdCBjaGFuZ2UgYW5kIG1ha2UgdGhlIHByb3RvdHlwZQoJZXh0ZXJuLgoKVGh1IEZlYiAyNSAxOToxMzo0MiAxOTk5ICBKIm9ybiBSZW5uZWNrZSAgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogcnRsLmggKGluc25fZmlyc3RfcCk6IERvbid0IGRlY2xhcmUuCgkqIHJ0bGFuYWwuYyAoaW5zbl9maXJzdF9wKTogRGVsZXRlLgoJKiBsb29wLmMgKGxvb3BfaW5zbl9maXJzdF9wKTogRmFzdGVyIGltcGxlbWVudGF0aW9uLgoKVGh1IEZlYiAyNSAxMDo0NDozNSAxOTk5ICBSaWNoYXJkIEVhcm5zaGF3ICAocmVhcm5zaGFAYXJtLmNvbSkKCgkqIGFybS5oIChUQVJHRVRfU1dJVENIRVMpOiBEZWxldGUgZGVwcmVjYXRlZCBzd2l0Y2hlcyAtbVsyMzZdLgoJKFRBUkdFVF8zLCBUQVJHRVRfNik6IERlbGV0ZS4KCShBUk1fRkxBR19BUk1bMzZdKTogRGVsZXRlLgoJKENQUF9DUFVfQVJDSF9TUEVDKTogTm8gbmVlZCB0byBoYW5kbGUgLW1bMjM2XSBhbnkgbW9yZS4KCShDQzFfU1BFQyk6IERvbid0IGV4cGFuZCAtbVsyMzZdIGludG8gbmV3IGVxdWl2YWxlbnRzLgoJKENQUF9BUENTX1BDX1NQRUMpOiBObyBuZWVkIHRvIGhhbmRsZSAtbVsyMzZdIGFueSBtb3JlLgoJKiBhcm0uYyAoYXJtX292ZXJyaWRlX29wdGlvbnMpOiBEZWxldGUgd2FybmluZ3MgYWJvdXQgZGVwcmVjYXRlZAoJb3B0aW9ucyAtbVsyMzZdLgoKCSogYXJtLmMgKGFybV9maW5hbGl6ZV9waWMpOiBCdWlsZCB0aGUgbGFiZWwgaW50byB0aGUgc3BlY2lhbCBwaWMKCWFkanVzdG1lbnQgaW5zbiBpbnN0ZWFkIG9mIGlzc3VpbmcgaXQgc2VwYXJhdGVseS4KCSogYXJtLm1kIChwaWNfYWRkX2RvdF9wbHVzX2VpZ2h0KTogUmV3b3JrIHRvIGNvbnRhaW4gdGhlIGxhYmVsCgl0aGF0IGlzIG5lZWRlZC4KCgkqIGFybS5tZCAoKnplcm9leHRyYWN0cWlfY29tcGFyZTBfc2NyYXRjaCk6IERlbGV0ZS4KCSgqbmVfemVyb2V4dHJhY3RzaSk6IE5ldyBwYXR0ZXJuLgoKVGh1IEZlYiAyNSAxODo0MDowNiAxOTk5ICBKIm9ybiBSZW5uZWNrZSAgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogc3RtdC5jIChleHBhbmRfZW5kX2xvb3ApOiBHcm9rIGNvZGUgZW1pdHRlZCBieQoJZXhwYW5kX2V4aXRfbG9vcF9pZl9mYWxzZS4KClRodSBGZWIgMjUgMTA6MTc6MzIgMTk5OSAgTmljayBDbGlmdG9uICA8bmlja2NAY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy9hcm0vYXJtLmMgKHJldHVybl9pbl9tZW1vcnkpOiBGbG9hdCBmaWVsZHMgaW4gdW5pb25zCglmb3JjZSBhIHJldHVybiBpbiBtZW1vcnkuCgkobG9hZF9tdWx0aXBsZV9zZXF1ZW5jZSk6IEFkZCBjb21tZW50IGV4cGxhaW5pbmcgd2h5IHR3byBMRFIKCWluc3RydWN0aW9ucyBjYW4gYmUgYmV0dGVyIHRoYW4gYW4gTERNSUEgaW5zdHJ1Y3Rpb24uCgoJKiBjb25maWcvYXJtL2FybS5oIChUQVJHRVRfU0hPUlRfQllfQllURVMpOiBBZGQgY29tbWVudAoJZGVzY3JpYmluZyB0aGUgcmVhbCBtZWFuaW5nIG9mIHRoaXMgb3B0aW9uLgoJKEZJWEVEX1JFR0lTVEVSUyk6IERlZmF1bHQgcjEwIHRvIG5vdC1maXhlZC4KCShDQUxMX1VTRURfUkVHSVNURVJTKTogRGVmYXVsdCByMTAgdG8gbm90LWNhbGwtdXNlZC4KCShTVUJUQVJHRVRfQ09ORElUSU9OQUxfUkVHSVNURVJfVVNBR0UpOiBJZiBub3QgZGVmaW5lZCwgZGVmaW5lCglhcyBlbXB0eS4KCShDT05ESVRJT05BTF9SRUdJU1RFUl9VU0FHRSk6IEZpeCByMTAgaWYgVEFSR0VUX0FQQ1NfU1RBQ0sgaXMKCXRydWUuICBJbnZva2UgU1VCVEFSR0VUX0NPTkRJVElPTkFMX1JFR0lTVEVSX1VTQUdFIGFmdGVyCglwZXJmb3JtaW5nIG90aGVyIGNoZWNrcy4KCgkqIGNvbmZpZy9hcm0vYXJtLm1kICh6ZXJvX2V4dGVuZGhpc2kyKTogVW5kbyBwcmV2aW91cyBjaGFuZ2UuCgkoZXh0ZW5kaGlzaTIpOiBVbmRvIHByZXZpb3VzIGNoYW5nZS4KCUFsc28gYWRkIGNvbW1lbnRzIGRlc2NyaWJpbmcgd2h5IFRBUkdFVF9TSE9SVF9CWV9CWVRFUyBjYW4gYmUKCWlnbm9yZWQgZm9yIGFybXY0KHQpIGFyY2hpdGVjdHVyZXMuCgoJKiBjb25maWcvYXJtL3Jpc2NpeC5oIChTVUJUQVJHRVRfQ09ORElUSU9OQUxfUkVHSVNURVJfVVNBR0UpOgoJRGVmaW5lIHRvIGZpeCByMTAuCgoJKiBjb25maWcvYXJtL3Jpc2NpeDEtMS5oCgkoU1VCVEFSR0VUX0NPTkRJVElPTkFMX1JFR0lTVEVSX1VTQUdFKTogRGVmaW5lIHRvIGZpeCByMTAuCgpUaHUgRmViIDI1IDEyOjA5OjA0IDE5OTkgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGNzZS5jIChkdW1wX2NsYXNzKTogTWFrZSB0aGUgZnVuY3Rpb24gZGVmaW5pdGlvbiBzdGF0aWMgdG8gbWF0Y2gKCXRoZSBwcm90b3R5cGUuCgpXZWQgRmViIDI0IDE3OjQ3OjI4IDE5OTkgIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KCgkqIGRieG91dC5jIChnc3RhYi5oKTogVXNlIGlmIENST1NTX0NPTVBJTEUuCgoJKiBkd2FyZjJvdXQuYyAoYWRkX2xvY2F0aW9uX29yX2NvbnN0X3ZhbHVlX2F0dHJpYnV0ZSk6IEFkZCBiaWcKCWVuZGlhbiBjb3JyZWN0aW9uIGZvciBwYXJtcyBwYXNzZWQgaW4gcmVncyBidXQgbGl2aW5nIG9uIHRoZSBzdGFjay4KCldlZCBGZWIgMjQgMTQ6MDM6NTQgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogY2FsbHMuYyAoaW5pdGlhbGl6ZV9hcmd1bWVudF9pbmZvcm1hdGlvbik6IE5ldyBmdW5jdGlvbiBleHRyYWN0ZWQKCWZyb20gZXhwYW5kX2NhbGwuCgkoZXhwYW5kX2NhbGwpOiBVc2UgaW5pdGlhbGl6ZV9hcmd1bWVudF9pbmZvcm1hdGlvbi4gIFJlbW92ZSB2YXJpYWJsZXMKCXdoaWNoIGFyZSBubyBsb25nZXIgdXNlZCBkdWUgdG8gY2xlYW51cHMuCgoJKiBjYWxscy5jIChjb21wdXRlX2FyZ3VtZW50X2Jsb2NrX3NpemUpOiBOZXcgZnVuY3Rpb24sIGV4dHJhY3RlZCBmcm9tCglleHBhbmRfY2FsbHMuCgkoZXhwYW5kX2NhbGxzKTogVXNlIGNvbXB1dGVfYXJndW1lbnRfYmxvY2tfc2l6ZS4gIERlbGV0ZQoJb3JpZ2luYWxfYXJnc19zaXplLCB1c2UgdW5hZGp1c3RlZF9hcmdzX3NpemUgaW5zdGVhZC4KCgkqIGNhbGxzLmMgKHByZWNvbXB1dGVfYXJndW1lbnRzKTogTmV3IGZ1bmN0aW9uLCBleHRyYWN0ZWQgZnJvbQoJZXhwYW5kX2NhbGwuCgkoZXhwYW5kX2NhbGwpOiBVc2UgcHJlY29tcHV0ZV9hcmd1bWVudHMuCgoJKiBjYWxscy5jIChmaW5hbGl6ZV9tdXN0X3ByZWFsbG9jYXRlKTogTmV3IGZ1bmN0aW9uLCBleHRyYWN0ZWQgZnJvbQoJZXhwYW5kX2NhbGwuCgkoZXhwYW5kX2NhbGwpOiBVc2UgZmluYWxpemVfbXVzdF9wcmVhbGxvY2F0ZS4KCgkqIGNhbGxzLmMgKHN0b3JlX29uZV9hcmcpOiBNYXJrICJ2YXJpYWJsZV9zaXplIiBhcyBwb3NzaWJseSB1bnVzZWQuCgoJKiByZWdjbGFzcy5jIChyZWNvcmRfcmVnX2NsYXNzZXMsIGNhc2UgJ3AnKTogU2V0IGNsYXNzZXMgYXBwcm9wcmlhdGVseS4KCUFuIGFsdGVybmF0aXZlIGFsd2F5cyBmYWlscyBpZiBpdCBuZWVkcyBhIHBzZXVkbyBhbmQgbm8gc3VpdGFibGUKCXJlZ2lzdGVyIGNsYXNzIGNhbiBiZSBmb3VuZC4KCldlZCBGZWIgMjQgMTk6NDc6NTYgMTk5OSAgSiJvcm4gUmVubmVja2UgIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIGxvb3AuaCAobG9vcF9pbnNuX2ZpcnN0X3ApOiBEZWNsYXJlLgoJKiBsb29wLmMgKGxvb3BfaW5zbl9maXJzdF9wKTogTm8gbG9uZ2VyIHN0YXRpYy4KCSogdW5yb2xsLmMgKGl0ZXJhdGlvbl9pbmZvKTogRml4IGNvbXBhcmlzb24gdG8KCXJlZ19pdl90eXBlLT5udW1fZWxlbWVudHMuCglCZWZvcmUgYWNjZXNzaW5nIHJlZ19iaXZfY2xhc3MsIGNoZWNrIGluZGV4IGFnYWluc3QKCW1heF9yZWdfYmVmb3JlX2xvb3AuCglGaXggYW5kIGVuYWJsZSBjb2RlIGZvciBnaXYgaXRlcmF0b3JzLgoJKGxvb3BfaXRlcmF0aW9ucyk6IENvbXBhcmUgd2l0aCByZWdfaXZfdHlwZS0+bnVtX2VsZW1lbnRzIGluc3RlYWQKCW9mIHdpdGggbWF4X3JlZ19iZWZvcmVfbG9vcC4KCldlZCBGZWIgMjQgMTk6MTc6MTEgMTk5OSAgSiJvcm4gUmVubmVja2UgIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIHVucm9sbC5jICh1bnJvbGxfbG9vcCk6IEF2b2lkIG91dC1vZi1ib3VuZHMgaW5kZXggZm9yIGxvY2FsX3JlZ25vLgoKV2VkIEZlYiAyNCAxMToyNjo0MSAxOTk5ICBWbGFkaW1pciBOLiBNYWthcm92ICA8dm1ha2Fyb3ZAY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy9zcGFyYy9zcGFyYy5oIChDT05ESVRJT05BTF9SRUdJU1RFUl9VU0FHRSk6IERvbid0IHVzZQoJUElDX09GRlNFVF9UQUJMRV9SRUdOVU0gZm9yIHJlZ2lzdGVyIGFsbG9jYXRpb24gd2hlbiAtZlBJQy4KClR1ZSBGZWIgMjMgMTY6MjQ6MTkgMTk5OSAgTWFyYyBMZWhtYW5uICA8cGNnQGdvb2YuY29tPgoKCSogY29uZmlnL2kzODYvaTM4Ni5tZDogRml4IHR5cG8uCgpNb24gRmViIDIyIDE5OjM2OjMzIDE5OTkgIEFuZHJldyBDYWduZXkgIDxjYWduZXlAYjEuY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy9taXBzL21pcHMuYyAobWlwc19kZWJ1Z2dlcl9vZmZzZXQpOiBXaGVuIFRBUkdFVF9NSVBTMTYgJiYKCWZyYW1lX3BvaW50ZXJfbmVlZGVkIGFkanVzdCBmcmFtZSBzaXplLgoJKGZ1bmN0aW9uX3Byb2xvZ3VlKTogRG9uJ3QgTUlQUzE2IC5tYXNrIEdQT0ZGU0VULiBBbHJlYWR5IGFkanVzdGVkCglpbiAuZnJhbWUgcHNldWRvLW9wLgoJRnJtIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT46CgkqIG1pcHMuYyAoZnVuY3Rpb25fcHJvbG9ndWUpOiBBZGp1c3QgZnJhbWUgc2l6ZSBpbiAuZnJhbWUgcHNldWRvLW9wCgl3aGVuIFRBUkdFVF9NSVBTMTYgJiYgZnJhbWVfcG9pbnRlcl9uZWVkZWQuCgoxOTk5LTAyLTIyICBOaWNrIENsaWZ0b24gIDxuaWNrY0BjeWdudXMuY29tPgoKCSogY29uZmlnL2FybS9hcm0uaDogQWRkIFRBUkdFVF9DUFVfc3Ryb25nYXJtMTEwMC4KCUFkZCAtbW5vLXNjaGVkIGNvbW1hbmQgbGluZSBzd2l0Y2ggdG8gZGlzYWJsZSBzY2hlZHVsaW5nIG9mCglpbnN0cnVjdGlvbnMgaW50byB0aGUgZnVuY3Rpb24ncyBwcm9sb2d1ZS4KCShlbnVtIHByb2Nlc3Nvcl90eXBlKTogUmVtb3ZlLgoJKFRBUkdFVF9PUFRJT05TKTogQWRkICJmcGU9IiBvcHRpb24gdG8gbWF0Y2ggZG9jdW1lbnRhdGlvbi4KCShzdHJ1Y3QgYXJtX2NwdV9zZWxlY3QpOiBSZXBsYWNlICdzZXRfdHVuZV9wJyBhbmQgJ3NldF9hcmNoX3AnCglmaWVsZHMgd2l0aCAncHJvY2Vzc29ycycgZmllbGQuCgkoQ09ORElUSU9OQUxfUkVHSVNURVJfVVNBR0UpOiBBbGxvdyByMTAgdG8gYmUgdXNlZCBpZiBzdGFjawoJY2hlY2tpbmcgaXMgbm90IGVuYWJsZWQuCgkoUkVUVVJOX0lOX01FTU9SWSk6IEFsd2F5cyBjYWxsIGFybV9yZXR1cm5faW5fbWVtb3J5LgoKCSogY29uZmlnL2FybS9hcm0uYyAoYXJtX2NwdSk6IFJlbW92ZS4KCSh0dW5lX2ZsYWdzKTogUmVtb3ZlLgoJKGFybV9pc19zdHJvbmcpOiBOZXcgdmFyaWFibGU6IHRydWUgaWZmIHRoZSB0YXJnZXQgcHJvY2Vzc29yIGlzIGEKCVN0cm9uZ0FSTS4KCShhcm1faXNfNl9vcl83KTogTmV3IHZhcmlhYmxlOiB0cnVlIGlmZiB0aGUgdGFyZ2V0IHByb2Nlc3NvciBpcyBhbgoJQVJNNiBvciBhbmQgQVJNNy4KCShhcm1fc2VsZWN0KTogRmllbGRzIHJlb3JnYW5pemVkLgoJKHN0cnVjdCBwcm9jZXNzb3JzKTogcHJvY2Vzc29yX3R5cGUgZmllbGQgcmVtb3ZlZC4KCShhbGxfcHJvY3MpOiBSZW1vdmUuCgkoYWxsX2NvcmVzKTogTmV3IGFycmF5OiBEZWZpbml0aW9ucyBvZiBhbGwga25vd24gQVJNIGNwdSBjb3Jlcy4KCShhbGxfYXJjaGl0ZWN0dXJlcyk6IE5ldyBhcnJheTogRGVmaW5pdGlvbnMgb2YgYWxsIGtub3duIEFSTQoJYXJjaGl0ZWN0dXJlcy4KCShzdHJlcSk6IE5ldyBtYWNyby4KCShGTF9TQ0hFRCk6IE5ldyBwcm9jZXNzb3IgZmxhZzogcHJvY2Vzc29yIHJlcXVpcmVkIGxvYWQKCXNjaGVkdWxpbmcuCgkoRkxfU1RST05HKTogTmV3IHByb2Nlc3NvciBmbGFnOiBwcm9jZXNzb3IgaXMgYSBTdHJvbmdBUk0uCgkoYXJtX292ZXJyaWRlX29wdGlvbnMpOiBSZW9yZ2FuaXplZCB0byBtYWtlIGNvZGUgY2xlYXJlci4KCSh1c2VfcmV0dXJuX2luc24pOiBUZXN0IGZvciAibm90IChUQVJHRVRfQVBDUyBhbmQKCWZyYW1lX3BvaW50ZXJfbmVlZGVkKSIuCgkoYXJtX3JldHVybl9pbl9tZW1vcnkpOiBJbXByb3ZlIGhhbmRsaW5nIG9mIHN0cnVjdHVyZXMuCgoJKiBjb25maWcvYXJtL2FybS5tZDogUmVtb3ZlICJjcHUiIGF0dHJpYnV0ZS4gIFJlcGxhY2Ugd2l0aAoJImlzX3N0cm9uZ2FybSIgYW5kICJpc19hcm1fNl9vcl83IiBhdHRyaWJ1dGVzLgoJKHplcm9fZXh0ZW5kaGlzaTIpOiBDaGVjayBmb3IgVEFSR0VUX1NIT1JUX0JZX0JZVEVTIGJlZm9yZQoJYXJtX2FyY2g0LgoJKGV4dGVuZGhpc2kyKTogQ2hlY2sgZm9yIFRBUkdFVF9TSE9SVF9CWV9CWVRFUyBiZWZvcmUgYXJtX2FyY2g0LgoKCSogaW52b2tlLnRleGkgKEFSTSBPcHRpb25zKTogRG9jdW1lbnQgLW10dW5lPSBhbmQgLW1mcD0gb3B0aW9ucy4KCjE5OTktMDItMjIgIFBoaWxpcCBCbHVuZGVsbCAgPHBoaWxiQGdudS5vcmc+CgoJKiBjb25maWcvYXJtL2xpbnV4LWdhcy5oIChJTklUSUFMSVpFX1RSQU1QT0xJTkUpOiBSZXBsYWNlIGRlZmF1bHQKCWRlZmluaXRpb24gd2l0aCBvbmUgaW5jbHVkaW5nIGNhY2hlIHN5bmNocm9uaXphdGlvbi4KCShDTEVBUl9JTlNOX0NBQ0hFKTogQ29ycmVjdCBzeXNjYWxsIG51bWJlciBhbmQgZW5hYmxlIGRlZmluaXRpb24uCglNb3ZlIGRlZmluaXRpb24gb2YgaW5oaWJpdF9saWJjIHRvLi4uCgkqIGNvbmZpZy9hcm0veG0tbGludXguaDogLi4uIGhlcmUuCgoJKiBjb25maWcvYXJtL3QtbGludXg6IERpc2FibGUgbXVsdGlsaWIgY29uZmlndXJhdGlvbnMgc2luY2UgdGhlCglvbmx5IGVmZmVjdCBmb3IgbW9zdCBwZW9wbGUgaXMgdG8gY2F1c2UgYnVpbGRzIHRvIGZhaWwuCgoJKiBjb25maWcvYXJtL2VsZi5oIChBU01fRklMRV9TVEFSVCk6IEFkZCAuZmlsZSBkaXJlY3RpdmUuCgkoQVNNX1NQRUMpOiBUcmFuc2xhdGUgLW1hcGNzLWZsb2F0IHRvIC1tZmxvYXQgZm9yIHRoZSBhc3NlbWJsZXIuCgoJKiBjb25maWcvYXJtL2xpbnV4LWVsZi5oIChERUZBVUxUX1ZUQUJMRV9USFVOS1MpOiBEZWZpbmUuCgkoSEFORExFX1NZU1ZfUFJBR01BKTogTGlrZXdpc2UuCgkoTElCX1NQRUMpOiBDb3B5IGRlZmluaXRpb24gZnJvbSBnZW5lcmljIExpbnV4IGZpbGVzLgoJKExJQkdDQ19TUEVDKTogSW5jbHVkZSAtbGZsb2F0IGlmIC1tc29mdC1mbG9hdCB3YXMgZ2l2ZW4uCgkoRlBfREVGQVVMVCk6IFNldCB0byBTT0ZUMyBvbiAzMi1iaXQgdGFyZ2V0cy4KCShEV0FSRjJfREVCVUdHSU5HX0lORk8pOiBEZWZpbmUuCgkoUFJFRkVSUkVEX0RFQlVHR0lOR19UWVBFKTogRGVmaW5lIGFzIERCWF9ERUJVRy4KCk1vbiBGZWIgMjIgMTY6NTQ6MTggMTk5OSAgQW5kcmV3IE1hY0xlb2QgIDxhbWFjbGVvZEBjeWdudXMuY29tPgoKCSogbG9vcC5jIChsaWJjYWxsX290aGVyX3JlZ3MpOiBNYWtlIGV4dGVybi4KCSogcnRsLmggKGZpbmRfbGFzdF92YWx1ZSk6IEFkZCBwYXJhbWV0ZXIgdG8gcHJvdG90eXBlLgoJKGxpYmNhbGxfb3RoZXJfcmVnKTogQWRkIGV4dGVybiBkZWNsYXJhdGlvbi4KCSogcnRsYW5hbC5jIChmaW5kX2xhc3RfdmFsdWUpOiBBZGQgYW5vdGhlciBwYXJhbWV0ZXIgdG8gYWxsb3cKCWEgZGVmaW5pdGlvbiB1c2luZyBhIGhhcmR3YXJlIHJlZ2lzdGVyIHRvIGJlIGZvdW5kIGFzIHdlbGwuCgpNb24gRmViIDIyIDEzOjMzOjQ3IDE5OTkgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiBjc2UuYyAoZHVtcF9jbGFzcyk6IE5ldyBmdW5jdGlvbi4KCShpbnZhbGlkYXRlX21lbW9yeSk6IEZpeCB0eXBvIGluIGNvbW1lbnQuCgkqIGZ1bmN0aW9uLmMgKHRlbXBfc2xvdCk6IEFkZCBhbiBhbGlhcyBzZXQgZmllbGQuCgkoYXNzaWduX3N0YWNrX3RlbXApOiBPbmx5IHJldXNlIHNsb3RzIGlmIHRoZXkgd2lsbCBoYXZlIHRoZQoJc2FtZSBhbGlhcyBzZXQgYXMgYmVmb3JlLgoJKGNvbWJpbmVfdGVtcF9zbG90cyk6IERvbid0IGNvbWJpbmUgaWYgLWZzdHJpY3QtYWxpYXNpbmc7Cgl0aGF0J3MgdW5zYWZlLgoJKiBydGwuYyAoY29weV9ydHgpOiBDb3B5IGFsbCB0aGUgZmxhZ3MgKGluIHBhcnRpY3VsYXIsCglNRU1fU0NBTEFSX1ApLgoKTW9uIEZlYiAyMiAxNDoxMzoyMyAxOTk5ICBWbGFkaW1pciBOLiBNYWthcm92ICA8dm1ha2Fyb3ZAY3lnbnVzLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbiAoaVszNDU2N104Ni0qLWxpbnV4LWdudSosCglpWzM0NTY3XTg2LSotbGludXgtZ251bGliYzEsIGlbMzQ1NjddODYtKi1saW51eC1nbnVhb3V0KiwKCWlbMzQ1NjddODYtKi1saW51eC1nbnVvbGRsZCopOiBVc2UgZml4aW5jLng4Ni1saW51eC1nbnUgYXMKCWZpeGluY2x1ZGVzLgoKCSogY29uZmlndXJlOiBSZWJ1aWx0LgoKCSogZml4aW5jLng4Ni1saW51eC1nbnU6IE5ldyBzY3JpcHQgZm9yIGZpeGluZyBhc20tc3RhdGVtZW50cyBidWcKCW9uIHg4NiBsaW51eC4KCgkqIGZpeGluYy9maXhpbmMueDg2LWxpbnV4LWdudTogQ29weSBvZiB0aGUgcHJldmlvdXMgb25lLgoKCSogZml4aW5jL21rZml4aW5jLnNoIChpWzM0NTY3XTg2LSotbGludXgtZ251KiwKCWlbMzQ1NjddODYtKi1saW51eC1nbnVsaWJjMSwgaVszNDU2N104Ni0qLWxpbnV4LWdudWFvdXQqLAoJaVszNDU2N104Ni0qLWxpbnV4LWdudW9sZGxkKik6IFVzZSBmaXhpbmMueDg2LWxpbnV4LWdudSBhcwoJZml4aW5jbHVkZXMuCgpNb24gRmViIDIyIDA4OjU1OjA1IDE5OTkgIE92aWRpdSBQcmVkZXNjdSAgPG92aWRpdUBjdXAuaHAuY29tPgoKCSogb2JqYy9vYmpjLWFjdC5jIChlbmNvZGVfdHlwZSk6IFRlbXBvcmFyeSByZXZlcnQgdG8gdGhlIG9sZAoJYmVoYXZpb3Igb2YgZW5jb2RpbmcgdHlwZXMgYXMgdGhlIG5ldyBvbmUgc2VlbXMgdG8gYnJlYWsgdGhlCgllbmNvZGluZyBvZiBiaXRmaWVsZHMuCgpNb24gRmViIDIyIDExOjQwOjQ0IDE5OTkgIENyYWlnIEJ1cmxleSAgPGNyYWlnQGpjYi1zYy5jb20+ClNhdCBGZWIgMjAgMDk6NTk6MzYgMTk5OSAgQ3JhaWcgQnVybGV5ICA8Y3JhaWdAamNiLXNjLmNvbT4KCgkqIE1ha2VmaWxlLmluIChhbGwuaW50ZXJuYWwsIGFsbC5jcm9zcyk6IERlcGVuZCBvbiBgZG9jJwoJdGFyZ2V0LCB0byBlbnN1cmUgZG9jcyBnZXQgbWFkZSBiZWZvcmUgaW5zdGFsbGF0aW9uLgoKCURlY3JlYXNlIHNwdXJpb3VzIHdhcm5pbmdzIGZyb20gLWZzeW50YXgtb25seToKCSogc3RtdC5jIChleHBhbmRfZXhwcl9zdG10KTogRXhwYW5kIGV4cHIgZXZlbiB3aGVuIC1mc3ludGF4LW9ubHkuCgpNb24gRmViIDIyIDEwOjU1OjAwIDE5OTkgIEdhdmluIFJvbWlnLUtvY2ggIDxnYXZpbkBjeWdudXMuY29tPgoKCSogYy1sZXguYyAoeXlsZXgpOiBSZXBsYWNlIHdhcm5pbmcgYWJvdXQgaW50ZWdlciBjb25zdGFudHMgYmVpbmcKCWxhcmdlciB0aGFuIGxvbmctbG9uZ3MsIHdpdGggYSB3YXJuaW5nIGFib3V0IGludGVnZXIgY29uc3RhbnRzCgliZWluZyBsYXJnZXIgdGhhbiB0aGUgbGFyZ2VzdCB0YXJnZXQgaW50ZWdlci4KCk1vbiBGZWIgMjIgMDg6MzU6MzggMTk5OSAgQ3JhaWcgQnVybGV5ICA8Y3JhaWdAamNiLXNjLmNvbT4KCglGaXggLWZzeW50YXgtb25seSBJQ0VzOgoJKiB2YXJhc20uYyAoYXNzZW1ibGVfemVyb3MsIGFzc2VtYmxlX3ZhcmlhYmxlLAoJb3V0cHV0X2NvbnN0YW50X2RlZik6IERvIG5vdGhpbmcgd2hlbiAtZnN5bnRheC1vbmx5LgoKRnJpIEZlYiAxOSAxODoxODo1NiAxOTk5ICBEb24gQm93bWFuICA8ZG9uQHBpeHN0cmVhbS5jb20+CgoJKiBjb25maWd1cmUuaW4gKG1pcHMqLSotdnh3b3JrcyopOiBFbmFibGUgZ3RocmVhZHMgdnh3b3JrcyBzdXBwb3J0LgoJKiBjb25maWd1cmU6IFJlYnVpbHQuCgpTdW4gRmViIDIxIDIwOjM0OjQ0IDE5OTkgIEplZmYgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiB2ZXJzaW9uLmM6IEJ1bXAgZm9yIHNuYXBzaG90LgoKU3VuIEZlYiAyMSAyMDozNToxMCAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBjb25maWcvYW91dG9zLmggKEFTTV9PVVRQVVRfQ09OU1RSVUNUT1IpOiBEZWxldGUuCgkoQVNNX09VVFBVVF9ERVNUUlVDVE9SLCBBU01fT1VUUFVUX0dDX0VOVFJZKTogTGlrZXdpc2UuCgkqIHRtLnRleGk6IFVwZGF0ZSBkb2NzIGZvciBjb25zdHJ1Y3RvcnMgYW5kIGRlc3RydWN0b3JzLgoKU3VuIEZlYiAyMSAxNzoxMToxOCAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogZ2VuYXR0cnRhYi5jIChjaGVja19hdHRyX3ZhbHVlKTogQWxsb3cgbmVnYXRpdmUgY29uc3RfaW50IGlmCgluZWdhdGl2ZV9vay4gIEFjY2VwdCBpbnRlZ3JhbCBhcml0aG1ldGljIG9wZXJhdG9ycy4gIEFjY2VwdAoJZGlyZWN0IHJlZmVyZW5jZXMgdG8gb3RoZXIgYXR0cmlidXRlcy4gIEFjY2VwdCBzeW1ib2xfcmVmIGluCglub24tY29uc3RhbnQgYXR0cmlidXRlcy4KCShtYXhfYXR0cl92YWx1ZSk6IEFkZCBuZXcgYXJndW1lbnQgYHVua25vd25wJy4gIFVwZGF0ZSBhbGwgY2FsbGVycy4KCShvcl9hdHRyX3ZhbHVlKTogTGlrZXdpc2UuCgkoc2ltcGxpZnlfa25vd2luZyk6IERvbid0IG9wdGltaXplIGlmIG1heF9hdHRyX3ZhbHVlIHVua25vd24uCgkod3JpdGVfbGVuZ3RoX3VuaXRfbG9nKTogTGlrZXdpc2Ugd2l0aCBvcl9hdHRyX3ZhbHVlLgoJKGZpbmRfYW5kX21hcmtfdXNlZF9hdHRyaWJ1dGVzKTogRG9uJ3QgZmFsbHRocnUgY2FzZS4KCSh3cml0ZV9hdHRyX3NldCk6IFBhc3MgdGhydSBhbGwgbm9uLWNvbmQgZXhwcmVzc2lvbnMuCgkod3JpdGVfYXR0cl92YWx1ZSk6IEhhbmRsZSBzeW1ib2xfcmVmLCBhdHRyLCBhbmQgYXJpdGhtZXRpYy4KClN1biBGZWIgMjEgMTM6MTY6NDQgMTk5OSAgTWljaGFlbCBIYXllcyAgPG0uaGF5ZXNAZWxlYy5jYW50ZXJidXJ5LmFjLm56PgoKCSogcmVnbW92ZS5jIChkaXNjb3Zlcl9mbGFnc19yZWcpOiBVc2Ugd29yZF9tb2RlIGluc3RlYWQgb2YgU0ltb2RlLgoKU3VuIEZlYiAyMSAxMzoxNTo0MCAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogcmVnbW92ZS5jIChkaXNjb3Zlcl9mbGFnc19yZWcpOiBSZW1vdmUgY2MwIGNvZGUuCgkobWFya19mbGFnc19saWZlX3pvbmVzKSBbSEFWRV9jYzBdOiBGb3JjZSB1c2Ugb2YgY2MwOyBiYWlsIGlmCglhIHBvdGVudGlhbCBmbGFncyByZWdpc3RlciB3YXMgaWRlbnRpZmllZC4KClNhdCBGZWIgMjAgMTY6MTY6MDcgMTk5OCAgRnJhbnogU2lybCAgPEZyYW56LlNpcmwta2VybmVsQGxhdXRlcmJhY2guY29tPgoKCSogcnM2MDAwLm1kIChzY2MgcGx1cyBsdHUpOiBGaXggdHlwbyBpbiBsYXN0IGNoYW5nZS4KClNhdCBGZWIgMjAgMDk6MDg6NDQgMTk5OSAgUmljaGFyZCBFYXJuc2hhdyAgKHJlYXJuc2hhQGFybS5jb20pCgoJKiB4bS1hcm0uaCAoSE9TVF9CSVRTX1BFUl9MT05HTE9ORyk6IERlZmluZS4KCkZyaSBGZWIgMTkgMjM6MDI6MDIgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIHJlZ21vdmUuYyAoZGlzY292ZXJfZmxhZ3NfcmVnKTogTmV3IGZ1bmN0aW9uLgoJKGZsYWdzX3NldF8xLCBtYXJrX2ZsYWdzX2xpZmVfem9uZXMpOiBOZXcgZnVuY3Rpb25zLgoJKHJlZ21vdmVfb3B0aW1pemUpOiBDYWxsIHRoZW0uCgkoZml4dXBfbWF0Y2hfMSk6IFVzZSBpbnNuIG1vZGVzIHJhdGhlciB0aGFuIHNldHNfY2MwX3AuCgpGcmkgRmViIDE5IDIyOjQ3OjAxIDE5OTkgIEoib3JuIFJlbm5lY2tlICA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiBydGxhbmFsLmMgKGluc25fZmlyc3RfcCk6IEZpeCByZXR1cm4gdmFsdWUgZm9yIGluc24gPT0gcmVmZXJlbmNlLgoKCSogbG9vcC5jIChzdHJlbmd0aF9yZWR1Y2UsIGNoZWNrX2ZpbmFsX3ZhbHVlLCBjaGVja19kYnJhX2xvb3ApOgoJVXNlIGxvb3BfaW5zbl9maXJzdF9wLgoKRnJpIEZlYiAxOSAxNTo0OToyNiAxOTk5ICBNaWNoYWVsIE1laXNzbmVyICA8bWVpc3NuZXJAY3lnbnVzLmNvbT4KCQkJICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQGdudS5vcmc+CgoJKiByczYwMDAubWQgKHNjYyBwbHVzIGVxKTogRml4IG91dHB1dCB0ZW1wbGF0ZS4KCShzY2MgcGx1cyBsdHUpOiBGaXggb3V0cHV0IHRlbXBsYXRlIGFuZCBjb2xsYXBzZSB2YXJpYW50cwoJY29ycmVjdGluZyBlYXJseSBjbG9iYmVycy4KCShzY2MgcGx1cyBnZXUpOiBGaXggb3V0cHV0IHRlbXBsYXRlLgoJKHNjYyBwbHVzIGd0KTogRml4IG91dHB1dCB0ZW1wbGF0ZS4KCShzY2MgcGx1cyBndHUpOiBGaXggb3V0cHV0IHRlbXBsYXRlIGFuZCBjb2xsYXBzZSB2YXJpYW50cy4KCkZyaSBGZWIgMTkgMTU6NDM6NTkgMTk5OSAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogY3BwaW5pdC5jIChwcmludF9oZWxwKTogUmVtb3ZlIHVuZXNjYXBlZCBuZXdsaW5lIGluIHN0cmluZy4KCkZyaSBGZWIgMTkgMTk6NTU6MDYgMTk5OSAgSiJvcm4gUmVubmVja2UgIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIGxvb3AuYyAoc3RyZW5ndGhfcmVkdWNlKTogQ2hlY2sgZm9yIGludGVydmVuaW5nIGp1bXBzIHdoZW4KCWNvbnZlcnRpbmcgYml2IGluY3JlbWVudCB0byBnaXYuCgpUaHUgRmViIDE4IDE2OjM2OjU4IDE5OTkgIFBlciBCb3RobmVyICA8Ym90aG5lckBjeWdudXMuY29tPgoKCSogdHJlZS5kZWYgKFRSWV9GSU5BTExZX0VYUFIsIEdPVE9fU1VCUk9VVElORV9FWFBSKTogTmV3IHRyZWUgbm9kZXMsCgkqIGV4cHIuYyAoZXhwYW5kX2V4cHIpOiBTdXBwb3J0IG5ldyB0cmVlIG5vZGVzLgoKRnJpIEZlYiAxOSAxMDoxNzo1NiAxOTk5ICBBbmRyZWFzIFNjaHdhYiAgPHNjaHdhYkBpc3Nhbi5jcy51bmktZG9ydG11bmQuZGU+CgoJKiBjb25maWcvbTY4ay9tNjhrLmMgKG02OGtfYWxpZ25fbG9vcHNfc3RyaW5nLAoJbTY4a19hbGlnbl9qdW1wc19zdHJpbmcsIG02OGtfYWxpZ25fZnVuY3Nfc3RyaW5nKTogQWRkIGNvbnN0LgoJKiBjb25maWcvbTY4ay9tNjhrLmggKG02OGtfYWxpZ25fbG9vcHNfc3RyaW5nLAoJbTY4a19hbGlnbl9qdW1wc19zdHJpbmcsIG02OGtfYWxpZ25fZnVuY3Nfc3RyaW5nKTogTGlrZXdpc2UuCgpUaHUgRmViIDE4IDIzOjI4OjM1IDE5OTkgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGJpdG1hcC5jIChiaXRtYXBfcHJpbnQpOiBRdWFsaWZ5IGEgY2hhciogd2l0aCB0aGUgYGNvbnN0JyBrZXl3b3JkLgoKCSogYml0bWFwLmggKGJpdG1hcF9wcmludCk6IExpa2V3aXNlLgoKCSogYy1kZWNsLmMgKGJ1aWx0aW5fZnVuY3Rpb24sIGdyb2tkZWNsYXJhdG9yLCBncm9rZmllbGQpOiBMaWtld2lzZS4KCgkqIGMtbGFuZy5jIChidWlsZF9vYmpjX3N0cmluZyk6IExpa2V3aXNlLgoKCSogYy1sZXguYyAoeXllcnJvciwgZXh0ZW5kX3Rva2VuX2J1ZmZlcik6IExpa2V3aXNlLiAgRG9uJ3QgaW5jbHVkZQoJbGltaXRzLmggb3IgY3R5cGUuaC4gIFJlbW92ZSB1bnVzZWQgdmFyaWFibGUgYHAnLgoKCSogYy1sZXguaCAoeXllcnJvcik6IFF1YWxpZnkgYSBjaGFyKiB3aXRoIHRoZSBgY29uc3QnIGtleXdvcmQuCgoJKiBjLXByYWdtYS5jIChoYW5kbGVfcHJhZ21hX3Rva2VuKTogTGlrZXdpc2UuCgoJKiBjLXByYWdtYS5oIChoYW5kbGVfcHJhZ21hX3Rva2VuKTogTGlrZXdpc2UuCgoJKiBjLXRyZWUuaCAoYnVpbGRfb2JqY19zdHJpbmcsIGJ1aWx0aW5fZnVuY3Rpb24sIGdyb2tmaWVsZCwKCWJ1aWxkX2luZGlyZWN0X3JlZiwgbHZhbHVlX29yX2Vsc2UsIHJlYWRvbmx5X3dhcm5pbmcsIGVycm9yX2luaXQsCglwZWR3YXJuX2luaXQpOiBMaWtld2lzZS4KCgkqIGMtdHlwZWNrLmMgKGNvbnZlcnRfZm9yX2Fzc2lnbm1lbnQsIHdhcm5fZm9yX2Fzc2lnbm1lbnQsCglwdXNoX3N0cmluZywgd2FybmluZ19pbml0LCBpbmNvbXBsZXRlX3R5cGVfZXJyb3IsCglidWlsZF9pbmRpcmVjdF9yZWYsIGx2YWx1ZV9vcl9lbHNlLCByZWFkb25seV93YXJuaW5nLAoJYnVpbGRfY19jYXN0LCBzcGVsbGluZywgcHVzaF9tZW1iZXJfbmFtZSwgcHJpbnRfc3BlbGxpbmcsCgllcnJvcl9pbml0LCBwZWR3YXJuX2luaXQsIHN0YXJ0X2luaXQpOiBMaWtld2lzZS4KCgkqIG9iamMvb2JqYy1hY3QuYyAoYnVpbGRfb2JqY19zdHJpbmcpOiBMaWtld2lzZS4KCgkqIHByaW50LXRyZWUuYyAocHJpbnRfbm9kZV9icmllZiwgcHJpbnRfbm9kZSk6IExpa2V3aXNlLgoKCSogdHJlZS5oIChsdmFsdWVfb3JfZWxzZSwgcHJpbnRfbm9kZSwgcHJpbnRfbm9kZV9icmllZik6IExpa2V3aXNlLgoKVGh1IEZlYiAxOCAyMDo0NDoyMSAxOTk5ICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQGdudS5vcmc+CgoJKiByZWdjbGFzcy5jIChyZWNvcmRfcmVnX2NsYXNzZXMpOiBDb3JyZWN0bHkgaGFuZGxlICdwJyBjb25zdHJhaW50LgoKVGh1IEZlYiAxOCAxOTo1OTozNyAxOTk5ICBNYXJjIEVzcGllICA8ZXNwaWVAY3ZzLm9wZW5ic2Qub3JnPgoKCSogY29uZmlndXJlLmluIDpIYW5kbGUgT3BlbkJTRCBwbGF0Zm9ybXMuCgkqIGNvbmZpZ3VyZTogUmVidWlsdC4KCSogY29uZmlnL29wZW5ic2QuaDogTmV3IGZpbGUuCgkqIGNvbmZpZy94bS1vcGVuYnNkLmg6IE5ldyBmaWxlLgoJKiBjb25maWcvdC1vcGVuYnNkOiBOZXcgZmlsZS4KCSogY29uZmlnL3Qtb3BlbmJzZC10aHJlYWQ6IE5ldyBmaWxlLgoKVGh1IEZlYiAxOCAxODo0NzowOSAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBmdW5jdGlvbi5jIChhc3NpZ25fc3RhY2tfdGVtcF9mb3JfdHlwZSk6IFJvdW5kIFNJWkUgYmVmb3JlIGNhbGxpbmcKCWFzc2lnbl9zdGFja19sb2NhbCBmb3IgQkxLbW9kZSBzbG90cy4KCkZyaSBGZWIgMTkgMDE6NDU6MDYgMTk5OSAgSiJvcm4gUmVubmVja2UgIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIGxvb3AuYyAoc3RyZW5ndGhfcmVkdWNlKTogRm9yIGRlcml2ZWQgZ2l2cywgcmVwbGFjZSB0aGUKCWdpdiB0aGlzIHdhcyBkZXJpdmVkIGZyb20gd2l0aCBpdHMgbmV3X3JlZy4KCShyZWNvbWJpbmVfZ2l2cyk6IERvbid0IHNldCBuZXdfcmVnIGZvciBkZXJpdmVkIGdpdi4KCUFuZCBkb24ndCBwcmludCBpdCwgcHJpbnQgU1VNIGluc3RlYWQuCgpUaHUgRmViIDE4IDE1OjUyOjQ5IDE5OTkgIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KCgkqIG02OGtlbGYuaCAoQVNNX1JFVFVSTl9DQVNFX0pVTVApOiBBZGQgNTIwMCBzdXBwb3J0LgoKMTk5OS0wMi0xOCAgWmFjayBXZWluYmVyZyAgPHphY2tAcmFiaS5jb2x1bWJpYS5lZHU+CgoJKiBjcHBsaWIuYzogS2lsbCBkZWZpbmUgb2YgU1REQ19WQUxVRS4gIERvbid0IGluY2x1ZGUgb3V0cHV0LmgKCSAgb3IgcHJlZml4LmguIENoYW5nZSBDUFBfSVNfTUFDUk9fQlVGRkVSIHRvIG5vdCByZWZlciB0bwoJICBtYWNyb19jbGVhbnVwLgoJICAoR0VUX0VOVl9QQVRIX0xJU1QsIFBBVEhfU0VQQVJBVE9SLCBTVEFOREFSRF9JTkNMVURFX0RJUiwKCSAgcHJlZGVmcywgU0laRV9UWVBFLCBQVFJESUZGX1RZUEUsIFdDSEFSX1RZUEUsCgkgIENQUF9XQ0hBUl9UWVBFLCBVU0VSX0xBQkVMX1BSRUZJWCwgUkVHSVNURVJfUFJFRklYLCBzdHJ1Y3QKCSAgY3BwX3BlbmRpbmcsIHZlcnNpb25fc3RyaW5nLCBzdHJ1Y3QgZGVmYXVsdF9pbmNsdWRlLAoJICBpbmNsdWRlX2RlZmF1bHRzX2FycmF5LCBwYXRoX2luY2x1ZGUsIGNwcF9vcHRpb25zX2luaXQsCgkgIGR1bXBfc3BlY2lhbF90b19idWZmZXIsIGluaXRpYWxpemVfYnVpbHRpbnMsIGNwcF9zdGFydF9yZWFkLAoJICBjcHBfcmVhZGVyX2luaXQsIG5yZXZlcnNlX3BlbmRpbmcsIHB1c2hfcGVuZGluZywgcHJpbnRfaGVscCwKCSAgY3BwX2hhbmRsZV9vcHRpb24sIGNwcF9oYW5kbGVfb3B0aW9ucywgY3BwX2ZpbmlzaCwKCSAgY3BwX2NsZWFudXApOiBNb3ZlIHRvIGNwcGluaXQuYy4KCSAgKG1hY3JvX2NsZWFudXAsIHN0cnVjdCBhcmdsaXN0LCBjb2xsZWN0X2V4cGFuc2lvbiwKCSAgY3JlYXRlX2RlZmluaXRpb24sIGNvbXBhcmVfZGVmcywgY29tcF9kZWZfcGFydCwgQVJHX0JBU0UsCgkgIHN0cnVjdCBhcmdkYXRhLCBtYWNhcmcsIGNoYW5nZV9uZXdsaW5lcywgdGltZXN0YW1wLAoJICBtb250aG5hbWVzLCBzcGVjaWFsX3N5bWJvbCwgdW5zYWZlX2NoYXJzLCBtYWNyb2V4cGFuZCwKCSAgcHVzaF9tYWNyb19leHBhbnNpb24pOiBNb3ZlIHRvIGNwcGhhc2guYy4KCSAgKHF1b3RlX3N0cmluZywgY2hlY2tfbWFjcm9fbmFtZSwgY3BwX2V4cGFuZF90b19idWZmZXIsCgkgIG91dHB1dF9saW5lX2NvbW1hbmQsIGNwcF91bmRlZik6IEV4cG9ydC4KCSAgKG51bGxfdW5kZXJmbG93LCBudWxsX2NsZWFudXAsIGhhbmRsZV9kaXJlY3RpdmUpOiBNYWtlIHN0YXRpYy4KCgkqIGNwcGxpYi5oOiBQcm90b3R5cGUgbm93LWV4cG9ydGVkIGZ1bmN0aW9ucy4gIEFkanVzdCBkZWNscyBvZgoJICBzeW50YXggdGFibGVzIHNvIHdlIGNhbiBpbmNsdWRlIGNwcGxpYi5oIGluIGNwcGluaXQuYy4KCSogY3BwaGFzaC5oOiBQcm90b3R5cGUgYWxsIGZ1bmN0aW9ucyBleHBvcnRlZCBieSBjcHBoYXNoLmMuCgkqIGNwcGluaXQuYzogTWFrZSBzeW50YXggdGFibGVzIGluaXRpYWxpemVkIGRhdGEgaWYgcG9zc2libGUKCSAgKHVzZXMgR0NDIGRlc2lnbmF0ZWQtaW5pdGlhbGl6ZXIgZXh0ZW5zaW9uKS4KCSogY3BwZXhwLmM6IE1ha2UgY3BwX2xleCBzdGF0aWMuCgkqIE1ha2VmaWxlLmluOiBNb3ZlIC1EIHN3aXRjaGVzIGZvciB0aGUgdmFyaW91cyBpbmNsdWRlIGRpcnMKCSAgZnJvbSBjcHBsaWIubyBydWxlIHRvIGNwcGluaXQubyBydWxlLiAgQWRqdXN0IGRlcGVuZGVuY2llcy4KClRodSBGZWIgMTggMTM6MTU6NTYgMTk5OSAgTWFyYyBFc3BpZSAgPGVzcGllQGN2cy5vcGVuYnNkLm9yZz4KCgkqIGFscGhhL29wZW5ic2QuaDogTmV3IGZpbGUuCgkqIGFscGhhL3htLW9wZW5ic2QuaDogTmV3IGZpbGUuCgkqIHNwYXJjL29wZW5ic2QuaDogTmV3IGZpbGUuCgkqIHNwYXJjL3htLW9wZW5ic2QuaDogTmV3IGZpbGUuCgkqIG02OGsvb3BlbmJzZC5oOiBOZXcgZmlsZS4KCSogbTY4ay94bS1vcGVuYnNkLmg6IE5ldyBmaWxlLgoJKiBpMzg2L29wZW5ic2QuaDogTmV3IGZpbGUsIG9yaWdpbmFsbHkgZnJvbSBuZXRic2QuCgkqIGkzODYveG0tb3BlbmJzZC5oOiBOZXcgZmlsZS4KCjE5OTktMDItMTcgIFphY2sgV2VpbmJlcmcgIDx6YWNrQHJhYmkuY29sdW1iaWEuZWR1PgoKCSogTWFrZWZpbGUuaW46IENvcnJlY3QgZGVwZW5kZW5jaWVzIGZvciBjcHBsaWIgb2JqZWN0IGZpbGVzLgoKV2VkIEZlYiAxNyAxNDowNDoxOCAxOTk5ICBNaWNoYWVsIE1laXNzbmVyICA8bWVpc3NuZXJAY3lnbnVzLmNvbT4KCgkqIHJzNjAwMC5tZCAoe2FkZCxzdWJ9c2kzIGAuJyk6IEFkZCBhbHRlcm5hdGl2ZXMgdG8gdXNlIENSIG90aGVyCgl0aGFuIGNyMC4KCldlZCBGZWIgMTcgMTY6NTk6MjggMTk5OSAgSiJvcm4gUmVubmVja2UgIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIGxvb3AuYyAoc3RyZW5ndGhfcmVkdWNlKTogRG9uJ3QgbW92ZSBnaXYgaW5zbiBmb3IgYml2IHR1cm5lZCBnaXYKCWJlbG93IHNjYW5fc3RhcnQuCgpXZWQgRmViIDE3IDEwOjU2OjI0IDE5OTkgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIHRyZWUuYyAodHJlZV9ub2RlX2tpbmRfbmFtZXMsIHByaW50X29ic3RhY2tfbmFtZSwKCWdldF9pZGVudGlmaWVyLCBtYXliZV9nZXRfaWRlbnRpZmllciwgYnVpbGRfc3RyaW5nLAoJYnVpbGRfZXhwcl93ZmwsIGlzX2F0dHJpYnV0ZV9wLCBsb29rdXBfYXR0cmlidXRlLAoJcHJpbnRfb2JzdGFja19zdGF0aXN0aWNzLCBnZXRfZmlsZV9mdW5jdGlvbl9uYW1lX2xvbmcsIHRyZWVfY2hlY2ssCgl0cmVlX2NsYXNzX2NoZWNrLCBleHByX2NoZWNrKTogUXVhbGlmeSBhIGNoYXIqIHdpdGggdGhlIGBjb25zdCcKCWtleXdvcmQuCgoJKiB0cmVlLmggKGdldF9pZGVudGlmaWVyLCBtYXliZV9nZXRfaWRlbnRpZmllciwgYnVpbGRfc3RyaW5nLAoJYnVpbGRfZXhwcl93ZmwsIGlzX2F0dHJpYnV0ZV9wLCBsb29rdXBfYXR0cmlidXRlLAoJcHJpbnRfb2JzdGFja19zdGF0aXN0aWNzLCBwcmludF9vYnN0YWNrX25hbWUsIHRyZWVfY2hlY2ssCgl0cmVlX2NsYXNzX2NoZWNrLCBleHByX2NoZWNrKTogTGlrZXdpc2UuCgpUdWUgRmViIDE2IDIxOjI5OjM4IDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGkzODYvZnJlZWJzZC1lbGYuaCwgaTM4Ni9nYXMuaCwgaTM4Ni9saW51eC5oOiBGaXggbWlub3Igc3BhY2luZwoJZXJyb3JzLgoKCSogY2FsbHMuYyAoc3RvcmVfb25lX2FyZyk6IE1hcmsgYW55IHNsb3RzIHVzZWQgZm9yIHRoZSBhcmd1bWVudAoJYXMgaW4tdXNlIGltbWVkaWF0ZWx5IGFmdGVyIHdlJ3JlIGRvbmUgc2F2aW5nIGFueSBzbG90cyB3aGljaAoJd2lsbCBiZSBvdmVyd3JpdHRlbiBieSB0aGlzIGFyZ3VtZW50LgoKVHVlIEZlYiAxNiAyMTowMjowNyAxOTk5ICBBbnRvbiBIYXJ0bCAgPHRvbmlAZGV2c29mdC5jb20+CgoJKiByczYwMDAubWQgKGNhbGxfdmFsdWUpOiBGaXggdHlwby4KCldlZCBGZWIgMTcgMDE6Mjk6MDcgMTk5OSAgSiJvcm4gUmVubmVja2UgIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIGxvb3AuYyAoc3RyZW5ndGhfcmVkdWNlKTogQ2FsY3VsYXRlIG1heWJlX2RlYWQgYmVmb3JlCgljYWxsaW5nIHJlY29tYmluZV9naXZzLgoKV2VkIEZlYiAxNyAwMDo0MzoxMiAxOTk5ICBKIm9ybiBSZW5uZWNrZSAgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogbG9vcC5jIChzdHJlbmd0aF9yZWR1Y2UpOiBEdW1wIGJpdiBpbmNyZW1lbnQgLT4gZ2l2IGNvbnZlcnNpb25zLgoKVHVlIEZlYiAxNiAxNTozMTozOSAxOTk5ICBPdmlkaXUgUHJlZGVzY3UgIDxvdmlkaXVAY3VwLmhwLmNvbT4KCgkqIG9iamMvb2JqYy1hY3QuYyAoZW5jb2RlX3R5cGUpOiBFbmNvZGUgdGhlIHR5cGUgaW5zdGVhZCBvZgoJZW5jb2RpbmcgdGhlIG1vZGUgb2YgdGhlIHR5cGUgKHBhdGNoIGZyb20gUmljaGFyZCBGcml0aC1NYWNkb25hbGQKCTxyaWNoYXJkQGJyYWluc3Rvcm0uY28udWs+KS4KClR1ZSBGZWIgMTYgMTA6NTM6NTEgMTk5OSAgUmljaGFyZCBFYXJuc2hhdyAgKHJlYXJuc2hhQGFybS5jb20pCgoJKiBjb25maWcvYXJtL2FybS5tZCAoKnplcm9leHRyYWN0cWlfY29tcGFyZTBfc2NyYXRjaCk6IFJlLWFkZCBsb2FkCglpbnN0cnVjdGlvbiBraWxsZWQgaW4gcHJldmlvdXMgY2hhbmdlLiAgU2ltcGxpZnkgbWFzayBnZW5lcmF0aW9uLgoJKCp6ZXJvZXh0cmFjdHNpX2NvbXBhcmUwX3NjcmF0Y2gpOiBTaW1wbGlmeSBtYXNrIGdlbmVyYXRpb24uCgpUdWUgRmViIDE2IDA5OjUyOjI2IDE5OTkgIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQGN5Z251cy5jb20+CgoJKiBjb25maWcvYXJtL2FybS5tZCAoemVyb2V4dHJhY3RxaV9jb21wYXJlMF9zY3JhdGNoKTogRW5zdXJlIHRoYXQKCWJpdGZpZWxkIGRvZXMgbm90IG92ZXJmbG93IGEgYnl0ZSBib3VuZGFyeS4KClR1ZSBGZWIgMTYgMDE6Mzc6MzMgMTk5OSAgQ2hhcmxlcyBHIFdhbGRtYW4gIDxjZ3dAYWx1bS5taXQuZWR1PgoKCSogYy1jb21tb24uYyAoc2hvcnRlbl9jb21wYXJlKTogR2V0IHRoZSBtaW4vbWF4IHZhbHVlIGZyb20gdGhlCgl1bmRlcmx5aW5nIHR5cGUgb2YgYW4gZW51bWVyYXRpb24sIG5vdCB0aGUgZW51bWVyYXRlZCB0eXBlIGl0c2VsZi4KCk1vbiBGZWIgMTUgMjM6MDQ6NDggMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSoganVtcC5jOiBJbmNsdWRlIGluc24tYXR0ci5oLgoJKGRlbGV0ZV9jb21wdXRhdGlvbik6IElmIHJlbG9hZCBoYXMgY29tcGxldGVkIGFuZCBpbnNuIHNjaGVkdWxpbmcKCWFmdGVyIHJlbG9hZCBpcyBlbmFibGVkLCB0aGVuIGRvIG5vdCBkZXBlbmQgb24gUkVHX0RFQUQgbm90ZXMuCgkqIE1ha2VmaWxlLmluIChqdW1wLm8pOiBEZXBlbmQgb24gaW5zbi1hdHRyLmguCgpNb24gRmViIDE1IDE2OjU3OjM4IDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBpMzg2Lm1kIChhZGRzaTMpOiBBbGxvdyBsZWEgZm9yIGFueSBjb25zdGFudF9wLgoKMTk5OS0wMi0xNSAgWmFjayBXZWluYmVyZyAgPHphY2tAcmFiaS5jb2x1bWJpYS5lZHU+CgoJKiB0b3BsZXYuYyAoZG9jdW1lbnRlZF9sYW5nX29wdGlvbnMpOiBSZW1vdmUgLWZpZGVudCBhbmQKCSAgLWZub2lkZW50LCB3aGljaCBhcmUgbm93IGhhbmRsZWQgYnkgdGhlIGxhbmd1YWdlIGluZGVwZW5kZW50CgkgIG9wdGlvbiBwYXJzZXIuCgoxOTk5LTAyLTE1ICBaYWNrIFdlaW5iZXJnICA8emFja0ByYWJpLmNvbHVtYmlhLmVkdT4KCgkqIGMtY29tbW9uLmMgKFVOR0VUQyBbVVNFX0NQUExJQj0xXSk6IERvIG5vdGhpbmcgaWYgYyBpcyBFT0YuCgkqIGMtbGV4LmM6IExpa2V3aXNlLgoJKiBjcHBsaWIuYyAoY3BwX3B1c2hfYnVmZmVyLCBjcHBfcG9wX2J1ZmZlcik6IFVzZSBhIGxpbmtlZAoJbGlzdCBpbiBtYWxsb2NlZCBtZW1vcnkgZm9yIHRoZSBidWZmZXIgc3RhY2suCgkoY3BwX2dldF90b2tlbik6IERvbid0IHBvcCB0aGUgbGFzdCBidWZmZXIgb2ZmIHRoZSBzdGFjay4KCUNhbGxzIGFmdGVyIENQUF9FT0YgaGFzIGJlZW4gcmV0dXJuZWQgcHJvZHVjZSBDUFBfRU9GIHdpdGggbm8KCXN0YXRlIGNoYW5nZS4KCShjcHBfZmluaXNoKTogUG9wIGxhc3QgYnVmZmVyIGhlcmUuCgkoZG9fbGluZSk6IERvbid0IGZyZWUgaXAtPmxhc3Rfbm9taW5hbF9mbmFtZSBpZiBpdCBpcyBlcXVhbCB0bwoJaXAtPmZuYW1lLgoJKHNwZWNpYWxfc3ltYm9sKTogSWYgYSBUX0NPTlNUIGlzIHRoZSBlbXB0eSBzdHJpbmcsIHB1c2ggYQoJc2luZ2xlIGBAICcgZXNjYXBlIGluc3RlYWQuCgkobWFjcm9leHBhbmQpOiBTcGVjaWFsIHN5bWJvbCBidWZmZXJzIGhhdmUgZXNjYXBlcyB0b28uCgkqIGNwcGxpYi5oIChzdHJ1Y3QgY3BwX2J1ZmZlcik6IFJlbW92ZSB1bnVzZWQgZmllbGRzLCBhZGQgcHJldgoJYnVmZmVyIHBvaW50ZXIuCgkoc3RydWN0IGNwcF9yZWFkZXIpOiBSZW1vdmUgYnVmZmVyX3N0YWNrLiAgQWRkCglidWZmZXJfc3RhY2tfZGVwdGguCgkoQ1BQX1BSRVZfQlVGRkVSLCBDUFBfTlVMTF9CVUZGRVIpOiBCdWZmZXIgc3RhY2sgaXMgbm93IGEKCWxpbmtlZCBsaXN0LgoKTW9uIEZlYiAxNSAxNDo0NDo1MyAxOTk5ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBjY2NwLmM6IERvbid0IGRlZmluZSBIT1NUX1dJREVfSU5ULiAgUmVwbGFjZSBhbGwgb2NjdXJyZW5jZXMgb2YKCVdJREVfSU5UIHdpdGggV0lERVNUX0lOVC4KCgkqIGNleHAueTogTGlrZXdpc2UuCglEb24ndCBkZWZpbmUgdW5zaWduZWRfSE9TVF9XSURFX0lOVCwgQ0hBUl9CSVQgb3IKCUhPU1RfQklUU19QRVJfV0lERV9JTlQuICBSZXBsYWNlIG9jY3VycmVuY2VzIG9mIFBSSU5URl9QUk9UT18xKCkKCXN0eWxlIHdpdGggUFZQUk9UTygpIEFUVFJJQlVURV9QUklOVEZfMSBzdHlsZSBtYWNyb3MuICBSZXBsYWNlCglvY2N1cnJlbmNlcyBvZiAidW5zaWduZWRfSE9TVCIgd2l0aCAidW5zaWduZWQgSE9TVCIuICBQcm92aWRlIGEKCWRlZmluaXRpb24gb2YgdmFyaWFibGUgYGM4OScgd2hlbiBjb21waWxpbmcgYSB0ZXN0IGJpbmFyeSBhbmQgc2V0IGl0LgoKCSogc3lzdGVtLmg6IERvbid0IGRlZmluZSB0aGUgUFJJTlRGX1BST1RPXyogbWFjcm9zLgoKTW9uIEZlYiAxNSAxMTozMzo1MSAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBsb29wLmMgKG1hcmtfbG9vcF9qdW1wKTogSGFuZGxlIExPX1NVTS4gIElmIHdlIGVuY291bnRlciBzb21ldGhpbmcKCXdlIGRvIG5vdCB1bmRlcnN0YW5kLCBtYXJrIHRoZSBsb29wIGFuZCBjb250YWluaW5nIGxvb3BzIGFzIGludmFsaWQuCgpNb24gRmViIDE1IDAwOjQwOjQ1IDE5OTkgIEoib3JuIFJlbm5lY2tlICA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiBhbGlhcy5jIChpbml0X2FsaWFzX2FuYWx5c2lzKTogQXZvaWQgc2VsZi1yZWZlcmVudGlhbCB2YWx1ZQoJd2hlbiBzZXR0aW5nIHJlZ19rbm93bl92YWx1ZSBmcm9tIFJFR19FUVVBTCBub3Rlcy4KClN1biBGZWIgMTQgMjM6MTI6MTAgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGkzODYuYyAobGVnaXRpbWF0ZV9hZGRyZXNzX3ApOiBWZXJpZnkgbW9kZXMgb2YgYmFzZSBhbmQgaW5kZXguCgpTdW4gRmViIDE0IDIzOjAxOjI4IDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBpMzg2LmMgKGxlZ2l0aW1hdGVfcGljX2FkZHJlc3NfZGlzcF9wKTogUmVtb3ZlIHN0YXRpYy4KCSogaTM4Ni5oIChMRUdJVElNQVRFX1BJQ19PUEVSQU5EX1ApOiBVc2UgaXQgaW5zdGVhZCBvZgoJb3Blbi1jb2RpbmcgY2FzZXMuCgpTdW4gRmViIDE0IDIxOjAzOjI4IDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGV4Y2VwdC5jIChzdGFydF9jYXRjaF9oYW5kbGVyKTogVXNlIGVtaXRfY21wX2FuZF9qdW1wX2luc25zLgoJKiBleHBsb3cuYyAocHJvYmVfc3RhY2tfcmFuZ2UpOiBMaWtld2lzZS4KCSogZXhwbWVkLmMgKGRvX2NtcF9hbmRfanVtcCk6IExpa2V3aXNlLgoJKiBleHByLmMgKHN0b3JlX2V4cHIsIGV4cGFuZF9leHByLCBleHBhbmRfYnVpbHRpbik6IExpa2V3aXNlLgoJKGRvX3RhYmxlanVtcCk6IExpa2V3aXNlLgoJKiBzdG10LmMgKGV4cGFuZF9leHByX3N0bXQsIGV4cGFuZF9lbmRfY2FzZSk6IExpa2V3aXNlLgoJKGRvX2p1bXBfaWZfZXF1YWwsIGVtaXRfY2FzZV9ub2Rlcyk6IExpa2V3aXNlLgoJKiBvcHRhYnMuYyAoZW1pdF9jbXBfYW5kX2p1bXBfaW5zbnMpOiBDbGFyaWZ5IGNvbW1lbnRzLiAgSWYgVU5TSUdORURQLAoJdGhlbiBjb252ZXJ0IGNvbXBhcmlzb24gdG8gYW4gdW5zaWduZWQgY29kZSBiZWZvcmUgZW1pdHRpbmcgdGhlIGp1bXAuCgkoZXhwYW5kX2Zsb2F0LCBleHBhbmRfZml4KTogVXNlIGVtaXRfY21wX2FuZF9qdW1wX2luc25zLgoKU3VuIEZlYiAxNCAwMjoyNDoxNSAxOTk5ICBKZWZmIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogdmVyc2lvbi5jOiBCdW1wIGZvciBzbmFwc2hvdC4KClN1biBGZWIgMTQgMDE6MTU6MDQgMTk5OSAgSmVmZiBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHZlcnNpb24uYzogQnVtcCBmb3Igc25hcHNob3QuCgpTdW4gRmViIDE0IDAwOjQ1OjUwIDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGxvb3AuYzogRGlzYWJsZSByZWNlbnQgbG9vcCBjaGFuZ2VzLiAgVGVtcG9yYXJ5IGFzIEpvZXJuCgljb250aW51ZXMgdG8gZml4IHByb2JsZW1zLgoKU2F0IEZlYiAxMyAyMzoyOTo0MiAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogbG9vcC5jIChjb21iaW5lX2dpdnNfdXNlZF9ieV9vdGhlcik6IERlbGV0ZS4KCShjb21iaW5lX2dpdnNfYmVuZWZpdF9mcm9tKTogRGVsZXRlLgoJKGNvbWJpbmVfZ2l2cyk6IERlbnkgY29tYmluYXRpb24gb2YgZ2l2cyBvbmx5IHVzZWQgb25jZS4gIFNpbXBsaWZ5Cgljb2RlIHdpdGggdGhlIGRlYXRoIG9mIGNvbWJpbmVfZ2l2c19iZW5lZml0X2Zyb20uCgpTdW4gRmViIDE0IDExOjI0OjA1IDE5OTkgIE1pY2hhZWwgSGF5ZXMgIDxtLmhheWVzQGVsZWMuY2FudGVyYnVyeS5hYy5uej4KCgkqIGxvb3AuYyAoc2Nhbl9sb29wKTogQ2FsbCByZWdfaW5fYmFzaWNfYmxvY2tfcCBiZWZvcmUKCWxvb3BfcmVnX3VzZWRfYmVmb3JlX3AuCgpTYXQgRmViIDEzIDA1OjMyOjAwIDE5OTkgIFJpY2hhcmQgRWFybnNoYXcgIChyZWFybnNoYUBhcm0uY29tKQoKCSogYXJtLm1kOiBVc2UgZ2VuX3J0eF9GT08gaW5zdGVhZCBvZiBnZW5fcnR4IChGT08sIC4uLikuCgkqIGFybS5oOiBMaWtld2lzZS4KCSogYXJtLmM6IExpa2V3aXNlLgoKCSogYXJtLmggKFRBUkdFVF9PUFRJT05TKTogUmVmb3JtYXQgZm9yIGNsYXJpdHkuCgkoR09fSUZfTEVHSVRJTUFURV9BRERSRVNTKTogV2hlbiBnZW5lcmF0aW5nIFBJQywgcmVmZXJlbmNlcyB0byBzeW1ib2xzCglpbiB0aGUgY29uc3RhbnQgcG9vbCBhcmVuJ3QgdmFsaWQuCgkoTEVHSVRJTUFURV9QSUNfT1BFUkFORF9QKTogTGlrZXdpc2UuCgoJKiBhcm0uYzogSW5jbHVkZSAic3lzdGVtLmgiLCBub3Qgc3RkaW8uaCBhbmQgc3RyaW5nLmguCgpGcmkgRmViIDEyIDEzOjA2OjI4IDE5OTkgIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KCgkqIHN0bXQuYyAoZXhwYW5kX3JldHVybik6IFJldHVybiBpZiBvcHRpbWl6ZV90YWlsX3JlY3Vyc2lvbiBzdWNjZWVkZWQuCgkob3B0aW1pemVfdGFpbF9yZWN1cnNpb24pOiBDaGFuZ2UgcmV0dXJuIHR5cGUgZnJvbSB2b2lkIHRvIGludC4KCUFkZCByZXR1cm4gc3RhdGVtZW50cy4KCSogdHJlZS5oIChvcHRpbWl6ZV90YWlsX3JlY3Vyc2lvbik6IENoYW5nZSBwcm90b3R5cGUgdG8gbWF0Y2guCgpGcmkgRmViIDEyIDIxOjA5OjUxIDE5OTkgIEoib3JuIFJlbm5lY2tlICA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiByZWxvYWQuYyAoZmluZF9yZWxvYWRzX3N1YnJlZ19hZGRyZXNzKTogTmV3IGZ1bmN0aW9uLCBicm9rZW4gb3V0IG9mCglmaW5kX3JlbG9hZHNfdG9wbGV2LgoJKGZpbmRfcmVsb2Fkc190b3BsZXYsIGZpbmRfcmVsb2Fkc19hZGRyZXNzXzEpOiBVc2UgaXQuCgpGcmkgRmViIDEyIDEzOjIwOjUyIDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGg4MzAwLm1kICh6ZXJvX2V4dGVuZGhpc2kyIEg4LzMwMCB2YXJpYW50KTogQ29ycmVjdGx5IGhhbmRsZQoJZXh0ZW5kaW5nIGEgQ09OU1RfSU5ULgoKCSogaDgzMDAubWQgKHBlZXBob2xlIGZvciBjb21iaW5pbmcgbWVtcmVmcyk6IERlbGV0ZSBpbmNvcnJlY3QgcGVlcGhvbGUuCgpGcmkgRmViIDEyIDE4OjI5OjExIDE5OTkgIEoib3JuIFJlbm5lY2tlICA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiBsb29wLmMgKGxvb3BfaW5zbl9maXJzdF9wLCBiaXZfZWxpbWluYXRpb25fZ2l2X2hhc18wX29mZnNldCk6CglOZXcgZnVuY3Rpb25zLgoJKG1heWJlX2VsaW1pbmF0ZV9iaXZfMSk6IFVzZSBiaXZfZWxpbWluYXRpb25fZ2l2X2hhc18wX29mZnNldC4KCkZyaSBGZWIgMTIgMTY6NTY6MTAgMTk5OSAgSiJvcm4gUmVubmVja2UgIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIGxvb3AuYyAobG9hZF9tZW1zKTogRG9uJ3QgZ3Vlc3MgaG93IHRvIGRvIGEgbG9hZCAvIHN0b3JlLCB1c2UKCWVtaXRfbW92ZV9pbnNuLgoKRnJpIEZlYiAxMiAwOToyNDoyNiAxOTk5ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBzeXN0ZW0uaDogUHJvdmlkZSBhIGRlZmluaXRpb24gZm9yIEhPU1RfV0lERVNUX0lOVCwgZXRjLgoKRnJpIEZlYiAxMiAyMzozNzoyNiAxOTk5ICBNaWNoYWVsIEhheWVzICA8bS5oYXllc0BlbGVjLmNhbnRlcmJ1cnkuYWMubno+CgoJKiBjb25maWcvYzR4L2M0eC5jIChjNHhfYWRkcmVzc19jb3N0KTogUmV2ZXJ0IDkgRmViIGNoYW5nZS4KCkZyaSBGZWIgMTIgMDA6NTE6MjYgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogcmVsb2FkLmMgKGZpbmRfcmVsb2Fkc19hZGRyZXNzXzEpOiBGaXggaGFuZGxpbmcgb2YgYW4gYXV0b2luY3JlbWVudGVkCglwc2V1ZG8gd2hpY2ggaXMgaG9tZWQgaW4gdGhlIHN0YWNrLgoKCSogbWlwcy5jIChzYXZlX3Jlc3RvcmVfaW5zbnMpOiBGaXggbG9vcCB0byBzYXZlL3Jlc3RvcmUgRlAgcmVnaXN0ZXJzLgoJKGNvbXB1dGVfZnJhbWVfc2l6ZSk6IENoYW5nZSBsb29wIG92ZXIgRlAgcmVncyB0byBiZSBjb25zaXN0ZW50Cgl3aXRoIHRoZSBsb29wIGluIHNhdmVfcmVzdG9yZV9pbnNucy4KClRodSBGZWIgMTEgMTc6Mzg6NDAgMTk5OSAgSmltIFdpbHNvbiAgPHdpbHNvbkBjeWdudXMuY29tPgoKCSogaTk2MC9pOTYwLmggKE9WRVJSSURFX09QVElPTlMpOiBXYXJuIGlmIC1tbG9uZy1kb3VibGUtNjQgaXMgdXNlZC4KCShMT05HX0RPVUJMRV9UWVBFX1NJWkUpOiBVbmRlZiB0aGVuIHVuY29uZGl0aW9uYWxseSBkZWZpbmUgdG8gOTYuCgpUaHUgRmViIDExIDE1OjExOjM1IDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIG1uMTAyMDAubWQgKGJzZXQpOyBSZS1lbmFibGUuCgpUaHUgRmViIDExIDE1OjIwOjQ5IDE5OTkgIEoib3JuIFJlbm5lY2tlICA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiBzaC5tZCAoaXNfc2Z1bmMpOiBOZXcgYXR0cmlidXRlLgoJKiBzaC5oIChJTlNOX1NFVFNfQVJFX0RFTEFZRUQsIElOU05fUkVGRVJFTkNFU19BUkVfREVMQVlFRCk6IFVzZSBpdC4KClRodSBGZWIgMTEgMDE6MDY6NDkgMTk5OSAgTmF0aGFuIFNpZHdlbGwgIDxuYXRoYW5AYWNtLm9yZz4KCgkqIGZvbGQtY29uc3QuYyAocmFuZ2VfYmlub3ApOiBUYWtlIGFjY291bnQgb2YgdGhlIGJvdW5kZWQgbmF0dXJlCglvZiBmaXhlZCBsZW5ndGggYXJpdGhtZXRpYyB3aGVuIGNvbXBhcmluZyB1bmJvdW5kZWQgcmFuZ2VzLgoKVGh1IEZlYiAxMSAwMDowODoxNyAxOTk5ICBKb2huIFdlaGxlICAoam9obkBmZWl0aC5jb20pCgoJKiBmdW5jdGlvbi5jIChhc3NpZ25fc3RhY2tfdGVtcF9mb3JfdHlwZSk6IENsZWFyIGJlc3RfcAoJd2hlbiBhbiBleGFjdCBtYXRjaCBpcyBmb3VuZC4KCgkqIGkzODYuaCAoTE9DQUxfQUxJR05NRU5UKTogRGVmaW5lLgoJKiBmdW5jdGlvbi5jIChhc3NpZ25fc3RhY2tfbG9jYWwsIGFzc2lnbl9vdXRlcl9zdGFja19sb2NhbCk6IFVzZSBpdC4KCShhc3NpZ25fc3RhY2tfdGVtcF9mb3JfdHlwZSk6IE5ldyBmdW5jdGlvbiBiYXNlZCBvbiBhc3NpZ25fc3RhY2tfdGVtcC4KCShhc3NpZ25fc3RhY2tfdGVtcCk6IENhbGwgaXQuCgkoYXNzaWduX3RlbXApOiBVc2UgYXNzaWduX3N0YWNrX3RlbXBfZm9yX3R5cGUsIG5vdCBhc3NpZ25fc3RhY2tfdGVtcC4KCSogc3RtdC5jOiBVc2UgYXNzaWduX3RlbXAsIG5vdCBhc3NpZ25fc3RhY2tfdGVtcC4KCSogdG0udGV4aTogRG9jdW1lbnQgTE9DQUxfQUxJR05NRU5ULgoKV2VkIEZlYiAxMCAyMzoyODoyOCAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiByZW9yZy5jOiBGaW5pc2ggZGVsZXRpbmcgaGFsZi1kZWxldGVkIGNvbW1lbnQuCgpXZWQgRmViIDEwIDE3OjEyOjIxIDE5OTkgIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KCgkqIGVtaXQtcnRsLmMgKG9wZXJhbmRfc3Vid29yZCk6IFNpZ24gZXh0ZW5kIFJFQUxfVkFMVUVfVE9fVEFSR0VUX1NJTkdMRQoJcmVzdWx0LgoJKiBmaW5hbC5jIChzcGxpdF9kb3VibGUpOiBTaWduIGV4dGVuZCBSRUFMX1ZBTFVFX1RPX1RBUkdFVF9ET1VCTEUKCXJlc3VsdC4KCSogcmVhbC5jIChlbmRpYW4pOiBEZWxldGUgc2lnbiBleHRlbnNpb24gY29kZS4KCSogY29uZmlnL20zMnIvbTMyci5tZCAobW92c2ZfaW5zbisxKTogUkVBTF9WQUxVRV9UT19UQVJHRVRfU0lOR0xFIGNhbGwKCXJlcGxhY2VkIHdpdGggb3BlcmFuZF9zdWJ3b3JkIGNhbGwuCgpXZWQgRmViIDEwIDE1OjE2OjM5IDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBhbHBoYS5tZCAoY21vdiBjb21wb3VuZCBwYXR0ZXJucyk6IERlbGV0ZS4gIEp1bXAgY2FuIG5vdwoJY3JlYXRlIHRoZSBjb3JyZWN0IGNvbnN0cnVjdHMgaW4gdGhlIGZpcnN0IHBsYWNlLgoKV2VkIEZlYiAxMCAxMTowMzoyMiAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogY29uZmlndXJlLmluIChhbHBoYWV2NiopOiBGaXggdHlwbyBpbiB0YXJnZXRfY3B1X2RlZmF1bHQyLgoKV2VkIEZlYiAxMCAxMzo1OToxOCAxOTk5ICBEYXZlIEJyb2xsZXkgIDxicm9sbGV5QGN5Z251cy5jb20+CgoJKiBtYmNoYXIuYyAobG9jYWxfbWJfY3VyX21heCk6IEhhbmRsZSB0aGUgY2FzZSB3aGVyZSBNQl9DVVJfTUFYIGlzIDAuCgpXZWQgRmViIDEwIDEwOjM1OjA1IDE5OTkgIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KCgkqIHRtcC1lbXNnaWRzLmM6IERlbGV0ZS4KCldlZCBGZWIgMTAgMDk6NTc6MDggMTk5OSAgTWFyayBNaXRjaGVsbCAgPG1hcmtAbWFya21pdGNoZWxsLmNvbT4KCgkqIHJ0bGFuYWwuYyAoZm9yX2VhY2hfcnR4KTogRml4IGRlY2xhcmF0aW9uIHRvIGNvbmZvcm0gdG8gR05VCgljb2Rpbmcgc3RhbmRhcmRzLgoKV2VkIEZlYiAxMCAxMDowOTo0MSAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBtbjEwMjAwLm1kIChic2V0LCBiY2xyKTogT3BlcmFuZCAwIGlzIGEgcmVhZC93cml0ZSBvcGVyYW5kLgoKCSogcmVsb2FkMS5jIChyZWxvYWRfY29tYmluZV9ub3RlX3N0b3JlKTogU2Vjb25kIGFyZ3VtZW50IGlzIG5vCglsb25nZXIgdW51c2VkL2lnbm9yZWQuICBIYW5kbGUgbXVsdGktcmVnaXN0ZXIgaGFyZCByZWdzLgoJKG1vdmUyYWRkX25vdGVfc3RvcmUpOiBTaW1wbGlmeS4KCldlZCBGZWIgMTAgMTA6MDU6MjMgMTk5OSAgTXVtaXQgS2hhbiAgPGtoYW5AeHJheWxpdGgud2lzYy5lZHU+CgoJKiBjb2xsZWN0Mi5jIChjb2xsZWN0X2V4ZWN1dGUpOiBSZW1vdmUgY3lnd2luLXNwZWNpZmljIGNvZGUuCgpUdWUgRmViICA5IDE3OjI3OjI5IDE5OTkgIE5hdGhhbiBTaWR3ZWxsICA8bmF0aGFuQGFjbS5vcmc+CgoJKiBzeXN0ZW0uaCAoXywgTl8pOiBSZW1vdmUgZHVtbXkgaTE4biBtYWNyb3MuCgkqIHByb3RvaXplLmM6IE1vdmUgaW5jbHVzaW9uIG9mIGludGwuaCB0byBhZnRlciBzeXN0ZW0uaC4KCSogY2V4cC55OiBJbmNsdWRlIGludGwuaC4KCSogY2V4cC5jOiBSZWJ1aWx0LgoKVHVlIEZlYiAgOSAxNjo1MjoyMiAxOTk5ICBNdW1pdCBLaGFuICA8a2hhbkB4cmF5bGl0aC53aXNjLmVkdT4KCgkqIGkzODYvY3lnd2luLmggKFNVQlRBUkdFVF9PVkVSUklERV9PUFRJT05TKTogTmV3IG1hY3JvIHRvIGlnbm9yZQoJZnBpYy9mUElDIGZvciB3aW5kb3dzMzIgdGFyZ2V0cy4KCSogaTM4Ni94bS1jeWd3aW4uaCAoR0VUX0VOVl9QQVRIX0xJU1QpOiBSZXBsYWNlICdcXCcgaW4gd2luZG93czMyCglwYXRocyB3aXRoICcvJy4KCSogaTM4Ni9taW5ndzMyLmggKENQUF9TUEVDKTogRGVmaW5lLgoJKENQUF9QUkVERUZJTkVTKTogQWRkIE1JTkdXMzIgdmVyc2lvbiBpZC4KCSogaTM4Ni9jcnRkbGwuaCAoQ1BQX1BSRURFRklORVMpOiBMaWtld2lzZS4KCgkqIE1ha2VmaWxlLmluIChjb2xsZWN0MiQoZXhlZXh0KSk6IERlbGV0ZSByZWR1bmRhbnQgZGVwZW5kZW5jeSBhbmQKCWFkZCBtaXNzaW5nIGV4ZWV4dCB0byB0YXJnZXQuCgoJKiBnY2MuYyAoY29udmVydF9maWxlbmFtZSk6IEhhbmRsZSBudWxsIGZpbGVuYW1lIGFyZ3VtZW50LgoKV2VkIEZlYiAxMCAxNTo0NjoxMCAxOTk5ICBNaWNoYWVsIEhheWVzICA8bS5oYXllc0BlbGVjLmNhbnRlcmJ1cnkuYWMubno+CgoJKiBjb25maWcvYzR4L2M0eC5tZCAoKm1vdmhmX25vY2xvYmJlciwgKm1vdmhpX25vY2xvYmJlcik6IFVzZQoJbSBjb25zdHJhaW50IGluc3RlYWQgb2YgUVQuCgoxOTk5LTAyLTA5ICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBjeWdudXMuY29tPgoKCSogY3BwbGliLmMgKHNwZWNpYWxfc3ltYm9sKTogTW92ZSBJUCB0byBiZSBkZWNsYXJlZCBpbiBmdW5jdGlvbgoJc2NvcGUsIHJhdGhlciB0aGFuIGluZGl2aWR1YWwgY2FzZSBzdGF0ZW1lbnRzLgoKMTk5OS0wMi0wOSAgWmFjayBXZWluYmVyZyAgPHphY2tAcmFiaS5jb2x1bWJpYS5lZHU+CgoJKiBjcHBmaWxlcy5jIChmaW5jbHVkZSk6IEhhbmRsZSBwaXBlcyBwcm9wZXJseSB1bmRlciBvbGQgQlNECgkgIGRlcml2YXRpdmVzLgoKMTk5OS0wMi0wOSAgTWVsaXNzYSBPJ05laWxsICA8b25laWxsQGNzLnNmdS5jYT4KCgkqIHN5c3RlbS5oOiBQcm92aWRlIGZhbGxiYWNrIGRlZmluaXRpb25zIGZvciBTX0lTQ0hSLAoJICBTX0lTU09DSywgU19JU0ZJRk8sIE9fTk9OQkxPQ0ssIGFuZCBPX05PQ1RUWS4KCjE5OTktMDItMDkgIFphY2sgV2VpbmJlcmcgIDx6YWNrQHJhYmkuY29sdW1iaWEuZWR1PgoKCSogY3BwbGliLmMgKGRvX2RlZmluZSk6IEFsbG93IHJlZGVmaW5pbmcgX19TVERDX18gd2l0aCAtRC4KCjE5OTktMDItMDkgIEppbSBCbGFuZHkgIDxqaW1iQHp3aW5nbGkuY3lnbnVzLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbjogRm9yIFBvd2VyUEMgY29uZmlndXJhdGlvbnMsIGFjY2VwdCAiNDAxIiwgImVjNjAzZSIsCgkiNzQwIiwgYW5kICI3NTAiIGFzIHZhbGlkIGFyZ3VtZW50cyB0byAtLXdpdGgtY3B1LgoJKiBjb25maWd1cmU6IFJlYnVpbHQuCgpUdWUgRmViICA5IDAwOjAwOjE0IDE5OTkgIE1hcmsgS2V0dGVuaXMgIDxrZXR0ZW5pc0BnbnUub3JnPgoKCSogY29uZmlndXJlLmluIChpWzM0NTY3XTg2LSpnbnUqKTogU2V0IGZsb2F0X2Zvcm1hdCB0byBpMzg2LgoJKiBjb25maWd1cmU6IFJlYnVpbHQuCgpNb24gRmViICA4IDIyOjM4OjI0IDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHJzNjAwMC5tZDogUmV2ZXJ0ICJhbHRlcm5hdGUgdXNlIG9mIGNycyBpZiBjcjAgbm90IGF2YWlsYWJsZSIKCXBhdGNoZXMgZnJvbSAwMS0yMi0xOTk5LCAwMS0yNC0xOTk5LCAwMS0yNi0xOTk5LCBhbmQgMDItMDgtMTk5OS4KCk1vbiBGZWIgIDggMjE6MzY6NDQgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIG91dHB1dC5oIChjdXJyZW50X2Z1bmN0aW9uX2hhc19jb21wdXRlZF9qdW1wKTogUmVuYW1lIGZyb20KCWN1cnJlbnRfZnVuY3Rpb25fYWRkcmVzc2VzX2xhYmVscy4KCSogZnVuY3Rpb24uaCAoc3RydWN0IGZ1bmN0aW9uKTogTGlrZXdpc2UgZm9yIGFkZHJlc3Nlc19sYWJlbHMgbWVtYmVyLgoJKiBydGwuaCAoRlVOQ1RJT05fRkxBR1NfSEFTX0NPTVBVVEVEX0pVTVApOiBMaWtld2lzZS4KCSogZnVuY3Rpb24uYyAoY3VycmVudF9mdW5jdGlvbl9oYXNfY29tcHV0ZWRfanVtcCk6IExpa2V3aXNlLgoJVXBkYXRlIGFsbCByZWZlcmVuY2VzLgoJKiBpbnRlZ3JhdGUuYyAoZnVuY3Rpb25fY2Fubm90X2lubGluZV9wKToKCVRlc3QgY3VycmVudF9mdW5jdGlvbl9oYXNfY29tcHV0ZWRfanVtcCBpbnN0ZWFkIG9mIGFkZHJlc3Nlc19sYWJlbHMuCgkoaW5pdGlhbGl6ZV9mb3JfaW5saW5lKTogTGlrZXdpc2Ugc2F2ZS4KCShvdXRwdXRfaW5saW5lX2Z1bmN0aW9uKTogTGlrZXdpc2UgcmVzdG9yZS4KCgkqIGV4cHIuYyAoZXhwYW5kX2V4cHIpOiBEb24ndCByZWZlcmVuY2UgYWRkcmVzc2VzX2xhYmVscyB2YXJpYWJsZXMuCgkqIHN0bXQuYyAoZXhwYW5kX2NvbXB1dGVkX2dvdG8pOiBTZXQgaGFzX2NvbXB1dGVkX2p1bXAuCgoxOTk5LTAyLTA4ICBNaWNoYWVsIE1laXNzbmVyICA8bWVpc3NuZXJAY3lnbnVzLmNvbT4KCglUaGlzIGlzIGJlaW5nIGluc3RhbGxlZCBvbmx5IHRvIGdldCBpdCBpbnRvIHRoZSByZXBvc2l0b3J5IHRvIGhlbHAKCXdpdGggdGhlIHJldmVydCwgcmVzdWJtaXQgJiByZXZpZXcgcHJvY2VzcyBmb3IgdGhlIG1hc3NpdmUgcnM2MDAwLm1kCgljaGFuZ2VzLgoJKiByczYwMDAubWQgKGFuZHNpM19pbnRlcm5hbDEgc3BsaXR0ZXIpOiBEb24ndCBzcGxpdCBpZiB1c2luZyB0aGUKCXJsd2lubSBpbnN0cnVjdGlvbi4KCShhbmRkaTNfaW50ZXJuYWwxKTogTGlrZXdpc2UuCgkoYW5kc2kzX2ludGVybmFsezIsM30pOiBDb3JyZWN0IHNvbWUgaW5zbiBsZW5ndGhzLgoJKGFuZGRpMyopOiBSZXN0b3JlIG1pc3NpbmcgVEFSR0VUX1BPV0VSUEM2NCwgYW5kIGRvbid0IGVtaXQgb2xkCgltbmVtb25pY3MuCgpNb24gRmViICA4IDIxOjMxOjA2IDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBsb29wLmMgKHJlZ19zaW5nbGVfdXNhZ2UpOiBOZXcgZmlsZS1zY29wZSB2YXJpYWJsZSAuLi4KCShzY2FuX2xvb3ApOiAuLi4gbW92ZWQgb3V0IG9mIGhlcmUuICBBbHdheXMgaW5pdGlhbGl6ZS4KCVRlc3QgbG9vcF9oYXNfY2FsbCBpbnN0ZWFkIG9mIHJlZ19zaW5nbGVfdXNhZ2Ugbm90IHplcm8uCglGcmVlIHJlZ19zaW5nbGVfdXNhZ2UgYWZ0ZXIgc3RyZW5ndGggcmVkdWN0aW9uLgoJKGNvdW50X2xvb3BfcmVnc19zZXQpOiBBc3N1bWUgc2luZ2xlX3VzYWdlIG5vbnplcm8uCgkoY29tYmluZV9naXZzX3VzZWRfYnlfb3RoZXIpOiBUZXN0IHJlZ19zaW5nbGVfdXNhZ2UuCgkobG9hZF9tZW1zX2FuZF9yZWNvdW50X2xvb3BfcmVnc19zZXQpOiBSZW1vdmUgcmVnX3NpbmdsZV91c2FnZQoJYXMgYSBwYXJhbWV0ZXIuICBBc3N1bWUgbm9uemVyby4KCjE5OTktMDItMDggIFphY2sgV2VpbmJlcmcgIDx6YWNrQG1pZG5pdGUuZWMucmhuby5jb2x1bWJpYS5lZHU+CgoJKiBjcHBsaWIuYyAoc3BlY2lhbF9zeW1ib2wpOiBSZXdyaXRlLiAgRG9uJ3QgY29weSB0aGluZ3MKCSAgbXVsdGlwbGUgdGltZXMuICBIYW5kbGUgX19TVERDX18gc3BlY2lhbGx5LiAgVF9DT05TVAoJICBpbmRpY2F0ZXMgYSBjb25zdGFudCAvc3RyaW5nLy4gIERvbid0IGhhbmRsZSBUXypfVFlQRSBhbmQKCSAgVF9TUEVDX0RFRklORUQuICBVc2UgY3BwX2J1Zl9saW5lX2FuZF9jb2wgaW5zdGVhZCBvZgoJICBhZGp1c3RfcG9zaXRpb24uICBEZXRlcm1pbmUgdGhlIGZpbGUgYnVmZmVyIG9ubHkgaWYgbmVlZGVkLgoJICAoaW5pdGlhbGl6ZV9idWlsdGlucyk6IEhhbmRsZSBfX1NJWkVfVFlQRV9fLAoJICBfX1BUUkRJRkZfVFlQRV9fLCBfX1dDSEFSX1RZUEVfXywgX19VU0VSX0xBQkVMX1BSRUZJWF9fLCBhbmQKCSAgX19SRUdJU1RFUl9QUkVGSVhfXyB3aXRoIFRfQ09OU1Qgc3BlY2lhbCBoYXNodGFiIGVudHJpZXMuCgkgIERvbid0IHByb3ZpZGUgX19PQkpDX187IHRoZSBkcml2ZXIgZG9lcyB0aGF0LiAgUHJvdmlkZQoJICBfX1NURENfVkVSU0lPTl9fLCB1c2luZyBUX0NPTlNULiAgVXNlIFRfU1REQyBmb3IKCSAgX19TVERDX18uICBHaXZlIGluc3RhbGwgdGhlIGxlbmd0aCBvZiBhbGwgc3ltYm9scyBkZWZpbmVkLgoJICAoZXZhbF9pZl9leHByZXNzaW9uKTogRHJvcCBjb2RlIHRvIGluc2VydCBhbmQgcmVtb3ZlIHRoZQoJICAiZGVmaW5lZCIgc3BlY2lhbCBzeW1ib2wuCgoJKiBjcHBsaWIuaDogUmVtb3ZlIFNFTEZfRElSX0RVTU1ZIChubyBsb25nZXIgdXNlZCkuICBSZW1vdmUKCSAgVF8qX1RZUEUgYW5kIFRfU1BFQ19ERUZJTkVEIGZyb20gZW51bSBub2RlX3R5cGU7IGFkZCBUX1NUREMuCgoJKiBjcHBoYXNoLmMgKGluc3RhbGwpOiBEcm9wIHRoZSBgaXZhbHVlJyBwYXJhbWV0ZXIuICBDb25zdGlmeQoJICB0aGUgYHZhbHVlJyBwYXJhbWV0ZXIuICBBbGwgY2FsbGVycyBjaGFuZ2VkLgoJKiBjcHBoYXNoLmggKGluc3RhbGwpOiBDaGFuZ2UgcHJvdG90eXBlIHRvIG1hdGNoLgoJICAodW5pb24gaGFzaHZhbCk6IFJlbW92ZSBgaXZhbCcgbWVtYmVyLgoJKiBjcHBleHAuYyAoY3BwX2xleCk6IEhhbmRsZSBgZGVmaW5lZCcgaGVyZS4KCk1vbiBGZWIgIDggMTc6Mjk6NDIgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogcGEuaCAoRVhUUkFfQ09OU1RSQUlOVCk6IEZpeCBjb21tZW50LgoKTW9uIEZlYiAgOCAxODo1Nzo0NSAxOTk5ICBWbGFkaW1pciBOLiBNYWthcm92ICA8dm1ha2Fyb3ZAY3lnbnVzLmNvbT4KCgkqIGMtdHlwZWNrLmMgKGNoZWNrX2luaXRfdHlwZV9iaXRmaWVsZHMpOiBVc2Ugbm9uaW5jcmVtZW50YWwKCWluaXRpYWxpemF0aW9uIG9mIHVuaW9ucyB3aG9zZSBmaXJzdCBtZW1iZXIgaXMgYSBiaXRmaWVsZC4KCVJlbW92ZSB1bm5lY2Vzc2FyeSBjb2RlIGZvciBjaGVja2luZyB0aGUgZGVjbGFyYXRpb24gbW9kZQoJYWZ0ZXIgREVDTF9DX0JJVF9GSUVMRC4KCgkqIHZhcmFzbS5jIChvdXRwdXRfY29uc3RydWN0b3IpOiBBZGRpdGlvbmFsIGNvbW1lbnQgYWJvdXQgdGhlCgljb25zdHJ1Y3RvciBvZiBiaXRmaWVsZCB1bmlvbiBpbml0aWFsaXphdGlvbi4KClR1ZSBGZWIgIDkgMTE6NTU6MDQgMTk5OSAgTWljaGFlbCBIYXllcyAgPG0uaGF5ZXNAZWxlYy5jYW50ZXJidXJ5LmFjLm56PgoKCSogY29uZmlnL2M0eC9jNHgubWQgKCptb3ZoaV9zdGlrKTogTmV3IHBhdHRlcm4uCgkobW92aGkpOiBBbGxvdyBzb21lIGltbWVkaWF0ZSBjb25zdGFudHMgdG8gYmUgZGlyZWN0bHkKCXN0b3JlZCBpbiBtZW1vcnkuCgpUdWUgRmViICA5IDExOjM0OjE1IDE5OTkgIE1pY2hhZWwgSGF5ZXMgIDxtLmhheWVzQGVsZWMuY2FudGVyYnVyeS5hYy5uej4KCgkqIGNvbmZpZy9jNHgvYzR4Lm1kIChhbGwgY2FsbCBwYXR0ZXJucyk6IEFkZCBjb25zdHJhaW50cyAiVXIiLgoJKGNhbGwsIGNhbGxfdmFsdWUpOiBGb3JjZSBhZGRyZXNzIGludG8gYSByZWdpc3RlciBpZiBub3QgdmFsaWQKCWZvciBhIGNhbGwgaW5zdHJ1Y3Rpb24uCgkobG9hZF9pbW1lZF9hZGRyZXNzKTogRW1pdCBhIFVTRSBvZiB0aGUgU1lNQk9MX1JFRiB0aGF0IGlzCglmb3JjZWQgaW50byBtZW1vcnkuCgkqIGNvbmZpZy9jNHgvYzR4LmMgKGM0eF9wcmludF9vcGVyYW5kKTogRml4ICdDJyBhbmQgJ1UnIG1vZGlmaWVycy4KClR1ZSBGZWIgIDkgMTE6MDg6NDEgMTk5OSAgTWljaGFlbCBIYXllcyAgPG0uaGF5ZXNAZWxlYy5jYW50ZXJidXJ5LmFjLm56PgoKCSogY29uZmlnL2M0eC9jNHguYyAoY2FsbF9hZGRyZXNzX29wZXJhbmQsIHN5bWJvbGljX2FkZHJlc3Nfb3BlcmFuZCk6CglSZW5hbWUgZnJvbSBjYWxsX29wZXJhbmQgYW5kIHN5bWJvbGljX29wZXJhbmQgcmVzcGVjdGl2ZWx5LiAgQWxsCgljYWxsZXJzIGNoYW5nZWQuCgkqIGNvbmZpZy9jNHgvYzR4Lm1kIChjYWxsX2FkZHJlc3Nfb3BlcmFuZCwgc3ltYm9saWNfYWRkcmVzc19vcGVyYW5kKToKCUxpa2V3aXNlLgoJKiBjb25maWcvYzR4L2M0eC5oIChjYWxsX2FkZHJlc3Nfb3BlcmFuZCwgc3ltYm9saWNfYWRkcmVzc19vcGVyYW5kKToKCUxpa2V3aXNlLgoJKFBSRURJQ0FURV9DT0RFUyk6IEFsbG93IENPTlNULCBMQUJFTF9SRUYgZm9yIGNhbGxfYWRkcmVzc19vcGVyYW5kLgoKVHVlIEZlYiAgOSAxMDo1MjoyNyAxOTk5ICBNaWNoYWVsIEhheWVzICA8bS5oYXllc0BlbGVjLmNhbnRlcmJ1cnkuYWMubno+CgoJKiBjb25maWcvYzR4L2M0eC5jIChjNHhfbGVnaXRpbWl6ZV9hZGRyZXNzKTogRG9uJ3QgZ2VuZXJhdGUgYQoJTE9fU1VNIGFkZHJlc3MgZm9yIEhJbW9kZSBvciBIRm1vZGUgYnV0IGluc3RlYWQgZm9yY2UgYWRkcmVzcyBpbnRvCglhIHJlZ2lzdGVyIHNvIHRoYXQgaXQgaXMgb2Zmc2V0dGFibGUuCgkoYzR4X2VtaXRfbW92ZV9zZXF1ZW5jZSk6IEhhbmRsZSBMT19TVU0gaW1tZWRpYXRlIGFkZHJlc3MuCgpUdWUgRmViICA5IDEwOjQ2OjQyIDE5OTkgIE1pY2hhZWwgSGF5ZXMgIDxtLmhheWVzQGVsZWMuY2FudGVyYnVyeS5hYy5uej4KCgkqIGNvbmZpZy9jNHgvYzR4LmMgKGM0eF9hZGRyZXNzX2Nvc3QpOiBSZXR1cm4gY29zdCBvZiAxIGZvcgoJUkVHK1JFRyBhZGRyZXNzaW5nIGlmIHN0cmVuZ3RoIHJlZHVjdGlvbiBlbmFibGVkLgoKVHVlIEZlYiAgOSAxMDoxMDozMSAxOTk5ICBNaWNoYWVsIEhheWVzICA8bS5oYXllc0BlbGVjLmNhbnRlcmJ1cnkuYWMubno+CgoJKiBjb25maWcvYzR4L3QtYzR4ICAoTElCR0NDMl9DRkxBR1MpOiBEZWxldGUuCgkoVEFSR0VUX0xJQkdDQzJfQ0ZMQUdTKTogRGVmaW5lLgoKMTk5OS0wMi0wOCAgTmljayBDbGlmdG9uICA8bmlja2NAY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy92ODUwL3Y4NTAubWQ6IFJlcGxhY2UgXFxuXFx0IHdpdGggXFw7CgoJKiBjb25maWcvdjg1MC92ODUwLm1kOiBFbmZvcmNlIFRBUkdFVF9MT05HX0NBTExTIG9wdGlvbi4KCSogY29uZmlnL3Y4NTAvdjg1MC5jIChjb25zdHJ1Y3RfcmVzdG9yZV9qciwgY29uc3RydWN0X3NhdmVfamFybCk6CglFbmZvcmNlIFRBUkdFVF9MT05HX0NBTExTIG9wdGlvbi4KCk1vbiBGZWIgIDggMTE6NDM6MDcgMTk5OSAgRG9ubiBUZXJyeSAgPGRvbm5AaW50ZXJpeC5jb20+CgoJKiByZWFsLmMgKFBVVF9SRUFMKSBbWEZtb2RlXTogWmVybyB0aGUgYmFsYW5jZSBvZiB0aGUgc3RydWN0dXJlLgoKTW9uIEZlYiAgOCAxMTozNzoyNCAxOTk5ICBNYXJjIEVzcGllICAoZXNwaWVAY3ZzLm9wZW5ic2Qub3JnKQoKCSogbTg4ay90LWx1bmEtZ2FzOiBSZW1vdmUgYmFzaCBkZXBlbmRlbmN5LgoKTW9uIEZlYiAgOCAxMTozNDo0NCAxOTk5ICBHcmFoYW0gIDxncmFoYW1zQHJjcC5jby51az4KCgkqIGNvbGxlY3QyLmMgKHhyZWFsbG9jKTogRml4IHR5cG8gaW4gbGFzdCBjaGFuZ2UuCgpNb24gRmViICA4IDA5OjEzOjM4IDE5OTkgIEplZmYgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiB2ZXJzaW9uLmM6IEJ1bXAgZm9yIHNuYXBzaG90LgoKU3VuIEZlYiAgNyAyMjoxODo0MiAxOTk5ICBSb2JlcnQgTGlwZSAgPHJvYmVydGxpcGVAdXNhLm5ldD4KCgkqIHRyZWUuaCAoVFlQRV9DSEVDSyk6IE1ha2UgaXQgY2xlYXIgdG8gdGhlIHByZXByb2Nlc3NvcgoJdGhhdCB3ZSBkbyBub3Qgd2FudCBtYWNybyByZXBsYWNlbWVudCB3aXRoaW4gYSBjaGFyYWN0ZXIgY29uc3RhbnQuCgkoVFlQRV9DSEVDSzEpOiBMaWtld2lzZS4KClN1biBGZWIgIDcgMTU6Mzc6MTAgMTk5OSAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogdHJlZS5oIChERUNMX1ApOiBOZXcgbWFjcm8uCgpTdW4gRmViICA3IDAxOjE1OjA0IDE5OTkgIEplZmYgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiB2ZXJzaW9uLmM6IEJ1bXAgZm9yIHNuYXBzaG90LgoKU2F0IEZlYiAgNiAxODoxNDo0NiAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBtbjEwMzAwLm1kIChyZWxvYWRfaW5zaSk6IERvIG5vdCBlYXJseWNsb2JiZXIgdGhlIG91dHB1dCBvcGVyYW5kLgoKCSogUkVBRE1FLmc3NywgZ2NjLmMsIGdjYy50ZXhpOiBVcGRhdGUgZW1haWwgYWRkcmVzc2VzLgoJKiBpbnZva2UudGV4aSBzeXN0ZW0uaDogTGlrZXdpc2UuCgpTYXQgRmViICA2IDExOjA0OjA4IDE5OTkgIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KCgkqIHVucm9sbC5jIChmaW5kX3NwbGl0dGFibGVfZ2l2cyk6IEFmdGVyIGV4cHJlc3NfZnJvbSwgY2FsbCByZXBsYWNlX3J0eAoJdG8gY29udmVydCBkZXN0X3JlZyB0byBuZXdfcmVnLgoKU2F0IEZlYiAgNiAxMDozMTozNSAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiByZWxvYWQxLmMgKHJlbG9hZF9jb21iaW5lX25vdGVfc3RvcmUpOiBCZSBtb3JlIGNhcmVmdWwgd2l0aAoJU1RSSUNUX0xPV19QQVJULCBaRVJPX0VYVFJBQ1QgYW5kIFNJR05fRVhUUkFDVC4KCShtb3ZlMmFkZF9ub3RlX3N0b3JlKTogTGlrZXdpc2UuCgpTYXQgRmViICA2IDEwOjE4OjAxIDE5OTkgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGNwcGZpbGVzLmMgKHJlYWRfYW5kX3ByZXNjYW4pOiBDYXN0IHRoZSByZXN1bHQgb2YgYHhyZWFsbG9jJyB0bwoJVV9DSEFSKiB3aGVuIGFzc2lnbmluZyB0byBvbmUuICBFbnN1cmUgdGhlIHZhbHVlcyBvZiBhID86IG9wZXJhdG9yCgloYXZlIHRoZSBzYW1lIHR5cGUuCgoJKiBjcHBpbml0LmMgKGluaXRpYWxpemVfY2hhcl9zeW50YXgpOiBVc2UgSyZSIGZ1bmN0aW9uIGRlZmluaXRpb24uCgpTYXQgRmViICA2IDExOjE3OjAzIDE5OTkgIFJpY2hhcmQgRWFybnNoYXcgIDxyZWFybnNoYUBhcm0uY29tPgoKCVN1cHBvcnQgZm9yIEFSTTkKCSogY29uZmlnL2FybS9hcm0uYyAoYWxsX3Byb2NzKTogQWRkIGFybTkgYW5kIGFybTl0ZG1pLgoJKiBjb25maWcvYXJtL2FybS5oICgoVEFSR0VUX0NQVV9hcm05LCBUQVJHRVRfQ1BVRF9hcm05dGRtaSk6IERlZmluZS4KCShUQVJHRVRfQ1BVX0RFRkFVTFQpOiBSZXdvcmsgdG8gc3VwcG9ydCBBUk05LgoJKENQUF9DUFVfQVJDSF9TUEVDKTogTGlrZXdpc2UuCgkoZW51bSBwcm9jZXNzb3JfdHlwZSk6IExpa2V3aXNlLgoJKiBjb25maWcvYXJtL2FybS5tZCAoYXR0ciBjcHUpOiBBZGQgYXJtOS4KCglHZW5lcmFsIHNjaGVkdWxpbmcgY2hhbmdlcwoJKiBjb25maWcvYXJtL2FybS5jIChNQVhfSU5TTlNfU0tJUFBFRCk6IERlbGV0ZS4KCShtYXhfaW5zbnNfc2tpcHBlZCk6IE5ldyB2YXJpYWJsZS4KCShhcm1fb3ZlcnJpZGVfb3B0aW9ucyk6IElmIGdlbmVyYXRpbmcgaGFyZCBmbG9hdGluZyBwb2ludCBjb2RlIGZvcgoJdGhlIEZQQSwgZW1pdCBjb2RlIGZvciB2ZXJzaW9uIDMuCglXaGVuIG9wdGltaXppbmcgZm9yIHNwYWNlLCBkb24ndCBzeW50aGVzaXplIGNvbnN0YW50cy4KCVJld29yZCBzZXZlcmFsIGZsYWdzIGJhc2VkIG9uIHRoZSByZXF1ZXN0ZWQgcHJvY2Vzc29yIGFuZCBvcHRpbWl6YXRpb24KCWxldmVsLgoJKHVzZV9yZXR1cm5faW5zbik6IE5ldyBhcmd1bWVudCBpc2NvbmQsIGFsbCBjYWxsZXJzIGNoYW5nZWQuICBEb24ndAoJdXNlIGEgcmV0dXJuIGluc24gaWYgaXQgd2lsbCBiZSBjb25kaXRpb25hbCBhbmQgdGhhdCB3b3VsZCBiZQoJZXhwZW5zaXZlOyBlZyBvbiBTdHJvbmdBUk0uCgkoYXJtX2FkanVzdF9jb3N0KTogQW50aS0gYW5kIG91dHB1dC0gZGVwZW5kZW5jaWVzIG5vcm1hbGx5IGhhdmUgbm8KCWNvc3QuCgkobG9hZF9tdWx0aXBsZV9zZXF1ZW5jZSk6IE5ld2VyIEFSTXMgZG9uJ3QgYmVuZWZpdCBmcm9tIGxkbSBpZgoJdGhlIHNlcXVlbmNlIGlzIHNob3J0LgoJKGZpbmFsX3ByZXNjYW5faW5zbik6IFVzZSBtYXhfaW5zbnNfc2tpcHBlZCBpbnN0ZWFkIG9mCglNQVhfSU5TTlNfU0tJUFBFRC4gIE5vdGUgd2hldGhlciB3ZSB3aWxsIG1ha2UgYSByZXR1cm4gaW5zdHJ1Y3Rpb24KCWNvbmRpdGlvbmFsLCBhbmQgYXZpb2QgdGhpcyBpZiBpdCB3b3VsZCBiZSBleHBlbnNpdmUuCgkqIGNvbmZpZy9hcm0vYXJtLm1kIChzY2hlZHVsaW5nIGF0dHJpYnV0ZXMgYW5kIGZ1bmN0aW9uIHVuaXRzKToKCVJld3JpdGUgdG8gYmV0dGVyIGRlc2NyaWJlIEFSTTgsIDkgYW5kIFN0cm9uZ0FSTS4KCgkqIGNvbmZpZy9hcm0vYXJtLm1kICgqbW92aGlfaW5zbl9saXR0bGVlbmQpOiBNYWtlIG9wMCBwcmVkaWNhdGUKCXNfcmVnaXN0ZXJfb3BlcmFuZC4KCSgqaWZjb21wYXJlX3BsdXNfbW92ZSk6IFVzZSBhcm1fcmhzX29wZXJhbmQgaW4gcGxhY2Ugb2YKCWFybV9yaHNtX29wZXJhbmQuICBSZXdvcmsgY29uc3RyYWludHMuCgkoKmlmX3BsdXNfbW92ZSk6IExpa2V3aXNlLgoJKCppZmNvbXBhcmVfbW92ZV9wbHVzKTogTGlrZXdpc2UuCgkoKmlmX21vdmVfcGx1cyk6IExpa2V3aXNlLgoJKCppZmNvbXByZV9hcml0aF9tb3ZlKTogTGlrZXdpc2UuCgkoKmlmX2FyaXRoX21vdmUpOiBMaWtld2lzZS4KCSgqaWZjb21wYXJlX21vdmVfYXJpdGgpOiBMaWtld2lzZS4KCSgqaWZfbW92ZV9hcml0aCk6IExpa2V3aXNlLgoKCSogY29uZmlnL2FybS94bS1uZXRic2QuaDogRG9uJ3QgaW5jbHVkZSBhcm0veG0tYXJtLmguCgoxOTk5LTAyLTA1ICBNaWNoYWVsIE1laXNzbmVyICA8bWVpc3NuZXJAY3lnbnVzLmNvbT4KCgkqIGxvb3AuYyAoY2hlY2tfZGJyYV9sb29wKTogQSBzdG9yZSB1c2luZyBhbiBhZGRyZXNzIGdpdiBmb3Igd2hpY2gKCXdlIGhhdmUgbm8gbGlmZSBpbmZvcm1hdGlvbiBpcyBub3QgcmV2ZXJzaWJsZS4KCkZyaSBGZWIgIDUgMTc6MDg6MDEgMTk5OSAgRGF2ZSBCcm9sbGV5ICA8YnJvbGxleUBjeWdudXMuY29tPgoKCSogZnVuY3Rpb24uYyAoZml4dXBfdmFyX3JlZnMpOiBTY2FuIGNhdGNoX2NsYXVzZXMgdG9vLgoKRnJpIEZlYiAgNSAxMTo0OTo0OSAxOTk5ICBCZW5qYW1pbiBLb3NuaWsgIDxia296QGxvb255LmN5Z251cy5jb20+CgoJKiBjLWNvbW1vbi5jIChkZWNsX2F0dHJpYnV0ZXMpOiBGaXggcmVzZXJ2ZWQgc3BhY2UgZm9yIGluaXRfcHJpb3JpdHkuCgkqIHRyZWUuaCAoTUFYX1JFU0VSVkVEX0lOSVRfUFJJT1JJVFkpOiBOZXcgbWFjcm8uCgpGcmkgRmViICA1IDEyOjM3OjA1IDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGxvb3AuYyAoc3RyZW5ndGhfcmVkdWNlKTogQ2xlYXIgbm90X2V2ZXJ5X2l0ZXJhdGlvbiB3aGVuCglwYXNzaW5nIHRoZSBOT1RFX0lOU05fTE9PUF9DT05UIG5vdGUuCgoJKiBoYWlmYS1zY2hlZC5jIChhZGRfZGVwZW5kZW5jZSk6IERvIG5vdCBhZGQgYSBkZXBlbmRlbmN5IG9uIGEKCW5vdGUuCgpGcmkgRmViICA1IDEwOjU1OjQzIDE5OTkgIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQGN5Z251cy5jb20+CgoJKiByZWNvZy5jIChzcGxpdF9ibG9ja19pbnNucyk6IE9ubHkgY2FsbCB1cGRhdGVfZmxvd19pbmZvIGlmCglpbnN0cnVjdGlvbiBzY2hlZHVsaW5nIGlzIGVuYWJsZWQuCgoxOTk5LTAyLTA1ICBaYWNrIFdlaW5iZXJnICA8emFja0ByYWJpLmNvbHVtYmlhLmVkdT4KCgkqIE1ha2VmaWxlLmluIChnZW4tcHJvdG9zKTogVXNlIGxpYmNwcC5hIGxpa2UgZXZlcnlvbmUgZWxzZS4KCkZyaSBGZWIgIDUgMDc6MDk6MjkgMTk5OSAgSiJvcm4gUmVubmVja2UgIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIGxvb3AuYyAoZmlyc3RfbG9vcF9zdG9yZV9pbnNuKTogTmV3IGZpbGUtc2NvcGUgdmFyaWFibGUuCgkocHJlc2Nhbl9sb29wKTogU2V0IGl0LgoJKGNoZWNrX2RicmFfbG9vcCk6IENoZWNrIGlmIGEgc3RvcmUgZGVwZW5kcyBvbiBhIHJlZ2lzdGVyCgl0aGF0IGlzIHNldCBhZnRlciB0aGUgc3RvcmUuCgpGcmkgRmViICA1IDA2OjU1OjE1IDE5OTkgIEoib3JuIFJlbm5lY2tlICA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiB1bnJvbGwuYyAoZW50aXJlIGZpbGUpOiBSZW1vdmUgdGFicyAvIHNwYWNlcyBhdCBlbmQgb2YgbGluZXMuCglSZXBsYWNlIHNwYWNlcyB3aXRoIHRhYnMgd2hlcmUgYXBwcm9wcmlhdGUuCgpUaHUgRmViICA0IDE1OjEyOjQxIDE5OTkgIEoib3JuIFJlbm5lY2tlICA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiBsb29wLmMgKHNjYW5fbG9vcCk6IE5ldyBhcmd1bWVudCBsb29wX2NvbnQuICBDaGFuZ2VkIGNhbGxlci4KCShzdHJlbmd0aF9yZWR1Y2UpOiBOZXcgYXJndW1lbnQgbG9vcF9jb250LiBDaGFuZ2VkIGNhbGxlci4KCUJlZm9yZSBjbGVhcmluZyBub3RfZXZlcnlfaXRlcmF0aW9uIGFmdGVyIGEgbGFiZWwsIGNoZWNrIGlmCgl3ZSBhcmUgbm90IGFscmVhZHkgcGFzdCBMT09QX0NPTlQuCgoxOTk5LTAyLTA0ICBaYWNrIFdlaW5iZXJnICA8emFja0ByYWJpLmNvbHVtYmlhLmVkdT4KCgkqIGNwcGVycm9yLmMgKGNwcF9wcmludF9jb250YWluaW5nX2ZpbGVzKTogRml4IGZvcm1hdHRpbmcKCWJ1ZyBpbmR1Y2VkIGJ5IG1lcmdlLgoKMTk5OS0wMi0wNCAgWmFjayBXZWluYmVyZyAgPHphY2tAcmFiaS5waHlzLmNvbHVtYmlhLmVkdT4KCgkqIGNwcGxpYi5jIChpbml0aWFsaXplX2NoYXJfc3ludGF4KTogTW92ZSB0byBjcHBpbml0LmMuCgkoY3BwX2RlZmluZSk6IFJlbW92ZSByZWR1bmRhbnQgc3ludGF4IGNoZWNrcy4KCShtYWtlX2Fzc2VydGlvbik6IFJlbmFtZSBjcHBfYXNzZXJ0LCByZW1vdmUgcmVkdW5kYW50IHN5bnRheAoJY2hlY2tzLCBleHBvcnQuCgkoY3BwX29wdGlvbnNfaW5pdCk6IERvbid0IGluaXQgdGhpbmdzIHRvIHplcm8gdHdpY2UuCgkoY3BwX2V4cGFuZF90b19idWZmZXIpOiBVc2UgbWVtY3B5LCBub3QgYSBjaGFyLWJ5LWNoYXIgbG9vcC4KCShkb19pbmNsdWRlKTogS2lsbCBleGNlc3NpdmVseSB2ZXJib3NlICNpbXBvcnQgd2FybmluZyB0aGF0CglzbnVjayBiYWNrIGluIGluIHRoZSBnY2MyIG1lcmdlLgoJKGNvbnZlcnRfc3RyaW5nKTogUmVtb3ZlZC4KCShkb19saW5lKTogUmV3cml0ZSB3aXRoIHNpbXBsZSBsYXN0LW5hbWUtdXNlZCBjYWNoZSBpbnN0ZWFkIG9mCglwcml2YXRlIGhhc2h0YWJsZS4KCShjcHBfc3RhcnRfcmVhZCk6IENhbGwgaW5pdGlhbGl6ZV9jaGFyX3N5bnRheCBoZXJlLCBub3QuLi4KCShjcHBfcmVhZGVyX2luaXQpOiAuLi5oZXJlLgoJKGNwcF9oYW5kbGVfb3B0aW9ucyk6IFN1cHBvcnQgdGhlIC1zdGQgc3dpdGNoLgoJKiBjcHBsaWIuaCAoY3BwX2J1ZmZlcik6IEFkZCBsYXN0X25vbWluYWxfZm5hbWUgbWVtYmVyLgoJKGNwcF9vcHRpb25zKTogQWRkIGM5eCBmbGFnLgoJRGVjbGFyZSBhbGwgdGhlIGlzXyogdGFibGVzIGFuZCB0cmlncmFwaCB0YWJsZSBoZXJlLCBhcyBjb25zdC4KCVByb3RvdHlwZSBjcHBfYXNzZXJ0IGFuZCBpbml0aWFsaXplX2NoYXJfc3ludGF4LgoJKiBjcHBpbml0LmM6IE5ldyBmaWxlLgoJKiBjcHBmaWxlcy5jIChyZWFkX2FuZF9wcmVzY2FuKTogT3B0aW1pemUuCgkqIE1ha2VmaWxlLmluIChMSUJDUFBfT0JKUyk6IEFkZCBjcHBpbml0Lm8uCgpUaHUgRmViICA0IDEwOjQ2OjMwIDE5OTkgIEdhdmluIFJvbWlnLUtvY2ggIDxnYXZpbkBjeWdudXMuY29tPgoKCSogY29uZmlnL21pcHMvbWlwcy5tZCAoW3VdZGl2bW9kc2k0LFt1XWRpdm1vZGRpNCxbdV1kaXZzaTMsW3VdZGl2ZGkzLAoJW3VdbW9kc2kzLFt1XW1vZGRpMykgOiBEb24ndCBjb3B5IHRoZSAiemVybyIgYXJndW1lbnQgdG8gYSByZWdpc3RlcgoJYmVmb3JlIGNhbGxpbmcgZ2VuX2Rpdl90cmFwLgoKV2VkIEZlYiAgMyAyMTo1NjoyNyAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBjb25maWd1cmUuaW4gKGhwcGExLjEtKi0qLCBocHBhMiotKik6IFVzZSBzeW1ib2xpYyB2YWx1ZSByYXRoZXIKCXRoYW4gbnVtZXJpYyB2YWx1ZSBmb3IgdGFyZ2V0X2NwdV9kZWZhdWx0Li4KCSogY29uZmlndXJlOiBSZWJ1aWx0LgoKV2VkIEZlYiAgMyAyMTo1NTo1NiAxOTk5ICBNYXJjIEVzcGllICA8TWFyYy5Fc3BpZUBsaWFmYS5qdXNzaWV1LmZyPgoKCSogTWFrZWZpbGUuaW4gKHhnY2MkKGV4ZWV4dCkpOiBSZW1vdmUgY2hvb3NlLXRlbXAsIHBleGVjdXRlIGFuZAoJbWtzdGVtcC4gIEdldCB0aGVtIGZyb20gbGliaWJlcnR5LgoJKENPTExFQ1QyX09CSlMpOiBTaW1pbGFybHkgZm9yIGNob29zZS10ZW1wLCBjcGx1cy1kZW0gYW5kIG1rc3RlbXAuCgkoUFJPVE9fT0JKUyk6IFNpbWlsYXJseSBmb3IgY2hvb3NlLXRlbXAsIGdldG9wdCwgZ2V0b3B0MSBhbmQgcGV4ZWN1dGUuCgkoY3BsdXMtZGVtLm8sIHBleGVjdXRlLm8sIGNob29zZS10ZW1wLm8pOiBSZW1vdmUgYnVpbGQgcnVsZXMuCgkobWtzdGVtcC5vLCBnZXRvcHQxLm8sIGdldG9wdC5vKTogTGlrZXdpc2UuCgoJKiBwYS1nYXMuaCAoVEFSR0VUX0RFRkFVTFQpOiBVc2Ugc3ltYm9saWMgdmFsdWVzIHJhdGhlciB0aGFuIG51bWVyaWMKCXZhbHVlcy4KCSogcGEtaHB1eC5oIChMSU5LX1NQRUMpOiBMaWtld2lzZS4KCSogcGEtaHB1eDEwLmggKExJTktfU1BFQyk6IExpa2V3aXNlLgoJKiBwYS1ocHV4OS5oIChMSU5LX1NQRUMpOiBMaWtld2lzZS4KCSogcGEtb3NmLmggKExJTktfU1BFQyk6IExpa2V3aXNlLgoJKiBwYS1wcm8uaCAoVEFSR0VUX0RFRkFVTFQpOiBMaWtld2lzZS4KCSogcGExLmggKFRBUkdFVF9ERUZBVUxUKTogTGlrZXdpc2UuCgkqIHBhLmggKE1BU0tfKik6IE5ldyBkZWZpbmVzLgoJKFRBUkdFVF8qKTogVXNlIHN5bWJvbGljIHZhbHVlcyByYXRoZXIgdGhhbiBudW1lcmljIHZhbHVlcy4KCShUQVJHRVRfU1dJVENIRVMpOiBMaWtld2lzZS4KCShUQVJHRVRfREVGQVVMVCk6IExpa2V3aXNlLgoJKENQUF9TUEVDKTogTGlrZXdpc2UuCgpXZWQgRmViICAzIDIxOjA3OjM4IDE5OTkgIEJlcm5kIFNjaG1pZHQgIDxjcnV4QHBvb2wuaW5mb3JtYXRpay5yd3RoLWFhY2hlbi5kZT4KCgkqIHJlbG9hZDEuYyAocmVsb2FkX2NzZV9yZWdzXzEpOiBVbmRvIEphbiAxNiBwYXRjaC4KCSogcmVsb2FkLmMgKGZpbmRfcmV1c2FibGVfcmVsb2FkKTogTmV3IGZ1bmN0aW9uLCBicm9rZW4gb3V0IG9mCglwdXNoX3JlbG9hZC4gIEFkZCBjb2RlIHRvIHZlcmlmeSB0aGF0IG5vbmUgb2YgdGhlIGludm9sdmVkCglvdXRwdXRzIGFyZSBzdWJqZWN0IHRvIGVhcmx5Y2xvYmJlcnMuCgkocHVzaF9yZWxvYWQpOiBCcmVhayBvdXQgbmV3IGZ1bmN0aW9uIGZpbmRfcmV1c2FibGVfcmVsb2FkLgoJRGVsZXRlICJyZWdpc3RlciIga2V5d29yZCBmb3IgSU4sIE9VVCBhcmdzLgoKV2VkIEZlYiAgMyAxNTo1MTowNCAxOTk5ICBHYXZpbiBSb21pZy1Lb2NoICA8Z2F2aW5AY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy9taXBzL21pcHMuYyAodHJ1ZV9yZWdfb3JfMF9vcGVyYW5kKSA6IE5ldyBmdW5jdGlvbi4KCSogY29uZmlnL21pcHMvbWlwcy5oIChQUkVESUNBVEVfQ09ERVMpOiBBZGQgdHJ1ZV9yZWdfb3JfMF9vcGVyYW5kLgoJKiBjb25maWcvbWlwcy9taXBzLm1kIChkaXZfdHJhcCxkaXZfdHJhcF9ub3JtYWwsZGl2X3RyYXBfbWlwczE2KToKCVVzZSB0cnVlX3JlZ19vcl8wX29wZXJhbmQgZm9yIGRpdl90cmFwLgoKV2VkIEZlYiAgMyAyMDo0NDo1OSAxOTk5ICBKIm9ybiBSZW5uZWNrZSAgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogbG9vcC5oIChleHByZXNzX2Zyb20pOiBEZWNsYXJlLgoJKHN0cnVjdCBpbmR1Y3Rpb24pOiBSZXBsYWNlIGRlcml2ZWQgZmxhZyB3aXRoIGRlcml2ZWRfZnJvbSBwb2ludGVyLgoJKiBsb29wLmMgKHN0cmVuZ3RoX3JlZHVjZSwgcmVjb3JkX2dpdiwgcmVjb21iaW5lX2dpdnMpOiBMaWtld2lzZS4KCShleHByZXNzX2Zyb20pOiBObyBsb25nZXIgc3RhdGljLgoJKiB1bnJvbGwuYyAoZmluZF9zcGxpdHRhYmxlX2dpdnMpOiBSZXBsYWNlIGRlcml2ZWQgd2l0aCBkZXJpdmVkX2Zyb20uCglXaGVuIHByb2Nlc3NpbmcgYW4gYWRkcmVzcyBnaXYgd2l0aCB3aGljaCBhbm90aGVyIGdpdiBoYXMgYmVlbgoJY29tYmluZWQgdGhhdCBoYXMgYWxzbyBiZWVuIGRlcml2ZWQgZnJvbSBhIHRoaXJkIGdpdiwgaGFuZGxlIGxpa2UKCWhhdmluZyBjb21iaW5lZCB3aXRoIHRoZSB0aGlyZCBnaXYuCglTZXQgc3BsaXR0YWJsZV9yZWdzX3VwZGF0ZXMgYXBwcm9wcmlhdGVseSBmb3IgZGVyaXZlZCBnaXZzLgoKV2VkIEZlYiAgMyAxNToyNjo1OCAxOTk5ICBHYXZpbiBSb21pZy1Lb2NoICA8Z2F2aW5AY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy9taXBzL21pcHMubWQgKGRpdl90cmFwX21pcHMxNik6IFJlbW92ZSBub3AncyBhZnRlciBicmFuY2hlcy4KCldlZCBGZWIgIDMgMTE6NTY6MjMgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogcGEuYyAoaW5zbl9zZXRzX2FuZF9yZWZzX2FyZV9kZWxheWVkKTogTmV3IGZ1bmN0aW9uLgoJKiBwYS5oIChJTlNOX1NFVFNfQVJFX0RFTEFZRUQpOiBVc2UgaXQuCgkoSU5TTl9SRUZFUkVOQ0VTX0FSRV9ERUxBWUVEKTogTGlrZXdpc2UuCgpXZWQgRmViICAzIDA2OjI0OjQ5IDE5OTkgIFJpY2hhcmQgRWFybnNoYXcgIChyZWFybnNoYUBhcm0uY29tKQoKCSogY29uZmlnL2FybS90LWFybS1lbGYgKExJQkdDQzJfQ0ZMQUdTKTogRGVsZXRlLgoJKiBjb25maWcvYXJtL3QtbGludXggKExJQkdDQzJfQ0ZMQUdTKTogRGVsZXRlLgoJKFRBUkdFVF9MSUJHQ0MyX0NGTEFHUyk6IERlZmluZS4KCShMSUJHQ0MyX0RFQlVHX0NGTEFHUyk6IERlZmluZS4KCSogY29uZmlnL2FybS90LW5ldGJzZDogTGlrZXdpc2UuCgkqIGNvbmZpZy9hcm0vdC1zZW1pOiBMaWtld2lzZS4KCSogY29uZmlnL2FybS90LXNlbWlhb2Y6IExpa2V3aXNlLgoJKiBjb25maWcvYXJtL3QtcmlzY2l4OiBMaWtld2lzZS4KCldlZCBGZWIgIDMgMTA6NTk6MDcgMTk5OSAgQW5kcmVhcyBTY2h3YWIgIDxzY2h3YWJAaXNzYW4uY3MudW5pLWRvcnRtdW5kLmRlPgoKCSogY29uZmlnL202OGsvbTY4ay5jIChwcmludF9vcGVyYW5kX2FkZHJlc3MpOiBXaGVuIHByaW50aW5nIGEKCVNZTUJPTF9SRUYgdGhhdCBlbmRzIGluIGAuPGxldHRlcj4nIHB1dCBwYXJlbnRoZXNlcyBhcm91bmQgaXQuCgpUdWUgRmViICAyIDIzOjM4OjM1IDE5OTkgIERhdmlkIE8nQnJpZW4gIDxvYnJpZW5ARnJlZUJTRC5vcmc+CgoJKiBpMzg2L2ZyZWVic2QqLmggbm93IGFsbG93cyAnJCcgaW4gbGFiZWwgbmFtZXMgYW5kIGRvZXMgbm90IHVzZSB0aGUKCVBDQyBzdHJ1Y3QgcmV0dXJuIG1ldGhvZC4KClR1ZSBGZWIgIDIgMjI6Mzg6MjMgMTk5OSAgSmltIFdpbHNvbiAgPHdpbHNvbkBjeWdudXMuY29tPgoKCSogTWFrZWZpbGUuaW46IENoYW5nZSBhbGwgdXNlcyBvZiBBUiB0byBBUl9GT1JfVEFSR0VULiAgQ2hhbmdlIGFsbCB1c2VzCglvZiBIT1NUX0FSIHRvIEFSLiAgTGlrZXdpc2UgZm9yIEFSX0ZMQUdTLCBSQU5MSUIsIGFuZCBSQU5MSUJfVEVTVC4KCShSQU5MSUJfVEVTVCk6IFRlc3QgdG8gc2VlIGlmIHJhbmxpYiBleGlzdHMuICBPbmx5IHRlc3QgYWJzb2x1dGUgZmlsZQoJbmFtZXMgaWYgaG9zdCA9PSB0YXJnZXQuCgkoSE9TVF9BUiwgSE9TVF9BUl9GTEFHUywgSE9TVF9SQU5MSUIsIEhPU1RfUkFOTElCX1RFU1QpOiBEZWxldGUuCgkoQVJfRkxBR1NfRk9SX1RBUkdFVCk6IFJlbmFtZWQgZnJvbSBBUl9GT1JfVEFSR0VUX0ZMQUdTLgoJKEFSLCBBUl9GTEFHUywgT0xEQVIsIE9MREFSX0ZMQUdTLCBSQU5MSUIsIFJBTkxJQl9URVNUKTogRGVsZXRlIHJ1bGVzCglzZXR0aW5nIHRoZW0gdG8gKl9GT1JfVEFSR0VULgoJKiBjcm9zcy1tYWtlIChBUiwgQVJfRkxBR1MsIE9MREFSLCBPTERBUl9GTEFHUywgUkFOTElCLCBSQU5MSUJfVEVTVCk6CglEZWxldGUuCgpUdWUgRmViICAyIDIyOjM4OjE5IDE5OTkgIFRoZW9kb3JlIFBhcGFkb3BvdWxvICA8VGhlb2RvcmUuUGFwYWRvcG91bG9Ac29waGlhLmlucmlhLmZyPgoKCSogdG9wbGV2LmggKHJlYWRfaW50ZWdyYWxfcGFyYW1ldGVyKTogRGVjbGFyZS4KCSogdG9wbGV2LmMgKHJlYWRfaW50ZWdyYWxfcGFyYW1ldGVyKTogTmV3IGZ1bmN0aW9uLgoKRnJpIEphbiAyOSAyMTowMDo1NiAxOTk5ICBCb2IgTWFuc29uICA8bWFuc29uQGNoYXJtZWQuY3lnbnVzLmNvbT4KCgkqIHJlc291cmNlLmMsIHJlc291cmNlLmg6IE5ldyBmaWxlcy4KCSogTWFrZWZpbGUuaW4gKE9CSlMpOiBBZGQgaXQuCgoJKiBoYWlmYS1zY2hlZC5jIChyZWdub191c2VfaW4pOiBNb3ZlZCB0byBydGxhbmFsLmMuCgkoc3BsaXRfYmxvY2tfaW5zbnMpOiBNb3ZlZCB0byByZWNvZy5jLgoJKHVwZGF0ZV9mbG93X2luZm8pOiBNYWtlIHB1YmxpYy4KCSogcnRsLmg6IERlY2xhcmUgdGhlbS4KCgkqIHJlb3JnLmM6IE1vdmVkIHRoZSBmdW5jdGlvbnMgZGVhbGluZyB3aXRoIGNvbXB1dGluZyByZXNvdXJjZQoJdXNhZ2UgdG8gcmVzb3VyY2UuYy4KCgkqIHNjaGVkLmMgKHJlZ25vX3VzZV9pbik6IE1vdmVkIHRvIHJ0bGFuYWwuYy4KCSh1cGRhdGVfZmxvd19pbmZvKTogTWFrZSBwdWJsaWMuCgkoc2NoZWR1bGVfaW5zbnMpOiBVc2Ugc3BsaXRfYmxvY2tfaW5zbnMuCgoJKiByZWNvZy5jIChzcGxpdF9ibG9ja19pbnNucyk6IE5ldyBmdW5jdGlvbi4KClR1ZSBGZWIgIDIgMjI6MDM6MjYgMTk5OSAgRGF2aWQgRWRlbHNvaG4gIDxlZGVsc29obkBnbnUub3JnPgoKCSogcnM2MDAwL2xpbnV4LmggKExJTktfU1RBUlRfREVGQVVMVF9TUEVDKTogRGVsZXRlLCB1bnVzZWQuCgkoTElOS19PU19ERUZBVUxUX1NQRUMpOiBEZWxldGUsIHVudXNlZC4KClR1ZSBGZWIgIDIgMjA6Mjk6MzQgMTk5OSAgQ2F0aGVyaW5lIE1vb3JlICA8Y2xtQGN5Z251cy5jb20+CgoJKiBjb25maWd1cmUuaW4gKGFybS0qLW9hYmkpOiBTdXBwb3J0LgoJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCgkqIGNvbmZpZy9hcm0vdW5rbm93bi1lbGYtb2FiaS5oOiBOZXcgZmlsZS4KClR1ZSBGZWIgIDIgMTk6NDM6NTkgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogaTM4Ni5tZCAoYXNobHNpMyk6IFR1cm4gaW50byBhIGRlZmluZV9leHBhbmQgYW4gYW5vbnltb3VzIHBhdHRlcm4uCglNYWtlIHRoZSBhbm9ueW1vdXMgcGF0dGVybiBtYXRjaCB3aGVuICEgb3B0aW1pemVfc2l6ZS4KCShhc2hsc2kzIHNpemUgb3B0aW1pemVyKTogTmV3IHBhdHRlcm4uCgoJKiBpbnRsL01ha2VmaWxlLmluICh1bmluc3RhbGwpOiBBZGQgbWlzc2luZyAiOyBcIi4KClR1ZSBGZWIgIDIgMTg6MjE6MjMgMTk5OSAgU3RhbiBDb3ggIDxzY294QGN5Z251cy5jb20+CgoJKiBzcGFyYy5oIChUQVJHRVRfQ1BVX3NwYXJjODZ4KTogQWRkZWQuIFRBUkdFVF9DUFVfc3BhcmNsaXRlODZ4CglzeW5vbnltLgoKVHVlIEZlYiAgMiAyMDoyNDoxMSAxOTk5ICBKIm9ybiBSZW5uZWNrZSAgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogbG9vcC5jIChsb29wX29wdGltaXplKTogRml4IHZhbHVlIG1heF91aWRfZm9yX2xvb3AgaXMgcmVzZXQKCXRvIGFmdGVyIGZpbmRfYW5kX3ZlcmlmeV9sb29wcyBjYWxsLgoKVHVlIEZlYiAgMiAxOTo0ODoyOSAxOTk5ICBKIm9ybiBSZW5uZWNrZSAgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogKHJlY29tYmluZV9naXZzKTogRG9uJ3QgdXNlIGEgZ2l2IHRoYXQncyBsaWtlbHkgdG8gYmUgZGVhZCB0bwoJZGVyaXZlIG90aGVycy4KCgkqIGxvb3AuYyAocmVjb21iaW5lX2dpdnMpOiBGaXggdGVzdCBmb3IgbGlmZXRpbWUgb3ZlcmxhcHMgLyBsb29wCgl3cmFwIGFyb3VuZCB3aGVuIGRlcml2aW5nIGdpdnMuCgpNb24gRmViICAxIDIwOjAwOjQwIDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiByZWNvZy5jIChjaGVja19hc21fb3BlcmFuZHMpOiBUcmVhdCBpbmRldGVybWluYXRlIG9wZXJhbmQgb2sKCXJlc3VsdHMgYXMgc3VjY2Vzcy4gIFRyeSBoYXJkZXIgdG8gcmVzb2x2ZSBhIG1hdGNoaW5nIGNvbnN0cmFpbnQuCgkqIHN0bXQuYyAoZXhwYW5kX2FzbV9vcGVyYW5kcyk6IFJlY29nbml6ZSB3aGVuIGFuIG91dHB1dCBvcGVyYW5kJ3MKCWNvbnN0cmFpbnQgZG9lcyBub3QgYWxsb3cgbWVtb3J5LiAgVHJlYXQgaW5kZXRlcm1pbmF0ZSBvcGVyYW5kIG9rCglyZXN1bHRzIGFzIGZhaWx1cmUuICBUcnkgaGFyZGVyIHRvIHJlc29sdmUgYSBtYXRjaGluZyBjb25zdHJhaW50LgoKTW9uIEZlYiAgMSAxNTowMDowMiAxOTk5ICBLZW4gUmFlYnVybiAgPHJhZWJ1cm5AY3lnbnVzLmNvbT4KCglVc2UgdmFycmF5cyBmb3IgY29uc3RhbnQtZXF1aXZhbGVuY2UgZGF0YToKCgkqIHZhcnJheS5oIChzdHJ1Y3QgY29uc3RfZXF1aXZfZGF0YSk6IE5ldyB0eXBlLgoJKHVuaW9uIHZhcnJheV9kYXRhX3RhZyk6IE5ldyBlbGVtZW50IGNvbnN0X2VxdWl2LgoJKFZBUlJBWV9DT05TVF9FUVVJVl9JTklULCBWQVJSQVlfQ09OU1RfRVFVSVYpOiBOZXcgbWFjcm9zLgoJKFZBUlJBWV9TSVpFKTogTmV3IG1hY3JvLCByZXR1cm5zIG51bWJlciBvZiBlbGVtZW50cy4KCSogaW50ZWdyYXRlLmg6IEluY2x1ZGUgdmFycmF5LmguCgkoc3RydWN0IGlubGluZV9yZW1hcCk6IFJlcGxhY2UgY29uc3RfZXF1aXZfbWFwLCBjb25zdF9hZ2VfbWFwIGFuZAoJY29uc3RfZXF1aXZfbWFwX3NpemUgd2l0aCBhIGNvbnN0X2VxdWl2X3ZhcnJheSBlbGVtZW50LgoJKE1BWUJFX0VYVEVORF9DT05TVF9FUVVJVl9WQVJSQVkpOiBOZXcgbWFjcm87IGdyb3dzIHZhcnJheSBpZgoJbmVlZGVkLgoJKFNFVF9DT05TVF9FUVVJVl9EQVRBKTogTmV3IG1hY3JvOyBzZXRzIHJ0eCBhbmQgYWdlIGZpZWxkcwoJc2ltdWx0YW5lb3VzbHksIGdyb3dpbmcgdGhlIHZhcnJheSBpZiBuZWVkZWQuCgoJKiBpbnRlZ3JhdGUuYyAoZ2xvYmFsX2NvbnN0X2VxdWl2X21hcCwKCWdsb2JhbF9jb25zdF9lcXVpdl9tYXBfc2l6ZSk6IERlbGV0ZWQsIHJlcGxhY2VkIGJ5Li4uLgoJKGdsb2JhbF9jb25zdF9lcXVpdl92YXJyYXkpOiBOZXcgdmFyaWFibGUuCgkoZXhwYW5kX2lubGluZV9mdW5jdGlvbik6IFJlZmVyZW5jZXMgY2hhbmdlZC4KCSogaW50ZWdyYXRlLmg6IFVwZGF0ZSBkZWNsYXJhdGlvbnMuCgoJKiBpbnRlZ3JhdGUuYyAocHJvY2Vzc19yZWdfcGFybSwgZXhwYW5kX2lubGluZV9mdW5jdGlvbiwKCWNvcHlfcnR4X2FuZF9zdWJzdGl0dXRlLCB0cnlfY29uc3RhbnRzLCBzdWJzdF9jb25zdGFudHMsCgltYXJrX3N0b3Jlcyk6IFVzZSB2YXJyYXkgYWxsb2NhdGlvbiBhbmQgYWNjZXNzb3IgbWFjcm9zLCBuZXcKCWludGVncmF0ZS5oIG1hY3JvcywgYW5kIGdsb2JhbF9jb25zdF9lcXVpdl92YXJyYXkuICBEb24ndAoJY29uZGl0aW9uYWxpemUgbm9uLU5VTEwgc3RvcmVzIG9uIGFycmF5IHNpemU7IGluc3RlYWQsIGV4cGFuZCB0aGUKCWFycmF5IGFzIG5lZWRlZC4KCSogdW5yb2xsLmMgKHVucm9sbF9sb29wKTogTGlrZXdpc2UuCgoJKiB1bnJvbGwuYyAodW5yb2xsX2xvb3ApOiBJbml0aWFsaXplIGNvbnN0X2VxdWl2X3ZhcnJheSBlbGVtZW50IHRvCgl6ZXJvLiAgQWZ0ZXIgYWxsb2NhdGluZyB2YXJyYXksIGFsd2F5cyBleGl0IHRocm91Z2ggYm90dG9tIG9mCglmdW5jdGlvbiwgd2hlcmUgaXQgY2FuIGJlIGRlYWxsb2NhdGVkIGlmIG5lZWRlZC4gIERvbid0IGV4cGxpY2l0bHkKCXJlYWxsb2NhdGUgY29uc3RfZXF1aXZfbWFwIHN0b3JhZ2U7IGluc3RlYWQsIGp1c3QgZW5zdXJlIHRoZQoJdmFycmF5IGhhcyBiZWVuIGluaXRpYWxpemVkLCBhbmQgdXBkYXRlIHRoZSBnbG9iYWwgcmVmZXJlbmNlLgoKTW9uIEZlYiAgMSAwOTo0MDoyNSAxOTk5ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBzeXN0ZW0uaCAoaW5saW5lLCBjb25zdCk6IEhhbmRsZSB0aGVzZSBmb3Igc3RhZ2UyIChhbmQgbGF0ZXIpIGdjYy4KCgkqIGR3YXJmMm91dC5jIChpbmxpbmUpOiBEb24ndCBkZWZpbmUuCgoJKiBkd2FyZm91dC5jIChpbmxpbmUpOiBMaWtld2lzZS4KClN1biBKYW4gMzEgMjI6MDQ6MzcgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGxvb3AuYyAocmVjb21iaW5lX2dpdnMpOiBEdW1wIHJlY29tYmluYXRpb24gYW5kIGRlcml2YXRpb24gZGF0YS4KClN1biBKYW4gMzEgMjA6MzQ6MjkgMTk5OSAgWmFjayBXZWluYmVyZyAgPHphY2tAcmFiaS5jb2x1bWJpYS5lZHU+CgoJKiBmbGFncy5oOiBEZWNsYXJlIGZsYWdfbm9faWRlbnQuCgkqIHRvcGxldi5jOiBEZWZpbmUgZmxhZ19ub19pZGVudC4gIFByb2Nlc3MgLWYobm8tKWlkZW50IGhlcmUuCgkqIGMtdHJlZS5oOiBEb24ndCBkZWNsYXJlIGZsYWdfbm9faWRlbnQuCgkqIGMtZGVjbC5jOiBEb24ndCBkZWZpbmUgZmxhZ19ub19pZGVudC4gIERvbid0IHByb2Nlc3MKCSAgLWYobm8tKWlkZW50IHN3aXRjaGVzIGhlcmUuCgoJKiBjb25maWcvZWxmb3MuaCAoQVNNX0ZJTEVfRU5EKTogT3V0cHV0IGZpbmFsIC5pZGVudCBkaXJlY3RpdmUKCSAgb25seSBpZiAhZmxhZ19ub19pZGVudC4KCSogY29uZmlnL3B0eDQuaDogTGlrZXdpc2UuCgkqIGNvbmZpZy9zdnI0Lmg6IExpa2V3aXNlLgoJKiBjb25maWcvYWxwaGEvZWxmLmg6IExpa2V3aXNlLgoJKiBjb25maWcvYXJtL2xpbnV4LWVsZi5oOiBMaWtld2lzZS4KCSogY29uZmlnL2kzODYvc2NvNS5oOiBMaWtld2lzZS4KCSogY29uZmlnL2k4NjAvZngyODAwLmg6IExpa2V3aXNlLgoJKiBjb25maWcvbWlwcy9nbnUuaDogTGlrZXdpc2UuCgkqIGNvbmZpZy9pMzg2L29zZnJvc2UuaDogTGlrZXdpc2UuCgoJKiBnY2MuYyAoQyBzcGVjcyk6IE1hcCAtUW4gdG8gLWZuby1pZGVudC4KCSogb2JqYy9sYW5nLXNwZWNzLmg6IExpa2V3aXNlLgoKTW9uIEZlYiAgMSAxMDo1MjowNyAxOTk5ICBNaWNoYWVsIEhheWVzICA8bS5oYXllc0BlbGVjLmNhbnRlcmJ1cnkuYWMubno+CgoJKiBjb25maWd1cmUuaW46IERvbid0IHJlbW92ZSBsb29wLm8gYW5kIHVucm9sbC5vIHdoZW4KCWVuYWJsZS1oYWlmYSBpcyBzZWxlY3RlZC4KCSogY29uZmlndXJlOiBSZWJ1aWx0LgoKU3VuIEphbiAzMSAxMzoyMjowMiAxOTk5ICBKb2huIFdlaGxlICAoam9obkBmZWl0aC5jb20pCgoJKiBpMzg2Lm1kIChtb3ZzaWNjLCBtb3ZoaWNjLCBtb3ZzZmNjLCBtb3ZkZmNjLAoJbW92eGZjYywgbW92ZGljYyk6IERlbGV0ZSB1bmNvbnN0cmFpbmVkIGFsdGVybmF0aXZlcy4KCSogaTM4Ni5jIChvdXRwdXRfZnBfY29uZGl0aW9uYWxfbW92ZSwKCW91dHB1dF9pbnRfY29uZGl0aW9uYWxfbW92ZSk6IERlbGV0ZSB1bnVzZWQgY2FzZS4KClN1biBKYW4gMzEgMDE6MTU6MDQgMTk5OSAgSmVmZiBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHZlcnNpb24uYzogQnVtcCBmb3Igc25hcHNob3QuCgpTdW4gSmFuIDMxIDAwOjUyOjM3IDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBhbHBoYS5tZCAobW92IHBhdHRlcm5zKTogRW1pdCB0aGUgYXNzZW1ibGVyIGFsaWFzZXMgbW92IGFuZCBmbW92CglpbnN0ZWFkIG9mIGJpcyBhbmQgY3B5cy4gIENvbWJpbmUgYWx0ZXJuYXRpdmVzIHdoZXJlIHBvc3NpYmxlLgoKU2F0IEphbiAzMCAyMzoxNDoxMyAxOTk5ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBnY292LmMgKGZub3RpY2UpOiBBZGQgbWlzc2luZyBGSUxFKiBwYXJhbWV0ZXIuCgkoZnVuY3Rpb25fc3VtbWFyeSk6IEZpeCBmb3JtYXQgc3BlY2lmaWVycyBpbiBjYWxscyB0byBgZm5vdGljZScuCgkob3V0cHV0X2RhdGEpOiBMaWtld2lzZS4KCgkqIHRvcGxldi5jIChmbm90aWNlKTogQ29uc3RpZnkgY2hhciogcGFyYW1ldGVyLgoKCSogdG9wbGV2LmggKGZub3RpY2UpOiBBZGQgcHJvdG90eXBlLgoJV3JhcCBwcm90b3R5cGUgd2l0aCBCVUZTSVogdG8gcHJvdGVjdCBGSUxFKiB1c2FnZS4KClN1biBKYW4gMzEgMTU6MzM6MDkgMTk5OSAgTWljaGFlbCBIYXllcyAgPG0uaGF5ZXNAZWxlYy5jYW50ZXJidXJ5LmFjLm56PgoKCSogY29uZmlnL2M0eC9jNHguaCAoUlRYX0NPU1RTKTogRXhwbGljaXRseSBkZWZpbmUgYzR4IGNvc3RzLgoKU2F0IEphbiAzMCAwODoyNzoyMyAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBjb21iaW5lLmMgKGRpc3RyaWJ1dGVfbm90ZXMpOiBIYW5kbGUgUkVHX0VIX1JFR0lPTiBub3Rlcy4KCgkqIGFsaWFzLmMgKGZpeGVkX3NjYWxhcl9hbmRfdmFyeWluZ19zdHJ1Y3RfcCk6IEFkZCAic3RhdGljIiB0bwoJZnVuY3Rpb24gZGVmaW5pdGlvbi4KCShhbGlhc2VzX2V2ZXJ5dGhpbmdfcCwgd3JpdGVfZGVwZW5kZW5jZV9wKTpMaWtld2lzZS4KCgkqIGluc3RhbGwudGV4aTogRml4IG1lcmdlIGxvc3NhZ2VzLgoKCSogY2NjcC5jIChtYWluKTogT25seSBjYWxsIHNldGxvY2FsZSAoTENfTUVTU0FHRVMsIC4uLikgaWYgTENfTUVTU0FHRVMKCWlzIGRlZmluZWQuCgkqIGNvbGxlY3QyLmMgKG1haW4pOiBMaWtld2lzZS4KCSogY3BwbWFpbi5jIChtYWluKTogTGlrZXdpc2UuCgkqIGdjYy5jIChtYWluKTogTGlrZXdpc2UuCgkqIGdjb3YuYyAobWFpbik6IExpa2V3aXNlLgoJKiBwcm90b2l6ZS5jIChtYWluKTogTGlrZXdpc2UuCgkqIHRvcGxldi5jIChtYWluKTogTGlrZXdpc2UuCgoJKiBwYS5tZCAocGFyYWxsZWwgc2hpZnQgYW5kIHNoaWZ0YWRkKTogTWFyayBvdXRwdXQgb2Ygc2hpZnQgYXMgYW4KCWVhcmx5Y2xvYmJlci4KCgkqIGxvb3AuYzogRGlzYWJsZSByZWNlbnQgbG9vcCBjaGFuZ2VzLiAgVGVtcG9yYXJ5IGFzIEpvZXJuCgljb250aW51ZXMgdG8gZml4IHByb2JsZW1zLgoKU2F0IEphbiAzMCAwMzoyNDozNyAxOTk5ICBKIm9ybiBSZW5uZWNrZSAgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogbG9vcC5jIChzdHJlbmd0aF9yZWR1Y2UpOiBTaXplIHJlZ19tYXAgYWNjb3JkaW5nIHRvIHJlZ19pdl90eXBlLgoKRnJpIEphbiAyOSAxODoyNjowNyAxOTk5ICBEYXZlIEJyb2xsZXkgIDxicm9sbGV5QGN5Z251cy5jb20+CgoJKiBlbWl0LXJ0bC5jIChyZW1vdmVfaW5zbik6IE5ldyBmdW5jdGlvbi4KCSogcnRsLmggKHJlbW92ZV9pbnNuKTogQWRkIHByb3RvdHlwZS4KCSogZnVuY3Rpb24uYyAocmVwb3NpdGlvbl9wcm9sb2d1ZV9hbmRfZXBpbG9ndWVfbm90ZXMpOiBDYWxsIHJlbW92ZV9pbnNuLgoKRnJpIEphbiAyOSAyMjozNDo0MSAxOTk5ICBKIm9ybiBSZW5uZWNrZSAgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogbG9vcC5jIChyZWNvbWJpbmVfZ2l2cyk6IERvbid0IHRyeSB0byBkZXJpdmUgZ2l2cyB0aGF0IGhhdmUgY29tYmluZWQuCgpGcmkgSmFuIDI5IDE1OjAwOjM5IDE5OTkgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIHRvcGxldi5jIChub3RpY2UsIGZub3RpY2UpOiBDaGVjayBBTlNJX1BST1RPVFlQRVMsIG5vdCBfX1NURENfXywKCXdoZW4gZGVjbGFyaW5nIGFyZ3VtZW50cyBhbmQgY2FsbGluZyB2YV9hcmcoKSB0byBpbml0aWFsaXplIHRoZW0uCgoJKiBjb2xsZWN0Mi5jIChub3RpY2UpOiBMaWtld2lzZS4KCgkqIGxvb3AuYyAoZmluZF9saWZlX2VuZCk6IFVzZSBQUk9UTygpIG1hY3JvIGluIHRoZSBwcm90b3R5cGUuCgpGcmkgSmFuIDI5IDE0OjM2OjExIDE5OTkgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGNvbGxlY3QyLmMgKGVycm9yKTogRml4IHR5cG8gaW4gZGVjbGFyYXRpb24uCgoJKiBjcHBlcnJvci5jIChjcHBfbWVzc2FnZSk6IExpa2V3aXNlLgoKCSogY3BwbGliLmMgKGNwcF93YXJuaW5nKTogTGlrZXdpc2UuCgoJKiBjcHBsaWIuaCAoY3BwX25vdGljZSk6IFVzZSBQVlBST1RPIG5vdCBWUFJPVE8sIGFsc28gYWRkCglBVFRSSUJVVEVfUFJJTlRGXzEuCgoJKiB0b3BsZXYuYyAoZXJyb3IpOiBGaXggdHlwbyBpbiBkZWNsYXJhdGlvbi4KCkZyaSBKYW4gMjkgMTU6NDQ6MTMgMTk5OSAgSiJvcm4gUmVubmVja2UgIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIGxvb3AuYyAoc3RyZW5ndGhfcmVkdWNlKTogRml4IEhBVkVfY2MwIGhhbmRsaW5nIHdoZW4gc2Nhbm5pbmcKCWZvcndhcmQgZnJvbSBjb250IGRvbWluYXRvci4KCkZyaSBKYW4gMjkgMDc6MTA6MjcgMTk5OSAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogY2NjcC5jIChlcHJpbnRfc3RyaW5nKTogQ29uc3RpZnkgYSBjaGFyKi4KCShub3RpY2UpOiBMaWtld2lzZS4gIFVzZSBQVlBST1RPIG5vdCBWUFJPVE8sIGFkZCBBVFRSSUJVVEVfUFJJTlRGXzEuCgkodm5vdGljZSk6IENvbnN0aWZ5IGEgY2hhciouCgkoZXJyb3IpOiBMaWtld2lzZS4gIFVzZSBQVlBST1RPIG5vdCBWUFJPVE8sIGFkZCBBVFRSSUJVVEVfUFJJTlRGXzEuCgkodmVycm9yKTogQ29uc3RpZnkgYSBjaGFyKi4KCSh3YXJuaW5nKTogTGlrZXdpc2UuICBVc2UgUFZQUk9UTyBub3QgVlBST1RPLCBhZGQgQVRUUklCVVRFX1BSSU5URl8xLgoJKHZ3YXJuaW5nKTogQ29uc3RpZnkgYSBjaGFyKi4KCShlcnJvcl93aXRoX2xpbmUpOiBMaWtld2lzZS4gIFVzZSBQVlBST1RPIG5vdCBWUFJPVE8sIGFkZAoJQVRUUklCVVRFX1BSSU5URl8yLgoJKHZlcnJvcl93aXRoX2xpbmUpOiBDb25zdGlmeSBhIGNoYXIqLgoJKHZ3YXJuaW5nX3dpdGhfbGluZSk6IExpa2V3aXNlLgoJKHdhcm5pbmdfd2l0aF9saW5lKTogTGlrZXdpc2UuICBVc2UgUFZQUk9UTyBub3QgVlBST1RPLCBhZGQKCUFUVFJJQlVURV9QUklOVEZfMi4KCShwZWR3YXJuKTogQ29uc3RpZnkgYSBjaGFyKi4gIFVzZSBQVlBST1RPIG5vdCBWUFJPVE8sIGFkZAoJQVRUUklCVVRFX1BSSU5URl8xLgoJKHBlZHdhcm5fd2l0aF9saW5lKTogTGlrZXdpc2Ugd2l0aCBBVFRSSUJVVEVfUFJJTlRGXzIuCgkocGVkd2Fybl93aXRoX2ZpbGVfYW5kX2xpbmUpOiBMaWtld2lzZSB3aXRoIEFUVFJJQlVURV9QUklOVEZfNC4KCUFsc28gY29ycmVjdCB0eXBvIGluIHBhcmFtZXRlciBuYW1lIGRlY2xhcmF0aW9uLgoJKG1ha2VfYXNzZXJ0aW9uKTogQ29uc3RpZnkgYSBjaGFyKi4KCShxdW90ZV9zdHJpbmdfZm9yX21ha2UpOiBMaWtld2lzZS4KCShkZXBzX291dHB1dCk6IExpa2V3aXNlLgoJKGZhdGFsKTogTGlrZXdpc2UuICBVc2UgUFZQUk9UTyBub3QgVlBST1RPLCBhZGQKCUFUVFJJQlVURV9QUklOVEZfMS4gIFVzZSBBVFRSSUJVVEVfTk9SRVRVUk4gbm90IGFuIGV4cGxpY2l0CgkiX19hdHRyaWJ1dGVfXyAoKG5vcmV0dXJuKSkiLgoJKGZhbmN5X2Fib3J0KTogTGlrZXdpc2UgZm9yIEFUVFJJQlVURV9OT1JFVFVSTi4KCShwZmF0YWxfd2l0aF9uYW1lKTogTGlrZXdpc2UuCgkocGlwZV9jbG9zZWQpOiBMaWtld2lzZS4KCShtZW1vcnlfZnVsbCk6IExpa2V3aXNlLgoKRnJpIEphbiAyOSAwMDoxNDo1NSAxOTk5ICBKIm9ybiBSZW5uZWNrZSAgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogbG9vcC5jIChzdHJlbmd0aF9yZWR1Y2UpOiBHcm93IHNldF9pbl9sb29wIC8gbl90aW1lc19zZXQgLwoJbWF5X25vdF9vcHRpbWl6ZSB0byBwcm9wZXIgc2l6ZSB3aGVuIGNvbnZlcnRpbmcgYml2IGluY3JlbWVudHMKCWludG8gZ2l2cy4KCUlmIG5lY2Vzc2FyeSwgcmVhbGxvY2F0ZSByZWdfaXZfdHlwZSAvIHJlZ19pdl9pbmZvIGJlZm9yZSBjYWxsaW5nCglyZWNvbWJpbmVfZ2l2cy4KClRodSBKYW4gMjggMjM6MjQ6MDggMTk5OSAgSiJvcm4gUmVubmVja2UgIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIGxvb3AuYyAocmVjb21iaW5lX2dpdnMpOiBOZXcgcGFyYW1ldGVyIHVucm9sbF9wLiAgSWYgc2V0LCBkb24ndAoJZ2VuZXJhdGUgY29tcGxleCBhZGRzLiAgQ2hhbmdlZCBjYWxsZXIuCglEb24ndCBnZW5lcmF0ZSBhZGRzIHRoYXQgY29zdCBtb3JlIHRoYW4gdGhlIG9yaWdpbmFsIG9uZS4KCShzdHJlbmd0aF9yZWR1Y2UpOiBXYXJuaW5nIGZpeGVzLgoKVGh1IEphbiAyOCAwOTo0MToxMSAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBjb25maWd1cmUuaW4gKGhwcGExLjAtaHAtaHB1eDEwKik6IFVzZSB0LXBhLgoJKiBjb25maWd1cmU6IFJlYnVpbHQuCgpXZWQgSmFuIDI3IDIzOjM5OjUzIDE5OTkgIEoib3JuIFJlbm5lY2tlICA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiBydGwuaCAoaW5zbl9maXJzdF9wLCBub19qdW1wc19iZXR3ZWVuX3ApOiBEZWNsYXJlLgoJKiBydGxhbmFsLmMgKGluc25fZmlyc3RfcCwgbm9fanVtcHNfYmV0d2Vlbl9wKTogTmV3IGZ1bmN0aW9uLgoJKiBsb29wLmggKHZhcnJheS5oKTogSW5jbHVkZS4KCShzdHJ1Y3QgaW5kdWN0aW9uKTogQ2hhbmdlIGNvbWJpbmVkX3dpdGggdG8gdW5zaWduZWQuCglOZXcgbWVtYmVycyBkZXJpdmVkLCBpeCBhbmQgbGFzdF91c2UuCgkocmVnX2l2X3R5cGUsIHJlZ19pdl9pbmZvKTogTm93IHZhcnJheV90eXBlLiAgQWxsIHJlZmVyZW5jZXMgY2hhbmdlZC4KCShSRUdfSVZfVFlQRSwgUkVHX0lWX0lORk8pOiBEZWZpbmUuCgkoZmlyc3RfaW5jcmVtZW50X2dpdiwgbGFzdF9pbmNyZW1lbnRfZ2l2KTogRGVjbGFyZS4KCSogbG9vcC5jIChsb29wX251bWJlcl9sb29wX2NvbnQpOiBOZXcgc3RhdGljIHZhcmlhYmxlLgoJKGxvb3BfbnVtYmVyX2NvbnRfZG9taW5hdG9yKTogTGlrZXdpc2UuCgkocmVnX2l2X3R5cGUsIHJlZ19pdl9pbmZvKTogTm93IHZhcnJheV90eXBlLgoJKGZpcnN0X2luY3JlbWVudF9naXYsIGxhc3RfaW5jcmVtZW50X2dpdik6IE5ldyB2YXJpYWJsZXMuCgkoY29tcHV0ZV9sdWlkcywgdmVyaWZ5X2RvbWluYXRvciwgZmluZF9saWZlX2VuZCk6IE5ldyBmdW5jdGlvbnMuCgkoY21wX3JlY29tYmluZV9naXZzX3N0YXRzLCByZWNvbWJpbmVfZ2l2cyk6IExpa2V3aXNlLgoJKGxvb3Bfb3B0aW1pemUpOiBBbGxvY2F0ZSBsb29wX251bWJlcl9sb29wX2NvbnQgYW5kCglsb29wX251bWJlcl9jb250X2RvbWluYXRvci4gIFVzZSBjb21wdXRlX2x1aWRzLgoJKGZpbmRfYW5kX3ZlcmlmeV9sb29wcyk6IEluaXRpYWxpemUgbG9vcF9udW1iZXJfbG9vcF9jb250IGFuZAoJbG9vcF9udW1iZXJfY29udF9kb21pbmF0b3IuCgkoc3RyZW5ndGhfcmVkdWNlKTogVHJ5IHRvIGZpbmQgYml2cyB0aGF0IGNhbiBiZSBleHByZXNzZWQgYXMgZ2l2cwoJb2YgYW5vdGhlciBiaXYsIGFuZCB0byBjb252ZXJ0IGJpdiBpbmNyZW1lbnRzIGludG8gZ2l2cy4KCUNhbGwgcmVjb21iaW5lX2dpdnMuICBIYW5kbGUgZGVyaXZlZCBnaXZzLgoJKHJlY29yZF9iaXYpOiBOZXcgYXJndW1lbnQgbG9jYXRpb24uICBBbGwgY2FsbGVycyBjaGFuZ2VkLgoJKHJlY29yZF9naXYpOiBJbml0aWFsaXplIGRlcml2ZWQgYW5kIGxhc3RfdXNlIGZpZWxkcy4KCShiYXNpY19pbmR1Y3Rpb25fdmFyKTogTmV3IGFyZ3VtZW50IGxvY2F0aW9uLiAgQWxsIGNhbGxlcnMgY2hhbmdlZC4KCShjb21iaW5lX2dpdnMpOiBEb24ndCBjb21iaW5lIGEgREVTVF9SRUcgZ2l2IHdpdGggYSBERVNUX0FERFIgZ2l2LgoJSW5jcmVtZW50IGNvbWJpbmVkX3dpdGggaW5zdGVhZCBvZiBzZXR0aW5nIHRvIDEuCgkqIHVucm9sbC5jIChkZXJpdmVkX3JlZ3MpOiBOZXcgc3RhdGljIHZhcmlhYmxlLgoJKHVucm9sbF9sb29wKTogSW5pdGlhbGl6ZSBpdC4KCUFsbG9jYXRlIGxvY2FsX3JlZ25vIGFjY29yZGluZyB0byBtYXhfcmVnX251bS4KCShjb3B5X2xvb3BfYm9keSk6IENvcGUgd2l0aCBkZXJpdmVkIGdpdnMuCgkoZmluZF9zcGxpdHRhYmxlX2dpdnMpOiBDaGVjayBmb3IgR2l2cyBtYWRlIGZyb20gYml2IGluY3JlbWVudHMuCglTZXQgZGVyaXZlZF9yZWdzIGZvciBnaXZzLgoJKiBNYWtlZmlsZS5pbiAoc3RtdC5vLCBsb29wLm8sIHVucm9sbC5vKTogRGVwZW5kIG9uIGxvb3AuaCAuCgpXZWQgSmFuIDI3IDE5OjMxOjM2IDE5OTkgIEoib3JuIFJlbm5lY2tlICA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiBmdW5jdGlvbi5jIChwdXJnZV9hZGRyZXNzb2ZfMSk6IEhhbmRsZSBjYXNlIHdoZW4gYSByZWdpc3RlcgoJaGFzIGJlZW4gdXNlZCBpbiBhIHdpZGVyIG1vZGUuCgoxOTk5LTAxLTI3ICBCcnVjZSBLb3JiICA8YXV0b2dlbkBsaW51eGJveC5jb20+CgoJKiBmaXhpbmMvZml4aW5jbC5jLCBmaXhpbmMvc2VydmVyLltjaF06CglSZW1vdmVkIHRoZSBsYXN0IG9mIHRoZSBjYXBpdGFsaXplZCB2YXJpYWJsZSBhbmQgcHJvYyBuYW1lcy4KCgkqIGZpeGluYy9zZXJ2ZXIuYzogUmVtb3ZlZCB0aGUgcHJvY2VzcyBvcGVuIGNvZGUuCgkqIGZpeGluYy9wcm9jb3Blbi5jOiBOZXcgZmlsZSBjb250YWluaW5nIHRoZSBwcm9jIG9wZW4gY29kZS4KCSogZml4aW5jL2luY2xoYWNrLnRwbDogQWRkZWQgY29kZSB0byBieXBhc3MgYSByZWFkYWJpbGl0eSB0ZXN0Cgl3aGVuIGEgZmlsZSBpcyBub3QgcHJlc2VudC4gIEEgcHJvYmxlbSBvbiBzb21lIHN5c3RlbXMuCgkqIGZpeGluYy9pbmNsaGFjay5zaCwgZml4aW5jL2ZpeGluY2wuc2g6IFJlZ2VuZXJhdGVkLgoKV2VkIEphbiAyNyAxMTo1ODoxOCAxOTk5ICBEYXZlIEJyb2xsZXkgIDxicm9sbGV5QGN5Z251cy5jb20+CgoJKiBjcHBsaWIuaCAoY3BwX25vdGljZSk6IEFkZCBwcm90b3R5cGUuCgpXZWQgSmFuIDI3IDAyOjIwOjQ4IDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIE1lcmdlIGdjYzIgc25hcHNob3QgMTk5ODA5MjkuCgoJKiBjY2NwLmMgKFBSSU5URl9QUk9UTyk6IFJlbW92ZS4KCShQUklOVEZfUFJPVE9fezEsMiwzLDR9OiBMaWtld2lzZS4KCSogY2V4cC55OiBMaWtld2lzZS4KCSogc3lzdGVtLmg6IEFkZCBQUklOVEZfUFJPVE8gYW5kIFBSSU5URl9QUk9UT197MSwyLDMsNH0uCgoJKiBmaXgtaGVhZGVyLmMgKGNwcF9maWxlX2xpbl9mb3JfbWVzc2FnZSk6IERlbGV0ZS4gIEluIGxpYmNwcC4KCShjcHBfcHJpbnRfY29udGFpbmluZ19maWxlcywgdl9jcHBfbWVzc2FnZSwgY3BwX21lc3NhZ2UpOiBMaWtld2lzZS4KCShjcHBfZmF0YWwsIGNwcC1QZmF0YWxfd2l0aF9uYW1lKTogTGlrZXdpc2UuCgoJKiBnZW4tcHJvdG9zLmMgKGhhc2hmKTogRGVsZXRlIGluIGNwcGhhc2guby4KCSogZ2VuLXByb3Rvcy5jIChoYXNoZik6IERlbGV0ZSBpbiBjcHBoYXNoLm8uCgoJKiBleHByLmM6IERvIG5vdCBtZXJnZSBTQVZFX1NUQUNLQVJFQV9NT0RFIGNoYW5nZXMuCgkqIGV4cG1lZC5jOiBMaWtld2lzZS4KCSogcnM2MDAwLm1kOiBMaWtld2lzZS4KCgkqIHJzNjAwMC5jLCByczYwMDAubWQ6IERvIG5vdCBtZXJnZSBmb3JtYXR0aW5nIGNoYW5nZXMgeWV0LgoKV2VkIEphbiAyNyAwMToxMzo0MiAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogcnM2MDAwLmMgKGlucHV0X29wZXJhbmQpOiBEb24ndCBleHBlY3QgQ09OU1QgYXJvdW5kIENPTlNUQU5UX1BfUlRYLgoJKiByczYwMDAubWQgKG1vdnNpLCBtb3ZkaSk6IExpa2V3aXNlLgoKVHVlIEphbiAyNiAxMzozMTozOCAxOTk5ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CgoJKiBmdW5jdGlvbi5jIChleHBhbmRfZnVuY3Rpb25fZW5kKTogUGFzcyBhcmdfcG9pbnRlcl9zYXZlX2FyZWEgdG8KCXZhbGlkaXplX21lbSBiZWZvcmUgdXNpbmcgaXQuICBFbWl0IGNvZGUgaW50byBhIHNlcXVlbmNlLgoKVHVlIEphbiAyNiAxMzo0MTozOCAxOTk5ICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQGdudS5vcmc+CgoJKiByczYwMDAubWQgKGRveiArIHNldCBjciBhbmQgb3IgKyBzZXQgY3IgcGF0dGVybnMpOiBBZGQgbWlzc2luZwoJJyMnIHRvIHNwbGl0IHBhdHRlcm5zLiAgQ29ycmVjdCBpbmRlbnRhdGlvbiBvZiBzb21lIG5ldyBwYXR0ZXJucy4KCjE5OTktMDEtMjYgIFphY2sgV2VpbmJlcmcgIDx6YWNrQG1pZG5pdGUuZWMucmhuby5jb2x1bWJpYS5lZHU+CgoJKiBjcHBmaWxlcy5jIChzYWZlX3JlYWQpOiBEZWxldGVkLgoJKHJlYWRfYW5kX3ByZXNjYW4pOiBOZXcgZnVuY3Rpb24sIHJlcGxhY2VzIHNhZmVfcmVhZCwgY29udmVydHMKCWFuZC9vciB3YXJucyBhYm91dCB0cmlncmFwaHMsIHNpbGVudGx5IGNvbnZlcnRzIG9kZCBsaW5lCgl0ZXJtaW5hdG9ycyAoXHIsIFxuXHIsIFxyXG4pLiAgV2FybnMgYWJvdXQgbm8gbmV3bGluZSBhdCBFT0YuCgkoZmluY2x1ZGUpOiBVc2UgcmVhZF9hbmRfcHJlc2NhbjsgdHVybiBvZmYgbm9uYmxvY2tpbmcgbW9kZSBvbgoJdGhlIGlucHV0IGRlc2NyaXB0b3I7IHJlbW92ZSBmaWxlLXNpemUtZXhhbWluYXRpb24gYW5kCgluby1uZXdsaW5lLWF0LUVPRiBndW5rIHdoaWNoIGlzCWxvbmdlciBuZWNlc3Nhcnk7IGJlIG1vcmUKCWNhcmVmdWwgYWJvdXQgY2hlY2tpbmcgdGhhdCB3ZSd2ZSBiZWVuIGhhbmRlZCBhIGxlZ2l0aW1hdGUKCWZpbGUgdG8gcmVhZCAob25seSByZWFsIGZpbGVzLCBwaXBlcywgYW5kIHR0eXMgYXJlIGFjY2VwdGFibGUpLgoJKiBjcHBsaWIuaCAoY3BwX29wdGlvbnMpOiBSZW5hbWUgbm9fdHJpZ3JhcGhzIGZsYWcgdG8KCWB0cmlncmFwaHMnIGFuZCBpbnZlcnQgaXRzIHNlbnNlLgoJKHRyaWdyYXBoX3RhYmxlKTogRGVjbGFyZS4KCShjcHBfd2FybmluZ193aXRoX2xpbmUpOiBQcm90b3R5cGUuCgkqIGNwcGxpYi5jOiBSZW1vdmUgYWxsIHJlZmVyZW5jZXMgdG8gdHJpZ3JhcGhfcGNwLiBEZWZpbmUKCXRyaWdyYXBoX3RhYmxlOyBpbml0aWFsaXplIGl0IGluIGluaXRpYWxpemVfY2hhcl9zeW50YXguICBPcGVuCglmaWxlcyBpbiBub25ibG9ja2luZyBtb2RlLiAgcy9ub190cmlncmFwaHMvdHJpZ3JhcGhzLwoJdGhyb3VnaG91dCwgYW5kIGludmVydCBzZW5zZS4gIFB1dCBjcHBfd2FybmluZ193aXRoX2xpbmUgYmFjawoJaW4gYW5kIGV4cG9ydCBpdC4KClR1ZSBKYW4gMjYgMjM6MjE6NDkgMTk5OSAgTWljaGFlbCBIYXllcyAgPG0uaGF5ZXNAZWxlYy5jYW50ZXJidXJ5LmFjLm56PgoKCSogY29uZmlnL2M0eC9jNHguaCAoQ09VTlRFUl9SRUdTKTogTmV3IHJlZ2lzdGVyIGNsYXNzLgoJKiBjb25maWcvYzR4L2M0eC5tZCAoKnJwdGJfaW5pdCk6IENoYW5nZSBjb25zdHJhaW50cy4KCShycHRiX2VuZCk6IEVtaXQgYWx0ZXJuYXRlIGxvb3BpbmcgaW5zdHJ1Y3Rpb25zIGlmCglSQyByZWdpc3RlciBub3QgYWxsb2NhdGVkIGZvciBsb29wIGNvdW50ZXIuCgkoZGVjcmVtZW50X2FuZF9icmFuY2hfb25fY291bnQpOiBBbGxvdyBvdGhlciByZWdpc3RlcnMKCWZvciBsb29wIGNvdW50ZXIuCgoxOTk5LTAxLTI1ICBaYWNrIFdlaW5iZXJnICA8emFja0ByYWJpLmNvbHVtYmlhLmVkdT4KCgkqIGNwcGV4cC5jIChzdHJ1Y3QgYXJnbGlzdCk6IFJlbW92ZWQuCgkocGFyc2VfbnVtYmVyKTogVXNlIEhPU1RfV0lERV9JTlQgZm9yIHRoZSBhY2N1bXVsYXRvci4KCUFsbG93IHR3byBgbCcgc3VmZml4ZXMgdW5sZXNzIEM4OS4gIENsZWFuIHVwLiAgTWFrZSBzdGF0aWMuCgkocGFyc2VfY2hhcmNvbnN0KTogTmV3IGZ1bmN0aW9uIGJyb2tlbiBvdXQgb2YgY3BwX2xleC4KCUNvZGUgY2xlYW5lZCB1cCBkcmFzdGljYWxseS4gIERvbid0IHVzZSBhIHRva2VuX2J1ZmZlci4KCSh0b2tlbl9idWZmZXIpOiBSZW1vdmVkLgoJKGNwcF9sZXgpOiBEb24ndCBjYWxsIHBhcnNlX251bWJlciBvbiBhIGNvbnN0YW50IHN0cmluZy4KCVVzZSBwYXJzZV9jaGFyY29uc3QuCgkoY3BwX3BhcnNlX2V4cHIpOiBQcm9wZXJseSBoYW5kbGUgYW4gRVJST1Igb3AgcmV0dXJuZWQgYnkKCWNwcF9sZXguCgoxOTk5LTAxLTI1ICBaYWNrIFdlaW5iZXJnICA8emFja0ByYWJpLnBoeXMuY29sdW1iaWEuZWR1PgoKCSogY3BwbGliLmM6IERvbid0IGluY2x1ZGUgc2lnbmFsLmgsIHN5cy90aW1lcy5oLCBvcgoJc3lzL3Jlc291cmNlLmguIERvbid0IGRlY2xhcmUgbG9jYWx0aW1lLgoJKG1hY3JvZXhwYW5kKTogSGFuZGxlIHNwZWNpYWwgc3ltYm9scyBoZXJlLgoJKHB1c2hfbWFjcm9fZXhwYW5zaW9uKTogQ2hvcCBvZmYgdGhlIHRyYWlsaW5nICdAICcgaWYgcG9zc2libGUKCWhlcmUuCgkoY3BwX2dldF90b2tlbik6IERvbid0IGRvIGVpdGhlciBvZiB0aGUgYWJvdmUgdHdvIHRoaW5ncyBoZXJlLgoJTW92ZSBgc3RyaW5nJyBsYWJlbCBqdXN0IGFmdGVyIGNhc2UgJyInIHNvIHRoYXQgd2lkZSBzdHJpbmdzCglkb24ndCBjcmFzaCB0aGUgcHJlcHJvY2Vzc29yLgoKU3VuIEphbiAyNCAyMDoxMzo0NSAxOTk5ICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQGdudS5vcmc+CgoJKiByczYwMDAubWQgKGxlZnQgc2hpZnQgKyBzZXQgY3IgcGF0dGVybnMpOiBBZGQgbWlzc2luZyAnIycgdG8KCXNwbGl0IHBhdHRlcm5zLgoJKG1vdmUgcmVnaXN0ZXIgKyBzZXQgY3IgcGF0dGVybik6IExpa2V3aXNlLgoJKG1vdmRpLCAhVEFSR0VUX1BPV0VSUEM2NCBzcGxpdHRlcnMpOiBBZGQgYmFjayBpbiBKYW4uIDE1dGggcGF0Y2gsCglpbmFkdmVydGVudGx5IGRlbGV0ZWQuCgpTdW4gSmFuIDI0IDA4OjA3OjU5IDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHN0bXQuYyAoc3RtdF9sb29wX25lc3RfZW1wdHkpOiBOZXcgZnVuY3Rpb24uCgkqIHRyZWUuaCAoc3RtdF9sb29wX25lc3RfZW1wdHkpOiBEZWNsYXJlIGl0LgoJKiBydGwuZGVmIChDQUxMX1BMQUNFSE9MREVSKTogTmV3IHJ0eCBjb2RlLgoKU3VuIEphbiAyNCAyMToyNDo0MyAxOTk5ICBNaWNoYWVsIEhheWVzICA8bS5oYXllc0BlbGVjLmNhbnRlcmJ1cnkuYWMubno+CgoJKiBjb25maWcvYzR4L2M0eC5jIChjNHhfZW1pdF9tb3ZlX3NlcXVlbmNlLCBjNHhfZW5jb2RlX3NlY3Rpb25faW5mbyk6CglOZXcgZnVuY3Rpb25zLgoJKGM0eF9jaGVja19sZWdpdF9hZGRyKTogUmVtb3ZlIFVTRSBhbmQgUExVUywgYWxsb3cKCUxPX1NVTSwgYW5kIGRpc2FibGUgU1lNQk9MX1JFRiwgTEFCRUxfUkVGLCBhbmQgQ09OU1QgY2FzZXMuCgkoYzR4X2xlZ2l0aW1pemVfYWRkcmVzcyk6IFBlbmFsaXplIFNZTUJPTF9SRUYsIExBQkVMX1JFRiwgYW5kCglDT05TVCBjYXNlcy4gIEFkZCBMT19TVU0uCgkoYzR4X3ByaW50X29wZXJhbmQpOiBNb2RpZmllZCAnQycgYW5kICdSJyBjYXNlcyBmb3IgY2FsbHMuCglBZGRlZCAnVScgY2FzZS4gIFJlbW92ZSBkZXBlbmRlbmNlIG9uIFNZTUJPTF9SRUZfRkxBRy4KCShjNHhfcHJpbnRfb3BlcmFuZF9hZGRyZXNzKTogSGFuZGxlIExPX1NVTS4KCShjNHhfc2Nhbl9mb3JfbGRwKTogRGVsZXRlLiAgSG9vcmF5IQoJKGM0eF9wcm9jZXNzX2FmdGVyX3JlbG9hZCk6IFJlbW92ZSBjYWxsIHRvIGM0eF9zY2FuX2Zvcl9sZHAuCglTcGxpdCBhbGwgaW5zbnMuCgkoYzR4X2ltbWVkX2ludF9jb25zdGFudCk6IFJlbmFtZWQgZnJvbSBjNHhfaW50X2NvbnN0YW50LiAgQWxsIGNhbGxlcnMKCWNoYW5nZWQuCgkoYzR4X2ltbWVkX2Zsb2F0X2NvbnN0YW50KTogUmVuYW1lZCBmcm9tIGM0eF9mbG9hdF9jb25zdGFudC4gIEFsbAoJY2FsbGVycwljaGFuZ2VkLgoJKGM0eF9UX2NvbnN0cmFpbnQpOiBBbGxvdyBMT19TVU0sIGRpc2FibGUgU1lNQk9MX1JFRiwgTEFCRUxfUkVGLAoJYW5kIENPTlNULgoJKGM0eF9VX2NvbnN0cmFpbnQsIHN5bWJvbGljX29wZXJhbmQpOiBOZXcgZnVuY3Rpb25zLgoJKHNyY19vcGVyYW5kKTogQWxsb3cgJ0knIGNvbnN0YW50cyBpbiBISW1vZGUuICBBbGxvdyBMT19TVU0sCglkaXNhYmxlIFNZTUJPTF9SRUYsIExBQkVMX1JFRiwgYW5kIENPTlNULgoJKGxzcmNfb3BlcmFuZCwgdHNyY19vcGVyYW5kKTogQ2FsbCBzcmNfb3BlcmFuZCBpbnN0ZWFkIG9mCglnZW5lcmFsX29wZXJhbmQuCgkoYzR4X29wZXJhbmRfc3Vid29yZCk6IFVwZGF0ZSBjb21tZW50cy4KCgkqIGNvbmZpZy9jNHgvYzR4LmMgKFRBUkdFVF9MT0FEX0FERFJFU1MpOiBOZXcgbWFjcm8uCgkoTEVHSVRJTUFURV9DT05TVEFOVF9QKTogQWxsb3cgU1lNQk9MX1JFRiwgTEFCRUxfUkVGLCBDT05TVCwKCXBsdXMgSElHSCBhbmQgTE9fU1VNIGZvciB0aGUgQzQwLgoJKEVOQ09ERV9TRUNUSU9OX0lORk8pOiBEZWZpbmUgbWFjcm8uCgkoc3ltYm9saWNfb3BlcmFuZCwgYzR4X1VfY29uc3RyYWludCwgYzR4X2VtaXRfbW92ZV9zZXF1ZW5jZSk6IE5ldwoJcHJvdG90eXBlcy4KCShQUkVESUNBVEVfQ09ERVMpOiBBZGQgc3ltYm9saWNfb3BlcmFuZC4KCgkqIGNvbmZpZy9jNHgvYzR4Lm1kIChtb3ZxaSwgbW92Z3FmLCBtb3ZoaSwgbW92aGkpOiBDYWxsCgljNHhfZW1pdF9tb3ZlX3NlcXVlbmNlLgoJKGZsb2F0dW5zcWlxZjIsIGZpeHVuc190cnVuY3FmcWkyKTogUmV3b3JrIGVtaXR0ZWQgUlRMCgl0byBhdm9pZCBzeW1ib2wgcmVmZXJlbmNlcy4KCShhbGwgcGF0dGVybnMgd2l0aCBnIGNvbnN0cmFpbnQpOiBSZXBsYWNlICdnJyBjb25zdHJhaW50IHdpdGggJ3JJbScuCgkoc2V0X2hpZ2gpOiBSZW5hbWVkIGZyb20gc2V0X2hpZ2hfdXNlLgoJKHNldF9sb19zdW0pOiBSZW5hbWVkIGZyb20gc2V0X2lvcl9sb191c2UuCgkoYWxsIGNhbGwgcGF0dGVybnMpOiBNYWtlIE1FTSBleHBsaWNpdCBpbiBjYWxsIGFkZHJlc3Mgb3BlcmFuZHMuCglNb2RpZmllZCBvdXRwdXQgdGVtcGxhdGVzIHRvIHVzZSAnVScgbW9kaWZpZXIuCgpTdW4gSmFuIDI0IDAxOjE1OjA1IDE5OTkgIEplZmYgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiB2ZXJzaW9uLmM6IEJ1bXAgZm9yIHNuYXBzaG90LgoKU2F0IEphbiAyMyAyMjozNDo1NyAxOTk5ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBmaW5hbC5jIChiYl9zdHIpOiBRdWFsaWZ5IGEgY2hhciogd2l0aCB0aGUga2V5d29yZCBgY29uc3QnLgoJKGFkZF9iYl9zdHJpbmcsIGZpbmFsX3NjYW5faW5zbiwgb3V0cHV0X2FzbV9pbnNuKTogTGlrZXdpc2UuCgoJKiBmaXgtaGVhZGVyLmMgKHJlYWRfc2Nhbl9maWxlKTogTGlrZXdpc2UuCgoJKiBnZW5vdXRwdXQuYyAob3V0cHV0X2VwaWxvZ3VlLCBwcm9jZXNzX3RlbXBsYXRlKTogTGlrZXdpc2UuCgoJKiBsb2NhbC1hbGxvYy5jIChyZXF1aXJlc19pbm91dCwgYmxvY2tfYWxsb2MpOiBMaWtld2lzZS4KCgkqIG91dHB1dC5oIChvdXRwdXRfYXNtX2luc24sIGFzc2VtYmxlX3N0cmluZyk6IExpa2V3aXNlLgoKCSogcmVjb2cuYyAocmVjb2dfY29uc3RyYWludHMsIGNoZWNrX2FzbV9vcGVyYW5kcywKCWRlY29kZV9hc21fb3BlcmFuZHMsIGV4dHJhY3RfaW5zbiwgcHJlcHJvY2Vzc19jb25zdHJhaW50cywKCWNvbnN0cmFpbl9vcGVyYW5kcyk6IExpa2V3aXNlLgoKCSogcmVjb2cuaCAob3BlcmFuZF9hbHRlcm5hdGl2ZSwgcmVjb2dfY29uc3RyYWludHMsIGluc25fdGVtcGxhdGUsCglpbnNuX291dGZ1biwgaW5zbl9vcGVyYW5kX2NvbnN0cmFpbnQsIGluc25fbmFtZSk6IExpa2V3aXNlLgoKCSogcmVnY2xhc3MuYyAocmVjb3JkX3JlZ19jbGFzc2VzLCBzY2FuX29uZV9pbnNuKTogTGlrZXdpc2UuCgoJKiByZWdtb3ZlLmMgKGZpbmRfbWF0Y2hlcyk6IExpa2V3aXNlLgoKCSogcmVsb2FkLmMgKGFsdGVybmF0aXZlX2FsbG93c19tZW1jb25zdCk6IExpa2V3aXNlLgoKCSogcmVsb2FkMS5jIChjb25zdHJhaW50X2FjY2VwdHNfcmVnX3AsCglyZWxvYWRfY3NlX3NpbXBsaWZ5X29wZXJhbmRzKTogTGlrZXdpc2UuCgoJKiBydGwuaCAoZGVjb2RlX2FzbV9vcGVyYW5kcyk6IExpa2V3aXNlLgoKCSogc2Nhbi5oIChmbl9kZWNsKTogTGlrZXdpc2UuCgoJKiB2YXJhc20uYyAoYXNzZW1ibGVfc3RyaW5nKTogTGlrZXdpc2UuCgpTYXQgSmFuIDIzIDAxOjM3OjM2IDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGNvbmZpZ3VyZS5pbiAoZ2NjX3Rvb2xkaXIpOiBIYW5kbGUgY2FzZSB3aGVyZSBleGVjX3ByZWZpeCBoYXMKCW5vdCBiZWVuIGV4cGxpY2l0bHkgc2V0LgoJKiBjb25maWd1cmU6IFJlYnVpbHQuCgoJKiBmb2xkLWNvbnN0LmMgKGxzaGlmdF9kb3VibGUpOiBNYXJrICdwcmVjJyBhcmd1bWVudHMgYXMgcG9zc2libHkKCXVudXNlZC4KCgkqIGJpdG1hcC5oIChiaXRtYXBfaGVhZF9kZWYpOiBNYWtlIGluZHggZmllbGQgdW5zaWduZWQuCgoJKiBjb25maWd1cmUuaW4gKGdjY190b29sZGlyKTogV2hlbiBub3QgbWFraW5nIGEgcmVsYXRpdmUgZ2NjX3Rvb2xkaXIsCgl1c2UgJGV4ZWNfcHJlZml4LyR0YXJnZXRfYWxpYXMgZm9yIGdjY190b29sZGlyLgoJKiBjb25maWd1cmU6IFJlYnVpbHQuCgpGcmkgSmFuIDIyIDExOjQ4OjU2IDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBjcHBwLmMgKHhyZWFsbG9jKTogRml4IHR5cG8gbGFzdCBjaGFuZ2UuCgkqIGNwcGFsbG9jLmMsIGdjYy5jLCBnZW5hdHRyLmMsIGdlbmF0dHJ0YWIuYywgZ2VuY29kZXMuYzogTGlrZXdpc2UuCgkqIGdlbmNvbmZpZy5jLCBnZW5lbWl0LmMsIGdlbmV4dHJhY3QuYywgZ2VuZmxhZ3MuYzogTGlrZXdpc2UuCgkqIGdlbm9waW5pdC5jLCBnZW5vdXRwdXQuYywgZ2VucGVlcC5jLCBnZW5yZWNvZy5jOiBMaWtld2lzZS4KCjE5OTktMDEtMjIgIE1pY2hhZWwgTWVpc3NuZXIgIDxtZWlzc25lckBjeWdudXMuY29tPgoKCSogcnM2MDAwLmggKENSMF9SRUdOT19QKTogTmV3IG1hY3JvIHRvIHRlc3QgaWYgY3IwLgoJKENSX1JFR05PX05PVF9DUjBfUCk6IE5ldyBtYWNybyB0byB0ZXN0IGlmIGNyLCBidXQgbm90IGNyMC4KCShQUkVESUNBVEVfQ09ERVMpOiBBZGQgY2NfcmVnX25vdF9jcjBfb3BlcmFuZC4KCShjY19yZWdfbm90X2NyMF9vcGVyYW5kKTogQWRkIGRlY2xhcmF0aW9uLgoKCSogcnM2MDAwLmMgKGNjX3JlZ19ub3RfY3IwX29wZXJhbmQpOiBSZXR1cm4gdHJ1ZSBpZiByZWdpc3RlciBpcyBhCglwc2V1ZG8gcmVnaXN0ZXIsIG9yIGEgY29udHJvbCByZWdpc3RlciB0aGF0IGlzIG5vdCBDUjAuCgoJKiByczYwMDAubWQgKGFsbCBjb21iaW5lciBwYXR0ZXJucyBidWlsZGluZyAuIGluc3RydWN0aW9ucyk6IEZvcgoJYWxsIGAuJyBpbnN0cnVjdGlvbnMgdGhhdCBkbyBzb21ldGhpbmcgYW5kIHNldCBjcjAsIGFkZCBhbgoJYWx0ZXJuYXRpdmUgdGhhdCBkb2VzIHRoZSBvcGVyYXRpb24sIGFuZCB0aGVuIHNldHMgYSBkaWZmZXJlbnQKCWZsYWcsIGluIG9yZGVyIHRvIGF2b2lkIHVzaW5nIHRoZSBjb3N0bHkgbWNyZiBpbnN0cnVjdGlvbiBhbmQgYWxzbwoJYWxsb3cgY3IwIHRvIGJlIGNsb2JiZXJlZCBpbiBhc20gc3RhdGVtZW50cy4gIEFsc28gZml4IGEgZmV3CglwYXR0ZXJucyB0aGF0IHVzZWQgdGhlIHdyb25nIHJlZ2lzdGVyLgoKCSogcnM2MDAwLmggKHJzNjAwMF9jcHVfc2VsZWN0KTogTWFrZSBzdHJpbmcsIG5hbWVzIGJlIGNvbnN0IGNoYXIgKi4KCShyczYwMDBfZGVidWdfbmFtZSk6IE1ha2UgY29uc3QgY2hhciAqLCBub3QgY2hhciAqLgoKCSogc3lzdjQuaCAocnM2MDAwX3thYmksc2RhdGF9X25hbWUpOiBNYWtlIGNvbnN0IGNoYXIgKi4KCgkqIHJzNjAwMC5jIChyczYwMDBfe2RlYnVnLGFiaSxzZGF0YX1fbmFtZSk6IE1ha2UgY29uc3QgY2hhciAqLgoJKHJzNjAwMF9zZWxlY3QpOiBVc2UgY29uc3QgY2hhciAqIGluIGNhc3RzLgoKRnJpIEphbiAyMiAwNzo0MzowMSAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBNYWtlZmlsZS5pbiAoZ2NjX3Rvb2xkaXIpOiBNb3ZlIGJlZm9yZSBmaXJzdCByZWZlcmVuY2UuCglMZXQgYXV0b2NvbmYgc3Vic3RpdHV0ZSBpbiBhIHZhbHVlLgoJKiBjb25maWd1cmUuaW4gKGdjY190b29sZGlyKTogT25seSB1c2UgYSByZWxhdGl2ZSBwYXRoIHRvIHRoZQoJdG9vbCBkaXJlY3RvcnkgaWYgJGV4ZWNfcHJlZml4ID09ICRwcmVmaXguCgkqIGNvbmZpZ3VyZTogUmVidWlsdC4KCgkqIE1ha2VmaWxlLmluICh0b29sZGlyKTogUmVwbGFjZSB3aXRoIGdjY190b29sZGlyLgoKVGh1IEphbiAyMSAyMzoyMTo1NyAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBtNjhrLm1kIChhc2hsZGlfY29uc3QpOiBEaXNhYmxlIGZvciAhVEFSR0VUXzUyMDAuICBGaXggaW5kZW50YXRpb24uCgkoYXNobGRpMyBleHBhbmRlcik6IFNpbWlsYXJseS4gIFVwZGF0ZSBjb21tZW50cy4KCShhc2hyZGlfY29uc3QsIGxzaHJkaV9jb25zdCk6IEZpeCBpbmRlbnRhdGlvbi4KCShhc2hyZGkzLCBsc2hyZGkzKTogRml4IGluZGVudGF0aW9uLiAgVXBkYXRlIGNvbW1lbnRzLgoKVGh1IEphbiAyMSAyMTo1MzozNiAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogZW1pdC1ydGwuYyAodHJ5X3NwbGl0KTogRG9uJ3QgdHJ5IHRvIHNwbGl0IG5vbi1pbnN0cnVjdGlvbnMuCgpUaHUgSmFuIDIxIDIzOjQ3OjMwIDE5OTkgIEFuZHJldyBNYWNMZW9kICA8YW1hY2xlb2RAY3lnbnVzLmNvbT4KCgkqIGV4cHIuYyAoZW1pdF9wdXNoX2luc24pOiBGaXggZHVtYiB0eXBvLgoKVGh1IEphbiAyMSAyMDoyNDowMiAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogcnM2MDAwLmggKExFR0lUSU1JWkVfUkVMT0FEX0FERFJFU1MpOiBSZWNvZ25pemUgYW5kIGFjY2VwdAoJdHJhbnNmb3JtYXRpb25zIHRoYXQgd2UgaGF2ZSBwZXJmb3JtZWQgZWFybGllci4KCSogYWxwaGEuaCAoTEVHSVRJTUlaRV9SRUxPQURfQUREUkVTUyk6IExpa2V3aXNlLgoKCSogYWxwaGEubWQgKHByb2xvZ3VlX3N0YWNrX3Byb2JlX2xvb3ApOiBEb24ndCBkbyBvdXIgb3duIGxhYmVsCgloYW5kbGluZywgY2FsbCBnZW5fbGFiZWxfcnR4IGluc3RlYWQuCgpUaHUgSmFuIDIxIDE3OjQ1OjE4IDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBjb25maWd1cmUuaW4gKHtyczYwMDB8cG93ZXJwY30taWJtLWFpeDQuWzEyXSopOiBBZGQgbWlzc2luZyBgdGhlbicuCgoJKiBjY2NwLmMgKHhyZWFsbG9jKTogQ2FsbCBtYWxsb2MgZ2l2ZW4gYSBOVUxMIG9sZCBwb2ludGVyLgoJKiBjb2xsZWN0Mi5jLCBjcHBhbGxvYy5jLCBnY2MuYywgZ2VuYXR0ci5jLCBnZW5hdHRydGFiLmM6IExpa2V3aXNlLgoJKiBnZW5jb2Rlcy5jLCBnZW5jb25maWcuYywgZ2VuZW1pdC5jLCBnZW5leHRyYWN0LmM6IExpa2V3aXNlLgoJKiBnZW5mbGFncy5jLCBnZW5vcGluaXQuYywgZ2Vub3V0cHV0LmMsIGdlbnBlZXAuYzogTGlrZXdpc2UuCgkqIGdlbnJlY29nLmMsIG1pcHMtdGZpbGUuYywgcHJvdG9pemUuYzogTGlrZXdpc2UuCgpUaHUgSmFuIDIxIDE5OjQ0OjU1IDE5OTkgIE1pY2hhZWwgTWVpc3NuZXIgIDxtZWlzc25lckBjeWdudXMuY29tPgoKCSogY29uZmlndXJlLmluICh7cnM2MDAwfHBvd2VycGN9LWlibS1haXg0LlsxMl0qKTogSWYKCS0td2l0aC1nbnUtbGQsIHVzZSB4LWFpeDQxLWdsZCBpbnN0ZWFkIG9mIHgtYWl4NDEgdG8gc3VwcHJlc3MKCWFkZGluZyAtV2wsLWJiaWd0b2MgdG8gQk9PVF9MREZMQUdTLgoJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCgoJKiBjb25maWcvcnM2MDAwL3gtYWl4NDEtZ2xkOiBOZXcgZmlsZSwgZG9uJ3Qgc2V0IEJPT1RfTERGTEFHUy4KClRodSBKYW4gMjEgMTU6NDg6MDMgMTk5OSAgRGF2ZSBCcm9sbGV5ICA8YnJvbGxleUBjeWdudXMuY29tPgoKCSogY3BwZXhwLmMgKGNwcF9sZXgpOiBBbGxvY2F0ZSB0b2tlbl9idWZmZXIgZHluYW1pY2FsbHkuCgpUaHUgSmFuIDIxIDE0OjE4OjA0IDE5OTkgIEFuZHJldyBNYWNMZW9kICA8YW1hY2xlb2RAY3lnbnVzLmNvbT4KCgkqIGV4cHIuYyAoTU9WRV9CWV9QSUVDRVNfUCk6IERlZmluZSBjb25kaXRpb24gZm9yIGRlY2lkaW5nIHRvIHVzZQoJbW92ZV9ieV9waWVjZXMuCgkoTU9WRV9NQVhfUElFQ0VTKTogRGVmaW5lIG1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIHRvIG1vdmUgYXQgb25jZS4KCShVU0VfTE9BRF9QT1NUX0lOQ1JFTUVOVCwgVVNFX0xPQURfUFJFX0RFQ1JFTUVOVCk6IERlZmluZSBkZWZhdWx0cy4KCShVU0VfU1RPUkVfUE9TVF9JTkNSRU1FTlQsIFVTRV9TVE9SRV9QUkVfREVDUkVNRU5UKTogRGVmaW5lIGRlZmF1bHRzLgoJKG1vdmVfYnlfcGllY2VzKTogVXNlIG5ldyBtYWNyb3MuCgkoZW1pdF9ibG9ja19tb3ZlKTogVXNlIG5ldyBtYWNyb3MuCgkoY2xlYXJfYnlfcGllY2VzKTogVXNlIG5ldyBtYWNyb3MuCgkoY2xlYXJfc3RvcmFnZSk6IFVzZSBuZXcgbWFjcm9zLgoJKGVtaXRfcHVzaF9pbnNuKTogVXNlIG5ldyBtYWNyb3MuCgkoZXhwYW5kX2V4cHIpOiBVc2UgbmV3IG1hY3Jvcy4KCSogY29uZmlnL3NoL3NoLmggKFVTRV9MT0FEX1BPU1RfSU5DUkVNRU5ULCBVU0VfTE9BRF9QUkVfREVDUkVNRU5UKToKCURlZmluZS4KCShVU0VfU1RPUkVfUE9TVF9JTkNSRU1FTlQsIFVTRV9TVE9SRV9QUkVfREVDUkVNRU5UKTogRGVmaW5lLgoJKE1PVkVfQllfUElFQ0VTX1ApOiBEZWZpbmUgYmFzZWQgb24gYWxpZ25tZW50IGFuZCBUQVJHRVRfU01BTExDT0RFLgoJKE1PVkVfTUFYX1BJRUNFUyk6IE1vdmUgOCBieXRlcyBvbiBTSDQuCgkqIHRtLnRleGkoTU9WRV9CWV9QSUVDRVNfUCwgTU9WRV9NQVhfUElFQ0VTLCBVU0VfTE9BRF9QT1NUX0lOQ1JFTUVOVCwKCVVTRV9MT0FEX1BSRV9ERUNSRU1FTlQsIFVTRV9TVE9SRV9QT1NUX0lOQ1JFTUVOVCwKCVVTRV9TVE9SRV9QUkVfREVDUkVNRU5UKTogRGVzY3JpYmUgbmV3IG1hY3Jvcy4KClRodSBKYW4gMjEgMTQ6MTM6MzEgMTk5OSAgVmxhZGltaXIgTi4gTWFrYXJvdiAgPHZtYWthcm92QGN5Z251cy5jb20+CgoJKiB2YXJhc20uYyAob3V0cHV0X2NvbnN0YW50X3Bvb2wpOiBVc2UgZmxvb3JfbG9nMiBpbnN0ZWFkIG9mCglleGFjdF9sb2cyIGZvciBBU01fT1VUUFVUX0FMSUdOLgoKCSogc3Rvci1sYXlvdXQuYyAobGF5b3V0X3R5cGUpOiBEbyBtYWNoaW5lLWRlcGVuZGVudCBleHRyYSBhbGlnbm1lbnQuCgoJKiBlbWl0LXJ0bC5jIChvcGVyYW5kX3N1YndvcmQpOiBIYW5kbGUgY2FzZSB3aGVuIGEgc3Vid29yZCBvdXRzaWRlCgl0aGUgb3BlcmFuZC4KCgkqIHRtLnRleGkgKFJPVU5EX1RZUEVfe1NJWkUsQUxJR059KTogTW9yZSBhY2N1cmF0ZSBkZXNjcmlwdGlvbnMgb2YKCXRoZSBtYWNyb3MuCgpUaHUgSmFuIDIxIDAxOjU5OjMwIDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBjc2UuYyAoZm9sZF9ydHgpOiBSZXZlcnQgMjkgRGVjIGNoYW5nZS4KCShjc2VfaW5zbik6IFJldmVydCAxMiBKYW4gY2hhbmdlLgoJKiBleHByLmMgKGV4cGFuZF9idWlsdGluKTogRG9uJ3QgZW1pdCBDT05TVCBhcm91bmQgQ09OU1RBTlRfUF9SVFguCgkqIHJlZ2NsYXNzLmMgKHJlZ19zY2FuX21hcmtfcmVmcyk6IFJldmVydCAyOSBEZWMgY2hhbmdlLgoJKiBydGwuZGVmOiBMaWtld2lzZS4KCSogcnRsLmggKENPTlNUQU5UX1ApOiBMaWtld2lzZS4KCgkqIGV4cHIuYyAoZW1pdF9tb3ZlX2luc24pOiBOZXZlciB0cnkgdG8gZmx1c2ggQ09OU1RBTlRfUF9SVFgKCXRvIG1lbW9yeS4KCSogcmVjb2cuYyAoaW1tZWRpYXRlX29wZXJhbmQpOiBBY2NlcHQgQ09OU1RBTlRfUF9SVFguCgkqIGFscGhhLmMgKGlucHV0X29wZXJhbmQpOiBMaWtld2lzZS4KCSogYzR4LmMgKGNvbnN0X29wZXJhbmQpOiBMaWtld2lzZS4KCgkqIGV4cGxvdy5jIChhbGxvY2F0ZV9keW5hbWljX3N0YWNrX3NwYWNlKTogVXNlIHJlZ2lzdGVyX29wZXJhbmQKCWluc3RlYWQgb2YgYXJpdGhfb3BlcmFuZCwgd2hpY2ggZG9lcyBub3QgZXhpc3QuCgoJKiAxNzUwYS5oOiBGaXggY29tbWVudCBjbG9zdXJlLgoJKiBhMjlrLmMgKGEyOWtfc2V0X21lbWZsYWdzKTogRml4IHR5cG8gaW4gMTkgSmFuIGNoYW5nZS4KCSogYXJjLm1kIChvbmVfY21wbHNpMl9zZXRfY2NfaW5zbik6IEZpeCBzZXQgbW9kZSBtaXNtYXRjaC4KCSogYXJtLmggKFRBUkdFVF9TV0lUQ0hFUyk6IEZpeCB0eXBvLgoJKiBpMzcwLm1kIChhbm9uIG11bHQgYW5kIGRpdiBwYXR0ZXJucyk6IEZpeCBzZXQgbW9kZSBtaXNtYXRjaC4KCSogaTg2MC5jIChvdXRwdXRfZGVsYXllZF9icmFuY2gpOiBGaXggb3BlcmFuZHMgdG8gY29uc3RyYWluX29wZXJhbmRzLgoJKG91dHB1dF9kZWxheV9pbnNuKTogTGlrZXdpc2UuCgkqIG04OGsubWQgKGFub24gcm90YXRlIGluc25zKTogRml4IHNldCBtb2RlIG1pc21hdGNoLgoJKGFub24gQkxLbW9kZSBtb3Zlcyk6IENvbW1vbml6ZSBhbmQgZml4IHNldCBtb2RlIG1pc21hdGNoZXMuCgkqIG5zMzJrLm1kICh1ZGl2bW9kZGlbc2hxXWk0X2ludGVybmFsKTogRml4IG1vZGUgbWlzbWF0Y2guCgkqIHJvbXAubWQgKG1vdmRmKTogRml4IHR5cG8uCgpUaHUgSmFuIDIxIDAwOjI5OjM1IDE5OTkgIE5hdGhhbiBTaWR3ZWxsICA8bmF0aGFuQGFjbS5vcmc+CgoJKiBNYWtlZmlsZS5pbiAoaW5zdGFsbC1jb21tb24pOiBSZW1vdmUgZXh0cmFuZW91cyBjaG1vZCBmb3IgZ2NvdgoJaW5zdGFsbC4KCldlZCBKYW4gMjAgMTg6MTU6MDggMTk5OSAgRGF2ZSBCcm9sbGV5ICA8YnJvbGxleUBjeWdudXMuY29tPgoKCSogZnVuY3Rpb24uYyAoYXNzaWduX3Bhcm1zKTogU2F2ZSBhbmQgcmVzdG9yZSBzZXR0aW5nIG9mCglUUkVFX1VTRUQgKHBhcm0pLgoKV2VkIEphbiAyMCAxMjo1MTo0MiAxOTk5ICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogYXJtLm1kOiBVc2UgTUVNX0NPUFlfQVRUUklCVVRFUyB3aGVyZSBhcHByb3ByaWF0ZSB0aHJvdWdob3V0LgoJUGFzcyBNRU1fU0NBTEFSX1AgdG8gYXJtX2dlbl9zdG9yZV9tdWx0aXBsZSB3aGVyZSBhcHByb3ByaWF0ZS4KClR1ZSBKYW4gMTkgMjE6MjA6NTIgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIHJlY29nLmMgKHBvcF9vcGVyYW5kKTogTmV3IGZ1bmN0aW9uLgoJKiByZWNvZy5oIChwb3Bfb3BlcmFuZCk6IERlY2xhcmUgaXQuCgkqIGdlbnJlY29nLmMgKHByZWRzKTogRGVmaW5lIGl0LgoKCSogZXhwci5jIChkb19qdW1wX2Zvcl9jb21wYXJlKTogSGFuZGxlIGNvbmRpdGlvbmFsIGJyYW5jaCBleHBhbmRlcnMKCWVtaXR0aW5nIG11bHRpcGxlIGp1bXAgaW5zdHJ1Y3Rpb25zLgoJKiBqdW1wLmMgKGNvbmRqdW1wX2xhYmVsKTogTmV3IGZ1bmN0aW9uLgoJKiBydGwuaCAoY29uZGp1bXBfbGFiZWwpOiBEZWNsYXJlIGl0LgoKVHVlIEphbiAxOSAyMTowODoyMCAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogZXhwci5jIChlbWl0X21vdmVfaW5zbl8xKTogUmV2ZXJ0IDE3IERlYyBjaGFuZ2UuICBEb24ndCBlbWl0CgljbG9iYmVyIGR1cmluZyBvciBhZnRlciByZWxvYWQuCgpUdWUgSmFuIDE5IDE2OjU2OjAzIDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBnZW5vdXRwdXQuYyAobmFtZV9mb3JfaW5kZXgpOiBOZXcgZnVuY3Rpb24uCgkoc2Nhbl9vcGVyYW5kcywgdmFsaWRhdGVfaW5zbl9hbHRlcm5hdGl2ZXMpOiBVc2UgaXQuCgkqIGdlbnJlY29nLmMgKGluc25fbmFtZV9wdHJfc2l6ZSk6IE5ldyB2YXJpYWJsZS4KCShtYWtlX2luc25fc2VxdWVuY2UpOiBGaWxsIGluIGluc25fbmFtZV9wdHIuCgkobWVyZ2VfdHJlZXMpOiBVc2UgaXQuCgpUdWUgSmFuIDE5IDE2OjM3OjM2IDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBpMzg2L2lzYy5oIChUQVJHRVRfREVGQVVMVCk6IERlZmluZSBzeW1ib2xpY2x5LgoJKiBpMzg2L2lzY2NvZmYuaCwgaTM4Ni9uZXh0LmgsIGkzODYvc2NvLmgsIGkzODYvc2NvNS5oOiBMaWtld2lzZS4KCSogaTM4Ni9zY29kYnguaCwgaTM4Ni9zZXF1ZW50LmgsIGkzODYudW5peC5oOiBMaWtld2lzZS4KClR1ZSBKYW4gMTkgMTU6MDA6MTAgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogbG9vcC5jIChOVU1fU1RPUkVTKTogRGVsZXRlLgoJKGxvb3Bfc3RvcmVfbWVtcyk6IFR1cm4gaW50byBhbiBFWFBSX0xJU1Qgb2YgTUVNcy4KCShwcmVzY2FuX2xvb3ApOiBQcm9wZXJseSBpbml0aWFsaXplIGxvb3BfbWVtc19pZHguCgkobm90ZV9hZGRyX3N0b3JlZCk6IFNpbXBsaWZ5IHVzaW5nIGxpc3Qgc3RydWN0dXJlIGluc3RlYWQgb2YKCWZpeGVkIHNpemVkIGFycmF5LgoJKGludmFyaWFudF9wLCBjaGVja19kYnJhX2xvb3AsIGxvYWRfbWVtcyk6IFNpbWlsYXJseS4KCgkqIGZsb3cuYyAoaW52YWxpZGF0ZV9mcm9tX2F1dG9pbmMpOiBOZXcgZnVuY3Rpb24uCgkobWFya19zZXRfMSwgbWFya191c2VkX3JlZ3MpOiBVc2UgaXQuCgoJKiBNYWtlZmlsZS5pbiAocHJvdG9pemUubywgdW5wcm90b2l6ZS5vKTogRGVwZW5kIG9uIE1ha2VmaWxlLgoKMTk5OS0wMS0xOSAgVmxhZGltaXIgTi4gTWFrYXJvdiAgPHZtYWthcm92QGN5Z251cy5jb20+CgoJKiBpbnZva2UudGV4aSAoLW1sb25nLWRvdWJsZS02NCk6IE5ldyBvcHRpb24gZGVzY3JpcHRpb24uCgoxOTk5LTAxLTE5ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CgoJKiBsaWJnY2MyLmM6IENoYW5nZSBhbGwgdXNlcyBvZiBMT05HX0RPVUJMRV9UWVBFX1NJWkUgdG8KCUxJQkdDQzJfTE9OR19ET1VCTEVfVFlQRV9TSVpFLgoJKExJQkdDQzJfTE9OR19ET1VCTEVfVFlQRV9TSVpFKTogTmV3LiAgU2V0IHRvIExPTkdfRE9VQkxFX1RZUEVfU0laRQoJaWYgbm90IGRlZmluZWQuCgkqIGk5NjAvaTk2MC5oIChNVUxUSUxJQl9ERUZBVUxUUyk6IERlZmluZSB0byBtbnVtZXJpY3MuCgkoQ1BQX1NQRUNTKTogQWRkIC1tbG9uZy1kb3VibGUtNjQgc3VwcG9ydC4KCShUQVJHRVRfRkxBR19MT05HX0RPVUJMRV82NCwgVEFSR0VUX0xPTkdfRE9VQkxFXzY0KTogTmV3LgoJKFRBUkdFVF9TV0lUQ0hFUyk6IEFkZCAtbWxvbmctZG91YmxlLTY0IHN1cHBvcnQuCgkoTE9OR19ET1VCTEVfVFlQRV9TSVpFKTogTGlrZXdpc2UuCgkoTElCR0NDMl9MT05HX0RPVUJMRV9UWVBFX1NJWkUpOiBEZWZpbmUuCgkqIGk5NjAvdng5NjAtY29mZi5oIChNVUxUSUxJQl9ERUZBVUxUUyk6IERlZmluZSB0byBtc29mdC1mbG9hdC4KCShDUFBfU1BFQ1MpOiBBZGQgLW1sb25nLWRvdWJsZS02NCBzdXBwb3J0LgoJKiBpOTYwL3QtOTYwYmFyZSAoTVVMVElMSUJfT1BUSU9OUyk6IEFkZCBtbG9uZy1kb3VibGUtNjQuCgkoTVVMVElMSUJfRElSTkFNRVMpOiBBZGQgbGQ2NC4KCSogaTk2MC90LXZ4d29ya3M5NjAgKE1VTFRJTElCX09QVElPTlMsIE1VTFRJTElCX0RJUk5BTUVTKTogTGlrZXdpc2UuCgpUdWUgSmFuIDE5IDExOjU0OjA0IDE5OTkgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGNhbGxzLmMgKGV4cGFuZF9jYWxsKTogU3RyaXAgYSBUQVJHRVRfRVhQUiBpZiB3ZSdyZSBwYXNzaW5nIGJ5CglpbnZpc2libGUgcmVmZXJlbmNlLgoKVHVlIEphbiAxOSAxNDo1MTozNiAxOTk5ICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQGdudS5vcmc+CgoJKiByczYwMDAuYyAob2Zmc2V0dGFibGVfYWRkcl9vcGVyYW5kKTogRGVsZXRlLgoJKG9mZnNldHRhYmxlX21lbV9vcGVyYW5kKTogTmV3IGZ1bmN0aW9uLgoJKiByczYwMDAuaCAoUFJFRElDQVRFX0NPREVTKTogUmVmbGVjdCBmdW5jdGlvbiBjaGFuZ2UuCgkoUlM2MDAwX1NBVkVfVE9DKTogUmVwcmVzZW50IGFkZHJlc3MgYXMgTUVNLgoJKiB3aW4tbnQuaCAoUlM2MDAwX1NBVkVfVE9DKTogU2FtZS4KCSogcnM2MDAwLm1kIChpbmRpcmVjdCBjYWxscyk6IENoYW5nZSBvZmZzZXR0YWJsZSBhZGRyZXNzIHBhcmFtZXRlcgoJdG8gb2Zmc2V0dGFibGUgbWVtb3J5IHBhcmFtZXRlci4KClR1ZSBKYW4gMTkgMTA6MjQ6NTMgMTk5OSAgTWFyayBNaXRjaGVsbCAgPG1hcmtAbWFya21pdGNoZWxsLmNvbT4KCgkqIHJ0bC5oIChydHhfZGVmKTogVXBkYXRlIGRvY3VtZW50YXRpb24uCgkoTUVNX0lOX1NUUlVDVF9QKTogTGlrZXdpc2UuCgkoTUVNX1NDQUxBUl9QKTogTmV3IG1hY3JvLgoJKE1FTV9DT1BZX0FUVFJJQlVURVMpOiBMaWtld2lzZS4KCShNRU1fU0VUX0lOX1NUUlVDVF9QKTogTGlrZXdpc2UuCgkqIHJ0bC50ZXhpIChNRU1fU0NBTEFSX1ApOiBEb2N1bWVudC4KCSogYWxpYXMuYyAoY2Fub25fcnR4KTogVXNlIE1FTV9DT1BZX0FUVFJJQlVURVMuCgkoZml4ZWRfc2NhbGFyX2FuZF92YXJ5aW5nX3N0cnVjdF9wKTogTmV3IGZ1bmN0aW9uLiAgVXNlCglNRU1fU0NBTEFSX1AgcmF0aGVyIHRoYW4gIU1FTV9JTl9TVFJVQ1RfUC4KCShhbGlhc2VzX2V2ZXJ5dGhpbmdfcCk6IExpa2V3aXNlLgoJKHRydWVfZGVwZW5kZW5jZSk6IFVzZSB0aGVtLgoJKHdyaXRlX2RlcGVuZGVuY2VfcCk6IE5ldyBmdW5jdGlvbiwgY29udGFpbmluZyBjb2RlIGNvbW1vbiB0bwoJYW50aV9kZXBlbmRlbmNlIGFuZCBvdXRwdXRfZGVwZW5kZW5jZS4KCShhbnRpX2RlcGVuZGVuY2UpOiBVc2UgaXQuCgkob3V0cHV0X2RlcGVuZGVuY2UpOiBMaWtld2lzZS4KCSogY2FsbHMuYyAoc2F2ZV9maXhlZF9hcmd1bWVudF9hcmVhKTogRG9uJ3QgY2xlYXIKCU1FTV9JTl9TVFJVQ1RfUC4KCShleHBhbmRfY2FsbCk6IFVzZSBNRU1fU0VUX0lOX1NUUlVDVF9QLgoJKGVtaXRfbGlicmFyeV9jYWxsKTogRG9uJ3QgY2xlYXIgTUVNX0lOX1NUUlVDVF9QLgoJKGVtaXRfbGlicmFyeV9jYWxsX3ZhbHVlKTogTGlrZXdpc2UuCgkoc3RvcmVfb25lX2FyZyk6IFVzZSBNRU1fU0VUX0lOX1NUUlVDVF9QLgoJKiBjb21iaW5lLmMgKHNpbXBsaWZ5X3J0eCk6IFVzZSBNRU1fQ09QWV9BVFRSSUJVVEVTLgoJKG1ha2VfZXh0cmFjdGlvbik6IExpa2V3aXNlLgoJKHNpbXBsaWZ5X3NoaWZ0X2NvbnN0KTogTGlrZXdpc2UuCgkoZ2VuX2xvd3BhcnRfZm9yX2NvbWJpbmUpOiBMaWtld2lzZS4KCSogY3NlLmMgKGdlbl9sb3dwYXJ0X2lmX3Bvc3NpYmxlKTogVXNlIE1FTV9DT1BZX0FUVFJJQlVURVMuCgkqIGVtaXQtcnRsLmMgKG9wZXJhbmRfc3Vid29yZCk6IExpa2V3aXNlLgoJKGNoYW5nZV9hZGRyZXNzKTogTGlrZXdpc2UuCgkqIGV4cGxvdy5jIChzdGFiaWxpemUpOiBVc2UgTUVNX0NPUFlfQVRUUklCVVRFUy4KCSogZXhwci5jIChwcm90ZWN0X2Zyb21fcXVldWUpOiBVc2UgTUVNX0NPUFlfQVRUUklCVVRFUy4KCShlbWl0X2dyb3VwX3N0b3JlKTogVXNlIE1FTV9TRVRfSU5fU1RSVUNUX1AuCgkoY29weV9ibGttb2RlX2Zyb21fcmVnKTogTGlrZXdpc2UuCgkoc3RvcmVfZmllbGQpOiBMaWtld2lzZS4KCShleHBhbmRfZXhwcik6IFJlbW92ZSBib2d1cyBndWVzc3dvcmsgc2V0dGluZyBNRU1fSU5fU1RSVUNUX1AKCWhldXJpc3RpY2FsbHkuICBVc2UgTUVNX1NFVF9JTl9TVFJVQ1RfUC4KCShnZXRfbWVtb3J5X3J0eCk6IExpa2V3aXNlLgoJKiBmaW5hbC5jIChhbHRlcl9zdWJyZWcpOiBVc2UgTUVNX0NPUFlfQVRUUklCVVRFUy4KCSogZnVuY3Rpb24uYyAoYXNzaWduX3N0YWNrX3RlbXApOiBDbGVhciBNRU1fU0NBTEFSX1AgYW5kCglNRU1fQUxJQVNfU0VUIG9uIG5ld2x5IHJldHVybmVkIE1FTXMuCgkoYXNzaWduX3RlbXApOiBVc2UgTUVNX1NFVF9JTl9TVFJVQ1RfUC4KCShwdXRfcmVnX2ludG9fc3RhY2spOiBMaWtld2lzZS4KCShmaXh1cF92YXJfcmVmczEpOiBVc2UgTUVNX0NPUFlfQVRUUklCVVRFUy4KCShnZW5fbWVtX2FkZHJlc3NvZik6IFVzZSBNRU1fU0VUX0lOX1NUUlVDVF9QLgoJKGFzc2lnbl9wYXJtcyk6IExpa2V3aXNlLgoJKGV4cGFuZF9mdW5jdGlvbik6IExpa2V3aXNlLgoJKiBpbnRlZ3JhdGUuYyAoZXhwYW5kX2lubGluZV9mdW5jdGlvbik6IExpa2V3aXNlLgoJKGNvcHlfcnR4X2FuZF9zdWJzdGl0dXRlKTogVXNlIE1FTV9DT1BZX0FUVFJJQlVURVMuCgkqIGxvb3AuYyAobm90ZV9hZGRyX3N0b3JlZCk6IFJlbW92ZSBjaGVjayBvbiBNRU1fSU5fU1RSVUNUX1AuCgkqIG9wdGFicy5jIChnZW5fbW92ZV9pbnNuKTogVXNlIE1FTV9DT1BZX0FUVFJJQlVURVMuCgkqIHByaW50LXJ0bC5jIChwcmludF9ydHgpOiBQcmludCAvZiBmb3IgZnJhbWVfcmVsYXRlZC4KCSogcmVjb2cuYyAodmFsaWRhdGVfcmVwbGFjZV9ydHhfMSk6IFVzZSBNRU1fQ09QWV9BVFRSSUJVVEVTLgoJKiByZWxvYWQxLmMgKHJlbG9hZCk6IENvcHkgTUVNX1NDQUxBUl9QIGFzIHdlbGwuCgkqIHN0bXQuYyAoZXhwYW5kX2RlY2wpOiBVc2UgTUVNX1NFVF9JTl9TVFJVQ1RfUC4KCShleHBhbmRfYW5vbl91bmlvbl9kZWNsKTogVXNlIE1FTV9DT1BZX0FUVFJJQlVURVMuCgkqIHZhcmFzbS5jIChtYWtlX2RlY2xfcnRsKTogVXNlIE1FTV9TRVRfSU5fU1RSVUNUX1AuCgkob3V0cHV0X2NvbnN0YW50X2RlZik6IExpa2V3aXNlLgoJKiBhMjlrLmMgKGEyOWtfc2V0X21lbWZsYWdzXzEpOiBUYWtlIHNjYWxhcl9wLgoJU2V0IE1FTV9TQ0FMQVJfUC4KCShhMjlrX3NldF9tZW1mbGFncyk6IFVzZSBpdC4KCSogYWxwaGEuYyAoZ2V0X2FsaWduZWRfbWVtKTogVXNlIE1FTV9DT1BZX0FUVFJJQlVURVMuCgkqIGM0eC5jIChjNHhfc2Nhbl9mb3JfbGQpOiBMaWtld2lzZS4KCSogaDgzMDAuYyAoZml4X2JpdF9vcGVyYW5kKTogTGlrZXdpc2UuCgkqIG04OGsuYyAobGVnaXRpbWl6ZV9hZGRyZXNzKTogTGlrZXdpc2UuCgkoYmxvY2tfbW92ZV9sb29wKTogTGlrZXdpc2UuCgkoYmxvY2tfbW92ZV9ub19sb29wKTogTGlrZXdpc2UuCgkoYmxvY2tfbW92ZV9zZXF1ZW5jZSk6IExpa2V3aXNlLgoJKG04OGtfYnVpbHRpbl9zYXZlcmVncyk6IFVzZSBNRU1fU0VUX0lOX1NUUlVDVF9QLgoJKiBtaXBzL2FiaTY0LmggKFNFVFVQX0lOQ09NSU5HX1ZBUkFSR1MpOiBMaWtld2lzZS4KCSogcnM2MDAwLmMgKGV4cGFuZF9ibG9ja19tb3ZlX2luc24pOiBVc2UgTUVNX0NPUFlfQVRUUklCVVRFUy4KCSogc2guYyAoc2hfYnVpbHRpbl9zYXZlcmVncyk6IFVzZSBNRU1fU0VUX0lOX1NUUlVDVF9QLgoJKiBhcm0uaCAoYXJtX2dlbl9sb2FkX211bHRpcGxlKTogVGFrZSBzY2FsYXJfcC4KCShhcm1fc3RvcmVfbG9hZF9tdWx0aXBsZSk6IExpa2V3aXNlLgoJKiBhcm0uYyAoYXJtX2dlbl9sb2FkX211bHRpcGxlKTogTGlrZXdpc2UuCgkoYXJtX2dlbl9zdG9yZV9tdWx0aXBsZSk6IExpa2V3aXNlLgoJKGFybV9nZW5fbW92c3RycWkpOiBUcmVhdCBNRU1fU0NBTEFSX1AgbGlrZSBNRU1fSU5fU1RSVUNUX1AuCgpUdWUgSmFuIDE5IDEyOjMwOjM3IDE5OTkgIEFuZHJldyBNYWNMZW9kICA8YW1hY2xlb2RAY3lnbnVzLmNvbT4KCgkqIG9wdGFicy5jIChlbWl0X2xpYmNhbGxfYmxvY2spOiBBZGQgYSBSRUdfRUhfUkVHSU9OIHJlZyBub3RlIHRvIGFsbAoJY2FsbHMgd2l0aGluIGEgbGliY2FsbCBibG9jayB0byBpbmRpY2F0ZSBubyB0aHJvd3MgYXJlIHBvc3NpYmxlLgoJKiBmbG93LmMgKGZpbmRfYmFzaWNfYmxvY2tzLCBmaW5kX2Jhc2ljX2Jsb2Nrc18xKTogRG9uJ3QgbG9vayBmb3IKCWxpYmNhbGwgYmxvY2tzLiBEb24ndCBhZGQgZWRnZXMgdG8gZXhjZXB0aW9uIGhhbmRsZXJzIGlmIHdlIHNlZQoJYSBSRUdfRUhfUkVHSU9OIG5vdGUgd2l0aCBhIHZhbHVlIG9mIDAuCgkobWFrZV9lZGdlcyk6IE92ZXJyaWRlIGFjdGl2ZV9laF9yZWdpb24gdmVjdG9yIGlmIHRoZSBjYWxsIGhhcyBhIG5vdGUKCWluZGljYXRpbmcgdGhlIGNhbGwgZG9lcyBub3QgdGhyb3cuCgoxOTk5LTAxLTE5ICBWbGFkaW1pciBOLiBNYWthcm92ICA8dm1ha2Fyb3ZAY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy9yczYwMDAvc3lzdjQuaCAoQ0MxX1NQRUMpOiBGaXggY29ycmVjdCBudW1iZXJzIG9mIHt9LgoKVHVlIEphbiAxOSAwNjoyNjozMCAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBNYWtlZmlsZS5pbiAoY2NjcC5vLCBjcHBsaWIubyk6IERlcGVuZCBvbiBNYWtlZmlsZS4KCk1vbiBKYW4gMTggMDk6NTY6NDEgMTk5OSAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogaW52b2tlLnRleGkgKEMrKyBEaWFsZWN0IE9wdGlvbnMpOiBEb2N1bWVudCAtZm5vLXJ0dGkuCgoxOTk5LTAxLTE4ICBWbGFkaW1pciBOLiBNYWthcm92ICA8dm1ha2Fyb3ZAY3lnbnVzLmNvbT4KCgkqICBpbnZva2UudGV4aSAoLW1jcHU9NzQwLCAtbWNwdT03NTApOiBOZXcgb3B0aW9ucy4KCSgtbShuby0pbXVsdGlwbGUsIC1tKG5vLSlzdHJpbmcpOiBEZXNjcmliZSBjYXNlcyBmb3IgUFBDNzQwICYKCVBQQzc1MC4KCjE5OTktMDEtMTggIE1pY2hhZWwgTWVpc3NuZXIgIDxtZWlzc25lckBjeWdudXMuY29tPgoKCSogcnM2MDAwLmggKHtBU00sQ1BQfV9DUFVfU1BFQyk6IEFkZCBzdXBwb3J0IGZvciBhbGwgbWFjaGluZXMKCXN1cHBvcnRlZCB3aXRoIC1tY3B1PXh4eC4KCShwcm9jZXNzb3JfdHlwZSk6IEFkZCBQUk9DRVNTT1JfUFBDNzUwLgoJKEFESlVTVF9QUklPUklUWSk6IENhbGwgcnM2MDAwX2FkanVzdF9wcmlvcml0eS4KCShSVFhfQ09TVFMpOiBTdXBwbHkgY29zdHMgZm9yIDc1MCBtdWx0aXBseS9kaXZpZGUgb3BlcmF0aW9ucy4KCShyczYwMDBfYWRqdXN0X3ByaW9yaXR5KTogQWRkIGRlY2xhcmF0aW9uLgoKCSogcnM2MDAwLmMgKHJzNjAwMF9vdmVycmlkZV9vcHRpb25zKTogLW1jcHU9ezc1MCw3NDB9IG5vdyBzZXRzIHRoZQoJcHJvY2Vzc29yIHR5cGUgYXMgNzUwLCBub3QgNjAzLiAgQWxsb3cgLW1tdWx0aXBsZSBhbmQgLW1zdHJpbmcgb24KCWxpdHRsZSBlbmRpYW4gNzUwIHN5c3RlbXMuCgkocnM2MDAwX2FkanVzdF9wcmlvcml0eSk6IFN0dWIgZm9yIG5vdy4KCShnZXRfaXNzdWVfcmF0ZSk6IFRoZSBQb3dlclBDIDc1MCBjYW4gaXNzdWUgMiBpbnN0cnVjdGlvbnMvY3ljbGUuCgoJKiByczYwMDAubWQgKGZ1bmN0aW9uL2NwdSBhdHRyaWJ1dGVzKTogQWRkIGluaXRpYWwgcHBjNzUwIHN1cHBvcnQuCgoJKiBzeXN2NC5oIChTVFJJQ1RfQUxJR05NRU5UKTogRG9uJ3QgZm9yY2Ugc3RyaWN0IGFsaWdubWVudCBpZgoJbGl0dGxlIGVuZGlhbi4KCShDQzFfU1BFQyk6IFBhc3MgLW1zdHJpY3QtYWxpZ24gaWYgbGl0dGxlIGVuZGlhbiwgYW5kIG5vdAoJb3ZlcnJpZGRlbi4KCShDQzFfRU5ESUFOX3tMSVRUTEUsQklHLERFRkFVTFR9X1NQRUMpOiBFbmRpYW4gc3BlY2lmaWMgY29uZmlncy4KCShTVUJUQVJHRVRfRVhUUkFfU1BFQ1MpOiBBZGQgY2MxIGVuZGlhbiBzcGVjcy4KCgkqIHtzeXN2NCxlYWJpfWxlLmggKENDMV9FTkRJQU5fREVGQVVMVF9TUEVDKTogT3ZlcnJpZGUsIGRlZmF1bHQgaXMKCWxpdHRsZSBlbmRpYW4uCgoJKiB0LXBwY2dhcyAoTVVMVElMSUJfKik6IERlbGV0ZSBvYnNvbGV0ZSBTb2xhcmlzIG11bHRpbGlicy4KCk1vbiBKYW4gMTggMTI6MDM6MDggMTk5OSAgR2F2aW4gUm9taWctS29jaCAgPGdhdmluQGN5Z251cy5jb20+CgoJKiBjb25maWcvbWlwcy9taXBzLm1kIChkaXZfdHJhcCk6IFNwbGl0IGRpdl90cmFwX21pcHMxNgoJZnJvbSBkaXZfdHJhcC4KCShkaXZfdHJhcF9ub3JtYWwsZGl2X3RyYXBfbWlwczE2KTogQ29ycmVjdCB0aGUgbGVuZ3RoIGF0dHJpYnV0ZXMuCgpNb24gSmFuIDE4IDExOjQ4OjI4IDE5OTkgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGNwcGxpYi5jIChzcGVjaWFsX3N5bWJvbCk6IFF1YWxpZnkgYSBjaGFyKiB3aXRoIHRoZSBgY29uc3QnIGtleXdvcmQuCglJbnN0ZWFkIG9mIHdyaXRpbmcgdG8gY29uc3QgY2hhciAqYnVmIGRpcmVjdGx5LCB1c2UgYSBub24tY29uc3QKCXZhcmlhYmxlIGB3YnVmJyB0byBhbGxvY2F0ZSBhbmQgd3JpdGUgYSBzdHJpbmcsIHRoZW4gc2V0IGJ1ZiA9IHdidWYuCgoJKiBjcHB1bHAuYyAodXNlcl9sYWJlbF9wcmVmaXgpOiBRdWFsaWZ5IGEgY2hhciogd2l0aCB0aGUgYGNvbnN0JwoJa2V5d29yZC4KCgkqIGR5bi1zdHJpbmcuYyAoZHluX3N0cmluZ19hcHBlbmQpOiBMaWtld2lzZS4KCgkqIGR5bi1zdHJpbmcuaCAoZHluX3N0cmluZ19hcHBlbmQpOiBMaWtld2lzZS4KCgkqIGZpbmFsLmMgKGVuZF9maW5hbCwgb3V0cHV0X29wZXJhbmRfbG9zc2FnZSwgYXNtX2ZwcmludGYpOiBMaWtld2lzZS4KCgkqIG91dHB1dC5oIChlbmRfZmluYWwsIG91dHB1dF9vcGVyYW5kX2xvc3NhZ2UsIGFzbV9mcHJpbnRmLAoJbmFtZWRfc2VjdGlvbiwgZGVjb2RlX3JlZ19uYW1lLCBtYWtlX2RlY2xfcnRsLCB1c2VyX2xhYmVsX3ByZWZpeCk6CglMaWtld2lzZS4KCgkqIHByb2ZpbGUuYyAoaW5pdF9icmFuY2hfcHJvYik6IExpa2V3aXNlLgoKCSogdG9wbGV2LmMgKHNldF90YXJnZXRfc3dpdGNoLCB2bWVzc2FnZSwKCXZfbWVzc2FnZV93aXRoX2ZpbGVfYW5kX2xpbmUsIHZfbWVzc2FnZV93aXRoX2RlY2wsCgl2X2Vycm9yX3dpdGhfZmlsZV9hbmRfbGluZSwgdl9lcnJvcl93aXRoX2RlY2wsIHZfZXJyb3JfZm9yX2FzbSwKCXZlcnJvciwgdmZhdGFsLCB2X3dhcm5pbmdfd2l0aF9maWxlX2FuZF9saW5lLCB2X3dhcm5pbmdfd2l0aF9kZWNsLAoJdl93YXJuaW5nX2Zvcl9hc20sIHZ3YXJuaW5nLCB2cGVkd2Fybiwgdl9wZWR3YXJuX3dpdGhfZGVjbCwKCXZfcGVkd2Fybl93aXRoX2ZpbGVfYW5kX2xpbmUsIHZzb3JyeSwgdl9yZWFsbHlfc29ycnksCglvcGVuX2R1bXBfZmlsZSwgZHVtcF9ydGwsIGNsZWFuX2R1bXBfZmlsZSwKCXByaW50X3ZlcnNpb24sIHByaW50X3NpbmdsZV9zd2l0Y2gsIHByaW50X3N3aXRjaF92YWx1ZXMsCglkdW1wX2Jhc2VfbmFtZSwgZGVidWdfYXJncywgbGFuZ19pbmRlcGVuZGVudF9vcHRpb25zLAoJdXNlcl9sYWJlbF9wcmVmaXgsIGRvY3VtZW50ZWRfbGFuZ19vcHRpb25zLCB0YXJnZXRfc3dpdGNoZXMsCgl0YXJnZXRfb3B0aW9ucywgcHJpbnRfdGltZSwgcGZhdGFsX3dpdGhfbmFtZSwgZmF0YWxfaW9fZXJyb3IsCglmYXRhbF9pbnNuLCBkZWZhdWx0X3ByaW50X2Vycm9yX2Z1bmN0aW9uLCBwcmludF9lcnJvcl9mdW5jdGlvbiwKCXJlcG9ydF9lcnJvcl9mdW5jdGlvbiwgZXJyb3Jfd2l0aF9maWxlX2FuZF9saW5lLCBlcnJvcl93aXRoX2RlY2wsCgllcnJvcl9mb3JfYXNtLCBlcnJvciwgZmF0YWwsIHdhcm5pbmdfd2l0aF9maWxlX2FuZF9saW5lLAoJd2FybmluZ193aXRoX2RlY2wsIHdhcm5pbmdfZm9yX2FzbSwgd2FybmluZywgcGVkd2FybiwKCXBlZHdhcm5fd2l0aF9kZWNsLCBwZWR3YXJuX3dpdGhfZmlsZV9hbmRfbGluZSwgc29ycnksCglyZWFsbHlfc29ycnksIGJvdGNoLCBvdXRwdXRfcXVvdGVkX3N0cmluZywgb3V0cHV0X2ZpbGVfZGlyZWN0aXZlLAoJb3Blbl9kdW1wX2ZpbGUsIHJlc3Rfb2ZfZGVjbF9jb21waWxhdGlvbiwgZGlzcGxheV9oZWxwLCBtYWluKToKCUxpa2V3aXNlLgoKCSogdG9wbGV2LmggKHByaW50X3RpbWUsIGZhdGFsLCBmYXRhbF9pb19lcnJvciwgcGZhdGFsX3dpdGhfbmFtZSwKCWZhdGFsX2luc24sIHdhcm5pbmcsIGVycm9yLCBwZWR3YXJuLCBwZWR3YXJuX3dpdGhfZmlsZV9hbmRfbGluZSwKCXdhcm5pbmdfd2l0aF9maWxlX2FuZF9saW5lLCBlcnJvcl93aXRoX2ZpbGVfYW5kX2xpbmUsIHNvcnJ5LAoJcmVhbGx5X3NvcnJ5LCBkZWZhdWx0X3ByaW50X2Vycm9yX2Z1bmN0aW9uLCByZXBvcnRfZXJyb3JfZnVuY3Rpb24sCglyZXN0X29mX2RlY2xfY29tcGlsYXRpb24sIHBlZHdhcm5fd2l0aF9kZWNsLCB3YXJuaW5nX3dpdGhfZGVjbCwKCWVycm9yX3dpdGhfZGVjbCwgZXJyb3JfZm9yX2FzbSwgd2FybmluZ19mb3JfYXNtLCBvdXRwdXRfcXVvdGVkX3N0cmluZywKCW91dHB1dF9maWxlX2RpcmVjdGl2ZSwgYm90Y2gpOiBMaWtld2lzZS4KCgkqIHRyZWUuaCAobWFrZV9kZWNsX3J0bCk6IExpa2V3aXNlLgoKCSogdmFyYXNtLmMgKHN0cmlwX3JlZ19uYW1lLCBuYW1lZF9zZWN0aW9uLCBkZWNvZGVfcmVnX25hbWUsCgltYWtlX2RlY2xfcnRsKTogTGlrZXdpc2UuCgpNb24gSmFuIDE4IDExOjM1OjQ5IDE5OTkgIEdhdmluIFJvbWlnLUtvY2ggIDxnYXZpbkBjeWdudXMuY29tPgoKCSogTWFrZWZpbGUuaW4gKFRDTF9MSUJSQVJZKTogVXNlICdjZCcgdG8gZmluZCB0aGUgbGlicmFyeQoJZGlyZWN0b3J5IGxvZ2ljYWxseSByYXRoZXIgdGhhbiBwaHlzaWNhbGx5LgoKTW9uIEphbiAxOCAwOTowNTozNyAxOTk5ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBsb29wLmMgKGluc2VydF9iY3QpOiBIaWRlIHRoZSBkZWZpbml0aW9uIG9mIHZhcmlhYmxlcwoJYGluY3JlbWVudF9kaXJlY3Rpb24nLCBgY29tcGFyZV9kaXJlY3Rpb24nLCBgYWRkX2l0ZXJhdGlvbicgYW5kCglgbG9vcF92YXJfbW9kZScuCgoJKiByZWNvZy5jIChtb2RlX2RlcGVuZGVudF9hZGRyZXNzX3ApOiBNYXJrIHBhcmFtZXRlciBgYWRkcicgd2l0aAoJQVRUUklCVVRFX1VOVVNFRC4gIE1hcmsgbGFiZWwgYHdpbicgd2l0aCBBVFRSSUJVVEVfVU5VU0VEX0xBQkVMLgoJKG1vZGVfaW5kZXBlbmRlbnRfb3BlcmFuZCk6IE1hcmsgbGFiZWwgYGxvc2UnIHdpdGgKCUFUVFJJQlVURV9VTlVTRURfTEFCRUwuCgoJKiByZWdjbGFzcy5jIChuX29jY3VycmVuY2VzKTogUmVtb3ZlIHByb3RvdHlwZSBhbmQgZGVmaW5pdGlvbi4KCgkqIHJlbG9hZC5jIChmaW5kX3JlbG9hZHNfYWRkcmVzc18xKTogTWFyayB2YXJpYWJsZSBgdGVtJyB3aXRoCglBVFRSSUJVVEVfVU5VU0VELgoKCSogcmVsb2FkMS5jIChyZWxvYWQpOiBDYXN0IHRoZSBmaXJzdCB0d28gYXJndW1lbnRzIG9mIGBiY29weScgdG8gUFRSLgoKCSogc2JpdG1hcC5jIChzYml0bWFwX2NvcHkpOiBMaWtld2lzZS4KCgkqIHNjYW4tZGVjbHMuYyAoc2Nhbl9kZWNscyk6IEhpZGUgbGFiZWwgYGhhbmRsZV9jb21tYScuCgoJKiB0b3BsZXYuYyAob3V0cHV0X2xhbmdfaWRlbnRpZnkpOiBNYXJrIHByb3RvdHlwZSB3aXRoCglBVFRSSUJVVEVfVU5VU0VELgoKCSogdHJlZS5jIChtYWtlX25vZGUpOiBDYXN0IHRoZSBmaXJzdCBhcmd1bWVudCBvZiBgYnplcm8nIHRvIFBUUi4KCShtYWtlX3RyZWVfdmVjKTogTGlrZXdpc2UuCgkoYnVpbGQxKTogTGlrZXdpc2UuCgoJKiB2YXJhc20uYyAoYXNzZW1ibGVfc3RhdGljX3NwYWNlKTogTWFyayB2YXJpYWJsZSBgdGVtJyB3aXRoCglBVFRSSUJVVEVfVU5VU0VELgoKTW9uIEphbiAxOCAwNDoyODozNiAxOTk5ICBOYXRoYW4gU2lkd2VsbCAgPG5hdGhhbkBhY20ub3JnPgoKCSogTWFrZWZpbGUuaW4gKEdDT1ZfSU5TVEFMTF9OQU1FKTogTmV3IG1hY3JvLgoJKGluc3RhbGwtY29tbW9uKTogVXNlIGl0LgoJKHVuaW5zdGFsbCk6IFVzZSBpdC4KCSh1bmluc3RhbGwpOiBVc2UgY29ycmVjdCBuYW1lcyBmb3IgcHJvdG9pemUgYW5kIHVucHJvdG9pemUuCgpNb24gSmFuIDE4IDAzOjUyOjU2IDE5OTkgIENocmlzdGlhbiBCcnVlbCAgPENocmlzdGlhbi5CcnVlbEBzdC5jb20+CgkJCSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogZmxvdy5jIChsYXN0X21lbV9zZXQpOiBEZWxldGUgdmFyaWFibGUuICBSZWZlcmVuY2VzIHJlbW92ZWQuCgkobWVtX3NldF9saXN0KTogTmV3IHZhcmlhYmxlLgoJKGxpZmVfYW5hbHlzaXMpOiBJbml0aWFsaXplIGFuZCBmaW5hbGl6ZSBhbGlhcyBhbmFseXNpcy4KCShwcm9wYWdhdGVfYmxvY2spOyBJbml0aWFsaXplIG1lbV9zZXRfbGlzdC4gIENsZWFyIGZvciBDQUxMX0lOU05zLgoJKGluc25fZGVhZF9wKTogRm9yIGEgc3RvcmUgdG8gbWVtb3J5LCBzZWFyY2ggdGhlIGVudGlyZSBtZW1fc2V0X2xpc3QKCWZvciBhIG1hdGNoLgoJKG1hcmtfc2V0XzEpOiBLaWxsIGVudHJpZXMgb24gdGhlIG1lbV9zZXRfbGlzdCBmb3IgYWxpYXNlZCB3cml0ZXMgb3IKCWNoYW5nZXMgdG8gdGhlaXIgYWRkcmVzc2VzLiAgQWRkIG5ldyBlbnRyaWVzIHRvIHRoZSBtZW1fc2V0X2xpc3QgZm9yCgltZW1vcnkgd3JpdGVzIHdyaXRlcy4KCShtYXJrX3VzZWRfcmVncyk6IEtpbGwgZW50cmllcyBvbiB0aGUgbWVtX3NldF9saXN0IHdoaWNoIG1heSBiZQoJcmVmZXJlbmNlZCBieSBhIGxvYWQgb3BlcmF0aW9uLgoKTW9uIEphbiAxOCAwMTowMTowMiAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBhbGlhcy5jIChiYXNlX2FsaWFzX2NoZWNrKTogQWRkIG1pc3NpbmcgcmV0dXJuIGZvciBkaWZmZXJpbmcKCXN5bWJvbHMgY2FzZS4KCk1vbiBKYW4gMTggMDA6MzY6MTMgMTk5OSAgUmFpbmVyIE9ydGggIDxyb0BUZWNoRmFrLlVuaS1CaWVsZWZlbGQuREU+CgoJKiBtaXBzLXRkdW1wLmMgKHByaW50X2ZpbGVfZGVzYyk6IEhhbmRsZSB1bmtub3duIGZpbGVuYW1lcyBhbmQKCW1pc3NpbmcgbG9jYWwgc3ltYm9scy4KClN1biBKYW4gMTcgMjE6MDQ6MzEgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGp1bXAuYyAocnR4X3JlbnVtYmVyZWRfZXF1YWxfcCk6IFNwZWNpYWwgY2FzZSBDT0RFX0xBQkVMLgoKCSogc3lzdGVtLmggKGJjb3B5KTogSW1wbGVtZW50IHdpdGggbWVtbW92ZSBub3QgbWVtY3B5LgoKU3VuIEphbiAxNyAxOToyMzoyMCAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBNYWtlZmlsZS5pbiAoY3BwdWxwLm8pOiBBZGQgZGVwZW5kZW5jaWVzLgoKCSogaTM4Ni5tZCAoaW50ZWdlciBjb25kaXRpb25hbCBtb3Zlcyk6IEFkZCBtaXNzaW5nIGVhcmx5Y2xvYmJlcnMuCgoJKiByZWdtb3ZlLmMgKG9wdGltaXplX3JlZ19jb3B5XzEpOiBVbmRvIEF1ZyAxOCBjaGFuZ2UuICBVcGRhdGUKCVJFR19OX0NBTExTX0NST1NTRUQgYW5kIFJFR19MSVZFX0xFTkdIIGlmIGFuZCBvbmx5IGlmIHdlIGNoYW5nZQoJd2hlcmUgYSByZWdpc3RlciBpcyBsaXZlLgoKU3VuIEphbiAxNyAwMzoyMDo0NyAxOTk5ICBILkouIEx1ICAoaGpsQGdudS5vcmcpCgoJKiByZWctc3RhY2suYyAoc3Vic3Rfc3RhY2tfcmVnc19wYXQpOiBBYm9ydCBpZiB0aGUgZGVzdGluYXRpb24KCW9mIGEgRlAgY29uZGl0aW9uYWwgbW92ZSBpcyBub3Qgb24gdGhlIEZQIHJlZ2lzdGVyIHN0YWNrLgoKU3VuIEphbiAxNyAwMToxNTowNCAxOTk5ICBKZWZmIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogdmVyc2lvbi5jOiBCdW1wIGZvciBzbmFwc2hvdC4KClNhdCBKYW4gMTYgMjM6NDA6MzMgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogcmVsb2FkMS5jIChyZWxvYWRfY3NlX3JlZ3NfMSk6IERvIG5vdCBjYWxsCglyZWxvYWRfY3NlX3NpbXBsaWZ5X29wZXJhbmRzIGZvciBhbiBpbnNuIHdpdGggYXNtIG9wZXJhbmRzLgoKCSogY2NjcC5jIChwcmludF9oZWxwKTogRml4IHR5cG9zLgoJKiBjcHBsaWIuYyAocHJpbnRfaGVscCk6IEZpeCB0eXBvcy4KCSogdG9wbGV2LmMgKGZfb3B0aW9zbik6IEZpeCB0eXBvcy4KCShkb2N1bWVudGVkX2xhbmdfb3B0aW9ucyk6IEZpeCB0eXBvcy4KClNhdCBKYW4gMTYgMjE6NDg6MTcgMTk5OSAgTWFyYyBFc3BpZSAgKE1hcmMuRXNwaWVAb3BlbmJzZC5vcmcpCgoJKiBnY2MuYyAoZG9fc3BlY18xKTogRml4IG9idmlvdXMgdHlwby4KClNhdCBKYW4gMTYgMTk6MzE6MDcgMTk5OSAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogYy1kZWNsLmMgKGR1cGxpY2F0ZV9kZWNscyk6IElmIGB3YXJuX3RyYWRpdGlvbmFsJywgd2FybiB3aGVuCglhIG5vbi1zdGF0aWMgZnVuY3Rpb24gZGVjbGFyYXRpb24gZm9sbG93cyBhIHN0YXRpYyBvbmUuCgoJKiBpbnZva2UudGV4aSAoLVd0cmFkaXRpb25hbCk6IERvY3VtZW50IHRoZSBleHRyYSBjaGVjayBub3cgZG9uZQoJYnkgdGhpcyBmbGFnLgoKU2F0IEphbiAxNiAxNToxMzo0NiAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBwYS5tZCAoc2hhZGQpOiBDcmVhdGUgc2hhZGQgaW5zbnMsIGV2ZW4gaWYgdGhlIHJlc3VsdCBvZiB0aGUgc2hpZnQgaXMKCW5lZWRlZCB3aXRob3V0IHRoZSBhZGRpdGlvbi4KClNhdCBKYW4gMTYgMTA6NDg6MTYgMTk5OSAgSiJvcm4gUmVubmVja2UgIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIHNoLm1kIChtb3ZkZiwgbW92c2YpOiBUZW1wb3Jhcnkgd29ya2Fyb3VuZCBmb3Igbm9fbmV3X3BzZXVkb3MgbG9zc2FnZS4KCkZyaSBKYW4gMTUgMjM6NDQ6MzcgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIHNwYXJjLmMgKHNwYXJjX2lzc3VlKTogQWRkIGh5cGVyc3BhcmMvc3BhcmNsaXRlODZ4IGVudHJpZXMuCgpGcmkgSmFuIDE1IDIyOjMwOjA0IDE5OTkgIERhdmlkIEVkZWxzb2huICA8ZWRlbHNvaG5AZ251Lm9yZz4KCgkqIHJzNjAwMC5oIChDT05TVF9PS19GT1JfTEVUVEVSX1ApOiBEbyBub3QgYXNzdW1lIDMyLWJpdCBDT05TVF9JTlQuCgkqIHJzNjAwMC5jICh1X3Nob3J0X2NpbnRfb3BlcmFuZCwgYWRkX29wZXJhbmQsIGxvZ2ljYWxfb3BlcmFuZCwKCW5vbl9hZGRfY2ludF9vcGVyYW5kLCBub25fbG9naWNhbF9jaW50X29wZXJhbmQpOiBMaWtld2lzZS4KCShnZXRfaXNzdWVfcmF0ZSk6IEFkZCBDUFVfUFBDNjA0RSBjYXNlLgoJKiByczYwMDAubWQgKG1vdmRpLCAhVEFSR0VUX1BPV0VSUEM2NCBzcGxpdHRlcnMpOiBIYW5kbGUgNjQtYml0IGhvc3RzLgoKRnJpIEphbiAxNSAxODo0MjoxMiAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogZXhwci5jIChxdWV1ZWRfc3ViZXhwX3ApOiBNYWtlIHB1YmxpYy4KCSogZXhwci5oIChxdWV1ZWRfc3ViZXhwX3ApOiBEZWNsYXJlIGl0LgoJKiByZWNvZy5jIChhc21fb3BlcmFuZF9vayk6IE5ldyBmdW5jdGlvbi4KCShjaGVja19hc21fb3BlcmFuZHMpOiBVc2UgaXQuICBBZnRlciByZWxvYWQsIHVzZSBjb25zdHJhaW5fb3BlcmFuZHMKCWluc3RlYWQuCgkqIHJlY29nLmggKGFzbV9vcGVyYW5kX29rKTogRGVjbGFyZSBpdC4KCSogc3RtdC5jIChleHBhbmRfYXNtX29wZXJhbmRzKTogVXNlIGl0IHRvIHRyeSBoYXJkZXIgdG8gbWFrZQoJYXNtcyBpbml0aWFsbHkgc2F0aXNmeSB0aGVpciBjb25zdHJhaW50cy4KCkZyaSBKYW4gMTUgMTc6NDM6NTkgMTk5OSAgSmVmZnJleSBBLiBMYXcgIDxsYXdAcnRsLmN5Z251cy5jb20+CgoJKiBzcGFyYy5oIChMRUdJVElNSVpFX1JFTE9BRF9BRERSRVNTKTogRG8gbm90IGNyZWF0ZQoJKG1lbSAobG9fc3VtICguLi4pKSBmb3IgVEZtb2RlIHVubGVzcyBUQVJHRVRfVjkuCgpTYXQgSmFuIDE2IDEyOjQ3OjE1IDE5OTkgIE1pY2hhZWwgSGF5ZXMgIDxtLmhheWVzQGVsZWMuY2FudGVyYnVyeS5hYy5uej4KCgkqIGNvbmZpZy9jNHgvYzR4Lm1kIChub3RfcmVwZWF0X3JlZyk6IEFsbG93IGxkcCBpbnN0cnVjdGlvbgoJaW4gZGVsYXkgc2xvdCBvZiBSUFRCRC4KClNhdCBKYW4gMTYgMTI6MjY6NDAgMTk5OSAgTWljaGFlbCBIYXllcyAgPG0uaGF5ZXNAZWxlYy5jYW50ZXJidXJ5LmFjLm56PgoKCSogY29uZmlnL2M0eC9saWJnY2MuUyAoX19fZGl2aGkzLCBfX19tb2RoaTMpOiBGaXggbG9uZyBsb25nCglkaXZpZGUgYW5kIG1vZHVsbyBzaWduIHByb2JsZW0uCgpGcmkgSmFuIDE1IDExOjAyOjMxIDE5OTkgIE1pY2hhZWwgSGF5ZXMgIDxtLmhheWVzQGVsZWMuY2FudGVyYnVyeS5hYy5uej4KCgkqIHVucm9sbC5jIChsb29wX2l0ZXJhdGlvbnMpOiBSZXR1cm4gMCBpZiB0aGUgbGFzdCBsb29wIGluc24KCWlzIG5vdCBhIGp1bXAgaW5zbiBvciBpZiB0aGUgbG9vcCBoYXMgbXVsdGlwbGUgYmFjayBlZGdlcy4KCjE5OTktMDEtMTUgIE1hbmZyZWQgSG9sbHN0ZWluICA8bWFuZnJlZEBzLWRpcmVrdG5ldC5kZT4KCgkqIGNvbmZpZ3VyZS5pbiAoZml4aW5jX2RlZnMpOiBEbyBub3QgZGVmaW5lIGZvciBtWzY4XThrLW1vdG9yb2xhLXN5c3Z7LDN9OwoJaXQncyB3b3JraW5nIHByb3Blcmx5IG5vdy4gIFJlbW92ZSBjb21tZW50IHNheWluZyAic2VlIG02OGstbW90b3JvbGEtc3lzdgoJYXMgYW4gZXhhbXBsZSIuCgkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZSB1c2luZyBhdXRvY29uZi4KCgkqIGZpeGluYy9maXhpbmNsLmMgKG1haW4pOiBEbyBub3QgaWdub3JlIFNJR0NITEQuCgpUaHUgSmFuIDE0IDIyOjM4OjQxIDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHVucm9sbC5jIChmaW5kX3NwbGl0dGFibGVfZ2l2cyk6IEZvciBhIERFU1RfQUREUiBnaXYsIGRvIG5vdCBzaGFyZQoJYSByZWdpc3RlciB3aXRoIGFub3RoZXIgREVTVF9BRERSIGdpdiBpZiB0aGUgYWRkcmVzcyBpcyBub3QgdmFsaWQuCgoJKiBwYS5jIChocHBhX2V4cGFuZF9lcGlsb2d1ZSk6IFNhdmUgYW5kIHJlc3RvcmUgdGhlIHN0YXRpYyBjaGFpbgoJYXJvdW5kIHRoZSBjYWxsIHRvIG1jb3VudC4KCgkqIGg4MzAwLmggKEFTTV9PVVRQVVRfTEFCRUxSRUYpOiBVc2UgYXNtX2ZwcmludGYsIG5vdCBmcHJpbnRmLgoKCSogc3RtdC5jIChleHBhbmRfZW5kX2Nhc2UpOiBVc2UgZW1pdF9jbXBfYW5kX2p1bXBfaW5zbnMgdG8gYXZvaWQKCWdlbmVyYXRpbmcgbm9uLWNhbm9uaWNhbCBydGwuCgoxOTk5LTAxLTE0ICBWbGFkaW1pciBOLiBNYWthcm92ICA8dm1ha2Fyb3ZAY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy9pOTYwL2k5NjAuYyAoaTk2MF9vdXRwdXRfbW92ZV9kb3VibGVfemVybywKCWk5NjBfb3V0cHV0X21vdmVfcXVhZF96ZXJvKTogTmV3IGZ1bmN0aW9ucyBmb3IgbW92aW5nIHplcm9zLgoJKGk5NjBfb3V0cHV0X21vdmVfZG91YmxlLCBpOTYwX291dHB1dF9tb3ZlX3F1YWQpOiBBZGRpdGlvbmFsIGNvZGUKCWZvciBzaXR1YXRpb24gd2hlbiBtb3ZpbmcgdW5hbGlnbmVkIHJlZ2lzdGVyIGdyb3VwLgoKCSogY29uZmlnL2k5NjAvaTk2MC5oIChpOTYwX291dHB1dF9tb3ZlX2RvdWJsZV96ZXJvLAoJaTk2MF9vdXRwdXRfbW92ZV9xdWFkX3plcm8pOiBUaGUgZnVuY3Rpb24gZGVmaW5pdGlvbnMuCgoJKiBjb25maWcvaTk2MC9pOTYwLm1kIChtb3ZkaSsxLCBtb3Z0aSsxKTogVXNhZ2Ugb2YgdGhlIGZ1bmN0aW9ucy4KCjE5OTktMDEtMTMgIFZsYWRpbWlyIE4uIE1ha2Fyb3YgIDx2bWFrYXJvdkBjeWdudXMuY29tPgoKCSogY29uZmlnL2k5NjAvaTk2MC5jIChpOTYwX2Z1bmN0aW9uX3Byb2xvZ3VlKTogTmV3IGNvZGUgKG9wdGltYWwKCXNvbHV0aW9uKSBmb3Igc2F2aW5nIGdsb2JhbCByZWdpc3RlcnMgaW4gbG9jYWwgcmVnaXN0ZXJzLgoJKGZvcm1fcmVnX2dyb3VwcywgcmVnX2dyb3VwX2NvbXBhcmUsIHNwbGl0X3JlZ19ncm91cCk6IE5ldwoJZnVuY3Rpb25zIHVzZWQgYnkgdGhlIGNvZGUuCgkocmVnX2dyb3VwKTogTmV3IHN0cnVjdHVyZSBkZWZpbml0aW9uIGZvciB0aGUgbmV3IGNvZGUuCgoxOTk5LTAxLTEzICBNYW5mcmVkIEhvbGxzdGVpbiAgPG1hbmZyZWRAcy1kaXJla3RuZXQuZGU+CgoJKiBmaXhpbmMvZml4aW5jbC5jIChjcmVhdGVfZmlsZSk6IFBhc3MgZmlsZSBjcmVhdGlvbiBtYXNrIGFzCgl0aGlyZCBwYXJhbWV0ZXIgdG8gIm9wZW4iLiAgVXNlIE9fVFJVTkMgZmxhZyB0byBvcGVuIGluc3RlYWQgb2YKCWV4cGxpY2l0bHkgdW5saW5rJ2luZyB0aGUgZmlsZS4KCShwcm9jZXNzKTogYW5kIGZvcmdldCBhYm91dCB0aGUgImNobW9kIiBzdHVmZi4KCldlZCBKYW4gMTMgMjA6MTI6MzcgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGludGVncmF0ZS5jIChleHBhbmRfaW5saW5lX2Z1bmN0aW9uKTogUmVjb2duaXplIChtZW0gKGFkZHJlc3NvZikpCglhbmQgc3Vic3RpdHV0ZS4gIENvcHkgdGhlIHJldHVybiB2YWx1ZSBmcm9tIHRoZXJlIGludG8gYSBuZXcgcHNldWRvLgoKV2VkIEphbiAxMyAxNjo0NzowMCAxOTk5ICBDYXRoZXJpbmUgTW9vcmUgIDxjbG1AY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy9hcm0uYyAob3V0cHV0X2Z1bmNfZXBpbG9ndWUpOiBDaGVjayBUQVJHRVRfQUJPUlRfTk9SRVRVUk4KCWJlZm9yZSBnZW5lcmF0aW5nIGEgY2FsbCB0byBhYm9ydCBmb3Igdm9sYXRpbGUgZnVuY3Rpb25zLgoJKiBjb25maWcvYXJtLmggKEFSTV9GTEFHX0FCT1JUX05PUkVUVVJOKTogRGVmaW5lLgoJKFRBUkdFVF9BQk9SVF9OT1JFVFVSTik6IERlZmluZS4KCShhYm9ydC1vbi1ub3JldHVybik6IE5ldyBvcHRpb24uCgpUaHUgSmFuIDE0IDEzOjUyOjQyIDE5OTkgIE1pY2hhZWwgSGF5ZXMgIDxtLmhheWVzQGVsZWMuY2FudGVyYnVyeS5hYy5uej4KCgkqIGNvbmZpZy9jNHgvYzR4Lm1kIChpbl9hbm51bF9zbG90XzMpOiBDb3JyZWN0bHkgYWxsb3cgdW5hcnljYwoJYW5kIGJpbmFyeWNjIG9wZXJhdGlvbnMgaW4gM3JkIGFubnVsbGVkIGRlbGF5IHNsb3QhCgpXZWQgSmFuIDEzIDE2OjE2OjQ0IDE5OTkgIENhdGhlcmluZSBNb29yZSAgPGNsbUBjeWdudXMuY29tPgoKCSogY29uZmlnL2FybS5jIChvdXRwdXRfZnVuY19lcGlsb2d1ZSk6IENoZWNrIFRBUkdFVF9BQk9SVF9OT1JFVFVSTgoJYmVmb3JlIGdlbmVyYXRpbmcgYSBjYWxsIHRvIGFib3J0IGZvciB2b2xhdGlsZSBmdW5jdGlvbnMuCgkqIGNvbmZpZy9hcm0uaCAoQVJNX0ZMQUdfQUJPUlRfTk9SRVRVUk4pOiBEZWZpbmUuCgkoVEFSR0VUX0FCT1JUX05PUkVUVVJOKTogRGVmaW5lLgoJKGFib3J0LW9uLW5vcmV0dXJuKTogTmV3IG9wdGlvbi4KCldlZCBKYW4gMTMgMTM6MzA6MDggMTk5OSAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogY2NjcC5jICh4c3RyZHVwKTogUmVuYW1lZCBmcm9tIGBzYXZlc3RyaW5nJy4gIEFsbCBjYWxsZXJzIGNoYW5nZWQuCglSZW1vdmUgcHJvdG90eXBlIHdoaWNoIHdlIGdldCBmcm9tIGxpYmliZXJ0eS5oLgoKCSogY29sbGVjdDIuYyAoeHN0cmR1cCk6IExpa2V3aXNlLgoKCSogZ2VuZXh0cmFjdC5jICh4c3RyZHVwKTogTGlrZXdpc2UgZm9yIGBjb3B5c3RyJy4KCShteWJ6ZXJvKTogUmVtb3ZlIGl0IGFuZCB1c2UgYG1lbXNldCcgaW5zdGVhZC4KCgkqIGdlbm91dHB1dC5jIChteWJjb3B5LCBteWJ6ZXJvKTogUmVtb3ZlIHRoZXNlLiAgQWxsIGNhbGxlcnMgY2hhbmdlZAoJdG8gdXNlIGBtZW1jcHknIGFuZCBgbWVtc2V0JyBpbnN0ZWFkLgoKCSogZ2VucmVjb2cuYyAoeHN0cmR1cCk6IFJlbmFtZWQgZnJvbSBgY29weXN0cicuICBBbGwgY2FsbGVycwoJY2hhbmdlZC4gIFJlbW92ZSBwcm90b3R5cGUuCgkobXliY29weSwgbXliemVybyk6IFJlbW92ZSB0aGVzZSBhbmQgdXNlIG1lbWNweS9tZW1zZXQuCgpXZWQgSmFuIDEzIDAwOjU5OjA0IDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIG1pcHMuaCAoTE9BRF9FWFRFTkRfT1ApOiBDb3JyZWN0IGZvciBTSW1vZGUgYW5kIENDbW9kZSBtb3ZlcyB3aGVuCglnZW5lcmF0aW5nIGNvZGUgZm9yIFRBUkdFVF82NEJJVC4KClR1ZSBKYW4gMTIgMTQ6MDU6MzcgMTk5OSAgRGF2aWQgRWRlbHNvaG4gIDxlZGVsc29obkBnbnUub3JnPgoKCSogcnM2MDAwLmMgKHByaW50X29wZXJhbmQsIGNhc2VzICdtJyBhbmQgJ00nKTogRG8gbm90IGRlcGVuZCBvbgoJSE9TVF9XSURFX0lOVCB3b3JkLXNpemUuCgkocnM2MDAwX3N0YWNrX2luZm8pOiBSZW1vdmUgcmVkdW5kYW50IGFsaWdubWVudCBvZiBmcG1lbS4KClR1ZSBKYW4gMTIgMTQ6MDU6MzcgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIHJzNjAwMC5jIChzaG9ydF9jaW50X29wZXJhbmQpOiBSZW1vdmUgQ09OU1RBTlRfUF9SVFggaGFuZGxpbmcuCgkodV9zaG9ydF9jaW50X29wZXJhbmQsIHJlZ19vcl9jaW50X29wZXJhbmQsIGxvZ2ljYWxfb3BlcmFuZCk6IExpa2V3aXNlLgoJKGlucHV0X29wZXJhbmQpOiBBZGp1c3QgQ09OU1RBTlRfUF9SVFggaGFuZGxpbmcuCgkqIHJzNjAwMC5oIChQUkVESUNBVEVfQ09ERVMpOiBSZW1vdmUgQ09OU1RBTlRfUF9SVFggcmVmZXJlbmNlcy4KCSogcnM2MDAwLm1kIChtb3ZzaSk6IEFkanVzdCBDT05TVEFOVF9QX1JUWCBoYW5kbGluZy4KCShtb3ZoaSwgbW92cWkpOiBSZW1vdmUgQ09OU1RBTlRfUF9SVFggaGFuZGxpbmcuCgkobW92ZGkpOiBBZGp1c3QgQ09OU1RBTlRfUF9SVFggaGFuZGxpbmcuCgoxOTk5LTAxLTEyICBNYW5mcmVkIEhvbGxzdGVpbiAgPG1hbmZyZWRAcy1kaXJla3RuZXQuZGU+CgoJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUgdXNpbmcgYXV0b2NvbmYuCgoJKiBmaXhpbmMvTWFrZWZpbGUuaW4gKElOQ0xVREVTKTogQWRkIC1JJChzcmNkaXIpLy4uLy4uL2luY2x1ZGUuCgkqIGZpeGluYy9maXhpbmNsLmMgKFNJR0NITEQpOiBVc2UgU0lHQ0xEIG9uICh2ZXJ5KSBvbGQgc3lzdGVtcy4KCShwcm9jZXNzKTogImZjaG1vZCIgaXNuJ3QgYXZhaWxhYmxlIG9uIGFsbCBzeXN0ZW1zLCB1c2UgImNobW9kIgoJaW5zdGVhZC4KCSogZml4aW5jL3NlcnZlci5jOiBBZGQgI2luY2x1ZGUgPHN5cy90eXBlcy5oPi4KCShTVERJTl9GSUxFTk8pOiBBZGQgZGVmYXVsdCBkZWZpbml0aW9uIGlmIG5vIGluY2x1ZGUgZmlsZSBkZWZpbmVzCglpdCBhbHJlYWR5LgoJKFNURE9VVF9GSUxFTk8pOiBMaWtld2lzZS4KClR1ZSBKYW4gMTIgMTA6MjM6MjQgMTk5OSAgU3RhbiBDb3ggIDxzY294QGN5Z251cy5jb20+CgoJKiBtaXBzLm1kIChjYWxsX3ZhbHVlX2ludGVybmFsM2MpOiBOZXcgcGF0dGVybiBmb3IgLW1pcHMxNiAtbWxvbmctY2FsbHMuCgoxOTk5LTAxLTEyICBNYW5mcmVkIEhvbGxzdGVpbiAgPG1hbmZyZWRAcy1kaXJla3RuZXQuZGU+CgoJKiBtNjhrL21vdDMzMDAuaCAoQUREX01JU1NJTkdfUE9TSVgsIEFERF9NSVNTSU5HX1hPUEVOKTogRGVmaW5lIHRvCgllbnN1cmUgYWxsIHByb3RvdHlwZXMgbmVjZXNzYXJ5IGZvciBidWlsZGluZyBsaWJpbyB3aWxsIGJlIGF2YWlsYWJsZS4KCSogbTY4ay94bS1tb3QzMzAwLmggKEFERF9NSVNTSU5HX1BPU0lYLCBBRERfTUlTU0lOR19YT1BFTik6IFJlbW92ZQoJZGVmaW5pdGlvbnMgaGVyZSBhcyB0aGV5IGFyZSBub3QgaG9zdCBzcGVjaWZpYy4KCSogbTg4ay9zeXN2My5oLCBtODhrL3htLXN5c3YzLmg6IExpa2V3aXNlLgoKVHVlIEphbiAxMiAwMjo1Mzo0NiAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogY3NlLmMgKGNzZV9pbnNuKTogTmV2ZXIgcHJlZmVyIChjb25zdCAoY29uc3RhbnRfcF9ydHgpKS4KClR1ZSBKYW4gMTIgMDI6MzY6MTAgMTk5OSAgSmVmZiBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHZlcnNpb24uYzogQnVtcCBmb3Igc25hcHNob3QuCgpUdWUgSmFuIDEyIDAxOjMwOjE5IDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBydGwuYyAocnR4X2FsbG9jKTogVXNlIG1lbXNldCBpbnN0ZWFkIG9mIGlubGluZSBsb29wLgoKCSogcmVjb2cuaCAocmVjb2dfb3BfYWx0KTogRGVjbGFyZSBleHRlcm4uCgpUdWUgSmFuIDEyIDAwOjIzOjMxIDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBmdW5jdGlvbi5jIChwdXJnZV9hZGRyZXNzb2ZfMSk6IElmIHRoZSBub3RlIGFjY2Vzc2VzIGEgbWVtK2FkZHJlc3NvZgoJaW4gYSB3aWRlciBtb2RlIHRoYW4gYW55IHJlcGxhY2VtZW50LCBhZGp1c3QgdGhlIGNhY2hlZCByZXBsYWNlbWVudC4KCUNhY2hlIHRyaXZpYWwgc3Vic3RpdHV0aW9ucyBhcyB3ZWxsLgoKVHVlIEphbiAxMiAwMDowNjowMCAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogTWFrZWZpbGUuaW4gKE9CSkVDVFMpOiBBZGQgc2JpdG1hcC5vLgoJKEJBU0lDX0JMT0NLX0gpOiBBZGQgc2JpdG1hcC5oLgoJKiBiYXNpYy1ibG9jay5oOiBNb3ZlIHNpbXBsZSBiaXRtYXAgY29kZSB0byBzYml0bWFwLmguCgkqIGZsb3cuYzogTW92ZSBzaW1wbGUgYml0bWFwIGNvZGUgdG8gc2JpdG1hcC5jLgoJKiBzYml0bWFwLmgsIHNiaXRtYXAuYzogTmV3IGZpbGVzLgoKTW9uIEphbiAxMSAyMzo1MTo1MCAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogYWxwaGEuaCAoVEFSR0VUX1NXSVRDSEVTKTogRG9jdW1lbnQgc3dpdGNoZXMuCgkoVEFSR0VUX09QVElPTlMpOiBMaWtld2lzZS4KCgkqIGFscGhhL2VsZi5oIChBU01fRklOSVNIX0RFQ0xBUkVfT0JKRUNUKTogVXNlIEhPU1RfV0lERV9JTlRfUFJJTlRfREVDLgoKTW9uIEphbiAxMSAyMjo1NDoxNCAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogdHJlZS5jIChuZXdfYWxpYXNfc2V0KTogUmV0dXJuIHplcm8gaWYgIWZsYWdfc3RyaWN0X2FsaWFzaW5nLgoKTW9uIEphbiAxMSAyMjozNjowMSAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogYmFzaWMtYmxvY2suaCAoYmFzaWNfYmxvY2tfaGVhZCk6IFJlbmFtZSB0byB4X2Jhc2ljX2Jsb2NrX2hlYWQuCgkoYmFzaWNfYmxvY2tfZW5kKTogUmVuYW1lIHRvIHhfYmFzaWNfYmxvY2tfZW5kLgoJKEJMT0NLX0hFQUQsIEJMT0NLX0VORCk6IFVwZGF0ZS4KCgkqIGNhbGxlci1zYXZlLmM6IENoYW5nZSBiYXNpY19ibG9ja19oZWFkL2VuZCByZWZlcmVuY2VzIHRvCglCTE9DS19IRUFEL0VORC4KCSogY29tYmluZS5jLCBmbG93LmMsIGZ1bmN0aW9uLmMsIGdjc2UuYywgZ2xvYmFsLmM6IExpa2V3aXNlLgoJKiBncmFwaC5jLCBoYWlmYS1zY2hlZC5jLCBsb2NhbC1hbGxvYy5jLCByZWdjbGFzcy5jOiBMaWtld2lzZS4KCSogcmVnbW92ZS5jLCByZWxvYWQxLmMsIHJlb3JnLmMsIHNjaGVkLmM6IExpa2V3aXNlLgoKU2F0IEphbiAgOSAyMzo1NDowOSAxOTk5ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBnY2MuYyAoeHN0cmVycm9yKTogUmVuYW1lZCBmcm9tIG15X3N0cmVycm9yLiAgQWxsIGNhbGxlcnMKCWNoYW5nZWQuICBSZW1vdmUgcHJvdG90eXBlIHNpbmNlIHdlIGdldCB0aGF0IGZyb20gbGliaWJlcnR5LmguCgoJKiBwcm90b2l6ZS5jICh4c3RyZXJyb3IpOiBMaWtld2lzZS4KClNhdCBKYW4gIDkgMjM6MjI6MDQgMTk5OSAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogZ2NjLmMgKHJlYWRfc3BlY3MpOiBFbnN1cmUgZm9ybWF0IHNwZWNpZmllcnMgbWF0Y2ggdGhlaXIgYXJndW1lbnRzLgoKU2F0IEphbiAgOSAyMDowNDoyNCAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogdHJlZS5jIChjb3B5X25vZGUpOiBPb3BzLiAgVGhhdCB3b3VsZCBiZSBjb3B5IG5vdCB6ZXJvCglpbiB0aGF0IGxhc3QgY2hhbmdlLgoKU3VuIEphbiAxMCAxNTozNTo0MSAxOTk5ICBNaWNoYWVsIEhheWVzICA8bS5oYXllc0BlbGVjLmNhbnRlcmJ1cnkuYWMubno+CgoJKiBjb25maWcvYzR4L2M0eC5jOiBJbmNsdWRlIHN5c3RlbS5oLgoJKGM0eF9jYWxsZXJfc2F2ZV9tYXApOiBEaXNhYmxlIGNhbGxlciBzYXZlIGZvciBSQy4KCShjNHhfb3B0aW1pemF0aW9uX29wdGlvbnMpOiBEaXNhYmxlIHNjaGVkdWxpbmcgYmVmb3JlIHJlbG9hZC4KCSh2YWxpZF9wYXJhbGxlbF9sb2FkX3N0b3JlKSA6IERlZmluZSByZXR1cm4gdHlwZSBhcyBpbnQuCglSZW1vdmUgdW51c2VkIHZhcmlhYmxlIHJlZ3MuCgkqIGNvbmZpZy9jNHgvYzR4LmggKFJFR0lTVEVSX01PVkVfQ09TVCk6IE1ha2UgaW5kZXBlbmRlbnQgb2YgcmVnaXN0ZXIKCWNsYXNzLgoJKiBjb25maWcvYzR4L2M0eC5tZCAocm90bHFpMywgcm90cnFpMyk6IEZpeCB1cCBlbWl0dGVkIFJUTCB0bwoJaGFuZGxlIHJvdGF0aW9ucy4KCSgqZGIsIGRlY3JlbWVudF9hbmRfYnJhbmNoX3VudGlsX3plcm8pOiBGaXggdXAgY29uc3RyYWludHMKCXRvIGtlZXAgcmVsb2FkIGhhcHB5LgoKU2F0IEphbiAgOSAxODozNToyOSAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogdHJlZS5jIChtYWtlX25vZGUpOiBDYWxsIGJ6ZXJvIGluc3RlYWQgb2YgaW5saW5lIGNsZWFyLgoJKGNvcHlfbm9kZSwgbWFrZV90cmVlX3ZlYywgYnVpbGQxKTogTGlrZXdpc2UuCgkoZ2V0X2lkZW50aWZpZXIpOiBDYWxsIHN0cmxlbiBpbnN0ZWFkIG9mIGlubGluZSBjb3VudC4KCShtYXliZV9nZXRfaWRlbnRpZmllcik6IExpa2V3aXNlLgoKU3VuIEphbiAxMCAxNDowNDo1MSAxOTk5ICBNaWNoYWVsIEhheWVzICA8bS5oYXllc0BlbGVjLmNhbnRlcmJ1cnkuYWMubno+CgoJKiBjb25maWcvYzR4L2M0eC5tZCAoaW5fYW5udWxfc2xvdF8zKTogQWxsb3cgdW5hcnljYyBhbmQgYmluYXJ5Y2MKCW9wZXJhdGlvbnMgaW4gM3JkIGFubnVsbGVkIGRlbGF5IHNsb3QuCgkoKmxzaHJxaTNfY29uc3Rfc2V0KTogRGlzYWxsb3cgYyBjb25zdHJhaW50IGZvciBvcGVyYW5kMC4KCShtb2RoaTMrMSwgbW9kaGkzKzIpOiBTZXQgYXR0cmlidXRlIHR5cGUgdG8gbXVsdGkuCgkqIGNvbmZpZy9jNHgvYzR4LmMgKGM0eF9TX2NvbnN0cmFpbnQpOiBSZW1vdmVkIHNwYWNlIGluIG1pZGRsZSBvZgoJIT0gb3BlcmF0b3IuCgpTYXQgSmFuICA5IDExOjQ0OjU1IDE5OTkgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGdhbnNpZGVjbC5oOiBBbGxvdyBhdHRyaWJ1dGUgdW51c2VkIG9uIGxhYmVscyBvbmx5IHdoZW4gd2UgYXJlCgl2ZXJzaW9uIDIuOTMgb3IgaGlnaGVyLiAgTm90IGFsbCB2ZXJzaW9ucyBvZiAyLjkyIGhhdmUgdGhpcyBmZWF0dXJlLgoKCSogdmVyc2lvbi5jOiBCdW1wIG1pbm9yIG51bWJlciB0byA5My4KCkZyaSBKYW4gIDggMTA6NTE6MTMgMTk5OSAgQW5kcmVhcyBTY2h3YWIgIDxzY2h3YWJAaXNzYW4uY3MudW5pLWRvcnRtdW5kLmRlPgoKCSogY29uZmlnL202OGsvbTY4ay5oOiBEZWNsYXJlIG91dHB1dF9mdW5jdGlvbl9lcGlsb2d1ZS4KCSogcmVjb2cuaDogRGVjbGFyZSBuZXh0X2luc25fdGVzdHNfbm9faW5lcXVhbGl0eS4KCkZyaSBKYW4gIDggMDE6NDM6NTMgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogc3RtdC5jIChvcHRpbWl6ZV90YWlsX3JlY3Vyc2lvbik6IE5ldyBmdW5jdGlvbiwgZXh0cmFjdGVkIGZyb20gLi4uCgkoZXhwYW5kX3JldHVybik6IFVzZSBvcHRpbWl6ZV90YWlsX3JlY3Vyc2lvbi4KCSogdHJlZS5oIChvcHRpbWl6ZV90YWlsX3JlY3Vyc2lvbik6IERlY2xhcmUuCgoJKiB0b3BsZXYuYyAoY29tcGlsZV9maWxlKTogTW92ZSBjYWxsIHRvIG91dHB1dF9mdW5jX3N0YXJ0X3Byb2ZpbGVyCgl0byBhZnRlciB0aGUgbG9vcCB0byBlbWl0IGRlZmVycmVkIGZ1bmN0aW9ucy4KClRodSBKYW4gIDcgMTk6NTI6NTMgMTk5OSAgR2VyYWxkIFBmZWlmZXIgIDxwZmVpZmVyQGRiYWkudHV3aWVuLmFjLmF0PgoKCSogc3lzdGVtLmggKGFib3J0KTogU3VwcGx5IG1vcmUgZGV0YWlsZWQgaW5mb3JtYXRpb24gb24gaG93IHRvCglyZXBvcnQgYW4gSW50ZXJuYWwgQ29tcGlsZXIgRXJyb3IuCgpUaHUgSmFuICA3IDA5OjI1OjU4IDE5OTkgIEJydWNlIEtvcmIgIChrb3JiQGRhdGFkZXNpZ24uY29tKQoKCSogZml4aW5jL2ZpeGluY2wuYyAoKik6IE1vcmUgZGVjYXBpdGFsaXphdGlvbiBvZiB2YXJpYWJsZXMKCXBsdXMgc29tZSBleHBsYW5hdG9yeSBjb21tZW50cy4KCgkqIGZpeGluYy9NYWtlZmlsZS5pbiBmaXhpbmMvbWtmaXhpbmMuc2g6CglXaGVuIHRoZSBmaXhpbmNsIHByb2dyYW0gZG9lcyBub3Qgd29yayBmb3IgYSBjZXJ0YWluIHN5c3RlbSwKCXdlIHN1YnN0aXR1dGUgYSBzaGVsbCBzY3JpcHQuICBBZGRlZCB1c2VyIGNvbW1lbnRhcnkgd2hlbgoJdGhpcyBoYXBwZW5zLgoKVGh1IEphbiAgNyAxMToyNjoxNyAxOTk5ICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogY2FsbHMuYyAoc3RvcmVfdW5hbGlnbmVkX2FyZ3VtZW50c19pbnRvX3BzZXVkb3MpOiBVc2UgeG1hbGxvYyB0bwoJYWxsb2NhdGUgbWVtb3J5IHRoYXQgd2lsbCBsaXZlIGJleW9uZCB0aGlzIGZ1bmN0aW9uLgoJKGV4cGFuZF9jYWxsKTogRnJlZSBpdCBoZXJlLgoKVGh1IEphbiAgNyAwMzowODoxNyAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogc3BhcmMuaCAoUFJFRkVSUkVEX1JFTE9BRF9DTEFTUyk6IFNlbGVjdCBHRU5FUkFMX1JFR1MgZm9yCglpbnRlZ2VyIGRhdGEgbm90IGRlc3RpbmVkIGZvciBmcCByZWdzLgoJKExFR0lUSU1JWkVfUkVMT0FEX0FERFJFU1MpOiBOZXcuCgpUaHUgSmFuICA3IDAzOjAzOjQyIDE5OTkgIFN0YW4gQ294ICA8c2NveEBjeWdudXMuY29tPgoJCQkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJU3VwcG9ydCBmb3IgSHlwZXJTUEFSQyBhbmQgU1BBUkNsaXRlODZ4OgoJKiBzcGFyYy5oIChUQVJHRVRfQ1BVX2h5cGVyc3BhcmMsIFRBUkdFVF9DUFVfc3BhcmNsaXRlODZ4KTogTmV3LgoJKENQUF9DUFUzMl9ERUZBVUxUX1NQRUMpOiBGaXggdXAgZm9yIHRoZSBuZXcgdGFyZ2V0cy4KCShBU01fQ1BVMzJfREVGQVVMVF9TUEVDKTogTGlrZXdpc2UuCgkoVEFSR0VUX0NQVV9ERUZBVUxUKTogTGlrZXdpc2UuCgkoZW51bSBwcm9jZXNzb3JfdHlwZSk6IExpa2V3aXNlLgoJKENQUF9FTkRJQU5fU1BFQyk6IEhhbmRsZSBsaXR0bGUgZW5kaWFuIGRhdGEuCgkoTElCR0NDMl9XT1JEU19CSUdfRU5ESUFOKTogTGlrZXdpc2UuCgkoQURKVVNUX0NPU1QpOiBDYWxsIHNwYXJjX2FkanVzdF9jb3N0LgoJKiBzcGFyYy5jIChzcGFyY19vdmVycmlkZV9vcHRpb25zKTogRml4IHVwIGZvciB0aGUgbmV3IHRhcmdldHMuCgkoc3VwZXJzcGFyY19hZGp1c3RfY29zdCk6IE1ha2Ugc3RhdGljLgoJKGh5cGVyc3BhcmNfYWRqdXN0X2Nvc3QpOiBOZXcuCgkodWx0cmFzcGFyY19hZGp1c3RfY29zdCk6IE1ha2Ugc3RhdGljLgoJKHNwYXJjX2FkanVzdF9jb3N0KTogTmV3LgoJKiBzcGFyYy5tZCAoYXR0ciBjcHUpOiBBZGQgaHlwZXJzcGFyYyBhbmQgc3BhcmNsaXRlODZ4LgoJKGZ1bmN0aW9uX3VuaXQpOiBBZGQgaHlwZXJzcGFyYyBzY2hlZHVsaW5nIHJ1bGVzLgoKCSogY29uZmlndXJlLmluICh3aXRoX2NwdSBoYW5kbGVyKTogUmVjb2duaXplIGh5cGVyc3BhcmMuCgpUaHUgSmFuICA3IDIzOjU0OjA1IDE5OTkgIE1pY2hhZWwgSGF5ZXMgIDxtLmhheWVzQGVsZWMuY2FudGVyYnVyeS5hYy5uej4KCgkqIGNvbmZpZy9jNHgvYzR4LmM6IEFkZGVkIHNwYWNlIGFmdGVyIG5lZ2F0aW9uIG9wZXJhdG9yLgoJKiBjb25maWcvYzR4L2M0eC5oOiBMaWtld2lzZS4KCSogY29uZmlnL2M0eC9jNHgubWQ6IExpa2V3aXNlLgoKVGh1IEphbiAgNyAyMzozOToyNyAxOTk5ICBNaWNoYWVsIEhheWVzICA8bS5oYXllc0BlbGVjLmNhbnRlcmJ1cnkuYWMubno+CgoJKiBjb25maWcvYzR4L2M0eC5jIChjNHhfcHJlZmVycmVkX3JlbG9hZF9jbGFzcyk6IEFsd2F5cyByZXR1cm4gY2xhc3MuCgpUaHUgSmFuICA3IDAwOjI5OjI1IDE5OTkgIEJlcm5kIFNjaG1pZHQgIDxjcnV4QHBvb2wuaW5mb3JtYXRpay5yd3RoLWFhY2hlbi5kZT4KCgkqIGNvbWJpbmUuYyAobnVtX3NpZ25fYml0X2NvcGllcyk6IEluIE5FRywgTVVMVCwgRElWIGFuZCBNT0QgY2FzZXMsCgl3aGVuIGEgdGVzdCBjYW4ndCBiZSBwZXJmb3JtZWQgZHVlIHRvIGxpbWl0ZWQgd2lkdGggb2YKCUhPU1RfQklUU19QRVJfV0lERV9JTlQsIHVzZSB0aGUgbW9yZSBjb25zZXJ2YXRpdmUgYXBwcm94aW1hdGlvbi4KCUZpeCBVRElWIGNhc2UgZm9yIGNhc2VzIHdoZXJlIHRoZSBmaXJzdCBvcGVyYW5kIGhhcyB0aGUgaGlnaGVzdCBiaXQKCXNldC4KClRodSBKYW4gIDcgMDA6MDE6MzggMTk5OSAgTHV0eiBWaWV3ZWcgIDxsa3ZAbWFuaWEucm9iaW4uZGU+CgoJKiBwYS5oIChyZWdfY2xhc3MpOiBBZGQgRlBVUFBFUl9SRUdTLgoJKFJFR19DTEFTU19OQU1FUyk6IFNpbWlsYXJseS4KCShSRUdfQ0xBU1NfQ09OVEVOVFMpOiBTaW1pbGFybHkuCgkoUkVHTk9fUkVHX0NMQVNTKTogSGFuZGxlIEZQVVBQRVJfUkVHUy4KCShGUF9SRUdfQ0xBU1NfUCk6IExpa2V3aXNlLgoJKFJFR19DTEFTU19GUk9NX0xFVFRFUik6IFNpbWlsYXJseS4KCShDTEFTU19NQVhfTlJFR1MpOiBTaW1pbGFybHkuCgoxOTk5LTAxLTA2ICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBjeWdudXMuY29tPgoKCSogZml4aW5jbHVkZXM6IEZvciBIUC9VWCAxMC4yMCwgYWxzbyBsb29rIGluIGN1cnNlc19jb2xyL2N1cnNlcy5oCglmb3IgYSB0eXBlZGVmIG9mIGJvb2wuICBNYWtlIHN1cmUgdG8gaGF2ZSBhIGNvcHkgb2YgdGhlIGZpbGUgaXMKCWluIHBsYWNlIGJlZm9yZSB3ZSBsb29rIHRvIGZpeCBpdC4gIEZpeCB0eXBvIGluIHZhcmlhYmxlIG5hbWUgdG8KCUZJTEUuCgpXZWQgSmFuICA2IDA3OjUxOjA1IDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBleHByLmMgKGV4cGFuZF9idWlsdGluKSBbY2FzZSBCVUlMVF9JTl9DT05TVEFOVF9QXTogVXNlCgl2YWx1ZV9tb2RlIGZvciB0aGUgcmV0dXJuIG1vZGUuCgpXZWQgSmFuICA2IDE3OjU1OjE5IDE5OTkgIFJvYmVydCBMaXBlICA8cm9iZXJ0bGlwZUB1c2EubmV0PgoKCSogY29uZmlndXJlLmluOiBOZXcgZmxhZyAtLXdpdGgtZHdhcmYyLiAgSWYgc2V0LCBlbmFibGVzIERXQVJGLTIKCWRlYnVnZ2luZyBhcyBkZWZhdWx0LgoKCSogY29uZmlnL3RtLWR3YXJmMi5oOiBOZXcgZmlsZS4KCldlZCBKYW4gIDYgMTY6MDg6NTQgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogaDgzMDAuaCAoQVNNX09VVFBVVF9MQUJFTFJFRik6IERlZmluZS4KCgkqIHBhLmggKERPTlRfUkVDT1JEX0VRVUlWQUxFTkNFKTogS2lsbC4KCSogbG9jYWwtYWxsb2MuYyAodXBkYXRlX2VxdWl2X3JlZ3MpOiBDb3JyZXNwb25kaW5nIGNoYW5nZXMuCgkqIHRtLnRleGkgKERPTlRfUkVDT1JEX0VRVUlWQUxFTkNFKTogS2lsbC4KCgkqIGNhbGxzLmMgKHNwZWNpYWxfZnVuY3Rpb25fcCk6IFB1c2ggYWxsb2NhIHRlc3QgaW5zaWRlIHRoZSBsYXJnZQoJY29uZGl0aW9uYWwgd2hpY2ggZXhjbHVkZXMgZnVuY3Rpb25zIG5vdCBhdCBmaWxlIHNjb3BlIG9yIG5vdAoJZXh0ZXJuLgoKCSogY2FsbHMuYyAoc3BlY2lhbF9mdW5jdGlvbl9wKTogTmV3IGZ1bmN0aW9uIGJyb2tlbiBvdXQgb2YKCWV4cGFuZF9jYWxsLgoJKHByZWNvbXB1dGVfcmVnaXN0ZXJfcGFyYW1ldGVycyk6IExpa2V3aXNlLgoJKHN0b3JlX29uZV9hcmcpOiBMaWtld2lzZS4KCShzdG9yZV91bmFsaWduZWRfYXJndW1ldG5zX2ludG9fcHNldWRvcyk6IExpa2V3aXNlLgoJKHNhdmVfZml4ZWRfYXJndW1lbnRfYXJlYSk6IExpa2V3aXNlLgoJKHJlc3RvcmVfZml4ZWRfYXJndW1lbnRfYXJlYSk6IExpa2V3aXNlLgoJKGV4cGFuZF9jYWxsKTogQ29ycmVzcG9uZGluZyBjaGFuZ2VzLgoKVGh1IEphbiAgNyAwMDoxMjoyNCAxOTk5ICBNaWNoYWVsIEhheWVzICA8bS5oYXllc0BlbGVjLmNhbnRlcmJ1cnkuYWMubno+CgoJKiBjb25maWcvYzR4L2M0eC5tZCAoYWRkcWkzKTogSWYgdGhlIGRlc3RpbmF0aW9uIG9wZXJhbmQgaXMKCWEgaGFyZCByZWdpc3RlciBvdGhlciB0aGFuIGFuIGV4dGVuZGVkIHByZWNpc2lvbiByZWdpc3RlciwKCWVtaXQgYWRkcWkzX25vY2xvYmJlci4KCSgqYWRkcWkzX25vY2xvYmJlcl9yZWxvYWQpOiBOZXcgcGF0dGVybiBhZGRlZCBzbyB0aGF0IHJlbG9hZAoJd2lsbCByZWNvZ25pemUgYSBzdG9yZSBvZiBhIHBzZXVkbywgZXF1aXZhbGVudCB0byB0aGUgc3VtCglvZiB0aGUgZnJhbWUgcG9pbnRlciBhbmQgYSBjb25zdGFudCwgYXMgYW4gYWRkIGluc24uCgoxOTk5LTAxLTA2ICBNYW5mcmVkIEhvbGxzdGVpbiAgPG1hbmZyZWRAcy1kaXJla3RuZXQuZGU+CgoJKiBmaXhpbmMvZml4aW5jbC5jOiBSZS1pbmRlbnQgYWNjb3JkaW5nIHRvIHRoZSBHTlUgc3RhbmRhcmRzLgoJZml4aW5jL3NlcnZlci5jOiBMaWtld2lzZS4KCWZpeGluYy9zZXJ2ZXIuaDogTGlrZXdpc2UuCgpXZWQgSmFuICA2IDEwOjQzOjI5IDE5OTkgIEFuZHJlYXMgU2Nod2FiICA8c2Nod2FiQGlzc2FuLmNzLnVuaS1kb3J0bXVuZC5kZT4KCgkqIGNvbmZpZy9tNjhrL202OGsuYyAoY29uc3RfdWludDMyX29wZXJhbmQpOiBSZW1vdmUgQ09OU1RBTlRfUF9SVFgKCWhhbmRsaW5nLgoJKGNvbnN0X3NpbnQzMl9vcGVyYW5kKTogTGlrZXdpc2UuCgpXZWQgSmFuICA2IDA5OjQ0OjUxIDE5OTkgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIHRvcGxldi5oOiBJbiBhZGRpdGlvbiB0byBjaGVja2luZyBfSkJMRU4sIGFsc28gY2hlY2sgaWYgYHNldGptcCcKCWlzIGEgbWFjcm8gd2hlbiBkZWNpZGluZyBpZiB3ZSBjYW4gdXNlIGBqbXBfYnVmJyBpbiBwcm90b3R5cGVzLgoKV2VkIEphbiAgNiAwMzoxODo1MyAxOTk5ICBNYXJrIEVsYnJlY2h0ICA8c25vd2JhbGwzQHVzYS5uZXQ+CgoJKiBjb25maWd1cmUuaW4gKHBjLW1zZG9zZGpncHApOiBTZXQgeF9tYWtlIHRvIHgtZ28zMi4KCSogY29uZmlndXJlOiBSZWJ1aWx0LgoJKiBpMzg2L3htLWdvMzIuaDogRGVmaW5lIExJQlNURENYWC4KCSogaTM4Ni94LWdvMzI6IE5ldy4KCSogaTM4Ni9nbzMyLmggKE1EX0VYRUNfUFJFRklYKTogRGVmaW5lLgoJKEZJTEVfTkFNRV9BQlNPTFVURV9QKTogRGVmaW5lLgoJKExJTktfQ09NTUFORF9TUEVDKTogRGVmaW5lLgoKV2VkIEphbiAgNiAwMjoyMzozNiAxOTk5ICAiQ2hhcmxlcyBNLiBIYW5udW0iICA8cm9vdEBpaGFjay5uZXQ+CgoJKiBleHByLmMgKHN0b3JlX2V4cHIpOiBJZiB0aGUgbGhzIGlzIGEgbWVtb3J5IGxvY2F0aW9uIHBvaW50ZWQKCXRvIGJlIGEgcG9zdGluY3JlbWVudGVkIChvciBwb3N0ZGVjcmVtZW50ZWQpIHBvaW50ZXIsIGFsd2F5cwoJZm9yY2UgdGhlIHJocyB0byBiZSBldmFsdWF0ZWQgaW50byBhIHBzZXVkby4KCldlZCBKYW4gIDYgMDA6NTQ6MjEgMTk5OSAgR2VvZmYgS2VhdGluZyAgPGdlb2Zma0BvemVtYWlsLmNvbS5hdT4KCgkqIHJlYWwuYyAobXRoZXJyKTogUHJpbnQgbW9yZSByZWFzb25hYmxlIHdhcm5pbmcgbWVzc2FnZXMuCgpUdWUgSmFuICA1IDIxOjU3OjQyIDE5OTkgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIE1ha2VmaWxlLmluIChnY2MubywgcHJlZml4Lm8sIGNjY3AubywgY3BwbGliLm8pOiBEZXBlbmQgb24gcHJlZml4LmguCgoJKiBjY2NwLmM6IEluY2x1ZGUgcHJlZml4LmgsIGRvbid0IHByb3RvdHlwZSBwcmVmaXguYyBmdW5jdGlvbnMuCgkobmV3X2luY2x1ZGVfcHJlZml4KTogQ29uc3RpZnkgY2hhciogcGFyYW1ldGVycy4KCgkqIGNwcGZpbGVzLmMgKHJlYWRfbmFtZV9tYXApOiBMaWtld2lzZS4KCShhcHBlbmRfaW5jbHVkZV9jaGFpbik6IExpa2V3aXNlLiAgQWxzbywgdXNlIGEgd3JpdGFibGUgY2hhciogY29weQoJb2YgcGFyYW1ldGVyIGBkaXInIHdoaWNoIHdlIHRoZW4gbW9kaWZ5LCByYXRoZXIgdGhhbiB1c2luZyB0aGUKCXBhcmFtZXRlciBpdHNlbGYgdG8gc3RvcmUgdGhlIG5ldyB3cml0YWJsZSBzdHJpbmcuCgkocmVtYXBfZmlsZW5hbWUpOiBDb25zdGlmeSBzb21lIHZhcmlhYmxlcy4gIEFsc28sIHVzZSBhIHdyaXRhYmxlCgljaGFyKiB0byBzdG9yZSBhbiBhbGxvY2F0ZWQgc3RyaW5nIHdoaWNoIHdlIHdpbGwgYmUgbW9kaWZ5aW5nLgoKCSogY3BwbGliLmM6IEluY2x1ZGUgcHJlZml4LmgsIGRvbid0IHByb3RvdHlwZSBwcmVmaXguYyBmdW5jdGlvbnMuCgkoY3BwX3N0YXJ0X3JlYWQpOiBDb25zdGlmeSB2YXJpYWJsZSBgc3RyJy4KCgkqIGNwcGxpYi5oIChhcHBlbmRfaW5jbHVkZV9jaGFpbik6IENvbnN0aWZ5IGEgY2hhciogcGFyYW1ldGVyLgoKCSogZ2NjLmMgSW5jbHVkZSBwcmVmaXguaCwgZG9uJ3QgcHJvdG90eXBlIHByZWZpeC5jIGZ1bmN0aW9ucy4KCShhZGRfcHJlZml4LCBzYXZlX3N0cmluZyk6IENvbnN0aWZ5IGNoYXIqIHBhcmFtZXRlcnMuCgkoZmF0YWwsIGVycm9yKTogQWRkIEFUVFJJQlVURV9QUklOVEZfMSB0byBwcm90b3R5cGVzLgoKCSogcHJlZml4LmM6IEluY2x1ZGUgcHJlZml4LmguCgkoZ2V0X2tleV92YWx1ZSwgdHJhbnNsYXRlX25hbWUsIHNhdmVfc3RyaW5nLCB1cGRhdGVfcGF0aCwKCXNldF9zdGRfcHJlZml4KTogQ29uc3RpZnkgdmFyaW91cyBjaGFyKiBwYXJhbWV0ZXJzIGFuZCB2YXJpYWJsZXMuCgkoc2F2ZV9zdHJpbmcpOiBVc2UgeG1hbGxvYywgbm90IG1hbGxvYy4KCSh0cmFuc2xhdGVfbmFtZSk6IFVzZSBhIHdyaXRhYmxlIHRlbXBvcmFyeSB2YXJpYWJsZSB0byBjcmVhdGUgYW5kCgltb2RpZnkgYSBzdHJpbmcgYmVmb3JlIHNldHRpbmcgaXQgdG8gYSBjb25zdCBjaGFyKi4KCgkqIHByZWZpeC5oOiBOZXcgZmlsZSB0byBwcm90b3R5cGUgZnVuY3Rpb25zIGV4cG9ydGVkIGZyb20gcHJlZml4LmMuCgpUdWUgSmFuICA1IDA4OjUyOjE4IDE5OTkgIEJydWNlIEtvcmIgIChrb3JiQGRhdGFkZXNpZ24uY29tKQoKCSogZml4aW5jL2ZpeGluY2wuYyAodmFyaW91cyk6IEFkZGVkIGRlYnVnIGNvZGUgc28KCU1hbmZyZWQgY2FuIHRyYWNlIHRoZSBwcm9jZXNzaW5nLgoKCSogZml4aW5jL2luY2xoYWNrLmRlZiAoc3lzL3V0c25hbWUuaCk6IFByb3ZpZGUgZm9yd2FyZCBkZWNsYXJhdGlvbiBvZgoJc3RydWN0IHV0c25hbWUgb24gVWx0cml4IFY0LlszNV0uCgoJKiBmaXhpbmMve2ZpeGluY2wueHxmaXhpbmNsLnNofGluY2xoYWNrLnNofSA6IFJlZ2VuZXJhdGVkLgoKTW9uIEphbiAgNCAxNTozNzozMCAxOTk5ICBaYWNrIFdlaW5iZXJnICA8emFja0ByYWJpLnBoeXMuY29sdW1iaWEuZWR1PgoKCSogY3BwbGliLmMgKHNraXBfaWZfZ3JvdXApOiBTcGxpdCBvdXQgdGhlIGxvZ2ljIHRoYXQgaGFuZGxlcwoJZGlyZWN0aXZlIHJlY29nbml0aW9uIHRvIGl0cyBvd24gZnVuY3Rpb24uICBEb24ndCB1c2UKCXBhcnNlIG1hcmtlcnM7IHVzZSBhIGJhcmUgcG9pbnRlciBpbnRvIHRoZSBidWZmZXIuICBVc2UKCWNvcHkvc2tpcF9yZXN0X29mX2xpbmUgaW5zdGVhZCBvZiBkb2luZyBpdCBieSBoYW5kLiAgUmVtb3ZlCglgcmV0dXJuIG9uIGFueSBkaXJlY3RpdmUnIG1vZGUgd2hpY2ggd2FzIG5ldmVyIHVzZWQsIGFuZCB0YWtlCglvbmx5IG9uZSBhcmd1bWVudC4KCShjb25zaWRlcl9kaXJlY3RpdmVfd2hpbGVfc2tpcHBpbmcpOiBOZXcgZnVuY3Rpb24sIHN1YnJvdXRpbmUKCW9mIHNraXBfaWZfZ3JvdXAuICBMb2dpYyBzdHJlYW1saW5lZCBhIGJpdC4KCShjb25kaXRpb25hbF9za2lwLCBkb19lbGlmLCBkb19lbHNlKTogQ2FsbCBza2lwX2lmX2dyb3VwIHdpdGgKCW9ubHkgb25lIGFyZ3VtZW50LgoKTW9uIEphbiAgNCAxNToyNzozMCAxOTk5ICBaYWNrIFdlaW5iZXJnICA8emFja0ByYWJpLnBoeXMuY29sdW1iaWEuZWR1PgoKCSogY3BwbGliLmMgKGRvX3VuZGVmKTogRU9GIGltbWVkaWF0ZWx5IGFmdGVyICcjdW5kZWYgRk9PJyBpcyBub3QgYW4KCWVycm9yLgoKTW9uIEphbiAgNCAxMTo1NTo1MSAxOTk5ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBleHRlbmQudGV4aSAoQm91bmQgbWVtYmVyIGZ1bmN0aW9ucyk6IERvY3VtZW50LgoKTW9uIEphbiAgNCAxMTowMTo0OCAxOTk5ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBtaXBzLXRkdW1wLmMgKHN0X3RvX3N0cmluZywgc2NfdG9fc3RyaW5nLCBnbGV2ZWxfdG9fc3RyaW5nLAoJbGFuZ190b19zdHJpbmcsIHR5cGVfdG9fc3RyaW5nKTogTWFrZSByZXR1cm4gdHlwZSBjb25zdCBjaGFyKi4KCShwcmludF9zeW1ib2wpOiBBcHBseSBgY29uc3QnIGtleXdvcmQgdG8gYSBjaGFyKi4KCShwcmludF9maWxlX2Rlc2MpOiBDYXN0IHN0cnVjdHVyZSBtZW1iZXIgYGNyZmQnIHRvIHVsb25nIHdoZW4KCWNvbXBhcmluZyBhZ2FpbnN0IG9uZS4KCgkqIG1pcHMtdGZpbGUuYyAocGZhdGFsX3dpdGhfbmFtZSk6IEFwcGx5IGBjb25zdCcga2V5d29yZCB0byBjaGFyKi4KCShmYXRhbCwgZXJyb3IpOiBBZGQgQVRUUklCVVRFX1BSSU5URl8xIHRvIHByb3RvdHlwZXMuCgkocHJvZ25hbWUsIGlucHV0X25hbWUpOiBBcHBseSBgY29uc3QnIGtleXdvcmQgdG8gYSBjaGFyKi4KCURvbid0IHJlZHVuZGFudGx5IGluY2x1ZGUgc3lzL3N0YXQuaC4KCShhbGxvY19pbmZvKTogQXBwbHkgYGNvbnN0JyBrZXl3b3JkIHRvIGEgY2hhciouCgkoc3RfdG9fc3RyaW5nLCBzY190b19zdHJpbmcpOiBMaWtld2lzZS4KCShoYXNoX3N0cmluZyk6IENhc3QgdmFyaWFibGUgYGhhc2hfc3RyaW5nJyB0byBhIHN5bWludF90IHdoZW4KCWNvbXBhcmluZyBhZ2FpbnN0IG9uZS4KCShhZGRfc3RyaW5nKTogQ2FzdCBQQUdFX1VTSVpFIHRvIFB0cmRpZmZfdCB3aGVuIGNvbXBhcmluZyBhZ2FpbnN0IG9uZS4KCUxpa2V3aXNlIGNhc3QgaXQgdG8gbG9uZyB3aGVuIGNvbXBhcmluZyBhZ2FpbnN0IG9uZS4KCShhZGRfbG9jYWxfc3ltYm9sKTogQXBwbHkgYGNvbnN0JyBrZXl3b3JkIHRvIGEgY2hhciouCgkoYWRkX2V4dF9zeW1ib2wpOiBMaWtld2lzZS4KCShhZGRfdW5rbm93bl90YWcpOiBMaWtld2lzZS4KCShhZGRfcHJvY2VkdXJlKTogQ2FzdCBhIHByaW50Zi1zdHlsZSBmaWVsZCB3aWR0aCB0byBhbiBpbnQuCgkoYWRkX2ZpbGUpOiBDYXN0IFBBR0VfVVNJWkUgdG8gbG9uZyB3aGVuIGNvbXBhcmluZyBhZ2FpbnN0IG9uZS4KCShwYXJzZV9iZWdpbik6IENhc3QgYSBwcmludGYtc3R5bGUgZmllbGQgd2lkdGggdG8gYW4gaW50LgoJKHBhcnNlX2JlbmQpOiBMaWtld2lzZS4KCShwYXJzZV9kZWYpOiBMaWtld2lzZS4KCShwYXJzZV9lbmQpOiBMaWtld2lzZS4KCShtYXJrX3N0YWJzKTogTWFyayBwYXJhbWV0ZXIgYHN0YXJ0JyB3aXRoIEFUVFJJQlVURV9VTlVTRUQuCgkocGFyc2Vfc3RhYnNfY29tbW9uKTogRml4IGZvcm1hdCBzcGVjaWZpZXIuCgkocGFyc2VfaW5wdXQpOiBDaGFuZ2UgdHlwZSBvZiB2YXJpYWJsZSBgaScgdG8gU2l6ZV90LgoJKHdyaXRlX29iamVjdCk6IEZpeCBhcmd1bWVudHMgdG8gbWF0Y2ggZm9ybWF0IHNwZWNpZmllcnMuCglDYXN0IHZhcmlhYmxlIGBudW1fd3JpdGUnIHRvIGxvbmcgd2hlbiBjb21wYXJpbmcgYWdhaW5zdCBvbmUuCgkocmVhZF9zZWVrKTogQ2FzdCB2YXJpYWJsZSBgc3lzX3JlYWQnIHRvIHN5bWludF90IHdoZW4gY29tcGFyaW5nCglhZ2FpbnN0IG9uZS4gIEZpeCBhcmd1bWVudHMgdG8gbWF0Y2ggZm9ybWF0IHNwZWNpZmllcnMuICBDYXN0Cgl2YXJpYWJsZSBgc2l6ZScgdG8gbG9uZyB3aGVuIGNvbXBhcmluZyBhZ2FpbnN0IG9uZS4KCShjb3B5X29iamVjdCk6IENhc3QgcmVzdWx0IG9mIGBzaXplb2YnIHRvIGludCB3aGVuIGNvbXBhcmluZwoJYWdhaW5zdCBvbmUuICBGaXggYXJndW1lbnRzIHRvIG1hdGNoIGZvcm1hdCBzcGVjaWZpZXJzLiAgQ2FzdAoJdmFyaWFibGUgYGlmZCcgdG8gbG9uZyB3aGVuIGNvbXBhcmluZyBhZ2FpbnN0IGEgc2lnbmVkIHZhbHVlLgoJTGlrZXdpc2UsIGxpa2V3aXNlLgoKTW9uIEphbiAgNCAxMDozMDozMyAxOTk5ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBjLWNvbW1vbi5jIChkZWNsX2F0dHJpYnV0ZXMpOiBBbGxvdyBhcHBseWluZyBhdHRyaWJ1dGUgYHVudXNlZCcKCW9uIGEgTEFCRUxfREVDTC4KCgkqIGMtcGFyc2UuaW4gKGxhYmVsKTogUGFyc2UgYXR0cmlidXRlcyBhZnRlciBhIGxhYmVsLCBhbmQgY2FsbAoJYGRlY2xfYXR0cmlidXRlcycgdG8gaGFuZGxlIHRoZW0uCgoJKiBnYW5zaWRlY2wuaCAoQVRUUklCVVRFX1VOVVNFRF9MQUJFTCk6IERlZmluZS4KCgkqIGdlbnJlY29nLmMgKE9VVFBVVF9MQUJFTCwgd3JpdGVfdHJlZV8xLCB3cml0ZV90cmVlKTogV2hlbgoJZ2VuZXJhdGluZyBsYWJlbHMsIG1hcmsgdGhlbSB3aXRoIEFUVFJJQlVURV9VTlVTRURfTEFCRUwuCgoJKiBpbnZva2UudGV4aTogTm90ZSB0aGF0IGxhYmVscyBjYW4gYmUgbWFya2VkIGB1bnVzZWQnLgoKU3VuIEphbiAgMyAyMzozMjoxOCAxOTk5ICBKZWZmIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogdmVyc2lvbi5jOiBCdW1wIGZvciBzbmFwc2hvdC4KClN1biBKYW4gIDMgMjM6MDA6NDIgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogb3B0YWJzLmMgKGVtaXRfY21wX2FuZF9qdW1wX2luc25zKTogVXNlIENPTlNUQU5UX1AgY2Fub25pY2FsaXppbmcKCVJUTCBmb3IgYSBjb21wYXJlL2p1bXAgc2VxdWVuY2UuCgpTdW4gSmFuICAzIDIyOjU4OjE1IDE5OTkgIE1pY2hhZWwgSGF5ZXMgIDxtLmhheWVzQGVsZWMuY2FudGVyYnVyeS5hYy5uej4KCgkqIG9wdGFicy5jIChlbWl0X2NtcF9pbnNuKTogQWJvcnQgaWYgYXNrZWQgdG8gZW1pdCBub24tY2Fub25pY2FsIFJUTAoJZm9yIGEgdGFyZ2V0IHdpdGggSEFWRV9jYzAgZGVmaW5lZC4KCShlbWl0X2NtcF9hbmRfanVtcF9pbnNucyk6IE5ldyBmdW5jdGlvbi4KCSogZXhwci5oIChlbWl0X2NtcF9hbmRfanVtcF9pbnNucyk6IFByb3RvdHlwZSBpdC4KCSogbG9vcC5jIChjaGVja19kYnJhX2xvb3ApOiBVc2UgaXQgdG8gcmVwbGFjZSBjYWxscwoJdG8gZW1pdF9jbXBfaW5zbiBhbmQgZW1pdF9qdW1wX2luc24gYW5kIHRvIGNhbm9uaWNhbGl6ZQoJdGhlIGNvbXBhcmlzb24gaWYgbmVjZXNzYXJ5LgoJKiB1bnJvbGwuYyAodW5yb2xsX2xvb3ApOiBMaWtld2lzZS4KClN1biBKYW4gIDMgMjE6MDE6MDQgMTk5OSAgUmFpbmVyIE9ydGggIDxyb0BUZWNoRmFrLlVuaS1CaWVsZWZlbGQuREU+CgoJKiBmaXhpbmNsdWRlcyAoc3lzL3V0c25hbWUuaCk6IFByb3ZpZGUgZm9yd2FyZCBkZWNsYXJhdGlvbiBvZgoJc3RydWN0IHV0c25hbWUgb24gVWx0cml4IFY0LlszNV0uCgoJKiBtaXBzLm1kIChkaXZfdHJhcCk6IFVzZSBsb2NhbCBsYWJlbHMgaW5zdGVhZCBvZiBkb3QtcmVsYXRpdmUKCWJyYW5jaGVzLgoKU3VuIEphbiAgMyAyMDo0MDozNCAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBwYS5tZCAoYnJhbmNoLCBuZWdhdGVkIGJyYW5jaCk6IEhhbmRsZSAoY29uc3RfaW50IDApIGFzIGZpcnN0Cglzb3VyY2Ugb3BlcmFuZC4KCSogcGEuYyAob3V0cHV0X2NicmFuY2gpOiBMaWtld2lzZS4KClN1biBKYW4gIDMgMDM6MjA6MzggMTk5OSAgRGF2aWQgRWRlbHNvaG4gIDxlZGVsc29obkBnbnUub3JnPgoKCSogcnM2MDAwLmMgKHJzNjAwMF9zdGFja19pbmZvKTogVW5kbyBzcHVyaW91cyBwYXJ0IG9mIGxhc3QKCWNoYW5nZS4KCjE5OTktMDEtMDEgIE1hbmZyZWQgSG9sbHN0ZWluICA8bWFuZnJlZEBzLWRpcmVrdG5ldC5kZT4KCgkqIGV4dGVuZC50ZXhpIChfX2J1aWx0aW5fY29uc3RhbnRfcCk6IEFkZCBtaXNzaW5nIEBzbWFsbGV4YW1wbGUuCgpGcmkgSmFuICAxIDExOjQ4OjIwIDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGkzODYubWQgKGRvdWJsZXdvcmQgc2hpZnRzKTogRml4IGR1bWIgbWlzdGFrZXMgaW4gcHJldmlvdXMgY2hhbmdlLgoKV2VkIERlYyAzMCAyMzozODo1NSAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBtNjhrLm1kIChhZGRkaV9kaWxzaHIzMik6IEFsbG93IGFsbCBvcGVyYW5kcyB0byBiZSByZWdpc3RlcnMgdG9vLgoJKGFkZGRpX2Rpc2hsMzIpOiBTaW1pbGFybHkuCgoJKiBjc2UuYyAoaW52YWxpZGF0ZV9za2lwcGVkX2Jsb2NrKTogQ2FsbCBpbnZhbGlkYXRlX2Zyb21fY2xvYmJlcnMKCWZvciBlYWNoIGluc24gaW4gdGhlIHNraXBwZWQgYmxvY2suCgoJKiByZWxvYWQxLmMgKHJlbG9hZF9hc19uZWVkZWQpOiBWZXJpZnkgdGhhdCB0aGUgaW5zbiBzYXRpc2ZpZXMgaXRzCgljb25zdHJhaW50cyBhZnRlciByZXBsYWNpbmcgYSByZWdpc3RlciBhZGRyZXNzIHdpdGggYW4gYXV0b2luY3JlbWVudAoJYWRkcmVzcyBmb3IgcmVsb2FkIGluaGVyaXRhbmNlIHB1cnBvc2VzLgoKCSogaTM4Ni5tZCAoZG91Ymxld29yZCBzaGlmdHMpOiBBdm9pZCBuYW1lc3BhY2UgcG9sbHV0aW9uLgoKV2VkIERlYyAzMCAyMzowMDoyOCAxOTk4ICBEYXZpZCBPJ0JyaWVuICA8b2JyaWVuQE5VWEkuY29tPgoKCSogY29uZmlndXJlLmluIChGcmVlQlNEIEVMRik6IE5lZWRzIHNwZWNpYWwgY3J0IGZpbGVzLgoKV2VkIERlYyAzMCAyMjo1MDoxMyAxOTk4ICBHZW9mZnJleSBOb2VyICA8bm9lckBjeWdudXMuY29tPgoKCSogaTM4Ni94bS1jeWd3aW4uaDogQ2hhbmdlIERJUl9TRVBBUkFUT1IgdG8gZm9yd2FyZCBzbGFzaC4KCjE5OTgtMTItMzAgIEFuZHJlYXMgU2Nod2FiICA8c2Nod2FiQGlzc2FuLmNzLnVuaS1kb3J0bXVuZC5kZT4KCgkqIGxvb3AuYyAoY2hlY2tfZGJyYV9sb29wKTogV2hpbGUgcmV2ZXJzaW5nIHRoZSBsb29wLCBpZiB0aGUKCWNvbXBhcmlzb24gdmFsdWUgaGFzIGEgVk9JRCBtb2RlIHVzZSB0aGUgbW9kZSBvZiB0aGUgb3RoZXIgb3BlcmFuZAoJdG8gY29tcHV0ZSB0aGUgbWFzay4KCldlZCBEZWMgMzAgMjI6MjQ6MDAgMTk5OCAgTWljaGFlbCBNZWlzc25lciAgPG1laXNzbmVyQGN5Z251cy5jb20+CgoJKiByczYwMDAubWQgKHtzYXZlLHJlc3RvcmV9X3N0YWNrX2Z1bmN0aW9uKTogVGFrZSAyIG9wZXJhbmRzIHRvCglhdm9pZCB3YXJuaW5ncyBpbiBjb21waWxpbmcgZXhwbG93LmMuCgoJKHBhdGNoIGZyb20gS2VuIFJhZWJ1cm4sIHJhZWJ1cm5AY3lnbnVzLmNvbSkKCSogcnM2MDAwLmMgKHJzNjAwMF9zdGFja19pbmZvKTogRm9yY2UgOC1ieXRlIGFsaWdubWVudCBvZgoJZnBtZW1fb2Zmc2V0LiAgQ29tcHV0ZSB0b3RhbCBzaXplIGFmdGVyIHRoYXQsIGFuZCB0aGVuCglyczYwMDBfZnBtZW1fb2Zmc2V0IHVzaW5nIGJvdGggdmFsdWVzLgoKTW9uIERlYyAyOCAxOToyNjozMiAxOTk4ICBHZXJhbGQgUGZlaWZlciAgPHBmZWlmZXJAZGJhaS50dXdpZW4uYWMuYXQ+CgoJKiBnY2MudGV4aSAoTm9uLWJ1Z3MpOiBgYEVtcHR5JycgbG9vcHMgd2lsbCBiZSBvcHRpbWl6ZWQgYXdheSBpbgoJdGhlIGZ1dHVyZTsgaW5kZWVkIHRoYXQgYWxyZWFkeSBoYXBwZW5zIGluIHNvbWUgY2FzZXMuCgpUdWUgRGVjIDI5IDExOjU4OjUzIDE5OTggIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBzcGFyYy5jIChpbnB1dF9vcGVyYW5kKTogUmVjb2duaXplIChjb25zdCAoY29uc3RhbnRfcF9ydHgpKS4KCShhcml0aF9vcGVyYW5kKTogUmVtb3ZlIGNvbnN0YW50X3BfcnR4IGhhbmRsaW5nLgoJKGNvbnN0NjRfb3BlcmFuZCwgY29uc3Q2NF9oaWdoX29wZXJhbmQpOiBMaWtld2lzZS4KCShhcml0aDExX29wZXJhbmQsIGFyaXRoMTBfb3BlcmFuZCwgYXJpdGhfZG91YmxlX29wZXJhbmQpOiBMaWtld2lzZS4KCShhcml0aDExX2RvdWJsZV9vcGVyYW5kLCBhcml0aDEwX2RvdWJsZV9vcGVyYW5kLCBzbWFsbF9pbnQpOiBMaWtld2lzZS4KCShzbWFsbF9pbnRfb3JfZG91YmxlLCB1bnNfc21hbGxfaW50LCB6ZXJvX29wZXJhbmQpOiBMaWtld2lzZS4KCSogc3BhcmMuaCAoUFJFRElDQVRFX0NPREVTKTogTGlrZXdpc2UuCgoJKiBydGwuaCAoQ09OU1RBTlRfUCk6IFJlbW92ZSBDT05TVEFOVF9QX1JUWC4KClR1ZSBEZWMgMjkgMTE6MzI6NTQgMTk5OCAgUmljaGFyZCBLZW5uZXIgIDxrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdT4KCgkqIHJ0bC5kZWYgKENPTlNUQU5UX1BfUlRYKTogQ2xhcmlmeSBjb21tZW50YXJ5LgoJKiBleHByLmMgKGV4cGFuZF9idWlsdGluLCBjYXNlIEJVSUxUX0lOX0NPTlNUQU5UX1ApOiBSZXdvcmsgdG8KCWNvbnNpZGVyIGNvbnN0YW50IENPTlNUUlVDVE9SIGNvbnN0YW50IGFuZCB0byBkZWZlciBzb21lIGNhc2VzCgl0byBjc2UuCgkqIGNzZS5jIChmb2xkX3J0eCwgY2FzZSBDT05TVCk6IEFkZCBoYW5kbGluZyBmb3IgQ09OU1RBTlRfUF9SVFguCgkqIHJlZ2NsYXNzLmMgKHJlZ19zY2FuX21hcmtfcmVmcywgY2FzZSBDT05TVCk6IExpa2V3aXNlLgoKVHVlIERlYyAyOSAxMTozMDoxMCAxOTk4ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogZXhwci5jIChpbml0X2V4cHJfb25jZSk6IEtpbGwgY2FuX2hhbmRsZV9jb25zdGFudF9wIHJlY29nbml0aW9uLgoJKiBjc2UuYyAoZm9sZF9ydHgsIGNhc2UgJ3gnKTogUmVtb3ZlIHN0YW5kYWxvbmUgQ09OU1RBTlRfUF9SVFggY29kZS4KCgkqIGFscGhhLmMgKHJlZ19vcl82Yml0X29wZXJhbmQpOiBSZW1vdmUgQ09OU1RBTlRfUF9SVFggaGFuZGxpbmcuCgkocmVnX29yXzhiaXRfb3BlcmFuZCwgY2ludDhfb3BlcmFuZCwgYWRkX29wZXJhbmQpOiBMaWtld2lzZS4KCShzZXh0X2FkZF9vcGVyYW5kLCBhbmRfb3BlcmFuZCwgb3Jfb3BlcmFuZCk6IExpa2V3aXNlLgoJKHJlZ19vcl9jaW50X29wZXJhbmQsIHNvbWVfb3BlcmFuZCwgaW5wdXRfb3BlcmFuZCk6IExpa2V3aXNlLgoJKiBhbHBoYS5oIChQUkVESUNBVEVfQ09ERVMpOiBMaWtld2lzZS4KClNhdCBEZWMgMjYgMjM6MjY6MjYgMTk5OCAgSmVmZiBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHZlcnNpb24uYzogQnVtcCBmb3Igc25hcHNob3QuCgpTYXQgRGVjIDI2IDA5OjE3OjA0IDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGdlbmdlbnJ0bC5jIChnZW5jb2RlKTogQWx3YXlzIHVzZSBiemVybyB0byBjbGVhciBtZW1vcnkgaW5zdGVhZAoJb2YgZGFuZ2Vyb3VzIGNhc3RzIGFuZCBzdG9yZXMuCgoJKiBNYWtlZmlsZS5pbiAoY29tcGFyZSwgZ251Y29tcGFyZSk6IEFkZCBtaXNzaW5nIGVsc2UgdHJ1ZSBjbGF1c2VzLgoKRnJpIERlYyAyNSAyMzowMDo1NiAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBhbHBoYS5tZCAoYnVpbHRpbl9sb25nam1wKTogQWRkIG1pc3NpbmcgIkRPTkUiLgoKVGh1IERlYyAyNCAxMDozOTo1NyAxOTk4ICBTdGFuIENveCAgPHNjb3hAY3lnbnVzLmNvbT4KCgkqIGdjYy5jIChleGVjdXRlKTogRW5hYmxlIC1waXBlIHdpdGggd2luMzIuCgpXZWQgRGVjIDIzIDEwOjI3OjQ0IDE5OTggIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQGN5Z251cy5jb20+CgoJKiBjb25maWcvYXJtL3QtYXJtLWVsZjogQWRkIG11bHRpcGxpYiBvcHRpb24gZm9yIGxlYWRpbmcKCXVuZGVyc2NvcmVzLgoKCSogY29uZmlnL2FybS90aHVtYi5oIChBU01fT1VUUFVUX0xBQkVMUkVGKTogVXNlIHZhcmlhYmxlCgkndXNlcl9sYWJlbF9wcmVmaXgnIHJhdGhlciB0aGFuIG1hY3JvIFVTRVJfTEFCRUxfUFJFRklYLgoKCSh0aHVtYl9zaGlmdGFibGVfY29uc3QpOiBVc2UgbWFjcm8gJ0JBU0VfUkVHX0NMQVNTJyByYXRoZXIKCXRoYW4gdmFyaWFibGUgJ3JlbG9hZF9hZGRyZXNzX2Jhc2VfcmVnX2NsYXNzJy4gIFtOb3RlIHRoaXMKCWNoYW5nZSBpcyB1bnJlbGF0ZWQgdG8gdGhlIG90aGVycyBpbiB0aGlzIHBhdGNoXS4KCgkqIGNvbmZpZy9hcm0vdW5rbm93bi1lbGYuaCAoVVNFUl9MQUJFTF9QUkVGSVgpOiBEZWZhdWx0IHRvIG5vCglsZWFkaW5nIHVuZGVyc2NvcmUuCgpXZWQgRGVjIDIzIDA5OjUxOjMyIDE5OTggIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGFsaWFzLmMgKHJlY29yZF9hbGlhc19zdWJzZXQpOiBSZW1vdmUgaWdub3JlZCBgJicuCgkoaW5pdF9hbGlhc19vbmNlKTogTGlrZXdpc2UuCgoJKiBjLWxleC5jIChVTkdFVEMpOiBDYXN0IGZpcnN0IGFyZ3VtZW50IG9mIGNvbW1hIGV4cHJlc3Npb24gdG8gdm9pZC4KCgkqIGNvbmZpZy9taXBzL21pcHMuYyAobWlwc19hc21fZmlsZV9lbmQpOiBDYXN0IHRoZSByZXN1bHQgb2YKCWZ3cml0ZSB0byBgaW50JyB3aGVuIGNvbXBhcmluZyBhZ2FpbnN0IG9uZS4KCgkqIGNvbmZpZy9taXBzL21pcHMuaCAoQ0FOX0VMSU1JTkFURSk6IEFkZCBwYXJlbnMgYXJvdW5kICYmIHdpdGhpbiB8fC4KCShJTklUSUFMX0VMSU1JTkFUSU9OX09GRlNFVCk6IEFkZCBicmFjZXMgdG8gYXZvaWQgYW1iaWd1b3VzIGBlbHNlJy4KCgkqIGNzZS5jIChyZWhhc2hfdXNpbmdfcmVnKTogQ2hhbmdlIHR5cGUgb2YgdmFyaWFibGUgYGknIHRvCgl1bnNpZ25lZCBpbnQuCgoJKiBkd2FyZjJvdXQuYyAoaW5pdGlhbF9yZXR1cm5fc2F2ZSk6IENhc3QgLTEgdG8gdW5zaWduZWQgYmVmb3JlCglhc3NpZ25pbmcgaXQgdG8gb25lLgoKCSogZXhjZXB0LmMgKGR1cGxpY2F0ZV9laF9oYW5kbGVycyk6IFJlbW92ZSB1bnVzZWQgdmFyaWFibGUgYHRtcCcuCgoJKiBmaW5hbC5jIChmaW5hbF9zY2FuX2luc24pOiBMaWtld2lzZSBmb3IgdmFyaWFibGUgYGknLgoJKG91dHB1dF9hc21faW5zbik6IENhc3QgYSBjaGFyIHRvIHVuc2lnbmVkIGNoYXIgd2hlbiB1c2VkIGFzIGFuCglhcnJheSBpbmRleC4KCgkqIGdjc2UuYyAoY29tcHV0ZV9wcmVfcHBpbm91dCk6IENhc3QgLTEgdG8gU0JJVE1BUF9FTFRfVFlQRSB3aGVuCglhc3NpZ25pbmcgaXQgdG8gb25lLgoKCSogbG9vcC5jIChzdHJlbmd0aF9yZWR1Y2UpOiBSZW1vdmUgdW51c2VkIHZhcmlhYmxlcyBgY291bnQnIGFuZCBgdGVtcCcuCgoJKiByZWNvZy5jIChwcmVwcm9jZXNzX2NvbnN0cmFpbnRzKTogQ2FzdCBhIGNoYXIgdG8gdW5zaWduZWQgY2hhcgoJd2hlbiB1c2VkIGFzIGFuIGFycmF5IGluZGV4LgoKCSogcmVnbW92ZS5jIChmaW5kX21hdGNoZXMpOiBMaWtld2lzZS4KCgkqIHJlbG9hZDEuYyAoY2FsY3VsYXRlX25lZWRzKTogQWRkIGRlZmF1bHQgY2FzZSBpbiBzd2l0Y2guCgkoZWxpbWluYXRlX3JlZ3NfaW5faW5zbik6IEluaXRpYWxpemUgdmFyaWFibGUgYG9mZnNldCcuCgkoc2V0X29mZnNldHNfZm9yX2xhYmVsKTogQ2hhbmdlIHR5cGUgb2YgdmFyaWFibGUgYGknIHRvIHVuc2lnbmVkLgoJKHJlbG9hZF9hc19uZWVkZWQpOiBXcmFwIHZhcmlhYmxlIGBpJyBpbiBtYWNybyBjaGVjayBvbgoJQVVUT19JTkNfREVDIHx8IElOU05fQ0xPQkJFUlNfUkVHTk9fUC4KCgkqIHNjYW4tZGVjbHMuYyAoc2Nhbl9kZWNscyk6IE1hcmsgcGFyYW1ldGVycyBgYXJnYycgYW5kIGBhcmd2JwoJd2l0aCBBVFRSSUJVVEVfVU5VU0VELiAgQ2FzdCB2YXJpYWJsZSBgc3RhcnRfd3JpdHRlbicgdG8gc2l6ZV90Cgl3aGVuIGNvbXBhcmluZyBhZ2FpbnN0IG9uZS4KCgkqIHN0b3ItbGF5b3V0LmMgKGxheW91dF9kZWNsKTogQ2FzdCBtYXhpbXVtX2ZpZWxkX2FsaWdubWVudCB0bwoJdW5zaWduZWQgd2hlbiBjb21wYXJpbmcgYWdhaW5zdCBvbmUuICBMaWtld2lzZSBmb3IKCUdFVF9NT0RFX0FMSUdOTUVOVCgpLgoJKGxheW91dF9yZWNvcmQpOiBDYXN0IHJlY29yZF9hbGlnbiB0byBpbnQgd2hlbiBjb21wYXJpbmcgYWdhaW5zdCBhCglzaWduZWQgdmFsdWUuCgkobGF5b3V0X3R5cGUpOiBDYXN0IFRZUEVfQUxJR04oKSB0byBpbnQgd2hlbiBjb21wYXJpbmcgYWdhaW5zdCBhCglzaWduZWQgdmFsdWUuCgoJKiB0cmVlLmMgKGdldF9pZGVudGlmaWVyKTogQ2FzdCB2YXJpYWJsZSBgbGVuJyB0byB1bnNpZ25lZCB3aGVuCgljb21wYXJpbmcgYWdhaW5zdCBvbmUuCgkobWF5YmVfZ2V0X2lkZW50aWZpZXIpOiBMaWtld2lzZQoKV2VkIERlYyAyMyAwMDoxMDowMSAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiB0b3BsZXYuYyAocmVzdF9vZl9jb21waWxhdGlvbik6IERvIG5vdCBzZXQgcmVsb2FkX2NvbXBsZXRlZC4KCSogcmVsb2FkMS5jIChyZWxvYWQpOiBTZXQgcmVsb2FkX2NvbXBsZXRlZCBiZWZvcmUgY2FsbGluZwoJY2xlYW51cF9zdWJyZWdfb3BlcmFuZHMuCgpUdWUgRGVjIDIyIDIzOjU4OjMxIDE5OTggIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiByZWxvYWQxLmMgKGVtaXRfcmVsb2FkX2luc25zKTogQ2hlY2sgYHNldCcgbm90IG51bGwgYmVmb3JlIHVzZS4KClR1ZSBEZWMgMjIgMTU6MTU6NDUgMTk5OCAgTmljayBDbGlmdG9uICA8bmlja2NAY3lnbnVzLmNvbT4KCgkqIHJ0bGFuYWwuYyAobXVsdGlwbGVfc2V0cyk6IENoYW5nZSB0eXBlIG9mICdmb3VuZCcgZnJvbSAncnR4JyB0bwoJJ2ludCcuCgpUdWUgRGVjIDIyIDEzOjU1OjQ0IDE5OTggIFRoZW9kb3JlIFBhcGFkb3BvdWxvICA8VGhlb2RvcmUuUGFwYWRvcG91bG9Ac29waGlhLmlucmlhLmZyPgoKCSogaGFsZnBpYy5jIChoYWxmX3BpY19lbmNvZGUpOiBEZWxldGUgcmVkdW5kYW50IGNvZGUuCgpUdWUgRGVjIDIyIDEzOjAyOjIyIDE5OTggIE1pY2hhZWwgTWVpc3NuZXIgIDxtZWlzc25lckBjeWdudXMuY29tPgoKCSogdG9wbGV2LmMgKG1haW4pOiBEZWxldGUgaGFuZGxpbmcgb2YgLWRNIGFzIGEgcHJlcHJvY2Vzc29yCglvcHRpb24uCgpNb24gRGVjIDIxIDE3OjM5OjM4IDE5OTggIE1pY2hhZWwgTWVpc3NuZXIgIDxtZWlzc25lckBjeWdudXMuY29tPgoKCSogdG9wbGV2LmMgKG1haW4pOiBEb24ndCBlbWl0IGFueSB3YXJuaW5ncyB3aGVuIHVzaW5nIC1kRCwgLWRNLCBvcgoJLWRJLCB3aGljaCBhcmUgaGFuZGxlZCBieSB0aGUgcHJlcHJvY2Vzc29yLgoKU3VuIERlYyAyMCAxNjoxMzo0NCAxOTk4ICBKb2huIEYuIENhcnIgIDxqZmNAbWl0LmVkdT4KCgkqIGNvbmZpZ3VyZS5pbjogSGFuZGxlIERpZ2l0YWwgVU5JWCA1LnggdGhlIHNhbWUgYXMgNC54LgoJKiBpMzg2L3NvbDIuaDogRGVmaW5lIExPQ0FMX0xBQkVMX1BSRUZJWCBhcyAiLiIuCgpTdW4gRGVjIDIwIDA3OjM5OjUyIDE5OTggIEplZmYgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiB2ZXJzaW9uLmM6IEJ1bXAgZm9yIHNuYXBzaG90LgoKU2F0IERlYyAxOSAyMjoyNDoyMiAxOTk4ICBKZWZmIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogdmVyc2lvbi5jOiBCdW1wIGZvciBzbmFwc2hvdC4KClNhdCBEZWMgMTkgMjE6NDE6MzIgMTk5OCAgSmVmZiBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHZlcnNpb24uYzogQnVtcCBmb3Igc25hcHNob3QuCgpTYXQgRGVjIDE5IDA5OjUyOjI3IDE5OTggIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGdlbmF0dHIuYyAoZmF0YWwpOiBRdWFsaWZ5IGEgY2hhciogd2l0aCB0aGUgYGNvbnN0JyBrZXl3b3JkLgoKCSogZ2VuYXR0cnRhYi5jIChmYXRhbCwgYXR0cl9wcmludGYsIGF0dHJfc3RyaW5nLCB3cml0ZV9hdHRyX3NldCwKCXdyaXRlX3VuaXRfbmFtZSwgd3JpdGVfZWxpZ2libGVfZGVsYXksIGV4cGFuZF91bml0cywKCW1ha2VfbGVuZ3RoX2F0dHJzLCB3cml0ZV9hdHRyX2Nhc2UsIGZpbmRfYXR0ciwKCW1ha2VfaW50ZXJuYWxfYXR0cik6IExpa2V3aXNlLgoJKiBnZW5jaGVjay5jICh0cmVlX2NvZGVzKTogTGlrZXdpc2UuCgkqIGdlbmNvZGVzLmMgKGZhdGFsKTogTGlrZXdpc2UuCgkqIGdlbmNvbmZpZy5jIChmYXRhbCk6IExpa2V3aXNlLgoJKiBnZW5lbWl0LmMgKGZhdGFsKTogTGlrZXdpc2UuCgkqIGdlbmV4dHJhY3QuYyAoZmF0YWwsIHdhbGtfcnR4LCBjb3B5c3RyKTogTGlrZXdpc2UuCgkqIGdlbmZsYWdzLmMgKGZhdGFsKTogTGlrZXdpc2UuCgkqIGdlbm9waW5pdC5jIChmYXRhbCwgb3B0YWJzLCBnZW5faW5zbik6IExpa2V3aXNlLgoJKiBnZW5vdXRwdXQuYyAoZmF0YWwsIGVycm9yLCBwcmVkaWNhdGVzKTogTGlrZXdpc2UuCgkqIGdlbnBlZXAuYyAoZmF0YWwpOiBMaWtld2lzZS4KCSogZ2VucmVjb2cuYyAoZmF0YWwsIGRlY2lzaW9uLCBwcmVkX3RhYmxlLCBhZGRfdG9fc2VxdWVuY2UsCgl3cml0ZV90cmVlXzEsIHdyaXRlX3RyZWUsIGNoYW5nZV9zdGF0ZSwgY29weXN0ciwgaW5kZW50cyk6IExpa2V3aXNlLgoKVGh1IERlYyAxNyAxODoyMTo0OSAxOTk4ICBSYWluZXIgT3J0aCAgPHJvQFRlY2hGYWsuVW5pLUJpZWxlZmVsZC5ERT4KCgkqIGNvbmZpZ3VyZS5pbiAod2l0aC1mYXN0LWZpeGluY2x1ZGVzKTogRml4IHdoaXRlc3BhY2UuCgkqIGNvbmZpZ3VyZTogUmVidWlsdC4KCgkqIGZpeGluY2x1ZGVzIChjX2FzbS5oKTogV3JhcCBEaWdpdGFsIFVOSVggVjQuMEIgREVDIEMgc3BlY2lmaWMKCWFzbSgpIGV0Yy4gZnVuY3Rpb24gZGVjbGFyYXRpb25zIGluIF9fREVDQy4KClRodSBEZWMgMTcgMTM6NTc6MjMgMTk5OCAgTmljayBDbGlmdG9uICA8bmlja2NAY3lnbnVzLmNvbT4KCgkqIGV4cHIuYyAoZW1pdF9tb3ZlX2luc25fMSk6IE9ubHkgZW1pdCBhIGNsb2JiZXIgaWYgdGhlIHRhcmdldAoJaXMgYSBwc2V1ZG8gcmVnaXN0ZXIuCgpUaHUgRGVjIDE3IDEzOjUwOjI5IDE5OTggIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQGN5Z251cy5jb20+CgoJKiBnY3NlLmM6IEluY2x1ZGUgZXhwci5oIGluIG9yZGVyIHRvIGdldCB0aGUgcHJvdG90eXBlIGZvcgoJZ2V0X2NvbmRpdGlvbigpIHdoaWNoIGlzIHVzZWQgaW4gZGVsZXRlX251bGxfcG9pbnRlcl9jaGVja3MoKS4KClRodSBEZWMgMTcgMTU6NTg6MjYgMTk5OCAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogaHdpbnQuaDogTmV3IGZpbGUgdG8gY29uc29saWRhdGUgSE9TVF9XSURFX0lOVCAoZXRjKSBtYWNyb3MuCgpUaHUgRGVjIDE3IDEyOjMxOjEyIDE5OTggIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KCgkqIE1ha2VmaWxlLmluIChJTlRFUk5BTF9DRkxBR1MpOiBBZGQgU0NIRURfQ0ZMQUdTLgoJKEFMTF9DRkxBR1MpOiBEZWxldGUgU0NIRURfQ0ZMQUdTLgoKMTk5OC0xMi0xNyAgVmxhZGltaXIgTi4gTWFrYXJvdiAgPHZtYWthcm92QGN5Z251cy5jb20+CgoJKiBjb25maWcvaTYwL2k5NjAubWQgKGV4dGVuZHFpaGkyKTogRml4IHR5cG8gKHVzYWdlICcsJyBpbnN0ZWFkIG9mCgknOycpLgoKMTk5OC0xMi0xNyAgTWljaGFlbCBUaWVtYW5uICA8dGllbWFubkBheG9uLmN5Z251cy5jb20+CgoJKiBpOTYwLm1kIChleHRlbmQqLCB6ZXJvX2V4dGVuZCopOiBEb24ndCBnZW5lcmF0ZSBydGwgdGhhdCBsb29rcwoJbGlrZSAoc3VicmVnOlNJIChyZWc6U0kgTikgMCksIGJlY2F1c2UgaXQncyB3cm9uZywgYW5kIGl0IGhpZGVzCglvcHRpbWl6YXRpb25zIGZyb20gdGhlIGNvbWJpbmVyLgoKVGh1IERlYyAxNyAwODoyNzowMyAxOTk4ICBKIm9ybiBSZW5uZWNrZSAgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogbG9vcC5jIChjb21iaW5lX2dpdnNfdXNlZF9ieV9vdGhlcik6IERvbid0IGRlcGVuZCBvbiBuX3RpbWVzX3NldC4KCldlZCBEZWMgMTYgMTc6MzA6MzUgMTk5OCAgTmljayBDbGlmdG9uICA8bmlja2NAY3lnbnVzLmNvbT4KCgkqIHRvcGxldi5jIChtYWluKTogRGlzYWJsZSBvcHRpbWl6ZV9zaXplIGlmIGEgc3BlY2lmaWMKCW9wdGltaXphdGlvbiBsZXZlbCBpcyByZXF1ZXN0ZWQuICBBbHdheXMgc2V0IG9wdGltaXphdGlvbgoJbGV2ZWwgdG8gMiBpZiAtT3MgaXMgc3BlY2lmaWVkLgoKV2VkIERlYyAxNiAxNjozMzowNCAxOTk4ICBEYXZlIEJyb2xsZXkgIDxicm9sbGV5QGN5Z251cy5jb20+CgoJKiBvYmpjL2xhbmctc3BlY3MuaDogUGFzcyAtTUQsIC1NTUQgYW5kIC1NRyB0byBjYzFvYmogaWYgY29uZmlndXJlZCB3aXRoCgljcHBsaWIuCgkqIGNwcGxpYi5jIChjcHBfc3RhcnRfcmVhZCk6IElmIGluX2ZuYW1lIGlzIG5vdCBpbml0aWFsaXplZCwgdHJ5IHRvCglpbml0aWFsaXplIGl0IHVzaW5nIGZuYW1lLgoKMTk5OC0xMi0xNiAgWmFjayBXZWluYmVyZyAgPHphY2tAcmFiaS5waHlzLmNvbHVtYmlhLmVkdT4KCgkqIGNwcGxpYi5jIChkb19pbmNsdWRlKTogVHJlYXQgI2luY2x1ZGVfbmV4dCBpbiB0aGUKCXByaW1hcnkgc291cmNlIGZpbGUgYXMgI2luY2x1ZGUgcGx1cyB3YXJuaW5nLiAgVHJlYXQKCSNpbmNsdWRlX25leHQgaW4gYSBmaWxlIGluY2x1ZGVkIGJ5IGFic29sdXRlIHBhdGggYXMgYW4KCWVycm9yLiAgZnAgPT0gQ1BQX05VTExfQlVGRkVSIGlzIGEgZmF0YWwgaW5jb25zaXN0ZW5jeS4KCldlZCBEZWMgMTYgMTI6Mjg6NTQgMTk5OCAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogY2NjcC5jOiBEb24ndCBkZWZpbmUgTUlOL01BWCBhbnltb3JlLgoJKiBjcHBsaWIuYzogTGlrZXdpc2UuCgkqIG1hY2htb2RlLmg6IExpa2V3aXNlLgoJKiBzeXN0ZW0uaDogUHJvdmlkZSBkZWZpbml0aW9ucyBmb3IgTUlOL01BWC4KClR1ZSBEZWMgMTUgMjM6NDc6NDIgMTk5OCAgWmFjayBXZWluYmVyZyAgPHphY2tAcmFiaS5waHlzLmNvbHVtYmlhLmVkdT4KCgkqIGZpeC1oZWFkZXIuYzogRG9uJ3QgZGVmaW5lIHhzdHJkdXAgaGVyZS4KCldlZCBEZWMgMTYgMDU6MTE6MDQgMTk5OCAgSiJvcm4gUmVubmVja2UgIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIGxvb3AuYyAoY29uc2VjX3NldHNfZ2l2KTogTmV3IGFyZ3VtZW50IGxhc3RfY29uc2VjX2luc24uCgkoc3RyZW5ndGhfcmVkdWNlKTogUHJvdmlkZSAvIHVzZSBpdC4KCldlZCBEZWMgMTYgMTc6MjQ6MDcgMTk5OCAgTWljaGFlbCBIYXllcyAgPG0uaGF5ZXNAZWxlYy5jYW50ZXJidXJ5LmFjLm56PgoKCSogbG9vcC5oIChsb29wX2luZm8pOiBOZXcgZmllbGQgJ3Z0b3AnLgoJKiBsb29wLmMgKGNoZWNrX2RicmFfbG9vcCk6IFVzZSBsb29wX2luZm8tPnZ0b3AgcmF0aGVyIHRoYW4KCXNjYW5uaW5nIGxvb3AgZm9yIHZ0b3AuCgkqIHVucm9sbC5jIChzdWJ0cmFjdF9yZWdfdGVybSwgZmluZF9jb21tb25fcmVnX3Rlcm0pOiBOZXcgZnVuY3Rpb25zLgoJKGxvb3BfaXRlcmF0aW9ucyk6IFVzZSB0aGVtIHRvIGRldGVybWluZSBpZiBsb29wIGhhcyBhIGNvbnN0YW50CgludW1iZXIgb2YgaXRlcmF0aW9ucy4gIFNldCBsb29wX2luZm8tPnZ0b3AuICBEb24ndCBzdWJ0cmFjdAoJY29tbW9uIHJlZyB0ZXJtIGZyb20gaW5pdGlhbF92YWx1ZSBhbmQgZmluYWxfdmFsdWUgaWYgaGF2ZSBhCglkby13aGlsZSBsb29wLgoKVHVlIERlYyAxNSAxMzo0OTo1NSAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBtbjEwMjAwLm1kIChhZGRzaTMgZXhwYW5kZXIpOiBVc2UgIm5vbm1lbW9yeV9vcGVyYW5kIiBmb3Igb3BlcmFuZCAyLgoKCSogbW4xMDMwMC5tZCAoYnNldCwgYmNscik6IE9wZXJhbmQgMCBpcyBhIHJlYWQvd3JpdGUgb3BlcmFuZC4KCgkqIG1uMTAyMDAubWQgKGFic3NmMiwgbmVnc2YyKTogTmV3IGV4cGFuZGVycy4KCgkqIG1uMTAzMDAubWQgKGFic2RmMiwgYWJzc2YyLCBuZWdkZjIsIG5lZ3NmMik6IE5ldyBleHBhbmRlcnMuCgpUdWUgRGVjIDE1IDExOjU1OjMwIDE5OTggIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQGN5Z251cy5jb20+CgoJKiBpbnRlZ3JhdGUuYyAoY29weV9ydHhfYW5kX3N1YnN0aXR1dGUpOiBJZiBhIFNVQlJFRyBpcwoJcmVwbGFjZWQgYnkgYSBDT05DQVQgd2hvc2UgY29tcG9uZW50cyBkbyBub3QgaGF2ZSB0aGUgc2FtZQoJbW9kZSBhcyB0aGUgb3JpZ2luYWwgU1VCUkVHLCB1c2UgYSBuZXcgU1VCUkVHIHRvIHJlc3RvcmUgdGhlCgltb2RlLgoKCSogZW1pdC1ydGwuYyAoc3VicmVnX3JlYWxwYXJ0X3ApOiBDb3BlIHdpdGggc3VicmVncyBjb250YWluaW5nCgltdWx0aXdvcmQgY29tcGxleCB2YWx1ZXMuCgoxOTk4LTEyLTE1ICBaYWNrIFdlaW5iZXJnICA8emFja0ByYWJpLnBoeXMuY29sdW1iaWEuZWR1PgoKCSogY3BwYWxsb2MuYzogQWRkIHhzdHJkdXAgaGVyZS4KCSogY3BwbGliLmg6IFJlbW92ZSBzYXZlc3RyaW5nIHByb3RvdHlwZS4KCSogY3BwbGliLmM6IFJlbW92ZSBzYXZlc3RyaW5nIGZ1bmN0aW9uLiBzL3NhdmVzdHJpbmcveHN0cmR1cC8KCSAgdGhyb3VnaG91dC4KCSogY3BwZmlsZXMuYzogcy9zYXZlc3RyaW5nL3hzdHJkdXAvIHRocm91Z2hvdXQuCgoxOTk4LTEyLTE1ICBaYWNrIFdlaW5iZXJnICA8emFja0ByYWJpLnBoeXMuY29sdW1iaWEuZWR1PgoKCSogY3BwbGliLmM6IE1ha2UgYWxsIGRpcmVjdGl2ZSBoYW5kbGVycyByZWFkIHRoZWlyIG93bgoJICBhcmd1bWVudHMuCgkgIChzdHJ1Y3QgZGlyZWN0aXZlKTogUmVtb3ZlIGxhc3QgdHdvIGFyZ3VtZW50cyBmcm9tIEZVTkMKCSAgbWVtYmVyIHByb3RvdHlwZS4gUmVtb3ZlIGBjb21tYW5kX3JlYWRzX2xpbmUnIG1lbWJlcgoJICBlbnRpcmVseS4KCSAgKGRpcmVjdGl2ZV90YWJsZSk6IFJlbW92ZSBpbml0aWFsaXphdGlvbnMgb2YKCSAgY29tbWFuZF9yZWFkc19saW5lIGZsYWcuICBQcmV0dHktcHJpbnQuCgkgIChldmFsX2lmX2V4cHJlc3Npb24sIGRvX2RlZmluZSwgZG9fbGluZSwgZG9faW5jbHVkZSwKCSAgZG9fdW5kZWYsIGRvX2Vycm9yLCBkb19wcmFnbWEsIGRvX2lkZW50LCBkb19pZiwgZG9feGlmZGVmLAoJICBkb19lbHNlLCBkb19lbGlmLCBkb19zY2NzLCBkb19hc3NlcnQsIGRvX3VuYXNzZXJ0LAoJICBkb193YXJuaW5nKTogVGFrZSBvbmx5IHR3byBhcmdzLgoKCSAgKGNwcF9kZWZpbmUpOiBDYWxsIGRvX2RlZmluZSB3aXRoIHR3byBhcmdzIGFuZCB0aGUgdGV4dCB0bwoJICBkZWZpbmUgc3R1ZmZlZCBpbnRvIGEgYnVmZmVyLgoJICAobWFrZV9hc3NlcnRpb24pOiBDYWxsIGRvX2Fzc2VydCB3aXRoIHR3byBhcmdzLgoJICAoaGFuZGxlX2RpcmVjdGl2ZSk6IENhbGwgZG9fbGluZSB3aXRoIHR3byBhcmdzLiBDYWxsCgkgIGt0LT5mdW5jIHdpdGggdHdvIGFyZ3MuICBSZW1vdmUgY29tbWFuZF9yZWFkc19saW5lCgkgIHByb2Nlc3NpbmcuCgkgIChkb19kZWZpbmUsIGRvX3VuZGVmLCBkb19lcnJvciwgZG9fd2FybmluZywgZG9fcHJhZ21hLAoJICBkb19zY2NzKTogUmVhZCB0aGUgcmVzdCBvZiB0aGUgbGluZSBoZXJlLgoJICAoZG9faWRlbnQpOiBHb2JibGUgcmVzdCBvZiBsaW5lLCBhcyBjY2NwIGRvZXMuCgkgIChjcHBfdW5kZWYpOiBOZXcgZnVuY3Rpb24uCgkgIChjcHBfc3RhcnRfcmVhZCk6IENhbGwgY3BwX3VuZGVmIGluc3RlYWQgb2YgZG9fdW5kZWYuCgoxOTk4LTEyLTE1ICBaYWNrIFdlaW5iZXJnICA8emFja0ByYWJpLnBoeXMuY29sdW1iaWEuZWR1PgoKCSogY3BwaGFzaC5oICh1bmlvbiBoYXNoX3ZhbHVlKTogUmVtb3ZlIGBrZXlkZWYnIG1lbWJlciwgYWRkIGEKCSAgYHN0cnVjdCBoYXNobm9kZSAqYXNjaGFpbicgbWVtYmVyIGZvciAjYXNzZXJ0LgoKCSogY3BwbGliLmMgKHN0cnVjdCB0b2tlbmxpc3RfbGlzdCwgc3RydWN0CgkgIGFzc2VydGlvbl9oYXNobm9kZSk6IERlbGV0ZSBzdHJ1Y3R1cmUgZGVmaW5pdGlvbnMuCgkgIChhc3NlcnRpb25faW5zdGFsbCwgYXNzZXJ0aW9uX2xvb2t1cCwgZGVsZXRlX2Fzc2VydGlvbiwKCSAgY2hlY2tfYXNzZXJ0aW9uLCBjb21wYXJlX3Rva2VuX2xpc3RzLCByZXZlcnNlX3Rva2VuX2xpc3QsCgkgIHJlYWRfdG9rZW5fbGlzdCwgZnJlZV90b2tlbl9saXN0KTogRGVsZXRlIGZ1bmN0aW9ucy4KCSAgKHBhcnNlX2Fzc2VydGlvbik6IE5ldyBmdW5jdGlvbi4KCSAgKGNwcF9jbGVhbnVwKTogRG9uJ3QgZGVzdHJveSB0aGUgYXNzZXJ0aW9uX2hhc2h0YWJsZS4KCgkgIChkb19hc3NlcnQpOiBHdXQgYW5kIHJld3JpdGUuICAjYXNzZXJ0IGZvbyAoYmFyKSBwbGFjZXMKCSAgZW50cmllcyBmb3IgYCNmb28nIGFuZCBgI2ZvbyhiYXIpJyBpbiB0aGUgbWFjcm8gaGFzaCB0YWJsZSwKCSAgdHlwZSBUX0FTU0VSVC4gIFRoZSB2YWx1ZSB1bmlvbidzIGBhc2NoYWluJyBtZW1iZXIgaXMgdXNlZAoJICB0byBjaGFpbiBhbGwgYW5zd2VycyBmb3IgYSBnaXZlbiBwcmVkaWNhdGUgdG9nZXRoZXIuCgkgIChkb191bmFzc2VydCk6IEFsc28gcmV3cml0dGVuLiAgVGFrZSBhbiB1bi1hc3NlcnRlZAoJICBhbnN3ZXIgb2ZmIHRoZSBjaGFpbiBmcm9tIGl0cyBwcmVkaWNhdGUgYW5kIGNhbGwKCSAgZGVsZXRlX21hY3JvIG9uIHRoZSBoYXNobm9kZSwgb3Igd2FsayBhIHByZWRpY2F0ZSBjaGFpbgoJICBjYWxsaW5nIGRlbGV0ZV9tYWNybyBvbiBhbGwgdGhlIGVudHJpZXMuCgkgIChjcHBfcmVhZF9jaGVja19hc3NlcnRpb24pOiBTaW1wbHkgY2FsbCBwYXJzZV9hc3NlcnRpb24gdG8KCSAgZ2V0IHRoZSBjYW5vbmljYWwgYXNzZXJ0aW9uIG5hbWUsIGFuZCBsb29rIHRoYXQgdXAgaW4gdGhlCgkgIGhhc2ggdGFibGUuCgoJKiBjcHBsaWIuaCAoQVNTRVJUSU9OX0hBU0hOT0RFLEFTU0VSVElPTl9IQVNIU0laRSxhc3NlcnRpb25faGFzaHRhYik6CglSZW1vdmVkLgoKCSogY3BwaGFzaC5jIChpbnN0YWxsKTogVXNlIGJjb3B5IGluc3RlYWQgb2YgYW4gZXhwbGljaXQgbG9vcAoJICB0byBjb3B5IHRoZSBtYWNybyBuYW1lLgoKCSogY3BwZXhwLmMgKGNwcF9sZXgpOiBDb252ZXJ0IHRoZSByZXN1bHQgb2YKCSAgY3BwX3JlYWRfY2hlY2tfYXNzZXJ0aW9uIHRvIGEgYHN0cnVjdCBvcGVyYXRpb24nIGRpcmVjdGx5OwoJICBkb24ndCBnbyB0aHJvdWdoIHBhcnNlX251bWJlci4KClR1ZSBEZWMgMTUgMTg6Mjc6MzkgMTk5OCAgSiJvcm4gUmVubmVja2UgIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIGxvb3AuaCAoc3RydWN0IGluZHVjdGlvbik6IERlbGV0ZSB0aW1lc191c2VkIG1lbWJlci4KCSogbG9vcC5jIChuX3RpbWVzX3NldCk6IFJlbmFtZSB0byBzZXRfaW5fbG9vcC4gIENoYW5nZWQgYWxsIHVzZXJzLgoJKG5fdGltZXNfdXNlZCk6IFJlbmFtZSB0byBuX3RpbWVzX3NldC4gIENoYW5nZWQgYWxsIHVzZXJzLgoJKHNjYW5fbG9vcCk6IEZyZWUgcmVnX3NpbmdsZV91c2FnZSBiZWZvcmUgc3RyZW5ndGggcmVkdWN0aW9uLgoJKHJlY29yZF9naXYsIGNvbWJpbmVfZ2l2cyk6IFJlbW92ZSBoYW5kbGluZyBvZiB0aW1lc191c2VkIG1lbWJlci4KCShjb21iaW5lX2dpdnNfdXNlZF9vbmNlKTogUmVuYW1lIHRvOgoJKGNvbWJpbmVfZ2l2c191c2VkX2J5X290aGVyKSAuICBDaGFuZ2VkIGFsbCBjYWxsZXJzLgoKVHVlIERlYyAxNSAwMTo0NToyNiAxOTk4ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBkd2FyZjJvdXQuYyAoZ2VuX3N0cnVjdF9vcl91bmlvbl90eXBlX2RpZSk6IENoZWNrIEFHR1JFR0FURV9UWVBFX1AKCWluc3RlYWQgb2YgVFJFRV9DT0RFX0NMQVNTID09ICd0Jy4KCShnZW5fdHlwZV9kaWUpOiBMaWtld2lzZS4KCShzY29wZV9kaWVfZm9yKTogSWdub3JlIEZVTkNUSU9OX1RZUEUgInNjb3BlcyIuCgpNb24gRGVjIDE0IDE2OjIzOjI3IDE5OTggIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KCgkqIHJlYWwuYyAoZW5kaWFuKTogRGlzYWJsZSBsYXN0IGNoYW5nZSB1bmxlc3MKCUhPU1RfQklUU19QRVJfV0lERV9JTlQgaXMgZ3JlYXRlciB0aGFuIDMyLgoKTW9uIERlYyAxNCAxNzoxMzozNiAxOTk4ICBBbmRyZXcgTWFjTGVvZCAgPGFtYWNsZW9kQGN5Z251cy5jb20+CgoJKiBvdXRwdXQuaCAoZm9yY2VfZGF0YV9zZWN0aW9uKTogTmV3IHByb3RvdHlwZS4KCSogdmFyYXNtLmMgKGZvcmNlX2RhdGFfc2VjdGlvbik6IE5ldyBmdW5jdGlvbiB0byBmb3JjZSB0aGUKCWRhdGEgc2VjdGlvbiwgcmVnYXJkbGVzcyBvZiB3aGF0IGluX3NlY3Rpb24gdGhpbmtzLgoJKiBkd2FyZjJvdXQuYyAob3V0cHV0X2NhbGxfZnJhbWVfaW5mbyk6IENhbGwgZm9yY2VfZGF0YV9zZWN0aW9uCglzaW5jZSB2YXJhc20gbWF5IG5vdCByZWFsaXplIHdlJ3ZlIGNoYW5nZXMgc2VjdGlvbnMuCgpNb24gRGVjIDE0IDE0OjA5OjM0IDE5OTggIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQGN5Z251cy5jb20+CgoJKiByZWxvYWQxLmMgKHJlbG9hZCk6IERlbGV0ZSBSRUdfUkVUVkFMIGFuZCBSRUdfTElCQ0FMTCBub3RlcwoJICBhZnRlciBjb21wbGV0aW5nIHJlbG9hZC4KCgkqIHJ0bC50ZXhpOiBEb2N1bWVudCB0aGF0IFJFR19SRVRWQUwgYW5kIFJFR19MSUJDQUxMIGFyZQoJICBkZWxldGVkIGFmdGVyIHJlbG9hZC4KCk1vbiBEZWMgMTQgMDE6Mzk6MjggMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogcnRsLmggKG11bHRpcGxlX3NldHMpOiBGaXggcHJvdG90eXBlLgoJKiBydGxhbmFsLmMgKG11bHRpcGxlX3NldHMpOiBGaXggcmV0dXJuIHR5cGUuCgpTdW4gRGVjIDEzIDEyOjQzOjU4IDE5OTggIEplZmYgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiB2ZXJzaW9uLmM6IEJ1bXAgZm9yIHNuYXBzaG90LgoKU3VuIERlYyAxMyAwMTowNToyMiAxOTk4ICBKZWZmIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogdmVyc2lvbi5jOiBCdW1wIGZvciBzbmFwc2hvdC4KCjE5OTgtMTItMTMgIE1hbmZyZWQgSG9sbHN0ZWluICA8bWFuZnJlZEBzLWRpcmVrdG5ldC5kZT4KCgkqIHByb3RvaXplLmMgKGZwdXRzKTogV3JhcCBleHRlcm4gZGVjbGFyYXRpb24gaW4gI2lmbmRlZiBmcHV0cy4KClN1biBEZWMgMTMgMDA6MjQ6MTQgMTk5OCAgSiJvcm4gUmVubmVja2UgIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIHJ0bC5oIChyZWNvbXB1dGVfcmVnX3VzYWdlKTogQWRkIHNlY29uZCBhcmd1bWVudC4KCSogZmxvdy5jIChyZWNvbXB1dGVfcmVnX3VzYWdlKTogTGlrZXdpc2UuCgkqIHRvcGxldi5jIChyZXN0X29mX2NvbXBpbGF0aW9uKTogU3VwcGx5IHNlY29uZCBhcmd1bWVudCB0bwoJcmVjb21wdXRlX3JlZ191c2FnZS4KCgkqIHJlbG9hZDEuYyAoY29tcHV0ZV91c2VfYnlfcHNldWRvcyk6IEFsbG93IHJlZ19yZW51bWJlcltyZWdub10gPCAwCglhZnRlciByZWxvYWQuCgpTYXQgRGVjIDEyIDIzOjM5OjEwIDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIG02OGsvdC1tNjhrZWxmIChNVUxUSUxJQl9PUFRJT05TKTogQWRkIG1jcHUzMi4KCShNVUxUSUxJQl9NQVRDSEVTKTogLW02ODMzMiBub3cgdXNlcyBtY3B1MzIgbGlicmFyaWVzLCBub3QgbTY4MDAwLgoJKE1VTFRJTElCX0VYQ0VQVElPTlMpOiBEb24ndCBidWlsZCA2ODg4MSBsaWJyYXJpZXMgZm9yIG02ODAwMCwKCW1jcHUzMiBvciBtNTIwMC4KCgkqIGkzODYvbmV4dC5oIChBU01fT1VUUFVUX0FMSUdOKTogVXNlIDB4OTAgZm9yIGZpbGwgY2hhcmFjdGVyLgoKCSogcnRsYW5hbC5jIChtdWx0aXBsZV9zZXRzKTogTmV3IGZ1bmN0aW9uLgoJKiBydGwuaCAobXVsdGlwbGVfc2V0cyk6IERlY2xhcmUgaXQuCgkqIGxvY2FsLWFsbG9jLmMgKHdpcGVfZGVhZF9yZWcpOiBVc2UgaXQuCgkqIGdsb2JhbC5jIChnbG9iYWxfY29uZmxpY3RzKTogTGlrZXdpc2UuCgpTYXQgRGVjIDEyIDIyOjEzOjAyIDE5OTggIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiBnbG9iYWwuYyAocmVjb3JkX2NvbmZsaWN0cyk6IERvbid0IHVzZSBhbiBhcnJheSBvZiBzaG9ydHMgdG8KCXN0b3JlIGFuIGFycmF5IG9mIGludHMuCgkoZ2xvYmFsX2NvbmZsaWN0cyk6IExpa2V3aXNlLgoKU2F0IERlYyAxMiAxNjo0OToyNCAxOTk4ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogYWxwaGEuYyAoYWxwaGFfZXhwYW5kX2Jsb2NrX21vdmUpOiBtb2RlX2Zvcl9zaXplIGV4cGVjdHMKCWJpdHMsIG5vdCBieXRlcy4gIEluZmVyIGV4dHJhIGFsaWdubWVudCBmcm9tIGFkZHJlc3NvZi4KCjE5OTgtMTItMTEgIE1pY2hhZWwgTWVpc3NuZXIgIDxtZWlzc25lckBjeWdudXMuY29tPgoKCSogcnM2MDAwL3N5c3Y0LmggKEFTTV9PVVRQVVRfQUxJR05FRF9MT0NBTCk6IFB1dCBzbWFsbCBkYXRhIGluIHRoZQoJLnNic3Mgc2VjdGlvbiwgbm90IC5zZGF0YS4KCjE5OTgtMTItMTEgIE1hbmZyZWQgSG9sbHN0ZWluICA8bWFuZnJlZEBzLWRpcmVrdG5ldC5kZT4KCgkqIGNjY3AuYzogRG8gbm90ICNpbmNsdWRlIDxzeXMvc3RhdC5oPiBoZXJlOyB0aGlzIGlzIGFscmVhZHkgZG9uZQoJYnkgInN5c3RlbS5oIi4KCSogY29sbGVjdDIuYzogTGlrZXdpc2UuCgkqIGNwcGxpYi5oOiBMaWtld2lzZS4KCSogZ2NjLmM6IExpa2V3aXNlLgoJKiBnY292LmM6IExpa2V3aXNlLgoJKiBnZXRwd2QuYzogTGlrZXdpc2UuCgkqIHByb3RvaXplLmM6IExpa2V3aXNlLgoJKiB0b3BsZXYuYzogTGlrZXdpc2UuCgoJKiBjcHBsaWIuaCAoSE9TVF9XSURFX0lOVCk6IEdldCBkZWZpbml0aW9uIGZyb20gIm1hY2htb2RlLmgiCglhbmQgZG9uJ3QgdHJ5IHRvIGRlZmluZSBpdCBoZXJlLgoJKiBNYWtlZmlsZS5pbiAoY3BwbWFpbi5vKTogRGVwZW5kIG9uIG1hY2htb2RlLmguCgkoY3BwbGliLm8pOiBMaWtld2lzZS4KCShjcHBlcnJvci5vKTogTGlrZXdpc2UuCgkoY3BwZXhwLm8pOiBMaWtld2lzZS4KCShjcHBmaWxlcy5vKTogTGlrZXdpc2UuCgkoY3BwaGFzaC5vKTogTGlrZXdpc2UuCgkoY3BwYWxsb2Mubyk6IExpa2V3aXNlLgoJKGZpeC1oZWFkZXIubyk6IExpa2V3aXNlLgoJKHNjYW4tZGVjbHMubyk6IExpa2V3aXNlLgoKRnJpIERlYyAxMSAxMTowMjo0OSAxOTk4ICBTdGFuIENveCAgPHNjb3hAY3lnbnVzLmNvbT4KCgkqIHNoLmMgKHByaW50X29wZXJhbmQpOiBMb29rdXAgaW50ZXJydXB0X2hhbmRsZXIgYXR0cmlidXRlIGluc3RlYWQKCW9mIHJlbHlpbmcgb24gc3RhdGljIHZhcmlhYmxlLgoJKiAoY2FsY19saXZlX3JlZ3MpOiBMaWtld2lzZS4KCSogKHNoX3ByYWdtYV9pbnNlcnRfYXR0cmlidXRlcyk6IENyZWF0ZSBpbnRlcnJ1cHRfaGFuZGxlcgoJYXR0cmlidXRlIGlmIGEgcHJhZ21hIHdhcyBzcGVjaWZpZWQuCgkqIChzaF92YWxpZF9tYWNoaW5lX2RlY2xfYXR0cmlidXRlKTogRG9uJ3Qgc2V0IHN0YXRpYyBmbGFnLgoJKiBzaC5oIChQUkFHTUFfSU5TRVJUX0FUVFJJQlVURVMpOiBOZXcuCgpGcmkgRGVjIDExIDEyOjU2OjA3IDE5OTggIEoib3JuIFJlbm5lY2tlICA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiByZWxvYWQxLmMgKHJlbG9hZF9jb21iaW5lKTogVXNlIEJBU0lDX0JMT0NLX0xJVkVfQVRfU1RBUlQKCXRvIGRldGVybWluZSBpZiBhIHJlZ2lzdGVyIGlzIGxpdmUgYXQgYSBqdW1wIGRlc3RpbmF0aW9uLgoJRXZlcnl0aGluZyBpcyBkZWFkIGF0IGEgQkFSUklFUi4KClRodSBEZWMgMTAgMTY6MDI6MDYgMTk5OCAgSmltIFdpbHNvbiAgPHdpbHNvbkBjeWdudXMuY29tPgoKCSogY3NlLmMgKHNpbXBsaWZ5X3VuYXJ5X29wZXJhdGlvbik6IFNpZ24tZXh0ZW5kIGNvbnN0YW50cyB3aGVuCgl0aGV5IGhhdmUgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgYml0IHNldCBmb3IgdGhlIHRhcmdldC4KCSogcmVhbC5jIChlbmRpYW4pOiBTaWduLWV4dGVuZCAzMiBiaXQgb3V0cHV0IHZhbHVlcyBvbiBhIDY0IGJpdAoJaG9zdC4KCSogbTMyci9tMzJyLmMgKG0zMnJfZXhwYW5kX3Byb2xvZ3VlKTogU3RvcmUgcHJldGVuZF9zaXplIGluCglIT1NUX1dJREVfSU5UIHRlbXBvcmFyeSBiZWZvcmUgbmVnYXRpbmcgaXQuCgkqIG0zMnIvbTMyci5tZCAobW92c2lfaW5zbisxKTogVXNlIH4weGZmZmYgaW5zdGVhZCBvZiAweGZmZmYwMDAwLgoKVGh1IERlYyAxMCAxNTowNTo1OSAxOTk4ICBEYXZlIEJyb2xsZXkgIDxicm9sbGV5QGN5Z251cy5jb20+CgoJKiBvYmpjL29iamMtYWN0LmMgKGxhbmdfaW5pdF9vcHRpb25zKTogRW5jbG9zZSBjcHBsaWIgcmVsYXRlZCBjb2RlIGluCgkjaWYgVVNFX0NQUExJQi4KClRodSBEZWMgMTAgMTM6Mzk6NDYgMTk5OCAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogY29sbGVjdDIuaDogTmV3IGhlYWRlciBmaWxlIGZvciBwcm90b3R5cGVzLgoKCSogTWFrZWZpbGUuaW4gKGNvbGxlY3QyLm8sIHRsaW5rLm8pOiBEZXBlbmQgb24gY29sbGVjdDIuaC4KCgkqIGNvbGxlY3QyLmM6IEluY2x1ZGUgY29sbGVjdDIuaC4KCSogdGxpbmsuYzogTGlrZXdpc2UuCgpXZWQgRGVjICA5IDIzOjU1OjExIDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGZsb3cuYzogVXBkYXRlIHNvbWUgY29tbWVudHMuCgpXZWQgRGVjICA5IDE1OjI5OjI2IDE5OTggIERhdmUgQnJvbGxleSAgPGJyb2xsZXlAY3lnbnVzLmNvbT4KCgkqIG9iamMvb2JqYy1hY3QuYyAoY3BwX2luaXRpYWxpemVkKTogUmVtb3ZlZC4KCShsYW5nX2luaXRfb3B0aW9ucyk6IEluaXRpYWxpemUgY3BwbGliLgoJKGxhbmdfZGVjb2RlX29wdGlvbik6IE1vdmUgaW5pdGlhbGl6YXRpb24gb2YgY3BwbGliIHRvCglsYW5nX2luaXRfb3B0aW9ucy4KCSogYy1sYW5nLmMgKHBhcnNlX29wdGlvbnMscGFyc2VfaW4pOiBBZGRlZC4KCShsYW5nX2luaXRfb3B0aW9ucyk6IEluaXRpYWxpemVkIGNwcGxpYiBoZXJlLgoJKiBjLWRlY2wuYyAocGFyc2Vfb3B0aW9ucyxjcHBfaW5pdGlhbGl6ZWQpOiBSZW1vdmVkLgoJKGNfZGVjb2RlX29wdGlvbik6IE1vdmUgaW5pdGlhbGl6YXRpb24gb2YgY3BwbGliIHRvCglsYW5nX2luaXRfb3B0aW9ucy4KCldlZCBEZWMgIDkgMTk6MzY6NTcgMTk5OCAgSiJvcm4gUmVubmVja2UgIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIHJlbG9hZDEuYyAocmVsb2FkX2NvbWJpbmUsIHJlbG9hZF9jb21iaW5lX25vdGVfc3RvcmUpOgoJTWFrZSBTVE9SRV9SVUlEIGFsd2F5cyB2YWxpZC4KCShyZWxvYWRfY29tYmluZSk6IENoZWNrIGlmIEJBU0UgaXMgY2xvYmJlcmVkIHRvbyBlYXJseS4KCldlZCBEZWMgIDkgMDk6NTM6NTggMTk5OCAgTmljayBDbGlmdG9uICA8bmlja2NAY3lnbnVzLmNvbT4KCgkqIHJlbG9hZC5jIChmaW5kX3JlbG9hZHMpOiBEaXNwbGF5IHRoZSBpbnNuIHRoYXQgY2Fubm90IGJlCglyZWxvYWRlZC4KCldlZCBEZWMgIDkgMTI6MTU6MjYgMTk5OCAgRGF2ZSBCcm9sbGV5ICA8YnJvbGxleUBjeWdudXMuY29tPgoKCSogY2NjcC5jIChjcmVhdGVfZGVmaW5pdGlvbik6IEZpeCBlbmQgb2YgYnVmZmVyIGxvZ2ljLgoKV2VkIERlYyAgOSAxMDoxNTo0NSAxOTk4ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBleGNlcHQuYyAoZHVwbGljYXRlX2VoX2hhbmRsZXJzLCByZXRocm93X3N5bWJvbF9tYXApOiBGdW5jdGlvbgoJcG9pbnRlciBwYXJhbWV0ZXJzIGNoYW5nZWQgdG8gdXNlIHRoZSBQQVJBTVMoKSBtYWNyby4KCldlZCBEZWMgIDkgMDk6MTI6NDAgMTk5OCAgQW5kcmV3IE1hY0xlb2QgIDxhbWFjbGVvZEBjeWdudXMuY29tPgoKCSogZXhjZXB0LmggKHN0cnVjdCBoYW5kbGVyX2luZm8pOiBBZGQgaGFuZGxlcl9udW1iZXIgZmllbGQuCgkqIGV4Y2VwdC5jIChnZW5fZXhjZXB0aW9uX2xhYmVsKTogRUggbGFiZWxzIG5vIGxvbmdlciBuZWVkIHRvIGJlCglvbiB0aGUgcGVybWFuZW50IG9ic3RhY2suCgkoZ2V0X25ld19oYW5kbGVyKTogU2V0IHRoZSBsYWJlbCBudW1iZXIgZmllbGQuCgkob3V0cHV0X2V4Y2VwdGlvbl90YWJsZV9lbnRyeSk6IFJlZ2VuZXJhdGUgaGFuZGxlciBsYWJlbCByZWZlcmVuY2UKCWZyb20gdGhlIGxhYmVsIG51bWJlciBmaWVsZC4KCShpbml0X2VoKTogUmVtb3ZlIGEgYmxhbmsgbGluZS4KCSogaW50ZWdyYXRlLmMgKGdldF9sYWJlbF9mcm9tX21hcCk6IExhYmVscyBubyBsb25nZXIgbmVlZCB0byBiZQoJb24gdGhlIHBlcm1hbmVudCBvYnN0YWNrLgoKVHVlIERlYyAgOCAyMjowNDozMyAxOTk4ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CgoJKiBpOTYwL2k5NjAuaCAoQ09OU1RfQ09TVFMsIGNhc2UgQ09OU1RfSU5UKTogQWNjZXB0IHBvd2VyMl9vcGVyYW5kCglvbmx5IHdoZW4gT1VURVJfQ09ERSBpcyBTRVQuCgpUdWUgRGVjICA4IDIyOjQ3OjE1IDE5OTggIEoib3JuIFJlbm5lY2tlICA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiBsb29wLmMgKHN0cmVuZ3RoX3JlZHVjZSk6IElmIHNjYW5fc3RhcnQgcG9pbnRzIHRvIHRoZSBsb29wIGV4aXQKCXRlc3QsIGJlIHdhcnkgb2Ygc3VidmVyc2l2ZSB1c2Ugb2YgZ290b3MgaW5zaWRlIGV4cHJlc3Npb24gc3RhdGVtZW50cy4KCURvbid0IHNldCBtYXliZV9tdWx0aXBsZSBmb3IgYSBiYWNrd2FyZCBqdW1wIHRoYXQgZG9lcyBub3QKCWluY2x1ZGUgdGhlIGxhYmVsIHVuZGVyIGNvbnNpZGVyYXRpb24gaW50byBpdHMgcmFuZ2UuCgkqIHVucm9sbC5jIChiaXZfdG90YWxfaW5jcmVtZW50KTogTWFrZSB1c2Ugb2YgbWF5YmVfbXVsdGlwbGUgZmllbGQuCgpUdWUgRGVjICA4IDIyOjMzOjE4IDE5OTggIEoib3JuIFJlbm5lY2tlICA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiBleHBsb3cuYyAocGx1c19jb25zdGFudF93aWRlKTogRG9uJ3QgaW1tZWRpYXRlbHkgcmV0dXJuIHdpdGgKCXJlc3VsdCBvZiByZWN1cnNpdmUgY2FsbC4KClR1ZSBEZWMgIDggMTU6MzI6NTYgMTk5OCAgQW5kcmV3IE1hY0xlb2QgIDxhbWFjbGVvZEBjeWdudXMuY29tPgoKCSogZWgtY29tbW9uLmggKHN0cnVjdCBlaF9jb250ZXh0KTogQWRkIHRhYmxlX2luZGV4IGZvciByZXRocm93cy4KCgkqIHJ0bC5oIChlbnVtIHJlZ19ub3RlKTogQWRkIFJFR19FSF9SRUdJT04gYW5kIFJFR19FSF9SRVRIUk9XIHJlZyBub3Rlcy4KCShTWU1CT0xfUkVGX05FRURfQURKVVNUKTogTmV3IGZsYWcgaW5kaWNhdGluZyBzeW1ib2wgbmVlZHMgdG8gYmUKCXByb2Nlc3NlZCB3aGVuIGlubGluZWQgb3IgdW5yb2xsZWQgKGllIGR1cGxpY2F0ZWQgaW4gc29tZSB3YXkpLgoKCSogcnRsLmMgKHJlZ19ub3RlX25hbWUpOiBBZGQgc3RyaW5ncyBmb3IgbmV3IHJlZ19ub3RlIGVudW1zLgoKCSogZXhwci5oIChyZXRocm93X2xpYmZ1bmMpOiBOZXcgbGlicmFyeSBkZWNsLgoKCSogb3B0YWJzLmMgKHJldGhyb3dfbGliZnVuYyk6IEluaXRpYWxpemUuCgoJKiBleGNlcHQuaCAoc3RydWN0IGVoX2VudHJ5KTogQWRkIG5ldyBmaWVsZCAncmV0aHJvd19sYWJlbCcuCgkobmV3X2VoX3JlZ2lvbl9lbnRyeSk6IE5vIGxvbmdlciBleHBvcnRlZCBmcm9tIGV4Y2VwdC5jLgoJKGR1cGxpY2F0ZV9oYW5kbGVycyk6IFJlbmFtZWQgdG8gZHVwbGljYXRlX2VoX2hhbmRsZXJzIGFuZAoJZGlmZmVyZW50IHByb3RvdHlwZS4KCShyZXRocm93X3N5bWJvbF9tYXAsIHJldGhyb3dfdXNlZCk6IE5ldyBleHBvcnRlZCBmdW5jdGlvbnMuCgkoZWhfcmVnaW9uX2Zyb21fc3ltYm9sKTogTmV3IGV4cG9ydGVkIGZ1bmN0aW9uLgoKCSogZXhjZXB0LmMgKGNyZWF0ZV9yZXRocm93X3JlZik6IE5ldyBmdW5jdGlvbiB0byBjcmVhdGUgYSBzaW5nbGUKCVNZTUJPTF9SRUYgZm9yIGEgcmV0aHJvdyByZWdpb24uCgkocHVzaF9laF9lbnRyeSk6IEluaXRpYWxpemUgYSByZXRocm93IHJlZi4KCShmdW5jX2VoX2VudHJ5KTogQWRkIGEgcmV0aHJvd19sYWJlbCBmaWVsZC4KCShuZXdfZWhfcmVnaW9uX2VudHJ5KTogTWFrZSBzdGF0aWMsIGFuZCBpbml0aWFsaXplIHRoZSByZXRocm93IGVudHJ5LgoJKGR1cGxpY2F0ZV9laF9oYW5kbGVycyk6IENyZWF0ZSBhIG5ldyByZWdpb24sIGFuZCByZW1hcCBsYWJlbHMvc3ltYm9scy4KCShlaF9yZWdpb25fZnJvbV9zeW1ib2wpOiBGaW5kIGFuIEVIIHJlZ2lvbiBiYXNlZCBvbiBpdHMgcmV0aHJvdyBzeW1ib2wuCgkocmV0aHJvd19zeW1ib2xfbWFwKTogR2l2ZW4gYSBsYWJlbCBtYXAsIG1hcHMgYSByZXRocm93IHN5bWJvbCBmb3IKCWEgcmVnaW9uIGludG8gYW4gYXBwcm9wcmlhdGUgbmV3IHN5bWJvbC4KCShyZXRocm93X3VzZWQpOiBJbmRpY2F0ZSB3aGV0aGVyIGEgcmV0aHJvdyBzeW1ib2wgaGFzIGJlZW4gcmVmZXJlbmNlZC4KCShleHBhbmRfZWhfcmVnaW9uX2VuZCk6IERvbid0IGlzc3VlIGp1bXAgYXJvdW5kIGNvZGUgZm9yIG5ldy1leGNlcHRpb25zLgoJKGVuZF9jYXRjaF9oYW5kbGVyKTogRW1pdCBhIGJhcnJpZXIgZm9yIG5ldy1leGNlcHRpb25zIHNpbmNlCgljb250cm9sIGNhbiBuZXZlciBkcm9wIHRocm91Z2ggdGhlIGVuZCBvZiBhIGNhdGNoIGJsb2NrLgoJKGV4cGFuZF9lbmRfYWxsX2NhdGNoKTogbmV3LWV4Y2VwdGlvbnMgbmV2ZXIgZmFsbCB0aHJvdWdoIGEgY2F0Y2gKCWJsb2NrLgoJKGV4cGFuZF9yZXRocm93KTogVXNlIF9fcmV0aHJvdyByb3V0aW5lIGZvciBuZXcgZXhjZXB0aW9ucy4KCShvdXRwdXRfZXhjZXB0aW9uX3RhYmxlX2VudHJ5KTogR2VuZXJhdGUgcmV0aHJvdyBsYWJlbHMsIGlmIG5lZWRlZC4KCShvdXRwdXRfZXhjZXB0aW9uX3RhYmxlKTogR2VuZXJhdGUgc3RhcnQgYW5kIGVuZCByZXRocm93IGxhYmVscy4KCShpbml0X2VoKTogQ3JlYXRlIHJldGhyb3cgc3ltYm9scyBmb3IgYmVnaW5uaW5nIGFuZCBlbmQgb2YgdGFibGUuCgkoc2Nhbl9yZWdpb24pOiBEb24ndCBlbGltaW5hdGUgRUggcmVnaW9ucyB3aGljaCBhcmUgdGhlIHRhcmdldHMgb2YKCXJldGhyb3dzLgoKCSogZmxvdy5jIChtYWtlX2VkZ2VzKTogQWRkIGRpZmZlcmVudCBlZGdlcyBmb3IgcmV0aHJvdyBjYWxscywKCWlkZW50aWZpZWQgYnkgaGF2aW5nIHRoZSBSRUdfRUhfUkVUSFJPVyByZWcgbGFiZWwuCgkoZGVsZXRlX3VucmVhY2hhYmxlX2Jsb2Nrcyk6IERvbid0IGRlbGV0ZSByZWdpb25zIG1hcmtlcnMgd2hpY2ggYXJlCgl0aGUgdGFyZ2V0IG9mIGEgcmV0aHJvdy4KCgkqIGludGVncmF0ZS5jIChzYXZlX2Zvcl9pbmxpbmVfZWhfbGFiZWxtYXApOiBOZXcgY2FsbGJhY2sgcm91dGluZSB0bwoJYWxsb3cgc2F2ZV9mb3JfaW5saW5lX2NvcHlpbmcgdG8gY2FsbCBkdXBsaWNhdGVfZWhfaGFuZGxlcnMuCgkoc2F2ZV9mb3JfaW5saW5lX2NvcHlpbmcpOiBDYWxsIGR1cGxpY2F0ZV9laF9oYW5kbGVycyBpbnN0ZWFkIG9mCglleHBvc2luZyBpbnRlcm5hbCBkZXRhaWxzIG9mIGV4Y2VwdGlvbiByZWdpb25zLgoJKGNvcHlfZm9yX2lubGluZSk6IENoZWNrIGlmIFNZTUJPTF9SRUZzIG5lZWQgYWRqdXN0bWVudC4KCShleHBhbmRfaW5saW5lX2Z1bmN0aW9uX2VoX2xhYmVsbWFwKTogTmV3IGNhbGxiYWNrIHJvdXRpbmUgdG8KCWFsbG93IGV4cGFuZF9pbmxpbmVfZnVuY3Rpb24gdG8gY2FsbCBkdXBsaWNhdGVfZWhfaGFuZGxlcnMuCgkoZXhwYW5kX2lubGluZV9mdW5jdGlvbik6IENhbGwgZHVwbGljYXRlX2VoX2hhbmRsZXJzIGluc3RlYWQgb2YKCWV4cG9zaW5nIGludGVybmFsIGRldGFpbHMgb2YgZXhjZXB0aW9uIHJlZ2lvbnMuCgkoY29weV9ydHhfYW5kX3N1YnN0aXR1dGUpOiBBZGp1c3QgU1lNQk9MX1JFRlMgaWYgU1lNQk9MX1JFRl9ORUVEX0FESlVTVAoJZmxhZyBpcyBzZXQuCgoJKiBsaWJnY2MyLmMgKGZpbmRfZXhjZXB0aW9uX2hhbmRsZXIpOiBHZW5lcmFsaXplIHRvIGVuYWJsZSBpdCB0bwoJcGljayB1cCBwcm9jZXNzaW5nIHdoZXJlIGl0IGxlZnQgb2ZmIGxhc3QgdGltZSBmb3IgYSByZXRocm93LgoJKF9fdW53aW5kaW5nX2NsZWFudXApOiBOZXcgZnVuY3Rpb24uIGRlYnVnIGhvb2sgd2hpY2ggaXMgY2FsbGVkIGJlZm9yZQoJdW53aW5kaW5nIHdoZW4gX190aHJvdyBmaW5kcyB0aGVyZSBpcyBub3RoaW5nIGJ1dCBjbGVhbnVwcyBsZWZ0LgoJKHRocm93X2hlbHBlcik6IENvbW1vbiBwYXJ0cyBvZiBfX3Rocm93IGV4dHJhY3RlZCBvdXQgZm9yIHJldXNlLgoJKF9fdGhyb3cpOiBDb21tb24gcGFydHMgbW92ZWQgdG8gdGhyb3dfaGVscGVyLgoJKF9fcmV0aHJvdyk6IE5ldyBmdW5jdGlvbiBmb3IgcGVyZm9ybWluZyByZXRocm93cy4KClR1ZSBEZWMgIDggMTM6MTE6MDQgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogcmVsb2FkMS5jIChjdXJyZW50X2Z1bmN0aW9uX2RlY2wpOiBUd2VhayBkZWNsYXJhdGlvbi4KClR1ZSBEZWMgIDggMTA6MjM6NTIgMTk5OCAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGMtZGVjbC5jIChmbGFnX2lzb2M5eCk6IERlZmF1bHQgb2ZmLgoJKGNfZGVjb2RlX29wdGlvbik6IEtpbGwgLXN0ZD1nbnUsIGFkZCAtc3RkPWdudTg5IGFuZCAtc3RkPWdudTl4LgoJKiBjY2NwLmMgKHByaW50X2hlbHAsIG1haW4pOiBMaWtld2lzZS4KCSogZ2NjLmMgKGRlZmF1bHRfY29tcGlsZXJzKTogVXBkYXRlIGZvciAtc3RkPWdudSouCgpUdWUgRGVjICA4IDAxOjE0OjQ2IDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIE1ha2VmaWxlLmluIChERU1BTkdMRV9IKTogQ2hhbmdlIGxvY2F0aW9uIHRvIHNoYXJlZCBkZW1hbmdsZS5oLgoJKiBkZW1hbmdsZS5oOiBEZWxldGVkLgoKCSogcmVsb2FkMS5jIChjdXJyZW50X2Z1bmN0aW9uX2RlY2wpOiBEZWNsYXJlLgoKVHVlIERlYyAgOCAxMTo1ODo1MSAxOTk4ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBjcHBsaWIuYyAoY29udmVydF9zdHJpbmcpOiBVc2UgYDB4MDBmZicsIG5vdCBgMHgwMGZmVScuCgpUdWUgRGVjICA4IDA5OjI4OjM2IDE5OTggIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGRieG91dC5jOiBJZiBVU0cgaXMgZGVmaW5lZCB1c2UgZ3N0YWIuaCwgZXZlbiBpZiBIQVZFX1NUQUJfSCBpcyBzZXQuCgoxOTk4LTEyLTA4ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAY3lnbnVzLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbjogVGVzdCBmb3IgYXZhaWxhYmlsaXR5IG9mIHB1dGNfdW5sb2NrZWQsIGZwdXRjX3VubG9ja2VkLAoJYW5kIGZwdXRzX3VubG9ja2VkLgoJKiBjb25maWd1cmU6IFJlYnVpbHQuCgkqIHN5c3RlbS5oOiBJZiB0aGUgKl91bmxvY2tlZCBmdW5jdGlvbnMgYXJlIGF2YWlsYWJsZSB1c2UgdGhlbQoJaW5zdGVhZCBvZiB0aGUgbG9ja2VkIGNvdW50ZXJwYXJ0cyBieSBkZWZpbmluZyBtYWNyb3MuCgkqIGNvbmZpZy5pbjogUmVnZW5lcmF0ZWQuCgpUdWUgRGVjICA4IDAwOjM0OjA1IDE5OTggIE1pa2UgU3R1bXAgIDxtcnNAd3JzLmNvbT4KCgkqIGkzODYvYnNkLmggKEFTTV9GSUxFX1NUQVJUKTogRG9uJ3QgdXNlIGR1bXBfYmFzZV9uYW1lLCBpdCBpcwoJd3JvbmcgYW5kIHNob3VsZCBvbmx5IGJlIHVzZWQgZm9yIGR1bXAgcmVsYXRlZCB0aGluZ3MsIG5vdAoJZGVidWdnaW5nIGluZm9ybWF0aW9uLCBpbnN0ZWFkIG1haW5faW5wdXRfZmlsZW5hbWUgc2hvdWxkIGJlIHVzZWQuCglBbHNvLCByZXVzZSBvdXRwdXRfZmlsZV9kaXJlY3RpdmUgaWYgcG9zc2libGUuCgkqIGkzODYvYWl4Mzg2bmcuaCAoQVNNX0ZJTEVfU1RBUlQpOiBMaWtld2lzZS4KCSogaTM4Ni9pc2MuaCAoQVNNX0ZJTEVfU1RBUlQpOiBMaWtld2lzZS4KCSogaTM4Ni93aW4tbnQuaCAoQVNNX0ZJTEVfU1RBUlQpOiBMaWtld2lzZS4KCSogaTM4Ni9zdW4zODYuaCAoQVNNX0ZJTEVfU1RBUlQpOiBMaWtld2lzZS4KCk1vbiBEZWMgIDcgMjM6NTY6MjggMTk5OCAgUm9iZXJ0IExpcGUgIDxyb2JlcnRsQGRnaWkuY29tPgoKCSogY29uZmlndXJlLmluIChtaXBzKi0qLWxpbnV4Kik6IEhhbmRsZSBiaWcgYW5kIGxpdHRsZSBlbmRpYW4KCXN5c3RlbXMuCgkqIGNvbmZpZ3VyZTogUmVidWlsdC4KCk1vbiBEZWMgIDcgMjM6MTQ6NTEgMTk5OCAgTWlrZSBTdHVtcCAgPG1yc0B3cnMuY29tPgoKCSogZW1pdC1ydGwuYzogRml4IHR5cG8uCgpNb24gRGVjICA3IDIzOjA3OjM4IDE5OTggIE5hdGhhbiBTaWR3ZWxsICA8bmF0aGFuQGFjbS5vcmc+CgoJKiByZWxvYWQxLmMgKGVsaW1pbmF0ZV9yZWdzKTogRG9uJ3QgZG8gYW55dGhpbmcsIGlmIHdlJ3JlIG5vdAoJZ2VuZXJhdGluZyBjb2RlLgoKTW9uIERlYyAgNyAxNToyNzowOSAxOTk4ICBESiBEZWxvcmllICA8ZGpAY3lnbnVzLmNvbT4KCgkqIG1pcHMvbWlwcy5oIChFTkNPREVfU0VDVElPTl9JTkZPKTogSGFuZGxlIFRBUkdFVF9FTUJFRERFRF9EQVRBLgoJQWRkIGNvbW1lbnQuCgkqIG1pcHMvbWlwcy5jIChtaXBzX3NlbGVjdF9zZWN0aW9uKTogQWRkIGNvbW1lbnQuCgpNb24gRGVjICA3IDE3OjU1OjA2IDE5OTggIE1pa2UgU3R1bXAgIDxtcnNAd3JzLmNvbT4KCgkqIGNjY3AuYyAoaWdub3JlX2VzY2FwZV9mbGFnKTogQWRkIHN1cHBvcnQgZm9yIFwgYXMgYG5hdHVyYWwnCgljaGFyYWN0ZXJzIGluIGZpbGUgbmFtZXMgaW4gI2xpbmUgdG8gYmUgY29uc2lzdGVudCB3aXRoICNpbmNsdWRlCgloYW5kbGluZy4gIFdlIHN1cHBvcnQgZXNjYXBlIHByb2Nlc3NpbmcgaW4gdGhlICMgMSAiLi4uIiB2ZXJzaW9uIG9mCgl0aGUgY29tbWFuZC4gIFNlZSBhbHNvIHN1cHBvcnQgaW4gY3AvbGV4LmMuCgkoaGFuZGxlX2RpcmVjdGl2ZSk6IExpa2V3aXNlLgoJKGRvX2xpbmUpOiBMaWtld2lzZS4KCjE5OTgtMTItMDcgIFphY2sgV2VpbmJlcmcgIDx6YWNrQHJhYmkucGh5cy5jb2x1bWJpYS5lZHU+CgoJKiBjcHBsaWIuYyAoaW5pdGlhbGl6ZV9jaGFyX3N5bnRheCk6IFVzZSBJU0FMUEhBIGFuZCBJU0FMTlVNCgkgIHNvIGl0J2xsIHdvcmsgb24gbm9uLUFTQ0lJIHBsYXRmb3Jtcy4gIEFsd2F5cyBjb25zaWRlciAkIGFuCgkgIGlkZW50aWZpZXIgY2hhcmFjdGVyLiAgVGFrZSBubyBhcmd1bWVudHMuCgkgIChjcHBfcmVhZGVyX2luaXQpOiBDYWxsIGluaXRpYWxpemVfY2hhcl9zeW50YXggd2l0aCBubwoJICBhcmd1bWVudHMuCgkgIChjcHBfc3RhcnRfcmVhZCk6IERvbid0IGNhbGwgaW5pdGlhbGl6ZV9jaGFyX3N5bnRheCBhZ2Fpbi4KCSAgQ2xlYXIgaXNfaWRjaGFyWyckJ10gYW5kIGlzX2lkc3RhcnRbJyQnXSBpZiBub3QKCSAgb3B0cy0+ZG9sbGFyc19pbl9pZGVudC4KCgkqIGNwcGxpYi5oIChzdHJ1Y3QgY3BwX3JlYWRlcik6IFJlcGxhY2Ugdm9pZCAqZGF0YSBlbGVtZW50IGJ5CgkgIGNwcF9vcHRpb25zICpvcHRzLiAgUmVhcnJhbmdlIGVsZW1lbnRzIHRvIG1ha2UgZ2RiIHByaW50b3V0CgkgIGxlc3MgYW5ub3lpbmcgKHB1dCBidWZmZXIgc3RhY2sgYXQgZW5kKS4KCSAgKENQUF9PUFRJT05TKTogR2V0IHJpZCBvZiBub3ctdW5uZWNlc3NhcnkgY2FzdC4KCgkqIGNwcG1haW4uYzogcy9kYXRhL29wdHMvIHdoZW4gaW5pdGlhbGl6aW5nIGNwcF9yZWFkZXIKCSAgc3RydWN0dXJlLgoJKiBjLWRlY2wuYzogTGlrZXdpc2UuCgkqIG9iamMvb2JqYy1hY3QuYzogTGlrZXdpc2UuCgkqIGZpeC1oZWFkZXIuYzogTGlrZXdpc2UuCgoxOTk4LTEyLTA3ICBaYWNrIFdlaW5iZXJnICA8emFja0ByYWJpLnBoeXMuY29sdW1iaWEuZWR1PgoKCSogY3BwbGliLmggKHN0cnVjdCBjcHBfYnVmZmVyKTogUmVwbGFjZSBkaXIgYW5kIGRsZW4gbWVtYmVycwoJd2l0aCBhIHN0cnVjdCBmaWxlX25hbWVfbGlzdCBwb2ludGVyLgoJKHN0cnVjdCBjcHBfcmVhZGVyKTogQWRkIHBvaW50ZXIgdG8gY2hhaW4gb2YgYGFjdHVhbAoJZGlyZWN0b3J5JyBpbmNsdWRlIHNlYXJjaHBhdGggZW50cmllcy4KCShzdHJ1Y3QgZmlsZV9uYW1lX2xpc3QpOiBBZGQgKmFsbG9jIHBvaW50ZXIgZm9yIHRoZSBzYWtlIG9mCgl0aGUgYWN0dWFsLWRpcmVjdG9yeSBjaGFpbi4KCglNb3ZlIGRlZmluaXRpb24gb2YgSE9TVF9XSURFX0lOVCBoZXJlLgoJKGNwcF9wYXJzZV9lc2NhcGUpOiBDaGFuZ2UgcHJvdG90eXBlIHRvIG1hdGNoIGNoYW5nZXMgaW4KCWNwcGV4cC5jLgoKCSogY3BwZmlsZXMuYyAoYWN0dWFsX2RpcmVjdG9yeSk6IE5ldyBmdW5jdGlvbi4KCShmaW5jbHVkZSk6IFVzZSBpdCB0byBpbml0aWFsaXplIHRoZSBidWZmZXIncyBhY3R1YWxfZGlyCgllbnRyeS4KCShmaW5kX2luY2x1ZGVfZmlsZSk6IFdlIGRvbid0IG5lZWQgdG8gZml4IHVwIG1heF9pbmNsdWRlX2xlbgoJaGVyZS4KCgkqIGNwcGxpYi5jIChkb19pbmNsdWRlKTogRG9uJ3QgYWxsb2NhdGUgYSBmaWxlX25hbWVfbGlzdCBvbgoJdGhlIGZseSBmb3IgY3VycmVudCBkaXJlY3RvcnkgIiIgaW5jbHVkZXMsIHVzZSB0aGUgb25lIHRoYXQncwoJYmVlbiBwcmVhbGxvY2F0ZWQgaW4gcGZpbGUtPmJ1ZmZlci0+YWN0dWFsX2Rpci4gIEhvaXN0IG91dAoJZHVwbGljYXRlIGNvZGUgZnJvbSB0aGUgc2VhcmNoX3N0YXJ0IHNlbGVjdGlvbiBsb2dpYy4KCShjcHBfcmVhZGVyX2luaXQpOiBJbml0aWFsaXplIHBmaWxlLT5hY3R1YWxfZGlycy4KCglSZW1vdmUgZGVmaW5pdGlvbiBvZiBIT1NUX1dJREVfSU5ULiAgQ2hhbmdlIGNhbGxzCgl0byBjcHBfcGFyc2VfZXNjYXBlIHRvIG1hdGNoIGNoYW5nZXMgaW4gY3BwZXhwLmMgKG5vdGUKCWhhcmRjb2RlZCBNQVNLLCB3aGljaCBpcyBzYWZlIHNpbmNlIHRoaXMgaXMgdGhlIHNvdXJjZQoJY2hhcmFjdGVyIHNldCkuCgoJKiBjcHBleHAuYzogQnJpbmcgb3ZlciBjaGFuZ2VzIHRvIGNwcF9wYXJzZV9lc2NhcGUgZnJvbSBjY2NwLmMKCXRvIGhhbmRsZSB3aWRlIGNoYXJhY3RlciBjb25zdGFudHMgaW4gI2lmIGRpcmVjdGl2ZXMuICBUaGUKCWZ1bmN0aW9uIG5vdyByZXR1cm5zIGEgSE9TVF9XSURFX0lOVCwgYW5kIHRha2VzIGEgdGhpcmQKCWFyZ3VtZW50IHdoaWNoIGlzIGEgYmluYXJ5IG1hc2sgZm9yIGFsbCBsZWdhbCB2YWx1ZXMgKDB4MDBmZgoJZm9yIDgtYml0IGBjaGFyJywgMHhmZmZmIGZvciAxNi1iaXQgYHdjaGFyX3QnLCBldGMuKSAgRGVmaW5lCglNQVhfQ0hBUl9UWVBFX01BU0sgYW5kIE1BWF9XQ0hBUl9UWVBFX01BU0suICBDaGFuZ2UgY2FsbGVycyBvZgoJY3BwX3BhcnNlX2VzY2FwZSB0byBtYXRjaC4gIFtGaXhlcyBjLXRvcnR1cmUvZXhlY3V0ZS93aWRlY2hhci0xLmNdCgpNb24gRGVjICA3IDE1OjM4OjI1IDE5OTggIERhdmUgQnJvbGxleSAgPGJyb2xsZXlAY3lnbnVzLmNvbT4KCgkqIGdjYy5jIChkZWZhdWx0X2NvbXBpbGVycyk6IEZpeCB0eXBvIGluIFVTRV9DUFBMSUIgc3BlYyBmb3IgY2MxLgoKTW9uIERlYyAgNyAxNTozODoyNSAxOTk4ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBjLWF1eC1pbmZvLmMgKGNvbmNhdCk6IFdyYXAgZnVuY3Rpb24gZGVmaW5pdGlvbiBpbiAhVVNFX0NQUExJQi4KCSogY3BwYWxsb2MuYzogTW92ZSBmdW5jdGlvbiBgeGNhbGxvYycgZnJvbSBjcHBsaWIuYyB0byBoZXJlLgoJKiBjcHBsaWIuYzogTW92ZSBmdW5jdGlvbiBgeGNhbGxvYycgZnJvbSBoZXJlIHRvIGNwcGFsbG9jLmMuCgpNb24gRGVjICA3IDExOjMwOjQ5IDE5OTggIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQGN5Z251cy5jb20+CgoJKiBmaW5hbC5jIChvdXRwdXRfYXNtX25hbWUpOiBVc2UgdGFicyB0byBzZXBhcmF0ZSBjb21tZW50cyBmcm9tCglhc3NlbWJseSB0ZXh0LgoKCUluY2x1ZGUgaW5zdHJ1Y3Rpb24gbGVuZ3RocyAoaWYgZGVmaW5lZCkgaW4gb3V0cHV0LgoKTW9uIERlYyAgNyAxMDo1MzozOCAxOTk4ICBNaWNoYWVsIEhheWVzICA8bS5oYXllc0BlbGVjLmNhbnRlcmJ1cnkuYWMubno+CgoJKiBsb29wLmMgKGNoZWNrX2RicmFfbG9vcCk6IEZpeCBpbml0aWFsX3ZhbHVlIGFuZCBpbml0aWFsX2VxdWl2X3ZhbHVlCglpbiB0aGUgbG9vcF9pbmZvIHN0cnVjdHVyZS4KCk1vbiBEZWMgIDcgMTE6MDQ6NDAgMTk5OCAgQ2F0aGVyaW5lIE1vb3JlICA8Y2xtQGN5Z251cy5jb20+CgoJKiBjb25maWd1cmUuaW4gKGFybSotKi1lY29zLWVsZik6IE5ldyB0YXJnZXQuCgkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZWQuCgkqIGNvbmZpZy9hcm0vZWxmLmggKEFTTV9XRUFLRU5fTEFCRUwpOiBEZWZpbmUuCgkqIGNvbmZpZy9hcm0vZWNvcy1lbGYuaDogTmV3IGZpbGUuCgkqIGNvbmZpZy9hcm0vdW5rbm93bi1lbGYuaCAoVEFSR0VUX1ZFUlNJT04pOiBDaGVjawoJZm9yIHJlZGVmaW5pdGlvbi4KCk1vbiBEZWMgIDcgMTY6MTU6NTEgMTk5OCAgSiJvcm4gUmVubmVja2UgIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIHNoLmMgKG91dHB1dF9mYXJfanVtcCk6IEVtaXQgYnJhZiBvbmx5IGZvciBUQVJHRVRfU0gyLgoKU3VuIERlYyAgNiAwNDoxOTo0NSAxOTk4ICBKZWZmIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogdmVyc2lvbi5jOiBCdW1wIGZvciBzbmFwc2hvdC4KClN1biBEZWMgIDYgMDU6MTY6MTYgMTk5OCAgTWljaGFlbCBIYXllcyAgPG0uaGF5ZXNAZWxlYy5jYW50ZXJidXJ5LmFjLm56PgoKCSogbG9vcC5jIChjaGVja19kYnJhX2xvb3ApOiBOZXcgYXJndW1lbnQgbG9vcF9pbmZvLiAgVXBkYXRlIGZpZWxkcwoJYXMgbmVlZGVkLgoKU3VuIERlYyAgNiAwMzo0MDoxMyAxOTk4ICBKZWZmIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogdmVyc2lvbi5jOiBCdW1wIGZvciBzbmFwc2hvdC4KClN1biBEZWMgIDYgMDc6NDk6MjkgMTk5OCAgQWxleGFuZHJlIE9saXZhICA8b2xpdmFAZGNjLnVuaWNhbXAuYnI+CgoJKiBnY2MudGV4aSAoQnVnIFJlcG9ydGluZyk6IDQwS2IgaXMgYSBzb2Z0IGxpbWl0LCBsYXJnZXIKCWNvbXByZXNzZWQgcmVwb3J0cyBhcmUgb2sgYW5kIHByZWZlcnJlZCBvdmVyIFVSTHMuCgpTdW4gRGVjICA2IDA3OjQ1OjMzIDE5OTggIEFsZXhhbmRyZSBPbGl2YSAgPG9saXZhQGRjYy51bmljYW1wLmJyPgoKCSogaW52b2tlLnRleGkgKFdhcm5pbmcgT3B0aW9ucyk6IFNvZnRlbiB0aGUgdG9uZSBvZiAtcGVkYW50aWMuCgpTdW4gRGVjICA2IDAwOjIwOjQ0IDE5OTggIEguSi4gTHUgIChoamxAZ251Lm9yZykKCgkqIHByaW50LXJ0bC5jIChwcmludF9ydHgpOiBBZGQgcHJvdG90eXBlLgoKCSogdW5yb2xsLmMgKGl0ZXJhdGlvbl9pbmZvKTogTWFrZSBpdCBzdGF0aWMuCgpTdW4gRGVjICA2IDAxOjE5OjQ2IDE5OTggIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBhbGlhcy5jIChtZW1yZWZzX2NvbmZsaWN0X3ApOiBBIHNlY29uZCBBTkRlZCBhZGRyZXNzCglkaXNhYmxlcyB0aGUgYWxpZ25lZCBhZGRyZXNzIG9wdGltaXphdGlvbi4KClNhdCBEZWMgIDUgMTg6NDg6MjUgMTk5OCAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGFscGhhLmMgKGFscGhhX2VtaXRfc2V0X2NvbnN0XzEpOiBGaXggcGFyZW50aGVzaXMgZXJyb3IKCWluIC1jIDw8IG4gY2FzZS4KClNhdCBEZWMgIDUgMTU6MTQ6NTIgMTk5OCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogaTk2MC5oIChCT09MX1RZUEVfU0laRSk6IERlZmluZS4KClN1biBEZWMgIDYgMDA6Mjg6MTYgMTk5OCAgTWljaGFlbCBIYXllcyAgPG0uaGF5ZXNAZWxlYy5jYW50ZXJidXJ5LmFjLm56PgoKCSogY29uZmlnL2M0eC9jNHguYyAodmFsaWRfcGFyYWxsZWxfbG9hZF9zdG9yZSk6IEZsb2cgZnVuY3Rpb25hbGl0eQoJZnJvbSBvbGQgdmFsaWRfcGFyYWxsZWxfb3BlcmFuZHNfNC4KCSh2YWxpZF9wYXJhbGxlbF9vcGVyYW5kc180KTogQ2hlY2sgdGhhdCBvcGVyYW5kcyBmb3IgNCBvcGVyYW5kCglwYXJhbGxlbCBpbnNucyBhcmUgdmFsaWQsIGV4Y2x1ZGluZyBsb2FkL3N0b3JlIGluc25zLgoJKiBjb25maWcvYzR4L2M0eC5oICh2YWxpZF9wYXJhbGxlbF9sb2FkX3N0b3JlKTogQWRkIHByb3RvdHlwZS4KCSogY29uZmlnL2M0eC9jNHgubWQgKCptb3ZxZl9wYXJhbGxlbCwgKm1vdnFpX3BhcmFsbGVsKTogVXNlCgl2YWxpZF9wYXJhbGxlbF9sb2FkX3N0b3JlIGluc3RlYWQgb2YgdmFsaWRfcGFyYWxsZWxfb3BlcmFuZHNfNC4KCSgqYWJzcWYyX21vdnFmX2Nsb2JiZXIsICpmbG9hdHFpcWYyX21vdnFmX2Nsb2JiZXIsCgkqbmVncWYyX21vdnFmX2Nsb2JiZXIsICphYnNxaTJfbW92cWlfY2xvYmJlciwKCSpmaXhxZnFpMl9tb3ZxaV9jbG9iYmVyLCAqbmVncWkyX21vdnFpX2Nsb2JiZXIsCgkqbm90cWlfbW92cWlfY2xvYmJlcik6IFVzZSB2YWxpZF9wYXJhbGxlbF9vcGVyYW5kc180LgoJKCpzdWJxZjNfbW92cWZfY2xvYmJlciwgKmFzaGxxaTNfbW92cWlfY2xvYmJlciwKCSphc2hycWkzX21vdnFpX2Nsb2JiZXIsICpsc2hycWkzX21vdnFpX2Nsb2JiZXIsCgkqc3VicWkzX21vdnFpX2Nsb2JiZXIpOiBVc2UgdmFsaWRfcGFyYWxsZWxfb3BlcmFuZHNfNS4KClNhdCBEZWMgIDUgMjM6NTI6MDEgMTk5OCAgTWljaGFlbCBIYXllcyAgPG0uaGF5ZXNAZWxlYy5jYW50ZXJidXJ5LmFjLm56PgoKCSogY29uZmlnL2M0eC9jNHguYyAoaXRlcmF0aW9uX2luZm8pOiBEZWxldGUgZXh0ZXJuLgoKRnJpIERlYyAgNCAyMDoxNTo1NyAxOTk4ICBCZXJuZCBTY2htaWR0ICA8Y3J1eEBwb29sLmluZm9ybWF0aWsucnd0aC1hYWNoZW4uZGU+CgoJKiB0bS50ZXhpIChTTUFMTF9SRUdJU1RFUl9DTEFTU0VTKTogTWFrZSBkZXNjcmlwdGlvbiBtYXRjaCByZWFsaXR5LgoKCSogZmluYWwuYyAoY2xlYW51cF9zdWJyZWdfb3BlcmFuZHMpOiBEZWxldGUgc29tZSB1bnVzZWQgY29kZS4KCgkqIHJlY29nLmggKE1BWF9SRUNPR19BTFRFUk5BVElWRVMpOiBOZXcgbWFjcm8uCgkoc3RydWN0IGluc25fYWx0ZXJuYXRpdmUpOiBOZXcgc3RydWN0dXJlIGRlZmluaXRpb24uCgkocmVjb2dfb3BfYWx0KTogRGVjbGFyZSB2YXJpYWJsZS4KCShwcmVwcm9jZXNzX2NvbnN0cmFpbnRzKTogRGVjbGFyZSBmdW5jdGlvbi4KCSogcmVjb2cuYyAocmVjb2dfb3BfYWx0KTogTmV3IHZhcmlhYmxlLgoJKGV4dHJhY3RfaW5zbik6IFZlcmlmeSBudW1iZXIgb2YgYWx0ZXJuYXRpdmVzIGlzIGluIHJhbmdlLgoJKHByZXByb2Nlc3NfY29uc3RyYWludHMpOiBOZXcgZnVuY3Rpb24uCgkqIHJlZy1zdGFjay5jOiBJbmNsdWRlIHJlY29nLmguCgkoY29uc3RyYWluX2FzbV9vcGVyYW5kcyk6IERlbGV0ZS4KCShnZXRfYXNtX29wZXJhbmRfbGVuZ3Rocyk6IERlbGV0ZS4KCShnZXRfYXNtX29wZXJhbmRfbl9pbnB1dHMpOiBOZXcgZnVuY3Rpb24uCgkocmVjb3JkX2FzbV9yZWdfbGlmZSk6IERlbGV0ZSBPUEVSQU5EUywgQ09OU1RSQUlOVFMsIE5fSU5QVVRTIGFuZAoJTl9PVVRQVVRTIGFyZ3MuICBBbGwgY2FsbGVycyBjaGFuZ2VkLgoJQ29tcHV0ZSBudW1iZXIgb2YgaW5wdXRzIGFuZCBvdXRwdXRzIGhlcmUgYnkgY2FsbGluZwoJZ2V0X2FzbV9vcGVyYW5kX25faW5wdXRzLgoJSW5zdGVhZCBvZiBjb25zdHJhaW5fYXNtX29wZXJhbmRzLCBjYWxsIGV4dHJhY3RfaW5zbiwKCWNvbnN0cmFpbl9vcGVyYW5kcyBhbmQgcHJlcHJvY2Vzc19jb25zdHJhaW50cy4gIFVzZSBpbmZvcm1hdGlvbgoJY29tcHV0ZWQgYnkgdGhlc2UgZnVuY3Rpb25zIHRocm91Z2hvdXQuCgkocmVjb3JkX3JlZ19saWZlKTogRGVsZXRlIGNvZGUgdGhhdCBpcyB1bnVzZWQgZHVlIHRvIGNoYW5nZXMgaW4KCXJlY29yZF9hc21fcmVnX2xpZmUuCgkoc3Vic3RfYXNtX3N0YWNrX3JlZ3MpOiBEZWxldGUgT1BFUkFORFMsIE9QRVJBTkRfTE9DLCBDT05TVFJBSU5UUywKCU5fSU5QVVRTIGFuZCBOX09VVFBVVFMgYXJncy4gIEFsbCBjYWxsZXJzIGNoYW5nZWQuCglTaW1pbGFyIGNoYW5nZXMgYXMgaW4gcmVjb3JkX2FzbV9yZWdfbGlmZS4KCShzdWJzdF9zdGFja19yZWdzKTogTW92ZSBuX29wZXJhbmRzIGRlY2xhcmF0aW9uIGludG8gdGhlIGlmIHN0YXRlbWVudAoJd2hlcmUgaXQncyB1c2VkLgoJRGVsZXRlIGNvZGUgdGhhdCBpcyB1bnVzZWQgZHVlIHRvIGNoYW5nZXMgaW4gc3Vic3RfYXNtX3N0YWNrX3JlZ3MuCgkqIHN0bXQuYyAoZXhwYW5kX2FzbV9vcGVyYW5kcyk6IFZlcmlmeSBudW1iZXIgb2YgYWx0ZXJuYXRpdmVzIGlzIGluCglyYW5nZS4KCSogTWFrZWZpbGUuaW4gKHJlZy1zdGFjay5vKTogRGVwZW5kIG9uIHJlY29nLmguCgpGcmkgRGVjICA0IDAyOjIzOjI0IDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGV4Y2VwdC5jIChzZXRfZXhjZXB0aW9uX3ZlcnNpb25fY29kZSk6IEFyZ3VtZW50IGlzIGFuICJpbnQiLgoKRnJpIERlYyAgNCAwMToyOToyOCAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBjb25maWd1cmUuaW4gKGhwcGEyKi0qLSopOiBIYW5kbGUgbGlrZSBocHBhMS4xLSotKiBmb3Igbm93LgoJKiBjb25maWd1cmU6IFJlYnVpbHQuCgpGcmkgRGVjICA0IDAxOjI5OjI4IDE5OTggIFJvYmVydCBMaXBlICA8cm9iZXJ0bEBkZ2lpLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbiAobWlwc2VsLSotbGludXgqKTogTmV3IHRhcmdldC4KCSogbWlwcy9saW51eC5oOiBOZXcgZmlsZSwgYmFzZWQgb24gb3RoZXIgTGludXggdGFyZ2V0cy4KClRodSBEZWMgIDMgMTE6MTk6NTAgMTk5OCAgTWlrZSBTdHVtcCAgPG1yc0B3cnMuY29tPgoKCSogZ3Roci12eHdvcmtzLmggKF9fZWhkdG9yKTogRml4IG1lbW9yeSBsZWFrLiAgVGhlIGRlbGV0ZSBob29rCglydW5zIGluIHRoZSBjb250ZXh0IG9mIHRoZSBkZWxldGVyLCBub3QgdGhlIGRlbGV0ZWUsIHNvIHdlIG11c3QKCXVzZSB0YXNrVmFyR2V0IHRvIGZpbmQgdGhlIGNvcnJlY3QgbWVtb3J5IHRvIGZyZWUuCgkoX19ndGhyZWFkX2tleV9jcmVhdGUpOiBJbml0aWFsaXplIHRoZSB0YXNrCgl2YXJpYWJsZSBzdWJzeXN0ZW0gc28gdGhhdCB0aGUgdGFzayB2YXJpYWJsZSBpcyBzdGlsbCBhY3RpdmUgd2hlbgoJdGhlIGRlbGV0ZSBob29rIGlzIHJ1bi4KCjE5OTgtMTItMDMgIEpvc2VwaCBTLiBNeWVycyAgPGpzbTI4QGNhbS5hYy51az4KCgkqIHBkcDExLmg6IFVzZSBvcHRpbWl6ZV9zaXplIGZvciBzcGFjZSBvcHRpbWl6YXRpb25zLgoJKiBwZHAxMS5jOiBMaWtld2lzZS4KCSogcGRwMTEubWQ6IExpa2V3aXNlLgoKCSogcGRwMTEuaCAoVEFSR0VUXzQwX1BMVVMpOiBGaXggdHlwby4KClRodSBEZWMgIDMgMTE6NDg6MzIgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogbG9jYWwtYWxsb2MuYyAoYmxvY2tfYWxsb2MpOiBTbGlnaHRseSByZXR1bmUgaGV1cmlzdGljIHRvIHdpZGVuCglxdHkgbGlmZXRpbWVzLgoKVGh1IERlYyAgMyAyMjozMDoxOCAxOTk4ICBNaWNoYWVsIEhheWVzICA8bS5oYXllc0BlbGVjLmNhbnRlcmJ1cnkuYWMubno+CgoJKiBhbGlhcy5jIChhZGRyX3NpZGVfZWZmZWN0X2V2YWwpOiBOZXcgZnVuY3Rpb24uCgkobWVtcmVmc19jb25mbGljdF9wKTogVXNlIGl0LgoJKiBydGwuaCAoYWRkcl9zaWRlX2VmZmVjdF9ldmFsKTogUHJvdG90eXBlIGl0LgoKMTk5OC0xMi0wMiAgSm9zZXBoIFMuIE15ZXJzICA8anNtMjhAY2FtLmFjLnVrPgoKCSogcGRwMTEubWQgKGV4dGVuZHNmZGYyKTogRml4IG1vZGUgbWlzbWF0Y2ggaW4gU0VULgoKV2VkIERlYyAgMiAxMToyMzowNyAxOTk4ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CgoJKiByZWxvYWQuYyAoZmluZF9yZWxvYWRzKTogV2hlbiBmb3JjZSBjb25zdCB0byBtZW1vcnksIHB1dCByZXN1bHQKCWluIHN1YnN0ZWRfb3BlcmFuZCBub3QgKnJlY29nX29wZXJhbmRfbG9jLgoKMTk5OC0xMi0wMiAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQGN5Z251cy5jb20+CgoJKiBjLWxleC5jOiBGaXggaW5kZW50YXRpb24gZnJvbSBsYXN0IHBhdGNoLgoJUmVtb3ZlIHRyYWlsaW5nIHdoaXRlc3BhY2UuCgkqIHJlYWwuYzogTGlrZXdpc2UuCgpXZWQgRGVjICAyIDEwOjExOjEyIDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGZsb3cuYyAoZGVsZXRlX2Jsb2NrKTogQ2FsbCBzZXRfbGFzdF9pbnNuIGFmdGVyIHdlIGhhdmUgcmVzZXQKCU5FWFRfSU5TTiAoa2VwdF90YWlsKS4KCldlZCBEZWMgIDIgMDA6NDc6MzEgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogbWlwcy5tZCAodHJhcF9pZik6IFVzZSAiJDAiIGZvciB0aGUgdmFsdWUgemVyby4KClR1ZSBEZWMgIDEgMjA6NDk6NDkgMTk5OCAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQGN5Z251cy5jb20+CgkJCSAgU3RlcGhlbiBMIE1vc2hpZXIgIDxtb3NoaWVyQHdvcmxkLnN0ZC5jb20+CgkJCSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGMtY29tbW9uLmMgKGRlY2xhcmVfZnVuY3Rpb25fbmFtZSk6IERlY2xhcmUgcHJlZGVmaW5lZCB2YXJpYWJsZQoJYF9fZnVuY19fJy4KCgkqIGMtZGVjbC5jIChmbGFnX2lzb2M5eCk6IFNldCB0byAxIGJ5IGRlZmF1bHQuCgkoY19kZWNvZGVfb3B0aW9uKTogSGFuZGxlIC1zdGQ9IG9wdGlvbi4gIFJlbW92ZSAtZmxhbmctaXNvYzl4LgoJKGdyb2tkZWNsYXJhdG9yKTogQWx3YXlzIGVtaXQgd2FybmluZyBhYm91dCBpbXBsaWNpdCBpbnQgZm9yIElTTyBDIDl4LgoKCSogYy1wYXJzZS5pbjogQWxsb3cgY29uc3RydWN0b3JzIGluIElTTyBDIDl4LgoJUmV3cml0ZSBkZXNpZ25hdG9yIGxpc3QgaGFuZGxpbmcuCglBbGxvdyBbKl0gcGFyYW1ldGVycy4KCURvbid0IHdhcm4gYWJvdXQgY29tbWEgYXQgZW5kIG9mIGVudW0gZGVmaW5pdGlvbiBmb3IgSVNPIEMgOXguCgoJKiBjY2NwLmMgKGM5eCk6IE5ldyB2YXJpYWJsZS4KCShyZXN0X2V4dGVuc2lvbik6IE5ldyB2YXJpYWJsZS4KCShwcmludF9oZWxwKTogRG9jdW1lbnQgbmV3IC1zdGQ9IG9wdGlvbi4KCShtYWluKTogUmVjb2duaXplIC1zdGQ9IG9wdGlvbi4gIFNldCBjOXggYXBwcm9wcmlhdGVseS4KCShjcmVhdGVfZGVmaW5pdGlvbik6IFJlY29nbml6ZSBJU08gQyA5eCB2YXJhcmcgbWFjcm9zLgoKCSogZ2NjLmMgKGRlZmF1bHRfY29tcGlsZXJzKTogQWRqdXN0IHNwZWNzIGZvciAtc3RkIG9wdGlvbnMuCgkob3B0aW9uX21hcCk6IEFkZCAtLXN0ZC4KCShkaXNwbGF5X2hlbHApOiBEb2N1bWVudCAtc3RkLgoKCSogdG9wbGV2LmMgKGRvY3VtZW50ZWRfbGFuZ19vcHRpb25zKTogQWRkIC1zdGQgYW5kIHJlbW92ZQoJLWZsYW5nLWlzb2M5eC4KCgkqIGMtbGV4LmMgKHl5bGV4KTogUmVjb2duaXplIGhleCBGUCBjb25zdGFudHMgYW5kIGNhbGwgUkVBTF9WQUxVRV9BVE9GCglvciBSRUFMX1ZBTFVFX0hUT0YgYmFzZWQgb24gYmFzZSBvZiB0aGUgY29uc3RhbnRzLgoJKiBmb2xkLWNvbnN0LmMgKHJlYWxfaGV4X3RvX2YpOiBOZXcgZnVuY3Rpb24uICBSZXBsYWNlbWVudCBmdW5jdGlvbgoJZm9yIGhleCBGUCBjb252ZXJzaW9uIGlmIFJFQUxfQVJJVEhNRVRJQyBpcyBub3QgZGVmaW5lZC4KCSogcmVhbC5jIChhc2N0b2VnKTogQWRkIGhhbmRsaW5nIG9mIGhleCBGUCBjb25zdGFudHMuCgkqIHJlYWwuaDogRGVmaW5lIFJFQUxfVkFMVUVfSFRPRiBpZiBuZWNlc3NhcnkgdXNpbmcgZXJlYWxfYXRvZiBvcgoJcmVhbF9oZXhfdG9fZi4KClR1ZSBEZWMgIDEgMTY6NDU6NDkgMTk5OCAgU3RhbiBDb3ggIDxzY294QGN5Z251cy5jb20+CgoJKiBtaXBzLm1kIChkaXZtb2RzaTQqLCBkaXZtb2RkaTQqLCB1ZGl2bW9kc2k0KiwgdWRpdm1vZGRpNCk6IEFkZAoJLW1jaGVjay1yYW5nZS1kaXZpc2lvbi8tbWNoZWNrLXplcm8tZGl2aXNpb24gY2hlY2tpbmcuICBBdm9pZCBhcyBtYWNybwoJZXhwYW5zaW9uLiAgVXNlIGhpL2xvIGFzIGRlc3RpbmF0aW9uIHJlZ2lzdGVyLgoJKGRpdl90cmFwKTogTmV3LgoJKGRpdnNpMyosIGRpdmRpMyosIG1vZHNpMyosIG1vZGRpMyosIHVkaXZzaTMqLCB1ZGl2ZGkzKiwgdW1vZHNpMyosCgl1bW9kZGkzKik6IEFkZCAtbWNoZWNrLXJhbmdlLWRpdmlzaW9uLy1tY2hlY2stemVyby1kaXZpc2lvbiBjaGVja2luZy4KCUF2b2lkIGFzIG1hY3JvIGV4cGFuc2lvbi4gIFVzZSBoaS9sbyBhcyBkZXN0aW5hdGlvbiByZWdpc3Rlci4KCgkqIG1pcHMuaCAoTUFTS19DSEVDS19SQU5HRV9ESVYpOiBOZXcuCgkoTUFTS19OT19DSEVDS19aRVJPX0RJVik6IE5ldy4KCShFTElNSU5BQkxFX1JFR1MpOiBBZGRlZCBHUF9SRUdfRklSU1QgKyAzMS4KCShDQU5fRUxJTUlOQVRFLCBJTklUSUFMX0VMSU1JTkFUSU9OX09GRlNFVCk6IEFsbG93IGZvciBnZXR0aW5nCglyZXR1cm4gYWRkcmVzcyBmb3IgbGVhZiBmdW5jdGlvbnMgb3V0IG9mIHIzMSB0byBzdXBwb3J0CglidWlsdGluX3JldHVybl9hZGRyZXNzLgoKVHVlIERlYyAgMSAxNTowMzozMCAxOTk4ICBIZXJtYW4gQS5KLiB0ZW4gQnJ1Z2dlICA8SGFqLlRlbi5CcnVnZ2VAbmV0LkhDQy5ubD4KCgkqIGp1bXAuYyAoanVtcF9vcHRpbWl6ZSk6IENhbGwgcmVnc19zZXRfYmV0d2Vlbl9wIHdpdGggUFJFVl9JTlNOKHgpLAoJTkVYVF9JTlNOKHgpIHRvIGNoZWNrIGluc24geC4KClR1ZSBEZWMgIDEgMTU6MjA6NDQgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogZmxvdy5jIChkZWxldGVfYmxvY2spOiBDYWxsIHNldF9sYXN0X2luc24gaWYgd2UgZW5kIHVwIGRlbGV0aW5nIHRoZQoJbGFzdCBpbnNuIGluIHRoZSBydGwgY2hhaW4uCgoJKiByZWxvYWQxLmMgKHJlbG9hZCk6IERvIG5vdCBzZXQgcmVsb2FkX2NvbXBsZXRlZCBvciBzcGxpdCBpbnNucwoJaGVyZS4gIEluc3RlYWQuLi4KCSogdG9wbGV2LmMgKHJlc3Rfb2ZfY29tcGlsYXRpb24pOiBTZXQgcmVsb2FkX2NvbXBsZXRlZCBhZnRlcgoJcmVsb2FkIHJldHVybnMuICBTcGxpdCBpbnNucyBhZnRlciByZWxvYWRfY3NlIGhhcyBydW4uCgpUdWUgRGVjICAxIDExOjU1OjA0IDE5OTggIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBmaW5hbC5jIChmaW5hbF9zY2FuX2luc24pOiBBYm9ydCBpZiBibG9ja19kZXB0aCBmYWxscyBiZWxvdyAwLgoKVHVlIERlYyAgMSAxMDoyMzoxNiAxOTk4ICBOaWNrIENsaWZ0b24gIDxuaWNrY0BjeWdudXMuY29tPgoKCSogY29uZmlnL2FybS90LWFybS1lbGYgKExJQkdDQzJfQ0ZMQUdTKTogRGVmaW5lIGluaGliaXRfbGliYy4KClR1ZSBEZWMgIDEgMTA6MjI6MTggMTk5OCAgTmljayBDbGlmdG9uICA8bmlja2NAY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy9hcm0vdW5rbm93bi1lbGYuaCAoQVNNX09VVFBVVF9EV0FSRjJfQUREUl9DT05TVCk6IFJlbW92ZQoJdXNlIG9mIHVzZXItbGFiZWxfcHJlZml4LgoKVHVlIERlYyAgMSAxNzo1ODoyNiAxOTk4ICBKIm9ybiBSZW5uZWNrZSAgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogcmVsb2FkMS5jIChlbWl0X3JlbG9hZF9pbnNucyk6IENsZWFyIHNwaWxsX3JlZ19zdG9yZQoJd2hlbiBkb2luZyBhIG5ldyBub24taW5oZXJpdGVkIHJlbG9hZCBmcm9tIHRoZSBzYW1lIHBzZXVkby4KCgkqIGxvY2FsLWFsbG9jLmMgKGZ1bmN0aW9uX2ludmFyaWFudF9wKTogTmV3IGZ1bmN0aW9uLgoJKHVwZGF0ZV9lcXVpdl9yZWdzKTogVXNlIGZ1bmN0aW9uX2ludmFyaWFudF9wIGluc3RlYWQgb2YgQ09OU1RBTlRfUAoJdG8gZGVjaWRlIGlmIGFuIGVxdWl2YWxlbmNlIHNob3VsZCBiZSByZWNvcmRlZC4KCSogcmVsb2FkMS5jIChudW1fZWxpbWluYWJsZV9pbnZhcmlhbnRzKTogTmV3IHN0YXRpYyB2YXJpYWJsZS4KCShyZWxvYWQpOiBTZXQgaXQuICBVc2UgZnVuY3Rpb25faW52YXJpYW50X3AgaW5zdGVhZCBvZiBDT05TVEFOVF9QCgl0byBkZWNpZGUgaWYgYW4gZXF1aXZhbGVuY2Ugc2hvdWxkIGJlIHJlY29yZGVkLgoJVW5zaGFyZSBQTFVTLgoJKGNhbGN1bGF0ZV9uZWVkc19hbGxfaW5zbnMpOiBTa2lwIGluc25zIHRoYXQgb25seSBzZXQgYW4gZXF1aXZhbGVuY2UuCglUYWtlIG51bV9lbGltaW5hYmxlX2ludmFyaWFudHMgaW50byBhY2NvdW50IHdoZW4gZGVjaWRpbmcKCWlmIHJlZ2lzdGVyIGVsaW1pbmF0aW9uIHNob3VsZCBiZSBkb25lLgoJKHJlbG9hZF9hc19uZWVkZWQpOiBUYWtlIG51bV9lbGltaW5hYmxlX2ludmFyaWFudHMgaW50byBhY2NvdW50Cgl3aGVuIGRlY2lkaW5nIGlmIHJlZ2lzdGVyIGVsaW1pbmF0aW9uIHNob3VsZCBiZSBkb25lLgoJKGVsaW1pbmF0ZV9yZWdzKTogSGFuZGxlIG5vbi1jb25zdGFudCByZWdfZXF1aXZfY29uc3RhbnQuCgkqIHJ0bC5oIChmdW5jdGlvbl9pbnZhcmlhbnRfcCk6IERlY2xhcmUuCgpNb24gTm92IDMwIDAyOjAwOjA4IDE5OTggIEplZmYgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiB2ZXJzaW9uLmM6IEJ1bXAgZm9yIHNuYXBzaG90LgoKTW9uIE5vdiAzMCAwMDo0Mjo1OSAxOTk4ICBKZWZmIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogdmVyc2lvbi5jOiBCdW1wIGZvciBzbmFwc2hvdC4KClN1biBOb3YgMjkgMjI6NTk6NDAgMTk5OCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZXhjZXB0LmMgKGFkZF9uZXdfaGFuZGxlcik6IENvbXBsYWluIGFib3V0IGFkZGl0aW9uYWwgaGFuZGxlcnMKCWFmdGVyIG9uZSB0aGF0IGNhdGNoZXMgZXZlcnl0aGluZy4KClNhdCBOb3YgMjggMTA6NTY6MzIgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogY29uZmlndXJlLmluIChhbHBoYSotKi1uZXRic2QpOiBGaXggdHlwby4KCSogY29uZmlndXJlOiBSZWJ1aWx0LgoKRnJpIE5vdiAyNyAxMjoyODo1NiAxOTk4ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBzeXN0ZW0uaDogSW5jbHVkZSBsaWJpYmVydHkuaC4KCgkqIGMtYXV4LWluZm8uYzogUmVtb3ZlIHByb3RvdHlwZXMgZm9yIGNvbmNhdC9jb25jYXQzLiAgQ2hhbmdlCglmdW5jdGlvbiBgY29uY2F0JyBmcm9tIGZpeGVkIHBhcmFtZXRlcnMgdG8gdmFyaWFibGUgcGFyYW1ldGVycywKCWFzIGlzIGRvbmUgaW4gbGliaWJlcnR5LiAgQWxsIGNhbGxlcnMgb2YgY29uY2F0L2NvbmNhdDMKCWNoYW5nZWQgdG8gdXNlIHRoZSBuZXcgYGNvbmNhdCcgd2l0aCB2YXJpYWJsZSBhcmdzLgoKCSogY2NjcC5jOiBSZW1vdmUgdGhpbmdzIG1hZGUgcmVkdW5kYW50IGJ5IGxpYmliZXJ0eS5oIGFuZC9vcgoJY29uZm9ybSB0byBsaWJpYmVydHkgc3RhbmRhcmRzLgoJKiBjZXhwLnk6IExpa2V3aXNlLgoJKiBjb2xsZWN0Mi5jOiBMaWtld2lzZS4KCSogY29uZmlnLzE3NTBhLzE3NTBhLmg6IExpa2V3aXNlLgoJKiBjcHBhbGxvYy5jOiBMaWtld2lzZS4KCSogY3BwZXhwLmM6IExpa2V3aXNlLgoJKiBjcHBmaWxlcy5jOiBMaWtld2lzZS4KCSogY3BwaGFzaC5jOiBMaWtld2lzZS4KCSogY3BwbGliLmM6IExpa2V3aXNlLgoJKiBkeW4tc3RyaW5nLmM6IExpa2V3aXNlLgoJKiBmaXgtaGVhZGVyLmM6IExpa2V3aXNlLgoJKiBnY2MuYzogTGlrZXdpc2UuCgkqIGdjb3YuYzogTGlrZXdpc2UuCgkqIGdlbmF0dHIuYzogTGlrZXdpc2UuCgkqIGdlbmF0dHJ0YWIuYzogTGlrZXdpc2UuCgkqIGdlbmNoZWNrLmM6IExpa2V3aXNlLgoJKiBnZW5jb2Rlcy5jOiBMaWtld2lzZS4KCSogZ2VuY29uZmlnLmM6IExpa2V3aXNlLgoJKiBnZW5lbWl0LmM6IExpa2V3aXNlLgoJKiBnZW5leHRyYWN0LmM6IExpa2V3aXNlLgoJKiBnZW5mbGFncy5jOiBMaWtld2lzZS4KCSogZ2VuZ2VucnRsLmM6IExpa2V3aXNlLgoJKiBnZW5vcGluaXQuYzogTGlrZXdpc2UuCgkqIGdlbm91dHB1dC5jOiBMaWtld2lzZS4KCSogZ2VucGVlcC5jOiBMaWtld2lzZS4KCSogZ2VucmVjb2cuYzogTGlrZXdpc2UuCgkqIGdldHB3ZC5jOiBMaWtld2lzZS4KCSogaGFsZnBpYy5jOiBMaWtld2lzZS4KCSogaGFzaC5jOiBMaWtld2lzZS4KCSogbWlwcy10ZHVtcC5jOiBMaWtld2lzZS4gIFdyYXAgbWFsbG9jL3JlYWxsb2MvY2FsbG9jIHByb3RvdHlwZXMKCWluIE5FRURfREVDTEFSQVRJT05fKiBtYWNyb3MuCgoJKiBtaXBzLXRmaWxlLmM6IFJlbW92ZSB0aGluZ3MgbWFkZSByZWR1bmRhbnQgYnkgbGliaWJlcnR5LmggYW5kL29yCgljb25mb3JtIHRvIGxpYmliZXJ0eSBzdGFuZGFyZHMuCgkoZmF0YWwpOiBGaXggY29uc3QtaWZpY2F0aW9uIG9mIHZhcmlhYmxlIGBmb3JtYXQnIGluCgkhQU5TSV9QUk9UT1RZUEVTIGNhc2UuCgoJKiBwcmVmaXguYzogUmVtb3ZlIHRoaW5ncyBtYWRlIHJlZHVuZGFudCBieSBsaWJpYmVydHkuaCBhbmQvb3IKCWNvbmZvcm0gdG8gbGliaWJlcnR5IHN0YW5kYXJkcy4KCgkqIHByaW50LXJ0bC5jOiBSZW5hbWUgdmFyaWFibGUgYHNwYWNlcycgdG8gYHhzcGFjZXMnIHRvIGF2b2lkCgljb25mbGljdGluZyB3aXRoIGZ1bmN0aW9uIGBzcGFjZXMnIGZyb20gbGliaWJlcnR5LgoKCSogcHJvZmlsZS5jOiBSZW1vdmUgdGhpbmdzIG1hZGUgcmVkdW5kYW50IGJ5IGxpYmliZXJ0eS5oIGFuZC9vcgoJY29uZm9ybSB0byBsaWJpYmVydHkgc3RhbmRhcmRzLgoJKiBwcm90b2l6ZS5jOiBMaWtld2lzZS4KCSogcnRsLmg6IExpa2V3aXNlLgoJKiBzY2FuLmg6IExpa2V3aXNlLgoJKiB0bGluay5jOiBMaWtld2lzZS4KCSogdG9wbGV2LmM6IExpa2V3aXNlLgoJKiB0b3BsZXYuaDogTGlrZXdpc2UuCgkqIHRyZWUuaDogTGlrZXdpc2UuCgpUaHUgTm92IDI2IDA4OjM4OjA2IDE5OTggIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGNwcGZpbGVzLmMgKHNpbXBsaWZ5X3BhdGhuYW1lKTogVW4tQU5TSS1meSBmdW5jdGlvbiBkZWZpbml0aW9uLgoKVGh1IE5vdiAyNiAyMzo0NTozNyAxOTk4ICBNaWNoYWVsIEhheWVzICA8bS5oYXllc0BlbGVjLmNhbnRlcmJ1cnkuYWMubno+CgoJKiBSRUFETUUuQzRYOiBVcGRhdGVkIFVSTHMuCgkqIGNvbmZpZy9jNHgvYzR4LmMgKGM0eF9hZGRyZXNzX2NvbmZsaWN0KTogRml4IHR5cG8uCgkodmFsaWRfcGFyYWxsZWxfb3BlcmFuZHNfNSk6IFJlbW92ZSB1bnVzZWQgdmFyaWFibGUuCgpUaHUgTm92IDI2IDIzOjQwOjAzIDE5OTggIE1pY2hhZWwgSGF5ZXMgIDxtLmhheWVzQGVsZWMuY2FudGVyYnVyeS5hYy5uej4KCgkqIGNvbmZpZy9jNHgvYzR4LmggKFRBUkdFVF9ERUZBVUxUKTogRml4IHR5cG8uCgoxOTk4LTExLTI2ICBNYW5mcmVkIEhvbGxzdGVpbiAgPG1hbmZyZWRAcy1kaXJla3RuZXQuZGU+CgoJKiBNYWtlZmlsZS5pbiAoQ09ORklHX0xBTkdVQUdFUyk6IE5ldyBtYWNybyB0YWtpbmcgYWxsIGxhbmd1YWdlcwoJd2hpY2ggY2FuIGJlIGNvbmZpZ3VyZWQuCgkoTEFOR1VBR0VTKTogVXNlICQoQ09ORklHX0xBTkdVQUdFUykgaW5zdGVhZCBvZiBAYWxsX2xhbmd1YWdlc0AKCShNYWtlZmlsZSk6IFBhc3MgYWN0dWFsIExBTkdVQUdFUyB0aHJvdWdoIHRoZSBlbnZpcm9ubWVudCB3aGVuCglyZS1jb25maWd1cmluZy4KCShjc3RhbXAtaCk6IExpa2V3aXNlLgoJKGNvbmZpZy5zdGF0dXMpOiBMaWtld2lzZS4KCgkqIGNvbmZpZ3VyZS5pbiAoZW5hYmxlX2xhbmd1YWdlcyk6IEFkZCBuZXcgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIKCSItLWVuYWJsZS1sYW5ndWFnZXM9bGFuZzEsbGFuZzIsLi4uIi4KCSgke3NyY2Rpcn0vKi9jb25maWctbGFuZy5pbik6IENoYW5nZSBoYW5kbGluZyB0byBjb25maWd1cmUgb25seQoJdGhvc2UgZGlyZWN0b3JpZXMsIHRoYXQgdGhlIHVzZXIgbWlnaHQgaGF2ZSBlbmFibGVkOyBkZWZhdWx0IHRvCgkiYWxsIiBleGlzdGluZyBsYW5ndWFnZXMuCgkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KClRodSBOb3YgMjYgMDA6MTk6MTkgMTk5OCAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIHJ0bGFuYWwuYyAocmVnc19zZXRfYmV0d2Vlbl9wKTogTmV3IGZ1bmN0aW9uLgoJKiBydGwuaCAocmVnc19zZXRfYmV0d2Vlbl9wKTogUHJvdG90eXBlIGl0LgoJKiBqdW1wLmMgKGp1bXBfb3B0aW1pemUpOiBVc2UgaXQgaW5zdGVhZCBvZiBtb2RpZmllZF9iZXR3ZWVuX3AKCWluIHRoZSBTZXAgMiBjaGFuZ2UuCgpXZWQgTm92IDI1IDIzOjMyOjAyIDE5OTggIElhbiBEYWxsICA8SWFuLkRhbGxAZHN0by5kZWZlbmNlLmdvdi5hdT4KCQkJICBNYXR0aGlhcyBQZmFsbGVyICA8bGVvQGRhY2hhdS5tYXJjby5kZT4KCgkqIGludm9rZS50ZXhpIChPcHRpb24gU3VtbWFyeSwgTlMzMksgT3B0aW9ucyk6IEFkZCBkZXNjcmlwdGlvbgoJb2YgTlMzMksgc3BlY2lmaWMgb3B0aW9ucy4KCgkqIG5zMzJrLm1kICh0c3RkZiwgY21wZGYsIG1vdmRmLCB0cnVuY2Rmc2YyLCBmaXhkZnFpMiwgZml4ZGZoaTIsCglmaXhkZnNpMiwgZml4dW5zZGZxaTIsIGZpeHVuc2RmaGkyLCBmaXh1bnNkZnNpMiwgZml4X3RydW5jZGZxaTIsCglmaXhfdHJ1bmNkZmhpMiwgZml4X3RydW5jZGZzaTIsIGFkZGRmMywgc3ViZGYzLCBtdWxkZjMsIGRpdmRmMywKCW5lZ2RmMiwgYWJzZGYyKTogVXNlIGwgaW5zdGVhZCBvZiBmIHNpbmNlIHRoZSBkb3VibGUgY2xhc3MgYW5kCglmbG9hdCBjbGFzcyBhcmUgbm8gbG9uZ2VyIHRoZSBzYW1lLgoJKGNtcHNpLCB0cnVuY3NpcWkyLCB0cnVuY3NpaGkyLCBhZGRzaTMsIHN1YnNpMywgbXVsc2kzLCB1bXVsc2lkaTMsCglkaXZzaTMsIG1vZHNpMywgYW5kc2kzLCBpb3JzaTMsIHhvcnNpMywgbmVnc2kyLCBvbmVfY21wbHNpMiwKCWFzaGxzaTMsIGFzaGxoaTMsIGFzaGxxaTMsIHJvdGxzaTMsIHJvdGxoaTMsIHJvdGxxaTMsIGFic3NpMiwuLi4pOgoJVXNlICJnIiBpbnN0ZWFkIG9mICJybW4iIHNpbmNlIExFR0lUSU1BVEVfUElDX09QRVJBTkQgaGFzIGJlZW4KCWZpeGVkLgoJKGNtcHNpLCBjbXBoaSwgY21wcWkpOiBVc2UgZ2VuZXJhbF9vcGVyYW5kIGluc3RlYWQgb2YKCW5vbl9pbW1lZGlhdGVfb3BlcmFuZC4gUmVtb3ZlcyBlcnJvbmVvdXMgYXNzdW1wdGlvbiB0aGF0IGNhbid0Cgljb21wYXJlIGNvbnN0YW50cy4KCShtb3ZzZiwgbW92c2ksIG1vdmhpLCBtb3ZxaSwuLi4pOiBOZXcgcmVnaXN0ZXIgbnVtYmVyaW5nIHNjaGVtZS4KCShtb3ZzaSwgYWRkc2kzKTogVXNlIE5TMzJLX0RJU1BMQUNFTUVOVF9QIGluc3RlYWQgb2YgaGFyZCBjb2RlZAoJY29uc3RhbnRzLgoJKG1vdnN0cnNpLCBtb3ZzdHJzaTEsIG1vdnN0cnNpMik6IENvbXBsZXRlbHkgbmV3IGJsb2NrIG1vdmUKCXNjaGVtZS4KCSguLi4pOiBQYXR0ZXJucyB0byBleHBsb2l0IG11bHRpcGx5LWFkZCBpbnN0cnVjdGlvbnMuCgkodWRpdm1vZHNpNCwgdWRpdm1vZHNpX2ludGVybmFsNCwgdWRpdm1vZGhpNCwKCXVkaXZtb2RkaWhpNF9pbnRlcm5hbCwgdWRpdm1vZHFpNCwgdWRpdm1vZGRpcWk0X2ludGVybmFsKTogTmV3CglwYXR0ZXJucyB0byBleHBsb2l0IGV4dGVuZGVkIGRpdmlkZSBpbnNucy4KCSh1ZGl2c2kzLCB1ZGl2aGkzLCB1ZGl2cWkzKTogUmVtb3ZlIHNpbmNlIHN1cGVyc2VkZWQgYnkgdWRpdm1vZHNpCglldGMgcGF0dGVybnMuCgoJKiBuczMyay5oIChGVU5DVElPTl9WQUxVRSwgTElCQ0FMTF9WQUxVRSk6IFVzZSBmMCBmb3IgY29tcGxleAoJZmxvYXQgcmV0dXJuIHZhbHVlcyBhcyB3ZWxsIGFzIHNpbXBsZSBzY2FsYXIgZmxvYXRzLgoJKFRBUkdFVF8zMjM4MSwgVEFSR0VUX01VTFRfQURELCBUQVJHRVRfU1dJVENIRVMpOgoJU3VwcG9ydCBuZXcgZmxhZyB0byBkZW5vdGUgMzIzODEgZnB1LgoJKE9WRVJSSURFX09QVElPTlMpOiAzMjM4MSBpcyBhIHN0cmljdCBzdXBlcnNldCBvZiAzMjA4MS4KCShDT05ESVRJT05BTF9SRUdJU1RFUl9VU0FHRSk6IERpc2FibGUgZXh0cmEgMzIzODEgcmVnaXN0ZXJzIGlmIG5vdAoJY29tcGlsaW5nIGZvciAzMjM4MS4KCShGSVJTVF9QU0VVRE9fUkVHSVNURVIsIEZJWEVEX1JFR0lTVEVSUywgQ0FMTF9VU0VEX1JFR0lTVEVSUywKCVJFR0lTVEVSX05BTUVTLCBBRERJVElPTkFMX1JFR0lTVEVSX05BTUVTLCBPVVRQVVRfUkVHSVNURVJfTkFNRVMsCglSRUdfQUxMT0NfT1JERVIsIERCWF9SRUdJU1RFUl9OVU1CRVIsIFIwX1JFR05VTSwgRjBfUkVHTlVNLAoJTDFfUkVHTlVNLCBTVEFDS19QT0lOVEVSX1JFR05VTSwgRlJBTUVfUE9JTlRFUl9SRUdOVU0sCglMT05HX0ZQX1JFR1NfUCwgQVJHX1BPSU5URVJfUkVHTlVNLCByZWdfY2xhc3MsIFJFR19DTEFTU19OQU1FUywKCVJFR19DTEFTU19DT05URU5UUywgU1VCU0VUX1AsUkVHTk9fUkVHX0NMQVNTLAoJUkVHX0NMQVNTX0ZST01fTEVUVEVSLCBGVU5DVElPTl9QUk9MT0dVRSwgRlVOQ1RJT05fRVBJTE9HVUUsCglSRUdOT19PS19GT1JfSU5ERVhfUCwgRlBfUkVHX1AsIFJFR19PS19GT1JfSU5ERVhfUCwKCVJFR19PS19GT1JfQkFTRV9QLCBNRU1fUkVHKTogTmV3IHJlZ2lzdGVyIHNjaGVtZSB0byBpbmNsdWRlIDMyMzgxCglmcHUgcmVnaXN0ZXJzIGFuZCBzcGVjaWFsIHJlZ2lzdGVyIGNsYXNzZXMgZm9yIG5ldyAzMjM4MQoJaW5zdHJ1Y3Rpb25zIGRvdGYgYW5kIHBvbHlmLgoJKE1PREVTX1RJRUFCTEVfUCk6IEFsbG93IGFsbCBpbnRlZ2VyIG1vZGVzLCBub3RhYmx5IERJIGFuZCBTSSwgdG8KCWJlIHRpZWFibGUuCgkoSU5DT01JTkdfUkVUVVJOX0FERFJfUlRYLCBSRVRVUk5fQUREUl9SVFgsCglJTkNPTUlOR19GUkFNRV9TUF9PRkZTRVQpOiBOZXcgbWFjcm9zIGluIGNhc2UgRFdBUkYgc3VwcG9ydCBpcwoJcmVxdWlyZWQuCgkoU01BTExfUkVHSVNURVJfQ0xBU1NFUyk6IE1ha2UgZGVwZW5kZW50IG9uIC1tbXVsdC1hZGQgb3B0aW9uLgoJKE1PVkVfUkFUSU8pOiBTZXQgdG8gemVybyBiZWNhdXNlIG9mIHNtYXJ0IG1vdnN0cnNpIGltcGxlbWVudGF0aW9uLgoJKFJFR0lTVEVSX01PVkVfQ09TVCk6IE1vdmUgY29kZSB0byByZWdpc3Rlcl9tb3ZlX2Nvc3QgZnVuY3Rpb24gZm9yCgllYXNlIG9mIGNvZGluZyBhbmQgZGVidWdnaW5nLgoJKENMQVNTX0xJS0VMWV9TUElMTEVEX1ApOiBVbmRlciBuZXcgcmVnaXN0ZXIgc2NoZW1lIGNsYXNzCglMT05HX0ZMT0FUX1JFR08gaXMgbGlrZWx5IHNwaWxsZWQgYnV0IG5vdCBjYXVnaHQgYnkgZGVmYXVsdAoJZGVmaW5pdGlvbi4KCShDT05TVEFOVF9BRERSRVNTX1AsIENPTlNUQU5UX0FERFJFU1NfTk9fTEFCRUxfUCk6IFVzZSBtYWNybwoJaW5zdGVhZCBvZiBoYXJkIGNvZGVkIG51bWJlcnMgaW4gcmFuZ2UgY2hlY2suCgkoQVNNX09VVFBVVF9MQUJFTFJFRl9BU19JTlQpOiBEZWxldGUgc2luY2UgdW51c2VkLgoJKC4uLik6IEFkZCBwcm90b3R5cGVzIGZvciBmdW5jdGlvbnMgaW4gbnMzMmsuYyBidXQgZGlzYWJsZSBiZWNhdXNlCglvZiBwcm9ibGVtcyB3aGVuIG5zMzJrLmggaXMgaW5jbHVkZWQgaW4gbWFjaGluZSBpbmRlcGVuZGVudCBmaWxlcy4KCgkqIG5zMzJrLmM6IEluY2x1ZGUgInN5c3RlbS5oIiwgInRyZWUuaCIsICJleHByLmgiLCAiZmxhZ3MuaCIuCgkobnMzMmtfcmVnX2NsYXNzX2NvbnRlbnRzLCByZWdjYXNzX21hcCwgbnMzMmtfb3V0X3JlZ19uYW1lcywKCWhhcmRfcmVnbm9fbW9kZV9vaywgc2Vjb25kYXJ5X3JlbG9hZF9jbGFzcywKCXByaW50X29wZXJhbmQsIHByaW50X29wZXJhbmRfYWRkcmVzcyk6IE5ldyByZWdpc3RlciBzY2hlbWUgdG8KCWluY2x1ZGUgMzIzODEgZnB1IHJlZ2lzdGVycyBhbmQgc3BlY2lhbCByZWdpc3RlciBjbGFzc2VzIGZvciBuZXcKCTMyMzgxIGluc3RydWN0aW9ucyBkb3RmIGFuZCBwb2x5Zi4KCShnZW5faW5kZXhlZF9leHByKTogTWFrZSBzdGF0aWMgdG8ga2VlcCBuYW1lc3BhY2UgY2xlYW4uCgkoY2hlY2tfcmVnKTogUmVtb3ZlIHNpbmNlIG5ldmVyIGNhbGxlZC4KCShtb3ZlX3RhaWwsIGV4cGFuZF9ibG9ja19tb3ZlKTogSGVscGVyIGZ1bmN0aW9ucyBmb3IgIm1vdnN0cnNpIgoJYmxvY2sgbW92ZSBpbnNuLgoJKHJlZ2lzdGVyX21vdmVfY29zdCk6IEhlbHBlciBmdW5jdGlvbiBmb3IgUkVHSVNURVJfTU9WRV9DT1NUIG1hY3JvLgoJSW5jcmVhc2UgY29zdCBvZiBtb3ZlcyB3aGljaCBnbyB2aWEgbWVtb3J5LgoJKiBuZXRic2QuaCAoVEFSR0VUX0RFRkFVTFQpOiBTZXQgKG5ldykgMzIzODEgZnB1IGZsYWcuCgkoQ1BQX1BSRURFRklORVMpOiBObyBsb25nZXIgcHJlZGVmaW5lICJ1bml4Ii4KCgkqIG5zMzJrLm1kIChtb3ZzaSwgbW92c2ksIGFkZGRpMywgc3ViZGkzLCBzdWJzaTMsIHN1YmhpMywgc3VicWkzLC4uLik6CglSZW1vdmUgZXJyb25lb3VzICUkLiBwcmludF9vcGVyYW5kKCkgY2FuIHdvcmsgb3V0IGZyb20gdGhlIHJ0eCBpcwoJYW4gaW1tZWRpYXRlIHByZWZpeCBpcyByZXF1aXJlZC4KCgkqIG5zMzJrLmggKFJFVFVSTl9QT1BTX0FSR1MsIFZBTElEX01BQ0hJTkVfREVDTF9BVFRSSUJVVEUsCglWQUxJRF9NQUNISU5FX1RZUEVfQVRUUklCVVRFLCBDT01QX1RZUEVfQVRUUklCVVRFUywKCVNFVF9ERUZBVUxUX1RZUEVfQVRUUklCVVRFUyk6IFN1cHBvcnQgZm9yIC1tcnRkIGNhbGxpbmcKCWNvbnZlbnRpb24uCgkoTEVHSVRJTUFURV9QSUNfT1BFUkFORF9QLCBTWU1CT0xJQ19DT05TVCk6IENvcnJlY3QgaGFuZGxpbmcgb2YKCXBpYyBvcGVyYW5kcy4KCgkqIG5zMzJrLmMgKHN5bWJvbGljX3JlZmVyZW5jZV9tZW50aW9uZWRfcCwgcHJpbnRfb3BlcmFuZCk6CglDb3JyZWN0IGhhbmRsaW5nIG9mIHBpYyBvcGVyYW5kcy4KCShuczMya192YWxpZF9kZWNsX2F0dHJpYnV0ZV9wLCBuczMya192YWxpZF90eXBlX2F0dHJpYnV0ZV9wLAoJbnMzMmtfY29tcF90eXBlX2F0dHJpYnV0ZXMsIG5zMzJrX3JldHVybl9wb3BzX2FyZ3MpOiBTdXBwb3J0IGZvcgoJLW1ydGQgY2FsbGluZyBjb252ZW50aW9uLgoKV2VkIE5vdiAyNSAyMzo0MjoyMCAxOTk4ICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CgoJKiBnY2MuYyAob3B0aW9uX21hcCk6IFJlY29nbml6ZSAtLW91dHB1dC1jbGFzcy1kaXJlY3RvcnkuCgpUaHUgTm92IDI2IDE4OjI2OjIxIDE5OTggIE1pY2hhZWwgSGF5ZXMgIDxtLmhheWVzQGVsZWMuY2FudGVyYnVyeS5hYy5uej4KCgkqIGxvb3AuaCAocHJlY29uZGl0aW9uX2xvb3BfcCk6IEFkZGVkIG5ldyBtb2RlIGFyZ3VtZW50LgoJKiB1bnJvbGwuYyAocHJlY29uZGl0aW9uX2xvb3BfcCk6IExpa2V3aXNlLgoJKGFwcHJveF9maW5hbF92YWx1ZSk6IEZ1bmN0aW9uIGRlbGV0ZWQgYW5kIHN1YnN1bWVkCglpbnRvIGxvb3BfaXRlcmF0aW9ucy4KCShsb29wX2ZpbmRfZXF1aXZfdmFsdWUpOiBOZXcgZnVuY3Rpb24uCgkobG9vcF9pdGVyYXRpb25zKTogVXNlIGxvb3BfZmluZF9lcXVpdl92YWx1ZSB0byBmaW5kIGluY3JlbWVudHMKCXRvbyBsYXJnZSB0byBiZSBpbW1lZGlhdGUgY29uc3RhbnRzLiAgQWxzbyB1c2UgaXQgdG8gZmluZCB0ZXJtcwoJY29tbW9uIHRvIGluaXRpYWwgYW5kIGZpbmFsIGl0ZXJhdGlvbiB2YWx1ZXMgdGhhdCBjYW4gYmUgcmVtb3ZlZC4KClRodSBOb3YgMjYgMTg6MDU6MDQgMTk5OCAgTWljaGFlbCBIYXllcyAgPG0uaGF5ZXNAZWxlYy5jYW50ZXJidXJ5LmFjLm56PgoKCSogbG9vcC5oIChzdHJ1Y3QgbG9vcF9pbmZvKTogRGVmaW5lIG5ldyBzdHJ1Y3R1cmUuCgkocHJlY29uZGl0aW9uX2xvb3BfcCk6IEFkZGVkIHByb3RvdHlwZS4KCSh1bnJvbGxfbG9vcCk6IEFkZGVkIG5ldyBhcmd1bWVudCBsb29wX2luZm8gdG8gcHJvdG90eXBlLgoJKGZpbmFsX2Jpdl92YWx1ZSwgZmluYWxfZ2l2X3ZhbHVlKTogQWRkZWQgbmV3IGFyZ3VtZW50IG5faXRlcmF0aW9ucwoJdG8gcHJvdG90eXBlLgoJKiBsb29wLmMgKHN0cmVuZ3RoX3JlZHVjZSk6IERlY2xhcmUgbmV3IHN0cnVjdHVyZSBsb29wX2l0ZXJhdGlvbl9pbmZvCglhbmQgbmV3IHBvaW50ZXIgbG9vcF9pbmZvLgoJKGxvb3Bfbl9pdGVyYXRpb25zKTogUmVwbGFjZSBnbG9iYWwgdmFyaWFibGUgYnkgZWxlbWVudCBpbgoJbG9vcF9pbmZvIHN0cnVjdHVyZS4KCShjaGVja19maW5hbF92YWx1ZSk6IE5ldyBhcmd1bWVudCBuX2l0ZXJhdGlvbnMuCgkoaW5zZXJ0X2JjdCk6IE5ldyBhcmd1bWVudCBsb29wX2luZm8uCgkobG9vcF91bnJvbGxfZmFjdG9yKTogUmVwbGFjZSBnbG9iYWwgYXJyYXkgYnkgZWxlbWVudCBpbgoJbG9vcF9pbmZvIHN0cnVjdHVyZS4KCShsb29wX29wdGltaXplKTogUmVtb3ZlIGNvZGUgdG8gYWxsb2NhdGUgYW5kIGluaXRpYWxpemUKCWxvb3BfdW5yb2xsX2ZhY3Rvcl9hcnJheS4KCSogdW5yb2xsLmMgKHByZWNvbmRpdGlvbl9sb29wX3ApOiBObyBsb25nZXIgc3RhdGljIHNpbmNlCgl1c2VkIGJ5IGJyYW5jaCBvbiBjb3VudCBvcHRpbWl6YXRpb24uCgkocHJlY29uZGl0aW9uX2xvb3BfcCwgdW5yb2xsX2xvb3ApOiBOZXcgYXJndW1lbnQgbG9vcF9pbmZvLgoJKGZpbmFsX2Jpdl92YWx1ZSwgZmluYWxfZ2l2X3ZhbHVlLCBmaW5kX3NwbGl0dGFibGVfcmVncyk6IE5ldwoJYXJndW1lbnQgbl9pdGVyYXRpb25zLgoJKGxvb3BfaXRlcmF0aW9uX3ZhciwgbG9vcF9pbml0aWFsX3ZhbHVlLCBsb29wX2luY3JlbWVudCwKCWxvb3BfZmluYWxfdmFsdWUsIGxvb3BfY29tcGFyaXNvbl9jb2RlLCBsb29wX3Vucm9sbF9mYWN0b3IpOgoJUmVwbGFjZWQgZ2xvYmFsIHZhcmlhYmxlcyBieSBsb29wX2luZm8gc3RydWN0dXJlLgoJKGxvb3BfdW5yb2xsX2ZhY3Rvcik6IFJlcGxhY2UgZ2xvYmFsIGFycmF5IGJ5IGVsZW1lbnQgaW4KCWxvb3BfaW5mbyBzdHJ1Y3R1cmUuCgpUaHUgTm92IDI2IDE3OjQ5OjI5IDE5OTggIE1pY2hhZWwgSGF5ZXMgIDxtLmhheWVzQGVsZWMuY2FudGVyYnVyeS5hYy5uej4KCgkqIGxvb3AuYyAoY2hlY2tfZGJyYV9sb29wKTogVXBkYXRlIEpVTVBfTEFCRUwgZmllbGQgb2YganVtcCBpbnNuCgl3aGVuIGxvb3AgcmV2ZXJzZWQuCgoJKiB1bnJvbGwuYyAocHJlY29uZGl0aW9uX2xvb3BfcCk6IFJldHVybiBsb29wX2luaXRpYWxfdmFsdWUKCWZvciBpbml0aWFsX3ZhbHVlIGluc3RlYWQgb2YgbG9vcF9pdGVyYXRpb25fdmFyLgoKVGh1IE5vdiAyNiAxNzoxNTozOCAxOTk4ICBNaWNoYWVsIEhheWVzICA8bS5oYXllc0BlbGVjLmNhbnRlcmJ1cnkuYWMubno+CgoJKiBjb25maWcvYzR4L2M0eC5tZDogRml4IG1pbm9yIGZvcm1hdHRpbmcgcHJvYmxlbXMuICBVcGRhdGUgZG9jcy4KCSgqYiwgKmJfcmV2LCAqYl9ub292LCAqYl9ub292X3JldiwgKmRiLAoJZGVjcmVtZW50X2FuZF9icmFuY2hfdW50aWxfemVybywgcnB0Yl9lbmQpOiBVc2UgYzR4X291dHB1dF9jYnJhbmNoCgl0byBvdXRwdXQgdGhlIGluc3RydWN0aW9uIHNlcXVlbmNlcy4KCShycHRzKTogRGVsZXRlLgoJKHJwdGJfdG9wKTogUHJvdmlkZSBhbHRlcm5hdGl2ZXMgdG8gdXNlIGFueSByZWdpc3RlciBvciBtZW1vcnkKCWZvciBsb29wIGNvdW50ZXIuCgkocnB0Yl9lbmQpOiBFbWl0IHVzZSBvZiBvcGVyYW5kcyByYXRoZXIgdGhhbiBhc3NpZ25pbmcgdGhlbQoJZXhwbGljaXRseSB0byB0aGUgUlMgYW5kIFJFIHJlZ2lzdGVycy4KClRodSBOb3YgMjYgMTY6Mzc6NTkgMTk5OCAgTWljaGFlbCBIYXllcyAgPG0uaGF5ZXNAZWxlYy5jYW50ZXJidXJ5LmFjLm56PgoKCSogY29uZmlnL2M0eC9jNHguYyAoYzR4X21vZGlmaWVkX2JldHdlZW5fcCwgYzR4X21lbV9zZXRfcCwKCWM0eF9tZW1fc2V0X3AsIGM0eF9tZW1fbW9kaWZpZWRfYmV0d2Vlbl9wLCBjNHhfaW5zbl9tb3ZlYWJsZV9wLAoJYzR4X3BhcmFsbGVsX3BhY2ssIGM0eF9wYXJhbGxlbF9maW5kLCBjNHhfdXBkYXRlX2luZm9fcmVnLAoJYzR4X3VwZGF0ZV9pbmZvX3JlZ3MsIGM0eF9jb3B5X2luc25fYWZ0ZXIsIGM0eF9jb3B5X2luc25zX2FmdGVyLAoJYzR4X21lcmdlX25vdGVzLCBjNHhfcGFyYWxsZWxfcHJvY2VzcywKCWM0eF9jb21iaW5lX3BhcmFsbGVsX2luZGVwZW5kZW50LCBjNHhfY29tYmluZV9wYXJhbGxlbF9kZXBlbmRlbnQsCgljNHhfY29tYmluZV9wYXJhbGxlbCk6IERlbGV0ZS4KClRodSBOb3YgMjYgMTU6MTY6MDUgMTk5OCAgTWljaGFlbCBIYXllcyAgPG0uaGF5ZXNAZWxlYy5jYW50ZXJidXJ5LmFjLm56PgoKCSogY29uZmlnL2M0eC9jNHguYyAoYzR4X292ZXJyaWRlX29wdGlvbnMpOiBGb3IgY29tcGF0aWJpbGl0eQoJd2l0aCBvbGQgdGFyZ2V0IG9wdGlvbnMgY2xlYXIgZmxhZ19icmFuY2hfb25fY291bnRfcmVnIGlmCgktbW5vLXJwdGIgc3BlY2lmaWVkIGFuZCBzZXQgZmxhZ19hcmd1bWVudF9hbGlhcyBpcyAtbW5vLWFsaWFzZXMKCXNwZWNpZmllZC4KCShjNHhfb3V0cHV0X2NicmFuY2gpOiBIYW5kbGUgYSBzZXF1ZW5jZSBvZiBpbnNucyByYXRoZXIgdGhhbiBhCglzaW5nbGUgaW5zbi4KCShjNHhfcnB0Yl9pbnNlcnQpOiBEbyBub3QgZW1pdCBhIFJQVEIgaW5zbiBpZiB0aGUgUkMgcmVnaXN0ZXIKCWhhcyBub3QgYmVlbiBhbGxvY2F0ZWQgYXMgdGhlIGxvb3AgY291bnRlci4KCShjNHhfYWRkcmVzc19jb25mbGljdCk6IERvIG5vdCBhbGxvdyB0d28gdm9sYXRpbGUgbWVtb3J5IHJlZmVyZW5jZXMuCgkodmFsaWRfcGFyYWxsZWxfb3BlcmFuZHNfNCwgdmFsaWRfcGFyYWxsZWxfb3BlcmFuZHNfNSwKCXZhbGlkX3BhcmFsbGVsX29wZXJhbmRzXzYpOiBSZWplY3QgcGF0dGVybiBpZiB0aGUgcmVnaXN0ZXIgZGVzdGluYXRpb24KCW9mIHRoZSBmaXJzdCBzZXQgaXMgdXNlZCBhcyBwYXJ0IG9mIGFuIGFkZHJlc3MgaW4gdGhlIHNlY29uZCBzZXQuCgpUaHUgTm92IDI2IDE0OjU2OjMyIDE5OTggIE1pY2hhZWwgSGF5ZXMgIDxtLmhheWVzQGVsZWMuY2FudGVyYnVyeS5hYy5uej4KCgkqIGNvbmZpZy9jNHgvYzR4LmggKFRBUkdFVF9ERUZBVUxUKTogQWRkIFBBUkFMRUxfTVBZX0ZMQUcuCgkoVEFSR0VUX1NNQUxMX1JFR19DTEFTUyk6IFNldCB0byAwIHNvIHRoYXQgU01BTExfUkVHSVNURVJfQ0xBU1NFUwoJaXMgbm8gbG9uZ2VyIGVuYWJsZWQgaWYgUEFSQUxMRUxfTVBZX0ZMQUcgc2V0LgoJKEhBUkRfUkVHTk9fQ0FMTF9DTE9CQkVSRUQpOiBBZGQgcGFyZW50aGVzZXMgdG8gcmVtb3ZlIGFtYmlndWl0eS4KCShSRUdfQ0xBU1NfQ09OVEVOVFMpOiBBZGQgYnJhY2VzIGFyb3VuZCBpbml0aWFsaXplcnMuCgkoSEFWRV9NVUxUSVBMRV9QQUNLKTogRGVmaW5lLgoJKEFTTV9PVVRQVVRfQllURV9GTE9BVCk6IFVzZSAlbGYgZm9ybWF0IHNwZWNpZmllciB3aXRoCglSRUFMX1ZBTFVFX1RPX0RFQ0lNQUwuCgkoQVNNX09VVFBVVF9TSE9SVF9GTE9BVCk6IFVzZSAlbGYgZm9ybWF0IHNwZWNpZmllciB3aXRoCglSRUFMX1ZBTFVFX1RPX0RFQ0lNQUwuCgkoYXIwX3JlZ19vcGVyYW5kKTogQWRkIHByb3RvdHlwZS4KCShhcjBfbWVtX29wZXJhbmQpOiBMaWtld2lzZS4KCShhcjFfcmVnX29wZXJhbmQpOiBMaWtld2lzZS4KCShhcjFfbWVtX29wZXJhbmQpOiBMaWtld2lzZS4KCShhcjJfcmVnX29wZXJhbmQpOiBMaWtld2lzZS4KCShhcjJfbWVtX29wZXJhbmQpOiBMaWtld2lzZS4KCShhcjNfcmVnX29wZXJhbmQpOiBMaWtld2lzZS4KCShhcjNfbWVtX29wZXJhbmQpOiBMaWtld2lzZS4KCShhcjRfcmVnX29wZXJhbmQpOiBMaWtld2lzZS4KCShhcjRfbWVtX29wZXJhbmQpOiBMaWtld2lzZS4KCShhcjVfcmVnX29wZXJhbmQpOiBMaWtld2lzZS4KCShhcjVfbWVtX29wZXJhbmQpOiBMaWtld2lzZS4KCShhcjZfcmVnX29wZXJhbmQpOiBMaWtld2lzZS4KCShhcjZfbWVtX29wZXJhbmQpOiBMaWtld2lzZS4KCShhcjdfcmVnX29wZXJhbmQpOiBMaWtld2lzZS4KCShhcjdfbWVtX29wZXJhbmQpOiBMaWtld2lzZS4KCShpcjBfcmVnX29wZXJhbmQpOiBMaWtld2lzZS4KCShpcjBfbWVtX29wZXJhbmQpOiBMaWtld2lzZS4KCShpcjFfcmVnX29wZXJhbmQpOiBMaWtld2lzZS4KCShpcjFfbWVtX29wZXJhbmQpOiBMaWtld2lzZS4KCShncm91cDFfcmVnX29wZXJhbmQpOiBMaWtld2lzZS4KCShncm91cDFfbWVtX29wZXJhbmQpOiBMaWtld2lzZS4KCShpcjFfcmVnX29wZXJhbmQpOiBMaWtld2lzZS4KCShhcnhfcmVnX29wZXJhbmQpOiBMaWtld2lzZS4KCShub3RfcmNfcmVnKTogTGlrZXdpc2UuCgkobm90X21vZGlmeV9yZWcpOiBMaWtld2lzZS4KCShjNHhfZ3JvdXAxX3JlZ19vcGVyYW5kKTogUmVtb3ZlIHByb3RvdHlwZS4KCShjNHhfZ3JvdXAxX21lbV9vcGVyYW5kKTogTGlrZXdpc2UuCgkoYzR4X2FyeF9yZWdfb3BlcmFuZCk6IExpa2V3aXNlLgoKV2VkIE5vdiAyNSAxOTowMjo1NSAxOTk4ICAoU3RlcGhlbiBMIE1vc2hpZXIpICA8bW9zaGllckB3b3JsZC5zdGQuY29tPgoKCSogZW1pdC1ydGwuYyAoZ2VuX2xvd3BhcnRfY29tbW9uKTogUmVtb3ZlIGVhcmxpZXIgY2hhbmdlLgoJKiByZWFsLmMgKG1ha2VfbmFuKTogTWFrZSBTSUdOIGFyZyBhY3R1YWxseSBzcGVjaWZ5IHRoZSBzaWduIGJpdC4KClRodSBOb3YgMjYgMTQ6MTI6MDUgMTk5OCAgTWljaGFlbCBIYXllcyAgPG0uaGF5ZXNAZWxlYy5jYW50ZXJidXJ5LmFjLm56PgoKCSogY29uZmlnL2M0eC9jNHgubWQgKGFkZHFpMyk6IEVtaXQgYWRkcWkzX25vY2xvYmJlciBwYXR0ZXJuCglkdXJpbmcgcmVsb2FkLgoKV2VkIE5vdiAyNSAyMjowNToyOCAxOTk4ICBKIm9ybiBSZW5uZWNrZSAgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogY29uZmlnL3NoL2xpYjFmdW5jcy5hc20gKF9fX3VkaXZzaTNfaTQpOiBEb24ndCBzd2l0Y2ggdG8gc3ogPT0gMQoJdW5sZXNzIEZNT1ZEX1dPUktTIGlzIGRlZmluZWQuCgpXZWQgTm92IDI1IDIwOjExOjA0IDE5OTggIEoib3JuIFJlbm5lY2tlICA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiByZWdjbGFzcy5jIChpbml0X3JlZ19zZXRzKTogTW92ZSBjb2RlIHRoYXQgY2FsY3VsYXRlcyB0YWJsZXMKCWRlcGVuZGVudCBvbiByZWdfY2xhc3NfY29udGVudHMgZnJvbSBoZXJlLi4uCgkoaW5pdF9yZWdfc2V0c18xKTogVG8gaGVyZS4KCldlZCBOb3YgMjUgMTQ6NTQ6NDYgMTk5OCAgWmFjayBXZWluYmVyZyAgPHphY2tAcmFiaS5waHlzLmNvbHVtYmlhLmVkdT4KCgkqIGNwcGxpYi5oOiBEZWxldGUgc3RydWN0IGltcG9ydF9maWxlLiAgQWRkIGloYXNoIGVsZW1lbnQgdG8KCXN0cnVjdCBjcHBfYnVmZmVyLiAgRGVsZXRlIGRvbnRfcmVwZWF0X2ZpbGVzIGFuZAoJaW1wb3J0X2hhc2hfdGFibGUgZWxlbWVudHMgZnJvbSBjcHBfcmVhZGVyOyBjaGFuZ2UKCWFsbF9pbmNsdWRlX2ZpbGVzIHRvIGEgaGFzaCB0YWJsZS4gIERlbGV0ZSBhbGwgZm9vYmFyX2luY2x1ZGUKCS8gbGFzdF9mb29iYXJfaW5jbHVkZSBlbGVtZW50cyBmcm9tIHN0cnVjdCBjcHBfb3B0aW9uczsgcHV0CgliYWNrIGZvdXIgc3VjaDogcXVvdGVfaW5jbHVkZSwgYnJhY2tldF9pbmNsdWRlLAoJc3lzdGVtX2luY2x1ZGUsIGFmdGVyX2luY2x1ZGUuICBSZWRvIHN0cnVjdCBmaWxlX25hbWVfbGlzdAoJY29tcGxldGVseS4gIEFkZCBuZXcgc3RydWN0dXJlIHR5cGUgaW5jbHVkZV9oYXNoLiAgQWRkCglwcm90b3R5cGVzIGZvciBtZXJnZV9pbmNsdWRlX2NoYWlucyBhbmQgaW5jbHVkZV9oYXNoLiAgQ2hhbmdlCglwcm90b3R5cGVzIGZvciBmaW5jbHVkZSwgZmluZF9pbmNsdWRlX2ZpbGUsIGFuZAoJYXBwZW5kX2luY2x1ZGVfY2hhaW4gdG8gbWF0Y2ggY2hhbmdlcyBiZWxvdy4KCgkqIGNwcGZpbGVzLmMgKHNpbXBsaWZ5X3BhdGhuYW1lLCBpbmNsdWRlX2hhc2gsCglyZW1hcF9maWxlbmFtZSwgbWVyZ2VfaW5jbHVkZV9jaGFpbnMpOiBOZXcgZnVuY3Rpb25zLgoJKGFkZF9pbXBvcnQsIGxvb2t1cF9pbXBvcnQsIG9wZW5faW5jbHVkZV9maWxlKTogUmVtb3ZlZC4KCShJTk9fVF9FUSk6IERlZmluZSB0aGlzIChjb3BpZWQgZnJvbSBjY2NwLmMpLgoJKGhhY2tfdm1zX2luY2x1ZGVfc3BlY2lmaWNhdGlvbik6IFJlbW92ZSBhbGwgY2FsbHMgYW5kICNpZiAwCglvdXQgdGhlIGRlZmluaXRpb24uICBJdCB3YXMgYmVpbmcgY2FsbGVkIGluY29ycmVjdGx5IGFuZCBhdAoJdGhlIHdyb25nIHRpbWVzLiAgVW50aWwgYSBWTVNpZSBjYW4gbG9vayBhdCB0aGlzLCBpdCdzIGJldHRlcgoJdG8gbm90IHByZXRlbmQgdG8gc3VwcG9ydCBpdC4KCShhcHBlbmRfaW5jbHVkZV9jaGFpbik6IENoYW5nZSBjYWxsaW5nIGNvbnZlbnRpb247IG5vdyB0YWtlcwoJb25seSBvbmUgZGlyZWN0b3J5IGF0IGEgdGltZSwgYW5kIHNldHMgdXAgdGhlIGRhdGEgc3RydWN0dXJlCglpdHNlbGYuCgkocmVkdW5kYW50X2luY2x1ZGVfcCk6IFJld3JpdHRlbiAtIHRoaXMgaXMgbm93IHVzZWQgZm9yIGFsbAoJaW5jbHVkZSByZWR1bmRhbmN5LCB3aGV0aGVyIGJ5ICNpZm5kZWYsICNpbXBvcnQsIG9yICNwcmFnbWEKCW9uY2UuICBMb29rcyB1cCB0aGluZ3MgaW4gdGhlIGluY2x1ZGUgaGFzaCB0YWJsZS4KCShmaWxlX2NsZWFudXApOiBEZWNyZW1lbnQgcGZpbGUtPnN5c3RlbV9pbmNsdWRlX2RlcHRoIGhlcmUgaWYKCWl0J3MgPjAuCgkoZmluZF9pbmNsdWRlX2ZpbGUpOiBDYWxsaW5nIGNvbnZlbnRpb24gY2hhbmdlZDsgbm93IHBhc3NlcwoJYXJvdW5kIGEgc3RydWN0IGluY2x1ZGVfaGFzaCBpbnN0ZWFkIG9mIDMgc2VwYXJhdGUgcGFyYW1ldGVycy4KCUd1dHMgcmlwcGVkIG91dCBhbmQgcmVwbGFjZWQgd2l0aCBuZXcgaW5jbHVkZV9oYXNoIG1lY2hhbmlzbS4KCShmaW5jbHVkZSk6IENhbGxpbmcgY29udmVudGlvbiBjaGFuZ2VkIGFzIGZvcgoJZmluZF9pbmNsdWRlX2ZpbGUuICBFcnJvciBleGl0cyBwdWxsZWQgb3V0LW9mLWxpbmUuICBSZWZvcm1hdC4KCShzYWZlX3JlYWQpOiBSZXR1cm4gYSBsb25nLCBub3QgYW4gaW50LgoJKGRlcHNfb3V0cHV0KTogRG9uJ3QgcmVjdXJzZS4KCgkqIGNwcGxpYi5jIChpc19zeXN0ZW1faW5jbHVkZSk6IERlbGV0ZWQuCgkocGF0aF9pbmNsdWRlKTogRml4IHVwIGNhbGwgdG8gYXBwZW5kX2luY2x1ZGVfY2hhaW4uCgkoZG9faW5jbHVkZSk6IEZpeCB1cCBjYWxscyB0byBmaW5kX2luY2x1ZGVfZmlsZSBhbmQgZmluY2x1ZGUuCglDbGVhbiB1cCBkZXBlbmRlbmN5IG91dHB1dCBhIGJpdC4gIFNob3J0ZW4gb2Jub3hpb3VzbHkgbGVuZ3RoeQoJI2ltcG9ydCB3YXJuaW5nIG1lc3NhZ2UuICBEb24ndCBkZWNyZW1lbnQKCXBmaWxlLT5zeXN0ZW1faW5jbHVkZV9kZXB0aCBoZXJlLgoJKGRvX3ByYWdtYSk6IFVuZGVyc3RhbmQgdGhlIGluY2x1ZGVfaGFzaCBzdHJ1Y3R1cmUuICBSZWZvcm1hdC4KCShkb19lbmRpZik6IENvcnJlY3QgaGFuZGxpbmcgb2YgY29udHJvbCBtYWNyb3MuICBVbmRlcnN0YW5kCgl0aGUgaW5jbHVkZV9oYXNoLgoJKGNwcF9zdGFydF9yZWFkKTogRml4IHVwIGNhbGxzIHRvIGZpbmNsdWRlLiAgQ2FsbAoJbWVyZ2VfaW5jbHVkZV9jaGFpbnMuCgkoY3BwX2hhbmRsZV9vcHRpb24pOiBGaXggdXAgY2FsbHMgdG8gYXBwZW5kX2luY2x1ZGVfY2hhaW4uCglVbmRlcnN0YW5kIHRoZSBmb3VyIHBhcnRpYWwgaW5jbHVkZSBjaGFpbnMuCgkoY3BwX2ZpbmlzaCk6IEFkZCBkZWJ1Z2dpbmcgY29kZSAoI2lmIDAtZWQgb3V0KSBmb3IgdGhlCglpbmNsdWRlX2hhc2guCgkoY3BwX2NsZWFudXApOiBGcmVlIHRoZSBpbmNsdWRlX2hhc2gsIG5vdCB0aGUgaW1wb3J0IGhhc2ggYW5kCgl0aGUgYWxsX2luY2x1ZGUgYW5kIGRvbnRfcmVwZWF0IGxpc3RzIHdoaWNoIG5vIGxvbmdlciBleGlzdC4KCldlZCBOb3YgMjUgMTE6MjY6MTkgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogdG9wbGV2LmMgKG5vX25ld19wc2V1ZG9zKTogRGVmaW5lLgoJKHJlc3Rfb2ZfY29tcGlsYXRpb24pOiBTZXQgbm9fbmV3X3BzZXVkb3MgYXMgbmVlZGVkLgoJKiBlbWl0LXJ0bC5jIChnZW5fcmVnX3J0eCk6IEFib3J0IGlmIHdlIHRyeSB0byBjcmVhdGUgYSBuZXcgcHNldWRvCglpZiBub19uZXdfcHNldWRvcyBpcyBzZXQuCgkqIHJ0bC5oIChub19uZXdfcHNldWRvcyk6IERlY2xhcmUgaXQuCgkqIHJlbG9hZDEuYyAocmVsb2FkKTogVXBkYXRlIGNvbW1lbnRzLgoJKiBtZC50ZXhpOiBDb3JyZXNwb25kaW5nIGNoYW5nZXMuCgpXZWQgTm92IDI1IDExOjI2OjE3IDE5OTggIEJlcm5kIFNjaG1pZHQgIDxjcnV4QHBvb2wuaW5mb3JtYXRpay5yd3RoLWFhY2hlbi5kZT4KCgkqIHJlbG9hZDEuYyAocmVnX3VzZWRfaW5faW5zbik6IFJlbmFtZWQgZnJvbSByZWdfdXNlZF9ieV9wc2V1ZG8uCgkoY2hvb3NlX3JlbG9hZF9yZWdzKTogUmVuYW1lIGl0IGhlcmUgYXMgd2VsbC4gIFdoZW4gY29tcHV0aW5nIGl0LAoJYWxzbyBtZXJnZSBpbiB1c2VkIGhhcmRyZWdzLgoKMTk5OC0xMS0yNSAgWmFjayBXZWluYmVyZyAgPHphY2tAcmFiaS5waHlzLmNvbHVtYmlhLmVkdT4KCgkqIGdjYy5jOiBTcGxpdCBvdXQgT2JqZWN0aXZlLUMgc3BlY3MgdG8uLi4KCSogb2JqYy9sYW5nLXNwZWNzLmg6IGhlcmUuIChOZXcgZmlsZS4pIE1ha2UgdGhlIHNwZWNzIGNwcGxpYgoJYXdhcmUuCgoJKiBjLWxleC5jIChpbml0X3BhcnNlKTogQWx3YXlzIGluaXRpYWxpemUgdGhlIGZpbGVuYW1lIGdsb2JhbC4KCSogb2JqYy9vYmpjLWFjdC5jIChsYW5nX2luaXQpOiBBbHdheXMgY2FsbCBjaGVja19uZXdsaW5lIGF0CgliZWdpbm5pbmcgb2YgZmlsZS4KCldlZCBOb3YgMjUgMDA6NDg6MjkgMTk5OCAgR3JhaGFtICA8Z3JhaGFtc0ByY3AuY28udWs+CgoJKiByZWxvYWQxLmMgKHJlbG9hZCk6IFJlbW92ZSB1bnVzZWQgdmFyaWFibGUuCgkocmVsb2FkX3JlZ19mcmVlX2Zvcl92YWx1ZV9wKTogQWRkIG1pc3NpbmcgcGFyYW1ldGVyIGRlZmluaXRpb24uCgoJKiBqdW1wLmMgKGp1bXBfb3B0aW1pemUpOiBSZW1vdmUgdW51c2VkIHZhcmlhYmxlLgoKV2VkIE5vdiAyNSAwMDowNzoxMSAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBNYWtlZmlsZS5pbiAoZ3JhcGgubyk6IERlcGVuZCBvbiAkKFJUTF9IKSwgbm90IHJ0bC5oLgoKCSogY3NlLmMgKGZvbGRfcnR4KTogTWFrZSBhdXRvaW5jcmVtZW50IGFkZHJlc3NpbmcgbW9kZSB0ZXN0cyBiZQoJcnVudGltZSBzZWxlY3RhYmxlLgoJKiBleHByLmMgKG1vdmVfYnlfcGllY2VzKTogU2ltaWxhcmx5LgoJKG1vdmVfYnlfcGllY2VzXzEsIGNsZWFyX2J5X3BpZWNlcywgY2xlYXJfYnlfcGllY2VzXzEpOiBTaW1pbGFybHkuCgkqIGZsb3cuYyAoZmluZF9hdXRvX2luYyk6IFNpbWlsYXJseS4KCSh0cnlfcHJlX2luY3JlbWVudCk6IFNpbWlsYXJseS4KCSogbG9vcC5jIChzdHJlbmd0aF9yZWR1Y2UpOiBTaW1pbGFybHkuCgkqIHJlZ2NsYXNzLmMgKGF1dG9faW5jX2RlY19yZWdfcCk6IFNpbWlsYXJseS4KCSogcmVnbW92ZS5jICh0cnlfYXV0b19pbmNyZW1lbnQpOiBTaW1pbGFybHkuCgkoZml4dXBfbWF0Y2hfMSk6IFNpbWlsYXJseS4KCSogcnRsLmggKEhBVkVfUFJFX0lOQ1JFTUVOVCk6IERlZmluZSBpZiBub3QgYWxyZWFkeSBkZWZpbmVkLgoJKEhBVkVfUFJFX0RFQ1JFTUVOVCk6IFNpbWlsYXJseS4KCShIQVZFX1BPU1RfSU5DUkVNRU5ULCBIQVZFX1BPU1RfREVDUkVNRU5UKTogU2ltaWxhcmx5LgoJKiBDb3JyZXNwb25kaW5nIGNoYW5nZXMgdG8gYWxsIHRhcmdldCBoZWFkZXIgZmlsZXMuCgkqIHRtLnRleGk6IFVwZGF0ZSBkb2NzIGZvciBhdXRvaW5jIGFkZHJlc3NpbmcgbW9kZXMuCgpUdWUgTm92IDI0IDIwOjI0OjU5IDE5OTggIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbiAobTY4MDIwLSotZWxmKiwgbTY4ay0qLWVsZiopOiBOZXcgdGFyZ2V0cy4KCSogY29uZmlndXJlOiBSZWJ1aWxkLgoJKiBjb25maWcvZWxmb3MuaDogTmV3IGZpbGUuCgkqIGNvbmZpZy9tNjhrL202ODAyMC1lbGYuaCwgY29uZmlnL202OGsvbTY4a2VsZi5oLAoJY29uZmlnL202OGsvdC1tNjhrZWxmOiBOZXcgZmlsZS4KClR1ZSBOb3YgMjQgMTM6NDA6MDYgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogTWFrZWZpbGUuaW4gKEhPU1RfQVIpOiBEZWZpbmUuCgkoSE9TVF9BUl9GTEFHUywgSE9TVF9SQU5MSUIsIEhPU1RfUkFOTElCX1RFU1QpOiBTaW1pbGFybHkuCgkobGliY3BwLmEpOiBVc2UgdGhlIGhvc3QgdG9vbHMgZXhwbGljaXRseS4KCShTVEFHRVNUVUZGKTogQWRkIGxpYmNwcC5hLgoKVHVlIE5vdiAyNCAwOTozMzo0OSAxOTk4ICBOaWNrIENsaWZ0b24gIDxuaWNrY0BjeWdudXMuY29tPgoKCSogY29uZmlnL20zMnIvbTMyci5tZCAobW92c3Ryc2lfaW50ZXJuYWwpOiBEZXNjcmliZSBjaGFuZ2VzIG1hZGUKCXRvIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gcmVnaXN0ZXJzLgoKTW9uIE5vdiAyMyAyMDoyODowMiAxOTk4ICBNaWtlIFN0dW1wICA8bXJzQHdycy5jb20+CgoJKiBsaWJnY2MyLmMgKHRvcF9lbHQpOiBSZW1vdmUgdG9wX2VsdCwgaXQgaXNuJ3QgdGhyZWFkIHNhZmUuCglUaGUgc3RyYXRlZ3kgd2Ugbm93IHVzZSBpcyB0byBwcmUgYWxsb2NhdGUgdGhlIHRvcF9lbHQgYWxvbmcKCXdpdGggdGhlIEVIIGNvbnRleHQgc28gdGhhdCBlYWNoIHRocmVhZCBoYXMgaXRzIG93biB0b3BfZWx0LgoJVGhpcyBpcyBuZWNlc3NhcnkgYXMgdGhlIGR5bmFtaWMgY2xlYW51cCBjaGFpbiBpcyB1c2VkIG9uIHRoZQoJdG9wIGVsZW1lbnQgb2YgdGhlIHN0YWNrIGFuZCBlYWNoIHRocmVhZCBNVVNUIGhhdmUgaXRzIG93bi4KCShlaF9jb250ZXh0X3N0YXRpYyk6IExpa2V3aXNlLgoJKG5ld19laF9jb250ZXh0KTogTGlrZXdpc2UuCgkoX19zanRocm93KTogTGlrZXdpc2UuCgpNb24gTm92IDIzIDIwOjI1OjAzIDE5OTggIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGkzODYvbGludXguaCAoQVNNX09VVFBVVF9NQVhfU0tJUF9BTElHTik6IFdyYXAgaW4gZG8uLi53aGlsZS4KCSogaTM4Ni5tZCAocHJvbG9ndWVfZ2V0X3BjKTogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZS4KCk1vbiBOb3YgMjMgMTc6MDU6NDAgMTk5OCAgR2VvZmZyZXkgTm9lciAgPG5vZXJAY3lnbnVzLmNvbT4KCgkqIGkzODYveG0tY3lnd2luLmg6IFJlbmFtZSBjeWd3aW5fIHBhdGggZnVuY3MgYmFjayB0byBjeWd3aW4zMl8uCgpNb24gTm92IDIzIDE2OjQwOjAwIDE5OTggIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBjeWdudXMuY29tPgoKCSogTWFrZWZpbGUuaW4gKE9CSlMpOiBBZGQgZ3JhcGguby4KCShncmFwaC5vKTogTmV3IGRlcGVuZGVuY3kgbGlzdC4KCSogZmxhZ3MuaDogRGVjbGFyZSBkdW1wX2Zvcl9ncmFwaCBhbmQgZGVmaW5lIGdyYXBoX2R1bXBfdHlwZXMgdHlwZS4KCSogcHJpbnQtcnRsLmMgKGR1bXBfZm9yX2dyYXBoKTogRGVmaW5lIG5ldyB2YXJpYWJsZS4KCShwcmludF9ydHgpOiBSZXdyaXRlIHRvIGFsbG93IHVzZSBpbiBncmFwaCBkdW1waW5nIGZ1bmN0aW9ucy4KCSogdG9wbGV2LmM6IERlY2xhcmUgcHJpbnRfcnRsX2dyYXBoX3dpdGhfYmIsIGNsZWFuX2dyYXBoX2R1bXBfZmlsZSwKCWZpbmlzaF9ncmFwaF9kdW1wX2ZpbGUuCglEZWZpbmUgZ3JhcGhfZHVtcF9mb3JtYXQuCgkoY29tcGlsZV9maWxlKTogSWYgZ3JhcGggZHVtcGluZyBpcyBlbmFibGVkIGFsc28gY2xlYXIgdGhlc2UgZmlsZXMuCglGaW5pc2ggZ3JhcGggZHVtcCBmaWxlcy4KCShyZXN0X29mX2NvbXBpbGF0aW9uKTogQWxzbyBkdW1wIGdyYXBoIGluZm9ybWF0aW9uIGlmIGVuYWJsZWQuCgkobWFpbik6IFJlY29nbml6ZSAtZHYgdG8gZW5hYmxlZCBWQ0cgYmFzZWQgZ3JhcGggZHVtcGluZy4KCSogZ3JhcGguYzogTmV3IGZpbGUuICBHcmFwaCBkdW1waW5nIGZ1bmN0aW9ucy4KCk1vbiBOb3YgMjMgMTY6Mzk6MDQgMTk5OCAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbjogTG9vayBmb3IgPHN5cy9zdGF0Lmg+LgoJKiBzeXN0ZW0uaDogSW5jbHVkZSBpdCBiZWZvcmUgc3Vic3RpdHV0ZSBTX0lTUkVHIGRlZmluaXRpb25zLgoKTW9uIE5vdiAyMyAxNzo0MDozNyAxOTk4ICBHYXZpbiBSb21pZy1Lb2NoICA8Z2F2aW5AY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy9taXBzL2FiaS5oOiBVc2UgQUJJX082NCwgZHVwbGljYXRpbmcgQUJJXzMyIHVzYWdlLgoJKiBjb25maWcvbWlwcy9pcmlzNi5oOiBTYW1lLgoJKiBjb25maWcvbWlwcy9taXBzLm1kOiBTYW1lLgoJKiBjb25maWcvbWlwcy9taXBzLmM6IFNhbWU7IGFsc28gYWRkICItbWFiaT1vNjQiIG9wdGlvbi4KCSogY29uZmlnL21pcHMvbWlwcy5oOiBTYW1lOyBhbHNvIGRlZmluZSBBQklfTzY0LgoKTW9uIE5vdiAyMyAxNzowMjoyNyAxOTk4ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiAgY29uZmlndXJlLmluOiBVc2UgQUNfUFJFUkVRKDIuMTIuMSkuCgpNb24gTm92IDIzIDEwOjE2OjM4IDE5OTggIE1lbGlzc2EgTydOZWlsbCAgPG9uZWlsbEBjcy5zZnUuY2E+CgoJKiBjY2NwLmMgKFNfSVNSRUcsIFNfSVNESVIpOiBEZWxldGUgZGVmaW5lcy4KCSogY3BwbGliLmMsIGdjYy5jOiBMaWtld2lzZS4KCSogc3lzdGVtLmggKFNfSVNSRUcsIFNfSVNESVIpOiBEZWZpbmUgaWYgbm90IGFscmVhZHkgZGVmaW5lZC4KCk1vbiBOb3YgMjMgMDk6NTM6NDQgMTk5OCAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGxvY2FsLWFsbG9jLmMgKGxvY2FsX2FsbG9jKTogVXNlIG1hbGxvYyBub3QgYWxsb2NhIGZvcgoJcmVnX3F0eSwgcmVnX29mZnNldCwgcmVmX25leHRfaW5fcXR5LgoKTW9uIE5vdiAyMyAxNjo0Njo0NiAxOTk4ICBKIm9ybiBSZW5uZWNrZSAgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogY2FsbGVyLXNhdmUuYyAoaW5zZXJ0X29uZV9pbnNuKTogSW5pdGlhbGl6ZSB0aGUgbGl2ZV9iZWZvcmUgYW5kCglsaXZlX2FmdGVyIHJlZ2lzdGVyIHNldHMuCgoJQWRkIFNINCBzdXBwb3J0OgoKCSogY29uZmlnL3NoL2xpYjFmdW5jcy5hc20gKF9fX21vdnN0cl9pNF9ldmVuLCBfX19tb3ZzdHJfaTRfb2RkKTogRGVmaW5lLgoJKF9fX21vdnN0clNJMTJfaTQsIF9fX3NkaXZzaTNfaTQsIF9fX3VkaXZzaTNfaTQpOiBEZWZpbmUuCgkqIHNoLmMgKHJlZ19jbGFzc19mcm9tX2xldHRlciwgcmVnbm9fcmVnX2NsYXNzKTogQWRkIERGX1JFR1MuCgkoZnBfcmVnX25hbWVzLCBhc3NlbWJsZXJfZGlhbGVjdCk6IE5ldyB2YXJpYWJsZXMuCgkocHJpbnRfb3BlcmFuZF9hZGRyZXNzKTogSGFuZGxlIFNVQlJFR3MuCgkocHJpbnRfb3BlcmFuZCk6IEFkZGVkICdvJyBjYXNlLgoJRG9uJ3QgdXNlIGFkal9vZmZzZXR0YWJsZV9vcGVyYW5kIG9uIFBSRV9ERUMgLyBQT1NUX0lOQy4KCU5hbWUgb2YgRlAgcmVnaXN0ZXJzIGRlcGVuZHMgb24gbW9kZS4KCShleHBhbmRfYmxvY2tfbW92ZSk6IEVtaXQgZGlmZmVyZW50IGNvZGUgZm9yIFNINCBoYXJkd2FyZS4KCShwcmVwYXJlX3NjY19vcGVyYW5kcyk6IFVzZSBlbWl0X3NmX2luc24gLyBlbWl0X2RmX2luc24gYXMgYXBwcm9wcmlhdGUuCgkoZnJvbV9jb21wYXJlKTogTGlrZXdpc2UuCgkoYWRkX2NvbnN0YW50KTogTmV3IGFyZ3VtZW50IGxhc3RfdmFsdWUuICBDaGFuZ2VkIGFsbCBjYWxsZXJzLgoJKGZpbmRfYmFycmllcik6IERvbid0IHRyeSBISW1vZGUgbG9hZCBmb3IgRlBVTF9SRUcuCgkobWFjaGluZV9kZXBlbmRlbnRfcmVvcmcpOiBMaWtld2lzZS4KCShzZnVuY191c2VzX3JlZyk6IEEgQ0xPQkJFUiBjYW5ub3QgYmUgdGhlIGFkZHJlc3MgcmVnaXN0ZXIgdXNlLgoJKGdlbl9mYXJfYnJhbmNoKTogRW1pdCBhIGJhcnJpZXIgYWZ0ZXIgdGhlIG5ldyBqdW1wLgoJKGJhcnJpZXJfYWxpZ24pOiBEb24ndCB0cnVzdCBpbnN0cnVjdGlvbiBsZW5ndGhzIGJlZm9yZQoJZml4aW5nIHVwIHBjbG9hZHMuCgkobWFjaGluZV9kZXBlbmRlbnRfcmVvcmcpOiBBZGQgc3VwcG9ydCBmb3IgRklSU1RfWERfUkVHIC4uIExBU1RfWERfUkVHLgoJVXNlIGF1dG8taW5jIGFkZHJlc3NpbmcgZm9yIGZwIHJlZ2lzdGVycyBpZiBkb3VibGVzIG5lZWQgdG8KCWJlIGxvYWRlZCBpbiB0d28gc3RlcHMuCglTZXQgc2hfZmxhZ19yZW1vdmVfZGVhZF9iZWZvcmVfY3NlLgoJKHB1c2gpOiBTdXBwb3J0IGZvciBUQVJHRVRfRk1PVkQuICBVc2UgZ2VuX3B1c2hfZnB1bCBmb3IgZnB1bC4KCShwb3ApOiBTdXBwb3J0IGZvciBUQVJHRVRfRk1PVkQuICBVc2UgZ2VuX3BvcF9mcHVsIGZvciBmcHVsLgoJKGNhbGNfbGl2ZV9yZWdzKTogU3VwcG9ydCBmb3IgVEFSR0VUX0ZNT1ZELiAgRG9uJ3Qgc2F2ZSBGUFNDUi4KCVN1cHBvcnQgZm9yIEZJUlNUX1hEX1JFRyAuLiBMQVNUX1hEX1JFRy4KCShzaF9leHBhbmRfcHJvbG9ndWUpOiBTdXBwb3J0IGZvciBGSVJTVF9YRF9SRUcgLi4gTEFTVF9YRF9SRUcuCgkoc2hfZXhwYW5kX2VwaWxvZ3VlKTogTGlrZXdpc2UuCgkoc2hfYnVpbHRpbl9zYXZlcmVncyk6IFVzZSBERm1vZGUgbW92ZXMgZm9yIGZwIHJlZ3Mgb24gU0g0LgoJKGluaXRpYWxfZWxpbWluYXRpb25fb2Zmc2V0KTogVGFrZSBUQVJHRVRfQUxJR05fRE9VQkxFIGludG8gYWNjb3VudC4KCShhcml0aF9yZWdfb3BlcmFuZCk6IEZQVUxfUkVHIGlzIE9LIGZvciBTSDQuCgkoZnBfYXJpdGhfcmVnX29wZXJhbmQsIGZwX2V4dGVuZGVkX29wZXJhbmQpOiBOZXcgZnVuY3Rpb25zLgoJKHRlcnRpYXJ5X3JlbG9hZF9vcGVyYW5kLCBmcHNjcl9vcGVyYW5kKTogTGlrZXdpc2UuCgkoY29tbXV0YXRpdmVfZmxvYXRfb3BlcmF0b3IsIG5vbmNvbW11dGF0aXZlX2Zsb2F0X29wZXJhdG9yKTogTGlrZXdpc2UuCgkoYmluYXJ5X2Zsb2F0X29wZXJhdG9yLCBnZXRfZnBzY3JfcnR4LCBlbWl0X3NmX2luc24pOiBMaWtld2lzZS4KCShlbWl0X2RmX2luc24sIGV4cGFuZF9zZl91bm9wLCBleHBhbmRfc2ZfYmlub3ApOiBMaWtld2lzZS4KCShleHBhbmRfZGZfdW5vcCwgZXhwYW5kX2RmX2Jpbm9wLCBleHBhbmRfZnBfYnJhbmNoKTogTGlrZXdpc2UuCgkoZW1pdF9mcHNjcl91c2UsIG1hcmtfdXNlLCByZW1vdmVfZGVhZF9iZWZvcmVfY3NlKTogTGlrZXdpc2UuCgkqIHNoLmggKENQUF9TUEVDKTogQWRkIHN1cHBvcnQgZm9yIC1tNCwgbTQtc2luZ2xlLCBtNC1zaW5nbGUtb25seS4KCShDT05ESVRJT05BTF9SRUdJU1RFUl9VU0FHRSk6IExpa2V3aXNlLgoJKEhBUkRfU0g0X0JJVCwgRlBVX1NJTkdMRV9CSVQsIFNINF9CSVQsIEZNT1ZEX0JJVCk6IERlZmluZS4KCShUQVJHRVRfQ0FDSEUzMiwgVEFSR0VUX1NVUEVSU0NBTEFSLCBUQVJHRVRfSEFSV0FSRCk6IERlZmluZS4KCShUQVJHRVRfSEFSRF9TSDQsIFRBUkdFVF9GUFVfU0lOR0xFLCBUQVJHRVRfU0g0LCBUQVJHRVRfRk1PVkQpOiBEZWZpbmUuCgkodGFyZ2V0X2ZsYWcpOiBBZGQgLW00LCBtNC1zaW5nbGUsIG00LXNpbmdsZS1vbmx5LCAtbWZtb3ZkLgoJKE9QVElNSVpBVElPTl9PUFRJT05TKTogSWYgb3B0aW1pemluZywgc2V0IGZsYWdfb21pdF9mcmFtZV9wb2ludGVyCgl0byAtMSBhbmQgc2hfZmxhZ19yZW1vdmVfZGVhZF9iZWZvcmVfY3NlIHRvIDEuCgkoQVNTRU1CTEVSX0RJQUxFQ1QpOiBEZWZpbmUgdG8gYXNzZW1ibGVyX2RpYWxlY3QuCgkoYXNzZW1ibGVyX2RpYWxlY3QsIGZwX3JlZ19uYW1lcyk6IERlY2xhcmUuCgkoT1ZFUlJJREVfT1BUSU9OUyk6IEFkZCBjb2RlIGZvciBUQVJHRVRfU0g0LgoJSGlkZSBuYW1lcyBvZiByZWdpc3RlcnMgdGhhdCBhcmUgbm90IGFjY2Vzc2libGUuCgkoQ0FDSEVfTE9HKTogVGFrZSBUQVJHRVRfQ0FDSEUzMiBpbnRvIGFjY291bnQuCgkoTE9PUF9BTElHTik6IFRha2UgVEFSR0VUX0hBUldBUkQgaW50byBhY2NvdW50LgoJKEZJUlNUX1hEX1JFRywgTEFTVF9YRF9SRUcsIEZQU0NSX1JFRyk6IERlZmluZS4KCShGSVJTVF9QU0VVRE9fUkVHSVNURVI6IE5vdyA0OS4KCShGSVhFRF9SRUdJU1RFUlMsIENBTExfVVNFRF9SRUdJU1RFUlMpOiBJbmNsdWRlIHZhbHVlcyBmb3IgcmVnaXN0ZXJzLgoJKEhBUkRfUkVHTk9fTlJFR1MpOiBTcGVjaWFsIHRyZWF0bWVudCBvZiBGSVJTVF9YRF9SRUcgLi4gTEFTVF9YRF9SRUcuCgkoSEFSRF9SRUdOT19NT0RFX09LKTogVXBkYXRlLgoJKGVudW0gcmVnX2NsYXNzKTogQWRkIERGX1JFR1MgYW5kIEZQU0NSX1JFR1MuCgkoUkVHX0NMQVNTX05BTUVTLCBSRUdfQ0xBU1NfQ09OVEVOVFMsIFJFR19BTExPQ19PUkRFUik6IExpa2V3aXNlLgoJKFNFQ09OREFSWV9PVVRQVVRfUkVMT0FEX0NMQVNTLCBTRUNPTkRBUllfSU5QVVRfUkVMT0FEX0NMQVNTKTogVXBkYXRlLgoJKENMQVNTX0NBTk5PVF9DSEFOR0VfU0laRSwgREVCVUdfUkVHSVNURVJfTkFNRVMpOiBEZWZpbmUuCgkoTlBBUk1fUkVHUyk6IEVpZ2h0IGZsb2F0aW5nIHBvaW50IHBhcmFtZXRlciByZWdpc3RlcnMgb24gU0g0LgoJKEJBU0VfUkVUVVJOX1ZBTFVFX1JFRyk6IFNINCBhbHNvIHBhc3NlcyBkb3VibGUgdmFsdWVzCglpbiBmbG9hdGluZyBwb2ludCByZWdpc3RlcnMuCgkoR0VUX1NIX0FSR19DTEFTUyk6IExpa2V3aXNlLgoJQ29tcGxleCBmbG9hdCB0eXBlcyBhcmUgYWxzbyByZXR1cm5lZCBpbiBmbG9hdCByZWdpc3RlcnMuCgkoQkFTRV9BUkdfUkVHKTogQ29tcGxleCBmbG9hdCB0eXBlcyBhcmUgYWxzbyBwYXNzZXMgaW4gZmxvYXQgcmVnaXN0ZXJzLgoJKEZVTkNUSU9OX1ZBTFVFKTogQ2hhbmdlIG1vZGUgbGlrZSBQUk9NT1RFX01PREUgZG9lcy4KCShMSUJDQUxMX1ZBTFVFKTogUmVtb3ZlIHRyYWlsaW5nIHNlbWljb2xvbi4KCShST1VORF9SRUcpOiBSb3VuZCB3aGVuIGRvdWJsZSBwcmVjaXNpb24gdmFsdWUgaXMgcGFzc2VkIGluIGZsb2F0aW5nCglwb2ludCByZWdpc3RlcihzKS4KCShGVU5DVElPTl9BUkdfQURWQU5DRSk6IE5vIGNoYW5nZSB3YW50ZWQgZm9yIFNINCB3aGVuIHRoaW5ncyBhcmUKCXBhc3NlZCBvbiB0aGUgc3RhY2suCgkoRlVOQ1RJT05fQVJHKTogTGl0dGxlIGVuZGlhbiBhZGp1c3RtZW50IGZvciBTSDQgU0Ztb2RlLgoJKEZVTkNUSU9OX0FSR19QQVJUSUFMX05SRUdTKTogWmVybyBmb3IgU0g0LgoJKFRSQU1QT0xJTkVfQUxJR05NRU5UKTogVGFrZSBUQVJHRVRfSEFSV0FSRCBpbnRvIGFjY291bnQuCgkoSU5JVElBTElaRV9UUkFNUE9MSU5FKTogRW1pdCBpY19pbnZhbGlkYXRlX2xpbmUgZm9yIFRBUkdFVF9IQVJXQVJELgoJKE1PREVfRElTUF9PS184KTogTm90IGZvciBTSDQgREZtb2RlLgoJKEdPX0lGX0xFR0lUSU1BVEVfQUREUkVTUyk6IE5vIGJhc2UgcmVnICsgaW5kZXggcmVnIGZvciBTSDQgREZtb2RlLgoJQWxsb3cgaW5kZXhlZCBhZGRyZXNzaW5nIGZvciBQU0ltb2RlIGFmdGVyIHJlbG9hZC4KCShMRUdJVElNSVpFX0FERFJFU1MpOiBOb3QgZm9yIFNINCBERm1vZGUuCgkoTEVHSVRJTUlaRV9SRUxPQURfQUREUkVTUyk6IEhhbmRsZSBTSDNFIFNGbW9kZS4KCURvbid0IGNoYW5nZSBTSDQgREZtb2RlIG5vciBQU0ltb2RlIFJFTE9BRF9GT1JfSU5QVVRfQUREUkVTUy4KCShET1VCTEVfVFlQRV9TSVpFKTogNjQgZm9yIFNINC4KCShSVFhfQ09TVFMpOiBBZGQgUExVUyBjYXNlLgoJSW5jcmVhc2UgY29zdCBvZiBBU0hJRlQsIEFTSElGVFJULCBMU0hJRlRSVCBjYXNlLgoJKFJFR0lTVEVSX01PVkVfQ09TVCk6IEFkZCBoYW5kbGluZyBvZiBSMF9SRUdTLCBGUFVMX1JFR1MsIFRfUkVHUywKCU1BQ19SRUdTLCBQUl9SRUdTLCBERl9SRUdTLgoJKFJFR0lTVEVSX05BTUVTKTogVXNlIGZwX3JlZ19uYW1lcy4KCShlbnVtIHByb2Nlc3Nvcl90eXBlKTogQWRkIFBST0NFU1NPUl9TSDQuCgkoc2hfZmxhZ19yZW1vdmVfZGVhZF9iZWZvcmVfY3NlKTogRGVjbGFyZS4KCShydHhfZXF1YWxfZnVuY3Rpb25fdmFsdWVfbWF0dGVycywgZnBzY3JfcnR4LCBnZXRfZnBzY3JfcnR4KTogRGVjbGFyZS4KCShQUkVESUNBVEVfQ09ERVMpOiBBZGQgYmluYXJ5X2Zsb2F0X29wZXJhdG9yLAoJY29tbXV0YXRpdmVfZmxvYXRfb3BlcmF0b3IsIGZwX2FyaXRoX3JlZ19vcGVyYW5kLCBmcF9leHRlbmRlZF9vcGVyYW5kLAoJZnBzY3Jfb3BlcmFuZCwgbm9uY29tbXV0YXRpdmVfZmxvYXRfb3BlcmF0b3IuCgkoQURKVVNUX0NPU1QpOiBVc2UgZGlmZmVyZW50IHNjYWxlIGZvciBUQVJHRVRfU1VQRVJTQ0FMQVIuCgkoU0hfRFlOQU1JQ19TSElGVF9DT1NUKTogQ2hlYXBlciBmb3IgU0g0LgoJKiBzaC5tZCAoYXR0cmlidXRlIGNwdSk6IEFkZCB2YWx1ZSBzaDQuCgkoYXR0cmJ1dGVzIGZtb3ZkLCBpc3N1ZXMpOiBEZWZpbmUuCgkoYXR0cmlidXRlIHR5cGUpOiBBZGQgdmFsdWVzIGRmcF9hcml0aCwgZGZwX2NtcCwgZGZwX2NvbnYsIGRmZGl2LgoJKGZ1bmN0aW9uIHVuaXRzIG1lbW9yeSwgaW50LCBtcHksIGZwKTogTWFrZSBkZXBlbmRlbnQgb24gaXNzdWUgcmF0ZS4KCShmdW5jdGlvbiB1bml0cyBpc3N1ZSwgc2luZ2xlX2lzc3VlLCBsb2FkX3NpLCBsb2FkKTogRGVmaW5lLgoJKGZ1bmN0aW9uIHVuaXRzIGxvYWRfc3RvcmUsIGZkaXYsIGdwX2ZwdWwpOiBEZWZpbmUuCgkoYXR0cmlidXRlIGhpdF9zdGFjayk6IFByb3ZpZGUgcHJvcGVyIGRlZmF1bHQuCgkodXNlX3NmdW5jX2FkZHIrMSwgdWRpdnNpMyk6IFByZWRpY2F0ZWQgb24gISBUQVJHRVRfU0g0LgoJKHVkaXZzaTNfaTQsIHVkaXZzaTNfaTRfc2luZ2xlLCBkaXZzaTNfaTQsIGRpdnNpM19pNF9zaW5nbGUpOiBOZXcgaW5zbnMuCgkodWRpdnNpMywgZGl2c2kzKTogRW1pdCBzcGVjaWFsIHBhdHRlcm5zIGZvciBTSDQgaGFyZHdhcmUsCgkobXVsc2kzX2NhbGwpOiBOb3cgdXNlcyBtYXRjaF9vcGVyYW5kIGZvciBmdW5jdGlvbiBhZGRyZXNzLgoJKG11bHNpMyk6IEFsc28gZW1pdCBjb2RlIGZvciBTSDEgY2FzZS4gIFdyYXAgcmVzdWx0IGluIFJFR19MSUJDQUxMIC8KCVJFR19SRVRWQUwgbm90ZXMuCgkocHVzaCwgcG9wLCBwdXNoX2UsIHBvcF9lKTogTm93IGRlZmluZV9leHBhbmRzLgoJKHB1c2hfZnB1bCwgcHVzaF80LCBwb3BfZnB1bCwgcG9wXzQsIGljX2ludmFsaWRhdGVfbGluZSk6IE5ldyBleHBhbmRlcnMuCgkobW92c2lfaWUpOiBBZGRlZCB5L2kgYWx0ZXJuYXRpdmUuCgkoaWNfaW52YWxpZGF0ZV9saW5lX2ksIG1vdmRmX2k0KTogTmV3IGluc25zLgoJKG1vdmRmX2k0K1sxMjNdLCByZWxvYWRfb3V0ZGYrWzEyMzQ1XSwgbW92c2lfeStbMTJdKTogTmV3IHNwbGl0dGVycy4KCShyZWxvYWRfaW5kZiwgcmVsb2FkX291dGRmLCByZWxvYWRfb3V0c2YsIHJlbG9hZF9pbnNpKTogTmV3IGV4cGFuZGVycy4KCShtb3ZkZik6IEFkZCBzcGVjaWFsIGNvZGUgZm9yIFNINC4KCShtb3ZzZl9pZSwgbW92c2ZfaWUrMSwgcmVsb2FkX2luc2YsIGNhbGxpKTogTWFrZSB1c2Ugb2YgZnBzY3IgdmlzaWJsZS4KCShjYWxsX3ZhbHVlaSwgY2FsbGksIGNhbGxfdmFsdWUpOiBMaWtld2lzZS4KCShtb3ZzZik6IEVtaXQgbm8tb3AgbW92ZS4KCShtb3Zfbm9wLCBtb3ZzaV95KTogTmV3IGluc25zLgoJKGJsdCwgc2dlKTogR2VuZXJhbGl6ZSB0byBoYW5kbGUgREZtb2RlLgoJKHJldHVybiBwcmVkaWNhdGUpOiBDYWxsIGVtaXRfZnBzY3JfdXNlIGFuZCByZW1vdmVfZGVhZF9iZWZvcmVfY3NlLgoJKGJsb2NrX21vdmVfcmVhbCwgYmxvY2tfbHVtcF9yZWFsKTogUHJlZGljYXRlIG9uICEgVEFSR0VUX0hBUkRfU0g0LgoJKGJsb2NrX21vdmVfcmVhbF9pNCwgYmxvY2tfbHVtcF9yZWFsX2k0LCBmcHVfc3dpdGNoKTogTmV3IGluc25zLgoJKGZwdV9zd2l0Y2gwLCBmcHVfc3dpdGNoMSwgbW92cHNpKTogTmV3IGV4cGFuZGVycy4KCShmcHVfc3dpdGNoK1sxMl0sIGZpeF90cnVuY3Nmc2kyX2k0XzIrMSk6IE5ldyBzcGxpdHRlcnMuCgkodG9nZ2xlX3N6KTogTmV3IGluc24uCgkoYWRkc2YzLCBzdWJzZjMsIG11bHNmMywgZGl2c2YzKTogTm93IGRlZmluZV9leHBhbmRzLgoJKGFkZHNmM19pLCBzdWJzZjNfaSwgbXVsc2YzX2k0LCBtdWxzZjNfaWUsIGRpdnNmM19pKTogTmV3IGluc25zLgoJKG1hY3NmMyk6IE1ha2UgdXNlIG9mIGZwc2NyIHZpc2libGUuICBEaXNhYmxlIGZvciBTSDQuCgkoZmxvYXRzaXNmMik6IE1ha2UgdXNlIG9mIGZwc2NyIHZpc2libGUuCgkoZmxvYXRzaXNmMl9pNCk6IE5ldyBpbnNuLgoJKGZsb2F0c2lzZjJfaWUsIGZpeHNmc2ksIGNtcGd0c2ZfdCwgY21wZXFzZl90KTogRGlzYWJsZSBmb3IgU0g0LgoJKGllZWVfY2NtcGVxc2ZfdCk6IExpa2V3aXNlLgoJKGZpeF90cnVuY3Nmc2kyKTogRW1pdCBkaWZmZXJlbnQgY29kZSBmb3IgU0g0LgoJKGZpeF90cnVuY3Nmc2kyX2k0LCBmaXhfdHJ1bmNzZnNpMl9pNF8yLCBjbXBndHNmX3RfaTQpOiBOZXcgaW5zbnMuCgkoY21wZXFzZl90X2k0LCBpZWVlX2NjbXBlcXNmX3RfNCk6IE5ldyBpbnNucy4KCShuZWdzZjIsIHNxcnRzZjIsIGFic3NmMik6IE5vdyBleHBhbmRlcnMuCgkoYWRkZGYzLCBzdWJkZjNpLCBtdWxkZjIsIGRpdmRmMywgZmxvYXRzaWRmMik6IE5ldyBleHBhbmRlcnMuCgkobmVnc2YyX2ksIHNxcnRzZjJfaSwgYWJzc2YyX2ksIGFkZGRmM19pLCBzdWJkZjNfaSk6IE5ldyBpbnNucy4KCShtdWxkZjNfaSwgZGl2ZGYzX2ksIGZsb2F0c2lkZjJfaSwgZml4X3RydW5jZGZzaTJfaSk6IE5ldyBpbnNucy4KCShmaXhfdHJ1bmNkZnNpMiwgY21wZGYsIG5lZ2RmMiwgc3FydGRmMiwgYWJzZGYyKTogTmV3IGV4cGFuZGVycy4KCShmaXhfdHJ1bmNkZnNpMl9pNCwgY21wZ3RkZl90LCBjbXBlcWRmX3QsIGllZWVfY2NtcGVxZGZfdCk6IE5ldyBpbnNucy4KCShmaXhfdHJ1bmNkZnNpMl9pNF8yKzEpOiBOZXcgc3BsaXR0ZXJzLgoJKG5lZ2RmMl9pLCBzcXJ0ZGYyX2ksIGFic2RmMl9pLCBleHRlbmRzZmRmMl9pNCk6IE5ldyBpbnNucy4KCShleHRlbmRzZmRmMiwgdHJ1bmNkZnNmMik6IE5ldyBleHBhbmRlcnMuCgkodHJ1bmNkZnNmMl9pNCk6IE5ldyBpbnNuLgoJKiB0LXNoIChMSUIxQVNNRlVOQ1MpOiBBZGQgX21vdnN0cl9pNCwgX3NkaXZzaTNfaTQsIF91ZGl2c2kzX2k0LgoJKE1VTFRJTElCX09QVElPTlMpOiBBZGQgbTQtc2luZ2xlLW9ubHkvbTQtc2luZ2xlL200LgoJKiBmbG9hdC1zaC5oOiBXaGVuIHRlc3RpbmcgZm9yIF9fU0gzRV9fLCBhbHNvIHRlc3QgZm9yCglfX1NINF9TSU5HTEVfT05MWV9fIC4KCSogdmEtc2guaCAoX192YV9mcmVnKTogRGVmaW5lIHRvIGZsb2F0LgoJKF9fdmFfZ3JlZywgX19mYV9mcmVnLCBfX2dudWNfdmFfbGlzdCwgdmFfc3RhcnQpOgoJRGVmaW5lIGZvciBfX1NINF9TSU5HTEVfT05MWV9fIGxpa2UgZm9yIF9fU0gzRV9fIC4KCShfX1BBU1NfQVNfRkxPQVQsIF9fVEFSR0VUX1NINF9QKTogTGlrZXdpc2UuCgkoX19QQVNTX0FTX0ZMT0FUKTogVXNlIGRpZmZlcmVudCBkZWZpbml0aW9uIGZvciBfX1NINF9fIGFuZAoJIF9fU0g0X1NJTkdMRV9fLgoJKFRBUkdFVF9TSDRfUCk6IERlZmluZS4KCSh2YV9hcmcpOiBVc2UgaXQuCgoJKiBzaC5tZCAobW92ZGZfaywgbW92c2ZfaSk6IFR3ZWFrIHRoZSBjb25kaXRpb24gc28gdGhhdAoJaW5pdF9leHByX29uY2UgaXMgc2F0aXNmaWVkIGFib3V0IHRoZSBleGlzdGVuY2Ugb2YgbG9hZCAvIHN0b3JlIGluc25zLgoKCSogc2gubWQgKG1vdnNpX2ksIG1vdnNpX2llLCBtb3ZzaV9pX2xvd3BhcnQsIG1vdnNmX2ksIG1vdnNmX2llKToKCUNoYW5nZSBtIGNvbnN0cmFpbnQgaW4gc291cmNlIG9wZXJhbmQgdG8gbXIgLyBtZi4KCgkqIHZhLXNoLmggKF9fdmFfYXJnX3NoMSk6IFVzZSBfX2FzbSBpbnN0ZWFkIG9mIGFzbS4KCgkqIChfX1ZBX1JFRUYpOiBEZWZpbmUuCgkoX192YV9hcmdfc2gxKTogVXNlIGl0LgoKCSogdmEtc2guaCAodmFfc3RhcnQsIHZhX2FyZywgdmFfY29weSk6IEFkZCBwYXJlbnRoZXNlcy4KClN1biBOb3YgMjIgMjE6MzQ6MDIgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogaTM4Ni9kZ3V4LmMgKHN0cnVjdCBvcHRpb24pOiBBZGQgbmV3ICJkZXNjcmlwdGlvbiBmaWVsZCIuCgkqIG04OGsvbTg4ay5jIChzdHJ1Y3Qgb3B0aW9uKTogTGlrZXdpc2UuCgpTdW4gTm92IDIyIDE2OjA3OjU3IDE5OTggIEplZmYgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiB2ZXJzaW9uLmM6IEJ1bXAgZm9yIHNuYXBzaG90LgoKU3VuIE5vdiAyMiAxMzo0MDowMiAxOTk4ICBCZXJuZCBTY2htaWR0ICA8Y3J1eEBwb29sLmluZm9ybWF0aWsucnd0aC1hYWNoZW4uZGU+CgoJKiByZWdtb3ZlLmMgKHJlZ21vdmVfcHJvZml0YWJsZV9wKTogVXNlIHJldHVybiB2YWx1ZSBvZiBmaW5kX21hdGNoZXMKCXByb3Blcmx5LgoKU3VuIE5vdiAyMiAwMjo0NzozNyAxOTk4ICBKZWZmIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogdmVyc2lvbi5jOiBCdW1wIGZvciBzbmFwc2hvdC4KClNhdCBOb3YgMjEgMjI6MTI6MDkgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogcmVsb2FkMS5jIChlbGltaW5hdGVfcmVncyk6IERvIG5vdCBsb3NlIGlmIGVsaW1pbmF0ZV9yZWdzIGlzIGNhbGxlZAoJd2l0aG91dCByZWxvYWQgaGF2aW5nIGJlZW4gY2FsbGVkIGVhcmxpZXIuCgoJKiB2ODUwLmMgKGVwX21lbW9yeV9vcGVyYW5kKTogT2Zmc2V0cyA8IDAgYXJlIG5vdCB2YWxpZCBmb3IgRVAKCWFkZHJlc3NpbmcgbW9kZXMuCgkodjg1MF9yZW9yZyk6IFNpbWlsYXJseS4KCgkqIGxvb3AuYyAoY2hlY2tfZGJyYV9sb29wKTogQXZvaWQgdXNpbmcgZ2VuX2FkZDJfaW5zbi4KClNhdCBOb3YgMjEgMDI6MTg6MzggMTk5OCAgSiJvcm4gUmVubmVja2UgIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIGxvb3AuYyAobW92ZV9tb3ZhYmxlcyk6IFN0YXJ0IG9mIGxpYmNhbGwgbWlnaHQgYmUgbmV3IGxvb3Agc3RhcnQuCgpGcmkgTm92IDIwIDEyOjE0OjE2IDE5OTggIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGhhc2guYyAoaGFzaF90YWJsZV9pbml0X24pOiBXcmFwIHByb3RvdHlwZSBhcmd1bWVudHMgaW4gUEFSQU1TKCkuCgpGcmkgTm92IDIwIDA4OjM0OjAwIDE5OTggIEJlcm5kIFNjaG1pZHQgIDxjcnV4QHBvb2wuaW5mb3JtYXRpay5yd3RoLWFhY2hlbi5kZT4KCgkqIGZ1bmN0aW9uLmMgKG5vbmxvY2FsX2dvdG9faGFuZGxlcl9zbG90cyk6IFJlbmFtZWQgZnJvbQoJbm9ubG9jYWxfZ290b19oYW5kbGVyX3Nsb3Q7IG5vdyBhbiBFWFBSX0xJU1QgY2hhaW4uCgkocHVzaF9mdW5jdGlvbl9jb250ZXh0X3RvKTogQWRqdXN0IGZvciB0aGlzIGNoYW5nZS4KCShwb3BfZnVuY3Rpb25fY29udGV4dF9mcm9tKTogTGlrZXdpc2UuCgkoaW5pdF9mdW5jdGlvbl9zdGFydCk6IExpa2V3aXNlLgoJKGV4cGFuZF9mdW5jdGlvbl9lbmQpOiBMaWtld2lzZS4KCSogZnVuY3Rpb24uaCAoc3RydWN0IGZ1bmN0aW9uKTogTGlrZXdpc2UuCgkqIGNhbGxzLmMgKGV4cGFuZF9jYWxsKTogTGlrZXdpc2UuCgkqIGV4cGxvdy5jIChhbGxvY2F0ZV9keW5hbWljX3N0YWNrX3NwYWNlKTogTGlrZXdpc2UuCgkqIGV4cHIuaCAobm9ubG9jYWxfZ290b19oYW5kbGVyX3Nsb3RzKTogUmVuYW1lIGl0cyBkZWNsYXJhdGlvbi4KCSogc3RtdC5jIChkZWNsYXJlX25vbmxvY2FsX2xhYmVsKTogTWFrZSBhIG5ldyBoYW5kbGVyIHNsb3QgZm9yIGVhY2gKCWxhYmVsLgoJKGV4cGFuZF9nb3RvKTogV2hlbiBkb2luZyBhIG5vbmxvY2FsIGdvdG8sIGZpbmQgY29ycmVzcG9uZGluZyBoYW5kbGVyCglzbG90IGZvciBpdC4gIERvbid0IHB1dCB0aGUgbGFiZWwgYWRkcmVzcyBpbiB0aGUgc3RhdGljIGNoYWluIHJlZ2lzdGVyLgoJKGV4cGFuZF9lbmRfYmluZGluZ3MpOiBCcmVhayBvdXQgbm9ubG9jYWwgZ290byBoYW5kbGluZyBjb2RlIGludG8KCXRocmVlIG5ldyBmdW5jdGlvbnMuCgkoZXhwYW5kX25sX2hhbmRsZXJfbGFiZWwsIGV4cGFuZF9ubF9nb3RvX3JlY2VpdmVyLAoJZXhwYW5kX25sX2dvdG9fcmVjZWl2ZXJzKTogTmV3IHN0YXRpYyBmdW5jdGlvbnMsIGJyb2tlbiBvdXQgb2YKCWV4cGFuZF9lbmRfYmluZGluZ3MgYW5kIGFkYXB0ZWQgdG8gY3JlYXRlIG9uZSBoYW5kbGVyIHBlciBub25sb2NhbAoJbGFiZWwuCgkqIGZ1bmN0aW9uLmMgKGRlbGV0ZV9oYW5kbGVycyk6IERlbGV0ZSBpbnNuIGlmIGl0IHJlZmVyZW5jZXMgYW55IG9mCgl0aGUgbm9ubG9jYWwgZ290byBoYW5kbGVyIHNsb3RzLgoJKiBpOTYwLm1kIChub25sb2NhbF9nb3RvKTogQ29tbWVudCBvdXQgY29kZSB0aGF0IG1vZGlmaWVzCglzdGF0aWNfY2hhaW5fcnR4LgoJKiBzcGFyYy5tZCAobm9ubG9jYWxfZ290byk6IExpa2V3aXNlLgoJKGdvdG9faGFuZGxlcl9hbmRfcmVzdG9yZV92OSk6IENvbW1lbnQgb3V0LgoJKGdvdG9faGFuZGxlcl9hbmRfcmVzdG9yZV92OV9zcDY0KTogQ29tbWVudCBvdXQuCgpUaHUgTm92IDE5IDIzOjQ0OjM4IDE5OTggIEJlcm5kIFNjaG1pZHQgIDxjcnV4QHBvb2wuaW5mb3JtYXRpay5yd3RoLWFhY2hlbi5kZT4KCgkqIGV4cHIuYyAoU1RBQ0tfQllURVMpOiBEZWxldGUgdW51c2VkIG1hY3JvLgoJKiBjYWxscy5jOiBQcm92aWRlIGRlZmF1bHQgZm9yIFBSRUZFUlJFRF9TVEFDS19CT1VOREFSWS4KCShTVEFDS19CWVRFUyk6IFVzZSBQUkVGRVJSRURfU1RBQ0tfQk9VTkRBUlksIG5vdCBTVEFDS19CT1VOREFSWS4KCShleHBhbmRfY2FsbCk6IExpa2V3aXNlLgoJKGVtaXRfbGlicmFyeV9jYWxsKTogTGlrZXdpc2UuCgkoZW1pdF9saWJyYXJ5X2NhbGxfdmFsdWUpOiBMaWtld2lzZS4KCSogZnVuY3Rpb24uYzogUHJvdmlkZSBkZWZhdWx0IGZvciBQUkVGRVJSRURfU1RBQ0tfQk9VTkRBUlkuCgkoU1RBQ0tfQllURVMpOiBVc2UgUFJFRkVSUkVEX1NUQUNLX0JPVU5EQVJZLCBub3QgU1RBQ0tfQk9VTkRBUlkuCgkqIGV4cGxvdy5jOiBQcm92aWRlIGRlZmF1bHQgZm9yIFBSRUZFUlJFRF9TVEFDS19CT1VOREFSWS4KCShyb3VuZF9wdXNoKTogVXNlIFBSRUZFUlJFRF9TVEFDS19CT1VOREFSWSwgbm90IFNUQUNLX0JPVU5EQVJZLgoJKGFsbG9jYXRlX2R5bmFtaWNfc3RhY2tfc3BhY2UpOiBMaWtld2lzZS4KCSogdG0udGV4aSAoUFJFRkVSUkVEX1NUQUNLX0JPVU5EQVJZKTogRG9jdW1lbnQgbmV3IG1hY3JvLgoJKFNUQUNLX0JPVU5EQVJZKTogVXBkYXRlIGRlc2NyaXB0aW9uIHRvIHJlZmxlY3QgdGhlIG5ldyBzaXR1YXRpb24uCgpUaHUgTm92IDE5IDIyOjIwOjUxIDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHJlb3JnLmMgKHJlbGF4X2RlbGF5X3Nsb3RzKTogV2hlbiBvcHRpbWl6aW5nIGZvciBjb2RlIHNpemUsIGlmIGEKCXJldHVybiB3aXRoIGEgZmlsbGVkIGRlbGF5IHNsb3QgaXMgZm9sbG93ZWQgYnkgYSByZXR1cm4gd2l0aCBhbgoJdW5maWxsZWQgZGVsYXkgc2xvdCwgZGVsZXRlIHRoZSBmaXJzdCByZXR1cm4gYW5kIHJlZW1pdCB0aGUgaW5zbgoJdGhhdCB3YXMgcHJldmlvdXNseSBpbiBpdHMgZGVsYXkgc2xvdC4KCgkqIGk4NjAuYyAoc2luZ2xlX2luc25fc3JjX3ApOiBBZGQgbWlzc2luZyBwYXJlbnMuCgkqIGdpbmNsdWRlL21hdGgtMzMwMC5oOiBMaWtld2lzZS4KClRodSBOb3YgMTkgMjA6NTU6NTkgMTk5OCAgSC5KLiBMdSAgKGhqbEBnbnUub3JnKQoKCSogcmVnY2xhc3MuYyAoaW5pdF9yZWdfc2V0c18xKTogQWRkIHByb3RvdHlwZS4KCShpbml0X3JlZ19tb2Rlcyk6IExpa2V3aXNlLgoKMTk5OC0xMS0xOSAgWmFjayBXZWluYmVyZyAgPHphY2tAcmFiaS5waHlzLmNvbHVtYmlhLmVkdT4KCgkqIGMtY29tbW9uLmM6IENoYW5nZSB3YXJuaW5nIG1lc3NhZ2VzIHRvIHNheSBgY29tcGFyaXNvbiBpcwoJYWx3YXlzIHRydWUnIG9yIGBjb21wYXJpc29uIGlzIGFsd2F5cyBmYWxzZScgaW5zdGVhZCBvZiB0aGUKCWNvbmZ1c2luZyBgaXMgYWx3YXlzIDAnLCBgaXMgYWx3YXlzIDEnLgoKVGh1IE5vdiAxOSAxOTowNTo0OSAxOTk4ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAY3lnbnVzLmNvbT4KCgkqIHByaW50LXRyZWUuYyAocHJpbnRfbm9kZSk6IEFmdGVyIHByaW50aW5nIEJMT0NLIG9yIEJJTkRfRVhQUiwKCWJyZWFrIGluc3RlYWQgb2YgcmV0dXJuICh3aGljaCBsb3NlcyBjbG9zaW5nICc+JykuCgpUaHUgTm92IDE5IDE5OjM0OjEzIDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGkzODYuaCAoTEVHSVRJTUFURV9DT05TVEFOVF9QKTogUmVqZWN0IENPTlNUX0RPVUJMRXMgdGhhdCBhcmUgbm90CglzdGFuZGFyZCAzODcgY29uc3RhbnRzLgoKCSogaTM4Ni5tZCAoanVtcCk6IEV4cGxpY2l0bHkgc2V0ICJtZW1vcnkiIGF0dHJpYnV0ZS4KCShpbmRpcmVjdF9qdW1wLCBwcm9sb2d1ZV9zZXRfc3RhY2tfcHRyKTogTGlrZXdpc2UuCgkocHJvbG9ndWVfZ2V0X3BjX2FuZF9zZXRfZ290LCBwb3ApOiBMaWtld2lzZS4KCShhbGxvY2F0ZV9zdGFja193b3JkZXIsIGJsb2NrYWdlLCByZXR1cm5faW50ZXJuYWwpOiBMaWtld2lzZS4KCShyZXR1cm5fcG9wX2ludGVybmFsLCBub3ApOiBMaWtld2lzZS4KCShlcGlsb2d1ZV9zZXRfc3RhY2tfcHRyLCBsZWF2ZSk6IExpa2V3aXNlLgoKVGh1IE5vdiAxOSAxNTo0Mjo1NCAxOTk4ICBOaWNrIENsaWZ0b24gIDxuaWNrY0BjeWdudXMuY29tPgoKCSogY29uZmlnL2FybS9jb2ZmLmg6IFNldCBVU0VSX0xBQkVMX1BSRUZJWCB0byAiXyIuCgpUaHUgTm92IDE5IDIzOjIwOjU5IDE5OTggIEoib3JuIFJlbm5lY2tlICA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiByZWxvYWQxLmMgKHJlbG9hZF9yZWdfZnJlZV9mb3JfdmFsdWVfcCk6CglFYXJseSBhdXRvX2luYyByZWxvYWRzIGRvbid0IGNvbmZsaWN0IHdpdGggb3V0cHV0cy4KClRodSBOb3YgMTkgMTI6NTg6NTUgMTk5OCAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogY29uZmlndXJlLmluOiBEb24ndCBkbyBBQ19DSEVDS19IRUFERVJTKHdhaXQuaCBzeXMvd2FpdC5oKS4KCUluc3RlYWQgY2FsbCBBQ19IRUFERVJfU1lTX1dBSVQuCgoJKiBjb2xsZWN0Mi5jOiBEb24ndCBwcm92aWRlIGRlZmF1bHRzIGZvciBzeXMvd2FpdC5oIG1hY3Jvcy4KCSogZ2NjLmM6IExpa2V3aXNlLgoJKiBwcm90b2l6ZS5jOiBMaWtld2lzZS4gIEFsc28sIGRvbid0IGluY2x1ZGUgc3lzL3dhaXQuaC4KCgkqIHN5c3RlbS5oOiBJbmNsdWRlIHN5cy93YWl0LmggYW5kIHByb3ZpZGUgbWFjcm8gZGVmYXVsdHMuCgoxOTk4LTExLTE5ICBBbmRyZWFzIFNjaHdhYiAgPHNjaHdhYkBpc3Nhbi5jcy51bmktZG9ydG11bmQuZGU+CgoJKiBNYWtlZmlsZS5pbiAobWFuZGlyKTogU2V0IHRvIEBtYW5kaXJALgoJKG1hbjFkaXIpOiBOZXcgdmFyaWFibGUgdG8gaG9sZCB0aGUgZm9ybWVyIHZhbHVlIG9mICQobWFuZGlyKS4KCVJlcGxhY2UgYWxsIHVzZXMgb2YgJChtYW5kaXIpIGJ5ICQobWFuMWRpcikuCgpXZWQgTm92IDE4IDE2OjMxOjI4IDE5OTggIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KCgkqIHJlbG9hZC5jIChmaW5kX3JlbG9hZHNfYWRkcmVzc19wYXJ0KTogSWYgaGF2ZSBhIENPTlNUX0lOVCwgY3JlYXRlCglhIG5ldyBvbmUgYmVmb3JlIHBhc3NpbmcgaXQgdG8gZm9yY2VfY29uc3RfbWVtLgoKCSogcmVsb2FkLmMgKGZpbmRfcmVsb2Fkc190b3BsZXYpOiBQYXNzICZ4IGluc3RlYWQgb2YgTlVMTF9QVFIgaW4KCWZpbmRfcmVsb2Fkc19hZGRyZXNzIGNhbGwuCgpXZWQgTm92IDE4IDIyOjEzOjAwIDE5OTggIEoib3JuIFJlbm5lY2tlICA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiBleHByLmMgKHN0b3JlX2V4cHIpOiBEb24ndCBnZW5lcmF0ZSBsb2FkLXN0b3JlIHBhaXIKCWlmIFRFTVAgaXMgaWRlbnRpY2FsIChhY2NvcmRpbmcgdG8gPT0pIHdpdGggVEFSR0VULgoKVHVlIE5vdiAxNyAyMjoyNToxNiAxOTk4ICBKIm9ybiBSZW5uZWNrZSAgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogcmVsb2FkMS5jIChyZWxvYWRfcmVnX2ZyZWVfZm9yX3ZhbHVlX3ApOiBXaGVuIGNvbnNpZGVyZWQgcmVsb2FkCgloYXMgYW4gb3V0cHV0LCBtYXRjaGluZyBpbnB1dHMgYXJlIG5vdCBzdWZmaWNpZW50IHRvIGF2b2lkIGNvbmZsaWN0LgoKVHVlIE5vdiAxNyAxMTo1MToxNiAxOTk4ICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogaGFzaC5oIChoYXNoX3RhYmxlX2tleSk6IE5ldyB0eXBlLgoJKGhhc2hfZW50cnkpOiBDaGFuZ2UgYHN0cmluZycgZmllbGQgdG8gZ2VuZXJpYyBga2V5Jy4KCShoYXNoX3RhYmxlKTogQWRkIGBjb21wJyBhbmQgYGhhc2gnIGZ1bmN0aW9ucy4KCShoYXNoX3RhYmxlX2luaXQpOiBUYWtlIHRoZW0gYXMgaW5wdXQuCgkoaGFzaF90YWJsZV9pbml0X24pOiBMaWtld2lzZS4KCShoYXNoX2xvb2t1cCk6IE1vZGlmeSBmb3IgZ2VuZXJpYyBrZXlzLgoJKGhhc2hfbmV3ZnVuYyk6IExpa2V3aXNlLgoJKGhhc2hfdHJhdmVyc2UpOiBMaWtld2lzZS4KCShzdHJpbmdfaGFzaCk6IE5ldyBmdW5jdGlvbi4KCShzdHJpbmdfY29tcGFyZSk6IExpa2V3aXNlLgoJKHN0cmluZ19jb3B5KTogTGlrZXdpc2UuCgkqIGhhc2guYyAoaGFzaF90YWJsZV9pbml0X24pOiBNb2RpZnkgZm9yIGdlbmVyaWMga2V5cy4KCShoYXNoX3RhYmxlX2luaXQpOiBMaWtld2lzZS4KCShoYXNoX2xvb2t1cCk6IExpa2V3aXNlLgoJKGhhc2hfbmV3ZnVuYyk6IExpa2V3aXNlLgoJKGhhc2hfdHJhdmVyc2UpOiBMaWtld2lzZS4KCShzdHJpbmdfaGFzaCk6IFNwbGl0IG91dCBmcm9tIGhhc2hfbG9va3VwLgoJKHN0cmluZ19jb21wYXJlKTogTmV3IGZ1bmN0aW9uLgoJKHN0cmluZ19jb3B5KTogU3BsaXQgb3V0IGZyb20gaGFzaF9sb29rdXAuCgkqIHRsaW5rLmMgKHN5bWJvbF9oYXNoX25ld2Z1bmMpOiBNb2RpZnkgZm9yIG5ldyBpbnRlcmZhY2VzIHRvIGhhc2gKCXRhYmxlcy4KCShzeW1ib2xfaGFzaF9sb29rdXApOiBMaWtld2lzZS4KCShmaWxlX2hhc2hfbmV3ZnVuYyk6IExpa2V3aXNlLgoJKGZpbGVfaGFzaF9sb29rdXApOiBMaWtld2lzZS4KCShkZW1hbmdsZWRfaGFzaF9uZXdmdW5jKTogTGlrZXdpc2UuCgkoZGVtYW5nbGVkX2hhc2hfbG9va3VwKTogTGlrZXdpc2UuCgkodGxpbmtfaW50KTogTGlrZXdpc2UuCgkocmVhZF9yZXBvX2ZpbGUpOiBMaWtld2lzZS4KCShyZWNvbXBpbGVfZmlsZXMpOiBMaWtld2lzZS4KCShkZW1hbmdsZV9uZXdfc3ltYm9scyk6IExpa2V3aXNlLgoJKHNjYW5fbGlua2VyX291dHB1dCk6IExpa2V3aXNlLgoKVHVlIE5vdiAxNyAxNzoxMzo1MyAxOTk4ICBKIm9ybiBSZW5uZWNrZSAgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogZmxvdy5jIChpbnNuX2RlYWRfcCk6IE5ldyBhcmd1bWVudCBOT1RFUy4gIENoYW5nZWQgYWxsIGNhbGxlcnMuCgpNb24gTm92IDE2IDE3OjU2OjA3IDE5OTggIERhdmlkIEVkZWxzb2huICA8ZWRlbHNvaG5AZ251Lm9yZz4KCgkqIHJzNjAwMC5jIChvdXRwdXRfbWlfdGh1bmspOiBJbXByb3ZlIHRlc3QgZm9yIGxvY2FsIGJyYW5jaC4KCk1vbiBOb3YgMTYgMTc6NTY6MDcgMTk5OCAgRnJhbnogU2lybCAgPEZyYW56LlNpcmwta2VybmVsQGxhdXRlcmJhY2guY29tPgoKCSogcnM2MDAwLmMgKG91dHB1dF9taV90aHVuayk6IENvcnJlY3QgdGVzdCBmb3IgYWdncmVnYXRlIHZhbHVlcy4KCk1vbiBOb3YgMTYgMjE6MDI6NTIgMTk5OCAgSiJvcm4gUmVubmVja2UgIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIHJlbG9hZDEuYyAocmVsb2FkX3JlZ19mcmVlX2JlZm9yZV9wKTogRGVsZXRlLgoJQ2hhbmdlZCBhbGwgY2FsbGVycyB0byB1c2UgcmVsb2FkX3JlZ19mcmVlX2Zvcl92YWx1ZV9wIGluc3RlYWQuCgkocmVsb2FkX3JlZ19mcmVlX2Zvcl92YWx1ZV9wKTogSGFuZGxlIG1vcmUgcmVsb2FkIHR5cGVzLgoJQSBSRUxPQURfRk9SX0lOUFVUIGRvZXNuJ3QgY29uZmxpY3Qgd2l0aCBpdHMKCVJFTE9BRF9GT1JfSU5QVVRfQUREUkVTUyAvIFJFTE9BRF9GT1JfSU5QQUREUl9BRERSRVNTLgoJQWRkIHNwZWNpYWwgY2FzZSBmb3IgT1VUID09IGNvbnN0MF9ydHguCglBZGRlZCBpZ25vcmVfYWRkcmVzc19yZWxvYWRzIGFyZ3VtZW50LiAgQ2hhbmdlZCBhbGwgY2FsbGVycy4KCk1vbiBOb3YgMTYgMDI6MjI6MjkgMTk5OCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogdG9wbGV2LmMgKGNvbXBpbGVfZmlsZSk6IERvbid0IHBlZHdhcm4gYWJvdXQgdW5kZWZpbmVkIHN0YXRpYwoJZnVuY3Rpb25zIGp1c3QgYmVjYXVzZSB3ZSBwYXNzZWQgLVd1bnVzZWQuCgpNb24gTm92IDE2IDA0OjQxOjQxIDE5OTggIEoib3JuIFJlbm5lY2tlICA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiBmdW5jdGlvbi5jIChwdXJnZV9hZGRyZXNzb2ZfMSk6IFVuc2hhcmUgcnRsIGNyZWF0ZWQgYnkKCXN0b3JlX2JpdF9maWVsZC4KCk1vbiBOb3YgMTYgMDQ6MjM6MDYgMTk5OCAgSiJvcm4gUmVubmVja2UgIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIHJlZ21vdmUuYyAocmVnbW92ZV9vcHRpbWl6ZSk6IERvbid0IGRvIGFueXRoaW5nIGJ1dAoJb3B0aW1pemVfcmVnX2NvcHlbMTIzXSB3aGVuIGZsYWdfcmVnbW92ZSBpcyBub3Qgc2V0LgoKU2F0IE5vdiAxNCAxNTowNTowNyAxOTk4ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogYWxwaGEubWQgKGFkZHNpMywgc3Vic2kzKTogUmV2aXNlIDUgTm92IGNoYW5nZSB0byBzdG9yZSBESW1vZGUKCXZhbHVlIGluIHBhcmFkb3hpY2FsIFNJbW9kZSByZXN1bHQsIHJhdGhlciB0aGFuIHRydW5jYXRpbmcgbWlkcG9pbnQuCgpGcmkgTm92IDEzIDIyOjE5OjIzIDE5OTggIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBhbHBoYS5jIChyZWdfbm90X2VsaW1fb3BlcmFuZCk6IE5ldy4KCSogYWxwaGEuaCAoUFJFRElDQVRFX0NPREVTKTogQWRkIGl0LgoJKiBhbHBoYS5tZCAoczQ4YWRkcSwgczQ4c3VicSBwYXR0ZXJucyk6IFVzZSBpdCBhcyB0aGUgcHJlZGljYXRlCglmb3IgdGhlIG11bHRpcGxpY2FuZC4KCkZyaSBOb3YgMTMgMjI6NTA6MzcgMTk5OCAgRGF2aWQgRWRlbHNvaG4gIDxlZGVsc29obkBnbnUub3JnPgoKCSogcnM2MDAwLm1kIChtb3ZzZik6IFJlbW92ZSBleHBsaWNpdCBzZWNvbmRhcnktcmVsb2FkLWxpa2UKCWZ1bmN0aW9uYWxpdHkuICBPbmx5IHRydW5jYXRlIFNGbW9kZSBzdG9yZSBpZiBpbiBGUFIuCgkobW92c2Ygc3BsaXR0ZXJzKTogQ29tYmluZSBjb25zdF9kb3VibGUgc3BsaXR0ZXJzLgoJKG1vdnNmX2hhcmRmbG9hdCk6IEFkZCBHUFIgc3VwcG9ydC4KCkZyaSBOb3YgMTMgMTE6MDI6MTEgMTk5OCAgU3RhbiBDb3ggIDxzY294QGN5Z251cy5jb20+CgoJKiBzcGxldC5oIChTVUJUQVJHRVRfT1ZFUlJJREVfT1BUSU9OUyk6IE5ldyB0bwoJZGVwcmVjYXRlIC1tbGl2ZS1nMCBhbmQgLW1icm9rZW4tc2F2ZXJlc3RvcmUuCgkqIHQtc3BsZXQgKE1VTFRJTElCX09QVElPTlMpOiBMaWtld2lzZS4KCgkqIHNwYXJjLmMgKHNwYXJjX2ZsYXRfY29tcHV0ZV9mcmFtZV9zaXplKTogQ29ycmVjdGx5IGNhbGMgYXJnc19zaXplCglpbiBhIGxlYWYgZnVuY3Rpb24uICBDbGFyaWZ5IHRvdGFsX3NpemUvZXh0cmFfc2l6ZSByZWxhdGlvbnNoaXAuCgpUaHUgTm92IDEyIDE5OjIwOjU3IDE5OTggIEdlb2ZmcmV5IE5vZXIgIDxub2VyQGN5Z251cy5jb20+CgoJKiBpMzg2L2N5Z3dpbjMyLmFzbTogRGVsZXRlLgoJKiBpMzg2L2N5Z3dpbi5hc206IE5ldyBmaWxlLCByZW5hbWVkIGZyb20gY3lnd2luMzIuYXNtLgoJKiBpMzg2L2N5Z3dpbjMyLmg6IERlbGV0ZS4KCSogaTM4Ni9jeWd3aW4uaDogTmV3IGZpbGUsIHJlbmFtZWQgZnJvbSBjeWd3aW4zMi5oLgoJKiBpMzg2L3QtY3lnd2luMzI6IERlbGV0ZS4KCSogaTM4Ni90LWN5Z3dpbjogTmV3IGZpbGUsIHJlbmFtZWQgZnJvbSB0LWN5Z3dpbjMyLiAgSW5jbHVkZQoJY3lnd2luLmFzbSBpbnN0ZWFkIG9mIGN5Z3dpbjMyLmFzbS4gIFJlbW92ZSAiMzIiIGZyb20gY29tbWVudC4KCSogaTM4Ni94LWN5Z3dpbjMyOiBEZWxldGUuCgkqIGkzODYveC1jeWd3aW46IE5ldyBmaWxlLCByZW5hbWVkIGZyb20geC1jeWd3aW4zMi4KCSogaTM4Ni94bS1jeWd3aW4zMjogRGVsZXRlLgoJKiBpMzg2L3htLWN5Z3dpbjogTmV3IGZpbGUsIHJlbmFtZWQgZnJvbSB4bS1jeWd3aW4zMi4gIFVzZSBuZXdseQoJcmVuYW1lZCBjeWd3aW5fIGZ1bmNzIGZvciBwYXRoIHRyYW5zbGF0aW9ucy4KCSogaTM4Ni93aW4zMi5oOiBEZWZpbmUgX19DWUdXSU5fXyB3aGVuIC1tY3lnd2luIGdpdmVuLgoJKiBpMzg2L3dpbm50LmM6IFJlbW92ZSAiMzIiIGZyb20gY29tbWVudCBhYm91dCBjeWd3aW4uCgkqIGkzODYvbWluZ3czMi5oOiBGaXggcmVmZXJlbmNlcyB0byBjeWd3aW4zMi5oIGluIGxpZ2h0IG9mIGFib3ZlLgoJKiByczYwMDAvY3lnd2luMzIuaDogRGVsZXRlLgoJKiByczYwMDAvY3lnd2luLmg6IE5ldyBmaWxlLCByZW5hbWVkIGZyb20gY3lnd2luMzIuaC4gIEFkZAoJLURfX0NZR1dJTl9fIHRvIENQUF9QUkVERUZJTkVTLgoJKiByczYwMDAveC1jeWd3aW4zMjogRGVsZXRlLgoJKiByczYwMDAveC1jeWd3aW46IE5ldyBmaWxlLCByZW5hbWVkIGZyb20geC1jeWd3aW4zMi4KCSogcnM2MDAwL3htLWN5Z3dpbjMyOiBEZWxldGUuCgkqIHJzNjAwMC94bS1jeWd3aW46IE5ldyBmaWxlLCByZW5hbWVkIGZyb20geG0tY3lnd2luMzIuCgoJKiBjb25maWd1cmUuaW46IENoZWNrIGZvciBjeWd3aW4qIGluc3RlYWQgb2YgY3lnd2luMzIuICBBY2NvdW50Cglmb3IgdGhlIHJlbmFtZSBvZiBjeWd3aW4tcmVsYXRlZCBjb25maWcgZmlsZXMgdG8gbG9zZSB0aGUgIjMyInMuCgkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KCgkqIGNjY3AuYywgY29sbGVjdDIuYywgZ2NjLmMsIGdldHB3ZC5jLCBsaWJnY2MyLmMsIHByb3RvaXplLmMsCgl0b3BsZXYuYzogQ2hhbmdlIGFsbCByZWZzIHRvIF9fQ1lHV0lOMzJfXyB0byBfX0NZR1dJTl9fLgoKV2VkIE5vdiAxMSAxMjoyNToxOSAxOTk4ICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CgoJKiBNYWtlZmlsZS5pbiAoSkFWQUdDKTogTmV3IG1hY3JvLgoJKiBjb25maWd1cmU6IFJlYnVpbHQuCgkqIGNvbmZpZ3VyZS5pbjogUmVjb2duaXplIC0tZW5hYmxlLWphdmEtZ2MgYXJndW1lbnQuICBTdWJzdAoJYEpBVkFHQycgdmFyaWFibGUuCgpUaHUgTm92IDEyIDAzOjMyOjE2IDE5OTggIEoib3JuIFJlbm5lY2tlICA8YW15bGFhckBjeWdudXMuY28udWs+CgoJSGFuZGxlIGVxdWl2YWxlbmNlcyB0aGF0IGhhdmUgYmVlbiBvYnNjdXJlZCBieSBnY3NlOgoKCSogcmVsb2FkMS5jIChyZWxvYWQpOiBIYW5kbGUgZXF1aXZhbGVuY2VzIHNldCB1cCBpbiBtdWx0aXBsZSBwbGFjZXMuCgkqIGxvY2FsLWFsbG9jLmMgKHJlZ19lcXVpdl9pbml0X2luc25zKTogTmV3IHZhcmlhYmxlLgoJKG5vX2VxdWl2KTogTmV3IGZ1bmN0aW9uLgoJKHVwZGF0ZV9lcXVpdl9yZWdzKTogSGFuZGxlIGVxdWl2YWxlbmNlcyBzZXQgdXAgaW4gbXVsdGlwbGUgcGxhY2VzLgoJRG9uJ3QgaWdub3JlIGFuIGluc24ganVzdCBiZWNhdXNlIGl0cyBkZXN0aW5hdGlvbiBpcyBsaWtlbHkgdG8gYmUKCXNwaWxsZWQuCgpXZWQgTm92IDExIDEzOjQ2OjEzIDE5OTggIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KCgkqIGV4Y2VwdC5jIChleHBhbmRfZWhfcmV0dXJuKTogUmVhZGQgZm9yY2Vfb3BlcmFuZCBjYWxsIGxvc3QgaW4KCVNlcHQgMTUgY2hhbmdlLgoKVHVlIE5vdiAxMCAxNzowNDoxMSAxOTk4ICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQGdudS5vcmc+CgoJKiByczYwMDAuaCAoTEVHSVRJTUlaRV9BRERSRVNTKTogQWRkIG1pc3NpbmcgZ290byBvbiBsYXN0IGNhc2UuCgoxOTk4LTExLTA5ICBBbmRyZWFzIFNjaHdhYiAgPHNjaHdhYkBpc3Nhbi5jcy51bmktZG9ydG11bmQuZGU+CgoJKiBkYnhvdXQuYzogQ2hlY2sgSEFWRV9TVEFCX0ggaW5zdGVhZCBvZiBIQVZFX1NUQUJTX0guCgpNb24gTm92ICA5IDIwOjE1OjE5IDE5OTggIEJlcm5kIFNjaG1pZHQgIDxjcnV4QHBvb2wuaW5mb3JtYXRpay5yd3RoLWFhY2hlbi5kZT4KCgkqIHJlZ21vdmUuYyAocmVnbW92ZV9vcHRpbWl6ZSk6IEZpeCBlcnJvciBpbiBsYXN0IGNoYW5nZS4KCk1vbiBOb3YgIDkgMTY6Mzc6NTIgMTk5OCAgQW5kcmV3IENhZ25leSAgPGNhZ25leUBiMS5jeWdudXMuY29tPgoKCSogbWlwcy5jIChmdW5jdGlvbl9wcm9sb2d1ZSk6IFdoZW4gVEFSR0VUX01JUFMxNiwgYWRqdXN0IHRoZSByZWdpc3RlcgoJb2Zmc2V0IGluIHRoZSAubWFzayBwc2V1ZG8gdG8gY29tcGVuc2F0ZSBmb3IgZnJhbWUgcG9pbnRlciBhZGp1c3RtZW50cy4KCShtaXBzMTZfZnBfYXJncywgYnVpbGRfbWlwczE2X2NhbGxfc3R1Yik6IEZvciBsaXR0bGUgZW5kaWFuLCBkbyBub3QKCXdvcmQgc3dhcCBhcmd1bWVudHMgbW92ZWQgdG8vZnJvbSBGUCByZWdpc3RlcnMuCgkqIG1pcHMxNi5TIChERlJFVkNNUCk6IFJldmVyc2UgYXJndW1lbnRzIHRvIE9QQ09ERS4KCk1vbiBOb3YgIDkgMDk6NDc6MDYgMTk5OCAgSmVmZiBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHZlcnNpb24uYzogQnVtcCBmb3Igc25hcHNob3QuCgpNb24gTm92ICA5IDAyOjE0OjE0IDE5OTggIEplZmYgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiB2ZXJzaW9uLmM6IEJ1bXAgZm9yIHNuYXBzaG90LgoKTW9uIE5vdiAgOSAwMzowNjoyNCAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiByZWxvYWQxLmMgKGRlbGV0ZV9vdXRwdXRfcmVsb2FkX2luc24pOiBJZiBhIHBzZXVkbyBpcyBzZXQgbXVsdGlwbGUKCXRpbWVzLCB0aGVuIGl0IGNhbiBub3QgYmUgY29tcGxldGVseSByZXBsYWNlZC4KCk1vbiBOb3YgIDkgMDA6Mzk6MDIgMTk5OCAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGFscGhhLm1kIChjYWxsLCBjYWxsX3ZhbHVlKSBbT1NGXTogQ29ycmVjdCBhbHQgMyBpbnNuIGxlbmd0aC4KClN1biBOb3YgIDggMTc6NTA6MzAgMTk5OCAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogZ2Fuc2lkZWNsLmg6IFByZXBlbmQgYSAiRyIgdG8gdGhlIG1hY3JvIHdyYXBwaW5nIHRoaXMgZmlsZQoJKHRvIGRpc3Rpbmd1aXNoIGl0IGZyb20gdGhlIG1hY3JvIHdyYXBwaW5nIGFuc2lkZWNsLmguKQoJSW5jbHVkZSBsaWJpYmVydHkncyBhbnNpZGVjbC5oLiAgUmVtb3ZlIGFsbCByZWR1bmRhbnQgZGVmaW5pdGlvbnMuCglEZWZpbmUgdGhlIFBST1RPKCkgc3R5bGUgbWFjcm9zIGluIHRlcm1zIG9mIHRoZSBQQVJBTVMoKSBvbmVzLgoKCgkqIGNhbGxzLmMgKGVtaXRfbGlicmFyeV9jYWxsKTogU3dpdGNoIG9uIEFOU0lfUFJPVE9UWVBFUywgbm90CglfX1NURENfXywgd2hlbiBkZWNpZGluZyB3aGV0aGVyIHRvIHVzZSBBTlNJIHZhcmlhYmxlIGFyZ3MuCgkoZW1pdF9saWJyYXJ5X2NhbGxfdmFsdWUpOiBMaWtld2lzZS4KCgkqIGNjY3AuYyAoZXJyb3IpOiBMaWtld2lzZS4KCSh3YXJuaW5nKTogTGlrZXdpc2UuCgkoZXJyb3Jfd2l0aF9saW5lKTogTGlrZXdpc2UuCgkod2FybmluZ193aXRoX2xpbmUpOiBMaWtld2lzZS4KCShwZWR3YXJuKTogTGlrZXdpc2UuCgkocGVkd2Fybl93aXRoX2xpbmUpOiBMaWtld2lzZS4KCShwZWR3YXJuX3dpdGhfZmlsZV9hbmRfbGluZSk6IExpa2V3aXNlLgoJKGZhdGFsKTogTGlrZXdpc2UuCgoJKiBjZXhwLnkgKGVycm9yKTogTGlrZXdpc2UuCgkocGVkd2Fybik6IExpa2V3aXNlLgoJKHdhcm5pbmcpOiBMaWtld2lzZS4KCgkqIGNvbGxlY3QyLmMgKGZhdGFsX3BlcnJvcik6IExpa2V3aXNlLgoJKGZhdGFsKTogTGlrZXdpc2UuCgkoZXJyb3IpOiBMaWtld2lzZS4KCgkqIGNvbWJpbmUuYyAoZ2VuX3J0eF9jb21iaW5lKTogTGlrZXdpc2UuCgoJKiBjcHBlcnJvci5jIChjcHBfbWVzc2FnZSk6IExpa2V3aXNlLgoJKGNwcF9mYXRhbCk6IExpa2V3aXNlLgoKCSogY3BwbGliLmMgKGNwcF9lcnJvcik6IExpa2V3aXNlLgoJKGNwcF93YXJuaW5nKTogTGlrZXdpc2UuCgkoY3BwX3BlZHdhcm4pOiBMaWtld2lzZS4KCShjcHBfZXJyb3Jfd2l0aF9saW5lKTogTGlrZXdpc2UuCgkoY3BwX3dhcm5pbmdfd2l0aF9saW5lKTogTGlrZXdpc2UuCgkoY3BwX3BlZHdhcm5fd2l0aF9saW5lKTogTGlrZXdpc2UuCgkoY3BwX3BlZHdhcm5fd2l0aF9maWxlX2FuZF9saW5lKTogTGlrZXdpc2UuCgoJKiBjcHBsaWIuaDogRG9uJ3QgZGVmaW5lIFBBUkFNUygpIG1hY3JvLgoKCSogZGVtYW5nbGUuaDogTGlrZXdpc2UuCgoJKiBkb3ByaW50LmMgKGNoZWNraXQpOiBTd2l0Y2ggb24gQU5TSV9QUk9UT1RZUEVTLCBub3QgX19TVERDX18sCgl3aGVuIGRlY2lkaW5nIHdoZXRoZXIgdG8gdXNlIEFOU0kgdmFyaWFibGUgYXJncy4KCgkqIGVtaXQtcnRsLmMgKGdlbl9ydHgpOiBMaWtld2lzZS4KCShnZW5fcnR2ZWMpOiBMaWtld2lzZS4KCgkqIGZpbmFsLmMgKGFzbV9mcHJpbnRmKTogTGlrZXdpc2UuCgoJKiBmaXgtaGVhZGVyLmMgKGNwcF9tZXNzYWdlKTogTGlrZXdpc2UuCgkoZmF0YWwpOiBMaWtld2lzZS4KCShjcHBfZmF0YWwpOiBMaWtld2lzZS4KCgkqIGdjYy5jIChjb25jYXQpOiBMaWtld2lzZS4KCShmYXRhbCk6IExpa2V3aXNlLgoJKGVycm9yKTogTGlrZXdpc2UuCgoJKiBnZW5hdHRyLmMgKGZhdGFsKTogTGlrZXdpc2UuCgoJKiBnZW5hdHRydGFiLmMgKGF0dHJfcnR4KTogTGlrZXdpc2UuCgkoYXR0cl9wcmludGYpOiBMaWtld2lzZS4KCShmYXRhbCk6IExpa2V3aXNlLgoKCSogZ2VuY29kZXMuYyAoZmF0YWwpOiBMaWtld2lzZS4KCgkqIGdlbmNvbmZpZy5jIChmYXRhbCk6IExpa2V3aXNlLgoKCSogZ2VuZW1pdC5jIChmYXRhbCk6IExpa2V3aXNlLgoKCSogZ2VuZXh0cmFjdC5jIChmYXRhbCk6IExpa2V3aXNlLgoKCSogZ2VuZmxhZ3MuYyAoZmF0YWwpOiBMaWtld2lzZS4KCgkqIGdlbm9waW5pdC5jIChmYXRhbCk6IExpa2V3aXNlLgoKCSogZ2Vub3V0cHV0LmMgKGZhdGFsKTogTGlrZXdpc2UuCgkoZXJyb3IpOiBMaWtld2lzZS4KCgkqIGdlbnBlZXAuYyAoZmF0YWwpOiBMaWtld2lzZS4KCgkqIGdlbnJlY29nLmMgKGZhdGFsKTogTGlrZXdpc2UuCgoJKiBoYWxmcGljLmg6IFN3aXRjaCBvbiBBTlNJX1BST1RPVFlQRVMsIG5vdCBfX1NURENfXywgd2hlbgoJZGVjaWRpbmcgd2hldGhlciB0byBkZWNsYXJlIGB0cmVlX25vZGUnIGFuZCBgcnR4X2RlZicuCgoJKiBoYXNoLmg6IERvbid0IGRlZmluZSBzdHVmZiB3ZSBnZXQgZnJvbSBnYW5zaWRlY2wuaC4KCgkqIG1pcHMtdGZpbGUuYzogTGlrZXdpc2UuICBEZWZpbmUgX19wcm90bygpIGluIHRlcm1zIG9mIFBBUkFNUygpLgoJKGZhdGFsKTogU3dpdGNoIG9uIEFOU0lfUFJPVE9UWVBFUywgbm90IF9fU1REQ19fLCB3aGVuIGRlY2lkaW5nCgl3aGV0aGVyIHRvIHVzZSBBTlNJIHZhcmlhYmxlIGFyZ3MuCgkoZXJyb3IpOiBMaWtld2lzZS4KCgkqIHByZWZpeC5jIChjb25jYXQpOiBMaWtld2lzZS4KCgkqIHNjYW4uaDogTGlrZXdpc2UuCgoJKiBzeXN0ZW0uaDogTGlrZXdpc2UuCgoJKiB0b3BsZXYuYyAoZXJyb3Jfd2l0aF9maWxlX2FuZF9saW5lKTogTGlrZXdpc2UuCgkoZXJyb3Jfd2l0aF9kZWNsKTogTGlrZXdpc2UuCgkoZXJyb3JfZm9yX2FzbSk6IExpa2V3aXNlLgoJKGVycm9yKTogTGlrZXdpc2UuCgkoZmF0YWwpOiBMaWtld2lzZS4KCSh3YXJuaW5nX3dpdGhfZmlsZV9hbmRfbGluZSk6IExpa2V3aXNlLgoJKHdhcm5pbmdfd2l0aF9kZWNsKTogTGlrZXdpc2UuCgkod2FybmluZ19mb3JfYXNtKTogTGlrZXdpc2UuCgkod2FybmluZyk6IExpa2V3aXNlLgoJKHBlZHdhcm4pOiBMaWtld2lzZS4KCShwZWR3YXJuX3dpdGhfZGVjbCk6IExpa2V3aXNlLgoJKHBlZHdhcm5fd2l0aF9maWxlX2FuZF9saW5lKTogTGlrZXdpc2UuCgkoc29ycnkpOiBMaWtld2lzZS4KCShyZWFsbHlfc29ycnkpOiBMaWtld2lzZS4KCgkqIHRvcGxldi5oOiBTd2l0Y2ggb24gQU5TSV9QUk9UT1RZUEVTLCBub3QgX19TVERDX18sIHdoZW4gZGVjaWRpbmcKCXdoZXRoZXIgdG8gZGVjbGFyZSBgdHJlZV9ub2RlJyBhbmQgYHJ0eF9kZWYnLgoKCSogdHJlZS5jIChidWlsZCk6IFN3aXRjaCBvbiBBTlNJX1BST1RPVFlQRVMsIG5vdCBfX1NURENfXywgd2hlbgoJZGVjaWRpbmcgd2hldGhlciB0byB1c2UgQU5TSSB2YXJpYWJsZSBhcmdzLgoJKGJ1aWxkX250KTogTGlrZXdpc2UuCgkoYnVpbGRfcGFyc2Vfbm9kZSk6IExpa2V3aXNlLgoKU3VuIE5vdiAgOCAxMzoxMDo1NSAxOTk4ICBKZWZmIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogdmVyc2lvbi5jOiBCdW1wIGZvciBzbmFwc2hvdC4KClNhdCBOb3YgIDcgMjM6MzQ6MDEgMTk5OCAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogTWFrZWZpbGUuaW4gKGxpYmNwcC5hKTogQ2hlY2sgUkFOTElCX1RFU1QgYmVmb3JlIHJ1bmluZyBSQU5MSUIuCgpTYXQgTm92ICA3IDIyOjI2OjE5IDE5OTggIERhdmlkIEVkZWxzb2huICA8ZWRlbHNvaG5AZ251Lm9yZz4KCgkqIGNvbGxlY3QyLmMgKG1haW4sIGNhc2UgJ2InKTogVXNlIGVsc2UgaWYuCgpTYXQgTm92ICA3IDE1OjM1OjI1IDE5OTggIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGNvbmZpZ3VyZS5pbiAoaG9zdF94bV9maWxlLCBidWlsZF94bV9maWxlLCB4bV9maWxlLCB0bV9maWxlKToKCUFycmFuZ2UgdG8gaW5jbHVkZSBnYW5zaWRlY2wuaCBpbiB7aHR9Y29uZmlnLmggJiB0bS5oIGp1c3QKCWJlZm9yZSB0aGUgY29uZmlnLyBkaXJlY3RvcnkgaGVhZGVycy4KCSh0bV9maWxlX2xpc3QsIGhvc3RfeG1fZmlsZV9saXN0LCBidWlsZF94bV9maWxlX2xpc3QpOiBIYW5kbGUKCWdhbnNpZGVjbC5oIGluIHRoZSBsaXN0IG9mIGRlcGVuZGVuY2llcy4KCgkqIE1ha2VmaWxlLmluIChSVExfQkFTRV9IKTogRG9uJ3QgZGVwZW5kIG9uIGdhbnNpZGVjbC5oLgoJKFRSRUVfSCwgREVNQU5HTEVfSCwgUkVDT0dfSCwgUkVHU19ILCBsaWJnY2MyLmEsIHN0bXAtbXVsdGlsaWIsCgltYmNoYXIubywgY29sbGVjdDIubywgcGV4ZWN1dGUubywgdmZwcmludGYubywgc3BsYXktdHJlZS5vLCBnY2MubywKCWdlbmNoZWNrLm8sIGNob29zZS10ZW1wLm8sIG1rc3RlbXAubywgbWtzdGVtcC5vLCBwcmVmaXgubywKCWR5bi1zdHJpbmcubywgY2V4cC5vLCBjY2NwLm8sIGNwcG1haW4ubywgY3BwbGliLm8sIGNwcGVycm9yLm8sCgljcHBleHAubywgY3BwZmlsZXMubywgY3BwaGFzaC5vLCBjcHBhbGxvYy5vLCBzY2FuLWRlY2xzLm8pOgoJTGlrZXdpc2UuCgoJKiBjY2NwLmM6IERvbid0IGluY2x1ZGUgZ2Fuc2lkZWNsLmguCgkqIGNleHAueTogTGlrZXdpc2UuCgkqIGNvbGxlY3QyLmM6IExpa2V3aXNlLgoJKiBjb25maWcvYzR4L2M0eC5jOiBMaWtld2lzZS4KCSogY29uZmlnL3Y4NTAvdjg1MC5oOiBMaWtld2lzZS4KCSogY3BwYWxsb2MuYzogTGlrZXdpc2UuCgkqIGNwcGVycm9yLmM6IExpa2V3aXNlLgoJKiBjcHBleHAuYzogTGlrZXdpc2UuCgkqIGNwcGZpbGVzLmM6IExpa2V3aXNlLgoJKiBjcHBoYXNoLmM6IExpa2V3aXNlLgoJKiBjcHBsaWIuYzogTGlrZXdpc2UuCgkqIGNwcG1haW4uYzogTGlrZXdpc2UuCgkqIGNwcHVscC5jOiBMaWtld2lzZS4KCSogZGVtYW5nbGUuaDogTGlrZXdpc2UuCgkqIGRvcHJpbnQuYzogTGlrZXdpc2UuCgkqIGR5bi1zdHJpbmcuYzogTGlrZXdpc2UuCgkqIGVoLWNvbW1vbi5oOiBMaWtld2lzZS4KCSogZml4LWhlYWRlci5jOiBMaWtld2lzZS4KCSogZnJhbWUuYzogTGlrZXdpc2UuCgkqIGdjYy5jOiBMaWtld2lzZS4KCSogZ2Nvdi5jOiBMaWtld2lzZS4KCSogZ2VuLXByb3Rvcy5jOiBMaWtld2lzZS4KCSogZ2VuY2hlY2suYzogTGlrZXdpc2UuCgkqIGhhbGZwaWMuaDogTGlrZXdpc2UuCgkqIGhhc2guYzogTGlrZXdpc2UuCgkqIG1hY2htb2RlLmg6IExpa2V3aXNlLgoJKiBtYmNoYXIuYzogTGlrZXdpc2UuCgkqIHByZWZpeC5jOiBMaWtld2lzZS4KCSogcHJvdG9pemUuYzogTGlrZXdpc2UuCgkqIHJlY29nLmg6IExpa2V3aXNlLgoJKiBydGwuaDogTGlrZXdpc2UuCgkqIHNjYW4tZGVjbHMuYzogTGlrZXdpc2UuCgkqIHRyZWUuaDogTGlrZXdpc2UuCgkqIHZhcnJheS5oOiBMaWtld2lzZS4KClNhdCBOb3YgIDcgMTE6Mzc6NTMgMTk5OCAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGkzODYubWQgKGNhbGxfdmFsdWVfcG9wKTogSWYgd2UncmUgbm90IHBvcHBpbmcgYW55dGhpbmcsCglkZWZlciB0byBjYWxsX3ZhbHVlLgoJKGNhbGxfcG9wKTogTGlrZXdpc2UgZGVmZXIgdG8gY2FsbC4KClNhdCBOb3YgIDcgMDI6NDk6NTYgMTk5OCAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGZ1bmN0aW9uLmMgKHB1cmdlX2FkZHJlc3NvZik6IENsZWFyIHB1cmdlX2FkZHJlc3NvZl9yZXBsYWNlbWVudHMKCW9ubHkgYWZ0ZXIgcHJvY2Vzc2luZyB0aGUgd2hvbGUgZnVuY3Rpb24uCgpTYXQgTm92ICA3IDAwOjU0OjU1IDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHJlbG9hZDEuYyAocmVsb2FkKTogSWYgd2UgY2FuIG5vdCBwZXJmb3JtIGEgcGFydGljdWxhciBlbGltaW5hdGlvbgoJd2hlbiB3ZSB0aG91Z2h0IHdlIGNvdWxkIGVhcmxpZXIsIHRoZW4gd2UgbXVzdCBhbHdheXMgaXRlcmF0ZSB0aHJvdWdoCgl0aGUgbG9vcCBhdCBsZWFzdCBvbmUgbW9yZSB0aW1lLgoKRnJpIE5vdiAgNiAxOTozNzozMyAxOTk4ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogYWxwaGEuYyAoYWRkX29wZXJhbmQpOiBTaW1wbGlmeSB0aGUgQ09OU1RfSU5UIG1hdGNoLgoJKHNleHRfYWRkX29wZXJhbmQpOiBDb3JyZWN0IHR5cG8gaW4gY29tcGFyaXNvbiBieSB1c2luZwoJQ09OU1RfT0tfRk9SX0xFVFRFUl9QLgoJKiBhbHBoYS5tZCAocz9hZGRxKTogVXNlIHNleHRfYWRkX29wZXJhbmQgdG8gYWxsb3cgdGhlIG5lZ2F0aXZlCgljb25zdGFudCBhbHRlcm5hdGl2ZXMgdG8gYmUgZ2VuZXJhdGVkLgoJKG11bHNpMywgbXVsZGkzLCB1bXVsZGkzX2hpZ2hwYXJ0KTogTG9vc2VuIGNvbnN0cmFpbnRzIHRvIGFsbG93CglzbWFsbCBjb25zdGFudHMsIHNpbmNlIHRoZSBodyBpbnN0cnVjdGlvbnMgZG8uCgpGcmkgTm92ICA2IDIwOjE1OjE5IDE5OTggIEJlcm5kIFNjaG1pZHQgIDxjcnV4QHBvb2wuaW5mb3JtYXRpay5yd3RoLWFhY2hlbi5kZT4KCgkqIHJlbG9hZDEuYyAoZW1pdF9yZWxvYWRfaW5zbnMpOiBXaGVuIHJld3JpdGluZyB0aGUgU0VUX0RFU1Qgb2YgYQoJcHJldmlvdXMgaW5zbiB0byBzdG9yZSBkaXJlY3RseSBpbnRvIG91ciByZWxvYWQgcmVnaXN0ZXIsIG1ha2Ugc3VyZQoJdGhhdCBpZiB0aGUgc291cmNlIG9mIHRoZSBwcmV2aW91cyBpbnNuIGlzIGEgcmVsb2FkIHJlZ2lzdGVyLCBpdHMKCXNwaWxsX3JlZ19zdG9yZSBhbmQgc3BpbGxfcmVnX3N0b3JlZF90byB2YWx1ZXMgYXJlIGNsZWFyZWQuCgpGcmkgTm92ICA2IDE2OjM1OjEwIDE5OTggIERhdmlkIEVkZWxzb2huICA8ZWRlbHNvaG5AZ251Lm9yZz4KCgkqIHJzNjAwMC5tZCAoZmxvYXR1bnNzaWRmMl9pbnRlcm5hbCBzcGxpdHRlcik6IFVzZSBiYXNlIHJlZ2lzdGVyCglvcGVyYW5kLCBub3QgaGFyZC1jb2RlZCBTUC4KCkZyaSBOb3YgIDYgMDQ6MDc6NTMgMTk5OCAgRGF2aWQgUy4gTWlsbGVyICA8ZGF2ZW1AcGllcmRvbC5jb2JhbHRtaWNyby5jb20+CgoJKiBqdW1wLmMgKGNhbGN1bGF0ZV9jYW5fcmVhY2hfZW5kKTogRml4IHRoaW5rby4KCkZyaSBOb3YgIDYgMDA6MTY6MDQgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogcmVvcmcuYyAoZmlsbF9zaW1wbGVfZGVsYXlfc2xvdHMpOiBGaXggdHlwby4KCgkqIHJvbXAuaCAoTEVHSVRJTUlaRV9BRERSRVNTKTogRml4IHR5cG8uCgpGcmkgTm92ICA2IDAwOjEwOjAwIDE5OTggIEphbiBIdWJpY2thICAoaHViaWNrYUBmcmVlc29mdC5jeikKCgkqIGkzODYubWQgKGV4dGVuZHNpZGkyKTogVXNlICMgaW4gdGhlIG91dHB1dCB0ZW1wbGF0ZS4KCShleHRlbmRzaWRpIHNwbGl0dGVycyk6IE5ldyBzcGxpdHRlcnMuCgpUaHUgTm92ICA1IDExOjEzOjI3IDE5OTggIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQGN5Z251cy5jb20+CgoJKiBjb25maWd1cmUuaW46IFVzZSB1bmtub3duLWVsZi5oIGFzIHRtX2ZpbGUgZm9yIGFybS1lbGYKCWNvbmZpZ3VyYXRpb25zLgoJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCgpUaHUgTm92ICA1IDA3OjU5OjA1IDE5OTggIERhdmlkIFMuIE1pbGxlciAgPGRhdmVtQHBpZXJkb2wuY29iYWx0bWljcm8uY29tPgoKCSoganVtcC5jIChpbml0X2xhYmVsX2luZm8sIGRlbGV0ZV9iYXJyaWVyX3N1Y2Nlc3NvcnMsCgltYXJrX2FsbF9sYWJlbHMsIGRlbGV0ZV91bnJlZmVyZW5jZWRfbGFiZWxzLAoJZGVsZXRlX25vb3BfbW92ZXMsIGNhbGN1bGF0ZV9jYW5fcmVhY2hfZW5kKTogTmV3IGZ1bmN0aW9ucyBicm9rZW4KCW91dCBvZiBqdW1wX29wdGltaXplLgoJKGp1bXBfb3B0aW1pemUpOiBVc2UgdGhlbS4KClRodSBOb3YgIDUgMDc6NTc6NDUgMTk5OCAgQW5kcmV3IE1hY0xlb2QgIDxhbWFjbGVvZEBjeWdudXMuY29tPgoKCSogZXhjZXB0LmMgKGV4cGFuZF9maXh1cF9yZWdpb25fZW5kKTogTWFrZSBzdXJlIG91dGVyIGNvbnRleHQgbGFiZWxzCglhcmUgbm90IGlzc3VlZCBpbiBhbiBpbm5lciBjb250ZXh0IGR1cmluZyBjbGVhbnVwcy4KClRodSBOb3YgIDUgMDQ6MDM6MDYgMTk5OCAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGFscGhhLm1kIChhZGRzaTMsIHN1YnNpMyk6IE5vIG5ldyB0ZW1wb3JhcmllcyBvbmNlIGNzZSBpcwoJbm8gbG9uZ2VyIGV4cGVjdGVkLgoKVGh1IE5vdiAgNSAwMzoyOToxOSAxOTk4ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogYWxwaGEubWQgKGFkZHNpMywgc3Vic2kzKTogRXhwYW5kIHRvIGEgREltb2RlIHRlbXBvcmFyeSBzbyBhcwoJdG8gZXhwb3NlIHRoaXMgbWlkcG9pbnQgdG8gQ1NFLgoKVGh1IE5vdiAgNSAwMzo0Mjo1NCAxOTk4ICBEYXZpZCBTLiBNaWxsZXIgIDxkYXZlbUBwaWVyZG9sLmNvYmFsdG1pY3JvLmNvbT4KCgkqIGNvbmZpZy9zcGFyYy9zcGFyYy5tZCAobW92ZGZfY29uc3RfaW50cmVnX3NwNjQpOiBFbmFibGUgYWdhaW4uCgpUaHUgTm92ICA1IDEwOjUzOjAxIDE5OTggIEFuZHJlYXMgU2Nod2FiICA8c2Nod2FiQGlzc2FuLmNzLnVuaS1kb3J0bXVuZC5kZT4KCgkqIGNvbmZpZ3VyZS5pbjogQnJpbmcgb3ZlciBnY2MyIGNoYW5nZSBvZiBOb3YgMTkgMTk5Ny4KCldlZCBOb3YgIDQgMjM6NDM6MDggMTk5OCAgR3JhaGFtICA8Z3JhaGFtc0ByY3AuY28udWs+CgoJKiB0b3BsZXYuYyAob3V0cHV0X2xhbmdfaWRlbnRpZnkpOiBNYWtlIGRlZmluaXRpb24gZGVwZW5kZW50IG9uCglBU01fSURFTlRJRllfTEFOR1VBR0UuCgoJKiBwcmludC1ydGwuYyAoc3BhY2VzKTogTWFrZSBzdGF0aWMuCgpXZWQgTm92ICA0IDIyOjE2OjM2IDE5OTggIEhhbnMtUGV0ZXIgTmlsc3NvbiAgPGhwQGF4aXMuc2U+CgoJKiBleHRlbmQudGV4aTogQ2xhcmlmeSBwcm9wZXIgdXNlcyBmb3IgcmVnaXN0ZXIgY2xvYmJlcnMgaW4gYXNtcy4KCldlZCBOb3YgIDQgMjI6MTY6MzYgMTk5OCAgQmVybmQgU2NobWlkdCAgPGNydXhAcG9vbC5pbmZvcm1hdGlrLnJ3dGgtYWFjaGVuLmRlPgoKCSogcmVjb2cuaCAoZW51bSBvcF90eXBlKTogRGVmaW5lLgoJKGNvbnN0cmFpbl9vcGVyYW5kcyk6IEFkanVzdCBwcm90b3R5cGUuCgkocmVjb2dfb3BfdHlwZSk6IERlY2xhcmUgbmV3IHZhcmlhYmxlLgoJKiByZWNvZy5jIChyZWNvZ19vcF90eXBlKTogTmV3IHZhcmlhYmxlLgoJKGluc25faW52YWxpZF9wKTogQWxsb3cgbW9kaWZ5aW5nIGFuIGFzbSBzdGF0ZW1lbnQgYWZ0ZXIgcmVsb2FkLgoJKGV4dHJhY3RfaW5zbik6IFNldCB1cCByZWNvZ19vcF90eXBlLgoJKGNvbnN0cmFpbl9vcGVyYW5kcyk6IExvc2UgSU5TTl9DT0RFX05VTSBhcmcuICBBbGwgY2FsbGVycyBjaGFuZ2VkLgoJRG9uJ3QgY29tcHV0ZSBvcGVyYW5kIHR5cGVzLCB1c2UgcmVjb2dfb3BfdHlwZS4KCVVzZSB0aGUgaW5mb3JtYXRpb24gY29tcHV0ZWQgYnkgZXh0cmFjdF9pbnNuIGluc3RlYWQgb2YgdGhlIHByZXZpb3VzCgltZXRob2Qgb2YgZmluZGluZyBpdCBieSBpbnNuIGNvZGUgbnVtYmVyLgoJKiBjYWxsZXItc2F2ZS5jIChpbml0X2NhbGxlcl9zYXZlKTogVXNlIGV4dHJhY3RfaW5zbiwgbm90IGluc25fZXh0cmFjdC4KCSogcmVvcmcuYyAoZmlsbF9zbG90c19mcm9tX3RocmVhZCk6IExpa2V3aXNlLgoJKiByZWxvYWQxLmMgKHJlbG9hZF9hc19uZWVkZWQpOiBMaWtld2lzZS4KCShnZW5fcmVsb2FkKTogTGlrZXdpc2UuCgkoaW5jX2Zvcl9yZWxvYWQpOiBMaWtld2lzZS4KCShyZWxvYWRfY3NlX3NpbXBsaWZ5X29wZXJhbmRzKTogTGlrZXdpc2UuCglVc2UgdGhlIGluZm9ybWF0aW9uIGNvbXB1dGVkIGJ5IGV4dHJhY3RfaW5zbiBpbnN0ZWFkIG9mIHRoZSBwcmV2aW91cwoJbWV0aG9kIG9mIGZpbmRpbmcgaXQgYnkgaW5zbiBjb2RlIG51bWJlci4KCSogZ2VuYXR0cnRhYi5jICh3cml0ZV9hdHRyX2Nhc2UpOiBHZW5lcmF0ZSBjYWxsIHRvIGV4dHJhY3RfaW5zbiwgbm90CglpbnNuX2V4dHJhY3QuCgkqIGZpbmFsLmMgKGZpbmFsX3NjYW5faW5zbik6IFVzZSBleHRyYWN0X2luc24sIG5vdCBpbnNuX2V4dHJhY3QuCgkoY2xlYW51cF9vcGVyYW5kX3N1YnJlZ3MpOiBVc2UgZXh0cmFjdF9pbnNuLCBub3QgaW5zbl9leHRyYWN0LgoJVXNlIHRoZSBpbmZvcm1hdGlvbiBjb21wdXRlZCBieSBleHRyYWN0X2luc24gaW5zdGVhZCBvZiB0aGUgcHJldmlvdXMKCW1ldGhvZCBvZiBmaW5kaW5nIGl0IGJ5IGluc24gY29kZSBudW1iZXIuCgkqIHJlZ21vdmUuYyAoZmluZF9tYXRjaGVzKTogTGlrZXdpc2UuICBDaGFuZ2UgbWVhbmluZyBvZiB0aGUgcmV0dXJuCgl2YWx1ZSB0byBiZSBub256ZXJvIGlmIHRoZSBvcHRpbWl6YXRpb24gY2FuIGJlIHBlcmZvcm1lZCwgemVybyBpZgoJbm90LiAgQWxsIGNhbGxlcnMgY2hhbmdlZC4KCVNob3J0ZW4gc29tZSB2YXJpYWJsZSBuYW1lcyB0byBmaXggZm9ybWF0dGluZyBwcm9ibGVtcy4KCShyZWdtb3ZlX29wdGltaXplKTogU2hvcnRlbiBzb21lIHZhcmlhYmxlIG5hbWVzIHRvIGZpeCBmb3JtYXR0aW5nCglwcm9ibGVtcy4KCVVzZSB0aGUgaW5mb3JtYXRpb24gY29tcHV0ZWQgYnkgZXh0cmFjdF9pbnNuIGluc3RlYWQgb2YgdGhlIHByZXZpb3VzCgltZXRob2Qgb2YgZmluZGluZyBpdCBieSBpbnNuIGNvZGUgbnVtYmVyLgoJKiByZWdjbGFzcy5jIChzY2FuX29uZV9pbnNuKTogTGlrZXdpc2UuCgkocmVjb3JkX3JlZ19jbGFzc2VzKTogRG9uJ3QgY29tcHV0ZSBvcGVyYW5kIHR5cGVzLCB1c2UgcmVjb2dfb3BfdHlwZS4KCSogcmVsb2FkLmMgKGZpbmRfcmVsb2Fkcyk6IExvc2UgQ09OU1RSQUlOVFMxIHZhcmlhYmxlOyB1c2UKCXJlY29nX2NvbnN0cmFpbnRzIGluc3RlYWQuCgpXZWQgTm92ICA0IDIxOjM3OjQ2IDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHJ0bC5oIChmbG93Ml9jb21wbGV0ZWQpOiBEZWNsYXJlLgoJKiBmbG93LmMgKGZsb3cyX2NvbXBsZXRlZCk6IERlZmluaXRpb24uCgkqIHRvcGxldi5jIChyZXN0X29mX2NvbXBpbGF0aW9uKTogU2V0IGFuZCBjbGVhciBmbG93Ml9jb21wbGV0ZWQKCWFzIG5lY2Vzc2FyeS4KCldlZCBOb3YgIDQgMTk6MTU6MzcgMTk5OCAgTWVsaXNzYSBPJ05laWxsICA8b25laWxsQGNzLnNmdS5jYT4KCgkqIE1ha2VmaWxlLmluIChsaWJjcHAuYSk6IFJhbmxpYiBsaWJjcHAuYS4KCgkqIGNwcHVscC5jICh1c2VyX2xhYmVsX3ByZWZpeCk6IEluaXRpYWxpemUuCgpXZWQgTm92ICA0IDE5OjA3OjA4IDE5OTggIEpvaG4gV2VobGUgIChqb2huQGZlaXRoLmNvbSkKCgkqIGZsb3cuYyAobWFya19yZWdzX2xpdmVfYXRfZW5kKTogTWFyayB0aGUgc3RhY2sgcG9pbnRlciBhcyBsaXZlCglhdCBhIFJFVFVSTiBpZiBjdXJyZW50X2Z1bmN0aW9uX3NwX2lzX3VuY2hhbmdpbmcgaXMgc2V0LgoKV2VkIE5vdiAgNCAxODoxNjoyOSAxOTk4ICBIZXJtYW4gQS5KLiB0ZW4gQnJ1Z2dlICA8SGFqLlRlbi5CcnVnZ2VAbmV0LkhDQy5ubD4KCgkqIGVtaXQtcnRsLmMgKHRyeV9zcGxpdCk6IEZpeGVkIGVycm9yIGluIE9jdCAxMCBwYXRjaC4KCldlZCBOb3YgIDQgMTU6MTE6MTUgMTk5OCAgR2VvZmZyZXkgTm9lciAgPG5vZXJAY3lnbnVzLmNvbT4KCgkqIGkzODYvY3lnd2luMzIuaCAoTUFTS19XSU4zMiwgTUFTS19DWUdXSU4sIE1BU0tfV0lORE9XUywgTUFTS19ETEwsCglUQVJHRVRfV0lOMzIsIFRBUkdFVF9DWUdXSU4sIFRBUkdFVF9XSU5ET1dTLCBUQVJHRVRfRExMKTogTmV3LgoJKFNVQlRBUkdFVF9TV0lUQ0hFUyk6IEFkZCAtbW5vLWN5Z3dpbiwgLW1jeWd3aW4sIGFuZCAtbWRsbCBvcHRpb25zLgoJKENQUF9QUkVERUZJTkVTKTogRG9uJ3QgZGVmaW5lIF9fQ1lHV0lOMzJfXyBoZXJlLgoJKFNUQVJURklMRV9TUEVDKTogSGFuZGxlIC1tZGxsLCAtbW5vLWN5Z3dpbiBvcHRpb25zLgoJKENQUF9TUEVDKTogSGFuZGxlIC1tbm8tY3lnd2luIG9wdGlvbi4gIERlZmluZSBfX0NZV0lOX18gaW4gYWRkaXRpb24KCXRvIF9fQ1lHV0lOMzJfXy4KCShMSUJfU1BFQyk6IEhhbmRsZSAtbW5vLWN5Z3dpbiBvcHRpb24uCgkoTElOS19TUEVDKTogSGFuZGxlIC1tZGxsLgoKV2VkIE5vdiAgNCAyMjo1NjoxNCAxOTk4ICBKIm9ybiBSZW5uZWNrZSAgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogcmVsb2FkLmMgKGZpbmRfcmVsb2Fkcyk6IEZpeCB0ZXN0IGZvciB1c2FnZSBieSBvdGhlciByZWxvYWQKCXRvIGhhbmRsZSBzZWNvbmRhcnkgcmVsb2FkcyBwcm9wZXJseS4KCldlZCBOb3YgIDQgMTc6MjU6MTAgMTk5OCAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogcmVsb2FkMS5jIChFTElNSU5BQkxFX1JFR1MsIE5VTV9FTElNSU5BQkxFX1JFR1MpOiBJbnRyb2R1Y2UgYW4KCWludGVybWVkaWF0ZSBzdHJ1Y3R1cmUgd2hpY2ggaGFzIGV4YWN0bHkgdGhlIG1lbWJlcnMgcHJvdmlkZWQgYnkKCUVMSU1JTkFCTEVfUkVHUy4gIERlZmluZSBOVU1fRUxJTUlOQUJMRV9SRUdTIGluIHRlcm1zIG9mIHRoZQoJc3RhdGljIGludGVybWVkaWF0ZSBzdHJ1Y3R1cmUuCgoJKGluaXRfZWxpbV90YWJsZSk6IFhtYWxsb2MoKSBgcmVnX2VsaW1pbmF0ZScsIGFuZCBpbml0aWFsaXplIGl0Cglmcm9tIHRoZSBpbnRlcm1lZGlhdGUgc3RydWN0dXJlLiAgRG8gdGhlIHNhbWUgYW5hbG9nb3VzIGZpeCBpbgoJdGhlIGNhc2Ugd2hlcmUgRUxJTUlOQUJMRV9SRUdTIGlzIG5vdCBkZWZpbmVkLgoKVHVlIE5vdiAgMyAyMDo1MDowMyAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBwYS5oIChTRUxFQ1RfU0VDVElPTik6IEZpeCB0aGlua28uCgpUdWUgTm92ICAzIDE3OjUxOjM2IDE5OTggIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KCgkqIGR3YXJmMm91dC5jIChvdXRwdXRfY2FsbF9mcmFtZV9pbmZvKTogQ29tbWVudHMgb24gbGFzdCBjaGFuZ2UuCgpUdWUgTm92ICAzIDA3OjUxOjQzIDE5OTggIFJpY2hhcmQgRWFybnNoYXcgIChyZWFybnNoYUBhcm0uY29tKQoKCSogYXJtLmMgKGFkZF9jb25zdGFudCk6IFdoZW4gdGFraW5nIHRoZSBhZGRyZXNzIG9mIGFuIGl0ZW0gaW4gdGhlCglwb29sLCBnZXQgdGhlIG1vZGUgb2YgdGhlIGl0ZW0gYWRkcmVzc2VkLgoKCSogYXJtLmMgKGZpbmFsX3ByZXNjYW5faW5zbiBjYXNlIElOU04pOiBJZiBhbiBpbnNuIGRvZXNuJ3QKCWNvbnRhaW4gYSBTRVQgb3IgYSBQQVJBTExFTCwgZG9uJ3QgY29uc2lkZXIgaXQgZm9yIGNvbmRpdGlvbmFsCglleGVjdXRpb24uCgoJUmVzdG9yZSBBQkkgY29tcGF0aWJpbGl0eSBmb3IgTmV0QlNELgoJKiBhcm0vbmV0YnNkLmggKERFRkFVTFRfUENDX1NUUlVDVF9SRVRVUk4pOiBPdmVycmlkZSBzZXR0aW5nIGluCglhcm0uaC4KCShSRVRVUk5fSU5fTUVNT1JZKTogTGlrZXdpc2UuCgpNb24gTm92ICAyIDExOjQ2OjE3IDE5OTggIERvdWcgRXZhbnMgIDxkZXZhbnNAY2FudWNrLmN5Z251cy5jb20+CgoJKiBtMzJyL20zMnIuYyAobTMycl9leHBhbmRfYmxvY2tfbW92ZSk6IEZpeCBieXRlIGNvdW50IGNvbXB1dGF0aW9ucy4KCShtMzJyX291dHB1dF9ibG9ja19tb3ZlKTogUmV3cml0ZSBieXRlcyA8IDQgaGFuZGxpbmcuCgpNb24gTm92ICAyIDEwOjEwOjM1IDE5OTggIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGNvbmZpZ3VyZS5pbjogQ2FsbCBBQ19GVU5DX1ZGT1JLLgoKCSogY29sbGVjdDIuYzogRGVmaW5lIFZGT1JLX1NUUklORyBhcyBhIHByaW50YWJsZSBzdHJpbmcgZm9yCgllcnJvciBtZXNzYWdlcyAoZWl0aGVyICJ2Zm9yayIgb3IgImZvcmsiLikgIElmIEhBVkVfVkZPUktfSCBpcwoJZGVmaW5lZCwgaW5jbHVkZSB2Zm9yay5oLiAgSWYgVk1TIGlzIGRlZmluZWQsIGRlZmluZSB2Zm9yaygpCglhcHByb3ByaWF0ZWx5LiAgUmVtb3ZlIHZmb3JrIGNoZWNrIG9uIFVTRywgd2UncmUgdXNpbmcgYXV0b2NvbmYuCgkoY29sbGVjdF9leGVjdXRlKTogUGFzcyBWRk9SS19TVFJJTkcgdG8gZmF0YWxfcGVycm9yIGluc3RlYWQgb2YKCWNoZWNraW5nIGxvY2FsbHkgd2hhdCBzdHJpbmcgdG8gcGFzcy4KCShzY2FuX3Byb2dfZmlsZSk6IExpa2V3aXNlLgoJKHNjYW5fbGlicmFyaWVzKTogTGlrZXdpc2UuCgoJKiBnY2MuYzogUmVtb3ZlIHZmb3JrIGNoZWNrIG9uIFVTRywgd2UncmUgdXNpbmcgYXV0b2NvbmYuCglCZXNpZGVzLCBubyBjYWxscyB0byB2Zm9yay9mb3JrIG9jY3VyIGluIHRoaXMgZmlsZS4KCgkqIHByb3RvaXplLmM6IExpa2V3aXNlLgoKTW9uIE5vdiAgMiAwNzo1MjoyOCAxOTk4ICBBbGV4YW5kcmUgT2xpdmEgIDxvbGl2YUBkY2MudW5pY2FtcC5icj4KCgkqIGNvbmZpZ3VyZS5pbiAoREVGQVVMVF9MSU5LRVIpOiBSZW5hbWVkIGZyb20gTEQuCgkoREVGQVVMVF9BU1NFTUJMRVIpOiBSZW5hbWVkIGZyb20gQVM7IHJldmVydGVkIFNjaHdhYidzIHBhdGNoLgoJKGdjY19jdl9hcyk6IFRyeSAkREVGQVVMVF9BU1NFTUJMRVIgYmVmb3JlICRBUy4KCSogY29uZmlndXJlOiBSZWJ1aWx0LgoKTW9uIE5vdiAgMiAwMTo0ODoxMCAxOTk4ICBBbGV4YW5kcmUgT2xpdmEgIDxvbGl2YUBkY2MudW5pY2FtcC5icj4KCgkqIEJVR1M6IEZpeCB0aGUgcmVnZXhwIGZvciBgbW9yZScgdG8gZmluZCB0aGUgYXBwcm9wcmlhdGUgbm9kZS4KCVJlcG9ydGVkIGJ5IEpvZXJnIFBpZXRzY2htYW5uICA8am9lcmdfcGlldHNjaG1hbm5AemtiLmNoPgoKCSogQlVHUzogQWRkZWQgbGluayB0byB0aGUgV1dXIEZBUS4KClN1biBOb3YgIDEgMTg6Mjc6MTUgMTk5OCAgSmVmZiBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHZlcnNpb24uYzogQnVtcCBmb3Igc25hcHNob3QuCgpTdW4gTm92ICAxIDExOjA0OjMyIDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIEZyb20gQ2hyaXN0aWFuIEdhZnRvbjoKCSogaTM4Ni9saW51eC5oIChDUFBfUFJFREVGSU5FUyk6IEFkZCAtRF9faTM4Nl9fLgoJKiBzcGFyYy9saW51eC5oIChDUFBfUFJFREVGSU5FUyk6IEFkZCAtRF9fc3BhcmNfXy4KCSogc3BhcmMvbGludXg2NC5oIChDUFBfUFJFREVGSU5FUyk6IEFkZCAtRF9fc3BhcmNfXy4KClNhdCBPY3QgMzEgMjE6NDI6MzkgMTk5OCAgTWFyayBNaXRjaGVsbCAgPG1hcmtAbWFya21pdGNoZWxsLmNvbT4KCgkqIGMtY29tbW9uLmMgKGNfZ2V0X2FsaWFzX3NldCk6IEFsbG93IGFsbCB0eXBlLXB1bm5pbmcgdGhyb3VnaAoJdW5pb25zLiAgRG9uJ3QgZ2V0IGNvbmZ1c2VkIGFib3V0IHRoZSB0eXBlIG9mIGEgYml0LWZpZWxkLCBkZXNwaXRlCgl0aGUgYW50aWNzIG9mIGJ1aWxkX21vZGlmeV9leHByLgoKU2F0IE9jdCAzMSAyMjozNToyOSAxOTk4ICBKZWFuLVBpZXJyZSBSYWRsZXkgIDxqcHJAanByLmNvbT4KCgkqIGZpeGluYy5zY286IFBhcmFtZXRlcml6ZSAjaW5jbHVkZV9uZXh0IHZhbHVlcy4KCSogZml4aW5jL2ZpeGluYy5zY286IExpa2V3aXNlLgoKU2F0IE9jdCAzMSAyMDozOTozNSAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiB0b3BsZXYuYyAocmVzdF9vZl9jb21waWxhdGlvbik6IE5vIGxvbmdlciBzZXQgcmVsb2FkX2NvbXBsZXRlZC4KCSogcmVsb2FkMS5jIChyZWxvYWQpOiBTZXQgaXQgaGVyZS4gIFBlcmZvcm0gaW5zdHJ1Y3Rpb24gc3BsaXR0aW5nCglhZnRlciByZWxvYWQgaGFzIGNvbXBsZXRlZCBpZiB3ZSB3aWxsIGJlIHJ1bm5pbmcgdGhlIHNjaGVkdWxlcgoJYWdhaW4uCgpTYXQgT2N0IDMxIDEyOjMwOjAyIDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGp1bXAuYyAoanVtcF9vcHRpbWl6ZSk6IEluaXRpYWxpemUgbWFwcGluZ3MgZnJvbSBJTlNOX1VJRCB0bwoJRUggcmVnaW9uIGlmIGV4Y2VwdGlvbnMgYXJlIGVuYWJsZWQgYW5kIHdlJ3JlIHBlcmZvcm1pbmcgY3Jvc3MKCWp1bXAgb3B0aW1pemF0aW9ucy4KCShmaW5kX2Nyb3NzX2p1bXApOiBFeGl0IGxvb3AgaWYgdGhlIGluc25zIGFyZSBpbiBkaWZmZXJlbnQgRUggcmVnaW9ucy4KClNhdCBPY3QgMzEgMTA6MDI6NDggMTk5OCAgTWFyayBNaXRjaGVsbCAgPG1hcmtAbWFya21pdGNoZWxsLmNvbT4KCgkqIGR3YXJmMm91dC5jIChvdXRwdXRfY2FsbF9mcmFtZV9pbmZvKTogVXNlCglBU01fT1VUUFVUX0RXQVJGX0RFTFRBNCBmb3IgdGhlIENJRSBvZmZzZXQgdG8gbWF0Y2ggZnJhbWUuYy4KClNhdCBPY3QgMzEgMTA6MjM6MTQgMTk5OCAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCVJlaW5zdGFsbCBBcHIgMjR0aCBmaXgsIGxvc3QgZHVyaW5nIE1heSA2dGggZ2NjMiBtZXJnZToKCSogYy1jb21tb24uYyAoY2hlY2tfZm9ybWF0X2luZm8pOiBEb24ndCBjaGVjayBmb3IgdGhlICd4JwoJZm9ybWF0IGNoYXJhY3RlciB0d2ljZSwgaW5zdGVhZCBjaGVjayBmb3IgJ3gnIGFuZCAnWCcKCkZyaSBPY3QgMzAgMTQ6NTA6MjUgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogY29uZmlndXJlLmluIChhc3NlbWJsZXIgZmVhdHVyZXMpOiBBbHNvIG1ha2UgZ2FzIGlzIGNvbmZpZ3VyZWQgaWYKCXdlIGZpbmQgaXQgaW4gdGhlIHNvdXJjZSB0cmVlLgoKRnJpIE9jdCAzMCAxMzoyMzoyMCAxOTk4ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogaTM4Ni5jIChpMzg2X2NvbXBfdHlwZV9hdHRyaWJ1dGVzKTogQ29tcGFyZSB3aGV0aGVyIHRoZQoJYXR0cmlidXRlcyBhcmUgZGVmaW5lZCwgbm90IHRoZWlyIHRyZWUgbm9kZXMuCgpGcmkgT2N0IDMwIDExOjM5OjQ3IDE5OTggIEFsZXhhbmRyZSBPbGl2YSAgPG9saXZhQGRjYy51bmljYW1wLmJyPgoKCSogY29uZmlndXJlLmluIChneHhfaW5jbHVkZV9kaXIpOiBCaXR0ZW4gYnkgYXV0b2NvbmYgcXVvdGluZwoJY2hhcmFjdGVycy4gIDotKAoJKiBjb25maWd1cmU6IFJlYnVpbHQuCgpGcmkgT2N0IDMwIDEwOjQzOjI5IDE5OTggIEFuZHJlYXMgU2Nod2FiICA8c2Nod2FiQGlzc2FuLmNzLnVuaS1kb3J0bXVuZC5kZT4KCgkqIGNvbmZpZ3VyZS5pbjogSWdub3JlIG5vbi1hYnNvbHV0ZSB2YWx1ZSBpbiAkQVMuCgpGcmkgT2N0IDMwIDAwOjU0OjI1IDE5OTggIFBldGVyIEpha3ViZWsgIDxwamFrQHNuYWZ1LmRlPgoKCSogbTY4ay5oIChJTkRJUkVDVEFCTEVfMV9BRERSRVNTX1ApOiBGaXggdGhpbmtvLgoKRnJpIE9jdCAzMCAwMDo0MjozNCAxOTk4ICBNYXJrIEVsYnJlY2h0ICA8c25vd2JhbGwzQHVzYS5uZXQ+CgoJKiBjb25maWd1cmUuaW4gKG1zZG9zZGpncHApOiBTZXQgZXhlZXh0IGFuZCB0YXJnZXRfYWxpYXMuCgpUaHUgT2N0IDI5IDIzOjU1OjQzIDE5OTggIEJlcm5kIFNjaG1pZHQgIDxjcnV4QHBvb2wuaW5mb3JtYXRpay5yd3RoLWFhY2hlbi5kZT4KCgkqIGZsb3cuYyAoWE5NQUxMT0MpOiBOZXcgbWFjcm8uCgkoZmxvd19pbnRfbGlzdF9ibG9ja3MsIGJhc2ljX2Jsb2NrX3N1Y2MsIGJhc2ljX2Jsb2NrX3ByZWQpOiBOZXcKCXN0YXRpYyB2YXJpYWJsZXMuCgkoYWRkX2VkZ2UsIGFkZF9lZGdlX3RvX2xhYmVsKTogTmV3IHN0YXRpYyBmdW5jdGlvbnMuCgkoZnJlZV9iYl9tZW1vcnkpOiBOZXcgZnVuY3Rpb24uCgkoZmxvd19kZWxldGVfaW5zbik6IERlbGV0ZSBmdW5jdGlvbi4KCShiYXNpY19ibG9ja19kcm9wc19pbik6IERlbGV0ZSB2YXJpYWJsZS4KCShmaW5kX2Jhc2ljX2Jsb2Nrcyk6IEFsbG9jYXRlIGFuZCBpbml0aWFsaXplIGJhc2ljX2Jsb2NrX2hlYWQsCgliYXNpY19ibG9ja19zdWNjLiAgRG9uJ3QgYWxsb2NhdGUgYmFzaWNfYmxvY2tfZHJvcHNfaW4uCglDYWxsIGZyZWVfYmJfbWVtb3J5IGF0IHRoZSBiZWdpbm5pbmcuCgkoZmluZF9iYXNpY19ibG9ja3NfMSk6IERvbid0IGRvIG11bHRpcGxlIHBhc3Nlcy4KCURlbGV0ZSBjb2RlIHRvIGNvbXB1dGUgYmFzaWNfYmxvY2tfZHJvcHNfaW4uCglBZnRlciBjYWxsaW5nIG1ha2VfZWRnZXMsIG1hcmsgYmxvY2tzIHJlYWNoZWQgYnkgY3VycmVudCBibG9jayBsaXZlLgoJVXBkYXRlIHRlc3QgZm9yIHVucmVhY2hhYmxlIGxpdmUgYmxvY2tzLgoJKG1hcmtfbGFiZWxfcmVmKTogRGVsZXRlIGFyZ3MgWCwgQ0hFQ0tEVVAuICBBZGQgUFJFRCBhcmcuICBBbGwgY2FsbGVycwoJY2hhbmdlZC4KCVNpbXBsaWZ5IHRvIGNhbGwgYWRkX2VkZ2VfdG9fbGFiZWwgd2hlbiBhIExBQkVMX1JFRiBpcyBmb3VuZC4KCShtYWtlX2VkZ2VzKTogU2ltcGxpZnkgdG8gY2FsbCBhZGRfZWRnZV90b19sYWJlbCBpbnN0ZWFkIG9mCgltYXJrX2xhYmVsX3JlZiBtb3N0IG9mIHRoZSB0aW1lLgoJQ29tcHV0ZSBoZXJlIHdoZXRoZXIgY29udHJvbCBkcm9wcyBpbnRvIHRoZSBuZXh0IGJsb2NrLgoJKGRlbGV0ZV91bnJlYWNoYWJsZV9ibG9ja3MpOiBSZXR1cm4gdm9pZC4gIEFsbCBjYWxsZXJzIGNoYW5nZWQuCglEZWxldGUgdW5yZWFjaGFibGUgYmxvY2tzIGluIHJldmVyc2Ugb3JkZXIuCglBZnRlciBkZWxldGluZyBhbGwgdW5yZWFjaGFibGUgYmxvY2tzLCByZW51bWJlciB0aGUgcmVtYWluaW5nIG9uZXMKCWFuZCB1cGRhdGUgbl9iYXNpY19ibG9ja3MuCgkoZGVsZXRlX2Jsb2NrKTogU3BlZWQgdXAgZGVsZXRpb24gYSBiaXQuCglEb24ndCBzZXQgYmFzaWNfYmxvY2tfZHJvcHNfaW4gZm9yIGRlbGV0ZWQgYmxvY2tzLgoJKGZyZWVfYmFzaWNfYmxvY2tfdmFycyk6IERvbid0IGZyZWUgYmFzaWNfYmxvY2tfZHJvcHNfaW4uCgkobGlmZV9hbmFseXNpc18xKTogVXBkYXRlIHRvIHVzZSBuZXcgZWRnZSByZXByZXNlbnRhdGlvbi4KCShkdW1wX2Zsb3dfaW5mbyk6IERlbGV0ZSBjb2RlIHRvIHByaW50IGJhc2ljIGJsb2NrIGluZm87IGNhbGwKCWR1bXBfYmJfZGF0YSBpbnN0ZWFkLgoJKGNvbXB1dGVfcHJlZHNfc3VjY3MpOiBEZWxldGUgY29kZSB0byByZWNvbXB1dGUgYmFzaWNfYmxvY2tfZHJvcHNfaW4KCWFuZCB1aWRfYmxvY2tfbnVtYmVyLgoJU2ltcGx5IGNvcHkgdGhlIHByZXZpb3VzbHkgY29tcHV0ZWQgY2ZnLgoJKGR1bXBfYmJfZGF0YSk6IE5ldyBhcmcgTElWRV9JTkZPLiAgQWxsIGNhbGxlcnMgY2hhbmdlZC4KCVByaW50IHJlZ2lzdGVyIGxpZmV0aW1lIGluZm9ybWF0aW9uIGlmIExJVkVfSU5GTyBpcyBub256ZXJvLgoJKiBiYXNpYy1ibG9jay5oIChkdW1wX2JiX2RhdGEpOiBBZGp1c3QgcHJvdG90eXBlLgoJKiBnY3NlLmMgKGdjc2VfbWFpbik6IFVwZGF0ZSBjYWxsIHRvIGR1bXBfYmJfZGF0YS4KCSogcnRsLmggKGZyZWVfYmJfbWVtb3J5KTogRGVjbGFyZS4KCSogdG9wbGV2LmMgKHJlc3Rfb2ZfY29tcGlsYXRpb24pOiBDYWxsIGZyZWVfYmJfbWVtb3J5LgoKCSogcmVsb2FkMS5jIChzdHJ1Y3QgZWxpbV90YWJsZSk6IERlbGV0ZSBNQVhfT0ZGU0VUIG1lbWJlci4KCSh1cGRhdGVfZWxpbWluYWJsZV9vZmZzZXRzKTogRG9uJ3QgY29tcHV0ZSBpdC4KCShzZXRfaW5pdGlhbF9lbGltX29mZnNldHMpOiBEb24ndCBpbml0aWFsaXplIGl0LgoJQnJlYWsgb3V0IHNvbWUgY29kZSBpbnRvIHNldF9pbml0aWFsX2xhYmVsX29mZnNldHMgc28gdGhlIHJlc3Qgb2YKCXRoaXMgZnVuY3Rpb24gY2FuIGJlIGNhbGxlZCBmcm9tIHJlbG9hZF9hc19uZWVkZWQuCglBc3N1bWUgdGhhdCBJTklUSUFMX0ZSQU1FX1BPSU5URVJfT0ZGU0VUIGlzIGRlZmluZWQgd2hlbgoJRUxJTUlOQUJMRV9SRUdTIGlzbid0LgoJKHNldF9pbml0aWFsX2xhYmVsX29mZnNldHMpOiBOZXcgZnVuY3Rpb24sIGJyb2tlbiBvdXQgb2YKCXNldF9pbml0aWFsX2VsaW1fb2Zmc2V0cy4KCShzZXRfb2Zmc2V0c19mb3JfbGFiZWwpOiBOZXcgZnVuY3Rpb24sIGJyb2tlbiBvdXQgb2Ygc2V0X2xhYmVsX29mZnNldHMKCWFuZCByZWxvYWRfYXNfbmVlZGVkLgoJKHJlbG9hZCk6IENhbGwgdGhlIHR3byBuZXcgZnVuY3Rpb25zLgoJKHJlbG9hZF9hc19uZWVkZWQpOiBDYWxsIHNldF9pbml0aWFsX2VsaW1fb2Zmc2V0cyBpbnN0ZWFkIG9mCglkdXBsaWNhdGluZyB0aGUgY29kZS4gIExpa2V3aXNlIGZvciBzZXRfb2Zmc2V0c19mb3JfbGFiZWwuCgoJKiByZWxvYWQxLmMgKGNob29zZV9yZWxvYWRfcmVncyk6IEZpeCB0eXBvIGluIE9jdCAxNyBjaGFuZ2UuCgkoZW1pdF9yZWxvYWRfaW5zbnMpOiBFbnN1cmUgdGhhdCB3aGVuIHdlIHNldCByZWdfcmVsb2FkZWRfdmFsaWQgZm9yCglhbnkgaGFyZCByZWcsIHJlZ19yZWxvYWRlZF9kZWFkIGNvbnRhaW5zIHZhbGlkIGRhdGEuCgpUaHUgT2N0IDI5IDIyOjMwOjU0IDE5OTggIE1hcmN1cyBNZWlzc25lciAgPE1hcmN1cy5NZWlzc25lckBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCgkqIGkzODYuYyAoaTM4Nl9jb21wX3R5cGVfYXR0cmlidXRlcyk6IFJldHVybiBub256ZXJvIGZvciBtaXNtYXRjaGVkCgkic3RkY2FsbCIgYW5kICJjZGVjbCIgYXR0cmlidXRlcy4KClRodSBPY3QgMjkgMTk6MDU6MTcgMTk5OCAgSmltIFdpbHNvbiAgPHdpbHNvbkBjeWdudXMuY29tPgoKCSogc2NoZWQuYyAodXBkYXRlX2Zsb3dfaW5mbyk6IEFkZCBjb2RlIHRvICEgZm91bmRfb3JpZ19kZXN0IGNhc2UgdG8KCWhhbmRsZSBkZWxldGVkIG5vLW9wIG1vdmVzIG9mIGhhcmQgcmVnaXN0ZXJzLgoJKiBoYWlmYS1zY2hlZC5jICh1cGRhdGVfZmxvd19pbmZvKTogTGlrZXdpc2UuCgpUaHUgT2N0IDI5IDE4OjA3OjQ3IDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIG1pcHMubWQgKHJlbG9hZF97aW4sb3V0fXtzaSxkaX0pOiBFbWl0IGEgVVNFIG9mIEhJTE8gYXQgdGhlIGVuZAoJb2YgdGhlIHNlcXVlbmNlcyB0byByZWxvYWQgdGhlIEhJTE8gcmVnaXN0ZXIgd2hpY2ggZG8gbm90IGFjdHVhbGx5CglyZWZlcmVuY2UgSElMTy4KClRodSBPY3QgMjkgMTI6Mzk6MzUgMTk5OCAgSmltIFdpbHNvbiAgPHdpbHNvbkBjeWdudXMuY29tPgoKCSogYy1jb21tb24uYyAoY19nZXRfYWxpYXNfc2V0KTogSGFuZGxlIEFSUkFZX1JFRiBvZiB1bmlvbiBmaWVsZC4KClRodSBPY3QgMjkgMTQ6MTA6MjIgMTk5OCAgQW5kcmV3IE1hY0xlb2QgIDxhbWFjbGVvZEBjeWdudXMuY29tPgoKCSogZXhjZXB0LmMgKGVtaXRfZWhfY29udGV4dCk6IE1ha2UgdGhlIEVIIGNvbnRleHQgcmVnaXN0ZXIgc3RheSBhbGl2ZQoJYXQgLU8wIHNvIHN0dXBpZC5jIGRvZXNuJ3QgZ2V0IGNvbmZ1c2VkLgoKMTk5OC0xMC0yOSAgSGVybWFuIEEuSi4gdGVuIEJydWdnZSAgPEhhai5UZW4uQnJ1Z2dlQG5ldC5IQ0Mubmw+CgoJKiBlbWl0LXJ0bC5jICh0cnlfc3BsaXQpOiBEbyBub3QgdHJ5IHRvIHNwbGl0IGEgQkFSUklFUi4KClRodSBPY3QgMjkgMDE6MzM6NTQgMTk5OCAgSmFuIEh1Ymlja2EgIDxodWJpY2thQGZyZWVzb2Z0LmN6PgoJCQkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGkzODYubWQ6IENoYW5nZSBpeDg2X2NwdSA9PSBQUk9DRVNTT1JfUEVOVElVTSB0byBUQVJHRVRfUEVOVElVTS4KCSh6ZXJvX2V4dGVuZHNpZGkyKTogVXNlICMgaW4gb3V0cHV0IHRlbXBsYXRlIGFuZCBoYW5kbGUgY29tcGxldGVseSBieQoJc3BsaXRzLgoJKHplcm9fZXh0ZW5kIHNwbGl0dGVycyk6IE5ldyBkZWZpbmVfc3BsaXRzLgoJKGFzaGlmdHJ0XzMyKTogTmV3IHBhdHRlcm4uCgpXZWQgT2N0IDI4IDIyOjU4OjM1IDE5OTggIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHRyZWUuYyAoYXBwZW5kX3JhbmRvbV9jaGFycyk6IE5ldyBmbi4KCShnZXRfZmlsZV9mdW5jdGlvbl9uYW1lX2xvbmcpOiBVc2UgaXQuCgpXZWQgT2N0IDI4IDIyOjI3OjA1IDE5OTggIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBNYWtlZmlsZS5pbiAoY2MxKTogUHV0IENfT0JKUywgYW5kIHRoZW5jZSBAZXh0cmFfY19vYmpzQCBsYXN0LgoJKExJQkNQUF9PQkpTKTogTmV3LiAgQWRkIGNwcHVscC5vLgoJKGNwcG1haW4sIGZpeC1oZWFkZXIpOiBEZXBlbmQgb24gYW5kIHVzZSBsaWJjcHAuYS4KCSogY29uZmlndXJlLmluIChleHRyYV9jX29ianMsIGV4dHJhX2N4eF9vYmpzKTogVXNlIGxpYmNwcC5hIGluc3RlYWQKCW9mIHRoZSBpbmRpdmlkdWFsIG9iamVjdCBmaWxlcy4KCSogb2JqYy9NYWtlLWxhbmcuaW4gKGNjMW9iaik6IFB1dCBPQkpDX09CSlMsIGFuZCB0aGVuY2UgQGV4dHJhX2Nfb2Jqc0AsCglsYXN0LgoKCSogY2NjcC5jICh1c2VyX2xhYmVsX3ByZWZpeCk6IE5ldy4KCShtYWluKTogU2V0IGl0IG9mZiAtZipsZWFkaW5nLXVuZGVyc2NvcmUuCgkoc3BlY2lhbF9zeW1ib2wpOiBVc2UgaXQuCgkqIGNwcGxpYi5jIChzcGVjaWFsX3N5bWJvbCk6IExpa2V3aXNlLgoJKGNwcF9oYW5kbGVfb3B0aW9uKTogSGFuZGxlIC1mKmxlYWRpbmctdW5kZXJzY29yZS4KCSogY3BwdWxwLmM6IE5ldyBmaWxlLgoKCSogb3V0cHV0LmggKHVzZXJfbGFiZWxfcHJlZml4KTogRGVjbGFyZSBpdC4KCSogZHdhcmYyb3V0LmMgKEFTTV9OQU1FX1RPX1NUUklORyk6IFByZXBlbmQgdXNlcl9sYWJlbF9wcmVmaXguCgkqIHRvcGxldi5jIChmX29wdGlvbnMsIG1haW4pOiBIYW5kbGUgLWYqbGVhZGluZy11bmRlcnNjb3JlLgoKCSogZGVmYXVsdHMuaCAoQVNNX09VVFBVVF9MQUJFTFJFRik6IFVzZSBhc21fZnByaW50ZiBpbnN0ZWFkIG9mCglyZWZlcmVuY2luZyBVU0VSX0xBQkVMX1BSRUZJWCBkaXJlY3RseS4KCSogY29uZmlnL25leHRzdGVwLmggKEFTTV9PVVRQVVRfTEFCRUxSRUYpOiBMaWtld2lzZS4KCSogbTMyci9tMzJyLmggKEFTTV9PVVRQVVRfTEFCRUxSRUYpOiBMaWtld2lzZS4KCSogZmluYWwuYyAoYXNtX2ZwcmludGYpOiBVc2UgdXNlcl9sYWJlbF9wcmVmaXggaW5zdGVhZC4KCSogYXJtL3RodW1iLmMgKHRodW1iX3ByaW50X29wZXJhbmQpOiBMaWtld2lzZS4KCgkqIGdjYy5jIChkZWZhdWx0X2NvbXBpbGVycyk6IFBhc3MgLWYqbGVhZGluZy11bmRlcnNjb3JlIG9uIHRvCgljcHAgd2hlcmV2ZXIgYXBwcm9wcmlhdGUuCgpXZWQgT2N0IDI4IDIzOjA5OjI1IDE5OTggIFJvYmVydCBMaXBlICA8cm9iZXJ0bEBkZ2lpLmNvbT4KCgkqIHNjbzUuaCAoU1VCVEFSR0VUX1NXSVRDSEVTKTogQWRkIGRvY3VtZW50YXRpb24gZm9yIE9wZW5TZXJ2ZXItCglzcGVjaWZpYyBjb21waWxlciBzd2l0Y2hlcy4KCldlZCBPY3QgMjggMjE6MDU6NTMgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogTWFrZWZpbGUuaW4gKGMtY29tbW9uLm8pOiBEZXBlbmQgb24gYy1wcmFnbWEuaC4gIFVzZSAkKFJUTF9IKSBpbnN0ZWFkCglvZiBydGwuaC4KCldlZCBPY3QgMjggMjA6NTI6NDcgMTk5OCAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogZ2NjLmMgKEVYVFJBX1NQRUNTLCBleHRyYV9zcGVjcyk6IEludHJvZHVjZSBhbiBpbnRlcm1lZGlhdGUKCXN0cnVjdHVyZSB3aGljaCBoYXMgZXhhY3RseSB0aGUgbWVtYmVycyBwcm92aWRlZCBieSBFWFRSQV9TUEVDUy4KCVhtYWxsb2MoKSB0aGUgcmVhbCBgZXh0cmFfc3BlY3MnLCBhbmQgaW5pdGlhbGl6ZSBpdCBmcm9tIHRoaXMKCWludGVybWVkaWF0ZSBzdHJ1Y3R1cmUuCgoJKiBhbHBoYS5oIChFWFRSQV9TUEVDUyk6IFJldmVydCBjaGFuZ2UgZm9yIG1pc3NpbmcgaW5pdGlhbGl6ZXJzLgoKCSogbWlwcy5oICAoRVhUUkFfU1BFQ1MpOiBMaWtld2lzZS4KCgkqIHNwYXJjLmggKEVYVFJBX1NQRUNTKTogTGlrZXdpc2UuCgpXZWQgT2N0IDI4IDE2OjQ2OjA3IDE5OTggIEFuZHJlYXMgU2Nod2FiICA8c2Nod2FiQGlzc2FuLmNzLnVuaS1kb3J0bXVuZC5kZT4KCgkqIGZ1bmN0aW9uLmMgKHB1cmdlX2FkZHJlc3NvZl8xKTogSW5zdGVhZCBvZiBhYm9ydGluZyB3aGVuIGEKCWJpdGZpZWxkIGluc2VydGlvbiBhcyBhIHJlcGxhY2VtZW50IGZvciAoTUVNIChBRERSRVNTT0YpKSBkb2VzIG5vdAoJd29yayBqdXN0IHB1dCB0aGUgQUREUkVTU09GIG9uIHN0YWNrLiAgT3RoZXJ3aXNlIHJlbWVtYmVyIGFsbCBzdWNoCglzdWNjZXNzZnVsIHJlcGxhY2VtZW50cywgc28gdGhhdCBleGFjdGx5IHRoZSBzYW1lIHJlcGxhY2VtZW50cwoJY2FuIGJlIG1hZGUgb24gdGhlIFJFR19OT1RFcy4gIFJlbW92ZSB0aGUgc3BlY2lhbCBjYXNlIGZvciBDQUxMCglpbnNucyBhZ2Fpbi4KCShwdXJnZV9hZGRyZXNzb2ZfcmVwbGFjZW1lbnRzKTogTmV3IHZhcmlhYmxlLgoJKHB1cmdlX2FkZHJlc3NvZik6IENsZWFyIGl0IGF0IGVuZC4KCjE5OTgtMTAtMjggIFphY2sgV2VpbmJlcmcgIDx6YWNrQHJhYmkucGh5cy5jb2x1bWJpYS5lZHU+CgoJKiBjLWxhbmcuYzogRGVjbGFyZSBleHRlcm4gY2hhciAqeXlfY3VyIGlmIFVTRV9DUFBMSUIuCgkgIChsYW5nX2luaXQpOiBDYWxsIGNoZWNrX25ld2xpbmUgYWx3YXlzLgoJKiBjLWxleC5jIChpbml0X3BhcnNlKSBbVVNFX0NQUExJQj0xXTogQWZ0ZXIgY2FsbGluZwoJICBjcHBfc3RhcnRfcmVhZCwgc2V0IHl5X2N1ciBhbmQgeXlfbGltIHRvIHJlYWQgZnJvbQoJICBwYXJzZV9pbi50b2tlbl9idWZmZXIsIHNvIHRoYXQgd2UnbGwgc2VlIHRoZSBmaXJzdCAjbGluZQoJICBkaXJlY3RpdmUuCgkqIGNwcGxpYi5jIChjcHBfc3RhcnRfcmVhZCk6IGZpbmNsdWRlIHRoZSBtYWluIGlucHV0IGZpbGUKCSAgYmVmb3JlIHByb2Nlc3NpbmcgLWluY2x1ZGUvLWltYWNyb3MuCSBQcm9jZXNzIC1pbWFjcm9zIGFuZAoJICAtaW5jbHVkZSBzZXBhcmF0ZWx5LCBhbmQgaGFuZGxlIC1pbmNsdWRlIGJ5IHN0YWNraW5nIGEKCSAgYnVmZmVyIGZvciB0aGUgZmlsZSBpbiBxdWVzdGlvbiBhcyBpZiBpdCdkIGJlZW4gI2luY2x1ZGVkLgoJKiB0b3BsZXYuYyAoZG9jdW1lbnRlZF9sYW5nX29wdGlvbnMpOiBSZWNvZ25pemUgLUggd2hlbgoJICBVU0VfQ1BQTElCIGlzIG9uLgoKMTk5OC0xMC0yOCAgWmFjayBXZWluYmVyZyAgPHphY2tAcmFiaS5waHlzLmNvbHVtYmlhLmVkdT4KCgkqIGNwcGxpYi5jOiBNZXJnZSBkb19vbmNlIGludG8gZG9fcHJhZ21hLiAgQnJlYWsgZmlsZSBoYW5kbGluZwoJICBjb2RlIG91dCBvZiBkb19pbmNsdWRlLgoJICBNb3ZlIGFwcGVuZF9pbmNsdWRlX2NoYWluLCBkZXBzX291dHB1dCwKCSAgZmlsZV9jbGVhbnVwLCByZWR1bmRhbnRfaW5jbHVkZV9wLCBpbXBvcnRfaGFzaCwKCSAgbG9va3VwX2ltcG9ydCwgYWRkX2ltcG9ydCwgcmVhZF9maWxlbmFtZV9zdHJpbmcsIHJlYWRfbmFtZV9tYXAsCgkgIG9wZW5faW5jbHVkZV9maWxlLCBmaW5jbHVkZSwgc2FmZV9yZWFkIHRvIGNwcGZpbGVzLmMuCgkgIE1vdmUgcHJvdG90eXBlcyBmb3IgZGVwc19vdXRwdXQsIGFwcGVuZF9pbmNsdWRlX2NoYWluLAoJICBmaW5jbHVkZSB0byBjcHBsaWIuaC4gIE1vdmUgZGVmaW5pdGlvbiBvZiBzdHJ1Y3QKCSAgZmlsZV9uYW1lX2xpc3QgdGhlcmUgYWxzby4KCgkqIGNwcGZpbGVzLmM6IE5ldyBmaWxlLiAgQ29udGFpbnMgYWxsIHRoZSBhYm92ZSBmdW5jdGlvbnMKCSAgYnJva2VuIG91dCBvZiBjcHBsaWIuYzsgYWxzbyBoYWNrX3Ztc19pbmNsdWRlX3NwZWNpZmljYXRpb24KCSAgZnJvbSBjY2NwLmMgYW5kIGZpbmRfaW5jbHVkZV9maWxlLCBhIG5ldyBmdW5jdGlvbiBicm9rZW4gb3V0IG9mCgkgIGRvX2luY2x1ZGUuCgoJKiBNYWtlZmlsZS5pbiAoY3BwbWFpbik6IERlcGVuZCBvbiBjcHBmaWxlcy5vLgoJICAoZml4LWhlYWRlcik6IExpa2V3aXNlLgoJICAoY3BwZmlsZXMubyk6IE5ldyB0YXJnZXQuCgkqIGNvbmZpZ3VyZS5pbiAoLS1lbmFibGUtYy1jcHBsaWIpOiBBZGQgY3BwZmlsZXMubyB0bwoJICBleHRyYV9jX29ianMuICBBZGQgLi4vY3BwZmlsZXMubyB0byBleHRyYV9jeHhfb2Jqcy4KCldlZCBPY3QgMjggMTQ6MDY6NDkgMTk5OCAgSmltIFdpbHNvbiAgPHdpbHNvbkBjeWdudXMuY29tPgoKCSogZHdhcmZvdXQuYyAoZHdhcmZvdXRfZmlsZV9zY29wZV9kZWNsKTogSWYgREVDTF9DT05URVhULCBkb24ndCBhYm9ydAoJaWYgcGVuZGluZ190eXBlcyBpcyBub256ZXJvLgoJKGR3YXJmb3V0X2ZpbmlzaCk6IFZlcmlmeSBwZW5kaW5nX3R5cGVzIGlzIHplcm8gYmVmb3JlIGZpbmlzaGluZy4KCldlZCBPY3QgMjggMTA6Mjk6MDkgMTk5OCAgTmljayBDbGlmdG9uICA8bmlja2NAY3lnbnVzLmNvbT4KCgkqIGV4cHIuYyAoY29udmVydF9tb3ZlKTogVXNlIHNoaWZ0cyB0byBwZXJmb3JtIHRoZSBtb3ZlIGlmIGEKCXN1aXRhYmxlIGV4dGVuZCBwYXR0ZXJuIGNhbm5vdCBiZSBmb3VuZC4gIENvZGUgd3JpdHRlbiBieQoJUmljaGFyZCBIZW5kZXJzb24gPHJ0aEBjeWdudXMuY29tPi4KCldlZCBPY3QgMjggMDM6NTk6MjkgMTk5OCAgQmVybmQgU2NobWlkdCAgPGNydXhAcG9vbC5pbmZvcm1hdGlrLnJ3dGgtYWFjaGVuLmRlPgoKCSogcmVnY2xhc3MuYyAocmVudW1iZXIsIHJlZ25vX2FsbG9jYXRlZCk6IE5ldyBzdGF0aWMgdmFyaWFibGVzLCBtb3ZlZAoJb3V0IG9mIGFsbG9jYXRlX3JlZ19pbmZvLgoJKGFsbG9jYXRlX3JlZ19pbmZvKTogTW92ZSB0aGVzZSB0d28gdmFyaWFibGVzIG91dHNpZGUgdGhlIGZ1bmN0aW9uLgoJTW92ZSBjb2RlIHRvIGZyZWUgbWVtb3J5IGludG8gbmV3IGZ1bmN0aW9uIGZyZWVfcmVnX2luZm8uCgkoZnJlZV9yZWdfaW5mbyk6IE5ldyBmdW5jdGlvbiwgYnJva2VuIG91dCBvZiBhbGxvY2F0ZV9yZWdfaW5mby4KCSogdG9wbGV2LmMgKGNvbXBpbGVfZmlsZSk6IENhbGwgZnJlZV9yZWdfaW5mbywgbm90IGFsbG9jYXRlX3JlZ19pbmZvLgoJKiBydGwuaCAoYWxsb2NhdGVfcmVnX2luZm8pOiBEb24ndCBkZWNsYXJlLgoJKGZyZWVfcmVnX2luZm8pOiBEZWNsYXJlLgoKCSogZmluYWwuYyAoY2xlYW51cF9zdWJyZWdfb3BlcmFuZHMpOiBBU01fSU5QVVRzIG5lZWQgbm8gdHJlYXRtZW50LgoKV2VkIE9jdCAyOCAwMjozODoxMiAxOTk4ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiB0b3BsZXYuYyAoY29tcGlsZV9maWxlKTogVGVtcG9yYXJpbHkgcmV2ZXJ0IGxhc3QgY2hhbmdlLgoKV2VkIE9jdCAyOCAwMDowMDozNSAxOTk4ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjLXR5cGVjay5jIChjb252ZXJ0X2Zvcl9hc3NpZ25tZW50KTogUGFyZW50aGVzaXplLgoKMTk5OC0xMC0yOCAgQW5kcmVhcyBTY2h3YWIgIDxzY2h3YWJAaXNzYW4uY3MudW5pLWRvcnRtdW5kLmRlPgoKCSogcmVsb2FkMS5jIChkZWxldGVfb3V0cHV0X3JlbG9hZCk6IEF2b2lkIGFtYmlnb3VzIGVsc2UuCgpXZWQgT2N0IDI4IDAwOjEwOjM1IDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHRvcGxldi5jIChjb21waWxlX2ZpbGUpOiBDYWxsIGFsbG9jYXRlX3JlZ19pbmZvIHRvIGZyZWUgcmVnaXN0ZXIKCXRhYmxlIG1lbW9yeS4KCSogcnRsLmggKGFsbG9jYXRlX3JlZ19pbmZvKTogRGVjbGFyZS4KCgkqIFBST0pFQ1RTOiBSZW1vdmUgZW50cnkgZm9yIGxvY2FsIHNwaWxsaW5nLgoKCSogZmluYWwuYyAoY2xlYW51cF9zdWJyZWdfb3BlcmFuZHMpOiBOZXcgZnVuY3Rpb24uCgkoZmluYWxfc2Nhbl9pbnNuKTogVXNlIGl0LgoJKGFsdGVyX3N1YnJlZyk6IENsZWFyIHRoZSAidXNlZCIgZmllbGQgd2hlbiB3ZSB0dXJuIGEgU1VCUkVHIGludG8KCWEgUkVHLgoJKiByZWxvYWQxLmMgKHJlbG9hZCk6IERlbGV0ZSBDTE9CQkVSIGluc25zIGFuZCBhbHNvIGNsZWFudXAgU1VCUkVHCglvcGVyYW5kcyB3aGVuIHJlbG9hZCBoYXMgZmluaXNoZWQuCgkqIHJlbG9hZC5oIChjbGVhbnVwX3N1YnJlZ19vcGVyYW5kcyk6IERlY2xhcmUuLgoJKiBmbG93LmMgKGxpZmVfYW5hbHlzaXNfMSk6IE5vIGxvbmdlciBkZWxldGUgQ0xPQkJFUiBpbnNucyBhZnRlcgoJcmVsb2FkLiAgSGFuZGxlZCBpbiByZWxvYWQgaXRzZWxmLgoKVHVlIE9jdCAyNyAyMzozMjozNCAxOTk4ICBCZXJuZCBTY2htaWR0ICA8Y3J1eEBwb29sLmluZm9ybWF0aWsucnd0aC1hYWNoZW4uZGU+CgoJKiByZWxvYWQxLmMgKHZlcmlmeV9pbml0aWFsX29mZnNldHMpOiBOZXcgZnVuY3Rpb24uCgkocmVsb2FkKTogQ2FsbCBpdCBhZnRlciByZWxvYWRfYXNfbmVlZGVkLiAgQWxzbyB2ZXJpZnkgdGhhdCB0aGUgZnJhbWUKCXNpemUgc3RheXMgY29uc3RhbnQgZHVyaW5nIHJlbG9hZF9hc19uZWVkZWQuCgkqIGkzODYuaCAoQ09OU1RfRE9VQkxFX09LX0ZPUl9MRVRURVJfUCk6IFVuZG8gSnVsIDI2IGNoYW5nZS4KCgkqIHJlbG9hZC5oIChzdHJ1Y3QgaW5zbl9jaGFpbik6IEFkZCBuZWVkX29wZXJhbmRfY2hhbmdlIGVsZW1lbnQuCgkqIHJlbG9hZDEuYyAobmV3X2luc25fY2hhaW4pOiBDbGVhciBpdC4KCShjYWxjdWxhdGVfbmVlZHNfYWxsX2luc25zKTogU2V0IGl0OyBkb24ndCBvdmVybG9hZCBuZWVkX3JlbG9hZC4KCShyZWxvYWRfYXNfbmVlZGVkKTogVXNlIGl0LgoKCSogcmVsb2FkLmMgKGZpbmRfcmVsb2Fkc19hZGRyZXNzKTogVXNlIEJBU0VfUkVHX0NMQVNTIGluc3RlYWQgb2YKCXJlbG9hZF9hZGRyZXNzX2Jhc2VfcmVnX2NsYXNzIHRocm91Z2hvdXQuICBTaW1pbGFyIGZvciBJTkRFWF9SRUdfQ0xBU1MKCWFuZCByZWxvYWRfYWRkcmVzc19pbmRleF9yZWdfY2xhc3MuCgkoZmluZF9yZWxvYWRzX2FkZHJlc3NfMSk6IExpa2V3aXNlLgoJKiByZWxvYWQuaCAocmVsb2FkX2FkZHJlc3NfYmFzZV9yZWdfY2xhc3MsCglyZWxvYWRfYWRkcmVzc19pbmRleF9yZWdfY2xhc3MpOiBEb24ndCBkZWNsYXJlLgoJKiByZWxvYWQxLmMgKHJlZ19vbGRfcmVudW1iZXIsIHBzZXVkb19wcmV2aW91c19yZWdzLAoJcHNldWRvX2ZvcmJpZGRlbl9yZWdzLCBiYWRfc3BpbGxfcmVnc19nbG9iYWwpOiBOZXcgc3RhdGljIHZhcmlhYmxlcy4KCSh1c2VkX3NwaWxsX3JlZ3MpOiBOb3cgc3RhdGljLgoJKHJlbG9hZF9hZGRyZXNzX2Jhc2VfcmVnX2NsYXNzLCByZWxvYWRfYWRkcmVzc19pbmRleF9yZWdfY2xhc3MsCglyZWdzX2V4cGxpY2l0bHlfdXNlZCwgY291bnRlZF9mb3JfZ3JvdXBzLCBjb3VudGVkX2Zvcl9ub25ncm91cHMsCgliYXNpY19ibG9ja19uZWVkcywgbWF4X25lZWRzLCBncm91cF9zaXplLCBncm91cF9tb2RlLCBtYXhfZ3JvdXBzLAoJbWF4X25vbmdyb3VwcywgbWF4X25lZWRzX2luc24sIG1heF9ncm91cHNfaW5zbiwgbWF4X25vbmdyb3Vwc19pbnNuLAoJZm9yYmlkZGVuX3JlZ3MpOgoJRGVsZXRlZCB2YXJpYWJsZXMuCgkoaW5pdF9yZWxvYWQpOiBEZWxldGUgY29kZSB0byBjb21wdXRlIGJhc2UvaW5kZXggcmVnIGNsYXNzZXMuCgkocmVsb2FkKTogRGVsZXRlIHZhcmlhYmxlIEouCglEZWxldGUgY29kZSB0byBtYW5hZ2UgYmFzaWNfYmxvY2tfbmVlZHMuCglEb24ndCBjb21wdXRlIHJlZ3NfZXhwbGljaXRseV91c2VkLgoJQWxsb2NhdGUsIGluaXRpYWxpemUgYW5kIGZyZWUgcmVnX29sZF9yZW51bWJlciwgcHNldWRvX2ZvcmJpZGRlbl9yZWdzLAoJcHNldWRvX3ByZXZpb3VzX3JlZ3MuCglJbml0aWFsaXplIGJhZF9zcGlsbF9yZWdzX2dsb2JhbC4KCURvbid0IGNhbGwgb3JkZXJfcmVnc19mb3JfcmVsb2FkIGhlcmUuCglEb24ndCBpbml0aWFsaXplIHNwaWxsX3JlZ19vcmRlciBhbmQgbl9zcGlsbHMuCglEb24ndCBmb3JiaWQgZXhwbGljaXRseSB1c2VkIHJlZ3MgdG8gYmUgdXNlZCBmb3Igc3BpbGwgcmVncy4KCUNoYW5nZSBtYWluIGxvb3AgdG8gaW5maW5pdGUgbG9vcCwgd2l0aCBleHBsaWNpdCBicmVhayBzdGF0ZW1lbnRzLgoJTWFrZSBTT01FVEhJTkdfQ0hBTkdFRCB2YXJpYWJsZSBsb2NhbCB0byB0aGF0IGxvb3AuCglEb24ndCBpbml0aWFsaXplIG1heF9uZWVkcywgbWF4X2dyb3VwcywgbWF4X25vbmdyb3VwcywgbWF4X25lZWRzX2luc24sCgltYXhfZ3JvdXBzX2luc24sIG1heF9ub25ncm91cHNfaW5zbiwgZ3JvdXBfc2l6ZSwgZ3JvdXBfbW9kZS4KCU1ha2Ugc3VyZSBzcGlsbGVkX3BzZXVkb3MgaXMgY2xlYXJlZCBiZWZvcmUgY2FsbGluZyBzcGlsbF9oYXJkX3JlZyBvcgoJbmV3X3NwaWxsX3JlZy4KCURvbid0IGNhbGwgZHVtcF9uZWVkcy4KCURlbGV0ZSBjb2RlIHRvIHJlc2V0IHBvdGVudGlhbF9yZWxvYWRfcmVncy4KCURlbGV0ZSBjb2RlIHRvIHRlcm1pbmF0ZSBsb29wIGNvbmRpdGlvbmFsIG9uIHRoZSBnbG9iYWwgbmVlZHMgdmFyaWFibGVzCglzaG93aW5nIG5vIGZ1cnRoZXIgbmVlZHMuCgkoY2FsY3VsYXRlX25lZWRzX2FsbF9pbnNucyk6IFJldHVybiB2b2lkLiAgQWxsIGNhbGxlcnMgY2hhbmdlZC4KCUluaXRpYWxpemUgc29tZXRoaW5nX25lZWRzX2VsaW1pbmF0aW9uIGhlcmUsIG5vdCBpbiByZWxvYWQuCglEZWxldGUgYXZvaWRfcmV0dXJuX3JlZyBrbHVkZ2UuCgkoY2FsY3VsYXRlX25lZWRzKTogTG9zZSBBVk9JRF9SRVRVUk5fUkVHIGFuZCBHTE9CQUwgYXJncywgcmV0dXJuIHZvaWQuCglBbGwgY2FsbGVycyBjaGFuZ2VkLgoJSW5pdGlhbGl6ZSB0aGUgZ3JvdXBfbW9kZSBhbmQgZ3JvdXBfc2l6ZSBlbGVtZW50cyBvZiB0aGUgYXJnIENIQUlOLgoJRGVsZXRlIGNvZGUgdG8gbWFuYWdlIGJhc2ljX2Jsb2NrX25lZWRzLgoJT3BlcmF0ZSBvbiBlbGVtZW50cyBvZiBDSEFJTiBpbnN0ZWFkIG9mIGdsb2JhbCB2YXJpYWJsZXMuCglEZWxldGUgYXZvaWRfcmV0dXJuX3JlZyBrbHVkZ2UuCgkoZmluZF90d29yZWdfZ3JvdXApOiBMb3NlIEdMT0JBTCBhcmcsIHRha2UgQ0hBSU4gYXJnLCByZXR1cm4gdm9pZC4KCUFsbCBjYWxsZXJzIGNoYW5nZWQuCglPcGVyYXRlIG9uIGVsZW1lbnRzIG9mIENIQUlOIGluc3RlYWQgb2YgZ2xvYmFsIHZhcmlhYmxlcy4KCURlbGV0ZSBzcGVjaWFsIFNNQUxMX1JFR0lTVEVSX0NMQVNTRVMgY29kZS4KCURlbGV0ZSBzcGlsbF9mYWlsdXJlIGNvZGU7IG5vdyBpbiBuZXdfc3BpbGxfcmVnLgoJKGZpbmRfZ3JvdXApOiBMb3NlIEdMT0JBTCBhcmcsIHRha2UgQ0hBSU4gYXJnLCByZXR1cm4gdm9pZC4KCUFsbCBjYWxsZXJzIGNoYW5nZWQuCglPcGVyYXRlIG9uIGVsZW1lbnRzIG9mIENIQUlOIGluc3RlYWQgb2YgZ2xvYmFsIHZhcmlhYmxlcy4KCShtYXliZV9tYXJrX3BzZXVkb19zcGlsbGVkKTogTmV3IHN0YXRpYyBmdW5jdGlvbi4KCShmaW5kX3JlbG9hZF9yZWdzKTogTG9zZSBHTE9CQUwgYXJnLCB0YWtlIENIQUlOIGFyZywgcmV0dXJuIHZvaWQuCglBbGwgY2FsbGVycyBjaGFuZ2VkLgoJT3BlcmF0ZSBvbiBlbGVtZW50cyBvZiBDSEFJTiBpbnN0ZWFkIG9mIGdsb2JhbCB2YXJpYWJsZXMuCglDYWxsIG9yZGVyX3JlZ3NfZm9yX3JlbG9hZCBoZXJlLCBub3QgaW4gcmVsb2FkLgoJSW5pdGlhbGl6ZSBzcGlsbF9yZWdfb3JkZXIgYW5kIG5fc3BpbGxzLgoJU2ltcGxpZnkgdGVzdCB3aGV0aGVyIGFuIGFzbSBpbnNuIGlzIGludm9sdmVkLgoJRGVsZXRlIHNwaWxsX2ZhaWx1cmUgY29kZTsgbm93IGluIG5ld19zcGlsbF9yZWcuCglDYWxsIG1heWJlX21hcmtfcHNldWRvX3NwaWxsZWQgZm9yIGV2ZXJ5dGhpbmcgbWFya2VkIGFzIGxpdmUgaW4KCUNIQUlOLiAgTWVyZ2UgQ0hBSU4ncyB1c2VkX3NwaWxsX3JlZ3MgaW50byB0aGUgZ2xvYmFsIHZhcmlhYmxlCgl1c2VkX3NwaWxsX3JlZ3MuCgkoZHVtcF9uZWVkcyk6IFRha2UgQ0hBSU4gYXJnLiAgTm8gbG9uZ2VyIHN0YXRpYywgdG8gcHJldmVudCB0aGUKCWNvbXBpbGVyIGZyb20gb3B0aW1pemluZyB0aGlzIGZ1bmN0aW9uIChub3cgdW51c2VkKSBhd2F5LgoJT3BlcmF0ZSBvbiBlbGVtZW50cyBvZiBDSEFJTiBpbnN0ZWFkIG9mIGdsb2JhbCB2YXJpYWJsZXMuCgkocG9zc2libGVfZ3JvdXBfcCk6IExvc2UgTUFYX0dST1VQUyBhcmcsIHRha2UgQ0hBSU4gYXJnLiAgQWxsIGNhbGxlcnMKCWNoYW5nZWQuCglPcGVyYXRlIG9uIGVsZW1lbnRzIG9mIENIQUlOIGluc3RlYWQgb2YgZ2xvYmFsIHZhcmlhYmxlcy4KCShjb3VudF9wb3NzaWJsZV9ncm91cHMpOiBMb3NlIEdST1VQX1NJWkUsIEdST1VQX01PREUsIE1BWF9HUk9VUFMgYXJncywKCXRha2UgQ0hBSU4gYXJnLiAgQWxsIGNhbGxlcnMgY2hhbmdlZC4KCU9wZXJhdGUgb24gZWxlbWVudHMgb2YgQ0hBSU4gaW5zdGVhZCBvZiBnbG9iYWwgdmFyaWFibGVzLgoJKG5ld19zcGlsbF9yZWcpOiBMb3NlIE1BWF9ORUVEUywgTUFYX05PTkdST1VQUywgR0xPQkFMIGFyZ3MsIHRha2UKCUNIQUlOLCBOT05HUk9VUCBhcmdzLiAgUmV0dXJuIHZvaWQuICBBbGwgY2FsbGVycyBjaGFuZ2VkLgoJVmVyaWZ5IGNhbGxlciBpc24ndCB0cnlpbmcgdG8gc3BpbGwgYSBwc2V1ZG8uCglTaW1wbGlmeSB0ZXN0IGZvciBpbGxlZ2FsIHJlZywganVzdCB1c2UgYmFkX3NwaWxsX3JlZ3MuCglHZW5lcmF0ZSBiZXR0ZXIgZXJyb3IgbWVzc2FnZXMuCglPcGVyYXRlIG9uIGVsZW1lbnRzIG9mIENIQUlOIGluc3RlYWQgb2YgZ2xvYmFsIHZhcmlhYmxlcy4KCU1hcmsgc3BpbGxlZCByZWdpc3RlciBpbiBDSEFJTidzIHVzZWRfc3BpbGxfcmVncyBlbGVtZW50LgoJRG9uJ3QgY2FsbCBzcGlsbF9oYXJkX3JlZy4KCShzcGlsbF9oYXJkX3JlZyk6IExvc2UgR0xPQkFMIGFyZywgcmV0dXJuIHZvaWQuICBBbGwgY2FsbGVycyBjaGFuZ2VkLgoJTWFyayBzcGlsbGVkIGhhcmQgcmVncyBpbiBiYWRfc3BpbGxfcmVnc19nbG9iYWwuCglNYXJrIGFmZmVjdGVkIHBzZXVkb3MgaW4gc3BpbGxlZF9wc2V1ZG9zLCBidXQgZG9uJ3Qgc3BpbGwgdGhlbS4KCShpb3JfaGFyZF9yZWdfc2V0KTogTmV3IHN0YXRpYyBmdW5jdGlvbi4KCShmaW5pc2hfc3BpbGxzKTogUmV0dXJuIGludC4gIEFsbCBjYWxsZXJzIGNoYW5nZWQuCglDb21wdXRlIHNwaWxsX3JlZ19vcmRlciwgbl9zcGlsbHMgYW5kIHNwaWxsX3JlZ3MgaGVyZS4gIEFsc28gdXBkYXRlCglyZWdzX2V2ZXJfbGl2ZSBmb3IgcmVncyB1c2VkIGFzIHNwaWxscy4KCUZvciBldmVyeSBwc2V1ZG8gaW4gc3BpbGxlZF9wc2V1ZG9zLCBzcGlsbCBpdCBhbmQgbWFyayB0aGUgcHJldmlvdXMKCWhhcmQgcmVnIGl0IGhhZCBpbiBwc2V1ZG9fcHJldmlvdXNfcmVncy4gIENvbXB1dGUgd2hpY2ggaGFyZCByZWdzCglhcmUgdXNlZCBhcyBzcGlsbHMgaW4gaW5zbnMgZHVyaW5nIHdoaWNoIGl0IGlzIGxpdmUsIGFuZCByZXRyeSBnbG9iYWwKCXJlZ2lzdGVyIGFsbG9jYXRpb24uICBVcGRhdGUgYWxsIGxpZmUgaW5mb3JtYXRpb24gaW4gdGhlCglyZWxvYWRfaW5zbl9jaGFpbiBub3QgdG8gaW5jbHVkZSBwc2V1ZG9zIHdpdGhvdXQgaGFyZCByZWdzLgoJQ2FsbCBhbHRlcl9yZWcgZm9yIGFsbCBhZmZlY3RlZCBzcGV1ZG9zLgoKCShzY2FuX3BhcmFkb3hpY2FsX3N1YnJlZ3MpOiBEaXNhYmxlIFNNQUxMX1JFR0lTVEVSX0NMQVNTRVMgc3BlY2lhbAoJY2FzZSwgaXQncyBub3QgY2xlYXIgd2hhdCBpdCdzIHN1cHBvc2VkIHRvIGRvLgoKCShoYXJkX3JlZ191c2VfY29tcGFyZSk6IFRha2UgYmFkX3NwaWxsX3JlZ3MgaW50byBhY2NvdW50LgoJKHBzZXVkb3NfY291bnRlZCk6IE5ldyBzdGF0aWMgdmFyaWFibGUuCgkoY291bnRfcHNldWRvKTogTmV3IHN0YXRpYyBmdW5jdGlvbi4KCShvcmRlcl9yZWdzX2Zvcl9yZWxvYWQpOiBUYWtlIENIQUlOIGFyZy4gIEFsbCBjYWxsZXJzIGNoYW5nZWQuCglJbml0aWFsaXplIGJhZF9zcGlsbF9yZWdzIGZyb20gYmFkX3NwaWxsX3JlZ3NfZ2xvYmFsLCB0aGVuIG1lcmdlIGFueQoJaGFyZCByZWdpc3RlcnMgZXhwbGljaXRseSB1c2VkIGFjcm9zcyB0aGUgY3VycmVudCBpbnNuIGludG8gdGhlIHNldC4KCUNvbXB1dGUgaGFyZF9yZWdfbl91c2VzIHRha2luZyBvbmx5IHBzZXVkb3MgbGl2ZSBhY3Jvc3MgdGhpcyBpbnNuCglpbnRvIGFjY291bnQuCglUd2VhayBzb3J0aW5nIG9mIHBvdGVudGlhbF9yZWxvYWRfcmVncy4KCShjb21wYXJlX3NwaWxsX3JlZ3MpOiBEZWxldGUgZnVuY3Rpb24uCgkocmVsb2FkX2FzX25lZWRlZCk6IERvbid0IHNvcnQgdGhlIHNwaWxsX3JlZ3MgYXJyYXksIGl0J3MgY29tcHV0ZWQKCWluIHByb3BlciBvcmRlciBpbiBmaW5pc2hfc3BpbGxzLgoJRGVsZXRlIGF2b2lkX3JldHVybl9yZWcga2x1ZGdlLgoJRGVsZXRlIGNvZGUgdG8gbWFuYWdlIGJhc2ljX2Jsb2NrX25lZWRzLgoJKGFsbG9jYXRlX3JlbG9hZF9yZWcpOiBNaW5vciBzcGVlZC9yZWFkYWJpbGl0eSB0d2Vha3MuCglPcGVyYXRlIG9uIGVsZW1lbnRzIG9mIENIQUlOIGluc3RlYWQgb2YgZ2xvYmFsIHZhcmlhYmxlcy4KCShjaG9vc2VfcmVsb2FkX3JlZ3MpOiBMb3NlIEFWT0lEX1JFVFVSTl9SRUcgYXJnLiAgQWxsIGNhbGxlcnMgY2hhbmdlZC4KCURlbGV0ZSBhdm9pZF9yZXR1cm5fcmVnIGtsdWRnZS4KCUluaXRpYWxpemUgcmVsb2FkX3JlZ191c2VkIGZyb20gQ0hBSU4ncyB1c2VkX3NwaWxsX3JlZ3MgZWxlbWVudC4KCURlbGV0ZSB1bnVzZWQgbGFiZWwgRkFJTC4KCShyZWxvYWRfY29tYmluZSk6IFJlcGxhY2UgcmVsb2FkX2FkZHJlc3NfaW5kZXhfcmVnX2NsYXNzIHdpdGgKCUlOREVYX1JFR1MuCglEb24ndCB1c2UgdXNlZF9zcGlsbF9yZWdzIHRvIGRldGVybWluZSBpbmZvcm1hdGlvbiBhYm91dCBsaWZldGltZSBvZgoJaGFyZCByZWdzLgoKVHVlIE9jdCAyNyAxMzoxNTowMiAxOTk4ICBOaWNrIENsaWZ0b24gIDxuaWNrY0BjeWdudXMuY29tPgoKCSogdG9wbGV2LmMgKGRpc3BsYXlfaGVscCk6IElnbm9yZSBlbXB0eSB0YXJnZXQgc3BlY2lmaWMKCW9wdGlvbnMsIGFuZCBpZiAtVyBpcyBhbHNvIHNwZWNpZmllZCBvbiB0aGUgY29tbWFuZCBsaW5lIHRoZW4KCWRpc3BsYXkgdW5kb2N1bWVudGVkIG9wdGlvbnMuCgoJKiBjb25maWcvYXJtL2FybS5jOiBVcGRhdGVkIHdpdGggY2hhbmdlcyBpbiBkZXZvIHNvdXJjZXMuCgkqIGNvbmZpZy9hcm0vYXJtLmg6IFVwZGF0ZWQgd2l0aCBjaGFuZ2VzIGluIGRldm8gc291cmNlcy4KCSogY29uZmlnL2FybS9saWIxZnVuY3MuYXNtOiBVcGRhdGVkIHdpdGggY2hhbmdlcyBpbiBkZXZvIHNvdXJjZXMuCgkqIGNvbmZpZy9hcm0vbGliMXRodW1iLmFzbTogQWRkIEVMRiBzdXBwb3J0LgoKVHVlIE9jdCAyNyAxNjoxMTo0MyAxOTk4ICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQGdudS5vcmc+CgoJKiBjb2xsZWN0Mi5jIChhaXg2NF9mbGFnKTogTmV3IHZhcmlhYmxlLgoJKG1haW4sIGNhc2UgJ2InKTogUGFyc2UgaXQuCgkoR0NDX0NIRUNLX0hEUik6IE9iamVjdCBtYWdpYyBudW1iZXIgbXVzdCBtYXRjaCBtb2RlLgoJKHNjYW5fcHJvZ19maWxlKTogT25seSBjaGVjayBmb3Igc2hhcmVkIG9iamVjdCBpZiB2YWxpZCBoZWFkZXIuCglQcmludCBkZWJ1Z2dpbmcgaWYgaGVhZGVyL21vZGUgbWlzbWF0Y2guCgpUdWUgT2N0IDI3IDEwOjE1OjAyIDE5OTggIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQGN5Z251cy5jb20+CgoJQWRkZWQgc3VwcG9ydCBmb3IgYXJtLWVsZi1saW51eCBjb25maWd1cmF0aW9uLCBzdWJtaXR0ZWQgYnkgUGhpbGlwCglCbHVuZGVsbCA8cGJAbmV4dXMuY28udWs+LCBhbmQgaW50ZWdyYXRlZCB0aGlzIHdpdGggdGhlIGFybS1lbGYKCWNvZGUgZGV2ZWxvcGVkIGJ5IENhdGhlcmluZSBNb29yZSA8Y2xtQGN5Z251cy5jb20+LiAgVGhlIGZvbGxvd2luZwoJZmlsZXMgYXJlIGFmZmVjdGVkOgoKCSogY29uZmlndXJlLmluOiBBZGQgYXJtLSotbGludXgtZ251LCBhcm12Mi0qLWxpbnV4IGFuZCBhcm0tKi1lbGYKCXRhcmdldHMuCgoJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGVkLgoKCSogY29uZmlnL2FybS9hb3V0Lmg6IEFkZCBkZWZhdWx0IGRlZmluaXRpb25zIG9mIFJFR0lTVEVSX1BSRUZJWCwKCVVTRVJfTEFCRUxfUFJFRklYIGFuZCBMT0NBTF9MQUJFTF9QUkVGSVguICBNYWtlIG90aGVyIG1hY3JvCglkZWZpbml0aW9ucyBjb25kaXRpb25hbCBvbiB0aGVpciBub3QgaGF2aW5nIGJlZW4gYWxyZWFkeSBkZWZpbmVkLgoKCSogY29uZmlnL2FybS9saW4xZnVuY3MuYXNtOiBBZGQgRUxGIG9ubHkgbWFjcm9zIHRvIGdlbmVyYXRlIC5zaXplCglhbmQgLnR5cGUgZGlyZWN0aXZlcywgYW5kIGFkZCAiKFBMVCkiIHF1YWxpZmljYXRpb24gdG8gZnVuY3Rpb24KCWNhbGxzLgoKCSogY29uZmlnL2FybS9saW51eC5oOiBEZWxldGVkLiAgVGhpcyBmaWxlIGlzIG5vdyBzdXBlcnNlZGVkIGJ5CgllaXRoZXIgbGludXgtZWxmLmggb3IgbGludXgtYW91dC5oLgoKCSogY29uZmlnL2FybS9saW51eC1nYXMuaDogRGVmaW5lIGBpbmhpYml0X2xpYmMnIGlmIGNyb3NzLWNvbXBpbGluZy4KCShDTEVBUl9JTlNOX0NBQ0hFKTogTmV3IG1hY3JvLCBjdXJyZW50bHkgZGlzYWJsZWQgKGF3YWl0aW5nIGtlcm5lbAoJc3VwcG9ydCkuCglNb3ZlIGRlZmluaXRpb25zIGZyb20gb2xkIGxpbnV4LmggZmlsZSBoZXJlLgoKCSogY29uZmlnL2FybS9lbGYuaDogTmV3IGZpbGUuICBHZW5lcmljIEFSTS9FTEYgc3VwcG9ydC4KCgkqIGNvbmZpZy9hcm0vbGludXgtYW91dC5oOiBOZXcgZmlsZS4gIFN1cHBvcnQgZm9yIExpbnV4IHdpdGggYS5vdXQuCgoJKiBjb25maWcvYXJtL2xpbnV4LWVsZi5oOiBOZXcgZmlsZS4gIFN1cHBvcnQgZm9yIExpbnV4IHdpdGggRUxGLgoKCSogY29uZmlnL2FybS9saW51eC1lbGYyNi5oOiBOZXcgZmlsZS4gIFN1cHBvcnQgZm9yIExpbnV4IHdpdGggRUxGCgl1c2luZyB0aGUgMjZiaXQgQVBDUy4KCgkqIGNvbmZpZy9hcm0vdW5rbm93bi1lbGYuaDogTmV3IGZpbGUuICBTdXBwb3J0IGZvciBPUydlcyBvdGhlcgoJdGhhbiBMaW51eCB3aXRoIEVMRi4KCgkqIGNvbmZpZy9hcm0vdC1hcm0tZWxmOiBOZXcgZmlsZS4gIG1ha2VmaWxlIGZyYWdtZW50IGZvciBhcm0tZWxmCglidWlsZHMuCgoJKiBjb25maWcvYXJtL2NvZmYuaDogSW5jbHVkZSBhb3V0LmggZm9yIGJhc2ljIGFzc2VtYmxlciBtYWNyb3MuCglBZGQgc3VwcG9ydCBmb3IgLW1zdHJ1Y3R1cmVfc2l6ZV9ib3VuZGFyeT08bj4gY29tbWFuZCBsaW5lIG9wdGlvbi4KCgkqIGNvbmZpZy9hcm0vYXJtLmg6IEFkZCBzdXBwb3J0IGZvciAtbXN0cnVjdHVyZV9zaXplX2JvdW5kYXJ5PTxuPgoJY29tbWFuZCBsaW5lIG9wdGlvbi4gIE1ha2UgbWFjcm8gZGVmaW5pdGlvbnMgY29uZGl0aW9uYWwgb24gdGhlaXIKCW5vdCBoYXZpbmcgYmVlbiBhbHJlYWR5IGRlZmluZWQuCgoJKiBjb25maWcvYXJtL2FybS5jOiBBZGQgc3VwcG9ydCBmb3IgLW1zdHJ1Y3R1cmVfc2l6ZV9ib3VuZGFyeT08bj4KCWNvbW1hbmQgbGluZSBvcHRpb24uCgoKVHVlIE9jdCAyNyAwODo1Njo0NiAxOTk4ICBBbmRyZXcgTWFjTGVvZCAgPGFtYWNsZW9kQGN5Z251cy5jb20+CgoJKiBkd2FyZm91dC5jIChBU01fT1VUUFVUX0RXQVJGX1NUUklOR19ORVdMSU5FKTogQVNNX09VVFBVVF9EV0FSRl9TVFJJTkcKCWhhcyBiZWVuIGNoYW5nZWQgdG8gbm90IGluY2x1ZGUgYSBuZXdsaW5lLiBVc2UgdGhpcyBtYWNybyBpbnN0ZWFkLgoJKG91dHB1dF9lbnVtZXJhbF9saXN0LCBjb25zdF92YWx1ZV9hdHRyaWJ1dGUsIG5hbWVfYXR0cmlidXRlLAoJY29tcF9kaXJfYXR0cmlidXRlLCBwcm90b3R5cGVkX2F0dHJpYnV0ZSwgcHJvZHVjZXJfYXR0cmlidXRlLAoJaW5saW5lX2F0dHJpYnV0ZSwgcHVyZV9vcl92aXJ0dWFsX2F0dHJpYnV0ZSwgb3V0cHV0X2luaGVyaXRhbmNlX2RpZSwKCWR3YXJmb3V0X2ZpbGVfc2NvcGVfZGVjbCwgZ2VuZXJhdGVfbmV3X3NmbmFtZV9lbnRyeSwKCWdlbmVyYXRlX21hY2luZm9fZW50cnksIGR3YXJmb3V0X2luaXQsIGR3YXJmb3V0X2ZpbmlzaCk6IFVzZQoJQVNNX09VVFBVVF9EV0FSRl9TVFJJTkdfTkVXTElORSBtYWNyby4KCk1vbiBPY3QgMjYgMTM6MzU6MDIgMTk5OCAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGNvbWJpbmUuYyAoc3Vic3QpOiBQcm9jZXNzIHRoZSBpbnB1dHMgdG8gYSBwYXJhbGxlbCBhc21fb3BlcmFuZHMKCW9ubHkgb25jZS4KCk1vbiBPY3QgMjYgMTM6MzI6MzEgMTk5OCAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIHN0bXQuYyAoZXhwYW5kX2FzbV9vcGVyYW5kcyk6IEFjY2VwdCBgPScgb3IgYCsnIGF0IGFueSBwb3NpdGlvbi4KCk1vbiBPY3QgMjYgMTI6NTM6MTQgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogdG0udGV4aSAoQVNNX09VVFBVVF9NQVhfU0tJUF9BTElHTik6IERvY3VtZW50LgoKTW9uIE9jdCAyNiAwMDozNjo1OCAxOTk4ICBKZWZmIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogdmVyc2lvbi5jOiBCdW1wIGZvciBzbmFwc2hvdC4KClN1biBPY3QgMjUgMjM6MzY6NTIgMTk5OCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogc3RtdC5jIChleHBhbmRfZml4dXApOiBTZXQgZml4dXAtPmJlZm9yZV9qdW1wIHRvIGEKCU5PVEVfSU5TTl9ERUxFVEVEIGluc3RlYWQgb2YgYSBOT1RFX0lOU05fQkxPQ0tfQkVHLgoKU3VuIE9jdCAyNSAxNTo0OTo1NyAxOTk4ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBNYWtlZmlsZS5pbiAocmVjb2cubyk6IERlcGVuZCBvbiB0b3BsZXYuaC4KCShpbnNuLWVtaXQubyk6IERlcGVuZCBvbiByZWNvZy5oLgoJKGluc24tcGVlcC5vKTogRGVwZW5kIG9uIHJlY29nLmggYW5kIGluc24tY29uZmlnLmguCgoJKiBjb21iaW5lLmMgKHNpbXBsaWZ5X3NldCk6IFJlbW92ZSB1bnVzZWQgdmFyaWFibGUgYHNjcmF0Y2hlcycuCgoJKiBmaW5hbC5jIChmaW5hbF9zY2FuX2luc24pOiBXcmFwIGRlY2xhcmF0aW9uIG9mIHZhcmlhYmxlcyBgdmxlbicKCWFuZCBgaWR4JyBpbiBtYWNybyBjb25kaXRpb25hbCBjb250cm9sbGluZyB0aGVpciB1c2UuCgoJKiBnZW5lbWl0LmMgKG1haW4pOiBNYWtlIHRoZSBnZW5lcmF0ZWQgb3V0cHV0IGZpbGUgaW5jbHVkZQoJcmVjb2cuaC4gIERvbid0IGhhdmUgaXQgZGVjbGFyZSBgaW5zbl9vcGVyYW5kX2NvbnN0cmFpbnQnLCBzaW5jZQoJd2UgZ2V0IGl0IGZyb20gcmVjb2cuaC4KCgkqIGdlbnBlZXAuYyAobWFpbik6IE1ha2UgdGhlIGdlbmVyYXRlZCBvdXRwdXQgZmlsZSBpbmNsdWRlCglpbnNuLWNvbmZpZy5oIGFuZCByZWNvZy5oLgoKCSogcmVjb2cuYzogSW5jbHVkZSB0b3BsZXYuaC4KCShleHRyYWN0X2luc24pOiBSZW1vdmUgdW51c2VkIHZhcmlhYmxlIGBwJy4KCgkqIHJlZ2NsYXNzLmMgKGZpeF9yZWdpc3Rlcik6IEFkZCBtaXNzaW5nIGJyYWNlcyBhcm91bmQgaW5pdGlhbGl6ZXIKCWZvciBgd2hhdF9vcHRpb24nLgoJKGFsbG9jYXRlX3JlZ19pbmZvKTogTW92ZSB2YXJpYWJsZSBgaScgaW50byB0aGUgc2NvcGUgd2hlcmUgaXQgaXMKCXVzZWQuICBDaGFuZ2UgaXRzIHR5cGUgdG8gYHNpemVfdCcuCgpTdW4gT2N0IDI1IDEzOjEwOjE1IDE5OTggIEJlcm5kIFNjaG1pZHQgIDxjcnV4QHBvb2wuaW5mb3JtYXRpay5yd3RoLWFhY2hlbi5kZT4KCgkqIHJlbG9hZC5jIChwdXNoX3JlbG9hZCk6IFdoZW4gbWVyZ2luZyByZWxvYWRzLCBtYWtlIHN1cmUKCXRoYXQgcmVsb2FkX2luX3JlZyBhbmQgcmVsb2FkX2luIGFyZSBmcm9tIHRoZSBzYW1lIHJlbG9hZCBpbgoJYWxsIGNhc2VzLgoKU3VuIE9jdCAyNSAxMjowNzowMCAxOTk4ICBNdW1pdCBLaGFuICA8a2hhbkB4cmF5bGl0aC53aXNjLmVkdT4KCgkqIGkzODYvY3J0ZGxsLmggKENQUF9QUkVERUZJTkVTKTogRml4IHR5cG8uCgkqIGkzODYvbWluZ3czMi5oIChDUFBfUFJFREVGSU5FUyk6IExpa2V3aXNlLgoKRnJpIE9jdCAyMyAyMzo0MjowMyAxOTk4ICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQGdudS5vcmc+CgoJKiBsb29wLmMgKGxvb3BfaGFzX3RhYmxlanVtcCk6IE5ldyB2YXJpYWJsZS4KCShwcmVzY2FuX2xvb3ApOiBTY2FuIGZvciBpdC4KCShpbnNlcnRfYmN0KTogUmVwbGFjZSBleHBsaWNpdCBzY2FuIHdpdGggdXNlIG9mIGl0LgoJKiByZWdjbGFzcy5jIChyZWdjbGFzcyk6IFJlc3RvcmUgbG9vcCB2YXJpYWJsZSBqLgoJKHJlY29yZF9yZWdfY2xhc3Nlcyk6IERldGVyaW5lIG9wX3R5cGVzIG1vZGlmaWVycyBhbmQgaW5pdGlhbGl6ZQoJY2xhc3Nlc1tpXSBiZWZvcmUgbWF0Y2hpbmcgY29uc3RyYWludHMuICBIYW5kbGUgbWF0Y2hpbmcKCWNvbnN0cmFpbnRzIDUtOS4KCkZyaSBPY3QgMjMgMTM6NTU6NDggMTk5OCAgSmltIFdpbHNvbiAgPHdpbHNvbkBjeWdudXMuY29tPgoKCSogbTMyci9tMzJyLmMgKGdlbl9zcGxpdF9tb3ZlX2RvdWJsZSk6IENhbGwgYWx0ZXJfc3VicmVnLiAgRGVsZXRlCglzdWJyZWcgc3VwcG9ydC4KCkZyaSBPY3QgMjMgMTY6MTk6MjQgMTk5OCAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogbWlwcy5oIChFWFRSQV9TUEVDUyk6IEFkZCBtaXNzaW5nIGluaXRpYWxpemVycy4KCkZyaSBPY3QgMjMgMTY6MDg6MzkgMTk5OCAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogc3BhcmMuaCAoRVhUUkFfU1BFQ1MpOiBBZGQgbWlzc2luZyBpbml0aWFsaXplcnMuCgkoc3BhcmNfZGVmZXJfY2FzZV92ZWN0b3IpOiBQcm92aWRlIGEgcHJvdG90eXBlLgoKCSogc3ZyNC5oIChBU01fT1VUUFVUX0FTQ0lJKTogQ2FzdCBTVFJJTkdfTElNSVQgdG8gKGxvbmcpIHdoZW4KCWNvbXBhcmluZyBpdCB0byB0aGUgcmVzdWx0IG9mIGEgcG9pbnRlciBzdWJ0cmFjdGlvbi4KCkZyaSBPY3QgMjMgMTU6MzQ6MTQgMTk5OCAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogYWxwaGEuYyAob3ZlcnJpZGVfb3B0aW9ucyk6IFVzZSBJU0RJR0lUKCksIG5vdCBpc2RpZ2l0KCkuICBDYXN0Cgl0aGUgYXJndW1lbnQgdG8gKHVuc2lnbmVkIGNoYXIpLgoKCSogYWxwaGEuaCAoRVhUUkFfU1BFQ1MpOiBBZGQgbWlzc2luZyBpbml0aWFsaXplcnMuCgkoQVNNX0dFTkVSQVRFX0lOVEVSTkFMX0xBQkVMKTogRW5zdXJlIHRoZSBhcmd1bWVudCBtYXRjaGVzIHRoZQoJZm9ybWF0IHNwZWNpZmllci4KCkZyaSBPY3QgMjMgMTM6MTI6MzUgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogZmxvdy5jIChsaWZlX2FuYWx5c2lzXzEpOiBFbmFibGUgInJlc2NhbiIgY29kZSBhZnRlciByZWxvYWQuCgkocHJvcGFnYXRlX2Jsb2NrKTogRGVsZXRlIGRlYWQgY29kZSBhZnRlciByZWxvYWQuCgoJKiBzY2hlZC5jICh1cGRhdGVfZmxvd19pbmZvKTogUmV2ZXJ0IE9jdCAxOSwgMTk5OCBjaGFuZ2UuICBCcmluZ3MKCWJhY2sgT2N0IDE1LCAxOTk4IGNoYW5nZS4KCSogaGFpZmEtc2NoZWQuYyAodXBkYXRlX2Zsb3dfaW5mbyk6IExpa2V3aXNlLgoJKiBmbG93LmMgKGxpZmVfYW5hbHlzaXNfMSk6IERlbGV0ZSBDTE9CQkVSIGluc25zIGFmdGVyIHJlbG9hZC4KCgkqIG1uMTAyMDAubWQgKHRydW5jYXRlZCBzaGlmdCk6IEFjY2VwdCBjb25zdGFudCBpbnB1dHMgdG9vLgoKRnJpIE9jdCAyMyAwNDowNjo1NyAxOTk4ICBSaWNoYXJkIEVhcm5zaGF3ICAocmVhcm5zaGFAYXJtLmNvbSkKCgkqIG1hY2htb2RlLmggKG1vZGVfbWFza19hcnJheSk6IE5vIGxvbmdlciBjb25zdC4KCSogcnRsLmMgKGluaXRfcnRsKTogRnVsbHkgaW5pdGlhbGl6ZSBpdCBpZiBFWFRSQV9DQ19NT0RFUyBkZWZpbmVkLgoKRnJpIE9jdCAyMyAxMToxOTowNiAxOTk4ICBNYXJ0aW4gdi4gTPZ3aXMgIDxsb2V3aXNAaW5mb3JtYXRpay5odS1iZXJsaW4uZGU+CgoJKiBmcmFtZS5jOiBTb21ld2hhdCBleHBsYWluIGBGREUnLgoJU3VnZ2VzdGVkIGJ5IEJyZW5kYW4gS2Vob2UKCkZyaSBPY3QgMjMgMDA6NTY6MTEgMTk5OCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZXhwci5jIChwZW5kaW5nX2NoYWluKTogTW92ZSB1cC4KCShzYXZlX2V4cHJfc3RhdHVzKTogRG8gc2F2ZSBwZW5kaW5nX2NoYWluLgoJKHJlc3RvcmVfZXhwcl9zdGF0dXMpOiBBbmQgcmVzdG9yZSBpdC4KCSogZnVuY3Rpb24uaCAoc3RydWN0IGZ1bmN0aW9uKTogQWRkIHBlbmRpbmdfY2hhaW4uCgoxOTk4LTEwLTIzICBIZXJtYW4gQS5KLiB0ZW4gQnJ1Z2dlICA8SGFqLlRlbi5CcnVnZ2VAbmV0LkhDQy5ubD4KCgkqIHJlb3JnLmMgKHJlbGF4X2RlbGF5X3Nsb3RzKTogRml4ZWQgdGVzdCBmb3IgbW9zdGx5X3RydWVfanVtcC4gVGhlCglkaWQgbm90IG1hdGNoIHRoZSBjb2RlLgoKRnJpIE9jdCAyMyAwMDowNzowMSAxOTk4ICBCZXJuZCBTY2htaWR0ICA8Y3J1eEBwb29sLmluZm9ybWF0aWsucnd0aC1hYWNoZW4uZGU+CgoJKiByZWdjbGFzcy5jIChyZWdjbGFzcyk6IEJyZWFrIG91dCBzb21lIGNvZGUgaW50byBuZXcgZnVuY3Rpb24KCXNjYW5fb25lX2luc24sIGFuZCBpbnRvIHJlZ2NsYXNzX2luaXQuCgkoaW5pdF9jb3N0KTogTmV3IHN0YXRpYyB2YXJpYWJsZSwgbW92ZWQgb3V0IG9mIHJlZ2NsYXNzLgoJKHJlZ2NsYXNzX2luaXQpOiBJbml0aWFsaXplIGl0IGhlcmUsIG5vdCBpbiAuCgkoc2Nhbl9vbmVfaW5zbik6IE5ldyBzdGF0aWMgZnVuY3Rpb24sIGJyb2tlbiBvdXQgb2YgcmVnY2xhc3MuCgkqIHJlY29nLmMgKGFwcGx5X2NoYW5nZV9ncm91cCk6IEJyZWFrIG91dCBzb21lIGNvZGUgaW50byBuZXcKCWZ1bmN0aW9uIGluc25faW52YWxpZF9wLgoJKGluc25faW52YWxpZF9wKTogTmV3IHN0YXRpYyBmbiwgYnJva2VuIG91dCBvZiBhcHBseV9jaGFuZ2VfZ3JvdXAuCgpUaHUgT2N0IDIyIDIyOjM0OjQyIDE5OTggIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KCgkqIHJlbG9hZDEuYyAocmVsb2FkX2FzX25lZWRlZCk6IFdoZW4gcmV3cml0ZSBQT1NUX0lOQywgdmVyaWZ5CglyZWdfcmVsb2FkZWRfY29udGVudHMgbWF0Y2hlcyBpbmNyZW1lbnRlZCBwc2V1ZG8uCgoJKiB2ODUwL3Y4NTAuYyAodjg1MF9yZW9yZyk6IENhbGwgYWx0ZXJfc3VicmVnLiAgRGVsZXRlIHN1YnJlZyBzdXBwb3J0LgoKRnJpIE9jdCAyMyAxMToxMTo1NiAxOTk4ICBNaWNoYWVsIEhheWVzICA8bS5oYXllc0BlbGVjLmNhbnRlcmJ1cnkuYWMubno+CgoJKiBydGwuZGVmIChQT1NUX01PRElGWSwgUFJFX01PRElGWSk6IE5ldyBnZW5lcmFsaXplZCBvcGVyYXRvcnMgZm9yCglhZGRyZXNzaW5nIG1vZGVzIHdpdGggc2lkZSBlZmZlY3RzLiAgVGhlc2UgYXJlIGN1cnJlbnRseQoJcGxhY2Vob2xkZXJzIGZvciB0aGUgQzR4IHRhcmdldC4KClRodSBPY3QgMjIgMTY6NDY6MzUgMTk5OCAgQmVybmQgU2NobWlkdCAgPGNydXhAcG9vbC5pbmZvcm1hdGlrLnJ3dGgtYWFjaGVuLmRlPgoKCSogbG9vcC5jIChleHByZXNzX2Zyb20pOiBNYWtlIHN1cmUgdGhhdCB3aGVuIGdlbmVyYXRpbmcgYSBQTFVTIG9mCglhIFBMVVMsIGFueSBjb25zdGFudCBleHByZXNzaW9uIGFwcGVhcnMgb24gdGhlIG91dGVybW9zdCBQTFVTLgoKVGh1IE9jdCAyMiAxNTo0NjoyMyAxOTk4ICBQZXIgQm90aG5lciAgKGJvdGhuZXJAY3lnbnVzLmNvbSkKCgkqIE1ha2VmaWxlLmluIChkaXN0ZGlyLWN2cywgZGlzdGRpci1zdGFydCk6IENsZWFuIHVwIHNvIGl0Cgl3b3JrcyBpZiAiJChzcmNkaXIpIiAhPSAiLiIuCgpXZWQgT2N0IDIxIDE5OjIzOjU5IDE5OTggIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KCgkqIGV4cG1lZC5jIChzdG9yZV9iaXRfZmllbGQpOiBJZiBuZWVkIHRvIGFkZCBhIFNVQlJFRywgdGhlbiByZW1vdmUKCWV4aXN0aW5nIFNVQlJFRyBpZiB3ZSBjYW4sIG90aGVyd2lzZSBhYm9ydC4KCldlZCBPY3QgMjEgMDk6NTg6NTEgMTk5OCAgTWFyayBNaXRjaGVsbCAgPG1hcmtAbWFya21pdGNoZWxsLmNvbT4KCgkqIGMtY29tbW9uLmMgKGNfYXBwbHlfdHlwZV9xdWFsc190b19kZWNsKTogRG9uJ3QgY3Jhc2ggd2hlbgoJYHJlc3RyaWN0JyBpcyBhcHBsaWVkIHRvIGEgbm9uLXBvaW50ZXIgdmFyaWFibGUuCgpXZWQgT2N0IDIxIDA5OjE4OjU4IDE5OTggIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiBpbnZva2UudGV4aTogRG9jdW1lbnQgLWZsYW5nLWlzb2M5eC4KCgkqIE1ha2VmaWxlLmluIChPQkpTKTogQWRkIHNwbGF5LXRyZWUuby4KCShjLWNvbW1vbi5vKTogRGVwZW5kIG9uIHJ0bC5oLgoJKHNwbGF5LXRyZWUubyk6IExpc3QgZGVwZW5kZW5jaWVzIGFuZCBwcm92aWRlIGJ1aWxkIHJ1bGUuCgoJKiBydGwuaCAocmVjb3JkX2FsaWFzX3N1YnNldCk6IE5ldyBmdW5jdGlvbi4KCSogYWxpYXMuYzogSW5jbHVkZSBzcGxheS10cmVlLmguCgkoYWxpYXNfc2V0X2VudHJ5KTogTmV3IHR5cGUuCgkoQ0hFQ0tfQUxJQVNfU0VUU19GT1JfQ09OU0lTVEVOQ1kpOiBSZW1vdmUuCgkoRElGRkVSRU5UX0FMSUFTX1NFVFNfUCk6IFVzZSBtZW1faW5fZGlzam9pbnRfYWxpYXNfc2V0c19wLgoJKG1lbXNfaW5fZGlzam9pbl9hbGlhc19zZXRzX3ApOiBOZXcgZnVuY3Rpb24uCgkoYWxpYXNfc2V0X2NvbXBhcmUpOiBMaWtld2lzZS4KCShpbnNlcnRfc3Vic2V0X2NoaWxkcmVuKTogTGlrZXdpc2UuCgkoZ2V0X2FsaWFzX3NldF9lbnRyeSk6IExpa2V3aXNlLgoKCSogdHJlZS5oIChUWVBFX1JFU1RSSUNUKTogTmV3IG1hY3JvLgoJKFRZUEVfVU5RVUFMSUZJRUQpOiBOZXcgbWFuaWZlc3QgY29uc3RhbnQuCgkoVFlQRV9RVUFMX0NPTlNUKTogTGlrZXdpc2UuCgkoVFlQRV9RVUFMX1ZPTEFUSUxFKTogTGlrZXdpc2UuCgkoVFlQRV9RVUFMX1JFU1RSSUNUKTogTGlrZXdpc2UuCgkodHJlZV90eXBlKTogQWRkIHJlc3RyaWN0X2ZsYWcuICBSZWR1Y2UgY291bnQgb2YgZnJlZSBiaXRzLgoJKERFQ0xfUE9JTlRFUl9BTElBU19TRVQpOiBOZXcgbWFjcm8uCgkoREVDTF9QT0lOVEVSX0FMSUFTX1NFVF9LTk9XTl9QKTogTGlrZXdpc2UuCgkodHJlZV9kZWNsKTogQWRkIHBvaW50ZXJfYWxpYXNfc2V0LgoJKGJ1aWxkX3F1YWxpZmllZF90eXBlKTogTmV3IGZ1bmN0aW9uLgoJKGJ1aWxkX3R5cGVfdmFyaWFudCk6IERlZmluZSBpbiB0ZXJtcyBvZiBidWlsZF9xdWFsaWZpZWRfdHlwZS4KCSogdHJlZS5jIChzZXRfdHlwZV9xdWFscyk6IE5ldyBmdW5jdGlvbi4KCShtYWtlX25vZGUpOiBJbml0aWFsaXplIERFQ0xfUE9JTlRFUl9BTElBU19TRVQuCgkoYnVpbGRfdHlwZV9hdHRyaWJ1dGVfdmFyaWFudCk6IFVzZSBidWlsZF9xdWFsaWZpZWRfdHlwZSBhbmQKCXNldF90eXBlX3F1YWxzLgoJKGJ1aWxkX3R5cGVfdmFyaWFudCk6IFJlbmFtZSwgYW5kIG1vZGlmeSwgdG8gYmVjb21lLi4uCgkoYnVpbGRfcXVhbGlmaWVkX3R5cGUpOiBOZXcgZnVuY3Rpb24uCgkoYnVpbGRfY29tcGxleF90eXBlKTogVXNlIHNldF90eXBlX3F1YWxzLgoKCSogYy10cmVlLmggKENfVFlQRV9PQkpFQ1RfUCk6IE5ldyBtYWNyby4KCShDX1RZUEVfRlVOQ1RJT05fUCk6IExpa2V3aXNlLgoJKENfVFlQRV9JTkNPTVBMRVRFX1ApOiBMaWtld2lzZS4KCShDX1RZUEVfT0JKRUNUX09SX0lOQ09NUExFVEVfUCk6IExpa2V3aXNlLgoJKGNfYXBwbHlfdHlwZV9xdWFsc190b19kZWNsKTogTmV3IGZ1bmN0aW9uLgoJKGNfYnVpbGRfcXVhbGlmaWVkX3R5cGUpOiBOZXcgZnVuY3Rpb24uCgkoY19idWlsZF90eXBlX3ZhcmlhbnQpOiBEZWZpbmUgaW4gdGVybXMgb2YgY19idWlsZF9xdWFsaWZpZWRfdHlwZS4KCShmbGFnX2lzb2M5eCk6IERlY2xhcmUuCgkqIGMtdHlwZWNrLmMgKHF1YWxpZnlfdHlwZSk6IFVzZSBjX2J1aWxkX3F1YWxpZmllZF90eXBlLgoJKGNvbW1vbl90eXBlKTogQ2hhbmdlIHRvIHVzZSBUWVBFX1FVQUxTLgoJKGNvbXB0eXBlcyk6IExpa2V3aXNlLgoJKGNvbnZlcnRfZm9yX2Fzc2lnbm1lbnQpOiBMaWtld2lzZS4KCSogYy1hdXgtaW5mby5jIChnZW5fdHlwZSk6IExpa2V3aXNlLiAgRGVhbCB3aXRoIGByZXN0cmljdCcuCgkqIGMtZGVjbC5jIChmbGFnX2lzb2M5eCk6IERlZmluZS4KCShjX2RlY29kZV9vcHRpb24pOiBIYW5kbGUgLWZsYW5nLWlzb2M5eC4KCShncm9rZGVjbGFyYXRvcik6IFVwZGF0ZSB0byBoYW5kbGUgcmVzdHJpY3QuICBVc2UgVFlQRV9RVUFMUywKCWNfYnVpbGRfcXVhbGlmaWVkX3R5cGUsIGV0Yy4gIFVzZSBjX2FwcGx5X3R5cGVfcXVhbHNfdG9fZGVjbC4KCSogYy1sZXguYyAoaW5pdF9sZXgpOiBEZWFsIHdpdGggcmVzdHJpY3QuCgkoaW5pdF9sZXgpOiBEb24ndCB0cmVhdCByZXN0cmljdCBhcyBhIHJlc2VydmVkIHdvcmQgaW4KCS10cmFkaXRpb25hbCBtb2RlLCBvciB3aXRob3V0IC1mbGFuZy1pc29jOXguCgkqIGMtbGV4LmggKHJpZCk6IEFkZCBSSURfUkVTVFJJQ1QuCgkqIGMtcGFyc2UuZ3BlcmYgKHJlc3RyaWN0LCBfX3Jlc3RyaWN0LCBfX3Jlc3RyaWN0X18pOiBNYWtlCgllcXVpdmFsZW50IHRvIFJJRF9SRVNUUklDVC4KCSogYy1wYXJzZS5pbiAoVFlQRV9RVUFMKTogVXBkYXRlIGNvbW1lbnQuCgkqIGMtY29tbW9uLmM6IEluY2x1ZGUgcnRsLmguCgkoY19maW5kX2Jhc2VfZGVjbCk6IE5ldyBmdW5jdGlvbi4KCShjX2J1aWxkX3R5cGVfdmFyaWFudCk6IFJlbmFtZSwgYW5kIG1vZGlmeSwgdG8gYmVjb21lIC4uLgoJKGNfYnVpbGRfcXVhbGlmaWVkX3R5cGUpOiBOZXcgZnVuY3Rpb24uCgkoY19hcHBseV90eXBlX3F1YWxzX3RvX2RlY2wpOiBMaWtld2lzZS4KCShjX2dldF9hbGlhc19zZXQpOiBGb3IgSU5ESVJFQ1RfUkVGcywgY2hlY2sgdG8gc2VlIGlmIHdlIGNhbiBmaW5kCglhIHBhcnRpY3VsYXIgYWxpYXMgc2V0IGZvciB0aGUgcmVmZXJlbmNlLgoJKiB0b3BsZXYuYyAoZG9jdW1lbnRlZF9sYW5nX29wdGlvbnMpOiBBZGQgLWZsYW5nLWlzb2M5eC4KCldlZCBPY3QgMjEgMDk6MTU6MDYgMTk5OCAgTmljayBDbGlmdG9uICA8bmlja2NAY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy9hcm0vYXJtLmggKFRBUkdFVF9TV0lUQ0hFUyk6IERvY3VtZW50IGFybSBzcGVjaWZpYwoJY29tbWFuZCBsaW5lIHN3aXRjaGVzLgoKVHVlIE9jdCAyMCAxMDowNDo1MSAxOTk4ICBHcmFoYW0gIDxncmFoYW1zQHJjcC5jby51az4KCgkqIHJlbG9hZC5jIChsb2NfbWVudGlvbmVkX2luX3ApOiBBZGQgbWlzc2luZyBicmFjZXMgdG8gYmluZAoJZWxzZSB0byBjb3JyZWN0IGlmLgoKTW9uIE9jdCAxOSAxNjozNDowNSAxOTk4ICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CgoJKiBnY2MuYyAob3B0aW9uX21hcCk6IEFkZGVkIC0tY2xhc3NwYXRoIGFuZCAtLUNMQVNTUEFUSC4KClR1ZSBPY3QgMjAgMTA6NTk6MDIgMTk5OCAgR2F2aW4gUm9taWctS29jaCAgPGdhdmluQGN5Z251cy5jb20+CgoJKiByZWdjbGFzcy5jIChmaXhfcmVnaXN0ZXIpOiBBZGQgZXJyb3IgbWVzc2FnZS4KCSogaW52b2tlLnRleGkgKC1mY2FsbC11c2VkLVJFRywtZmNhbGwtc2F2ZWQtUkVHKTogTm90ZSB0aGUKCSAgbmV3IGVycm9yIG1lc3NhZ2UuCgpUdWUgT2N0IDIwIDEwOjEyOjE3IDE5OTggIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGMtZGVjbC5jICh3YXJuX21pc3Npbmdfbm9yZXR1cm4pOiBOZXcgZ2xvYmFsIHZhcmlhYmxlLgoJKGNfZGVjb2RlX29wdGlvbik6IENoZWNrIGZvciBuZXcgZmxhZ3MgLVd7bm8tfW1pc3Npbmctbm9yZXR1cm4uCgkoZmluaXNoX2Z1bmN0aW9uKTogSW1wbGVtZW50IG1pc3Npbmcgbm9yZXR1cm4gd2FybmluZy4KCgkqIGMtdHJlZS5oICh3YXJuX21pc3Npbmdfbm9yZXR1cm4pOiBEZWNsYXJlIGV4dGVybi4KCgkqIGludm9rZS50ZXhpOiBEb2N1bWVudCBuZXcgZmxhZ3MuCgoJKiB0b3BsZXYuYyAoZG9jdW1lbnRlZF9sYW5nX29wdGlvbnMpOiBBZGQgZGVzY3JpcHRpb24uCgpUdWUgT2N0IDIwIDIyOjE2OjExIDE5OTggIE1pY2hhZWwgSGF5ZXMgIDxtLmhheWVzQGVsZWMuY2FudGVyYnVyeS5hYy5uej4KCgkqIGNvbmZpZy9jNHgvYzR4LmMgKGM0eF9wYXJhbGxlbF9wcm9jZXNzKTogRGlzYWJsZSB1bnRpbCBCQ1QKCWxvb3Agb3B0aW1pemF0aW9uIHN0YWJsZSBmb3IgdGhlIEM0eC4KCShjNHhfcnB0Yl9pbmZvX3QsIGM0eF9kdW1wLCBjNHhfcnB0Yl9pbl9yYW5nZSwgYzR4X3JwdGJfdW5qdW1wZWRfbG9vcCwKCWM0eF9ycHRiX2ZpbmRfY29tcF9hbmRfanVtcCwgYzR4X3JwdGJfbG9vcF9pbmZvX2dldCwKCWM0eF9ycHRiX2VtaXRfaW5pdCwgYzR4X3JwdGJfcHJvY2Vzcyk6IERlbGV0ZWQgKHN1cGVyc2VkZWQgYnkgQkNUCglsb29wIG9wdGltaXphdGlvbikuCgkoYzR4X2FkZHJlc3NfY29uZmxpY3QpOiBCZSBtb3JlIHBhcmFub2lkIHdoZW4gcGFja2luZyBhIHZvbGF0aWxlCgltZW1yZWYgaW4gYSBwYXJhbGxlbCBsb2FkL3N0b3JlLgoKVHVlIE9jdCAyMCAyMTo1NjowNSAxOTk4ICBNaWNoYWVsIEhheWVzICA8bS5oYXllc0BlbGVjLmNhbnRlcmJ1cnkuYWMubno+CgoJKiBjb25maWcvYzR4L2M0eC5tZCAocmVwZWF0X2Jsb2NrX3RvcCwgcmVwZWF0X2Jsb2NrX2VuZCwKCXJlcGVhdF9ibG9ja19maWxsZXIpOiBEZWxldGVkLgoJKCphc2hscWkzX3NldCwgKmFzaHJxaTNfY29uc3Rfc2V0LCAqYXNocnFpM19ub25jb25zdF9jbG9iYmVyKToKCUNvbmRpdGlvbiBjb2RlIG5vdCBzZXQgaWYgZGVzdGluYXRpb24gcmVnaXN0ZXIgZnJvbSAnYycgY2xhc3MuCgkoKnN1YmJxaTNfY2FycnlfY2xvYmJlcik6IEZpeCB0eXBvLgoKMTk5OC0xMC0xOCAgSGVybWFuIEEuSi4gdGVuIEJydWdnZSAgPEhhai5UZW4uQnJ1Z2dlQG5ldC5IQ0Mubmw+CgoJKiByZW9yZy5jIChzdGVhbF9kZWxheV9saXN0X2Zyb21fdGFyZ2V0KTogQ2hlY2sgZm9yIGluc25zIHRoYXQKCW1vZGlmeSB0aGUgY29uZGl0aW9uIGNvZGVzIGFuZCBlZmZlY3QgdGhlIGRpcmVjdGlvbiBvZiB0aGUganVtcAoJaW4gdGhlIHNlcXVlbmNlLgoKU2F0IE9jdCAxNyAxMzowOTowOSAxOTk4ICBHcmFoYW0gIDxncmFoYW1zQHJjcC5jby51az4KCgkqIGZ1bmN0aW9uLmMgKHB1cmdlX2FkZHJlc3NvZl8xKTogUmVwbGFjZSBjYWxsIHRvCgllbWl0X2luc25zX2JlZm9yZSgpIHdpdGggZW1pdF9pbnNuX2JlZm9yZSgpLgoKTW9uIE9jdCAxOSAxOTozNDowMyAxOTk4ICBNaWtlIFN0dW1wICA8bXJzQHdycy5jb20+CgoJKiBsaWJnY2MyLmMgKF9fcHVyZV92aXJ0dWFsKTogQ2FsbCBfX3Rlcm1pbmF0ZSBpbnN0ZWFkIG9mIF9leGl0LgoKTW9uIE9jdCAxOSAxMzoyNjoyNCAxOTk4ICBCZXJuZCBTY2htaWR0ICA8Y3J1eEBwb29sLmluZm9ybWF0aWsucnd0aC1hYWNoZW4uZGU+CgoJKiBqdW1wLmMgKHNldHNfY2MwX3ApOiBDb21waWxlIG9ubHkgaWYgSEFWRV9jYzAuCgpNb24gT2N0IDE5IDExOjQwOjU2IDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGdjc2UuYyAoY29tcHV0ZV9oYXNoX3RhYmxlKTogQ29ycmVjdGx5IGlkZW50aWZ5IGhhcmQgcmVncyB3aGljaCBhcmUKCWNsb2JiZXJlZCBhY3Jvc3MgY2FsbHMuCgoJKiBsb29wLmMgKHNjYW5fbG9vcCk6IEJlIG1vcmUgc2VsZWN0aXZlIGFib3V0IHdoYXQgaW52YXJpYW50cyBhcmUKCW1vdmVkIG91dCBvZiBhIGxvb3AuCgpNb24gT2N0IDE5IDEwOjQ2OjU4IDE5OTggIEplZmYgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiB2ZXJzaW9uLmM6IEJ1bXAgZm9yIHNuYXBzaG90LgoKTW9uIE9jdCAxOSAxMTo0MDo1NiAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBsaWJnY2MyLmMgKGVoX2NvbnRleHRfc3RhdGljKTogRG8gbm90IGNhbGwgbWFsbG9jIHRvIGFsbG9jYXRlIHRoZQoJc3RhdGljIGVoX2NvbnRleHQgc3RydWN0dXJlLgoKTW9uIE9jdCAxOSAxMDo0NTo0MCAxOTk4ICBCZXJuZCBTY2htaWR0ICA8Y3J1eEBwb29sLmluZm9ybWF0aWsucnd0aC1hYWNoZW4uZGU+CgoJKiBjb21iaW5lLmMgKHJlY29nX2Zvcl9jb21iaW5lKTogTG9zZSBQQURERURfU0NSQVRDSEVTIGFyZy4gIEFsbAoJY2FsbGVycyBjaGFuZ2VkLgoJKHRyeV9jb21iaW5lKTogRG9uJ3QgdXBkYXRlIG1heF9zY3JhdGNoLgoJKiBmbG93LmMgKG1heF9zY3JhdGNoLCBudW1fc2NyYXRjaCk6IERlbGV0ZSB2YXJpYWJsZXMuCgkobGlmZV9hbmFseXNpc18xKTogRG9uJ3QgaW5pdGlhbGl6ZSBtYXhfc2NyYXRjaC4KCShwcm9wYWdhdGVfYmxvY2spOiBEb24ndCB1cGRhdGUgbWF4X3NjcmF0Y2guCgkobWFya19zZXRfMSk6IERvbid0IGluY3JlbWVudCBudW1fc2NyYXRjaC4KCSogcmVncy5oIChtYXhfc2NyYXRjaCk6IERlbGV0ZSBkZWNsYXJhdGlvbi4KCk1vbiBPY3QgMTkgMTA6Mjg6MTUgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogcmVsb2FkMS5jIChyZWxvYWRfcmVnX2ZyZWVfYmVmb3JlX3ApOiBIYWNrLiAgUmV0dXJuIDAgaWYgRVFVSVYKCWlzIG5vbnplcm8uICBUaGlzIGlzIHRlbXBvcmFyeSEKCgkqIHNjaGVkLmMgKHVwZGF0ZV9mbG93X2luZm8pOiBIYW5kbGUgZGVhdGggbm90ZXMgbWFkZSBpbnZhbGlkIGJ5CglpbnN0cnVjdGlvbiBzcGxpdHRpbmcuICBQYXJ0aWFsbHkgcmV2ZXJ0cyBPY3QgMTUsIDE5OTggcGF0Y2guCgkqIGhhaWZhLXNjaGVkLmMgKHVwZGF0ZV9mbG93X2luZm8pOiBMaWtld2lzZS4KClN1biBPY3QgMTggMTc6MzE6MjYgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogZnVuY3Rpb24uYyAodW5pbml0aWFsaXplZF92YXJzX3dhcm5pbmcpOiBEbyBub3Qgd2FybiBmb3IgYSBWQVJfREVDTAoJaWYgaXQgaGFzIGEgbm9uemVybyBERUNMX0lOSVRJQUwuCgpTYXQgT2N0IDE3IDIzOjE4OjA4IDE5OTggIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIE1ha2VmaWxlLmluIChmbG93Lm8pOiBEZXBlbmQgb24gcmVjb2cuaC4KCgkqIGNwcGxpYi5oIChkaXJlY3RpdmVfdGFibGUpOiBBZGQgbWlzc2luZyBpbml0aWFsaXppZXJzLgoJKGZpbmNsdWRlKTogQ2hhbmdlIHR5cGUgb2YgdmFyaWFibGUgYGJzaXplJyB0byBzaXplX3QuCgoJKiBjc2UuYyAocnR4X2Nvc3QpOiBNYXJrIHBhcmFtZXRlciBgb3V0ZXJfY29kZScgd2l0aCBBVFRSSUJVVEVfVU5VU0VELgoKCSogZHdhcmZvdXQuaCAoZHdhcmZvdXRfbGFiZWwpOiBXcmFwIHByb3RvdHlwZSBpbiBtYWNybyBSVFhfQ09ERS4KCgkqIGZpeC1oZWFkZXIuYyAobG9va3VwX3N0ZF9wcm90byk6IENhc3QgdGhlIHJlc3VsdCBvZiBgc3RybGVuJyB0bwoJYGludCcgd2hlbiBjb21wYXJpbmcgYWdhaW5zdCBvbmUuCgkoY3BwX2ZpbGVfbGluZV9mb3JfbWVzc2FnZSk6IE1hcmsgcGFyYW1ldGVyIGBwZmlsZScgd2l0aAoJQVRUUklCVVRFX1VOVVNFRC4KCShjcHBfZmF0YWwpOiBNYXJrIHBhcmFtZXRlciBgcGZpbGUnIHdpdGggQVRUUklCVVRFX1VOVVNFRC4KCgkqIGZsb3cuYzogSW5jbHVkZSByZWNvZy5oLgoJKHNiaXRtYXBfY29weSk6IENhc3QgYXJndW1lbnRzIDEgJiAyIG9mIGBiY29weScgdG8gKFBUUikuCgoJKiBmdW5jdGlvbi5jICh0aHJlYWRfcHJvbG9ndWVfYW5kX2VwaWxvZ3VlX2luc25zKTogTWFyayBwYXJhbWV0ZXIKCWBmJyB3aXRoIEFUVFJJQlVURV9VTlVTRUQuCgkocmVwb3NpdGlvbl9wcm9sb2d1ZV9hbmRfZXBpbG9ndWVfbm90ZXMpOiBMaWtld2lzZS4KCgkqIGdlbm9waW5pdC5jIChnZW5faW5zbik6IENhc3QgYXJndW1lbnQgb2YgY3R5cGUgZnVuY3Rpb25zIHRvCglgdW5zaWduZWQgY2hhcicuCgoJKiBoYWlmYS1zY2hlZC5jOiBJbmNsdWRlIHJlY29nLmguCgkoYmxvY2thZ2VfcmFuZ2UpOiBDYXN0IHJlc3VsdCBvZiBVTklUX0JMT0NLRUQgbWFjcm8gdG8gKGludCkgd2hlbgoJY29tcGFyaW5nIGFnYWluc3Qgb25lLgoKCSogbGliZ2NjMi5hIChfX3Rocm93KTogUmV2ZXJ0IEFUVFJJQlVURV9VTlVTRUQgY2hhbmdlIGZvciBub3cuCgoJKiBtaXBzLXRmaWxlLmMgKHBhcnNlX2VuZCk6IENhc3QgdGhlIGFyZ3VtZW50IG9mIGN0eXBlIGZ1bmN0aW9uIHRvCglgdW5zaWduZWQgY2hhcicuCgkocGFyc2VfZW50KTogTGlrZXdpc2UuCgkocGFyc2VfaW5wdXQpOiBMaWtld2lzZS4KCgkqIG9wdGFicy5jIChpbml0X2xpYmZ1bmNzKTogTGlrZXdpc2UuCgoJKiBwcm90b2l6ZS5jIChmaW5kX3JpZ2h0bW9zdF9mb3JtYWxzX2xpc3QpOiBMaWtld2lzZS4KCgkqIHJlY29nLmggKGNvbnN0X2RvdWJsZV9vcGVyYW5kKTogRml4IHR5cG8gaW4gcHJvdG90eXBlLgoKCSogdGxpbmsuYyAoc2Nhbl9saW5rZXJfb3V0cHV0KTogQ2FzdCB0aGUgYXJndW1lbnQgb2YgY3R5cGUKCWZ1bmN0aW9uIHRvIGB1bnNpZ25lZCBjaGFyJy4KCgkqIHRvcGxldi5jIChjaGVja19sYW5nX29wdGlvbik6IENhc3QgdGhlIHJlc3VsdCBvZiBgc3RybGVuJyB0bwoJYGludCcgd2hlbiBjb21wYXJpbmcgYWdhaW5zdCBvbmUuCgpTYXQgT2N0IDE3IDEzOjA5OjA5IDE5OTggIEdyYWhhbSAgPGdyYWhhbXNAcmNwLmNvLnVrPgoKCSogZ2NzZS5jIChkdW1wX2N1aWRfdGFibGUpOiBDb3JyZWN0IHR5cG8uCgpTYXQgT2N0IDE3IDExOjAyOjQ3IDE5OTggIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQGN5Z251cy5jb20+CgoJKiB0b3BsZXYuYyAoZGlzcGxheV9oZWxwKTogUHJlcGVuZCAnLW0nIHRvIHRhcmdldCBzcGVjaWZpYwoJb3B0aW9ucy4KCShjaGVja19sYW5nX29wdGlvbik6IElnbm9yZSB0ZXh0IGFmdGVyIGVuZCBvZiBmaXJzdCB3b3JkIG9mIGEKCWxhbmd1YWdlIHNwZWNpZmljIG9wdGlvbi4KClNhdCBPY3QgMTcgMDI6MjY6MDMgMTk5OCAgQmVybmQgU2NobWlkdCAgPGNydXhAcG9vbC5pbmZvcm1hdGlrLnJ3dGgtYWFjaGVuLmRlPgoKCSogcmVsb2FkMS5jIChyZWdfdXNlZF9ieV9wc2V1ZG8pOiBOZXcgc3RhdGljIHZhcmlhYmxlLgoJKGNob29zZV9yZWxvYWRfcmVncyk6IEluaXRpYWxpemUgaXQuCglVc2UgaXQgaW5zdGVhZCBvZiB0ZXN0aW5nIHNwaWxsX3JlZ19vcmRlciB0byBkZXRlcm1pbmUgd2hldGhlciBhCglwc2V1ZG8gaXMgbGl2ZSBpbiBhIGhhcmQgcmVnaXN0ZXIgYWNyb3NzIHRoZSBjdXJyZW50IGluc24uCglGaXggYSB0eXBvIGluIGEgcmVmZXJlbmNlIHRvIHJlbG9hZF9yZWdfcnR4LgoKCSogZmxvdy5jIChwcm9wYWdhdGVfYmxvY2spOiBSZXBsYWNlIGNvZGUgdGhhdCBjb21wdXRlcyBhbmQgdXNlcwoJcmVnc19zb21ldGltZXNfbGl2ZSB3aXRoIHNpbXBsZXIgY29kZSB0aGF0IGp1c3Qgd2Fsa3MgdGhlIHNldCBvZgoJY3VycmVudGx5IGxpdmUgcmVnaXN0ZXJzLgoKCSogTWFrZWZpbGUuaW4gKGluc24tZXh0cmFjdC5vKTogRml4IGRlcGVuZGVuY2llcy4KCSogZ2VuZXh0cmFjdC5jIChtYWluKTogR2VuZXJhdGUgaW5jbHVkZXMgZm9yIGluc24tY29uZmlnLmggYW5kCglyZWNvZy5oLgoJRGVsZXRlIGdlbmVyYXRpb24gb2YgZGVjbGFyYXRpb25zIHdoaWNoIGFyZSBub3cgaW4gcmVjb2cuaC4KCSogZ2VucmVjb2cuYyAobWFpbik6IERlbGV0ZSBnZW5lcmF0aW9uIG9mIGRlZmluaXRpb25zIHdoaWNoIGFyZQoJbm93IGluIHJlY29nLmMuCgkqIGxvY2FsLWFsbG9jLmMgKGJsb2NrX2FsbG9jKTogVXNlIGV4dHJhY3RfaW5zbiBhbmQgdGhlIHZhcmlhYmxlcwoJaXQgc2V0cyB1cCBpbnN0ZWFkIG9mIGxvb2tpbmcgdXAgdmFsdWVzIGJ5IGluc25fY29kZS4KCSogcmVjb2cuYyAocmVjb2dfb3BlcmFuZCwgcmVjb2dfb3BlcmFuZF9sb2MsIHJlY29nX2R1cF9sb2MsCglyZWNvZ19kdXBfbnVtKTogRGVmaW5lIGhlcmUgaW5zdGVhZCBvZiBnZW5lcmF0aW5nIHRoZSBkZWZpbml0aW9uIGluCglnZW5yZWNvZy5jLgoJKHJlY29nX25fb3BlcmFuZHMsIHJlY29nX25fZHVwcywgcmVjb2dfbl9hbHRlcm5hdGl2ZXMsCglyZWNvZ19vcGVyYW5kX21vZGUsIHJlY29nX2NvbnN0cmFpbnRzLCByZWNvZ19vcGVyYW5kX2FkZHJlc3NfcCk6CglOZXcgdmFyaWFibGVzLgoJKGV4dHJhY3RfaW5zbik6IE5ldyBmdW5jdGlvbi4KCSogcmVjb2cuaCAoZXh0cmFjdF9pbnNuKTogRGVjbGFyZSBmdW5jdGlvbi4KCSh3aGljaF9hbHRlcm5hdGl2ZSwgcmVjb2dfbl9vcGVyYW5kcywgcmVjb2dfbl9kdXBzLAoJcmVjb2dfbl9hbHRlcm5hdGl2ZXMsIHJlY29nX29wZXJhbmRfbW9kZSwgcmVjb2dfY29uc3RyYWludHMsCglyZWNvZ19vcGVyYW5kX2FkZHJlc3NfcCk6IERlY2xhcmUgdmFyaWFibGVzLgoJKiByZWdjbGFzcy5jIChuX29jY3VycmVuY2VzKTogTmV3IHN0YXRpYyBmdW5jdGlvbi4KCSogcmVsb2FkLmMgKG5fb2NjdXJyZW5jZXMpOiBEZWxldGUgZnVuY3Rpb24uCgkoZmluZF9yZWxvYWRzKTogVXNlIGV4dHJhY3RfaW5zbi4KCSogcmVsb2FkLmggKG5fb2NjdXJyZW5jZXMpOiBEZWxldGUgZGVjbGFyYXRpb24uCgpTYXQgT2N0IDE3IDAxOjE3OjUxIDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHJlbG9hZDEuYyAocmVsb2FkX2FzX25lZWRlZCk6IEZpeCB0ZXN0IGZvciB3aGVuIHRvIGNhbGwKCXVwZGF0ZV9lbGltaW5hYmxlX29mZnNldHMuCgpGcmkgT2N0IDE2IDIwOjQwOjUwIDE5OTggIEoib3JuIFJlbm5lY2tlICA8YW15bGFhckBjeWdudXMuY28udWs+CgoJRml4IGNvbnNpc3RlbmN5IHByb2JsZW1zIHdpdGggcmVnX2VxdWl2X3ttZW0sYWRkcmVzc307CglJbXByb3ZlIHJlbG9hZCBpbmhlcml0YW5jZTsKCgkqIHJlbG9hZC5jIChyZWxvYWRfb3V0X3JlZyk6IE5ldyB2YXJpYWJsZS4KCShsb2NfbWVudGlvbmVkX2luX3AsIHJlbW92ZV9hZGRyZXNzX3JlcGxhY2VtZW50cyk6IE5ldyBmdW5jdGlvbnMuCgkocmVtb3ZlX3JlcGxhY2VtZW50cyk6IERlbGV0ZWQuCgkocHVzaF9yZWxvYWQpOiBTZXQgcmVsb2FkX291dF9yZWdbaV0uCglXaGVuIG1lcmdpbmcsIGFsc28gc2V0IHJlbG9hZF97aW4sb3V0fV9yZWdbaV0sIGFuZCByZW1vdmUKCWR1cGxpY2F0ZSBhZGRyZXNzIHJlbG9hZHMuCgkoY29tYmluZV9yZWxvYWRzKTogQ29weSByZWxvYWRfb3V0X3JlZ1tpXS4KCShmaW5kX3JlbG9hZHMpOiBEbyBtYWtlX21lbWxvYyBzdWJzdGl0dXRpb24gYWxzbyB3aGVuCglyZWdfZXF1aXZfbWVtb3J5X2xvY1tyZWdub10gYW5kIG51bV9ub3RfYXRfaW5pdGlhbF9vZmZzZXQKCWFyZSBib3RoIG5vbnplcm8uCglJbmNsdWRlICpyZWNvZ19vcGVyYW5kX2xvYyBpbiBjb21tdXRhdGl2aXR5IG9wZXJhbmQgY2hhbmdlcy4KCUdlbmVyYXRlIG9wdGlvbmFsIG91dHB1dCByZWxvYWRzLgoJRGVsZXRlIHJlZmVyZW5jZSB0byBuX21lbWxvY3MuICBEb24ndCBzZXQgKnJlY29nX29wZXJhbmRfbG9jIGJlZm9yZQoJcHJvY2Vzc2luZyBvcGVyYW5kcy4gIENhbGwgbWFrZV9tZW1sb2MgaW4gcmVnX2VxdWl2X2FkZHJlc3MgY29kZS4KCVNldCAqcmVjb2dfb3BlcmFuZF9sb2Mgb25seSBhZnRlciBwcm9jZXNzaW5nIG9wZXJhbmRzLCBhbmQgb25seQoJaWYgcmVwbGFjZSBpcyB0cnVlLiAgUmV0dXJuIGEgdmFsdWUuCglXaGVuIGNoYW5naW5nIGFkZHJlc3MgcmVsb2FkIHR5cGVzIGZvciBvcGVyYW5kcyB0aGF0IGRpZG4ndCBnZXQKCXJlbG9hZGVkLCB1c2UgUkVMT0FEX0ZPUl9PUEFERFJfQUREUkVTUyBmb3IKCVJFTE9BRF9GT1JfSU5QQUREUl9BRERSRVNTIC8gUkVMT0FEX0ZPUl9PVVRBRERSX0FERFJFU1MgcmVsb2Fkcy4KCURvbid0IGVtaXQgVVNFcyBmb3IgcHNldWRvIFNVQlJFR3Mgd2hlbiBub3QgcmVwbGFjaW5nLgoJKGZpbmRfcmVsb2Fkc19hZGRyZXNzKTogRG8gbWFrZV9tZW1sb2Mgc3Vic3RpdHV0aW9uIGFsc28gd2hlbgoJcmVnX2VxdWl2X21lbW9yeV9sb2NbcmVnbm9dIGFuZCBudW1fbm90X2F0X2luaXRpYWxfb2Zmc2V0CglhcmUgYm90aCBub256ZXJvLgoJKGZpbmRfcmVsb2Fkc190b3BsZXYpOiBMaWtld2lzZS4KCUNhbGwgbWFrZV9tZW1sb2MgaW4gcmVnX2VxdWl2X2FkZHJlc3MgY29kZS4KCShkZWJ1Z19yZWxvYWRfdG9fc3RyZWFtKTogQWRkIGNvZGUgdG8gb3V0cHV0IHJlbG9hZF9vdXRfcmVnLgoJKG1ha2VfbWVtbG9jKTogRGVsZXRlIGxvY2FsIHZhcmlhYmxlIGksIGlmZGVmZWQgb3V0IGNvZGUsIGFuZAoJcmVmZXJlbmNlcyB0byBtZW1sb2NzIGFuZCBuX21lbWxvY3MuCgkobWVtbG9jcywgbl9tZW1sb2NzKTogRGVsZXRlLgoJKHB1c2hfc2Vjb25kYXJ5X3JlbG9hZCk6IENsZWFyIHJlbG9hZF9vdXRfcmVnLgoJKGZpbmRfcmVsb2Fkc19hZGRyZXNzXzEpOiBQcm92aWRlIG1lbXJlZmxvYyBhcmd1bWVudCB0byBhbGwgY2FsbHMKCXRvIGZpbmRfcmVsb2Fkc19hZGRyZXNzLgoJSW4gQVVUT19JTkMgY29kZSwgaGFuZGxlIG5vbi1kaXJlY3RseSBhZGRyZXNzYWJsZSBlcXVpdmFsZW5jZXMgcHJvcGVybHkuCgkqIHJlbG9hZC5oIChyZWxvYWRfb3V0X3JlZywgbnVtX25vdF9hdF9pbml0aWFsX29mZnNldCk6IERlY2xhcmUuCgkoZmluZF9yZWxvYWRzKTogQWRkIHJldHVybiB0eXBlLgoJKHJlbW92ZV9hZGRyZXNzX3JlcGxhY2VtZW50cywgZGVhbGxvY2F0ZV9yZWxvYWRfcmVnKTogRGVjbGFyZS4KCSogcmVsb2FkMS5jIChudW1fbm90X2F0X2luaXRpYWxfb2Zmc2V0KTogTm8gbG9uZ2VyIHN0YXRpYy4KCShkZWxldGVfYWRkcmVzc19yZWxvYWRzLCBkZWxldGVfYWRkcmVzc19yZWxvYWRzXzEpOiBMaWtld2lzZS4KCShkZWFsbG9jYXRlX3JlbG9hZF9yZWcpOiBOZXcgZnVuY3Rpb24uCgkoc3BpbGxfcmVnX3N0b3JlZF90byk6IE5ldyBhcnJheS4KCShlbGltaW5hdGVfcmVncyk6IERvbid0IHN1YnN0aXR1dGUgZnJvbSByZWdfZXF1aXZfbWVtb3J5X2xvYy4KCShlbGltaW5hdGVfcmVnc19pbl9pbnNuKTogTW92ZSBhc3NpZ25tZW50cyBvZiBwcmV2aW91c19vZmZzZXQgYW5kCgltYXhfb2Zmc2V0IGZpZWxkcywgYW5kIHJlY2FsY3VsYXRpb24gb2YgbnVtX25vdF9hdF9pbml0aWFsX29mZnNldAoJaW50byBuZXcgc3RhdGljIGZ1bmN0aW9uOgoJKHVwZGF0ZV9lbGltaW5hYmxlX29mZnNldHMpIC4KCShyZWxvYWRfYXNfbmVlZGVkKTogQ2FsbCB1cGRhdGVfZWxpbWluYWJsZV9vZmZzZXRzIGFmdGVyIGNhbGxpbmcKCWZpbmRfcmVsb2Fkcy4KCUNhbGwgZm9yZ2V0X29sZF9yZWxvYWRzXzEgd2l0aCBjb250ZW50cyBvZiByZWxvYWRlZCBhdXRvX2luYwoJZXhwcmVzc2lvbnMgaWYgdGhlIGFjdHVhbCBhZGRyZXNzaW5nIGNhbid0IGJlIGNoYW5nZWQgdG8gbWF0Y2ggdGhlCglhdXRvX2luYy4KCShjaG9vc2VfcmVsb2FkX3JlZ3MpOiBGb3IgaW5oZXJpdGFuY2UsIHJlcGxhY2UKCXJlbG9hZF9yZWdfZnJlZV9iZWZvcmVfcCB0ZXN0IHdpdGggcmVsb2FkX3JlZ191c2VkX2F0X2FsbCB0ZXN0LCBhbmQKCXJlbW92ZSBzdGFuZC1hbG9uZSByZWxvYWRfcmVnX3VzZWRfYXRfYWxsIHRlc3QuCglVc2UgcmVsb2FkX291dF9yZWcgdG8gZGV0ZXJtaW5lIHdoaWNoIHJlbG9hZCByZWdzIGhhdmUgb3V0cHV0IHJlbG9hZHMuCglUcmVhdCByZWxvYWRfb3ZlcnJpZGVfaW4gbW9yZSBzaW1pbGFyIHRvIGluaGVyaXRlZCByZWxvYWRzLgoJSGFuZGxlIChzdWJyZWcgKHJlZy4uLiBmb3IgaW5oZXJpdGFuY2UuCglGb3IgZmxhZ19leHBlbnNpdmVfb3B0aW1pemF0aW9ucywgYWRkIGFuIGV4dHJhIHBhc3MgdG8gcmVtb3ZlCgl1bm5lY2Vzc2FyeSByZWxvYWRzIGZyb20ga25vd24gd29ya2luZyBpbmhlcml0YW5jZS4KCURlbGV0ZSBvYnNvbGV0ZSBjb2RlIGZvciBwc2V1ZG9zIHJlcGxhY2VkIHdpdGggTUVNcy4KCUhhbmRsZSBpbmhlcml0YW5jZSBmcm9tIGF1dG9faW5jIGV4cHJlc3Npb25zLgoJKGVtaXRfcmVsb2FkX2luc25zKTogSWYgcmVsb2FkX2luIGlzIGEgTUVNLCBzZXQgT0xEIHRvCglyZWxvYWRfaW5fcmVnW2pdLgoJRG9uJ3QgcmVsb2FkIGRpcmVjdGx5IGZyb20gb2xkZXF1aXY7IGlmIGl0J3MgYSBwc2V1ZG8gd2l0aCBhCglzdGFjayBzbG90LCB1c2UgcmVsb2FkX2luW2pdLgoJQ2hlY2sgdGhhdCByZWxvYWRfaW5fcmVnW2pdIGlzIGEgTUVNIGJlZm9yZSByZXBsYWNpbmcgcmVsb2FkX2luCglmcm9tIHJlZ19yZWxvYWRlZF9jb250ZW50cy4KCUluY2x1ZGUgbm9uLXNwaWxsIHJlZ2lzdGVycyBpbiByZWxvYWQgaW5oZXJpdGFuY2UgcHJvY2Vzc2luZy4KCUFsc28gdHJ5IHRvIHVzZSByZWxvYWRfb3V0X3JlZyB0byBzZXQgc3BpbGxfcmVnX3N0b3JlIC8KCXJlZ19sYXN0X3JlbG9hZF9yZWcuCglJbiBjb2RlIHRvIHNldCBuZXdfc3BpbGxfcmVnX3N0b3JlLCB1c2Ugc2luZ2xlX3NldCB0byBmaW5kIG91dCBpZgoJdGhlcmUgaXMgYSBzaW5nbGUgc2V0LgoJQWRkIGNvZGUgdGhhdCBhbGxvd3MgdG8gZGVsZXRlIG9wdGlvbmFsIG91dHB1dCByZWxvYWRzLgoJQWRkIGNvZGUgdG8gYWxsb3cgZGVsZXRpb24gb2Ygb3V0cHV0IHJlbG9hZHMgdGhhdCB1c2Ugbm8gc3BpbGwgcmVnLgoJQXQgdGhlIGVuZCwgc2V0IHJlbG9hZF9vdmVycmlkZV9pbiB0byBvbGRlcXVpdi4KCUFsc28gY2FsbCBkZWxldGVfb3V0cHV0X3JlbG9hZCBpZiByZWxvYWRfb3V0X3JlZyBpcyBlcXVhbCB0byBvbGQKCWluIG9sZGVxdWl2IGNvZGUuCglBZGQgY29kZSB0byBjYWxsIGRlbGV0ZV9vdXRwdXRfcmVsb2FkIGZvciBzdG9yZXMgd2l0aCBubyBtYXRjaGluZyBsb2FkLgoJU2V0IC8gdXNlIHNwaWxsX3JlZ19zdG9yZWRfdG8uCglIYW5kbGUgY2FzZSB3aGVyZSBzZWNvbmRhcnkgb3V0cHV0IHJlbG9hZCB1c2VzIGEgdGVtcG9yYXJ5LCBidXQKCWFjdHVhbCBzdG9yZSBpc24ndCBmb3VuZC4KCVdoZW4gbG9va2luZyBmb3IgYSBzdG9yZSBvZiBhIHZhbHVlIG5vdCBsb2FkZWQgaW4gb3JkZXIgdG8gY2FsbAoJZGVsZXRlX291dHB1dF9yZWxvYWQsIGNvdW50X29jY3VycmVuY2VzIHNob3VsZCByZXR1cm4gMCBmb3Igbm8KCWxvYWRzOyBidXQgZGlzY291bnQgaW5oZXJpdGVkIGlucHV0IHJlbG9hZGlsbF9yZWdfc3RvcmVkX3RvLgoJRG8gY2hlY2tzIGZvciBleHRyYSB1c2VzIG9mIFJFRy4gIENoYW5nZWQgYWxsCgljYWxsZXJzLgoJVXNlIGRlbGV0ZV9hZGRyZXNzX3JlbG9hZHMuCgkocmVsb2FkKTogVGFrZSByZXR1cm4gdmFsdWUgb2YgZmluZF9yZWxvYWRzIGludG8gYWNjb3VudC4KCUlmIGEgbm8tb3Agc2V0IG5lZWRzIG1vcmUgdGhhbiBvbmUgcmVsb2FkLCBkZWxldGUgaXQuCgkocmVsb2FkX3JlZ19mcmVlX2JlZm9yZV9wKTogUkVMT0FEX0ZPUl9JTlBVVAoJY2FuIGlnbm9yZSBSRUxPQURfRk9SX0lOUFVUX0FERFJFU1MgLyBSRUxPQURfRk9SX0lOUEFERFJfQUREUkVTUwoJZm9yIHRoZSBzYW1lIG9wZXJhbmQuCgkoY2xlYXJfcmVsb2FkX3JlZ19pbl91c2UpOiBDaGVjayBmb3Igb3RoZXIgcmVsb2FkcyB0aGF0IGtlZXAgYQoJcmVnaXN0ZXIgaW4gdXNlLgoJKHJlbG9hZF9yZWdfZnJlZV9mb3JfdmFsdWVfcCk6IEhhbmRsZSBSRUxPQURfRk9SX09QRVJBTkRfQUREUkVTUyAvCglSRUxPQURfRk9SX09QQUREUl9BRERSLgoJVGFrZSBpbnRvIGFjY291bnQgd2hlbiBhbiBhZGRyZXNzIGFkZHJlc3MgcmVsb2FkIGlzIG9ubHkgbmVlZGVkCglmb3IgdGhlIGFkZHJlc3MgcmVsb2FkIHdlIGFyZSBjb25zaWRlcmluZy4KCShjb3VudF9vY2N1cnJlbmNlcyk6IFVzZSBydHhfZXF1YWxfcCBmb3IgTUVNcy4KCShpbmNfZm9yX3JlbG9hZCk6IFJldHVybiBpbnN0cnVjdGlvbiB0aGF0IHN0b3JlcyBpbnRvIFJFTE9BRFJFRy4KCU5ldyBhcmd1bWVudCB0d28sIElOLCBhbmQgcnR4LiAgQ2hhbmdlZCBhbGwgY2FsbGVycy4KCShjYWxjdWxhdGVfbmVlZHNfYWxsX2luc25zLCByZWxvYWRfYXNfbmVlZGVkKToKCURvbid0IGNsZWFyIGFmdGVyX2NhbGwgZm9yIGEgQ0xPQkJFUi4KCUtlZXAgdHJhY2sgb2YgaG93IG1hbnkgaGFyZCByZWdpc3RlcnMgbmVlZCB0byBiZSBjb3BpZWQgZnJvbQoJYWZ0ZXJfY2FsbCwgYW5kIGRvbid0IGNsZWFyIGFmdGVyX2NhbGwgYmVmb3JlIHdlIGhhdmUgc2VlbgoJdGhhdCBtdWNoIGNvcGllcywgb3Igd2Ugc2VlIGEgZGlmZmVyZW50IGluc3RydWN0aW9uLgoKRnJpIE9jdCAxNiAxMDo1ODoyMyAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBmbG93LmMgKGZpbmRfYmFzaWNfYmxvY2tzXzEpOiBEbyBub3QgZGVsZXRlIHVucmVhY2hhYmxlIGJsb2NrcwoJYWZ0ZXIgcmVsb2FkIGhhcyBjb21wbGV0ZWQuCgpGcmkgT2N0IDE2IDE3OjI2OjEwIDE5OTggIERhdmUgQnJvbGxleSAgPGJyb2xsZXlAY3lnbnVzLmNvbT4KCgkqIGNwcGxpYi5jIChjcHBfZ2V0X3Rva2VuKTogUmVwbGFjZSB3aGl0ZXNwYWNlIHRoYXQgb2NjdXJzIGJldHdlZW4KCWEgbWFjcm8gbmFtZSBhbmQgdGhlIG5leHQgdG9rZW4gd2l0aCBhIHNpbmdsZSBibGFuayBpZiB0aGF0IHdoaXRlc3BhY2UKCWlzIGluIGEgbWFjcm8gYnVmZmVyIGFuZCB0aGUgbmV4dCB0b2tlbiBpcyBub3QgJygnLgoKRnJpIE9jdCAxNiAxNTo0NDowMiAxOTk4ICBEYXZlIEJyb2xsZXkgIDxicm9sbGV5QGN5Z251cy5jb20+CgoJKiBjY2NwLmMgKHJlc2Nhbik6IEhhbmRsZSBtdWx0aWJ5dGUgY2hhcmFjdGVycyBlbmRpbmcgaW4gYmFja3NsYXNoLgoJKHJlc2Nhbik6IExpa2V3aXNlLgoJKHNraXBfaWZfZ3JvdXApOiBMaWtld2lzZS4KCShza2lwX3RvX2VuZF9vZl9jb21tZW50KTogTGlrZXdpc2UuCgkobWFjYXJnMSk6IExpa2V3aXNlLgoJKGRpc2NhcmRfY29tbWVudHMpOiBMaWtld2lzZS4KCShjaGFuZ2VfbmV3bGluZXMpOiBMaWtld2lzZS4KCkZyaSBPY3QgMTYgMTU6MjY6MjQgMTk5OCAgRGF2ZSBCcm9sbGV5ICA8YnJvbGxleUBjeWdudXMuY29tPgoKCSogYy1sZXguYyAoeXlsZXgpOiBGaXggdW5hbGlnbmVkIGFjY2VzcyBvZiB3Y2hhcl90LgoKRnJpIE9jdCAxNiAxMDo0Nzo1MyAxOTk4ICBOaWNrIENsaWZ0b24gIDxuaWNrY0BjeWdudXMuY29tPgoKCSogY29uZmlnL2FybS9hcm0uaCAoVEFSR0VUX1NXSVRDSEVTKTogQWRkIC0taGVscCBkb2N1bWVudGF0aW9uLgoJKFRBUkdFVF9PUFRJT05TKTogQWRkIC0taGVscCBkb2N1bWVudGF0aW9uLgoKRnJpIE9jdCAxNiAxMTo0OTowMSAxOTk4ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBydGwuaCAoc2V0c19jYzBfcCk6IFJldmVydCBPY3QgMTQgQVRUUklCVVRFX05PUkVUVVJOIGNoYW5nZS4KCkZyaSBPY3QgMTYgMDc6MDg6NDYgMTk5OCAgQnJ1Y2UgS29yYiAgPGtvcmJAZGF0YWRlc2lnbi5jb20+CgoJKiBmaXhpbmMvKiBNb3ZlZCBpbiBmcm9tIC4uL2NvbnRyaWIgZGlyZWN0b3J5IGluIHByZXBhcmF0aW9uCglmb3IgaW50ZWdyYXRpbmcgaXQgaW50byB0aGUgbm9ybWFsIGJ1aWxkIHByb2Nlc3MuICBJbiBwYXJ0aWN1bGFyLAoJZml4aW5jL01ha2VmaWxlLmluIG11c3QgYmUgY29uZmlnLWVkIGludG8gdGhlIGJ1aWxkIGRpcmVjdG9yeQoJYXMgZml4aW5jL01ha2VmaWxlLiAgUHJvcG9zZWQgcGF0Y2hlcyB0byAuL01ha2VmaWxlLmluIGFuZAoJLi9jb25maWd1cmUuaW4gd2lsbCBiZSAiaW4gdGhlIG1haWwiIG1vbWVudGFyaWx5LgoKRnJpIE9jdCAxNiAwODoxMzo0NiAxOTk4ICBEYXZpZCBTLiBNaWxsZXIgIDxkYXZlbUBwaWVyZG9sLmNvYmFsdG5ldC5jb20+CgoJKiBjc2UuYyAoY3NlX2Jhc2ljX2Jsb2NrKTogRml4dXAgaGFzaCBmbHVzaGluZyBsb29wIHNvIHdlIGRvIG5vdAoJYWNjaWRlbnRseSB3YWxrIGludG8gdGhlIGZyZWUgbGlzdC4gIENvbW1lbnQgaG93IHRoYXQgY2FuIGhhcHBlbi4KCShpbnZhbGlkYXRlKTogRml4IGluZGVudGF0aW9uLgoKVGh1IE9jdCAxNSAyMzo1MzoyOSAxOTk4ICBCZXJuZCBTY2htaWR0ICA8Y3J1eEBwb29sLmluZm9ybWF0aWsucnd0aC1hYWNoZW4uZGU+CgkJCSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogZmxvdy5jIChsaWZlX2FuYWx5c2lzXzEpOiBEbyBub3QgY2xvYmJlciByZWdzX2V2ZXJfbGl2ZSBhZnRlcgoJcmVsb2FkLiAgTmV2ZXIgcGVyZm9ybSByZXNjYW5zIG9mIHRoZSBpbnNuIGNoYWluIGFmdGVyIHJlbG9hZC4KCShwcm9wYWdhdGVfYmxvY2spOiBEbyBub3QgZGVsZXRlIGluc24gb3IgY3JlYXRlIG5ldyBhdXRvaW5jIGFkZHJlc3NpbmcKCW1vZGVzIGFmdGVyIHJlbG9hZC4KCgkqIGp1bXAuYyAoanVtcF9vcHRpbWl6ZSk6IFVuY29uZGl0aW9uYWxseSB1c2UgdGhlIGNvZGUgdGhhdCB3YXMKCXByZXZpb3VzbHkgY29uZGl0aW9uYWwgb24gUFJFU0VSVkVfREVBVEhfSU5GT19SRUdOT19QLgoJKiByZWxvYWQxLmMgKHJlbG9hZCk6IFdoZW4gcmVsb2FkaW5nIGlzIGZpbmlzaGVkLCBkZWxldGUgYWxsCglSRUdfREVBRCBhbmQgUkVHX1VOVVNFRCBub3Rlcy4KCShlbWl0X3JlbG9hZF9pbnNucyk6IERlbGV0ZSBhbGwgY29kZSB0aGF0IHdhcyBjb25kaXRpb25hbCBvbgoJUFJFU0VSVkVfREVBVEhfSU5GT19SRUdOT19QLgoJKG5vX2xvbmdlcl9kZWFkX3JlZ3MpOiBEZWxldGUgdmFyaWFibGUuCgkocmVsb2FkX2NzZV9kZWxldGVfZGVhdGhfbm90ZXMpOiBEZWxldGUgZnVuY3Rpb24uCgkocmVsb2FkX2NzZV9ub19sb25nZXJfZGVhZCk6IERlbGV0ZSBmdW5jdGlvbi4KCShyZWxvYWRfY3NlX3JlZ3NfMSk6IERlbGV0ZSBhbGwgY29kZSB0byBoYW5kbGUgZGVsZXRpb24gb2YgZGVhdGgKCW5vdGVzLgoJKHJlbG9hZF9jc2Vfbm9vcF9zZXRfcCk6IExpa2V3aXNlLgoJKHJlbG9hZF9jc2Vfc2ltcGxpZnlfc2V0KTogTGlrZXdpc2UuCgkocmVsb2FkX2NzZV9zaW1wbGlmeV9vcGVyYW5kcyk6IExpa2V3aXNlLgoJKHJlbG9hZF9jc2VfbW92ZTJhZGQpOiBMaWtld2lzZS4KCSogcmVvcmcuYyAodXNlZF9zcGlsbF9yZWdzKTogRGVsZXRlIGRlY2xhcmF0aW9uLgoJKG1heF9sYWJlbF9udW1fYWZ0ZXJfcmVsb2FkKTogRGVsZXRlIGRlY2xhcmF0aW9uLgoJKGZpbmRfZGVhZF9vcl9zZXRfcmVnaXN0ZXJzKTogRG9uJ3QgYXNzdW1lIHRoYXQgc3BpbGwgcmVncyBhcmUKCWRlYWQgYXQgYSBDT0RFX0xBQkVMLgoJKiBydGxhbmFsLmMgKGRlYWRfb3Jfc2V0X3JlZ25vX3ApOiBEZWF0aCBub3RlcyBhcmUgYWx3YXlzIGFjY3VyYXRlLAoJZXZlbiBhZnRlciByZWxvYWQuCgkqIHNjaGVkLmMgKHNjaGVkX2FuYWx5emVfaW5zbik6IExpa2V3aXNlLgoJKHVwZGF0ZV9mbG93X2luZm8pOiBMaWtld2lzZS4KCSogaGFpZmEtc2NoZWQuYyAoc2NoZWRfYW5hbHl6ZV9pbnNuKTogTGlrZXdpc2UuCgkodXBkYXRlX2Zsb3dfaW5mbyk6IExpa2V3aXNlLgoJKiB0bS50ZXhpIChQUkVTRVJWRV9ERUFUSF9JTkZPX1JFR05PX1ApOiBEZWxldGUgZG9jdW1lbnRhdGlvbi4KCSogdG9wbGV2LmMgKG1heF9sYWJlbF9udW1fYWZ0ZXJfcmVsb2FkKTogRGVsZXRlIHZhcmlhYmxlLgoJKHJlc3Rfb2ZfY29tcGlsYXRpb24pOiBEb24ndCBzZXQgbWF4X2xhYmVsX251bV9hZnRlcl9yZWxvYWQuCglDYWxsIGxpZmVfYW5hbHlzaXMgYWZ0ZXIgcmVsb2FkX2NzZV9yZWdzIGlmIG9wdGltaXppbmcuCgkqIGNvbmZpZy9nbWljcm8vZ21pY3JvLmg6IERlbGV0ZSBjb21tZW50IHJlZmVycmluZyB0bwoJUFJFU0VSVkVfREVBVEhfSU5GT19SRUdOT19QLgoJKiBjb25maWcvaTM4Ni9pMzg2Lmg6IExpa2V3aXNlLgoJKiBjb25maWcvbTg4ay9tODhrLmg6IExpa2V3aXNlLgoJKiBjb25maWcvbTMyci9tMzJyLmggKFBSRVNFUlZFX0RFQVRIX0lORk9fUkVHTk9fUCk6IERlbGV0ZSBkZWZpbml0aW9uLgoJKiBjb25maWcvc2gvc2guaDogTGlrZXdpc2UuCgpUaHUgT2N0IDE1IDE5OjQ4OjQxIDE5OTggIERhdmlkIEVkZWxzb2huICA8ZWRlbHNvaG5AZ251Lm9yZz4KCgkqIGxvb3AuYyAoc3RyZW5ndGhfcmVkdWNlKTogUmVzdG9yZSBtYXJraW5nIGJjdF9wIGFzCglBVFRSSUJVVEVfVU5VU0VELgoJKiByczYwMDAuYyAob3B0aW1pemF0aW9uX29wdGlvbnMpOiBDaGFuZ2UgI2lmZGVmIEhBSUZBIHRvCglIQVZFX2RlY3JlbWVudF9hbmRfYnJhbmNoX29uX2NvdW50LgoJKHNtYWxsX2RhdGFfb3BlcmFuZCk6IFJlbW92ZSBUQVJHRVRfRUxGIGNvbmRpdGlvbiBmb3IgbWFya2luZwoJcGFyYW1ldGVycyBBVFRSSUJVVEVfVU5VU0VELgoKVGh1IE9jdCAxNSAxMTo0NTo1MSAxOTk4ICBSb2JlcnQgTGlwZSAgPHJvYmVydGxAZGdpaS5jb20+CgoJKiBjb25maWcvaTM4Ni9zY281LmggKE1BWF9PRklMRV9BTElHTk1FTlQpOiBEZWZpbmUuCgkoU0VMRUNUX1NFQ1RJT04pOiBSZXN5bmMgd2l0aCBzdnI0LmguCgpUaHUgT2N0IDE1IDEyOjQyOjEzIDE5OTggIERhdmlkIEVkZWxzb2huICA8ZWRlbHNvaG5AZ251Lm9yZz4KCgkqIGxvb3AuYyAoc3RyZW5ndGhfcmVkdWNlKTogVW5kbyBPY3QgMTQgY2hhbmdlIG1hcmtpbmcgYmN0X3AKCUFUVFJJQlVURV9VTlVTRUQuCgpUaHUgT2N0IDE1IDAwOjU3OjU1IDE5OTggIFJvYmVydCBMaXBlICA8cm9iZXJ0bEBkZ2lpLmNvbT4KCgkqIGMtcHJhZ21hLmMgKGhhbmRsZV9wcmFnbWFfdG9rZW4pOiBUZXN0IGZvciBudWxsIHRyZWUgYmVmb3JlCglkZXJlZmVyZW5jaW5nIFRSRUVfQ09ERS4KClRodSBPY3QgMTUgMTc6MzY6NDggMTk5OCAgTWljaGFlbCBIYXllcyAgPG0uaGF5ZXNAZWxlYy5jYW50ZXJidXJ5LmFjLm56PgoKCSogY29uZmlnL2M0eC9jNHguYzogQ29udmVydCB0byB1c2UgR0VOX0lOVC4KCShjNHhfcGFyYWxsZWxfcHJvY2Vzcyk6IFJld29yayB0byBoYW5kbGUgbmV3IHJlcGVhdCBsb29wIHN0cnVjdHVyZS4KCgkqIGNvbmZpZy9jNHgvYzR4Lm1kOiBDb252ZXJ0IHRvIHVzZSBHRU5fSU5ULgoJKHJwdGJfZW5kKTogQ29udmVydCB0byB1c2UgR0UgdGVzdC4gIFJlcGxhY2UgdXNlcyB3aXRoIGNsb2JiZXJzLgoJKGRlY3JlbWVudF9hbmRfYnJhbmNoX29uX2NvdW50KTogTGlrZXdpc2UuCgoJKiBjb25maWcvYzR4L2M0eC5oIChSRVBFQVRfQkxPQ0tfUFJPQ0VTUyk6IERlbGV0ZWQgaG9vayBub3cgdGhhdAoJbG9vcC5jIGhhcyB0aGUgZGVzaXJlZCBmdW5jdGlvbmFsaXR5LgoJKHJjX3JlZ19vcGVyYW5kKTogTmV3IHByb3RvdHlwZS4KCgkqIGNvbmZpZy9jNHgvdC1jNHg6IENhbiBub3cgYnVpbGQgYWxsIGZyb250IGVuZHMuCgpXZWQgT2N0IDE0IDIzOjI3OjA4IDE5OTggIERpZGllciBGT1JUICAoZGlkaWVyLmZvcnRAZmVkZXguY29tKQoKCSogZml4aW5jbHVkZXM6IEZpeCB1cCBycGMve2NsbnQsc3ZyLHhkcn0uaCBmb3IgU3VuT1MuCgpXZWQgT2N0IDE0IDIyOjEzOjI4IDE5OTggIEpvZWwgU2hlcnJpbGwgIChqb2VsQE9BUmNvcnAuY29tKQoKCSogTWFrZWZpbGUuaW4gKHN0bXAtZml4aW5jKTogRG8gbm90IGluc3RhbGwgYXNzZXJ0LmggaWYgbm90IGRlc2lyZWQuCgkqIGNvbmZpZy90LXJ0ZW1zOiBEbyBub3QgaW5zdGFsbCBhc3NlcnQuaCAtLSB1c2UgbmV3bGliJ3MuCgpXZWQgT2N0IDE0IDIxOjU3OjA4IDE5OTggIEoib3JuIFJlbm5lY2tlICA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiBjb21iaW5lLmMgKGNvbWJpbmVfaW5zdHJ1Y3Rpb25zKTogV2hlbiBmaW5pc2hlZCwgY2FsbCBpbml0X3JlY29nLgoJKiByZWdtb3ZlLmMgKG9wdGltaXplX3JlZ19jb3B5XzMpOiBSZWplY3Qgdm9sYXRpbGUgTUVNcy4KCldlZCBPY3QgMTQgMTY6MTA6MjIgMTk5OCAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGN5Z251cy5jb20+CgoJKiB0b3BsZXYuYzogSWYgZmxhZ19zeW50YXhfb25seSwgZG9uJ3Qgb3BlbiBvciB3cml0ZSBhc3NlbWJsZXIgZmlsZS4KCldlZCBPY3QgMTQgMTM6MjY6MDUgMTk5OCAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogY3BwYWxsb2MuYyAobWVtb3J5X2Z1bGwpOiBNYXJrIGZ1bmN0aW9uIHByb3RvdHlwZSB3aXRoCglBVFRSSUJVVEVfTk9SRVRVUk4uCgoJKiBkZW1hbmdsZS5oIChjb2xsZWN0X2V4aXQpOiBMaWtld2lzZS4KCgkqIGZpeC1oZWFkZXIuYyAodl9mYXRhbCwgZmF0YWwpOiBMaWtld2lzZS4KCgkqIGdjYy5jIChwZmF0YWxfd2l0aF9uYW1lLCBwZmF0YWxfcGV4ZWN1dGUsIGZhdGFsLCBmYW5jeV9hYm9ydCk6CglMaWtld2lzZS4KCgkqIGdjb3YuYyAocHJpbnRfdXNhZ2UpOiBMaWtld2lzZS4KCgkqIGdlbmF0dHIuYyAoZmF0YWwsIGZhbmN5X2Fib3J0KTogTGlrZXdpc2UuCgoJKiBnZW5hdHRydGFiLmMgKGZhdGFsLCBmYW5jeV9hYm9ydCk6IExpa2V3aXNlLgoKCSogZ2VuY29kZXMuYyAoZmF0YWwsIGZhbmN5X2Fib3J0KTogTGlrZXdpc2UuCgoJKiBnZW5jb25maWcuYyAoZmF0YWwsIGZhbmN5X2Fib3J0KTogTGlrZXdpc2UuCgoJKiBnZW5lbWl0LmMgKGZhdGFsLCBmYW5jeV9hYm9ydCk6IExpa2V3aXNlLgoKCSogZ2VuZXh0cmFjdC5jIChmYXRhbCwgZmFuY3lfYWJvcnQpOiBMaWtld2lzZS4KCgkqIGdlbmZsYWdzLmMgKGZhdGFsLCBmYW5jeV9hYm9ydCk6IExpa2V3aXNlLgoKCSogZ2Vub3Bpbml0LmMgKGZhdGFsLCBmYW5jeV9hYm9ydCk6IExpa2V3aXNlLgoKCSogZ2Vub3V0cHV0LmMgKGZhdGFsLCBmYW5jeV9hYm9ydCk6IExpa2V3aXNlLgoKCSogZ2VucGVlcC5jIChmYXRhbCwgZmFuY3lfYWJvcnQpOiBMaWtld2lzZS4KCgkqIGdlbnJlY29nLmMgKGZhdGFsLCBmYW5jeV9hYm9ydCk6IExpa2V3aXNlLgoKCSogbGliZ2NjMi5jIChfX2VwcmludGYsIF9fZGVmYXVsdF90ZXJtaW5hdGUsIF9fc2p0aHJvdywKCV9fc2pwb3BudGhyb3csIF9fdGhyb3cpOiBMaWtld2lzZS4KCgkqIG9iamMvb2JqYy1hY3QuYyAob2JqY19mYXRhbCk6IExpa2V3aXNlLgoKCSogcHJvdG9pemUuYyAodXNhZ2UsIGF1eF9pbmZvX2NvcnJ1cHRlZCwKCWRlY2xhcmVfc291cmNlX2NvbmZ1c2luZyk6IExpa2V3aXNlLgoKCSogcnRsLmMgKGR1bXBfYW5kX2Fib3J0KTogTGlrZXdpc2UuCgoJKiBydGwuaCAoc2V0c19jYzBfcCk6IExpa2V3aXNlLgoKCSogdG9wbGV2LmMgKGZsb2F0X3NpZ25hbCwgcGlwZV9jbG9zZWQpOiBMaWtld2lzZS4KCjE5OTgtMTAtMTQgIEFuZHJlYXMgU2Nod2FiICA8c2Nod2FiQGlzc2FuLmNzLnVuaS1kb3J0bXVuZC5kZT4KCgkqIGR3YXJmMm91dC5jIChleHBhbmRfYnVpbHRpbl9kd2FyZl9yZWdfc2l6ZSk6IExvb2sgYXQgYWxsIHJhbmdlcwoJd2hlbiBnZW5lcmF0aW5nIHRoZSBkZWNpc2lvbiB0cmVlIGZvciB0aGUgZ2VuZXJhbCBjYXNlLgoKCSogY29uZmlnL202OGsvbTY4ay5oIChIQVJEX1JFR05PX01PREVfT0spOiBEb24ndCBhY2NlcHQgbW9kZXMKCXdpZGVyIHRoYXQgMTIgYnl0ZXMgaW4gZnB1IHJlZ3Mgb3Igd2lkZXIgdGhhbiA4IGJ5dGUgaW4gZnBhIHJlZ3MuCgpXZWQgT2N0IDE0IDExOjE0OjAyIDE5OTggIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIE1ha2VmaWxlLmluIChzY2hlZC5vKTogRGVwZW5kIG9uIHJlY29nLmguCgoJKiBhbGlhcy5jIChSRUdfQkFTRV9WQUxVRSk6IENhc3QgdGhlIHJlc3VsdCBvZiBSRUdOTygpIG1hY3JvIHRvCgkodW5zaWduZWQpIHdoZW4gY29tcGFyaW5nIGFnYWluc3Qgb25lLgoJKGZpbmRfYmFzZV92YWx1ZSk6IExpa2V3aXNlLgoJKHJlY29yZF9iYXNlX3ZhbHVlKTogQ2FzdCB2YXJpYWJsZSBgcmVnbm8nIHRvICh1bnNpZ25lZCkgd2hlbgoJY29tcGFyaW5nIGFnYWluc3Qgb25lLiAgQ2FzdCB0aGUgcmVzdWx0IG9mIFJFR05PKCkgbWFjcm8gdG8KCSh1bnNpZ25lZCkgd2hlbiBjb21wYXJpbmcgYWdhaW5zdCBvbmUuCgkobWVtcmVmc19jb25mbGljdF9wKTogQ2hhbmdlIHR5cGUgb2YgdmFyaWFibGVzIGByX3gnIGFuZCBgcl95JyAgdG8KCXVuc2lnbmVkLgoJKGluaXRfYWxpYXNfYW5hbHlzaXMpOiBBZGQgdW5zaWduZWQgdmFyaWFibGUgYHVpJy4gIFVzZSBpdCBhcyBsb29wCgl2YXJpYWJsZSB3aGVyZSBhbiB1bnNpZ25lZCBpbmRleCBpcyBuZWVkZWQuCgoJKiBjYWxsZXItc2F2ZS5jIChpbml0X2NhbGxlcl9zYXZlKTogQ2FzdCBgLTEnIHRvIChlbnVtIGluc25fY29kZSkKCWJlZm9yZSBjb21wYXJpbmcgYWdhaW5zdCBvbmUuCgoJKiBjb2xsZWN0Mi5jOiBBZGQgcHJvdG90eXBlcyBmb3IgZnVuY3Rpb25zIGBlcnJvcicsIGBmYXRhbCcgYW5kCglgZmF0YWxfcGVycm9yJy4gIE1ha2UgdGhlc2UgZnVuY3Rpb25zIHRha2UgdmFyaWFibGUgYXJndW1lbnRzCglpbnN0ZWFkIG9mIGZha2luZyBpdCB3aXRoIGEgZml4ZWQgbnVtYmVyIG9mIGFyZ3MuCgkod3JpdGVfY19maWxlX3N0YXQpOiBDYXN0IHRoZSBhcmd1bWVudCBvZiBjdHlwZSBtYWNybyB0byAodW5zaWduZWQKCWNoYXIpLgoKCSogY29tYmluZS5jIChjYW5fY29tYmluZV9wKTogTWFyayBwYXJhbWV0ZXIgYHByZWQnIHdpdGgKCUFUVFJJQlVURV9VTlVTRUQuCgkoZmluZF9zcGxpdF9wb2ludCk6IENhc3QgdmFyaWFibGUgYHNyYycgdG8gKHVuc2lnbmVkCglIT1NUX1dJREVfSU5UKSB3aGVuIGNvbXBhcmluZyBhZ2FpbnN0IG9uZS4KCShzaW1wbGlmeV9ydHgpOiBDYXN0IDEgdG8gKHVuc2lnbmVkIEhPU1RfV0lERV9JTlQpIGluIHNoaWZ0LgoJKHNpbXBsaWZ5X2xvZ2ljYWwpOiBMaWtld2lzZS4KCShmb3JjZV90b19tb2RlKTogQ2FzdCByZXN1bHQgb2YgSU5UVkFMKCkgbWFjcm8gdG8gKHVuc2lnbmVkCglIT1NUX1dJREVfSU5UKSB3aGVuIGNvbXBhcmluZyBhZ2FpbnN0IG9uZS4gIENhc3QgMSB0byAodW5zaWduZWQKCUhPU1RfV0lERV9JTlQpIGluIHNoaWZ0LgoJKHNpbXBsaWZ5X2FuZF9jb25zdF9pbnQpOiBDYXN0IHJlc3VsdCBvZiBJTlRWQUwoKSBtYWNybyB0bwoJYHVuc2lnbmVkIEhPU1RfV0lERV9JTlQnIHdoZW4gY29tcGFyaW5nIGFnYWluc3Qgb25lLgoJKG1lcmdlX291dGVyX29wcyk6IENhc3QgdmFyaWFibGUgY29uc3QwIHRvIGB1bnNpZ25lZAoJSE9TVF9XSURFX0lOVCcgd2hlbiBjb21wYXJpbmcgYWdhaW5zdCB0aGUgcmVzdWx0IG9mCglHRVRfTU9ERV9NQVNLKCkgbWFjcm8uCgkoc2ltcGxpZnlfY29tcGFyaXNvbik6IExpa2V3aXNlIGZvciB2YXJpYWJsZSBgYzAnLiAgQ2FzdCB2YXJpYWJsZQoJYGNvbnN0X29wJyB0byBgdW5zaWduZWQgSE9TVF9XSURFX0lOVCcgd2hlbiBjb21wYXJpbmcgYWdhaW5zdAoJb25lLiAgQ2FzdCBgMScgdG8gYHVuc2lnbmVkIEhPU1RfV0lERV9JTlQnIGluIHNoaWZ0LiAgQ2FzdCB0aGUKCXJlc3VsdCBvZiBgR0VUX01PREVfTUFTSygpLzInIHRvIGBIT1NUX1dJREVfSU5UJyB3aGVuIGNvbXBhcmluZwoJYWdhaW5zdCBvbmUuICBDYXN0IGAxJyB0byBgdW5zaWduZWQgSE9TVF9XSURFX0lOVCcgaW4gc2hpZnQuICBDYXN0CglyZXN1bHQgb2YgSU5UVkFMKCkgbWFjcm8gdG8gYHVuc2lnbmVkIEhPU1RfV0lERV9JTlQnIHdoZW4KCWNvbXBhcmluZyBhZ2FpbnN0IG9uZS4KCShkaXN0cmlidXRlX25vdGVzKTogV3JhcCB2YXJpYWJsZSBgY2MwX3NldHRlcicgaW4gbWFjcm8gYEhBVkVfY2MwJy4KCgljb25maWcvbWlwcy9taXBzLmMgKGdlbl9pbnRfcmVsYXRpb25hbCk6IENhc3QgcmVzdWx0IG9mIElOVFZBTCgpCgltYWNybyB0byBgdW5zaWduZWQgSE9TVF9XSURFX0lOVCcgd2hlbiBjb21wYXJpbmcgYWdhaW5zdCBvbmUuCgkob3V0cHV0X2Jsb2NrX21vdmUpOiBDYXN0IGBzaXplb2YnIGV4cHJlc3Npb24gdG8gKGludCkgd2hlbgoJY29tcGFyaW5nIGFnYWluc3Qgb25lLgoJKGZ1bmN0aW9uX2FyZyk6IENhc3QgQklUU19QRVJfV09SRCB0byBgdW5zaWduZWQnIHdoZW4gY29tcGFyaW5nCglhZ2FpbnN0IG9uZS4KCShzYXZlX3Jlc3RvcmVfaW5zbnMpOiBDYXN0IGBiYXNlX29mZnNldCcgdG8gYGxvbmcnIHRvIG1hdGNoIGZvcm1hdAoJc3BlY2lmaWVyIGluIGZwcmludGYuCgoJKiBjb25maWcvbWlwcy9taXBzLmggKFBtb2RlKTogQ2FzdCB0aGUgcmVzdWx0IG9mIGBQbW9kZScgbWFjcm8KCXRvIGBlbnVtIG1hY2hpbmVfbW9kZScuCgoJKiBmbG93LmMgKGxpZmVfYW5hbHlzaXNfMSk6IFJlbW92ZSB1bnVzZWQgdmFyaWFibGUgYGluc24nLgoKCSogZ2NjLmMgKHRyYW5zbGF0ZV9vcHRpb25zKTogTW92ZSB2YXJpYWJsZXMgYGonIGFuZCBgaycgaW50byB0aGUKCXNjb3BlIGluIHdoaWNoIHRoZXkgYXJlIHVzZWQuICBDaGFuZ2UgdGhlaXIgdHlwZXMgdG8gYHNpemVfdCcuCgkoc2V0X3NwZWMpOiBDYXN0IHRoZSBhcmd1bWVudCBvZiBjdHlwZSBtYWNybyB0byBgdW5zaWduZWQgY2hhcicuCgkocmVhZF9zcGVjcyk6IExpa2V3aXNlLgoJKHByb2Nlc3NfY29tbWFuZCk6IENhc3QgYHNpemVvZicgdG8gKGludCkgd2hlbiBjb21wYXJpbmcgYWdhaW5zdCBvbmUuCgkoZG9fc3BlY18xKTogQ2FzdCB0aGUgYXJndW1lbnQgb2YgY3R5cGUgbWFjcm8gdG8gYHVuc2lnbmVkIGNoYXInLgoJKGhhbmRsZV9icmFjZXMpOiBDYXN0IGJvdGggc2lkZXMgb2YgYD09JyBleHByZXNzaW9uIHRvIGBsb25nJyB0bwoJZW5zdXJlIHNpZ24gbWF0Y2hpbmcuCgkobWFpbik6IENhc3QgdmFyaWFibGUgYGknIHRvIGBpbnQnIHdoZW4gY29tcGFyaW5nIGFnYWluc3Qgb25lLgoKCSogZ2Nvdi1pby5oIChfX2ZldGNoX2xvbmcpOiBDaGFuZ2UgdHlwZSBvZiBwYXJhbWV0ZXIgYGJ5dGVzJyBmcm9tCglpbnQgdG8gc2l6ZV90LiAgQ2FzdCB2YXJpYWJsZSBgaScgdG8gc2l6ZV90IHdoZW4gY29tcGFyaW5nIGFnYWluc3QKCW9uZS4KCgkqIGdlbmF0dHJ0YWIuYyAoY29udmVydF9zZXRfYXR0cl9hbHRlcm5hdGl2ZSk6IFJlbW92ZSB1bnVzZWQKCXBhcmFtZXRlciBgaW5zbl9jb2RlJy4gIEFsbCBjYWxsZXJzIGNoYW5nZWQuCgkoY29udmVydF9zZXRfYXR0cik6IExpa2V3aXNlLgoKCSogZ2VucmVjb2cuYyAoYWRkX3RvX3NlcXVlbmNlKTogQ2FzdCByZXN1bHQgb2YgWFZFQ0xFTigpIG1hY3JvIHRvCglzaXplX3Qgd2hlbiBjb21wYXJpbmcgYWdhaW5zdCBvbmUuICBMaWtld2lzZSBmb3IgdmFyaWFibGUgYGxlbicuCgoJKiBnbG9iYWwuYyAoZ2xvYmFsX2FsbG9jKTogQ2FzdCB2YXJpYWJsZSBgbWF4X3JlZ25vJyB0byBzaXplX3QKCXdoZW4gY29tcGFyaW5nIGFnYWluc3Qgb25lLiAgTGlrZXdpc2UgZm9yIHZhcmlhYmxlIGBtYXhfYWxsb2NubycuCgoJKiBqdW1wLmMgKHNldHNfY2MwX3ApOiBNYXJrIHBhcmFtZXRlciBgeCcgd2l0aCBBVFRSSUJVVEVfVU5VU0VELgoKCSogbG9jYWwtYWxsb2MuYyAodmFsaWRhdGVfZXF1aXZfbWVtX2Zyb21fc3RvcmUpOiBNYXJrIHBhcmFtZXRlcgoJYHNldCcgd2l0aCBBVFRSSUJVVEVfVU5VU0VELgoJKGZpbmRfZnJlZV9yZWcpOiBDYXN0IGBzaXplb2YnIGV4cHJlc3Npb24gdG8gKGludCkgd2hlbiBjb21wYXJpbmcKCWFnYWluc3Qgb25lLgoKCSogbG9vcC5jIChjb3VudF9sb29wX3JlZ3Nfc2V0KTogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZSBgZGVzdCcuCgkoc3RyZW5ndGhfcmVkdWNlKTogTWFyayBwYXJhbWV0ZXIgYGJjdF9wJyB3aXRoIEFUVFJJQlVURV9VTlVTRUQuCgkoZ2V0X2NvbmRpdGlvbik6IENhc3QgdmFyaWFibGUgYGNvbnN0X3ZhbCcgdG8gYHVuc2lnbmVkCglIT1NUX1dJREVfSU5UJyB3aGVuIGNvbXBhcmluZyBhZ2FpbnN0IG9uZS4gIENhc3QgdW5zaWduZWQKCWV4cHJlc3Npb24gdG8gSE9TVF9XSURFX0lOVCB3aGVuIGNvbXBhcmluZyBhZ2FpbnN0IG9uZS4KCShpbnNlcnRfbG9vcF9tZW0pOiBNYXJrIHBhcmFtZXRlciBgZGF0YScgd2l0aCBBVFRSSUJVVEVfVU5VU0VELgoJKGxvYWRfbWVtc19hbmRfcmVjb3VudF9sb29wX3JlZ3Nfc2V0KTogQ2FzdCB2YXJpYWJsZSBgbnJlZ3MnIHRvCglgdW5zaWduZWQnIHdoZW4gY29tcGFyaW5nIGFnYWluc3Qgb25lLgoKCSogcHJvdG9pemUuYyAoaXNfaWRfY2hhcik6IENoYW5nZSB0eXBlIG9mIHBhcmFtZXRlciBgY2gnIHRvCgl1bnNpZ25lZCBjaGFyLgoJKG11bmdlX2NvbXBpbGVfcGFyYW1zKTogQ2FzdCBhcmd1bWVudCBvZiBjdHlwZSBtYWNybyB0byAoY29uc3QKCXVuc2lnbmVkIGNoYXIpLgoJKHByb2Nlc3NfYXV4X2luZm9fZmlsZSk6IENhc3QgdmFyaWFibGUgYGF1eF9pbmZvX3NpemUnIHRvIGludCB3aGVuCgljb21wYXJpbmcgYWdhaW5zdCBvbmUuCgkoZm9yd2FyZF90b19uZXh0X3Rva2VuX2NoYXIpOiBDYXN0IGFyZ3VtZW50IG9mIGN0eXBlIG1hY3JvIHRvCglgY29uc3QgdW5zaWduZWQgY2hhcicuCgkoZWRpdF9mb3JtYWxzX2xpc3RzKTogTGlrZXdpc2UuCgkoZmluZF9yaWdodG1vc3RfZm9ybWFsc19saXN0KTogTGlrZXdpc2UuCgkoYWRkX2xvY2FsX2RlY2wpOiBMaWtld2lzZS4KCShhZGRfZ2xvYmFsX2RlY2xzKTogTGlrZXdpc2UuCgkoZWRpdF9mbl9kZWZpbml0aW9uKTogTGlrZXdpc2UuCgkoZG9fY2xlYW5pbmcpOiBMaWtld2lzZS4KCShzY2FuX2Zvcl9taXNzZWRfaXRlbXMpOiBMaWtld2lzZS4KCShlZGl0X2ZpbGUpOiBDYXN0IHZhcmlhYmxlIGBvcmlnX3NpemUnIHRvIChpbnQpIHdoZW4gY29tcGFyaW5nCglhZ2FpbnN0IG9uZS4KCShtYWluKTogQ2FzdCBhcmd1bWVudCBvZiBjdHlwZSBtYWNybyB0byBgY29uc3QgdW5zaWduZWQgY2hhcicuCgoJKiByZWNvZy5jIChjb25zdF9pbnRfb3BlcmFuZCk6IE1hcmsgcGFyYW1ldGVyIGBtb2RlJyB3aXRoCglBVFRSSUJVVEVfVU5VU0VELgoKCSogcmVnY2xhc3MuYyAocmVjb3JkX3JlZ19jbGFzc2VzKTogQ2hhbmdlIHR5cGUgb2YgdmFyaWFibGUgYGMnIHRvCglgdW5zaWduZWQgY2hhcicuICBDYXN0IGBjaGFyJyBhcnJheSBpbmRleCB0byBgdW5zaWduZWQgY2hhcicuCgoJKiByZWxvYWQuYyAocHVzaF9zZWNvbmRhcnlfcmVsb2FkKTogQ2FzdCBhcmd1bWVudCB0bwoJUkVHX0NMQVNTX0ZST01fTEVUVEVSKCkgbWFjcm8gdG8gYHVuc2lnbmVkIGNoYXInLgoKCSogcmVsb2FkMS5jIChjYWxjdWxhdGVfbmVlZHMpOiBDYXN0IGBjaGFyJyBhcnJheSBpbmRleCB0bwoJYHVuc2lnbmVkIGNoYXInLgoJKHNldF9sYWJlbF9vZmZzZXRzKTogQ2hhbmdlIHR5cGUgb2YgdmFyaWFibGUgYGknIHRvIHVuc2lnbmVkIGludC4KCUNhc3QgcmVzdWx0IG9mIFhWRUNMRU4oKSBtYWNybyB0byB1bnNpZ25lZCB3aGVuIGNvbXBhcmluZyBhZ2FpbnN0CglvbmUuCgkobWFya19ub3RfZWxpbWluYWJsZSk6IENoYW5nZSB0eXBlIG9mIHZhcmlhYmxlIGBpJyB0byB1bnNpZ25lZC4KCShvcmRlcl9yZWdzX2Zvcl9yZWxvYWQpOiBMaWtld2lzZS4gIENhc3QgYG1heF9yZWdubycgdG8gdW5zaWduZWQKCXdoZW4gY29tcGFyaW5nIGFnYWluc3Qgb25lLgoJKHJlbG9hZF9hc19uZWVkZWQpOiBDYXN0IG1hY3JvIE5VTV9FTElNSU5BQkxFX1JFR1MgdG8gKGludCkgd2hlbgoJY29tcGFyaW5nIGFnYWluc3Qgb25lLgoJKGNob29zZV9yZWxvYWRfcmVncyk6IEhpZGUgdW51c2VkIGxhYmVsIGBmYWlsJy4KCShyZWxvYWRfY3NlX3NpbXBsaWZ5X29wZXJhbmRzKTogQ2FzdCBgY2hhcicgYXJyYXkgaW5kZXggdG8KCWB1bnNpZ25lZCBjaGFyJy4KCShyZWxvYWRfY29tYmluZV9ub3RlX3N0b3JlKTogTWFyayBwYXJhbWV0ZXIgYHNldCcgd2l0aAoJQVRUUklCVVRFX1VOVVNFRC4gIENhc3QgVU5JVFNfUEVSX1dPUkQgdG8gdW5zaWduZWQgd2hlbiBjb21wYXJpbmcKCWFnYWluc3Qgb25lLgoJKHJlbG9hZF9jc2VfbW92ZTJhZGQpOiBSZW1vdmUgdW51c2VkIHZhcmlhYmxlIGBzcmMyJy4KCgkqIHNjaGVkLmM6IEluY2x1ZGUgcmVjb2cuaC4KCShzY2hlZF9ub3RlX3NldCk6IFJlbW92ZSB1bnVzZWQgcGFyYW1ldGVyIGBiJy4gIEFsbCBjYWxsZXJzCgljaGFuZ2VkLgoJKHNwbGl0X2hhcmRfcmVnX25vdGVzKTogTGlrZXdpc2UgZm9yIHBhcmFtZXRlciBgb3JpZ19pbnNuJy4KCShibG9ja2FnZV9yYW5nZSk6IENhc3QgcmVzdWx0IG9mIFVOSVRfQkxPQ0tFRCgpIG1hY3JvIHRvIChpbnQpCgl3aGVuIGNvbXBhcmluZyBhZ2FpbnN0IG9uZS4KCgkqIHN0dXBpZC5jIChzdHVwaWRfZmluZF9yZWcpOiBNYXJrIHBhcmFtZXRlciBgY2hhbmdlc19zaXplJyB3aXRoCglBVFRSSUJVVEVfVU5VU0VELiAgQ2FzdCBgc2l6ZW9mJyBleHByZXNzaW9uIHRvIChpbnQpIHdoZW4KCWNvbXBhcmluZyBhZ2FpbnN0IG9uZS4KCgkqIHVucm9sbC5jIChwcmVjb25kaXRpb25fbG9vcF9wKTogUmVtb3ZlIHVudXNlZCBwYXJhbWV0ZXIKCWBsb29wX2VuZCcuICBBbGwgY2FsbGVycyBjaGFuZ2VkLgoKVHVlIE9jdCAxMyAyMjoxMjoxMSAxOTk4ICBCZXJuZCBTY2htaWR0ICA8Y3J1eEBwb29sLmluZm9ybWF0aWsucnd0aC1hYWNoZW4uZGU+CgoJKiByZWxvYWQxLmMgKG1heWJlX2ZpeF9zdGFja19hc21zKTogTmV3IHN0YXRpYyBmdW5jdGlvbi4KCShyZWxvYWQpOiBDYWxsIGl0LgoKCSogcmVsb2FkLmggKGNvbXB1dGVfdXNlX2J5X3BzZXVkb3MpOiBEZWNsYXJlLgoKCSogcmVsb2FkMS5jIChzcGlsbGVkX3BzZXVkb3MsIGluc25zX25lZWRfcmVsb2FkKTogTmV3IHZhcmlhYmxlcy4KCShzb21ldGhpbmdfbmVlZHNfcmVsb2Fkcyk6IERlbGV0ZSB2YXJpYWJsZS4KCShmaW5pc2hfc3BpbGxzKTogTmV3IGZ1bmN0aW9uLgoJKGNvbXB1dGVfdXNlX2J5X3BzZXVkb3MpOiBOZXcgZnVuY3Rpb24uCgoJKGRlbGV0ZV9jYWxsZXJfc2F2ZV9pbnNucyk6IExvc2UgYXJndW1lbnQgRklSU1QuICBBbGwgY2FsbGVycyBjaGFuZ2VkLgoJVXNlIHRoZSByZWxvYWRfaW5zbl9jaGFpbiBpbnN0ZWFkIG9mIHdhbGtpbmcgdGhlIHJ0bCBkaXJlY3RseS4KCgkocmVsb2FkKTogQWxsb2NhdGUgYW5kIGZyZWUgc3BpbGxlZF9wc2V1ZG9zLgoJRW5zdXJlIHRoYXQgYWxsIGNhbGxzIG9mIHNwaWxsX2hhcmRfcmVnIGFyZSBmb2xsb3dlZCBieSBhIGNhbGwgdG8KCWZpbmlzaF9zcGlsbHMuCglVc2UgdGhlIGluc25zX25lZWRfcmVsb2FkIGxpc3QgaW5zdGVhZCBvZiBzb21ldGhpbmdfbmVlZHNfcmVsb2FkcwoJdG8gZmluZCBvdXQgaWYgcmVsb2FkX2FzX25lZWRlZCBtdXN0IGJlIGNhbGxlZC4KCUNsZWFyIHVudXNlZF9pbnNuX2NoYWlucyBhdCB0aGUgZW5kLgoKCShjYWxjdWxhdGVfbmVlZHNfYWxsX2luc25zKTogTG9zZSBGSVJTVCBwYXJhbWV0ZXIuICBBbGwgY2FsbGVycwoJY2hhbmdlZC4KCURlbGV0ZSBjb2RlIHRvIGtlZXAgdHJhY2sgb2YgY3VycmVudCBiYXNpYyBibG9jay4KCVdhbGsgcmVsb2FkX2luc25fY2hhaW4gaW5zdGVhZCBvZiB0aGUgcnRsIHN0cnVjdHVyZS4gIEJ1aWxkIHRoZQoJaW5zbnNfbmVlZF9yZWxvYWQgY2hhaW4uCglSZW1lbWJlciB3aGljaCBpbnNucyBuZWVkIHJlbG9hZGluZy9lbGltaW5hdGlvbiBieSBzZXR0aW5nIHRoZQoJYXBwcm9wcmlhdGUgZmllbGRzIGluIHN0cnVjdCBpbnNuX2NoYWluLCBub3QgYnkgcHV0dGluZyBtb2RlcyBvbiB0aGUKCWluc24uCgoJKGNhbGN1bGF0ZV9uZWVkcyk6IExvc2UgVEhJU19CTE9DSyBhcmcuICBBY2NlcHQgYXJnIENIQUlOIGluc3RlYWQgb2YKCWFyZyBJTlNOLiAgQWxsIGNhbGxlcnMgY2hhbmdlZC4KCURlbGV0ZSBkZWNsYXJhdGlvbiBvZiBzdHJ1Y3QgbmVlZHMuCglEb24ndCBzZXQgc29tZXRoaW5nX25lZWRzX3JlbG9hZHMuCglSZWNvcmQgaW5zbiBuZWVkcyBpbiB0aGUgQ0hBSU4gYXJndW1lbnQuCgoJKHNwaWxsX2hhcmRfcmVnKTogUmVjb3JkIHRoZSBhZmZlY3RlZCBwc2V1ZG9zIGluIHNwaWxsZWRfcHNldWRvcy4KCgkocmVsb2FkX2FzX25lZWRlZCk6IExvc2UgRklSU1QgYXJnLiAgQWxsIGNhbGxlcnMgY2hhbmdlZC4KCVdhbGsgdGhlIHJlbG9hZF9pbnNuX2NoYWluIGluc3RlYWQgb2YgdGhlIHJ0eCBzdHJ1Y3R1cmUuCglEZWxldGUgY29kZSB0byBrZWVwIHRyYWNrIG9mIGN1cnJlbnQgYmFzaWMgYmxvY2suCglSZW5hbWUgb25lIG9mIHRoZSBORVhUIHZhcmlhYmxlcyB0byBPTERfTkVYVC4KCgkoYWxsb2NhdGVfcmVsb2FkX3JlZyk6IEFjY2VwdCBhcmcgQ0hBSU4gaW5zdGVhZCBvZiBhcmcgSU5TTi4gIEFsbAoJY2FsbGVycyBjaGFuZ2VkLgoJKGNob29zZV9yZWxvYWRfcmVncyk6IExpa2V3aXNlLgoKCShlbWl0X3JlbG9hZF9pbnNucyk6IFJlcGxhY2UgSU5TTiBhbmQgQkIgYXJncyB3aXRoIGFyZyBDSEFJTi4gIEFsbAoJY2FsbGVycyBjaGFuZ2VkLgoKCSogY2FsbGVyLXNhdmUuYyAoTU9WRV9NQVhfV09SRFMpOiBOZXcgbWFjcm8uICBVc2UgaXQgdGhyb3VnaG91dAoJaW5zdGVhZCBvZiAoTU9WRV9NQVggLyBVTklUU19QRVJfV09SRCkgY29tcHV0YXRpb24uCgkoaGFyZF9yZWdzX2xpdmUsIGhhcmRfcmVnc19uZWVkX3Jlc3RvcmUpOiBEZWxldGUgdmFyaWFibGVzLgoJKG5fcmVnc19zYXZlZCk6IE5vdyBzdGF0aWMuCgkocmVmZXJlbmNlZF9yZWdzLCB0aGlzX2luc25fc2V0cyk6IE5ldyB2YXJpYWJsZXMuCgoJKHNldHVwX3NhdmVfYXJlYXMpOiBSZXN0cnVjdHVyZSB0aGUgY29kZSBhIGJpdC4KCgkocmVzdG9yZV9yZWZlcmVuY2VkX3JlZ3MpOiBEZWxldGUgZnVuY3Rpb24uCgkobWFya19yZWZlcmVuY2VkX3JlZ3MpOiBOZXcgZnVuY3Rpb24sIHNpbWlsYXIgdG8gdGhlIG9sZAoJcmVzdG9yZV9yZWZlcmVuY2VkX3JlZ3MsIGJ1dCBtYXJrIHJlZ2lzdGVycyBpbiByZWZlcmVuY2VkX3JlZ3MuCgoJKGNsZWFyX3JlZ19saXZlKTogRGVsZXRlIGZ1bmN0aW9uLgoJKG1hcmtfc2V0X3JlZ3MpOiBSZW5hbWVkIGZyb20gc2V0X3JlZ19saXZlLiAgQWxsIGNhbGxlcnMgY2hhbmdlZC4KCU9ubHkgbWFyayByZWdpc3RlcnMgaW4gdGhpc19pbnNuX3NldHMuCgoJKHNhdmVfY2FsbF9jbG9iYmVyZWRfcmVncyk6IFJld29yayB0aGlzIGZ1bmN0aW9uIHRvIHdhbGsgdGhlCglyZWxvYWRfaW5zbl9jaGFpbiBpbnN0ZWFkIG9mIHVzaW5nIHRoZSBsaXN0IG9mIGluc3RydWN0aW9ucyBkaXJlY3RseS4KCURlbGV0ZSBjb2RlIHRvIGtlZXAgdHJhY2sgb2YgcmVnaXN0ZXIgbGl2ZXMsIGNvbXB1dGUgbGl2ZSByZWdzIG9uIHRoZQoJZmx5IGZyb20gaW5mb3JtYXRpb24gaW4gdGhlIGNoYWluLgoJSW5zdGVhZCBvZiBjYWxsaW5nIHJlc3RvcmVfcmVmZXJlbmNlZF9yZWdzLCB1c2UgbWFya19yZWZlcmVuY2VkX3JlZ3MsCgl0aGVuIHdhbGsgdGhlIHNldCBpdCBjb21wdXRlcyBhbmQgY2FsbCBpbnNlcnRfcmVzdG9yZSBhcyBhcHByb3ByaWF0ZS4KCgkoaW5zZXJ0X3Jlc3RvcmUpOiBMb3NlIElOU04gYW5kIEJMT0NLIGFyZ3MuICBBZGQgQ0hBSU4gYXJnLiAgQWxsCgljYWxsZXJzIGNoYW5nZWQuCglSZXN0cnVjdHVyZSB0aGUgY29kZSBhIGJpdC4gIFRlc3QgaGFyZF9yZWdzX3NhdmVkIGluc3RlYWQgb2YKCWhhcmRfcmVnc19uZWVkX3Jlc3RvcmUuCgkoaW5zZXJ0X3NhdmUpOiBMb3NlIElOU04gYW5kIEJMT0NLIGFyZ3MuICBBZGQgQ0hBSU4gYW5kIFRPX1NBVkUKCWFyZ3MuICBBbGwgY2FsbGVycyBjaGFuZ2VkLgoJUmVzdHJ1Y3R1cmUgdGhlIGNvZGUgYSBiaXQuICBVc2UgVE9fU0FWRSB0byBkZXRlcm1pbmUgd2hpY2ggcmVncyB0bwoJc2F2ZSBpbnN0ZWFkIG9mIG1vcmUgY29tcGxpY2F0ZWQgdGVzdC4KCShpbnNlcnRfb25lX2FyZyk6IExvc2UgSU5TTiBhbmQgQkxPQ0sgYXJncy4gIEFkZCBDSEFJTiBhcmcuICBBbGwKCWNhbGxlcnMgY2hhbmdlZC4KCUNyZWF0ZSBhIG5ldyBpbnNuX2NoYWluIHN0cnVjdHVyZSBmb3IgdGhlIG5ldyBpbnNuIGFuZCBwbGFjZSBpdAoJaW50byB0aGUgY2hhaW4uCgoJKiBydGwudGV4aTogVXBkYXRlIGRvY3VtZW50YXRpb24gdG8gcmVmbGVjdCB0aGF0IHJlbG9hZCBubyBsb25nZXIKCXB1dHMgbW9kZXMgb24gdGhlIGluc25zLgoKMTk5OC0xMC0xNCAgQW5kcmVhcyBTY2h3YWIgIDxzY2h3YWJAaXNzYW4uY3MudW5pLWRvcnRtdW5kLmRlPgoKCSogZnVuY3Rpb24uYyAocHVyZ2VfYWRkcmVzc29mXzEpOiBGb3JjZSB0aGUgZmlyc3QgYXJndW1lbnQgb2YgYQoJQ0FMTCBpbnNuIHRvIG1lbW9yeS4KCldlZCBPY3QgMTQgMDA6Mzg6NDAgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogcnRsLmg6IERlbGV0ZSBkdXBsaWNhdGUgcHJvdG90eXBlcy4gIEFkZCBzb21lIG1pc3NpbmcKCXByb3RvdHlwZXMuCgkqIHJ0bGFuYWwuYyAoZm9yX2VhY2hfcnR4KTogRm9ybWF0dGluZyB0d2Vhay4KCjE5OTgtMTAtMTMgIEhlcm1hbiBBLkouIHRlbiBCcnVnZ2UgIDxIYWouVGVuLkJydWdnZUBuZXQuSENDLm5sPgoKCSogcmVhbC5jIChlbWRub3JtIGFuZCBldG9hc2MpOiBEaXNhYmxlIHJvdW5kIHRvIGV2ZW4gZm9yIGM0eCB0YXJnZXQKCXRvIGJlIGNvbXBhdGlibGUgd2l0aCBUSSBjb21waWxlci4KCgkqIE1ha2VmaWxlLmluIChVU0VSX0gpOiBBZGQgdmEtYzR4LmggdG8gZGVmaW5pdGlvbi4KClR1ZSBPY3QgMTMgMjM6MDM6MzcgMTk5OCAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGZ1bmN0aW9uLmMgKHB1cmdlX2FkZHJlc3NvZl8xKTogRml4IHR5cG8gaW4gaW5lcXVhbGl0eTogZG8KCWJpdGZpZWxkIG9wdGltaXphdGlvbiBmb3IgZXF1YWwgbW9kZSBzaXplcy4KCSogZXhwbWVkLmMgKHN0b3JlX2JpdF9maWVsZCk6IERvbid0IHRha2Ugc3VicmVncyBvZiBzdWJyZWdzIGluCgl0aGUgbW92c3RyaWN0IGNhc2UuICBUaWR5IGEgcG90ZW50aWFsIHByb2JsZW0gaW4gdGhlIG11bHRpLXdvcmQgY2FzZS4KCShleHRyYWN0X2JpdF9maWVsZCk6IExpa2V3aXNlLgoKVHVlIE9jdCAxMyAyMjoxMjoxMSAxOTk4ICBCZXJuZCBTY2htaWR0ICA8Y3J1eEBwb29sLmluZm9ybWF0aWsucnd0aC1hYWNoZW4uZGU+CgoJKiBmbG93LmMgKGZpbmRfYmFzaWNfYmxvY2tzKTogRW1pdCBOT1BzIGFmdGVyIG5vcm1hbCBjYWxscyBpbiB0aGlzCglmdW5jdGlvbi4KCUNvbXB1dGUgbWF4X3VpZF9mb3JfZmxvdyBieSBjYWxsaW5nIGdldF9tYXhfdWlkIGFmdGVyIHRoZSBzY2FuLgoJKGZpbmRfYmFzaWNfYmxvY2tzXzEpOiBEb24ndCBlbWl0IE5PUHMgaGVyZS4KClR1ZSBPY3QgMTMgMjI6MDU6NDkgMTk5OCAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGFsaWFzLmMgKGJhc2VfYWxpYXNfY2hlY2spOiBBY2NlcHQgbmV3IGFyZ3MgZm9yIHRoZSBtb2RlcyBvZiB0aGUKCXR3byByZWZlcmVuY2VzLiAgVXNlIHRoZW0gdG8gZGV0ZXJtaW5lIGlmIGFuIEFORCBjYW4gb3ZlcmxhcC4gIFVwZGF0ZQoJYWxsIGNhbGxlcnMuCgkobWVtcmVmc19jb25mbGljdF9wKTogQXNzdW1lIHNpemVzIGFyZSBhbGlnbmVkLCBhbmQgdXNlcyB0aGVtCgl0byBkZXRlcm1pbmUgaWYgYW4gQU5EIGNhbiBvdmVybGFwLgoKVHVlIE9jdCAxMyAxNzo1MTowNCAxOTk4ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CgoJKiBjb25maWcvbTY4ay9tNjhrLmggKEhBUkRfUkVHTk9fTU9ERV9PSyk6IEZvciBGUCByZWdzLCBhZGQgUkVHTk8gPj0gMTYKCWNoZWNrLiAgQWRkIGNvbW1lbnQgdG8gZG9jdW1lbnQgcHJvYmxlbXMgd2l0aCBUQVJHRVRfU1VOX0ZQQSB2ZXJzaW9uCglvZiB0aGlzIG1hY3JvLgoJKiBjb25maWcvbTY4ay9tNjhrLm1kIChtb3Z4ZisxKTogU3VwcG9ydCAncicvJ3InIG1vdmVzLgoKVHVlIE9jdCAxMyAxNzo0NjoxOCAxOTk4ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBNYWtlZmlsZS5pbiAoZ2VuY2hlY2subyk6IERlcGVuZCBvbiBnYW5zaWRlY2wuaC4KCgkqIGMtY29tbW9uLmMgKHByaW50X2NoYXJfdGFibGUpOiBBZGQgbWlzc2luZyBpbml0aWFsaXplcnMuCgkoc2Nhbl9jaGFyX3RhYmxlKTogTGlrZXdpc2UuCgkodGltZV9jaGFyX3RhYmxlKTogTGlrZXdpc2UuCgoJKiBjLWRlY2wuYyAoY19kZWNvZGVfb3B0aW9uKTogTWFyayBwYXJhbWV0ZXIgYGFyZ2MnIHdpdGgKCUFUVFJJQlVURV9VTlVTRUQuCgkoZGVjbGFyZV9wYXJtX2xldmVsKTogTWFyayBwYXJhbWV0ZXIgYGRlZmluaXRpb25fZmxhZycgd2l0aAoJQVRUUklCVVRFX1VOVVNFRC4KCgkqIGMtbGV4LmMgKHJlYWRlc2NhcGUpOiBVc2UgYCh1bnNpZ25lZCkxJyBpbiBzaGlmdC4KCSh5eWxleCk6IExpa2V3aXNlLiAgQ2FzdCBgc2l6ZW9mJyB0byBhbiAoaW50KSB3aGVuIGNvbXBhcmluZwoJYWdhaW5zdCBvbmUuCgoJKiBjYWxscy5jIChzdG9yZV9vbmVfYXJnKTogUmVtb3ZlIHVudXNlZCBwYXJhbWV0ZXIgYGZuZGVjbCcuICBBbGwKCWNhbGxlcnMgY2hhbmdlZC4KCShlbWl0X2NhbGxfMSk6IE1hcmsgcGFyYW1ldGVycyBgZm5kZWNsJyBhbmQgYGZ1bnR5cGUnIHdpdGgKCUFUVFJJQlVURV9VTlVTRUQuCgkoZXhwYW5kX2NhbGwpOiBDYXN0IHJlc3VsdCBvZiBNSU4oKSB0byAodW5zaWduZWQgaW50KSB3aGVuCgljb21wYXJpbmcgYWdhaW5zdCBhbiB1bnNpZ25lZCB2YWx1ZS4KCgkqIGNjY3AuYyAocGNmaW5jbHVkZSk6IFJlbW92ZSB1bnVzZWQgcGFyYW1ldGVyIGBsaW1pdCcuICBBbGwKCWNhbGxlcnMgY2hhbmdlZC4KCShtYWtlX2RlZmluaXRpb24pOiBSZW1vdmUgdW51c2VkIHBhcmFtZXRlciBgb3AnLiAgQWxsIGNhbGxlcnMKCWNoYW5nZWQuCgkoY3JlYXRlX2RlZmluaXRpb24pOiBDYXN0IFJFU1RfRVhURU5TSU9OX0xFTkdUSCB0byAobG9uZykgd2hlbgoJY29tcGFyaW5nIGFnYWluc3QgdGhlIHJlc3VsdCBvZiBwb2ludGVyIGFyaXRobWV0aWMuCgoJKiBjb25maWcvbWlwcy9taXBzLmggKEZVTkNUSU9OX0FSR19CT1VOREFSWSk6IENhc3QgdG8gKHVuc2lnbmVkKQoJd2hlbiBjb21wYXJpbmcgYWdhaW5zdCBvbmUuCgoJKiBkd2FyZjJvdXQuYyAoZHdhcmYyb3V0X2ZyYW1lX2RlYnVnKTogQ2FzdCBSRUdOTygpIGFuZAoJSEFSRF9GUkFNRV9QT0lOVEVSX1JFR05VTSB0byAodW5zaWduZWQpIHdoZW4gY29tcGFyaW5nIGFnYWluc3QKCW9uZS4KCShvdXRwdXRfZGllKTogTW92ZSB2YXJpYWJsZSBgaScgaW50byB0aGUgc2NvcGUgaW4gd2hpY2ggaXQgaXMKCXVzZWQuICBDaGFuZ2UgaXRzIHR5cGUgdG8gYHVuc2lnbmVkJy4KCShvdXRwdXRfZGllKTogQ2FzdCB0aGUgcmVzdWx0IG9mIGBzdHJsZW4nIHRvIChpbnQpIHdoZW4gcGFzc2luZyBpdAoJdG8gQVNNX09VVFBVVF9BU0NJSSgpLgoJKG91dHB1dF9wdWJuYW1lcyk6IExpa2V3aXNlLgoJKG91dHB1dF9saW5lX2luZm8pOiBMaWtld2lzZS4KCgkqIGVtaXQtcnRsLmMgKGdsb2JhbF9ydGwpOiBBZGQgbWlzc2luZyBpbml0aWFsaXplcnMuCgoJKiBleHBsb3cuYyAocHJvbW90ZV9tb2RlKTogTWFyayBwYXJhbWV0ZXIgYGZvcl9jYWxsJyB3aXRoCglBVFRSSUJVVEVfVU5VU0VELgoKCSogZXhwbWVkLmMgKGV4cGFuZF9zaGlmdCk6IENhc3QgdGhlIHJlc3VsdCBvZiBHRVRfTU9ERV9CSVRTSVpFIHRvCglgdW5zaWduZWQgSE9TVF9XSURFX0lOVCcgd2hlbiBjb21wYXJpbmcgYWdhaW5zdCBvbmUuCgkoc3ludGhfbXVsdCk6IENoYW5nZSB0eXBlIG9mIHZhcmlhYmxlIGBjb3N0JyB0byBpbnQuCgkoZW1pdF9zdG9yZV9mbGFnKTogVXNlIGAodW5zaWduZWQgSE9TVF9XSURFX0lOVCkgMScgaW4gc2hpZnQuCgoJKiBleHByLmMgKGNvcHlfYmxrbW9kZV9mcm9tX3JlZyk6IENhc3QgQklUU19QRVJfV09SRCB0byAodW5zaWduZWQpCgl3aGVuIGNvbXBhcmluZyBhZ2FpbnN0IG9uZS4KCShnZXRfaW5uZXJfcmVmZXJlbmNlKTogQ2hhbmdlIHZhcmlhYmxlIGBhbGlnbm1lbnQnIHRvIHVuc2lnbmVkLgoJKGV4cGFuZF9leHByKTogQ2FzdCB0aGUgcmVzdWx0IG9mIEdFVF9NT0RFX0FMSUdOTUVOVCB0byAodW5zaWduZWQKCWludCkgd2hlbiBjb21wYXJpbmcgYWdhaW5zdCBvbmUuCgkoZXhwYW5kX2J1aWx0aW5fc2V0am1wKTogQ2hhbmdlIHR5cGUgb2YgdmFyaWFibGUgYGknIHRvIHNpemVfdC4KCgkqIGZvbGQtY29uc3QuYyAoZGl2X2FuZF9yb3VuZF9kb3VibGUpOiBDYXN0IEJBU0UgdG8KCShIT1NUX1dJREVfSU5UKSB3aGVuIGNvbXBhcmluZyBhZ2FpbnN0IG9uZS4KCgkqIGdlbmNoZWNrLmM6IEluY2x1ZGUgZ2Fuc2lkZWNsLmguCgkobWFpbik6IE1hcmsgcGFyYW1ldGVyIGBhcmd2JyB3aXRoIEFUVFJJQlVURV9VTlVTRUQuCgoJKiBvcHRhYnMuYyAoZ2VuX2NvbmRfdHJhcCk6IE1hcmsgcGFyYW1ldGVycyBgY29kZScsIGBvcDInIGFuZAoJYHRjb2RlJyB3aXRoIEFUVFJJQlVURV9VTlVTRUQuCgoJKiByZWFsLmMgKGVkaXZtKTogQ2FzdCBjb25zdGFudCB2YWx1ZSB0byAodW5zaWduZWQgbG9uZykgaW4KCWV4cHJlc3Npb24gY29tcGFyZWQgYWdhaW5zdCBhbiB1bnNpZ25lZCB2YWx1ZS4KCgkqIHN0bXQuYyAoZXhwYW5kX3JldHVybik6IENhc3QgQklUU19QRVJfV09SRCB0byAodW5zaWduZWQpIHdoZW4KCWNvbXBhcmluZyBhZ2FpbnN0IG9uZS4KCShleHBhbmRfZW5kX2Nhc2UpOiBDYXN0IENBU0VfVkFMVUVTX1RIUkVTSE9MRCB0byAodW5zaWduZWQgaW50KQoJd2hlbiBjb21wYXJpbmcgYWdhaW5zdCBvbmUuCgoJKiBzdG9yLWxheW91dC5jIChtb2RlX2Zvcl9zaXplKTogQ2FzdCBNQVhfRklYRURfTU9ERV9TSVpFIHRvCgkodW5zaWduZWQgaW50KSB3aGVuIGNvbXBhcmluZyBhZ2FpbnN0IG9uZS4gIExpa2V3aXNlIGZvcgoJR0VUX01PREVfQklUU0laRS4KCShzbWFsbGVzdF9tb2RlX2Zvcl9zaXplKTogTGlrZXdpc2UuCgkoc2F2ZV9zdG9yYWdlX3N0YXR1cyk6IE1hcmsgcGFyYW1ldGVyIGBwJyB3aXRoIEFUVFJJQlVURV9VTlVTRUQuCgkocmVzdG9yZV9zdG9yYWdlX3N0YXR1cyk6IExpa2V3aXNlLgoKCSogdG9wbGV2LmMgKGRlYnVnX2FyZ3MpOiBBZGQgbWlzc2luZyBpbml0aWFsaXplci4KCShmX29wdGlvbnMpOiBTcGVsbGluZyBjb3JyZWN0aW9uLiAgQWRkIG1pc3NpbmcgaW5pdGlhbGl6ZXJzLgoJKGRvY3VtZW50ZWRfbGFuZ19vcHRpb25zKTogTGlrZXdpc2UuCgkoZGVidWdfZW5kX3NvdXJjZV9maWxlKTogTWFyayBwYXJhbWV0ZXIgYGxpbmVubycgd2l0aAoJQVRUUklCVVRFX1VOVVNFRC4KCgkqIHRyZWUuYyAodmFsaWRfbWFjaGluZV9hdHRyaWJ1dGUpOiBNYXJrIHBhcmFtZXRlcnMgYGF0dHJfYXJncycsCglgZGVjbCcgYW5kIGB0eXBlJyB3aXRoIEFUVFJJQlVURV9VTlVTRUQuCgoJKiB2YXJhc20uYyAoZGVjb2RlX3JlZ19uYW1lKTogQ2FzdCBgc2l6ZW9mJyBleHByZXNzaW9uIHRvIChpbnQpCgl3aGVuIGNvbXBhcmluZyBhZ2FpbnN0IG9uZS4KCShhc3NlbWJsZV92YXJpYWJsZSk6IE1hcmsgcGFyYW1ldGVyIGB0b3BfbGV2ZWwnIHdpdGgKCUFUVFJJQlVURV9VTlVTRUQuCgkoYXNzZW1ibGVfZXh0ZXJuYWxfbGliY2FsbCk6IE1hcmsgcGFyYW1ldGVyIGBmdW4nIHdpdGgKCUFUVFJJQlVURV9VTlVTRUQuCgkob3V0cHV0X2NvbnN0YW50X3Bvb2wpOiBNYXJrIHBhcmFtZXRlcnMgYGZubmFtZScgYW5kIGBmbmRlY2wnIHdpdGgKCUFUVFJJQlVURV9VTlVTRUQuCgpUdWUgT2N0IDEzIDEyOjUxOjA0IDE5OTggIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQGN5Z251cy5jb20+CgoJKiBjb25maWcvdjg1MC9saWIxZnVuY3MuYXNtIChfdWRpdnNpMyk6IEFkZCAudHlwZSBkZWNsYXJhdGlvbi4KCVJlcGxhY2UgdXNlIG9mIHI1IHdpdGggdXNlIG9mIHIxOS4KCgkqIGNvbmZpZy92ODUwL3Y4NTAuaCAoTElOS19QT0lOVEVSX1JFR05VTSk6IERlZmluZS4KCgkqIGNvbmZpZy92ODUwL3Y4NTAuYyAoY29tcHV0ZV9yZWdpc3Rlcl9zYXZlX3NpemUpOiBBbGxvdyBmb3IgdGhlCglmYWN0IHRoYXQgaGVscGVyIGZ1bmN0aW9ucyBzYXZlIGFsbCByZWdpc3RlcnMsIG5vdCBqdXN0IHRob3NlIHVzZWQKCWJ5IHRoZSBmdW5jdGlvbi4KCglSZXBsYWNlIGNvbnN0YW50IDMxIHdpdGggbWFjcm8gTElOS19QT0lOVEVSX1JFR05VTS4KCgkqIGNvbmZpZy92ODUwL3Y4NTAubWQ6IFVzZSAnaW5kaXJlY3Rfb3BlcmFuZCcgcmF0aGVyIHRoYW4KCSdtZW1vcnlfb3BlcmFuZCcgZm9yIGJpdCB0ZXN0L3NldC9jbGVhciBwYXR0ZXJucy4KClR1ZSBPY3QgMTMgMTE6NDk6MTQgMTk5OCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogbWlwcy9pcmlzNi5oIChBU01fT1VUUFVUX1dFQUtfQUxJQVMpOiBDYWxsIEFTTV9HTE9CQUxJWkVfTEFCRUwuCgkqIHZhcmFzbS5jIChhc3NlbWJsZV9zdGFydF9mdW5jdGlvbiBldCBhbCk6IERvbid0IGNhbGwKCUFTTV9HTE9CQUxJWkVfTEFCRUwgZm9yIHdlYWsgc3ltYm9scy4KClR1ZSBPY3QgMTMgMTE6Mzc6NDUgMTk5OCAgTmljayBDbGlmdG9uICA8bmlja2NAY3lnbnVzLmNvbT4KCgkqIGNzZS5jIChlcXVpdl9jb25zdGFudCk6IENoZWNrIGZvciBOVUxMIHJldHVybiBmcm9tCglnZW5fbG93cGFydF9pZl9wb3NzaWJsZSgpLgoKVHVlIE9jdCAxMyAxMToyNDo1MSAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBtbjEwMjAwLm1kIChhZGRzaTMsIHN1YnNpMywgbmVnc2kyKTogT25seSBhbGxvdyByZWdpc3RlciBvcGVyYW5kcy4KCgkqIGNvbGxlY3QyLmMgKG1haW4pOiBQYXNzIC1FTC8tRUIgdGhyb3VnaCB0byB0aGUgY29tcGlsZXIuCgoxOTk4LTEwLTEyICBIZXJtYW4gQS5KLiB0ZW4gQnJ1Z2dlICA8SGFqLlRlbi5CcnVnZ2VAbmV0LkhDQy5ubD4KCgkqIGV4cHIuYyAocHVzaF9ibG9jayk6IEhhbmRsZSB0YXJnZXRzIHdoZXJlIHRoZSBzdGFjayBncm93cwoJdG8gaGlnaGVyIGFkZHJlc3NlcywgYnV0IGFyZ3MgZ3JvdyB0byBsb3dlciBhZGRyZXNzZXMgYW5kCglBQ0NVTVVMQVRFX09VVEdPSU5HX0FSR1MgaXMgbm90IGRlZmluZWQuCgpUdWUgT2N0IDEzIDA4OjAwOjUyIDE5OTggIENhdGhlcmluZSBNb29yZSAgPGNsbUBjeWdudXMuY29tPgoKCSogY29uZmlnL3Y4NTAvdjg1MC5jIChwcmludF9vcGVyYW5kKTogRXh0ZW5kIG1lYW5pbmcKCW9mICdjJyBvcGVyYW5kcyB0byBzdXBwb3J0IC52dGluaGVyaXQuCgpUdWUgT2N0IDEzIDIxOjM4OjM1IDE5OTggIE1pY2hhZWwgSGF5ZXMgIDxtLmhheWVzQGVsZWMuY2FudGVyYnVyeS5hYy5uej4KCgkqIGNvbmZpZy9jNHgvYzR4LmM6IENvbnZlcnQgdG8gZ2VuX3J0eF9GT08uCglBZGRlZCBBVFRSSUJVVEVfVU5VU0VEIHRvIHVudXNlZCBmdW5jdGlvbiBhcmd1bWVudHMuCgkocmNfcmVnX29wZXJhbmQpOiBOZXcgcHJlZGljYXRlLgoJKGM0eF9ycHRiX2luc2VydCk6IE5ldyBmdW5jdGlvbi4KCShjNHhfcnB0Yl9ub3BfcCk6IFJlY29nbml6ZSBtb2RpZmllZCBycHRiX3RvcCBwYXR0ZXJuLgoJKGM0eF9vcHRpbWl6YXRpb25fb3B0aW9ucyk6IE5ldyBmdW5jdGlvbi4KCgkqIGNvbmZpZy9jNHgvYzR4Lm1kOiBDb252ZXJ0IHRvIGdlbl9ydHhfRk9PLgoJIChkZWNyZW1lbnRfYW5kX2JyYW5jaF9vbl9jb3VudCk6IE5ldyBwYXR0ZXJuLgoJIChycHRiX3RvcCk6IE1vZGlmaWVkIHBhdHRlcm4gdG8gd29yayB3aXRoIEJDVCBvcHRpbWl6YXRpb24uCgoJKiBjb25maWcvYzR4L2M0eC5oIChSQ19SRUcpOiBOZXcgcmVnaXN0ZXIgY2xhc3MuCgkocmNfcmVnX29wZXJhbmQpOiBEZWZpbmUgcHJvdG90eXBlLgoJKElTX1JDX1JFRyk6IE5ldyBtYWNyby4KCShJU19SQ19PUl9QU0VVRE9fUkVHKTogTmV3IG1hY3JvLgoJKElTX1JDX09SX1BTRVVET19SRUdOTyk6IE5ldyBtYWNyby4KCShPUFRJTUlaQVRJT05fT1BUSU9OUyk6IERlZmluZS4KCk1vbiBPY3QgMTIgMTk6NTc6MzQgMTk5OCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY29sbGVjdDIuYyAoZXh0cmFjdF9pbml0X3ByaW9yaXR5KTogTm8gcHJpb3JpdHkgaXMgNjU1MzUuCgpNb24gT2N0IDEyIDEyOjEwOjM3IDE5OTggIEFsZXhhbmRyZSBPbGl2YSAgPG9saXZhQGRjYy51bmljYW1wLmJyPgoKCSogTWFrZWZpbGUuaW4gKGJ1aWxkX3Rvb2xkaXIpOiBOZXcgdmFyaWFibGUsIHNhbWUgYXMgb2xkCgkkKHRvb2xkaXIpLCBidXQgd2l0aG91dCBkZXBlbmRpbmcgb24gJChsaWJkaXIpLyQodW5saWJzdWJkaXIpLgoJKEdDQ19GT1JfVEFSR0VUKTogQWRkIC1CJChidWlsZF90b29sZGlyKS9iaW4vLgoJKGJvb3RzdHJhcCwgYm9vdHN0cmFwMiwgYm9vdHN0cmFwMywgYm9vdHN0cmFwNCk6IExpa2V3aXNlLgoKCSogY29uZmlndXJlLmluIChneHhfaW5jbHVkZV9kaXIpOiBTZXQgZGVmYXVsdCBiYXNlZCBvbiB1bmxpYnN1YmRpci4KCSogTWFrZWZpbGUuaW4gKHRvb2xkaXIpOiBMaWtld2lzZS4KCShjY2NwLm8sIGNwcGxpYi5vKTogVXNlIHVubGlic3ViZGlyIGltcGxpY2l0bHkgdGhyb3VnaAoJZ3h4X2luY2x1ZGVfZGlyLCBpbmNsdWRlZGlyIGFuZCB0b29sZGlyLgoJKHByb3RvaXplLm8sIHVucHJvdG9pemUubyk6IExpa2V3aXNlLgoKTW9uIE9jdCAxMiAxMDo1MDo0NCAxOTk4ICBOaWNrIENsaWZ0b24gIDxuaWNrY0BjeWdudXMuY29tPgoKCSogY29uZmlnL2FybS9hcm0ubWQ6IFJlcGxhY2UgKHJlZyAyNCkgd2l0aCAocmVnOkNDIDI0KS4KCgkqIGNvbmZpZy9hcm0vdGh1bWIuYyAodGh1bWJfb3ZlcnJpZGVfb3B0aW9ucyk6IEFkZCB3YXJuaW5nIGFib3V0CglQSUMgY29kZSBub3QgYmVpbmcgc3VwcG9ydGVkIGp1c3QgeWV0LgoKU3VuIE9jdCAxMSAxNjo0OToxNSAxOTk4ICBKb2huIFdlaGxlICAoam9obkBmZWl0aC5jb20pCgoJKiBmbG93LmM6IFVwZGF0ZSBjb21tZW50LgoJKG5vdGljZV9zdGFja19wb2ludGVyX21vZGlmaWNhdGlvbik6IE5ldyBzdGF0aWMgZnVuY3Rpb24uCgkocmVjb3JkX3ZvbGF0aWxlX2luc25zKTogVXNlIGl0LgoJKG1hcmtfcmVnc19saXZlX2F0X2VuZCk6IE1hcmsgdGhlIHN0YWNrIHBvaW50ZXIgYXMgYWxpdmUKCWF0IHRoZSBlbmQgb2YgdGhlIGZ1bmN0aW9uIGlmIGN1cnJlbnRfZnVuY3Rpb25fc3BfaXNfdW5jaGFuZ2luZwoJaXMgc2V0LgoJKGxpZmVfYW5hbHlzaXNfMSk6IFNldCBjdXJyZW50X2Z1bmN0aW9uX3NwX2lzX3VuY2hhbmdpbmcuCgkqIGZ1bmN0aW9uLmM6IERlZmluZSBpdC4KCShpbml0X2Z1bmN0aW9uX3N0YXJ0KTogSW5pdGlhbGl6ZSBpdC4KCSogb3V0cHV0Lmg6IERlY2xhcmUgaXQuCgkqIHJlb3JnLmMgKGZpbGxfc2ltcGxlX2RlbGF5X3Nsb3RzLCBkYnJfc2NoZWR1bGUpOiBNYXJrCgl0aGUgc3RhY2sgcG9pbnRlciBhcyBhbGl2ZSBhdCB0aGUgZW5kIG9mIHRoZSBmdW5jdGlvbiBpZgoJY3VycmVudF9mdW5jdGlvbl9zcF9pc191bmNoYW5naW5nIGlzIHNldC4KCSogaTM4Ni5jIChpeDg2X2VwaWxvZ3VlKTogT3B0aW1pemUgdGhlIHJlc3RvcmluZwoJb2YgdGhlIHN0YWNrIHBvaW50ZXIuCgpNb24gT2N0IDEyIDAxOjIyOjUzIDE5OTggIEplZmYgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiB2ZXJzaW9uLmM6IEJ1bXAgZm9yIHNuYXBzaG90LgoKU3VuIE9jdCAxMSAyMzowNDozMCAxOTk4ICBSb2JlcnQgTGlwZSAgPHJvYmVydGxAZGdpaS5jb20+CgoJKiBjLXByYWdtYS5jIChoYW5kbGVfcHJhZ21hX3Rva2VuKTogSWYgcGFzc2VkIGEgdG9rZW4gaW5zdGVhZAoJb2YgYSB0cmVlLCB1c2UgdGhhdCBhcyB0aGUgcGFjayB2YWx1ZS4KClN1biBPY3QgMTEgMTQ6MjE6MTQgMTk5OCAgTWFyayBNaXRjaGVsbCAgPG1hcmtAbWFya21pdGNoZWxsLmNvbT4KCgkqIGZsb3cuYyAoZmluZF9iYXNpY19ibG9ja3NfMSk6IEZpeCBwcm90b3R5cGUuCgpTdW4gT2N0IDExIDA1OjAzOjQxIDE5OTggIEtlbiBSYWVidXJuICA8cmFlYnVybkBjeWdudXMuY29tPgoKCSogdHJlZS5oIChERUNMX05PX0NIRUNLX01FTU9SWV9VU0FHRSk6IE5ldyBtYWNyb3MuCgkoc3RydWN0IHRyZWVfZGVjbCk6IE5ldyBmaWVsZHMgbm9fY2hlY2tfbWVtb3J5X3VzYWdlLgoJKiBjLWNvbW1vbi5jIChlbnVtIGF0dHJzKTogQWRkIEFfTk9fQ0hFQ0tfTUVNT1JZX1VTQUdFLgoJKGluaXRfYXR0cmlidXRlcyk6IFJlZ2lzdGVyIGl0IGFzIGEgbmV3IGF0dHJpYnV0ZS4KCShkZWNsX2F0dHJpYnV0ZXMpOiBTZXQgZmxhZ3Mgb24gZnVuY3Rpb25zIGdpdmVuIHRoYXQgYXR0cmlidXRlLgoJKiBjLWRlY2wuYyAoZHVwbGljYXRlX2RlY2xzKTogTWVyZ2UgbmV3IGF0dHJpYnV0ZS4KCSogZXhwci5oIChjdXJyZW50X2Z1bmN0aW9uX2NoZWNrX21lbW9yeV91c2FnZSk6IERlY2xhcmUgbmV3IHZhci4KCSogY2FsbHMuYywgZXhwci5jLCBmdW5jdGlvbi5jLCBzdG10LmMsIGFscGhhLmMsIGNsaXBwZXIuYywgbTg4ay5jLAoJcGEuYywgc3BhcmMuYzogUmVwbGFjZSB1c2VzIG9mIGZsYWdfY2hlY2tfbWVtb3J5X3VzYWdlIHdpdGgKCWN1cnJlbnRfZnVuY3Rpb25fY2hlY2tfbWVtb3J5X3VzYWdlLgoJKiBmdW5jdGlvbi5oOiBBZGQgZmllbGQgdG8gc3RydWN0IGZ1bmN0aW9uLgoJKiBmdW5jdGlvbi5jIChjdXJyZW50X2Z1bmN0aW9uX2NoZWNrX21lbW9yeV91c2FnZSk6IERlZmluZSBpdC4KCShwdXNoX2Z1bmN0aW9uX2NvbnRleHRfdG8sIHBvcF9mdW5jdGlvbl9jb250ZXh0X2Zyb20pOiBTYXZlIGFuZAoJcmVzdG9yZSBpdC4KCShleHBhbmRfZnVuY3Rpb25fc3RhcnQpOiBTZXQgaXQsIGJhc2VkIG9uIGdsb2JhbCBmbGFnIGFuZCBmdW5jdGlvbgoJYXR0cmlidXRlLgoKCSogZXhwci5jIChleHBhbmRfZXhwciwgY2FzZSBWQVJfREVDTCk6IEluIG1lbW9yeS1jaGVja2luZyBjb2RlLCBkbwoJY2hlY2sgbm9uLWF1dG9tYXRpYyB2YXJpYWJsZXMsIHRvIHBlcm1pdCBkZXRlY3Rpb24gb2Ygd3JpdGVzIHRvCglyZWFkLW9ubHkgbG9jYXRpb25zIGluIGVtYmVkZGVkIHN5c3RlbXMgd2l0aG91dCBtZW1vcnkgbWFuYWdlbWVudC4KCSogY2FsbHMuYyAoc3RvcmVfb25lX2FyZyk6IFVzZSBBUkdTX1NJWkVfUlRYIHRvIGdldCBzaXplIG9mIGFyZ3VtZW50Cgl3aGVuIGVtaXR0aW5nIGNoa3Jfc2V0X3JpZ2h0X2xpYmZ1bmMgY2FsbCwgZXZlbiBpZiB0aGUgYXJndW1lbnQgaXMKCUJMS21vZGUgb3IgdmFyaWFibGUtc2l6ZWQ7IGRvbid0IGFib3J0LgoKCSogb3B0YWJzLmMgKGluaXRfb3B0YWJzKTogQ3JlYXRlIENoZWNrZXIgYW5kIF9fY3lnX3Byb2ZpbGVfKgoJc3ltYm9scyBpbiBQbW9kZSwgbm90IFZPSURtb2RlLgoKU3VuIE9jdCAxMSAwMTowMzowNSAxOTk4ICBaYWNrIFdlaW5iZXJnICA8emFja0ByYWJpLnBoeXMuY29sdW1iaWEuZWR1PgoKCSogY3BwZXhwLmM6IFdoZW4gZm9yY2luZyB1bnNpZ25lZCBjb21wYXJpc29ucywgY2FzdCBib3RoIHNpZGVzCglvZiB0aGUgb3BlcmF0aW9uLgoKCSogY3BwaGFzaC5oOiBNb3ZlIHN0YXRpYyBkZWNsYXJhdGlvbiBvZiBoYXNodGFiW10uLi4KCSogY3BwaGFzaC5jOiAuLi5oZXJlLgoKCSogY3BwbGliLmM6IENhc3QgZGlmZmVyZW5jZSBvZiB0d28gcG9pbnRlcnMgdG8gc2l6ZV90IGJlZm9yZQoJY29tcGFyaW5nIGl0IHRvIHNpemVfdC4gIENhc3Qgc2lnbmVkIHRvIHVuc2lnbmVkCgliZWZvcmUgY29tcGFyaW5nIHRvIHNpemVfdC4gKEZJWE1FOiBzdHJ1Y3QgYXJnZGF0YSBzaG91bGQgdXNlCgl1bnNpZ25lZCBidWZmZXIgc2l6ZXMuKQoJKiBjcHBsaWIuaCAoc3RydWN0IGNwcF9yZWFkZXIpOiBEZWNsYXJlIHRva2VuX2J1ZmZlcl9zaXplIGFzCgl1bnNpZ25lZCBpbnQuIChDUFBfV1JJVFRFTik6IENhc3QgcmV0dXJuIHZhbHVlIHRvIHNpemVfdC4KCShDUFBfUkVTRVJWRSk6IFBhcmVudGhlc2l6ZSBOIGZvciBldmFsdWF0aW9uIG9yZGVyLCBjYXN0IHRvCglzaXplX3QgYmVmb3JlIGNvbXBhcmlzb24uCgpTdW4gT2N0IDExIDAwOjE1OjI5IDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGZsb3cuYyAoZmluZF9iYXNpY19ibG9ja3MpOiBEZWxldGUgImxpdmVfcmVhY2hhYmxlX3AiIGFyZ3VtZW50LgoJKGZpbmRfYmFzaWNfYmxvY2tzXzEpOiBTaW1pbGFybHkuCgkqIG91dHB1dC5oIChmaW5kX2Jhc2ljX2Jsb2Nrcyk6IEZpeCBwcm90b3R5cGUuCgkqIGdjc2UuYywgdG9wbGV2LmM6IERvbid0IHBhc3MgImxpdmVfcmVhY2hhYmxlX3AiIGFyZ3VtZW50IHRvCglmaW5kX2Jhc2ljX2Jsb2NrcyBhbnltb3JlLgoKU2F0IE9jdCAxMCAyMjowMDozNCAxOTk4ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogYmFzaWMtYmxvY2suaCAoRVhFQ1VURV9JRl9TRVRfSU5fU0JJVE1BUCk6IE5ldyBtYWNyby4KCShzYml0bWFwX2ZyZWUsIHNiaXRtYXBfdmVjdG9yX2ZyZWUpOiBOZXcgbWFjcm9zLgoJKiBvdXRwdXQuaCAocnRsX2R1bXBfZmlsZSk6IERlY2xhcmUuCgpTYXQgT2N0IDEwIDE3OjAxOjQyIDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHJlZ21vdmUuYyAob3B0aW1pemVfcmVnX2NvcHlfMyk6IEhvbm9yIFRSVUxZX05PT1BfVFJVTkNBVElPTi4KCkZyaSBPY3QgIDkgMjI6MDg6MDUgMTk5OCAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogZnAtYml0LmMgKFNGdHlwZSk6IERvbid0IGltcGxpY2l0bHkgdXNlIGludCBpbiBkZWNsYXJhdGlvbi4KCShERnR5cGUpOiBMaWtld2lzZS4KCShfZnBkaXZfcGFydHMpOiBSZW1vdmUgdW51c2VkIHBhcmFtZXRlciBgdG1wJywgYWxsIGNhbGxlcnMgY2hhbmdlZC4KCShkaXZpZGUpOiBSZW1vdmUgdW51c2VkIHZhcmlhYmxlIGB0bXAnLgoJKHNpX3RvX2Zsb2F0KTogQ2FzdCBudW1lcmljIGNvbnN0YW50IHRvIChTSXR5cGUpIGJlZm9yZSBjb21wYXJpbmcKCWl0IGFnYWluc3Qgb25lLgoKRnJpIE9jdCAgOSAxNjowMzoxOSAxOTk4ICBHcmFoYW0gIDxncmFoYW1zQHJjcC5jby51az4KCgkqIGZsb3cuYyAocHJpbnRfcnRsX3dpdGhfYmIpOiBDaGFuZ2VkIHR5cGUgb2YgaW5fYmJfcCB0byBtYXRjaCB1c2UuCgkqIGdjYy5jIChhZGRfcHJlcHJvY2Vzc29yX29wdGlvbik6IENvcnJlY3QgdHlwbyB3aGVuIGFsbG9jYXRpbmcKCW1lbW9yeSwgc2l6ZW9mKCkgYXJndW1lbnQgaGFkIG9uZSB0b28gbWFueSBgKicuCgkoYWRkX2Fzc2VtYmxlcl9vcHRpb24pOiBMaWtld2lzZS4KCShhZGRfbGlua2VyX29wdGlvbik6IExpa2V3aXNlLgoJKiBnY292LmMgKG91dHB1dF9kYXRhKTogTGlrZXdpc2UuCgkqIGxvY2FsLWFsbG9jLmMgKG1lbXJlZl91c2VkX2JldHdlZW5fcCk6IExpa2V3aXNlLgoJKHVwZGF0ZV9lcXVpdl9yZWdzKTogTGlrZXdpc2UuCgkqIGxvb3AuYyAoc3RyZW5ndGhfcmVkdWNlKTogTGlrZXdpc2UuCgkqIHJlZy1zdGFjay5jIChyZWNvcmRfYXNtX3JlZ19saWZlKTogTGlrZXdpc2UuCgkoc3Vic3RfYXNtX3N0YWNrX3JlZyk6IExpa2V3aXNlLgoJKiByZW9yZy5jIChkYnJfc2NoZWR1bGUpOiBMaWtld2lzZS4KCkZyaSBPY3QgIDkgMTU6NTc6NTEgMTk5OCAgQmVybmQgU2NobWlkdCAgPGNydXhAUG9vbC5JbmZvcm1hdGlrLlJXVEgtQWFjaGVuLkRFPgoKCSogZmxvdy5jIChsaWZlX2FuYWx5c2lzXzEpOiBCcmVhayBvdXQgc29tZSBmdW5jdGlvbnMuCgkoZmluZF9iYXNpY19ibG9ja3NfMSk6IExpa2V3aXNlLiAgQWxzbyBtb3ZlIHNvbWUgdmFyaWFibGVzIG91dCBhbmQKCW1ha2UgdGhlbSBzdGF0aWMuCglSZW5hbWUgTk9OTE9DQUxfTEFCRUxfTElTVCBhcmcgdG8gTk9OTE9DQUxfTEFCRUxTIGFuZCBpbml0aWFsaXplCgluZXcgc3RhdGljIHZhciBub25sb2NhbF9sYWJlbF9saXN0IHdpdGggaXQuCgkoYWN0aXZlX2VoX3JlZ2lvbiwgbmVzdGVkX2VoX3JlZ2lvbiwgbGFiZWxfdmFsdWVfbGlzdCwKCW5vbmxvY2FsX2xhYmVsX2xpc3QpOiBOZXcgc3RhdGljIHZhcmlhYmxlcy4KCShtYWtlX2VkZ2VzLCBkZWxldGVfdW5yZWFjaGFibGVfYmxvY2tzLCBkZWxldGVfYmxvY2spOiBOZXcgc3RhdGljCglmdW5jdGlvbnMsIGJyb2tlbiBvdXQgb2YgZmluZF9iYXNpY19ibG9ja3NfMS4KCShyZWNvcmRfdm9sYXRpbGVfaW5zbnMsIG1hcmtfcmVnc19saXZlX2F0X2VuZCwgc2V0X25vb3BfcCwKCW5vb3BfbW92ZV9wKTogTmV3IHN0YXRpYyBmdW5jdGlvbnMsIGJyb2tlbiBvdXQgb2YgbGlmZV9hbmFseXNpc18xLgoKRnJpIE9jdCAgOSAxNTo0OToyOSAxOTk4ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogZXhwbWVkLmMgKHN0b3JlX2JpdF9maWVsZCk6IFB1biBub24taW50ZWdyYWwgc3RyX3J0eCBtb2Rlcy4KCVRha2UgZXh0cmEgY2FyZSBmb3Igb3AwIG5vdyBwb3NzaWJseSBiZWluZyBhIHN1YnJlZy4KCShleHRyYWN0X2JpdF9maWVsZCk6IExpa2V3aXNlLgoJKiBmdW5jdGlvbi5jIChwdXJnZV9hZGRyZXNzb2ZfMSk6IFJldmVydCBPY3QgNCBjaGFuZ2UuICBEcm9wCgl0aGUgcmVnIHRvIG1lbW9yeSBpZiB0aGVyZSBpcyBubyBlcXVhbCBzaXplZCBpbnRlZ3JhbCBtb2RlLgoJKiBzdG9yLWxheW91dC5jIChpbnRfbW9kZV9mb3JfbW9kZSk6IE5ldyBmdW5jdGlvbi4KCSogbWFjaG1vZGUuaDogUHJvdG90eXBlIGl0LgoKRnJpIE9jdCAgOSAxNDoyNjo0NCAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBnbG9iYWwuYyAoYnVpbGRfaW5zbl9jaGFpbik6IFZlcmlmeSBubyByZWFsIGluc25zIGV4aXN0IHBhc3QgdGhlCgllbmQgb2YgdGhlIGxhc3QgYmFzaWMgYmxvY2ssIHRoZW4gZXhpdCB0aGUgbG9vcC4KCkZyaSBPY3QgIDkgMTE6NDQ6NDcgMTk5OCAgRGF2aWQgRWRlbHNvaG4gIDxlZGVsc29obkBnbnUub3JnPgoKCSogbG9vcC5jIChpbnNlcnRfYmN0KTogRW5zdXJlIGxvb3BfaXRlcmF0aW9uX3ZhciBub256ZXJvIGJlZm9yZSB1c2UuCgpUaHUgT2N0ICA4IDIxOjU5OjQ3IDE5OTggIERhdmUgQnJvbGxleSAgPGJyb2xsZXlAY3lnbnVzLmNvbT4KCgkqIGVtaXQtcnRsLmMgKGluaXRfZW1pdF9vbmNlKTogQ2FsbCBJTklUX0VYUEFOREVSUy4KClRodSBPY3QgIDggMjI6MDM6NDUgMTk5OCAgRGF2aWQgRWRlbHNvaG4gIDxlZGVsc29obkBnbnUub3JnPgoKCSogcnM2MDAwLmggKFJUWF9DT1NUUyk6IEFkZCBQUk9DRVNTT1JfUFBDNjA0ZSBjYXNlcy4KClRodSBPY3QgIDggMTc6MDA6MTggMTk5OCAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGZsb3cuYyAoZmluZF9iYXNpY19ibG9ja3MpOiBDb3JyZWN0bHkgZGV0ZXJtaW5lIHdoZW4gYSBjYWxsCglpcyB3aXRoaW4gYW4gZXhjZXB0aW9uIHJlZ2lvbi4KClRodSBPY3QgIDggMTc6MTU6MDQgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogdG9wbGV2LmMgKG91dHB1dF9maWxlX2RpcmVjdGl2ZSk6IFVzZSBESVJfU0VQQVJBVE9SLCBub3QgJy8nLgoKCSogY3BwbGliLmg6IFByb3RlY3QgZnJvbSBtdWx0aXBsZSBpbmNsdXNpb25zLgoJKiBjcHBsaWIuYzogRml4IG1pbm9yIGZvcm1hdHRpbmcgcHJvYmxlbXMuCgoJKiBpMzg2L3htLWN5Z3dpbjMyLmg6IE9ubHkgZGVmaW5lIFBPU0lYIGlmIGl0IGlzIG5vdCBhbHJlYWR5IGRlZmluZWQuCgoJKiBqdW1wLmMgKGp1bXBfb3B0aW1pemUpOiBSZXZlcnQgYWNjaWRlbnRhbCBwYXRjaC4KCgkqIE1ha2VmaWxlLmluIChjcHBsaWIubyk6IFVzZSB1bmxpYnN1YmRpci4KClRodSBPY3QgIDggMTI6NTA6NDcgMTk5OCAgSmltIFdpbHNvbiAgPHdpbHNvbkBjeWdudXMuY29tPgoKCSogbG9vcC5jIChnZXRfY29uZGl0aW9uKTogQWxsb3cgY29tYmluZSB3aGVuIGVpdGhlciBjb21wYXJlIGlzCglWT0lEbW9kZS4KClRodSBPY3QgIDggMTE6MzE6MDEgMTk5OCAgSmVmZiBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHZlcnNpb24uYzogQnVtcCBmb3Igc25hcHNob3QuCgpUaHUgT2N0ICA4IDEyOjIxOjE0IDE5OTggIFJpY2hhcmQgRnJpdGgtTWFjZG9uYWxkICA8cmljaGFyZEBicmFpbnN0b3JtLmNvLnVrPgoKCSogYy1sZXguYyAocmVtZW1iZXJfcHJvdG9jb2xfcXVhbGlmaWVycyk6IEhhbmRsZSBSSURfQllSRUYuCgkoaW5pdF9sZXgpOiBJbml0aWFsaXplIHJpZHBvaW50ZXJzW1JJRF9CWVJFRl0uCgkqIGMtbGV4LmggKGVudW0gcmlkKTogQWRkIFJJRF9CWVJFRi4KCSogYy1wYXJzZS5ncGVyZjogQWRkIFJJRF9CWVJFRiBhcyBhIHR5cGUgcXVhbGlmaWVyLgoJKiBvYmpjL29iamMtYWN0LmMgKGlzX29iamNfdHlwZV9xdWFsaWZpZXJzKTogSGFuZGxlIFJJRF9CWVJFRi4KCShlbmNvZGVfdHlwZV9xdWFsaWZpZXJzKTogU2ltaWxhcmx5LgoJKiBjLWdwZXJmLmg6IFJlYnVpbHQuCgpUaHUgT2N0ICA4IDA1OjU2OjAwIDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGMtY29tbW9uLmMgKHR5cGVfZm9yX21vZGUpOiBPbmx5IHJldHVybiBUSXR5cGUgbm9kZXMgd2hlbgoJSE9TVF9CSVRTX1BFUl9XSURFX0lOVCBpcyA+PSA2NCBiaXRzLgoJKiBjLWRlY2wuYyAoaW50VElfdHlwZV9ub2RlLCB1bnNpZ25lZF9pbnRUSV90eXBlX25vZGUpOiBPbmx5IGRlY2xhcmUKCXdoZW4gSE9TVF9CSVRTX1BFUl9XSURFX0lOVCBpcyA+PSA2NCBiaXRzLgoJKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogT25seSBjcmVhdGUgVEl0eXBlIG5vZGVzIHdoZW4KCUhPU1RfQklUU19QRVJfV0lERV9JTlQgaXMgPj0gNjQgYml0cy4KCSogYy10cmVlLmggKGludFRJX3R5cGVfbm9kZSwgdW5zaWduZWRfaW50VElfdHlwZV9ub2RlKTogT25seSBkZWNsYXJlCgl3aGVuIEhPU1RfQklUU19QRVJfV0lERV9JTlQgaXMgPj0gNjQgYml0cy4KClRodSBPY3QgIDggMDU6MDU6MzQgMTk5OCAgQmVybmQgU2NobWlkdCAgPGNydXhAUG9vbC5JbmZvcm1hdGlrLlJXVEgtQWFjaGVuLkRFPgoKCSogc3RtdC5jIChuX29jY3VycmVuY2VzKTogTmV3IHN0YXRpYyBmdW5jdGlvbi4KCShleHBhbmRfYXNtX29wZXJhbmRzKTogVmVyaWZ5IHRoYXQgYWxsIGNvbnN0cmFpbnMgbWF0Y2ggaW4gdGhlCgludW1iZXIgb2YgYWx0ZXJuYXRpdmVzLgoJVmVyaWZ5IHRoYXQgJysnIG9yICc9JyBhcmUgYXQgdGhlIGJlZ2lubmluZyBvZiBhbiBvdXRwdXQgY29uc3RyYWludC4KCURvbid0IGFsbG93ICcmJyBmb3IgaW5wdXQgb3BlcmFuZHMuCglWZXJpZnkgdGhhdCAnJScgaXNuJ3Qgd3JpdHRlbiBmb3IgdGhlIGxhc3Qgb3BlcmFuZC4KCSogcmVsb2FkLmMgKGZpbmRfcmVsb2Fkcyk6IEFib3J0IGlmIGFuIGFzbSBpcyBmb3VuZCB3aXRoIGludmFsaWQKCWNvbnN0cmFpbnRzOyBhbGwgcG9zc2libGUgcHJvYmxlbXMgb3VnaHQgdG8gYmUgY2hlY2tlZCBmb3IgZWFybGllci4KClRodSBPY3QgIDggMDQ6MjY6MjAgMTk5OCAgTWljaGFlbCBIYXllcyAgPG0uaGF5ZXNAZWxlYy5jYW50ZXJidXJ5LmFjLm56PgoKCSogZmxhZ3MuaCAoZmxhZ19icmFuY2hfb25fY291bnRfcmVnKTogQWx3YXlzIGRlY2xhcmUuCgkqIHRvcGxldi5jIChmbGFnX2JyYW5jaF9vbl9jb3VudF9yZWcpOiBMaWtld2lzZS4KCSogdG9wbGV2LmM6IEZpeCB0eXBvcy4KCgkqIHJlYWwuYyAoYzR4dG9lKTogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZXMuICBBZGQgc29tZSBtaXNzaW5nIHBhcmVucy4KCSh0b2M0eCk6IFNpbWlsYXJseS4KClRodSBPY3QgIDggMDE6MjU6MjIgMTk5OCAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGZsb3cuYyAoZmluZF9iYXNpY19ibG9ja3MpOiBDYWxjIHVwcGVyIGJvdW5kIGZvciBleHRyYSBub3BzIGluCgltYXhfdWlkc19mb3JfZmxvdy4KCShmaW5kX2Jhc2ljX2Jsb2Nrc18xKTogQWRkIGEgbm9wIHRvIHRoZSBlbmQgb2YgYSBiYXNpYyBibG9jayB3aGVuCglhIHRyYWlsaW5nIGNhbGwgaW5zbiBkb2VzIG5vdCBoYXZlIGFibm9ybWFsIGNvbnRyb2wgZmxvdy4KCSogZ2NzZS5jIChwcmVfdHJhbnNwb3V0KTogTmV3IHZhcmlhYmxlLgoJKGFsbG9jX3ByZV9tZW0sIGZyZWVfcHJlX21lbSwgZHVtcF9wcmVfZGF0YSk6IEJvb2trZWVwaW5nIGZvciBpdC4KCShjb21wdXRlX3ByZV90cmFuc3BvdXQpOiBDYWxjdWxhdGUgaXQuCgkoY29tcHV0ZV9wcmVfcHBpbm91dCk6IFVzZSBpdCB0byBlbGltaW5hdGUgaW1wb3NzaWJsZSBwbGFjZW1lbnRzCglkdWUgdG8gYWJub3JtYWwgY29udHJvbCBmbG93IHRocm91Z2ggY2FsbHMuCgkoY29tcHV0ZV9wcmVfZGF0YSk6IENhbGwgY29tcHV0ZV9wcmVfdHJhbnNwb3V0LgoKV2VkIE9jdCAgNyAyMTo0MDoyNCAxOTk4ICBEYXZpZCBTLiBNaWxsZXIgIDxkYXZlbUBwaWVyZG9sLmNvYmFsdG1pY3JvLmNvbT4KCgkqIGNvbmZpZy9zcGFyYy9zb2wyLXNsZC02NC5oIChBU01fQ1BVX1NQRUMpOiBGaXggdHlwby4KCldlZCBPY3QgIDcgMjE6MTk6NDYgMTk5OCAgS2VuIFJhZWJ1cm4gIDxyYWVidXJuQGN5Z251cy5jb20+CgoJKiBjb25maWcvbWlwcy9taXBzLm1kICh0YWJsZWp1bXBfaW50ZXJuYWwzLCB0YWJsZWp1bXBfaW50ZXJuYWw0CglhbmQgbWF0Y2hpbmcgZGVmaW5lX2luc25zKTogVGFjayBvbiBhIGB1c2UnIG9mIHRoZSB0YWJsZSBsYWJlbCwgc28KCWZsb3cgYW5hbHlzaXMgd2lsbCByZWNvZ25pemUgYSB0YWJsZWp1bXAuCgpXZWQgT2N0ICA3IDE3OjMzOjM5IDE5OTggIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBnY3NlLmMgKHByZV9pbnNlcnRfaW5zbik6IFR3ZWVrIHRvIG5vdGljZSB0aGF0IGNhbGxzIGRvIG5vdAoJYWx3YXlzIGVuZCBiYXNpYyBibG9ja3MgZm9yIGFibm9ybWFsIGVkZ2UgcmVhc29ucy4KCldlZCBPY3QgIDcgMTQ6NDA6NDMgMTk5OCAgTmljayBDbGlmdG9uICA8bmlja2NAY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy9pMzg2L2kzODYuaDogUmVtb3ZlIGRlZmluaXRpb24gb2YKCUhBTkRMRV9QUkFHTUFfUEFDS19QVVNIX1BPUC4KCgkqIGNvbmZpZy9pMzg2L2dvMzIuaDogQWRkIGRlZmluaXRpb24gb2YKCUhBTkRMRV9QUkFHTUFfUEFDS19QVVNIX1BPUC4KCgkqIGNvbmZpZy9pMzg2L3dpbjMyLmg6IEFkZCBkZWZpbml0aW9uIG9mCglIQU5ETEVfUFJBR01BX1BBQ0tfUFVTSF9QT1AuCgoJKiBjb25maWcvaTM4Ni9jeWd3aW4zMi5oOiBBZGQgZGVmaW5pdGlvbiBvZgoJSEFORExFX1BSQUdNQV9QQUNLX1BVU0hfUE9QLgoKCSogYy1wcmFnbWEuYyAoaW5zZXJ0X3BhY2tfYXR0cmlidXRlcyk6IERvIG5vdCBpbnNlcnQKCWF0dHJpYnV0ZXMgdW5sZXNzICNwcmFnbWEgcGFjayhwdXNoLDxuPikgaXMgaW4gZWZmZWN0LgoKV2VkIE9jdCAgNyAxMjoxMDo0NiAxOTk4ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CgoJKiBleHByLmMgKGVtaXRfZ3JvdXBfc3RvcmUpOiBIYW5kbGUgYSBQQVJBTExFTCBkZXN0aW5hdGlvbi4KCldlZCBPY3QgIDcgMTA6MDc6MjkgMTk5OCAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGdjc2UuYyAocHJlX2luc2VydF9pbnNuKTogV2hlbiBhIGNhbGwgZW5kcyBhIGJiLCBpbnNlcnQKCXRoZSBuZXcgaW5zbnMgYmVmb3JlIHRoZSBhcmd1bWVudCByZWdzIGFyZSBsb2FkZWQuCgpXZWQgT2N0ICA3IDEyOjU1OjI2IDE5OTggIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIE1ha2VmaWxlLmluIChjLWdwZXJmLmgpOiBBZGQgLUwgS1ItQyAtRiAnLCAwLCAwJyBmbGFncyB0byBncGVyZi4KCShjLXBhcnNlLmdwZXJmKTogVXBkYXRlIGNvbW1lbnRzIGRlc2NyaWJpbmcgaW52b2NhdGlvbiBmbGFncy4KCShjLWdwZXJmLmgpOiBSZWdlbmVyYXRlIHVzaW5nIGdwZXJmIDIuNy4xICgxOTk4MTAwNiBlZ2NzKS4KCjE5OTgtMTAtMDcgIE1hbmZyZWQgSG9sbHN0ZWluICA8bWFuZnJlZEBzLWRpcmVrdG5ldC5kZT4KCgkqIHJlbG9hZDEuYyAocmVsb2FkKTogQ2FsbCBmcmVlIGJlZm9yZSBjbG9iYmVyaW5nIHRoZSBtZW1vcnkKCWxvY2F0aW9ucyBvciBjb25zdGFudHMgcG9pbnRlcnMuCgpXZWQgT2N0ICA3IDAyOjA1OjIwIDE5OTggIERhdmlkIFMuIE1pbGxlciAgPGRhdmVtQHBpZXJkb2wuY29iYWx0bWljcm8uY29tPgoKCSogY29uZmlnL3NwYXJjL3NvbDItc2xkLTY0LmggKFRSQU5TRkVSX0ZST01fVFJBTVBPTElORSk6IFJld29yawoJZm9yIGVmZmljaWVuY3kgYnkgY2hlY2tpbmcgd2hldGhlciB3ZSBuZWVkIHRvIG1vZGlmeSB0aGUgY3VycmVudAoJc3RhY2sgcGVybWlzc2lvbiBhdCBhbGwuCgkoQVNNX09VVFBVVF9DT05TVFJVQ1RPUiwgQVNNX09VVFBVVF9ERVNUUlVDVE9SKTogRGVmaW5lLgoJKiBjb25maWcvc3BhcmMvc3BhcmMuYyAoc3BhcmNfaW5pdGlhbGl6ZV90cmFtcG9saW5lKTogRW1pdAoJX19lbmFibGVfZXhlY3V0ZV9zdGFjayBsaWJjYWxsIGhlcmUgdG9vIGlmCglUUkFOU0ZFUl9GUk9NX1RSQU1QT0xJTkUgaXMgZGVmaW5lZC4KCSogY29uZmlnL3NwYXJjL3NwYXJjLmg6IFNldCBUQVJHRVRfQVJDSDMyIHRvIGEgY29uc3RhbnQgaWYKCUlOX0xJQkdDQzIuCgpXZWQgT2N0ICA3IDAyOjI3OjUyIDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIE1ha2VmaWxlLmluIChEUklWRVJfREVGSU5FUyk6IFJlbW92ZSBsYXN0IGNoYW5nZS4KCldlZCBPY3QgIDcgMDE6MDg6NDMgMTk5OCAgQmVybmQgU2NobWlkdCAgPGNydXhAUG9vbC5JbmZvcm1hdGlrLlJXVEgtQWFjaGVuLkRFPgoKCSoganVtcC5jIChkdXBsaWNhdGVfbG9vcF9leGl0X3Rlc3QpOiBTdHJpcCBSRUdfV0FTXzAgbm90ZXMgb2ZmIGFsbAoJaW5zbnMgd2UncmUgZ29pbmcgdG8gY29weS4KCSogcmVnY2xhc3MuYyAocmVnX3NjYW5fbWFya19yZWZzKTogRG9uJ3QgdGVzdCBYIGZvciBOVUxMX1JUWC4KCgkqIGxvb3AuYyAoY291bnRfb25lX3NldCk6IEFkZCBwcm90b3R5cGUuCgoJKiBjYWxsZXItc2F2ZS5jIChyZXN0b3JlX3JlZmVyZW5jZWRfcmVncyk6IExvc2UgbW9kZSBhcmd1bWVudC4KCShpbnNlcnRfc2F2ZSk6IExvc2UgbW9kZSBhcmd1bWVudC4KCShpbnNlcnRfcmVzdG9yZSk6IExvc2UgbW9kZSBhcmd1bWVudC4KCShpbnNlcnRfb25lX2luc24pOiBMb3NlIG1vZGUgYXJndW1lbnQuCgkoc2F2ZV9jYWxsX2Nsb2JiZXJlZF9yZWdzKTogTG9zZSBtb2RlIGFyZ3VtZW50LgoJKHNldHVwX3NhdmVfYXJlYXMpOiBUYWtlIG5vIGFyZ3VtZW50IGFuZCByZXR1cm4gdm9pZC4gIEFsbCBjYWxsZXJzCgljaGFuZ2VkLgoJRG9uJ3QgdmVyaWZ5IHZhbGlkaXR5IG9mIG1lbW9yeSBhZGRyZXNzZXMuCgkqIHJlbG9hZC5oIChzZXR1cF9zYXZlX2FyZXMpOiBBZGp1c3QgcHJvdG90eXBlLgoJKHNhdmVfY2FsbF9jbG9iYmVyZWRfcmVncyk6IExpa2V3aXNlLgoJKiByZWxvYWQxLmMgKGRlbGV0ZV9jYWxsZXJfc2F2ZV9pbnNucyk6IE5ldyBmdW5jdGlvbi4KCShjYWxsZXJfc2F2ZV9zcGlsbF9jbGFzcyk6IERlbGV0ZSB2YXJpYWJsZS4KCShjYWxsZXJfc2F2ZV9ncm91cF9zaXplKTogRGVsZXRlIHZhcmlhYmxlLgoJKHJlbG9hZCk6IENhbGwgc2V0dXBfc2F2ZV9hcmVhcyBhbmQgc2F2ZV9jYWxsX2Nsb2JiZXJlZF9yZWdzCglpbiB0aGUgbWFpbiBsb29wLCBiZWZvcmUgY2FsbGluZyBjYWxjdWxhdGVfbmVlZHNfYWxsX2luc25zLgoJRG9uJ3QgY2FsbCBzYXZlX2NhbGxfY2xvYmJlcmVkX3JlZ3MgYWZ0ZXIgdGhlIGxvb3AuCglDYWxsIGRlbGV0ZV9jYWxsZXJfc2F2ZV9pbnNucyBhdCB0aGUgZW5kIG9mIGFuIGl0ZXJhdGlvbiBpZgoJc29tZXRoaW5nIGNoYW5nZWQuCglEZWxldGUgY29kZSB0byBtYW5hZ2UgY2FsbGVyX3NhdmVfc3BpbGxfY2xhc3MuCglFbWl0IHRoZSBmaW5hbCBub3RlIGJlZm9yZSBzZXR0aW5nIHJlbG9hZF9maXJzdF91aWQuCglTaW1wbGlmeSB0ZXN0IHRoYXQgZGV0ZXJtaW5lcyB3aGV0aGVyIHJlbG9hZF9hc19uZWVkZWQgZ2V0cyBydW4uCgkoY2FsY3VsYXRlX25lZWRzKTogRGVsZXRlIGNvZGUgdG8gbWFuYWdlIGNhbGxlcl9zYXZlX3NwaWxsX2NsYXNzLgoKVHVlIE9jdCAgNiAxNTo0MjoyNyAxOTk4ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogY29sbGVjdDIuYyAobWFpbik6IEluaXRpYWxpemUgbGRfZmlsZV9uYW1lLgoKVHVlIE9jdCAgNiAxNTo0NToxNSAxOTk4ICBDYXRoZXJpbmUgTW9vcmUgIDxjbG1AY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy9zcGFyYy9zeXN2NC5oIChBU01fT1VUUFVUX1NFQ1RJT05fTkFNRSk6IERvbid0CgljaGVjayBmb3IgZmxhZ19mdW5jdGlvbl9zZWN0aW9ucy4KClR1ZSBPY3QgIDYgMjA6MDI6MzEgMTk5OCAgSiJvcm4gUmVubmVja2UgIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIGNzZS5jIChpbnNlcnRfcmVncyk6IEZpeCBidWcgaW4gU2VwIDI0IGNoYW5nZS4KClR1ZSBPY3QgIDYgMTc6MDA6NDIgMTk5OCAgSiJvcm4gUmVubmVja2UgIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIGZsYWdzLmggKGZsYWdfZHVtcF91bm51bWJlcmVkKTogRGVjbGFyZS4KCSogdG9wbGV2LmMgKGZsYWdfZHVtcF91bm51bWJlcmVkKTogRG9uJ3QgZGVjbGFyZS4KCSogcHJpbnQtcnRsLmMgKGZsYWdzLmgpOiBJbmNsdWRlLgoJKHByaW50X3J0bF9zaW5nbGUpOiBBZGQgcmV0dXJuIHZhbHVlLgoJKiBydGwuaCAocHJpbnRfcnRsX3NpbmdsZSk6IFVwZGF0ZSBkZWNsYXJhdGlvbi4KCSogZmxvdy5jIChmbGFnX2R1bXBfdW5udW1iZXJlZCk6IERvbid0IGRlY2xhcmUuCgkocHJpbnRfcnRsX3dpdGhfYmIpOiBVc2UgcmV0dXJuIHZhbHVlIG9mIHByaW50X3J0bF9zaW5nbGUuCgpUdWUgT2N0ICA2IDAxOjM2OjAwIDE5OTggIEJlcm5kIFNjaG1pZHQgIDxjcnV4QFBvb2wuSW5mb3JtYXRpay5SV1RILUFhY2hlbi5ERT4KCgkqIGxvb3AuYyAoY291bnRfb25lX3NldCk6IE5ldyBzdGF0aWMgZnVuY3Rpb24sIGJyb2tlbiBvdXQgb2YKCWNvdW50X2xvb3BfcmVnc19zZXQuCgkoY291bnRfbG9vcF9yZWdzX3NldCk6IENhbGwgaXQuCgkqIGdsb2JhbC5jIChtYXJrX3JlZ19zdG9yZSk6IEhhbmRsZSBjbG9iYmVycyBoZXJlIGJ5IG5vdCBjYWxsaW5nCglzZXRfcHJlZmVyZW5jZS4KCShtYXJrX3JlZ19jbG9iYmVyKTogSnVzdCBjYWxsIG1hcmtfcmVnX3N0b3JlIGFmdGVyIGVuc3VyaW5nIFNFVFRFUgoJaXMgaW4gZmFjdCBhIGNsb2JiZXIuCgkqIGludGVncmF0ZS5jIChwcm9jZXNzX3JlZ19wYXJhbSk6IE5ldyBmdW5jdGlvbiwgYnJva2VuIG91dCBvZgoJZXhwYW5kX2lubGluZV9mdW5jdGlvbi4KCShleHBhbmRfaW5saW5lX2Z1bmN0aW9uKTogQ2FsbCBpdC4KCgkqIGkzODYubWQgKGFkZHNpZGkzXzEpOiBEZWxldGUgdW51c2VkIHZhcmlhYmxlIHRlbXAuCgkoYWRkc2lkaTNfMik6IExpa2V3aXNlLgoJKGNsc3Ryc3Ryc2kpOiBEZWxldGUgdW51c2VkIHZhcmlhYmxlIGFkZHIxLgoKCSogcnRsLmg6IERvbid0IGRlY2xhcmUgYW55IGZ1bmN0aW9ucyBhbHNvIGRlY2xhcmVkIGluIHJlY29nLmguCgoJKiBNYWtlZmlsZS5pbiAoc3R1cGlkLm8pOiBVcGRhdGUgZGVwZW5kZW5jaWVzLgoJKGdsb2JhbC5vKTogTGlrZXdpc2UuCgoJKiBnbG9iYWwuYzogSW5jbHVkZSByZWxvYWQuaC4KCShyZWdfYmVjb21lc19saXZlKTogTmV3IGZ1bmN0aW9uLgoJKHJlZ19kaWVzKTogTmV3IGZ1bmN0aW9uLgoJKGJ1aWxkX2luc25fY2hhaW4pOiBOZXcgZnVuY3Rpb24uCgkoZ2xvYmFsX2FsbG9jKTogQ2FsbCBidWlsZF9pbnNuX2NoYWluIGJlZm9yZSBjYWxsaW5nIHJlbG9hZC4KCgkqIHJlbG9hZC5oIChzdHJ1Y3QgbmVlZHMpOiBOZXcgc3RydWN0dXJlIGRlZmluaXRpb24uCgkoc3RydWN0IGluc25fY2hhaW4pOiBMaWtld2lzZS4KCShyZWxvYWRfaW5zbl9jaGFpbik6IERlY2xhcmUgdmFyaWFibGUuCgkobmV3X2luc25fY2hhaW4pOiBEZWNsYXJlIGZ1bmN0aW9uLgoKCSogcmVsb2FkMS5jIChyZWxvYWRfc3RhcnRvYmopOiBOZXcgdmFyaWFibGUuCgkocmVsb2FkX2luc25fY2hhaW4pOiBOZXcgdmFyaWFibGUuCgkodW51c2VkX2luc25fY2hhaW5zKTogTmV3IHZhcmlhYmxlLgoJKG5ld19pbnNuX2NoYWluKTogTmV3IGZ1bmN0aW9uLgoJKGluaXRfcmVsb2FkKTogSW5pdGlhbGl6ZSByZWxvYWRfc3RhcnRvYmosIG5vdCByZWxvYWRfZmlyc3RvYmouCgkocmVsb2FkKTogSW5pdGlhbGl6ZSByZWxvYWRfZmlyc3RvYmouCglCZWZvcmUgcmV0dXJuaW5nLCBmcmVlIGV2ZXJ5dGhpbmcgb24gdGhlIHJlbG9hZF9vYnN0YWNrLgoKCSogc3R1cGlkLmM6IEluY2x1ZGUgaW5zbi1jb25maWcuaCwgcmVsb2FkLmggYW5kIGJhc2ljLWJsb2NrLmguCgkocmVnX3doZXJlX2RlYWRfY2hhaW4sIHJlZ193aGVyZV9ib3JuX2V4YWN0LCByZWdfd2hlcmVfYm9ybl9jbG9iYmVyLAoJY3VycmVudF9jaGFpbik6IE5ldyB2YXJpYWJsZXMuCgkocmVnX3doZXJlX2Jvcm4pOiBEZWxldGUgdmFyaWFibGUuCgkoUkVHX1dIRVJFX0JPUk4pOiBOZXcgbWFjcm8uCgkoZmluZF9jbG9iYmVyZWRfcmVncyk6IE5ldyBmdW5jdGlvbi4KCShzdHVwaWRfbGlmZV9hbmFseXNpcyk6IERvbid0IGFsbG9jYXRlL2ZyZWUgcmVnX3doZXJlX2Jvcm4uCglBbGxvY2F0ZSBhbmQgZnJlZSByZWdfd2hlcmVfYm9ybl9leGFjdCwgcmVnX3doZXJlX2Jvcm5fY2xvYmJlciwKCXJlZ193aGVyZV9kZWFkX2NoYWluLgoJVXNlIFJFR19XSEVSRV9CT1JOIGluc3RlYWQgb2YgcmVnX3doZXJlX2Jvcm4uCglXaGlsZSBwcm9jZXNzaW5nIHRoZSBpbnNucywgYnVpbGQgdGhlIHJlbG9hZF9pbnNuX2NoYWluIHdpdGgKCWluZm9ybWF0aW9uIGFib3V0IHJlZ2lzdGVyIGxpZmV0aW1lcy4KCShzdHVwaWRfcmVnX2NvbXBhcmUpOiBVc2UgUkVHX1dIRVJFX0JPUk4gaW5zdGVhZCBvZiByZWdfd2hlcmVfYm9ybi4KCShzdHVwaWRfbWFya19yZWZzKTogUmVwbGFjZSBhcmcgSU5TTiB3aXRoIGFyZyBDSEFJTi4gIEFsbCBjYWxsZXJzCgljaGFuZ2VkLgoJQ29tcHV0ZSBhbmQgaW5mb3JtYXRpb24gYWJvdXQgYmlydGggYW5kIGRlYXRoIG9mIHBzZXVkbyByZWdpc3RlcnMgaW4KCXJlZ193aGVyZV9kZWFkX2NoYWluLCByZWdfd2hlcmVfYm9ybl9leGFjdCBhbmQgcmVnX3doZXJlX2Jvcm5fY2xvYmJlci4KCURlbGV0ZSBjb2RlIHRvIHNldCBlbGVtZW50cyBvZiByZWdfd2hlcmVfYm9ybi4KCk1vbiBPY3QgIDUgMjI6MzQ6MzAgMTk5OCAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiB0cmVlLmRlZiAoR09UT19FWFBSKTogTW9kaWZpZWQgZG9jdW1lbnRhdGlvbi4KCSogZXhwci5jIChleHBhbmRfZXhwcik6IEV4cGFuZCBHT1RPX0VYUFIgaW50byBhIGdvdG8gb3IgYSBjb21wdXRlZAoJZ290by4KCk1vbiBPY3QgIDUgMjI6NDM6MzYgMTk5OCAgRGF2aWQgRWRlbHNvaG4gIDxlZGVsc29obkBnbnUub3JnPgoKCSogdW5yb2xsLmMgKGxvb3BfaXRlcmF0aW9uX3ZhciwgbG9vcF9pbml0aWFsX3ZhbHVlLCBsb29wX2luY3JlbWVudAoJbG9vcF9maW5hbF92YWx1ZSwgbG9vcF9jb21wYXJpc29uX2NvZGUpOiBObyBsb25nZXIgc3RhdGljLgoJKHVucm9sbF9sb29wKTogRGVsZXRlIGxvb3Bfc3RhcnRfdmFsdWUgdXBkYXRlLgoJKiBsb29wLmggKGxvb3BfaXRlcmF0aW9uX3ZhciwgbG9vcF9pbml0aWFsX3ZhbHVlLCBsb29wX2luY3JlbWVudCwKCWxvb3BfZmluYWxfdmFsdWUsIGxvb3BfY29tcGFyaXNvbl9jb2RlKTogRXh0ZXJuLgoJKGxvb3Bfc3RhcnRfdmFsdWUpOiBEZWxldGUgZXh0ZXJuLgoJKiBsb29wLmMgKGxvb3BfY2FuX2luc2VydF9iY3QsIGxvb3BfaW5jcmVtZW50LCBsb29wX3N0YXJ0X3ZhbHVlLAoJbG9vcF9jb21wYXJpc29uX3ZhbHVlLCBsb29wX2NvbXBhcmlzb25fY29kZSk6IERlbGV0ZS4KCShsb29wX29wdGltaXplKTogUmVtb3ZlIGluaXRpYWxpemF0aW9uIGZvciBkZWxldGVkIHZhcmlhYmxlcy4KCShzdHJlbmd0aF9yZWR1Y2UpOiBEZWxldGUgYW5hbHl6ZV9sb29wX2l0ZXJhdGlvbnMgY2FsbC4gIE9ubHkgY2FsbAoJaW5zZXJ0X2JjdCBpZiBmbGFnX2JyYW5jaF9jb3VudF9vbl9yZWcgc2V0LgoJKGFuYWx5emVfbG9vcF9pdGVyYXRpb25zKTogRGVsZXRlLgoJKGluc2VydF9iY3QpOiBSZW1vdmUgaXRlcmF0aW9uIGNvdW50IGNhbGN1bGF0aW9uLiAgTW92ZSBjaGVja3MgZm9yCgl2aWFibGUgQkNUIG9wdGltaXphdGlvbiB0byBoZXJlLiAgT2J0YWluIGl0ZXJhdGlvbiBjb3VudCBmcm9tCglsb29wX2l0ZXJhdGlvbnMgYW5kIGNvcnJlY3QgZm9yIHVucm9sbGluZy4gIENoZWNrIGZvciBlbm91Z2gKCWl0ZXJhdGlvbiB0byBiZSBiZW5lZmljaWFsLiAgQ29tbWVudCBvdXQgcnVudGltZSBpdGVyYXRpb24gY291bnQKCWNhc2UuCgkoaW5zZXJ0X2JjdCk6IFByaW50IGl0ZXJhdGlvbiBjb3VudCBpbiBkdW1wIGZpbGUuICBSZW1vdmUKCWxvb3BfdmFyX21vZGUgYW5kIHVzZSB3b3JkX21vZGUgZGlyZWN0bHkuCgoJKiByczYwMDAuaCAocHJvY2Vzc29yX3R5cGUpOiBBZGQgUFJPQ0VTU09SX1BQQzYwNGUuCgkqIHJzNjAwMC5jIChyczYwMDBfb3ZlcnJpZGVfb3B0aW9ucyk6IFVzZSBpdC4KCShvcHRpbWl6YXRpb25fb3B0aW9ucyk6IEVuYWJsZSB1c2Ugb2YgZmxhZ19icmFuY2hfb25fY291bnRfcmVnLgoJKiByczYwMDAubWQgKGRlZmluZV9mdW5jdGlvbl91bml0KTogRGVzY3JpYmUgNjA0ZS4KCjE5OTgtMTAtMDUgIEhlcm1hbiBBLkouIHRlbiBCcnVnZ2UgIDxIYWouVGVuLkJydWdnZUBuZXQuSENDLm5sPgoKCSogbG9vcC5jIChtb3ZlX21vdmFibGVzKTogQ29ycmVjdGVkIHRocmVzaG9sZCBjYWxjdWxhdGlvbiBmb3IKCW1vdmVkX29uY2UgcmVnaXN0ZXJzLgoKTW9uIE9jdCAgNSAyMToxODo0NSAxOTk4ICBCZXJuZCBTY2htaWR0ICA8Y3J1eEBQb29sLkluZm9ybWF0aWsuUldUSC1BYWNoZW4uREU+CgoJKiBsb29wLmMgKGNvbWJpbmVfZ2l2c19wKTogRml4IHRlc3QgZm9yIGlkZW50aWNhbCBnaXZzLgoKTW9uIE9jdCAgNSAxMDoxMToyOCAxOTk4ICBOaWNrIENsaWZ0b24gIDxuaWNrY0BjeWdudXMuY29tPgoKCSogZHdhcmYyb3V0LmMgKGdlbl9zdWJwcm9ncmFtX2RpZSk6IElmIGVycm9yY291bnQgbm9uemVybywgZG9uJ3QKCWNhbGwgYWJvcnQgaWYgdGhlIGZ1bmN0aW9uIGlzIGFscmVhZHkgZGVmaW5lZC4KCk1vbiBPY3QgIDUgMTA6MDI6MzYgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogY29tYmluZS5jIChzaW1wbGlmeV9ydHgpOiBEbyBub3QgcmVwbGFjZSBUUlVOQ0FURSB3aXRoIGEgU1VCUkVHIGlmCgl0cnVuY2F0aW9uIGlzIG5vdCBhIG5vLW9wLgoKTW9uIE9jdCAgNSAwOTowMjowNCAxOTk4ICBKZWZmIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogdmVyc2lvbi5jOiBCdW1wIGZvciBzbmFwc2hvdC4KCk1vbiBPY3QgIDUgMDg6MTk6NTUgMTk5OCAgSmVmZiBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHZlcnNpb24uYzogQnVtcCBmb3Igc25hcHNob3QuCgpNb24gT2N0ICA1IDAxOjA3OjIzIDE5OTggIFRvcmJqb3JuIEdyYW5sdW5kICA8dGVnZUBtYXRlbWF0aWsuc3Uuc2U+CgoJKiBleHBtZWQuYyAoZXhwYW5kX2Rpdm1vZCk6IERvbid0IHdpZGVuIGZvciBjb21wdXRpbmcgcmVtYWluZGVyCglpZiB3ZSBzZWVtIHRvIGhhdmUgYSBkaXZtb2QgcGF0dGVybiBmb3IgbmVlZGVkIG1vZGUuCgpNb24gT2N0ICA1IDAxOjAxOjQyIDE5OTggIFphY2sgV2VpbmJlcmcgIDx6YWNrQHJhYmkucGh5cy5jb2x1bWJpYS5lZHU+CgoJKiBjcHBsaWIuYyAobWFjcm9leHBhbmQpOiBDb3JyZWN0IG9mZi1ieS1vbmUgZXJyb3IgaW4gaGFuZGxpbmcKCW9mIGVzY2FwZXMuCgpTdW4gT2N0ICA0IDIzOjU4OjMwIDE5OTggIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBjb21iaW5lLmMgKGV4cGFuZF9maWVsZF9hc3NpZ25tZW50KTogRG9uJ3QgZG8gYml0d2lzZSBvcGVyYXRpb25zCglvbiBNT0RFX0ZMT0FUOyBwdW4gdG8gTU9ERV9JTlQgaWYgcG9zc2libGUuCgpTdW4gT2N0ICA0IDE4OjMzOjI0IDE5OTggIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCQkJICBzY290dCBzbnlkZXIgIDxzbnlkZXJAZDBzZ2lmLmZuYWwuZ292PgoKCSogdGxpbmsuYyAoc2Nhbl9saW5rZXJfb3V0cHV0KTogUmVjb2duaXplIGVycm9ycyBmcm9tIGlyaXggNi4yCglsaW5rZXIuICBSZWNvZ25pemUgbWFuZ2xlZCBuYW1lcyBpbiBxdW90ZXMuCgpTdW4gT2N0ICA0IDAyOjU4OjIwIDE5OTggIEpha3ViIEplbGluZWsgIDxqakBzdW5zaXRlLm1zLm1mZi5jdW5pLmN6PgoKCSogY29uZmlnL3NwYXJjL3NwYXJjLm1kIChhc2hsZGkzKzEpOiBOYW1lIGl0IGFzaGxkaTNfc3A2NC4KCShhc2hsc2kzX2NvbnN0MSwgYXNobGRpM19jb25zdDEpOiBOZXcgY29tYmluZXIgcGF0dGVybnMuCgkoYXNocnNpM19leHRlbmQsIGFzaHJzaTNfZXh0ZW5kMik6IE5ldyBjb21iaW5lciBwYXR0ZXJucy4KCShsc2hyc2kzX2V4dGVuZCwgbHNocnNpM19leHRlbmQyKTogTGlrZXdpc2UuCgpTdW4gT2N0ICA0IDAwOjIzOjAwIDE5OTggIERhdmlkIFMuIE1pbGxlciAgPGRhdmVtQHBpZXJkb2wuY29iYWx0bWljcm8uY29tPgoKCSogZnVuY3Rpb24uYyAocHVyZ2VfYWRkcmVzc29mXzEpOiBJZiB0cnlpbmcgdG8gdGFrZSBhIHN1Yi13b3JkCglpbnRlZ3JhbCBwaWVjZSBvZiBhIGZsb2F0aW5nIHBvaW50IG1vZGUsIHB1dCBpdCBvbiB0aGUgc3RhY2suCgpTYXQgT2N0ICAzIDE5OjAxOjAzIDE5OTggIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBhbHBoYS9saW51eC5oIChDUFBfUFJFREVGSU5FUyk6IERlZmluZSBfX2FscGhhX18gZm9yIGltYWtlLgoKU2F0IE9jdCAgMyAxNDo0MjoxOSAxOTk4ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBQUk9KRUNUUzogUmVtb3ZlIHRlbXBsYXRlIGZyaWVuZHMuCgoJKiBjb2xsZWN0Mi5jIChzb3J0X2lkcyk6IFJlbW92ZSB1bnVzZWQgdmFyaWFibGUuCgoJKiB0bS50ZXhpIChNQVRIX0xJQlJBUlkpOiBEb2N1bWVudC4KCShORUVEX01BVEhfTElCUkFSWSk6IFJlbW92ZS4KCgkqIHZhcmFzbS5jIChhc3NlbWJsZV9zdGFydF9mdW5jdGlvbiwgYXNzZW1ibGVfdmFyaWFibGUsIHdlYWtfZmluaXNoLAoJYXNzZW1ibGVfYWxpYXMpOiBEbyBBU01fR0xPQkFMSVpFX0xBQkVMIGZvciB3ZWFrIHN5bWJvbHMsIHRvby4KClNhdCBPY3QgIDMgMTY6MTQ6NDQgMTk5OCAgSm9obiBDYXJyICA8amZjQG1pdC5lZHU+CgoJKiBkd2FyZjJvdXQuYyAoZXhwYW5kX2J1aWx0aW5fZHdhcmZfcmVnX3NpemUpOiBJbml0aWFsaXplCglsYXN0X2VuZCB0byAweDdmZmZmZmZmLgoKRnJpIE9jdCAgMiAxOToxNDoyMCAxOTk4ICBEYXZpZCBTLiBNaWxsZXIgIDxkYXZlbUBwaWVyZG9sLmNvYmFsdG1pY3JvLmNvbT4KCgkqIGZ1bmN0aW9uLmMgKHB1cmdlX2FkZHJlc3NvZl8xKTogRG8gbm90IHBlcmZvcm0gZW5kaWFubmVzcwoJY29ycmVjdGlvbnMgb24gYml0cG9zLCB3aG8gd2UgY2FsbCB3aWxsIGRvIGl0IGZvciB1cy4KCkZyaSBPY3QgIDIgMTE6NTI6MzUgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogaDgzMDAuYyAoV09SRF9SRUdfVVNFRCk6IEZpeCB0eXBvLgoJKGluaXRpYWxfb2Zmc2V0KTogVXNlIFdPUkRfUkVHX1VTRUQuCgoJKiBoODMwMC5jIChoYW5kbGVfcHJhZ21hKTogRml4IHR5cG8uCgpGcmkgT2N0ICAyIDEwOjUxOjM1IDE5OTggIEJlcm5kIFNjaG1pZHQgIDxjcnV4QFBvb2wuSW5mb3JtYXRpay5SV1RILUFhY2hlbi5ERT4KCgkqIGNhbGxlci1zYXZlLmMgKGluc2VydF9zYXZlX3Jlc3RvcmUpOiBCcmVhayB0aGlzIGZ1bmN0aW9uIHVwCglpbnRvIG5ldyBmdW5jdGlvbnMgaW5zZXJ0X3Jlc3RvcmUsIGluc2VydF9zYXZlIGFuZCBpbnNlcnRfb25lX2luc24uCglBbGwgY2FsbGVycyBjaGFuZ2VkLgoJKGluc2VydF9yZXN0b3JlKTogTmV3IGZ1bmN0aW9uLCBtb3N0bHkgYnJva2VuIG91dCBvZgoJaW5zZXJ0X3NhdmVfcmVzdG9yZS4KCShpbnNlcnRfc2F2ZSk6IExpa2V3aXNlLgoJKGluc2VydF9vbmVfaW5zbik6IExpa2V3aXNlLgoJKHJlc3RvcmVfcmVmZXJlbmNlZF9yZWdzKTogTmV3IGFyZ3VtZW50IEJMT0NLLiAgQWxsIGNhbGxlcnMgY2hhbmdlZC4KCShzYXZlX2NhbGxfY2xvYmJlcmVkX3JlZ3MpOiBEb24ndCBrZWVwIHRyYWNrIG9mIGJhc2ljIGJsb2NrIGJvdW5kYXJpZXMKCWluIHRoaXMgZnVuY3Rpb24sIGRvIGl0IGluIGluc2VydF9vbmVfaW5zbiBpbnN0ZWFkLgoKCSogcmVsb2FkMS5jIChyZWxvYWQpOiBCcmVhayBvdXQgc29tZSBtb3JlIHBpZWNlcyBpbnRvIHNlcGFyYXRlCglmdW5jdGlvbnMuCgkoZHVtcF9uZWVkcyk6IE5ldyBmdW5jdGlvbiwgYnJva2VuIG91dCBvZiByZWxvYWQuCgkoc2V0X2luaXRpYWxfZWxpbV9vZmZzZXRzKTogTGlrZXdpc2UuCgkoaW5pdF9lbGltX3RhYmxlKTogTGlrZXdpc2UuCgkodXBkYXRlX2VsaW1pbmFibGVzKTogTGlrZXdpc2UuCgoJKiBnbG9iYWwuYyAoZ2xvYmFsX2FsbG9jKTogRGVsZXRlIGNvZGUgdG8gbWFuYWdlIHRoZSBzY3JhdGNoX2xpc3QuCgkqIGxvY2FsLWFsbG9jLmMgKHF0eV9zY3JhdGNoX3J0eCk6IERlbGV0ZS4KCShzY3JhdGNoX2Jsb2NrKTogRGVsZXRlLgoJKHNjcmF0Y2hfbGlzdCk6IERlbGV0ZS4KCShzY3JhdGNoX2xpc3RfbGVuZ3RoKTogRGVsZXRlLgoJKHNjcmF0Y2hfaW5kZXgpOiBEZWxldGUuCgkoYWxsb2NfcXR5X2Zvcl9zY3JhdGNoKTogRGVsZXRlLgoJKGxvY2FsLWFsbG9jKTogVXBkYXRlIGluaXRpYWxpemF0aW9uIG9mIG1heF9xdHkuCglEZWxldGUgY29kZSB0byBtYW5hZ2UgdGhlIHNjcmF0Y2ggbGlzdC4KCURlbGV0ZSBjb2RlIHRvIGFsbG9jYXRlL2luaXRpYWxpemUgcXR5X3NjcmF0Y2hfcnR4LgoJKGJsb2NrX2FsbG9jKTogRG9uJ3QgYWxsb2NhdGUgcXVhbnRpdGllcyBmb3Igc2NyYXRjaGVzLgoJRGVsZXRlIGNvZGUgdG8gbWFuYWdlIHRoZSBzY3JhdGNoIGxpc3QuCgkqIHJlZ3MuaCAoc2NyYXRjaF9saXN0KTogRGVsZXRlIGRlY2xhcmF0aW9uLgoJKHNjcmF0Y2hfYmxvY2spOiBEZWxldGUgZGVjbGFyYXRpb24uCgkoc2NyYXRjaF9saXN0X2xlbmd0aCk6IERlbGV0ZSBkZWNsYXJhdGlvbi4KCSogcmVsb2FkMS5jIChyZWxvYWQpOiBEZWxldGUgY29kZSB0byBtYW5hZ2UgdGhlIHNjcmF0Y2ggbGlzdC4KCShzcGlsbF9oYXJkX3JlZyk6IExpa2V3aXNlLgoJKG1hcmtfc2NyYXRjaF9saXZlKTogRGVsZXRlLgoKCSogcmVjb2cuYyAoYWx0ZXJfc3VicmVnKTogRGVsZXRlIGRlY2xhcmF0aW9uLgoKMTk5OC0xMC0wMiAgQW5kcmVhcyBKYWVnZXIgIDxhakBhcnRodXIucmhlaW4tbmVja2FyLmRlPgoKCSogTWFrZWZpbGUuaW4gKGNjY3Aubyk6IEZpeCB0eXBvIGluIGxhc3QgcGF0Y2guCgpGcmkgT2N0ICAyIDE2OjEzOjEyIDE5OTggIEoib3JuIFJlbm5lY2tlICA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiB0LXNoIChMSUIxQVNNRlVOQ1MpOiBBZGQgX3NldF9mcHNjciAuCgkqIGNvbmZpZy9zaC9saWIxZnVuY3MuYXNtIChfX19zZXRfZnBzY3IpOiBBZGQuCgpGcmkgT2N0ICAyIDAyOjAxOjU5IDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHJlZ2NsYXNzLmMgKHJlZ19zY2FuX21hcmtfcmVmcyk6IFJldHVybiBpbW1lZGlhdGVseSBpZiBwYXNzZWQgYQoJTlVMTF9SVFggYXMgYW4gYXJndW1lbnQuCgoJKiBNYWtlZmlsZS5pbiAodW5saWJzdWJkaXIpOiBEZWZpbmUuCgkoRFJJVkVSX0RFRklORVMpOiBVc2UgdW5saWJzdWJkaXIuCgkoY2NjcC5vLCBjcHBsaWIubywgcHJvdG9pemUubywgdW5wcm90b2l6ZS5vKTogU2ltaWxhcmx5LgoJKHN0bXAtZml4aW5jKTogU2ltaWxhcmx5LgoKVGh1IE9jdCAgMSAxOTo1ODozMCAxOTk4ICBCZXJuZCBTY2htaWR0ICA8Y3J1eEBQb29sLkluZm9ybWF0aWsuUldUSC1BYWNoZW4uREU+CgoJKiByZWdtb3ZlLmMgKHJlZ21vdmVfb3B0aW1pemUpOiBBZGQgdmFyaWFibGUgb2xkX21heF91aWQuCglBdCB0aGUgZW5kIG9mIHRoZSBmdW5jdGlvbiwgdXBkYXRlIGJhc2ljX2Jsb2NrX2VuZC4KClRodSBPY3QgIDEgMTc6NTg6MjUgMTk5OCAgRGF2aWQgUy4gTWlsbGVyICA8ZGF2ZW1AcGllcmRvbC5jb2JhbHRtaWNyby5jb20+CgoJKiBkd2FyZjJvdXQuYyAoZXhwYW5kX2J1aWx0aW5fZHdhcmZfcmVnX3NpemUpOiBVc2UKCUZJUlNUX1BTRVVET19SRUdJU1RFUiBhcyB1cHBlciBib3VuZCBmb3IgbGFzdF9lbmQsIG5vdCBhbgoJYXJiaXRyYXJ5IGNvbnN0YW50LgoKVGh1IE9jdCAgMSAxNzo1NzoxNCAxOTk4ICBOaWNrIENsaWZ0b24gIDxuaWNrY0BjeWdudXMuY29tPgoKCSogY29uZmlnL2FybS9hcm0uYzogSW1wcm92ZSBpbnRlcndvcmtpbmcgc3VwcG9ydC4KClRodSBPY3QgIDEgMTg6NDM6MzUgMTk5OCAgSiJvcm4gUmVubmVja2UgIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIHJlbG9hZDEuYyAoY2hvb3NlX3JlbG9hZF9yZWdzKTogRml4IHRlc3QgaWYgcmVsb2FkX3JlZ19ydHhbcl0gd2FzCgljb3BpZWQgZnJvbSByZWxvYWRfb3V0W3JdIC4KClRodSBPY3QgIDEgMTk6MjA6MDkgMTk5OCAgSm9obiBDYXJyICA8amZjQG1pdC5lZHU+CgoJKiBkd2FyZjJvdXQuYyAoZXhwYW5kX2J1aWx0aW5fZHdhcmZfcmVnX3NpemUpOiBGaXggdG8gd29yawoJd2l0aCBtb3JlIHRoYW4gdGhyZWUgc2l6ZSByYW5nZXMuCgoJKiBmbG93LmMgKHNiaXRtYXBfY29weSk6IFVzZSBiY29weSB0byBjb3B5IGJpdG1hcC4KCgkqIHJ0bC5jIChtb2RlX25hbWUpOiBBZGQgYSBudWxsIHN0cmluZyBhdCB0aGUgZW5kIG9mIHRoZSBhcnJheS4KCShtb2RlX3dpZGVyX21vZGUpOiBDaGFuZ2UgdHlwZSB0byB1bnNpZ25lZCBjaGFyLgoJKG1vZGVfbWFza19hcnJheSk6IE5ldyB2YXJpYWJsZS4KCShpbml0X3J0bCk6IFVwZGF0ZSBmb3IgbW9kZV93aWRlcl9tb2RlIHR5cGUgY2hhbmdlLgoKCSogcnRsLmggKG1vZGVfd2lkZXJfbW9kZSk6IENoYW5nZSB0eXBlIHRvIHVuc2lnbmVkIGNoYXIuCgkobW9kZV9tYXNrX2FycmF5KTogRGVjbGFyZS4KCShHRVRfTU9ERV9NQVNLKTogVXNlIG1vZGVfbWFza19hcnJheS4KClRodSBPY3QgIDEgMTU6NTY6MDEgMTk5OCAgR2F2aW4gUm9taWctS29jaCAgPGdhdmluQGN5Z251cy5jb20+CgoJKiBjYWxscy5jIChleHBhbmRfY2FsbCkgOiBFbmNhcHN1bGF0ZSBjb2RlIGludG8KCWNvcHlfYmxrbW9kZV9mcm9tX3JlZy4KCSogZXhwci5jIChjb3B5X2Jsa21vZGVfZnJvbV9yZWcpOiBOZXcgZnVuY3Rpb24uCgkqIGV4cHIuaCAoY29weV9ibGttb2RlX2Zyb21fcmVnKTogTmV3IGZ1bmN0aW9uLgoJKiBpbnRlZ3JhdGUuYyAoZnVuY3Rpb25fY2Fubm90X2lubGluZV9wKTogV2UgY2FuIGlubGluZQoJdGhlc2Ugbm93LgoJKGV4cGFuZF9pbmxpbmVfZnVuY3Rpb24pOiBVc2UgY29weV9ibGttb2RlX2Zyb21fcmVnCglpZiBuZWVkZWQuICBBdm9pZCBjcmVhdGluZyBCTEttb2RlIFJFR3MuCgkoY29weV9ydHhfYW5kX3N1YnN0aXR1dGUpOiBEb24ndCB0cnkgdG8gU1VCUkVHIGEgQkxLbW9kZQoJb2JqZWN0LgoKVGh1IE9jdCAgMSAxMDo0MjoyNyAxOTk4ICBOaWNrIENsaWZ0b24gIDxuaWNrY0BjeWdudXMuY29tPgoKCSogY29uZmlnL3Y4NTAvdjg1MC5jOiBBZGQgZnVuY3Rpb24gcHJvdG90eXBlcy4KCUFkZCBzdXBwb3J0IGZvciB2ODUwIHNwZWNpYWwgZGF0YSBhcmVhcy4KCgkqIGNvbmZpZy92ODUwL3Y4NTAuaDogQWRkIHN1cHBvcnQgZm9yIHY4NTAgc3BlY2lhbCBkYXRhIGFyZWFzLgoKCSogYy1wcmFnbWEuYzogQWRkIHN1cHBvcnQgZm9yIEhBTkRMRV9QUkFHTUFfUEFDSyBhbmQKCUhBTkRMRV9QUkFHTUFfUEFDS19QVVNIX1BPUC4KCShwdXNoX2FsaWdubWVudCk6IE5ldyBmdW5jdGlvbjogQ2FjaGUgYW4gYWxpZ25tZW50IHJlcXVlc3RlZAoJYnkgYSAjcHJhZ21hIHBhY2socHVzaCw8bj4pLgoJKHBvcF9hbGlnbm1lbnQpOiBOZXcgZnVuY3Rpb246IFBvcCBhbiBhbGlnbm1lbnQgZnJvbSB0aGUKCWFsaWdubWVudCBzdGFjay4KCShpbnNlcnRfcGFja19hdHRyaWJ1dGVzKTogTmV3IGZ1bmN0aW9uOiBHZW5lcmF0ZSBfX3BhY2tlZF9fCglhbmQgX19hbGlnbmVkX18gYXR0cmlidXRlcyBmb3IgbmV3IGRlY2xzIHdoaWxzdCBhICNwcmFnbWEgcGFjawoJaXMgaW4gZWZmZWN0LgoJKGFkZF93ZWFrKTogTmV3IGZ1bmN0aW9uOiBDYWNoZSBhICNwcmFnbWEgd2VhayBkaXJlY3RpdmUuCgkoaGFuZGxlX3ByYWdtYV90b2tlbik6IERvY3VtZW50IGNhbGxpbmcgY29udmVudGlvbnMuICBBZGQKCXN1cHBvcnQgZm9yICNwcmFnbWEgcGFjayhwdXNoLDxuPikgYW5kICNwcmFnbWEgcGFjayAocG9wKS4KCgkqIGMtcHJhZ21hLmg6IElmIEhBTkRMRV9TWVNWX1BSQUdNQSBvciBIQU5ETEVfUFJBR01BX1BBQ0tfUFVTSF9QT1AKCWFyZSBkZWZpbmVkIGVuYWJsZSBIQU5ETEVfUFJBR01BX1BBQ0suCglNb3ZlICdzdHJ1Y3Qgd2Vha19zeW1zJyBoZXJlIChmcm9tIHZhcmFzbS5jKS4KCUFkZCBwcmFnbWEgc3RhdGVzIGZvciBwdXNoIGFuZCBwb3AgcHJhZ21hcy4KCgkqIGMtY29tbW9uLmMgKGRlY2xfYXR0cmlidXRlcyk6IENhbGwgUFJBR01BX0lOU0VSVF9BVFRSSUJVVEVTCglpZiBpdCBpcyBkZWZpbmVkLgoKCSogYy1sZXguYzogUmVwbGFjZSBvY2N1cnJlbmNlcyBvZiBIQU5ETEVfU1lTVl9QUkFHTUEgd2l0aAoJSEFORExFX0dFTkVSSUNfUFJBR01BUy4KCgkqIHZhcmFzbS5jOiBNb3ZlIGRlZmluaXRpb24gb2YgJ3N0cnVjdCB3ZWFrX3N5bXMnIGludG8KCWMtcHJhZ21hLmguCgkoaGFuZGxlX3ByYWdtYV93ZWFrKTogRGVsZXRlZC4KCgkqIGNvbmZpZy9pMzg2L2kzODYuaDogRGVmaW5lIEhBTkRMRV9QUkFHTUFfUEFDS19QVVNIX1BPUC4KCgkqIGNvbmZpZy93aW5udC93aW4tbnQuaDogRGVmaW5lIEhBTkRMRV9QUkFHTUFfUEFDS19QVVNIX1BPUC4KCgkqIGMtZGVjbC5jIChzdGFydF9mdW5jdGlvbik6IEFkZCBpbnZvY2F0aW9uIG9mCglTRVRfREVGQVVMVF9ERUNMX0FUVFJJQlVURVMsIGlmIGRlZmluZWQuCgoJKiB0bS50ZXhpOiBSZW1vdmUgZGVzY3JpcHRpb24gb2Ygbm9uLWV4aXN0ZW50IG1hY3JvCglTRVRfREVGQVVMVF9TRUNUSU9OX05BTUUuCgoJKEhBTkRMRV9TWVNWX1BSQUdNQSk6IERvY3VtZW50LgoJKEhBTkRMRV9QUkFHTUFfUEFDS19QVVNIX1BPUCk6IERvY3VtZW50LgoKV2VkIFNlcCAzMCAyMjoyNzo1MyAxOTk4ICBSb2JlcnQgTGlwZSAgPHJvYmVydGxAZGdpaS5jb20+CgoJKiBjb25maWcuc3ViOiBSZWNvZ25pemUgaVszNDU2N104Ni1wYy11ZGsgYXMgbmV3IHRhcmdldC4KCSogY29uZmlndXJlLmluOiBMaWtld2lzZS4KCSogY29uZmlnL2kzODYvdC11ZGs6IE5ldyBmaWxlLgoJKiBjb25maWcvaTM4Ni91ZGsuaDogTmV3IGZpbGUuCgpXZWQgU2VwIDMwIDE5OjMzOjA3IDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHJlb3JnLmMgKGNoZWNrX2FubnVsX2xpc3RfdHJ1ZV9mYWxzZSk6IFJlbW92ZSB1bnVzZWQgdmFyaWFibGVzLgoJKHN0ZWFsX2RlbGF5X2xpc3RfZnJvbV90YXJnZXQpOiBBZGQgbWlzc2luZyAidXNlZF9hbm51bCIgdmFyaWFibGUuCgkodHJ5X21lcmdlX2RlbGF5X2luc25zKTogQ2xvc2Ugb3V0IGhhbGYgZm9ybWVkIGNvbW1lbnQuCgpXZWQgU2VwIDMwIDE5OjEzOjIwIDE5OTggIFphY2sgV2VpbmJlcmcgIDx6YWNrQHJhYmkucGh5cy5jb2x1bWJpYS5lZHU+CgoJKiBjcHBsaWIuYyAobWFjcm9leHBhbmQpOiBJZiBhcmctPnJhd19iZWZvcmUgb3IKCWFyZy0+cmF3X2FmdGVyLCByZW1vdmUgYW55IG5vLXJlZXhwYW5zaW9uIGVzY2FwZSBhdCB0aGUKCWJlZ2lubmluZyBvZiB0aGUgcGFzdGVkIHRva2VuLiAgQ29ycmVjdCBoYW5kbGluZyBvZiB3aGl0ZXNwYWNlCgltYXJrZXJzIGFuZCBuby1yZWV4cGFuZCBtYXJrZXJzIGF0IHRoZSBlbmQgaWYgYXJnLT5yYXdfYWZ0ZXIuCgoJKiB0b3BsZXYuYyAoZG9jdW1lbnRlZF9sYW5nX29wdGlvbnMpOiBSZWNvZ25pemUgLWluY2x1ZGUsCgktaW1hY3JvcywgLWl3aXRocHJlZml4LCAtaXdpdGhwcmVmaXhiZWZvcmUuCgkqIGNwcGxpYi5jIChjcHBfc3RhcnRfcmVhZCk6IFByb2Nlc3MgLWltYWNyb3MgYW5kIC1pbmNsdWRlCglzd2l0Y2hlcyBhdCB0aGUgc2FtZSB0aW1lIGFuZCBpbiBjb21tYW5kLWxpbmUgb3JkZXIsIGFmdGVyCglpbml0aWFsaXppbmcgdGhlIGRlcGVuZGVuY3ktb3V0cHV0IGNvZGUuICBFbWl0IHByb3Blcmx5IG5lc3RlZAoJI2xpbmUgZGlyZWN0aXZlcyBmb3IgdGhlbS4gIEVtaXQgYSAjbGluZSBmb3IgdGhlIG1haW4gZmlsZQoJYmVmb3JlIHByb2Nlc3NpbmcgdGhlc2Ugc3dpdGNoZXMsIGFuZCBkb24ndCBkbyBpdCBhZ2FpbgoJYWZ0ZXJ3YXJkLgoKV2VkIFNlcCAzMCAxODowMzoyMiAxOTk4ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogZnVuY3Rpb24uYyAocHVyZ2VfYWRkcmVzc29mXzEpOiBVc2UgYml0ZmllbGQgbWFuaXB1bGF0aW9uCglyb3V0aW5lcyB0byBoYW5kbGUgbWVtIG1vZGUgPCByZWcgbW9kZS4KCldlZCBTZXAgMzAgMTg6NDM6MzIgMTk5OCAgSGVybWFuIHRlbiBCcnVnZ2UgIDxIYWouVGVuLkJydWdnZUBuZXQuSENDLm5sPgoKCSogcmVvcmcuYyAodHJ5X21lcmdlX2RlbGF5X2luc25zKTogQWNjb3VudCBmb3IgcmVzb3VyY2VzIHJlZmVyZW5jZWQKCWluIGVhY2ggaW5zdHJ1Y3Rpb24gaW4gSU5TTidzIGRlbGF5IGxpc3QgYmVmb3JlIHRyeWluZyB0byBlbGltaW5hdGUKCXVzZWxlc3MgaW5zdHJ1Y3Rpb25zLiAgU2ltaWxhcmx5IHdoZW4gbG9va2luZyBhdCBhIHRyaWFsIGluc24ncyBkZWxheQoJc2xvdHMuCgoJKiByZW9yZy5jIChjaGVja19hbm51bF9saXN0X3RydWVfZmFsc2UpOiBOZXcgZnVuY3Rpb24uCgkoc3RlYWxfZGVsYXlfbGlzdF9mcm9tX3t0YXJnZXQsZmFsbHRocm91Z2h9KTogQ2FsbCBpdCBhbmQgYWxzbwoJcmVmaW5lIHRlc3RzIGZvciB3aGVuIHdlIG1heSBhbm51bCBpZiBhbHJlYWR5IGZpbGxlZCBhIHNsb3QuCgkoZmlsbF9zbG90c19mcm9tX3RocmVhZCk6IExpa2V3aXNlLgoJKGRlbGV0ZV9mcm9tX2RlbGF5X3Nsb3QpOiBSZXR1cm4gbmV3bHktY3JlYXRlZCB0aHJlYWQuCgkodHJ5X21lcmdlX2RlbGF5X2lzbnMpOiBVc2UgaXRzIG5ldyByZXR1cm4gdmFsdWUuCgpXZWQgU2VwIDMwIDE4OjI5OjI2IDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGxvb3AuYyAoY2hlY2tfZGJyYV9sb29wKTogVXNlIGEgdmFuaWxsYSBsb29wIHJldmVyc2FsIGlmIHRoZSBiaXYgaXMKCXVzZWQgdG8gY29tcHV0ZSBhIGdpdiBvciBhcyBzb21lIG90aGVyIG5vbi1jb3VudGluZyB1c2UuCgpXZWQgU2VwIDMwIDE4OjE5OjI3IDE5OTggIE1pY2hhZWwgSGF5ZXMgIDxtLmhheWVzQGVsZWMuY2FudGVyYnVyeS5hYy5uej4KCgkqIHJlZ3MuaCAoSEFSRF9SRUdOT19DQUxMX1BBUlRfQ0xPQkJFUkVEKTogTmV3IG1hY3JvLgoJKiBsb2NhbC1hbGxvYy5jIChmaW5kX2ZyZWVfcmVnKTogVXNlIGl0LgoJKiBnbG9iYWwuYyAoZmluZF9yZWcpOiBMaWtld2lzZS4KCSogdG0udGV4aTogRG9jdW1lbnQgSEFSRF9SRUdOT19DQUxMX1BBUlRfQ0xPQkJFUkVELgoKCSogcmVncy5oIChIQVJEX1JFR05PX0NBTExFUl9TQVZFX01PREUpOiBOZXcgbWFjcm8uCgkqIGNhbGxlci1zYXZlLmMgKGluaXRfY2FsbGVyX3NhdmUpOiBVc2UgaXQuCgkqIHRtLnRleGk6IERvY3VtZW50IEhBUkRfUkVHTk9fQ0FMTEVSX1NBVkVfTU9ERS4KCldlZCBTZXAgMzAgMTI6NTc6MzAgMTk5OCAgWmFjayBXZWluYmVyZyAgPHphY2tAcmFiaS5waHlzLmNvbHVtYmlhLmVkdT4KCgkqIGNvbmZpZ3VyZS5pbjogQWRkIC0tZW5hYmxlLWNwcGxpYiBvcHRpb24gd2hpY2ggdXNlcyBjcHBsaWIKCWZvciBjcHAsIGJ1dCBkb2Vzbid0IGxpbmsgY3BwbGliIGludG8gY2MxLiAgTWFrZSBoZWxwIHRleHQKCWNhcGl0YWxpemF0aW9uIGNvbnNpc3RlbnQuCgkqIGNvbmZpZ3VyZTogUmVidWlsdC4KCldlZCBTZXAgMzAgMTA6MDk6MzkgMTk5OCAgTWFyayBNaXRjaGVsbCAgPG1hcmtAbWFya21pdGNoZWxsLmNvbT4KCgkqIGZ1bmN0aW9uLmMgKGdlbl9tZW1fYWRkcmVzc29mKTogSWYgdGhlIGFkZHJlc3MgUkVHIGlzCglSRUdfVVNFUlZBUl9QIG1ha2UgdGhlIG5ldyBSRUcgYmUgc28gYWxzby4KCSogbG9vcC5jIChzY2FuX2xvb3ApOiBBcHBseSBEZU1vcmdhbidzIGxhd3MgYW5kIGFkZCBkb2N1bWVudGF0aW9uCglpbiBhbiBhdHRlbXB0IHRvIGNsYXJpZnkgc2xpZ2h0bHkuCgpXZWQgU2VwIDMwIDA5OjU3OjQwIDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGV4cHIuYyAoZXhwYW5kX2V4cHIpOiBIYW5kbGUgQ09NUE9ORU5UX1JFRiwgQklUX0ZJRUxEX1JFRiBBUlJBWV9SRUYKCWFuZCBJTkRJUkVDVF9SRUYgaW4gY29kZSB0byBjaGVjayBNQVhfSU5URUdFUl9DT01QVVRBVElPTl9NT0RFLgoKV2VkIFNlcCAzMCAxMDoxMzozOSAxOTk4ICBDYXRoZXJpbmUgTW9vcmUgIDxjbG1AY3lnbnVzLmNvbT4KCgkqIHRvcGxldi5jOiBGaXggbGFzdCBwYXRjaC4KClR1ZSBTZXAgMjkgMjA6MDM6MTggMTk5OCAgSmltIFdpbHNvbiAgPHdpbHNvbkBjeWdudXMuY29tPgoKCSogbG9vcC5jIChnZXRfY29uZGl0aW9uKTogRml4IHR5cG8gaW4gTWF5IDkgY2hhbmdlLgoKVHVlIFNlcCAyOSAxMToxMTozOCAxOTk4ICBBbmRyZXcgTWFjTGVvZCAgPGFtYWNsZW9kQGN5Z251cy5jb20+CgoJKiBpbnZva2UudGV4aSAoLWZleGNlcHRpb25zKTogTWVyZ2UgMiBkaWZmZXJlbnQgZGVzY3JpcHRpb25zLgoKTW9uIFNlcCAyOCAyMjowODo1MiAxOTk4ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiB0b3BsZXYuYyAoZG9jdW1lbnRlZF9sYW5nX29wdGlvbnMpOiBTcGVsbGluZyBjb3JyZWN0aW9ucy4KCk1vbiBTZXAgMjggMTk6NDE6MjQgMTk5OCAgQWxleGFuZHJlIE9saXZhICA8b2xpdmFAZGNjLnVuaWNhbXAuYnI+CgoJKiBjb25maWd1cmUuaW46IE5ldyBmbGFncyAtLXdpdGgtbGQgYW5kIC0td2l0aC1hcywgZXF1aXZhbGVudAoJdG8gc2V0dGluZyBMRCBhbmQgQVMgZW52aXJvbm1lbnQgdmFyaWFibGVzLiAgVGVzdCB3aGV0aGVyCglzcGVjaWZpZWQgYXJndW1lbnRzIGFyZSBHTlUgY29tbWFuZHMsIGFuZCByZXBvcnQgdGhlbSB3aXRoCgljaGVja2luZyBtZXNzYWdlcy4gIFVzZSB0aGUgc3BlY2lmaWVkIEFTIGZvciBjb25maWd1cmUKCXRlc3RzIHRvby4KCSogY29uZmlndXJlOiBMaWtld2lzZS4KCSogYWNjb25maWcuaDogQWRkIERFRkFVTFRfQVNTRU1CTEVSIGFuZCBERUZBVUxUX0xJTktFUi4KCSogY29uZmlnLmluOiBMaWtld2lzZS4KCSogZ2NjLmMgKGZpbmRfYV9maWxlKTogV2hlbiBsb29raW5nIGZvciBgYXMnIGFuZCBgbGQnLCByZXR1cm4KCXRoZSBERUZBVUxUIHByb2dyYW0gaWYgaXQgZXhpc3RzLgoJKiBjb2xsZWN0Mi5jIChtYWluKTogVXNlIERFRkFVTFRfTElOS0VSIGlmIGl0IGV4aXN0cy4KCgkqIGdjYy5jIChmaW5kX2FfZmlsZSk6IFRoZSB0ZXN0IGZvciBleGlzdGVuY2Ugb2YgYSBmdWxsCglwYXRobmFtZSB3YXMgcmV2ZXJzZWQuCgpNb24gU2VwIDI4IDE3OjM0OjM1IDE5OTggIE1pY2hhZWwgTWVpc3NuZXIgIDxtZWlzc25lckBjeWdudXMuY29tPgoKCSogcnM2MDAwLmggKEFTTV9PVVRQVVRfTUlfVEhVTkspOiBPbmx5IGRlZmluZSBvbiBFTEYgc3lzdGVtcy4KCSogcnM2MDAwLmMgKG91dHB1dF9taV90aHVuayk6IEFsd2F5cyB1c2UgYSByYXcganVtcCBmb3Igbm93LgoKTW9uIFNlcCAyOCAxNDoyNDowMyAxOTk4ICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogdHJlZS5oIChUWVBFX0JJTkZPKTogRG9jdW1lbnQuCgpNb24gU2VwIDI4IDEyOjU1OjQ5IDE5OTggIFN0YW4gQ294ICA8c2NveEBjeWdudXMuY29tPgoKCSogaTM4Ni1jb2ZmLmggKGRieGNvZmYuaCk6IEFkZGVkLgoKTW9uIFNlcCAyOCAxMjo1MTowMCAxOTk4ICBDYXRoZXJpbmUgTW9vcmUgIDxjbG1AY3lnbnVzLmNvbT4KCgkqIHRvcGxldi5jOiBGaXggYmFkIHBhdGNoIGFyb3VuZCBmbGFnX2RhdGFfc2VjdGlvbnMuCgpNb24gU2VwIDI4IDEwOjMyOjI4IDE5OTggIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQGN5Z251cy5jb20+CgoJKiByZWxvYWQxLmMgKHJlbG9hZCk6IFVzZSByZWxvYWRfYWRkcmVzc19pbmRleF9yZWdfY2xhc3MgYW5kCglyZWxvYWRfYWRkcmVzc19iYXNlX3JlZ19jbGFzcyB3aGVuIHNldHRpbmcKCWNhbGxlcl9zYXZlX3NwaWxsX2NsYXNzLiAgKFBhdGNoIGdlbmVyYXRlZCBieSBKaW0gV2lsc29uOgoJd2lsc29uQGN5Z251cy5jb20pLgoKTW9uIFNlcCAyOCAwNzo0MzozNCAxOTk4ICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogYy1jb21tb24uYyAoY19nZXRfYWxpYXNfc2V0KTogVGlnaHRlbiBzbGlnaHRseSBmb3IgRlVOQ1RJT05fVFlQRXMKCWFuZCBBUlJBWV9UWVBFcy4gIFRpZHkgdXAuICBJbXByb3ZlIHN1cHBvcnQgZm9yIHR5cGUtcHVubmluZy4KCSogZXhwci5jIChzdG9yZV9maWVsZCk6IEFkZCBhbGlhc19zZXQgcGFyYW1ldGVyLiAgU2V0IHRoZQoJTUVNX0FMSUFTX1NFVCBhY2NvcmRpbmdseSwgaWYgdGhlIHRhcmdldCBpcyBhIE1FTS4KCShleHBhbmRfYXNzaWdubWVudCk6IFVzZSBpdC4KCShzdG9yZV9jb25zdHJ1Y3Rvcl9maWVsZCk6IFBhc3MgMC4KCShleHBhbmRfZXhwcik6IExpa2V3aXNlLgoKTW9uIFNlcCAyOCAwNzo1NDowMyAxOTk4ICBDYXRoZXJpbmUgTW9vcmUgIDxjbG1AY3lnbnVzLmNvbT4KCgkqIGZsYWdzLmg6IEFkZCBmbGFnX2RhdGFfc2VjdGlvbnMuCgkqIHRvcGxldi5jOiBBZGQgb3B0aW9uIC1mZGF0YS1zZWN0aW9ucy4gIEFkZCBmbGFnX2RhdGFfc2VjdGlvbnMuCgkoY29tcGlsZV9maWxlKTogRXJyb3IgaWYgZmxhZ19kYXRhX3NlY3Rpb25zIG5vdCBzdXBwb3J0ZWQuCgkqIHZhcmFzbS5jIChhc3NlbWJsZV92YXJpYWJsZSk6IEhhbmRsZSBmbGFnX2RhdGFfc2VjdGlvbnMuCgkqIGNvbmZpZy9zdnI0Lmg6IE1vZGlmeSBwcmVmaXhlcyBmb3IgVU5JUVVFX1NFQ1RJT05fTkFNRS4KCSogY29uZmlnL21pcHMvZWxmLmg6IExpa2V3aXNlLgoJKiBjb25maWcvbWlwcy9lbGY2NC5oOiBMaWtld2lzZS4KCSogaW52b2tlLnRleGk6IERlc2NyaWJlIC1mZGF0YS1zZWN0aW9ucy4KCk1vbiBTZXAgMjggMDQ6MTU6NDQgMTk5OCAgQ3JhaWcgQnVybGV5ICA8YnVybGV5QG1lbGFuZ2UuZ251Lm9yZz4KCgkqIGludm9rZS50ZXhpICgtZmZsb2F0LXN0b3JlKTogQ2xhcmlmeSB0aGF0IHRoaXMgb3B0aW9uCglkb2VzIG5vdCBhZmZlY3QgaW50ZXJtZWRpYXRlIHJlc3VsdHMgLS0gb25seSB2YXJpYWJsZXMuCgpNb24gU2VwIDI4IDA0OjExOjM1IDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGNwcC50ZXhpOiBVcGRhdGUgZm9yIEZvcnRyYW4gdXNhZ2UgZnJvbSBDcmFpZy4KCkZyaSBTZXAgMjUgMjI6MDk6NDcgMTk5OCAgRGF2aWQgRWRlbHNvaG4gIDxlZGVsc29obkBnbnUub3JnPgoKCSogcnM2MDAwLmMgKGZ1bmN0aW9uX2FyZ19ib3VuZGFyeSk6IFJldmVydCBhY2NpZGVudGFsIGNoYW5nZSBvbgoJU2VwdGVtYmVyIDE4LgoKRnJpIFNlcCAyNSAyMDozMDowMCAxOTk4ICBNaWNoYWVsIE1laXNzbmVyICA8bWVpc3NuZXJAY3lnbnVzLmNvbT4KCgkqIHJzNjAwMC5oIChBU01fT1VUUFVUX01JX1RIVU5LKTogRGVjbGFyZSwgY2FsbCBvdXRwdXRfbWlfdGh1bmsuCgkob3V0cHV0X21pX3RodW5rKTogRGVjbGFyZS4KCgkqIHJzNjAwMC5jIChvdXRwdXRfbWlfdGh1bmspOiBGdW5jdGlvbiB0byBjcmVhdGUgdGh1bmtzIGZvciBNSS4KCShvdXRwdXRfZnVuY3Rpb25fcHJvZmlsZXIpOiBVc2UgcjEyIGZvciB0ZW1wLCBpbnN0ZWFkIG9mIHIxMSBzbwoJdGhhdCB3ZSBwcmVzZXJ2ZSB0aGUgc3RhdGljIGNoYWluIHJlZ2lzdGVyLgoKRnJpIFNlcCAyNSAxNDoxODozMyAxOTk4ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CgoJKiBzZGJvdXQuYyAoc2Rib3V0X29uZV90eXBlKTogRG9uJ3QgbG9vayBhdCBUWVBFX0JJTkZPIGZpZWxkIG9mIGVudW1zLgoKRnJpIFNlcCAyNSAxOTozMDoxOSAxOTk4ICBKIm9ybiBSZW5uZWNrZSAgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogc2guYyAoZ2VuX3NobF9zZXh0KTogRml4IGNhc2UgNS4KCkZyaSBTZXAgMjUgMTc6MzU6MjMgMTk5OCAgSiJvcm4gUmVubmVja2UgIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIHJlbG9hZDEuYyAocmVsb2FkX2NvbWJpbmUpOiBSZS1hZGQgbGluZSB0aGF0IGdvdCBhY2NpZGVudGFsbHkgbG9zdC4KCkZyaSBTZXAgMjUgMTA6NDM6NDcgMTk5OCAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogY2NjcC5jIChwZWR3YXJuX3dpdGhfZmlsZV9hbmRfbGluZSk6IEZvciAhX19TVERDX18gY2FzZSwgYXZvaWQKCWFjY2Vzc2luZyB2YXJpYWJsZXMgdW50aWwgdGhleSBhcmUgaW5pdGlhbGl6ZWQgdmlhIHZhX2FyZygpLgoKVGh1IFNlcCAyNCAyMjoxMjoxNiAxOTk4ICBEYXZpZCBTLiBNaWxsZXIgIDxkYXZlbUBwaWVyZG9sLmNvYmFsdG1pY3JvLmNvbT4KCgkqIHJlbG9hZDEuYyAocmVsb2FkX2NvbWJpbmUpOiBJbml0aWFsaXplIHNldCBiZWZvcmUgdXNpbmcuCgpUaHUgU2VwIDI0IDE4OjUzOjIwIDE5OTggIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHNkYm91dC5jIChzZGJvdXRfZmllbGRfdHlwZXMpOiBEb24ndCBlbWl0IHRoZSB0eXBlcyBvZiBmaWVsZHMgd2UKCXdvbid0IGJlIGVtaXR0aW5nLgoKVGh1IFNlcCAyNCAxNzowNTozMCAxOTk4ICBOaWNrIENsaWZ0b24gIDxuaWNrY0BjeWdudXMuY29tPgoKCSogY29uZmlnL2FybS9hcm0ubWQgKGluc3YpOiBBZGQgY29tbWVudC4gIEluIENPTlNUX0lOVCBjYXNlLCBhbmQKCW9wZXJhbmQzIHdpdGggbWFzayBiZWZvcmUgdXNpbmcgaXQuICBQYXRjaCBwcm92aWRlZCBieSBKaW0gV2lsc29uLgoKVGh1IFNlcCAyNCAxNTowODowOCAxOTk4ICBKYWt1YiBKZWxpbmVrICA8ampAc3Vuc2l0ZS5tcy5tZmYuY3VuaS5jej4KCgkqIGNvbmZpZy9zcGFyYy9zcGFyYy5jIChmdW5jdGlvbl92YWx1ZSk6IFBlcmZvcm0gdGhlIGVxdWl2YWxlbnQgb2YKCVBST01PVEVfTU9ERSBmb3IgQVJDSDY0LgoJKGVsaWdpYmxlX2Zvcl9lcGlsb2d1ZV9kZWxheSk6IEFsbG93IERJbW9kZSBvcGVyYXRpb25zIGluIGRlbGF5CglzbG90IG9mIGEgcmV0dXJuIGZvciBBUkNINjQuCgpUaHUgU2VwIDI0IDIyOjE3OjU0IDE5OTggIEoib3JuIFJlbm5lY2tlICA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiBzaC5tZCAoc3FydHNmMik6IEZpeCBtb2RlIG9mIHNxcnQuCgpUaHUgU2VwIDI0IDIxOjQ4OjUxIDE5OTggIEoib3JuIFJlbm5lY2tlICA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiByZWxvYWQxLmMgKGNob29zZV9yZWxvYWRfcmVncyk6IEFsc28gdHJ5IGluaGVyaXRhbmNlIHdoZW4KCXJlbG9hZF9pbiBpcyBhIHN0YWNrIHNsb3Qgb2YgYSBwc2V1ZG8sIGV2ZW4gaWYgd2UgYWxyZWFkeSBnb3QgYQoJcmVsb2FkIHJlZy4KClRodSBTZXAgMjQgMjE6MjI6MzkgMTk5OCAgSiJvcm4gUmVubmVja2UgIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIHJlbG9hZDEuYyAocmVsb2FkX2NzZV9yZWdzXzEpOiBSZW5hbWVkIGZyb20gcmVsb2FkX2NzZV9yZWdzLgoJKHJlbG9hZF9jc2VfcmVncyk6IE5ldyBmdW5jdGlvbiBib2R5OiBjYWxsIHJlbG9hZF9jc2VfcmVnc18xLAoJcmVsb2FkX2NvbWJpbmUsIHJlbG9hZF9jc2VfbW92ZTJhZGQuCglXaGVuIGRvaW5nIGV4cGVuc2l2ZV9vcHRpbWl6YXRpb25zLCBjYWxsIHJlbG9hZF9jc2VfcmVnc18xIGEKCXNlY29uZCB0aW1lIGFmdGVyIHJlbG9hZF9jc2VfbW92ZTJhZGQuCgkocmVsb2FkX2NvbWJpbmUsIHJlbG9hZF9jb21iaW5lX25vdGVfc3RvcmUpOiBOZXcgZnVuY3Rpb25zLgoJKHJlbG9hZF9jb21iaW5lX25vdGVfdXNlKTogTmV3IGZ1bmN0aW9uLgoJKHJlbG9hZF9jc2VfbW92ZTJhZGQsIG1vdmUyYWRkX25vdGVfc3RvcmUpOiBOZXcgZnVuY3Rpb25zLgoKVGh1IFNlcCAyNCAxODo0ODo0MyAxOTk4ICBKIm9ybiBSZW5uZWNrZSAgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogcmVsb2FkLmMgKGZpbmRfcmVsb2Fkcyk6IEluIGNvZGUgdG8gcHJvbW90ZSBSRUxPQURfRk9SX1hfQUREUl9BRERSCglyZWxvYWRzIHRvIFJFTE9BRF9GT1JfWF9BRERSRVNTIHJlbG9hZHMsIHRlc3QgZm9yIHJlbG9hZCBzaGFyaW5nLgoKCVByb3Blcmx5IGtlZXAgdHJhY2sgb2YgZmlyc3QgUkVMT0FEX0ZPUl9YX0FERFJFU1MgYWxzbyBmb3IKCW1vcmUgdGhhbiAzIHN1Y2ggcmVsb2Fkcy4KCglJZiB0aGVyZSBpcyBub3QgbW9yZSB0aGFuIG9uZSBSRUxPQURfRk9SX1hfQUREUkVTUywgZG9uJ3QgY2hhbmdlCglSRUxPQURfRk9SX1hfQUREUl9BRERSIHJlbG9hZC4KClRodSBTZXAgMjQgMTc6NDU6NTUgMTk5OCAgSiJvcm4gUmVubmVja2UgIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIGV4cHIuYyAoc3RvcmVfY29uc3RydWN0b3IpOiBXaGVuIGluaXRpYWxpemluZyBhIGZpZWxkIHRoYXQgaXMgc21hbGxlcgoJdGhhbiBhIHdvcmQsIGF0IHRoZSBzdGFydCBvZiBhIHdvcmQsIHRyeSB0byB3aWRlbiBpdCB0byBhIGZ1bGwgd29yZC4KCgkqIGNzZS5jIChjc2VfaW5zbik6IFdoZW4gd2UgYXJlIGFib3V0IHRvIGNoYW5nZSBhIHJlZ2lzdGVyLAoJcmVtb3ZlIGFueSBpbnZhbGlkIHJlZmVyZW5jZXMgdG8gaXQuCgoJKHJlbW92ZV9pbnZhbGlkX3N1YnJlZ19yZWZzKTogTmV3IGZ1bmN0aW9uLgoJKG1lbnRpb25fcmVncyk6IFNwZWNpYWwgdHJlYXRtZW50IGZvciBTVUJSRUdzLgoJKGluc2VydF9yZWdzKTogRG9uJ3Qgc3RyaXAgU1VCUkVHIGZvciBjYWxsIHRvIG1lbnRpb25fcmVncy4KCUNoZWNrIGlmIHJlZ190aWNrIG5lZWRzIHRvIGJlIGJ1bXBlZCB1cCBiZWZvcmUgdGhhdCBjYWxsLgoJKGxvb2t1cF9hc19mdW5jdGlvbik6IFRyeSB0byBtYXRjaCBrbm93biB3b3JkX21vZGUgY29uc3RhbnRzIHdoZW4KCWxvb2tpbmcgZm9yIGEgbm9ycm93ZXIgY29uc3RhbnQuCgkoY2Fub25faGFzaCk6IFNwZWNpYWwgdHJlYXRtZW50IGZvciBTVUJSRUdzLgoKVGh1IFNlcCAyNCAwMTozNTozNCAxOTk4ICBEYXZpZCBTLiBNaWxsZXIgIDxkYXZlbUBwaWVyZG9sLmNvYmFsdG1pY3JvLmNvbT4KCgkqIGNvbmZpZy9zcGFyYy9zb2wyLXNsZC02NC5oIChUUkFOU0ZFUl9GUk9NX1RSQU1QT0xJTkUpOiBEZWZpbmUuCgkqIGNvbmZpZy9zcGFyYy9zcGFyYy5jIChzcGFyYzY0X2luaXRpYWxpemVfdHJhbXBvbGluZSk6IElmIHRoYXQgaXMKCWRlZmluZWQsIGVtaXQgbGliY2FsbCB0byBfX2VuYWJsZV9leGVjdXRlX3N0YWNrLiAgQWxzbyBmaXggb3Bjb2RlcwoJYW5kIG9mZnNldHMgaW4gYWN0dWFsIHN0YWNrIHRyYW1wb2xpbmUgY29kZSBzbyB0aGV5IG1hdGNoIHRoZQoJY29tbWVudGFyeSBhbmQgYWN0dWFsbHkgd29yay4KClRodSBTZXAgMjQgMDE6MTk6MDIgMTk5OCAgSmFrdWIgSmVsaW5layAgPGpqQHN1bnNpdGUubXMubWZmLmN1bmkuY3o+CgoJKiBjb25maWd1cmUuaW4gKHNwYXJjdjktKi1zb2xhcmlzKTogVXNlIHQtc29sMiBhbmQgdC1zb2wyLTY0IGZvcgoJdG1ha2VfZmlsZS4KCShzcGFyYzY0LSotbGludXgpOiBVc2UgdC1saW51eCBhbmQgc3BhcmMvdC1saW51eDY0IGZvcgoJdG1ha2VfZmlsZS4gIFNldCBleHRyYV9wYXJ0cyB0byBuZWVkZWQgY3J0IG9iamVjdHMuCgkqIGNvbmZpZ3VyZTogUmVidWlsdC4KCSogY29uZmlnL3NwYXJjL2xpbnV4NjQuaCAoU1BBUkNfQklfQVJDSCk6IERlZmluZS4KCShUQVJHRVRfREVGQVVMVCk6IFNldCBpZiBkZWZhdWx0IGlzIHY5IG9yIHVsdHJhLgoJKFNUQVJURklMRV9TUEVDMzIsIFNUQVJURklMRV9TUEVDNjQpOiBOZXcgbWFjcm9zLgoJKFNUQVJURklMRV9TUEVDKTogU2V0IHRvIHRob3NlIHVwb24gU1BBUkNfQklfQVJDSC4KCShFTkRGSUxFX1NQRUMzMiwgRU5ERklMRV9TUEVDNjQsIEVOREZJTEVfU1BFQyk6IExpa2V3aXNlLgoJKFNVQlRBUkdFVF9FWFRSQV9TUEVDUywgTElOS19BUkNIMzJfU1BFQywgTElOS19BUkNINjRfU1BFQywKCUxJTktfU1BFQywgTElOS19BUkNIX1NQRUMpOiBMaWtld2lzZS4KCShUQVJHRVRfVkVSU0lPTik6IERlZmluZS4KCShNVUxUSUxJQl9ERUZBVUxUKTogRGVmaW5lLgoJKiBjb25maWcvc3BhcmMvc3BhcmMuaCAoQ1BQX0NQVV9ERUZBVUxUX1NQRUMpOiBSZWFycmFuZ2Ugc28gdGhhdAoJbWl4ZWQgMzIvNjQgYml0IGNvbXBpbGVycyBiYXNlZCB1cG9uIFNQQVJDX0JJX0FSQ0ggd29yay4KCShDUFBfQ1BVNjRfREVGQVVMVF9TUEVDLCBDUFBfQ1BVMzJfREVGQVVMVF9TRUMpOiBEZWZpbmUKCWFwcHJvcHJpYXRlbHkuCgkoVEFSR0VUX1NXSVRDSEVTKTogQWxsb3cgcHRyMzIvcHRyNjQgb3B0aW9ucyBvbmNlIG1vcmUuCgkqIGNvbmZpZy9zcGFyYy9zcGFyYy5jIChzcGFyY19vdmVycmlkZV9vcHRpb25zKTogSWYgYXJjaCBhbmQKCXBvaW50ZXIgc2l6ZSBkaXNhZ3JlZSwgZW1pdCBkaWFnbm9zdGljIGFuZCBmaXggaXQgdXAuICBJZgoJU1BBUkNfQklfQVJDSCBhbmQgVEFSR0VUX0FSQ0gzMiwgc2V0IGNtb2RlbCB0byBDTV8zMi4gIFR1cm4gb2ZmCglWOFBMVVMgaW4gNjQtYml0IG1vZGUuCgkqIGNvbmZpZy9zcGFyYy90LWxpbnV4NjQ6IE5ldyBmaWxlLgoJKiBjb25maWcvc3BhcmMvdC1zb2wyLTY0OiBOZXcgZmlsZS4KCSogY29uZmlnL3NwYXJjL3Qtc29sMjogQWRqdXN0IGJ1aWxkIHJ1bGVzIHRvIHVzZSBNVUxUSUxJQl9DRkxBR1MuCgkqIGNvbmZpZy9zcGFyYy9zb2wyLXNsZC02NC5oIChTUEFSQ19CSV9BUkNIKTogRGVmaW5lLgoJKEFTTV9DUFUzMl9ERUZBVUxUX1NQRUMsIEFTTV9DUFU2NF9ERUZBVUxUX1NQRUMsCglDUFBfQ1BVMzJfREVGQVVMVF9TUEVDLCBDUFBfQ1BVNjRfREVGQVVMVF9TUEVDKTogRGVmaW5lLgoJKEFTTV9TUEVDLCBDUFBfQ1BVX1NQRUMpOiBTZXQgYXBwcm9wcmlhdGVseSBiYXNlZCB1cG9uIHRob3NlLgoJKFNUQVJURklMRV9TUEVDMzIsIFNUQVJURklMRV9TUEVDMzIsIFNUQVJURklMRV9BUkNIX1NQRUMpOgoJRGVmaW5lLgoJKFNUQVJURklMRV9TUEVDKTogU2V0IGFwcHJvcHJpYXRlbHkgYmFzZWQgdXBvbiB0aG9zZS4KCShDUFBfQ1BVX0RFRkFVTFRfU1BFQywgQVNNX0NQVV9ERUZBVUxUX1NQRUMpOiBTZXQgYmFzZWQgdXBvbgoJZGlzcG9zaXRpb24gb2YgREVGQVVMVF9BUkNIMzJfUC4KCShMSU5LX0FSQ0gzMl9TUEVDLCBMSU5LX0FSQ0g2NF9TUEVDKTogRGVmaW5lLgoJKExJTktfQVJDSF9TUEVDLCBMSU5LX0FSQ0hfREVGQVVMVF9TUEVDKTogU2V0IGJhc2VkIHVwb24gdGhvc2UuCgkoQ0MxX1NQRUMsIE1VTFRJTElCX0RFRkFVTFRTKTogU2V0IGJhc2VkIHVwb24gREVGQVVMVF9BUkNIMzJfUC4KCShNRF9TVEFSVEZJTEVfUFJFRklYKTogU2V0IGNvcnJlY3RseSBiYXNlZCB1cG9uIFNQQVJDX0JJX0FSQ0guCgkqIGNvbmZpZy9zcGFyYy94bS1zeXN2NC02NC5oIChIT1NUX0JJVFNfUEVSX0xPTkcpOiBPbmx5IHNldCBvbgoJYXJjaDY0L3Y5LgoJKiBjb25maWcvc3BhcmMveG0tc3A2NC5oIChIT1NUX0JJVFNfUEVSX0xPTkcpOiBMaWtld2lzZS4KCldlZCBTZXAgMjMgMjI6MzI6MzEgMTk5OCAgTWFyayBNaXRjaGVsbCAgPG1hcmtAbWFya21pdGNoZWxsLmNvbT4KCgkqIHJ0bC5oIChpbml0X3ZpcnR1YWxfcmVncyk6IE5ldyBmdW5jdGlvbi4KCSogZW1pdC1ydGwuYyAoaW5pdF92aXJ0dWFsX3JlZ3MpOiBEZWZpbmUuCgkoaW5zbl9lbWl0KTogVXNlIGl0LgoJKiBpbnRlZ3JhdGUuYyAoc2F2ZV9mb3JfaW5saW5lX2NvcHlpbmcpOiBMaWtld2lzZS4KCldlZCBTZXAgMjMgMTY6MjI6MDEgMTk5OCAgTmljayBDbGlmdG9uICA8bmlja2NAY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy9hcm0vdGh1bWIuaDogVGhlIGZvbGxvd2luZyBwYXRjaGVzIHdlcmUgbWFkZSBieSBKaW0gV2lsc29uOgoJKGVudW0gcmVnX2NsYXNzKTogQWRkIE5PTkFSR19MT19SRUdTIHN1cHBvcnQuCgkoUkVHX0NMQVNTX05BTUVTLCBSRUdfQ0xBU1NfQ09OVEVOVFMsIFJFR05PX1JFR19DTEFTUywKCVBSRUZFUlJFRF9SRUxPQURfQ0xBU1MsIFNFQ09OREFSWV9SRUxPQURfQ0xBU1MpOiBMaWtld2lzZS4KCShHT19JRl9MRUdJVElNQVRFX0FERFJFU1MpOiBEaXNhYmxlIFJFRytSRUcgYWRkcmVzc2VzIGJlZm9yZSByZWxvYWQKCWNvbXBsZXRlcy4gIFJlLWVuYWJsZSBISW1vZGUgUkVHK09GRlNFVCBhZGRyZXNzZXMuCgkoTEVHSVRJTUlaRV9SRUxPQURfQUREUkVTUyk6IERlZmluZS4KCgkqIGV4cG1lZC5jIChleHRyYWN0X2JpdF9maWVsZCk6IEFkZCBjb21tZW50IGZyb20gSmltIFdpbHNvbi4KCldlZCBTZXAgMjMgMTM6MjY6MDIgMTk5OCAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGFscGhhLmMgKGdldF9hbGlnbmVkX21lbSk6IFJldmVydCBTZXAgMjAgY2hhbmdlLgoJKGFscGhhX3NldF9tZW1mbGFncywgYWxwaGFfc2V0X21lbWZsYWdzXzEpOiBMaWtld2lzZS4KCShhbHBoYV9hbGlnbl9pbnNucyk6IFByb3Blcmx5IGNhbGN1bGF0ZSBpbml0aWFsIG9mZnNldCB3cnQgbWF4X2FsaWduLgoKV2VkIFNlcCAyMyAxMDo0NTo0NCAxOTk4ICBSaWNoYXJkIEVhcm5zaGF3ICAocmVhcm5zaGFAYXJtLmNvbSkKCgkqIGFybS5jIChmaW5kX2JhcnJpZXIpOiBSZXZlcnQgY2hhbmdlIG9mIEFwciAyMy4gIEhhbmRsZSB0YWJsZQoJanVtcHMgYXMgYSBzaW5nbGUgZW50aXR5LCB0YWtpbmcgaW50byBhY2NvdW50IHRoZSBzaXplIG9mIHRoZQoJdGFibGUuCgpUdWUgU2VwIDIyIDE1OjEzOjM0IDE5OTggIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogdHJlZS5kZWYgKFNXSVRDSF9FWFBSKTogTmV3IHRyZWUgbm9kZSBkZWZpbml0aW9uLgoKTW9uIFNlcCAyMSAyMzo0MDozOCAxOTk4ICBKZWZmIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogdmVyc2lvbi5jOiBCdW1wIGZvciBzbmFwc2hvdC4KCk1vbiBTZXAgMjEgMjI6MzE6MTQgMTk5OCAgSmVmZiBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHZlcnNpb24uYzogQnVtcCBmb3Igc25hcHNob3QuCgpNb24gU2VwIDIxIDIyOjQ4OjA5IDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGNvbmZpZ3VyZS5pbjogUmVjb2duaXplIGlbMzQ1NjddODYtKi1vcGVuYnNkKiBhbmQgaGFuZGxlIGl0IGxpa2UKCU5ldEJTRC4KCk1vbiBTZXAgMjEgMjI6MDU6MjggMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogUmV2ZXJ0IHRoaXMgcGF0Y2guCgkqIHJlbG9hZC5jIChmaW5kX3JlbG9hZHMpOiBEbyBub3QgcmVwbGFjZSBhIHBzZXVkbyB3aXRoCgkoTUVNIChyZWdfZXF1aXZfYWRkcikpIGluIHRoZSBpbml0aWFsaXppbmcgaW5zbiBmb3IgdGhlCglwc2V1ZG8uCgpNb24gU2VwIDIxIDIwOjE5OjQxIDE5OTggIEpvaG4gQ2FyciAgPGpmY0BtaXQuZWR1PgoKCSogZmluYWwuYyAoZmluYWxfc2Nhbl9pbnNuKTogRGlzYWJsZSB0cmFja2luZyBDQyBhY3Jvc3MgYnJhbmNoZXMuCgpNb24gU2VwIDIxIDE3OjE1OjI2IDE5OTggIEFuZHJldyBNYWNMZW9kICA8YW1hY2xlb2RAY3lnbnVzLmNvbT4KCgkqIGV4cHIuaCAoZWhfcnRpbWVfbWF0Y2hfbGliZnVuYyk6IE5ldyBleHRlcm4gZGVjbGFyYXRpb24uCgkqIG9wdGFicy5jIChpbml0X29wdGFicyk6IFNldCBlaF9ydGltZV9tYXRjaF9saWJmdW5jLgoJKiBleGNlcHQuYyAoc3RhcnRfY2F0Y2hfaGFuZGxlcik6IFVzZSBlaF9ydGltZV9tYXRjaF9saWJmdW5jLgoJKiBsaWJnY2MyLmMgKF9fZWhfcnRpbWVfbWF0Y2gpOiBBbHdheXMgcmV0dXJuIDAgaWYgdGhlIG1hdGNoZXIgaXMKCU5VTEwuIE9ubHkgaW5jbHVkZSA8c3RkaW8uaD4gaWYgaW5oaWJpdF9saWJjIGlzIG5vdCBkZWZpbmVkLgoKTW9uIFNlcCAyMSAxNDoxMDo1MSAxOTk4ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiB0b3BsZXYuYyAocmVzdF9vZl9jb21waWxhdGlvbik6IFNraXAgY29tcGlsaW5nIGFueXRoaW5nIHdpdGgKCURFQ0xfRVhURVJOQUwgc2V0LCBub3QganVzdCBpZiBpdCBoYXMgREVDTF9JTkxJTkUgYXMgd2VsbC4KCk1vbiBTZXAgMjEgMTM6NTE6MDUgMTk5OCAgSmltIFdpbHNvbiAgPHdpbHNvbkBjeWdudXMuY29tPgoKCSogZmxvdy5jIChmaW5kX2Jhc2ljX2Jsb2Nrcyk6IERlbGV0ZSBjaGVjayBmb3IgaW5fbGliY2FsbF9ibG9jayB3aGVuCglwcmV2X2NvZGUgaXMgYSBDQUxMX0lOU04uICBDaGFuZ2UgY2hlY2sgZm9yIFJFR19SRVRWQUwgbm90ZSB0bwoJdXNlIGluX2xpYmNhbGxfYmxvY2suCgkoZmluZF9iYXNpY19ibG9ja3NfMSk6IERlbGV0ZSBjaGVjayBmb3IgaW5fbGliY2FsbF9ibG9jayB3aGVuIHByZXZfY29kZQoJaXMgYSBDQUxMX0lOU04uICBJZiBDQUxMX0lOU04gYW5kIGluX2xpYmNhbGxfYmxvY2ssIHRoZW4gY2hhbmdlIGNvZGUKCXRvIElOU04uCgpNb24gU2VwIDIxIDE0OjAyOjIzIDE5OTggIFJvYmVydCBMaXBlICA8cm9iZXJ0bEBkZ2lpLmNvbT4KCgkqIGkzODYuaCAoVEFSR0VUX1NXSVRDSEVTKTogSW1wcm92ZSBkb2MgZm9yIGFsaWduLWRvdWJsZS4gIEZpeAoJdHlwbyBpbiBuby1mYW5jeS1tYXRoLTM4NyBkZXNjcmlwdGlvbi4KCk1vbiBTZXAgMjEgMDk6Mjc6MTggMTk5OCAgSmVmZiBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHZlcnNpb24uYzogQnVtcCBmb3Igc25hcHNob3QuCgpNb24gU2VwIDIxIDA5OjI0OjQ5IDE5OTggIFN0YW4gQ294ICA8c2NveEBjeWdudXMuY29tPgoKCSogaTM4Ni1jb2ZmLmggKERCWF9ERUJVR0dJTkdfSU5GTyk6IEFkZGVkLgoKTW9uIFNlcCAyMSAwOToxNDo0OSAxOTk4ICBSb2JlcnQgTGlwZSAgPHJvYmVydGxAZGdpaS5jb20+CgoJKiBpMzg2LmggKFRBUkdFVF9TV0lUQ0hFUyk6IEFkZCBkZXNjcmlwdGlvbiBmaWVsZHMgZm9yIGZsYWdzCglkb2N1bWVudGVkIGluIGluc3RhbGwudGV4aS4KCShUQVJHRVRfT1BUSU9OUyk6IExpa2V3aXNlLgoKTW9uIFNlcCAyMSAwMTozOTowMyAxOTk4ICBKZWZmIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogdmVyc2lvbi5jOiBCdW1wIGZvciBzbmFwc2hvdC4KCk1vbiBTZXAgMjEgMDE6NTM6MDUgMTk5OCAgRmVsaXggTGVlICA8ZmxlZUBjeWdudXMuY29tPgoKCSogYy1sZXguYyAoaW5pdF9sZXgpOiBVc2UgZ2V0ZW52ICgiTEFORyIpLCBub3QgR0VUX0VOVklST05NRU5UICgpLgoJKiBjY2NwLmMgKG1haW4pOiBMaWtld2lzZS4KCgkqIGNjY3AuYywgY29sbGVjdDIuYywgY3BwbGliLmMsIGdjYy5jLCBjb25maWcvaTM4Ni94bS1jeWd3aW4zMi5oOgoJUmVuYW1lIEdFVF9FTlZJUk9OTUVOVCB0byBHRVRfRU5WX1BBVEhfTElTVCwgYW5kIGZpeCBzb21lCgltYWNyby11c2UgYnVncy4KCk1vbiBTZXAgMjEgMDA6NTI6MTIgMTk5OCAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGN5Z251cy5jb20+CgoJKiBNYWtlZmlsZS5pbiAoTElCUyk6IExpbmsgaW4gbGliaWJlcnR5LmEuCgkqIGMtY29tbW9uLmMsIGdjYy5jLCB0b3BsZXYuYzogUmVwbGFjZSAoc29tZSkgYmNvcHkgY2FsbHMgYnkgbWVtY3B5LgoKU3VuIFNlcCAyMCAyMzoyODoxMSAxOTk4ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogcmVsb2FkMS5jIChlbWl0X3JlbG9hZF9pbnNucyk6IEFjY2VwdCBhIG5ldyBhcmcgZm9yIHRoZSBiYi4gIFVzZQoJaXQgdG8gdXBkYXRlIGJiIGJvdW5kYXJpZXMuICBVcGRhdGUgY2FsbGVyLgoJKiBmdW5jdGlvbi5jIChyZXBvc2l0aW9uX3Byb2xvZ3VlX2FuZF9lcGlsb2d1ZV9ub3Rlcyk6IFVwZGF0ZQoJYmIgYm91bmRhcmllcyB3cnQgdGhlIG1vdmVkIG5vdGUuCgpTdW4gU2VwIDIwIDIwOjU3OjAyIDE5OTggIFJvYmVydCBMaXBlICA8cm9iZXJ0bEBkZ2lpLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbiAoaSo4Ni0qLXN5c3Y1Kik6IFVzZSBmaXhpbmMuc3ZyNCB0byBwYXRjaCBieXRlb3JkZXIKCXByb2JsZW1zLgoJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCgpTdW4gU2VwIDIwIDE5OjAxOjUxIDE5OTggIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBhbHBoYS5jIChhbHBoYV9zcl9hbGlhc19zZXQpOiBOZXcgdmFyaWFibGUuCgkob3ZlcnJpZGVfb3B0aW9ucyk6IFNldCBpdC4KCShhbHBoYV9leHBhbmRfcHJvbG9ndWUsIGFscGhhX2V4cGFuZF9lcGlsb2d1ZSk6IFVzZSBpdC4KCShtb2RlX21hc2tfb3BlcmFuZCk6IEZpeCBzaWduZWQtdW5zaWduZWQgY29tcGFyaXNvbiB3YXJuaW5nLgoJKGFscGhhX2V4cGFuZF9ibG9ja19tb3ZlKTogTGlrZXdpc2UuCgkocHJpbnRfb3BlcmFuZCk6IExpa2V3aXNlLgoJKGdldF9hbGlnbmVkX21lbSk6IFVzZSBjaGFuZ2VfYWRkcmVzcy4KCShhbHBoYV9zZXRfbWVtZmxhZ3MsIGFscGhhX3NldF9tZW1mbGFnc18xKTogU2V0IHRoZSBhbGlhcyBzZXQuCgkoYWxwaGFldjRfaW5zbl9waXBlLCBhbHBoYWV2NF9uZXh0X2dyb3VwKTogTmV3IGZ1bmN0aW9ucy4KCShhbHBoYWV2NF9uZXh0X25vcCwgYWxwaGFldjVfbmV4dF9ub3ApOiBOZXcgZnVuY3Rpb25zLgoJKGFscGhhX2FsaWduX2luc25zKTogUmVtYWRlIGZyb20gb2xkIGFscGhhZXY1X2FsaWduX2luc25zCgl0byBoYW5kbGUgbXVsdGlwbGUgcHJvY2Vzc29ycy4KCShhbHBoYV9yZW9yZyk6IENhbGwgYWxwaGFfYWxpZ25faW5zbnMgZm9yIGJvdGggZXY0IGFuZCBldjUuCgkqIG91dHB1dC5oIChsYWJlbF90b19hbGlnbm1lbnQpOiBQcm90b3R5cGUuCgoJKiB0cmVlLmMgKG5ld19hbGlhc19zZXQpOiBOZXcgZnVuY3Rpb24uCgkqIHRyZWUuaCAobmV3X2FsaWFzX3NldCk6IERlY2xhcmUgaXQuCgkqIGMtY29tbW9uLmMgKGNfZ2V0X2FsaWFzX3NldCk6IFVzZSBpdC4KClN1biBTZXAgMjAgMTI6MzU6NTUgMTk5OCAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGZvbGQtY29uc3QuYyAoZm9sZCk6IFlldCBhbm90aGVyIENPTkRfRVhQUiBidWc6IHdoZW4gZm9sZGluZwoJdG8gYW4gQUJTIGV4cHIsIGNvbnZlcnQgYW4gdW5zaWduZWQgaW5wdXQgdG8gc2lnbmVkLgoKU3VuIFNlcCAyMCAxMjoxNDo0NSAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBmb2xkLWNvbnN0LmMgKGZvbGQpOiBGaXggYW5vdGhlciB0eXBlIGluIENPTkRfRVhQUiBoYW5kbGluZyBjb2RlLgoKMTk5OC0wOS0yMCAgTWljaGFlbCBIYXllcyAgPG0uaGF5ZXNAZWxlYy5jYW50ZXJidXJ5LmFjLm56PgoKCSogY29uZmlndXJlLmluOiBBZGQgc3VwcG9ydCBmb3IgYzR4IHRhcmdldHMuCgkqIGNvbmZpZ3VyZTogUmVidWlsdC4KClN1biBTZXAgMjAgMDA6MDA6NTEgMTk5OCAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGNvbWJpbmUuYyAoZGlzdHJpYnV0ZV9ub3Rlcyk6IElmIGFuIGluc24gaXMgYSBjYzAgdXNlciwgb25seQoJZGVsZXRlIGl0IGlmIHdlIGNhbiBhbHNvIGRlbGV0ZSB0aGUgY2MwIHNldHRlci4KClN1biBTZXAgMjAgMDA6MjI6MjMgMTk5OCAgTWljaGFlbCBUaWVtYW5uICA8bWljaGFlbEBpbXBhY3QudGllbWFubi5vcmc+CgoJKiBmb2xkLWNvbnN0LmMgKGZvbGQpOiBGaXggdHlwbyBpbiBDT05EX0VYUFIgaGFuZGxpbmcgY29kZS4KCShpbnZlcnRfdHJ1dGh2YWx1ZSk6IEVuYWJsZSB0cnV0aHZhbHVlIGludmVyc2lvbiBmb3IKCWZsb2F0aW5nLXBvaW50IG9wZXJhbmRzIGlmIC1mZmFzdC1tYXRoLgoKU2F0IFNlcCAxOSAyMzo1ODowNyAxOTk4ICBNZWxpc3NhIE8nTmVpbGwgIDxvbmVpbGxAY3Muc2Z1LmNhPgoKCSogY29uZmlndXJlLmluOiBEaXNhYmxlIGNvbGxlY3QyIGZvciBuZXh0c3RlcC4gIEluc3RlYWQgdXNlCgljcnRiZWdpbi9jcnRlbmQuCgkqIGNvbmZpZ3VyZTogUmVidWlsdC4KCSogY29uZmlnL25leHRzdGVwLmggKFNUQVJURklMRV9TUEVDKTogQWRkIGNydGJlZ2luLgoJKEVOREZJTEVfU1BFQyk6IERlZmluZS4KCShPQkpFQ1RfRk9STUFUX01BQ0hPKTogRGVmaW5lLgoJKEVIX0ZSQU1FX1NFQ1RJT05fQVNNX09QKTogRGVmaW5lLgoJKiBjcnRzdHVmZi5jOiBIYW5kbGUgTUFDSE8uCgpTdW4gU2VwIDIwIDAwOjI0OjI0IDE5OTggIFJvYmVydCBMaXBlICA8cm9iZXJ0bEBkZ2lpLmNvbT4KCgkqIGNvbmZpZy9pMzg2L3NjbzUuaCAoVEFSR0VUX01FTV9GVU5DVElPTlMpOiBEZWZpbmUuCgoxOTk4LTA5LTE5ICBUb3Jiam9ybiBHcmFubHVuZCAgPHRlZ2VAbWF0ZW1hdGlrLnN1LnNlPgoKCSogZnAtYml0LmMgKHBhY2tfZCk6IERvIG5vdCBjbGVhciBTSUdOIHdoZW4gZnJhY3Rpb24gaXMgMC4KCShfZnBhZGRfcGFydHMpOiBHZXQgc2lnbiByaWdodCBmb3IgMC4KCjE5OTgtMDktMTkgIE1pY2hhZWwgSGF5ZXMgIDxtLmhheWVzQGVsZWMuY2FudGVyYnVyeS5hYy5uej4KCgkqIGdpbmNsdWRlL3ZhcmFyZ3MuaDogQWRkIHN1cHBvcnQgZm9yIEM0eCB0YXJnZXQuCgkqIGdpbmNsdWRlL3N0ZGFyZ3MuaDogTGlrZXdpc2UuCgpTYXQgU2VwIDE5IDEyOjA1OjA5IDE5OTggIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBhbHBoYS5jIChhbHBoYV9yZXR1cm5fYWRkcik6IFNFVCBzaG91bGQgYmUgVk9JRG1vZGUuCgkoYWxwaGFfZW1pdF9zZXRfbG9uZ19jb25zdCk6IFJld3JpdGUgdG8gYmUgY2FsbGFibGUgZnJvbSByZWxvYWQKCWFuZCAzMi1iaXQgaG9zdHMuCgkoYWxwaGFfZXhwYW5kX2VwaWxvZ3VlKTogVXBkYXRlIGZvciBhbHBoYV9lbWl0X3NldF9sb25nX2NvbnN0LgoJKiBhbHBoYS5tZCAobW92ZGkpOiBMaWtld2lzZS4KClNhdCBTZXAgMTkgMDc6MzM6MzYgMTk5OCAgUmljaGFyZCBFYXJuc2hhdyAgKHJlYXJuc2hhQGFybS5jb20pCgoJKiBhcm0uYyAoYWRkX2NvbnN0YW50KTogTmV3IHBhcmFtZXRlciBhZGRyZXNzX29ubHksIGNoYW5nZSBjYWxsZXIuCglTZXQgaXQgbm9uemVybyBpZiB0YWtpbmcgdGhlIGFkZHJlc3Mgb2YgYW4gaXRlbSBpbiB0aGUgcG9vbC4KCShhcm1fcmVvcmcpOiBIYW5kbGUgY2FzZXMgd2hlcmUgd2UgbmVlZCB0aGUgYWRkcmVzcyBvZiBhbiBpdGVtIGluCgl0aGUgcG9vbC4KCgkqIGFybS5jIChiYWRfc2lnbmVkX2J5dGVfb3BlcmFuZCk6IENoZWNrIGJvdGggYXJtcyBvZiBhIHN1bSBpbgoJYSBtZW1vcnkgYWRkcmVzcy4KCSogYXJtLm1kIChzcGxpdHMgZm9yICpleHRlbmRxaWhpX2luc24gYW5kICpleHRlbmRxaXNpX2luc24pOiBIYW5kbGUKCW1lbW9yeSBhZGRyZXNzZXMgdGhhdCBhcmUgbm90IGluIHN0YW5kYXJkIGNhbm9uaWNhbCBmb3JtLgoKU2F0IFNlcCAxOSAwMTowMDozMiAxOTk4ICBNaWNoYWVsIEhheWVzICAobXBoQGVsZWMuY2FudGVyYnVyeS5hYy5ueikKCgkqIFJFQURNRS5DNFg6IE5ldyBmaWxlIHdpdGggaW5mb3JtYXRpb24gYWJvdXQgdGhlIGM0eCBwb3J0cy4KCSogZ2luY2x1ZGUvdmEtYzR4Lmg6IE5ldyBmaWxlIGZvciBjNHggdmFyYXJncyBzdXBwb3J0LgoJKiBjb25maWcvYzR4OiBOZXcgZGlyZWN0b3J5IHdpdGggYzR4IHBvcnQgZmlsZXMuCgpGcmkgU2VwIDE4IDIyOjUyOjA1IDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHJlbG9hZC5jIChmaW5kX3JlbG9hZHMpOiBEbyBub3QgcmVwbGFjZSBhIHBzZXVkbyB3aXRoCgkoTUVNIChyZWdfZXF1aXZfYWRkcikpIGluIHRoZSBpbml0aWFsaXppbmcgaW5zbiBmb3IgdGhlCglwc2V1ZG8uCgpGcmkgU2VwIDE4IDIzOjUwOjU2IDE5OTggIERhdmlkIEVkZWxzb2huICA8ZWRlbHNvaG5AZ251Lm9yZz4KCgkqIHRvcGxldi5jIChyZXN0X29mX2NvbXBpbGF0aW9uKTogU2V0IGJjdF9wIG9uIHNlY29uZCBjYWxsIHRvCglsb29wX29wdGltaXplLgoJKiBsb29wLmMgKGxvb3Bfb3B0aW1pemUsIHNjYW5fbG9vcCwgc3RyZW5ndGhfcmVkdWNlKTogTmV3IGFyZ3VtZW50CgliY3RfcC4KCShzdHJlbmd0aF9yZWR1Y2UpOiBPbmx5IGNhbGwgYW5hbHl6ZV9sb29wX2l0ZXJhdGlvbnMgYW5kCglpbnNlcnRfYmN0IGlmIGJjdF9wIHNldC4KCShjaGVja19kYnJhX2xvb3ApOiBGaXggdHlwby4KCShpbnNlcnRfYmN0KTogVXNlIHdvcmRfbW9kZSBpbnN0ZWFkIG9mIFNJbW9kZS4KCShpbnN0cnVtZW50X2xvb3BfYmN0KTogTGlrZXdpc2UuICBEbyBub3QgZGVsZXRlIGl0ZXJhdGlvbiBjb3VudAoJY29uZGl0aW9uIGNvZGUgZ2VuZXJhdGlvbiBpbnNuLiAgSW5pdGlhbGl6ZSBpdGVyYXRpb24gY291bnQgYmVmb3JlCglsb29wIHN0YXJ0LgoJKiBydGwuaCAobG9vcF9vcHRpbWl6ZSk6IFVwZGF0ZSBwcm90b3R5cGUuCgoJKiBnaW5jbHVkZS92YS1wcGMuaCAodmFfYXJnKTogbG9uZ2xvbmcgdHlwZXMgaW4gb3ZlcmZsb3cgYXJlYSBhcmUKCW5vdCBkb3VibGV3b3JkIGFsaWduZWQuCgoJKiByczYwMDAuYyAob3B0aW1pemF0aW9uX29wdGlvbnMpOiBOZXcgZnVuY3Rpb24uCgkoc2Vjb25kYXJ5X3JlbG9hZF9jbGFzcyk6IE9ubHkgY2FsbCB0cnVlX3JlZ251bSBmb3IgUFNFVURPX1JFR3MuCgkqIHJzNjAwMC5oIChPUFRJTUlaQVRJT05fT1BUSU9OUyk6IERlZmluZS4KCShSRUdfQUxMT0NfT1JERVIpOiBBbGxvY2F0ZSBoaWdoZXN0IG51bWJlcmVkIGNvbmRpdGlvbiByZWdzaXRlcnMKCWZpcnN0OyBjcjEgY2FuIGJlIHVzZWQgZm9yIEZQIHJlY29yZCBjb25kaXRpb24gaW5zbnMuCgpGcmkgU2VwIDE4IDA5OjQ0OjU1IDE5OTggIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQGN5Z251cy5jb20+CgoJKiBjb25maWcvbTMyci9tMzJyLmggKG0zMnJfYmxvY2tfaW1tZWRpYXRlX29wZXJhbmQpOiBBZGQgdG8KCVBSRURJQ0FURV9DT0RFUy4KCgkqIGNvbmZpZy9tMzJyL20zMnIubWQ6IEFkZCAibW92c3Ryc2kiIGFuZCAibW92c3Ryc2lfaW50ZXJuYWwiCglwYXR0ZXJucy4KCgkqIGNvbmZpZy9tMzJyL20zMnIuYyAobTMycl9wcmludF9vcGVyYW5kKTogQWRkICdzJyBhbmQgJ3AnCglvcGVyYXRvcnMuCgkoYmxvY2tfbW92ZV9jYWxsKTogTmV3IGZ1bmN0aW9uOiBDYWxsIGEgbGlicmFyeSByb3V0aW5lIHRvIGNvcHkgYQoJYmxvY2sgb2YgbWVtb3J5LgoJKG0zMnJfZXhwYW5kX2Jsb2NrX21vdmUpOiBOZXcgZnVuY3Rpb246IEV4cGFuZCBhICJtb3ZzdHJzaSIKCXBhdHRlcm4gaW50byBhIHNlcXVlbmNlIG9mIGluc25zLgoJKG0zMnJfb3V0cHV0X2Jsb2NrX21vdmUpOiBOZXcgZnVuY3Rpb246IEV4cGFuZCBhCgkibW92c3Ryc2lfaW50ZXJuYWwiIHBhdHRlcm4gaW50byBhIHNlcXVlbmNlIG9mIGFzc2VtYmxlciBvcGNvZGVzLgoJKG0zMnJfYmxvY2tfaW1tZWRpYXRlX29wZXJhbmQpOiBOZXcgZnVuY3Rpb246IFJldHVybiB0cnVlIGlmIHRoZQoJUlRMIGlzIGFuIGludGVnZXIgY29uc3RhbnQsIGxlc3MgdGhhbiBvciBlcXVhbCB0byBNQVhfTU9WRV9CWVRFUy4KClRodSBTZXAgMTcgMTY6NDI6MTYgMTk5OCAgQW5kcmV3IE1hY0xlb2QgIDxhbWFjbGVvZEBjeWdudXMuY29tPgoKCSogZXhjZXB0LmMgKHN0YXJ0X2NhdGNoX2hhbmRsZXIpOiBJc3N1ZSAnZmF0YWwnIGluc3RlYWQgb2YgJ2Vycm9yJyBhbmQKCXJlLWFsaWduIHNvbWUgY29kZS4KCSogbGliZ2NjMi5jIChfX2VoX3J0aW1lX21hdGNoKTogZnByaW50ZiBhIHJ1bnRpbWUgZXJyb3IuIFVzZSA8c3RkaW8uaD4uCgpUaHUgU2VwIDE3IDEyOjI0OjMzIDE5OTggIEoib3JuIFJlbm5lY2tlICA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiByZWdtb3ZlLmMgKGNvcHlfc3JjX3RvX2Rlc3QpOiBDaGVjayB0aGF0IG1vZGVzIG1hdGNoLgoKV2VkIFNlcCAxNiAyMjoxMDo0MiAxOTk4ICBSb2JlcnQgTGlwZSAgPHJvYmVydGxAZGdpaS5jb20+CgoJKiBjb25maWcvaTM4Ni9zY281LmggKFNVUFBPUlRTX1dFQUspOiBUcnVlIG9ubHkgaWYgdGFyZ2V0aW5nIEVMRi4KCldlZCBTZXAgMTYgMTU6MjQ6NTQgMTk5OCAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGkzODYuaCAoUFJFRkVSUkVEX1JFTE9BRF9DTEFTUyk6IFJlc3BlY3QgYW4gZXhpc3RpbmcgY2xhc3MKCW5hcnJvd2VyIHRoYW4gRkxPQVRfUkVHUy4KCldlZCBTZXAgMTYgMTc6NTE6MDAgMTk5OCAgQWxleGFuZHJlIE9saXZhICA8b2xpdmFAZGNjLnVuaWNhbXAuYnI+CgoJKiBjcHBsaWIuYzogUmVtb3ZlZCBPTERfR1BMVVNQTFVTX0lOQ0xVREVfRElSLgoJKiBjY2NwLmM6IExpa2V3aXNlLgoJKiBNYWtlZmlsZS5pbiAob2xkX2d4eF9pbmNsdWRlX2Rpcik6IFJlbW92ZWQuCgpXZWQgU2VwIDE2IDEyOjI5OjIyIDE5OTggIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQGN5Z251cy5jb20+CgoJKiBjb25maWcvc2gvc2guaDogVXBkYXRlIGRlZmluaXRpb24gb2YgSEFORExFX1BSQUdNQSB0byBtYXRjaAoJbmV3IHNwZWNpZmljYXRpb24uCgoJKiBjb25maWcvc2gvc2guYyAoaGFuZGxlX3ByYWdtYSk6IFJlbmFtZSB0byBzaF9oYW5kbGVfcHJhZ21hKCkuCgkoc2hfaGFuZGxlX3ByYWdtYSk6IENoYW5nZSBmdW5jdGlvbiBhcmd1bWVudHMgdG8gbWF0Y2ggbmV3CglzcGVjaWZpY2F0aW9uIGZvciBIQU5ETEVfUFJBR01BLgoKV2VkIFNlcCAxNiAxMjo0MzoxOSAxOTk4ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBnZW4tcHJvdG9zLmMgKHBhcnNlX2ZuX3Byb3RvKTogQ2FzdCBhcmd1bWVudCBvZiBJU0FMTlVNIHRvCglgdW5zaWduZWQgY2hhcicuCgkobWFpbik6IE1hcmsgcGFyYW1ldGVyIGBhcmdjJyB3aXRoIEFUVFJJQlVURV9VTlVTRUQuCglXaGVuIGdlbmVyYXRpbmcgb3V0cHV0LCBpbml0aWFsaXplIG1pc3Npbmcgc3RydWN0IG1lbWJlciB0byB6ZXJvLgoKV2VkIFNlcCAxNiAxNDo0Nzo0MyAxOTk4ICBKIm9ybiBSZW5uZWNrZSAgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogcmVnbW92ZS5jIChjb3B5X3NyY190b19kZXN0KTogRG9uJ3QgY29weSBpZiB0aGF0IHJlcXVpcmVzCgkoYSkgbmV3IHJlZ2lzdGVyKHMpLgoKV2VkIFNlcCAxNiAwMToyOToxMiAxOTk4ICBCZXJuZCBTY2htaWR0ICA8Y3J1eEBwb29sLmluZm9ybWF0aWsucnd0aC1hYWNoZW4uZGU+CgoJKiBnbG9iYWwuYyAocmVnX2FsbG9jbm8pOiBOb3cgc3RhdGljLgoJKiByZWxvYWQxLmMgKHJlZ19hbGxvY25vKTogRGVsZXRlIGRlY2xhcmF0aW9uLgoJKG9yZGVyX3JlZ3NfZm9yX3JlbG9hZCk6IFRha2Ugbm8gYXJndW1lbnRzLiAgRG9uJ3QgdHJlYXQgcmVncwoJYWxsb2NhdGVkIGJ5IGdsb2JhbCBkaWZmZXJlbnRseSB0aGFuIHRob3NlIGFsbG9jYXRlZCBieSBsb2NhbC1hbGxvYy4KCldlZCBTZXAgMTYgMDE6MDk6MDEgMTk5OCAgS2FtaWwgSXNrcmEgIDxpc2tyYUBzdHVkZW50LnVjaS5hZ2guZWR1LnBsPgoKCSogbTY4ay9tNjhrLmMgKG91dHB1dF9mdW5jdGlvbl9wcm9sb2d1ZSk6IFJldmVyc2UgTk9fQUREU1VCX1EKCWNvbmRpdGlvbiwgZml4IGZvcm1hdCBzdHJpbmdzLgoJKG91dHB1dF9mdW5jdGlvbl9lcGlsb2d1ZSk6IExpa2V3aXNlLgoKCSogbTY4ay9tNjhrLmM6IERvbid0IGluY2x1ZGUgPHN0ZGxpYi5oPiBkaXJlY3RseS4KCldlZCBTZXAgMTYgMDA6MzA6NTYgMTk5OCAgR2VvZmYgS2VhdGluZyAgPGdlb2Zma0BvemVtYWlsLmNvbS5hdT4KCgkqIGdjc2UuYzogTmV3IGRlZmluaXRpb24gTkVWRVJfU0VUIGZvciByZWdfZmlyc3Rfc2V0LCByZWdfbGFzdF9zZXQsCgltZW1fZmlyc3Rfc2V0LCBtZW1fbGFzdF9zZXQ7IGJlY2F1c2UgMCBjYW4gYmUgYSBDVUlELgoJKG9wcnNfdW5jaGFuZ2VkX3ApOiBVc2UgbmV3IGRlZmluaXRpb24uCgkocmVjb3JkX2xhc3RfcmVnX3NldF9pbmZvKTogTGlrZXdpc2UuCgkocmVjb3JkX2xhc3RfbWVtX3NldF9pbmZvKTogTGlrZXdpc2UuCgkoY29tcHV0ZV9oYXNoX3RhYmxlKTogTGlrZXdpc2UuCgpUdWUgU2VwIDE1IDIyOjU5OjUyIDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHJzNjAwMC5jIChvdXRwdXRfZXBpbG9ndWUpOiBIYW5kbGUgQ2hpbGwuCgoJKiBtbjEwMjAwLmggKEFTTV9PVVRQVVRfRFdBUkYyX0FERFJfQ09OU1QpOiBEZWZpbmUuCgkqIG1uMTAzMDAuaCAoQVNNX09VVFBVVF9EV0FSRjJfQUREUl9DT05TVCk6IERlZmluZS4KCgkqIGNvbWJpbmUuYyAobWFrZV9leHRyYWN0aW9uKTogSWYgbm8gbW9kZSBpcyBzcGVjaWZpZWQgZm9yCglhbiBvcGVyYW5kIG9mIGluc3YsIGV4dHYsIG9yIGV4dHp2LCBkZWZhdWx0IGl0IHRvIHdvcmRfbW9kZS4KCShzaW1wbGlmeV9jb21wYXJpc29uKTogU2ltaWxhcmx5LgoJKiBleHBtZWQuYyAoc3RvcmVfYml0X2ZpZWxkKTogU2ltaWxhcmx5LgoJKGV4dHJhY3RfYml0X2ZpZWxkKTogU2ltaWxhcmx5LgoJKiBmdW5jdGlvbi5jIChmaXh1cF92YXJfcmVnc18xKTogU2ltaWxhcmx5LgoJKiByZWNvZy5jICh2YWxpZGF0ZV9yZXBsYWNlX3J0eF8xKTogU2ltaWxhcmx5LgoJKiBtaXBzLm1kIChleHR2LCBleHR6diwgaW5zdiBleHBhbmRlcnMpOiBEZWZhdWx0IG1vZGVzIGZvciBtb3N0CglvcGVyYW5kcy4gIEhhbmRsZSBUQVJHRVRfNjRCSVQuCgkobW92ZGlfdWxkLCBtb3ZkaV91c2QpOiBOZXcgcGF0dGVybnMuCgoJKiBwYS5jIChlbWl0X21vdmVfc2VxdWVuY2UpOiBEbyBub3QgcmVwbGFjZSBhIHBzZXVkbyB3aXRoIGl0cwoJZXF1aXZhbGVudCBtZW1vcnkgbG9jYXRpb24gdW5sZXNzIHdlIGhhdmUgYmVlbiBwcm92aWRlZCBhIHNjcmF0Y2gKCXJlZ2lzdGVyLiAgU2ltaWxhcmx5IGRvIG5vdCBjYWxsIGZpbmRfcmVwbGFjZW1lbnQgdW5sZXNzIGEKCXNjcmF0Y2ggcmVnaXN0ZXIgaGFzIGJlZW4gcHJvdmlkZWQuCgpUdWUgU2VwIDE1IDE5OjIzOjAxIDE5OTggIEJlcm5kIFNjaG1pZHQgIDxjcnV4QHBvb2wuaW5mb3JtYXRpay5yd3RoLWFhY2hlbi5kZT4KCgkqIGkzODYuaCAoUFJFRkVSUkVEX1JFTE9BRF9DTEFTUyk6IEZvciBzdGFuZGFyZCAzODcgY29uc3RhbnRzLAoJcmV0dXJuIEZMT0FUX1JFR1MuCgpUdWUgU2VwIDE1IDE5OjA5OjA2IDE5OTggIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiB0cmVlLmggKEJVSUxUX0lOX0NBTExFUl9SRVRVUk5fQUREUkVTUyk6IFVudXNlZC4gIEtpbGwuCgkoQlVJTFRfSU5fRlAsIEJVSUxUX0lOX1NQLCBCVUlMVF9JTl9TRVRfUkVUVVJOX0FERFJfUkVHKTogS2lsbC4KCShCVUlMVF9JTl9FSF9TVFVCX09MRCwgQlVJTFRfSU5fRUhfU1RVQiwgQlVJTFRfSU5fU0VUX0VIX1JFR1MpOiBLaWxsLgoJKEJVSUxUX0lOX0VIX1JFVFVSTiwgQlVJTFRfSU5fRFdBUkZfQ0ZBKTogTmV3LgoJKiBjLWRlY2wuYyAoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBVcGRhdGUgYWNjb3JkaW5nbHkuCgkqIGV4cHIuYyAoZXhwYW5kX2J1aWx0aW4pOiBMaWtld2lzZS4KCgkqIHJ0bC5oIChnbG9iYWxfcnRsKTogQWRkIGNmYSBlbnRyeS4KCSh2aXJ0dWFsX2NmYV9ydHgsIFZJUlRVQUxfQ0ZBX1JFR05VTSk6IE5ldy4KCShMQVNUX1ZJUlRVQUxfUkVHSVNURVIpOiBVcGRhdGUuCgkqIGVtaXQtcnRsLmMgKGdsb2JhbF9ydGwpOiBBZGQgY2ZhIGVudHJ5LgoJKGluaXRfZW1pdCk6IEluaXRpYWxpemUgaXQuCgkqIGZ1bmN0aW9uLmMgKGNmYV9vZmZzZXQpOiBOZXcuCgkoaW5zdGFudGlhdGVfdmlydHVhbF9yZWdzKTogSW5pdGlhbGl6ZSBpdC4KCShpbnN0YW50aWF0ZV92aXJ0dWFsX3JlZ3NfMSk6IEluc3RhbnRpYXRlIHZpcnR1YWxfY2ZhX3J0eC4KCShleHBhbmRfZnVuY3Rpb25fZW5kKTogQ2FsbCBleHBhbmRfZWhfcmV0dXJuLgoJKiB0bS50ZXhpIChBUkdfUE9JTlRFUl9DRkFfT0ZGU0VUKTogTmV3LgoKCSogZXhjZXB0LmMgKGN1cnJlbnRfZnVuY3Rpb25fZWhfc3R1Yl9sYWJlbCk6IEtpbGwuCgkoY3VycmVudF9mdW5jdGlvbl9laF9vbGRfc3R1Yl9sYWJlbCk6IExpa3dpc2U7IHVwZGF0ZSBhbGwgcmVmZXJlbmNlcy4KCShleHBhbmRfYnVpbHRpbl9zZXRfcmV0dXJuX2FkZHJfcmVnKTogS2lsbC4KCShleHBhbmRfYnVpbHRpbl9laF9zdHViX29sZCwgZXhwYW5kX2J1aWx0aW5fZWhfc3R1Yik6IEtpbGwuCgkoZXhwYW5kX2J1aWx0aW5fc2V0X2VoX3JlZ3MpOiBLaWxsLgoJKGVoX3JlZ3MpOiBQcm9kdWNlIGEgdGhpcmQgcmVnIGZvciB0aGUgYWN0dWFsIGhhbmRsZXIgYWRkcmVzcy4KCShlaF9yZXR1cm5fY29udGV4dCwgZWhfcmV0dXJuX3N0YWNrX2FkanVzdCk6IE5ldy4KCShlaF9yZXR1cm5faGFuZGxlciwgZWhfcmV0dXJuX3N0dWJfbGFiZWwpOiBOZXcuCgkoaW5pdF9laF9mb3JfZnVuY3Rpb24pOiBJbml0aWFsaXplIHRoZW0uCgkoZXhwYW5kX2J1aWx0aW5fZWhfcmV0dXJuLCBleHBhbmRfZWhfcmV0dXJuKTogTmV3LgoJKiBleGNlcHQuaDogVXBkYXRlIHByb3RvdHlwZXMuCgkqIGZsb3cuYyAoZmluZF9iYXNpY19ibG9ja3NfMSk6IFVwZGF0ZSByZWZlcmVuY2VzIHRvIHRoZSBzdHViIGxhYmVsLgoJKiBmdW5jdGlvbi5oIChzdHJ1Y3QgZnVuY3Rpb24pOiBLaWxsIHN0dWIgbGFiZWwgZWxlbWVudHMuCgoJKiBsaWJnY2MyLmMgKGluX3JlZ193aW5kb3cpOiBGb3IgUkVHX1NBVkVEX1JFRywgY2hlY2sgdGhhdCB0aGUKCXJlZ2lzdGVyIG51bWJlciBpcyBvbmUgdGhhdCB3b3VsZCBiZSBpbiB0aGUgcHJldmlvdXMgd2luZG93LgoJUHJvdmlkZSBhIGR1bW15IGRlZmluaXRpb24gZm9yIG5vbi13aW5kb3dlZCB0YXJnZXRzLgoJKGdldF9yZWdfYWRkcik6IE5ldyBmdW5jdGlvbi4KCShnZXRfcmVnLCBwdXRfcmVnLCBjb3B5X3JlZyk6IFVzZSBpdC4KCShfX3Rocm93KTogUmVseSBvbiBpbl9yZWdfd2luZG93LCBub3QgSU5DT01JTkdfUkVHTk8uICBLaWxsIHN0dWIKCWdlbmVyYXRpbmcgY29kZSBhbmQgdXNlIF9fYnVpbHRpbl9laF9yZXR1cm4uICBVc2UgX19idWlsdGluX2R3YXJmX2NmYS4KCgkqIGFscGhhLmMgKGFscGhhX2VoX2VwaWxvZ3VlX3NwX29mcyk6IE5ldy4KCShhbHBoYV9pbml0X2V4cGFuZGVycyk6IEluaXRpYWxpemUgaXQuCgkoYWxwaGFfZXhwYW5kX2VwaWxvZ3VlKTogVXNlIGl0LgoJKiBhbHBoYS5oOiBEZWNsYXJlIGl0LgoJKiBhbHBoYS5tZCAoZWhfZXBpbG9ndWUpOiBOZXcuCgoJKiBtNjhoLmggKEFSR19QT0lOVEVSX0NGQV9PRkZTRVQpOiBOZXcuCgkqIHNwYXJjLmggKEFSR19QT0lOVEVSX0NGQV9PRkZTRVQpOiBOZXcuCgpUdWUgU2VwIDE1IDE5OjMxOjU4IDE5OTggIE1pY2hhZWwgTWVpc3NuZXIgIDxtZWlzc25lckBjeWdudXMuY29tPgoKCSogaTk2MC5oIChDT05TVF9DT1NUUyk6IEZpeCB0aGlua28uICBUZXN0IGZsYWcsIG5vdCB0aGUgY29uc3RhbnQKCWZsYWcgYml0IG1hc2suCgpUdWUgU2VwIDE1IDE0OjEwOjU0IDE5OTggIEFuZHJldyBNYWNMZW9kICA8YW1hY2xlb2RAY3lnbnVzLmNvbT4KCgkqIGV4Y2VwdC5oIChzdHJ1Y3QgZWhfZW50cnkpOiBBZGQgZmFsc2VfbGFiZWwgZmllbGQuCgkoZW5kX2NhdGNoX2hhbmRsZXIpOiBBZGQgcHJvdG90eXBlLgoJKiBleGNlcHQuYyAocHVzaF9laF9lbnRyeSk6IFNldCBmYWxzZV9sYWJlbCBmaWVsZCB0byBOVUxMX1JUWC4KCShzdGFydF9jYXRjaF9oYW5kbGVyKTogV2hlbiB1c2luZyBvbGQgc3R5bGUgZXhjZXB0aW9ucywgaXNzdWUKCXJ1bnRpbWUgdHlwZW1hdGNoIGNvZGUgYmVmb3JlIGNvbnRpbnVpbmcgd2l0aCB0aGUgaGFuZGxlci4KCShlbmRfY2F0Y2hfaGFuZGxlcik6IE5ldyBmdW5jdGlvbiwgZ2VuZXJhdGVzIGxhYmVsIGFmdGVyIGhhbmRsZXIKCWlmIG5lZWRlZCBieSBvbGRlciBzdHlsZSBleGNlcHRpb25zLgoJKGV4cGFuZF9zdGFydF9hbGxfY2F0Y2gpOiBObyBuZWVkIHRvIGNoZWNrIGZvciBuZXcgc3R5bGUgZXhjZXB0aW9ucy4KCShvdXRwdXRfZXhjZXB0aW9uX3RhYmxlX2VudHJ5KTogT25seSBvdXRwdXQgdGhlIGZpcnN0IGhhbmRsZXIgbGFiZWwKCWZvciBvbGQgc3R5bGUgZXhjZXB0aW9ucy4KCSogbGliZ2NjMi5jIChfX2VoX3J0aW1lX21hdGNoKTogTmV3IHJvdXRpbmUgdG8gbHVtcCBydW50aW1lIG1hdGNoaW5nCgltZWNoYW5pc20gaW50byBvbmUgZnVuY3Rpb24sIGlmIGEgcnVudGltZSBtYXRjaGVyIGlzIHByb3ZpZGVkLgoKVHVlIFNlcCAxNSAxMzo1Mzo1OSAxOTk4ICBBbmRyZXcgTWFjTGVvZCAgPGFtYWNsZW9kQGN5Z251cy5jb20+CgoJKiBjb25maWcvaTk2MC9pOTYwLmggKFNMT1dfQllURV9BQ0NFU1MpOiBDaGFuZ2UgZGVmaW5pdGlvbiB0byAxLgoKVHVlIFNlcCAxNSAwOTo1OTowMSAxOTk4ICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogaW50ZWdyYXRlLmMgKGNvcHlfZGVjbF9saXN0KTogRml4IHR5cG8uCgpUdWUgU2VwIDE1IDA0OjE4OjUyIDE5OTggIERhdmlkIFMuIE1pbGxlciAgPGRhdmVtQHBpZXJkb2wuY29iYWx0bWljcm8uY29tPgoKCSogY29uZmlnL3NwYXJjL3NwYXJjLm1kIChtb3ZkZl9jb25zdF9pbnRyZWdfc3AzMik6IEZpeCBsZW5ndGgKCWF0dHJpYnV0ZS4KCk1vbiBTZXAgMTQgMTQ6MDI6NTMgMTk5OCAgSmVmZiBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHZlcnNpb24uYzogQnVtcCBmb3Igc25hcHNob3QuCgpNb24gU2VwIDE0IDEwOjMzOjU2IDE5OTggIEplZmYgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiB2ZXJzaW9uLmM6IEJ1bXAgZm9yIHNuYXBzaG90LgoKTW9uIFNlcCAxNCAwOTo1MTowNSAxOTk4ICBKZWZmIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogdmVyc2lvbi5jOiBCdW1wIGZvciBzbmFwc2hvdC4KClN1biBTZXAgMTMgMjI6MTA6MTggMTk5OCAgRGF2aWQgUy4gTWlsbGVyICA8ZGF2ZW1AcGllcmRvbC5jb2JhbHRtaWNyby5jb20+CgoJKiBpbnZva2UudGV4aSAoQyBEaWFsZWN0IE9wdGlvbnMpOiBQdXQgYmFjayBtaXNzaW5nIEBlbmQgaXRlbWl6ZS4KCk1vbiBTZXAgMTQgMDI6MzM6NDYgMTk5OCAgQWxleGFuZHJlIE9saXZhICA8b2xpdmFAZGNjLnVuaWNhbXAuYnI+CgoJKiBjb25maWd1cmUuaW46IFJlbW92ZSB1c2FnZSBvZiBgIScgdG8gbmVnYXRlIHRoZSByZXN1bHQgb2YgYQoJY29tbWFuZDsgc29tZSBjb21tb24gc2hlbGxzIGRvIG5vdCBzdXBwb3J0IGl0LgoKU3VuIFNlcCAxMyAxOToxNzozNSAxOTk4ICBEYXZpZCBTLiBNaWxsZXIgIDxkYXZlbUBwaWVyZG9sLmNvYmFsdG1pY3JvLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbjogSW4gc3BhcmM5LXNvbDIgY29uZmlnLCB1c2UgJ2lmIHRlc3QnIG5vdAoJYnJhY2tldHMuCgkqIGNvbmZpZ3VyZTogUmVidWlsdC4KCgkqIGNvbmZpZy9zcGFyYy9zb2wyLXNsZC02NC5oIChTUEFSQ19ERUZBVUxUX0NNT0RFTCk6IENoYW5nZSB0bwoJQ01fTUVEQU5ZLgoJKENQUF9DUFVfU1BFQyk6IERvIG5vdCBkZWZpbmUgX0xQNjQsIGhlYWRlciBmaWxlcyBkbyB0aGlzLgoJKENQUF9DUFVfREVGQVVMVF9TUEVDKTogTGlrZXdpc2UuCgkqIGNvbmZpZy9zcGFyYy9zb2wyLmggKElOSVRfU1VCVEFSR0VUX09QVEFCUyk6IEdldCB0aGUgbmFtZXMgcmlnaHQKCWZvciBhcmNoNjQgbGliZnVuY3MuCgoJKiBjb25maWcvc3BhcmMvc3BhcmMubWQgKGdvdG9faGFuZGxlcl9hbmRfcmVzdG9yZSk6IEFsbG93IGFueSBtb2RlCglmb3Igb3BlcmFuZCB6ZXJvLgoKU3VuIFNlcCAxMyAwOToxMTo1OSAxOTk4ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBhY2NvbmZpZy5oIChORUVEX0RFQ0xBUkFUSU9OX1NUUlNJR05BTCk6IFByb3ZpZGUgYSBzdHViLgoKCSogY29sbGVjdDIuYzogRG9uJ3QgZGVjbGFyZSBgc3lzX3NpZ2xpc3QnIGhlcmUuCgkobXlfc3Ryc2lnbmFsKTogUHJvdG90eXBlIGFuZCBkZWZpbmUgbmV3IGZ1bmN0aW9uLiAgVXNlIGl0IGluCglwbGFjZSBvZiBgc3lzX3NpZ2xpc3QnIGhhY2tzLgoKCSogbWlwc190ZmlsZS5jOiBMaWtld2lzZS4KCgkqIGNvbmZpZ3VyZS5pbiAoQUNfQ0hFQ0tfRlVOQ1MpOiBDaGVjayBmb3Igc3Ryc2lnbmFsLgoJKEdDQ19ORUVEX0RFQ0xBUkFUSU9OUyk6IExpa2V3aXNlLgoKCSogc3lzdGVtLmggKHN0cnNpZ25hbCk6IFByb3RvdHlwZSBpdCwgaWYgbmVjZXNzYXJ5LgoJKHN5c19zaWdsaXN0KTogRGVjbGFyZSBpdCwgaWYgbmVjZXNzYXJ5LgoKU3VuIFNlcCAxMyAwNDozNzoyOCAxOTk4ICBEYXZpZCBTLiBNaWxsZXIgIDxkYXZlbUBwaWVyZG9sLmNvYmFsdG1pY3JvLmNvbT4KCgkqIGxvb3AuYyAobW92ZV9tb3ZhYmxlcyk6IFdoaWxlIHJlbW92aW5nIGluc24gc2VxdWVuY2VzLCBwcmVzZXJ2ZQoJdGhlIG5leHQgcG9pbnRlciBvZiB0aGUgbW9zdCByZWNlbnRseSBkZWxldGVkIGluc24gd2hlbiB3ZSBza2lwCglvdmVyIGEgTk9URS4KClN1biBTZXAgMTMgMDg6MTM6MzkgMTk5OCAgQmVuIEVsbGlzdG9uICA8YmplQGN5Z251cy5jb20+CgoJKiBvYmpjL2NvbmZpZy1sYW5nLmluOiBEbyBub3Qgb3V0cHV0IHRoZSBuYW1lIG9mIHRoZSBzZWxlY3RlZAoJdGhyZWFkIGZpbGUgd2hlbiBidWlsZGluZyB0aGUgZnJvbnQtZW5kLiAgVGhlIE1ha2VmaWxlIGZvciB0aGUKCXJ1bnRpbWUgbGlicmFyeSB3aWxsIGRvIHRoaXMuCgoJKiBvYmpjL01ha2UtbGFuZy5pbjogRG8gbm90IGJ1aWxkIHRoZSBydW50aW1lIGxpYnJhcnkgb3IgaW5zdGFsbAoJdGhlIE9iamVjdGl2ZS1DIGhlYWRlciBmaWxlcy4gIFRoZSBNYWtlZmlsZSBmb3IgdGhlIHJ1bnRpbWUKCWxpYnJhcnkgd2lsbCBkbyB0aGlzLgoKCSogb2JqYy9NYWtlZmlsZS5pbiAoYWxsLmluZGlyZWN0KTogT25seSBidWlsZCB0aGUgZnJvbnQtZW5kLgoJKGNvbXBpbGVyKTogUmVuYW1lIHRvIGBmcm9udGVuZCcuCgkob2JqLXJ1bnRpbWUpOiBSZW1vdmUgdGFyZ2V0LgoJKGNvcHktaGVhZGVycyk6IExpa2V3aXNlLgoJKGNsZWFuKTogTm8gbmVlZCB0byByZW1vdmUgYGxpYm9iamMuYScgYW55IGxvbmdlci4KClNhdCBTZXAgMTIgMTE6Mzc6MTkgMTk5OCAgTWljaGFlbCBNZWlzc25lciAgPG1laXNzbmVyQGN5Z251cy5jb20+CgoJKiByczYwMDAuaCAoe0FTTSxDUFB9X0NQVV9TUEVDKTogQWRkIHN1cHBvcnQgZm9yIGFsbCBtYWNoaW5lcwoJc3VwcG9ydGVkIHdpdGggLW1jcHU9eHh4LgoKRnJpIFNlcCAxMSAyMzo1NTo1NCAxOTk4ICBEYXZpZCBTLiBNaWxsZXIgIDxkYXZlbUBwaWVyZG9sLmNvYmFsdG1pY3JvLmNvbT4KCgkqIGZsb3cuYyAobWFya19zZXRfMSk6IFJlY29nbml6ZSBtdWx0aS1yZWdpc3RlciBzdHJ1Y3R1cmUgcmV0dXJuCgl2YWx1ZXMgaW4gQ0FMTCBpbnNucy4KCShtYXJrX3VzZWRfcmVncyk6IExpa2V3aXNlLgoJKGNvdW50X3JlZ19zZXRzXzEpOiBMaWtld2lzZS4KCShjb3VudF9yZWdfcmVmZXJlbmNlcyk6CUxpa2V3aXNlLgoJKiBydGxhbmFsLmMgKG5vdGVfc3RvcmVzKTogTGlrZXdpc2UuCgkocmVnX292ZXJsYXBfbWVudGlvbmVkX3ApOiBMaWtld2lzZS4KCSogaGFpZmEtc2NoZWQuYyAoY2hlY2tfbGl2ZV8xKTogTGlrZXdpc2UuCgkodXBkYXRlX2xpdmVfMSk6IExpa2V3aXNlLgoJKHNjaGVkX2FuYWx5emVfMSk6IExpa2V3aXNlLgoJKHNjaGVkX25vdGVfc2V0KTogTGlrZXdpc2UuCgkoYmlydGhpbmdfaW5zbl9wKTogTGlrZXdpc2UuCgkoYXR0YWNoX2RlYXRocyk6IExpa2V3aXNlLgoKCSogY29uZmlnL3NwYXJjL3NwYXJjLm1kIChtb3ZkZl9jb25zdF9pbnRyZWdfc3A2NCk6IERpc2FibGUuCgpGcmkgU2VwIDExIDIyOjU3OjU1IDE5OTggIEVyaWMgRHVtYXpldCAgPGR1bWF6ZXRAY29zbW9zYmF5LmNvbT4KCgkqIGNvbmZpZy9pMzg2L3NjbzUuaCAoQVNNX1dFQUtFTl9MQUJFTCk6IERlZmluZWQgYXMgaW4gc3ZyNC5oLgoKVGh1IFNlcCAxMCAyMjowMjowNCAxOTk4ICBEYXZpZCBTLiBNaWxsZXIgIDxkYXZlbUBwaWVyZG9sLmNvYmFsdG1pY3JvLmNvbT4KCgkqIGdsaW1pdHMuaCAoX19MT05HX01BWF9fKTogUmVjb2duaXplIF9fc3BhcmN2OSB0b28uCgpUaHUgU2VwIDEwIDIxOjE5OjEwIDE5OTggIEpha3ViIEplbGluZWsgIDxqakBzdW5zaXRlLm1zLm1mZi5jdW5pLmN6PgoKCSogY29uZmlndXJlLmluOiBBZGQgY2hlY2sgZm9yIEdBUyBzdWJzZWN0aW9uIC0xIHN1cHBvcnQuCgkqIGFjY29uZmlnLmggKEhBVkVfR0FTX1NVQlNFQ1RJT05fT1JERVJJTkcpOiBBZGQuCgkqIGNvbmZpZ3VyZSBjb25maWcuaW46IFJlYnVpbHQuCgkqIGNvbmZpZy9zcGFyYy9zcGFyYy5oIChDQVNFX1ZFQ1RPUl9NT0RFKTogRm9yIFY5IGZsYWdfcGljLCB1c2UKCVNJbW9kZSBpcyBzdWJzZWN0aW9uIC0xIHdvcmtzLCBlbHNlIHVzZSBESW1vZGUuCgkoQVNNX09VVFBVVF9BRERSX1ZFQ19TVEFSVCwgQVNNX09VVFBVVF9BRERSX1ZFQ19FTkQpOiBEZWZpbmUgaWYKCXN1YnNlY3Rpb24gLTEgd29ya3MuCgkqIGNvbmZpZy9zcGFyYy9zcGFyYy5jIChzcGFyY19vdXRwdXRfYWRkcl92ZWMsCglzcGFyY19vdXRwdXRfYWRkcl9kaWZmX3ZlYyk6IFVzZSB0aGVtIGlmIGRlZmluZWQuCgpUaHUgU2VwIDEwIDEwOjQ2OjAxIDE5OTggIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiB0cmVlLmggKERFQ0xfT1JJR0lOKTogTmV3IG1hY3JvLgoJKiBpbnRlZ3JhdGUuYyAoY29weV9hbmRfc2V0X2RlY2xfYWJzdHJhY3Rfb3JpZ2luKTogTmV3IGZ1bmN0aW9uLgoJKGNvcHlfZGVjbF9saXN0KTogVXNlIGl0LgoJKGludGVncmF0ZV9wYXJtX2RlY2xzKTogTGlrZXdpc2UuCgkoaW50ZWdyYXRlX2RlY2xfdHJlZSk6IExpa2V3aXNlLgoJKiBkd2FyZjJvdXQuYyAoZGVjbF91bHRpbWF0ZV9vcmlnaW4pOiBTaW1wbGlmeS4KCSogZHdhcmZvdXQuYyAoZGVjbF91bHRpbWF0ZV9vcmlnaW4pOiBMaWtld2lzZS4KCSogYy1kZWNsLmMgKGR1cGxpY2F0ZV9kZWNscyk6IFVzZSBERUNMX09SSUdJTi4KCShwdXNoZGVjbCk6IExpa2V3aXNlLgoKVGh1IFNlcCAxMCAwODowMTozMSAxOTk4ICBBbnRob255IEdyZWVuICA8Z3JlZW5AY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy9yczYwMDAvcnM2MDAwLmMgKG91dHB1dF9lcGlsb2cpOiBBZGQgSmF2YSBzdXBwb3J0LgoKVGh1IFNlcCAxMCAxNDo0ODo1OSAxOTk4ICBNYXJ0aW4gdm9uIEz2d2lzICA8bG9ld2lzQGluZm9ybWF0aWsuaHUtYmVybGluLmRlPgoKCSogaW52b2tlLnRleGkgKEMrKyBEaWFsZWN0IE9wdGlvbnMpOiBEb2N1bWVudCAtZmhvbm9yLXN0ZC4KClRodSBTZXAgMTAgMDE6Mzg6MDUgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogcmVnLXN0YWNrLmMgKHN0cmFpZ2h0ZW5fc3RhY2spOiBEbyBub3RoaW5nIGlmIHRoZSB2aXJ0dWFsIHN0YWNrIGlzCgllbXB0eSBvciBoYXMgYSBzaW5nbGUgZW50cnkuCgoJKiB0b3BsZXYuYyAocmVzdF9vZl9jb21waWxhdGlvbik6IE9wZW4gdXAgdGhlIGR1bXAgZmlsZSBmb3IgcmVnLXN0YWNrCgliZWZvcmUgY2FsbGluZyByZWdfdG9fc3RhY2suCgpUaHUgU2VwIDEwIDAwOjAzOjM0IDE5OTggIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBhbHBoYS5jIChhbHBoYWV2NV9pbnNuX3BpcGUpOiBBYm9ydCBvbiBkZWZhdWx0IGNhc2UuCgkoYWxwaGFldjVfbmV4dF9ncm91cCk6IFN3YWxsb3cgQ0xPQkJFUnMgYW5kIFVTRXMuCgoJKiBjLXRyZWUuaCAod2Fybl9sb25nX2xvbmcpOiBEZWNsYXJlIGl0LgoKV2VkIFNlcCAgOSAyMzozMTozNiAxOTk4ICAoU3RlcGhlbiBMIE1vc2hpZXIpICA8bW9zaGllckB3b3JsZC5zdGQuY29tPgoKCSogZW1pdC1ydGwuYyAoZ2VuX2xvd3BhcnRfY29tbW9uKTogRGlzYWJsZSBvcHRpbWl6YXRpb24gb2YKCWluaXRpYWxpemVkIGZsb2F0LWludCB1bmlvbiBpZiB0aGUgdmFsdWUgaXMgYSBOYU4uCgpXZWQgU2VwICA5IDIzOjAwOjQ4IDE5OTggIE5hdGhhbiBTaWR3ZWxsICA8bmF0aGFuQGFjbS5vcmc+CgoJKiBjLWxleC5jIChyZWFsX3l5bGV4KTogRG9uJ3Qgd2FybiBhYm91dCBsb25nIGxvbmcgY29uc3RhbnRzIGlmCgl3ZSdyZSBhbGxvd2luZyBsb25nIGxvbmcKCldlZCBTZXAgIDkgMjE6NTg6NDEgMTk5OCAgQmVybmQgU2NobWlkdCAgPGNydXhAcG9vbC5pbmZvcm1hdGlrLnJ3dGgtYWFjaGVuLmRlPgoKCSogZXhjZXB0LmggKGN1cnJlbnRfZnVuY3Rpb25fZWhfc3R1Yl9sYWJlbCk6IERlY2xhcmUuCgkoY3VycmVudF9mdW5jdGlvbl9laF9vbGRfc3R1Yl9sYWJlbCk6IERlY2xhcmUuCgkqIGZ1bmN0aW9uLmggKHN0cnVjdCBmdW5jdGlvbik6IE5ldyBtZW1iZXJzIGVoX3N0dWJfbGFiZWwgYW5kCgllaF9vbGRfc3R1Yl9sYWJlbC4KCSogZXhjZXB0LmMgKGN1cnJlbnRfZnVuY3Rpb25fZWhfc3R1Yl9sYWJlbCk6IE5ldyB2YXJpYWJsZS4KCShjdXJyZW50X2Z1bmN0aW9uX2VoX29sZF9zdHViX2xhYmVsKTogTmV3IHZhcmlhYmxlLgoJKGluaXRfZWhfZm9yX2Z1bmN0aW9uKTogQ2xlYXIgdGhlbS4KCShzYXZlX2VoX3N0YXR1cyk6IFNhdmUgdGhlbS4KCShyZXN0b3JlX2VoX3N0YXR1cyk6IFJlc3RvcmUgdGhlbS4KCShleHBhbmRfYnVpbHRpbl9laF9zdHViKTogU2V0IGN1cnJlbnRfZnVuY3Rpb25fZWhfc3R1Yl9sYWJlbC4KCShleHBhbmRfYnVpbHRpbl9laF9zdHViX29sZCk6IFNldCBjdXJyZW50X2Z1bmN0aW9uX2VoX29sZF9zdHViX2xhYmVsLgoJKiBmbG93LmMgKGZpbmRfYmFzaWNfYmxvY2tzXzEpOiBXaGVuIGhhbmRsaW5nIGEgUkVHX0xBQkVMIG5vdGUsIGRvbid0CgltYWtlIGFuIGVkZ2UgZnJvbSB0aGUgYmxvY2sgdGhhdCBjb250YWlucyBpdCB0byB0aGUgYmxvY2sgc3RhcnRpbmcKCXdpdGggdGhlIGxhYmVsIGlmIHRoaXMgbGFiZWwgaXMgb25lIG9mIHRoZSBlaCBzdHViIGxhYmVscy4KCUlmIGVoIHN0dWIgbGFiZWxzIGV4aXN0LCBzaG93IHRoZXkgYXJlIHJlYWNoYWJsZSBmcm9tIHRoZSBsYXN0IGJsb2NrCglpbiB0aGUgZnVuY3Rpb24uCgoJKiByZWxvYWQxLmMgKHJlbG9hZCk6IEJyZWFrIG91dCBzZXZlcmFsIHN1YnJvdXRpbmVzIGFuZCBtYWtlIHNvbWUKCXZhcmlhYmxlcyBnbG9iYWwuCgkoY2FsY3VsYXRlX25lZWRzX2FsbF9pbnNucyk6IE5ldyBmdW5jdGlvbiwgYnJva2VuIG91dCBvZiByZWxvYWQuCgkoY2FsY3VsYXRlX25lZWRzKTogTGlrZXdpc2UuCgkoZmluZF9yZWxvYWRfcmVncyk6IExpa2V3aXNlLgoJKGZpbmRfZ3JvdXApOiBMaWtld2lzZS4KCShmaW5kX3R3b3JlZ19ncm91cCk6IExpa2V3aXNlLgoJKHNvbWV0aGluZ19uZWVkc19yZWxvYWRzKTogTmV3IGdsb2JhbCB2YXJpYWJsZSwgZm9ybWVybHkgaW4gcmVsb2FkLgoJKHNvbWV0aGluZ19uZWVkc19lbGltaW5hdGlvbik6IExpa2V3aXNlLgoJKGNhbGxlcl9zYXZlX3NwaWxsX2NsYXNzKTogTGlrZXdpc2UuCgkoY2FsbGVyX3NhdmVfZ3JvdXBfc2l6ZSk6IExpa2V3aXNlLgoJKG1heF9uZWVkcyk6IExpa2V3aXNlLgoJKGdyb3VwX3NpemUpOiBMaWtld2lzZS4KCShtYXhfZ3JvdXBzKTogTGlrZXdpc2UuCgkobWF4X25vbmdyb3Vwcyk6IExpa2V3aXNlLgoJKGdyb3VwX21vZGUpOiBMaWtld2lzZS4KCShtYXhfbmVlZHNfaW5zbik6IExpa2V3aXNlLgoJKG1heF9ncm91cHNfaW5zbik6IExpa2V3aXNlLgoJKG1heF9ub25ncm91cHNfaW5zbik6IExpa2V3aXNlLgoJKGZhaWx1cmUpOiBMaWtld2lzZS4KCgkqIHByaW50LXJ0bC5jIChwcmludF9ydHgpOiBGb3IgTUVNcywgcHJpbnQgTUVNX0FMSUFTX1NFVC4KCldlZCBTZXAgIDkgMTM6MTQ6NDEgMTk5OCAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGxvb3AuYyAobG9hZF9tZW1zKTogQ29weSBydHggZm9yIG91dHB1dCBtZW0uCgpXZWQgU2VwICA5IDE1OjE2OjU4IDE5OTggIEdhdmluIFJvbWlnLUtvY2ggIDxnYXZpbkBjeWdudXMuY29tPgoKCSogbWlwcy9hYmk2NC5oIChMT05HX01BWF9TUEVDKTogRG9uJ3Qgc2V0IExPTkdfTUFYIGZvcgoJbWlwczEgb3IgbWlwczIgZWl0aGVyLgoKV2VkIFNlcCAgOSAxMjozMTozNSAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBwYS5jIChwYV9yZW9yZyk6IE5ldyBtYXJraW5nIHNjaGVtZSBmb3IganVtcHMgaW5zaWRlIHN3aXRjaAoJdGFibGVzLgoJKHBhX2FkanVzdF9pbnNuX2xlbmd0aCk6IFVwZGF0ZSB0byB3b3JrIHdpdGggbmV3IG1hcmtpbmcgc2NoZW1lCglmb3IganVtcHMgaW5zaWRlIHN3aXRjaCB0YWJsZXMuCgkqIHBhLm1kIChzd2l0Y2hfanVtcCk6IFJlbW92ZSBwYXR0ZXJuLgoJKGp1bXApOiBIYW5kbGUganVtcHMgaW5zaWRlIGp1bXAgdGFibGVzLgoKCSogTWFrZWZpbGUuaW4gKHByb2ZpbGUubyk6IERlcGVuZCBvbiBpbnNuLWNvbmZpZy5oCgpXZWQgU2VwICA5IDA5OjM2OjUxIDE5OTggIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KCgkqIGlyaXM2LmggKERXQVJGMl9VTldJTkRfSU5GTyk6IFVuZGVmLgoKV2VkIFNlcCAgOSAwMTozMjowMSAxOTk4ICBEYXZpZCBTLiBNaWxsZXIgIDxkYXZlbUBwaWVyZG9sLmNvYmFsdG1pY3JvLmNvbT4KCglBZGQgcHJlbGltaW5hcnkgbmF0aXZlIHNwYXJjdjkgU29sYXJpcyBzdXBwb3J0LgoJKiBjb25maWd1cmUuaW46IFJlY29nbml6ZSBzcGFydjktKi1zb2xhcmlzMioKCSogY29uZmlndXJlOiBSZWJ1aWx0LgoJKiBjb25maWcuc3ViOiBSZWNvZ25pemUgc3BhcmN2OSBqdXN0IGxpa2Ugc3BhcmM2NC4KCSogY29uZmlnL3NwYXJjL3NvbDItYzEuYXNtIGNvbmZpZy9zcGFyYy9zb2wyLWNpLmFzbQoJY29uZmlnL3NwYXJjL3NvbDItY24uYXNtOiBNYWNyb2l6ZSBzbyBpdCBjYW4gYmUgc2hhcmVkIGJldHdlZW4KCTMyLWJpdCBhbmQgNjQtYml0IFNvbGFyaXMgc3lzdGVtcy4KCSogY29uZmlnL3NwYXJjL3Qtc29sMjogQXNzZW1ibGUgdGhvc2Ugd2l0aCBjcHAuCgkqIGNvbmZpZy9zcGFyYy9zcGFyYy5oIChUQVJHRVRfQ1BVX3NwYXJjdjkpOiBOZXcgYWxpYXMgZm9yIHY5LgoJKCpURipfTElCQ0FMTCk6IElmIEFSQ0g2NCB1c2UgVjkgbmFtZXMuCgkqIGNvbmZpZy9zcGFyYy97eG0tc3lzdjQtNjQsc29sMi1zbGQtNjR9Lmg6IE5ldwlmaWxlcy4KCldlZCBTZXAgIDkgMDE6MDc6MzAgMTk5OCAgSmFrdWIgSmVsaW5layAgPGpqQHN1bnNpdGUubXMubWZmLmN1bmkuY3o+CgoJKiBjb25maWcvc3BhcmMvc3BhcmMuaCAoVEFSR0VUX0NNX01FRE1JRCk6IEZpeCBkb2N1bWVudGF0aW9uLgoJKENBU0VfVkVDVE9SX01PREUpOiBTZXQgdG8gU0ltb2RlIGV2ZW4gaWYgUFRSNjQsIHdoZW4gTUVETE9XIGFuZAoJbm90IGRvaW5nIHBpYy4KCShBU01fT1VUUFVUX0FERFJfe1ZFQyxESUZGfV9FTFQpOiBDaGVjayBDQVNFX1ZFQ1RPUl9NT0RFIG5vdAoJUG1vZGUuCgkqIGNvbmZpZy9zcGFyYy9zcGFyYy5tZCAodGFibGVqdW1wKTogTGlrZXdpc2UsIGFuZCBzaWduIGV4dGVuZCBvcDAKCXRvIFBtb2RlIGlmIENBU0VfVkVDVE9SX01PREUgaXMgc29tZXRoaW5nIGVsc2UuCgpXZWQgU2VwICA5IDAwOjEwOjMxIDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHByZWZpeC5jICh1cGRhdGVfcGF0aCk6IENvcnJlY3RseSBoYW5kbGUgY2FzZXMgd2hlcmUgUEFUSCBpcwoJYSBzdWJzdHJpbmcgb2YgdGhlIGJ1aWx0aW4gcHJlZml4LCBidXQgc3BlY2lmaWVzIGEgZGlmZmVyZW50CglkaXJlY3RvcnkgbG9jYXRpb24uCgpUdWUgU2VwICA4IDIzOjQ2OjA0IDE5OTggIEhhbnMtUGV0ZXIgTmlsc3NvbiAgPGhwQGF4aXMuc2U+CgoJKiBleHByLmM6IENvcnJlY3RlZCBjb21tZW50IGFib3V0IHdoYXQgTU9WRV9SQVRJTyBkb2VzLgoJKiBjb25maWcvYWxwaGEvYWxwaGEuaDogTGlrZXdpc2UuCgkqIGNvbmZpZy8xNzUwYS8xNzUwYS5oOiBMaWtld2lzZS4KCSogY29uZmlnL2NsaXBwZXIvY2xpcHBlci5oOiBMaWtld2lzZS4KCSogY29uZmlnL2kzODYvaTM4Ni5oOiBMaWtld2lzZS4KClR1ZSBTZXAgIDggMjI6NTY6MTIgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogY29uZmlndXJlLmluIChtNjhrLW5leHQtbmV4dHN0ZXAzKik6IFVzZSBjb2xsZWN0Mi4KCVNpbWlsYXJseSBmb3IgeDg2IE5lWFQgY29uZmlndXJhdGlvbnMuCgkqIGNvbmZpZ3VyZTogUmVidWlsdC4KClR1ZSBTZXAgIDggMDE6Mzg6NTcgMTk5OCAgTmF0aGFuIFNpZHdlbGwgIDxuYXRoYW5AYWNtLm9yZz4KCgkqIGNvbmZpZ3VyZS5pbjogRG9uJ3QgYXNzdW1lIHNyY2RpciBpcyAuLi4vZ2NjLgoJKiBjb25maWd1cmU6IFJlYnVpbHQuCgpTYXQgU2VwICA1IDE2OjM0OjM0IDE5OTggIEpvaG4gV2VobGUgIChqb2huQGZlaXRoLmNvbSkKCgkqIGdsb2JhbC5jOiBVcGRhdGUgY29tbWVudHMuCgkoZ2xvYmFsX2FsbG9jKTogQXNzaWduIGFsbG9jYXRpb24tbnVtYmVycwoJZXZlbiBmb3IgcmVnaXN0ZXJzIGFsbG9jYXRlZCBieSBsb2NhbF9hbGxvYyBpbiBjYXNlCgl0aGV5IGFyZSBsYXRlciBzcGlsbGVkIGFuZCByZXRyeV9nbG9iYWxfYWxsb2MgaXMgY2FsbGVkLgoJKG1hcmtfcmVnX3N0b3JlLCBtYXJrX3JlZ19jbG9iYmVyLAoJbWFya19yZWdfY29uZmxpY3RzLCBtYXJrX3JlZ19kZWF0aCk6IEFsd2F5cyByZWNvcmQgYQoJY29uZmxpY3Qgd2l0aCBhIHBzZXVkbyByZWdpc3RlciBldmVuIGlmIGl0IGhhcyBiZWVuCglhc3NpZ25lZCB0byBhIGhhcmQgcmVnaXN0ZXIuCgkoZHVtcF9jb25mbGljdHMpOiBEb24ndCBsaXN0IHBzZXVkbyByZWdpc3RlcnMgYWxyZWFkeSBhc3NpZ25lZCB0bwoJYSBoYXJkIHJlZ2lzdGVyIGFzIG5lZWRpbmcgdG8gYmUgYWxsb2NhdGVkLCBidXQgZG8gbGlzdCB0aGVpcgoJY29uZmxpY3RzLgoJKiBsb2NhbC1hbGxvYy5jOiBVcGRhdGUgY29tbWVudC4KCk1vbiBTZXAgIDcgMjM6Mzg6MDEgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogY29uZmlndXJlLmluOiBDaGVjayBmb3IgYm9ndXMgR0NDX0VYRUNfUFJFRklYIGFuZCBMSUJSQVJZX1BBVEguCgkqIGNvbmZpZ3VyZTogUmVidWlsdC4KCk1vbiBTZXAgIDcgMjI6NDE6NDYgMTk5OCAgTWljaGFlbCBNZWlzc25lciAgPG1laXNzbmVyQGN5Z251cy5jb20+CgoJKiByczYwMDAuYyAocnM2MDAwX292ZXJyaWRlX29wdGlvbnMpOiBGaXggbmFtZSBmb3IgZWM2MDNlLCB0byBhZGQKCW1pc3NpbmcgJ2MnLgoJKiB0LXBwY2NvbW0gKE1VTFRJTElCX01BVENIRVNfRkxPQVQpOiBBZGQgc3VwcG9ydCBmb3IgLW1jcHU9eHh4Cglmb3IgYWxsIHRhcmdldHMgdGhhdCBzZXQgLW1zb2Z0LWZsb2F0LgoKTW9uIFNlcCAgNyAyMzozMDowNyAxOTk4ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiB0b3BsZXYuYyAocHJpbnRfc3dpdGNoX3ZhbHVlcyk6IE1ha2Ugc3RhdGljIHRvIG1hdGNoIHByb3RvdHlwZS4KCk1vbiBTZXAgIDcgMTk6MTM6NTkgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogY29uZmlndXJlLmluOiBJZiB3ZSBhcmUgdW5hYmxlIHRvIGZpbmQgdGhlICJnbmF0YmluZCIgcHJvZ3JhbSwKCXRoZW4gZG8gbm90IGNvbmZpZ3VyZSB0aGUgYWRhIHN1YmRpci4KCSogY29uZmlndXJlOiBSZWJ1aWx0LgoKU3VuIFNlcCAgNiAxNDowMzo1OCAxOTk4ICBKZWZmIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogdmVyc2lvbi5jOiBCdW1wIGZvciBzbmFwc2hvdC4KClN1biBTZXAgIDYgMTM6Mjg6MDcgMTk5OCAgSmVmZiBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHZlcnNpb24uYzogQnVtcCBmb3Igc25hcHNob3QuCgpTdW4gU2VwICA2IDA4OjU0OjE0IDE5OTggIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIE1ha2VmaWxlLmluICh0b3BsZXYubyk6IERlcGVuZCBvbiAkKEVYUFJfSCkuCgkoaW5zbi1leHRyYWN0Lm8sIGluc24tYXR0cnRhYi5vKTogRGVwZW5kIG9uIHRvcGxldi5oLgoKCSogZ2Fuc2lkZWNsLmg6IERlZmluZSBBVFRSSUJVVEVfTk9SRVRVUk4uCgoJKiBnZW5hdHRydGFiLmM6IEhhdmUgaW5zbi1hdHRydGFiLmMgaW5jbHVkZSB0b3BsZXYuaC4KCgkqIGdlbmV4dHJhY3QuYzogSGF2ZSBpbnNuLWV4dHJhY3QuYyBpbmNsdWRlIHRvcGxldi5oLgoKCSogcnRsLmg6IERvbid0IHByb3RvdHlwZSBgZmF0YWxfaW5zbl9ub3RfZm91bmQnIGFuZCBgZmF0YWxfaW5zbicuCgoJKiB0b3BsZXYuYzogSW5jbHVkZSBleHByLmguCgkocmVhbGx5X3NvcnJ5LCBmYW5jeV9hYm9ydCk6IFJlbW92ZSBwcm90b3R5cGVzLgoJKHNldF90YXJnZXRfc3dpdGNoKTogQWRkIGFyZ3VtZW50IGluIHByb3RvdHlwZS4KCSh2ZmF0YWwpOiBNYXJrIHByb3RvdHlwZSB3aXRoIEFUVFJJQlVURV9OT1JFVFVSTi4KCSh2X3JlYWxseV9zb3JyeSk6IExpa2V3aXNlLgoJKHByaW50X3ZlcnNpb24sIHByaW50X3NpbmdsZV9zd2l0Y2gsIHByaW50X3N3aXRjaF92YWx1ZXMpOiBNYWtlCglzdGF0aWMgYW5kIGFkZCBwcm90b3R5cGUgYXJndW1lbnRzLgoJKGRlY2xfcHJpbnRhYmxlX25hbWUpOiBBZGQgcHJvdG90eXBlIGFyZ3VtZW50cy4KCShsYW5nX2V4cGFuZF9leHByX3QpOiBOZXcgdHlwZWRlZi4KCShsYW5nX2V4cGFuZF9leHByKTogRGVjbGFyZSBhcyBhIGxhbmdfZXhwYW5kX2V4cHJfdC4KCShpbmNvbXBsZXRlX2RlY2xfZmluYWxpemVfaG9vayk6IEFkZCBwcm90b3R5cGUgYXJndW1lbnQuCgkoZGVjbF9uYW1lKTogTWFyayB2YXJpYWJsZSBgdmVyYm9zaXR5JyB3aXRoIEFUVFJJQlVURV9VTlVTRUQuCgkoYm90Y2gpOiBMaWtld2lzZSBmb3IgdmFyaWFibGUgYHMnLgoJKHJlc3Rfb2ZfdHlwZV9jb21waWxhdGlvbik6IE1hcmsgdmFyaWFibGVzIGB0eXBlJyBhbmQgYHRvcGxldicKCXdpdGggQVRUUklCVVRFX1VOVVNFRCBpZiBub25lIG9mIERCWF9ERUJVR0dJTkdfSU5GTywKCVhDT0ZGX0RFQlVHR0lOR19JTkZPIG9yIFNEQl9ERUJVR0dJTkdfSU5GTyBhcmUgZGVmaW5lZC4KCShkaXNwbGF5X2hlbHApOiBNYWtlIHZhcmlhYmxlIGBpJyBhbiBgdW5zaWduZWQgbG9uZycuCgkobWFpbik6IFJlbW92ZSB1bnVzZWQgcGFyYW1ldGVyIGBlbnZwJy4KCUNhc3QgYXNzaWdubWVudCB0byBgbGFuZ19leHBhbmRfZXhwcicgdG8gYSBgbGFuZ19leHBhbmRfZXhwcl90Jy4KCUNhc3QgLTEgd2hlbiBjb21wYXJpbmcgaXQgd2l0aCBhIGBzaXplX3QnLgoKCSogdG9wbGV2LmggKGZhdGFsLCBmYXRhbF9pb19lcnJvciwgcGZhdGFsX3dpdGhfbmFtZSk6IE1hcmsKCXByb3RvdHlwZSB3aXRoIEFUVFJJQlVURV9OT1JFVFVSTi4KCShmYXRhbF9pbnNuX25vdF9mb3VuZCwgZmF0YWxfaW5zbiwgcmVhbGx5X3NvcnJ5LAoJcHVzaF9mbG9hdF9oYW5kbGVyLCBwb3BfZmxvYXRfaGFuZGxlcik6IEFkZCBwcm90b3R5cGVzLgoJKGZhbmN5X2Fib3J0KTogTWFyayBwcm90b3R5cGUgd2l0aCBBVFRSSUJVVEVfTk9SRVRVUk4uCgkoZG9fYWJvcnQsIGJvdGNoKTogQWRkIHByb3RvdHlwZXMuCgpTYXQgU2VwICA2IDEyOjA1OjE4IDE5OTggIEpvaG4gQ2FyciAgPGpmY0BtaXQuZWR1PgoKCSogZmluYWwuYyAoZmluYWwpOiBJZiBhIGxhYmVsIGlzIHJlYWNoZWQgb25seSBmcm9tIGEgc2luZ2xlIGp1bXAsCgljYWxsIE5PVElDRV9VUERBVEVfQ0Mgb24gdGhlIGp1bXAgYW5kIGl0cyBwcmVkZWNlc3NvciBiZWZvcmUKCWVtaXR0aW5nIHRoZSBpbnNuIGFmdGVyIHRoZSBsYWJlbC4KCgkqIGkzODYuaDogQWRkIEFNRCBLNiBzdXBwb3J0LgoJQ2hhbmdlIFRBUkdFVF8qIG1hY3JvcyB0byB1c2UgdGFibGUgbG9va3VwLgoJKElOSVRJQUxJWkVfVFJBTVBPTElORSk6IEltcHJvdmUgdHJhbXBvbGluZSBjb2RlLgoJKEFESlVTVF9DT1NUKTogQ2hhbmdlIGRlZmluaXRpb24gdG8gY2FsbCBmdW5jdGlvbiBpbiBpMzg2LmMuCgkoSVNTVUVfUkFURSk6IERlZmluZSBhcyAyIGZvciBhbnl0aGluZyBuZXdlciB0aGFuIGFuIDgwNDg2LgoJKiBpMzg2LmM6IEFkZCBBTUQgSzYgc3VwcG9ydC4KCUFkZCBjb25zdGFudHMgZm9yIGZlYXR1cmUgdGVzdHMgdXNlZCBieSBUQVJHRVRfKiBtYWNyb3MuCgkoc3BsaXRfZGkpOiBJZiBiZWZvcmUgcmVsb2FkLCBjYWxsIGdlbl9sb3dwYXJ0IGFuZCBnZW5faGlnaHBhcnQuCgkoeDg2X2FkanVzdF9jb3N0KTogTmV3IGZ1bmN0aW9uLgoJKHB1dF9qdW1wX2NvZGUpOiBOZXcgZnVuY3Rpb24uCgkocHJpbnRfb3BlcmFuZCk6IE5ldyBjb2RlcyAnRCcgYW5kICdkJy4KCSogaTM4Ni5tZDogTmV3IGluc24gdHlwZXMuICBOZXcgaW5zbiBhdHRyaWJ1dGUgIm1lbW9yeSIuCglSZWRlZmluZSBzY2hlZHVsaW5nIHBhcmFtZXRlcnMgdG8gdXNlIG5ldyB0eXBlcyBhbmQgYWRkIEFNRCBLNgoJc3VwcG9ydC4gIEV4cGxpY2l0bHkgc2V0IHR5cGUgb2YgbW9zdCBpbnNucy4KCShtb3ZlIGluc25zKTogSzYgcHJlZmVycyBtb3ZsICQwLHJlZyB0byB4b3JsIHJlZyxyZWcuICBQZW50aXVtCglQcm8gYW5kIEs2IHByZWZlciBtb3ZsICQxLHJlZyB0byBpbmNsIHJlZy4KCShhZGRkaTMsIHN1YmRpMyk6IFNldCBjY19zdGF0dXMuCgkoREltb2RlIHNoaWZ0IHBhdHRlcm5zKTogQ2hhbmdlIGxhYmVsIGNvdW50ZXJzIGZyb20gSE9TVF9XSURFX0lOVAoJdG8gaW50OyB4ODYgY2FuJ3QgaGF2ZSBtb3JlIHRoYW4gMl4zMSBESW1vZGUgc2hpZnRzIHBlcglmaWxlLgoJKHNldGNjKTogQ29tYmluZSBhbGwgc2V0Y2MgcGF0dGVybnMuICBBbGxvdyB3cml0aW5nIG1lbW9yeS4KCUNvbWJpbmUgYWxsIGp1bXAgcGF0dGVybnMgdXNpbmcgbWF0Y2hfb3BlcmF0b3IuCgkoKmJ6ZXJvKTogTmFtZSBwYXR0ZXJuLiAgRW1pdCBtdWx0aXBsZSBzdG9zIGluc3RydWN0aW9ucyB3aGVuIHRoYXQKCWlzIGZhc3RlciB0aGFuIHJlcCBzdG9zLgoJKHhvcmRpMywgYW5kZGkzLCBpb3JkaTMpOiBTaW1wbGlmeSBESW1vZGUgbG9naWNhbCBwYXR0ZXJucyBhbmQKCWFkZCBkZWZpbmVfc3BsaXQuCgpTdW4gU2VwICA2IDExOjE3OjIwIDE5OTggIERhdmUgTG92ZSAgPGQubG92ZUBkbC5hYy51az4KCgkqIGNvbmZpZy9tNjhrL3gtbmV4dCAoQk9PVF9MREZMQUdTKTogRGVmaW5lIHN1aXRhYmx5IGZvciBmNzcxCglsaW5raW5nLgoKU2F0IFNlcCAgNSAyMjowNToyNSAxOTk4ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogYWxwaGEuYyAoYWxwaGFfcmFfZXZlcl9raWxsZWQpOiBJbnNwZWN0IHRoZSB0b3Btb3N0IHNlcXVlbmNlLAoJbm90IHdoYXRldmVyIHdlJ3JlIGdlbmVyYXRpbmcgbm93LgoKCSogYWxwaGEuYyAoc2V0X2ZyYW1lX3JlbGF0ZWRfcCwgRlJQKTogTmV3LgoJKGFscGhhX2V4cGFuZF9wcm9sb2d1ZSk6IE1hcmsgZnJhbWUgcmVsYXRlZCBpbnNucy4KCShhbHBoYV9leHBhbmRfZXBpbG9ndWUpOiBMaWtld2lzZSwgYnV0IHdpdGggYSBudWxsIEZSUC4KCSogYWxwaGEuaCAoSU5DT01JTkdfUkVUVVJOX0FERFJfUlRYKTogTmV3LgoJKiBhbHBoYS5tZCAoZXhjZXB0aW9uX3JlY2VpdmVyKTogTmV3LgoJKiBhbHBoYS9jcnRiZWdpbi5hc20gKC5laF9mcmFtZSk6IE5ldyBiZWdpbm5pbmcuCgkoX19kb19mcmFtZV9zZXR1cCwgX19kb19mcmFtZV90YWtlZG93bik6IE5ldy4KCSogYWxwaGEvY3J0ZW5kLmFzbSAoLmVoX2ZyYW1lKTogTmV3IGVuZGluZy4KCSogYWxwaGEvZWxmLmggKERXQVJGMl9ERUJVR0dJTkdfSU5GTyk6IERlZmluZS4KCShBU01fU1BFQyk6IERvbid0IGVtaXQgYm90aCBkd2FyZjIgYW5kIG1kZWJ1Zy4KCShBU01fRklMRV9TVEFSVCk6IERvbid0IGVtaXQgLmZpbGUgZm9yIGR3YXJmMi4KCgkqIHJ0bC5oIChlbnVtIHJlZ19ub3RlKTogQWRkIFJFR19GUkFNRV9SRUxBVEVEX0VYUFIuCgkqIHJ0bC5jIChyZWdfbm90ZV9uYW1lKTogTGlrZXdpc2UuCgkqIHJ0bC50ZXhpIChSRUdfTk9URVMpOiBMaWtld2lzZS4KCSogZHdhcmYyb3V0LmMgKGR3YXJmMm91dF9mcmFtZV9kZWJ1Zyk6IFVzZSBpdC4gIFJlY29nbml6ZSBhIHN0b3JlCgl3aXRob3V0IGFuIG9mZnNldC4KClNhdCBTZXAgIDUgMTQ6NDc6MTcgMTk5OCAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGkzODYuaCAoUFJFRkVSUkVEX1JFTE9BRF9DTEFTUyk6IFN0YW5kYXJkIGZwIGNvbnN0YW50cyBsb2FkIHRvIFRPUy4KCSogaTM4Ni5tZCAobW92c2YsIG1vdmRmLCBtb3Z4Zik6IFZhbGlkYXRlIG1lbW9yeSBhZGRyZXNzIHJldHVybmVkCglmcm9tIGZvcmNlX2NvbnN0X21lbS4gIEtpbGwgdXNlbGVzcyBSRUdfRVFVQUwgc2V0dGluZyBjb2RlLgoKU2F0IFNlcCAgNSAxNDoyMzozMSAxOTk4ICBUb3Jiam9ybiBHcmFubHVuZCAgPHRlZ2VAbWF0ZW1hdGlrLnN1LnNlPgoKCSogbTY4ay5tZCAoemVyb19leHRlbmRzaWRpMik6IEZpeCB0eXBvLgoKU2F0IFNlcCAgNSAxMzo0MDoyNCAxOTk4ICBLcmlzdGVyIFdhbGZyaWRzc29uICA8Y2F0b0BkZi5sdGguc2U+CgoJKiBjb25maWd1cmUuaW46IFJlbW92ZWQgcmVmZXJlbmNlcyB0byB0aGUgcmVtb3ZlZCBmaWxlLgoJKiBjb25maWcveG0tbmV0YnNkLmg6IFVzZSAke2NwdV90eXBlfS94bS1uZXRic2QuaCBmb3IKCWFybSotKi1uZXRic2QqIGFuZCBuczMyay0qLW5ldGJzZCouCgkqIGNvbmZpZy9pMzg2L3htLW5ldGJzZC5oOiBSZW1vdmVkIHVubmVjZXNzYXJ5IGZpbGUuCgkqIGNvbmZpZy9tNjhrL3htLW5ldGJzZC5oOiBMaWtld2lzZS4KCSogY29uZmlnL3NwYXJjL3htLW5ldGJzZC5oOiBMaWtld2lzZS4KCSogY29uZmlnL21pcHMveG0tbmV0YnNkLmg6IExpa2V3aXNlLgoKU2F0IEF1ZyAyOSAxMzozMjo1OCAxOTk4ICBNdW1pdCBLaGFuICA8a2hhbkB4cmF5bGl0aC53aXNjLmVkdT4KCgkqIGkzODYvY3lnd2luMzIuaCAoQklHR0VTVF9BTElHTk1FTlQpOiBEZWZpbmUuCgkoUENDX0JJVEZJRUxEX1RZUEVfTUFUVEVSUyk6IERlZmluZSB0byBiZSAwLgoKCSogaTM4Ni9jeWd3aW4zMi5oIChBU01fT1VUUFVUX1NFQ1RJT05fTkFNRSk6IERvbid0IGNoZWNrIGZvcgoJZm9yIGV4YWN0IHNlY3Rpb24gYXR0cmlidXRpb25zLgoKCSogaTM4Ni9taW5ndzMyLmggKENQUF9QUkVERUZJTkVTKTogQWRkIF9fTVNWQ1JUX18gZm9yIG1zdmMKCXJ1bnRpbWUuCgkqIGkzODYvY3J0ZGxsLmggKENQUF9QUkVERUZJTkVTKTogRGVmaW5lLgoKU2F0IFNlcCAgNSAwMzoyMzowNSAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBtNjhrLm1kICg1MjAwIG1vdnFpKTogRG8gbm90IGFsbG93IGJ5dGUgc2l6ZWQgbWVtb3J5IHJlZmVyZW5jZXMKCXVzaW5nIGFkZHJlc3MgcmVncy4KCSogbTY4ay5jIChvdXRwdXRfbW92ZV9xaW1vZGUpOiBEbyBub3QgdXNlIGJ5dGUgc2l6ZWQgb3BlcmF0aW9ucyBvbgoJYWRkcmVzcyByZWdpc3RlcnMuCgoJKiBNYWtlZmlsZS5pbiAocGV4ZWN1dGUubyk6IFVzZSBwZXhlY3V0ZS5jIGZyb20gbGliaWJlcnR5LiAgUHJvdmlkZQoJZXhwbGljaXQgcnVsZXMgZm9yIGJ1aWxkaW5nLiAgU2ltaWxhcmx5IGZvciBhbGxvY2EsIHZmcHJpbnRmLAoJY2hvb3NlLXRlbXAgYW5kIG1rc3RlbXAsIGdldG9wdCwgZ2V0b3B0MSwgYW5kIG9ic3RhY2suCgkoSU5DTFVERVMpOiBBZGQgJChzcmNkaXIpLy4uL2luY2x1ZGUuCgkqIHBleGVjdXRlLmMsIGFsbG9jYS5jLCB2ZnByaW50Zi5jLCBjaG9vc2UtdGVtcC5jLCBta3N0ZW1wLmM6IERlbGV0ZS4KCSogZ2V0b3B0LmgsIGdldG9wdC5jIGdldG9wdDEuYywgb2JzdGFjay5jLCBvYnN0YWNrLmg6IExpa2V3aXNlLgoKRnJpIFNlcCAgNCAxMTo1Nzo1MCAxOTk4ICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CgoJKiBnY2MuYyAoZG9fc3BlY18xKTogW2Nhc2UgJ28nXSBBY2NvdW50IGZvcgoJbGFuZ19zcGVjaWZpY19leHRyYV9vdXRmaWxlcy4KCShtYWluKTogQ29ycmVjdGx5IGNsZWFyIGFsbCBzbG90cyBpbiBvdXRmaWxlcyBmb3IKCWxhbmdfc3BlY2lmaWNfZXh0cmFfb3V0ZmlsZXMuICBTZXQgaW5wdXRfZmlsZV9udW1iZXIgYmVmb3JlCgljYWxsaW5nIGxhbmdfc3BlY2lmaWNfcHJlX2xpbmsuCgpGcmkgU2VwICA0IDEwOjM3OjA3IDE5OTggIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KCgkqIGxvb3AuYyAobG9hZF9tZW1zKTogRml4IEpVTVBfTEFCRUwgZmllbGQgYWZ0ZXIgZm9yX2VhY2hfcnR4IGNhbGwuCgpGcmkgU2VwICA0IDAyOjAxOjA1IDE5OTggIERhdmlkIFMuIE1pbGxlciAgPGRhdmVtQHBpZXJkb2wuY29iYWx0bWljcm8uY29tPgoKCSogY29uZmlnL3NwYXJjL3NwYXJjLmMgKG91dHB1dF9kb3VibGVfaW50KTogSW4gYWxsIFY5IHN5bWJvbGljCgljYXNlcywgdXNlIHh3b3JkLgoJKHNwYXJjX291dHB1dF9kZWZlcnJlZF9jYXNlX3ZlY3RvcnMpOiBJZiBubyB3b3JrIHRvIGRvLCByZXR1cm4uCglGaXggdGhpbmtvIGluIFNlcHQgMSBjaGFuZ2UuCgoxOTk4LTA5LTAzICBTTCBCYXVyICA8c3RldmVAYWx0YWlyLnhlbWFjcy5vcmc+CgoJKiBNYWtlZmlsZS5pbjogQWRkIHNlbWljb2xvbiBpbiBCSVNPTiBkZWZpbml0aW9uIGZvciBwb3J0YWJpbGl0eS4KClRodSBTZXAgIDMgMTM6MzQ6NDEgMTk5OCAgVG9vbiBNb2VuZSAgPHRvb25AbW9lbmUuaW5kaXYubmx1dWcubmw+CgoJKiBjb25maWcvbmV4dHN0ZXAuYyAoaGFuZGxlX3ByYWdtYSk6IENvcnJlY3QgbmFtZSBvZiB0aGlyZAoJYXJndW1lbnQuCgpUdWUgU2VwICAxIDExOjMwOjMzIDE5OTggIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQGN5Z251cy5jb20+CgoJKiBjb25maWcvbTMyci9tMzJyLm1kOiBDaGFuZ2UgKHJlZzpDQyAxNykgdG8gKHJlZzpTSSAxNykuCgkqIGNvbmZpZy9tMzJyL20zMnIuaDogTWFrZSByZWdpc3RlciAxNyBiZSBmaXhlZC4KCSogY29uZmlnL20zMnIvbTMyci5jOiBVc2UgU0ltb2RlIGZvciBjYyBvcGVyYXRpb25zLgoKVGh1IFNlcCAgMyAxODoxNzozNCAxOTk4ICBCZW5qYW1pbiBLb3NuaWsgIDxia296QGN5Z251cy5jb20+CgoJKiBpbnZva2UudGV4aSAoV2FybmluZyBPcHRpb25zKTogQWRkIC1Xbm9uLXRlbXBsYXRlLWZyaWVuZAoJZG9jdW1lbnRhdGlvbi4KClRodSBTZXAgIDMgMTg6MTY6MTYgMTk5OCAgTWljaGFlbCBNZWlzc25lciAgPG1laXNzbmVyQGN5Z251cy5jb20+CgoJKiByczYwMDAuYyAocnM2MDAwX292ZXJyaWRlX29wdGlvbnMpOiBBZGQgLW1jcHU9ezQwMSxlNjAzZX0uCgpUaHUgU2VwICAzIDE4OjA1OjE2IDE5OTggIERhdmlkIEVkZWxzb2huICA8ZWRlbHNvaG5AZ251Lm9yZz4KCgkqIHJzNjAwMC5tZCAobW92c2YpOiBEaXNhYmxlIGV4cGxpY2l0IHNlY29uZGFyeS1yZWxvYWQtbGlrZQoJZnVuY3Rpb25hbGl0eSBpZiBUQVJHRVRfUE9XRVJQQzY0LgoJKG1vdmRmKTogUmVtb3ZlIFRBUkdFVF9QT1dFUlBDNjQgZXhwbGljaXQgc2Vjb25kYXJ5LXJlbG9hZC1saWtlCglmdW5jdGlvbmFsaXR5LgoKVGh1IFNlcCAgMyAxMTo0MTo0MCAxOTk4ICBSb2JlcnQgTGlwZSAgPHJvYmVydGxAZGdpaS5jb20+CgoJKiBmaXhpbmMuc2NvOiBCb3Jyb3cgY29kZSB0byB3cmFwICdib29sJyB0eXBlZGVmcyBmcm9tIHRpbmZvLmgKCWFuZCB0ZXJtLmggZnJvbSBmaXhpbmMud3JhcC4KClRodSBTZXAgIDMgMDk6NDc6MzEgMTk5OCAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogYWNsb2NhbC5tNCAoR0NDX0hFQURFUl9TVFJJTkcpOiBOZXcgbWFjcm8gdG8gZGV0ZWN0IGlmIGl0IGlzCglzYWZlIHRvIGluY2x1ZGUgYm90aCBzdHJpbmcuaCBhbmQgc3RyaW5ncy5oIHRvZ2V0aGVyLgoJKEdDQ19ORUVEX0RFQ0xBUkFUSU9OKTogVGVzdCBTVFJJTkdfV0lUSF9TVFJJTkdTIHdoZW4gZGVjaWRpbmcKCXdoaWNoIGhlYWRlcnMgdG8gc2VhcmNoIGZvciBmdW5jdGlvbiBkZWNsYXJhdGlvbnMuICBDb250aW51ZSB0bwoJcHJlZmVyIHN0cmluZy5oIG92ZXIgc3RyaW5ncy5oIHdoZW4gYm90aCBhcmUgbm90IGFjY2VwdGFibGUuCgoJKiBhY2NvbmZpZy5oIChTVFJJTkdfV0lUSF9TVFJJTkdTKTogQWRkIHN0dWIuCgoJKiBjb25maWd1cmUuaW46IENhbGwgR0NDX0hFQURFUl9TVFJJTkcuCgoJKiBzeXN0ZW0uaDogVGVzdCBTVFJJTkdfV0lUSF9TVFJJTkdTIHdoZW4gZGVjaWRpbmcgd2hpY2ggaGVhZGVycwoJdG8gaW5jbHVkZS4gIENvbnRpbnVlIHRvIHByZWZlciBzdHJpbmcuaCBvdmVyIHN0cmluZ3MuaCB3aGVuIGJvdGgKCWFyZSBub3QgYWNjZXB0YWJsZS4KCldlZCBTZXAgIDIgMjM6NTY6MjkgMTk5OCAgRGF2aWQgUy4gTWlsbGVyICA8ZGF2ZW1AcGllcmRvbC5jb2JhbHRtaWNyby5jb20+CgoJKiBjb25maWcvc3BhcmMvc3BhcmMuYyAob3V0cHV0X2RvdWJsZV9pbnQpOiBJZiBWOSBhbmQgTUVETE9XLCBkbwoJbm90IGFzc3VtZSB0b3AgMzItYml0cyBvZiBzeW1ib2xpYyBhZGRyZXNzZXMgYXJlIHplcm8gaWYKCWZsYWdfcGljLgoKVGh1IFNlcCAgMyAwMDoyMzoyMSAxOTk4ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogZ2luY2x1ZGUvdmEtYWxwaGEuaDogUHJvdGVjdCBlbnRpcmUgc2Vjb25kIHBvcnRpb24gb2YgdGhlCglmaWxlIGFnYWluc3QgZG91YmxlIGluY2x1c2lvbi4KClRodSBTZXAgIDMgMDA6Mzc6NTUgMTk5OCAgT3ZpZGl1IFByZWRlc2N1ICA8b3ZpZGl1QGFyYWNuZXQuY29tPgoKCUFkZGVkIHN1cHBvcnQgZm9yIHRoZSBCb2VobSdzIGdhcmJhZ2UgY29sbGVjdG9yLgoJKiBjb25maWd1cmUuaW46IEhhbmRsZSAtLWVuYWJsZS1vYmpjLWdjLgoJKiBjb25maWd1cmU6IFJlYnVpbHQuCgkqIE1ha2VmaWxlLmluIChDSEVDS19UQVJHRVRTKTogQWRkIGNoZWNrLW9iamMuCgkoY2hlY2stb2JqYyk6IE5ldyBydWxlLgoJKiBvYmpjL01ha2UtbGFuZy5pbjogQnVpbGQgYSBkaWZmZXJlbnQgT2JqZWN0aXZlLUMgbGlicmFyeSB0aGF0CglydW5zIHdpdGggdGhlIEJvZWhtJ3MgY29sbGVjdG9yLgoJKiBvYmpjL2VuY29kaW5nLmMgKG9iamNfcm91bmRfYWNjX3NpemVfZm9yX3R5cGVzKTogTmV3IGZ1bmN0aW9uLgoJKiBvYmpjL2VuY29kaW5nLmM6IENvcnJlY3RseSBjb21wdXRlIHRoZSBzaXplIG9mIGNvbXBvdW5kIHR5cGVzIGluCgl0aGUgcHJlc2VuY2Ugb2YgYml0ZmllbGRzLiBTa2lwIHRoZSB2YXJpYWJsZSBuYW1lIG9mIHRoZSB0eXBlIGlmCglhbnkuIEFkZGVkIHN1cHBvcnQgZm9yIGxvbmcgbG9uZy4KCSogb2JqYy9lbmNvZGluZy5oIChfQ19HQ0lOVklTSUJMRSk6IE5ldyBzcGVjaWZpZXIuCgkoX0ZfR0NJTlZJU0lCTEUpOiBOZXcgbWFzay4KCSogb2JqYy9nYy5jOiBOZXcgZmlsZS4gQ29tcHV0ZSB0aGUgdHlwZSBtZW1vcnkgbWFzayBhc3NvY2lhdGVkIHdpdGgKCWEgY2xhc3MgYmFzZWQgb24gdGhlIHJ1bnRpbWUgaW5mb3JtYXRpb24uCgkqIG9iamMvbWlzYy5jOiBBZGRlZCB0aGUgaG9va3MgdGhhdCB1c2UgdGhlIEJvZWhtJ3MgY29sbGVjdG9yCglhbGxvY2F0aW9uIGZ1bmN0aW9ucy4KCSogb2JqYy9vYmpjLWFjdC5jIChidWlsZF9jbGFzc190ZW1wbGF0ZSk6IEdlbmVyYXRlIGEgbmV3IGNsYXNzCgltZW1iZXIgKGdjX29iamVjdF90eXBlKSB0byBob2xkIHRoZSBjbGFzcycgdHlwZSBtZW1vcnkgbWFzay4KCShidWlsZF9zaGFyZWRfc3RydWN0dXJlX2luaXRpYWxpemVyKTogSW5pdGlhbGl6ZSB0aGUgbmV3IG1lbWJlciB0bwoJTlVMTC4KCShlbmNvZGVfY29tcGxldGVfYml0ZmllbGQpOiBOZXcgZnVuY3Rpb24uIEdlbmVyYXRlIHRoZSBuZXcKCWVuY29kaW5nLgoJKGVuY29kZV9maWVsZF9kZWNsKTogR2VuZXJhdGUgdGhlIG5ldyBlbmNvZGluZyBvbmx5IGZvciB0aGUgR05VCglydW50aW1lLgoJKiBvYmpjL29iamMtYXBpLmggKF9DX0xOR19MTkcsIF9DX1VMTkdfTE5HKTogTmV3IHNwZWNpZmllcnMgZm9yIHRoZQoJbG9uZyBsb25nIHR5cGVzLgoJKGNsYXNzX2dldF9nY19vYmplY3RfdHlwZSk6IE5ldyBmdW5jdGlvbiB0byBtYXJrIGEgcG9pbnRlciBpbnN0YW5jZQoJdmFyaWFibGUgYXMgYSB3ZWFrIHBvaW50ZXIuCgkqIG9iamMvb2JqYy1mZWF0dXJlcy50ZXhpOiBOZXcgZmlsZS4KCSogb2JqYy9vYmpjLmggKGdjX29iamVjdF90eXBlKTogTmV3IGNsYXNzIG1lbWJlci4KCSogb2JqYy9vYmplY3RzLmMgKGNsYXNzX2NyZWF0ZV9pbnN0YW5jZSk6IENyZWF0ZSBhIHR5cGVkIG1lbW9yeQoJb2JqZWN0IHdoZW4gY29tcGlsZWQgd2l0aCBCb2VobSdzIGNvbGxlY3RvciBzdXBwb3J0LgoJKiBvYmpjL3NlbmRtc2cuYyAoX19vYmpjX2luaXRfaW5zdGFsbF9kdGFibGUpOiBDYWxsCglfX29iamNfc2VuZF9pbml0aWFsaXplIGluc3RlYWQgb2Ygc2V0dGluZyB0aGUgaW5pdGlhbGl6ZSBmbGFnLgoJKF9fb2JqY19zZW5kX2luaXRpYWxpemUpOiBDYWxsIF9fb2JqY19nZW5lcmF0ZV9nY190eXBlX2Rlc2NyaXB0aW9uCgl0byBnZW5lcmF0ZSB0aGUgY2xhc3MgdHlwZSBtZW1vcnkgbWFzay4gUmV3cml0ZSB0aGUgY29kZSB0aGF0CglzZW5kcyB0aGUgK2luaXRpYWxpemUgc28gdGhhdCBpdCBpcyBjYWxsZWQgb25seSBvbmNlIChidWcgcmVwb3J0CglhbmQgZml4IGZyb20gUm9uYWxkIFBpam5hY2tlciA8Um9uYWxkLlBpam5hY2tlckBiZXN0Lm1zLnBoaWxpcHMuY29tPikuCgkqIHRlc3RzdWl0ZS9vYmpjOiBOZXcgdGVzdHN1aXRlIGZvciBPYmplY3RpdmUtQyB0eXBlIGVuY29kaW5nLgoJKiB0ZXN0c3VpdGUvbGliL29iamMtdG9ydHVyZS5leHA6IE5ldyBmaWxlLgoJKiB0ZXN0c3VpdGUvbGliL29iamMuZXhwOiBOZXcgZmlsZS4KCldlZCBTZXAgIDIgMTQ6NDc6MzYgMTk5OCAgSmltIFdpbHNvbiAgPHdpbHNvbkBjeWdudXMuY29tPgoKCSoganVtcC5jIChqdW1wX29wdGltaXplKTogSW4gaWYvdGhlbi9lbHNlIHRyYW5zZm9ybWF0aW9ucywgYWRkCglhbm90aGVyIGNhbGwgdG8gbW9kaWZpZWRfYmV0d2Vlbl9wIGZvciB0aGUganVtcCBpbnNuLgoKV2VkIFNlcCAgMiAxNDoxNjo0OSAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBmaXgtaGVhZGVyLmMgKHN5bWxpbmspOiBUcmVhdCBsaWtlIHJlYWRsaW5rLgoKV2VkIFNlcCAgMiAxOTozMDowNiAxOTk4ICBKIm9ybiBSZW5uZWNrZSAgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogZHdhcmZvdXQuYyAoZnVuZGFtZW50YWxfdHlwZV9jb2RlKTogRW5jb2RlIDMyIGJpdCBmbG9hdHMvZG91YmxlcwoJYXMgRlRfZmxvYXQuCgpXZWQgU2VwICAyIDEwOjA2OjA3IDE5OTggIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQGN5Z251cy5jb20+CgoJKiBjb25maWcvbmV4dHN0ZXAuaDogICAgVXBkYXRlIEhBTkRMRV9QUkFHTUEgbWFjcm8uCgkqIGNvbmZpZy9oODMwMC9oODMwMC5oOiBVcGRhdGUgSEFORExFX1BSQUdNQSBtYWNyby4KCSogY29uZmlnL2k5NjAvaTk2MC5oOiAgIFVwZGF0ZSBIQU5ETEVfUFJBR01BIG1hY3JvLgoKCSogY29uZmlnL25leHRzdGVwLmMgKGhhbmRsZV9wcmFnbWEpOiBUYWtlIHRocmVlIGFyZ3VtZW50cywgYXMgcGVyCgl0aGUgbmV3IEhBTkRMRV9QUkFHTUEgbWFjcm8gc3BlY2lmaWNhdGlvbi4KCSogY29uZmlnL2g4MzAwL2g4MzAwLmMgKGhhbmRsZV9wcmFnbWEpOiBUYWtlIHRocmVlIGFyZ3VtZW50cywgYXMKCXBlciB0aGUgbmV3IEhBTkRMRV9QUkFHTUEgbWFjcm8gc3BlY2lmaWNhdGlvbi4KCSogY29uZmlnL2k5NjAvaTk2MC5jIChwcm9jZXNzX3ByYWdtYSk6IFRha2UgdGhyZWUgYXJndW1lbnRzLCBhcwoJcGVyIHRoZSBuZXcgSEFORExFX1BSQUdNQSBtYWNybyBzcGVjaWZpY2F0aW9uLgoKV2VkIFNlcCAgMiAwOToyNToyOSAxOTk4ICBOaWNrIENsaWZ0b24gIDxuaWNrY0BjeWdudXMuY29tPgoKCSogYy1sZXguYyAoY2hlY2tfbmV3bGluZSk6IENhbGwgSEFORExFX1BSQUdNQSBiZWZvcmUKCUhBTkRMRV9TWVNWX1BSQUdNQSBpZiBib3RoIGFyZSBkZWZpbmVkLiAgR2VuZXJhdGUgd2FybmluZyBtZXNzYWdlcwoJaWYgdW5rbm93biBwcmFnbWFzIGFyZSBlbmNvdW50ZXJlZC4KCShoYW5kbGVfc3lzdl9wcmFnbWEpOiBJbnRlcnByZXQgcmV0dXJuIGNvZGUgZnJvbQoJaGFuZGxlX3ByYWdtYV90b2tlbiAoKS4gIFJldHVybiBzdWNjZXNzL2ZhaWx1cmUgaW5kaWNhdGlvbiByYXRoZXIKCXRoYW4gbmV4dCB1bnByb2Nlc3NlZCBjaGFyYWN0ZXIuCgkocHJhZ21hX2dldGMpOiBOZXcgZnVuY3Rpb246IHJldHJpZXZlcyBjaGFyYWN0ZXJzIGZyb20gdGhlCglpbnB1dCBzdHJlYW0uICBEZWZpbmVkIHdoZW4gSEFORExFX1BSQUdNQSBpcyBlbmFibGVkLgoJKHByYWdtYV91bmdldGMpOiBOZXcgZnVuY3Rpb246IHJlcGxhY2VzIGNoYXJhY3RlcnMgYmFjayBpbnRvIHRoZQoJaW5wdXQgc3RyZWFtLiAgRGVmaW5lZCB3aGVuIEhBTkRMRV9QUkFHTUEgaXMgZW5hYmxlZC4KCgkqIGMtcHJhZ21hLmMgKGhhbmRsZV9wcmFnbWFfdG9rZW4pOiBSZXR1cm4gc3VjY2Vzcy9mYWlsdXJlIHN0YXR1cwoJb2YgdGhlIHBhcnNlLgoKCSogYy1wcmFnbWEuaDogQ2hhbmdlIHByb3RvdHlwZSBvZiBoYW5kbGVfcHJhZ21hX3Rva2VuKCkuCgoJKiB2YXJhc20uYyAoaGFuZGxlX3ByYWdtYV93ZWFrKTogT25seSBjcmVhdGUgdGhpcyBmdW5jdGlvbiBpZgoJSEFORExFX1BSQUdNQV9XRUFLIGlzIGRlZmluZWQuCgoJKiBjLWNvbW1vbixjIChkZWNsX2F0dHJpYnV0ZXMpOiBJZiBkZWZpbmVkIGNhbGwgdGhlIGV4cHJlc3Npb24KCWNvbnRhaW5lZCB3aXRoaW4gdGhlIElOU0VSVF9BVFRSSUJVVEVTIG1hY3JvIGJlZm9yZSBhZGRpbmcKCWF0dHJpYnV0ZXMgdG8gYSBkZWNsLgoKCSogdG0udGV4aSAoSEFORExFX1BSQUdNQSk6IERvY3VtZW50IHRoZSBuZXcgdmVyc2lvbiBvZgoJSEFORExFX1BSQUdNQSwgd2hpY2ggdGFrZXMgdGhyZWUgYXJndW1lbnRzLgoJKElOU0VSVF9BVFRSSUJVVEVTKTogRG9jdW1lbnQgdGhpcyBuZXcgbWFjcm8uCgoJKiBMQU5HVUFHRVM6IERvY3VtZW50IHRoZSBuZXcgdmVyc2lvbiBvZiBIQU5ETEVfUFJBR01BIGFuZCB0aGUKCW5ldyBJTlNFUlRfQVRUUklCVVRFUyBtYWNyby4KCldlZCBTZXAgIDIgMDI6MDM6MjMgMTk5OCAgRGF2aWQgUy4gTWlsbGVyICA8ZGF2ZW1AcGllcmRvbC5jb2JhbHRtaWNyby5jb20+CgoJKiBjb25maWcvc3BhcmMvc3BhcmMubWQgKG1vdmRmKTogT25seSBnZW5lcmF0ZSBzcGVjaWFsIFJUTCBmb3IKCUxBQkVMX1JFRnMgd2hlbiBQSUMuCgkobW92ZV9sYWJlbF9kaSk6IFJlbW92ZS4KCShtb3ZkaV9waWNfbGFiZWxfcmVmLCBtb3ZkaV9oaWdoX3BpY19sYWJlbF9yZWYsCgltb3ZkaV9sb19zdW1fcGljX2xhYmVsX3JlZik6IE5ldyBwYXR0ZXJucyBmb3IgNjQtYml0IGxhYmVsCglyZWZlcmVuY2VzIHdoZW4gUElDLgoJKiBjb25maWcvc3BhcmMvc3BhcmMuaCAoQVNNX09VVFBVVF9BRERSX1ZFQ19FTFQsCglBU01fT1VUUFVUX0FERFJfRElGRl9FTFQpOiBEb24ndCBkbyBhbnl0aGluZyBzcGVjaWFsIGZvciBNRURMT1csCglvdXRwdXQgYW4gLnh3b3JkIGZvciBhbGwgNjQtYml0IGNhc2VzLgoKVHVlIFNlcCAgMSAxNTo1NToxNyAxOTk4ICBEYXZpZCBTLiBNaWxsZXIgIDxkYXZlbUBwaWVyZG9sLmNvYmFsdG1pY3JvLmNvbT4KCgkqIGNvbmZpZy9zcGFyYy9zcGFyYy5jIChmaW5hbGl6ZV9waWMpOiBEb24ndCBvdXRwdXQgYXJiaXRyYXJ5CglhbGlnbm1lbnQsIHVzZSBGVU5DVElPTl9CT1VOREFSWSBpbnN0ZWFkLgoJKHNwYXJjX291dHB1dF9kZWZlcnJlZF9jYXNlX3ZlY3RvcnMpOiBMaWtld2lzZS4KCk1vbiBBdWcgMzEgMTc6MjU6NDEgMTk5OCAgRGF2aWQgUy4gTWlsbGVyICA8ZGF2ZW1AcGllcmRvbC5jb2JhbHRtaWNyby5jb20+CgoJKiBjb25maWcvc3BhcmMvc3BhcmMubWQgKG1vdnNmX2NvbnN0X2ludHJlZyk6IEtpbGwgd2FybmluZy4KCShtb3Z0Zl9pbnNuX3NwNjQsIG1vdnRmX25vX2VfaW5zbl9zcDY0KTogUmVvcmRlciBhbHRlcm5hdGl2ZXMuCgpNb24gQXVnIDMxIDEzOjU3OjU1IDE5OTggIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBhbHBoYS92YV9saXN0Lmg6IE5ldyBmaWxlLgoJKiBhbHBoYS94LWFscGhhIChFWFRSQV9IRUFERVJTKTogTmV3LiAgQWRkIHZhX2xpc3QuaC4KCk1vbiBBdWcgMzEgMTQ6NTU6MDIgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogTkVXUzogQWRkIFNDTyBPcGVuc2VydmVyIGFuZCBVbml4d2FyZSA3IG5vdGVzLgoKCSogTkVXUzogRml4IHR5cG9zLgoKTW9uIEF1ZyAzMSAxNTo0MjoxOCAxOTk4ICBEYXZlIEJyb2xsZXkgIDxicm9sbGV5QGN5Z251cy5jb20+CgoJKiB2YXJhc20uYyAoY29tcGFyZV9jb25zdGFudF8xKTogSGFuZGxlIFJBTkdFX0VYUFIuCgkocmVjb3JkX2NvbnN0YW50XzEpOiBIYW5kbGUgUkFOR0VfRVhQUi4KCk1vbiBBdWcgMzEgMTA6NTQ6MDMgMTk5OCAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIHByaW50LXJ0bC5jIChwcmludF9ydHgpOiBOT1RFX0lOU05fTElWRSBoYXMgYW4gcnR4IG5vdCBhIGJpdG1hcC4KCSogaGFpZmEtc2NoZWQuYyAoc2NoZWRfYW5hbHl6ZSk6IEhhbmRsZSBOT1RFX0lOU05fUkFOR0VfU1RBUlQKCWFuZCBOT1RFX0lOU05fUkFOR0VfRU5EIHNwZWNpYWxseS4KCShyZWVtaXRfbm90ZXMpOiBMaWtld2lzZS4KCk1vbiBBdWcgMzEgMTA6MTg6NTIgMTk5OCAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogc3BhcmMuYyAoVE1BU0ssIFVNQVNLKTogVXNlIGAodW5zaWduZWQpMScgbm90IGAxVScuCgkodWx0cmFzcGFyY19zY2hlZF9pbml0KTogUmVtb3ZlIHVubmVlZGVkICYuCgpNb24gQXVnIDMxIDEwOjQ3OjE2IDE5OTggIEFuZHJlYXMgU2Nod2FiICA8c2Nod2FiQGlzc2FuLmluZm9ybWF0aWsudW5pLWRvcnRtdW5kLmRlPgoKCSogY29uZmlnL202OGsvbTY4ay5oIChUQVJHRVRfU1dJVENIRVMpOiBEb24ndCByZW1vdmUgTUFTS182ODA0MAoJZm9yIG02ODAyMC02MCwgdG8gcHJldmVudCB0aGUgdXNlIG9mIGZpbnRyei4KClN1biBBdWcgMzAgMjI6MTc6MjAgMTk5OCAgTWFyayBNaXRjaGVsbCAgPG1hcmtAbWFya21pdGNoZWxsLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbjogSWYgdGhlIG5hdGl2ZSBjb21waWxlciBpcyBHQ0MgdXNlICQoV0FSTl9DRkxBR1MpCglldmVuIGluIHN0YWdlMS4KCSogTWFrZWZpbGUuaW46IExpa2V3aXNlLgoJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGVkLgoKU3VuIEF1ZyAzMCAyMjoxNTo0MSAxOTk4ICBILkouIEx1ICAoaGpsQGdudS5vcmcpCgoJKiBjb25maWd1cmUuaW4gKGd4eF9pbmNsdWRlX2Rpcik6IENoYW5nZWQgdG8KCScke3ByZWZpeH0vaW5jbHVkZS9nKysnLSR7bGlic3RkY3h4X2ludGVyZmFjZX0uCgkqIGNvbmZpZ3VyZTogUmVidWlsdC4KClN1biBBdWcgMzAgMjA6MTk6NDMgMTk5OCAgSGFucy1QZXRlciBOaWxzc29uICA8aHBAYXhpcy5zZT4KCgkqIGV4cHIuYyAoZXhwYW5kX2V4cHIpOiBDaGFuZ2UgIj4iIHRvICI+PSIgbWFraW5nIE1PVkVfUkFUSU8gdXNlCgljb25zaXN0ZW50LgoJKiB0bS50ZXhpIChDb3N0cyk6IFNheSBNT1ZFX1JBVElPIGlzIG51bWJlciBvZiBtZW0tbWVtIG1vdmUKCSpzZXF1ZW5jZXMqICpiZWxvdyogd2hpY2ggc2NhbGFyIG1vdmVzIHdpbGwgYmUgdXNlZC4KClN1biBBdWcgMzAgMTc6MTg6NDMgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogY29sbGVjdDIuYyAobWt0ZW1wKTogRGVsZXRlIHVudXNlZCBkZWNsYXJhdGlvbi4KCgkqIGNvbmZpZy94bS1uZXRic2QuaDogUmVtb3ZlIHVubmVjZXNzYXJ5IGZpbGUuCgkqIGNvbmZpZy8qL3htLW5ldGJzZC5oOiBEbyBub3QgaW5jbHVkZSB0aGUgZ2VuZXJpYyB4bS1uZXRic2QuaAoJZmlsZSBhbnltb3JlLCBpdCBpcyBub3QgbmVlZGVkLgoKU3VuIEF1ZyAzMCAxNjowNTo0NSAxOTk4ICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogY29udmVydC5jIChjb252ZXJ0X3RvX2ludGVnZXIpOiBJc3N1ZSBhbiBlcnJvciBvbiBjb252ZXJzaW9ucyB0bwoJaW5jb21wbGV0ZSB0eXBlcy4KClN1biBBdWcgMzAgMTY6NDc6MjAgMTk5OCAgTWFydGluIHZvbiBMdndpcyAgPGxvZXdpc0BpbmZvcm1hdGlrLmh1LWJlcmxpbi5kZT4KCgkqIE1ha2VmaWxlLmluOiBBZGQgbGFuZ190cmVlX2ZpbGVzIGFuZCBnZW5jaGVjay5oLgoJKiBjb25maWd1cmUuaW46IEdlbmVyYXRlIHRoZW0uCgkqIGdlbmNoZWNrLmM6IEluY2x1ZGUgZ2VuY2hlY2suaC4KClNhdCBBdWcgMjkgMjE6Mzg6MjQgMTk5OCAgRGF2aWQgUy4gTWlsbGVyICA8ZGF2ZW1AcGllcmRvbC5jb2JhbHRtaWNyby5jb20+CgoJKiBjb25maWcvc3BhcmMvc3BhcmMubWQgKHBpY19sb19zdW1fZGksIHBpY19zZXRoaV9kaSk6IFJlbmFtZSB0bwoJbW92ZGlfbG9fc3VtX3BpYyBhbmQgbW92ZGlfaGlnaF9waWMgYW5kIG1ha2UgdmlzaWJsZS4KCSogY29uZmlnL3NwYXJjL3NwYXJjLmMgKGxlZ2l0aW1pemVfcGljX2FkZHJlc3MpOiBGb3IgLWZQSUMsCgllbWl0IHRoZXNlIHdoZW4gUG1vZGUgaXMgbm90IFNJbW9kZS4KCSogY29uZmlnL3NwYXJjL2xpbnV4NjQuaCAoU1BBUkNfREVGQVVMVF9DTU9ERUwpOiBNYWtlIENNX01FRExPVy4KClNhdCBBdWcgMjkgMTQ6NTk6MzIgMTk5OCAgTXVtaXQgS2hhbiAgPGtoYW5AeHJheWxpdGgud2lzYy5lZHU+CgoJKiBpMzg2L2N5Z3dpbjMyLmggKEFTTV9PVVRQVVRfU0VDVElPTl9OQU1FKTogRG9uJ3QgZW1pdAoJLmxpbmtvbmNlIGRpcmVjdGl2ZSBhZnRlciB0aGUgZmlyc3QgdGltZS4KClNhdCBBdWcgMjkgMTI6Mzk6NTYgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogbTY4ay5tZCAoYmVxMF9kaSk6IEdlbmVyYXRlIGNvcnJlY3QgKGFuZCBtb3JlIGVmZmljaWVudCkgY29kZSB3aGVuCgl0aGUgY2xvYmJlcmVkIG9wZXJhbmQgb3ZlcmxhcHMgd2l0aCBhbiBpbnB1dC4KCShibmUwX2RpKTogU2ltaWxhcmx5LgoKCSogTWFrZWZpbGUuaW4gKElOU1RBTEwpOiBSZW1vdmUgIi0tbm8taGVhZGVyIiBhcmd1bWVudC4KCgkqIE5FV1M6IFZhcmlvdXMgdXBkYXRlcy4KCkZyaSBBdWcgMjggMTk6MDA6NDQgMTk5OCAgRGF2aWQgUy4gTWlsbGVyICA8ZGF2ZW1AcGllcmRvbC5jb2JhbHRtaWNyby5jb20+CgoJKiBjb25maWcvc3BhcmMvc3BhcmMuYyAoYXJpdGhfb3BlcmFuZCwgY29uc3Q2NF9vcGVyYW5kLAoJY29uc3Q2NF9oaWdoX29wZXJhbmQsIGFyaXRoX2RvdWJsZV80MDk2X29wZXJhbmQpOiBNYXJrIG1vZGUgYXMKCXVudXNlZC4KCShjcmVhdGVfc2ltcGxlX2ZvY3VzX2JpdHMpOiBSZW1vdmUgdW51c2VkIGFyZyBoaWdoZXN0X2JpdF9zZXQsIGFsbAoJY2FsbGVycyBjaGFuZ2VkLgoJKHNwYXJjX2VtaXRfc2V0X2NvbnN0NjQpOiBSZW1vdmUgdW51c2VkIHZhcmlhYmxlIGkuCgkoc3BhcmNfc3BsaXRkaV9sZWdpdGltYXRlKTogTGlrZXdpc2UgZm9yIGFkZHJfcGFydC4KCSh1bHRyYV9jb2RlX2Zyb21fbWFzayk6IExpa2V3aXNlIGZvciBtYXNrLgoJKHVsdHJhX2Ntb3ZlX3Jlc3VsdHNfcmVhZHlfcCk6IEZpeHVwIGVudHJ5IG1vZHVsbyBjYWxjLiBhbmQKCXJldmVyc2UgcmV0dXJuIHZhbHVlcyBzbyBpdCBtYXRjaGVzIHVzYWdlIGFuZCBjb21tZW50cy4KCSh1bHRyYV9mbHVzaF9waXBlbGluZSk6IExpa2V3aXNlLgoJKHVsdHJhX2ZwbW9kZV9jb25mbGljdF9leGlzdHMpOiBMaWtld2lzZSwgcmVtb3ZlIHVudXNlZCB2YXJpYWJsZQoJdGhpc190eXBlLCBhbmQgYWxsb3cgbG9hZHMgYW5kIHN0b3JlcyBvZiBkaWZmZXJpbmcgRlAgbW9kZXMgYXMKCXRoZXkgZG8gbm90IGNyZWF0ZSBhIGNvbmZsaWN0LgoJKHVsdHJhX2ZpbmRfdHlwZSk6IEluaXRpYWxpemUgZnBtb2RlIHRvIFNGbW9kZSwgZml4CglwYXJlbnRoZXNpemF0aW9uIHRoaW5rb3MgaW4gbGFyZ2UgY29uZGl0aW9uYWwuCgkodWx0cmFzcGFyY19zY2hlZF9pbml0KTogTWFyayBkdW1wIGFuZCBzY2hlZF92ZXJib3NlIGFzIHVudXNlZC4KCUluaXQgZnJlZV9zbG90X21hc2sgYWZ0ZXIgdWx0cmFfY3VyX2hpc3QgaXMgcmVzZXQsIG5vdCBiZWZvcmUuCgkodWx0cmFzcGFyY19yZXNjYW5fcGlwZWxpbmVfc3RhdGUpOiBSZW1vdmUgdW51c2VkIHZhcmlhYmxlIHVjb2RlLgoJKHVsdHJhc3BhcmNfc2NoZWRfcmVvcmRlcik6IERvbid0IGJ6ZXJvIGN1cnJlbnQgcGlwZWxpbmUgc3RhdGUsCgl1c2UgdWx0cmFfZmx1c2hfcGlwZWxpbmUgaW5zdGVhZCwgdGhlbiByZS1pbml0IGdyb3VwIHBvaW50ZXIuCglGaXggc3RhdGVtZW50IHdpdGggbm8gZWZmZWN0LiAgSWYgbm8gcHJvZ3Jlc3MgbWFkZSBpbiwgYW5kIG5vCglpbnN0cnVjdGlvbnMgc2NoZWR1bGVkIGF0IGFsbCwgYWR2YW5jZSB0byBuZXcgcGlwZWxpbmUgY3ljbGUgZWxzZQoJd2UgZ2V0IGludG8gYW4gZW5kbGVzcyBsb29wLgoJKHVsdHJhc3BhcmNfYWRqdXN0X2Nvc3QpOiBSZW1vdmUgcHJldmlvdXMgYXJnLgoJKiBjb25maWcvc3BhcmMvc3BhcmMuaCAoQURKVVNUX0NPU1QpOiBVcGRhdGUgdG8gcmVmbGVjdCB0aGF0LgoKRnJpIEF1ZyAyOCAxMzo1MjozNSAxOTk4ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CgoJKiBzcGFyYy5tZCAoREltb2RlLCBERm1vZGUsIFRGbW9kZSBzcGxpdHMpOiBEZWxldGUgc2VsZl9yZWZlcmVuY2UKCWNvZGUuICBVc2UgcmVnX292ZXJsYXBfbWVudGlvbmVkX3AgdG8gZGV0ZWN0IHdoZW4gc291cmNlIGFuZAoJZGVzdGluYXRpb24gb3ZlcmxhcC4KCShuZWd0ZjJfbm90djkrMSk6IFVzZSBERm1vZGUgaW5zdGVhZCBvZiBTRm1vZGUgaW4gbGFzdCB0d28gb3BlcmFuZHMuCgoxOTk4LTA4LTI4ICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBjeWdudXMuY29tPgoKCSogbG9vcC5jIChjaGVja19kYnJhX2xvb3ApOiBQYXNzIENPTVBBUklTT05fVkFMVUUsIG5vdAoJQ09NUEFSSVNPTl9WQUwsIGludG8gaW52YXJpYW50X3AuCgpGcmkgQXVnIDI4IDE1OjEzOjI1IDE5OTggIEoib3JuIFJlbm5lY2tlICA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiByZWdtb3ZlLmMgKHJlZ2NsYXNzX2NvbXBhdGlibGVfcCk6IE5ldyBmdW5jdGlvbi4KCShyZWdtb3ZlX29wdGltaXplKTogVXNlIGl0LgoKCVVzZSBOUkVHUyBwYXJhbWV0ZXIgaW5zdGVhZCBvZiBjYWxsaW5nIG1heF9yZWdfbnVtLgoKCShmaXh1cF9tYXRjaF8xKTogRG9uJ3QgdXNlIGNvZGUgPSBNSU5VUyB3aGVuIGxhdGVyIHRpZWluZyB3aXRoCglhIGhhcmQgcmVnaXN0ZXIgaXMgbGlrZWx5LgoKRnJpIEF1ZyAyOCAxNDo1NDowNyAxOTk4ICBKIm9ybiBSZW5uZWNrZSAgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogbG9vcC5jIChjaGVja19kYnJhX2xvb3ApOiBGaXggY2FsY3VsYXRpb24gb2YgRklOQUxfVkFMVUUgd2hlbgoJQ09NUEFSSVNPTl9WQUwgd2FzIG5vcm1hbGl6ZWQuCgpUaHUgQXVnIDI3IDIwOjEwOjQ2IDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGxvb3AuYyAoY2hlY2tfZGJyYV9sb29wKTogVGhlIGxvb3AgZW5kaW5nIGNvbXBhcmlzb24gdmFsdWUKCW11c3QgYmUgYW4gaW52YXJpYW50IG9yIHdlIGNhbiBub3QgcmV2ZXJzZSB0aGUgbG9vcC4KCgkqIGxvb3AuYyAoc2Nhbl9sb29wKTogQ291bnQgZG93biBmcm9tIG1heF9yZWdfbnVtIC0gMSB0bwoJRklSU1RfUFNFVURPX1JFR0lTVEVSIHRvIGF2b2lkIGNhbGxpbmcgbWF4X3JlZ19udW0gZWFjaCBpdGVyYXRpb24KCW9mIHRoZSBsb29wLgoJKGxvYWRfbWVtc19hbmRfcmVjb3VudF9sb29wX3JlZ3Nfc2V0KTogTGlrZXdpc2UuCgoJKiBpMzg2LmMgKHByaW50X29wZXJhbmQpOiBSZW1vdmUgb2Jzb2xldGUgJ2MnIGRvY3MuCgpXZWQgQXVnIDI2IDE3OjEzOjM3IDE5OTggIFRvbSBUcm9tZXkgIDx0cm9tZXlAY3lnbnVzLmNvbT4KCgkqIGd0aHIuaDogRG9jdW1lbnQgX19HVEhSRUFEX01VVEVYX0lOSVRfRlVOQ1RJT04uCgkqIGZyYW1lLmMgKGluaXRfb2JqZWN0X211dGV4KTogTmV3IGZ1bmN0aW9uLgoJKGluaXRfb2JqZWN0X211dGV4X29uY2UpOiBMaWtld2lzZS4KCShmaW5kX2ZkZSk6IENhbGwgaXQuCgkoX19yZWdpc3Rlcl9mcmFtZV9pbmZvKTogTGlrZXdpc2UuCgkoX19yZWdpc3Rlcl9mcmFtZV9pbmZvX3RhYmxlKTogTGlrZXdpc2UuCgkoX19kZXJlZ2lzdGVyX2ZyYW1lX2luZm8pOiBMaWtld2lzZS4KClRodSBBdWcgMjcgMTU6MTQ6MTggMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogaGFpZmEtc2NoZWQuYyAoc2NoZWRfYW5hbHl6ZV9pbnNuKTogRml4IHRoaW5rbyBpbiBsYXN0IGNoYW5nZS4KClRodSBBdWcgMjcgMTY6MzQ6NTEgMTk5OCAgSiJvcm4gUmVubmVja2UgIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIGxvb3AuYyAoY2hlY2tfZGJyYV9sb29wKTogRW5hYmxlIGNvZGUgZm9yIHJldmVyc2FsCglvZiBzb21lIGxvb3BzIHdpdGhvdXQgYSBrbm93biBjb25zdGFudCBsb29wIGVuZC4KCldlZCBBdWcgMjYgMTg6Mzg6MTUgMTk5OCAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGhhaWZhLXNjaGVkLmMgKGxhc3RfY2xvY2tfdmFyKTogTmV3LgoJKHNjaGVkdWxlX2Jsb2NrKTogSW5pdGlhbGl6ZSBpdC4KCShzY2hlZHVsZV9pbnNuKTogVXNlIGl0IHRvIGZpbGwgaW5zbiBtb2RlcyB3aXRoIGlzc3VlIGluZm9ybWF0aW9uLgoKCSogYWxwaGEuYyAoYWxwaGFfaGFuZGxlX3RyYXBfc2hhZG93cyk6IFJlbW92ZSBkby1ub3RoaW5nIGV4aXQuCglUYWcgdHJhcGIgYW5kIG5leHQgaW5zbiB3aXRoIFRJbW9kZS4KCShhbHBoYWV2NV9pbnNuX3BpcGUsIGFscGhhZXY1X25leHRfZ3JvdXAsIGFscGhhZXY1X2FsaWduX2luc25zKTogTmV3LgoJKGFscGhhX3Jlb3JnKTogQWRkIGNvbmRpdGlvbmFsIGZvciBhbHBoYV9oYW5kbGVfdHJhcF9zaGFkb3dzLgoJSW52b2tlIGFscGhhZXY1X2FsaWduX2luc25zIGFzIGFwcHJvcHJpYXRlLgoJKiBhbHBoYS5oIChMQUJFTF9BTElHTl9BRlRFUl9CQVJSSUVSKTogV2FzIEFMSUdOX0xBQkVMX0FGVEVSX0JBUlJJRVIuCgkoTURfU0NIRURfVkFSSUFCTEVfSVNTVUUpOiBOZXcuCgkqIGFscGhhLm1kIChhdHRyIHR5cGUpOiBBZGQgbXVsdGkuCgkoZGVmaW5lX2FzbV9hdHRyaWJ1dGVzKTogTmV3LgoJKHByb2xvZ3VlX3N0YWNrX3Byb2JlX2xvb3AsIGJ1aWx0aW5fc2V0am1wX3JlY2VpdmVyKTogU2V0IHR5cGUgbXVsdGkuCgkoYXJnX2hvbWUpOiBMaWtld2lzZS4KCShmbm9wLCB1bm9wLCByZWFsaWduKTogTmV3LgoKV2VkIEF1ZyAyNiAxNTo1NTo0MSAxOTk4ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CgoJKiBpcmlzNS5oIChQUkVGRVJSRURfREVCVUdHSU5HX1RZUEUpOiBVbmRlZi4KCSogaXJpczVnYXMuaCAoUFJFRkVSUkVEX0RFQlVHR0lOR19UWVBFKTogRGVmaW5lLgoKCSogY29uZmlndXJlLmluIChwb3dlcnBjLWlibS1haXg0LlsxMl0qKTogQ2hhbmdlIGZyb20gNC5bMTJdLiouCgkocnM2MDAwLWlibS1haXg0LlsxMl0qKTogTGlrZXdpc2UuCgkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KCldlZCBBdWcgMjYgMDk6MzA6NTkgMTk5OCAgTmljayBDbGlmdG9uICA8bmlja2NAY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy9hcm0vdGh1bWIuYyAodGh1bWJfZXhpdCk6IERvIG5vdCBtb3ZlIGE0IGludG8gbHIgaWYgaXQKCWFscmVhZHkgY29udGFpbnMgdGhlIHJldHVybiBhZGRyZXNzLgoKV2VkIEF1ZyAyNiAxMjo1NzowOSAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBjYWxscy5jIChleHBhbmRfY2FsbCk6IFVzZSBiaXRmaWVsZCBpbnN0cnVjdGlvbnMgdG8gZXh0cmFjdC9kZXBvc2l0Cgl3b3JkIHNpemVkIGh1bmtzIHdoZW4gbG9hZGluZyB1bmFsaWduZWQgYXJncyBpbnRvIHJlZ2lzdGVycy4KCgkqIGhhaWZhLXNjaGVkLmMgKHNjaGVkX2FuYWx5emVfaW5zbik6IE9ubHkgY3JlYXRlIHNjaGVkdWxpbmcKCWJhcnJpZXJzIGZvciBMT09QLCBFSCBhbmQgU0VUSk1QIG5vdGVzIG9uIHRoZSBsb29wX25vdGVzIGxpc3QuCgoJKiBtbjEwMzAwLmggKFJUWF9DT1NUUyk6IEhhbmRsZSBVRElWIGFuZCBVTU9EIHRvby4KCldlZCBBdWcgMjYgMTY6MzU6MzcgMTk5OCAgSiJvcm4gUmVubmVja2UgIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIGxvb3AuYyAoY2hlY2tfZGJyYV9sb29wKTogQWRkIHNvbWUgY29kZSB0aGF0IHdvdWxkIGFsbG93IHJldmVyc2FsCglvZiBzb21lIGxvb3BzIHdpdGhvdXQgYSBrbm93biBjb25zdGFudCBsb29wIGVuZCBpZiBpdCB3ZXJlIGVuYWJsZWQuCgpXZWQgQXVnIDI2IDExOjA4OjQ0IDE5OTggIEdhdmluIFJvbWlnLUtvY2ggIDxnYXZpbkBjeWdudXMuY29tPgoKCSogbWlwcy5tZCAobHNocnNpM19pbnRlcm5hbDIrMik6IEZpeCB0eXBlLW8uCgpXZWQgQXVnIDI2IDEwOjUzOjAzIDE5OTggIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIHN5c3RlbS5oOiBJbmNsdWRlIHN0ZGFyZy5oL3ZhcmFyZ3MuaCwgbWFrZSBzdXJlIHRoZXkgYXJlIG9yZGVyZWQKCWNvcnJlY3RseSB3aXRoIHJlZ2FyZHMgdG8gc3RkaW8uaC4KCgkqIGNhbGxzLmM6IFJlbW92ZSBzdGRhcmcuaC92YXJhcmdzLmguCgkqIGNjY3AuYzogTGlrZXdpc2UuCgkqIGNleHAueTogTGlrZXdpc2UuCgkqIGNvbWJpbmUuYzogTGlrZXdpc2UuCgkqIGNwcGVycm9yLmM6IExpa2V3aXNlLgoJKiBjcHBsaWIuYzogTGlrZXdpc2UuCgkqIGNwcGxpYi5oOiBMaWtld2lzZS4KCSogZG9wcmludC5jOiBMaWtld2lzZS4KCSogZW1pdC1ydGwuYzogTGlrZXdpc2UuCgkqIGZpbmFsLmM6IExpa2V3aXNlLgoJKiBmaXgtaGVhZGVyLmM6IExpa2V3aXNlLgoJKiBnY2MuYzogTGlrZXdpc2UuCgkqIGdlbmF0dHIuYzogTGlrZXdpc2UuCgkqIGdlbmF0dHJ0YWIuYzogTGlrZXdpc2UuCgkqIGdlbmNvZGVzLmM6IExpa2V3aXNlLgoJKiBnZW5jb25maWcuYzogTGlrZXdpc2UuCgkqIGdlbmVtaXQuYzogTGlrZXdpc2UuCgkqIGdlbmV4dHJhY3QuYzogTGlrZXdpc2UuCgkqIGdlbmZsYWdzLmM6IExpa2V3aXNlLgoJKiBnZW5vcGluaXQuYzogTGlrZXdpc2UuCgkqIGdlbm91dHB1dC5jOiBMaWtld2lzZS4KCSogZ2VucGVlcC5jOiBMaWtld2lzZS4KCSogZ2VucmVjb2cuYzogTGlrZXdpc2UuCgkqIG1pcHMtdGZpbGUuYzogTGlrZXdpc2UuCgkqIHByZWZpeC5jOiBMaWtld2lzZS4KCSogcHJvdG9pemUuYzogTGlrZXdpc2UuCgkqIHJlZ21vdmUuYzogTGlrZXdpc2UuCgkqIHRvcGxldi5jOiBMaWtld2lzZS4KCSogdHJlZS5jOiBMaWtld2lzZS4KCldlZCBBdWcgMjYgMDU6MDk6MjcgMTk5OCAgSmFrdWIgSmVsaW5layAgPGpqQHN1bnNpdGUubXMubWZmLmN1bmkuY3o+CgoJKiBjb25maWcvc3BhcmMvc3BhcmMuYyAoc3BhcmNfb3ZlcnJpZGVfb3B0aW9ucyk6IElmIG5vdAoJVEFSR0VUX0ZQVSwgdHVybiBvZmYgVEFSR0VUX1ZJUy4KCSogY29uZmlnL3NwYXJjL3NwYXJjLmggKFRBUkdFVF9TV0lUQ0hFUyk6IEFkZCBuby12aXMuCgkoTEVHSVRJTUFURV9DT05TVEFOVF9QKTogQWxsb3cgU0YvREYgbW9kZSB6ZXJvIHdoZW4gVEFSR0VUX1ZJUy4KCSogY29uZmlnL3NwYXJjL3NwYXJjLm1kIChtb3ZzaV9pbnNuKTogVXNlIGZ6ZXJvcyBub3QgZnplcm8uCgkobW92ZGlfaW5zbl9zcDY0KTogQWRkIFZJUyBmemVybyBhbHRlcm5hdGl2ZS4KCShjbGVhcl9zZiwgY2xlYXJfZGYpOiBOZXcgVklTIHBhdHRlcm5zLgoJKG1vdnNmLCBtb3ZkZiBleHBhbmRlcnMpOiBBbGxvdyBmcF96ZXJvX29wZXJhbmQgZmxhdCBvdXQgd2hlbgoJVEFSR0VUX1ZJUy4KCShvbmVfY21wbGRpMl9zcDY0KTogUHJvdmlkZSBuZXcgZm5vdDEgVklTIGFsdGVybmF0aXZlLgoKVHVlIEF1ZyAyNSAxMDo1Nzo0MSAxOTk4ICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogbG9vcC5jIChuX3RpbWVzX3NldCwgbl90aW1lc191c2VkLCBtYXlfbm90X29wdGltaXplLAoJcmVnX3NpbmdsZV91c2FnZSk6IENvbnZlcnQgdG8gdmFycmF5cy4gIEFsbCB1c2VzIGNoYW5nZWQuCgkoaW5zZXJ0X2xvb3BfbWVtKTogUmV0dXJuIGEgdmFsdWUuCgkoc2Nhbl9sb29wKTogVHdlYWsgQVZPSURfQ0NfTU9ERV9DT1BJRVMgY29kZS4KCShsb2FkX21lbXNfYW5kX3JlY291bnRfbG9vcF9yZWdzX3NldCk6IExpa2V3aXNlLiAgR3JvdyB0aGUgYXJyYXlzLCBpZgoJbmVjZXNzYXJ5LgoKVHVlIEF1ZyAyNSAyMzo1NzoxMiAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBGcm9tIEFsZXhhbmRyZToKCSogY29uZmlndXJlLmluOiBEbyBub3Qgc2V0IHRocmVhZF9maWxlIHRvICJpcml4IiBzaW5jZSBubyBzdWNoCglzdXBwb3J0IGV4aXN0cyB5ZXQuCgoJKiBzcGFyYy5tZCAoZmxvYXQgYWJzL25lZyBzcGxpdHMpOiBDaGVjayByZWxvYWRfY29tcGxldGVkIGJlZm9yZQoJY2FsbGluZyBhbHRlcl9zdWJyZWcuCgpUdWUgQXVnIDI1IDE5OjE3OjU5IDE5OTggIERhdmlkIFMuIE1pbGxlciAgPGRhdmVtQHBpZXJkb2wuY29iYWx0bWljcm8uY29tPgoKCSogY29uZmlnL3NwYXJjL3NwYXJjLmMgKHNwYXJjX2Fic25lZ2Zsb2F0X3NwbGl0X2xlZ2l0aW1hdGUpOiBOZXcKCWZ1bmN0aW9uLgoJKiBjb25maWcvc3BhcmMvc3BhcmMuaDogRGVjbGFyZSBpdC4KCSogY29uZmlnL3NwYXJjL3NwYXJjLm1kIChmbG9hdCBhYnMvbmVnIHNwbGl0cyk6IFVzZSBpdC4KCShhbGwgb3RoZXIgc3BsaXRzKTogSGFuZGxlIFNVQlJFR3MgcHJvcGVybHkgd2hlcmUgbmVjZXNzYXJ5LgoJKHVubmFtZWQgKDE8PHgpLTEgVjhQTFVTIHBhdHRlcm4pOiBEaXNhYmxlIGZvciBub3cuCgpUdWUgQXVnIDI1IDE5OjQ4OjQ2IDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHJlb3JnLmMgKGZpbGxfc2ltcGxlX2RlbGF5X3Nsb3RzKTogRG8gbm90IGFib3J0IGlmIHdlIGVuY291bnRlcgoJYW4gaW5zbiBvbiB0aGUgdW5maWxsZWRfc2xvdHNfbGlzdCB0aGF0IGhhcyBubyBkZWxheSBzbG90cy4KCShmaWxsX2VhZ2VyX2RlbGF5X3Nsb3RzKTogU2ltaWxhcmx5LgoKVHVlIEF1ZyAyNSAxMzozNToyMCAxOTk4ICBOaWNrIENsaWZ0b24gIDxuaWNrY0BjeWdudXMuY29tPgoKCSogY29uZmlnL3Y4NTAvdjg1MC5jIChtb3ZzaV9zb3VyY2Vfb3BlcmFuZCk6IFRyZWF0IENPTlNUQU5UX1BfUlRYCglhcyBhbiBvcmRpbmFyeSBvcGVyYW5kLgoKVHVlIEF1ZyAyNSAxMjo1NDo1NyAxOTk4ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiB0cmVlLmMgKHZhbGlkX21hY2hpbmVfYXR0cmlidXRlKTogRG9uJ3QgYXBwbHkgYXR0cmlidXRlcyB0byBib3RoCglkZWNsIGFuZCB0eXBlLgoKVHVlIEF1ZyAyNSAxMjoyMzoyMCAxOTk4ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogcmVsb2FkLmMgKG9wZXJhbmRzX21hdGNoX3ApOiBIYW5kbGUgcnR2ZWNzLgoKCSogaTM4Ni5jIChsZWdpdGltYXRlX3BpY19hZGRyZXNzX2Rpc3BfcCk6IE5ldy4KCShsZWdpdGltYXRlX2FkZHJlc3NfcCk6IFVzZSBpdC4KCShsZWdpdGltaXplX3BpY19hZGRyZXNzKTogVXNlIHVuc3BlY3MgdG8gcmVwcmVzZW50IEBHT1QgYW5kIEBHT1RPRkYuCglIYW5kbGUgY29uc3RhbnQgcG9vbCBzeW1ib2xzIGp1c3QgbGlrZSBzdGF0aWNzLgoJKGVtaXRfcGljX21vdmUpOiBVc2UgUG1vZGUgbm90IFNJbW9kZSBmb3IgY2xhcml0eS4KCShvdXRwdXRfcGljX2FkZHJfY29uc3QpIFtTWU1CT0xfUkVGXTogUmVtb3ZlIEBHT1QgYW5kIEBHT1RPRkYgaGFja3MuCglbVU5TUEVDXTogTmV3LCBoYW5kbGluZyB3aGF0IHdlIGtpbGxlZCBhYm92ZS4KCVtQTFVTXTogRGV0ZWN0IGFuZCBhYm9ydCBvbiBpbnZhbGlkIHN5bWJvbCBhcml0aG1ldGljLgoJKiBpMzg2LmggKENPTlNUQU5UX0FERFJFU1NfUCk6IFJlbW92ZSBISUdILgoKVHVlIEF1ZyAyNSAxMjowMjoyMyAxOTk4ICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogYWxpYXMuYzogSW5jbHVkZSBvdXRwdXQuaC4KCShESUZGRVJFTlRfQUxJQVNfU0VUU19QKTogRG9uJ3QgdHJlYXQgYWxpYXMgc2V0cyBhcwoJZGlmZmVyZW50IGlmIHdlJ3JlIGluIGEgdmFyYXJncyBmdW5jdGlvbi4KCSogTWFrZWZpbGUuaW4gKGFsaWFzLm8pOiBEZXBlbmQgb24gb3V0cHV0LmgKClR1ZSBBdWcgMjUgMTk6MjA6MTIgMTk5OCAgSiJvcm4gUmVubmVja2UgIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIHNoLmggKEdJVl9TT1JUX0NSSVRFUklPTik6IERlbGV0ZS4KClR1ZSBBdWcgMjUgMTM6MTk6NDYgMTk5OCAgRGF2ZSBCcm9sbGV5ICA8YnJvbGxleUBjeWdudXMuY29tPgoKCSogcmVnY2xhc3MuYyAocmVnY2xhc3MpOiBVc2UgeG1hbGxvYy9mcmVlIGluc3RlYWQgb2YgYWxsb2NhLgoJKiBzdHVwaWQuYyAoc3R1cGlkX2xpZmVfYW5hbHlzaXMpOiBMaWtld2lzZS4KCSogcmVsb2FkMS5jIChyZWxvYWQpOiBMaWtld2lzZS4KClR1ZSBBdWcgMjUgMDU6NDg6MTggMTk5OCAgSmFrdWIgSmVsaW5layAgPGpqQHN1bnNpdGUubXMubWZmLmN1bmkuY3o+CgoJKiBjb25maWcvc3BhcmMvc3BhcmMuYyAoYXJpdGhfNDA5Nl9vcGVyYW5kLCBhcml0aF9hZGRfb3BlcmFuZCwKCWFyaXRoX2RvdWJsZV80MDk2X29wZXJhbmQsIGFyaXRoX2RvdWJsZV9hZGRfb3BlcmFuZCk6IE5ldwoJcHJlZGljYXRlcy4KCSogY29uZmlnL3NwYXJjL3NwYXJjLmggKFBSRURJQ0FURV9DT0RFUyk6IEFkZCB0aGVtLCBkZWNsYXJlIHRoZW0uCgkqIGNvbmZpZy9zcGFyYy9zcGFyYy5tZCAoYWRkZGkzLCBhZGRzaTMsIHN1YmRpMywgc3Vic2kzKTogVXNlCgl0aGVtIHRvIHRyYW5zZm9ybSBhZGQvc3ViIDQwOTYgaW50byBhZGQvc3ViIC00MDk2LgoKTW9uIEF1ZyAyNCAyMzozMTowMyAxOTk4ICBEYXZpZCBTLiBNaWxsZXIgIDxkYXZlbUBwaWVyZG9sLmNvYmFsdG1pY3JvLmNvbT4KCgkqIGxvb3AuYyAoc2Nhbl9sb29wKTogQWxsb2NhdGUgc29tZSBzbG9wIHRvIGhhbmRsZSBwc2V1ZG9zCglnZW5lcmF0ZWQgYnkgbW92ZV9tb3ZhYmxlcy4KCShsb2FkX21lbXNfYW5kX3JlY291bnRfbG9vcF9yZWdzX3NldCk6IEhvbm9yIEFWT0lEX0NDX01PREVfQ09QSUVTCgloZXJlIHRvby4KCk1vbiBBdWcgMjQgMTk6NDU6NDAgMTk5OCAgSmltIFdpbHNvbiAgPHdpbHNvbkBjeWdudXMuY29tPgoKCSogdHJlZS5kZWYgKERFQ0xfUkVTVUxUKTogQ29ycmVjdCBkb2N1bWVudGF0aW9uLgoKVHVlIEF1ZyAyNSAwMToxNToyNyAxOTk4ICBKIm9ybiBSZW5uZWNrZSAgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogcmVsb2FkMS5jIChyZWxvYWRfcmVnX2ZyZWVfYmVmb3JlX3ApOiBOZXcgYXJndW1lbnQgRVFVSVY7ICBDaGFuZ2VkCglhbGwgY2FsbGVycy4gIEFib3J0IGZvciBSRUxPQURfRk9SX0lOU04uICBSRUxPQURfRk9SX09VVEFERFJfQUREUjoKCWNvbmZsaWN0cyB3aWxsIGFsbCBSRUxPQURfRk9SX09VVFBVVCByZWxvYWRzLgoKCSogcmVsb2FkMS5jIChyZWxvYWRfY3NlX3JlZ3NfMSk6IFdoZW4gZGVsZXRpbmcgYSBuby1vcCBtb3ZlIHRoYXQKCWxvYWRzIHRoZSBmdW5jdGlvbiByZXN1bHQsIHN1YnN0aXR1dGUgd2l0aCBhIFVTRS4KCk1vbiBBdWcgMjQgMTU6MjA6MTkgMTk5OCAgRGF2aWQgRWRlbHNvaG4gIDxlZGVsc29obkBnbnUub3JnPgoKCSogcnM2MDAwLmggKEdPX0lGX0xFR0lUSU1BVEVfQUREUkVTUyk6IFVzZSBUQVJHRVRfUE9XRVJQQzY0Cgl3aGVuIHRlc3RpbmcgTEVHSVRJTUFURV9JTkRFWEVEX0FERFJFU1NfUCBERm1vZGUgYW5kIERJbW9kZS4KCShMRUdJVElNSVpFX0FERFJFU1MpOiBVc2UgVEFSR0VUX1BPV0VSUEM2NCBmb3IgSU5ERVhFRCBmaXh1cC4KCSogcnM2MDAwLmMgKHByaW50X29wZXJhbmQsIGNhc2UgJ0wnKTogQWRkIFVOSVRTX1BFUl9XT1JELCBub3QgNC4KCShwcmludF9vcGVyYW5kLCBjYXNlcyAnTycgYW5kICdUJyk6IEZpeCB0eXBvcyBpbiBsb3NzYWdlIHN0cmluZ3MuCgkqIHJzNjAwMC5tZCAoZml4X3RydW5jZGZzaTJfc3RvcmUpOiBSZW1vdmUgJXcgZnJvbSBub24tQ09OU1RfSU5UCglvcGVyYW5kLgoJKG1vdmRmX3NvZnRmbG9hdDMyLCBtb3ZkZl9oYXJkZmxvYXQ2NCwgbW92ZGZfc29mdGZsb2F0NjQpOiBDaGFuZ2UKCSdvJyB0byAnbScgZm9yIEdQUiB2YXJpYW50IGNvbnN0cmFpbnRzLgoKTW9uIEF1ZyAyNCAxMDoyNTo0NiAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBsb29wLmMgKHNjYW5fbG9vcCk6IEhvbm9yIEFWT0lEX0NDX01PREVfQ09QSUVTLgoKCSogaDgzMDAuaCAoU1RSSVBfTkFNRV9FTkNPRElORyk6IEZpeCB0eXBvLgoKCSogc3BhcmMubWQgKFRGbW9kZSBzcGxpdHMpOiBVc2UgcmVnX292ZXJsYXBfbWVudGlvbmVkX3AgdG8gZGV0ZWN0Cgl3aGVuIHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIG92ZXJsYXAuCgoJKiBzdG10LmMgKGVtaXRfY2FzZV9ub2Rlcyk6IENoYW5nZSBydHhfZnVuY3Rpb24gdG8gcnR4X2ZuIHRvIGF2b2lkCgljbGFzaCB3aXRoIGdsb2JhbCB0eXBlLgoKTW9uIEF1ZyAyNCAwMDo1Mzo1MyAxOTk4ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBmaXhpbmMuaXJpeDogQWRkIGN1cnNlcy5oIGhhbmRsaW5nIGZyb20gZml4aW5jLndyYXAuCgoJKiBjLWNvbW1vbi5jIChjb21iaW5lX3N0cmluZ3MpOiBBbHNvIHNldCBUUkVFX1JFQURPTkxZLgoJQ2hhbmdlIHdhcm5fd3JpdGVfc3RyaW5ncyB0byBmbGFnX2NvbnN0X3N0cmluZ3MuCgkqIGMtZGVjbC5jLCBjLXRyZWUuaDogTGlrZXdpc2UuCgpTdW4gQXVnIDIzIDE4OjM5OjExIDE5OTggIERhdmlkIFMuIE1pbGxlciAgPGRhdmVtQHBpZXJkb2wuY29iYWx0bWljcm8uY29tPgoKCSogY29uZmlnL3NwYXJjL3NwYXJjLmMgKHNwYXJjX2VtaXRfc2V0X2NvbnN0MzIpOiBJZiBvdXRwdXR0aW5nIGEKCUNPTlNUX0lOVCwgbm90IGEgc3ltYm9saWMgcmVmZXJlbmNlLCBkb24ndCB1c2UgYSBISUdIL0xPX1NVTQoJc2VxdWVuY2UsIHVzZSBTRVQvSU9SIGluc3RlYWQgc28gQ1NFIGNhbiBzZWUgaXQuCgkqIGNvbmZpZy9zcGFyYy9zcGFyYy5tZCAobW92aGlfY29uc3Q2NF9zcGVjaWFsLAoJbW92c2lfY29uc3Q2NF9zcGVjaWFsKTogTmV3IHBhdHRlcm5zIG5lY2Vzc2l0YXRlZCBieSB0aGF0IGNoYW5nZS4KCShtb3ZoaV9oaWdoKTogUmVtb3ZlLgoJKG1vdmhpX2xvX3N1bSk6IENoYW5nZSB0byBtYXRjaCBhbiBJT1IuCgkobW92ZGZfaW5zbl9zcDMyKTogVGVzdCBUQVJHRVRfVjkgbm90IFRBUkdFVF9BUkNINjQuCgkobW92ZGZfaW5zbl92OW9ubHkpOiBOZXcgcGF0dGVybiBmb3Igd2hlbiBWOSBidXQgbm90IEFSQ0g2NC4KCShtb3ZkZl9pbnNuX3NwNjQpOiBUZXN0IGJvdGggVEFSR0VUX1Y5IGFuZCBUQVJHRVRfQVJDSDY0LgoJKG1vdmRmIHNwbGl0cyk6IEFsbG93IHdoZW4gbm90IFY5IG9yIHdoZW4gbm90IEFSQ0g2NCBhbmQgaW50ZWdlcgoJcmVnaXN0ZXJzIGFyZSBpbnZvbHZlZC4KCShzbmVzaV96ZXJvX2V4dGVuZCBzcGxpdCk6IFJlbW92ZSByZWxvYWRfY29tcGxldGVkIHRlc3QuCgkodW5uYW1lZCBwbHVzIGFuZCBtaW51cyB6ZXJvX2V4dGVuZCBzaWRpIHNwbGl0cyk6IEFkZCBpdC4KClN1biBBdWcgMjMgMTE6NTY6MDggMTk5OCAgTWFyayBNaXRjaGVsbCAgPG1hcmtAbWFya21pdGNoZWxsLmNvbT4KCgkqIGV4dGVuZC50ZXhpOiBSZW1vdmUgZGVzY3JpcHRpb24gb2YgZXh0ZW5zaW9uIHRvIGV4cGxpY2l0CglpbnN0YW50aWF0aW9uIHRoYXQgaXMgbm93IGVuZG9yc2VkIGJ5IHN0YW5kYXJkIEMrKy4KClN1biBBdWcgMjMgMDk6Mzk6MDkgMTk5OCAgRGF2aWQgUy4gTWlsbGVyICA8ZGF2ZW1AcGllcmRvbC5jb2JhbHRtaWNyby5jb20+CgoJKiBjb25maWcvYXJjL2FyYy5jIChhcmNfaW5pdGlhbGl6ZV9waWMpOiBSZW1vdmUuCgkqIGNvbmZpZy9hcmMvYXJjLmggKElOSVRJQUxJWkVfUElDKTogU2ltaWxhcmx5LCB0aGlzIHJvdXRpbmUgZG9lcwoJbm90aGluZyBvbiBhbnkgcGxhdGZvcm0gYW5kIGlzIGludm9rZWQgYnkgbm8tb25lLCBpdCBkb2VzIG5vdCBldmVuCglhcHBlYXIgaW4gdGhlIGRvY3VtZW50YXRpb24uCgkqIGNvbmZpZy9zcGFyYy9zcGFyYy5oIChJTklUSUFMSVpFX1BJQyk6IExpa2V3aXNlLgoJKiBjb25maWcvc3BhcmMvc3BhcmMuYyAoaW5pdGlhbGl6ZV9waWMpOiBMaWtld2lzZS4KCShmaW5kX2FkZHJfcmVnKTogUmVtb3ZlIHRoaXMgYXMgd2VsbCwgbm8gbG9uZ2VyIHJlZmVyZW5jZWQgYWZ0ZXIKCW15IHJld3JpdGUuCgpTdW4gQXVnIDIzIDAwOjE3OjE0IDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHJlY29nLmMgKHZhbGlkYXRlX3JlcGxhY2VfcnR4X2dyb3VwKTogTmV3IGZ1bmN0aW9uLgoJKiByZWNvZy5oICh2YWxpZGF0ZV9yZXBsYWNlX3J0eF9ncm91cCk6IERlY2xhcmUgaXQuCgkqIHJlZ21vdmUuYyAob3B0aW1pemVfcmVnX2NvcHlfMyk6IElmIGFueSBzdWJzdGl0dXRpb24gZmFpbHMsIHRoZW4gdW5kbwoJdGhlIGVudGlyZSBncm91cCBvZiBzdWJzdGl0dXRpb25zLgoKU2F0IEF1ZyAyMiAyMzozMTowMCAxOTk4ICBLbGF1cy1HZW9yZyBBZGFtcyAgKEtsYXVzLUdlb3JnLkFkYW1zQGNoZW1pZS51bmkta2FybHNydWhlLmRlKQoKCSogbG9vcC5jIChsb2FkX21lbXMpOiBGaXggaW5pdGlhbGl6ZXJzLgoKRnJpIEF1ZyAyMSAyMzowNzo0NiAxOTk4ICBEYXZpZCBTLiBNaWxsZXIgIDxkYXZlbUBwaWVyZG9sLmNvYmFsdG1pY3JvLmNvbT4KCgkqIGNvbmZpZy9zcGFyYy9zcGFyYy5tZCAoVEZtb2RlIHNwbGl0cyk6IEhhbmRsZSBkZXN0aW5hdGlvbgoJcmVnaXN0ZXJzIGJlaW5nIHJlZmVyZW5jZWQgaW4gdGhlIGFkZHJlc3MgY29ycmVjdGx5LgoKCSogZXhwbWVkLmMgKG1ha2VfdHJlZSkgW0NPTlNUX0lOVF06IFNpZ24gZXh0ZW5kIGV2ZW4gaWYKCVRSRUVfVU5TSUdORUQsIHdoZW4gYml0c2l6ZSBvZiB0eXBlJ3MgbW9kZSBpcyBsYXJnZXIgdGhhbgoJSE9TVF9CSVRTX1BFUl9XSURFX0lOVC4KCkZyaSBBdWcgMjEgMTk6MzE6MzEgMTk5OCAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiB0cmVlLmRlZiAoTEFCRUxFRF9CTE9DS19FWFBSLCBFWElUX0JMT0NLX0VYUFIpOiBOZXcgdHJlZSBub2Rlcy4KCSogdHJlZS5oIChMQUJFTEVEX0JMT0NLX0xBQkVMLCBMQUJFTEVEX0JMT0NLX0JPRFksCglFWElUX0JMT0NLX0xBQkVMRURfQkxPQ0ssIEVYSVRfQkxPQ0tfUkVUVVJOLCBMT09QX0VYUFJfQk9EWSk6IE5ldwoJbWFjcm9zLgoJKiBleHByLmMgKGV4cGFuZF9leHByKTogSGFuZGxlIExBQkVMRURfQkxPQ0tfRVhQUiBhbmQKCUVYSVRfQkxPQ0tfRVhQUi4KClRodSBBdWcgMjAgMTk6NDM6NDQgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogaDgzMDAuYyAoaDgzMDBfZW5jb2RlX2xhYmVsKTogVXNlICcmJyBmb3IgdGlueSBkYXRhIGl0ZW1zLgoJKiBoODMwMC5oIChUSU5ZX0RBVEFfTkFNRV9QKTogTGlrZXdpc2UuCgkoU1RSSVBfTkFNRV9FTkNPRElORyk6IEhhbmRsZSAnJicuCgoJKiBtbjEwMjAwLmggKFJFR19PS19GT1JfSU5ERVhfUCk6IERvIG5vdCBjaGVjayB0aGUgbW9kZSBvZiB0aGUKCXJlZ2lzdGVyIChpdCBjb3VsZCBiZSBhY2Nlc3NlZCB2aWEgYW4gb3V0ZXIgU1VCUkVHKS4KCShSRUdfT0tfRk9SX0JBU0VfUCk6IExpa2V3aXNlLgoJKEdPX0lGX0xFR0lUSU1BVEVfQUREUkVTUyk6IENvbnNpc3RlbnRseSB1c2UgUkVHTk9fT0tfRk9SX0JBU0VfUC4KCgkqIHJlbW92ZS5jIChvcHRpbWl6ZV9yZWdfY29weV8zKTogQWJvcnQgaW5zdGVhZCBvZiBzaWxlbnRseSBnZW5lcmF0aW5nCglib2d1cyBydGwuCgoJKiBqdW1wLmMgKHJ0eF9yZW51bWJlcmVkX2VxdWFsX3ApOiBEbyBub3QgY29uc2lkZXIgUExVUyBjb21tdXRhdGl2ZS4KClRodSBBdWcgMjAgMTc6MzU6MjAgMTk5OCAgRGF2aWQgUy4gTWlsbGVyICA8ZGF2ZW1AcGllcmRvbC5jb2JhbHRtaWNyby5jb20+CgoJKiBjb25maWcvc3BhcmMvc3BhcmMubWQgKG1vdnRmX2luc25fc3AzMik6IEFsbCBtZW1vcnkgb3BlcmFuZHMKCW11c3QgYmUgb2Zmc2V0dGFibGUgc28gdGhlIHNwbGl0cyBjYW4gYmUgbWFkZS4KClRodSBBdWcgMjAgMTM6NTY6NTMgMTk5OCAgTWljaGFlbCBNZWlzc25lciAgPG1laXNzbmVyQGN5Z251cy5jb20+CgoJKiBjb25maWcvaTM4Ni93aW5udC5jOiBJbmNsdWRlIHN5c3RlbS5oLCBub3Qgc3RkaW8uaCB0byBnZXQKCXN5cy9wYXJhbS5oIHB1bGxlZCBpbiBiZWZvcmUgcnRsLmggaW4gY2FzZSB0aGUgc3lzdGVtIGRlZmluZXMgTUlOCglhbmQgTUFYLgoKVGh1IEF1ZyAyMCAxMzo0NDoyMCAxOTk4ICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQGdudS5vcmc+CgoJKiByczYwMDAubWQgKG1vdnFpLCBtb3ZoaSk6IEFkZCBDT05TVEFOVF9QX1JUWC4KClRodSBBdWcgMjAgMTM6MTU6MTEgMTk5OCAgRGF2ZSBCcm9sbGV5ICA8YnJvbGxleUBjeWdudXMuY29tPgoKCSogc3Rvci1sYXlvdXQuYyAobGF5b3V0X3R5cGUpOiBDb21wdXRlIFRZUEVfU0laRV9VTklUIGNvcnJlY3RseSBmb3IKCWFycmF5cyBvZiBiaXRzLgoJKiBjcHBsaWIuYyAoY3BwX2RlZmluZSk6IEhhbmRsZSBtYWNyb3Mgd2l0aCBwYXJhbWV0ZXJzLgoKV2VkIEF1ZyAxOSAyMTozMzoxOSAxOTk4ICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQGdudS5vcmc+CgoJKiByczYwMDAuYyAocnM2MDAwX291dHB1dF9sb2FkX3RvY190YWJsZSk6IFVzZSBsZCBmb3IgNjQtYml0LgoJKG91dHB1dF90b2MpOiBVc2Ugc2luZ2xlIFRPQyBzbG90IG9yIGxsb25nIG1pbmltYWwtdG9jIGZvciBERm1vZGUKCWFuZCBESW1vZGUgNjQtYml0LiAgVXNlIGxsb25nIGZvciBtaW5pbWFsLXRvYyBTRm1vZGUgYW5kCglTWU1CT0xfUkVGIC8gTEFCRUxfUkVGIDY0LWJpdC4KCShvdXRwdXRfZnVuY3Rpb25fcHJvZmlsZXIpOiBVc2UgbGxvbmcgZm9yIHByb2ZpbGVyIGxhYmVsIGFuZCBsZCB0bwoJbG9hZCA2NC1iaXQgbGFiZWwgYWRkcmVzcy4KCldlZCBBdWcgMTkgMTc6NTI6MjcgMTk5OCAgTmljayBDbGlmdG9uICAobmlja2NAY3lnbnVzLmNvbSkKCgkqIGNvbmZpZy9hcm0vdGh1bWIubWQgKGV4dGVuZHFpc2kyX2luc24pOiBDb3BlIHdpdGggUkVHICsKCU9GRlNFVCBhZGRyZXNzaW5nLgoKV2VkIEF1ZyAxOSAxNDoxMzozMSAxOTk4ICBKZWZmIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogdmVyc2lvbi5jOiBCdW1wIGZvciBzbmFwc2hvdC4KCldlZCBBdWcgMTkgMTM6MTA6MzAgMTk5OCAgSmVmZiBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHZlcnNpb24uYzogQnVtcCBmb3Igc25hcHNob3QuCgpXZWQgQXVnIDE5IDEzOjA2OjQ3IDE5OTggIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGNvbGxlY3QyLmMgKGV4dHJhY3RfaW5pdF9wcmlvcml0eSk6IFVzZSBhdG9pIGluc3RlYWQgb2Ygc3RydG91bC4KCldlZCBBdWcgMTkgMTM6NTE6MzUgMTk5OCAgSGFucy1QZXRlciBOaWxzc29uICA8aHBAYXhpcy5zZT4KCgkqIHRtLnRleGkgKE1pc2MpOiBGaXggdHlwbyAidGVoIi4KCgkqIHRtLnRleGkgKFBJQyk6IEZpeCB0eXBvICJQUElDIi4KCgkqIHRtLnRleGkgKENhbGxlciBTYXZlcyk6IFNheSB0aGF0IERFRkFVTFRfQ0FMTEVSX1NBVkVTIGhhcyBubwoJZWZmZWN0IHdoZW4gLU8yIGFuZCBoaWdoZXIuCgkqIGludm9rZS50ZXhpIChPcHRpbWl6ZSBPcHRpb25zKTogTGlrZXdpc2UgZm9yIC1mY2FsbGVyLXNhdmVzLgoKMTk5OC0wOC0xOSAgTWljaGFlbCBIYXllcyAgPG1pY2hhZWxoQG9uZ2FvbmdhLmNoY2guY3JpLm56PgoKCSogcmVnY2xhc3MuYzogQ2hhbmdlZCByZWdpc3RlciBzZXQgZG9jdW1lbnRhdGlvbiB0byBiZSBjb25zaXN0ZW50Cgl3aXRoIEdDQyBiZWhhdmlvci4KCgkqIGZpbmFsLmMgKGZpbmFsX3N0YXJ0X2Z1bmN0aW9uKTogUmVtb3ZlZCByZWR1bmRhbnQgdGVzdCBmb3IKCWNhbGxfZml4ZWRfcmVncy4KCldlZCBBdWcgMTkgMTM6Mjg6NDEgMTk5OCAgTWFyayBNaXRjaGVsbCAgPG1hcmtAbWFya21pdGNoZWxsLmNvbT4KCgkqIHJ0bC5oIChydHhfZnVuY3Rpb24pOiBOZXcgdHlwZS4KCShmb3JfZWFjaF9ydHgpOiBOZXcgZnVuY3Rpb24uCgkqIHJ0bGFuYWwuYyAoZm9yX2VhY2hfcnR4KTogRGVmaW5lIGl0LgoKCSogcmVjb2cuYyAoY2hhbmdlX3QpOiBOZXcgdHlwZS4KCShjaGFuZ2Vfb2JqZWN0cywgY2hhbmdlX29sZF9jb2RlcywgY2hhbmdlX2xvY3MsIGNoYW5nZV9vbGRzKToKCVJlcGxhY2Ugd2l0aCAuLi4KCShjaGFuZ2VzKTogTmV3IHZhcmlhYmxlLgoJKHZhbGlkYXRlX2NoYW5nZSk6IER5bmFtaWNhbGx5IGFsbG9jYXRlIHJvb20gZm9yIG1vcmUgY2hhbmdlcywgaWYKCW5lY2Vzc2FyeS4gIFVzZXMgY2hhbmdlcyBhcnJheSBpbnN0ZWFkIG9mIGNoYW5nZV9vYmplY3RzLCBldGMuCgkoYXBwbHlfY2hhbmdlX2dyb3VwKTogVXNlIGNoYW5nZXMgYXJyYXkgaW5zdGVhZCBvZgoJY2hhbmdlX29iamVjdHMsIGV0Yy4KCgkqIGxvb3AuYyAobG9vcF9tZW1faW5mbyk6IE5ldyB0eXBlLgoJKGxvb3BfbWVtcyk6IE5ldyB2YXJpYWJsZS4KCShsb29wX21lbXNfaWR4KTogTGlrZXdpc2UuCgkobG9vb3BfbWVtc19hbGxvY2F0ZWQpOiBMaWtld2lzZS4KCShzY2FuX2xvb3ApOiBSZW1vdmUgbnJlZ3MgcGFyYW1ldGVyLgoJKG5leHRfaW5zbl9pbl9sb29wKTogTmV3IGZ1bmN0aW9uLgoJKGxvYWRfbWVtc19hbmRfcmVjb3VudF9sb29wX3JlZ3Nfc2V0KTogTGlrZXdpc2UuCgkobG9hZF9tZW1zKTogTGlrZXdpc2UuCgkoaW5zZXJ0X2xvb3BfbWVtKTogTGlrZXdpc2UuCgkocmVwbGFjZV9sb29wX21lbSk6IExpa2V3aXNlLgoJKHJlcGxhY2VfbGFiZWwpOiBMaWtld2lzZS4KCShJTlNOX0lOX1JBTkdFX1ApOiBOZXcgbWFjcm8uCgkobG9vcF9vcHRpbWl6ZSk6IERvbid0IHBhc3MgbWF4X3JlZ19udW0oKSB0byBzY2FuX2xvb3AuCgkoc2Nhbl9sb29wKTogUmVtb3ZlIG5yZWdzIHBhcmFtZXRlciwgY29tcHV0ZSBpdCBhZnRlciBhbnkgbmV3CglyZWdpc3RlcnMgYXJlIGNyZWF0ZWQgYnkgbG9hZF9tZW1zLiAgVXNlIElOU05fSU5fUkFOR0VfUCBhbmQKCW5leHRfaW5zbl9pbl9sb29wIHJhdGhlciB0aGFuIGV4cGFuZGluZyB0aGVtIGlubGluZS4gIENhbGwKCWxvYWRfbWVtcyB0byBsb2FkIG1lbW9yeSBpbnRvIHBzZXVkb3MsIGlmIGFwcHJvcHJpYXRlLgoJKHByZXNjYW5fbG9vcCk6IEZpZ3VyZSBvdXQgd2hldGhlciBvciBub3QgdGhlcmUgYXJlIGp1bXBzIGZyb20gdGhlCglsb29wIHRvIHRhcmdldHMgb3RoZXIgdGhhbiB0aGUgbGFiZWwgaW1tZWRpYXRlbHkgZm9sbG93aW5nIHRoZQoJbG9vcC4gIENhbGwgaW5zZXJ0X2xvb3BfbWVtIHRvIG5vdGljZSBhbGwgdGhlIE1FTXMgdXNlZCBpbiB0aGUKCWxvb3AsIGlmIGl0IGNvdWxkIGJlIHNhZmUgdG8gcHVsbCBNRU1zIGludG8gUkVHcyBmb3IgdGhlIGR1cmF0aW9uCglvZiB0aGUgbG9vcC4KCShzdHJlbmd0aF9yZWR1Y2UpOiBVc2UgbmV4dF9pbnNuX2luX2xvb3AuICBUd2VhayBjb21tZW50cy4KCldlZCBBdWcgMTkgMDg6Mjk6NDQgMTk5OCAgUmljaGFyZCBFYXJuc2hhdyAgKHJlYXJuc2hhQGFybS5jb20pCgoJKiBhcm0uYyAoYXJtX292ZXJyaWRlX29wdGlvbnMpOiBSZW1vdmUgbGllIGFib3V0IGlnbm9yaW5nIFBJQyBmbGFnLgoKV2VkIEF1ZyAxOSAwNzowODoxNSAxOTk4ICBEYXZpZCBTLiBNaWxsZXIgIDxkYXZlbUBwaWVyZG9sLmNvYmFsdG1pY3JvLmNvbT4KCgkqIGNvbmZpZy9zcGFyYy9zcGFyYy5jIChmaW5hbGl6ZV9waWMpOiBDaGVjayBmb3IgdGhlIGNvcnJlY3QKCW5vbmxvY2FsX2dvdG9fcmVjZWl2ZXIgVU5TUEVDIG51bWJlci4KCSogY29uZmlnL3NwYXJjL3NwYXJjLm1kIChub25sb2NhbF9nb3RvX3JlY2VpdmVyKTogQWRkIGNvbW1lbnQKCW1ha2luZyBub3RlIG9mIHRoaXMgZGVwZW5kZW5jeSBleGlzdGluZyBpbiBzcGFyYy5jLgoJKG5lZ3RmMl9ub3R2OSBzcGxpdCk6IEdpdmUgTkVHIFNGbW9kZS4KCShuZWdzZjIpOiBGaXggaW5zbiBvdXRwdXQgc3RyaW5nLgoKVHVlIEF1ZyAxOCAxMjo0MDoyNyAxOTk4ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogYy1jb21tb24uYyAoZGVjbF9hdHRyaWJ1dGVzKTogSXNzdWUgYW4gZXJyb3IgaWYgdGhlIGFyZ3VtZW50Cgl0byBhbGlhcyBpcyBub3QgYSBzdHJpbmcuCgpUdWUgQXVnIDE4IDEwOjMzOjMwIDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGhhaWZhLXNjaGVkLmMgKHNjaGVkX2FuYWx5emUpOiBQdXQgYWxsIEpVTVBfSU5TTnMgb24gdGhlIGxhc3QKCXBlbmRpbmcgbWVtb3J5IGZsdXNoIGxpc3QuCgoJKiBjb21iaW5lLmMgKGNhbl9jb21iaW5lX3ApOiBBbGxvdyBjb21iaW5pbmcgaW5zbnMgd2l0aCBSRUdfUkVUVkFMCglub3Rlcy4KCSh0cnlfY29tYmluZSk6IEFsbG93IGNvbWJpbmluZyBpbnNucyB3aXRoIFJFR19MSUJDQUxMIG5vdGVzLgoKCSogZXhwci5jIChlbWl0X2Jsb2NrX21vdmUpOiBEbyBub3QgY2FsbCBtZW1jcHkgYXMgYSBsaWJjYWxsCglpbnN0ZWFkIGJ1aWxkIHVwIGEgQ0FMTF9FWFBSIGFuZCBjYWxsIGl0IGxpa2UgYW55IG90aGVyCglmdW5jdGlvbi4KCShjbGVhcl9zdG9yYWdlKTogU2ltaWxhcmx5IGZvciBtZW1zZXQuCgoJKiByZWdtb3ZlLmMgKGZpeHVwX21hdGNoXzIpOiBEbyBub3QgY2FsbCByZWdfb3ZlcmxhcF9tZW50aW9uZWRfcAoJb24gbm90ZXMuCgoJKiBNYWtlZmlsZS5pbiAoY3BsdXMtZGVtLm8pOiBQcm92aWRlIGV4cGxpY2l0IHJ1bGVzIGZvciBidWlsZGluZwoJY3BsdXMtZGVtLm8uCgoJKiByZWdtb3ZlLmMgKG9wdGltaXplX3JlZ19jb3B5XzEpOiBVcGRhdGUgUkVHX05fQ0FMTFNfQ1JPU1NFRAoJYW5kIFJFR19MSVZFX0xFTkdUSCBhcyBzdWNjZXNzZnVsIHN1YnN0aXR1dGlvbnMgYXJlIG1hZGUuCgpUdWUgQXVnIDE4IDA3OjE1OjI3IDE5OTggIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGNvbmZpZy9zcGFyYy9zcGFyYy5jICh1bHRyYV9maW5kX3R5cGUpOiBBZGQgZW1wdHkgc2VtaWNvbG9uCglzdGF0ZW1lbnQgYWZ0ZXIgZW5kIG9mIGxvb3AgbGFiZWwuCgpUdWUgQXVnIDE4IDA3OjEzOjI3IDE5OTggIERhdmlkIFMuIE1pbGxlciAgPGRhdmVtQHBpZXJkb2wuY29iYWx0bWljcm8uY29tPgoKCSogY29uZmlnL3NwYXJjL3NwYXJjLmMgKHVsdHJhX3R5cGVzX2F2YWlsKTogTmV3IHZhcmlhYmxlLgoJKHVsdHJhX2J1aWxkX3R5cGVzX2F2YWlsKTogTmV3IGZ1bmN0aW9uIHRvIHJlY29yZCBtYXNrIG9mIGluc24KCXR5cGVzIGluIHJlYWR5IGxpc3QgYXQgdGhpcyBjeWNsZS4KCSh1bHRyYXNwYXJjX3NjaGVkX3Jlb3JkZXIpOiBDYWxsIGl0LgoJKHVsdHJhX2ZpbmRfdHlwZSk6IFVzZSBpdCB0byBxdWlja2VuIHRoZSBzZWFyY2guICBBbHNvIHNpbXBsaWYKCWRlcGVuZGVuY3kgY2hlY2ssIGRvbid0IHVzZSBydHhfZXF1YWxfcCBiZWNhdXNlIHdlIGtub3cgZXhhY3RseQoJd2hhdCB3ZSBhcmUgbG9va2luZyBmb3IuCgpUdWUgQXVnIDE4IDAzOjIwOjUzIDE5OTggIFJpY2hhcmQgRWFybnNoYXcgIChyZWFybnNoYUBhcm0uY29tKQoKCSogYXJtLmggKFNFQ09OREFSWV9JTlBVVF9SRUxPQURfQ0xBU1MpOiBSZXR1cm4gTk9fUkVHUyBpZiBjb21waWxpbmcKCWZvciBhcmNoaXRlY3R1cmUgdjQuCgpNb24gQXVnIDE3IDIxOjI2OjM4IDE5OTggIERhdmlkIFMuIE1pbGxlciAgPGRhdmVtQHBpZXJkb2wuY29iYWx0bWljcm8uY29tPgoKCSogY29uZmlnL3NwYXJjL3NwYXJjLm1kIChzbHR1LCBzZ2V1KTogRG9uJ3QgRkFJTCwgY2FsbAoJZ2VuX2NvbXBhcmVfcmVnLgoJKG1vdnNmX2NvbnN0X2ludHJlZywgbW92c2ZfY29uc3RfaGlnaCwgbW92c2ZfY29uc3RfbG8sCgltb3ZkZl9jb25zdF9pbnRyZWcgYW5kIGhlbHBlciBzcGxpdHMpOiBOZXcgcGF0dGVybnMgdG8gbW92ZSBmbG9hdAoJY29uc3RhbnRzIGludG8gaW50ZWdlciByZWdpc3RlcnMuCgkobmVndGYyLCBuZWdkZjIsIGFic3RmMiwgYWJzZGYyKTogUmV3b3JrIHVzaW5nIG5ldyBwYXR0ZXJucyBhbmQKCXNwbGl0cy4KCk1vbiBBdWcgMTcgMTE6NDY6MTkgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogRnJvbSBHcmFoYW0KCSogdHJlZS5jIChidWlsZF9pbmRleF90eXBlKTogQ29weSBUWVBFX1NJWkVfVU5JVCBmcm9tIHNpemV0eXBlCgl0byBpdHlwZS4KCSogYy1kZWNsLmMgKGZpbmlzaF9lbnVtKTogQ29weSBUWVBFX1NJWl9VTklUIGZyb20gZW51bXR5cGUgdG8gdGVtLgoKCSogcnM2MDAwLmMgKHNlY29uZGFyeV9yZWxvYWRfY2xhc3MpOiBGb3IgVEFSR0VUX0VMRiwgaW5kaWNhdGUgdGhhdAoJYSBCQVNFX1JFR1MgcmVnaXN0ZXIgaXMgbmVlZGVkIGFzIGFuIGludGVybWVkaWF0ZSB3aGVuIGNvcHlpbmcKCWEgc3ltYm9saWMgdmFsdWUgaW50byBhbnkgcmVnaXN0ZXIgY2xhc3Mgb3RoZXIgdGhhbiBCQVNFX1JFR1MuCgoJKiBleHByLmMgKG1vdmVfYnlfcGllY2VzKTogTm8gbG9uZ2VyIHN0YXRpYy4gIFJlbW92ZSBwcm90b3R5cGUuCgkqIHJ0bC5oIChtb3ZlX2J5X3BpZWNlcyk6IEFkZCBleHRlcm4gcHJvdG90eXBlLgoJKiBtaXBzLmMgKGV4cGFuZF9ibG9ja19tb3ZlKTogSGFuZGxlIGFsaWduZWQgc3RyYWlnaHQgbGluZSBjb3B5IGJ5CgljYWxsaW5nIG1vdmVfYnlfcGllY2VzLgoKCSogZXhwci5jIChleHBhbmRfZXhwcik6IEFsbG93IGFzc2lnbm1lbnRzIGZyb20gVEltb2RlIFBBUk1fREVDTHMKCWFuZCBWQVJfREVDTHMuCgpNb24gQXVnIDE3IDEwOjI4OjUyIDE5OTggIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiBzdG10LmMgKGV4cGFuZF9lbmRfbG9vcCk6IFRpZHkuICBBbGxvdyB1bmNvbmRpdGlvbmFsCglqdW1wcyBvdXQgb2YgdGhlIGxvb3AgdG8gYmUgdHJlYXRlZCBhcyBwYXJ0IG9mIHRoZSBleGl0IHRlc3QuCgpNb24gQXVnIDE3IDEwOjA2OjExIDE5OTggIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCQkJICBKZWZmIExhdyAgPGxhd0BjeWdudXMuY29tPgoKCSogTWFrZWZpbGUuaW4gKGNwbHVzLWRlcC5vKTogVXNlIGNwbHVzLWRlbS5jIGZyb20gbGliaWJlcnR5LgoJKiBjcGx1cy1kZW0uYzogRGVsZXRlLgoKCSogTWFrZWZpbGUuaW4gKGZvbGQtY29uc3Qubyk6IERlcGVuZCBvbiAkKFJUTF9IKS4KCgkqIGZvbGQtY29uc3QuYzogSW5jbHVkZSBydGwuaCB0byBnZXQgdGhlIHByb3RvdHlwZSBmb3IKCWBzZXRfaWRlbnRpZmllcl9sb2NhbF92YWx1ZScuCgoJKiBsb29wLmMgKGV4cHJlc3NfZnJvbV8xKTogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZSBgdG1wJy4KCShjb21iaW5lX2dpdnMpOiBDYXN0IHRoZSBmaXJzdCBhcmd1bWVudCBvZiBiemVybyB0byBjaGFyICouCgoJKiB0b3BsZXYuYyAoZGlzcGxheV9oZWxwKTogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZSBgbG9va2luZ19mb3Jfc3RhcnQnLgoKCSogYy1kZWNsLmMgKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogUmVtb3ZlIHVubmVlZGVkICYuCgoJKiBhbHBoYS5oIChhbHBoYV9pbml0aWFsaXplX3RyYW1wb2xpbmUpOiBQcm92aWRlIHByb3RvdHlwZS4KCgkqIGV4Y2VwdC5jIChzZXRfZXhjZXB0aW9uX2xhbmdfY29kZSwgc2V0X2V4Y2VwdGlvbl92ZXJzaW9uX2NvZGUpOgoJQ2hhbmdlIHBhcmFtZXRlciBmcm9tIGBzaG9ydCcgdG8gYGludCcgdG8gYXZvaWQgdXNpbmcgYSBnY2MKCWV4dGVuc2lvbi4KCgkqIGV4Y2VwdC5oIChzZXRfZXhjZXB0aW9uX2xhbmdfY29kZSwgc2V0X2V4Y2VwdGlvbl92ZXJzaW9uX2NvZGUpOgoJTGlrZXdpc2UgZm9yIHByb3RvdHlwZXMuCgoJKiBmbG93LmMgKGNvdW50X3JlZ19yZWZlcmVuY2VzKTogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZXMgYHJlZ25vJwoJYW5kIGBpJy4KCgkqIGdjc2UuYyAoaGFzaF9zY2FuX2luc24pOiBEZWNsYXJlIHBhcmFtZXRlciBgaW5fbGliY2FsbF9ibG9jaycuCgoJKiBwcmVmaXguYyAodHJhbnNsYXRlX25hbWUpOiBDYXN0IHRoZSByZXN1bHQgb2YgYGFsbG9jYScuCgoJKiB2YXJyYXkuaCAoVkFSUkFZX0ZSRUUpOiBSZWltcGxlbWVudCBhcyBhIGBkby13aGlsZSgwKScgc3RhdGVtZW50LgoKTW9uIEF1ZyAxNyAwOToyMzo0MiAxOTk4ICBBbmRyZWFzIFNjaHdhYiAgPHNjaHdhYkBpc3Nhbi5pbmZvcm1hdGlrLnVuaS1kb3J0bXVuZC5kZT4KCgkqIGNvbmZpZy9tNjhrL202OGsuYzogSW5jbHVkZSAic3lzdGVtLmgiIGluc3RlYWQgb2YgPHN0ZGlvLmg+LgoJSW5jbHVkZSAidG9wbGV2LmgiLgoJKHZhbGlkX2RiY2NfY29tcGFyaXNvbl9wKTogTWFyayBtb2RlIGFyZ3VtZW50IGFzIHVudXNlZC4KCShzeW1ib2xpY19vcGVyYW5kKTogTGlrZXdpc2UuCgkobGVnaXRpbWl6ZV9waWNfYWRkcmVzcyk6IExpa2V3aXNlLgoJKGNvbnN0X3VpbnQzMl9vcGVyYW5kKTogTGlrZXdpc2UuCgkoY29uc3Rfc2ludDMyX29wZXJhbmQpOiBMaWtld2lzZS4KCSogc2NoZWQuYyBbIUlOU05fU0NIRURVTElOR106IERlZmluZSBvbmx5IGR1bW15IGZ1bmN0aW9uCglzY2hlZHVsZV9pbnNucyBhbmQgY29tbWVudCBvdXQgcmVzdCBvZiBmaWxlLgoKCSogbTY4ay5jIChvdXRwdXRfbW92ZV9zaW1vZGVfY29uc3QpOiBVc2Ugc3VibCB0byBtb3ZlIGEgemVybyBpbnRvIGFuCglhZGRyZXNzIHJlZ2lzdGVyLgoJKG91dHB1dF9tb3ZlX1tocV1pbW9kZSk6IExpa2V3aXNlLgoKTW9uIEF1ZyAxNyAwOToxNTo0NyAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiB0b3BsZXYuYyAobWFpbik6IEVuYWJsZSAtZnN0cmljdC1hbGlhc2luZyBmb3IgLU8yIGFuZCBhYm92ZS4KCSogaW52b2tlLnRleGk6IENvcnJlc3BvbmRpbmcgY2hhbmdlcy4KCk1vbiBBdWcgMTcgMDI6MDM6NTUgMTk5OCAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIHJlZ2NsYXNzLmMgKGFsbG9jYXRlX3JlZ19pbmZvKTogUmVzcGVjdCBNSU4gd2hlbiBjbGVhcmluZyBkYXRhLgoKU3VuIEF1ZyAxNiAxNzozNzowNiAxOTk4ICBEYXZpZCBTLiBNaWxsZXIgIDxkYXZlbUBwaWVyZG9sLmNvYmFsdG1pY3JvLmNvbT4KCgkqIGNvbmZpZy9zcGFyYy9zcGFyYy5jICh1bHRyYV9jb2RlX2Zyb21fbWFzaywKCXVsdHJhX2Ntb3ZlX3Jlc3VsdHNfcmVhZHlfcCwgdWx0cmFfZnBtb2RlX2NvbmZsaWN0X2V4aXN0cywKCXVsdHJhX2ZpbmRfdHlwZSwgdWx0cmFfc2NoZWR1bGVfaW5zbiwgdWx0cmFfZmx1c2hfcGlwZWxpbmUsCgl1bHRyYXNwYXJjX3NjaGVkX2luaXQsIHVsdHJhc3BhcmNfdmFyaWFibGVfaXNzdWUsCgl1bHRyYV9yZXNjYW5fcGlwZWxpbmVfc3RhdGUsIHVsdHJhc3BhcmNfc2NoZWRfcmVvcmRlcik6IE5ldwoJZnVuY3Rpb25zIHRvIGRlc2NyaWJlIFVsdHJhU1BBUkMgcGlwZWxpbmUgZXhhY3RseSB0byBIYWlmYS4KCSh1bHRyYXNwYXJjX2FkanVzdF9jb3N0KTogSW5kaWNhdGUgSU1VTCB0eXBlIGluc25zIGhhdmUgemVybyBjb3N0LAoJYXMgdGhlcmUgaXMgbm90aGluZyB0aGUgc2NoZWR1bGVyIGNhbiBkbyBhYm91dCBpdC4gIEluZGljYXRlIHRoYXQKCVJFR19ERVBfT1VUUFVUJ3MgY29sbGlkZS4gIEZpeHVwIGZvcm1hdHRpbmcuCgkqIGNvbmZpZy9zcGFyYy9zcGFyYy5oIChSVFhfQ09TVFMpOiBGaXh1cCBpbnRlZ2VyIG11bHRpcGx5IGFuZAoJZGl2aWRlIGNvc3RzIG9uIFVsdHJhIGZvciBESW1vZGUuCgkoTURfU0NIRURfSU5JVCwgTURfU0NIRURfUkVPUkRFUiwgTURfU0NIRURfVkFSSUFCTEVfSVNTVUUpOgoJRGVmaW5lLgoJKiBjb25maWcvc3BhcmMvc3BhcmMubWQgKGlldV91bm5hbWVkIGZ1bmN0aW9uIHVuaXQpOiBSZW5hbWUgdG8KCWlldU4gYW5kIGFkZCBjYWxsX25vX2RlbGF5X3Nsb3QgdG8gdHlwZSBsaXN0LgoJKGN0aSBmdW5jdGlvbiB1bml0KTogTmV3IHVuaXQgZm9yIGJyYW5jaGVzIG9uIFVsdHJhU1BBUkMuCgkoc3VieC9hZGR4IGluc25zKTogU2V0IHR5cGUgdG8gbWlzYy4KCShzaWRpIHplcm8vc2lnbiBleHRlbnNpb24gaW5zbnMgb24gYXJjaDY0KTogU2V0IHR5cGUgdG8gc2hpZnQuCgkoc2lnbl9leHRlbmRoaWRpMl9pbnNuKTogU2V0IHR5cGUgdG8gc2xvYWQuCgpTdW4gQXVnIDE2IDEzOjUyOjAwIDE5OTggIERhdmlkIEVkZWxzb2huICA8ZWRlbHNvaG5AZ251Lm9yZz4KCgkqIHJzNjAwMC5jIChyczYwMDBfc3RhY2tfaW5mbyk6IFVzZSBpZiA9PSAwIGZvciBzaXplcy4KCShvdXRwdXRfZXBpbG9nKTogVXNlIGlmICE9IDAgZm9yIG9mZnNldC4KCShyczYwMDBfZmF0YWxfYmFkX2FkZHJlc3MpOiBQcmVwYXJlIGZvciBJbnRsLgoJKiByczYwMDAuaCAocnM2MDAwX2ZhdGFsX2JhZF9hZGRyZXNzKTogRGVjbGFyZS4KCSogcnM2MDAwLm1kIChtb3ZzZmNjLCBtb3ZkZmNjKTogVXNlIGVsc2UgaWYuCgkoZWxmX2hpZ2gpOiBVc2Uge2xpdXxsaXN9LgoJKGVsZl9sb3cpOiBVc2Uge2NhbHxsYX0uICBSZW1vdmUgJWEgdGVtcGxhdGUgZnJvbSBvbGQgbW5lbW9uaWNzLgoJKG1vdnNpKTogVXNlIHJzNjAwMF9mYXRhbF9iYWRfYWRkcmVzcy4KClN1biBBdWcgMTYgMDE6NTM6MjEgMTk5OCAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIHJlbG9hZC5jIChmaW5kX2VxdWl2X3JlZyk6IFJlamVjdCBlcXVpdmFsZW5jZXMgc2VwYXJhdGVkCglieSBhIHZvbGF0aWxlIGluc3RydWN0aW9uLgoKU3VuIEF1ZyAxNiAwMDoyMTo0NCAxOTk4ICBGcmFueiBTaXJsICA8RnJhbnouU2lybC1rZXJuZWxAbGF1dGVyYmFjaC5jb20+CgoJKiByczYwMDAvbGludXguaCAoQ1BQX09TX0RFRkFVTFRfU1BFQyk6IERlZmluZS4KClNhdCBBdWcgMTUgMjA6NTE6MzUgMTk5OCAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGFscGhhLm1kIChtb3ZzaWNjKTogRml4IG1vZGUgbWlzbWF0Y2guCgpTYXQgQXVnIDE1IDIwOjIyOjMzIDE5OTggIEguSi4gTHUgIChoamxAZ251Lm9yZykKCgkqIGNvbmZpZy9hbHBoYS9hbHBoYS5oIChBU01fT1VUUFVUX01JX1RIVU5LKTogSGFuZGxlIGFnZ3JlZ2F0ZWQKCXJldHVybiB0eXBlLgoJKiBjb25maWcvYWxwaGEvd2luLW50LmggKEFTTV9PVVRQVVRfTUlfVEhVTkspOiBMaWtld2lzZS4KClNhdCBBdWcgMTUgMDg6Mzk6NDkgMTk5OCAgRGF2aWQgUy4gTWlsbGVyICA8ZGF2ZW1AcGllcmRvbC5jb2JhbHRtaWNyby5jb20+CgoJKiBjb25maWcvc3BhcmMvc3BhcmMubWQgKG1vdnNpX2xvX3N1bV9waWNfbGFiZWxfcmVnKTogUmVtb3ZlCgl3cml0ZS1vbmx5IG1vZGlmaWVyIGZyb20gb3BlcmFuZCAxIGNvbnN0cmFpbnQuCgpTYXQgQXVnIDE1IDA2OjI4OjE5IDE5OTggIERhdmlkIFMuIE1pbGxlciAgPGRhdmVtQHBpZXJkb2wuY29iYWx0bWljcm8uY29tPgoKCSogY29uZmlnL3NwYXJjL3NwYXJjLmMgKHNwYXJjX2VtaXRfc2V0X2NvbnN0NjRfcXVpY2sxKTogSWYKCWVtaXR0aW5nIGEgWE9SIG9mIC0xIGF0IHRoZSBlbmQsIGVtaXQgYSBOT1QgaW5zdGVhZCBmb3IgY29tYmluZSdzCglzYWtlLgoJKHNwYXJjX2VtaXRfc2V0X2NvbnN0NjQpOiBMaWtld2lzZSwgYWxzbyB3aGVuIGNvbXB1dGluZyB0cmFpbGluZwoJYml0cyBkbyBub3QgbmVnYXRlIGxvd19iaXRzIGFuZCBtYWtlIGZhc3RfaW50IGFuIGludC4KCkZyaSBBdWcgMTQgMjE6MDc6MDMgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogbG9vcC5jIChhZGRfbGFiZWxfbm90ZXMpOiBEbyBub3QgaWdub3JlIHJlZmVyZW5jZXMgdG8gbGFiZWxzCgliZWZvcmUgZGlzcGF0Y2ggdGFibGVzLiAgTWlycm9ycyBBcHIgOCBjaGFuZ2UgdG8gbWFya19qdW1wX2xhYmVsLgoJKiBnY3NlLmMgKGFkZF9sYWJlbF9ub3Rlcyk6IFNpbWlsYXJseS4KCgkqIHBhLmggKEFTTV9PVVRQVVRfTUlfVEhVTkspOiBTdHJpcCBuYW1lIGVuY29kaW5nLgoKCSogbTY4ay5tZCAoYWRkZGlfZGlsc2hyMzIpOiBPbmUgb2YgdGhlIG9wZXJhbmRzIG11c3QgYmUgYSByZWdpc3Rlci4KCShhZGRkaV9kaXNobDMyKTogU2ltaWxhcmx5LgoKRnJpIEF1ZyAxNCAxNDoxMjo1OSAxOTk4ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBpMzg2LmggKE1PREVTX1RJRUFCTEVfUCk6IFJlb3JnYW5pemUgdG8gc2h1dCB1cCB3YXJuaW5ncy4KCSogYWxpYXMuYyAobWVtcmVmc19jb25mbGljdF9wKTogQWRkIGJyYWNlcyB0byBzaHV0IHVwIHdhcm5pbmdzLgoJKiBjc2UuYyAoY3NlX2Jhc2ljX2Jsb2NrKTogQWRkIHBhcmVucyB0byBzaHV0IHVwIHdhcm5pbmdzLgoKRnJpIEF1ZyAxNCAxMjo1ODoyMSAxOTk4ICBEYXZpZCBTLiBNaWxsZXIgIDxkYXZlbUBwaWVyZG9sLmNvYmFsdG1pY3JvLmNvbT4KCgkqIGNvbmZpZy9zcGFyYy9zcGFyYy5jIChzcGFyY19lbWl0X3NldF9jb25zdDY0X3F1aWNrMiwKCXNwYXJjX2VtaXRfc2V0X2NvbnN0NjRfbG9uZ3dheSwgY29uc3Q2NF9pc18yaW5zbnMsCgljcmVhdGVfc2ltcGxlX2ZvY3VzX2JpdHMsIHNwYXJjX2VtaXRfc2V0X2NvbnN0NjQpOiBGaXggbW9yZSBidWdzCglpbiA2NC1iaXQgY29uc3RhbnQgZm9ybWF0aW9uLgoJKiBjb25maWcvc3BhcmMvc3BhcmMubWQgKHNuZXNpX3plcm9fZXh0ZW5kIHNwbGl0KTogR2VuZXJhdGUKCXJ0bCBmb3IgYWRkeCBub3Qgc3VieC4KCShkZWZpbmVfaW5zbiBtb3ZkaV9jb25zdDY0X3NwZWNpYWwpOiBNYWtlIGF2YWlsYWJsZSBldmVuIHdoZW4KCUhPU1RfQklUU19QRVJfV0lERV9JTlQgaXMgbm90IDY0LgoJKG1vdmRpX2xvX3N1bV9zcDY0X2NpbnQsIG1vdmRpX2hpZ2hfc3A2NF9jaW50KTogUmVtb3ZlLgoJKGxvc3VtX2RpX21lZGxvdywgc2V0aG0sIHNldGxvKTogTWFrZSBvcDIgc3ltYm9saWNfb3BlcmFuZC4KCShjbXBfc2lxaV90cnVuY19zZXQsIGNtcF9kaXFpX3RydW5jX3NldCk6IEVuY2Fwc3VsYXRlIGJvdGgKCWluc3RhbmNlcyBvZiBvcGVyYW5kIDEgaW5zaWRlIGEgUUkgc3VicmVnLgoJKHhvcmRpM19zcDY0X2RibCk6IFJlbW92ZSAnJScgY29uc3RyYWludCBmb3Igb3AxLgoJKG9uZV9jbXBsZGkyX3NwNjQpOiBGaXggb3V0cHV0IHN0cmluZy4KCShvbmVfY21wbHNpMl9ub3RfbGl2ZWcwKTogUmV3cml0ZSB0byByZW1vdmUgdW5uZWVkZWQgZXh0cmEKCWFsdGVybmF0aXZlIGNhc2UuCgkodW5uYW1lZCBhcmNoNjQgYXNoaWZ0IERJKTogVHJ1bmNhdGUgc2hpZnQgY291bnQgaWYgZ3JlYXRlciB0aGFuCgk2Mywgbm90IDMxLgoKRnJpIEF1ZyAxNCAyMTo1Mjo1MyAxOTk4ICBKIm9ybiBSZW5uZWNrZSAgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogZXhwci5jIChzdG9yZV9leHByKTogRG9uJ3Qgb3B0aW1pemUgYXdheSBsb2FkLXN0b3JlIHBhaXIKCXdoZW4gZWl0aGVyIHNvdXJjZSBvciBkZXN0aW5hdGlvbiBoYXZlIGEgc2lkZSBlZmZlY3QuCgpGcmkgQXVnIDE0IDE2OjUwOjEwIDE5OTggIEpvaG4gQ2FyciAgPGpmY0BtaXQuZWR1PgoKCSogZ2VucmVjb2cuYyAoYWRkX3RvX3NlcXVlbmNlKTogRmF0YWwgZXJyb3IgaWYgdGhlIG1vZGVzIG9mIHRoZQoJb3BlcmFuZHMgb2YgU0VUIGFyZSBpbmNvbXBhdGlibGUuCgoJKiBhbHBoYS5tZDogRml4IG1heCBhbmQgbWluIHBhdHRlcm5zIHNvIG1vZGVzIG9mIFNFVCBvcGVyYW5kcyBtYXRjaC4KCkZyaSBBdWcgMTQgMTI6MjI6NTUgMTk5OCAgSWFuIExhbmNlIFRheWxvciAgPGlhbkBjeWdudXMuY29tPgoKCSogY29uZmlndXJlLmluOiBBdm9pZCBbWyBieSB1c2luZyB0ZXN0IGFuZCBjaGFuZ2VxdW90ZS4KCSogY29uZmlndXJlOiBSZWJ1aWxkLgoKRnJpIEF1ZyAxNCAwMToyMjozMSAxOTk4ICBEYXZpZCBTLiBNaWxsZXIgIDxkYXZlbUBwaWVyZG9sLmNvYmFsdG1pY3JvLmNvbT4KCgkqIHJ0bC5kZWYgKENPTlNUQU5UX1BfUlRYKTogRml4IHR5cG8gaW4gc3RyaW5nIG5hbWUuCgoJKiBjb25maWcvc3BhcmMvc3BhcmMubWQgKHNlcWRpX3NwZWNpYWxfdHJ1bmMsIHNuZWRpX3NwZWNpYWxfdHJ1bmMsCglzZXFzaV9zcGVjaWFsX2V4dGVuZCwgc25lc2lfc3BlY2lhbF9leHRlbmQsIHNuZXNpX3plcm9fZXh0ZW5kIGFuZAoJc3BsaXQsIHNuZWRpX3plcm9fdHJ1bmMgYW5kIHNwbGl0LCBzZXFzaV96ZXJvX2V4dGVuZCBhbmQgc3BsaXQsCglzZXFkaV96ZXJvX3RydW5jIGFuZCBzcGxpdCwgcGljX2xvX3N1bV9kaSwgcGljX3NldGhpX2RpLAoJbW92ZGlfY2Nfc3A2NF90cnVuYywgbW92ZGlfY2NfcmVnX3NwNjRfdHJ1bmMsIGFkZHhfZXh0ZW5kX3NwMzIgYW5kCglzcGxpdCwgYWRkeF9leHRlbmRfc3A2NCwgc3VieF9leHRlbmRfc3A2NCwgc3VieF9leHRlbmQgYW5kIHNwbGl0KToKCUZpeCBtaXNtYXRjaGluZyBtb2RlcyBpbiBTRVQgb3BlcmFuZHMuCgkoY29uZGl0aW9uYWwgbW92ZSBwYXR0ZXJucyk6IEZpeCBmb3JtYXR0aW5nLgoJKHVubmFtZWQgc3VieCBhcmNoNjQgcGF0dGVybik6IFJlbW92ZSBkdXBsaWNhdGUgaW5zbi4KCkZyaSBBdWcgMTQgMDA6MzQ6MzQgMTk5OCAgRGF2aWQgUy4gTWlsbGVyICA8ZGF2ZW1AcGllcmRvbC5jb2JhbHRtaWNyby5jb20+CgoJKiBjb25maWcvc3BhcmMvc3BhcmMuYyAoY29uc3Q2NF9vcGVyYW5kLCBjb25zdDY0X2hpZ2hfb3BlcmFuZCk6CglHZXQgaXQgcmlnaHQgd2hlbiBIT1NUX0JJVFNfUEVSX1dJREVfSU5UIGlzIG5vdCA2NC4KCShpbnB1dF9vcGVyYW5kKTogRml4dXAgdGVzdCBmb3Igd2hhdCB3ZSBhY2NlcHQgZm9yIGNvbnN0YW50CglpbnRlZ2Vycy4KCShzcGFyY19lbWl0X3NldF9jb25zdDMyLCBzcGFyY19lbWl0X3NldF9zeW1ib2xpY19jb25zdDY0KTogR2l2ZQoJc2V0IFZPSURtb2RlLgoJKHNhZmVfY29uc3RESSk6IFJlbW92ZS4KCShzcGFyY19lbWl0X3NldF9zYWZlX0hJR0g2NCwgZ2VuX3NhZmVfU0VUNjQsIGdlbl9zYWZlX09SNjQsCglnZW5fc2FmZV9YT1I2NCk6IE5ldyBmdW5jdGlvbnMuCgkoc3BhcmNfZW1pdF9zZXRfY29uc3Q2NF9xdWljazEsIHNwYXJjX2VtaXRfc2V0X2NvbnN0NjRfcXVpY2syLAoJc3BhcmNfZW1pdF9zZXRfY29uc3Q2NF9sb25nd2F5LCBzcGFyY19lbWl0X3NldF9jb25zdDY0KTogVXNlCgl0aGVtLgoJKiBjb25maWcvc3BhcmMvc3BhcmMubWQgKGRlZmluZV9pbnNuIHhvcmRpM19zcDY0X2RibCk6IE9ubHkgbWFrZQoJYXZhaWxhYmxlIHdoZW4gSE9TVF9CSVRTX1BFUl9XSURFX0lOVCBpcyBub3QgNjQuCgkoZGVmaW5lX2luc24gbW92ZGlfc3A2NF9kYmwsIG1vdmRpX2NvbnN0NjRfc3BlY2lhbCk6IExpa2V3aXNlIGFuZAoJbW92ZSBiZWZvcmUgbW92ZGlfaW5zbl9zcDY0IHBhdHRlcm4uCgkoZGVmaW5lX2luc24gbW92ZGlfbG9fc3VtX3NwNjRfZGJsLCBtb3ZkaV9oaWdoX3NwNjRfZGJsKTogUmVtb3ZlLgoJKGRlZmluZV9pbnNuIHNldGhpX2RpX21lZGxvdywgc2V0aDQ0LCBzZXRtNDQsIHNldGhoKTogVXNlCglzeW1ib2xpY19vcGVyYW5kIGFzIHByZWRpY2F0ZSBmb3Igc2Vjb25kIG9wZXJhbmQuCgkoREltb2RlIG1pbnVzIHNwbGl0IG9uIGFyY2gzMiwgbmVnc2kyIGV4cGFuZGVyLCBvbmVfY21wbHNpMgoJZXhwYW5kZXIpOiBHaXZlIHNldCBWT0lEbW9kZS4KCkZyaSBBdWcgMTQgMDE6NDU6MDYgMTk5OCAgTXVtaXQgS2hhbiAgPGtoYW5AeHJheWxpdGgud2lzYy5lZHU+CgoJKiBpMzg2L2N5Z3dpbjMyIChERUZBVUxUX1BDQ19TVFJVQ1RfUkVUVVJOKTogRGVmaW5lLgoKRnJpIEF1ZyAxNCAwMTo0MDoyMSAxOTk4ICBHZW9mZnJleSBLZWF0aW5nICA8Z2VvZmZrQG96ZW1haWwuY29tLmF1PgoKCSogcnM2MDAwL2xpbnV4LmggKExJTktfU1BFQyk6IFBhc3MgLUcgYXJncyB0byB0aGUgbGlua2VyLgoKRnJpIEF1ZyAxNCAwMToyMzoyMyAxOTk4ICBSaWNoYXJkIEVhcm5zaGF3ICAocmVhcm5zaGFAYXJtLmNvbSkKCgkqIGFybS9uZXRic2QuaCAoVEFSR0VUX0RFRkFVTFQpOiBEZWZhdWx0IGluY2x1ZGVzIHNvZnR3YXJlIGZsb2F0aW5nCglwb2ludC4KCShDUFBfRkxPQVRfREVGQVVMVF9TUEVDKTogUmUtZGVmaW5lIGFjY29yZGluZ2x5LgoKRnJpIEF1ZyAxNCAwMToxOTowOCAxOTk4ICBSb2JlcnQgTGlwZSAgPHJvYmVydGxAZGdpaS5jb20+CgoJKiBpbnN0YWxsLnRleGk6IFZhcmlvdXMgU0NPIE9wZW5TZXJ2ZXIgdHdlYWtzLgoKVGh1IEF1ZyAxMyAyMDoxNDo0MCAxOTk4ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CgoJKiByZWxvYWQxLmMgKGVsaW1pbmF0ZV9yZWdzX2luX2luc24pOiBIYW5kbGUgYW5vdGhlciBjYXNlIHdoZW4KCWVsaW1pbmF0aW5nIHRoZSBmcmFtZSBwb2ludGVyIHRvIHRoZSBoYXJkIGZyYW1lIHBvaW50ZXIuICBBZGQKCW1pc3NpbmcJZXAtPnRvX3J0eCBjaGVjayB0byBvbmUgZXhpc3RpbmcgY2FzZS4KCgkqIG1pcHMvbWlwcy5tZCAobW92aGlfaW50ZXJuYWwyKzIpOiBGaXggdHlwbyBtZW06U0kgLT4gbWVtOkhJLgoKVGh1IEF1ZyAxMyAxNzowODoxMSAxOTk4ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiB0cmVlLmg6IERlLWNvbmRpdGlvbmFsaXplIGluaXRfcHJpb3JpdHkgY29kZS4KCgkqIG1pcHMuaCAoTk1fRkxBR1MpOiBDaGFuZ2UgZnJvbSAtQnAgdG8gLUJuLgoJKiBjb2xsZWN0Mi5jIChOTV9GTEFHUyk6IENoYW5nZSBmcm9tIC1wIHRvIC1uLgoKCSogY29uZmlndXJlLmluOiBUdXJuIG9uIGNvbGxlY3QyIGZvciBtaXBzdHgzOS1lbGYuCglIYW5kbGUgdXNlX2NvbGxlY3QyPW5vIHByb3Blcmx5LgoKCSogYy1jb21tb24uYzogRGUtY29uZGl0aW9uYWxpemUgaW5pdF9wcmlvcml0eSBjb2RlLgoJKiBjb2xsZWN0Mi5jIChleHRyYWN0X2luaXRfcHJpb3JpdHksIHNvcnRfaWRzKTogTmV3IGZucy4KCShtYWluKTogQ2FsbCBzb3J0X2lkcy4KCU1vdmUgc2VxdWVuY2VfbnVtYmVyIHRvIGZpbGUgc2NvcGUuCgoJKiBjb25maWd1cmUuaW46IEhhbmRsZSAtLWVuYWJsZS1pbml0LXByaW9yaXR5LgoJKiBjLWNvbW1vbi5jIChhdHRycyk6IEFkZCBBX0lOSVRfUFJJT1JJVFkuCgkoaW5pdF9hdHRyaWJ1dGVzLCBkZWNsX2F0dHJpYnV0ZXMpOiBMaWtld2lzZS4KCSogdHJlZS5oIChERUZBVUxUX0lOSVRfUFJJT1JJVFksIE1BWF9JTklUX1BSSU9SSVRZKTogTmV3IG1hY3Jvcy4KCSogdHJlZS5jIChnZXRfZmlsZV9mdW5jdGlvbl9uYW1lX2xvbmcpOiBTcGxpdCBvdXQuLi4KCShnZXRfZmlsZV9mdW5jdGlvbl9uYW1lKTogLi4uZnJvbSBoZXJlLgoKVGh1IEF1ZyAxMyAxNjowOTo1MyAxOTk4ICBNYXJ0aW4gdm9uIExvZXdpcyAgPGxvZXdpc0BpbmZvcm1hdGlrLmh1LWJlcmxpbi5kZT4KCgkqIGV4cHIuYyAoc2FmZV9mcm9tX3ApOiBDaGFuZ2UgY29kZSB0byBFUlJPUl9NQVJLIG9ubHkgd2hlbiBub3QKCWFjY2Vzc2luZyBub2Rlcy4KClRodSBBdWcgMTMgMTU6MjQ6NDggMTk5OCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogdG9wbGV2LmMgKGRpc3BsYXlfaGVscCk6IEFkZCBicmFjZXMgdG8gc2h1dCB1cCB3YXJuaW5ncy4KCSogdHJlZS5jIChzaW1wbGVfY3N0X2VxdWFsKTogTGlrZXdpc2UuCgoJKiBmb2xkLWNvbnN0LmMgKG5vbl9sdmFsdWUpOiBEb24ndCBkZWFsIHdpdGggbnVsbCBwb2ludGVyCgljb25zdGFudHMgaGVyZS4KCShmb2xkLCBjYXNlIENPTVBPVU5EX0VYUFIpOiBXcmFwIGEgY29uc3RhbnQgMCBpbiBhIE5PUF9FWFBSLgoKCSogYy10eXBlY2suYyAoaW5pdGlhbGl6ZXJfY29uc3RhbnRfdmFsaWRfcCk6IEFsbG93IGNvbnZlcnNpb24gb2YgMAoJb2YgYW55IHNpemUgdG8gYSBwb2ludGVyLgoKVGh1IEF1ZyAxMyAxMjo1MzoxMyAxOTk4ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CgoJKiBpMzg2L3dpbm50LmMgKGkzODZfcGVfYXNtX2ZpbGVfZW5kKTogQ2hlY2sgVFJFRV9TWU1CT0xfUkVGRVJFTkNFRC4KCldlZCBBdWcgMTIgMTc6MjU6MTggMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogbW4xMDMwMC5jIChSRUdfU0FWRV9CWVRFUyk6IE9ubHkgcmVzZXJ2ZSBzcGFjZSBmb3IgcmVnaXN0ZXJzCgl3aGljaCB3aWxsIGJlIHNhdmVkLgoJKiBtbjEwMzAwLm1kIChwcm9sb2d1ZSBpbnNuKTogT25seSBzYXZlIHJlZ2lzdGVycyB3aGljaCBuZWVkIHNhdmluZy4KCShlcGlsb2d1ZSBpbnNuKTogU2ltaWxhcmx5LgoKCSogbW4xMDMwMC5jLCBtbjEwMzAwLmgsIG1uMTAzMDAubWQ6IFJlbW92ZSAiZ2xvYmFsIHplcm8gcmVnaXN0ZXIiCglvcHRpbWl6YXRpb25zLgoKV2VkIEF1ZyAxMiAxMjozOToxNiAxOTk4ICBHYXZpbiBSb21pZy1Lb2NoICA8Z2F2aW5AY3lnbnVzLmNvbT4KCgkqIG1pcHMvbWlwcy5oIChFTkNPREVfU0VDVElPTl9JTkZPKTogU2V0IFNZTUJPTF9SRUZfRkxBRyBmb3IKCVZBUl9ERUNMJ3MgaW4gZ3AgYWRkcmVzc2FibGUgc2VjdGlvbnMuCgpUdWUgQXVnIDExIDIzOjAyOjMxIDE5OTggIEpvaG4gQ2FyciAgPGpmY0BtaXQuZWR1PgoKCSogc3BhcmMuYzogQ2hhbmdlIHJldHVybiA8ZXhwPiB0byA8ZXhwPjsgcmV0dXJuOyBpbiBmdW5jdGlvbnMKCXJldHVybmluZyB2b2lkLgoJKiBzcGFyYy5tZDogQWRkIGVtcHR5IHNlbWljb2xvbiBzdGF0ZW1lbnQgYWZ0ZXIgZmluYWwgbGFiZWwgaW4KCW1vdmUgZXhwYW5kZXJzLgoKVHVlIEF1ZyAxMSAyMjo0MjowMSAxOTk4ICBEYXZpZCBTLiBNaWxsZXIgIDxkYXZlbUBwaWVyZG9sLmNvYmFsdG1pY3JvLmNvbT4KCgkqIGNvbmZpZy9zcGFyYy9zcGFyYy5tZCAoZGVmaW5lX2luc24gYWRkeF9leHRlbmQpOiBSZW5hbWUgdG8KCWFkZHhfZXh0ZW5kX3NwNjQsIG9ubHkgYWxsb3cgd2hlbiBUQVJHRVRfQVJDSDY0LgoJKGRlZmluZV9pbnNuIGFkZHhfZXh0ZW5kX3NwMzIgYW5kIHNwbGl0KTogVmVyc2lvbiB0aGF0IHdvcmtzIHdoZW4KCW5vdCBUQVJHRVRfQVJDSDY0LgoJKGRlZmluZV9pbnNuIHN1YnhfZXh0ZW5kKTogTGlrZXdpc2UuCgkoZGVmaW5lX3NwbGl0IGFkZGRpMyBhbmQgc3ViZGkzIHdpdGggemVybyBleHRlbnNpb24pOiBGaXh1cCBhbmQKCWNvcnJlY3QgYnVncyB3aGVuIG5vdCBUQVJHRVRfQVJDSDY0LgoKVHVlIEF1ZyAxMSAxNjowNDozNCAxOTk4ICBKb2huIENhcnIgIDxqZmNAbWl0LmVkdT4KCgkqIGV4Y2VwdC5jIChzZXRfZXhjZXB0aW9uX2xhbmdfY29kZSwgc2V0X2V4Y2VwdGlvbl92ZXJzaW9uX2NvZGUpOgoJVXNlIHByb3RvdHlwZS1zdHlsZSBkZWZpbml0aW9uIGlmIF9fU1REQ19fLCB0byBtYXRjaCBkZWNsYXJhdGlvbgoJaW4gZXhjZXB0LmguCgoJKiBnZW5lbWl0LmM6IENoYW5nZSBGQUlMIGFuZCBET05FIG1hY3JvcyBub3QgdG8gdXNlIGxvb3BzLgoKVHVlIEF1ZyAxMSAxMjoyNzowMyAxOTk4ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CgoJKiBkd2FyZjJvdXQuYyAoQVNNX09VVFBVVF9EV0FSRl9BRERSX0NPTlNUKTogVXNlCglBU01fT1VUUFVUX0RXQVJGMl9BRERSX0NPTlNUIGlmIGRlZmluZWQuCgoJKiBtaXBzL21pcHMubWQgKHJlbG9hZF9vdXRzaSk6IFVzZSBNMTZfUkVHX1Agd2hlbiBUQVJHRVRfTUlQUzE2LgoKVHVlIEF1ZyAxMSAxODoxMjo1MyAxOTk4ICBEYXZlIExvdmUgIDxkLmxvdmVAZGwuYWMudWs+CgoJKiBSRUFETUUuZzc3OiBVcGRhdGUgZnJvbSBDcmFpZy4KClR1ZSBBdWcgMTEgMDQ6NDY6MDEgMTk5OCAgRGF2aWQgUy4gTWlsbGVyICA8ZGF2ZW1AcGllcmRvbC5jb2JhbHRtaWNyby5jb20+CgoJKiBjb25maWcvc3BhcmMvc3BhcmMuYyAoc3BhcmNfZW1pdF9zZXRfY29uc3QzMik6IElOVFZBTCBpcyBvZgoJdHlwZSBIT1NUX1dJREVfSU5ULgoJKHNhZmVfY29uc3RESSBzcGFyY19lbWl0X3NldF9jb25zdDY0X3F1aWNrMSwKCXNwYXJjX2VtaXRfc2V0X2NvbnN0NjRfcXVpY2syLCBzcGFyY19lbWl0X3NldF9jb25zdDY0X2xvbmd3YXksCglhbmFseXplXzY0Yml0X2NvbnN0YW50LCBjb25zdDY0X2lzXzJpbnNucywKCWNyZWF0ZV9zaW1wbGVfZm9jdXNfYml0cyk6IEZpeCBzb21lIGJ1Z3Mgd2hlbiBjb21waWxlZCBvbiByZWFsCgk2NC1iaXQgaG9zdHMuCgkoZnVuY3Rpb25fYXJnX3JlY29yZF92YWx1ZV8zLCBmdW5jdGlvbl9hcmdfcmVjb3JkX3ZhbHVlXzIsCglmdW5jdGlvbl9hcmdfcmVjb3JkX3ZhbHVlKTogQWRkIGZ1bGx5IHByb3RvdHlwZWQgZm9yd2FyZCBkZWNscy4KCSogY29uZmlnL3NwYXJjL3NwYXJjLm1kIChkZWZpbmVfaW5zbiBjbXBzaV9pbnNuX3NwMzIpOiBSZW5hbWUgYmFjawoJdG8gY21wc2lfaW5zbiBhbmQgdXNlIG9uIGJvdGggNjQgYW5kIDMyIGJpdCB0YXJnZXRzLgoJKGRlZmluZV9pbnNuIGNtcHNpX2luc25fc3A2NCk6IFJlbW92ZS4KCShkZWZpbmVfZXhwYW5kIHplcm9fZXh0ZW5kc2lkaTIpOiBBbGxvdyBmb3IgMzItYml0IHRhcmdldCB0b28uCgkoZGVmaW5lX2luc24gemVyb19leHRlbmRzaWRpMl9pbnNuKTogUmVuYW1lIHRvCgl6ZXJvX2V4dGVuZHNpZGkyX2luc25fc3A2NC4KCShkZWZpbmVfaW5zbiB6ZXJvX2V4dGVuZHNpZGkyX2luc25fc3AzMik6IE5ldyBwYXR0ZXJuIGFuZAoJYXNzb2NpYXRlZCBmb3JjZWQgc3BsaXQgZm9yIGl0LgoKCSogY29uZmlnL3NwYXJjL3NwYXJjLmMgKGNvbnN0NjRfb3BlcmFuZCwgY29uc3Q2NF9oaWdoX29wZXJhbmQpOgoJTmV3IHByZWRpY2F0ZXMuCgkqIGNvbmZpZy9zcGFyYy9zcGFyYy5oOiBEZWNsYXJlIHRoZW0uCgkoUFJFRElDQVRFX0NPREVTKTogQWRkIHRoZW0uCgkqIGNvbmZpZy9zcGFyYy9zcGFyYy5tZCAobW92ZGlfbG9fc3VtX3NwNjRfZGJsLAoJbW92ZGlfaGlnaF9zcDY0X2RibCwgeG9yZGkzX3NwNjRfZGJsKTogVXNlIHRoZW0uCgpNb24gQXVnIDEwIDIyOjU3OjI0IDE5OTggIEpvaG4gQ2FyciAgPGpmY0BtaXQuZWR1PgoKCSogY29uZmlnL3NwYXJjL3NwYXJjLm1kIChkZWZpbmVfaW5zbiBqdW1wKTogT3V0cHV0IGJhLHB0IG5vdCBiLHB0CglpbiB2OSBjYXNlIGFzIHRoZSBsYXR0ZXIgbWFrZXMgdGhlIFNvbGFyaXMgYXNzZW1ibGVyIGNyYXNoLgoKTW9uIEF1ZyAxMCAyMjozOTowOSAxOTk4ICBEYXZpZCBTLiBNaWxsZXIgIDxkYXZlbUBwaWVyZG9sLmNvYmFsdG1pY3JvLmNvbT4KCgkqIGNvbmZpZy9zcGFyYy9zcGFyYy5jIChpbnB1dF9vcGVyYW5kKTogRG8gbm90IGFjY2VwdCBhIExPX1NVTSBNRU0KCWZvciBURm1vZGUgd2hlbiAhdjkuICBXZSByZXF1aXJlIG9mZnNldHRhYmxlIG1lbW9yeSBhZGRyZXNzZXMuCgkqIGNvbmZpZy9zcGFyYy9zcGFyYy5oIChBTFRFUl9IQVJEX1NVQlJFRyk6IEhhbmRsZSBURm1vZGUgdG8KCURGbW9kZSByZWdpc3RlciBudW1iZXIgY29udmVyc2lvbnMuCgkqIGNvbmZpZy9zcGFyYy9zcGFyYy5tZCAoZGVmaW5lX3NwbGl0IERGbW9kZSBtb3Zlcyk6IElmIHJlZ2lzdGVyCglpcyBhIFNVQlJFRyBkbyBhbHRlcl9zdWJyZWcgb24gaXQgYmVmb3JlIHVzaW5nLgoJKGRlZmluZV9leHBhbmQgbW92dGYpOiBGaXh1cCBjb21tZW50IGFib3V0IGFsaWdubWVudCBvbiB2OS4KCShkZWZpbmVfc3BsaXQgVEZtb2RlIG1vdmVzKTogRG9uJ3QgdXNlIGdlbl97aGlnaCxsb3d9cGFydCwgY3JlYXRlCglleHBsaWNpdCBTVUJSRUdzIGluc3RlYWQuCgpNb24gQXVnIDEwIDE5OjAyOjU1IDE5OTggIEpvaG4gQ2FyciAgPGpmY0BtaXQuZWR1PgoKCSogTWFrZWZpbGUuaW4gKG1iY2hhci5vKTogRGVwZW5kIG9uIG1iY2hhci5jLgoKTW9uIEF1ZyAxMCAwNDoyODoxMyAxOTk4ICBEYXZpZCBTLiBNaWxsZXIgIDxkYXZlbUBwaWVyZG9sLmNvYmFsdG1pY3JvLmNvbT4KCQkJICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCVJld3JpdGUgU1BBUkMgYmFja2VuZCBmb3IgYmV0dGVyIGNvZGUgZ2VuZXJhdGlvbiBhbmQKCWltcHJvdmVkIHNwYXJjNjQgc3VwcG9ydC4KCSogY29uZmlnL3NwYXJjL3NwNjQtZWxmLmg6IFNldCBKVU1QX1RBQkxFU19JTl9URVhUX1NFQ1RJT04gdG8KCXplcm8uCgkqIGNvbmZpZy9zcGFyYy9zeXN2NC5oOiBMaWtld2lzZS4KCSogY29uZmlnL3NwYXJjL3NwYXJjLmMgKHY4cGx1c19yZWdjbXBfcCwgc3BhcmNfb3BlcmFuZCwKCW1vdmVfb3BlcmFuZCwgdjhwbHVzX3JlZ2NtcF9vcCwgZW1pdF9tb3ZlX3NlcXVlbmNlLAoJc2luZ2xlbW92ZV9zdHJpbmcsIGRvdWJsZW1vdmVfc3RyaW5nLCBtZW1fYWxpZ25lZF84LAoJb3V0cHV0X21vdmVfZG91YmxlLCBvdXRwdXRfbW92ZV9xdWFkLCBvdXRwdXRfZnBfbW92ZV9kb3VibGUsCgltb3ZlX3F1YWRfZGlyZWN0aW9uLCBvdXRwdXRfZnBfbW92ZV9xdWFkLCBvdXRwdXRfc2NjX2luc24pOgoJUmVtb3ZlLgoJKHNtYWxsX2ludF9vcl9kb3VibGUpOiBOZXcgcHJlZGljYXRlLgoJKGdlbl9jb21wYXJlX3JlZyk6IFJlbW92ZSBUQVJHRVRfVjhQTFVTIGNtcGRpX3Y4cGx1cyBlbWlzc2lvbi4KCShsZWdpdGltaXplX3BpY19hZGRyZXNzKTogRW1pdCBtb3ZzaV97aGlnaCxsb19zdW19X3BpYyBpbnN0ZWFkIG9mCglvbGQgcGljX3tzZXRoaSxsb19zdW19X3NpIHBhdHRlcm5zLgoJKG1lbV9taW5fYWxpZ25tZW50KTogTmV3IGdlbmVyaWMgZnVuY3Rpb24gdG8gcmVwbGFjZQoJbWVtX2FsaWduZWRfOCwgd2hpY2ggdXNlcyBSRUdOT19QT0lOVEVSX0FMSUdOIGluZm9ybWF0aW9uIHdoZW4KCWF2YWlsYWJsZSBhbmQgY2FuIHRlc3QgZm9yIGFyYml0cmFyeSBhbGlnbm1lbnRzLiAgQWxsIGNhbGxlcnMKCWNoYW5nZWQuCgkoc2F2ZV9yZWdzLCByZXN0b3JlX3JlZ3MsIGJ1aWxkX2JpZ19udW1iZXIsCglvdXRwdXRfZnVuY3Rpb25fcHJvbG9ndWUsIG91dHB1dF9jYnJhbmNoLCBvdXRwdXRfcmV0dXJuLAoJc3BhcmNfZmxhdF9zYXZlX3Jlc3RvcmUsIHNwYXJjX2ZsYXRfb3V0cHV0X2Z1bmN0aW9uX3Byb2xvZ3VlLAoJc3BhcmNfZmxhdF9vdXRwdXRfZnVuY3Rpb25fZXBpbG9ndWUpOiBQcmV0dGlmeQoJaW5zbiBvdXRwdXQuCgkob3V0cHV0X2Z1bmN0aW9uX2VwaWxvZ3VlKTogTGlrZXdpc2UgYW5kIGFkZCBjb2RlIHRvIG91dHB1dAoJZGVmZXJyZWQgY2FzZSB2ZWN0b3JzLgoJKG91dHB1dF92OWJyYW5jaCk6IExpa2V3aXNlLCBhZGQgbmV3IGFyZyBJTlNOIGFuZCB1c2UgaXQgdG8gdGFjawoJb24gYnJhbmNoIHByZWRpY3Rpb24gc2V0dGluZ3MuICBBbGwgY2FsbGVycyBjaGFuZ2VkLgoJKHByaW50X29wZXJhbmQpOiBMaWtld2lzZSBhbmQgb3V0cHV0ICVsNDQgZm9yIExPX1NVTXMgd2hlbgoJVEFSR0VUX0NNX01FRE1JRC4KCShzcGFyY19zcGxpdGRpX2xlZ2l0aW1hdGUpOiBOZXcgZnVuY3Rpb24gdG8gbWFrZSBzdXJlIERJbW9kZQoJc3BsaXRzIGNhbiBiZSBydW4gcHJvcGVybHkgd2hlbiAhYXJjaDY0LgoJKHNwYXJjX2luaXRpYWxpemVfdHJhbXBvbGluZSwgc3BhcmM2NF9pbml0aWFsaXplX3RyYW1wb2xpbmUpOgoJUmVmb3JtYXQgZXhhbXBsZSBjb2RlIGluIGNvbW1lbnRzLgoJKHNldF9leHRlbmRzKTogUmVtb3ZlIFVOU1BFQy92OHBsdXNfY2xlYXJfaGlnaCBjYXNlLgoJKHNwYXJjX2FkZHJfZGlmZl9saXN0LCBzcGFyY19hZGRyX2xpc3QpOiBOZXcgc3RhdGljcyB0byBrZWVwIHRyYWNrCglvZiBkZWZlcnJlZCBjYXNlIHZlY3RvcnMgd2UgbmVlZCB0byBvdXRwdXQuCgkoc3BhcmNfZGVmZXJfY2FzZV92ZWN0b3IpOiBSZWNvcmQgYSBjYXNlIHZlY3Rvci4KCShzcGFyY19vdXRwdXRfYWRkcl92ZWMsIHNwYXJjX291dHB1dF9hZGRyX2RpZmZfdmVjLAoJc3BhcmNfb3V0cHV0X2RlZmVycmVkX2Nhc2VfdmVjdG9ycyk6IE5ldyBmdW5jdGlvbnMgdG8gb3V0cHV0IHRoZW0uCgkoc3BhcmNfZW1pdF9zZXRfY29uc3QzMik6IE5ldyBmdW5jdGlvbiB0byBmb3JtIDMyLWJpdCBjb25zdGFudHMgaW4KCXJlZ2lzdGVycyB3aGVuIHRoYXQgcmVxdWlyZXMgbW9yZSB0aGFuIG9uZSBpbnN0cnVjdGlvbi4KCShzYWZlX2NvbnN0REksIHNwYXJjX2VtaXRfc2V0X2NvbnN0NjRfcXVpY2sxLAoJc3BhcmNfZW1pdF9zZXRfY29uc3Q2NF9xdWljazIsIHNwYXJjX2VtaXRfc2V0X2NvbnN0NjRfbG9uZ3dheSwKCWFuYWx5emVfNjRiaXRfY29uc3RhbnQsIGNvbnN0NjRfaXNfMmluc25zLAoJY3JlYXRlX3NpbXBsZV9mb2N1c19iaXRzLCBzcGFyY19lbWl0X3NldF9jb25zdDY0KTogTmV3IGZ1bmN0aW9ucwoJd2hpY2ggZG8gdGhlIHNhbWUgZm9yIDY0LWJpdCBjb25zdGFudHMgd2hlbiBhcmNoNjQuCgkoc3BhcmNfZW1pdF9zZXRfc3ltYm9saWNfY29uc3Q2NCk6IE5ldyBmdW5jdGlvbiB0byBlbWl0IGFkZHJlc3MKCWxvYWRpbmcgZm9yIGFsbCBjb2RlIG1vZGVscyBvbiB2OS4KCSogY29uZmlnL3NwYXJjL3NwYXJjLmggKENPTkRJVElPTkFMX1JFR0lTVEVSX1VTQUdFKTogRG8gbm90IG1ha2UKCSVnMSBmaXhlZCB3aGVuIGFyY2g2NCwgdW5maXggJWcwIHdoZW4gVEFSR0VUX0xJVkVfRzAuCgkoQUxURVJfSEFSRF9TVUJSRUcpOiBGaXggdGhpbmtvLCByZXR1cm4gUkVHTk8gKyAxIG5vdCAxLgoJKFNFQ09OREFSWV9JTlBVVF9SRUxPQURfQ0xBU1MsIFNFQ09OREFSWV9PVVRQVVRfUkVMT0FEX0NMQVNTKTogRml4CglpbmFjY3VyYWNpZXMgaW4gY29tbWVudHMsIGFkZCBzeW1ib2xpYyBhbmQgdGV4dF9zZWdtZW50IG9wZXJhbmRzCgl3aGVuIFRBUkdFVF9DTV9NRURBTlkgYW5kIFRBUkdFVF9DTV9FTUJNRURBTlkgcmVzcGVjdGl2ZWx5LiAgVXNlCglHRU5FUkFMX1JFR1MgaW4gdGhlc2UgY2FzZXMgYXMgYSB0ZW1wIFJFRyBpcyBuZWVkZWQgdG8gbG9hZCB0aGVzZQoJYWRkcmVzc2VzIGludG8gYSByZWdpc3RlciBwcm9wZXJseS4KCShFWFRSQV9DT05TVFJBSU5UKTogRG9jdW1lbnQgbW9yZSBhY2N1cmF0ZWx5LCByZW1vdmUgUSBjYXNlIGFzIGl0CglpcyBubyBsb25nZXIgdXNlZC4KCShHT19JRl9MRUdJVElNQVRFX0FERFJFU1MpOiBBbGxvdyBURm1vZGUgZm9yIExPX1NVTSBvbiB2OSBzaW5jZSBmcAoJcXVhZHMgYXJlIGd1YXJhbnRlZWQgdG8gaGF2ZSAxNi1ieXRlIGFsaWdubWVudC4KCShMRUdJVElNSVpFX0FERFJFU1MpOiBGb3IgU1lNQk9MX1JFRiwgQ09OU1QsIGFuZCBMQUJFTF9SRUYgdXNlCgljb3B5X3RvX3N1Z2dlc3RlZF9yZWcgaW5zdGVhZCBvZiBleHBsaWNpdCBMT19TVU0gYW5kIEhJR0guCgkoQVNNX09VVFBVVF9BRERSX1ZFQywgQVNNX09VVFBVVF9BRERSX0RJRkZfVkVDKTogTmV3IG1hY3JvcyBmb3IKCWRlZmVycmVkIGNhc2UgdmVjdG9yIGltcGxlbWVudGF0aW9uLgoJKEFTTV9PVVRQVVRfQUREUl9WRUNfRUxUKTogVXNlIGZwdXRjIHRvIG91dHB1dCBuZXdsaW5lLgoJKEFTTV9PVVRQVVRfQUREUl9ESUZGX0VMVCk6IFBhcmVudGhlc2l6ZSBMQUJFTCBpbiBtYWNybyBjYWxscy4KCUdlbmVyYXRlICJpbnRlcm5hbCBsYWJlbCAtIGxhYmVsIiBpbnN0ZWFkIG9mICJsYWJlbCAtIDFiIi4KCShQUklOVF9PUEVSQU5EX0FERFJFU1MpOiBGb3IgTE9fU1VNIHVzZSAlbDQ0IG9uIFRBUkdFVF9DTV9NRURNSUQuCgkoUFJFRElDQVRFX0NPREVTKTogUmVtb3ZlIHNwYXJjX29wZXJhbmQsIG1vdmVfb3BlcmFuZCwKCXY4cGx1c19yZWdjbXBfb3AuICBBZGQgc21hbGxfaW50X29yX2RvdWJsZSwgaW5wdXRfb3BlcmFuZCwgYW5kCgl6ZXJvX29wZXJhbmQuCgkoZG91YmxlbW92ZV9zdHJpbmcsIG91dHB1dF9ibG9ja19tb3ZlLCBvdXRwdXRfZnBfbW92ZV9kb3VibGUsCglvdXRwdXRfZnBfbW92ZV9xdWFkLCBvdXRwdXRfbW92ZV9kb3VibGUsIG91dHB1dF9tb3ZlX3F1YWQsCglvdXRwdXRfc2NjX2luc24sIHNpbmdsZW1vdmVfc3RyaW5nLCBtZW1fYWxpZ25lZF84LCBtb3ZlX29wZXJhbmQsCglzcGFyY19vcGVyYW5kLCB2OHBsdXNfcmVnY21wX29wLCB2OHBsdXNfcmVnY21wX3ApOiBSZW1vdmUgZXh0ZXJucy4KCShzcGFyY19lbWl0X3NldF9jb25zdDMyLCBzcGFyY19lbWl0X3NldF9jb25zdDY0LAoJc3BhcmNfZW1pdF9zZXRfc3ltYm9saWNfY29uc3Q2NCwgaW5wdXRfb3BlcmFuZCwgemVyb19vcGVyYW5kLAoJbWVtX21pbl9hbGlnbm1lbnQsIHNtYWxsX2ludF9vcl9kb3VibGUpOiBBZGQgZXh0ZXJucy4KCSogY29uZmlnL3NwYXJjL3NwYXJjLm1kOiBEb2N1bWVudCB0aGUgbWFueSB1c2VzIG9mIFVOU1BFQyBhbmQKCVVOU1BFQ19WT0xBVElMRSBpbiB0aGlzIGJhY2tlbmQuCgkoZGVmaW5lX2Z1bmN0aW9uX3VuaXQgaWV1KTogUmVuYW1lIHRvIGlldV91bm5hbWVkLiAgQWRkIG1vdmUgYW5kCgl1bmFyeSB0byB0eXBlcyB3aGljaCBleGVjdXRlIGluIGl0LgoJKGRlZmluZV9mdW5jdGlvbl91bml0IGlldV9zaGlmdCk6IFJlbmFtZSB0byBpZXUwLgoJKGRlZmluZV9mdW5jdGlvbl91bml0IGlldTEpOiBOZXcsIGV4ZWN1dGVzIGNvbXBhcmUsIGNhbGwsIGFuZAoJdW5jb25kX2JyYW5jaCB0eXBlIGluc25zLgoJKGRlZmluZV9mdW5jdGlvbl91bml0cyBmb3IgdHlwZSBmZGl2cywgZmRpdmQsIGZzcXJ0KTogVGhlc2UKCWV4ZWN1dGUgaW4gdGhlIGZwdSBtdWx0aXBseSB1bml0IG5vdCB0aGUgYWRkZXIgb24gVWx0cmFTUEFSQy4KCShkZWZpbmVfZXhwYW5kIGNtcGRpKTogRGlzYWxsb3cgVEFSR0VUX1Y4UExVUy4KCShkZWZpbmVfaW5zbiBjbXBzaV9pbnNuKTogUmVuYW1lIHRvIGNtcHNpX2luc25fc3AzMi4KCShkZWZpbmVfaW5zbiBjbXBzaV9pbnNuX3NwNjQpOiBOZXcsIHNhbWUgYXMgc3AzMiB2YXJpYW50IGV4Y2VwdCBpdAoJYWxsb3dzIHRoZSBhcml0aF9kb3VibGVfb3BlcmFuZCBwcmVkaWNhdGUgYW5kIHJISSBjb25zdHJhaW50IHdoZW4KCVRBUkdFVF9BUkNINjQuCgkoZGVmaW5lX2luc24gY21wZGlfc3A2NCwgY21wc2ZfZnBlLCBjbXBkZl9mcGUsIGNtcHRmX2ZwZSwKCWNtcHNmX2ZwLCBjbXBkZl9mcCwgY21wdGZfZnAsIHNsdHVfaW5zbiwgbmVnX3NsdHVfaW5zbiwKCW5lZ19zbHR1X21pbnV4X3gsIG5lZ19zbHR1X3BsdXNfeCwgc2dldV9pbnNuLCBuZWdfc2dldV9pbnNuLAoJc2x0dV9wbHVzX3gsIHNsdHVfcGx1c194LCBzbHR1X3BsdXNfeF9wbHVzX3ksIHhfbWludXNfc2x0dSwKCXNnZXVfcGx1c194LCB4X21pbnVzX3NnZXUsIG1vdnFpX2NjX3NwNjQsIG1vdmhpX2NjX3NwNjQsCgltb3ZzaV9jY19zcDY0LCBtb3ZkaV9jY19zcDY0LCBtb3ZzZl9jY19zcDY0LCBtb3ZkZl9jY19zcDY0LAoJbW92dGZfY2Nfc3A2NCwgbW92cWlfY2NfcmVnX3NwNjQsIG1vdmhpX2NjX3JlZ19zcDY0LAoJbW92c2lfY2NfcmVnX3NwNjQsIG1vdmRpX2NjX3JlZ19zcDY0LCBtb3ZzZl9jY19yZWdfc3A2NCwKCW1vdmRmX2NjX3JlZ19zcDY0LCBtb3Z0Zl9jY19yZWdfc3A2NCwgemVyb19leHRlbmRoaXNpMl9pbnNuLAoJY21wX3NpcWlfdHJ1bmMsIGNtcF9zaXFpX3RydW5jX3NldCwgc2lnbl9leHRlbmRoaXNpMl9pbnNuLAoJc2lnbl9leHRlbmRxaWhpMl9pbnNuLCBzaWduX2V4dGVuZHFpc2kyX2luc24sCglzaWduX2V4dGVuZHFpZGkyX2luc24sIHNpZ25fZXh0ZW5kaGlkaTJfaW5zbiwKCWV4dGVuZHNmZGYyLCBleHRlbmRzZnRmMiwgZXh0ZW5kZGZ0ZjIsIHRydW5jZGZzZjIsIHRydW5jdGZzZjIsCgl0cnVuY3RmZGYyLCBmbG9hdHNpc2YyLCBmbG9hdHNpZGYyLCBmbG9hdHNpdGYyLCBmbG9hdGRpc2YyLAoJZmxvYXRkaWRmMiwgZmxvYXRkaXRmMiwgZml4X3RydW5jc2ZzaTIsIGZpeF90cnVuY2Rmc2kyLAoJZml4X3RydW5jdGZzaTIsIGZpeF90cnVuY3NmZGkyLCBmaXhfdHJ1bmNkZmRpMiwgZml4X3RydW5jdGZkaTIsCglhZGRkaTNfc3A2NCwgYWRkc2kzLCBjbXBfY2N4X3BsdXMsIGNtcF9jY19wbHVzX3NldCwgc3ViZGlfc3A2NCwKCXN1YnNpMywgY21wX21pbnVzX2NjeCwgY21wX21pbnVzX2NjeF9zZXQsIG11bHNpMywgbXVsZGkzLAoJbXVsZGkzX3Y4cGx1cywgY21wX211bF9zZXQsIG11bHNpZGkzLCBtdWxzaWRpM192OHBsdXMsCgljb25zdF9tdWxzaWRpM192OHBsdXMsIG11bHNpZGkzX3NwMzIsIGNvbnN0X211bHNpZGkzLAoJc211bHNpM19oaWdocGFydF92OHBsdXMsIHVubmFtZWQgc3VicmVnIG11bHQsCgljb25zdF9zbXVsc2kzX2hpZ2hwYXJ0X3Y4cGx1cywgc211bHNpM19oaWdocGFydF9zcDMyLAoJY29uc3Rfc211bHNpM19oaWdocGFydCwgdW11bHNpZGkzX3Y4cGx1cywgdW11bHNpZGkzX3NwMzIsCgljb25zdF91bXVsc2lkaTMsIGNvbnN0X3VtdWxzaWRpM192OHBsdXMsIHVtdWxzaTNfaGlnaHBhcnRfdjhwbHVzLAoJY29uc3RfdW11bHNpM19oaWdocGFydF92OHBsdXMsIHVtdWxzaTNfaGlnaHBhcnRfc3AzMiwKCWNvbnN0X3VtdWxzaTNfaGlnaHBhcnQsIGRpdnNpMywgZGl2ZGkzLCBjbXBfc2Rpdl9jY19zZXQsIHVkaXZzaTMsCgl1ZGl2ZGkzLCBjbXBfdWRpdl9jY19zZXQsIHNtYWNzaSwgc21hY2RpLCB1bWFjZGksIGFuZGRpM19zcDY0LAoJYW5kc2kzLCBhbmRfbm90X2RpX3NwNjQsIGFuZF9ub3Rfc2ksIGlvcmRpM19zcDY0LCBpb3JzaTMsCglvcl9ub3RfZGlfc3A2NCwgb3Jfbm90X3NpLCB4b3JkaTNfc3A2NCwgeG9yc2kzLCB4b3Jfbm90X2RpX3NwNjQsCgl4b3Jfbm90X3NpLCBjbXBfY2NfYXJpdGhfb3AsIGNtcF9jY3hfYXJpdGhfb3AsCgljbXBfY2NfYXJpdGhfb3Bfc2V0LCBjbXBfY2N4X2FyaXRoX29wX3NldCwgY21wX2NjeF94b3Jfbm90LAoJY21wX2NjX3hvcl9ub3Rfc2V0LCBjbXBfY2N4X3hvcl9ub3Rfc2V0LCBjbXBfY2NfYXJpdGhfb3Bfbm90LAoJY21wX2NjeF9hcml0aF9vcF9ub3QsIGNtcF9jY19hcml0aF9vcF9ub3Rfc2V0LAoJY21wX2NjeF9hcml0aF9vcF9ub3Rfc2V0LCBuZWdkaTJfc3A2NCwgY21wX2NjX25lZywgY21wX2NjeF9uZWcsCgljbXBfY2Nfc2V0X25lZywgY21wX2NjeF9zZXRfbmVnLCBvbmVfY21wbGRpMl9zcDY0LCBjbXBfY2Nfbm90LAoJY21wX2NjeF9ub3QsIGNtcF9jY19zZXRfbm90LCBjbXBfY2N4X3NldF9ub3QsIGFkZHRmMywgYWRkZGYzLAoJYWRkc2YzLCBzdWJ0ZjMsIHN1YmRmMywgc3Vic2YzLCBtdWx0ZjMsIG11bGRmMywgbXVsc2YzLAoJbXVsZGYzX2V4dGVuZCwgbXVsdGYzX2V4dGVuZCwgZGl2dGYzLCBkaXZkZjMsIGRpdnNmMywgbmVndGYyLAoJbmVnZGYyLCBuZWdzZjIsIGFic3RmMiwgYWJzZGYyLCBhYnNzZjIsIHNxcnR0ZjIsIHNxcnRkZjIsIHNxcnRzZjIsCglhc2hsc2kzLCBhc2hsZGkzLCB1bm5hbWVkIERJIGFzaGlmdCwgY21wX2NjX2FzaGlmdF8xLAoJY21wX2NjX3NldF9hc2hpZnRfMSwgYXNocnNpMywgYXNocmRpMywgdW5uYW1lZCBESSBhc2hpZnRydCwKCWFzaHJkaTNfdjhwbHVzLCBsc2hyc2kzLCBsc2hyZGkzLCB1bm5hbWVkIERJIGxzaGlmdHJ0LAoJbHNocmRpM192OHBsdXMsIHRhYmxlanVtcF9zcDMyLCB0YWJsZWp1bXBfc3A2NCwgY2FsbF9hZGRyZXNzX3NwMzIsCgljYWxsX3N5bWJvbGljX3NwMzIsIGNhbGxfYWRkcmVzc19zcDY0LCBjYWxsX3N5bWJvbGljX3NwNjQsCgljYWxsX2FkZHJlc3Nfc3RydWN0X3ZhbHVlX3NwMzIsIGNhbGxfc3ltYm9saWNfc3RydWN0X3ZhbHVlX3NwMzIsCgljYWxsX2FkZHJlc3NfdW50eXBlZF9zdHJ1Y3RfdmFsdWVfc3AzMiwKCWNhbGxfc3ltYm9saWNfdW50eXBlZF9zdHJ1Y3RfdmFsdWVfc3AzMiwgY2FsbF92YWx1ZV9hZGRyZXNzX3NwMzIsCgljYWxsX3ZhbHVlX3N5bWJvbGljX3NwMzIsIGNhbGxfdmFsdWVfYWRkcmVzc19zcDY0LAoJY2FsbF92YWx1ZV9zeW1ib2xpY19zcDY0LCBicmFuY2hfc3AzMiwgYnJhbmNoX3NwNjQsCglmbHVzaF9yZWdpc3Rlcl93aW5kb3dzLCBnb3RvX2hhbmRsZXJfYW5kX3Jlc3RvcmUsCglnb3RvX2hhbmRsZXJfYW5kX3Jlc3RvcmVfdjksIGdvdG9faGFuZGxlcl9hbmRfcmVzdG9yZV92OV9zcDY0LAoJZmx1c2gsIGFsbCBsZGQvc3RkIHBlZXBob2xlcywgcmV0dXJuX3FpLCByZXR1cm5faGksIHJldHVybl9zaSwKCXJldHVybl9hZGRzaSwgcmV0dXJuX2RpLCByZXR1cm5fYWRkZGksIHJldHVybl9zZiwgYWxsIGNhbGwranVtcAoJcGVlcGhvbGVzLCB0cmFwLCB1bm5hbWVkIHRyYXAgaW5zbnMpOiBQcmV0dGlmeSBvdXRwdXQgc3RyaW5ncy4KCShkZWZpbmVfaW5zbiBhbmRkaTNfc3AzMiwgYW5kX25vdF9kaV9zcDMyLCBpb3JkaTNfc3AzMiwKCW9yX25vdF9kaV9zcDMyLCB4b3JkaTNfc3AzMiwgeG9yX25vdF9kaV9zcDMyLCBvbmVfY21wbGRpMik6CglMaWtld2lzZSBhbmQgZm9yY2UgKyBpbXBsZW1lbnQgc3BsaXRzIGZvciBpbnRlZ2VyIGNhc2VzLgoJKGRlZmluZV9pbnNuIHJldHVybl9zZl9ub19mcHUpOiBMaWtld2lzZSBhbmQgYWxsb3cgdG8gbWF0Y2ggd2hlbgoJbm8tZnB1IGJlY2F1c2Ugb2Ygb3VyIHN1YnJlZyBTRm1vZGUgc3BsaXRzLgoJKGRlZmluZV9pbnNuIHplcm9fZXh0ZW5kcWloaTIsIHplcm9fZXh0ZW5kcWlzaTJfaW5zbiwKCXplcm9fZXh0ZW5kcWlkaTJfaW5zbiwgemVyb19leHRlbmRoaWRpMl9pbnNuLAoJemVyb19leHRlbmRzaWRpMl9pbnNuLCBzaWduX2V4dGVuZHNpZGkyX2luc24pOiBMaWtld2lzZSBhbmQgdXNlCglpbnB1dF9vcGVyYW5kIGZvciBzZWNvbmQgb3BlcmFuZC4KCShjbXBfbWludXNfY2MsIGNtcF9taW51c19jY19zZXQpOiBMaWtld2lzZSBhbmQgdXNlCglyZWdfb3JfMF9vcGVyYW5kIGZvciBvcGVyYW5kIDIgc28gbmV3IHNwbGl0cyBjYW4gdXNlIGl0LgoJKGNtcF96ZXJvX2V4dGVuZHFpc2kyLCBjbXBfemVyb19leHRlbmRxaXNpMl9zZXQsIGNtcF9jY19wbHVzLAoJY21wX2NjX3hvcl9ub3QpOiBMaWtld2lzZSBhbmQgZG9uJ3QgZm9yZ2V0IHRvIGNoZWNrIFRBUkdFVF9MSVZFX0cwCgl0b28uCgkoY21wX3plcm9fZXh0cmFjdCwgY21wX3plcm9fZXh0cmFjdF9zcDY0KTogTGlrZXdpc2UgYW5kIGFsbG93CglDT05TVF9ET1VCTEVzIGZvciBvcGVyYW5kIDIuCgkoZGVmaW5lX2luc24gbW92ZV9sYWJlbF9kaSk6IExpa2V3aXNlIGFuZCBsYWJlbCBkaXN0YW5jZQoJb3B0aW1pemF0aW9uIGJlY2F1c2UgaXQgbm8gbG9uZ2VyIHdvcmtzIHdpdGggbmV3IGRlZmVycmVkIGNhc2UKCXZlY3RvciBzY2hlbWUuICBUbyBiZSByZXZpc2l0ZWQuCgkoZGVmaW5lX2luc24geF9taW51c195X21pbnVzX3NsdHUsIHhfbWludXNfc2x0dV9wbHVzX3kpOiBMaWtld2lzZQoJYW5kIGFsbG93IHJlZ19vcl8wX29wZXJhbmQgYW5kIEogY29uc3RyYWludCBmb3Igc2Vjb25kIG9wZXJhbmQuCgkoZGVmaW5lX2luc24ganVtcCk6IFNldCBicmFuY2ggcHJlZGljdCB0YWtlbiBvbiBWOS4KCShkZWZpbmVfaW5zbiB0YWJsZWp1bXApOiBFbWl0IExBQkVMX1JFRiArIFBMVVMgbWVtb3J5IGFkZHJlc3MgZm9yCgluZXcgZGVmZXJyZWQgY2FzZSB2ZWN0b3Igc2NoZW1lLgoJKGRlZmluZV9pbnNuIHBpY190YWJsZWp1bXBfMzIsIHBpY190YWJsZWp1bXBfNjQpOiBSZW1vdmUuCgkoZGVmaW5lX2luc24gbmVnZGkyX3NwMzIpOiBGb3JjZSArIGltcGxlbWVudCBzcGxpdHMuCgkoZGVmaW5lX2luc24gbmVnc2kyLCBvbmVfY21wbHNpMik6IFJlbmFtZSB0byBuZWdzaTJfbm90X2xpdmVnMCBhbmQKCW9uZV9jbXBsc2kyX25vdF9saXZlZzAgcmVzcGVjdGl2ZWx5LCBhbmQgY3JlYXRlCWV4cGFuZGVyIG9mIG9yaWdpbmFsCgluYW1lcyB3aGljaCBlbWl0IHNwZWNpYWwgcnRsIGZvciBUQVJHRVRfTElWRV9HMC4KCShkZWZpbmVfaW5zbiBjbXBkaV92OHBsdXMsIHNjY19zaSwgc2NjX2RpKTogUmVtb3ZlLgoJKGRlZmluZV9pbnNuIHNlcSwgc25lLCBzbHQsIHNnZSwgc2xlLCBzbHR1LCBzZ2V1KTogRG9uJ3QgZG8KCWdlbl9jb21wYXJlX3JlZywgRkFJTCBpbnN0ZWFkLgoJKGRlZmluZV9pbnNuIHNndHUsIHNsZXUpOiBMaWtld2lzZSBhbmQgY2hlY2sgZ2VuX3MqKCkgcmV0dXJuCgl2YWx1ZXMgd2hlbiB0cnlpbmcgdG8gcmV2ZXJzZSBjb25kaXRpb24gY29kZXMsIGlmIHRoZXkgRkFJTCB0aGVuCglkbyBsaWtld2lzZS4KCShkZWZpbmVfaW5zbiBzbmVzaV96ZXJvLCBuZWdfc25lc2lfemVybywgc25lc2lfemVyb19leHRlbmQsCglzbmVkaV96ZXJvLCBuZWdfc25lZGlfemVybywgc25lZGlfemVyb190cnVuYywgc2Vxc2lfemVybywKCW5lZ19zZXFzaV96ZXJvLCBzZXFzaV96ZXJvX2V4dGVuZCwgc2VxZGlfemVybywgbmVnX3NlcWRpX3plcm8sCglzZXFkaV96ZXJvX3RydW5jLCB4X3BsdXNfaV9uZV8wLCB4X21pbnVzX2lfbmVfMCwgeF9wbHVzX2lfZXFfMCwKCXhfbWludXNfaV9lcV8wKTogQWRkIG5ldyBzcGxpdHMgdG8gcGVyZm9ybSB0aGVzZSBtdWx0aS1pbnNuIGNhc2VzLAoJc2V0IG91dHB1dCBzdHJpbmcgdG8gIyB0byBpbmRpY2F0ZSB0aGV5IGFyZSBtYW5kYXRvcnkgc3BsaXRzLgoJKGRlZmluZV9pbnNuIHBpY19sb19zdW1fc2ksIHBpY19zZXRoaV9zaSwgcGljX2xvX3N1bV9kaSwKCXBpY19zZXRoaV9kaSwgbW92ZV9waWNfbGFiZWxfc2kpOiBSZW1vdmUuCgkoZGVmaW5lX2luc24gbW92c2lfbG93X3N1bSwgbW92c2lfaGlnaCwgbW92c2lfbG9fc3VtX3BpYywKCW1vdnNpX2hpZ2hfcGljLCBtb3ZzaV9waWNfbGFiZWxfcmVnKTogTmV3IHBhdHRlcm5zIHRvIHRha2UgdGhlaXIKCXBsYWNlLgoJKGRlZmluZV9leHBhbmQgbW92c2lfcGljX2xhYmVsX3JlZiwgZGVmaW5lX2luc24KCW1vdnNpX2hpZ2hfcGljX2xhYmVsX3JlZiwgbW92c2lfbG9fc3VtX3BpY19sYWJlbF9yZWYpOiBOZXcKCWV4cGFuZGVyIGFuZCBpbnNucyB0byBoYW5kbGUgUElDIGxhYmVsIHJlZmVyZW5jZXMgYW5kIGRlZmVycmVkCgljYXNlIHZlY3RvcnMuCgkoZGVmaW5lX2luc24gZ2V0X3BjX3ZpYV9yZHBjKTogQ29tbWVudCBvdXQgYXMgaXQgaXMgbm8gbG9uZ2VyCgl1c2VkLgoJKGRlZmluZV9leHBhbmQgbW92cWksIG1vdmhpLCBtb3ZzaSwgbW92ZGksIG1vdnNmLCBtb3ZkZiwgbW92dGYpOgoJUmV3cml0ZSB0byBub3QgdXNlIGVtaXRfbW92ZV9zZXF1ZW5jZSwgbWFrZSB1c2Ugb2YgbmV3IGNvbnN0YW50Cglmb3JtYXRpb24gY29kZSwgYW5kIG5ldyBzcGxpdHMgZm9yIGFsbCBtdWx0aS1pbnNuIGNhc2VzLgoJKGRlZmluZV9pbnNuIG1vdnFpX2luc24pOiBSZW1vdmUgc2V0aGkgY2FzZSwgaXQgY2FuIG5ldmVyIGhhcHBlbi4KCVVzZSByZWdfb3JfemVyb19vcGVyYW5kIGluc3RlYWQgb2YgY29uc3QwX3J0eCBleHBsaWNpdCB0ZXN0LAoJdXNlIGlucHV0X29wZXJhbmQgaW5zdGVhZCBvZiBtb3ZlX29wZXJhbmQgZm9yIHNvdXJjZSwgYW5kIHVzZQoJZ2VuZXJhbF9vcGVyYW5kIG5vdyBmb3IgZGVzdC4KCShkZWZpbmVfaW5zbiBtb3ZoaV9pbnNuKTogU2ltaWxhciBidXQgbGVhdmUgc2V0aGkgY2FzZS4KCShkZWZpbmVfaW5zbiBsb19zdW1fcWksIHN0b3JlX3FpLCBzdG9yZV9oaSk6IFJlbW92ZS4KCShkZWZpbmVfaW5zbiBzZXRoaV9oaSBsb19zdW1faGkpOiBSZW5hbWUgdG8gbW92aGlfaGlnaCBhbmQKCW1vdmhpX2xvX3N1bSByZXNwZWN0aXZlbHksIHByZXR0aWZ5IG91dHB1dCBzdHJpbmcuCgkoZGVmaW5lX2luc24gbW92c2lfemVyb19saXZlZzApOiBOZXcgcGF0dGVybiB0byBwdXQgemVybyBpbnRvIGEKCXJlZ2lzdGVyIHdoZW4gbmVlZGVkIG9uIFRBUkdFVF9MSVZFX0cwLgoJKGRlZmluZV9pbnNuIG1vdnNpX2luc24pOiBVc2UgZ2VuZXJhbF9vcGVyYW5kIGFuZCBpbnB1dF9vcGVyYW5kCglmb3IgZGVzdCBhbmQgc3JjIHJlc3BlY3RpdmVseS4gIFNpbXBsaWZ5IGFwcGxpY2FiaWxpdHkgdGVzdC4KCVByZXR0aWZ5IG91dHB1dCBzdHJpbmdzLCBhbmQgYWRkIGNsciBhbHRlcm5hdGl2ZSBmb3IgSgoJY29uc3RyYWludC4KCShkZWZpbmVfaW5zbiBtb3ZkaV9zcDMyX3Y5LCBtb3ZkaV9zcDMyLCBkZWZpbmVfc3BsaXRzIGZvcgoJZGVwcmVjYXRlZCBzdGQgYW5kIHJlZy1yZWcgREkgbW92ZXMpOiBSZW1vdmUgYW5kLi4uCgkoZGVmaW5lX2luc24gbW92ZGlfaW5zbl9zcDMyLCBtb3ZkaV9pbnNuX3NwNjQpOiBSZXBsYWNlIHdpdGggbmV3CglpbXBsZW1lbnRhdGlvbiB3aGljaCB1c2VzIGZvcmNlZCBzcGxpdHMgZm9yIGFsbCBub24tc2luZ2xlIGluc24KCWNhc2VzLgoJKGRlZmluZV9zcGxpdCBESSBtb3ZlIGNhc2VzIG9uICFhcmNoNjQpOiBOZXcgc3BsaXRzIHRvIGhhbmRsZSBhbGwKCXNpdHVhdGlvbnMgb2YgNjQtYml0IGRvdWJsZSByZWdpc3RlciBESW1vZGUgb24gMzJiaXQsIGFuZAoJdW5hbGlnbmVkIHJlZ2lzdGVycyBhbmQgbWVtb3J5IGFkZHJlc3NlcyBmb3IgYWxsIHN1YnRhcmdldHMuCgkoZGVmaW5lX2luc24gbW92c2ZfY29uc3RfaW5zbiwgbW92ZGZfY29uc3RfaW5zbiwgc3RvcmVfc2YpOgoJUmVtb3ZlLgoJKGRlZmluZV9pbnNuIG1vdnNmX2luc24sIG1vdnNmX25vX2ZfaW5zbik6IFVzZSBnZW5lcmFsX29wZXJhbmQgYW5kCglpbnB1dF9vcGVyYW5kIGZvciBkZXN0IGFuZCBzcmMgcmVzcGVjdGl2ZWx5LCBwcmV0dGlmeSBvdXRwdXQKCXN0cmluZ3MuCgkoZGVmaW5lX2luc24gbW92ZGZfaW5zbiwgbW92ZGZfbm9fZV9pbnNuLCBzdG9yZV9kZiwKCW1vdnRmX2NvbnN0X2luc24sIG1vdnRmX2luc24sIG1vdnRmX25vX2VfaW5zbiwgc3RvcmVfdGYpOiBSZW1vdmUKCWFuZC4uLgoJKGRlZmluZV9pbnNuIG1vdmRmX2luc25fc3AzMiwgbW92ZGZfbm9fZV9pbnNuX3NwMzIsCgltb3ZkZl9pbnNuX3NwNjQsIG1vdmRmX25vX2VfaW5zbl9zcDY0LCBtb3Z0Zl9pbnNuLAoJbW92dGZfbm9fZV9pbnNuX3NwMzIsIG1vdnRmX2luc25faHFfc3A2NCwgbW92dGZfaW5zbl9zcDY0LAoJbW92dGZfbm9fZV9pbnNuX3NwNjQpOiBSZXBsYWNlIHdpdGggbmV3CglpbXBsZW1lbnRhdGlvbiB3aGljaCB1c2VzIGZvcmNlZCBzcGxpdHMgZm9yIGFsbCBub24tc2luZ2xlIGluc24KCWNhc2VzLgoJKGRlZmluZV9zcGxpdCBERiBtb3ZlIGNhc2VzKTogTmV3IHNwbGl0cyBpbiBzaW1pbGFyIHZlaW4gdG8gREkKCW1vdmUgY291bnRlcnBhcnRzLgoJKGRlZmluZV9pbnNuIHNldGhpX2RpX21lZGxvdywgc2V0aGlfZGlfbWVkaXVtX3BpYywKCXNldGhpX2RpX2VtYm1lZGFueV9kYXRhLCBzZXRoaV9kaV9lbWJtZWRhbnlfdGV4dCwgc2V0aGlfZGlfc3A2NCwKCW1vdmRpX3NwNjRfaW5zbik6IFJlbW92ZSBvbGQgdjkgY29kZSBtb2RlbCBhbmQgY29uc3RhbnQgbG9hZGluZwoJc3VwcG9ydCBpbnNucyBhbmQuLgoJKGRlZmluZV9pbnNuIHBpY19sb19zdW1fZGksIHBpY19zZXRoaV9kaSwKCXNldGhpX2RpX21lZGxvd19lbWJtZWRhbnlfcGljLCBzZXRoaV9kaV9tZWRsb3csIGxvc3VtX2RpX21lZGxvdywKCXNldGg0NCwgc2V0bTQ0LCBzZXRsNDQsIHNldGhoLCBzZXRsbSwgc2V0aG0sIHNldGxvLAoJZW1ibWVkYW55X3NldGhpLCBlbWJtZWRhbnlfbG9zdW0sIGVtYm1lZGFueV9icnN1bSwKCWVtYm1lZGFueV90ZXh0dWhpLCBlbWJtZWRhbnlfdGV4dGhpLCBlbWJtZWRhbnlfdGV4dHVsbywKCWVtYm1lZGFueV90ZXh0bG8sIG1vdmRpX2xvX3N1bV9zcDY0X2NpbnQsIG1vdmRpX2xvX3N1bV9zcDY0X2RibCwKCW1vdmRpX2hpZ2hfc3A2NF9jaW50LCBtb3ZkaV9oaWdoX3NwNjRfZGJsKTogUmVwbGFjZSB3aXRoIG5ldwoJc2NoZW1lLCB1c2luZyB1bnNwZWNzLCBzZWNvbmRhcnkgcmVsb2FkcywgYW5kIG9uZSB0byBvbmUgc3BhcmMKCWluc24gdG8gcnRsIGluc24gbWFwcGluZyBmb3IgYmV0dGVyIHNjaGVkdWxpbmcgYW5kIGNvZGUgZ2VuLgoJKGRlZmluZV9leHBhbmQgcmVsb2FkX2luZGksIHJlbG9hZF9vdXRkaSk6IFJlbG9hZCBoZWxwZXJzIGZvcgoJTUVEQU5ZIGFuZCBFTUJNRURBTlkgc3ltYm9sIGFkZHJlc3MgbG9hZGluZyBjYXNlcyB3aGljaCByZXF1aXJlIGEKCXRlbXBvcmFyeSByZWdpc3Rlci4KCShkZWZpbmVfZXhwYW5kIG1vdnNpY2MpOiBSZW1vdmUgdjhwbHVzX3JlZ2NtcCBjYXNlcy4KCShkZWZpbmVfaW5zbiBtb3ZkaV9jY19zcDY0X3RydW5jLCBtb3ZkaV9jY19yZWdfc3A2NF90cnVuYywKCWNtcF96ZXJvX2V4dGVuZHFpZGkyLCBjbXBfemVyb19leHRlbmRxaWRpMl9zZXQsIGNtcF9xaWRpX3RydW5jLAoJY21wX2RpcWlfdHJ1bmNfc2V0KTogTmV3IHBhdHRlcm5zIHVzZWQgYnkgc29tZSBvZiB0aGUgbmV3IHNjYwoJc3BsaXRzIG9uIGFyY2g2NC4KCShkZWZpbmVfaW5zbiB4b3JkaTNfc3A2NF9kYmwpOiBOZXcgcGF0dGVybiB1c2VkIGZvciBjb25zdGFudAoJZm9ybWF0aW9uIHdoZW4gY3Jvc3NpbmcgZnJvbSAzMi1iaXQgdGFyZ2V0cy4KCShkZWZpbmVfaW5zbiBtb3ZzaV9jY19yZWdfdjhwbHVzLCB2OHBsdXNfY2xlYXJfaGlnaCwgYW5kIGhlbHBlcgoJc3BsaXQpOiBSZW1vdmUuCgkoZGVmaW5lX2luc24gYWRkeCwgc3VieCk6IE1ha2UgdmlzaWJsZSBhbmQgcHJldHRpZnkuCgkoZGVmaW5lX2luc24gYWRkZGkzX2luc25fc3AzMik6IExpa2V3aXNlIGFuZCBmb3JjZSBzcGxpdC4KCShkZWZpbmVfaW5zbiBhZGR4X2V4dGVuZCwgc3VieF9leHRlbmQsIHVubmFtZWQpOiBOZXcgcGF0dGVybnMgZm9yCgk2NGJpdCBzY2Mgc3BsaXQgdXNhZ2UuCgkoZGVmaW5lX2luc24gdW5uYW1lZCBwbHVzREkgemVyb19leHRlbmQsIHVubmFtZWQgbWludXNESQoJemVyb19leHRlbmQsIHN1YmRpMyk6IEZvcmNlIGFuZCBpbXBsZW1lbnQgc3BsaXRzLgoKCSogZmluYWwuYyAoZmluYWxfc2Nhbl9pbnNuKTogRG9uJ3Qgb3V0cHV0IGxhYmVscyBpZiB0YXJnZXQKCXNwZWNpZmllcyBBU01fT1VUUFVUX0FERFJfe0RJRkZ9X1ZFQy4gIERvIHRoZXNlIG1hY3JvIG9wZXJhdGlvbnMKCWluc3RlYWQuCgoJKiByZW9yZy5jIChkYnJfc2NoZWR1bGUpOiBXaGVuIHRha2luZyBvbiBCUl9QUkVEIG5vdGVzIGF0IHRoZSBlbmQsCglkb24ndCBmb3JnZXQgdG8gd2FsayBpbnNpZGUgU0VRVUVOQ0VTcyB0b28gYXMgdGhlc2UgYXJlIHdoYXQgdGhlCglkZWxheSBzbG90IHNjaGVkdWxlciB3aWxsIGNyZWF0ZS4KCk1vbiBBdWcgMTAgMDE6MjE6MDEgMTk5OCAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGFscGhhLm1kIChleHR4bCsxLCsyKTogTmV3IHBhdHRlcm5zIHRvIHdvcmsgYXJvdW5kCgljb21iaW5lIGxvc3NhZ2UuCgpTYXQgQXVnICA4IDE5OjIwOjIyIDE5OTggIEdhcnkgVGhvbWFzICAoZ2R0QGxpbnV4cHBjLm9yZykKCgkqIHJzNjAwMC5jIChyczYwMDBfYWxsb2NhdGVfc3RhY2tfc3BhY2UpOiBGaXggdHlwbyB3aGljaAoJY2F1c2VkIGJhZCBhc3NlbWJseSBjb2RlIHRvIGJlIGdlbmVyYXRlZC4KClNhdCBBdWcgIDggMTg6NTM6MjggMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogbmV0YnNkLmg6IEZpeCB0eXBvLgoKTW9uIEF1ZyAgMyAwMDowNjo0MiAxOTk4ICBSb2JlcnQgTGlwZSAgPHJvYmVydGxAZGdpaS5jb20+CgoJKiBjb25maWcuc3ViOiBGaXggdHlwby4KClN1biBBdWcgIDIgMjI6Mzk6MDggMTk5OCAgSGFucy1QZXRlciBOaWxzc29uICA8aHBAYXhpcy5zZT4KCgkqIGludm9rZS50ZXhpIChFbnZpcm9ubWVudCBWYXJpYWJsZXMpOiBUeXBvOiBDaGFuZ2UgImFzY3BlY3RzIgoJaW50byAiYXNwZWN0cyIuCgkoUnVubmluZyBQcm90b2l6ZSk6IFR5cG86IENoYW5nZSAidGhlciIgaW50byAib3RoZXIiLgoKU3VuIEF1ZyAgMiAwMDo0Mjo1MCAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBpMzg2L25ldGJzZC5oOiBVbmRvIHByZXZpb3VzIGNoYW5nZSB0byBEV0FSRjJfVU5XSU5EX0lORk8uCgkqIG02OGsvbmV0YnNkLmg6IExpa2V3aXNlLgoJKiBuczMyay9uZXRic2QuaDogTGlrZXdpc2UuCgkqIHNwYXJjL25ldGJzZC5oOiBMaWtld2lzZS4KClNhdCBBdWcgIDEgMTc6NTk6MzAgMTk5OCAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGdpbmNsdWRlL3ZhLWFscGhhLmggKHZhX2xpc3QpOiBVc2UgYSB0eXBlZGVmLCBub3QgYSBkZWZpbmUuCgkqIGdpbmNsdWRlL3ZhLWNsaXBwZXIuaCAodmFfbGlzdCk6IExpa2V3aXNlLgoKRnJpIEp1bCAzMSAyMDoyMjowMiAxOTk4ICBNaWNoYWVsIE1laXNzbmVyICA8bWVpc3NuZXJAY3lnbnVzLmNvbT4KCgkqIHJzNjAwMC5jIChyczYwMDBfb3ZlcnJpZGVfb3B0aW9ucyk6IElmIGJpZyBlbmRpYW4gYW5kIC1PcywgdXNlCglsb2FkL3N0b3JlIG11bHRpcGxlIGluc3RydWN0aW9ucyB1bmxlc3MgdXNlciBvdmVycmlkZXMuCgpGcmkgSnVsIDMxIDE3OjA4OjU5IDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIG5zMzJrL25ldGJzZC5oOiBGaXggdHlwby4KCkZyaSBKdWwgMzEgMTA6MjM6NTUgMTk5OCAgRG91ZyBFdmFucyAgPGRldmFuc0BjYW51Y2suY3lnbnVzLmNvbT4KCgkqIG0zMnIvbTMyci5oIChBU01fT1VUUFVUX1NPVVJDRV9MSU5FKTogQWx3YXlzIG91dHB1dCBsaW5lIG51bWJlcgoJbGFiZWxzIHdpdGggLmRlYnVnc3ltIGlmIG5vIHBhcmFsbGVsIGluc25zLgoKVGh1IEp1bCAzMCAxOToxNTo1MyAxOTk4ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogYWxwaGEubWQgKGZwIGNtcCk6IFJlcGxpY2F0ZSBwYXR0ZXJucyBmb3IgQUxQSEFfVFBfSU5TTi4KCShmY21vdik6IFJlbW92ZSBBTFBIQV9UUF9JTlNOIHBhdHRlcm5zIC0tIGZjbW92IGRvZXNuJ3QgdHJhcC4KClRodSBKdWwgMzAgMTk6NTA6MTUgMTk5OCAgRGF2aWQgRWRlbHNvaG4gIDxlZGVsc29obkBnbnUub3JnPgoKCSogcnM2MDAwL3gtYWl4NDMgKEFSX0ZPUl9UQVJHRVRfRkxBR1MpOiBEZWxldGUuCgkoQVJfRk9SX1RBUkdFVCk6IERlZmluZS4KClRodSBKdWwgMzAgMTI6Mjk6MTIgMTk5OCAgTWFyayBNaXRjaGVsbCAgPG1hcmtAbWFya21pdGNoZWxsLmNvbT4KCgkqIGR5bi1zdHJpbmcuaDogTmV3IGZpbGUuCgkqIGR5bi1zdHJpbmcuYzogTGlrZXdpc2UuCgkqIE1ha2VmaWxlLmluIChPQkpTKTogQWRkIGR5bi1zdHJpbmcuby4KCShkd2FyZjJvdXQubyk6IEFkZCBkeW4tc3RyaW5nLmggZGVwZW5kZW5jeS4KCShkeW4tc3RyaW5nLm8pOiBMaXN0IGRlcGVuZGVuY2llcy4KCSogZHdhcmYyb3V0LmM6IEluY2x1ZGUgZHluLXN0cmluZy5oLgoJKEFTTV9OQU1FX1RPX1NUUklORyk6IFVzZSBkeW5fc3RyaW5nX2FwcGVuZCwgcmF0aGVyIHRoYW4gc3RyY3B5LgoJKGFkZHJfY29uc3RfdG9fc3RyaW5nKTogVGFrZSBhIGR5bl9zdHJpbmdfdCwgbm90IGEgY2hhciogYXMgYQoJcHJvdG90eXBlLiAgVXNlIGR5bl9zdHJpbmdfYXBwZW5kIHJhdGhlciB0aGFuIHN0cmNhdCwgdGhyb3VnaG91dC4KCShhZGRyX3RvX3N0cmluZyk6IFVzZSBkeW5fc3RyaW5nX3QuCgpUaHUgSnVsIDMwIDEzOjA4OjA3IDE5OTggIEtlbiBSYWVidXJuICA8cmFlYnVybkBjeWdudXMuY29tPgoKCUZ1bmN0aW9uIGVudHJ5L2V4aXQgcHJvZmlsaW5nIGluc3RydW1lbnRhdGlvbjoKCSogZXhwci5oIChwcm9maWxlX2Z1bmN0aW9uX2VudHJ5X2xpYmZ1bmMsCglwcm9maWxlX2Z1bmN0aW9uX2V4aXRfbGliZnVuYyk6IERlY2xhcmUgbmV3IHZhcmlhYmxlcy4KCSogb3B0YWJzLmM6IERlZmluZSB0aGVtIGhlcmUuCgkoaW5pdF9vcHRhYnMpOiBJbml0aWFsaXplIHRoZW0uCgkqIHRyZWUuaCAoc3RydWN0IHRyZWVfZGVjbCk6IE5ldyBmbGFnCglub19pbnN0cnVtZW50X2Z1bmN0aW9uX2VudHJ5X2V4aXQuCgkoREVDTF9OT19JTlNUUlVNRU5UX0ZVTkNUSU9OX0VOVFJZX0VYSVQpOiBOZXcgYWNjZXNzb3IgbWFjcm8uCgkqIGMtZGVjbC5jIChkdXBsaWNhdGVfZGVjbHMpOiBNZXJnZSBpdC4KCSogYy1jb21tb24uYyAoZW51bSBhdHRycyk6IE5ldyB2YWx1ZSBBX05PX0lOU1RSVU1FTlRfRlVOQ1RJT04uCgkoaW5pdF9hdHRyaWJ1dGVzKTogVXNlIGl0IGZvciAibm9faW5zdHJ1bWVudF9mdW5jdGlvbiIuCgkoZGVjbF9hdHRyaWJ1dGVzKTogSGFuZGxlIGl0LCBmb3IgZnVuY3Rpb25zIHRoYXQgaGF2ZSBub3QgeWV0IGJlZW4KCWNvbXBpbGVkLiAgU2V0IGRlY2wgZmxhZy4KCSogZmxhZ3MuaCAoZmxhZ19pbnN0cnVtZW50X2Z1bmN0aW9uX2VudHJ5X2V4aXQpOiBEZWNsYXJlIG5ldwoJdmFyaWFibGUuCgkqIHRvcGxldi5jIChmbGFnX2luc3RydW1lbnRfZnVuY3Rpb25fZW50cnlfZXhpdCk6IERlZmluZSBpdCBoZXJlLgoJKGZfb3B0aW9ucyk6IE5ldyBvcHRpb24gImluc3RydW1lbnQtZnVuY3Rpb25zIi4KCSogZnVuY3Rpb24uaCAoc3RydWN0IGZ1bmN0aW9uKTogTmV3IGZpZWxkIGluc3RydW1lbnRfZW50cnlfZXhpdC4KCSogZnVuY3Rpb24uYyAoY3VycmVudF9mdW5jdGlvbl9pbnN0cnVtZW50X2VudHJ5X2V4aXQpOiBOZXcKCXZhcmlhYmxlLgoJKHB1c2hfZnVuY3Rpb25fY29udGV4dF90bywgcG9wX2Z1bmN0aW9uX2NvbnRleHRfZnJvbSk6IFNhdmUgYW5kCglyZXN0b3JlLgoJKGV4cGFuZF9mdW5jdGlvbl9zdGFydCk6IFNldCBjdXJyZW50XyB2YXJpYWJsZSwgbWF5YmUgZW1pdCByZXR1cm4KCWxhYmVsIGFuZCBlbnRyeSBwcm9maWxlIGNhbGwuCgkoZXhwYW5kX2Z1bmN0aW9uX2VuZCk6IE1heWJlIGVtaXQgZXhpdCBwcm9maWxlIGNhbGwuCgpUaHUgSnVsIDMwIDAwOjU4OjM0IDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGkzODYubWQgKG1vdnFpKTogV2hlbiBvcHRpbWl6aW5nIGEgbG9hZCBvZiAoY29uc3RfaW50IDEpIGludG8gYQoJTk9OX1FJX1JFR19QLCBwcmV0ZW5kIHRoZSByZWdpc3RlciBpcyBTSW1vZGUuCgpXZWQgSnVsIDI5IDIzOjQ5OjIzIDE5OTggIFRvZGQgVmllcmxpbmcgIDx0dkBuZXRic2Qub3JnPgoKCSogY29uZmlndXJlLmluOiBVc2UgeG0tbmV0YnNkLmggYXMgdGhlIE5ldEJTRCB4bSBmaWxlIChub3QgeG0tc2lnbGlzdCkuCglBY2NlcHQgYXJtMzIgYXMgYXJtLCBtNjhrNGsgYXMgbTY4aywgbWlwc2xlIGFzIG1pcHMtZGVjLCBhbmQgYW55CgltYW51ZmFjdHVyZXIgaWQgZm9yIG5zMzJrLgoJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGVkLgoJKiBjb25maWcvbmV0YnNkLmg6IFdoZW4gdXNpbmcgQVNNX1dFQUtFTl9MQUJFTCwgbWFrZSBpdCBnbG9iYWwgdG9vLgoJKiBjb25maWcvdC1uZXRic2Q6IERvbid0IGNvbXBpbGUgbGliZ2NjMS10ZXN0IGFzIHRoZSBmbnMgYXJlIGluIGxpYmMuCgkqIGNvbmZpZy9pMzg2L25ldGJzZC5oOiBVbmRlZmluZSBEV0FSRjJfVU5XSU5EX0lORk8sIG5vdCBkZWZpbmUgYXMgMC4KCSogY29uZmlnL202OGsvbmV0YnNkLmg6IFNhbWUuCgkqIGNvbmZpZy9uczMyay9uZXRic2QuaDogU2FtZS4KCSogY29uZmlnL3NwYXJjL25ldGJzZC5oOiBTYW1lLgoKV2VkIEp1bCAyOSAyMjozOToyMSAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiB1bnJvbGwuYyAodW5yb2xsX2xvb3ApOiBEbyBub3QgYWJvcnQgZm9yIGFuIFVOUk9MTF9NT0RVTE8KCW9yIFVOUk9MTF9DT01QTEVURUxZIGxvb3AgdGhhdCBzdGFydHMgd2l0aCBhIGp1bXAgdG8gaXRzCglleGl0IGNvZGUuCgpXZWQgSnVsIDI5IDIyOjE4OjE0IDE5OTggIERhdmlkIEVkZWxzb2huICA8ZWRlbHNvaG5AZ251Lm9yZz4KCgkqIHJzNjAwMC9yczYwMDAubWQgKGFic2RpMiBkZWZpbmVfc3BsaXQpOiBTd2FwIG9wZXJhbmRzIG9mIE1JTlVTLgoJKiByczYwMDAvcnM2MDAwLmMgKG1hc2s2NF9vcGVyYW5kKTogVXNlIEhPU1RfQklUU19QRVJfV0lERV9JTlQuCgkocHJpbnRfb3BlcmFuZCwgY2FzZSAnQicpOiBEb24ndCBmYWxsIHRocm91Z2guCgkocHJpbnRfb3BlcmFuZCwgY2FzZSAnUycpOiBDb3JyZWN0IG1hc2sgYmVnaW4vZW5kIGNvbXB1dGF0aW9uLgoJVXNlIEhPU1RfQklUU19QRVJfV0lERV9JTlQuCgkqIHJzNjAwMC9yczYwMDAuaCAoQ1BQX1BSRURFRklORVMpOiBEZWZpbmUgX0xPTkdfTE9ORy4KCShDT05ESVRJT05BTF9SRUdJU1RFUl9VU0FHRSk6IEdQUjEzIGZpeGVkIGlmIFRBUkdFVF82NEJJVC4KCSogcnM2MDAwL2FpeDQxLmggKENQUF9QUkVERUZJTkVTKTogU2FtZS4KCSogcnM2MDAwL2FpeDQzLmggKENQUF9QUkVERUZJTkVTKTogU2FtZS4KCldlZCBKdWwgMjkgMTE6NDc6MTAgMTk5OCAgTmljayBDbGlmdG9uICA8bmlja2NAY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy9hcm0vdGh1bWIubWQgKGV4dGVuZHFpc2kyX2luc24pOiBSZW1vdmUgZWFybHljbG9iYmVyCgljb25zdHJhaW50IGZyb20gc2Vjb25kIGFsdGVybmF0aXZlLgoKVHVlIEp1bCAyOCAyMzoyOTowNCAxOTk4ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjb25maWd1cmUuaW46IEZpeCAtLXdpdGhvdXQvLS1kaXNhYmxlIGNhc2VzIGZvciBsb2NhbC1wcmVmaXgsCglneHgtaW5jbHVkZS1kaXIgYW5kIGNoZWNraW5nLgoKVHVlIEp1bCAyOCAyMjowMToyMyAxOTk4ICBEYXZpZCBTLiBNaWxsZXIgIDxkYXZlbUBwaWVyZG9sLmNvYmFsdG1pY3JvLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbiAoZW5hYmxlX2hhaWZhKTogU2V0IGJ5IGRlZmF1bHQgZm9yIHNwYXJjNjQgdG9vLgoJY29uZmlndXJlOiBSZWJ1aWx0LgoKVHVlIEp1bCAyOCAyMzoyOTowNCAxOTk4ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBpMzg2L2N5Z3dpbjMyLmggKFZBTElEX01BQ0hJTkVfVFlQRV9BVFRSSUJVVEUpOiBOZXcgbWFjcm8uCgkqIGkzODYvd2lubnQuYyAoYXNzb2NpYXRlZF90eXBlKTogTmV3IGZuLgoJKGkzODZfcGVfdmFsaWRfdHlwZV9hdHRyaWJ1dGVfcCk6IE5ldyBmbi4KCShpMzg2X3BlX2NoZWNrX3Z0YWJsZV9pbXBvcnRleHBvcnQpOiBSZW1vdmUuCgkoaTM4Nl9wZV9kbGxleHBvcnRfcCk6IFVzZSBhc3NvY2lhdGVkX3R5cGUuCgkoaTM4Nl9wZV9kbGxpbXBvcnRfcCk6IExpa2V3aXNlLgoKCUZyb20gQW50b25pbyBNLiBPLiBOZXRvIDxhbm1lbmRlc0BjcnV6ZWlyb25ldC5jb20uYnI+OgoJKiBpMzg2LmMgKGkzODZfdmFsaWRfdHlwZV9hdHRyaWJ1dGVfcCk6IEFsc28gYWNjZXB0CglhdHRyaWJ1dGVzIGZvciBNRVRIT0RfVFlQRXMuCgpUdWUgSnVsIDI4IDIzOjE3OjM5IDE5OTggIFBldGVyIEdlcndpbnNraSAgPHBldGVyQGdlcndpbnNraS5kZT4KCgkqIHRyZWUuYyAoYnVpbGRfcmFuZ2VfdHlwZSk6IENvcHkgVFlQRV9TSVpFX1VOSVQuCgpUdWUgSnVsIDI4IDIyOjMxOjEyIDE5OTggIENyYWlnIEJ1cmxleSAgPGJ1cmxleUBnbnUub3JnPgoKCSogZ2NjLmM6IEZpeCBjb21tZW50YXJ5IGRlc2NyaWJpbmcgJWcsICV1LCAlVSwgYW5kICVPLgoKCSogZ2NjLmMgKGRvX3NwZWNfMSk6IEZpeCBoYW5kbGluZyBvZiAlZyVPIGFuZCAlVSVPIHRvIHByZXZlbnQKCXRoZW0gZnJvbSBnZW5lcmF0aW5nIGEgbmV3IGJhc2UgbmFtZSBmb3IgZWFjaCBvY2N1cnJlbmNlIG9mCglhIHNwZWNpZmljIHN1ZmZpeC4KCjE5OTgtMDctMjggIFZsYWRpbWlyIE4uIE1ha2Fyb3YgIDx2bWFrYXJvdkBjeWdudXMuY29tPgoKCSogY3NlLmMgKGNzZV9pbnNuKTogRW5hYmxlIHN1YnN0aXR1dGlvbiBpbnNpZGUgbGliY2FsbCBvbmx5IGZvciBSRUcsCglTVUJSRUcsIE1FTS4KCSogcnRsYW5hbC5jIChyZXBsYWNlX3J0eCk6IFByb2hpYml0IHJlcGxhY2VzIGluCUNPTlNUX0RPVUJMRS4KCgkqIGNwbHVzLWRlbS5jICh0eXBlX2tpbmRfdCk6IE5ldyB0eXBlLgoJKGRlbWFuZ2xlX3RlbXBsYXRlX3ZhbHVlX3Bhcm0pOiBBZGQgdHlwZV9raW5kX3QgcGFyYW1ldGVyLiAgUmVseQoJb24gdGhpcyBwYXJhbWV0ZXIsIHJhdGhlciB0aGFuIGRlbWFuZ2xpbmcgdGhlIHR5cGUgYWdhaW4uCgkoZGVtYW5nbGVfaW50ZWdyYWxfdmFsdWUpOiBQYXNzIHRrX2ludGVncmFsLgoJKGRlbWFuZ2xlX3RlbXBsYXRlXzogUGFzcyB0aGUgdmFsdWUgcmV0dXJuZWQgZnJvbSBkb190eXBlLgoJKGRvX3R5cGUpOiBSZXR1cm4gYSB0eXBlX2tpbmRfdC4gIFBhc3MgdGtfaW50ZWdyYWwgdG8KCWRlbWFuZ2xlX3RlbXBsYXRlX3ZhbHVlX3Bhcm0gZm9yIGFycmF5IGJvdW5kcy4KCShkZW1hbmdsZV9mdW5kX3R5cGUpOiBMaWtld2lzZS4KCk1vbiBKdWwgMjcgMDA6NTQ6NDEgMTk5OCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogdHJlZS5jIChzaW1wbGVfY3N0X2VxdWFsLCBjYXNlIENPTlNUUlVDVE9SKTogT0sgaWYgdGhlIGVsdHMgYXJlCglpZGVudGljYWwuCgpNb24gSnVsIDI3IDIyOjE4OjM2IDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHBhLmMgKG1vdmVfb3BlcmFuZCk6IEFjY2VwdCBDT05TVEFOVF9QX1JUWC4KCk1vbiBKdWwgMjcgMTc6MTg6NTIgMTk5OCAgRGF2ZSBCcm9sbGV5ICA8YnJvbGxleUBjeWdudXMuY29tPgoKCSogc3Rvci1sYXlvdXQuYyAobGF5b3V0X3R5cGUpOiBIYW5kbGUgYXJyYXlzIG9mIGJpdHMsIGZvciBDaGlsbC4KCgkqIGV4cHIuYyAoZ2V0X2lubmVyX3JlZmVyZW5jZSk6IEhhbmRsZSB6ZXJvLWJhc2VkLCB1bnNpZ25lZCwgYXJyYXkKCWluZGV4IGNvbnZlcnNpb24uCgpNb24gSnVsIDI3IDE0OjUxOjMzIDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIG1uMTAzMDAuaCAoREVCVUdHRVJfQVVUT19PRkZTRVQpOiBEZWZpbmUuCgkoREVCVUdHRVJfQVJHX09GRlNFVCk6IExpa2V3aXNlLgoKCSogbW4xMDMwMC5tZCAobW92c2YpOiBSZW1vdmUgbGFzdCBjaGFuZ2UuICBOb3QgbmVlZGVkLgoKTW9uIEp1bCAyNyAxNDoyMjozNiAxOTk4ICBEYXZlIEJyb2xsZXkgIDxicm9sbGV5QGN5Z251cy5jb20+CgoJKiBjLWxleC5jICh5eWxleCk6IEZpeCBib3VuZGFyeSBjb25kaXRpb25zIGluIGNoYXJhY3RlciBsaXRlcmFsIGFuZAoJc3RyaW5nIGxpdGVyYWwgbG9vcHMuCgpNb24gSnVsIDI3IDExOjQzOjU0IDE5OTggIFN0YW4gQ294ICA8c2NveEBjeWdudXMuY29tPgoKCSogbG9uZ2xvbmcuaCAoY291bnRfbGVhZGluZ196ZXJvcyk6IFNQQVJDbGl0ZSBzY2FuIGluc3RydWN0aW9uIHdhcwoJYmVpbmcgaW52b2tlZCBpbmNvcnJlY3RseS4KCgkqIGkzODYuYyAoaXg4Nl9wcm9sb2d1ZSk6IEFkZGVkIFNVQlRBUkdFVF9QUk9MT0dVRSBpbnZvY2F0aW9uLgoJKiBpMzg2L2N5Z3dpbjMyLmggKFNUQVJURklMRV9TUEVDLCBMSUJfU1BFQywgU1VCVEFSR0VUX1BST0xPR1VFKToKCUFkZCAtcGcgc3VwcG9ydC4KCSogaTM4Ni93aW4zMi5oOiBOZXcgZmlsZS4gIEh5YnJpZCBtaW5ndzMyLmgvY3lnd2luMzIuaCBjb25maWd1cmF0aW9uLgoJKiBjb25maWd1cmUuaW46IEFkZGVkIGlbMzQ1NjddODYtKi13aW4zMi4KCSogY29uZmlnLnN1YjogTGlrZXdpc2UuCgkqIGNvbmZpZ3VyZTogUmVidWlsdC4KClN1biBKdWwgMjYgMDE6MTE6MTIgMTk5OCAgSC5KLiBMdSAgKGhqbEBnbnUub3JnKQoKCSogaTM4Ni5oIChDT05TVF9ET1VCTEVfT0tfRk9SX0xFVFRFUl9QKTogUmV0dXJuIDAgd2hlbiBlbGltaW5hdGluZwoJdGhlIGZyYW1lIHBvaW50ZXIgYW5kIGNvbXBpbGluZyBQSUMgY29kZSBhbmQgcmVsb2FkIGhhcyBub3QgY29tcGxldGVkLgoKCSogaTM4Ni5jIChvdXRwdXRfdG9fcmVnKTogQWRkIGNvZGUgdG8gZW11bGF0ZSBub24tcG9wcGluZyBESW1vZGUKCWNhc2UuCgpTdW4gSnVsIDI2IDAxOjAxOjMyIDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHJlZ21vdmUuYyAocmVnbW92ZV9vcHRpbWl6ZSk6IEZpeCB0eXBvIGluaXRpYWxpemluZyByZWdtb3ZlX2JiX2hlYWQuCgpTYXQgSnVsIDI1IDIzOjI5OjIzIDE5OTggIEdlcmFsZCBQZmVpZmVyICA8cGZlaWZlckBkYmFpLnR1d2llbi5hYy5hdD4KCgkqIE1ha2VmaWxlLmluIChpbnN0YWxsLWluZm8pOiBPbmx5IHRyeSB0byB1cGRhdGUgdGhlIGluZm8KCWRpcmVjdG9yeSBmaWxlIGlmIGl0IGV4aXN0cyBpbiB0aGUgZmlyc3QgcGxhY2UuCgpGcmkgSnVsIDI0IDE4OjU4OjM3IDE5OTggIEtsYXVzIEVzcGVubGF1YiAgPGtlc3BlbmxhQHN0dWRlbnQuaW5mb3JtYXRpay51bmktdWxtLmRlPgoKCSogcnM2MDAwLmggKEFTTV9PVVRQVVRfQ09OU1RSVUNUT1IsIEFTTV9PVVRQVVRfREVTVFJVQ1RPUik6IERlbGV0ZS4KCkZyaSBKdWwgMjQgMTQ6MjA6MjYgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogbW4xMDMwMC5tZCAobW92cWksIG1vdmhpLCBtb3ZzaSwgbW92c2YpOiBDb3JyZWN0bHkgaGFuZGxlCglDT05TVF9ET1VCTEUgc291cmNlLgoKRnJpIEp1bCAyNCAxMToxNzowNCAxOTk4ICBOaWNrIENsaWZ0b24gIDxuaWNrY0BjeWdudXMuY29tPgoKCSogY29uZmlnL2FybS90aHVtYi5jICh0aHVtYl9wcmludF9vcGVyYW5kKTogRGVjb2RlICVfIGluIGFzbQoJc3RyaW5ncyBhcyB0aGUgaW5zZXJ0aW9uIG9mIFVTRVJfTEFCRUxfUFJFRklYLgoJKiBjb25maWcvYXJtL3RodW1iLmggKFBSSU5UX09QRVJBTkRfUFVOQ1RfVkFMSURfUCk6IEFjY2VwdCBfIGFzIGEKCXZhbGlkIGNvZGUuCgkqIGNvbmZpZy9hcm0vdGh1bWIubWQ6IFVzZSAlXyBhcyBhIHByZWZpeCB0byBnY2MgbGlicmFyeSBmdW5jdGlvbgoJY2FsbHMuCgpUaHUgSnVsIDIzIDE4OjUzOjIwIDE5OTggIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KCgkqIGRieG91dC5jIChkYnhvdXRfcmFuZ2VfdHlwZSk6IE9ubHkgY2FsbCBkYnhvdXRfdHlwZV9pbmRleCBmb3IKCWFscmVhZHkgZGVmaW5lZCB0eXBlLgoKVGh1IEp1bCAyMyAxMzo0OTo0MSAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBleHByLmMgKGNoZWNrX21heF9pbnRlZ2VyX2NvbXB1dGF0aW9uX21vZGUpOiBBbGxvdyBjb252ZXJzaW9ucwoJb2YgY29uc3RhbnQgaW50ZWdlcnMgdG8gTUFYX0lOVEVHRVJfQ09NUFVUQVRJT05fTU9ERS4KCShleHBhbmRfZXhwcik6IExpa2V3aXNlLgoKVGh1IEp1bCAyMyAxMToxMjowNiAxOTk4ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIGV4cHIuYyAoZXhwYW5kX2V4cHIpOiBFeHBhbmQgUkVUVVJOX0VYUFIuCgpUaHUgSnVsIDIzIDExOjAwOjI5IDE5OTggIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KCgkqIGR3YXJmMm91dC5jIChkd2FyZjJvdXRfZmluaXNoKTogQ2FsbCBzdHJpcGF0dHJpYnV0ZXMgb24gVEVYVF9TRUNUSU9OLgoKV2VkIEp1bCAyMiAxOToxMDowMCAxOTk4ICBDYXRoZXJpbmUgTW9vcmUgIDxjbG1AY3lnbnVzLmNvbT4KCgkqIGR3YXJmMm91dC5jIChvdXRwdXRfYXJhbmdlcyk6IENhbGwgc3RyaXBhdHRyaWJ1dGVzCglmb3IgVEVYVF9TRUNUSU9OIHJlZmVyZW5jZXMuCgkob3V0cHV0X2xpbmVfaW5mbyk6IExpa2V3aXNlLgoKV2VkIEp1bCAyMiAxNDowODo1NCAxOTk4ICBEYXZpZCBTLiBNaWxsZXIgIDxkYXZlbUBwaWVyZG9sLmNvYmFsdG1pY3JvLmNvbT4KCgkqIHByb2ZpbGUuYyAoYnJhbmNoX3Byb2IpOiBDYWxsIGFsbG9jYXRlX3JlZ19pbmZvIGFmdGVyIG91dHB1dHRpbmcKCXByb2ZpbGUgcnRsIGluIGluc3RydW1lbnRfYXJjcy4KCldlZCBKdWwgMjIgMTI6NDc6NDkgMTk5OCAgSmltIFdpbHNvbiAgPHdpbHNvbkBjeWdudXMuY29tPgoKCSogZml4aW5jLmlyaXggKG1hdGguaCk6IEluc3RhbGwgd3JhcHBlciBpbnN0ZWFkIG9mIGNvcHlpbmcuCgpXZWQgSnVsIDIyIDEyOjM3OjE0IDE5OTggIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogdHJlZS5kZWYgKEVYUFJfV0lUSF9GSUxFX0xPQ0FUSU9OKTogRGVmaW5lZCBhcyBhbiAnZScgZXhwcmVzc2lvbgoJc28gV0ZMIGFyZSBleHBhbmRlZCBjb3JyZWN0bHkgd2hlbiBjb250YWluZWQgaW4gYSBDT01QT1VORF9FWFBSLgoJKiB0cmVlLmggKEVYUFJfV0ZMX0VNSVRfTElORV9OT1RFKTogQ2hhbmdlIG1hY3JvIG5vdCB0byB1c2UKCWxhbmdfZmxhZ18wLiBBZGRlZCBkb2N1bWVudGF0aW9uIGluIHRoZSBmbGFnIHRhYmxlLgoKVHVlIEp1bCAyMSAyMzoyODozNSAxOTk4ICBLbGF1cyBLYWVtcGYgIDxra2FlbXBmQHJtaS5kZT4KCgkqIGNjY3AuYyAoZG9faW5jbHVkZSk6IEZpeCB2YXggYyBzdHlsZSBpbmNsdWRlIGhhbmRsaW5nLgoKVHVlIEp1bCAyMSAxMzoyODoxOSAxOTk4ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjcGx1cy1kZW0uYyAoZG9fdHlwZSk6IFVzZSBkZW1hbmdsZV90ZW1wbGF0ZV92YWx1ZV9wYXJtIGZvciBhcnJheXMuCgpTdW4gSnVsIDEyIDAxOjI3OjA1IDE5OTggIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGZvbGQtY29uc3QuYyAobm9uX2x2YWx1ZSk6IERvbid0IGRlYWwgd2l0aCBudWxsIHBvaW50ZXIKCWNvbnN0YW50cyBoZXJlLgoJKGZvbGQsIGNhc2UgQ09NUE9VTkRfRVhQUik6IFdyYXAgYSBjb25zdGFudCAwIGluIGEgTk9QX0VYUFIuCgpUdWUgSnVsIDIxIDE1OjQ5OjMxIDE5OTggIERhdmlkIEVkZWxzb2huICA8ZWRlbHNvaG5AZ251Lm9yZz4KCgkqIHJzNjAwMC5oIChQUkVESUNBVEVfQ09ERVMpOiBBZGQgQ09OU1RBTlRfUF9SVFguCgkqIHJzNjAwMC5tZCAobW92c2ksIG1vdmRpKTogQWRkIENPTlNUQU5UX1BfUlRYLgoJKiByczYwMDAuYyAoc2hvcnRfY2ludF9vcGVyYW5kKTogQWRkIENPTlNUQU5UX1BfUlRYLgoJKHVfc2hvcnRfY2ludF9vcGVyYW5kKTogU2FtZS4KCShyZWdfb3JfY2ludF9vcGVyYW5kKTogU2FtZS4KCShsb2dpY2FsX29wZXJhbmQpOiBTYW1lLgoJKGlucHV0X29wZXJhbmQpOiBTYW1lLgoJKHJlZ19vcl9zaG9ydF9vcGVyYW5kKTogVXNlIHVfc2hvcnRfY2ludF9vcGVyYW5kLgoKVHVlIEp1bCAyMSAwODo1Njo0MiAxOTk4ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogYWxwaGEubWQgKGZpeF90cnVuY2Rmc2kyLCBmaXhfdHJ1bmNzZnNpMik6IFJlbW92ZSB0aGUgZGVmaW5lX2V4cGFuZHMsCglidXQga2VlcCB0aGUgaW5zbnMgYW5kIHNwbGl0cy4gIEFkanVzdCBzbyB3aGVuIHRoZSB1bHRpbWF0ZSBkZXN0aW5hdGlvbgoJaXMgbWVtb3J5LCB1c2UgY3Z0cWwuCgpUdWUgSnVsIDIxIDA4OjU1OjA5IDE5OTggIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBmbG93LmMgKHJlZ25vX3VuaW5pdGlhbGl6ZWQpOiBGaXhlZCByZWdzIGFyZSBuZXZlciB1bmluaXRpYWxpemVkLgoKVHVlIEp1bCAyMSAwMDozMTowMSAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBnY2MuYyAoZG9fc3BlYyk6IENhbGwgImVycm9yIiBub3QgIndhcm5pbmciLgoKCSogY29uZmlndXJlLmluOiBGaXggbWlub3IgcHJvYmxlbXMgd2l0aCBnYXMgZmVhdHVyZSBkZXRlY3Rpb24gY29kZS4KCSogY29uZmlndXJlOiBSZWJ1aWx0LgoKCSogZ2NjLmMgKGRvX3NwZWMpOiBJc3N1ZSBhIHdhcm5pbmcgZm9yICclW10nIHVzYWdlLgoKCSogVW5kbyB0aGlzIGNoYW5nZS4KCSogZ2NjLmM6IERlbGV0ZSAlW3NwZWNdIHN1cHBvcnQuCgkoZG9fc3BlY18xLCBjYXNlICcoJyk6IExpa2V3aXNlLgoJKGRvX3NwZWNfMSwgY2FzZSAnWycpOiBDYWxsIGVycm9yLgoKTW9uIEp1bCAyMCAyMjozNDoxNyAxOTk4ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogYWxwaGEuaCAoQ1BQX1NQRUMpOiBUaWR5LiAgSG9vayB0byBjcHBfY3B1IGFuZCBjcHBfc3VidGFyZ2V0LgoJKENQUF9TVUJUQVJHRVRfU1BFQyk6IERlZmF1bHQgdG8gZW1wdHkgc3RyaW5nLgoJKENQUF9BTV8qLCBDUFBfSU1fKiwgQ1BQX0NQVV8qLCBDUFBfQ1BVX1NQRUMpOiBOZXcuCgkoRVhUUkFfU1BFQ1MsIFNVQlRBUkdFVF9FWFRSQV9TUEVDUyk6IE5ldy4KCSogYWxwaGEvZWxmLmggKExEX1NQRUMpOiBVc2UgJShlbGZfZHluYW1pY19saW5rZXIpLgoJKiBhbHBoYS9saW51eC1lbGYuaCAoU1VCVEFSR0VUX0VYVFJBX1NQRUNTKTogTmV3LgoJKExJQl9TUEVDKTogVGlkeS4KCSogYWxwaGEvbGludXguaCAoQ1BQX1BSRURFRklORVMpOiBUaWR5LgoJKiBhbHBoYS9uZXRic2QtZWxmLmggKFNVQlRBUkdFVF9FWFRSQV9TUEVDUyk6IE5ldy4KCSogYWxwaGEvbmV0YnNkLmggKENQUF9QUkVERUZJTkVTKTogVGlkeS4KCSogYWxwaGEvb3NmLmggKENQUF9QUkVERUZJTkVTKTogUmVtb3ZlIGJpdHMgc3Vic3VtZWQgYnkgQ1BQX0NQVV9TUEVDLgoJKiBhbHBoYS93aW4tbnQuaCAoQ1BQX1BSRURFRklORVMpOiBMaWtld2lzZS4KCSogYWxwaGEvdnNmLmggKENQUF9QUkVERUZJTkVTKTogTGlrZXdpc2UuCgkoQ1BQX1NVQlRBUkdFVF9TUEVDKTogTmV3LiAgRG8gdGhpcyBpbnN0ZWFkIG9mIG92ZXJyaWRpbmcgQ1BQX1NQRUMuCgkqIGFscGhhL3Z4d29ya3MuaDogTGlrZXdpc2UuCgpNb24gSnVsIDIwIDIyOjUxOjU3IDE5OTggIEtlbiBSYWVidXJuICA8cmFlYnVybkBjeWdudXMuY29tPgoKCSogbWlwcy5tZCAocmVsb2FkX291dHNpKTogQWRkZWQgbWlzc2luZyBSRUdOTyBjYWxsLgoJKHNtdWxzaTNfaGlnaHBhcnQsIHVtdWxzaTNfaGlnaHBhcnQpOiBQcm92aWRlIHByb3RvdHlwZSBmb3IKCWZ1bmN0aW9uIHBvaW50ZXIuCgkobXVsX2FjY19kaSwgbXVsX2FjY182NGJpdF9kaSk6IERvbid0IHVzZSBtYXRjaF9vcF9kdXAsIHVzZQoJYW5vdGhlciBtYXRjaF9vcGVyYXRvciBhbmQgY29tcGFyZSB0aGUgY29kZXMuCgoJKiBtaXBzLmggKE1BU0tfREVCVUdfRSwgTUFTS19ERUJVR19JKTogU2V0IHRvIHplcm8uCgoJKiBNSVBTIG11bHRpcGx5IHBhdHRlcm4gZml4ZXM6CgkqIG1pcHMuaCAoZW51bSByZWdfY2xhc3MsIFJFR19DTEFTU19OQU1FUywgUkVHX0NMQVNTX0NPTlRFTlRTKToKCUFkZCB1bmlvbiBjbGFzc2VzIGZvciBISSwgTE8sIG9yIEhJTE8gcGx1cyBnZW5lcmFsIHJlZ2lzdGVycy4KCShHRU5FUkFURV9NQUREKTogRGVsZXRlZC4KCSogbWlwcy5tZCAobXVsc2kzX211bHQzKTogRG9uJ3QgZGlzcGFyYWdlIG91dHB1dC1MTyBhbHRlcm5hdGl2ZS4KCUFkZCBUQVJHRVRfTUFEIHRvIGNvbmRpdGlvbi4KCShtdWxzaTMpOiBUZXN0IEhBVkVfbXVsc2kzX211bHQzLCBub3Qgc3BlY2lmaWMgZmxhZ3MuCgkobXVsX2FjY19zaSk6IEV4cGFuZCBHRU5FUkFURV9NQUREIGhlcmU7IGl0J3MgdGhlIG9ubHkgdXNlLiAgVXNlCgkiKmQiIGZvciBhY2N1bXVsYXRvciwgdG8gZ2l2ZSBwcmVmZXJlbmNlIHRvIExPIGluaXRpYWxseSBidXQgbm90CglkdXJpbmcgcmVsb2FkLgoKTW9uIEp1bCAyMCAxNjoxNjozOCAxOTk4ICBEYXZlIEJyb2xsZXkgIDxicm9sbGV5QGN5Z251cy5jb20+CgoJKiBjb25maWd1cmUuaW4gKGVuYWJsZV9jX21iY2hhcik6IE5ldyBjb25maWd1cmUgb3B0aW9uLgoJKGV4dHJhX2NwcF9vYmpzKTogQWx3YXlzIGF2YWlsYWJsZSBub3cuCgoJKiBjZXhwLnkgKG1iY2hhci5oKTogI2luY2x1ZGUgaXQuCgkoeXlsZXgpOiBIYW5kbGUgTXVsdGlieXRlIGNoYXJhY3RlcnMgaW4gY2hhcmFjdGVyIGxpdGVyYWxzLgoKCSogY2NjcC5jIChtYmNoYXIuaCk6ICNpbmNsdWRlIGl0LgoJKG1haW4pOiBTZXQgY2hhcmFjdGVyIHNldCBiYXNlZCBvbiBMQU5HIGVudmlyb25tZW50IHZhcmlhYmxlLgoJKHJlc2Nhbik6IEhhbmRsZSBtdWx0aWJ5dGUgY2hhcmFjdGVycyBpbiBjb21tZW50cy4KCShza2lwX2lmX2dyb3VwKTogU2VlIGFib3ZlLgoJKHZhbGlkYXRlX2Vsc2UpOiBTZWUgYWJvdmUuCgkoc2tpcF90b19lbmRfb2ZfY29tbWVudCk6IFNlZSBhYm92ZS4KCShtYWNhcmcxKTogU2VlIGFib3ZlLgoJKGRpc2NhcmRfY29tbWVudHMpOiBTZWUgYWJvdmUuCgkocmVzY2FuKTogSGFuZGxlIG11bHRpYnl0ZSBjaGFyYWN0ZXJzIGluIHN0cmluZyBhbmQgY2hhcmFjdGVyIGxpdGVyYWxzLgoJKGNvbGxlY3RfZXhwYW5zaW9uKTogU2VlIGFib3ZlLgoJKHNraXBfcXVvdGVkX3N0cmluZyk6IFNlZSBhYm92ZS4KCShtYWNyb2V4cGFuZCk6IFNlZSBhYm92ZS4KCShtYWNhcmcxKTogU2VlIGFib3ZlLgoJKGRpc2NhcmRfY29tbWVudHMpOiBTZWUgYWJvdmUuCgkoY2hhbmdlX25ld2xpbmVzKTogU2VlIGFib3ZlLgoKCSogYy1sZXguYyAobWJjaGFyLmgpOiAjaW5jbHVkZSBpdC4KCShHRVRfRU5WSVJPTk1FTlQpOiBOZXcgbWFjcm8uCgkoaW5pdF9sZXgpOiBTZXQgY2hhcmFjdGVyIHNldCBiYXNlZCBvbiBMQU5HIGVudmlyb25tZW50IHZhcmlhYmxlLgoJKHl5bGV4KTogSGFuZGxlIG11bHRpYnl0ZSBjaGFyYWN0ZXJzIGluIGNoYXJhY3RlciBsaXRlcmFscy4KCSh5eWxleCk6IEhhbmRsZSBtdWx0aWJ5dGUgY2hhcmFjdGVycyBpbiBzdHJpbmcgbGl0ZXJhbHMuCgoJKiBNYWtlZmlsZS5pbiAobWJjaGFyLm8pOiBOZXcgdGFyZ2V0LgoJKGNjY3AkKGV4ZWV4dCkpOiBAZXh0cmFfY3BwX29ianNAIGlzIGFsd2F5cyBhdmFpbGFibGUuCgkoY3BwbWFpbiQoZXhlZXh0KSk6IEBleHRyYV9jcHBfb2Jqc0AgaXMgYWx3YXlzIGF2YWlsYWJsZS4KCgkqIG1iY2hhci5bY2hdOiBOZXcgZmlsZXMgZm9yIG11bHRpYnl0ZSBjaGFyYWN0ZXIgaGFuZGxpbmcuCgpNb24gSnVsIDIwIDAxOjExOjExIDE5OTggIERhdmlkIFMuIE1pbGxlciAgPGRhdmVtQHBpZXJkb2wuY29iYWx0bWljcm8uY29tPgoKCSoganVtcC5jIChqdW1wX29wdGltaXplKTogV2hlbiBzaW1wbGlmeWluZyBub29wIG1vdmVzIGFuZAoJUFVTSF9ST1VORElORywgZml4IHRoaW5rbyBzbyB3ZSB1c2Ugc2FtZSBjcml0ZXJpb24gZm9yIGlkZW50aWZ5aW5nCgl0aGUgUFVTSGVzIHRvIHJld3JpdGUgaW4gc2Vjb25kIGxvb3AgYXMgd2UgZGlkIGluIHRoZSBmaXJzdC4KClN1biBKdWwgMTkgMDg6MjM6NTMgMTk5OCAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogY3BsdXMtZGVtLmMgKGRlbWFuZ2xlX25lc3RlZF9hcmdzKTogTWFrZSBmdW5jdGlvbiBkZWZpbml0aW9uCglzdGF0aWMgdG8gbWF0Y2ggdGhlIHByb3RvdHlwZS4KCkZyaSBKdWwgMTcgMTQ6NTg6NDQgMTk5OCAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGFsbG9jYS5jOiBSZXNwZWN0IFVTRV9DX0FMTE9DQS4KCSogZ2VuY2hlY2suYyAoeG1hbGxvYyk6IElnbm9yZSBfX0dOVUNfXyBmb3IgZGVmaW5pdGlvbi4KCSogZ2VuZ2VucnRsLmMgKHhtYWxsb2MpOiBMaWtld2lzZS4KCkZyaSBKdWwgMTcgMTQ6MTg6MTQgMTk5OCAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGxvb3AuaCAoc3RydWN0IGluZHVjdGlvbik6IEFkZCBub19jb25zdF9hZGR2YWwuCgkqIGxvb3AuYyAodGhlX21vdmFibGVzLCByZWdfYWRkcmVzc19jb3N0KTogTmV3IHZhcmlhYmxlcy4KCShpbml0X2xvb3ApOiBJbml0IHJlZ19hZGRyZXNzX2Nvc3QuCgkobG9vcF9vcHRpbWl6ZSk6IENhbGwgZW5kX2FsaWFzX2FuYWx5c2lzLgoJKHNjYW5fbG9vcCk6IEluaXQgdGhlX21vdmFibGVzLgoJKHJlY29yZF9naXYpOiBJbml0IGluZHVjdGlvbi0+bm9fY29uc3RfYWRkdmFsLgoJKGJhc2ljX2luZHVjdGlvbl92YXIpIFtQTFVTXTogVXNlIHJ0eF9lcXVhbF9wIGluc3RlYWQgb2YgPT0uCglbUkVHXTogUmVhcnJhbmdlIGxvb3Agc2VhcmNoIHRlc3QgdG8gY2F0Y2ggbW9yZSBjYXNlcy4KCShnZW5lcmFsX2luZHVjdGlvbl92YXIpOiBSZXR1cm4gc3VjY2VzcyBub3QgYmVuZWZpdDsgdGFrZSBhbiBleHRyYQoJYXJndW1lbnQgZm9yIHRoYXQuICBDaGFuZ2UgYWxsIGNhbGxlcnMuCgkoc2ltcGxpZnlfZ2l2X2V4cHIpIFtQTFVTXTogQWx3YXlzIGNvbWJpbmUgaW52YXJpYW50cy4gIFVzZSBzZ2VfcGx1cy4KCVtNVUxUXTogVXNlIHJ0eF9lcXVhbF9wIGluc3RlYWQgb2YgPT0uICBDb21iaW5lIHNpbXBsZSBpbnZhcmlhbnRzLgoJW2RlZmF1bHRdOiBTZWFyY2ggdGhlX21vdmFibGVzIGZvciBhZGRpdGlvbmFsIGNvbWJpbmF0aW9ucy4KCShzZ2VfcGx1c19jb25zdGFudCwgc2dlX3BsdXMpOiBOZXcgZnVuY3Rpb25zLgoJKGV4cHJlc3NfZnJvbV8xKTogTmV3IGZ1bmN0aW9uLgoJKGV4cHJlc3NfZnJvbSk6IEFsd2F5cyBkZWZpbmUuICBSZXdyaXRlIHVzaW5nIGV4cHJlc3NfZnJvbV8xLgoJKGNvbWJpbmVfZ2l2c19wKTogSGFuZGxlIG1vcmUgY2FzZXMuICBJZ25vcmUgYWRkcmVzcyBjb3N0LgoJKGNtcF9jb21iaW5lX2dpdnNfc3RhdHMpOiBOZXcgZnVuY3Rpb24uCgkoY29tYmluZV9naXZzX3VzZWRfb25jZSwgY29tYmluZV9naXZzX2JlbmVmaXRfZnJvbSk6IE5ldyBmdW5jdGlvbnMuCgkoY29tYmluZV9naXZzKTogUmV3cml0ZSB0byBkbyBiZXN0LWZpdCBjb21iaW5hdGlvbi4KCgkqIGZvbGQtY29uc3QuYyAob3BlcmFuZF9lcXVhbF9wKTogSGFuZGxlIFJUTF9FWFBSLgoJKGZvbGQpOiBEbyBhIGNvbXBsZXRlIChBKkMpKyhCKkMpIGFzc29jaWF0aW9uIGNoZWNrLgoKRnJpIEp1bCAxNyAxMToyMTo1NSAxOTk4ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CgoJKiBmdW5jdGlvbi5jIChmaXh1cF92YXJfcmVmc19pbnNucyk6IEhhbmRsZSBDTE9CQkVSIG9mIGEgQ09OQ0FULgoKRnJpIEp1bCAxNyAxMTo0ODo1NSAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBtbjEwMzAwLmMgKE1PREVTX1RJRUFCTEVfUCk6IEZpeCB0eXBvLgoKRnJpIEp1bCAxNyAwMzoyNjoxMiAxOTk4ICBSaWhjYXJkIEVhcm5zaGF3ICAocmVhcm5zaGFAYXJtLmNvbSkKCgkqIHRyZWUuYyAodmFsaWRfbWFjaGluZV9hdHRyaWJ1dGUpOiBPbmx5IGNyZWF0ZSBhIG5ldyB0eXBlIHZhcmlhbnQgaWYKCXRoZXJlIGlzIGEgZGVjbCB0byB1c2UgaXQuCgpUaHUgSnVsIDE2IDE0OjQ4OjA0IDE5OTggIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQGN5Z251cy5jb20+CgoJKiBnY2MuYyAoZG9fc3BlY18xKTogQ29wZSB3aXRoICVnLyV1LyVVIG9wdGlvbnMgd2hpY2ggZG8gbm90IGhhdmUKCWEgc3VmZml4LgoKRnJpIEp1bCAxNyAwMzoyNDo0MCAxOTk4ICBIYW5zLVBldGVyIE5pbHNzb24gIDxocEBheGlzLnNlPgoKCSogZXh0ZW5kLnRleGkgKEV4cGxpY2l0IFJlZyBWYXJzKTogVHlwbzogY2hhbmdlICJtYXkgZGVsZXRlZCIgaW50byAibWF5CgliZSBkZWxldGVkIgoKVGh1IEp1bCAxNiAxNDo0ODo0NyAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBtbjEwMzAwLmMgKGNvdW50X3RzdF9pbnNucyk6IE5ldyBhcmcgb3JlZ19jb3VudHAuICBDYWxsZXJzIGNoYW5nZWQuCglTaW1wbGlmeSB0ZXN0cyBmb3IgY2xlYXJpbmcgYW4gYWRkcmVzcyByZWdpc3Rlci4KCShleHBhbmRfcHJvbG9ndWUpOiBDb3JyZXNwb25kaW5nIGNoYW5nZXMuCgoJKiBtbjEwMzAwLm1kIChtb3ZYWCBwYXR0ZXJucyk6IE1ha2Ugc3VyZSB0aGUgZGVzdGluYXRpb24gaXMgYW4KCUFERFJFU1NfUkVHIHdoZW4gc3Vic3RpdHV0aW5nICJ6ZXJvX2FyZWciIGZvciAoY29uc3RfaW50IDApLgoJKGxvZ2ljYWwgcGF0dGVybnMpOiBTcGxpdCBpbnRvIGV4cGFuZGVycyArIHBhdHRlcm5zLgoJKHplcm8gYW5kIHNpZ24gZXh0ZW5zaW9uIHBhdHRlcm5zKTogU2ltaWxhcmx5LgoJKHNoaWZ0IHBhdHRlcm5zKTogU2ltaWxhcmx5LgoKVGh1IEp1bCAxNiAwMToxNzo0NCAxOTk4ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogbG9vcC5jIChlbWl0X2l2X2FkZF9tdWx0KTogU2NhbiB0aGUgZW50aXJlIGluc24gbGlzdCBnZW5lcmF0ZWQKCWZvciB0aGUgc2VxdWVuY2UsIHJlY29yZGluZyBiYXNlIHZhbHVlcy4KCldlZCBKdWwgMTUgMTA6NDk6NTUgMTk5OCAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGkzODYuaCAoQ1BQX0NQVV9TUEVDKTogUmVtb3ZlIC1Bc3lzdGVtKHVuaXgpLgoKVHVlIEp1bCAxNCAxNDoxNTozMCAxOTk4ICBOaWNrIENsaWZ0b24gIDxuaWNrY0BjeWdudXMuY29tPgoKCSogZ2NjLmM6IFJlbW92ZSBBTlNJLUMgaXNtIGZyb20gLS1oZWxwIGNvZGUuCgoJKiB0b3BsZXYuYzogU3VwcG9ydCAtLWhlbHAgd2l0aCBVU0VfQ1BQTElCLgoKVHVlIEp1bCAxNCAxNDo0NjowOCAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBjb25maWd1cmUuaW46IFJld29yayBnYXMgZmVhdHVyZSBjb2RlIHRvIHdvcmsgd2l0aCBzeW1saW5rIGJhc2VkCglzb3VyY2UgdHJlZXMuCgoJKiBleHRlbmQudGV4aTogQ2xhcmlmeSBzb21lIGlzc3VlcyByZWxhdGVkIHRvIGxvY2FsIHZhcmlhYmxlcwoJYXNzaWduZWQgdG8gZXhwbGljaXQgcmVnaXN0ZXJzLgoKCSogbW4xMDMwMC5tZCAobXVsc2kpOiBUdXJuIGludG8gZXhwYW5kZXIgKyBwYXR0ZXJuLgoKCSogbW4xMDMwMC5tZCAobW92c2ksIG1vdnNmLCBtb3ZkaSwgbW92ZGYpOiBSZW1vdmUgIngiIGZyb20gSSAtPiBhCglhbHRlcm5hdGl2ZS4KClR1ZSBKdWwgMTQgMDc6NDE6NTkgMTk5OCAgUmljaGFyZCBFYXJuc2hhdyAgKHJlYXJuc2hhQGFybS5jb20pCgoJKiBhcm0vdGNvZmYuaCAoVVNFUl9MQUJFTF9QUkVGSVgpOiBNYWtlIGl0IGVtcHR5IHRvIG1hdGNoIGNvZmYuaC4KClR1ZSBKdWwgMTQgMDM6MDI6NDQgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogdmVyc2lvbi5jOiBCdW1wIGFnYWluIHRvIGRpc3Rpbmd1aXNoIG1haW5saW5lIHRyZWUgZnJvbSB0aGUKCWVnY3MtMS4xIGJyYW5jaC4KClNlZSBDaGFuZ2VMb2cuMCBmb3IgZWFybGllciBjaGFuZ2VzLgoKTG9jYWwgVmFyaWFibGVzOgphZGQtbG9nLXRpbWUtZm9ybWF0OiBjdXJyZW50LXRpbWUtc3RyaW5nCkVuZDoK