Name: series-workflowxf4j8 Phase: Succeeded StartedAt: 2026-08-27 05:25:37 +0000 UTC FinishedAt: 2026-08-27 09:20:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxf4j8[0] Phase: Succeeded StartedAt: 2026-08-27 05:25:37 +0000 UTC FinishedAt: 2026-08-27 05:40:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxf4j8[0].run-triage Phase: Succeeded StartedAt: 2026-08-27 05:25:37 +0000 UTC FinishedAt: 2026-08-27 05:40:45 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "75b0a6db4300e4c2c9e97a0848deaa7acfb42fb7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "75b0a6db4300e4c2c9e97a0848deaa7acfb42fb7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "37488754-a4a0-4da2-b006-040dd2ba9561" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "bpf_sk_storage_map_seq_show", "bpf_sk_storage_map_seq_stop" ], "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+CgkJCTx0ZD4yMDI2LzA4LzI3IDA1OjM4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zaG93JiMzNDssCiAgICAmIzM0O2JwZl9za19zdG9yYWdlX21hcF9zZXFfc3RvcCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBOVUxMIHBvaW50ZXIgY2hlY2sgdG8gcHJldmVudCBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSB3aGVuIGFjY2Vzc2luZyBgc2tfc3RvcmFnZS1cdTAwM2Vvd25lcmAuIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgYXJlIGNhdWdodCBieSBzdGFuZGFyZCBrZXJuZWwgcGFnZSBmYXVsdCBoYW5kbGluZyBhbmQgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcywgc3VjaCBhcyByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgb3IgbGVha2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gdGhlIEJQRiBpdGVyYXRvciBmb3Igc29ja2V0IGxvY2FsIHN0b3JhZ2UgbWFwcy4gVGhlIG1vZGlmaWVkIGZ1bmN0aW9uIGBfX2JwZl9za19zdG9yYWdlX21hcF9zZXFfc2hvd2AgaXMgY2FsbGVkIHdoZW4gcmVhZGluZyBmcm9tIHRoZSBpdGVyYXRvciBzZXFfZmlsZSwgd2hpY2ggaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgYGJwZigpYCBzeXNjYWxsIGFuZCBgcmVhZCgpYC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNTozODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGVmOTA3MTNjNWI5NjE4OWY1OTgxYThkNWFiZGYxZmI4YzQ4ZDkyZDdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAyNyAwNTozODo1NiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jIGIvbmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuY1xuaW5kZXggMWQyOTVhODc2OWZhZC4uNzIyODUyMGFhMmI2ZSAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL2JwZl9za19zdG9yYWdlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2JwZl9za19zdG9yYWdlLmNcbkBAIC04MDYsNiAmIzQzOzgwNiw4IEBAIHN0YXRpYyBpbnQgX19icGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsXG4gXHRcdGN0eC5tYXAgPSBpbmZvLVx1MDAzZW1hcDtcbiBcdFx0aWYgKHNlbGVtKSB7XG4gXHRcdFx0c2tfc3RvcmFnZSA9IHJjdV9kZXJlZmVyZW5jZShzZWxlbS1cdTAwM2Vsb2NhbF9zdG9yYWdlKTtcbiYjNDM7XHRcdFx0aWYgKCFza19zdG9yYWdlKVxuJiM0MztcdFx0XHRcdHJldHVybiAwO1xuIFx0XHRcdGN0eC5zayA9IHNrX3N0b3JhZ2UtXHUwMDNlb3duZXI7XG4gXHRcdFx0Y3R4LnZhbHVlID0gU0RBVEEoc2VsZW0pLVx1MDAzZWRhdGE7XG4gXHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNTozODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3cmIzM0OywKICAgICYjMzQ7YnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zdG9wJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiB0aGUgQlBGIGl0ZXJhdG9yIGZvciBzb2NrZXQgbG9jYWwgc3RvcmFnZSBtYXBzLiBUaGUgbW9kaWZpZWQgZnVuY3Rpb24gYF9fYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zaG93YCBpcyBjYWxsZWQgd2hlbiByZWFkaW5nIGZyb20gdGhlIGl0ZXJhdG9yIHNlcV9maWxlLCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBgYnBmKClgIHN5c2NhbGwgYW5kIGByZWFkKClgLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZWY5MDcxM2M1Yjk2MTg5ZjU5ODFhOGQ1YWJkZjFmYjhjNDhkOTJkNwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgQXVnIDI3IDA1OjM4OjU2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYyBiL25ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMKaW5kZXggMWQyOTVhODc2OWZhZC4uNzIyODUyMGFhMmI2ZSAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jCkBAIC04MDYsNiAmIzQzOzgwNiw4IEBAIHN0YXRpYyBpbnQgX19icGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsCiAJCWN0eC5tYXAgPSBpbmZvLSZndDttYXA7CiAJCWlmIChzZWxlbSkgewogCQkJc2tfc3RvcmFnZSA9IHJjdV9kZXJlZmVyZW5jZShzZWxlbS0mZ3Q7bG9jYWxfc3RvcmFnZSk7CiYjNDM7CQkJaWYgKCFza19zdG9yYWdlKQomIzQzOwkJCQlyZXR1cm4gMDsKIAkJCWN0eC5zayA9IHNrX3N0b3JhZ2UtJmd0O293bmVyOwogCQkJY3R4LnZhbHVlID0gU0RBVEEoc2VsZW0pLSZndDtkYXRhOwogCQl9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA1OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMDMKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiA2NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXM6CgoqKkFuYWx5emluZyB0aGUgUHJvcG9zZWQgTnVsbCBDaGVjayBpbiBgYnBmX3NrX3N0b3JhZ2UuY2AqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBhZGRpbmcgYSBudWxsIGNoZWNrIGZvciBgc2tfc3RvcmFnZWAgd2l0aGluIHRoZSBgX19icGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3dgIGZ1bmN0aW9uIGluIGBuZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jYC4gVGhhdCBpbW1lZGlhdGVseSBtYWtlcyBtZSB0aGluaywgJiMzNDtXaHkgaXMgdGhpcyBuZWNlc3Nhcnk/JiMzNDsgTXkgZmlyc3Qgc3RlcCBpcywgb2YgY291cnNlLCB0byBqdW1wIGludG8gdGhlIGNvZGUgYW5kIHRob3JvdWdobHkgcmV2aWV3IGBfX2JwZl9za19zdG9yYWdlX21hcF9zZXFfc2hvd2AgaXRzZWxmLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93LCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGl0JiMzOTtzIG9wZXJhdGluZyBvbiwgYW5kICp3aGVyZSogYHNrX3N0b3JhZ2VgIGlzIHBvdGVudGlhbGx5IGRlcmVmZXJlbmNlZC4KCklzIHRoaXMgcmVsYXRlZCB0byBhIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbj8gSXMgdGhlcmUgYSBzdWJ0bGUgcGF0aCB3aGVyZSBgc2tfc3RvcmFnZWAgY291bGQgYmUgZnJlZWQgb3IgdW5pbml0aWFsaXplZCBiZWZvcmUgdGhpcyBmdW5jdGlvbiBnZXRzIGNhbGxlZD8gSXMgdGhpcyBqdXN0IGRlZmVuc2l2ZSBwcm9ncmFtbWluZywgb3IgZG9lcyBpdCBwb2ludCB0byBhIGRlZXBlciBpc3N1ZSBpbiB0aGUgb3duZXJzaGlwIG9yIGxpZmVjeWNsZSBvZiB0aGUgYHNrX3N0b3JhZ2VgIHBvaW50ZXI/IEkgbmVlZCB0byBhbmFseXplIHRoZSBzdXJyb3VuZGluZyBjb2RlLCB0aGUgY29udGV4dCBvZiB0aGUgY2FsbCwgYW5kIGNvbnNpZGVyIGFueSBjb25jdXJyZW50IGFjY2VzcyB0byB0aGlzIHZhcmlhYmxlLiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgYXQgd2hvIGlzIHdyaXRpbmcgdG8gdGhpcywgd2hvIGlzIHVzaW5nIGl0LCBhbmQgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgY29uY3VycmVuY3kgaXNzdWVzLgoKTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGlzIGNvdWxkIGJlIGEgcmFjZSBjb25kaXRpb24sIGEgYnVnIHdoZXJlIHRoZSBgc2tfc3RvcmFnZWAgZmllbGQgaXMgZGVyZWZlcmVuY2VkIGJ1dCBpcyBub3QgY2hlY2tlZCB0byBtYWtlIHN1cmUgdGhhdCB0aGUgbWVtb3J5IGlzbiYjMzk7dCBhbHJlYWR5IGZyZWUuIEkgd2lsbCBhbHNvIG1ha2Ugc3VyZSB0byBjaGVjayB3aGV0aGVyIHRoaXMgbnVsbCBjaGVjayBpcyByZWR1bmRhbnQuIElmIHRoZSBjb2RlIGJlZm9yZSBgX19icGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3dgIGFscmVhZHkgZW5zdXJlcyB0aGF0IGBza19zdG9yYWdlYCBpcyBub24tbnVsbCwgdGhpcyBwYXRjaCBjb3VsZCBiZSB1bm5lY2Vzc2FyeSBhbmQgaW50cm9kdWNlIHVubmVjZXNzYXJ5IG92ZXJoZWFkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA1OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zaG93JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jPTc4OD1ERUZJTkVfQlBGX0lURVJfRlVOQyhicGZfc2tfc3RvcmFnZV9tYXAsIHN0cnVjdCBicGZfaXRlcl9tZXRhICptZXRhLFxuLS1cbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtNzkxLVxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYzo3OTI6c3RhdGljIGludCBfX2JwZl9za19zdG9yYWdlX21hcF9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSxcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtNzkzLVx0XHRcdFx0XHQgc3RydWN0IGJwZl9sb2NhbF9zdG9yYWdlX2VsZW0gKnNlbGVtKVxuLS1cbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM9ODIwPXN0YXRpYyBpbnQgYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy04MjEte1xubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYzo4MjI6XHRyZXR1cm4gX19icGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3coc2VxLCB2KTtcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtODIzLX1cbi0tXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jPTgyNT1zdGF0aWMgdm9pZCBicGZfc2tfc3RvcmFnZV9tYXBfc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXG4tLVxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy04MjgtXHRpZiAoIXYpXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jOjgyOTpcdFx0KHZvaWQpX19icGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3coc2VxLCB2KTtcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtODMwLVx0ZWxzZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA1OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4ODYKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA4MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgQlBGIEl0ZXJhdG9yKioKCkFscmlnaHQsIHRoZSB0cmFpbCBsZWFkcyBtZSB0byBgX19icGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3dgLiBUaGF0JiMzOTtzIHRoZSBrZXkgZnVuY3Rpb24sIGNhbGxlZCBieSB0aGUgYGJwZl9za19zdG9yYWdlX21hcF9zZXFfc2hvd2AgYW5kIGBicGZfc2tfc3RvcmFnZV9tYXBfc2VxX3N0b3BgIGZ1bmN0aW9ucywgbWVhbmluZyBpdCYjMzk7cyB0aGUgd29ya2hvcnNlIG9mIHRoaXMgQlBGIGl0ZXJhdG9yLiBXZSYjMzk7cmUgaW4gaXRlcmF0b3IgdGVycml0b3J5LCBzcGVjaWZpY2FsbHkgd2l0aCB0aGUgYHNrX3N0b3JhZ2VfbWFwYC4gVGltZSB0byBjaGVjayBvdXQgYGJwZl9za19zdG9yYWdlLmNgLCB0aGVyZSBtaWdodCBiZSBzb21lIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIHRoYXQgSSBuZWVkIHRvIGJlIGF3YXJlIG9mLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA1OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA1OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxNjUKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIHlvdXIgc3VtbWFyeToKCioqQ2hlY2tpbmcgdGhlIE1ha2VmaWxlKioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIHRoaXMuIEZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoZSBgTWFrZWZpbGVgLiBJdCYjMzk7cyB0aGUgY2VudHJhbCBodWIgZm9yIHRoZSBidWlsZCBwcm9jZXNzLCBzbyB1bmRlcnN0YW5kaW5nIGl0cyBzdHJ1Y3R1cmUgaXMgY3J1Y2lhbCBiZWZvcmUgSSBldmVuIHRoaW5rIGFib3V0IG1ha2luZyBjaGFuZ2VzLiBJJiMzOTtsbCBuZWVkIHRvIGlkZW50aWZ5IHRoZSB0YXJnZXRzLCBkZXBlbmRlbmNpZXMsIGFuZCBydWxlcy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYW55IG9idmlvdXMgaW5lZmZpY2llbmNpZXMgb3IgcG90ZW50aWFsIGJvdHRsZW5lY2tzIGluIHRoZSBidWlsZCBwcm9jZXNzLCBwYXJ0aWN1bGFybHkgYW55dGhpbmcgdGhhdCBtaWdodCBiZSB1bm5lY2Vzc2FyaWx5IHJlLWNvbXBpbGluZyBvciByZS1saW5raW5nLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGlzIHRoaW5nIGlzIGFjdHVhbGx5IHB1dCB0b2dldGhlciAtIGhvdyBhcmUgdGhlIG9iamVjdCBmaWxlcyBnZW5lcmF0ZWQ/IFdoYXQmIzM5O3MgdGhlIGxpbmtpbmcgY29tbWFuZD8gQXJlIHRoZXJlIGFueSBjbGV2ZXIgdHJpY2tzIG9yIG9wdGltaXNhdGlvbnMgYWxyZWFkeSBpbiBwbGFjZSwgb3IgaXMgaXQgYWxsIGEgYml0IHJ1ZGltZW50YXJ5PyBUaW1lIHRvIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzIGFuZCBhc3Nlc3MgaG93IHJvYnVzdCBhbmQgbWFpbnRhaW5hYmxlIHRoaXMgYnVpbGQgc3lzdGVtIGlzLiBHb3R0YSBiZSBlZmZpY2llbnQgaGVyZSAtIEkmIzM5O20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgYXJlYXMgd2hlcmUgSSYjMzk7bGwgc2VlIG9wcG9ydHVuaXRpZXMgZm9yIG9wdGltaXNhdGlvbiBvciByZWZhY3RvcmluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNTozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfc2tfc3RvcmFnZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL01ha2VmaWxlPTQ1PW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IHNvY2tfbWFwLm9cbm5ldC9jb3JlL01ha2VmaWxlOjQ2Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGJwZl9za19zdG9yYWdlLm9cbm5ldC9jb3JlL01ha2VmaWxlLTQ3LWlmZGVmIENPTkZJR19JTkVUXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDU6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQ4NQoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDg1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQgaW4gdGhlIGZpZWxkOgoKKipEaXZpbmcgaW50byB0aGUgQlBGIFNrX1N0b3JhZ2UgSW1wbGVtZW50YXRpb24qKgoKUmlnaHQsIHNvIHRoaXMgYmVoYXZpb3IgY2xlYXJseSBoaW5nZXMgb24gdGhlIGBDT05GSUdfQlBGX1NZU0NBTExgIHNldHRpbmcuIFRoYXQmIzM5O3MgdGhlIGJhc2VsaW5lLCBvZiBjb3Vyc2UsIGJ1dCB3aGF0JiMzOTtzIHRoZSBhY3R1YWwgaW1wbGVtZW50YXRpb24gZG9pbmc/IEkgbm90aWNlZCBgX19icGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3dgIGlzIGRlY2xhcmVkIGFzIHN0YXRpYywgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIEl0JiMzOTtzIGVzc2VudGlhbGx5IGFuIGludGVybmFsIGRldGFpbC4gQnV0IGl0IGlzIGNhbGxlZCBieSBgYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zaG93YCBhbmQgYGJwZl9za19zdG9yYWdlX21hcF9zZXFfc3RvcGAuIEJvdGggb2YgdGhvc2UgZnVuY3Rpb25zIGFyZSBvYnZpb3VzbHkgcHVibGljIGVudHJ5IHBvaW50cy4gU28gSSYjMzk7bGwgZ28gaGF2ZSBhIGxvb2sgYXJvdW5kIHRvIHNlZSBpZiB0aGVyZSBhcmUgbm9uLXN0YXRpYyBmdW5jdGlvbiBkZWZpbml0aW9ucyB0byBiZXR0ZXIgZ3Jhc3AgdGhlIGludGVudC4gV2hlcmUgYXJlIHRoZSBlbnRyeSBwb2ludHM/CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA1OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9za19zdG9yYWdlX21hcF9zZXFfc2hvdyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYz03ODg9REVGSU5FX0JQRl9JVEVSX0ZVTkMoYnBmX3NrX3N0b3JhZ2VfbWFwLCBzdHJ1Y3QgYnBmX2l0ZXJfbWV0YSAqbWV0YSxcbi0tXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jLTc5MS1cbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM6NzkyOnN0YXRpYyBpbnQgX19icGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jLTc5My1cdFx0XHRcdFx0IHN0cnVjdCBicGZfbG9jYWxfc3RvcmFnZV9lbGVtICpzZWxlbSlcbi0tXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jLTgxOS1cbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM6ODIwOnN0YXRpYyBpbnQgYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy04MjEte1xubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYzo4MjI6XHRyZXR1cm4gX19icGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3coc2VxLCB2KTtcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtODIzLX1cbi0tXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jPTgyNT1zdGF0aWMgdm9pZCBicGZfc2tfc3RvcmFnZV9tYXBfc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXG4tLVxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy04MjgtXHRpZiAoIXYpXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jOjgyOTpcdFx0KHZvaWQpX19icGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3coc2VxLCB2KTtcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtODMwLVx0ZWxzZVxuLS1cbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM9ODg2PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9vcHMgPSB7XG4tLVxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy04ODktXHQuc3RvcCAgID0gYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zdG9wLFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYzo4OTA6XHQuc2hvdyAgID0gYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zaG93LFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy04OTEtfTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDU6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDM0OQoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBmaXJzdC1wZXJzb24gZXhwZXJ0IHN1bW1hcnk6CgoqKkRpZ2dpbmcgaW50byB0aGUgQlBGIFNvY2tldCBTdG9yYWdlIE1hcCBTZXF1ZW5jZSBPcGVyYXRpb25zKioKCkFscmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBmdW5jdGlvbnMsIGFuZCB0aGV5JiMzOTtyZSBzdGF0aWMgbWVtYmVycyBvZiBgYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9vcHNgLiBUaGF0JiMzOTtzIHRoZSBrZXkgaGVyZS4gVGhpcyBtZWFucyB0aGV5IGFyZSBsaWtlbHkgc3BlY2lmaWMgdG8gaG93IHRoaXMgcGFydGljdWxhciBtYXAgdHlwZSBiZWhhdmVzIHdpdGhpbiB0aGUgQlBGIGZyYW1ld29yay4gTXkgbmV4dCBpbW1lZGlhdGUgdGhvdWdodCBpczogd2hlcmUgaXMgdGhpcyBgYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9vcHNgIHN0cnVjdCAqYWN0dWFsbHkqIHVzZWQ/IFVuZGVyc3RhbmRpbmcgdGhlIGNhbGwgc2l0ZXMgd2lsbCBiZSBjcnVjaWFsLiBJdCYjMzk7bGwgZ2l2ZSBtZSBjb250ZXh0IG9uIGhvdyB0aGVzZSBzcGVjaWZpYyBmdW5jdGlvbnMgYXJlIGludm9rZWQgYW5kIHdoYXQgZXZlbnRzIHRyaWdnZXIgdGhlaXIgZXhlY3V0aW9uLiBLbm93aW5nIHRoZSB1c2FnZSB3aWxsIGNsYXJpZnkgdGhlIHB1cnBvc2UgYW5kIGJlaGF2aW9yIG9mIHRoZSBmdW5jdGlvbnMgSSYjMzk7bSBsb29raW5nIGF0LiBJIG5lZWQgdG8gdHJhY2UgdGhlIHJlZmVyZW5jZXMgYW5kIHVuZGVyc3RhbmQgdGhlIGV4ZWN1dGlvbiBmbG93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNTozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfc2tfc3RvcmFnZV9tYXBfc2VxX29wcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYz04ODE9c3RhdGljIHZvaWQgYnBmX2l0ZXJfZGV0YWNoX21hcChzdHJ1Y3QgYnBmX2l0ZXJfYXV4X2luZm8gKmF1eClcbi0tXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jLTg4NS1cbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM6ODg2OnN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9vcHMgPSB7XG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jLTg4Ny1cdC5zdGFydCAgPSBicGZfc2tfc3RvcmFnZV9tYXBfc2VxX3N0YXJ0LFxuLS1cbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM9ODkzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2l0ZXJfc2VxX2luZm8gaXRlcl9zZXFfaW5mbyA9IHtcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM6ODk0Olx0LnNlcV9vcHNcdFx0PSBcdTAwMjZicGZfc2tfc3RvcmFnZV9tYXBfc2VxX29wcyxcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtODk1LVx0LmluaXRfc2VxX3ByaXZhdGVcdD0gYnBmX2l0ZXJfaW5pdF9za19zdG9yYWdlX21hcCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDU6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDg4MgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipNeSBMaW5lIG9mIFJlYXNvbmluZyB3aXRoIGBpdGVyX3NlcV9pbmZvYCoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGBpdGVyX3NlcV9pbmZvYC4gU3BlY2lmaWNhbGx5LCBJIHNlZSBpdCYjMzk7cyBlbXBsb3llZCB3aXRoaW4gYGJwZl9za19zdG9yYWdlX21hcF9pdGVyX2F0dGFjaF90YXJnZXRgLiBUaGF0IGltbWVkaWF0ZWx5IGNsaWNrcyBhIGZldyB0aGluZ3MgaW50byBwbGFjZS4KCktub3dpbmcgdGhhdCBmdW5jdGlvbiwgSSYjMzk7bSBhbHJlYWR5IHZpc3VhbGl6aW5nIHRoZSBjb250ZXh0LiBgYnBmX3NrX3N0b3JhZ2VfbWFwX2l0ZXJfYXR0YWNoX3RhcmdldGAgaXMgYWxsIGFib3V0IGl0ZXJhdGluZyB0aHJvdWdoIHNvbWV0aGluZyAobGlrZWx5IGEgbWFwIHN0b3Jpbmcgc29ja2V0LXJlbGF0ZWQgZGF0YSkgYW5kLCBjcnVjaWFsbHksICphdHRhY2hpbmcqIGEgdGFyZ2V0LiBUaGF0ICYjMzQ7dGFyZ2V0JiMzNDsgY291bGQgYmUgYSBCUEYgcHJvZ3JhbSwgYSBzcGVjaWZpYyBob29rLCBvciBzb21ldGhpbmcgc2ltaWxhciDigJMgaXQmIzM5O3MgdGhlIHBvaW50IG9mIHRoZSBpdGVyYXRpb24uCgpTbywgYGl0ZXJfc2VxX2luZm9gIGhhcyB0byBiZSBjcnVjaWFsIGluIGhlbHBpbmcgbWFuYWdlIHRoZSBzdGF0ZSBvZiBpdGVyYXRpb24gd2hlbiB0aGUgQlBGIHByb2dyYW0gZ29lcyB0byBhY2Nlc3MgdGhlIHN0b3JhZ2Ugb2YgYSBzcGVjaWZpYyBzb2NrZXQuIEl0JiMzOTtzIGFsbW9zdCBjZXJ0YWluIGl0IHRyYWNrcyB0aGUgY3VycmVudCBwb3NpdGlvbiwgbWF5YmUgYSBrZXkgdG8gbG9vayBhdCB0aGUgc3RvcmFnZSYjMzk7cyBtYXAuIFByb2JhYmx5IGl0IG1haW50YWlucyBlbm91Z2ggY29udGV4dCBzbyB0aGF0IHRoZSBCUEYgcHJvZ3JhbSBrbm93cyBob3cgdG8gbG9vayB1cCwgYWNjZXNzLCBhbmQgdXBkYXRlIHRoZSBhc3NvY2lhdGVkIHNvY2tldCBzdG9yYWdlLgoKVGhlICYjMzk7c2VxJiMzOTsgcGFydCBzdWdnZXN0cyBhbiBvcmRlcmVkIHNlcXVlbmNlLCBsaWtlbHkgcG9pbnRpbmcgdG8gc29tZSBzb3J0ZWQgbmF0dXJlIG9mIHRoZSBzdG9yYWdlIGJlaW5nIGl0ZXJhdGVkIG92ZXIuIFRoaXMgaGFzIHRvIGluZm9ybSB0aGUgQlBGIHByb2dyYW0gb2Ygd2hlcmUgaXQgaXMgaW4gdGhlIGl0ZXJhYmxlIHN0YXRlLCBhbmQgaG93IGl0IGlzIHVwZGF0ZWQgb24gbmV4dCBpdGVyYXRpb25zLiBJdCBjb3VsZCBiZSBpbmRleGluZyBpbnRvIGEgaGFzaCB0YWJsZSBvciBhIG1vcmUgY29tcGxleCBvcmRlcmVkIGRhdGEgc3RydWN0dXJlLgoKVGhpcyB3aG9sZSBwaWN0dXJlIHJlaW5mb3JjZXMgdGhhdCB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGEgc29waGlzdGljYXRlZCBtZWNoYW5pc20gdG8gaXRlcmF0ZSB0aHJvdWdoIGFuZCBhcHBseSBvcGVyYXRpb25zIHRvIG5ldHdvcmsgc29ja2V0cywgbGlrZWx5IHdpdGhpbiB0aGUgQlBGIGNvbnRleHQuIEFuZCBgaXRlcl9zZXFfaW5mb2AgaXMgYSBjb3JlIHBpZWNlIG9mIHRoYXQgcHV6emxlLiBNeSBuZXh0IHRob3VnaHQgd291bGQgYmUgdG8gZGlnIGludG8gaG93IHRoaXMgaXMgaW5pdGlhbGl6ZWQgYW5kIHVwZGF0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA1OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2l0ZXJfc2VxX2luZm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM9ODg2PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9vcHMgPSB7XG4tLVxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy04OTItXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jOjg5MzpzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9pdGVyX3NlcV9pbmZvIGl0ZXJfc2VxX2luZm8gPSB7XG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jLTg5NC1cdC5zZXFfb3BzXHRcdD0gXHUwMDI2YnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9vcHMsXG4tLVxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYz05MDA9c3RhdGljIHN0cnVjdCBicGZfaXRlcl9yZWcgYnBmX3NrX3N0b3JhZ2VfbWFwX3JlZ19pbmZvID0ge1xuLS1cbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtOTEyLVx0fSxcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM6OTEzOlx0LnNlcV9pbmZvXHRcdD0gXHUwMDI2aXRlcl9zZXFfaW5mbyxcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtOTE0LX07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA1OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU1OTMKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBkZWVwIGluIHRoZSB3ZWVkcyBvZiBlQlBGIGFuZCBrZXJuZWwgaW50ZXJuYWxzOgoKKiplQlBGIFNrX1N0b3JhZ2UgTWFwIFJlZ2lzdHJhdGlvbioqCgpSaWdodCwgc28gYGJwZl9za19zdG9yYWdlX21hcF9yZWdfaW5mb2AuIFRoYXQmIzM5O3MgdGhlIHJlZ2lzdHJhdGlvbiBzdHJ1Y3R1cmUgZm9yIHRoZSBza19zdG9yYWdlIG1hcC4gQW5kIEkgc2VlIHRoYXQgaXQmIzM5O3MgYmVpbmcgcmVnaXN0ZXJlZCBkdXJpbmcgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBgYnBmX3NrX3N0b3JhZ2VfbWFwX2l0ZXJgLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIGdldHRpbmcgc2V0IHVwIHdoZW4gYGJwZl9za19zdG9yYWdlX21hcF9pdGVyX2luaXRgIGlzIGNhbGxlZC4gVGhhdCBtYWtlcyBwZXJmZWN0IHNlbnNlLiBUaGUgaXRlcmF0b3IgbGlrZWx5IG5lZWRzIHRoYXQgcmVnaXN0cmF0aW9uIGluZm9ybWF0aW9uIHRvIGZ1bmN0aW9uIGNvcnJlY3RseSwgbGV0dGluZyBpdCBrbm93IGhvdyB0byBpbnRlcmFjdCB3aXRoIHRoZSBza19zdG9yYWdlIG1hcCBkdXJpbmcgaXRlcmF0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIHRoYXQgd2hlbiBJJiMzOTttIGRlYnVnZ2luZyBvciBleHRlbmRpbmcgdGhlIG1hcCYjMzk7cyBiZWhhdmlvdXIgbGF0ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA1OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9za19zdG9yYWdlX21hcF9yZWdfaW5mbyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYz04OTM9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfaXRlcl9zZXFfaW5mbyBpdGVyX3NlcV9pbmZvID0ge1xuLS1cbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtODk5LVxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYzo5MDA6c3RhdGljIHN0cnVjdCBicGZfaXRlcl9yZWcgYnBmX3NrX3N0b3JhZ2VfbWFwX3JlZ19pbmZvID0ge1xubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy05MDEtXHQudGFyZ2V0XHRcdFx0PSBcJiMzNDticGZfc2tfc3RvcmFnZV9tYXBcJiMzNDssXG4tLVxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYz05MTY9c3RhdGljIGludCBfX2luaXQgYnBmX3NrX3N0b3JhZ2VfbWFwX2l0ZXJfaW5pdCh2b2lkKVxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy05MTcte1xubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYzo5MTg6XHRicGZfc2tfc3RvcmFnZV9tYXBfcmVnX2luZm8uY3R4X2FyZ19pbmZvWzBdLmJ0Zl9pZCA9XG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jLTkxOS1cdFx0YnRmX3NvY2tfaWRzW0JURl9TT0NLX1RZUEVfU09DS107XG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jOjkyMDpcdHJldHVybiBicGZfaXRlcl9yZWdfdGFyZ2V0KFx1MDAyNmJwZl9za19zdG9yYWdlX21hcF9yZWdfaW5mbyk7XG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jLTkyMS19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA1OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYxODEKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxOTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgQlBGIEl0ZXJhdG9yIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBhIEJQRiBpdGVyYXRvciBkZXNpZ25lZCBmb3IgdGhlIGBicGZfc2tfc3RvcmFnZV9tYXBgLiBUaGUga2V5IHRoaW5nIGhlcmUgaXMgdGhlIGFkZGl0aW9uIG9mIGEgbnVsbCBjaGVjayBmb3IgYHNrX3N0b3JhZ2VgLiBJdCYjMzk7cyBwcm90ZWN0aW5nIGFnYWluc3QgYSBkZXJlZmVyZW5jZSBmcm9tIGBzZWxlbS0mZ3Q7bG9jYWxfc3RvcmFnZWAsIHdoaWNoIGlzIGEgc21hcnQgbW92ZSDigJMgYSBjbGFzc2ljIHBvdGVudGlhbCBudWxsIHBvaW50ZXIgdnVsbmVyYWJpbGl0eS4gRnVuY3Rpb25hbGx5LCBpdCYjMzk7cyBhIHNvbGlkIGZpeCwgYSBkZWZpbml0ZSBpbXByb3ZlbWVudC4gRGVmaW5pdGVseSBmdXp6LXdvcnRoeS4KClRoZSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIHRhcmdldCBzeW1ib2xzIGxpa2UgYGJwZl9pdGVyX3JlZ190YXJnZXRgIG9yIG1heWJlIGV2ZW4gdGhlIEJQRiBzeXNjYWxsIGVudHJ5LCBidXQgbXkgZ29hbCBpcyB0byBzdGF5IGF3YXkgZnJvbSBob3QgcGF0aHMuIFRoaXMgcGF0Y2ggaXMgYWJvdXQgYSBwb3RlbnRpYWwgY3Jhc2gsIGFuZCBob3QgcGF0aHMgYXJlIHByb2JhYmx5IGxlc3MgbGlrZWx5IHRvIGV4cG9zZSBpdCBpbiBwcmFjdGljZS4KCkhhbmcgb24uLi4gYGJwZl9za19zdG9yYWdlX21hcF9zZXFfc2hvd2AgaXMgc3RhdGljLCB3aGljaCBpcyB1c3VhbGx5IG5vdCBpZGVhbCwgYnV0IGl0JiMzOTtzICpjYWxsZWQqIHdoZW4gcmVhZGluZyBmcm9tIHRoZSBpdGVyYXRvciYjMzk7cyBzZXFfZmlsZS4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZywgYW5kIHdvcnRoIGRpZ2dpbmcgaW50by4gTGV0JiMzOTtzIHNlZS4uLiBUaGUgaXRlcmF0b3ImIzM5O3Mgc2VxX2ZpbGUgaXMgY3JlYXRlZCBieSBgYnBmX2l0ZXJfY3JlYXRlYCBhbmQgcmVhZCB2aWEgdGhlIHN0YW5kYXJkIGB2ZnNfcmVhZGAgLSZndDsgYHNlcV9yZWFkYCBwYXRoLiBTbyBpdCYjMzk7cyBzdGlsbCBiZWluZyBleHBvc2VkLCBpZiBsZXNzIGRpcmVjdGx5LgoKSG1tLCBva2F5LiBMZXQgbWUgc2VlIGlmIHRoZXJlJiMzOTtzIGFueXRoaW5nIG5vbi1zdGF0aWMgaW4gYG5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmNgIHRoYXQgY291bGQgYmUgYSBiZXR0ZXIgZm9jYWwgcG9pbnQgZm9yIGZ1enppbmcuIFBlcmhhcHMgc29tZXRoaW5nIHJlbGF0ZWQgdG8gdGhlIGluaXRpYWwgc2V0dXAsIG9yIGNsZWFudXAsIHJhdGhlciB0aGFuIGp1c3QgdGhlIHNlcV9maWxlIGRpc3BsYXkuIEkmIzM5O2xsIG5lZWQgdG8gcmV2aWV3IHRoZSBjb2RlIHRvIGlkZW50aWZ5IG90aGVyIHBvdGVudGlhbCBlbnRyeSBwb2ludHMgZm9yIHRoaXMgbWFwIGFuZCBpdGVyYXRvciBsb2dpYy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDU6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XmludCAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM9MTM0PWJwZl9za19zdG9yYWdlX2Nsb25lX2VsZW0oc3RydWN0IHNvY2sgKm5ld3NrLFxuLS1cbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtMTUzLVxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYzoxNTQ6aW50IGJwZl9za19zdG9yYWdlX2Nsb25lKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKm5ld3NrKVxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy0xNTUte1xuLS1cbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM9NTY4PXN0YXRpYyBpbnQgYnBmX3NrX3N0b3JhZ2VfZGlhZ19wdXRfYWxsKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jLTYyMy1cbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM6NjI0OmludCBicGZfc2tfc3RvcmFnZV9kaWFnX3B1dChzdHJ1Y3QgYnBmX3NrX3N0b3JhZ2VfZGlhZyAqZGlhZyxcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtNjI1LVx0XHRcdCAgICBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA1OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcwMzYKCQkJCQkJCW91dHB1dDogNDcKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBcHByb2FjaCB0byBJZGVudGlmeWluZyBOb24tU3RhdGljIEZ1bmN0aW9ucyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSBpZiB0aGVyZSBhcmUgYW55IG5vbi1zdGF0aWMgZnVuY3Rpb25zIGhhbmdpbmcgYXJvdW5kIGluIHRoZSBjb2RlLiBNeSBnby10byBzdHJhdGVneSBoZXJlIGlzIHRvIGxldmVyYWdlIHRoZSBwYXR0ZXJucyBJIGtub3cgYXJlIGxpa2VseSB0byBiZSBwcmVzZW50LiBJJiMzOTttIGdvaW5nIHRvIHNjYW4gdGhlIGNvZGUgZm9yIHRoZSBjb21tb24gcHJlZml4ZXMgdGhhdCBvZnRlbiBwcmVjZWRlIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucywgc3BlY2lmaWNhbGx5IHRoaW5ncyBsaWtlIGBedm9pZCBgLCBgXnN0cnVjdCBgLCBvciBgXnN0YXRpYyBgLiBUaGlua2luZyBvdXQgbG91ZCwgSSBjYW4gcXVpY2tseSBzY2FuIGZvciB0aGVzZSBwYXR0ZXJucy4gQnkgdXNpbmcgdGhlc2UgcHJlZml4ZXMsIEkgY2FuIGZpbHRlciBvdXQgdGhlIGZ1bmN0aW9ucyBJJiMzOTttIG5vdCBsb29raW5nIGZvci4gVGhpcyBzaG91bGQgZWZmaWNpZW50bHkgaWRlbnRpZnkgdGhvc2UgZnVuY3Rpb25zIHdpdGhvdXQgdGhlIGBzdGF0aWNgIGtleXdvcmQsIGhlbHBpbmcgbWUgaG9uZSBpbiBvbiB0aGUgZXhhY3QgYml0cyBvZiBjb2RlIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBmdXJ0aGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNTozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteW2EtekEtWl9dLiogYnBmX3NrX3N0b3JhZ2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM9MjE9YnBmX3NrX3N0b3JhZ2VfbG9va3VwKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGJwZl9tYXAgKm1hcCwgYm9vbCBjYWNoZWl0X2xvY2tpdClcbi0tXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jLTM0LVxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYzozNTpzdGF0aWMgaW50IGJwZl9za19zdG9yYWdlX2RlbChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBicGZfbWFwICptYXApXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jLTM2LXtcbi0tXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jLTQ2LS8qIENhbGxlZCBieSBfX3NrX2Rlc3RydWN0KCkgXHUwMDI2IGJwZl9za19zdG9yYWdlX2Nsb25lKCkgKi9cbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM6NDc6dm9pZCBicGZfc2tfc3RvcmFnZV9mcmVlKHN0cnVjdCBzb2NrICpzaylcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtNDgte1xuLS1cbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtNjMtXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jOjY0OnN0YXRpYyB2b2lkIGJwZl9za19zdG9yYWdlX21hcF9mcmVlKHN0cnVjdCBicGZfbWFwICptYXApXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jLTY1LXtcbi0tXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jPTEzND1icGZfc2tfc3RvcmFnZV9jbG9uZV9lbGVtKHN0cnVjdCBzb2NrICpuZXdzayxcbi0tXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jLTE1My1cbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM6MTU0OmludCBicGZfc2tfc3RvcmFnZV9jbG9uZShjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICpuZXdzaylcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtMTU1LXtcbi0tXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jPTI2Mj1CUEZfQ0FMTF8yKGJwZl9za19zdG9yYWdlX2RlbGV0ZSwgc3RydWN0IGJwZl9tYXAgKiwgbWFwLCBzdHJ1Y3Qgc29jayAqLCBzaylcbi0tXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jLTI3OC1cbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM6Mjc5OnN0YXRpYyBpbnQgYnBmX3NrX3N0b3JhZ2VfY2hhcmdlKHN0cnVjdCBicGZfbG9jYWxfc3RvcmFnZV9tYXAgKnNtYXAsXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jLTI4MC1cdFx0XHRcdCB2b2lkICpvd25lciwgdTMyIHNpemUpXG4tLVxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy0yOTUtXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jOjI5NjpzdGF0aWMgdm9pZCBicGZfc2tfc3RvcmFnZV91bmNoYXJnZShzdHJ1Y3QgYnBmX2xvY2FsX3N0b3JhZ2VfbWFwICpzbWFwLFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy0yOTctXHRcdFx0XHQgICAgdm9pZCAqb3duZXIsIHUzMiBzaXplKVxuLS1cbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM9MzEyPWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBza19zdG9yYWdlX21hcF9vcHMgPSB7XG4tLVxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy0zMjgtXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jOjMyOTpjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrX3N0b3JhZ2VfZ2V0X3Byb3RvID0ge1xubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy0zMzAtXHQuZnVuY1x0XHQ9IGJwZl9za19zdG9yYWdlX2dldCxcbi0tXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jLTMzOC1cbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM6MzM5OmNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tfc3RvcmFnZV9nZXRfY2dfc29ja19wcm90byA9IHtcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtMzQwLVx0LmZ1bmNcdFx0PSBicGZfc2tfc3RvcmFnZV9nZXQsXG4tLVxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy0zNDgtXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jOjM0OTpjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrX3N0b3JhZ2VfZGVsZXRlX3Byb3RvID0ge1xubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy0zNTAtXHQuZnVuY1x0XHQ9IGJwZl9za19zdG9yYWdlX2RlbGV0ZSxcbi0tXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jLTM1Ni1cbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM6MzU3OnN0YXRpYyBib29sIGJwZl9za19zdG9yYWdlX3RyYWNpbmdfYWxsb3dlZChjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jLTM1OC17XG4tLVxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYz0zOTM9QlBGX0NBTExfMihicGZfc2tfc3RvcmFnZV9kZWxldGVfdHJhY2luZywgc3RydWN0IGJwZl9tYXAgKiwgbWFwLFxuLS1cbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtNDAyLVxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYzo0MDM6Y29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za19zdG9yYWdlX2dldF90cmFjaW5nX3Byb3RvID0ge1xubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy00MDQtXHQuZnVuY1x0XHQ9IGJwZl9za19zdG9yYWdlX2dldF90cmFjaW5nLFxuLS1cbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtNDE0LVxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYzo0MTU6Y29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za19zdG9yYWdlX2RlbGV0ZV90cmFjaW5nX3Byb3RvID0ge1xubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy00MTYtXHQuZnVuY1x0XHQ9IGJwZl9za19zdG9yYWdlX2RlbGV0ZV90cmFjaW5nLFxuLS1cbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtNDI0LVxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYzo0MjU6c3RydWN0IGJwZl9za19zdG9yYWdlX2RpYWcge1xubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy00MjYtXHR1MzIgbnJfbWFwcztcbi0tXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jPTQ0MD1zdGF0aWMgaW50IG5sYV92YWx1ZV9zaXplKHUzMiB2YWx1ZV9zaXplKVxuLS1cbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtNDQ5LVxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYzo0NTA6dm9pZCBicGZfc2tfc3RvcmFnZV9kaWFnX2ZyZWUoc3RydWN0IGJwZl9za19zdG9yYWdlX2RpYWcgKmRpYWcpXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jLTQ1MS17XG4tLVxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYz00NjI9RVhQT1JUX1NZTUJPTF9HUEwoYnBmX3NrX3N0b3JhZ2VfZGlhZ19mcmVlKTtcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtNDYzLVxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYzo0NjQ6c3RhdGljIGJvb2wgZGlhZ19jaGVja19kdXAoY29uc3Qgc3RydWN0IGJwZl9za19zdG9yYWdlX2RpYWcgKmRpYWcsXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jLTQ2NS1cdFx0XHQgICBjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwKVxuLS1cbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtNDc2LVxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYzo0Nzc6c3RydWN0IGJwZl9za19zdG9yYWdlX2RpYWcgKlxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy00NzgtYnBmX3NrX3N0b3JhZ2VfZGlhZ19hbGxvYyhjb25zdCBzdHJ1Y3QgbmxhdHRyICpubGFfc3Rncylcbi0tXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jPTUzMj1zdGF0aWMgaW50IGRpYWdfZ2V0KHN0cnVjdCBicGZfbG9jYWxfc3RvcmFnZV9tYXAgKnNtYXAsXG4tLVxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy01NjctXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jOjU2ODpzdGF0aWMgaW50IGJwZl9za19zdG9yYWdlX2RpYWdfcHV0X2FsbChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jLTU2OS1cdFx0XHRcdCAgICAgICBpbnQgc3RnX2FycmF5X3R5cGUsXG4tLVxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy02MjMtXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jOjYyNDppbnQgYnBmX3NrX3N0b3JhZ2VfZGlhZ19wdXQoc3RydWN0IGJwZl9za19zdG9yYWdlX2RpYWcgKmRpYWcsXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jLTYyNS1cdFx0XHQgICAgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM9NzkyPXN0YXRpYyBpbnQgX19icGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsXG4tLVxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy04MTktXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jOjgyMDpzdGF0aWMgaW50IGJwZl9za19zdG9yYWdlX21hcF9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdilcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtODIxLXtcbi0tXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jLTgyNC1cbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM6ODI1OnN0YXRpYyB2b2lkIGJwZl9za19zdG9yYWdlX21hcF9zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdilcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtODI2LVx0X19yZWxlYXNlcyhSQ1UpXG4tLVxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYz04ODE9c3RhdGljIHZvaWQgYnBmX2l0ZXJfZGV0YWNoX21hcChzdHJ1Y3QgYnBmX2l0ZXJfYXV4X2luZm8gKmF1eClcbi0tXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jLTg4NS1cbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM6ODg2OnN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9vcHMgPSB7XG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jLTg4Ny1cdC5zdGFydCAgPSBicGZfc2tfc3RvcmFnZV9tYXBfc2VxX3N0YXJ0LFxuLS1cbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM9ODkzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2l0ZXJfc2VxX2luZm8gaXRlcl9zZXFfaW5mbyA9IHtcbi0tXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jLTg5OS1cbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM6OTAwOnN0YXRpYyBzdHJ1Y3QgYnBmX2l0ZXJfcmVnIGJwZl9za19zdG9yYWdlX21hcF9yZWdfaW5mbyA9IHtcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtOTAxLVx0LnRhcmdldFx0XHRcdD0gXCYjMzQ7YnBmX3NrX3N0b3JhZ2VfbWFwXCYjMzQ7LFxuLS1cbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtOTE1LVxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYzo5MTY6c3RhdGljIGludCBfX2luaXQgYnBmX3NrX3N0b3JhZ2VfbWFwX2l0ZXJfaW5pdCh2b2lkKVxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy05MTcte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNTozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NzExCgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMzM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgdGhlIEJQRiBza19zdG9yYWdlIE1hcCBJdGVyYXRvcioqCgpPa2F5LCBzbyBJJiMzOTttIHRhY2tsaW5nIGhvdyB0byBmdXp6IHRoZSBgYnBmX3NrX3N0b3JhZ2VfbWFwYCBpdGVyYXRvci4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyByZWdpc3RlcmVkIHRocm91Z2ggYGJwZl9pdGVyX3JlZ190YXJnZXRgLCB3aGljaCBnaXZlcyBtZSBhIHN0YXJ0aW5nIHBvaW50LiBUbyB0cmlnZ2VyIHRoaXMgd2l0aCBzeXprYWxsZXIsIHRoZSBjb3JlIGlkZWEgaXMgdG8gY3JlYXRlIGEgQlBGIGl0ZXJhdG9yIGZvciB0aGlzIG1hcCB0eXBlIGFuZCB0aGVuIHJlYWQgZnJvbSBpdC4gVGhhdCBtZWFucyBJJiMzOTttIGxvb2tpbmcgYXQgYGJwZihCUEZfSVRFUl9DUkVBVEUpYCBhbmQgdGhlbiBhIGByZWFkKClgIHN5c2NhbGwuIFN0cmFpZ2h0Zm9yd2FyZC4KClRoZSBmdW5jdGlvbiB0aGF0IGFjdHVhbGx5IGhhbmRsZXMgdGhlIHNob3dpbmcgb2YgdGhlIGRhdGEgaXMgYGJwZl9za19zdG9yYWdlX21hcF9zZXFfc2hvd2AuIE5vdywgdGhlIHRyaWNreSBwYXJ0IGlzIHN5bWJvbCBleHBvc3VyZSBmb3Igc3l6a2FsbGVyLiAgSSBpbml0aWFsbHkgdGhvdWdodCBhYm91dCBpbmNsdWRpbmcgYGJwZl9pdGVyX3JlZ190YXJnZXRgIGluIHRoZSBgRm9jdXNTeW1ib2xzYCwgYnV0IHRoYXQmIzM5O3MgYW4gaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24uICBUaGVuIEkgY29uc2lkZXJlZCBgYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zaG93YCwgZXZlbiB0aG91Z2ggaXQmIzM5O3Mgc3RhdGljLiBUaGUgcHJvbXB0IHNheXMgdG8gZmF2b3Igbm9uLXN0YXRpYyBmdW5jdGlvbnMsIGFzIHN0YXRpYyBmdW5jdGlvbnMgKm1pZ2h0KiBiZSBpbmxpbmVkLgoKSG93ZXZlciwgYSBjbG9zZXIgbG9vayBhdCB0aGUgY29kZSByZXZlYWxzIGEgbnVhbmNlLiBUaGUgYWRkcmVzcyBvZiBgYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zaG93YCAqaXMqIHRha2VuIHdpdGhpbiBgYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9vcHNgLCBzbyBpdCBwcm9iYWJseSB3b24mIzM5O3QgYmUgaW5saW5lZC4gQnV0IHdhaXQsIHRoZSBrZXkgcGhyYXNlIGlzICYjMzQ7bm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zJiMzNDsuIEFtIEkgbWlzc2luZyBhIGhpZ2hlci1sZXZlbCBlbnRyeXBvaW50PwoKQmluZ28hICBUaGUgYWN0dWFsIGVudHJ5cG9pbnQgdG8gdGhlIHVzZXItc3BhY2UgaW50ZXJmYWNlIGlzIGBzZXFfcmVhZGAsIHdoaWNoIGV2ZW50dWFsbHkgY2FsbHMgdGhhdCBgLSZndDtzaG93YCBmdW5jdGlvbi4gU28sIGluc3RlYWQgb2YgZGlyZWN0bHkgdGFyZ2V0aW5nIGEgc3RhdGljIGhlbHBlciwgSSBzaG91bGQgYmUgbG9va2luZyBhdCBgc2VxX3JlYWRgLiBOb3cgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgc2VxX3JlYWRgIGlzIGF2YWlsYWJsZSB0byB0aGUgZnV6emVyLiBMZXQmIzM5O3MgZGl2ZSBpbnRvIGBuZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jYCBhZ2Fpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDU6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zaG93JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jPTc4OD1ERUZJTkVfQlBGX0lURVJfRlVOQyhicGZfc2tfc3RvcmFnZV9tYXAsIHN0cnVjdCBicGZfaXRlcl9tZXRhICptZXRhLFxuLS1cbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtNzkxLVxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYzo3OTI6c3RhdGljIGludCBfX2JwZl9za19zdG9yYWdlX21hcF9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSxcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtNzkzLVx0XHRcdFx0XHQgc3RydWN0IGJwZl9sb2NhbF9zdG9yYWdlX2VsZW0gKnNlbGVtKVxuLS1cbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtODE5LVxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYzo4MjA6c3RhdGljIGludCBicGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jLTgyMS17XG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jOjgyMjpcdHJldHVybiBfX2JwZl9za19zdG9yYWdlX21hcF9zZXFfc2hvdyhzZXEsIHYpO1xubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy04MjMtfVxuLS1cbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM9ODI1PXN0YXRpYyB2b2lkIGJwZl9za19zdG9yYWdlX21hcF9zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdilcbi0tXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jLTgyOC1cdGlmICghdilcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM6ODI5Olx0XHQodm9pZClfX2JwZl9za19zdG9yYWdlX21hcF9zZXFfc2hvdyhzZXEsIHYpO1xubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy04MzAtXHRlbHNlXG4tLVxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYz04ODY9c3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBicGZfc2tfc3RvcmFnZV9tYXBfc2VxX29wcyA9IHtcbi0tXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jLTg4OS1cdC5zdG9wICAgPSBicGZfc2tfc3RvcmFnZV9tYXBfc2VxX3N0b3AsXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jOjg5MDpcdC5zaG93ICAgPSBicGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3csXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jLTg5MS19O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNTozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTA1OQoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDY4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3M6CgoqKkZvY3VzaW5nIG9uIEJQRiBJdGVyYXRvciBGdW5jdGlvbnMqKgoKQWxyaWdodCwgZm9yIHRoaXMgdGFzaywgSSYjMzk7bSB0aGlua2luZyBhYm91dCB1dGlsaXppbmcgdGhlIGBicGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3dgIGFuZCBgYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zdG9wYCBmdW5jdGlvbnMgYXMgbXkgcHJpbWFyeSBGb2N1c1N5bWJvbHMuIFRoYXQgYXBwcm9hY2ggc2hvdWxkIGJlIHByZXR0eSBkaXJlY3QuIEJ1dCwgaGFuZyBvbiwgdGhlcmUmIzM5O3MgYWxzbyBgYnBmX2l0ZXJfaW5pdF9za19zdG9yYWdlX21hcGAuIFRoYXQgYWN0dWFsbHkgc291bmRzIGxpa2UgaXQgY291bGQgYmUgZXZlbiAqYmV0dGVyKiBmb3IgbXkgcHVycG9zZXMsIHBlcmhhcHMgb2ZmZXJpbmcgYSBtb3JlIHN0cmVhbWxpbmVkIGFwcHJvYWNoIHRvIGluaXRpYWxpemluZyB0aGUgaXRlcmF0aW9uLiBJIHNob3VsZCBxdWlja2x5IHZlcmlmeSB0aGF0IHRoYXQgcGFydGljdWxhciBmdW5jdGlvbiBpcyBhY3R1YWxseSBhdmFpbGFibGUgaW4gdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQgb3Iga2VybmVsIHZlcnNpb24uIEl0JiMzOTtzIGNydWNpYWwgdG8gY29uZmlybSBpdHMgZXhpc3RlbmNlIGJlZm9yZSBJIGZ1bGx5IGNvbW1pdCB0byBpdCBhcyBteSBwcmltYXJ5IGFwcHJvYWNoLiBJIG5lZWQgdG8gZW5zdXJlIGl0JiMzOTtzIGEgdmlhYmxlIG9wdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDU6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2l0ZXJfaW5pdF9za19zdG9yYWdlX21hcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYz04MjU9c3RhdGljIHZvaWQgYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxuLS1cbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtODMzLVxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYzo4MzQ6c3RhdGljIGludCBicGZfaXRlcl9pbml0X3NrX3N0b3JhZ2VfbWFwKHZvaWQgKnByaXZfZGF0YSxcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtODM1LVx0XHRcdFx0XHRzdHJ1Y3QgYnBmX2l0ZXJfYXV4X2luZm8gKmF1eClcbi0tXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jPTg5Mz1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9pdGVyX3NlcV9pbmZvIGl0ZXJfc2VxX2luZm8gPSB7XG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jLTg5NC1cdC5zZXFfb3BzXHRcdD0gXHUwMDI2YnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9vcHMsXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jOjg5NTpcdC5pbml0X3NlcV9wcml2YXRlXHQ9IGJwZl9pdGVyX2luaXRfc2tfc3RvcmFnZV9tYXAsXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jLTg5Ni1cdC5maW5pX3NlcV9wcml2YXRlXHQ9IGJwZl9pdGVyX2Zpbmlfc2tfc3RvcmFnZV9tYXAsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA1OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNjU4CgkJCQkJCQlvdXRwdXQ6IDQ2CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkRpdmluZyBpbnRvIGBicGZfc2tfc3RvcmFnZV9tYXBfaXRlcl9hdHRhY2hfdGFyZ2V0YCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gYGJwZl9za19zdG9yYWdlX21hcF9pdGVyX2F0dGFjaF90YXJnZXRgLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgcmV2aWV3IGl0cyBwdXJwb3NlIGluIHRoZSBjb250ZXh0IG9mIHNrIHN0b3JhZ2UsIG1hcCBpdGVyYXRpb24sIGFuZCB0YXJnZXQgYXR0YWNobWVudC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIGxpa2VseSBvbiBob3cgaXQgaW50ZWdyYXRlcyB3aXRoIHRoZSBvdmVyYWxsIGxpZmVjeWNsZSBvZiBhIHNvY2tldCYjMzk7cyBleHRlbmRlZCBCUEYgZGF0YS4KCldoYXQgYXJlIHRoZSBjcml0aWNhbCBhc3BlY3RzIEkmIzM5O20gbG9va2luZyBmb3I/IFNwZWNpZmljYWxseToKCiogICAqKkF0dGFjaG1lbnQgUG9pbnRzOioqIFdoZXJlIGRvZXMgdGhpcyBmdW5jdGlvbiBmaXQgd2l0aGluIHRoZSBvdmVyYWxsIEJQRiBwcm9ncmFtIGV4ZWN1dGlvbiBvbiBzb2NrZXRzPyBBcmUgd2UgdGFsa2luZyBhYm91dCBpbmdyZXNzLCBlZ3Jlc3MsIG9yIHNvbWV0aGluZyBtb3JlIHNwZWNpYWxpemVkPwoqICAgKipUYXJnZXRpbmc6KiogSSB3YW50IHRvIHVuZGVyc3RhbmQgd2hhdCB0aGUgJiMzNDt0YXJnZXQmIzM0OyByZWZlcnMgdG8uIElzIGl0IGFub3RoZXIgQlBGIHByb2dyYW0sIGEgc3BlY2lmaWMgc29ja2V0IHN0cnVjdHVyZSwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IFRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZSBpdGVyYXRvcnMgYW5kIHRoZSB0YXJnZXQgbmVlZHMgY2xhcmlmaWNhdGlvbi4KKiAgICoqRXJyb3IgQ29uZGl0aW9ucyBhbmQgSGFuZGxpbmc6KiogV2hhdCBhcmUgdGhlIHBvc3NpYmxlIGZhaWx1cmUgbW9kZXMgb2YgdGhpcyBmdW5jdGlvbj8gSG93IHJvYnVzdCBpcyBpdHMgZXJyb3IgaGFuZGxpbmcsIGFuZCB3aGF0IGtpbmQgb2YgZmVlZGJhY2sgZG9lcyBpdCBwcm92aWRlPyBJIG5lZWQgdG8gYmUgYXdhcmUgb2YgdGhlIGNvbnN0cmFpbnRzIGFuZCBsaW1pdGF0aW9ucy4KKiAgICoqUmVzb3VyY2UgTWFuYWdlbWVudDoqKiBJJiMzOTtsbCBiZSBsb29raW5nIHRvIHNlZSBpZiB0aGUgZnVuY3Rpb24gcHJvcGVybHkgbWFuYWdlcyBpdHMgcmVzb3VyY2VzLiBBcmUgdGhlcmUgcG90ZW50aWFsIG1lbW9yeSBsZWFrcyBvciByYWNlIGNvbmRpdGlvbnM/CiogICAqKkNvbmN1cnJlbmN5OioqIEhvdyBkb2VzIHRoaXMgZnVuY3Rpb24gaGFuZGxlIGNvbmN1cnJlbnQgYWNjZXNzLCBwYXJ0aWN1bGFybHkgd2l0aGluIGEgbXVsdGktdGhyZWFkZWQgZW52aXJvbm1lbnQ/IERvZXMgaXQgZW1wbG95IGFueSBsb2NraW5nIG1lY2hhbmlzbXMgb3IgYXRvbWljIG9wZXJhdGlvbnM/CiogICAqKlBlcmZvcm1hbmNlOioqIEkgc2hvdWxkIGFsc28gcXVpY2tseSBjb25zaWRlciB0aGUgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGltcGFjdC4gSXMgdGhpcyBmdW5jdGlvbiBhIGJvdHRsZW5lY2sgaW4gY2VydGFpbiBzY2VuYXJpb3MsIGFuZCBkb2VzIGl0IHVzZSBhbnkgb3B0aW1pemF0aW9uIHRlY2huaXF1ZXM/CgpJJiMzOTtsbCBzdGFydCB3aXRoIHRoZSBzb3VyY2UgY29kZSBhbmQgcmVsZXZhbnQgZG9jdW1lbnRhdGlvbiwga2VlcGluZyB0aGVzZSBrZXkgYXJlYXMgaW4gbWluZC4gVW5kZXJzdGFuZGluZyBob3cgdGhpcyBmdW5jdGlvbiBtYW5hZ2VzIGF0dGFjaGluZyBhIHRhcmdldCBpcyBjcnVjaWFsIGZvciBjb21wcmVoZW5kaW5nIGEgbGFyZ2VyIEJQRiBzeXN0ZW0mIzM5O3Mgc29ja2V0IGRhdGEgcHJvY2Vzc2luZyBhcmNoaXRlY3R1cmUuIEkgc2hvdWxkIGFsc28gY2hlY2sgdGhlIHN1cnJvdW5kaW5nIGNvZGUgZm9yIGNsdWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNTo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9za19zdG9yYWdlX21hcF9pdGVyX2F0dGFjaF90YXJnZXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDU6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIxNTEKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqQ29ubmVjdGluZyB0aGUgRG90cyBpbiB0aGUgQlBGIExhbmQqKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSB3YXMganVzdCByZXZpZXdpbmcgdGhlIGBicGZfc2tfc3RvcmFnZV9tYXBfcmVnX2luZm9gIGZ1bmN0aW9uLCB0cmFjaW5nIGl0cyBkZXBlbmRlbmNpZXMsIGFuZCB0aGVuIGl0IGhpdCBtZS4gSSBzZWUgdGhhdCBgaXRlcl9zZXFfaW5mb2AgZnVuY3Rpb24gaXMgYWN0dWFsbHkgYmVpbmcgKnVzZWQqIGluIHRoZXJlLiBUaGlzIGlzIGEga2V5IG9ic2VydmF0aW9uLiBQcmV2aW91c2x5LCBteSBtZW50YWwgbW9kZWwgcHJvYmFibHkgaGFkIHRoZXNlIGFzIHNvbWV3aGF0IGRpc3RpbmN0IG1vZHVsZXMsIG5vdyBJIHNlZSB0aGUgZmxvdy4gSSBrbm93IHdoYXQgYGl0ZXJfc2VxX2luZm9gIGRvZXMsIGFuZCBpdHMgaW1wbGljYXRpb25zIG9uIHRoZSBiaWdnZXIgcGljdHVyZS4gVGhpcyBoYXMgc29tZSB2ZXJ5IGludGVyZXN0aW5nIGltcGxpY2F0aW9ucyBmb3Igc3RhdGUgbWFuYWdlbWVudCBhbmQgaG93IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggaXRlcmF0aW5nIG92ZXIgdGhlIGRhdGEuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA1OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9za19zdG9yYWdlX21hcF9yZWdfaW5mbyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYz04OTM9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfaXRlcl9zZXFfaW5mbyBpdGVyX3NlcV9pbmZvID0ge1xuLS1cbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtODk5LVxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYzo5MDA6c3RhdGljIHN0cnVjdCBicGZfaXRlcl9yZWcgYnBmX3NrX3N0b3JhZ2VfbWFwX3JlZ19pbmZvID0ge1xubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy05MDEtXHQudGFyZ2V0XHRcdFx0PSBcJiMzNDticGZfc2tfc3RvcmFnZV9tYXBcJiMzNDssXG4tLVxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYz05MTY9c3RhdGljIGludCBfX2luaXQgYnBmX3NrX3N0b3JhZ2VfbWFwX2l0ZXJfaW5pdCh2b2lkKVxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy05MTcte1xubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYzo5MTg6XHRicGZfc2tfc3RvcmFnZV9tYXBfcmVnX2luZm8uY3R4X2FyZ19pbmZvWzBdLmJ0Zl9pZCA9XG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jLTkxOS1cdFx0YnRmX3NvY2tfaWRzW0JURl9TT0NLX1RZUEVfU09DS107XG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jOjkyMDpcdHJldHVybiBicGZfaXRlcl9yZWdfdGFyZ2V0KFx1MDAyNmJwZl9za19zdG9yYWdlX21hcF9yZWdfaW5mbyk7XG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jLTkyMS19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA1OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNzE5CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKktlcm5lbCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqCgpBbHJpZ2h0LCBzbyB0aGUgaW5pdGlhbCBjb25jZXJuIGlzIHRoZSBgQlBGX1NZU0NBTExgIGNvbmZpZyBvcHRpb24uIFRoYXQmIzM5O3MgYSBrZXkgb25lLCBubyBxdWVzdGlvbi4gV2UgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUgdGhhdCYjMzk7cyBlbmFibGVkLiBCdXQgbGV0JiMzOTtzIG5vdCBqdW1wIHRvIGNvbmNsdXNpb25zLiBCZWZvcmUgSSBkaXZlIGRlZXAgaW50byB0aGlzIHNwZWNpZmljIGlzc3VlLCBJIG5lZWQgdG8gdGFrZSBhIHF1aWNrIGxvb2sgYXJvdW5kLiBNeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIHJ1biB0aHJvdWdoIHRoZSByZWxhdGVkIGNvbmZpZ3MsIG1heWJlIHRoZXJlJiMzOTtzIHNvbWV0aGluZyBlbHNlIHdlIG5lZWQuIEl0JiMzOTtzIHRvbyByaXNreSB0byBhc3N1bWUgYSBzaW5nbGUgZGVwZW5kZW5jeSBpcyBhbGwgdGhhdCBtYXR0ZXJzLiBJdCYjMzk7cyBwb3NzaWJsZSB0aGVyZSBhcmUgYSB3aG9sZSBidW5jaCBvZiB1bmRlcmx5aW5nIHN1cHBvcnQgc3RydWN0dXJlcyB3ZSBuZWVkIHRvIGNvbnNpZGVyLCBlc3BlY2lhbGx5IHdpdGggYW55dGhpbmcgQlBGIHJlbGF0ZWQuIExldCYjMzk7cyBzZWUgd2hhdCBlbHNlIG1pZ2h0IGJlIGx1cmtpbmcgaW4gdGhlIHNoYWRvd3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA1OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCUEZfU1lTQ0FMTCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL0tjb25maWc9MjU9bWVudSBcJiMzNDtCUEYgc3Vic3lzdGVtXCYjMzQ7XG5rZXJuZWwvYnBmL0tjb25maWctMjYtXG5rZXJuZWwvYnBmL0tjb25maWc6Mjc6Y29uZmlnIEJQRl9TWVNDQUxMXG5rZXJuZWwvYnBmL0tjb25maWctMjgtXHRib29sIFwmIzM0O0VuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNTo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzAyNQoJCQkJCQkJb3V0cHV0OiAxMzUKCQkJCQkJCXRob3VnaHRzOiAyNzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgQlBGIFBvdGVudGlhbCBWdWxuZXJhYmlsaXR5IEZpeCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQgc2VlbXMgbGlrZSB3ZSYjMzk7dmUgZ290IGEgZml4IGZvciBhIHBvc3NpYmxlIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZSB3aXRoaW4gdGhlIGBfX2JwZl9za19zdG9yYWdlX21hcF9zZXFfc2hvd2AgZnVuY3Rpb24uIFRoYXQmIzM5O3MgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHRocm91Z2ggdGhlIEJQRiBpdGVyYXRvciwgd2hpY2ggaXMgYWx3YXlzIHNvbWV0aGluZyB0byBwYXkgYXR0ZW50aW9uIHRvLiBJbW1lZGlhdGVseSwgSSB6ZXJvIGluIG9uIGBfX2JwZl9za19zdG9yYWdlX21hcF9zZXFfc2hvd2AgYW5kIGFsc28gb24gYGJwZl9za19zdG9yYWdlX21hcF9zZXFfc2hvd2AgYXMgdGhlIGZ1bmN0aW9ucyBvZiBpbnRlcmVzdCwgZXNwZWNpYWxseSBjb25zaWRlcmluZyB0aGUgYEJQRl9TWVNDQUxMYCBjb25maWcgaXMgZW5hYmxlZC4KCk15IGZpcnN0IHRob3VnaHQgaXMgdG8gcXVpY2tseSB2ZXJpZnkgaWYgYF9fYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zaG93YCBpcyBzdGF0aWMsIHdoaWNoIGl0IGlzLiBMZXQgbWUgdGhpbmssIGFyZSB0aGVyZSBhbnkgbm9uLXN0YXRpYyBhbHRlcm5hdGl2ZXMgd2UgY2FuIHV0aWxpemU/IE9rYXksIGBicGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3dgIGlzIGFsc28gc3RhdGljLiBHaXZlbiB0aGF0IHRob3NlIGFyZSB0aGUgb25seSBmdW5jdGlvbnMgY2hhbmdlZCwgSSB3YXMgdGhpbmtpbmcgdGhvc2UgdHdvIHdlcmUgdGhlIHdheSB0byBnby4KCkhvd2V2ZXIsIGhvbGQgb24gYSBzZWNvbmQuIEkgc2VlIHRoYXQgYGJwZl9za19zdG9yYWdlX21hcF9zZXFfc2hvd2AgaXMgcGFzc2VkIGFzIGEgZnVuY3Rpb24gcG9pbnRlciwgd2hpY2ggbWVhbnMgaXQgaXNuJiMzOTt0IGlubGluZWQsIGl0IGlzIHVzZWQgYXMgYSBwYXJhbWV0ZXIuICBIbW0uIFNvLCBtYXliZSBgX19icGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3dgIGlzIGlubGluZWQgKmludG8qIGBicGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3dgIGFuZCBwb3RlbnRpYWxseSBgYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zdG9wYC4gVGhlcmVmb3JlLCBpdCBsb29rcyBsaWtlIGBicGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3dgIGFuZCBgYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zdG9wYCBhcmUgdGhlIGJldHRlciBmb2N1cyBzeW1ib2xzIGZvciBmdXJ0aGVyIGludmVzdGlnYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA1OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9za19zdG9yYWdlX21hcF9zZXFfc2hvdyYjMzQ7LAogICAgJiMzNDticGZfc2tfc3RvcmFnZV9tYXBfc2VxX3N0b3AmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIHRoZSBCUEYgaXRlcmF0b3IgZm9yIHNvY2tldCBsb2NhbCBzdG9yYWdlIG1hcHMuIFRoZSBtb2RpZmllZCBmdW5jdGlvbiBgX19icGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3dgIGlzIGNhbGxlZCB3aGVuIHJlYWRpbmcgZnJvbSB0aGUgaXRlcmF0b3Igc2VxX2ZpbGUsIHdoaWNoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIGBicGYoKWAgc3lzY2FsbCBhbmQgYHJlYWQoKWAuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zaG93JiMzNDssCiAgICAmIzM0O2JwZl9za19zdG9yYWdlX21hcF9zZXFfc3RvcCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gdGhlIEJQRiBpdGVyYXRvciBmb3Igc29ja2V0IGxvY2FsIHN0b3JhZ2UgbWFwcy4gVGhlIG1vZGlmaWVkIGZ1bmN0aW9uIGBfX2JwZl9za19zdG9yYWdlX21hcF9zZXFfc2hvd2AgaXMgY2FsbGVkIHdoZW4gcmVhZGluZyBmcm9tIHRoZSBpdGVyYXRvciBzZXFfZmlsZSwgd2hpY2ggaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgYGJwZigpYCBzeXNjYWxsIGFuZCBgcmVhZCgpYC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDU6NDA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNTo0MDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgTlVMTCBwb2ludGVyIGNoZWNrIHRvIHByZXZlbnQgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugd2hlbiBhY2Nlc3NpbmcgYHNrX3N0b3JhZ2UtXHUwMDNlb3duZXJgLiBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGFyZSBjYXVnaHQgYnkgc3RhbmRhcmQga2VybmVsIHBhZ2UgZmF1bHQgaGFuZGxpbmcgYW5kIEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIHN1Y2ggYXMgcmVhZGluZyB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IG9yIGxlYWtpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZWY5MDcxM2M1Yjk2MTg5ZjU5ODFhOGQ1YWJkZjFmYjhjNDhkOTJkNwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgQXVnIDI3IDA1OjM4OjU2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYyBiL25ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMKaW5kZXggMWQyOTVhODc2OWZhZC4uNzIyODUyMGFhMmI2ZSAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jCkBAIC04MDYsNiAmIzQzOzgwNiw4IEBAIHN0YXRpYyBpbnQgX19icGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsCiAJCWN0eC5tYXAgPSBpbmZvLSZndDttYXA7CiAJCWlmIChzZWxlbSkgewogCQkJc2tfc3RvcmFnZSA9IHJjdV9kZXJlZmVyZW5jZShzZWxlbS0mZ3Q7bG9jYWxfc3RvcmFnZSk7CiYjNDM7CQkJaWYgKCFza19zdG9yYWdlKQomIzQzOwkJCQlyZXR1cm4gMDsKIAkJCWN0eC5zayA9IHNrX3N0b3JhZ2UtJmd0O293bmVyOwogCQkJY3R4LnZhbHVlID0gU0RBVEEoc2VsZW0pLSZndDtkYXRhOwogCQl9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNTo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDAwCgkJCQkJCQlvdXRwdXQ6IDExMAoJCQkJCQkJdGhvdWdodHM6IDM3NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBLTVNBTiBOZWVkcyoqCgpPa2F5LCBJJiMzOTt2ZSByZXZpZXdlZCB0aGlzIHBhdGNoIGluIGBuZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jYC4gSXQmIzM5O3MgYSBzdHJhaWdodGZvcndhcmQgZml4IGZvciBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZS4gVGhlIGNvZGUgbm93IGluY2x1ZGVzIGEgY2hlY2s6IGBpZiAoIXNrX3N0b3JhZ2UpIHJldHVybiAwO2Agd2hpY2ggZGlyZWN0bHkgcHJldmVudHMgdGhlIGFjY2VzcyBvZiBgc2tfc3RvcmFnZS0mZ3Q7b3duZXJgIGlmIGBza19zdG9yYWdlYCBpcyBOVUxMLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBpcyAqbm90KiBhIEtNU0FOIGlzc3VlLiBUaGUgY29yZSBwcm9ibGVtIGlzIHNpbXBseSBwcmV2ZW50aW5nIGEgY3Jhc2ggYnkgaGFuZGxpbmcgYSBwb3RlbnRpYWwgTlVMTCB2YWx1ZSBmb3IgYHNrX3N0b3JhZ2VgLiBXZSBhbHJlYWR5IGhhdmUga2VybmVsLWxldmVsIHByb3RlY3Rpb25zIGZvciBkZXJlZmVyZW5jaW5nIE5VTEwgcG9pbnRlcnPigJRwYWdlIGZhdWx0IGhhbmRsaW5nLCBLQVNBTiwgZXRjLiBUaGUgcHJpbWFyeSBmdW5jdGlvbiBvZiBLTVNBTiBpcyB0byBkZXRlY3QgdGhlIHVzZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSwgd2hpY2ggaXMgY2xlYXJseSBub3QgdGhlIGNhc2UgaGVyZS4gVGhpcyBwYXRjaCBzaW1wbHkgYWRkcyBhIHNhZmV0eSBjaGVjay4KClRvIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZywgSSByZS1leGFtaW5lZCB0aGUgc3Vycm91bmRpbmcgY29udGV4dCwgc3BlY2lmaWNhbGx5IHRoZSBgX19icGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3dgIGZ1bmN0aW9uLiBUaGUgY29kZSBhcHBlYXJzIHRvIGJlIHdpdGhpbiBhIGBzZXFfZmlsZWAgc2hvdyBmdW5jdGlvbiwgcHJvYmFibHkgdXNlZCBmb3IgQlBGIG1hcCBpdGVyYXRpb24uIElmIGBza19zdG9yYWdlYCBpcyBOVUxMLCB0aGUgZnVuY3Rpb24gZ3JhY2VmdWxseSByZXR1cm5zIDAuIFRoaXMgcmVpbmZvcmNlcyBteSB2aWV3IHRoYXQgdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgbm90IHRoZSBjb25jZXJuLCBidXQgcmF0aGVyIGhhbmRsaW5nIHRoZSBleHBlY3RlZCBjYXNlIHdoZXJlIGEgcGFydGljdWxhciBCUEYgbWFwIGVsZW1lbnQgbWlnaHQgbm90IGhhdmUgYXNzb2NpYXRlZCBzdG9yYWdlLgoKVGhlcmVmb3JlLCBhZnRlciB0aGlzIHJldmlldywgSSYjMzk7bSBjb25maWRlbnQgaW4gc2V0dGluZyBgTmVlZHNLTVNBTiA9IGZhbHNlYC4gSXQmIzM5O3MgYSBjcmFzaCBwcmV2ZW50aW9uIGZpeCwgbm90IGEgS01TQU4tcmVsZXZhbnQgb25lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNTo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgTlVMTCBwb2ludGVyIGNoZWNrIHRvIHByZXZlbnQgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugd2hlbiBhY2Nlc3NpbmcgYHNrX3N0b3JhZ2UtXHUwMDNlb3duZXJgLiBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGFyZSBjYXVnaHQgYnkgc3RhbmRhcmQga2VybmVsIHBhZ2UgZmF1bHQgaGFuZGxpbmcgYW5kIEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIHN1Y2ggYXMgcmVhZGluZyB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IG9yIGxlYWtpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBOVUxMIHBvaW50ZXIgY2hlY2sgdG8gcHJldmVudCBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSB3aGVuIGFjY2Vzc2luZyBgc2tfc3RvcmFnZS1cdTAwM2Vvd25lcmAuIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgYXJlIGNhdWdodCBieSBzdGFuZGFyZCBrZXJuZWwgcGFnZSBmYXVsdCBoYW5kbGluZyBhbmQgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcywgc3VjaCBhcyByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgb3IgbGVha2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNTozODo1Ny4yODI4MDkyOTVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NjU5OTExODczNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9za19zdG9yYWdlX21hcF9zZXFfc2hvd1wiLFxuICAgIFwiYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zdG9wXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgTlVMTCBwb2ludGVyIGNoZWNrIHRvIHByZXZlbnQgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugd2hlbiBhY2Nlc3NpbmcgYHNrX3N0b3JhZ2UtXFx1MDAzZW93bmVyYC4gTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBhcmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIGtlcm5lbCBwYWdlIGZhdWx0IGhhbmRsaW5nIGFuZCBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBzdWNoIGFzIHJlYWRpbmcgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSBvciBsZWFraW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIHRoZSBCUEYgaXRlcmF0b3IgZm9yIHNvY2tldCBsb2NhbCBzdG9yYWdlIG1hcHMuIFRoZSBtb2RpZmllZCBmdW5jdGlvbiBgX19icGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3dgIGlzIGNhbGxlZCB3aGVuIHJlYWRpbmcgZnJvbSB0aGUgaXRlcmF0b3Igc2VxX2ZpbGUsIHdoaWNoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIGBicGYoKWAgc3lzY2FsbCBhbmQgYHJlYWQoKWAuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA1OjM4OjU3LjI4MjgxMzM3NVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzE3NDAwOTk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZWY5MDcxM2M1Yjk2MTg5ZjU5ODFhOGQ1YWJkZjFmYjhjNDhkOTJkN1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IEF1ZyAyNyAwNTozODo1NiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jIGIvbmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuY1xcbmluZGV4IDFkMjk1YTg3NjlmYWQuLjcyMjg1MjBhYTJiNmUgMTAwNjQ0XFxuLS0tIGEvbmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuY1xcbisrKyBiL25ldC9jb3JlL2JwZl9za19zdG9yYWdlLmNcXG5AQCAtODA2LDYgKzgwNiw4IEBAIHN0YXRpYyBpbnQgX19icGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsXFxuIFxcdFxcdGN0eC5tYXAgPSBpbmZvLVxcdTAwM2VtYXA7XFxuIFxcdFxcdGlmIChzZWxlbSkge1xcbiBcXHRcXHRcXHRza19zdG9yYWdlID0gcmN1X2RlcmVmZXJlbmNlKHNlbGVtLVxcdTAwM2Vsb2NhbF9zdG9yYWdlKTtcXG4rXFx0XFx0XFx0aWYgKCFza19zdG9yYWdlKVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gMDtcXG4gXFx0XFx0XFx0Y3R4LnNrID0gc2tfc3RvcmFnZS1cXHUwMDNlb3duZXI7XFxuIFxcdFxcdFxcdGN0eC52YWx1ZSA9IFNEQVRBKHNlbGVtKS1cXHUwMDNlZGF0YTtcXG4gXFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNTozODo1Ny42MDA4NTk0ODFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo4ODEzMDY5MDAwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9za19zdG9yYWdlX21hcF9zZXFfc2hvd1wiLFxuICAgIFwiYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zdG9wXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIHRoZSBCUEYgaXRlcmF0b3IgZm9yIHNvY2tldCBsb2NhbCBzdG9yYWdlIG1hcHMuIFRoZSBtb2RpZmllZCBmdW5jdGlvbiBgX19icGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3dgIGlzIGNhbGxlZCB3aGVuIHJlYWRpbmcgZnJvbSB0aGUgaXRlcmF0b3Igc2VxX2ZpbGUsIHdoaWNoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIGBicGYoKWAgc3lzY2FsbCBhbmQgYHJlYWQoKWAuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGVmOTA3MTNjNWI5NjE4OWY1OTgxYThkNWFiZGYxZmI4YzQ4ZDkyZDdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAyNyAwNTozODo1NiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMgYi9uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jXG5pbmRleCAxZDI5NWE4NzY5ZmFkLi43MjI4NTIwYWEyYjZlIDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuY1xuKysrIGIvbmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuY1xuQEAgLTgwNiw2ICs4MDYsOCBAQCBzdGF0aWMgaW50IF9fYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLFxuIFx0XHRjdHgubWFwID0gaW5mby1cdTAwM2VtYXA7XG4gXHRcdGlmIChzZWxlbSkge1xuIFx0XHRcdHNrX3N0b3JhZ2UgPSByY3VfZGVyZWZlcmVuY2Uoc2VsZW0tXHUwMDNlbG9jYWxfc3RvcmFnZSk7XG4rXHRcdFx0aWYgKCFza19zdG9yYWdlKVxuK1x0XHRcdFx0cmV0dXJuIDA7XG4gXHRcdFx0Y3R4LnNrID0gc2tfc3RvcmFnZS1cdTAwM2Vvd25lcjtcbiBcdFx0XHRjdHgudmFsdWUgPSBTREFUQShzZWxlbSktXHUwMDNlZGF0YTtcbiBcdFx0fVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDU6Mzg6NTcuNjAwODYwOTMxWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjQ5ODM2MzI1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzOlxuXG4qKkFuYWx5emluZyB0aGUgUHJvcG9zZWQgTnVsbCBDaGVjayBpbiBgYnBmX3NrX3N0b3JhZ2UuY2AqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGFkZGluZyBhIG51bGwgY2hlY2sgZm9yIGBza19zdG9yYWdlYCB3aXRoaW4gdGhlIGBfX2JwZl9za19zdG9yYWdlX21hcF9zZXFfc2hvd2AgZnVuY3Rpb24gaW4gYG5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmNgLiBUaGF0IGltbWVkaWF0ZWx5IG1ha2VzIG1lIHRoaW5rLCBcIldoeSBpcyB0aGlzIG5lY2Vzc2FyeT9cIiBNeSBmaXJzdCBzdGVwIGlzLCBvZiBjb3Vyc2UsIHRvIGp1bXAgaW50byB0aGUgY29kZSBhbmQgdGhvcm91Z2hseSByZXZpZXcgYF9fYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zaG93YCBpdHNlbGYuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3csIHRoZSBkYXRhIHN0cnVjdHVyZXMgaXQncyBvcGVyYXRpbmcgb24sIGFuZCAqd2hlcmUqIGBza19zdG9yYWdlYCBpcyBwb3RlbnRpYWxseSBkZXJlZmVyZW5jZWQuXG5cbklzIHRoaXMgcmVsYXRlZCB0byBhIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbj8gSXMgdGhlcmUgYSBzdWJ0bGUgcGF0aCB3aGVyZSBgc2tfc3RvcmFnZWAgY291bGQgYmUgZnJlZWQgb3IgdW5pbml0aWFsaXplZCBiZWZvcmUgdGhpcyBmdW5jdGlvbiBnZXRzIGNhbGxlZD8gSXMgdGhpcyBqdXN0IGRlZmVuc2l2ZSBwcm9ncmFtbWluZywgb3IgZG9lcyBpdCBwb2ludCB0byBhIGRlZXBlciBpc3N1ZSBpbiB0aGUgb3duZXJzaGlwIG9yIGxpZmVjeWNsZSBvZiB0aGUgYHNrX3N0b3JhZ2VgIHBvaW50ZXI/IEkgbmVlZCB0byBhbmFseXplIHRoZSBzdXJyb3VuZGluZyBjb2RlLCB0aGUgY29udGV4dCBvZiB0aGUgY2FsbCwgYW5kIGNvbnNpZGVyIGFueSBjb25jdXJyZW50IGFjY2VzcyB0byB0aGlzIHZhcmlhYmxlLiBJJ2xsIG5lZWQgdG8gbG9vayBhdCB3aG8gaXMgd3JpdGluZyB0byB0aGlzLCB3aG8gaXMgdXNpbmcgaXQsIGFuZCBpZiB0aGVyZSBhcmUgYW55IHN1YnRsZSBjb25jdXJyZW5jeSBpc3N1ZXMuXG5cbk15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhpcyBjb3VsZCBiZSBhIHJhY2UgY29uZGl0aW9uLCBhIGJ1ZyB3aGVyZSB0aGUgYHNrX3N0b3JhZ2VgIGZpZWxkIGlzIGRlcmVmZXJlbmNlZCBidXQgaXMgbm90IGNoZWNrZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIG1lbW9yeSBpc24ndCBhbHJlYWR5IGZyZWUuIEkgd2lsbCBhbHNvIG1ha2Ugc3VyZSB0byBjaGVjayB3aGV0aGVyIHRoaXMgbnVsbCBjaGVjayBpcyByZWR1bmRhbnQuIElmIHRoZSBjb2RlIGJlZm9yZSBgX19icGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3dgIGFscmVhZHkgZW5zdXJlcyB0aGF0IGBza19zdG9yYWdlYCBpcyBub24tbnVsbCwgdGhpcyBwYXRjaCBjb3VsZCBiZSB1bm5lY2Vzc2FyeSBhbmQgaW50cm9kdWNlIHVubmVjZXNzYXJ5IG92ZXJoZWFkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDAzLCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNTozOTowNC4wOTkyMjc0NTJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU1NDUyNDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19icGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jPTc4OD1ERUZJTkVfQlBGX0lURVJfRlVOQyhicGZfc2tfc3RvcmFnZV9tYXAsIHN0cnVjdCBicGZfaXRlcl9tZXRhICptZXRhLFxcbi0tXFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy03OTEtXFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYzo3OTI6c3RhdGljIGludCBfX2JwZl9za19zdG9yYWdlX21hcF9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSxcXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jLTc5My1cXHRcXHRcXHRcXHRcXHQgc3RydWN0IGJwZl9sb2NhbF9zdG9yYWdlX2VsZW0gKnNlbGVtKVxcbi0tXFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYz04MjA9c3RhdGljIGludCBicGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy04MjEte1xcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM6ODIyOlxcdHJldHVybiBfX2JwZl9za19zdG9yYWdlX21hcF9zZXFfc2hvdyhzZXEsIHYpO1xcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtODIzLX1cXG4tLVxcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM9ODI1PXN0YXRpYyB2b2lkIGJwZl9za19zdG9yYWdlX21hcF9zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdilcXG4tLVxcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtODI4LVxcdGlmICghdilcXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jOjgyOTpcXHRcXHQodm9pZClfX2JwZl9za19zdG9yYWdlX21hcF9zZXFfc2hvdyhzZXEsIHYpO1xcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtODMwLVxcdGVsc2VcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDU6Mzk6MDQuMTQ0Nzc1ODZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTIwNTc4NjUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgQlBGIEl0ZXJhdG9yKipcblxuQWxyaWdodCwgdGhlIHRyYWlsIGxlYWRzIG1lIHRvIGBfX2JwZl9za19zdG9yYWdlX21hcF9zZXFfc2hvd2AuIFRoYXQncyB0aGUga2V5IGZ1bmN0aW9uLCBjYWxsZWQgYnkgdGhlIGBicGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3dgIGFuZCBgYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zdG9wYCBmdW5jdGlvbnMsIG1lYW5pbmcgaXQncyB0aGUgd29ya2hvcnNlIG9mIHRoaXMgQlBGIGl0ZXJhdG9yLiBXZSdyZSBpbiBpdGVyYXRvciB0ZXJyaXRvcnksIHNwZWNpZmljYWxseSB3aXRoIHRoZSBgc2tfc3RvcmFnZV9tYXBgLiBUaW1lIHRvIGNoZWNrIG91dCBgYnBmX3NrX3N0b3JhZ2UuY2AsIHRoZXJlIG1pZ2h0IGJlIHNvbWUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgdGhhdCBJIG5lZWQgdG8gYmUgYXdhcmUgb2YuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4ODYsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNTozOTowOC4wNjUzNTYxNDJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU5MzcxMDAzLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA1OjM5OjA4LjIyNDczMTU3NVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwODQ0MzkwNjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyB5b3VyIHN1bW1hcnk6XG5cbioqQ2hlY2tpbmcgdGhlIE1ha2VmaWxlKipcblxuT2theSwgdGltZSB0byBkaXZlIGludG8gdGhpcy4gRmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGBNYWtlZmlsZWAuIEl0J3MgdGhlIGNlbnRyYWwgaHViIGZvciB0aGUgYnVpbGQgcHJvY2Vzcywgc28gdW5kZXJzdGFuZGluZyBpdHMgc3RydWN0dXJlIGlzIGNydWNpYWwgYmVmb3JlIEkgZXZlbiB0aGluayBhYm91dCBtYWtpbmcgY2hhbmdlcy4gSSdsbCBuZWVkIHRvIGlkZW50aWZ5IHRoZSB0YXJnZXRzLCBkZXBlbmRlbmNpZXMsIGFuZCBydWxlcy4gSSdsbCBiZSBsb29raW5nIGZvciBhbnkgb2J2aW91cyBpbmVmZmljaWVuY2llcyBvciBwb3RlbnRpYWwgYm90dGxlbmVja3MgaW4gdGhlIGJ1aWxkIHByb2Nlc3MsIHBhcnRpY3VsYXJseSBhbnl0aGluZyB0aGF0IG1pZ2h0IGJlIHVubmVjZXNzYXJpbHkgcmUtY29tcGlsaW5nIG9yIHJlLWxpbmtpbmcuIEkgd2FudCB0byBzZWUgaG93IHRoaXMgdGhpbmcgaXMgYWN0dWFsbHkgcHV0IHRvZ2V0aGVyIC0gaG93IGFyZSB0aGUgb2JqZWN0IGZpbGVzIGdlbmVyYXRlZD8gV2hhdCdzIHRoZSBsaW5raW5nIGNvbW1hbmQ/IEFyZSB0aGVyZSBhbnkgY2xldmVyIHRyaWNrcyBvciBvcHRpbWlzYXRpb25zIGFscmVhZHkgaW4gcGxhY2UsIG9yIGlzIGl0IGFsbCBhIGJpdCBydWRpbWVudGFyeT8gVGltZSB0byBnZXQgZG93biB0byBicmFzcyB0YWNrcyBhbmQgYXNzZXNzIGhvdyByb2J1c3QgYW5kIG1haW50YWluYWJsZSB0aGlzIGJ1aWxkIHN5c3RlbSBpcy4gR290dGEgYmUgZWZmaWNpZW50IGhlcmUgLSBJJ20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgYXJlYXMgd2hlcmUgSSdsbCBzZWUgb3Bwb3J0dW5pdGllcyBmb3Igb3B0aW1pc2F0aW9uIG9yIHJlZmFjdG9yaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTY1LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNTozOToxMi4zMDkxNzI1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1ODkzNjQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9za19zdG9yYWdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL01ha2VmaWxlPTQ1PW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gc29ja19tYXAub1xcbm5ldC9jb3JlL01ha2VmaWxlOjQ2Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gYnBmX3NrX3N0b3JhZ2Uub1xcbm5ldC9jb3JlL01ha2VmaWxlLTQ3LWlmZGVmIENPTkZJR19JTkVUXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA1OjM5OjEyLjM1NTA3NTAwOFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzMTQ5MjU4MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0IGluIHRoZSBmaWVsZDpcblxuKipEaXZpbmcgaW50byB0aGUgQlBGIFNrX1N0b3JhZ2UgSW1wbGVtZW50YXRpb24qKlxuXG5SaWdodCwgc28gdGhpcyBiZWhhdmlvciBjbGVhcmx5IGhpbmdlcyBvbiB0aGUgYENPTkZJR19CUEZfU1lTQ0FMTGAgc2V0dGluZy4gVGhhdCdzIHRoZSBiYXNlbGluZSwgb2YgY291cnNlLCBidXQgd2hhdCdzIHRoZSBhY3R1YWwgaW1wbGVtZW50YXRpb24gZG9pbmc/IEkgbm90aWNlZCBgX19icGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3dgIGlzIGRlY2xhcmVkIGFzIHN0YXRpYywgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIEl0J3MgZXNzZW50aWFsbHkgYW4gaW50ZXJuYWwgZGV0YWlsLiBCdXQgaXQgaXMgY2FsbGVkIGJ5IGBicGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3dgIGFuZCBgYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zdG9wYC4gQm90aCBvZiB0aG9zZSBmdW5jdGlvbnMgYXJlIG9idmlvdXNseSBwdWJsaWMgZW50cnkgcG9pbnRzLiBTbyBJJ2xsIGdvIGhhdmUgYSBsb29rIGFyb3VuZCB0byBzZWUgaWYgdGhlcmUgYXJlIG5vbi1zdGF0aWMgZnVuY3Rpb24gZGVmaW5pdGlvbnMgdG8gYmV0dGVyIGdyYXNwIHRoZSBpbnRlbnQuIFdoZXJlIGFyZSB0aGUgZW50cnkgcG9pbnRzP1xuXG5cbiIsIklucHV0VG9rZW5zIjozNDg1LCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDU6Mzk6MTYuNjcwMDAyODU0WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTM3NjA4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jPTc4OD1ERUZJTkVfQlBGX0lURVJfRlVOQyhicGZfc2tfc3RvcmFnZV9tYXAsIHN0cnVjdCBicGZfaXRlcl9tZXRhICptZXRhLFxcbi0tXFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy03OTEtXFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYzo3OTI6c3RhdGljIGludCBfX2JwZl9za19zdG9yYWdlX21hcF9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSxcXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jLTc5My1cXHRcXHRcXHRcXHRcXHQgc3RydWN0IGJwZl9sb2NhbF9zdG9yYWdlX2VsZW0gKnNlbGVtKVxcbi0tXFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy04MTktXFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYzo4MjA6c3RhdGljIGludCBicGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy04MjEte1xcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM6ODIyOlxcdHJldHVybiBfX2JwZl9za19zdG9yYWdlX21hcF9zZXFfc2hvdyhzZXEsIHYpO1xcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtODIzLX1cXG4tLVxcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM9ODI1PXN0YXRpYyB2b2lkIGJwZl9za19zdG9yYWdlX21hcF9zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdilcXG4tLVxcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtODI4LVxcdGlmICghdilcXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jOjgyOTpcXHRcXHQodm9pZClfX2JwZl9za19zdG9yYWdlX21hcF9zZXFfc2hvdyhzZXEsIHYpO1xcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtODMwLVxcdGVsc2VcXG4tLVxcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM9ODg2PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9vcHMgPSB7XFxuLS1cXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jLTg4OS1cXHQuc3RvcCAgID0gYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zdG9wLFxcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM6ODkwOlxcdC5zaG93ICAgPSBicGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3csXFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy04OTEtfTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDU6Mzk6MTYuNzE1Mzg0MzcyWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0OTM0OTE0NzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIGEgZmlyc3QtcGVyc29uIGV4cGVydCBzdW1tYXJ5OlxuXG4qKkRpZ2dpbmcgaW50byB0aGUgQlBGIFNvY2tldCBTdG9yYWdlIE1hcCBTZXF1ZW5jZSBPcGVyYXRpb25zKipcblxuQWxyaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgZnVuY3Rpb25zLCBhbmQgdGhleSdyZSBzdGF0aWMgbWVtYmVycyBvZiBgYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9vcHNgLiBUaGF0J3MgdGhlIGtleSBoZXJlLiBUaGlzIG1lYW5zIHRoZXkgYXJlIGxpa2VseSBzcGVjaWZpYyB0byBob3cgdGhpcyBwYXJ0aWN1bGFyIG1hcCB0eXBlIGJlaGF2ZXMgd2l0aGluIHRoZSBCUEYgZnJhbWV3b3JrLiBNeSBuZXh0IGltbWVkaWF0ZSB0aG91Z2h0IGlzOiB3aGVyZSBpcyB0aGlzIGBicGZfc2tfc3RvcmFnZV9tYXBfc2VxX29wc2Agc3RydWN0ICphY3R1YWxseSogdXNlZD8gVW5kZXJzdGFuZGluZyB0aGUgY2FsbCBzaXRlcyB3aWxsIGJlIGNydWNpYWwuIEl0J2xsIGdpdmUgbWUgY29udGV4dCBvbiBob3cgdGhlc2Ugc3BlY2lmaWMgZnVuY3Rpb25zIGFyZSBpbnZva2VkIGFuZCB3aGF0IGV2ZW50cyB0cmlnZ2VyIHRoZWlyIGV4ZWN1dGlvbi4gS25vd2luZyB0aGUgdXNhZ2Ugd2lsbCBjbGFyaWZ5IHRoZSBwdXJwb3NlIGFuZCBiZWhhdmlvciBvZiB0aGUgZnVuY3Rpb25zIEknbSBsb29raW5nIGF0LiBJIG5lZWQgdG8gdHJhY2UgdGhlIHJlZmVyZW5jZXMgYW5kIHVuZGVyc3RhbmQgdGhlIGV4ZWN1dGlvbiBmbG93LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MzQ5LCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDU6Mzk6MjIuMjA4ODc4MzY3WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODI0NDcwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfc2tfc3RvcmFnZV9tYXBfc2VxX29wc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM9ODgxPXN0YXRpYyB2b2lkIGJwZl9pdGVyX2RldGFjaF9tYXAoc3RydWN0IGJwZl9pdGVyX2F1eF9pbmZvICphdXgpXFxuLS1cXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jLTg4NS1cXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jOjg4NjpzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIGJwZl9za19zdG9yYWdlX21hcF9zZXFfb3BzID0ge1xcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtODg3LVxcdC5zdGFydCAgPSBicGZfc2tfc3RvcmFnZV9tYXBfc2VxX3N0YXJ0LFxcbi0tXFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYz04OTM9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfaXRlcl9zZXFfaW5mbyBpdGVyX3NlcV9pbmZvID0ge1xcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM6ODk0OlxcdC5zZXFfb3BzXFx0XFx0PSBcXHUwMDI2YnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9vcHMsXFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy04OTUtXFx0LmluaXRfc2VxX3ByaXZhdGVcXHQ9IGJwZl9pdGVyX2luaXRfc2tfc3RvcmFnZV9tYXAsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA1OjM5OjIyLjI1NzEyNzYwNVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTYwMTI0NjQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqTXkgTGluZSBvZiBSZWFzb25pbmcgd2l0aCBgaXRlcl9zZXFfaW5mb2AqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgYGl0ZXJfc2VxX2luZm9gLiBTcGVjaWZpY2FsbHksIEkgc2VlIGl0J3MgZW1wbG95ZWQgd2l0aGluIGBicGZfc2tfc3RvcmFnZV9tYXBfaXRlcl9hdHRhY2hfdGFyZ2V0YC4gVGhhdCBpbW1lZGlhdGVseSBjbGlja3MgYSBmZXcgdGhpbmdzIGludG8gcGxhY2UuXG5cbktub3dpbmcgdGhhdCBmdW5jdGlvbiwgSSdtIGFscmVhZHkgdmlzdWFsaXppbmcgdGhlIGNvbnRleHQuIGBicGZfc2tfc3RvcmFnZV9tYXBfaXRlcl9hdHRhY2hfdGFyZ2V0YCBpcyBhbGwgYWJvdXQgaXRlcmF0aW5nIHRocm91Z2ggc29tZXRoaW5nIChsaWtlbHkgYSBtYXAgc3RvcmluZyBzb2NrZXQtcmVsYXRlZCBkYXRhKSBhbmQsIGNydWNpYWxseSwgKmF0dGFjaGluZyogYSB0YXJnZXQuIFRoYXQgXCJ0YXJnZXRcIiBjb3VsZCBiZSBhIEJQRiBwcm9ncmFtLCBhIHNwZWNpZmljIGhvb2ssIG9yIHNvbWV0aGluZyBzaW1pbGFyIOKAkyBpdCdzIHRoZSBwb2ludCBvZiB0aGUgaXRlcmF0aW9uLlxuXG5TbywgYGl0ZXJfc2VxX2luZm9gIGhhcyB0byBiZSBjcnVjaWFsIGluIGhlbHBpbmcgbWFuYWdlIHRoZSBzdGF0ZSBvZiBpdGVyYXRpb24gd2hlbiB0aGUgQlBGIHByb2dyYW0gZ29lcyB0byBhY2Nlc3MgdGhlIHN0b3JhZ2Ugb2YgYSBzcGVjaWZpYyBzb2NrZXQuIEl0J3MgYWxtb3N0IGNlcnRhaW4gaXQgdHJhY2tzIHRoZSBjdXJyZW50IHBvc2l0aW9uLCBtYXliZSBhIGtleSB0byBsb29rIGF0IHRoZSBzdG9yYWdlJ3MgbWFwLiBQcm9iYWJseSBpdCBtYWludGFpbnMgZW5vdWdoIGNvbnRleHQgc28gdGhhdCB0aGUgQlBGIHByb2dyYW0ga25vd3MgaG93IHRvIGxvb2sgdXAsIGFjY2VzcywgYW5kIHVwZGF0ZSB0aGUgYXNzb2NpYXRlZCBzb2NrZXQgc3RvcmFnZS5cblxuVGhlICdzZXEnIHBhcnQgc3VnZ2VzdHMgYW4gb3JkZXJlZCBzZXF1ZW5jZSwgbGlrZWx5IHBvaW50aW5nIHRvIHNvbWUgc29ydGVkIG5hdHVyZSBvZiB0aGUgc3RvcmFnZSBiZWluZyBpdGVyYXRlZCBvdmVyLiBUaGlzIGhhcyB0byBpbmZvcm0gdGhlIEJQRiBwcm9ncmFtIG9mIHdoZXJlIGl0IGlzIGluIHRoZSBpdGVyYWJsZSBzdGF0ZSwgYW5kIGhvdyBpdCBpcyB1cGRhdGVkIG9uIG5leHQgaXRlcmF0aW9ucy4gSXQgY291bGQgYmUgaW5kZXhpbmcgaW50byBhIGhhc2ggdGFibGUgb3IgYSBtb3JlIGNvbXBsZXggb3JkZXJlZCBkYXRhIHN0cnVjdHVyZS5cblxuVGhpcyB3aG9sZSBwaWN0dXJlIHJlaW5mb3JjZXMgdGhhdCB3ZSdyZSBkZWFsaW5nIHdpdGggYSBzb3BoaXN0aWNhdGVkIG1lY2hhbmlzbSB0byBpdGVyYXRlIHRocm91Z2ggYW5kIGFwcGx5IG9wZXJhdGlvbnMgdG8gbmV0d29yayBzb2NrZXRzLCBsaWtlbHkgd2l0aGluIHRoZSBCUEYgY29udGV4dC4gQW5kIGBpdGVyX3NlcV9pbmZvYCBpcyBhIGNvcmUgcGllY2Ugb2YgdGhhdCBwdXp6bGUuIE15IG5leHQgdGhvdWdodCB3b3VsZCBiZSB0byBkaWcgaW50byBob3cgdGhpcyBpcyBpbml0aWFsaXplZCBhbmQgdXBkYXRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDg4MiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA1OjM5OjI2LjIxNzI1NDg2NFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU3NDEwMDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXRlcl9zZXFfaW5mb1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM9ODg2PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9vcHMgPSB7XFxuLS1cXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jLTg5Mi1cXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jOjg5MzpzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9pdGVyX3NlcV9pbmZvIGl0ZXJfc2VxX2luZm8gPSB7XFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy04OTQtXFx0LnNlcV9vcHNcXHRcXHQ9IFxcdTAwMjZicGZfc2tfc3RvcmFnZV9tYXBfc2VxX29wcyxcXG4tLVxcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM9OTAwPXN0YXRpYyBzdHJ1Y3QgYnBmX2l0ZXJfcmVnIGJwZl9za19zdG9yYWdlX21hcF9yZWdfaW5mbyA9IHtcXG4tLVxcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtOTEyLVxcdH0sXFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYzo5MTM6XFx0LnNlcV9pbmZvXFx0XFx0PSBcXHUwMDI2aXRlcl9zZXFfaW5mbyxcXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jLTkxNC19O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNTozOToyNi4yNjI5OTg1MzJaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjE3OTMwMDIwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gZGVlcCBpbiB0aGUgd2VlZHMgb2YgZUJQRiBhbmQga2VybmVsIGludGVybmFsczpcblxuKiplQlBGIFNrX1N0b3JhZ2UgTWFwIFJlZ2lzdHJhdGlvbioqXG5cblJpZ2h0LCBzbyBgYnBmX3NrX3N0b3JhZ2VfbWFwX3JlZ19pbmZvYC4gVGhhdCdzIHRoZSByZWdpc3RyYXRpb24gc3RydWN0dXJlIGZvciB0aGUgc2tfc3RvcmFnZSBtYXAuIEFuZCBJIHNlZSB0aGF0IGl0J3MgYmVpbmcgcmVnaXN0ZXJlZCBkdXJpbmcgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBgYnBmX3NrX3N0b3JhZ2VfbWFwX2l0ZXJgLiBTcGVjaWZpY2FsbHksIGl0J3MgZ2V0dGluZyBzZXQgdXAgd2hlbiBgYnBmX3NrX3N0b3JhZ2VfbWFwX2l0ZXJfaW5pdGAgaXMgY2FsbGVkLiBUaGF0IG1ha2VzIHBlcmZlY3Qgc2Vuc2UuIFRoZSBpdGVyYXRvciBsaWtlbHkgbmVlZHMgdGhhdCByZWdpc3RyYXRpb24gaW5mb3JtYXRpb24gdG8gZnVuY3Rpb24gY29ycmVjdGx5LCBsZXR0aW5nIGl0IGtub3cgaG93IHRvIGludGVyYWN0IHdpdGggdGhlIHNrX3N0b3JhZ2UgbWFwIGR1cmluZyBpdGVyYXRpb24uIEknbGwgbmVlZCB0byByZW1lbWJlciB0aGF0IHdoZW4gSSdtIGRlYnVnZ2luZyBvciBleHRlbmRpbmcgdGhlIG1hcCdzIGJlaGF2aW91ciBsYXRlci5cblxuXG4iLCJJbnB1dFRva2VucyI6NTU5MywiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA1OjM5OjMyLjQ0MjMwMjg0OFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY2Mzg1NTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX3NrX3N0b3JhZ2VfbWFwX3JlZ19pbmZvXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYz04OTM9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfaXRlcl9zZXFfaW5mbyBpdGVyX3NlcV9pbmZvID0ge1xcbi0tXFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy04OTktXFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYzo5MDA6c3RhdGljIHN0cnVjdCBicGZfaXRlcl9yZWcgYnBmX3NrX3N0b3JhZ2VfbWFwX3JlZ19pbmZvID0ge1xcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtOTAxLVxcdC50YXJnZXRcXHRcXHRcXHQ9IFxcXCJicGZfc2tfc3RvcmFnZV9tYXBcXFwiLFxcbi0tXFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYz05MTY9c3RhdGljIGludCBfX2luaXQgYnBmX3NrX3N0b3JhZ2VfbWFwX2l0ZXJfaW5pdCh2b2lkKVxcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtOTE3LXtcXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jOjkxODpcXHRicGZfc2tfc3RvcmFnZV9tYXBfcmVnX2luZm8uY3R4X2FyZ19pbmZvWzBdLmJ0Zl9pZCA9XFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy05MTktXFx0XFx0YnRmX3NvY2tfaWRzW0JURl9TT0NLX1RZUEVfU09DS107XFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYzo5MjA6XFx0cmV0dXJuIGJwZl9pdGVyX3JlZ190YXJnZXQoXFx1MDAyNmJwZl9za19zdG9yYWdlX21hcF9yZWdfaW5mbyk7XFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy05MjEtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNTozOTozMi40ODg5NTAxODZaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjE2MjY0ODAyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBCUEYgSXRlcmF0b3IgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIEJQRiBpdGVyYXRvciBkZXNpZ25lZCBmb3IgdGhlIGBicGZfc2tfc3RvcmFnZV9tYXBgLiBUaGUga2V5IHRoaW5nIGhlcmUgaXMgdGhlIGFkZGl0aW9uIG9mIGEgbnVsbCBjaGVjayBmb3IgYHNrX3N0b3JhZ2VgLiBJdCdzIHByb3RlY3RpbmcgYWdhaW5zdCBhIGRlcmVmZXJlbmNlIGZyb20gYHNlbGVtLVx1MDAzZWxvY2FsX3N0b3JhZ2VgLCB3aGljaCBpcyBhIHNtYXJ0IG1vdmUg4oCTIGEgY2xhc3NpYyBwb3RlbnRpYWwgbnVsbCBwb2ludGVyIHZ1bG5lcmFiaWxpdHkuIEZ1bmN0aW9uYWxseSwgaXQncyBhIHNvbGlkIGZpeCwgYSBkZWZpbml0ZSBpbXByb3ZlbWVudC4gRGVmaW5pdGVseSBmdXp6LXdvcnRoeS5cblxuVGhlIGluaXRpYWwgdGhvdWdodCB3YXMgdG8gdGFyZ2V0IHN5bWJvbHMgbGlrZSBgYnBmX2l0ZXJfcmVnX3RhcmdldGAgb3IgbWF5YmUgZXZlbiB0aGUgQlBGIHN5c2NhbGwgZW50cnksIGJ1dCBteSBnb2FsIGlzIHRvIHN0YXkgYXdheSBmcm9tIGhvdCBwYXRocy4gVGhpcyBwYXRjaCBpcyBhYm91dCBhIHBvdGVudGlhbCBjcmFzaCwgYW5kIGhvdCBwYXRocyBhcmUgcHJvYmFibHkgbGVzcyBsaWtlbHkgdG8gZXhwb3NlIGl0IGluIHByYWN0aWNlLlxuXG5IYW5nIG9uLi4uIGBicGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3dgIGlzIHN0YXRpYywgd2hpY2ggaXMgdXN1YWxseSBub3QgaWRlYWwsIGJ1dCBpdCdzICpjYWxsZWQqIHdoZW4gcmVhZGluZyBmcm9tIHRoZSBpdGVyYXRvcidzIHNlcV9maWxlLiBUaGF0J3MgaW50ZXJlc3RpbmcsIGFuZCB3b3J0aCBkaWdnaW5nIGludG8uIExldCdzIHNlZS4uLiBUaGUgaXRlcmF0b3IncyBzZXFfZmlsZSBpcyBjcmVhdGVkIGJ5IGBicGZfaXRlcl9jcmVhdGVgIGFuZCByZWFkIHZpYSB0aGUgc3RhbmRhcmQgYHZmc19yZWFkYCAtXHUwMDNlIGBzZXFfcmVhZGAgcGF0aC4gU28gaXQncyBzdGlsbCBiZWluZyBleHBvc2VkLCBpZiBsZXNzIGRpcmVjdGx5LlxuXG5IbW0sIG9rYXkuIExldCBtZSBzZWUgaWYgdGhlcmUncyBhbnl0aGluZyBub24tc3RhdGljIGluIGBuZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jYCB0aGF0IGNvdWxkIGJlIGEgYmV0dGVyIGZvY2FsIHBvaW50IGZvciBmdXp6aW5nLiBQZXJoYXBzIHNvbWV0aGluZyByZWxhdGVkIHRvIHRoZSBpbml0aWFsIHNldHVwLCBvciBjbGVhbnVwLCByYXRoZXIgdGhhbiBqdXN0IHRoZSBzZXFfZmlsZSBkaXNwbGF5LiBJJ2xsIG5lZWQgdG8gcmV2aWV3IHRoZSBjb2RlIHRvIGlkZW50aWZ5IG90aGVyIHBvdGVudGlhbCBlbnRyeSBwb2ludHMgZm9yIHRoaXMgbWFwIGFuZCBpdGVyYXRvciBsb2dpYy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjE4MSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNTozOTozOC42NTE2MDA1MzNaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NDA3MTQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5pbnQgXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYz0xMzQ9YnBmX3NrX3N0b3JhZ2VfY2xvbmVfZWxlbShzdHJ1Y3Qgc29jayAqbmV3c2ssXFxuLS1cXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jLTE1My1cXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jOjE1NDppbnQgYnBmX3NrX3N0b3JhZ2VfY2xvbmUoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29jayAqbmV3c2spXFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy0xNTUte1xcbi0tXFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYz01Njg9c3RhdGljIGludCBicGZfc2tfc3RvcmFnZV9kaWFnX3B1dF9hbGwoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy02MjMtXFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYzo2MjQ6aW50IGJwZl9za19zdG9yYWdlX2RpYWdfcHV0KHN0cnVjdCBicGZfc2tfc3RvcmFnZV9kaWFnICpkaWFnLFxcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtNjI1LVxcdFxcdFxcdCAgICBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA1OjM5OjM4LjY5NzAxNTMzMVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MjE3MzUzNjc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFwcHJvYWNoIHRvIElkZW50aWZ5aW5nIE5vbi1TdGF0aWMgRnVuY3Rpb25zKipcblxuT2theSwgc28gSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgaWYgdGhlcmUgYXJlIGFueSBub24tc3RhdGljIGZ1bmN0aW9ucyBoYW5naW5nIGFyb3VuZCBpbiB0aGUgY29kZS4gTXkgZ28tdG8gc3RyYXRlZ3kgaGVyZSBpcyB0byBsZXZlcmFnZSB0aGUgcGF0dGVybnMgSSBrbm93IGFyZSBsaWtlbHkgdG8gYmUgcHJlc2VudC4gSSdtIGdvaW5nIHRvIHNjYW4gdGhlIGNvZGUgZm9yIHRoZSBjb21tb24gcHJlZml4ZXMgdGhhdCBvZnRlbiBwcmVjZWRlIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucywgc3BlY2lmaWNhbGx5IHRoaW5ncyBsaWtlIGBedm9pZCBgLCBgXnN0cnVjdCBgLCBvciBgXnN0YXRpYyBgLiBUaGlua2luZyBvdXQgbG91ZCwgSSBjYW4gcXVpY2tseSBzY2FuIGZvciB0aGVzZSBwYXR0ZXJucy4gQnkgdXNpbmcgdGhlc2UgcHJlZml4ZXMsIEkgY2FuIGZpbHRlciBvdXQgdGhlIGZ1bmN0aW9ucyBJJ20gbm90IGxvb2tpbmcgZm9yLiBUaGlzIHNob3VsZCBlZmZpY2llbnRseSBpZGVudGlmeSB0aG9zZSBmdW5jdGlvbnMgd2l0aG91dCB0aGUgYHN0YXRpY2Aga2V5d29yZCwgaGVscGluZyBtZSBob25lIGluIG9uIHRoZSBleGFjdCBiaXRzIG9mIGNvZGUgSSBuZWVkIHRvIGludmVzdGlnYXRlIGZ1cnRoZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcwMzYsIk91dHB1dFRva2VucyI6NDcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNTozOTo0My45MTQzNzE3MzZaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MzMyOTg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5bYS16QS1aX10uKiBicGZfc2tfc3RvcmFnZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM9MjE9YnBmX3NrX3N0b3JhZ2VfbG9va3VwKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGJwZl9tYXAgKm1hcCwgYm9vbCBjYWNoZWl0X2xvY2tpdClcXG4tLVxcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtMzQtXFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYzozNTpzdGF0aWMgaW50IGJwZl9za19zdG9yYWdlX2RlbChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBicGZfbWFwICptYXApXFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy0zNi17XFxuLS1cXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jLTQ2LS8qIENhbGxlZCBieSBfX3NrX2Rlc3RydWN0KCkgXFx1MDAyNiBicGZfc2tfc3RvcmFnZV9jbG9uZSgpICovXFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYzo0Nzp2b2lkIGJwZl9za19zdG9yYWdlX2ZyZWUoc3RydWN0IHNvY2sgKnNrKVxcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtNDgte1xcbi0tXFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy02My1cXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jOjY0OnN0YXRpYyB2b2lkIGJwZl9za19zdG9yYWdlX21hcF9mcmVlKHN0cnVjdCBicGZfbWFwICptYXApXFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy02NS17XFxuLS1cXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jPTEzND1icGZfc2tfc3RvcmFnZV9jbG9uZV9lbGVtKHN0cnVjdCBzb2NrICpuZXdzayxcXG4tLVxcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtMTUzLVxcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM6MTU0OmludCBicGZfc2tfc3RvcmFnZV9jbG9uZShjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICpuZXdzaylcXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jLTE1NS17XFxuLS1cXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jPTI2Mj1CUEZfQ0FMTF8yKGJwZl9za19zdG9yYWdlX2RlbGV0ZSwgc3RydWN0IGJwZl9tYXAgKiwgbWFwLCBzdHJ1Y3Qgc29jayAqLCBzaylcXG4tLVxcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtMjc4LVxcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM6Mjc5OnN0YXRpYyBpbnQgYnBmX3NrX3N0b3JhZ2VfY2hhcmdlKHN0cnVjdCBicGZfbG9jYWxfc3RvcmFnZV9tYXAgKnNtYXAsXFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy0yODAtXFx0XFx0XFx0XFx0IHZvaWQgKm93bmVyLCB1MzIgc2l6ZSlcXG4tLVxcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtMjk1LVxcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM6Mjk2OnN0YXRpYyB2b2lkIGJwZl9za19zdG9yYWdlX3VuY2hhcmdlKHN0cnVjdCBicGZfbG9jYWxfc3RvcmFnZV9tYXAgKnNtYXAsXFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy0yOTctXFx0XFx0XFx0XFx0ICAgIHZvaWQgKm93bmVyLCB1MzIgc2l6ZSlcXG4tLVxcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM9MzEyPWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBza19zdG9yYWdlX21hcF9vcHMgPSB7XFxuLS1cXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jLTMyOC1cXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jOjMyOTpjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrX3N0b3JhZ2VfZ2V0X3Byb3RvID0ge1xcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtMzMwLVxcdC5mdW5jXFx0XFx0PSBicGZfc2tfc3RvcmFnZV9nZXQsXFxuLS1cXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jLTMzOC1cXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jOjMzOTpjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrX3N0b3JhZ2VfZ2V0X2NnX3NvY2tfcHJvdG8gPSB7XFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy0zNDAtXFx0LmZ1bmNcXHRcXHQ9IGJwZl9za19zdG9yYWdlX2dldCxcXG4tLVxcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtMzQ4LVxcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM6MzQ5OmNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tfc3RvcmFnZV9kZWxldGVfcHJvdG8gPSB7XFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy0zNTAtXFx0LmZ1bmNcXHRcXHQ9IGJwZl9za19zdG9yYWdlX2RlbGV0ZSxcXG4tLVxcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtMzU2LVxcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM6MzU3OnN0YXRpYyBib29sIGJwZl9za19zdG9yYWdlX3RyYWNpbmdfYWxsb3dlZChjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy0zNTgte1xcbi0tXFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYz0zOTM9QlBGX0NBTExfMihicGZfc2tfc3RvcmFnZV9kZWxldGVfdHJhY2luZywgc3RydWN0IGJwZl9tYXAgKiwgbWFwLFxcbi0tXFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy00MDItXFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYzo0MDM6Y29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za19zdG9yYWdlX2dldF90cmFjaW5nX3Byb3RvID0ge1xcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtNDA0LVxcdC5mdW5jXFx0XFx0PSBicGZfc2tfc3RvcmFnZV9nZXRfdHJhY2luZyxcXG4tLVxcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtNDE0LVxcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM6NDE1OmNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tfc3RvcmFnZV9kZWxldGVfdHJhY2luZ19wcm90byA9IHtcXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jLTQxNi1cXHQuZnVuY1xcdFxcdD0gYnBmX3NrX3N0b3JhZ2VfZGVsZXRlX3RyYWNpbmcsXFxuLS1cXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jLTQyNC1cXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jOjQyNTpzdHJ1Y3QgYnBmX3NrX3N0b3JhZ2VfZGlhZyB7XFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy00MjYtXFx0dTMyIG5yX21hcHM7XFxuLS1cXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jPTQ0MD1zdGF0aWMgaW50IG5sYV92YWx1ZV9zaXplKHUzMiB2YWx1ZV9zaXplKVxcbi0tXFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy00NDktXFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYzo0NTA6dm9pZCBicGZfc2tfc3RvcmFnZV9kaWFnX2ZyZWUoc3RydWN0IGJwZl9za19zdG9yYWdlX2RpYWcgKmRpYWcpXFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy00NTEte1xcbi0tXFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYz00NjI9RVhQT1JUX1NZTUJPTF9HUEwoYnBmX3NrX3N0b3JhZ2VfZGlhZ19mcmVlKTtcXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jLTQ2My1cXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jOjQ2NDpzdGF0aWMgYm9vbCBkaWFnX2NoZWNrX2R1cChjb25zdCBzdHJ1Y3QgYnBmX3NrX3N0b3JhZ2VfZGlhZyAqZGlhZyxcXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jLTQ2NS1cXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwKVxcbi0tXFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy00NzYtXFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYzo0Nzc6c3RydWN0IGJwZl9za19zdG9yYWdlX2RpYWcgKlxcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtNDc4LWJwZl9za19zdG9yYWdlX2RpYWdfYWxsb2MoY29uc3Qgc3RydWN0IG5sYXR0ciAqbmxhX3N0Z3MpXFxuLS1cXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jPTUzMj1zdGF0aWMgaW50IGRpYWdfZ2V0KHN0cnVjdCBicGZfbG9jYWxfc3RvcmFnZV9tYXAgKnNtYXAsXFxuLS1cXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jLTU2Ny1cXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jOjU2ODpzdGF0aWMgaW50IGJwZl9za19zdG9yYWdlX2RpYWdfcHV0X2FsbChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy01NjktXFx0XFx0XFx0XFx0ICAgICAgIGludCBzdGdfYXJyYXlfdHlwZSxcXG4tLVxcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtNjIzLVxcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM6NjI0OmludCBicGZfc2tfc3RvcmFnZV9kaWFnX3B1dChzdHJ1Y3QgYnBmX3NrX3N0b3JhZ2VfZGlhZyAqZGlhZyxcXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jLTYyNS1cXHRcXHRcXHQgICAgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYz03OTI9c3RhdGljIGludCBfX2JwZl9za19zdG9yYWdlX21hcF9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSxcXG4tLVxcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtODE5LVxcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM6ODIwOnN0YXRpYyBpbnQgYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtODIxLXtcXG4tLVxcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtODI0LVxcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM6ODI1OnN0YXRpYyB2b2lkIGJwZl9za19zdG9yYWdlX21hcF9zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdilcXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jLTgyNi1cXHRfX3JlbGVhc2VzKFJDVSlcXG4tLVxcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM9ODgxPXN0YXRpYyB2b2lkIGJwZl9pdGVyX2RldGFjaF9tYXAoc3RydWN0IGJwZl9pdGVyX2F1eF9pbmZvICphdXgpXFxuLS1cXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jLTg4NS1cXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jOjg4NjpzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIGJwZl9za19zdG9yYWdlX21hcF9zZXFfb3BzID0ge1xcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtODg3LVxcdC5zdGFydCAgPSBicGZfc2tfc3RvcmFnZV9tYXBfc2VxX3N0YXJ0LFxcbi0tXFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYz04OTM9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfaXRlcl9zZXFfaW5mbyBpdGVyX3NlcV9pbmZvID0ge1xcbi0tXFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy04OTktXFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYzo5MDA6c3RhdGljIHN0cnVjdCBicGZfaXRlcl9yZWcgYnBmX3NrX3N0b3JhZ2VfbWFwX3JlZ19pbmZvID0ge1xcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtOTAxLVxcdC50YXJnZXRcXHRcXHRcXHQ9IFxcXCJicGZfc2tfc3RvcmFnZV9tYXBcXFwiLFxcbi0tXFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy05MTUtXFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYzo5MTY6c3RhdGljIGludCBfX2luaXQgYnBmX3NrX3N0b3JhZ2VfbWFwX2l0ZXJfaW5pdCh2b2lkKVxcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtOTE3LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDU6Mzk6NDMuOTYwNzA5NjEzWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc3ODk1NzE3NjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyB0aGUgQlBGIHNrX3N0b3JhZ2UgTWFwIEl0ZXJhdG9yKipcblxuT2theSwgc28gSSdtIHRhY2tsaW5nIGhvdyB0byBmdXp6IHRoZSBgYnBmX3NrX3N0b3JhZ2VfbWFwYCBpdGVyYXRvci4gSXQgbG9va3MgbGlrZSBpdCdzIHJlZ2lzdGVyZWQgdGhyb3VnaCBgYnBmX2l0ZXJfcmVnX3RhcmdldGAsIHdoaWNoIGdpdmVzIG1lIGEgc3RhcnRpbmcgcG9pbnQuIFRvIHRyaWdnZXIgdGhpcyB3aXRoIHN5emthbGxlciwgdGhlIGNvcmUgaWRlYSBpcyB0byBjcmVhdGUgYSBCUEYgaXRlcmF0b3IgZm9yIHRoaXMgbWFwIHR5cGUgYW5kIHRoZW4gcmVhZCBmcm9tIGl0LiBUaGF0IG1lYW5zIEknbSBsb29raW5nIGF0IGBicGYoQlBGX0lURVJfQ1JFQVRFKWAgYW5kIHRoZW4gYSBgcmVhZCgpYCBzeXNjYWxsLiBTdHJhaWdodGZvcndhcmQuXG5cblRoZSBmdW5jdGlvbiB0aGF0IGFjdHVhbGx5IGhhbmRsZXMgdGhlIHNob3dpbmcgb2YgdGhlIGRhdGEgaXMgYGJwZl9za19zdG9yYWdlX21hcF9zZXFfc2hvd2AuIE5vdywgdGhlIHRyaWNreSBwYXJ0IGlzIHN5bWJvbCBleHBvc3VyZSBmb3Igc3l6a2FsbGVyLiAgSSBpbml0aWFsbHkgdGhvdWdodCBhYm91dCBpbmNsdWRpbmcgYGJwZl9pdGVyX3JlZ190YXJnZXRgIGluIHRoZSBgRm9jdXNTeW1ib2xzYCwgYnV0IHRoYXQncyBhbiBpbml0aWFsaXphdGlvbiBmdW5jdGlvbi4gIFRoZW4gSSBjb25zaWRlcmVkIGBicGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3dgLCBldmVuIHRob3VnaCBpdCdzIHN0YXRpYy4gVGhlIHByb21wdCBzYXlzIHRvIGZhdm9yIG5vbi1zdGF0aWMgZnVuY3Rpb25zLCBhcyBzdGF0aWMgZnVuY3Rpb25zICptaWdodCogYmUgaW5saW5lZC5cblxuSG93ZXZlciwgYSBjbG9zZXIgbG9vayBhdCB0aGUgY29kZSByZXZlYWxzIGEgbnVhbmNlLiBUaGUgYWRkcmVzcyBvZiBgYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zaG93YCAqaXMqIHRha2VuIHdpdGhpbiBgYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9vcHNgLCBzbyBpdCBwcm9iYWJseSB3b24ndCBiZSBpbmxpbmVkLiBCdXQgd2FpdCwgdGhlIGtleSBwaHJhc2UgaXMgXCJub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnNcIi4gQW0gSSBtaXNzaW5nIGEgaGlnaGVyLWxldmVsIGVudHJ5cG9pbnQ/XG5cbkJpbmdvISAgVGhlIGFjdHVhbCBlbnRyeXBvaW50IHRvIHRoZSB1c2VyLXNwYWNlIGludGVyZmFjZSBpcyBgc2VxX3JlYWRgLCB3aGljaCBldmVudHVhbGx5IGNhbGxzIHRoYXQgYC1cdTAwM2VzaG93YCBmdW5jdGlvbi4gU28sIGluc3RlYWQgb2YgZGlyZWN0bHkgdGFyZ2V0aW5nIGEgc3RhdGljIGhlbHBlciwgSSBzaG91bGQgYmUgbG9va2luZyBhdCBgc2VxX3JlYWRgLiBOb3cgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgc2VxX3JlYWRgIGlzIGF2YWlsYWJsZSB0byB0aGUgZnV6emVyLiBMZXQncyBkaXZlIGludG8gYG5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmNgIGFnYWluLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NzExLCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzM3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA1OjM5OjUxLjc1MDI4MzYzWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjIxOTM0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jPTc4OD1ERUZJTkVfQlBGX0lURVJfRlVOQyhicGZfc2tfc3RvcmFnZV9tYXAsIHN0cnVjdCBicGZfaXRlcl9tZXRhICptZXRhLFxcbi0tXFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy03OTEtXFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYzo3OTI6c3RhdGljIGludCBfX2JwZl9za19zdG9yYWdlX21hcF9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSxcXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jLTc5My1cXHRcXHRcXHRcXHRcXHQgc3RydWN0IGJwZl9sb2NhbF9zdG9yYWdlX2VsZW0gKnNlbGVtKVxcbi0tXFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy04MTktXFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYzo4MjA6c3RhdGljIGludCBicGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy04MjEte1xcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM6ODIyOlxcdHJldHVybiBfX2JwZl9za19zdG9yYWdlX21hcF9zZXFfc2hvdyhzZXEsIHYpO1xcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtODIzLX1cXG4tLVxcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM9ODI1PXN0YXRpYyB2b2lkIGJwZl9za19zdG9yYWdlX21hcF9zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdilcXG4tLVxcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtODI4LVxcdGlmICghdilcXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jOjgyOTpcXHRcXHQodm9pZClfX2JwZl9za19zdG9yYWdlX21hcF9zZXFfc2hvdyhzZXEsIHYpO1xcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtODMwLVxcdGVsc2VcXG4tLVxcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM9ODg2PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9vcHMgPSB7XFxuLS1cXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jLTg4OS1cXHQuc3RvcCAgID0gYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zdG9wLFxcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM6ODkwOlxcdC5zaG93ICAgPSBicGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3csXFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy04OTEtfTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDU6Mzk6NTEuNzk2NTA1NDI3WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyMTQxODE5NjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzOlxuXG4qKkZvY3VzaW5nIG9uIEJQRiBJdGVyYXRvciBGdW5jdGlvbnMqKlxuXG5BbHJpZ2h0LCBmb3IgdGhpcyB0YXNrLCBJJ20gdGhpbmtpbmcgYWJvdXQgdXRpbGl6aW5nIHRoZSBgYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zaG93YCBhbmQgYGJwZl9za19zdG9yYWdlX21hcF9zZXFfc3RvcGAgZnVuY3Rpb25zIGFzIG15IHByaW1hcnkgRm9jdXNTeW1ib2xzLiBUaGF0IGFwcHJvYWNoIHNob3VsZCBiZSBwcmV0dHkgZGlyZWN0LiBCdXQsIGhhbmcgb24sIHRoZXJlJ3MgYWxzbyBgYnBmX2l0ZXJfaW5pdF9za19zdG9yYWdlX21hcGAuIFRoYXQgYWN0dWFsbHkgc291bmRzIGxpa2UgaXQgY291bGQgYmUgZXZlbiAqYmV0dGVyKiBmb3IgbXkgcHVycG9zZXMsIHBlcmhhcHMgb2ZmZXJpbmcgYSBtb3JlIHN0cmVhbWxpbmVkIGFwcHJvYWNoIHRvIGluaXRpYWxpemluZyB0aGUgaXRlcmF0aW9uLiBJIHNob3VsZCBxdWlja2x5IHZlcmlmeSB0aGF0IHRoYXQgcGFydGljdWxhciBmdW5jdGlvbiBpcyBhY3R1YWxseSBhdmFpbGFibGUgaW4gdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQgb3Iga2VybmVsIHZlcnNpb24uIEl0J3MgY3J1Y2lhbCB0byBjb25maXJtIGl0cyBleGlzdGVuY2UgYmVmb3JlIEkgZnVsbHkgY29tbWl0IHRvIGl0IGFzIG15IHByaW1hcnkgYXBwcm9hY2guIEkgbmVlZCB0byBlbnN1cmUgaXQncyBhIHZpYWJsZSBvcHRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMDU5LCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDU6Mzk6NTYuMDEwNjg5Njk3WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTgwMzk0NjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX2l0ZXJfaW5pdF9za19zdG9yYWdlX21hcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM9ODI1PXN0YXRpYyB2b2lkIGJwZl9za19zdG9yYWdlX21hcF9zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdilcXG4tLVxcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtODMzLVxcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM6ODM0OnN0YXRpYyBpbnQgYnBmX2l0ZXJfaW5pdF9za19zdG9yYWdlX21hcCh2b2lkICpwcml2X2RhdGEsXFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy04MzUtXFx0XFx0XFx0XFx0XFx0c3RydWN0IGJwZl9pdGVyX2F1eF9pbmZvICphdXgpXFxuLS1cXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jPTg5Mz1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9pdGVyX3NlcV9pbmZvIGl0ZXJfc2VxX2luZm8gPSB7XFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy04OTQtXFx0LnNlcV9vcHNcXHRcXHQ9IFxcdTAwMjZicGZfc2tfc3RvcmFnZV9tYXBfc2VxX29wcyxcXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jOjg5NTpcXHQuaW5pdF9zZXFfcHJpdmF0ZVxcdD0gYnBmX2l0ZXJfaW5pdF9za19zdG9yYWdlX21hcCxcXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jLTg5Ni1cXHQuZmluaV9zZXFfcHJpdmF0ZVxcdD0gYnBmX2l0ZXJfZmluaV9za19zdG9yYWdlX21hcCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDU6Mzk6NTYuMjI4NzMyNjk4WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgzNTg5MTc4NjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipEaXZpbmcgaW50byBgYnBmX3NrX3N0b3JhZ2VfbWFwX2l0ZXJfYXR0YWNoX3RhcmdldGAqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gYGJwZl9za19zdG9yYWdlX21hcF9pdGVyX2F0dGFjaF90YXJnZXRgLiBJJ20gZ29pbmcgdG8gcXVpY2tseSByZXZpZXcgaXRzIHB1cnBvc2UgaW4gdGhlIGNvbnRleHQgb2Ygc2sgc3RvcmFnZSwgbWFwIGl0ZXJhdGlvbiwgYW5kIHRhcmdldCBhdHRhY2htZW50LiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgbGlrZWx5IG9uIGhvdyBpdCBpbnRlZ3JhdGVzIHdpdGggdGhlIG92ZXJhbGwgbGlmZWN5Y2xlIG9mIGEgc29ja2V0J3MgZXh0ZW5kZWQgQlBGIGRhdGEuXG5cbldoYXQgYXJlIHRoZSBjcml0aWNhbCBhc3BlY3RzIEknbSBsb29raW5nIGZvcj8gU3BlY2lmaWNhbGx5OlxuXG4qICAgKipBdHRhY2htZW50IFBvaW50czoqKiBXaGVyZSBkb2VzIHRoaXMgZnVuY3Rpb24gZml0IHdpdGhpbiB0aGUgb3ZlcmFsbCBCUEYgcHJvZ3JhbSBleGVjdXRpb24gb24gc29ja2V0cz8gQXJlIHdlIHRhbGtpbmcgYWJvdXQgaW5ncmVzcywgZWdyZXNzLCBvciBzb21ldGhpbmcgbW9yZSBzcGVjaWFsaXplZD9cbiogICAqKlRhcmdldGluZzoqKiBJIHdhbnQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoZSBcInRhcmdldFwiIHJlZmVycyB0by4gSXMgaXQgYW5vdGhlciBCUEYgcHJvZ3JhbSwgYSBzcGVjaWZpYyBzb2NrZXQgc3RydWN0dXJlLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVGhlIGludGVyYWN0aW9uIGJldHdlZW4gdGhlIGl0ZXJhdG9ycyBhbmQgdGhlIHRhcmdldCBuZWVkcyBjbGFyaWZpY2F0aW9uLlxuKiAgICoqRXJyb3IgQ29uZGl0aW9ucyBhbmQgSGFuZGxpbmc6KiogV2hhdCBhcmUgdGhlIHBvc3NpYmxlIGZhaWx1cmUgbW9kZXMgb2YgdGhpcyBmdW5jdGlvbj8gSG93IHJvYnVzdCBpcyBpdHMgZXJyb3IgaGFuZGxpbmcsIGFuZCB3aGF0IGtpbmQgb2YgZmVlZGJhY2sgZG9lcyBpdCBwcm92aWRlPyBJIG5lZWQgdG8gYmUgYXdhcmUgb2YgdGhlIGNvbnN0cmFpbnRzIGFuZCBsaW1pdGF0aW9ucy5cbiogICAqKlJlc291cmNlIE1hbmFnZW1lbnQ6KiogSSdsbCBiZSBsb29raW5nIHRvIHNlZSBpZiB0aGUgZnVuY3Rpb24gcHJvcGVybHkgbWFuYWdlcyBpdHMgcmVzb3VyY2VzLiBBcmUgdGhlcmUgcG90ZW50aWFsIG1lbW9yeSBsZWFrcyBvciByYWNlIGNvbmRpdGlvbnM/XG4qICAgKipDb25jdXJyZW5jeToqKiBIb3cgZG9lcyB0aGlzIGZ1bmN0aW9uIGhhbmRsZSBjb25jdXJyZW50IGFjY2VzcywgcGFydGljdWxhcmx5IHdpdGhpbiBhIG11bHRpLXRocmVhZGVkIGVudmlyb25tZW50PyBEb2VzIGl0IGVtcGxveSBhbnkgbG9ja2luZyBtZWNoYW5pc21zIG9yIGF0b21pYyBvcGVyYXRpb25zP1xuKiAgICoqUGVyZm9ybWFuY2U6KiogSSBzaG91bGQgYWxzbyBxdWlja2x5IGNvbnNpZGVyIHRoZSBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgaW1wYWN0LiBJcyB0aGlzIGZ1bmN0aW9uIGEgYm90dGxlbmVjayBpbiBjZXJ0YWluIHNjZW5hcmlvcywgYW5kIGRvZXMgaXQgdXNlIGFueSBvcHRpbWl6YXRpb24gdGVjaG5pcXVlcz9cblxuSSdsbCBzdGFydCB3aXRoIHRoZSBzb3VyY2UgY29kZSBhbmQgcmVsZXZhbnQgZG9jdW1lbnRhdGlvbiwga2VlcGluZyB0aGVzZSBrZXkgYXJlYXMgaW4gbWluZC4gVW5kZXJzdGFuZGluZyBob3cgdGhpcyBmdW5jdGlvbiBtYW5hZ2VzIGF0dGFjaGluZyBhIHRhcmdldCBpcyBjcnVjaWFsIGZvciBjb21wcmVoZW5kaW5nIGEgbGFyZ2VyIEJQRiBzeXN0ZW0ncyBzb2NrZXQgZGF0YSBwcm9jZXNzaW5nIGFyY2hpdGVjdHVyZS4gSSBzaG91bGQgYWxzbyBjaGVjayB0aGUgc3Vycm91bmRpbmcgY29kZSBmb3IgY2x1ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNjU4LCJPdXRwdXRUb2tlbnMiOjQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDU6NDA6MDQuNTg3NjUzMDk4WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Nzk3NTM1OCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX3NrX3N0b3JhZ2VfbWFwX2l0ZXJfYXR0YWNoX3RhcmdldFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNTo0MDowNC42MzU2MzI0NTZaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM0NDIxOTYwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkNvbm5lY3RpbmcgdGhlIERvdHMgaW4gdGhlIEJQRiBMYW5kKipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSB3YXMganVzdCByZXZpZXdpbmcgdGhlIGBicGZfc2tfc3RvcmFnZV9tYXBfcmVnX2luZm9gIGZ1bmN0aW9uLCB0cmFjaW5nIGl0cyBkZXBlbmRlbmNpZXMsIGFuZCB0aGVuIGl0IGhpdCBtZS4gSSBzZWUgdGhhdCBgaXRlcl9zZXFfaW5mb2AgZnVuY3Rpb24gaXMgYWN0dWFsbHkgYmVpbmcgKnVzZWQqIGluIHRoZXJlLiBUaGlzIGlzIGEga2V5IG9ic2VydmF0aW9uLiBQcmV2aW91c2x5LCBteSBtZW50YWwgbW9kZWwgcHJvYmFibHkgaGFkIHRoZXNlIGFzIHNvbWV3aGF0IGRpc3RpbmN0IG1vZHVsZXMsIG5vdyBJIHNlZSB0aGUgZmxvdy4gSSBrbm93IHdoYXQgYGl0ZXJfc2VxX2luZm9gIGRvZXMsIGFuZCBpdHMgaW1wbGljYXRpb25zIG9uIHRoZSBiaWdnZXIgcGljdHVyZS4gVGhpcyBoYXMgc29tZSB2ZXJ5IGludGVyZXN0aW5nIGltcGxpY2F0aW9ucyBmb3Igc3RhdGUgbWFuYWdlbWVudCBhbmQgaG93IHdlJ3JlIGRlYWxpbmcgd2l0aCBpdGVyYXRpbmcgb3ZlciB0aGUgZGF0YS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIxNTEsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNTo0MDowOC45Nzk4NTQ4MVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ0NjExNjA0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9za19zdG9yYWdlX21hcF9yZWdfaW5mb1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM9ODkzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2l0ZXJfc2VxX2luZm8gaXRlcl9zZXFfaW5mbyA9IHtcXG4tLVxcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtODk5LVxcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM6OTAwOnN0YXRpYyBzdHJ1Y3QgYnBmX2l0ZXJfcmVnIGJwZl9za19zdG9yYWdlX21hcF9yZWdfaW5mbyA9IHtcXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jLTkwMS1cXHQudGFyZ2V0XFx0XFx0XFx0PSBcXFwiYnBmX3NrX3N0b3JhZ2VfbWFwXFxcIixcXG4tLVxcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM9OTE2PXN0YXRpYyBpbnQgX19pbml0IGJwZl9za19zdG9yYWdlX21hcF9pdGVyX2luaXQodm9pZClcXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jLTkxNy17XFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYzo5MTg6XFx0YnBmX3NrX3N0b3JhZ2VfbWFwX3JlZ19pbmZvLmN0eF9hcmdfaW5mb1swXS5idGZfaWQgPVxcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtOTE5LVxcdFxcdGJ0Zl9zb2NrX2lkc1tCVEZfU09DS19UWVBFX1NPQ0tdO1xcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM6OTIwOlxcdHJldHVybiBicGZfaXRlcl9yZWdfdGFyZ2V0KFxcdTAwMjZicGZfc2tfc3RvcmFnZV9tYXBfcmVnX2luZm8pO1xcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtOTIxLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDU6NDA6MDkuMTI0NDcxMTMzWiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwNjMxMTA0MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipLZXJuZWwgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgaW5pdGlhbCBjb25jZXJuIGlzIHRoZSBgQlBGX1NZU0NBTExgIGNvbmZpZyBvcHRpb24uIFRoYXQncyBhIGtleSBvbmUsIG5vIHF1ZXN0aW9uLiBXZSBuZWVkIHRvIGJlIGFic29sdXRlbHkgc3VyZSB0aGF0J3MgZW5hYmxlZC4gQnV0IGxldCdzIG5vdCBqdW1wIHRvIGNvbmNsdXNpb25zLiBCZWZvcmUgSSBkaXZlIGRlZXAgaW50byB0aGlzIHNwZWNpZmljIGlzc3VlLCBJIG5lZWQgdG8gdGFrZSBhIHF1aWNrIGxvb2sgYXJvdW5kLiBNeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIHJ1biB0aHJvdWdoIHRoZSByZWxhdGVkIGNvbmZpZ3MsIG1heWJlIHRoZXJlJ3Mgc29tZXRoaW5nIGVsc2Ugd2UgbmVlZC4gSXQncyB0b28gcmlza3kgdG8gYXNzdW1lIGEgc2luZ2xlIGRlcGVuZGVuY3kgaXMgYWxsIHRoYXQgbWF0dGVycy4gSXQncyBwb3NzaWJsZSB0aGVyZSBhcmUgYSB3aG9sZSBidW5jaCBvZiB1bmRlcmx5aW5nIHN1cHBvcnQgc3RydWN0dXJlcyB3ZSBuZWVkIHRvIGNvbnNpZGVyLCBlc3BlY2lhbGx5IHdpdGggYW55dGhpbmcgQlBGIHJlbGF0ZWQuIExldCdzIHNlZSB3aGF0IGVsc2UgbWlnaHQgYmUgbHVya2luZyBpbiB0aGUgc2hhZG93cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI3MTksIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNTo0MDoxNC4xODc1ODMyODZaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NjQzMzkyNjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJQRl9TWVNDQUxMXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL0tjb25maWc9MjU9bWVudSBcXFwiQlBGIHN1YnN5c3RlbVxcXCJcXG5rZXJuZWwvYnBmL0tjb25maWctMjYtXFxua2VybmVsL2JwZi9LY29uZmlnOjI3OmNvbmZpZyBCUEZfU1lTQ0FMTFxcbmtlcm5lbC9icGYvS2NvbmZpZy0yOC1cXHRib29sIFxcXCJFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA1OjQwOjE1Ljg1MTkyNzc3NFoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5ODAyODMwOTI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEJQRiBQb3RlbnRpYWwgVnVsbmVyYWJpbGl0eSBGaXgqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCBzZWVtcyBsaWtlIHdlJ3ZlIGdvdCBhIGZpeCBmb3IgYSBwb3NzaWJsZSBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2Ugd2l0aGluIHRoZSBgX19icGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3dgIGZ1bmN0aW9uLiBUaGF0J3MgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHRocm91Z2ggdGhlIEJQRiBpdGVyYXRvciwgd2hpY2ggaXMgYWx3YXlzIHNvbWV0aGluZyB0byBwYXkgYXR0ZW50aW9uIHRvLiBJbW1lZGlhdGVseSwgSSB6ZXJvIGluIG9uIGBfX2JwZl9za19zdG9yYWdlX21hcF9zZXFfc2hvd2AgYW5kIGFsc28gb24gYGJwZl9za19zdG9yYWdlX21hcF9zZXFfc2hvd2AgYXMgdGhlIGZ1bmN0aW9ucyBvZiBpbnRlcmVzdCwgZXNwZWNpYWxseSBjb25zaWRlcmluZyB0aGUgYEJQRl9TWVNDQUxMYCBjb25maWcgaXMgZW5hYmxlZC5cblxuTXkgZmlyc3QgdGhvdWdodCBpcyB0byBxdWlja2x5IHZlcmlmeSBpZiBgX19icGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3dgIGlzIHN0YXRpYywgd2hpY2ggaXQgaXMuIExldCBtZSB0aGluaywgYXJlIHRoZXJlIGFueSBub24tc3RhdGljIGFsdGVybmF0aXZlcyB3ZSBjYW4gdXRpbGl6ZT8gT2theSwgYGJwZl9za19zdG9yYWdlX21hcF9zZXFfc2hvd2AgaXMgYWxzbyBzdGF0aWMuIEdpdmVuIHRoYXQgdGhvc2UgYXJlIHRoZSBvbmx5IGZ1bmN0aW9ucyBjaGFuZ2VkLCBJIHdhcyB0aGlua2luZyB0aG9zZSB0d28gd2VyZSB0aGUgd2F5IHRvIGdvLlxuXG5Ib3dldmVyLCBob2xkIG9uIGEgc2Vjb25kLiBJIHNlZSB0aGF0IGBicGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3dgIGlzIHBhc3NlZCBhcyBhIGZ1bmN0aW9uIHBvaW50ZXIsIHdoaWNoIG1lYW5zIGl0IGlzbid0IGlubGluZWQsIGl0IGlzIHVzZWQgYXMgYSBwYXJhbWV0ZXIuICBIbW0uIFNvLCBtYXliZSBgX19icGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3dgIGlzIGlubGluZWQgKmludG8qIGBicGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3dgIGFuZCBwb3RlbnRpYWxseSBgYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zdG9wYC4gVGhlcmVmb3JlLCBpdCBsb29rcyBsaWtlIGBicGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3dgIGFuZCBgYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zdG9wYCBhcmUgdGhlIGJldHRlciBmb2N1cyBzeW1ib2xzIGZvciBmdXJ0aGVyIGludmVzdGlnYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMDI1LCJPdXRwdXRUb2tlbnMiOjEzNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNTo0MDoyNS42NTQ3NjEyNDNaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3Njc4NTIwNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3dcIixcbiAgICBcImJwZl9za19zdG9yYWdlX21hcF9zZXFfc3RvcFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiB0aGUgQlBGIGl0ZXJhdG9yIGZvciBzb2NrZXQgbG9jYWwgc3RvcmFnZSBtYXBzLiBUaGUgbW9kaWZpZWQgZnVuY3Rpb24gYF9fYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zaG93YCBpcyBjYWxsZWQgd2hlbiByZWFkaW5nIGZyb20gdGhlIGl0ZXJhdG9yIHNlcV9maWxlLCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBgYnBmKClgIHN5c2NhbGwgYW5kIGByZWFkKClgLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zaG93XCIsXG4gICAgXCJicGZfc2tfc3RvcmFnZV9tYXBfc2VxX3N0b3BcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gdGhlIEJQRiBpdGVyYXRvciBmb3Igc29ja2V0IGxvY2FsIHN0b3JhZ2UgbWFwcy4gVGhlIG1vZGlmaWVkIGZ1bmN0aW9uIGBfX2JwZl9za19zdG9yYWdlX21hcF9zZXFfc2hvd2AgaXMgY2FsbGVkIHdoZW4gcmVhZGluZyBmcm9tIHRoZSBpdGVyYXRvciBzZXFfZmlsZSwgd2hpY2ggaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgYGJwZigpYCBzeXNjYWxsIGFuZCBgcmVhZCgpYC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDU6NDA6MjUuNzMxNTUzMzVaIiwiU2VxIjozMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgxNTAzNjEyNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNTo0MDoyNS43MzIwNjY5MVoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo4MTQ5ODQzOTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgTlVMTCBwb2ludGVyIGNoZWNrIHRvIHByZXZlbnQgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugd2hlbiBhY2Nlc3NpbmcgYHNrX3N0b3JhZ2UtXFx1MDAzZW93bmVyYC4gTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBhcmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIGtlcm5lbCBwYWdlIGZhdWx0IGhhbmRsaW5nIGFuZCBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBzdWNoIGFzIHJlYWRpbmcgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSBvciBsZWFraW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZWY5MDcxM2M1Yjk2MTg5ZjU5ODFhOGQ1YWJkZjFmYjhjNDhkOTJkN1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDI3IDA1OjM4OjU2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYyBiL25ldC9jb3JlL2JwZl9za19zdG9yYWdlLmNcbmluZGV4IDFkMjk1YTg3NjlmYWQuLjcyMjg1MjBhYTJiNmUgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jXG4rKysgYi9uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jXG5AQCAtODA2LDYgKzgwNiw4IEBAIHN0YXRpYyBpbnQgX19icGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsXG4gXHRcdGN0eC5tYXAgPSBpbmZvLVx1MDAzZW1hcDtcbiBcdFx0aWYgKHNlbGVtKSB7XG4gXHRcdFx0c2tfc3RvcmFnZSA9IHJjdV9kZXJlZmVyZW5jZShzZWxlbS1cdTAwM2Vsb2NhbF9zdG9yYWdlKTtcbitcdFx0XHRpZiAoIXNrX3N0b3JhZ2UpXG4rXHRcdFx0XHRyZXR1cm4gMDtcbiBcdFx0XHRjdHguc2sgPSBza19zdG9yYWdlLVx1MDAzZW93bmVyO1xuIFx0XHRcdGN0eC52YWx1ZSA9IFNEQVRBKHNlbGVtKS1cdTAwM2VkYXRhO1xuIFx0XHR9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNTo0MDoyNS43MzIwNjc3NFoiLCJTZXEiOjM1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MTQ5ODI1MzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEtNU0FOIE5lZWRzKipcblxuT2theSwgSSd2ZSByZXZpZXdlZCB0aGlzIHBhdGNoIGluIGBuZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jYC4gSXQncyBhIHN0cmFpZ2h0Zm9yd2FyZCBmaXggZm9yIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLiBUaGUgY29kZSBub3cgaW5jbHVkZXMgYSBjaGVjazogYGlmICghc2tfc3RvcmFnZSkgcmV0dXJuIDA7YCB3aGljaCBkaXJlY3RseSBwcmV2ZW50cyB0aGUgYWNjZXNzIG9mIGBza19zdG9yYWdlLVx1MDAzZW93bmVyYCBpZiBgc2tfc3RvcmFnZWAgaXMgTlVMTC5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBpcyAqbm90KiBhIEtNU0FOIGlzc3VlLiBUaGUgY29yZSBwcm9ibGVtIGlzIHNpbXBseSBwcmV2ZW50aW5nIGEgY3Jhc2ggYnkgaGFuZGxpbmcgYSBwb3RlbnRpYWwgTlVMTCB2YWx1ZSBmb3IgYHNrX3N0b3JhZ2VgLiBXZSBhbHJlYWR5IGhhdmUga2VybmVsLWxldmVsIHByb3RlY3Rpb25zIGZvciBkZXJlZmVyZW5jaW5nIE5VTEwgcG9pbnRlcnPigJRwYWdlIGZhdWx0IGhhbmRsaW5nLCBLQVNBTiwgZXRjLiBUaGUgcHJpbWFyeSBmdW5jdGlvbiBvZiBLTVNBTiBpcyB0byBkZXRlY3QgdGhlIHVzZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSwgd2hpY2ggaXMgY2xlYXJseSBub3QgdGhlIGNhc2UgaGVyZS4gVGhpcyBwYXRjaCBzaW1wbHkgYWRkcyBhIHNhZmV0eSBjaGVjay5cblxuVG8gY29uZmlybSBteSB1bmRlcnN0YW5kaW5nLCBJIHJlLWV4YW1pbmVkIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0LCBzcGVjaWZpY2FsbHkgdGhlIGBfX2JwZl9za19zdG9yYWdlX21hcF9zZXFfc2hvd2AgZnVuY3Rpb24uIFRoZSBjb2RlIGFwcGVhcnMgdG8gYmUgd2l0aGluIGEgYHNlcV9maWxlYCBzaG93IGZ1bmN0aW9uLCBwcm9iYWJseSB1c2VkIGZvciBCUEYgbWFwIGl0ZXJhdGlvbi4gSWYgYHNrX3N0b3JhZ2VgIGlzIE5VTEwsIHRoZSBmdW5jdGlvbiBncmFjZWZ1bGx5IHJldHVybnMgMC4gVGhpcyByZWluZm9yY2VzIG15IHZpZXcgdGhhdCB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBub3QgdGhlIGNvbmNlcm4sIGJ1dCByYXRoZXIgaGFuZGxpbmcgdGhlIGV4cGVjdGVkIGNhc2Ugd2hlcmUgYSBwYXJ0aWN1bGFyIEJQRiBtYXAgZWxlbWVudCBtaWdodCBub3QgaGF2ZSBhc3NvY2lhdGVkIHN0b3JhZ2UuXG5cblRoZXJlZm9yZSwgYWZ0ZXIgdGhpcyByZXZpZXcsIEknbSBjb25maWRlbnQgaW4gc2V0dGluZyBgTmVlZHNLTVNBTiA9IGZhbHNlYC4gSXQncyBhIGNyYXNoIHByZXZlbnRpb24gZml4LCBub3QgYSBLTVNBTi1yZWxldmFudCBvbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMDAsIk91dHB1dFRva2VucyI6MTEwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzc3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDU6NDA6MzMuODgxODk1MjhaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDI0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBOVUxMIHBvaW50ZXIgY2hlY2sgdG8gcHJldmVudCBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSB3aGVuIGFjY2Vzc2luZyBgc2tfc3RvcmFnZS1cXHUwMDNlb3duZXJgLiBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGFyZSBjYXVnaHQgYnkgc3RhbmRhcmQga2VybmVsIHBhZ2UgZmF1bHQgaGFuZGxpbmcgYW5kIEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIHN1Y2ggYXMgcmVhZGluZyB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IG9yIGxlYWtpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgTlVMTCBwb2ludGVyIGNoZWNrIHRvIHByZXZlbnQgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugd2hlbiBhY2Nlc3NpbmcgYHNrX3N0b3JhZ2UtXFx1MDAzZW93bmVyYC4gTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBhcmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIGtlcm5lbCBwYWdlIGZhdWx0IGhhbmRsaW5nIGFuZCBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBzdWNoIGFzIHJlYWRpbmcgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSBvciBsZWFraW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowxf4j8[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-27 05:25:37 +0000 UTC FinishedAt: 2026-08-27 05:40:36 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "75b0a6db4300e4c2c9e97a0848deaa7acfb42fb7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git", "commit_hash": "75b0a6db4300e4c2c9e97a0848deaa7acfb42fb7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "37488754-a4a0-4da2-b006-040dd2ba9561" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "bpf_sk_storage_map_seq_show", "bpf_sk_storage_map_seq_stop" ], "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+CgkJCTx0ZD4yMDI2LzA4LzI3IDA1OjM4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zaG93JiMzNDssCiAgICAmIzM0O2JwZl9za19zdG9yYWdlX21hcF9zZXFfc3RvcCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBOVUxMIHBvaW50ZXIgY2hlY2sgdG8gcHJldmVudCBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSB3aGVuIGFjY2Vzc2luZyBgc2tfc3RvcmFnZS1cdTAwM2Vvd25lcmAuIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgYXJlIGNhdWdodCBieSBzdGFuZGFyZCBrZXJuZWwgcGFnZSBmYXVsdCBoYW5kbGluZyBhbmQgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcywgc3VjaCBhcyByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgb3IgbGVha2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gdGhlIEJQRiBpdGVyYXRvciBmb3Igc29ja2V0IGxvY2FsIHN0b3JhZ2UgbWFwcy4gVGhlIG1vZGlmaWVkIGZ1bmN0aW9uIGBfX2JwZl9za19zdG9yYWdlX21hcF9zZXFfc2hvd2AgaXMgY2FsbGVkIHdoZW4gcmVhZGluZyBmcm9tIHRoZSBpdGVyYXRvciBzZXFfZmlsZSwgd2hpY2ggaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgYGJwZigpYCBzeXNjYWxsIGFuZCBgcmVhZCgpYC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNTozODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGVmOTA3MTNjNWI5NjE4OWY1OTgxYThkNWFiZGYxZmI4YzQ4ZDkyZDdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAyNyAwNTozODo1NiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jIGIvbmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuY1xuaW5kZXggMWQyOTVhODc2OWZhZC4uNzIyODUyMGFhMmI2ZSAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL2JwZl9za19zdG9yYWdlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2JwZl9za19zdG9yYWdlLmNcbkBAIC04MDYsNiAmIzQzOzgwNiw4IEBAIHN0YXRpYyBpbnQgX19icGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsXG4gXHRcdGN0eC5tYXAgPSBpbmZvLVx1MDAzZW1hcDtcbiBcdFx0aWYgKHNlbGVtKSB7XG4gXHRcdFx0c2tfc3RvcmFnZSA9IHJjdV9kZXJlZmVyZW5jZShzZWxlbS1cdTAwM2Vsb2NhbF9zdG9yYWdlKTtcbiYjNDM7XHRcdFx0aWYgKCFza19zdG9yYWdlKVxuJiM0MztcdFx0XHRcdHJldHVybiAwO1xuIFx0XHRcdGN0eC5zayA9IHNrX3N0b3JhZ2UtXHUwMDNlb3duZXI7XG4gXHRcdFx0Y3R4LnZhbHVlID0gU0RBVEEoc2VsZW0pLVx1MDAzZWRhdGE7XG4gXHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNTozODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3cmIzM0OywKICAgICYjMzQ7YnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zdG9wJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiB0aGUgQlBGIGl0ZXJhdG9yIGZvciBzb2NrZXQgbG9jYWwgc3RvcmFnZSBtYXBzLiBUaGUgbW9kaWZpZWQgZnVuY3Rpb24gYF9fYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zaG93YCBpcyBjYWxsZWQgd2hlbiByZWFkaW5nIGZyb20gdGhlIGl0ZXJhdG9yIHNlcV9maWxlLCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBgYnBmKClgIHN5c2NhbGwgYW5kIGByZWFkKClgLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZWY5MDcxM2M1Yjk2MTg5ZjU5ODFhOGQ1YWJkZjFmYjhjNDhkOTJkNwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgQXVnIDI3IDA1OjM4OjU2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYyBiL25ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMKaW5kZXggMWQyOTVhODc2OWZhZC4uNzIyODUyMGFhMmI2ZSAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jCkBAIC04MDYsNiAmIzQzOzgwNiw4IEBAIHN0YXRpYyBpbnQgX19icGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsCiAJCWN0eC5tYXAgPSBpbmZvLSZndDttYXA7CiAJCWlmIChzZWxlbSkgewogCQkJc2tfc3RvcmFnZSA9IHJjdV9kZXJlZmVyZW5jZShzZWxlbS0mZ3Q7bG9jYWxfc3RvcmFnZSk7CiYjNDM7CQkJaWYgKCFza19zdG9yYWdlKQomIzQzOwkJCQlyZXR1cm4gMDsKIAkJCWN0eC5zayA9IHNrX3N0b3JhZ2UtJmd0O293bmVyOwogCQkJY3R4LnZhbHVlID0gU0RBVEEoc2VsZW0pLSZndDtkYXRhOwogCQl9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA1OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMDMKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiA2NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXM6CgoqKkFuYWx5emluZyB0aGUgUHJvcG9zZWQgTnVsbCBDaGVjayBpbiBgYnBmX3NrX3N0b3JhZ2UuY2AqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBhZGRpbmcgYSBudWxsIGNoZWNrIGZvciBgc2tfc3RvcmFnZWAgd2l0aGluIHRoZSBgX19icGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3dgIGZ1bmN0aW9uIGluIGBuZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jYC4gVGhhdCBpbW1lZGlhdGVseSBtYWtlcyBtZSB0aGluaywgJiMzNDtXaHkgaXMgdGhpcyBuZWNlc3Nhcnk/JiMzNDsgTXkgZmlyc3Qgc3RlcCBpcywgb2YgY291cnNlLCB0byBqdW1wIGludG8gdGhlIGNvZGUgYW5kIHRob3JvdWdobHkgcmV2aWV3IGBfX2JwZl9za19zdG9yYWdlX21hcF9zZXFfc2hvd2AgaXRzZWxmLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93LCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGl0JiMzOTtzIG9wZXJhdGluZyBvbiwgYW5kICp3aGVyZSogYHNrX3N0b3JhZ2VgIGlzIHBvdGVudGlhbGx5IGRlcmVmZXJlbmNlZC4KCklzIHRoaXMgcmVsYXRlZCB0byBhIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbj8gSXMgdGhlcmUgYSBzdWJ0bGUgcGF0aCB3aGVyZSBgc2tfc3RvcmFnZWAgY291bGQgYmUgZnJlZWQgb3IgdW5pbml0aWFsaXplZCBiZWZvcmUgdGhpcyBmdW5jdGlvbiBnZXRzIGNhbGxlZD8gSXMgdGhpcyBqdXN0IGRlZmVuc2l2ZSBwcm9ncmFtbWluZywgb3IgZG9lcyBpdCBwb2ludCB0byBhIGRlZXBlciBpc3N1ZSBpbiB0aGUgb3duZXJzaGlwIG9yIGxpZmVjeWNsZSBvZiB0aGUgYHNrX3N0b3JhZ2VgIHBvaW50ZXI/IEkgbmVlZCB0byBhbmFseXplIHRoZSBzdXJyb3VuZGluZyBjb2RlLCB0aGUgY29udGV4dCBvZiB0aGUgY2FsbCwgYW5kIGNvbnNpZGVyIGFueSBjb25jdXJyZW50IGFjY2VzcyB0byB0aGlzIHZhcmlhYmxlLiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgYXQgd2hvIGlzIHdyaXRpbmcgdG8gdGhpcywgd2hvIGlzIHVzaW5nIGl0LCBhbmQgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgY29uY3VycmVuY3kgaXNzdWVzLgoKTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGlzIGNvdWxkIGJlIGEgcmFjZSBjb25kaXRpb24sIGEgYnVnIHdoZXJlIHRoZSBgc2tfc3RvcmFnZWAgZmllbGQgaXMgZGVyZWZlcmVuY2VkIGJ1dCBpcyBub3QgY2hlY2tlZCB0byBtYWtlIHN1cmUgdGhhdCB0aGUgbWVtb3J5IGlzbiYjMzk7dCBhbHJlYWR5IGZyZWUuIEkgd2lsbCBhbHNvIG1ha2Ugc3VyZSB0byBjaGVjayB3aGV0aGVyIHRoaXMgbnVsbCBjaGVjayBpcyByZWR1bmRhbnQuIElmIHRoZSBjb2RlIGJlZm9yZSBgX19icGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3dgIGFscmVhZHkgZW5zdXJlcyB0aGF0IGBza19zdG9yYWdlYCBpcyBub24tbnVsbCwgdGhpcyBwYXRjaCBjb3VsZCBiZSB1bm5lY2Vzc2FyeSBhbmQgaW50cm9kdWNlIHVubmVjZXNzYXJ5IG92ZXJoZWFkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA1OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zaG93JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jPTc4OD1ERUZJTkVfQlBGX0lURVJfRlVOQyhicGZfc2tfc3RvcmFnZV9tYXAsIHN0cnVjdCBicGZfaXRlcl9tZXRhICptZXRhLFxuLS1cbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtNzkxLVxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYzo3OTI6c3RhdGljIGludCBfX2JwZl9za19zdG9yYWdlX21hcF9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSxcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtNzkzLVx0XHRcdFx0XHQgc3RydWN0IGJwZl9sb2NhbF9zdG9yYWdlX2VsZW0gKnNlbGVtKVxuLS1cbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM9ODIwPXN0YXRpYyBpbnQgYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy04MjEte1xubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYzo4MjI6XHRyZXR1cm4gX19icGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3coc2VxLCB2KTtcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtODIzLX1cbi0tXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jPTgyNT1zdGF0aWMgdm9pZCBicGZfc2tfc3RvcmFnZV9tYXBfc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXG4tLVxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy04MjgtXHRpZiAoIXYpXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jOjgyOTpcdFx0KHZvaWQpX19icGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3coc2VxLCB2KTtcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtODMwLVx0ZWxzZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA1OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4ODYKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA4MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgQlBGIEl0ZXJhdG9yKioKCkFscmlnaHQsIHRoZSB0cmFpbCBsZWFkcyBtZSB0byBgX19icGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3dgLiBUaGF0JiMzOTtzIHRoZSBrZXkgZnVuY3Rpb24sIGNhbGxlZCBieSB0aGUgYGJwZl9za19zdG9yYWdlX21hcF9zZXFfc2hvd2AgYW5kIGBicGZfc2tfc3RvcmFnZV9tYXBfc2VxX3N0b3BgIGZ1bmN0aW9ucywgbWVhbmluZyBpdCYjMzk7cyB0aGUgd29ya2hvcnNlIG9mIHRoaXMgQlBGIGl0ZXJhdG9yLiBXZSYjMzk7cmUgaW4gaXRlcmF0b3IgdGVycml0b3J5LCBzcGVjaWZpY2FsbHkgd2l0aCB0aGUgYHNrX3N0b3JhZ2VfbWFwYC4gVGltZSB0byBjaGVjayBvdXQgYGJwZl9za19zdG9yYWdlLmNgLCB0aGVyZSBtaWdodCBiZSBzb21lIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIHRoYXQgSSBuZWVkIHRvIGJlIGF3YXJlIG9mLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA1OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA1OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxNjUKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIHlvdXIgc3VtbWFyeToKCioqQ2hlY2tpbmcgdGhlIE1ha2VmaWxlKioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIHRoaXMuIEZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoZSBgTWFrZWZpbGVgLiBJdCYjMzk7cyB0aGUgY2VudHJhbCBodWIgZm9yIHRoZSBidWlsZCBwcm9jZXNzLCBzbyB1bmRlcnN0YW5kaW5nIGl0cyBzdHJ1Y3R1cmUgaXMgY3J1Y2lhbCBiZWZvcmUgSSBldmVuIHRoaW5rIGFib3V0IG1ha2luZyBjaGFuZ2VzLiBJJiMzOTtsbCBuZWVkIHRvIGlkZW50aWZ5IHRoZSB0YXJnZXRzLCBkZXBlbmRlbmNpZXMsIGFuZCBydWxlcy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYW55IG9idmlvdXMgaW5lZmZpY2llbmNpZXMgb3IgcG90ZW50aWFsIGJvdHRsZW5lY2tzIGluIHRoZSBidWlsZCBwcm9jZXNzLCBwYXJ0aWN1bGFybHkgYW55dGhpbmcgdGhhdCBtaWdodCBiZSB1bm5lY2Vzc2FyaWx5IHJlLWNvbXBpbGluZyBvciByZS1saW5raW5nLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGlzIHRoaW5nIGlzIGFjdHVhbGx5IHB1dCB0b2dldGhlciAtIGhvdyBhcmUgdGhlIG9iamVjdCBmaWxlcyBnZW5lcmF0ZWQ/IFdoYXQmIzM5O3MgdGhlIGxpbmtpbmcgY29tbWFuZD8gQXJlIHRoZXJlIGFueSBjbGV2ZXIgdHJpY2tzIG9yIG9wdGltaXNhdGlvbnMgYWxyZWFkeSBpbiBwbGFjZSwgb3IgaXMgaXQgYWxsIGEgYml0IHJ1ZGltZW50YXJ5PyBUaW1lIHRvIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzIGFuZCBhc3Nlc3MgaG93IHJvYnVzdCBhbmQgbWFpbnRhaW5hYmxlIHRoaXMgYnVpbGQgc3lzdGVtIGlzLiBHb3R0YSBiZSBlZmZpY2llbnQgaGVyZSAtIEkmIzM5O20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgYXJlYXMgd2hlcmUgSSYjMzk7bGwgc2VlIG9wcG9ydHVuaXRpZXMgZm9yIG9wdGltaXNhdGlvbiBvciByZWZhY3RvcmluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNTozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfc2tfc3RvcmFnZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL01ha2VmaWxlPTQ1PW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IHNvY2tfbWFwLm9cbm5ldC9jb3JlL01ha2VmaWxlOjQ2Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGJwZl9za19zdG9yYWdlLm9cbm5ldC9jb3JlL01ha2VmaWxlLTQ3LWlmZGVmIENPTkZJR19JTkVUXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDU6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQ4NQoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDg1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQgaW4gdGhlIGZpZWxkOgoKKipEaXZpbmcgaW50byB0aGUgQlBGIFNrX1N0b3JhZ2UgSW1wbGVtZW50YXRpb24qKgoKUmlnaHQsIHNvIHRoaXMgYmVoYXZpb3IgY2xlYXJseSBoaW5nZXMgb24gdGhlIGBDT05GSUdfQlBGX1NZU0NBTExgIHNldHRpbmcuIFRoYXQmIzM5O3MgdGhlIGJhc2VsaW5lLCBvZiBjb3Vyc2UsIGJ1dCB3aGF0JiMzOTtzIHRoZSBhY3R1YWwgaW1wbGVtZW50YXRpb24gZG9pbmc/IEkgbm90aWNlZCBgX19icGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3dgIGlzIGRlY2xhcmVkIGFzIHN0YXRpYywgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIEl0JiMzOTtzIGVzc2VudGlhbGx5IGFuIGludGVybmFsIGRldGFpbC4gQnV0IGl0IGlzIGNhbGxlZCBieSBgYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zaG93YCBhbmQgYGJwZl9za19zdG9yYWdlX21hcF9zZXFfc3RvcGAuIEJvdGggb2YgdGhvc2UgZnVuY3Rpb25zIGFyZSBvYnZpb3VzbHkgcHVibGljIGVudHJ5IHBvaW50cy4gU28gSSYjMzk7bGwgZ28gaGF2ZSBhIGxvb2sgYXJvdW5kIHRvIHNlZSBpZiB0aGVyZSBhcmUgbm9uLXN0YXRpYyBmdW5jdGlvbiBkZWZpbml0aW9ucyB0byBiZXR0ZXIgZ3Jhc3AgdGhlIGludGVudC4gV2hlcmUgYXJlIHRoZSBlbnRyeSBwb2ludHM/CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA1OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9za19zdG9yYWdlX21hcF9zZXFfc2hvdyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYz03ODg9REVGSU5FX0JQRl9JVEVSX0ZVTkMoYnBmX3NrX3N0b3JhZ2VfbWFwLCBzdHJ1Y3QgYnBmX2l0ZXJfbWV0YSAqbWV0YSxcbi0tXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jLTc5MS1cbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM6NzkyOnN0YXRpYyBpbnQgX19icGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jLTc5My1cdFx0XHRcdFx0IHN0cnVjdCBicGZfbG9jYWxfc3RvcmFnZV9lbGVtICpzZWxlbSlcbi0tXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jLTgxOS1cbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM6ODIwOnN0YXRpYyBpbnQgYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy04MjEte1xubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYzo4MjI6XHRyZXR1cm4gX19icGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3coc2VxLCB2KTtcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtODIzLX1cbi0tXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jPTgyNT1zdGF0aWMgdm9pZCBicGZfc2tfc3RvcmFnZV9tYXBfc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXG4tLVxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy04MjgtXHRpZiAoIXYpXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jOjgyOTpcdFx0KHZvaWQpX19icGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3coc2VxLCB2KTtcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtODMwLVx0ZWxzZVxuLS1cbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM9ODg2PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9vcHMgPSB7XG4tLVxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy04ODktXHQuc3RvcCAgID0gYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zdG9wLFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYzo4OTA6XHQuc2hvdyAgID0gYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zaG93LFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy04OTEtfTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDU6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDM0OQoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBmaXJzdC1wZXJzb24gZXhwZXJ0IHN1bW1hcnk6CgoqKkRpZ2dpbmcgaW50byB0aGUgQlBGIFNvY2tldCBTdG9yYWdlIE1hcCBTZXF1ZW5jZSBPcGVyYXRpb25zKioKCkFscmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBmdW5jdGlvbnMsIGFuZCB0aGV5JiMzOTtyZSBzdGF0aWMgbWVtYmVycyBvZiBgYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9vcHNgLiBUaGF0JiMzOTtzIHRoZSBrZXkgaGVyZS4gVGhpcyBtZWFucyB0aGV5IGFyZSBsaWtlbHkgc3BlY2lmaWMgdG8gaG93IHRoaXMgcGFydGljdWxhciBtYXAgdHlwZSBiZWhhdmVzIHdpdGhpbiB0aGUgQlBGIGZyYW1ld29yay4gTXkgbmV4dCBpbW1lZGlhdGUgdGhvdWdodCBpczogd2hlcmUgaXMgdGhpcyBgYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9vcHNgIHN0cnVjdCAqYWN0dWFsbHkqIHVzZWQ/IFVuZGVyc3RhbmRpbmcgdGhlIGNhbGwgc2l0ZXMgd2lsbCBiZSBjcnVjaWFsLiBJdCYjMzk7bGwgZ2l2ZSBtZSBjb250ZXh0IG9uIGhvdyB0aGVzZSBzcGVjaWZpYyBmdW5jdGlvbnMgYXJlIGludm9rZWQgYW5kIHdoYXQgZXZlbnRzIHRyaWdnZXIgdGhlaXIgZXhlY3V0aW9uLiBLbm93aW5nIHRoZSB1c2FnZSB3aWxsIGNsYXJpZnkgdGhlIHB1cnBvc2UgYW5kIGJlaGF2aW9yIG9mIHRoZSBmdW5jdGlvbnMgSSYjMzk7bSBsb29raW5nIGF0LiBJIG5lZWQgdG8gdHJhY2UgdGhlIHJlZmVyZW5jZXMgYW5kIHVuZGVyc3RhbmQgdGhlIGV4ZWN1dGlvbiBmbG93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNTozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfc2tfc3RvcmFnZV9tYXBfc2VxX29wcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYz04ODE9c3RhdGljIHZvaWQgYnBmX2l0ZXJfZGV0YWNoX21hcChzdHJ1Y3QgYnBmX2l0ZXJfYXV4X2luZm8gKmF1eClcbi0tXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jLTg4NS1cbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM6ODg2OnN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9vcHMgPSB7XG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jLTg4Ny1cdC5zdGFydCAgPSBicGZfc2tfc3RvcmFnZV9tYXBfc2VxX3N0YXJ0LFxuLS1cbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM9ODkzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2l0ZXJfc2VxX2luZm8gaXRlcl9zZXFfaW5mbyA9IHtcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM6ODk0Olx0LnNlcV9vcHNcdFx0PSBcdTAwMjZicGZfc2tfc3RvcmFnZV9tYXBfc2VxX29wcyxcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtODk1LVx0LmluaXRfc2VxX3ByaXZhdGVcdD0gYnBmX2l0ZXJfaW5pdF9za19zdG9yYWdlX21hcCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDU6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDg4MgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipNeSBMaW5lIG9mIFJlYXNvbmluZyB3aXRoIGBpdGVyX3NlcV9pbmZvYCoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGBpdGVyX3NlcV9pbmZvYC4gU3BlY2lmaWNhbGx5LCBJIHNlZSBpdCYjMzk7cyBlbXBsb3llZCB3aXRoaW4gYGJwZl9za19zdG9yYWdlX21hcF9pdGVyX2F0dGFjaF90YXJnZXRgLiBUaGF0IGltbWVkaWF0ZWx5IGNsaWNrcyBhIGZldyB0aGluZ3MgaW50byBwbGFjZS4KCktub3dpbmcgdGhhdCBmdW5jdGlvbiwgSSYjMzk7bSBhbHJlYWR5IHZpc3VhbGl6aW5nIHRoZSBjb250ZXh0LiBgYnBmX3NrX3N0b3JhZ2VfbWFwX2l0ZXJfYXR0YWNoX3RhcmdldGAgaXMgYWxsIGFib3V0IGl0ZXJhdGluZyB0aHJvdWdoIHNvbWV0aGluZyAobGlrZWx5IGEgbWFwIHN0b3Jpbmcgc29ja2V0LXJlbGF0ZWQgZGF0YSkgYW5kLCBjcnVjaWFsbHksICphdHRhY2hpbmcqIGEgdGFyZ2V0LiBUaGF0ICYjMzQ7dGFyZ2V0JiMzNDsgY291bGQgYmUgYSBCUEYgcHJvZ3JhbSwgYSBzcGVjaWZpYyBob29rLCBvciBzb21ldGhpbmcgc2ltaWxhciDigJMgaXQmIzM5O3MgdGhlIHBvaW50IG9mIHRoZSBpdGVyYXRpb24uCgpTbywgYGl0ZXJfc2VxX2luZm9gIGhhcyB0byBiZSBjcnVjaWFsIGluIGhlbHBpbmcgbWFuYWdlIHRoZSBzdGF0ZSBvZiBpdGVyYXRpb24gd2hlbiB0aGUgQlBGIHByb2dyYW0gZ29lcyB0byBhY2Nlc3MgdGhlIHN0b3JhZ2Ugb2YgYSBzcGVjaWZpYyBzb2NrZXQuIEl0JiMzOTtzIGFsbW9zdCBjZXJ0YWluIGl0IHRyYWNrcyB0aGUgY3VycmVudCBwb3NpdGlvbiwgbWF5YmUgYSBrZXkgdG8gbG9vayBhdCB0aGUgc3RvcmFnZSYjMzk7cyBtYXAuIFByb2JhYmx5IGl0IG1haW50YWlucyBlbm91Z2ggY29udGV4dCBzbyB0aGF0IHRoZSBCUEYgcHJvZ3JhbSBrbm93cyBob3cgdG8gbG9vayB1cCwgYWNjZXNzLCBhbmQgdXBkYXRlIHRoZSBhc3NvY2lhdGVkIHNvY2tldCBzdG9yYWdlLgoKVGhlICYjMzk7c2VxJiMzOTsgcGFydCBzdWdnZXN0cyBhbiBvcmRlcmVkIHNlcXVlbmNlLCBsaWtlbHkgcG9pbnRpbmcgdG8gc29tZSBzb3J0ZWQgbmF0dXJlIG9mIHRoZSBzdG9yYWdlIGJlaW5nIGl0ZXJhdGVkIG92ZXIuIFRoaXMgaGFzIHRvIGluZm9ybSB0aGUgQlBGIHByb2dyYW0gb2Ygd2hlcmUgaXQgaXMgaW4gdGhlIGl0ZXJhYmxlIHN0YXRlLCBhbmQgaG93IGl0IGlzIHVwZGF0ZWQgb24gbmV4dCBpdGVyYXRpb25zLiBJdCBjb3VsZCBiZSBpbmRleGluZyBpbnRvIGEgaGFzaCB0YWJsZSBvciBhIG1vcmUgY29tcGxleCBvcmRlcmVkIGRhdGEgc3RydWN0dXJlLgoKVGhpcyB3aG9sZSBwaWN0dXJlIHJlaW5mb3JjZXMgdGhhdCB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGEgc29waGlzdGljYXRlZCBtZWNoYW5pc20gdG8gaXRlcmF0ZSB0aHJvdWdoIGFuZCBhcHBseSBvcGVyYXRpb25zIHRvIG5ldHdvcmsgc29ja2V0cywgbGlrZWx5IHdpdGhpbiB0aGUgQlBGIGNvbnRleHQuIEFuZCBgaXRlcl9zZXFfaW5mb2AgaXMgYSBjb3JlIHBpZWNlIG9mIHRoYXQgcHV6emxlLiBNeSBuZXh0IHRob3VnaHQgd291bGQgYmUgdG8gZGlnIGludG8gaG93IHRoaXMgaXMgaW5pdGlhbGl6ZWQgYW5kIHVwZGF0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA1OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2l0ZXJfc2VxX2luZm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM9ODg2PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9vcHMgPSB7XG4tLVxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy04OTItXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jOjg5MzpzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9pdGVyX3NlcV9pbmZvIGl0ZXJfc2VxX2luZm8gPSB7XG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jLTg5NC1cdC5zZXFfb3BzXHRcdD0gXHUwMDI2YnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9vcHMsXG4tLVxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYz05MDA9c3RhdGljIHN0cnVjdCBicGZfaXRlcl9yZWcgYnBmX3NrX3N0b3JhZ2VfbWFwX3JlZ19pbmZvID0ge1xuLS1cbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtOTEyLVx0fSxcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM6OTEzOlx0LnNlcV9pbmZvXHRcdD0gXHUwMDI2aXRlcl9zZXFfaW5mbyxcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtOTE0LX07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA1OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU1OTMKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBkZWVwIGluIHRoZSB3ZWVkcyBvZiBlQlBGIGFuZCBrZXJuZWwgaW50ZXJuYWxzOgoKKiplQlBGIFNrX1N0b3JhZ2UgTWFwIFJlZ2lzdHJhdGlvbioqCgpSaWdodCwgc28gYGJwZl9za19zdG9yYWdlX21hcF9yZWdfaW5mb2AuIFRoYXQmIzM5O3MgdGhlIHJlZ2lzdHJhdGlvbiBzdHJ1Y3R1cmUgZm9yIHRoZSBza19zdG9yYWdlIG1hcC4gQW5kIEkgc2VlIHRoYXQgaXQmIzM5O3MgYmVpbmcgcmVnaXN0ZXJlZCBkdXJpbmcgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBgYnBmX3NrX3N0b3JhZ2VfbWFwX2l0ZXJgLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIGdldHRpbmcgc2V0IHVwIHdoZW4gYGJwZl9za19zdG9yYWdlX21hcF9pdGVyX2luaXRgIGlzIGNhbGxlZC4gVGhhdCBtYWtlcyBwZXJmZWN0IHNlbnNlLiBUaGUgaXRlcmF0b3IgbGlrZWx5IG5lZWRzIHRoYXQgcmVnaXN0cmF0aW9uIGluZm9ybWF0aW9uIHRvIGZ1bmN0aW9uIGNvcnJlY3RseSwgbGV0dGluZyBpdCBrbm93IGhvdyB0byBpbnRlcmFjdCB3aXRoIHRoZSBza19zdG9yYWdlIG1hcCBkdXJpbmcgaXRlcmF0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIHRoYXQgd2hlbiBJJiMzOTttIGRlYnVnZ2luZyBvciBleHRlbmRpbmcgdGhlIG1hcCYjMzk7cyBiZWhhdmlvdXIgbGF0ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA1OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9za19zdG9yYWdlX21hcF9yZWdfaW5mbyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYz04OTM9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfaXRlcl9zZXFfaW5mbyBpdGVyX3NlcV9pbmZvID0ge1xuLS1cbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtODk5LVxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYzo5MDA6c3RhdGljIHN0cnVjdCBicGZfaXRlcl9yZWcgYnBmX3NrX3N0b3JhZ2VfbWFwX3JlZ19pbmZvID0ge1xubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy05MDEtXHQudGFyZ2V0XHRcdFx0PSBcJiMzNDticGZfc2tfc3RvcmFnZV9tYXBcJiMzNDssXG4tLVxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYz05MTY9c3RhdGljIGludCBfX2luaXQgYnBmX3NrX3N0b3JhZ2VfbWFwX2l0ZXJfaW5pdCh2b2lkKVxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy05MTcte1xubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYzo5MTg6XHRicGZfc2tfc3RvcmFnZV9tYXBfcmVnX2luZm8uY3R4X2FyZ19pbmZvWzBdLmJ0Zl9pZCA9XG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jLTkxOS1cdFx0YnRmX3NvY2tfaWRzW0JURl9TT0NLX1RZUEVfU09DS107XG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jOjkyMDpcdHJldHVybiBicGZfaXRlcl9yZWdfdGFyZ2V0KFx1MDAyNmJwZl9za19zdG9yYWdlX21hcF9yZWdfaW5mbyk7XG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jLTkyMS19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA1OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYxODEKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxOTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgQlBGIEl0ZXJhdG9yIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBhIEJQRiBpdGVyYXRvciBkZXNpZ25lZCBmb3IgdGhlIGBicGZfc2tfc3RvcmFnZV9tYXBgLiBUaGUga2V5IHRoaW5nIGhlcmUgaXMgdGhlIGFkZGl0aW9uIG9mIGEgbnVsbCBjaGVjayBmb3IgYHNrX3N0b3JhZ2VgLiBJdCYjMzk7cyBwcm90ZWN0aW5nIGFnYWluc3QgYSBkZXJlZmVyZW5jZSBmcm9tIGBzZWxlbS0mZ3Q7bG9jYWxfc3RvcmFnZWAsIHdoaWNoIGlzIGEgc21hcnQgbW92ZSDigJMgYSBjbGFzc2ljIHBvdGVudGlhbCBudWxsIHBvaW50ZXIgdnVsbmVyYWJpbGl0eS4gRnVuY3Rpb25hbGx5LCBpdCYjMzk7cyBhIHNvbGlkIGZpeCwgYSBkZWZpbml0ZSBpbXByb3ZlbWVudC4gRGVmaW5pdGVseSBmdXp6LXdvcnRoeS4KClRoZSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIHRhcmdldCBzeW1ib2xzIGxpa2UgYGJwZl9pdGVyX3JlZ190YXJnZXRgIG9yIG1heWJlIGV2ZW4gdGhlIEJQRiBzeXNjYWxsIGVudHJ5LCBidXQgbXkgZ29hbCBpcyB0byBzdGF5IGF3YXkgZnJvbSBob3QgcGF0aHMuIFRoaXMgcGF0Y2ggaXMgYWJvdXQgYSBwb3RlbnRpYWwgY3Jhc2gsIGFuZCBob3QgcGF0aHMgYXJlIHByb2JhYmx5IGxlc3MgbGlrZWx5IHRvIGV4cG9zZSBpdCBpbiBwcmFjdGljZS4KCkhhbmcgb24uLi4gYGJwZl9za19zdG9yYWdlX21hcF9zZXFfc2hvd2AgaXMgc3RhdGljLCB3aGljaCBpcyB1c3VhbGx5IG5vdCBpZGVhbCwgYnV0IGl0JiMzOTtzICpjYWxsZWQqIHdoZW4gcmVhZGluZyBmcm9tIHRoZSBpdGVyYXRvciYjMzk7cyBzZXFfZmlsZS4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZywgYW5kIHdvcnRoIGRpZ2dpbmcgaW50by4gTGV0JiMzOTtzIHNlZS4uLiBUaGUgaXRlcmF0b3ImIzM5O3Mgc2VxX2ZpbGUgaXMgY3JlYXRlZCBieSBgYnBmX2l0ZXJfY3JlYXRlYCBhbmQgcmVhZCB2aWEgdGhlIHN0YW5kYXJkIGB2ZnNfcmVhZGAgLSZndDsgYHNlcV9yZWFkYCBwYXRoLiBTbyBpdCYjMzk7cyBzdGlsbCBiZWluZyBleHBvc2VkLCBpZiBsZXNzIGRpcmVjdGx5LgoKSG1tLCBva2F5LiBMZXQgbWUgc2VlIGlmIHRoZXJlJiMzOTtzIGFueXRoaW5nIG5vbi1zdGF0aWMgaW4gYG5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmNgIHRoYXQgY291bGQgYmUgYSBiZXR0ZXIgZm9jYWwgcG9pbnQgZm9yIGZ1enppbmcuIFBlcmhhcHMgc29tZXRoaW5nIHJlbGF0ZWQgdG8gdGhlIGluaXRpYWwgc2V0dXAsIG9yIGNsZWFudXAsIHJhdGhlciB0aGFuIGp1c3QgdGhlIHNlcV9maWxlIGRpc3BsYXkuIEkmIzM5O2xsIG5lZWQgdG8gcmV2aWV3IHRoZSBjb2RlIHRvIGlkZW50aWZ5IG90aGVyIHBvdGVudGlhbCBlbnRyeSBwb2ludHMgZm9yIHRoaXMgbWFwIGFuZCBpdGVyYXRvciBsb2dpYy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDU6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XmludCAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM9MTM0PWJwZl9za19zdG9yYWdlX2Nsb25lX2VsZW0oc3RydWN0IHNvY2sgKm5ld3NrLFxuLS1cbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtMTUzLVxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYzoxNTQ6aW50IGJwZl9za19zdG9yYWdlX2Nsb25lKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKm5ld3NrKVxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy0xNTUte1xuLS1cbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM9NTY4PXN0YXRpYyBpbnQgYnBmX3NrX3N0b3JhZ2VfZGlhZ19wdXRfYWxsKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jLTYyMy1cbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM6NjI0OmludCBicGZfc2tfc3RvcmFnZV9kaWFnX3B1dChzdHJ1Y3QgYnBmX3NrX3N0b3JhZ2VfZGlhZyAqZGlhZyxcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtNjI1LVx0XHRcdCAgICBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA1OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcwMzYKCQkJCQkJCW91dHB1dDogNDcKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBcHByb2FjaCB0byBJZGVudGlmeWluZyBOb24tU3RhdGljIEZ1bmN0aW9ucyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSBpZiB0aGVyZSBhcmUgYW55IG5vbi1zdGF0aWMgZnVuY3Rpb25zIGhhbmdpbmcgYXJvdW5kIGluIHRoZSBjb2RlLiBNeSBnby10byBzdHJhdGVneSBoZXJlIGlzIHRvIGxldmVyYWdlIHRoZSBwYXR0ZXJucyBJIGtub3cgYXJlIGxpa2VseSB0byBiZSBwcmVzZW50LiBJJiMzOTttIGdvaW5nIHRvIHNjYW4gdGhlIGNvZGUgZm9yIHRoZSBjb21tb24gcHJlZml4ZXMgdGhhdCBvZnRlbiBwcmVjZWRlIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucywgc3BlY2lmaWNhbGx5IHRoaW5ncyBsaWtlIGBedm9pZCBgLCBgXnN0cnVjdCBgLCBvciBgXnN0YXRpYyBgLiBUaGlua2luZyBvdXQgbG91ZCwgSSBjYW4gcXVpY2tseSBzY2FuIGZvciB0aGVzZSBwYXR0ZXJucy4gQnkgdXNpbmcgdGhlc2UgcHJlZml4ZXMsIEkgY2FuIGZpbHRlciBvdXQgdGhlIGZ1bmN0aW9ucyBJJiMzOTttIG5vdCBsb29raW5nIGZvci4gVGhpcyBzaG91bGQgZWZmaWNpZW50bHkgaWRlbnRpZnkgdGhvc2UgZnVuY3Rpb25zIHdpdGhvdXQgdGhlIGBzdGF0aWNgIGtleXdvcmQsIGhlbHBpbmcgbWUgaG9uZSBpbiBvbiB0aGUgZXhhY3QgYml0cyBvZiBjb2RlIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBmdXJ0aGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNTozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteW2EtekEtWl9dLiogYnBmX3NrX3N0b3JhZ2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM9MjE9YnBmX3NrX3N0b3JhZ2VfbG9va3VwKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGJwZl9tYXAgKm1hcCwgYm9vbCBjYWNoZWl0X2xvY2tpdClcbi0tXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jLTM0LVxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYzozNTpzdGF0aWMgaW50IGJwZl9za19zdG9yYWdlX2RlbChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBicGZfbWFwICptYXApXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jLTM2LXtcbi0tXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jLTQ2LS8qIENhbGxlZCBieSBfX3NrX2Rlc3RydWN0KCkgXHUwMDI2IGJwZl9za19zdG9yYWdlX2Nsb25lKCkgKi9cbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM6NDc6dm9pZCBicGZfc2tfc3RvcmFnZV9mcmVlKHN0cnVjdCBzb2NrICpzaylcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtNDgte1xuLS1cbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtNjMtXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jOjY0OnN0YXRpYyB2b2lkIGJwZl9za19zdG9yYWdlX21hcF9mcmVlKHN0cnVjdCBicGZfbWFwICptYXApXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jLTY1LXtcbi0tXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jPTEzND1icGZfc2tfc3RvcmFnZV9jbG9uZV9lbGVtKHN0cnVjdCBzb2NrICpuZXdzayxcbi0tXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jLTE1My1cbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM6MTU0OmludCBicGZfc2tfc3RvcmFnZV9jbG9uZShjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICpuZXdzaylcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtMTU1LXtcbi0tXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jPTI2Mj1CUEZfQ0FMTF8yKGJwZl9za19zdG9yYWdlX2RlbGV0ZSwgc3RydWN0IGJwZl9tYXAgKiwgbWFwLCBzdHJ1Y3Qgc29jayAqLCBzaylcbi0tXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jLTI3OC1cbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM6Mjc5OnN0YXRpYyBpbnQgYnBmX3NrX3N0b3JhZ2VfY2hhcmdlKHN0cnVjdCBicGZfbG9jYWxfc3RvcmFnZV9tYXAgKnNtYXAsXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jLTI4MC1cdFx0XHRcdCB2b2lkICpvd25lciwgdTMyIHNpemUpXG4tLVxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy0yOTUtXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jOjI5NjpzdGF0aWMgdm9pZCBicGZfc2tfc3RvcmFnZV91bmNoYXJnZShzdHJ1Y3QgYnBmX2xvY2FsX3N0b3JhZ2VfbWFwICpzbWFwLFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy0yOTctXHRcdFx0XHQgICAgdm9pZCAqb3duZXIsIHUzMiBzaXplKVxuLS1cbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM9MzEyPWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBza19zdG9yYWdlX21hcF9vcHMgPSB7XG4tLVxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy0zMjgtXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jOjMyOTpjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrX3N0b3JhZ2VfZ2V0X3Byb3RvID0ge1xubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy0zMzAtXHQuZnVuY1x0XHQ9IGJwZl9za19zdG9yYWdlX2dldCxcbi0tXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jLTMzOC1cbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM6MzM5OmNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tfc3RvcmFnZV9nZXRfY2dfc29ja19wcm90byA9IHtcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtMzQwLVx0LmZ1bmNcdFx0PSBicGZfc2tfc3RvcmFnZV9nZXQsXG4tLVxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy0zNDgtXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jOjM0OTpjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrX3N0b3JhZ2VfZGVsZXRlX3Byb3RvID0ge1xubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy0zNTAtXHQuZnVuY1x0XHQ9IGJwZl9za19zdG9yYWdlX2RlbGV0ZSxcbi0tXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jLTM1Ni1cbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM6MzU3OnN0YXRpYyBib29sIGJwZl9za19zdG9yYWdlX3RyYWNpbmdfYWxsb3dlZChjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jLTM1OC17XG4tLVxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYz0zOTM9QlBGX0NBTExfMihicGZfc2tfc3RvcmFnZV9kZWxldGVfdHJhY2luZywgc3RydWN0IGJwZl9tYXAgKiwgbWFwLFxuLS1cbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtNDAyLVxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYzo0MDM6Y29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za19zdG9yYWdlX2dldF90cmFjaW5nX3Byb3RvID0ge1xubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy00MDQtXHQuZnVuY1x0XHQ9IGJwZl9za19zdG9yYWdlX2dldF90cmFjaW5nLFxuLS1cbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtNDE0LVxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYzo0MTU6Y29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za19zdG9yYWdlX2RlbGV0ZV90cmFjaW5nX3Byb3RvID0ge1xubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy00MTYtXHQuZnVuY1x0XHQ9IGJwZl9za19zdG9yYWdlX2RlbGV0ZV90cmFjaW5nLFxuLS1cbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtNDI0LVxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYzo0MjU6c3RydWN0IGJwZl9za19zdG9yYWdlX2RpYWcge1xubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy00MjYtXHR1MzIgbnJfbWFwcztcbi0tXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jPTQ0MD1zdGF0aWMgaW50IG5sYV92YWx1ZV9zaXplKHUzMiB2YWx1ZV9zaXplKVxuLS1cbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtNDQ5LVxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYzo0NTA6dm9pZCBicGZfc2tfc3RvcmFnZV9kaWFnX2ZyZWUoc3RydWN0IGJwZl9za19zdG9yYWdlX2RpYWcgKmRpYWcpXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jLTQ1MS17XG4tLVxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYz00NjI9RVhQT1JUX1NZTUJPTF9HUEwoYnBmX3NrX3N0b3JhZ2VfZGlhZ19mcmVlKTtcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtNDYzLVxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYzo0NjQ6c3RhdGljIGJvb2wgZGlhZ19jaGVja19kdXAoY29uc3Qgc3RydWN0IGJwZl9za19zdG9yYWdlX2RpYWcgKmRpYWcsXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jLTQ2NS1cdFx0XHQgICBjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwKVxuLS1cbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtNDc2LVxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYzo0Nzc6c3RydWN0IGJwZl9za19zdG9yYWdlX2RpYWcgKlxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy00NzgtYnBmX3NrX3N0b3JhZ2VfZGlhZ19hbGxvYyhjb25zdCBzdHJ1Y3QgbmxhdHRyICpubGFfc3Rncylcbi0tXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jPTUzMj1zdGF0aWMgaW50IGRpYWdfZ2V0KHN0cnVjdCBicGZfbG9jYWxfc3RvcmFnZV9tYXAgKnNtYXAsXG4tLVxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy01NjctXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jOjU2ODpzdGF0aWMgaW50IGJwZl9za19zdG9yYWdlX2RpYWdfcHV0X2FsbChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jLTU2OS1cdFx0XHRcdCAgICAgICBpbnQgc3RnX2FycmF5X3R5cGUsXG4tLVxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy02MjMtXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jOjYyNDppbnQgYnBmX3NrX3N0b3JhZ2VfZGlhZ19wdXQoc3RydWN0IGJwZl9za19zdG9yYWdlX2RpYWcgKmRpYWcsXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jLTYyNS1cdFx0XHQgICAgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM9NzkyPXN0YXRpYyBpbnQgX19icGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsXG4tLVxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy04MTktXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jOjgyMDpzdGF0aWMgaW50IGJwZl9za19zdG9yYWdlX21hcF9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdilcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtODIxLXtcbi0tXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jLTgyNC1cbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM6ODI1OnN0YXRpYyB2b2lkIGJwZl9za19zdG9yYWdlX21hcF9zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdilcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtODI2LVx0X19yZWxlYXNlcyhSQ1UpXG4tLVxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYz04ODE9c3RhdGljIHZvaWQgYnBmX2l0ZXJfZGV0YWNoX21hcChzdHJ1Y3QgYnBmX2l0ZXJfYXV4X2luZm8gKmF1eClcbi0tXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jLTg4NS1cbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM6ODg2OnN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9vcHMgPSB7XG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jLTg4Ny1cdC5zdGFydCAgPSBicGZfc2tfc3RvcmFnZV9tYXBfc2VxX3N0YXJ0LFxuLS1cbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM9ODkzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2l0ZXJfc2VxX2luZm8gaXRlcl9zZXFfaW5mbyA9IHtcbi0tXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jLTg5OS1cbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM6OTAwOnN0YXRpYyBzdHJ1Y3QgYnBmX2l0ZXJfcmVnIGJwZl9za19zdG9yYWdlX21hcF9yZWdfaW5mbyA9IHtcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtOTAxLVx0LnRhcmdldFx0XHRcdD0gXCYjMzQ7YnBmX3NrX3N0b3JhZ2VfbWFwXCYjMzQ7LFxuLS1cbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtOTE1LVxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYzo5MTY6c3RhdGljIGludCBfX2luaXQgYnBmX3NrX3N0b3JhZ2VfbWFwX2l0ZXJfaW5pdCh2b2lkKVxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy05MTcte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNTozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NzExCgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMzM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgdGhlIEJQRiBza19zdG9yYWdlIE1hcCBJdGVyYXRvcioqCgpPa2F5LCBzbyBJJiMzOTttIHRhY2tsaW5nIGhvdyB0byBmdXp6IHRoZSBgYnBmX3NrX3N0b3JhZ2VfbWFwYCBpdGVyYXRvci4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyByZWdpc3RlcmVkIHRocm91Z2ggYGJwZl9pdGVyX3JlZ190YXJnZXRgLCB3aGljaCBnaXZlcyBtZSBhIHN0YXJ0aW5nIHBvaW50LiBUbyB0cmlnZ2VyIHRoaXMgd2l0aCBzeXprYWxsZXIsIHRoZSBjb3JlIGlkZWEgaXMgdG8gY3JlYXRlIGEgQlBGIGl0ZXJhdG9yIGZvciB0aGlzIG1hcCB0eXBlIGFuZCB0aGVuIHJlYWQgZnJvbSBpdC4gVGhhdCBtZWFucyBJJiMzOTttIGxvb2tpbmcgYXQgYGJwZihCUEZfSVRFUl9DUkVBVEUpYCBhbmQgdGhlbiBhIGByZWFkKClgIHN5c2NhbGwuIFN0cmFpZ2h0Zm9yd2FyZC4KClRoZSBmdW5jdGlvbiB0aGF0IGFjdHVhbGx5IGhhbmRsZXMgdGhlIHNob3dpbmcgb2YgdGhlIGRhdGEgaXMgYGJwZl9za19zdG9yYWdlX21hcF9zZXFfc2hvd2AuIE5vdywgdGhlIHRyaWNreSBwYXJ0IGlzIHN5bWJvbCBleHBvc3VyZSBmb3Igc3l6a2FsbGVyLiAgSSBpbml0aWFsbHkgdGhvdWdodCBhYm91dCBpbmNsdWRpbmcgYGJwZl9pdGVyX3JlZ190YXJnZXRgIGluIHRoZSBgRm9jdXNTeW1ib2xzYCwgYnV0IHRoYXQmIzM5O3MgYW4gaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24uICBUaGVuIEkgY29uc2lkZXJlZCBgYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zaG93YCwgZXZlbiB0aG91Z2ggaXQmIzM5O3Mgc3RhdGljLiBUaGUgcHJvbXB0IHNheXMgdG8gZmF2b3Igbm9uLXN0YXRpYyBmdW5jdGlvbnMsIGFzIHN0YXRpYyBmdW5jdGlvbnMgKm1pZ2h0KiBiZSBpbmxpbmVkLgoKSG93ZXZlciwgYSBjbG9zZXIgbG9vayBhdCB0aGUgY29kZSByZXZlYWxzIGEgbnVhbmNlLiBUaGUgYWRkcmVzcyBvZiBgYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zaG93YCAqaXMqIHRha2VuIHdpdGhpbiBgYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9vcHNgLCBzbyBpdCBwcm9iYWJseSB3b24mIzM5O3QgYmUgaW5saW5lZC4gQnV0IHdhaXQsIHRoZSBrZXkgcGhyYXNlIGlzICYjMzQ7bm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zJiMzNDsuIEFtIEkgbWlzc2luZyBhIGhpZ2hlci1sZXZlbCBlbnRyeXBvaW50PwoKQmluZ28hICBUaGUgYWN0dWFsIGVudHJ5cG9pbnQgdG8gdGhlIHVzZXItc3BhY2UgaW50ZXJmYWNlIGlzIGBzZXFfcmVhZGAsIHdoaWNoIGV2ZW50dWFsbHkgY2FsbHMgdGhhdCBgLSZndDtzaG93YCBmdW5jdGlvbi4gU28sIGluc3RlYWQgb2YgZGlyZWN0bHkgdGFyZ2V0aW5nIGEgc3RhdGljIGhlbHBlciwgSSBzaG91bGQgYmUgbG9va2luZyBhdCBgc2VxX3JlYWRgLiBOb3cgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgc2VxX3JlYWRgIGlzIGF2YWlsYWJsZSB0byB0aGUgZnV6emVyLiBMZXQmIzM5O3MgZGl2ZSBpbnRvIGBuZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jYCBhZ2Fpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDU6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zaG93JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jPTc4OD1ERUZJTkVfQlBGX0lURVJfRlVOQyhicGZfc2tfc3RvcmFnZV9tYXAsIHN0cnVjdCBicGZfaXRlcl9tZXRhICptZXRhLFxuLS1cbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtNzkxLVxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYzo3OTI6c3RhdGljIGludCBfX2JwZl9za19zdG9yYWdlX21hcF9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSxcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtNzkzLVx0XHRcdFx0XHQgc3RydWN0IGJwZl9sb2NhbF9zdG9yYWdlX2VsZW0gKnNlbGVtKVxuLS1cbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtODE5LVxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYzo4MjA6c3RhdGljIGludCBicGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jLTgyMS17XG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jOjgyMjpcdHJldHVybiBfX2JwZl9za19zdG9yYWdlX21hcF9zZXFfc2hvdyhzZXEsIHYpO1xubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy04MjMtfVxuLS1cbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM9ODI1PXN0YXRpYyB2b2lkIGJwZl9za19zdG9yYWdlX21hcF9zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdilcbi0tXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jLTgyOC1cdGlmICghdilcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM6ODI5Olx0XHQodm9pZClfX2JwZl9za19zdG9yYWdlX21hcF9zZXFfc2hvdyhzZXEsIHYpO1xubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy04MzAtXHRlbHNlXG4tLVxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYz04ODY9c3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBicGZfc2tfc3RvcmFnZV9tYXBfc2VxX29wcyA9IHtcbi0tXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jLTg4OS1cdC5zdG9wICAgPSBicGZfc2tfc3RvcmFnZV9tYXBfc2VxX3N0b3AsXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jOjg5MDpcdC5zaG93ICAgPSBicGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3csXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jLTg5MS19O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNTozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTA1OQoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDY4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3M6CgoqKkZvY3VzaW5nIG9uIEJQRiBJdGVyYXRvciBGdW5jdGlvbnMqKgoKQWxyaWdodCwgZm9yIHRoaXMgdGFzaywgSSYjMzk7bSB0aGlua2luZyBhYm91dCB1dGlsaXppbmcgdGhlIGBicGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3dgIGFuZCBgYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zdG9wYCBmdW5jdGlvbnMgYXMgbXkgcHJpbWFyeSBGb2N1c1N5bWJvbHMuIFRoYXQgYXBwcm9hY2ggc2hvdWxkIGJlIHByZXR0eSBkaXJlY3QuIEJ1dCwgaGFuZyBvbiwgdGhlcmUmIzM5O3MgYWxzbyBgYnBmX2l0ZXJfaW5pdF9za19zdG9yYWdlX21hcGAuIFRoYXQgYWN0dWFsbHkgc291bmRzIGxpa2UgaXQgY291bGQgYmUgZXZlbiAqYmV0dGVyKiBmb3IgbXkgcHVycG9zZXMsIHBlcmhhcHMgb2ZmZXJpbmcgYSBtb3JlIHN0cmVhbWxpbmVkIGFwcHJvYWNoIHRvIGluaXRpYWxpemluZyB0aGUgaXRlcmF0aW9uLiBJIHNob3VsZCBxdWlja2x5IHZlcmlmeSB0aGF0IHRoYXQgcGFydGljdWxhciBmdW5jdGlvbiBpcyBhY3R1YWxseSBhdmFpbGFibGUgaW4gdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQgb3Iga2VybmVsIHZlcnNpb24uIEl0JiMzOTtzIGNydWNpYWwgdG8gY29uZmlybSBpdHMgZXhpc3RlbmNlIGJlZm9yZSBJIGZ1bGx5IGNvbW1pdCB0byBpdCBhcyBteSBwcmltYXJ5IGFwcHJvYWNoLiBJIG5lZWQgdG8gZW5zdXJlIGl0JiMzOTtzIGEgdmlhYmxlIG9wdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDU6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2l0ZXJfaW5pdF9za19zdG9yYWdlX21hcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYz04MjU9c3RhdGljIHZvaWQgYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxuLS1cbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtODMzLVxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYzo4MzQ6c3RhdGljIGludCBicGZfaXRlcl9pbml0X3NrX3N0b3JhZ2VfbWFwKHZvaWQgKnByaXZfZGF0YSxcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtODM1LVx0XHRcdFx0XHRzdHJ1Y3QgYnBmX2l0ZXJfYXV4X2luZm8gKmF1eClcbi0tXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jPTg5Mz1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9pdGVyX3NlcV9pbmZvIGl0ZXJfc2VxX2luZm8gPSB7XG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jLTg5NC1cdC5zZXFfb3BzXHRcdD0gXHUwMDI2YnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9vcHMsXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jOjg5NTpcdC5pbml0X3NlcV9wcml2YXRlXHQ9IGJwZl9pdGVyX2luaXRfc2tfc3RvcmFnZV9tYXAsXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jLTg5Ni1cdC5maW5pX3NlcV9wcml2YXRlXHQ9IGJwZl9pdGVyX2Zpbmlfc2tfc3RvcmFnZV9tYXAsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA1OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNjU4CgkJCQkJCQlvdXRwdXQ6IDQ2CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkRpdmluZyBpbnRvIGBicGZfc2tfc3RvcmFnZV9tYXBfaXRlcl9hdHRhY2hfdGFyZ2V0YCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gYGJwZl9za19zdG9yYWdlX21hcF9pdGVyX2F0dGFjaF90YXJnZXRgLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgcmV2aWV3IGl0cyBwdXJwb3NlIGluIHRoZSBjb250ZXh0IG9mIHNrIHN0b3JhZ2UsIG1hcCBpdGVyYXRpb24sIGFuZCB0YXJnZXQgYXR0YWNobWVudC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIGxpa2VseSBvbiBob3cgaXQgaW50ZWdyYXRlcyB3aXRoIHRoZSBvdmVyYWxsIGxpZmVjeWNsZSBvZiBhIHNvY2tldCYjMzk7cyBleHRlbmRlZCBCUEYgZGF0YS4KCldoYXQgYXJlIHRoZSBjcml0aWNhbCBhc3BlY3RzIEkmIzM5O20gbG9va2luZyBmb3I/IFNwZWNpZmljYWxseToKCiogICAqKkF0dGFjaG1lbnQgUG9pbnRzOioqIFdoZXJlIGRvZXMgdGhpcyBmdW5jdGlvbiBmaXQgd2l0aGluIHRoZSBvdmVyYWxsIEJQRiBwcm9ncmFtIGV4ZWN1dGlvbiBvbiBzb2NrZXRzPyBBcmUgd2UgdGFsa2luZyBhYm91dCBpbmdyZXNzLCBlZ3Jlc3MsIG9yIHNvbWV0aGluZyBtb3JlIHNwZWNpYWxpemVkPwoqICAgKipUYXJnZXRpbmc6KiogSSB3YW50IHRvIHVuZGVyc3RhbmQgd2hhdCB0aGUgJiMzNDt0YXJnZXQmIzM0OyByZWZlcnMgdG8uIElzIGl0IGFub3RoZXIgQlBGIHByb2dyYW0sIGEgc3BlY2lmaWMgc29ja2V0IHN0cnVjdHVyZSwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IFRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZSBpdGVyYXRvcnMgYW5kIHRoZSB0YXJnZXQgbmVlZHMgY2xhcmlmaWNhdGlvbi4KKiAgICoqRXJyb3IgQ29uZGl0aW9ucyBhbmQgSGFuZGxpbmc6KiogV2hhdCBhcmUgdGhlIHBvc3NpYmxlIGZhaWx1cmUgbW9kZXMgb2YgdGhpcyBmdW5jdGlvbj8gSG93IHJvYnVzdCBpcyBpdHMgZXJyb3IgaGFuZGxpbmcsIGFuZCB3aGF0IGtpbmQgb2YgZmVlZGJhY2sgZG9lcyBpdCBwcm92aWRlPyBJIG5lZWQgdG8gYmUgYXdhcmUgb2YgdGhlIGNvbnN0cmFpbnRzIGFuZCBsaW1pdGF0aW9ucy4KKiAgICoqUmVzb3VyY2UgTWFuYWdlbWVudDoqKiBJJiMzOTtsbCBiZSBsb29raW5nIHRvIHNlZSBpZiB0aGUgZnVuY3Rpb24gcHJvcGVybHkgbWFuYWdlcyBpdHMgcmVzb3VyY2VzLiBBcmUgdGhlcmUgcG90ZW50aWFsIG1lbW9yeSBsZWFrcyBvciByYWNlIGNvbmRpdGlvbnM/CiogICAqKkNvbmN1cnJlbmN5OioqIEhvdyBkb2VzIHRoaXMgZnVuY3Rpb24gaGFuZGxlIGNvbmN1cnJlbnQgYWNjZXNzLCBwYXJ0aWN1bGFybHkgd2l0aGluIGEgbXVsdGktdGhyZWFkZWQgZW52aXJvbm1lbnQ/IERvZXMgaXQgZW1wbG95IGFueSBsb2NraW5nIG1lY2hhbmlzbXMgb3IgYXRvbWljIG9wZXJhdGlvbnM/CiogICAqKlBlcmZvcm1hbmNlOioqIEkgc2hvdWxkIGFsc28gcXVpY2tseSBjb25zaWRlciB0aGUgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGltcGFjdC4gSXMgdGhpcyBmdW5jdGlvbiBhIGJvdHRsZW5lY2sgaW4gY2VydGFpbiBzY2VuYXJpb3MsIGFuZCBkb2VzIGl0IHVzZSBhbnkgb3B0aW1pemF0aW9uIHRlY2huaXF1ZXM/CgpJJiMzOTtsbCBzdGFydCB3aXRoIHRoZSBzb3VyY2UgY29kZSBhbmQgcmVsZXZhbnQgZG9jdW1lbnRhdGlvbiwga2VlcGluZyB0aGVzZSBrZXkgYXJlYXMgaW4gbWluZC4gVW5kZXJzdGFuZGluZyBob3cgdGhpcyBmdW5jdGlvbiBtYW5hZ2VzIGF0dGFjaGluZyBhIHRhcmdldCBpcyBjcnVjaWFsIGZvciBjb21wcmVoZW5kaW5nIGEgbGFyZ2VyIEJQRiBzeXN0ZW0mIzM5O3Mgc29ja2V0IGRhdGEgcHJvY2Vzc2luZyBhcmNoaXRlY3R1cmUuIEkgc2hvdWxkIGFsc28gY2hlY2sgdGhlIHN1cnJvdW5kaW5nIGNvZGUgZm9yIGNsdWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNTo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9za19zdG9yYWdlX21hcF9pdGVyX2F0dGFjaF90YXJnZXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDU6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIxNTEKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqQ29ubmVjdGluZyB0aGUgRG90cyBpbiB0aGUgQlBGIExhbmQqKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSB3YXMganVzdCByZXZpZXdpbmcgdGhlIGBicGZfc2tfc3RvcmFnZV9tYXBfcmVnX2luZm9gIGZ1bmN0aW9uLCB0cmFjaW5nIGl0cyBkZXBlbmRlbmNpZXMsIGFuZCB0aGVuIGl0IGhpdCBtZS4gSSBzZWUgdGhhdCBgaXRlcl9zZXFfaW5mb2AgZnVuY3Rpb24gaXMgYWN0dWFsbHkgYmVpbmcgKnVzZWQqIGluIHRoZXJlLiBUaGlzIGlzIGEga2V5IG9ic2VydmF0aW9uLiBQcmV2aW91c2x5LCBteSBtZW50YWwgbW9kZWwgcHJvYmFibHkgaGFkIHRoZXNlIGFzIHNvbWV3aGF0IGRpc3RpbmN0IG1vZHVsZXMsIG5vdyBJIHNlZSB0aGUgZmxvdy4gSSBrbm93IHdoYXQgYGl0ZXJfc2VxX2luZm9gIGRvZXMsIGFuZCBpdHMgaW1wbGljYXRpb25zIG9uIHRoZSBiaWdnZXIgcGljdHVyZS4gVGhpcyBoYXMgc29tZSB2ZXJ5IGludGVyZXN0aW5nIGltcGxpY2F0aW9ucyBmb3Igc3RhdGUgbWFuYWdlbWVudCBhbmQgaG93IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggaXRlcmF0aW5nIG92ZXIgdGhlIGRhdGEuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA1OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9za19zdG9yYWdlX21hcF9yZWdfaW5mbyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYz04OTM9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfaXRlcl9zZXFfaW5mbyBpdGVyX3NlcV9pbmZvID0ge1xuLS1cbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtODk5LVxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYzo5MDA6c3RhdGljIHN0cnVjdCBicGZfaXRlcl9yZWcgYnBmX3NrX3N0b3JhZ2VfbWFwX3JlZ19pbmZvID0ge1xubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy05MDEtXHQudGFyZ2V0XHRcdFx0PSBcJiMzNDticGZfc2tfc3RvcmFnZV9tYXBcJiMzNDssXG4tLVxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYz05MTY9c3RhdGljIGludCBfX2luaXQgYnBmX3NrX3N0b3JhZ2VfbWFwX2l0ZXJfaW5pdCh2b2lkKVxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy05MTcte1xubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYzo5MTg6XHRicGZfc2tfc3RvcmFnZV9tYXBfcmVnX2luZm8uY3R4X2FyZ19pbmZvWzBdLmJ0Zl9pZCA9XG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jLTkxOS1cdFx0YnRmX3NvY2tfaWRzW0JURl9TT0NLX1RZUEVfU09DS107XG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jOjkyMDpcdHJldHVybiBicGZfaXRlcl9yZWdfdGFyZ2V0KFx1MDAyNmJwZl9za19zdG9yYWdlX21hcF9yZWdfaW5mbyk7XG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jLTkyMS19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA1OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNzE5CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKktlcm5lbCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqCgpBbHJpZ2h0LCBzbyB0aGUgaW5pdGlhbCBjb25jZXJuIGlzIHRoZSBgQlBGX1NZU0NBTExgIGNvbmZpZyBvcHRpb24uIFRoYXQmIzM5O3MgYSBrZXkgb25lLCBubyBxdWVzdGlvbi4gV2UgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUgdGhhdCYjMzk7cyBlbmFibGVkLiBCdXQgbGV0JiMzOTtzIG5vdCBqdW1wIHRvIGNvbmNsdXNpb25zLiBCZWZvcmUgSSBkaXZlIGRlZXAgaW50byB0aGlzIHNwZWNpZmljIGlzc3VlLCBJIG5lZWQgdG8gdGFrZSBhIHF1aWNrIGxvb2sgYXJvdW5kLiBNeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIHJ1biB0aHJvdWdoIHRoZSByZWxhdGVkIGNvbmZpZ3MsIG1heWJlIHRoZXJlJiMzOTtzIHNvbWV0aGluZyBlbHNlIHdlIG5lZWQuIEl0JiMzOTtzIHRvbyByaXNreSB0byBhc3N1bWUgYSBzaW5nbGUgZGVwZW5kZW5jeSBpcyBhbGwgdGhhdCBtYXR0ZXJzLiBJdCYjMzk7cyBwb3NzaWJsZSB0aGVyZSBhcmUgYSB3aG9sZSBidW5jaCBvZiB1bmRlcmx5aW5nIHN1cHBvcnQgc3RydWN0dXJlcyB3ZSBuZWVkIHRvIGNvbnNpZGVyLCBlc3BlY2lhbGx5IHdpdGggYW55dGhpbmcgQlBGIHJlbGF0ZWQuIExldCYjMzk7cyBzZWUgd2hhdCBlbHNlIG1pZ2h0IGJlIGx1cmtpbmcgaW4gdGhlIHNoYWRvd3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA1OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCUEZfU1lTQ0FMTCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL0tjb25maWc9MjU9bWVudSBcJiMzNDtCUEYgc3Vic3lzdGVtXCYjMzQ7XG5rZXJuZWwvYnBmL0tjb25maWctMjYtXG5rZXJuZWwvYnBmL0tjb25maWc6Mjc6Y29uZmlnIEJQRl9TWVNDQUxMXG5rZXJuZWwvYnBmL0tjb25maWctMjgtXHRib29sIFwmIzM0O0VuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNTo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzAyNQoJCQkJCQkJb3V0cHV0OiAxMzUKCQkJCQkJCXRob3VnaHRzOiAyNzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgQlBGIFBvdGVudGlhbCBWdWxuZXJhYmlsaXR5IEZpeCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQgc2VlbXMgbGlrZSB3ZSYjMzk7dmUgZ290IGEgZml4IGZvciBhIHBvc3NpYmxlIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZSB3aXRoaW4gdGhlIGBfX2JwZl9za19zdG9yYWdlX21hcF9zZXFfc2hvd2AgZnVuY3Rpb24uIFRoYXQmIzM5O3MgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHRocm91Z2ggdGhlIEJQRiBpdGVyYXRvciwgd2hpY2ggaXMgYWx3YXlzIHNvbWV0aGluZyB0byBwYXkgYXR0ZW50aW9uIHRvLiBJbW1lZGlhdGVseSwgSSB6ZXJvIGluIG9uIGBfX2JwZl9za19zdG9yYWdlX21hcF9zZXFfc2hvd2AgYW5kIGFsc28gb24gYGJwZl9za19zdG9yYWdlX21hcF9zZXFfc2hvd2AgYXMgdGhlIGZ1bmN0aW9ucyBvZiBpbnRlcmVzdCwgZXNwZWNpYWxseSBjb25zaWRlcmluZyB0aGUgYEJQRl9TWVNDQUxMYCBjb25maWcgaXMgZW5hYmxlZC4KCk15IGZpcnN0IHRob3VnaHQgaXMgdG8gcXVpY2tseSB2ZXJpZnkgaWYgYF9fYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zaG93YCBpcyBzdGF0aWMsIHdoaWNoIGl0IGlzLiBMZXQgbWUgdGhpbmssIGFyZSB0aGVyZSBhbnkgbm9uLXN0YXRpYyBhbHRlcm5hdGl2ZXMgd2UgY2FuIHV0aWxpemU/IE9rYXksIGBicGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3dgIGlzIGFsc28gc3RhdGljLiBHaXZlbiB0aGF0IHRob3NlIGFyZSB0aGUgb25seSBmdW5jdGlvbnMgY2hhbmdlZCwgSSB3YXMgdGhpbmtpbmcgdGhvc2UgdHdvIHdlcmUgdGhlIHdheSB0byBnby4KCkhvd2V2ZXIsIGhvbGQgb24gYSBzZWNvbmQuIEkgc2VlIHRoYXQgYGJwZl9za19zdG9yYWdlX21hcF9zZXFfc2hvd2AgaXMgcGFzc2VkIGFzIGEgZnVuY3Rpb24gcG9pbnRlciwgd2hpY2ggbWVhbnMgaXQgaXNuJiMzOTt0IGlubGluZWQsIGl0IGlzIHVzZWQgYXMgYSBwYXJhbWV0ZXIuICBIbW0uIFNvLCBtYXliZSBgX19icGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3dgIGlzIGlubGluZWQgKmludG8qIGBicGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3dgIGFuZCBwb3RlbnRpYWxseSBgYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zdG9wYC4gVGhlcmVmb3JlLCBpdCBsb29rcyBsaWtlIGBicGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3dgIGFuZCBgYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zdG9wYCBhcmUgdGhlIGJldHRlciBmb2N1cyBzeW1ib2xzIGZvciBmdXJ0aGVyIGludmVzdGlnYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA1OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9za19zdG9yYWdlX21hcF9zZXFfc2hvdyYjMzQ7LAogICAgJiMzNDticGZfc2tfc3RvcmFnZV9tYXBfc2VxX3N0b3AmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIHRoZSBCUEYgaXRlcmF0b3IgZm9yIHNvY2tldCBsb2NhbCBzdG9yYWdlIG1hcHMuIFRoZSBtb2RpZmllZCBmdW5jdGlvbiBgX19icGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3dgIGlzIGNhbGxlZCB3aGVuIHJlYWRpbmcgZnJvbSB0aGUgaXRlcmF0b3Igc2VxX2ZpbGUsIHdoaWNoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIGBicGYoKWAgc3lzY2FsbCBhbmQgYHJlYWQoKWAuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zaG93JiMzNDssCiAgICAmIzM0O2JwZl9za19zdG9yYWdlX21hcF9zZXFfc3RvcCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gdGhlIEJQRiBpdGVyYXRvciBmb3Igc29ja2V0IGxvY2FsIHN0b3JhZ2UgbWFwcy4gVGhlIG1vZGlmaWVkIGZ1bmN0aW9uIGBfX2JwZl9za19zdG9yYWdlX21hcF9zZXFfc2hvd2AgaXMgY2FsbGVkIHdoZW4gcmVhZGluZyBmcm9tIHRoZSBpdGVyYXRvciBzZXFfZmlsZSwgd2hpY2ggaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgYGJwZigpYCBzeXNjYWxsIGFuZCBgcmVhZCgpYC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDU6NDA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNTo0MDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgTlVMTCBwb2ludGVyIGNoZWNrIHRvIHByZXZlbnQgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugd2hlbiBhY2Nlc3NpbmcgYHNrX3N0b3JhZ2UtXHUwMDNlb3duZXJgLiBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGFyZSBjYXVnaHQgYnkgc3RhbmRhcmQga2VybmVsIHBhZ2UgZmF1bHQgaGFuZGxpbmcgYW5kIEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIHN1Y2ggYXMgcmVhZGluZyB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IG9yIGxlYWtpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZWY5MDcxM2M1Yjk2MTg5ZjU5ODFhOGQ1YWJkZjFmYjhjNDhkOTJkNwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgQXVnIDI3IDA1OjM4OjU2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYyBiL25ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMKaW5kZXggMWQyOTVhODc2OWZhZC4uNzIyODUyMGFhMmI2ZSAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jCkBAIC04MDYsNiAmIzQzOzgwNiw4IEBAIHN0YXRpYyBpbnQgX19icGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsCiAJCWN0eC5tYXAgPSBpbmZvLSZndDttYXA7CiAJCWlmIChzZWxlbSkgewogCQkJc2tfc3RvcmFnZSA9IHJjdV9kZXJlZmVyZW5jZShzZWxlbS0mZ3Q7bG9jYWxfc3RvcmFnZSk7CiYjNDM7CQkJaWYgKCFza19zdG9yYWdlKQomIzQzOwkJCQlyZXR1cm4gMDsKIAkJCWN0eC5zayA9IHNrX3N0b3JhZ2UtJmd0O293bmVyOwogCQkJY3R4LnZhbHVlID0gU0RBVEEoc2VsZW0pLSZndDtkYXRhOwogCQl9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNTo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDAwCgkJCQkJCQlvdXRwdXQ6IDExMAoJCQkJCQkJdGhvdWdodHM6IDM3NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBLTVNBTiBOZWVkcyoqCgpPa2F5LCBJJiMzOTt2ZSByZXZpZXdlZCB0aGlzIHBhdGNoIGluIGBuZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jYC4gSXQmIzM5O3MgYSBzdHJhaWdodGZvcndhcmQgZml4IGZvciBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZS4gVGhlIGNvZGUgbm93IGluY2x1ZGVzIGEgY2hlY2s6IGBpZiAoIXNrX3N0b3JhZ2UpIHJldHVybiAwO2Agd2hpY2ggZGlyZWN0bHkgcHJldmVudHMgdGhlIGFjY2VzcyBvZiBgc2tfc3RvcmFnZS0mZ3Q7b3duZXJgIGlmIGBza19zdG9yYWdlYCBpcyBOVUxMLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBpcyAqbm90KiBhIEtNU0FOIGlzc3VlLiBUaGUgY29yZSBwcm9ibGVtIGlzIHNpbXBseSBwcmV2ZW50aW5nIGEgY3Jhc2ggYnkgaGFuZGxpbmcgYSBwb3RlbnRpYWwgTlVMTCB2YWx1ZSBmb3IgYHNrX3N0b3JhZ2VgLiBXZSBhbHJlYWR5IGhhdmUga2VybmVsLWxldmVsIHByb3RlY3Rpb25zIGZvciBkZXJlZmVyZW5jaW5nIE5VTEwgcG9pbnRlcnPigJRwYWdlIGZhdWx0IGhhbmRsaW5nLCBLQVNBTiwgZXRjLiBUaGUgcHJpbWFyeSBmdW5jdGlvbiBvZiBLTVNBTiBpcyB0byBkZXRlY3QgdGhlIHVzZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSwgd2hpY2ggaXMgY2xlYXJseSBub3QgdGhlIGNhc2UgaGVyZS4gVGhpcyBwYXRjaCBzaW1wbHkgYWRkcyBhIHNhZmV0eSBjaGVjay4KClRvIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZywgSSByZS1leGFtaW5lZCB0aGUgc3Vycm91bmRpbmcgY29udGV4dCwgc3BlY2lmaWNhbGx5IHRoZSBgX19icGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3dgIGZ1bmN0aW9uLiBUaGUgY29kZSBhcHBlYXJzIHRvIGJlIHdpdGhpbiBhIGBzZXFfZmlsZWAgc2hvdyBmdW5jdGlvbiwgcHJvYmFibHkgdXNlZCBmb3IgQlBGIG1hcCBpdGVyYXRpb24uIElmIGBza19zdG9yYWdlYCBpcyBOVUxMLCB0aGUgZnVuY3Rpb24gZ3JhY2VmdWxseSByZXR1cm5zIDAuIFRoaXMgcmVpbmZvcmNlcyBteSB2aWV3IHRoYXQgdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgbm90IHRoZSBjb25jZXJuLCBidXQgcmF0aGVyIGhhbmRsaW5nIHRoZSBleHBlY3RlZCBjYXNlIHdoZXJlIGEgcGFydGljdWxhciBCUEYgbWFwIGVsZW1lbnQgbWlnaHQgbm90IGhhdmUgYXNzb2NpYXRlZCBzdG9yYWdlLgoKVGhlcmVmb3JlLCBhZnRlciB0aGlzIHJldmlldywgSSYjMzk7bSBjb25maWRlbnQgaW4gc2V0dGluZyBgTmVlZHNLTVNBTiA9IGZhbHNlYC4gSXQmIzM5O3MgYSBjcmFzaCBwcmV2ZW50aW9uIGZpeCwgbm90IGEgS01TQU4tcmVsZXZhbnQgb25lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNTo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgTlVMTCBwb2ludGVyIGNoZWNrIHRvIHByZXZlbnQgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugd2hlbiBhY2Nlc3NpbmcgYHNrX3N0b3JhZ2UtXHUwMDNlb3duZXJgLiBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGFyZSBjYXVnaHQgYnkgc3RhbmRhcmQga2VybmVsIHBhZ2UgZmF1bHQgaGFuZGxpbmcgYW5kIEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIHN1Y2ggYXMgcmVhZGluZyB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IG9yIGxlYWtpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBOVUxMIHBvaW50ZXIgY2hlY2sgdG8gcHJldmVudCBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSB3aGVuIGFjY2Vzc2luZyBgc2tfc3RvcmFnZS1cdTAwM2Vvd25lcmAuIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgYXJlIGNhdWdodCBieSBzdGFuZGFyZCBrZXJuZWwgcGFnZSBmYXVsdCBoYW5kbGluZyBhbmQgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcywgc3VjaCBhcyByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgb3IgbGVha2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNTozODo1Ny4yODI4MDkyOTVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NjU5OTExODczNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9za19zdG9yYWdlX21hcF9zZXFfc2hvd1wiLFxuICAgIFwiYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zdG9wXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgTlVMTCBwb2ludGVyIGNoZWNrIHRvIHByZXZlbnQgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugd2hlbiBhY2Nlc3NpbmcgYHNrX3N0b3JhZ2UtXFx1MDAzZW93bmVyYC4gTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBhcmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIGtlcm5lbCBwYWdlIGZhdWx0IGhhbmRsaW5nIGFuZCBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBzdWNoIGFzIHJlYWRpbmcgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSBvciBsZWFraW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIHRoZSBCUEYgaXRlcmF0b3IgZm9yIHNvY2tldCBsb2NhbCBzdG9yYWdlIG1hcHMuIFRoZSBtb2RpZmllZCBmdW5jdGlvbiBgX19icGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3dgIGlzIGNhbGxlZCB3aGVuIHJlYWRpbmcgZnJvbSB0aGUgaXRlcmF0b3Igc2VxX2ZpbGUsIHdoaWNoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIGBicGYoKWAgc3lzY2FsbCBhbmQgYHJlYWQoKWAuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA1OjM4OjU3LjI4MjgxMzM3NVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzE3NDAwOTk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZWY5MDcxM2M1Yjk2MTg5ZjU5ODFhOGQ1YWJkZjFmYjhjNDhkOTJkN1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IEF1ZyAyNyAwNTozODo1NiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jIGIvbmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuY1xcbmluZGV4IDFkMjk1YTg3NjlmYWQuLjcyMjg1MjBhYTJiNmUgMTAwNjQ0XFxuLS0tIGEvbmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuY1xcbisrKyBiL25ldC9jb3JlL2JwZl9za19zdG9yYWdlLmNcXG5AQCAtODA2LDYgKzgwNiw4IEBAIHN0YXRpYyBpbnQgX19icGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsXFxuIFxcdFxcdGN0eC5tYXAgPSBpbmZvLVxcdTAwM2VtYXA7XFxuIFxcdFxcdGlmIChzZWxlbSkge1xcbiBcXHRcXHRcXHRza19zdG9yYWdlID0gcmN1X2RlcmVmZXJlbmNlKHNlbGVtLVxcdTAwM2Vsb2NhbF9zdG9yYWdlKTtcXG4rXFx0XFx0XFx0aWYgKCFza19zdG9yYWdlKVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gMDtcXG4gXFx0XFx0XFx0Y3R4LnNrID0gc2tfc3RvcmFnZS1cXHUwMDNlb3duZXI7XFxuIFxcdFxcdFxcdGN0eC52YWx1ZSA9IFNEQVRBKHNlbGVtKS1cXHUwMDNlZGF0YTtcXG4gXFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNTozODo1Ny42MDA4NTk0ODFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo4ODEzMDY5MDAwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9za19zdG9yYWdlX21hcF9zZXFfc2hvd1wiLFxuICAgIFwiYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zdG9wXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIHRoZSBCUEYgaXRlcmF0b3IgZm9yIHNvY2tldCBsb2NhbCBzdG9yYWdlIG1hcHMuIFRoZSBtb2RpZmllZCBmdW5jdGlvbiBgX19icGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3dgIGlzIGNhbGxlZCB3aGVuIHJlYWRpbmcgZnJvbSB0aGUgaXRlcmF0b3Igc2VxX2ZpbGUsIHdoaWNoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIGBicGYoKWAgc3lzY2FsbCBhbmQgYHJlYWQoKWAuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGVmOTA3MTNjNWI5NjE4OWY1OTgxYThkNWFiZGYxZmI4YzQ4ZDkyZDdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAyNyAwNTozODo1NiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMgYi9uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jXG5pbmRleCAxZDI5NWE4NzY5ZmFkLi43MjI4NTIwYWEyYjZlIDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuY1xuKysrIGIvbmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuY1xuQEAgLTgwNiw2ICs4MDYsOCBAQCBzdGF0aWMgaW50IF9fYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLFxuIFx0XHRjdHgubWFwID0gaW5mby1cdTAwM2VtYXA7XG4gXHRcdGlmIChzZWxlbSkge1xuIFx0XHRcdHNrX3N0b3JhZ2UgPSByY3VfZGVyZWZlcmVuY2Uoc2VsZW0tXHUwMDNlbG9jYWxfc3RvcmFnZSk7XG4rXHRcdFx0aWYgKCFza19zdG9yYWdlKVxuK1x0XHRcdFx0cmV0dXJuIDA7XG4gXHRcdFx0Y3R4LnNrID0gc2tfc3RvcmFnZS1cdTAwM2Vvd25lcjtcbiBcdFx0XHRjdHgudmFsdWUgPSBTREFUQShzZWxlbSktXHUwMDNlZGF0YTtcbiBcdFx0fVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDU6Mzg6NTcuNjAwODYwOTMxWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjQ5ODM2MzI1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzOlxuXG4qKkFuYWx5emluZyB0aGUgUHJvcG9zZWQgTnVsbCBDaGVjayBpbiBgYnBmX3NrX3N0b3JhZ2UuY2AqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGFkZGluZyBhIG51bGwgY2hlY2sgZm9yIGBza19zdG9yYWdlYCB3aXRoaW4gdGhlIGBfX2JwZl9za19zdG9yYWdlX21hcF9zZXFfc2hvd2AgZnVuY3Rpb24gaW4gYG5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmNgLiBUaGF0IGltbWVkaWF0ZWx5IG1ha2VzIG1lIHRoaW5rLCBcIldoeSBpcyB0aGlzIG5lY2Vzc2FyeT9cIiBNeSBmaXJzdCBzdGVwIGlzLCBvZiBjb3Vyc2UsIHRvIGp1bXAgaW50byB0aGUgY29kZSBhbmQgdGhvcm91Z2hseSByZXZpZXcgYF9fYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zaG93YCBpdHNlbGYuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3csIHRoZSBkYXRhIHN0cnVjdHVyZXMgaXQncyBvcGVyYXRpbmcgb24sIGFuZCAqd2hlcmUqIGBza19zdG9yYWdlYCBpcyBwb3RlbnRpYWxseSBkZXJlZmVyZW5jZWQuXG5cbklzIHRoaXMgcmVsYXRlZCB0byBhIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbj8gSXMgdGhlcmUgYSBzdWJ0bGUgcGF0aCB3aGVyZSBgc2tfc3RvcmFnZWAgY291bGQgYmUgZnJlZWQgb3IgdW5pbml0aWFsaXplZCBiZWZvcmUgdGhpcyBmdW5jdGlvbiBnZXRzIGNhbGxlZD8gSXMgdGhpcyBqdXN0IGRlZmVuc2l2ZSBwcm9ncmFtbWluZywgb3IgZG9lcyBpdCBwb2ludCB0byBhIGRlZXBlciBpc3N1ZSBpbiB0aGUgb3duZXJzaGlwIG9yIGxpZmVjeWNsZSBvZiB0aGUgYHNrX3N0b3JhZ2VgIHBvaW50ZXI/IEkgbmVlZCB0byBhbmFseXplIHRoZSBzdXJyb3VuZGluZyBjb2RlLCB0aGUgY29udGV4dCBvZiB0aGUgY2FsbCwgYW5kIGNvbnNpZGVyIGFueSBjb25jdXJyZW50IGFjY2VzcyB0byB0aGlzIHZhcmlhYmxlLiBJJ2xsIG5lZWQgdG8gbG9vayBhdCB3aG8gaXMgd3JpdGluZyB0byB0aGlzLCB3aG8gaXMgdXNpbmcgaXQsIGFuZCBpZiB0aGVyZSBhcmUgYW55IHN1YnRsZSBjb25jdXJyZW5jeSBpc3N1ZXMuXG5cbk15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhpcyBjb3VsZCBiZSBhIHJhY2UgY29uZGl0aW9uLCBhIGJ1ZyB3aGVyZSB0aGUgYHNrX3N0b3JhZ2VgIGZpZWxkIGlzIGRlcmVmZXJlbmNlZCBidXQgaXMgbm90IGNoZWNrZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIG1lbW9yeSBpc24ndCBhbHJlYWR5IGZyZWUuIEkgd2lsbCBhbHNvIG1ha2Ugc3VyZSB0byBjaGVjayB3aGV0aGVyIHRoaXMgbnVsbCBjaGVjayBpcyByZWR1bmRhbnQuIElmIHRoZSBjb2RlIGJlZm9yZSBgX19icGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3dgIGFscmVhZHkgZW5zdXJlcyB0aGF0IGBza19zdG9yYWdlYCBpcyBub24tbnVsbCwgdGhpcyBwYXRjaCBjb3VsZCBiZSB1bm5lY2Vzc2FyeSBhbmQgaW50cm9kdWNlIHVubmVjZXNzYXJ5IG92ZXJoZWFkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDAzLCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNTozOTowNC4wOTkyMjc0NTJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU1NDUyNDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19icGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jPTc4OD1ERUZJTkVfQlBGX0lURVJfRlVOQyhicGZfc2tfc3RvcmFnZV9tYXAsIHN0cnVjdCBicGZfaXRlcl9tZXRhICptZXRhLFxcbi0tXFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy03OTEtXFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYzo3OTI6c3RhdGljIGludCBfX2JwZl9za19zdG9yYWdlX21hcF9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSxcXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jLTc5My1cXHRcXHRcXHRcXHRcXHQgc3RydWN0IGJwZl9sb2NhbF9zdG9yYWdlX2VsZW0gKnNlbGVtKVxcbi0tXFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYz04MjA9c3RhdGljIGludCBicGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy04MjEte1xcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM6ODIyOlxcdHJldHVybiBfX2JwZl9za19zdG9yYWdlX21hcF9zZXFfc2hvdyhzZXEsIHYpO1xcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtODIzLX1cXG4tLVxcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM9ODI1PXN0YXRpYyB2b2lkIGJwZl9za19zdG9yYWdlX21hcF9zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdilcXG4tLVxcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtODI4LVxcdGlmICghdilcXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jOjgyOTpcXHRcXHQodm9pZClfX2JwZl9za19zdG9yYWdlX21hcF9zZXFfc2hvdyhzZXEsIHYpO1xcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtODMwLVxcdGVsc2VcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDU6Mzk6MDQuMTQ0Nzc1ODZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTIwNTc4NjUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgQlBGIEl0ZXJhdG9yKipcblxuQWxyaWdodCwgdGhlIHRyYWlsIGxlYWRzIG1lIHRvIGBfX2JwZl9za19zdG9yYWdlX21hcF9zZXFfc2hvd2AuIFRoYXQncyB0aGUga2V5IGZ1bmN0aW9uLCBjYWxsZWQgYnkgdGhlIGBicGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3dgIGFuZCBgYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zdG9wYCBmdW5jdGlvbnMsIG1lYW5pbmcgaXQncyB0aGUgd29ya2hvcnNlIG9mIHRoaXMgQlBGIGl0ZXJhdG9yLiBXZSdyZSBpbiBpdGVyYXRvciB0ZXJyaXRvcnksIHNwZWNpZmljYWxseSB3aXRoIHRoZSBgc2tfc3RvcmFnZV9tYXBgLiBUaW1lIHRvIGNoZWNrIG91dCBgYnBmX3NrX3N0b3JhZ2UuY2AsIHRoZXJlIG1pZ2h0IGJlIHNvbWUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgdGhhdCBJIG5lZWQgdG8gYmUgYXdhcmUgb2YuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4ODYsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNTozOTowOC4wNjUzNTYxNDJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU5MzcxMDAzLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA1OjM5OjA4LjIyNDczMTU3NVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwODQ0MzkwNjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyB5b3VyIHN1bW1hcnk6XG5cbioqQ2hlY2tpbmcgdGhlIE1ha2VmaWxlKipcblxuT2theSwgdGltZSB0byBkaXZlIGludG8gdGhpcy4gRmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGBNYWtlZmlsZWAuIEl0J3MgdGhlIGNlbnRyYWwgaHViIGZvciB0aGUgYnVpbGQgcHJvY2Vzcywgc28gdW5kZXJzdGFuZGluZyBpdHMgc3RydWN0dXJlIGlzIGNydWNpYWwgYmVmb3JlIEkgZXZlbiB0aGluayBhYm91dCBtYWtpbmcgY2hhbmdlcy4gSSdsbCBuZWVkIHRvIGlkZW50aWZ5IHRoZSB0YXJnZXRzLCBkZXBlbmRlbmNpZXMsIGFuZCBydWxlcy4gSSdsbCBiZSBsb29raW5nIGZvciBhbnkgb2J2aW91cyBpbmVmZmljaWVuY2llcyBvciBwb3RlbnRpYWwgYm90dGxlbmVja3MgaW4gdGhlIGJ1aWxkIHByb2Nlc3MsIHBhcnRpY3VsYXJseSBhbnl0aGluZyB0aGF0IG1pZ2h0IGJlIHVubmVjZXNzYXJpbHkgcmUtY29tcGlsaW5nIG9yIHJlLWxpbmtpbmcuIEkgd2FudCB0byBzZWUgaG93IHRoaXMgdGhpbmcgaXMgYWN0dWFsbHkgcHV0IHRvZ2V0aGVyIC0gaG93IGFyZSB0aGUgb2JqZWN0IGZpbGVzIGdlbmVyYXRlZD8gV2hhdCdzIHRoZSBsaW5raW5nIGNvbW1hbmQ/IEFyZSB0aGVyZSBhbnkgY2xldmVyIHRyaWNrcyBvciBvcHRpbWlzYXRpb25zIGFscmVhZHkgaW4gcGxhY2UsIG9yIGlzIGl0IGFsbCBhIGJpdCBydWRpbWVudGFyeT8gVGltZSB0byBnZXQgZG93biB0byBicmFzcyB0YWNrcyBhbmQgYXNzZXNzIGhvdyByb2J1c3QgYW5kIG1haW50YWluYWJsZSB0aGlzIGJ1aWxkIHN5c3RlbSBpcy4gR290dGEgYmUgZWZmaWNpZW50IGhlcmUgLSBJJ20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgYXJlYXMgd2hlcmUgSSdsbCBzZWUgb3Bwb3J0dW5pdGllcyBmb3Igb3B0aW1pc2F0aW9uIG9yIHJlZmFjdG9yaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTY1LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNTozOToxMi4zMDkxNzI1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1ODkzNjQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9za19zdG9yYWdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL01ha2VmaWxlPTQ1PW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gc29ja19tYXAub1xcbm5ldC9jb3JlL01ha2VmaWxlOjQ2Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gYnBmX3NrX3N0b3JhZ2Uub1xcbm5ldC9jb3JlL01ha2VmaWxlLTQ3LWlmZGVmIENPTkZJR19JTkVUXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA1OjM5OjEyLjM1NTA3NTAwOFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzMTQ5MjU4MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0IGluIHRoZSBmaWVsZDpcblxuKipEaXZpbmcgaW50byB0aGUgQlBGIFNrX1N0b3JhZ2UgSW1wbGVtZW50YXRpb24qKlxuXG5SaWdodCwgc28gdGhpcyBiZWhhdmlvciBjbGVhcmx5IGhpbmdlcyBvbiB0aGUgYENPTkZJR19CUEZfU1lTQ0FMTGAgc2V0dGluZy4gVGhhdCdzIHRoZSBiYXNlbGluZSwgb2YgY291cnNlLCBidXQgd2hhdCdzIHRoZSBhY3R1YWwgaW1wbGVtZW50YXRpb24gZG9pbmc/IEkgbm90aWNlZCBgX19icGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3dgIGlzIGRlY2xhcmVkIGFzIHN0YXRpYywgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIEl0J3MgZXNzZW50aWFsbHkgYW4gaW50ZXJuYWwgZGV0YWlsLiBCdXQgaXQgaXMgY2FsbGVkIGJ5IGBicGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3dgIGFuZCBgYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zdG9wYC4gQm90aCBvZiB0aG9zZSBmdW5jdGlvbnMgYXJlIG9idmlvdXNseSBwdWJsaWMgZW50cnkgcG9pbnRzLiBTbyBJJ2xsIGdvIGhhdmUgYSBsb29rIGFyb3VuZCB0byBzZWUgaWYgdGhlcmUgYXJlIG5vbi1zdGF0aWMgZnVuY3Rpb24gZGVmaW5pdGlvbnMgdG8gYmV0dGVyIGdyYXNwIHRoZSBpbnRlbnQuIFdoZXJlIGFyZSB0aGUgZW50cnkgcG9pbnRzP1xuXG5cbiIsIklucHV0VG9rZW5zIjozNDg1LCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDU6Mzk6MTYuNjcwMDAyODU0WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTM3NjA4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jPTc4OD1ERUZJTkVfQlBGX0lURVJfRlVOQyhicGZfc2tfc3RvcmFnZV9tYXAsIHN0cnVjdCBicGZfaXRlcl9tZXRhICptZXRhLFxcbi0tXFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy03OTEtXFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYzo3OTI6c3RhdGljIGludCBfX2JwZl9za19zdG9yYWdlX21hcF9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSxcXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jLTc5My1cXHRcXHRcXHRcXHRcXHQgc3RydWN0IGJwZl9sb2NhbF9zdG9yYWdlX2VsZW0gKnNlbGVtKVxcbi0tXFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy04MTktXFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYzo4MjA6c3RhdGljIGludCBicGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy04MjEte1xcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM6ODIyOlxcdHJldHVybiBfX2JwZl9za19zdG9yYWdlX21hcF9zZXFfc2hvdyhzZXEsIHYpO1xcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtODIzLX1cXG4tLVxcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM9ODI1PXN0YXRpYyB2b2lkIGJwZl9za19zdG9yYWdlX21hcF9zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdilcXG4tLVxcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtODI4LVxcdGlmICghdilcXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jOjgyOTpcXHRcXHQodm9pZClfX2JwZl9za19zdG9yYWdlX21hcF9zZXFfc2hvdyhzZXEsIHYpO1xcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtODMwLVxcdGVsc2VcXG4tLVxcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM9ODg2PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9vcHMgPSB7XFxuLS1cXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jLTg4OS1cXHQuc3RvcCAgID0gYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zdG9wLFxcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM6ODkwOlxcdC5zaG93ICAgPSBicGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3csXFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy04OTEtfTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDU6Mzk6MTYuNzE1Mzg0MzcyWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0OTM0OTE0NzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIGEgZmlyc3QtcGVyc29uIGV4cGVydCBzdW1tYXJ5OlxuXG4qKkRpZ2dpbmcgaW50byB0aGUgQlBGIFNvY2tldCBTdG9yYWdlIE1hcCBTZXF1ZW5jZSBPcGVyYXRpb25zKipcblxuQWxyaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgZnVuY3Rpb25zLCBhbmQgdGhleSdyZSBzdGF0aWMgbWVtYmVycyBvZiBgYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9vcHNgLiBUaGF0J3MgdGhlIGtleSBoZXJlLiBUaGlzIG1lYW5zIHRoZXkgYXJlIGxpa2VseSBzcGVjaWZpYyB0byBob3cgdGhpcyBwYXJ0aWN1bGFyIG1hcCB0eXBlIGJlaGF2ZXMgd2l0aGluIHRoZSBCUEYgZnJhbWV3b3JrLiBNeSBuZXh0IGltbWVkaWF0ZSB0aG91Z2h0IGlzOiB3aGVyZSBpcyB0aGlzIGBicGZfc2tfc3RvcmFnZV9tYXBfc2VxX29wc2Agc3RydWN0ICphY3R1YWxseSogdXNlZD8gVW5kZXJzdGFuZGluZyB0aGUgY2FsbCBzaXRlcyB3aWxsIGJlIGNydWNpYWwuIEl0J2xsIGdpdmUgbWUgY29udGV4dCBvbiBob3cgdGhlc2Ugc3BlY2lmaWMgZnVuY3Rpb25zIGFyZSBpbnZva2VkIGFuZCB3aGF0IGV2ZW50cyB0cmlnZ2VyIHRoZWlyIGV4ZWN1dGlvbi4gS25vd2luZyB0aGUgdXNhZ2Ugd2lsbCBjbGFyaWZ5IHRoZSBwdXJwb3NlIGFuZCBiZWhhdmlvciBvZiB0aGUgZnVuY3Rpb25zIEknbSBsb29raW5nIGF0LiBJIG5lZWQgdG8gdHJhY2UgdGhlIHJlZmVyZW5jZXMgYW5kIHVuZGVyc3RhbmQgdGhlIGV4ZWN1dGlvbiBmbG93LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MzQ5LCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDU6Mzk6MjIuMjA4ODc4MzY3WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODI0NDcwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfc2tfc3RvcmFnZV9tYXBfc2VxX29wc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM9ODgxPXN0YXRpYyB2b2lkIGJwZl9pdGVyX2RldGFjaF9tYXAoc3RydWN0IGJwZl9pdGVyX2F1eF9pbmZvICphdXgpXFxuLS1cXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jLTg4NS1cXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jOjg4NjpzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIGJwZl9za19zdG9yYWdlX21hcF9zZXFfb3BzID0ge1xcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtODg3LVxcdC5zdGFydCAgPSBicGZfc2tfc3RvcmFnZV9tYXBfc2VxX3N0YXJ0LFxcbi0tXFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYz04OTM9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfaXRlcl9zZXFfaW5mbyBpdGVyX3NlcV9pbmZvID0ge1xcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM6ODk0OlxcdC5zZXFfb3BzXFx0XFx0PSBcXHUwMDI2YnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9vcHMsXFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy04OTUtXFx0LmluaXRfc2VxX3ByaXZhdGVcXHQ9IGJwZl9pdGVyX2luaXRfc2tfc3RvcmFnZV9tYXAsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA1OjM5OjIyLjI1NzEyNzYwNVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTYwMTI0NjQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqTXkgTGluZSBvZiBSZWFzb25pbmcgd2l0aCBgaXRlcl9zZXFfaW5mb2AqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgYGl0ZXJfc2VxX2luZm9gLiBTcGVjaWZpY2FsbHksIEkgc2VlIGl0J3MgZW1wbG95ZWQgd2l0aGluIGBicGZfc2tfc3RvcmFnZV9tYXBfaXRlcl9hdHRhY2hfdGFyZ2V0YC4gVGhhdCBpbW1lZGlhdGVseSBjbGlja3MgYSBmZXcgdGhpbmdzIGludG8gcGxhY2UuXG5cbktub3dpbmcgdGhhdCBmdW5jdGlvbiwgSSdtIGFscmVhZHkgdmlzdWFsaXppbmcgdGhlIGNvbnRleHQuIGBicGZfc2tfc3RvcmFnZV9tYXBfaXRlcl9hdHRhY2hfdGFyZ2V0YCBpcyBhbGwgYWJvdXQgaXRlcmF0aW5nIHRocm91Z2ggc29tZXRoaW5nIChsaWtlbHkgYSBtYXAgc3RvcmluZyBzb2NrZXQtcmVsYXRlZCBkYXRhKSBhbmQsIGNydWNpYWxseSwgKmF0dGFjaGluZyogYSB0YXJnZXQuIFRoYXQgXCJ0YXJnZXRcIiBjb3VsZCBiZSBhIEJQRiBwcm9ncmFtLCBhIHNwZWNpZmljIGhvb2ssIG9yIHNvbWV0aGluZyBzaW1pbGFyIOKAkyBpdCdzIHRoZSBwb2ludCBvZiB0aGUgaXRlcmF0aW9uLlxuXG5TbywgYGl0ZXJfc2VxX2luZm9gIGhhcyB0byBiZSBjcnVjaWFsIGluIGhlbHBpbmcgbWFuYWdlIHRoZSBzdGF0ZSBvZiBpdGVyYXRpb24gd2hlbiB0aGUgQlBGIHByb2dyYW0gZ29lcyB0byBhY2Nlc3MgdGhlIHN0b3JhZ2Ugb2YgYSBzcGVjaWZpYyBzb2NrZXQuIEl0J3MgYWxtb3N0IGNlcnRhaW4gaXQgdHJhY2tzIHRoZSBjdXJyZW50IHBvc2l0aW9uLCBtYXliZSBhIGtleSB0byBsb29rIGF0IHRoZSBzdG9yYWdlJ3MgbWFwLiBQcm9iYWJseSBpdCBtYWludGFpbnMgZW5vdWdoIGNvbnRleHQgc28gdGhhdCB0aGUgQlBGIHByb2dyYW0ga25vd3MgaG93IHRvIGxvb2sgdXAsIGFjY2VzcywgYW5kIHVwZGF0ZSB0aGUgYXNzb2NpYXRlZCBzb2NrZXQgc3RvcmFnZS5cblxuVGhlICdzZXEnIHBhcnQgc3VnZ2VzdHMgYW4gb3JkZXJlZCBzZXF1ZW5jZSwgbGlrZWx5IHBvaW50aW5nIHRvIHNvbWUgc29ydGVkIG5hdHVyZSBvZiB0aGUgc3RvcmFnZSBiZWluZyBpdGVyYXRlZCBvdmVyLiBUaGlzIGhhcyB0byBpbmZvcm0gdGhlIEJQRiBwcm9ncmFtIG9mIHdoZXJlIGl0IGlzIGluIHRoZSBpdGVyYWJsZSBzdGF0ZSwgYW5kIGhvdyBpdCBpcyB1cGRhdGVkIG9uIG5leHQgaXRlcmF0aW9ucy4gSXQgY291bGQgYmUgaW5kZXhpbmcgaW50byBhIGhhc2ggdGFibGUgb3IgYSBtb3JlIGNvbXBsZXggb3JkZXJlZCBkYXRhIHN0cnVjdHVyZS5cblxuVGhpcyB3aG9sZSBwaWN0dXJlIHJlaW5mb3JjZXMgdGhhdCB3ZSdyZSBkZWFsaW5nIHdpdGggYSBzb3BoaXN0aWNhdGVkIG1lY2hhbmlzbSB0byBpdGVyYXRlIHRocm91Z2ggYW5kIGFwcGx5IG9wZXJhdGlvbnMgdG8gbmV0d29yayBzb2NrZXRzLCBsaWtlbHkgd2l0aGluIHRoZSBCUEYgY29udGV4dC4gQW5kIGBpdGVyX3NlcV9pbmZvYCBpcyBhIGNvcmUgcGllY2Ugb2YgdGhhdCBwdXp6bGUuIE15IG5leHQgdGhvdWdodCB3b3VsZCBiZSB0byBkaWcgaW50byBob3cgdGhpcyBpcyBpbml0aWFsaXplZCBhbmQgdXBkYXRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDg4MiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA1OjM5OjI2LjIxNzI1NDg2NFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU3NDEwMDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXRlcl9zZXFfaW5mb1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM9ODg2PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9vcHMgPSB7XFxuLS1cXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jLTg5Mi1cXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jOjg5MzpzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9pdGVyX3NlcV9pbmZvIGl0ZXJfc2VxX2luZm8gPSB7XFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy04OTQtXFx0LnNlcV9vcHNcXHRcXHQ9IFxcdTAwMjZicGZfc2tfc3RvcmFnZV9tYXBfc2VxX29wcyxcXG4tLVxcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM9OTAwPXN0YXRpYyBzdHJ1Y3QgYnBmX2l0ZXJfcmVnIGJwZl9za19zdG9yYWdlX21hcF9yZWdfaW5mbyA9IHtcXG4tLVxcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtOTEyLVxcdH0sXFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYzo5MTM6XFx0LnNlcV9pbmZvXFx0XFx0PSBcXHUwMDI2aXRlcl9zZXFfaW5mbyxcXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jLTkxNC19O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNTozOToyNi4yNjI5OTg1MzJaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjE3OTMwMDIwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gZGVlcCBpbiB0aGUgd2VlZHMgb2YgZUJQRiBhbmQga2VybmVsIGludGVybmFsczpcblxuKiplQlBGIFNrX1N0b3JhZ2UgTWFwIFJlZ2lzdHJhdGlvbioqXG5cblJpZ2h0LCBzbyBgYnBmX3NrX3N0b3JhZ2VfbWFwX3JlZ19pbmZvYC4gVGhhdCdzIHRoZSByZWdpc3RyYXRpb24gc3RydWN0dXJlIGZvciB0aGUgc2tfc3RvcmFnZSBtYXAuIEFuZCBJIHNlZSB0aGF0IGl0J3MgYmVpbmcgcmVnaXN0ZXJlZCBkdXJpbmcgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBgYnBmX3NrX3N0b3JhZ2VfbWFwX2l0ZXJgLiBTcGVjaWZpY2FsbHksIGl0J3MgZ2V0dGluZyBzZXQgdXAgd2hlbiBgYnBmX3NrX3N0b3JhZ2VfbWFwX2l0ZXJfaW5pdGAgaXMgY2FsbGVkLiBUaGF0IG1ha2VzIHBlcmZlY3Qgc2Vuc2UuIFRoZSBpdGVyYXRvciBsaWtlbHkgbmVlZHMgdGhhdCByZWdpc3RyYXRpb24gaW5mb3JtYXRpb24gdG8gZnVuY3Rpb24gY29ycmVjdGx5LCBsZXR0aW5nIGl0IGtub3cgaG93IHRvIGludGVyYWN0IHdpdGggdGhlIHNrX3N0b3JhZ2UgbWFwIGR1cmluZyBpdGVyYXRpb24uIEknbGwgbmVlZCB0byByZW1lbWJlciB0aGF0IHdoZW4gSSdtIGRlYnVnZ2luZyBvciBleHRlbmRpbmcgdGhlIG1hcCdzIGJlaGF2aW91ciBsYXRlci5cblxuXG4iLCJJbnB1dFRva2VucyI6NTU5MywiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA1OjM5OjMyLjQ0MjMwMjg0OFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY2Mzg1NTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX3NrX3N0b3JhZ2VfbWFwX3JlZ19pbmZvXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYz04OTM9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfaXRlcl9zZXFfaW5mbyBpdGVyX3NlcV9pbmZvID0ge1xcbi0tXFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy04OTktXFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYzo5MDA6c3RhdGljIHN0cnVjdCBicGZfaXRlcl9yZWcgYnBmX3NrX3N0b3JhZ2VfbWFwX3JlZ19pbmZvID0ge1xcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtOTAxLVxcdC50YXJnZXRcXHRcXHRcXHQ9IFxcXCJicGZfc2tfc3RvcmFnZV9tYXBcXFwiLFxcbi0tXFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYz05MTY9c3RhdGljIGludCBfX2luaXQgYnBmX3NrX3N0b3JhZ2VfbWFwX2l0ZXJfaW5pdCh2b2lkKVxcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtOTE3LXtcXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jOjkxODpcXHRicGZfc2tfc3RvcmFnZV9tYXBfcmVnX2luZm8uY3R4X2FyZ19pbmZvWzBdLmJ0Zl9pZCA9XFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy05MTktXFx0XFx0YnRmX3NvY2tfaWRzW0JURl9TT0NLX1RZUEVfU09DS107XFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYzo5MjA6XFx0cmV0dXJuIGJwZl9pdGVyX3JlZ190YXJnZXQoXFx1MDAyNmJwZl9za19zdG9yYWdlX21hcF9yZWdfaW5mbyk7XFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy05MjEtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNTozOTozMi40ODg5NTAxODZaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjE2MjY0ODAyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBCUEYgSXRlcmF0b3IgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIEJQRiBpdGVyYXRvciBkZXNpZ25lZCBmb3IgdGhlIGBicGZfc2tfc3RvcmFnZV9tYXBgLiBUaGUga2V5IHRoaW5nIGhlcmUgaXMgdGhlIGFkZGl0aW9uIG9mIGEgbnVsbCBjaGVjayBmb3IgYHNrX3N0b3JhZ2VgLiBJdCdzIHByb3RlY3RpbmcgYWdhaW5zdCBhIGRlcmVmZXJlbmNlIGZyb20gYHNlbGVtLVx1MDAzZWxvY2FsX3N0b3JhZ2VgLCB3aGljaCBpcyBhIHNtYXJ0IG1vdmUg4oCTIGEgY2xhc3NpYyBwb3RlbnRpYWwgbnVsbCBwb2ludGVyIHZ1bG5lcmFiaWxpdHkuIEZ1bmN0aW9uYWxseSwgaXQncyBhIHNvbGlkIGZpeCwgYSBkZWZpbml0ZSBpbXByb3ZlbWVudC4gRGVmaW5pdGVseSBmdXp6LXdvcnRoeS5cblxuVGhlIGluaXRpYWwgdGhvdWdodCB3YXMgdG8gdGFyZ2V0IHN5bWJvbHMgbGlrZSBgYnBmX2l0ZXJfcmVnX3RhcmdldGAgb3IgbWF5YmUgZXZlbiB0aGUgQlBGIHN5c2NhbGwgZW50cnksIGJ1dCBteSBnb2FsIGlzIHRvIHN0YXkgYXdheSBmcm9tIGhvdCBwYXRocy4gVGhpcyBwYXRjaCBpcyBhYm91dCBhIHBvdGVudGlhbCBjcmFzaCwgYW5kIGhvdCBwYXRocyBhcmUgcHJvYmFibHkgbGVzcyBsaWtlbHkgdG8gZXhwb3NlIGl0IGluIHByYWN0aWNlLlxuXG5IYW5nIG9uLi4uIGBicGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3dgIGlzIHN0YXRpYywgd2hpY2ggaXMgdXN1YWxseSBub3QgaWRlYWwsIGJ1dCBpdCdzICpjYWxsZWQqIHdoZW4gcmVhZGluZyBmcm9tIHRoZSBpdGVyYXRvcidzIHNlcV9maWxlLiBUaGF0J3MgaW50ZXJlc3RpbmcsIGFuZCB3b3J0aCBkaWdnaW5nIGludG8uIExldCdzIHNlZS4uLiBUaGUgaXRlcmF0b3IncyBzZXFfZmlsZSBpcyBjcmVhdGVkIGJ5IGBicGZfaXRlcl9jcmVhdGVgIGFuZCByZWFkIHZpYSB0aGUgc3RhbmRhcmQgYHZmc19yZWFkYCAtXHUwMDNlIGBzZXFfcmVhZGAgcGF0aC4gU28gaXQncyBzdGlsbCBiZWluZyBleHBvc2VkLCBpZiBsZXNzIGRpcmVjdGx5LlxuXG5IbW0sIG9rYXkuIExldCBtZSBzZWUgaWYgdGhlcmUncyBhbnl0aGluZyBub24tc3RhdGljIGluIGBuZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jYCB0aGF0IGNvdWxkIGJlIGEgYmV0dGVyIGZvY2FsIHBvaW50IGZvciBmdXp6aW5nLiBQZXJoYXBzIHNvbWV0aGluZyByZWxhdGVkIHRvIHRoZSBpbml0aWFsIHNldHVwLCBvciBjbGVhbnVwLCByYXRoZXIgdGhhbiBqdXN0IHRoZSBzZXFfZmlsZSBkaXNwbGF5LiBJJ2xsIG5lZWQgdG8gcmV2aWV3IHRoZSBjb2RlIHRvIGlkZW50aWZ5IG90aGVyIHBvdGVudGlhbCBlbnRyeSBwb2ludHMgZm9yIHRoaXMgbWFwIGFuZCBpdGVyYXRvciBsb2dpYy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjE4MSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNTozOTozOC42NTE2MDA1MzNaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NDA3MTQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5pbnQgXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYz0xMzQ9YnBmX3NrX3N0b3JhZ2VfY2xvbmVfZWxlbShzdHJ1Y3Qgc29jayAqbmV3c2ssXFxuLS1cXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jLTE1My1cXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jOjE1NDppbnQgYnBmX3NrX3N0b3JhZ2VfY2xvbmUoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29jayAqbmV3c2spXFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy0xNTUte1xcbi0tXFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYz01Njg9c3RhdGljIGludCBicGZfc2tfc3RvcmFnZV9kaWFnX3B1dF9hbGwoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy02MjMtXFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYzo2MjQ6aW50IGJwZl9za19zdG9yYWdlX2RpYWdfcHV0KHN0cnVjdCBicGZfc2tfc3RvcmFnZV9kaWFnICpkaWFnLFxcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtNjI1LVxcdFxcdFxcdCAgICBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA1OjM5OjM4LjY5NzAxNTMzMVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MjE3MzUzNjc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFwcHJvYWNoIHRvIElkZW50aWZ5aW5nIE5vbi1TdGF0aWMgRnVuY3Rpb25zKipcblxuT2theSwgc28gSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgaWYgdGhlcmUgYXJlIGFueSBub24tc3RhdGljIGZ1bmN0aW9ucyBoYW5naW5nIGFyb3VuZCBpbiB0aGUgY29kZS4gTXkgZ28tdG8gc3RyYXRlZ3kgaGVyZSBpcyB0byBsZXZlcmFnZSB0aGUgcGF0dGVybnMgSSBrbm93IGFyZSBsaWtlbHkgdG8gYmUgcHJlc2VudC4gSSdtIGdvaW5nIHRvIHNjYW4gdGhlIGNvZGUgZm9yIHRoZSBjb21tb24gcHJlZml4ZXMgdGhhdCBvZnRlbiBwcmVjZWRlIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucywgc3BlY2lmaWNhbGx5IHRoaW5ncyBsaWtlIGBedm9pZCBgLCBgXnN0cnVjdCBgLCBvciBgXnN0YXRpYyBgLiBUaGlua2luZyBvdXQgbG91ZCwgSSBjYW4gcXVpY2tseSBzY2FuIGZvciB0aGVzZSBwYXR0ZXJucy4gQnkgdXNpbmcgdGhlc2UgcHJlZml4ZXMsIEkgY2FuIGZpbHRlciBvdXQgdGhlIGZ1bmN0aW9ucyBJJ20gbm90IGxvb2tpbmcgZm9yLiBUaGlzIHNob3VsZCBlZmZpY2llbnRseSBpZGVudGlmeSB0aG9zZSBmdW5jdGlvbnMgd2l0aG91dCB0aGUgYHN0YXRpY2Aga2V5d29yZCwgaGVscGluZyBtZSBob25lIGluIG9uIHRoZSBleGFjdCBiaXRzIG9mIGNvZGUgSSBuZWVkIHRvIGludmVzdGlnYXRlIGZ1cnRoZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcwMzYsIk91dHB1dFRva2VucyI6NDcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNTozOTo0My45MTQzNzE3MzZaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MzMyOTg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5bYS16QS1aX10uKiBicGZfc2tfc3RvcmFnZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM9MjE9YnBmX3NrX3N0b3JhZ2VfbG9va3VwKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGJwZl9tYXAgKm1hcCwgYm9vbCBjYWNoZWl0X2xvY2tpdClcXG4tLVxcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtMzQtXFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYzozNTpzdGF0aWMgaW50IGJwZl9za19zdG9yYWdlX2RlbChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBicGZfbWFwICptYXApXFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy0zNi17XFxuLS1cXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jLTQ2LS8qIENhbGxlZCBieSBfX3NrX2Rlc3RydWN0KCkgXFx1MDAyNiBicGZfc2tfc3RvcmFnZV9jbG9uZSgpICovXFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYzo0Nzp2b2lkIGJwZl9za19zdG9yYWdlX2ZyZWUoc3RydWN0IHNvY2sgKnNrKVxcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtNDgte1xcbi0tXFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy02My1cXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jOjY0OnN0YXRpYyB2b2lkIGJwZl9za19zdG9yYWdlX21hcF9mcmVlKHN0cnVjdCBicGZfbWFwICptYXApXFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy02NS17XFxuLS1cXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jPTEzND1icGZfc2tfc3RvcmFnZV9jbG9uZV9lbGVtKHN0cnVjdCBzb2NrICpuZXdzayxcXG4tLVxcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtMTUzLVxcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM6MTU0OmludCBicGZfc2tfc3RvcmFnZV9jbG9uZShjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrICpuZXdzaylcXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jLTE1NS17XFxuLS1cXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jPTI2Mj1CUEZfQ0FMTF8yKGJwZl9za19zdG9yYWdlX2RlbGV0ZSwgc3RydWN0IGJwZl9tYXAgKiwgbWFwLCBzdHJ1Y3Qgc29jayAqLCBzaylcXG4tLVxcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtMjc4LVxcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM6Mjc5OnN0YXRpYyBpbnQgYnBmX3NrX3N0b3JhZ2VfY2hhcmdlKHN0cnVjdCBicGZfbG9jYWxfc3RvcmFnZV9tYXAgKnNtYXAsXFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy0yODAtXFx0XFx0XFx0XFx0IHZvaWQgKm93bmVyLCB1MzIgc2l6ZSlcXG4tLVxcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtMjk1LVxcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM6Mjk2OnN0YXRpYyB2b2lkIGJwZl9za19zdG9yYWdlX3VuY2hhcmdlKHN0cnVjdCBicGZfbG9jYWxfc3RvcmFnZV9tYXAgKnNtYXAsXFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy0yOTctXFx0XFx0XFx0XFx0ICAgIHZvaWQgKm93bmVyLCB1MzIgc2l6ZSlcXG4tLVxcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM9MzEyPWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBza19zdG9yYWdlX21hcF9vcHMgPSB7XFxuLS1cXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jLTMyOC1cXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jOjMyOTpjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrX3N0b3JhZ2VfZ2V0X3Byb3RvID0ge1xcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtMzMwLVxcdC5mdW5jXFx0XFx0PSBicGZfc2tfc3RvcmFnZV9nZXQsXFxuLS1cXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jLTMzOC1cXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jOjMzOTpjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrX3N0b3JhZ2VfZ2V0X2NnX3NvY2tfcHJvdG8gPSB7XFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy0zNDAtXFx0LmZ1bmNcXHRcXHQ9IGJwZl9za19zdG9yYWdlX2dldCxcXG4tLVxcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtMzQ4LVxcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM6MzQ5OmNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tfc3RvcmFnZV9kZWxldGVfcHJvdG8gPSB7XFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy0zNTAtXFx0LmZ1bmNcXHRcXHQ9IGJwZl9za19zdG9yYWdlX2RlbGV0ZSxcXG4tLVxcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtMzU2LVxcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM6MzU3OnN0YXRpYyBib29sIGJwZl9za19zdG9yYWdlX3RyYWNpbmdfYWxsb3dlZChjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy0zNTgte1xcbi0tXFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYz0zOTM9QlBGX0NBTExfMihicGZfc2tfc3RvcmFnZV9kZWxldGVfdHJhY2luZywgc3RydWN0IGJwZl9tYXAgKiwgbWFwLFxcbi0tXFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy00MDItXFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYzo0MDM6Y29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za19zdG9yYWdlX2dldF90cmFjaW5nX3Byb3RvID0ge1xcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtNDA0LVxcdC5mdW5jXFx0XFx0PSBicGZfc2tfc3RvcmFnZV9nZXRfdHJhY2luZyxcXG4tLVxcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtNDE0LVxcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM6NDE1OmNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tfc3RvcmFnZV9kZWxldGVfdHJhY2luZ19wcm90byA9IHtcXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jLTQxNi1cXHQuZnVuY1xcdFxcdD0gYnBmX3NrX3N0b3JhZ2VfZGVsZXRlX3RyYWNpbmcsXFxuLS1cXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jLTQyNC1cXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jOjQyNTpzdHJ1Y3QgYnBmX3NrX3N0b3JhZ2VfZGlhZyB7XFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy00MjYtXFx0dTMyIG5yX21hcHM7XFxuLS1cXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jPTQ0MD1zdGF0aWMgaW50IG5sYV92YWx1ZV9zaXplKHUzMiB2YWx1ZV9zaXplKVxcbi0tXFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy00NDktXFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYzo0NTA6dm9pZCBicGZfc2tfc3RvcmFnZV9kaWFnX2ZyZWUoc3RydWN0IGJwZl9za19zdG9yYWdlX2RpYWcgKmRpYWcpXFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy00NTEte1xcbi0tXFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYz00NjI9RVhQT1JUX1NZTUJPTF9HUEwoYnBmX3NrX3N0b3JhZ2VfZGlhZ19mcmVlKTtcXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jLTQ2My1cXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jOjQ2NDpzdGF0aWMgYm9vbCBkaWFnX2NoZWNrX2R1cChjb25zdCBzdHJ1Y3QgYnBmX3NrX3N0b3JhZ2VfZGlhZyAqZGlhZyxcXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jLTQ2NS1cXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwKVxcbi0tXFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy00NzYtXFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYzo0Nzc6c3RydWN0IGJwZl9za19zdG9yYWdlX2RpYWcgKlxcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtNDc4LWJwZl9za19zdG9yYWdlX2RpYWdfYWxsb2MoY29uc3Qgc3RydWN0IG5sYXR0ciAqbmxhX3N0Z3MpXFxuLS1cXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jPTUzMj1zdGF0aWMgaW50IGRpYWdfZ2V0KHN0cnVjdCBicGZfbG9jYWxfc3RvcmFnZV9tYXAgKnNtYXAsXFxuLS1cXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jLTU2Ny1cXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jOjU2ODpzdGF0aWMgaW50IGJwZl9za19zdG9yYWdlX2RpYWdfcHV0X2FsbChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy01NjktXFx0XFx0XFx0XFx0ICAgICAgIGludCBzdGdfYXJyYXlfdHlwZSxcXG4tLVxcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtNjIzLVxcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM6NjI0OmludCBicGZfc2tfc3RvcmFnZV9kaWFnX3B1dChzdHJ1Y3QgYnBmX3NrX3N0b3JhZ2VfZGlhZyAqZGlhZyxcXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jLTYyNS1cXHRcXHRcXHQgICAgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYz03OTI9c3RhdGljIGludCBfX2JwZl9za19zdG9yYWdlX21hcF9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSxcXG4tLVxcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtODE5LVxcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM6ODIwOnN0YXRpYyBpbnQgYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtODIxLXtcXG4tLVxcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtODI0LVxcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM6ODI1OnN0YXRpYyB2b2lkIGJwZl9za19zdG9yYWdlX21hcF9zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdilcXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jLTgyNi1cXHRfX3JlbGVhc2VzKFJDVSlcXG4tLVxcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM9ODgxPXN0YXRpYyB2b2lkIGJwZl9pdGVyX2RldGFjaF9tYXAoc3RydWN0IGJwZl9pdGVyX2F1eF9pbmZvICphdXgpXFxuLS1cXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jLTg4NS1cXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jOjg4NjpzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIGJwZl9za19zdG9yYWdlX21hcF9zZXFfb3BzID0ge1xcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtODg3LVxcdC5zdGFydCAgPSBicGZfc2tfc3RvcmFnZV9tYXBfc2VxX3N0YXJ0LFxcbi0tXFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYz04OTM9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfaXRlcl9zZXFfaW5mbyBpdGVyX3NlcV9pbmZvID0ge1xcbi0tXFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy04OTktXFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYzo5MDA6c3RhdGljIHN0cnVjdCBicGZfaXRlcl9yZWcgYnBmX3NrX3N0b3JhZ2VfbWFwX3JlZ19pbmZvID0ge1xcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtOTAxLVxcdC50YXJnZXRcXHRcXHRcXHQ9IFxcXCJicGZfc2tfc3RvcmFnZV9tYXBcXFwiLFxcbi0tXFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy05MTUtXFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYzo5MTY6c3RhdGljIGludCBfX2luaXQgYnBmX3NrX3N0b3JhZ2VfbWFwX2l0ZXJfaW5pdCh2b2lkKVxcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtOTE3LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDU6Mzk6NDMuOTYwNzA5NjEzWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc3ODk1NzE3NjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyB0aGUgQlBGIHNrX3N0b3JhZ2UgTWFwIEl0ZXJhdG9yKipcblxuT2theSwgc28gSSdtIHRhY2tsaW5nIGhvdyB0byBmdXp6IHRoZSBgYnBmX3NrX3N0b3JhZ2VfbWFwYCBpdGVyYXRvci4gSXQgbG9va3MgbGlrZSBpdCdzIHJlZ2lzdGVyZWQgdGhyb3VnaCBgYnBmX2l0ZXJfcmVnX3RhcmdldGAsIHdoaWNoIGdpdmVzIG1lIGEgc3RhcnRpbmcgcG9pbnQuIFRvIHRyaWdnZXIgdGhpcyB3aXRoIHN5emthbGxlciwgdGhlIGNvcmUgaWRlYSBpcyB0byBjcmVhdGUgYSBCUEYgaXRlcmF0b3IgZm9yIHRoaXMgbWFwIHR5cGUgYW5kIHRoZW4gcmVhZCBmcm9tIGl0LiBUaGF0IG1lYW5zIEknbSBsb29raW5nIGF0IGBicGYoQlBGX0lURVJfQ1JFQVRFKWAgYW5kIHRoZW4gYSBgcmVhZCgpYCBzeXNjYWxsLiBTdHJhaWdodGZvcndhcmQuXG5cblRoZSBmdW5jdGlvbiB0aGF0IGFjdHVhbGx5IGhhbmRsZXMgdGhlIHNob3dpbmcgb2YgdGhlIGRhdGEgaXMgYGJwZl9za19zdG9yYWdlX21hcF9zZXFfc2hvd2AuIE5vdywgdGhlIHRyaWNreSBwYXJ0IGlzIHN5bWJvbCBleHBvc3VyZSBmb3Igc3l6a2FsbGVyLiAgSSBpbml0aWFsbHkgdGhvdWdodCBhYm91dCBpbmNsdWRpbmcgYGJwZl9pdGVyX3JlZ190YXJnZXRgIGluIHRoZSBgRm9jdXNTeW1ib2xzYCwgYnV0IHRoYXQncyBhbiBpbml0aWFsaXphdGlvbiBmdW5jdGlvbi4gIFRoZW4gSSBjb25zaWRlcmVkIGBicGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3dgLCBldmVuIHRob3VnaCBpdCdzIHN0YXRpYy4gVGhlIHByb21wdCBzYXlzIHRvIGZhdm9yIG5vbi1zdGF0aWMgZnVuY3Rpb25zLCBhcyBzdGF0aWMgZnVuY3Rpb25zICptaWdodCogYmUgaW5saW5lZC5cblxuSG93ZXZlciwgYSBjbG9zZXIgbG9vayBhdCB0aGUgY29kZSByZXZlYWxzIGEgbnVhbmNlLiBUaGUgYWRkcmVzcyBvZiBgYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zaG93YCAqaXMqIHRha2VuIHdpdGhpbiBgYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9vcHNgLCBzbyBpdCBwcm9iYWJseSB3b24ndCBiZSBpbmxpbmVkLiBCdXQgd2FpdCwgdGhlIGtleSBwaHJhc2UgaXMgXCJub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnNcIi4gQW0gSSBtaXNzaW5nIGEgaGlnaGVyLWxldmVsIGVudHJ5cG9pbnQ/XG5cbkJpbmdvISAgVGhlIGFjdHVhbCBlbnRyeXBvaW50IHRvIHRoZSB1c2VyLXNwYWNlIGludGVyZmFjZSBpcyBgc2VxX3JlYWRgLCB3aGljaCBldmVudHVhbGx5IGNhbGxzIHRoYXQgYC1cdTAwM2VzaG93YCBmdW5jdGlvbi4gU28sIGluc3RlYWQgb2YgZGlyZWN0bHkgdGFyZ2V0aW5nIGEgc3RhdGljIGhlbHBlciwgSSBzaG91bGQgYmUgbG9va2luZyBhdCBgc2VxX3JlYWRgLiBOb3cgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgc2VxX3JlYWRgIGlzIGF2YWlsYWJsZSB0byB0aGUgZnV6emVyLiBMZXQncyBkaXZlIGludG8gYG5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmNgIGFnYWluLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NzExLCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzM3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA1OjM5OjUxLjc1MDI4MzYzWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjIxOTM0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jPTc4OD1ERUZJTkVfQlBGX0lURVJfRlVOQyhicGZfc2tfc3RvcmFnZV9tYXAsIHN0cnVjdCBicGZfaXRlcl9tZXRhICptZXRhLFxcbi0tXFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy03OTEtXFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYzo3OTI6c3RhdGljIGludCBfX2JwZl9za19zdG9yYWdlX21hcF9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSxcXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jLTc5My1cXHRcXHRcXHRcXHRcXHQgc3RydWN0IGJwZl9sb2NhbF9zdG9yYWdlX2VsZW0gKnNlbGVtKVxcbi0tXFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy04MTktXFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYzo4MjA6c3RhdGljIGludCBicGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy04MjEte1xcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM6ODIyOlxcdHJldHVybiBfX2JwZl9za19zdG9yYWdlX21hcF9zZXFfc2hvdyhzZXEsIHYpO1xcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtODIzLX1cXG4tLVxcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM9ODI1PXN0YXRpYyB2b2lkIGJwZl9za19zdG9yYWdlX21hcF9zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdilcXG4tLVxcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtODI4LVxcdGlmICghdilcXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jOjgyOTpcXHRcXHQodm9pZClfX2JwZl9za19zdG9yYWdlX21hcF9zZXFfc2hvdyhzZXEsIHYpO1xcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtODMwLVxcdGVsc2VcXG4tLVxcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM9ODg2PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9vcHMgPSB7XFxuLS1cXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jLTg4OS1cXHQuc3RvcCAgID0gYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zdG9wLFxcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM6ODkwOlxcdC5zaG93ICAgPSBicGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3csXFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy04OTEtfTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDU6Mzk6NTEuNzk2NTA1NDI3WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyMTQxODE5NjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzOlxuXG4qKkZvY3VzaW5nIG9uIEJQRiBJdGVyYXRvciBGdW5jdGlvbnMqKlxuXG5BbHJpZ2h0LCBmb3IgdGhpcyB0YXNrLCBJJ20gdGhpbmtpbmcgYWJvdXQgdXRpbGl6aW5nIHRoZSBgYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zaG93YCBhbmQgYGJwZl9za19zdG9yYWdlX21hcF9zZXFfc3RvcGAgZnVuY3Rpb25zIGFzIG15IHByaW1hcnkgRm9jdXNTeW1ib2xzLiBUaGF0IGFwcHJvYWNoIHNob3VsZCBiZSBwcmV0dHkgZGlyZWN0LiBCdXQsIGhhbmcgb24sIHRoZXJlJ3MgYWxzbyBgYnBmX2l0ZXJfaW5pdF9za19zdG9yYWdlX21hcGAuIFRoYXQgYWN0dWFsbHkgc291bmRzIGxpa2UgaXQgY291bGQgYmUgZXZlbiAqYmV0dGVyKiBmb3IgbXkgcHVycG9zZXMsIHBlcmhhcHMgb2ZmZXJpbmcgYSBtb3JlIHN0cmVhbWxpbmVkIGFwcHJvYWNoIHRvIGluaXRpYWxpemluZyB0aGUgaXRlcmF0aW9uLiBJIHNob3VsZCBxdWlja2x5IHZlcmlmeSB0aGF0IHRoYXQgcGFydGljdWxhciBmdW5jdGlvbiBpcyBhY3R1YWxseSBhdmFpbGFibGUgaW4gdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQgb3Iga2VybmVsIHZlcnNpb24uIEl0J3MgY3J1Y2lhbCB0byBjb25maXJtIGl0cyBleGlzdGVuY2UgYmVmb3JlIEkgZnVsbHkgY29tbWl0IHRvIGl0IGFzIG15IHByaW1hcnkgYXBwcm9hY2guIEkgbmVlZCB0byBlbnN1cmUgaXQncyBhIHZpYWJsZSBvcHRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMDU5LCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDU6Mzk6NTYuMDEwNjg5Njk3WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTgwMzk0NjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX2l0ZXJfaW5pdF9za19zdG9yYWdlX21hcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM9ODI1PXN0YXRpYyB2b2lkIGJwZl9za19zdG9yYWdlX21hcF9zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdilcXG4tLVxcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtODMzLVxcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM6ODM0OnN0YXRpYyBpbnQgYnBmX2l0ZXJfaW5pdF9za19zdG9yYWdlX21hcCh2b2lkICpwcml2X2RhdGEsXFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy04MzUtXFx0XFx0XFx0XFx0XFx0c3RydWN0IGJwZl9pdGVyX2F1eF9pbmZvICphdXgpXFxuLS1cXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jPTg5Mz1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9pdGVyX3NlcV9pbmZvIGl0ZXJfc2VxX2luZm8gPSB7XFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYy04OTQtXFx0LnNlcV9vcHNcXHRcXHQ9IFxcdTAwMjZicGZfc2tfc3RvcmFnZV9tYXBfc2VxX29wcyxcXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jOjg5NTpcXHQuaW5pdF9zZXFfcHJpdmF0ZVxcdD0gYnBmX2l0ZXJfaW5pdF9za19zdG9yYWdlX21hcCxcXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jLTg5Ni1cXHQuZmluaV9zZXFfcHJpdmF0ZVxcdD0gYnBmX2l0ZXJfZmluaV9za19zdG9yYWdlX21hcCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDU6Mzk6NTYuMjI4NzMyNjk4WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgzNTg5MTc4NjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipEaXZpbmcgaW50byBgYnBmX3NrX3N0b3JhZ2VfbWFwX2l0ZXJfYXR0YWNoX3RhcmdldGAqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gYGJwZl9za19zdG9yYWdlX21hcF9pdGVyX2F0dGFjaF90YXJnZXRgLiBJJ20gZ29pbmcgdG8gcXVpY2tseSByZXZpZXcgaXRzIHB1cnBvc2UgaW4gdGhlIGNvbnRleHQgb2Ygc2sgc3RvcmFnZSwgbWFwIGl0ZXJhdGlvbiwgYW5kIHRhcmdldCBhdHRhY2htZW50LiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgbGlrZWx5IG9uIGhvdyBpdCBpbnRlZ3JhdGVzIHdpdGggdGhlIG92ZXJhbGwgbGlmZWN5Y2xlIG9mIGEgc29ja2V0J3MgZXh0ZW5kZWQgQlBGIGRhdGEuXG5cbldoYXQgYXJlIHRoZSBjcml0aWNhbCBhc3BlY3RzIEknbSBsb29raW5nIGZvcj8gU3BlY2lmaWNhbGx5OlxuXG4qICAgKipBdHRhY2htZW50IFBvaW50czoqKiBXaGVyZSBkb2VzIHRoaXMgZnVuY3Rpb24gZml0IHdpdGhpbiB0aGUgb3ZlcmFsbCBCUEYgcHJvZ3JhbSBleGVjdXRpb24gb24gc29ja2V0cz8gQXJlIHdlIHRhbGtpbmcgYWJvdXQgaW5ncmVzcywgZWdyZXNzLCBvciBzb21ldGhpbmcgbW9yZSBzcGVjaWFsaXplZD9cbiogICAqKlRhcmdldGluZzoqKiBJIHdhbnQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoZSBcInRhcmdldFwiIHJlZmVycyB0by4gSXMgaXQgYW5vdGhlciBCUEYgcHJvZ3JhbSwgYSBzcGVjaWZpYyBzb2NrZXQgc3RydWN0dXJlLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVGhlIGludGVyYWN0aW9uIGJldHdlZW4gdGhlIGl0ZXJhdG9ycyBhbmQgdGhlIHRhcmdldCBuZWVkcyBjbGFyaWZpY2F0aW9uLlxuKiAgICoqRXJyb3IgQ29uZGl0aW9ucyBhbmQgSGFuZGxpbmc6KiogV2hhdCBhcmUgdGhlIHBvc3NpYmxlIGZhaWx1cmUgbW9kZXMgb2YgdGhpcyBmdW5jdGlvbj8gSG93IHJvYnVzdCBpcyBpdHMgZXJyb3IgaGFuZGxpbmcsIGFuZCB3aGF0IGtpbmQgb2YgZmVlZGJhY2sgZG9lcyBpdCBwcm92aWRlPyBJIG5lZWQgdG8gYmUgYXdhcmUgb2YgdGhlIGNvbnN0cmFpbnRzIGFuZCBsaW1pdGF0aW9ucy5cbiogICAqKlJlc291cmNlIE1hbmFnZW1lbnQ6KiogSSdsbCBiZSBsb29raW5nIHRvIHNlZSBpZiB0aGUgZnVuY3Rpb24gcHJvcGVybHkgbWFuYWdlcyBpdHMgcmVzb3VyY2VzLiBBcmUgdGhlcmUgcG90ZW50aWFsIG1lbW9yeSBsZWFrcyBvciByYWNlIGNvbmRpdGlvbnM/XG4qICAgKipDb25jdXJyZW5jeToqKiBIb3cgZG9lcyB0aGlzIGZ1bmN0aW9uIGhhbmRsZSBjb25jdXJyZW50IGFjY2VzcywgcGFydGljdWxhcmx5IHdpdGhpbiBhIG11bHRpLXRocmVhZGVkIGVudmlyb25tZW50PyBEb2VzIGl0IGVtcGxveSBhbnkgbG9ja2luZyBtZWNoYW5pc21zIG9yIGF0b21pYyBvcGVyYXRpb25zP1xuKiAgICoqUGVyZm9ybWFuY2U6KiogSSBzaG91bGQgYWxzbyBxdWlja2x5IGNvbnNpZGVyIHRoZSBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgaW1wYWN0LiBJcyB0aGlzIGZ1bmN0aW9uIGEgYm90dGxlbmVjayBpbiBjZXJ0YWluIHNjZW5hcmlvcywgYW5kIGRvZXMgaXQgdXNlIGFueSBvcHRpbWl6YXRpb24gdGVjaG5pcXVlcz9cblxuSSdsbCBzdGFydCB3aXRoIHRoZSBzb3VyY2UgY29kZSBhbmQgcmVsZXZhbnQgZG9jdW1lbnRhdGlvbiwga2VlcGluZyB0aGVzZSBrZXkgYXJlYXMgaW4gbWluZC4gVW5kZXJzdGFuZGluZyBob3cgdGhpcyBmdW5jdGlvbiBtYW5hZ2VzIGF0dGFjaGluZyBhIHRhcmdldCBpcyBjcnVjaWFsIGZvciBjb21wcmVoZW5kaW5nIGEgbGFyZ2VyIEJQRiBzeXN0ZW0ncyBzb2NrZXQgZGF0YSBwcm9jZXNzaW5nIGFyY2hpdGVjdHVyZS4gSSBzaG91bGQgYWxzbyBjaGVjayB0aGUgc3Vycm91bmRpbmcgY29kZSBmb3IgY2x1ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNjU4LCJPdXRwdXRUb2tlbnMiOjQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDU6NDA6MDQuNTg3NjUzMDk4WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Nzk3NTM1OCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX3NrX3N0b3JhZ2VfbWFwX2l0ZXJfYXR0YWNoX3RhcmdldFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNTo0MDowNC42MzU2MzI0NTZaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM0NDIxOTYwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkNvbm5lY3RpbmcgdGhlIERvdHMgaW4gdGhlIEJQRiBMYW5kKipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSB3YXMganVzdCByZXZpZXdpbmcgdGhlIGBicGZfc2tfc3RvcmFnZV9tYXBfcmVnX2luZm9gIGZ1bmN0aW9uLCB0cmFjaW5nIGl0cyBkZXBlbmRlbmNpZXMsIGFuZCB0aGVuIGl0IGhpdCBtZS4gSSBzZWUgdGhhdCBgaXRlcl9zZXFfaW5mb2AgZnVuY3Rpb24gaXMgYWN0dWFsbHkgYmVpbmcgKnVzZWQqIGluIHRoZXJlLiBUaGlzIGlzIGEga2V5IG9ic2VydmF0aW9uLiBQcmV2aW91c2x5LCBteSBtZW50YWwgbW9kZWwgcHJvYmFibHkgaGFkIHRoZXNlIGFzIHNvbWV3aGF0IGRpc3RpbmN0IG1vZHVsZXMsIG5vdyBJIHNlZSB0aGUgZmxvdy4gSSBrbm93IHdoYXQgYGl0ZXJfc2VxX2luZm9gIGRvZXMsIGFuZCBpdHMgaW1wbGljYXRpb25zIG9uIHRoZSBiaWdnZXIgcGljdHVyZS4gVGhpcyBoYXMgc29tZSB2ZXJ5IGludGVyZXN0aW5nIGltcGxpY2F0aW9ucyBmb3Igc3RhdGUgbWFuYWdlbWVudCBhbmQgaG93IHdlJ3JlIGRlYWxpbmcgd2l0aCBpdGVyYXRpbmcgb3ZlciB0aGUgZGF0YS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIxNTEsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNTo0MDowOC45Nzk4NTQ4MVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ0NjExNjA0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9za19zdG9yYWdlX21hcF9yZWdfaW5mb1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM9ODkzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2l0ZXJfc2VxX2luZm8gaXRlcl9zZXFfaW5mbyA9IHtcXG4tLVxcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtODk5LVxcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM6OTAwOnN0YXRpYyBzdHJ1Y3QgYnBmX2l0ZXJfcmVnIGJwZl9za19zdG9yYWdlX21hcF9yZWdfaW5mbyA9IHtcXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jLTkwMS1cXHQudGFyZ2V0XFx0XFx0XFx0PSBcXFwiYnBmX3NrX3N0b3JhZ2VfbWFwXFxcIixcXG4tLVxcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM9OTE2PXN0YXRpYyBpbnQgX19pbml0IGJwZl9za19zdG9yYWdlX21hcF9pdGVyX2luaXQodm9pZClcXG5uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jLTkxNy17XFxubmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYzo5MTg6XFx0YnBmX3NrX3N0b3JhZ2VfbWFwX3JlZ19pbmZvLmN0eF9hcmdfaW5mb1swXS5idGZfaWQgPVxcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtOTE5LVxcdFxcdGJ0Zl9zb2NrX2lkc1tCVEZfU09DS19UWVBFX1NPQ0tdO1xcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmM6OTIwOlxcdHJldHVybiBicGZfaXRlcl9yZWdfdGFyZ2V0KFxcdTAwMjZicGZfc2tfc3RvcmFnZV9tYXBfcmVnX2luZm8pO1xcbm5ldC9jb3JlL2JwZl9za19zdG9yYWdlLmMtOTIxLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDU6NDA6MDkuMTI0NDcxMTMzWiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwNjMxMTA0MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipLZXJuZWwgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgaW5pdGlhbCBjb25jZXJuIGlzIHRoZSBgQlBGX1NZU0NBTExgIGNvbmZpZyBvcHRpb24uIFRoYXQncyBhIGtleSBvbmUsIG5vIHF1ZXN0aW9uLiBXZSBuZWVkIHRvIGJlIGFic29sdXRlbHkgc3VyZSB0aGF0J3MgZW5hYmxlZC4gQnV0IGxldCdzIG5vdCBqdW1wIHRvIGNvbmNsdXNpb25zLiBCZWZvcmUgSSBkaXZlIGRlZXAgaW50byB0aGlzIHNwZWNpZmljIGlzc3VlLCBJIG5lZWQgdG8gdGFrZSBhIHF1aWNrIGxvb2sgYXJvdW5kLiBNeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIHJ1biB0aHJvdWdoIHRoZSByZWxhdGVkIGNvbmZpZ3MsIG1heWJlIHRoZXJlJ3Mgc29tZXRoaW5nIGVsc2Ugd2UgbmVlZC4gSXQncyB0b28gcmlza3kgdG8gYXNzdW1lIGEgc2luZ2xlIGRlcGVuZGVuY3kgaXMgYWxsIHRoYXQgbWF0dGVycy4gSXQncyBwb3NzaWJsZSB0aGVyZSBhcmUgYSB3aG9sZSBidW5jaCBvZiB1bmRlcmx5aW5nIHN1cHBvcnQgc3RydWN0dXJlcyB3ZSBuZWVkIHRvIGNvbnNpZGVyLCBlc3BlY2lhbGx5IHdpdGggYW55dGhpbmcgQlBGIHJlbGF0ZWQuIExldCdzIHNlZSB3aGF0IGVsc2UgbWlnaHQgYmUgbHVya2luZyBpbiB0aGUgc2hhZG93cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI3MTksIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNTo0MDoxNC4xODc1ODMyODZaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NjQzMzkyNjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJQRl9TWVNDQUxMXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL0tjb25maWc9MjU9bWVudSBcXFwiQlBGIHN1YnN5c3RlbVxcXCJcXG5rZXJuZWwvYnBmL0tjb25maWctMjYtXFxua2VybmVsL2JwZi9LY29uZmlnOjI3OmNvbmZpZyBCUEZfU1lTQ0FMTFxcbmtlcm5lbC9icGYvS2NvbmZpZy0yOC1cXHRib29sIFxcXCJFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA1OjQwOjE1Ljg1MTkyNzc3NFoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5ODAyODMwOTI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEJQRiBQb3RlbnRpYWwgVnVsbmVyYWJpbGl0eSBGaXgqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCBzZWVtcyBsaWtlIHdlJ3ZlIGdvdCBhIGZpeCBmb3IgYSBwb3NzaWJsZSBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2Ugd2l0aGluIHRoZSBgX19icGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3dgIGZ1bmN0aW9uLiBUaGF0J3MgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHRocm91Z2ggdGhlIEJQRiBpdGVyYXRvciwgd2hpY2ggaXMgYWx3YXlzIHNvbWV0aGluZyB0byBwYXkgYXR0ZW50aW9uIHRvLiBJbW1lZGlhdGVseSwgSSB6ZXJvIGluIG9uIGBfX2JwZl9za19zdG9yYWdlX21hcF9zZXFfc2hvd2AgYW5kIGFsc28gb24gYGJwZl9za19zdG9yYWdlX21hcF9zZXFfc2hvd2AgYXMgdGhlIGZ1bmN0aW9ucyBvZiBpbnRlcmVzdCwgZXNwZWNpYWxseSBjb25zaWRlcmluZyB0aGUgYEJQRl9TWVNDQUxMYCBjb25maWcgaXMgZW5hYmxlZC5cblxuTXkgZmlyc3QgdGhvdWdodCBpcyB0byBxdWlja2x5IHZlcmlmeSBpZiBgX19icGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3dgIGlzIHN0YXRpYywgd2hpY2ggaXQgaXMuIExldCBtZSB0aGluaywgYXJlIHRoZXJlIGFueSBub24tc3RhdGljIGFsdGVybmF0aXZlcyB3ZSBjYW4gdXRpbGl6ZT8gT2theSwgYGJwZl9za19zdG9yYWdlX21hcF9zZXFfc2hvd2AgaXMgYWxzbyBzdGF0aWMuIEdpdmVuIHRoYXQgdGhvc2UgYXJlIHRoZSBvbmx5IGZ1bmN0aW9ucyBjaGFuZ2VkLCBJIHdhcyB0aGlua2luZyB0aG9zZSB0d28gd2VyZSB0aGUgd2F5IHRvIGdvLlxuXG5Ib3dldmVyLCBob2xkIG9uIGEgc2Vjb25kLiBJIHNlZSB0aGF0IGBicGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3dgIGlzIHBhc3NlZCBhcyBhIGZ1bmN0aW9uIHBvaW50ZXIsIHdoaWNoIG1lYW5zIGl0IGlzbid0IGlubGluZWQsIGl0IGlzIHVzZWQgYXMgYSBwYXJhbWV0ZXIuICBIbW0uIFNvLCBtYXliZSBgX19icGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3dgIGlzIGlubGluZWQgKmludG8qIGBicGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3dgIGFuZCBwb3RlbnRpYWxseSBgYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zdG9wYC4gVGhlcmVmb3JlLCBpdCBsb29rcyBsaWtlIGBicGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3dgIGFuZCBgYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zdG9wYCBhcmUgdGhlIGJldHRlciBmb2N1cyBzeW1ib2xzIGZvciBmdXJ0aGVyIGludmVzdGlnYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMDI1LCJPdXRwdXRUb2tlbnMiOjEzNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNTo0MDoyNS42NTQ3NjEyNDNaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3Njc4NTIwNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3dcIixcbiAgICBcImJwZl9za19zdG9yYWdlX21hcF9zZXFfc3RvcFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiB0aGUgQlBGIGl0ZXJhdG9yIGZvciBzb2NrZXQgbG9jYWwgc3RvcmFnZSBtYXBzLiBUaGUgbW9kaWZpZWQgZnVuY3Rpb24gYF9fYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zaG93YCBpcyBjYWxsZWQgd2hlbiByZWFkaW5nIGZyb20gdGhlIGl0ZXJhdG9yIHNlcV9maWxlLCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBgYnBmKClgIHN5c2NhbGwgYW5kIGByZWFkKClgLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX3NrX3N0b3JhZ2VfbWFwX3NlcV9zaG93XCIsXG4gICAgXCJicGZfc2tfc3RvcmFnZV9tYXBfc2VxX3N0b3BcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gdGhlIEJQRiBpdGVyYXRvciBmb3Igc29ja2V0IGxvY2FsIHN0b3JhZ2UgbWFwcy4gVGhlIG1vZGlmaWVkIGZ1bmN0aW9uIGBfX2JwZl9za19zdG9yYWdlX21hcF9zZXFfc2hvd2AgaXMgY2FsbGVkIHdoZW4gcmVhZGluZyBmcm9tIHRoZSBpdGVyYXRvciBzZXFfZmlsZSwgd2hpY2ggaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgYGJwZigpYCBzeXNjYWxsIGFuZCBgcmVhZCgpYC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDU6NDA6MjUuNzMxNTUzMzVaIiwiU2VxIjozMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgxNTAzNjEyNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNTo0MDoyNS43MzIwNjY5MVoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo4MTQ5ODQzOTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgTlVMTCBwb2ludGVyIGNoZWNrIHRvIHByZXZlbnQgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugd2hlbiBhY2Nlc3NpbmcgYHNrX3N0b3JhZ2UtXFx1MDAzZW93bmVyYC4gTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBhcmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIGtlcm5lbCBwYWdlIGZhdWx0IGhhbmRsaW5nIGFuZCBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBzdWNoIGFzIHJlYWRpbmcgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSBvciBsZWFraW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZWY5MDcxM2M1Yjk2MTg5ZjU5ODFhOGQ1YWJkZjFmYjhjNDhkOTJkN1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDI3IDA1OjM4OjU2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvYnBmX3NrX3N0b3JhZ2UuYyBiL25ldC9jb3JlL2JwZl9za19zdG9yYWdlLmNcbmluZGV4IDFkMjk1YTg3NjlmYWQuLjcyMjg1MjBhYTJiNmUgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jXG4rKysgYi9uZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jXG5AQCAtODA2LDYgKzgwNiw4IEBAIHN0YXRpYyBpbnQgX19icGZfc2tfc3RvcmFnZV9tYXBfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsXG4gXHRcdGN0eC5tYXAgPSBpbmZvLVx1MDAzZW1hcDtcbiBcdFx0aWYgKHNlbGVtKSB7XG4gXHRcdFx0c2tfc3RvcmFnZSA9IHJjdV9kZXJlZmVyZW5jZShzZWxlbS1cdTAwM2Vsb2NhbF9zdG9yYWdlKTtcbitcdFx0XHRpZiAoIXNrX3N0b3JhZ2UpXG4rXHRcdFx0XHRyZXR1cm4gMDtcbiBcdFx0XHRjdHguc2sgPSBza19zdG9yYWdlLVx1MDAzZW93bmVyO1xuIFx0XHRcdGN0eC52YWx1ZSA9IFNEQVRBKHNlbGVtKS1cdTAwM2VkYXRhO1xuIFx0XHR9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNTo0MDoyNS43MzIwNjc3NFoiLCJTZXEiOjM1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MTQ5ODI1MzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEtNU0FOIE5lZWRzKipcblxuT2theSwgSSd2ZSByZXZpZXdlZCB0aGlzIHBhdGNoIGluIGBuZXQvY29yZS9icGZfc2tfc3RvcmFnZS5jYC4gSXQncyBhIHN0cmFpZ2h0Zm9yd2FyZCBmaXggZm9yIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLiBUaGUgY29kZSBub3cgaW5jbHVkZXMgYSBjaGVjazogYGlmICghc2tfc3RvcmFnZSkgcmV0dXJuIDA7YCB3aGljaCBkaXJlY3RseSBwcmV2ZW50cyB0aGUgYWNjZXNzIG9mIGBza19zdG9yYWdlLVx1MDAzZW93bmVyYCBpZiBgc2tfc3RvcmFnZWAgaXMgTlVMTC5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBpcyAqbm90KiBhIEtNU0FOIGlzc3VlLiBUaGUgY29yZSBwcm9ibGVtIGlzIHNpbXBseSBwcmV2ZW50aW5nIGEgY3Jhc2ggYnkgaGFuZGxpbmcgYSBwb3RlbnRpYWwgTlVMTCB2YWx1ZSBmb3IgYHNrX3N0b3JhZ2VgLiBXZSBhbHJlYWR5IGhhdmUga2VybmVsLWxldmVsIHByb3RlY3Rpb25zIGZvciBkZXJlZmVyZW5jaW5nIE5VTEwgcG9pbnRlcnPigJRwYWdlIGZhdWx0IGhhbmRsaW5nLCBLQVNBTiwgZXRjLiBUaGUgcHJpbWFyeSBmdW5jdGlvbiBvZiBLTVNBTiBpcyB0byBkZXRlY3QgdGhlIHVzZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSwgd2hpY2ggaXMgY2xlYXJseSBub3QgdGhlIGNhc2UgaGVyZS4gVGhpcyBwYXRjaCBzaW1wbHkgYWRkcyBhIHNhZmV0eSBjaGVjay5cblxuVG8gY29uZmlybSBteSB1bmRlcnN0YW5kaW5nLCBJIHJlLWV4YW1pbmVkIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0LCBzcGVjaWZpY2FsbHkgdGhlIGBfX2JwZl9za19zdG9yYWdlX21hcF9zZXFfc2hvd2AgZnVuY3Rpb24uIFRoZSBjb2RlIGFwcGVhcnMgdG8gYmUgd2l0aGluIGEgYHNlcV9maWxlYCBzaG93IGZ1bmN0aW9uLCBwcm9iYWJseSB1c2VkIGZvciBCUEYgbWFwIGl0ZXJhdGlvbi4gSWYgYHNrX3N0b3JhZ2VgIGlzIE5VTEwsIHRoZSBmdW5jdGlvbiBncmFjZWZ1bGx5IHJldHVybnMgMC4gVGhpcyByZWluZm9yY2VzIG15IHZpZXcgdGhhdCB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBub3QgdGhlIGNvbmNlcm4sIGJ1dCByYXRoZXIgaGFuZGxpbmcgdGhlIGV4cGVjdGVkIGNhc2Ugd2hlcmUgYSBwYXJ0aWN1bGFyIEJQRiBtYXAgZWxlbWVudCBtaWdodCBub3QgaGF2ZSBhc3NvY2lhdGVkIHN0b3JhZ2UuXG5cblRoZXJlZm9yZSwgYWZ0ZXIgdGhpcyByZXZpZXcsIEknbSBjb25maWRlbnQgaW4gc2V0dGluZyBgTmVlZHNLTVNBTiA9IGZhbHNlYC4gSXQncyBhIGNyYXNoIHByZXZlbnRpb24gZml4LCBub3QgYSBLTVNBTi1yZWxldmFudCBvbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMDAsIk91dHB1dFRva2VucyI6MTEwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzc3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDU6NDA6MzMuODgxODk1MjhaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDI0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBOVUxMIHBvaW50ZXIgY2hlY2sgdG8gcHJldmVudCBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSB3aGVuIGFjY2Vzc2luZyBgc2tfc3RvcmFnZS1cXHUwMDNlb3duZXJgLiBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGFyZSBjYXVnaHQgYnkgc3RhbmRhcmQga2VybmVsIHBhZ2UgZmF1bHQgaGFuZGxpbmcgYW5kIEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIHN1Y2ggYXMgcmVhZGluZyB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IG9yIGxlYWtpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgTlVMTCBwb2ludGVyIGNoZWNrIHRvIHByZXZlbnQgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugd2hlbiBhY2Nlc3NpbmcgYHNrX3N0b3JhZ2UtXFx1MDAzZW93bmVyYC4gTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBhcmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIGtlcm5lbCBwYWdlIGZhdWx0IGhhbmRsaW5nIGFuZCBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBzdWNoIGFzIHJlYWRpbmcgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSBvciBsZWFraW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowxf4j8[1] Phase: Succeeded StartedAt: 2026-08-27 05:40:45 +0000 UTC FinishedAt: 2026-08-27 05:40:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxf4j8[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-27 05:40:45 +0000 UTC FinishedAt: 2026-08-27 05:40:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxf4j8[2] Phase: Succeeded StartedAt: 2026-08-27 05:40:45 +0000 UTC FinishedAt: 2026-08-27 09:20:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxf4j8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"75b0a6db4300e4c2c9e97a0848deaa7acfb42fb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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":["bpf_sk_storage_map_seq_show","bpf_sk_storage_map_seq_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"75b0a6db4300e4c2c9e97a0848deaa7acfb42fb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"37488754-a4a0-4da2-b006-040dd2ba9561","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-27 05:40:45 +0000 UTC FinishedAt: 2026-08-27 09:20:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"75b0a6db4300e4c2c9e97a0848deaa7acfb42fb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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":["bpf_sk_storage_map_seq_show","bpf_sk_storage_map_seq_stop"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"75b0a6db4300e4c2c9e97a0848deaa7acfb42fb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"37488754-a4a0-4da2-b006-040dd2ba9561","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowxf4j8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"75b0a6db4300e4c2c9e97a0848deaa7acfb42fb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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":["bpf_sk_storage_map_seq_show","bpf_sk_storage_map_seq_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"75b0a6db4300e4c2c9e97a0848deaa7acfb42fb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"37488754-a4a0-4da2-b006-040dd2ba9561","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-27 05:40:45 +0000 UTC FinishedAt: 2026-08-27 05:40:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxf4j8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"75b0a6db4300e4c2c9e97a0848deaa7acfb42fb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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":["bpf_sk_storage_map_seq_show","bpf_sk_storage_map_seq_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"75b0a6db4300e4c2c9e97a0848deaa7acfb42fb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"37488754-a4a0-4da2-b006-040dd2ba9561","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-27 05:40:45 +0000 UTC FinishedAt: 2026-08-27 05:40:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"75b0a6db4300e4c2c9e97a0848deaa7acfb42fb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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-workflowxf4j8/series-workflowxf4j8-convert-artifact-2679972897/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxf4j8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"75b0a6db4300e4c2c9e97a0848deaa7acfb42fb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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":["bpf_sk_storage_map_seq_show","bpf_sk_storage_map_seq_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"75b0a6db4300e4c2c9e97a0848deaa7acfb42fb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"37488754-a4a0-4da2-b006-040dd2ba9561","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-27 05:40:55 +0000 UTC FinishedAt: 2026-08-27 05:57:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxf4j8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"75b0a6db4300e4c2c9e97a0848deaa7acfb42fb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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":["bpf_sk_storage_map_seq_show","bpf_sk_storage_map_seq_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"75b0a6db4300e4c2c9e97a0848deaa7acfb42fb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"37488754-a4a0-4da2-b006-040dd2ba9561","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-27 05:40:55 +0000 UTC FinishedAt: 2026-08-27 05:57:11 +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:*31462b85-8efa-4d78-8ecf-4587cde659aa,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-workflowxf4j8/series-workflowxf4j8-convert-artifact-2679972897/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": "8cd2eb4c-0443-4672-8a12-319d1c70e576", "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-workflowxf4j8/series-workflowxf4j8-build-action-2151545679/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxf4j8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"75b0a6db4300e4c2c9e97a0848deaa7acfb42fb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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":["bpf_sk_storage_map_seq_show","bpf_sk_storage_map_seq_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"75b0a6db4300e4c2c9e97a0848deaa7acfb42fb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"37488754-a4a0-4da2-b006-040dd2ba9561","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-27 05:40:55 +0000 UTC FinishedAt: 2026-08-27 05:57:01 +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:*31462b85-8efa-4d78-8ecf-4587cde659aa,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-workflowxf4j8/series-workflowxf4j8-convert-artifact-2679972897/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": "8cd2eb4c-0443-4672-8a12-319d1c70e576", "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-workflowxf4j8/series-workflowxf4j8-build-action-2151545679/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxf4j8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"75b0a6db4300e4c2c9e97a0848deaa7acfb42fb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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":["bpf_sk_storage_map_seq_show","bpf_sk_storage_map_seq_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"75b0a6db4300e4c2c9e97a0848deaa7acfb42fb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"37488754-a4a0-4da2-b006-040dd2ba9561","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-27 05:57:11 +0000 UTC FinishedAt: 2026-08-27 05:57:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxf4j8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"75b0a6db4300e4c2c9e97a0848deaa7acfb42fb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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":["bpf_sk_storage_map_seq_show","bpf_sk_storage_map_seq_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"75b0a6db4300e4c2c9e97a0848deaa7acfb42fb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"37488754-a4a0-4da2-b006-040dd2ba9561","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-27 05:57:11 +0000 UTC FinishedAt: 2026-08-27 05:57:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxf4j8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"75b0a6db4300e4c2c9e97a0848deaa7acfb42fb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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":["bpf_sk_storage_map_seq_show","bpf_sk_storage_map_seq_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"75b0a6db4300e4c2c9e97a0848deaa7acfb42fb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"37488754-a4a0-4da2-b006-040dd2ba9561","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-27 05:57:11 +0000 UTC FinishedAt: 2026-08-27 05:57:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxf4j8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"75b0a6db4300e4c2c9e97a0848deaa7acfb42fb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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":["bpf_sk_storage_map_seq_show","bpf_sk_storage_map_seq_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"75b0a6db4300e4c2c9e97a0848deaa7acfb42fb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"37488754-a4a0-4da2-b006-040dd2ba9561","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-27 05:57:11 +0000 UTC FinishedAt: 2026-08-27 05:57:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"75b0a6db4300e4c2c9e97a0848deaa7acfb42fb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"37488754-a4a0-4da2-b006-040dd2ba9561","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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-workflowxf4j8/series-workflowxf4j8-convert-artifact-1611250036/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxf4j8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"75b0a6db4300e4c2c9e97a0848deaa7acfb42fb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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":["bpf_sk_storage_map_seq_show","bpf_sk_storage_map_seq_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"75b0a6db4300e4c2c9e97a0848deaa7acfb42fb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"37488754-a4a0-4da2-b006-040dd2ba9561","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-27 05:57:21 +0000 UTC FinishedAt: 2026-08-27 05:59:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxf4j8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"75b0a6db4300e4c2c9e97a0848deaa7acfb42fb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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":["bpf_sk_storage_map_seq_show","bpf_sk_storage_map_seq_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"75b0a6db4300e4c2c9e97a0848deaa7acfb42fb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"37488754-a4a0-4da2-b006-040dd2ba9561","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-27 05:57:21 +0000 UTC FinishedAt: 2026-08-27 05:59:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*8cd2eb4c-0443-4672-8a12-319d1c70e576,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-workflowxf4j8/series-workflowxf4j8-build-action-2151545679/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-workflowxf4j8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"75b0a6db4300e4c2c9e97a0848deaa7acfb42fb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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":["bpf_sk_storage_map_seq_show","bpf_sk_storage_map_seq_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"75b0a6db4300e4c2c9e97a0848deaa7acfb42fb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"37488754-a4a0-4da2-b006-040dd2ba9561","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-27 05:59:27 +0000 UTC FinishedAt: 2026-08-27 05:59:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxf4j8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"75b0a6db4300e4c2c9e97a0848deaa7acfb42fb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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":["bpf_sk_storage_map_seq_show","bpf_sk_storage_map_seq_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"75b0a6db4300e4c2c9e97a0848deaa7acfb42fb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"37488754-a4a0-4da2-b006-040dd2ba9561","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-27 05:59:27 +0000 UTC FinishedAt: 2026-08-27 05:59:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxf4j8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"75b0a6db4300e4c2c9e97a0848deaa7acfb42fb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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":["bpf_sk_storage_map_seq_show","bpf_sk_storage_map_seq_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"75b0a6db4300e4c2c9e97a0848deaa7acfb42fb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"37488754-a4a0-4da2-b006-040dd2ba9561","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-27 05:59:27 +0000 UTC FinishedAt: 2026-08-27 06:15:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxf4j8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"75b0a6db4300e4c2c9e97a0848deaa7acfb42fb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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":["bpf_sk_storage_map_seq_show","bpf_sk_storage_map_seq_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"75b0a6db4300e4c2c9e97a0848deaa7acfb42fb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"37488754-a4a0-4da2-b006-040dd2ba9561","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-27 05:59:27 +0000 UTC FinishedAt: 2026-08-27 06:15:57 +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:*31462b85-8efa-4d78-8ecf-4587cde659aa,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-workflowxf4j8/series-workflowxf4j8-convert-artifact-1611250036/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": "3235348a-42d2-4d1c-bc40-ed65c7796243", "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-workflowxf4j8/series-workflowxf4j8-build-action-340323904/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxf4j8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"75b0a6db4300e4c2c9e97a0848deaa7acfb42fb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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":["bpf_sk_storage_map_seq_show","bpf_sk_storage_map_seq_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"75b0a6db4300e4c2c9e97a0848deaa7acfb42fb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"37488754-a4a0-4da2-b006-040dd2ba9561","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-27 05:59:27 +0000 UTC FinishedAt: 2026-08-27 06:15:47 +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:*31462b85-8efa-4d78-8ecf-4587cde659aa,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-workflowxf4j8/series-workflowxf4j8-convert-artifact-1611250036/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": "3235348a-42d2-4d1c-bc40-ed65c7796243", "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-workflowxf4j8/series-workflowxf4j8-build-action-340323904/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxf4j8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"75b0a6db4300e4c2c9e97a0848deaa7acfb42fb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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":["bpf_sk_storage_map_seq_show","bpf_sk_storage_map_seq_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"75b0a6db4300e4c2c9e97a0848deaa7acfb42fb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"37488754-a4a0-4da2-b006-040dd2ba9561","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-27 06:15:57 +0000 UTC FinishedAt: 2026-08-27 06:15:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxf4j8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"75b0a6db4300e4c2c9e97a0848deaa7acfb42fb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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":["bpf_sk_storage_map_seq_show","bpf_sk_storage_map_seq_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"75b0a6db4300e4c2c9e97a0848deaa7acfb42fb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"37488754-a4a0-4da2-b006-040dd2ba9561","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-27 06:15:57 +0000 UTC FinishedAt: 2026-08-27 06:15:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxf4j8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"75b0a6db4300e4c2c9e97a0848deaa7acfb42fb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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":["bpf_sk_storage_map_seq_show","bpf_sk_storage_map_seq_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"75b0a6db4300e4c2c9e97a0848deaa7acfb42fb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"37488754-a4a0-4da2-b006-040dd2ba9561","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-27 06:15:57 +0000 UTC FinishedAt: 2026-08-27 06:17:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxf4j8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"75b0a6db4300e4c2c9e97a0848deaa7acfb42fb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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":["bpf_sk_storage_map_seq_show","bpf_sk_storage_map_seq_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"75b0a6db4300e4c2c9e97a0848deaa7acfb42fb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"37488754-a4a0-4da2-b006-040dd2ba9561","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-27 06:15:57 +0000 UTC FinishedAt: 2026-08-27 06:17:49 +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:*3235348a-42d2-4d1c-bc40-ed65c7796243,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-workflowxf4j8/series-workflowxf4j8-build-action-340323904/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-workflowxf4j8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"75b0a6db4300e4c2c9e97a0848deaa7acfb42fb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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":["bpf_sk_storage_map_seq_show","bpf_sk_storage_map_seq_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"75b0a6db4300e4c2c9e97a0848deaa7acfb42fb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"37488754-a4a0-4da2-b006-040dd2ba9561","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-27 06:17:59 +0000 UTC FinishedAt: 2026-08-27 09:20:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxf4j8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"75b0a6db4300e4c2c9e97a0848deaa7acfb42fb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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":["bpf_sk_storage_map_seq_show","bpf_sk_storage_map_seq_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"75b0a6db4300e4c2c9e97a0848deaa7acfb42fb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"37488754-a4a0-4da2-b006-040dd2ba9561","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-27 06:17:59 +0000 UTC FinishedAt: 2026-08-27 09:20:56 +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":["bpf_sk_storage_map_seq_show","bpf_sk_storage_map_seq_stop"],"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:*8cd2eb4c-0443-4672-8a12-319d1c70e576,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*3235348a-42d2-4d1c-bc40-ed65c7796243,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-workflowxf4j8/series-workflowxf4j8-build-action-2151545679/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-workflowxf4j8/series-workflowxf4j8-build-action-340323904/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowxf4j8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"75b0a6db4300e4c2c9e97a0848deaa7acfb42fb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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":["bpf_sk_storage_map_seq_show","bpf_sk_storage_map_seq_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"75b0a6db4300e4c2c9e97a0848deaa7acfb42fb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"37488754-a4a0-4da2-b006-040dd2ba9561","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-27 06:17:59 +0000 UTC FinishedAt: 2026-08-27 06:18:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxf4j8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"75b0a6db4300e4c2c9e97a0848deaa7acfb42fb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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":["bpf_sk_storage_map_seq_show","bpf_sk_storage_map_seq_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"75b0a6db4300e4c2c9e97a0848deaa7acfb42fb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"37488754-a4a0-4da2-b006-040dd2ba9561","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-27 06:17:59 +0000 UTC FinishedAt: 2026-08-27 06:18:04 +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":["bpf_sk_storage_map_seq_show","bpf_sk_storage_map_seq_stop"],"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-workflowxf4j8/series-workflowxf4j8-convert-artifact-3848708253/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxf4j8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"75b0a6db4300e4c2c9e97a0848deaa7acfb42fb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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":["bpf_sk_storage_map_seq_show","bpf_sk_storage_map_seq_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"75b0a6db4300e4c2c9e97a0848deaa7acfb42fb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"37488754-a4a0-4da2-b006-040dd2ba9561","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-27 06:17:59 +0000 UTC FinishedAt: 2026-08-27 06:17:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxf4j8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"75b0a6db4300e4c2c9e97a0848deaa7acfb42fb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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":["bpf_sk_storage_map_seq_show","bpf_sk_storage_map_seq_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"75b0a6db4300e4c2c9e97a0848deaa7acfb42fb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"37488754-a4a0-4da2-b006-040dd2ba9561","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-27 06:17:59 +0000 UTC FinishedAt: 2026-08-27 06:17:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxf4j8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"75b0a6db4300e4c2c9e97a0848deaa7acfb42fb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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":["bpf_sk_storage_map_seq_show","bpf_sk_storage_map_seq_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"75b0a6db4300e4c2c9e97a0848deaa7acfb42fb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"37488754-a4a0-4da2-b006-040dd2ba9561","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-27 06:17:59 +0000 UTC FinishedAt: 2026-08-27 06:17:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxf4j8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"75b0a6db4300e4c2c9e97a0848deaa7acfb42fb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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":["bpf_sk_storage_map_seq_show","bpf_sk_storage_map_seq_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"75b0a6db4300e4c2c9e97a0848deaa7acfb42fb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"37488754-a4a0-4da2-b006-040dd2ba9561","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-27 06:18:09 +0000 UTC FinishedAt: 2026-08-27 09:20:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxf4j8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"75b0a6db4300e4c2c9e97a0848deaa7acfb42fb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.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":["bpf_sk_storage_map_seq_show","bpf_sk_storage_map_seq_stop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"75b0a6db4300e4c2c9e97a0848deaa7acfb42fb7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"37488754-a4a0-4da2-b006-040dd2ba9561","tree_name":"bpf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-27 06:18:09 +0000 UTC FinishedAt: 2026-08-27 09:20:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*8cd2eb4c-0443-4672-8a12-319d1c70e576,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*3235348a-42d2-4d1c-bc40-ed65c7796243,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-workflowxf4j8/series-workflowxf4j8-build-action-2151545679/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-workflowxf4j8/series-workflowxf4j8-build-action-340323904/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-workflowxf4j8/series-workflowxf4j8-convert-artifact-3848708253/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,}