Name: series-workflowb8cll Phase: Succeeded StartedAt: 2026-09-03 06:56:15 +0000 UTC FinishedAt: 2026-09-03 11:18:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb8cll[0] Phase: Succeeded StartedAt: 2026-09-03 06:56:15 +0000 UTC FinishedAt: 2026-09-03 07:38:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb8cll[0].run-triage Phase: Succeeded StartedAt: 2026-09-03 06:56:15 +0000 UTC FinishedAt: 2026-09-03 07:38:42 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "544d85de4dc22c01badfd8cefa59829ce35c4858", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "XDP_SOCKETS", "BPF_SYSCALL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "544d85de4dc22c01badfd8cefa59829ce35c4858", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "XDP_SOCKETS", "BPF_SYSCALL" ], "series_id": "487e2220-beb7-46f6-b681-2ffdd9c0a705" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "xsk_destruct_skb" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA3OjM2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1hEUF9TT0NLRVRTJiMzNDssCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7eHNrX2Rlc3RydWN0X3NrYiYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBzaW5nbGUgY2FsbCB0byBgc2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYilgIHdpdGhpbiBgeHNrX3NrYl9pbml0X21pc2MoKWAgaW4gdGhlIEFGX1hEUCBzdWJzeXN0ZW0gKGBuZXQveGRwL3hzay5jYCkuXG5cbktNU0FOIHZzLiBLQVNBTiBhcHBsaWNhYmlsaXR5IGFuYWx5c2lzOlxuLSAqKktNU0FOIFJlbGV2YW5jZSoqOiBLTVNBTiBkZXRlY3RzIHVzZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhbmQgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlciBzcGFjZS4gVGhlIHBhdGNoIHNpbXBseSBpbml0aWFsaXplcyB0aGUgYG5ldHdvcmtfaGVhZGVyYCBvZmZzZXQgb24gdGhlIG5ld2x5IGNyZWF0ZWQgYHNrX2J1ZmZgIHRvIG1hdGNoIGBza2ItXHUwMDNlZGF0YWAuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHN0YWNrL2hlYXAgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIHBhZGRpbmcgb3Igc3RydWN0IGZpZWxkcyB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgYWx0ZXIgbGVuZ3RoIGNhbGN1bGF0aW9ucyBvciBib3VuZHMgY2hlY2tzIGluIGEgd2F5IHRoYXQgd291bGQgYWxsb3cgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuXG4tICoqS0FTQU4gLyBTdGFuZGFyZCBEZWJ1Z2dlcnMqKjogU3RhbmRhcmQgS0FTQU4gZnV6emluZyBhbmQgdGhlIG5ldHdvcmtpbmcgc3RhY2smIzM5O3MgYnVpbHQtaW4gYXNzZXJ0aW9ucy9jaGVja3MgYXJlIHN1ZmZpY2llbnQgdG8gdGVzdCBza2IgY29uc3RydWN0aW9uIGFuZCBwYWNrZXQgdHJhbnNtaXNzaW9uIGluIEFGX1hEUC5cblxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoKSB0byB4c2tfc2tiX2luaXRfbWlzYygpIHdoZW4gYnVpbGRpbmcgc2ticyBmb3IgQUZfWERQIHNvY2tldHMgdHJhbnNtaXQuIFRoaXMgbW9kaWZpZXMgY29yZSBuZXR3b3JraW5nIEFGX1hEUCBsb2dpYyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGFuZCBpcyB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA3OjM2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYjA3ZDg1YmY5ZThlZGVjZjdlZmIzMWZhM2NmMmIwODJiNGM1MzQ0YVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDMgMDc6MzY6NTIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3hkcC94c2suYyBiL25ldC94ZHAveHNrLmNcbmluZGV4IDMzNDc1YjE4MGVhNmYuLjIwNzdiYjYyOTljYTkgMTAwNjQ0XG4tLS0gYS9uZXQveGRwL3hzay5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQveGRwL3hzay5jXG5AQCAtOTQ3LDYgJiM0Mzs5NDcsOCBAQCBzdGF0aWMgaW50IHhza19za2JfaW5pdF9taXNjKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4ZHBfc29jayAqeHMsXG4ge1xuIFx0aW50IGVycjtcbiBcbiYjNDM7XHRza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKTtcbiYjNDM7XG4gXHRlcnIgPSB4c2tfc2tiX2Rlc3RydWN0b3Jfc2V0X2FkZHIoc2tiLCBhZGRyKTtcbiBcdGlmICh1bmxpa2VseShlcnIpKVxuIFx0XHRyZXR1cm4gZXJyO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA3OjM2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1hEUF9TT0NLRVRTJiMzNDssCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7eHNrX2Rlc3RydWN0X3NrYiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcigpIHRvIHhza19za2JfaW5pdF9taXNjKCkgd2hlbiBidWlsZGluZyBza2JzIGZvciBBRl9YRFAgc29ja2V0cyB0cmFuc21pdC4gVGhpcyBtb2RpZmllcyBjb3JlIG5ldHdvcmtpbmcgQUZfWERQIGxvZ2ljIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgYW5kIGlzIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBiMDdkODViZjllOGVkZWNmN2VmYjMxZmEzY2YyYjA4MmI0YzUzNDRhCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBTZXAgMyAwNzozNjo1MiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC94ZHAveHNrLmMgYi9uZXQveGRwL3hzay5jCmluZGV4IDMzNDc1YjE4MGVhNmYuLjIwNzdiYjYyOTljYTkgMTAwNjQ0Ci0tLSBhL25ldC94ZHAveHNrLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3hkcC94c2suYwpAQCAtOTQ3LDYgJiM0Mzs5NDcsOCBAQCBzdGF0aWMgaW50IHhza19za2JfaW5pdF9taXNjKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4ZHBfc29jayAqeHMsCiB7CiAJaW50IGVycjsKIAomIzQzOwlza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKTsKJiM0MzsKIAllcnIgPSB4c2tfc2tiX2Rlc3RydWN0b3Jfc2V0X2FkZHIoc2tiLCBhZGRyKTsKIAlpZiAodW5saWtlbHkoZXJyKSkKIAkJcmV0dXJuIGVycjsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDc6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA2MQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI5MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgQ29tbWl0IGBiMDdkODViZjllOGVkZWNmN2VmYjMxZmEzY2YyYjA4MmI0YzUzNDRhYCoqCgpPa2F5LCBzbyB0aGUgdGFzayBhdCBoYW5kIGlzIHRvIGRpc3NlY3QgY29tbWl0IGBiMDdkODViZjllOGVkZWNmN2VmYjMxZmEzY2YyYjA4MmI0YzUzNDRhYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBjaGFuZ2VkIGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRob3NlIGNoYW5nZXMuIExldCYjMzk7cyBzdGFydCBieSBsb29raW5nIGRpcmVjdGx5IGF0IHRoZSBkaWZmLgoKQWxyaWdodCwgYSBzaW1wbGUgYWRkaXRpb24uIFRoZSBkaWZmIHNob3dzIGEgc2luZ2xlIGxpbmUgYmVpbmcgaW5zZXJ0ZWQ6IGBza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKTtgIHdpdGhpbiB0aGUgYHhza19za2JfaW5pdF9taXNjKClgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgaW4gdGhlIGBuZXQveGRwL3hzay5jYCBmaWxlLiBUaGlzIGlzIGNydWNpYWw7IHJlc2V0dGluZyB0aGUgbmV0d29yayBoZWFkZXIgc3VnZ2VzdHMgc29tZXRoaW5nIHNpZ25pZmljYW50IGFib3V0IGhvdyB0aGUgU0tCJiMzOTtzIG5ldHdvcmsgbGF5ZXIgaW5mb3JtYXRpb24gaXMgaGFuZGxlZCwgb3IgbmVlZHMgdG8gYmUgaGFuZGxlZCwgcHJpb3IgdG8gZnVydGhlciBwcm9jZXNzaW5nLCBsaWtlbHkgcmVsYXRlZCB0byBYRFAgc29ja2V0cy4gVGhlIHByZXNlbmNlIG9mIHRoZSBgdW5saWtlbHkoKWAgbWFjcm8gaW4gdGhlIHN1YnNlcXVlbnQgZnVuY3Rpb24gY2FsbCBpbXBsaWVzIHRoZSBhZGRlZCBsaW5lIGlzIGludGVuZGVkIHRvIGltcHJvdmUgcGVyZm9ybWFuY2UgaW4gdGhlIGNvbW1vbiBjYXNlLgoKTm93IEkgbmVlZCB0byB1bmRlcnN0YW5kICp3aHkqIHRoaXMgY2hhbmdlIHdhcyBtYWRlLiBJdCYjMzk7cyBub3QgZW5vdWdoIHRvIHNpbXBseSBzZWUgdGhlIGxpbmUgb2YgY29kZS4gSSBuZWVkIGNvbnRleHQuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gYG5ldC94ZHAveHNrLmNgIGFyb3VuZCBsaW5lIDk0NywgYW5kIHRoZSBwb3NzaWJsZSByZWFzb25zIGZvciByZXNldHRpbmcgdGhlIG5ldHdvcmsgaGVhZGVyLiBJJiMzOTtsbCBwcm9iYWJseSBsb29rIHRvIHJlYWQgdGhlIGZpbGUgd2l0aCBgcmVhZC1maWxlYCwgb3IgdXNlIGBncmVwcGVyYCB0byBmaW5kIHJlbGF0ZWQgY29kZSBhbmQgZG9jdW1lbnRhdGlvbi4gU3BlY2lmaWNhbGx5LCBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bmN0aW9uIG9mIGB4c2tfc2tiX2luaXRfbWlzYygpYCwgaG93IGl0JiMzOTtzIHVzZWQgaW4gdGhlIFhEUCBzb2NrZXQgbGlmZWN5Y2xlLCBhbmQgaG93IHRoZSBuZXR3b3JrIGhlYWRlciBpcyBzdWJzZXF1ZW50bHkgdXRpbGl6ZWQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQmIzM5O3MgZGlmZmVyZW50IGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIGNoYW5nZSB0byBjb21wcmVoZW5kIHdoYXQgaXMgYmVpbmcgZml4ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDc6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQveGRwL3hzay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA5MzA6XHRcbiA5MzE6XHRJTkRJUkVDVF9DQUxMQUJMRV9TQ09QRVxuIDkzMjpcdHZvaWQgeHNrX2Rlc3RydWN0X3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIDkzMzpcdHtcbiA5MzQ6XHRcdHN0cnVjdCB4c2tfdHhfbWV0YWRhdGFfY29tcGwgKmNvbXBsID0gXHUwMDI2c2tiX3NoaW5mbyhza2IpLVx1MDAzZXhza19tZXRhO1xuIDkzNTpcdFxuIDkzNjpcdFx0aWYgKGNvbXBsLVx1MDAzZXR4X3RpbWVzdGFtcCkge1xuIDkzNzpcdFx0XHQvKiBzdyBjb21wbGV0aW9uIHRpbWVzdGFtcCwgbm90IGEgcmVhbCBvbmUgKi9cbiA5Mzg6XHRcdFx0KmNvbXBsLVx1MDAzZXR4X3RpbWVzdGFtcCA9IGt0aW1lX2dldF90YWlfZmFzdF9ucygpO1xuIDkzOTpcdFx0fVxuIDk0MDpcdFxuIDk0MTpcdFx0eHNrX2NxX3N1Ym1pdF9hZGRyX2xvY2tlZCh4ZHBfc2soc2tiLVx1MDAzZXNrKS1cdTAwM2Vwb29sLCBza2IpO1xuIDk0MjpcdFx0c29ja193ZnJlZShza2IpO1xuIDk0MzpcdH1cbiA5NDQ6XHRcbiA5NDU6XHRzdGF0aWMgaW50IHhza19za2JfaW5pdF9taXNjKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4ZHBfc29jayAqeHMsXG4gOTQ2Olx0XHRcdFx0ICAgICB1NjQgYWRkcilcbiA5NDc6XHR7XG4gOTQ4Olx0XHRpbnQgZXJyO1xuIDk0OTpcdFxuIDk1MDpcdFx0c2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYik7XG4gOTUxOlx0XG4gOTUyOlx0XHRlcnIgPSB4c2tfc2tiX2Rlc3RydWN0b3Jfc2V0X2FkZHIoc2tiLCBhZGRyKTtcbiA5NTM6XHRcdGlmICh1bmxpa2VseShlcnIpKVxuIDk1NDpcdFx0XHRyZXR1cm4gZXJyO1xuIDk1NTpcdFxuIDk1NjpcdFx0c2tiLVx1MDAzZWRldiA9IHhzLVx1MDAzZWRldjtcbiA5NTc6XHRcdHNrYi1cdTAwM2Vwcmlvcml0eSA9IFJFQURfT05DRSh4cy1cdTAwM2Vzay5za19wcmlvcml0eSk7XG4gOTU4Olx0XHRza2ItXHUwMDNlbWFyayA9IFJFQURfT05DRSh4cy1cdTAwM2Vzay5za19tYXJrKTtcbiA5NTk6XHRcdHNrYi1cdTAwM2VkZXN0cnVjdG9yID0geHNrX2Rlc3RydWN0X3NrYjtcbiA5NjA6XHRcdHJldHVybiAwO1xuIDk2MTpcdH1cbiA5NjI6XHRcbiA5NjM6XHRzdGF0aWMgdm9pZCB4c2tfY29uc3VtZV9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYilcbiA5NjQ6XHR7XG4gOTY1Olx0XHRzdHJ1Y3QgeGRwX3NvY2sgKnhzID0geGRwX3NrKHNrYi1cdTAwM2Vzayk7XG4gOTY2Olx0XHR1MzIgbnVtX2Rlc2NzID0geHNrX2dldF9udW1fZGVzYyhza2IpO1xuIDk2NzpcdFx0c3RydWN0IHhza19hZGRycyAqeHNrX2FkZHI7XG4gOTY4Olx0XG4gOTY5Olx0XHRpZiAodW5saWtlbHkoIXhza19za2JfZGVzdHJ1Y3Rvcl9pc19hZGRyKHNrYikpKSB7XG4gOTcwOlx0XHRcdHhza19hZGRyID0gKHN0cnVjdCB4c2tfYWRkcnMgKilza2Jfc2hpbmZvKHNrYiktXHUwMDNlZGVzdHJ1Y3Rvcl9hcmc7XG4gOTcxOlx0XHRcdGttZW1fY2FjaGVfZnJlZSh4c2tfdHhfZ2VuZXJpY19jYWNoZSwgeHNrX2FkZHIpO1xuIDk3MjpcdFx0fVxuIDk3MzpcdFxuIDk3NDpcdFx0c2tiLVx1MDAzZWRlc3RydWN0b3IgPSBzb2NrX3dmcmVlO1xuIDk3NTpcdFx0eHNrX2NxX2NhbmNlbF9sb2NrZWQoeHMtXHUwMDNlcG9vbCwgbnVtX2Rlc2NzKTtcbiA5NzY6XHRcdC8qIEZyZWUgc2tiIHdpdGhvdXQgdHJpZ2dlcmluZyB0aGUgcGVyZiBkcm9wIHRyYWNlICovXG4gOTc3Olx0XHRjb25zdW1lX3NrYihza2IpO1xuIDk3ODpcdFx0eHMtXHUwMDNlc2tiID0gTlVMTDtcbiA5Nzk6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDc6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzYyOQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYHhza19za2JfaW5pdF9taXNjYCBmdW5jdGlvbiBhbmQgc2VlIHdoYXQmIzM5O3MgZ29pbmcgb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjb250ZXh0IHdpdGhpbiB0aGUgWERQL1hTSyBmcmFtZXdvcmsuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHRyYWNlIGl0cyBjYWxscywgYW5kIHVuZGVyc3RhbmQgaXRzIGFyZ3VtZW50cyAtIGFuZCBsb29rIGZvciB0aGUgY2FsbGluZyBwYXR0ZXJuIGZyb20gdGhlIHBsYWNlcyB3aGVyZSBpdCYjMzk7cyBiZWluZyB1c2VkLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgSSYjMzk7bGwgbmVlZCB0byByZWFkIG1vcmUgb2YgYG5ldC94ZHAveHNrLmNgIHRvIGdldCB0aGUgYmlnZ2VyIHBpY3R1cmUuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoaXMgaW5pdGlhbGl6YXRpb24gaXMgdXRpbGl6ZWQgd2l0aGluIHRoZSBYU0sgc3RydWN0dXJlLiBVbHRpbWF0ZWx5LCB0aGUgZ29hbCBpcyB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGxpdHRsZSBwaWVjZSBmaXRzIGludG8gdGhlIG92ZXJhbGwgcGVyZm9ybWFuY2UgcHJvZmlsZSAtIGFuZCB3aGVyZSBwb3RlbnRpYWwgYm90dGxlbmVja3MgY291bGQgYmUuIEl0JiMzOTtzIHRpbWUgdG8gZGlnIGluIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA3OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hza19za2JfaW5pdF9taXNjJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hkcC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hkcC94c2suYz05MzI9dm9pZCB4c2tfZGVzdHJ1Y3Rfc2tiKHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L3hkcC94c2suYy05NDQtXG5uZXQveGRwL3hzay5jOjk0NTpzdGF0aWMgaW50IHhza19za2JfaW5pdF9taXNjKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4ZHBfc29jayAqeHMsXG5uZXQveGRwL3hzay5jLTk0Ni1cdFx0XHQgICAgIHU2NCBhZGRyKVxuLS1cbm5ldC94ZHAveHNrLmM9MTExMT1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhza19idWlsZF9za2Ioc3RydWN0IHhkcF9zb2NrICp4cyxcbi0tXG5uZXQveGRwL3hzay5jLTExODYtXHRpZiAoIXhzLVx1MDAzZXNrYikge1xubmV0L3hkcC94c2suYzoxMTg3Olx0XHRlcnIgPSB4c2tfc2tiX2luaXRfbWlzYyhza2IsIHhzLCBkZXNjLVx1MDAzZWFkZHIpO1xubmV0L3hkcC94c2suYy0xMTg4LVx0XHRpZiAodW5saWtlbHkoZXJyKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwNzozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTE5CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIFhTSyBQYWNrZXQgVHJhbnNtaXNzaW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IFhTSyBwYWNrZXRzIGFyZSBhY3R1YWxseSBtb3ZlZCBhcm91bmQgYW5kIHByb2Nlc3NlZC4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgYHhza19idWlsZF9za2JgIGZ1bmN0aW9uIGFuZCB0aGUgc3Vycm91bmRpbmcgY29udGV4dC4gVGltZSB0byBjcmFjayBvcGVuIGBuZXQveGRwL3hzay5jYCwgc3BlY2lmaWNhbGx5IGxpbmVzIDExMDAgdGhyb3VnaCAxMjUwLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBzcGVjaWZpY3MgSSYjMzk7bSBsb29raW5nIGZvci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG1lY2hhbmljcyBvZiB0aGUgcGFja2V0JiMzOTtzIGpvdXJuZXk6IGhvdyBpdCBnZXRzIGJ1aWx0IGludG8gYW4gU0tCIChTb2NrZXQgQnVmZmVyKSwgYW5kIHRoZW4gd2hlcmUgaXQgZ29lcyBmcm9tIHRoZXJlIHdpdGhpbiB0aGUgWFNLIGZyYW1ld29yay4gVGhpcyBwYXJ0aWN1bGFyIHNlZ21lbnQgb2YgdGhlIGNvZGUgbGlrZWx5IGRlYWxzIHdpdGggdGhlIGNyaXRpY2FsIHBhdGggb2YgdGhlIHBhY2tldCYjMzk7cyBsaWZlY3ljbGUsIHNvIHVuZGVyc3RhbmRpbmcgdGhpcyBpcyBlc3NlbnRpYWwgdG8gdGhlIFhTSyBwcm9jZXNzaW5nIG1vZGVsLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBjbHVlcyBhYm91dCB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGUgdXNlci1zcGFjZSBhcHBsaWNhdGlvbiwgdGhlIFhEUCBwcm9ncmFtLCBhbmQgdGhlIGtlcm5lbCBuZXR3b3JrIHN0YWNrIGluIHRoaXMgY3J1Y2lhbCBzdGVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA3OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3hkcC94c2suYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzExMDA6XHRcdH1cbjExMDE6XHRcbjExMDI6XHRcdHNrYi1cdTAwM2VsZW4gJiM0Mzs9IGxlbjtcbjExMDM6XHRcdHNrYi1cdTAwM2VkYXRhX2xlbiAmIzQzOz0gbGVuO1xuMTEwNDpcdFx0c2tiLVx1MDAzZXRydWVzaXplICYjNDM7PSB0cztcbjExMDU6XHRcbjExMDY6XHRcdHJlZmNvdW50X2FkZCh0cywgXHUwMDI2eHMtXHUwMDNlc2suc2tfd21lbV9hbGxvYyk7XG4xMTA3Olx0XG4xMTA4Olx0XHRyZXR1cm4gc2tiO1xuMTEwOTpcdH1cbjExMTA6XHRcbjExMTE6XHRzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhza19idWlsZF9za2Ioc3RydWN0IHhkcF9zb2NrICp4cyxcbjExMTI6XHRcdFx0XHRcdCAgICAgc3RydWN0IHhkcF9kZXNjICpkZXNjKVxuMTExMzpcdHtcbjExMTQ6XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSB4cy1cdTAwM2VkZXY7XG4xMTE1Olx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0geHMtXHUwMDNlc2tiO1xuMTExNjpcdFx0aW50IGVycjtcbjExMTc6XHRcbjExMTg6XHRcdGlmIChkZXYtXHUwMDNlcHJpdl9mbGFncyBcdTAwMjYgSUZGX1RYX1NLQl9OT19MSU5FQVIpIHtcbjExMTk6XHRcdFx0c2tiID0geHNrX2J1aWxkX3NrYl96ZXJvY29weSh4cywgZGVzYyk7XG4xMTIwOlx0XHRcdGlmIChJU19FUlIoc2tiKSkge1xuMTEyMTpcdFx0XHRcdGVyciA9IFBUUl9FUlIoc2tiKTtcbjExMjI6XHRcdFx0XHRza2IgPSBOVUxMO1xuMTEyMzpcdFx0XHRcdGdvdG8gZnJlZV9lcnI7XG4xMTI0Olx0XHRcdH1cbjExMjU6XHRcdH0gZWxzZSB7XG4xMTI2Olx0XHRcdHUzMiBociwgdHIsIGxlbjtcbjExMjc6XHRcdFx0dm9pZCAqYnVmZmVyO1xuMTEyODpcdFxuMTEyOTpcdFx0XHRidWZmZXIgPSB4c2tfYnVmZl9yYXdfZ2V0X2RhdGEoeHMtXHUwMDNlcG9vbCwgZGVzYy1cdTAwM2VhZGRyKTtcbjExMzA6XHRcdFx0bGVuID0gZGVzYy1cdTAwM2VsZW47XG4xMTMxOlx0XG4xMTMyOlx0XHRcdGlmICghc2tiKSB7XG4xMTMzOlx0XHRcdFx0aHIgPSBtYXgoTkVUX1NLQl9QQUQsIEwxX0NBQ0hFX0FMSUdOKGRldi1cdTAwM2VuZWVkZWRfaGVhZHJvb20pKTtcbjExMzQ6XHRcdFx0XHR0ciA9IGRldi1cdTAwM2VuZWVkZWRfdGFpbHJvb207XG4xMTM1Olx0XHRcdFx0c2tiID0gc29ja19hbGxvY19zZW5kX3NrYihcdTAwMjZ4cy1cdTAwM2VzaywgaHIgJiM0MzsgbGVuICYjNDM7IHRyLCAxLCBcdTAwMjZlcnIpO1xuMTEzNjpcdFx0XHRcdGlmICh1bmxpa2VseSghc2tiKSlcbjExMzc6XHRcdFx0XHRcdGdvdG8gZnJlZV9lcnI7XG4xMTM4Olx0XG4xMTM5Olx0XHRcdFx0c2tiX3Jlc2VydmUoc2tiLCBocik7XG4xMTQwOlx0XHRcdFx0c2tiX3B1dChza2IsIGxlbik7XG4xMTQxOlx0XG4xMTQyOlx0XHRcdFx0ZXJyID0gc2tiX3N0b3JlX2JpdHMoc2tiLCAwLCBidWZmZXIsIGxlbik7XG4xMTQzOlx0XHRcdFx0aWYgKHVubGlrZWx5KGVycikpXG4xMTQ0Olx0XHRcdFx0XHRnb3RvIGZyZWVfZXJyO1xuMTE0NTpcdFxuMTE0NjpcdFx0XHRcdGlmIChkZXNjLVx1MDAzZW9wdGlvbnMgXHUwMDI2IFhEUF9UWF9NRVRBREFUQSkge1xuMTE0NzpcdFx0XHRcdFx0ZXJyID0geHNrX3NrYl9tZXRhZGF0YShza2IsIGJ1ZmZlciwgZGVzYyxcbjExNDg6XHRcdFx0XHRcdFx0XHQgICAgICAgeHMtXHUwMDNlcG9vbCwgaHIpO1xuMTE0OTpcdFx0XHRcdFx0aWYgKHVubGlrZWx5KGVycikpXG4xMTUwOlx0XHRcdFx0XHRcdGdvdG8gZnJlZV9lcnI7XG4xMTUxOlx0XHRcdFx0fVxuMTE1MjpcdFx0XHR9IGVsc2Uge1xuMTE1MzpcdFx0XHRcdGludCBucl9mcmFncyA9IHNrYl9zaGluZm8oc2tiKS1cdTAwM2Vucl9mcmFncztcbjExNTQ6XHRcdFx0XHRzdHJ1Y3QgeHNrX2FkZHJzICp4c2tfYWRkcjtcbjExNTU6XHRcdFx0XHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbjExNTY6XHRcdFx0XHR1OCAqdmFkZHI7XG4xMTU3Olx0XG4xMTU4Olx0XHRcdFx0eHNrX2FkZHIgPSB4c2tfYWRkcnNfYWxsb2Moc2tiKTtcbjExNTk6XHRcdFx0XHRpZiAoIXhza19hZGRyKSB7XG4xMTYwOlx0XHRcdFx0XHRlcnIgPSAtRU5PTUVNO1xuMTE2MTpcdFx0XHRcdFx0Z290byBmcmVlX2VycjtcbjExNjI6XHRcdFx0XHR9XG4xMTYzOlx0XG4xMTY0Olx0XHRcdFx0eHNrX2FkZHItXHUwMDNlYWRkcnNbeHNrX2FkZHItXHUwMDNlbnVtX2Rlc2NzXSA9IGRlc2MtXHUwMDNlYWRkcjtcbjExNjU6XHRcbjExNjY6XHRcdFx0XHRpZiAodW5saWtlbHkobnJfZnJhZ3MgPT0gKE1BWF9TS0JfRlJBR1MgLSAxKSBcdTAwMjZcdTAwMjYgeHBfbWJfZGVzYyhkZXNjKSkpIHtcbjExNjc6XHRcdFx0XHRcdGVyciA9IC1FT1ZFUkZMT1c7XG4xMTY4Olx0XHRcdFx0XHRnb3RvIGZyZWVfZXJyO1xuMTE2OTpcdFx0XHRcdH1cbjExNzA6XHRcbjExNzE6XHRcdFx0XHRwYWdlID0gYWxsb2NfcGFnZSh4cy1cdTAwM2Vzay5za19hbGxvY2F0aW9uKTtcbjExNzI6XHRcdFx0XHRpZiAodW5saWtlbHkoIXBhZ2UpKSB7XG4xMTczOlx0XHRcdFx0XHRlcnIgPSAtRUFHQUlOO1xuMTE3NDpcdFx0XHRcdFx0Z290byBmcmVlX2VycjtcbjExNzU6XHRcdFx0XHR9XG4xMTc2Olx0XG4xMTc3Olx0XHRcdFx0dmFkZHIgPSBrbWFwX2xvY2FsX3BhZ2UocGFnZSk7XG4xMTc4Olx0XHRcdFx0bWVtY3B5KHZhZGRyLCBidWZmZXIsIGxlbik7XG4xMTc5Olx0XHRcdFx0a3VubWFwX2xvY2FsKHZhZGRyKTtcbjExODA6XHRcbjExODE6XHRcdFx0XHRza2JfYWRkX3J4X2ZyYWcoc2tiLCBucl9mcmFncywgcGFnZSwgMCwgbGVuLCBQQUdFX1NJWkUpO1xuMTE4MjpcdFx0XHRcdHJlZmNvdW50X2FkZChQQUdFX1NJWkUsIFx1MDAyNnhzLVx1MDAzZXNrLnNrX3dtZW1fYWxsb2MpO1xuMTE4MzpcdFx0XHR9XG4xMTg0Olx0XHR9XG4xMTg1Olx0XG4xMTg2Olx0XHRpZiAoIXhzLVx1MDAzZXNrYikge1xuMTE4NzpcdFx0XHRlcnIgPSB4c2tfc2tiX2luaXRfbWlzYyhza2IsIHhzLCBkZXNjLVx1MDAzZWFkZHIpO1xuMTE4ODpcdFx0XHRpZiAodW5saWtlbHkoZXJyKSlcbjExODk6XHRcdFx0XHRnb3RvIGZyZWVfZXJyO1xuMTE5MDpcdFx0fVxuMTE5MTpcdFx0eHNrX2luY19udW1fZGVzYyhza2IpO1xuMTE5MjpcdFxuMTE5MzpcdFx0cmV0dXJuIHNrYjtcbjExOTQ6XHRcbjExOTU6XHRmcmVlX2VycjpcbjExOTY6XHRcdGlmIChza2IgXHUwMDI2XHUwMDI2ICF4cy1cdTAwM2Vza2IpXG4xMTk3Olx0XHRcdGtmcmVlX3NrYihza2IpO1xuMTE5ODpcdFxuMTE5OTpcdFx0aWYgKGVyciA9PSAtRU9WRVJGTE9XKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDc6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTkwMwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRpdmluZyBpbnRvIEFGX1hEUCBhbmQgeHNrX2J1aWxkX3NrYioqCgpPa2F5LCBzbyBJIHdhbnQgdG8gZ2V0IGEgc29saWQgZ3Jhc3Agb2YgaG93IEFGX1hEUCBhbmQsIHNwZWNpZmljYWxseSwgdGhlIGB4c2tfYnVpbGRfc2tiYCBmdW5jdGlvbiwgYXJlIGZ1bmN0aW9uaW5nLiBNeSBmaXJzdCBpbnN0aW5jdCwgYXMgYWx3YXlzLCBpcyB0byB0cmFjZSBpdHMgdXNhZ2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjYWxsIGZsb3cg4oCTIHdoZXJlIGlzIHRoaXMgdGhpbmcgYWN0dWFsbHkgYmVpbmcgKnVzZWQqPyBUaGlzIG1lYW5zIGdldHRpbmcgdGhlIGNhbGwgZ3JhcGggZm9yIGB4c2tfYnVpbGRfc2tiYCwgc2VlaW5nIHRoZSBpbW1lZGlhdGUgY2FsbGVycy4gQWx0ZXJuYXRpdmVseSwgc2luY2UgaXQgaXMgdXNlZCBpbiBBRl9YRFAsIGEgYnJvYWRlciBzZWFyY2ggd291bGQgYmUgdG8gZmluZCBjYWxsZXJzIGluIHRoZSBgbmV0L3hkcC94c2suY2Agc291cmNlIGZpbGUuIFVuZGVyc3RhbmRpbmcgdGhlc2UgY29udGV4dHMgd2lsbCBwYWludCBhIGNsZWFyZXIgcGljdHVyZSBvZiBob3cgQUZfWERQIGlzIHB1dCB0b2dldGhlci4gSXQgd2lsbCBzaG93IG1lIHRoZSBkYXRhIGZsb3cgYW5kIGhvdyB0aGUgcGFydHMgbGluayB0b2dldGhlci4gVGhpcyBpcyB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIHJlYWxseSBkaWdnaW5nIGludG8gdGhlIGRldGFpbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA3OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hza19idWlsZF9za2ImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGRwLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGRwL3hzay5jPTk5MD1zdGF0aWMgaW50IHhza19za2JfbWV0YWRhdGEoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdm9pZCAqYnVmZmVyLFxuLS1cbm5ldC94ZHAveHNrLmMtMTAzNC1cbm5ldC94ZHAveHNrLmM6MTAzNTpzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhza19idWlsZF9za2JfemVyb2NvcHkoc3RydWN0IHhkcF9zb2NrICp4cyxcbm5ldC94ZHAveHNrLmMtMTAzNi1cdFx0XHRcdFx0ICAgICAgc3RydWN0IHhkcF9kZXNjICpkZXNjKVxuLS1cbm5ldC94ZHAveHNrLmMtMTExMC1cbm5ldC94ZHAveHNrLmM6MTExMTpzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhza19idWlsZF9za2Ioc3RydWN0IHhkcF9zb2NrICp4cyxcbm5ldC94ZHAveHNrLmMtMTExMi1cdFx0XHRcdCAgICAgc3RydWN0IHhkcF9kZXNjICpkZXNjKVxuLS1cbm5ldC94ZHAveHNrLmMtMTExOC1cdGlmIChkZXYtXHUwMDNlcHJpdl9mbGFncyBcdTAwMjYgSUZGX1RYX1NLQl9OT19MSU5FQVIpIHtcbm5ldC94ZHAveHNrLmM6MTExOTpcdFx0c2tiID0geHNrX2J1aWxkX3NrYl96ZXJvY29weSh4cywgZGVzYyk7XG5uZXQveGRwL3hzay5jLTExMjAtXHRcdGlmIChJU19FUlIoc2tiKSkge1xuLS1cbm5ldC94ZHAveHNrLmM9MTIxNz1zdGF0aWMgaW50IF9feHNrX2dlbmVyaWNfeG1pdChzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L3hkcC94c2suYy0xMjYzLVxubmV0L3hkcC94c2suYzoxMjY0Olx0XHRza2IgPSB4c2tfYnVpbGRfc2tiKHhzLCBcdTAwMjZkZXNjKTtcbm5ldC94ZHAveHNrLmMtMTI2NS1cdFx0aWYgKElTX0VSUihza2IpKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA3OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY2MTIKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA3NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgdGhlIEFGX1hEUCBHZW5lcmljIFRyYW5zbWl0IFBhdGgqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhlIGBfX3hza19nZW5lcmljX3htaXRgIGZ1bmN0aW9uLiBJdCYjMzk7cyBjbGVhcmx5IGEga2V5IGNvbXBvbmVudCBvZiB0aGUgQUZfWERQIChYU0sgLSBYRFAgU29ja2V0cykgZ2VuZXJpYyB0cmFuc21pdCBwYXRoLiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byB1bmRlcnN0YW5kIHdoYXQgYWN0dWFsbHkgKnRyaWdnZXJzKiB0aGlzIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdHJhY2UgdGhlIGNhbGwgcGF0aHMgdG8gZmlndXJlIG91dCBob3cgcGFja2V0cyBlbmQgdXAgYmVpbmcgdHJhbnNtaXR0ZWQgdmlhIGBfX3hza19nZW5lcmljX3htaXRgLgoKSSYjMzk7bGwgYmUgbG9va2luZyBzcGVjaWZpY2FsbHkgYXQgdGhlIEFGX1hEUCBzb2NrZXQgQVBJIHVzYWdlLiBJIGV4cGVjdCBpdCBpcyBwcm9iYWJseSBpbnZvbHZlZCBpbiBlaXRoZXIgdGhlIGBzZW5kbXNnYCBzeXNjYWxsIG9yIHRoZSBgcG9sbGAgc3lzdGVtIGNhbGwgd2hlbiB1c2VkIHdpdGggWERQIHNvY2tldHMuIEkmIzM5O2xsIG5lZWQgdG8gc2VlIGhvdyB0aGVzZSBjYWxscyBpbnRlcmFjdCB3aXRoIHRoZSB1bmRlcmx5aW5nIFhTSyBkYXRhIHN0cnVjdHVyZXMgdG8gZmlndXJlIG91dCB3aGVuIGFuZCB3aHkgYF9feHNrX2dlbmVyaWNfeG1pdGAgZ2V0cyBpbnZva2VkLCBhbmQgb24gd2hpY2ggQUZfWERQIHNvY2tldCBpbnN0YW5jZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA3OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3hkcC94c2suYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyMTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogOTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTIxNTpcdH1cbjEyMTY6XHRcbjEyMTc6XHRzdGF0aWMgaW50IF9feHNrX2dlbmVyaWNfeG1pdChzdHJ1Y3Qgc29jayAqc2spXG4xMjE4Olx0e1xuMTIxOTpcdFx0c3RydWN0IHhkcF9zb2NrICp4cyA9IHhkcF9zayhzayk7XG4xMjIwOlx0XHRzdHJ1Y3QgeGRwX2Rlc2MgZGVzYztcbjEyMjE6XHRcdHN0cnVjdCBza19idWZmICpza2I7XG4xMjIyOlx0XHR1MzIgY2FjaGVkX2NvbnM7XG4xMjIzOlx0XHR1MzIgbWF4X2JhdGNoO1xuMTIyNDpcdFx0aW50IGVyciA9IDA7XG4xMjI1Olx0XG4xMjI2Olx0XHRtdXRleF9sb2NrKFx1MDAyNnhzLVx1MDAzZW11dGV4KTtcbjEyMjc6XHRcdGNhY2hlZF9jb25zID0geHMtXHUwMDNldHgtXHUwMDNlY2FjaGVkX2NvbnM7XG4xMjI4Olx0XG4xMjI5Olx0XHQvKiBTaW5jZSB3ZSBkcm9wcGVkIHRoZSBSQ1UgcmVhZCBsb2NrLCB0aGUgc29ja2V0IHN0YXRlIG1pZ2h0IGhhdmUgY2hhbmdlZC4gKi9cbjEyMzA6XHRcdGlmICh1bmxpa2VseSgheHNrX2lzX2JvdW5kKHhzKSkpIHtcbjEyMzE6XHRcdFx0ZXJyID0gLUVOWElPO1xuMTIzMjpcdFx0XHRnb3RvIG91dDtcbjEyMzM6XHRcdH1cbjEyMzQ6XHRcbjEyMzU6XHRcdGlmICh4cy1cdTAwM2VxdWV1ZV9pZCBcdTAwM2U9IHhzLVx1MDAzZWRldi1cdTAwM2VyZWFsX251bV90eF9xdWV1ZXMpXG4xMjM2Olx0XHRcdGdvdG8gb3V0O1xuMTIzNzpcdFxuMTIzODpcdFx0bWF4X2JhdGNoID0gUkVBRF9PTkNFKHhzLVx1MDAzZW1heF90eF9idWRnZXQpO1xuMTIzOTpcdFx0d2hpbGUgKHhza3FfY29uc19wZWVrX2Rlc2MoeHMtXHUwMDNldHgsIFx1MDAyNmRlc2MsIHhzLVx1MDAzZXBvb2wpKSB7XG4xMjQwOlx0XHRcdGlmIChtYXhfYmF0Y2gtLSA9PSAwKSB7XG4xMjQxOlx0XHRcdFx0ZXJyID0gLUVBR0FJTjtcbjEyNDI6XHRcdFx0XHRnb3RvIG91dDtcbjEyNDM6XHRcdFx0fVxuMTI0NDpcdFxuMTI0NTpcdFx0XHQvKiBUaGlzIGlzIHRoZSBiYWNrcHJlc3N1cmUgbWVjaGFuaXNtIGZvciB0aGUgVHggcGF0aC5cbjEyNDY6XHRcdFx0ICogUmVzZXJ2ZSBzcGFjZSBpbiB0aGUgY29tcGxldGlvbiBxdWV1ZSBhbmQgb25seSBwcm9jZWVkXG4xMjQ3Olx0XHRcdCAqIGlmIHRoZXJlIGlzIHNwYWNlIGluIGl0LiBUaGlzIGF2b2lkcyBoYXZpbmcgdG8gaW1wbGVtZW50XG4xMjQ4Olx0XHRcdCAqIGFueSBidWZmZXJpbmcgaW4gdGhlIFR4IHBhdGguXG4xMjQ5Olx0XHRcdCAqL1xuMTI1MDpcdFx0XHRlcnIgPSB4c2tfY3FfcmVzZXJ2ZV9sb2NrZWQoeHMtXHUwMDNlcG9vbCk7XG4xMjUxOlx0XHRcdGlmIChlcnIpIHtcbjEyNTI6XHRcdFx0XHRlcnIgPSAtRUFHQUlOO1xuMTI1MzpcdFx0XHRcdGdvdG8gb3V0O1xuMTI1NDpcdFx0XHR9XG4xMjU1Olx0XG4xMjU2Olx0XHRcdGlmICh1bmxpa2VseSh4cy1cdTAwM2VkcmFpbl9jb250KSkge1xuMTI1NzpcdFx0XHRcdHhza19jcV9zdWJtaXRfYWRkcl9zaW5nbGVfbG9ja2VkKHhzLVx1MDAzZXBvb2wsIFx1MDAyNmRlc2MpO1xuMTI1ODpcdFx0XHRcdHhzLVx1MDAzZXR4LVx1MDAzZWludmFsaWRfZGVzY3MmIzQzOyYjNDM7O1xuMTI1OTpcdFx0XHRcdHhza3FfY29uc19yZWxlYXNlKHhzLVx1MDAzZXR4KTtcbjEyNjA6XHRcdFx0XHR4cy1cdTAwM2VkcmFpbl9jb250ID0geHBfbWJfZGVzYyhcdTAwMjZkZXNjKTtcbjEyNjE6XHRcdFx0XHRjb250aW51ZTtcbjEyNjI6XHRcdFx0fVxuMTI2MzpcdFxuMTI2NDpcdFx0XHRza2IgPSB4c2tfYnVpbGRfc2tiKHhzLCBcdTAwMjZkZXNjKTtcbjEyNjU6XHRcdFx0aWYgKElTX0VSUihza2IpKSB7XG4xMjY2Olx0XHRcdFx0ZXJyID0gUFRSX0VSUihza2IpO1xuMTI2NzpcdFx0XHRcdGlmIChlcnIgIT0gLUVPVkVSRkxPVylcbjEyNjg6XHRcdFx0XHRcdGdvdG8gb3V0O1xuMTI2OTpcdFx0XHRcdGlmICh4cF9tYl9kZXNjKFx1MDAyNmRlc2MpKVxuMTI3MDpcdFx0XHRcdFx0eHMtXHUwMDNlZHJhaW5fY29udCA9IHRydWU7XG4xMjcxOlx0XHRcdFx0ZXJyID0gMDtcbjEyNzI6XHRcdFx0XHRjb250aW51ZTtcbjEyNzM6XHRcdFx0fVxuMTI3NDpcdFxuMTI3NTpcdFx0XHR4c2txX2NvbnNfcmVsZWFzZSh4cy1cdTAwM2V0eCk7XG4xMjc2Olx0XG4xMjc3Olx0XHRcdGlmICh4cF9tYl9kZXNjKFx1MDAyNmRlc2MpKSB7XG4xMjc4Olx0XHRcdFx0eHMtXHUwMDNlc2tiID0gc2tiO1xuMTI3OTpcdFx0XHRcdGNvbnRpbnVlO1xuMTI4MDpcdFx0XHR9XG4xMjgxOlx0XG4xMjgyOlx0XHRcdGVyciA9IF9fZGV2X2RpcmVjdF94bWl0KHNrYiwgeHMtXHUwMDNlcXVldWVfaWQpO1xuMTI4MzpcdFx0XHRpZiAgKGVyciA9PSBORVRERVZfVFhfQlVTWSkge1xuMTI4NDpcdFx0XHRcdC8qIFRlbGwgdXNlci1zcGFjZSB0byByZXRyeSB0aGUgc2VuZCAqL1xuMTI4NTpcdFx0XHRcdHhza3FfY29uc19jYW5jZWxfbih4cy1cdTAwM2V0eCwgeHNrX2dldF9udW1fZGVzYyhza2IpKTtcbjEyODY6XHRcdFx0XHR4c2tfY29uc3VtZV9za2Ioc2tiKTtcbjEyODc6XHRcdFx0XHRlcnIgPSAtRUFHQUlOO1xuMTI4ODpcdFx0XHRcdGdvdG8gb3V0O1xuMTI4OTpcdFx0XHR9XG4xMjkwOlx0XG4xMjkxOlx0XHRcdC8qIElnbm9yZSBORVRfWE1JVF9DTiBhcyBwYWNrZXQgbWlnaHQgaGF2ZSBiZWVuIHNlbnQgKi9cbjEyOTI6XHRcdFx0aWYgKGVyciA9PSBORVRfWE1JVF9EUk9QKSB7XG4xMjkzOlx0XHRcdFx0LyogU0tCIGNvbXBsZXRlZCBidXQgbm90IHNlbnQgKi9cbjEyOTQ6XHRcdFx0XHRlcnIgPSAtRUJVU1k7XG4xMjk1Olx0XHRcdFx0eHMtXHUwMDNlc2tiID0gTlVMTDtcbjEyOTY6XHRcdFx0XHRnb3RvIG91dDtcbjEyOTc6XHRcdFx0fVxuMTI5ODpcdFxuMTI5OTpcdFx0XHR4cy1cdTAwM2Vza2IgPSBOVUxMO1xuMTMwMDpcdFx0fVxuMTMwMTpcdFxuMTMwMjpcdFx0aWYgKHhza3FfaGFzX2Rlc2NzKHhzLVx1MDAzZXR4KSkge1xuMTMwMzpcdFx0XHRib29sIGRyYWluID0geHMtXHUwMDNlc2tiIHx8IHhzLVx1MDAzZWRyYWluX2NvbnQgfHwgeHBfbWJfZGVzYyhcdTAwMjZkZXNjKTtcbjEzMDQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDc6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODIzMgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDMwMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgQUZfWERQIFBhY2tldCBUcmFuc21pc3Npb24gRml4KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCB0aGUgYF9feHNrX2dlbmVyaWNfeG1pdGAgZnVuY3Rpb24sIHdoaWNoIGlzIHRoZSBoZWFydCBvZiBBRl9YRFAgcGFja2V0IHRyYW5zbWlzc2lvbiwgdXNlcyBgX19kZXZfZGlyZWN0X3htaXRgIHRvIHNlbmQgdGhlIHBhY2tldHMuIFRoaXMgaXMgcHJldHR5IHN0YW5kYXJkIGZvciBkaXJlY3QgdHJhbnNtaXNzaW9uIHBhdGhzIGluIHRoZSBrZXJuZWwuIFRoZSBwcm9ibGVtLCBhcyBJIHNlZSBpdCwgc3RlbXMgZnJvbSB0aGUgaW5pdGlhbGl6YXRpb24gd2l0aGluIGB4c2tfc2tiX2luaXRfbWlzY2AuIFNwZWNpZmljYWxseSwgdGhlIGNyaXRpY2FsIGBza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKWAgY2FsbCB3YXMgbWlzc2luZy4KCldpdGhvdXQgdGhhdCBjcnVjaWFsIGNhbGwgdG8gcmVzZXQgdGhlIG5ldHdvcmsgaGVhZGVyLCB0aGUgYHNrYi0mZ3Q7bmV0d29ya19oZWFkZXJgIHBvaW50ZXIgd2FzIGVzc2VudGlhbGx5IHVuaW5pdGlhbGl6ZWQuIFRoaXMgaXMgYSBjbGFzc2ljIHNvdXJjZSBvZiBlcnJvcnMuIFdoZW4gdGhlIGtlcm5lbCBjYWxscyBgX19kZXZfZGlyZWN0X3htaXRgLCBvciBxZGlzYywgb3IgcGFja2V0IGNsYXNzaWZpZXJzLCBvciBldmVuIGp1c3QgYGRldl9xdWV1ZV94bWl0YCDigJMgb3IsIGhlYXZlbiBmb3JiaWQsIHRoZSBkZXZpY2UgZHJpdmVyIGl0c2VsZiDigJMgZXhhbWluZXMgdGhlIG5ldHdvcmsgaGVhZGVyLCBpdCYjMzk7cyByZWFkaW5nIGdhcmJhZ2UuIFRoYXQgYHNrYi0mZ3Q7bmV0d29ya19oZWFkZXJgIHBvaW50ZXIgaXMgbGlrZWx5IHBvaW50aW5nIHRvIHRoZSB3cm9uZyBvZmZzZXQsIHBvc3NpYmx5IGV2ZW4gb3V0c2lkZSBvZiB0aGUgYWxsb2NhdGVkIGJ1ZmZlci4gSW4gZXNzZW5jZSwgaXQmIzM5O3MgYSBjcml0aWNhbCBwb2ludGVyIHRoYXQgd2FzIG1pc2NvbmZpZ3VyZWQgb3IgbWlzc2VkIGR1cmluZyBpbml0aWFsaXphdGlvbi4gYHNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpYCBpcyB0aGUgY29ycmVjdCBhcHByb2FjaCBiZWNhdXNlIGl0IGNvcnJlY3RseSBzZXRzIGBza2ItJmd0O25ldHdvcmtfaGVhZGVyID0gc2tiLSZndDtkYXRhIC0gc2tiLSZndDtoZWFkYC4KClRoaXMgY2hhbmdlIGlzIGluIGBuZXQveGRwL3hzay5jYCwgd2hpY2ggaXMgY29yZSBuZXR3b3JraW5nIGNvZGUgYW5kIGRlYWxzIHdpdGggQUZfWERQIHNvY2tldHMgKFhEUCBzb2NrZXRzKSwgc28gdGhpcyBpcyBhIGNydWNpYWwgYXJlYS4gU2luY2UgQUZfWERQIHN1cHBvcnRzIGdlbmVyaWMgbmV0IGRldmljZXMgbGlrZSB2ZXRoLCBsb29wYmFjaywgdHVuL3RhcCwgZHVtbXksIHZpcnRpbywgdGhpcyBmaXggaXMgYnJvYWQgaW4gc2NvcGUuIFRoaXMgaXNuJiMzOTt0IGp1c3QgYSBoYXJkd2FyZS1zcGVjaWZpYyBmaXg7IGl0IGFmZmVjdHMgYW55IGVudmlyb25tZW50IHVzaW5nIEFGX1hEUC4KCkdpdmVuIHRoZSB3aWRlc3ByZWFkIHVzZSBvZiBBRl9YRFAsIGFuZCB0aGUgZmFjdCB0aGF0IFN5emthbGxlciBoZWF2aWx5IHRlc3RzIEFGX1hEUCAoeGRwIHNvY2tldHMpLCBpdCYjMzk7cyBpbXBvcnRhbnQgdG8gdmVyaWZ5IGlmIHRoZXJlIGFueSBzcGVjaWZpYyBLY29uZmlnIG9wdGlvbnMgdGhhdCBtaWdodCBpbmZsdWVuY2UgdGhlIGluY2x1c2lvbiBvciBiZWhhdmlvciBvZiBgbmV0L3hkcC94c2suY2AuIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIHRoZSBNYWtlZmlsZSBpbiBgbmV0L3hkcC9gIHRvIGNvbmZpcm0gdGhlcmUgYXJlbiYjMzk7dCBhbnkgYnVpbGQtdGltZSBjb25maWd1cmF0aW9ucyB0aGF0IGNvdWxkIGltcGFjdCB0aGlzIGZpeC4gVGhpcyB3aWxsIGVuc3VyZSB0aGUgY2hhbmdlIGlzIGNvbXBsZXRlIGFuZCB1bml2ZXJzYWxseSBhcHBsaWVkLCBlc3BlY2lhbGx5IGdpdmVuIFN5emthbGxlciYjMzk7cyByb2xlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwNzozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC94ZHAvTWFrZWZpbGUmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRvYmotJChDT05GSUdfWERQX1NPQ0tFVFMpICYjNDM7PSB4c2subyB4ZHBfdW1lbS5vIHhza19xdWV1ZS5vIHhza21hcC5vXG4gICAzOlx0b2JqLSQoQ09ORklHX1hEUF9TT0NLRVRTKSAmIzQzOz0geHNrX2J1ZmZfcG9vbC5vXG4gICA0Olx0b2JqLSQoQ09ORklHX1hEUF9TT0NLRVRTX0RJQUcpICYjNDM7PSB4c2tfZGlhZy5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA3OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkxOTAKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipYRFAgQ29uZmlndXJhdGlvbjogQSBRdWljayBHbGFuY2UqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZywgJiMzNDtSaWdodCwgYmVmb3JlIHdlIGRpdmUgaW50byBhbnl0aGluZyB0b28gZGVlcCwgbGV0JiMzOTtzIHRha2UgYSBxdWljayBsb29rIGF0IGBuZXQveGRwL0tjb25maWdgLiYjMzQ7IEl0JiMzOTtzIHRoZSBzdGFuZGFyZCBmaXJzdCBzdG9wLCB5b3Uga25vdz8gR2V0IHRoZSBsYXkgb2YgdGhlIGxhbmQsIHNlZSB3aGF0IG9wdGlvbnMgYXJlIGV4cG9zZWQsIHdoaWNoIGZlYXR1cmVzIGFyZSBlbmFibGVkIGJ5IGRlZmF1bHQsIGFuZCBob3cgdGhlIHZhcmlvdXMgWERQLXJlbGF0ZWQgY29uZmlndXJhdGlvbnMgYXJlIHN0cnVjdHVyZWQgd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgYnVpbGQgc3lzdGVtLiBObyBuZWVkIHRvIHJlaW52ZW50IHRoZSB3aGVlbCwgSSBjYW4gcHJvYmFibHkgZ2V0IGEgZ2VuZXJhbCBzZW5zZSBvZiB0aGUgYnVpbGQgc3RydWN0dXJlIGp1c3QgYnkgdW5kZXJzdGFuZGluZyB0aGUgYXZhaWxhYmxlIGNvbmZpZyBmbGFncy4gSXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBzdGVwIHRvIHVuZGVyc3RhbmRpbmcgdGhlIGVjb3N5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDc6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQveGRwL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRjb25maWcgWERQX1NPQ0tFVFNcbiAgIDM6XHRcdGJvb2wgXCYjMzQ7WERQIHNvY2tldHNcJiMzNDtcbiAgIDQ6XHRcdGRlcGVuZHMgb24gQlBGX1NZU0NBTExcbiAgIDU6XHRcdGRlZmF1bHQgblxuICAgNjpcdFx0aGVscFxuICAgNzpcdFx0ICBYRFAgc29ja2V0cyBhbGxvd3MgYSBjaGFubmVsIGJldHdlZW4gWERQIHByb2dyYW1zIGFuZFxuICAgODpcdFx0ICB1c2Vyc3BhY2UgYXBwbGljYXRpb25zLlxuICAgOTpcdFxuICAxMDpcdGNvbmZpZyBYRFBfU09DS0VUU19ESUFHXG4gIDExOlx0XHR0cmlzdGF0ZSBcJiMzNDtYRFAgc29ja2V0czogbW9uaXRvcmluZyBpbnRlcmZhY2VcJiMzNDtcbiAgMTI6XHRcdGRlcGVuZHMgb24gWERQX1NPQ0tFVFNcbiAgMTM6XHRcdGRlZmF1bHQgblxuICAxNDpcdFx0aGVscFxuICAxNTpcdFx0ICBTdXBwb3J0IGZvciBQRl9YRFAgc29ja2V0cyBtb25pdG9yaW5nIGludGVyZmFjZSB1c2VkIGJ5IHRoZSBzcyB0b29sLlxuICAxNjpcdFx0ICBJZiB1bnN1cmUsIHNheSBZLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwNzozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NTk0CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyBCUEYgU3lzY2FsbCBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIEkgbmVlZCB0byBwaW5wb2ludCB3aGVyZSB0aGUgYEJQRl9TWVNDQUxMYCBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBkZWZpbmVkLiBHaXZlbiBteSBmYW1pbGlhcml0eSB3aXRoIHRoZSBrZXJuZWwgYnVpbGQgc3lzdGVtLCB0aGUgbW9zdCBsb2dpY2FsIHBsYWNlcyB0byBzdGFydCBsb29raW5nIGFyZSB0aGUgcHJpbWFyeSBjb25maWd1cmF0aW9uIGZpbGVzLiBJJiMzOTtsbCBiZWdpbiBieSBjaGVja2luZyBgaW5pdC9LY29uZmlnYCDigJMgaXQgb2Z0ZW4gaG9sZHMgZnVuZGFtZW50YWwgc2V0dGluZ3MgcmVsYXRlZCB0byBrZXJuZWwgZmVhdHVyZXMuIElmIGl0JiMzOTtzIG5vdCB0aGVyZSwgdGhlIG5leHQgbG9naWNhbCBsb2NhdGlvbiB3b3VsZCBiZSB0aGUgY29yZSBCUEYgaW1wbGVtZW50YXRpb24gZGlyZWN0b3J5IGl0c2VsZiwgc3BlY2lmaWNhbGx5IGBrZXJuZWwvYnBmL0tjb25maWdgLiBUaGlzIGlzIHdoZXJlIEkgd291bGQgZXhwZWN0IGFueXRoaW5nIHJlbGF0ZWQgdG8gQlBGJiMzOTtzIHN5c3RlbSBjYWxsIGludGVyZmFjZSB0byByZXNpZGUuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBpdCBpcyBpbXBsZW1lbnRlZC4gSSYjMzk7bSBnb2luZyB0byBsb29rIGluIHRob3NlIHR3byBwbGFjZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA3OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9TWVNDQUxMJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5pdC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwNzozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5ODMyCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIEJQRiBTeXNjYWxsIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiBmaW5kaW5nIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbiByZWxhdGVkIHRvIEJQRiBzeXNjYWxscy4gSSYjMzk7bSB0aGlua2luZywgJiMzNDtXaGVyZSBpcyBgY29uZmlnIEJQRl9TWVNDQUxMYCBkZWZpbmVkIHdpdGhpbiB0aGUga2VybmVsIGJ1aWxkIHN5c3RlbT8mIzM0OyBUaGlzIHByb2JhYmx5IG1lYW5zIEkgbmVlZCB0byBzdGFydCBwb2tpbmcgYXJvdW5kIGluIHRoZSBLY29uZmlnIGZpbGVzLCBzcGVjaWZpY2FsbHkgdGhlIG9uZXMgdGhhdCByZWxhdGUgdG8gdHJhY2luZywgbmV0d29ya2luZywgb3Igc2VjdXJpdHkg4oCTIHRob3NlIGFyZSB0aGUgbW9zdCBsaWtlbHkgYXJlYXMuIEkmIzM5O2xsIGxpa2VseSB1c2UgYGdyZXBgIG9yIGEgc2ltaWxhciB0b29sIHRvIHBpbnBvaW50IHRoZSBleGFjdCBsb2NhdGlvbi4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgY29udGV4dHVhbCBjbHVlcyBhcm91bmQgaXQgdG9vLCB0byB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMgYW5kIHdoYXQgZmVhdHVyZXMgaXQgZW5hYmxlcy4gSXMgdGhpcyBwYXJ0IG9mIGEgbGFyZ2VyIEJQRiBzdWJzeXN0ZW0gY29uZmlndXJhdGlvbiBvciBhIHN0YW5kYWxvbmU/IFRoYXQmIzM5O3Mgd2hhdCBJIG5lZWQgdG8gZGV0ZXJtaW5lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwNzozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQlBGX1NZU0NBTEwmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9LY29uZmlnPTI1PW1lbnUgXCYjMzQ7QlBGIHN1YnN5c3RlbVwmIzM0O1xua2VybmVsL2JwZi9LY29uZmlnLTI2LVxua2VybmVsL2JwZi9LY29uZmlnOjI3OmNvbmZpZyBCUEZfU1lTQ0FMTFxua2VybmVsL2JwZi9LY29uZmlnLTI4LVx0Ym9vbCBcJiMzNDtFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDc6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAxMjQKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipLZXJuZWwgQlBGIEtjb25maWcgSW5zcGVjdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiB0aGUgYGtlcm5lbC9icGYvS2NvbmZpZ2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gc2NvcGUgb3V0IGFyb3VuZCBsaW5lIDI3LiBJdCYjMzk7cyBhIGdlbmVyYWwgYXBwcm9hY2ggd2hlbiBzdGFydGluZyBhbiBpbnZlc3RpZ2F0aW9uLCBlc3BlY2lhbGx5IGdpdmVuIG15IGtub3dsZWRnZSBvZiB0aGUgY29kZWJhc2UsIHRoYXQgS2NvbmZpZyBmaWxlcyBhcmUgZXNzZW50aWFsIGluIHRoZSBzeXN0ZW0gY29uZmlndXJhdGlvbi4gVGhlIHNwZWNpZmljIGxpbmUgbnVtYmVyIGlzIGp1c3QgYSBzdGFydGluZyBwb2ludDsgaXQmIzM5O3MgbGlrZWx5IGEgZm9jYWwgYXJlYSwgZWl0aGVyIGEgbWFpbiBzZWN0aW9uLCBvciBzb21ldGhpbmcgdGhhdCBicmFuY2hlcyBvdXQgaW50byBtdWx0aXBsZSByZWxldmFudCBvcHRpb25zLiBJIHdhbnQgdG8gcXVpY2tseSBldmFsdWF0ZSBhbnkgaW1tZWRpYXRlIGNsdWVzIHRoYXQgZ2l2ZSBhbiBpbmRpY2F0aW9uIG9mIGhvdyBCUEYgaXMgZW5hYmxlZC9kaXNhYmxlZCBvciBjb25maWd1cmVkLiBUaGlzIHByZWxpbWluYXJ5IHNjYW4gd2lsbCBwcm92aWRlIGEgcm9hZG1hcCBmb3IgZGVlcGVyIGFuYWx5c2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwNzozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMjU6XHRtZW51IFwmIzM0O0JQRiBzdWJzeXN0ZW1cJiMzNDtcbiAgMjY6XHRcbiAgMjc6XHRjb25maWcgQlBGX1NZU0NBTExcbiAgMjg6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXCYjMzQ7XG4gIDI5Olx0XHRzZWxlY3QgQlBGXG4gIDMwOlx0XHRzZWxlY3QgSVJRX1dPUktcbiAgMzE6XHRcdHNlbGVjdCBORUVEX1RBU0tTX1JDVVxuICAzMjpcdFx0c2VsZWN0IFRBU0tTX1RSQUNFX1JDVVxuICAzMzpcdFx0c2VsZWN0IEJJTkFSWV9QUklOVEZcbiAgMzQ6XHRcdHNlbGVjdCBORVRfU09DS19NU0cgaWYgTkVUXG4gIDM1Olx0XHRzZWxlY3QgTkVUX1hHUkVTUyBpZiBORVRcbiAgMzY6XHRcdHNlbGVjdCBQQUdFX1BPT0wgaWYgTkVUXG4gIDM3Olx0XHRkZWZhdWx0IG5cbiAgMzg6XHRcdGhlbHBcbiAgMzk6XHRcdCAgRW5hYmxlIHRoZSBicGYoKSBzeXN0ZW0gY2FsbCB0aGF0IGFsbG93cyB0byBtYW5pcHVsYXRlIEJQRiBwcm9ncmFtc1xuICA0MDpcdFx0ICBhbmQgbWFwcyB2aWEgZmlsZSBkZXNjcmlwdG9ycy5cbiAgNDE6XHRcbiAgNDI6XHRjb25maWcgQlBGX0pJVFxuICA0MzpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgQlBGIEp1c3QgSW4gVGltZSBjb21waWxlclwmIzM0O1xuICA0NDpcdFx0ZGVwZW5kcyBvbiBCUEZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDc6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA1OTIKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFhEUCBTb2NrZXRzIGFuZCBCUEYgSW50ZWdyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGludG8gaG93IGBDT05GSUdfWERQX1NPQ0tFVFNgIHdvcmtzLCBhbmQgZmlyc3QgdGhpbmdzIGZpcnN0LCBpdCByZWxpZXMgb24gYENPTkZJR19CUEZfU1lTQ0FMTGAuIFRoYXQmIzM5O3MgdGhlIGJhc2VsaW5lLCB0aGUgZm91bmRhdGlvbi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnkgb3RoZXIgZGVwZW5kZW5jaWVzIG9yIHNpZ25pZmljYW50IGNvbmZpZyBvcHRpb25zIGludm9sdmVkIGluIHRoaXMuIEkmIzM5O20gb3BlcmF0aW5nIHVuZGVyIHRoZSBhc3N1bXB0aW9uIHRoYXQgYFhEUF9TT0NLRVRTYCBhbmQgYEJQRl9TWVNDQUxMYCBhcmUgdGhlIG1ham9yIHBsYXllcnMgaGVyZS4KCk5vdywgbGV0JiMzOTtzIGRpdmUgZGVlcGVyIGFuZCBmaW5kIHNvbWUgc3BlY2lmaWMgZnVuY3Rpb25zIGluIGBuZXQveGRwL3hzay5jYCB0byB1c2UgYXMgcmVmZXJlbmNlIHBvaW50cy4gSSYjMzk7bSB0aGlua2luZyBJIGNhbiB1c2UgdGhlc2UgYXMgZ29vZCBgRm9jdXNTeW1ib2xzYCB0byBjZW50ZXIgbXkgdW5kZXJzdGFuZGluZyBhcm91bmQuIE9uY2UgSSYjMzk7dmUgZm91bmQgc29tZSBnb29kIGVudHJ5cG9pbnRzLCBJJiMzOTtsbCBnbyB0aHJvdWdoIGBuZXQveGRwL3hzay5jYCwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXJvdW5kIHRoZSBzb2NrZXQgY2FsbGJhY2tzIGFuZCBwcm90b2NvbCBvcGVyYXRpb25zLiBUaGF0JiMzOTtzIHVzdWFsbHkgd2hlcmUgdGhlIGNvcmUgaW50ZXJhY3Rpb24gYW5kIGRhdGEgZmxvdyB3aWxsIGJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwNzozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwcm90b19vcHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGRwL3hzay5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZHAveHNrLmM9MjE1NT1zdGF0aWMgc3RydWN0IHByb3RvIHhza19wcm90byA9IHtcbi0tXG5uZXQveGRwL3hzay5jLTIxNjAtXG5uZXQveGRwL3hzay5jOjIxNjE6c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgeHNrX3Byb3RvX29wcyA9IHtcbm5ldC94ZHAveHNrLmMtMjE2Mi1cdC5mYW1pbHlcdFx0PSBQRl9YRFAsXG4tLVxubmV0L3hkcC94c2suYz0yMTkyPXN0YXRpYyBpbnQgeHNrX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90b2NvbCxcbi0tXG5uZXQveGRwL3hzay5jLTIyMTEtXG5uZXQveGRwL3hzay5jOjIyMTI6XHRzb2NrLVx1MDAzZW9wcyA9IFx1MDAyNnhza19wcm90b19vcHM7XG5uZXQveGRwL3hzay5jLTIyMTMtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA3OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMTYwCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8geHNrX3Byb3RvX29wcyoqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgWERQIHNvY2tldCBwcm90b2NvbCBvcGVyYXRpb25zLiBTcGVjaWZpY2FsbHksIEkgc2hvdWxkIHByb2JhYmx5IHJlLWV4YW1pbmUgdGhlIGB4c2tfcHJvdG9fb3BzYCBzdHJ1Y3R1cmUuIEkgcmVtZW1iZXIgaXQgcmVzaWRpbmcgd2l0aGluIGBuZXQveGRwL3hzay5jYCwgc28gdGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtsbCBiZWdpbi4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gWyAqcGF1c2UgYW5kIHRoaW5rIGZvciBhIG1vbWVudCwgYmFzZWQgb24gbXkgY3VycmVudCBhcmVhIG9mIGZvY3VzKiBdLi4uIHdlbGwsIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgWERQIHplcm8tY29weSBhbmQgaG93IGl0JiMzOTtzIGltcGxlbWVudGVkIGZvciB0aGUgdmFyaW91cyBtZW1vcnkgbWFuYWdlbWVudCBhbmQgYnVmZmVyaW5nIGludGVyYWN0aW9ucy4gSSB3aWxsIHNlZSB0aGUgc3RydWN0dXJlIGRlZmluaXRpb24gYW5kIGVuc3VyZSBJJiMzOTttIHVwIHRvIHNwZWVkIG9uIGFsbCBvZiBpdHMgbWVtYmVycywgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBhbnkgcmVsYXRlZCBjYWxsYmFja3Mgb3IgZGF0YSBzdHJ1Y3R1cmVzLiBUaGlzIGlzIGEgY3J1Y2lhbCBhcmVhIGZvciBwZXJmb3JtYW5jZSB0dW5pbmcgYW5kIG92ZXJhbGwgWERQIHNvY2tldCBkZXNpZ24sIHNvIGl0JiMzOTtzIHdvcnRoIGEgZGVlcCBkaXZlLiBMZXQmIzM5O3MgZ2V0IGNyYWNraW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwNzozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC94ZHAveHNrLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMTYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIxNjA6XHRcbjIxNjE6XHRzdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyB4c2tfcHJvdG9fb3BzID0ge1xuMjE2MjpcdFx0LmZhbWlseVx0XHQ9IFBGX1hEUCxcbjIxNjM6XHRcdC5vd25lclx0XHQ9IFRISVNfTU9EVUxFLFxuMjE2NDpcdFx0LnJlbGVhc2VcdD0geHNrX3JlbGVhc2UsXG4yMTY1Olx0XHQuYmluZFx0XHQ9IHhza19iaW5kLFxuMjE2NjpcdFx0LmNvbm5lY3RcdD0gc29ja19ub19jb25uZWN0LFxuMjE2NzpcdFx0LnNvY2tldHBhaXJcdD0gc29ja19ub19zb2NrZXRwYWlyLFxuMjE2ODpcdFx0LmFjY2VwdFx0XHQ9IHNvY2tfbm9fYWNjZXB0LFxuMjE2OTpcdFx0LmdldG5hbWVcdD0gc29ja19ub19nZXRuYW1lLFxuMjE3MDpcdFx0LnBvbGxcdFx0PSB4c2tfcG9sbCxcbjIxNzE6XHRcdC5pb2N0bFx0XHQ9IHNvY2tfbm9faW9jdGwsXG4yMTcyOlx0XHQubGlzdGVuXHRcdD0gc29ja19ub19saXN0ZW4sXG4yMTczOlx0XHQuc2h1dGRvd25cdD0gc29ja19ub19zaHV0ZG93bixcbjIxNzQ6XHRcdC5zZXRzb2Nrb3B0XHQ9IHhza19zZXRzb2Nrb3B0LFxuMjE3NTpcdFx0LmdldHNvY2tvcHRfaXRlciA9IHhza19nZXRzb2Nrb3B0LFxuMjE3NjpcdFx0LnNlbmRtc2dcdD0geHNrX3NlbmRtc2csXG4yMTc3Olx0XHQucmVjdm1zZ1x0PSB4c2tfcmVjdm1zZyxcbjIxNzg6XHRcdC5tbWFwXHRcdD0geHNrX21tYXAsXG4yMTc5Olx0fTtcbjIxODA6XHRcbjIxODE6XHRzdGF0aWMgdm9pZCB4c2tfZGVzdHJ1Y3Qoc3RydWN0IHNvY2sgKnNrKVxuMjE4MjpcdHtcbjIxODM6XHRcdHN0cnVjdCB4ZHBfc29jayAqeHMgPSB4ZHBfc2soc2spO1xuMjE4NDpcdFxuMjE4NTpcdFx0aWYgKCFzb2NrX2ZsYWcoc2ssIFNPQ0tfREVBRCkpXG4yMTg2Olx0XHRcdHJldHVybjtcbjIxODc6XHRcbjIxODg6XHRcdGlmICgheHBfcHV0X3Bvb2woeHMtXHUwMDNlcG9vbCkpXG4yMTg5Olx0XHRcdHhkcF9wdXRfdW1lbSh4cy1cdTAwM2V1bWVtLCAheHMtXHUwMDNlcG9vbCk7XG4yMTkwOlx0fVxuMjE5MTpcdFxuMjE5MjpcdHN0YXRpYyBpbnQgeHNrX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90b2NvbCxcbjIxOTM6XHRcdFx0ICAgICAgaW50IGtlcm4pXG4yMTk0Olx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwNzozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTk4MgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDEwMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipYRFAgU29ja2V0IEludGVyZmFjZSBEZWVwIERpdmUqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGUgWERQIHNvY2tldCBpbXBsZW1lbnRhdGlvbiB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgYW5kIG1heWJlIHNwb3Qgc29tZSBudWFuY2VzLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZSBjb3JlIGZ1bmN0aW9uczogYHhza19zZW5kbXNnYCwgYHhza19wb2xsYCwgYHhza19iaW5kYCwgYHhza19tbWFwYCwgYHhza19nZW5lcmljX3htaXRgIChvciBwZXJoYXBzIHRoZSBpbnRlcm5hbCBgX194c2tfZ2VuZXJpY194bWl0YCksIGB4c2tfYnVpbGRfc2tiYCwgYW5kIGB4c2tfZGVzdHJ1Y3Rfc2tiYC4gSSB3YW50IGEgc29saWQgZ3Jhc3Agb2YgaG93IHRoZXNlIHBpZWNlcyBmaXQgdG9nZXRoZXIuIEkgdGhpbmsgc3RhcnRpbmcgd2l0aCBgeHNrX3NlbmRtc2dgIGFuZCBgeHNrX3BvbGxgIGlzIHRoZSByaWdodCBtb3ZlIGZvciBub3cuIFRpbWUgdG8gaGVhZCBvdmVyIHRvIGBuZXQveGRwL3hzay5jYCBhbmQgZGlnIGludG8gdGhlIGNvZGUuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscyByZXZlYWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA3OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ludCB4c2tfc2VuZG1zZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZHAvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZHAveHNrLmM9MTM2Nj1zdGF0aWMgaW50IF9feHNrX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSwgc2l6ZV90IHRvdGFsX2xlbilcbi0tXG5uZXQveGRwL3hzay5jLTEzOTYtXG5uZXQveGRwL3hzay5jOjEzOTc6c3RhdGljIGludCB4c2tfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLCBzaXplX3QgdG90YWxfbGVuKVxubmV0L3hkcC94c2suYy0xMzk4LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDc6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI0MzAKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEaXZpbmcgaW50byB0aGUgWFNLIFRyYW5zbWlzc2lvbiBQYXRoKioKCk9rYXksIHNvIEkmIzM5O20gdHJhY2luZyB0aGUgZGF0YSB0cmFuc21pc3Npb24gcGF0aCBmb3IgWFNLLCBhbmQgaXQgbG9va3MgbGlrZSBgeHNrX3NlbmRtc2dgIGtpY2tzIHRoaW5ncyBvZmYuIEZyb20gdGhlcmUsIGl0IGRpdmVzIGludG8gYF9feHNrX3NlbmRtc2dgLiBOb3csIHRoaXMgaXMgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZywgYXMgYF9feHNrX3NlbmRtc2dgIGVpdGhlciBnb2VzIGRvd24gdGhlIGBfX3hza19nZW5lcmljX3htaXRgIHJvdXRlLCBvciBpdCB0cmlnZ2VycyB0aGUgZHJpdmVyLXNwZWNpZmljIHRyYW5zbWl0IHBhdGguCgpUbyBnZXQgYSBiZXR0ZXIgZ3JpcCBvbiB0aGUgbG9naWMsIEkgbmVlZCB0byBsb29rIGNsb3Nlci4gSSYjMzk7bGwgbmVlZCB0byBqdW1wIGludG8gYG5ldC94ZHAveHNrLmNgIGFuZCBmb2N1cyBvbiBsaW5lcyAxMzYwIHRocm91Z2ggMTQyMC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgZGV0YWlscyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGljaCBwYXRoIGlzIHRha2VuLCB1bmRlciB3aGF0IGNvbmRpdGlvbnMsIGFuZCB3aGF0IHRoZSBrZXkgZGlmZmVyZW5jZXMgYXJlIGJldHdlZW4gdGhlIGdlbmVyaWMgYW5kIGRyaXZlci1zcGVjaWZpYyBhcHByb2FjaGVzLiBHb3R0YSBnZXQgdGhlIGxvdy1sZXZlbCBkZXRhaWxzIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwNzozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC94ZHAveHNrLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMzYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEzNjA6XHRcdGlmICh1bmxpa2VseSghKHhzLVx1MDAzZWRldi1cdTAwM2VmbGFncyBcdTAwMjYgSUZGX1VQKSkpXG4xMzYxOlx0XHRcdHJldHVybiAtRU5FVERPV047XG4xMzYyOlx0XG4xMzYzOlx0XHRyZXR1cm4gMDtcbjEzNjQ6XHR9XG4xMzY1Olx0XG4xMzY2Olx0c3RhdGljIGludCBfX3hza19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm0sIHNpemVfdCB0b3RhbF9sZW4pXG4xMzY3Olx0e1xuMTM2ODpcdFx0Ym9vbCBuZWVkX3dhaXQgPSAhKG0tXHUwMDNlbXNnX2ZsYWdzIFx1MDAyNiBNU0dfRE9OVFdBSVQpO1xuMTM2OTpcdFx0c3RydWN0IHNvY2sgKnNrID0gc29jay1cdTAwM2VzaztcbjEzNzA6XHRcdHN0cnVjdCB4ZHBfc29jayAqeHMgPSB4ZHBfc2soc2spO1xuMTM3MTpcdFx0c3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2w7XG4xMzcyOlx0XHRpbnQgZXJyO1xuMTM3MzpcdFxuMTM3NDpcdFx0ZXJyID0geHNrX2NoZWNrX2NvbW1vbih4cyk7XG4xMzc1Olx0XHRpZiAoZXJyKVxuMTM3NjpcdFx0XHRyZXR1cm4gZXJyO1xuMTM3NzpcdFx0aWYgKHVubGlrZWx5KG5lZWRfd2FpdCkpXG4xMzc4Olx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbjEzNzk6XHRcdGlmICh1bmxpa2VseSgheHMtXHUwMDNldHgpKVxuMTM4MDpcdFx0XHRyZXR1cm4gLUVOT0JVRlM7XG4xMzgxOlx0XG4xMzgyOlx0XHRpZiAoc2tfY2FuX2J1c3lfbG9vcChzaykpXG4xMzgzOlx0XHRcdHNrX2J1c3lfbG9vcChzaywgMSk7IC8qIG9ubHkgc3VwcG9ydCBub24tYmxvY2tpbmcgc29ja2V0cyAqL1xuMTM4NDpcdFxuMTM4NTpcdFx0aWYgKHhzLVx1MDAzZXpjIFx1MDAyNlx1MDAyNiB4c2tfbm9fd2FrZXVwKHNrKSlcbjEzODY6XHRcdFx0cmV0dXJuIDA7XG4xMzg3Olx0XG4xMzg4Olx0XHRwb29sID0geHMtXHUwMDNlcG9vbDtcbjEzODk6XHRcdGlmIChwb29sLVx1MDAzZWNhY2hlZF9uZWVkX3dha2V1cCBcdTAwMjYgWERQX1dBS0VVUF9UWCkge1xuMTM5MDpcdFx0XHRpZiAoeHMtXHUwMDNlemMpXG4xMzkxOlx0XHRcdFx0cmV0dXJuIHhza193YWtldXAoeHMsIFhEUF9XQUtFVVBfVFgpO1xuMTM5MjpcdFx0XHRyZXR1cm4geHNrX2dlbmVyaWNfeG1pdChzayk7XG4xMzkzOlx0XHR9XG4xMzk0Olx0XHRyZXR1cm4gMDtcbjEzOTU6XHR9XG4xMzk2Olx0XG4xMzk3Olx0c3RhdGljIGludCB4c2tfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLCBzaXplX3QgdG90YWxfbGVuKVxuMTM5ODpcdHtcbjEzOTk6XHRcdGludCByZXQ7XG4xNDAwOlx0XG4xNDAxOlx0XHRyY3VfcmVhZF9sb2NrKCk7XG4xNDAyOlx0XHRyZXQgPSBfX3hza19zZW5kbXNnKHNvY2ssIG0sIHRvdGFsX2xlbik7XG4xNDAzOlx0XHRyY3VfcmVhZF91bmxvY2soKTtcbjE0MDQ6XHRcbjE0MDU6XHRcdHJldHVybiByZXQ7XG4xNDA2Olx0fVxuMTQwNzpcdFxuMTQwODpcdHN0YXRpYyBpbnQgX194c2tfcmVjdm1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLCBzaXplX3QgbGVuLCBpbnQgZmxhZ3MpXG4xNDA5Olx0e1xuMTQxMDpcdFx0Ym9vbCBuZWVkX3dhaXQgPSAhKGZsYWdzIFx1MDAyNiBNU0dfRE9OVFdBSVQpO1xuMTQxMTpcdFx0c3RydWN0IHNvY2sgKnNrID0gc29jay1cdTAwM2VzaztcbjE0MTI6XHRcdHN0cnVjdCB4ZHBfc29jayAqeHMgPSB4ZHBfc2soc2spO1xuMTQxMzpcdFx0aW50IGVycjtcbjE0MTQ6XHRcbjE0MTU6XHRcdGVyciA9IHhza19jaGVja19jb21tb24oeHMpO1xuMTQxNjpcdFx0aWYgKGVycilcbjE0MTc6XHRcdFx0cmV0dXJuIGVycjtcbjE0MTg6XHRcdGlmICh1bmxpa2VseSgheHMtXHUwMDNlcngpKVxuMTQxOTpcdFx0XHRyZXR1cm4gLUVOT0JVRlM7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA3OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNjA1CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogNjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIHRoZSBYU0sgSW1wbGVtZW50YXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgY29yZSBvZiB0aGlzIFhEUCBzb2NrZXQgaW1wbGVtZW50YXRpb24uIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB0aGUgYHhzay5jYCBhbmQgYHhzay5oYCBmaWxlcyDigJMgc3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdHJhbnNtaXQgYW5kIFNLQiBkZXN0cnVjdGlvbiBhcmUgaGFuZGxlZC4gSSYjMzk7bGwgbmVlZCB0byBzY3J1dGluaXplIGZ1bmN0aW9ucyBsaWtlIGB4c2tfZ2VuZXJpY194bWl0YCBhbmQgYHhza19kZXN0cnVjdF9za2JgIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgZGF0YSBmbG93IGFuZCBtZW1vcnkgbWFuYWdlbWVudC4gU2luY2UgSSYjMzk7bSBhaW1pbmcgZm9yIGEgY29tcHJlaGVuc2l2ZSBvdmVydmlldywgSSBzaG91bGQgYWxzbyBzZWFyY2ggZm9yIGFueSBvdGhlciBub24tc3RhdGljIGZ1bmN0aW9ucyB3aXRoaW4gdGhvc2UgZmlsZXMsIHNpbmNlIHRoZXNlIGxpa2VseSBmb3JtIHRoZSBjcml0aWNhbCBwdWJsaWMgaW50ZXJmYWNlIG9mIHRoZSB4c2sgbW9kdWxlLiBGdXJ0aGVybW9yZSwgSSYjMzk7bGwgbmVlZCB0byBleHBhbmQgbXkgc2VhcmNoLiBJdCYjMzk7cyB0aW1lIHRvIGNoZWNrIGBuZXQveGRwL3hzay5jYCBmb3IgYW55IGNyaXRpY2FsIGZ1bmN0aW9uYWxpdHkgdGhhdCBJIG1heSBoYXZlIG1pc3NlZCBpbiBteSBpbml0aWFsIHNlYXJjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDc6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XlthLXpBLVpfXS4qeHNrXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZHAveHNrLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hkcC94c2suYy00My1cbm5ldC94ZHAveHNrLmM6NDQ6c3RydWN0IHhza19hZGRycyB7XG5uZXQveGRwL3hzay5jLTQ1LVx0dTMyIG51bV9kZXNjcztcbi0tXG5uZXQveGRwL3hzay5jLTQ4LVxubmV0L3hkcC94c2suYzo0OTpzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKnhza190eF9nZW5lcmljX2NhY2hlO1xubmV0L3hkcC94c2suYy01MC1cbm5ldC94ZHAveHNrLmM6NTE6dm9pZCB4c2tfc2V0X3J4X25lZWRfd2FrZXVwKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sKVxubmV0L3hkcC94c2suYy01Mi17XG4tLVxubmV0L3hkcC94c2suYy01OC19XG5uZXQveGRwL3hzay5jOjU5OkVYUE9SVF9TWU1CT0woeHNrX3NldF9yeF9uZWVkX3dha2V1cCk7XG5uZXQveGRwL3hzay5jLTYwLVxubmV0L3hkcC94c2suYzo2MTp2b2lkIHhza19zZXRfdHhfbmVlZF93YWtldXAoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wpXG5uZXQveGRwL3hzay5jLTYyLXtcbi0tXG5uZXQveGRwL3hzay5jLTc1LX1cbm5ldC94ZHAveHNrLmM6NzY6RVhQT1JUX1NZTUJPTCh4c2tfc2V0X3R4X25lZWRfd2FrZXVwKTtcbm5ldC94ZHAveHNrLmMtNzctXG5uZXQveGRwL3hzay5jOjc4OnZvaWQgeHNrX2NsZWFyX3J4X25lZWRfd2FrZXVwKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sKVxubmV0L3hkcC94c2suYy03OS17XG4tLVxubmV0L3hkcC94c2suYy04NS19XG5uZXQveGRwL3hzay5jOjg2OkVYUE9SVF9TWU1CT0woeHNrX2NsZWFyX3J4X25lZWRfd2FrZXVwKTtcbm5ldC94ZHAveHNrLmMtODctXG5uZXQveGRwL3hzay5jOjg4OnZvaWQgeHNrX2NsZWFyX3R4X25lZWRfd2FrZXVwKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sKVxubmV0L3hkcC94c2suYy04OS17XG4tLVxubmV0L3hkcC94c2suYy0xMDItfVxubmV0L3hkcC94c2suYzoxMDM6RVhQT1JUX1NZTUJPTCh4c2tfY2xlYXJfdHhfbmVlZF93YWtldXApO1xubmV0L3hkcC94c2suYy0xMDQtXG5uZXQveGRwL3hzay5jOjEwNTpib29sIHhza191c2VzX25lZWRfd2FrZXVwKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sKVxubmV0L3hkcC94c2suYy0xMDYte1xuLS1cbm5ldC94ZHAveHNrLmMtMTA4LX1cbm5ldC94ZHAveHNrLmM6MTA5OkVYUE9SVF9TWU1CT0woeHNrX3VzZXNfbmVlZF93YWtldXApO1xubmV0L3hkcC94c2suYy0xMTAtXG5uZXQveGRwL3hzay5jOjExMTpzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqeHNrX2dldF9wb29sX2Zyb21fcWlkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5uZXQveGRwL3hzay5jLTExMi1cdFx0XHRcdFx0ICAgIHUxNiBxdWV1ZV9pZClcbi0tXG5uZXQveGRwL3hzay5jLTEyMC19XG5uZXQveGRwL3hzay5jOjEyMTpFWFBPUlRfU1lNQk9MKHhza19nZXRfcG9vbF9mcm9tX3FpZCk7XG5uZXQveGRwL3hzay5jLTEyMi1cbm5ldC94ZHAveHNrLmM6MTIzOnN0YXRpYyB2b2lkIF9feHNrX2NsZWFyX3Bvb2xfYXRfcWlkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUxNiBxdWV1ZV9pZClcbm5ldC94ZHAveHNrLmMtMTI0LXtcbi0tXG5uZXQveGRwL3hzay5jLTEzMC1cbm5ldC94ZHAveHNrLmM6MTMxOnZvaWQgeHNrX2NsZWFyX3Bvb2xfYXRfcWlkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUxNiBxdWV1ZV9pZClcbm5ldC94ZHAveHNrLmMtMTMyLXtcbi0tXG5uZXQveGRwL3hzay5jLTE0Ni1cbm5ldC94ZHAveHNrLmM6MTQ3OnN0YXRpYyBpbnQgX194c2tfcmVnX3Bvb2xfYXRfcWlkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5uZXQveGRwL3hzay5jLTE0OC1cdFx0XHRcdCBzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwgdTE2IHF1ZXVlX2lkKVxuLS1cbm5ldC94ZHAveHNrLmMtMTY0LSAqL1xubmV0L3hkcC94c2suYzoxNjU6aW50IHhza19yZWdfcG9vbF9hdF9xaWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsXG5uZXQveGRwL3hzay5jLTE2Ni1cdFx0XHR1MTYgcXVldWVfaWQpXG4tLVxubmV0L3hkcC94c2suYy0xOTAtXG5uZXQveGRwL3hzay5jOjE5MTpzdGF0aWMgaW50IF9feHNrX3Jjdl96YyhzdHJ1Y3QgeGRwX3NvY2sgKnhzLCBzdHJ1Y3QgeGRwX2J1ZmZfeHNrICp4c2tiLCB1MzIgbGVuLFxubmV0L3hkcC94c2suYy0xOTItXHRcdFx0dTMyIGZsYWdzKVxuLS1cbm5ldC94ZHAveHNrLmMtMjA3LVxubmV0L3hkcC94c2suYzoyMDg6c3RhdGljIHZvaWQgX194c2tfcmN2X3pjX3NhZmUoc3RydWN0IHhkcF9zb2NrICp4cywgc3RydWN0IHhkcF9idWZmX3hzayAqeHNrYixcbm5ldC94ZHAveHNrLmMtMjA5LVx0XHRcdCAgICAgIHUzMiBsZW4sIHUzMiBmbGFncylcbi0tXG5uZXQveGRwL3hzay5jLTIxOC1cbm5ldC94ZHAveHNrLmM6MjE5OnN0YXRpYyBpbnQgeHNrX3Jjdl96YyhzdHJ1Y3QgeGRwX3NvY2sgKnhzLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCwgdTMyIGxlbilcbm5ldC94ZHAveHNrLmMtMjIwLXtcbi0tXG5uZXQveGRwL3hzay5jLTI1OS1cbm5ldC94ZHAveHNrLmM6MjYwOnN0YXRpYyB2b2lkICp4c2tfY29weV94ZHBfc3RhcnQoc3RydWN0IHhkcF9idWZmICpmcm9tKVxubmV0L3hkcC94c2suYy0yNjEte1xuLS1cbm5ldC94ZHAveHNrLmMtMjY3LVxubmV0L3hkcC94c2suYzoyNjg6c3RhdGljIHUzMiB4c2tfY29weV94ZHAodm9pZCAqdG8sIHZvaWQgKipmcm9tLCB1MzIgdG9fbGVuLFxubmV0L3hkcC94c2suYy0yNjktXHRcdFx0dTMyICpmcm9tX2xlbiwgc2tiX2ZyYWdfdCAqKmZyYWcsIHUzMiByZW0pXG4tLVxubmV0L3hkcC94c2suYy0yOTUtXG5uZXQveGRwL3hzay5jOjI5NjpzdGF0aWMgaW50IF9feHNrX3JjdihzdHJ1Y3QgeGRwX3NvY2sgKnhzLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCwgdTMyIGxlbilcbm5ldC94ZHAveHNrLmMtMjk3LXtcbi0tXG5uZXQveGRwL3hzay5jLTM4OC1cbm5ldC94ZHAveHNrLmM6Mzg5OnN0YXRpYyBib29sIHhza190eF93cml0ZWFibGUoc3RydWN0IHhkcF9zb2NrICp4cylcbm5ldC94ZHAveHNrLmMtMzkwLXtcbi0tXG5uZXQveGRwL3hzay5jLTM5Ni1cbm5ldC94ZHAveHNrLmM6Mzk3OnN0YXRpYyB2b2lkIF9feHNrX3R4X3JlbGVhc2Uoc3RydWN0IHhkcF9zb2NrICp4cylcbm5ldC94ZHAveHNrLmMtMzk4LXtcbi0tXG5uZXQveGRwL3hzay5jLTQwMy1cbm5ldC94ZHAveHNrLmM6NDA0OnN0YXRpYyBib29sIHhza19pc19ib3VuZChzdHJ1Y3QgeGRwX3NvY2sgKnhzKVxubmV0L3hkcC94c2suYy00MDUte1xuLS1cbm5ldC94ZHAveHNrLmMtNDEzLVxubmV0L3hkcC94c2suYzo0MTQ6c3RhdGljIGJvb2wgeHNrX2Rldl9xdWV1ZV92YWxpZChjb25zdCBzdHJ1Y3QgeGRwX3NvY2sgKnhzLFxubmV0L3hkcC94c2suYy00MTUtXHRcdFx0XHRjb25zdCBzdHJ1Y3QgeGRwX3J4cV9pbmZvICppbmZvKVxuLS1cbm5ldC94ZHAveHNrLmMtNDM4LVxubmV0L3hkcC94c2suYzo0Mzk6c3RhdGljIGludCB4c2tfcmN2X2NoZWNrKHN0cnVjdCB4ZHBfc29jayAqeHMsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwLCB1MzIgbGVuKVxubmV0L3hkcC94c2suYy00NDAte1xuLS1cbm5ldC94ZHAveHNrLmMtNDUzLVxubmV0L3hkcC94c2suYzo0NTQ6c3RhdGljIHZvaWQgeHNrX2ZsdXNoKHN0cnVjdCB4ZHBfc29jayAqeHMpXG5uZXQveGRwL3hzay5jLTQ1NS17XG4tLVxubmV0L3hkcC94c2suYy00NjAtXG5uZXQveGRwL3hzay5jOjQ2MTppbnQgeHNrX2dlbmVyaWNfcmN2KHN0cnVjdCB4ZHBfc29jayAqeHMsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwKVxubmV0L3hkcC94c2suYy00NjIte1xuLS1cbm5ldC94ZHAveHNrLmMtNDc2LVxubmV0L3hkcC94c2suYzo0Nzc6c3RhdGljIGludCB4c2tfcmN2KHN0cnVjdCB4ZHBfc29jayAqeHMsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwKVxubmV0L3hkcC94c2suYy00Nzgte1xuLS1cbm5ldC94ZHAveHNrLmMtNDk2LVxubmV0L3hkcC94c2suYzo0OTc6aW50IF9feHNrX21hcF9yZWRpcmVjdChzdHJ1Y3QgeGRwX3NvY2sgKnhzLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcClcbm5ldC94ZHAveHNrLmMtNDk4LXtcbi0tXG5uZXQveGRwL3hzay5jLTUxMy1cbm5ldC94ZHAveHNrLmM6NTE0OnZvaWQgX194c2tfbWFwX2ZsdXNoKHN0cnVjdCBsaXN0X2hlYWQgKmZsdXNoX2xpc3QpXG5uZXQveGRwL3hzay5jLTUxNS17XG4tLVxubmV0L3hkcC94c2suYy01MjMtXG5uZXQveGRwL3hzay5jOjUyNDp2b2lkIHhza190eF9jb21wbGV0ZWQoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHUzMiBuYl9lbnRyaWVzKVxubmV0L3hkcC94c2suYy01MjUte1xuLS1cbm5ldC94ZHAveHNrLmMtNTQ0LX1cbm5ldC94ZHAveHNrLmM6NTQ1OkVYUE9SVF9TWU1CT0woeHNrX3R4X2NvbXBsZXRlZCk7XG5uZXQveGRwL3hzay5jLTU0Ni1cbm5ldC94ZHAveHNrLmM6NTQ3OnZvaWQgeHNrX3R4X3JlbGVhc2Uoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wpXG5uZXQveGRwL3hzay5jLTU0OC17XG4tLVxubmV0L3hkcC94c2suYy01NTUtfVxubmV0L3hkcC94c2suYzo1NTY6RVhQT1JUX1NZTUJPTCh4c2tfdHhfcmVsZWFzZSk7XG5uZXQveGRwL3hzay5jLTU1Ny1cbm5ldC94ZHAveHNrLmM6NTU4OmJvb2wgeHNrX3R4X3BlZWtfZGVzYyhzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwgc3RydWN0IHhkcF9kZXNjICpkZXNjKVxubmV0L3hkcC94c2suYy01NTkte1xuLS1cbm5ldC94ZHAveHNrLmMtNjAzLX1cbm5ldC94ZHAveHNrLmM6NjA0OkVYUE9SVF9TWU1CT0woeHNrX3R4X3BlZWtfZGVzYyk7XG5uZXQveGRwL3hzay5jLTYwNS1cbm5ldC94ZHAveHNrLmM6NjA2OnN0YXRpYyB1MzIgeHNrX3R4X3BlZWtfcmVsZWFzZV9mYWxsYmFjayhzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwgdTMyIG1heF9lbnRyaWVzKVxubmV0L3hkcC94c2suYy02MDcte1xuLS1cbm5ldC94ZHAveHNrLmMtNjE3LVxubmV0L3hkcC94c2suYzo2MTg6c3RhdGljIHZvaWQgeHNrX3R4X2NvbW1pdF9iYXRjaChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCxcbm5ldC94ZHAveHNrLmMtNjE5LVx0XHRcdFx0c3RydWN0IHhza190eF9iYXRjaCAqYmF0Y2gpXG4tLVxubmV0L3hkcC94c2suYy02NDYtXG5uZXQveGRwL3hzay5jOjY0NzpzdGF0aWMgc3RydWN0IHhza190eF9iYXRjaFxubmV0L3hkcC94c2suYzo2NDg6X194c2tfdHhfcGVla19yZWxlYXNlX2Rlc2NfYmF0Y2goc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHN0cnVjdCB4ZHBfc29jayAqeHMsXG5uZXQveGRwL3hzay5jLTY0OS1cdFx0XHRcdCBzdHJ1Y3QgeGRwX2Rlc2MgKmRlc2NzLCB1MzIgbWF4X2Rlc2NzKVxuLS1cbm5ldC94ZHAveHNrLmMtNjY3LVxubmV0L3hkcC94c2suYzo2Njg6c3RhdGljIHN0cnVjdCB4c2tfdHhfYmF0Y2hcbm5ldC94ZHAveHNrLmM6NjY5Onhza190eF9wZWVrX3JlbGVhc2Vfc2hhcmVkX2Rlc2NfYmF0Y2goc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHUzMiBtYXhfZGVzY3MpXG5uZXQveGRwL3hzay5jLTY3MC17XG4tLVxubmV0L3hkcC94c2suYy03NDMtXG5uZXQveGRwL3hzay5jOjc0NDp1MzIgeHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCB1MzIgbmJfcGt0cylcbm5ldC94ZHAveHNrLmMtNzQ1LXtcbi0tXG5uZXQveGRwL3hzay5jLTc5MC19XG5uZXQveGRwL3hzay5jOjc5MTpFWFBPUlRfU1lNQk9MKHhza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaCk7XG5uZXQveGRwL3hzay5jLTc5Mi1cbm5ldC94ZHAveHNrLmM6NzkzOnN0YXRpYyBpbnQgeHNrX3dha2V1cChzdHJ1Y3QgeGRwX3NvY2sgKnhzLCB1OCBmbGFncylcbm5ldC94ZHAveHNrLmMtNzk0LXtcbi0tXG5uZXQveGRwL3hzay5jLTc5OS1cbm5ldC94ZHAveHNrLmM6ODAwOnN0YXRpYyBpbnQgeHNrX2NxX3Jlc2VydmVfbG9ja2VkKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sKVxubmV0L3hkcC94c2suYy04MDEte1xuLS1cbm5ldC94ZHAveHNrLmMtODEwLVxubmV0L3hkcC94c2suYzo4MTE6c3RhdGljIGJvb2wgeHNrX3NrYl9kZXN0cnVjdG9yX2lzX2FkZHIoc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC94ZHAveHNrLmMtODEyLXtcbi0tXG5uZXQveGRwL3hzay5jLTgxNS1cbm5ldC94ZHAveHNrLmM6ODE2OnN0YXRpYyB1NjQgeHNrX3NrYl9kZXN0cnVjdG9yX2dldF9hZGRyKHN0cnVjdCBza19idWZmICpza2IpXG5uZXQveGRwL3hzay5jLTgxNy17XG4tLVxubmV0L3hkcC94c2suYy04MjAtXG5uZXQveGRwL3hzay5jOjgyMTpzdGF0aWMgc3RydWN0IHhza19hZGRycyAqX194c2tfYWRkcnNfYWxsb2Moc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTY0IGFkZHIpXG5uZXQveGRwL3hzay5jLTgyMi17XG4tLVxubmV0L3hkcC94c2suYy04MzMtXG5uZXQveGRwL3hzay5jOjgzNDpzdGF0aWMgc3RydWN0IHhza19hZGRycyAqeHNrX2FkZHJzX2FsbG9jKHN0cnVjdCBza19idWZmICpza2IpXG5uZXQveGRwL3hzay5jLTgzNS17XG4tLVxubmV0L3hkcC94c2suYy04NDYtXG5uZXQveGRwL3hzay5jOjg0NzpzdGF0aWMgaW50IHhza19za2JfZGVzdHJ1Y3Rvcl9zZXRfYWRkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1NjQgYWRkcilcbm5ldC94ZHAveHNrLmMtODQ4LXtcbi0tXG5uZXQveGRwL3hzay5jLTg1OC1cbm5ldC94ZHAveHNrLmM6ODU5OnN0YXRpYyB2b2lkIHhza19pbmNfbnVtX2Rlc2Moc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC94ZHAveHNrLmMtODYwLXtcbi0tXG5uZXQveGRwL3hzay5jLTg2OC1cbm5ldC94ZHAveHNrLmM6ODY5OnN0YXRpYyB1MzIgeHNrX2dldF9udW1fZGVzYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L3hkcC94c2suYy04NzAte1xuLS1cbm5ldC94ZHAveHNrLmMtODgwLVxubmV0L3hkcC94c2suYzo4ODE6c3RhdGljIHZvaWQgeHNrX2NxX3N1Ym1pdF9hZGRyX2xvY2tlZChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCxcbm5ldC94ZHAveHNrLmMtODgyLVx0XHRcdFx0ICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQveGRwL3hzay5jLTkxMC1cbm5ldC94ZHAveHNrLmM6OTExOnN0YXRpYyB2b2lkIHhza19jcV9zdWJtaXRfYWRkcl9zaW5nbGVfbG9ja2VkKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLFxubmV0L3hkcC94c2suYy05MTItXHRcdFx0XHRcdCAgICAgc3RydWN0IHhkcF9kZXNjICpkZXNjKVxuLS1cbm5ldC94ZHAveHNrLmMtOTIzLVxubmV0L3hkcC94c2suYzo5MjQ6c3RhdGljIHZvaWQgeHNrX2NxX2NhbmNlbF9sb2NrZWQoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHUzMiBuKVxubmV0L3hkcC94c2suYy05MjUte1xuLS1cbm5ldC94ZHAveHNrLmM9OTMxPUlORElSRUNUX0NBTExBQkxFX1NDT1BFXG5uZXQveGRwL3hzay5jOjkzMjp2b2lkIHhza19kZXN0cnVjdF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC94ZHAveHNrLmMtOTMzLXtcbi0tXG5uZXQveGRwL3hzay5jLTk0NC1cbm5ldC94ZHAveHNrLmM6OTQ1OnN0YXRpYyBpbnQgeHNrX3NrYl9pbml0X21pc2Moc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHhkcF9zb2NrICp4cyxcbm5ldC94ZHAveHNrLmMtOTQ2LVx0XHRcdCAgICAgdTY0IGFkZHIpXG4tLVxubmV0L3hkcC94c2suYy05NjItXG5uZXQveGRwL3hzay5jOjk2MzpzdGF0aWMgdm9pZCB4c2tfY29uc3VtZV9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC94ZHAveHNrLmMtOTY0LXtcbi0tXG5uZXQveGRwL3hzay5jLTk4MC1cbm5ldC94ZHAveHNrLmM6OTgxOnN0YXRpYyB2b2lkIHhza19kcm9wX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L3hkcC94c2suYy05ODIte1xuLS1cbm5ldC94ZHAveHNrLmMtOTg5LVxubmV0L3hkcC94c2suYzo5OTA6c3RhdGljIGludCB4c2tfc2tiX21ldGFkYXRhKHN0cnVjdCBza19idWZmICpza2IsIHZvaWQgKmJ1ZmZlcixcbm5ldC94ZHAveHNrLmMtOTkxLVx0XHRcdCAgICBzdHJ1Y3QgeGRwX2Rlc2MgKmRlc2MsIHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLFxuLS1cbm5ldC94ZHAveHNrLmMtMTAzNC1cbm5ldC94ZHAveHNrLmM6MTAzNTpzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhza19idWlsZF9za2JfemVyb2NvcHkoc3RydWN0IHhkcF9zb2NrICp4cyxcbm5ldC94ZHAveHNrLmMtMTAzNi1cdFx0XHRcdFx0ICAgICAgc3RydWN0IHhkcF9kZXNjICpkZXNjKVxuLS1cbm5ldC94ZHAveHNrLmMtMTExMC1cbm5ldC94ZHAveHNrLmM6MTExMTpzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhza19idWlsZF9za2Ioc3RydWN0IHhkcF9zb2NrICp4cyxcbm5ldC94ZHAveHNrLmMtMTExMi1cdFx0XHRcdCAgICAgc3RydWN0IHhkcF9kZXNjICpkZXNjKVxuLS1cbm5ldC94ZHAveHNrLmMtMTIxNi1cbm5ldC94ZHAveHNrLmM6MTIxNzpzdGF0aWMgaW50IF9feHNrX2dlbmVyaWNfeG1pdChzdHJ1Y3Qgc29jayAqc2spXG5uZXQveGRwL3hzay5jLTEyMTgte1xuLS1cbm5ldC94ZHAveHNrLmMtMTMzMS1cbm5ldC94ZHAveHNrLmM6MTMzMjpzdGF0aWMgaW50IHhza19nZW5lcmljX3htaXQoc3RydWN0IHNvY2sgKnNrKVxubmV0L3hkcC94c2suYy0xMzMzLXtcbi0tXG5uZXQveGRwL3hzay5jLTEzNDQtXG5uZXQveGRwL3hzay5jOjEzNDU6c3RhdGljIGJvb2wgeHNrX25vX3dha2V1cChzdHJ1Y3Qgc29jayAqc2spXG5uZXQveGRwL3hzay5jLTEzNDYte1xuLS1cbm5ldC94ZHAveHNrLmMtMTM1NS1cbm5ldC94ZHAveHNrLmM6MTM1NjpzdGF0aWMgaW50IHhza19jaGVja19jb21tb24oc3RydWN0IHhkcF9zb2NrICp4cylcbm5ldC94ZHAveHNrLmMtMTM1Ny17XG4tLVxubmV0L3hkcC94c2suYy0xMzY1LVxubmV0L3hkcC94c2suYzoxMzY2OnN0YXRpYyBpbnQgX194c2tfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLCBzaXplX3QgdG90YWxfbGVuKVxubmV0L3hkcC94c2suYy0xMzY3LXtcbi0tXG5uZXQveGRwL3hzay5jLTEzOTYtXG5uZXQveGRwL3hzay5jOjEzOTc6c3RhdGljIGludCB4c2tfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLCBzaXplX3QgdG90YWxfbGVuKVxubmV0L3hkcC94c2suYy0xMzk4LXtcbi0tXG5uZXQveGRwL3hzay5jLTE0MDctXG5uZXQveGRwL3hzay5jOjE0MDg6c3RhdGljIGludCBfX3hza19yZWN2bXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm0sIHNpemVfdCBsZW4sIGludCBmbGFncylcbm5ldC94ZHAveHNrLmMtMTQwOS17XG4tLVxubmV0L3hkcC94c2suYy0xNDMzLVxubmV0L3hkcC94c2suYzoxNDM0OnN0YXRpYyBpbnQgeHNrX3JlY3Ztc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSwgc2l6ZV90IGxlbiwgaW50IGZsYWdzKVxubmV0L3hkcC94c2suYy0xNDM1LXtcbi0tXG5uZXQveGRwL3hzay5jLTE0NDQtXG5uZXQveGRwL3hzay5jOjE0NDU6c3RhdGljIF9fcG9sbF90IHhza19wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxubmV0L3hkcC94c2suYy0xNDQ2LVx0XHRcdCAgICAgc3RydWN0IHBvbGxfdGFibGVfc3RydWN0ICp3YWl0KVxuLS1cbm5ldC94ZHAveHNrLmMtMTQ3Ny1cbm5ldC94ZHAveHNrLmM6MTQ3ODpzdGF0aWMgaW50IHhza19pbml0X3F1ZXVlKHUzMiBlbnRyaWVzLCBzdHJ1Y3QgeHNrX3F1ZXVlICoqcXVldWUsXG5uZXQveGRwL3hzay5jLTE0NzktXHRcdFx0ICBib29sIHVtZW1fcXVldWUpXG4tLVxubmV0L3hkcC94c2suYy0xNDk1LVxubmV0L3hkcC94c2suYzoxNDk2OnN0YXRpYyB2b2lkIHhza191bmJpbmRfZGV2KHN0cnVjdCB4ZHBfc29jayAqeHMpXG5uZXQveGRwL3hzay5jLTE0OTcte1xuLS1cbm5ldC94ZHAveHNrLmMtMTUwOS1cbm5ldC94ZHAveHNrLmM6MTUxMDpzdGF0aWMgc3RydWN0IHhza19tYXAgKnhza19nZXRfbWFwX2xpc3RfZW50cnkoc3RydWN0IHhkcF9zb2NrICp4cyxcbm5ldC94ZHAveHNrLmMtMTUxMS1cdFx0XHRcdFx0ICAgICAgc3RydWN0IHhkcF9zb2NrIF9fcmN1ICoqKm1hcF9lbnRyeSlcbi0tXG5uZXQveGRwL3hzay5jLTE1MjktXG5uZXQveGRwL3hzay5jOjE1MzA6c3RhdGljIHZvaWQgeHNrX2RlbGV0ZV9mcm9tX21hcHMoc3RydWN0IHhkcF9zb2NrICp4cylcbm5ldC94ZHAveHNrLmMtMTUzMS17XG4tLVxubmV0L3hkcC94c2suYy0xNTU1LVxubmV0L3hkcC94c2suYzoxNTU2OnN0YXRpYyBpbnQgeHNrX3JlbGVhc2Uoc3RydWN0IHNvY2tldCAqc29jaylcbm5ldC94ZHAveHNrLmMtMTU1Ny17XG4tLVxubmV0L3hkcC94c2suYy0xNTkzLVxubmV0L3hkcC94c2suYzoxNTk0OnN0YXRpYyBzdHJ1Y3Qgc29ja2V0ICp4c2tfbG9va3VwX3hza19mcm9tX2ZkKGludCBmZClcbm5ldC94ZHAveHNrLmMtMTU5NS17XG4tLVxubmV0L3hkcC94c2suYy0xNjEwLVxubmV0L3hkcC94c2suYzoxNjExOnN0YXRpYyBib29sIHhza192YWxpZGF0ZV9xdWV1ZXMoc3RydWN0IHhkcF9zb2NrICp4cylcbm5ldC94ZHAveHNrLmMtMTYxMi17XG4tLVxubmV0L3hkcC94c2suYy0xNjE1LVxubmV0L3hkcC94c2suYzoxNjE2OnN0YXRpYyBpbnQgeHNrX2JpbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKmFkZHIsIGludCBhZGRyX2xlbilcbm5ldC94ZHAveHNrLmMtMTYxNy17XG4tLVxubmV0L3hkcC94c2suYz0xODA3PXN0cnVjdCB4ZHBfdW1lbV9yZWdfdjEge1xuLS1cbm5ldC94ZHAveHNrLmMtMTgxMy1cbm5ldC94ZHAveHNrLmM6MTgxNDpzdGF0aWMgaW50IHhza19zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXG5uZXQveGRwL3hzay5jLTE4MTUtXHRcdFx0ICBzb2NrcHRyX3Qgb3B0dmFsLCB1bnNpZ25lZCBpbnQgb3B0bGVuKVxuLS1cbm5ldC94ZHAveHNrLmMtMTkzNi1cbm5ldC94ZHAveHNrLmM6MTkzNzpzdGF0aWMgdm9pZCB4c2tfZW50ZXJfcnh0eF9vZmZzZXRzKHN0cnVjdCB4ZHBfcmluZ19vZmZzZXRfdjEgKnJpbmcpXG5uZXQveGRwL3hzay5jLTE5Mzgte1xuLS1cbm5ldC94ZHAveHNrLmMtMTk0My1cbm5ldC94ZHAveHNrLmM6MTk0NDpzdGF0aWMgdm9pZCB4c2tfZW50ZXJfdW1lbV9vZmZzZXRzKHN0cnVjdCB4ZHBfcmluZ19vZmZzZXRfdjEgKnJpbmcpXG5uZXQveGRwL3hzay5jLTE5NDUte1xuLS1cbm5ldC94ZHAveHNrLmM9MTk1MT1zdHJ1Y3QgeGRwX3N0YXRpc3RpY3NfdjEge1xuLS1cbm5ldC94ZHAveHNrLmMtMTk1Ni1cbm5ldC94ZHAveHNrLmM6MTk1NzpzdGF0aWMgaW50IHhza19nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXG5uZXQveGRwL3hzay5jLTE5NTgtXHRcdFx0ICBzb2Nrb3B0X3QgKm9wdClcbi0tXG5uZXQveGRwL3hzay5jLTIwODQtXG5uZXQveGRwL3hzay5jOjIwODU6c3RhdGljIGludCB4c2tfbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHNvY2tldCAqc29jayxcbm5ldC94ZHAveHNrLmMtMjA4Ni1cdFx0ICAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuLS1cbm5ldC94ZHAveHNrLmMtMjEyMi1cbm5ldC94ZHAveHNrLmM6MjEyMzpzdGF0aWMgaW50IHhza19ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsXG5uZXQveGRwL3hzay5jLTIxMjQtXHRcdFx0dW5zaWduZWQgbG9uZyBtc2csIHZvaWQgKnB0cilcbi0tXG5uZXQveGRwL3hzay5jLTIxNTQtXG5uZXQveGRwL3hzay5jOjIxNTU6c3RhdGljIHN0cnVjdCBwcm90byB4c2tfcHJvdG8gPSB7XG5uZXQveGRwL3hzay5jLTIxNTYtXHQubmFtZSA9XHRcdFwmIzM0O1hEUFwmIzM0Oyxcbi0tXG5uZXQveGRwL3hzay5jLTIxNjAtXG5uZXQveGRwL3hzay5jOjIxNjE6c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgeHNrX3Byb3RvX29wcyA9IHtcbm5ldC94ZHAveHNrLmMtMjE2Mi1cdC5mYW1pbHlcdFx0PSBQRl9YRFAsXG4tLVxubmV0L3hkcC94c2suYy0yMTgwLVxubmV0L3hkcC94c2suYzoyMTgxOnN0YXRpYyB2b2lkIHhza19kZXN0cnVjdChzdHJ1Y3Qgc29jayAqc2spXG5uZXQveGRwL3hzay5jLTIxODIte1xuLS1cbm5ldC94ZHAveHNrLmMtMjE5MS1cbm5ldC94ZHAveHNrLmM6MjE5MjpzdGF0aWMgaW50IHhza19jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgcHJvdG9jb2wsXG5uZXQveGRwL3hzay5jLTIxOTMtXHRcdCAgICAgIGludCBrZXJuKVxuLS1cbm5ldC94ZHAveHNrLmMtMjIzOC1cbm5ldC94ZHAveHNrLmM6MjIzOTpzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9wcm90b19mYW1pbHkgeHNrX2ZhbWlseV9vcHMgPSB7XG5uZXQveGRwL3hzay5jLTIyNDAtXHQuZmFtaWx5ID0gUEZfWERQLFxuLS1cbm5ldC94ZHAveHNrLmMtMjI0NC1cbm5ldC94ZHAveHNrLmM6MjI0NTpzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIHhza19uZXRkZXZfbm90aWZpZXIgPSB7XG5uZXQveGRwL3hzay5jLTIyNDYtXHQubm90aWZpZXJfY2FsbFx0PSB4c2tfbm90aWZpZXIsXG4tLVxubmV0L3hkcC94c2suYy0yMjQ4LVxubmV0L3hkcC94c2suYzoyMjQ5OnN0YXRpYyBpbnQgX19uZXRfaW5pdCB4c2tfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KVxubmV0L3hkcC94c2suYy0yMjUwLXtcbi0tXG5uZXQveGRwL3hzay5jLTIyNTUtXG5uZXQveGRwL3hzay5jOjIyNTY6c3RhdGljIHZvaWQgX19uZXRfZXhpdCB4c2tfbmV0X2V4aXQoc3RydWN0IG5ldCAqbmV0KVxubmV0L3hkcC94c2suYy0yMjU3LXtcbi0tXG5uZXQveGRwL3hzay5jLTIyNjAtXG5uZXQveGRwL3hzay5jOjIyNjE6c3RhdGljIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyB4c2tfbmV0X29wcyA9IHtcbm5ldC94ZHAveHNrLmMtMjI2Mi1cdC5pbml0ID0geHNrX25ldF9pbml0LFxuLS1cbm5ldC94ZHAveHNrLmMtMjI2NS1cbm5ldC94ZHAveHNrLmM6MjI2NjpzdGF0aWMgaW50IF9faW5pdCB4c2tfaW5pdCh2b2lkKVxubmV0L3hkcC94c2suYy0yMjY3LXtcbi0tXG5uZXQveGRwL3hzay5jLTIzMDctXG5uZXQveGRwL3hzay5jOjIzMDg6ZnNfaW5pdGNhbGwoeHNrX2luaXQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwNzozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDk3MQoJCQkJCQkJb3V0cHV0OiAxMTMKCQkJCQkJCXRob3VnaHRzOiAyNzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgWERQIFNvY2tldCBEZXN0cnVjdG9yKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBgeHNrX2Rlc3RydWN0X3NrYmAsIHRoYXQmIzM5O3MgdGhlIGtleSBmdW5jdGlvbiwgYW4gZXhwb3J0ZWQgZnVuY3Rpb24sIG1lYW5pbmcgaXQmIzM5O3MgaW50ZW5kZWQgdG8gYmUgY2FsbGVkIGZyb20gb3V0c2lkZSB0aGUgbW9kdWxlLiBJIGtub3cgdGhhdCwgYmFzZWQgb24gaXRzIHNpZ25hdHVyZTogYElORElSRUNUX0NBTExBQkxFX1NDT1BFIHZvaWQgeHNrX2Rlc3RydWN0X3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKWAuIFdlIGFsc28gaGF2ZSByZWxhdGVkIGZ1bmN0aW9ucyB0byBjb25zaWRlciwgbGlrZSBgeHNrX2dlbmVyaWNfcmN2YCwgYHhza19zZW5kbXNnYCwgYHhza19iaW5kYCwgYW5kIGB4c2tfY3JlYXRlYCwgdGhvdWdoIGB4c2tfY3JlYXRlYCBpcyBzdGF0aWMgYnV0IHJlZ2lzdGVyZWQgYXMgYSBgbmV0X3Byb3RvX2ZhbWlseWAuIFdlIGNvdWxkIGNlcnRhaW5seSBsb29rIGF0IHRob3NlIGFzIHdlbGwsIGJ1dCBmb3Igbm93LCBsZXQmIzM5O3Mga2VlcCBgeHNrX2Rlc3RydWN0X3NrYmAgYW5kIGB4c2tfZ2VuZXJpY19yY3ZgIGluIGZvY3VzLgoKTm93LCB0aGF0IFdvcnRoRnV6emluZyBjaGVjay4uLiBBaGEhIFRoZSBwYXRjaCBhZGRzIGBza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKWAgdG8gYHhza19za2JfaW5pdF9taXNjYC4gVGhpcyBzdWdnZXN0cyBhIGZpeCBmb3IgbmV0d29yayBoZWFkZXIgb2Zmc2V0cyBvbiBnZW5lcmljIEFGX1hEUCBza2JzIHNlbnQgdG8gbmV0ZGV2aWNlcy4gU28sIGl0JiMzOTtzIGNvcmUgbmV0d29ya2luZyBsb2dpYywgYW5kIGFjY2Vzc2libGUgdGhyb3VnaCBBRl9YRFAgKFhTSyBzb2NrZXRzKS4gRXhjZWxsZW50LCB0aGlzIGlzIGRlZmluaXRlbHkgZnV6emFibGUsIGFuZCB3aXRoaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIFFFTVUsIGV2ZW4gYmV0dGVyLiBUaGUga2V5IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBuZWVkZWQgYXJlIGBYRFBfU09DS0VUU2AgYW5kIGBCUEZfU1lTQ0FMTGAuCgpTbywgV29ydGhGdXp6aW5nOiBUcnVlLiBUaGlzIGlzIHNvbWV0aGluZyB3ZSBjYW4gYW5kIHNob3VsZCB0YXJnZXQuIEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgdG8gc2V0IHRoZSByZXN1bHRzIGFjY29yZGluZ2x5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwNzozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7WERQX1NPQ0tFVFMmIzM0OywKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt4c2tfZGVzdHJ1Y3Rfc2tiJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKCkgdG8geHNrX3NrYl9pbml0X21pc2MoKSB3aGVuIGJ1aWxkaW5nIHNrYnMgZm9yIEFGX1hEUCBzb2NrZXRzIHRyYW5zbWl0LiBUaGlzIG1vZGlmaWVzIGNvcmUgbmV0d29ya2luZyBBRl9YRFAgbG9naWMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBhbmQgaXMgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7WERQX1NPQ0tFVFMmIzM0OywKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt4c2tfZGVzdHJ1Y3Rfc2tiJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKCkgdG8geHNrX3NrYl9pbml0X21pc2MoKSB3aGVuIGJ1aWxkaW5nIHNrYnMgZm9yIEFGX1hEUCBzb2NrZXRzIHRyYW5zbWl0LiBUaGlzIG1vZGlmaWVzIGNvcmUgbmV0d29ya2luZyBBRl9YRFAgbG9naWMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBhbmQgaXMgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDc6Mzc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwNzozNzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBzaW5nbGUgY2FsbCB0byBgc2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYilgIHdpdGhpbiBgeHNrX3NrYl9pbml0X21pc2MoKWAgaW4gdGhlIEFGX1hEUCBzdWJzeXN0ZW0gKGBuZXQveGRwL3hzay5jYCkuXG5cbktNU0FOIHZzLiBLQVNBTiBhcHBsaWNhYmlsaXR5IGFuYWx5c2lzOlxuLSAqKktNU0FOIFJlbGV2YW5jZSoqOiBLTVNBTiBkZXRlY3RzIHVzZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhbmQgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlciBzcGFjZS4gVGhlIHBhdGNoIHNpbXBseSBpbml0aWFsaXplcyB0aGUgYG5ldHdvcmtfaGVhZGVyYCBvZmZzZXQgb24gdGhlIG5ld2x5IGNyZWF0ZWQgYHNrX2J1ZmZgIHRvIG1hdGNoIGBza2ItXHUwMDNlZGF0YWAuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHN0YWNrL2hlYXAgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIHBhZGRpbmcgb3Igc3RydWN0IGZpZWxkcyB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgYWx0ZXIgbGVuZ3RoIGNhbGN1bGF0aW9ucyBvciBib3VuZHMgY2hlY2tzIGluIGEgd2F5IHRoYXQgd291bGQgYWxsb3cgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuXG4tICoqS0FTQU4gLyBTdGFuZGFyZCBEZWJ1Z2dlcnMqKjogU3RhbmRhcmQgS0FTQU4gZnV6emluZyBhbmQgdGhlIG5ldHdvcmtpbmcgc3RhY2smIzM5O3MgYnVpbHQtaW4gYXNzZXJ0aW9ucy9jaGVja3MgYXJlIHN1ZmZpY2llbnQgdG8gdGVzdCBza2IgY29uc3RydWN0aW9uIGFuZCBwYWNrZXQgdHJhbnNtaXNzaW9uIGluIEFGX1hEUC5cblxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYjA3ZDg1YmY5ZThlZGVjZjdlZmIzMWZhM2NmMmIwODJiNGM1MzQ0YQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgU2VwIDMgMDc6MzY6NTIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQveGRwL3hzay5jIGIvbmV0L3hkcC94c2suYwppbmRleCAzMzQ3NWIxODBlYTZmLi4yMDc3YmI2Mjk5Y2E5IDEwMDY0NAotLS0gYS9uZXQveGRwL3hzay5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC94ZHAveHNrLmMKQEAgLTk0Nyw2ICYjNDM7OTQ3LDggQEAgc3RhdGljIGludCB4c2tfc2tiX2luaXRfbWlzYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeGRwX3NvY2sgKnhzLAogewogCWludCBlcnI7CiAKJiM0MzsJc2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYik7CiYjNDM7CiAJZXJyID0geHNrX3NrYl9kZXN0cnVjdG9yX3NldF9hZGRyKHNrYiwgYWRkcik7CiAJaWYgKHVubGlrZWx5KGVycikpCiAJCXJldHVybiBlcnI7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwNzozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDU4CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgWFNLIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gVGhlIHBhdGNoIGlzIHRvdWNoaW5nIGBuZXQveGRwL3hzay5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgeHNrX3NrYl9pbml0X21pc2NgIGZ1bmN0aW9uLiBJbW1lZGlhdGVseSwgSSBzZWUgYSBuZXcgbGluZTogYHNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpO2AuIFJpZ2h0LCB0aGlzIGlzIGEgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBhZGRpdGlvbiwgYnV0IGxldCYjMzk7cyBtYWtlIHN1cmUgaXQgbWFrZXMgc2Vuc2UgaW4gY29udGV4dC4gTGV0IG1lIHF1aWNrbHkgdXNlIGByZWFkLWZpbGVgIHRvIGdldCB0aGUgYXJlYSBhcm91bmQgbGluZSA5NDcgb2YgYG5ldC94ZHAveHNrLmNgLiBUaGUgcHVycG9zZSBvZiB0aGlzIGZ1bmN0aW9uIG11c3QgYmUgdG8gaW5pdGlhbGl6ZSBhbiBgc2tfYnVmZmAgZm9yIFhTSyAoZVhwcmVzcyBEYXRhIFBhdGggU29ja2V0cykuIFNvLCBpdCBtYWtlcyBzZW5zZSB0aGF0IHdlJiMzOTtkIGhhdmUgdG8gcmVzZXQgdGhlIG5ldHdvcmsgaGVhZGVyIG9mIGBza2JgIGJlZm9yZSBhc3NpZ25pbmcgdGhlIGFkZHJlc3MsIHByZXZlbnRpbmcgYW55IHdlaXJkIHNpZGUgZWZmZWN0cyB3aGVuIGNvbnN0cnVjdGluZyB0aGUgYHNrX2J1ZmZgLiBUaGlzIGlzIGEgbG93LXJpc2ssIGxpa2VseSBuZWNlc3NhcnkgYWRkaXRpb24uIEkmIzM5O2xsIGZsYWcgaXQgYXMgc3VjaCBhbmQgbW92ZSBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDc6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQveGRwL3hzay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA5MjA6XHRcdHhza3FfcHJvZF9zdWJtaXRfbihwb29sLVx1MDAzZWNxLCAxKTtcbiA5MjE6XHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2cG9vbC1cdTAwM2VjcV9wcm9kX2xvY2ssIGZsYWdzKTtcbiA5MjI6XHR9XG4gOTIzOlx0XG4gOTI0Olx0c3RhdGljIHZvaWQgeHNrX2NxX2NhbmNlbF9sb2NrZWQoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHUzMiBuKVxuIDkyNTpcdHtcbiA5MjY6XHRcdHNwaW5fbG9jayhcdTAwMjZwb29sLVx1MDAzZWNxLVx1MDAzZWNxX2NhY2hlZF9wcm9kX2xvY2spO1xuIDkyNzpcdFx0eHNrcV9wcm9kX2NhbmNlbF9uKHBvb2wtXHUwMDNlY3EsIG4pO1xuIDkyODpcdFx0c3Bpbl91bmxvY2soXHUwMDI2cG9vbC1cdTAwM2VjcS1cdTAwM2VjcV9jYWNoZWRfcHJvZF9sb2NrKTtcbiA5Mjk6XHR9XG4gOTMwOlx0XG4gOTMxOlx0SU5ESVJFQ1RfQ0FMTEFCTEVfU0NPUEVcbiA5MzI6XHR2b2lkIHhza19kZXN0cnVjdF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYilcbiA5MzM6XHR7XG4gOTM0Olx0XHRzdHJ1Y3QgeHNrX3R4X21ldGFkYXRhX2NvbXBsICpjb21wbCA9IFx1MDAyNnNrYl9zaGluZm8oc2tiKS1cdTAwM2V4c2tfbWV0YTtcbiA5MzU6XHRcbiA5MzY6XHRcdGlmIChjb21wbC1cdTAwM2V0eF90aW1lc3RhbXApIHtcbiA5Mzc6XHRcdFx0Lyogc3cgY29tcGxldGlvbiB0aW1lc3RhbXAsIG5vdCBhIHJlYWwgb25lICovXG4gOTM4Olx0XHRcdCpjb21wbC1cdTAwM2V0eF90aW1lc3RhbXAgPSBrdGltZV9nZXRfdGFpX2Zhc3RfbnMoKTtcbiA5Mzk6XHRcdH1cbiA5NDA6XHRcbiA5NDE6XHRcdHhza19jcV9zdWJtaXRfYWRkcl9sb2NrZWQoeGRwX3NrKHNrYi1cdTAwM2VzayktXHUwMDNlcG9vbCwgc2tiKTtcbiA5NDI6XHRcdHNvY2tfd2ZyZWUoc2tiKTtcbiA5NDM6XHR9XG4gOTQ0Olx0XG4gOTQ1Olx0c3RhdGljIGludCB4c2tfc2tiX2luaXRfbWlzYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeGRwX3NvY2sgKnhzLFxuIDk0NjpcdFx0XHRcdCAgICAgdTY0IGFkZHIpXG4gOTQ3Olx0e1xuIDk0ODpcdFx0aW50IGVycjtcbiA5NDk6XHRcbiA5NTA6XHRcdHNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpO1xuIDk1MTpcdFxuIDk1MjpcdFx0ZXJyID0geHNrX3NrYl9kZXN0cnVjdG9yX3NldF9hZGRyKHNrYiwgYWRkcik7XG4gOTUzOlx0XHRpZiAodW5saWtlbHkoZXJyKSlcbiA5NTQ6XHRcdFx0cmV0dXJuIGVycjtcbiA5NTU6XHRcbiA5NTY6XHRcdHNrYi1cdTAwM2VkZXYgPSB4cy1cdTAwM2VkZXY7XG4gOTU3Olx0XHRza2ItXHUwMDNlcHJpb3JpdHkgPSBSRUFEX09OQ0UoeHMtXHUwMDNlc2suc2tfcHJpb3JpdHkpO1xuIDk1ODpcdFx0c2tiLVx1MDAzZW1hcmsgPSBSRUFEX09OQ0UoeHMtXHUwMDNlc2suc2tfbWFyayk7XG4gOTU5Olx0XHRza2ItXHUwMDNlZGVzdHJ1Y3RvciA9IHhza19kZXN0cnVjdF9za2I7XG4gOTYwOlx0XHRyZXR1cm4gMDtcbiA5NjE6XHR9XG4gOTYyOlx0XG4gOTYzOlx0c3RhdGljIHZvaWQgeHNrX2NvbnN1bWVfc2tiKHN0cnVjdCBza19idWZmICpza2IpXG4gOTY0Olx0e1xuIDk2NTpcdFx0c3RydWN0IHhkcF9zb2NrICp4cyA9IHhkcF9zayhza2ItXHUwMDNlc2spO1xuIDk2NjpcdFx0dTMyIG51bV9kZXNjcyA9IHhza19nZXRfbnVtX2Rlc2Moc2tiKTtcbiA5Njc6XHRcdHN0cnVjdCB4c2tfYWRkcnMgKnhza19hZGRyO1xuIDk2ODpcdFxuIDk2OTpcdFx0aWYgKHVubGlrZWx5KCF4c2tfc2tiX2Rlc3RydWN0b3JfaXNfYWRkcihza2IpKSkge1xuIDk3MDpcdFx0XHR4c2tfYWRkciA9IChzdHJ1Y3QgeHNrX2FkZHJzICopc2tiX3NoaW5mbyhza2IpLVx1MDAzZWRlc3RydWN0b3JfYXJnO1xuIDk3MTpcdFx0XHRrbWVtX2NhY2hlX2ZyZWUoeHNrX3R4X2dlbmVyaWNfY2FjaGUsIHhza19hZGRyKTtcbiA5NzI6XHRcdH1cbiA5NzM6XHRcbiA5NzQ6XHRcdHNrYi1cdTAwM2VkZXN0cnVjdG9yID0gc29ja193ZnJlZTtcbiA5NzU6XHRcdHhza19jcV9jYW5jZWxfbG9ja2VkKHhzLVx1MDAzZXBvb2wsIG51bV9kZXNjcyk7XG4gOTc2Olx0XHQvKiBGcmVlIHNrYiB3aXRob3V0IHRyaWdnZXJpbmcgdGhlIHBlcmYgZHJvcCB0cmFjZSAqL1xuIDk3NzpcdFx0Y29uc3VtZV9za2Ioc2tiKTtcbiA5Nzg6XHRcdHhzLVx1MDAzZXNrYiA9IE5VTEw7XG4gOTc5Olx0fVxuIDk4MDpcdFxuIDk4MTpcdHN0YXRpYyB2b2lkIHhza19kcm9wX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIDk4MjpcdHtcbiA5ODM6XHRcdHN0cnVjdCB4ZHBfc29jayAqeHMgPSB4ZHBfc2soc2tiLVx1MDAzZXNrKTtcbiA5ODQ6XHRcbiA5ODU6XHRcdHhzLVx1MDAzZXR4LVx1MDAzZWludmFsaWRfZGVzY3MgJiM0Mzs9IHhza19nZXRfbnVtX2Rlc2Moc2tiKTtcbiA5ODY6XHRcdGNvbnN1bWVfc2tiKHNrYik7XG4gOTg3Olx0XHR4cy1cdTAwM2Vza2IgPSBOVUxMO1xuIDk4ODpcdH1cbiA5ODk6XHRcbiA5OTA6XHRzdGF0aWMgaW50IHhza19za2JfbWV0YWRhdGEoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdm9pZCAqYnVmZmVyLFxuIDk5MTpcdFx0XHRcdCAgICBzdHJ1Y3QgeGRwX2Rlc2MgKmRlc2MsIHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLFxuIDk5MjpcdFx0XHRcdCAgICB1MzIgaHIpXG4gOTkzOlx0e1xuIDk5NDpcdFx0c3RydWN0IHhza190eF9tZXRhZGF0YSAqbWV0YSA9IE5VTEw7XG4gOTk1Olx0XHR1MTYgY3N1bV9zdGFydCwgY3N1bV9vZmZzZXQ7XG4gOTk2Olx0XHR1NjQgZmxhZ3M7XG4gOTk3Olx0XG4gOTk4Olx0XHRpZiAodW5saWtlbHkocG9vbC1cdTAwM2V0eF9tZXRhZGF0YV9sZW4gPT0gMCkpXG4gOTk5Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwNzozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzg1CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhbiBleHBlcnQgaW4gdGhlIGZpZWxkOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBPcmlnaW5zIG9mIGB4c2tfc2tiX2luaXRfbWlzY2AqKgoKQWxyaWdodCwgc28gSSYjMzk7bSB0cnlpbmcgdG8gdHJhY2UgdGhlIGxpbmVhZ2Ugb2YgdGhpcyBgeHNrX3NrYl9pbml0X21pc2NgIGZ1bmN0aW9uLiBUaGUgZ29hbCBoZXJlIGlzIHRvIHVuZGVyc3RhbmQgaXRzIHB1cnBvc2UgYW5kLCBtb3JlIGltcG9ydGFudGx5LCB0byBjb25uZWN0IGl0IHRvIGl0cyBpbml0aWFsIGludHJvZHVjdGlvbiBvciBzaWduaWZpY2FudCBtb2RpZmljYXRpb25zIHdpdGhpbiB0aGUgcmVsZXZhbnQgY29kZWJhc2UuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIGl0JiMzOTtzIGJlaW5nIGNhbGxlZCwgd2hpY2ggd2lsbCBsaWtlbHkgZ2l2ZSBtZSBzb21lIGltcG9ydGFudCBjb250ZXh0LiBUaGUgYmVzdCBhcHByb2FjaCBpcyB0byBzdGFydCB3aXRoIGEgcXVpY2sgY29kZSBzZWFyY2guIEkmIzM5O2xsIHVzZSBgZ3JlcHBlcmAg4oCTIHRoYXQmIzM5O3MgdXN1YWxseSB0aGUgbW9zdCBlZmZpY2llbnQgd2F5IHRvIHF1aWNrbHkgZmluZCBhbGwgb2NjdXJyZW5jZXMgb2YgdGhpcyBmdW5jdGlvbiBuYW1lIHdpdGhpbiB0aGUgcHJvamVjdC4gSG9wZWZ1bGx5LCBieSBpZGVudGlmeWluZyB0aGUgY2FsbCBzaXRlcywgSSBjYW4gem9vbSBpbiBvbiB0aGUgc3BlY2lmaWMgY29tbWl0KHMpIHJlc3BvbnNpYmxlIGZvciBpdHMgaW5jbHVzaW9uIG9yIG1vZGlmaWNhdGlvbi4gVGhhdCBpbmZvcm1hdGlvbiB3aWxsIHByb3ZpZGUgdmFsdWFibGUgaW5zaWdodCBpbnRvIHRoZSBkZXNpZ24gZGVjaXNpb25zIGFuZCB0aGUgaW50ZW50IGJlaGluZCB0aGlzIHBhcnRpY3VsYXIgZnVuY3Rpb24uIEZyb20gdGhlcmUsIEkgY2FuIGFuYWx5emUgdGhlIGNvbW1pdCBtZXNzYWdlcyBhbmQgc3Vycm91bmRpbmcgY29kZSB0byBncmFzcCBpdHMgcm9sZSBtb3JlIGNvbXBsZXRlbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA3OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hza19za2JfaW5pdF9taXNjJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZHAveHNrLmM9OTMyPXZvaWQgeHNrX2Rlc3RydWN0X3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC94ZHAveHNrLmMtOTQ0LVxubmV0L3hkcC94c2suYzo5NDU6c3RhdGljIGludCB4c2tfc2tiX2luaXRfbWlzYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeGRwX3NvY2sgKnhzLFxubmV0L3hkcC94c2suYy05NDYtXHRcdFx0ICAgICB1NjQgYWRkcilcbi0tXG5uZXQveGRwL3hzay5jPTExMTE9c3RhdGljIHN0cnVjdCBza19idWZmICp4c2tfYnVpbGRfc2tiKHN0cnVjdCB4ZHBfc29jayAqeHMsXG4tLVxubmV0L3hkcC94c2suYy0xMTg2LVx0aWYgKCF4cy1cdTAwM2Vza2IpIHtcbm5ldC94ZHAveHNrLmM6MTE4NzpcdFx0ZXJyID0geHNrX3NrYl9pbml0X21pc2Moc2tiLCB4cywgZGVzYy1cdTAwM2VhZGRyKTtcbm5ldC94ZHAveHNrLmMtMTE4OC1cdFx0aWYgKHVubGlrZWx5KGVycikpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA3OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzMzUKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSBwcm9jZXNzaW5nIHRoZSBjb2RlOgoKKipEaXZpbmcgaW50byBgeHNrX2J1aWxkX3NrYmAqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgd2l0aCBgeHNrX2J1aWxkX3NrYmAuIEkmIzM5O20gZ29pbmcgdG8gZm9jdXMgb24gbGluZXMgMTExMSB0byAxMjAwLiBUaGlzIGZ1bmN0aW9uIGlzIGNydWNpYWwgZm9yIGJ1aWxkaW5nIFNLQnMg4oCTIHRoZSBTb2NrZXQgQnVmZmVyIHN0cnVjdHVyZXMg4oCTIHdoaWNoIGFyZSBhYnNvbHV0ZWx5IGZ1bmRhbWVudGFsIHRvIGhvdyBkYXRhIGlzIG1vdmVkIGFyb3VuZCBpbiB0aGUgWERQIChlWHByZXNzIERhdGEgUGF0aCkgd29ybGQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgcGFydCAqdGhvcm91Z2hseSouIEkga25vdyBpdCBoYW5kbGVzIHRoZSBhbGxvY2F0aW9uIGFuZCBwb3B1bGF0aW9uIG9mIHRoZXNlIFNLQnMsIGFuZCB0aGF0JiMzOTtzIHRoZSBjb3JlIG9mIGdldHRpbmcgcGFja2V0cyBpbnRvIGFuZCBvdXQgb2YgdGhlIG5ldHdvcmsgc3RhY2sgZWZmaWNpZW50bHkuIEkmIzM5O20gZXhwZWN0aW5nIHNvbWUgaW50cmljYXRlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBjYXJlZnVsIGRhdGEgY29weWluZyBpbiBoZXJlOyBvcHRpbWl6YXRpb24gaXMgY3JpdGljYWwgaW4gdGhpcyBjb250ZXh0LiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBob3cgaXQgaGFuZGxlcyBwb3RlbnRpYWwgZXJyb3JzLCBsaWtlIG1lbW9yeSBleGhhdXN0aW9uIG9yIG90aGVyIGlzc3VlcyB0aGF0IGNvdWxkIHN0YWxsIHBhY2tldCBwcm9jZXNzaW5nLiBBIGRlZXAgdW5kZXJzdGFuZGluZyBvZiBlcnJvciBwYXRocyBpcyBqdXN0IGFzIGltcG9ydGFudCBhcyB0aGUgaGFwcHkgcGF0aCBpbiBhIHBlcmZvcm1hbmNlLWNyaXRpY2FsIGZ1bmN0aW9uIGxpa2UgdGhpcy4gSSYjMzk7bGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgcG90ZW50aWFsIGZvciByYWNlIGNvbmRpdGlvbnMgb3IgbG9ja2luZyBpc3N1ZXMsIGVzcGVjaWFsbHkgd2l0aCBzaGFyZWQgZGF0YSBzdHJ1Y3R1cmVzLiBUaGlzIGlzIHdoZXJlIHRoZSBkZXZpbCBvZnRlbiBoaWRlcywgZXNwZWNpYWxseSBpbiBsb3ctbGV2ZWwgbmV0d29yayBjb2RlLiBJJiMzOTttIGFsc28gY3VyaW91cyB0byBzZWUgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIFhEUCBjb21wb25lbnRzLCBsaWtlIHRoZSByaW5nIGJ1ZmZlcnMgYW5kIHRoZSBBRl9YRFAgc29ja2V0IGl0c2VsZi4gSXQmIzM5O3MgbGlrZWx5IGludm9sdmVkIGluIHRoZSBoYW5kb3ZlciBmcm9tIHRoZSBmYXN0IHBhdGggdG8gdGhlIHN0YW5kYXJkIG5ldHdvcmsgc3RhY2ssIHdoaWNoIG5lZWRzIHRvIGJlIGFzIHNlYW1sZXNzIGFuZCBlZmZpY2llbnQgYXMgcG9zc2libGUuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgaG93IHRoZSBtYWdpYyBoYXBwZW5zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwNzozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC94ZHAveHNrLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMTEwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDkwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzExMTA6XHRcbjExMTE6XHRzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhza19idWlsZF9za2Ioc3RydWN0IHhkcF9zb2NrICp4cyxcbjExMTI6XHRcdFx0XHRcdCAgICAgc3RydWN0IHhkcF9kZXNjICpkZXNjKVxuMTExMzpcdHtcbjExMTQ6XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSB4cy1cdTAwM2VkZXY7XG4xMTE1Olx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0geHMtXHUwMDNlc2tiO1xuMTExNjpcdFx0aW50IGVycjtcbjExMTc6XHRcbjExMTg6XHRcdGlmIChkZXYtXHUwMDNlcHJpdl9mbGFncyBcdTAwMjYgSUZGX1RYX1NLQl9OT19MSU5FQVIpIHtcbjExMTk6XHRcdFx0c2tiID0geHNrX2J1aWxkX3NrYl96ZXJvY29weSh4cywgZGVzYyk7XG4xMTIwOlx0XHRcdGlmIChJU19FUlIoc2tiKSkge1xuMTEyMTpcdFx0XHRcdGVyciA9IFBUUl9FUlIoc2tiKTtcbjExMjI6XHRcdFx0XHRza2IgPSBOVUxMO1xuMTEyMzpcdFx0XHRcdGdvdG8gZnJlZV9lcnI7XG4xMTI0Olx0XHRcdH1cbjExMjU6XHRcdH0gZWxzZSB7XG4xMTI2Olx0XHRcdHUzMiBociwgdHIsIGxlbjtcbjExMjc6XHRcdFx0dm9pZCAqYnVmZmVyO1xuMTEyODpcdFxuMTEyOTpcdFx0XHRidWZmZXIgPSB4c2tfYnVmZl9yYXdfZ2V0X2RhdGEoeHMtXHUwMDNlcG9vbCwgZGVzYy1cdTAwM2VhZGRyKTtcbjExMzA6XHRcdFx0bGVuID0gZGVzYy1cdTAwM2VsZW47XG4xMTMxOlx0XG4xMTMyOlx0XHRcdGlmICghc2tiKSB7XG4xMTMzOlx0XHRcdFx0aHIgPSBtYXgoTkVUX1NLQl9QQUQsIEwxX0NBQ0hFX0FMSUdOKGRldi1cdTAwM2VuZWVkZWRfaGVhZHJvb20pKTtcbjExMzQ6XHRcdFx0XHR0ciA9IGRldi1cdTAwM2VuZWVkZWRfdGFpbHJvb207XG4xMTM1Olx0XHRcdFx0c2tiID0gc29ja19hbGxvY19zZW5kX3NrYihcdTAwMjZ4cy1cdTAwM2VzaywgaHIgJiM0MzsgbGVuICYjNDM7IHRyLCAxLCBcdTAwMjZlcnIpO1xuMTEzNjpcdFx0XHRcdGlmICh1bmxpa2VseSghc2tiKSlcbjExMzc6XHRcdFx0XHRcdGdvdG8gZnJlZV9lcnI7XG4xMTM4Olx0XG4xMTM5Olx0XHRcdFx0c2tiX3Jlc2VydmUoc2tiLCBocik7XG4xMTQwOlx0XHRcdFx0c2tiX3B1dChza2IsIGxlbik7XG4xMTQxOlx0XG4xMTQyOlx0XHRcdFx0ZXJyID0gc2tiX3N0b3JlX2JpdHMoc2tiLCAwLCBidWZmZXIsIGxlbik7XG4xMTQzOlx0XHRcdFx0aWYgKHVubGlrZWx5KGVycikpXG4xMTQ0Olx0XHRcdFx0XHRnb3RvIGZyZWVfZXJyO1xuMTE0NTpcdFxuMTE0NjpcdFx0XHRcdGlmIChkZXNjLVx1MDAzZW9wdGlvbnMgXHUwMDI2IFhEUF9UWF9NRVRBREFUQSkge1xuMTE0NzpcdFx0XHRcdFx0ZXJyID0geHNrX3NrYl9tZXRhZGF0YShza2IsIGJ1ZmZlciwgZGVzYyxcbjExNDg6XHRcdFx0XHRcdFx0XHQgICAgICAgeHMtXHUwMDNlcG9vbCwgaHIpO1xuMTE0OTpcdFx0XHRcdFx0aWYgKHVubGlrZWx5KGVycikpXG4xMTUwOlx0XHRcdFx0XHRcdGdvdG8gZnJlZV9lcnI7XG4xMTUxOlx0XHRcdFx0fVxuMTE1MjpcdFx0XHR9IGVsc2Uge1xuMTE1MzpcdFx0XHRcdGludCBucl9mcmFncyA9IHNrYl9zaGluZm8oc2tiKS1cdTAwM2Vucl9mcmFncztcbjExNTQ6XHRcdFx0XHRzdHJ1Y3QgeHNrX2FkZHJzICp4c2tfYWRkcjtcbjExNTU6XHRcdFx0XHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbjExNTY6XHRcdFx0XHR1OCAqdmFkZHI7XG4xMTU3Olx0XG4xMTU4Olx0XHRcdFx0eHNrX2FkZHIgPSB4c2tfYWRkcnNfYWxsb2Moc2tiKTtcbjExNTk6XHRcdFx0XHRpZiAoIXhza19hZGRyKSB7XG4xMTYwOlx0XHRcdFx0XHRlcnIgPSAtRU5PTUVNO1xuMTE2MTpcdFx0XHRcdFx0Z290byBmcmVlX2VycjtcbjExNjI6XHRcdFx0XHR9XG4xMTYzOlx0XG4xMTY0Olx0XHRcdFx0eHNrX2FkZHItXHUwMDNlYWRkcnNbeHNrX2FkZHItXHUwMDNlbnVtX2Rlc2NzXSA9IGRlc2MtXHUwMDNlYWRkcjtcbjExNjU6XHRcbjExNjY6XHRcdFx0XHRpZiAodW5saWtlbHkobnJfZnJhZ3MgPT0gKE1BWF9TS0JfRlJBR1MgLSAxKSBcdTAwMjZcdTAwMjYgeHBfbWJfZGVzYyhkZXNjKSkpIHtcbjExNjc6XHRcdFx0XHRcdGVyciA9IC1FT1ZFUkZMT1c7XG4xMTY4Olx0XHRcdFx0XHRnb3RvIGZyZWVfZXJyO1xuMTE2OTpcdFx0XHRcdH1cbjExNzA6XHRcbjExNzE6XHRcdFx0XHRwYWdlID0gYWxsb2NfcGFnZSh4cy1cdTAwM2Vzay5za19hbGxvY2F0aW9uKTtcbjExNzI6XHRcdFx0XHRpZiAodW5saWtlbHkoIXBhZ2UpKSB7XG4xMTczOlx0XHRcdFx0XHRlcnIgPSAtRUFHQUlOO1xuMTE3NDpcdFx0XHRcdFx0Z290byBmcmVlX2VycjtcbjExNzU6XHRcdFx0XHR9XG4xMTc2Olx0XG4xMTc3Olx0XHRcdFx0dmFkZHIgPSBrbWFwX2xvY2FsX3BhZ2UocGFnZSk7XG4xMTc4Olx0XHRcdFx0bWVtY3B5KHZhZGRyLCBidWZmZXIsIGxlbik7XG4xMTc5Olx0XHRcdFx0a3VubWFwX2xvY2FsKHZhZGRyKTtcbjExODA6XHRcbjExODE6XHRcdFx0XHRza2JfYWRkX3J4X2ZyYWcoc2tiLCBucl9mcmFncywgcGFnZSwgMCwgbGVuLCBQQUdFX1NJWkUpO1xuMTE4MjpcdFx0XHRcdHJlZmNvdW50X2FkZChQQUdFX1NJWkUsIFx1MDAyNnhzLVx1MDAzZXNrLnNrX3dtZW1fYWxsb2MpO1xuMTE4MzpcdFx0XHR9XG4xMTg0Olx0XHR9XG4xMTg1Olx0XG4xMTg2Olx0XHRpZiAoIXhzLVx1MDAzZXNrYikge1xuMTE4NzpcdFx0XHRlcnIgPSB4c2tfc2tiX2luaXRfbWlzYyhza2IsIHhzLCBkZXNjLVx1MDAzZWFkZHIpO1xuMTE4ODpcdFx0XHRpZiAodW5saWtlbHkoZXJyKSlcbjExODk6XHRcdFx0XHRnb3RvIGZyZWVfZXJyO1xuMTE5MDpcdFx0fVxuMTE5MTpcdFx0eHNrX2luY19udW1fZGVzYyhza2IpO1xuMTE5MjpcdFxuMTE5MzpcdFx0cmV0dXJuIHNrYjtcbjExOTQ6XHRcbjExOTU6XHRmcmVlX2VycjpcbjExOTY6XHRcdGlmIChza2IgXHUwMDI2XHUwMDI2ICF4cy1cdTAwM2Vza2IpXG4xMTk3Olx0XHRcdGtmcmVlX3NrYihza2IpO1xuMTE5ODpcdFxuMTE5OTpcdFx0aWYgKGVyciA9PSAtRU9WRVJGTE9XKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA3OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYwODMKCQkJCQkJCW91dHB1dDogMjQzCgkJCQkJCQl0aG91Z2h0czogNjE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBgc2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyYCBBZGRpdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgY29yZSBvZiB0aGlzIGlzIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYHNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpYCBpbiB0aGUgQUZfWERQIGNvbnRleHQuIFNwZWNpZmljYWxseSwgYHNrYi0mZ3Q7bmV0d29ya19oZWFkZXIgPSBza2ItJmd0O2RhdGEgLSBza2ItJmd0O2hlYWQ7YC4gIFRoZSBhaW0gaGVyZSBpcyB0byBlbnN1cmUgdGhhdCB0aGUgYG5ldHdvcmtfaGVhZGVyYCBmaWVsZCB3aXRoaW4gdGhlIGBza19idWZmYCBzdHJ1Y3R1cmUgaXMgY29ycmVjdGx5IHNldCAqYmVmb3JlKiB0aGUgYHNrYmAgaXMgdHJhbnNtaXR0ZWQsIHBhcnRpY3VsYXJseSB3aGVuIHVzaW5nIGdlbmVyaWMvZHJpdmVyIHRyYW5zbWlzc2lvbiBwYXRocyBsaWtlIGBkZXZfcXVldWVfeG1pdGAuIFByZXZpb3VzbHksIEFGX1hEUCBtaWdodCYjMzk7dmUgYmVlbiBjcmVhdGluZyBgc2tiYHMgd2l0aG91dCBpbml0aWFsaXppbmcgdGhpcyBoZWFkZXIgcHJvcGVybHksIG9yIHdpdGggYSBkZWZhdWx0IHZhbHVlLiBUaGlzIG9taXNzaW9uIGNvdWxkIGxlYWQgdG8gaXNzdWVzIGluIHZhcmlvdXMgcGFydHMgb2YgdGhlIG5ldHdvcmtpbmcgc3RhY2vigJRxZGlzY3MgbGlrZSBgc2NoX25ldGVtYCBhbmQgYHNjaF9mcWAsIEJQRiBwcm9ncmFtcywgcGFja2V0IHNvY2tldHMsIGFuZCBldmVuIGRldmljZSBkcml2ZXJz4oCUYWxsIG9mIHdoaWNoIG1pZ2h0IGRlcmVmZXJlbmNlIGBza2JfbmV0d29ya19oZWFkZXIoc2tiKWAgb3IgcmVseSBvbiB0aGUgb2Zmc2V0LgoKTm93LCBsZXQmIzM5O3MgYWRkcmVzcyB0aGUgY3J1Y2lhbCBxdWVzdGlvbjogYXJlIHdlIGludHJvZHVjaW5nIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcz8gTm8uIE15IGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIGNoYW5nZSAqY29ycmVjdGx5KiBpbml0aWFsaXplcyB0aGUgYG5ldHdvcmtfaGVhZGVyYCBmaWVsZC4gSXQmIzM5O3Mgbm90IGV4cG9zaW5nIHVuaW5pdGlhbGl6ZWQgZGF0YSB0byB1c2VyIHNwYWNlLiBJdCYjMzk7cyB1c2luZyBgc29ja19hbGxvY19zZW5kX3NrYmAgb3IgYHhza19idWlsZF9za2JfemVyb2NvcHlgLCBhbmQgdGhlc2UgZnVuY3Rpb25zIGluaXRpYWxpemUgYHNrYi0mZ3Q7ZGF0YWAgYW5kIGBza2ItJmd0O2hlYWRgLiBUaGUgZnVuY3Rpb24gaXRzZWxmIGRvZXNuJiMzOTt0IGFsbG9jYXRlIG5ldyBzdHJ1Y3R1cmVzIG9yIGNoYW5nZSBib3VuZHMgY2hlY2tzIHRoYXQgd291bGQgbGVhZCB0byBwb3RlbnRpYWwgaXNzdWVzLiBJdCYjMzk7cyBhIHN0cmFpZ2h0Zm9yd2FyZCBhc3NpZ25tZW50IG9mIGEgcHJlLWV4aXN0aW5nIGZpZWxkIGJhc2VkIG9uIGV4aXN0aW5nIGluaXRpYWxpemVkIGRhdGEuCgpSZWdhcmRpbmcgS01TQU4gKEtlcm5lbCBNZW1vcnkgU2FuaXRpemVyKSwgdGhpcyBjaGFuZ2UgaXMgY2xlYXJseSAqbm90KiBzb21ldGhpbmcgdGhhdCByZXF1aXJlcyBLTVNBTi4gS01TQU4gaXMgcHJpbWFyaWx5IGNvbmNlcm5lZCB3aXRoIGRldGVjdGluZyByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSwgd2hpY2ggY291bGQgbGVhZCB0byBpbmZvcm1hdGlvbiBsZWFrcywgb3IgdW5pbml0aWFsaXplZCB2YWx1ZXMgdGhhdCBtaWdodCBiZSB1c2VkIGFzIHRoZSBiYXNpcyBvZiBhIGRlY2lzaW9uLiBUaGlzIGlzbiYjMzk7dCB0aGF0LiBUaGlzIHBhdGNoIGZpeGVzIGEgYnVnIHdoZXJlIGBuZXR3b3JrX2hlYWRlcmAgd2FzbiYjMzk7dCBwcm9wZXJseSBpbml0aWFsaXplZC4gU3RhbmRhcmQgS0FTQU4gKEtlcm5lbCBBZGRyZXNzIFNhbml0aXplcikgYW5kIHJlbGF0ZWQgc2FuaXRpemVycyBhcmUgc3VmZmljaWVudC4gSXQgZm9jdXNlcyBvbiBtZW1vcnkgc2FmZXR5IGlzc3Vlcywgd2hpY2ggYXJlIG5vdCBwcmVzZW50IGhlcmUuCgpUaGVyZWZvcmUsIHRoZSByZWFzb25pbmcgZm9yIGBOZWVkc0tNU0FOID0gZmFsc2VgIGlzIHN0cmFpZ2h0Zm9yd2FyZDogdGhpcyBwYXRjaCAqaW5pdGlhbGl6ZXMqIGEgZmllbGQsIGFuZCBkb2VzICpub3QqIGNyZWF0ZSBuZXcgcGF0aHMgd2hlcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgcmVhZCwgY29waWVkIHRvIHVzZXJzcGFjZSwgb3IgYnJhbmNoZWQgb24uIEl0JiMzOTtzIGEgcHVyZSBpbml0aWFsaXphdGlvbiwgYSBidWcgZml4IGZvciBjb3JyZWN0IGhlYWRlciB1c2FnZSB3aXRoaW4gdGhlIG5ldHdvcmsgc3RhY2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA3OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBzaW5nbGUgY2FsbCB0byBgc2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYilgIHdpdGhpbiBgeHNrX3NrYl9pbml0X21pc2MoKWAgaW4gdGhlIEFGX1hEUCBzdWJzeXN0ZW0gKGBuZXQveGRwL3hzay5jYCkuXG5cbktNU0FOIHZzLiBLQVNBTiBhcHBsaWNhYmlsaXR5IGFuYWx5c2lzOlxuLSAqKktNU0FOIFJlbGV2YW5jZSoqOiBLTVNBTiBkZXRlY3RzIHVzZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhbmQgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlciBzcGFjZS4gVGhlIHBhdGNoIHNpbXBseSBpbml0aWFsaXplcyB0aGUgYG5ldHdvcmtfaGVhZGVyYCBvZmZzZXQgb24gdGhlIG5ld2x5IGNyZWF0ZWQgYHNrX2J1ZmZgIHRvIG1hdGNoIGBza2ItXHUwMDNlZGF0YWAuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHN0YWNrL2hlYXAgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIHBhZGRpbmcgb3Igc3RydWN0IGZpZWxkcyB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgYWx0ZXIgbGVuZ3RoIGNhbGN1bGF0aW9ucyBvciBib3VuZHMgY2hlY2tzIGluIGEgd2F5IHRoYXQgd291bGQgYWxsb3cgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuXG4tICoqS0FTQU4gLyBTdGFuZGFyZCBEZWJ1Z2dlcnMqKjogU3RhbmRhcmQgS0FTQU4gZnV6emluZyBhbmQgdGhlIG5ldHdvcmtpbmcgc3RhY2smIzM5O3MgYnVpbHQtaW4gYXNzZXJ0aW9ucy9jaGVja3MgYXJlIHN1ZmZpY2llbnQgdG8gdGVzdCBza2IgY29uc3RydWN0aW9uIGFuZCBwYWNrZXQgdHJhbnNtaXNzaW9uIGluIEFGX1hEUC5cblxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBzaW5nbGUgY2FsbCB0byBgc2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYilgIHdpdGhpbiBgeHNrX3NrYl9pbml0X21pc2MoKWAgaW4gdGhlIEFGX1hEUCBzdWJzeXN0ZW0gKGBuZXQveGRwL3hzay5jYCkuXG5cbktNU0FOIHZzLiBLQVNBTiBhcHBsaWNhYmlsaXR5IGFuYWx5c2lzOlxuLSAqKktNU0FOIFJlbGV2YW5jZSoqOiBLTVNBTiBkZXRlY3RzIHVzZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhbmQgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlciBzcGFjZS4gVGhlIHBhdGNoIHNpbXBseSBpbml0aWFsaXplcyB0aGUgYG5ldHdvcmtfaGVhZGVyYCBvZmZzZXQgb24gdGhlIG5ld2x5IGNyZWF0ZWQgYHNrX2J1ZmZgIHRvIG1hdGNoIGBza2ItXHUwMDNlZGF0YWAuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHN0YWNrL2hlYXAgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIHBhZGRpbmcgb3Igc3RydWN0IGZpZWxkcyB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgYWx0ZXIgbGVuZ3RoIGNhbGN1bGF0aW9ucyBvciBib3VuZHMgY2hlY2tzIGluIGEgd2F5IHRoYXQgd291bGQgYWxsb3cgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuXG4tICoqS0FTQU4gLyBTdGFuZGFyZCBEZWJ1Z2dlcnMqKjogU3RhbmRhcmQgS0FTQU4gZnV6emluZyBhbmQgdGhlIG5ldHdvcmtpbmcgc3RhY2smIzM5O3MgYnVpbHQtaW4gYXNzZXJ0aW9ucy9jaGVja3MgYXJlIHN1ZmZpY2llbnQgdG8gdGVzdCBza2IgY29uc3RydWN0aW9uIGFuZCBwYWNrZXQgdHJhbnNtaXNzaW9uIGluIEFGX1hEUC5cblxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDNUMDc6MzY6NTQuMDE4NjY4OTk0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTc1ODIxMTcwNjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWERQX1NPQ0tFVFNcIixcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwieHNrX2Rlc3RydWN0X3NrYlwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIHNpbmdsZSBjYWxsIHRvIGBza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKWAgd2l0aGluIGB4c2tfc2tiX2luaXRfbWlzYygpYCBpbiB0aGUgQUZfWERQIHN1YnN5c3RlbSAoYG5ldC94ZHAveHNrLmNgKS5cXG5cXG5LTVNBTiB2cy4gS0FTQU4gYXBwbGljYWJpbGl0eSBhbmFseXNpczpcXG4tICoqS01TQU4gUmVsZXZhbmNlKio6IEtNU0FOIGRldGVjdHMgdXNlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuZCBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2VyIHNwYWNlLiBUaGUgcGF0Y2ggc2ltcGx5IGluaXRpYWxpemVzIHRoZSBgbmV0d29ya19oZWFkZXJgIG9mZnNldCBvbiB0aGUgbmV3bHkgY3JlYXRlZCBgc2tfYnVmZmAgdG8gbWF0Y2ggYHNrYi1cXHUwMDNlZGF0YWAuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHN0YWNrL2hlYXAgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIHBhZGRpbmcgb3Igc3RydWN0IGZpZWxkcyB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgYWx0ZXIgbGVuZ3RoIGNhbGN1bGF0aW9ucyBvciBib3VuZHMgY2hlY2tzIGluIGEgd2F5IHRoYXQgd291bGQgYWxsb3cgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuXFxuLSAqKktBU0FOIC8gU3RhbmRhcmQgRGVidWdnZXJzKio6IFN0YW5kYXJkIEtBU0FOIGZ1enppbmcgYW5kIHRoZSBuZXR3b3JraW5nIHN0YWNrJ3MgYnVpbHQtaW4gYXNzZXJ0aW9ucy9jaGVja3MgYXJlIHN1ZmZpY2llbnQgdG8gdGVzdCBza2IgY29uc3RydWN0aW9uIGFuZCBwYWNrZXQgdHJhbnNtaXNzaW9uIGluIEFGX1hEUC5cXG5cXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKCkgdG8geHNrX3NrYl9pbml0X21pc2MoKSB3aGVuIGJ1aWxkaW5nIHNrYnMgZm9yIEFGX1hEUCBzb2NrZXRzIHRyYW5zbWl0LiBUaGlzIG1vZGlmaWVzIGNvcmUgbmV0d29ya2luZyBBRl9YRFAgbG9naWMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBhbmQgaXMgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDc6MzY6NTQuMDE4NjczNjI0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzE1Mjk0MjU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYjA3ZDg1YmY5ZThlZGVjZjdlZmIzMWZhM2NmMmIwODJiNGM1MzQ0YVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IFNlcCAzIDA3OjM2OjUyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC94ZHAveHNrLmMgYi9uZXQveGRwL3hzay5jXFxuaW5kZXggMzM0NzViMTgwZWE2Zi4uMjA3N2JiNjI5OWNhOSAxMDA2NDRcXG4tLS0gYS9uZXQveGRwL3hzay5jXFxuKysrIGIvbmV0L3hkcC94c2suY1xcbkBAIC05NDcsNiArOTQ3LDggQEAgc3RhdGljIGludCB4c2tfc2tiX2luaXRfbWlzYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeGRwX3NvY2sgKnhzLFxcbiB7XFxuIFxcdGludCBlcnI7XFxuIFxcbitcXHRza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKTtcXG4rXFxuIFxcdGVyciA9IHhza19za2JfZGVzdHJ1Y3Rvcl9zZXRfYWRkcihza2IsIGFkZHIpO1xcbiBcXHRpZiAodW5saWtlbHkoZXJyKSlcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDc6MzY6NTUuMzM0NjgwMjQzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo2Mjk1OTAyMzQ2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJYRFBfU09DS0VUU1wiLFxuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ4c2tfZGVzdHJ1Y3Rfc2tiXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoKSB0byB4c2tfc2tiX2luaXRfbWlzYygpIHdoZW4gYnVpbGRpbmcgc2ticyBmb3IgQUZfWERQIHNvY2tldHMgdHJhbnNtaXQuIFRoaXMgbW9kaWZpZXMgY29yZSBuZXR3b3JraW5nIEFGX1hEUCBsb2dpYyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGFuZCBpcyB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBiMDdkODViZjllOGVkZWNmN2VmYjMxZmEzY2YyYjA4MmI0YzUzNDRhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMyAwNzozNjo1MiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC94ZHAveHNrLmMgYi9uZXQveGRwL3hzay5jXG5pbmRleCAzMzQ3NWIxODBlYTZmLi4yMDc3YmI2Mjk5Y2E5IDEwMDY0NFxuLS0tIGEvbmV0L3hkcC94c2suY1xuKysrIGIvbmV0L3hkcC94c2suY1xuQEAgLTk0Nyw2ICs5NDcsOCBAQCBzdGF0aWMgaW50IHhza19za2JfaW5pdF9taXNjKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4ZHBfc29jayAqeHMsXG4ge1xuIFx0aW50IGVycjtcbiBcbitcdHNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpO1xuK1xuIFx0ZXJyID0geHNrX3NrYl9kZXN0cnVjdG9yX3NldF9hZGRyKHNrYiwgYWRkcik7XG4gXHRpZiAodW5saWtlbHkoZXJyKSlcbiBcdFx0cmV0dXJuIGVycjtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA3OjM2OjU1LjMzNDY4NDQzM1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYwNzM4NDM2NDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIENvbW1pdCBgYjA3ZDg1YmY5ZThlZGVjZjdlZmIzMWZhM2NmMmIwODJiNGM1MzQ0YWAqKlxuXG5Pa2F5LCBzbyB0aGUgdGFzayBhdCBoYW5kIGlzIHRvIGRpc3NlY3QgY29tbWl0IGBiMDdkODViZjllOGVkZWNmN2VmYjMxZmEzY2YyYjA4MmI0YzUzNDRhYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGNoYW5nZWQgYW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhvc2UgY2hhbmdlcy4gTGV0J3Mgc3RhcnQgYnkgbG9va2luZyBkaXJlY3RseSBhdCB0aGUgZGlmZi5cblxuQWxyaWdodCwgYSBzaW1wbGUgYWRkaXRpb24uIFRoZSBkaWZmIHNob3dzIGEgc2luZ2xlIGxpbmUgYmVpbmcgaW5zZXJ0ZWQ6IGBza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKTtgIHdpdGhpbiB0aGUgYHhza19za2JfaW5pdF9taXNjKClgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgaW4gdGhlIGBuZXQveGRwL3hzay5jYCBmaWxlLiBUaGlzIGlzIGNydWNpYWw7IHJlc2V0dGluZyB0aGUgbmV0d29yayBoZWFkZXIgc3VnZ2VzdHMgc29tZXRoaW5nIHNpZ25pZmljYW50IGFib3V0IGhvdyB0aGUgU0tCJ3MgbmV0d29yayBsYXllciBpbmZvcm1hdGlvbiBpcyBoYW5kbGVkLCBvciBuZWVkcyB0byBiZSBoYW5kbGVkLCBwcmlvciB0byBmdXJ0aGVyIHByb2Nlc3NpbmcsIGxpa2VseSByZWxhdGVkIHRvIFhEUCBzb2NrZXRzLiBUaGUgcHJlc2VuY2Ugb2YgdGhlIGB1bmxpa2VseSgpYCBtYWNybyBpbiB0aGUgc3Vic2VxdWVudCBmdW5jdGlvbiBjYWxsIGltcGxpZXMgdGhlIGFkZGVkIGxpbmUgaXMgaW50ZW5kZWQgdG8gaW1wcm92ZSBwZXJmb3JtYW5jZSBpbiB0aGUgY29tbW9uIGNhc2UuXG5cbk5vdyBJIG5lZWQgdG8gdW5kZXJzdGFuZCAqd2h5KiB0aGlzIGNoYW5nZSB3YXMgbWFkZS4gSXQncyBub3QgZW5vdWdoIHRvIHNpbXBseSBzZWUgdGhlIGxpbmUgb2YgY29kZS4gSSBuZWVkIGNvbnRleHQuIEknbGwgbmVlZCB0byBkaWcgaW50byB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiBgbmV0L3hkcC94c2suY2AgYXJvdW5kIGxpbmUgOTQ3LCBhbmQgdGhlIHBvc3NpYmxlIHJlYXNvbnMgZm9yIHJlc2V0dGluZyB0aGUgbmV0d29yayBoZWFkZXIuIEknbGwgcHJvYmFibHkgbG9vayB0byByZWFkIHRoZSBmaWxlIHdpdGggYHJlYWQtZmlsZWAsIG9yIHVzZSBgZ3JlcHBlcmAgdG8gZmluZCByZWxhdGVkIGNvZGUgYW5kIGRvY3VtZW50YXRpb24uIFNwZWNpZmljYWxseSwgSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bmN0aW9uIG9mIGB4c2tfc2tiX2luaXRfbWlzYygpYCwgaG93IGl0J3MgdXNlZCBpbiB0aGUgWERQIHNvY2tldCBsaWZlY3ljbGUsIGFuZCBob3cgdGhlIG5ldHdvcmsgaGVhZGVyIGlzIHN1YnNlcXVlbnRseSB1dGlsaXplZC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCdzIGRpZmZlcmVudCBiZWZvcmUgYW5kIGFmdGVyIHRoZSBjaGFuZ2UgdG8gY29tcHJlaGVuZCB3aGF0IGlzIGJlaW5nIGZpeGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDYxLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjkyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDc6Mzc6MDEuNDA4NTMwNzk2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA1NjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC94ZHAveHNrLmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTMwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgOTMwOlxcdFxcbiA5MzE6XFx0SU5ESVJFQ1RfQ0FMTEFCTEVfU0NPUEVcXG4gOTMyOlxcdHZvaWQgeHNrX2Rlc3RydWN0X3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiA5MzM6XFx0e1xcbiA5MzQ6XFx0XFx0c3RydWN0IHhza190eF9tZXRhZGF0YV9jb21wbCAqY29tcGwgPSBcXHUwMDI2c2tiX3NoaW5mbyhza2IpLVxcdTAwM2V4c2tfbWV0YTtcXG4gOTM1OlxcdFxcbiA5MzY6XFx0XFx0aWYgKGNvbXBsLVxcdTAwM2V0eF90aW1lc3RhbXApIHtcXG4gOTM3OlxcdFxcdFxcdC8qIHN3IGNvbXBsZXRpb24gdGltZXN0YW1wLCBub3QgYSByZWFsIG9uZSAqL1xcbiA5Mzg6XFx0XFx0XFx0KmNvbXBsLVxcdTAwM2V0eF90aW1lc3RhbXAgPSBrdGltZV9nZXRfdGFpX2Zhc3RfbnMoKTtcXG4gOTM5OlxcdFxcdH1cXG4gOTQwOlxcdFxcbiA5NDE6XFx0XFx0eHNrX2NxX3N1Ym1pdF9hZGRyX2xvY2tlZCh4ZHBfc2soc2tiLVxcdTAwM2VzayktXFx1MDAzZXBvb2wsIHNrYik7XFxuIDk0MjpcXHRcXHRzb2NrX3dmcmVlKHNrYik7XFxuIDk0MzpcXHR9XFxuIDk0NDpcXHRcXG4gOTQ1OlxcdHN0YXRpYyBpbnQgeHNrX3NrYl9pbml0X21pc2Moc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHhkcF9zb2NrICp4cyxcXG4gOTQ2OlxcdFxcdFxcdFxcdCAgICAgdTY0IGFkZHIpXFxuIDk0NzpcXHR7XFxuIDk0ODpcXHRcXHRpbnQgZXJyO1xcbiA5NDk6XFx0XFxuIDk1MDpcXHRcXHRza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKTtcXG4gOTUxOlxcdFxcbiA5NTI6XFx0XFx0ZXJyID0geHNrX3NrYl9kZXN0cnVjdG9yX3NldF9hZGRyKHNrYiwgYWRkcik7XFxuIDk1MzpcXHRcXHRpZiAodW5saWtlbHkoZXJyKSlcXG4gOTU0OlxcdFxcdFxcdHJldHVybiBlcnI7XFxuIDk1NTpcXHRcXG4gOTU2OlxcdFxcdHNrYi1cXHUwMDNlZGV2ID0geHMtXFx1MDAzZWRldjtcXG4gOTU3OlxcdFxcdHNrYi1cXHUwMDNlcHJpb3JpdHkgPSBSRUFEX09OQ0UoeHMtXFx1MDAzZXNrLnNrX3ByaW9yaXR5KTtcXG4gOTU4OlxcdFxcdHNrYi1cXHUwMDNlbWFyayA9IFJFQURfT05DRSh4cy1cXHUwMDNlc2suc2tfbWFyayk7XFxuIDk1OTpcXHRcXHRza2ItXFx1MDAzZWRlc3RydWN0b3IgPSB4c2tfZGVzdHJ1Y3Rfc2tiO1xcbiA5NjA6XFx0XFx0cmV0dXJuIDA7XFxuIDk2MTpcXHR9XFxuIDk2MjpcXHRcXG4gOTYzOlxcdHN0YXRpYyB2b2lkIHhza19jb25zdW1lX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiA5NjQ6XFx0e1xcbiA5NjU6XFx0XFx0c3RydWN0IHhkcF9zb2NrICp4cyA9IHhkcF9zayhza2ItXFx1MDAzZXNrKTtcXG4gOTY2OlxcdFxcdHUzMiBudW1fZGVzY3MgPSB4c2tfZ2V0X251bV9kZXNjKHNrYik7XFxuIDk2NzpcXHRcXHRzdHJ1Y3QgeHNrX2FkZHJzICp4c2tfYWRkcjtcXG4gOTY4OlxcdFxcbiA5Njk6XFx0XFx0aWYgKHVubGlrZWx5KCF4c2tfc2tiX2Rlc3RydWN0b3JfaXNfYWRkcihza2IpKSkge1xcbiA5NzA6XFx0XFx0XFx0eHNrX2FkZHIgPSAoc3RydWN0IHhza19hZGRycyAqKXNrYl9zaGluZm8oc2tiKS1cXHUwMDNlZGVzdHJ1Y3Rvcl9hcmc7XFxuIDk3MTpcXHRcXHRcXHRrbWVtX2NhY2hlX2ZyZWUoeHNrX3R4X2dlbmVyaWNfY2FjaGUsIHhza19hZGRyKTtcXG4gOTcyOlxcdFxcdH1cXG4gOTczOlxcdFxcbiA5NzQ6XFx0XFx0c2tiLVxcdTAwM2VkZXN0cnVjdG9yID0gc29ja193ZnJlZTtcXG4gOTc1OlxcdFxcdHhza19jcV9jYW5jZWxfbG9ja2VkKHhzLVxcdTAwM2Vwb29sLCBudW1fZGVzY3MpO1xcbiA5NzY6XFx0XFx0LyogRnJlZSBza2Igd2l0aG91dCB0cmlnZ2VyaW5nIHRoZSBwZXJmIGRyb3AgdHJhY2UgKi9cXG4gOTc3OlxcdFxcdGNvbnN1bWVfc2tiKHNrYik7XFxuIDk3ODpcXHRcXHR4cy1cXHUwMDNlc2tiID0gTlVMTDtcXG4gOTc5OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDc6Mzc6MDEuNDA4NjM4MTY2WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjM4NDk0NDQ2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYHhza19za2JfaW5pdF9taXNjYCBmdW5jdGlvbiBhbmQgc2VlIHdoYXQncyBnb2luZyBvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNvbnRleHQgd2l0aGluIHRoZSBYRFAvWFNLIGZyYW1ld29yay4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdHJhY2UgaXRzIGNhbGxzLCBhbmQgdW5kZXJzdGFuZCBpdHMgYXJndW1lbnRzIC0gYW5kIGxvb2sgZm9yIHRoZSBjYWxsaW5nIHBhdHRlcm4gZnJvbSB0aGUgcGxhY2VzIHdoZXJlIGl0J3MgYmVpbmcgdXNlZC4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgSSdsbCBuZWVkIHRvIHJlYWQgbW9yZSBvZiBgbmV0L3hkcC94c2suY2AgdG8gZ2V0IHRoZSBiaWdnZXIgcGljdHVyZS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhpcyBpbml0aWFsaXphdGlvbiBpcyB1dGlsaXplZCB3aXRoaW4gdGhlIFhTSyBzdHJ1Y3R1cmUuIFVsdGltYXRlbHksIHRoZSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgbGl0dGxlIHBpZWNlIGZpdHMgaW50byB0aGUgb3ZlcmFsbCBwZXJmb3JtYW5jZSBwcm9maWxlIC0gYW5kIHdoZXJlIHBvdGVudGlhbCBib3R0bGVuZWNrcyBjb3VsZCBiZS4gSXQncyB0aW1lIHRvIGRpZyBpbiFcblxuXG4iLCJJbnB1dFRva2VucyI6MzYyOSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDc6Mzc6MDMuNzkzNTg0ODY4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MTE3MTc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInhza19za2JfaW5pdF9taXNjXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZHAvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZHAveHNrLmM9OTMyPXZvaWQgeHNrX2Rlc3RydWN0X3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L3hkcC94c2suYy05NDQtXFxubmV0L3hkcC94c2suYzo5NDU6c3RhdGljIGludCB4c2tfc2tiX2luaXRfbWlzYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeGRwX3NvY2sgKnhzLFxcbm5ldC94ZHAveHNrLmMtOTQ2LVxcdFxcdFxcdCAgICAgdTY0IGFkZHIpXFxuLS1cXG5uZXQveGRwL3hzay5jPTExMTE9c3RhdGljIHN0cnVjdCBza19idWZmICp4c2tfYnVpbGRfc2tiKHN0cnVjdCB4ZHBfc29jayAqeHMsXFxuLS1cXG5uZXQveGRwL3hzay5jLTExODYtXFx0aWYgKCF4cy1cXHUwMDNlc2tiKSB7XFxubmV0L3hkcC94c2suYzoxMTg3OlxcdFxcdGVyciA9IHhza19za2JfaW5pdF9taXNjKHNrYiwgeHMsIGRlc2MtXFx1MDAzZWFkZHIpO1xcbm5ldC94ZHAveHNrLmMtMTE4OC1cXHRcXHRpZiAodW5saWtlbHkoZXJyKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDc6Mzc6MDMuODM5NzA3MjM3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6OTA3MzM2MDk2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gWFNLIFBhY2tldCBUcmFuc21pc3Npb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyBYU0sgcGFja2V0cyBhcmUgYWN0dWFsbHkgbW92ZWQgYXJvdW5kIGFuZCBwcm9jZXNzZWQuIEknbSBmb2N1c2luZyBvbiB0aGUgYHhza19idWlsZF9za2JgIGZ1bmN0aW9uIGFuZCB0aGUgc3Vycm91bmRpbmcgY29udGV4dC4gVGltZSB0byBjcmFjayBvcGVuIGBuZXQveGRwL3hzay5jYCwgc3BlY2lmaWNhbGx5IGxpbmVzIDExMDAgdGhyb3VnaCAxMjUwLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBzcGVjaWZpY3MgSSdtIGxvb2tpbmcgZm9yLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbWVjaGFuaWNzIG9mIHRoZSBwYWNrZXQncyBqb3VybmV5OiBob3cgaXQgZ2V0cyBidWlsdCBpbnRvIGFuIFNLQiAoU29ja2V0IEJ1ZmZlciksIGFuZCB0aGVuIHdoZXJlIGl0IGdvZXMgZnJvbSB0aGVyZSB3aXRoaW4gdGhlIFhTSyBmcmFtZXdvcmsuIFRoaXMgcGFydGljdWxhciBzZWdtZW50IG9mIHRoZSBjb2RlIGxpa2VseSBkZWFscyB3aXRoIHRoZSBjcml0aWNhbCBwYXRoIG9mIHRoZSBwYWNrZXQncyBsaWZlY3ljbGUsIHNvIHVuZGVyc3RhbmRpbmcgdGhpcyBpcyBlc3NlbnRpYWwgdG8gdGhlIFhTSyBwcm9jZXNzaW5nIG1vZGVsLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIGFib3V0IHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZSB1c2VyLXNwYWNlIGFwcGxpY2F0aW9uLCB0aGUgWERQIHByb2dyYW0sIGFuZCB0aGUga2VybmVsIG5ldHdvcmsgc3RhY2sgaW4gdGhpcyBjcnVjaWFsIHN0ZXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQxMTksIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwNzozNzoxMi45MTMwNzAzMzFaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzM0NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3hkcC94c2suY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMTAwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTEwMDpcXHRcXHR9XFxuMTEwMTpcXHRcXG4xMTAyOlxcdFxcdHNrYi1cXHUwMDNlbGVuICs9IGxlbjtcXG4xMTAzOlxcdFxcdHNrYi1cXHUwMDNlZGF0YV9sZW4gKz0gbGVuO1xcbjExMDQ6XFx0XFx0c2tiLVxcdTAwM2V0cnVlc2l6ZSArPSB0cztcXG4xMTA1OlxcdFxcbjExMDY6XFx0XFx0cmVmY291bnRfYWRkKHRzLCBcXHUwMDI2eHMtXFx1MDAzZXNrLnNrX3dtZW1fYWxsb2MpO1xcbjExMDc6XFx0XFxuMTEwODpcXHRcXHRyZXR1cm4gc2tiO1xcbjExMDk6XFx0fVxcbjExMTA6XFx0XFxuMTExMTpcXHRzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhza19idWlsZF9za2Ioc3RydWN0IHhkcF9zb2NrICp4cyxcXG4xMTEyOlxcdFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IHhkcF9kZXNjICpkZXNjKVxcbjExMTM6XFx0e1xcbjExMTQ6XFx0XFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHhzLVxcdTAwM2VkZXY7XFxuMTExNTpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0geHMtXFx1MDAzZXNrYjtcXG4xMTE2OlxcdFxcdGludCBlcnI7XFxuMTExNzpcXHRcXG4xMTE4OlxcdFxcdGlmIChkZXYtXFx1MDAzZXByaXZfZmxhZ3MgXFx1MDAyNiBJRkZfVFhfU0tCX05PX0xJTkVBUikge1xcbjExMTk6XFx0XFx0XFx0c2tiID0geHNrX2J1aWxkX3NrYl96ZXJvY29weSh4cywgZGVzYyk7XFxuMTEyMDpcXHRcXHRcXHRpZiAoSVNfRVJSKHNrYikpIHtcXG4xMTIxOlxcdFxcdFxcdFxcdGVyciA9IFBUUl9FUlIoc2tiKTtcXG4xMTIyOlxcdFxcdFxcdFxcdHNrYiA9IE5VTEw7XFxuMTEyMzpcXHRcXHRcXHRcXHRnb3RvIGZyZWVfZXJyO1xcbjExMjQ6XFx0XFx0XFx0fVxcbjExMjU6XFx0XFx0fSBlbHNlIHtcXG4xMTI2OlxcdFxcdFxcdHUzMiBociwgdHIsIGxlbjtcXG4xMTI3OlxcdFxcdFxcdHZvaWQgKmJ1ZmZlcjtcXG4xMTI4OlxcdFxcbjExMjk6XFx0XFx0XFx0YnVmZmVyID0geHNrX2J1ZmZfcmF3X2dldF9kYXRhKHhzLVxcdTAwM2Vwb29sLCBkZXNjLVxcdTAwM2VhZGRyKTtcXG4xMTMwOlxcdFxcdFxcdGxlbiA9IGRlc2MtXFx1MDAzZWxlbjtcXG4xMTMxOlxcdFxcbjExMzI6XFx0XFx0XFx0aWYgKCFza2IpIHtcXG4xMTMzOlxcdFxcdFxcdFxcdGhyID0gbWF4KE5FVF9TS0JfUEFELCBMMV9DQUNIRV9BTElHTihkZXYtXFx1MDAzZW5lZWRlZF9oZWFkcm9vbSkpO1xcbjExMzQ6XFx0XFx0XFx0XFx0dHIgPSBkZXYtXFx1MDAzZW5lZWRlZF90YWlscm9vbTtcXG4xMTM1OlxcdFxcdFxcdFxcdHNrYiA9IHNvY2tfYWxsb2Nfc2VuZF9za2IoXFx1MDAyNnhzLVxcdTAwM2VzaywgaHIgKyBsZW4gKyB0ciwgMSwgXFx1MDAyNmVycik7XFxuMTEzNjpcXHRcXHRcXHRcXHRpZiAodW5saWtlbHkoIXNrYikpXFxuMTEzNzpcXHRcXHRcXHRcXHRcXHRnb3RvIGZyZWVfZXJyO1xcbjExMzg6XFx0XFxuMTEzOTpcXHRcXHRcXHRcXHRza2JfcmVzZXJ2ZShza2IsIGhyKTtcXG4xMTQwOlxcdFxcdFxcdFxcdHNrYl9wdXQoc2tiLCBsZW4pO1xcbjExNDE6XFx0XFxuMTE0MjpcXHRcXHRcXHRcXHRlcnIgPSBza2Jfc3RvcmVfYml0cyhza2IsIDAsIGJ1ZmZlciwgbGVuKTtcXG4xMTQzOlxcdFxcdFxcdFxcdGlmICh1bmxpa2VseShlcnIpKVxcbjExNDQ6XFx0XFx0XFx0XFx0XFx0Z290byBmcmVlX2VycjtcXG4xMTQ1OlxcdFxcbjExNDY6XFx0XFx0XFx0XFx0aWYgKGRlc2MtXFx1MDAzZW9wdGlvbnMgXFx1MDAyNiBYRFBfVFhfTUVUQURBVEEpIHtcXG4xMTQ3OlxcdFxcdFxcdFxcdFxcdGVyciA9IHhza19za2JfbWV0YWRhdGEoc2tiLCBidWZmZXIsIGRlc2MsXFxuMTE0ODpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgeHMtXFx1MDAzZXBvb2wsIGhyKTtcXG4xMTQ5OlxcdFxcdFxcdFxcdFxcdGlmICh1bmxpa2VseShlcnIpKVxcbjExNTA6XFx0XFx0XFx0XFx0XFx0XFx0Z290byBmcmVlX2VycjtcXG4xMTUxOlxcdFxcdFxcdFxcdH1cXG4xMTUyOlxcdFxcdFxcdH0gZWxzZSB7XFxuMTE1MzpcXHRcXHRcXHRcXHRpbnQgbnJfZnJhZ3MgPSBza2Jfc2hpbmZvKHNrYiktXFx1MDAzZW5yX2ZyYWdzO1xcbjExNTQ6XFx0XFx0XFx0XFx0c3RydWN0IHhza19hZGRycyAqeHNrX2FkZHI7XFxuMTE1NTpcXHRcXHRcXHRcXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcXG4xMTU2OlxcdFxcdFxcdFxcdHU4ICp2YWRkcjtcXG4xMTU3OlxcdFxcbjExNTg6XFx0XFx0XFx0XFx0eHNrX2FkZHIgPSB4c2tfYWRkcnNfYWxsb2Moc2tiKTtcXG4xMTU5OlxcdFxcdFxcdFxcdGlmICgheHNrX2FkZHIpIHtcXG4xMTYwOlxcdFxcdFxcdFxcdFxcdGVyciA9IC1FTk9NRU07XFxuMTE2MTpcXHRcXHRcXHRcXHRcXHRnb3RvIGZyZWVfZXJyO1xcbjExNjI6XFx0XFx0XFx0XFx0fVxcbjExNjM6XFx0XFxuMTE2NDpcXHRcXHRcXHRcXHR4c2tfYWRkci1cXHUwMDNlYWRkcnNbeHNrX2FkZHItXFx1MDAzZW51bV9kZXNjc10gPSBkZXNjLVxcdTAwM2VhZGRyO1xcbjExNjU6XFx0XFxuMTE2NjpcXHRcXHRcXHRcXHRpZiAodW5saWtlbHkobnJfZnJhZ3MgPT0gKE1BWF9TS0JfRlJBR1MgLSAxKSBcXHUwMDI2XFx1MDAyNiB4cF9tYl9kZXNjKGRlc2MpKSkge1xcbjExNjc6XFx0XFx0XFx0XFx0XFx0ZXJyID0gLUVPVkVSRkxPVztcXG4xMTY4OlxcdFxcdFxcdFxcdFxcdGdvdG8gZnJlZV9lcnI7XFxuMTE2OTpcXHRcXHRcXHRcXHR9XFxuMTE3MDpcXHRcXG4xMTcxOlxcdFxcdFxcdFxcdHBhZ2UgPSBhbGxvY19wYWdlKHhzLVxcdTAwM2Vzay5za19hbGxvY2F0aW9uKTtcXG4xMTcyOlxcdFxcdFxcdFxcdGlmICh1bmxpa2VseSghcGFnZSkpIHtcXG4xMTczOlxcdFxcdFxcdFxcdFxcdGVyciA9IC1FQUdBSU47XFxuMTE3NDpcXHRcXHRcXHRcXHRcXHRnb3RvIGZyZWVfZXJyO1xcbjExNzU6XFx0XFx0XFx0XFx0fVxcbjExNzY6XFx0XFxuMTE3NzpcXHRcXHRcXHRcXHR2YWRkciA9IGttYXBfbG9jYWxfcGFnZShwYWdlKTtcXG4xMTc4OlxcdFxcdFxcdFxcdG1lbWNweSh2YWRkciwgYnVmZmVyLCBsZW4pO1xcbjExNzk6XFx0XFx0XFx0XFx0a3VubWFwX2xvY2FsKHZhZGRyKTtcXG4xMTgwOlxcdFxcbjExODE6XFx0XFx0XFx0XFx0c2tiX2FkZF9yeF9mcmFnKHNrYiwgbnJfZnJhZ3MsIHBhZ2UsIDAsIGxlbiwgUEFHRV9TSVpFKTtcXG4xMTgyOlxcdFxcdFxcdFxcdHJlZmNvdW50X2FkZChQQUdFX1NJWkUsIFxcdTAwMjZ4cy1cXHUwMDNlc2suc2tfd21lbV9hbGxvYyk7XFxuMTE4MzpcXHRcXHRcXHR9XFxuMTE4NDpcXHRcXHR9XFxuMTE4NTpcXHRcXG4xMTg2OlxcdFxcdGlmICgheHMtXFx1MDAzZXNrYikge1xcbjExODc6XFx0XFx0XFx0ZXJyID0geHNrX3NrYl9pbml0X21pc2Moc2tiLCB4cywgZGVzYy1cXHUwMDNlYWRkcik7XFxuMTE4ODpcXHRcXHRcXHRpZiAodW5saWtlbHkoZXJyKSlcXG4xMTg5OlxcdFxcdFxcdFxcdGdvdG8gZnJlZV9lcnI7XFxuMTE5MDpcXHRcXHR9XFxuMTE5MTpcXHRcXHR4c2tfaW5jX251bV9kZXNjKHNrYik7XFxuMTE5MjpcXHRcXG4xMTkzOlxcdFxcdHJldHVybiBza2I7XFxuMTE5NDpcXHRcXG4xMTk1OlxcdGZyZWVfZXJyOlxcbjExOTY6XFx0XFx0aWYgKHNrYiBcXHUwMDI2XFx1MDAyNiAheHMtXFx1MDAzZXNrYilcXG4xMTk3OlxcdFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbjExOTg6XFx0XFxuMTE5OTpcXHRcXHRpZiAoZXJyID09IC1FT1ZFUkZMT1cpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDc6Mzc6MTIuOTEzMjA0OTIxWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzI0MTIwOTAxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEaXZpbmcgaW50byBBRl9YRFAgYW5kIHhza19idWlsZF9za2IqKlxuXG5Pa2F5LCBzbyBJIHdhbnQgdG8gZ2V0IGEgc29saWQgZ3Jhc3Agb2YgaG93IEFGX1hEUCBhbmQsIHNwZWNpZmljYWxseSwgdGhlIGB4c2tfYnVpbGRfc2tiYCBmdW5jdGlvbiwgYXJlIGZ1bmN0aW9uaW5nLiBNeSBmaXJzdCBpbnN0aW5jdCwgYXMgYWx3YXlzLCBpcyB0byB0cmFjZSBpdHMgdXNhZ2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjYWxsIGZsb3cg4oCTIHdoZXJlIGlzIHRoaXMgdGhpbmcgYWN0dWFsbHkgYmVpbmcgKnVzZWQqPyBUaGlzIG1lYW5zIGdldHRpbmcgdGhlIGNhbGwgZ3JhcGggZm9yIGB4c2tfYnVpbGRfc2tiYCwgc2VlaW5nIHRoZSBpbW1lZGlhdGUgY2FsbGVycy4gQWx0ZXJuYXRpdmVseSwgc2luY2UgaXQgaXMgdXNlZCBpbiBBRl9YRFAsIGEgYnJvYWRlciBzZWFyY2ggd291bGQgYmUgdG8gZmluZCBjYWxsZXJzIGluIHRoZSBgbmV0L3hkcC94c2suY2Agc291cmNlIGZpbGUuIFVuZGVyc3RhbmRpbmcgdGhlc2UgY29udGV4dHMgd2lsbCBwYWludCBhIGNsZWFyZXIgcGljdHVyZSBvZiBob3cgQUZfWERQIGlzIHB1dCB0b2dldGhlci4gSXQgd2lsbCBzaG93IG1lIHRoZSBkYXRhIGZsb3cgYW5kIGhvdyB0aGUgcGFydHMgbGluayB0b2dldGhlci4gVGhpcyBpcyB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIHJlYWxseSBkaWdnaW5nIGludG8gdGhlIGRldGFpbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU5MDMsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA3OjM3OjE2LjE1NDQxNTY2OVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ3NDI0NzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieHNrX2J1aWxkX3NrYlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGRwL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGRwL3hzay5jPTk5MD1zdGF0aWMgaW50IHhza19za2JfbWV0YWRhdGEoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdm9pZCAqYnVmZmVyLFxcbi0tXFxubmV0L3hkcC94c2suYy0xMDM0LVxcbm5ldC94ZHAveHNrLmM6MTAzNTpzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhza19idWlsZF9za2JfemVyb2NvcHkoc3RydWN0IHhkcF9zb2NrICp4cyxcXG5uZXQveGRwL3hzay5jLTEwMzYtXFx0XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHhkcF9kZXNjICpkZXNjKVxcbi0tXFxubmV0L3hkcC94c2suYy0xMTEwLVxcbm5ldC94ZHAveHNrLmM6MTExMTpzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhza19idWlsZF9za2Ioc3RydWN0IHhkcF9zb2NrICp4cyxcXG5uZXQveGRwL3hzay5jLTExMTItXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgeGRwX2Rlc2MgKmRlc2MpXFxuLS1cXG5uZXQveGRwL3hzay5jLTExMTgtXFx0aWYgKGRldi1cXHUwMDNlcHJpdl9mbGFncyBcXHUwMDI2IElGRl9UWF9TS0JfTk9fTElORUFSKSB7XFxubmV0L3hkcC94c2suYzoxMTE5OlxcdFxcdHNrYiA9IHhza19idWlsZF9za2JfemVyb2NvcHkoeHMsIGRlc2MpO1xcbm5ldC94ZHAveHNrLmMtMTEyMC1cXHRcXHRpZiAoSVNfRVJSKHNrYikpIHtcXG4tLVxcbm5ldC94ZHAveHNrLmM9MTIxNz1zdGF0aWMgaW50IF9feHNrX2dlbmVyaWNfeG1pdChzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQveGRwL3hzay5jLTEyNjMtXFxubmV0L3hkcC94c2suYzoxMjY0OlxcdFxcdHNrYiA9IHhza19idWlsZF9za2IoeHMsIFxcdTAwMjZkZXNjKTtcXG5uZXQveGRwL3hzay5jLTEyNjUtXFx0XFx0aWYgKElTX0VSUihza2IpKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA3OjM3OjE2LjE5OTE2NDYxOFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyOTM5NDU2MjMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgdGhlIEFGX1hEUCBHZW5lcmljIFRyYW5zbWl0IFBhdGgqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoZSBgX194c2tfZ2VuZXJpY194bWl0YCBmdW5jdGlvbi4gSXQncyBjbGVhcmx5IGEga2V5IGNvbXBvbmVudCBvZiB0aGUgQUZfWERQIChYU0sgLSBYRFAgU29ja2V0cykgZ2VuZXJpYyB0cmFuc21pdCBwYXRoLiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byB1bmRlcnN0YW5kIHdoYXQgYWN0dWFsbHkgKnRyaWdnZXJzKiB0aGlzIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdHJhY2UgdGhlIGNhbGwgcGF0aHMgdG8gZmlndXJlIG91dCBob3cgcGFja2V0cyBlbmQgdXAgYmVpbmcgdHJhbnNtaXR0ZWQgdmlhIGBfX3hza19nZW5lcmljX3htaXRgLlxuXG5JJ2xsIGJlIGxvb2tpbmcgc3BlY2lmaWNhbGx5IGF0IHRoZSBBRl9YRFAgc29ja2V0IEFQSSB1c2FnZS4gSSBleHBlY3QgaXQgaXMgcHJvYmFibHkgaW52b2x2ZWQgaW4gZWl0aGVyIHRoZSBgc2VuZG1zZ2Agc3lzY2FsbCBvciB0aGUgYHBvbGxgIHN5c3RlbSBjYWxsIHdoZW4gdXNlZCB3aXRoIFhEUCBzb2NrZXRzLiBJJ2xsIG5lZWQgdG8gc2VlIGhvdyB0aGVzZSBjYWxscyBpbnRlcmFjdCB3aXRoIHRoZSB1bmRlcmx5aW5nIFhTSyBkYXRhIHN0cnVjdHVyZXMgdG8gZmlndXJlIG91dCB3aGVuIGFuZCB3aHkgYF9feHNrX2dlbmVyaWNfeG1pdGAgZ2V0cyBpbnZva2VkLCBhbmQgb24gd2hpY2ggQUZfWERQIHNvY2tldCBpbnN0YW5jZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY2MTIsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwNzozNzoxOS4xMzg2MjMzNDFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI2MzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC94ZHAveHNrLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTIxNSxcbiAgXCJMaW5lQ291bnRcIjogOTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTIxNTpcXHR9XFxuMTIxNjpcXHRcXG4xMjE3OlxcdHN0YXRpYyBpbnQgX194c2tfZ2VuZXJpY194bWl0KHN0cnVjdCBzb2NrICpzaylcXG4xMjE4OlxcdHtcXG4xMjE5OlxcdFxcdHN0cnVjdCB4ZHBfc29jayAqeHMgPSB4ZHBfc2soc2spO1xcbjEyMjA6XFx0XFx0c3RydWN0IHhkcF9kZXNjIGRlc2M7XFxuMTIyMTpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbjEyMjI6XFx0XFx0dTMyIGNhY2hlZF9jb25zO1xcbjEyMjM6XFx0XFx0dTMyIG1heF9iYXRjaDtcXG4xMjI0OlxcdFxcdGludCBlcnIgPSAwO1xcbjEyMjU6XFx0XFxuMTIyNjpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZ4cy1cXHUwMDNlbXV0ZXgpO1xcbjEyMjc6XFx0XFx0Y2FjaGVkX2NvbnMgPSB4cy1cXHUwMDNldHgtXFx1MDAzZWNhY2hlZF9jb25zO1xcbjEyMjg6XFx0XFxuMTIyOTpcXHRcXHQvKiBTaW5jZSB3ZSBkcm9wcGVkIHRoZSBSQ1UgcmVhZCBsb2NrLCB0aGUgc29ja2V0IHN0YXRlIG1pZ2h0IGhhdmUgY2hhbmdlZC4gKi9cXG4xMjMwOlxcdFxcdGlmICh1bmxpa2VseSgheHNrX2lzX2JvdW5kKHhzKSkpIHtcXG4xMjMxOlxcdFxcdFxcdGVyciA9IC1FTlhJTztcXG4xMjMyOlxcdFxcdFxcdGdvdG8gb3V0O1xcbjEyMzM6XFx0XFx0fVxcbjEyMzQ6XFx0XFxuMTIzNTpcXHRcXHRpZiAoeHMtXFx1MDAzZXF1ZXVlX2lkIFxcdTAwM2U9IHhzLVxcdTAwM2VkZXYtXFx1MDAzZXJlYWxfbnVtX3R4X3F1ZXVlcylcXG4xMjM2OlxcdFxcdFxcdGdvdG8gb3V0O1xcbjEyMzc6XFx0XFxuMTIzODpcXHRcXHRtYXhfYmF0Y2ggPSBSRUFEX09OQ0UoeHMtXFx1MDAzZW1heF90eF9idWRnZXQpO1xcbjEyMzk6XFx0XFx0d2hpbGUgKHhza3FfY29uc19wZWVrX2Rlc2MoeHMtXFx1MDAzZXR4LCBcXHUwMDI2ZGVzYywgeHMtXFx1MDAzZXBvb2wpKSB7XFxuMTI0MDpcXHRcXHRcXHRpZiAobWF4X2JhdGNoLS0gPT0gMCkge1xcbjEyNDE6XFx0XFx0XFx0XFx0ZXJyID0gLUVBR0FJTjtcXG4xMjQyOlxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbjEyNDM6XFx0XFx0XFx0fVxcbjEyNDQ6XFx0XFxuMTI0NTpcXHRcXHRcXHQvKiBUaGlzIGlzIHRoZSBiYWNrcHJlc3N1cmUgbWVjaGFuaXNtIGZvciB0aGUgVHggcGF0aC5cXG4xMjQ2OlxcdFxcdFxcdCAqIFJlc2VydmUgc3BhY2UgaW4gdGhlIGNvbXBsZXRpb24gcXVldWUgYW5kIG9ubHkgcHJvY2VlZFxcbjEyNDc6XFx0XFx0XFx0ICogaWYgdGhlcmUgaXMgc3BhY2UgaW4gaXQuIFRoaXMgYXZvaWRzIGhhdmluZyB0byBpbXBsZW1lbnRcXG4xMjQ4OlxcdFxcdFxcdCAqIGFueSBidWZmZXJpbmcgaW4gdGhlIFR4IHBhdGguXFxuMTI0OTpcXHRcXHRcXHQgKi9cXG4xMjUwOlxcdFxcdFxcdGVyciA9IHhza19jcV9yZXNlcnZlX2xvY2tlZCh4cy1cXHUwMDNlcG9vbCk7XFxuMTI1MTpcXHRcXHRcXHRpZiAoZXJyKSB7XFxuMTI1MjpcXHRcXHRcXHRcXHRlcnIgPSAtRUFHQUlOO1xcbjEyNTM6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuMTI1NDpcXHRcXHRcXHR9XFxuMTI1NTpcXHRcXG4xMjU2OlxcdFxcdFxcdGlmICh1bmxpa2VseSh4cy1cXHUwMDNlZHJhaW5fY29udCkpIHtcXG4xMjU3OlxcdFxcdFxcdFxcdHhza19jcV9zdWJtaXRfYWRkcl9zaW5nbGVfbG9ja2VkKHhzLVxcdTAwM2Vwb29sLCBcXHUwMDI2ZGVzYyk7XFxuMTI1ODpcXHRcXHRcXHRcXHR4cy1cXHUwMDNldHgtXFx1MDAzZWludmFsaWRfZGVzY3MrKztcXG4xMjU5OlxcdFxcdFxcdFxcdHhza3FfY29uc19yZWxlYXNlKHhzLVxcdTAwM2V0eCk7XFxuMTI2MDpcXHRcXHRcXHRcXHR4cy1cXHUwMDNlZHJhaW5fY29udCA9IHhwX21iX2Rlc2MoXFx1MDAyNmRlc2MpO1xcbjEyNjE6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMTI2MjpcXHRcXHRcXHR9XFxuMTI2MzpcXHRcXG4xMjY0OlxcdFxcdFxcdHNrYiA9IHhza19idWlsZF9za2IoeHMsIFxcdTAwMjZkZXNjKTtcXG4xMjY1OlxcdFxcdFxcdGlmIChJU19FUlIoc2tiKSkge1xcbjEyNjY6XFx0XFx0XFx0XFx0ZXJyID0gUFRSX0VSUihza2IpO1xcbjEyNjc6XFx0XFx0XFx0XFx0aWYgKGVyciAhPSAtRU9WRVJGTE9XKVxcbjEyNjg6XFx0XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuMTI2OTpcXHRcXHRcXHRcXHRpZiAoeHBfbWJfZGVzYyhcXHUwMDI2ZGVzYykpXFxuMTI3MDpcXHRcXHRcXHRcXHRcXHR4cy1cXHUwMDNlZHJhaW5fY29udCA9IHRydWU7XFxuMTI3MTpcXHRcXHRcXHRcXHRlcnIgPSAwO1xcbjEyNzI6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMTI3MzpcXHRcXHRcXHR9XFxuMTI3NDpcXHRcXG4xMjc1OlxcdFxcdFxcdHhza3FfY29uc19yZWxlYXNlKHhzLVxcdTAwM2V0eCk7XFxuMTI3NjpcXHRcXG4xMjc3OlxcdFxcdFxcdGlmICh4cF9tYl9kZXNjKFxcdTAwMjZkZXNjKSkge1xcbjEyNzg6XFx0XFx0XFx0XFx0eHMtXFx1MDAzZXNrYiA9IHNrYjtcXG4xMjc5OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjEyODA6XFx0XFx0XFx0fVxcbjEyODE6XFx0XFxuMTI4MjpcXHRcXHRcXHRlcnIgPSBfX2Rldl9kaXJlY3RfeG1pdChza2IsIHhzLVxcdTAwM2VxdWV1ZV9pZCk7XFxuMTI4MzpcXHRcXHRcXHRpZiAgKGVyciA9PSBORVRERVZfVFhfQlVTWSkge1xcbjEyODQ6XFx0XFx0XFx0XFx0LyogVGVsbCB1c2VyLXNwYWNlIHRvIHJldHJ5IHRoZSBzZW5kICovXFxuMTI4NTpcXHRcXHRcXHRcXHR4c2txX2NvbnNfY2FuY2VsX24oeHMtXFx1MDAzZXR4LCB4c2tfZ2V0X251bV9kZXNjKHNrYikpO1xcbjEyODY6XFx0XFx0XFx0XFx0eHNrX2NvbnN1bWVfc2tiKHNrYik7XFxuMTI4NzpcXHRcXHRcXHRcXHRlcnIgPSAtRUFHQUlOO1xcbjEyODg6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuMTI4OTpcXHRcXHRcXHR9XFxuMTI5MDpcXHRcXG4xMjkxOlxcdFxcdFxcdC8qIElnbm9yZSBORVRfWE1JVF9DTiBhcyBwYWNrZXQgbWlnaHQgaGF2ZSBiZWVuIHNlbnQgKi9cXG4xMjkyOlxcdFxcdFxcdGlmIChlcnIgPT0gTkVUX1hNSVRfRFJPUCkge1xcbjEyOTM6XFx0XFx0XFx0XFx0LyogU0tCIGNvbXBsZXRlZCBidXQgbm90IHNlbnQgKi9cXG4xMjk0OlxcdFxcdFxcdFxcdGVyciA9IC1FQlVTWTtcXG4xMjk1OlxcdFxcdFxcdFxcdHhzLVxcdTAwM2Vza2IgPSBOVUxMO1xcbjEyOTY6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuMTI5NzpcXHRcXHRcXHR9XFxuMTI5ODpcXHRcXG4xMjk5OlxcdFxcdFxcdHhzLVxcdTAwM2Vza2IgPSBOVUxMO1xcbjEzMDA6XFx0XFx0fVxcbjEzMDE6XFx0XFxuMTMwMjpcXHRcXHRpZiAoeHNrcV9oYXNfZGVzY3MoeHMtXFx1MDAzZXR4KSkge1xcbjEzMDM6XFx0XFx0XFx0Ym9vbCBkcmFpbiA9IHhzLVxcdTAwM2Vza2IgfHwgeHMtXFx1MDAzZWRyYWluX2NvbnQgfHwgeHBfbWJfZGVzYyhcXHUwMDI2ZGVzYyk7XFxuMTMwNDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDc6Mzc6MTkuMTM4NzUxMjQxWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYyNDM5NTM5NjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIEFGX1hEUCBQYWNrZXQgVHJhbnNtaXNzaW9uIEZpeCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IHRoZSBgX194c2tfZ2VuZXJpY194bWl0YCBmdW5jdGlvbiwgd2hpY2ggaXMgdGhlIGhlYXJ0IG9mIEFGX1hEUCBwYWNrZXQgdHJhbnNtaXNzaW9uLCB1c2VzIGBfX2Rldl9kaXJlY3RfeG1pdGAgdG8gc2VuZCB0aGUgcGFja2V0cy4gVGhpcyBpcyBwcmV0dHkgc3RhbmRhcmQgZm9yIGRpcmVjdCB0cmFuc21pc3Npb24gcGF0aHMgaW4gdGhlIGtlcm5lbC4gVGhlIHByb2JsZW0sIGFzIEkgc2VlIGl0LCBzdGVtcyBmcm9tIHRoZSBpbml0aWFsaXphdGlvbiB3aXRoaW4gYHhza19za2JfaW5pdF9taXNjYC4gU3BlY2lmaWNhbGx5LCB0aGUgY3JpdGljYWwgYHNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpYCBjYWxsIHdhcyBtaXNzaW5nLlxuXG5XaXRob3V0IHRoYXQgY3J1Y2lhbCBjYWxsIHRvIHJlc2V0IHRoZSBuZXR3b3JrIGhlYWRlciwgdGhlIGBza2ItXHUwMDNlbmV0d29ya19oZWFkZXJgIHBvaW50ZXIgd2FzIGVzc2VudGlhbGx5IHVuaW5pdGlhbGl6ZWQuIFRoaXMgaXMgYSBjbGFzc2ljIHNvdXJjZSBvZiBlcnJvcnMuIFdoZW4gdGhlIGtlcm5lbCBjYWxscyBgX19kZXZfZGlyZWN0X3htaXRgLCBvciBxZGlzYywgb3IgcGFja2V0IGNsYXNzaWZpZXJzLCBvciBldmVuIGp1c3QgYGRldl9xdWV1ZV94bWl0YCDigJMgb3IsIGhlYXZlbiBmb3JiaWQsIHRoZSBkZXZpY2UgZHJpdmVyIGl0c2VsZiDigJMgZXhhbWluZXMgdGhlIG5ldHdvcmsgaGVhZGVyLCBpdCdzIHJlYWRpbmcgZ2FyYmFnZS4gVGhhdCBgc2tiLVx1MDAzZW5ldHdvcmtfaGVhZGVyYCBwb2ludGVyIGlzIGxpa2VseSBwb2ludGluZyB0byB0aGUgd3Jvbmcgb2Zmc2V0LCBwb3NzaWJseSBldmVuIG91dHNpZGUgb2YgdGhlIGFsbG9jYXRlZCBidWZmZXIuIEluIGVzc2VuY2UsIGl0J3MgYSBjcml0aWNhbCBwb2ludGVyIHRoYXQgd2FzIG1pc2NvbmZpZ3VyZWQgb3IgbWlzc2VkIGR1cmluZyBpbml0aWFsaXphdGlvbi4gYHNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpYCBpcyB0aGUgY29ycmVjdCBhcHByb2FjaCBiZWNhdXNlIGl0IGNvcnJlY3RseSBzZXRzIGBza2ItXHUwMDNlbmV0d29ya19oZWFkZXIgPSBza2ItXHUwMDNlZGF0YSAtIHNrYi1cdTAwM2VoZWFkYC5cblxuVGhpcyBjaGFuZ2UgaXMgaW4gYG5ldC94ZHAveHNrLmNgLCB3aGljaCBpcyBjb3JlIG5ldHdvcmtpbmcgY29kZSBhbmQgZGVhbHMgd2l0aCBBRl9YRFAgc29ja2V0cyAoWERQIHNvY2tldHMpLCBzbyB0aGlzIGlzIGEgY3J1Y2lhbCBhcmVhLiBTaW5jZSBBRl9YRFAgc3VwcG9ydHMgZ2VuZXJpYyBuZXQgZGV2aWNlcyBsaWtlIHZldGgsIGxvb3BiYWNrLCB0dW4vdGFwLCBkdW1teSwgdmlydGlvLCB0aGlzIGZpeCBpcyBicm9hZCBpbiBzY29wZS4gVGhpcyBpc24ndCBqdXN0IGEgaGFyZHdhcmUtc3BlY2lmaWMgZml4OyBpdCBhZmZlY3RzIGFueSBlbnZpcm9ubWVudCB1c2luZyBBRl9YRFAuXG5cbkdpdmVuIHRoZSB3aWRlc3ByZWFkIHVzZSBvZiBBRl9YRFAsIGFuZCB0aGUgZmFjdCB0aGF0IFN5emthbGxlciBoZWF2aWx5IHRlc3RzIEFGX1hEUCAoeGRwIHNvY2tldHMpLCBpdCdzIGltcG9ydGFudCB0byB2ZXJpZnkgaWYgdGhlcmUgYW55IHNwZWNpZmljIEtjb25maWcgb3B0aW9ucyB0aGF0IG1pZ2h0IGluZmx1ZW5jZSB0aGUgaW5jbHVzaW9uIG9yIGJlaGF2aW9yIG9mIGBuZXQveGRwL3hzay5jYC4gSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhlIE1ha2VmaWxlIGluIGBuZXQveGRwL2AgdG8gY29uZmlybSB0aGVyZSBhcmVuJ3QgYW55IGJ1aWxkLXRpbWUgY29uZmlndXJhdGlvbnMgdGhhdCBjb3VsZCBpbXBhY3QgdGhpcyBmaXguIFRoaXMgd2lsbCBlbnN1cmUgdGhlIGNoYW5nZSBpcyBjb21wbGV0ZSBhbmQgdW5pdmVyc2FsbHkgYXBwbGllZCwgZXNwZWNpYWxseSBnaXZlbiBTeXprYWxsZXIncyByb2xlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MjMyLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDc6Mzc6MjUuMzgyNzA3MDUxWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5NDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC94ZHAvTWFrZWZpbGVcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdG9iai0kKENPTkZJR19YRFBfU09DS0VUUykgKz0geHNrLm8geGRwX3VtZW0ubyB4c2tfcXVldWUubyB4c2ttYXAub1xcbiAgIDM6XFx0b2JqLSQoQ09ORklHX1hEUF9TT0NLRVRTKSArPSB4c2tfYnVmZl9wb29sLm9cXG4gICA0OlxcdG9iai0kKENPTkZJR19YRFBfU09DS0VUU19ESUFHKSArPSB4c2tfZGlhZy5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA3OjM3OjI1LjM4Mjc1NzcwMVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNTE5NjU2Mjk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipYRFAgQ29uZmlndXJhdGlvbjogQSBRdWljayBHbGFuY2UqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcsIFwiUmlnaHQsIGJlZm9yZSB3ZSBkaXZlIGludG8gYW55dGhpbmcgdG9vIGRlZXAsIGxldCdzIHRha2UgYSBxdWljayBsb29rIGF0IGBuZXQveGRwL0tjb25maWdgLlwiIEl0J3MgdGhlIHN0YW5kYXJkIGZpcnN0IHN0b3AsIHlvdSBrbm93PyBHZXQgdGhlIGxheSBvZiB0aGUgbGFuZCwgc2VlIHdoYXQgb3B0aW9ucyBhcmUgZXhwb3NlZCwgd2hpY2ggZmVhdHVyZXMgYXJlIGVuYWJsZWQgYnkgZGVmYXVsdCwgYW5kIGhvdyB0aGUgdmFyaW91cyBYRFAtcmVsYXRlZCBjb25maWd1cmF0aW9ucyBhcmUgc3RydWN0dXJlZCB3aXRoaW4gdGhlIGtlcm5lbCdzIGJ1aWxkIHN5c3RlbS4gTm8gbmVlZCB0byByZWludmVudCB0aGUgd2hlZWwsIEkgY2FuIHByb2JhYmx5IGdldCBhIGdlbmVyYWwgc2Vuc2Ugb2YgdGhlIGJ1aWxkIHN0cnVjdHVyZSBqdXN0IGJ5IHVuZGVyc3RhbmRpbmcgdGhlIGF2YWlsYWJsZSBjb25maWcgZmxhZ3MuIEl0J3MgYSBmdW5kYW1lbnRhbCBzdGVwIHRvIHVuZGVyc3RhbmRpbmcgdGhlIGVjb3N5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTE5MCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDc6Mzc6MjguOTAyNDE2MzA1WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyMzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC94ZHAvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0Y29uZmlnIFhEUF9TT0NLRVRTXFxuICAgMzpcXHRcXHRib29sIFxcXCJYRFAgc29ja2V0c1xcXCJcXG4gICA0OlxcdFxcdGRlcGVuZHMgb24gQlBGX1NZU0NBTExcXG4gICA1OlxcdFxcdGRlZmF1bHQgblxcbiAgIDY6XFx0XFx0aGVscFxcbiAgIDc6XFx0XFx0ICBYRFAgc29ja2V0cyBhbGxvd3MgYSBjaGFubmVsIGJldHdlZW4gWERQIHByb2dyYW1zIGFuZFxcbiAgIDg6XFx0XFx0ICB1c2Vyc3BhY2UgYXBwbGljYXRpb25zLlxcbiAgIDk6XFx0XFxuICAxMDpcXHRjb25maWcgWERQX1NPQ0tFVFNfRElBR1xcbiAgMTE6XFx0XFx0dHJpc3RhdGUgXFxcIlhEUCBzb2NrZXRzOiBtb25pdG9yaW5nIGludGVyZmFjZVxcXCJcXG4gIDEyOlxcdFxcdGRlcGVuZHMgb24gWERQX1NPQ0tFVFNcXG4gIDEzOlxcdFxcdGRlZmF1bHQgblxcbiAgMTQ6XFx0XFx0aGVscFxcbiAgMTU6XFx0XFx0ICBTdXBwb3J0IGZvciBQRl9YRFAgc29ja2V0cyBtb25pdG9yaW5nIGludGVyZmFjZSB1c2VkIGJ5IHRoZSBzcyB0b29sLlxcbiAgMTY6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBZLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwNzozNzoyOC45MDI0Njk2ODVaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzUzMzk2MjA1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyBCUEYgU3lzY2FsbCBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIHBpbnBvaW50IHdoZXJlIHRoZSBgQlBGX1NZU0NBTExgIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIGRlZmluZWQuIEdpdmVuIG15IGZhbWlsaWFyaXR5IHdpdGggdGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0sIHRoZSBtb3N0IGxvZ2ljYWwgcGxhY2VzIHRvIHN0YXJ0IGxvb2tpbmcgYXJlIHRoZSBwcmltYXJ5IGNvbmZpZ3VyYXRpb24gZmlsZXMuIEknbGwgYmVnaW4gYnkgY2hlY2tpbmcgYGluaXQvS2NvbmZpZ2Ag4oCTIGl0IG9mdGVuIGhvbGRzIGZ1bmRhbWVudGFsIHNldHRpbmdzIHJlbGF0ZWQgdG8ga2VybmVsIGZlYXR1cmVzLiBJZiBpdCdzIG5vdCB0aGVyZSwgdGhlIG5leHQgbG9naWNhbCBsb2NhdGlvbiB3b3VsZCBiZSB0aGUgY29yZSBCUEYgaW1wbGVtZW50YXRpb24gZGlyZWN0b3J5IGl0c2VsZiwgc3BlY2lmaWNhbGx5IGBrZXJuZWwvYnBmL0tjb25maWdgLiBUaGlzIGlzIHdoZXJlIEkgd291bGQgZXhwZWN0IGFueXRoaW5nIHJlbGF0ZWQgdG8gQlBGJ3Mgc3lzdGVtIGNhbGwgaW50ZXJmYWNlIHRvIHJlc2lkZS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IGl0IGlzIGltcGxlbWVudGVkLiBJJ20gZ29pbmcgdG8gbG9vayBpbiB0aG9zZSB0d28gcGxhY2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NTk0LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwNzozNzozMi40MzY0MzM5ODhaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0Njc1NDgwLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlBGX1NZU0NBTExcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5pdC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA3OjM3OjMyLjQ4MTEyMDcyOFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMTkzMzU2NDE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgQlBGIFN5c2NhbGwgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiBmaW5kaW5nIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbiByZWxhdGVkIHRvIEJQRiBzeXNjYWxscy4gSSdtIHRoaW5raW5nLCBcIldoZXJlIGlzIGBjb25maWcgQlBGX1NZU0NBTExgIGRlZmluZWQgd2l0aGluIHRoZSBrZXJuZWwgYnVpbGQgc3lzdGVtP1wiIFRoaXMgcHJvYmFibHkgbWVhbnMgSSBuZWVkIHRvIHN0YXJ0IHBva2luZyBhcm91bmQgaW4gdGhlIEtjb25maWcgZmlsZXMsIHNwZWNpZmljYWxseSB0aGUgb25lcyB0aGF0IHJlbGF0ZSB0byB0cmFjaW5nLCBuZXR3b3JraW5nLCBvciBzZWN1cml0eSDigJMgdGhvc2UgYXJlIHRoZSBtb3N0IGxpa2VseSBhcmVhcy4gSSdsbCBsaWtlbHkgdXNlIGBncmVwYCBvciBhIHNpbWlsYXIgdG9vbCB0byBwaW5wb2ludCB0aGUgZXhhY3QgbG9jYXRpb24uIEknbGwgYmUgbG9va2luZyBmb3IgY29udGV4dHVhbCBjbHVlcyBhcm91bmQgaXQgdG9vLCB0byB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMgYW5kIHdoYXQgZmVhdHVyZXMgaXQgZW5hYmxlcy4gSXMgdGhpcyBwYXJ0IG9mIGEgbGFyZ2VyIEJQRiBzdWJzeXN0ZW0gY29uZmlndXJhdGlvbiBvciBhIHN0YW5kYWxvbmU/IFRoYXQncyB3aGF0IEkgbmVlZCB0byBkZXRlcm1pbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk4MzIsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwNzozNzozNS42NzQ0NzkzNjZaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2Mzg3MDQzMjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJQRl9TWVNDQUxMXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvS2NvbmZpZz0yNT1tZW51IFxcXCJCUEYgc3Vic3lzdGVtXFxcIlxcbmtlcm5lbC9icGYvS2NvbmZpZy0yNi1cXG5rZXJuZWwvYnBmL0tjb25maWc6Mjc6Y29uZmlnIEJQRl9TWVNDQUxMXFxua2VybmVsL2JwZi9LY29uZmlnLTI4LVxcdGJvb2wgXFxcIkVuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDc6Mzc6MzcuMzEzMTg5MjVaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjk4NTQwNjMxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqS2VybmVsIEJQRiBLY29uZmlnIEluc3BlY3Rpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGluLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZSBga2VybmVsL2JwZi9LY29uZmlnYCBmaWxlLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byBzY29wZSBvdXQgYXJvdW5kIGxpbmUgMjcuIEl0J3MgYSBnZW5lcmFsIGFwcHJvYWNoIHdoZW4gc3RhcnRpbmcgYW4gaW52ZXN0aWdhdGlvbiwgZXNwZWNpYWxseSBnaXZlbiBteSBrbm93bGVkZ2Ugb2YgdGhlIGNvZGViYXNlLCB0aGF0IEtjb25maWcgZmlsZXMgYXJlIGVzc2VudGlhbCBpbiB0aGUgc3lzdGVtIGNvbmZpZ3VyYXRpb24uIFRoZSBzcGVjaWZpYyBsaW5lIG51bWJlciBpcyBqdXN0IGEgc3RhcnRpbmcgcG9pbnQ7IGl0J3MgbGlrZWx5IGEgZm9jYWwgYXJlYSwgZWl0aGVyIGEgbWFpbiBzZWN0aW9uLCBvciBzb21ldGhpbmcgdGhhdCBicmFuY2hlcyBvdXQgaW50byBtdWx0aXBsZSByZWxldmFudCBvcHRpb25zLiBJIHdhbnQgdG8gcXVpY2tseSBldmFsdWF0ZSBhbnkgaW1tZWRpYXRlIGNsdWVzIHRoYXQgZ2l2ZSBhbiBpbmRpY2F0aW9uIG9mIGhvdyBCUEYgaXMgZW5hYmxlZC9kaXNhYmxlZCBvciBjb25maWd1cmVkLiBUaGlzIHByZWxpbWluYXJ5IHNjYW4gd2lsbCBwcm92aWRlIGEgcm9hZG1hcCBmb3IgZGVlcGVyIGFuYWx5c2lzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDEyNCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA3OjM3OjQwLjI5ODU5ODUxMloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjExMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMjUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMjU6XFx0bWVudSBcXFwiQlBGIHN1YnN5c3RlbVxcXCJcXG4gIDI2OlxcdFxcbiAgMjc6XFx0Y29uZmlnIEJQRl9TWVNDQUxMXFxuICAyODpcXHRcXHRib29sIFxcXCJFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcXFwiXFxuICAyOTpcXHRcXHRzZWxlY3QgQlBGXFxuICAzMDpcXHRcXHRzZWxlY3QgSVJRX1dPUktcXG4gIDMxOlxcdFxcdHNlbGVjdCBORUVEX1RBU0tTX1JDVVxcbiAgMzI6XFx0XFx0c2VsZWN0IFRBU0tTX1RSQUNFX1JDVVxcbiAgMzM6XFx0XFx0c2VsZWN0IEJJTkFSWV9QUklOVEZcXG4gIDM0OlxcdFxcdHNlbGVjdCBORVRfU09DS19NU0cgaWYgTkVUXFxuICAzNTpcXHRcXHRzZWxlY3QgTkVUX1hHUkVTUyBpZiBORVRcXG4gIDM2OlxcdFxcdHNlbGVjdCBQQUdFX1BPT0wgaWYgTkVUXFxuICAzNzpcXHRcXHRkZWZhdWx0IG5cXG4gIDM4OlxcdFxcdGhlbHBcXG4gIDM5OlxcdFxcdCAgRW5hYmxlIHRoZSBicGYoKSBzeXN0ZW0gY2FsbCB0aGF0IGFsbG93cyB0byBtYW5pcHVsYXRlIEJQRiBwcm9ncmFtc1xcbiAgNDA6XFx0XFx0ICBhbmQgbWFwcyB2aWEgZmlsZSBkZXNjcmlwdG9ycy5cXG4gIDQxOlxcdFxcbiAgNDI6XFx0Y29uZmlnIEJQRl9KSVRcXG4gIDQzOlxcdFxcdGJvb2wgXFxcIkVuYWJsZSBCUEYgSnVzdCBJbiBUaW1lIGNvbXBpbGVyXFxcIlxcbiAgNDQ6XFx0XFx0ZGVwZW5kcyBvbiBCUEZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDc6Mzc6NDAuMjk4NjYxNzUyWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI5NTM1NjY5OTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFhEUCBTb2NrZXRzIGFuZCBCUEYgSW50ZWdyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBpbnRvIGhvdyBgQ09ORklHX1hEUF9TT0NLRVRTYCB3b3JrcywgYW5kIGZpcnN0IHRoaW5ncyBmaXJzdCwgaXQgcmVsaWVzIG9uIGBDT05GSUdfQlBGX1NZU0NBTExgLiBUaGF0J3MgdGhlIGJhc2VsaW5lLCB0aGUgZm91bmRhdGlvbi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueSBvdGhlciBkZXBlbmRlbmNpZXMgb3Igc2lnbmlmaWNhbnQgY29uZmlnIG9wdGlvbnMgaW52b2x2ZWQgaW4gdGhpcy4gSSdtIG9wZXJhdGluZyB1bmRlciB0aGUgYXNzdW1wdGlvbiB0aGF0IGBYRFBfU09DS0VUU2AgYW5kIGBCUEZfU1lTQ0FMTGAgYXJlIHRoZSBtYWpvciBwbGF5ZXJzIGhlcmUuXG5cbk5vdywgbGV0J3MgZGl2ZSBkZWVwZXIgYW5kIGZpbmQgc29tZSBzcGVjaWZpYyBmdW5jdGlvbnMgaW4gYG5ldC94ZHAveHNrLmNgIHRvIHVzZSBhcyByZWZlcmVuY2UgcG9pbnRzLiBJJ20gdGhpbmtpbmcgSSBjYW4gdXNlIHRoZXNlIGFzIGdvb2QgYEZvY3VzU3ltYm9sc2AgdG8gY2VudGVyIG15IHVuZGVyc3RhbmRpbmcgYXJvdW5kLiBPbmNlIEkndmUgZm91bmQgc29tZSBnb29kIGVudHJ5cG9pbnRzLCBJJ2xsIGdvIHRocm91Z2ggYG5ldC94ZHAveHNrLmNgLCBzcGVjaWZpY2FsbHkgbG9va2luZyBhcm91bmQgdGhlIHNvY2tldCBjYWxsYmFja3MgYW5kIHByb3RvY29sIG9wZXJhdGlvbnMuIFRoYXQncyB1c3VhbGx5IHdoZXJlIHRoZSBjb3JlIGludGVyYWN0aW9uIGFuZCBkYXRhIGZsb3cgd2lsbCBiZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA1OTIsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwNzozNzo0My4yNTIyMzA2NzVaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MjIwNjc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInByb3RvX29wc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGRwL3hzay5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZHAveHNrLmM9MjE1NT1zdGF0aWMgc3RydWN0IHByb3RvIHhza19wcm90byA9IHtcXG4tLVxcbm5ldC94ZHAveHNrLmMtMjE2MC1cXG5uZXQveGRwL3hzay5jOjIxNjE6c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgeHNrX3Byb3RvX29wcyA9IHtcXG5uZXQveGRwL3hzay5jLTIxNjItXFx0LmZhbWlseVxcdFxcdD0gUEZfWERQLFxcbi0tXFxubmV0L3hkcC94c2suYz0yMTkyPXN0YXRpYyBpbnQgeHNrX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90b2NvbCxcXG4tLVxcbm5ldC94ZHAveHNrLmMtMjIxMS1cXG5uZXQveGRwL3hzay5jOjIyMTI6XFx0c29jay1cXHUwMDNlb3BzID0gXFx1MDAyNnhza19wcm90b19vcHM7XFxubmV0L3hkcC94c2suYy0yMjEzLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwNzozNzo0My4yOTc0NTUyNDRaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjc0MDExNTA2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8geHNrX3Byb3RvX29wcyoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBYRFAgc29ja2V0IHByb3RvY29sIG9wZXJhdGlvbnMuIFNwZWNpZmljYWxseSwgSSBzaG91bGQgcHJvYmFibHkgcmUtZXhhbWluZSB0aGUgYHhza19wcm90b19vcHNgIHN0cnVjdHVyZS4gSSByZW1lbWJlciBpdCByZXNpZGluZyB3aXRoaW4gYG5ldC94ZHAveHNrLmNgLCBzbyB0aGF0J3Mgd2hlcmUgSSdsbCBiZWdpbi4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBbICpwYXVzZSBhbmQgdGhpbmsgZm9yIGEgbW9tZW50LCBiYXNlZCBvbiBteSBjdXJyZW50IGFyZWEgb2YgZm9jdXMqIF0uLi4gd2VsbCwgSSdtIHRoaW5raW5nIGFib3V0IFhEUCB6ZXJvLWNvcHkgYW5kIGhvdyBpdCdzIGltcGxlbWVudGVkIGZvciB0aGUgdmFyaW91cyBtZW1vcnkgbWFuYWdlbWVudCBhbmQgYnVmZmVyaW5nIGludGVyYWN0aW9ucy4gSSB3aWxsIHNlZSB0aGUgc3RydWN0dXJlIGRlZmluaXRpb24gYW5kIGVuc3VyZSBJJ20gdXAgdG8gc3BlZWQgb24gYWxsIG9mIGl0cyBtZW1iZXJzLCBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSByZWxhdGVkIGNhbGxiYWNrcyBvciBkYXRhIHN0cnVjdHVyZXMuIFRoaXMgaXMgYSBjcnVjaWFsIGFyZWEgZm9yIHBlcmZvcm1hbmNlIHR1bmluZyBhbmQgb3ZlcmFsbCBYRFAgc29ja2V0IGRlc2lnbiwgc28gaXQncyB3b3J0aCBhIGRlZXAgZGl2ZS4gTGV0J3MgZ2V0IGNyYWNraW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTE2MCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA3OjM3OjQ2LjAzNzU3MzExWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMTU0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQveGRwL3hzay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIxNjAsXG4gIFwiTGluZUNvdW50XCI6IDM1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIxNjA6XFx0XFxuMjE2MTpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyB4c2tfcHJvdG9fb3BzID0ge1xcbjIxNjI6XFx0XFx0LmZhbWlseVxcdFxcdD0gUEZfWERQLFxcbjIxNjM6XFx0XFx0Lm93bmVyXFx0XFx0PSBUSElTX01PRFVMRSxcXG4yMTY0OlxcdFxcdC5yZWxlYXNlXFx0PSB4c2tfcmVsZWFzZSxcXG4yMTY1OlxcdFxcdC5iaW5kXFx0XFx0PSB4c2tfYmluZCxcXG4yMTY2OlxcdFxcdC5jb25uZWN0XFx0PSBzb2NrX25vX2Nvbm5lY3QsXFxuMjE2NzpcXHRcXHQuc29ja2V0cGFpclxcdD0gc29ja19ub19zb2NrZXRwYWlyLFxcbjIxNjg6XFx0XFx0LmFjY2VwdFxcdFxcdD0gc29ja19ub19hY2NlcHQsXFxuMjE2OTpcXHRcXHQuZ2V0bmFtZVxcdD0gc29ja19ub19nZXRuYW1lLFxcbjIxNzA6XFx0XFx0LnBvbGxcXHRcXHQ9IHhza19wb2xsLFxcbjIxNzE6XFx0XFx0LmlvY3RsXFx0XFx0PSBzb2NrX25vX2lvY3RsLFxcbjIxNzI6XFx0XFx0Lmxpc3RlblxcdFxcdD0gc29ja19ub19saXN0ZW4sXFxuMjE3MzpcXHRcXHQuc2h1dGRvd25cXHQ9IHNvY2tfbm9fc2h1dGRvd24sXFxuMjE3NDpcXHRcXHQuc2V0c29ja29wdFxcdD0geHNrX3NldHNvY2tvcHQsXFxuMjE3NTpcXHRcXHQuZ2V0c29ja29wdF9pdGVyID0geHNrX2dldHNvY2tvcHQsXFxuMjE3NjpcXHRcXHQuc2VuZG1zZ1xcdD0geHNrX3NlbmRtc2csXFxuMjE3NzpcXHRcXHQucmVjdm1zZ1xcdD0geHNrX3JlY3Ztc2csXFxuMjE3ODpcXHRcXHQubW1hcFxcdFxcdD0geHNrX21tYXAsXFxuMjE3OTpcXHR9O1xcbjIxODA6XFx0XFxuMjE4MTpcXHRzdGF0aWMgdm9pZCB4c2tfZGVzdHJ1Y3Qoc3RydWN0IHNvY2sgKnNrKVxcbjIxODI6XFx0e1xcbjIxODM6XFx0XFx0c3RydWN0IHhkcF9zb2NrICp4cyA9IHhkcF9zayhzayk7XFxuMjE4NDpcXHRcXG4yMTg1OlxcdFxcdGlmICghc29ja19mbGFnKHNrLCBTT0NLX0RFQUQpKVxcbjIxODY6XFx0XFx0XFx0cmV0dXJuO1xcbjIxODc6XFx0XFxuMjE4ODpcXHRcXHRpZiAoIXhwX3B1dF9wb29sKHhzLVxcdTAwM2Vwb29sKSlcXG4yMTg5OlxcdFxcdFxcdHhkcF9wdXRfdW1lbSh4cy1cXHUwMDNldW1lbSwgIXhzLVxcdTAwM2Vwb29sKTtcXG4yMTkwOlxcdH1cXG4yMTkxOlxcdFxcbjIxOTI6XFx0c3RhdGljIGludCB4c2tfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2tldCAqc29jaywgaW50IHByb3RvY29sLFxcbjIxOTM6XFx0XFx0XFx0ICAgICAgaW50IGtlcm4pXFxuMjE5NDpcXHR7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA3OjM3OjQ2LjAzNzY4NTk1WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxMzI4ODQ3OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqWERQIFNvY2tldCBJbnRlcmZhY2UgRGVlcCBEaXZlKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoZSBYRFAgc29ja2V0IGltcGxlbWVudGF0aW9uIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBhbmQgbWF5YmUgc3BvdCBzb21lIG51YW5jZXMuIE15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIGNvcmUgZnVuY3Rpb25zOiBgeHNrX3NlbmRtc2dgLCBgeHNrX3BvbGxgLCBgeHNrX2JpbmRgLCBgeHNrX21tYXBgLCBgeHNrX2dlbmVyaWNfeG1pdGAgKG9yIHBlcmhhcHMgdGhlIGludGVybmFsIGBfX3hza19nZW5lcmljX3htaXRgKSwgYHhza19idWlsZF9za2JgLCBhbmQgYHhza19kZXN0cnVjdF9za2JgLiBJIHdhbnQgYSBzb2xpZCBncmFzcCBvZiBob3cgdGhlc2UgcGllY2VzIGZpdCB0b2dldGhlci4gSSB0aGluayBzdGFydGluZyB3aXRoIGB4c2tfc2VuZG1zZ2AgYW5kIGB4c2tfcG9sbGAgaXMgdGhlIHJpZ2h0IG1vdmUgZm9yIG5vdy4gVGltZSB0byBoZWFkIG92ZXIgdG8gYG5ldC94ZHAveHNrLmNgIGFuZCBkaWcgaW50byB0aGUgY29kZS4gTGV0J3Mgc2VlIHdoYXQgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgcmV2ZWFsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTk4MiwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA3OjM3OjQ4LjE3MDU3MzEzNloiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDI4NTU0MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW50IHhza19zZW5kbXNnXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZHAvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZHAveHNrLmM9MTM2Nj1zdGF0aWMgaW50IF9feHNrX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSwgc2l6ZV90IHRvdGFsX2xlbilcXG4tLVxcbm5ldC94ZHAveHNrLmMtMTM5Ni1cXG5uZXQveGRwL3hzay5jOjEzOTc6c3RhdGljIGludCB4c2tfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLCBzaXplX3QgdG90YWxfbGVuKVxcbm5ldC94ZHAveHNrLmMtMTM5OC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA3OjM3OjQ4LjIxMzQzMzkwNVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNTMwNDE1Mzg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRpdmluZyBpbnRvIHRoZSBYU0sgVHJhbnNtaXNzaW9uIFBhdGgqKlxuXG5Pa2F5LCBzbyBJJ20gdHJhY2luZyB0aGUgZGF0YSB0cmFuc21pc3Npb24gcGF0aCBmb3IgWFNLLCBhbmQgaXQgbG9va3MgbGlrZSBgeHNrX3NlbmRtc2dgIGtpY2tzIHRoaW5ncyBvZmYuIEZyb20gdGhlcmUsIGl0IGRpdmVzIGludG8gYF9feHNrX3NlbmRtc2dgLiBOb3csIHRoaXMgaXMgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZywgYXMgYF9feHNrX3NlbmRtc2dgIGVpdGhlciBnb2VzIGRvd24gdGhlIGBfX3hza19nZW5lcmljX3htaXRgIHJvdXRlLCBvciBpdCB0cmlnZ2VycyB0aGUgZHJpdmVyLXNwZWNpZmljIHRyYW5zbWl0IHBhdGguXG5cblRvIGdldCBhIGJldHRlciBncmlwIG9uIHRoZSBsb2dpYywgSSBuZWVkIHRvIGxvb2sgY2xvc2VyLiBJJ2xsIG5lZWQgdG8ganVtcCBpbnRvIGBuZXQveGRwL3hzay5jYCBhbmQgZm9jdXMgb24gbGluZXMgMTM2MCB0aHJvdWdoIDE0MjAuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGRldGFpbHMgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hpY2ggcGF0aCBpcyB0YWtlbiwgdW5kZXIgd2hhdCBjb25kaXRpb25zLCBhbmQgd2hhdCB0aGUga2V5IGRpZmZlcmVuY2VzIGFyZSBiZXR3ZWVuIHRoZSBnZW5lcmljIGFuZCBkcml2ZXItc3BlY2lmaWMgYXBwcm9hY2hlcy4gR290dGEgZ2V0IHRoZSBsb3ctbGV2ZWwgZGV0YWlscyFcblxuXG4iLCJJbnB1dFRva2VucyI6MTI0MzAsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwNzozNzo1MC43NDM4NTI3NjVaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY2OTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC94ZHAveHNrLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTM2MCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTM2MDpcXHRcXHRpZiAodW5saWtlbHkoISh4cy1cXHUwMDNlZGV2LVxcdTAwM2VmbGFncyBcXHUwMDI2IElGRl9VUCkpKVxcbjEzNjE6XFx0XFx0XFx0cmV0dXJuIC1FTkVURE9XTjtcXG4xMzYyOlxcdFxcbjEzNjM6XFx0XFx0cmV0dXJuIDA7XFxuMTM2NDpcXHR9XFxuMTM2NTpcXHRcXG4xMzY2OlxcdHN0YXRpYyBpbnQgX194c2tfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLCBzaXplX3QgdG90YWxfbGVuKVxcbjEzNjc6XFx0e1xcbjEzNjg6XFx0XFx0Ym9vbCBuZWVkX3dhaXQgPSAhKG0tXFx1MDAzZW1zZ19mbGFncyBcXHUwMDI2IE1TR19ET05UV0FJVCk7XFxuMTM2OTpcXHRcXHRzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLVxcdTAwM2VzaztcXG4xMzcwOlxcdFxcdHN0cnVjdCB4ZHBfc29jayAqeHMgPSB4ZHBfc2soc2spO1xcbjEzNzE6XFx0XFx0c3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2w7XFxuMTM3MjpcXHRcXHRpbnQgZXJyO1xcbjEzNzM6XFx0XFxuMTM3NDpcXHRcXHRlcnIgPSB4c2tfY2hlY2tfY29tbW9uKHhzKTtcXG4xMzc1OlxcdFxcdGlmIChlcnIpXFxuMTM3NjpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjEzNzc6XFx0XFx0aWYgKHVubGlrZWx5KG5lZWRfd2FpdCkpXFxuMTM3ODpcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuMTM3OTpcXHRcXHRpZiAodW5saWtlbHkoIXhzLVxcdTAwM2V0eCkpXFxuMTM4MDpcXHRcXHRcXHRyZXR1cm4gLUVOT0JVRlM7XFxuMTM4MTpcXHRcXG4xMzgyOlxcdFxcdGlmIChza19jYW5fYnVzeV9sb29wKHNrKSlcXG4xMzgzOlxcdFxcdFxcdHNrX2J1c3lfbG9vcChzaywgMSk7IC8qIG9ubHkgc3VwcG9ydCBub24tYmxvY2tpbmcgc29ja2V0cyAqL1xcbjEzODQ6XFx0XFxuMTM4NTpcXHRcXHRpZiAoeHMtXFx1MDAzZXpjIFxcdTAwMjZcXHUwMDI2IHhza19ub193YWtldXAoc2spKVxcbjEzODY6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMTM4NzpcXHRcXG4xMzg4OlxcdFxcdHBvb2wgPSB4cy1cXHUwMDNlcG9vbDtcXG4xMzg5OlxcdFxcdGlmIChwb29sLVxcdTAwM2VjYWNoZWRfbmVlZF93YWtldXAgXFx1MDAyNiBYRFBfV0FLRVVQX1RYKSB7XFxuMTM5MDpcXHRcXHRcXHRpZiAoeHMtXFx1MDAzZXpjKVxcbjEzOTE6XFx0XFx0XFx0XFx0cmV0dXJuIHhza193YWtldXAoeHMsIFhEUF9XQUtFVVBfVFgpO1xcbjEzOTI6XFx0XFx0XFx0cmV0dXJuIHhza19nZW5lcmljX3htaXQoc2spO1xcbjEzOTM6XFx0XFx0fVxcbjEzOTQ6XFx0XFx0cmV0dXJuIDA7XFxuMTM5NTpcXHR9XFxuMTM5NjpcXHRcXG4xMzk3OlxcdHN0YXRpYyBpbnQgeHNrX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSwgc2l6ZV90IHRvdGFsX2xlbilcXG4xMzk4OlxcdHtcXG4xMzk5OlxcdFxcdGludCByZXQ7XFxuMTQwMDpcXHRcXG4xNDAxOlxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4xNDAyOlxcdFxcdHJldCA9IF9feHNrX3NlbmRtc2coc29jaywgbSwgdG90YWxfbGVuKTtcXG4xNDAzOlxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbjE0MDQ6XFx0XFxuMTQwNTpcXHRcXHRyZXR1cm4gcmV0O1xcbjE0MDY6XFx0fVxcbjE0MDc6XFx0XFxuMTQwODpcXHRzdGF0aWMgaW50IF9feHNrX3JlY3Ztc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSwgc2l6ZV90IGxlbiwgaW50IGZsYWdzKVxcbjE0MDk6XFx0e1xcbjE0MTA6XFx0XFx0Ym9vbCBuZWVkX3dhaXQgPSAhKGZsYWdzIFxcdTAwMjYgTVNHX0RPTlRXQUlUKTtcXG4xNDExOlxcdFxcdHN0cnVjdCBzb2NrICpzayA9IHNvY2stXFx1MDAzZXNrO1xcbjE0MTI6XFx0XFx0c3RydWN0IHhkcF9zb2NrICp4cyA9IHhkcF9zayhzayk7XFxuMTQxMzpcXHRcXHRpbnQgZXJyO1xcbjE0MTQ6XFx0XFxuMTQxNTpcXHRcXHRlcnIgPSB4c2tfY2hlY2tfY29tbW9uKHhzKTtcXG4xNDE2OlxcdFxcdGlmIChlcnIpXFxuMTQxNzpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjE0MTg6XFx0XFx0aWYgKHVubGlrZWx5KCF4cy1cXHUwMDNlcngpKVxcbjE0MTk6XFx0XFx0XFx0cmV0dXJuIC1FTk9CVUZTO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwNzozNzo1MC43NDQwMjA5ODVaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQ0Nzg2NDA1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgdGhlIFhTSyBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGUgY29yZSBvZiB0aGlzIFhEUCBzb2NrZXQgaW1wbGVtZW50YXRpb24uIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB0aGUgYHhzay5jYCBhbmQgYHhzay5oYCBmaWxlcyDigJMgc3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdHJhbnNtaXQgYW5kIFNLQiBkZXN0cnVjdGlvbiBhcmUgaGFuZGxlZC4gSSdsbCBuZWVkIHRvIHNjcnV0aW5pemUgZnVuY3Rpb25zIGxpa2UgYHhza19nZW5lcmljX3htaXRgIGFuZCBgeHNrX2Rlc3RydWN0X3NrYmAgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBkYXRhIGZsb3cgYW5kIG1lbW9yeSBtYW5hZ2VtZW50LiBTaW5jZSBJJ20gYWltaW5nIGZvciBhIGNvbXByZWhlbnNpdmUgb3ZlcnZpZXcsIEkgc2hvdWxkIGFsc28gc2VhcmNoIGZvciBhbnkgb3RoZXIgbm9uLXN0YXRpYyBmdW5jdGlvbnMgd2l0aGluIHRob3NlIGZpbGVzLCBzaW5jZSB0aGVzZSBsaWtlbHkgZm9ybSB0aGUgY3JpdGljYWwgcHVibGljIGludGVyZmFjZSBvZiB0aGUgeHNrIG1vZHVsZS4gRnVydGhlcm1vcmUsIEknbGwgbmVlZCB0byBleHBhbmQgbXkgc2VhcmNoLiBJdCdzIHRpbWUgdG8gY2hlY2sgYG5ldC94ZHAveHNrLmNgIGZvciBhbnkgY3JpdGljYWwgZnVuY3Rpb25hbGl0eSB0aGF0IEkgbWF5IGhhdmUgbWlzc2VkIGluIG15IGluaXRpYWwgc2VhcmNoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzYwNSwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDc6Mzc6NTMuMTkxODg3OTg2WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDE2MjcxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeW2EtekEtWl9dLip4c2tfXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZHAveHNrLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hkcC94c2suYy00My1cXG5uZXQveGRwL3hzay5jOjQ0OnN0cnVjdCB4c2tfYWRkcnMge1xcbm5ldC94ZHAveHNrLmMtNDUtXFx0dTMyIG51bV9kZXNjcztcXG4tLVxcbm5ldC94ZHAveHNrLmMtNDgtXFxubmV0L3hkcC94c2suYzo0OTpzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKnhza190eF9nZW5lcmljX2NhY2hlO1xcbm5ldC94ZHAveHNrLmMtNTAtXFxubmV0L3hkcC94c2suYzo1MTp2b2lkIHhza19zZXRfcnhfbmVlZF93YWtldXAoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wpXFxubmV0L3hkcC94c2suYy01Mi17XFxuLS1cXG5uZXQveGRwL3hzay5jLTU4LX1cXG5uZXQveGRwL3hzay5jOjU5OkVYUE9SVF9TWU1CT0woeHNrX3NldF9yeF9uZWVkX3dha2V1cCk7XFxubmV0L3hkcC94c2suYy02MC1cXG5uZXQveGRwL3hzay5jOjYxOnZvaWQgeHNrX3NldF90eF9uZWVkX3dha2V1cChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbClcXG5uZXQveGRwL3hzay5jLTYyLXtcXG4tLVxcbm5ldC94ZHAveHNrLmMtNzUtfVxcbm5ldC94ZHAveHNrLmM6NzY6RVhQT1JUX1NZTUJPTCh4c2tfc2V0X3R4X25lZWRfd2FrZXVwKTtcXG5uZXQveGRwL3hzay5jLTc3LVxcbm5ldC94ZHAveHNrLmM6Nzg6dm9pZCB4c2tfY2xlYXJfcnhfbmVlZF93YWtldXAoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wpXFxubmV0L3hkcC94c2suYy03OS17XFxuLS1cXG5uZXQveGRwL3hzay5jLTg1LX1cXG5uZXQveGRwL3hzay5jOjg2OkVYUE9SVF9TWU1CT0woeHNrX2NsZWFyX3J4X25lZWRfd2FrZXVwKTtcXG5uZXQveGRwL3hzay5jLTg3LVxcbm5ldC94ZHAveHNrLmM6ODg6dm9pZCB4c2tfY2xlYXJfdHhfbmVlZF93YWtldXAoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wpXFxubmV0L3hkcC94c2suYy04OS17XFxuLS1cXG5uZXQveGRwL3hzay5jLTEwMi19XFxubmV0L3hkcC94c2suYzoxMDM6RVhQT1JUX1NZTUJPTCh4c2tfY2xlYXJfdHhfbmVlZF93YWtldXApO1xcbm5ldC94ZHAveHNrLmMtMTA0LVxcbm5ldC94ZHAveHNrLmM6MTA1OmJvb2wgeHNrX3VzZXNfbmVlZF93YWtldXAoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wpXFxubmV0L3hkcC94c2suYy0xMDYte1xcbi0tXFxubmV0L3hkcC94c2suYy0xMDgtfVxcbm5ldC94ZHAveHNrLmM6MTA5OkVYUE9SVF9TWU1CT0woeHNrX3VzZXNfbmVlZF93YWtldXApO1xcbm5ldC94ZHAveHNrLmMtMTEwLVxcbm5ldC94ZHAveHNrLmM6MTExOnN0cnVjdCB4c2tfYnVmZl9wb29sICp4c2tfZ2V0X3Bvb2xfZnJvbV9xaWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG5uZXQveGRwL3hzay5jLTExMi1cXHRcXHRcXHRcXHRcXHQgICAgdTE2IHF1ZXVlX2lkKVxcbi0tXFxubmV0L3hkcC94c2suYy0xMjAtfVxcbm5ldC94ZHAveHNrLmM6MTIxOkVYUE9SVF9TWU1CT0woeHNrX2dldF9wb29sX2Zyb21fcWlkKTtcXG5uZXQveGRwL3hzay5jLTEyMi1cXG5uZXQveGRwL3hzay5jOjEyMzpzdGF0aWMgdm9pZCBfX3hza19jbGVhcl9wb29sX2F0X3FpZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MTYgcXVldWVfaWQpXFxubmV0L3hkcC94c2suYy0xMjQte1xcbi0tXFxubmV0L3hkcC94c2suYy0xMzAtXFxubmV0L3hkcC94c2suYzoxMzE6dm9pZCB4c2tfY2xlYXJfcG9vbF9hdF9xaWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTE2IHF1ZXVlX2lkKVxcbm5ldC94ZHAveHNrLmMtMTMyLXtcXG4tLVxcbm5ldC94ZHAveHNrLmMtMTQ2LVxcbm5ldC94ZHAveHNrLmM6MTQ3OnN0YXRpYyBpbnQgX194c2tfcmVnX3Bvb2xfYXRfcWlkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxubmV0L3hkcC94c2suYy0xNDgtXFx0XFx0XFx0XFx0IHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCB1MTYgcXVldWVfaWQpXFxuLS1cXG5uZXQveGRwL3hzay5jLTE2NC0gKi9cXG5uZXQveGRwL3hzay5jOjE2NTppbnQgeHNrX3JlZ19wb29sX2F0X3FpZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCxcXG5uZXQveGRwL3hzay5jLTE2Ni1cXHRcXHRcXHR1MTYgcXVldWVfaWQpXFxuLS1cXG5uZXQveGRwL3hzay5jLTE5MC1cXG5uZXQveGRwL3hzay5jOjE5MTpzdGF0aWMgaW50IF9feHNrX3Jjdl96YyhzdHJ1Y3QgeGRwX3NvY2sgKnhzLCBzdHJ1Y3QgeGRwX2J1ZmZfeHNrICp4c2tiLCB1MzIgbGVuLFxcbm5ldC94ZHAveHNrLmMtMTkyLVxcdFxcdFxcdHUzMiBmbGFncylcXG4tLVxcbm5ldC94ZHAveHNrLmMtMjA3LVxcbm5ldC94ZHAveHNrLmM6MjA4OnN0YXRpYyB2b2lkIF9feHNrX3Jjdl96Y19zYWZlKHN0cnVjdCB4ZHBfc29jayAqeHMsIHN0cnVjdCB4ZHBfYnVmZl94c2sgKnhza2IsXFxubmV0L3hkcC94c2suYy0yMDktXFx0XFx0XFx0ICAgICAgdTMyIGxlbiwgdTMyIGZsYWdzKVxcbi0tXFxubmV0L3hkcC94c2suYy0yMTgtXFxubmV0L3hkcC94c2suYzoyMTk6c3RhdGljIGludCB4c2tfcmN2X3pjKHN0cnVjdCB4ZHBfc29jayAqeHMsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwLCB1MzIgbGVuKVxcbm5ldC94ZHAveHNrLmMtMjIwLXtcXG4tLVxcbm5ldC94ZHAveHNrLmMtMjU5LVxcbm5ldC94ZHAveHNrLmM6MjYwOnN0YXRpYyB2b2lkICp4c2tfY29weV94ZHBfc3RhcnQoc3RydWN0IHhkcF9idWZmICpmcm9tKVxcbm5ldC94ZHAveHNrLmMtMjYxLXtcXG4tLVxcbm5ldC94ZHAveHNrLmMtMjY3LVxcbm5ldC94ZHAveHNrLmM6MjY4OnN0YXRpYyB1MzIgeHNrX2NvcHlfeGRwKHZvaWQgKnRvLCB2b2lkICoqZnJvbSwgdTMyIHRvX2xlbixcXG5uZXQveGRwL3hzay5jLTI2OS1cXHRcXHRcXHR1MzIgKmZyb21fbGVuLCBza2JfZnJhZ190ICoqZnJhZywgdTMyIHJlbSlcXG4tLVxcbm5ldC94ZHAveHNrLmMtMjk1LVxcbm5ldC94ZHAveHNrLmM6Mjk2OnN0YXRpYyBpbnQgX194c2tfcmN2KHN0cnVjdCB4ZHBfc29jayAqeHMsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwLCB1MzIgbGVuKVxcbm5ldC94ZHAveHNrLmMtMjk3LXtcXG4tLVxcbm5ldC94ZHAveHNrLmMtMzg4LVxcbm5ldC94ZHAveHNrLmM6Mzg5OnN0YXRpYyBib29sIHhza190eF93cml0ZWFibGUoc3RydWN0IHhkcF9zb2NrICp4cylcXG5uZXQveGRwL3hzay5jLTM5MC17XFxuLS1cXG5uZXQveGRwL3hzay5jLTM5Ni1cXG5uZXQveGRwL3hzay5jOjM5NzpzdGF0aWMgdm9pZCBfX3hza190eF9yZWxlYXNlKHN0cnVjdCB4ZHBfc29jayAqeHMpXFxubmV0L3hkcC94c2suYy0zOTgte1xcbi0tXFxubmV0L3hkcC94c2suYy00MDMtXFxubmV0L3hkcC94c2suYzo0MDQ6c3RhdGljIGJvb2wgeHNrX2lzX2JvdW5kKHN0cnVjdCB4ZHBfc29jayAqeHMpXFxubmV0L3hkcC94c2suYy00MDUte1xcbi0tXFxubmV0L3hkcC94c2suYy00MTMtXFxubmV0L3hkcC94c2suYzo0MTQ6c3RhdGljIGJvb2wgeHNrX2Rldl9xdWV1ZV92YWxpZChjb25zdCBzdHJ1Y3QgeGRwX3NvY2sgKnhzLFxcbm5ldC94ZHAveHNrLmMtNDE1LVxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCB4ZHBfcnhxX2luZm8gKmluZm8pXFxuLS1cXG5uZXQveGRwL3hzay5jLTQzOC1cXG5uZXQveGRwL3hzay5jOjQzOTpzdGF0aWMgaW50IHhza19yY3ZfY2hlY2soc3RydWN0IHhkcF9zb2NrICp4cywgc3RydWN0IHhkcF9idWZmICp4ZHAsIHUzMiBsZW4pXFxubmV0L3hkcC94c2suYy00NDAte1xcbi0tXFxubmV0L3hkcC94c2suYy00NTMtXFxubmV0L3hkcC94c2suYzo0NTQ6c3RhdGljIHZvaWQgeHNrX2ZsdXNoKHN0cnVjdCB4ZHBfc29jayAqeHMpXFxubmV0L3hkcC94c2suYy00NTUte1xcbi0tXFxubmV0L3hkcC94c2suYy00NjAtXFxubmV0L3hkcC94c2suYzo0NjE6aW50IHhza19nZW5lcmljX3JjdihzdHJ1Y3QgeGRwX3NvY2sgKnhzLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcClcXG5uZXQveGRwL3hzay5jLTQ2Mi17XFxuLS1cXG5uZXQveGRwL3hzay5jLTQ3Ni1cXG5uZXQveGRwL3hzay5jOjQ3NzpzdGF0aWMgaW50IHhza19yY3Yoc3RydWN0IHhkcF9zb2NrICp4cywgc3RydWN0IHhkcF9idWZmICp4ZHApXFxubmV0L3hkcC94c2suYy00Nzgte1xcbi0tXFxubmV0L3hkcC94c2suYy00OTYtXFxubmV0L3hkcC94c2suYzo0OTc6aW50IF9feHNrX21hcF9yZWRpcmVjdChzdHJ1Y3QgeGRwX3NvY2sgKnhzLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcClcXG5uZXQveGRwL3hzay5jLTQ5OC17XFxuLS1cXG5uZXQveGRwL3hzay5jLTUxMy1cXG5uZXQveGRwL3hzay5jOjUxNDp2b2lkIF9feHNrX21hcF9mbHVzaChzdHJ1Y3QgbGlzdF9oZWFkICpmbHVzaF9saXN0KVxcbm5ldC94ZHAveHNrLmMtNTE1LXtcXG4tLVxcbm5ldC94ZHAveHNrLmMtNTIzLVxcbm5ldC94ZHAveHNrLmM6NTI0OnZvaWQgeHNrX3R4X2NvbXBsZXRlZChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwgdTMyIG5iX2VudHJpZXMpXFxubmV0L3hkcC94c2suYy01MjUte1xcbi0tXFxubmV0L3hkcC94c2suYy01NDQtfVxcbm5ldC94ZHAveHNrLmM6NTQ1OkVYUE9SVF9TWU1CT0woeHNrX3R4X2NvbXBsZXRlZCk7XFxubmV0L3hkcC94c2suYy01NDYtXFxubmV0L3hkcC94c2suYzo1NDc6dm9pZCB4c2tfdHhfcmVsZWFzZShzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbClcXG5uZXQveGRwL3hzay5jLTU0OC17XFxuLS1cXG5uZXQveGRwL3hzay5jLTU1NS19XFxubmV0L3hkcC94c2suYzo1NTY6RVhQT1JUX1NZTUJPTCh4c2tfdHhfcmVsZWFzZSk7XFxubmV0L3hkcC94c2suYy01NTctXFxubmV0L3hkcC94c2suYzo1NTg6Ym9vbCB4c2tfdHhfcGVla19kZXNjKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCBzdHJ1Y3QgeGRwX2Rlc2MgKmRlc2MpXFxubmV0L3hkcC94c2suYy01NTkte1xcbi0tXFxubmV0L3hkcC94c2suYy02MDMtfVxcbm5ldC94ZHAveHNrLmM6NjA0OkVYUE9SVF9TWU1CT0woeHNrX3R4X3BlZWtfZGVzYyk7XFxubmV0L3hkcC94c2suYy02MDUtXFxubmV0L3hkcC94c2suYzo2MDY6c3RhdGljIHUzMiB4c2tfdHhfcGVla19yZWxlYXNlX2ZhbGxiYWNrKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCB1MzIgbWF4X2VudHJpZXMpXFxubmV0L3hkcC94c2suYy02MDcte1xcbi0tXFxubmV0L3hkcC94c2suYy02MTctXFxubmV0L3hkcC94c2suYzo2MTg6c3RhdGljIHZvaWQgeHNrX3R4X2NvbW1pdF9iYXRjaChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCxcXG5uZXQveGRwL3hzay5jLTYxOS1cXHRcXHRcXHRcXHRzdHJ1Y3QgeHNrX3R4X2JhdGNoICpiYXRjaClcXG4tLVxcbm5ldC94ZHAveHNrLmMtNjQ2LVxcbm5ldC94ZHAveHNrLmM6NjQ3OnN0YXRpYyBzdHJ1Y3QgeHNrX3R4X2JhdGNoXFxubmV0L3hkcC94c2suYzo2NDg6X194c2tfdHhfcGVla19yZWxlYXNlX2Rlc2NfYmF0Y2goc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHN0cnVjdCB4ZHBfc29jayAqeHMsXFxubmV0L3hkcC94c2suYy02NDktXFx0XFx0XFx0XFx0IHN0cnVjdCB4ZHBfZGVzYyAqZGVzY3MsIHUzMiBtYXhfZGVzY3MpXFxuLS1cXG5uZXQveGRwL3hzay5jLTY2Ny1cXG5uZXQveGRwL3hzay5jOjY2ODpzdGF0aWMgc3RydWN0IHhza190eF9iYXRjaFxcbm5ldC94ZHAveHNrLmM6NjY5Onhza190eF9wZWVrX3JlbGVhc2Vfc2hhcmVkX2Rlc2NfYmF0Y2goc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHUzMiBtYXhfZGVzY3MpXFxubmV0L3hkcC94c2suYy02NzAte1xcbi0tXFxubmV0L3hkcC94c2suYy03NDMtXFxubmV0L3hkcC94c2suYzo3NDQ6dTMyIHhza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwgdTMyIG5iX3BrdHMpXFxubmV0L3hkcC94c2suYy03NDUte1xcbi0tXFxubmV0L3hkcC94c2suYy03OTAtfVxcbm5ldC94ZHAveHNrLmM6NzkxOkVYUE9SVF9TWU1CT0woeHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoKTtcXG5uZXQveGRwL3hzay5jLTc5Mi1cXG5uZXQveGRwL3hzay5jOjc5MzpzdGF0aWMgaW50IHhza193YWtldXAoc3RydWN0IHhkcF9zb2NrICp4cywgdTggZmxhZ3MpXFxubmV0L3hkcC94c2suYy03OTQte1xcbi0tXFxubmV0L3hkcC94c2suYy03OTktXFxubmV0L3hkcC94c2suYzo4MDA6c3RhdGljIGludCB4c2tfY3FfcmVzZXJ2ZV9sb2NrZWQoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wpXFxubmV0L3hkcC94c2suYy04MDEte1xcbi0tXFxubmV0L3hkcC94c2suYy04MTAtXFxubmV0L3hkcC94c2suYzo4MTE6c3RhdGljIGJvb2wgeHNrX3NrYl9kZXN0cnVjdG9yX2lzX2FkZHIoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQveGRwL3hzay5jLTgxMi17XFxuLS1cXG5uZXQveGRwL3hzay5jLTgxNS1cXG5uZXQveGRwL3hzay5jOjgxNjpzdGF0aWMgdTY0IHhza19za2JfZGVzdHJ1Y3Rvcl9nZXRfYWRkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC94ZHAveHNrLmMtODE3LXtcXG4tLVxcbm5ldC94ZHAveHNrLmMtODIwLVxcbm5ldC94ZHAveHNrLmM6ODIxOnN0YXRpYyBzdHJ1Y3QgeHNrX2FkZHJzICpfX3hza19hZGRyc19hbGxvYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1NjQgYWRkcilcXG5uZXQveGRwL3hzay5jLTgyMi17XFxuLS1cXG5uZXQveGRwL3hzay5jLTgzMy1cXG5uZXQveGRwL3hzay5jOjgzNDpzdGF0aWMgc3RydWN0IHhza19hZGRycyAqeHNrX2FkZHJzX2FsbG9jKHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L3hkcC94c2suYy04MzUte1xcbi0tXFxubmV0L3hkcC94c2suYy04NDYtXFxubmV0L3hkcC94c2suYzo4NDc6c3RhdGljIGludCB4c2tfc2tiX2Rlc3RydWN0b3Jfc2V0X2FkZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTY0IGFkZHIpXFxubmV0L3hkcC94c2suYy04NDgte1xcbi0tXFxubmV0L3hkcC94c2suYy04NTgtXFxubmV0L3hkcC94c2suYzo4NTk6c3RhdGljIHZvaWQgeHNrX2luY19udW1fZGVzYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC94ZHAveHNrLmMtODYwLXtcXG4tLVxcbm5ldC94ZHAveHNrLmMtODY4LVxcbm5ldC94ZHAveHNrLmM6ODY5OnN0YXRpYyB1MzIgeHNrX2dldF9udW1fZGVzYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC94ZHAveHNrLmMtODcwLXtcXG4tLVxcbm5ldC94ZHAveHNrLmMtODgwLVxcbm5ldC94ZHAveHNrLmM6ODgxOnN0YXRpYyB2b2lkIHhza19jcV9zdWJtaXRfYWRkcl9sb2NrZWQoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsXFxubmV0L3hkcC94c2suYy04ODItXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC94ZHAveHNrLmMtOTEwLVxcbm5ldC94ZHAveHNrLmM6OTExOnN0YXRpYyB2b2lkIHhza19jcV9zdWJtaXRfYWRkcl9zaW5nbGVfbG9ja2VkKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLFxcbm5ldC94ZHAveHNrLmMtOTEyLVxcdFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IHhkcF9kZXNjICpkZXNjKVxcbi0tXFxubmV0L3hkcC94c2suYy05MjMtXFxubmV0L3hkcC94c2suYzo5MjQ6c3RhdGljIHZvaWQgeHNrX2NxX2NhbmNlbF9sb2NrZWQoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHUzMiBuKVxcbm5ldC94ZHAveHNrLmMtOTI1LXtcXG4tLVxcbm5ldC94ZHAveHNrLmM9OTMxPUlORElSRUNUX0NBTExBQkxFX1NDT1BFXFxubmV0L3hkcC94c2suYzo5MzI6dm9pZCB4c2tfZGVzdHJ1Y3Rfc2tiKHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L3hkcC94c2suYy05MzMte1xcbi0tXFxubmV0L3hkcC94c2suYy05NDQtXFxubmV0L3hkcC94c2suYzo5NDU6c3RhdGljIGludCB4c2tfc2tiX2luaXRfbWlzYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeGRwX3NvY2sgKnhzLFxcbm5ldC94ZHAveHNrLmMtOTQ2LVxcdFxcdFxcdCAgICAgdTY0IGFkZHIpXFxuLS1cXG5uZXQveGRwL3hzay5jLTk2Mi1cXG5uZXQveGRwL3hzay5jOjk2MzpzdGF0aWMgdm9pZCB4c2tfY29uc3VtZV9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQveGRwL3hzay5jLTk2NC17XFxuLS1cXG5uZXQveGRwL3hzay5jLTk4MC1cXG5uZXQveGRwL3hzay5jOjk4MTpzdGF0aWMgdm9pZCB4c2tfZHJvcF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQveGRwL3hzay5jLTk4Mi17XFxuLS1cXG5uZXQveGRwL3hzay5jLTk4OS1cXG5uZXQveGRwL3hzay5jOjk5MDpzdGF0aWMgaW50IHhza19za2JfbWV0YWRhdGEoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdm9pZCAqYnVmZmVyLFxcbm5ldC94ZHAveHNrLmMtOTkxLVxcdFxcdFxcdCAgICBzdHJ1Y3QgeGRwX2Rlc2MgKmRlc2MsIHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLFxcbi0tXFxubmV0L3hkcC94c2suYy0xMDM0LVxcbm5ldC94ZHAveHNrLmM6MTAzNTpzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhza19idWlsZF9za2JfemVyb2NvcHkoc3RydWN0IHhkcF9zb2NrICp4cyxcXG5uZXQveGRwL3hzay5jLTEwMzYtXFx0XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHhkcF9kZXNjICpkZXNjKVxcbi0tXFxubmV0L3hkcC94c2suYy0xMTEwLVxcbm5ldC94ZHAveHNrLmM6MTExMTpzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhza19idWlsZF9za2Ioc3RydWN0IHhkcF9zb2NrICp4cyxcXG5uZXQveGRwL3hzay5jLTExMTItXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgeGRwX2Rlc2MgKmRlc2MpXFxuLS1cXG5uZXQveGRwL3hzay5jLTEyMTYtXFxubmV0L3hkcC94c2suYzoxMjE3OnN0YXRpYyBpbnQgX194c2tfZ2VuZXJpY194bWl0KHN0cnVjdCBzb2NrICpzaylcXG5uZXQveGRwL3hzay5jLTEyMTgte1xcbi0tXFxubmV0L3hkcC94c2suYy0xMzMxLVxcbm5ldC94ZHAveHNrLmM6MTMzMjpzdGF0aWMgaW50IHhza19nZW5lcmljX3htaXQoc3RydWN0IHNvY2sgKnNrKVxcbm5ldC94ZHAveHNrLmMtMTMzMy17XFxuLS1cXG5uZXQveGRwL3hzay5jLTEzNDQtXFxubmV0L3hkcC94c2suYzoxMzQ1OnN0YXRpYyBib29sIHhza19ub193YWtldXAoc3RydWN0IHNvY2sgKnNrKVxcbm5ldC94ZHAveHNrLmMtMTM0Ni17XFxuLS1cXG5uZXQveGRwL3hzay5jLTEzNTUtXFxubmV0L3hkcC94c2suYzoxMzU2OnN0YXRpYyBpbnQgeHNrX2NoZWNrX2NvbW1vbihzdHJ1Y3QgeGRwX3NvY2sgKnhzKVxcbm5ldC94ZHAveHNrLmMtMTM1Ny17XFxuLS1cXG5uZXQveGRwL3hzay5jLTEzNjUtXFxubmV0L3hkcC94c2suYzoxMzY2OnN0YXRpYyBpbnQgX194c2tfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLCBzaXplX3QgdG90YWxfbGVuKVxcbm5ldC94ZHAveHNrLmMtMTM2Ny17XFxuLS1cXG5uZXQveGRwL3hzay5jLTEzOTYtXFxubmV0L3hkcC94c2suYzoxMzk3OnN0YXRpYyBpbnQgeHNrX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSwgc2l6ZV90IHRvdGFsX2xlbilcXG5uZXQveGRwL3hzay5jLTEzOTgte1xcbi0tXFxubmV0L3hkcC94c2suYy0xNDA3LVxcbm5ldC94ZHAveHNrLmM6MTQwODpzdGF0aWMgaW50IF9feHNrX3JlY3Ztc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSwgc2l6ZV90IGxlbiwgaW50IGZsYWdzKVxcbm5ldC94ZHAveHNrLmMtMTQwOS17XFxuLS1cXG5uZXQveGRwL3hzay5jLTE0MzMtXFxubmV0L3hkcC94c2suYzoxNDM0OnN0YXRpYyBpbnQgeHNrX3JlY3Ztc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSwgc2l6ZV90IGxlbiwgaW50IGZsYWdzKVxcbm5ldC94ZHAveHNrLmMtMTQzNS17XFxuLS1cXG5uZXQveGRwL3hzay5jLTE0NDQtXFxubmV0L3hkcC94c2suYzoxNDQ1OnN0YXRpYyBfX3BvbGxfdCB4c2tfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHNvY2tldCAqc29jayxcXG5uZXQveGRwL3hzay5jLTE0NDYtXFx0XFx0XFx0ICAgICBzdHJ1Y3QgcG9sbF90YWJsZV9zdHJ1Y3QgKndhaXQpXFxuLS1cXG5uZXQveGRwL3hzay5jLTE0NzctXFxubmV0L3hkcC94c2suYzoxNDc4OnN0YXRpYyBpbnQgeHNrX2luaXRfcXVldWUodTMyIGVudHJpZXMsIHN0cnVjdCB4c2tfcXVldWUgKipxdWV1ZSxcXG5uZXQveGRwL3hzay5jLTE0NzktXFx0XFx0XFx0ICBib29sIHVtZW1fcXVldWUpXFxuLS1cXG5uZXQveGRwL3hzay5jLTE0OTUtXFxubmV0L3hkcC94c2suYzoxNDk2OnN0YXRpYyB2b2lkIHhza191bmJpbmRfZGV2KHN0cnVjdCB4ZHBfc29jayAqeHMpXFxubmV0L3hkcC94c2suYy0xNDk3LXtcXG4tLVxcbm5ldC94ZHAveHNrLmMtMTUwOS1cXG5uZXQveGRwL3hzay5jOjE1MTA6c3RhdGljIHN0cnVjdCB4c2tfbWFwICp4c2tfZ2V0X21hcF9saXN0X2VudHJ5KHN0cnVjdCB4ZHBfc29jayAqeHMsXFxubmV0L3hkcC94c2suYy0xNTExLVxcdFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCB4ZHBfc29jayBfX3JjdSAqKiptYXBfZW50cnkpXFxuLS1cXG5uZXQveGRwL3hzay5jLTE1MjktXFxubmV0L3hkcC94c2suYzoxNTMwOnN0YXRpYyB2b2lkIHhza19kZWxldGVfZnJvbV9tYXBzKHN0cnVjdCB4ZHBfc29jayAqeHMpXFxubmV0L3hkcC94c2suYy0xNTMxLXtcXG4tLVxcbm5ldC94ZHAveHNrLmMtMTU1NS1cXG5uZXQveGRwL3hzay5jOjE1NTY6c3RhdGljIGludCB4c2tfcmVsZWFzZShzdHJ1Y3Qgc29ja2V0ICpzb2NrKVxcbm5ldC94ZHAveHNrLmMtMTU1Ny17XFxuLS1cXG5uZXQveGRwL3hzay5jLTE1OTMtXFxubmV0L3hkcC94c2suYzoxNTk0OnN0YXRpYyBzdHJ1Y3Qgc29ja2V0ICp4c2tfbG9va3VwX3hza19mcm9tX2ZkKGludCBmZClcXG5uZXQveGRwL3hzay5jLTE1OTUte1xcbi0tXFxubmV0L3hkcC94c2suYy0xNjEwLVxcbm5ldC94ZHAveHNrLmM6MTYxMTpzdGF0aWMgYm9vbCB4c2tfdmFsaWRhdGVfcXVldWVzKHN0cnVjdCB4ZHBfc29jayAqeHMpXFxubmV0L3hkcC94c2suYy0xNjEyLXtcXG4tLVxcbm5ldC94ZHAveHNrLmMtMTYxNS1cXG5uZXQveGRwL3hzay5jOjE2MTY6c3RhdGljIGludCB4c2tfYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqYWRkciwgaW50IGFkZHJfbGVuKVxcbm5ldC94ZHAveHNrLmMtMTYxNy17XFxuLS1cXG5uZXQveGRwL3hzay5jPTE4MDc9c3RydWN0IHhkcF91bWVtX3JlZ192MSB7XFxuLS1cXG5uZXQveGRwL3hzay5jLTE4MTMtXFxubmV0L3hkcC94c2suYzoxODE0OnN0YXRpYyBpbnQgeHNrX3NldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcXG5uZXQveGRwL3hzay5jLTE4MTUtXFx0XFx0XFx0ICBzb2NrcHRyX3Qgb3B0dmFsLCB1bnNpZ25lZCBpbnQgb3B0bGVuKVxcbi0tXFxubmV0L3hkcC94c2suYy0xOTM2LVxcbm5ldC94ZHAveHNrLmM6MTkzNzpzdGF0aWMgdm9pZCB4c2tfZW50ZXJfcnh0eF9vZmZzZXRzKHN0cnVjdCB4ZHBfcmluZ19vZmZzZXRfdjEgKnJpbmcpXFxubmV0L3hkcC94c2suYy0xOTM4LXtcXG4tLVxcbm5ldC94ZHAveHNrLmMtMTk0My1cXG5uZXQveGRwL3hzay5jOjE5NDQ6c3RhdGljIHZvaWQgeHNrX2VudGVyX3VtZW1fb2Zmc2V0cyhzdHJ1Y3QgeGRwX3Jpbmdfb2Zmc2V0X3YxICpyaW5nKVxcbm5ldC94ZHAveHNrLmMtMTk0NS17XFxuLS1cXG5uZXQveGRwL3hzay5jPTE5NTE9c3RydWN0IHhkcF9zdGF0aXN0aWNzX3YxIHtcXG4tLVxcbm5ldC94ZHAveHNrLmMtMTk1Ni1cXG5uZXQveGRwL3hzay5jOjE5NTc6c3RhdGljIGludCB4c2tfZ2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxcbm5ldC94ZHAveHNrLmMtMTk1OC1cXHRcXHRcXHQgIHNvY2tvcHRfdCAqb3B0KVxcbi0tXFxubmV0L3hkcC94c2suYy0yMDg0LVxcbm5ldC94ZHAveHNrLmM6MjA4NTpzdGF0aWMgaW50IHhza19tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxcbm5ldC94ZHAveHNrLmMtMjA4Ni1cXHRcXHQgICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuLS1cXG5uZXQveGRwL3hzay5jLTIxMjItXFxubmV0L3hkcC94c2suYzoyMTIzOnN0YXRpYyBpbnQgeHNrX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcyxcXG5uZXQveGRwL3hzay5jLTIxMjQtXFx0XFx0XFx0dW5zaWduZWQgbG9uZyBtc2csIHZvaWQgKnB0cilcXG4tLVxcbm5ldC94ZHAveHNrLmMtMjE1NC1cXG5uZXQveGRwL3hzay5jOjIxNTU6c3RhdGljIHN0cnVjdCBwcm90byB4c2tfcHJvdG8gPSB7XFxubmV0L3hkcC94c2suYy0yMTU2LVxcdC5uYW1lID1cXHRcXHRcXFwiWERQXFxcIixcXG4tLVxcbm5ldC94ZHAveHNrLmMtMjE2MC1cXG5uZXQveGRwL3hzay5jOjIxNjE6c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgeHNrX3Byb3RvX29wcyA9IHtcXG5uZXQveGRwL3hzay5jLTIxNjItXFx0LmZhbWlseVxcdFxcdD0gUEZfWERQLFxcbi0tXFxubmV0L3hkcC94c2suYy0yMTgwLVxcbm5ldC94ZHAveHNrLmM6MjE4MTpzdGF0aWMgdm9pZCB4c2tfZGVzdHJ1Y3Qoc3RydWN0IHNvY2sgKnNrKVxcbm5ldC94ZHAveHNrLmMtMjE4Mi17XFxuLS1cXG5uZXQveGRwL3hzay5jLTIxOTEtXFxubmV0L3hkcC94c2suYzoyMTkyOnN0YXRpYyBpbnQgeHNrX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90b2NvbCxcXG5uZXQveGRwL3hzay5jLTIxOTMtXFx0XFx0ICAgICAgaW50IGtlcm4pXFxuLS1cXG5uZXQveGRwL3hzay5jLTIyMzgtXFxubmV0L3hkcC94c2suYzoyMjM5OnN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X3Byb3RvX2ZhbWlseSB4c2tfZmFtaWx5X29wcyA9IHtcXG5uZXQveGRwL3hzay5jLTIyNDAtXFx0LmZhbWlseSA9IFBGX1hEUCxcXG4tLVxcbm5ldC94ZHAveHNrLmMtMjI0NC1cXG5uZXQveGRwL3hzay5jOjIyNDU6c3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayB4c2tfbmV0ZGV2X25vdGlmaWVyID0ge1xcbm5ldC94ZHAveHNrLmMtMjI0Ni1cXHQubm90aWZpZXJfY2FsbFxcdD0geHNrX25vdGlmaWVyLFxcbi0tXFxubmV0L3hkcC94c2suYy0yMjQ4LVxcbm5ldC94ZHAveHNrLmM6MjI0OTpzdGF0aWMgaW50IF9fbmV0X2luaXQgeHNrX25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldClcXG5uZXQveGRwL3hzay5jLTIyNTAte1xcbi0tXFxubmV0L3hkcC94c2suYy0yMjU1LVxcbm5ldC94ZHAveHNrLmM6MjI1NjpzdGF0aWMgdm9pZCBfX25ldF9leGl0IHhza19uZXRfZXhpdChzdHJ1Y3QgbmV0ICpuZXQpXFxubmV0L3hkcC94c2suYy0yMjU3LXtcXG4tLVxcbm5ldC94ZHAveHNrLmMtMjI2MC1cXG5uZXQveGRwL3hzay5jOjIyNjE6c3RhdGljIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyB4c2tfbmV0X29wcyA9IHtcXG5uZXQveGRwL3hzay5jLTIyNjItXFx0LmluaXQgPSB4c2tfbmV0X2luaXQsXFxuLS1cXG5uZXQveGRwL3hzay5jLTIyNjUtXFxubmV0L3hkcC94c2suYzoyMjY2OnN0YXRpYyBpbnQgX19pbml0IHhza19pbml0KHZvaWQpXFxubmV0L3hkcC94c2suYy0yMjY3LXtcXG4tLVxcbm5ldC94ZHAveHNrLmMtMjMwNy1cXG5uZXQveGRwL3hzay5jOjIzMDg6ZnNfaW5pdGNhbGwoeHNrX2luaXQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwNzozNzo1My4yMzYwNTU4OTVaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDk4NzE2NDE5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBYRFAgU29ja2V0IERlc3RydWN0b3IqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBgeHNrX2Rlc3RydWN0X3NrYmAsIHRoYXQncyB0aGUga2V5IGZ1bmN0aW9uLCBhbiBleHBvcnRlZCBmdW5jdGlvbiwgbWVhbmluZyBpdCdzIGludGVuZGVkIHRvIGJlIGNhbGxlZCBmcm9tIG91dHNpZGUgdGhlIG1vZHVsZS4gSSBrbm93IHRoYXQsIGJhc2VkIG9uIGl0cyBzaWduYXR1cmU6IGBJTkRJUkVDVF9DQUxMQUJMRV9TQ09QRSB2b2lkIHhza19kZXN0cnVjdF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYilgLiBXZSBhbHNvIGhhdmUgcmVsYXRlZCBmdW5jdGlvbnMgdG8gY29uc2lkZXIsIGxpa2UgYHhza19nZW5lcmljX3JjdmAsIGB4c2tfc2VuZG1zZ2AsIGB4c2tfYmluZGAsIGFuZCBgeHNrX2NyZWF0ZWAsIHRob3VnaCBgeHNrX2NyZWF0ZWAgaXMgc3RhdGljIGJ1dCByZWdpc3RlcmVkIGFzIGEgYG5ldF9wcm90b19mYW1pbHlgLiBXZSBjb3VsZCBjZXJ0YWlubHkgbG9vayBhdCB0aG9zZSBhcyB3ZWxsLCBidXQgZm9yIG5vdywgbGV0J3Mga2VlcCBgeHNrX2Rlc3RydWN0X3NrYmAgYW5kIGB4c2tfZ2VuZXJpY19yY3ZgIGluIGZvY3VzLlxuXG5Ob3csIHRoYXQgV29ydGhGdXp6aW5nIGNoZWNrLi4uIEFoYSEgVGhlIHBhdGNoIGFkZHMgYHNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpYCB0byBgeHNrX3NrYl9pbml0X21pc2NgLiBUaGlzIHN1Z2dlc3RzIGEgZml4IGZvciBuZXR3b3JrIGhlYWRlciBvZmZzZXRzIG9uIGdlbmVyaWMgQUZfWERQIHNrYnMgc2VudCB0byBuZXRkZXZpY2VzLiBTbywgaXQncyBjb3JlIG5ldHdvcmtpbmcgbG9naWMsIGFuZCBhY2Nlc3NpYmxlIHRocm91Z2ggQUZfWERQIChYU0sgc29ja2V0cykuIEV4Y2VsbGVudCwgdGhpcyBpcyBkZWZpbml0ZWx5IGZ1enphYmxlLCBhbmQgd2l0aGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBRRU1VLCBldmVuIGJldHRlci4gVGhlIGtleSBjb25maWd1cmF0aW9uIG9wdGlvbnMgbmVlZGVkIGFyZSBgWERQX1NPQ0tFVFNgIGFuZCBgQlBGX1NZU0NBTExgLlxuXG5TbywgV29ydGhGdXp6aW5nOiBUcnVlLiBUaGlzIGlzIHNvbWV0aGluZyB3ZSBjYW4gYW5kIHNob3VsZCB0YXJnZXQuIEknbGwgbmVlZCB0byByZW1lbWJlciB0byBzZXQgdGhlIHJlc3VsdHMgYWNjb3JkaW5nbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwOTcxLCJPdXRwdXRUb2tlbnMiOjExMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwNzozNzo1OC4yMjMyMjI3NDdaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MDQ3Njg3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWERQX1NPQ0tFVFNcIixcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwieHNrX2Rlc3RydWN0X3NrYlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKCkgdG8geHNrX3NrYl9pbml0X21pc2MoKSB3aGVuIGJ1aWxkaW5nIHNrYnMgZm9yIEFGX1hEUCBzb2NrZXRzIHRyYW5zbWl0LiBUaGlzIG1vZGlmaWVzIGNvcmUgbmV0d29ya2luZyBBRl9YRFAgbG9naWMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBhbmQgaXMgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJYRFBfU09DS0VUU1wiLFxuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ4c2tfZGVzdHJ1Y3Rfc2tiXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoKSB0byB4c2tfc2tiX2luaXRfbWlzYygpIHdoZW4gYnVpbGRpbmcgc2ticyBmb3IgQUZfWERQIHNvY2tldHMgdHJhbnNtaXQuIFRoaXMgbW9kaWZpZXMgY29yZSBuZXR3b3JraW5nIEFGX1hEUCBsb2dpYyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGFuZCBpcyB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwNzozNzo1OC4yOTM3MDY3ODdaIiwiU2VxIjozNSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMzMzA3MDcwMTE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDc6Mzc6NTguMjk0MTQ5MTM3WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MzMzMDY2MjE5NzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBzaW5nbGUgY2FsbCB0byBgc2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYilgIHdpdGhpbiBgeHNrX3NrYl9pbml0X21pc2MoKWAgaW4gdGhlIEFGX1hEUCBzdWJzeXN0ZW0gKGBuZXQveGRwL3hzay5jYCkuXFxuXFxuS01TQU4gdnMuIEtBU0FOIGFwcGxpY2FiaWxpdHkgYW5hbHlzaXM6XFxuLSAqKktNU0FOIFJlbGV2YW5jZSoqOiBLTVNBTiBkZXRlY3RzIHVzZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhbmQgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlciBzcGFjZS4gVGhlIHBhdGNoIHNpbXBseSBpbml0aWFsaXplcyB0aGUgYG5ldHdvcmtfaGVhZGVyYCBvZmZzZXQgb24gdGhlIG5ld2x5IGNyZWF0ZWQgYHNrX2J1ZmZgIHRvIG1hdGNoIGBza2ItXFx1MDAzZWRhdGFgLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBzdGFjay9oZWFwIGFsbG9jYXRpb25zLCBkb2VzIG5vdCBleHBvc2UgdW5pbml0aWFsaXplZCBwYWRkaW5nIG9yIHN0cnVjdCBmaWVsZHMgdG8gdXNlciBzcGFjZSwgYW5kIGRvZXMgbm90IGFsdGVyIGxlbmd0aCBjYWxjdWxhdGlvbnMgb3IgYm91bmRzIGNoZWNrcyBpbiBhIHdheSB0aGF0IHdvdWxkIGFsbG93IHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5Llxcbi0gKipLQVNBTiAvIFN0YW5kYXJkIERlYnVnZ2VycyoqOiBTdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGFuZCB0aGUgbmV0d29ya2luZyBzdGFjaydzIGJ1aWx0LWluIGFzc2VydGlvbnMvY2hlY2tzIGFyZSBzdWZmaWNpZW50IHRvIHRlc3Qgc2tiIGNvbnN0cnVjdGlvbiBhbmQgcGFja2V0IHRyYW5zbWlzc2lvbiBpbiBBRl9YRFAuXFxuXFxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBiMDdkODViZjllOGVkZWNmN2VmYjMxZmEzY2YyYjA4MmI0YzUzNDRhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMyAwNzozNjo1MiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC94ZHAveHNrLmMgYi9uZXQveGRwL3hzay5jXG5pbmRleCAzMzQ3NWIxODBlYTZmLi4yMDc3YmI2Mjk5Y2E5IDEwMDY0NFxuLS0tIGEvbmV0L3hkcC94c2suY1xuKysrIGIvbmV0L3hkcC94c2suY1xuQEAgLTk0Nyw2ICs5NDcsOCBAQCBzdGF0aWMgaW50IHhza19za2JfaW5pdF9taXNjKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4ZHBfc29jayAqeHMsXG4ge1xuIFx0aW50IGVycjtcbiBcbitcdHNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpO1xuK1xuIFx0ZXJyID0geHNrX3NrYl9kZXN0cnVjdG9yX3NldF9hZGRyKHNrYiwgYWRkcik7XG4gXHRpZiAodW5saWtlbHkoZXJyKSlcbiBcdFx0cmV0dXJuIGVycjtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA3OjM3OjU4LjI5NDE1MDA2N1oiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNzMzNDA2Nzc1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFhTSyBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBUaGUgcGF0Y2ggaXMgdG91Y2hpbmcgYG5ldC94ZHAveHNrLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGB4c2tfc2tiX2luaXRfbWlzY2AgZnVuY3Rpb24uIEltbWVkaWF0ZWx5LCBJIHNlZSBhIG5ldyBsaW5lOiBgc2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYik7YC4gUmlnaHQsIHRoaXMgaXMgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGFkZGl0aW9uLCBidXQgbGV0J3MgbWFrZSBzdXJlIGl0IG1ha2VzIHNlbnNlIGluIGNvbnRleHQuIExldCBtZSBxdWlja2x5IHVzZSBgcmVhZC1maWxlYCB0byBnZXQgdGhlIGFyZWEgYXJvdW5kIGxpbmUgOTQ3IG9mIGBuZXQveGRwL3hzay5jYC4gVGhlIHB1cnBvc2Ugb2YgdGhpcyBmdW5jdGlvbiBtdXN0IGJlIHRvIGluaXRpYWxpemUgYW4gYHNrX2J1ZmZgIGZvciBYU0sgKGVYcHJlc3MgRGF0YSBQYXRoIFNvY2tldHMpLiBTbywgaXQgbWFrZXMgc2Vuc2UgdGhhdCB3ZSdkIGhhdmUgdG8gcmVzZXQgdGhlIG5ldHdvcmsgaGVhZGVyIG9mIGBza2JgIGJlZm9yZSBhc3NpZ25pbmcgdGhlIGFkZHJlc3MsIHByZXZlbnRpbmcgYW55IHdlaXJkIHNpZGUgZWZmZWN0cyB3aGVuIGNvbnN0cnVjdGluZyB0aGUgYHNrX2J1ZmZgLiBUaGlzIGlzIGEgbG93LXJpc2ssIGxpa2VseSBuZWNlc3NhcnkgYWRkaXRpb24uIEknbGwgZmxhZyBpdCBhcyBzdWNoIGFuZCBtb3ZlIG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDU4LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDc6Mzg6MTUuNjI4MjIxMTlaIiwiU2VxIjozOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU2NjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC94ZHAveHNrLmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTIwLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgOTIwOlxcdFxcdHhza3FfcHJvZF9zdWJtaXRfbihwb29sLVxcdTAwM2VjcSwgMSk7XFxuIDkyMTpcXHRcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZwb29sLVxcdTAwM2VjcV9wcm9kX2xvY2ssIGZsYWdzKTtcXG4gOTIyOlxcdH1cXG4gOTIzOlxcdFxcbiA5MjQ6XFx0c3RhdGljIHZvaWQgeHNrX2NxX2NhbmNlbF9sb2NrZWQoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHUzMiBuKVxcbiA5MjU6XFx0e1xcbiA5MjY6XFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZwb29sLVxcdTAwM2VjcS1cXHUwMDNlY3FfY2FjaGVkX3Byb2RfbG9jayk7XFxuIDkyNzpcXHRcXHR4c2txX3Byb2RfY2FuY2VsX24ocG9vbC1cXHUwMDNlY3EsIG4pO1xcbiA5Mjg6XFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNnBvb2wtXFx1MDAzZWNxLVxcdTAwM2VjcV9jYWNoZWRfcHJvZF9sb2NrKTtcXG4gOTI5OlxcdH1cXG4gOTMwOlxcdFxcbiA5MzE6XFx0SU5ESVJFQ1RfQ0FMTEFCTEVfU0NPUEVcXG4gOTMyOlxcdHZvaWQgeHNrX2Rlc3RydWN0X3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiA5MzM6XFx0e1xcbiA5MzQ6XFx0XFx0c3RydWN0IHhza190eF9tZXRhZGF0YV9jb21wbCAqY29tcGwgPSBcXHUwMDI2c2tiX3NoaW5mbyhza2IpLVxcdTAwM2V4c2tfbWV0YTtcXG4gOTM1OlxcdFxcbiA5MzY6XFx0XFx0aWYgKGNvbXBsLVxcdTAwM2V0eF90aW1lc3RhbXApIHtcXG4gOTM3OlxcdFxcdFxcdC8qIHN3IGNvbXBsZXRpb24gdGltZXN0YW1wLCBub3QgYSByZWFsIG9uZSAqL1xcbiA5Mzg6XFx0XFx0XFx0KmNvbXBsLVxcdTAwM2V0eF90aW1lc3RhbXAgPSBrdGltZV9nZXRfdGFpX2Zhc3RfbnMoKTtcXG4gOTM5OlxcdFxcdH1cXG4gOTQwOlxcdFxcbiA5NDE6XFx0XFx0eHNrX2NxX3N1Ym1pdF9hZGRyX2xvY2tlZCh4ZHBfc2soc2tiLVxcdTAwM2VzayktXFx1MDAzZXBvb2wsIHNrYik7XFxuIDk0MjpcXHRcXHRzb2NrX3dmcmVlKHNrYik7XFxuIDk0MzpcXHR9XFxuIDk0NDpcXHRcXG4gOTQ1OlxcdHN0YXRpYyBpbnQgeHNrX3NrYl9pbml0X21pc2Moc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHhkcF9zb2NrICp4cyxcXG4gOTQ2OlxcdFxcdFxcdFxcdCAgICAgdTY0IGFkZHIpXFxuIDk0NzpcXHR7XFxuIDk0ODpcXHRcXHRpbnQgZXJyO1xcbiA5NDk6XFx0XFxuIDk1MDpcXHRcXHRza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKTtcXG4gOTUxOlxcdFxcbiA5NTI6XFx0XFx0ZXJyID0geHNrX3NrYl9kZXN0cnVjdG9yX3NldF9hZGRyKHNrYiwgYWRkcik7XFxuIDk1MzpcXHRcXHRpZiAodW5saWtlbHkoZXJyKSlcXG4gOTU0OlxcdFxcdFxcdHJldHVybiBlcnI7XFxuIDk1NTpcXHRcXG4gOTU2OlxcdFxcdHNrYi1cXHUwMDNlZGV2ID0geHMtXFx1MDAzZWRldjtcXG4gOTU3OlxcdFxcdHNrYi1cXHUwMDNlcHJpb3JpdHkgPSBSRUFEX09OQ0UoeHMtXFx1MDAzZXNrLnNrX3ByaW9yaXR5KTtcXG4gOTU4OlxcdFxcdHNrYi1cXHUwMDNlbWFyayA9IFJFQURfT05DRSh4cy1cXHUwMDNlc2suc2tfbWFyayk7XFxuIDk1OTpcXHRcXHRza2ItXFx1MDAzZWRlc3RydWN0b3IgPSB4c2tfZGVzdHJ1Y3Rfc2tiO1xcbiA5NjA6XFx0XFx0cmV0dXJuIDA7XFxuIDk2MTpcXHR9XFxuIDk2MjpcXHRcXG4gOTYzOlxcdHN0YXRpYyB2b2lkIHhza19jb25zdW1lX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiA5NjQ6XFx0e1xcbiA5NjU6XFx0XFx0c3RydWN0IHhkcF9zb2NrICp4cyA9IHhkcF9zayhza2ItXFx1MDAzZXNrKTtcXG4gOTY2OlxcdFxcdHUzMiBudW1fZGVzY3MgPSB4c2tfZ2V0X251bV9kZXNjKHNrYik7XFxuIDk2NzpcXHRcXHRzdHJ1Y3QgeHNrX2FkZHJzICp4c2tfYWRkcjtcXG4gOTY4OlxcdFxcbiA5Njk6XFx0XFx0aWYgKHVubGlrZWx5KCF4c2tfc2tiX2Rlc3RydWN0b3JfaXNfYWRkcihza2IpKSkge1xcbiA5NzA6XFx0XFx0XFx0eHNrX2FkZHIgPSAoc3RydWN0IHhza19hZGRycyAqKXNrYl9zaGluZm8oc2tiKS1cXHUwMDNlZGVzdHJ1Y3Rvcl9hcmc7XFxuIDk3MTpcXHRcXHRcXHRrbWVtX2NhY2hlX2ZyZWUoeHNrX3R4X2dlbmVyaWNfY2FjaGUsIHhza19hZGRyKTtcXG4gOTcyOlxcdFxcdH1cXG4gOTczOlxcdFxcbiA5NzQ6XFx0XFx0c2tiLVxcdTAwM2VkZXN0cnVjdG9yID0gc29ja193ZnJlZTtcXG4gOTc1OlxcdFxcdHhza19jcV9jYW5jZWxfbG9ja2VkKHhzLVxcdTAwM2Vwb29sLCBudW1fZGVzY3MpO1xcbiA5NzY6XFx0XFx0LyogRnJlZSBza2Igd2l0aG91dCB0cmlnZ2VyaW5nIHRoZSBwZXJmIGRyb3AgdHJhY2UgKi9cXG4gOTc3OlxcdFxcdGNvbnN1bWVfc2tiKHNrYik7XFxuIDk3ODpcXHRcXHR4cy1cXHUwMDNlc2tiID0gTlVMTDtcXG4gOTc5OlxcdH1cXG4gOTgwOlxcdFxcbiA5ODE6XFx0c3RhdGljIHZvaWQgeHNrX2Ryb3Bfc2tiKHN0cnVjdCBza19idWZmICpza2IpXFxuIDk4MjpcXHR7XFxuIDk4MzpcXHRcXHRzdHJ1Y3QgeGRwX3NvY2sgKnhzID0geGRwX3NrKHNrYi1cXHUwMDNlc2spO1xcbiA5ODQ6XFx0XFxuIDk4NTpcXHRcXHR4cy1cXHUwMDNldHgtXFx1MDAzZWludmFsaWRfZGVzY3MgKz0geHNrX2dldF9udW1fZGVzYyhza2IpO1xcbiA5ODY6XFx0XFx0Y29uc3VtZV9za2Ioc2tiKTtcXG4gOTg3OlxcdFxcdHhzLVxcdTAwM2Vza2IgPSBOVUxMO1xcbiA5ODg6XFx0fVxcbiA5ODk6XFx0XFxuIDk5MDpcXHRzdGF0aWMgaW50IHhza19za2JfbWV0YWRhdGEoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdm9pZCAqYnVmZmVyLFxcbiA5OTE6XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCB4ZHBfZGVzYyAqZGVzYywgc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsXFxuIDk5MjpcXHRcXHRcXHRcXHQgICAgdTMyIGhyKVxcbiA5OTM6XFx0e1xcbiA5OTQ6XFx0XFx0c3RydWN0IHhza190eF9tZXRhZGF0YSAqbWV0YSA9IE5VTEw7XFxuIDk5NTpcXHRcXHR1MTYgY3N1bV9zdGFydCwgY3N1bV9vZmZzZXQ7XFxuIDk5NjpcXHRcXHR1NjQgZmxhZ3M7XFxuIDk5NzpcXHRcXG4gOTk4OlxcdFxcdGlmICh1bmxpa2VseShwb29sLVxcdTAwM2V0eF9tZXRhZGF0YV9sZW4gPT0gMCkpXFxuIDk5OTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDc6Mzg6MTUuNjI4Mzc5MzhaIiwiU2VxIjozOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjkyNjYwNTUyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYW4gZXhwZXJ0IGluIHRoZSBmaWVsZDpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBPcmlnaW5zIG9mIGB4c2tfc2tiX2luaXRfbWlzY2AqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gdHJ5aW5nIHRvIHRyYWNlIHRoZSBsaW5lYWdlIG9mIHRoaXMgYHhza19za2JfaW5pdF9taXNjYCBmdW5jdGlvbi4gVGhlIGdvYWwgaGVyZSBpcyB0byB1bmRlcnN0YW5kIGl0cyBwdXJwb3NlIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgdG8gY29ubmVjdCBpdCB0byBpdHMgaW5pdGlhbCBpbnRyb2R1Y3Rpb24gb3Igc2lnbmlmaWNhbnQgbW9kaWZpY2F0aW9ucyB3aXRoaW4gdGhlIHJlbGV2YW50IGNvZGViYXNlLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSBpdCdzIGJlaW5nIGNhbGxlZCwgd2hpY2ggd2lsbCBsaWtlbHkgZ2l2ZSBtZSBzb21lIGltcG9ydGFudCBjb250ZXh0LiBUaGUgYmVzdCBhcHByb2FjaCBpcyB0byBzdGFydCB3aXRoIGEgcXVpY2sgY29kZSBzZWFyY2guIEknbGwgdXNlIGBncmVwcGVyYCDigJMgdGhhdCdzIHVzdWFsbHkgdGhlIG1vc3QgZWZmaWNpZW50IHdheSB0byBxdWlja2x5IGZpbmQgYWxsIG9jY3VycmVuY2VzIG9mIHRoaXMgZnVuY3Rpb24gbmFtZSB3aXRoaW4gdGhlIHByb2plY3QuIEhvcGVmdWxseSwgYnkgaWRlbnRpZnlpbmcgdGhlIGNhbGwgc2l0ZXMsIEkgY2FuIHpvb20gaW4gb24gdGhlIHNwZWNpZmljIGNvbW1pdChzKSByZXNwb25zaWJsZSBmb3IgaXRzIGluY2x1c2lvbiBvciBtb2RpZmljYXRpb24uIFRoYXQgaW5mb3JtYXRpb24gd2lsbCBwcm92aWRlIHZhbHVhYmxlIGluc2lnaHQgaW50byB0aGUgZGVzaWduIGRlY2lzaW9ucyBhbmQgdGhlIGludGVudCBiZWhpbmQgdGhpcyBwYXJ0aWN1bGFyIGZ1bmN0aW9uLiBGcm9tIHRoZXJlLCBJIGNhbiBhbmFseXplIHRoZSBjb21taXQgbWVzc2FnZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUgdG8gZ3Jhc3AgaXRzIHJvbGUgbW9yZSBjb21wbGV0ZWx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjozNzg1LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwNzozODoxOC41NTQ5ODY5MjNaIiwiU2VxIjo0MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MjI1MDQ4MTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieHNrX3NrYl9pbml0X21pc2NcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hkcC94c2suYz05MzI9dm9pZCB4c2tfZGVzdHJ1Y3Rfc2tiKHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQveGRwL3hzay5jLTk0NC1cXG5uZXQveGRwL3hzay5jOjk0NTpzdGF0aWMgaW50IHhza19za2JfaW5pdF9taXNjKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4ZHBfc29jayAqeHMsXFxubmV0L3hkcC94c2suYy05NDYtXFx0XFx0XFx0ICAgICB1NjQgYWRkcilcXG4tLVxcbm5ldC94ZHAveHNrLmM9MTExMT1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhza19idWlsZF9za2Ioc3RydWN0IHhkcF9zb2NrICp4cyxcXG4tLVxcbm5ldC94ZHAveHNrLmMtMTE4Ni1cXHRpZiAoIXhzLVxcdTAwM2Vza2IpIHtcXG5uZXQveGRwL3hzay5jOjExODc6XFx0XFx0ZXJyID0geHNrX3NrYl9pbml0X21pc2Moc2tiLCB4cywgZGVzYy1cXHUwMDNlYWRkcik7XFxubmV0L3hkcC94c2suYy0xMTg4LVxcdFxcdGlmICh1bmxpa2VseShlcnIpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwNzozODoyMC4xNzc0OTY1NzdaIiwiU2VxIjo0MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mzc3MzAwMzczMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gcHJvY2Vzc2luZyB0aGUgY29kZTpcblxuKipEaXZpbmcgaW50byBgeHNrX2J1aWxkX3NrYmAqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSB3aXRoIGB4c2tfYnVpbGRfc2tiYC4gSSdtIGdvaW5nIHRvIGZvY3VzIG9uIGxpbmVzIDExMTEgdG8gMTIwMC4gVGhpcyBmdW5jdGlvbiBpcyBjcnVjaWFsIGZvciBidWlsZGluZyBTS0JzIOKAkyB0aGUgU29ja2V0IEJ1ZmZlciBzdHJ1Y3R1cmVzIOKAkyB3aGljaCBhcmUgYWJzb2x1dGVseSBmdW5kYW1lbnRhbCB0byBob3cgZGF0YSBpcyBtb3ZlZCBhcm91bmQgaW4gdGhlIFhEUCAoZVhwcmVzcyBEYXRhIFBhdGgpIHdvcmxkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHBhcnQgKnRob3JvdWdobHkqLiBJIGtub3cgaXQgaGFuZGxlcyB0aGUgYWxsb2NhdGlvbiBhbmQgcG9wdWxhdGlvbiBvZiB0aGVzZSBTS0JzLCBhbmQgdGhhdCdzIHRoZSBjb3JlIG9mIGdldHRpbmcgcGFja2V0cyBpbnRvIGFuZCBvdXQgb2YgdGhlIG5ldHdvcmsgc3RhY2sgZWZmaWNpZW50bHkuIEknbSBleHBlY3Rpbmcgc29tZSBpbnRyaWNhdGUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGNhcmVmdWwgZGF0YSBjb3B5aW5nIGluIGhlcmU7IG9wdGltaXphdGlvbiBpcyBjcml0aWNhbCBpbiB0aGlzIGNvbnRleHQuIEknbGwgYmUgbG9va2luZyBmb3IgaG93IGl0IGhhbmRsZXMgcG90ZW50aWFsIGVycm9ycywgbGlrZSBtZW1vcnkgZXhoYXVzdGlvbiBvciBvdGhlciBpc3N1ZXMgdGhhdCBjb3VsZCBzdGFsbCBwYWNrZXQgcHJvY2Vzc2luZy4gQSBkZWVwIHVuZGVyc3RhbmRpbmcgb2YgZXJyb3IgcGF0aHMgaXMganVzdCBhcyBpbXBvcnRhbnQgYXMgdGhlIGhhcHB5IHBhdGggaW4gYSBwZXJmb3JtYW5jZS1jcml0aWNhbCBmdW5jdGlvbiBsaWtlIHRoaXMuIEknbGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgcG90ZW50aWFsIGZvciByYWNlIGNvbmRpdGlvbnMgb3IgbG9ja2luZyBpc3N1ZXMsIGVzcGVjaWFsbHkgd2l0aCBzaGFyZWQgZGF0YSBzdHJ1Y3R1cmVzLiBUaGlzIGlzIHdoZXJlIHRoZSBkZXZpbCBvZnRlbiBoaWRlcywgZXNwZWNpYWxseSBpbiBsb3ctbGV2ZWwgbmV0d29yayBjb2RlLiBJJ20gYWxzbyBjdXJpb3VzIHRvIHNlZSBob3cgaXQgaW50ZXJhY3RzIHdpdGggb3RoZXIgWERQIGNvbXBvbmVudHMsIGxpa2UgdGhlIHJpbmcgYnVmZmVycyBhbmQgdGhlIEFGX1hEUCBzb2NrZXQgaXRzZWxmLiBJdCdzIGxpa2VseSBpbnZvbHZlZCBpbiB0aGUgaGFuZG92ZXIgZnJvbSB0aGUgZmFzdCBwYXRoIHRvIHRoZSBzdGFuZGFyZCBuZXR3b3JrIHN0YWNrLCB3aGljaCBuZWVkcyB0byBiZSBhcyBzZWFtbGVzcyBhbmQgZWZmaWNpZW50IGFzIHBvc3NpYmxlLiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIGhvdyB0aGUgbWFnaWMgaGFwcGVucy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDMzNSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA3OjM4OjIzLjk1MDUwMjMwN1oiLCJTZXEiOjQyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTgxODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3hkcC94c2suY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMTEwLFxuICBcIkxpbmVDb3VudFwiOiA5MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMTEwOlxcdFxcbjExMTE6XFx0c3RhdGljIHN0cnVjdCBza19idWZmICp4c2tfYnVpbGRfc2tiKHN0cnVjdCB4ZHBfc29jayAqeHMsXFxuMTExMjpcXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCB4ZHBfZGVzYyAqZGVzYylcXG4xMTEzOlxcdHtcXG4xMTE0OlxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSB4cy1cXHUwMDNlZGV2O1xcbjExMTU6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IHhzLVxcdTAwM2Vza2I7XFxuMTExNjpcXHRcXHRpbnQgZXJyO1xcbjExMTc6XFx0XFxuMTExODpcXHRcXHRpZiAoZGV2LVxcdTAwM2Vwcml2X2ZsYWdzIFxcdTAwMjYgSUZGX1RYX1NLQl9OT19MSU5FQVIpIHtcXG4xMTE5OlxcdFxcdFxcdHNrYiA9IHhza19idWlsZF9za2JfemVyb2NvcHkoeHMsIGRlc2MpO1xcbjExMjA6XFx0XFx0XFx0aWYgKElTX0VSUihza2IpKSB7XFxuMTEyMTpcXHRcXHRcXHRcXHRlcnIgPSBQVFJfRVJSKHNrYik7XFxuMTEyMjpcXHRcXHRcXHRcXHRza2IgPSBOVUxMO1xcbjExMjM6XFx0XFx0XFx0XFx0Z290byBmcmVlX2VycjtcXG4xMTI0OlxcdFxcdFxcdH1cXG4xMTI1OlxcdFxcdH0gZWxzZSB7XFxuMTEyNjpcXHRcXHRcXHR1MzIgaHIsIHRyLCBsZW47XFxuMTEyNzpcXHRcXHRcXHR2b2lkICpidWZmZXI7XFxuMTEyODpcXHRcXG4xMTI5OlxcdFxcdFxcdGJ1ZmZlciA9IHhza19idWZmX3Jhd19nZXRfZGF0YSh4cy1cXHUwMDNlcG9vbCwgZGVzYy1cXHUwMDNlYWRkcik7XFxuMTEzMDpcXHRcXHRcXHRsZW4gPSBkZXNjLVxcdTAwM2VsZW47XFxuMTEzMTpcXHRcXG4xMTMyOlxcdFxcdFxcdGlmICghc2tiKSB7XFxuMTEzMzpcXHRcXHRcXHRcXHRociA9IG1heChORVRfU0tCX1BBRCwgTDFfQ0FDSEVfQUxJR04oZGV2LVxcdTAwM2VuZWVkZWRfaGVhZHJvb20pKTtcXG4xMTM0OlxcdFxcdFxcdFxcdHRyID0gZGV2LVxcdTAwM2VuZWVkZWRfdGFpbHJvb207XFxuMTEzNTpcXHRcXHRcXHRcXHRza2IgPSBzb2NrX2FsbG9jX3NlbmRfc2tiKFxcdTAwMjZ4cy1cXHUwMDNlc2ssIGhyICsgbGVuICsgdHIsIDEsIFxcdTAwMjZlcnIpO1xcbjExMzY6XFx0XFx0XFx0XFx0aWYgKHVubGlrZWx5KCFza2IpKVxcbjExMzc6XFx0XFx0XFx0XFx0XFx0Z290byBmcmVlX2VycjtcXG4xMTM4OlxcdFxcbjExMzk6XFx0XFx0XFx0XFx0c2tiX3Jlc2VydmUoc2tiLCBocik7XFxuMTE0MDpcXHRcXHRcXHRcXHRza2JfcHV0KHNrYiwgbGVuKTtcXG4xMTQxOlxcdFxcbjExNDI6XFx0XFx0XFx0XFx0ZXJyID0gc2tiX3N0b3JlX2JpdHMoc2tiLCAwLCBidWZmZXIsIGxlbik7XFxuMTE0MzpcXHRcXHRcXHRcXHRpZiAodW5saWtlbHkoZXJyKSlcXG4xMTQ0OlxcdFxcdFxcdFxcdFxcdGdvdG8gZnJlZV9lcnI7XFxuMTE0NTpcXHRcXG4xMTQ2OlxcdFxcdFxcdFxcdGlmIChkZXNjLVxcdTAwM2VvcHRpb25zIFxcdTAwMjYgWERQX1RYX01FVEFEQVRBKSB7XFxuMTE0NzpcXHRcXHRcXHRcXHRcXHRlcnIgPSB4c2tfc2tiX21ldGFkYXRhKHNrYiwgYnVmZmVyLCBkZXNjLFxcbjExNDg6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIHhzLVxcdTAwM2Vwb29sLCBocik7XFxuMTE0OTpcXHRcXHRcXHRcXHRcXHRpZiAodW5saWtlbHkoZXJyKSlcXG4xMTUwOlxcdFxcdFxcdFxcdFxcdFxcdGdvdG8gZnJlZV9lcnI7XFxuMTE1MTpcXHRcXHRcXHRcXHR9XFxuMTE1MjpcXHRcXHRcXHR9IGVsc2Uge1xcbjExNTM6XFx0XFx0XFx0XFx0aW50IG5yX2ZyYWdzID0gc2tiX3NoaW5mbyhza2IpLVxcdTAwM2Vucl9mcmFncztcXG4xMTU0OlxcdFxcdFxcdFxcdHN0cnVjdCB4c2tfYWRkcnMgKnhza19hZGRyO1xcbjExNTU6XFx0XFx0XFx0XFx0c3RydWN0IHBhZ2UgKnBhZ2U7XFxuMTE1NjpcXHRcXHRcXHRcXHR1OCAqdmFkZHI7XFxuMTE1NzpcXHRcXG4xMTU4OlxcdFxcdFxcdFxcdHhza19hZGRyID0geHNrX2FkZHJzX2FsbG9jKHNrYik7XFxuMTE1OTpcXHRcXHRcXHRcXHRpZiAoIXhza19hZGRyKSB7XFxuMTE2MDpcXHRcXHRcXHRcXHRcXHRlcnIgPSAtRU5PTUVNO1xcbjExNjE6XFx0XFx0XFx0XFx0XFx0Z290byBmcmVlX2VycjtcXG4xMTYyOlxcdFxcdFxcdFxcdH1cXG4xMTYzOlxcdFxcbjExNjQ6XFx0XFx0XFx0XFx0eHNrX2FkZHItXFx1MDAzZWFkZHJzW3hza19hZGRyLVxcdTAwM2VudW1fZGVzY3NdID0gZGVzYy1cXHUwMDNlYWRkcjtcXG4xMTY1OlxcdFxcbjExNjY6XFx0XFx0XFx0XFx0aWYgKHVubGlrZWx5KG5yX2ZyYWdzID09IChNQVhfU0tCX0ZSQUdTIC0gMSkgXFx1MDAyNlxcdTAwMjYgeHBfbWJfZGVzYyhkZXNjKSkpIHtcXG4xMTY3OlxcdFxcdFxcdFxcdFxcdGVyciA9IC1FT1ZFUkZMT1c7XFxuMTE2ODpcXHRcXHRcXHRcXHRcXHRnb3RvIGZyZWVfZXJyO1xcbjExNjk6XFx0XFx0XFx0XFx0fVxcbjExNzA6XFx0XFxuMTE3MTpcXHRcXHRcXHRcXHRwYWdlID0gYWxsb2NfcGFnZSh4cy1cXHUwMDNlc2suc2tfYWxsb2NhdGlvbik7XFxuMTE3MjpcXHRcXHRcXHRcXHRpZiAodW5saWtlbHkoIXBhZ2UpKSB7XFxuMTE3MzpcXHRcXHRcXHRcXHRcXHRlcnIgPSAtRUFHQUlOO1xcbjExNzQ6XFx0XFx0XFx0XFx0XFx0Z290byBmcmVlX2VycjtcXG4xMTc1OlxcdFxcdFxcdFxcdH1cXG4xMTc2OlxcdFxcbjExNzc6XFx0XFx0XFx0XFx0dmFkZHIgPSBrbWFwX2xvY2FsX3BhZ2UocGFnZSk7XFxuMTE3ODpcXHRcXHRcXHRcXHRtZW1jcHkodmFkZHIsIGJ1ZmZlciwgbGVuKTtcXG4xMTc5OlxcdFxcdFxcdFxcdGt1bm1hcF9sb2NhbCh2YWRkcik7XFxuMTE4MDpcXHRcXG4xMTgxOlxcdFxcdFxcdFxcdHNrYl9hZGRfcnhfZnJhZyhza2IsIG5yX2ZyYWdzLCBwYWdlLCAwLCBsZW4sIFBBR0VfU0laRSk7XFxuMTE4MjpcXHRcXHRcXHRcXHRyZWZjb3VudF9hZGQoUEFHRV9TSVpFLCBcXHUwMDI2eHMtXFx1MDAzZXNrLnNrX3dtZW1fYWxsb2MpO1xcbjExODM6XFx0XFx0XFx0fVxcbjExODQ6XFx0XFx0fVxcbjExODU6XFx0XFxuMTE4NjpcXHRcXHRpZiAoIXhzLVxcdTAwM2Vza2IpIHtcXG4xMTg3OlxcdFxcdFxcdGVyciA9IHhza19za2JfaW5pdF9taXNjKHNrYiwgeHMsIGRlc2MtXFx1MDAzZWFkZHIpO1xcbjExODg6XFx0XFx0XFx0aWYgKHVubGlrZWx5KGVycikpXFxuMTE4OTpcXHRcXHRcXHRcXHRnb3RvIGZyZWVfZXJyO1xcbjExOTA6XFx0XFx0fVxcbjExOTE6XFx0XFx0eHNrX2luY19udW1fZGVzYyhza2IpO1xcbjExOTI6XFx0XFxuMTE5MzpcXHRcXHRyZXR1cm4gc2tiO1xcbjExOTQ6XFx0XFxuMTE5NTpcXHRmcmVlX2VycjpcXG4xMTk2OlxcdFxcdGlmIChza2IgXFx1MDAyNlxcdTAwMjYgIXhzLVxcdTAwM2Vza2IpXFxuMTE5NzpcXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4xMTk4OlxcdFxcbjExOTk6XFx0XFx0aWYgKGVyciA9PSAtRU9WRVJGTE9XKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA3OjM4OjIzLjk1MDY2MTk3NloiLCJTZXEiOjQzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3NjUwMDgxODU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBgc2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyYCBBZGRpdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhlIGNvcmUgb2YgdGhpcyBpcyB0aGUgaW50cm9kdWN0aW9uIG9mIGBza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKWAgaW4gdGhlIEFGX1hEUCBjb250ZXh0LiBTcGVjaWZpY2FsbHksIGBza2ItXHUwMDNlbmV0d29ya19oZWFkZXIgPSBza2ItXHUwMDNlZGF0YSAtIHNrYi1cdTAwM2VoZWFkO2AuICBUaGUgYWltIGhlcmUgaXMgdG8gZW5zdXJlIHRoYXQgdGhlIGBuZXR3b3JrX2hlYWRlcmAgZmllbGQgd2l0aGluIHRoZSBgc2tfYnVmZmAgc3RydWN0dXJlIGlzIGNvcnJlY3RseSBzZXQgKmJlZm9yZSogdGhlIGBza2JgIGlzIHRyYW5zbWl0dGVkLCBwYXJ0aWN1bGFybHkgd2hlbiB1c2luZyBnZW5lcmljL2RyaXZlciB0cmFuc21pc3Npb24gcGF0aHMgbGlrZSBgZGV2X3F1ZXVlX3htaXRgLiBQcmV2aW91c2x5LCBBRl9YRFAgbWlnaHQndmUgYmVlbiBjcmVhdGluZyBgc2tiYHMgd2l0aG91dCBpbml0aWFsaXppbmcgdGhpcyBoZWFkZXIgcHJvcGVybHksIG9yIHdpdGggYSBkZWZhdWx0IHZhbHVlLiBUaGlzIG9taXNzaW9uIGNvdWxkIGxlYWQgdG8gaXNzdWVzIGluIHZhcmlvdXMgcGFydHMgb2YgdGhlIG5ldHdvcmtpbmcgc3RhY2vigJRxZGlzY3MgbGlrZSBgc2NoX25ldGVtYCBhbmQgYHNjaF9mcWAsIEJQRiBwcm9ncmFtcywgcGFja2V0IHNvY2tldHMsIGFuZCBldmVuIGRldmljZSBkcml2ZXJz4oCUYWxsIG9mIHdoaWNoIG1pZ2h0IGRlcmVmZXJlbmNlIGBza2JfbmV0d29ya19oZWFkZXIoc2tiKWAgb3IgcmVseSBvbiB0aGUgb2Zmc2V0LlxuXG5Ob3csIGxldCdzIGFkZHJlc3MgdGhlIGNydWNpYWwgcXVlc3Rpb246IGFyZSB3ZSBpbnRyb2R1Y2luZyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3M/IE5vLiBNeSBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBjaGFuZ2UgKmNvcnJlY3RseSogaW5pdGlhbGl6ZXMgdGhlIGBuZXR3b3JrX2hlYWRlcmAgZmllbGQuIEl0J3Mgbm90IGV4cG9zaW5nIHVuaW5pdGlhbGl6ZWQgZGF0YSB0byB1c2VyIHNwYWNlLiBJdCdzIHVzaW5nIGBzb2NrX2FsbG9jX3NlbmRfc2tiYCBvciBgeHNrX2J1aWxkX3NrYl96ZXJvY29weWAsIGFuZCB0aGVzZSBmdW5jdGlvbnMgaW5pdGlhbGl6ZSBgc2tiLVx1MDAzZWRhdGFgIGFuZCBgc2tiLVx1MDAzZWhlYWRgLiBUaGUgZnVuY3Rpb24gaXRzZWxmIGRvZXNuJ3QgYWxsb2NhdGUgbmV3IHN0cnVjdHVyZXMgb3IgY2hhbmdlIGJvdW5kcyBjaGVja3MgdGhhdCB3b3VsZCBsZWFkIHRvIHBvdGVudGlhbCBpc3N1ZXMuIEl0J3MgYSBzdHJhaWdodGZvcndhcmQgYXNzaWdubWVudCBvZiBhIHByZS1leGlzdGluZyBmaWVsZCBiYXNlZCBvbiBleGlzdGluZyBpbml0aWFsaXplZCBkYXRhLlxuXG5SZWdhcmRpbmcgS01TQU4gKEtlcm5lbCBNZW1vcnkgU2FuaXRpemVyKSwgdGhpcyBjaGFuZ2UgaXMgY2xlYXJseSAqbm90KiBzb21ldGhpbmcgdGhhdCByZXF1aXJlcyBLTVNBTi4gS01TQU4gaXMgcHJpbWFyaWx5IGNvbmNlcm5lZCB3aXRoIGRldGVjdGluZyByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSwgd2hpY2ggY291bGQgbGVhZCB0byBpbmZvcm1hdGlvbiBsZWFrcywgb3IgdW5pbml0aWFsaXplZCB2YWx1ZXMgdGhhdCBtaWdodCBiZSB1c2VkIGFzIHRoZSBiYXNpcyBvZiBhIGRlY2lzaW9uLiBUaGlzIGlzbid0IHRoYXQuIFRoaXMgcGF0Y2ggZml4ZXMgYSBidWcgd2hlcmUgYG5ldHdvcmtfaGVhZGVyYCB3YXNuJ3QgcHJvcGVybHkgaW5pdGlhbGl6ZWQuIFN0YW5kYXJkIEtBU0FOIChLZXJuZWwgQWRkcmVzcyBTYW5pdGl6ZXIpIGFuZCByZWxhdGVkIHNhbml0aXplcnMgYXJlIHN1ZmZpY2llbnQuIEl0IGZvY3VzZXMgb24gbWVtb3J5IHNhZmV0eSBpc3N1ZXMsIHdoaWNoIGFyZSBub3QgcHJlc2VudCBoZXJlLlxuXG5UaGVyZWZvcmUsIHRoZSByZWFzb25pbmcgZm9yIGBOZWVkc0tNU0FOID0gZmFsc2VgIGlzIHN0cmFpZ2h0Zm9yd2FyZDogdGhpcyBwYXRjaCAqaW5pdGlhbGl6ZXMqIGEgZmllbGQsIGFuZCBkb2VzICpub3QqIGNyZWF0ZSBuZXcgcGF0aHMgd2hlcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgcmVhZCwgY29waWVkIHRvIHVzZXJzcGFjZSwgb3IgYnJhbmNoZWQgb24uIEl0J3MgYSBwdXJlIGluaXRpYWxpemF0aW9uLCBhIGJ1ZyBmaXggZm9yIGNvcnJlY3QgaGVhZGVyIHVzYWdlIHdpdGhpbiB0aGUgbmV0d29yayBzdGFjay5cblxuXG4iLCJJbnB1dFRva2VucyI6NjA4MywiT3V0cHV0VG9rZW5zIjoyNDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwNzozODozMS42MDA3NDcwNzRaIiwiU2VxIjo0NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzE1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBzaW5nbGUgY2FsbCB0byBgc2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYilgIHdpdGhpbiBgeHNrX3NrYl9pbml0X21pc2MoKWAgaW4gdGhlIEFGX1hEUCBzdWJzeXN0ZW0gKGBuZXQveGRwL3hzay5jYCkuXFxuXFxuS01TQU4gdnMuIEtBU0FOIGFwcGxpY2FiaWxpdHkgYW5hbHlzaXM6XFxuLSAqKktNU0FOIFJlbGV2YW5jZSoqOiBLTVNBTiBkZXRlY3RzIHVzZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhbmQgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlciBzcGFjZS4gVGhlIHBhdGNoIHNpbXBseSBpbml0aWFsaXplcyB0aGUgYG5ldHdvcmtfaGVhZGVyYCBvZmZzZXQgb24gdGhlIG5ld2x5IGNyZWF0ZWQgYHNrX2J1ZmZgIHRvIG1hdGNoIGBza2ItXFx1MDAzZWRhdGFgLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBzdGFjay9oZWFwIGFsbG9jYXRpb25zLCBkb2VzIG5vdCBleHBvc2UgdW5pbml0aWFsaXplZCBwYWRkaW5nIG9yIHN0cnVjdCBmaWVsZHMgdG8gdXNlciBzcGFjZSwgYW5kIGRvZXMgbm90IGFsdGVyIGxlbmd0aCBjYWxjdWxhdGlvbnMgb3IgYm91bmRzIGNoZWNrcyBpbiBhIHdheSB0aGF0IHdvdWxkIGFsbG93IHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5Llxcbi0gKipLQVNBTiAvIFN0YW5kYXJkIERlYnVnZ2VycyoqOiBTdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGFuZCB0aGUgbmV0d29ya2luZyBzdGFjaydzIGJ1aWx0LWluIGFzc2VydGlvbnMvY2hlY2tzIGFyZSBzdWZmaWNpZW50IHRvIHRlc3Qgc2tiIGNvbnN0cnVjdGlvbiBhbmQgcGFja2V0IHRyYW5zbWlzc2lvbiBpbiBBRl9YRFAuXFxuXFxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgc2luZ2xlIGNhbGwgdG8gYHNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpYCB3aXRoaW4gYHhza19za2JfaW5pdF9taXNjKClgIGluIHRoZSBBRl9YRFAgc3Vic3lzdGVtIChgbmV0L3hkcC94c2suY2ApLlxcblxcbktNU0FOIHZzLiBLQVNBTiBhcHBsaWNhYmlsaXR5IGFuYWx5c2lzOlxcbi0gKipLTVNBTiBSZWxldmFuY2UqKjogS01TQU4gZGV0ZWN0cyB1c2Ugb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYW5kIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXIgc3BhY2UuIFRoZSBwYXRjaCBzaW1wbHkgaW5pdGlhbGl6ZXMgdGhlIGBuZXR3b3JrX2hlYWRlcmAgb2Zmc2V0IG9uIHRoZSBuZXdseSBjcmVhdGVkIGBza19idWZmYCB0byBtYXRjaCBgc2tiLVxcdTAwM2VkYXRhYC4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgc3RhY2svaGVhcCBhbGxvY2F0aW9ucywgZG9lcyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgcGFkZGluZyBvciBzdHJ1Y3QgZmllbGRzIHRvIHVzZXIgc3BhY2UsIGFuZCBkb2VzIG5vdCBhbHRlciBsZW5ndGggY2FsY3VsYXRpb25zIG9yIGJvdW5kcyBjaGVja3MgaW4gYSB3YXkgdGhhdCB3b3VsZCBhbGxvdyByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS5cXG4tICoqS0FTQU4gLyBTdGFuZGFyZCBEZWJ1Z2dlcnMqKjogU3RhbmRhcmQgS0FTQU4gZnV6emluZyBhbmQgdGhlIG5ldHdvcmtpbmcgc3RhY2sncyBidWlsdC1pbiBhc3NlcnRpb25zL2NoZWNrcyBhcmUgc3VmZmljaWVudCB0byB0ZXN0IHNrYiBjb25zdHJ1Y3Rpb24gYW5kIHBhY2tldCB0cmFuc21pc3Npb24gaW4gQUZfWERQLlxcblxcblRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowb8cll[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-03 06:56:15 +0000 UTC FinishedAt: 2026-09-03 07:38:32 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "544d85de4dc22c01badfd8cefa59829ce35c4858", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "XDP_SOCKETS", "BPF_SYSCALL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "544d85de4dc22c01badfd8cefa59829ce35c4858", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "XDP_SOCKETS", "BPF_SYSCALL" ], "series_id": "487e2220-beb7-46f6-b681-2ffdd9c0a705" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "xsk_destruct_skb" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA3OjM2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1hEUF9TT0NLRVRTJiMzNDssCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7eHNrX2Rlc3RydWN0X3NrYiYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBzaW5nbGUgY2FsbCB0byBgc2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYilgIHdpdGhpbiBgeHNrX3NrYl9pbml0X21pc2MoKWAgaW4gdGhlIEFGX1hEUCBzdWJzeXN0ZW0gKGBuZXQveGRwL3hzay5jYCkuXG5cbktNU0FOIHZzLiBLQVNBTiBhcHBsaWNhYmlsaXR5IGFuYWx5c2lzOlxuLSAqKktNU0FOIFJlbGV2YW5jZSoqOiBLTVNBTiBkZXRlY3RzIHVzZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhbmQgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlciBzcGFjZS4gVGhlIHBhdGNoIHNpbXBseSBpbml0aWFsaXplcyB0aGUgYG5ldHdvcmtfaGVhZGVyYCBvZmZzZXQgb24gdGhlIG5ld2x5IGNyZWF0ZWQgYHNrX2J1ZmZgIHRvIG1hdGNoIGBza2ItXHUwMDNlZGF0YWAuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHN0YWNrL2hlYXAgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIHBhZGRpbmcgb3Igc3RydWN0IGZpZWxkcyB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgYWx0ZXIgbGVuZ3RoIGNhbGN1bGF0aW9ucyBvciBib3VuZHMgY2hlY2tzIGluIGEgd2F5IHRoYXQgd291bGQgYWxsb3cgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuXG4tICoqS0FTQU4gLyBTdGFuZGFyZCBEZWJ1Z2dlcnMqKjogU3RhbmRhcmQgS0FTQU4gZnV6emluZyBhbmQgdGhlIG5ldHdvcmtpbmcgc3RhY2smIzM5O3MgYnVpbHQtaW4gYXNzZXJ0aW9ucy9jaGVja3MgYXJlIHN1ZmZpY2llbnQgdG8gdGVzdCBza2IgY29uc3RydWN0aW9uIGFuZCBwYWNrZXQgdHJhbnNtaXNzaW9uIGluIEFGX1hEUC5cblxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoKSB0byB4c2tfc2tiX2luaXRfbWlzYygpIHdoZW4gYnVpbGRpbmcgc2ticyBmb3IgQUZfWERQIHNvY2tldHMgdHJhbnNtaXQuIFRoaXMgbW9kaWZpZXMgY29yZSBuZXR3b3JraW5nIEFGX1hEUCBsb2dpYyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGFuZCBpcyB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA3OjM2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYjA3ZDg1YmY5ZThlZGVjZjdlZmIzMWZhM2NmMmIwODJiNGM1MzQ0YVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDMgMDc6MzY6NTIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3hkcC94c2suYyBiL25ldC94ZHAveHNrLmNcbmluZGV4IDMzNDc1YjE4MGVhNmYuLjIwNzdiYjYyOTljYTkgMTAwNjQ0XG4tLS0gYS9uZXQveGRwL3hzay5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQveGRwL3hzay5jXG5AQCAtOTQ3LDYgJiM0Mzs5NDcsOCBAQCBzdGF0aWMgaW50IHhza19za2JfaW5pdF9taXNjKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4ZHBfc29jayAqeHMsXG4ge1xuIFx0aW50IGVycjtcbiBcbiYjNDM7XHRza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKTtcbiYjNDM7XG4gXHRlcnIgPSB4c2tfc2tiX2Rlc3RydWN0b3Jfc2V0X2FkZHIoc2tiLCBhZGRyKTtcbiBcdGlmICh1bmxpa2VseShlcnIpKVxuIFx0XHRyZXR1cm4gZXJyO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA3OjM2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1hEUF9TT0NLRVRTJiMzNDssCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7eHNrX2Rlc3RydWN0X3NrYiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcigpIHRvIHhza19za2JfaW5pdF9taXNjKCkgd2hlbiBidWlsZGluZyBza2JzIGZvciBBRl9YRFAgc29ja2V0cyB0cmFuc21pdC4gVGhpcyBtb2RpZmllcyBjb3JlIG5ldHdvcmtpbmcgQUZfWERQIGxvZ2ljIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgYW5kIGlzIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBiMDdkODViZjllOGVkZWNmN2VmYjMxZmEzY2YyYjA4MmI0YzUzNDRhCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBTZXAgMyAwNzozNjo1MiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC94ZHAveHNrLmMgYi9uZXQveGRwL3hzay5jCmluZGV4IDMzNDc1YjE4MGVhNmYuLjIwNzdiYjYyOTljYTkgMTAwNjQ0Ci0tLSBhL25ldC94ZHAveHNrLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3hkcC94c2suYwpAQCAtOTQ3LDYgJiM0Mzs5NDcsOCBAQCBzdGF0aWMgaW50IHhza19za2JfaW5pdF9taXNjKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4ZHBfc29jayAqeHMsCiB7CiAJaW50IGVycjsKIAomIzQzOwlza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKTsKJiM0MzsKIAllcnIgPSB4c2tfc2tiX2Rlc3RydWN0b3Jfc2V0X2FkZHIoc2tiLCBhZGRyKTsKIAlpZiAodW5saWtlbHkoZXJyKSkKIAkJcmV0dXJuIGVycjsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDc6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA2MQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI5MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgQ29tbWl0IGBiMDdkODViZjllOGVkZWNmN2VmYjMxZmEzY2YyYjA4MmI0YzUzNDRhYCoqCgpPa2F5LCBzbyB0aGUgdGFzayBhdCBoYW5kIGlzIHRvIGRpc3NlY3QgY29tbWl0IGBiMDdkODViZjllOGVkZWNmN2VmYjMxZmEzY2YyYjA4MmI0YzUzNDRhYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBjaGFuZ2VkIGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRob3NlIGNoYW5nZXMuIExldCYjMzk7cyBzdGFydCBieSBsb29raW5nIGRpcmVjdGx5IGF0IHRoZSBkaWZmLgoKQWxyaWdodCwgYSBzaW1wbGUgYWRkaXRpb24uIFRoZSBkaWZmIHNob3dzIGEgc2luZ2xlIGxpbmUgYmVpbmcgaW5zZXJ0ZWQ6IGBza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKTtgIHdpdGhpbiB0aGUgYHhza19za2JfaW5pdF9taXNjKClgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgaW4gdGhlIGBuZXQveGRwL3hzay5jYCBmaWxlLiBUaGlzIGlzIGNydWNpYWw7IHJlc2V0dGluZyB0aGUgbmV0d29yayBoZWFkZXIgc3VnZ2VzdHMgc29tZXRoaW5nIHNpZ25pZmljYW50IGFib3V0IGhvdyB0aGUgU0tCJiMzOTtzIG5ldHdvcmsgbGF5ZXIgaW5mb3JtYXRpb24gaXMgaGFuZGxlZCwgb3IgbmVlZHMgdG8gYmUgaGFuZGxlZCwgcHJpb3IgdG8gZnVydGhlciBwcm9jZXNzaW5nLCBsaWtlbHkgcmVsYXRlZCB0byBYRFAgc29ja2V0cy4gVGhlIHByZXNlbmNlIG9mIHRoZSBgdW5saWtlbHkoKWAgbWFjcm8gaW4gdGhlIHN1YnNlcXVlbnQgZnVuY3Rpb24gY2FsbCBpbXBsaWVzIHRoZSBhZGRlZCBsaW5lIGlzIGludGVuZGVkIHRvIGltcHJvdmUgcGVyZm9ybWFuY2UgaW4gdGhlIGNvbW1vbiBjYXNlLgoKTm93IEkgbmVlZCB0byB1bmRlcnN0YW5kICp3aHkqIHRoaXMgY2hhbmdlIHdhcyBtYWRlLiBJdCYjMzk7cyBub3QgZW5vdWdoIHRvIHNpbXBseSBzZWUgdGhlIGxpbmUgb2YgY29kZS4gSSBuZWVkIGNvbnRleHQuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gYG5ldC94ZHAveHNrLmNgIGFyb3VuZCBsaW5lIDk0NywgYW5kIHRoZSBwb3NzaWJsZSByZWFzb25zIGZvciByZXNldHRpbmcgdGhlIG5ldHdvcmsgaGVhZGVyLiBJJiMzOTtsbCBwcm9iYWJseSBsb29rIHRvIHJlYWQgdGhlIGZpbGUgd2l0aCBgcmVhZC1maWxlYCwgb3IgdXNlIGBncmVwcGVyYCB0byBmaW5kIHJlbGF0ZWQgY29kZSBhbmQgZG9jdW1lbnRhdGlvbi4gU3BlY2lmaWNhbGx5LCBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bmN0aW9uIG9mIGB4c2tfc2tiX2luaXRfbWlzYygpYCwgaG93IGl0JiMzOTtzIHVzZWQgaW4gdGhlIFhEUCBzb2NrZXQgbGlmZWN5Y2xlLCBhbmQgaG93IHRoZSBuZXR3b3JrIGhlYWRlciBpcyBzdWJzZXF1ZW50bHkgdXRpbGl6ZWQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQmIzM5O3MgZGlmZmVyZW50IGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIGNoYW5nZSB0byBjb21wcmVoZW5kIHdoYXQgaXMgYmVpbmcgZml4ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDc6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQveGRwL3hzay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA5MzA6XHRcbiA5MzE6XHRJTkRJUkVDVF9DQUxMQUJMRV9TQ09QRVxuIDkzMjpcdHZvaWQgeHNrX2Rlc3RydWN0X3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIDkzMzpcdHtcbiA5MzQ6XHRcdHN0cnVjdCB4c2tfdHhfbWV0YWRhdGFfY29tcGwgKmNvbXBsID0gXHUwMDI2c2tiX3NoaW5mbyhza2IpLVx1MDAzZXhza19tZXRhO1xuIDkzNTpcdFxuIDkzNjpcdFx0aWYgKGNvbXBsLVx1MDAzZXR4X3RpbWVzdGFtcCkge1xuIDkzNzpcdFx0XHQvKiBzdyBjb21wbGV0aW9uIHRpbWVzdGFtcCwgbm90IGEgcmVhbCBvbmUgKi9cbiA5Mzg6XHRcdFx0KmNvbXBsLVx1MDAzZXR4X3RpbWVzdGFtcCA9IGt0aW1lX2dldF90YWlfZmFzdF9ucygpO1xuIDkzOTpcdFx0fVxuIDk0MDpcdFxuIDk0MTpcdFx0eHNrX2NxX3N1Ym1pdF9hZGRyX2xvY2tlZCh4ZHBfc2soc2tiLVx1MDAzZXNrKS1cdTAwM2Vwb29sLCBza2IpO1xuIDk0MjpcdFx0c29ja193ZnJlZShza2IpO1xuIDk0MzpcdH1cbiA5NDQ6XHRcbiA5NDU6XHRzdGF0aWMgaW50IHhza19za2JfaW5pdF9taXNjKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4ZHBfc29jayAqeHMsXG4gOTQ2Olx0XHRcdFx0ICAgICB1NjQgYWRkcilcbiA5NDc6XHR7XG4gOTQ4Olx0XHRpbnQgZXJyO1xuIDk0OTpcdFxuIDk1MDpcdFx0c2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYik7XG4gOTUxOlx0XG4gOTUyOlx0XHRlcnIgPSB4c2tfc2tiX2Rlc3RydWN0b3Jfc2V0X2FkZHIoc2tiLCBhZGRyKTtcbiA5NTM6XHRcdGlmICh1bmxpa2VseShlcnIpKVxuIDk1NDpcdFx0XHRyZXR1cm4gZXJyO1xuIDk1NTpcdFxuIDk1NjpcdFx0c2tiLVx1MDAzZWRldiA9IHhzLVx1MDAzZWRldjtcbiA5NTc6XHRcdHNrYi1cdTAwM2Vwcmlvcml0eSA9IFJFQURfT05DRSh4cy1cdTAwM2Vzay5za19wcmlvcml0eSk7XG4gOTU4Olx0XHRza2ItXHUwMDNlbWFyayA9IFJFQURfT05DRSh4cy1cdTAwM2Vzay5za19tYXJrKTtcbiA5NTk6XHRcdHNrYi1cdTAwM2VkZXN0cnVjdG9yID0geHNrX2Rlc3RydWN0X3NrYjtcbiA5NjA6XHRcdHJldHVybiAwO1xuIDk2MTpcdH1cbiA5NjI6XHRcbiA5NjM6XHRzdGF0aWMgdm9pZCB4c2tfY29uc3VtZV9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYilcbiA5NjQ6XHR7XG4gOTY1Olx0XHRzdHJ1Y3QgeGRwX3NvY2sgKnhzID0geGRwX3NrKHNrYi1cdTAwM2Vzayk7XG4gOTY2Olx0XHR1MzIgbnVtX2Rlc2NzID0geHNrX2dldF9udW1fZGVzYyhza2IpO1xuIDk2NzpcdFx0c3RydWN0IHhza19hZGRycyAqeHNrX2FkZHI7XG4gOTY4Olx0XG4gOTY5Olx0XHRpZiAodW5saWtlbHkoIXhza19za2JfZGVzdHJ1Y3Rvcl9pc19hZGRyKHNrYikpKSB7XG4gOTcwOlx0XHRcdHhza19hZGRyID0gKHN0cnVjdCB4c2tfYWRkcnMgKilza2Jfc2hpbmZvKHNrYiktXHUwMDNlZGVzdHJ1Y3Rvcl9hcmc7XG4gOTcxOlx0XHRcdGttZW1fY2FjaGVfZnJlZSh4c2tfdHhfZ2VuZXJpY19jYWNoZSwgeHNrX2FkZHIpO1xuIDk3MjpcdFx0fVxuIDk3MzpcdFxuIDk3NDpcdFx0c2tiLVx1MDAzZWRlc3RydWN0b3IgPSBzb2NrX3dmcmVlO1xuIDk3NTpcdFx0eHNrX2NxX2NhbmNlbF9sb2NrZWQoeHMtXHUwMDNlcG9vbCwgbnVtX2Rlc2NzKTtcbiA5NzY6XHRcdC8qIEZyZWUgc2tiIHdpdGhvdXQgdHJpZ2dlcmluZyB0aGUgcGVyZiBkcm9wIHRyYWNlICovXG4gOTc3Olx0XHRjb25zdW1lX3NrYihza2IpO1xuIDk3ODpcdFx0eHMtXHUwMDNlc2tiID0gTlVMTDtcbiA5Nzk6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDc6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzYyOQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYHhza19za2JfaW5pdF9taXNjYCBmdW5jdGlvbiBhbmQgc2VlIHdoYXQmIzM5O3MgZ29pbmcgb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjb250ZXh0IHdpdGhpbiB0aGUgWERQL1hTSyBmcmFtZXdvcmsuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHRyYWNlIGl0cyBjYWxscywgYW5kIHVuZGVyc3RhbmQgaXRzIGFyZ3VtZW50cyAtIGFuZCBsb29rIGZvciB0aGUgY2FsbGluZyBwYXR0ZXJuIGZyb20gdGhlIHBsYWNlcyB3aGVyZSBpdCYjMzk7cyBiZWluZyB1c2VkLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgSSYjMzk7bGwgbmVlZCB0byByZWFkIG1vcmUgb2YgYG5ldC94ZHAveHNrLmNgIHRvIGdldCB0aGUgYmlnZ2VyIHBpY3R1cmUuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoaXMgaW5pdGlhbGl6YXRpb24gaXMgdXRpbGl6ZWQgd2l0aGluIHRoZSBYU0sgc3RydWN0dXJlLiBVbHRpbWF0ZWx5LCB0aGUgZ29hbCBpcyB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGxpdHRsZSBwaWVjZSBmaXRzIGludG8gdGhlIG92ZXJhbGwgcGVyZm9ybWFuY2UgcHJvZmlsZSAtIGFuZCB3aGVyZSBwb3RlbnRpYWwgYm90dGxlbmVja3MgY291bGQgYmUuIEl0JiMzOTtzIHRpbWUgdG8gZGlnIGluIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA3OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hza19za2JfaW5pdF9taXNjJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hkcC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hkcC94c2suYz05MzI9dm9pZCB4c2tfZGVzdHJ1Y3Rfc2tiKHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L3hkcC94c2suYy05NDQtXG5uZXQveGRwL3hzay5jOjk0NTpzdGF0aWMgaW50IHhza19za2JfaW5pdF9taXNjKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4ZHBfc29jayAqeHMsXG5uZXQveGRwL3hzay5jLTk0Ni1cdFx0XHQgICAgIHU2NCBhZGRyKVxuLS1cbm5ldC94ZHAveHNrLmM9MTExMT1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhza19idWlsZF9za2Ioc3RydWN0IHhkcF9zb2NrICp4cyxcbi0tXG5uZXQveGRwL3hzay5jLTExODYtXHRpZiAoIXhzLVx1MDAzZXNrYikge1xubmV0L3hkcC94c2suYzoxMTg3Olx0XHRlcnIgPSB4c2tfc2tiX2luaXRfbWlzYyhza2IsIHhzLCBkZXNjLVx1MDAzZWFkZHIpO1xubmV0L3hkcC94c2suYy0xMTg4LVx0XHRpZiAodW5saWtlbHkoZXJyKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwNzozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTE5CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIFhTSyBQYWNrZXQgVHJhbnNtaXNzaW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IFhTSyBwYWNrZXRzIGFyZSBhY3R1YWxseSBtb3ZlZCBhcm91bmQgYW5kIHByb2Nlc3NlZC4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgYHhza19idWlsZF9za2JgIGZ1bmN0aW9uIGFuZCB0aGUgc3Vycm91bmRpbmcgY29udGV4dC4gVGltZSB0byBjcmFjayBvcGVuIGBuZXQveGRwL3hzay5jYCwgc3BlY2lmaWNhbGx5IGxpbmVzIDExMDAgdGhyb3VnaCAxMjUwLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBzcGVjaWZpY3MgSSYjMzk7bSBsb29raW5nIGZvci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG1lY2hhbmljcyBvZiB0aGUgcGFja2V0JiMzOTtzIGpvdXJuZXk6IGhvdyBpdCBnZXRzIGJ1aWx0IGludG8gYW4gU0tCIChTb2NrZXQgQnVmZmVyKSwgYW5kIHRoZW4gd2hlcmUgaXQgZ29lcyBmcm9tIHRoZXJlIHdpdGhpbiB0aGUgWFNLIGZyYW1ld29yay4gVGhpcyBwYXJ0aWN1bGFyIHNlZ21lbnQgb2YgdGhlIGNvZGUgbGlrZWx5IGRlYWxzIHdpdGggdGhlIGNyaXRpY2FsIHBhdGggb2YgdGhlIHBhY2tldCYjMzk7cyBsaWZlY3ljbGUsIHNvIHVuZGVyc3RhbmRpbmcgdGhpcyBpcyBlc3NlbnRpYWwgdG8gdGhlIFhTSyBwcm9jZXNzaW5nIG1vZGVsLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBjbHVlcyBhYm91dCB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGUgdXNlci1zcGFjZSBhcHBsaWNhdGlvbiwgdGhlIFhEUCBwcm9ncmFtLCBhbmQgdGhlIGtlcm5lbCBuZXR3b3JrIHN0YWNrIGluIHRoaXMgY3J1Y2lhbCBzdGVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA3OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3hkcC94c2suYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzExMDA6XHRcdH1cbjExMDE6XHRcbjExMDI6XHRcdHNrYi1cdTAwM2VsZW4gJiM0Mzs9IGxlbjtcbjExMDM6XHRcdHNrYi1cdTAwM2VkYXRhX2xlbiAmIzQzOz0gbGVuO1xuMTEwNDpcdFx0c2tiLVx1MDAzZXRydWVzaXplICYjNDM7PSB0cztcbjExMDU6XHRcbjExMDY6XHRcdHJlZmNvdW50X2FkZCh0cywgXHUwMDI2eHMtXHUwMDNlc2suc2tfd21lbV9hbGxvYyk7XG4xMTA3Olx0XG4xMTA4Olx0XHRyZXR1cm4gc2tiO1xuMTEwOTpcdH1cbjExMTA6XHRcbjExMTE6XHRzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhza19idWlsZF9za2Ioc3RydWN0IHhkcF9zb2NrICp4cyxcbjExMTI6XHRcdFx0XHRcdCAgICAgc3RydWN0IHhkcF9kZXNjICpkZXNjKVxuMTExMzpcdHtcbjExMTQ6XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSB4cy1cdTAwM2VkZXY7XG4xMTE1Olx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0geHMtXHUwMDNlc2tiO1xuMTExNjpcdFx0aW50IGVycjtcbjExMTc6XHRcbjExMTg6XHRcdGlmIChkZXYtXHUwMDNlcHJpdl9mbGFncyBcdTAwMjYgSUZGX1RYX1NLQl9OT19MSU5FQVIpIHtcbjExMTk6XHRcdFx0c2tiID0geHNrX2J1aWxkX3NrYl96ZXJvY29weSh4cywgZGVzYyk7XG4xMTIwOlx0XHRcdGlmIChJU19FUlIoc2tiKSkge1xuMTEyMTpcdFx0XHRcdGVyciA9IFBUUl9FUlIoc2tiKTtcbjExMjI6XHRcdFx0XHRza2IgPSBOVUxMO1xuMTEyMzpcdFx0XHRcdGdvdG8gZnJlZV9lcnI7XG4xMTI0Olx0XHRcdH1cbjExMjU6XHRcdH0gZWxzZSB7XG4xMTI2Olx0XHRcdHUzMiBociwgdHIsIGxlbjtcbjExMjc6XHRcdFx0dm9pZCAqYnVmZmVyO1xuMTEyODpcdFxuMTEyOTpcdFx0XHRidWZmZXIgPSB4c2tfYnVmZl9yYXdfZ2V0X2RhdGEoeHMtXHUwMDNlcG9vbCwgZGVzYy1cdTAwM2VhZGRyKTtcbjExMzA6XHRcdFx0bGVuID0gZGVzYy1cdTAwM2VsZW47XG4xMTMxOlx0XG4xMTMyOlx0XHRcdGlmICghc2tiKSB7XG4xMTMzOlx0XHRcdFx0aHIgPSBtYXgoTkVUX1NLQl9QQUQsIEwxX0NBQ0hFX0FMSUdOKGRldi1cdTAwM2VuZWVkZWRfaGVhZHJvb20pKTtcbjExMzQ6XHRcdFx0XHR0ciA9IGRldi1cdTAwM2VuZWVkZWRfdGFpbHJvb207XG4xMTM1Olx0XHRcdFx0c2tiID0gc29ja19hbGxvY19zZW5kX3NrYihcdTAwMjZ4cy1cdTAwM2VzaywgaHIgJiM0MzsgbGVuICYjNDM7IHRyLCAxLCBcdTAwMjZlcnIpO1xuMTEzNjpcdFx0XHRcdGlmICh1bmxpa2VseSghc2tiKSlcbjExMzc6XHRcdFx0XHRcdGdvdG8gZnJlZV9lcnI7XG4xMTM4Olx0XG4xMTM5Olx0XHRcdFx0c2tiX3Jlc2VydmUoc2tiLCBocik7XG4xMTQwOlx0XHRcdFx0c2tiX3B1dChza2IsIGxlbik7XG4xMTQxOlx0XG4xMTQyOlx0XHRcdFx0ZXJyID0gc2tiX3N0b3JlX2JpdHMoc2tiLCAwLCBidWZmZXIsIGxlbik7XG4xMTQzOlx0XHRcdFx0aWYgKHVubGlrZWx5KGVycikpXG4xMTQ0Olx0XHRcdFx0XHRnb3RvIGZyZWVfZXJyO1xuMTE0NTpcdFxuMTE0NjpcdFx0XHRcdGlmIChkZXNjLVx1MDAzZW9wdGlvbnMgXHUwMDI2IFhEUF9UWF9NRVRBREFUQSkge1xuMTE0NzpcdFx0XHRcdFx0ZXJyID0geHNrX3NrYl9tZXRhZGF0YShza2IsIGJ1ZmZlciwgZGVzYyxcbjExNDg6XHRcdFx0XHRcdFx0XHQgICAgICAgeHMtXHUwMDNlcG9vbCwgaHIpO1xuMTE0OTpcdFx0XHRcdFx0aWYgKHVubGlrZWx5KGVycikpXG4xMTUwOlx0XHRcdFx0XHRcdGdvdG8gZnJlZV9lcnI7XG4xMTUxOlx0XHRcdFx0fVxuMTE1MjpcdFx0XHR9IGVsc2Uge1xuMTE1MzpcdFx0XHRcdGludCBucl9mcmFncyA9IHNrYl9zaGluZm8oc2tiKS1cdTAwM2Vucl9mcmFncztcbjExNTQ6XHRcdFx0XHRzdHJ1Y3QgeHNrX2FkZHJzICp4c2tfYWRkcjtcbjExNTU6XHRcdFx0XHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbjExNTY6XHRcdFx0XHR1OCAqdmFkZHI7XG4xMTU3Olx0XG4xMTU4Olx0XHRcdFx0eHNrX2FkZHIgPSB4c2tfYWRkcnNfYWxsb2Moc2tiKTtcbjExNTk6XHRcdFx0XHRpZiAoIXhza19hZGRyKSB7XG4xMTYwOlx0XHRcdFx0XHRlcnIgPSAtRU5PTUVNO1xuMTE2MTpcdFx0XHRcdFx0Z290byBmcmVlX2VycjtcbjExNjI6XHRcdFx0XHR9XG4xMTYzOlx0XG4xMTY0Olx0XHRcdFx0eHNrX2FkZHItXHUwMDNlYWRkcnNbeHNrX2FkZHItXHUwMDNlbnVtX2Rlc2NzXSA9IGRlc2MtXHUwMDNlYWRkcjtcbjExNjU6XHRcbjExNjY6XHRcdFx0XHRpZiAodW5saWtlbHkobnJfZnJhZ3MgPT0gKE1BWF9TS0JfRlJBR1MgLSAxKSBcdTAwMjZcdTAwMjYgeHBfbWJfZGVzYyhkZXNjKSkpIHtcbjExNjc6XHRcdFx0XHRcdGVyciA9IC1FT1ZFUkZMT1c7XG4xMTY4Olx0XHRcdFx0XHRnb3RvIGZyZWVfZXJyO1xuMTE2OTpcdFx0XHRcdH1cbjExNzA6XHRcbjExNzE6XHRcdFx0XHRwYWdlID0gYWxsb2NfcGFnZSh4cy1cdTAwM2Vzay5za19hbGxvY2F0aW9uKTtcbjExNzI6XHRcdFx0XHRpZiAodW5saWtlbHkoIXBhZ2UpKSB7XG4xMTczOlx0XHRcdFx0XHRlcnIgPSAtRUFHQUlOO1xuMTE3NDpcdFx0XHRcdFx0Z290byBmcmVlX2VycjtcbjExNzU6XHRcdFx0XHR9XG4xMTc2Olx0XG4xMTc3Olx0XHRcdFx0dmFkZHIgPSBrbWFwX2xvY2FsX3BhZ2UocGFnZSk7XG4xMTc4Olx0XHRcdFx0bWVtY3B5KHZhZGRyLCBidWZmZXIsIGxlbik7XG4xMTc5Olx0XHRcdFx0a3VubWFwX2xvY2FsKHZhZGRyKTtcbjExODA6XHRcbjExODE6XHRcdFx0XHRza2JfYWRkX3J4X2ZyYWcoc2tiLCBucl9mcmFncywgcGFnZSwgMCwgbGVuLCBQQUdFX1NJWkUpO1xuMTE4MjpcdFx0XHRcdHJlZmNvdW50X2FkZChQQUdFX1NJWkUsIFx1MDAyNnhzLVx1MDAzZXNrLnNrX3dtZW1fYWxsb2MpO1xuMTE4MzpcdFx0XHR9XG4xMTg0Olx0XHR9XG4xMTg1Olx0XG4xMTg2Olx0XHRpZiAoIXhzLVx1MDAzZXNrYikge1xuMTE4NzpcdFx0XHRlcnIgPSB4c2tfc2tiX2luaXRfbWlzYyhza2IsIHhzLCBkZXNjLVx1MDAzZWFkZHIpO1xuMTE4ODpcdFx0XHRpZiAodW5saWtlbHkoZXJyKSlcbjExODk6XHRcdFx0XHRnb3RvIGZyZWVfZXJyO1xuMTE5MDpcdFx0fVxuMTE5MTpcdFx0eHNrX2luY19udW1fZGVzYyhza2IpO1xuMTE5MjpcdFxuMTE5MzpcdFx0cmV0dXJuIHNrYjtcbjExOTQ6XHRcbjExOTU6XHRmcmVlX2VycjpcbjExOTY6XHRcdGlmIChza2IgXHUwMDI2XHUwMDI2ICF4cy1cdTAwM2Vza2IpXG4xMTk3Olx0XHRcdGtmcmVlX3NrYihza2IpO1xuMTE5ODpcdFxuMTE5OTpcdFx0aWYgKGVyciA9PSAtRU9WRVJGTE9XKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDc6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTkwMwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRpdmluZyBpbnRvIEFGX1hEUCBhbmQgeHNrX2J1aWxkX3NrYioqCgpPa2F5LCBzbyBJIHdhbnQgdG8gZ2V0IGEgc29saWQgZ3Jhc3Agb2YgaG93IEFGX1hEUCBhbmQsIHNwZWNpZmljYWxseSwgdGhlIGB4c2tfYnVpbGRfc2tiYCBmdW5jdGlvbiwgYXJlIGZ1bmN0aW9uaW5nLiBNeSBmaXJzdCBpbnN0aW5jdCwgYXMgYWx3YXlzLCBpcyB0byB0cmFjZSBpdHMgdXNhZ2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjYWxsIGZsb3cg4oCTIHdoZXJlIGlzIHRoaXMgdGhpbmcgYWN0dWFsbHkgYmVpbmcgKnVzZWQqPyBUaGlzIG1lYW5zIGdldHRpbmcgdGhlIGNhbGwgZ3JhcGggZm9yIGB4c2tfYnVpbGRfc2tiYCwgc2VlaW5nIHRoZSBpbW1lZGlhdGUgY2FsbGVycy4gQWx0ZXJuYXRpdmVseSwgc2luY2UgaXQgaXMgdXNlZCBpbiBBRl9YRFAsIGEgYnJvYWRlciBzZWFyY2ggd291bGQgYmUgdG8gZmluZCBjYWxsZXJzIGluIHRoZSBgbmV0L3hkcC94c2suY2Agc291cmNlIGZpbGUuIFVuZGVyc3RhbmRpbmcgdGhlc2UgY29udGV4dHMgd2lsbCBwYWludCBhIGNsZWFyZXIgcGljdHVyZSBvZiBob3cgQUZfWERQIGlzIHB1dCB0b2dldGhlci4gSXQgd2lsbCBzaG93IG1lIHRoZSBkYXRhIGZsb3cgYW5kIGhvdyB0aGUgcGFydHMgbGluayB0b2dldGhlci4gVGhpcyBpcyB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIHJlYWxseSBkaWdnaW5nIGludG8gdGhlIGRldGFpbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA3OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hza19idWlsZF9za2ImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGRwLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGRwL3hzay5jPTk5MD1zdGF0aWMgaW50IHhza19za2JfbWV0YWRhdGEoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdm9pZCAqYnVmZmVyLFxuLS1cbm5ldC94ZHAveHNrLmMtMTAzNC1cbm5ldC94ZHAveHNrLmM6MTAzNTpzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhza19idWlsZF9za2JfemVyb2NvcHkoc3RydWN0IHhkcF9zb2NrICp4cyxcbm5ldC94ZHAveHNrLmMtMTAzNi1cdFx0XHRcdFx0ICAgICAgc3RydWN0IHhkcF9kZXNjICpkZXNjKVxuLS1cbm5ldC94ZHAveHNrLmMtMTExMC1cbm5ldC94ZHAveHNrLmM6MTExMTpzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhza19idWlsZF9za2Ioc3RydWN0IHhkcF9zb2NrICp4cyxcbm5ldC94ZHAveHNrLmMtMTExMi1cdFx0XHRcdCAgICAgc3RydWN0IHhkcF9kZXNjICpkZXNjKVxuLS1cbm5ldC94ZHAveHNrLmMtMTExOC1cdGlmIChkZXYtXHUwMDNlcHJpdl9mbGFncyBcdTAwMjYgSUZGX1RYX1NLQl9OT19MSU5FQVIpIHtcbm5ldC94ZHAveHNrLmM6MTExOTpcdFx0c2tiID0geHNrX2J1aWxkX3NrYl96ZXJvY29weSh4cywgZGVzYyk7XG5uZXQveGRwL3hzay5jLTExMjAtXHRcdGlmIChJU19FUlIoc2tiKSkge1xuLS1cbm5ldC94ZHAveHNrLmM9MTIxNz1zdGF0aWMgaW50IF9feHNrX2dlbmVyaWNfeG1pdChzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L3hkcC94c2suYy0xMjYzLVxubmV0L3hkcC94c2suYzoxMjY0Olx0XHRza2IgPSB4c2tfYnVpbGRfc2tiKHhzLCBcdTAwMjZkZXNjKTtcbm5ldC94ZHAveHNrLmMtMTI2NS1cdFx0aWYgKElTX0VSUihza2IpKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA3OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY2MTIKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA3NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgdGhlIEFGX1hEUCBHZW5lcmljIFRyYW5zbWl0IFBhdGgqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhlIGBfX3hza19nZW5lcmljX3htaXRgIGZ1bmN0aW9uLiBJdCYjMzk7cyBjbGVhcmx5IGEga2V5IGNvbXBvbmVudCBvZiB0aGUgQUZfWERQIChYU0sgLSBYRFAgU29ja2V0cykgZ2VuZXJpYyB0cmFuc21pdCBwYXRoLiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byB1bmRlcnN0YW5kIHdoYXQgYWN0dWFsbHkgKnRyaWdnZXJzKiB0aGlzIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdHJhY2UgdGhlIGNhbGwgcGF0aHMgdG8gZmlndXJlIG91dCBob3cgcGFja2V0cyBlbmQgdXAgYmVpbmcgdHJhbnNtaXR0ZWQgdmlhIGBfX3hza19nZW5lcmljX3htaXRgLgoKSSYjMzk7bGwgYmUgbG9va2luZyBzcGVjaWZpY2FsbHkgYXQgdGhlIEFGX1hEUCBzb2NrZXQgQVBJIHVzYWdlLiBJIGV4cGVjdCBpdCBpcyBwcm9iYWJseSBpbnZvbHZlZCBpbiBlaXRoZXIgdGhlIGBzZW5kbXNnYCBzeXNjYWxsIG9yIHRoZSBgcG9sbGAgc3lzdGVtIGNhbGwgd2hlbiB1c2VkIHdpdGggWERQIHNvY2tldHMuIEkmIzM5O2xsIG5lZWQgdG8gc2VlIGhvdyB0aGVzZSBjYWxscyBpbnRlcmFjdCB3aXRoIHRoZSB1bmRlcmx5aW5nIFhTSyBkYXRhIHN0cnVjdHVyZXMgdG8gZmlndXJlIG91dCB3aGVuIGFuZCB3aHkgYF9feHNrX2dlbmVyaWNfeG1pdGAgZ2V0cyBpbnZva2VkLCBhbmQgb24gd2hpY2ggQUZfWERQIHNvY2tldCBpbnN0YW5jZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA3OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3hkcC94c2suYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyMTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogOTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTIxNTpcdH1cbjEyMTY6XHRcbjEyMTc6XHRzdGF0aWMgaW50IF9feHNrX2dlbmVyaWNfeG1pdChzdHJ1Y3Qgc29jayAqc2spXG4xMjE4Olx0e1xuMTIxOTpcdFx0c3RydWN0IHhkcF9zb2NrICp4cyA9IHhkcF9zayhzayk7XG4xMjIwOlx0XHRzdHJ1Y3QgeGRwX2Rlc2MgZGVzYztcbjEyMjE6XHRcdHN0cnVjdCBza19idWZmICpza2I7XG4xMjIyOlx0XHR1MzIgY2FjaGVkX2NvbnM7XG4xMjIzOlx0XHR1MzIgbWF4X2JhdGNoO1xuMTIyNDpcdFx0aW50IGVyciA9IDA7XG4xMjI1Olx0XG4xMjI2Olx0XHRtdXRleF9sb2NrKFx1MDAyNnhzLVx1MDAzZW11dGV4KTtcbjEyMjc6XHRcdGNhY2hlZF9jb25zID0geHMtXHUwMDNldHgtXHUwMDNlY2FjaGVkX2NvbnM7XG4xMjI4Olx0XG4xMjI5Olx0XHQvKiBTaW5jZSB3ZSBkcm9wcGVkIHRoZSBSQ1UgcmVhZCBsb2NrLCB0aGUgc29ja2V0IHN0YXRlIG1pZ2h0IGhhdmUgY2hhbmdlZC4gKi9cbjEyMzA6XHRcdGlmICh1bmxpa2VseSgheHNrX2lzX2JvdW5kKHhzKSkpIHtcbjEyMzE6XHRcdFx0ZXJyID0gLUVOWElPO1xuMTIzMjpcdFx0XHRnb3RvIG91dDtcbjEyMzM6XHRcdH1cbjEyMzQ6XHRcbjEyMzU6XHRcdGlmICh4cy1cdTAwM2VxdWV1ZV9pZCBcdTAwM2U9IHhzLVx1MDAzZWRldi1cdTAwM2VyZWFsX251bV90eF9xdWV1ZXMpXG4xMjM2Olx0XHRcdGdvdG8gb3V0O1xuMTIzNzpcdFxuMTIzODpcdFx0bWF4X2JhdGNoID0gUkVBRF9PTkNFKHhzLVx1MDAzZW1heF90eF9idWRnZXQpO1xuMTIzOTpcdFx0d2hpbGUgKHhza3FfY29uc19wZWVrX2Rlc2MoeHMtXHUwMDNldHgsIFx1MDAyNmRlc2MsIHhzLVx1MDAzZXBvb2wpKSB7XG4xMjQwOlx0XHRcdGlmIChtYXhfYmF0Y2gtLSA9PSAwKSB7XG4xMjQxOlx0XHRcdFx0ZXJyID0gLUVBR0FJTjtcbjEyNDI6XHRcdFx0XHRnb3RvIG91dDtcbjEyNDM6XHRcdFx0fVxuMTI0NDpcdFxuMTI0NTpcdFx0XHQvKiBUaGlzIGlzIHRoZSBiYWNrcHJlc3N1cmUgbWVjaGFuaXNtIGZvciB0aGUgVHggcGF0aC5cbjEyNDY6XHRcdFx0ICogUmVzZXJ2ZSBzcGFjZSBpbiB0aGUgY29tcGxldGlvbiBxdWV1ZSBhbmQgb25seSBwcm9jZWVkXG4xMjQ3Olx0XHRcdCAqIGlmIHRoZXJlIGlzIHNwYWNlIGluIGl0LiBUaGlzIGF2b2lkcyBoYXZpbmcgdG8gaW1wbGVtZW50XG4xMjQ4Olx0XHRcdCAqIGFueSBidWZmZXJpbmcgaW4gdGhlIFR4IHBhdGguXG4xMjQ5Olx0XHRcdCAqL1xuMTI1MDpcdFx0XHRlcnIgPSB4c2tfY3FfcmVzZXJ2ZV9sb2NrZWQoeHMtXHUwMDNlcG9vbCk7XG4xMjUxOlx0XHRcdGlmIChlcnIpIHtcbjEyNTI6XHRcdFx0XHRlcnIgPSAtRUFHQUlOO1xuMTI1MzpcdFx0XHRcdGdvdG8gb3V0O1xuMTI1NDpcdFx0XHR9XG4xMjU1Olx0XG4xMjU2Olx0XHRcdGlmICh1bmxpa2VseSh4cy1cdTAwM2VkcmFpbl9jb250KSkge1xuMTI1NzpcdFx0XHRcdHhza19jcV9zdWJtaXRfYWRkcl9zaW5nbGVfbG9ja2VkKHhzLVx1MDAzZXBvb2wsIFx1MDAyNmRlc2MpO1xuMTI1ODpcdFx0XHRcdHhzLVx1MDAzZXR4LVx1MDAzZWludmFsaWRfZGVzY3MmIzQzOyYjNDM7O1xuMTI1OTpcdFx0XHRcdHhza3FfY29uc19yZWxlYXNlKHhzLVx1MDAzZXR4KTtcbjEyNjA6XHRcdFx0XHR4cy1cdTAwM2VkcmFpbl9jb250ID0geHBfbWJfZGVzYyhcdTAwMjZkZXNjKTtcbjEyNjE6XHRcdFx0XHRjb250aW51ZTtcbjEyNjI6XHRcdFx0fVxuMTI2MzpcdFxuMTI2NDpcdFx0XHRza2IgPSB4c2tfYnVpbGRfc2tiKHhzLCBcdTAwMjZkZXNjKTtcbjEyNjU6XHRcdFx0aWYgKElTX0VSUihza2IpKSB7XG4xMjY2Olx0XHRcdFx0ZXJyID0gUFRSX0VSUihza2IpO1xuMTI2NzpcdFx0XHRcdGlmIChlcnIgIT0gLUVPVkVSRkxPVylcbjEyNjg6XHRcdFx0XHRcdGdvdG8gb3V0O1xuMTI2OTpcdFx0XHRcdGlmICh4cF9tYl9kZXNjKFx1MDAyNmRlc2MpKVxuMTI3MDpcdFx0XHRcdFx0eHMtXHUwMDNlZHJhaW5fY29udCA9IHRydWU7XG4xMjcxOlx0XHRcdFx0ZXJyID0gMDtcbjEyNzI6XHRcdFx0XHRjb250aW51ZTtcbjEyNzM6XHRcdFx0fVxuMTI3NDpcdFxuMTI3NTpcdFx0XHR4c2txX2NvbnNfcmVsZWFzZSh4cy1cdTAwM2V0eCk7XG4xMjc2Olx0XG4xMjc3Olx0XHRcdGlmICh4cF9tYl9kZXNjKFx1MDAyNmRlc2MpKSB7XG4xMjc4Olx0XHRcdFx0eHMtXHUwMDNlc2tiID0gc2tiO1xuMTI3OTpcdFx0XHRcdGNvbnRpbnVlO1xuMTI4MDpcdFx0XHR9XG4xMjgxOlx0XG4xMjgyOlx0XHRcdGVyciA9IF9fZGV2X2RpcmVjdF94bWl0KHNrYiwgeHMtXHUwMDNlcXVldWVfaWQpO1xuMTI4MzpcdFx0XHRpZiAgKGVyciA9PSBORVRERVZfVFhfQlVTWSkge1xuMTI4NDpcdFx0XHRcdC8qIFRlbGwgdXNlci1zcGFjZSB0byByZXRyeSB0aGUgc2VuZCAqL1xuMTI4NTpcdFx0XHRcdHhza3FfY29uc19jYW5jZWxfbih4cy1cdTAwM2V0eCwgeHNrX2dldF9udW1fZGVzYyhza2IpKTtcbjEyODY6XHRcdFx0XHR4c2tfY29uc3VtZV9za2Ioc2tiKTtcbjEyODc6XHRcdFx0XHRlcnIgPSAtRUFHQUlOO1xuMTI4ODpcdFx0XHRcdGdvdG8gb3V0O1xuMTI4OTpcdFx0XHR9XG4xMjkwOlx0XG4xMjkxOlx0XHRcdC8qIElnbm9yZSBORVRfWE1JVF9DTiBhcyBwYWNrZXQgbWlnaHQgaGF2ZSBiZWVuIHNlbnQgKi9cbjEyOTI6XHRcdFx0aWYgKGVyciA9PSBORVRfWE1JVF9EUk9QKSB7XG4xMjkzOlx0XHRcdFx0LyogU0tCIGNvbXBsZXRlZCBidXQgbm90IHNlbnQgKi9cbjEyOTQ6XHRcdFx0XHRlcnIgPSAtRUJVU1k7XG4xMjk1Olx0XHRcdFx0eHMtXHUwMDNlc2tiID0gTlVMTDtcbjEyOTY6XHRcdFx0XHRnb3RvIG91dDtcbjEyOTc6XHRcdFx0fVxuMTI5ODpcdFxuMTI5OTpcdFx0XHR4cy1cdTAwM2Vza2IgPSBOVUxMO1xuMTMwMDpcdFx0fVxuMTMwMTpcdFxuMTMwMjpcdFx0aWYgKHhza3FfaGFzX2Rlc2NzKHhzLVx1MDAzZXR4KSkge1xuMTMwMzpcdFx0XHRib29sIGRyYWluID0geHMtXHUwMDNlc2tiIHx8IHhzLVx1MDAzZWRyYWluX2NvbnQgfHwgeHBfbWJfZGVzYyhcdTAwMjZkZXNjKTtcbjEzMDQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDc6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODIzMgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDMwMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgQUZfWERQIFBhY2tldCBUcmFuc21pc3Npb24gRml4KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCB0aGUgYF9feHNrX2dlbmVyaWNfeG1pdGAgZnVuY3Rpb24sIHdoaWNoIGlzIHRoZSBoZWFydCBvZiBBRl9YRFAgcGFja2V0IHRyYW5zbWlzc2lvbiwgdXNlcyBgX19kZXZfZGlyZWN0X3htaXRgIHRvIHNlbmQgdGhlIHBhY2tldHMuIFRoaXMgaXMgcHJldHR5IHN0YW5kYXJkIGZvciBkaXJlY3QgdHJhbnNtaXNzaW9uIHBhdGhzIGluIHRoZSBrZXJuZWwuIFRoZSBwcm9ibGVtLCBhcyBJIHNlZSBpdCwgc3RlbXMgZnJvbSB0aGUgaW5pdGlhbGl6YXRpb24gd2l0aGluIGB4c2tfc2tiX2luaXRfbWlzY2AuIFNwZWNpZmljYWxseSwgdGhlIGNyaXRpY2FsIGBza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKWAgY2FsbCB3YXMgbWlzc2luZy4KCldpdGhvdXQgdGhhdCBjcnVjaWFsIGNhbGwgdG8gcmVzZXQgdGhlIG5ldHdvcmsgaGVhZGVyLCB0aGUgYHNrYi0mZ3Q7bmV0d29ya19oZWFkZXJgIHBvaW50ZXIgd2FzIGVzc2VudGlhbGx5IHVuaW5pdGlhbGl6ZWQuIFRoaXMgaXMgYSBjbGFzc2ljIHNvdXJjZSBvZiBlcnJvcnMuIFdoZW4gdGhlIGtlcm5lbCBjYWxscyBgX19kZXZfZGlyZWN0X3htaXRgLCBvciBxZGlzYywgb3IgcGFja2V0IGNsYXNzaWZpZXJzLCBvciBldmVuIGp1c3QgYGRldl9xdWV1ZV94bWl0YCDigJMgb3IsIGhlYXZlbiBmb3JiaWQsIHRoZSBkZXZpY2UgZHJpdmVyIGl0c2VsZiDigJMgZXhhbWluZXMgdGhlIG5ldHdvcmsgaGVhZGVyLCBpdCYjMzk7cyByZWFkaW5nIGdhcmJhZ2UuIFRoYXQgYHNrYi0mZ3Q7bmV0d29ya19oZWFkZXJgIHBvaW50ZXIgaXMgbGlrZWx5IHBvaW50aW5nIHRvIHRoZSB3cm9uZyBvZmZzZXQsIHBvc3NpYmx5IGV2ZW4gb3V0c2lkZSBvZiB0aGUgYWxsb2NhdGVkIGJ1ZmZlci4gSW4gZXNzZW5jZSwgaXQmIzM5O3MgYSBjcml0aWNhbCBwb2ludGVyIHRoYXQgd2FzIG1pc2NvbmZpZ3VyZWQgb3IgbWlzc2VkIGR1cmluZyBpbml0aWFsaXphdGlvbi4gYHNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpYCBpcyB0aGUgY29ycmVjdCBhcHByb2FjaCBiZWNhdXNlIGl0IGNvcnJlY3RseSBzZXRzIGBza2ItJmd0O25ldHdvcmtfaGVhZGVyID0gc2tiLSZndDtkYXRhIC0gc2tiLSZndDtoZWFkYC4KClRoaXMgY2hhbmdlIGlzIGluIGBuZXQveGRwL3hzay5jYCwgd2hpY2ggaXMgY29yZSBuZXR3b3JraW5nIGNvZGUgYW5kIGRlYWxzIHdpdGggQUZfWERQIHNvY2tldHMgKFhEUCBzb2NrZXRzKSwgc28gdGhpcyBpcyBhIGNydWNpYWwgYXJlYS4gU2luY2UgQUZfWERQIHN1cHBvcnRzIGdlbmVyaWMgbmV0IGRldmljZXMgbGlrZSB2ZXRoLCBsb29wYmFjaywgdHVuL3RhcCwgZHVtbXksIHZpcnRpbywgdGhpcyBmaXggaXMgYnJvYWQgaW4gc2NvcGUuIFRoaXMgaXNuJiMzOTt0IGp1c3QgYSBoYXJkd2FyZS1zcGVjaWZpYyBmaXg7IGl0IGFmZmVjdHMgYW55IGVudmlyb25tZW50IHVzaW5nIEFGX1hEUC4KCkdpdmVuIHRoZSB3aWRlc3ByZWFkIHVzZSBvZiBBRl9YRFAsIGFuZCB0aGUgZmFjdCB0aGF0IFN5emthbGxlciBoZWF2aWx5IHRlc3RzIEFGX1hEUCAoeGRwIHNvY2tldHMpLCBpdCYjMzk7cyBpbXBvcnRhbnQgdG8gdmVyaWZ5IGlmIHRoZXJlIGFueSBzcGVjaWZpYyBLY29uZmlnIG9wdGlvbnMgdGhhdCBtaWdodCBpbmZsdWVuY2UgdGhlIGluY2x1c2lvbiBvciBiZWhhdmlvciBvZiBgbmV0L3hkcC94c2suY2AuIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIHRoZSBNYWtlZmlsZSBpbiBgbmV0L3hkcC9gIHRvIGNvbmZpcm0gdGhlcmUgYXJlbiYjMzk7dCBhbnkgYnVpbGQtdGltZSBjb25maWd1cmF0aW9ucyB0aGF0IGNvdWxkIGltcGFjdCB0aGlzIGZpeC4gVGhpcyB3aWxsIGVuc3VyZSB0aGUgY2hhbmdlIGlzIGNvbXBsZXRlIGFuZCB1bml2ZXJzYWxseSBhcHBsaWVkLCBlc3BlY2lhbGx5IGdpdmVuIFN5emthbGxlciYjMzk7cyByb2xlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwNzozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC94ZHAvTWFrZWZpbGUmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRvYmotJChDT05GSUdfWERQX1NPQ0tFVFMpICYjNDM7PSB4c2subyB4ZHBfdW1lbS5vIHhza19xdWV1ZS5vIHhza21hcC5vXG4gICAzOlx0b2JqLSQoQ09ORklHX1hEUF9TT0NLRVRTKSAmIzQzOz0geHNrX2J1ZmZfcG9vbC5vXG4gICA0Olx0b2JqLSQoQ09ORklHX1hEUF9TT0NLRVRTX0RJQUcpICYjNDM7PSB4c2tfZGlhZy5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA3OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkxOTAKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipYRFAgQ29uZmlndXJhdGlvbjogQSBRdWljayBHbGFuY2UqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZywgJiMzNDtSaWdodCwgYmVmb3JlIHdlIGRpdmUgaW50byBhbnl0aGluZyB0b28gZGVlcCwgbGV0JiMzOTtzIHRha2UgYSBxdWljayBsb29rIGF0IGBuZXQveGRwL0tjb25maWdgLiYjMzQ7IEl0JiMzOTtzIHRoZSBzdGFuZGFyZCBmaXJzdCBzdG9wLCB5b3Uga25vdz8gR2V0IHRoZSBsYXkgb2YgdGhlIGxhbmQsIHNlZSB3aGF0IG9wdGlvbnMgYXJlIGV4cG9zZWQsIHdoaWNoIGZlYXR1cmVzIGFyZSBlbmFibGVkIGJ5IGRlZmF1bHQsIGFuZCBob3cgdGhlIHZhcmlvdXMgWERQLXJlbGF0ZWQgY29uZmlndXJhdGlvbnMgYXJlIHN0cnVjdHVyZWQgd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgYnVpbGQgc3lzdGVtLiBObyBuZWVkIHRvIHJlaW52ZW50IHRoZSB3aGVlbCwgSSBjYW4gcHJvYmFibHkgZ2V0IGEgZ2VuZXJhbCBzZW5zZSBvZiB0aGUgYnVpbGQgc3RydWN0dXJlIGp1c3QgYnkgdW5kZXJzdGFuZGluZyB0aGUgYXZhaWxhYmxlIGNvbmZpZyBmbGFncy4gSXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBzdGVwIHRvIHVuZGVyc3RhbmRpbmcgdGhlIGVjb3N5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDc6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQveGRwL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRjb25maWcgWERQX1NPQ0tFVFNcbiAgIDM6XHRcdGJvb2wgXCYjMzQ7WERQIHNvY2tldHNcJiMzNDtcbiAgIDQ6XHRcdGRlcGVuZHMgb24gQlBGX1NZU0NBTExcbiAgIDU6XHRcdGRlZmF1bHQgblxuICAgNjpcdFx0aGVscFxuICAgNzpcdFx0ICBYRFAgc29ja2V0cyBhbGxvd3MgYSBjaGFubmVsIGJldHdlZW4gWERQIHByb2dyYW1zIGFuZFxuICAgODpcdFx0ICB1c2Vyc3BhY2UgYXBwbGljYXRpb25zLlxuICAgOTpcdFxuICAxMDpcdGNvbmZpZyBYRFBfU09DS0VUU19ESUFHXG4gIDExOlx0XHR0cmlzdGF0ZSBcJiMzNDtYRFAgc29ja2V0czogbW9uaXRvcmluZyBpbnRlcmZhY2VcJiMzNDtcbiAgMTI6XHRcdGRlcGVuZHMgb24gWERQX1NPQ0tFVFNcbiAgMTM6XHRcdGRlZmF1bHQgblxuICAxNDpcdFx0aGVscFxuICAxNTpcdFx0ICBTdXBwb3J0IGZvciBQRl9YRFAgc29ja2V0cyBtb25pdG9yaW5nIGludGVyZmFjZSB1c2VkIGJ5IHRoZSBzcyB0b29sLlxuICAxNjpcdFx0ICBJZiB1bnN1cmUsIHNheSBZLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwNzozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NTk0CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyBCUEYgU3lzY2FsbCBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIEkgbmVlZCB0byBwaW5wb2ludCB3aGVyZSB0aGUgYEJQRl9TWVNDQUxMYCBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBkZWZpbmVkLiBHaXZlbiBteSBmYW1pbGlhcml0eSB3aXRoIHRoZSBrZXJuZWwgYnVpbGQgc3lzdGVtLCB0aGUgbW9zdCBsb2dpY2FsIHBsYWNlcyB0byBzdGFydCBsb29raW5nIGFyZSB0aGUgcHJpbWFyeSBjb25maWd1cmF0aW9uIGZpbGVzLiBJJiMzOTtsbCBiZWdpbiBieSBjaGVja2luZyBgaW5pdC9LY29uZmlnYCDigJMgaXQgb2Z0ZW4gaG9sZHMgZnVuZGFtZW50YWwgc2V0dGluZ3MgcmVsYXRlZCB0byBrZXJuZWwgZmVhdHVyZXMuIElmIGl0JiMzOTtzIG5vdCB0aGVyZSwgdGhlIG5leHQgbG9naWNhbCBsb2NhdGlvbiB3b3VsZCBiZSB0aGUgY29yZSBCUEYgaW1wbGVtZW50YXRpb24gZGlyZWN0b3J5IGl0c2VsZiwgc3BlY2lmaWNhbGx5IGBrZXJuZWwvYnBmL0tjb25maWdgLiBUaGlzIGlzIHdoZXJlIEkgd291bGQgZXhwZWN0IGFueXRoaW5nIHJlbGF0ZWQgdG8gQlBGJiMzOTtzIHN5c3RlbSBjYWxsIGludGVyZmFjZSB0byByZXNpZGUuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBpdCBpcyBpbXBsZW1lbnRlZC4gSSYjMzk7bSBnb2luZyB0byBsb29rIGluIHRob3NlIHR3byBwbGFjZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA3OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9TWVNDQUxMJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5pdC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwNzozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5ODMyCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIEJQRiBTeXNjYWxsIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiBmaW5kaW5nIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbiByZWxhdGVkIHRvIEJQRiBzeXNjYWxscy4gSSYjMzk7bSB0aGlua2luZywgJiMzNDtXaGVyZSBpcyBgY29uZmlnIEJQRl9TWVNDQUxMYCBkZWZpbmVkIHdpdGhpbiB0aGUga2VybmVsIGJ1aWxkIHN5c3RlbT8mIzM0OyBUaGlzIHByb2JhYmx5IG1lYW5zIEkgbmVlZCB0byBzdGFydCBwb2tpbmcgYXJvdW5kIGluIHRoZSBLY29uZmlnIGZpbGVzLCBzcGVjaWZpY2FsbHkgdGhlIG9uZXMgdGhhdCByZWxhdGUgdG8gdHJhY2luZywgbmV0d29ya2luZywgb3Igc2VjdXJpdHkg4oCTIHRob3NlIGFyZSB0aGUgbW9zdCBsaWtlbHkgYXJlYXMuIEkmIzM5O2xsIGxpa2VseSB1c2UgYGdyZXBgIG9yIGEgc2ltaWxhciB0b29sIHRvIHBpbnBvaW50IHRoZSBleGFjdCBsb2NhdGlvbi4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgY29udGV4dHVhbCBjbHVlcyBhcm91bmQgaXQgdG9vLCB0byB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMgYW5kIHdoYXQgZmVhdHVyZXMgaXQgZW5hYmxlcy4gSXMgdGhpcyBwYXJ0IG9mIGEgbGFyZ2VyIEJQRiBzdWJzeXN0ZW0gY29uZmlndXJhdGlvbiBvciBhIHN0YW5kYWxvbmU/IFRoYXQmIzM5O3Mgd2hhdCBJIG5lZWQgdG8gZGV0ZXJtaW5lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwNzozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQlBGX1NZU0NBTEwmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9LY29uZmlnPTI1PW1lbnUgXCYjMzQ7QlBGIHN1YnN5c3RlbVwmIzM0O1xua2VybmVsL2JwZi9LY29uZmlnLTI2LVxua2VybmVsL2JwZi9LY29uZmlnOjI3OmNvbmZpZyBCUEZfU1lTQ0FMTFxua2VybmVsL2JwZi9LY29uZmlnLTI4LVx0Ym9vbCBcJiMzNDtFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDc6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAxMjQKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipLZXJuZWwgQlBGIEtjb25maWcgSW5zcGVjdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiB0aGUgYGtlcm5lbC9icGYvS2NvbmZpZ2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gc2NvcGUgb3V0IGFyb3VuZCBsaW5lIDI3LiBJdCYjMzk7cyBhIGdlbmVyYWwgYXBwcm9hY2ggd2hlbiBzdGFydGluZyBhbiBpbnZlc3RpZ2F0aW9uLCBlc3BlY2lhbGx5IGdpdmVuIG15IGtub3dsZWRnZSBvZiB0aGUgY29kZWJhc2UsIHRoYXQgS2NvbmZpZyBmaWxlcyBhcmUgZXNzZW50aWFsIGluIHRoZSBzeXN0ZW0gY29uZmlndXJhdGlvbi4gVGhlIHNwZWNpZmljIGxpbmUgbnVtYmVyIGlzIGp1c3QgYSBzdGFydGluZyBwb2ludDsgaXQmIzM5O3MgbGlrZWx5IGEgZm9jYWwgYXJlYSwgZWl0aGVyIGEgbWFpbiBzZWN0aW9uLCBvciBzb21ldGhpbmcgdGhhdCBicmFuY2hlcyBvdXQgaW50byBtdWx0aXBsZSByZWxldmFudCBvcHRpb25zLiBJIHdhbnQgdG8gcXVpY2tseSBldmFsdWF0ZSBhbnkgaW1tZWRpYXRlIGNsdWVzIHRoYXQgZ2l2ZSBhbiBpbmRpY2F0aW9uIG9mIGhvdyBCUEYgaXMgZW5hYmxlZC9kaXNhYmxlZCBvciBjb25maWd1cmVkLiBUaGlzIHByZWxpbWluYXJ5IHNjYW4gd2lsbCBwcm92aWRlIGEgcm9hZG1hcCBmb3IgZGVlcGVyIGFuYWx5c2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwNzozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMjU6XHRtZW51IFwmIzM0O0JQRiBzdWJzeXN0ZW1cJiMzNDtcbiAgMjY6XHRcbiAgMjc6XHRjb25maWcgQlBGX1NZU0NBTExcbiAgMjg6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXCYjMzQ7XG4gIDI5Olx0XHRzZWxlY3QgQlBGXG4gIDMwOlx0XHRzZWxlY3QgSVJRX1dPUktcbiAgMzE6XHRcdHNlbGVjdCBORUVEX1RBU0tTX1JDVVxuICAzMjpcdFx0c2VsZWN0IFRBU0tTX1RSQUNFX1JDVVxuICAzMzpcdFx0c2VsZWN0IEJJTkFSWV9QUklOVEZcbiAgMzQ6XHRcdHNlbGVjdCBORVRfU09DS19NU0cgaWYgTkVUXG4gIDM1Olx0XHRzZWxlY3QgTkVUX1hHUkVTUyBpZiBORVRcbiAgMzY6XHRcdHNlbGVjdCBQQUdFX1BPT0wgaWYgTkVUXG4gIDM3Olx0XHRkZWZhdWx0IG5cbiAgMzg6XHRcdGhlbHBcbiAgMzk6XHRcdCAgRW5hYmxlIHRoZSBicGYoKSBzeXN0ZW0gY2FsbCB0aGF0IGFsbG93cyB0byBtYW5pcHVsYXRlIEJQRiBwcm9ncmFtc1xuICA0MDpcdFx0ICBhbmQgbWFwcyB2aWEgZmlsZSBkZXNjcmlwdG9ycy5cbiAgNDE6XHRcbiAgNDI6XHRjb25maWcgQlBGX0pJVFxuICA0MzpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgQlBGIEp1c3QgSW4gVGltZSBjb21waWxlclwmIzM0O1xuICA0NDpcdFx0ZGVwZW5kcyBvbiBCUEZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDc6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA1OTIKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFhEUCBTb2NrZXRzIGFuZCBCUEYgSW50ZWdyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGludG8gaG93IGBDT05GSUdfWERQX1NPQ0tFVFNgIHdvcmtzLCBhbmQgZmlyc3QgdGhpbmdzIGZpcnN0LCBpdCByZWxpZXMgb24gYENPTkZJR19CUEZfU1lTQ0FMTGAuIFRoYXQmIzM5O3MgdGhlIGJhc2VsaW5lLCB0aGUgZm91bmRhdGlvbi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnkgb3RoZXIgZGVwZW5kZW5jaWVzIG9yIHNpZ25pZmljYW50IGNvbmZpZyBvcHRpb25zIGludm9sdmVkIGluIHRoaXMuIEkmIzM5O20gb3BlcmF0aW5nIHVuZGVyIHRoZSBhc3N1bXB0aW9uIHRoYXQgYFhEUF9TT0NLRVRTYCBhbmQgYEJQRl9TWVNDQUxMYCBhcmUgdGhlIG1ham9yIHBsYXllcnMgaGVyZS4KCk5vdywgbGV0JiMzOTtzIGRpdmUgZGVlcGVyIGFuZCBmaW5kIHNvbWUgc3BlY2lmaWMgZnVuY3Rpb25zIGluIGBuZXQveGRwL3hzay5jYCB0byB1c2UgYXMgcmVmZXJlbmNlIHBvaW50cy4gSSYjMzk7bSB0aGlua2luZyBJIGNhbiB1c2UgdGhlc2UgYXMgZ29vZCBgRm9jdXNTeW1ib2xzYCB0byBjZW50ZXIgbXkgdW5kZXJzdGFuZGluZyBhcm91bmQuIE9uY2UgSSYjMzk7dmUgZm91bmQgc29tZSBnb29kIGVudHJ5cG9pbnRzLCBJJiMzOTtsbCBnbyB0aHJvdWdoIGBuZXQveGRwL3hzay5jYCwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXJvdW5kIHRoZSBzb2NrZXQgY2FsbGJhY2tzIGFuZCBwcm90b2NvbCBvcGVyYXRpb25zLiBUaGF0JiMzOTtzIHVzdWFsbHkgd2hlcmUgdGhlIGNvcmUgaW50ZXJhY3Rpb24gYW5kIGRhdGEgZmxvdyB3aWxsIGJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwNzozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwcm90b19vcHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGRwL3hzay5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZHAveHNrLmM9MjE1NT1zdGF0aWMgc3RydWN0IHByb3RvIHhza19wcm90byA9IHtcbi0tXG5uZXQveGRwL3hzay5jLTIxNjAtXG5uZXQveGRwL3hzay5jOjIxNjE6c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgeHNrX3Byb3RvX29wcyA9IHtcbm5ldC94ZHAveHNrLmMtMjE2Mi1cdC5mYW1pbHlcdFx0PSBQRl9YRFAsXG4tLVxubmV0L3hkcC94c2suYz0yMTkyPXN0YXRpYyBpbnQgeHNrX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90b2NvbCxcbi0tXG5uZXQveGRwL3hzay5jLTIyMTEtXG5uZXQveGRwL3hzay5jOjIyMTI6XHRzb2NrLVx1MDAzZW9wcyA9IFx1MDAyNnhza19wcm90b19vcHM7XG5uZXQveGRwL3hzay5jLTIyMTMtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA3OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMTYwCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8geHNrX3Byb3RvX29wcyoqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgWERQIHNvY2tldCBwcm90b2NvbCBvcGVyYXRpb25zLiBTcGVjaWZpY2FsbHksIEkgc2hvdWxkIHByb2JhYmx5IHJlLWV4YW1pbmUgdGhlIGB4c2tfcHJvdG9fb3BzYCBzdHJ1Y3R1cmUuIEkgcmVtZW1iZXIgaXQgcmVzaWRpbmcgd2l0aGluIGBuZXQveGRwL3hzay5jYCwgc28gdGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtsbCBiZWdpbi4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gWyAqcGF1c2UgYW5kIHRoaW5rIGZvciBhIG1vbWVudCwgYmFzZWQgb24gbXkgY3VycmVudCBhcmVhIG9mIGZvY3VzKiBdLi4uIHdlbGwsIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgWERQIHplcm8tY29weSBhbmQgaG93IGl0JiMzOTtzIGltcGxlbWVudGVkIGZvciB0aGUgdmFyaW91cyBtZW1vcnkgbWFuYWdlbWVudCBhbmQgYnVmZmVyaW5nIGludGVyYWN0aW9ucy4gSSB3aWxsIHNlZSB0aGUgc3RydWN0dXJlIGRlZmluaXRpb24gYW5kIGVuc3VyZSBJJiMzOTttIHVwIHRvIHNwZWVkIG9uIGFsbCBvZiBpdHMgbWVtYmVycywgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBhbnkgcmVsYXRlZCBjYWxsYmFja3Mgb3IgZGF0YSBzdHJ1Y3R1cmVzLiBUaGlzIGlzIGEgY3J1Y2lhbCBhcmVhIGZvciBwZXJmb3JtYW5jZSB0dW5pbmcgYW5kIG92ZXJhbGwgWERQIHNvY2tldCBkZXNpZ24sIHNvIGl0JiMzOTtzIHdvcnRoIGEgZGVlcCBkaXZlLiBMZXQmIzM5O3MgZ2V0IGNyYWNraW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwNzozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC94ZHAveHNrLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMTYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIxNjA6XHRcbjIxNjE6XHRzdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyB4c2tfcHJvdG9fb3BzID0ge1xuMjE2MjpcdFx0LmZhbWlseVx0XHQ9IFBGX1hEUCxcbjIxNjM6XHRcdC5vd25lclx0XHQ9IFRISVNfTU9EVUxFLFxuMjE2NDpcdFx0LnJlbGVhc2VcdD0geHNrX3JlbGVhc2UsXG4yMTY1Olx0XHQuYmluZFx0XHQ9IHhza19iaW5kLFxuMjE2NjpcdFx0LmNvbm5lY3RcdD0gc29ja19ub19jb25uZWN0LFxuMjE2NzpcdFx0LnNvY2tldHBhaXJcdD0gc29ja19ub19zb2NrZXRwYWlyLFxuMjE2ODpcdFx0LmFjY2VwdFx0XHQ9IHNvY2tfbm9fYWNjZXB0LFxuMjE2OTpcdFx0LmdldG5hbWVcdD0gc29ja19ub19nZXRuYW1lLFxuMjE3MDpcdFx0LnBvbGxcdFx0PSB4c2tfcG9sbCxcbjIxNzE6XHRcdC5pb2N0bFx0XHQ9IHNvY2tfbm9faW9jdGwsXG4yMTcyOlx0XHQubGlzdGVuXHRcdD0gc29ja19ub19saXN0ZW4sXG4yMTczOlx0XHQuc2h1dGRvd25cdD0gc29ja19ub19zaHV0ZG93bixcbjIxNzQ6XHRcdC5zZXRzb2Nrb3B0XHQ9IHhza19zZXRzb2Nrb3B0LFxuMjE3NTpcdFx0LmdldHNvY2tvcHRfaXRlciA9IHhza19nZXRzb2Nrb3B0LFxuMjE3NjpcdFx0LnNlbmRtc2dcdD0geHNrX3NlbmRtc2csXG4yMTc3Olx0XHQucmVjdm1zZ1x0PSB4c2tfcmVjdm1zZyxcbjIxNzg6XHRcdC5tbWFwXHRcdD0geHNrX21tYXAsXG4yMTc5Olx0fTtcbjIxODA6XHRcbjIxODE6XHRzdGF0aWMgdm9pZCB4c2tfZGVzdHJ1Y3Qoc3RydWN0IHNvY2sgKnNrKVxuMjE4MjpcdHtcbjIxODM6XHRcdHN0cnVjdCB4ZHBfc29jayAqeHMgPSB4ZHBfc2soc2spO1xuMjE4NDpcdFxuMjE4NTpcdFx0aWYgKCFzb2NrX2ZsYWcoc2ssIFNPQ0tfREVBRCkpXG4yMTg2Olx0XHRcdHJldHVybjtcbjIxODc6XHRcbjIxODg6XHRcdGlmICgheHBfcHV0X3Bvb2woeHMtXHUwMDNlcG9vbCkpXG4yMTg5Olx0XHRcdHhkcF9wdXRfdW1lbSh4cy1cdTAwM2V1bWVtLCAheHMtXHUwMDNlcG9vbCk7XG4yMTkwOlx0fVxuMjE5MTpcdFxuMjE5MjpcdHN0YXRpYyBpbnQgeHNrX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90b2NvbCxcbjIxOTM6XHRcdFx0ICAgICAgaW50IGtlcm4pXG4yMTk0Olx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwNzozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTk4MgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDEwMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipYRFAgU29ja2V0IEludGVyZmFjZSBEZWVwIERpdmUqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGUgWERQIHNvY2tldCBpbXBsZW1lbnRhdGlvbiB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgYW5kIG1heWJlIHNwb3Qgc29tZSBudWFuY2VzLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZSBjb3JlIGZ1bmN0aW9uczogYHhza19zZW5kbXNnYCwgYHhza19wb2xsYCwgYHhza19iaW5kYCwgYHhza19tbWFwYCwgYHhza19nZW5lcmljX3htaXRgIChvciBwZXJoYXBzIHRoZSBpbnRlcm5hbCBgX194c2tfZ2VuZXJpY194bWl0YCksIGB4c2tfYnVpbGRfc2tiYCwgYW5kIGB4c2tfZGVzdHJ1Y3Rfc2tiYC4gSSB3YW50IGEgc29saWQgZ3Jhc3Agb2YgaG93IHRoZXNlIHBpZWNlcyBmaXQgdG9nZXRoZXIuIEkgdGhpbmsgc3RhcnRpbmcgd2l0aCBgeHNrX3NlbmRtc2dgIGFuZCBgeHNrX3BvbGxgIGlzIHRoZSByaWdodCBtb3ZlIGZvciBub3cuIFRpbWUgdG8gaGVhZCBvdmVyIHRvIGBuZXQveGRwL3hzay5jYCBhbmQgZGlnIGludG8gdGhlIGNvZGUuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscyByZXZlYWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA3OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ludCB4c2tfc2VuZG1zZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZHAvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZHAveHNrLmM9MTM2Nj1zdGF0aWMgaW50IF9feHNrX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSwgc2l6ZV90IHRvdGFsX2xlbilcbi0tXG5uZXQveGRwL3hzay5jLTEzOTYtXG5uZXQveGRwL3hzay5jOjEzOTc6c3RhdGljIGludCB4c2tfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLCBzaXplX3QgdG90YWxfbGVuKVxubmV0L3hkcC94c2suYy0xMzk4LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDc6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI0MzAKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEaXZpbmcgaW50byB0aGUgWFNLIFRyYW5zbWlzc2lvbiBQYXRoKioKCk9rYXksIHNvIEkmIzM5O20gdHJhY2luZyB0aGUgZGF0YSB0cmFuc21pc3Npb24gcGF0aCBmb3IgWFNLLCBhbmQgaXQgbG9va3MgbGlrZSBgeHNrX3NlbmRtc2dgIGtpY2tzIHRoaW5ncyBvZmYuIEZyb20gdGhlcmUsIGl0IGRpdmVzIGludG8gYF9feHNrX3NlbmRtc2dgLiBOb3csIHRoaXMgaXMgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZywgYXMgYF9feHNrX3NlbmRtc2dgIGVpdGhlciBnb2VzIGRvd24gdGhlIGBfX3hza19nZW5lcmljX3htaXRgIHJvdXRlLCBvciBpdCB0cmlnZ2VycyB0aGUgZHJpdmVyLXNwZWNpZmljIHRyYW5zbWl0IHBhdGguCgpUbyBnZXQgYSBiZXR0ZXIgZ3JpcCBvbiB0aGUgbG9naWMsIEkgbmVlZCB0byBsb29rIGNsb3Nlci4gSSYjMzk7bGwgbmVlZCB0byBqdW1wIGludG8gYG5ldC94ZHAveHNrLmNgIGFuZCBmb2N1cyBvbiBsaW5lcyAxMzYwIHRocm91Z2ggMTQyMC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgZGV0YWlscyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGljaCBwYXRoIGlzIHRha2VuLCB1bmRlciB3aGF0IGNvbmRpdGlvbnMsIGFuZCB3aGF0IHRoZSBrZXkgZGlmZmVyZW5jZXMgYXJlIGJldHdlZW4gdGhlIGdlbmVyaWMgYW5kIGRyaXZlci1zcGVjaWZpYyBhcHByb2FjaGVzLiBHb3R0YSBnZXQgdGhlIGxvdy1sZXZlbCBkZXRhaWxzIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwNzozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC94ZHAveHNrLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMzYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEzNjA6XHRcdGlmICh1bmxpa2VseSghKHhzLVx1MDAzZWRldi1cdTAwM2VmbGFncyBcdTAwMjYgSUZGX1VQKSkpXG4xMzYxOlx0XHRcdHJldHVybiAtRU5FVERPV047XG4xMzYyOlx0XG4xMzYzOlx0XHRyZXR1cm4gMDtcbjEzNjQ6XHR9XG4xMzY1Olx0XG4xMzY2Olx0c3RhdGljIGludCBfX3hza19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm0sIHNpemVfdCB0b3RhbF9sZW4pXG4xMzY3Olx0e1xuMTM2ODpcdFx0Ym9vbCBuZWVkX3dhaXQgPSAhKG0tXHUwMDNlbXNnX2ZsYWdzIFx1MDAyNiBNU0dfRE9OVFdBSVQpO1xuMTM2OTpcdFx0c3RydWN0IHNvY2sgKnNrID0gc29jay1cdTAwM2VzaztcbjEzNzA6XHRcdHN0cnVjdCB4ZHBfc29jayAqeHMgPSB4ZHBfc2soc2spO1xuMTM3MTpcdFx0c3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2w7XG4xMzcyOlx0XHRpbnQgZXJyO1xuMTM3MzpcdFxuMTM3NDpcdFx0ZXJyID0geHNrX2NoZWNrX2NvbW1vbih4cyk7XG4xMzc1Olx0XHRpZiAoZXJyKVxuMTM3NjpcdFx0XHRyZXR1cm4gZXJyO1xuMTM3NzpcdFx0aWYgKHVubGlrZWx5KG5lZWRfd2FpdCkpXG4xMzc4Olx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbjEzNzk6XHRcdGlmICh1bmxpa2VseSgheHMtXHUwMDNldHgpKVxuMTM4MDpcdFx0XHRyZXR1cm4gLUVOT0JVRlM7XG4xMzgxOlx0XG4xMzgyOlx0XHRpZiAoc2tfY2FuX2J1c3lfbG9vcChzaykpXG4xMzgzOlx0XHRcdHNrX2J1c3lfbG9vcChzaywgMSk7IC8qIG9ubHkgc3VwcG9ydCBub24tYmxvY2tpbmcgc29ja2V0cyAqL1xuMTM4NDpcdFxuMTM4NTpcdFx0aWYgKHhzLVx1MDAzZXpjIFx1MDAyNlx1MDAyNiB4c2tfbm9fd2FrZXVwKHNrKSlcbjEzODY6XHRcdFx0cmV0dXJuIDA7XG4xMzg3Olx0XG4xMzg4Olx0XHRwb29sID0geHMtXHUwMDNlcG9vbDtcbjEzODk6XHRcdGlmIChwb29sLVx1MDAzZWNhY2hlZF9uZWVkX3dha2V1cCBcdTAwMjYgWERQX1dBS0VVUF9UWCkge1xuMTM5MDpcdFx0XHRpZiAoeHMtXHUwMDNlemMpXG4xMzkxOlx0XHRcdFx0cmV0dXJuIHhza193YWtldXAoeHMsIFhEUF9XQUtFVVBfVFgpO1xuMTM5MjpcdFx0XHRyZXR1cm4geHNrX2dlbmVyaWNfeG1pdChzayk7XG4xMzkzOlx0XHR9XG4xMzk0Olx0XHRyZXR1cm4gMDtcbjEzOTU6XHR9XG4xMzk2Olx0XG4xMzk3Olx0c3RhdGljIGludCB4c2tfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLCBzaXplX3QgdG90YWxfbGVuKVxuMTM5ODpcdHtcbjEzOTk6XHRcdGludCByZXQ7XG4xNDAwOlx0XG4xNDAxOlx0XHRyY3VfcmVhZF9sb2NrKCk7XG4xNDAyOlx0XHRyZXQgPSBfX3hza19zZW5kbXNnKHNvY2ssIG0sIHRvdGFsX2xlbik7XG4xNDAzOlx0XHRyY3VfcmVhZF91bmxvY2soKTtcbjE0MDQ6XHRcbjE0MDU6XHRcdHJldHVybiByZXQ7XG4xNDA2Olx0fVxuMTQwNzpcdFxuMTQwODpcdHN0YXRpYyBpbnQgX194c2tfcmVjdm1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLCBzaXplX3QgbGVuLCBpbnQgZmxhZ3MpXG4xNDA5Olx0e1xuMTQxMDpcdFx0Ym9vbCBuZWVkX3dhaXQgPSAhKGZsYWdzIFx1MDAyNiBNU0dfRE9OVFdBSVQpO1xuMTQxMTpcdFx0c3RydWN0IHNvY2sgKnNrID0gc29jay1cdTAwM2VzaztcbjE0MTI6XHRcdHN0cnVjdCB4ZHBfc29jayAqeHMgPSB4ZHBfc2soc2spO1xuMTQxMzpcdFx0aW50IGVycjtcbjE0MTQ6XHRcbjE0MTU6XHRcdGVyciA9IHhza19jaGVja19jb21tb24oeHMpO1xuMTQxNjpcdFx0aWYgKGVycilcbjE0MTc6XHRcdFx0cmV0dXJuIGVycjtcbjE0MTg6XHRcdGlmICh1bmxpa2VseSgheHMtXHUwMDNlcngpKVxuMTQxOTpcdFx0XHRyZXR1cm4gLUVOT0JVRlM7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA3OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNjA1CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogNjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIHRoZSBYU0sgSW1wbGVtZW50YXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgY29yZSBvZiB0aGlzIFhEUCBzb2NrZXQgaW1wbGVtZW50YXRpb24uIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB0aGUgYHhzay5jYCBhbmQgYHhzay5oYCBmaWxlcyDigJMgc3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdHJhbnNtaXQgYW5kIFNLQiBkZXN0cnVjdGlvbiBhcmUgaGFuZGxlZC4gSSYjMzk7bGwgbmVlZCB0byBzY3J1dGluaXplIGZ1bmN0aW9ucyBsaWtlIGB4c2tfZ2VuZXJpY194bWl0YCBhbmQgYHhza19kZXN0cnVjdF9za2JgIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgZGF0YSBmbG93IGFuZCBtZW1vcnkgbWFuYWdlbWVudC4gU2luY2UgSSYjMzk7bSBhaW1pbmcgZm9yIGEgY29tcHJlaGVuc2l2ZSBvdmVydmlldywgSSBzaG91bGQgYWxzbyBzZWFyY2ggZm9yIGFueSBvdGhlciBub24tc3RhdGljIGZ1bmN0aW9ucyB3aXRoaW4gdGhvc2UgZmlsZXMsIHNpbmNlIHRoZXNlIGxpa2VseSBmb3JtIHRoZSBjcml0aWNhbCBwdWJsaWMgaW50ZXJmYWNlIG9mIHRoZSB4c2sgbW9kdWxlLiBGdXJ0aGVybW9yZSwgSSYjMzk7bGwgbmVlZCB0byBleHBhbmQgbXkgc2VhcmNoLiBJdCYjMzk7cyB0aW1lIHRvIGNoZWNrIGBuZXQveGRwL3hzay5jYCBmb3IgYW55IGNyaXRpY2FsIGZ1bmN0aW9uYWxpdHkgdGhhdCBJIG1heSBoYXZlIG1pc3NlZCBpbiBteSBpbml0aWFsIHNlYXJjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDc6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XlthLXpBLVpfXS4qeHNrXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZHAveHNrLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hkcC94c2suYy00My1cbm5ldC94ZHAveHNrLmM6NDQ6c3RydWN0IHhza19hZGRycyB7XG5uZXQveGRwL3hzay5jLTQ1LVx0dTMyIG51bV9kZXNjcztcbi0tXG5uZXQveGRwL3hzay5jLTQ4LVxubmV0L3hkcC94c2suYzo0OTpzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKnhza190eF9nZW5lcmljX2NhY2hlO1xubmV0L3hkcC94c2suYy01MC1cbm5ldC94ZHAveHNrLmM6NTE6dm9pZCB4c2tfc2V0X3J4X25lZWRfd2FrZXVwKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sKVxubmV0L3hkcC94c2suYy01Mi17XG4tLVxubmV0L3hkcC94c2suYy01OC19XG5uZXQveGRwL3hzay5jOjU5OkVYUE9SVF9TWU1CT0woeHNrX3NldF9yeF9uZWVkX3dha2V1cCk7XG5uZXQveGRwL3hzay5jLTYwLVxubmV0L3hkcC94c2suYzo2MTp2b2lkIHhza19zZXRfdHhfbmVlZF93YWtldXAoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wpXG5uZXQveGRwL3hzay5jLTYyLXtcbi0tXG5uZXQveGRwL3hzay5jLTc1LX1cbm5ldC94ZHAveHNrLmM6NzY6RVhQT1JUX1NZTUJPTCh4c2tfc2V0X3R4X25lZWRfd2FrZXVwKTtcbm5ldC94ZHAveHNrLmMtNzctXG5uZXQveGRwL3hzay5jOjc4OnZvaWQgeHNrX2NsZWFyX3J4X25lZWRfd2FrZXVwKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sKVxubmV0L3hkcC94c2suYy03OS17XG4tLVxubmV0L3hkcC94c2suYy04NS19XG5uZXQveGRwL3hzay5jOjg2OkVYUE9SVF9TWU1CT0woeHNrX2NsZWFyX3J4X25lZWRfd2FrZXVwKTtcbm5ldC94ZHAveHNrLmMtODctXG5uZXQveGRwL3hzay5jOjg4OnZvaWQgeHNrX2NsZWFyX3R4X25lZWRfd2FrZXVwKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sKVxubmV0L3hkcC94c2suYy04OS17XG4tLVxubmV0L3hkcC94c2suYy0xMDItfVxubmV0L3hkcC94c2suYzoxMDM6RVhQT1JUX1NZTUJPTCh4c2tfY2xlYXJfdHhfbmVlZF93YWtldXApO1xubmV0L3hkcC94c2suYy0xMDQtXG5uZXQveGRwL3hzay5jOjEwNTpib29sIHhza191c2VzX25lZWRfd2FrZXVwKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sKVxubmV0L3hkcC94c2suYy0xMDYte1xuLS1cbm5ldC94ZHAveHNrLmMtMTA4LX1cbm5ldC94ZHAveHNrLmM6MTA5OkVYUE9SVF9TWU1CT0woeHNrX3VzZXNfbmVlZF93YWtldXApO1xubmV0L3hkcC94c2suYy0xMTAtXG5uZXQveGRwL3hzay5jOjExMTpzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqeHNrX2dldF9wb29sX2Zyb21fcWlkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5uZXQveGRwL3hzay5jLTExMi1cdFx0XHRcdFx0ICAgIHUxNiBxdWV1ZV9pZClcbi0tXG5uZXQveGRwL3hzay5jLTEyMC19XG5uZXQveGRwL3hzay5jOjEyMTpFWFBPUlRfU1lNQk9MKHhza19nZXRfcG9vbF9mcm9tX3FpZCk7XG5uZXQveGRwL3hzay5jLTEyMi1cbm5ldC94ZHAveHNrLmM6MTIzOnN0YXRpYyB2b2lkIF9feHNrX2NsZWFyX3Bvb2xfYXRfcWlkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUxNiBxdWV1ZV9pZClcbm5ldC94ZHAveHNrLmMtMTI0LXtcbi0tXG5uZXQveGRwL3hzay5jLTEzMC1cbm5ldC94ZHAveHNrLmM6MTMxOnZvaWQgeHNrX2NsZWFyX3Bvb2xfYXRfcWlkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUxNiBxdWV1ZV9pZClcbm5ldC94ZHAveHNrLmMtMTMyLXtcbi0tXG5uZXQveGRwL3hzay5jLTE0Ni1cbm5ldC94ZHAveHNrLmM6MTQ3OnN0YXRpYyBpbnQgX194c2tfcmVnX3Bvb2xfYXRfcWlkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5uZXQveGRwL3hzay5jLTE0OC1cdFx0XHRcdCBzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwgdTE2IHF1ZXVlX2lkKVxuLS1cbm5ldC94ZHAveHNrLmMtMTY0LSAqL1xubmV0L3hkcC94c2suYzoxNjU6aW50IHhza19yZWdfcG9vbF9hdF9xaWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsXG5uZXQveGRwL3hzay5jLTE2Ni1cdFx0XHR1MTYgcXVldWVfaWQpXG4tLVxubmV0L3hkcC94c2suYy0xOTAtXG5uZXQveGRwL3hzay5jOjE5MTpzdGF0aWMgaW50IF9feHNrX3Jjdl96YyhzdHJ1Y3QgeGRwX3NvY2sgKnhzLCBzdHJ1Y3QgeGRwX2J1ZmZfeHNrICp4c2tiLCB1MzIgbGVuLFxubmV0L3hkcC94c2suYy0xOTItXHRcdFx0dTMyIGZsYWdzKVxuLS1cbm5ldC94ZHAveHNrLmMtMjA3LVxubmV0L3hkcC94c2suYzoyMDg6c3RhdGljIHZvaWQgX194c2tfcmN2X3pjX3NhZmUoc3RydWN0IHhkcF9zb2NrICp4cywgc3RydWN0IHhkcF9idWZmX3hzayAqeHNrYixcbm5ldC94ZHAveHNrLmMtMjA5LVx0XHRcdCAgICAgIHUzMiBsZW4sIHUzMiBmbGFncylcbi0tXG5uZXQveGRwL3hzay5jLTIxOC1cbm5ldC94ZHAveHNrLmM6MjE5OnN0YXRpYyBpbnQgeHNrX3Jjdl96YyhzdHJ1Y3QgeGRwX3NvY2sgKnhzLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCwgdTMyIGxlbilcbm5ldC94ZHAveHNrLmMtMjIwLXtcbi0tXG5uZXQveGRwL3hzay5jLTI1OS1cbm5ldC94ZHAveHNrLmM6MjYwOnN0YXRpYyB2b2lkICp4c2tfY29weV94ZHBfc3RhcnQoc3RydWN0IHhkcF9idWZmICpmcm9tKVxubmV0L3hkcC94c2suYy0yNjEte1xuLS1cbm5ldC94ZHAveHNrLmMtMjY3LVxubmV0L3hkcC94c2suYzoyNjg6c3RhdGljIHUzMiB4c2tfY29weV94ZHAodm9pZCAqdG8sIHZvaWQgKipmcm9tLCB1MzIgdG9fbGVuLFxubmV0L3hkcC94c2suYy0yNjktXHRcdFx0dTMyICpmcm9tX2xlbiwgc2tiX2ZyYWdfdCAqKmZyYWcsIHUzMiByZW0pXG4tLVxubmV0L3hkcC94c2suYy0yOTUtXG5uZXQveGRwL3hzay5jOjI5NjpzdGF0aWMgaW50IF9feHNrX3JjdihzdHJ1Y3QgeGRwX3NvY2sgKnhzLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcCwgdTMyIGxlbilcbm5ldC94ZHAveHNrLmMtMjk3LXtcbi0tXG5uZXQveGRwL3hzay5jLTM4OC1cbm5ldC94ZHAveHNrLmM6Mzg5OnN0YXRpYyBib29sIHhza190eF93cml0ZWFibGUoc3RydWN0IHhkcF9zb2NrICp4cylcbm5ldC94ZHAveHNrLmMtMzkwLXtcbi0tXG5uZXQveGRwL3hzay5jLTM5Ni1cbm5ldC94ZHAveHNrLmM6Mzk3OnN0YXRpYyB2b2lkIF9feHNrX3R4X3JlbGVhc2Uoc3RydWN0IHhkcF9zb2NrICp4cylcbm5ldC94ZHAveHNrLmMtMzk4LXtcbi0tXG5uZXQveGRwL3hzay5jLTQwMy1cbm5ldC94ZHAveHNrLmM6NDA0OnN0YXRpYyBib29sIHhza19pc19ib3VuZChzdHJ1Y3QgeGRwX3NvY2sgKnhzKVxubmV0L3hkcC94c2suYy00MDUte1xuLS1cbm5ldC94ZHAveHNrLmMtNDEzLVxubmV0L3hkcC94c2suYzo0MTQ6c3RhdGljIGJvb2wgeHNrX2Rldl9xdWV1ZV92YWxpZChjb25zdCBzdHJ1Y3QgeGRwX3NvY2sgKnhzLFxubmV0L3hkcC94c2suYy00MTUtXHRcdFx0XHRjb25zdCBzdHJ1Y3QgeGRwX3J4cV9pbmZvICppbmZvKVxuLS1cbm5ldC94ZHAveHNrLmMtNDM4LVxubmV0L3hkcC94c2suYzo0Mzk6c3RhdGljIGludCB4c2tfcmN2X2NoZWNrKHN0cnVjdCB4ZHBfc29jayAqeHMsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwLCB1MzIgbGVuKVxubmV0L3hkcC94c2suYy00NDAte1xuLS1cbm5ldC94ZHAveHNrLmMtNDUzLVxubmV0L3hkcC94c2suYzo0NTQ6c3RhdGljIHZvaWQgeHNrX2ZsdXNoKHN0cnVjdCB4ZHBfc29jayAqeHMpXG5uZXQveGRwL3hzay5jLTQ1NS17XG4tLVxubmV0L3hkcC94c2suYy00NjAtXG5uZXQveGRwL3hzay5jOjQ2MTppbnQgeHNrX2dlbmVyaWNfcmN2KHN0cnVjdCB4ZHBfc29jayAqeHMsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwKVxubmV0L3hkcC94c2suYy00NjIte1xuLS1cbm5ldC94ZHAveHNrLmMtNDc2LVxubmV0L3hkcC94c2suYzo0Nzc6c3RhdGljIGludCB4c2tfcmN2KHN0cnVjdCB4ZHBfc29jayAqeHMsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwKVxubmV0L3hkcC94c2suYy00Nzgte1xuLS1cbm5ldC94ZHAveHNrLmMtNDk2LVxubmV0L3hkcC94c2suYzo0OTc6aW50IF9feHNrX21hcF9yZWRpcmVjdChzdHJ1Y3QgeGRwX3NvY2sgKnhzLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcClcbm5ldC94ZHAveHNrLmMtNDk4LXtcbi0tXG5uZXQveGRwL3hzay5jLTUxMy1cbm5ldC94ZHAveHNrLmM6NTE0OnZvaWQgX194c2tfbWFwX2ZsdXNoKHN0cnVjdCBsaXN0X2hlYWQgKmZsdXNoX2xpc3QpXG5uZXQveGRwL3hzay5jLTUxNS17XG4tLVxubmV0L3hkcC94c2suYy01MjMtXG5uZXQveGRwL3hzay5jOjUyNDp2b2lkIHhza190eF9jb21wbGV0ZWQoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHUzMiBuYl9lbnRyaWVzKVxubmV0L3hkcC94c2suYy01MjUte1xuLS1cbm5ldC94ZHAveHNrLmMtNTQ0LX1cbm5ldC94ZHAveHNrLmM6NTQ1OkVYUE9SVF9TWU1CT0woeHNrX3R4X2NvbXBsZXRlZCk7XG5uZXQveGRwL3hzay5jLTU0Ni1cbm5ldC94ZHAveHNrLmM6NTQ3OnZvaWQgeHNrX3R4X3JlbGVhc2Uoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wpXG5uZXQveGRwL3hzay5jLTU0OC17XG4tLVxubmV0L3hkcC94c2suYy01NTUtfVxubmV0L3hkcC94c2suYzo1NTY6RVhQT1JUX1NZTUJPTCh4c2tfdHhfcmVsZWFzZSk7XG5uZXQveGRwL3hzay5jLTU1Ny1cbm5ldC94ZHAveHNrLmM6NTU4OmJvb2wgeHNrX3R4X3BlZWtfZGVzYyhzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwgc3RydWN0IHhkcF9kZXNjICpkZXNjKVxubmV0L3hkcC94c2suYy01NTkte1xuLS1cbm5ldC94ZHAveHNrLmMtNjAzLX1cbm5ldC94ZHAveHNrLmM6NjA0OkVYUE9SVF9TWU1CT0woeHNrX3R4X3BlZWtfZGVzYyk7XG5uZXQveGRwL3hzay5jLTYwNS1cbm5ldC94ZHAveHNrLmM6NjA2OnN0YXRpYyB1MzIgeHNrX3R4X3BlZWtfcmVsZWFzZV9mYWxsYmFjayhzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwgdTMyIG1heF9lbnRyaWVzKVxubmV0L3hkcC94c2suYy02MDcte1xuLS1cbm5ldC94ZHAveHNrLmMtNjE3LVxubmV0L3hkcC94c2suYzo2MTg6c3RhdGljIHZvaWQgeHNrX3R4X2NvbW1pdF9iYXRjaChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCxcbm5ldC94ZHAveHNrLmMtNjE5LVx0XHRcdFx0c3RydWN0IHhza190eF9iYXRjaCAqYmF0Y2gpXG4tLVxubmV0L3hkcC94c2suYy02NDYtXG5uZXQveGRwL3hzay5jOjY0NzpzdGF0aWMgc3RydWN0IHhza190eF9iYXRjaFxubmV0L3hkcC94c2suYzo2NDg6X194c2tfdHhfcGVla19yZWxlYXNlX2Rlc2NfYmF0Y2goc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHN0cnVjdCB4ZHBfc29jayAqeHMsXG5uZXQveGRwL3hzay5jLTY0OS1cdFx0XHRcdCBzdHJ1Y3QgeGRwX2Rlc2MgKmRlc2NzLCB1MzIgbWF4X2Rlc2NzKVxuLS1cbm5ldC94ZHAveHNrLmMtNjY3LVxubmV0L3hkcC94c2suYzo2Njg6c3RhdGljIHN0cnVjdCB4c2tfdHhfYmF0Y2hcbm5ldC94ZHAveHNrLmM6NjY5Onhza190eF9wZWVrX3JlbGVhc2Vfc2hhcmVkX2Rlc2NfYmF0Y2goc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHUzMiBtYXhfZGVzY3MpXG5uZXQveGRwL3hzay5jLTY3MC17XG4tLVxubmV0L3hkcC94c2suYy03NDMtXG5uZXQveGRwL3hzay5jOjc0NDp1MzIgeHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCB1MzIgbmJfcGt0cylcbm5ldC94ZHAveHNrLmMtNzQ1LXtcbi0tXG5uZXQveGRwL3hzay5jLTc5MC19XG5uZXQveGRwL3hzay5jOjc5MTpFWFBPUlRfU1lNQk9MKHhza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaCk7XG5uZXQveGRwL3hzay5jLTc5Mi1cbm5ldC94ZHAveHNrLmM6NzkzOnN0YXRpYyBpbnQgeHNrX3dha2V1cChzdHJ1Y3QgeGRwX3NvY2sgKnhzLCB1OCBmbGFncylcbm5ldC94ZHAveHNrLmMtNzk0LXtcbi0tXG5uZXQveGRwL3hzay5jLTc5OS1cbm5ldC94ZHAveHNrLmM6ODAwOnN0YXRpYyBpbnQgeHNrX2NxX3Jlc2VydmVfbG9ja2VkKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sKVxubmV0L3hkcC94c2suYy04MDEte1xuLS1cbm5ldC94ZHAveHNrLmMtODEwLVxubmV0L3hkcC94c2suYzo4MTE6c3RhdGljIGJvb2wgeHNrX3NrYl9kZXN0cnVjdG9yX2lzX2FkZHIoc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC94ZHAveHNrLmMtODEyLXtcbi0tXG5uZXQveGRwL3hzay5jLTgxNS1cbm5ldC94ZHAveHNrLmM6ODE2OnN0YXRpYyB1NjQgeHNrX3NrYl9kZXN0cnVjdG9yX2dldF9hZGRyKHN0cnVjdCBza19idWZmICpza2IpXG5uZXQveGRwL3hzay5jLTgxNy17XG4tLVxubmV0L3hkcC94c2suYy04MjAtXG5uZXQveGRwL3hzay5jOjgyMTpzdGF0aWMgc3RydWN0IHhza19hZGRycyAqX194c2tfYWRkcnNfYWxsb2Moc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTY0IGFkZHIpXG5uZXQveGRwL3hzay5jLTgyMi17XG4tLVxubmV0L3hkcC94c2suYy04MzMtXG5uZXQveGRwL3hzay5jOjgzNDpzdGF0aWMgc3RydWN0IHhza19hZGRycyAqeHNrX2FkZHJzX2FsbG9jKHN0cnVjdCBza19idWZmICpza2IpXG5uZXQveGRwL3hzay5jLTgzNS17XG4tLVxubmV0L3hkcC94c2suYy04NDYtXG5uZXQveGRwL3hzay5jOjg0NzpzdGF0aWMgaW50IHhza19za2JfZGVzdHJ1Y3Rvcl9zZXRfYWRkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1NjQgYWRkcilcbm5ldC94ZHAveHNrLmMtODQ4LXtcbi0tXG5uZXQveGRwL3hzay5jLTg1OC1cbm5ldC94ZHAveHNrLmM6ODU5OnN0YXRpYyB2b2lkIHhza19pbmNfbnVtX2Rlc2Moc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC94ZHAveHNrLmMtODYwLXtcbi0tXG5uZXQveGRwL3hzay5jLTg2OC1cbm5ldC94ZHAveHNrLmM6ODY5OnN0YXRpYyB1MzIgeHNrX2dldF9udW1fZGVzYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L3hkcC94c2suYy04NzAte1xuLS1cbm5ldC94ZHAveHNrLmMtODgwLVxubmV0L3hkcC94c2suYzo4ODE6c3RhdGljIHZvaWQgeHNrX2NxX3N1Ym1pdF9hZGRyX2xvY2tlZChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCxcbm5ldC94ZHAveHNrLmMtODgyLVx0XHRcdFx0ICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQveGRwL3hzay5jLTkxMC1cbm5ldC94ZHAveHNrLmM6OTExOnN0YXRpYyB2b2lkIHhza19jcV9zdWJtaXRfYWRkcl9zaW5nbGVfbG9ja2VkKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLFxubmV0L3hkcC94c2suYy05MTItXHRcdFx0XHRcdCAgICAgc3RydWN0IHhkcF9kZXNjICpkZXNjKVxuLS1cbm5ldC94ZHAveHNrLmMtOTIzLVxubmV0L3hkcC94c2suYzo5MjQ6c3RhdGljIHZvaWQgeHNrX2NxX2NhbmNlbF9sb2NrZWQoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHUzMiBuKVxubmV0L3hkcC94c2suYy05MjUte1xuLS1cbm5ldC94ZHAveHNrLmM9OTMxPUlORElSRUNUX0NBTExBQkxFX1NDT1BFXG5uZXQveGRwL3hzay5jOjkzMjp2b2lkIHhza19kZXN0cnVjdF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC94ZHAveHNrLmMtOTMzLXtcbi0tXG5uZXQveGRwL3hzay5jLTk0NC1cbm5ldC94ZHAveHNrLmM6OTQ1OnN0YXRpYyBpbnQgeHNrX3NrYl9pbml0X21pc2Moc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHhkcF9zb2NrICp4cyxcbm5ldC94ZHAveHNrLmMtOTQ2LVx0XHRcdCAgICAgdTY0IGFkZHIpXG4tLVxubmV0L3hkcC94c2suYy05NjItXG5uZXQveGRwL3hzay5jOjk2MzpzdGF0aWMgdm9pZCB4c2tfY29uc3VtZV9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC94ZHAveHNrLmMtOTY0LXtcbi0tXG5uZXQveGRwL3hzay5jLTk4MC1cbm5ldC94ZHAveHNrLmM6OTgxOnN0YXRpYyB2b2lkIHhza19kcm9wX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L3hkcC94c2suYy05ODIte1xuLS1cbm5ldC94ZHAveHNrLmMtOTg5LVxubmV0L3hkcC94c2suYzo5OTA6c3RhdGljIGludCB4c2tfc2tiX21ldGFkYXRhKHN0cnVjdCBza19idWZmICpza2IsIHZvaWQgKmJ1ZmZlcixcbm5ldC94ZHAveHNrLmMtOTkxLVx0XHRcdCAgICBzdHJ1Y3QgeGRwX2Rlc2MgKmRlc2MsIHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLFxuLS1cbm5ldC94ZHAveHNrLmMtMTAzNC1cbm5ldC94ZHAveHNrLmM6MTAzNTpzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhza19idWlsZF9za2JfemVyb2NvcHkoc3RydWN0IHhkcF9zb2NrICp4cyxcbm5ldC94ZHAveHNrLmMtMTAzNi1cdFx0XHRcdFx0ICAgICAgc3RydWN0IHhkcF9kZXNjICpkZXNjKVxuLS1cbm5ldC94ZHAveHNrLmMtMTExMC1cbm5ldC94ZHAveHNrLmM6MTExMTpzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhza19idWlsZF9za2Ioc3RydWN0IHhkcF9zb2NrICp4cyxcbm5ldC94ZHAveHNrLmMtMTExMi1cdFx0XHRcdCAgICAgc3RydWN0IHhkcF9kZXNjICpkZXNjKVxuLS1cbm5ldC94ZHAveHNrLmMtMTIxNi1cbm5ldC94ZHAveHNrLmM6MTIxNzpzdGF0aWMgaW50IF9feHNrX2dlbmVyaWNfeG1pdChzdHJ1Y3Qgc29jayAqc2spXG5uZXQveGRwL3hzay5jLTEyMTgte1xuLS1cbm5ldC94ZHAveHNrLmMtMTMzMS1cbm5ldC94ZHAveHNrLmM6MTMzMjpzdGF0aWMgaW50IHhza19nZW5lcmljX3htaXQoc3RydWN0IHNvY2sgKnNrKVxubmV0L3hkcC94c2suYy0xMzMzLXtcbi0tXG5uZXQveGRwL3hzay5jLTEzNDQtXG5uZXQveGRwL3hzay5jOjEzNDU6c3RhdGljIGJvb2wgeHNrX25vX3dha2V1cChzdHJ1Y3Qgc29jayAqc2spXG5uZXQveGRwL3hzay5jLTEzNDYte1xuLS1cbm5ldC94ZHAveHNrLmMtMTM1NS1cbm5ldC94ZHAveHNrLmM6MTM1NjpzdGF0aWMgaW50IHhza19jaGVja19jb21tb24oc3RydWN0IHhkcF9zb2NrICp4cylcbm5ldC94ZHAveHNrLmMtMTM1Ny17XG4tLVxubmV0L3hkcC94c2suYy0xMzY1LVxubmV0L3hkcC94c2suYzoxMzY2OnN0YXRpYyBpbnQgX194c2tfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLCBzaXplX3QgdG90YWxfbGVuKVxubmV0L3hkcC94c2suYy0xMzY3LXtcbi0tXG5uZXQveGRwL3hzay5jLTEzOTYtXG5uZXQveGRwL3hzay5jOjEzOTc6c3RhdGljIGludCB4c2tfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLCBzaXplX3QgdG90YWxfbGVuKVxubmV0L3hkcC94c2suYy0xMzk4LXtcbi0tXG5uZXQveGRwL3hzay5jLTE0MDctXG5uZXQveGRwL3hzay5jOjE0MDg6c3RhdGljIGludCBfX3hza19yZWN2bXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm0sIHNpemVfdCBsZW4sIGludCBmbGFncylcbm5ldC94ZHAveHNrLmMtMTQwOS17XG4tLVxubmV0L3hkcC94c2suYy0xNDMzLVxubmV0L3hkcC94c2suYzoxNDM0OnN0YXRpYyBpbnQgeHNrX3JlY3Ztc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSwgc2l6ZV90IGxlbiwgaW50IGZsYWdzKVxubmV0L3hkcC94c2suYy0xNDM1LXtcbi0tXG5uZXQveGRwL3hzay5jLTE0NDQtXG5uZXQveGRwL3hzay5jOjE0NDU6c3RhdGljIF9fcG9sbF90IHhza19wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxubmV0L3hkcC94c2suYy0xNDQ2LVx0XHRcdCAgICAgc3RydWN0IHBvbGxfdGFibGVfc3RydWN0ICp3YWl0KVxuLS1cbm5ldC94ZHAveHNrLmMtMTQ3Ny1cbm5ldC94ZHAveHNrLmM6MTQ3ODpzdGF0aWMgaW50IHhza19pbml0X3F1ZXVlKHUzMiBlbnRyaWVzLCBzdHJ1Y3QgeHNrX3F1ZXVlICoqcXVldWUsXG5uZXQveGRwL3hzay5jLTE0NzktXHRcdFx0ICBib29sIHVtZW1fcXVldWUpXG4tLVxubmV0L3hkcC94c2suYy0xNDk1LVxubmV0L3hkcC94c2suYzoxNDk2OnN0YXRpYyB2b2lkIHhza191bmJpbmRfZGV2KHN0cnVjdCB4ZHBfc29jayAqeHMpXG5uZXQveGRwL3hzay5jLTE0OTcte1xuLS1cbm5ldC94ZHAveHNrLmMtMTUwOS1cbm5ldC94ZHAveHNrLmM6MTUxMDpzdGF0aWMgc3RydWN0IHhza19tYXAgKnhza19nZXRfbWFwX2xpc3RfZW50cnkoc3RydWN0IHhkcF9zb2NrICp4cyxcbm5ldC94ZHAveHNrLmMtMTUxMS1cdFx0XHRcdFx0ICAgICAgc3RydWN0IHhkcF9zb2NrIF9fcmN1ICoqKm1hcF9lbnRyeSlcbi0tXG5uZXQveGRwL3hzay5jLTE1MjktXG5uZXQveGRwL3hzay5jOjE1MzA6c3RhdGljIHZvaWQgeHNrX2RlbGV0ZV9mcm9tX21hcHMoc3RydWN0IHhkcF9zb2NrICp4cylcbm5ldC94ZHAveHNrLmMtMTUzMS17XG4tLVxubmV0L3hkcC94c2suYy0xNTU1LVxubmV0L3hkcC94c2suYzoxNTU2OnN0YXRpYyBpbnQgeHNrX3JlbGVhc2Uoc3RydWN0IHNvY2tldCAqc29jaylcbm5ldC94ZHAveHNrLmMtMTU1Ny17XG4tLVxubmV0L3hkcC94c2suYy0xNTkzLVxubmV0L3hkcC94c2suYzoxNTk0OnN0YXRpYyBzdHJ1Y3Qgc29ja2V0ICp4c2tfbG9va3VwX3hza19mcm9tX2ZkKGludCBmZClcbm5ldC94ZHAveHNrLmMtMTU5NS17XG4tLVxubmV0L3hkcC94c2suYy0xNjEwLVxubmV0L3hkcC94c2suYzoxNjExOnN0YXRpYyBib29sIHhza192YWxpZGF0ZV9xdWV1ZXMoc3RydWN0IHhkcF9zb2NrICp4cylcbm5ldC94ZHAveHNrLmMtMTYxMi17XG4tLVxubmV0L3hkcC94c2suYy0xNjE1LVxubmV0L3hkcC94c2suYzoxNjE2OnN0YXRpYyBpbnQgeHNrX2JpbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKmFkZHIsIGludCBhZGRyX2xlbilcbm5ldC94ZHAveHNrLmMtMTYxNy17XG4tLVxubmV0L3hkcC94c2suYz0xODA3PXN0cnVjdCB4ZHBfdW1lbV9yZWdfdjEge1xuLS1cbm5ldC94ZHAveHNrLmMtMTgxMy1cbm5ldC94ZHAveHNrLmM6MTgxNDpzdGF0aWMgaW50IHhza19zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXG5uZXQveGRwL3hzay5jLTE4MTUtXHRcdFx0ICBzb2NrcHRyX3Qgb3B0dmFsLCB1bnNpZ25lZCBpbnQgb3B0bGVuKVxuLS1cbm5ldC94ZHAveHNrLmMtMTkzNi1cbm5ldC94ZHAveHNrLmM6MTkzNzpzdGF0aWMgdm9pZCB4c2tfZW50ZXJfcnh0eF9vZmZzZXRzKHN0cnVjdCB4ZHBfcmluZ19vZmZzZXRfdjEgKnJpbmcpXG5uZXQveGRwL3hzay5jLTE5Mzgte1xuLS1cbm5ldC94ZHAveHNrLmMtMTk0My1cbm5ldC94ZHAveHNrLmM6MTk0NDpzdGF0aWMgdm9pZCB4c2tfZW50ZXJfdW1lbV9vZmZzZXRzKHN0cnVjdCB4ZHBfcmluZ19vZmZzZXRfdjEgKnJpbmcpXG5uZXQveGRwL3hzay5jLTE5NDUte1xuLS1cbm5ldC94ZHAveHNrLmM9MTk1MT1zdHJ1Y3QgeGRwX3N0YXRpc3RpY3NfdjEge1xuLS1cbm5ldC94ZHAveHNrLmMtMTk1Ni1cbm5ldC94ZHAveHNrLmM6MTk1NzpzdGF0aWMgaW50IHhza19nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXG5uZXQveGRwL3hzay5jLTE5NTgtXHRcdFx0ICBzb2Nrb3B0X3QgKm9wdClcbi0tXG5uZXQveGRwL3hzay5jLTIwODQtXG5uZXQveGRwL3hzay5jOjIwODU6c3RhdGljIGludCB4c2tfbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHNvY2tldCAqc29jayxcbm5ldC94ZHAveHNrLmMtMjA4Ni1cdFx0ICAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuLS1cbm5ldC94ZHAveHNrLmMtMjEyMi1cbm5ldC94ZHAveHNrLmM6MjEyMzpzdGF0aWMgaW50IHhza19ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsXG5uZXQveGRwL3hzay5jLTIxMjQtXHRcdFx0dW5zaWduZWQgbG9uZyBtc2csIHZvaWQgKnB0cilcbi0tXG5uZXQveGRwL3hzay5jLTIxNTQtXG5uZXQveGRwL3hzay5jOjIxNTU6c3RhdGljIHN0cnVjdCBwcm90byB4c2tfcHJvdG8gPSB7XG5uZXQveGRwL3hzay5jLTIxNTYtXHQubmFtZSA9XHRcdFwmIzM0O1hEUFwmIzM0Oyxcbi0tXG5uZXQveGRwL3hzay5jLTIxNjAtXG5uZXQveGRwL3hzay5jOjIxNjE6c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgeHNrX3Byb3RvX29wcyA9IHtcbm5ldC94ZHAveHNrLmMtMjE2Mi1cdC5mYW1pbHlcdFx0PSBQRl9YRFAsXG4tLVxubmV0L3hkcC94c2suYy0yMTgwLVxubmV0L3hkcC94c2suYzoyMTgxOnN0YXRpYyB2b2lkIHhza19kZXN0cnVjdChzdHJ1Y3Qgc29jayAqc2spXG5uZXQveGRwL3hzay5jLTIxODIte1xuLS1cbm5ldC94ZHAveHNrLmMtMjE5MS1cbm5ldC94ZHAveHNrLmM6MjE5MjpzdGF0aWMgaW50IHhza19jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgcHJvdG9jb2wsXG5uZXQveGRwL3hzay5jLTIxOTMtXHRcdCAgICAgIGludCBrZXJuKVxuLS1cbm5ldC94ZHAveHNrLmMtMjIzOC1cbm5ldC94ZHAveHNrLmM6MjIzOTpzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9wcm90b19mYW1pbHkgeHNrX2ZhbWlseV9vcHMgPSB7XG5uZXQveGRwL3hzay5jLTIyNDAtXHQuZmFtaWx5ID0gUEZfWERQLFxuLS1cbm5ldC94ZHAveHNrLmMtMjI0NC1cbm5ldC94ZHAveHNrLmM6MjI0NTpzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIHhza19uZXRkZXZfbm90aWZpZXIgPSB7XG5uZXQveGRwL3hzay5jLTIyNDYtXHQubm90aWZpZXJfY2FsbFx0PSB4c2tfbm90aWZpZXIsXG4tLVxubmV0L3hkcC94c2suYy0yMjQ4LVxubmV0L3hkcC94c2suYzoyMjQ5OnN0YXRpYyBpbnQgX19uZXRfaW5pdCB4c2tfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KVxubmV0L3hkcC94c2suYy0yMjUwLXtcbi0tXG5uZXQveGRwL3hzay5jLTIyNTUtXG5uZXQveGRwL3hzay5jOjIyNTY6c3RhdGljIHZvaWQgX19uZXRfZXhpdCB4c2tfbmV0X2V4aXQoc3RydWN0IG5ldCAqbmV0KVxubmV0L3hkcC94c2suYy0yMjU3LXtcbi0tXG5uZXQveGRwL3hzay5jLTIyNjAtXG5uZXQveGRwL3hzay5jOjIyNjE6c3RhdGljIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyB4c2tfbmV0X29wcyA9IHtcbm5ldC94ZHAveHNrLmMtMjI2Mi1cdC5pbml0ID0geHNrX25ldF9pbml0LFxuLS1cbm5ldC94ZHAveHNrLmMtMjI2NS1cbm5ldC94ZHAveHNrLmM6MjI2NjpzdGF0aWMgaW50IF9faW5pdCB4c2tfaW5pdCh2b2lkKVxubmV0L3hkcC94c2suYy0yMjY3LXtcbi0tXG5uZXQveGRwL3hzay5jLTIzMDctXG5uZXQveGRwL3hzay5jOjIzMDg6ZnNfaW5pdGNhbGwoeHNrX2luaXQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwNzozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDk3MQoJCQkJCQkJb3V0cHV0OiAxMTMKCQkJCQkJCXRob3VnaHRzOiAyNzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgWERQIFNvY2tldCBEZXN0cnVjdG9yKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBgeHNrX2Rlc3RydWN0X3NrYmAsIHRoYXQmIzM5O3MgdGhlIGtleSBmdW5jdGlvbiwgYW4gZXhwb3J0ZWQgZnVuY3Rpb24sIG1lYW5pbmcgaXQmIzM5O3MgaW50ZW5kZWQgdG8gYmUgY2FsbGVkIGZyb20gb3V0c2lkZSB0aGUgbW9kdWxlLiBJIGtub3cgdGhhdCwgYmFzZWQgb24gaXRzIHNpZ25hdHVyZTogYElORElSRUNUX0NBTExBQkxFX1NDT1BFIHZvaWQgeHNrX2Rlc3RydWN0X3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKWAuIFdlIGFsc28gaGF2ZSByZWxhdGVkIGZ1bmN0aW9ucyB0byBjb25zaWRlciwgbGlrZSBgeHNrX2dlbmVyaWNfcmN2YCwgYHhza19zZW5kbXNnYCwgYHhza19iaW5kYCwgYW5kIGB4c2tfY3JlYXRlYCwgdGhvdWdoIGB4c2tfY3JlYXRlYCBpcyBzdGF0aWMgYnV0IHJlZ2lzdGVyZWQgYXMgYSBgbmV0X3Byb3RvX2ZhbWlseWAuIFdlIGNvdWxkIGNlcnRhaW5seSBsb29rIGF0IHRob3NlIGFzIHdlbGwsIGJ1dCBmb3Igbm93LCBsZXQmIzM5O3Mga2VlcCBgeHNrX2Rlc3RydWN0X3NrYmAgYW5kIGB4c2tfZ2VuZXJpY19yY3ZgIGluIGZvY3VzLgoKTm93LCB0aGF0IFdvcnRoRnV6emluZyBjaGVjay4uLiBBaGEhIFRoZSBwYXRjaCBhZGRzIGBza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKWAgdG8gYHhza19za2JfaW5pdF9taXNjYC4gVGhpcyBzdWdnZXN0cyBhIGZpeCBmb3IgbmV0d29yayBoZWFkZXIgb2Zmc2V0cyBvbiBnZW5lcmljIEFGX1hEUCBza2JzIHNlbnQgdG8gbmV0ZGV2aWNlcy4gU28sIGl0JiMzOTtzIGNvcmUgbmV0d29ya2luZyBsb2dpYywgYW5kIGFjY2Vzc2libGUgdGhyb3VnaCBBRl9YRFAgKFhTSyBzb2NrZXRzKS4gRXhjZWxsZW50LCB0aGlzIGlzIGRlZmluaXRlbHkgZnV6emFibGUsIGFuZCB3aXRoaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIFFFTVUsIGV2ZW4gYmV0dGVyLiBUaGUga2V5IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBuZWVkZWQgYXJlIGBYRFBfU09DS0VUU2AgYW5kIGBCUEZfU1lTQ0FMTGAuCgpTbywgV29ydGhGdXp6aW5nOiBUcnVlLiBUaGlzIGlzIHNvbWV0aGluZyB3ZSBjYW4gYW5kIHNob3VsZCB0YXJnZXQuIEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgdG8gc2V0IHRoZSByZXN1bHRzIGFjY29yZGluZ2x5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwNzozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7WERQX1NPQ0tFVFMmIzM0OywKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt4c2tfZGVzdHJ1Y3Rfc2tiJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKCkgdG8geHNrX3NrYl9pbml0X21pc2MoKSB3aGVuIGJ1aWxkaW5nIHNrYnMgZm9yIEFGX1hEUCBzb2NrZXRzIHRyYW5zbWl0LiBUaGlzIG1vZGlmaWVzIGNvcmUgbmV0d29ya2luZyBBRl9YRFAgbG9naWMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBhbmQgaXMgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7WERQX1NPQ0tFVFMmIzM0OywKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt4c2tfZGVzdHJ1Y3Rfc2tiJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKCkgdG8geHNrX3NrYl9pbml0X21pc2MoKSB3aGVuIGJ1aWxkaW5nIHNrYnMgZm9yIEFGX1hEUCBzb2NrZXRzIHRyYW5zbWl0LiBUaGlzIG1vZGlmaWVzIGNvcmUgbmV0d29ya2luZyBBRl9YRFAgbG9naWMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBhbmQgaXMgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDc6Mzc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwNzozNzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBzaW5nbGUgY2FsbCB0byBgc2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYilgIHdpdGhpbiBgeHNrX3NrYl9pbml0X21pc2MoKWAgaW4gdGhlIEFGX1hEUCBzdWJzeXN0ZW0gKGBuZXQveGRwL3hzay5jYCkuXG5cbktNU0FOIHZzLiBLQVNBTiBhcHBsaWNhYmlsaXR5IGFuYWx5c2lzOlxuLSAqKktNU0FOIFJlbGV2YW5jZSoqOiBLTVNBTiBkZXRlY3RzIHVzZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhbmQgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlciBzcGFjZS4gVGhlIHBhdGNoIHNpbXBseSBpbml0aWFsaXplcyB0aGUgYG5ldHdvcmtfaGVhZGVyYCBvZmZzZXQgb24gdGhlIG5ld2x5IGNyZWF0ZWQgYHNrX2J1ZmZgIHRvIG1hdGNoIGBza2ItXHUwMDNlZGF0YWAuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHN0YWNrL2hlYXAgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIHBhZGRpbmcgb3Igc3RydWN0IGZpZWxkcyB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgYWx0ZXIgbGVuZ3RoIGNhbGN1bGF0aW9ucyBvciBib3VuZHMgY2hlY2tzIGluIGEgd2F5IHRoYXQgd291bGQgYWxsb3cgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuXG4tICoqS0FTQU4gLyBTdGFuZGFyZCBEZWJ1Z2dlcnMqKjogU3RhbmRhcmQgS0FTQU4gZnV6emluZyBhbmQgdGhlIG5ldHdvcmtpbmcgc3RhY2smIzM5O3MgYnVpbHQtaW4gYXNzZXJ0aW9ucy9jaGVja3MgYXJlIHN1ZmZpY2llbnQgdG8gdGVzdCBza2IgY29uc3RydWN0aW9uIGFuZCBwYWNrZXQgdHJhbnNtaXNzaW9uIGluIEFGX1hEUC5cblxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYjA3ZDg1YmY5ZThlZGVjZjdlZmIzMWZhM2NmMmIwODJiNGM1MzQ0YQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgU2VwIDMgMDc6MzY6NTIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQveGRwL3hzay5jIGIvbmV0L3hkcC94c2suYwppbmRleCAzMzQ3NWIxODBlYTZmLi4yMDc3YmI2Mjk5Y2E5IDEwMDY0NAotLS0gYS9uZXQveGRwL3hzay5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC94ZHAveHNrLmMKQEAgLTk0Nyw2ICYjNDM7OTQ3LDggQEAgc3RhdGljIGludCB4c2tfc2tiX2luaXRfbWlzYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeGRwX3NvY2sgKnhzLAogewogCWludCBlcnI7CiAKJiM0MzsJc2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYik7CiYjNDM7CiAJZXJyID0geHNrX3NrYl9kZXN0cnVjdG9yX3NldF9hZGRyKHNrYiwgYWRkcik7CiAJaWYgKHVubGlrZWx5KGVycikpCiAJCXJldHVybiBlcnI7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwNzozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDU4CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgWFNLIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gVGhlIHBhdGNoIGlzIHRvdWNoaW5nIGBuZXQveGRwL3hzay5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgeHNrX3NrYl9pbml0X21pc2NgIGZ1bmN0aW9uLiBJbW1lZGlhdGVseSwgSSBzZWUgYSBuZXcgbGluZTogYHNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpO2AuIFJpZ2h0LCB0aGlzIGlzIGEgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBhZGRpdGlvbiwgYnV0IGxldCYjMzk7cyBtYWtlIHN1cmUgaXQgbWFrZXMgc2Vuc2UgaW4gY29udGV4dC4gTGV0IG1lIHF1aWNrbHkgdXNlIGByZWFkLWZpbGVgIHRvIGdldCB0aGUgYXJlYSBhcm91bmQgbGluZSA5NDcgb2YgYG5ldC94ZHAveHNrLmNgLiBUaGUgcHVycG9zZSBvZiB0aGlzIGZ1bmN0aW9uIG11c3QgYmUgdG8gaW5pdGlhbGl6ZSBhbiBgc2tfYnVmZmAgZm9yIFhTSyAoZVhwcmVzcyBEYXRhIFBhdGggU29ja2V0cykuIFNvLCBpdCBtYWtlcyBzZW5zZSB0aGF0IHdlJiMzOTtkIGhhdmUgdG8gcmVzZXQgdGhlIG5ldHdvcmsgaGVhZGVyIG9mIGBza2JgIGJlZm9yZSBhc3NpZ25pbmcgdGhlIGFkZHJlc3MsIHByZXZlbnRpbmcgYW55IHdlaXJkIHNpZGUgZWZmZWN0cyB3aGVuIGNvbnN0cnVjdGluZyB0aGUgYHNrX2J1ZmZgLiBUaGlzIGlzIGEgbG93LXJpc2ssIGxpa2VseSBuZWNlc3NhcnkgYWRkaXRpb24uIEkmIzM5O2xsIGZsYWcgaXQgYXMgc3VjaCBhbmQgbW92ZSBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDc6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQveGRwL3hzay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA5MjA6XHRcdHhza3FfcHJvZF9zdWJtaXRfbihwb29sLVx1MDAzZWNxLCAxKTtcbiA5MjE6XHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2cG9vbC1cdTAwM2VjcV9wcm9kX2xvY2ssIGZsYWdzKTtcbiA5MjI6XHR9XG4gOTIzOlx0XG4gOTI0Olx0c3RhdGljIHZvaWQgeHNrX2NxX2NhbmNlbF9sb2NrZWQoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHUzMiBuKVxuIDkyNTpcdHtcbiA5MjY6XHRcdHNwaW5fbG9jayhcdTAwMjZwb29sLVx1MDAzZWNxLVx1MDAzZWNxX2NhY2hlZF9wcm9kX2xvY2spO1xuIDkyNzpcdFx0eHNrcV9wcm9kX2NhbmNlbF9uKHBvb2wtXHUwMDNlY3EsIG4pO1xuIDkyODpcdFx0c3Bpbl91bmxvY2soXHUwMDI2cG9vbC1cdTAwM2VjcS1cdTAwM2VjcV9jYWNoZWRfcHJvZF9sb2NrKTtcbiA5Mjk6XHR9XG4gOTMwOlx0XG4gOTMxOlx0SU5ESVJFQ1RfQ0FMTEFCTEVfU0NPUEVcbiA5MzI6XHR2b2lkIHhza19kZXN0cnVjdF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYilcbiA5MzM6XHR7XG4gOTM0Olx0XHRzdHJ1Y3QgeHNrX3R4X21ldGFkYXRhX2NvbXBsICpjb21wbCA9IFx1MDAyNnNrYl9zaGluZm8oc2tiKS1cdTAwM2V4c2tfbWV0YTtcbiA5MzU6XHRcbiA5MzY6XHRcdGlmIChjb21wbC1cdTAwM2V0eF90aW1lc3RhbXApIHtcbiA5Mzc6XHRcdFx0Lyogc3cgY29tcGxldGlvbiB0aW1lc3RhbXAsIG5vdCBhIHJlYWwgb25lICovXG4gOTM4Olx0XHRcdCpjb21wbC1cdTAwM2V0eF90aW1lc3RhbXAgPSBrdGltZV9nZXRfdGFpX2Zhc3RfbnMoKTtcbiA5Mzk6XHRcdH1cbiA5NDA6XHRcbiA5NDE6XHRcdHhza19jcV9zdWJtaXRfYWRkcl9sb2NrZWQoeGRwX3NrKHNrYi1cdTAwM2VzayktXHUwMDNlcG9vbCwgc2tiKTtcbiA5NDI6XHRcdHNvY2tfd2ZyZWUoc2tiKTtcbiA5NDM6XHR9XG4gOTQ0Olx0XG4gOTQ1Olx0c3RhdGljIGludCB4c2tfc2tiX2luaXRfbWlzYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeGRwX3NvY2sgKnhzLFxuIDk0NjpcdFx0XHRcdCAgICAgdTY0IGFkZHIpXG4gOTQ3Olx0e1xuIDk0ODpcdFx0aW50IGVycjtcbiA5NDk6XHRcbiA5NTA6XHRcdHNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpO1xuIDk1MTpcdFxuIDk1MjpcdFx0ZXJyID0geHNrX3NrYl9kZXN0cnVjdG9yX3NldF9hZGRyKHNrYiwgYWRkcik7XG4gOTUzOlx0XHRpZiAodW5saWtlbHkoZXJyKSlcbiA5NTQ6XHRcdFx0cmV0dXJuIGVycjtcbiA5NTU6XHRcbiA5NTY6XHRcdHNrYi1cdTAwM2VkZXYgPSB4cy1cdTAwM2VkZXY7XG4gOTU3Olx0XHRza2ItXHUwMDNlcHJpb3JpdHkgPSBSRUFEX09OQ0UoeHMtXHUwMDNlc2suc2tfcHJpb3JpdHkpO1xuIDk1ODpcdFx0c2tiLVx1MDAzZW1hcmsgPSBSRUFEX09OQ0UoeHMtXHUwMDNlc2suc2tfbWFyayk7XG4gOTU5Olx0XHRza2ItXHUwMDNlZGVzdHJ1Y3RvciA9IHhza19kZXN0cnVjdF9za2I7XG4gOTYwOlx0XHRyZXR1cm4gMDtcbiA5NjE6XHR9XG4gOTYyOlx0XG4gOTYzOlx0c3RhdGljIHZvaWQgeHNrX2NvbnN1bWVfc2tiKHN0cnVjdCBza19idWZmICpza2IpXG4gOTY0Olx0e1xuIDk2NTpcdFx0c3RydWN0IHhkcF9zb2NrICp4cyA9IHhkcF9zayhza2ItXHUwMDNlc2spO1xuIDk2NjpcdFx0dTMyIG51bV9kZXNjcyA9IHhza19nZXRfbnVtX2Rlc2Moc2tiKTtcbiA5Njc6XHRcdHN0cnVjdCB4c2tfYWRkcnMgKnhza19hZGRyO1xuIDk2ODpcdFxuIDk2OTpcdFx0aWYgKHVubGlrZWx5KCF4c2tfc2tiX2Rlc3RydWN0b3JfaXNfYWRkcihza2IpKSkge1xuIDk3MDpcdFx0XHR4c2tfYWRkciA9IChzdHJ1Y3QgeHNrX2FkZHJzICopc2tiX3NoaW5mbyhza2IpLVx1MDAzZWRlc3RydWN0b3JfYXJnO1xuIDk3MTpcdFx0XHRrbWVtX2NhY2hlX2ZyZWUoeHNrX3R4X2dlbmVyaWNfY2FjaGUsIHhza19hZGRyKTtcbiA5NzI6XHRcdH1cbiA5NzM6XHRcbiA5NzQ6XHRcdHNrYi1cdTAwM2VkZXN0cnVjdG9yID0gc29ja193ZnJlZTtcbiA5NzU6XHRcdHhza19jcV9jYW5jZWxfbG9ja2VkKHhzLVx1MDAzZXBvb2wsIG51bV9kZXNjcyk7XG4gOTc2Olx0XHQvKiBGcmVlIHNrYiB3aXRob3V0IHRyaWdnZXJpbmcgdGhlIHBlcmYgZHJvcCB0cmFjZSAqL1xuIDk3NzpcdFx0Y29uc3VtZV9za2Ioc2tiKTtcbiA5Nzg6XHRcdHhzLVx1MDAzZXNrYiA9IE5VTEw7XG4gOTc5Olx0fVxuIDk4MDpcdFxuIDk4MTpcdHN0YXRpYyB2b2lkIHhza19kcm9wX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIDk4MjpcdHtcbiA5ODM6XHRcdHN0cnVjdCB4ZHBfc29jayAqeHMgPSB4ZHBfc2soc2tiLVx1MDAzZXNrKTtcbiA5ODQ6XHRcbiA5ODU6XHRcdHhzLVx1MDAzZXR4LVx1MDAzZWludmFsaWRfZGVzY3MgJiM0Mzs9IHhza19nZXRfbnVtX2Rlc2Moc2tiKTtcbiA5ODY6XHRcdGNvbnN1bWVfc2tiKHNrYik7XG4gOTg3Olx0XHR4cy1cdTAwM2Vza2IgPSBOVUxMO1xuIDk4ODpcdH1cbiA5ODk6XHRcbiA5OTA6XHRzdGF0aWMgaW50IHhza19za2JfbWV0YWRhdGEoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdm9pZCAqYnVmZmVyLFxuIDk5MTpcdFx0XHRcdCAgICBzdHJ1Y3QgeGRwX2Rlc2MgKmRlc2MsIHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLFxuIDk5MjpcdFx0XHRcdCAgICB1MzIgaHIpXG4gOTkzOlx0e1xuIDk5NDpcdFx0c3RydWN0IHhza190eF9tZXRhZGF0YSAqbWV0YSA9IE5VTEw7XG4gOTk1Olx0XHR1MTYgY3N1bV9zdGFydCwgY3N1bV9vZmZzZXQ7XG4gOTk2Olx0XHR1NjQgZmxhZ3M7XG4gOTk3Olx0XG4gOTk4Olx0XHRpZiAodW5saWtlbHkocG9vbC1cdTAwM2V0eF9tZXRhZGF0YV9sZW4gPT0gMCkpXG4gOTk5Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwNzozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzg1CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhbiBleHBlcnQgaW4gdGhlIGZpZWxkOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBPcmlnaW5zIG9mIGB4c2tfc2tiX2luaXRfbWlzY2AqKgoKQWxyaWdodCwgc28gSSYjMzk7bSB0cnlpbmcgdG8gdHJhY2UgdGhlIGxpbmVhZ2Ugb2YgdGhpcyBgeHNrX3NrYl9pbml0X21pc2NgIGZ1bmN0aW9uLiBUaGUgZ29hbCBoZXJlIGlzIHRvIHVuZGVyc3RhbmQgaXRzIHB1cnBvc2UgYW5kLCBtb3JlIGltcG9ydGFudGx5LCB0byBjb25uZWN0IGl0IHRvIGl0cyBpbml0aWFsIGludHJvZHVjdGlvbiBvciBzaWduaWZpY2FudCBtb2RpZmljYXRpb25zIHdpdGhpbiB0aGUgcmVsZXZhbnQgY29kZWJhc2UuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIGl0JiMzOTtzIGJlaW5nIGNhbGxlZCwgd2hpY2ggd2lsbCBsaWtlbHkgZ2l2ZSBtZSBzb21lIGltcG9ydGFudCBjb250ZXh0LiBUaGUgYmVzdCBhcHByb2FjaCBpcyB0byBzdGFydCB3aXRoIGEgcXVpY2sgY29kZSBzZWFyY2guIEkmIzM5O2xsIHVzZSBgZ3JlcHBlcmAg4oCTIHRoYXQmIzM5O3MgdXN1YWxseSB0aGUgbW9zdCBlZmZpY2llbnQgd2F5IHRvIHF1aWNrbHkgZmluZCBhbGwgb2NjdXJyZW5jZXMgb2YgdGhpcyBmdW5jdGlvbiBuYW1lIHdpdGhpbiB0aGUgcHJvamVjdC4gSG9wZWZ1bGx5LCBieSBpZGVudGlmeWluZyB0aGUgY2FsbCBzaXRlcywgSSBjYW4gem9vbSBpbiBvbiB0aGUgc3BlY2lmaWMgY29tbWl0KHMpIHJlc3BvbnNpYmxlIGZvciBpdHMgaW5jbHVzaW9uIG9yIG1vZGlmaWNhdGlvbi4gVGhhdCBpbmZvcm1hdGlvbiB3aWxsIHByb3ZpZGUgdmFsdWFibGUgaW5zaWdodCBpbnRvIHRoZSBkZXNpZ24gZGVjaXNpb25zIGFuZCB0aGUgaW50ZW50IGJlaGluZCB0aGlzIHBhcnRpY3VsYXIgZnVuY3Rpb24uIEZyb20gdGhlcmUsIEkgY2FuIGFuYWx5emUgdGhlIGNvbW1pdCBtZXNzYWdlcyBhbmQgc3Vycm91bmRpbmcgY29kZSB0byBncmFzcCBpdHMgcm9sZSBtb3JlIGNvbXBsZXRlbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA3OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hza19za2JfaW5pdF9taXNjJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZHAveHNrLmM9OTMyPXZvaWQgeHNrX2Rlc3RydWN0X3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC94ZHAveHNrLmMtOTQ0LVxubmV0L3hkcC94c2suYzo5NDU6c3RhdGljIGludCB4c2tfc2tiX2luaXRfbWlzYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeGRwX3NvY2sgKnhzLFxubmV0L3hkcC94c2suYy05NDYtXHRcdFx0ICAgICB1NjQgYWRkcilcbi0tXG5uZXQveGRwL3hzay5jPTExMTE9c3RhdGljIHN0cnVjdCBza19idWZmICp4c2tfYnVpbGRfc2tiKHN0cnVjdCB4ZHBfc29jayAqeHMsXG4tLVxubmV0L3hkcC94c2suYy0xMTg2LVx0aWYgKCF4cy1cdTAwM2Vza2IpIHtcbm5ldC94ZHAveHNrLmM6MTE4NzpcdFx0ZXJyID0geHNrX3NrYl9pbml0X21pc2Moc2tiLCB4cywgZGVzYy1cdTAwM2VhZGRyKTtcbm5ldC94ZHAveHNrLmMtMTE4OC1cdFx0aWYgKHVubGlrZWx5KGVycikpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA3OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzMzUKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSBwcm9jZXNzaW5nIHRoZSBjb2RlOgoKKipEaXZpbmcgaW50byBgeHNrX2J1aWxkX3NrYmAqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgd2l0aCBgeHNrX2J1aWxkX3NrYmAuIEkmIzM5O20gZ29pbmcgdG8gZm9jdXMgb24gbGluZXMgMTExMSB0byAxMjAwLiBUaGlzIGZ1bmN0aW9uIGlzIGNydWNpYWwgZm9yIGJ1aWxkaW5nIFNLQnMg4oCTIHRoZSBTb2NrZXQgQnVmZmVyIHN0cnVjdHVyZXMg4oCTIHdoaWNoIGFyZSBhYnNvbHV0ZWx5IGZ1bmRhbWVudGFsIHRvIGhvdyBkYXRhIGlzIG1vdmVkIGFyb3VuZCBpbiB0aGUgWERQIChlWHByZXNzIERhdGEgUGF0aCkgd29ybGQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgcGFydCAqdGhvcm91Z2hseSouIEkga25vdyBpdCBoYW5kbGVzIHRoZSBhbGxvY2F0aW9uIGFuZCBwb3B1bGF0aW9uIG9mIHRoZXNlIFNLQnMsIGFuZCB0aGF0JiMzOTtzIHRoZSBjb3JlIG9mIGdldHRpbmcgcGFja2V0cyBpbnRvIGFuZCBvdXQgb2YgdGhlIG5ldHdvcmsgc3RhY2sgZWZmaWNpZW50bHkuIEkmIzM5O20gZXhwZWN0aW5nIHNvbWUgaW50cmljYXRlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBjYXJlZnVsIGRhdGEgY29weWluZyBpbiBoZXJlOyBvcHRpbWl6YXRpb24gaXMgY3JpdGljYWwgaW4gdGhpcyBjb250ZXh0LiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBob3cgaXQgaGFuZGxlcyBwb3RlbnRpYWwgZXJyb3JzLCBsaWtlIG1lbW9yeSBleGhhdXN0aW9uIG9yIG90aGVyIGlzc3VlcyB0aGF0IGNvdWxkIHN0YWxsIHBhY2tldCBwcm9jZXNzaW5nLiBBIGRlZXAgdW5kZXJzdGFuZGluZyBvZiBlcnJvciBwYXRocyBpcyBqdXN0IGFzIGltcG9ydGFudCBhcyB0aGUgaGFwcHkgcGF0aCBpbiBhIHBlcmZvcm1hbmNlLWNyaXRpY2FsIGZ1bmN0aW9uIGxpa2UgdGhpcy4gSSYjMzk7bGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgcG90ZW50aWFsIGZvciByYWNlIGNvbmRpdGlvbnMgb3IgbG9ja2luZyBpc3N1ZXMsIGVzcGVjaWFsbHkgd2l0aCBzaGFyZWQgZGF0YSBzdHJ1Y3R1cmVzLiBUaGlzIGlzIHdoZXJlIHRoZSBkZXZpbCBvZnRlbiBoaWRlcywgZXNwZWNpYWxseSBpbiBsb3ctbGV2ZWwgbmV0d29yayBjb2RlLiBJJiMzOTttIGFsc28gY3VyaW91cyB0byBzZWUgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIFhEUCBjb21wb25lbnRzLCBsaWtlIHRoZSByaW5nIGJ1ZmZlcnMgYW5kIHRoZSBBRl9YRFAgc29ja2V0IGl0c2VsZi4gSXQmIzM5O3MgbGlrZWx5IGludm9sdmVkIGluIHRoZSBoYW5kb3ZlciBmcm9tIHRoZSBmYXN0IHBhdGggdG8gdGhlIHN0YW5kYXJkIG5ldHdvcmsgc3RhY2ssIHdoaWNoIG5lZWRzIHRvIGJlIGFzIHNlYW1sZXNzIGFuZCBlZmZpY2llbnQgYXMgcG9zc2libGUuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgaG93IHRoZSBtYWdpYyBoYXBwZW5zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwNzozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC94ZHAveHNrLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMTEwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDkwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzExMTA6XHRcbjExMTE6XHRzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhza19idWlsZF9za2Ioc3RydWN0IHhkcF9zb2NrICp4cyxcbjExMTI6XHRcdFx0XHRcdCAgICAgc3RydWN0IHhkcF9kZXNjICpkZXNjKVxuMTExMzpcdHtcbjExMTQ6XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSB4cy1cdTAwM2VkZXY7XG4xMTE1Olx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0geHMtXHUwMDNlc2tiO1xuMTExNjpcdFx0aW50IGVycjtcbjExMTc6XHRcbjExMTg6XHRcdGlmIChkZXYtXHUwMDNlcHJpdl9mbGFncyBcdTAwMjYgSUZGX1RYX1NLQl9OT19MSU5FQVIpIHtcbjExMTk6XHRcdFx0c2tiID0geHNrX2J1aWxkX3NrYl96ZXJvY29weSh4cywgZGVzYyk7XG4xMTIwOlx0XHRcdGlmIChJU19FUlIoc2tiKSkge1xuMTEyMTpcdFx0XHRcdGVyciA9IFBUUl9FUlIoc2tiKTtcbjExMjI6XHRcdFx0XHRza2IgPSBOVUxMO1xuMTEyMzpcdFx0XHRcdGdvdG8gZnJlZV9lcnI7XG4xMTI0Olx0XHRcdH1cbjExMjU6XHRcdH0gZWxzZSB7XG4xMTI2Olx0XHRcdHUzMiBociwgdHIsIGxlbjtcbjExMjc6XHRcdFx0dm9pZCAqYnVmZmVyO1xuMTEyODpcdFxuMTEyOTpcdFx0XHRidWZmZXIgPSB4c2tfYnVmZl9yYXdfZ2V0X2RhdGEoeHMtXHUwMDNlcG9vbCwgZGVzYy1cdTAwM2VhZGRyKTtcbjExMzA6XHRcdFx0bGVuID0gZGVzYy1cdTAwM2VsZW47XG4xMTMxOlx0XG4xMTMyOlx0XHRcdGlmICghc2tiKSB7XG4xMTMzOlx0XHRcdFx0aHIgPSBtYXgoTkVUX1NLQl9QQUQsIEwxX0NBQ0hFX0FMSUdOKGRldi1cdTAwM2VuZWVkZWRfaGVhZHJvb20pKTtcbjExMzQ6XHRcdFx0XHR0ciA9IGRldi1cdTAwM2VuZWVkZWRfdGFpbHJvb207XG4xMTM1Olx0XHRcdFx0c2tiID0gc29ja19hbGxvY19zZW5kX3NrYihcdTAwMjZ4cy1cdTAwM2VzaywgaHIgJiM0MzsgbGVuICYjNDM7IHRyLCAxLCBcdTAwMjZlcnIpO1xuMTEzNjpcdFx0XHRcdGlmICh1bmxpa2VseSghc2tiKSlcbjExMzc6XHRcdFx0XHRcdGdvdG8gZnJlZV9lcnI7XG4xMTM4Olx0XG4xMTM5Olx0XHRcdFx0c2tiX3Jlc2VydmUoc2tiLCBocik7XG4xMTQwOlx0XHRcdFx0c2tiX3B1dChza2IsIGxlbik7XG4xMTQxOlx0XG4xMTQyOlx0XHRcdFx0ZXJyID0gc2tiX3N0b3JlX2JpdHMoc2tiLCAwLCBidWZmZXIsIGxlbik7XG4xMTQzOlx0XHRcdFx0aWYgKHVubGlrZWx5KGVycikpXG4xMTQ0Olx0XHRcdFx0XHRnb3RvIGZyZWVfZXJyO1xuMTE0NTpcdFxuMTE0NjpcdFx0XHRcdGlmIChkZXNjLVx1MDAzZW9wdGlvbnMgXHUwMDI2IFhEUF9UWF9NRVRBREFUQSkge1xuMTE0NzpcdFx0XHRcdFx0ZXJyID0geHNrX3NrYl9tZXRhZGF0YShza2IsIGJ1ZmZlciwgZGVzYyxcbjExNDg6XHRcdFx0XHRcdFx0XHQgICAgICAgeHMtXHUwMDNlcG9vbCwgaHIpO1xuMTE0OTpcdFx0XHRcdFx0aWYgKHVubGlrZWx5KGVycikpXG4xMTUwOlx0XHRcdFx0XHRcdGdvdG8gZnJlZV9lcnI7XG4xMTUxOlx0XHRcdFx0fVxuMTE1MjpcdFx0XHR9IGVsc2Uge1xuMTE1MzpcdFx0XHRcdGludCBucl9mcmFncyA9IHNrYl9zaGluZm8oc2tiKS1cdTAwM2Vucl9mcmFncztcbjExNTQ6XHRcdFx0XHRzdHJ1Y3QgeHNrX2FkZHJzICp4c2tfYWRkcjtcbjExNTU6XHRcdFx0XHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbjExNTY6XHRcdFx0XHR1OCAqdmFkZHI7XG4xMTU3Olx0XG4xMTU4Olx0XHRcdFx0eHNrX2FkZHIgPSB4c2tfYWRkcnNfYWxsb2Moc2tiKTtcbjExNTk6XHRcdFx0XHRpZiAoIXhza19hZGRyKSB7XG4xMTYwOlx0XHRcdFx0XHRlcnIgPSAtRU5PTUVNO1xuMTE2MTpcdFx0XHRcdFx0Z290byBmcmVlX2VycjtcbjExNjI6XHRcdFx0XHR9XG4xMTYzOlx0XG4xMTY0Olx0XHRcdFx0eHNrX2FkZHItXHUwMDNlYWRkcnNbeHNrX2FkZHItXHUwMDNlbnVtX2Rlc2NzXSA9IGRlc2MtXHUwMDNlYWRkcjtcbjExNjU6XHRcbjExNjY6XHRcdFx0XHRpZiAodW5saWtlbHkobnJfZnJhZ3MgPT0gKE1BWF9TS0JfRlJBR1MgLSAxKSBcdTAwMjZcdTAwMjYgeHBfbWJfZGVzYyhkZXNjKSkpIHtcbjExNjc6XHRcdFx0XHRcdGVyciA9IC1FT1ZFUkZMT1c7XG4xMTY4Olx0XHRcdFx0XHRnb3RvIGZyZWVfZXJyO1xuMTE2OTpcdFx0XHRcdH1cbjExNzA6XHRcbjExNzE6XHRcdFx0XHRwYWdlID0gYWxsb2NfcGFnZSh4cy1cdTAwM2Vzay5za19hbGxvY2F0aW9uKTtcbjExNzI6XHRcdFx0XHRpZiAodW5saWtlbHkoIXBhZ2UpKSB7XG4xMTczOlx0XHRcdFx0XHRlcnIgPSAtRUFHQUlOO1xuMTE3NDpcdFx0XHRcdFx0Z290byBmcmVlX2VycjtcbjExNzU6XHRcdFx0XHR9XG4xMTc2Olx0XG4xMTc3Olx0XHRcdFx0dmFkZHIgPSBrbWFwX2xvY2FsX3BhZ2UocGFnZSk7XG4xMTc4Olx0XHRcdFx0bWVtY3B5KHZhZGRyLCBidWZmZXIsIGxlbik7XG4xMTc5Olx0XHRcdFx0a3VubWFwX2xvY2FsKHZhZGRyKTtcbjExODA6XHRcbjExODE6XHRcdFx0XHRza2JfYWRkX3J4X2ZyYWcoc2tiLCBucl9mcmFncywgcGFnZSwgMCwgbGVuLCBQQUdFX1NJWkUpO1xuMTE4MjpcdFx0XHRcdHJlZmNvdW50X2FkZChQQUdFX1NJWkUsIFx1MDAyNnhzLVx1MDAzZXNrLnNrX3dtZW1fYWxsb2MpO1xuMTE4MzpcdFx0XHR9XG4xMTg0Olx0XHR9XG4xMTg1Olx0XG4xMTg2Olx0XHRpZiAoIXhzLVx1MDAzZXNrYikge1xuMTE4NzpcdFx0XHRlcnIgPSB4c2tfc2tiX2luaXRfbWlzYyhza2IsIHhzLCBkZXNjLVx1MDAzZWFkZHIpO1xuMTE4ODpcdFx0XHRpZiAodW5saWtlbHkoZXJyKSlcbjExODk6XHRcdFx0XHRnb3RvIGZyZWVfZXJyO1xuMTE5MDpcdFx0fVxuMTE5MTpcdFx0eHNrX2luY19udW1fZGVzYyhza2IpO1xuMTE5MjpcdFxuMTE5MzpcdFx0cmV0dXJuIHNrYjtcbjExOTQ6XHRcbjExOTU6XHRmcmVlX2VycjpcbjExOTY6XHRcdGlmIChza2IgXHUwMDI2XHUwMDI2ICF4cy1cdTAwM2Vza2IpXG4xMTk3Olx0XHRcdGtmcmVlX3NrYihza2IpO1xuMTE5ODpcdFxuMTE5OTpcdFx0aWYgKGVyciA9PSAtRU9WRVJGTE9XKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA3OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYwODMKCQkJCQkJCW91dHB1dDogMjQzCgkJCQkJCQl0aG91Z2h0czogNjE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBgc2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyYCBBZGRpdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgY29yZSBvZiB0aGlzIGlzIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYHNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpYCBpbiB0aGUgQUZfWERQIGNvbnRleHQuIFNwZWNpZmljYWxseSwgYHNrYi0mZ3Q7bmV0d29ya19oZWFkZXIgPSBza2ItJmd0O2RhdGEgLSBza2ItJmd0O2hlYWQ7YC4gIFRoZSBhaW0gaGVyZSBpcyB0byBlbnN1cmUgdGhhdCB0aGUgYG5ldHdvcmtfaGVhZGVyYCBmaWVsZCB3aXRoaW4gdGhlIGBza19idWZmYCBzdHJ1Y3R1cmUgaXMgY29ycmVjdGx5IHNldCAqYmVmb3JlKiB0aGUgYHNrYmAgaXMgdHJhbnNtaXR0ZWQsIHBhcnRpY3VsYXJseSB3aGVuIHVzaW5nIGdlbmVyaWMvZHJpdmVyIHRyYW5zbWlzc2lvbiBwYXRocyBsaWtlIGBkZXZfcXVldWVfeG1pdGAuIFByZXZpb3VzbHksIEFGX1hEUCBtaWdodCYjMzk7dmUgYmVlbiBjcmVhdGluZyBgc2tiYHMgd2l0aG91dCBpbml0aWFsaXppbmcgdGhpcyBoZWFkZXIgcHJvcGVybHksIG9yIHdpdGggYSBkZWZhdWx0IHZhbHVlLiBUaGlzIG9taXNzaW9uIGNvdWxkIGxlYWQgdG8gaXNzdWVzIGluIHZhcmlvdXMgcGFydHMgb2YgdGhlIG5ldHdvcmtpbmcgc3RhY2vigJRxZGlzY3MgbGlrZSBgc2NoX25ldGVtYCBhbmQgYHNjaF9mcWAsIEJQRiBwcm9ncmFtcywgcGFja2V0IHNvY2tldHMsIGFuZCBldmVuIGRldmljZSBkcml2ZXJz4oCUYWxsIG9mIHdoaWNoIG1pZ2h0IGRlcmVmZXJlbmNlIGBza2JfbmV0d29ya19oZWFkZXIoc2tiKWAgb3IgcmVseSBvbiB0aGUgb2Zmc2V0LgoKTm93LCBsZXQmIzM5O3MgYWRkcmVzcyB0aGUgY3J1Y2lhbCBxdWVzdGlvbjogYXJlIHdlIGludHJvZHVjaW5nIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcz8gTm8uIE15IGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIGNoYW5nZSAqY29ycmVjdGx5KiBpbml0aWFsaXplcyB0aGUgYG5ldHdvcmtfaGVhZGVyYCBmaWVsZC4gSXQmIzM5O3Mgbm90IGV4cG9zaW5nIHVuaW5pdGlhbGl6ZWQgZGF0YSB0byB1c2VyIHNwYWNlLiBJdCYjMzk7cyB1c2luZyBgc29ja19hbGxvY19zZW5kX3NrYmAgb3IgYHhza19idWlsZF9za2JfemVyb2NvcHlgLCBhbmQgdGhlc2UgZnVuY3Rpb25zIGluaXRpYWxpemUgYHNrYi0mZ3Q7ZGF0YWAgYW5kIGBza2ItJmd0O2hlYWRgLiBUaGUgZnVuY3Rpb24gaXRzZWxmIGRvZXNuJiMzOTt0IGFsbG9jYXRlIG5ldyBzdHJ1Y3R1cmVzIG9yIGNoYW5nZSBib3VuZHMgY2hlY2tzIHRoYXQgd291bGQgbGVhZCB0byBwb3RlbnRpYWwgaXNzdWVzLiBJdCYjMzk7cyBhIHN0cmFpZ2h0Zm9yd2FyZCBhc3NpZ25tZW50IG9mIGEgcHJlLWV4aXN0aW5nIGZpZWxkIGJhc2VkIG9uIGV4aXN0aW5nIGluaXRpYWxpemVkIGRhdGEuCgpSZWdhcmRpbmcgS01TQU4gKEtlcm5lbCBNZW1vcnkgU2FuaXRpemVyKSwgdGhpcyBjaGFuZ2UgaXMgY2xlYXJseSAqbm90KiBzb21ldGhpbmcgdGhhdCByZXF1aXJlcyBLTVNBTi4gS01TQU4gaXMgcHJpbWFyaWx5IGNvbmNlcm5lZCB3aXRoIGRldGVjdGluZyByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSwgd2hpY2ggY291bGQgbGVhZCB0byBpbmZvcm1hdGlvbiBsZWFrcywgb3IgdW5pbml0aWFsaXplZCB2YWx1ZXMgdGhhdCBtaWdodCBiZSB1c2VkIGFzIHRoZSBiYXNpcyBvZiBhIGRlY2lzaW9uLiBUaGlzIGlzbiYjMzk7dCB0aGF0LiBUaGlzIHBhdGNoIGZpeGVzIGEgYnVnIHdoZXJlIGBuZXR3b3JrX2hlYWRlcmAgd2FzbiYjMzk7dCBwcm9wZXJseSBpbml0aWFsaXplZC4gU3RhbmRhcmQgS0FTQU4gKEtlcm5lbCBBZGRyZXNzIFNhbml0aXplcikgYW5kIHJlbGF0ZWQgc2FuaXRpemVycyBhcmUgc3VmZmljaWVudC4gSXQgZm9jdXNlcyBvbiBtZW1vcnkgc2FmZXR5IGlzc3Vlcywgd2hpY2ggYXJlIG5vdCBwcmVzZW50IGhlcmUuCgpUaGVyZWZvcmUsIHRoZSByZWFzb25pbmcgZm9yIGBOZWVkc0tNU0FOID0gZmFsc2VgIGlzIHN0cmFpZ2h0Zm9yd2FyZDogdGhpcyBwYXRjaCAqaW5pdGlhbGl6ZXMqIGEgZmllbGQsIGFuZCBkb2VzICpub3QqIGNyZWF0ZSBuZXcgcGF0aHMgd2hlcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgcmVhZCwgY29waWVkIHRvIHVzZXJzcGFjZSwgb3IgYnJhbmNoZWQgb24uIEl0JiMzOTtzIGEgcHVyZSBpbml0aWFsaXphdGlvbiwgYSBidWcgZml4IGZvciBjb3JyZWN0IGhlYWRlciB1c2FnZSB3aXRoaW4gdGhlIG5ldHdvcmsgc3RhY2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA3OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBzaW5nbGUgY2FsbCB0byBgc2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYilgIHdpdGhpbiBgeHNrX3NrYl9pbml0X21pc2MoKWAgaW4gdGhlIEFGX1hEUCBzdWJzeXN0ZW0gKGBuZXQveGRwL3hzay5jYCkuXG5cbktNU0FOIHZzLiBLQVNBTiBhcHBsaWNhYmlsaXR5IGFuYWx5c2lzOlxuLSAqKktNU0FOIFJlbGV2YW5jZSoqOiBLTVNBTiBkZXRlY3RzIHVzZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhbmQgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlciBzcGFjZS4gVGhlIHBhdGNoIHNpbXBseSBpbml0aWFsaXplcyB0aGUgYG5ldHdvcmtfaGVhZGVyYCBvZmZzZXQgb24gdGhlIG5ld2x5IGNyZWF0ZWQgYHNrX2J1ZmZgIHRvIG1hdGNoIGBza2ItXHUwMDNlZGF0YWAuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHN0YWNrL2hlYXAgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIHBhZGRpbmcgb3Igc3RydWN0IGZpZWxkcyB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgYWx0ZXIgbGVuZ3RoIGNhbGN1bGF0aW9ucyBvciBib3VuZHMgY2hlY2tzIGluIGEgd2F5IHRoYXQgd291bGQgYWxsb3cgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuXG4tICoqS0FTQU4gLyBTdGFuZGFyZCBEZWJ1Z2dlcnMqKjogU3RhbmRhcmQgS0FTQU4gZnV6emluZyBhbmQgdGhlIG5ldHdvcmtpbmcgc3RhY2smIzM5O3MgYnVpbHQtaW4gYXNzZXJ0aW9ucy9jaGVja3MgYXJlIHN1ZmZpY2llbnQgdG8gdGVzdCBza2IgY29uc3RydWN0aW9uIGFuZCBwYWNrZXQgdHJhbnNtaXNzaW9uIGluIEFGX1hEUC5cblxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBzaW5nbGUgY2FsbCB0byBgc2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYilgIHdpdGhpbiBgeHNrX3NrYl9pbml0X21pc2MoKWAgaW4gdGhlIEFGX1hEUCBzdWJzeXN0ZW0gKGBuZXQveGRwL3hzay5jYCkuXG5cbktNU0FOIHZzLiBLQVNBTiBhcHBsaWNhYmlsaXR5IGFuYWx5c2lzOlxuLSAqKktNU0FOIFJlbGV2YW5jZSoqOiBLTVNBTiBkZXRlY3RzIHVzZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhbmQgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlciBzcGFjZS4gVGhlIHBhdGNoIHNpbXBseSBpbml0aWFsaXplcyB0aGUgYG5ldHdvcmtfaGVhZGVyYCBvZmZzZXQgb24gdGhlIG5ld2x5IGNyZWF0ZWQgYHNrX2J1ZmZgIHRvIG1hdGNoIGBza2ItXHUwMDNlZGF0YWAuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHN0YWNrL2hlYXAgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIHBhZGRpbmcgb3Igc3RydWN0IGZpZWxkcyB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgYWx0ZXIgbGVuZ3RoIGNhbGN1bGF0aW9ucyBvciBib3VuZHMgY2hlY2tzIGluIGEgd2F5IHRoYXQgd291bGQgYWxsb3cgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuXG4tICoqS0FTQU4gLyBTdGFuZGFyZCBEZWJ1Z2dlcnMqKjogU3RhbmRhcmQgS0FTQU4gZnV6emluZyBhbmQgdGhlIG5ldHdvcmtpbmcgc3RhY2smIzM5O3MgYnVpbHQtaW4gYXNzZXJ0aW9ucy9jaGVja3MgYXJlIHN1ZmZpY2llbnQgdG8gdGVzdCBza2IgY29uc3RydWN0aW9uIGFuZCBwYWNrZXQgdHJhbnNtaXNzaW9uIGluIEFGX1hEUC5cblxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDNUMDc6MzY6NTQuMDE4NjY4OTk0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTc1ODIxMTcwNjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWERQX1NPQ0tFVFNcIixcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwieHNrX2Rlc3RydWN0X3NrYlwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIHNpbmdsZSBjYWxsIHRvIGBza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKWAgd2l0aGluIGB4c2tfc2tiX2luaXRfbWlzYygpYCBpbiB0aGUgQUZfWERQIHN1YnN5c3RlbSAoYG5ldC94ZHAveHNrLmNgKS5cXG5cXG5LTVNBTiB2cy4gS0FTQU4gYXBwbGljYWJpbGl0eSBhbmFseXNpczpcXG4tICoqS01TQU4gUmVsZXZhbmNlKio6IEtNU0FOIGRldGVjdHMgdXNlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuZCBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2VyIHNwYWNlLiBUaGUgcGF0Y2ggc2ltcGx5IGluaXRpYWxpemVzIHRoZSBgbmV0d29ya19oZWFkZXJgIG9mZnNldCBvbiB0aGUgbmV3bHkgY3JlYXRlZCBgc2tfYnVmZmAgdG8gbWF0Y2ggYHNrYi1cXHUwMDNlZGF0YWAuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHN0YWNrL2hlYXAgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIHBhZGRpbmcgb3Igc3RydWN0IGZpZWxkcyB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgYWx0ZXIgbGVuZ3RoIGNhbGN1bGF0aW9ucyBvciBib3VuZHMgY2hlY2tzIGluIGEgd2F5IHRoYXQgd291bGQgYWxsb3cgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuXFxuLSAqKktBU0FOIC8gU3RhbmRhcmQgRGVidWdnZXJzKio6IFN0YW5kYXJkIEtBU0FOIGZ1enppbmcgYW5kIHRoZSBuZXR3b3JraW5nIHN0YWNrJ3MgYnVpbHQtaW4gYXNzZXJ0aW9ucy9jaGVja3MgYXJlIHN1ZmZpY2llbnQgdG8gdGVzdCBza2IgY29uc3RydWN0aW9uIGFuZCBwYWNrZXQgdHJhbnNtaXNzaW9uIGluIEFGX1hEUC5cXG5cXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKCkgdG8geHNrX3NrYl9pbml0X21pc2MoKSB3aGVuIGJ1aWxkaW5nIHNrYnMgZm9yIEFGX1hEUCBzb2NrZXRzIHRyYW5zbWl0LiBUaGlzIG1vZGlmaWVzIGNvcmUgbmV0d29ya2luZyBBRl9YRFAgbG9naWMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBhbmQgaXMgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDc6MzY6NTQuMDE4NjczNjI0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzE1Mjk0MjU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYjA3ZDg1YmY5ZThlZGVjZjdlZmIzMWZhM2NmMmIwODJiNGM1MzQ0YVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IFNlcCAzIDA3OjM2OjUyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC94ZHAveHNrLmMgYi9uZXQveGRwL3hzay5jXFxuaW5kZXggMzM0NzViMTgwZWE2Zi4uMjA3N2JiNjI5OWNhOSAxMDA2NDRcXG4tLS0gYS9uZXQveGRwL3hzay5jXFxuKysrIGIvbmV0L3hkcC94c2suY1xcbkBAIC05NDcsNiArOTQ3LDggQEAgc3RhdGljIGludCB4c2tfc2tiX2luaXRfbWlzYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeGRwX3NvY2sgKnhzLFxcbiB7XFxuIFxcdGludCBlcnI7XFxuIFxcbitcXHRza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKTtcXG4rXFxuIFxcdGVyciA9IHhza19za2JfZGVzdHJ1Y3Rvcl9zZXRfYWRkcihza2IsIGFkZHIpO1xcbiBcXHRpZiAodW5saWtlbHkoZXJyKSlcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDc6MzY6NTUuMzM0NjgwMjQzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo2Mjk1OTAyMzQ2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJYRFBfU09DS0VUU1wiLFxuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ4c2tfZGVzdHJ1Y3Rfc2tiXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoKSB0byB4c2tfc2tiX2luaXRfbWlzYygpIHdoZW4gYnVpbGRpbmcgc2ticyBmb3IgQUZfWERQIHNvY2tldHMgdHJhbnNtaXQuIFRoaXMgbW9kaWZpZXMgY29yZSBuZXR3b3JraW5nIEFGX1hEUCBsb2dpYyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGFuZCBpcyB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBiMDdkODViZjllOGVkZWNmN2VmYjMxZmEzY2YyYjA4MmI0YzUzNDRhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMyAwNzozNjo1MiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC94ZHAveHNrLmMgYi9uZXQveGRwL3hzay5jXG5pbmRleCAzMzQ3NWIxODBlYTZmLi4yMDc3YmI2Mjk5Y2E5IDEwMDY0NFxuLS0tIGEvbmV0L3hkcC94c2suY1xuKysrIGIvbmV0L3hkcC94c2suY1xuQEAgLTk0Nyw2ICs5NDcsOCBAQCBzdGF0aWMgaW50IHhza19za2JfaW5pdF9taXNjKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4ZHBfc29jayAqeHMsXG4ge1xuIFx0aW50IGVycjtcbiBcbitcdHNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpO1xuK1xuIFx0ZXJyID0geHNrX3NrYl9kZXN0cnVjdG9yX3NldF9hZGRyKHNrYiwgYWRkcik7XG4gXHRpZiAodW5saWtlbHkoZXJyKSlcbiBcdFx0cmV0dXJuIGVycjtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA3OjM2OjU1LjMzNDY4NDQzM1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYwNzM4NDM2NDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIENvbW1pdCBgYjA3ZDg1YmY5ZThlZGVjZjdlZmIzMWZhM2NmMmIwODJiNGM1MzQ0YWAqKlxuXG5Pa2F5LCBzbyB0aGUgdGFzayBhdCBoYW5kIGlzIHRvIGRpc3NlY3QgY29tbWl0IGBiMDdkODViZjllOGVkZWNmN2VmYjMxZmEzY2YyYjA4MmI0YzUzNDRhYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGNoYW5nZWQgYW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhvc2UgY2hhbmdlcy4gTGV0J3Mgc3RhcnQgYnkgbG9va2luZyBkaXJlY3RseSBhdCB0aGUgZGlmZi5cblxuQWxyaWdodCwgYSBzaW1wbGUgYWRkaXRpb24uIFRoZSBkaWZmIHNob3dzIGEgc2luZ2xlIGxpbmUgYmVpbmcgaW5zZXJ0ZWQ6IGBza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKTtgIHdpdGhpbiB0aGUgYHhza19za2JfaW5pdF9taXNjKClgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgaW4gdGhlIGBuZXQveGRwL3hzay5jYCBmaWxlLiBUaGlzIGlzIGNydWNpYWw7IHJlc2V0dGluZyB0aGUgbmV0d29yayBoZWFkZXIgc3VnZ2VzdHMgc29tZXRoaW5nIHNpZ25pZmljYW50IGFib3V0IGhvdyB0aGUgU0tCJ3MgbmV0d29yayBsYXllciBpbmZvcm1hdGlvbiBpcyBoYW5kbGVkLCBvciBuZWVkcyB0byBiZSBoYW5kbGVkLCBwcmlvciB0byBmdXJ0aGVyIHByb2Nlc3NpbmcsIGxpa2VseSByZWxhdGVkIHRvIFhEUCBzb2NrZXRzLiBUaGUgcHJlc2VuY2Ugb2YgdGhlIGB1bmxpa2VseSgpYCBtYWNybyBpbiB0aGUgc3Vic2VxdWVudCBmdW5jdGlvbiBjYWxsIGltcGxpZXMgdGhlIGFkZGVkIGxpbmUgaXMgaW50ZW5kZWQgdG8gaW1wcm92ZSBwZXJmb3JtYW5jZSBpbiB0aGUgY29tbW9uIGNhc2UuXG5cbk5vdyBJIG5lZWQgdG8gdW5kZXJzdGFuZCAqd2h5KiB0aGlzIGNoYW5nZSB3YXMgbWFkZS4gSXQncyBub3QgZW5vdWdoIHRvIHNpbXBseSBzZWUgdGhlIGxpbmUgb2YgY29kZS4gSSBuZWVkIGNvbnRleHQuIEknbGwgbmVlZCB0byBkaWcgaW50byB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiBgbmV0L3hkcC94c2suY2AgYXJvdW5kIGxpbmUgOTQ3LCBhbmQgdGhlIHBvc3NpYmxlIHJlYXNvbnMgZm9yIHJlc2V0dGluZyB0aGUgbmV0d29yayBoZWFkZXIuIEknbGwgcHJvYmFibHkgbG9vayB0byByZWFkIHRoZSBmaWxlIHdpdGggYHJlYWQtZmlsZWAsIG9yIHVzZSBgZ3JlcHBlcmAgdG8gZmluZCByZWxhdGVkIGNvZGUgYW5kIGRvY3VtZW50YXRpb24uIFNwZWNpZmljYWxseSwgSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bmN0aW9uIG9mIGB4c2tfc2tiX2luaXRfbWlzYygpYCwgaG93IGl0J3MgdXNlZCBpbiB0aGUgWERQIHNvY2tldCBsaWZlY3ljbGUsIGFuZCBob3cgdGhlIG5ldHdvcmsgaGVhZGVyIGlzIHN1YnNlcXVlbnRseSB1dGlsaXplZC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCdzIGRpZmZlcmVudCBiZWZvcmUgYW5kIGFmdGVyIHRoZSBjaGFuZ2UgdG8gY29tcHJlaGVuZCB3aGF0IGlzIGJlaW5nIGZpeGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDYxLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjkyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDc6Mzc6MDEuNDA4NTMwNzk2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA1NjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC94ZHAveHNrLmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTMwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgOTMwOlxcdFxcbiA5MzE6XFx0SU5ESVJFQ1RfQ0FMTEFCTEVfU0NPUEVcXG4gOTMyOlxcdHZvaWQgeHNrX2Rlc3RydWN0X3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiA5MzM6XFx0e1xcbiA5MzQ6XFx0XFx0c3RydWN0IHhza190eF9tZXRhZGF0YV9jb21wbCAqY29tcGwgPSBcXHUwMDI2c2tiX3NoaW5mbyhza2IpLVxcdTAwM2V4c2tfbWV0YTtcXG4gOTM1OlxcdFxcbiA5MzY6XFx0XFx0aWYgKGNvbXBsLVxcdTAwM2V0eF90aW1lc3RhbXApIHtcXG4gOTM3OlxcdFxcdFxcdC8qIHN3IGNvbXBsZXRpb24gdGltZXN0YW1wLCBub3QgYSByZWFsIG9uZSAqL1xcbiA5Mzg6XFx0XFx0XFx0KmNvbXBsLVxcdTAwM2V0eF90aW1lc3RhbXAgPSBrdGltZV9nZXRfdGFpX2Zhc3RfbnMoKTtcXG4gOTM5OlxcdFxcdH1cXG4gOTQwOlxcdFxcbiA5NDE6XFx0XFx0eHNrX2NxX3N1Ym1pdF9hZGRyX2xvY2tlZCh4ZHBfc2soc2tiLVxcdTAwM2VzayktXFx1MDAzZXBvb2wsIHNrYik7XFxuIDk0MjpcXHRcXHRzb2NrX3dmcmVlKHNrYik7XFxuIDk0MzpcXHR9XFxuIDk0NDpcXHRcXG4gOTQ1OlxcdHN0YXRpYyBpbnQgeHNrX3NrYl9pbml0X21pc2Moc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHhkcF9zb2NrICp4cyxcXG4gOTQ2OlxcdFxcdFxcdFxcdCAgICAgdTY0IGFkZHIpXFxuIDk0NzpcXHR7XFxuIDk0ODpcXHRcXHRpbnQgZXJyO1xcbiA5NDk6XFx0XFxuIDk1MDpcXHRcXHRza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKTtcXG4gOTUxOlxcdFxcbiA5NTI6XFx0XFx0ZXJyID0geHNrX3NrYl9kZXN0cnVjdG9yX3NldF9hZGRyKHNrYiwgYWRkcik7XFxuIDk1MzpcXHRcXHRpZiAodW5saWtlbHkoZXJyKSlcXG4gOTU0OlxcdFxcdFxcdHJldHVybiBlcnI7XFxuIDk1NTpcXHRcXG4gOTU2OlxcdFxcdHNrYi1cXHUwMDNlZGV2ID0geHMtXFx1MDAzZWRldjtcXG4gOTU3OlxcdFxcdHNrYi1cXHUwMDNlcHJpb3JpdHkgPSBSRUFEX09OQ0UoeHMtXFx1MDAzZXNrLnNrX3ByaW9yaXR5KTtcXG4gOTU4OlxcdFxcdHNrYi1cXHUwMDNlbWFyayA9IFJFQURfT05DRSh4cy1cXHUwMDNlc2suc2tfbWFyayk7XFxuIDk1OTpcXHRcXHRza2ItXFx1MDAzZWRlc3RydWN0b3IgPSB4c2tfZGVzdHJ1Y3Rfc2tiO1xcbiA5NjA6XFx0XFx0cmV0dXJuIDA7XFxuIDk2MTpcXHR9XFxuIDk2MjpcXHRcXG4gOTYzOlxcdHN0YXRpYyB2b2lkIHhza19jb25zdW1lX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiA5NjQ6XFx0e1xcbiA5NjU6XFx0XFx0c3RydWN0IHhkcF9zb2NrICp4cyA9IHhkcF9zayhza2ItXFx1MDAzZXNrKTtcXG4gOTY2OlxcdFxcdHUzMiBudW1fZGVzY3MgPSB4c2tfZ2V0X251bV9kZXNjKHNrYik7XFxuIDk2NzpcXHRcXHRzdHJ1Y3QgeHNrX2FkZHJzICp4c2tfYWRkcjtcXG4gOTY4OlxcdFxcbiA5Njk6XFx0XFx0aWYgKHVubGlrZWx5KCF4c2tfc2tiX2Rlc3RydWN0b3JfaXNfYWRkcihza2IpKSkge1xcbiA5NzA6XFx0XFx0XFx0eHNrX2FkZHIgPSAoc3RydWN0IHhza19hZGRycyAqKXNrYl9zaGluZm8oc2tiKS1cXHUwMDNlZGVzdHJ1Y3Rvcl9hcmc7XFxuIDk3MTpcXHRcXHRcXHRrbWVtX2NhY2hlX2ZyZWUoeHNrX3R4X2dlbmVyaWNfY2FjaGUsIHhza19hZGRyKTtcXG4gOTcyOlxcdFxcdH1cXG4gOTczOlxcdFxcbiA5NzQ6XFx0XFx0c2tiLVxcdTAwM2VkZXN0cnVjdG9yID0gc29ja193ZnJlZTtcXG4gOTc1OlxcdFxcdHhza19jcV9jYW5jZWxfbG9ja2VkKHhzLVxcdTAwM2Vwb29sLCBudW1fZGVzY3MpO1xcbiA5NzY6XFx0XFx0LyogRnJlZSBza2Igd2l0aG91dCB0cmlnZ2VyaW5nIHRoZSBwZXJmIGRyb3AgdHJhY2UgKi9cXG4gOTc3OlxcdFxcdGNvbnN1bWVfc2tiKHNrYik7XFxuIDk3ODpcXHRcXHR4cy1cXHUwMDNlc2tiID0gTlVMTDtcXG4gOTc5OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDc6Mzc6MDEuNDA4NjM4MTY2WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjM4NDk0NDQ2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYHhza19za2JfaW5pdF9taXNjYCBmdW5jdGlvbiBhbmQgc2VlIHdoYXQncyBnb2luZyBvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNvbnRleHQgd2l0aGluIHRoZSBYRFAvWFNLIGZyYW1ld29yay4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdHJhY2UgaXRzIGNhbGxzLCBhbmQgdW5kZXJzdGFuZCBpdHMgYXJndW1lbnRzIC0gYW5kIGxvb2sgZm9yIHRoZSBjYWxsaW5nIHBhdHRlcm4gZnJvbSB0aGUgcGxhY2VzIHdoZXJlIGl0J3MgYmVpbmcgdXNlZC4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgSSdsbCBuZWVkIHRvIHJlYWQgbW9yZSBvZiBgbmV0L3hkcC94c2suY2AgdG8gZ2V0IHRoZSBiaWdnZXIgcGljdHVyZS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhpcyBpbml0aWFsaXphdGlvbiBpcyB1dGlsaXplZCB3aXRoaW4gdGhlIFhTSyBzdHJ1Y3R1cmUuIFVsdGltYXRlbHksIHRoZSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgbGl0dGxlIHBpZWNlIGZpdHMgaW50byB0aGUgb3ZlcmFsbCBwZXJmb3JtYW5jZSBwcm9maWxlIC0gYW5kIHdoZXJlIHBvdGVudGlhbCBib3R0bGVuZWNrcyBjb3VsZCBiZS4gSXQncyB0aW1lIHRvIGRpZyBpbiFcblxuXG4iLCJJbnB1dFRva2VucyI6MzYyOSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDc6Mzc6MDMuNzkzNTg0ODY4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MTE3MTc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInhza19za2JfaW5pdF9taXNjXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZHAvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZHAveHNrLmM9OTMyPXZvaWQgeHNrX2Rlc3RydWN0X3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L3hkcC94c2suYy05NDQtXFxubmV0L3hkcC94c2suYzo5NDU6c3RhdGljIGludCB4c2tfc2tiX2luaXRfbWlzYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeGRwX3NvY2sgKnhzLFxcbm5ldC94ZHAveHNrLmMtOTQ2LVxcdFxcdFxcdCAgICAgdTY0IGFkZHIpXFxuLS1cXG5uZXQveGRwL3hzay5jPTExMTE9c3RhdGljIHN0cnVjdCBza19idWZmICp4c2tfYnVpbGRfc2tiKHN0cnVjdCB4ZHBfc29jayAqeHMsXFxuLS1cXG5uZXQveGRwL3hzay5jLTExODYtXFx0aWYgKCF4cy1cXHUwMDNlc2tiKSB7XFxubmV0L3hkcC94c2suYzoxMTg3OlxcdFxcdGVyciA9IHhza19za2JfaW5pdF9taXNjKHNrYiwgeHMsIGRlc2MtXFx1MDAzZWFkZHIpO1xcbm5ldC94ZHAveHNrLmMtMTE4OC1cXHRcXHRpZiAodW5saWtlbHkoZXJyKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDc6Mzc6MDMuODM5NzA3MjM3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6OTA3MzM2MDk2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gWFNLIFBhY2tldCBUcmFuc21pc3Npb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyBYU0sgcGFja2V0cyBhcmUgYWN0dWFsbHkgbW92ZWQgYXJvdW5kIGFuZCBwcm9jZXNzZWQuIEknbSBmb2N1c2luZyBvbiB0aGUgYHhza19idWlsZF9za2JgIGZ1bmN0aW9uIGFuZCB0aGUgc3Vycm91bmRpbmcgY29udGV4dC4gVGltZSB0byBjcmFjayBvcGVuIGBuZXQveGRwL3hzay5jYCwgc3BlY2lmaWNhbGx5IGxpbmVzIDExMDAgdGhyb3VnaCAxMjUwLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBzcGVjaWZpY3MgSSdtIGxvb2tpbmcgZm9yLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbWVjaGFuaWNzIG9mIHRoZSBwYWNrZXQncyBqb3VybmV5OiBob3cgaXQgZ2V0cyBidWlsdCBpbnRvIGFuIFNLQiAoU29ja2V0IEJ1ZmZlciksIGFuZCB0aGVuIHdoZXJlIGl0IGdvZXMgZnJvbSB0aGVyZSB3aXRoaW4gdGhlIFhTSyBmcmFtZXdvcmsuIFRoaXMgcGFydGljdWxhciBzZWdtZW50IG9mIHRoZSBjb2RlIGxpa2VseSBkZWFscyB3aXRoIHRoZSBjcml0aWNhbCBwYXRoIG9mIHRoZSBwYWNrZXQncyBsaWZlY3ljbGUsIHNvIHVuZGVyc3RhbmRpbmcgdGhpcyBpcyBlc3NlbnRpYWwgdG8gdGhlIFhTSyBwcm9jZXNzaW5nIG1vZGVsLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIGFib3V0IHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZSB1c2VyLXNwYWNlIGFwcGxpY2F0aW9uLCB0aGUgWERQIHByb2dyYW0sIGFuZCB0aGUga2VybmVsIG5ldHdvcmsgc3RhY2sgaW4gdGhpcyBjcnVjaWFsIHN0ZXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQxMTksIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwNzozNzoxMi45MTMwNzAzMzFaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzM0NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3hkcC94c2suY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMTAwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTEwMDpcXHRcXHR9XFxuMTEwMTpcXHRcXG4xMTAyOlxcdFxcdHNrYi1cXHUwMDNlbGVuICs9IGxlbjtcXG4xMTAzOlxcdFxcdHNrYi1cXHUwMDNlZGF0YV9sZW4gKz0gbGVuO1xcbjExMDQ6XFx0XFx0c2tiLVxcdTAwM2V0cnVlc2l6ZSArPSB0cztcXG4xMTA1OlxcdFxcbjExMDY6XFx0XFx0cmVmY291bnRfYWRkKHRzLCBcXHUwMDI2eHMtXFx1MDAzZXNrLnNrX3dtZW1fYWxsb2MpO1xcbjExMDc6XFx0XFxuMTEwODpcXHRcXHRyZXR1cm4gc2tiO1xcbjExMDk6XFx0fVxcbjExMTA6XFx0XFxuMTExMTpcXHRzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhza19idWlsZF9za2Ioc3RydWN0IHhkcF9zb2NrICp4cyxcXG4xMTEyOlxcdFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IHhkcF9kZXNjICpkZXNjKVxcbjExMTM6XFx0e1xcbjExMTQ6XFx0XFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHhzLVxcdTAwM2VkZXY7XFxuMTExNTpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0geHMtXFx1MDAzZXNrYjtcXG4xMTE2OlxcdFxcdGludCBlcnI7XFxuMTExNzpcXHRcXG4xMTE4OlxcdFxcdGlmIChkZXYtXFx1MDAzZXByaXZfZmxhZ3MgXFx1MDAyNiBJRkZfVFhfU0tCX05PX0xJTkVBUikge1xcbjExMTk6XFx0XFx0XFx0c2tiID0geHNrX2J1aWxkX3NrYl96ZXJvY29weSh4cywgZGVzYyk7XFxuMTEyMDpcXHRcXHRcXHRpZiAoSVNfRVJSKHNrYikpIHtcXG4xMTIxOlxcdFxcdFxcdFxcdGVyciA9IFBUUl9FUlIoc2tiKTtcXG4xMTIyOlxcdFxcdFxcdFxcdHNrYiA9IE5VTEw7XFxuMTEyMzpcXHRcXHRcXHRcXHRnb3RvIGZyZWVfZXJyO1xcbjExMjQ6XFx0XFx0XFx0fVxcbjExMjU6XFx0XFx0fSBlbHNlIHtcXG4xMTI2OlxcdFxcdFxcdHUzMiBociwgdHIsIGxlbjtcXG4xMTI3OlxcdFxcdFxcdHZvaWQgKmJ1ZmZlcjtcXG4xMTI4OlxcdFxcbjExMjk6XFx0XFx0XFx0YnVmZmVyID0geHNrX2J1ZmZfcmF3X2dldF9kYXRhKHhzLVxcdTAwM2Vwb29sLCBkZXNjLVxcdTAwM2VhZGRyKTtcXG4xMTMwOlxcdFxcdFxcdGxlbiA9IGRlc2MtXFx1MDAzZWxlbjtcXG4xMTMxOlxcdFxcbjExMzI6XFx0XFx0XFx0aWYgKCFza2IpIHtcXG4xMTMzOlxcdFxcdFxcdFxcdGhyID0gbWF4KE5FVF9TS0JfUEFELCBMMV9DQUNIRV9BTElHTihkZXYtXFx1MDAzZW5lZWRlZF9oZWFkcm9vbSkpO1xcbjExMzQ6XFx0XFx0XFx0XFx0dHIgPSBkZXYtXFx1MDAzZW5lZWRlZF90YWlscm9vbTtcXG4xMTM1OlxcdFxcdFxcdFxcdHNrYiA9IHNvY2tfYWxsb2Nfc2VuZF9za2IoXFx1MDAyNnhzLVxcdTAwM2VzaywgaHIgKyBsZW4gKyB0ciwgMSwgXFx1MDAyNmVycik7XFxuMTEzNjpcXHRcXHRcXHRcXHRpZiAodW5saWtlbHkoIXNrYikpXFxuMTEzNzpcXHRcXHRcXHRcXHRcXHRnb3RvIGZyZWVfZXJyO1xcbjExMzg6XFx0XFxuMTEzOTpcXHRcXHRcXHRcXHRza2JfcmVzZXJ2ZShza2IsIGhyKTtcXG4xMTQwOlxcdFxcdFxcdFxcdHNrYl9wdXQoc2tiLCBsZW4pO1xcbjExNDE6XFx0XFxuMTE0MjpcXHRcXHRcXHRcXHRlcnIgPSBza2Jfc3RvcmVfYml0cyhza2IsIDAsIGJ1ZmZlciwgbGVuKTtcXG4xMTQzOlxcdFxcdFxcdFxcdGlmICh1bmxpa2VseShlcnIpKVxcbjExNDQ6XFx0XFx0XFx0XFx0XFx0Z290byBmcmVlX2VycjtcXG4xMTQ1OlxcdFxcbjExNDY6XFx0XFx0XFx0XFx0aWYgKGRlc2MtXFx1MDAzZW9wdGlvbnMgXFx1MDAyNiBYRFBfVFhfTUVUQURBVEEpIHtcXG4xMTQ3OlxcdFxcdFxcdFxcdFxcdGVyciA9IHhza19za2JfbWV0YWRhdGEoc2tiLCBidWZmZXIsIGRlc2MsXFxuMTE0ODpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgeHMtXFx1MDAzZXBvb2wsIGhyKTtcXG4xMTQ5OlxcdFxcdFxcdFxcdFxcdGlmICh1bmxpa2VseShlcnIpKVxcbjExNTA6XFx0XFx0XFx0XFx0XFx0XFx0Z290byBmcmVlX2VycjtcXG4xMTUxOlxcdFxcdFxcdFxcdH1cXG4xMTUyOlxcdFxcdFxcdH0gZWxzZSB7XFxuMTE1MzpcXHRcXHRcXHRcXHRpbnQgbnJfZnJhZ3MgPSBza2Jfc2hpbmZvKHNrYiktXFx1MDAzZW5yX2ZyYWdzO1xcbjExNTQ6XFx0XFx0XFx0XFx0c3RydWN0IHhza19hZGRycyAqeHNrX2FkZHI7XFxuMTE1NTpcXHRcXHRcXHRcXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcXG4xMTU2OlxcdFxcdFxcdFxcdHU4ICp2YWRkcjtcXG4xMTU3OlxcdFxcbjExNTg6XFx0XFx0XFx0XFx0eHNrX2FkZHIgPSB4c2tfYWRkcnNfYWxsb2Moc2tiKTtcXG4xMTU5OlxcdFxcdFxcdFxcdGlmICgheHNrX2FkZHIpIHtcXG4xMTYwOlxcdFxcdFxcdFxcdFxcdGVyciA9IC1FTk9NRU07XFxuMTE2MTpcXHRcXHRcXHRcXHRcXHRnb3RvIGZyZWVfZXJyO1xcbjExNjI6XFx0XFx0XFx0XFx0fVxcbjExNjM6XFx0XFxuMTE2NDpcXHRcXHRcXHRcXHR4c2tfYWRkci1cXHUwMDNlYWRkcnNbeHNrX2FkZHItXFx1MDAzZW51bV9kZXNjc10gPSBkZXNjLVxcdTAwM2VhZGRyO1xcbjExNjU6XFx0XFxuMTE2NjpcXHRcXHRcXHRcXHRpZiAodW5saWtlbHkobnJfZnJhZ3MgPT0gKE1BWF9TS0JfRlJBR1MgLSAxKSBcXHUwMDI2XFx1MDAyNiB4cF9tYl9kZXNjKGRlc2MpKSkge1xcbjExNjc6XFx0XFx0XFx0XFx0XFx0ZXJyID0gLUVPVkVSRkxPVztcXG4xMTY4OlxcdFxcdFxcdFxcdFxcdGdvdG8gZnJlZV9lcnI7XFxuMTE2OTpcXHRcXHRcXHRcXHR9XFxuMTE3MDpcXHRcXG4xMTcxOlxcdFxcdFxcdFxcdHBhZ2UgPSBhbGxvY19wYWdlKHhzLVxcdTAwM2Vzay5za19hbGxvY2F0aW9uKTtcXG4xMTcyOlxcdFxcdFxcdFxcdGlmICh1bmxpa2VseSghcGFnZSkpIHtcXG4xMTczOlxcdFxcdFxcdFxcdFxcdGVyciA9IC1FQUdBSU47XFxuMTE3NDpcXHRcXHRcXHRcXHRcXHRnb3RvIGZyZWVfZXJyO1xcbjExNzU6XFx0XFx0XFx0XFx0fVxcbjExNzY6XFx0XFxuMTE3NzpcXHRcXHRcXHRcXHR2YWRkciA9IGttYXBfbG9jYWxfcGFnZShwYWdlKTtcXG4xMTc4OlxcdFxcdFxcdFxcdG1lbWNweSh2YWRkciwgYnVmZmVyLCBsZW4pO1xcbjExNzk6XFx0XFx0XFx0XFx0a3VubWFwX2xvY2FsKHZhZGRyKTtcXG4xMTgwOlxcdFxcbjExODE6XFx0XFx0XFx0XFx0c2tiX2FkZF9yeF9mcmFnKHNrYiwgbnJfZnJhZ3MsIHBhZ2UsIDAsIGxlbiwgUEFHRV9TSVpFKTtcXG4xMTgyOlxcdFxcdFxcdFxcdHJlZmNvdW50X2FkZChQQUdFX1NJWkUsIFxcdTAwMjZ4cy1cXHUwMDNlc2suc2tfd21lbV9hbGxvYyk7XFxuMTE4MzpcXHRcXHRcXHR9XFxuMTE4NDpcXHRcXHR9XFxuMTE4NTpcXHRcXG4xMTg2OlxcdFxcdGlmICgheHMtXFx1MDAzZXNrYikge1xcbjExODc6XFx0XFx0XFx0ZXJyID0geHNrX3NrYl9pbml0X21pc2Moc2tiLCB4cywgZGVzYy1cXHUwMDNlYWRkcik7XFxuMTE4ODpcXHRcXHRcXHRpZiAodW5saWtlbHkoZXJyKSlcXG4xMTg5OlxcdFxcdFxcdFxcdGdvdG8gZnJlZV9lcnI7XFxuMTE5MDpcXHRcXHR9XFxuMTE5MTpcXHRcXHR4c2tfaW5jX251bV9kZXNjKHNrYik7XFxuMTE5MjpcXHRcXG4xMTkzOlxcdFxcdHJldHVybiBza2I7XFxuMTE5NDpcXHRcXG4xMTk1OlxcdGZyZWVfZXJyOlxcbjExOTY6XFx0XFx0aWYgKHNrYiBcXHUwMDI2XFx1MDAyNiAheHMtXFx1MDAzZXNrYilcXG4xMTk3OlxcdFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbjExOTg6XFx0XFxuMTE5OTpcXHRcXHRpZiAoZXJyID09IC1FT1ZFUkZMT1cpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDc6Mzc6MTIuOTEzMjA0OTIxWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzI0MTIwOTAxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEaXZpbmcgaW50byBBRl9YRFAgYW5kIHhza19idWlsZF9za2IqKlxuXG5Pa2F5LCBzbyBJIHdhbnQgdG8gZ2V0IGEgc29saWQgZ3Jhc3Agb2YgaG93IEFGX1hEUCBhbmQsIHNwZWNpZmljYWxseSwgdGhlIGB4c2tfYnVpbGRfc2tiYCBmdW5jdGlvbiwgYXJlIGZ1bmN0aW9uaW5nLiBNeSBmaXJzdCBpbnN0aW5jdCwgYXMgYWx3YXlzLCBpcyB0byB0cmFjZSBpdHMgdXNhZ2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjYWxsIGZsb3cg4oCTIHdoZXJlIGlzIHRoaXMgdGhpbmcgYWN0dWFsbHkgYmVpbmcgKnVzZWQqPyBUaGlzIG1lYW5zIGdldHRpbmcgdGhlIGNhbGwgZ3JhcGggZm9yIGB4c2tfYnVpbGRfc2tiYCwgc2VlaW5nIHRoZSBpbW1lZGlhdGUgY2FsbGVycy4gQWx0ZXJuYXRpdmVseSwgc2luY2UgaXQgaXMgdXNlZCBpbiBBRl9YRFAsIGEgYnJvYWRlciBzZWFyY2ggd291bGQgYmUgdG8gZmluZCBjYWxsZXJzIGluIHRoZSBgbmV0L3hkcC94c2suY2Agc291cmNlIGZpbGUuIFVuZGVyc3RhbmRpbmcgdGhlc2UgY29udGV4dHMgd2lsbCBwYWludCBhIGNsZWFyZXIgcGljdHVyZSBvZiBob3cgQUZfWERQIGlzIHB1dCB0b2dldGhlci4gSXQgd2lsbCBzaG93IG1lIHRoZSBkYXRhIGZsb3cgYW5kIGhvdyB0aGUgcGFydHMgbGluayB0b2dldGhlci4gVGhpcyBpcyB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIHJlYWxseSBkaWdnaW5nIGludG8gdGhlIGRldGFpbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU5MDMsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA3OjM3OjE2LjE1NDQxNTY2OVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ3NDI0NzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieHNrX2J1aWxkX3NrYlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGRwL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGRwL3hzay5jPTk5MD1zdGF0aWMgaW50IHhza19za2JfbWV0YWRhdGEoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdm9pZCAqYnVmZmVyLFxcbi0tXFxubmV0L3hkcC94c2suYy0xMDM0LVxcbm5ldC94ZHAveHNrLmM6MTAzNTpzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhza19idWlsZF9za2JfemVyb2NvcHkoc3RydWN0IHhkcF9zb2NrICp4cyxcXG5uZXQveGRwL3hzay5jLTEwMzYtXFx0XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHhkcF9kZXNjICpkZXNjKVxcbi0tXFxubmV0L3hkcC94c2suYy0xMTEwLVxcbm5ldC94ZHAveHNrLmM6MTExMTpzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhza19idWlsZF9za2Ioc3RydWN0IHhkcF9zb2NrICp4cyxcXG5uZXQveGRwL3hzay5jLTExMTItXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgeGRwX2Rlc2MgKmRlc2MpXFxuLS1cXG5uZXQveGRwL3hzay5jLTExMTgtXFx0aWYgKGRldi1cXHUwMDNlcHJpdl9mbGFncyBcXHUwMDI2IElGRl9UWF9TS0JfTk9fTElORUFSKSB7XFxubmV0L3hkcC94c2suYzoxMTE5OlxcdFxcdHNrYiA9IHhza19idWlsZF9za2JfemVyb2NvcHkoeHMsIGRlc2MpO1xcbm5ldC94ZHAveHNrLmMtMTEyMC1cXHRcXHRpZiAoSVNfRVJSKHNrYikpIHtcXG4tLVxcbm5ldC94ZHAveHNrLmM9MTIxNz1zdGF0aWMgaW50IF9feHNrX2dlbmVyaWNfeG1pdChzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQveGRwL3hzay5jLTEyNjMtXFxubmV0L3hkcC94c2suYzoxMjY0OlxcdFxcdHNrYiA9IHhza19idWlsZF9za2IoeHMsIFxcdTAwMjZkZXNjKTtcXG5uZXQveGRwL3hzay5jLTEyNjUtXFx0XFx0aWYgKElTX0VSUihza2IpKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA3OjM3OjE2LjE5OTE2NDYxOFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyOTM5NDU2MjMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgdGhlIEFGX1hEUCBHZW5lcmljIFRyYW5zbWl0IFBhdGgqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoZSBgX194c2tfZ2VuZXJpY194bWl0YCBmdW5jdGlvbi4gSXQncyBjbGVhcmx5IGEga2V5IGNvbXBvbmVudCBvZiB0aGUgQUZfWERQIChYU0sgLSBYRFAgU29ja2V0cykgZ2VuZXJpYyB0cmFuc21pdCBwYXRoLiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byB1bmRlcnN0YW5kIHdoYXQgYWN0dWFsbHkgKnRyaWdnZXJzKiB0aGlzIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdHJhY2UgdGhlIGNhbGwgcGF0aHMgdG8gZmlndXJlIG91dCBob3cgcGFja2V0cyBlbmQgdXAgYmVpbmcgdHJhbnNtaXR0ZWQgdmlhIGBfX3hza19nZW5lcmljX3htaXRgLlxuXG5JJ2xsIGJlIGxvb2tpbmcgc3BlY2lmaWNhbGx5IGF0IHRoZSBBRl9YRFAgc29ja2V0IEFQSSB1c2FnZS4gSSBleHBlY3QgaXQgaXMgcHJvYmFibHkgaW52b2x2ZWQgaW4gZWl0aGVyIHRoZSBgc2VuZG1zZ2Agc3lzY2FsbCBvciB0aGUgYHBvbGxgIHN5c3RlbSBjYWxsIHdoZW4gdXNlZCB3aXRoIFhEUCBzb2NrZXRzLiBJJ2xsIG5lZWQgdG8gc2VlIGhvdyB0aGVzZSBjYWxscyBpbnRlcmFjdCB3aXRoIHRoZSB1bmRlcmx5aW5nIFhTSyBkYXRhIHN0cnVjdHVyZXMgdG8gZmlndXJlIG91dCB3aGVuIGFuZCB3aHkgYF9feHNrX2dlbmVyaWNfeG1pdGAgZ2V0cyBpbnZva2VkLCBhbmQgb24gd2hpY2ggQUZfWERQIHNvY2tldCBpbnN0YW5jZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY2MTIsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwNzozNzoxOS4xMzg2MjMzNDFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI2MzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC94ZHAveHNrLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTIxNSxcbiAgXCJMaW5lQ291bnRcIjogOTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTIxNTpcXHR9XFxuMTIxNjpcXHRcXG4xMjE3OlxcdHN0YXRpYyBpbnQgX194c2tfZ2VuZXJpY194bWl0KHN0cnVjdCBzb2NrICpzaylcXG4xMjE4OlxcdHtcXG4xMjE5OlxcdFxcdHN0cnVjdCB4ZHBfc29jayAqeHMgPSB4ZHBfc2soc2spO1xcbjEyMjA6XFx0XFx0c3RydWN0IHhkcF9kZXNjIGRlc2M7XFxuMTIyMTpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbjEyMjI6XFx0XFx0dTMyIGNhY2hlZF9jb25zO1xcbjEyMjM6XFx0XFx0dTMyIG1heF9iYXRjaDtcXG4xMjI0OlxcdFxcdGludCBlcnIgPSAwO1xcbjEyMjU6XFx0XFxuMTIyNjpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZ4cy1cXHUwMDNlbXV0ZXgpO1xcbjEyMjc6XFx0XFx0Y2FjaGVkX2NvbnMgPSB4cy1cXHUwMDNldHgtXFx1MDAzZWNhY2hlZF9jb25zO1xcbjEyMjg6XFx0XFxuMTIyOTpcXHRcXHQvKiBTaW5jZSB3ZSBkcm9wcGVkIHRoZSBSQ1UgcmVhZCBsb2NrLCB0aGUgc29ja2V0IHN0YXRlIG1pZ2h0IGhhdmUgY2hhbmdlZC4gKi9cXG4xMjMwOlxcdFxcdGlmICh1bmxpa2VseSgheHNrX2lzX2JvdW5kKHhzKSkpIHtcXG4xMjMxOlxcdFxcdFxcdGVyciA9IC1FTlhJTztcXG4xMjMyOlxcdFxcdFxcdGdvdG8gb3V0O1xcbjEyMzM6XFx0XFx0fVxcbjEyMzQ6XFx0XFxuMTIzNTpcXHRcXHRpZiAoeHMtXFx1MDAzZXF1ZXVlX2lkIFxcdTAwM2U9IHhzLVxcdTAwM2VkZXYtXFx1MDAzZXJlYWxfbnVtX3R4X3F1ZXVlcylcXG4xMjM2OlxcdFxcdFxcdGdvdG8gb3V0O1xcbjEyMzc6XFx0XFxuMTIzODpcXHRcXHRtYXhfYmF0Y2ggPSBSRUFEX09OQ0UoeHMtXFx1MDAzZW1heF90eF9idWRnZXQpO1xcbjEyMzk6XFx0XFx0d2hpbGUgKHhza3FfY29uc19wZWVrX2Rlc2MoeHMtXFx1MDAzZXR4LCBcXHUwMDI2ZGVzYywgeHMtXFx1MDAzZXBvb2wpKSB7XFxuMTI0MDpcXHRcXHRcXHRpZiAobWF4X2JhdGNoLS0gPT0gMCkge1xcbjEyNDE6XFx0XFx0XFx0XFx0ZXJyID0gLUVBR0FJTjtcXG4xMjQyOlxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbjEyNDM6XFx0XFx0XFx0fVxcbjEyNDQ6XFx0XFxuMTI0NTpcXHRcXHRcXHQvKiBUaGlzIGlzIHRoZSBiYWNrcHJlc3N1cmUgbWVjaGFuaXNtIGZvciB0aGUgVHggcGF0aC5cXG4xMjQ2OlxcdFxcdFxcdCAqIFJlc2VydmUgc3BhY2UgaW4gdGhlIGNvbXBsZXRpb24gcXVldWUgYW5kIG9ubHkgcHJvY2VlZFxcbjEyNDc6XFx0XFx0XFx0ICogaWYgdGhlcmUgaXMgc3BhY2UgaW4gaXQuIFRoaXMgYXZvaWRzIGhhdmluZyB0byBpbXBsZW1lbnRcXG4xMjQ4OlxcdFxcdFxcdCAqIGFueSBidWZmZXJpbmcgaW4gdGhlIFR4IHBhdGguXFxuMTI0OTpcXHRcXHRcXHQgKi9cXG4xMjUwOlxcdFxcdFxcdGVyciA9IHhza19jcV9yZXNlcnZlX2xvY2tlZCh4cy1cXHUwMDNlcG9vbCk7XFxuMTI1MTpcXHRcXHRcXHRpZiAoZXJyKSB7XFxuMTI1MjpcXHRcXHRcXHRcXHRlcnIgPSAtRUFHQUlOO1xcbjEyNTM6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuMTI1NDpcXHRcXHRcXHR9XFxuMTI1NTpcXHRcXG4xMjU2OlxcdFxcdFxcdGlmICh1bmxpa2VseSh4cy1cXHUwMDNlZHJhaW5fY29udCkpIHtcXG4xMjU3OlxcdFxcdFxcdFxcdHhza19jcV9zdWJtaXRfYWRkcl9zaW5nbGVfbG9ja2VkKHhzLVxcdTAwM2Vwb29sLCBcXHUwMDI2ZGVzYyk7XFxuMTI1ODpcXHRcXHRcXHRcXHR4cy1cXHUwMDNldHgtXFx1MDAzZWludmFsaWRfZGVzY3MrKztcXG4xMjU5OlxcdFxcdFxcdFxcdHhza3FfY29uc19yZWxlYXNlKHhzLVxcdTAwM2V0eCk7XFxuMTI2MDpcXHRcXHRcXHRcXHR4cy1cXHUwMDNlZHJhaW5fY29udCA9IHhwX21iX2Rlc2MoXFx1MDAyNmRlc2MpO1xcbjEyNjE6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMTI2MjpcXHRcXHRcXHR9XFxuMTI2MzpcXHRcXG4xMjY0OlxcdFxcdFxcdHNrYiA9IHhza19idWlsZF9za2IoeHMsIFxcdTAwMjZkZXNjKTtcXG4xMjY1OlxcdFxcdFxcdGlmIChJU19FUlIoc2tiKSkge1xcbjEyNjY6XFx0XFx0XFx0XFx0ZXJyID0gUFRSX0VSUihza2IpO1xcbjEyNjc6XFx0XFx0XFx0XFx0aWYgKGVyciAhPSAtRU9WRVJGTE9XKVxcbjEyNjg6XFx0XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuMTI2OTpcXHRcXHRcXHRcXHRpZiAoeHBfbWJfZGVzYyhcXHUwMDI2ZGVzYykpXFxuMTI3MDpcXHRcXHRcXHRcXHRcXHR4cy1cXHUwMDNlZHJhaW5fY29udCA9IHRydWU7XFxuMTI3MTpcXHRcXHRcXHRcXHRlcnIgPSAwO1xcbjEyNzI6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMTI3MzpcXHRcXHRcXHR9XFxuMTI3NDpcXHRcXG4xMjc1OlxcdFxcdFxcdHhza3FfY29uc19yZWxlYXNlKHhzLVxcdTAwM2V0eCk7XFxuMTI3NjpcXHRcXG4xMjc3OlxcdFxcdFxcdGlmICh4cF9tYl9kZXNjKFxcdTAwMjZkZXNjKSkge1xcbjEyNzg6XFx0XFx0XFx0XFx0eHMtXFx1MDAzZXNrYiA9IHNrYjtcXG4xMjc5OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjEyODA6XFx0XFx0XFx0fVxcbjEyODE6XFx0XFxuMTI4MjpcXHRcXHRcXHRlcnIgPSBfX2Rldl9kaXJlY3RfeG1pdChza2IsIHhzLVxcdTAwM2VxdWV1ZV9pZCk7XFxuMTI4MzpcXHRcXHRcXHRpZiAgKGVyciA9PSBORVRERVZfVFhfQlVTWSkge1xcbjEyODQ6XFx0XFx0XFx0XFx0LyogVGVsbCB1c2VyLXNwYWNlIHRvIHJldHJ5IHRoZSBzZW5kICovXFxuMTI4NTpcXHRcXHRcXHRcXHR4c2txX2NvbnNfY2FuY2VsX24oeHMtXFx1MDAzZXR4LCB4c2tfZ2V0X251bV9kZXNjKHNrYikpO1xcbjEyODY6XFx0XFx0XFx0XFx0eHNrX2NvbnN1bWVfc2tiKHNrYik7XFxuMTI4NzpcXHRcXHRcXHRcXHRlcnIgPSAtRUFHQUlOO1xcbjEyODg6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuMTI4OTpcXHRcXHRcXHR9XFxuMTI5MDpcXHRcXG4xMjkxOlxcdFxcdFxcdC8qIElnbm9yZSBORVRfWE1JVF9DTiBhcyBwYWNrZXQgbWlnaHQgaGF2ZSBiZWVuIHNlbnQgKi9cXG4xMjkyOlxcdFxcdFxcdGlmIChlcnIgPT0gTkVUX1hNSVRfRFJPUCkge1xcbjEyOTM6XFx0XFx0XFx0XFx0LyogU0tCIGNvbXBsZXRlZCBidXQgbm90IHNlbnQgKi9cXG4xMjk0OlxcdFxcdFxcdFxcdGVyciA9IC1FQlVTWTtcXG4xMjk1OlxcdFxcdFxcdFxcdHhzLVxcdTAwM2Vza2IgPSBOVUxMO1xcbjEyOTY6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuMTI5NzpcXHRcXHRcXHR9XFxuMTI5ODpcXHRcXG4xMjk5OlxcdFxcdFxcdHhzLVxcdTAwM2Vza2IgPSBOVUxMO1xcbjEzMDA6XFx0XFx0fVxcbjEzMDE6XFx0XFxuMTMwMjpcXHRcXHRpZiAoeHNrcV9oYXNfZGVzY3MoeHMtXFx1MDAzZXR4KSkge1xcbjEzMDM6XFx0XFx0XFx0Ym9vbCBkcmFpbiA9IHhzLVxcdTAwM2Vza2IgfHwgeHMtXFx1MDAzZWRyYWluX2NvbnQgfHwgeHBfbWJfZGVzYyhcXHUwMDI2ZGVzYyk7XFxuMTMwNDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDc6Mzc6MTkuMTM4NzUxMjQxWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYyNDM5NTM5NjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIEFGX1hEUCBQYWNrZXQgVHJhbnNtaXNzaW9uIEZpeCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IHRoZSBgX194c2tfZ2VuZXJpY194bWl0YCBmdW5jdGlvbiwgd2hpY2ggaXMgdGhlIGhlYXJ0IG9mIEFGX1hEUCBwYWNrZXQgdHJhbnNtaXNzaW9uLCB1c2VzIGBfX2Rldl9kaXJlY3RfeG1pdGAgdG8gc2VuZCB0aGUgcGFja2V0cy4gVGhpcyBpcyBwcmV0dHkgc3RhbmRhcmQgZm9yIGRpcmVjdCB0cmFuc21pc3Npb24gcGF0aHMgaW4gdGhlIGtlcm5lbC4gVGhlIHByb2JsZW0sIGFzIEkgc2VlIGl0LCBzdGVtcyBmcm9tIHRoZSBpbml0aWFsaXphdGlvbiB3aXRoaW4gYHhza19za2JfaW5pdF9taXNjYC4gU3BlY2lmaWNhbGx5LCB0aGUgY3JpdGljYWwgYHNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpYCBjYWxsIHdhcyBtaXNzaW5nLlxuXG5XaXRob3V0IHRoYXQgY3J1Y2lhbCBjYWxsIHRvIHJlc2V0IHRoZSBuZXR3b3JrIGhlYWRlciwgdGhlIGBza2ItXHUwMDNlbmV0d29ya19oZWFkZXJgIHBvaW50ZXIgd2FzIGVzc2VudGlhbGx5IHVuaW5pdGlhbGl6ZWQuIFRoaXMgaXMgYSBjbGFzc2ljIHNvdXJjZSBvZiBlcnJvcnMuIFdoZW4gdGhlIGtlcm5lbCBjYWxscyBgX19kZXZfZGlyZWN0X3htaXRgLCBvciBxZGlzYywgb3IgcGFja2V0IGNsYXNzaWZpZXJzLCBvciBldmVuIGp1c3QgYGRldl9xdWV1ZV94bWl0YCDigJMgb3IsIGhlYXZlbiBmb3JiaWQsIHRoZSBkZXZpY2UgZHJpdmVyIGl0c2VsZiDigJMgZXhhbWluZXMgdGhlIG5ldHdvcmsgaGVhZGVyLCBpdCdzIHJlYWRpbmcgZ2FyYmFnZS4gVGhhdCBgc2tiLVx1MDAzZW5ldHdvcmtfaGVhZGVyYCBwb2ludGVyIGlzIGxpa2VseSBwb2ludGluZyB0byB0aGUgd3Jvbmcgb2Zmc2V0LCBwb3NzaWJseSBldmVuIG91dHNpZGUgb2YgdGhlIGFsbG9jYXRlZCBidWZmZXIuIEluIGVzc2VuY2UsIGl0J3MgYSBjcml0aWNhbCBwb2ludGVyIHRoYXQgd2FzIG1pc2NvbmZpZ3VyZWQgb3IgbWlzc2VkIGR1cmluZyBpbml0aWFsaXphdGlvbi4gYHNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpYCBpcyB0aGUgY29ycmVjdCBhcHByb2FjaCBiZWNhdXNlIGl0IGNvcnJlY3RseSBzZXRzIGBza2ItXHUwMDNlbmV0d29ya19oZWFkZXIgPSBza2ItXHUwMDNlZGF0YSAtIHNrYi1cdTAwM2VoZWFkYC5cblxuVGhpcyBjaGFuZ2UgaXMgaW4gYG5ldC94ZHAveHNrLmNgLCB3aGljaCBpcyBjb3JlIG5ldHdvcmtpbmcgY29kZSBhbmQgZGVhbHMgd2l0aCBBRl9YRFAgc29ja2V0cyAoWERQIHNvY2tldHMpLCBzbyB0aGlzIGlzIGEgY3J1Y2lhbCBhcmVhLiBTaW5jZSBBRl9YRFAgc3VwcG9ydHMgZ2VuZXJpYyBuZXQgZGV2aWNlcyBsaWtlIHZldGgsIGxvb3BiYWNrLCB0dW4vdGFwLCBkdW1teSwgdmlydGlvLCB0aGlzIGZpeCBpcyBicm9hZCBpbiBzY29wZS4gVGhpcyBpc24ndCBqdXN0IGEgaGFyZHdhcmUtc3BlY2lmaWMgZml4OyBpdCBhZmZlY3RzIGFueSBlbnZpcm9ubWVudCB1c2luZyBBRl9YRFAuXG5cbkdpdmVuIHRoZSB3aWRlc3ByZWFkIHVzZSBvZiBBRl9YRFAsIGFuZCB0aGUgZmFjdCB0aGF0IFN5emthbGxlciBoZWF2aWx5IHRlc3RzIEFGX1hEUCAoeGRwIHNvY2tldHMpLCBpdCdzIGltcG9ydGFudCB0byB2ZXJpZnkgaWYgdGhlcmUgYW55IHNwZWNpZmljIEtjb25maWcgb3B0aW9ucyB0aGF0IG1pZ2h0IGluZmx1ZW5jZSB0aGUgaW5jbHVzaW9uIG9yIGJlaGF2aW9yIG9mIGBuZXQveGRwL3hzay5jYC4gSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhlIE1ha2VmaWxlIGluIGBuZXQveGRwL2AgdG8gY29uZmlybSB0aGVyZSBhcmVuJ3QgYW55IGJ1aWxkLXRpbWUgY29uZmlndXJhdGlvbnMgdGhhdCBjb3VsZCBpbXBhY3QgdGhpcyBmaXguIFRoaXMgd2lsbCBlbnN1cmUgdGhlIGNoYW5nZSBpcyBjb21wbGV0ZSBhbmQgdW5pdmVyc2FsbHkgYXBwbGllZCwgZXNwZWNpYWxseSBnaXZlbiBTeXprYWxsZXIncyByb2xlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MjMyLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDc6Mzc6MjUuMzgyNzA3MDUxWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5NDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC94ZHAvTWFrZWZpbGVcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdG9iai0kKENPTkZJR19YRFBfU09DS0VUUykgKz0geHNrLm8geGRwX3VtZW0ubyB4c2tfcXVldWUubyB4c2ttYXAub1xcbiAgIDM6XFx0b2JqLSQoQ09ORklHX1hEUF9TT0NLRVRTKSArPSB4c2tfYnVmZl9wb29sLm9cXG4gICA0OlxcdG9iai0kKENPTkZJR19YRFBfU09DS0VUU19ESUFHKSArPSB4c2tfZGlhZy5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA3OjM3OjI1LjM4Mjc1NzcwMVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNTE5NjU2Mjk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipYRFAgQ29uZmlndXJhdGlvbjogQSBRdWljayBHbGFuY2UqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcsIFwiUmlnaHQsIGJlZm9yZSB3ZSBkaXZlIGludG8gYW55dGhpbmcgdG9vIGRlZXAsIGxldCdzIHRha2UgYSBxdWljayBsb29rIGF0IGBuZXQveGRwL0tjb25maWdgLlwiIEl0J3MgdGhlIHN0YW5kYXJkIGZpcnN0IHN0b3AsIHlvdSBrbm93PyBHZXQgdGhlIGxheSBvZiB0aGUgbGFuZCwgc2VlIHdoYXQgb3B0aW9ucyBhcmUgZXhwb3NlZCwgd2hpY2ggZmVhdHVyZXMgYXJlIGVuYWJsZWQgYnkgZGVmYXVsdCwgYW5kIGhvdyB0aGUgdmFyaW91cyBYRFAtcmVsYXRlZCBjb25maWd1cmF0aW9ucyBhcmUgc3RydWN0dXJlZCB3aXRoaW4gdGhlIGtlcm5lbCdzIGJ1aWxkIHN5c3RlbS4gTm8gbmVlZCB0byByZWludmVudCB0aGUgd2hlZWwsIEkgY2FuIHByb2JhYmx5IGdldCBhIGdlbmVyYWwgc2Vuc2Ugb2YgdGhlIGJ1aWxkIHN0cnVjdHVyZSBqdXN0IGJ5IHVuZGVyc3RhbmRpbmcgdGhlIGF2YWlsYWJsZSBjb25maWcgZmxhZ3MuIEl0J3MgYSBmdW5kYW1lbnRhbCBzdGVwIHRvIHVuZGVyc3RhbmRpbmcgdGhlIGVjb3N5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTE5MCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDc6Mzc6MjguOTAyNDE2MzA1WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyMzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC94ZHAvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0Y29uZmlnIFhEUF9TT0NLRVRTXFxuICAgMzpcXHRcXHRib29sIFxcXCJYRFAgc29ja2V0c1xcXCJcXG4gICA0OlxcdFxcdGRlcGVuZHMgb24gQlBGX1NZU0NBTExcXG4gICA1OlxcdFxcdGRlZmF1bHQgblxcbiAgIDY6XFx0XFx0aGVscFxcbiAgIDc6XFx0XFx0ICBYRFAgc29ja2V0cyBhbGxvd3MgYSBjaGFubmVsIGJldHdlZW4gWERQIHByb2dyYW1zIGFuZFxcbiAgIDg6XFx0XFx0ICB1c2Vyc3BhY2UgYXBwbGljYXRpb25zLlxcbiAgIDk6XFx0XFxuICAxMDpcXHRjb25maWcgWERQX1NPQ0tFVFNfRElBR1xcbiAgMTE6XFx0XFx0dHJpc3RhdGUgXFxcIlhEUCBzb2NrZXRzOiBtb25pdG9yaW5nIGludGVyZmFjZVxcXCJcXG4gIDEyOlxcdFxcdGRlcGVuZHMgb24gWERQX1NPQ0tFVFNcXG4gIDEzOlxcdFxcdGRlZmF1bHQgblxcbiAgMTQ6XFx0XFx0aGVscFxcbiAgMTU6XFx0XFx0ICBTdXBwb3J0IGZvciBQRl9YRFAgc29ja2V0cyBtb25pdG9yaW5nIGludGVyZmFjZSB1c2VkIGJ5IHRoZSBzcyB0b29sLlxcbiAgMTY6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBZLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwNzozNzoyOC45MDI0Njk2ODVaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzUzMzk2MjA1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyBCUEYgU3lzY2FsbCBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIHBpbnBvaW50IHdoZXJlIHRoZSBgQlBGX1NZU0NBTExgIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIGRlZmluZWQuIEdpdmVuIG15IGZhbWlsaWFyaXR5IHdpdGggdGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0sIHRoZSBtb3N0IGxvZ2ljYWwgcGxhY2VzIHRvIHN0YXJ0IGxvb2tpbmcgYXJlIHRoZSBwcmltYXJ5IGNvbmZpZ3VyYXRpb24gZmlsZXMuIEknbGwgYmVnaW4gYnkgY2hlY2tpbmcgYGluaXQvS2NvbmZpZ2Ag4oCTIGl0IG9mdGVuIGhvbGRzIGZ1bmRhbWVudGFsIHNldHRpbmdzIHJlbGF0ZWQgdG8ga2VybmVsIGZlYXR1cmVzLiBJZiBpdCdzIG5vdCB0aGVyZSwgdGhlIG5leHQgbG9naWNhbCBsb2NhdGlvbiB3b3VsZCBiZSB0aGUgY29yZSBCUEYgaW1wbGVtZW50YXRpb24gZGlyZWN0b3J5IGl0c2VsZiwgc3BlY2lmaWNhbGx5IGBrZXJuZWwvYnBmL0tjb25maWdgLiBUaGlzIGlzIHdoZXJlIEkgd291bGQgZXhwZWN0IGFueXRoaW5nIHJlbGF0ZWQgdG8gQlBGJ3Mgc3lzdGVtIGNhbGwgaW50ZXJmYWNlIHRvIHJlc2lkZS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IGl0IGlzIGltcGxlbWVudGVkLiBJJ20gZ29pbmcgdG8gbG9vayBpbiB0aG9zZSB0d28gcGxhY2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NTk0LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwNzozNzozMi40MzY0MzM5ODhaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0Njc1NDgwLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlBGX1NZU0NBTExcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5pdC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA3OjM3OjMyLjQ4MTEyMDcyOFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMTkzMzU2NDE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgQlBGIFN5c2NhbGwgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiBmaW5kaW5nIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbiByZWxhdGVkIHRvIEJQRiBzeXNjYWxscy4gSSdtIHRoaW5raW5nLCBcIldoZXJlIGlzIGBjb25maWcgQlBGX1NZU0NBTExgIGRlZmluZWQgd2l0aGluIHRoZSBrZXJuZWwgYnVpbGQgc3lzdGVtP1wiIFRoaXMgcHJvYmFibHkgbWVhbnMgSSBuZWVkIHRvIHN0YXJ0IHBva2luZyBhcm91bmQgaW4gdGhlIEtjb25maWcgZmlsZXMsIHNwZWNpZmljYWxseSB0aGUgb25lcyB0aGF0IHJlbGF0ZSB0byB0cmFjaW5nLCBuZXR3b3JraW5nLCBvciBzZWN1cml0eSDigJMgdGhvc2UgYXJlIHRoZSBtb3N0IGxpa2VseSBhcmVhcy4gSSdsbCBsaWtlbHkgdXNlIGBncmVwYCBvciBhIHNpbWlsYXIgdG9vbCB0byBwaW5wb2ludCB0aGUgZXhhY3QgbG9jYXRpb24uIEknbGwgYmUgbG9va2luZyBmb3IgY29udGV4dHVhbCBjbHVlcyBhcm91bmQgaXQgdG9vLCB0byB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMgYW5kIHdoYXQgZmVhdHVyZXMgaXQgZW5hYmxlcy4gSXMgdGhpcyBwYXJ0IG9mIGEgbGFyZ2VyIEJQRiBzdWJzeXN0ZW0gY29uZmlndXJhdGlvbiBvciBhIHN0YW5kYWxvbmU/IFRoYXQncyB3aGF0IEkgbmVlZCB0byBkZXRlcm1pbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk4MzIsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwNzozNzozNS42NzQ0NzkzNjZaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2Mzg3MDQzMjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJQRl9TWVNDQUxMXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvS2NvbmZpZz0yNT1tZW51IFxcXCJCUEYgc3Vic3lzdGVtXFxcIlxcbmtlcm5lbC9icGYvS2NvbmZpZy0yNi1cXG5rZXJuZWwvYnBmL0tjb25maWc6Mjc6Y29uZmlnIEJQRl9TWVNDQUxMXFxua2VybmVsL2JwZi9LY29uZmlnLTI4LVxcdGJvb2wgXFxcIkVuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDc6Mzc6MzcuMzEzMTg5MjVaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjk4NTQwNjMxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqS2VybmVsIEJQRiBLY29uZmlnIEluc3BlY3Rpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGluLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZSBga2VybmVsL2JwZi9LY29uZmlnYCBmaWxlLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byBzY29wZSBvdXQgYXJvdW5kIGxpbmUgMjcuIEl0J3MgYSBnZW5lcmFsIGFwcHJvYWNoIHdoZW4gc3RhcnRpbmcgYW4gaW52ZXN0aWdhdGlvbiwgZXNwZWNpYWxseSBnaXZlbiBteSBrbm93bGVkZ2Ugb2YgdGhlIGNvZGViYXNlLCB0aGF0IEtjb25maWcgZmlsZXMgYXJlIGVzc2VudGlhbCBpbiB0aGUgc3lzdGVtIGNvbmZpZ3VyYXRpb24uIFRoZSBzcGVjaWZpYyBsaW5lIG51bWJlciBpcyBqdXN0IGEgc3RhcnRpbmcgcG9pbnQ7IGl0J3MgbGlrZWx5IGEgZm9jYWwgYXJlYSwgZWl0aGVyIGEgbWFpbiBzZWN0aW9uLCBvciBzb21ldGhpbmcgdGhhdCBicmFuY2hlcyBvdXQgaW50byBtdWx0aXBsZSByZWxldmFudCBvcHRpb25zLiBJIHdhbnQgdG8gcXVpY2tseSBldmFsdWF0ZSBhbnkgaW1tZWRpYXRlIGNsdWVzIHRoYXQgZ2l2ZSBhbiBpbmRpY2F0aW9uIG9mIGhvdyBCUEYgaXMgZW5hYmxlZC9kaXNhYmxlZCBvciBjb25maWd1cmVkLiBUaGlzIHByZWxpbWluYXJ5IHNjYW4gd2lsbCBwcm92aWRlIGEgcm9hZG1hcCBmb3IgZGVlcGVyIGFuYWx5c2lzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDEyNCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA3OjM3OjQwLjI5ODU5ODUxMloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjExMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMjUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMjU6XFx0bWVudSBcXFwiQlBGIHN1YnN5c3RlbVxcXCJcXG4gIDI2OlxcdFxcbiAgMjc6XFx0Y29uZmlnIEJQRl9TWVNDQUxMXFxuICAyODpcXHRcXHRib29sIFxcXCJFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcXFwiXFxuICAyOTpcXHRcXHRzZWxlY3QgQlBGXFxuICAzMDpcXHRcXHRzZWxlY3QgSVJRX1dPUktcXG4gIDMxOlxcdFxcdHNlbGVjdCBORUVEX1RBU0tTX1JDVVxcbiAgMzI6XFx0XFx0c2VsZWN0IFRBU0tTX1RSQUNFX1JDVVxcbiAgMzM6XFx0XFx0c2VsZWN0IEJJTkFSWV9QUklOVEZcXG4gIDM0OlxcdFxcdHNlbGVjdCBORVRfU09DS19NU0cgaWYgTkVUXFxuICAzNTpcXHRcXHRzZWxlY3QgTkVUX1hHUkVTUyBpZiBORVRcXG4gIDM2OlxcdFxcdHNlbGVjdCBQQUdFX1BPT0wgaWYgTkVUXFxuICAzNzpcXHRcXHRkZWZhdWx0IG5cXG4gIDM4OlxcdFxcdGhlbHBcXG4gIDM5OlxcdFxcdCAgRW5hYmxlIHRoZSBicGYoKSBzeXN0ZW0gY2FsbCB0aGF0IGFsbG93cyB0byBtYW5pcHVsYXRlIEJQRiBwcm9ncmFtc1xcbiAgNDA6XFx0XFx0ICBhbmQgbWFwcyB2aWEgZmlsZSBkZXNjcmlwdG9ycy5cXG4gIDQxOlxcdFxcbiAgNDI6XFx0Y29uZmlnIEJQRl9KSVRcXG4gIDQzOlxcdFxcdGJvb2wgXFxcIkVuYWJsZSBCUEYgSnVzdCBJbiBUaW1lIGNvbXBpbGVyXFxcIlxcbiAgNDQ6XFx0XFx0ZGVwZW5kcyBvbiBCUEZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDc6Mzc6NDAuMjk4NjYxNzUyWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI5NTM1NjY5OTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFhEUCBTb2NrZXRzIGFuZCBCUEYgSW50ZWdyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBpbnRvIGhvdyBgQ09ORklHX1hEUF9TT0NLRVRTYCB3b3JrcywgYW5kIGZpcnN0IHRoaW5ncyBmaXJzdCwgaXQgcmVsaWVzIG9uIGBDT05GSUdfQlBGX1NZU0NBTExgLiBUaGF0J3MgdGhlIGJhc2VsaW5lLCB0aGUgZm91bmRhdGlvbi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueSBvdGhlciBkZXBlbmRlbmNpZXMgb3Igc2lnbmlmaWNhbnQgY29uZmlnIG9wdGlvbnMgaW52b2x2ZWQgaW4gdGhpcy4gSSdtIG9wZXJhdGluZyB1bmRlciB0aGUgYXNzdW1wdGlvbiB0aGF0IGBYRFBfU09DS0VUU2AgYW5kIGBCUEZfU1lTQ0FMTGAgYXJlIHRoZSBtYWpvciBwbGF5ZXJzIGhlcmUuXG5cbk5vdywgbGV0J3MgZGl2ZSBkZWVwZXIgYW5kIGZpbmQgc29tZSBzcGVjaWZpYyBmdW5jdGlvbnMgaW4gYG5ldC94ZHAveHNrLmNgIHRvIHVzZSBhcyByZWZlcmVuY2UgcG9pbnRzLiBJJ20gdGhpbmtpbmcgSSBjYW4gdXNlIHRoZXNlIGFzIGdvb2QgYEZvY3VzU3ltYm9sc2AgdG8gY2VudGVyIG15IHVuZGVyc3RhbmRpbmcgYXJvdW5kLiBPbmNlIEkndmUgZm91bmQgc29tZSBnb29kIGVudHJ5cG9pbnRzLCBJJ2xsIGdvIHRocm91Z2ggYG5ldC94ZHAveHNrLmNgLCBzcGVjaWZpY2FsbHkgbG9va2luZyBhcm91bmQgdGhlIHNvY2tldCBjYWxsYmFja3MgYW5kIHByb3RvY29sIG9wZXJhdGlvbnMuIFRoYXQncyB1c3VhbGx5IHdoZXJlIHRoZSBjb3JlIGludGVyYWN0aW9uIGFuZCBkYXRhIGZsb3cgd2lsbCBiZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA1OTIsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwNzozNzo0My4yNTIyMzA2NzVaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MjIwNjc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInByb3RvX29wc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGRwL3hzay5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZHAveHNrLmM9MjE1NT1zdGF0aWMgc3RydWN0IHByb3RvIHhza19wcm90byA9IHtcXG4tLVxcbm5ldC94ZHAveHNrLmMtMjE2MC1cXG5uZXQveGRwL3hzay5jOjIxNjE6c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgeHNrX3Byb3RvX29wcyA9IHtcXG5uZXQveGRwL3hzay5jLTIxNjItXFx0LmZhbWlseVxcdFxcdD0gUEZfWERQLFxcbi0tXFxubmV0L3hkcC94c2suYz0yMTkyPXN0YXRpYyBpbnQgeHNrX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90b2NvbCxcXG4tLVxcbm5ldC94ZHAveHNrLmMtMjIxMS1cXG5uZXQveGRwL3hzay5jOjIyMTI6XFx0c29jay1cXHUwMDNlb3BzID0gXFx1MDAyNnhza19wcm90b19vcHM7XFxubmV0L3hkcC94c2suYy0yMjEzLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwNzozNzo0My4yOTc0NTUyNDRaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjc0MDExNTA2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8geHNrX3Byb3RvX29wcyoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBYRFAgc29ja2V0IHByb3RvY29sIG9wZXJhdGlvbnMuIFNwZWNpZmljYWxseSwgSSBzaG91bGQgcHJvYmFibHkgcmUtZXhhbWluZSB0aGUgYHhza19wcm90b19vcHNgIHN0cnVjdHVyZS4gSSByZW1lbWJlciBpdCByZXNpZGluZyB3aXRoaW4gYG5ldC94ZHAveHNrLmNgLCBzbyB0aGF0J3Mgd2hlcmUgSSdsbCBiZWdpbi4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBbICpwYXVzZSBhbmQgdGhpbmsgZm9yIGEgbW9tZW50LCBiYXNlZCBvbiBteSBjdXJyZW50IGFyZWEgb2YgZm9jdXMqIF0uLi4gd2VsbCwgSSdtIHRoaW5raW5nIGFib3V0IFhEUCB6ZXJvLWNvcHkgYW5kIGhvdyBpdCdzIGltcGxlbWVudGVkIGZvciB0aGUgdmFyaW91cyBtZW1vcnkgbWFuYWdlbWVudCBhbmQgYnVmZmVyaW5nIGludGVyYWN0aW9ucy4gSSB3aWxsIHNlZSB0aGUgc3RydWN0dXJlIGRlZmluaXRpb24gYW5kIGVuc3VyZSBJJ20gdXAgdG8gc3BlZWQgb24gYWxsIG9mIGl0cyBtZW1iZXJzLCBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSByZWxhdGVkIGNhbGxiYWNrcyBvciBkYXRhIHN0cnVjdHVyZXMuIFRoaXMgaXMgYSBjcnVjaWFsIGFyZWEgZm9yIHBlcmZvcm1hbmNlIHR1bmluZyBhbmQgb3ZlcmFsbCBYRFAgc29ja2V0IGRlc2lnbiwgc28gaXQncyB3b3J0aCBhIGRlZXAgZGl2ZS4gTGV0J3MgZ2V0IGNyYWNraW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTE2MCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA3OjM3OjQ2LjAzNzU3MzExWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMTU0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQveGRwL3hzay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIxNjAsXG4gIFwiTGluZUNvdW50XCI6IDM1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIxNjA6XFx0XFxuMjE2MTpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyB4c2tfcHJvdG9fb3BzID0ge1xcbjIxNjI6XFx0XFx0LmZhbWlseVxcdFxcdD0gUEZfWERQLFxcbjIxNjM6XFx0XFx0Lm93bmVyXFx0XFx0PSBUSElTX01PRFVMRSxcXG4yMTY0OlxcdFxcdC5yZWxlYXNlXFx0PSB4c2tfcmVsZWFzZSxcXG4yMTY1OlxcdFxcdC5iaW5kXFx0XFx0PSB4c2tfYmluZCxcXG4yMTY2OlxcdFxcdC5jb25uZWN0XFx0PSBzb2NrX25vX2Nvbm5lY3QsXFxuMjE2NzpcXHRcXHQuc29ja2V0cGFpclxcdD0gc29ja19ub19zb2NrZXRwYWlyLFxcbjIxNjg6XFx0XFx0LmFjY2VwdFxcdFxcdD0gc29ja19ub19hY2NlcHQsXFxuMjE2OTpcXHRcXHQuZ2V0bmFtZVxcdD0gc29ja19ub19nZXRuYW1lLFxcbjIxNzA6XFx0XFx0LnBvbGxcXHRcXHQ9IHhza19wb2xsLFxcbjIxNzE6XFx0XFx0LmlvY3RsXFx0XFx0PSBzb2NrX25vX2lvY3RsLFxcbjIxNzI6XFx0XFx0Lmxpc3RlblxcdFxcdD0gc29ja19ub19saXN0ZW4sXFxuMjE3MzpcXHRcXHQuc2h1dGRvd25cXHQ9IHNvY2tfbm9fc2h1dGRvd24sXFxuMjE3NDpcXHRcXHQuc2V0c29ja29wdFxcdD0geHNrX3NldHNvY2tvcHQsXFxuMjE3NTpcXHRcXHQuZ2V0c29ja29wdF9pdGVyID0geHNrX2dldHNvY2tvcHQsXFxuMjE3NjpcXHRcXHQuc2VuZG1zZ1xcdD0geHNrX3NlbmRtc2csXFxuMjE3NzpcXHRcXHQucmVjdm1zZ1xcdD0geHNrX3JlY3Ztc2csXFxuMjE3ODpcXHRcXHQubW1hcFxcdFxcdD0geHNrX21tYXAsXFxuMjE3OTpcXHR9O1xcbjIxODA6XFx0XFxuMjE4MTpcXHRzdGF0aWMgdm9pZCB4c2tfZGVzdHJ1Y3Qoc3RydWN0IHNvY2sgKnNrKVxcbjIxODI6XFx0e1xcbjIxODM6XFx0XFx0c3RydWN0IHhkcF9zb2NrICp4cyA9IHhkcF9zayhzayk7XFxuMjE4NDpcXHRcXG4yMTg1OlxcdFxcdGlmICghc29ja19mbGFnKHNrLCBTT0NLX0RFQUQpKVxcbjIxODY6XFx0XFx0XFx0cmV0dXJuO1xcbjIxODc6XFx0XFxuMjE4ODpcXHRcXHRpZiAoIXhwX3B1dF9wb29sKHhzLVxcdTAwM2Vwb29sKSlcXG4yMTg5OlxcdFxcdFxcdHhkcF9wdXRfdW1lbSh4cy1cXHUwMDNldW1lbSwgIXhzLVxcdTAwM2Vwb29sKTtcXG4yMTkwOlxcdH1cXG4yMTkxOlxcdFxcbjIxOTI6XFx0c3RhdGljIGludCB4c2tfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2tldCAqc29jaywgaW50IHByb3RvY29sLFxcbjIxOTM6XFx0XFx0XFx0ICAgICAgaW50IGtlcm4pXFxuMjE5NDpcXHR7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA3OjM3OjQ2LjAzNzY4NTk1WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxMzI4ODQ3OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqWERQIFNvY2tldCBJbnRlcmZhY2UgRGVlcCBEaXZlKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoZSBYRFAgc29ja2V0IGltcGxlbWVudGF0aW9uIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBhbmQgbWF5YmUgc3BvdCBzb21lIG51YW5jZXMuIE15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIGNvcmUgZnVuY3Rpb25zOiBgeHNrX3NlbmRtc2dgLCBgeHNrX3BvbGxgLCBgeHNrX2JpbmRgLCBgeHNrX21tYXBgLCBgeHNrX2dlbmVyaWNfeG1pdGAgKG9yIHBlcmhhcHMgdGhlIGludGVybmFsIGBfX3hza19nZW5lcmljX3htaXRgKSwgYHhza19idWlsZF9za2JgLCBhbmQgYHhza19kZXN0cnVjdF9za2JgLiBJIHdhbnQgYSBzb2xpZCBncmFzcCBvZiBob3cgdGhlc2UgcGllY2VzIGZpdCB0b2dldGhlci4gSSB0aGluayBzdGFydGluZyB3aXRoIGB4c2tfc2VuZG1zZ2AgYW5kIGB4c2tfcG9sbGAgaXMgdGhlIHJpZ2h0IG1vdmUgZm9yIG5vdy4gVGltZSB0byBoZWFkIG92ZXIgdG8gYG5ldC94ZHAveHNrLmNgIGFuZCBkaWcgaW50byB0aGUgY29kZS4gTGV0J3Mgc2VlIHdoYXQgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgcmV2ZWFsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTk4MiwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA3OjM3OjQ4LjE3MDU3MzEzNloiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDI4NTU0MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW50IHhza19zZW5kbXNnXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZHAvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZHAveHNrLmM9MTM2Nj1zdGF0aWMgaW50IF9feHNrX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSwgc2l6ZV90IHRvdGFsX2xlbilcXG4tLVxcbm5ldC94ZHAveHNrLmMtMTM5Ni1cXG5uZXQveGRwL3hzay5jOjEzOTc6c3RhdGljIGludCB4c2tfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLCBzaXplX3QgdG90YWxfbGVuKVxcbm5ldC94ZHAveHNrLmMtMTM5OC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA3OjM3OjQ4LjIxMzQzMzkwNVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNTMwNDE1Mzg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRpdmluZyBpbnRvIHRoZSBYU0sgVHJhbnNtaXNzaW9uIFBhdGgqKlxuXG5Pa2F5LCBzbyBJJ20gdHJhY2luZyB0aGUgZGF0YSB0cmFuc21pc3Npb24gcGF0aCBmb3IgWFNLLCBhbmQgaXQgbG9va3MgbGlrZSBgeHNrX3NlbmRtc2dgIGtpY2tzIHRoaW5ncyBvZmYuIEZyb20gdGhlcmUsIGl0IGRpdmVzIGludG8gYF9feHNrX3NlbmRtc2dgLiBOb3csIHRoaXMgaXMgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZywgYXMgYF9feHNrX3NlbmRtc2dgIGVpdGhlciBnb2VzIGRvd24gdGhlIGBfX3hza19nZW5lcmljX3htaXRgIHJvdXRlLCBvciBpdCB0cmlnZ2VycyB0aGUgZHJpdmVyLXNwZWNpZmljIHRyYW5zbWl0IHBhdGguXG5cblRvIGdldCBhIGJldHRlciBncmlwIG9uIHRoZSBsb2dpYywgSSBuZWVkIHRvIGxvb2sgY2xvc2VyLiBJJ2xsIG5lZWQgdG8ganVtcCBpbnRvIGBuZXQveGRwL3hzay5jYCBhbmQgZm9jdXMgb24gbGluZXMgMTM2MCB0aHJvdWdoIDE0MjAuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGRldGFpbHMgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hpY2ggcGF0aCBpcyB0YWtlbiwgdW5kZXIgd2hhdCBjb25kaXRpb25zLCBhbmQgd2hhdCB0aGUga2V5IGRpZmZlcmVuY2VzIGFyZSBiZXR3ZWVuIHRoZSBnZW5lcmljIGFuZCBkcml2ZXItc3BlY2lmaWMgYXBwcm9hY2hlcy4gR290dGEgZ2V0IHRoZSBsb3ctbGV2ZWwgZGV0YWlscyFcblxuXG4iLCJJbnB1dFRva2VucyI6MTI0MzAsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwNzozNzo1MC43NDM4NTI3NjVaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY2OTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC94ZHAveHNrLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTM2MCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTM2MDpcXHRcXHRpZiAodW5saWtlbHkoISh4cy1cXHUwMDNlZGV2LVxcdTAwM2VmbGFncyBcXHUwMDI2IElGRl9VUCkpKVxcbjEzNjE6XFx0XFx0XFx0cmV0dXJuIC1FTkVURE9XTjtcXG4xMzYyOlxcdFxcbjEzNjM6XFx0XFx0cmV0dXJuIDA7XFxuMTM2NDpcXHR9XFxuMTM2NTpcXHRcXG4xMzY2OlxcdHN0YXRpYyBpbnQgX194c2tfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLCBzaXplX3QgdG90YWxfbGVuKVxcbjEzNjc6XFx0e1xcbjEzNjg6XFx0XFx0Ym9vbCBuZWVkX3dhaXQgPSAhKG0tXFx1MDAzZW1zZ19mbGFncyBcXHUwMDI2IE1TR19ET05UV0FJVCk7XFxuMTM2OTpcXHRcXHRzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLVxcdTAwM2VzaztcXG4xMzcwOlxcdFxcdHN0cnVjdCB4ZHBfc29jayAqeHMgPSB4ZHBfc2soc2spO1xcbjEzNzE6XFx0XFx0c3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2w7XFxuMTM3MjpcXHRcXHRpbnQgZXJyO1xcbjEzNzM6XFx0XFxuMTM3NDpcXHRcXHRlcnIgPSB4c2tfY2hlY2tfY29tbW9uKHhzKTtcXG4xMzc1OlxcdFxcdGlmIChlcnIpXFxuMTM3NjpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjEzNzc6XFx0XFx0aWYgKHVubGlrZWx5KG5lZWRfd2FpdCkpXFxuMTM3ODpcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuMTM3OTpcXHRcXHRpZiAodW5saWtlbHkoIXhzLVxcdTAwM2V0eCkpXFxuMTM4MDpcXHRcXHRcXHRyZXR1cm4gLUVOT0JVRlM7XFxuMTM4MTpcXHRcXG4xMzgyOlxcdFxcdGlmIChza19jYW5fYnVzeV9sb29wKHNrKSlcXG4xMzgzOlxcdFxcdFxcdHNrX2J1c3lfbG9vcChzaywgMSk7IC8qIG9ubHkgc3VwcG9ydCBub24tYmxvY2tpbmcgc29ja2V0cyAqL1xcbjEzODQ6XFx0XFxuMTM4NTpcXHRcXHRpZiAoeHMtXFx1MDAzZXpjIFxcdTAwMjZcXHUwMDI2IHhza19ub193YWtldXAoc2spKVxcbjEzODY6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMTM4NzpcXHRcXG4xMzg4OlxcdFxcdHBvb2wgPSB4cy1cXHUwMDNlcG9vbDtcXG4xMzg5OlxcdFxcdGlmIChwb29sLVxcdTAwM2VjYWNoZWRfbmVlZF93YWtldXAgXFx1MDAyNiBYRFBfV0FLRVVQX1RYKSB7XFxuMTM5MDpcXHRcXHRcXHRpZiAoeHMtXFx1MDAzZXpjKVxcbjEzOTE6XFx0XFx0XFx0XFx0cmV0dXJuIHhza193YWtldXAoeHMsIFhEUF9XQUtFVVBfVFgpO1xcbjEzOTI6XFx0XFx0XFx0cmV0dXJuIHhza19nZW5lcmljX3htaXQoc2spO1xcbjEzOTM6XFx0XFx0fVxcbjEzOTQ6XFx0XFx0cmV0dXJuIDA7XFxuMTM5NTpcXHR9XFxuMTM5NjpcXHRcXG4xMzk3OlxcdHN0YXRpYyBpbnQgeHNrX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSwgc2l6ZV90IHRvdGFsX2xlbilcXG4xMzk4OlxcdHtcXG4xMzk5OlxcdFxcdGludCByZXQ7XFxuMTQwMDpcXHRcXG4xNDAxOlxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4xNDAyOlxcdFxcdHJldCA9IF9feHNrX3NlbmRtc2coc29jaywgbSwgdG90YWxfbGVuKTtcXG4xNDAzOlxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbjE0MDQ6XFx0XFxuMTQwNTpcXHRcXHRyZXR1cm4gcmV0O1xcbjE0MDY6XFx0fVxcbjE0MDc6XFx0XFxuMTQwODpcXHRzdGF0aWMgaW50IF9feHNrX3JlY3Ztc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSwgc2l6ZV90IGxlbiwgaW50IGZsYWdzKVxcbjE0MDk6XFx0e1xcbjE0MTA6XFx0XFx0Ym9vbCBuZWVkX3dhaXQgPSAhKGZsYWdzIFxcdTAwMjYgTVNHX0RPTlRXQUlUKTtcXG4xNDExOlxcdFxcdHN0cnVjdCBzb2NrICpzayA9IHNvY2stXFx1MDAzZXNrO1xcbjE0MTI6XFx0XFx0c3RydWN0IHhkcF9zb2NrICp4cyA9IHhkcF9zayhzayk7XFxuMTQxMzpcXHRcXHRpbnQgZXJyO1xcbjE0MTQ6XFx0XFxuMTQxNTpcXHRcXHRlcnIgPSB4c2tfY2hlY2tfY29tbW9uKHhzKTtcXG4xNDE2OlxcdFxcdGlmIChlcnIpXFxuMTQxNzpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjE0MTg6XFx0XFx0aWYgKHVubGlrZWx5KCF4cy1cXHUwMDNlcngpKVxcbjE0MTk6XFx0XFx0XFx0cmV0dXJuIC1FTk9CVUZTO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwNzozNzo1MC43NDQwMjA5ODVaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQ0Nzg2NDA1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgdGhlIFhTSyBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGUgY29yZSBvZiB0aGlzIFhEUCBzb2NrZXQgaW1wbGVtZW50YXRpb24uIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB0aGUgYHhzay5jYCBhbmQgYHhzay5oYCBmaWxlcyDigJMgc3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdHJhbnNtaXQgYW5kIFNLQiBkZXN0cnVjdGlvbiBhcmUgaGFuZGxlZC4gSSdsbCBuZWVkIHRvIHNjcnV0aW5pemUgZnVuY3Rpb25zIGxpa2UgYHhza19nZW5lcmljX3htaXRgIGFuZCBgeHNrX2Rlc3RydWN0X3NrYmAgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBkYXRhIGZsb3cgYW5kIG1lbW9yeSBtYW5hZ2VtZW50LiBTaW5jZSBJJ20gYWltaW5nIGZvciBhIGNvbXByZWhlbnNpdmUgb3ZlcnZpZXcsIEkgc2hvdWxkIGFsc28gc2VhcmNoIGZvciBhbnkgb3RoZXIgbm9uLXN0YXRpYyBmdW5jdGlvbnMgd2l0aGluIHRob3NlIGZpbGVzLCBzaW5jZSB0aGVzZSBsaWtlbHkgZm9ybSB0aGUgY3JpdGljYWwgcHVibGljIGludGVyZmFjZSBvZiB0aGUgeHNrIG1vZHVsZS4gRnVydGhlcm1vcmUsIEknbGwgbmVlZCB0byBleHBhbmQgbXkgc2VhcmNoLiBJdCdzIHRpbWUgdG8gY2hlY2sgYG5ldC94ZHAveHNrLmNgIGZvciBhbnkgY3JpdGljYWwgZnVuY3Rpb25hbGl0eSB0aGF0IEkgbWF5IGhhdmUgbWlzc2VkIGluIG15IGluaXRpYWwgc2VhcmNoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzYwNSwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDc6Mzc6NTMuMTkxODg3OTg2WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDE2MjcxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeW2EtekEtWl9dLip4c2tfXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZHAveHNrLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hkcC94c2suYy00My1cXG5uZXQveGRwL3hzay5jOjQ0OnN0cnVjdCB4c2tfYWRkcnMge1xcbm5ldC94ZHAveHNrLmMtNDUtXFx0dTMyIG51bV9kZXNjcztcXG4tLVxcbm5ldC94ZHAveHNrLmMtNDgtXFxubmV0L3hkcC94c2suYzo0OTpzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKnhza190eF9nZW5lcmljX2NhY2hlO1xcbm5ldC94ZHAveHNrLmMtNTAtXFxubmV0L3hkcC94c2suYzo1MTp2b2lkIHhza19zZXRfcnhfbmVlZF93YWtldXAoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wpXFxubmV0L3hkcC94c2suYy01Mi17XFxuLS1cXG5uZXQveGRwL3hzay5jLTU4LX1cXG5uZXQveGRwL3hzay5jOjU5OkVYUE9SVF9TWU1CT0woeHNrX3NldF9yeF9uZWVkX3dha2V1cCk7XFxubmV0L3hkcC94c2suYy02MC1cXG5uZXQveGRwL3hzay5jOjYxOnZvaWQgeHNrX3NldF90eF9uZWVkX3dha2V1cChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbClcXG5uZXQveGRwL3hzay5jLTYyLXtcXG4tLVxcbm5ldC94ZHAveHNrLmMtNzUtfVxcbm5ldC94ZHAveHNrLmM6NzY6RVhQT1JUX1NZTUJPTCh4c2tfc2V0X3R4X25lZWRfd2FrZXVwKTtcXG5uZXQveGRwL3hzay5jLTc3LVxcbm5ldC94ZHAveHNrLmM6Nzg6dm9pZCB4c2tfY2xlYXJfcnhfbmVlZF93YWtldXAoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wpXFxubmV0L3hkcC94c2suYy03OS17XFxuLS1cXG5uZXQveGRwL3hzay5jLTg1LX1cXG5uZXQveGRwL3hzay5jOjg2OkVYUE9SVF9TWU1CT0woeHNrX2NsZWFyX3J4X25lZWRfd2FrZXVwKTtcXG5uZXQveGRwL3hzay5jLTg3LVxcbm5ldC94ZHAveHNrLmM6ODg6dm9pZCB4c2tfY2xlYXJfdHhfbmVlZF93YWtldXAoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wpXFxubmV0L3hkcC94c2suYy04OS17XFxuLS1cXG5uZXQveGRwL3hzay5jLTEwMi19XFxubmV0L3hkcC94c2suYzoxMDM6RVhQT1JUX1NZTUJPTCh4c2tfY2xlYXJfdHhfbmVlZF93YWtldXApO1xcbm5ldC94ZHAveHNrLmMtMTA0LVxcbm5ldC94ZHAveHNrLmM6MTA1OmJvb2wgeHNrX3VzZXNfbmVlZF93YWtldXAoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wpXFxubmV0L3hkcC94c2suYy0xMDYte1xcbi0tXFxubmV0L3hkcC94c2suYy0xMDgtfVxcbm5ldC94ZHAveHNrLmM6MTA5OkVYUE9SVF9TWU1CT0woeHNrX3VzZXNfbmVlZF93YWtldXApO1xcbm5ldC94ZHAveHNrLmMtMTEwLVxcbm5ldC94ZHAveHNrLmM6MTExOnN0cnVjdCB4c2tfYnVmZl9wb29sICp4c2tfZ2V0X3Bvb2xfZnJvbV9xaWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG5uZXQveGRwL3hzay5jLTExMi1cXHRcXHRcXHRcXHRcXHQgICAgdTE2IHF1ZXVlX2lkKVxcbi0tXFxubmV0L3hkcC94c2suYy0xMjAtfVxcbm5ldC94ZHAveHNrLmM6MTIxOkVYUE9SVF9TWU1CT0woeHNrX2dldF9wb29sX2Zyb21fcWlkKTtcXG5uZXQveGRwL3hzay5jLTEyMi1cXG5uZXQveGRwL3hzay5jOjEyMzpzdGF0aWMgdm9pZCBfX3hza19jbGVhcl9wb29sX2F0X3FpZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MTYgcXVldWVfaWQpXFxubmV0L3hkcC94c2suYy0xMjQte1xcbi0tXFxubmV0L3hkcC94c2suYy0xMzAtXFxubmV0L3hkcC94c2suYzoxMzE6dm9pZCB4c2tfY2xlYXJfcG9vbF9hdF9xaWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTE2IHF1ZXVlX2lkKVxcbm5ldC94ZHAveHNrLmMtMTMyLXtcXG4tLVxcbm5ldC94ZHAveHNrLmMtMTQ2LVxcbm5ldC94ZHAveHNrLmM6MTQ3OnN0YXRpYyBpbnQgX194c2tfcmVnX3Bvb2xfYXRfcWlkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxubmV0L3hkcC94c2suYy0xNDgtXFx0XFx0XFx0XFx0IHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCB1MTYgcXVldWVfaWQpXFxuLS1cXG5uZXQveGRwL3hzay5jLTE2NC0gKi9cXG5uZXQveGRwL3hzay5jOjE2NTppbnQgeHNrX3JlZ19wb29sX2F0X3FpZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCxcXG5uZXQveGRwL3hzay5jLTE2Ni1cXHRcXHRcXHR1MTYgcXVldWVfaWQpXFxuLS1cXG5uZXQveGRwL3hzay5jLTE5MC1cXG5uZXQveGRwL3hzay5jOjE5MTpzdGF0aWMgaW50IF9feHNrX3Jjdl96YyhzdHJ1Y3QgeGRwX3NvY2sgKnhzLCBzdHJ1Y3QgeGRwX2J1ZmZfeHNrICp4c2tiLCB1MzIgbGVuLFxcbm5ldC94ZHAveHNrLmMtMTkyLVxcdFxcdFxcdHUzMiBmbGFncylcXG4tLVxcbm5ldC94ZHAveHNrLmMtMjA3LVxcbm5ldC94ZHAveHNrLmM6MjA4OnN0YXRpYyB2b2lkIF9feHNrX3Jjdl96Y19zYWZlKHN0cnVjdCB4ZHBfc29jayAqeHMsIHN0cnVjdCB4ZHBfYnVmZl94c2sgKnhza2IsXFxubmV0L3hkcC94c2suYy0yMDktXFx0XFx0XFx0ICAgICAgdTMyIGxlbiwgdTMyIGZsYWdzKVxcbi0tXFxubmV0L3hkcC94c2suYy0yMTgtXFxubmV0L3hkcC94c2suYzoyMTk6c3RhdGljIGludCB4c2tfcmN2X3pjKHN0cnVjdCB4ZHBfc29jayAqeHMsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwLCB1MzIgbGVuKVxcbm5ldC94ZHAveHNrLmMtMjIwLXtcXG4tLVxcbm5ldC94ZHAveHNrLmMtMjU5LVxcbm5ldC94ZHAveHNrLmM6MjYwOnN0YXRpYyB2b2lkICp4c2tfY29weV94ZHBfc3RhcnQoc3RydWN0IHhkcF9idWZmICpmcm9tKVxcbm5ldC94ZHAveHNrLmMtMjYxLXtcXG4tLVxcbm5ldC94ZHAveHNrLmMtMjY3LVxcbm5ldC94ZHAveHNrLmM6MjY4OnN0YXRpYyB1MzIgeHNrX2NvcHlfeGRwKHZvaWQgKnRvLCB2b2lkICoqZnJvbSwgdTMyIHRvX2xlbixcXG5uZXQveGRwL3hzay5jLTI2OS1cXHRcXHRcXHR1MzIgKmZyb21fbGVuLCBza2JfZnJhZ190ICoqZnJhZywgdTMyIHJlbSlcXG4tLVxcbm5ldC94ZHAveHNrLmMtMjk1LVxcbm5ldC94ZHAveHNrLmM6Mjk2OnN0YXRpYyBpbnQgX194c2tfcmN2KHN0cnVjdCB4ZHBfc29jayAqeHMsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwLCB1MzIgbGVuKVxcbm5ldC94ZHAveHNrLmMtMjk3LXtcXG4tLVxcbm5ldC94ZHAveHNrLmMtMzg4LVxcbm5ldC94ZHAveHNrLmM6Mzg5OnN0YXRpYyBib29sIHhza190eF93cml0ZWFibGUoc3RydWN0IHhkcF9zb2NrICp4cylcXG5uZXQveGRwL3hzay5jLTM5MC17XFxuLS1cXG5uZXQveGRwL3hzay5jLTM5Ni1cXG5uZXQveGRwL3hzay5jOjM5NzpzdGF0aWMgdm9pZCBfX3hza190eF9yZWxlYXNlKHN0cnVjdCB4ZHBfc29jayAqeHMpXFxubmV0L3hkcC94c2suYy0zOTgte1xcbi0tXFxubmV0L3hkcC94c2suYy00MDMtXFxubmV0L3hkcC94c2suYzo0MDQ6c3RhdGljIGJvb2wgeHNrX2lzX2JvdW5kKHN0cnVjdCB4ZHBfc29jayAqeHMpXFxubmV0L3hkcC94c2suYy00MDUte1xcbi0tXFxubmV0L3hkcC94c2suYy00MTMtXFxubmV0L3hkcC94c2suYzo0MTQ6c3RhdGljIGJvb2wgeHNrX2Rldl9xdWV1ZV92YWxpZChjb25zdCBzdHJ1Y3QgeGRwX3NvY2sgKnhzLFxcbm5ldC94ZHAveHNrLmMtNDE1LVxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCB4ZHBfcnhxX2luZm8gKmluZm8pXFxuLS1cXG5uZXQveGRwL3hzay5jLTQzOC1cXG5uZXQveGRwL3hzay5jOjQzOTpzdGF0aWMgaW50IHhza19yY3ZfY2hlY2soc3RydWN0IHhkcF9zb2NrICp4cywgc3RydWN0IHhkcF9idWZmICp4ZHAsIHUzMiBsZW4pXFxubmV0L3hkcC94c2suYy00NDAte1xcbi0tXFxubmV0L3hkcC94c2suYy00NTMtXFxubmV0L3hkcC94c2suYzo0NTQ6c3RhdGljIHZvaWQgeHNrX2ZsdXNoKHN0cnVjdCB4ZHBfc29jayAqeHMpXFxubmV0L3hkcC94c2suYy00NTUte1xcbi0tXFxubmV0L3hkcC94c2suYy00NjAtXFxubmV0L3hkcC94c2suYzo0NjE6aW50IHhza19nZW5lcmljX3JjdihzdHJ1Y3QgeGRwX3NvY2sgKnhzLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcClcXG5uZXQveGRwL3hzay5jLTQ2Mi17XFxuLS1cXG5uZXQveGRwL3hzay5jLTQ3Ni1cXG5uZXQveGRwL3hzay5jOjQ3NzpzdGF0aWMgaW50IHhza19yY3Yoc3RydWN0IHhkcF9zb2NrICp4cywgc3RydWN0IHhkcF9idWZmICp4ZHApXFxubmV0L3hkcC94c2suYy00Nzgte1xcbi0tXFxubmV0L3hkcC94c2suYy00OTYtXFxubmV0L3hkcC94c2suYzo0OTc6aW50IF9feHNrX21hcF9yZWRpcmVjdChzdHJ1Y3QgeGRwX3NvY2sgKnhzLCBzdHJ1Y3QgeGRwX2J1ZmYgKnhkcClcXG5uZXQveGRwL3hzay5jLTQ5OC17XFxuLS1cXG5uZXQveGRwL3hzay5jLTUxMy1cXG5uZXQveGRwL3hzay5jOjUxNDp2b2lkIF9feHNrX21hcF9mbHVzaChzdHJ1Y3QgbGlzdF9oZWFkICpmbHVzaF9saXN0KVxcbm5ldC94ZHAveHNrLmMtNTE1LXtcXG4tLVxcbm5ldC94ZHAveHNrLmMtNTIzLVxcbm5ldC94ZHAveHNrLmM6NTI0OnZvaWQgeHNrX3R4X2NvbXBsZXRlZChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwgdTMyIG5iX2VudHJpZXMpXFxubmV0L3hkcC94c2suYy01MjUte1xcbi0tXFxubmV0L3hkcC94c2suYy01NDQtfVxcbm5ldC94ZHAveHNrLmM6NTQ1OkVYUE9SVF9TWU1CT0woeHNrX3R4X2NvbXBsZXRlZCk7XFxubmV0L3hkcC94c2suYy01NDYtXFxubmV0L3hkcC94c2suYzo1NDc6dm9pZCB4c2tfdHhfcmVsZWFzZShzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbClcXG5uZXQveGRwL3hzay5jLTU0OC17XFxuLS1cXG5uZXQveGRwL3hzay5jLTU1NS19XFxubmV0L3hkcC94c2suYzo1NTY6RVhQT1JUX1NZTUJPTCh4c2tfdHhfcmVsZWFzZSk7XFxubmV0L3hkcC94c2suYy01NTctXFxubmV0L3hkcC94c2suYzo1NTg6Ym9vbCB4c2tfdHhfcGVla19kZXNjKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCBzdHJ1Y3QgeGRwX2Rlc2MgKmRlc2MpXFxubmV0L3hkcC94c2suYy01NTkte1xcbi0tXFxubmV0L3hkcC94c2suYy02MDMtfVxcbm5ldC94ZHAveHNrLmM6NjA0OkVYUE9SVF9TWU1CT0woeHNrX3R4X3BlZWtfZGVzYyk7XFxubmV0L3hkcC94c2suYy02MDUtXFxubmV0L3hkcC94c2suYzo2MDY6c3RhdGljIHUzMiB4c2tfdHhfcGVla19yZWxlYXNlX2ZhbGxiYWNrKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLCB1MzIgbWF4X2VudHJpZXMpXFxubmV0L3hkcC94c2suYy02MDcte1xcbi0tXFxubmV0L3hkcC94c2suYy02MTctXFxubmV0L3hkcC94c2suYzo2MTg6c3RhdGljIHZvaWQgeHNrX3R4X2NvbW1pdF9iYXRjaChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCxcXG5uZXQveGRwL3hzay5jLTYxOS1cXHRcXHRcXHRcXHRzdHJ1Y3QgeHNrX3R4X2JhdGNoICpiYXRjaClcXG4tLVxcbm5ldC94ZHAveHNrLmMtNjQ2LVxcbm5ldC94ZHAveHNrLmM6NjQ3OnN0YXRpYyBzdHJ1Y3QgeHNrX3R4X2JhdGNoXFxubmV0L3hkcC94c2suYzo2NDg6X194c2tfdHhfcGVla19yZWxlYXNlX2Rlc2NfYmF0Y2goc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHN0cnVjdCB4ZHBfc29jayAqeHMsXFxubmV0L3hkcC94c2suYy02NDktXFx0XFx0XFx0XFx0IHN0cnVjdCB4ZHBfZGVzYyAqZGVzY3MsIHUzMiBtYXhfZGVzY3MpXFxuLS1cXG5uZXQveGRwL3hzay5jLTY2Ny1cXG5uZXQveGRwL3hzay5jOjY2ODpzdGF0aWMgc3RydWN0IHhza190eF9iYXRjaFxcbm5ldC94ZHAveHNrLmM6NjY5Onhza190eF9wZWVrX3JlbGVhc2Vfc2hhcmVkX2Rlc2NfYmF0Y2goc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHUzMiBtYXhfZGVzY3MpXFxubmV0L3hkcC94c2suYy02NzAte1xcbi0tXFxubmV0L3hkcC94c2suYy03NDMtXFxubmV0L3hkcC94c2suYzo3NDQ6dTMyIHhza190eF9wZWVrX3JlbGVhc2VfZGVzY19iYXRjaChzdHJ1Y3QgeHNrX2J1ZmZfcG9vbCAqcG9vbCwgdTMyIG5iX3BrdHMpXFxubmV0L3hkcC94c2suYy03NDUte1xcbi0tXFxubmV0L3hkcC94c2suYy03OTAtfVxcbm5ldC94ZHAveHNrLmM6NzkxOkVYUE9SVF9TWU1CT0woeHNrX3R4X3BlZWtfcmVsZWFzZV9kZXNjX2JhdGNoKTtcXG5uZXQveGRwL3hzay5jLTc5Mi1cXG5uZXQveGRwL3hzay5jOjc5MzpzdGF0aWMgaW50IHhza193YWtldXAoc3RydWN0IHhkcF9zb2NrICp4cywgdTggZmxhZ3MpXFxubmV0L3hkcC94c2suYy03OTQte1xcbi0tXFxubmV0L3hkcC94c2suYy03OTktXFxubmV0L3hkcC94c2suYzo4MDA6c3RhdGljIGludCB4c2tfY3FfcmVzZXJ2ZV9sb2NrZWQoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wpXFxubmV0L3hkcC94c2suYy04MDEte1xcbi0tXFxubmV0L3hkcC94c2suYy04MTAtXFxubmV0L3hkcC94c2suYzo4MTE6c3RhdGljIGJvb2wgeHNrX3NrYl9kZXN0cnVjdG9yX2lzX2FkZHIoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQveGRwL3hzay5jLTgxMi17XFxuLS1cXG5uZXQveGRwL3hzay5jLTgxNS1cXG5uZXQveGRwL3hzay5jOjgxNjpzdGF0aWMgdTY0IHhza19za2JfZGVzdHJ1Y3Rvcl9nZXRfYWRkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC94ZHAveHNrLmMtODE3LXtcXG4tLVxcbm5ldC94ZHAveHNrLmMtODIwLVxcbm5ldC94ZHAveHNrLmM6ODIxOnN0YXRpYyBzdHJ1Y3QgeHNrX2FkZHJzICpfX3hza19hZGRyc19hbGxvYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1NjQgYWRkcilcXG5uZXQveGRwL3hzay5jLTgyMi17XFxuLS1cXG5uZXQveGRwL3hzay5jLTgzMy1cXG5uZXQveGRwL3hzay5jOjgzNDpzdGF0aWMgc3RydWN0IHhza19hZGRycyAqeHNrX2FkZHJzX2FsbG9jKHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L3hkcC94c2suYy04MzUte1xcbi0tXFxubmV0L3hkcC94c2suYy04NDYtXFxubmV0L3hkcC94c2suYzo4NDc6c3RhdGljIGludCB4c2tfc2tiX2Rlc3RydWN0b3Jfc2V0X2FkZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTY0IGFkZHIpXFxubmV0L3hkcC94c2suYy04NDgte1xcbi0tXFxubmV0L3hkcC94c2suYy04NTgtXFxubmV0L3hkcC94c2suYzo4NTk6c3RhdGljIHZvaWQgeHNrX2luY19udW1fZGVzYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC94ZHAveHNrLmMtODYwLXtcXG4tLVxcbm5ldC94ZHAveHNrLmMtODY4LVxcbm5ldC94ZHAveHNrLmM6ODY5OnN0YXRpYyB1MzIgeHNrX2dldF9udW1fZGVzYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC94ZHAveHNrLmMtODcwLXtcXG4tLVxcbm5ldC94ZHAveHNrLmMtODgwLVxcbm5ldC94ZHAveHNrLmM6ODgxOnN0YXRpYyB2b2lkIHhza19jcV9zdWJtaXRfYWRkcl9sb2NrZWQoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsXFxubmV0L3hkcC94c2suYy04ODItXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC94ZHAveHNrLmMtOTEwLVxcbm5ldC94ZHAveHNrLmM6OTExOnN0YXRpYyB2b2lkIHhza19jcV9zdWJtaXRfYWRkcl9zaW5nbGVfbG9ja2VkKHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLFxcbm5ldC94ZHAveHNrLmMtOTEyLVxcdFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IHhkcF9kZXNjICpkZXNjKVxcbi0tXFxubmV0L3hkcC94c2suYy05MjMtXFxubmV0L3hkcC94c2suYzo5MjQ6c3RhdGljIHZvaWQgeHNrX2NxX2NhbmNlbF9sb2NrZWQoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHUzMiBuKVxcbm5ldC94ZHAveHNrLmMtOTI1LXtcXG4tLVxcbm5ldC94ZHAveHNrLmM9OTMxPUlORElSRUNUX0NBTExBQkxFX1NDT1BFXFxubmV0L3hkcC94c2suYzo5MzI6dm9pZCB4c2tfZGVzdHJ1Y3Rfc2tiKHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L3hkcC94c2suYy05MzMte1xcbi0tXFxubmV0L3hkcC94c2suYy05NDQtXFxubmV0L3hkcC94c2suYzo5NDU6c3RhdGljIGludCB4c2tfc2tiX2luaXRfbWlzYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeGRwX3NvY2sgKnhzLFxcbm5ldC94ZHAveHNrLmMtOTQ2LVxcdFxcdFxcdCAgICAgdTY0IGFkZHIpXFxuLS1cXG5uZXQveGRwL3hzay5jLTk2Mi1cXG5uZXQveGRwL3hzay5jOjk2MzpzdGF0aWMgdm9pZCB4c2tfY29uc3VtZV9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQveGRwL3hzay5jLTk2NC17XFxuLS1cXG5uZXQveGRwL3hzay5jLTk4MC1cXG5uZXQveGRwL3hzay5jOjk4MTpzdGF0aWMgdm9pZCB4c2tfZHJvcF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQveGRwL3hzay5jLTk4Mi17XFxuLS1cXG5uZXQveGRwL3hzay5jLTk4OS1cXG5uZXQveGRwL3hzay5jOjk5MDpzdGF0aWMgaW50IHhza19za2JfbWV0YWRhdGEoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdm9pZCAqYnVmZmVyLFxcbm5ldC94ZHAveHNrLmMtOTkxLVxcdFxcdFxcdCAgICBzdHJ1Y3QgeGRwX2Rlc2MgKmRlc2MsIHN0cnVjdCB4c2tfYnVmZl9wb29sICpwb29sLFxcbi0tXFxubmV0L3hkcC94c2suYy0xMDM0LVxcbm5ldC94ZHAveHNrLmM6MTAzNTpzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhza19idWlsZF9za2JfemVyb2NvcHkoc3RydWN0IHhkcF9zb2NrICp4cyxcXG5uZXQveGRwL3hzay5jLTEwMzYtXFx0XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHhkcF9kZXNjICpkZXNjKVxcbi0tXFxubmV0L3hkcC94c2suYy0xMTEwLVxcbm5ldC94ZHAveHNrLmM6MTExMTpzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhza19idWlsZF9za2Ioc3RydWN0IHhkcF9zb2NrICp4cyxcXG5uZXQveGRwL3hzay5jLTExMTItXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgeGRwX2Rlc2MgKmRlc2MpXFxuLS1cXG5uZXQveGRwL3hzay5jLTEyMTYtXFxubmV0L3hkcC94c2suYzoxMjE3OnN0YXRpYyBpbnQgX194c2tfZ2VuZXJpY194bWl0KHN0cnVjdCBzb2NrICpzaylcXG5uZXQveGRwL3hzay5jLTEyMTgte1xcbi0tXFxubmV0L3hkcC94c2suYy0xMzMxLVxcbm5ldC94ZHAveHNrLmM6MTMzMjpzdGF0aWMgaW50IHhza19nZW5lcmljX3htaXQoc3RydWN0IHNvY2sgKnNrKVxcbm5ldC94ZHAveHNrLmMtMTMzMy17XFxuLS1cXG5uZXQveGRwL3hzay5jLTEzNDQtXFxubmV0L3hkcC94c2suYzoxMzQ1OnN0YXRpYyBib29sIHhza19ub193YWtldXAoc3RydWN0IHNvY2sgKnNrKVxcbm5ldC94ZHAveHNrLmMtMTM0Ni17XFxuLS1cXG5uZXQveGRwL3hzay5jLTEzNTUtXFxubmV0L3hkcC94c2suYzoxMzU2OnN0YXRpYyBpbnQgeHNrX2NoZWNrX2NvbW1vbihzdHJ1Y3QgeGRwX3NvY2sgKnhzKVxcbm5ldC94ZHAveHNrLmMtMTM1Ny17XFxuLS1cXG5uZXQveGRwL3hzay5jLTEzNjUtXFxubmV0L3hkcC94c2suYzoxMzY2OnN0YXRpYyBpbnQgX194c2tfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLCBzaXplX3QgdG90YWxfbGVuKVxcbm5ldC94ZHAveHNrLmMtMTM2Ny17XFxuLS1cXG5uZXQveGRwL3hzay5jLTEzOTYtXFxubmV0L3hkcC94c2suYzoxMzk3OnN0YXRpYyBpbnQgeHNrX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSwgc2l6ZV90IHRvdGFsX2xlbilcXG5uZXQveGRwL3hzay5jLTEzOTgte1xcbi0tXFxubmV0L3hkcC94c2suYy0xNDA3LVxcbm5ldC94ZHAveHNrLmM6MTQwODpzdGF0aWMgaW50IF9feHNrX3JlY3Ztc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSwgc2l6ZV90IGxlbiwgaW50IGZsYWdzKVxcbm5ldC94ZHAveHNrLmMtMTQwOS17XFxuLS1cXG5uZXQveGRwL3hzay5jLTE0MzMtXFxubmV0L3hkcC94c2suYzoxNDM0OnN0YXRpYyBpbnQgeHNrX3JlY3Ztc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSwgc2l6ZV90IGxlbiwgaW50IGZsYWdzKVxcbm5ldC94ZHAveHNrLmMtMTQzNS17XFxuLS1cXG5uZXQveGRwL3hzay5jLTE0NDQtXFxubmV0L3hkcC94c2suYzoxNDQ1OnN0YXRpYyBfX3BvbGxfdCB4c2tfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHNvY2tldCAqc29jayxcXG5uZXQveGRwL3hzay5jLTE0NDYtXFx0XFx0XFx0ICAgICBzdHJ1Y3QgcG9sbF90YWJsZV9zdHJ1Y3QgKndhaXQpXFxuLS1cXG5uZXQveGRwL3hzay5jLTE0NzctXFxubmV0L3hkcC94c2suYzoxNDc4OnN0YXRpYyBpbnQgeHNrX2luaXRfcXVldWUodTMyIGVudHJpZXMsIHN0cnVjdCB4c2tfcXVldWUgKipxdWV1ZSxcXG5uZXQveGRwL3hzay5jLTE0NzktXFx0XFx0XFx0ICBib29sIHVtZW1fcXVldWUpXFxuLS1cXG5uZXQveGRwL3hzay5jLTE0OTUtXFxubmV0L3hkcC94c2suYzoxNDk2OnN0YXRpYyB2b2lkIHhza191bmJpbmRfZGV2KHN0cnVjdCB4ZHBfc29jayAqeHMpXFxubmV0L3hkcC94c2suYy0xNDk3LXtcXG4tLVxcbm5ldC94ZHAveHNrLmMtMTUwOS1cXG5uZXQveGRwL3hzay5jOjE1MTA6c3RhdGljIHN0cnVjdCB4c2tfbWFwICp4c2tfZ2V0X21hcF9saXN0X2VudHJ5KHN0cnVjdCB4ZHBfc29jayAqeHMsXFxubmV0L3hkcC94c2suYy0xNTExLVxcdFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCB4ZHBfc29jayBfX3JjdSAqKiptYXBfZW50cnkpXFxuLS1cXG5uZXQveGRwL3hzay5jLTE1MjktXFxubmV0L3hkcC94c2suYzoxNTMwOnN0YXRpYyB2b2lkIHhza19kZWxldGVfZnJvbV9tYXBzKHN0cnVjdCB4ZHBfc29jayAqeHMpXFxubmV0L3hkcC94c2suYy0xNTMxLXtcXG4tLVxcbm5ldC94ZHAveHNrLmMtMTU1NS1cXG5uZXQveGRwL3hzay5jOjE1NTY6c3RhdGljIGludCB4c2tfcmVsZWFzZShzdHJ1Y3Qgc29ja2V0ICpzb2NrKVxcbm5ldC94ZHAveHNrLmMtMTU1Ny17XFxuLS1cXG5uZXQveGRwL3hzay5jLTE1OTMtXFxubmV0L3hkcC94c2suYzoxNTk0OnN0YXRpYyBzdHJ1Y3Qgc29ja2V0ICp4c2tfbG9va3VwX3hza19mcm9tX2ZkKGludCBmZClcXG5uZXQveGRwL3hzay5jLTE1OTUte1xcbi0tXFxubmV0L3hkcC94c2suYy0xNjEwLVxcbm5ldC94ZHAveHNrLmM6MTYxMTpzdGF0aWMgYm9vbCB4c2tfdmFsaWRhdGVfcXVldWVzKHN0cnVjdCB4ZHBfc29jayAqeHMpXFxubmV0L3hkcC94c2suYy0xNjEyLXtcXG4tLVxcbm5ldC94ZHAveHNrLmMtMTYxNS1cXG5uZXQveGRwL3hzay5jOjE2MTY6c3RhdGljIGludCB4c2tfYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqYWRkciwgaW50IGFkZHJfbGVuKVxcbm5ldC94ZHAveHNrLmMtMTYxNy17XFxuLS1cXG5uZXQveGRwL3hzay5jPTE4MDc9c3RydWN0IHhkcF91bWVtX3JlZ192MSB7XFxuLS1cXG5uZXQveGRwL3hzay5jLTE4MTMtXFxubmV0L3hkcC94c2suYzoxODE0OnN0YXRpYyBpbnQgeHNrX3NldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcXG5uZXQveGRwL3hzay5jLTE4MTUtXFx0XFx0XFx0ICBzb2NrcHRyX3Qgb3B0dmFsLCB1bnNpZ25lZCBpbnQgb3B0bGVuKVxcbi0tXFxubmV0L3hkcC94c2suYy0xOTM2LVxcbm5ldC94ZHAveHNrLmM6MTkzNzpzdGF0aWMgdm9pZCB4c2tfZW50ZXJfcnh0eF9vZmZzZXRzKHN0cnVjdCB4ZHBfcmluZ19vZmZzZXRfdjEgKnJpbmcpXFxubmV0L3hkcC94c2suYy0xOTM4LXtcXG4tLVxcbm5ldC94ZHAveHNrLmMtMTk0My1cXG5uZXQveGRwL3hzay5jOjE5NDQ6c3RhdGljIHZvaWQgeHNrX2VudGVyX3VtZW1fb2Zmc2V0cyhzdHJ1Y3QgeGRwX3Jpbmdfb2Zmc2V0X3YxICpyaW5nKVxcbm5ldC94ZHAveHNrLmMtMTk0NS17XFxuLS1cXG5uZXQveGRwL3hzay5jPTE5NTE9c3RydWN0IHhkcF9zdGF0aXN0aWNzX3YxIHtcXG4tLVxcbm5ldC94ZHAveHNrLmMtMTk1Ni1cXG5uZXQveGRwL3hzay5jOjE5NTc6c3RhdGljIGludCB4c2tfZ2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxcbm5ldC94ZHAveHNrLmMtMTk1OC1cXHRcXHRcXHQgIHNvY2tvcHRfdCAqb3B0KVxcbi0tXFxubmV0L3hkcC94c2suYy0yMDg0LVxcbm5ldC94ZHAveHNrLmM6MjA4NTpzdGF0aWMgaW50IHhza19tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxcbm5ldC94ZHAveHNrLmMtMjA4Ni1cXHRcXHQgICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuLS1cXG5uZXQveGRwL3hzay5jLTIxMjItXFxubmV0L3hkcC94c2suYzoyMTIzOnN0YXRpYyBpbnQgeHNrX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcyxcXG5uZXQveGRwL3hzay5jLTIxMjQtXFx0XFx0XFx0dW5zaWduZWQgbG9uZyBtc2csIHZvaWQgKnB0cilcXG4tLVxcbm5ldC94ZHAveHNrLmMtMjE1NC1cXG5uZXQveGRwL3hzay5jOjIxNTU6c3RhdGljIHN0cnVjdCBwcm90byB4c2tfcHJvdG8gPSB7XFxubmV0L3hkcC94c2suYy0yMTU2LVxcdC5uYW1lID1cXHRcXHRcXFwiWERQXFxcIixcXG4tLVxcbm5ldC94ZHAveHNrLmMtMjE2MC1cXG5uZXQveGRwL3hzay5jOjIxNjE6c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgeHNrX3Byb3RvX29wcyA9IHtcXG5uZXQveGRwL3hzay5jLTIxNjItXFx0LmZhbWlseVxcdFxcdD0gUEZfWERQLFxcbi0tXFxubmV0L3hkcC94c2suYy0yMTgwLVxcbm5ldC94ZHAveHNrLmM6MjE4MTpzdGF0aWMgdm9pZCB4c2tfZGVzdHJ1Y3Qoc3RydWN0IHNvY2sgKnNrKVxcbm5ldC94ZHAveHNrLmMtMjE4Mi17XFxuLS1cXG5uZXQveGRwL3hzay5jLTIxOTEtXFxubmV0L3hkcC94c2suYzoyMTkyOnN0YXRpYyBpbnQgeHNrX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90b2NvbCxcXG5uZXQveGRwL3hzay5jLTIxOTMtXFx0XFx0ICAgICAgaW50IGtlcm4pXFxuLS1cXG5uZXQveGRwL3hzay5jLTIyMzgtXFxubmV0L3hkcC94c2suYzoyMjM5OnN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X3Byb3RvX2ZhbWlseSB4c2tfZmFtaWx5X29wcyA9IHtcXG5uZXQveGRwL3hzay5jLTIyNDAtXFx0LmZhbWlseSA9IFBGX1hEUCxcXG4tLVxcbm5ldC94ZHAveHNrLmMtMjI0NC1cXG5uZXQveGRwL3hzay5jOjIyNDU6c3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayB4c2tfbmV0ZGV2X25vdGlmaWVyID0ge1xcbm5ldC94ZHAveHNrLmMtMjI0Ni1cXHQubm90aWZpZXJfY2FsbFxcdD0geHNrX25vdGlmaWVyLFxcbi0tXFxubmV0L3hkcC94c2suYy0yMjQ4LVxcbm5ldC94ZHAveHNrLmM6MjI0OTpzdGF0aWMgaW50IF9fbmV0X2luaXQgeHNrX25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldClcXG5uZXQveGRwL3hzay5jLTIyNTAte1xcbi0tXFxubmV0L3hkcC94c2suYy0yMjU1LVxcbm5ldC94ZHAveHNrLmM6MjI1NjpzdGF0aWMgdm9pZCBfX25ldF9leGl0IHhza19uZXRfZXhpdChzdHJ1Y3QgbmV0ICpuZXQpXFxubmV0L3hkcC94c2suYy0yMjU3LXtcXG4tLVxcbm5ldC94ZHAveHNrLmMtMjI2MC1cXG5uZXQveGRwL3hzay5jOjIyNjE6c3RhdGljIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyB4c2tfbmV0X29wcyA9IHtcXG5uZXQveGRwL3hzay5jLTIyNjItXFx0LmluaXQgPSB4c2tfbmV0X2luaXQsXFxuLS1cXG5uZXQveGRwL3hzay5jLTIyNjUtXFxubmV0L3hkcC94c2suYzoyMjY2OnN0YXRpYyBpbnQgX19pbml0IHhza19pbml0KHZvaWQpXFxubmV0L3hkcC94c2suYy0yMjY3LXtcXG4tLVxcbm5ldC94ZHAveHNrLmMtMjMwNy1cXG5uZXQveGRwL3hzay5jOjIzMDg6ZnNfaW5pdGNhbGwoeHNrX2luaXQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwNzozNzo1My4yMzYwNTU4OTVaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDk4NzE2NDE5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBYRFAgU29ja2V0IERlc3RydWN0b3IqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBgeHNrX2Rlc3RydWN0X3NrYmAsIHRoYXQncyB0aGUga2V5IGZ1bmN0aW9uLCBhbiBleHBvcnRlZCBmdW5jdGlvbiwgbWVhbmluZyBpdCdzIGludGVuZGVkIHRvIGJlIGNhbGxlZCBmcm9tIG91dHNpZGUgdGhlIG1vZHVsZS4gSSBrbm93IHRoYXQsIGJhc2VkIG9uIGl0cyBzaWduYXR1cmU6IGBJTkRJUkVDVF9DQUxMQUJMRV9TQ09QRSB2b2lkIHhza19kZXN0cnVjdF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYilgLiBXZSBhbHNvIGhhdmUgcmVsYXRlZCBmdW5jdGlvbnMgdG8gY29uc2lkZXIsIGxpa2UgYHhza19nZW5lcmljX3JjdmAsIGB4c2tfc2VuZG1zZ2AsIGB4c2tfYmluZGAsIGFuZCBgeHNrX2NyZWF0ZWAsIHRob3VnaCBgeHNrX2NyZWF0ZWAgaXMgc3RhdGljIGJ1dCByZWdpc3RlcmVkIGFzIGEgYG5ldF9wcm90b19mYW1pbHlgLiBXZSBjb3VsZCBjZXJ0YWlubHkgbG9vayBhdCB0aG9zZSBhcyB3ZWxsLCBidXQgZm9yIG5vdywgbGV0J3Mga2VlcCBgeHNrX2Rlc3RydWN0X3NrYmAgYW5kIGB4c2tfZ2VuZXJpY19yY3ZgIGluIGZvY3VzLlxuXG5Ob3csIHRoYXQgV29ydGhGdXp6aW5nIGNoZWNrLi4uIEFoYSEgVGhlIHBhdGNoIGFkZHMgYHNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpYCB0byBgeHNrX3NrYl9pbml0X21pc2NgLiBUaGlzIHN1Z2dlc3RzIGEgZml4IGZvciBuZXR3b3JrIGhlYWRlciBvZmZzZXRzIG9uIGdlbmVyaWMgQUZfWERQIHNrYnMgc2VudCB0byBuZXRkZXZpY2VzLiBTbywgaXQncyBjb3JlIG5ldHdvcmtpbmcgbG9naWMsIGFuZCBhY2Nlc3NpYmxlIHRocm91Z2ggQUZfWERQIChYU0sgc29ja2V0cykuIEV4Y2VsbGVudCwgdGhpcyBpcyBkZWZpbml0ZWx5IGZ1enphYmxlLCBhbmQgd2l0aGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBRRU1VLCBldmVuIGJldHRlci4gVGhlIGtleSBjb25maWd1cmF0aW9uIG9wdGlvbnMgbmVlZGVkIGFyZSBgWERQX1NPQ0tFVFNgIGFuZCBgQlBGX1NZU0NBTExgLlxuXG5TbywgV29ydGhGdXp6aW5nOiBUcnVlLiBUaGlzIGlzIHNvbWV0aGluZyB3ZSBjYW4gYW5kIHNob3VsZCB0YXJnZXQuIEknbGwgbmVlZCB0byByZW1lbWJlciB0byBzZXQgdGhlIHJlc3VsdHMgYWNjb3JkaW5nbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwOTcxLCJPdXRwdXRUb2tlbnMiOjExMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwNzozNzo1OC4yMjMyMjI3NDdaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MDQ3Njg3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWERQX1NPQ0tFVFNcIixcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwieHNrX2Rlc3RydWN0X3NrYlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKCkgdG8geHNrX3NrYl9pbml0X21pc2MoKSB3aGVuIGJ1aWxkaW5nIHNrYnMgZm9yIEFGX1hEUCBzb2NrZXRzIHRyYW5zbWl0LiBUaGlzIG1vZGlmaWVzIGNvcmUgbmV0d29ya2luZyBBRl9YRFAgbG9naWMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBhbmQgaXMgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJYRFBfU09DS0VUU1wiLFxuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ4c2tfZGVzdHJ1Y3Rfc2tiXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoKSB0byB4c2tfc2tiX2luaXRfbWlzYygpIHdoZW4gYnVpbGRpbmcgc2ticyBmb3IgQUZfWERQIHNvY2tldHMgdHJhbnNtaXQuIFRoaXMgbW9kaWZpZXMgY29yZSBuZXR3b3JraW5nIEFGX1hEUCBsb2dpYyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGFuZCBpcyB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwNzozNzo1OC4yOTM3MDY3ODdaIiwiU2VxIjozNSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMzMzA3MDcwMTE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDc6Mzc6NTguMjk0MTQ5MTM3WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MzMzMDY2MjE5NzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBzaW5nbGUgY2FsbCB0byBgc2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYilgIHdpdGhpbiBgeHNrX3NrYl9pbml0X21pc2MoKWAgaW4gdGhlIEFGX1hEUCBzdWJzeXN0ZW0gKGBuZXQveGRwL3hzay5jYCkuXFxuXFxuS01TQU4gdnMuIEtBU0FOIGFwcGxpY2FiaWxpdHkgYW5hbHlzaXM6XFxuLSAqKktNU0FOIFJlbGV2YW5jZSoqOiBLTVNBTiBkZXRlY3RzIHVzZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhbmQgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlciBzcGFjZS4gVGhlIHBhdGNoIHNpbXBseSBpbml0aWFsaXplcyB0aGUgYG5ldHdvcmtfaGVhZGVyYCBvZmZzZXQgb24gdGhlIG5ld2x5IGNyZWF0ZWQgYHNrX2J1ZmZgIHRvIG1hdGNoIGBza2ItXFx1MDAzZWRhdGFgLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBzdGFjay9oZWFwIGFsbG9jYXRpb25zLCBkb2VzIG5vdCBleHBvc2UgdW5pbml0aWFsaXplZCBwYWRkaW5nIG9yIHN0cnVjdCBmaWVsZHMgdG8gdXNlciBzcGFjZSwgYW5kIGRvZXMgbm90IGFsdGVyIGxlbmd0aCBjYWxjdWxhdGlvbnMgb3IgYm91bmRzIGNoZWNrcyBpbiBhIHdheSB0aGF0IHdvdWxkIGFsbG93IHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5Llxcbi0gKipLQVNBTiAvIFN0YW5kYXJkIERlYnVnZ2VycyoqOiBTdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGFuZCB0aGUgbmV0d29ya2luZyBzdGFjaydzIGJ1aWx0LWluIGFzc2VydGlvbnMvY2hlY2tzIGFyZSBzdWZmaWNpZW50IHRvIHRlc3Qgc2tiIGNvbnN0cnVjdGlvbiBhbmQgcGFja2V0IHRyYW5zbWlzc2lvbiBpbiBBRl9YRFAuXFxuXFxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBiMDdkODViZjllOGVkZWNmN2VmYjMxZmEzY2YyYjA4MmI0YzUzNDRhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMyAwNzozNjo1MiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC94ZHAveHNrLmMgYi9uZXQveGRwL3hzay5jXG5pbmRleCAzMzQ3NWIxODBlYTZmLi4yMDc3YmI2Mjk5Y2E5IDEwMDY0NFxuLS0tIGEvbmV0L3hkcC94c2suY1xuKysrIGIvbmV0L3hkcC94c2suY1xuQEAgLTk0Nyw2ICs5NDcsOCBAQCBzdGF0aWMgaW50IHhza19za2JfaW5pdF9taXNjKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4ZHBfc29jayAqeHMsXG4ge1xuIFx0aW50IGVycjtcbiBcbitcdHNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpO1xuK1xuIFx0ZXJyID0geHNrX3NrYl9kZXN0cnVjdG9yX3NldF9hZGRyKHNrYiwgYWRkcik7XG4gXHRpZiAodW5saWtlbHkoZXJyKSlcbiBcdFx0cmV0dXJuIGVycjtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA3OjM3OjU4LjI5NDE1MDA2N1oiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNzMzNDA2Nzc1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFhTSyBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBUaGUgcGF0Y2ggaXMgdG91Y2hpbmcgYG5ldC94ZHAveHNrLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGB4c2tfc2tiX2luaXRfbWlzY2AgZnVuY3Rpb24uIEltbWVkaWF0ZWx5LCBJIHNlZSBhIG5ldyBsaW5lOiBgc2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYik7YC4gUmlnaHQsIHRoaXMgaXMgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGFkZGl0aW9uLCBidXQgbGV0J3MgbWFrZSBzdXJlIGl0IG1ha2VzIHNlbnNlIGluIGNvbnRleHQuIExldCBtZSBxdWlja2x5IHVzZSBgcmVhZC1maWxlYCB0byBnZXQgdGhlIGFyZWEgYXJvdW5kIGxpbmUgOTQ3IG9mIGBuZXQveGRwL3hzay5jYC4gVGhlIHB1cnBvc2Ugb2YgdGhpcyBmdW5jdGlvbiBtdXN0IGJlIHRvIGluaXRpYWxpemUgYW4gYHNrX2J1ZmZgIGZvciBYU0sgKGVYcHJlc3MgRGF0YSBQYXRoIFNvY2tldHMpLiBTbywgaXQgbWFrZXMgc2Vuc2UgdGhhdCB3ZSdkIGhhdmUgdG8gcmVzZXQgdGhlIG5ldHdvcmsgaGVhZGVyIG9mIGBza2JgIGJlZm9yZSBhc3NpZ25pbmcgdGhlIGFkZHJlc3MsIHByZXZlbnRpbmcgYW55IHdlaXJkIHNpZGUgZWZmZWN0cyB3aGVuIGNvbnN0cnVjdGluZyB0aGUgYHNrX2J1ZmZgLiBUaGlzIGlzIGEgbG93LXJpc2ssIGxpa2VseSBuZWNlc3NhcnkgYWRkaXRpb24uIEknbGwgZmxhZyBpdCBhcyBzdWNoIGFuZCBtb3ZlIG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDU4LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDc6Mzg6MTUuNjI4MjIxMTlaIiwiU2VxIjozOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU2NjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC94ZHAveHNrLmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTIwLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgOTIwOlxcdFxcdHhza3FfcHJvZF9zdWJtaXRfbihwb29sLVxcdTAwM2VjcSwgMSk7XFxuIDkyMTpcXHRcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZwb29sLVxcdTAwM2VjcV9wcm9kX2xvY2ssIGZsYWdzKTtcXG4gOTIyOlxcdH1cXG4gOTIzOlxcdFxcbiA5MjQ6XFx0c3RhdGljIHZvaWQgeHNrX2NxX2NhbmNlbF9sb2NrZWQoc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsIHUzMiBuKVxcbiA5MjU6XFx0e1xcbiA5MjY6XFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZwb29sLVxcdTAwM2VjcS1cXHUwMDNlY3FfY2FjaGVkX3Byb2RfbG9jayk7XFxuIDkyNzpcXHRcXHR4c2txX3Byb2RfY2FuY2VsX24ocG9vbC1cXHUwMDNlY3EsIG4pO1xcbiA5Mjg6XFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNnBvb2wtXFx1MDAzZWNxLVxcdTAwM2VjcV9jYWNoZWRfcHJvZF9sb2NrKTtcXG4gOTI5OlxcdH1cXG4gOTMwOlxcdFxcbiA5MzE6XFx0SU5ESVJFQ1RfQ0FMTEFCTEVfU0NPUEVcXG4gOTMyOlxcdHZvaWQgeHNrX2Rlc3RydWN0X3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiA5MzM6XFx0e1xcbiA5MzQ6XFx0XFx0c3RydWN0IHhza190eF9tZXRhZGF0YV9jb21wbCAqY29tcGwgPSBcXHUwMDI2c2tiX3NoaW5mbyhza2IpLVxcdTAwM2V4c2tfbWV0YTtcXG4gOTM1OlxcdFxcbiA5MzY6XFx0XFx0aWYgKGNvbXBsLVxcdTAwM2V0eF90aW1lc3RhbXApIHtcXG4gOTM3OlxcdFxcdFxcdC8qIHN3IGNvbXBsZXRpb24gdGltZXN0YW1wLCBub3QgYSByZWFsIG9uZSAqL1xcbiA5Mzg6XFx0XFx0XFx0KmNvbXBsLVxcdTAwM2V0eF90aW1lc3RhbXAgPSBrdGltZV9nZXRfdGFpX2Zhc3RfbnMoKTtcXG4gOTM5OlxcdFxcdH1cXG4gOTQwOlxcdFxcbiA5NDE6XFx0XFx0eHNrX2NxX3N1Ym1pdF9hZGRyX2xvY2tlZCh4ZHBfc2soc2tiLVxcdTAwM2VzayktXFx1MDAzZXBvb2wsIHNrYik7XFxuIDk0MjpcXHRcXHRzb2NrX3dmcmVlKHNrYik7XFxuIDk0MzpcXHR9XFxuIDk0NDpcXHRcXG4gOTQ1OlxcdHN0YXRpYyBpbnQgeHNrX3NrYl9pbml0X21pc2Moc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHhkcF9zb2NrICp4cyxcXG4gOTQ2OlxcdFxcdFxcdFxcdCAgICAgdTY0IGFkZHIpXFxuIDk0NzpcXHR7XFxuIDk0ODpcXHRcXHRpbnQgZXJyO1xcbiA5NDk6XFx0XFxuIDk1MDpcXHRcXHRza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKTtcXG4gOTUxOlxcdFxcbiA5NTI6XFx0XFx0ZXJyID0geHNrX3NrYl9kZXN0cnVjdG9yX3NldF9hZGRyKHNrYiwgYWRkcik7XFxuIDk1MzpcXHRcXHRpZiAodW5saWtlbHkoZXJyKSlcXG4gOTU0OlxcdFxcdFxcdHJldHVybiBlcnI7XFxuIDk1NTpcXHRcXG4gOTU2OlxcdFxcdHNrYi1cXHUwMDNlZGV2ID0geHMtXFx1MDAzZWRldjtcXG4gOTU3OlxcdFxcdHNrYi1cXHUwMDNlcHJpb3JpdHkgPSBSRUFEX09OQ0UoeHMtXFx1MDAzZXNrLnNrX3ByaW9yaXR5KTtcXG4gOTU4OlxcdFxcdHNrYi1cXHUwMDNlbWFyayA9IFJFQURfT05DRSh4cy1cXHUwMDNlc2suc2tfbWFyayk7XFxuIDk1OTpcXHRcXHRza2ItXFx1MDAzZWRlc3RydWN0b3IgPSB4c2tfZGVzdHJ1Y3Rfc2tiO1xcbiA5NjA6XFx0XFx0cmV0dXJuIDA7XFxuIDk2MTpcXHR9XFxuIDk2MjpcXHRcXG4gOTYzOlxcdHN0YXRpYyB2b2lkIHhza19jb25zdW1lX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiA5NjQ6XFx0e1xcbiA5NjU6XFx0XFx0c3RydWN0IHhkcF9zb2NrICp4cyA9IHhkcF9zayhza2ItXFx1MDAzZXNrKTtcXG4gOTY2OlxcdFxcdHUzMiBudW1fZGVzY3MgPSB4c2tfZ2V0X251bV9kZXNjKHNrYik7XFxuIDk2NzpcXHRcXHRzdHJ1Y3QgeHNrX2FkZHJzICp4c2tfYWRkcjtcXG4gOTY4OlxcdFxcbiA5Njk6XFx0XFx0aWYgKHVubGlrZWx5KCF4c2tfc2tiX2Rlc3RydWN0b3JfaXNfYWRkcihza2IpKSkge1xcbiA5NzA6XFx0XFx0XFx0eHNrX2FkZHIgPSAoc3RydWN0IHhza19hZGRycyAqKXNrYl9zaGluZm8oc2tiKS1cXHUwMDNlZGVzdHJ1Y3Rvcl9hcmc7XFxuIDk3MTpcXHRcXHRcXHRrbWVtX2NhY2hlX2ZyZWUoeHNrX3R4X2dlbmVyaWNfY2FjaGUsIHhza19hZGRyKTtcXG4gOTcyOlxcdFxcdH1cXG4gOTczOlxcdFxcbiA5NzQ6XFx0XFx0c2tiLVxcdTAwM2VkZXN0cnVjdG9yID0gc29ja193ZnJlZTtcXG4gOTc1OlxcdFxcdHhza19jcV9jYW5jZWxfbG9ja2VkKHhzLVxcdTAwM2Vwb29sLCBudW1fZGVzY3MpO1xcbiA5NzY6XFx0XFx0LyogRnJlZSBza2Igd2l0aG91dCB0cmlnZ2VyaW5nIHRoZSBwZXJmIGRyb3AgdHJhY2UgKi9cXG4gOTc3OlxcdFxcdGNvbnN1bWVfc2tiKHNrYik7XFxuIDk3ODpcXHRcXHR4cy1cXHUwMDNlc2tiID0gTlVMTDtcXG4gOTc5OlxcdH1cXG4gOTgwOlxcdFxcbiA5ODE6XFx0c3RhdGljIHZvaWQgeHNrX2Ryb3Bfc2tiKHN0cnVjdCBza19idWZmICpza2IpXFxuIDk4MjpcXHR7XFxuIDk4MzpcXHRcXHRzdHJ1Y3QgeGRwX3NvY2sgKnhzID0geGRwX3NrKHNrYi1cXHUwMDNlc2spO1xcbiA5ODQ6XFx0XFxuIDk4NTpcXHRcXHR4cy1cXHUwMDNldHgtXFx1MDAzZWludmFsaWRfZGVzY3MgKz0geHNrX2dldF9udW1fZGVzYyhza2IpO1xcbiA5ODY6XFx0XFx0Y29uc3VtZV9za2Ioc2tiKTtcXG4gOTg3OlxcdFxcdHhzLVxcdTAwM2Vza2IgPSBOVUxMO1xcbiA5ODg6XFx0fVxcbiA5ODk6XFx0XFxuIDk5MDpcXHRzdGF0aWMgaW50IHhza19za2JfbWV0YWRhdGEoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdm9pZCAqYnVmZmVyLFxcbiA5OTE6XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCB4ZHBfZGVzYyAqZGVzYywgc3RydWN0IHhza19idWZmX3Bvb2wgKnBvb2wsXFxuIDk5MjpcXHRcXHRcXHRcXHQgICAgdTMyIGhyKVxcbiA5OTM6XFx0e1xcbiA5OTQ6XFx0XFx0c3RydWN0IHhza190eF9tZXRhZGF0YSAqbWV0YSA9IE5VTEw7XFxuIDk5NTpcXHRcXHR1MTYgY3N1bV9zdGFydCwgY3N1bV9vZmZzZXQ7XFxuIDk5NjpcXHRcXHR1NjQgZmxhZ3M7XFxuIDk5NzpcXHRcXG4gOTk4OlxcdFxcdGlmICh1bmxpa2VseShwb29sLVxcdTAwM2V0eF9tZXRhZGF0YV9sZW4gPT0gMCkpXFxuIDk5OTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDc6Mzg6MTUuNjI4Mzc5MzhaIiwiU2VxIjozOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjkyNjYwNTUyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYW4gZXhwZXJ0IGluIHRoZSBmaWVsZDpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBPcmlnaW5zIG9mIGB4c2tfc2tiX2luaXRfbWlzY2AqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gdHJ5aW5nIHRvIHRyYWNlIHRoZSBsaW5lYWdlIG9mIHRoaXMgYHhza19za2JfaW5pdF9taXNjYCBmdW5jdGlvbi4gVGhlIGdvYWwgaGVyZSBpcyB0byB1bmRlcnN0YW5kIGl0cyBwdXJwb3NlIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgdG8gY29ubmVjdCBpdCB0byBpdHMgaW5pdGlhbCBpbnRyb2R1Y3Rpb24gb3Igc2lnbmlmaWNhbnQgbW9kaWZpY2F0aW9ucyB3aXRoaW4gdGhlIHJlbGV2YW50IGNvZGViYXNlLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSBpdCdzIGJlaW5nIGNhbGxlZCwgd2hpY2ggd2lsbCBsaWtlbHkgZ2l2ZSBtZSBzb21lIGltcG9ydGFudCBjb250ZXh0LiBUaGUgYmVzdCBhcHByb2FjaCBpcyB0byBzdGFydCB3aXRoIGEgcXVpY2sgY29kZSBzZWFyY2guIEknbGwgdXNlIGBncmVwcGVyYCDigJMgdGhhdCdzIHVzdWFsbHkgdGhlIG1vc3QgZWZmaWNpZW50IHdheSB0byBxdWlja2x5IGZpbmQgYWxsIG9jY3VycmVuY2VzIG9mIHRoaXMgZnVuY3Rpb24gbmFtZSB3aXRoaW4gdGhlIHByb2plY3QuIEhvcGVmdWxseSwgYnkgaWRlbnRpZnlpbmcgdGhlIGNhbGwgc2l0ZXMsIEkgY2FuIHpvb20gaW4gb24gdGhlIHNwZWNpZmljIGNvbW1pdChzKSByZXNwb25zaWJsZSBmb3IgaXRzIGluY2x1c2lvbiBvciBtb2RpZmljYXRpb24uIFRoYXQgaW5mb3JtYXRpb24gd2lsbCBwcm92aWRlIHZhbHVhYmxlIGluc2lnaHQgaW50byB0aGUgZGVzaWduIGRlY2lzaW9ucyBhbmQgdGhlIGludGVudCBiZWhpbmQgdGhpcyBwYXJ0aWN1bGFyIGZ1bmN0aW9uLiBGcm9tIHRoZXJlLCBJIGNhbiBhbmFseXplIHRoZSBjb21taXQgbWVzc2FnZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUgdG8gZ3Jhc3AgaXRzIHJvbGUgbW9yZSBjb21wbGV0ZWx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjozNzg1LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwNzozODoxOC41NTQ5ODY5MjNaIiwiU2VxIjo0MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MjI1MDQ4MTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieHNrX3NrYl9pbml0X21pc2NcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hkcC94c2suYz05MzI9dm9pZCB4c2tfZGVzdHJ1Y3Rfc2tiKHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQveGRwL3hzay5jLTk0NC1cXG5uZXQveGRwL3hzay5jOjk0NTpzdGF0aWMgaW50IHhza19za2JfaW5pdF9taXNjKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4ZHBfc29jayAqeHMsXFxubmV0L3hkcC94c2suYy05NDYtXFx0XFx0XFx0ICAgICB1NjQgYWRkcilcXG4tLVxcbm5ldC94ZHAveHNrLmM9MTExMT1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnhza19idWlsZF9za2Ioc3RydWN0IHhkcF9zb2NrICp4cyxcXG4tLVxcbm5ldC94ZHAveHNrLmMtMTE4Ni1cXHRpZiAoIXhzLVxcdTAwM2Vza2IpIHtcXG5uZXQveGRwL3hzay5jOjExODc6XFx0XFx0ZXJyID0geHNrX3NrYl9pbml0X21pc2Moc2tiLCB4cywgZGVzYy1cXHUwMDNlYWRkcik7XFxubmV0L3hkcC94c2suYy0xMTg4LVxcdFxcdGlmICh1bmxpa2VseShlcnIpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwNzozODoyMC4xNzc0OTY1NzdaIiwiU2VxIjo0MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mzc3MzAwMzczMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gcHJvY2Vzc2luZyB0aGUgY29kZTpcblxuKipEaXZpbmcgaW50byBgeHNrX2J1aWxkX3NrYmAqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSB3aXRoIGB4c2tfYnVpbGRfc2tiYC4gSSdtIGdvaW5nIHRvIGZvY3VzIG9uIGxpbmVzIDExMTEgdG8gMTIwMC4gVGhpcyBmdW5jdGlvbiBpcyBjcnVjaWFsIGZvciBidWlsZGluZyBTS0JzIOKAkyB0aGUgU29ja2V0IEJ1ZmZlciBzdHJ1Y3R1cmVzIOKAkyB3aGljaCBhcmUgYWJzb2x1dGVseSBmdW5kYW1lbnRhbCB0byBob3cgZGF0YSBpcyBtb3ZlZCBhcm91bmQgaW4gdGhlIFhEUCAoZVhwcmVzcyBEYXRhIFBhdGgpIHdvcmxkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHBhcnQgKnRob3JvdWdobHkqLiBJIGtub3cgaXQgaGFuZGxlcyB0aGUgYWxsb2NhdGlvbiBhbmQgcG9wdWxhdGlvbiBvZiB0aGVzZSBTS0JzLCBhbmQgdGhhdCdzIHRoZSBjb3JlIG9mIGdldHRpbmcgcGFja2V0cyBpbnRvIGFuZCBvdXQgb2YgdGhlIG5ldHdvcmsgc3RhY2sgZWZmaWNpZW50bHkuIEknbSBleHBlY3Rpbmcgc29tZSBpbnRyaWNhdGUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGNhcmVmdWwgZGF0YSBjb3B5aW5nIGluIGhlcmU7IG9wdGltaXphdGlvbiBpcyBjcml0aWNhbCBpbiB0aGlzIGNvbnRleHQuIEknbGwgYmUgbG9va2luZyBmb3IgaG93IGl0IGhhbmRsZXMgcG90ZW50aWFsIGVycm9ycywgbGlrZSBtZW1vcnkgZXhoYXVzdGlvbiBvciBvdGhlciBpc3N1ZXMgdGhhdCBjb3VsZCBzdGFsbCBwYWNrZXQgcHJvY2Vzc2luZy4gQSBkZWVwIHVuZGVyc3RhbmRpbmcgb2YgZXJyb3IgcGF0aHMgaXMganVzdCBhcyBpbXBvcnRhbnQgYXMgdGhlIGhhcHB5IHBhdGggaW4gYSBwZXJmb3JtYW5jZS1jcml0aWNhbCBmdW5jdGlvbiBsaWtlIHRoaXMuIEknbGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgcG90ZW50aWFsIGZvciByYWNlIGNvbmRpdGlvbnMgb3IgbG9ja2luZyBpc3N1ZXMsIGVzcGVjaWFsbHkgd2l0aCBzaGFyZWQgZGF0YSBzdHJ1Y3R1cmVzLiBUaGlzIGlzIHdoZXJlIHRoZSBkZXZpbCBvZnRlbiBoaWRlcywgZXNwZWNpYWxseSBpbiBsb3ctbGV2ZWwgbmV0d29yayBjb2RlLiBJJ20gYWxzbyBjdXJpb3VzIHRvIHNlZSBob3cgaXQgaW50ZXJhY3RzIHdpdGggb3RoZXIgWERQIGNvbXBvbmVudHMsIGxpa2UgdGhlIHJpbmcgYnVmZmVycyBhbmQgdGhlIEFGX1hEUCBzb2NrZXQgaXRzZWxmLiBJdCdzIGxpa2VseSBpbnZvbHZlZCBpbiB0aGUgaGFuZG92ZXIgZnJvbSB0aGUgZmFzdCBwYXRoIHRvIHRoZSBzdGFuZGFyZCBuZXR3b3JrIHN0YWNrLCB3aGljaCBuZWVkcyB0byBiZSBhcyBzZWFtbGVzcyBhbmQgZWZmaWNpZW50IGFzIHBvc3NpYmxlLiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIGhvdyB0aGUgbWFnaWMgaGFwcGVucy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDMzNSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA3OjM4OjIzLjk1MDUwMjMwN1oiLCJTZXEiOjQyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTgxODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3hkcC94c2suY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMTEwLFxuICBcIkxpbmVDb3VudFwiOiA5MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMTEwOlxcdFxcbjExMTE6XFx0c3RhdGljIHN0cnVjdCBza19idWZmICp4c2tfYnVpbGRfc2tiKHN0cnVjdCB4ZHBfc29jayAqeHMsXFxuMTExMjpcXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCB4ZHBfZGVzYyAqZGVzYylcXG4xMTEzOlxcdHtcXG4xMTE0OlxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSB4cy1cXHUwMDNlZGV2O1xcbjExMTU6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IHhzLVxcdTAwM2Vza2I7XFxuMTExNjpcXHRcXHRpbnQgZXJyO1xcbjExMTc6XFx0XFxuMTExODpcXHRcXHRpZiAoZGV2LVxcdTAwM2Vwcml2X2ZsYWdzIFxcdTAwMjYgSUZGX1RYX1NLQl9OT19MSU5FQVIpIHtcXG4xMTE5OlxcdFxcdFxcdHNrYiA9IHhza19idWlsZF9za2JfemVyb2NvcHkoeHMsIGRlc2MpO1xcbjExMjA6XFx0XFx0XFx0aWYgKElTX0VSUihza2IpKSB7XFxuMTEyMTpcXHRcXHRcXHRcXHRlcnIgPSBQVFJfRVJSKHNrYik7XFxuMTEyMjpcXHRcXHRcXHRcXHRza2IgPSBOVUxMO1xcbjExMjM6XFx0XFx0XFx0XFx0Z290byBmcmVlX2VycjtcXG4xMTI0OlxcdFxcdFxcdH1cXG4xMTI1OlxcdFxcdH0gZWxzZSB7XFxuMTEyNjpcXHRcXHRcXHR1MzIgaHIsIHRyLCBsZW47XFxuMTEyNzpcXHRcXHRcXHR2b2lkICpidWZmZXI7XFxuMTEyODpcXHRcXG4xMTI5OlxcdFxcdFxcdGJ1ZmZlciA9IHhza19idWZmX3Jhd19nZXRfZGF0YSh4cy1cXHUwMDNlcG9vbCwgZGVzYy1cXHUwMDNlYWRkcik7XFxuMTEzMDpcXHRcXHRcXHRsZW4gPSBkZXNjLVxcdTAwM2VsZW47XFxuMTEzMTpcXHRcXG4xMTMyOlxcdFxcdFxcdGlmICghc2tiKSB7XFxuMTEzMzpcXHRcXHRcXHRcXHRociA9IG1heChORVRfU0tCX1BBRCwgTDFfQ0FDSEVfQUxJR04oZGV2LVxcdTAwM2VuZWVkZWRfaGVhZHJvb20pKTtcXG4xMTM0OlxcdFxcdFxcdFxcdHRyID0gZGV2LVxcdTAwM2VuZWVkZWRfdGFpbHJvb207XFxuMTEzNTpcXHRcXHRcXHRcXHRza2IgPSBzb2NrX2FsbG9jX3NlbmRfc2tiKFxcdTAwMjZ4cy1cXHUwMDNlc2ssIGhyICsgbGVuICsgdHIsIDEsIFxcdTAwMjZlcnIpO1xcbjExMzY6XFx0XFx0XFx0XFx0aWYgKHVubGlrZWx5KCFza2IpKVxcbjExMzc6XFx0XFx0XFx0XFx0XFx0Z290byBmcmVlX2VycjtcXG4xMTM4OlxcdFxcbjExMzk6XFx0XFx0XFx0XFx0c2tiX3Jlc2VydmUoc2tiLCBocik7XFxuMTE0MDpcXHRcXHRcXHRcXHRza2JfcHV0KHNrYiwgbGVuKTtcXG4xMTQxOlxcdFxcbjExNDI6XFx0XFx0XFx0XFx0ZXJyID0gc2tiX3N0b3JlX2JpdHMoc2tiLCAwLCBidWZmZXIsIGxlbik7XFxuMTE0MzpcXHRcXHRcXHRcXHRpZiAodW5saWtlbHkoZXJyKSlcXG4xMTQ0OlxcdFxcdFxcdFxcdFxcdGdvdG8gZnJlZV9lcnI7XFxuMTE0NTpcXHRcXG4xMTQ2OlxcdFxcdFxcdFxcdGlmIChkZXNjLVxcdTAwM2VvcHRpb25zIFxcdTAwMjYgWERQX1RYX01FVEFEQVRBKSB7XFxuMTE0NzpcXHRcXHRcXHRcXHRcXHRlcnIgPSB4c2tfc2tiX21ldGFkYXRhKHNrYiwgYnVmZmVyLCBkZXNjLFxcbjExNDg6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIHhzLVxcdTAwM2Vwb29sLCBocik7XFxuMTE0OTpcXHRcXHRcXHRcXHRcXHRpZiAodW5saWtlbHkoZXJyKSlcXG4xMTUwOlxcdFxcdFxcdFxcdFxcdFxcdGdvdG8gZnJlZV9lcnI7XFxuMTE1MTpcXHRcXHRcXHRcXHR9XFxuMTE1MjpcXHRcXHRcXHR9IGVsc2Uge1xcbjExNTM6XFx0XFx0XFx0XFx0aW50IG5yX2ZyYWdzID0gc2tiX3NoaW5mbyhza2IpLVxcdTAwM2Vucl9mcmFncztcXG4xMTU0OlxcdFxcdFxcdFxcdHN0cnVjdCB4c2tfYWRkcnMgKnhza19hZGRyO1xcbjExNTU6XFx0XFx0XFx0XFx0c3RydWN0IHBhZ2UgKnBhZ2U7XFxuMTE1NjpcXHRcXHRcXHRcXHR1OCAqdmFkZHI7XFxuMTE1NzpcXHRcXG4xMTU4OlxcdFxcdFxcdFxcdHhza19hZGRyID0geHNrX2FkZHJzX2FsbG9jKHNrYik7XFxuMTE1OTpcXHRcXHRcXHRcXHRpZiAoIXhza19hZGRyKSB7XFxuMTE2MDpcXHRcXHRcXHRcXHRcXHRlcnIgPSAtRU5PTUVNO1xcbjExNjE6XFx0XFx0XFx0XFx0XFx0Z290byBmcmVlX2VycjtcXG4xMTYyOlxcdFxcdFxcdFxcdH1cXG4xMTYzOlxcdFxcbjExNjQ6XFx0XFx0XFx0XFx0eHNrX2FkZHItXFx1MDAzZWFkZHJzW3hza19hZGRyLVxcdTAwM2VudW1fZGVzY3NdID0gZGVzYy1cXHUwMDNlYWRkcjtcXG4xMTY1OlxcdFxcbjExNjY6XFx0XFx0XFx0XFx0aWYgKHVubGlrZWx5KG5yX2ZyYWdzID09IChNQVhfU0tCX0ZSQUdTIC0gMSkgXFx1MDAyNlxcdTAwMjYgeHBfbWJfZGVzYyhkZXNjKSkpIHtcXG4xMTY3OlxcdFxcdFxcdFxcdFxcdGVyciA9IC1FT1ZFUkZMT1c7XFxuMTE2ODpcXHRcXHRcXHRcXHRcXHRnb3RvIGZyZWVfZXJyO1xcbjExNjk6XFx0XFx0XFx0XFx0fVxcbjExNzA6XFx0XFxuMTE3MTpcXHRcXHRcXHRcXHRwYWdlID0gYWxsb2NfcGFnZSh4cy1cXHUwMDNlc2suc2tfYWxsb2NhdGlvbik7XFxuMTE3MjpcXHRcXHRcXHRcXHRpZiAodW5saWtlbHkoIXBhZ2UpKSB7XFxuMTE3MzpcXHRcXHRcXHRcXHRcXHRlcnIgPSAtRUFHQUlOO1xcbjExNzQ6XFx0XFx0XFx0XFx0XFx0Z290byBmcmVlX2VycjtcXG4xMTc1OlxcdFxcdFxcdFxcdH1cXG4xMTc2OlxcdFxcbjExNzc6XFx0XFx0XFx0XFx0dmFkZHIgPSBrbWFwX2xvY2FsX3BhZ2UocGFnZSk7XFxuMTE3ODpcXHRcXHRcXHRcXHRtZW1jcHkodmFkZHIsIGJ1ZmZlciwgbGVuKTtcXG4xMTc5OlxcdFxcdFxcdFxcdGt1bm1hcF9sb2NhbCh2YWRkcik7XFxuMTE4MDpcXHRcXG4xMTgxOlxcdFxcdFxcdFxcdHNrYl9hZGRfcnhfZnJhZyhza2IsIG5yX2ZyYWdzLCBwYWdlLCAwLCBsZW4sIFBBR0VfU0laRSk7XFxuMTE4MjpcXHRcXHRcXHRcXHRyZWZjb3VudF9hZGQoUEFHRV9TSVpFLCBcXHUwMDI2eHMtXFx1MDAzZXNrLnNrX3dtZW1fYWxsb2MpO1xcbjExODM6XFx0XFx0XFx0fVxcbjExODQ6XFx0XFx0fVxcbjExODU6XFx0XFxuMTE4NjpcXHRcXHRpZiAoIXhzLVxcdTAwM2Vza2IpIHtcXG4xMTg3OlxcdFxcdFxcdGVyciA9IHhza19za2JfaW5pdF9taXNjKHNrYiwgeHMsIGRlc2MtXFx1MDAzZWFkZHIpO1xcbjExODg6XFx0XFx0XFx0aWYgKHVubGlrZWx5KGVycikpXFxuMTE4OTpcXHRcXHRcXHRcXHRnb3RvIGZyZWVfZXJyO1xcbjExOTA6XFx0XFx0fVxcbjExOTE6XFx0XFx0eHNrX2luY19udW1fZGVzYyhza2IpO1xcbjExOTI6XFx0XFxuMTE5MzpcXHRcXHRyZXR1cm4gc2tiO1xcbjExOTQ6XFx0XFxuMTE5NTpcXHRmcmVlX2VycjpcXG4xMTk2OlxcdFxcdGlmIChza2IgXFx1MDAyNlxcdTAwMjYgIXhzLVxcdTAwM2Vza2IpXFxuMTE5NzpcXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4xMTk4OlxcdFxcbjExOTk6XFx0XFx0aWYgKGVyciA9PSAtRU9WRVJGTE9XKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA3OjM4OjIzLjk1MDY2MTk3NloiLCJTZXEiOjQzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3NjUwMDgxODU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBgc2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyYCBBZGRpdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhlIGNvcmUgb2YgdGhpcyBpcyB0aGUgaW50cm9kdWN0aW9uIG9mIGBza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKWAgaW4gdGhlIEFGX1hEUCBjb250ZXh0LiBTcGVjaWZpY2FsbHksIGBza2ItXHUwMDNlbmV0d29ya19oZWFkZXIgPSBza2ItXHUwMDNlZGF0YSAtIHNrYi1cdTAwM2VoZWFkO2AuICBUaGUgYWltIGhlcmUgaXMgdG8gZW5zdXJlIHRoYXQgdGhlIGBuZXR3b3JrX2hlYWRlcmAgZmllbGQgd2l0aGluIHRoZSBgc2tfYnVmZmAgc3RydWN0dXJlIGlzIGNvcnJlY3RseSBzZXQgKmJlZm9yZSogdGhlIGBza2JgIGlzIHRyYW5zbWl0dGVkLCBwYXJ0aWN1bGFybHkgd2hlbiB1c2luZyBnZW5lcmljL2RyaXZlciB0cmFuc21pc3Npb24gcGF0aHMgbGlrZSBgZGV2X3F1ZXVlX3htaXRgLiBQcmV2aW91c2x5LCBBRl9YRFAgbWlnaHQndmUgYmVlbiBjcmVhdGluZyBgc2tiYHMgd2l0aG91dCBpbml0aWFsaXppbmcgdGhpcyBoZWFkZXIgcHJvcGVybHksIG9yIHdpdGggYSBkZWZhdWx0IHZhbHVlLiBUaGlzIG9taXNzaW9uIGNvdWxkIGxlYWQgdG8gaXNzdWVzIGluIHZhcmlvdXMgcGFydHMgb2YgdGhlIG5ldHdvcmtpbmcgc3RhY2vigJRxZGlzY3MgbGlrZSBgc2NoX25ldGVtYCBhbmQgYHNjaF9mcWAsIEJQRiBwcm9ncmFtcywgcGFja2V0IHNvY2tldHMsIGFuZCBldmVuIGRldmljZSBkcml2ZXJz4oCUYWxsIG9mIHdoaWNoIG1pZ2h0IGRlcmVmZXJlbmNlIGBza2JfbmV0d29ya19oZWFkZXIoc2tiKWAgb3IgcmVseSBvbiB0aGUgb2Zmc2V0LlxuXG5Ob3csIGxldCdzIGFkZHJlc3MgdGhlIGNydWNpYWwgcXVlc3Rpb246IGFyZSB3ZSBpbnRyb2R1Y2luZyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3M/IE5vLiBNeSBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBjaGFuZ2UgKmNvcnJlY3RseSogaW5pdGlhbGl6ZXMgdGhlIGBuZXR3b3JrX2hlYWRlcmAgZmllbGQuIEl0J3Mgbm90IGV4cG9zaW5nIHVuaW5pdGlhbGl6ZWQgZGF0YSB0byB1c2VyIHNwYWNlLiBJdCdzIHVzaW5nIGBzb2NrX2FsbG9jX3NlbmRfc2tiYCBvciBgeHNrX2J1aWxkX3NrYl96ZXJvY29weWAsIGFuZCB0aGVzZSBmdW5jdGlvbnMgaW5pdGlhbGl6ZSBgc2tiLVx1MDAzZWRhdGFgIGFuZCBgc2tiLVx1MDAzZWhlYWRgLiBUaGUgZnVuY3Rpb24gaXRzZWxmIGRvZXNuJ3QgYWxsb2NhdGUgbmV3IHN0cnVjdHVyZXMgb3IgY2hhbmdlIGJvdW5kcyBjaGVja3MgdGhhdCB3b3VsZCBsZWFkIHRvIHBvdGVudGlhbCBpc3N1ZXMuIEl0J3MgYSBzdHJhaWdodGZvcndhcmQgYXNzaWdubWVudCBvZiBhIHByZS1leGlzdGluZyBmaWVsZCBiYXNlZCBvbiBleGlzdGluZyBpbml0aWFsaXplZCBkYXRhLlxuXG5SZWdhcmRpbmcgS01TQU4gKEtlcm5lbCBNZW1vcnkgU2FuaXRpemVyKSwgdGhpcyBjaGFuZ2UgaXMgY2xlYXJseSAqbm90KiBzb21ldGhpbmcgdGhhdCByZXF1aXJlcyBLTVNBTi4gS01TQU4gaXMgcHJpbWFyaWx5IGNvbmNlcm5lZCB3aXRoIGRldGVjdGluZyByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSwgd2hpY2ggY291bGQgbGVhZCB0byBpbmZvcm1hdGlvbiBsZWFrcywgb3IgdW5pbml0aWFsaXplZCB2YWx1ZXMgdGhhdCBtaWdodCBiZSB1c2VkIGFzIHRoZSBiYXNpcyBvZiBhIGRlY2lzaW9uLiBUaGlzIGlzbid0IHRoYXQuIFRoaXMgcGF0Y2ggZml4ZXMgYSBidWcgd2hlcmUgYG5ldHdvcmtfaGVhZGVyYCB3YXNuJ3QgcHJvcGVybHkgaW5pdGlhbGl6ZWQuIFN0YW5kYXJkIEtBU0FOIChLZXJuZWwgQWRkcmVzcyBTYW5pdGl6ZXIpIGFuZCByZWxhdGVkIHNhbml0aXplcnMgYXJlIHN1ZmZpY2llbnQuIEl0IGZvY3VzZXMgb24gbWVtb3J5IHNhZmV0eSBpc3N1ZXMsIHdoaWNoIGFyZSBub3QgcHJlc2VudCBoZXJlLlxuXG5UaGVyZWZvcmUsIHRoZSByZWFzb25pbmcgZm9yIGBOZWVkc0tNU0FOID0gZmFsc2VgIGlzIHN0cmFpZ2h0Zm9yd2FyZDogdGhpcyBwYXRjaCAqaW5pdGlhbGl6ZXMqIGEgZmllbGQsIGFuZCBkb2VzICpub3QqIGNyZWF0ZSBuZXcgcGF0aHMgd2hlcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgcmVhZCwgY29waWVkIHRvIHVzZXJzcGFjZSwgb3IgYnJhbmNoZWQgb24uIEl0J3MgYSBwdXJlIGluaXRpYWxpemF0aW9uLCBhIGJ1ZyBmaXggZm9yIGNvcnJlY3QgaGVhZGVyIHVzYWdlIHdpdGhpbiB0aGUgbmV0d29yayBzdGFjay5cblxuXG4iLCJJbnB1dFRva2VucyI6NjA4MywiT3V0cHV0VG9rZW5zIjoyNDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwNzozODozMS42MDA3NDcwNzRaIiwiU2VxIjo0NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzE1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBzaW5nbGUgY2FsbCB0byBgc2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYilgIHdpdGhpbiBgeHNrX3NrYl9pbml0X21pc2MoKWAgaW4gdGhlIEFGX1hEUCBzdWJzeXN0ZW0gKGBuZXQveGRwL3hzay5jYCkuXFxuXFxuS01TQU4gdnMuIEtBU0FOIGFwcGxpY2FiaWxpdHkgYW5hbHlzaXM6XFxuLSAqKktNU0FOIFJlbGV2YW5jZSoqOiBLTVNBTiBkZXRlY3RzIHVzZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhbmQgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlciBzcGFjZS4gVGhlIHBhdGNoIHNpbXBseSBpbml0aWFsaXplcyB0aGUgYG5ldHdvcmtfaGVhZGVyYCBvZmZzZXQgb24gdGhlIG5ld2x5IGNyZWF0ZWQgYHNrX2J1ZmZgIHRvIG1hdGNoIGBza2ItXFx1MDAzZWRhdGFgLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBzdGFjay9oZWFwIGFsbG9jYXRpb25zLCBkb2VzIG5vdCBleHBvc2UgdW5pbml0aWFsaXplZCBwYWRkaW5nIG9yIHN0cnVjdCBmaWVsZHMgdG8gdXNlciBzcGFjZSwgYW5kIGRvZXMgbm90IGFsdGVyIGxlbmd0aCBjYWxjdWxhdGlvbnMgb3IgYm91bmRzIGNoZWNrcyBpbiBhIHdheSB0aGF0IHdvdWxkIGFsbG93IHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5Llxcbi0gKipLQVNBTiAvIFN0YW5kYXJkIERlYnVnZ2VycyoqOiBTdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGFuZCB0aGUgbmV0d29ya2luZyBzdGFjaydzIGJ1aWx0LWluIGFzc2VydGlvbnMvY2hlY2tzIGFyZSBzdWZmaWNpZW50IHRvIHRlc3Qgc2tiIGNvbnN0cnVjdGlvbiBhbmQgcGFja2V0IHRyYW5zbWlzc2lvbiBpbiBBRl9YRFAuXFxuXFxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgc2luZ2xlIGNhbGwgdG8gYHNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpYCB3aXRoaW4gYHhza19za2JfaW5pdF9taXNjKClgIGluIHRoZSBBRl9YRFAgc3Vic3lzdGVtIChgbmV0L3hkcC94c2suY2ApLlxcblxcbktNU0FOIHZzLiBLQVNBTiBhcHBsaWNhYmlsaXR5IGFuYWx5c2lzOlxcbi0gKipLTVNBTiBSZWxldmFuY2UqKjogS01TQU4gZGV0ZWN0cyB1c2Ugb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYW5kIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXIgc3BhY2UuIFRoZSBwYXRjaCBzaW1wbHkgaW5pdGlhbGl6ZXMgdGhlIGBuZXR3b3JrX2hlYWRlcmAgb2Zmc2V0IG9uIHRoZSBuZXdseSBjcmVhdGVkIGBza19idWZmYCB0byBtYXRjaCBgc2tiLVxcdTAwM2VkYXRhYC4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgc3RhY2svaGVhcCBhbGxvY2F0aW9ucywgZG9lcyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgcGFkZGluZyBvciBzdHJ1Y3QgZmllbGRzIHRvIHVzZXIgc3BhY2UsIGFuZCBkb2VzIG5vdCBhbHRlciBsZW5ndGggY2FsY3VsYXRpb25zIG9yIGJvdW5kcyBjaGVja3MgaW4gYSB3YXkgdGhhdCB3b3VsZCBhbGxvdyByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS5cXG4tICoqS0FTQU4gLyBTdGFuZGFyZCBEZWJ1Z2dlcnMqKjogU3RhbmRhcmQgS0FTQU4gZnV6emluZyBhbmQgdGhlIG5ldHdvcmtpbmcgc3RhY2sncyBidWlsdC1pbiBhc3NlcnRpb25zL2NoZWNrcyBhcmUgc3VmZmljaWVudCB0byB0ZXN0IHNrYiBjb25zdHJ1Y3Rpb24gYW5kIHBhY2tldCB0cmFuc21pc3Npb24gaW4gQUZfWERQLlxcblxcblRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowb8cll[1] Phase: Succeeded StartedAt: 2026-09-03 07:38:42 +0000 UTC FinishedAt: 2026-09-03 07:38:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb8cll[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-03 07:38:42 +0000 UTC FinishedAt: 2026-09-03 07:38:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb8cll[2] Phase: Succeeded StartedAt: 2026-09-03 07:38:42 +0000 UTC FinishedAt: 2026-09-03 11:18:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb8cll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_destruct_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"487e2220-beb7-46f6-b681-2ffdd9c0a705","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-03 07:38:42 +0000 UTC FinishedAt: 2026-09-03 11:18:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_destruct_skb"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"487e2220-beb7-46f6-b681-2ffdd9c0a705","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowb8cll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_destruct_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"487e2220-beb7-46f6-b681-2ffdd9c0a705","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-03 07:38:42 +0000 UTC FinishedAt: 2026-09-03 07:38:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb8cll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_destruct_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"487e2220-beb7-46f6-b681-2ffdd9c0a705","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-03 07:38:42 +0000 UTC FinishedAt: 2026-09-03 07:38:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowb8cll/series-workflowb8cll-convert-artifact-2214928130/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowb8cll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_destruct_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"487e2220-beb7-46f6-b681-2ffdd9c0a705","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-03 07:38:52 +0000 UTC FinishedAt: 2026-09-03 07:54:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb8cll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_destruct_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"487e2220-beb7-46f6-b681-2ffdd9c0a705","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-03 07:38:52 +0000 UTC FinishedAt: 2026-09-03 07:54:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*3e242f84-6f1b-4944-a23d-326dadc0d99a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowb8cll/series-workflowb8cll-convert-artifact-2214928130/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "8036d819-ec41-4eb0-9e34-743cb5300570", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowb8cll/series-workflowb8cll-build-action-3890523584/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowb8cll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_destruct_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"487e2220-beb7-46f6-b681-2ffdd9c0a705","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-03 07:38:52 +0000 UTC FinishedAt: 2026-09-03 07:54:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*3e242f84-6f1b-4944-a23d-326dadc0d99a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowb8cll/series-workflowb8cll-convert-artifact-2214928130/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "8036d819-ec41-4eb0-9e34-743cb5300570", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowb8cll/series-workflowb8cll-build-action-3890523584/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowb8cll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_destruct_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"487e2220-beb7-46f6-b681-2ffdd9c0a705","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-03 07:54:52 +0000 UTC FinishedAt: 2026-09-03 07:54:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb8cll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_destruct_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"487e2220-beb7-46f6-b681-2ffdd9c0a705","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-03 07:54:52 +0000 UTC FinishedAt: 2026-09-03 07:54:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb8cll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_destruct_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"487e2220-beb7-46f6-b681-2ffdd9c0a705","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-03 07:54:52 +0000 UTC FinishedAt: 2026-09-03 07:55:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb8cll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_destruct_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"487e2220-beb7-46f6-b681-2ffdd9c0a705","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-03 07:54:52 +0000 UTC FinishedAt: 2026-09-03 07:54:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"487e2220-beb7-46f6-b681-2ffdd9c0a705","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowb8cll/series-workflowb8cll-convert-artifact-1436745053/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowb8cll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_destruct_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"487e2220-beb7-46f6-b681-2ffdd9c0a705","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-03 07:55:02 +0000 UTC FinishedAt: 2026-09-03 07:57:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb8cll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_destruct_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"487e2220-beb7-46f6-b681-2ffdd9c0a705","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-03 07:55:02 +0000 UTC FinishedAt: 2026-09-03 07:57:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*8036d819-ec41-4eb0-9e34-743cb5300570,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowb8cll/series-workflowb8cll-build-action-3890523584/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowb8cll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_destruct_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"487e2220-beb7-46f6-b681-2ffdd9c0a705","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-03 07:57:18 +0000 UTC FinishedAt: 2026-09-03 07:57:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb8cll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_destruct_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"487e2220-beb7-46f6-b681-2ffdd9c0a705","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-03 07:57:18 +0000 UTC FinishedAt: 2026-09-03 07:57:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb8cll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_destruct_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"487e2220-beb7-46f6-b681-2ffdd9c0a705","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-03 07:57:18 +0000 UTC FinishedAt: 2026-09-03 08:13:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb8cll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_destruct_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"487e2220-beb7-46f6-b681-2ffdd9c0a705","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-03 07:57:18 +0000 UTC FinishedAt: 2026-09-03 08:13:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*3e242f84-6f1b-4944-a23d-326dadc0d99a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowb8cll/series-workflowb8cll-convert-artifact-1436745053/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "030357d2-bf8b-4090-b851-1e346c2c8238", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowb8cll/series-workflowb8cll-build-action-2163752505/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowb8cll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_destruct_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"487e2220-beb7-46f6-b681-2ffdd9c0a705","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-03 07:57:18 +0000 UTC FinishedAt: 2026-09-03 08:13:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*3e242f84-6f1b-4944-a23d-326dadc0d99a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowb8cll/series-workflowb8cll-convert-artifact-1436745053/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "030357d2-bf8b-4090-b851-1e346c2c8238", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowb8cll/series-workflowb8cll-build-action-2163752505/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowb8cll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_destruct_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"487e2220-beb7-46f6-b681-2ffdd9c0a705","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-03 08:13:10 +0000 UTC FinishedAt: 2026-09-03 08:13:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb8cll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_destruct_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"487e2220-beb7-46f6-b681-2ffdd9c0a705","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-03 08:13:10 +0000 UTC FinishedAt: 2026-09-03 08:13:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb8cll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_destruct_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"487e2220-beb7-46f6-b681-2ffdd9c0a705","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-03 08:13:10 +0000 UTC FinishedAt: 2026-09-03 08:15:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb8cll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_destruct_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"487e2220-beb7-46f6-b681-2ffdd9c0a705","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-03 08:13:10 +0000 UTC FinishedAt: 2026-09-03 08:15:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*030357d2-bf8b-4090-b851-1e346c2c8238,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowb8cll/series-workflowb8cll-build-action-2163752505/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowb8cll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_destruct_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"487e2220-beb7-46f6-b681-2ffdd9c0a705","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-03 08:15:21 +0000 UTC FinishedAt: 2026-09-03 11:18:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb8cll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_destruct_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"487e2220-beb7-46f6-b681-2ffdd9c0a705","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-03 08:15:21 +0000 UTC FinishedAt: 2026-09-03 11:18:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_destruct_skb"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*8036d819-ec41-4eb0-9e34-743cb5300570,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*030357d2-bf8b-4090-b851-1e346c2c8238,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowb8cll/series-workflowb8cll-build-action-3890523584/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowb8cll/series-workflowb8cll-build-action-2163752505/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowb8cll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_destruct_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"487e2220-beb7-46f6-b681-2ffdd9c0a705","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-03 08:15:21 +0000 UTC FinishedAt: 2026-09-03 08:15:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb8cll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_destruct_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"487e2220-beb7-46f6-b681-2ffdd9c0a705","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-03 08:15:21 +0000 UTC FinishedAt: 2026-09-03 08:15:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_destruct_skb"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowb8cll/series-workflowb8cll-convert-artifact-2474718690/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowb8cll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_destruct_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"487e2220-beb7-46f6-b681-2ffdd9c0a705","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-03 08:15:21 +0000 UTC FinishedAt: 2026-09-03 08:15:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb8cll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_destruct_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"487e2220-beb7-46f6-b681-2ffdd9c0a705","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-03 08:15:21 +0000 UTC FinishedAt: 2026-09-03 08:15:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb8cll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_destruct_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"487e2220-beb7-46f6-b681-2ffdd9c0a705","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-03 08:15:21 +0000 UTC FinishedAt: 2026-09-03 08:15:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb8cll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_destruct_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"487e2220-beb7-46f6-b681-2ffdd9c0a705","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-03 08:15:31 +0000 UTC FinishedAt: 2026-09-03 11:18:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb8cll[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["xsk_destruct_skb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"544d85de4dc22c01badfd8cefa59829ce35c4858","config_name":"upstream-apparmor-kasan.config","enable_configs":["XDP_SOCKETS","BPF_SYSCALL"],"series_id":"487e2220-beb7-46f6-b681-2ffdd9c0a705","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-03 08:15:32 +0000 UTC FinishedAt: 2026-09-03 11:17:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*8036d819-ec41-4eb0-9e34-743cb5300570,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*030357d2-bf8b-4090-b851-1e346c2c8238,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowb8cll/series-workflowb8cll-build-action-3890523584/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowb8cll/series-workflowb8cll-build-action-2163752505/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowb8cll/series-workflowb8cll-convert-artifact-2474718690/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}