Name: series-workflowts465 Phase: Succeeded StartedAt: 2026-09-07 03:44:29 +0000 UTC FinishedAt: 2026-09-07 06:04:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowts465[0] Phase: Succeeded StartedAt: 2026-09-07 03:44:29 +0000 UTC FinishedAt: 2026-09-07 04:31:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowts465[0].run-triage Phase: Succeeded StartedAt: 2026-09-07 03:44:29 +0000 UTC FinishedAt: 2026-09-07 04:31:10 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "nf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git", "commit_hash": "6ebcf5074cff0402730c6981d2397139fee6322d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_CONNTRACK_AMANDA", "NF_CONNTRACK", "NETFILTER" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "nf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git", "commit_hash": "6ebcf5074cff0402730c6981d2397139fee6322d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_CONNTRACK_AMANDA", "NF_CONNTRACK", "NETFILTER" ], "series_id": "64e6daaa-4d14-433a-8f61-ee24f5674c6c" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "amanda_help" ], "corpus_urls": [ "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+CgkJCTx0ZD4yMDI2LzA5LzA3IDA0OjMwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX0NPTk5UUkFDS19BTUFOREEmIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FtYW5kYV9oZWxwJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gaW50ZWdlciByYW5nZSB2YWxpZGF0aW9uIGlzc3VlIGluIHRoZSBBbWFuZGEgY29ubnRyYWNrIGhlbHBlciAoYGFtYW5kYV9oZWxwYCkgYnkgcHJvcGVybHkgY2hlY2tpbmcgdGhhdCB0aGUgcGFyc2VkIHBvcnQgbnVtYmVyIGRvZXMgbm90IGV4Y2VlZCA2NTUzNSBiZWZvcmUgY2FzdGluZy9jb252ZXJ0aW5nIGl0IHdpdGggYGh0b25zKClgLlxuXG5BbGwgbW9kaWZpZWQgYW5kIHN1cnJvdW5kaW5nIHZhcmlhYmxlcyAoYHRtcF9wb3J0YCwgYHBvcnRgLCBgbGVuYCwgYHBidWZgKSBhcmUgc3RyaWN0bHkgaW5pdGlhbGl6ZWQgYW5kIGRldGVybWluaXN0aWMuIE5vIGhlYXAvc3RhY2sgc3RydWN0dXJlcyBhcmUgbGVha2VkIHRvIHVzZXIgc3BhY2UsIG5vIGNvbmRpdGlvbmFsIGJyYW5jaGVzIHJlbHkgb24gdW5pbml0aWFsaXplZCBzdGF0ZSwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzc2VzIGFyZSBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgcG9ydCBwYXJzaW5nIGFuZCBib3VuZHMgdmFsaWRhdGlvbiBsb2dpYyBpbiB0aGUgQW1hbmRhIGNvbm50cmFjayBoZWxwZXIgKGFtYW5kYV9oZWxwKSB0byBjb3JyZWN0bHkgcmVqZWN0IHBvcnQgdmFsdWVzIGdyZWF0ZXIgdGhhbiA2NTUzNSBhbmQgcHJldmVudCB0cnVuY2F0aW9uIGJlZm9yZSByYW5nZSBjaGVja2luZy4gVGhpcyBpcyByZWFjaGFibGUgbmV0d29ya2luZyBjb2RlIGluIE5ldGZpbHRlci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNDozMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDBiMGRiYmEzMjYyMGY3ZjliNjg5NjMzYjNiMjczMDMzZWM5ZmRjNGJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCA3IDA0OjMwOjE2IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmNcbmluZGV4IDE0YWU2NjA0OTFmMzYuLjA1N2NlZjdlMmE3ZWQgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmNcbkBAIC05MSw2ICYjNDM7OTEsNyBAQCBzdGF0aWMgaW50IGFtYW5kYV9oZWxwKHN0cnVjdCBza19idWZmICpza2IsXG4gXHRjaGFyIHBidWZbc2l6ZW9mKFwmIzM0OzY1NTM1XCYjMzQ7KV0sICp0bXA7XG4gXHR1MTYgbGVuO1xuIFx0X19iZTE2IHBvcnQ7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyB0bXBfcG9ydDtcbiBcdGludCByZXQgPSBORl9BQ0NFUFQ7XG4gXHRuZl9uYXRfYW1hbmRhX2hvb2tfZm4gKm5mX25hdF9hbWFuZGE7XG4gXG5AQCAtMTMyLDEwICYjNDM7MTMzLDExIEBAIHN0YXRpYyBpbnQgYW1hbmRhX2hlbHAoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHRicmVhaztcbiBcdFx0cGJ1ZltsZW5dID0gJiMzOTtcXDAmIzM5OztcbiBcbi1cdFx0cG9ydCA9IGh0b25zKHNpbXBsZV9zdHJ0b3VsKHBidWYsIFx1MDAyNnRtcCwgMTApKTtcbiYjNDM7XHRcdHRtcF9wb3J0ID0gc2ltcGxlX3N0cnRvdWwocGJ1ZiwgXHUwMDI2dG1wLCAxMCk7XG4gXHRcdGxlbiA9IHRtcCAtIHBidWY7XG4tXHRcdGlmIChwb3J0ID09IDAgfHwgbGVuIFx1MDAzZSA1KVxuJiM0MztcdFx0aWYgKHRtcF9wb3J0ID09IDAgfHwgdG1wX3BvcnQgXHUwMDNlIDY1NTM1IHx8IGxlbiBcdTAwM2UgNSlcbiBcdFx0XHRicmVhaztcbiYjNDM7XHRcdHBvcnQgPSBodG9ucyh0bXBfcG9ydCk7XG4gXG4gXHRcdGV4cCA9IG5mX2N0X2V4cGVjdF9hbGxvYyhjdCk7XG4gXHRcdGlmIChleHAgPT0gTlVMTCkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA0OjMwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX0NPTk5UUkFDS19BTUFOREEmIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FtYW5kYV9oZWxwJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHBvcnQgcGFyc2luZyBhbmQgYm91bmRzIHZhbGlkYXRpb24gbG9naWMgaW4gdGhlIEFtYW5kYSBjb25udHJhY2sgaGVscGVyIChhbWFuZGFfaGVscCkgdG8gY29ycmVjdGx5IHJlamVjdCBwb3J0IHZhbHVlcyBncmVhdGVyIHRoYW4gNjU1MzUgYW5kIHByZXZlbnQgdHJ1bmNhdGlvbiBiZWZvcmUgcmFuZ2UgY2hlY2tpbmcuIFRoaXMgaXMgcmVhY2hhYmxlIG5ldHdvcmtpbmcgY29kZSBpbiBOZXRmaWx0ZXIuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAwYjBkYmJhMzI2MjBmN2Y5YjY4OTYzM2IzYjI3MzAzM2VjOWZkYzRiCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBTZXAgNyAwNDozMDoxNiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmMKaW5kZXggMTRhZTY2MDQ5MWYzNi4uMDU3Y2VmN2UyYTdlZCAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmMKQEAgLTkxLDYgJiM0Mzs5MSw3IEBAIHN0YXRpYyBpbnQgYW1hbmRhX2hlbHAoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAljaGFyIHBidWZbc2l6ZW9mKCYjMzQ7NjU1MzUmIzM0OyldLCAqdG1wOwogCXUxNiBsZW47CiAJX19iZTE2IHBvcnQ7CiYjNDM7CXVuc2lnbmVkIGxvbmcgdG1wX3BvcnQ7CiAJaW50IHJldCA9IE5GX0FDQ0VQVDsKIAluZl9uYXRfYW1hbmRhX2hvb2tfZm4gKm5mX25hdF9hbWFuZGE7CiAKQEAgLTEzMiwxMCAmIzQzOzEzMywxMSBAQCBzdGF0aWMgaW50IGFtYW5kYV9oZWxwKHN0cnVjdCBza19idWZmICpza2IsCiAJCQlicmVhazsKIAkJcGJ1ZltsZW5dID0gJiMzOTtcMCYjMzk7OwogCi0JCXBvcnQgPSBodG9ucyhzaW1wbGVfc3RydG91bChwYnVmLCAmYW1wO3RtcCwgMTApKTsKJiM0MzsJCXRtcF9wb3J0ID0gc2ltcGxlX3N0cnRvdWwocGJ1ZiwgJmFtcDt0bXAsIDEwKTsKIAkJbGVuID0gdG1wIC0gcGJ1ZjsKLQkJaWYgKHBvcnQgPT0gMCB8fCBsZW4gJmd0OyA1KQomIzQzOwkJaWYgKHRtcF9wb3J0ID09IDAgfHwgdG1wX3BvcnQgJmd0OyA2NTUzNSB8fCBsZW4gJmd0OyA1KQogCQkJYnJlYWs7CiYjNDM7CQlwb3J0ID0gaHRvbnModG1wX3BvcnQpOwogCiAJCWV4cCA9IG5mX2N0X2V4cGVjdF9hbGxvYyhjdCk7CiAJCWlmIChleHAgPT0gTlVMTCkgewo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNDozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDY4CgkJCQkJCQlvdXRwdXQ6IDczCgkJCQkJCQl0aG91Z2h0czogNDQ1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQW1hbmRhIENvbm50cmFjayBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIHRoZSBhc3NvY2lhdGVkIHJldmlldyByZXF1ZXN0LiBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIGRpZmYgbm93IGZvciBgbmZfY29ubnRyYWNrX2FtYW5kYS5jYC4gSG1tLCB0aGUgY2hhbmdlIHNlZW1zIGZvY3VzZWQgb24gdGhlIHBvcnQgaGFuZGxpbmcgd2l0aGluIHRoZSBgYW1hbmRhX2hlbHBgIGZ1bmN0aW9uLiBTcGVjaWZpY2FsbHksIGl0IGxvb2tzIGxpa2UgdGhlcmUmIzM5O3MgYmVlbiBhIHN1YnRsZSBjaGFuZ2UgdG8gaG93IHRoZSBwb3J0IG51bWJlciwgd2hpY2ggaXMgY29taW5nIGluIGFzIGEgc3RyaW5nLCBpcyBjb252ZXJ0ZWQgdG8gYSBgX19iZTE2YCBmb3JtYXQuCgpJbml0aWFsbHksIGl0IHdhcyB1c2luZyBgc2ltcGxlX3N0cnRvdWxgIHRvIGRpcmVjdGx5IGNvbnZlcnQgdGhlIHN0cmluZyB0byBhIGB1MTZgIGJlZm9yZSBjb252ZXJ0aW5nIHRoZSBgdTE2YCB0byBuZXR3b3JrIGJ5dGUgb3JkZXIuIE5vdywgdGhleSYjMzk7dmUgaW50cm9kdWNlZCBhbiBpbnRlcm1lZGlhdGUgYHVuc2lnbmVkIGxvbmdgIHZhcmlhYmxlIGNhbGxlZCBgdG1wX3BvcnRgLiBUaGlzIGlzIGltbWVkaWF0ZWx5IHJhaXNpbmcgYSBmbGFnIOKAkyBjaGVja2luZyB0aGUgbGltaXRzLiBJdCYjMzk7cyBnb29kIHRoZXkgYXJlIHZhbGlkYXRpbmcgYHRtcF9wb3J0YCB0byBiZSBiZXR3ZWVuIGAwYCBhbmQgYDY1NTM1YCBhbmQgdGhhdCB0aGUgbGVuZ3RoIGlzIGFwcHJvcHJpYXRlIGJlZm9yZSBjb252ZXJ0aW5nIGl0IHRvIG5ldHdvcmsgYnl0ZSBvcmRlci4gVGhpcyBpcyBhIHZlcnkgZ29vZCBhZGRpdGlvbiDigJMgcG90ZW50aWFsbHkgZ3VhcmRpbmcgYWdhaW5zdCBvdmVyZmxvd3Mgb3IgdW5leHBlY3RlZCB2YWx1ZXMgdGhhdCBtaWdodCBsZWFkIHRvIHZ1bG5lcmFiaWxpdGllcy4gTG9va3MgZ29vZDsgSSB3b3VsZCBoYXZlIGRvbmUgdGhlIHNhbWUuCgpCZWZvcmUgSSBnaXZlIG15IE9LLCBJIG5lZWQgdG8gY29uZmlybSB0aGUgY2hhbmdlIGlzIHRoZSBjb3JyZWN0IGhhbmRsaW5nLiBJIHdpbGwgY2hlY2sgdGhlIHJlbGF0ZWQgYEtjb25maWdgIGZvciB0aGUgZmlsZSBhbmQgY3Jvc3MgcmVmZXJlbmNlIHdpdGggZ3JlcHBlciBvciBmaWxlIHJlYWQgdG8gbWFrZSBzdXJlIEkgYW0gbm90IG1pc3NpbmcgYW55IGNoYW5nZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDQ6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDkwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgODA6XHRcdH0sXG4gIDgxOlx0fTtcbiAgODI6XHRcbiAgODM6XHRzdGF0aWMgaW50IGFtYW5kYV9oZWxwKHN0cnVjdCBza19idWZmICpza2IsXG4gIDg0Olx0XHRcdCAgICAgICB1bnNpZ25lZCBpbnQgcHJvdG9mZixcbiAgODU6XHRcdFx0ICAgICAgIHN0cnVjdCBuZl9jb25uICpjdCxcbiAgODY6XHRcdFx0ICAgICAgIGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvKVxuICA4NzpcdHtcbiAgODg6XHRcdHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHA7XG4gIDg5Olx0XHRzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZTtcbiAgOTA6XHRcdHVuc2lnbmVkIGludCBkYXRhb2ZmLCBzdGFydCwgc3RvcCwgb2ZmLCBpO1xuICA5MTpcdFx0Y2hhciBwYnVmW3NpemVvZihcJiMzNDs2NTUzNVwmIzM0OyldLCAqdG1wO1xuICA5MjpcdFx0dTE2IGxlbjtcbiAgOTM6XHRcdF9fYmUxNiBwb3J0O1xuICA5NDpcdFx0dW5zaWduZWQgbG9uZyB0bXBfcG9ydDtcbiAgOTU6XHRcdGludCByZXQgPSBORl9BQ0NFUFQ7XG4gIDk2Olx0XHRuZl9uYXRfYW1hbmRhX2hvb2tfZm4gKm5mX25hdF9hbWFuZGE7XG4gIDk3Olx0XG4gIDk4Olx0XHQvKiBPbmx5IGxvb2sgYXQgcGFja2V0cyBmcm9tIHRoZSBBbWFuZGEgc2VydmVyICovXG4gIDk5Olx0XHRpZiAoQ1RJTkZPMkRJUihjdGluZm8pID09IElQX0NUX0RJUl9PUklHSU5BTClcbiAxMDA6XHRcdFx0cmV0dXJuIE5GX0FDQ0VQVDtcbiAxMDE6XHRcbiAxMDI6XHRcdC8qIGluY3JlYXNlIHRoZSBVRFAgdGltZW91dCBvZiB0aGUgbWFzdGVyIGNvbm5lY3Rpb24gYXMgcmVwbGllcyBmcm9tXG4gMTAzOlx0XHQgKiBBbWFuZGEgY2xpZW50cyB0byB0aGUgc2VydmVyIGNhbiBiZSBxdWl0ZSBkZWxheWVkICovXG4gMTA0Olx0XHRuZl9jdF9yZWZyZXNoKGN0LCBtYXN0ZXJfdGltZW91dCAqIEhaKTtcbiAxMDU6XHRcbiAxMDY6XHRcdC8qIE5vIGRhdGE/ICovXG4gMTA3Olx0XHRkYXRhb2ZmID0gcHJvdG9mZiAmIzQzOyBzaXplb2Yoc3RydWN0IHVkcGhkcik7XG4gMTA4Olx0XHRpZiAoZGF0YW9mZiBcdTAwM2U9IHNrYi1cdTAwM2VsZW4pIHtcbiAxMDk6XHRcdFx0bmV0X2Vycl9yYXRlbGltaXRlZChcJiMzNDthbWFuZGFfaGVscDogc2tibGVuID0gJXVcXG5cJiMzNDssIHNrYi1cdTAwM2VsZW4pO1xuIDExMDpcdFx0XHRyZXR1cm4gTkZfQUNDRVBUO1xuIDExMTpcdFx0fVxuIDExMjpcdFxuIDExMzpcdFx0c3RhcnQgPSBza2JfZmluZF90ZXh0KHNrYiwgZGF0YW9mZiwgc2tiLVx1MDAzZWxlbixcbiAxMTQ6XHRcdFx0XHQgICAgICBzZWFyY2hbU0VBUkNIX0NPTk5FQ1RdLnRzKTtcbiAxMTU6XHRcdGlmIChzdGFydCA9PSBVSU5UX01BWClcbiAxMTY6XHRcdFx0Z290byBvdXQ7XG4gMTE3Olx0XHRzdGFydCAmIzQzOz0gZGF0YW9mZiAmIzQzOyBzZWFyY2hbU0VBUkNIX0NPTk5FQ1RdLmxlbjtcbiAxMTg6XHRcbiAxMTk6XHRcdHN0b3AgPSBza2JfZmluZF90ZXh0KHNrYiwgc3RhcnQsIHNrYi1cdTAwM2VsZW4sXG4gMTIwOlx0XHRcdFx0ICAgICBzZWFyY2hbU0VBUkNIX05FV0xJTkVdLnRzKTtcbiAxMjE6XHRcdGlmIChzdG9wID09IFVJTlRfTUFYKVxuIDEyMjpcdFx0XHRnb3RvIG91dDtcbiAxMjM6XHRcdHN0b3AgJiM0Mzs9IHN0YXJ0O1xuIDEyNDpcdFxuIDEyNTpcdFx0Zm9yIChpID0gU0VBUkNIX0RBVEE7IGkgXHUwMDNjPSBTRUFSQ0hfU1RBVEU7IGkmIzQzOyYjNDM7KSB7XG4gMTI2Olx0XHRcdG9mZiA9IHNrYl9maW5kX3RleHQoc2tiLCBzdGFydCwgc3RvcCwgc2VhcmNoW2ldLnRzKTtcbiAxMjc6XHRcdFx0aWYgKG9mZiA9PSBVSU5UX01BWClcbiAxMjg6XHRcdFx0XHRjb250aW51ZTtcbiAxMjk6XHRcdFx0b2ZmICYjNDM7PSBzdGFydCAmIzQzOyBzZWFyY2hbaV0ubGVuO1xuIDEzMDpcdFxuIDEzMTpcdFx0XHRsZW4gPSBtaW5fdCh1bnNpZ25lZCBpbnQsIHNpemVvZihwYnVmKSAtIDEsIHN0b3AgLSBvZmYpO1xuIDEzMjpcdFx0XHRpZiAoc2tiX2NvcHlfYml0cyhza2IsIG9mZiwgcGJ1ZiwgbGVuKSlcbiAxMzM6XHRcdFx0XHRicmVhaztcbiAxMzQ6XHRcdFx0cGJ1ZltsZW5dID0gJiMzOTtcXDAmIzM5OztcbiAxMzU6XHRcbiAxMzY6XHRcdFx0dG1wX3BvcnQgPSBzaW1wbGVfc3RydG91bChwYnVmLCBcdTAwMjZ0bXAsIDEwKTtcbiAxMzc6XHRcdFx0bGVuID0gdG1wIC0gcGJ1ZjtcbiAxMzg6XHRcdFx0aWYgKHRtcF9wb3J0ID09IDAgfHwgdG1wX3BvcnQgXHUwMDNlIDY1NTM1IHx8IGxlbiBcdTAwM2UgNSlcbiAxMzk6XHRcdFx0XHRicmVhaztcbiAxNDA6XHRcdFx0cG9ydCA9IGh0b25zKHRtcF9wb3J0KTtcbiAxNDE6XHRcbiAxNDI6XHRcdFx0ZXhwID0gbmZfY3RfZXhwZWN0X2FsbG9jKGN0KTtcbiAxNDM6XHRcdFx0aWYgKGV4cCA9PSBOVUxMKSB7XG4gMTQ0Olx0XHRcdFx0bmZfY3RfaGVscGVyX2xvZyhza2IsIGN0LCBcJiMzNDtjYW5ub3QgYWxsb2MgZXhwZWN0YXRpb25cJiMzNDspO1xuIDE0NTpcdFx0XHRcdHJldCA9IE5GX0RST1A7XG4gMTQ2Olx0XHRcdFx0Z290byBvdXQ7XG4gMTQ3Olx0XHRcdH1cbiAxNDg6XHRcdFx0dHVwbGUgPSBcdTAwMjZjdC1cdTAwM2V0dXBsZWhhc2hbSVBfQ1RfRElSX09SSUdJTkFMXS50dXBsZTtcbiAxNDk6XHRcdFx0bmZfY3RfZXhwZWN0X2luaXQoZXhwLCBORl9DVF9FWFBFQ1RfQ0xBU1NfREVGQVVMVCxcbiAxNTA6XHRcdFx0XHRcdCAgbmZfY3RfbDNudW0oY3QpLFxuIDE1MTpcdFx0XHRcdFx0ICBcdTAwMjZ0dXBsZS1cdTAwM2VzcmMudTMsIFx1MDAyNnR1cGxlLVx1MDAzZWRzdC51MyxcbiAxNTI6XHRcdFx0XHRcdCAgSVBQUk9UT19UQ1AsIE5VTEwsIFx1MDAyNnBvcnQpO1xuIDE1MzpcdFxuIDE1NDpcdFx0XHRuZl9uYXRfYW1hbmRhID0gcmN1X2RlcmVmZXJlbmNlKG5mX25hdF9hbWFuZGFfaG9vayk7XG4gMTU1Olx0XHRcdGlmIChuZl9uYXRfYW1hbmRhIFx1MDAyNlx1MDAyNiBjdC1cdTAwM2VzdGF0dXMgXHUwMDI2IElQU19OQVRfTUFTSylcbiAxNTY6XHRcdFx0XHRyZXQgPSBuZl9uYXRfYW1hbmRhKHNrYiwgY3QsIGN0aW5mbywgcHJvdG9mZixcbiAxNTc6XHRcdFx0XHRcdFx0ICAgIG9mZiAtIGRhdGFvZmYsIGxlbiwgZXhwKTtcbiAxNTg6XHRcdFx0ZWxzZSBpZiAobmZfY3RfZXhwZWN0X3JlbGF0ZWQoZXhwLCAwKSAhPSAwKSB7XG4gMTU5Olx0XHRcdFx0bmZfY3RfaGVscGVyX2xvZyhza2IsIGN0LCBcJiMzNDtjYW5ub3QgYWRkIGV4cGVjdGF0aW9uXCYjMzQ7KTtcbiAxNjA6XHRcdFx0XHRyZXQgPSBORl9EUk9QO1xuIDE2MTpcdFx0XHR9XG4gMTYyOlx0XHRcdG5mX2N0X2V4cGVjdF9wdXQoZXhwKTtcbiAxNjM6XHRcdH1cbiAxNjQ6XHRcbiAxNjU6XHRvdXQ6XG4gMTY2Olx0XHRyZXR1cm4gcmV0O1xuIDE2NzpcdH1cbiAxNjg6XHRcbiAxNjk6XHRzdGF0aWMgY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3RfcG9saWN5IGFtYW5kYV9leHBfcG9saWN5ID0ge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA0OjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O05GX0NPTk5UUkFDS19BTUFOREEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZz0yMDE9Y29uZmlnIE5GX0NUX1BST1RPX1NDVFBcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjExLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjIxMjpjb25maWcgTkZfQ09OTlRSQUNLX0FNQU5EQVxubmV0L25ldGZpbHRlci9LY29uZmlnLTIxMy1cdHRyaXN0YXRlIFwmIzM0O0FtYW5kYSBiYWNrdXAgcHJvdG9jb2wgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz00MTY9Y29uZmlnIE5GX05BVF9BTUFOREFcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDE4LVx0ZGVwZW5kcyBvbiBORl9DT05OVFJBQ0sgXHUwMDI2XHUwMDI2IE5GX05BVFxubmV0L25ldGZpbHRlci9LY29uZmlnOjQxOTpcdGRlZmF1bHQgTkZfTkFUIFx1MDAyNlx1MDAyNiBORl9DT05OVFJBQ0tfQU1BTkRBXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDIwLVxuLS1cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9NDI9bmZfY29ubnRyYWNrX2gzMjMtb2JqcyA6PSBuZl9jb25udHJhY2tfaDMyM19tYWluLm8gbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTQzLVxubmV0L25ldGZpbHRlci9NYWtlZmlsZTo0NDpvYmotJChDT05GSUdfTkZfQ09OTlRSQUNLX0FNQU5EQSkgJiM0Mzs9IG5mX2Nvbm50cmFja19hbWFuZGEub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZS00NS1vYmotJChDT05GSUdfTkZfQ09OTlRSQUNLX0ZUUCkgJiM0Mzs9IG5mX2Nvbm50cmFja19mdHAub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA0OjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU2MzMKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIGBLY29uZmlnYCBmb3IgQ29ubmVjdGlvbiBUcmFja2luZyBhbmQgQW1hbmRhKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgY29ubmVjdGlvbiB0cmFja2luZyBpbnRlcmFjdHMgd2l0aCBBbWFuZGEsIHNwZWNpZmljYWxseS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRpdmUgc3RyYWlnaHQgaW50byB0aGUgYEtjb25maWdgIGZpbGVzIOKAkyB0aGF0JiMzOTtzIHdoZXJlIHRoZSBoZWFydCBvZiBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIGRlcGVuZGVuY2llcyBsaWVzLCByaWdodD8gSSYjMzk7bSBnb2luZyB0byBwaW5wb2ludCB0aGUgc2VjdGlvbiByZWxhdGVkIHRvIGBORl9DT05OVFJBQ0tfQU1BTkRBYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBkZXBlbmRlbmNpZXMgdGhpcyBmZWF0dXJlIGhhcy4gSXMgaXQgZGVwZW5kZW50IG9uIG90aGVyIGNvbm5lY3Rpb24gdHJhY2tpbmcgb3B0aW9ucz8gV2hhdCBvdGhlciBmdW5jdGlvbmFsaXRpZXMgZ2V0IGFmZmVjdGVkIGlmIHRoaXMgaXMgZW5hYmxlZCBvciBkaXNhYmxlZD8gSSYjMzk7bGwgcHJvYmFibHkgbG9vayBmb3IgdGhlIHR5cGljYWwgYGRlcGVuZHMgb25gLCBgc2VsZWN0YCwgb3IgZXZlbiBhbnkgYGRlZmF1bHRgIG9wdGlvbnMgdGhhdCBtaWdodCBnaXZlIG1lIGhpbnRzIGFib3V0IHRoZSBicm9hZGVyIHBpY3R1cmUuIE15IGdvYWwgaXMgdG8gcXVpY2tseSBncmFzcCB0aGUgaW1wbGljYXRpb25zIG9mIGVuYWJsaW5nIG9yIGRpc2FibGluZyB0aGlzIGZlYXR1cmUsIHNvIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIG9uIGhvdyBpdCBhZmZlY3RzIHRoZSBidWlsZCBlbnZpcm9ubWVudCBhbmQgdWx0aW1hdGVseSwgaG93IGl0IGNoYW5nZXMgdGhlIGJlaGF2aW9yIG9mIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIGltcGxlbWVudGF0aW9uIGl0c2VsZi4gRnJvbSB0aGVyZSwgSSBjYW4gYmVnaW4gdG8gZm9ybSBhIGNvbXBsZXRlIHVuZGVyc3RhbmRpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDQ6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDIxMDpcdFx0ICBJZiB1bnN1cmUsIHNheSBZLlxuIDIxMTpcdFxuIDIxMjpcdGNvbmZpZyBORl9DT05OVFJBQ0tfQU1BTkRBXG4gMjEzOlx0XHR0cmlzdGF0ZSBcJiMzNDtBbWFuZGEgYmFja3VwIHByb3RvY29sIHN1cHBvcnRcJiMzNDtcbiAyMTQ6XHRcdGRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VEXG4gMjE1Olx0XHRzZWxlY3QgVEVYVFNFQVJDSFxuIDIxNjpcdFx0c2VsZWN0IFRFWFRTRUFSQ0hfS01QXG4gMjE3Olx0XHRoZWxwXG4gMjE4Olx0XHQgIElmIHlvdSBhcmUgcnVubmluZyB0aGUgQW1hbmRhIGJhY2t1cCBwYWNrYWdlIFx1MDAzY2h0dHA6Ly93d3cuYW1hbmRhLm9yZy9cdTAwM2VcbiAyMTk6XHRcdCAgb24gdGhpcyBtYWNoaW5lIG9yIG1hY2hpbmVzIHRoYXQgd2lsbCBiZSBNQVNRVUVSQURFRCB0aHJvdWdoIHRoaXNcbiAyMjA6XHRcdCAgbWFjaGluZSwgdGhlbiB5b3UgbWF5IHdhbnQgdG8gZW5hYmxlIHRoaXMgZmVhdHVyZS4gIFRoaXMgYWxsb3dzIHRoZVxuIDIyMTpcdFx0ICBjb25uZWN0aW9uIHRyYWNraW5nIGFuZCBuYXR0aW5nIGNvZGUgdG8gYWxsb3cgdGhlIHN1Yi1jaGFubmVscyB0aGF0XG4gMjIyOlx0XHQgIEFtYW5kYSByZXF1aXJlcyBmb3IgY29tbXVuaWNhdGlvbiBvZiB0aGUgYmFja3VwIGRhdGEsIG1lc3NhZ2VzIGFuZFxuIDIyMzpcdFx0ICBpbmRleC5cbiAyMjQ6XHRcbiAyMjU6XHRcdCAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gIElmIHVuc3VyZSwgc2F5IE4uXG4gMjI2Olx0XG4gMjI3Olx0Y29uZmlnIE5GX0NPTk5UUkFDS19GVFBcbiAyMjg6XHRcdHRyaXN0YXRlIFwmIzM0O0ZUUCBwcm90b2NvbCBzdXBwb3J0XCYjMzQ7XG4gMjI5Olx0XHRkZWZhdWx0IG0gaWYgTkVURklMVEVSX0FEVkFOQ0VEPW5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNDozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MjI1CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDoKCioqSW52ZXN0aWdhdGluZyBORl9DT05OVFJBQ0sgaW4gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uKioKCk9rYXksIGZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgZXhhY3RseSBob3cgYE5GX0NPTk5UUkFDS2AgaXMgZGVmaW5lZCBhbmQgd2hlcmUgaXQgbGl2ZXMgd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIGRpdmUgaW50byBgbmV0L25ldGZpbHRlci9LY29uZmlnYCBzcGVjaWZpY2FsbHkuIEkgc3VzcGVjdCBpdCYjMzk7cyBlaXRoZXIgZGlyZWN0bHkgaW4gdGhlcmUgYXMgYSB0b3AtbGV2ZWwgb3B0aW9uIG9yIG1pZ2h0IGJlIGhpZGRlbiBiZWhpbmQgc29tZSBkZXBlbmRlbmNpZXMuIEdvdHRhIGVuc3VyZSBpdCBpc24mIzM5O3QgZGVwZW5kZW50IG9uIGFub3RoZXIgbW9yZSBvYnNjdXJlIHNldHRpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBleGFjdCBwbGFjZSBpbiB0aGUgY29uZmlndXJhdGlvbiBoaWVyYXJjaHksIGl0cyBwb3RlbnRpYWwgZGVwZW5kZW5jaWVzLCBhbmQgaWYgaXQmIzM5O3MgZXZlbiBleHBvc2VkIGRpcmVjdGx5IGZvciBjdXN0b21pemF0aW9uLiBUaGlzIGluZm9ybWF0aW9uIGlzIGNydWNpYWwgZm9yIGFueSBwb3RlbnRpYWwgbW9kaWZpY2F0aW9ucyBvciB0cm91Ymxlc2hvb3RpbmcgZG93biB0aGUgbGluZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNDozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdG1lbnUgXCYjMzQ7Q29yZSBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvblwmIzM0O1xuICAgMzpcdFx0ZGVwZW5kcyBvbiBJTkVUIFx1MDAyNlx1MDAyNiBORVRGSUxURVJcbiAgIDQ6XHRcbiAgIDU6XHRjb25maWcgTkVURklMVEVSX0lOR1JFU1NcbiAgIDY6XHRcdGJvb2wgXCYjMzQ7TmV0ZmlsdGVyIGluZ3Jlc3Mgc3VwcG9ydFwmIzM0O1xuICAgNzpcdFx0ZGVmYXVsdCB5XG4gICA4Olx0XHRzZWxlY3QgTkVUX0lOR1JFU1NcbiAgIDk6XHRcdGhlbHBcbiAgMTA6XHRcdCAgVGhpcyBhbGxvd3MgeW91IHRvIGNsYXNzaWZ5IHBhY2tldHMgZnJvbSBpbmdyZXNzIHVzaW5nIHRoZSBOZXRmaWx0ZXJcbiAgMTE6XHRcdCAgaW5mcmFzdHJ1Y3R1cmUuXG4gIDEyOlx0XG4gIDEzOlx0Y29uZmlnIE5FVEZJTFRFUl9FR1JFU1NcbiAgMTQ6XHRcdGJvb2wgXCYjMzQ7TmV0ZmlsdGVyIGVncmVzcyBzdXBwb3J0XCYjMzQ7XG4gIDE1Olx0XHRkZWZhdWx0IHlcbiAgMTY6XHRcdHNlbGVjdCBORVRfRUdSRVNTXG4gIDE3Olx0XHRoZWxwXG4gIDE4Olx0XHQgIFRoaXMgYWxsb3dzIHlvdSB0byBjbGFzc2lmeSBwYWNrZXRzIGJlZm9yZSB0cmFuc21pc3Npb24gdXNpbmcgdGhlXG4gIDE5Olx0XHQgIE5ldGZpbHRlciBpbmZyYXN0cnVjdHVyZS5cbiAgMjA6XHRcbiAgMjE6XHRjb25maWcgTkVURklMVEVSX1NLSVBfRUdSRVNTXG4gIDIyOlx0XHRkZWZfYm9vbCBORVRGSUxURVJfRUdSRVNTIFx1MDAyNlx1MDAyNiAoTkVUX0NMU19BQ1QgfHwgSUZCKVxuICAyMzpcdFxuICAyNDpcdGNvbmZpZyBORVRGSUxURVJfTkVUTElOS1xuICAyNTpcdFx0Ym9vbFxuICAyNjpcdFxuICAyNzpcdGNvbmZpZyBORVRGSUxURVJfRkFNSUxZX0JSSURHRVxuICAyODpcdFx0Ym9vbFxuICAyOTpcdFxuICAzMDpcdGNvbmZpZyBORVRGSUxURVJfRkFNSUxZX0FSUFxuICAzMTpcdFx0Ym9vbFxuICAzMjpcdFxuICAzMzpcdGNvbmZpZyBORVRGSUxURVJfQlBGX0xJTktcbiAgMzQ6XHRcdGRlZl9ib29sIEJQRl9TWVNDQUxMXG4gIDM1Olx0XG4gIDM2Olx0Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX0hPT0tcbiAgMzc6XHRcdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBiYXNlIGhvb2sgZHVtcCBzdXBwb3J0XCYjMzQ7XG4gIDM4Olx0XHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9BRFZBTkNFRFxuICAzOTpcdFx0ZGVwZW5kcyBvbiBORl9UQUJMRVNcbiAgNDA6XHRcdHNlbGVjdCBORVRGSUxURVJfTkVUTElOS1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNDozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2ODkwCgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogNDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQW1hbmRhIE5ldGZpbHRlciBDb25uZWN0aW9uIFRyYWNraW5nIEhlbHBlcioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIGhvdyBgbmZfY29ubnRyYWNrX2FtYW5kYWAgaXMgYWN0dWFsbHkgcmVhY2hlZC4gUmlnaHQsIGl0JiMzOTtzIGEgbmV0ZmlsdGVyIGNvbm5lY3Rpb24gdHJhY2tpbmcgaGVscGVyIHNwZWNpZmljYWxseSBmb3IgdGhlIEFtYW5kYSBwcm90b2NvbC4gU28sIHdoZW4gY29ubnRyYWNrIGdldHMgYSBVRFAgcGFja2V0IHRoYXQgbWF0Y2hlcyB0aGUgaGVscGVyJiMzOTtzIHJlZ2lzdGVyZWQgcG9ydCDigJMgd2hpY2gsIGJ5IGRlZmF1bHQsIGlzIDEwMDgwLCBvciBjb3VsZCBiZSBjb25maWd1cmVkIHZpYSB0aGUgbW9kdWxlIHBhcmFtZXRlcnMgb3IgQ1QgaGVscGVyIHJ1bGVzIOKAkyB0aGUgYGFtYW5kYV9oZWxwYCBmdW5jdGlvbiBpcyBpbnZva2VkLiBHb29kLiBBbHNvLCBJIGtub3cgdGhhdCBwYWNrZXQgaW5qZWN0aW9uIGFuZCBuZXRmaWx0ZXIgdGVzdGluZyBpbiBzeXprYWxsZXIgcmVndWxhcmx5IGV4ZXJjaXNlcyBuZXRmaWx0ZXIgY29ubnRyYWNrIGhlbHBlcnMgdXNpbmcgbG9vcGJhY2ssIHR1biwgdGFwIGludGVyZmFjZXMsIG9yIHZpYSBuZnRhYmxlcy9pcHRhYmxlcyBDVCBoZWxwZXIgdGFyZ2V0cy4KCk5vdywgdGhpcyBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiB0aGUgd2F5IHRoZSBwb3J0IGlzIHBhcnNlZC4gUHJldmlvdXNseSwgdGhlIGNvZGUgd2FzIGxpa2UgdGhpczogYHBvcnQgPSBodG9ucyhzaW1wbGVfc3RydG91bChwYnVmLCAmYW1wO3RtcCwgMTApKTtgLiBFc3NlbnRpYWxseSwgdGhlIGBodG9ucygpYCBmdW5jdGlvbiB3YXMgYmVpbmcgY2FsbGVkIG9uIGFuIGB1bnNpZ25lZCBsb25nYCByZXN1bHQgZnJvbSBgc2ltcGxlX3N0cnRvdWxgLiBUaGUgYHBvcnRgIHZhcmlhYmxlIGl0c2VsZiB3YXMgYSBgX19iZTE2YC4gVGhpcyBtZWFudCB0aGF0IGlmIGBzaW1wbGVfc3RydG91bGAgcmV0dXJuZWQgc29tZXRoaW5nIGxpa2UgNjU1MzYgb3IgMTMxMDcyLCB0aGUgYHBvcnQgPT0gMGAgY2hlY2sgKm1pZ2h0KiBmYWlsLCBvciBwYXNzIHVuZXhwZWN0ZWRseS4gYGh0b25zYCB3YXMgdHJ1bmNhdGluZyBvciBjb252ZXJ0aW5nIHRoZSB2YWx1ZSwgYW5kIHRoZXJlIHdhcyBubyBjaGVjayB0byBlbnN1cmUgdGhlIHJlc3VsdCBkaWRuJiMzOTt0IGV4Y2VlZCB0aGUgbWF4IHZhbHVlLgoKU3BlY2lmaWNhbGx5LCBpZiBgc2ltcGxlX3N0cnRvdWxgIHBhcnNlZCBhIG51bWJlciBncmVhdGVyIHRoYW4gNjU1MzUsIGBodG9uc2Agd291bGQgc2ltcGx5IHRydW5jYXRlIGl0IHRvIDE2IGJpdHMuIE5vdywgdGhlIGZpeCBtYWtlcyB0aGluZ3MgbXVjaCBtb3JlIHJvYnVzdC4gSXQgc3RvcmVzIHRoZSByZXN1bHQgb2YgYHNpbXBsZV9zdHJ0b3VsYCBpbnRvIGB0bXBfcG9ydGAsIHdoaWNoIGlzIGFuIGB1bnNpZ25lZCBsb25nYC4gVGhlbiBpdCBjaGVja3MgZm9yIGB0bXBfcG9ydCA9PSAwIHx8IHRtcF9wb3J0ICZndDsgNjU1MzUgfHwgbGVuICZndDsgNWAsIGFuZCAqdGhlbiogYXNzaWducyBgcG9ydCA9IGh0b25zKHRtcF9wb3J0KWAuIFNtYXJ0LgoKVGhpcyBpcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCByaWdodCBpbiBjb3JlIG5ldHdvcmtpbmcsIGRlZXAgd2l0aGluIG5ldGZpbHRlci4gSG1tLCBpcyB0aGlzIHNvbWV0aGluZyB0aGF0JiMzOTtzIHdvcnRoIGZ1enppbmc/IFllcywgSSYjMzk7ZCBzYXkgc28uIGBXb3J0aEZ1enppbmc9dHJ1ZWAuCgpMZXQmIzM5O3MgcXVpY2tseSBjaGVjayB0aGUgYEZvY3VzU3ltYm9sc2AuIFRoZSBtb2RpZmllZCBmdW5jdGlvbiBpcyBgYW1hbmRhX2hlbHBgLiBOb3cgbGV0JiMzOTtzIHNlZSBpZiB0aGVyZSBhcmUgb3RoZXIgaW50ZXJlc3RpbmcgZnVuY3Rpb25zIGluIGBuZl9jb25udHJhY2tfYW1hbmRhLmNgIHRoYXQgYXJlIHdvcnRoIG15IGF0dGVudGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDQ6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XlthLXpBLVpfXS4qXFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmM9MjU9c3RhdGljIGNoYXIgKnRzX2FsZ28gPSBcJiMzNDtrbXBcJiMzNDs7XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmMtMjgtXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuYzoyOTpNT0RVTEVfQVVUSE9SKFwmIzM0O0JyaWFuIEouIE11cnJlbGwgXHUwMDNjbmV0ZmlsdGVyQGludGVybGlueC5iYy5jYVx1MDAzZVwmIzM0Oyk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuYzozMDpNT0RVTEVfREVTQ1JJUFRJT04oXCYjMzQ7QW1hbmRhIGNvbm5lY3Rpb24gdHJhY2tpbmcgbW9kdWxlXCYjMzQ7KTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jOjMxOk1PRFVMRV9MSUNFTlNFKFwmIzM0O0dQTFwmIzM0Oyk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuYzozMjpNT0RVTEVfQUxJQVMoXCYjMzQ7aXBfY29ubnRyYWNrX2FtYW5kYVwmIzM0Oyk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuYzozMzpNT0RVTEVfQUxJQVNfTkZDVF9IRUxQRVIoSEVMUEVSX05BTUUpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmMtMzQtXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuYzozNTptb2R1bGVfcGFyYW0obWFzdGVyX3RpbWVvdXQsIHVpbnQsIDA2MDApO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmM6MzY6TU9EVUxFX1BBUk1fREVTQyhtYXN0ZXJfdGltZW91dCwgXCYjMzQ7dGltZW91dCBmb3IgdGhlIG1hc3RlciBjb25uZWN0aW9uXCYjMzQ7KTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jOjM3Om1vZHVsZV9wYXJhbSh0c19hbGdvLCBjaGFycCwgMDQwMCk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuYzozODpNT0RVTEVfUEFSTV9ERVNDKHRzX2FsZ28sIFwmIzM0O3RleHRzZWFyY2ggYWxnb3JpdGhtIHRvIHVzZSAoZGVmYXVsdCBrbXApXCYjMzQ7KTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jLTM5LVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmM9NDA9bmZfbmF0X2FtYW5kYV9ob29rX2ZuIF9fcmN1ICpuZl9uYXRfYW1hbmRhX2hvb2sgX19yZWFkX21vc3RseTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jOjQxOkVYUE9SVF9TWU1CT0xfR1BMKG5mX25hdF9hbWFuZGFfaG9vayk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuYy00Mi1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuYz01Mj1zdGF0aWMgc3RydWN0IHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuYy04Mi1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jOjgzOnN0YXRpYyBpbnQgYW1hbmRhX2hlbHAoc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jLTg0LVx0XHQgICAgICAgdW5zaWduZWQgaW50IHByb3RvZmYsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmM9MTc1PXN0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqYW1hbmRhX2hlbHBlcl9wdHJbMl0gX19yZWFkX21vc3RseTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jLTE3Ni1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jOjE3NzpzdGF0aWMgdm9pZCBfX2V4aXQgbmZfY29ubnRyYWNrX2FtYW5kYV9maW5pKHZvaWQpXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuYy0xNzgte1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jLTE4Ni1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jOjE4NzpzdGF0aWMgaW50IF9faW5pdCBuZl9jb25udHJhY2tfYW1hbmRhX2luaXQodm9pZClcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jLTE4OC17XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmMtMjIzLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmM6MjI0Om1vZHVsZV9pbml0KG5mX2Nvbm50cmFja19hbWFuZGFfaW5pdCk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuYzoyMjU6bW9kdWxlX2V4aXQobmZfY29ubnRyYWNrX2FtYW5kYV9maW5pKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDQ6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODgyMAoJCQkJCQkJb3V0cHV0OiAxMDkKCQkJCQkJCXRob3VnaHRzOiAzMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgQW1hbmRhIENvbm50cmFjayBIZWxwZXIgTW9kaWZpY2F0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZm9jdXNpbmcgb24gYGFtYW5kYV9oZWxwYCDigJMgdGhhdCYjMzk7cyB0aGUgY29yZSBmdW5jdGlvbiB0aGlzIHBhdGNoIHRvdWNoZXMuIEJlZm9yZSBJIGdldCBpbnRvIHRoZSBkZXRhaWxzLCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBlbnZpcm9ubWVudCBpcyBzZXQgdXAgY29ycmVjdGx5LiBMZXQmIzM5O3MgdmVyaWZ5IHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMuIEkgc2VlIHRoYXQgYENPTkZJR19ORl9DT05OVFJBQ0tfQU1BTkRBYCwgYENPTkZJR19ORl9DT05OVFJBQ0tgLCBgQ09ORklHX05FVEZJTFRFUmAsIGFuZCBgQ09ORklHX0lORVRgIGFyZSBlc3NlbnRpYWwuIEp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJiMzOTtsbCB0YWtlIGEgcXVpY2sgbG9vayBhdCBgbmV0L25ldGZpbHRlci9LY29uZmlnYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBoaWRkZW4gZGVwZW5kZW5jaWVzLgoKQWgsIHllcy4gQXMgZXhwZWN0ZWQsIGBORl9DT05OVFJBQ0tfQU1BTkRBYCBkZXBlbmRzIG9uIGBORVRGSUxURVJfQURWQU5DRURgLCBhbmQgaW4gdHVybiwgcmVxdWlyZXMgYE5FVEZJTFRFUmAgYW5kIGBJTkVUYCB0byBiZSBjb3JyZWN0bHkgcHJlc2VudGVkIGluIHRoZSBtZW51LiBBbHNvLCBpdCBzZWxlY3RzIGBURVhUU0VBUkNIYCBhbmQgYFRFWFRTRUFSQ0hfS01QYCBmb3IgZ29vZCBtZWFzdXJlLiBTbywgdGhlIGJhc2UgY29uZmlncyBJIGlkZW50aWZpZWQgYXJlIHRoZSBrZXkgb25lczogYE5GX0NPTk5UUkFDS19BTUFOREFgLCBgTkZfQ09OTlRSQUNLYCwgYW5kIGBORVRGSUxURVJgLiBUaGF0JiMzOTtzIHN0YW5kYXJkIHN0dWZmLgoKTm93LCBsZXQmIzM5O3MgbmFpbCBkb3duIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYHNldC1yZXN1bHRzYCBjYWxsLiBJIGNhbiBzZWUgdGhlIHBhcmFtZXRlcnMgY2xlYXJseTogYFdvcnRoRnV6emluZ2Agc2V0IHRvIGB0cnVlYCwgdGhlIGBGb2N1c1N5bWJvbHNgIGJlaW5nIGNvcnJlY3RseSBzZXQgdG8gYFsmIzM0O2FtYW5kYV9oZWxwJiMzNDtdYCwgYW5kIGBFbmFibGVDb25maWdzYCBzZXQgdG8gYFsmIzM0O05GX0NPTk5UUkFDS19BTUFOREEmIzM0OywgJiMzNDtORl9DT05OVFJBQ0smIzM0OywgJiMzNDtORVRGSUxURVImIzM0O11gLiBQZXJmZWN0LiBUaGUgcmVhc29uaW5nIGlzIGNsZWFyOiB0aGlzIHBhdGNoIGlzIGFib3V0IGZpeGluZyBwb3J0IHZhbGlkYXRpb24gaW4gdGhlIEFtYW5kYSBjb25udHJhY2sgaGVscGVyIChgYW1hbmRhX2hlbHBgKSB3aXRoaW4gYG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jYCwgc3BlY2lmaWNhbGx5IHRvIGF2b2lkIGludGVnZXIgdHJ1bmNhdGlvbiBhbmQgcHJvcGVybHkgdmFsaWRhdGUgcG9ydCBudW1iZXJzIHBhcnNlZCBmcm9tIHBhY2tldCBwYXlsb2Fkcy4gVGhhdCBjb2RlIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIHdoZW4gaGFuZGxpbmcgbmV0d29yayBwYWNrZXRzIHdpdGggQW1hbmRhIGNvbm5lY3Rpb24gdHJhY2tpbmcgZW5hYmxlZC4KClllcCwgZXZlcnl0aGluZyBjaGVja3Mgb3V0LiBJJiMzOTttIHNhdGlzZmllZC4gTGV0JiMzOTtzIGdvIGFoZWFkIGFuZCBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA0OjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORl9DT05OVFJBQ0tfQU1BTkRBJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDSyYjMzQ7LAogICAgJiMzNDtORVRGSUxURVImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthbWFuZGFfaGVscCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBwb3J0IHBhcnNpbmcgYW5kIGJvdW5kcyB2YWxpZGF0aW9uIGxvZ2ljIGluIHRoZSBBbWFuZGEgY29ubnRyYWNrIGhlbHBlciAoYW1hbmRhX2hlbHApIHRvIGNvcnJlY3RseSByZWplY3QgcG9ydCB2YWx1ZXMgZ3JlYXRlciB0aGFuIDY1NTM1IGFuZCBwcmV2ZW50IHRydW5jYXRpb24gYmVmb3JlIHJhbmdlIGNoZWNraW5nLiBUaGlzIGlzIHJlYWNoYWJsZSBuZXR3b3JraW5nIGNvZGUgaW4gTmV0ZmlsdGVyLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORl9DT05OVFJBQ0tfQU1BTkRBJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDSyYjMzQ7LAogICAgJiMzNDtORVRGSUxURVImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthbWFuZGFfaGVscCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBwb3J0IHBhcnNpbmcgYW5kIGJvdW5kcyB2YWxpZGF0aW9uIGxvZ2ljIGluIHRoZSBBbWFuZGEgY29ubnRyYWNrIGhlbHBlciAoYW1hbmRhX2hlbHApIHRvIGNvcnJlY3RseSByZWplY3QgcG9ydCB2YWx1ZXMgZ3JlYXRlciB0aGFuIDY1NTM1IGFuZCBwcmV2ZW50IHRydW5jYXRpb24gYmVmb3JlIHJhbmdlIGNoZWNraW5nLiBUaGlzIGlzIHJlYWNoYWJsZSBuZXR3b3JraW5nIGNvZGUgaW4gTmV0ZmlsdGVyLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNDozMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA0OjMwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gaW50ZWdlciByYW5nZSB2YWxpZGF0aW9uIGlzc3VlIGluIHRoZSBBbWFuZGEgY29ubnRyYWNrIGhlbHBlciAoYGFtYW5kYV9oZWxwYCkgYnkgcHJvcGVybHkgY2hlY2tpbmcgdGhhdCB0aGUgcGFyc2VkIHBvcnQgbnVtYmVyIGRvZXMgbm90IGV4Y2VlZCA2NTUzNSBiZWZvcmUgY2FzdGluZy9jb252ZXJ0aW5nIGl0IHdpdGggYGh0b25zKClgLlxuXG5BbGwgbW9kaWZpZWQgYW5kIHN1cnJvdW5kaW5nIHZhcmlhYmxlcyAoYHRtcF9wb3J0YCwgYHBvcnRgLCBgbGVuYCwgYHBidWZgKSBhcmUgc3RyaWN0bHkgaW5pdGlhbGl6ZWQgYW5kIGRldGVybWluaXN0aWMuIE5vIGhlYXAvc3RhY2sgc3RydWN0dXJlcyBhcmUgbGVha2VkIHRvIHVzZXIgc3BhY2UsIG5vIGNvbmRpdGlvbmFsIGJyYW5jaGVzIHJlbHkgb24gdW5pbml0aWFsaXplZCBzdGF0ZSwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzc2VzIGFyZSBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDBiMGRiYmEzMjYyMGY3ZjliNjg5NjMzYjNiMjczMDMzZWM5ZmRjNGIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIFNlcCA3IDA0OjMwOjE2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuYwppbmRleCAxNGFlNjYwNDkxZjM2Li4wNTdjZWY3ZTJhN2VkIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuYwpAQCAtOTEsNiAmIzQzOzkxLDcgQEAgc3RhdGljIGludCBhbWFuZGFfaGVscChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCWNoYXIgcGJ1ZltzaXplb2YoJiMzNDs2NTUzNSYjMzQ7KV0sICp0bXA7CiAJdTE2IGxlbjsKIAlfX2JlMTYgcG9ydDsKJiM0MzsJdW5zaWduZWQgbG9uZyB0bXBfcG9ydDsKIAlpbnQgcmV0ID0gTkZfQUNDRVBUOwogCW5mX25hdF9hbWFuZGFfaG9va19mbiAqbmZfbmF0X2FtYW5kYTsKIApAQCAtMTMyLDEwICYjNDM7MTMzLDExIEBAIHN0YXRpYyBpbnQgYW1hbmRhX2hlbHAoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCWJyZWFrOwogCQlwYnVmW2xlbl0gPSAmIzM5O1wwJiMzOTs7CiAKLQkJcG9ydCA9IGh0b25zKHNpbXBsZV9zdHJ0b3VsKHBidWYsICZhbXA7dG1wLCAxMCkpOwomIzQzOwkJdG1wX3BvcnQgPSBzaW1wbGVfc3RydG91bChwYnVmLCAmYW1wO3RtcCwgMTApOwogCQlsZW4gPSB0bXAgLSBwYnVmOwotCQlpZiAocG9ydCA9PSAwIHx8IGxlbiAmZ3Q7IDUpCiYjNDM7CQlpZiAodG1wX3BvcnQgPT0gMCB8fCB0bXBfcG9ydCAmZ3Q7IDY1NTM1IHx8IGxlbiAmZ3Q7IDUpCiAJCQlicmVhazsKJiM0MzsJCXBvcnQgPSBodG9ucyh0bXBfcG9ydCk7CiAKIAkJZXhwID0gbmZfY3RfZXhwZWN0X2FsbG9jKGN0KTsKIAkJaWYgKGV4cCA9PSBOVUxMKSB7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNDozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjgwCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogNTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGNyYWZ0ZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkRpdmluZyBpbnRvIHRoZSBBbWFuZGEgQ29ubnRyYWNrIE1vZHVsZSoqCgpSaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGNoYW5nZS4gVGhlIGZpcnN0IHRoaW5nIEkmIzM5O20gZ29pbmcgdG8gZG8gaXMgZ2V0IG15IGV5ZXMgb24gdGhlIGRpZmYuIEkmIzM5O2xsIHJlYWQgdGhlIGBuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuY2AgY29kZSB0byBzZWUgdGhlIGJlZm9yZSBhbmQgYWZ0ZXIuIE15IGdvYWwgaXMgdG8gZ3Jhc3AgdGhlIG1vZGlmaWNhdGlvbiYjMzk7cyBpbXBhY3Qgd2l0aGluIHRoYXQgY29udGV4dC4gSSB3YW50IHRvIHJlYWQgdGhlIHN1cnJvdW5kaW5nIGxpbmVzIHRvIHVuZGVyc3RhbmQgdGhlIHB1cnBvc2Ugb2YgdGhlIGNvZGUgYW5kIHRoZSBsb2NhdGlvbiBvZiB0aGUgZWRpdC4gSSYjMzk7bGwgdXNlIGByZWFkLWZpbGVgIHRvIGdyYWIgdGhlIGZpbGUgYW5kIGJlZ2luIGFuYWx5emluZyBpdC4gVGltZSB0byBkaWcgaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA0OjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDgwOlx0XHR9LFxuICA4MTpcdH07XG4gIDgyOlx0XG4gIDgzOlx0c3RhdGljIGludCBhbWFuZGFfaGVscChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuICA4NDpcdFx0XHQgICAgICAgdW5zaWduZWQgaW50IHByb3RvZmYsXG4gIDg1Olx0XHRcdCAgICAgICBzdHJ1Y3QgbmZfY29ubiAqY3QsXG4gIDg2Olx0XHRcdCAgICAgICBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbylcbiAgODc6XHR7XG4gIDg4Olx0XHRzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqZXhwO1xuICA4OTpcdFx0c3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGU7XG4gIDkwOlx0XHR1bnNpZ25lZCBpbnQgZGF0YW9mZiwgc3RhcnQsIHN0b3AsIG9mZiwgaTtcbiAgOTE6XHRcdGNoYXIgcGJ1ZltzaXplb2YoXCYjMzQ7NjU1MzVcJiMzNDspXSwgKnRtcDtcbiAgOTI6XHRcdHUxNiBsZW47XG4gIDkzOlx0XHRfX2JlMTYgcG9ydDtcbiAgOTQ6XHRcdHVuc2lnbmVkIGxvbmcgdG1wX3BvcnQ7XG4gIDk1Olx0XHRpbnQgcmV0ID0gTkZfQUNDRVBUO1xuICA5NjpcdFx0bmZfbmF0X2FtYW5kYV9ob29rX2ZuICpuZl9uYXRfYW1hbmRhO1xuICA5NzpcdFxuICA5ODpcdFx0LyogT25seSBsb29rIGF0IHBhY2tldHMgZnJvbSB0aGUgQW1hbmRhIHNlcnZlciAqL1xuICA5OTpcdFx0aWYgKENUSU5GTzJESVIoY3RpbmZvKSA9PSBJUF9DVF9ESVJfT1JJR0lOQUwpXG4gMTAwOlx0XHRcdHJldHVybiBORl9BQ0NFUFQ7XG4gMTAxOlx0XG4gMTAyOlx0XHQvKiBpbmNyZWFzZSB0aGUgVURQIHRpbWVvdXQgb2YgdGhlIG1hc3RlciBjb25uZWN0aW9uIGFzIHJlcGxpZXMgZnJvbVxuIDEwMzpcdFx0ICogQW1hbmRhIGNsaWVudHMgdG8gdGhlIHNlcnZlciBjYW4gYmUgcXVpdGUgZGVsYXllZCAqL1xuIDEwNDpcdFx0bmZfY3RfcmVmcmVzaChjdCwgbWFzdGVyX3RpbWVvdXQgKiBIWik7XG4gMTA1Olx0XG4gMTA2Olx0XHQvKiBObyBkYXRhPyAqL1xuIDEwNzpcdFx0ZGF0YW9mZiA9IHByb3RvZmYgJiM0Mzsgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpO1xuIDEwODpcdFx0aWYgKGRhdGFvZmYgXHUwMDNlPSBza2ItXHUwMDNlbGVuKSB7XG4gMTA5Olx0XHRcdG5ldF9lcnJfcmF0ZWxpbWl0ZWQoXCYjMzQ7YW1hbmRhX2hlbHA6IHNrYmxlbiA9ICV1XFxuXCYjMzQ7LCBza2ItXHUwMDNlbGVuKTtcbiAxMTA6XHRcdFx0cmV0dXJuIE5GX0FDQ0VQVDtcbiAxMTE6XHRcdH1cbiAxMTI6XHRcbiAxMTM6XHRcdHN0YXJ0ID0gc2tiX2ZpbmRfdGV4dChza2IsIGRhdGFvZmYsIHNrYi1cdTAwM2VsZW4sXG4gMTE0Olx0XHRcdFx0ICAgICAgc2VhcmNoW1NFQVJDSF9DT05ORUNUXS50cyk7XG4gMTE1Olx0XHRpZiAoc3RhcnQgPT0gVUlOVF9NQVgpXG4gMTE2Olx0XHRcdGdvdG8gb3V0O1xuIDExNzpcdFx0c3RhcnQgJiM0Mzs9IGRhdGFvZmYgJiM0Mzsgc2VhcmNoW1NFQVJDSF9DT05ORUNUXS5sZW47XG4gMTE4Olx0XG4gMTE5Olx0XHRzdG9wID0gc2tiX2ZpbmRfdGV4dChza2IsIHN0YXJ0LCBza2ItXHUwMDNlbGVuLFxuIDEyMDpcdFx0XHRcdCAgICAgc2VhcmNoW1NFQVJDSF9ORVdMSU5FXS50cyk7XG4gMTIxOlx0XHRpZiAoc3RvcCA9PSBVSU5UX01BWClcbiAxMjI6XHRcdFx0Z290byBvdXQ7XG4gMTIzOlx0XHRzdG9wICYjNDM7PSBzdGFydDtcbiAxMjQ6XHRcbiAxMjU6XHRcdGZvciAoaSA9IFNFQVJDSF9EQVRBOyBpIFx1MDAzYz0gU0VBUkNIX1NUQVRFOyBpJiM0MzsmIzQzOykge1xuIDEyNjpcdFx0XHRvZmYgPSBza2JfZmluZF90ZXh0KHNrYiwgc3RhcnQsIHN0b3AsIHNlYXJjaFtpXS50cyk7XG4gMTI3Olx0XHRcdGlmIChvZmYgPT0gVUlOVF9NQVgpXG4gMTI4Olx0XHRcdFx0Y29udGludWU7XG4gMTI5Olx0XHRcdG9mZiAmIzQzOz0gc3RhcnQgJiM0Mzsgc2VhcmNoW2ldLmxlbjtcbiAxMzA6XHRcbiAxMzE6XHRcdFx0bGVuID0gbWluX3QodW5zaWduZWQgaW50LCBzaXplb2YocGJ1ZikgLSAxLCBzdG9wIC0gb2ZmKTtcbiAxMzI6XHRcdFx0aWYgKHNrYl9jb3B5X2JpdHMoc2tiLCBvZmYsIHBidWYsIGxlbikpXG4gMTMzOlx0XHRcdFx0YnJlYWs7XG4gMTM0Olx0XHRcdHBidWZbbGVuXSA9ICYjMzk7XFwwJiMzOTs7XG4gMTM1Olx0XG4gMTM2Olx0XHRcdHRtcF9wb3J0ID0gc2ltcGxlX3N0cnRvdWwocGJ1ZiwgXHUwMDI2dG1wLCAxMCk7XG4gMTM3Olx0XHRcdGxlbiA9IHRtcCAtIHBidWY7XG4gMTM4Olx0XHRcdGlmICh0bXBfcG9ydCA9PSAwIHx8IHRtcF9wb3J0IFx1MDAzZSA2NTUzNSB8fCBsZW4gXHUwMDNlIDUpXG4gMTM5Olx0XHRcdFx0YnJlYWs7XG4gMTQwOlx0XHRcdHBvcnQgPSBodG9ucyh0bXBfcG9ydCk7XG4gMTQxOlx0XG4gMTQyOlx0XHRcdGV4cCA9IG5mX2N0X2V4cGVjdF9hbGxvYyhjdCk7XG4gMTQzOlx0XHRcdGlmIChleHAgPT0gTlVMTCkge1xuIDE0NDpcdFx0XHRcdG5mX2N0X2hlbHBlcl9sb2coc2tiLCBjdCwgXCYjMzQ7Y2Fubm90IGFsbG9jIGV4cGVjdGF0aW9uXCYjMzQ7KTtcbiAxNDU6XHRcdFx0XHRyZXQgPSBORl9EUk9QO1xuIDE0NjpcdFx0XHRcdGdvdG8gb3V0O1xuIDE0NzpcdFx0XHR9XG4gMTQ4Olx0XHRcdHR1cGxlID0gXHUwMDI2Y3QtXHUwMDNldHVwbGVoYXNoW0lQX0NUX0RJUl9PUklHSU5BTF0udHVwbGU7XG4gMTQ5Olx0XHRcdG5mX2N0X2V4cGVjdF9pbml0KGV4cCwgTkZfQ1RfRVhQRUNUX0NMQVNTX0RFRkFVTFQsXG4gMTUwOlx0XHRcdFx0XHQgIG5mX2N0X2wzbnVtKGN0KSxcbiAxNTE6XHRcdFx0XHRcdCAgXHUwMDI2dHVwbGUtXHUwMDNlc3JjLnUzLCBcdTAwMjZ0dXBsZS1cdTAwM2Vkc3QudTMsXG4gMTUyOlx0XHRcdFx0XHQgIElQUFJPVE9fVENQLCBOVUxMLCBcdTAwMjZwb3J0KTtcbiAxNTM6XHRcbiAxNTQ6XHRcdFx0bmZfbmF0X2FtYW5kYSA9IHJjdV9kZXJlZmVyZW5jZShuZl9uYXRfYW1hbmRhX2hvb2spO1xuIDE1NTpcdFx0XHRpZiAobmZfbmF0X2FtYW5kYSBcdTAwMjZcdTAwMjYgY3QtXHUwMDNlc3RhdHVzIFx1MDAyNiBJUFNfTkFUX01BU0spXG4gMTU2Olx0XHRcdFx0cmV0ID0gbmZfbmF0X2FtYW5kYShza2IsIGN0LCBjdGluZm8sIHByb3RvZmYsXG4gMTU3Olx0XHRcdFx0XHRcdCAgICBvZmYgLSBkYXRhb2ZmLCBsZW4sIGV4cCk7XG4gMTU4Olx0XHRcdGVsc2UgaWYgKG5mX2N0X2V4cGVjdF9yZWxhdGVkKGV4cCwgMCkgIT0gMCkge1xuIDE1OTpcdFx0XHRcdG5mX2N0X2hlbHBlcl9sb2coc2tiLCBjdCwgXCYjMzQ7Y2Fubm90IGFkZCBleHBlY3RhdGlvblwmIzM0Oyk7XG4gMTYwOlx0XHRcdFx0cmV0ID0gTkZfRFJPUDtcbiAxNjE6XHRcdFx0fVxuIDE2MjpcdFx0XHRuZl9jdF9leHBlY3RfcHV0KGV4cCk7XG4gMTYzOlx0XHR9XG4gMTY0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA0OjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5MjIKCQkJCQkJCW91dHB1dDogMTQ0CgkJCQkJCQl0aG91Z2h0czogNTkzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQW1hbmRhIENvbm50cmFjayBIZWxwZXIgUG9ydCBWYWxpZGF0aW9uIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgcGF0Y2guIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBhbmFseXplIHRoZSBjaGFuZ2VzIHRvIHRoZSBwb3J0IG51bWJlciBoYW5kbGluZyBsb2dpYy4gUHJldmlvdXNseSwgdGhlIGNvZGUgdXNlZCBgc2ltcGxlX3N0cnRvdWxgIHRvIGNvbnZlcnQgYSBzdHJpbmcgYHBidWZgIHRvIGFuIHVuc2lnbmVkIGxvbmcgYW5kIHRoZW4gdXNlZCBgaHRvbnNgIHRvIGNvbnZlcnQgaXQgdG8gYSBuZXR3b3JrIGJ5dGUgb3JkZXIgc2hvcnQsIGFzc2lnbmluZyBpdCB0byBgcG9ydGAuIFRoZSBwcm9ibGVtIGxpZXMgaW4gdGhlIGZhY3QgdGhhdCBgaHRvbnNgIGVmZmVjdGl2ZWx5IHRydW5jYXRlcyB0aGUgYHVuc2lnbmVkIGxvbmdgIGlucHV0IHRvIGEgYHUxNmAgYmVmb3JlIGJ5dGUtc3dhcHBpbmcuIFRoaXMgbWVhbnMgdGhhdCBpZiBgc2ltcGxlX3N0cnRvdWxgIHJldHVybnMgYSB2YWx1ZSBsYXJnZXIgdGhhbiA2NTUzNSwgbGlrZSAmIzM0Ozk5OTk5JiMzNDssIHRoZSBjb2RlIGNvdWxkIHBvdGVudGlhbGx5IHRydW5jYXRlIHRvIHplcm8gKGlmIHRoZSB0cnVuY2F0ZWQgdmFsdWUgaXMgemVybykgb3IgYSBub24temVybyB2YWx1ZSBhZnRlciBiZWluZyBiaXQtbWFza2VkIHdpdGggMHhmZmZmIGJ5IGBodG9uc2AsIHdoaWNoIGNvdWxkIGxlYWQgdG8gYW4gaW5jb3JyZWN0IHBvcnQgYXNzaWdubWVudC4gQ3JpdGljYWxseSwgdGhlIG9yaWdpbmFsIGNvZGUgb25seSB2YWxpZGF0ZWQgdGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uLCBidXQgbm90IHRoZSBudW1lcmljYWwgdmFsdWUgaXQgcmVwcmVzZW50ZWQsIGxlYWRpbmcgdG8gdGhpcyBvdmVyZmxvdyB2dWxuZXJhYmlsaXR5LgoKVGhpcyBwYXRjaCBhZGRyZXNzZXMgdGhpcyBpc3N1ZSBkaXJlY3RseS4gSXQgaW50cm9kdWNlcyBhIHRlbXBvcmFyeSB2YXJpYWJsZSwgYHRtcF9wb3J0YCwgdG8gaG9sZCB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgYHNpbXBsZV9zdHJ0b3VsYC4gVGhpcyBpcyBjcnVjaWFsLiBJdCB2YWxpZGF0ZXMgdGhlIHBvcnQgbnVtYmVyLCBub3cgZW5zdXJpbmcgaXQgaXMgYmV0d2VlbiAwIGFuZCA2NTUzNSwgYmVmb3JlIGNvbnZlcnRpbmcgdG8gbmV0d29yayBieXRlIG9yZGVyIHVzaW5nIGBodG9uc2AuIFRoaXMgaXMgYSBtdWNoIGJldHRlciBhcHByb2FjaC4KCk5vdywgbGV0JiMzOTtzIGNvbnNpZGVyIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gSSYjMzk7dmUgZXhhbWluZWQgdGhlIHZhcmlhYmxlcyBpbnZvbHZlZCwgYW5kIEkmIzM5O20gY29uZmlkZW50IHRoZXJlIGFyZSBubyBzdWNoIHJpc2tzLiBgdG1wX3BvcnRgIGlzIGRpcmVjdGx5IGluaXRpYWxpemVkIGJ5IGBzaW1wbGVfc3RydG91bGAuIFRoZSBgcG9ydGAgaXMgYWxzbyBpbml0aWFsaXplZCBkaXJlY3RseS4gVGhlIGlucHV0IGJ1ZmZlciBgcGJ1ZmAgaXMgcG9wdWxhdGVkIGJ5IGBza2JfY29weV9iaXRzYCwgYW5kIG51bGwtdGVybWluYXRlZC4gRXZlcnl0aGluZyBzZWVtcyB0byBiZSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLiBObyB1bmluaXRpYWxpemVkIGRhdGEgaXMgYmVpbmcgYnJhbmNoZWQgb24gb3IgdXNlZCwgYW5kIG5vdGhpbmcgdW5pbml0aWFsaXplZCBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZS4KClRoZXJlZm9yZSwgdGhpcyBwYXRjaCBkZWZpbml0ZWx5IGRvZXMgKm5vdCoganVzdGlmeSBhIEtNU0FOIHNlc3Npb24uIEtNU0FOIGlzIGZvciBkZXRlY3RpbmcgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnksIHdoaWNoIGlzIGNsZWFybHkgbm90IHRoZSBjYXNlIGhlcmUuIFRoaXMgcGF0Y2ggc2ltcGx5IGZpeGVzIGEgcG9ydCBudW1iZXIgaW5wdXQgdmFsaWRhdGlvbiBpc3N1ZSDigJMgYW4gaW50ZWdlciBvdmVyZmxvdywgcmVhbGx5IOKAkyBpbiB0aGUgQW1hbmRhIGNvbm50cmFjayBoZWxwZXIuCgpGaW5hbGx5LCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgYW0gZm9sbG93aW5nIHRoZSBzdGFuZGFyZCBndWlkZWxpbmVzLiBgTmVlZHNLTVNBTmAgc2hvdWxkIGJlIGZhbHNlLiBUaGUgYEtNU0FOUmVhc29uaW5nYCBmaWVsZCBzaG91bGQgY2xlYXJseSBjb250cmFzdCBLQVNBTiB2ZXJzdXMgS01TQU4gYXBwbGljYWJpbGl0eSwgYnV0IHRoYXQgY29udHJhc3QgaXMgYWxyZWFkeSBjbGVhciBpbiBteSBhbmFseXNpczogdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgdGhlIHB1cnZpZXcgb2YgS01TQU4sIGFuZCB0aGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQgaGVyZS4gVGhlcmVmb3JlLCBteSBgc2V0LXJlc3VsdHNgIGNhbGwgd2lsbCBiZSBiYXNlZCBvbiB0aGF0IHVuZGVyc3RhbmRpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA0OjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIGludGVnZXIgcmFuZ2UgdmFsaWRhdGlvbiBpc3N1ZSBpbiB0aGUgQW1hbmRhIGNvbm50cmFjayBoZWxwZXIgKGBhbWFuZGFfaGVscGApIGJ5IHByb3Blcmx5IGNoZWNraW5nIHRoYXQgdGhlIHBhcnNlZCBwb3J0IG51bWJlciBkb2VzIG5vdCBleGNlZWQgNjU1MzUgYmVmb3JlIGNhc3RpbmcvY29udmVydGluZyBpdCB3aXRoIGBodG9ucygpYC5cblxuQWxsIG1vZGlmaWVkIGFuZCBzdXJyb3VuZGluZyB2YXJpYWJsZXMgKGB0bXBfcG9ydGAsIGBwb3J0YCwgYGxlbmAsIGBwYnVmYCkgYXJlIHN0cmljdGx5IGluaXRpYWxpemVkIGFuZCBkZXRlcm1pbmlzdGljLiBObyBoZWFwL3N0YWNrIHN0cnVjdHVyZXMgYXJlIGxlYWtlZCB0byB1c2VyIHNwYWNlLCBubyBjb25kaXRpb25hbCBicmFuY2hlcyByZWx5IG9uIHVuaW5pdGlhbGl6ZWQgc3RhdGUsIGFuZCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3NlcyBhcmUgaW50cm9kdWNlZCBvciBleHBvc2VkLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiBpbnRlZ2VyIHJhbmdlIHZhbGlkYXRpb24gaXNzdWUgaW4gdGhlIEFtYW5kYSBjb25udHJhY2sgaGVscGVyIChgYW1hbmRhX2hlbHBgKSBieSBwcm9wZXJseSBjaGVja2luZyB0aGF0IHRoZSBwYXJzZWQgcG9ydCBudW1iZXIgZG9lcyBub3QgZXhjZWVkIDY1NTM1IGJlZm9yZSBjYXN0aW5nL2NvbnZlcnRpbmcgaXQgd2l0aCBgaHRvbnMoKWAuXG5cbkFsbCBtb2RpZmllZCBhbmQgc3Vycm91bmRpbmcgdmFyaWFibGVzIChgdG1wX3BvcnRgLCBgcG9ydGAsIGBsZW5gLCBgcGJ1ZmApIGFyZSBzdHJpY3RseSBpbml0aWFsaXplZCBhbmQgZGV0ZXJtaW5pc3RpYy4gTm8gaGVhcC9zdGFjayBzdHJ1Y3R1cmVzIGFyZSBsZWFrZWQgdG8gdXNlciBzcGFjZSwgbm8gY29uZGl0aW9uYWwgYnJhbmNoZXMgcmVseSBvbiB1bmluaXRpYWxpemVkIHN0YXRlLCBhbmQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzZXMgYXJlIGludHJvZHVjZWQgb3IgZXhwb3NlZC4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNDozMDoxOC4yNzYwMzg3NTNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTUyMTcyMTIzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORl9DT05OVFJBQ0tfQU1BTkRBXCIsXG4gICAgXCJORl9DT05OVFJBQ0tcIixcbiAgICBcIk5FVEZJTFRFUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFtYW5kYV9oZWxwXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBpbnRlZ2VyIHJhbmdlIHZhbGlkYXRpb24gaXNzdWUgaW4gdGhlIEFtYW5kYSBjb25udHJhY2sgaGVscGVyIChgYW1hbmRhX2hlbHBgKSBieSBwcm9wZXJseSBjaGVja2luZyB0aGF0IHRoZSBwYXJzZWQgcG9ydCBudW1iZXIgZG9lcyBub3QgZXhjZWVkIDY1NTM1IGJlZm9yZSBjYXN0aW5nL2NvbnZlcnRpbmcgaXQgd2l0aCBgaHRvbnMoKWAuXFxuXFxuQWxsIG1vZGlmaWVkIGFuZCBzdXJyb3VuZGluZyB2YXJpYWJsZXMgKGB0bXBfcG9ydGAsIGBwb3J0YCwgYGxlbmAsIGBwYnVmYCkgYXJlIHN0cmljdGx5IGluaXRpYWxpemVkIGFuZCBkZXRlcm1pbmlzdGljLiBObyBoZWFwL3N0YWNrIHN0cnVjdHVyZXMgYXJlIGxlYWtlZCB0byB1c2VyIHNwYWNlLCBubyBjb25kaXRpb25hbCBicmFuY2hlcyByZWx5IG9uIHVuaW5pdGlhbGl6ZWQgc3RhdGUsIGFuZCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3NlcyBhcmUgaW50cm9kdWNlZCBvciBleHBvc2VkLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgcG9ydCBwYXJzaW5nIGFuZCBib3VuZHMgdmFsaWRhdGlvbiBsb2dpYyBpbiB0aGUgQW1hbmRhIGNvbm50cmFjayBoZWxwZXIgKGFtYW5kYV9oZWxwKSB0byBjb3JyZWN0bHkgcmVqZWN0IHBvcnQgdmFsdWVzIGdyZWF0ZXIgdGhhbiA2NTUzNSBhbmQgcHJldmVudCB0cnVuY2F0aW9uIGJlZm9yZSByYW5nZSBjaGVja2luZy4gVGhpcyBpcyByZWFjaGFibGUgbmV0d29ya2luZyBjb2RlIGluIE5ldGZpbHRlci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDQ6MzA6MTguMjc2MDQzNzczWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDg2ODU1NTExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMGIwZGJiYTMyNjIwZjdmOWI2ODk2MzNiM2IyNzMwMzNlYzlmZGM0YlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIFNlcCA3IDA0OjMwOjE2IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmNcXG5pbmRleCAxNGFlNjYwNDkxZjM2Li4wNTdjZWY3ZTJhN2VkIDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmNcXG5AQCAtOTEsNiArOTEsNyBAQCBzdGF0aWMgaW50IGFtYW5kYV9oZWxwKHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdGNoYXIgcGJ1ZltzaXplb2YoXFxcIjY1NTM1XFxcIildLCAqdG1wO1xcbiBcXHR1MTYgbGVuO1xcbiBcXHRfX2JlMTYgcG9ydDtcXG4rXFx0dW5zaWduZWQgbG9uZyB0bXBfcG9ydDtcXG4gXFx0aW50IHJldCA9IE5GX0FDQ0VQVDtcXG4gXFx0bmZfbmF0X2FtYW5kYV9ob29rX2ZuICpuZl9uYXRfYW1hbmRhO1xcbiBcXG5AQCAtMTMyLDEwICsxMzMsMTEgQEAgc3RhdGljIGludCBhbWFuZGFfaGVscChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0cGJ1ZltsZW5dID0gJ1xcXFwwJztcXG4gXFxuLVxcdFxcdHBvcnQgPSBodG9ucyhzaW1wbGVfc3RydG91bChwYnVmLCBcXHUwMDI2dG1wLCAxMCkpO1xcbitcXHRcXHR0bXBfcG9ydCA9IHNpbXBsZV9zdHJ0b3VsKHBidWYsIFxcdTAwMjZ0bXAsIDEwKTtcXG4gXFx0XFx0bGVuID0gdG1wIC0gcGJ1ZjtcXG4tXFx0XFx0aWYgKHBvcnQgPT0gMCB8fCBsZW4gXFx1MDAzZSA1KVxcbitcXHRcXHRpZiAodG1wX3BvcnQgPT0gMCB8fCB0bXBfcG9ydCBcXHUwMDNlIDY1NTM1IHx8IGxlbiBcXHUwMDNlIDUpXFxuIFxcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRwb3J0ID0gaHRvbnModG1wX3BvcnQpO1xcbiBcXG4gXFx0XFx0ZXhwID0gbmZfY3RfZXhwZWN0X2FsbG9jKGN0KTtcXG4gXFx0XFx0aWYgKGV4cCA9PSBOVUxMKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA0OjMwOjE5Ljc2Mzg2MjU2NFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTc5ODkzNTkxOTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZfQ09OTlRSQUNLX0FNQU5EQVwiLFxuICAgIFwiTkZfQ09OTlRSQUNLXCIsXG4gICAgXCJORVRGSUxURVJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhbWFuZGFfaGVscFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHBvcnQgcGFyc2luZyBhbmQgYm91bmRzIHZhbGlkYXRpb24gbG9naWMgaW4gdGhlIEFtYW5kYSBjb25udHJhY2sgaGVscGVyIChhbWFuZGFfaGVscCkgdG8gY29ycmVjdGx5IHJlamVjdCBwb3J0IHZhbHVlcyBncmVhdGVyIHRoYW4gNjU1MzUgYW5kIHByZXZlbnQgdHJ1bmNhdGlvbiBiZWZvcmUgcmFuZ2UgY2hlY2tpbmcuIFRoaXMgaXMgcmVhY2hhYmxlIG5ldHdvcmtpbmcgY29kZSBpbiBOZXRmaWx0ZXIuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMGIwZGJiYTMyNjIwZjdmOWI2ODk2MzNiM2IyNzMwMzNlYzlmZGM0YlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDcgMDQ6MzA6MTYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jXG5pbmRleCAxNGFlNjYwNDkxZjM2Li4wNTdjZWY3ZTJhN2VkIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jXG5AQCAtOTEsNiArOTEsNyBAQCBzdGF0aWMgaW50IGFtYW5kYV9oZWxwKHN0cnVjdCBza19idWZmICpza2IsXG4gXHRjaGFyIHBidWZbc2l6ZW9mKFwiNjU1MzVcIildLCAqdG1wO1xuIFx0dTE2IGxlbjtcbiBcdF9fYmUxNiBwb3J0O1xuK1x0dW5zaWduZWQgbG9uZyB0bXBfcG9ydDtcbiBcdGludCByZXQgPSBORl9BQ0NFUFQ7XG4gXHRuZl9uYXRfYW1hbmRhX2hvb2tfZm4gKm5mX25hdF9hbWFuZGE7XG4gXG5AQCAtMTMyLDEwICsxMzMsMTEgQEAgc3RhdGljIGludCBhbWFuZGFfaGVscChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdGJyZWFrO1xuIFx0XHRwYnVmW2xlbl0gPSAnXFwwJztcbiBcbi1cdFx0cG9ydCA9IGh0b25zKHNpbXBsZV9zdHJ0b3VsKHBidWYsIFx1MDAyNnRtcCwgMTApKTtcbitcdFx0dG1wX3BvcnQgPSBzaW1wbGVfc3RydG91bChwYnVmLCBcdTAwMjZ0bXAsIDEwKTtcbiBcdFx0bGVuID0gdG1wIC0gcGJ1Zjtcbi1cdFx0aWYgKHBvcnQgPT0gMCB8fCBsZW4gXHUwMDNlIDUpXG4rXHRcdGlmICh0bXBfcG9ydCA9PSAwIHx8IHRtcF9wb3J0IFx1MDAzZSA2NTUzNSB8fCBsZW4gXHUwMDNlIDUpXG4gXHRcdFx0YnJlYWs7XG4rXHRcdHBvcnQgPSBodG9ucyh0bXBfcG9ydCk7XG4gXG4gXHRcdGV4cCA9IG5mX2N0X2V4cGVjdF9hbGxvYyhjdCk7XG4gXHRcdGlmIChleHAgPT0gTlVMTCkge1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDQ6MzA6MTkuNzYzODY2NDU0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjE2OTM5NDY0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEFtYW5kYSBDb25udHJhY2sgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaCBhbmQgdGhlIGFzc29jaWF0ZWQgcmV2aWV3IHJlcXVlc3QuIEknbSBsb29raW5nIGF0IHRoZSBkaWZmIG5vdyBmb3IgYG5mX2Nvbm50cmFja19hbWFuZGEuY2AuIEhtbSwgdGhlIGNoYW5nZSBzZWVtcyBmb2N1c2VkIG9uIHRoZSBwb3J0IGhhbmRsaW5nIHdpdGhpbiB0aGUgYGFtYW5kYV9oZWxwYCBmdW5jdGlvbi4gU3BlY2lmaWNhbGx5LCBpdCBsb29rcyBsaWtlIHRoZXJlJ3MgYmVlbiBhIHN1YnRsZSBjaGFuZ2UgdG8gaG93IHRoZSBwb3J0IG51bWJlciwgd2hpY2ggaXMgY29taW5nIGluIGFzIGEgc3RyaW5nLCBpcyBjb252ZXJ0ZWQgdG8gYSBgX19iZTE2YCBmb3JtYXQuXG5cbkluaXRpYWxseSwgaXQgd2FzIHVzaW5nIGBzaW1wbGVfc3RydG91bGAgdG8gZGlyZWN0bHkgY29udmVydCB0aGUgc3RyaW5nIHRvIGEgYHUxNmAgYmVmb3JlIGNvbnZlcnRpbmcgdGhlIGB1MTZgIHRvIG5ldHdvcmsgYnl0ZSBvcmRlci4gTm93LCB0aGV5J3ZlIGludHJvZHVjZWQgYW4gaW50ZXJtZWRpYXRlIGB1bnNpZ25lZCBsb25nYCB2YXJpYWJsZSBjYWxsZWQgYHRtcF9wb3J0YC4gVGhpcyBpcyBpbW1lZGlhdGVseSByYWlzaW5nIGEgZmxhZyDigJMgY2hlY2tpbmcgdGhlIGxpbWl0cy4gSXQncyBnb29kIHRoZXkgYXJlIHZhbGlkYXRpbmcgYHRtcF9wb3J0YCB0byBiZSBiZXR3ZWVuIGAwYCBhbmQgYDY1NTM1YCBhbmQgdGhhdCB0aGUgbGVuZ3RoIGlzIGFwcHJvcHJpYXRlIGJlZm9yZSBjb252ZXJ0aW5nIGl0IHRvIG5ldHdvcmsgYnl0ZSBvcmRlci4gVGhpcyBpcyBhIHZlcnkgZ29vZCBhZGRpdGlvbiDigJMgcG90ZW50aWFsbHkgZ3VhcmRpbmcgYWdhaW5zdCBvdmVyZmxvd3Mgb3IgdW5leHBlY3RlZCB2YWx1ZXMgdGhhdCBtaWdodCBsZWFkIHRvIHZ1bG5lcmFiaWxpdGllcy4gTG9va3MgZ29vZDsgSSB3b3VsZCBoYXZlIGRvbmUgdGhlIHNhbWUuXG5cbkJlZm9yZSBJIGdpdmUgbXkgT0ssIEkgbmVlZCB0byBjb25maXJtIHRoZSBjaGFuZ2UgaXMgdGhlIGNvcnJlY3QgaGFuZGxpbmcuIEkgd2lsbCBjaGVjayB0aGUgcmVsYXRlZCBgS2NvbmZpZ2AgZm9yIHRoZSBmaWxlIGFuZCBjcm9zcyByZWZlcmVuY2Ugd2l0aCBncmVwcGVyIG9yIGZpbGUgcmVhZCB0byBtYWtlIHN1cmUgSSBhbSBub3QgbWlzc2luZyBhbnkgY2hhbmdlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA2OCwiT3V0cHV0VG9rZW5zIjo3MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0NSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA0OjMwOjI1LjkzMzI3NjU0M1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNTQ3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4MCxcbiAgXCJMaW5lQ291bnRcIjogOTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA4MDpcXHRcXHR9LFxcbiAgODE6XFx0fTtcXG4gIDgyOlxcdFxcbiAgODM6XFx0c3RhdGljIGludCBhbWFuZGFfaGVscChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiAgODQ6XFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGludCBwcm90b2ZmLFxcbiAgODU6XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBuZl9jb25uICpjdCxcXG4gIDg2OlxcdFxcdFxcdCAgICAgICBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbylcXG4gIDg3OlxcdHtcXG4gIDg4OlxcdFxcdHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHA7XFxuICA4OTpcXHRcXHRzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZTtcXG4gIDkwOlxcdFxcdHVuc2lnbmVkIGludCBkYXRhb2ZmLCBzdGFydCwgc3RvcCwgb2ZmLCBpO1xcbiAgOTE6XFx0XFx0Y2hhciBwYnVmW3NpemVvZihcXFwiNjU1MzVcXFwiKV0sICp0bXA7XFxuICA5MjpcXHRcXHR1MTYgbGVuO1xcbiAgOTM6XFx0XFx0X19iZTE2IHBvcnQ7XFxuICA5NDpcXHRcXHR1bnNpZ25lZCBsb25nIHRtcF9wb3J0O1xcbiAgOTU6XFx0XFx0aW50IHJldCA9IE5GX0FDQ0VQVDtcXG4gIDk2OlxcdFxcdG5mX25hdF9hbWFuZGFfaG9va19mbiAqbmZfbmF0X2FtYW5kYTtcXG4gIDk3OlxcdFxcbiAgOTg6XFx0XFx0LyogT25seSBsb29rIGF0IHBhY2tldHMgZnJvbSB0aGUgQW1hbmRhIHNlcnZlciAqL1xcbiAgOTk6XFx0XFx0aWYgKENUSU5GTzJESVIoY3RpbmZvKSA9PSBJUF9DVF9ESVJfT1JJR0lOQUwpXFxuIDEwMDpcXHRcXHRcXHRyZXR1cm4gTkZfQUNDRVBUO1xcbiAxMDE6XFx0XFxuIDEwMjpcXHRcXHQvKiBpbmNyZWFzZSB0aGUgVURQIHRpbWVvdXQgb2YgdGhlIG1hc3RlciBjb25uZWN0aW9uIGFzIHJlcGxpZXMgZnJvbVxcbiAxMDM6XFx0XFx0ICogQW1hbmRhIGNsaWVudHMgdG8gdGhlIHNlcnZlciBjYW4gYmUgcXVpdGUgZGVsYXllZCAqL1xcbiAxMDQ6XFx0XFx0bmZfY3RfcmVmcmVzaChjdCwgbWFzdGVyX3RpbWVvdXQgKiBIWik7XFxuIDEwNTpcXHRcXG4gMTA2OlxcdFxcdC8qIE5vIGRhdGE/ICovXFxuIDEwNzpcXHRcXHRkYXRhb2ZmID0gcHJvdG9mZiArIHNpemVvZihzdHJ1Y3QgdWRwaGRyKTtcXG4gMTA4OlxcdFxcdGlmIChkYXRhb2ZmIFxcdTAwM2U9IHNrYi1cXHUwMDNlbGVuKSB7XFxuIDEwOTpcXHRcXHRcXHRuZXRfZXJyX3JhdGVsaW1pdGVkKFxcXCJhbWFuZGFfaGVscDogc2tibGVuID0gJXVcXFxcblxcXCIsIHNrYi1cXHUwMDNlbGVuKTtcXG4gMTEwOlxcdFxcdFxcdHJldHVybiBORl9BQ0NFUFQ7XFxuIDExMTpcXHRcXHR9XFxuIDExMjpcXHRcXG4gMTEzOlxcdFxcdHN0YXJ0ID0gc2tiX2ZpbmRfdGV4dChza2IsIGRhdGFvZmYsIHNrYi1cXHUwMDNlbGVuLFxcbiAxMTQ6XFx0XFx0XFx0XFx0ICAgICAgc2VhcmNoW1NFQVJDSF9DT05ORUNUXS50cyk7XFxuIDExNTpcXHRcXHRpZiAoc3RhcnQgPT0gVUlOVF9NQVgpXFxuIDExNjpcXHRcXHRcXHRnb3RvIG91dDtcXG4gMTE3OlxcdFxcdHN0YXJ0ICs9IGRhdGFvZmYgKyBzZWFyY2hbU0VBUkNIX0NPTk5FQ1RdLmxlbjtcXG4gMTE4OlxcdFxcbiAxMTk6XFx0XFx0c3RvcCA9IHNrYl9maW5kX3RleHQoc2tiLCBzdGFydCwgc2tiLVxcdTAwM2VsZW4sXFxuIDEyMDpcXHRcXHRcXHRcXHQgICAgIHNlYXJjaFtTRUFSQ0hfTkVXTElORV0udHMpO1xcbiAxMjE6XFx0XFx0aWYgKHN0b3AgPT0gVUlOVF9NQVgpXFxuIDEyMjpcXHRcXHRcXHRnb3RvIG91dDtcXG4gMTIzOlxcdFxcdHN0b3AgKz0gc3RhcnQ7XFxuIDEyNDpcXHRcXG4gMTI1OlxcdFxcdGZvciAoaSA9IFNFQVJDSF9EQVRBOyBpIFxcdTAwM2M9IFNFQVJDSF9TVEFURTsgaSsrKSB7XFxuIDEyNjpcXHRcXHRcXHRvZmYgPSBza2JfZmluZF90ZXh0KHNrYiwgc3RhcnQsIHN0b3AsIHNlYXJjaFtpXS50cyk7XFxuIDEyNzpcXHRcXHRcXHRpZiAob2ZmID09IFVJTlRfTUFYKVxcbiAxMjg6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDEyOTpcXHRcXHRcXHRvZmYgKz0gc3RhcnQgKyBzZWFyY2hbaV0ubGVuO1xcbiAxMzA6XFx0XFxuIDEzMTpcXHRcXHRcXHRsZW4gPSBtaW5fdCh1bnNpZ25lZCBpbnQsIHNpemVvZihwYnVmKSAtIDEsIHN0b3AgLSBvZmYpO1xcbiAxMzI6XFx0XFx0XFx0aWYgKHNrYl9jb3B5X2JpdHMoc2tiLCBvZmYsIHBidWYsIGxlbikpXFxuIDEzMzpcXHRcXHRcXHRcXHRicmVhaztcXG4gMTM0OlxcdFxcdFxcdHBidWZbbGVuXSA9ICdcXFxcMCc7XFxuIDEzNTpcXHRcXG4gMTM2OlxcdFxcdFxcdHRtcF9wb3J0ID0gc2ltcGxlX3N0cnRvdWwocGJ1ZiwgXFx1MDAyNnRtcCwgMTApO1xcbiAxMzc6XFx0XFx0XFx0bGVuID0gdG1wIC0gcGJ1ZjtcXG4gMTM4OlxcdFxcdFxcdGlmICh0bXBfcG9ydCA9PSAwIHx8IHRtcF9wb3J0IFxcdTAwM2UgNjU1MzUgfHwgbGVuIFxcdTAwM2UgNSlcXG4gMTM5OlxcdFxcdFxcdFxcdGJyZWFrO1xcbiAxNDA6XFx0XFx0XFx0cG9ydCA9IGh0b25zKHRtcF9wb3J0KTtcXG4gMTQxOlxcdFxcbiAxNDI6XFx0XFx0XFx0ZXhwID0gbmZfY3RfZXhwZWN0X2FsbG9jKGN0KTtcXG4gMTQzOlxcdFxcdFxcdGlmIChleHAgPT0gTlVMTCkge1xcbiAxNDQ6XFx0XFx0XFx0XFx0bmZfY3RfaGVscGVyX2xvZyhza2IsIGN0LCBcXFwiY2Fubm90IGFsbG9jIGV4cGVjdGF0aW9uXFxcIik7XFxuIDE0NTpcXHRcXHRcXHRcXHRyZXQgPSBORl9EUk9QO1xcbiAxNDY6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuIDE0NzpcXHRcXHRcXHR9XFxuIDE0ODpcXHRcXHRcXHR0dXBsZSA9IFxcdTAwMjZjdC1cXHUwMDNldHVwbGVoYXNoW0lQX0NUX0RJUl9PUklHSU5BTF0udHVwbGU7XFxuIDE0OTpcXHRcXHRcXHRuZl9jdF9leHBlY3RfaW5pdChleHAsIE5GX0NUX0VYUEVDVF9DTEFTU19ERUZBVUxULFxcbiAxNTA6XFx0XFx0XFx0XFx0XFx0ICBuZl9jdF9sM251bShjdCksXFxuIDE1MTpcXHRcXHRcXHRcXHRcXHQgIFxcdTAwMjZ0dXBsZS1cXHUwMDNlc3JjLnUzLCBcXHUwMDI2dHVwbGUtXFx1MDAzZWRzdC51MyxcXG4gMTUyOlxcdFxcdFxcdFxcdFxcdCAgSVBQUk9UT19UQ1AsIE5VTEwsIFxcdTAwMjZwb3J0KTtcXG4gMTUzOlxcdFxcbiAxNTQ6XFx0XFx0XFx0bmZfbmF0X2FtYW5kYSA9IHJjdV9kZXJlZmVyZW5jZShuZl9uYXRfYW1hbmRhX2hvb2spO1xcbiAxNTU6XFx0XFx0XFx0aWYgKG5mX25hdF9hbWFuZGEgXFx1MDAyNlxcdTAwMjYgY3QtXFx1MDAzZXN0YXR1cyBcXHUwMDI2IElQU19OQVRfTUFTSylcXG4gMTU2OlxcdFxcdFxcdFxcdHJldCA9IG5mX25hdF9hbWFuZGEoc2tiLCBjdCwgY3RpbmZvLCBwcm90b2ZmLFxcbiAxNTc6XFx0XFx0XFx0XFx0XFx0XFx0ICAgIG9mZiAtIGRhdGFvZmYsIGxlbiwgZXhwKTtcXG4gMTU4OlxcdFxcdFxcdGVsc2UgaWYgKG5mX2N0X2V4cGVjdF9yZWxhdGVkKGV4cCwgMCkgIT0gMCkge1xcbiAxNTk6XFx0XFx0XFx0XFx0bmZfY3RfaGVscGVyX2xvZyhza2IsIGN0LCBcXFwiY2Fubm90IGFkZCBleHBlY3RhdGlvblxcXCIpO1xcbiAxNjA6XFx0XFx0XFx0XFx0cmV0ID0gTkZfRFJPUDtcXG4gMTYxOlxcdFxcdFxcdH1cXG4gMTYyOlxcdFxcdFxcdG5mX2N0X2V4cGVjdF9wdXQoZXhwKTtcXG4gMTYzOlxcdFxcdH1cXG4gMTY0OlxcdFxcbiAxNjU6XFx0b3V0OlxcbiAxNjY6XFx0XFx0cmV0dXJuIHJldDtcXG4gMTY3OlxcdH1cXG4gMTY4OlxcdFxcbiAxNjk6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0X3BvbGljeSBhbWFuZGFfZXhwX3BvbGljeSA9IHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDQ6MzA6MjUuOTMzMzkzNzQzWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MTg4MTEyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJORl9DT05OVFJBQ0tfQU1BTkRBXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnPTIwMT1jb25maWcgTkZfQ1RfUFJPVE9fU0NUUFxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTIxMS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MjEyOmNvbmZpZyBORl9DT05OVFJBQ0tfQU1BTkRBXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTIxMy1cXHR0cmlzdGF0ZSBcXFwiQW1hbmRhIGJhY2t1cCBwcm90b2NvbCBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnPTQxNj1jb25maWcgTkZfTkFUX0FNQU5EQVxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQxOC1cXHRkZXBlbmRzIG9uIE5GX0NPTk5UUkFDSyBcXHUwMDI2XFx1MDAyNiBORl9OQVRcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NDE5OlxcdGRlZmF1bHQgTkZfTkFUIFxcdTAwMjZcXHUwMDI2IE5GX0NPTk5UUkFDS19BTUFOREFcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDIwLVxcbi0tXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZT00Mj1uZl9jb25udHJhY2tfaDMyMy1vYmpzIDo9IG5mX2Nvbm50cmFja19oMzIzX21haW4ubyBuZl9jb25udHJhY2tfaDMyM19hc24xLm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTQzLVxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6NDQ6b2JqLSQoQ09ORklHX05GX0NPTk5UUkFDS19BTUFOREEpICs9IG5mX2Nvbm50cmFja19hbWFuZGEub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtNDUtb2JqLSQoQ09ORklHX05GX0NPTk5UUkFDS19GVFApICs9IG5mX2Nvbm50cmFja19mdHAub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNDozMDoyNi4wODUyOTIwNzhaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDM2Mjk1MzUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgYEtjb25maWdgIGZvciBDb25uZWN0aW9uIFRyYWNraW5nIGFuZCBBbWFuZGEqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgaW50ZXJhY3RzIHdpdGggQW1hbmRhLCBzcGVjaWZpY2FsbHkuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBkaXZlIHN0cmFpZ2h0IGludG8gdGhlIGBLY29uZmlnYCBmaWxlcyDigJMgdGhhdCdzIHdoZXJlIHRoZSBoZWFydCBvZiBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIGRlcGVuZGVuY2llcyBsaWVzLCByaWdodD8gSSdtIGdvaW5nIHRvIHBpbnBvaW50IHRoZSBzZWN0aW9uIHJlbGF0ZWQgdG8gYE5GX0NPTk5UUkFDS19BTUFOREFgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGRlcGVuZGVuY2llcyB0aGlzIGZlYXR1cmUgaGFzLiBJcyBpdCBkZXBlbmRlbnQgb24gb3RoZXIgY29ubmVjdGlvbiB0cmFja2luZyBvcHRpb25zPyBXaGF0IG90aGVyIGZ1bmN0aW9uYWxpdGllcyBnZXQgYWZmZWN0ZWQgaWYgdGhpcyBpcyBlbmFibGVkIG9yIGRpc2FibGVkPyBJJ2xsIHByb2JhYmx5IGxvb2sgZm9yIHRoZSB0eXBpY2FsIGBkZXBlbmRzIG9uYCwgYHNlbGVjdGAsIG9yIGV2ZW4gYW55IGBkZWZhdWx0YCBvcHRpb25zIHRoYXQgbWlnaHQgZ2l2ZSBtZSBoaW50cyBhYm91dCB0aGUgYnJvYWRlciBwaWN0dXJlLiBNeSBnb2FsIGlzIHRvIHF1aWNrbHkgZ3Jhc3AgdGhlIGltcGxpY2F0aW9ucyBvZiBlbmFibGluZyBvciBkaXNhYmxpbmcgdGhpcyBmZWF0dXJlLCBzbyBJJ2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIG9uIGhvdyBpdCBhZmZlY3RzIHRoZSBidWlsZCBlbnZpcm9ubWVudCBhbmQgdWx0aW1hdGVseSwgaG93IGl0IGNoYW5nZXMgdGhlIGJlaGF2aW9yIG9mIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIGltcGxlbWVudGF0aW9uIGl0c2VsZi4gRnJvbSB0aGVyZSwgSSBjYW4gYmVnaW4gdG8gZm9ybSBhIGNvbXBsZXRlIHVuZGVyc3RhbmRpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU2MzMsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSIsImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNDozMDoyOC4xMjE1OTE2NDJaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjM0ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIxMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDIxMDpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IFkuXFxuIDIxMTpcXHRcXG4gMjEyOlxcdGNvbmZpZyBORl9DT05OVFJBQ0tfQU1BTkRBXFxuIDIxMzpcXHRcXHR0cmlzdGF0ZSBcXFwiQW1hbmRhIGJhY2t1cCBwcm90b2NvbCBzdXBwb3J0XFxcIlxcbiAyMTQ6XFx0XFx0ZGVwZW5kcyBvbiBORVRGSUxURVJfQURWQU5DRURcXG4gMjE1OlxcdFxcdHNlbGVjdCBURVhUU0VBUkNIXFxuIDIxNjpcXHRcXHRzZWxlY3QgVEVYVFNFQVJDSF9LTVBcXG4gMjE3OlxcdFxcdGhlbHBcXG4gMjE4OlxcdFxcdCAgSWYgeW91IGFyZSBydW5uaW5nIHRoZSBBbWFuZGEgYmFja3VwIHBhY2thZ2UgXFx1MDAzY2h0dHA6Ly93d3cuYW1hbmRhLm9yZy9cXHUwMDNlXFxuIDIxOTpcXHRcXHQgIG9uIHRoaXMgbWFjaGluZSBvciBtYWNoaW5lcyB0aGF0IHdpbGwgYmUgTUFTUVVFUkFERUQgdGhyb3VnaCB0aGlzXFxuIDIyMDpcXHRcXHQgIG1hY2hpbmUsIHRoZW4geW91IG1heSB3YW50IHRvIGVuYWJsZSB0aGlzIGZlYXR1cmUuICBUaGlzIGFsbG93cyB0aGVcXG4gMjIxOlxcdFxcdCAgY29ubmVjdGlvbiB0cmFja2luZyBhbmQgbmF0dGluZyBjb2RlIHRvIGFsbG93IHRoZSBzdWItY2hhbm5lbHMgdGhhdFxcbiAyMjI6XFx0XFx0ICBBbWFuZGEgcmVxdWlyZXMgZm9yIGNvbW11bmljYXRpb24gb2YgdGhlIGJhY2t1cCBkYXRhLCBtZXNzYWdlcyBhbmRcXG4gMjIzOlxcdFxcdCAgaW5kZXguXFxuIDIyNDpcXHRcXG4gMjI1OlxcdFxcdCAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gIElmIHVuc3VyZSwgc2F5IE4uXFxuIDIyNjpcXHRcXG4gMjI3OlxcdGNvbmZpZyBORl9DT05OVFJBQ0tfRlRQXFxuIDIyODpcXHRcXHR0cmlzdGF0ZSBcXFwiRlRQIHByb3RvY29sIHN1cHBvcnRcXFwiXFxuIDIyOTpcXHRcXHRkZWZhdWx0IG0gaWYgTkVURklMVEVSX0FEVkFOQ0VEPW5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDQ6MzA6MjguMTIxNzU4MzQyWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTc0MDA5MzE1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6XG5cbioqSW52ZXN0aWdhdGluZyBORl9DT05OVFJBQ0sgaW4gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uKipcblxuT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gZmlndXJlIG91dCBleGFjdGx5IGhvdyBgTkZfQ09OTlRSQUNLYCBpcyBkZWZpbmVkIGFuZCB3aGVyZSBpdCBsaXZlcyB3aXRoaW4gdGhlIGtlcm5lbCdzIGNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byBkaXZlIGludG8gYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2Agc3BlY2lmaWNhbGx5LiBJIHN1c3BlY3QgaXQncyBlaXRoZXIgZGlyZWN0bHkgaW4gdGhlcmUgYXMgYSB0b3AtbGV2ZWwgb3B0aW9uIG9yIG1pZ2h0IGJlIGhpZGRlbiBiZWhpbmQgc29tZSBkZXBlbmRlbmNpZXMuIEdvdHRhIGVuc3VyZSBpdCBpc24ndCBkZXBlbmRlbnQgb24gYW5vdGhlciBtb3JlIG9ic2N1cmUgc2V0dGluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGV4YWN0IHBsYWNlIGluIHRoZSBjb25maWd1cmF0aW9uIGhpZXJhcmNoeSwgaXRzIHBvdGVudGlhbCBkZXBlbmRlbmNpZXMsIGFuZCBpZiBpdCdzIGV2ZW4gZXhwb3NlZCBkaXJlY3RseSBmb3IgY3VzdG9taXphdGlvbi4gVGhpcyBpbmZvcm1hdGlvbiBpcyBjcnVjaWFsIGZvciBhbnkgcG90ZW50aWFsIG1vZGlmaWNhdGlvbnMgb3IgdHJvdWJsZXNob290aW5nIGRvd24gdGhlIGxpbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYyMjUsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA0OjMwOjI5Ljg2MTg1NTYxMloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NDI1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdG1lbnUgXFxcIkNvcmUgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb25cXFwiXFxuICAgMzpcXHRcXHRkZXBlbmRzIG9uIElORVQgXFx1MDAyNlxcdTAwMjYgTkVURklMVEVSXFxuICAgNDpcXHRcXG4gICA1OlxcdGNvbmZpZyBORVRGSUxURVJfSU5HUkVTU1xcbiAgIDY6XFx0XFx0Ym9vbCBcXFwiTmV0ZmlsdGVyIGluZ3Jlc3Mgc3VwcG9ydFxcXCJcXG4gICA3OlxcdFxcdGRlZmF1bHQgeVxcbiAgIDg6XFx0XFx0c2VsZWN0IE5FVF9JTkdSRVNTXFxuICAgOTpcXHRcXHRoZWxwXFxuICAxMDpcXHRcXHQgIFRoaXMgYWxsb3dzIHlvdSB0byBjbGFzc2lmeSBwYWNrZXRzIGZyb20gaW5ncmVzcyB1c2luZyB0aGUgTmV0ZmlsdGVyXFxuICAxMTpcXHRcXHQgIGluZnJhc3RydWN0dXJlLlxcbiAgMTI6XFx0XFxuICAxMzpcXHRjb25maWcgTkVURklMVEVSX0VHUkVTU1xcbiAgMTQ6XFx0XFx0Ym9vbCBcXFwiTmV0ZmlsdGVyIGVncmVzcyBzdXBwb3J0XFxcIlxcbiAgMTU6XFx0XFx0ZGVmYXVsdCB5XFxuICAxNjpcXHRcXHRzZWxlY3QgTkVUX0VHUkVTU1xcbiAgMTc6XFx0XFx0aGVscFxcbiAgMTg6XFx0XFx0ICBUaGlzIGFsbG93cyB5b3UgdG8gY2xhc3NpZnkgcGFja2V0cyBiZWZvcmUgdHJhbnNtaXNzaW9uIHVzaW5nIHRoZVxcbiAgMTk6XFx0XFx0ICBOZXRmaWx0ZXIgaW5mcmFzdHJ1Y3R1cmUuXFxuICAyMDpcXHRcXG4gIDIxOlxcdGNvbmZpZyBORVRGSUxURVJfU0tJUF9FR1JFU1NcXG4gIDIyOlxcdFxcdGRlZl9ib29sIE5FVEZJTFRFUl9FR1JFU1MgXFx1MDAyNlxcdTAwMjYgKE5FVF9DTFNfQUNUIHx8IElGQilcXG4gIDIzOlxcdFxcbiAgMjQ6XFx0Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LXFxuICAyNTpcXHRcXHRib29sXFxuICAyNjpcXHRcXG4gIDI3OlxcdGNvbmZpZyBORVRGSUxURVJfRkFNSUxZX0JSSURHRVxcbiAgMjg6XFx0XFx0Ym9vbFxcbiAgMjk6XFx0XFxuICAzMDpcXHRjb25maWcgTkVURklMVEVSX0ZBTUlMWV9BUlBcXG4gIDMxOlxcdFxcdGJvb2xcXG4gIDMyOlxcdFxcbiAgMzM6XFx0Y29uZmlnIE5FVEZJTFRFUl9CUEZfTElOS1xcbiAgMzQ6XFx0XFx0ZGVmX2Jvb2wgQlBGX1NZU0NBTExcXG4gIDM1OlxcdFxcbiAgMzY6XFx0Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX0hPT0tcXG4gIDM3OlxcdFxcdHRyaXN0YXRlIFxcXCJOZXRmaWx0ZXIgYmFzZSBob29rIGR1bXAgc3VwcG9ydFxcXCJcXG4gIDM4OlxcdFxcdGRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VEXFxuICAzOTpcXHRcXHRkZXBlbmRzIG9uIE5GX1RBQkxFU1xcbiAgNDA6XFx0XFx0c2VsZWN0IE5FVEZJTFRFUl9ORVRMSU5LXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA0OjMwOjI5Ljg2MjAwMjMzMloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MTc4ODIzMjQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQW1hbmRhIE5ldGZpbHRlciBDb25uZWN0aW9uIFRyYWNraW5nIEhlbHBlcioqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byBob3cgYG5mX2Nvbm50cmFja19hbWFuZGFgIGlzIGFjdHVhbGx5IHJlYWNoZWQuIFJpZ2h0LCBpdCdzIGEgbmV0ZmlsdGVyIGNvbm5lY3Rpb24gdHJhY2tpbmcgaGVscGVyIHNwZWNpZmljYWxseSBmb3IgdGhlIEFtYW5kYSBwcm90b2NvbC4gU28sIHdoZW4gY29ubnRyYWNrIGdldHMgYSBVRFAgcGFja2V0IHRoYXQgbWF0Y2hlcyB0aGUgaGVscGVyJ3MgcmVnaXN0ZXJlZCBwb3J0IOKAkyB3aGljaCwgYnkgZGVmYXVsdCwgaXMgMTAwODAsIG9yIGNvdWxkIGJlIGNvbmZpZ3VyZWQgdmlhIHRoZSBtb2R1bGUgcGFyYW1ldGVycyBvciBDVCBoZWxwZXIgcnVsZXMg4oCTIHRoZSBgYW1hbmRhX2hlbHBgIGZ1bmN0aW9uIGlzIGludm9rZWQuIEdvb2QuIEFsc28sIEkga25vdyB0aGF0IHBhY2tldCBpbmplY3Rpb24gYW5kIG5ldGZpbHRlciB0ZXN0aW5nIGluIHN5emthbGxlciByZWd1bGFybHkgZXhlcmNpc2VzIG5ldGZpbHRlciBjb25udHJhY2sgaGVscGVycyB1c2luZyBsb29wYmFjaywgdHVuLCB0YXAgaW50ZXJmYWNlcywgb3IgdmlhIG5mdGFibGVzL2lwdGFibGVzIENUIGhlbHBlciB0YXJnZXRzLlxuXG5Ob3csIHRoaXMgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIHdheSB0aGUgcG9ydCBpcyBwYXJzZWQuIFByZXZpb3VzbHksIHRoZSBjb2RlIHdhcyBsaWtlIHRoaXM6IGBwb3J0ID0gaHRvbnMoc2ltcGxlX3N0cnRvdWwocGJ1ZiwgXHUwMDI2dG1wLCAxMCkpO2AuIEVzc2VudGlhbGx5LCB0aGUgYGh0b25zKClgIGZ1bmN0aW9uIHdhcyBiZWluZyBjYWxsZWQgb24gYW4gYHVuc2lnbmVkIGxvbmdgIHJlc3VsdCBmcm9tIGBzaW1wbGVfc3RydG91bGAuIFRoZSBgcG9ydGAgdmFyaWFibGUgaXRzZWxmIHdhcyBhIGBfX2JlMTZgLiBUaGlzIG1lYW50IHRoYXQgaWYgYHNpbXBsZV9zdHJ0b3VsYCByZXR1cm5lZCBzb21ldGhpbmcgbGlrZSA2NTUzNiBvciAxMzEwNzIsIHRoZSBgcG9ydCA9PSAwYCBjaGVjayAqbWlnaHQqIGZhaWwsIG9yIHBhc3MgdW5leHBlY3RlZGx5LiBgaHRvbnNgIHdhcyB0cnVuY2F0aW5nIG9yIGNvbnZlcnRpbmcgdGhlIHZhbHVlLCBhbmQgdGhlcmUgd2FzIG5vIGNoZWNrIHRvIGVuc3VyZSB0aGUgcmVzdWx0IGRpZG4ndCBleGNlZWQgdGhlIG1heCB2YWx1ZS5cblxuU3BlY2lmaWNhbGx5LCBpZiBgc2ltcGxlX3N0cnRvdWxgIHBhcnNlZCBhIG51bWJlciBncmVhdGVyIHRoYW4gNjU1MzUsIGBodG9uc2Agd291bGQgc2ltcGx5IHRydW5jYXRlIGl0IHRvIDE2IGJpdHMuIE5vdywgdGhlIGZpeCBtYWtlcyB0aGluZ3MgbXVjaCBtb3JlIHJvYnVzdC4gSXQgc3RvcmVzIHRoZSByZXN1bHQgb2YgYHNpbXBsZV9zdHJ0b3VsYCBpbnRvIGB0bXBfcG9ydGAsIHdoaWNoIGlzIGFuIGB1bnNpZ25lZCBsb25nYC4gVGhlbiBpdCBjaGVja3MgZm9yIGB0bXBfcG9ydCA9PSAwIHx8IHRtcF9wb3J0IFx1MDAzZSA2NTUzNSB8fCBsZW4gXHUwMDNlIDVgLCBhbmQgKnRoZW4qIGFzc2lnbnMgYHBvcnQgPSBodG9ucyh0bXBfcG9ydClgLiBTbWFydC5cblxuVGhpcyBpcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCByaWdodCBpbiBjb3JlIG5ldHdvcmtpbmcsIGRlZXAgd2l0aGluIG5ldGZpbHRlci4gSG1tLCBpcyB0aGlzIHNvbWV0aGluZyB0aGF0J3Mgd29ydGggZnV6emluZz8gWWVzLCBJJ2Qgc2F5IHNvLiBgV29ydGhGdXp6aW5nPXRydWVgLlxuXG5MZXQncyBxdWlja2x5IGNoZWNrIHRoZSBgRm9jdXNTeW1ib2xzYC4gVGhlIG1vZGlmaWVkIGZ1bmN0aW9uIGlzIGBhbWFuZGFfaGVscGAuIE5vdyBsZXQncyBzZWUgaWYgdGhlcmUgYXJlIG90aGVyIGludGVyZXN0aW5nIGZ1bmN0aW9ucyBpbiBgbmZfY29ubnRyYWNrX2FtYW5kYS5jYCB0aGF0IGFyZSB3b3J0aCBteSBhdHRlbnRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY4OTAsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MjAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNDozMDozNC4wNDA4Mjg0NjFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MDAyMzMyNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeW2EtekEtWl9dLipcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuYz0yNT1zdGF0aWMgY2hhciAqdHNfYWxnbyA9IFxcXCJrbXBcXFwiO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmMtMjgtXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmM6Mjk6TU9EVUxFX0FVVEhPUihcXFwiQnJpYW4gSi4gTXVycmVsbCBcXHUwMDNjbmV0ZmlsdGVyQGludGVybGlueC5iYy5jYVxcdTAwM2VcXFwiKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuYzozMDpNT0RVTEVfREVTQ1JJUFRJT04oXFxcIkFtYW5kYSBjb25uZWN0aW9uIHRyYWNraW5nIG1vZHVsZVxcXCIpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jOjMxOk1PRFVMRV9MSUNFTlNFKFxcXCJHUExcXFwiKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuYzozMjpNT0RVTEVfQUxJQVMoXFxcImlwX2Nvbm50cmFja19hbWFuZGFcXFwiKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuYzozMzpNT0RVTEVfQUxJQVNfTkZDVF9IRUxQRVIoSEVMUEVSX05BTUUpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jLTM0LVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jOjM1Om1vZHVsZV9wYXJhbShtYXN0ZXJfdGltZW91dCwgdWludCwgMDYwMCk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmM6MzY6TU9EVUxFX1BBUk1fREVTQyhtYXN0ZXJfdGltZW91dCwgXFxcInRpbWVvdXQgZm9yIHRoZSBtYXN0ZXIgY29ubmVjdGlvblxcXCIpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jOjM3Om1vZHVsZV9wYXJhbSh0c19hbGdvLCBjaGFycCwgMDQwMCk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmM6Mzg6TU9EVUxFX1BBUk1fREVTQyh0c19hbGdvLCBcXFwidGV4dHNlYXJjaCBhbGdvcml0aG0gdG8gdXNlIChkZWZhdWx0IGttcClcXFwiKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuYy0zOS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuYz00MD1uZl9uYXRfYW1hbmRhX2hvb2tfZm4gX19yY3UgKm5mX25hdF9hbWFuZGFfaG9vayBfX3JlYWRfbW9zdGx5O1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jOjQxOkVYUE9SVF9TWU1CT0xfR1BMKG5mX25hdF9hbWFuZGFfaG9vayk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmMtNDItXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuYz01Mj1zdGF0aWMgc3RydWN0IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jLTgyLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jOjgzOnN0YXRpYyBpbnQgYW1hbmRhX2hlbHAoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuYy04NC1cXHRcXHQgICAgICAgdW5zaWduZWQgaW50IHByb3RvZmYsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuYz0xNzU9c3RhdGljIHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICphbWFuZGFfaGVscGVyX3B0clsyXSBfX3JlYWRfbW9zdGx5O1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jLTE3Ni1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuYzoxNzc6c3RhdGljIHZvaWQgX19leGl0IG5mX2Nvbm50cmFja19hbWFuZGFfZmluaSh2b2lkKVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jLTE3OC17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuYy0xODYtXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmM6MTg3OnN0YXRpYyBpbnQgX19pbml0IG5mX2Nvbm50cmFja19hbWFuZGFfaW5pdCh2b2lkKVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jLTE4OC17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuYy0yMjMtXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmM6MjI0Om1vZHVsZV9pbml0KG5mX2Nvbm50cmFja19hbWFuZGFfaW5pdCk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmM6MjI1Om1vZHVsZV9leGl0KG5mX2Nvbm50cmFja19hbWFuZGFfZmluaSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA0OjMwOjM0LjE4MDg1NzIyOFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNDE2Mjg1OTAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEFtYW5kYSBDb25udHJhY2sgSGVscGVyIE1vZGlmaWNhdGlvbioqXG5cbk9rYXksIHNvIEknbSBmb2N1c2luZyBvbiBgYW1hbmRhX2hlbHBgIOKAkyB0aGF0J3MgdGhlIGNvcmUgZnVuY3Rpb24gdGhpcyBwYXRjaCB0b3VjaGVzLiBCZWZvcmUgSSBnZXQgaW50byB0aGUgZGV0YWlscywgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgZW52aXJvbm1lbnQgaXMgc2V0IHVwIGNvcnJlY3RseS4gTGV0J3MgdmVyaWZ5IHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMuIEkgc2VlIHRoYXQgYENPTkZJR19ORl9DT05OVFJBQ0tfQU1BTkRBYCwgYENPTkZJR19ORl9DT05OVFJBQ0tgLCBgQ09ORklHX05FVEZJTFRFUmAsIGFuZCBgQ09ORklHX0lORVRgIGFyZSBlc3NlbnRpYWwuIEp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJ2xsIHRha2UgYSBxdWljayBsb29rIGF0IGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IGhpZGRlbiBkZXBlbmRlbmNpZXMuXG5cbkFoLCB5ZXMuIEFzIGV4cGVjdGVkLCBgTkZfQ09OTlRSQUNLX0FNQU5EQWAgZGVwZW5kcyBvbiBgTkVURklMVEVSX0FEVkFOQ0VEYCwgYW5kIGluIHR1cm4sIHJlcXVpcmVzIGBORVRGSUxURVJgIGFuZCBgSU5FVGAgdG8gYmUgY29ycmVjdGx5IHByZXNlbnRlZCBpbiB0aGUgbWVudS4gQWxzbywgaXQgc2VsZWN0cyBgVEVYVFNFQVJDSGAgYW5kIGBURVhUU0VBUkNIX0tNUGAgZm9yIGdvb2QgbWVhc3VyZS4gU28sIHRoZSBiYXNlIGNvbmZpZ3MgSSBpZGVudGlmaWVkIGFyZSB0aGUga2V5IG9uZXM6IGBORl9DT05OVFJBQ0tfQU1BTkRBYCwgYE5GX0NPTk5UUkFDS2AsIGFuZCBgTkVURklMVEVSYC4gVGhhdCdzIHN0YW5kYXJkIHN0dWZmLlxuXG5Ob3csIGxldCdzIG5haWwgZG93biB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGBzZXQtcmVzdWx0c2AgY2FsbC4gSSBjYW4gc2VlIHRoZSBwYXJhbWV0ZXJzIGNsZWFybHk6IGBXb3J0aEZ1enppbmdgIHNldCB0byBgdHJ1ZWAsIHRoZSBgRm9jdXNTeW1ib2xzYCBiZWluZyBjb3JyZWN0bHkgc2V0IHRvIGBbXCJhbWFuZGFfaGVscFwiXWAsIGFuZCBgRW5hYmxlQ29uZmlnc2Agc2V0IHRvIGBbXCJORl9DT05OVFJBQ0tfQU1BTkRBXCIsIFwiTkZfQ09OTlRSQUNLXCIsIFwiTkVURklMVEVSXCJdYC4gUGVyZmVjdC4gVGhlIHJlYXNvbmluZyBpcyBjbGVhcjogdGhpcyBwYXRjaCBpcyBhYm91dCBmaXhpbmcgcG9ydCB2YWxpZGF0aW9uIGluIHRoZSBBbWFuZGEgY29ubnRyYWNrIGhlbHBlciAoYGFtYW5kYV9oZWxwYCkgd2l0aGluIGBuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuY2AsIHNwZWNpZmljYWxseSB0byBhdm9pZCBpbnRlZ2VyIHRydW5jYXRpb24gYW5kIHByb3Blcmx5IHZhbGlkYXRlIHBvcnQgbnVtYmVycyBwYXJzZWQgZnJvbSBwYWNrZXQgcGF5bG9hZHMuIFRoYXQgY29kZSBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZSB3aGVuIGhhbmRsaW5nIG5ldHdvcmsgcGFja2V0cyB3aXRoIEFtYW5kYSBjb25uZWN0aW9uIHRyYWNraW5nIGVuYWJsZWQuXG5cblllcCwgZXZlcnl0aGluZyBjaGVja3Mgb3V0LiBJJ20gc2F0aXNmaWVkLiBMZXQncyBnbyBhaGVhZCBhbmQgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4ODIwLCJPdXRwdXRUb2tlbnMiOjEwOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNDozMDozNy41OTcxNDU2MloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NjA3MTY0NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZfQ09OTlRSQUNLX0FNQU5EQVwiLFxuICAgIFwiTkZfQ09OTlRSQUNLXCIsXG4gICAgXCJORVRGSUxURVJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhbWFuZGFfaGVscFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHBvcnQgcGFyc2luZyBhbmQgYm91bmRzIHZhbGlkYXRpb24gbG9naWMgaW4gdGhlIEFtYW5kYSBjb25udHJhY2sgaGVscGVyIChhbWFuZGFfaGVscCkgdG8gY29ycmVjdGx5IHJlamVjdCBwb3J0IHZhbHVlcyBncmVhdGVyIHRoYW4gNjU1MzUgYW5kIHByZXZlbnQgdHJ1bmNhdGlvbiBiZWZvcmUgcmFuZ2UgY2hlY2tpbmcuIFRoaXMgaXMgcmVhY2hhYmxlIG5ldHdvcmtpbmcgY29kZSBpbiBOZXRmaWx0ZXIuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZfQ09OTlRSQUNLX0FNQU5EQVwiLFxuICAgIFwiTkZfQ09OTlRSQUNLXCIsXG4gICAgXCJORVRGSUxURVJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhbWFuZGFfaGVscFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHBvcnQgcGFyc2luZyBhbmQgYm91bmRzIHZhbGlkYXRpb24gbG9naWMgaW4gdGhlIEFtYW5kYSBjb25udHJhY2sgaGVscGVyIChhbWFuZGFfaGVscCkgdG8gY29ycmVjdGx5IHJlamVjdCBwb3J0IHZhbHVlcyBncmVhdGVyIHRoYW4gNjU1MzUgYW5kIHByZXZlbnQgdHJ1bmNhdGlvbiBiZWZvcmUgcmFuZ2UgY2hlY2tpbmcuIFRoaXMgaXMgcmVhY2hhYmxlIG5ldHdvcmtpbmcgY29kZSBpbiBOZXRmaWx0ZXIuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA0OjMwOjM3Ljc1MzIyNzMyNFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAwNDQ1MTg3MjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNDozMDozNy43NTQwNDU5MTVaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxMDA0MzY5MzU3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gaW50ZWdlciByYW5nZSB2YWxpZGF0aW9uIGlzc3VlIGluIHRoZSBBbWFuZGEgY29ubnRyYWNrIGhlbHBlciAoYGFtYW5kYV9oZWxwYCkgYnkgcHJvcGVybHkgY2hlY2tpbmcgdGhhdCB0aGUgcGFyc2VkIHBvcnQgbnVtYmVyIGRvZXMgbm90IGV4Y2VlZCA2NTUzNSBiZWZvcmUgY2FzdGluZy9jb252ZXJ0aW5nIGl0IHdpdGggYGh0b25zKClgLlxcblxcbkFsbCBtb2RpZmllZCBhbmQgc3Vycm91bmRpbmcgdmFyaWFibGVzIChgdG1wX3BvcnRgLCBgcG9ydGAsIGBsZW5gLCBgcGJ1ZmApIGFyZSBzdHJpY3RseSBpbml0aWFsaXplZCBhbmQgZGV0ZXJtaW5pc3RpYy4gTm8gaGVhcC9zdGFjayBzdHJ1Y3R1cmVzIGFyZSBsZWFrZWQgdG8gdXNlciBzcGFjZSwgbm8gY29uZGl0aW9uYWwgYnJhbmNoZXMgcmVseSBvbiB1bmluaXRpYWxpemVkIHN0YXRlLCBhbmQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzZXMgYXJlIGludHJvZHVjZWQgb3IgZXhwb3NlZC4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDBiMGRiYmEzMjYyMGY3ZjliNjg5NjMzYjNiMjczMDMzZWM5ZmRjNGJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCA3IDA0OjMwOjE2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuY1xuaW5kZXggMTRhZTY2MDQ5MWYzNi4uMDU3Y2VmN2UyYTdlZCAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuY1xuQEAgLTkxLDYgKzkxLDcgQEAgc3RhdGljIGludCBhbWFuZGFfaGVscChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0Y2hhciBwYnVmW3NpemVvZihcIjY1NTM1XCIpXSwgKnRtcDtcbiBcdHUxNiBsZW47XG4gXHRfX2JlMTYgcG9ydDtcbitcdHVuc2lnbmVkIGxvbmcgdG1wX3BvcnQ7XG4gXHRpbnQgcmV0ID0gTkZfQUNDRVBUO1xuIFx0bmZfbmF0X2FtYW5kYV9ob29rX2ZuICpuZl9uYXRfYW1hbmRhO1xuIFxuQEAgLTEzMiwxMCArMTMzLDExIEBAIHN0YXRpYyBpbnQgYW1hbmRhX2hlbHAoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHRicmVhaztcbiBcdFx0cGJ1ZltsZW5dID0gJ1xcMCc7XG4gXG4tXHRcdHBvcnQgPSBodG9ucyhzaW1wbGVfc3RydG91bChwYnVmLCBcdTAwMjZ0bXAsIDEwKSk7XG4rXHRcdHRtcF9wb3J0ID0gc2ltcGxlX3N0cnRvdWwocGJ1ZiwgXHUwMDI2dG1wLCAxMCk7XG4gXHRcdGxlbiA9IHRtcCAtIHBidWY7XG4tXHRcdGlmIChwb3J0ID09IDAgfHwgbGVuIFx1MDAzZSA1KVxuK1x0XHRpZiAodG1wX3BvcnQgPT0gMCB8fCB0bXBfcG9ydCBcdTAwM2UgNjU1MzUgfHwgbGVuIFx1MDAzZSA1KVxuIFx0XHRcdGJyZWFrO1xuK1x0XHRwb3J0ID0gaHRvbnModG1wX3BvcnQpO1xuIFxuIFx0XHRleHAgPSBuZl9jdF9leHBlY3RfYWxsb2MoY3QpO1xuIFx0XHRpZiAoZXhwID09IE5VTEwpIHtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA0OjMwOjM3Ljc1NDA0ODE2NFoiLCJTZXEiOjE2LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozODc4NjQ4NzY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGNyYWZ0ZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGl2aW5nIGludG8gdGhlIEFtYW5kYSBDb25udHJhY2sgTW9kdWxlKipcblxuUmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGNoYW5nZS4gVGhlIGZpcnN0IHRoaW5nIEknbSBnb2luZyB0byBkbyBpcyBnZXQgbXkgZXllcyBvbiB0aGUgZGlmZi4gSSdsbCByZWFkIHRoZSBgbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmNgIGNvZGUgdG8gc2VlIHRoZSBiZWZvcmUgYW5kIGFmdGVyLiBNeSBnb2FsIGlzIHRvIGdyYXNwIHRoZSBtb2RpZmljYXRpb24ncyBpbXBhY3Qgd2l0aGluIHRoYXQgY29udGV4dC4gSSB3YW50IHRvIHJlYWQgdGhlIHN1cnJvdW5kaW5nIGxpbmVzIHRvIHVuZGVyc3RhbmQgdGhlIHB1cnBvc2Ugb2YgdGhlIGNvZGUgYW5kIHRoZSBsb2NhdGlvbiBvZiB0aGUgZWRpdC4gSSdsbCB1c2UgYHJlYWQtZmlsZWAgdG8gZ3JhYiB0aGUgZmlsZSBhbmQgYmVnaW4gYW5hbHl6aW5nIGl0LiBUaW1lIHRvIGRpZyBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI4MCwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDQ6MzA6NDEuNjMyNzAwNDQxWiIsIlNlcSI6MTcsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNTg2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4MCxcbiAgXCJMaW5lQ291bnRcIjogODVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA4MDpcXHRcXHR9LFxcbiAgODE6XFx0fTtcXG4gIDgyOlxcdFxcbiAgODM6XFx0c3RhdGljIGludCBhbWFuZGFfaGVscChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiAgODQ6XFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGludCBwcm90b2ZmLFxcbiAgODU6XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBuZl9jb25uICpjdCxcXG4gIDg2OlxcdFxcdFxcdCAgICAgICBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbylcXG4gIDg3OlxcdHtcXG4gIDg4OlxcdFxcdHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHA7XFxuICA4OTpcXHRcXHRzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZTtcXG4gIDkwOlxcdFxcdHVuc2lnbmVkIGludCBkYXRhb2ZmLCBzdGFydCwgc3RvcCwgb2ZmLCBpO1xcbiAgOTE6XFx0XFx0Y2hhciBwYnVmW3NpemVvZihcXFwiNjU1MzVcXFwiKV0sICp0bXA7XFxuICA5MjpcXHRcXHR1MTYgbGVuO1xcbiAgOTM6XFx0XFx0X19iZTE2IHBvcnQ7XFxuICA5NDpcXHRcXHR1bnNpZ25lZCBsb25nIHRtcF9wb3J0O1xcbiAgOTU6XFx0XFx0aW50IHJldCA9IE5GX0FDQ0VQVDtcXG4gIDk2OlxcdFxcdG5mX25hdF9hbWFuZGFfaG9va19mbiAqbmZfbmF0X2FtYW5kYTtcXG4gIDk3OlxcdFxcbiAgOTg6XFx0XFx0LyogT25seSBsb29rIGF0IHBhY2tldHMgZnJvbSB0aGUgQW1hbmRhIHNlcnZlciAqL1xcbiAgOTk6XFx0XFx0aWYgKENUSU5GTzJESVIoY3RpbmZvKSA9PSBJUF9DVF9ESVJfT1JJR0lOQUwpXFxuIDEwMDpcXHRcXHRcXHRyZXR1cm4gTkZfQUNDRVBUO1xcbiAxMDE6XFx0XFxuIDEwMjpcXHRcXHQvKiBpbmNyZWFzZSB0aGUgVURQIHRpbWVvdXQgb2YgdGhlIG1hc3RlciBjb25uZWN0aW9uIGFzIHJlcGxpZXMgZnJvbVxcbiAxMDM6XFx0XFx0ICogQW1hbmRhIGNsaWVudHMgdG8gdGhlIHNlcnZlciBjYW4gYmUgcXVpdGUgZGVsYXllZCAqL1xcbiAxMDQ6XFx0XFx0bmZfY3RfcmVmcmVzaChjdCwgbWFzdGVyX3RpbWVvdXQgKiBIWik7XFxuIDEwNTpcXHRcXG4gMTA2OlxcdFxcdC8qIE5vIGRhdGE/ICovXFxuIDEwNzpcXHRcXHRkYXRhb2ZmID0gcHJvdG9mZiArIHNpemVvZihzdHJ1Y3QgdWRwaGRyKTtcXG4gMTA4OlxcdFxcdGlmIChkYXRhb2ZmIFxcdTAwM2U9IHNrYi1cXHUwMDNlbGVuKSB7XFxuIDEwOTpcXHRcXHRcXHRuZXRfZXJyX3JhdGVsaW1pdGVkKFxcXCJhbWFuZGFfaGVscDogc2tibGVuID0gJXVcXFxcblxcXCIsIHNrYi1cXHUwMDNlbGVuKTtcXG4gMTEwOlxcdFxcdFxcdHJldHVybiBORl9BQ0NFUFQ7XFxuIDExMTpcXHRcXHR9XFxuIDExMjpcXHRcXG4gMTEzOlxcdFxcdHN0YXJ0ID0gc2tiX2ZpbmRfdGV4dChza2IsIGRhdGFvZmYsIHNrYi1cXHUwMDNlbGVuLFxcbiAxMTQ6XFx0XFx0XFx0XFx0ICAgICAgc2VhcmNoW1NFQVJDSF9DT05ORUNUXS50cyk7XFxuIDExNTpcXHRcXHRpZiAoc3RhcnQgPT0gVUlOVF9NQVgpXFxuIDExNjpcXHRcXHRcXHRnb3RvIG91dDtcXG4gMTE3OlxcdFxcdHN0YXJ0ICs9IGRhdGFvZmYgKyBzZWFyY2hbU0VBUkNIX0NPTk5FQ1RdLmxlbjtcXG4gMTE4OlxcdFxcbiAxMTk6XFx0XFx0c3RvcCA9IHNrYl9maW5kX3RleHQoc2tiLCBzdGFydCwgc2tiLVxcdTAwM2VsZW4sXFxuIDEyMDpcXHRcXHRcXHRcXHQgICAgIHNlYXJjaFtTRUFSQ0hfTkVXTElORV0udHMpO1xcbiAxMjE6XFx0XFx0aWYgKHN0b3AgPT0gVUlOVF9NQVgpXFxuIDEyMjpcXHRcXHRcXHRnb3RvIG91dDtcXG4gMTIzOlxcdFxcdHN0b3AgKz0gc3RhcnQ7XFxuIDEyNDpcXHRcXG4gMTI1OlxcdFxcdGZvciAoaSA9IFNFQVJDSF9EQVRBOyBpIFxcdTAwM2M9IFNFQVJDSF9TVEFURTsgaSsrKSB7XFxuIDEyNjpcXHRcXHRcXHRvZmYgPSBza2JfZmluZF90ZXh0KHNrYiwgc3RhcnQsIHN0b3AsIHNlYXJjaFtpXS50cyk7XFxuIDEyNzpcXHRcXHRcXHRpZiAob2ZmID09IFVJTlRfTUFYKVxcbiAxMjg6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDEyOTpcXHRcXHRcXHRvZmYgKz0gc3RhcnQgKyBzZWFyY2hbaV0ubGVuO1xcbiAxMzA6XFx0XFxuIDEzMTpcXHRcXHRcXHRsZW4gPSBtaW5fdCh1bnNpZ25lZCBpbnQsIHNpemVvZihwYnVmKSAtIDEsIHN0b3AgLSBvZmYpO1xcbiAxMzI6XFx0XFx0XFx0aWYgKHNrYl9jb3B5X2JpdHMoc2tiLCBvZmYsIHBidWYsIGxlbikpXFxuIDEzMzpcXHRcXHRcXHRcXHRicmVhaztcXG4gMTM0OlxcdFxcdFxcdHBidWZbbGVuXSA9ICdcXFxcMCc7XFxuIDEzNTpcXHRcXG4gMTM2OlxcdFxcdFxcdHRtcF9wb3J0ID0gc2ltcGxlX3N0cnRvdWwocGJ1ZiwgXFx1MDAyNnRtcCwgMTApO1xcbiAxMzc6XFx0XFx0XFx0bGVuID0gdG1wIC0gcGJ1ZjtcXG4gMTM4OlxcdFxcdFxcdGlmICh0bXBfcG9ydCA9PSAwIHx8IHRtcF9wb3J0IFxcdTAwM2UgNjU1MzUgfHwgbGVuIFxcdTAwM2UgNSlcXG4gMTM5OlxcdFxcdFxcdFxcdGJyZWFrO1xcbiAxNDA6XFx0XFx0XFx0cG9ydCA9IGh0b25zKHRtcF9wb3J0KTtcXG4gMTQxOlxcdFxcbiAxNDI6XFx0XFx0XFx0ZXhwID0gbmZfY3RfZXhwZWN0X2FsbG9jKGN0KTtcXG4gMTQzOlxcdFxcdFxcdGlmIChleHAgPT0gTlVMTCkge1xcbiAxNDQ6XFx0XFx0XFx0XFx0bmZfY3RfaGVscGVyX2xvZyhza2IsIGN0LCBcXFwiY2Fubm90IGFsbG9jIGV4cGVjdGF0aW9uXFxcIik7XFxuIDE0NTpcXHRcXHRcXHRcXHRyZXQgPSBORl9EUk9QO1xcbiAxNDY6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuIDE0NzpcXHRcXHRcXHR9XFxuIDE0ODpcXHRcXHRcXHR0dXBsZSA9IFxcdTAwMjZjdC1cXHUwMDNldHVwbGVoYXNoW0lQX0NUX0RJUl9PUklHSU5BTF0udHVwbGU7XFxuIDE0OTpcXHRcXHRcXHRuZl9jdF9leHBlY3RfaW5pdChleHAsIE5GX0NUX0VYUEVDVF9DTEFTU19ERUZBVUxULFxcbiAxNTA6XFx0XFx0XFx0XFx0XFx0ICBuZl9jdF9sM251bShjdCksXFxuIDE1MTpcXHRcXHRcXHRcXHRcXHQgIFxcdTAwMjZ0dXBsZS1cXHUwMDNlc3JjLnUzLCBcXHUwMDI2dHVwbGUtXFx1MDAzZWRzdC51MyxcXG4gMTUyOlxcdFxcdFxcdFxcdFxcdCAgSVBQUk9UT19UQ1AsIE5VTEwsIFxcdTAwMjZwb3J0KTtcXG4gMTUzOlxcdFxcbiAxNTQ6XFx0XFx0XFx0bmZfbmF0X2FtYW5kYSA9IHJjdV9kZXJlZmVyZW5jZShuZl9uYXRfYW1hbmRhX2hvb2spO1xcbiAxNTU6XFx0XFx0XFx0aWYgKG5mX25hdF9hbWFuZGEgXFx1MDAyNlxcdTAwMjYgY3QtXFx1MDAzZXN0YXR1cyBcXHUwMDI2IElQU19OQVRfTUFTSylcXG4gMTU2OlxcdFxcdFxcdFxcdHJldCA9IG5mX25hdF9hbWFuZGEoc2tiLCBjdCwgY3RpbmZvLCBwcm90b2ZmLFxcbiAxNTc6XFx0XFx0XFx0XFx0XFx0XFx0ICAgIG9mZiAtIGRhdGFvZmYsIGxlbiwgZXhwKTtcXG4gMTU4OlxcdFxcdFxcdGVsc2UgaWYgKG5mX2N0X2V4cGVjdF9yZWxhdGVkKGV4cCwgMCkgIT0gMCkge1xcbiAxNTk6XFx0XFx0XFx0XFx0bmZfY3RfaGVscGVyX2xvZyhza2IsIGN0LCBcXFwiY2Fubm90IGFkZCBleHBlY3RhdGlvblxcXCIpO1xcbiAxNjA6XFx0XFx0XFx0XFx0cmV0ID0gTkZfRFJPUDtcXG4gMTYxOlxcdFxcdFxcdH1cXG4gMTYyOlxcdFxcdFxcdG5mX2N0X2V4cGVjdF9wdXQoZXhwKTtcXG4gMTYzOlxcdFxcdH1cXG4gMTY0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNDozMDo0MS42MzI4Mjg5OTJaIiwiU2VxIjoxOCwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjE2NDg4NDU2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEFtYW5kYSBDb25udHJhY2sgSGVscGVyIFBvcnQgVmFsaWRhdGlvbiBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGFuYWx5emUgdGhlIGNoYW5nZXMgdG8gdGhlIHBvcnQgbnVtYmVyIGhhbmRsaW5nIGxvZ2ljLiBQcmV2aW91c2x5LCB0aGUgY29kZSB1c2VkIGBzaW1wbGVfc3RydG91bGAgdG8gY29udmVydCBhIHN0cmluZyBgcGJ1ZmAgdG8gYW4gdW5zaWduZWQgbG9uZyBhbmQgdGhlbiB1c2VkIGBodG9uc2AgdG8gY29udmVydCBpdCB0byBhIG5ldHdvcmsgYnl0ZSBvcmRlciBzaG9ydCwgYXNzaWduaW5nIGl0IHRvIGBwb3J0YC4gVGhlIHByb2JsZW0gbGllcyBpbiB0aGUgZmFjdCB0aGF0IGBodG9uc2AgZWZmZWN0aXZlbHkgdHJ1bmNhdGVzIHRoZSBgdW5zaWduZWQgbG9uZ2AgaW5wdXQgdG8gYSBgdTE2YCBiZWZvcmUgYnl0ZS1zd2FwcGluZy4gVGhpcyBtZWFucyB0aGF0IGlmIGBzaW1wbGVfc3RydG91bGAgcmV0dXJucyBhIHZhbHVlIGxhcmdlciB0aGFuIDY1NTM1LCBsaWtlIFwiOTk5OTlcIiwgdGhlIGNvZGUgY291bGQgcG90ZW50aWFsbHkgdHJ1bmNhdGUgdG8gemVybyAoaWYgdGhlIHRydW5jYXRlZCB2YWx1ZSBpcyB6ZXJvKSBvciBhIG5vbi16ZXJvIHZhbHVlIGFmdGVyIGJlaW5nIGJpdC1tYXNrZWQgd2l0aCAweGZmZmYgYnkgYGh0b25zYCwgd2hpY2ggY291bGQgbGVhZCB0byBhbiBpbmNvcnJlY3QgcG9ydCBhc3NpZ25tZW50LiBDcml0aWNhbGx5LCB0aGUgb3JpZ2luYWwgY29kZSBvbmx5IHZhbGlkYXRlZCB0aGUgbGVuZ3RoIG9mIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24sIGJ1dCBub3QgdGhlIG51bWVyaWNhbCB2YWx1ZSBpdCByZXByZXNlbnRlZCwgbGVhZGluZyB0byB0aGlzIG92ZXJmbG93IHZ1bG5lcmFiaWxpdHkuXG5cblRoaXMgcGF0Y2ggYWRkcmVzc2VzIHRoaXMgaXNzdWUgZGlyZWN0bHkuIEl0IGludHJvZHVjZXMgYSB0ZW1wb3JhcnkgdmFyaWFibGUsIGB0bXBfcG9ydGAsIHRvIGhvbGQgdGhlIHZhbHVlIHJldHVybmVkIGJ5IGBzaW1wbGVfc3RydG91bGAuIFRoaXMgaXMgY3J1Y2lhbC4gSXQgdmFsaWRhdGVzIHRoZSBwb3J0IG51bWJlciwgbm93IGVuc3VyaW5nIGl0IGlzIGJldHdlZW4gMCBhbmQgNjU1MzUsIGJlZm9yZSBjb252ZXJ0aW5nIHRvIG5ldHdvcmsgYnl0ZSBvcmRlciB1c2luZyBgaHRvbnNgLiBUaGlzIGlzIGEgbXVjaCBiZXR0ZXIgYXBwcm9hY2guXG5cbk5vdywgbGV0J3MgY29uc2lkZXIgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBJJ3ZlIGV4YW1pbmVkIHRoZSB2YXJpYWJsZXMgaW52b2x2ZWQsIGFuZCBJJ20gY29uZmlkZW50IHRoZXJlIGFyZSBubyBzdWNoIHJpc2tzLiBgdG1wX3BvcnRgIGlzIGRpcmVjdGx5IGluaXRpYWxpemVkIGJ5IGBzaW1wbGVfc3RydG91bGAuIFRoZSBgcG9ydGAgaXMgYWxzbyBpbml0aWFsaXplZCBkaXJlY3RseS4gVGhlIGlucHV0IGJ1ZmZlciBgcGJ1ZmAgaXMgcG9wdWxhdGVkIGJ5IGBza2JfY29weV9iaXRzYCwgYW5kIG51bGwtdGVybWluYXRlZC4gRXZlcnl0aGluZyBzZWVtcyB0byBiZSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLiBObyB1bmluaXRpYWxpemVkIGRhdGEgaXMgYmVpbmcgYnJhbmNoZWQgb24gb3IgdXNlZCwgYW5kIG5vdGhpbmcgdW5pbml0aWFsaXplZCBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZS5cblxuVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGRlZmluaXRlbHkgZG9lcyAqbm90KiBqdXN0aWZ5IGEgS01TQU4gc2Vzc2lvbi4gS01TQU4gaXMgZm9yIGRldGVjdGluZyByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSwgd2hpY2ggaXMgY2xlYXJseSBub3QgdGhlIGNhc2UgaGVyZS4gVGhpcyBwYXRjaCBzaW1wbHkgZml4ZXMgYSBwb3J0IG51bWJlciBpbnB1dCB2YWxpZGF0aW9uIGlzc3VlIOKAkyBhbiBpbnRlZ2VyIG92ZXJmbG93LCByZWFsbHkg4oCTIGluIHRoZSBBbWFuZGEgY29ubnRyYWNrIGhlbHBlci5cblxuRmluYWxseSwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGFtIGZvbGxvd2luZyB0aGUgc3RhbmRhcmQgZ3VpZGVsaW5lcy4gYE5lZWRzS01TQU5gIHNob3VsZCBiZSBmYWxzZS4gVGhlIGBLTVNBTlJlYXNvbmluZ2AgZmllbGQgc2hvdWxkIGNsZWFybHkgY29udHJhc3QgS0FTQU4gdmVyc3VzIEtNU0FOIGFwcGxpY2FiaWxpdHksIGJ1dCB0aGF0IGNvbnRyYXN0IGlzIGFscmVhZHkgY2xlYXIgaW4gbXkgYW5hbHlzaXM6IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHRoZSBwdXJ2aWV3IG9mIEtNU0FOLCBhbmQgdGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaW50cm9kdWNlZCBvciBleHBvc2VkIGhlcmUuIFRoZXJlZm9yZSwgbXkgYHNldC1yZXN1bHRzYCBjYWxsIHdpbGwgYmUgYmFzZWQgb24gdGhhdCB1bmRlcnN0YW5kaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTIyLCJPdXRwdXRUb2tlbnMiOjE0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU5MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA0OjMwOjQ3Ljc5NzcxNjI4MloiLCJTZXEiOjE5LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5ODUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gaW50ZWdlciByYW5nZSB2YWxpZGF0aW9uIGlzc3VlIGluIHRoZSBBbWFuZGEgY29ubnRyYWNrIGhlbHBlciAoYGFtYW5kYV9oZWxwYCkgYnkgcHJvcGVybHkgY2hlY2tpbmcgdGhhdCB0aGUgcGFyc2VkIHBvcnQgbnVtYmVyIGRvZXMgbm90IGV4Y2VlZCA2NTUzNSBiZWZvcmUgY2FzdGluZy9jb252ZXJ0aW5nIGl0IHdpdGggYGh0b25zKClgLlxcblxcbkFsbCBtb2RpZmllZCBhbmQgc3Vycm91bmRpbmcgdmFyaWFibGVzIChgdG1wX3BvcnRgLCBgcG9ydGAsIGBsZW5gLCBgcGJ1ZmApIGFyZSBzdHJpY3RseSBpbml0aWFsaXplZCBhbmQgZGV0ZXJtaW5pc3RpYy4gTm8gaGVhcC9zdGFjayBzdHJ1Y3R1cmVzIGFyZSBsZWFrZWQgdG8gdXNlciBzcGFjZSwgbm8gY29uZGl0aW9uYWwgYnJhbmNoZXMgcmVseSBvbiB1bmluaXRpYWxpemVkIHN0YXRlLCBhbmQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzZXMgYXJlIGludHJvZHVjZWQgb3IgZXhwb3NlZC4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIGludGVnZXIgcmFuZ2UgdmFsaWRhdGlvbiBpc3N1ZSBpbiB0aGUgQW1hbmRhIGNvbm50cmFjayBoZWxwZXIgKGBhbWFuZGFfaGVscGApIGJ5IHByb3Blcmx5IGNoZWNraW5nIHRoYXQgdGhlIHBhcnNlZCBwb3J0IG51bWJlciBkb2VzIG5vdCBleGNlZWQgNjU1MzUgYmVmb3JlIGNhc3RpbmcvY29udmVydGluZyBpdCB3aXRoIGBodG9ucygpYC5cXG5cXG5BbGwgbW9kaWZpZWQgYW5kIHN1cnJvdW5kaW5nIHZhcmlhYmxlcyAoYHRtcF9wb3J0YCwgYHBvcnRgLCBgbGVuYCwgYHBidWZgKSBhcmUgc3RyaWN0bHkgaW5pdGlhbGl6ZWQgYW5kIGRldGVybWluaXN0aWMuIE5vIGhlYXAvc3RhY2sgc3RydWN0dXJlcyBhcmUgbGVha2VkIHRvIHVzZXIgc3BhY2UsIG5vIGNvbmRpdGlvbmFsIGJyYW5jaGVzIHJlbHkgb24gdW5pbml0aWFsaXplZCBzdGF0ZSwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzc2VzIGFyZSBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflowts465[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-07 03:44:29 +0000 UTC FinishedAt: 2026-09-07 04:30:50 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "nf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git", "commit_hash": "6ebcf5074cff0402730c6981d2397139fee6322d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_CONNTRACK_AMANDA", "NF_CONNTRACK", "NETFILTER" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "nf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git", "commit_hash": "6ebcf5074cff0402730c6981d2397139fee6322d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_CONNTRACK_AMANDA", "NF_CONNTRACK", "NETFILTER" ], "series_id": "64e6daaa-4d14-433a-8f61-ee24f5674c6c" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "amanda_help" ], "corpus_urls": [ "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+CgkJCTx0ZD4yMDI2LzA5LzA3IDA0OjMwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX0NPTk5UUkFDS19BTUFOREEmIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FtYW5kYV9oZWxwJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gaW50ZWdlciByYW5nZSB2YWxpZGF0aW9uIGlzc3VlIGluIHRoZSBBbWFuZGEgY29ubnRyYWNrIGhlbHBlciAoYGFtYW5kYV9oZWxwYCkgYnkgcHJvcGVybHkgY2hlY2tpbmcgdGhhdCB0aGUgcGFyc2VkIHBvcnQgbnVtYmVyIGRvZXMgbm90IGV4Y2VlZCA2NTUzNSBiZWZvcmUgY2FzdGluZy9jb252ZXJ0aW5nIGl0IHdpdGggYGh0b25zKClgLlxuXG5BbGwgbW9kaWZpZWQgYW5kIHN1cnJvdW5kaW5nIHZhcmlhYmxlcyAoYHRtcF9wb3J0YCwgYHBvcnRgLCBgbGVuYCwgYHBidWZgKSBhcmUgc3RyaWN0bHkgaW5pdGlhbGl6ZWQgYW5kIGRldGVybWluaXN0aWMuIE5vIGhlYXAvc3RhY2sgc3RydWN0dXJlcyBhcmUgbGVha2VkIHRvIHVzZXIgc3BhY2UsIG5vIGNvbmRpdGlvbmFsIGJyYW5jaGVzIHJlbHkgb24gdW5pbml0aWFsaXplZCBzdGF0ZSwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzc2VzIGFyZSBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgcG9ydCBwYXJzaW5nIGFuZCBib3VuZHMgdmFsaWRhdGlvbiBsb2dpYyBpbiB0aGUgQW1hbmRhIGNvbm50cmFjayBoZWxwZXIgKGFtYW5kYV9oZWxwKSB0byBjb3JyZWN0bHkgcmVqZWN0IHBvcnQgdmFsdWVzIGdyZWF0ZXIgdGhhbiA2NTUzNSBhbmQgcHJldmVudCB0cnVuY2F0aW9uIGJlZm9yZSByYW5nZSBjaGVja2luZy4gVGhpcyBpcyByZWFjaGFibGUgbmV0d29ya2luZyBjb2RlIGluIE5ldGZpbHRlci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNDozMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDBiMGRiYmEzMjYyMGY3ZjliNjg5NjMzYjNiMjczMDMzZWM5ZmRjNGJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCA3IDA0OjMwOjE2IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmNcbmluZGV4IDE0YWU2NjA0OTFmMzYuLjA1N2NlZjdlMmE3ZWQgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmNcbkBAIC05MSw2ICYjNDM7OTEsNyBAQCBzdGF0aWMgaW50IGFtYW5kYV9oZWxwKHN0cnVjdCBza19idWZmICpza2IsXG4gXHRjaGFyIHBidWZbc2l6ZW9mKFwmIzM0OzY1NTM1XCYjMzQ7KV0sICp0bXA7XG4gXHR1MTYgbGVuO1xuIFx0X19iZTE2IHBvcnQ7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyB0bXBfcG9ydDtcbiBcdGludCByZXQgPSBORl9BQ0NFUFQ7XG4gXHRuZl9uYXRfYW1hbmRhX2hvb2tfZm4gKm5mX25hdF9hbWFuZGE7XG4gXG5AQCAtMTMyLDEwICYjNDM7MTMzLDExIEBAIHN0YXRpYyBpbnQgYW1hbmRhX2hlbHAoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHRicmVhaztcbiBcdFx0cGJ1ZltsZW5dID0gJiMzOTtcXDAmIzM5OztcbiBcbi1cdFx0cG9ydCA9IGh0b25zKHNpbXBsZV9zdHJ0b3VsKHBidWYsIFx1MDAyNnRtcCwgMTApKTtcbiYjNDM7XHRcdHRtcF9wb3J0ID0gc2ltcGxlX3N0cnRvdWwocGJ1ZiwgXHUwMDI2dG1wLCAxMCk7XG4gXHRcdGxlbiA9IHRtcCAtIHBidWY7XG4tXHRcdGlmIChwb3J0ID09IDAgfHwgbGVuIFx1MDAzZSA1KVxuJiM0MztcdFx0aWYgKHRtcF9wb3J0ID09IDAgfHwgdG1wX3BvcnQgXHUwMDNlIDY1NTM1IHx8IGxlbiBcdTAwM2UgNSlcbiBcdFx0XHRicmVhaztcbiYjNDM7XHRcdHBvcnQgPSBodG9ucyh0bXBfcG9ydCk7XG4gXG4gXHRcdGV4cCA9IG5mX2N0X2V4cGVjdF9hbGxvYyhjdCk7XG4gXHRcdGlmIChleHAgPT0gTlVMTCkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA0OjMwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX0NPTk5UUkFDS19BTUFOREEmIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FtYW5kYV9oZWxwJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHBvcnQgcGFyc2luZyBhbmQgYm91bmRzIHZhbGlkYXRpb24gbG9naWMgaW4gdGhlIEFtYW5kYSBjb25udHJhY2sgaGVscGVyIChhbWFuZGFfaGVscCkgdG8gY29ycmVjdGx5IHJlamVjdCBwb3J0IHZhbHVlcyBncmVhdGVyIHRoYW4gNjU1MzUgYW5kIHByZXZlbnQgdHJ1bmNhdGlvbiBiZWZvcmUgcmFuZ2UgY2hlY2tpbmcuIFRoaXMgaXMgcmVhY2hhYmxlIG5ldHdvcmtpbmcgY29kZSBpbiBOZXRmaWx0ZXIuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAwYjBkYmJhMzI2MjBmN2Y5YjY4OTYzM2IzYjI3MzAzM2VjOWZkYzRiCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBTZXAgNyAwNDozMDoxNiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmMKaW5kZXggMTRhZTY2MDQ5MWYzNi4uMDU3Y2VmN2UyYTdlZCAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmMKQEAgLTkxLDYgJiM0Mzs5MSw3IEBAIHN0YXRpYyBpbnQgYW1hbmRhX2hlbHAoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAljaGFyIHBidWZbc2l6ZW9mKCYjMzQ7NjU1MzUmIzM0OyldLCAqdG1wOwogCXUxNiBsZW47CiAJX19iZTE2IHBvcnQ7CiYjNDM7CXVuc2lnbmVkIGxvbmcgdG1wX3BvcnQ7CiAJaW50IHJldCA9IE5GX0FDQ0VQVDsKIAluZl9uYXRfYW1hbmRhX2hvb2tfZm4gKm5mX25hdF9hbWFuZGE7CiAKQEAgLTEzMiwxMCAmIzQzOzEzMywxMSBAQCBzdGF0aWMgaW50IGFtYW5kYV9oZWxwKHN0cnVjdCBza19idWZmICpza2IsCiAJCQlicmVhazsKIAkJcGJ1ZltsZW5dID0gJiMzOTtcMCYjMzk7OwogCi0JCXBvcnQgPSBodG9ucyhzaW1wbGVfc3RydG91bChwYnVmLCAmYW1wO3RtcCwgMTApKTsKJiM0MzsJCXRtcF9wb3J0ID0gc2ltcGxlX3N0cnRvdWwocGJ1ZiwgJmFtcDt0bXAsIDEwKTsKIAkJbGVuID0gdG1wIC0gcGJ1ZjsKLQkJaWYgKHBvcnQgPT0gMCB8fCBsZW4gJmd0OyA1KQomIzQzOwkJaWYgKHRtcF9wb3J0ID09IDAgfHwgdG1wX3BvcnQgJmd0OyA2NTUzNSB8fCBsZW4gJmd0OyA1KQogCQkJYnJlYWs7CiYjNDM7CQlwb3J0ID0gaHRvbnModG1wX3BvcnQpOwogCiAJCWV4cCA9IG5mX2N0X2V4cGVjdF9hbGxvYyhjdCk7CiAJCWlmIChleHAgPT0gTlVMTCkgewo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNDozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDY4CgkJCQkJCQlvdXRwdXQ6IDczCgkJCQkJCQl0aG91Z2h0czogNDQ1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQW1hbmRhIENvbm50cmFjayBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIHRoZSBhc3NvY2lhdGVkIHJldmlldyByZXF1ZXN0LiBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIGRpZmYgbm93IGZvciBgbmZfY29ubnRyYWNrX2FtYW5kYS5jYC4gSG1tLCB0aGUgY2hhbmdlIHNlZW1zIGZvY3VzZWQgb24gdGhlIHBvcnQgaGFuZGxpbmcgd2l0aGluIHRoZSBgYW1hbmRhX2hlbHBgIGZ1bmN0aW9uLiBTcGVjaWZpY2FsbHksIGl0IGxvb2tzIGxpa2UgdGhlcmUmIzM5O3MgYmVlbiBhIHN1YnRsZSBjaGFuZ2UgdG8gaG93IHRoZSBwb3J0IG51bWJlciwgd2hpY2ggaXMgY29taW5nIGluIGFzIGEgc3RyaW5nLCBpcyBjb252ZXJ0ZWQgdG8gYSBgX19iZTE2YCBmb3JtYXQuCgpJbml0aWFsbHksIGl0IHdhcyB1c2luZyBgc2ltcGxlX3N0cnRvdWxgIHRvIGRpcmVjdGx5IGNvbnZlcnQgdGhlIHN0cmluZyB0byBhIGB1MTZgIGJlZm9yZSBjb252ZXJ0aW5nIHRoZSBgdTE2YCB0byBuZXR3b3JrIGJ5dGUgb3JkZXIuIE5vdywgdGhleSYjMzk7dmUgaW50cm9kdWNlZCBhbiBpbnRlcm1lZGlhdGUgYHVuc2lnbmVkIGxvbmdgIHZhcmlhYmxlIGNhbGxlZCBgdG1wX3BvcnRgLiBUaGlzIGlzIGltbWVkaWF0ZWx5IHJhaXNpbmcgYSBmbGFnIOKAkyBjaGVja2luZyB0aGUgbGltaXRzLiBJdCYjMzk7cyBnb29kIHRoZXkgYXJlIHZhbGlkYXRpbmcgYHRtcF9wb3J0YCB0byBiZSBiZXR3ZWVuIGAwYCBhbmQgYDY1NTM1YCBhbmQgdGhhdCB0aGUgbGVuZ3RoIGlzIGFwcHJvcHJpYXRlIGJlZm9yZSBjb252ZXJ0aW5nIGl0IHRvIG5ldHdvcmsgYnl0ZSBvcmRlci4gVGhpcyBpcyBhIHZlcnkgZ29vZCBhZGRpdGlvbiDigJMgcG90ZW50aWFsbHkgZ3VhcmRpbmcgYWdhaW5zdCBvdmVyZmxvd3Mgb3IgdW5leHBlY3RlZCB2YWx1ZXMgdGhhdCBtaWdodCBsZWFkIHRvIHZ1bG5lcmFiaWxpdGllcy4gTG9va3MgZ29vZDsgSSB3b3VsZCBoYXZlIGRvbmUgdGhlIHNhbWUuCgpCZWZvcmUgSSBnaXZlIG15IE9LLCBJIG5lZWQgdG8gY29uZmlybSB0aGUgY2hhbmdlIGlzIHRoZSBjb3JyZWN0IGhhbmRsaW5nLiBJIHdpbGwgY2hlY2sgdGhlIHJlbGF0ZWQgYEtjb25maWdgIGZvciB0aGUgZmlsZSBhbmQgY3Jvc3MgcmVmZXJlbmNlIHdpdGggZ3JlcHBlciBvciBmaWxlIHJlYWQgdG8gbWFrZSBzdXJlIEkgYW0gbm90IG1pc3NpbmcgYW55IGNoYW5nZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDQ6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDkwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgODA6XHRcdH0sXG4gIDgxOlx0fTtcbiAgODI6XHRcbiAgODM6XHRzdGF0aWMgaW50IGFtYW5kYV9oZWxwKHN0cnVjdCBza19idWZmICpza2IsXG4gIDg0Olx0XHRcdCAgICAgICB1bnNpZ25lZCBpbnQgcHJvdG9mZixcbiAgODU6XHRcdFx0ICAgICAgIHN0cnVjdCBuZl9jb25uICpjdCxcbiAgODY6XHRcdFx0ICAgICAgIGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvKVxuICA4NzpcdHtcbiAgODg6XHRcdHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHA7XG4gIDg5Olx0XHRzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZTtcbiAgOTA6XHRcdHVuc2lnbmVkIGludCBkYXRhb2ZmLCBzdGFydCwgc3RvcCwgb2ZmLCBpO1xuICA5MTpcdFx0Y2hhciBwYnVmW3NpemVvZihcJiMzNDs2NTUzNVwmIzM0OyldLCAqdG1wO1xuICA5MjpcdFx0dTE2IGxlbjtcbiAgOTM6XHRcdF9fYmUxNiBwb3J0O1xuICA5NDpcdFx0dW5zaWduZWQgbG9uZyB0bXBfcG9ydDtcbiAgOTU6XHRcdGludCByZXQgPSBORl9BQ0NFUFQ7XG4gIDk2Olx0XHRuZl9uYXRfYW1hbmRhX2hvb2tfZm4gKm5mX25hdF9hbWFuZGE7XG4gIDk3Olx0XG4gIDk4Olx0XHQvKiBPbmx5IGxvb2sgYXQgcGFja2V0cyBmcm9tIHRoZSBBbWFuZGEgc2VydmVyICovXG4gIDk5Olx0XHRpZiAoQ1RJTkZPMkRJUihjdGluZm8pID09IElQX0NUX0RJUl9PUklHSU5BTClcbiAxMDA6XHRcdFx0cmV0dXJuIE5GX0FDQ0VQVDtcbiAxMDE6XHRcbiAxMDI6XHRcdC8qIGluY3JlYXNlIHRoZSBVRFAgdGltZW91dCBvZiB0aGUgbWFzdGVyIGNvbm5lY3Rpb24gYXMgcmVwbGllcyBmcm9tXG4gMTAzOlx0XHQgKiBBbWFuZGEgY2xpZW50cyB0byB0aGUgc2VydmVyIGNhbiBiZSBxdWl0ZSBkZWxheWVkICovXG4gMTA0Olx0XHRuZl9jdF9yZWZyZXNoKGN0LCBtYXN0ZXJfdGltZW91dCAqIEhaKTtcbiAxMDU6XHRcbiAxMDY6XHRcdC8qIE5vIGRhdGE/ICovXG4gMTA3Olx0XHRkYXRhb2ZmID0gcHJvdG9mZiAmIzQzOyBzaXplb2Yoc3RydWN0IHVkcGhkcik7XG4gMTA4Olx0XHRpZiAoZGF0YW9mZiBcdTAwM2U9IHNrYi1cdTAwM2VsZW4pIHtcbiAxMDk6XHRcdFx0bmV0X2Vycl9yYXRlbGltaXRlZChcJiMzNDthbWFuZGFfaGVscDogc2tibGVuID0gJXVcXG5cJiMzNDssIHNrYi1cdTAwM2VsZW4pO1xuIDExMDpcdFx0XHRyZXR1cm4gTkZfQUNDRVBUO1xuIDExMTpcdFx0fVxuIDExMjpcdFxuIDExMzpcdFx0c3RhcnQgPSBza2JfZmluZF90ZXh0KHNrYiwgZGF0YW9mZiwgc2tiLVx1MDAzZWxlbixcbiAxMTQ6XHRcdFx0XHQgICAgICBzZWFyY2hbU0VBUkNIX0NPTk5FQ1RdLnRzKTtcbiAxMTU6XHRcdGlmIChzdGFydCA9PSBVSU5UX01BWClcbiAxMTY6XHRcdFx0Z290byBvdXQ7XG4gMTE3Olx0XHRzdGFydCAmIzQzOz0gZGF0YW9mZiAmIzQzOyBzZWFyY2hbU0VBUkNIX0NPTk5FQ1RdLmxlbjtcbiAxMTg6XHRcbiAxMTk6XHRcdHN0b3AgPSBza2JfZmluZF90ZXh0KHNrYiwgc3RhcnQsIHNrYi1cdTAwM2VsZW4sXG4gMTIwOlx0XHRcdFx0ICAgICBzZWFyY2hbU0VBUkNIX05FV0xJTkVdLnRzKTtcbiAxMjE6XHRcdGlmIChzdG9wID09IFVJTlRfTUFYKVxuIDEyMjpcdFx0XHRnb3RvIG91dDtcbiAxMjM6XHRcdHN0b3AgJiM0Mzs9IHN0YXJ0O1xuIDEyNDpcdFxuIDEyNTpcdFx0Zm9yIChpID0gU0VBUkNIX0RBVEE7IGkgXHUwMDNjPSBTRUFSQ0hfU1RBVEU7IGkmIzQzOyYjNDM7KSB7XG4gMTI2Olx0XHRcdG9mZiA9IHNrYl9maW5kX3RleHQoc2tiLCBzdGFydCwgc3RvcCwgc2VhcmNoW2ldLnRzKTtcbiAxMjc6XHRcdFx0aWYgKG9mZiA9PSBVSU5UX01BWClcbiAxMjg6XHRcdFx0XHRjb250aW51ZTtcbiAxMjk6XHRcdFx0b2ZmICYjNDM7PSBzdGFydCAmIzQzOyBzZWFyY2hbaV0ubGVuO1xuIDEzMDpcdFxuIDEzMTpcdFx0XHRsZW4gPSBtaW5fdCh1bnNpZ25lZCBpbnQsIHNpemVvZihwYnVmKSAtIDEsIHN0b3AgLSBvZmYpO1xuIDEzMjpcdFx0XHRpZiAoc2tiX2NvcHlfYml0cyhza2IsIG9mZiwgcGJ1ZiwgbGVuKSlcbiAxMzM6XHRcdFx0XHRicmVhaztcbiAxMzQ6XHRcdFx0cGJ1ZltsZW5dID0gJiMzOTtcXDAmIzM5OztcbiAxMzU6XHRcbiAxMzY6XHRcdFx0dG1wX3BvcnQgPSBzaW1wbGVfc3RydG91bChwYnVmLCBcdTAwMjZ0bXAsIDEwKTtcbiAxMzc6XHRcdFx0bGVuID0gdG1wIC0gcGJ1ZjtcbiAxMzg6XHRcdFx0aWYgKHRtcF9wb3J0ID09IDAgfHwgdG1wX3BvcnQgXHUwMDNlIDY1NTM1IHx8IGxlbiBcdTAwM2UgNSlcbiAxMzk6XHRcdFx0XHRicmVhaztcbiAxNDA6XHRcdFx0cG9ydCA9IGh0b25zKHRtcF9wb3J0KTtcbiAxNDE6XHRcbiAxNDI6XHRcdFx0ZXhwID0gbmZfY3RfZXhwZWN0X2FsbG9jKGN0KTtcbiAxNDM6XHRcdFx0aWYgKGV4cCA9PSBOVUxMKSB7XG4gMTQ0Olx0XHRcdFx0bmZfY3RfaGVscGVyX2xvZyhza2IsIGN0LCBcJiMzNDtjYW5ub3QgYWxsb2MgZXhwZWN0YXRpb25cJiMzNDspO1xuIDE0NTpcdFx0XHRcdHJldCA9IE5GX0RST1A7XG4gMTQ2Olx0XHRcdFx0Z290byBvdXQ7XG4gMTQ3Olx0XHRcdH1cbiAxNDg6XHRcdFx0dHVwbGUgPSBcdTAwMjZjdC1cdTAwM2V0dXBsZWhhc2hbSVBfQ1RfRElSX09SSUdJTkFMXS50dXBsZTtcbiAxNDk6XHRcdFx0bmZfY3RfZXhwZWN0X2luaXQoZXhwLCBORl9DVF9FWFBFQ1RfQ0xBU1NfREVGQVVMVCxcbiAxNTA6XHRcdFx0XHRcdCAgbmZfY3RfbDNudW0oY3QpLFxuIDE1MTpcdFx0XHRcdFx0ICBcdTAwMjZ0dXBsZS1cdTAwM2VzcmMudTMsIFx1MDAyNnR1cGxlLVx1MDAzZWRzdC51MyxcbiAxNTI6XHRcdFx0XHRcdCAgSVBQUk9UT19UQ1AsIE5VTEwsIFx1MDAyNnBvcnQpO1xuIDE1MzpcdFxuIDE1NDpcdFx0XHRuZl9uYXRfYW1hbmRhID0gcmN1X2RlcmVmZXJlbmNlKG5mX25hdF9hbWFuZGFfaG9vayk7XG4gMTU1Olx0XHRcdGlmIChuZl9uYXRfYW1hbmRhIFx1MDAyNlx1MDAyNiBjdC1cdTAwM2VzdGF0dXMgXHUwMDI2IElQU19OQVRfTUFTSylcbiAxNTY6XHRcdFx0XHRyZXQgPSBuZl9uYXRfYW1hbmRhKHNrYiwgY3QsIGN0aW5mbywgcHJvdG9mZixcbiAxNTc6XHRcdFx0XHRcdFx0ICAgIG9mZiAtIGRhdGFvZmYsIGxlbiwgZXhwKTtcbiAxNTg6XHRcdFx0ZWxzZSBpZiAobmZfY3RfZXhwZWN0X3JlbGF0ZWQoZXhwLCAwKSAhPSAwKSB7XG4gMTU5Olx0XHRcdFx0bmZfY3RfaGVscGVyX2xvZyhza2IsIGN0LCBcJiMzNDtjYW5ub3QgYWRkIGV4cGVjdGF0aW9uXCYjMzQ7KTtcbiAxNjA6XHRcdFx0XHRyZXQgPSBORl9EUk9QO1xuIDE2MTpcdFx0XHR9XG4gMTYyOlx0XHRcdG5mX2N0X2V4cGVjdF9wdXQoZXhwKTtcbiAxNjM6XHRcdH1cbiAxNjQ6XHRcbiAxNjU6XHRvdXQ6XG4gMTY2Olx0XHRyZXR1cm4gcmV0O1xuIDE2NzpcdH1cbiAxNjg6XHRcbiAxNjk6XHRzdGF0aWMgY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3RfcG9saWN5IGFtYW5kYV9leHBfcG9saWN5ID0ge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA0OjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O05GX0NPTk5UUkFDS19BTUFOREEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZz0yMDE9Y29uZmlnIE5GX0NUX1BST1RPX1NDVFBcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjExLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjIxMjpjb25maWcgTkZfQ09OTlRSQUNLX0FNQU5EQVxubmV0L25ldGZpbHRlci9LY29uZmlnLTIxMy1cdHRyaXN0YXRlIFwmIzM0O0FtYW5kYSBiYWNrdXAgcHJvdG9jb2wgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz00MTY9Y29uZmlnIE5GX05BVF9BTUFOREFcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDE4LVx0ZGVwZW5kcyBvbiBORl9DT05OVFJBQ0sgXHUwMDI2XHUwMDI2IE5GX05BVFxubmV0L25ldGZpbHRlci9LY29uZmlnOjQxOTpcdGRlZmF1bHQgTkZfTkFUIFx1MDAyNlx1MDAyNiBORl9DT05OVFJBQ0tfQU1BTkRBXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDIwLVxuLS1cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9NDI9bmZfY29ubnRyYWNrX2gzMjMtb2JqcyA6PSBuZl9jb25udHJhY2tfaDMyM19tYWluLm8gbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTQzLVxubmV0L25ldGZpbHRlci9NYWtlZmlsZTo0NDpvYmotJChDT05GSUdfTkZfQ09OTlRSQUNLX0FNQU5EQSkgJiM0Mzs9IG5mX2Nvbm50cmFja19hbWFuZGEub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZS00NS1vYmotJChDT05GSUdfTkZfQ09OTlRSQUNLX0ZUUCkgJiM0Mzs9IG5mX2Nvbm50cmFja19mdHAub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA0OjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU2MzMKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIGBLY29uZmlnYCBmb3IgQ29ubmVjdGlvbiBUcmFja2luZyBhbmQgQW1hbmRhKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgY29ubmVjdGlvbiB0cmFja2luZyBpbnRlcmFjdHMgd2l0aCBBbWFuZGEsIHNwZWNpZmljYWxseS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRpdmUgc3RyYWlnaHQgaW50byB0aGUgYEtjb25maWdgIGZpbGVzIOKAkyB0aGF0JiMzOTtzIHdoZXJlIHRoZSBoZWFydCBvZiBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIGRlcGVuZGVuY2llcyBsaWVzLCByaWdodD8gSSYjMzk7bSBnb2luZyB0byBwaW5wb2ludCB0aGUgc2VjdGlvbiByZWxhdGVkIHRvIGBORl9DT05OVFJBQ0tfQU1BTkRBYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBkZXBlbmRlbmNpZXMgdGhpcyBmZWF0dXJlIGhhcy4gSXMgaXQgZGVwZW5kZW50IG9uIG90aGVyIGNvbm5lY3Rpb24gdHJhY2tpbmcgb3B0aW9ucz8gV2hhdCBvdGhlciBmdW5jdGlvbmFsaXRpZXMgZ2V0IGFmZmVjdGVkIGlmIHRoaXMgaXMgZW5hYmxlZCBvciBkaXNhYmxlZD8gSSYjMzk7bGwgcHJvYmFibHkgbG9vayBmb3IgdGhlIHR5cGljYWwgYGRlcGVuZHMgb25gLCBgc2VsZWN0YCwgb3IgZXZlbiBhbnkgYGRlZmF1bHRgIG9wdGlvbnMgdGhhdCBtaWdodCBnaXZlIG1lIGhpbnRzIGFib3V0IHRoZSBicm9hZGVyIHBpY3R1cmUuIE15IGdvYWwgaXMgdG8gcXVpY2tseSBncmFzcCB0aGUgaW1wbGljYXRpb25zIG9mIGVuYWJsaW5nIG9yIGRpc2FibGluZyB0aGlzIGZlYXR1cmUsIHNvIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIG9uIGhvdyBpdCBhZmZlY3RzIHRoZSBidWlsZCBlbnZpcm9ubWVudCBhbmQgdWx0aW1hdGVseSwgaG93IGl0IGNoYW5nZXMgdGhlIGJlaGF2aW9yIG9mIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIGltcGxlbWVudGF0aW9uIGl0c2VsZi4gRnJvbSB0aGVyZSwgSSBjYW4gYmVnaW4gdG8gZm9ybSBhIGNvbXBsZXRlIHVuZGVyc3RhbmRpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDQ6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDIxMDpcdFx0ICBJZiB1bnN1cmUsIHNheSBZLlxuIDIxMTpcdFxuIDIxMjpcdGNvbmZpZyBORl9DT05OVFJBQ0tfQU1BTkRBXG4gMjEzOlx0XHR0cmlzdGF0ZSBcJiMzNDtBbWFuZGEgYmFja3VwIHByb3RvY29sIHN1cHBvcnRcJiMzNDtcbiAyMTQ6XHRcdGRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VEXG4gMjE1Olx0XHRzZWxlY3QgVEVYVFNFQVJDSFxuIDIxNjpcdFx0c2VsZWN0IFRFWFRTRUFSQ0hfS01QXG4gMjE3Olx0XHRoZWxwXG4gMjE4Olx0XHQgIElmIHlvdSBhcmUgcnVubmluZyB0aGUgQW1hbmRhIGJhY2t1cCBwYWNrYWdlIFx1MDAzY2h0dHA6Ly93d3cuYW1hbmRhLm9yZy9cdTAwM2VcbiAyMTk6XHRcdCAgb24gdGhpcyBtYWNoaW5lIG9yIG1hY2hpbmVzIHRoYXQgd2lsbCBiZSBNQVNRVUVSQURFRCB0aHJvdWdoIHRoaXNcbiAyMjA6XHRcdCAgbWFjaGluZSwgdGhlbiB5b3UgbWF5IHdhbnQgdG8gZW5hYmxlIHRoaXMgZmVhdHVyZS4gIFRoaXMgYWxsb3dzIHRoZVxuIDIyMTpcdFx0ICBjb25uZWN0aW9uIHRyYWNraW5nIGFuZCBuYXR0aW5nIGNvZGUgdG8gYWxsb3cgdGhlIHN1Yi1jaGFubmVscyB0aGF0XG4gMjIyOlx0XHQgIEFtYW5kYSByZXF1aXJlcyBmb3IgY29tbXVuaWNhdGlvbiBvZiB0aGUgYmFja3VwIGRhdGEsIG1lc3NhZ2VzIGFuZFxuIDIyMzpcdFx0ICBpbmRleC5cbiAyMjQ6XHRcbiAyMjU6XHRcdCAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gIElmIHVuc3VyZSwgc2F5IE4uXG4gMjI2Olx0XG4gMjI3Olx0Y29uZmlnIE5GX0NPTk5UUkFDS19GVFBcbiAyMjg6XHRcdHRyaXN0YXRlIFwmIzM0O0ZUUCBwcm90b2NvbCBzdXBwb3J0XCYjMzQ7XG4gMjI5Olx0XHRkZWZhdWx0IG0gaWYgTkVURklMVEVSX0FEVkFOQ0VEPW5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNDozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MjI1CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDoKCioqSW52ZXN0aWdhdGluZyBORl9DT05OVFJBQ0sgaW4gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uKioKCk9rYXksIGZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgZXhhY3RseSBob3cgYE5GX0NPTk5UUkFDS2AgaXMgZGVmaW5lZCBhbmQgd2hlcmUgaXQgbGl2ZXMgd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIGRpdmUgaW50byBgbmV0L25ldGZpbHRlci9LY29uZmlnYCBzcGVjaWZpY2FsbHkuIEkgc3VzcGVjdCBpdCYjMzk7cyBlaXRoZXIgZGlyZWN0bHkgaW4gdGhlcmUgYXMgYSB0b3AtbGV2ZWwgb3B0aW9uIG9yIG1pZ2h0IGJlIGhpZGRlbiBiZWhpbmQgc29tZSBkZXBlbmRlbmNpZXMuIEdvdHRhIGVuc3VyZSBpdCBpc24mIzM5O3QgZGVwZW5kZW50IG9uIGFub3RoZXIgbW9yZSBvYnNjdXJlIHNldHRpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBleGFjdCBwbGFjZSBpbiB0aGUgY29uZmlndXJhdGlvbiBoaWVyYXJjaHksIGl0cyBwb3RlbnRpYWwgZGVwZW5kZW5jaWVzLCBhbmQgaWYgaXQmIzM5O3MgZXZlbiBleHBvc2VkIGRpcmVjdGx5IGZvciBjdXN0b21pemF0aW9uLiBUaGlzIGluZm9ybWF0aW9uIGlzIGNydWNpYWwgZm9yIGFueSBwb3RlbnRpYWwgbW9kaWZpY2F0aW9ucyBvciB0cm91Ymxlc2hvb3RpbmcgZG93biB0aGUgbGluZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNDozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdG1lbnUgXCYjMzQ7Q29yZSBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvblwmIzM0O1xuICAgMzpcdFx0ZGVwZW5kcyBvbiBJTkVUIFx1MDAyNlx1MDAyNiBORVRGSUxURVJcbiAgIDQ6XHRcbiAgIDU6XHRjb25maWcgTkVURklMVEVSX0lOR1JFU1NcbiAgIDY6XHRcdGJvb2wgXCYjMzQ7TmV0ZmlsdGVyIGluZ3Jlc3Mgc3VwcG9ydFwmIzM0O1xuICAgNzpcdFx0ZGVmYXVsdCB5XG4gICA4Olx0XHRzZWxlY3QgTkVUX0lOR1JFU1NcbiAgIDk6XHRcdGhlbHBcbiAgMTA6XHRcdCAgVGhpcyBhbGxvd3MgeW91IHRvIGNsYXNzaWZ5IHBhY2tldHMgZnJvbSBpbmdyZXNzIHVzaW5nIHRoZSBOZXRmaWx0ZXJcbiAgMTE6XHRcdCAgaW5mcmFzdHJ1Y3R1cmUuXG4gIDEyOlx0XG4gIDEzOlx0Y29uZmlnIE5FVEZJTFRFUl9FR1JFU1NcbiAgMTQ6XHRcdGJvb2wgXCYjMzQ7TmV0ZmlsdGVyIGVncmVzcyBzdXBwb3J0XCYjMzQ7XG4gIDE1Olx0XHRkZWZhdWx0IHlcbiAgMTY6XHRcdHNlbGVjdCBORVRfRUdSRVNTXG4gIDE3Olx0XHRoZWxwXG4gIDE4Olx0XHQgIFRoaXMgYWxsb3dzIHlvdSB0byBjbGFzc2lmeSBwYWNrZXRzIGJlZm9yZSB0cmFuc21pc3Npb24gdXNpbmcgdGhlXG4gIDE5Olx0XHQgIE5ldGZpbHRlciBpbmZyYXN0cnVjdHVyZS5cbiAgMjA6XHRcbiAgMjE6XHRjb25maWcgTkVURklMVEVSX1NLSVBfRUdSRVNTXG4gIDIyOlx0XHRkZWZfYm9vbCBORVRGSUxURVJfRUdSRVNTIFx1MDAyNlx1MDAyNiAoTkVUX0NMU19BQ1QgfHwgSUZCKVxuICAyMzpcdFxuICAyNDpcdGNvbmZpZyBORVRGSUxURVJfTkVUTElOS1xuICAyNTpcdFx0Ym9vbFxuICAyNjpcdFxuICAyNzpcdGNvbmZpZyBORVRGSUxURVJfRkFNSUxZX0JSSURHRVxuICAyODpcdFx0Ym9vbFxuICAyOTpcdFxuICAzMDpcdGNvbmZpZyBORVRGSUxURVJfRkFNSUxZX0FSUFxuICAzMTpcdFx0Ym9vbFxuICAzMjpcdFxuICAzMzpcdGNvbmZpZyBORVRGSUxURVJfQlBGX0xJTktcbiAgMzQ6XHRcdGRlZl9ib29sIEJQRl9TWVNDQUxMXG4gIDM1Olx0XG4gIDM2Olx0Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX0hPT0tcbiAgMzc6XHRcdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBiYXNlIGhvb2sgZHVtcCBzdXBwb3J0XCYjMzQ7XG4gIDM4Olx0XHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9BRFZBTkNFRFxuICAzOTpcdFx0ZGVwZW5kcyBvbiBORl9UQUJMRVNcbiAgNDA6XHRcdHNlbGVjdCBORVRGSUxURVJfTkVUTElOS1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNDozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2ODkwCgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogNDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQW1hbmRhIE5ldGZpbHRlciBDb25uZWN0aW9uIFRyYWNraW5nIEhlbHBlcioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIGhvdyBgbmZfY29ubnRyYWNrX2FtYW5kYWAgaXMgYWN0dWFsbHkgcmVhY2hlZC4gUmlnaHQsIGl0JiMzOTtzIGEgbmV0ZmlsdGVyIGNvbm5lY3Rpb24gdHJhY2tpbmcgaGVscGVyIHNwZWNpZmljYWxseSBmb3IgdGhlIEFtYW5kYSBwcm90b2NvbC4gU28sIHdoZW4gY29ubnRyYWNrIGdldHMgYSBVRFAgcGFja2V0IHRoYXQgbWF0Y2hlcyB0aGUgaGVscGVyJiMzOTtzIHJlZ2lzdGVyZWQgcG9ydCDigJMgd2hpY2gsIGJ5IGRlZmF1bHQsIGlzIDEwMDgwLCBvciBjb3VsZCBiZSBjb25maWd1cmVkIHZpYSB0aGUgbW9kdWxlIHBhcmFtZXRlcnMgb3IgQ1QgaGVscGVyIHJ1bGVzIOKAkyB0aGUgYGFtYW5kYV9oZWxwYCBmdW5jdGlvbiBpcyBpbnZva2VkLiBHb29kLiBBbHNvLCBJIGtub3cgdGhhdCBwYWNrZXQgaW5qZWN0aW9uIGFuZCBuZXRmaWx0ZXIgdGVzdGluZyBpbiBzeXprYWxsZXIgcmVndWxhcmx5IGV4ZXJjaXNlcyBuZXRmaWx0ZXIgY29ubnRyYWNrIGhlbHBlcnMgdXNpbmcgbG9vcGJhY2ssIHR1biwgdGFwIGludGVyZmFjZXMsIG9yIHZpYSBuZnRhYmxlcy9pcHRhYmxlcyBDVCBoZWxwZXIgdGFyZ2V0cy4KCk5vdywgdGhpcyBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiB0aGUgd2F5IHRoZSBwb3J0IGlzIHBhcnNlZC4gUHJldmlvdXNseSwgdGhlIGNvZGUgd2FzIGxpa2UgdGhpczogYHBvcnQgPSBodG9ucyhzaW1wbGVfc3RydG91bChwYnVmLCAmYW1wO3RtcCwgMTApKTtgLiBFc3NlbnRpYWxseSwgdGhlIGBodG9ucygpYCBmdW5jdGlvbiB3YXMgYmVpbmcgY2FsbGVkIG9uIGFuIGB1bnNpZ25lZCBsb25nYCByZXN1bHQgZnJvbSBgc2ltcGxlX3N0cnRvdWxgLiBUaGUgYHBvcnRgIHZhcmlhYmxlIGl0c2VsZiB3YXMgYSBgX19iZTE2YC4gVGhpcyBtZWFudCB0aGF0IGlmIGBzaW1wbGVfc3RydG91bGAgcmV0dXJuZWQgc29tZXRoaW5nIGxpa2UgNjU1MzYgb3IgMTMxMDcyLCB0aGUgYHBvcnQgPT0gMGAgY2hlY2sgKm1pZ2h0KiBmYWlsLCBvciBwYXNzIHVuZXhwZWN0ZWRseS4gYGh0b25zYCB3YXMgdHJ1bmNhdGluZyBvciBjb252ZXJ0aW5nIHRoZSB2YWx1ZSwgYW5kIHRoZXJlIHdhcyBubyBjaGVjayB0byBlbnN1cmUgdGhlIHJlc3VsdCBkaWRuJiMzOTt0IGV4Y2VlZCB0aGUgbWF4IHZhbHVlLgoKU3BlY2lmaWNhbGx5LCBpZiBgc2ltcGxlX3N0cnRvdWxgIHBhcnNlZCBhIG51bWJlciBncmVhdGVyIHRoYW4gNjU1MzUsIGBodG9uc2Agd291bGQgc2ltcGx5IHRydW5jYXRlIGl0IHRvIDE2IGJpdHMuIE5vdywgdGhlIGZpeCBtYWtlcyB0aGluZ3MgbXVjaCBtb3JlIHJvYnVzdC4gSXQgc3RvcmVzIHRoZSByZXN1bHQgb2YgYHNpbXBsZV9zdHJ0b3VsYCBpbnRvIGB0bXBfcG9ydGAsIHdoaWNoIGlzIGFuIGB1bnNpZ25lZCBsb25nYC4gVGhlbiBpdCBjaGVja3MgZm9yIGB0bXBfcG9ydCA9PSAwIHx8IHRtcF9wb3J0ICZndDsgNjU1MzUgfHwgbGVuICZndDsgNWAsIGFuZCAqdGhlbiogYXNzaWducyBgcG9ydCA9IGh0b25zKHRtcF9wb3J0KWAuIFNtYXJ0LgoKVGhpcyBpcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCByaWdodCBpbiBjb3JlIG5ldHdvcmtpbmcsIGRlZXAgd2l0aGluIG5ldGZpbHRlci4gSG1tLCBpcyB0aGlzIHNvbWV0aGluZyB0aGF0JiMzOTtzIHdvcnRoIGZ1enppbmc/IFllcywgSSYjMzk7ZCBzYXkgc28uIGBXb3J0aEZ1enppbmc9dHJ1ZWAuCgpMZXQmIzM5O3MgcXVpY2tseSBjaGVjayB0aGUgYEZvY3VzU3ltYm9sc2AuIFRoZSBtb2RpZmllZCBmdW5jdGlvbiBpcyBgYW1hbmRhX2hlbHBgLiBOb3cgbGV0JiMzOTtzIHNlZSBpZiB0aGVyZSBhcmUgb3RoZXIgaW50ZXJlc3RpbmcgZnVuY3Rpb25zIGluIGBuZl9jb25udHJhY2tfYW1hbmRhLmNgIHRoYXQgYXJlIHdvcnRoIG15IGF0dGVudGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDQ6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XlthLXpBLVpfXS4qXFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmM9MjU9c3RhdGljIGNoYXIgKnRzX2FsZ28gPSBcJiMzNDtrbXBcJiMzNDs7XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmMtMjgtXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuYzoyOTpNT0RVTEVfQVVUSE9SKFwmIzM0O0JyaWFuIEouIE11cnJlbGwgXHUwMDNjbmV0ZmlsdGVyQGludGVybGlueC5iYy5jYVx1MDAzZVwmIzM0Oyk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuYzozMDpNT0RVTEVfREVTQ1JJUFRJT04oXCYjMzQ7QW1hbmRhIGNvbm5lY3Rpb24gdHJhY2tpbmcgbW9kdWxlXCYjMzQ7KTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jOjMxOk1PRFVMRV9MSUNFTlNFKFwmIzM0O0dQTFwmIzM0Oyk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuYzozMjpNT0RVTEVfQUxJQVMoXCYjMzQ7aXBfY29ubnRyYWNrX2FtYW5kYVwmIzM0Oyk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuYzozMzpNT0RVTEVfQUxJQVNfTkZDVF9IRUxQRVIoSEVMUEVSX05BTUUpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmMtMzQtXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuYzozNTptb2R1bGVfcGFyYW0obWFzdGVyX3RpbWVvdXQsIHVpbnQsIDA2MDApO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmM6MzY6TU9EVUxFX1BBUk1fREVTQyhtYXN0ZXJfdGltZW91dCwgXCYjMzQ7dGltZW91dCBmb3IgdGhlIG1hc3RlciBjb25uZWN0aW9uXCYjMzQ7KTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jOjM3Om1vZHVsZV9wYXJhbSh0c19hbGdvLCBjaGFycCwgMDQwMCk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuYzozODpNT0RVTEVfUEFSTV9ERVNDKHRzX2FsZ28sIFwmIzM0O3RleHRzZWFyY2ggYWxnb3JpdGhtIHRvIHVzZSAoZGVmYXVsdCBrbXApXCYjMzQ7KTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jLTM5LVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmM9NDA9bmZfbmF0X2FtYW5kYV9ob29rX2ZuIF9fcmN1ICpuZl9uYXRfYW1hbmRhX2hvb2sgX19yZWFkX21vc3RseTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jOjQxOkVYUE9SVF9TWU1CT0xfR1BMKG5mX25hdF9hbWFuZGFfaG9vayk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuYy00Mi1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuYz01Mj1zdGF0aWMgc3RydWN0IHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuYy04Mi1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jOjgzOnN0YXRpYyBpbnQgYW1hbmRhX2hlbHAoc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jLTg0LVx0XHQgICAgICAgdW5zaWduZWQgaW50IHByb3RvZmYsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmM9MTc1PXN0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqYW1hbmRhX2hlbHBlcl9wdHJbMl0gX19yZWFkX21vc3RseTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jLTE3Ni1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jOjE3NzpzdGF0aWMgdm9pZCBfX2V4aXQgbmZfY29ubnRyYWNrX2FtYW5kYV9maW5pKHZvaWQpXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuYy0xNzgte1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jLTE4Ni1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jOjE4NzpzdGF0aWMgaW50IF9faW5pdCBuZl9jb25udHJhY2tfYW1hbmRhX2luaXQodm9pZClcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jLTE4OC17XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmMtMjIzLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmM6MjI0Om1vZHVsZV9pbml0KG5mX2Nvbm50cmFja19hbWFuZGFfaW5pdCk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuYzoyMjU6bW9kdWxlX2V4aXQobmZfY29ubnRyYWNrX2FtYW5kYV9maW5pKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDQ6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODgyMAoJCQkJCQkJb3V0cHV0OiAxMDkKCQkJCQkJCXRob3VnaHRzOiAzMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgQW1hbmRhIENvbm50cmFjayBIZWxwZXIgTW9kaWZpY2F0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZm9jdXNpbmcgb24gYGFtYW5kYV9oZWxwYCDigJMgdGhhdCYjMzk7cyB0aGUgY29yZSBmdW5jdGlvbiB0aGlzIHBhdGNoIHRvdWNoZXMuIEJlZm9yZSBJIGdldCBpbnRvIHRoZSBkZXRhaWxzLCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBlbnZpcm9ubWVudCBpcyBzZXQgdXAgY29ycmVjdGx5LiBMZXQmIzM5O3MgdmVyaWZ5IHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMuIEkgc2VlIHRoYXQgYENPTkZJR19ORl9DT05OVFJBQ0tfQU1BTkRBYCwgYENPTkZJR19ORl9DT05OVFJBQ0tgLCBgQ09ORklHX05FVEZJTFRFUmAsIGFuZCBgQ09ORklHX0lORVRgIGFyZSBlc3NlbnRpYWwuIEp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJiMzOTtsbCB0YWtlIGEgcXVpY2sgbG9vayBhdCBgbmV0L25ldGZpbHRlci9LY29uZmlnYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBoaWRkZW4gZGVwZW5kZW5jaWVzLgoKQWgsIHllcy4gQXMgZXhwZWN0ZWQsIGBORl9DT05OVFJBQ0tfQU1BTkRBYCBkZXBlbmRzIG9uIGBORVRGSUxURVJfQURWQU5DRURgLCBhbmQgaW4gdHVybiwgcmVxdWlyZXMgYE5FVEZJTFRFUmAgYW5kIGBJTkVUYCB0byBiZSBjb3JyZWN0bHkgcHJlc2VudGVkIGluIHRoZSBtZW51LiBBbHNvLCBpdCBzZWxlY3RzIGBURVhUU0VBUkNIYCBhbmQgYFRFWFRTRUFSQ0hfS01QYCBmb3IgZ29vZCBtZWFzdXJlLiBTbywgdGhlIGJhc2UgY29uZmlncyBJIGlkZW50aWZpZWQgYXJlIHRoZSBrZXkgb25lczogYE5GX0NPTk5UUkFDS19BTUFOREFgLCBgTkZfQ09OTlRSQUNLYCwgYW5kIGBORVRGSUxURVJgLiBUaGF0JiMzOTtzIHN0YW5kYXJkIHN0dWZmLgoKTm93LCBsZXQmIzM5O3MgbmFpbCBkb3duIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYHNldC1yZXN1bHRzYCBjYWxsLiBJIGNhbiBzZWUgdGhlIHBhcmFtZXRlcnMgY2xlYXJseTogYFdvcnRoRnV6emluZ2Agc2V0IHRvIGB0cnVlYCwgdGhlIGBGb2N1c1N5bWJvbHNgIGJlaW5nIGNvcnJlY3RseSBzZXQgdG8gYFsmIzM0O2FtYW5kYV9oZWxwJiMzNDtdYCwgYW5kIGBFbmFibGVDb25maWdzYCBzZXQgdG8gYFsmIzM0O05GX0NPTk5UUkFDS19BTUFOREEmIzM0OywgJiMzNDtORl9DT05OVFJBQ0smIzM0OywgJiMzNDtORVRGSUxURVImIzM0O11gLiBQZXJmZWN0LiBUaGUgcmVhc29uaW5nIGlzIGNsZWFyOiB0aGlzIHBhdGNoIGlzIGFib3V0IGZpeGluZyBwb3J0IHZhbGlkYXRpb24gaW4gdGhlIEFtYW5kYSBjb25udHJhY2sgaGVscGVyIChgYW1hbmRhX2hlbHBgKSB3aXRoaW4gYG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jYCwgc3BlY2lmaWNhbGx5IHRvIGF2b2lkIGludGVnZXIgdHJ1bmNhdGlvbiBhbmQgcHJvcGVybHkgdmFsaWRhdGUgcG9ydCBudW1iZXJzIHBhcnNlZCBmcm9tIHBhY2tldCBwYXlsb2Fkcy4gVGhhdCBjb2RlIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIHdoZW4gaGFuZGxpbmcgbmV0d29yayBwYWNrZXRzIHdpdGggQW1hbmRhIGNvbm5lY3Rpb24gdHJhY2tpbmcgZW5hYmxlZC4KClllcCwgZXZlcnl0aGluZyBjaGVja3Mgb3V0LiBJJiMzOTttIHNhdGlzZmllZC4gTGV0JiMzOTtzIGdvIGFoZWFkIGFuZCBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA0OjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORl9DT05OVFJBQ0tfQU1BTkRBJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDSyYjMzQ7LAogICAgJiMzNDtORVRGSUxURVImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthbWFuZGFfaGVscCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBwb3J0IHBhcnNpbmcgYW5kIGJvdW5kcyB2YWxpZGF0aW9uIGxvZ2ljIGluIHRoZSBBbWFuZGEgY29ubnRyYWNrIGhlbHBlciAoYW1hbmRhX2hlbHApIHRvIGNvcnJlY3RseSByZWplY3QgcG9ydCB2YWx1ZXMgZ3JlYXRlciB0aGFuIDY1NTM1IGFuZCBwcmV2ZW50IHRydW5jYXRpb24gYmVmb3JlIHJhbmdlIGNoZWNraW5nLiBUaGlzIGlzIHJlYWNoYWJsZSBuZXR3b3JraW5nIGNvZGUgaW4gTmV0ZmlsdGVyLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORl9DT05OVFJBQ0tfQU1BTkRBJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDSyYjMzQ7LAogICAgJiMzNDtORVRGSUxURVImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthbWFuZGFfaGVscCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBwb3J0IHBhcnNpbmcgYW5kIGJvdW5kcyB2YWxpZGF0aW9uIGxvZ2ljIGluIHRoZSBBbWFuZGEgY29ubnRyYWNrIGhlbHBlciAoYW1hbmRhX2hlbHApIHRvIGNvcnJlY3RseSByZWplY3QgcG9ydCB2YWx1ZXMgZ3JlYXRlciB0aGFuIDY1NTM1IGFuZCBwcmV2ZW50IHRydW5jYXRpb24gYmVmb3JlIHJhbmdlIGNoZWNraW5nLiBUaGlzIGlzIHJlYWNoYWJsZSBuZXR3b3JraW5nIGNvZGUgaW4gTmV0ZmlsdGVyLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNDozMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA0OjMwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gaW50ZWdlciByYW5nZSB2YWxpZGF0aW9uIGlzc3VlIGluIHRoZSBBbWFuZGEgY29ubnRyYWNrIGhlbHBlciAoYGFtYW5kYV9oZWxwYCkgYnkgcHJvcGVybHkgY2hlY2tpbmcgdGhhdCB0aGUgcGFyc2VkIHBvcnQgbnVtYmVyIGRvZXMgbm90IGV4Y2VlZCA2NTUzNSBiZWZvcmUgY2FzdGluZy9jb252ZXJ0aW5nIGl0IHdpdGggYGh0b25zKClgLlxuXG5BbGwgbW9kaWZpZWQgYW5kIHN1cnJvdW5kaW5nIHZhcmlhYmxlcyAoYHRtcF9wb3J0YCwgYHBvcnRgLCBgbGVuYCwgYHBidWZgKSBhcmUgc3RyaWN0bHkgaW5pdGlhbGl6ZWQgYW5kIGRldGVybWluaXN0aWMuIE5vIGhlYXAvc3RhY2sgc3RydWN0dXJlcyBhcmUgbGVha2VkIHRvIHVzZXIgc3BhY2UsIG5vIGNvbmRpdGlvbmFsIGJyYW5jaGVzIHJlbHkgb24gdW5pbml0aWFsaXplZCBzdGF0ZSwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzc2VzIGFyZSBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDBiMGRiYmEzMjYyMGY3ZjliNjg5NjMzYjNiMjczMDMzZWM5ZmRjNGIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIFNlcCA3IDA0OjMwOjE2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuYwppbmRleCAxNGFlNjYwNDkxZjM2Li4wNTdjZWY3ZTJhN2VkIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuYwpAQCAtOTEsNiAmIzQzOzkxLDcgQEAgc3RhdGljIGludCBhbWFuZGFfaGVscChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCWNoYXIgcGJ1ZltzaXplb2YoJiMzNDs2NTUzNSYjMzQ7KV0sICp0bXA7CiAJdTE2IGxlbjsKIAlfX2JlMTYgcG9ydDsKJiM0MzsJdW5zaWduZWQgbG9uZyB0bXBfcG9ydDsKIAlpbnQgcmV0ID0gTkZfQUNDRVBUOwogCW5mX25hdF9hbWFuZGFfaG9va19mbiAqbmZfbmF0X2FtYW5kYTsKIApAQCAtMTMyLDEwICYjNDM7MTMzLDExIEBAIHN0YXRpYyBpbnQgYW1hbmRhX2hlbHAoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCWJyZWFrOwogCQlwYnVmW2xlbl0gPSAmIzM5O1wwJiMzOTs7CiAKLQkJcG9ydCA9IGh0b25zKHNpbXBsZV9zdHJ0b3VsKHBidWYsICZhbXA7dG1wLCAxMCkpOwomIzQzOwkJdG1wX3BvcnQgPSBzaW1wbGVfc3RydG91bChwYnVmLCAmYW1wO3RtcCwgMTApOwogCQlsZW4gPSB0bXAgLSBwYnVmOwotCQlpZiAocG9ydCA9PSAwIHx8IGxlbiAmZ3Q7IDUpCiYjNDM7CQlpZiAodG1wX3BvcnQgPT0gMCB8fCB0bXBfcG9ydCAmZ3Q7IDY1NTM1IHx8IGxlbiAmZ3Q7IDUpCiAJCQlicmVhazsKJiM0MzsJCXBvcnQgPSBodG9ucyh0bXBfcG9ydCk7CiAKIAkJZXhwID0gbmZfY3RfZXhwZWN0X2FsbG9jKGN0KTsKIAkJaWYgKGV4cCA9PSBOVUxMKSB7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNDozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjgwCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogNTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGNyYWZ0ZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkRpdmluZyBpbnRvIHRoZSBBbWFuZGEgQ29ubnRyYWNrIE1vZHVsZSoqCgpSaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGNoYW5nZS4gVGhlIGZpcnN0IHRoaW5nIEkmIzM5O20gZ29pbmcgdG8gZG8gaXMgZ2V0IG15IGV5ZXMgb24gdGhlIGRpZmYuIEkmIzM5O2xsIHJlYWQgdGhlIGBuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuY2AgY29kZSB0byBzZWUgdGhlIGJlZm9yZSBhbmQgYWZ0ZXIuIE15IGdvYWwgaXMgdG8gZ3Jhc3AgdGhlIG1vZGlmaWNhdGlvbiYjMzk7cyBpbXBhY3Qgd2l0aGluIHRoYXQgY29udGV4dC4gSSB3YW50IHRvIHJlYWQgdGhlIHN1cnJvdW5kaW5nIGxpbmVzIHRvIHVuZGVyc3RhbmQgdGhlIHB1cnBvc2Ugb2YgdGhlIGNvZGUgYW5kIHRoZSBsb2NhdGlvbiBvZiB0aGUgZWRpdC4gSSYjMzk7bGwgdXNlIGByZWFkLWZpbGVgIHRvIGdyYWIgdGhlIGZpbGUgYW5kIGJlZ2luIGFuYWx5emluZyBpdC4gVGltZSB0byBkaWcgaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA0OjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDgwOlx0XHR9LFxuICA4MTpcdH07XG4gIDgyOlx0XG4gIDgzOlx0c3RhdGljIGludCBhbWFuZGFfaGVscChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuICA4NDpcdFx0XHQgICAgICAgdW5zaWduZWQgaW50IHByb3RvZmYsXG4gIDg1Olx0XHRcdCAgICAgICBzdHJ1Y3QgbmZfY29ubiAqY3QsXG4gIDg2Olx0XHRcdCAgICAgICBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbylcbiAgODc6XHR7XG4gIDg4Olx0XHRzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqZXhwO1xuICA4OTpcdFx0c3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGU7XG4gIDkwOlx0XHR1bnNpZ25lZCBpbnQgZGF0YW9mZiwgc3RhcnQsIHN0b3AsIG9mZiwgaTtcbiAgOTE6XHRcdGNoYXIgcGJ1ZltzaXplb2YoXCYjMzQ7NjU1MzVcJiMzNDspXSwgKnRtcDtcbiAgOTI6XHRcdHUxNiBsZW47XG4gIDkzOlx0XHRfX2JlMTYgcG9ydDtcbiAgOTQ6XHRcdHVuc2lnbmVkIGxvbmcgdG1wX3BvcnQ7XG4gIDk1Olx0XHRpbnQgcmV0ID0gTkZfQUNDRVBUO1xuICA5NjpcdFx0bmZfbmF0X2FtYW5kYV9ob29rX2ZuICpuZl9uYXRfYW1hbmRhO1xuICA5NzpcdFxuICA5ODpcdFx0LyogT25seSBsb29rIGF0IHBhY2tldHMgZnJvbSB0aGUgQW1hbmRhIHNlcnZlciAqL1xuICA5OTpcdFx0aWYgKENUSU5GTzJESVIoY3RpbmZvKSA9PSBJUF9DVF9ESVJfT1JJR0lOQUwpXG4gMTAwOlx0XHRcdHJldHVybiBORl9BQ0NFUFQ7XG4gMTAxOlx0XG4gMTAyOlx0XHQvKiBpbmNyZWFzZSB0aGUgVURQIHRpbWVvdXQgb2YgdGhlIG1hc3RlciBjb25uZWN0aW9uIGFzIHJlcGxpZXMgZnJvbVxuIDEwMzpcdFx0ICogQW1hbmRhIGNsaWVudHMgdG8gdGhlIHNlcnZlciBjYW4gYmUgcXVpdGUgZGVsYXllZCAqL1xuIDEwNDpcdFx0bmZfY3RfcmVmcmVzaChjdCwgbWFzdGVyX3RpbWVvdXQgKiBIWik7XG4gMTA1Olx0XG4gMTA2Olx0XHQvKiBObyBkYXRhPyAqL1xuIDEwNzpcdFx0ZGF0YW9mZiA9IHByb3RvZmYgJiM0Mzsgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpO1xuIDEwODpcdFx0aWYgKGRhdGFvZmYgXHUwMDNlPSBza2ItXHUwMDNlbGVuKSB7XG4gMTA5Olx0XHRcdG5ldF9lcnJfcmF0ZWxpbWl0ZWQoXCYjMzQ7YW1hbmRhX2hlbHA6IHNrYmxlbiA9ICV1XFxuXCYjMzQ7LCBza2ItXHUwMDNlbGVuKTtcbiAxMTA6XHRcdFx0cmV0dXJuIE5GX0FDQ0VQVDtcbiAxMTE6XHRcdH1cbiAxMTI6XHRcbiAxMTM6XHRcdHN0YXJ0ID0gc2tiX2ZpbmRfdGV4dChza2IsIGRhdGFvZmYsIHNrYi1cdTAwM2VsZW4sXG4gMTE0Olx0XHRcdFx0ICAgICAgc2VhcmNoW1NFQVJDSF9DT05ORUNUXS50cyk7XG4gMTE1Olx0XHRpZiAoc3RhcnQgPT0gVUlOVF9NQVgpXG4gMTE2Olx0XHRcdGdvdG8gb3V0O1xuIDExNzpcdFx0c3RhcnQgJiM0Mzs9IGRhdGFvZmYgJiM0Mzsgc2VhcmNoW1NFQVJDSF9DT05ORUNUXS5sZW47XG4gMTE4Olx0XG4gMTE5Olx0XHRzdG9wID0gc2tiX2ZpbmRfdGV4dChza2IsIHN0YXJ0LCBza2ItXHUwMDNlbGVuLFxuIDEyMDpcdFx0XHRcdCAgICAgc2VhcmNoW1NFQVJDSF9ORVdMSU5FXS50cyk7XG4gMTIxOlx0XHRpZiAoc3RvcCA9PSBVSU5UX01BWClcbiAxMjI6XHRcdFx0Z290byBvdXQ7XG4gMTIzOlx0XHRzdG9wICYjNDM7PSBzdGFydDtcbiAxMjQ6XHRcbiAxMjU6XHRcdGZvciAoaSA9IFNFQVJDSF9EQVRBOyBpIFx1MDAzYz0gU0VBUkNIX1NUQVRFOyBpJiM0MzsmIzQzOykge1xuIDEyNjpcdFx0XHRvZmYgPSBza2JfZmluZF90ZXh0KHNrYiwgc3RhcnQsIHN0b3AsIHNlYXJjaFtpXS50cyk7XG4gMTI3Olx0XHRcdGlmIChvZmYgPT0gVUlOVF9NQVgpXG4gMTI4Olx0XHRcdFx0Y29udGludWU7XG4gMTI5Olx0XHRcdG9mZiAmIzQzOz0gc3RhcnQgJiM0Mzsgc2VhcmNoW2ldLmxlbjtcbiAxMzA6XHRcbiAxMzE6XHRcdFx0bGVuID0gbWluX3QodW5zaWduZWQgaW50LCBzaXplb2YocGJ1ZikgLSAxLCBzdG9wIC0gb2ZmKTtcbiAxMzI6XHRcdFx0aWYgKHNrYl9jb3B5X2JpdHMoc2tiLCBvZmYsIHBidWYsIGxlbikpXG4gMTMzOlx0XHRcdFx0YnJlYWs7XG4gMTM0Olx0XHRcdHBidWZbbGVuXSA9ICYjMzk7XFwwJiMzOTs7XG4gMTM1Olx0XG4gMTM2Olx0XHRcdHRtcF9wb3J0ID0gc2ltcGxlX3N0cnRvdWwocGJ1ZiwgXHUwMDI2dG1wLCAxMCk7XG4gMTM3Olx0XHRcdGxlbiA9IHRtcCAtIHBidWY7XG4gMTM4Olx0XHRcdGlmICh0bXBfcG9ydCA9PSAwIHx8IHRtcF9wb3J0IFx1MDAzZSA2NTUzNSB8fCBsZW4gXHUwMDNlIDUpXG4gMTM5Olx0XHRcdFx0YnJlYWs7XG4gMTQwOlx0XHRcdHBvcnQgPSBodG9ucyh0bXBfcG9ydCk7XG4gMTQxOlx0XG4gMTQyOlx0XHRcdGV4cCA9IG5mX2N0X2V4cGVjdF9hbGxvYyhjdCk7XG4gMTQzOlx0XHRcdGlmIChleHAgPT0gTlVMTCkge1xuIDE0NDpcdFx0XHRcdG5mX2N0X2hlbHBlcl9sb2coc2tiLCBjdCwgXCYjMzQ7Y2Fubm90IGFsbG9jIGV4cGVjdGF0aW9uXCYjMzQ7KTtcbiAxNDU6XHRcdFx0XHRyZXQgPSBORl9EUk9QO1xuIDE0NjpcdFx0XHRcdGdvdG8gb3V0O1xuIDE0NzpcdFx0XHR9XG4gMTQ4Olx0XHRcdHR1cGxlID0gXHUwMDI2Y3QtXHUwMDNldHVwbGVoYXNoW0lQX0NUX0RJUl9PUklHSU5BTF0udHVwbGU7XG4gMTQ5Olx0XHRcdG5mX2N0X2V4cGVjdF9pbml0KGV4cCwgTkZfQ1RfRVhQRUNUX0NMQVNTX0RFRkFVTFQsXG4gMTUwOlx0XHRcdFx0XHQgIG5mX2N0X2wzbnVtKGN0KSxcbiAxNTE6XHRcdFx0XHRcdCAgXHUwMDI2dHVwbGUtXHUwMDNlc3JjLnUzLCBcdTAwMjZ0dXBsZS1cdTAwM2Vkc3QudTMsXG4gMTUyOlx0XHRcdFx0XHQgIElQUFJPVE9fVENQLCBOVUxMLCBcdTAwMjZwb3J0KTtcbiAxNTM6XHRcbiAxNTQ6XHRcdFx0bmZfbmF0X2FtYW5kYSA9IHJjdV9kZXJlZmVyZW5jZShuZl9uYXRfYW1hbmRhX2hvb2spO1xuIDE1NTpcdFx0XHRpZiAobmZfbmF0X2FtYW5kYSBcdTAwMjZcdTAwMjYgY3QtXHUwMDNlc3RhdHVzIFx1MDAyNiBJUFNfTkFUX01BU0spXG4gMTU2Olx0XHRcdFx0cmV0ID0gbmZfbmF0X2FtYW5kYShza2IsIGN0LCBjdGluZm8sIHByb3RvZmYsXG4gMTU3Olx0XHRcdFx0XHRcdCAgICBvZmYgLSBkYXRhb2ZmLCBsZW4sIGV4cCk7XG4gMTU4Olx0XHRcdGVsc2UgaWYgKG5mX2N0X2V4cGVjdF9yZWxhdGVkKGV4cCwgMCkgIT0gMCkge1xuIDE1OTpcdFx0XHRcdG5mX2N0X2hlbHBlcl9sb2coc2tiLCBjdCwgXCYjMzQ7Y2Fubm90IGFkZCBleHBlY3RhdGlvblwmIzM0Oyk7XG4gMTYwOlx0XHRcdFx0cmV0ID0gTkZfRFJPUDtcbiAxNjE6XHRcdFx0fVxuIDE2MjpcdFx0XHRuZl9jdF9leHBlY3RfcHV0KGV4cCk7XG4gMTYzOlx0XHR9XG4gMTY0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA0OjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5MjIKCQkJCQkJCW91dHB1dDogMTQ0CgkJCQkJCQl0aG91Z2h0czogNTkzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQW1hbmRhIENvbm50cmFjayBIZWxwZXIgUG9ydCBWYWxpZGF0aW9uIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgcGF0Y2guIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBhbmFseXplIHRoZSBjaGFuZ2VzIHRvIHRoZSBwb3J0IG51bWJlciBoYW5kbGluZyBsb2dpYy4gUHJldmlvdXNseSwgdGhlIGNvZGUgdXNlZCBgc2ltcGxlX3N0cnRvdWxgIHRvIGNvbnZlcnQgYSBzdHJpbmcgYHBidWZgIHRvIGFuIHVuc2lnbmVkIGxvbmcgYW5kIHRoZW4gdXNlZCBgaHRvbnNgIHRvIGNvbnZlcnQgaXQgdG8gYSBuZXR3b3JrIGJ5dGUgb3JkZXIgc2hvcnQsIGFzc2lnbmluZyBpdCB0byBgcG9ydGAuIFRoZSBwcm9ibGVtIGxpZXMgaW4gdGhlIGZhY3QgdGhhdCBgaHRvbnNgIGVmZmVjdGl2ZWx5IHRydW5jYXRlcyB0aGUgYHVuc2lnbmVkIGxvbmdgIGlucHV0IHRvIGEgYHUxNmAgYmVmb3JlIGJ5dGUtc3dhcHBpbmcuIFRoaXMgbWVhbnMgdGhhdCBpZiBgc2ltcGxlX3N0cnRvdWxgIHJldHVybnMgYSB2YWx1ZSBsYXJnZXIgdGhhbiA2NTUzNSwgbGlrZSAmIzM0Ozk5OTk5JiMzNDssIHRoZSBjb2RlIGNvdWxkIHBvdGVudGlhbGx5IHRydW5jYXRlIHRvIHplcm8gKGlmIHRoZSB0cnVuY2F0ZWQgdmFsdWUgaXMgemVybykgb3IgYSBub24temVybyB2YWx1ZSBhZnRlciBiZWluZyBiaXQtbWFza2VkIHdpdGggMHhmZmZmIGJ5IGBodG9uc2AsIHdoaWNoIGNvdWxkIGxlYWQgdG8gYW4gaW5jb3JyZWN0IHBvcnQgYXNzaWdubWVudC4gQ3JpdGljYWxseSwgdGhlIG9yaWdpbmFsIGNvZGUgb25seSB2YWxpZGF0ZWQgdGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uLCBidXQgbm90IHRoZSBudW1lcmljYWwgdmFsdWUgaXQgcmVwcmVzZW50ZWQsIGxlYWRpbmcgdG8gdGhpcyBvdmVyZmxvdyB2dWxuZXJhYmlsaXR5LgoKVGhpcyBwYXRjaCBhZGRyZXNzZXMgdGhpcyBpc3N1ZSBkaXJlY3RseS4gSXQgaW50cm9kdWNlcyBhIHRlbXBvcmFyeSB2YXJpYWJsZSwgYHRtcF9wb3J0YCwgdG8gaG9sZCB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgYHNpbXBsZV9zdHJ0b3VsYC4gVGhpcyBpcyBjcnVjaWFsLiBJdCB2YWxpZGF0ZXMgdGhlIHBvcnQgbnVtYmVyLCBub3cgZW5zdXJpbmcgaXQgaXMgYmV0d2VlbiAwIGFuZCA2NTUzNSwgYmVmb3JlIGNvbnZlcnRpbmcgdG8gbmV0d29yayBieXRlIG9yZGVyIHVzaW5nIGBodG9uc2AuIFRoaXMgaXMgYSBtdWNoIGJldHRlciBhcHByb2FjaC4KCk5vdywgbGV0JiMzOTtzIGNvbnNpZGVyIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gSSYjMzk7dmUgZXhhbWluZWQgdGhlIHZhcmlhYmxlcyBpbnZvbHZlZCwgYW5kIEkmIzM5O20gY29uZmlkZW50IHRoZXJlIGFyZSBubyBzdWNoIHJpc2tzLiBgdG1wX3BvcnRgIGlzIGRpcmVjdGx5IGluaXRpYWxpemVkIGJ5IGBzaW1wbGVfc3RydG91bGAuIFRoZSBgcG9ydGAgaXMgYWxzbyBpbml0aWFsaXplZCBkaXJlY3RseS4gVGhlIGlucHV0IGJ1ZmZlciBgcGJ1ZmAgaXMgcG9wdWxhdGVkIGJ5IGBza2JfY29weV9iaXRzYCwgYW5kIG51bGwtdGVybWluYXRlZC4gRXZlcnl0aGluZyBzZWVtcyB0byBiZSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLiBObyB1bmluaXRpYWxpemVkIGRhdGEgaXMgYmVpbmcgYnJhbmNoZWQgb24gb3IgdXNlZCwgYW5kIG5vdGhpbmcgdW5pbml0aWFsaXplZCBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZS4KClRoZXJlZm9yZSwgdGhpcyBwYXRjaCBkZWZpbml0ZWx5IGRvZXMgKm5vdCoganVzdGlmeSBhIEtNU0FOIHNlc3Npb24uIEtNU0FOIGlzIGZvciBkZXRlY3RpbmcgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnksIHdoaWNoIGlzIGNsZWFybHkgbm90IHRoZSBjYXNlIGhlcmUuIFRoaXMgcGF0Y2ggc2ltcGx5IGZpeGVzIGEgcG9ydCBudW1iZXIgaW5wdXQgdmFsaWRhdGlvbiBpc3N1ZSDigJMgYW4gaW50ZWdlciBvdmVyZmxvdywgcmVhbGx5IOKAkyBpbiB0aGUgQW1hbmRhIGNvbm50cmFjayBoZWxwZXIuCgpGaW5hbGx5LCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgYW0gZm9sbG93aW5nIHRoZSBzdGFuZGFyZCBndWlkZWxpbmVzLiBgTmVlZHNLTVNBTmAgc2hvdWxkIGJlIGZhbHNlLiBUaGUgYEtNU0FOUmVhc29uaW5nYCBmaWVsZCBzaG91bGQgY2xlYXJseSBjb250cmFzdCBLQVNBTiB2ZXJzdXMgS01TQU4gYXBwbGljYWJpbGl0eSwgYnV0IHRoYXQgY29udHJhc3QgaXMgYWxyZWFkeSBjbGVhciBpbiBteSBhbmFseXNpczogdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgdGhlIHB1cnZpZXcgb2YgS01TQU4sIGFuZCB0aGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQgaGVyZS4gVGhlcmVmb3JlLCBteSBgc2V0LXJlc3VsdHNgIGNhbGwgd2lsbCBiZSBiYXNlZCBvbiB0aGF0IHVuZGVyc3RhbmRpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA0OjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIGludGVnZXIgcmFuZ2UgdmFsaWRhdGlvbiBpc3N1ZSBpbiB0aGUgQW1hbmRhIGNvbm50cmFjayBoZWxwZXIgKGBhbWFuZGFfaGVscGApIGJ5IHByb3Blcmx5IGNoZWNraW5nIHRoYXQgdGhlIHBhcnNlZCBwb3J0IG51bWJlciBkb2VzIG5vdCBleGNlZWQgNjU1MzUgYmVmb3JlIGNhc3RpbmcvY29udmVydGluZyBpdCB3aXRoIGBodG9ucygpYC5cblxuQWxsIG1vZGlmaWVkIGFuZCBzdXJyb3VuZGluZyB2YXJpYWJsZXMgKGB0bXBfcG9ydGAsIGBwb3J0YCwgYGxlbmAsIGBwYnVmYCkgYXJlIHN0cmljdGx5IGluaXRpYWxpemVkIGFuZCBkZXRlcm1pbmlzdGljLiBObyBoZWFwL3N0YWNrIHN0cnVjdHVyZXMgYXJlIGxlYWtlZCB0byB1c2VyIHNwYWNlLCBubyBjb25kaXRpb25hbCBicmFuY2hlcyByZWx5IG9uIHVuaW5pdGlhbGl6ZWQgc3RhdGUsIGFuZCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3NlcyBhcmUgaW50cm9kdWNlZCBvciBleHBvc2VkLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiBpbnRlZ2VyIHJhbmdlIHZhbGlkYXRpb24gaXNzdWUgaW4gdGhlIEFtYW5kYSBjb25udHJhY2sgaGVscGVyIChgYW1hbmRhX2hlbHBgKSBieSBwcm9wZXJseSBjaGVja2luZyB0aGF0IHRoZSBwYXJzZWQgcG9ydCBudW1iZXIgZG9lcyBub3QgZXhjZWVkIDY1NTM1IGJlZm9yZSBjYXN0aW5nL2NvbnZlcnRpbmcgaXQgd2l0aCBgaHRvbnMoKWAuXG5cbkFsbCBtb2RpZmllZCBhbmQgc3Vycm91bmRpbmcgdmFyaWFibGVzIChgdG1wX3BvcnRgLCBgcG9ydGAsIGBsZW5gLCBgcGJ1ZmApIGFyZSBzdHJpY3RseSBpbml0aWFsaXplZCBhbmQgZGV0ZXJtaW5pc3RpYy4gTm8gaGVhcC9zdGFjayBzdHJ1Y3R1cmVzIGFyZSBsZWFrZWQgdG8gdXNlciBzcGFjZSwgbm8gY29uZGl0aW9uYWwgYnJhbmNoZXMgcmVseSBvbiB1bmluaXRpYWxpemVkIHN0YXRlLCBhbmQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzZXMgYXJlIGludHJvZHVjZWQgb3IgZXhwb3NlZC4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNDozMDoxOC4yNzYwMzg3NTNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTUyMTcyMTIzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORl9DT05OVFJBQ0tfQU1BTkRBXCIsXG4gICAgXCJORl9DT05OVFJBQ0tcIixcbiAgICBcIk5FVEZJTFRFUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFtYW5kYV9oZWxwXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBpbnRlZ2VyIHJhbmdlIHZhbGlkYXRpb24gaXNzdWUgaW4gdGhlIEFtYW5kYSBjb25udHJhY2sgaGVscGVyIChgYW1hbmRhX2hlbHBgKSBieSBwcm9wZXJseSBjaGVja2luZyB0aGF0IHRoZSBwYXJzZWQgcG9ydCBudW1iZXIgZG9lcyBub3QgZXhjZWVkIDY1NTM1IGJlZm9yZSBjYXN0aW5nL2NvbnZlcnRpbmcgaXQgd2l0aCBgaHRvbnMoKWAuXFxuXFxuQWxsIG1vZGlmaWVkIGFuZCBzdXJyb3VuZGluZyB2YXJpYWJsZXMgKGB0bXBfcG9ydGAsIGBwb3J0YCwgYGxlbmAsIGBwYnVmYCkgYXJlIHN0cmljdGx5IGluaXRpYWxpemVkIGFuZCBkZXRlcm1pbmlzdGljLiBObyBoZWFwL3N0YWNrIHN0cnVjdHVyZXMgYXJlIGxlYWtlZCB0byB1c2VyIHNwYWNlLCBubyBjb25kaXRpb25hbCBicmFuY2hlcyByZWx5IG9uIHVuaW5pdGlhbGl6ZWQgc3RhdGUsIGFuZCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3NlcyBhcmUgaW50cm9kdWNlZCBvciBleHBvc2VkLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgcG9ydCBwYXJzaW5nIGFuZCBib3VuZHMgdmFsaWRhdGlvbiBsb2dpYyBpbiB0aGUgQW1hbmRhIGNvbm50cmFjayBoZWxwZXIgKGFtYW5kYV9oZWxwKSB0byBjb3JyZWN0bHkgcmVqZWN0IHBvcnQgdmFsdWVzIGdyZWF0ZXIgdGhhbiA2NTUzNSBhbmQgcHJldmVudCB0cnVuY2F0aW9uIGJlZm9yZSByYW5nZSBjaGVja2luZy4gVGhpcyBpcyByZWFjaGFibGUgbmV0d29ya2luZyBjb2RlIGluIE5ldGZpbHRlci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDQ6MzA6MTguMjc2MDQzNzczWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDg2ODU1NTExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMGIwZGJiYTMyNjIwZjdmOWI2ODk2MzNiM2IyNzMwMzNlYzlmZGM0YlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIFNlcCA3IDA0OjMwOjE2IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmNcXG5pbmRleCAxNGFlNjYwNDkxZjM2Li4wNTdjZWY3ZTJhN2VkIDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmNcXG5AQCAtOTEsNiArOTEsNyBAQCBzdGF0aWMgaW50IGFtYW5kYV9oZWxwKHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdGNoYXIgcGJ1ZltzaXplb2YoXFxcIjY1NTM1XFxcIildLCAqdG1wO1xcbiBcXHR1MTYgbGVuO1xcbiBcXHRfX2JlMTYgcG9ydDtcXG4rXFx0dW5zaWduZWQgbG9uZyB0bXBfcG9ydDtcXG4gXFx0aW50IHJldCA9IE5GX0FDQ0VQVDtcXG4gXFx0bmZfbmF0X2FtYW5kYV9ob29rX2ZuICpuZl9uYXRfYW1hbmRhO1xcbiBcXG5AQCAtMTMyLDEwICsxMzMsMTEgQEAgc3RhdGljIGludCBhbWFuZGFfaGVscChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0cGJ1ZltsZW5dID0gJ1xcXFwwJztcXG4gXFxuLVxcdFxcdHBvcnQgPSBodG9ucyhzaW1wbGVfc3RydG91bChwYnVmLCBcXHUwMDI2dG1wLCAxMCkpO1xcbitcXHRcXHR0bXBfcG9ydCA9IHNpbXBsZV9zdHJ0b3VsKHBidWYsIFxcdTAwMjZ0bXAsIDEwKTtcXG4gXFx0XFx0bGVuID0gdG1wIC0gcGJ1ZjtcXG4tXFx0XFx0aWYgKHBvcnQgPT0gMCB8fCBsZW4gXFx1MDAzZSA1KVxcbitcXHRcXHRpZiAodG1wX3BvcnQgPT0gMCB8fCB0bXBfcG9ydCBcXHUwMDNlIDY1NTM1IHx8IGxlbiBcXHUwMDNlIDUpXFxuIFxcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRwb3J0ID0gaHRvbnModG1wX3BvcnQpO1xcbiBcXG4gXFx0XFx0ZXhwID0gbmZfY3RfZXhwZWN0X2FsbG9jKGN0KTtcXG4gXFx0XFx0aWYgKGV4cCA9PSBOVUxMKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA0OjMwOjE5Ljc2Mzg2MjU2NFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTc5ODkzNTkxOTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZfQ09OTlRSQUNLX0FNQU5EQVwiLFxuICAgIFwiTkZfQ09OTlRSQUNLXCIsXG4gICAgXCJORVRGSUxURVJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhbWFuZGFfaGVscFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHBvcnQgcGFyc2luZyBhbmQgYm91bmRzIHZhbGlkYXRpb24gbG9naWMgaW4gdGhlIEFtYW5kYSBjb25udHJhY2sgaGVscGVyIChhbWFuZGFfaGVscCkgdG8gY29ycmVjdGx5IHJlamVjdCBwb3J0IHZhbHVlcyBncmVhdGVyIHRoYW4gNjU1MzUgYW5kIHByZXZlbnQgdHJ1bmNhdGlvbiBiZWZvcmUgcmFuZ2UgY2hlY2tpbmcuIFRoaXMgaXMgcmVhY2hhYmxlIG5ldHdvcmtpbmcgY29kZSBpbiBOZXRmaWx0ZXIuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMGIwZGJiYTMyNjIwZjdmOWI2ODk2MzNiM2IyNzMwMzNlYzlmZGM0YlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDcgMDQ6MzA6MTYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jXG5pbmRleCAxNGFlNjYwNDkxZjM2Li4wNTdjZWY3ZTJhN2VkIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jXG5AQCAtOTEsNiArOTEsNyBAQCBzdGF0aWMgaW50IGFtYW5kYV9oZWxwKHN0cnVjdCBza19idWZmICpza2IsXG4gXHRjaGFyIHBidWZbc2l6ZW9mKFwiNjU1MzVcIildLCAqdG1wO1xuIFx0dTE2IGxlbjtcbiBcdF9fYmUxNiBwb3J0O1xuK1x0dW5zaWduZWQgbG9uZyB0bXBfcG9ydDtcbiBcdGludCByZXQgPSBORl9BQ0NFUFQ7XG4gXHRuZl9uYXRfYW1hbmRhX2hvb2tfZm4gKm5mX25hdF9hbWFuZGE7XG4gXG5AQCAtMTMyLDEwICsxMzMsMTEgQEAgc3RhdGljIGludCBhbWFuZGFfaGVscChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdGJyZWFrO1xuIFx0XHRwYnVmW2xlbl0gPSAnXFwwJztcbiBcbi1cdFx0cG9ydCA9IGh0b25zKHNpbXBsZV9zdHJ0b3VsKHBidWYsIFx1MDAyNnRtcCwgMTApKTtcbitcdFx0dG1wX3BvcnQgPSBzaW1wbGVfc3RydG91bChwYnVmLCBcdTAwMjZ0bXAsIDEwKTtcbiBcdFx0bGVuID0gdG1wIC0gcGJ1Zjtcbi1cdFx0aWYgKHBvcnQgPT0gMCB8fCBsZW4gXHUwMDNlIDUpXG4rXHRcdGlmICh0bXBfcG9ydCA9PSAwIHx8IHRtcF9wb3J0IFx1MDAzZSA2NTUzNSB8fCBsZW4gXHUwMDNlIDUpXG4gXHRcdFx0YnJlYWs7XG4rXHRcdHBvcnQgPSBodG9ucyh0bXBfcG9ydCk7XG4gXG4gXHRcdGV4cCA9IG5mX2N0X2V4cGVjdF9hbGxvYyhjdCk7XG4gXHRcdGlmIChleHAgPT0gTlVMTCkge1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDQ6MzA6MTkuNzYzODY2NDU0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjE2OTM5NDY0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEFtYW5kYSBDb25udHJhY2sgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaCBhbmQgdGhlIGFzc29jaWF0ZWQgcmV2aWV3IHJlcXVlc3QuIEknbSBsb29raW5nIGF0IHRoZSBkaWZmIG5vdyBmb3IgYG5mX2Nvbm50cmFja19hbWFuZGEuY2AuIEhtbSwgdGhlIGNoYW5nZSBzZWVtcyBmb2N1c2VkIG9uIHRoZSBwb3J0IGhhbmRsaW5nIHdpdGhpbiB0aGUgYGFtYW5kYV9oZWxwYCBmdW5jdGlvbi4gU3BlY2lmaWNhbGx5LCBpdCBsb29rcyBsaWtlIHRoZXJlJ3MgYmVlbiBhIHN1YnRsZSBjaGFuZ2UgdG8gaG93IHRoZSBwb3J0IG51bWJlciwgd2hpY2ggaXMgY29taW5nIGluIGFzIGEgc3RyaW5nLCBpcyBjb252ZXJ0ZWQgdG8gYSBgX19iZTE2YCBmb3JtYXQuXG5cbkluaXRpYWxseSwgaXQgd2FzIHVzaW5nIGBzaW1wbGVfc3RydG91bGAgdG8gZGlyZWN0bHkgY29udmVydCB0aGUgc3RyaW5nIHRvIGEgYHUxNmAgYmVmb3JlIGNvbnZlcnRpbmcgdGhlIGB1MTZgIHRvIG5ldHdvcmsgYnl0ZSBvcmRlci4gTm93LCB0aGV5J3ZlIGludHJvZHVjZWQgYW4gaW50ZXJtZWRpYXRlIGB1bnNpZ25lZCBsb25nYCB2YXJpYWJsZSBjYWxsZWQgYHRtcF9wb3J0YC4gVGhpcyBpcyBpbW1lZGlhdGVseSByYWlzaW5nIGEgZmxhZyDigJMgY2hlY2tpbmcgdGhlIGxpbWl0cy4gSXQncyBnb29kIHRoZXkgYXJlIHZhbGlkYXRpbmcgYHRtcF9wb3J0YCB0byBiZSBiZXR3ZWVuIGAwYCBhbmQgYDY1NTM1YCBhbmQgdGhhdCB0aGUgbGVuZ3RoIGlzIGFwcHJvcHJpYXRlIGJlZm9yZSBjb252ZXJ0aW5nIGl0IHRvIG5ldHdvcmsgYnl0ZSBvcmRlci4gVGhpcyBpcyBhIHZlcnkgZ29vZCBhZGRpdGlvbiDigJMgcG90ZW50aWFsbHkgZ3VhcmRpbmcgYWdhaW5zdCBvdmVyZmxvd3Mgb3IgdW5leHBlY3RlZCB2YWx1ZXMgdGhhdCBtaWdodCBsZWFkIHRvIHZ1bG5lcmFiaWxpdGllcy4gTG9va3MgZ29vZDsgSSB3b3VsZCBoYXZlIGRvbmUgdGhlIHNhbWUuXG5cbkJlZm9yZSBJIGdpdmUgbXkgT0ssIEkgbmVlZCB0byBjb25maXJtIHRoZSBjaGFuZ2UgaXMgdGhlIGNvcnJlY3QgaGFuZGxpbmcuIEkgd2lsbCBjaGVjayB0aGUgcmVsYXRlZCBgS2NvbmZpZ2AgZm9yIHRoZSBmaWxlIGFuZCBjcm9zcyByZWZlcmVuY2Ugd2l0aCBncmVwcGVyIG9yIGZpbGUgcmVhZCB0byBtYWtlIHN1cmUgSSBhbSBub3QgbWlzc2luZyBhbnkgY2hhbmdlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA2OCwiT3V0cHV0VG9rZW5zIjo3MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0NSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA0OjMwOjI1LjkzMzI3NjU0M1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNTQ3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4MCxcbiAgXCJMaW5lQ291bnRcIjogOTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA4MDpcXHRcXHR9LFxcbiAgODE6XFx0fTtcXG4gIDgyOlxcdFxcbiAgODM6XFx0c3RhdGljIGludCBhbWFuZGFfaGVscChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiAgODQ6XFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGludCBwcm90b2ZmLFxcbiAgODU6XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBuZl9jb25uICpjdCxcXG4gIDg2OlxcdFxcdFxcdCAgICAgICBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbylcXG4gIDg3OlxcdHtcXG4gIDg4OlxcdFxcdHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHA7XFxuICA4OTpcXHRcXHRzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZTtcXG4gIDkwOlxcdFxcdHVuc2lnbmVkIGludCBkYXRhb2ZmLCBzdGFydCwgc3RvcCwgb2ZmLCBpO1xcbiAgOTE6XFx0XFx0Y2hhciBwYnVmW3NpemVvZihcXFwiNjU1MzVcXFwiKV0sICp0bXA7XFxuICA5MjpcXHRcXHR1MTYgbGVuO1xcbiAgOTM6XFx0XFx0X19iZTE2IHBvcnQ7XFxuICA5NDpcXHRcXHR1bnNpZ25lZCBsb25nIHRtcF9wb3J0O1xcbiAgOTU6XFx0XFx0aW50IHJldCA9IE5GX0FDQ0VQVDtcXG4gIDk2OlxcdFxcdG5mX25hdF9hbWFuZGFfaG9va19mbiAqbmZfbmF0X2FtYW5kYTtcXG4gIDk3OlxcdFxcbiAgOTg6XFx0XFx0LyogT25seSBsb29rIGF0IHBhY2tldHMgZnJvbSB0aGUgQW1hbmRhIHNlcnZlciAqL1xcbiAgOTk6XFx0XFx0aWYgKENUSU5GTzJESVIoY3RpbmZvKSA9PSBJUF9DVF9ESVJfT1JJR0lOQUwpXFxuIDEwMDpcXHRcXHRcXHRyZXR1cm4gTkZfQUNDRVBUO1xcbiAxMDE6XFx0XFxuIDEwMjpcXHRcXHQvKiBpbmNyZWFzZSB0aGUgVURQIHRpbWVvdXQgb2YgdGhlIG1hc3RlciBjb25uZWN0aW9uIGFzIHJlcGxpZXMgZnJvbVxcbiAxMDM6XFx0XFx0ICogQW1hbmRhIGNsaWVudHMgdG8gdGhlIHNlcnZlciBjYW4gYmUgcXVpdGUgZGVsYXllZCAqL1xcbiAxMDQ6XFx0XFx0bmZfY3RfcmVmcmVzaChjdCwgbWFzdGVyX3RpbWVvdXQgKiBIWik7XFxuIDEwNTpcXHRcXG4gMTA2OlxcdFxcdC8qIE5vIGRhdGE/ICovXFxuIDEwNzpcXHRcXHRkYXRhb2ZmID0gcHJvdG9mZiArIHNpemVvZihzdHJ1Y3QgdWRwaGRyKTtcXG4gMTA4OlxcdFxcdGlmIChkYXRhb2ZmIFxcdTAwM2U9IHNrYi1cXHUwMDNlbGVuKSB7XFxuIDEwOTpcXHRcXHRcXHRuZXRfZXJyX3JhdGVsaW1pdGVkKFxcXCJhbWFuZGFfaGVscDogc2tibGVuID0gJXVcXFxcblxcXCIsIHNrYi1cXHUwMDNlbGVuKTtcXG4gMTEwOlxcdFxcdFxcdHJldHVybiBORl9BQ0NFUFQ7XFxuIDExMTpcXHRcXHR9XFxuIDExMjpcXHRcXG4gMTEzOlxcdFxcdHN0YXJ0ID0gc2tiX2ZpbmRfdGV4dChza2IsIGRhdGFvZmYsIHNrYi1cXHUwMDNlbGVuLFxcbiAxMTQ6XFx0XFx0XFx0XFx0ICAgICAgc2VhcmNoW1NFQVJDSF9DT05ORUNUXS50cyk7XFxuIDExNTpcXHRcXHRpZiAoc3RhcnQgPT0gVUlOVF9NQVgpXFxuIDExNjpcXHRcXHRcXHRnb3RvIG91dDtcXG4gMTE3OlxcdFxcdHN0YXJ0ICs9IGRhdGFvZmYgKyBzZWFyY2hbU0VBUkNIX0NPTk5FQ1RdLmxlbjtcXG4gMTE4OlxcdFxcbiAxMTk6XFx0XFx0c3RvcCA9IHNrYl9maW5kX3RleHQoc2tiLCBzdGFydCwgc2tiLVxcdTAwM2VsZW4sXFxuIDEyMDpcXHRcXHRcXHRcXHQgICAgIHNlYXJjaFtTRUFSQ0hfTkVXTElORV0udHMpO1xcbiAxMjE6XFx0XFx0aWYgKHN0b3AgPT0gVUlOVF9NQVgpXFxuIDEyMjpcXHRcXHRcXHRnb3RvIG91dDtcXG4gMTIzOlxcdFxcdHN0b3AgKz0gc3RhcnQ7XFxuIDEyNDpcXHRcXG4gMTI1OlxcdFxcdGZvciAoaSA9IFNFQVJDSF9EQVRBOyBpIFxcdTAwM2M9IFNFQVJDSF9TVEFURTsgaSsrKSB7XFxuIDEyNjpcXHRcXHRcXHRvZmYgPSBza2JfZmluZF90ZXh0KHNrYiwgc3RhcnQsIHN0b3AsIHNlYXJjaFtpXS50cyk7XFxuIDEyNzpcXHRcXHRcXHRpZiAob2ZmID09IFVJTlRfTUFYKVxcbiAxMjg6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDEyOTpcXHRcXHRcXHRvZmYgKz0gc3RhcnQgKyBzZWFyY2hbaV0ubGVuO1xcbiAxMzA6XFx0XFxuIDEzMTpcXHRcXHRcXHRsZW4gPSBtaW5fdCh1bnNpZ25lZCBpbnQsIHNpemVvZihwYnVmKSAtIDEsIHN0b3AgLSBvZmYpO1xcbiAxMzI6XFx0XFx0XFx0aWYgKHNrYl9jb3B5X2JpdHMoc2tiLCBvZmYsIHBidWYsIGxlbikpXFxuIDEzMzpcXHRcXHRcXHRcXHRicmVhaztcXG4gMTM0OlxcdFxcdFxcdHBidWZbbGVuXSA9ICdcXFxcMCc7XFxuIDEzNTpcXHRcXG4gMTM2OlxcdFxcdFxcdHRtcF9wb3J0ID0gc2ltcGxlX3N0cnRvdWwocGJ1ZiwgXFx1MDAyNnRtcCwgMTApO1xcbiAxMzc6XFx0XFx0XFx0bGVuID0gdG1wIC0gcGJ1ZjtcXG4gMTM4OlxcdFxcdFxcdGlmICh0bXBfcG9ydCA9PSAwIHx8IHRtcF9wb3J0IFxcdTAwM2UgNjU1MzUgfHwgbGVuIFxcdTAwM2UgNSlcXG4gMTM5OlxcdFxcdFxcdFxcdGJyZWFrO1xcbiAxNDA6XFx0XFx0XFx0cG9ydCA9IGh0b25zKHRtcF9wb3J0KTtcXG4gMTQxOlxcdFxcbiAxNDI6XFx0XFx0XFx0ZXhwID0gbmZfY3RfZXhwZWN0X2FsbG9jKGN0KTtcXG4gMTQzOlxcdFxcdFxcdGlmIChleHAgPT0gTlVMTCkge1xcbiAxNDQ6XFx0XFx0XFx0XFx0bmZfY3RfaGVscGVyX2xvZyhza2IsIGN0LCBcXFwiY2Fubm90IGFsbG9jIGV4cGVjdGF0aW9uXFxcIik7XFxuIDE0NTpcXHRcXHRcXHRcXHRyZXQgPSBORl9EUk9QO1xcbiAxNDY6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuIDE0NzpcXHRcXHRcXHR9XFxuIDE0ODpcXHRcXHRcXHR0dXBsZSA9IFxcdTAwMjZjdC1cXHUwMDNldHVwbGVoYXNoW0lQX0NUX0RJUl9PUklHSU5BTF0udHVwbGU7XFxuIDE0OTpcXHRcXHRcXHRuZl9jdF9leHBlY3RfaW5pdChleHAsIE5GX0NUX0VYUEVDVF9DTEFTU19ERUZBVUxULFxcbiAxNTA6XFx0XFx0XFx0XFx0XFx0ICBuZl9jdF9sM251bShjdCksXFxuIDE1MTpcXHRcXHRcXHRcXHRcXHQgIFxcdTAwMjZ0dXBsZS1cXHUwMDNlc3JjLnUzLCBcXHUwMDI2dHVwbGUtXFx1MDAzZWRzdC51MyxcXG4gMTUyOlxcdFxcdFxcdFxcdFxcdCAgSVBQUk9UT19UQ1AsIE5VTEwsIFxcdTAwMjZwb3J0KTtcXG4gMTUzOlxcdFxcbiAxNTQ6XFx0XFx0XFx0bmZfbmF0X2FtYW5kYSA9IHJjdV9kZXJlZmVyZW5jZShuZl9uYXRfYW1hbmRhX2hvb2spO1xcbiAxNTU6XFx0XFx0XFx0aWYgKG5mX25hdF9hbWFuZGEgXFx1MDAyNlxcdTAwMjYgY3QtXFx1MDAzZXN0YXR1cyBcXHUwMDI2IElQU19OQVRfTUFTSylcXG4gMTU2OlxcdFxcdFxcdFxcdHJldCA9IG5mX25hdF9hbWFuZGEoc2tiLCBjdCwgY3RpbmZvLCBwcm90b2ZmLFxcbiAxNTc6XFx0XFx0XFx0XFx0XFx0XFx0ICAgIG9mZiAtIGRhdGFvZmYsIGxlbiwgZXhwKTtcXG4gMTU4OlxcdFxcdFxcdGVsc2UgaWYgKG5mX2N0X2V4cGVjdF9yZWxhdGVkKGV4cCwgMCkgIT0gMCkge1xcbiAxNTk6XFx0XFx0XFx0XFx0bmZfY3RfaGVscGVyX2xvZyhza2IsIGN0LCBcXFwiY2Fubm90IGFkZCBleHBlY3RhdGlvblxcXCIpO1xcbiAxNjA6XFx0XFx0XFx0XFx0cmV0ID0gTkZfRFJPUDtcXG4gMTYxOlxcdFxcdFxcdH1cXG4gMTYyOlxcdFxcdFxcdG5mX2N0X2V4cGVjdF9wdXQoZXhwKTtcXG4gMTYzOlxcdFxcdH1cXG4gMTY0OlxcdFxcbiAxNjU6XFx0b3V0OlxcbiAxNjY6XFx0XFx0cmV0dXJuIHJldDtcXG4gMTY3OlxcdH1cXG4gMTY4OlxcdFxcbiAxNjk6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0X3BvbGljeSBhbWFuZGFfZXhwX3BvbGljeSA9IHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDQ6MzA6MjUuOTMzMzkzNzQzWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MTg4MTEyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJORl9DT05OVFJBQ0tfQU1BTkRBXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnPTIwMT1jb25maWcgTkZfQ1RfUFJPVE9fU0NUUFxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTIxMS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MjEyOmNvbmZpZyBORl9DT05OVFJBQ0tfQU1BTkRBXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTIxMy1cXHR0cmlzdGF0ZSBcXFwiQW1hbmRhIGJhY2t1cCBwcm90b2NvbCBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnPTQxNj1jb25maWcgTkZfTkFUX0FNQU5EQVxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQxOC1cXHRkZXBlbmRzIG9uIE5GX0NPTk5UUkFDSyBcXHUwMDI2XFx1MDAyNiBORl9OQVRcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NDE5OlxcdGRlZmF1bHQgTkZfTkFUIFxcdTAwMjZcXHUwMDI2IE5GX0NPTk5UUkFDS19BTUFOREFcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDIwLVxcbi0tXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZT00Mj1uZl9jb25udHJhY2tfaDMyMy1vYmpzIDo9IG5mX2Nvbm50cmFja19oMzIzX21haW4ubyBuZl9jb25udHJhY2tfaDMyM19hc24xLm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTQzLVxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6NDQ6b2JqLSQoQ09ORklHX05GX0NPTk5UUkFDS19BTUFOREEpICs9IG5mX2Nvbm50cmFja19hbWFuZGEub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtNDUtb2JqLSQoQ09ORklHX05GX0NPTk5UUkFDS19GVFApICs9IG5mX2Nvbm50cmFja19mdHAub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNDozMDoyNi4wODUyOTIwNzhaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDM2Mjk1MzUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgYEtjb25maWdgIGZvciBDb25uZWN0aW9uIFRyYWNraW5nIGFuZCBBbWFuZGEqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgaW50ZXJhY3RzIHdpdGggQW1hbmRhLCBzcGVjaWZpY2FsbHkuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBkaXZlIHN0cmFpZ2h0IGludG8gdGhlIGBLY29uZmlnYCBmaWxlcyDigJMgdGhhdCdzIHdoZXJlIHRoZSBoZWFydCBvZiBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIGRlcGVuZGVuY2llcyBsaWVzLCByaWdodD8gSSdtIGdvaW5nIHRvIHBpbnBvaW50IHRoZSBzZWN0aW9uIHJlbGF0ZWQgdG8gYE5GX0NPTk5UUkFDS19BTUFOREFgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGRlcGVuZGVuY2llcyB0aGlzIGZlYXR1cmUgaGFzLiBJcyBpdCBkZXBlbmRlbnQgb24gb3RoZXIgY29ubmVjdGlvbiB0cmFja2luZyBvcHRpb25zPyBXaGF0IG90aGVyIGZ1bmN0aW9uYWxpdGllcyBnZXQgYWZmZWN0ZWQgaWYgdGhpcyBpcyBlbmFibGVkIG9yIGRpc2FibGVkPyBJJ2xsIHByb2JhYmx5IGxvb2sgZm9yIHRoZSB0eXBpY2FsIGBkZXBlbmRzIG9uYCwgYHNlbGVjdGAsIG9yIGV2ZW4gYW55IGBkZWZhdWx0YCBvcHRpb25zIHRoYXQgbWlnaHQgZ2l2ZSBtZSBoaW50cyBhYm91dCB0aGUgYnJvYWRlciBwaWN0dXJlLiBNeSBnb2FsIGlzIHRvIHF1aWNrbHkgZ3Jhc3AgdGhlIGltcGxpY2F0aW9ucyBvZiBlbmFibGluZyBvciBkaXNhYmxpbmcgdGhpcyBmZWF0dXJlLCBzbyBJJ2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIG9uIGhvdyBpdCBhZmZlY3RzIHRoZSBidWlsZCBlbnZpcm9ubWVudCBhbmQgdWx0aW1hdGVseSwgaG93IGl0IGNoYW5nZXMgdGhlIGJlaGF2aW9yIG9mIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIGltcGxlbWVudGF0aW9uIGl0c2VsZi4gRnJvbSB0aGVyZSwgSSBjYW4gYmVnaW4gdG8gZm9ybSBhIGNvbXBsZXRlIHVuZGVyc3RhbmRpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU2MzMsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSIsImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNDozMDoyOC4xMjE1OTE2NDJaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjM0ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIxMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDIxMDpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IFkuXFxuIDIxMTpcXHRcXG4gMjEyOlxcdGNvbmZpZyBORl9DT05OVFJBQ0tfQU1BTkRBXFxuIDIxMzpcXHRcXHR0cmlzdGF0ZSBcXFwiQW1hbmRhIGJhY2t1cCBwcm90b2NvbCBzdXBwb3J0XFxcIlxcbiAyMTQ6XFx0XFx0ZGVwZW5kcyBvbiBORVRGSUxURVJfQURWQU5DRURcXG4gMjE1OlxcdFxcdHNlbGVjdCBURVhUU0VBUkNIXFxuIDIxNjpcXHRcXHRzZWxlY3QgVEVYVFNFQVJDSF9LTVBcXG4gMjE3OlxcdFxcdGhlbHBcXG4gMjE4OlxcdFxcdCAgSWYgeW91IGFyZSBydW5uaW5nIHRoZSBBbWFuZGEgYmFja3VwIHBhY2thZ2UgXFx1MDAzY2h0dHA6Ly93d3cuYW1hbmRhLm9yZy9cXHUwMDNlXFxuIDIxOTpcXHRcXHQgIG9uIHRoaXMgbWFjaGluZSBvciBtYWNoaW5lcyB0aGF0IHdpbGwgYmUgTUFTUVVFUkFERUQgdGhyb3VnaCB0aGlzXFxuIDIyMDpcXHRcXHQgIG1hY2hpbmUsIHRoZW4geW91IG1heSB3YW50IHRvIGVuYWJsZSB0aGlzIGZlYXR1cmUuICBUaGlzIGFsbG93cyB0aGVcXG4gMjIxOlxcdFxcdCAgY29ubmVjdGlvbiB0cmFja2luZyBhbmQgbmF0dGluZyBjb2RlIHRvIGFsbG93IHRoZSBzdWItY2hhbm5lbHMgdGhhdFxcbiAyMjI6XFx0XFx0ICBBbWFuZGEgcmVxdWlyZXMgZm9yIGNvbW11bmljYXRpb24gb2YgdGhlIGJhY2t1cCBkYXRhLCBtZXNzYWdlcyBhbmRcXG4gMjIzOlxcdFxcdCAgaW5kZXguXFxuIDIyNDpcXHRcXG4gMjI1OlxcdFxcdCAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gIElmIHVuc3VyZSwgc2F5IE4uXFxuIDIyNjpcXHRcXG4gMjI3OlxcdGNvbmZpZyBORl9DT05OVFJBQ0tfRlRQXFxuIDIyODpcXHRcXHR0cmlzdGF0ZSBcXFwiRlRQIHByb3RvY29sIHN1cHBvcnRcXFwiXFxuIDIyOTpcXHRcXHRkZWZhdWx0IG0gaWYgTkVURklMVEVSX0FEVkFOQ0VEPW5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDQ6MzA6MjguMTIxNzU4MzQyWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTc0MDA5MzE1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6XG5cbioqSW52ZXN0aWdhdGluZyBORl9DT05OVFJBQ0sgaW4gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uKipcblxuT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gZmlndXJlIG91dCBleGFjdGx5IGhvdyBgTkZfQ09OTlRSQUNLYCBpcyBkZWZpbmVkIGFuZCB3aGVyZSBpdCBsaXZlcyB3aXRoaW4gdGhlIGtlcm5lbCdzIGNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byBkaXZlIGludG8gYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2Agc3BlY2lmaWNhbGx5LiBJIHN1c3BlY3QgaXQncyBlaXRoZXIgZGlyZWN0bHkgaW4gdGhlcmUgYXMgYSB0b3AtbGV2ZWwgb3B0aW9uIG9yIG1pZ2h0IGJlIGhpZGRlbiBiZWhpbmQgc29tZSBkZXBlbmRlbmNpZXMuIEdvdHRhIGVuc3VyZSBpdCBpc24ndCBkZXBlbmRlbnQgb24gYW5vdGhlciBtb3JlIG9ic2N1cmUgc2V0dGluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGV4YWN0IHBsYWNlIGluIHRoZSBjb25maWd1cmF0aW9uIGhpZXJhcmNoeSwgaXRzIHBvdGVudGlhbCBkZXBlbmRlbmNpZXMsIGFuZCBpZiBpdCdzIGV2ZW4gZXhwb3NlZCBkaXJlY3RseSBmb3IgY3VzdG9taXphdGlvbi4gVGhpcyBpbmZvcm1hdGlvbiBpcyBjcnVjaWFsIGZvciBhbnkgcG90ZW50aWFsIG1vZGlmaWNhdGlvbnMgb3IgdHJvdWJsZXNob290aW5nIGRvd24gdGhlIGxpbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYyMjUsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA0OjMwOjI5Ljg2MTg1NTYxMloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NDI1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdG1lbnUgXFxcIkNvcmUgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb25cXFwiXFxuICAgMzpcXHRcXHRkZXBlbmRzIG9uIElORVQgXFx1MDAyNlxcdTAwMjYgTkVURklMVEVSXFxuICAgNDpcXHRcXG4gICA1OlxcdGNvbmZpZyBORVRGSUxURVJfSU5HUkVTU1xcbiAgIDY6XFx0XFx0Ym9vbCBcXFwiTmV0ZmlsdGVyIGluZ3Jlc3Mgc3VwcG9ydFxcXCJcXG4gICA3OlxcdFxcdGRlZmF1bHQgeVxcbiAgIDg6XFx0XFx0c2VsZWN0IE5FVF9JTkdSRVNTXFxuICAgOTpcXHRcXHRoZWxwXFxuICAxMDpcXHRcXHQgIFRoaXMgYWxsb3dzIHlvdSB0byBjbGFzc2lmeSBwYWNrZXRzIGZyb20gaW5ncmVzcyB1c2luZyB0aGUgTmV0ZmlsdGVyXFxuICAxMTpcXHRcXHQgIGluZnJhc3RydWN0dXJlLlxcbiAgMTI6XFx0XFxuICAxMzpcXHRjb25maWcgTkVURklMVEVSX0VHUkVTU1xcbiAgMTQ6XFx0XFx0Ym9vbCBcXFwiTmV0ZmlsdGVyIGVncmVzcyBzdXBwb3J0XFxcIlxcbiAgMTU6XFx0XFx0ZGVmYXVsdCB5XFxuICAxNjpcXHRcXHRzZWxlY3QgTkVUX0VHUkVTU1xcbiAgMTc6XFx0XFx0aGVscFxcbiAgMTg6XFx0XFx0ICBUaGlzIGFsbG93cyB5b3UgdG8gY2xhc3NpZnkgcGFja2V0cyBiZWZvcmUgdHJhbnNtaXNzaW9uIHVzaW5nIHRoZVxcbiAgMTk6XFx0XFx0ICBOZXRmaWx0ZXIgaW5mcmFzdHJ1Y3R1cmUuXFxuICAyMDpcXHRcXG4gIDIxOlxcdGNvbmZpZyBORVRGSUxURVJfU0tJUF9FR1JFU1NcXG4gIDIyOlxcdFxcdGRlZl9ib29sIE5FVEZJTFRFUl9FR1JFU1MgXFx1MDAyNlxcdTAwMjYgKE5FVF9DTFNfQUNUIHx8IElGQilcXG4gIDIzOlxcdFxcbiAgMjQ6XFx0Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LXFxuICAyNTpcXHRcXHRib29sXFxuICAyNjpcXHRcXG4gIDI3OlxcdGNvbmZpZyBORVRGSUxURVJfRkFNSUxZX0JSSURHRVxcbiAgMjg6XFx0XFx0Ym9vbFxcbiAgMjk6XFx0XFxuICAzMDpcXHRjb25maWcgTkVURklMVEVSX0ZBTUlMWV9BUlBcXG4gIDMxOlxcdFxcdGJvb2xcXG4gIDMyOlxcdFxcbiAgMzM6XFx0Y29uZmlnIE5FVEZJTFRFUl9CUEZfTElOS1xcbiAgMzQ6XFx0XFx0ZGVmX2Jvb2wgQlBGX1NZU0NBTExcXG4gIDM1OlxcdFxcbiAgMzY6XFx0Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX0hPT0tcXG4gIDM3OlxcdFxcdHRyaXN0YXRlIFxcXCJOZXRmaWx0ZXIgYmFzZSBob29rIGR1bXAgc3VwcG9ydFxcXCJcXG4gIDM4OlxcdFxcdGRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VEXFxuICAzOTpcXHRcXHRkZXBlbmRzIG9uIE5GX1RBQkxFU1xcbiAgNDA6XFx0XFx0c2VsZWN0IE5FVEZJTFRFUl9ORVRMSU5LXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA0OjMwOjI5Ljg2MjAwMjMzMloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MTc4ODIzMjQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQW1hbmRhIE5ldGZpbHRlciBDb25uZWN0aW9uIFRyYWNraW5nIEhlbHBlcioqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byBob3cgYG5mX2Nvbm50cmFja19hbWFuZGFgIGlzIGFjdHVhbGx5IHJlYWNoZWQuIFJpZ2h0LCBpdCdzIGEgbmV0ZmlsdGVyIGNvbm5lY3Rpb24gdHJhY2tpbmcgaGVscGVyIHNwZWNpZmljYWxseSBmb3IgdGhlIEFtYW5kYSBwcm90b2NvbC4gU28sIHdoZW4gY29ubnRyYWNrIGdldHMgYSBVRFAgcGFja2V0IHRoYXQgbWF0Y2hlcyB0aGUgaGVscGVyJ3MgcmVnaXN0ZXJlZCBwb3J0IOKAkyB3aGljaCwgYnkgZGVmYXVsdCwgaXMgMTAwODAsIG9yIGNvdWxkIGJlIGNvbmZpZ3VyZWQgdmlhIHRoZSBtb2R1bGUgcGFyYW1ldGVycyBvciBDVCBoZWxwZXIgcnVsZXMg4oCTIHRoZSBgYW1hbmRhX2hlbHBgIGZ1bmN0aW9uIGlzIGludm9rZWQuIEdvb2QuIEFsc28sIEkga25vdyB0aGF0IHBhY2tldCBpbmplY3Rpb24gYW5kIG5ldGZpbHRlciB0ZXN0aW5nIGluIHN5emthbGxlciByZWd1bGFybHkgZXhlcmNpc2VzIG5ldGZpbHRlciBjb25udHJhY2sgaGVscGVycyB1c2luZyBsb29wYmFjaywgdHVuLCB0YXAgaW50ZXJmYWNlcywgb3IgdmlhIG5mdGFibGVzL2lwdGFibGVzIENUIGhlbHBlciB0YXJnZXRzLlxuXG5Ob3csIHRoaXMgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIHdheSB0aGUgcG9ydCBpcyBwYXJzZWQuIFByZXZpb3VzbHksIHRoZSBjb2RlIHdhcyBsaWtlIHRoaXM6IGBwb3J0ID0gaHRvbnMoc2ltcGxlX3N0cnRvdWwocGJ1ZiwgXHUwMDI2dG1wLCAxMCkpO2AuIEVzc2VudGlhbGx5LCB0aGUgYGh0b25zKClgIGZ1bmN0aW9uIHdhcyBiZWluZyBjYWxsZWQgb24gYW4gYHVuc2lnbmVkIGxvbmdgIHJlc3VsdCBmcm9tIGBzaW1wbGVfc3RydG91bGAuIFRoZSBgcG9ydGAgdmFyaWFibGUgaXRzZWxmIHdhcyBhIGBfX2JlMTZgLiBUaGlzIG1lYW50IHRoYXQgaWYgYHNpbXBsZV9zdHJ0b3VsYCByZXR1cm5lZCBzb21ldGhpbmcgbGlrZSA2NTUzNiBvciAxMzEwNzIsIHRoZSBgcG9ydCA9PSAwYCBjaGVjayAqbWlnaHQqIGZhaWwsIG9yIHBhc3MgdW5leHBlY3RlZGx5LiBgaHRvbnNgIHdhcyB0cnVuY2F0aW5nIG9yIGNvbnZlcnRpbmcgdGhlIHZhbHVlLCBhbmQgdGhlcmUgd2FzIG5vIGNoZWNrIHRvIGVuc3VyZSB0aGUgcmVzdWx0IGRpZG4ndCBleGNlZWQgdGhlIG1heCB2YWx1ZS5cblxuU3BlY2lmaWNhbGx5LCBpZiBgc2ltcGxlX3N0cnRvdWxgIHBhcnNlZCBhIG51bWJlciBncmVhdGVyIHRoYW4gNjU1MzUsIGBodG9uc2Agd291bGQgc2ltcGx5IHRydW5jYXRlIGl0IHRvIDE2IGJpdHMuIE5vdywgdGhlIGZpeCBtYWtlcyB0aGluZ3MgbXVjaCBtb3JlIHJvYnVzdC4gSXQgc3RvcmVzIHRoZSByZXN1bHQgb2YgYHNpbXBsZV9zdHJ0b3VsYCBpbnRvIGB0bXBfcG9ydGAsIHdoaWNoIGlzIGFuIGB1bnNpZ25lZCBsb25nYC4gVGhlbiBpdCBjaGVja3MgZm9yIGB0bXBfcG9ydCA9PSAwIHx8IHRtcF9wb3J0IFx1MDAzZSA2NTUzNSB8fCBsZW4gXHUwMDNlIDVgLCBhbmQgKnRoZW4qIGFzc2lnbnMgYHBvcnQgPSBodG9ucyh0bXBfcG9ydClgLiBTbWFydC5cblxuVGhpcyBpcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCByaWdodCBpbiBjb3JlIG5ldHdvcmtpbmcsIGRlZXAgd2l0aGluIG5ldGZpbHRlci4gSG1tLCBpcyB0aGlzIHNvbWV0aGluZyB0aGF0J3Mgd29ydGggZnV6emluZz8gWWVzLCBJJ2Qgc2F5IHNvLiBgV29ydGhGdXp6aW5nPXRydWVgLlxuXG5MZXQncyBxdWlja2x5IGNoZWNrIHRoZSBgRm9jdXNTeW1ib2xzYC4gVGhlIG1vZGlmaWVkIGZ1bmN0aW9uIGlzIGBhbWFuZGFfaGVscGAuIE5vdyBsZXQncyBzZWUgaWYgdGhlcmUgYXJlIG90aGVyIGludGVyZXN0aW5nIGZ1bmN0aW9ucyBpbiBgbmZfY29ubnRyYWNrX2FtYW5kYS5jYCB0aGF0IGFyZSB3b3J0aCBteSBhdHRlbnRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY4OTAsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MjAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNDozMDozNC4wNDA4Mjg0NjFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MDAyMzMyNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeW2EtekEtWl9dLipcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuYz0yNT1zdGF0aWMgY2hhciAqdHNfYWxnbyA9IFxcXCJrbXBcXFwiO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmMtMjgtXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmM6Mjk6TU9EVUxFX0FVVEhPUihcXFwiQnJpYW4gSi4gTXVycmVsbCBcXHUwMDNjbmV0ZmlsdGVyQGludGVybGlueC5iYy5jYVxcdTAwM2VcXFwiKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuYzozMDpNT0RVTEVfREVTQ1JJUFRJT04oXFxcIkFtYW5kYSBjb25uZWN0aW9uIHRyYWNraW5nIG1vZHVsZVxcXCIpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jOjMxOk1PRFVMRV9MSUNFTlNFKFxcXCJHUExcXFwiKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuYzozMjpNT0RVTEVfQUxJQVMoXFxcImlwX2Nvbm50cmFja19hbWFuZGFcXFwiKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuYzozMzpNT0RVTEVfQUxJQVNfTkZDVF9IRUxQRVIoSEVMUEVSX05BTUUpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jLTM0LVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jOjM1Om1vZHVsZV9wYXJhbShtYXN0ZXJfdGltZW91dCwgdWludCwgMDYwMCk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmM6MzY6TU9EVUxFX1BBUk1fREVTQyhtYXN0ZXJfdGltZW91dCwgXFxcInRpbWVvdXQgZm9yIHRoZSBtYXN0ZXIgY29ubmVjdGlvblxcXCIpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jOjM3Om1vZHVsZV9wYXJhbSh0c19hbGdvLCBjaGFycCwgMDQwMCk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmM6Mzg6TU9EVUxFX1BBUk1fREVTQyh0c19hbGdvLCBcXFwidGV4dHNlYXJjaCBhbGdvcml0aG0gdG8gdXNlIChkZWZhdWx0IGttcClcXFwiKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuYy0zOS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuYz00MD1uZl9uYXRfYW1hbmRhX2hvb2tfZm4gX19yY3UgKm5mX25hdF9hbWFuZGFfaG9vayBfX3JlYWRfbW9zdGx5O1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jOjQxOkVYUE9SVF9TWU1CT0xfR1BMKG5mX25hdF9hbWFuZGFfaG9vayk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmMtNDItXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuYz01Mj1zdGF0aWMgc3RydWN0IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jLTgyLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jOjgzOnN0YXRpYyBpbnQgYW1hbmRhX2hlbHAoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuYy04NC1cXHRcXHQgICAgICAgdW5zaWduZWQgaW50IHByb3RvZmYsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuYz0xNzU9c3RhdGljIHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICphbWFuZGFfaGVscGVyX3B0clsyXSBfX3JlYWRfbW9zdGx5O1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jLTE3Ni1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuYzoxNzc6c3RhdGljIHZvaWQgX19leGl0IG5mX2Nvbm50cmFja19hbWFuZGFfZmluaSh2b2lkKVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jLTE3OC17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuYy0xODYtXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmM6MTg3OnN0YXRpYyBpbnQgX19pbml0IG5mX2Nvbm50cmFja19hbWFuZGFfaW5pdCh2b2lkKVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jLTE4OC17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuYy0yMjMtXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmM6MjI0Om1vZHVsZV9pbml0KG5mX2Nvbm50cmFja19hbWFuZGFfaW5pdCk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmM6MjI1Om1vZHVsZV9leGl0KG5mX2Nvbm50cmFja19hbWFuZGFfZmluaSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA0OjMwOjM0LjE4MDg1NzIyOFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNDE2Mjg1OTAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEFtYW5kYSBDb25udHJhY2sgSGVscGVyIE1vZGlmaWNhdGlvbioqXG5cbk9rYXksIHNvIEknbSBmb2N1c2luZyBvbiBgYW1hbmRhX2hlbHBgIOKAkyB0aGF0J3MgdGhlIGNvcmUgZnVuY3Rpb24gdGhpcyBwYXRjaCB0b3VjaGVzLiBCZWZvcmUgSSBnZXQgaW50byB0aGUgZGV0YWlscywgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgZW52aXJvbm1lbnQgaXMgc2V0IHVwIGNvcnJlY3RseS4gTGV0J3MgdmVyaWZ5IHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMuIEkgc2VlIHRoYXQgYENPTkZJR19ORl9DT05OVFJBQ0tfQU1BTkRBYCwgYENPTkZJR19ORl9DT05OVFJBQ0tgLCBgQ09ORklHX05FVEZJTFRFUmAsIGFuZCBgQ09ORklHX0lORVRgIGFyZSBlc3NlbnRpYWwuIEp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJ2xsIHRha2UgYSBxdWljayBsb29rIGF0IGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IGhpZGRlbiBkZXBlbmRlbmNpZXMuXG5cbkFoLCB5ZXMuIEFzIGV4cGVjdGVkLCBgTkZfQ09OTlRSQUNLX0FNQU5EQWAgZGVwZW5kcyBvbiBgTkVURklMVEVSX0FEVkFOQ0VEYCwgYW5kIGluIHR1cm4sIHJlcXVpcmVzIGBORVRGSUxURVJgIGFuZCBgSU5FVGAgdG8gYmUgY29ycmVjdGx5IHByZXNlbnRlZCBpbiB0aGUgbWVudS4gQWxzbywgaXQgc2VsZWN0cyBgVEVYVFNFQVJDSGAgYW5kIGBURVhUU0VBUkNIX0tNUGAgZm9yIGdvb2QgbWVhc3VyZS4gU28sIHRoZSBiYXNlIGNvbmZpZ3MgSSBpZGVudGlmaWVkIGFyZSB0aGUga2V5IG9uZXM6IGBORl9DT05OVFJBQ0tfQU1BTkRBYCwgYE5GX0NPTk5UUkFDS2AsIGFuZCBgTkVURklMVEVSYC4gVGhhdCdzIHN0YW5kYXJkIHN0dWZmLlxuXG5Ob3csIGxldCdzIG5haWwgZG93biB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIGBzZXQtcmVzdWx0c2AgY2FsbC4gSSBjYW4gc2VlIHRoZSBwYXJhbWV0ZXJzIGNsZWFybHk6IGBXb3J0aEZ1enppbmdgIHNldCB0byBgdHJ1ZWAsIHRoZSBgRm9jdXNTeW1ib2xzYCBiZWluZyBjb3JyZWN0bHkgc2V0IHRvIGBbXCJhbWFuZGFfaGVscFwiXWAsIGFuZCBgRW5hYmxlQ29uZmlnc2Agc2V0IHRvIGBbXCJORl9DT05OVFJBQ0tfQU1BTkRBXCIsIFwiTkZfQ09OTlRSQUNLXCIsIFwiTkVURklMVEVSXCJdYC4gUGVyZmVjdC4gVGhlIHJlYXNvbmluZyBpcyBjbGVhcjogdGhpcyBwYXRjaCBpcyBhYm91dCBmaXhpbmcgcG9ydCB2YWxpZGF0aW9uIGluIHRoZSBBbWFuZGEgY29ubnRyYWNrIGhlbHBlciAoYGFtYW5kYV9oZWxwYCkgd2l0aGluIGBuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuY2AsIHNwZWNpZmljYWxseSB0byBhdm9pZCBpbnRlZ2VyIHRydW5jYXRpb24gYW5kIHByb3Blcmx5IHZhbGlkYXRlIHBvcnQgbnVtYmVycyBwYXJzZWQgZnJvbSBwYWNrZXQgcGF5bG9hZHMuIFRoYXQgY29kZSBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZSB3aGVuIGhhbmRsaW5nIG5ldHdvcmsgcGFja2V0cyB3aXRoIEFtYW5kYSBjb25uZWN0aW9uIHRyYWNraW5nIGVuYWJsZWQuXG5cblllcCwgZXZlcnl0aGluZyBjaGVja3Mgb3V0LiBJJ20gc2F0aXNmaWVkLiBMZXQncyBnbyBhaGVhZCBhbmQgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4ODIwLCJPdXRwdXRUb2tlbnMiOjEwOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNDozMDozNy41OTcxNDU2MloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NjA3MTY0NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZfQ09OTlRSQUNLX0FNQU5EQVwiLFxuICAgIFwiTkZfQ09OTlRSQUNLXCIsXG4gICAgXCJORVRGSUxURVJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhbWFuZGFfaGVscFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHBvcnQgcGFyc2luZyBhbmQgYm91bmRzIHZhbGlkYXRpb24gbG9naWMgaW4gdGhlIEFtYW5kYSBjb25udHJhY2sgaGVscGVyIChhbWFuZGFfaGVscCkgdG8gY29ycmVjdGx5IHJlamVjdCBwb3J0IHZhbHVlcyBncmVhdGVyIHRoYW4gNjU1MzUgYW5kIHByZXZlbnQgdHJ1bmNhdGlvbiBiZWZvcmUgcmFuZ2UgY2hlY2tpbmcuIFRoaXMgaXMgcmVhY2hhYmxlIG5ldHdvcmtpbmcgY29kZSBpbiBOZXRmaWx0ZXIuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZfQ09OTlRSQUNLX0FNQU5EQVwiLFxuICAgIFwiTkZfQ09OTlRSQUNLXCIsXG4gICAgXCJORVRGSUxURVJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhbWFuZGFfaGVscFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHBvcnQgcGFyc2luZyBhbmQgYm91bmRzIHZhbGlkYXRpb24gbG9naWMgaW4gdGhlIEFtYW5kYSBjb25udHJhY2sgaGVscGVyIChhbWFuZGFfaGVscCkgdG8gY29ycmVjdGx5IHJlamVjdCBwb3J0IHZhbHVlcyBncmVhdGVyIHRoYW4gNjU1MzUgYW5kIHByZXZlbnQgdHJ1bmNhdGlvbiBiZWZvcmUgcmFuZ2UgY2hlY2tpbmcuIFRoaXMgaXMgcmVhY2hhYmxlIG5ldHdvcmtpbmcgY29kZSBpbiBOZXRmaWx0ZXIuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA0OjMwOjM3Ljc1MzIyNzMyNFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAwNDQ1MTg3MjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNDozMDozNy43NTQwNDU5MTVaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxMDA0MzY5MzU3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gaW50ZWdlciByYW5nZSB2YWxpZGF0aW9uIGlzc3VlIGluIHRoZSBBbWFuZGEgY29ubnRyYWNrIGhlbHBlciAoYGFtYW5kYV9oZWxwYCkgYnkgcHJvcGVybHkgY2hlY2tpbmcgdGhhdCB0aGUgcGFyc2VkIHBvcnQgbnVtYmVyIGRvZXMgbm90IGV4Y2VlZCA2NTUzNSBiZWZvcmUgY2FzdGluZy9jb252ZXJ0aW5nIGl0IHdpdGggYGh0b25zKClgLlxcblxcbkFsbCBtb2RpZmllZCBhbmQgc3Vycm91bmRpbmcgdmFyaWFibGVzIChgdG1wX3BvcnRgLCBgcG9ydGAsIGBsZW5gLCBgcGJ1ZmApIGFyZSBzdHJpY3RseSBpbml0aWFsaXplZCBhbmQgZGV0ZXJtaW5pc3RpYy4gTm8gaGVhcC9zdGFjayBzdHJ1Y3R1cmVzIGFyZSBsZWFrZWQgdG8gdXNlciBzcGFjZSwgbm8gY29uZGl0aW9uYWwgYnJhbmNoZXMgcmVseSBvbiB1bmluaXRpYWxpemVkIHN0YXRlLCBhbmQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzZXMgYXJlIGludHJvZHVjZWQgb3IgZXhwb3NlZC4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDBiMGRiYmEzMjYyMGY3ZjliNjg5NjMzYjNiMjczMDMzZWM5ZmRjNGJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCA3IDA0OjMwOjE2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuY1xuaW5kZXggMTRhZTY2MDQ5MWYzNi4uMDU3Y2VmN2UyYTdlZCAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuY1xuQEAgLTkxLDYgKzkxLDcgQEAgc3RhdGljIGludCBhbWFuZGFfaGVscChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0Y2hhciBwYnVmW3NpemVvZihcIjY1NTM1XCIpXSwgKnRtcDtcbiBcdHUxNiBsZW47XG4gXHRfX2JlMTYgcG9ydDtcbitcdHVuc2lnbmVkIGxvbmcgdG1wX3BvcnQ7XG4gXHRpbnQgcmV0ID0gTkZfQUNDRVBUO1xuIFx0bmZfbmF0X2FtYW5kYV9ob29rX2ZuICpuZl9uYXRfYW1hbmRhO1xuIFxuQEAgLTEzMiwxMCArMTMzLDExIEBAIHN0YXRpYyBpbnQgYW1hbmRhX2hlbHAoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHRicmVhaztcbiBcdFx0cGJ1ZltsZW5dID0gJ1xcMCc7XG4gXG4tXHRcdHBvcnQgPSBodG9ucyhzaW1wbGVfc3RydG91bChwYnVmLCBcdTAwMjZ0bXAsIDEwKSk7XG4rXHRcdHRtcF9wb3J0ID0gc2ltcGxlX3N0cnRvdWwocGJ1ZiwgXHUwMDI2dG1wLCAxMCk7XG4gXHRcdGxlbiA9IHRtcCAtIHBidWY7XG4tXHRcdGlmIChwb3J0ID09IDAgfHwgbGVuIFx1MDAzZSA1KVxuK1x0XHRpZiAodG1wX3BvcnQgPT0gMCB8fCB0bXBfcG9ydCBcdTAwM2UgNjU1MzUgfHwgbGVuIFx1MDAzZSA1KVxuIFx0XHRcdGJyZWFrO1xuK1x0XHRwb3J0ID0gaHRvbnModG1wX3BvcnQpO1xuIFxuIFx0XHRleHAgPSBuZl9jdF9leHBlY3RfYWxsb2MoY3QpO1xuIFx0XHRpZiAoZXhwID09IE5VTEwpIHtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA0OjMwOjM3Ljc1NDA0ODE2NFoiLCJTZXEiOjE2LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozODc4NjQ4NzY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGNyYWZ0ZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGl2aW5nIGludG8gdGhlIEFtYW5kYSBDb25udHJhY2sgTW9kdWxlKipcblxuUmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGNoYW5nZS4gVGhlIGZpcnN0IHRoaW5nIEknbSBnb2luZyB0byBkbyBpcyBnZXQgbXkgZXllcyBvbiB0aGUgZGlmZi4gSSdsbCByZWFkIHRoZSBgbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmNgIGNvZGUgdG8gc2VlIHRoZSBiZWZvcmUgYW5kIGFmdGVyLiBNeSBnb2FsIGlzIHRvIGdyYXNwIHRoZSBtb2RpZmljYXRpb24ncyBpbXBhY3Qgd2l0aGluIHRoYXQgY29udGV4dC4gSSB3YW50IHRvIHJlYWQgdGhlIHN1cnJvdW5kaW5nIGxpbmVzIHRvIHVuZGVyc3RhbmQgdGhlIHB1cnBvc2Ugb2YgdGhlIGNvZGUgYW5kIHRoZSBsb2NhdGlvbiBvZiB0aGUgZWRpdC4gSSdsbCB1c2UgYHJlYWQtZmlsZWAgdG8gZ3JhYiB0aGUgZmlsZSBhbmQgYmVnaW4gYW5hbHl6aW5nIGl0LiBUaW1lIHRvIGRpZyBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI4MCwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDQ6MzA6NDEuNjMyNzAwNDQxWiIsIlNlcSI6MTcsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNTg2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4MCxcbiAgXCJMaW5lQ291bnRcIjogODVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA4MDpcXHRcXHR9LFxcbiAgODE6XFx0fTtcXG4gIDgyOlxcdFxcbiAgODM6XFx0c3RhdGljIGludCBhbWFuZGFfaGVscChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiAgODQ6XFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGludCBwcm90b2ZmLFxcbiAgODU6XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBuZl9jb25uICpjdCxcXG4gIDg2OlxcdFxcdFxcdCAgICAgICBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbylcXG4gIDg3OlxcdHtcXG4gIDg4OlxcdFxcdHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHA7XFxuICA4OTpcXHRcXHRzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZTtcXG4gIDkwOlxcdFxcdHVuc2lnbmVkIGludCBkYXRhb2ZmLCBzdGFydCwgc3RvcCwgb2ZmLCBpO1xcbiAgOTE6XFx0XFx0Y2hhciBwYnVmW3NpemVvZihcXFwiNjU1MzVcXFwiKV0sICp0bXA7XFxuICA5MjpcXHRcXHR1MTYgbGVuO1xcbiAgOTM6XFx0XFx0X19iZTE2IHBvcnQ7XFxuICA5NDpcXHRcXHR1bnNpZ25lZCBsb25nIHRtcF9wb3J0O1xcbiAgOTU6XFx0XFx0aW50IHJldCA9IE5GX0FDQ0VQVDtcXG4gIDk2OlxcdFxcdG5mX25hdF9hbWFuZGFfaG9va19mbiAqbmZfbmF0X2FtYW5kYTtcXG4gIDk3OlxcdFxcbiAgOTg6XFx0XFx0LyogT25seSBsb29rIGF0IHBhY2tldHMgZnJvbSB0aGUgQW1hbmRhIHNlcnZlciAqL1xcbiAgOTk6XFx0XFx0aWYgKENUSU5GTzJESVIoY3RpbmZvKSA9PSBJUF9DVF9ESVJfT1JJR0lOQUwpXFxuIDEwMDpcXHRcXHRcXHRyZXR1cm4gTkZfQUNDRVBUO1xcbiAxMDE6XFx0XFxuIDEwMjpcXHRcXHQvKiBpbmNyZWFzZSB0aGUgVURQIHRpbWVvdXQgb2YgdGhlIG1hc3RlciBjb25uZWN0aW9uIGFzIHJlcGxpZXMgZnJvbVxcbiAxMDM6XFx0XFx0ICogQW1hbmRhIGNsaWVudHMgdG8gdGhlIHNlcnZlciBjYW4gYmUgcXVpdGUgZGVsYXllZCAqL1xcbiAxMDQ6XFx0XFx0bmZfY3RfcmVmcmVzaChjdCwgbWFzdGVyX3RpbWVvdXQgKiBIWik7XFxuIDEwNTpcXHRcXG4gMTA2OlxcdFxcdC8qIE5vIGRhdGE/ICovXFxuIDEwNzpcXHRcXHRkYXRhb2ZmID0gcHJvdG9mZiArIHNpemVvZihzdHJ1Y3QgdWRwaGRyKTtcXG4gMTA4OlxcdFxcdGlmIChkYXRhb2ZmIFxcdTAwM2U9IHNrYi1cXHUwMDNlbGVuKSB7XFxuIDEwOTpcXHRcXHRcXHRuZXRfZXJyX3JhdGVsaW1pdGVkKFxcXCJhbWFuZGFfaGVscDogc2tibGVuID0gJXVcXFxcblxcXCIsIHNrYi1cXHUwMDNlbGVuKTtcXG4gMTEwOlxcdFxcdFxcdHJldHVybiBORl9BQ0NFUFQ7XFxuIDExMTpcXHRcXHR9XFxuIDExMjpcXHRcXG4gMTEzOlxcdFxcdHN0YXJ0ID0gc2tiX2ZpbmRfdGV4dChza2IsIGRhdGFvZmYsIHNrYi1cXHUwMDNlbGVuLFxcbiAxMTQ6XFx0XFx0XFx0XFx0ICAgICAgc2VhcmNoW1NFQVJDSF9DT05ORUNUXS50cyk7XFxuIDExNTpcXHRcXHRpZiAoc3RhcnQgPT0gVUlOVF9NQVgpXFxuIDExNjpcXHRcXHRcXHRnb3RvIG91dDtcXG4gMTE3OlxcdFxcdHN0YXJ0ICs9IGRhdGFvZmYgKyBzZWFyY2hbU0VBUkNIX0NPTk5FQ1RdLmxlbjtcXG4gMTE4OlxcdFxcbiAxMTk6XFx0XFx0c3RvcCA9IHNrYl9maW5kX3RleHQoc2tiLCBzdGFydCwgc2tiLVxcdTAwM2VsZW4sXFxuIDEyMDpcXHRcXHRcXHRcXHQgICAgIHNlYXJjaFtTRUFSQ0hfTkVXTElORV0udHMpO1xcbiAxMjE6XFx0XFx0aWYgKHN0b3AgPT0gVUlOVF9NQVgpXFxuIDEyMjpcXHRcXHRcXHRnb3RvIG91dDtcXG4gMTIzOlxcdFxcdHN0b3AgKz0gc3RhcnQ7XFxuIDEyNDpcXHRcXG4gMTI1OlxcdFxcdGZvciAoaSA9IFNFQVJDSF9EQVRBOyBpIFxcdTAwM2M9IFNFQVJDSF9TVEFURTsgaSsrKSB7XFxuIDEyNjpcXHRcXHRcXHRvZmYgPSBza2JfZmluZF90ZXh0KHNrYiwgc3RhcnQsIHN0b3AsIHNlYXJjaFtpXS50cyk7XFxuIDEyNzpcXHRcXHRcXHRpZiAob2ZmID09IFVJTlRfTUFYKVxcbiAxMjg6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDEyOTpcXHRcXHRcXHRvZmYgKz0gc3RhcnQgKyBzZWFyY2hbaV0ubGVuO1xcbiAxMzA6XFx0XFxuIDEzMTpcXHRcXHRcXHRsZW4gPSBtaW5fdCh1bnNpZ25lZCBpbnQsIHNpemVvZihwYnVmKSAtIDEsIHN0b3AgLSBvZmYpO1xcbiAxMzI6XFx0XFx0XFx0aWYgKHNrYl9jb3B5X2JpdHMoc2tiLCBvZmYsIHBidWYsIGxlbikpXFxuIDEzMzpcXHRcXHRcXHRcXHRicmVhaztcXG4gMTM0OlxcdFxcdFxcdHBidWZbbGVuXSA9ICdcXFxcMCc7XFxuIDEzNTpcXHRcXG4gMTM2OlxcdFxcdFxcdHRtcF9wb3J0ID0gc2ltcGxlX3N0cnRvdWwocGJ1ZiwgXFx1MDAyNnRtcCwgMTApO1xcbiAxMzc6XFx0XFx0XFx0bGVuID0gdG1wIC0gcGJ1ZjtcXG4gMTM4OlxcdFxcdFxcdGlmICh0bXBfcG9ydCA9PSAwIHx8IHRtcF9wb3J0IFxcdTAwM2UgNjU1MzUgfHwgbGVuIFxcdTAwM2UgNSlcXG4gMTM5OlxcdFxcdFxcdFxcdGJyZWFrO1xcbiAxNDA6XFx0XFx0XFx0cG9ydCA9IGh0b25zKHRtcF9wb3J0KTtcXG4gMTQxOlxcdFxcbiAxNDI6XFx0XFx0XFx0ZXhwID0gbmZfY3RfZXhwZWN0X2FsbG9jKGN0KTtcXG4gMTQzOlxcdFxcdFxcdGlmIChleHAgPT0gTlVMTCkge1xcbiAxNDQ6XFx0XFx0XFx0XFx0bmZfY3RfaGVscGVyX2xvZyhza2IsIGN0LCBcXFwiY2Fubm90IGFsbG9jIGV4cGVjdGF0aW9uXFxcIik7XFxuIDE0NTpcXHRcXHRcXHRcXHRyZXQgPSBORl9EUk9QO1xcbiAxNDY6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuIDE0NzpcXHRcXHRcXHR9XFxuIDE0ODpcXHRcXHRcXHR0dXBsZSA9IFxcdTAwMjZjdC1cXHUwMDNldHVwbGVoYXNoW0lQX0NUX0RJUl9PUklHSU5BTF0udHVwbGU7XFxuIDE0OTpcXHRcXHRcXHRuZl9jdF9leHBlY3RfaW5pdChleHAsIE5GX0NUX0VYUEVDVF9DTEFTU19ERUZBVUxULFxcbiAxNTA6XFx0XFx0XFx0XFx0XFx0ICBuZl9jdF9sM251bShjdCksXFxuIDE1MTpcXHRcXHRcXHRcXHRcXHQgIFxcdTAwMjZ0dXBsZS1cXHUwMDNlc3JjLnUzLCBcXHUwMDI2dHVwbGUtXFx1MDAzZWRzdC51MyxcXG4gMTUyOlxcdFxcdFxcdFxcdFxcdCAgSVBQUk9UT19UQ1AsIE5VTEwsIFxcdTAwMjZwb3J0KTtcXG4gMTUzOlxcdFxcbiAxNTQ6XFx0XFx0XFx0bmZfbmF0X2FtYW5kYSA9IHJjdV9kZXJlZmVyZW5jZShuZl9uYXRfYW1hbmRhX2hvb2spO1xcbiAxNTU6XFx0XFx0XFx0aWYgKG5mX25hdF9hbWFuZGEgXFx1MDAyNlxcdTAwMjYgY3QtXFx1MDAzZXN0YXR1cyBcXHUwMDI2IElQU19OQVRfTUFTSylcXG4gMTU2OlxcdFxcdFxcdFxcdHJldCA9IG5mX25hdF9hbWFuZGEoc2tiLCBjdCwgY3RpbmZvLCBwcm90b2ZmLFxcbiAxNTc6XFx0XFx0XFx0XFx0XFx0XFx0ICAgIG9mZiAtIGRhdGFvZmYsIGxlbiwgZXhwKTtcXG4gMTU4OlxcdFxcdFxcdGVsc2UgaWYgKG5mX2N0X2V4cGVjdF9yZWxhdGVkKGV4cCwgMCkgIT0gMCkge1xcbiAxNTk6XFx0XFx0XFx0XFx0bmZfY3RfaGVscGVyX2xvZyhza2IsIGN0LCBcXFwiY2Fubm90IGFkZCBleHBlY3RhdGlvblxcXCIpO1xcbiAxNjA6XFx0XFx0XFx0XFx0cmV0ID0gTkZfRFJPUDtcXG4gMTYxOlxcdFxcdFxcdH1cXG4gMTYyOlxcdFxcdFxcdG5mX2N0X2V4cGVjdF9wdXQoZXhwKTtcXG4gMTYzOlxcdFxcdH1cXG4gMTY0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNDozMDo0MS42MzI4Mjg5OTJaIiwiU2VxIjoxOCwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjE2NDg4NDU2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEFtYW5kYSBDb25udHJhY2sgSGVscGVyIFBvcnQgVmFsaWRhdGlvbiBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGFuYWx5emUgdGhlIGNoYW5nZXMgdG8gdGhlIHBvcnQgbnVtYmVyIGhhbmRsaW5nIGxvZ2ljLiBQcmV2aW91c2x5LCB0aGUgY29kZSB1c2VkIGBzaW1wbGVfc3RydG91bGAgdG8gY29udmVydCBhIHN0cmluZyBgcGJ1ZmAgdG8gYW4gdW5zaWduZWQgbG9uZyBhbmQgdGhlbiB1c2VkIGBodG9uc2AgdG8gY29udmVydCBpdCB0byBhIG5ldHdvcmsgYnl0ZSBvcmRlciBzaG9ydCwgYXNzaWduaW5nIGl0IHRvIGBwb3J0YC4gVGhlIHByb2JsZW0gbGllcyBpbiB0aGUgZmFjdCB0aGF0IGBodG9uc2AgZWZmZWN0aXZlbHkgdHJ1bmNhdGVzIHRoZSBgdW5zaWduZWQgbG9uZ2AgaW5wdXQgdG8gYSBgdTE2YCBiZWZvcmUgYnl0ZS1zd2FwcGluZy4gVGhpcyBtZWFucyB0aGF0IGlmIGBzaW1wbGVfc3RydG91bGAgcmV0dXJucyBhIHZhbHVlIGxhcmdlciB0aGFuIDY1NTM1LCBsaWtlIFwiOTk5OTlcIiwgdGhlIGNvZGUgY291bGQgcG90ZW50aWFsbHkgdHJ1bmNhdGUgdG8gemVybyAoaWYgdGhlIHRydW5jYXRlZCB2YWx1ZSBpcyB6ZXJvKSBvciBhIG5vbi16ZXJvIHZhbHVlIGFmdGVyIGJlaW5nIGJpdC1tYXNrZWQgd2l0aCAweGZmZmYgYnkgYGh0b25zYCwgd2hpY2ggY291bGQgbGVhZCB0byBhbiBpbmNvcnJlY3QgcG9ydCBhc3NpZ25tZW50LiBDcml0aWNhbGx5LCB0aGUgb3JpZ2luYWwgY29kZSBvbmx5IHZhbGlkYXRlZCB0aGUgbGVuZ3RoIG9mIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24sIGJ1dCBub3QgdGhlIG51bWVyaWNhbCB2YWx1ZSBpdCByZXByZXNlbnRlZCwgbGVhZGluZyB0byB0aGlzIG92ZXJmbG93IHZ1bG5lcmFiaWxpdHkuXG5cblRoaXMgcGF0Y2ggYWRkcmVzc2VzIHRoaXMgaXNzdWUgZGlyZWN0bHkuIEl0IGludHJvZHVjZXMgYSB0ZW1wb3JhcnkgdmFyaWFibGUsIGB0bXBfcG9ydGAsIHRvIGhvbGQgdGhlIHZhbHVlIHJldHVybmVkIGJ5IGBzaW1wbGVfc3RydG91bGAuIFRoaXMgaXMgY3J1Y2lhbC4gSXQgdmFsaWRhdGVzIHRoZSBwb3J0IG51bWJlciwgbm93IGVuc3VyaW5nIGl0IGlzIGJldHdlZW4gMCBhbmQgNjU1MzUsIGJlZm9yZSBjb252ZXJ0aW5nIHRvIG5ldHdvcmsgYnl0ZSBvcmRlciB1c2luZyBgaHRvbnNgLiBUaGlzIGlzIGEgbXVjaCBiZXR0ZXIgYXBwcm9hY2guXG5cbk5vdywgbGV0J3MgY29uc2lkZXIgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBJJ3ZlIGV4YW1pbmVkIHRoZSB2YXJpYWJsZXMgaW52b2x2ZWQsIGFuZCBJJ20gY29uZmlkZW50IHRoZXJlIGFyZSBubyBzdWNoIHJpc2tzLiBgdG1wX3BvcnRgIGlzIGRpcmVjdGx5IGluaXRpYWxpemVkIGJ5IGBzaW1wbGVfc3RydG91bGAuIFRoZSBgcG9ydGAgaXMgYWxzbyBpbml0aWFsaXplZCBkaXJlY3RseS4gVGhlIGlucHV0IGJ1ZmZlciBgcGJ1ZmAgaXMgcG9wdWxhdGVkIGJ5IGBza2JfY29weV9iaXRzYCwgYW5kIG51bGwtdGVybWluYXRlZC4gRXZlcnl0aGluZyBzZWVtcyB0byBiZSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLiBObyB1bmluaXRpYWxpemVkIGRhdGEgaXMgYmVpbmcgYnJhbmNoZWQgb24gb3IgdXNlZCwgYW5kIG5vdGhpbmcgdW5pbml0aWFsaXplZCBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZS5cblxuVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGRlZmluaXRlbHkgZG9lcyAqbm90KiBqdXN0aWZ5IGEgS01TQU4gc2Vzc2lvbi4gS01TQU4gaXMgZm9yIGRldGVjdGluZyByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSwgd2hpY2ggaXMgY2xlYXJseSBub3QgdGhlIGNhc2UgaGVyZS4gVGhpcyBwYXRjaCBzaW1wbHkgZml4ZXMgYSBwb3J0IG51bWJlciBpbnB1dCB2YWxpZGF0aW9uIGlzc3VlIOKAkyBhbiBpbnRlZ2VyIG92ZXJmbG93LCByZWFsbHkg4oCTIGluIHRoZSBBbWFuZGEgY29ubnRyYWNrIGhlbHBlci5cblxuRmluYWxseSwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGFtIGZvbGxvd2luZyB0aGUgc3RhbmRhcmQgZ3VpZGVsaW5lcy4gYE5lZWRzS01TQU5gIHNob3VsZCBiZSBmYWxzZS4gVGhlIGBLTVNBTlJlYXNvbmluZ2AgZmllbGQgc2hvdWxkIGNsZWFybHkgY29udHJhc3QgS0FTQU4gdmVyc3VzIEtNU0FOIGFwcGxpY2FiaWxpdHksIGJ1dCB0aGF0IGNvbnRyYXN0IGlzIGFscmVhZHkgY2xlYXIgaW4gbXkgYW5hbHlzaXM6IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHRoZSBwdXJ2aWV3IG9mIEtNU0FOLCBhbmQgdGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaW50cm9kdWNlZCBvciBleHBvc2VkIGhlcmUuIFRoZXJlZm9yZSwgbXkgYHNldC1yZXN1bHRzYCBjYWxsIHdpbGwgYmUgYmFzZWQgb24gdGhhdCB1bmRlcnN0YW5kaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTIyLCJPdXRwdXRUb2tlbnMiOjE0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU5MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA0OjMwOjQ3Ljc5NzcxNjI4MloiLCJTZXEiOjE5LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5ODUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gaW50ZWdlciByYW5nZSB2YWxpZGF0aW9uIGlzc3VlIGluIHRoZSBBbWFuZGEgY29ubnRyYWNrIGhlbHBlciAoYGFtYW5kYV9oZWxwYCkgYnkgcHJvcGVybHkgY2hlY2tpbmcgdGhhdCB0aGUgcGFyc2VkIHBvcnQgbnVtYmVyIGRvZXMgbm90IGV4Y2VlZCA2NTUzNSBiZWZvcmUgY2FzdGluZy9jb252ZXJ0aW5nIGl0IHdpdGggYGh0b25zKClgLlxcblxcbkFsbCBtb2RpZmllZCBhbmQgc3Vycm91bmRpbmcgdmFyaWFibGVzIChgdG1wX3BvcnRgLCBgcG9ydGAsIGBsZW5gLCBgcGJ1ZmApIGFyZSBzdHJpY3RseSBpbml0aWFsaXplZCBhbmQgZGV0ZXJtaW5pc3RpYy4gTm8gaGVhcC9zdGFjayBzdHJ1Y3R1cmVzIGFyZSBsZWFrZWQgdG8gdXNlciBzcGFjZSwgbm8gY29uZGl0aW9uYWwgYnJhbmNoZXMgcmVseSBvbiB1bmluaXRpYWxpemVkIHN0YXRlLCBhbmQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzZXMgYXJlIGludHJvZHVjZWQgb3IgZXhwb3NlZC4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIGludGVnZXIgcmFuZ2UgdmFsaWRhdGlvbiBpc3N1ZSBpbiB0aGUgQW1hbmRhIGNvbm50cmFjayBoZWxwZXIgKGBhbWFuZGFfaGVscGApIGJ5IHByb3Blcmx5IGNoZWNraW5nIHRoYXQgdGhlIHBhcnNlZCBwb3J0IG51bWJlciBkb2VzIG5vdCBleGNlZWQgNjU1MzUgYmVmb3JlIGNhc3RpbmcvY29udmVydGluZyBpdCB3aXRoIGBodG9ucygpYC5cXG5cXG5BbGwgbW9kaWZpZWQgYW5kIHN1cnJvdW5kaW5nIHZhcmlhYmxlcyAoYHRtcF9wb3J0YCwgYHBvcnRgLCBgbGVuYCwgYHBidWZgKSBhcmUgc3RyaWN0bHkgaW5pdGlhbGl6ZWQgYW5kIGRldGVybWluaXN0aWMuIE5vIGhlYXAvc3RhY2sgc3RydWN0dXJlcyBhcmUgbGVha2VkIHRvIHVzZXIgc3BhY2UsIG5vIGNvbmRpdGlvbmFsIGJyYW5jaGVzIHJlbHkgb24gdW5pbml0aWFsaXplZCBzdGF0ZSwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzc2VzIGFyZSBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflowts465[1] Phase: Succeeded StartedAt: 2026-09-07 04:31:10 +0000 UTC FinishedAt: 2026-09-07 04:31:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowts465[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-07 04:31:10 +0000 UTC FinishedAt: 2026-09-07 04:31:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowts465[2] Phase: Succeeded StartedAt: 2026-09-07 04:31:10 +0000 UTC FinishedAt: 2026-09-07 06:04:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowts465[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK_AMANDA","NF_CONNTRACK","NETFILTER"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["amanda_help"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK_AMANDA","NF_CONNTRACK","NETFILTER"],"series_id":"64e6daaa-4d14-433a-8f61-ee24f5674c6c","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-07 04:31:10 +0000 UTC FinishedAt: 2026-09-07 06:04:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK_AMANDA","NF_CONNTRACK","NETFILTER"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["amanda_help"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK_AMANDA","NF_CONNTRACK","NETFILTER"],"series_id":"64e6daaa-4d14-433a-8f61-ee24f5674c6c","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowts465[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK_AMANDA","NF_CONNTRACK","NETFILTER"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["amanda_help"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK_AMANDA","NF_CONNTRACK","NETFILTER"],"series_id":"64e6daaa-4d14-433a-8f61-ee24f5674c6c","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-07 04:31:10 +0000 UTC FinishedAt: 2026-09-07 04:31:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowts465[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK_AMANDA","NF_CONNTRACK","NETFILTER"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["amanda_help"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK_AMANDA","NF_CONNTRACK","NETFILTER"],"series_id":"64e6daaa-4d14-433a-8f61-ee24f5674c6c","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-07 04:31:10 +0000 UTC FinishedAt: 2026-09-07 04:31:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK_AMANDA","NF_CONNTRACK","NETFILTER"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.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-workflowts465/series-workflowts465-convert-artifact-2239954398/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowts465[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK_AMANDA","NF_CONNTRACK","NETFILTER"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["amanda_help"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK_AMANDA","NF_CONNTRACK","NETFILTER"],"series_id":"64e6daaa-4d14-433a-8f61-ee24f5674c6c","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-07 04:31:21 +0000 UTC FinishedAt: 2026-09-07 04:47:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowts465[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK_AMANDA","NF_CONNTRACK","NETFILTER"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["amanda_help"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK_AMANDA","NF_CONNTRACK","NETFILTER"],"series_id":"64e6daaa-4d14-433a-8f61-ee24f5674c6c","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-07 04:31:21 +0000 UTC FinishedAt: 2026-09-07 04:47:15 +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:*e7c70c35-80d4-4685-a2ea-39682c75cd80,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-workflowts465/series-workflowts465-convert-artifact-2239954398/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": "14b355b0-5e86-4b99-8c77-586091d14202", "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-workflowts465/series-workflowts465-build-action-1526668996/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowts465[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK_AMANDA","NF_CONNTRACK","NETFILTER"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["amanda_help"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK_AMANDA","NF_CONNTRACK","NETFILTER"],"series_id":"64e6daaa-4d14-433a-8f61-ee24f5674c6c","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-07 04:31:21 +0000 UTC FinishedAt: 2026-09-07 04:47:05 +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:*e7c70c35-80d4-4685-a2ea-39682c75cd80,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-workflowts465/series-workflowts465-convert-artifact-2239954398/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": "14b355b0-5e86-4b99-8c77-586091d14202", "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-workflowts465/series-workflowts465-build-action-1526668996/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowts465[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK_AMANDA","NF_CONNTRACK","NETFILTER"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["amanda_help"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK_AMANDA","NF_CONNTRACK","NETFILTER"],"series_id":"64e6daaa-4d14-433a-8f61-ee24f5674c6c","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-07 04:47:15 +0000 UTC FinishedAt: 2026-09-07 04:47:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowts465[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK_AMANDA","NF_CONNTRACK","NETFILTER"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["amanda_help"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK_AMANDA","NF_CONNTRACK","NETFILTER"],"series_id":"64e6daaa-4d14-433a-8f61-ee24f5674c6c","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-07 04:47:15 +0000 UTC FinishedAt: 2026-09-07 04:47:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowts465[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK_AMANDA","NF_CONNTRACK","NETFILTER"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["amanda_help"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK_AMANDA","NF_CONNTRACK","NETFILTER"],"series_id":"64e6daaa-4d14-433a-8f61-ee24f5674c6c","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-07 04:47:15 +0000 UTC FinishedAt: 2026-09-07 04:47:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowts465[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK_AMANDA","NF_CONNTRACK","NETFILTER"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["amanda_help"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK_AMANDA","NF_CONNTRACK","NETFILTER"],"series_id":"64e6daaa-4d14-433a-8f61-ee24f5674c6c","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-07 04:47:15 +0000 UTC FinishedAt: 2026-09-07 04:47:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK_AMANDA","NF_CONNTRACK","NETFILTER"],"series_id":"64e6daaa-4d14-433a-8f61-ee24f5674c6c","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.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-workflowts465/series-workflowts465-convert-artifact-3319785873/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowts465[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK_AMANDA","NF_CONNTRACK","NETFILTER"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["amanda_help"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK_AMANDA","NF_CONNTRACK","NETFILTER"],"series_id":"64e6daaa-4d14-433a-8f61-ee24f5674c6c","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-07 04:47:25 +0000 UTC FinishedAt: 2026-09-07 04:49:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowts465[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK_AMANDA","NF_CONNTRACK","NETFILTER"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["amanda_help"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK_AMANDA","NF_CONNTRACK","NETFILTER"],"series_id":"64e6daaa-4d14-433a-8f61-ee24f5674c6c","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-07 04:47:25 +0000 UTC FinishedAt: 2026-09-07 04:49:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*14b355b0-5e86-4b99-8c77-586091d14202,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-workflowts465/series-workflowts465-build-action-1526668996/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-workflowts465[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK_AMANDA","NF_CONNTRACK","NETFILTER"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["amanda_help"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK_AMANDA","NF_CONNTRACK","NETFILTER"],"series_id":"64e6daaa-4d14-433a-8f61-ee24f5674c6c","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-07 04:49:36 +0000 UTC FinishedAt: 2026-09-07 04:49:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowts465[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK_AMANDA","NF_CONNTRACK","NETFILTER"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["amanda_help"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK_AMANDA","NF_CONNTRACK","NETFILTER"],"series_id":"64e6daaa-4d14-433a-8f61-ee24f5674c6c","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-07 04:49:36 +0000 UTC FinishedAt: 2026-09-07 04:49:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowts465[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK_AMANDA","NF_CONNTRACK","NETFILTER"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["amanda_help"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK_AMANDA","NF_CONNTRACK","NETFILTER"],"series_id":"64e6daaa-4d14-433a-8f61-ee24f5674c6c","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-07 04:49:36 +0000 UTC FinishedAt: 2026-09-07 05:09:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowts465[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK_AMANDA","NF_CONNTRACK","NETFILTER"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["amanda_help"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK_AMANDA","NF_CONNTRACK","NETFILTER"],"series_id":"64e6daaa-4d14-433a-8f61-ee24f5674c6c","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-07 04:49:36 +0000 UTC FinishedAt: 2026-09-07 05:09:31 +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:*e7c70c35-80d4-4685-a2ea-39682c75cd80,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-workflowts465/series-workflowts465-convert-artifact-3319785873/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": "338b9095-008e-4830-9732-9526a9b430ef", "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-workflowts465/series-workflowts465-build-action-2079775069/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowts465[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK_AMANDA","NF_CONNTRACK","NETFILTER"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["amanda_help"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK_AMANDA","NF_CONNTRACK","NETFILTER"],"series_id":"64e6daaa-4d14-433a-8f61-ee24f5674c6c","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-07 04:49:36 +0000 UTC FinishedAt: 2026-09-07 05:09:21 +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:*e7c70c35-80d4-4685-a2ea-39682c75cd80,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-workflowts465/series-workflowts465-convert-artifact-3319785873/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": "338b9095-008e-4830-9732-9526a9b430ef", "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-workflowts465/series-workflowts465-build-action-2079775069/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowts465[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK_AMANDA","NF_CONNTRACK","NETFILTER"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["amanda_help"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK_AMANDA","NF_CONNTRACK","NETFILTER"],"series_id":"64e6daaa-4d14-433a-8f61-ee24f5674c6c","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-07 05:09:31 +0000 UTC FinishedAt: 2026-09-07 05:09:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowts465[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK_AMANDA","NF_CONNTRACK","NETFILTER"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["amanda_help"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK_AMANDA","NF_CONNTRACK","NETFILTER"],"series_id":"64e6daaa-4d14-433a-8f61-ee24f5674c6c","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-07 05:09:31 +0000 UTC FinishedAt: 2026-09-07 05:09:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowts465[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK_AMANDA","NF_CONNTRACK","NETFILTER"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["amanda_help"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK_AMANDA","NF_CONNTRACK","NETFILTER"],"series_id":"64e6daaa-4d14-433a-8f61-ee24f5674c6c","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-07 05:09:31 +0000 UTC FinishedAt: 2026-09-07 05:11:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowts465[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK_AMANDA","NF_CONNTRACK","NETFILTER"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["amanda_help"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK_AMANDA","NF_CONNTRACK","NETFILTER"],"series_id":"64e6daaa-4d14-433a-8f61-ee24f5674c6c","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-07 05:09:31 +0000 UTC FinishedAt: 2026-09-07 05:11:15 +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:*338b9095-008e-4830-9732-9526a9b430ef,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-workflowts465/series-workflowts465-build-action-2079775069/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-workflowts465[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK_AMANDA","NF_CONNTRACK","NETFILTER"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["amanda_help"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK_AMANDA","NF_CONNTRACK","NETFILTER"],"series_id":"64e6daaa-4d14-433a-8f61-ee24f5674c6c","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-07 05:11:25 +0000 UTC FinishedAt: 2026-09-07 06:04:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowts465[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK_AMANDA","NF_CONNTRACK","NETFILTER"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["amanda_help"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK_AMANDA","NF_CONNTRACK","NETFILTER"],"series_id":"64e6daaa-4d14-433a-8f61-ee24f5674c6c","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-07 05:11:25 +0000 UTC FinishedAt: 2026-09-07 06:04:30 +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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["amanda_help"],"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:*14b355b0-5e86-4b99-8c77-586091d14202,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*338b9095-008e-4830-9732-9526a9b430ef,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-workflowts465/series-workflowts465-build-action-1526668996/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-workflowts465/series-workflowts465-build-action-2079775069/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowts465[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK_AMANDA","NF_CONNTRACK","NETFILTER"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["amanda_help"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK_AMANDA","NF_CONNTRACK","NETFILTER"],"series_id":"64e6daaa-4d14-433a-8f61-ee24f5674c6c","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-07 05:11:25 +0000 UTC FinishedAt: 2026-09-07 05:11:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowts465[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK_AMANDA","NF_CONNTRACK","NETFILTER"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["amanda_help"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK_AMANDA","NF_CONNTRACK","NETFILTER"],"series_id":"64e6daaa-4d14-433a-8f61-ee24f5674c6c","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-07 05:11:25 +0000 UTC FinishedAt: 2026-09-07 05:11:32 +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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["amanda_help"],"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-workflowts465/series-workflowts465-convert-artifact-735961286/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowts465[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK_AMANDA","NF_CONNTRACK","NETFILTER"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["amanda_help"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK_AMANDA","NF_CONNTRACK","NETFILTER"],"series_id":"64e6daaa-4d14-433a-8f61-ee24f5674c6c","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-07 05:11:25 +0000 UTC FinishedAt: 2026-09-07 05:11:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowts465[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK_AMANDA","NF_CONNTRACK","NETFILTER"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["amanda_help"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK_AMANDA","NF_CONNTRACK","NETFILTER"],"series_id":"64e6daaa-4d14-433a-8f61-ee24f5674c6c","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-07 05:11:25 +0000 UTC FinishedAt: 2026-09-07 05:11:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowts465[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK_AMANDA","NF_CONNTRACK","NETFILTER"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["amanda_help"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK_AMANDA","NF_CONNTRACK","NETFILTER"],"series_id":"64e6daaa-4d14-433a-8f61-ee24f5674c6c","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-07 05:11:26 +0000 UTC FinishedAt: 2026-09-07 05:11:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowts465[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK_AMANDA","NF_CONNTRACK","NETFILTER"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["amanda_help"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK_AMANDA","NF_CONNTRACK","NETFILTER"],"series_id":"64e6daaa-4d14-433a-8f61-ee24f5674c6c","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-07 05:11:36 +0000 UTC FinishedAt: 2026-09-07 06:04:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowts465[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK_AMANDA","NF_CONNTRACK","NETFILTER"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["amanda_help"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6ebcf5074cff0402730c6981d2397139fee6322d","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CONNTRACK_AMANDA","NF_CONNTRACK","NETFILTER"],"series_id":"64e6daaa-4d14-433a-8f61-ee24f5674c6c","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-07 05:11:36 +0000 UTC FinishedAt: 2026-09-07 06:04:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*14b355b0-5e86-4b99-8c77-586091d14202,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*338b9095-008e-4830-9732-9526a9b430ef,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-workflowts465/series-workflowts465-build-action-1526668996/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-workflowts465/series-workflowts465-build-action-2079775069/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-workflowts465/series-workflowts465-convert-artifact-735961286/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,}