Name: series-workflow6mn7m Phase: Succeeded StartedAt: 2026-08-29 15:38:15 +0000 UTC FinishedAt: 2026-08-29 20:23:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6mn7m[0] Phase: Succeeded StartedAt: 2026-08-29 15:38:15 +0000 UTC FinishedAt: 2026-08-29 16:45:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6mn7m[0].run-triage Phase: Succeeded StartedAt: 2026-08-29 15:38:15 +0000 UTC FinishedAt: 2026-08-29 16:45:45 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "cd35e1b10182c42b4ae31ee49119463b17d8ba7f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "NET", "INET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "cd35e1b10182c42b4ae31ee49119463b17d8ba7f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "NET", "INET" ], "series_id": "f481e888-ed1a-4e5e-8a6e-3cf810efafa9" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "bpf_prog_test_run_sk_lookup" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE1OjU2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NDhtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtORVQmIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9wcm9nX3Rlc3RfcnVuX3NrX2xvb2t1cCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBicGZfcHJvZ190ZXN0X3J1bl9za19sb29rdXAoKWAgaW4gYG5ldC9icGYvdGVzdF9ydW4uY2AgdG8gaW5zcGVjdCBgY3R4LnNlbGVjdGVkX3NrYCBhbmQgdXBkYXRlIGB1c2VyX2N0eC1cdTAwM2Vjb29raWVgIGJlZm9yZSBjYWxsaW5nIGBicGZfdGVzdF90aW1lcl9sZWF2ZShcdTAwMjZ0KWAsIHJhdGhlciB0aGFuIGFmdGVyIGl0LlxuXG5UaGlzIGNoYW5nZSBlbnN1cmVzIHRoYXQgYGN0eC5zZWxlY3RlZF9za2AgaXMgYWNjZXNzZWQgd2hpbGUgc3RpbGwgcHJvdGVjdGVkIGJ5IHRoZSBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24gZXN0YWJsaXNoZWQgYnkgYGJwZl90ZXN0X3RpbWVyX2VudGVyKClgLiBBY2Nlc3NpbmcgYGN0eC5zZWxlY3RlZF9za2AgYWZ0ZXIgcmVsZWFzaW5nIFJDVSBjb3VsZCByZXN1bHQgaW4gYSB1c2UtYWZ0ZXItZnJlZSBvciBSQ1UgZGVyZWZlcmVuY2UgYnVnLCB3aGljaCBpcyBtb25pdG9yZWQgYnkgS0FTQU4gYW5kIFBST1ZFX1JDVSAvIExPQ0tERVAuXG5cblRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzOlxuLSBgdXNlcl9jdHhgIGlzIGFsbG9jYXRlZCB2aWEgYGt6YWxsb2MoKWAgaW4gYGJwZl9jdHhfaW5pdCgpYC5cbi0gU3RhY2sgc3RydWN0dXJlcyBzdWNoIGFzIGBjdHhgIGFyZSB6ZXJvLWluaXRpYWxpemVkIChge31gKS5cbi0gVGhlIGNvbmRpdGlvbiBgcmV0IFx1MDAzZT0gMGAgY2hlY2tzIGByZXRgIHdoaWNoIGlzIGluaXRpYWxpemVkL3VwZGF0ZWQgYnkgYGJwZl90ZXN0X3RpbWVyX2NvbnRpbnVlKClgLlxuLSBObyBuZXcgYnVmZmVycywgdW5pbml0aWFsaXplZCBmaWVsZHMsIG9yIG1lbW9yeSBjb3BpZXMgYXJlIGludHJvZHVjZWQuXG5cblRoZXJlZm9yZSwgdGhpcyBjaGFuZ2UgZG9lcyBub3Qgd2FycmFudCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBicGZfcHJvZ190ZXN0X3J1bl9za19sb29rdXBgIHRvIGFjY2VzcyB0aGUgc2VsZWN0ZWQgc29ja2V0IGBjdHguc2VsZWN0ZWRfc2tgIHdpdGhpbiB0aGUgUkNVLXByb3RlY3RlZCBjcml0aWNhbCBzZWN0aW9uIGJlZm9yZSBjYWxsaW5nIGBicGZfdGVzdF90aW1lcl9sZWF2ZShcdTAwMjZ0KWAsIHByZXZlbnRpbmcgdXNlLWFmdGVyLWZyZWUgb3IgUkNVIHZpb2xhdGlvbnMuIFRoaXMgY29kZSBwYXRoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIGBCUEZfUFJPR19URVNUX1JVTmAgY29tbWFuZCBvZiB0aGUgYGJwZigpYCBzeXNjYWxsIG9uIHNrX2xvb2t1cCBCUEYgcHJvZ3JhbXMgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE1OjU2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYTM5NTc3YjJiM2NhZjYzMjllMmYzYTQ1MjYwZGUwNmExMTNkMjAxMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDI5IDE1OjU2OjM5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9icGYvdGVzdF9ydW4uYyBiL25ldC9icGYvdGVzdF9ydW4uY1xuaW5kZXggNWQ1MWY2Y2I3ZDE1NC4uZTY3N2VjMzM5MGUzNyAxMDA2NDRcbi0tLSBhL25ldC9icGYvdGVzdF9ydW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2JwZi90ZXN0X3J1bi5jXG5AQCAtMTY1MCwyMSAmIzQzOzE2NTAsMjEgQEAgaW50IGJwZl9wcm9nX3Rlc3RfcnVuX3NrX2xvb2t1cChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIGNvbnN0IHVuaW9uIGJwZl9hdHRyICprYXRcbiBcdFx0Y3R4LnNlbGVjdGVkX3NrID0gTlVMTDtcbiBcdFx0cmV0dmFsID0gQlBGX1BST0dfU0tfTE9PS1VQX1JVTl9BUlJBWShwcm9ncywgY3R4LCBicGZfcHJvZ19ydW4pO1xuIFx0fSB3aGlsZSAoYnBmX3Rlc3RfdGltZXJfY29udGludWUoXHUwMDI2dCwgMSwgcmVwZWF0LCBcdTAwMjZyZXQsIFx1MDAyNmR1cmF0aW9uKSk7XG4mIzQzO1xuJiM0MztcdGlmIChyZXQgXHUwMDNlPSAwKSB7XG4mIzQzO1x0XHR1c2VyX2N0eC1cdTAwM2Vjb29raWUgPSAwO1xuJiM0MztcdFx0aWYgKGN0eC5zZWxlY3RlZF9zaykge1xuJiM0MztcdFx0XHRpZiAoY3R4LnNlbGVjdGVkX3NrLVx1MDAzZXNrX3JldXNlcG9ydCBcdTAwMjZcdTAwMjYgIWN0eC5ub19yZXVzZXBvcnQpXG4mIzQzO1x0XHRcdFx0cmV0ID0gLUVPUE5PVFNVUFA7XG4mIzQzO1x0XHRcdGVsc2VcbiYjNDM7XHRcdFx0XHR1c2VyX2N0eC1cdTAwM2Vjb29raWUgPSBzb2NrX2dlbl9jb29raWUoY3R4LnNlbGVjdGVkX3NrKTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4gXHRicGZfdGVzdF90aW1lcl9sZWF2ZShcdTAwMjZ0KTtcbiBcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdGdvdG8gb3V0O1xuIFxuLVx0dXNlcl9jdHgtXHUwMDNlY29va2llID0gMDtcbi1cdGlmIChjdHguc2VsZWN0ZWRfc2spIHtcbi1cdFx0aWYgKGN0eC5zZWxlY3RlZF9zay1cdTAwM2Vza19yZXVzZXBvcnQgXHUwMDI2XHUwMDI2ICFjdHgubm9fcmV1c2Vwb3J0KSB7XG4tXHRcdFx0cmV0ID0gLUVPUE5PVFNVUFA7XG4tXHRcdFx0Z290byBvdXQ7XG4tXHRcdH1cbi1cbi1cdFx0dXNlcl9jdHgtXHUwMDNlY29va2llID0gc29ja19nZW5fY29va2llKGN0eC5zZWxlY3RlZF9zayk7XG4tXHR9XG4tXG4gXHRyZXQgPSBicGZfdGVzdF9maW5pc2goa2F0dHIsIHVhdHRyLCBOVUxMLCBOVUxMLCAwLCAwLCByZXR2YWwsIGR1cmF0aW9uKTtcbiBcdGlmICghcmV0KVxuIFx0XHRyZXQgPSBicGZfY3R4X2ZpbmlzaChrYXR0ciwgdWF0dHIsIHVzZXJfY3R4LCBzaXplb2YoKnVzZXJfY3R4KSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTU6NTY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MzJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O05FVCYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX3Byb2dfdGVzdF9ydW5fc2tfbG9va3VwJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBicGZfcHJvZ190ZXN0X3J1bl9za19sb29rdXBgIHRvIGFjY2VzcyB0aGUgc2VsZWN0ZWQgc29ja2V0IGBjdHguc2VsZWN0ZWRfc2tgIHdpdGhpbiB0aGUgUkNVLXByb3RlY3RlZCBjcml0aWNhbCBzZWN0aW9uIGJlZm9yZSBjYWxsaW5nIGBicGZfdGVzdF90aW1lcl9sZWF2ZShcdTAwMjZ0KWAsIHByZXZlbnRpbmcgdXNlLWFmdGVyLWZyZWUgb3IgUkNVIHZpb2xhdGlvbnMuIFRoaXMgY29kZSBwYXRoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIGBCUEZfUFJPR19URVNUX1JVTmAgY29tbWFuZCBvZiB0aGUgYGJwZigpYCBzeXNjYWxsIG9uIHNrX2xvb2t1cCBCUEYgcHJvZ3JhbXMgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYTM5NTc3YjJiM2NhZjYzMjllMmYzYTQ1MjYwZGUwNmExMTNkMjAxMQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgQXVnIDI5IDE1OjU2OjM5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2JwZi90ZXN0X3J1bi5jIGIvbmV0L2JwZi90ZXN0X3J1bi5jCmluZGV4IDVkNTFmNmNiN2QxNTQuLmU2NzdlYzMzOTBlMzcgMTAwNjQ0Ci0tLSBhL25ldC9icGYvdGVzdF9ydW4uYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvYnBmL3Rlc3RfcnVuLmMKQEAgLTE2NTAsMjEgJiM0MzsxNjUwLDIxIEBAIGludCBicGZfcHJvZ190ZXN0X3J1bl9za19sb29rdXAoc3RydWN0IGJwZl9wcm9nICpwcm9nLCBjb25zdCB1bmlvbiBicGZfYXR0ciAqa2F0CiAJCWN0eC5zZWxlY3RlZF9zayA9IE5VTEw7CiAJCXJldHZhbCA9IEJQRl9QUk9HX1NLX0xPT0tVUF9SVU5fQVJSQVkocHJvZ3MsIGN0eCwgYnBmX3Byb2dfcnVuKTsKIAl9IHdoaWxlIChicGZfdGVzdF90aW1lcl9jb250aW51ZSgmYW1wO3QsIDEsIHJlcGVhdCwgJmFtcDtyZXQsICZhbXA7ZHVyYXRpb24pKTsKJiM0MzsKJiM0MzsJaWYgKHJldCAmZ3Q7PSAwKSB7CiYjNDM7CQl1c2VyX2N0eC0mZ3Q7Y29va2llID0gMDsKJiM0MzsJCWlmIChjdHguc2VsZWN0ZWRfc2spIHsKJiM0MzsJCQlpZiAoY3R4LnNlbGVjdGVkX3NrLSZndDtza19yZXVzZXBvcnQgJmFtcDsmYW1wOyAhY3R4Lm5vX3JldXNlcG9ydCkKJiM0MzsJCQkJcmV0ID0gLUVPUE5PVFNVUFA7CiYjNDM7CQkJZWxzZQomIzQzOwkJCQl1c2VyX2N0eC0mZ3Q7Y29va2llID0gc29ja19nZW5fY29va2llKGN0eC5zZWxlY3RlZF9zayk7CiYjNDM7CQl9CiYjNDM7CX0KIAlicGZfdGVzdF90aW1lcl9sZWF2ZSgmYW1wO3QpOwogCiAJaWYgKHJldCAmbHQ7IDApCiAJCWdvdG8gb3V0OwogCi0JdXNlcl9jdHgtJmd0O2Nvb2tpZSA9IDA7Ci0JaWYgKGN0eC5zZWxlY3RlZF9zaykgewotCQlpZiAoY3R4LnNlbGVjdGVkX3NrLSZndDtza19yZXVzZXBvcnQgJmFtcDsmYW1wOyAhY3R4Lm5vX3JldXNlcG9ydCkgewotCQkJcmV0ID0gLUVPUE5PVFNVUFA7Ci0JCQlnb3RvIG91dDsKLQkJfQotCi0JCXVzZXJfY3R4LSZndDtjb29raWUgPSBzb2NrX2dlbl9jb29raWUoY3R4LnNlbGVjdGVkX3NrKTsKLQl9Ci0KIAlyZXQgPSBicGZfdGVzdF9maW5pc2goa2F0dHIsIHVhdHRyLCBOVUxMLCBOVUxMLCAwLCAwLCByZXR2YWwsIGR1cmF0aW9uKTsKIAlpZiAoIXJldCkKIAkJcmV0ID0gYnBmX2N0eF9maW5pc2goa2F0dHIsIHVhdHRyLCB1c2VyX2N0eCwgc2l6ZW9mKCp1c2VyX2N0eCkpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxNTo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzg4CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogODkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhpbmtpbmcgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIEJQRiBUZXN0IFJ1bm5lcioqCgpPa2F5LCB0aW1lIHRvIGdldCB0byB3b3JrLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoaXMgY2hhbmdlLCBzbyBsZXQmIzM5O3Mgc3RhcnQgYnkgZGlnZ2luZyBpbnRvIHRoZSBkaWZmLiBJJiMzOTttIHNwZWNpZmljYWxseSBpbnRlcmVzdGVkIGluIGNoYW5nZXMgbWFkZSB0byBgbmV0L2JwZi90ZXN0X3J1bi5jYCwgZXNwZWNpYWxseSB3aXRoaW4gdGhlIGBicGZfcHJvZ190ZXN0X3J1bl9za19sb29rdXBgIGZ1bmN0aW9uLiBJIHJlbWVtYmVyIHdvcmtpbmcgd2l0aCB0aGlzIGFyZWEgYmVmb3JlLCBzbyBJIGhhdmUgYSBnZW5lcmFsIHNlbnNlIG9mIHRoZSB0ZXN0IGZyYW1ld29yayYjMzk7cyBzdHJ1Y3R1cmUuIFRvIGdldCBhIGNvbXByZWhlbnNpdmUgdmlldywgSSYjMzk7bGwgbmVlZCB0aGUgc3Vycm91bmRpbmcgY29kZS4gTXkgbmV4dCBzdGVwIGlzIHRvIGxvY2F0ZSBsaW5lIDE2NTAgaW4gYG5ldC9icGYvdGVzdF9ydW4uY2AsIHRoYXQgd2lsbCBsZXQgbWUgZ3Jhc3AgdGhlIGZ1bmN0aW9uJiMzOTtzIGZ1bGwgY29udGV4dCBhbmQgdGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhlIG1vZGlmaWNhdGlvbnMuIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBgc2tfbG9va3VwYCBvcGVyYXRpb24gaXMgYmVpbmcgdGVzdGVkIHdpdGhpbiB0aGUgQlBGIGZyYW1ld29yayB0byBncmFzcCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSBjaGFuZ2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE1OjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2JwZi90ZXN0X3J1bi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTYyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA3MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNjIwOlx0XHRjdHguc3BvcnQgPSB1c2VyX2N0eC1cdTAwM2VyZW1vdGVfcG9ydDtcbjE2MjE6XHRcbjE2MjI6XHRcdHN3aXRjaCAoY3R4LmZhbWlseSkge1xuMTYyMzpcdFx0Y2FzZSBBRl9JTkVUOlxuMTYyNDpcdFx0XHRjdHgudjQuZGFkZHIgPSAoX19mb3JjZSBfX2JlMzIpdXNlcl9jdHgtXHUwMDNlbG9jYWxfaXA0O1xuMTYyNTpcdFx0XHRjdHgudjQuc2FkZHIgPSAoX19mb3JjZSBfX2JlMzIpdXNlcl9jdHgtXHUwMDNlcmVtb3RlX2lwNDtcbjE2MjY6XHRcdFx0YnJlYWs7XG4xNjI3Olx0XG4xNjI4Olx0I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG4xNjI5Olx0XHRjYXNlIEFGX0lORVQ2OlxuMTYzMDpcdFx0XHRjdHgudjYuZGFkZHIgPSAoc3RydWN0IGluNl9hZGRyICopdXNlcl9jdHgtXHUwMDNlbG9jYWxfaXA2O1xuMTYzMTpcdFx0XHRjdHgudjYuc2FkZHIgPSAoc3RydWN0IGluNl9hZGRyICopdXNlcl9jdHgtXHUwMDNlcmVtb3RlX2lwNjtcbjE2MzI6XHRcdFx0YnJlYWs7XG4xNjMzOlx0I2VuZGlmXG4xNjM0Olx0XG4xNjM1Olx0XHRkZWZhdWx0OlxuMTYzNjpcdFx0XHRyZXQgPSAtRUFGTk9TVVBQT1JUO1xuMTYzNzpcdFx0XHRnb3RvIG91dDtcbjE2Mzg6XHRcdH1cbjE2Mzk6XHRcbjE2NDA6XHRcdHByb2dzID0gYnBmX3Byb2dfYXJyYXlfYWxsb2MoMSwgR0ZQX0tFUk5FTCk7XG4xNjQxOlx0XHRpZiAoIXByb2dzKSB7XG4xNjQyOlx0XHRcdHJldCA9IC1FTk9NRU07XG4xNjQzOlx0XHRcdGdvdG8gb3V0O1xuMTY0NDpcdFx0fVxuMTY0NTpcdFxuMTY0NjpcdFx0cHJvZ3MtXHUwMDNlaXRlbXNbMF0ucHJvZyA9IHByb2c7XG4xNjQ3Olx0XG4xNjQ4Olx0XHRicGZfdGVzdF90aW1lcl9lbnRlcihcdTAwMjZ0KTtcbjE2NDk6XHRcdGRvIHtcbjE2NTA6XHRcdFx0Y3R4LnNlbGVjdGVkX3NrID0gTlVMTDtcbjE2NTE6XHRcdFx0cmV0dmFsID0gQlBGX1BST0dfU0tfTE9PS1VQX1JVTl9BUlJBWShwcm9ncywgY3R4LCBicGZfcHJvZ19ydW4pO1xuMTY1MjpcdFx0fSB3aGlsZSAoYnBmX3Rlc3RfdGltZXJfY29udGludWUoXHUwMDI2dCwgMSwgcmVwZWF0LCBcdTAwMjZyZXQsIFx1MDAyNmR1cmF0aW9uKSk7XG4xNjUzOlx0XG4xNjU0Olx0XHRpZiAocmV0IFx1MDAzZT0gMCkge1xuMTY1NTpcdFx0XHR1c2VyX2N0eC1cdTAwM2Vjb29raWUgPSAwO1xuMTY1NjpcdFx0XHRpZiAoY3R4LnNlbGVjdGVkX3NrKSB7XG4xNjU3Olx0XHRcdFx0aWYgKGN0eC5zZWxlY3RlZF9zay1cdTAwM2Vza19yZXVzZXBvcnQgXHUwMDI2XHUwMDI2ICFjdHgubm9fcmV1c2Vwb3J0KVxuMTY1ODpcdFx0XHRcdFx0cmV0ID0gLUVPUE5PVFNVUFA7XG4xNjU5Olx0XHRcdFx0ZWxzZVxuMTY2MDpcdFx0XHRcdFx0dXNlcl9jdHgtXHUwMDNlY29va2llID0gc29ja19nZW5fY29va2llKGN0eC5zZWxlY3RlZF9zayk7XG4xNjYxOlx0XHRcdH1cbjE2NjI6XHRcdH1cbjE2NjM6XHRcdGJwZl90ZXN0X3RpbWVyX2xlYXZlKFx1MDAyNnQpO1xuMTY2NDpcdFxuMTY2NTpcdFx0aWYgKHJldCBcdTAwM2MgMClcbjE2NjY6XHRcdFx0Z290byBvdXQ7XG4xNjY3Olx0XG4xNjY4Olx0XHRyZXQgPSBicGZfdGVzdF9maW5pc2goa2F0dHIsIHVhdHRyLCBOVUxMLCBOVUxMLCAwLCAwLCByZXR2YWwsIGR1cmF0aW9uKTtcbjE2Njk6XHRcdGlmICghcmV0KVxuMTY3MDpcdFx0XHRyZXQgPSBicGZfY3R4X2ZpbmlzaChrYXR0ciwgdWF0dHIsIHVzZXJfY3R4LCBzaXplb2YoKnVzZXJfY3R4KSk7XG4xNjcxOlx0XG4xNjcyOlx0b3V0OlxuMTY3MzpcdFx0YnBmX3Byb2dfYXJyYXlfZnJlZShwcm9ncyk7XG4xNjc0Olx0XHRrZnJlZSh1c2VyX2N0eCk7XG4xNjc1Olx0XHRyZXR1cm4gcmV0O1xuMTY3NjpcdH1cbjE2Nzc6XHRcbjE2Nzg6XHRpbnQgYnBmX3Byb2dfdGVzdF9ydW5fc3lzY2FsbChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXG4xNjc5Olx0XHRcdFx0ICAgICAgY29uc3QgdW5pb24gYnBmX2F0dHIgKmthdHRyLFxuMTY4MDpcdFx0XHRcdCAgICAgIHVuaW9uIGJwZl9hdHRyIF9fdXNlciAqdWF0dHIpXG4xNjgxOlx0e1xuMTY4MjpcdFx0dm9pZCBfX3VzZXIgKmN0eF9pbiA9IHU2NF90b191c2VyX3B0cihrYXR0ci1cdTAwM2V0ZXN0LmN0eF9pbik7XG4xNjgzOlx0XHRfX3UzMiBjdHhfc2l6ZV9pbiA9IGthdHRyLVx1MDAzZXRlc3QuY3R4X3NpemVfaW47XG4xNjg0Olx0XHR2b2lkICpjdHggPSBOVUxMO1xuMTY4NTpcdFx0dTMyIHJldHZhbDtcbjE2ODY6XHRcdGludCBlcnIgPSAwO1xuMTY4NzpcdFxuMTY4ODpcdFx0LyogZG9lc24mIzM5O3Qgc3VwcG9ydCBkYXRhX2luL291dCwgY3R4X291dCwgZHVyYXRpb24sIG9yIHJlcGVhdCBvciBmbGFncyAqL1xuMTY4OTpcdFx0aWYgKGthdHRyLVx1MDAzZXRlc3QuZGF0YV9pbiB8fCBrYXR0ci1cdTAwM2V0ZXN0LmRhdGFfb3V0IHx8XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTU6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzgzMAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIGRpc3NlY3RpbmcgdGhvc2UgQlBGIHRpbWVyIGZ1bmN0aW9ucywgZnJhbWVkIGFzIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyBCUEYgVGltZXIgRW50cnkgYW5kIEV4aXQgRnVuY3Rpb25zKioKCkFscmlnaHQsIHNvIEkmIzM5O20gY3VyaW91cyBhYm91dCB0aGUgc3BlY2lmaWMgbWVjaGFuaWNzIG9mIGBicGZfdGVzdF90aW1lcl9lbnRlcmAgYW5kIGBicGZfdGVzdF90aW1lcl9sZWF2ZWAuIEkmIzM5O3ZlIHNlZW4gdGhlc2UgZnVuY3Rpb25zIHVzZWQgaW4gdGhlIGNvbnRleHQgb2YgQlBGIHRlc3RpbmcsIGFuZCBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGVpciByb2xlIHdpdGhpbiB0aGUgYnJvYWRlciBCUEYgZnJhbWV3b3JrLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gY2hlY2sgdGhlaXIgaW1wbGVtZW50YXRpb24gZGV0YWlscy4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBkZWZpbml0aW9ucyBhbmQgdXNhZ2Ugb2YgdGhvc2UgZnVuY3Rpb25zLiBHaXZlbiB0aGUgbGlrZWx5IGFyZWEgb2YgZnVuY3Rpb25hbGl0eSwgSSB0aGluayB0aGV5IHdpbGwgbW9zdCBsaWtlbHkgYmUgcmVsYXRlZCB0byB0ZXN0IGhhcm5lc3Nlcywgd2hpY2ggc3VnZ2VzdHMgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IG15IHNlYXJjaCBpcyB3aXRoaW4gdGhlIGtlcm5lbCYjMzk7cyB0ZXN0aW5nIGluZnJhc3RydWN0dXJlLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBCUEYtcmVsYXRlZCBmaWxlcy4gVGhlcmVmb3JlLCBteSBmaXJzdCB0aG91Z2h0IGlzIHRvIGNoZWNrIGBuZXQvYnBmL3Rlc3RfcnVuLmNgLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBkZXRhaWxlZCBpbXBsZW1lbnRhdGlvbiBhbmQgY29udGV4dCBJIG5lZWQuIFRpbWUgdG8gZ2V0IHRvIGl0IQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE1OjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl90ZXN0X3RpbWVyXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9icGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9icGYvdGVzdF9ydW4uYz0zMT1zdHJ1Y3QgYnBmX3Rlc3RfdGltZXIge1xuLS1cbm5ldC9icGYvdGVzdF9ydW4uYy0zNS1cbm5ldC9icGYvdGVzdF9ydW4uYzozNjpzdGF0aWMgdm9pZCBicGZfdGVzdF90aW1lcl9lbnRlcihzdHJ1Y3QgYnBmX3Rlc3RfdGltZXIgKnQpXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMzctXHRfX2FjcXVpcmVzKHJjdSlcbi0tXG5uZXQvYnBmL3Rlc3RfcnVuLmMtNDItXG5uZXQvYnBmL3Rlc3RfcnVuLmM6NDM6c3RhdGljIHZvaWQgYnBmX3Rlc3RfdGltZXJfbGVhdmUoc3RydWN0IGJwZl90ZXN0X3RpbWVyICp0KVxubmV0L2JwZi90ZXN0X3J1bi5jLTQ0LVx0X19yZWxlYXNlcyhyY3UpXG4tLVxubmV0L2JwZi90ZXN0X3J1bi5jLTQ5LVxubmV0L2JwZi90ZXN0X3J1bi5jOjUwOnN0YXRpYyBib29sIGJwZl90ZXN0X3RpbWVyX2NvbnRpbnVlKHN0cnVjdCBicGZfdGVzdF90aW1lciAqdCwgaW50IGl0ZXJhdGlvbnMsXG5uZXQvYnBmL3Rlc3RfcnVuLmMtNTEtXHRcdFx0XHQgICAgdTMyIHJlcGVhdCwgaW50ICplcnIsIHUzMiAqZHVyYXRpb24pXG4tLVxubmV0L2JwZi90ZXN0X3J1bi5jLTcyLVx0XHR0LVx1MDAzZXRpbWVfc3BlbnQgJiM0Mzs9IGt0aW1lX2dldF9ucygpIC0gdC1cdTAwM2V0aW1lX3N0YXJ0O1xubmV0L2JwZi90ZXN0X3J1bi5jOjczOlx0XHRicGZfdGVzdF90aW1lcl9sZWF2ZSh0KTtcbm5ldC9icGYvdGVzdF9ydW4uYy03NC1cdFx0Y29uZF9yZXNjaGVkKCk7XG5uZXQvYnBmL3Rlc3RfcnVuLmM6NzU6XHRcdGJwZl90ZXN0X3RpbWVyX2VudGVyKHQpO1xubmV0L2JwZi90ZXN0X3J1bi5jLTc2LVx0fVxuLS1cbm5ldC9icGYvdGVzdF9ydW4uYz0zNjA9c3RhdGljIGludCBicGZfdGVzdF9ydW5feGRwX2xpdmUoc3RydWN0IGJwZl9wcm9nICpwcm9nLCBzdHJ1Y3QgeGRwX2J1ZmYgKmN0eCxcbi0tXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMzc0LVxubmV0L2JwZi90ZXN0X3J1bi5jOjM3NTpcdGJwZl90ZXN0X3RpbWVyX2VudGVyKFx1MDAyNnQpO1xubmV0L2JwZi90ZXN0X3J1bi5jLTM3Ni1cdGRvIHtcbi0tXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMzgwLVx0XHRcdGJyZWFrO1xubmV0L2JwZi90ZXN0X3J1bi5jOjM4MTpcdH0gd2hpbGUgKGJwZl90ZXN0X3RpbWVyX2NvbnRpbnVlKFx1MDAyNnQsIHhkcC5mcmFtZV9jbnQsIHJlcGVhdCwgXHUwMDI2cmV0LCB0aW1lKSk7XG5uZXQvYnBmL3Rlc3RfcnVuLmM6MzgyOlx0YnBmX3Rlc3RfdGltZXJfbGVhdmUoXHUwMDI2dCk7XG5uZXQvYnBmL3Rlc3RfcnVuLmMtMzgzLVxuLS1cbm5ldC9icGYvdGVzdF9ydW4uYz0zODg9c3RhdGljIGludCBicGZfdGVzdF9ydW4oc3RydWN0IGJwZl9wcm9nICpwcm9nLCB2b2lkICpjdHgsIHUzMiByZXBlYXQsXG4tLVxubmV0L2JwZi90ZXN0X3J1bi5jLTQxMS1cbm5ldC9icGYvdGVzdF9ydW4uYzo0MTI6XHRicGZfdGVzdF90aW1lcl9lbnRlcihcdTAwMjZ0KTtcbm5ldC9icGYvdGVzdF9ydW4uYy00MTMtXHRvbGRfY3R4ID0gYnBmX3NldF9ydW5fY3R4KFx1MDAyNnJ1bl9jdHgucnVuX2N0eCk7XG4tLVxubmV0L2JwZi90ZXN0X3J1bi5jLTQyNS1cdFx0bG9jYWxfYmhfZW5hYmxlKCk7XG5uZXQvYnBmL3Rlc3RfcnVuLmM6NDI2Olx0fSB3aGlsZSAoYnBmX3Rlc3RfdGltZXJfY29udGludWUoXHUwMDI2dCwgMSwgcmVwZWF0LCBcdTAwMjZyZXQsIHRpbWUpKTtcbm5ldC9icGYvdGVzdF9ydW4uYy00MjctXHRicGZfcmVzZXRfcnVuX2N0eChvbGRfY3R4KTtcbm5ldC9icGYvdGVzdF9ydW4uYzo0Mjg6XHRicGZfdGVzdF90aW1lcl9sZWF2ZShcdTAwMjZ0KTtcbm5ldC9icGYvdGVzdF9ydW4uYy00MjktXG4tLVxubmV0L2JwZi90ZXN0X3J1bi5jPTE1MDk9aW50IGJwZl9wcm9nX3Rlc3RfcnVuX2Zsb3dfZGlzc2VjdG9yKHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbi0tXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTU1NS1cbm5ldC9icGYvdGVzdF9ydW4uYzoxNTU2Olx0YnBmX3Rlc3RfdGltZXJfZW50ZXIoXHUwMDI2dCk7XG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTU1Ny1cdGRvIHtcbi0tXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTU1OS1cdFx0XHRcdFx0ICBzaXplLCBmbGFncyk7XG5uZXQvYnBmL3Rlc3RfcnVuLmM6MTU2MDpcdH0gd2hpbGUgKGJwZl90ZXN0X3RpbWVyX2NvbnRpbnVlKFx1MDAyNnQsIDEsIHJlcGVhdCwgXHUwMDI2cmV0LCBcdTAwMjZkdXJhdGlvbikpO1xubmV0L2JwZi90ZXN0X3J1bi5jOjE1NjE6XHRicGZfdGVzdF90aW1lcl9sZWF2ZShcdTAwMjZ0KTtcbm5ldC9icGYvdGVzdF9ydW4uYy0xNTYyLVxuLS1cbm5ldC9icGYvdGVzdF9ydW4uYz0xNTc4PWludCBicGZfcHJvZ190ZXN0X3J1bl9za19sb29rdXAoc3RydWN0IGJwZl9wcm9nICpwcm9nLCBjb25zdCB1bmlvbiBicGZfYXR0ciAqa2F0dHIsXG4tLVxubmV0L2JwZi90ZXN0X3J1bi5jLTE2NDctXG5uZXQvYnBmL3Rlc3RfcnVuLmM6MTY0ODpcdGJwZl90ZXN0X3RpbWVyX2VudGVyKFx1MDAyNnQpO1xubmV0L2JwZi90ZXN0X3J1bi5jLTE2NDktXHRkbyB7XG4tLVxubmV0L2JwZi90ZXN0X3J1bi5jLTE2NTEtXHRcdHJldHZhbCA9IEJQRl9QUk9HX1NLX0xPT0tVUF9SVU5fQVJSQVkocHJvZ3MsIGN0eCwgYnBmX3Byb2dfcnVuKTtcbm5ldC9icGYvdGVzdF9ydW4uYzoxNjUyOlx0fSB3aGlsZSAoYnBmX3Rlc3RfdGltZXJfY29udGludWUoXHUwMDI2dCwgMSwgcmVwZWF0LCBcdTAwMjZyZXQsIFx1MDAyNmR1cmF0aW9uKSk7XG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTY1My1cbi0tXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTY2Mi1cdH1cbm5ldC9icGYvdGVzdF9ydW4uYzoxNjYzOlx0YnBmX3Rlc3RfdGltZXJfbGVhdmUoXHUwMDI2dCk7XG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTY2NC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxNTo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NTM4CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGdyYW51bGFyIG1lY2hhbmljcyBvZiB0aGVzZSBCUEYgdGltZXIgZnVuY3Rpb25zLiBTcGVjaWZpY2FsbHksIGBicGZfdGVzdF90aW1lcl9lbnRlcmAgYW5kIGBicGZfdGVzdF90aW1lcl9sZWF2ZWAuIEkmIzM5O20gZ29pbmcgdG8gaGVhZCBvdmVyIHRvIHRoZSBgbmV0L2JwZi90ZXN0X3J1bi5jYCBmaWxlIGFuZCB6ZXJvIGluIG9uIGxpbmVzIDMwIHRocm91Z2ggODAuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGNvcmUgbG9naWMgYW5kIGFueSBjcml0aWNhbCBpbnRlcmFjdGlvbnMgd2l0aGluIHRoYXQgc2VnbWVudC4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCYjMzk7cyBoYXBwZW5pbmcgYXQgdGhpcyBsZXZlbCBvZiBkZXRhaWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTU6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvYnBmL3Rlc3RfcnVuLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDMwOlx0XG4gIDMxOlx0c3RydWN0IGJwZl90ZXN0X3RpbWVyIHtcbiAgMzI6XHRcdHUzMiBpO1xuICAzMzpcdFx0dTY0IHRpbWVfc3RhcnQsIHRpbWVfc3BlbnQ7XG4gIDM0Olx0fTtcbiAgMzU6XHRcbiAgMzY6XHRzdGF0aWMgdm9pZCBicGZfdGVzdF90aW1lcl9lbnRlcihzdHJ1Y3QgYnBmX3Rlc3RfdGltZXIgKnQpXG4gIDM3Olx0XHRfX2FjcXVpcmVzKHJjdSlcbiAgMzg6XHR7XG4gIDM5Olx0XHRyY3VfcmVhZF9sb2NrX2RvbnRfbWlncmF0ZSgpO1xuICA0MDpcdFx0dC1cdTAwM2V0aW1lX3N0YXJ0ID0ga3RpbWVfZ2V0X25zKCk7XG4gIDQxOlx0fVxuICA0MjpcdFxuICA0MzpcdHN0YXRpYyB2b2lkIGJwZl90ZXN0X3RpbWVyX2xlYXZlKHN0cnVjdCBicGZfdGVzdF90aW1lciAqdClcbiAgNDQ6XHRcdF9fcmVsZWFzZXMocmN1KVxuICA0NTpcdHtcbiAgNDY6XHRcdHQtXHUwMDNldGltZV9zdGFydCA9IDA7XG4gIDQ3Olx0XHRyY3VfcmVhZF91bmxvY2tfbWlncmF0ZSgpO1xuICA0ODpcdH1cbiAgNDk6XHRcbiAgNTA6XHRzdGF0aWMgYm9vbCBicGZfdGVzdF90aW1lcl9jb250aW51ZShzdHJ1Y3QgYnBmX3Rlc3RfdGltZXIgKnQsIGludCBpdGVyYXRpb25zLFxuICA1MTpcdFx0XHRcdFx0ICAgIHUzMiByZXBlYXQsIGludCAqZXJyLCB1MzIgKmR1cmF0aW9uKVxuICA1MjpcdFx0X19tdXN0X2hvbGQocmN1KVxuICA1MzpcdHtcbiAgNTQ6XHRcdHQtXHUwMDNlaSAmIzQzOz0gaXRlcmF0aW9ucztcbiAgNTU6XHRcdGlmICh0LVx1MDAzZWkgXHUwMDNlPSByZXBlYXQpIHtcbiAgNTY6XHRcdFx0LyogV2UmIzM5O3JlIGRvbmUuICovXG4gIDU3Olx0XHRcdHQtXHUwMDNldGltZV9zcGVudCAmIzQzOz0ga3RpbWVfZ2V0X25zKCkgLSB0LVx1MDAzZXRpbWVfc3RhcnQ7XG4gIDU4Olx0XHRcdGRvX2Rpdih0LVx1MDAzZXRpbWVfc3BlbnQsIHQtXHUwMDNlaSk7XG4gIDU5Olx0XHRcdCpkdXJhdGlvbiA9IHQtXHUwMDNldGltZV9zcGVudCBcdTAwM2UgVTMyX01BWCA/IFUzMl9NQVggOiAodTMyKXQtXHUwMDNldGltZV9zcGVudDtcbiAgNjA6XHRcdFx0KmVyciA9IDA7XG4gIDYxOlx0XHRcdGdvdG8gcmVzZXQ7XG4gIDYyOlx0XHR9XG4gIDYzOlx0XG4gIDY0Olx0XHRpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHtcbiAgNjU6XHRcdFx0LyogRHVyaW5nIGl0ZXJhdGlvbjogd2UmIzM5O3ZlIGJlZW4gY2FuY2VsbGVkLCBhYm9ydC4gKi9cbiAgNjY6XHRcdFx0KmVyciA9IC1FSU5UUjtcbiAgNjc6XHRcdFx0Z290byByZXNldDtcbiAgNjg6XHRcdH1cbiAgNjk6XHRcbiAgNzA6XHRcdGlmIChuZWVkX3Jlc2NoZWQoKSkge1xuICA3MTpcdFx0XHQvKiBEdXJpbmcgaXRlcmF0aW9uOiB3ZSBuZWVkIHRvIHJlc2NoZWR1bGUgYmV0d2VlbiBydW5zLiAqL1xuICA3MjpcdFx0XHR0LVx1MDAzZXRpbWVfc3BlbnQgJiM0Mzs9IGt0aW1lX2dldF9ucygpIC0gdC1cdTAwM2V0aW1lX3N0YXJ0O1xuICA3MzpcdFx0XHRicGZfdGVzdF90aW1lcl9sZWF2ZSh0KTtcbiAgNzQ6XHRcdFx0Y29uZF9yZXNjaGVkKCk7XG4gIDc1Olx0XHRcdGJwZl90ZXN0X3RpbWVyX2VudGVyKHQpO1xuICA3NjpcdFx0fVxuICA3NzpcdFxuICA3ODpcdFx0LyogRG8gYW5vdGhlciByb3VuZC4gKi9cbiAgNzk6XHRcdHJldHVybiB0cnVlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE1OjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4zbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY0NDAKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAzNzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBCUEYgU29ja2V0IExvb2t1cCBUZXN0KioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgYnBmX3Byb2dfdGVzdF9ydW5fc2tfbG9va3VwYCBmdW5jdGlvbi4gU2VlbXMgbGlrZSB0aGUgY29yZSBpc3N1ZSBoZXJlIHJldm9sdmVzIGFyb3VuZCBob3cgYGN0eC5zZWxlY3RlZF9za2AgaXMgaGFuZGxlZCBpbiB0aGUgY29udGV4dCBvZiBCUEYgc29ja2V0IGxvb2t1cCBwcm9ncmFtcywgcGFydGljdWxhcmx5IHdoZW4gdXNpbmcgYGJwZl9za19hc3NpZ25gLiBUaGUgcHJvZ3JhbSBzZXRzIGBjdHguc2VsZWN0ZWRfc2tgLCB0aGF0JiMzOTtzIGZpbmUuIFRoZSBjcml0aWNhbCBwYXJ0IGlzIHRoYXQgdGhpcyBzb2NrZXQgaXMgdGhlbiBhY2Nlc3NlZCAqd2l0aGluKiBhbiBSQ1UgY3JpdGljYWwgc2VjdGlvbiwgc3BlY2lmaWNhbGx5IGJldHdlZW4gdGhlIGBicGZfdGVzdF90aW1lcl9lbnRlcmAgYW5kIGBicGZfdGVzdF90aW1lcl9sZWF2ZWAgY2FsbHMuIFRoaXMgaXMgd2hlcmUgdGhpbmdzIGdldCBpbnRlcmVzdGluZy4KCkJlZm9yZSB0aGlzIHBhdGNoLCB0aGUgY29kZSBjYWxsZWQgYGJwZl90ZXN0X3RpbWVyX2xlYXZlKCZhbXA7dClgICppbW1lZGlhdGVseSogYWZ0ZXIgYSBsb29wLiBDcnVjaWFsbHksIHRoYXQgY2FsbCBoYXBwZW5zICpvdXRzaWRlKiB0aGUgUkNVIHJlYWQgbG9jay4gQWZ0ZXIgdGhlIGxvY2sgaXMgcmVsZWFzZWQsIHRoZSBjb2RlIHRoZW4gcHJvY2VlZHMgdG8gYWNjZXNzIG1lbWJlcnMgb2YgYGN0eC5zZWxlY3RlZF9za2AsIHNwZWNpZmljYWxseSBgc2tfcmV1c2Vwb3J0YCBhbmQgdXNlcyBgc29ja19nZW5fY29va2llKGN0eC5zZWxlY3RlZF9zaylgLiBOb3csIGlmIGBzZWxlY3RlZF9za2Agd2VyZSAqb25seSogcHJvdGVjdGVkIGJ5IFJDVSwgdGhpcyB3b3VsZCBiZSBhIHRleHRib29rIHVzZS1hZnRlci1mcmVlIG9yIFJDVSB2aW9sYXRpb24uIERlcmVmZXJlbmNpbmcgYSBzb2NrZXQgcG9pbnRlciBhZnRlciB0aGUgUkNVIHJlYWQgbG9jayBpcyBhIGJpZyBuby1ubyEgRXNzZW50aWFsbHksIHdlJiMzOTtyZSBhY2Nlc3NpbmcgYSBwb3RlbnRpYWxseSBmcmVlZCBvciByZS1wdXJwb3NlZCBzb2NrZXQuCgpUaGUgZml4IGlzIHF1aXRlIGVsZWdhbnQuIEJ5IG1vdmluZyBgdXNlcl9jdHgtJmd0O2Nvb2tpZSA9IHNvY2tfZ2VuX2Nvb2tpZShjdHguc2VsZWN0ZWRfc2spYCBpbnNpZGUgdGhlIFJDVSBzZWN0aW9uIOKAkyByaWdodCBiZWZvcmUgdGhhdCBgYnBmX3Rlc3RfdGltZXJfbGVhdmUoJmFtcDt0KWAgY2FsbCDigJMgd2UgZW5zdXJlIHRoYXQgYGN0eC5zZWxlY3RlZF9za2AgaXMgc2FmZWx5IGFjY2Vzc2VkIHdoaWxlIHdlJiMzOTtyZSBzdGlsbCBob2xkaW5nIHRoZSBSQ1UgcmVhZCBsb2NrLiBUaGlzIGVsaW1pbmF0ZXMgdGhlIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbiBhbmQgcHJvdGVjdHMgdGhlIHNvY2tldCBmcm9tIGJlaW5nIGZyZWVkIHdoaWxlIHdlJiMzOTtyZSBzdGlsbCByZWZlcmVuY2luZyBpdC4gSXQmIzM5O3MgYSBjbGFzc2ljIGV4YW1wbGUgb2YgcHJvcGVyIFJDVSB1c2FnZTogbWFrZSBzdXJlIGFsbCByZWZlcmVuY2VzIHRvIHRoZSBkYXRhIHByb3RlY3RlZCBieSBSQ1UgYXJlIGRvbmUgdW5kZXIgdGhlIHJlYWQgbG9jay4KCk5vdywgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgd2hlcmUgYGJwZl9wcm9nX3Rlc3RfcnVuX3NrX2xvb2t1cGAgaXMgYWN0dWFsbHkgYmVpbmcgY2FsbGVkLCBhbmQgd2hhdCBjb25maWd1cmF0aW9ucyBvciBzZXR1cHMgaXQgbWlnaHQgcmVxdWlyZSB0byB0cmlnZ2VyIHRoaXMgYmVoYXZpb3IuIFRpbWUgdG8gc2VhcmNoIGZvciB0aGF0IGluIGBrZXJuZWwvYnBmL2AgYW5kIGBuZXQvYnBmL2AuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTY6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX3Byb2dfdGVzdF9ydW5fc2tfbG9va3VwJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvYnBmLmg9MzExMj1pbnQgYnBmX3Byb2dfdGVzdF9ydW5fcmF3X3RwKHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbi0tXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTMxMTQtXHRcdFx0ICAgICB1bmlvbiBicGZfYXR0ciBfX3VzZXIgKnVhdHRyKTtcbmluY2x1ZGUvbGludXgvYnBmLmg6MzExNTppbnQgYnBmX3Byb2dfdGVzdF9ydW5fc2tfbG9va3VwKHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbmluY2x1ZGUvbGludXgvYnBmLmgtMzExNi1cdFx0XHRcdGNvbnN0IHVuaW9uIGJwZl9hdHRyICprYXR0cixcbi0tXG5pbmNsdWRlL2xpbnV4L2JwZi5oPTM0NzQ9c3RhdGljIGlubGluZSBpbnQgYnBmX3Byb2dfdGVzdF9ydW5fZmxvd19kaXNzZWN0b3Ioc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuLS1cbmluY2x1ZGUvbGludXgvYnBmLmgtMzQ4MC1cbmluY2x1ZGUvbGludXgvYnBmLmg6MzQ4MTpzdGF0aWMgaW5saW5lIGludCBicGZfcHJvZ190ZXN0X3J1bl9za19sb29rdXAoc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuaW5jbHVkZS9saW51eC9icGYuaC0zNDgyLVx0XHRcdFx0XHQgICAgICBjb25zdCB1bmlvbiBicGZfYXR0ciAqa2F0dHIsXG4tLVxubmV0L2JwZi90ZXN0X3J1bi5jPTE1MDk9aW50IGJwZl9wcm9nX3Rlc3RfcnVuX2Zsb3dfZGlzc2VjdG9yKHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbi0tXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTU3Ny1cbm5ldC9icGYvdGVzdF9ydW4uYzoxNTc4OmludCBicGZfcHJvZ190ZXN0X3J1bl9za19sb29rdXAoc3RydWN0IGJwZl9wcm9nICpwcm9nLCBjb25zdCB1bmlvbiBicGZfYXR0ciAqa2F0dHIsXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTU3OS1cdFx0XHRcdHVuaW9uIGJwZl9hdHRyIF9fdXNlciAqdWF0dHIpXG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9MTIxNzQ9Y29uc3Qgc3RydWN0IGJwZl9wcm9nX29wcyBza19sb29rdXBfcHJvZ19vcHMgPSB7XG5uZXQvY29yZS9maWx0ZXIuYzoxMjE3NTpcdC50ZXN0X3J1biA9IGJwZl9wcm9nX3Rlc3RfcnVuX3NrX2xvb2t1cCxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMTc2LX07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE2OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc4MTYKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIHF1ZXN0aW9uOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBCdWlsZCBQcm9jZXNzIGZvciBgbmV0L2JwZi90ZXN0X3J1bi5jYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgYnVpbGQgcHJvY2VzcyBmb3IgYG5ldC9icGYvdGVzdF9ydW4uY2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHRyYWNlIHRoZSBjb21waWxhdGlvbiDigJMgZmlndXJpbmcgb3V0IHdoaWNoIE1ha2VmaWxlIGFjdHVhbGx5IG9yY2hlc3RyYXRlcyB0aGUgYnVpbGQuIFRoaXMgaXMgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGRlYnVnZ2luZyB0YXNrLCBidXQgdW5kZXJzdGFuZGluZyB3aGVyZSB0aGlzIGZpbGUgaXMgZ2V0dGluZyBjb21waWxlZCBmcm9tIGNhbiBvZnRlbiB1bmVhcnRoIGludGVyZXN0aW5nIGRlcGVuZGVuY3kgaXNzdWVzIGxhdGVyLiBJJiMzOTtsbCBuZWVkIHRvIGRpZyB0aHJvdWdoIHRoZSBrZXJuZWwgc291cmNlJiMzOTtzIG1ha2VmaWxlcy4gSXQmIzM5O3MgbGlrZWx5IHRoYXQgYSBgTWFrZWZpbGVgIHNvbWV3aGVyZSBpbiB0aGUgYG5ldC9icGYvYCBkaXJlY3RvcnkgaXRzZWxmIGlzIGludm9sdmVkLCBvciBwZXJoYXBzIGFuIHVwcGVyLWxldmVsIG9uZS4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYSBgZmluZGAgb3IgYSBxdWljayBncmVwIHRvIGlkZW50aWZ5IHRoZSByZWxldmFudCBgTWFrZWZpbGVgcy4gSSBtaWdodCBuZWVkIHRvIGxvb2sgYXQga2VybmVsIGNvbmZpZyBvcHRpb25zIHRvbywganVzdCB0byBiZSB0aG9yb3VnaC4gVGhlbiwgZGVwZW5kaW5nIG9uIGhvdyBjb21wbGV4IHRoZSBidWlsZCBzeXN0ZW0gaXMsIEkgbWlnaHQgaGF2ZSB0byBhZGQgc29tZSBleHRyYSBsb2dnaW5nIHRvIHRoZSBjb21waWxhdGlvbiBwcm9jZXNzLCB0byB3YXRjaCBob3cgYHRlc3RfcnVuLmNgIGZpdHMgaW50byB0aGUgd2hvbGUgcGljdHVyZS4gSSYjMzk7bSBhc3N1bWluZyBpdCYjMzk7cyBwYXJ0IG9mIGEgbW9kdWxlIG9yIG1heWJlIGEgc3BlY2lmaWMgdGVzdCBzdWl0ZSwgYW5kIHRoYXQgaW5mbyBpcyBsaWtlbHkgaW4gb25lIG9mIHRoZSByZWxldmFudCBNYWtlZmlsZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE2OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Rlc3RfcnVuJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2JwZi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2JwZi9NYWtlZmlsZS0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxubmV0L2JwZi9NYWtlZmlsZToyOm9iai0kKENPTkZJR19CUEZfU1lTQ0FMTClcdDo9IHRlc3RfcnVuLm9cbm5ldC9icGYvTWFrZWZpbGUtMy1pZmVxICgkKENPTkZJR19CUEZfSklUKSx5KVxuLS1cbm5ldC9icGYvYnBmX2R1bW15X3N0cnVjdF9vcHMuYz04Mj1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9jdHhfYXJnX2F1eCAqZmluZF9jdHhfYXJnX2luZm8oc3RydWN0IGJwZl9wcm9nX2F1eCAqYXV4LCBpbnQgb2Zmc2V0KVxuLS1cbm5ldC9icGYvYnBmX2R1bW15X3N0cnVjdF9vcHMuYy05NS0gKi9cbm5ldC9icGYvYnBmX2R1bW15X3N0cnVjdF9vcHMuYzo5NjpzdGF0aWMgaW50IGNoZWNrX3Rlc3RfcnVuX2FyZ3Moc3RydWN0IGJwZl9wcm9nICpwcm9nLCBzdHJ1Y3QgYnBmX2R1bW15X29wc190ZXN0X2FyZ3MgKmFyZ3MpXG5uZXQvYnBmL2JwZl9kdW1teV9zdHJ1Y3Rfb3BzLmMtOTcte1xuLS1cbm5ldC9icGYvYnBmX2R1bW15X3N0cnVjdF9vcHMuYz0xMjc9ZXh0ZXJuIGNvbnN0IHN0cnVjdCBicGZfbGlua19vcHMgYnBmX3N0cnVjdF9vcHNfbGlua19sb3BzO1xubmV0L2JwZi9icGZfZHVtbXlfc3RydWN0X29wcy5jLTEyOC1cbm5ldC9icGYvYnBmX2R1bW15X3N0cnVjdF9vcHMuYzoxMjk6aW50IGJwZl9zdHJ1Y3Rfb3BzX3Rlc3RfcnVuKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgY29uc3QgdW5pb24gYnBmX2F0dHIgKmthdHRyLFxubmV0L2JwZi9icGZfZHVtbXlfc3RydWN0X29wcy5jLTEzMC1cdFx0XHQgICAgdW5pb24gYnBmX2F0dHIgX191c2VyICp1YXR0cilcbi0tXG5uZXQvYnBmL2JwZl9kdW1teV9zdHJ1Y3Rfb3BzLmMtMTU2LVxubmV0L2JwZi9icGZfZHVtbXlfc3RydWN0X29wcy5jOjE1NzpcdGVyciA9IGNoZWNrX3Rlc3RfcnVuX2FyZ3MocHJvZywgYXJncyk7XG5uZXQvYnBmL2JwZl9kdW1teV9zdHJ1Y3Rfb3BzLmMtMTU4LVx0aWYgKGVycilcbi0tXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMjgtI2RlZmluZSBDUkVBVEVfVFJBQ0VfUE9JTlRTXG5uZXQvYnBmL3Rlc3RfcnVuLmM6Mjk6I2luY2x1ZGUgXHUwMDNjdHJhY2UvZXZlbnRzL2JwZl90ZXN0X3J1bi5oXHUwMDNlXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMzAtXG4tLVxubmV0L2JwZi90ZXN0X3J1bi5jPTEwMD1zdHJ1Y3QgeGRwX3Rlc3RfZGF0YSB7XG4tLVxubmV0L2JwZi90ZXN0X3J1bi5jLTExOC1cbm5ldC9icGYvdGVzdF9ydW4uYzoxMTk6c3RhdGljIHZvaWQgeGRwX3Rlc3RfcnVuX2luaXRfcGFnZShuZXRtZW1fcmVmIG5ldG1lbSwgdm9pZCAqYXJnKVxubmV0L2JwZi90ZXN0X3J1bi5jLTEyMC17XG4tLVxubmV0L2JwZi90ZXN0X3J1bi5jLTE0OS1cbm5ldC9icGYvdGVzdF9ydW4uYzoxNTA6c3RhdGljIGludCB4ZHBfdGVzdF9ydW5fc2V0dXAoc3RydWN0IHhkcF90ZXN0X2RhdGEgKnhkcCwgc3RydWN0IHhkcF9idWZmICpvcmlnX2N0eClcbm5ldC9icGYvdGVzdF9ydW4uYy0xNTEte1xuLS1cbm5ldC9icGYvdGVzdF9ydW4uYy0xNTgtXHRcdC5uaWQgPSBOVU1BX05PX05PREUsXG5uZXQvYnBmL3Rlc3RfcnVuLmM6MTU5Olx0XHQuaW5pdF9jYWxsYmFjayA9IHhkcF90ZXN0X3J1bl9pbml0X3BhZ2UsXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTYwLVx0XHQuaW5pdF9hcmcgPSB4ZHAsXG4tLVxubmV0L2JwZi90ZXN0X3J1bi5jLTIwMy1cbm5ldC9icGYvdGVzdF9ydW4uYzoyMDQ6c3RhdGljIHZvaWQgeGRwX3Rlc3RfcnVuX3RlYXJkb3duKHN0cnVjdCB4ZHBfdGVzdF9kYXRhICp4ZHApXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMjA1LXtcbi0tXG5uZXQvYnBmL3Rlc3RfcnVuLmM9MjQxPXN0YXRpYyBpbnQgeGRwX3JlY3ZfZnJhbWVzKHN0cnVjdCB4ZHBfZnJhbWUgKipmcmFtZXMsIGludCBuZnJhbWVzLFxuLS1cbm5ldC9icGYvdGVzdF9ydW4uYy0yNzItXG5uZXQvYnBmL3Rlc3RfcnVuLmM6MjczOnN0YXRpYyBpbnQgeGRwX3Rlc3RfcnVuX2JhdGNoKHN0cnVjdCB4ZHBfdGVzdF9kYXRhICp4ZHAsIHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbm5ldC9icGYvdGVzdF9ydW4uYy0yNzQtXHRcdFx0ICAgICAgdTMyIHJlcGVhdClcbi0tXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMzU5LVxubmV0L2JwZi90ZXN0X3J1bi5jOjM2MDpzdGF0aWMgaW50IGJwZl90ZXN0X3J1bl94ZHBfbGl2ZShzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHN0cnVjdCB4ZHBfYnVmZiAqY3R4LFxubmV0L2JwZi90ZXN0X3J1bi5jLTM2MS1cdFx0XHRcdCB1MzIgcmVwZWF0LCB1MzIgYmF0Y2hfc2l6ZSwgdTMyICp0aW1lKVxuLS1cbm5ldC9icGYvdGVzdF9ydW4uYy0zNzAtXG5uZXQvYnBmL3Rlc3RfcnVuLmM6MzcxOlx0cmV0ID0geGRwX3Rlc3RfcnVuX3NldHVwKFx1MDAyNnhkcCwgY3R4KTtcbm5ldC9icGYvdGVzdF9ydW4uYy0zNzItXHRpZiAocmV0KVxuLS1cbm5ldC9icGYvdGVzdF9ydW4uYy0zNzctXHRcdHhkcC5mcmFtZV9jbnQgPSAwO1xubmV0L2JwZi90ZXN0X3J1bi5jOjM3ODpcdFx0cmV0ID0geGRwX3Rlc3RfcnVuX2JhdGNoKFx1MDAyNnhkcCwgcHJvZywgcmVwZWF0IC0gdC5pKTtcbm5ldC9icGYvdGVzdF9ydW4uYy0zNzktXHRcdGlmICh1bmxpa2VseShyZXQgXHUwMDNjIDApKVxuLS1cbm5ldC9icGYvdGVzdF9ydW4uYy0zODMtXG5uZXQvYnBmL3Rlc3RfcnVuLmM6Mzg0Olx0eGRwX3Rlc3RfcnVuX3RlYXJkb3duKFx1MDAyNnhkcCk7XG5uZXQvYnBmL3Rlc3RfcnVuLmMtMzg1LVx0cmV0dXJuIHJldDtcbi0tXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMzg3LVxubmV0L2JwZi90ZXN0X3J1bi5jOjM4ODpzdGF0aWMgaW50IGJwZl90ZXN0X3J1bihzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHZvaWQgKmN0eCwgdTMyIHJlcGVhdCxcbm5ldC9icGYvdGVzdF9ydW4uYy0zODktXHRcdFx0dTMyICpyZXR2YWwsIHUzMiAqdGltZSwgYm9vbCB4ZHApXG4tLVxubmV0L2JwZi90ZXN0X3J1bi5jPTY2Mz1zdGF0aWMgdm9pZCAqYnBmX3Rlc3RfaW5pdChjb25zdCB1bmlvbiBicGZfYXR0ciAqa2F0dHIsIHUzMiB1c2VyX3NpemUsXG4tLVxubmV0L2JwZi90ZXN0X3J1bi5jLTY4NC1cbm5ldC9icGYvdGVzdF9ydW4uYzo2ODU6aW50IGJwZl9wcm9nX3Rlc3RfcnVuX3RyYWNpbmcoc3RydWN0IGJwZl9wcm9nICpwcm9nLFxubmV0L2JwZi90ZXN0X3J1bi5jLTY4Ni1cdFx0XHQgICAgICBjb25zdCB1bmlvbiBicGZfYXR0ciAqa2F0dHIsXG4tLVxubmV0L2JwZi90ZXN0X3J1bi5jLTczOC1cbm5ldC9icGYvdGVzdF9ydW4uYzo3Mzk6c3RydWN0IGJwZl9yYXdfdHBfdGVzdF9ydW5faW5mbyB7XG5uZXQvYnBmL3Rlc3RfcnVuLmMtNzQwLVx0c3RydWN0IGJwZl9wcm9nICpwcm9nO1xuLS1cbm5ldC9icGYvdGVzdF9ydW4uYz03NDU9c3RhdGljIHZvaWRcbm5ldC9icGYvdGVzdF9ydW4uYzo3NDY6X19icGZfcHJvZ190ZXN0X3J1bl9yYXdfdHAodm9pZCAqZGF0YSlcbm5ldC9icGYvdGVzdF9ydW4uYy03NDcte1xubmV0L2JwZi90ZXN0X3J1bi5jOjc0ODpcdHN0cnVjdCBicGZfcmF3X3RwX3Rlc3RfcnVuX2luZm8gKmluZm8gPSBkYXRhO1xubmV0L2JwZi90ZXN0X3J1bi5jLTc0OS1cdHN0cnVjdCBzcmN1X2N0ciBfX3BlcmNwdSAqc2NwID0gTlVMTDtcbi0tXG5uZXQvYnBmL3Rlc3RfcnVuLmMtNzgxLVxubmV0L2JwZi90ZXN0X3J1bi5jOjc4MjppbnQgYnBmX3Byb2dfdGVzdF9ydW5fcmF3X3RwKHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbm5ldC9icGYvdGVzdF9ydW4uYy03ODMtXHRcdFx0ICAgICBjb25zdCB1bmlvbiBicGZfYXR0ciAqa2F0dHIsXG4tLVxubmV0L2JwZi90ZXN0X3J1bi5jLTc4Ny1cdF9fdTMyIGN0eF9zaXplX2luID0ga2F0dHItXHUwMDNldGVzdC5jdHhfc2l6ZV9pbjtcbm5ldC9icGYvdGVzdF9ydW4uYzo3ODg6XHRzdHJ1Y3QgYnBmX3Jhd190cF90ZXN0X3J1bl9pbmZvIGluZm87XG5uZXQvYnBmL3Rlc3RfcnVuLmMtNzg5LVx0aW50IGNwdSA9IGthdHRyLVx1MDAzZXRlc3QuY3B1LCBlcnIgPSAwO1xuLS1cbm5ldC9icGYvdGVzdF9ydW4uYy04MjMtXHRpZiAocHJvZy1cdTAwM2VzbGVlcGFibGUpIHtcbm5ldC9icGYvdGVzdF9ydW4uYzo4MjQ6XHRcdF9fYnBmX3Byb2dfdGVzdF9ydW5fcmF3X3RwKFx1MDAyNmluZm8pO1xubmV0L2JwZi90ZXN0X3J1bi5jLTgyNS1cdH0gZWxzZSB7XG4tLVxubmV0L2JwZi90ZXN0X3J1bi5jLTgyOC1cdFx0ICAgIGNwdSA9PSBjdXJyZW50X2NwdSkge1xubmV0L2JwZi90ZXN0X3J1bi5jOjgyOTpcdFx0XHRfX2JwZl9wcm9nX3Rlc3RfcnVuX3Jhd190cChcdTAwMjZpbmZvKTtcbm5ldC9icGYvdGVzdF9ydW4uYy04MzAtXHRcdH0gZWxzZSBpZiAoY3B1IFx1MDAzZT0gbnJfY3B1X2lkcyB8fCAhY3B1X29ubGluZShjcHUpKSB7XG4tLVxubmV0L2JwZi90ZXN0X3J1bi5jLTgzOS1cdFx0XHRlcnIgPSBzbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGUoY3B1LFxubmV0L2JwZi90ZXN0X3J1bi5jOjg0MDpcdFx0XHRcdFx0XHQgICAgICAgX19icGZfcHJvZ190ZXN0X3J1bl9yYXdfdHAsXG5uZXQvYnBmL3Rlc3RfcnVuLmMtODQxLVx0XHRcdFx0XHRcdCAgICAgICBcdTAwMjZpbmZvLCAxKTtcbi0tXG5uZXQvYnBmL3Rlc3RfcnVuLmM9MTAyOT1zdGF0aWMgc3RydWN0IHByb3RvIGJwZl9kdW1teV9wcm90byA9IHtcbi0tXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTAzNC1cbm5ldC9icGYvdGVzdF9ydW4uYzoxMDM1OmludCBicGZfcHJvZ190ZXN0X3J1bl9za2Ioc3RydWN0IGJwZl9wcm9nICpwcm9nLCBjb25zdCB1bmlvbiBicGZfYXR0ciAqa2F0dHIsXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTAzNi1cdFx0XHQgIHVuaW9uIGJwZl9hdHRyIF9fdXNlciAqdWF0dHIpXG4tLVxubmV0L2JwZi90ZXN0X3J1bi5jLTEwODctXHRcdGlmIChjdHgtXHUwMDNlZGF0YV9lbmQpIHtcbm5ldC9icGYvdGVzdF9ydW4uYzoxMDg4Olx0XHRcdC8qIE5vbi1saW5lYXIgTFdUIHRlc3RfcnVuIGlzIHVuc3VwcG9ydGVkIGZvciBub3cuICovXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTA4OS1cdFx0XHRpZiAoaXNfbHd0KSB7XG4tLVxubmV0L2JwZi90ZXN0X3J1bi5jLTEyMjQtXG5uZXQvYnBmL3Rlc3RfcnVuLmM6MTIyNTpcdHJldCA9IGJwZl90ZXN0X3J1bihwcm9nLCBza2IsIHJlcGVhdCwgXHUwMDI2cmV0dmFsLCBcdTAwMjZkdXJhdGlvbiwgZmFsc2UpO1xubmV0L2JwZi90ZXN0X3J1bi5jLTEyMjYtXHRpZiAocmV0KVxuLS1cbm5ldC9icGYvdGVzdF9ydW4uYz0xMzIwPXN0YXRpYyB2b2lkIHhkcF9jb252ZXJ0X2J1ZmZfdG9fbWQoc3RydWN0IHhkcF9idWZmICp4ZHAsIHN0cnVjdCB4ZHBfbWQgKnhkcF9tZClcbi0tXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTMzMS1cbm5ldC9icGYvdGVzdF9ydW4uYzoxMzMyOmludCBicGZfcHJvZ190ZXN0X3J1bl94ZHAoc3RydWN0IGJwZl9wcm9nICpwcm9nLCBjb25zdCB1bmlvbiBicGZfYXR0ciAqa2F0dHIsXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTMzMy1cdFx0XHQgIHVuaW9uIGJwZl9hdHRyIF9fdXNlciAqdWF0dHIpXG4tLVxubmV0L2JwZi90ZXN0X3J1bi5jLTE0NjItXHRpZiAoZG9fbGl2ZSlcbm5ldC9icGYvdGVzdF9ydW4uYzoxNDYzOlx0XHRyZXQgPSBicGZfdGVzdF9ydW5feGRwX2xpdmUocHJvZywgXHUwMDI2eGRwLCByZXBlYXQsIGJhdGNoX3NpemUsIFx1MDAyNmR1cmF0aW9uKTtcbm5ldC9icGYvdGVzdF9ydW4uYy0xNDY0LVx0ZWxzZVxubmV0L2JwZi90ZXN0X3J1bi5jOjE0NjU6XHRcdHJldCA9IGJwZl90ZXN0X3J1bihwcm9nLCBcdTAwMjZ4ZHAsIHJlcGVhdCwgXHUwMDI2cmV0dmFsLCBcdTAwMjZkdXJhdGlvbiwgdHJ1ZSk7XG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTQ2Ni1vdXRfcHV0X2Rldjpcbi0tXG5uZXQvYnBmL3Rlc3RfcnVuLmM9MTQ5ND1zdGF0aWMgaW50IHZlcmlmeV91c2VyX2JwZl9mbG93X2tleXMoc3RydWN0IGJwZl9mbG93X2tleXMgKmN0eClcbi0tXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTUwOC1cbm5ldC9icGYvdGVzdF9ydW4uYzoxNTA5OmludCBicGZfcHJvZ190ZXN0X3J1bl9mbG93X2Rpc3NlY3RvcihzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTUxMC1cdFx0XHRcdCAgICAgY29uc3QgdW5pb24gYnBmX2F0dHIgKmthdHRyLFxuLS1cbm5ldC9icGYvdGVzdF9ydW4uYy0xNTc3LVxubmV0L2JwZi90ZXN0X3J1bi5jOjE1Nzg6aW50IGJwZl9wcm9nX3Rlc3RfcnVuX3NrX2xvb2t1cChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIGNvbnN0IHVuaW9uIGJwZl9hdHRyICprYXR0cixcbm5ldC9icGYvdGVzdF9ydW4uYy0xNTc5LVx0XHRcdFx0dW5pb24gYnBmX2F0dHIgX191c2VyICp1YXR0cilcbi0tXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTY3Ny1cbm5ldC9icGYvdGVzdF9ydW4uYzoxNjc4OmludCBicGZfcHJvZ190ZXN0X3J1bl9zeXNjYWxsKHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbm5ldC9icGYvdGVzdF9ydW4uYy0xNjc5LVx0XHRcdCAgICAgIGNvbnN0IHVuaW9uIGJwZl9hdHRyICprYXR0cixcbi0tXG5uZXQvYnBmL3Rlc3RfcnVuLmM9MTc2ND1zdGF0aWMgX19iZTE2IG5mcHJvdG9fZXRoKGludCBuZnByb3RvKVxuLS1cbm5ldC9icGYvdGVzdF9ydW4uYy0xNzc1LVxubmV0L2JwZi90ZXN0X3J1bi5jOjE3NzY6aW50IGJwZl9wcm9nX3Rlc3RfcnVuX25mKHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbm5ldC9icGYvdGVzdF9ydW4uYy0xNzc3LVx0XHRcdCBjb25zdCB1bmlvbiBicGZfYXR0ciAqa2F0dHIsXG4tLVxubmV0L2JwZi90ZXN0X3J1bi5jLTE4NjMtXG5uZXQvYnBmL3Rlc3RfcnVuLmM6MTg2NDpcdHJldCA9IGJwZl90ZXN0X3J1bihwcm9nLCBcdTAwMjZjdHgsIHJlcGVhdCwgXHUwMDI2cmV0dmFsLCBcdTAwMjZkdXJhdGlvbiwgZmFsc2UpO1xubmV0L2JwZi90ZXN0X3J1bi5jLTE4NjUtXHRpZiAocmV0KVxuLS1cbm5ldC9icGYvdGVzdF9ydW4uYz0xODg2PUJURl9JRChmdW5jLCBicGZfa2Z1bmNfY2FsbF9tZW1iX3JlbGVhc2VfZHRvcilcbm5ldC9icGYvdGVzdF9ydW4uYy0xODg3LVxubmV0L2JwZi90ZXN0X3J1bi5jOjE4ODg6c3RhdGljIGludCBfX2luaXQgYnBmX3Byb2dfdGVzdF9ydW5faW5pdCh2b2lkKVxubmV0L2JwZi90ZXN0X3J1bi5jLTE4ODkte1xuLS1cbm5ldC9icGYvdGVzdF9ydW4uYy0xOTA5LX1cbm5ldC9icGYvdGVzdF9ydW4uYzoxOTEwOmxhdGVfaW5pdGNhbGwoYnBmX3Byb2dfdGVzdF9ydW5faW5pdCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE2OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT40bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNjM1CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIENvbmZpZ3VyYXRpb24gZm9yIGBicGZfcHJvZ190ZXN0X3J1bl9za19sb29rdXBgKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMgdG8gZ2V0IGBicGZfcHJvZ190ZXN0X3J1bl9za19sb29rdXBgIHdvcmtpbmcuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpdmUgaW50byB0aGUga2VybmVsIGJ1aWxkIHN5c3RlbSBhbmQgc2VlIHdoYXQmIzM5O3MgY29udHJvbGxpbmcgaXRzIGluY2x1c2lvbi4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGNoZWNraW5nIGBuZXQvYnBmL01ha2VmaWxlYCDigJMgdGhhdCYjMzk7cyB1c3VhbGx5IHdoZXJlIHRoZXNlIHRoaW5ncyBhcmUgZGVmaW5lZC4gQW5kLCBvZiBjb3Vyc2UsIEkgc2hvdWxkIGFsc28gbG9vayBhdCB0aGUgcmVsZXZhbnQgS2NvbmZpZyBmaWxlcy4gTGlrZWx5IGNhbmRpZGF0ZXMgYXJlIGBrZXJuZWwvYnBmL0tjb25maWdgIG9yIGV2ZW4gYG5ldC9LY29uZmlnYCwgdGhvdWdoIGl0IGNvdWxkIGJlIHR1Y2tlZCBhd2F5IGVsc2V3aGVyZS4KClJpZ2h0LCBgbmV0L2JwZi9NYWtlZmlsZWAuLi4gQWhhISBUaGVyZSBpdCBpczogYG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgOj0gdGVzdF9ydW4ub2AuIFNvLCB0aGUgcHJlc2VuY2Ugb2YgYHRlc3RfcnVuLm9gLCB3aGljaCBwcmVzdW1hYmx5IGNvbnRhaW5zIHRoaXMgdGVzdCBmdW5jdGlvbiwgaXMgZGVwZW5kZW50IG9uIGBDT05GSUdfQlBGX1NZU0NBTExgLiBOb3csIHdoZXJlIGlzICp0aGF0KiBkZWZpbmVkPyBJIG5lZWQgdG8gZmluZCB3aGVyZSBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBzZXQuIEdpdmVuIGl0JiMzOTtzIGEgQlBGLXJlbGF0ZWQgc3lzY2FsbCwgYGluaXQvS2NvbmZpZ2Agb3IgZXZlbiBga2VybmVsL2JwZi9LY29uZmlnYCBhcmUgdGhlIG1vc3QgbG9naWNhbCBwbGFjZXMgdG8gbG9vayBmb3IgaXRzIGRlZmluaXRpb24uIFRpbWUgdG8gY2hlY2sgdGhvc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE2OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9TWVNDQUxMJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5pdC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxNjowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjA3NQoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRmluZGluZyB0aGUgYGNvbmZpZyBCUEZfU1lTQ0FMTGAgaW4gdGhlIEtlcm5lbCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgY29uZmlndXJhdGlvbiBvcHRpb24gYEJQRl9TWVNDQUxMYCB3aXRoaW4gdGhlIGtlcm5lbCBzb3VyY2UgY29kZS4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaW52b2x2ZXMgYSBmZXcgc3RyYXRlZ2llcywgZGVwZW5kaW5nIG9uIGhvdyBpbi1kZXB0aCBJIG5lZWQgdG8gYmUuCgpGaXJzdCwgYSBxdWljayBhbmQgZGlydHkgYXBwcm9hY2g6IEkmIzM5O2QgcHJvYmFibHkgc3RhcnQgd2l0aCBhIGBncmVwYCBvciBgYWNrYCAob3Igd2hhdGV2ZXIgc2VhcmNoIHRvb2wgSSBwcmVmZXIpIGRpcmVjdGx5IGluIHRoZSBrZXJuZWwgc291cmNlIHRyZWUuIFNvbWV0aGluZyBsaWtlIGBncmVwIC1yICYjMzQ7Q09ORklHX0JQRl9TWVNDQUxMJiMzNDsgL3BhdGgvdG8va2VybmVsL3NvdXJjZWAgc2hvdWxkIGdpdmUgbWUgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBUaGlzIHNob3VsZCBzaG93IG1lIGFsbCB0aGUgcGxhY2VzIHdoZXJlIHRoaXMgY29uZmlndXJhdGlvbiBzeW1ib2wgaXMgdXNlZC4KCkdpdmVuIG15IGxldmVsIG9mIGV4cGVydGlzZSwgSSB3b3VsZCB0aGVuIHJlZmluZSBteSBzZWFyY2ggdXNpbmcgdG9vbHMgbGlrZSBga2NvbmZpZ2Agb3IgdGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0gdG8gZmlndXJlIG91dCB3aGVyZSB0aGUgS2NvbmZpZyBmaWxlIGZvciB0aGF0IG9wdGlvbiBpcyBzbyBJIGNhbiB1bmRlcnN0YW5kIHRoZSBjb250ZXh0OiB3aGF0IG90aGVyIG9wdGlvbnMgZG9lcyBpdCBkZXBlbmQgb24/IFdoYXQgcGxhdGZvcm0gaXMgaXQgZm9yPwoKRnJvbSB0aGVyZSwgaWYgSSBuZWVkIG1vcmUgY29udGV4dCwgSSB3b3VsZCBsb29rIGZvciB0aGUgcmVsYXRlZCBLY29uZmlnIGZpbGUuIFRoaXMgd291bGQgZ2l2ZSBtZSB0aGUgZGVwZW5kZW5jaWVzIGFuZCBoZWxwIG1lIHBpbnBvaW50IHdoZXJlIHRoZSBvcHRpb24gaXMgYWN0dWFsbHkgZGVmaW5lZCBhbmQgdXNlZC4gSSB3b3VsZCBwcm9iYWJseSBmb2N1cyBvbiBgS2NvbmZpZ2AgZmlsZXMgdW5kZXIgdGhlIHJlbGV2YW50IHN1YmRpcmVjdG9yaWVzIChlLmcuLCBgbmV0L2AsIGBrZXJuZWwvYCwgYGFyY2gvKi9gKSBhbmQgbG9vayBmb3IgZGVwZW5kZW5jaWVzLCBkZWZhdWx0IHZhbHVlcywgYW5kIGFueSBkb2N1bWVudGF0aW9uIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3ltYm9sLiBUaGlzIHdpbGwgaGVscCBtZSB0byB1bmRlcnN0YW5kIHRoZSAqd2h5KiBvZiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb24uCgpVbHRpbWF0ZWx5LCBJIHdhbnQgdG8gdW5kZXJzdGFuZCBpdHMgaW1wYWN0IGFuZCByZWxhdGVkIGltcGxpY2F0aW9ucy4gSSYjMzk7ZCBjb25zaWRlciBjcm9zcy1yZWZlcmVuY2luZyB0aGlzIGluZm9ybWF0aW9uIHdpdGgga2VybmVsIGRvY3VtZW50YXRpb24sIG1haWxpbmcgbGlzdHMsIGFuZCBtYXliZSBldmVuIHNvdXJjZSBjb2RlIGNvbW1lbnRzIHRvIGdldCBhIGNvbXByZWhlbnNpdmUgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTY6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9TWVNDQUxMJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvS2NvbmZpZz0yNT1tZW51IFwmIzM0O0JQRiBzdWJzeXN0ZW1cJiMzNDtcbmtlcm5lbC9icGYvS2NvbmZpZy0yNi1cbmtlcm5lbC9icGYvS2NvbmZpZzoyNzpjb25maWcgQlBGX1NZU0NBTExcbmtlcm5lbC9icGYvS2NvbmZpZy0yOC1cdGJvb2wgXCYjMzQ7RW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE2OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNTYwCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipFeGFtaW5pbmcgQlBGIEtlcm5lbCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIGZvciBzb21lIEJQRi1yZWxhdGVkIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIE15IGluc3RpbmN0IHRlbGxzIG1lIHRoYXQgdGhlIGBrZXJuZWwvYnBmL0tjb25maWdgIGZpbGUgaXMgdGhlIHBsYWNlIHRvIHN0YXJ0LCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMjUuIFRoYXQgc2VjdGlvbiBpcyB1c3VhbGx5IHdoZXJlIHRoZXkgZGVmaW5lIHRoZSBtYWluIGNvbnRyb2xzLiBMZXQmIzM5O3Mgc2VlIGlmIHRoaXMgaHVuY2ggaXMgY29ycmVjdCwgb3IgaWYgdGhlcmUmIzM5O3MgYSBtb3JlIHNwZWNpZmljIEtjb25maWcgZmlsZSBlbHNld2hlcmUuIEl0JiMzOTtzIG9mdGVuIGhlbHBmdWwgdG8gcXVpY2tseSBzY2FuIHRoZSBkZXBlbmRlbmNpZXMgZGVmaW5lZCB0byBnZXQgYSBzZW5zZSBvZiB3aGF0IG90aGVyIGZlYXR1cmVzIG5lZWQgdG8gYmUgZW5hYmxlZCBiZWZvcmUgSSBjYW4gZXZlbiBiZWdpbiB0byB1c2UgdGhpcy4gSSYjMzk7bGwgZm9jdXMgb24gdGhlIHByZS1yZXF1aXNpdGVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxNjowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMjA6XHQjIFVzZWQgYnkgYXJjaHMgdG8gdGVsbCB0aGF0IHRoZXkgd2FudCB0aGUgQlBGIEpJVCBjb21waWxlciBlbmFibGVkIGJ5XG4gIDIxOlx0IyBkZWZhdWx0IGZvciBrZXJuZWxzIHRoYXQgd2VyZSBjb21waWxlZCB3aXRoIEJQRiBKSVQgc3VwcG9ydC5cbiAgMjI6XHRjb25maWcgQVJDSF9XQU5UX0RFRkFVTFRfQlBGX0pJVFxuICAyMzpcdFx0Ym9vbFxuICAyNDpcdFxuICAyNTpcdG1lbnUgXCYjMzQ7QlBGIHN1YnN5c3RlbVwmIzM0O1xuICAyNjpcdFxuICAyNzpcdGNvbmZpZyBCUEZfU1lTQ0FMTFxuICAyODpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcJiMzNDtcbiAgMjk6XHRcdHNlbGVjdCBCUEZcbiAgMzA6XHRcdHNlbGVjdCBJUlFfV09SS1xuICAzMTpcdFx0c2VsZWN0IE5FRURfVEFTS1NfUkNVXG4gIDMyOlx0XHRzZWxlY3QgVEFTS1NfVFJBQ0VfUkNVXG4gIDMzOlx0XHRzZWxlY3QgQklOQVJZX1BSSU5URlxuICAzNDpcdFx0c2VsZWN0IE5FVF9TT0NLX01TRyBpZiBORVRcbiAgMzU6XHRcdHNlbGVjdCBORVRfWEdSRVNTIGlmIE5FVFxuICAzNjpcdFx0c2VsZWN0IFBBR0VfUE9PTCBpZiBORVRcbiAgMzc6XHRcdGRlZmF1bHQgblxuICAzODpcdFx0aGVscFxuICAzOTpcdFx0ICBFbmFibGUgdGhlIGJwZigpIHN5c3RlbSBjYWxsIHRoYXQgYWxsb3dzIHRvIG1hbmlwdWxhdGUgQlBGIHByb2dyYW1zXG4gIDQwOlx0XHQgIGFuZCBtYXBzIHZpYSBmaWxlIGRlc2NyaXB0b3JzLlxuICA0MTpcdFxuICA0MjpcdGNvbmZpZyBCUEZfSklUXG4gIDQzOlx0XHRib29sIFwmIzM0O0VuYWJsZSBCUEYgSnVzdCBJbiBUaW1lIGNvbXBpbGVyXCYjMzQ7XG4gIDQ0Olx0XHRkZXBlbmRzIG9uIEJQRlxuICA0NTpcdFx0ZGVwZW5kcyBvbiBIQVZFX0NCUEZfSklUIHx8IEhBVkVfRUJQRl9KSVRcbiAgNDY6XHRcdHNlbGVjdCBFWEVDTUVNXG4gIDQ3Olx0XHRoZWxwXG4gIDQ4Olx0XHQgIEJQRiBwcm9ncmFtcyBhcmUgbm9ybWFsbHkgaGFuZGxlZCBieSBhIEJQRiBpbnRlcnByZXRlci4gVGhpcyBvcHRpb25cbiAgNDk6XHRcdCAgYWxsb3dzIHRoZSBrZXJuZWwgdG8gZ2VuZXJhdGUgbmF0aXZlIGNvZGUgd2hlbiBhIHByb2dyYW0gaXMgbG9hZGVkXG4gIDUwOlx0XHQgIGludG8gdGhlIGtlcm5lbC4gVGhpcyB3aWxsIHNpZ25pZmljYW50bHkgc3BlZWQtdXAgcHJvY2Vzc2luZyBvZiBCUEZcbiAgNTE6XHRcdCAgcHJvZ3JhbXMuXG4gIDUyOlx0XG4gIDUzOlx0XHQgIE5vdGUsIGFuIGFkbWluIHNob3VsZCBlbmFibGUgdGhpcyBmZWF0dXJlIGNoYW5naW5nOlxuICA1NDpcdFx0ICAvcHJvYy9zeXMvbmV0L2NvcmUvYnBmX2ppdF9lbmFibGVcbiAgNTU6XHRcdCAgL3Byb2Mvc3lzL25ldC9jb3JlL2JwZl9qaXRfaGFyZGVuICAgKG9wdGlvbmFsKVxuICA1NjpcdFx0ICAvcHJvYy9zeXMvbmV0L2NvcmUvYnBmX2ppdF9rYWxsc3ltcyAob3B0aW9uYWwpXG4gIDU3Olx0XG4gIDU4Olx0Y29uZmlnIEJQRl9KSVRfQUxXQVlTX09OXG4gIDU5Olx0XHRib29sIFwmIzM0O1Blcm1hbmVudGx5IGVuYWJsZSBCUEYgSklUIGFuZCByZW1vdmUgQlBGIGludGVycHJldGVyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE2OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMzQ3CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBhbiBleHBlcnQgaW4gbXkgZmllbGQ6CgoqKkludmVzdGlnYXRpbmcgYSBEZXBlbmRlbmN5IGluIHRoZSBCdWlsZCBTeXN0ZW0qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBuZXQvYnBmL3Rlc3RfcnVuLmNgIGFuZCBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgaXQgcmVsaWVzIG9uIGBDT05GSUdfTkVUYC4gTXkgZmlyc3Qgc3RlcCBpcyB0byBkaXZlIGludG8gdGhlIGJ1aWxkIHN5c3RlbSDigJMgc3BlY2lmaWNhbGx5LCB0aGUgYG5ldC9NYWtlZmlsZWAuIEkgd2FudCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYG5ldC9icGYvYCBkaXJlY3RvcnkgaXRzZWxmIGlzIGJ1aWx0LCBiZWNhdXNlIHRoYXQmIzM5O3MgbGlrZWx5IHdoZXJlIHRoZSBkZXBlbmRlbmN5IGluZm9ybWF0aW9uIHdpbGwgcmVzaWRlLiBJJiMzOTttIHRoaW5raW5nLCBieSBleGFtaW5pbmcgdGhlIHJ1bGVzIGZvciB0aGUgYG5ldC9icGYvYCBkaXJlY3RvcnksIEkgc2hvdWxkIGJlIGFibGUgdG8gdHJhY2UgaG93IGB0ZXN0X3J1bi5jYCBpcyBjb21waWxlZCBhbmQgbGlua2VkLiBUaGF0IHNob3VsZCByZXZlYWwgd2hldGhlciBgQ09ORklHX05FVGAgaXMgYSByZXF1aXJlZCBjb25maWd1cmF0aW9uIG9wdGlvbiBmb3IgdGhpcyBzcGVjaWZpYyBwaWVjZSBvZiBjb2RlLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGJhc2VkIG9uIHNvbWUgS2NvbmZpZyBzZXR0aW5nIGluIHRoZSBNYWtlZmlsZSBvciBhIHNpbWlsYXIgbWVjaGFuaXNtLiBJdCYjMzk7cyB0aW1lIHRvIGRpZyBpbiBhbmQgc2VlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxNjowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L01ha2VmaWxlPTE0PW9iai0kKENPTkZJR19MTEMpXHRcdCYjNDM7PSBsbGMvXG5uZXQvTWFrZWZpbGU6MTU6b2JqLXlcdFx0XHRcdCYjNDM7PSBldGhlcm5ldC8gODAyLyBzY2hlZC8gbmV0bGluay8gYnBmLyBldGh0b29sL1xubmV0L01ha2VmaWxlLTE2LW9iai0kKENPTkZJR19ORVRGSUxURVIpXHRcdCYjNDM7PSBuZXRmaWx0ZXIvXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE2OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNzA3CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMTUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IExpbmUgb2YgSW5xdWlyeTogQlBGIGFuZCBza19sb29rdXAqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gaG93IGBza19sb29rdXBgIGZ1bmN0aW9uYWxpdHkgaW50ZXJhY3RzIHdpdGggQlBGIGluIHRoZSBrZXJuZWwuIE15IGluaXRpYWwgdW5kZXJzdGFuZGluZyBpcyB0aGF0IGBuZXQvYCBpcyBjb21waWxlZCBpZiBgQ09ORklHX05FVD15YCwgd2hpY2ggaXMgdGhlIGJhc2UgY29uZGl0aW9uLiBJIHRoZW4gc2VlIGluIGBuZXQvYnBmL01ha2VmaWxlYCB0aGUgbGluZTogYG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgOj0gdGVzdF9ydW4ub2AsIHdoaWNoIGlzIGV4cGVjdGVkLiBOb3csIEkga25vdyBgc2tfbG9va3VwYCYjMzk7cyBwcm9ncmFtIG9wZXJhdGlvbnMgYXJlIGRlZmluZWQgd2l0aGluIGBuZXQvY29yZS9maWx0ZXIuY2AuIFNwZWNpZmljYWxseSwgSSBhbSBpbnRlcmVzdGVkIGluIHRoaXMgbGluZTogYGNvbnN0IHN0cnVjdCBicGZfcHJvZ19vcHMgc2tfbG9va3VwX3Byb2dfb3BzID0geyAudGVzdF9ydW4gPSBicGZfcHJvZ190ZXN0X3J1bl9za19sb29rdXAsIH07YC4gTXkgbmV4dCBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBkZXRlcm1pbmUgaWYgYW55IG90aGVyIGNvbmZpZ3VyYXRpb25zLCBsaWtlIGBDT05GSUdfSU5FVGAgb3IgYENPTkZJR19JUFY2YCwgbWlnaHQgYmUgaW5mbHVlbmNpbmcgdGhpcyBzcGVjaWZpYyBwYXRoIG9yIGZ1bmN0aW9uYWxpdHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMuIFRoZXJlZm9yZSwgSSYjMzk7bSBnb2luZyB0byBjYXJlZnVsbHkgcmUtZXhhbWluZSBgbmV0L2NvcmUvZmlsdGVyLmNgLCBwYXJ0aWN1bGFybHkgYXJvdW5kIHRoZSBkZWZpbml0aW9uIGFuZCB1c2FnZSBvZiBgc2tfbG9va3VwX3Byb2dfb3BzYCB0byBmdWxseSBncmFzcCBpdHMgaW50ZWdyYXRpb24gYW5kIGFueSBwb3RlbnRpYWwgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYXNwZWN0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTY6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2tfbG9va3VwX3Byb2dfb3BzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL2ZpbHRlci5jPTEyMDc3PXN0YXRpYyB1MzIgc2tfbG9va3VwX2NvbnZlcnRfY3R4X2FjY2VzcyhlbnVtIGJwZl9hY2Nlc3NfdHlwZSB0eXBlLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTEyMTczLVxubmV0L2NvcmUvZmlsdGVyLmM6MTIxNzQ6Y29uc3Qgc3RydWN0IGJwZl9wcm9nX29wcyBza19sb29rdXBfcHJvZ19vcHMgPSB7XG5uZXQvY29yZS9maWx0ZXIuYy0xMjE3NS1cdC50ZXN0X3J1biA9IGJwZl9wcm9nX3Rlc3RfcnVuX3NrX2xvb2t1cCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTY6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQyNzQKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgUGFja2V0IEZpbHRlcmluZyBLZXJuZWwgQ29kZSoqCgpPa2F5LCB0aW1lIHRvIGdldCB0byB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlci4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBzcGVjaWZpY3Mgb2YgaG93IHRoaXMgcGFja2V0IGZpbHRlcmluZyBtZWNoYW5pc20gd29ya3MgaW4gdGhlIGtlcm5lbC4gSSYjMzk7bSB0aGlua2luZyBJJiMzOTtsbCBzdGFydCBieSB0YWtpbmcgYSBsb29rIGF0IGBuZXQvY29yZS9maWx0ZXIuY2AuIFRoYXQmIzM5O3MgdXN1YWxseSB0aGUgcGxhY2UgdG8gc3RhcnQuIE5vdywgbGV0JiMzOTtzIHNlZSwgYmFzZWQgb24gbXkgcHJldmlvdXMgYW5hbHlzaXMgSSBiZWxpZXZlIHRoZSByZWxldmFudCBjb2RlIGlzIGFyb3VuZCBsaW5lIDEyMTcwLiBJJiMzOTtsbCBmb2N1cyBteSBhdHRlbnRpb24gb24gdGhhdCBzZWN0aW9uIGFuZCBzZWUgaWYgSSBjYW4gcGlucG9pbnQgdGhlIHJlbGV2YW50IGxvZ2ljIGZvciB0aGlzIHBhcnRpY3VsYXIgaXNzdWUuIEhvcGVmdWxseSwgdGhhdCB3aWxsIHJlZnJlc2ggbXkgbWVtb3J5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxNjowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL2ZpbHRlci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTIxNjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTIxNjU6XHRcdFx0Kmluc24mIzQzOyYjNDM7ID0gQlBGX0xEWF9NRU0oQlBGX1csIHNpLVx1MDAzZWRzdF9yZWcsIHNpLVx1MDAzZXNyY19yZWcsXG4xMjE2NjpcdFx0XHRcdFx0ICAgICAgYnBmX3RhcmdldF9vZmYoc3RydWN0IGJwZl9za19sb29rdXBfa2VybixcbjEyMTY3Olx0XHRcdFx0XHRcdFx0ICAgICBpbmdyZXNzX2lmaW5kZXgsIDQsIHRhcmdldF9zaXplKSk7XG4xMjE2ODpcdFx0XHRicmVhaztcbjEyMTY5Olx0XHR9XG4xMjE3MDpcdFxuMTIxNzE6XHRcdHJldHVybiBpbnNuIC0gaW5zbl9idWY7XG4xMjE3MjpcdH1cbjEyMTczOlx0XG4xMjE3NDpcdGNvbnN0IHN0cnVjdCBicGZfcHJvZ19vcHMgc2tfbG9va3VwX3Byb2dfb3BzID0ge1xuMTIxNzU6XHRcdC50ZXN0X3J1biA9IGJwZl9wcm9nX3Rlc3RfcnVuX3NrX2xvb2t1cCxcbjEyMTc2Olx0fTtcbjEyMTc3Olx0XG4xMjE3ODpcdGNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfb3BzIHNrX2xvb2t1cF92ZXJpZmllcl9vcHMgPSB7XG4xMjE3OTpcdFx0LmdldF9mdW5jX3Byb3RvXHRcdD0gc2tfbG9va3VwX2Z1bmNfcHJvdG8sXG4xMjE4MDpcdFx0LmlzX3ZhbGlkX2FjY2Vzc1x0PSBza19sb29rdXBfaXNfdmFsaWRfYWNjZXNzLFxuMTIxODE6XHRcdC5jb252ZXJ0X2N0eF9hY2Nlc3NcdD0gc2tfbG9va3VwX2NvbnZlcnRfY3R4X2FjY2VzcyxcbjEyMTgyOlx0fTtcbjEyMTgzOlx0XG4xMjE4NDpcdCNlbmRpZiAvKiBDT05GSUdfSU5FVCAqL1xuMTIxODU6XHRcbjEyMTg2Olx0REVGSU5FX0JQRl9ESVNQQVRDSEVSKHhkcClcbjEyMTg3Olx0XG4xMjE4ODpcdHZvaWQgYnBmX3Byb2dfY2hhbmdlX3hkcChzdHJ1Y3QgYnBmX3Byb2cgKnByZXZfcHJvZywgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuMTIxODk6XHR7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE2OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0OTE4CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogNTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgYENPTkZJR19JTkVUYCBHdWFyZCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBzcG90dGVkIHNvbWV0aGluZyBpbnRlcmVzdGluZyBpbiB0aGUgY29kZSwgcmlnaHQgYXJvdW5kIGxpbmUgMTIxODQg4oCTIHRoYXQgYCNlbmRpZiAvKiBDT05GSUdfSU5FVCAqL2AgZGlyZWN0aXZlLiBJbW1lZGlhdGVseSwgbXkgZXhwZXJ0IGJyYWluIGtpY2tzIGluLiBUaGUgZmFjdCB0aGF0IGBza19sb29rdXBfcHJvZ19vcHNgIGlzIGd1YXJkZWQgYnkgYENPTkZJR19JTkVUYCBpcyB0aGUga2V5IHRha2Vhd2F5LiBJdCBtZWFucyB0aGUgYXZhaWxhYmlsaXR5IGFuZCBmdW5jdGlvbiBvZiB0aGlzIGVsZW1lbnQgYXJlIGRlcGVuZGVudCBvbiB0aGF0IGNvbmZpZ3VyYXRpb24gb3B0aW9uLgoKTm93LCBteSBuZXh0IHRob3VnaHQgaXMsIHdoZXJlIGRvZXMgYENPTkZJR19JTkVUYCBjb21lIGludG8gcGxheSBiZWZvcmUgdGhhdCBgI2VuZGlmYD8gVG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjb25kaXRpb25hbCBjb21waWxhdGlvbiwgSSBuZWVkIHRvIHRyYWNlIGJhY2sgYW5kIHBpbnBvaW50IGV4YWN0bHkgd2hlcmUgYENPTkZJR19JTkVUYCBpcyBkZWZpbmVkIG9yIGV2YWx1YXRlZC4gVGhpcyBjb250ZXh0IGlzIGNydWNpYWwgdG8gZ3Jhc3BpbmcgdGhlIHNpdHVhdGlvbnMgd2hlcmUgYHNrX2xvb2t1cF9wcm9nX29wc2AgaXMgYWN0dWFsbHkgYWN0aXZlLiBJJiMzOTtsbCBuZWVkIHRvIGZvbGxvdyB0aGUgY29kZSYjMzk7cyBsb2dpYyB0byBmaWd1cmUgb3V0IHRoZSBzY29wZSBhbmQgdGhlIGNvbmRpdGlvbnMgdGhhdCBkZXRlcm1pbmUgd2hldGhlciB0aGlzIHNlY3Rpb24gb2YgY29kZSBpcyB1bHRpbWF0ZWx5IGluY2x1ZGVkIGluIHRoZSBrZXJuZWwgYnVpbGQuIExldCYjMzk7cyBkaWcgaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE2OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0OyNpZmRlZiBDT05GSUdfSU5FVHwjaWYgSVNfRU5BQkxFRFxcKENPTkZJR19JTkVUJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmM9MjMxMz1zdGF0aWMgaW50IF9fYnBmX3JlZGlyZWN0X25laWdoX3Y2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMjMyMC1cbm5ldC9jb3JlL2ZpbHRlci5jOjIzMjE6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lORVQpXG5uZXQvY29yZS9maWx0ZXIuYy0yMzIyLXN0YXRpYyBpbnQgYnBmX291dF9uZWlnaF92NChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9NjIwMz1CUEZfQ0FMTF8zKGJwZl9iaW5kLCBzdHJ1Y3QgYnBmX3NvY2tfYWRkcl9rZXJuICosIGN0eCwgc3RydWN0IHNvY2thZGRyICosIGFkZHIsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNjIwNS17XG5uZXQvY29yZS9maWx0ZXIuYzo2MjA2OiNpZmRlZiBDT05GSUdfSU5FVFxubmV0L2NvcmUvZmlsdGVyLmMtNjIwNy1cdHN0cnVjdCBzb2NrICpzayA9IGN0eC1cdTAwM2Vzaztcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz02Mjg4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrYl9nZXRfeGZybV9zdGF0ZV9wcm90byA9IHtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy02Mjk5LVxubmV0L2NvcmUvZmlsdGVyLmM6NjMwMDojaWYgSVNfRU5BQkxFRChDT05GSUdfSU5FVCkgfHwgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbm5ldC9jb3JlL2ZpbHRlci5jLTYzMDEtc3RhdGljIGludCBicGZfZmliX3NldF9md2RfcGFyYW1zKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9NjMzMD1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKmJwZl9maWJfdmxhbl9pbnB1dF9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy02MzQ5LVxubmV0L2NvcmUvZmlsdGVyLmM6NjM1MDojaWYgSVNfRU5BQkxFRChDT05GSUdfSU5FVClcbm5ldC9jb3JlL2ZpbHRlci5jLTYzNTEtc3RhdGljIGludCBicGZfaXB2NF9maWJfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGJwZl9maWJfbG9va3VwICpwYXJhbXMsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9NjY3Mj1CUEZfQ0FMTF80KGJwZl94ZHBfZmliX2xvb2t1cCwgc3RydWN0IHhkcF9idWZmICosIGN0eCxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy02NjgxLVx0c3dpdGNoIChwYXJhbXMtXHUwMDNlZmFtaWx5KSB7XG5uZXQvY29yZS9maWx0ZXIuYzo2NjgyOiNpZiBJU19FTkFCTEVEKENPTkZJR19JTkVUKVxubmV0L2NvcmUvZmlsdGVyLmMtNjY4My1cdGNhc2UgQUZfSU5FVDpcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz02NzA2PUJQRl9DQUxMXzQoYnBmX3NrYl9maWJfbG9va3VwLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNjcyNS1cdHN3aXRjaCAocGFyYW1zLVx1MDAzZWZhbWlseSkge1xubmV0L2NvcmUvZmlsdGVyLmM6NjcyNjojaWYgSVNfRU5BQkxFRChDT05GSUdfSU5FVClcbm5ldC9jb3JlL2ZpbHRlci5jLTY3MjctXHRjYXNlIEFGX0lORVQ6XG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9NzE1Nz1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9sd3Rfc2VnNl9hZGp1c3Rfc3JoX3Byb3RvID0ge1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTcxNjYtXG5uZXQvY29yZS9maWx0ZXIuYzo3MTY3OiNpZmRlZiBDT05GSUdfSU5FVFxubmV0L2NvcmUvZmlsdGVyLmMtNzE2OC1zdGF0aWMgc3RydWN0IHNvY2sgKnNrX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBicGZfc29ja190dXBsZSAqdHVwbGUsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9ODQ2ND1zb2NrX2FkZHJfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy04NDg2LVx0XHRyZXR1cm4gXHUwMDI2YnBmX2V2ZW50X291dHB1dF9kYXRhX3Byb3RvO1xubmV0L2NvcmUvZmlsdGVyLmM6ODQ4NzojaWZkZWYgQ09ORklHX0lORVRcbm5ldC9jb3JlL2ZpbHRlci5jLTg0ODgtXHRjYXNlIEJQRl9GVU5DX3NrX2xvb2t1cF90Y3A6XG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9ODU3Mz1jZ19za2JfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy04NTk5LSNlbmRpZlxubmV0L2NvcmUvZmlsdGVyLmM6ODYwMDojaWZkZWYgQ09ORklHX0lORVRcbm5ldC9jb3JlL2ZpbHRlci5jLTg2MDEtXHRjYXNlIEJQRl9GVU5DX3NrX2xvb2t1cF90Y3A6XG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9ODYyMj10Y19jbHNfYWN0X2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtODcxOC0jZW5kaWZcbm5ldC9jb3JlL2ZpbHRlci5jOjg3MTk6I2lmZGVmIENPTkZJR19JTkVUXG5uZXQvY29yZS9maWx0ZXIuYy04NzIwLVx0Y2FzZSBCUEZfRlVOQ19za19sb29rdXBfdGNwOlxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTg3NTk9eGRwX2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtODc4Ny1cdFx0cmV0dXJuIFx1MDAyNmJwZl94ZHBfY2hlY2tfbXR1X3Byb3RvO1xubmV0L2NvcmUvZmlsdGVyLmM6ODc4ODojaWZkZWYgQ09ORklHX0lORVRcbm5ldC9jb3JlL2ZpbHRlci5jLTg3ODktXHRjYXNlIEJQRl9GVU5DX3NrX2xvb2t1cF91ZHA6XG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9ODgzND1zb2NrX29wc19mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTg4NjItXHRcdHJldHVybiBcdTAwMjZicGZfZ2V0X25ldG5zX2Nvb2tpZV9zb2NrX29wc19wcm90bztcbm5ldC9jb3JlL2ZpbHRlci5jOjg4NjM6I2lmZGVmIENPTkZJR19JTkVUXG5uZXQvY29yZS9maWx0ZXIuYy04ODY0LVx0Y2FzZSBCUEZfRlVOQ19sb2FkX2hkcl9vcHQ6XG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9ODkxNj1za19za2JfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy04OTQwLVx0XHRyZXR1cm4gXHUwMDI2YnBmX3NrYl9ldmVudF9vdXRwdXRfcHJvdG87XG5uZXQvY29yZS9maWx0ZXIuYzo4OTQxOiNpZmRlZiBDT05GSUdfSU5FVFxubmV0L2NvcmUvZmlsdGVyLmMtODk0Mi1cdGNhc2UgQlBGX0ZVTkNfc2tfbG9va3VwX3RjcDpcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz0xMTY1Nj1pbnQgc2tfZ2V0X2ZpbHRlcihzdHJ1Y3Qgc29jayAqc2ssIHNvY2twdHJfdCBvcHR2YWwsIHVuc2lnbmVkIGludCBsZW4pXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTE2OTgtXG5uZXQvY29yZS9maWx0ZXIuYzoxMTY5OTojaWZkZWYgQ09ORklHX0lORVRcbm5ldC9jb3JlL2ZpbHRlci5jLTExNzAwLXN0YXRpYyB2b2lkIGJwZl9pbml0X3JldXNlcG9ydF9rZXJuKHN0cnVjdCBza19yZXVzZXBvcnRfa2VybiAqcmV1c2Vfa2Vybixcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz0xMjIzNT1CUEZfQ0FMTF8xKGJwZl9za2NfdG9fdGNwX3RpbWV3YWl0X3NvY2ssIHN0cnVjdCBzb2NrICosIHNrKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTEyMjQyLVxubmV0L2NvcmUvZmlsdGVyLmM6MTIyNDM6I2lmZGVmIENPTkZJR19JTkVUXG5uZXQvY29yZS9maWx0ZXIuYy0xMjI0NC1cdGlmIChzayBcdTAwMjZcdTAwMjYgc2stXHUwMDNlc2tfcHJvdCA9PSBcdTAwMjZ0Y3BfcHJvdCBcdTAwMjZcdTAwMjYgc2stXHUwMDNlc2tfc3RhdGUgPT0gVENQX1RJTUVfV0FJVClcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz0xMjI2ND1CUEZfQ0FMTF8xKGJwZl9za2NfdG9fdGNwX3JlcXVlc3Rfc29jaywgc3RydWN0IHNvY2sgKiwgc2spXG5uZXQvY29yZS9maWx0ZXIuYy0xMjI2NS17XG5uZXQvY29yZS9maWx0ZXIuYzoxMjI2NjojaWZkZWYgQ09ORklHX0lORVRcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMjY3LVx0aWYgKHNrIFx1MDAyNlx1MDAyNiBzay1cdTAwM2Vza19wcm90ID09IFx1MDAyNnRjcF9wcm90IFx1MDAyNlx1MDAyNiBzay1cdTAwM2Vza19zdGF0ZSA9PSBUQ1BfTkVXX1NZTl9SRUNWKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTEyNzM0PV9fYnBmX2tmdW5jIGludCBicGZfaWNtcF9zZW5kKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYl9jdHgsIGludCB0eXBlLCBpbnQgY29kZSlcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0xMjc0Ny1cdHN3aXRjaCAoc2tiLVx1MDAzZXByb3RvY29sKSB7XG5uZXQvY29yZS9maWx0ZXIuYzoxMjc0ODojaWYgSVNfRU5BQkxFRChDT05GSUdfSU5FVClcbm5ldC9jb3JlL2ZpbHRlci5jLTEyNzQ5LVx0Y2FzZSBodG9ucyhFVEhfUF9JUCk6IHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTY6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjhtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcyMjUKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIEJQRiBUZXN0aW5nIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgYnBmX3Byb2dfdGVzdF9ydW5gIGludGVyYWN0cyB3aXRoIGBicGZfcHJvZ190ZXN0X3J1bl9za19sb29rdXBgLiBNeSBndXQgdGVsbHMgbWUgdGhhdCBgYnBmX3Byb2dfdGVzdF9ydW5gIGlzIHRoZSBnZW5lcmFsIGVudHJ5IHBvaW50IGZvciBydW5uaW5nIEJQRiBwcm9ncmFtcyBpbiBhIHRlc3QgY29udGV4dCwgYW5kIHRoYXQgYGJwZl9wcm9nX3Rlc3RfcnVuX3NrX2xvb2t1cGAgaXMgbGlrZWx5IGEgc3BlY2lhbGl6ZWQgZnVuY3Rpb24gZm9yIHRlc3RpbmcgcHJvZ3JhbXMgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gc29ja2V0IGxvb2t1cHMgb3IgaW50ZXJhY3Rpb25zIHdpdGggdGhlIG5ldHdvcmsgc3RhY2suIEl0JiMzOTtzIGEgY2xhc3NpYyBkaXNwYXRjaCBwYXR0ZXJuLCBsaWtlbHkgdXNpbmcgc29tZSBraW5kIG9mIGludGVybmFsIHN3aXRjaCBvciBmdW5jdGlvbiBwb2ludGVyIHRhYmxlLgoKVGhlcmVmb3JlLCBsZXQgbWUgbmF2aWdhdGUgdG8gYGtlcm5lbC9icGYvc3lzY2FsbC5jYCBhbmQgZGlnIGludG8gdGhlIHNvdXJjZS4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3Igd2hlcmUgYGJwZl9wcm9nX3Rlc3RfcnVuYCBpcyBkZWZpbmVkIGFuZCBob3cgaXQgY2FsbHMgb3V0IHRvIG90aGVyIGZ1bmN0aW9ucy4gSSBleHBlY3QgdG8gZmluZCBzb21lIGxvZ2ljIHRoYXQgZGV0ZXJtaW5lcyAqd2hpY2gqIHNwZWNpZmljIGBicGZfcHJvZ190ZXN0X3J1bl8qYCBmdW5jdGlvbiB0byBjYWxsLCBiYXNlZCBvbiB0aGUgdHlwZSBvZiBCUEYgcHJvZ3JhbSBvciB0aGUgYXJndW1lbnRzIHBhc3NlZCB0byB0aGUgc3lzdGVtIGNhbGwuIFRoaXMgaXMgcHJvYmFibHkgYSBwb2ludGVyIHRvIHRoZSByaWdodCBmdW5jdGlvbmFsaXR5LCBvciBwZXJoYXBzIGFuIGVudW0uIEl0JiMzOTtzIGEgY29tbW9uIHBhdHRlcm4gdG8ga2VlcCB0aGUgZ2VuZXJhbCB0ZXN0IGZ1bmN0aW9uYWxpdHkgc2VwYXJhdGUgYW5kIGhhbmRsZSB0aGUgc3BlY2lmaWNzIGluIGRlZGljYXRlZCByb3V0aW5lcy4gVGhpcyBpcyBob3cgdGhleSBrZWVwIHRoaW5ncyBjbGVhbi4gTXkgaG9wZSBpcyB0byBzZWUgdGhlIGV4YWN0IGRlY2lzaW9uLW1ha2luZyBwcm9jZXNzIGZvciB0aGUgZGlzcGF0Y2g7IHRoZSBkYXRhIHN0cnVjdHVyZXMgdGhhdCBpbmZsdWVuY2UgdGhhdCBkZWNpc2lvbiBhcmUga2V5LiBJIGFudGljaXBhdGUgdGhlcmUgd2lsbCBiZSBhIGNhbGwgY2hhaW4gdG8gcmVzb2x2ZSBhZnRlciBJIGdldCB0aGVyZS4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGFjdHVhbGx5IHVuZGVyIHRoZSBob29kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxNjoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfcHJvZ190ZXN0X3J1biYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvc3lzY2FsbC5jPTQ3MTg9c3RhdGljIGludCBicGZfcHJvZ19xdWVyeShjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy00NzgxLVxua2VybmVsL2JwZi9zeXNjYWxsLmM6NDc4MjpzdGF0aWMgaW50IGJwZl9wcm9nX3Rlc3RfcnVuKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNDc4My1cdFx0XHQgICAgIHVuaW9uIGJwZl9hdHRyIF9fdXNlciAqdWF0dHIpXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9NjMwMz1zdGF0aWMgaW50IF9fc3lzX2JwZihlbnVtIGJwZl9jbWQgY21kLCBicGZwdHJfdCB1YXR0ciwgdW5zaWduZWQgaW50IHNpemUsXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjM4NC1cdGNhc2UgQlBGX1BST0dfVEVTVF9SVU46XG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2Mzg1Olx0XHRlcnIgPSBicGZfcHJvZ190ZXN0X3J1bihcdTAwMjZhdHRyLCB1YXR0ci51c2VyKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYzODYtXHRcdGJyZWFrO1xuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTY2NTA9Y29uc3Qgc3RydWN0IGJwZl9wcm9nX29wcyBicGZfc3lzY2FsbF9wcm9nX29wcyA9IHtcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjY2NTE6XHQudGVzdF9ydW4gPSBicGZfcHJvZ190ZXN0X3J1bl9zeXNjYWxsLFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjY1Mi19O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxNjoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzk3NgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkmIzM5O20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGBicGZfcHJvZ190ZXN0X3J1bmAgZnVuY3Rpb24uIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIG9wZXJhdGlvbiBpbiB0aGUgYGtlcm5lbC9icGYvc3lzY2FsbC5jYCBmaWxlLiBJJiMzOTttIGZvY3VzaW5nIG9uIGxpbmVzIDQ3ODIgdGhyb3VnaCA0ODEwLiBUaGlzIHNlY3Rpb24gaXMga2V5IHRvIGNvbXByZWhlbmRpbmcgdGhlIGV4ZWN1dGlvbiBmbG93IG9yIGNyaXRpY2FsIGFzcGVjdHMgb2YgdGhlIHRlc3RpbmcgZW52aXJvbm1lbnQgZm9yIEJQRiBwcm9ncmFtcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGNvZGUgaXMgZG9pbmcsIGxpa2VseSBob3cgaXQmIzM5O3Mgc2V0dGluZyB1cCB0aGUgdGVzdGluZyBlbnZpcm9ubWVudCBvciBjaGVja2luZyB0aGUgcHJvZ3JhbSBleGVjdXRpb24uIFRoaXMgc2hvdWxkIGlsbHVtaW5hdGUgaG93IHRoZSBCUEYgcHJvZ3JhbXMgaW50ZXJhY3Qgd2l0aCB0aGUga2VybmVsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxNjoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvc3lzY2FsbC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDc4MiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs0NzgyOlx0c3RhdGljIGludCBicGZfcHJvZ190ZXN0X3J1bihjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcbjQ3ODM6XHRcdFx0XHQgICAgIHVuaW9uIGJwZl9hdHRyIF9fdXNlciAqdWF0dHIpXG40Nzg0Olx0e1xuNDc4NTpcdFx0c3RydWN0IGJwZl9wcm9nICpwcm9nO1xuNDc4NjpcdFx0aW50IHJldCA9IC1FTk9UU1VQUDtcbjQ3ODc6XHRcbjQ3ODg6XHRcdGlmIChDSEVDS19BVFRSKEJQRl9QUk9HX1RFU1RfUlVOKSlcbjQ3ODk6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG40NzkwOlx0XG40NzkxOlx0XHRpZiAoKGF0dHItXHUwMDNldGVzdC5jdHhfc2l6ZV9pbiBcdTAwMjZcdTAwMjYgIWF0dHItXHUwMDNldGVzdC5jdHhfaW4pIHx8XG40NzkyOlx0XHQgICAgKCFhdHRyLVx1MDAzZXRlc3QuY3R4X3NpemVfaW4gXHUwMDI2XHUwMDI2IGF0dHItXHUwMDNldGVzdC5jdHhfaW4pKVxuNDc5MzpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjQ3OTQ6XHRcbjQ3OTU6XHRcdGlmICgoYXR0ci1cdTAwM2V0ZXN0LmN0eF9zaXplX291dCBcdTAwMjZcdTAwMjYgIWF0dHItXHUwMDNldGVzdC5jdHhfb3V0KSB8fFxuNDc5NjpcdFx0ICAgICghYXR0ci1cdTAwM2V0ZXN0LmN0eF9zaXplX291dCBcdTAwMjZcdTAwMjYgYXR0ci1cdTAwM2V0ZXN0LmN0eF9vdXQpKVxuNDc5NzpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjQ3OTg6XHRcbjQ3OTk6XHRcdHByb2cgPSBicGZfcHJvZ19nZXQoYXR0ci1cdTAwM2V0ZXN0LnByb2dfZmQpO1xuNDgwMDpcdFx0aWYgKElTX0VSUihwcm9nKSlcbjQ4MDE6XHRcdFx0cmV0dXJuIFBUUl9FUlIocHJvZyk7XG40ODAyOlx0XG40ODAzOlx0XHRpZiAocHJvZy1cdTAwM2VhdXgtXHUwMDNlb3BzLVx1MDAzZXRlc3RfcnVuKVxuNDgwNDpcdFx0XHRyZXQgPSBwcm9nLVx1MDAzZWF1eC1cdTAwM2VvcHMtXHUwMDNldGVzdF9ydW4ocHJvZywgYXR0ciwgdWF0dHIpO1xuNDgwNTpcdFxuNDgwNjpcdFx0YnBmX3Byb2dfcHV0KHByb2cpO1xuNDgwNzpcdFx0cmV0dXJuIHJldDtcbjQ4MDg6XHR9XG40ODA5Olx0XG40ODEwOlx0I2RlZmluZSBCUEZfT0JKX0dFVF9ORVhUX0lEX0xBU1RfRklFTEQgbmV4dF9pZFxuNDgxMTpcdFxuNDgxMjpcdHN0YXRpYyBpbnQgYnBmX29ial9nZXRfbmV4dF9pZChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcbjQ4MTM6XHRcdFx0XHQgICAgICAgdW5pb24gYnBmX2F0dHIgX191c2VyICp1YXR0cixcbjQ4MTQ6XHRcdFx0XHQgICAgICAgc3RydWN0IGlkciAqaWRyLFxuNDgxNTpcdFx0XHRcdCAgICAgICBzcGlubG9ja190ICpsb2NrKVxuNDgxNjpcdHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTY6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjZtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg3NTUKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA1NTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIGBCUEZfUFJPR19UWVBFX1NLX0xPT0tVUGAgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGhvdyBpdCBpbXBhY3RzIGBCUEZfUFJPR19UWVBFX1NLX0xPT0tVUGAuIFdoZW4gYSBCUEYgcHJvZ3JhbSBvZiB0aGF0IHR5cGUgaXMgaW52b2tlZCB3aXRoIGBCUEZfUFJPR19URVNUX1JVTmAgb3IgYEJQRl9QUk9HX1JVTmAgdXNpbmcgdGhlIGBicGYoKWAgc3lzY2FsbCwgdGhlIGBicGZfcHJvZ190ZXN0X3J1bl9za19sb29rdXBgIGZ1bmN0aW9uIGdldHMgZXhlY3V0ZWQuIEkga25vdyB0aGlzIGJlY2F1c2UgdGhlIGNvZGUgZmxvdyB0ZWxscyBtZSB0aGF0LiBHb29kLCB0aGF0IGZ1bmN0aW9uIGlzIGV4cG9ydGVkLCBpdCYjMzk7cyBub3Qgc3RhdGljLCB3aGljaCBtZWFucyB1c2Vyc3BhY2UgY2FuIGRpcmVjdGx5IGNhbGwgaXQgdmlhIHRoZSBgQlBGX1BST0dfVEVTVF9SVU5gIGNvbW1hbmQuCgpOb3csIGxldCYjMzk7cyBsb29rIGF0IHdoYXQmIzM5O3MgYWN0dWFsbHkgY2hhbmdlZC4gVGhpcyBwYXRjaCBzZWVtcyB0byBhZmZlY3QgaG93IFJDVSB1bmxvY2tpbmcgd29ya3MgaW4gYGJwZl9wcm9nX3Rlc3RfcnVuX3NrX2xvb2t1cGAsIGFuZCBJIG5lZWQgdG8gYmUgKnZlcnkqIHByZWNpc2UgaGVyZS4gSXQgbG9va3MgbGlrZSB0aGUgZml4IGVuc3VyZXMgYGN0eC5zZWxlY3RlZF9za2AgaXNuJiMzOTt0IGFjY2Vzc2VkIG91dHNpZGUgYW4gUkNVIHJlYWQgY3JpdGljYWwgc2VjdGlvbiwgb3IgaXQmIzM5O3MgZml4aW5nIHNvbWV0aGluZyByZWxhdGVkIHRvIGBzb2NrX2dlbl9jb29raWVgIGFuZCBgLUVPUE5PVFNVUFBgIGhhbmRsaW5nIGluIHJlbGF0aW9uIHRvIHRlc3QgdGltZXJzLiBUaGF0JiMzOTtzIGEgY3JpdGljYWwgYXJlYSwgYWZmZWN0aW5nIGNvcmUgbmV0d29ya2luZyBhbmQgQlBGIGxvZ2ljLiBGdXJ0aGVybW9yZSwgc2luY2UgaXQmIzM5O3MgcmVhY2hhYmxlIHZpYSBgYnBmKClgIHdpdGggYEJQRl9QUk9HX1RFU1RfUlVOYCBpbiBRRU1VLCB0aGlzIGlzIGRlZmluaXRlbHkgc29tZXRoaW5nIEkgd2FudCB0byBmdXp6LiAqKmBXb3J0aEZ1enppbmc9dHJ1ZWAqKi4KCkFscmlnaHQsIG1vdmluZyBvbiwgbGV0JiMzOTtzIGRvdWJsZS1jaGVjayB0aGUgZW50cnkgcG9pbnRzLiBgYnBmX3Byb2dfdGVzdF9ydW5fc2tfbG9va3VwYCBpcyBhIG5vbi1zdGF0aWMgZW50cnkgcG9pbnQgdGhhdCYjMzk7cyBjYWxsZWQgdGhyb3VnaCBhIGZ1bmN0aW9uIHBvaW50ZXIsIGBvcHMtJmd0O3Rlc3RfcnVuYCB3aXRoaW4gYGJwZl9wcm9nX3Rlc3RfcnVuYC4gR29vZC4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGlmIGFueSBvdGhlciBzeW1ib2xzIHdlcmUgdG91Y2hlZCBieSB0aGlzIHBhdGNoLiBMb29rcyBsaWtlIGBicGZfcHJvZ190ZXN0X3J1bl9za19sb29rdXBgIGluIGBuZXQvYnBmL3Rlc3RfcnVuLmNgIGlzIHRoZSBvbmx5IHN5bWJvbCBhZmZlY3RlZCBoZXJlLgoKRmluYWxseSwgSSBuZWVkIHRvIHZlcmlmeSB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMuIEkga25vdyBJJiMzOTtsbCBuZWVkIGBCUEZfU1lTQ0FMTGAgKGluIGBrZXJuZWwvYnBmL0tjb25maWdgLCBidWlsZHMgYG5ldC9icGYvdGVzdF9ydW4ub2ApLCBgTkVUYCAoaW4gYG5ldC9NYWtlZmlsZWAsIGVuYWJsZXMgdGhlIG5ldHdvcmsgc3Vic3lzdGVtKSwgYW5kIGBJTkVUYCAoaW4gYG5ldC9jb3JlL2ZpbHRlci5jYCwgd2hpY2ggZ3VhcmRzIGBza19sb29rdXBfcHJvZ19vcHNgKS4gTGV0IG1lIGp1c3QgY29uZmlybSB0aGVzZSBjb25maWd1cmF0aW9ucy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGJvdGggYENPTkZJR19JTkVUYCBhbmQgYENPTkZJR19CUEZfU1lTQ0FMTGAgYW5kIGBDT05GSUdfTkVUYCBhcmUgZW5hYmxlZC4gSSBhbHNvIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYENPTkZJR19JTkVUYCBkZXBlbmRzIG9uIGBDT05GSUdfTkVUYC4gTGV0IG1lIHNlYXJjaCBgY29uZmlnIElORVRgIGluIGBuZXQvaXB2NC9LY29uZmlnYCB0byBiZSBzdXJlLiBBbHJpZ2h0LCBJIHRoaW5rIEkmIzM5O3ZlIGdvdCB0aGlzIGZpZ3VyZWQgb3V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxNjoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSU5FVFxcYiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L0tjb25maWc9OTk9Y29uZmlnIE5FVF9IQU5EU0hBS0VfS1VOSVRfVEVTVFxuLS1cbm5ldC9LY29uZmlnLTExMy1cbm5ldC9LY29uZmlnOjExNDpjb25maWcgSU5FVFxubmV0L0tjb25maWctMTE1LVx0Ym9vbCBcJiMzNDtUQ1AvSVAgbmV0d29ya2luZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxNjoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDAzNAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBhc3BlY3QgYmV0dGVyLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byB6ZXJvIGluIG9uIHRoZSBgbmV0L0tjb25maWdgIGZpbGUuIEdpdmVuIHRoZSBjb250ZXh0LCBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGFyb3VuZCBsaW5lIDExNC4gVGhhdCYjMzk7cyB1c3VhbGx5IHdoZXJlIHRoZSBtZWF0IG9mIGEgcGFydGljdWxhciBmZWF0dXJlIG9yIG9wdGlvbiBzdGFydHMgdG8gZ2V0IGRlZmluZWQgd2l0aGluIHRoZSBuZXR3b3JrIHN1YnN5c3RlbS4gSXQmIzM5O3MgYSBnb29kIGJldCBJJiMzOTtsbCBmaW5kIHRoZSByZWxldmFudCBgY29uZmlnYCBvcHRpb25zLCBkZXBlbmRlbmNpZXMsIGFuZCBoZWxwIHRleHQgdGhlcmUuIFRpbWUgdG8gc2VlIHdoYXQga2luZCBvZiBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBhcmUgZGVmaW5lZCwgaWYgdGhleSYjMzk7cmUgcmVsZXZhbnQsIGFuZCBob3BlZnVsbHkgdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIGludm9sdmVkLiBMZXQmIzM5O3Mgc2VlIHdoYXQgYG5ldC9LY29uZmlnYCByZXZlYWxzLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE2OjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDExMDpcdFxuIDExMTpcdFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBLVW5pdCBhbmQgdW5pdCB0ZXN0cyBpbiBnZW5lcmFsLCByZWZlclxuIDExMjpcdFx0ICB0byB0aGUgS1VuaXQgZG9jdW1lbnRhdGlvbiBpbiBEb2N1bWVudGF0aW9uL2Rldi10b29scy9rdW5pdC8uXG4gMTEzOlx0XG4gMTE0Olx0Y29uZmlnIElORVRcbiAxMTU6XHRcdGJvb2wgXCYjMzQ7VENQL0lQIG5ldHdvcmtpbmdcJiMzNDtcbiAxMTY6XHRcdGhlbHBcbiAxMTc6XHRcdCAgVGhlc2UgYXJlIHRoZSBwcm90b2NvbHMgdXNlZCBvbiB0aGUgSW50ZXJuZXQgYW5kIG9uIG1vc3QgbG9jYWxcbiAxMTg6XHRcdCAgRXRoZXJuZXRzLiBJdCBpcyBoaWdobHkgcmVjb21tZW5kZWQgdG8gc2F5IFkgaGVyZSAodGhpcyB3aWxsIGVubGFyZ2VcbiAxMTk6XHRcdCAgeW91ciBrZXJuZWwgYnkgYWJvdXQgNDAwIEtCKSwgc2luY2Ugc29tZSBwcm9ncmFtcyAoZS5nLiB0aGUgWCB3aW5kb3dcbiAxMjA6XHRcdCAgc3lzdGVtKSB1c2UgVENQL0lQIGV2ZW4gaWYgeW91ciBtYWNoaW5lIGlzIG5vdCBjb25uZWN0ZWQgdG8gYW55XG4gMTIxOlx0XHQgIG90aGVyIGNvbXB1dGVyLiBZb3Ugd2lsbCBnZXQgdGhlIHNvLWNhbGxlZCBsb29wYmFjayBkZXZpY2Ugd2hpY2hcbiAxMjI6XHRcdCAgYWxsb3dzIHlvdSB0byBwaW5nIHlvdXJzZWxmIChncmVhdCBmdW4sIHRoYXQhKS5cbiAxMjM6XHRcbiAxMjQ6XHRcdCAgRm9yIGFuIGV4Y2VsbGVudCBpbnRyb2R1Y3Rpb24gdG8gTGludXggbmV0d29ya2luZywgcGxlYXNlIHJlYWQgdGhlXG4gMTI1Olx0XHQgIExpbnV4IE5ldHdvcmtpbmcgSE9XVE8sIGF2YWlsYWJsZSBmcm9tXG4gMTI2Olx0XHQgIFx1MDAzY2h0dHA6Ly93d3cudGxkcC5vcmcvZG9jcy5odG1sI2hvd3RvXHUwMDNlLlxuIDEyNzpcdFxuIDEyODpcdFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSBhbmQgYWxzbyB0byBcJiMzNDsvcHJvYyBmaWxlIHN5c3RlbSBzdXBwb3J0XCYjMzQ7IGFuZFxuIDEyOTpcdFx0ICBcJiMzNDtTeXNjdGwgc3VwcG9ydFwmIzM0OyBiZWxvdywgeW91IGNhbiBjaGFuZ2UgdmFyaW91cyBhc3BlY3RzIG9mIHRoZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxNjoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDU5OQoJCQkJCQkJb3V0cHV0OiAxNjUKCQkJCQkJCXRob3VnaHRzOiAyMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIEJQRiBGaXgqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggZml4aW5nIGFuIFJDVSByZWFkLWxvY2sgbGlmZXRpbWUgaXNzdWUgaW4gYGJwZl9wcm9nX3Rlc3RfcnVuX3NrX2xvb2t1cGAuIE15IHVuZGVyc3RhbmRpbmcsIGZyb20gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLCBpcyB0aGF0IGBuZXQvS2NvbmZpZ2AgaW5jbHVkZXMgdGhpcyB1bmRlciB0aGUgJiMzNDtOZXR3b3JraW5nIG9wdGlvbnMmIzM0OyBtZW51LCB3aGljaCBpdHNlbGYgaXMgZ3VhcmRlZCBieSBgaWYgTkVUYC4gVGhpcyB0ZWxscyBtZSB0aGF0IGBCUEZfU1lTQ0FMTGAsIGBORVRgLCBhbmQgYElORVRgIGFyZSB0aGUgaW1wb3J0YW50IGNvbmZpZ3VyYXRpb25zIHRvIGtlZXAgaW4gbWluZCBoZXJlLgoKTGV0IG1lIGp1c3QgcnVuIHRocm91Z2ggbXkgbWVudGFsIGNoZWNrbGlzdCB0byBjb25maXJtIG15IGFuYWx5c2lzLiBUaGUgZnV6emluZyBmbGFnLCBgV29ydGhGdXp6aW5nYCwgaXMgc2V0IHRvIGB0cnVlYCwgd2hpY2ggbWFrZXMgc2Vuc2UgZ2l2ZW4gdGhlIHBvdGVudGlhbCBzZWN1cml0eSBpbXBsaWNhdGlvbnMgb2YgQlBGLiBUaGUgcm9vdCBvZiB0aGUgcHJvYmxlbSBzZWVtcyB0byBiZSB0aGF0IGBjdHguc2VsZWN0ZWRfc2tgIGlzIGJlaW5nIGFjY2Vzc2VkIGFmdGVyIGBicGZfdGVzdF90aW1lcl9sZWF2ZSgpYCBoYXMgdW5sb2NrZWQgdGhlIFJDVSByZWFkIGxvY2ssIHdoaWNoIGlzIGRlZmluaXRlbHkgYSBidWcuIFRoaXMgaXNzdWUgaXMgaW4gdGhlIGNvcmUgQlBGIHRlc3QgcnVubmVyLCBzcGVjaWZpY2FsbHkgd2hlbiBydW5uaW5nIHdpdGggdGhlIGBicGYoQlBGX1BST0dfVEVTVF9SVU4pYCBzeXNjYWxsIG9uIGBCUEZfUFJPR19UWVBFX1NLX0xPT0tVUGAgcHJvZ3JhbXMuIFRoZXJlZm9yZSwgdGhlIHJlbGV2YW50IHN5bWJvbHMgSSBuZWVkIHRvIGZvY3VzIG9uIGFyZSBgYnBmX3Byb2dfdGVzdF9ydW5fc2tfbG9va3VwYC4KCkJhc2VkIG9uIHRoaXMsIEkmIzM5O20gY29uZmlkZW50IHRoYXQgZW5hYmxpbmcgYEJQRl9TWVNDQUxMYCwgYE5FVGAsIGFuZCBgSU5FVGAgaXMgdGhlIHJpZ2h0IG1vdmUgZm9yIHJlcHJvZHVjaW5nIGFuZCB0ZXN0aW5nIHRoaXMgZml4LgoKQWxyaWdodCwgdGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE2OjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtORVQmIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9wcm9nX3Rlc3RfcnVuX3NrX2xvb2t1cCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgYnBmX3Byb2dfdGVzdF9ydW5fc2tfbG9va3VwYCB0byBhY2Nlc3MgdGhlIHNlbGVjdGVkIHNvY2tldCBgY3R4LnNlbGVjdGVkX3NrYCB3aXRoaW4gdGhlIFJDVS1wcm90ZWN0ZWQgY3JpdGljYWwgc2VjdGlvbiBiZWZvcmUgY2FsbGluZyBgYnBmX3Rlc3RfdGltZXJfbGVhdmUoXHUwMDI2dClgLCBwcmV2ZW50aW5nIHVzZS1hZnRlci1mcmVlIG9yIFJDVSB2aW9sYXRpb25zLiBUaGlzIGNvZGUgcGF0aCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBgQlBGX1BST0dfVEVTVF9SVU5gIGNvbW1hbmQgb2YgdGhlIGBicGYoKWAgc3lzY2FsbCBvbiBza19sb29rdXAgQlBGIHByb2dyYW1zIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7TkVUJiMzNDssCiAgICAmIzM0O0lORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfcHJvZ190ZXN0X3J1bl9za19sb29rdXAmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGJwZl9wcm9nX3Rlc3RfcnVuX3NrX2xvb2t1cGAgdG8gYWNjZXNzIHRoZSBzZWxlY3RlZCBzb2NrZXQgYGN0eC5zZWxlY3RlZF9za2Agd2l0aGluIHRoZSBSQ1UtcHJvdGVjdGVkIGNyaXRpY2FsIHNlY3Rpb24gYmVmb3JlIGNhbGxpbmcgYGJwZl90ZXN0X3RpbWVyX2xlYXZlKFx1MDAyNnQpYCwgcHJldmVudGluZyB1c2UtYWZ0ZXItZnJlZSBvciBSQ1UgdmlvbGF0aW9ucy4gVGhpcyBjb2RlIHBhdGggaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgYEJQRl9QUk9HX1RFU1RfUlVOYCBjb21tYW5kIG9mIHRoZSBgYnBmKClgIHN5c2NhbGwgb24gc2tfbG9va3VwIEJQRiBwcm9ncmFtcyBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE2OjI4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjE2bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE2OjI4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjE2bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBicGZfcHJvZ190ZXN0X3J1bl9za19sb29rdXAoKWAgaW4gYG5ldC9icGYvdGVzdF9ydW4uY2AgdG8gaW5zcGVjdCBgY3R4LnNlbGVjdGVkX3NrYCBhbmQgdXBkYXRlIGB1c2VyX2N0eC1cdTAwM2Vjb29raWVgIGJlZm9yZSBjYWxsaW5nIGBicGZfdGVzdF90aW1lcl9sZWF2ZShcdTAwMjZ0KWAsIHJhdGhlciB0aGFuIGFmdGVyIGl0LlxuXG5UaGlzIGNoYW5nZSBlbnN1cmVzIHRoYXQgYGN0eC5zZWxlY3RlZF9za2AgaXMgYWNjZXNzZWQgd2hpbGUgc3RpbGwgcHJvdGVjdGVkIGJ5IHRoZSBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24gZXN0YWJsaXNoZWQgYnkgYGJwZl90ZXN0X3RpbWVyX2VudGVyKClgLiBBY2Nlc3NpbmcgYGN0eC5zZWxlY3RlZF9za2AgYWZ0ZXIgcmVsZWFzaW5nIFJDVSBjb3VsZCByZXN1bHQgaW4gYSB1c2UtYWZ0ZXItZnJlZSBvciBSQ1UgZGVyZWZlcmVuY2UgYnVnLCB3aGljaCBpcyBtb25pdG9yZWQgYnkgS0FTQU4gYW5kIFBST1ZFX1JDVSAvIExPQ0tERVAuXG5cblRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzOlxuLSBgdXNlcl9jdHhgIGlzIGFsbG9jYXRlZCB2aWEgYGt6YWxsb2MoKWAgaW4gYGJwZl9jdHhfaW5pdCgpYC5cbi0gU3RhY2sgc3RydWN0dXJlcyBzdWNoIGFzIGBjdHhgIGFyZSB6ZXJvLWluaXRpYWxpemVkIChge31gKS5cbi0gVGhlIGNvbmRpdGlvbiBgcmV0IFx1MDAzZT0gMGAgY2hlY2tzIGByZXRgIHdoaWNoIGlzIGluaXRpYWxpemVkL3VwZGF0ZWQgYnkgYGJwZl90ZXN0X3RpbWVyX2NvbnRpbnVlKClgLlxuLSBObyBuZXcgYnVmZmVycywgdW5pbml0aWFsaXplZCBmaWVsZHMsIG9yIG1lbW9yeSBjb3BpZXMgYXJlIGludHJvZHVjZWQuXG5cblRoZXJlZm9yZSwgdGhpcyBjaGFuZ2UgZG9lcyBub3Qgd2FycmFudCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGEzOTU3N2IyYjNjYWY2MzI5ZTJmM2E0NTI2MGRlMDZhMTEzZDIwMTEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IEF1ZyAyOSAxNTo1NjozOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9icGYvdGVzdF9ydW4uYyBiL25ldC9icGYvdGVzdF9ydW4uYwppbmRleCA1ZDUxZjZjYjdkMTU0Li5lNjc3ZWMzMzkwZTM3IDEwMDY0NAotLS0gYS9uZXQvYnBmL3Rlc3RfcnVuLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2JwZi90ZXN0X3J1bi5jCkBAIC0xNjUwLDIxICYjNDM7MTY1MCwyMSBAQCBpbnQgYnBmX3Byb2dfdGVzdF9ydW5fc2tfbG9va3VwKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgY29uc3QgdW5pb24gYnBmX2F0dHIgKmthdAogCQljdHguc2VsZWN0ZWRfc2sgPSBOVUxMOwogCQlyZXR2YWwgPSBCUEZfUFJPR19TS19MT09LVVBfUlVOX0FSUkFZKHByb2dzLCBjdHgsIGJwZl9wcm9nX3J1bik7CiAJfSB3aGlsZSAoYnBmX3Rlc3RfdGltZXJfY29udGludWUoJmFtcDt0LCAxLCByZXBlYXQsICZhbXA7cmV0LCAmYW1wO2R1cmF0aW9uKSk7CiYjNDM7CiYjNDM7CWlmIChyZXQgJmd0Oz0gMCkgewomIzQzOwkJdXNlcl9jdHgtJmd0O2Nvb2tpZSA9IDA7CiYjNDM7CQlpZiAoY3R4LnNlbGVjdGVkX3NrKSB7CiYjNDM7CQkJaWYgKGN0eC5zZWxlY3RlZF9zay0mZ3Q7c2tfcmV1c2Vwb3J0ICZhbXA7JmFtcDsgIWN0eC5ub19yZXVzZXBvcnQpCiYjNDM7CQkJCXJldCA9IC1FT1BOT1RTVVBQOwomIzQzOwkJCWVsc2UKJiM0MzsJCQkJdXNlcl9jdHgtJmd0O2Nvb2tpZSA9IHNvY2tfZ2VuX2Nvb2tpZShjdHguc2VsZWN0ZWRfc2spOwomIzQzOwkJfQomIzQzOwl9CiAJYnBmX3Rlc3RfdGltZXJfbGVhdmUoJmFtcDt0KTsKIAogCWlmIChyZXQgJmx0OyAwKQogCQlnb3RvIG91dDsKIAotCXVzZXJfY3R4LSZndDtjb29raWUgPSAwOwotCWlmIChjdHguc2VsZWN0ZWRfc2spIHsKLQkJaWYgKGN0eC5zZWxlY3RlZF9zay0mZ3Q7c2tfcmV1c2Vwb3J0ICZhbXA7JmFtcDsgIWN0eC5ub19yZXVzZXBvcnQpIHsKLQkJCXJldCA9IC1FT1BOT1RTVVBQOwotCQkJZ290byBvdXQ7Ci0JCX0KLQotCQl1c2VyX2N0eC0mZ3Q7Y29va2llID0gc29ja19nZW5fY29va2llKGN0eC5zZWxlY3RlZF9zayk7Ci0JfQotCiAJcmV0ID0gYnBmX3Rlc3RfZmluaXNoKGthdHRyLCB1YXR0ciwgTlVMTCwgTlVMTCwgMCwgMCwgcmV0dmFsLCBkdXJhdGlvbik7CiAJaWYgKCFyZXQpCiAJCXJldCA9IGJwZl9jdHhfZmluaXNoKGthdHRyLCB1YXR0ciwgdXNlcl9jdHgsIHNpemVvZigqdXNlcl9jdHgpKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE2OjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzODUKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJQRiBUZXN0IFJ1bm5lciBDb2RlKioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbi4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCYjMzk7cyBoYXBwZW5pbmcgd2l0aCB0aGlzIGRpZmYsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIEJQRiB0ZXN0aW5nIGZyYW1ld29yay4gSSYjMzk7bSBnb2luZyB0byBmb2N1cyBteSBhdHRlbnRpb24gb24gYG5ldC9icGYvdGVzdF9ydW4uY2AuIEZpcnN0LCBJJiMzOTtsbCBuZWVkIHRvIHVzZSBteSB0b29scyB0byBleGFtaW5lIHRoZSBkaWZmIGNsb3NlbHksIHVuZGVyc3RhbmQgdGhlIGNoYW5nZXMgbWFkZSBhbmQgdGhlbiBJIHdpbGwgcmVhZCB0aGUgcmVsZXZhbnQgcG9ydGlvbnMgb2YgdGhlIGNvZGUuCgpJIHRoaW5rIGEgZ29vZCBzdGFydGluZyBwb2ludCB3aWxsIGJlIGFyb3VuZCBsaW5lIDE2NTAgaW4gYG5ldC9icGYvdGVzdF9ydW4uY2AuIEkgd2lsbCByZWFkIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRoZXJlIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgYW55IGNoYW5nZXMuIExldCYjMzk7cyBzdGFydCB3aXRoIGByZWFkLWZpbGVgIHRvIGdldCBhIHF1aWNrIG92ZXJ2aWV3LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxNjoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9icGYvdGVzdF9ydW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE2MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTYwMDpcdFx0aWYgKElTX0VSUih1c2VyX2N0eCkpXG4xNjAxOlx0XHRcdHJldHVybiBQVFJfRVJSKHVzZXJfY3R4KTtcbjE2MDI6XHRcbjE2MDM6XHRcdGlmICghdXNlcl9jdHgpXG4xNjA0Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTYwNTpcdFxuMTYwNjpcdFx0aWYgKHVzZXJfY3R4LVx1MDAzZXNrKVxuMTYwNzpcdFx0XHRnb3RvIG91dDtcbjE2MDg6XHRcbjE2MDk6XHRcdGlmICghcmFuZ2VfaXNfemVybyh1c2VyX2N0eCwgb2Zmc2V0b2ZlbmQodHlwZW9mKCp1c2VyX2N0eCksIGxvY2FsX3BvcnQpLCBzaXplb2YoKnVzZXJfY3R4KSkpXG4xNjEwOlx0XHRcdGdvdG8gb3V0O1xuMTYxMTpcdFxuMTYxMjpcdFx0aWYgKHVzZXJfY3R4LVx1MDAzZWxvY2FsX3BvcnQgXHUwMDNlIFUxNl9NQVgpIHtcbjE2MTM6XHRcdFx0cmV0ID0gLUVSQU5HRTtcbjE2MTQ6XHRcdFx0Z290byBvdXQ7XG4xNjE1Olx0XHR9XG4xNjE2Olx0XG4xNjE3Olx0XHRjdHguZmFtaWx5ID0gKHUxNil1c2VyX2N0eC1cdTAwM2VmYW1pbHk7XG4xNjE4Olx0XHRjdHgucHJvdG9jb2wgPSAodTE2KXVzZXJfY3R4LVx1MDAzZXByb3RvY29sO1xuMTYxOTpcdFx0Y3R4LmRwb3J0ID0gKHUxNil1c2VyX2N0eC1cdTAwM2Vsb2NhbF9wb3J0O1xuMTYyMDpcdFx0Y3R4LnNwb3J0ID0gdXNlcl9jdHgtXHUwMDNlcmVtb3RlX3BvcnQ7XG4xNjIxOlx0XG4xNjIyOlx0XHRzd2l0Y2ggKGN0eC5mYW1pbHkpIHtcbjE2MjM6XHRcdGNhc2UgQUZfSU5FVDpcbjE2MjQ6XHRcdFx0Y3R4LnY0LmRhZGRyID0gKF9fZm9yY2UgX19iZTMyKXVzZXJfY3R4LVx1MDAzZWxvY2FsX2lwNDtcbjE2MjU6XHRcdFx0Y3R4LnY0LnNhZGRyID0gKF9fZm9yY2UgX19iZTMyKXVzZXJfY3R4LVx1MDAzZXJlbW90ZV9pcDQ7XG4xNjI2Olx0XHRcdGJyZWFrO1xuMTYyNzpcdFxuMTYyODpcdCNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxuMTYyOTpcdFx0Y2FzZSBBRl9JTkVUNjpcbjE2MzA6XHRcdFx0Y3R4LnY2LmRhZGRyID0gKHN0cnVjdCBpbjZfYWRkciAqKXVzZXJfY3R4LVx1MDAzZWxvY2FsX2lwNjtcbjE2MzE6XHRcdFx0Y3R4LnY2LnNhZGRyID0gKHN0cnVjdCBpbjZfYWRkciAqKXVzZXJfY3R4LVx1MDAzZXJlbW90ZV9pcDY7XG4xNjMyOlx0XHRcdGJyZWFrO1xuMTYzMzpcdCNlbmRpZlxuMTYzNDpcdFxuMTYzNTpcdFx0ZGVmYXVsdDpcbjE2MzY6XHRcdFx0cmV0ID0gLUVBRk5PU1VQUE9SVDtcbjE2Mzc6XHRcdFx0Z290byBvdXQ7XG4xNjM4Olx0XHR9XG4xNjM5Olx0XG4xNjQwOlx0XHRwcm9ncyA9IGJwZl9wcm9nX2FycmF5X2FsbG9jKDEsIEdGUF9LRVJORUwpO1xuMTY0MTpcdFx0aWYgKCFwcm9ncykge1xuMTY0MjpcdFx0XHRyZXQgPSAtRU5PTUVNO1xuMTY0MzpcdFx0XHRnb3RvIG91dDtcbjE2NDQ6XHRcdH1cbjE2NDU6XHRcbjE2NDY6XHRcdHByb2dzLVx1MDAzZWl0ZW1zWzBdLnByb2cgPSBwcm9nO1xuMTY0NzpcdFxuMTY0ODpcdFx0YnBmX3Rlc3RfdGltZXJfZW50ZXIoXHUwMDI2dCk7XG4xNjQ5Olx0XHRkbyB7XG4xNjUwOlx0XHRcdGN0eC5zZWxlY3RlZF9zayA9IE5VTEw7XG4xNjUxOlx0XHRcdHJldHZhbCA9IEJQRl9QUk9HX1NLX0xPT0tVUF9SVU5fQVJSQVkocHJvZ3MsIGN0eCwgYnBmX3Byb2dfcnVuKTtcbjE2NTI6XHRcdH0gd2hpbGUgKGJwZl90ZXN0X3RpbWVyX2NvbnRpbnVlKFx1MDAyNnQsIDEsIHJlcGVhdCwgXHUwMDI2cmV0LCBcdTAwMjZkdXJhdGlvbikpO1xuMTY1MzpcdFxuMTY1NDpcdFx0aWYgKHJldCBcdTAwM2U9IDApIHtcbjE2NTU6XHRcdFx0dXNlcl9jdHgtXHUwMDNlY29va2llID0gMDtcbjE2NTY6XHRcdFx0aWYgKGN0eC5zZWxlY3RlZF9zaykge1xuMTY1NzpcdFx0XHRcdGlmIChjdHguc2VsZWN0ZWRfc2stXHUwMDNlc2tfcmV1c2Vwb3J0IFx1MDAyNlx1MDAyNiAhY3R4Lm5vX3JldXNlcG9ydClcbjE2NTg6XHRcdFx0XHRcdHJldCA9IC1FT1BOT1RTVVBQO1xuMTY1OTpcdFx0XHRcdGVsc2VcbjE2NjA6XHRcdFx0XHRcdHVzZXJfY3R4LVx1MDAzZWNvb2tpZSA9IHNvY2tfZ2VuX2Nvb2tpZShjdHguc2VsZWN0ZWRfc2spO1xuMTY2MTpcdFx0XHR9XG4xNjYyOlx0XHR9XG4xNjYzOlx0XHRicGZfdGVzdF90aW1lcl9sZWF2ZShcdTAwMjZ0KTtcbjE2NjQ6XHRcbjE2NjU6XHRcdGlmIChyZXQgXHUwMDNjIDApXG4xNjY2Olx0XHRcdGdvdG8gb3V0O1xuMTY2NzpcdFxuMTY2ODpcdFx0cmV0ID0gYnBmX3Rlc3RfZmluaXNoKGthdHRyLCB1YXR0ciwgTlVMTCwgTlVMTCwgMCwgMCwgcmV0dmFsLCBkdXJhdGlvbik7XG4xNjY5Olx0XHRpZiAoIXJldClcbjE2NzA6XHRcdFx0cmV0ID0gYnBmX2N0eF9maW5pc2goa2F0dHIsIHVhdHRyLCB1c2VyX2N0eCwgc2l6ZW9mKCp1c2VyX2N0eCkpO1xuMTY3MTpcdFxuMTY3MjpcdG91dDpcbjE2NzM6XHRcdGJwZl9wcm9nX2FycmF5X2ZyZWUocHJvZ3MpO1xuMTY3NDpcdFx0a2ZyZWUodXNlcl9jdHgpO1xuMTY3NTpcdFx0cmV0dXJuIHJldDtcbjE2NzY6XHR9XG4xNjc3Olx0XG4xNjc4Olx0aW50IGJwZl9wcm9nX3Rlc3RfcnVuX3N5c2NhbGwoc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuMTY3OTpcdFx0XHRcdCAgICAgIGNvbnN0IHVuaW9uIGJwZl9hdHRyICprYXR0cixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTY6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzg0OQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlc2UgY2hhbmdlcywgc28gdGhlIGZpcnN0IHRoaW5nIEkmIzM5O2xsIGRvIGlzIG1ldGhvZGljYWxseSBnbyB0aHJvdWdoIGl0LiBSYXRoZXIgdGhhbiBqdXN0IGZvY3VzaW5nIG9uIHRoZSBjdXJyZW50IGxpbmVzLCBJIGtub3cgSSBuZWVkIHRvIGJ1aWxkIGEgY29tcHJlaGVuc2l2ZSB1bmRlcnN0YW5kaW5nLCBzbyBJIHdpbGwgYW5hbHl6ZSB0aGUgZWFybGllciBsaW5lcyBvZiBgYnBmX3Byb2dfdGVzdF9ydW5fc2tfbG9va3VwYCBhcyB3ZWxsLiBDb250ZXh0IGlzIGV2ZXJ5dGhpbmcgd2hlbiBkZWFsaW5nIHdpdGggQlBGLiBJIG5lZWQgdG8gZ3Jhc3AgdGhlIGVudGlyZSBwaWN0dXJlIHRvIGV2YWx1YXRlIHRoZSBpbXBhY3QgY29ycmVjdGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxNjozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9icGYvdGVzdF9ydW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE1NzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTU3MDpcdFx0XHRcdFx0ICAgICBzaXplb2Yoc3RydWN0IGJwZl9mbG93X2tleXMpKTtcbjE1NzE6XHRcbjE1NzI6XHRvdXQ6XG4xNTczOlx0XHRrZnJlZSh1c2VyX2N0eCk7XG4xNTc0Olx0XHRrZnJlZShkYXRhKTtcbjE1NzU6XHRcdHJldHVybiByZXQ7XG4xNTc2Olx0fVxuMTU3NzpcdFxuMTU3ODpcdGludCBicGZfcHJvZ190ZXN0X3J1bl9za19sb29rdXAoc3RydWN0IGJwZl9wcm9nICpwcm9nLCBjb25zdCB1bmlvbiBicGZfYXR0ciAqa2F0dHIsXG4xNTc5Olx0XHRcdFx0XHR1bmlvbiBicGZfYXR0ciBfX3VzZXIgKnVhdHRyKVxuMTU4MDpcdHtcbjE1ODE6XHRcdHN0cnVjdCBicGZfdGVzdF90aW1lciB0ID0ge307XG4xNTgyOlx0XHRzdHJ1Y3QgYnBmX3Byb2dfYXJyYXkgKnByb2dzID0gTlVMTDtcbjE1ODM6XHRcdHN0cnVjdCBicGZfc2tfbG9va3VwX2tlcm4gY3R4ID0ge307XG4xNTg0Olx0XHR1MzIgcmVwZWF0ID0ga2F0dHItXHUwMDNldGVzdC5yZXBlYXQ7XG4xNTg1Olx0XHRzdHJ1Y3QgYnBmX3NrX2xvb2t1cCAqdXNlcl9jdHg7XG4xNTg2Olx0XHR1MzIgcmV0dmFsLCBkdXJhdGlvbjtcbjE1ODc6XHRcdGludCByZXQgPSAtRUlOVkFMO1xuMTU4ODpcdFxuMTU4OTpcdFx0aWYgKGthdHRyLVx1MDAzZXRlc3QuZmxhZ3MgfHwga2F0dHItXHUwMDNldGVzdC5jcHUgfHwga2F0dHItXHUwMDNldGVzdC5iYXRjaF9zaXplKVxuMTU5MDpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjE1OTE6XHRcbjE1OTI6XHRcdGlmIChrYXR0ci1cdTAwM2V0ZXN0LmRhdGFfaW4gfHwga2F0dHItXHUwMDNldGVzdC5kYXRhX3NpemVfaW4gfHwga2F0dHItXHUwMDNldGVzdC5kYXRhX291dCB8fFxuMTU5MzpcdFx0ICAgIGthdHRyLVx1MDAzZXRlc3QuZGF0YV9zaXplX291dClcbjE1OTQ6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xNTk1Olx0XG4xNTk2Olx0XHRpZiAoIXJlcGVhdClcbjE1OTc6XHRcdFx0cmVwZWF0ID0gMTtcbjE1OTg6XHRcbjE1OTk6XHRcdHVzZXJfY3R4ID0gYnBmX2N0eF9pbml0KGthdHRyLCBzaXplb2YoKnVzZXJfY3R4KSk7XG4xNjAwOlx0XHRpZiAoSVNfRVJSKHVzZXJfY3R4KSlcbjE2MDE6XHRcdFx0cmV0dXJuIFBUUl9FUlIodXNlcl9jdHgpO1xuMTYwMjpcdFxuMTYwMzpcdFx0aWYgKCF1c2VyX2N0eClcbjE2MDQ6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xNjA1Olx0XG4xNjA2Olx0XHRpZiAodXNlcl9jdHgtXHUwMDNlc2spXG4xNjA3Olx0XHRcdGdvdG8gb3V0O1xuMTYwODpcdFxuMTYwOTpcdFx0aWYgKCFyYW5nZV9pc196ZXJvKHVzZXJfY3R4LCBvZmZzZXRvZmVuZCh0eXBlb2YoKnVzZXJfY3R4KSwgbG9jYWxfcG9ydCksIHNpemVvZigqdXNlcl9jdHgpKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTY6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDY0NAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDQ1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgZnVuY3Rpb25zLgoKKipEZWNvbnN0cnVjdGluZyB0aGUgQlBGIFRpbWVyIExpZmVjeWNsZSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZXNlIEJQRiB0aW1lciBmdW5jdGlvbnM6IGBicGZfdGVzdF90aW1lcl9lbnRlcmAsIGBicGZfdGVzdF90aW1lcl9jb250aW51ZWAsIGFuZCBgYnBmX3Rlc3RfdGltZXJfbGVhdmVgLiBNeSBpbml0aWFsIGFwcHJvYWNoIGlzIGFsd2F5cyB0aGUgc2FtZTogbGV0JiMzOTtzIHN0YXJ0IHdpdGggYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGV5JiMzOTtyZSAqdXNlZCouIEkmIzM5O2xsIHJlYWNoIGZvciBgZ3JlcGAgYW5kIHNlZSB3aGVyZSB0aGVzZSBmdW5jdGlvbnMgYXJlIHJlZmVyZW5jZWQgdGhyb3VnaG91dCB0aGUgY29kZWJhc2UuIFRoZSBnb2FsIGlzIHRvIHNlZSB0aGVtIGluIGNvbnRleHQuIEkgZXhwZWN0IHRvIGdldCBhIGZlZWwgZm9yIHRoZSBkaWZmZXJlbnQgc3RhZ2VzIG9mIHRpbWVyIGNyZWF0aW9uLCBtYW5hZ2VtZW50LCBhbmQgZXhwaXJhdGlvbiB3aXRoaW4gdGhlIEJQRiBmcmFtZXdvcmsuIFRoYXQgZ3JlcHBpbmcgd2lsbCBob3BlZnVsbHkgcmV2ZWFsIHRoZSB0eXBpY2FsIGNhbGwgc2VxdWVuY2UgYW5kIHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQuIEkmIzM5O20gbG9va2luZyBmb3IgYSBjbGVhciBmbG93IG9mIGV4ZWN1dGlvbiwgaWRlbnRpZnlpbmcgaG93IHRoZSB0aW1lciYjMzk7cyBiZWhhdmlvciBpcyBkZWZpbmVkIGFuZCBob3cgZXZlbnRzIHRyaWdnZXIgdGhlIHZhcmlvdXMgY2FsbHMuIEZyb20gdGhlcmUgSSYjMzk7bGwgc3RhcnQgYnVpbGRpbmcgYSBtZW50YWwgbW9kZWwgb2YgdGhlaXIgYmVoYXZpb3IsIHBheWluZyBhdHRlbnRpb24gdG8gYW55IGVkZ2UgY2FzZXMgb3IgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3VlcyB0aGF0IG1pZ2h0IGFyaXNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxNjozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfdGVzdF90aW1lciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9icGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9icGYvdGVzdF9ydW4uYy0zMC1cbm5ldC9icGYvdGVzdF9ydW4uYzozMTpzdHJ1Y3QgYnBmX3Rlc3RfdGltZXIge1xubmV0L2JwZi90ZXN0X3J1bi5jLTMyLVx0dTMyIGk7XG4tLVxubmV0L2JwZi90ZXN0X3J1bi5jLTM1LVxubmV0L2JwZi90ZXN0X3J1bi5jOjM2OnN0YXRpYyB2b2lkIGJwZl90ZXN0X3RpbWVyX2VudGVyKHN0cnVjdCBicGZfdGVzdF90aW1lciAqdClcbm5ldC9icGYvdGVzdF9ydW4uYy0zNy1cdF9fYWNxdWlyZXMocmN1KVxuLS1cbm5ldC9icGYvdGVzdF9ydW4uYy00Mi1cbm5ldC9icGYvdGVzdF9ydW4uYzo0MzpzdGF0aWMgdm9pZCBicGZfdGVzdF90aW1lcl9sZWF2ZShzdHJ1Y3QgYnBmX3Rlc3RfdGltZXIgKnQpXG5uZXQvYnBmL3Rlc3RfcnVuLmMtNDQtXHRfX3JlbGVhc2VzKHJjdSlcbi0tXG5uZXQvYnBmL3Rlc3RfcnVuLmMtNDktXG5uZXQvYnBmL3Rlc3RfcnVuLmM6NTA6c3RhdGljIGJvb2wgYnBmX3Rlc3RfdGltZXJfY29udGludWUoc3RydWN0IGJwZl90ZXN0X3RpbWVyICp0LCBpbnQgaXRlcmF0aW9ucyxcbm5ldC9icGYvdGVzdF9ydW4uYy01MS1cdFx0XHRcdCAgICB1MzIgcmVwZWF0LCBpbnQgKmVyciwgdTMyICpkdXJhdGlvbilcbi0tXG5uZXQvYnBmL3Rlc3RfcnVuLmMtNzItXHRcdHQtXHUwMDNldGltZV9zcGVudCAmIzQzOz0ga3RpbWVfZ2V0X25zKCkgLSB0LVx1MDAzZXRpbWVfc3RhcnQ7XG5uZXQvYnBmL3Rlc3RfcnVuLmM6NzM6XHRcdGJwZl90ZXN0X3RpbWVyX2xlYXZlKHQpO1xubmV0L2JwZi90ZXN0X3J1bi5jLTc0LVx0XHRjb25kX3Jlc2NoZWQoKTtcbm5ldC9icGYvdGVzdF9ydW4uYzo3NTpcdFx0YnBmX3Rlc3RfdGltZXJfZW50ZXIodCk7XG5uZXQvYnBmL3Rlc3RfcnVuLmMtNzYtXHR9XG4tLVxubmV0L2JwZi90ZXN0X3J1bi5jPTM2MD1zdGF0aWMgaW50IGJwZl90ZXN0X3J1bl94ZHBfbGl2ZShzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHN0cnVjdCB4ZHBfYnVmZiAqY3R4LFxuLS1cbm5ldC9icGYvdGVzdF9ydW4uYy0zNjQtXHRzdHJ1Y3QgeGRwX3Rlc3RfZGF0YSB4ZHAgPSB7IC5iYXRjaF9zaXplID0gYmF0Y2hfc2l6ZSB9O1xubmV0L2JwZi90ZXN0X3J1bi5jOjM2NTpcdHN0cnVjdCBicGZfdGVzdF90aW1lciB0ID0ge307XG5uZXQvYnBmL3Rlc3RfcnVuLmMtMzY2LVx0aW50IHJldDtcbi0tXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMzc0LVxubmV0L2JwZi90ZXN0X3J1bi5jOjM3NTpcdGJwZl90ZXN0X3RpbWVyX2VudGVyKFx1MDAyNnQpO1xubmV0L2JwZi90ZXN0X3J1bi5jLTM3Ni1cdGRvIHtcbi0tXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMzgwLVx0XHRcdGJyZWFrO1xubmV0L2JwZi90ZXN0X3J1bi5jOjM4MTpcdH0gd2hpbGUgKGJwZl90ZXN0X3RpbWVyX2NvbnRpbnVlKFx1MDAyNnQsIHhkcC5mcmFtZV9jbnQsIHJlcGVhdCwgXHUwMDI2cmV0LCB0aW1lKSk7XG5uZXQvYnBmL3Rlc3RfcnVuLmM6MzgyOlx0YnBmX3Rlc3RfdGltZXJfbGVhdmUoXHUwMDI2dCk7XG5uZXQvYnBmL3Rlc3RfcnVuLmMtMzgzLVxuLS1cbm5ldC9icGYvdGVzdF9ydW4uYz0zODg9c3RhdGljIGludCBicGZfdGVzdF9ydW4oc3RydWN0IGJwZl9wcm9nICpwcm9nLCB2b2lkICpjdHgsIHUzMiByZXBlYXQsXG4tLVxubmV0L2JwZi90ZXN0X3J1bi5jLTM5NC1cdHN0cnVjdCBicGZfY2dfcnVuX2N0eCBydW5fY3R4O1xubmV0L2JwZi90ZXN0X3J1bi5jOjM5NTpcdHN0cnVjdCBicGZfdGVzdF90aW1lciB0ID0ge307XG5uZXQvYnBmL3Rlc3RfcnVuLmMtMzk2LVx0ZW51bSBicGZfY2dyb3VwX3N0b3JhZ2VfdHlwZSBzdHlwZTtcbi0tXG5uZXQvYnBmL3Rlc3RfcnVuLmMtNDExLVxubmV0L2JwZi90ZXN0X3J1bi5jOjQxMjpcdGJwZl90ZXN0X3RpbWVyX2VudGVyKFx1MDAyNnQpO1xubmV0L2JwZi90ZXN0X3J1bi5jLTQxMy1cdG9sZF9jdHggPSBicGZfc2V0X3J1bl9jdHgoXHUwMDI2cnVuX2N0eC5ydW5fY3R4KTtcbi0tXG5uZXQvYnBmL3Rlc3RfcnVuLmMtNDI1LVx0XHRsb2NhbF9iaF9lbmFibGUoKTtcbm5ldC9icGYvdGVzdF9ydW4uYzo0MjY6XHR9IHdoaWxlIChicGZfdGVzdF90aW1lcl9jb250aW51ZShcdTAwMjZ0LCAxLCByZXBlYXQsIFx1MDAyNnJldCwgdGltZSkpO1xubmV0L2JwZi90ZXN0X3J1bi5jLTQyNy1cdGJwZl9yZXNldF9ydW5fY3R4KG9sZF9jdHgpO1xubmV0L2JwZi90ZXN0X3J1bi5jOjQyODpcdGJwZl90ZXN0X3RpbWVyX2xlYXZlKFx1MDAyNnQpO1xubmV0L2JwZi90ZXN0X3J1bi5jLTQyOS1cbi0tXG5uZXQvYnBmL3Rlc3RfcnVuLmM9MTUwOT1pbnQgYnBmX3Byb2dfdGVzdF9ydW5fZmxvd19kaXNzZWN0b3Ioc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuLS1cbm5ldC9icGYvdGVzdF9ydW4uYy0xNTEyLXtcbm5ldC9icGYvdGVzdF9ydW4uYzoxNTEzOlx0c3RydWN0IGJwZl90ZXN0X3RpbWVyIHQgPSB7fTtcbm5ldC9icGYvdGVzdF9ydW4uYy0xNTE0LVx0dTMyIHNpemUgPSBrYXR0ci1cdTAwM2V0ZXN0LmRhdGFfc2l6ZV9pbjtcbi0tXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTU1NS1cbm5ldC9icGYvdGVzdF9ydW4uYzoxNTU2Olx0YnBmX3Rlc3RfdGltZXJfZW50ZXIoXHUwMDI2dCk7XG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTU1Ny1cdGRvIHtcbi0tXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTU1OS1cdFx0XHRcdFx0ICBzaXplLCBmbGFncyk7XG5uZXQvYnBmL3Rlc3RfcnVuLmM6MTU2MDpcdH0gd2hpbGUgKGJwZl90ZXN0X3RpbWVyX2NvbnRpbnVlKFx1MDAyNnQsIDEsIHJlcGVhdCwgXHUwMDI2cmV0LCBcdTAwMjZkdXJhdGlvbikpO1xubmV0L2JwZi90ZXN0X3J1bi5jOjE1NjE6XHRicGZfdGVzdF90aW1lcl9sZWF2ZShcdTAwMjZ0KTtcbm5ldC9icGYvdGVzdF9ydW4uYy0xNTYyLVxuLS1cbm5ldC9icGYvdGVzdF9ydW4uYz0xNTc4PWludCBicGZfcHJvZ190ZXN0X3J1bl9za19sb29rdXAoc3RydWN0IGJwZl9wcm9nICpwcm9nLCBjb25zdCB1bmlvbiBicGZfYXR0ciAqa2F0dHIsXG4tLVxubmV0L2JwZi90ZXN0X3J1bi5jLTE1ODAte1xubmV0L2JwZi90ZXN0X3J1bi5jOjE1ODE6XHRzdHJ1Y3QgYnBmX3Rlc3RfdGltZXIgdCA9IHt9O1xubmV0L2JwZi90ZXN0X3J1bi5jLTE1ODItXHRzdHJ1Y3QgYnBmX3Byb2dfYXJyYXkgKnByb2dzID0gTlVMTDtcbi0tXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTY0Ny1cbm5ldC9icGYvdGVzdF9ydW4uYzoxNjQ4Olx0YnBmX3Rlc3RfdGltZXJfZW50ZXIoXHUwMDI2dCk7XG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTY0OS1cdGRvIHtcbi0tXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTY1MS1cdFx0cmV0dmFsID0gQlBGX1BST0dfU0tfTE9PS1VQX1JVTl9BUlJBWShwcm9ncywgY3R4LCBicGZfcHJvZ19ydW4pO1xubmV0L2JwZi90ZXN0X3J1bi5jOjE2NTI6XHR9IHdoaWxlIChicGZfdGVzdF90aW1lcl9jb250aW51ZShcdTAwMjZ0LCAxLCByZXBlYXQsIFx1MDAyNnJldCwgXHUwMDI2ZHVyYXRpb24pKTtcbm5ldC9icGYvdGVzdF9ydW4uYy0xNjUzLVxuLS1cbm5ldC9icGYvdGVzdF9ydW4uYy0xNjYyLVx0fVxubmV0L2JwZi90ZXN0X3J1bi5jOjE2NjM6XHRicGZfdGVzdF90aW1lcl9sZWF2ZShcdTAwMjZ0KTtcbm5ldC9icGYvdGVzdF9ydW4uYy0xNjY0LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxNjozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NzE3CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkFuYWx5emluZyBgYnBmX3Rlc3RfdGltZXJfZW50ZXJgIGFuZCBgYnBmX3Rlc3RfdGltZXJfbGVhdmVgKioKCk9rYXksIGxldCYjMzk7cyBkaXNzZWN0IHRoZSBiZWhhdmlvdXIgb2YgdGhlc2UgZnVuY3Rpb25zLCBgYnBmX3Rlc3RfdGltZXJfZW50ZXJgIGFuZCBgYnBmX3Rlc3RfdGltZXJfbGVhdmVgLiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byB1bmRlcnN0YW5kIGhvdyB0aGV5IGludGVyYWN0IHdpdGggdGhlIFJDVSAoUmVhZC1Db3B5IFVwZGF0ZSkgbWVjaGFuaXNtLiBBIHF1aWNrIGxvb2sgcmV2ZWFscyBhIGNydWNpYWwgZGV0YWlsOiBgYnBmX3Rlc3RfdGltZXJfZW50ZXJgIGlzIGNhbGxpbmcgYHJjdV9yZWFkX2xvY2soKWAsIHdoaWxlIGl0cyBjb3VudGVycGFydCwgYGJwZl90ZXN0X3RpbWVyX2xlYXZlYCwgY2FsbHMgYHJjdV9yZWFkX3VubG9jaygpYC4gVGhpcyBpbmRpY2F0ZXMgdGhhdCB0aGV5JiMzOTtyZSBlc3RhYmxpc2hpbmcgYW5kIHJlbGVhc2luZyBhbiBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24sIHdoaWNoIGlzIGNvbW1vbi4KCk5vdywgbGV0IG1lIHpvb20gaW4gb24gbGluZXMgMzYgdGhyb3VnaCA0Ni4gSSBleHBlY3QgdGhhdCB0aGVzZSB3aWxsIGFkZCBtb3JlIG51YW5jZSB0byBob3cgdGhpcyB0aW1lciYjMzk7cyBpbnRlcmFjdGlvbiB3aXRoIHRoZSBSQ1Ugc3Vic3lzdGVtIHRha2VzIHBsYWNlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHRpbWVyIGZ1bmN0aW9uIGludGVncmF0ZXMgd2l0aCB0aGUgY3JpdGljYWwgc2VjdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTY6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvYnBmL3Rlc3RfcnVuLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDMwOlx0XG4gIDMxOlx0c3RydWN0IGJwZl90ZXN0X3RpbWVyIHtcbiAgMzI6XHRcdHUzMiBpO1xuICAzMzpcdFx0dTY0IHRpbWVfc3RhcnQsIHRpbWVfc3BlbnQ7XG4gIDM0Olx0fTtcbiAgMzU6XHRcbiAgMzY6XHRzdGF0aWMgdm9pZCBicGZfdGVzdF90aW1lcl9lbnRlcihzdHJ1Y3QgYnBmX3Rlc3RfdGltZXIgKnQpXG4gIDM3Olx0XHRfX2FjcXVpcmVzKHJjdSlcbiAgMzg6XHR7XG4gIDM5Olx0XHRyY3VfcmVhZF9sb2NrX2RvbnRfbWlncmF0ZSgpO1xuICA0MDpcdFx0dC1cdTAwM2V0aW1lX3N0YXJ0ID0ga3RpbWVfZ2V0X25zKCk7XG4gIDQxOlx0fVxuICA0MjpcdFxuICA0MzpcdHN0YXRpYyB2b2lkIGJwZl90ZXN0X3RpbWVyX2xlYXZlKHN0cnVjdCBicGZfdGVzdF90aW1lciAqdClcbiAgNDQ6XHRcdF9fcmVsZWFzZXMocmN1KVxuICA0NTpcdHtcbiAgNDY6XHRcdHQtXHUwMDNldGltZV9zdGFydCA9IDA7XG4gIDQ3Olx0XHRyY3VfcmVhZF91bmxvY2tfbWlncmF0ZSgpO1xuICA0ODpcdH1cbiAgNDk6XHRcbiAgNTA6XHRzdGF0aWMgYm9vbCBicGZfdGVzdF90aW1lcl9jb250aW51ZShzdHJ1Y3QgYnBmX3Rlc3RfdGltZXIgKnQsIGludCBpdGVyYXRpb25zLFxuICA1MTpcdFx0XHRcdFx0ICAgIHUzMiByZXBlYXQsIGludCAqZXJyLCB1MzIgKmR1cmF0aW9uKVxuICA1MjpcdFx0X19tdXN0X2hvbGQocmN1KVxuICA1MzpcdHtcbiAgNTQ6XHRcdHQtXHUwMDNlaSAmIzQzOz0gaXRlcmF0aW9ucztcbiAgNTU6XHRcdGlmICh0LVx1MDAzZWkgXHUwMDNlPSByZXBlYXQpIHtcbiAgNTY6XHRcdFx0LyogV2UmIzM5O3JlIGRvbmUuICovXG4gIDU3Olx0XHRcdHQtXHUwMDNldGltZV9zcGVudCAmIzQzOz0ga3RpbWVfZ2V0X25zKCkgLSB0LVx1MDAzZXRpbWVfc3RhcnQ7XG4gIDU4Olx0XHRcdGRvX2Rpdih0LVx1MDAzZXRpbWVfc3BlbnQsIHQtXHUwMDNlaSk7XG4gIDU5Olx0XHRcdCpkdXJhdGlvbiA9IHQtXHUwMDNldGltZV9zcGVudCBcdTAwM2UgVTMyX01BWCA/IFUzMl9NQVggOiAodTMyKXQtXHUwMDNldGltZV9zcGVudDtcbiAgNjA6XHRcdFx0KmVyciA9IDA7XG4gIDYxOlx0XHRcdGdvdG8gcmVzZXQ7XG4gIDYyOlx0XHR9XG4gIDYzOlx0XG4gIDY0Olx0XHRpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHtcbiAgNjU6XHRcdFx0LyogRHVyaW5nIGl0ZXJhdGlvbjogd2UmIzM5O3ZlIGJlZW4gY2FuY2VsbGVkLCBhYm9ydC4gKi9cbiAgNjY6XHRcdFx0KmVyciA9IC1FSU5UUjtcbiAgNjc6XHRcdFx0Z290byByZXNldDtcbiAgNjg6XHRcdH1cbiAgNjk6XHRcbiAgNzA6XHRcdGlmIChuZWVkX3Jlc2NoZWQoKSkge1xuICA3MTpcdFx0XHQvKiBEdXJpbmcgaXRlcmF0aW9uOiB3ZSBuZWVkIHRvIHJlc2NoZWR1bGUgYmV0d2VlbiBydW5zLiAqL1xuICA3MjpcdFx0XHR0LVx1MDAzZXRpbWVfc3BlbnQgJiM0Mzs9IGt0aW1lX2dldF9ucygpIC0gdC1cdTAwM2V0aW1lX3N0YXJ0O1xuICA3MzpcdFx0XHRicGZfdGVzdF90aW1lcl9sZWF2ZSh0KTtcbiAgNzQ6XHRcdFx0Y29uZF9yZXNjaGVkKCk7XG4gIDc1Olx0XHRcdGJwZl90ZXN0X3RpbWVyX2VudGVyKHQpO1xuICA3NjpcdFx0fVxuICA3NzpcdFxuICA3ODpcdFx0LyogRG8gYW5vdGhlciByb3VuZC4gKi9cbiAgNzk6XHRcdHJldHVybiB0cnVlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxNjozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NzQ4CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNzA1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIFJDVSBTYWZldHkqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7QWgsIFJDVSEmIzM0OyBJIHNlZSBhIGNsYXNzaWMgY2FzZSBvZiBwb3RlbnRpYWxseSBhY2Nlc3NpbmcgYSBzaGFyZWQgZGF0YSBzdHJ1Y3R1cmUsIGBjdHguc2VsZWN0ZWRfc2tgLCBvdXRzaWRlIHRoZSBwcm90ZWN0aW9uIG9mIGFuIFJDVSByZWFkIGxvY2suIFRoZSBvcmlnaW5hbCBjb2RlIGhhcyB0aGlzIHNlcXVlbmNlOiB3ZSBlbnRlciBhIHRpbWVyIChgYnBmX3Rlc3RfdGltZXJfZW50ZXJgKSwgcnVuIHNvbWV0aGluZyBpbiBhIGxvb3AsIGFuZCB0aGVuICpwb3RlbnRpYWxseSogYWNjZXNzIGBjdHguc2VsZWN0ZWRfc2tgIGFmdGVyIHRoZSBsb29wIGFuZCBhZnRlciB3ZSBsZWF2ZSB0aGUgdGltZXIgKGBicGZfdGVzdF90aW1lcl9sZWF2ZWApLiBUaGUgbm90ZSBpcyBxdWl0ZSBjbGVhciAtIGBicGZfdGVzdF90aW1lcl9lbnRlcmAgaXMgaG9sZGluZyB0aGUgUkNVIHJlYWQgbG9jaywgYW5kIGNhbGxpbmcgYGJwZl90ZXN0X3RpbWVyX2xlYXZlYCByZWxlYXNlcyBpdC4KClNvLCB0aGUgaXNzdWUgaXMgdGhhdCBpZiBgY3R4LnNlbGVjdGVkX3NrYCBpcyB1c2VkIGFmdGVyIGxlYXZpbmcgdGhlIHRpbWVyLCB3ZSYjMzk7cmUgcG90ZW50aWFsbHkgbG9va2luZyBhdCBhIHNvY2tldCB0aGF0JiMzOTtzIGJlZW4gZnJlZWQgZnJvbSB1bmRlciB1cyBkdWUgdG8gdGhlIFJDVSBsb2NrIGJlaW5nIGRyb3BwZWQuIFRoYXQmIzM5O3MgYSB0ZXh0Ym9vayBSQ1UgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW8sIG9yIGF0IGxlYXN0IGEgZGVyZWZlcmVuY2Ugb3V0c2lkZSB0aGUgcmVhZCBsb2NrLgoKVGhlIGZpeCwgYW5kIGl0JiMzOTtzIGEgZ29vZCBvbmUsIG1vdmVzIHRoZSBhY2Nlc3MgdG8gYGN0eC5zZWxlY3RlZF9za2AgaW5zaWRlIHRoZSBgaWYgKHJldCAmZ3Q7PSAwKWAgYmxvY2sgKmJlZm9yZSogdGhlIGBicGZfdGVzdF90aW1lcl9sZWF2ZSgmYW1wO3QpYCBjYWxsLiBUaGlzIGVuc3VyZXMgdGhhdCB0aGUgY29kZSB0aGF0IHVzZXMgdGhhdCBwb2ludGVyIGlzIHByb3RlY3RlZCBieSB0aGUgUkNVIHJlYWQgbG9jay4gIFdlIGhhdmUgdGhlIGNoZWNrcyBmb3IgYHNrX3JldXNlcG9ydGAgYW5kIHRoZSBjYWxsIHRvIGBzb2NrX2dlbl9jb29raWUoKWAgdGhlcmUsIGFsbCBwcm90ZWN0ZWQgbm93LiBNdWNoIGJldHRlci4KCk5vdywgbGV0JiMzOTtzIGp1c3QgbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBvdGhlciBvYnZpb3VzIGNvbmNlcm5zIGhlcmUuIExldCYjMzk7cyBtYWtlIHN1cmUgYHVzZXJfY3R4YCBpcyBwcm9wZXJseSBoYW5kbGVkIGluIGBicGZfY3R4X2luaXQoKWAgYW5kIGBicGZfY3R4X2ZpbmlzaCgpYC4gVGhhdCYjMzk7cyB3aGVyZSB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBgdXNlcl9jdHhgIG1lbW9yeSBpcyBwcm9wZXJseSBpbml0aWFsaXplZCBhbmQgY2xlYW5lZCB1cC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTY6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2N0eF9pbml0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2JwZi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2JwZi90ZXN0X3J1bi5jPTc4Mj1pbnQgYnBmX3Byb2dfdGVzdF9ydW5fcmF3X3RwKHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbi0tXG5uZXQvYnBmL3Rlc3RfcnVuLmMtODUzLVxubmV0L2JwZi90ZXN0X3J1bi5jOjg1NDpzdGF0aWMgdm9pZCAqYnBmX2N0eF9pbml0KGNvbnN0IHVuaW9uIGJwZl9hdHRyICprYXR0ciwgdTMyIG1heF9zaXplKVxubmV0L2JwZi90ZXN0X3J1bi5jLTg1NS17XG4tLVxubmV0L2JwZi90ZXN0X3J1bi5jPTEwMzU9aW50IGJwZl9wcm9nX3Rlc3RfcnVuX3NrYihzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIGNvbnN0IHVuaW9uIGJwZl9hdHRyICprYXR0cixcbi0tXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTA3Ny1cbm5ldC9icGYvdGVzdF9ydW4uYzoxMDc4Olx0Y3R4ID0gYnBmX2N0eF9pbml0KGthdHRyLCBzaXplb2Yoc3RydWN0IF9fc2tfYnVmZikpO1xubmV0L2JwZi90ZXN0X3J1bi5jLTEwNzktXHRpZiAoSVNfRVJSKGN0eCkpXG4tLVxubmV0L2JwZi90ZXN0X3J1bi5jPTEzMzI9aW50IGJwZl9wcm9nX3Rlc3RfcnVuX3hkcChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIGNvbnN0IHVuaW9uIGJwZl9hdHRyICprYXR0cixcbi0tXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTM2Ny1cbm5ldC9icGYvdGVzdF9ydW4uYzoxMzY4Olx0Y3R4ID0gYnBmX2N0eF9pbml0KGthdHRyLCBzaXplb2Yoc3RydWN0IHhkcF9tZCkpO1xubmV0L2JwZi90ZXN0X3J1bi5jLTEzNjktXHRpZiAoSVNfRVJSKGN0eCkpXG4tLVxubmV0L2JwZi90ZXN0X3J1bi5jPTE1MDk9aW50IGJwZl9wcm9nX3Rlc3RfcnVuX2Zsb3dfZGlzc2VjdG9yKHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbi0tXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTUzOS1cbm5ldC9icGYvdGVzdF9ydW4uYzoxNTQwOlx0dXNlcl9jdHggPSBicGZfY3R4X2luaXQoa2F0dHIsIHNpemVvZihzdHJ1Y3QgYnBmX2Zsb3dfa2V5cykpO1xubmV0L2JwZi90ZXN0X3J1bi5jLTE1NDEtXHRpZiAoSVNfRVJSKHVzZXJfY3R4KSkge1xuLS1cbm5ldC9icGYvdGVzdF9ydW4uYz0xNTc4PWludCBicGZfcHJvZ190ZXN0X3J1bl9za19sb29rdXAoc3RydWN0IGJwZl9wcm9nICpwcm9nLCBjb25zdCB1bmlvbiBicGZfYXR0ciAqa2F0dHIsXG4tLVxubmV0L2JwZi90ZXN0X3J1bi5jLTE1OTgtXG5uZXQvYnBmL3Rlc3RfcnVuLmM6MTU5OTpcdHVzZXJfY3R4ID0gYnBmX2N0eF9pbml0KGthdHRyLCBzaXplb2YoKnVzZXJfY3R4KSk7XG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTYwMC1cdGlmIChJU19FUlIodXNlcl9jdHgpKVxuLS1cbm5ldC9icGYvdGVzdF9ydW4uYz0xNzc2PWludCBicGZfcHJvZ190ZXN0X3J1bl9uZihzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXG4tLVxubmV0L2JwZi90ZXN0X3J1bi5jLTE4MTAtXG5uZXQvYnBmL3Rlc3RfcnVuLmM6MTgxMTpcdHVzZXJfY3R4ID0gYnBmX2N0eF9pbml0KGthdHRyLCBzaXplb2Yoc3RydWN0IG5mX2hvb2tfc3RhdGUpKTtcbm5ldC9icGYvdGVzdF9ydW4uYy0xODEyLVx0aWYgKElTX0VSUih1c2VyX2N0eCkpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTY6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTY4MAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgZnVuY3Rpb25zLCBiYXNlZCBvbiBhIHF1aWNrIHNjYW4gb2YgYG5ldC9icGYvdGVzdF9ydW4uY2A6CgoqKkluaXRpYWwgVGhvdWdodHMgb24gQlBGIENvbnRleHQgSW5pdGlhbGl6YXRpb24gYW5kIEZpbmFsaXphdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIGBicGZfY3R4X2luaXRgIGFuZCBgYnBmX2N0eF9maW5pc2hgLiBJbW1lZGlhdGVseSwgSSYjMzk7bSB0aGlua2luZyB0aGVzZSBsaWtlbHkgbWFuYWdlIHRoZSBzZXR1cCBhbmQgdGVhcmRvd24gb2YgdGhlIEJQRiBleGVjdXRpb24gY29udGV4dCBmb3IgcnVubmluZyB0ZXN0cy4gR2l2ZW4gdGhlIGZpbGUsIGB0ZXN0X3J1bi5jYCwgSSYjMzk7bSBleHBlY3RpbmcgdGhpcyBjb250ZXh0IHRvIGJlIHNvbWV0aGluZyBzcGVjaWZpYyB0byBydW5uaW5nIGFuZCB2YWxpZGF0aW5nIEJQRiBwcm9ncmFtcyB3aXRoaW4gdGhlIGtlcm5lbCYjMzk7cyB0ZXN0aW5nIGZyYW1ld29yaywgbm90IG5lY2Vzc2FyaWx5IGEgZ2VuZXJhbC1wdXJwb3NlIEJQRiBydW50aW1lIGVudmlyb25tZW50LiBJIHN1c3BlY3QgYGJwZl9jdHhfaW5pdGAgd2lsbCBhbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBhbnkgbmVjZXNzYXJ5IHN0cnVjdHVyZXMg4oCTIGxpa2VseSBzb21lIHNvcnQgb2YgY29udGV4dCBzdGF0ZSwgcG9zc2libHkgbWVtb3J5IGZvciBwcm9ncmFtIGV4ZWN1dGlvbiwgYW5kIG1heWJlIHJlZ2lzdGVycyBhbmQgYXV4aWxpYXJ5IGRhdGEgdXNlZCBkdXJpbmcgdGhlIHRlc3RzLiBgYnBmX2N0eF9maW5pc2hgLCBjb252ZXJzZWx5LCBzaG91bGQgYmUgcmVzcG9uc2libGUgZm9yIGNsZWFuaW5nIHVwIHRob3NlIHJlc291cmNlcywgZnJlZWluZyBtZW1vcnksIGFuZCBtYXliZSBldmVuIHBlcmZvcm1pbmcgc29tZSBmaW5hbCBjaGVja3Mgb3IgbG9nZ2luZyBhbnkgdGVzdCByZXN1bHRzLiBJJiMzOTttIGtlZW4gdG8gc2VlIGlmIHRoZXkgaGFuZGxlIGFueSBlcnJvciBjb25kaXRpb25zIG9yIGNsZWFudXAgc2NlbmFyaW9zIGdyYWNlZnVsbHkuIEkgYWxzbyB3b25kZXIgaG93IHRoZSBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgd2lkZXIgQlBGIGZyYW1ld29yayBhcmUgc3RydWN0dXJlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTY6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvYnBmL3Rlc3RfcnVuLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4NTQsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDg1NDpcdHN0YXRpYyB2b2lkICpicGZfY3R4X2luaXQoY29uc3QgdW5pb24gYnBmX2F0dHIgKmthdHRyLCB1MzIgbWF4X3NpemUpXG4gODU1Olx0e1xuIDg1NjpcdFx0dm9pZCBfX3VzZXIgKmRhdGFfaW4gPSB1NjRfdG9fdXNlcl9wdHIoa2F0dHItXHUwMDNldGVzdC5jdHhfaW4pO1xuIDg1NzpcdFx0dm9pZCBfX3VzZXIgKmRhdGFfb3V0ID0gdTY0X3RvX3VzZXJfcHRyKGthdHRyLVx1MDAzZXRlc3QuY3R4X291dCk7XG4gODU4Olx0XHR1MzIgc2l6ZSA9IGthdHRyLVx1MDAzZXRlc3QuY3R4X3NpemVfaW47XG4gODU5Olx0XHR2b2lkICpkYXRhO1xuIDg2MDpcdFx0aW50IGVycjtcbiA4NjE6XHRcbiA4NjI6XHRcdGlmICghZGF0YV9pbiBcdTAwMjZcdTAwMjYgIWRhdGFfb3V0KVxuIDg2MzpcdFx0XHRyZXR1cm4gTlVMTDtcbiA4NjQ6XHRcbiA4NjU6XHRcdGRhdGEgPSBremFsbG9jKG1heF9zaXplLCBHRlBfVVNFUik7XG4gODY2Olx0XHRpZiAoIWRhdGEpXG4gODY3Olx0XHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuIDg2ODpcdFxuIDg2OTpcdFx0aWYgKGRhdGFfaW4pIHtcbiA4NzA6XHRcdFx0ZXJyID0gYnBmX2NoZWNrX3VhcmdfdGFpbF96ZXJvKFVTRVJfQlBGUFRSKGRhdGFfaW4pLCBtYXhfc2l6ZSwgc2l6ZSk7XG4gODcxOlx0XHRcdGlmIChlcnIpIHtcbiA4NzI6XHRcdFx0XHRrZnJlZShkYXRhKTtcbiA4NzM6XHRcdFx0XHRyZXR1cm4gRVJSX1BUUihlcnIpO1xuIDg3NDpcdFx0XHR9XG4gODc1Olx0XG4gODc2Olx0XHRcdHNpemUgPSBtaW5fdCh1MzIsIG1heF9zaXplLCBzaXplKTtcbiA4Nzc6XHRcdFx0aWYgKGNvcHlfZnJvbV91c2VyKGRhdGEsIGRhdGFfaW4sIHNpemUpKSB7XG4gODc4Olx0XHRcdFx0a2ZyZWUoZGF0YSk7XG4gODc5Olx0XHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVGQVVMVCk7XG4gODgwOlx0XHRcdH1cbiA4ODE6XHRcdH1cbiA4ODI6XHRcdHJldHVybiBkYXRhO1xuIDg4MzpcdH1cbiA4ODQ6XHRcbiA4ODU6XHRzdGF0aWMgaW50IGJwZl9jdHhfZmluaXNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICprYXR0cixcbiA4ODY6XHRcdFx0XHQgIHVuaW9uIGJwZl9hdHRyIF9fdXNlciAqdWF0dHIsIGNvbnN0IHZvaWQgKmRhdGEsXG4gODg3Olx0XHRcdFx0ICB1MzIgc2l6ZSlcbiA4ODg6XHR7XG4gODg5Olx0XHR2b2lkIF9fdXNlciAqZGF0YV9vdXQgPSB1NjRfdG9fdXNlcl9wdHIoa2F0dHItXHUwMDNldGVzdC5jdHhfb3V0KTtcbiA4OTA6XHRcdGludCBlcnIgPSAtRUZBVUxUO1xuIDg5MTpcdFx0dTMyIGNvcHlfc2l6ZSA9IHNpemU7XG4gODkyOlx0XG4gODkzOlx0XHRpZiAoIWRhdGEgfHwgIWRhdGFfb3V0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxNjozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+OG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDYzOAoJCQkJCQkJb3V0cHV0OiAyOTYKCQkJCQkJCXRob3VnaHRzOiA1OTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IENvbmNlcm5zKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFdlJiMzOTtyZSBsb29raW5nIGF0IGEgcGF0Y2ggY29uY2VybmluZyBtZW1vcnkgaW5pdGlhbGl6YXRpb24gd2l0aGluIHRoZSBCUEYgY29udGV4dCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIFJDVS4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBwYXRjaCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyBLTVNBTiBjb25jZXJucy4gSGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3M6CgpGaXJzdCwgSSBleGFtaW5lZCBob3cgYHVzZXJfY3R4YCBpcyBoYW5kbGVkLiBJdCYjMzk7cyBhbGxvY2F0ZWQgdXNpbmcgYGt6YWxsb2NgIGluIGBicGZfY3R4X2luaXRgLCBzbyBpdCYjMzk7cyBndWFyYW50ZWVkIHRvIGJlIHplcm9lZCBvdXQgZnJvbSB0aGUgc3RhcnQuIGBjdHhgIGlzIG9uIHRoZSBzdGFjaywgYW5kIHByb3Blcmx5IGluaXRpYWxpemVkIHRvIHplcm8uIGByZXRgIGFuZCBgZHVyYXRpb25gIGFyZSBhbHNvIGluaXRpYWxpemVkLiAgVGhlIGNvcmUgb2YgdGhlIHBhdGNoIGludm9sdmVzIG1vdmluZyBgdXNlcl9jdHgtJmd0O2Nvb2tpZWAgYXNzaWdubWVudCBhbmQgYSBgY3R4LnNlbGVjdGVkX3NrYCBkZXJlZmVyZW5jZSAqaW5zaWRlKiB0aGUgUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uLCB3aGljaCBpcyB0aGUga2V5IHRvIHJlc29sdmluZyBhbiBSQ1UgbGlmZXRpbWUgaXNzdWUuICBJZiBgcmV0YCBpcyBuZWdhdGl2ZSwgd2UgaW1tZWRpYXRlbHkganVtcCB0byBgb3V0YCwgYnlwYXNzaW5nIHRoZSBwb3RlbnRpYWxseSBwcm9ibGVtYXRpYyBjb2RlLiBJZiBgcmV0YCBpcyBwb3NpdGl2ZSwgdGhlbiBgYnBmX3Rlc3RfZmluaXNoYCBhbmQgYGJwZl9jdHhfZmluaXNoYCBjb3B5IGB1c2VyX2N0eGAgdG8gdXNlcnNwYWNlLgoKVGhlIGRpZmYmIzM5O3MgY29yZSBmb2N1cyBpcyBvbiBSQ1Ugc2FmZXR5IGFuZCBhZGRyZXNzZXMgYSBVQUYgaXNzdWUgcmVsYXRlZCB0byBkZXJlZmVyZW5jaW5nIGBjdHguc2VsZWN0ZWRfc2tgIGFmdGVyIGV4aXRpbmcgdGhlIFJDVSByZWFkIGNyaXRpY2FsIHNlY3Rpb24uIE5vIG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucywgcmVhZHMsIG9yIHBvdGVudGlhbCBsZWFrcyB0byB1c2Vyc3BhY2UgYXJlIGludHJvZHVjZWQuIEFueSBjb25jZXJucyBhcm91bmQgdGhlIHNvY2tldCBwb2ludGVyIGFyZSBVQUYvUkNVIHZpb2xhdGlvbnMgd2hpY2ggS0FTQU4vUFJPVkVfUkNVIHdvdWxkIGNhdGNoLgoKTm93LCBsZXQmIzM5O3Mgcmlnb3JvdXNseSBjaGVjayB0aG9zZSBLTVNBTi1yZWxhdGVkIGNyaXRlcmlhOgoKMS4gICoqS2VybmVsIHN0cnVjdHVyZXMgdG8gdXNlcnNwYWNlKio6ICBgdXNlcl9jdHhgIGlzIGZ1bGx5IGluaXRpYWxpemVkIHdpdGggYGt6YWxsb2NgLCBhbmQgdGhlICpzYW1lKiBmaWVsZHMgYXJlIGluaXRpYWxpemVkIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIHBhdGNoLiBUaGUgY29kZSBtb3ZlbWVudCBkb2VzbiYjMzk7dCBhbHRlciB3aGF0IGdldHMgaW5pdGlhbGl6ZWQgYW5kIGNvcGllZC4gU28sIG5vIHByb2JsZW0gaGVyZS4KCjIuICAqKkNvbmRpdGlvbmFsIGxvZ2ljIGFuZCB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyoqOiAgYHJldGAgaXMgYWx3YXlzIHNldCBieSBgYnBmX3Rlc3RfdGltZXJfY29udGludWVgIG9yIGluaXRpYWxpemVkIHRvIC1FSU5WQUwsIHNvIGl0IGlzIGFsd2F5cyBhIHZhbGlkIHZhbHVlLiBUaGlzIGlzIGZpbmUuCgozLiAgKipDb21wbGV4IGRhdGEgc3RydWN0dXJlcyoqOiBObyBuZXcgYWxsb2NhdGlvbnMgb3IgaW5pdGlhbGl6YXRpb24gY2hhbmdlcyBoYXZlIGhhcHBlbmVkIGluIHRoaXMgY2FzZS4gIFRoaXMgaXMgbm90IGFuIGlzc3VlLgoKNC4gICoqQm91bmRzIGNoZWNrcywgbGVuZ3RocywgZXRjLioqOiBUaGUgY29kZSBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGNoYW5nZXMgdG8gYm91bmRzIGNoZWNrcyBvciBsZW5ndGggY2hlY2tzLiBUaGlzIGlzIG5vdCBhbiBpc3N1ZS4KClRoZXJlZm9yZSwgdGhpcyBwYXRjaCBkb2VzICpub3QqIGludHJvZHVjZSBLTVNBTiBjb25jZXJucy4gSXQmIzM5O3MgYW4gUkNVIGxpZmV0aW1lIGZpeCwgcHVyZWx5LiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYCBhbmQgcHJvdmlkZSB0aGlzIGRldGFpbGVkIGJyZWFrZG93bi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTY6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGJwZl9wcm9nX3Rlc3RfcnVuX3NrX2xvb2t1cCgpYCBpbiBgbmV0L2JwZi90ZXN0X3J1bi5jYCB0byBpbnNwZWN0IGBjdHguc2VsZWN0ZWRfc2tgIGFuZCB1cGRhdGUgYHVzZXJfY3R4LVx1MDAzZWNvb2tpZWAgYmVmb3JlIGNhbGxpbmcgYGJwZl90ZXN0X3RpbWVyX2xlYXZlKFx1MDAyNnQpYCwgcmF0aGVyIHRoYW4gYWZ0ZXIgaXQuXG5cblRoaXMgY2hhbmdlIGVuc3VyZXMgdGhhdCBgY3R4LnNlbGVjdGVkX3NrYCBpcyBhY2Nlc3NlZCB3aGlsZSBzdGlsbCBwcm90ZWN0ZWQgYnkgdGhlIFJDVSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbiBlc3RhYmxpc2hlZCBieSBgYnBmX3Rlc3RfdGltZXJfZW50ZXIoKWAuIEFjY2Vzc2luZyBgY3R4LnNlbGVjdGVkX3NrYCBhZnRlciByZWxlYXNpbmcgUkNVIGNvdWxkIHJlc3VsdCBpbiBhIHVzZS1hZnRlci1mcmVlIG9yIFJDVSBkZXJlZmVyZW5jZSBidWcsIHdoaWNoIGlzIG1vbml0b3JlZCBieSBLQVNBTiBhbmQgUFJPVkVfUkNVIC8gTE9DS0RFUC5cblxuVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3M6XG4tIGB1c2VyX2N0eGAgaXMgYWxsb2NhdGVkIHZpYSBga3phbGxvYygpYCBpbiBgYnBmX2N0eF9pbml0KClgLlxuLSBTdGFjayBzdHJ1Y3R1cmVzIHN1Y2ggYXMgYGN0eGAgYXJlIHplcm8taW5pdGlhbGl6ZWQgKGB7fWApLlxuLSBUaGUgY29uZGl0aW9uIGByZXQgXHUwMDNlPSAwYCBjaGVja3MgYHJldGAgd2hpY2ggaXMgaW5pdGlhbGl6ZWQvdXBkYXRlZCBieSBgYnBmX3Rlc3RfdGltZXJfY29udGludWUoKWAuXG4tIE5vIG5ldyBidWZmZXJzLCB1bmluaXRpYWxpemVkIGZpZWxkcywgb3IgbWVtb3J5IGNvcGllcyBhcmUgaW50cm9kdWNlZC5cblxuVGhlcmVmb3JlLCB0aGlzIGNoYW5nZSBkb2VzIG5vdCB3YXJyYW50IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBicGZfcHJvZ190ZXN0X3J1bl9za19sb29rdXAoKWAgaW4gYG5ldC9icGYvdGVzdF9ydW4uY2AgdG8gaW5zcGVjdCBgY3R4LnNlbGVjdGVkX3NrYCBhbmQgdXBkYXRlIGB1c2VyX2N0eC1cdTAwM2Vjb29raWVgIGJlZm9yZSBjYWxsaW5nIGBicGZfdGVzdF90aW1lcl9sZWF2ZShcdTAwMjZ0KWAsIHJhdGhlciB0aGFuIGFmdGVyIGl0LlxuXG5UaGlzIGNoYW5nZSBlbnN1cmVzIHRoYXQgYGN0eC5zZWxlY3RlZF9za2AgaXMgYWNjZXNzZWQgd2hpbGUgc3RpbGwgcHJvdGVjdGVkIGJ5IHRoZSBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24gZXN0YWJsaXNoZWQgYnkgYGJwZl90ZXN0X3RpbWVyX2VudGVyKClgLiBBY2Nlc3NpbmcgYGN0eC5zZWxlY3RlZF9za2AgYWZ0ZXIgcmVsZWFzaW5nIFJDVSBjb3VsZCByZXN1bHQgaW4gYSB1c2UtYWZ0ZXItZnJlZSBvciBSQ1UgZGVyZWZlcmVuY2UgYnVnLCB3aGljaCBpcyBtb25pdG9yZWQgYnkgS0FTQU4gYW5kIFBST1ZFX1JDVSAvIExPQ0tERVAuXG5cblRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzOlxuLSBgdXNlcl9jdHhgIGlzIGFsbG9jYXRlZCB2aWEgYGt6YWxsb2MoKWAgaW4gYGJwZl9jdHhfaW5pdCgpYC5cbi0gU3RhY2sgc3RydWN0dXJlcyBzdWNoIGFzIGBjdHhgIGFyZSB6ZXJvLWluaXRpYWxpemVkIChge31gKS5cbi0gVGhlIGNvbmRpdGlvbiBgcmV0IFx1MDAzZT0gMGAgY2hlY2tzIGByZXRgIHdoaWNoIGlzIGluaXRpYWxpemVkL3VwZGF0ZWQgYnkgYGJwZl90ZXN0X3RpbWVyX2NvbnRpbnVlKClgLlxuLSBObyBuZXcgYnVmZmVycywgdW5pbml0aWFsaXplZCBmaWVsZHMsIG9yIG1lbW9yeSBjb3BpZXMgYXJlIGludHJvZHVjZWQuXG5cblRoZXJlZm9yZSwgdGhpcyBjaGFuZ2UgZG9lcyBub3Qgd2FycmFudCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE1OjU2OjQwLjQwMTI5ODA1NVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5MzM2NTYyMTQ5MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIk5FVFwiLFxuICAgIFwiSU5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9wcm9nX3Rlc3RfcnVuX3NrX2xvb2t1cFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGJwZl9wcm9nX3Rlc3RfcnVuX3NrX2xvb2t1cCgpYCBpbiBgbmV0L2JwZi90ZXN0X3J1bi5jYCB0byBpbnNwZWN0IGBjdHguc2VsZWN0ZWRfc2tgIGFuZCB1cGRhdGUgYHVzZXJfY3R4LVxcdTAwM2Vjb29raWVgIGJlZm9yZSBjYWxsaW5nIGBicGZfdGVzdF90aW1lcl9sZWF2ZShcXHUwMDI2dClgLCByYXRoZXIgdGhhbiBhZnRlciBpdC5cXG5cXG5UaGlzIGNoYW5nZSBlbnN1cmVzIHRoYXQgYGN0eC5zZWxlY3RlZF9za2AgaXMgYWNjZXNzZWQgd2hpbGUgc3RpbGwgcHJvdGVjdGVkIGJ5IHRoZSBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24gZXN0YWJsaXNoZWQgYnkgYGJwZl90ZXN0X3RpbWVyX2VudGVyKClgLiBBY2Nlc3NpbmcgYGN0eC5zZWxlY3RlZF9za2AgYWZ0ZXIgcmVsZWFzaW5nIFJDVSBjb3VsZCByZXN1bHQgaW4gYSB1c2UtYWZ0ZXItZnJlZSBvciBSQ1UgZGVyZWZlcmVuY2UgYnVnLCB3aGljaCBpcyBtb25pdG9yZWQgYnkgS0FTQU4gYW5kIFBST1ZFX1JDVSAvIExPQ0tERVAuXFxuXFxuVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3M6XFxuLSBgdXNlcl9jdHhgIGlzIGFsbG9jYXRlZCB2aWEgYGt6YWxsb2MoKWAgaW4gYGJwZl9jdHhfaW5pdCgpYC5cXG4tIFN0YWNrIHN0cnVjdHVyZXMgc3VjaCBhcyBgY3R4YCBhcmUgemVyby1pbml0aWFsaXplZCAoYHt9YCkuXFxuLSBUaGUgY29uZGl0aW9uIGByZXQgXFx1MDAzZT0gMGAgY2hlY2tzIGByZXRgIHdoaWNoIGlzIGluaXRpYWxpemVkL3VwZGF0ZWQgYnkgYGJwZl90ZXN0X3RpbWVyX2NvbnRpbnVlKClgLlxcbi0gTm8gbmV3IGJ1ZmZlcnMsIHVuaW5pdGlhbGl6ZWQgZmllbGRzLCBvciBtZW1vcnkgY29waWVzIGFyZSBpbnRyb2R1Y2VkLlxcblxcblRoZXJlZm9yZSwgdGhpcyBjaGFuZ2UgZG9lcyBub3Qgd2FycmFudCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGJwZl9wcm9nX3Rlc3RfcnVuX3NrX2xvb2t1cGAgdG8gYWNjZXNzIHRoZSBzZWxlY3RlZCBzb2NrZXQgYGN0eC5zZWxlY3RlZF9za2Agd2l0aGluIHRoZSBSQ1UtcHJvdGVjdGVkIGNyaXRpY2FsIHNlY3Rpb24gYmVmb3JlIGNhbGxpbmcgYGJwZl90ZXN0X3RpbWVyX2xlYXZlKFxcdTAwMjZ0KWAsIHByZXZlbnRpbmcgdXNlLWFmdGVyLWZyZWUgb3IgUkNVIHZpb2xhdGlvbnMuIFRoaXMgY29kZSBwYXRoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIGBCUEZfUFJPR19URVNUX1JVTmAgY29tbWFuZCBvZiB0aGUgYGJwZigpYCBzeXNjYWxsIG9uIHNrX2xvb2t1cCBCUEYgcHJvZ3JhbXMgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNTo1Njo0MC40MDEzMDQ1ODZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3Njc1MTM0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGEzOTU3N2IyYjNjYWY2MzI5ZTJmM2E0NTI2MGRlMDZhMTEzZDIwMTFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBBdWcgMjkgMTU6NTY6MzkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L2JwZi90ZXN0X3J1bi5jIGIvbmV0L2JwZi90ZXN0X3J1bi5jXFxuaW5kZXggNWQ1MWY2Y2I3ZDE1NC4uZTY3N2VjMzM5MGUzNyAxMDA2NDRcXG4tLS0gYS9uZXQvYnBmL3Rlc3RfcnVuLmNcXG4rKysgYi9uZXQvYnBmL3Rlc3RfcnVuLmNcXG5AQCAtMTY1MCwyMSArMTY1MCwyMSBAQCBpbnQgYnBmX3Byb2dfdGVzdF9ydW5fc2tfbG9va3VwKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgY29uc3QgdW5pb24gYnBmX2F0dHIgKmthdFxcbiBcXHRcXHRjdHguc2VsZWN0ZWRfc2sgPSBOVUxMO1xcbiBcXHRcXHRyZXR2YWwgPSBCUEZfUFJPR19TS19MT09LVVBfUlVOX0FSUkFZKHByb2dzLCBjdHgsIGJwZl9wcm9nX3J1bik7XFxuIFxcdH0gd2hpbGUgKGJwZl90ZXN0X3RpbWVyX2NvbnRpbnVlKFxcdTAwMjZ0LCAxLCByZXBlYXQsIFxcdTAwMjZyZXQsIFxcdTAwMjZkdXJhdGlvbikpO1xcbitcXG4rXFx0aWYgKHJldCBcXHUwMDNlPSAwKSB7XFxuK1xcdFxcdHVzZXJfY3R4LVxcdTAwM2Vjb29raWUgPSAwO1xcbitcXHRcXHRpZiAoY3R4LnNlbGVjdGVkX3NrKSB7XFxuK1xcdFxcdFxcdGlmIChjdHguc2VsZWN0ZWRfc2stXFx1MDAzZXNrX3JldXNlcG9ydCBcXHUwMDI2XFx1MDAyNiAhY3R4Lm5vX3JldXNlcG9ydClcXG4rXFx0XFx0XFx0XFx0cmV0ID0gLUVPUE5PVFNVUFA7XFxuK1xcdFxcdFxcdGVsc2VcXG4rXFx0XFx0XFx0XFx0dXNlcl9jdHgtXFx1MDAzZWNvb2tpZSA9IHNvY2tfZ2VuX2Nvb2tpZShjdHguc2VsZWN0ZWRfc2spO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4gXFx0YnBmX3Rlc3RfdGltZXJfbGVhdmUoXFx1MDAyNnQpO1xcbiBcXG4gXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXG4tXFx0dXNlcl9jdHgtXFx1MDAzZWNvb2tpZSA9IDA7XFxuLVxcdGlmIChjdHguc2VsZWN0ZWRfc2spIHtcXG4tXFx0XFx0aWYgKGN0eC5zZWxlY3RlZF9zay1cXHUwMDNlc2tfcmV1c2Vwb3J0IFxcdTAwMjZcXHUwMDI2ICFjdHgubm9fcmV1c2Vwb3J0KSB7XFxuLVxcdFxcdFxcdHJldCA9IC1FT1BOT1RTVVBQO1xcbi1cXHRcXHRcXHRnb3RvIG91dDtcXG4tXFx0XFx0fVxcbi1cXG4tXFx0XFx0dXNlcl9jdHgtXFx1MDAzZWNvb2tpZSA9IHNvY2tfZ2VuX2Nvb2tpZShjdHguc2VsZWN0ZWRfc2spO1xcbi1cXHR9XFxuLVxcbiBcXHRyZXQgPSBicGZfdGVzdF9maW5pc2goa2F0dHIsIHVhdHRyLCBOVUxMLCBOVUxMLCAwLCAwLCByZXR2YWwsIGR1cmF0aW9uKTtcXG4gXFx0aWYgKCFyZXQpXFxuIFxcdFxcdHJldCA9IGJwZl9jdHhfZmluaXNoKGthdHRyLCB1YXR0ciwgdXNlcl9jdHgsIHNpemVvZigqdXNlcl9jdHgpKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTU6NTY6NDAuODc5MDQ5MTM1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxOTMxNTEzNTU0ODA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJORVRcIixcbiAgICBcIklORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfcHJvZ190ZXN0X3J1bl9za19sb29rdXBcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgYnBmX3Byb2dfdGVzdF9ydW5fc2tfbG9va3VwYCB0byBhY2Nlc3MgdGhlIHNlbGVjdGVkIHNvY2tldCBgY3R4LnNlbGVjdGVkX3NrYCB3aXRoaW4gdGhlIFJDVS1wcm90ZWN0ZWQgY3JpdGljYWwgc2VjdGlvbiBiZWZvcmUgY2FsbGluZyBgYnBmX3Rlc3RfdGltZXJfbGVhdmUoXFx1MDAyNnQpYCwgcHJldmVudGluZyB1c2UtYWZ0ZXItZnJlZSBvciBSQ1UgdmlvbGF0aW9ucy4gVGhpcyBjb2RlIHBhdGggaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgYEJQRl9QUk9HX1RFU1RfUlVOYCBjb21tYW5kIG9mIHRoZSBgYnBmKClgIHN5c2NhbGwgb24gc2tfbG9va3VwIEJQRiBwcm9ncmFtcyBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGEzOTU3N2IyYjNjYWY2MzI5ZTJmM2E0NTI2MGRlMDZhMTEzZDIwMTFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAyOSAxNTo1NjozOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9icGYvdGVzdF9ydW4uYyBiL25ldC9icGYvdGVzdF9ydW4uY1xuaW5kZXggNWQ1MWY2Y2I3ZDE1NC4uZTY3N2VjMzM5MGUzNyAxMDA2NDRcbi0tLSBhL25ldC9icGYvdGVzdF9ydW4uY1xuKysrIGIvbmV0L2JwZi90ZXN0X3J1bi5jXG5AQCAtMTY1MCwyMSArMTY1MCwyMSBAQCBpbnQgYnBmX3Byb2dfdGVzdF9ydW5fc2tfbG9va3VwKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgY29uc3QgdW5pb24gYnBmX2F0dHIgKmthdFxuIFx0XHRjdHguc2VsZWN0ZWRfc2sgPSBOVUxMO1xuIFx0XHRyZXR2YWwgPSBCUEZfUFJPR19TS19MT09LVVBfUlVOX0FSUkFZKHByb2dzLCBjdHgsIGJwZl9wcm9nX3J1bik7XG4gXHR9IHdoaWxlIChicGZfdGVzdF90aW1lcl9jb250aW51ZShcdTAwMjZ0LCAxLCByZXBlYXQsIFx1MDAyNnJldCwgXHUwMDI2ZHVyYXRpb24pKTtcbitcbitcdGlmIChyZXQgXHUwMDNlPSAwKSB7XG4rXHRcdHVzZXJfY3R4LVx1MDAzZWNvb2tpZSA9IDA7XG4rXHRcdGlmIChjdHguc2VsZWN0ZWRfc2spIHtcbitcdFx0XHRpZiAoY3R4LnNlbGVjdGVkX3NrLVx1MDAzZXNrX3JldXNlcG9ydCBcdTAwMjZcdTAwMjYgIWN0eC5ub19yZXVzZXBvcnQpXG4rXHRcdFx0XHRyZXQgPSAtRU9QTk9UU1VQUDtcbitcdFx0XHRlbHNlXG4rXHRcdFx0XHR1c2VyX2N0eC1cdTAwM2Vjb29raWUgPSBzb2NrX2dlbl9jb29raWUoY3R4LnNlbGVjdGVkX3NrKTtcbitcdFx0fVxuK1x0fVxuIFx0YnBmX3Rlc3RfdGltZXJfbGVhdmUoXHUwMDI2dCk7XG4gXG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRnb3RvIG91dDtcbiBcbi1cdHVzZXJfY3R4LVx1MDAzZWNvb2tpZSA9IDA7XG4tXHRpZiAoY3R4LnNlbGVjdGVkX3NrKSB7XG4tXHRcdGlmIChjdHguc2VsZWN0ZWRfc2stXHUwMDNlc2tfcmV1c2Vwb3J0IFx1MDAyNlx1MDAyNiAhY3R4Lm5vX3JldXNlcG9ydCkge1xuLVx0XHRcdHJldCA9IC1FT1BOT1RTVVBQO1xuLVx0XHRcdGdvdG8gb3V0O1xuLVx0XHR9XG4tXG4tXHRcdHVzZXJfY3R4LVx1MDAzZWNvb2tpZSA9IHNvY2tfZ2VuX2Nvb2tpZShjdHguc2VsZWN0ZWRfc2spO1xuLVx0fVxuLVxuIFx0cmV0ID0gYnBmX3Rlc3RfZmluaXNoKGthdHRyLCB1YXR0ciwgTlVMTCwgTlVMTCwgMCwgMCwgcmV0dmFsLCBkdXJhdGlvbik7XG4gXHRpZiAoIXJldClcbiBcdFx0cmV0ID0gYnBmX2N0eF9maW5pc2goa2F0dHIsIHVhdHRyLCB1c2VyX2N0eCwgc2l6ZW9mKCp1c2VyX2N0eCkpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTU6NTY6NDAuODc5MDUxMDE1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDAwMDI3ODA5NTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aGlua2luZyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBCUEYgVGVzdCBSdW5uZXIqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCB0byB3b3JrLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoaXMgY2hhbmdlLCBzbyBsZXQncyBzdGFydCBieSBkaWdnaW5nIGludG8gdGhlIGRpZmYuIEknbSBzcGVjaWZpY2FsbHkgaW50ZXJlc3RlZCBpbiBjaGFuZ2VzIG1hZGUgdG8gYG5ldC9icGYvdGVzdF9ydW4uY2AsIGVzcGVjaWFsbHkgd2l0aGluIHRoZSBgYnBmX3Byb2dfdGVzdF9ydW5fc2tfbG9va3VwYCBmdW5jdGlvbi4gSSByZW1lbWJlciB3b3JraW5nIHdpdGggdGhpcyBhcmVhIGJlZm9yZSwgc28gSSBoYXZlIGEgZ2VuZXJhbCBzZW5zZSBvZiB0aGUgdGVzdCBmcmFtZXdvcmsncyBzdHJ1Y3R1cmUuIFRvIGdldCBhIGNvbXByZWhlbnNpdmUgdmlldywgSSdsbCBuZWVkIHRoZSBzdXJyb3VuZGluZyBjb2RlLiBNeSBuZXh0IHN0ZXAgaXMgdG8gbG9jYXRlIGxpbmUgMTY1MCBpbiBgbmV0L2JwZi90ZXN0X3J1bi5jYCwgdGhhdCB3aWxsIGxldCBtZSBncmFzcCB0aGUgZnVuY3Rpb24ncyBmdWxsIGNvbnRleHQgYW5kIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoZSBtb2RpZmljYXRpb25zLiBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBgc2tfbG9va3VwYCBvcGVyYXRpb24gaXMgYmVpbmcgdGVzdGVkIHdpdGhpbiB0aGUgQlBGIGZyYW1ld29yayB0byBncmFzcCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSBjaGFuZ2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzg4LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNTo1NzoyMC44ODE4MzYzNjNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjI3MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2JwZi90ZXN0X3J1bi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE2MjAsXG4gIFwiTGluZUNvdW50XCI6IDcwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE2MjA6XFx0XFx0Y3R4LnNwb3J0ID0gdXNlcl9jdHgtXFx1MDAzZXJlbW90ZV9wb3J0O1xcbjE2MjE6XFx0XFxuMTYyMjpcXHRcXHRzd2l0Y2ggKGN0eC5mYW1pbHkpIHtcXG4xNjIzOlxcdFxcdGNhc2UgQUZfSU5FVDpcXG4xNjI0OlxcdFxcdFxcdGN0eC52NC5kYWRkciA9IChfX2ZvcmNlIF9fYmUzMil1c2VyX2N0eC1cXHUwMDNlbG9jYWxfaXA0O1xcbjE2MjU6XFx0XFx0XFx0Y3R4LnY0LnNhZGRyID0gKF9fZm9yY2UgX19iZTMyKXVzZXJfY3R4LVxcdTAwM2VyZW1vdGVfaXA0O1xcbjE2MjY6XFx0XFx0XFx0YnJlYWs7XFxuMTYyNzpcXHRcXG4xNjI4OlxcdCNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxcbjE2Mjk6XFx0XFx0Y2FzZSBBRl9JTkVUNjpcXG4xNjMwOlxcdFxcdFxcdGN0eC52Ni5kYWRkciA9IChzdHJ1Y3QgaW42X2FkZHIgKil1c2VyX2N0eC1cXHUwMDNlbG9jYWxfaXA2O1xcbjE2MzE6XFx0XFx0XFx0Y3R4LnY2LnNhZGRyID0gKHN0cnVjdCBpbjZfYWRkciAqKXVzZXJfY3R4LVxcdTAwM2VyZW1vdGVfaXA2O1xcbjE2MzI6XFx0XFx0XFx0YnJlYWs7XFxuMTYzMzpcXHQjZW5kaWZcXG4xNjM0OlxcdFxcbjE2MzU6XFx0XFx0ZGVmYXVsdDpcXG4xNjM2OlxcdFxcdFxcdHJldCA9IC1FQUZOT1NVUFBPUlQ7XFxuMTYzNzpcXHRcXHRcXHRnb3RvIG91dDtcXG4xNjM4OlxcdFxcdH1cXG4xNjM5OlxcdFxcbjE2NDA6XFx0XFx0cHJvZ3MgPSBicGZfcHJvZ19hcnJheV9hbGxvYygxLCBHRlBfS0VSTkVMKTtcXG4xNjQxOlxcdFxcdGlmICghcHJvZ3MpIHtcXG4xNjQyOlxcdFxcdFxcdHJldCA9IC1FTk9NRU07XFxuMTY0MzpcXHRcXHRcXHRnb3RvIG91dDtcXG4xNjQ0OlxcdFxcdH1cXG4xNjQ1OlxcdFxcbjE2NDY6XFx0XFx0cHJvZ3MtXFx1MDAzZWl0ZW1zWzBdLnByb2cgPSBwcm9nO1xcbjE2NDc6XFx0XFxuMTY0ODpcXHRcXHRicGZfdGVzdF90aW1lcl9lbnRlcihcXHUwMDI2dCk7XFxuMTY0OTpcXHRcXHRkbyB7XFxuMTY1MDpcXHRcXHRcXHRjdHguc2VsZWN0ZWRfc2sgPSBOVUxMO1xcbjE2NTE6XFx0XFx0XFx0cmV0dmFsID0gQlBGX1BST0dfU0tfTE9PS1VQX1JVTl9BUlJBWShwcm9ncywgY3R4LCBicGZfcHJvZ19ydW4pO1xcbjE2NTI6XFx0XFx0fSB3aGlsZSAoYnBmX3Rlc3RfdGltZXJfY29udGludWUoXFx1MDAyNnQsIDEsIHJlcGVhdCwgXFx1MDAyNnJldCwgXFx1MDAyNmR1cmF0aW9uKSk7XFxuMTY1MzpcXHRcXG4xNjU0OlxcdFxcdGlmIChyZXQgXFx1MDAzZT0gMCkge1xcbjE2NTU6XFx0XFx0XFx0dXNlcl9jdHgtXFx1MDAzZWNvb2tpZSA9IDA7XFxuMTY1NjpcXHRcXHRcXHRpZiAoY3R4LnNlbGVjdGVkX3NrKSB7XFxuMTY1NzpcXHRcXHRcXHRcXHRpZiAoY3R4LnNlbGVjdGVkX3NrLVxcdTAwM2Vza19yZXVzZXBvcnQgXFx1MDAyNlxcdTAwMjYgIWN0eC5ub19yZXVzZXBvcnQpXFxuMTY1ODpcXHRcXHRcXHRcXHRcXHRyZXQgPSAtRU9QTk9UU1VQUDtcXG4xNjU5OlxcdFxcdFxcdFxcdGVsc2VcXG4xNjYwOlxcdFxcdFxcdFxcdFxcdHVzZXJfY3R4LVxcdTAwM2Vjb29raWUgPSBzb2NrX2dlbl9jb29raWUoY3R4LnNlbGVjdGVkX3NrKTtcXG4xNjYxOlxcdFxcdFxcdH1cXG4xNjYyOlxcdFxcdH1cXG4xNjYzOlxcdFxcdGJwZl90ZXN0X3RpbWVyX2xlYXZlKFxcdTAwMjZ0KTtcXG4xNjY0OlxcdFxcbjE2NjU6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuMTY2NjpcXHRcXHRcXHRnb3RvIG91dDtcXG4xNjY3OlxcdFxcbjE2Njg6XFx0XFx0cmV0ID0gYnBmX3Rlc3RfZmluaXNoKGthdHRyLCB1YXR0ciwgTlVMTCwgTlVMTCwgMCwgMCwgcmV0dmFsLCBkdXJhdGlvbik7XFxuMTY2OTpcXHRcXHRpZiAoIXJldClcXG4xNjcwOlxcdFxcdFxcdHJldCA9IGJwZl9jdHhfZmluaXNoKGthdHRyLCB1YXR0ciwgdXNlcl9jdHgsIHNpemVvZigqdXNlcl9jdHgpKTtcXG4xNjcxOlxcdFxcbjE2NzI6XFx0b3V0OlxcbjE2NzM6XFx0XFx0YnBmX3Byb2dfYXJyYXlfZnJlZShwcm9ncyk7XFxuMTY3NDpcXHRcXHRrZnJlZSh1c2VyX2N0eCk7XFxuMTY3NTpcXHRcXHRyZXR1cm4gcmV0O1xcbjE2NzY6XFx0fVxcbjE2Nzc6XFx0XFxuMTY3ODpcXHRpbnQgYnBmX3Byb2dfdGVzdF9ydW5fc3lzY2FsbChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXFxuMTY3OTpcXHRcXHRcXHRcXHQgICAgICBjb25zdCB1bmlvbiBicGZfYXR0ciAqa2F0dHIsXFxuMTY4MDpcXHRcXHRcXHRcXHQgICAgICB1bmlvbiBicGZfYXR0ciBfX3VzZXIgKnVhdHRyKVxcbjE2ODE6XFx0e1xcbjE2ODI6XFx0XFx0dm9pZCBfX3VzZXIgKmN0eF9pbiA9IHU2NF90b191c2VyX3B0cihrYXR0ci1cXHUwMDNldGVzdC5jdHhfaW4pO1xcbjE2ODM6XFx0XFx0X191MzIgY3R4X3NpemVfaW4gPSBrYXR0ci1cXHUwMDNldGVzdC5jdHhfc2l6ZV9pbjtcXG4xNjg0OlxcdFxcdHZvaWQgKmN0eCA9IE5VTEw7XFxuMTY4NTpcXHRcXHR1MzIgcmV0dmFsO1xcbjE2ODY6XFx0XFx0aW50IGVyciA9IDA7XFxuMTY4NzpcXHRcXG4xNjg4OlxcdFxcdC8qIGRvZXNuJ3Qgc3VwcG9ydCBkYXRhX2luL291dCwgY3R4X291dCwgZHVyYXRpb24sIG9yIHJlcGVhdCBvciBmbGFncyAqL1xcbjE2ODk6XFx0XFx0aWYgKGthdHRyLVxcdTAwM2V0ZXN0LmRhdGFfaW4gfHwga2F0dHItXFx1MDAzZXRlc3QuZGF0YV9vdXQgfHxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTU6NTc6MjAuODgyMDAyMDYzWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzY5MDM5MDIxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gZGlzc2VjdGluZyB0aG9zZSBCUEYgdGltZXIgZnVuY3Rpb25zLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgQlBGIFRpbWVyIEVudHJ5IGFuZCBFeGl0IEZ1bmN0aW9ucyoqXG5cbkFscmlnaHQsIHNvIEknbSBjdXJpb3VzIGFib3V0IHRoZSBzcGVjaWZpYyBtZWNoYW5pY3Mgb2YgYGJwZl90ZXN0X3RpbWVyX2VudGVyYCBhbmQgYGJwZl90ZXN0X3RpbWVyX2xlYXZlYC4gSSd2ZSBzZWVuIHRoZXNlIGZ1bmN0aW9ucyB1c2VkIGluIHRoZSBjb250ZXh0IG9mIEJQRiB0ZXN0aW5nLCBhbmQgSSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlaXIgcm9sZSB3aXRoaW4gdGhlIGJyb2FkZXIgQlBGIGZyYW1ld29yay4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGNoZWNrIHRoZWlyIGltcGxlbWVudGF0aW9uIGRldGFpbHMuIFNwZWNpZmljYWxseSwgSSdtIGxvb2tpbmcgZm9yIHRoZSBkZWZpbml0aW9ucyBhbmQgdXNhZ2Ugb2YgdGhvc2UgZnVuY3Rpb25zLiBHaXZlbiB0aGUgbGlrZWx5IGFyZWEgb2YgZnVuY3Rpb25hbGl0eSwgSSB0aGluayB0aGV5IHdpbGwgbW9zdCBsaWtlbHkgYmUgcmVsYXRlZCB0byB0ZXN0IGhhcm5lc3Nlcywgd2hpY2ggc3VnZ2VzdHMgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IG15IHNlYXJjaCBpcyB3aXRoaW4gdGhlIGtlcm5lbCdzIHRlc3RpbmcgaW5mcmFzdHJ1Y3R1cmUsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIEJQRi1yZWxhdGVkIGZpbGVzLiBUaGVyZWZvcmUsIG15IGZpcnN0IHRob3VnaHQgaXMgdG8gY2hlY2sgYG5ldC9icGYvdGVzdF9ydW4uY2AuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGRldGFpbGVkIGltcGxlbWVudGF0aW9uIGFuZCBjb250ZXh0IEkgbmVlZC4gVGltZSB0byBnZXQgdG8gaXQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM4MzAsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE1OjU3OjI0LjU3MjM5NTY3NloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MzM5Mzg3NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfdGVzdF90aW1lcl9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2JwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2JwZi90ZXN0X3J1bi5jPTMxPXN0cnVjdCBicGZfdGVzdF90aW1lciB7XFxuLS1cXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMzUtXFxubmV0L2JwZi90ZXN0X3J1bi5jOjM2OnN0YXRpYyB2b2lkIGJwZl90ZXN0X3RpbWVyX2VudGVyKHN0cnVjdCBicGZfdGVzdF90aW1lciAqdClcXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMzctXFx0X19hY3F1aXJlcyhyY3UpXFxuLS1cXG5uZXQvYnBmL3Rlc3RfcnVuLmMtNDItXFxubmV0L2JwZi90ZXN0X3J1bi5jOjQzOnN0YXRpYyB2b2lkIGJwZl90ZXN0X3RpbWVyX2xlYXZlKHN0cnVjdCBicGZfdGVzdF90aW1lciAqdClcXG5uZXQvYnBmL3Rlc3RfcnVuLmMtNDQtXFx0X19yZWxlYXNlcyhyY3UpXFxuLS1cXG5uZXQvYnBmL3Rlc3RfcnVuLmMtNDktXFxubmV0L2JwZi90ZXN0X3J1bi5jOjUwOnN0YXRpYyBib29sIGJwZl90ZXN0X3RpbWVyX2NvbnRpbnVlKHN0cnVjdCBicGZfdGVzdF90aW1lciAqdCwgaW50IGl0ZXJhdGlvbnMsXFxubmV0L2JwZi90ZXN0X3J1bi5jLTUxLVxcdFxcdFxcdFxcdCAgICB1MzIgcmVwZWF0LCBpbnQgKmVyciwgdTMyICpkdXJhdGlvbilcXG4tLVxcbm5ldC9icGYvdGVzdF9ydW4uYy03Mi1cXHRcXHR0LVxcdTAwM2V0aW1lX3NwZW50ICs9IGt0aW1lX2dldF9ucygpIC0gdC1cXHUwMDNldGltZV9zdGFydDtcXG5uZXQvYnBmL3Rlc3RfcnVuLmM6NzM6XFx0XFx0YnBmX3Rlc3RfdGltZXJfbGVhdmUodCk7XFxubmV0L2JwZi90ZXN0X3J1bi5jLTc0LVxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbm5ldC9icGYvdGVzdF9ydW4uYzo3NTpcXHRcXHRicGZfdGVzdF90aW1lcl9lbnRlcih0KTtcXG5uZXQvYnBmL3Rlc3RfcnVuLmMtNzYtXFx0fVxcbi0tXFxubmV0L2JwZi90ZXN0X3J1bi5jPTM2MD1zdGF0aWMgaW50IGJwZl90ZXN0X3J1bl94ZHBfbGl2ZShzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHN0cnVjdCB4ZHBfYnVmZiAqY3R4LFxcbi0tXFxubmV0L2JwZi90ZXN0X3J1bi5jLTM3NC1cXG5uZXQvYnBmL3Rlc3RfcnVuLmM6Mzc1OlxcdGJwZl90ZXN0X3RpbWVyX2VudGVyKFxcdTAwMjZ0KTtcXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMzc2LVxcdGRvIHtcXG4tLVxcbm5ldC9icGYvdGVzdF9ydW4uYy0zODAtXFx0XFx0XFx0YnJlYWs7XFxubmV0L2JwZi90ZXN0X3J1bi5jOjM4MTpcXHR9IHdoaWxlIChicGZfdGVzdF90aW1lcl9jb250aW51ZShcXHUwMDI2dCwgeGRwLmZyYW1lX2NudCwgcmVwZWF0LCBcXHUwMDI2cmV0LCB0aW1lKSk7XFxubmV0L2JwZi90ZXN0X3J1bi5jOjM4MjpcXHRicGZfdGVzdF90aW1lcl9sZWF2ZShcXHUwMDI2dCk7XFxubmV0L2JwZi90ZXN0X3J1bi5jLTM4My1cXG4tLVxcbm5ldC9icGYvdGVzdF9ydW4uYz0zODg9c3RhdGljIGludCBicGZfdGVzdF9ydW4oc3RydWN0IGJwZl9wcm9nICpwcm9nLCB2b2lkICpjdHgsIHUzMiByZXBlYXQsXFxuLS1cXG5uZXQvYnBmL3Rlc3RfcnVuLmMtNDExLVxcbm5ldC9icGYvdGVzdF9ydW4uYzo0MTI6XFx0YnBmX3Rlc3RfdGltZXJfZW50ZXIoXFx1MDAyNnQpO1xcbm5ldC9icGYvdGVzdF9ydW4uYy00MTMtXFx0b2xkX2N0eCA9IGJwZl9zZXRfcnVuX2N0eChcXHUwMDI2cnVuX2N0eC5ydW5fY3R4KTtcXG4tLVxcbm5ldC9icGYvdGVzdF9ydW4uYy00MjUtXFx0XFx0bG9jYWxfYmhfZW5hYmxlKCk7XFxubmV0L2JwZi90ZXN0X3J1bi5jOjQyNjpcXHR9IHdoaWxlIChicGZfdGVzdF90aW1lcl9jb250aW51ZShcXHUwMDI2dCwgMSwgcmVwZWF0LCBcXHUwMDI2cmV0LCB0aW1lKSk7XFxubmV0L2JwZi90ZXN0X3J1bi5jLTQyNy1cXHRicGZfcmVzZXRfcnVuX2N0eChvbGRfY3R4KTtcXG5uZXQvYnBmL3Rlc3RfcnVuLmM6NDI4OlxcdGJwZl90ZXN0X3RpbWVyX2xlYXZlKFxcdTAwMjZ0KTtcXG5uZXQvYnBmL3Rlc3RfcnVuLmMtNDI5LVxcbi0tXFxubmV0L2JwZi90ZXN0X3J1bi5jPTE1MDk9aW50IGJwZl9wcm9nX3Rlc3RfcnVuX2Zsb3dfZGlzc2VjdG9yKHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcXG4tLVxcbm5ldC9icGYvdGVzdF9ydW4uYy0xNTU1LVxcbm5ldC9icGYvdGVzdF9ydW4uYzoxNTU2OlxcdGJwZl90ZXN0X3RpbWVyX2VudGVyKFxcdTAwMjZ0KTtcXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTU1Ny1cXHRkbyB7XFxuLS1cXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTU1OS1cXHRcXHRcXHRcXHRcXHQgIHNpemUsIGZsYWdzKTtcXG5uZXQvYnBmL3Rlc3RfcnVuLmM6MTU2MDpcXHR9IHdoaWxlIChicGZfdGVzdF90aW1lcl9jb250aW51ZShcXHUwMDI2dCwgMSwgcmVwZWF0LCBcXHUwMDI2cmV0LCBcXHUwMDI2ZHVyYXRpb24pKTtcXG5uZXQvYnBmL3Rlc3RfcnVuLmM6MTU2MTpcXHRicGZfdGVzdF90aW1lcl9sZWF2ZShcXHUwMDI2dCk7XFxubmV0L2JwZi90ZXN0X3J1bi5jLTE1NjItXFxuLS1cXG5uZXQvYnBmL3Rlc3RfcnVuLmM9MTU3OD1pbnQgYnBmX3Byb2dfdGVzdF9ydW5fc2tfbG9va3VwKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgY29uc3QgdW5pb24gYnBmX2F0dHIgKmthdHRyLFxcbi0tXFxubmV0L2JwZi90ZXN0X3J1bi5jLTE2NDctXFxubmV0L2JwZi90ZXN0X3J1bi5jOjE2NDg6XFx0YnBmX3Rlc3RfdGltZXJfZW50ZXIoXFx1MDAyNnQpO1xcbm5ldC9icGYvdGVzdF9ydW4uYy0xNjQ5LVxcdGRvIHtcXG4tLVxcbm5ldC9icGYvdGVzdF9ydW4uYy0xNjUxLVxcdFxcdHJldHZhbCA9IEJQRl9QUk9HX1NLX0xPT0tVUF9SVU5fQVJSQVkocHJvZ3MsIGN0eCwgYnBmX3Byb2dfcnVuKTtcXG5uZXQvYnBmL3Rlc3RfcnVuLmM6MTY1MjpcXHR9IHdoaWxlIChicGZfdGVzdF90aW1lcl9jb250aW51ZShcXHUwMDI2dCwgMSwgcmVwZWF0LCBcXHUwMDI2cmV0LCBcXHUwMDI2ZHVyYXRpb24pKTtcXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTY1My1cXG4tLVxcbm5ldC9icGYvdGVzdF9ydW4uYy0xNjYyLVxcdH1cXG5uZXQvYnBmL3Rlc3RfcnVuLmM6MTY2MzpcXHRicGZfdGVzdF90aW1lcl9sZWF2ZShcXHUwMDI2dCk7XFxubmV0L2JwZi90ZXN0X3J1bi5jLTE2NjQtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE1OjU3OjI0LjY0NTc5NDE5M1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjExNzgzOTMyODM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGdyYW51bGFyIG1lY2hhbmljcyBvZiB0aGVzZSBCUEYgdGltZXIgZnVuY3Rpb25zLiBTcGVjaWZpY2FsbHksIGBicGZfdGVzdF90aW1lcl9lbnRlcmAgYW5kIGBicGZfdGVzdF90aW1lcl9sZWF2ZWAuIEknbSBnb2luZyB0byBoZWFkIG92ZXIgdG8gdGhlIGBuZXQvYnBmL3Rlc3RfcnVuLmNgIGZpbGUgYW5kIHplcm8gaW4gb24gbGluZXMgMzAgdGhyb3VnaCA4MC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgY29yZSBsb2dpYyBhbmQgYW55IGNyaXRpY2FsIGludGVyYWN0aW9ucyB3aXRoaW4gdGhhdCBzZWdtZW50LiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB3aGF0J3MgaGFwcGVuaW5nIGF0IHRoaXMgbGV2ZWwgb2YgZGV0YWlsLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NTM4LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTU6NTc6MzYuNDI5NzI5MDUyWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA3MzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9icGYvdGVzdF9ydW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAzMDpcXHRcXG4gIDMxOlxcdHN0cnVjdCBicGZfdGVzdF90aW1lciB7XFxuICAzMjpcXHRcXHR1MzIgaTtcXG4gIDMzOlxcdFxcdHU2NCB0aW1lX3N0YXJ0LCB0aW1lX3NwZW50O1xcbiAgMzQ6XFx0fTtcXG4gIDM1OlxcdFxcbiAgMzY6XFx0c3RhdGljIHZvaWQgYnBmX3Rlc3RfdGltZXJfZW50ZXIoc3RydWN0IGJwZl90ZXN0X3RpbWVyICp0KVxcbiAgMzc6XFx0XFx0X19hY3F1aXJlcyhyY3UpXFxuICAzODpcXHR7XFxuICAzOTpcXHRcXHRyY3VfcmVhZF9sb2NrX2RvbnRfbWlncmF0ZSgpO1xcbiAgNDA6XFx0XFx0dC1cXHUwMDNldGltZV9zdGFydCA9IGt0aW1lX2dldF9ucygpO1xcbiAgNDE6XFx0fVxcbiAgNDI6XFx0XFxuICA0MzpcXHRzdGF0aWMgdm9pZCBicGZfdGVzdF90aW1lcl9sZWF2ZShzdHJ1Y3QgYnBmX3Rlc3RfdGltZXIgKnQpXFxuICA0NDpcXHRcXHRfX3JlbGVhc2VzKHJjdSlcXG4gIDQ1OlxcdHtcXG4gIDQ2OlxcdFxcdHQtXFx1MDAzZXRpbWVfc3RhcnQgPSAwO1xcbiAgNDc6XFx0XFx0cmN1X3JlYWRfdW5sb2NrX21pZ3JhdGUoKTtcXG4gIDQ4OlxcdH1cXG4gIDQ5OlxcdFxcbiAgNTA6XFx0c3RhdGljIGJvb2wgYnBmX3Rlc3RfdGltZXJfY29udGludWUoc3RydWN0IGJwZl90ZXN0X3RpbWVyICp0LCBpbnQgaXRlcmF0aW9ucyxcXG4gIDUxOlxcdFxcdFxcdFxcdFxcdCAgICB1MzIgcmVwZWF0LCBpbnQgKmVyciwgdTMyICpkdXJhdGlvbilcXG4gIDUyOlxcdFxcdF9fbXVzdF9ob2xkKHJjdSlcXG4gIDUzOlxcdHtcXG4gIDU0OlxcdFxcdHQtXFx1MDAzZWkgKz0gaXRlcmF0aW9ucztcXG4gIDU1OlxcdFxcdGlmICh0LVxcdTAwM2VpIFxcdTAwM2U9IHJlcGVhdCkge1xcbiAgNTY6XFx0XFx0XFx0LyogV2UncmUgZG9uZS4gKi9cXG4gIDU3OlxcdFxcdFxcdHQtXFx1MDAzZXRpbWVfc3BlbnQgKz0ga3RpbWVfZ2V0X25zKCkgLSB0LVxcdTAwM2V0aW1lX3N0YXJ0O1xcbiAgNTg6XFx0XFx0XFx0ZG9fZGl2KHQtXFx1MDAzZXRpbWVfc3BlbnQsIHQtXFx1MDAzZWkpO1xcbiAgNTk6XFx0XFx0XFx0KmR1cmF0aW9uID0gdC1cXHUwMDNldGltZV9zcGVudCBcXHUwMDNlIFUzMl9NQVggPyBVMzJfTUFYIDogKHUzMil0LVxcdTAwM2V0aW1lX3NwZW50O1xcbiAgNjA6XFx0XFx0XFx0KmVyciA9IDA7XFxuICA2MTpcXHRcXHRcXHRnb3RvIHJlc2V0O1xcbiAgNjI6XFx0XFx0fVxcbiAgNjM6XFx0XFxuICA2NDpcXHRcXHRpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHtcXG4gIDY1OlxcdFxcdFxcdC8qIER1cmluZyBpdGVyYXRpb246IHdlJ3ZlIGJlZW4gY2FuY2VsbGVkLCBhYm9ydC4gKi9cXG4gIDY2OlxcdFxcdFxcdCplcnIgPSAtRUlOVFI7XFxuICA2NzpcXHRcXHRcXHRnb3RvIHJlc2V0O1xcbiAgNjg6XFx0XFx0fVxcbiAgNjk6XFx0XFxuICA3MDpcXHRcXHRpZiAobmVlZF9yZXNjaGVkKCkpIHtcXG4gIDcxOlxcdFxcdFxcdC8qIER1cmluZyBpdGVyYXRpb246IHdlIG5lZWQgdG8gcmVzY2hlZHVsZSBiZXR3ZWVuIHJ1bnMuICovXFxuICA3MjpcXHRcXHRcXHR0LVxcdTAwM2V0aW1lX3NwZW50ICs9IGt0aW1lX2dldF9ucygpIC0gdC1cXHUwMDNldGltZV9zdGFydDtcXG4gIDczOlxcdFxcdFxcdGJwZl90ZXN0X3RpbWVyX2xlYXZlKHQpO1xcbiAgNzQ6XFx0XFx0XFx0Y29uZF9yZXNjaGVkKCk7XFxuICA3NTpcXHRcXHRcXHRicGZfdGVzdF90aW1lcl9lbnRlcih0KTtcXG4gIDc2OlxcdFxcdH1cXG4gIDc3OlxcdFxcbiAgNzg6XFx0XFx0LyogRG8gYW5vdGhlciByb3VuZC4gKi9cXG4gIDc5OlxcdFxcdHJldHVybiB0cnVlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNTo1NzozNi40Mjk4Mzc4NTJaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODMwNDIwMjc3MTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBCUEYgU29ja2V0IExvb2t1cCBUZXN0KipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYGJwZl9wcm9nX3Rlc3RfcnVuX3NrX2xvb2t1cGAgZnVuY3Rpb24uIFNlZW1zIGxpa2UgdGhlIGNvcmUgaXNzdWUgaGVyZSByZXZvbHZlcyBhcm91bmQgaG93IGBjdHguc2VsZWN0ZWRfc2tgIGlzIGhhbmRsZWQgaW4gdGhlIGNvbnRleHQgb2YgQlBGIHNvY2tldCBsb29rdXAgcHJvZ3JhbXMsIHBhcnRpY3VsYXJseSB3aGVuIHVzaW5nIGBicGZfc2tfYXNzaWduYC4gVGhlIHByb2dyYW0gc2V0cyBgY3R4LnNlbGVjdGVkX3NrYCwgdGhhdCdzIGZpbmUuIFRoZSBjcml0aWNhbCBwYXJ0IGlzIHRoYXQgdGhpcyBzb2NrZXQgaXMgdGhlbiBhY2Nlc3NlZCAqd2l0aGluKiBhbiBSQ1UgY3JpdGljYWwgc2VjdGlvbiwgc3BlY2lmaWNhbGx5IGJldHdlZW4gdGhlIGBicGZfdGVzdF90aW1lcl9lbnRlcmAgYW5kIGBicGZfdGVzdF90aW1lcl9sZWF2ZWAgY2FsbHMuIFRoaXMgaXMgd2hlcmUgdGhpbmdzIGdldCBpbnRlcmVzdGluZy5cblxuQmVmb3JlIHRoaXMgcGF0Y2gsIHRoZSBjb2RlIGNhbGxlZCBgYnBmX3Rlc3RfdGltZXJfbGVhdmUoXHUwMDI2dClgICppbW1lZGlhdGVseSogYWZ0ZXIgYSBsb29wLiBDcnVjaWFsbHksIHRoYXQgY2FsbCBoYXBwZW5zICpvdXRzaWRlKiB0aGUgUkNVIHJlYWQgbG9jay4gQWZ0ZXIgdGhlIGxvY2sgaXMgcmVsZWFzZWQsIHRoZSBjb2RlIHRoZW4gcHJvY2VlZHMgdG8gYWNjZXNzIG1lbWJlcnMgb2YgYGN0eC5zZWxlY3RlZF9za2AsIHNwZWNpZmljYWxseSBgc2tfcmV1c2Vwb3J0YCBhbmQgdXNlcyBgc29ja19nZW5fY29va2llKGN0eC5zZWxlY3RlZF9zaylgLiBOb3csIGlmIGBzZWxlY3RlZF9za2Agd2VyZSAqb25seSogcHJvdGVjdGVkIGJ5IFJDVSwgdGhpcyB3b3VsZCBiZSBhIHRleHRib29rIHVzZS1hZnRlci1mcmVlIG9yIFJDVSB2aW9sYXRpb24uIERlcmVmZXJlbmNpbmcgYSBzb2NrZXQgcG9pbnRlciBhZnRlciB0aGUgUkNVIHJlYWQgbG9jayBpcyBhIGJpZyBuby1ubyEgRXNzZW50aWFsbHksIHdlJ3JlIGFjY2Vzc2luZyBhIHBvdGVudGlhbGx5IGZyZWVkIG9yIHJlLXB1cnBvc2VkIHNvY2tldC5cblxuVGhlIGZpeCBpcyBxdWl0ZSBlbGVnYW50LiBCeSBtb3ZpbmcgYHVzZXJfY3R4LVx1MDAzZWNvb2tpZSA9IHNvY2tfZ2VuX2Nvb2tpZShjdHguc2VsZWN0ZWRfc2spYCBpbnNpZGUgdGhlIFJDVSBzZWN0aW9uIOKAkyByaWdodCBiZWZvcmUgdGhhdCBgYnBmX3Rlc3RfdGltZXJfbGVhdmUoXHUwMDI2dClgIGNhbGwg4oCTIHdlIGVuc3VyZSB0aGF0IGBjdHguc2VsZWN0ZWRfc2tgIGlzIHNhZmVseSBhY2Nlc3NlZCB3aGlsZSB3ZSdyZSBzdGlsbCBob2xkaW5nIHRoZSBSQ1UgcmVhZCBsb2NrLiBUaGlzIGVsaW1pbmF0ZXMgdGhlIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbiBhbmQgcHJvdGVjdHMgdGhlIHNvY2tldCBmcm9tIGJlaW5nIGZyZWVkIHdoaWxlIHdlJ3JlIHN0aWxsIHJlZmVyZW5jaW5nIGl0LiBJdCdzIGEgY2xhc3NpYyBleGFtcGxlIG9mIHByb3BlciBSQ1UgdXNhZ2U6IG1ha2Ugc3VyZSBhbGwgcmVmZXJlbmNlcyB0byB0aGUgZGF0YSBwcm90ZWN0ZWQgYnkgUkNVIGFyZSBkb25lIHVuZGVyIHRoZSByZWFkIGxvY2suXG5cbk5vdywgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgd2hlcmUgYGJwZl9wcm9nX3Rlc3RfcnVuX3NrX2xvb2t1cGAgaXMgYWN0dWFsbHkgYmVpbmcgY2FsbGVkLCBhbmQgd2hhdCBjb25maWd1cmF0aW9ucyBvciBzZXR1cHMgaXQgbWlnaHQgcmVxdWlyZSB0byB0cmlnZ2VyIHRoaXMgYmVoYXZpb3IuIFRpbWUgdG8gc2VhcmNoIGZvciB0aGF0IGluIGBrZXJuZWwvYnBmL2AgYW5kIGBuZXQvYnBmL2AuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6NjQ0MCwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE2OjAwOjM5LjQ3MTg2OVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ3NTI4MTIxNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfcHJvZ190ZXN0X3J1bl9za19sb29rdXBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9icGYuaD0zMTEyPWludCBicGZfcHJvZ190ZXN0X3J1bl9yYXdfdHAoc3RydWN0IGJwZl9wcm9nICpwcm9nLFxcbi0tXFxuaW5jbHVkZS9saW51eC9icGYuaC0zMTE0LVxcdFxcdFxcdCAgICAgdW5pb24gYnBmX2F0dHIgX191c2VyICp1YXR0cik7XFxuaW5jbHVkZS9saW51eC9icGYuaDozMTE1OmludCBicGZfcHJvZ190ZXN0X3J1bl9za19sb29rdXAoc3RydWN0IGJwZl9wcm9nICpwcm9nLFxcbmluY2x1ZGUvbGludXgvYnBmLmgtMzExNi1cXHRcXHRcXHRcXHRjb25zdCB1bmlvbiBicGZfYXR0ciAqa2F0dHIsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2JwZi5oPTM0NzQ9c3RhdGljIGlubGluZSBpbnQgYnBmX3Byb2dfdGVzdF9ydW5fZmxvd19kaXNzZWN0b3Ioc3RydWN0IGJwZl9wcm9nICpwcm9nLFxcbi0tXFxuaW5jbHVkZS9saW51eC9icGYuaC0zNDgwLVxcbmluY2x1ZGUvbGludXgvYnBmLmg6MzQ4MTpzdGF0aWMgaW5saW5lIGludCBicGZfcHJvZ190ZXN0X3J1bl9za19sb29rdXAoc3RydWN0IGJwZl9wcm9nICpwcm9nLFxcbmluY2x1ZGUvbGludXgvYnBmLmgtMzQ4Mi1cXHRcXHRcXHRcXHRcXHQgICAgICBjb25zdCB1bmlvbiBicGZfYXR0ciAqa2F0dHIsXFxuLS1cXG5uZXQvYnBmL3Rlc3RfcnVuLmM9MTUwOT1pbnQgYnBmX3Byb2dfdGVzdF9ydW5fZmxvd19kaXNzZWN0b3Ioc3RydWN0IGJwZl9wcm9nICpwcm9nLFxcbi0tXFxubmV0L2JwZi90ZXN0X3J1bi5jLTE1NzctXFxubmV0L2JwZi90ZXN0X3J1bi5jOjE1Nzg6aW50IGJwZl9wcm9nX3Rlc3RfcnVuX3NrX2xvb2t1cChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIGNvbnN0IHVuaW9uIGJwZl9hdHRyICprYXR0cixcXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTU3OS1cXHRcXHRcXHRcXHR1bmlvbiBicGZfYXR0ciBfX3VzZXIgKnVhdHRyKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9MTIxNzQ9Y29uc3Qgc3RydWN0IGJwZl9wcm9nX29wcyBza19sb29rdXBfcHJvZ19vcHMgPSB7XFxubmV0L2NvcmUvZmlsdGVyLmM6MTIxNzU6XFx0LnRlc3RfcnVuID0gYnBmX3Byb2dfdGVzdF9ydW5fc2tfbG9va3VwLFxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMTc2LX07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE2OjAwOjQxLjk0NzE1OTgzNloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMzgyODk3MTM2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgcXVlc3Rpb246XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgQnVpbGQgUHJvY2VzcyBmb3IgYG5ldC9icGYvdGVzdF9ydW4uY2AqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgYnVpbGQgcHJvY2VzcyBmb3IgYG5ldC9icGYvdGVzdF9ydW4uY2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHRyYWNlIHRoZSBjb21waWxhdGlvbiDigJMgZmlndXJpbmcgb3V0IHdoaWNoIE1ha2VmaWxlIGFjdHVhbGx5IG9yY2hlc3RyYXRlcyB0aGUgYnVpbGQuIFRoaXMgaXMgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGRlYnVnZ2luZyB0YXNrLCBidXQgdW5kZXJzdGFuZGluZyB3aGVyZSB0aGlzIGZpbGUgaXMgZ2V0dGluZyBjb21waWxlZCBmcm9tIGNhbiBvZnRlbiB1bmVhcnRoIGludGVyZXN0aW5nIGRlcGVuZGVuY3kgaXNzdWVzIGxhdGVyLiBJJ2xsIG5lZWQgdG8gZGlnIHRocm91Z2ggdGhlIGtlcm5lbCBzb3VyY2UncyBtYWtlZmlsZXMuIEl0J3MgbGlrZWx5IHRoYXQgYSBgTWFrZWZpbGVgIHNvbWV3aGVyZSBpbiB0aGUgYG5ldC9icGYvYCBkaXJlY3RvcnkgaXRzZWxmIGlzIGludm9sdmVkLCBvciBwZXJoYXBzIGFuIHVwcGVyLWxldmVsIG9uZS4gTGV0J3Mgc3RhcnQgd2l0aCBhIGBmaW5kYCBvciBhIHF1aWNrIGdyZXAgdG8gaWRlbnRpZnkgdGhlIHJlbGV2YW50IGBNYWtlZmlsZWBzLiBJIG1pZ2h0IG5lZWQgdG8gbG9vayBhdCBrZXJuZWwgY29uZmlnIG9wdGlvbnMgdG9vLCBqdXN0IHRvIGJlIHRob3JvdWdoLiBUaGVuLCBkZXBlbmRpbmcgb24gaG93IGNvbXBsZXggdGhlIGJ1aWxkIHN5c3RlbSBpcywgSSBtaWdodCBoYXZlIHRvIGFkZCBzb21lIGV4dHJhIGxvZ2dpbmcgdG8gdGhlIGNvbXBpbGF0aW9uIHByb2Nlc3MsIHRvIHdhdGNoIGhvdyBgdGVzdF9ydW4uY2AgZml0cyBpbnRvIHRoZSB3aG9sZSBwaWN0dXJlLiBJJ20gYXNzdW1pbmcgaXQncyBwYXJ0IG9mIGEgbW9kdWxlIG9yIG1heWJlIGEgc3BlY2lmaWMgdGVzdCBzdWl0ZSwgYW5kIHRoYXQgaW5mbyBpcyBsaWtlbHkgaW4gb25lIG9mIHRoZSByZWxldmFudCBNYWtlZmlsZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc4MTYsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNjowMDo1NS43NzYxMzM5MjJaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcwNDMyODg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRlc3RfcnVuXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9icGYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9icGYvTWFrZWZpbGUtMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5uZXQvYnBmL01ha2VmaWxlOjI6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKVxcdDo9IHRlc3RfcnVuLm9cXG5uZXQvYnBmL01ha2VmaWxlLTMtaWZlcSAoJChDT05GSUdfQlBGX0pJVCkseSlcXG4tLVxcbm5ldC9icGYvYnBmX2R1bW15X3N0cnVjdF9vcHMuYz04Mj1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9jdHhfYXJnX2F1eCAqZmluZF9jdHhfYXJnX2luZm8oc3RydWN0IGJwZl9wcm9nX2F1eCAqYXV4LCBpbnQgb2Zmc2V0KVxcbi0tXFxubmV0L2JwZi9icGZfZHVtbXlfc3RydWN0X29wcy5jLTk1LSAqL1xcbm5ldC9icGYvYnBmX2R1bW15X3N0cnVjdF9vcHMuYzo5NjpzdGF0aWMgaW50IGNoZWNrX3Rlc3RfcnVuX2FyZ3Moc3RydWN0IGJwZl9wcm9nICpwcm9nLCBzdHJ1Y3QgYnBmX2R1bW15X29wc190ZXN0X2FyZ3MgKmFyZ3MpXFxubmV0L2JwZi9icGZfZHVtbXlfc3RydWN0X29wcy5jLTk3LXtcXG4tLVxcbm5ldC9icGYvYnBmX2R1bW15X3N0cnVjdF9vcHMuYz0xMjc9ZXh0ZXJuIGNvbnN0IHN0cnVjdCBicGZfbGlua19vcHMgYnBmX3N0cnVjdF9vcHNfbGlua19sb3BzO1xcbm5ldC9icGYvYnBmX2R1bW15X3N0cnVjdF9vcHMuYy0xMjgtXFxubmV0L2JwZi9icGZfZHVtbXlfc3RydWN0X29wcy5jOjEyOTppbnQgYnBmX3N0cnVjdF9vcHNfdGVzdF9ydW4oc3RydWN0IGJwZl9wcm9nICpwcm9nLCBjb25zdCB1bmlvbiBicGZfYXR0ciAqa2F0dHIsXFxubmV0L2JwZi9icGZfZHVtbXlfc3RydWN0X29wcy5jLTEzMC1cXHRcXHRcXHQgICAgdW5pb24gYnBmX2F0dHIgX191c2VyICp1YXR0cilcXG4tLVxcbm5ldC9icGYvYnBmX2R1bW15X3N0cnVjdF9vcHMuYy0xNTYtXFxubmV0L2JwZi9icGZfZHVtbXlfc3RydWN0X29wcy5jOjE1NzpcXHRlcnIgPSBjaGVja190ZXN0X3J1bl9hcmdzKHByb2csIGFyZ3MpO1xcbm5ldC9icGYvYnBmX2R1bW15X3N0cnVjdF9vcHMuYy0xNTgtXFx0aWYgKGVycilcXG4tLVxcbm5ldC9icGYvdGVzdF9ydW4uYy0yOC0jZGVmaW5lIENSRUFURV9UUkFDRV9QT0lOVFNcXG5uZXQvYnBmL3Rlc3RfcnVuLmM6Mjk6I2luY2x1ZGUgXFx1MDAzY3RyYWNlL2V2ZW50cy9icGZfdGVzdF9ydW4uaFxcdTAwM2VcXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMzAtXFxuLS1cXG5uZXQvYnBmL3Rlc3RfcnVuLmM9MTAwPXN0cnVjdCB4ZHBfdGVzdF9kYXRhIHtcXG4tLVxcbm5ldC9icGYvdGVzdF9ydW4uYy0xMTgtXFxubmV0L2JwZi90ZXN0X3J1bi5jOjExOTpzdGF0aWMgdm9pZCB4ZHBfdGVzdF9ydW5faW5pdF9wYWdlKG5ldG1lbV9yZWYgbmV0bWVtLCB2b2lkICphcmcpXFxubmV0L2JwZi90ZXN0X3J1bi5jLTEyMC17XFxuLS1cXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTQ5LVxcbm5ldC9icGYvdGVzdF9ydW4uYzoxNTA6c3RhdGljIGludCB4ZHBfdGVzdF9ydW5fc2V0dXAoc3RydWN0IHhkcF90ZXN0X2RhdGEgKnhkcCwgc3RydWN0IHhkcF9idWZmICpvcmlnX2N0eClcXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTUxLXtcXG4tLVxcbm5ldC9icGYvdGVzdF9ydW4uYy0xNTgtXFx0XFx0Lm5pZCA9IE5VTUFfTk9fTk9ERSxcXG5uZXQvYnBmL3Rlc3RfcnVuLmM6MTU5OlxcdFxcdC5pbml0X2NhbGxiYWNrID0geGRwX3Rlc3RfcnVuX2luaXRfcGFnZSxcXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTYwLVxcdFxcdC5pbml0X2FyZyA9IHhkcCxcXG4tLVxcbm5ldC9icGYvdGVzdF9ydW4uYy0yMDMtXFxubmV0L2JwZi90ZXN0X3J1bi5jOjIwNDpzdGF0aWMgdm9pZCB4ZHBfdGVzdF9ydW5fdGVhcmRvd24oc3RydWN0IHhkcF90ZXN0X2RhdGEgKnhkcClcXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMjA1LXtcXG4tLVxcbm5ldC9icGYvdGVzdF9ydW4uYz0yNDE9c3RhdGljIGludCB4ZHBfcmVjdl9mcmFtZXMoc3RydWN0IHhkcF9mcmFtZSAqKmZyYW1lcywgaW50IG5mcmFtZXMsXFxuLS1cXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMjcyLVxcbm5ldC9icGYvdGVzdF9ydW4uYzoyNzM6c3RhdGljIGludCB4ZHBfdGVzdF9ydW5fYmF0Y2goc3RydWN0IHhkcF90ZXN0X2RhdGEgKnhkcCwgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxcbm5ldC9icGYvdGVzdF9ydW4uYy0yNzQtXFx0XFx0XFx0ICAgICAgdTMyIHJlcGVhdClcXG4tLVxcbm5ldC9icGYvdGVzdF9ydW4uYy0zNTktXFxubmV0L2JwZi90ZXN0X3J1bi5jOjM2MDpzdGF0aWMgaW50IGJwZl90ZXN0X3J1bl94ZHBfbGl2ZShzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHN0cnVjdCB4ZHBfYnVmZiAqY3R4LFxcbm5ldC9icGYvdGVzdF9ydW4uYy0zNjEtXFx0XFx0XFx0XFx0IHUzMiByZXBlYXQsIHUzMiBiYXRjaF9zaXplLCB1MzIgKnRpbWUpXFxuLS1cXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMzcwLVxcbm5ldC9icGYvdGVzdF9ydW4uYzozNzE6XFx0cmV0ID0geGRwX3Rlc3RfcnVuX3NldHVwKFxcdTAwMjZ4ZHAsIGN0eCk7XFxubmV0L2JwZi90ZXN0X3J1bi5jLTM3Mi1cXHRpZiAocmV0KVxcbi0tXFxubmV0L2JwZi90ZXN0X3J1bi5jLTM3Ny1cXHRcXHR4ZHAuZnJhbWVfY250ID0gMDtcXG5uZXQvYnBmL3Rlc3RfcnVuLmM6Mzc4OlxcdFxcdHJldCA9IHhkcF90ZXN0X3J1bl9iYXRjaChcXHUwMDI2eGRwLCBwcm9nLCByZXBlYXQgLSB0LmkpO1xcbm5ldC9icGYvdGVzdF9ydW4uYy0zNzktXFx0XFx0aWYgKHVubGlrZWx5KHJldCBcXHUwMDNjIDApKVxcbi0tXFxubmV0L2JwZi90ZXN0X3J1bi5jLTM4My1cXG5uZXQvYnBmL3Rlc3RfcnVuLmM6Mzg0OlxcdHhkcF90ZXN0X3J1bl90ZWFyZG93bihcXHUwMDI2eGRwKTtcXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMzg1LVxcdHJldHVybiByZXQ7XFxuLS1cXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMzg3LVxcbm5ldC9icGYvdGVzdF9ydW4uYzozODg6c3RhdGljIGludCBicGZfdGVzdF9ydW4oc3RydWN0IGJwZl9wcm9nICpwcm9nLCB2b2lkICpjdHgsIHUzMiByZXBlYXQsXFxubmV0L2JwZi90ZXN0X3J1bi5jLTM4OS1cXHRcXHRcXHR1MzIgKnJldHZhbCwgdTMyICp0aW1lLCBib29sIHhkcClcXG4tLVxcbm5ldC9icGYvdGVzdF9ydW4uYz02NjM9c3RhdGljIHZvaWQgKmJwZl90ZXN0X2luaXQoY29uc3QgdW5pb24gYnBmX2F0dHIgKmthdHRyLCB1MzIgdXNlcl9zaXplLFxcbi0tXFxubmV0L2JwZi90ZXN0X3J1bi5jLTY4NC1cXG5uZXQvYnBmL3Rlc3RfcnVuLmM6Njg1OmludCBicGZfcHJvZ190ZXN0X3J1bl90cmFjaW5nKHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcXG5uZXQvYnBmL3Rlc3RfcnVuLmMtNjg2LVxcdFxcdFxcdCAgICAgIGNvbnN0IHVuaW9uIGJwZl9hdHRyICprYXR0cixcXG4tLVxcbm5ldC9icGYvdGVzdF9ydW4uYy03MzgtXFxubmV0L2JwZi90ZXN0X3J1bi5jOjczOTpzdHJ1Y3QgYnBmX3Jhd190cF90ZXN0X3J1bl9pbmZvIHtcXG5uZXQvYnBmL3Rlc3RfcnVuLmMtNzQwLVxcdHN0cnVjdCBicGZfcHJvZyAqcHJvZztcXG4tLVxcbm5ldC9icGYvdGVzdF9ydW4uYz03NDU9c3RhdGljIHZvaWRcXG5uZXQvYnBmL3Rlc3RfcnVuLmM6NzQ2Ol9fYnBmX3Byb2dfdGVzdF9ydW5fcmF3X3RwKHZvaWQgKmRhdGEpXFxubmV0L2JwZi90ZXN0X3J1bi5jLTc0Ny17XFxubmV0L2JwZi90ZXN0X3J1bi5jOjc0ODpcXHRzdHJ1Y3QgYnBmX3Jhd190cF90ZXN0X3J1bl9pbmZvICppbmZvID0gZGF0YTtcXG5uZXQvYnBmL3Rlc3RfcnVuLmMtNzQ5LVxcdHN0cnVjdCBzcmN1X2N0ciBfX3BlcmNwdSAqc2NwID0gTlVMTDtcXG4tLVxcbm5ldC9icGYvdGVzdF9ydW4uYy03ODEtXFxubmV0L2JwZi90ZXN0X3J1bi5jOjc4MjppbnQgYnBmX3Byb2dfdGVzdF9ydW5fcmF3X3RwKHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcXG5uZXQvYnBmL3Rlc3RfcnVuLmMtNzgzLVxcdFxcdFxcdCAgICAgY29uc3QgdW5pb24gYnBmX2F0dHIgKmthdHRyLFxcbi0tXFxubmV0L2JwZi90ZXN0X3J1bi5jLTc4Ny1cXHRfX3UzMiBjdHhfc2l6ZV9pbiA9IGthdHRyLVxcdTAwM2V0ZXN0LmN0eF9zaXplX2luO1xcbm5ldC9icGYvdGVzdF9ydW4uYzo3ODg6XFx0c3RydWN0IGJwZl9yYXdfdHBfdGVzdF9ydW5faW5mbyBpbmZvO1xcbm5ldC9icGYvdGVzdF9ydW4uYy03ODktXFx0aW50IGNwdSA9IGthdHRyLVxcdTAwM2V0ZXN0LmNwdSwgZXJyID0gMDtcXG4tLVxcbm5ldC9icGYvdGVzdF9ydW4uYy04MjMtXFx0aWYgKHByb2ctXFx1MDAzZXNsZWVwYWJsZSkge1xcbm5ldC9icGYvdGVzdF9ydW4uYzo4MjQ6XFx0XFx0X19icGZfcHJvZ190ZXN0X3J1bl9yYXdfdHAoXFx1MDAyNmluZm8pO1xcbm5ldC9icGYvdGVzdF9ydW4uYy04MjUtXFx0fSBlbHNlIHtcXG4tLVxcbm5ldC9icGYvdGVzdF9ydW4uYy04MjgtXFx0XFx0ICAgIGNwdSA9PSBjdXJyZW50X2NwdSkge1xcbm5ldC9icGYvdGVzdF9ydW4uYzo4Mjk6XFx0XFx0XFx0X19icGZfcHJvZ190ZXN0X3J1bl9yYXdfdHAoXFx1MDAyNmluZm8pO1xcbm5ldC9icGYvdGVzdF9ydW4uYy04MzAtXFx0XFx0fSBlbHNlIGlmIChjcHUgXFx1MDAzZT0gbnJfY3B1X2lkcyB8fCAhY3B1X29ubGluZShjcHUpKSB7XFxuLS1cXG5uZXQvYnBmL3Rlc3RfcnVuLmMtODM5LVxcdFxcdFxcdGVyciA9IHNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZShjcHUsXFxubmV0L2JwZi90ZXN0X3J1bi5jOjg0MDpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgX19icGZfcHJvZ190ZXN0X3J1bl9yYXdfdHAsXFxubmV0L2JwZi90ZXN0X3J1bi5jLTg0MS1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgXFx1MDAyNmluZm8sIDEpO1xcbi0tXFxubmV0L2JwZi90ZXN0X3J1bi5jPTEwMjk9c3RhdGljIHN0cnVjdCBwcm90byBicGZfZHVtbXlfcHJvdG8gPSB7XFxuLS1cXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTAzNC1cXG5uZXQvYnBmL3Rlc3RfcnVuLmM6MTAzNTppbnQgYnBmX3Byb2dfdGVzdF9ydW5fc2tiKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgY29uc3QgdW5pb24gYnBmX2F0dHIgKmthdHRyLFxcbm5ldC9icGYvdGVzdF9ydW4uYy0xMDM2LVxcdFxcdFxcdCAgdW5pb24gYnBmX2F0dHIgX191c2VyICp1YXR0cilcXG4tLVxcbm5ldC9icGYvdGVzdF9ydW4uYy0xMDg3LVxcdFxcdGlmIChjdHgtXFx1MDAzZWRhdGFfZW5kKSB7XFxubmV0L2JwZi90ZXN0X3J1bi5jOjEwODg6XFx0XFx0XFx0LyogTm9uLWxpbmVhciBMV1QgdGVzdF9ydW4gaXMgdW5zdXBwb3J0ZWQgZm9yIG5vdy4gKi9cXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTA4OS1cXHRcXHRcXHRpZiAoaXNfbHd0KSB7XFxuLS1cXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTIyNC1cXG5uZXQvYnBmL3Rlc3RfcnVuLmM6MTIyNTpcXHRyZXQgPSBicGZfdGVzdF9ydW4ocHJvZywgc2tiLCByZXBlYXQsIFxcdTAwMjZyZXR2YWwsIFxcdTAwMjZkdXJhdGlvbiwgZmFsc2UpO1xcbm5ldC9icGYvdGVzdF9ydW4uYy0xMjI2LVxcdGlmIChyZXQpXFxuLS1cXG5uZXQvYnBmL3Rlc3RfcnVuLmM9MTMyMD1zdGF0aWMgdm9pZCB4ZHBfY29udmVydF9idWZmX3RvX21kKHN0cnVjdCB4ZHBfYnVmZiAqeGRwLCBzdHJ1Y3QgeGRwX21kICp4ZHBfbWQpXFxuLS1cXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTMzMS1cXG5uZXQvYnBmL3Rlc3RfcnVuLmM6MTMzMjppbnQgYnBmX3Byb2dfdGVzdF9ydW5feGRwKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgY29uc3QgdW5pb24gYnBmX2F0dHIgKmthdHRyLFxcbm5ldC9icGYvdGVzdF9ydW4uYy0xMzMzLVxcdFxcdFxcdCAgdW5pb24gYnBmX2F0dHIgX191c2VyICp1YXR0cilcXG4tLVxcbm5ldC9icGYvdGVzdF9ydW4uYy0xNDYyLVxcdGlmIChkb19saXZlKVxcbm5ldC9icGYvdGVzdF9ydW4uYzoxNDYzOlxcdFxcdHJldCA9IGJwZl90ZXN0X3J1bl94ZHBfbGl2ZShwcm9nLCBcXHUwMDI2eGRwLCByZXBlYXQsIGJhdGNoX3NpemUsIFxcdTAwMjZkdXJhdGlvbik7XFxubmV0L2JwZi90ZXN0X3J1bi5jLTE0NjQtXFx0ZWxzZVxcbm5ldC9icGYvdGVzdF9ydW4uYzoxNDY1OlxcdFxcdHJldCA9IGJwZl90ZXN0X3J1bihwcm9nLCBcXHUwMDI2eGRwLCByZXBlYXQsIFxcdTAwMjZyZXR2YWwsIFxcdTAwMjZkdXJhdGlvbiwgdHJ1ZSk7XFxubmV0L2JwZi90ZXN0X3J1bi5jLTE0NjYtb3V0X3B1dF9kZXY6XFxuLS1cXG5uZXQvYnBmL3Rlc3RfcnVuLmM9MTQ5ND1zdGF0aWMgaW50IHZlcmlmeV91c2VyX2JwZl9mbG93X2tleXMoc3RydWN0IGJwZl9mbG93X2tleXMgKmN0eClcXG4tLVxcbm5ldC9icGYvdGVzdF9ydW4uYy0xNTA4LVxcbm5ldC9icGYvdGVzdF9ydW4uYzoxNTA5OmludCBicGZfcHJvZ190ZXN0X3J1bl9mbG93X2Rpc3NlY3RvcihzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXFxubmV0L2JwZi90ZXN0X3J1bi5jLTE1MTAtXFx0XFx0XFx0XFx0ICAgICBjb25zdCB1bmlvbiBicGZfYXR0ciAqa2F0dHIsXFxuLS1cXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTU3Ny1cXG5uZXQvYnBmL3Rlc3RfcnVuLmM6MTU3ODppbnQgYnBmX3Byb2dfdGVzdF9ydW5fc2tfbG9va3VwKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgY29uc3QgdW5pb24gYnBmX2F0dHIgKmthdHRyLFxcbm5ldC9icGYvdGVzdF9ydW4uYy0xNTc5LVxcdFxcdFxcdFxcdHVuaW9uIGJwZl9hdHRyIF9fdXNlciAqdWF0dHIpXFxuLS1cXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTY3Ny1cXG5uZXQvYnBmL3Rlc3RfcnVuLmM6MTY3ODppbnQgYnBmX3Byb2dfdGVzdF9ydW5fc3lzY2FsbChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXFxubmV0L2JwZi90ZXN0X3J1bi5jLTE2NzktXFx0XFx0XFx0ICAgICAgY29uc3QgdW5pb24gYnBmX2F0dHIgKmthdHRyLFxcbi0tXFxubmV0L2JwZi90ZXN0X3J1bi5jPTE3NjQ9c3RhdGljIF9fYmUxNiBuZnByb3RvX2V0aChpbnQgbmZwcm90bylcXG4tLVxcbm5ldC9icGYvdGVzdF9ydW4uYy0xNzc1LVxcbm5ldC9icGYvdGVzdF9ydW4uYzoxNzc2OmludCBicGZfcHJvZ190ZXN0X3J1bl9uZihzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXFxubmV0L2JwZi90ZXN0X3J1bi5jLTE3NzctXFx0XFx0XFx0IGNvbnN0IHVuaW9uIGJwZl9hdHRyICprYXR0cixcXG4tLVxcbm5ldC9icGYvdGVzdF9ydW4uYy0xODYzLVxcbm5ldC9icGYvdGVzdF9ydW4uYzoxODY0OlxcdHJldCA9IGJwZl90ZXN0X3J1bihwcm9nLCBcXHUwMDI2Y3R4LCByZXBlYXQsIFxcdTAwMjZyZXR2YWwsIFxcdTAwMjZkdXJhdGlvbiwgZmFsc2UpO1xcbm5ldC9icGYvdGVzdF9ydW4uYy0xODY1LVxcdGlmIChyZXQpXFxuLS1cXG5uZXQvYnBmL3Rlc3RfcnVuLmM9MTg4Nj1CVEZfSUQoZnVuYywgYnBmX2tmdW5jX2NhbGxfbWVtYl9yZWxlYXNlX2R0b3IpXFxubmV0L2JwZi90ZXN0X3J1bi5jLTE4ODctXFxubmV0L2JwZi90ZXN0X3J1bi5jOjE4ODg6c3RhdGljIGludCBfX2luaXQgYnBmX3Byb2dfdGVzdF9ydW5faW5pdCh2b2lkKVxcbm5ldC9icGYvdGVzdF9ydW4uYy0xODg5LXtcXG4tLVxcbm5ldC9icGYvdGVzdF9ydW4uYy0xOTA5LX1cXG5uZXQvYnBmL3Rlc3RfcnVuLmM6MTkxMDpsYXRlX2luaXRjYWxsKGJwZl9wcm9nX3Rlc3RfcnVuX2luaXQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNjowMDo1NS44NDY1NzIwNDlaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjk5ODkzMTYwNTE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgdGhlIENvbmZpZ3VyYXRpb24gZm9yIGBicGZfcHJvZ190ZXN0X3J1bl9za19sb29rdXBgKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucyB0byBnZXQgYGJwZl9wcm9nX3Rlc3RfcnVuX3NrX2xvb2t1cGAgd29ya2luZy4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGl2ZSBpbnRvIHRoZSBrZXJuZWwgYnVpbGQgc3lzdGVtIGFuZCBzZWUgd2hhdCdzIGNvbnRyb2xsaW5nIGl0cyBpbmNsdXNpb24uIExldCdzIHN0YXJ0IGJ5IGNoZWNraW5nIGBuZXQvYnBmL01ha2VmaWxlYCDigJMgdGhhdCdzIHVzdWFsbHkgd2hlcmUgdGhlc2UgdGhpbmdzIGFyZSBkZWZpbmVkLiBBbmQsIG9mIGNvdXJzZSwgSSBzaG91bGQgYWxzbyBsb29rIGF0IHRoZSByZWxldmFudCBLY29uZmlnIGZpbGVzLiBMaWtlbHkgY2FuZGlkYXRlcyBhcmUgYGtlcm5lbC9icGYvS2NvbmZpZ2Agb3IgZXZlbiBgbmV0L0tjb25maWdgLCB0aG91Z2ggaXQgY291bGQgYmUgdHVja2VkIGF3YXkgZWxzZXdoZXJlLlxuXG5SaWdodCwgYG5ldC9icGYvTWFrZWZpbGVgLi4uIEFoYSEgVGhlcmUgaXQgaXM6IGBvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpIDo9IHRlc3RfcnVuLm9gLiBTbywgdGhlIHByZXNlbmNlIG9mIGB0ZXN0X3J1bi5vYCwgd2hpY2ggcHJlc3VtYWJseSBjb250YWlucyB0aGlzIHRlc3QgZnVuY3Rpb24sIGlzIGRlcGVuZGVudCBvbiBgQ09ORklHX0JQRl9TWVNDQUxMYC4gTm93LCB3aGVyZSBpcyAqdGhhdCogZGVmaW5lZD8gSSBuZWVkIHRvIGZpbmQgd2hlcmUgYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgc2V0LiBHaXZlbiBpdCdzIGEgQlBGLXJlbGF0ZWQgc3lzY2FsbCwgYGluaXQvS2NvbmZpZ2Agb3IgZXZlbiBga2VybmVsL2JwZi9LY29uZmlnYCBhcmUgdGhlIG1vc3QgbG9naWNhbCBwbGFjZXMgdG8gbG9vayBmb3IgaXRzIGRlZmluaXRpb24uIFRpbWUgdG8gY2hlY2sgdGhvc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNjM1LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE2OjA1OjU1LjczOTczNTgyN1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzQ5MDg0NzI1LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlBGX1NZU0NBTExcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5pdC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE2OjA1OjU2LjA4ODgzMDI1MloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2MTAwNzQzMzE4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipGaW5kaW5nIHRoZSBgY29uZmlnIEJQRl9TWVNDQUxMYCBpbiB0aGUgS2VybmVsKipcblxuT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGBCUEZfU1lTQ0FMTGAgd2l0aGluIHRoZSBrZXJuZWwgc291cmNlIGNvZGUuIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGludm9sdmVzIGEgZmV3IHN0cmF0ZWdpZXMsIGRlcGVuZGluZyBvbiBob3cgaW4tZGVwdGggSSBuZWVkIHRvIGJlLlxuXG5GaXJzdCwgYSBxdWljayBhbmQgZGlydHkgYXBwcm9hY2g6IEknZCBwcm9iYWJseSBzdGFydCB3aXRoIGEgYGdyZXBgIG9yIGBhY2tgIChvciB3aGF0ZXZlciBzZWFyY2ggdG9vbCBJIHByZWZlcikgZGlyZWN0bHkgaW4gdGhlIGtlcm5lbCBzb3VyY2UgdHJlZS4gU29tZXRoaW5nIGxpa2UgYGdyZXAgLXIgXCJDT05GSUdfQlBGX1NZU0NBTExcIiAvcGF0aC90by9rZXJuZWwvc291cmNlYCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIFRoaXMgc2hvdWxkIHNob3cgbWUgYWxsIHRoZSBwbGFjZXMgd2hlcmUgdGhpcyBjb25maWd1cmF0aW9uIHN5bWJvbCBpcyB1c2VkLlxuXG5HaXZlbiBteSBsZXZlbCBvZiBleHBlcnRpc2UsIEkgd291bGQgdGhlbiByZWZpbmUgbXkgc2VhcmNoIHVzaW5nIHRvb2xzIGxpa2UgYGtjb25maWdgIG9yIHRoZSBrZXJuZWwgYnVpbGQgc3lzdGVtIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIEtjb25maWcgZmlsZSBmb3IgdGhhdCBvcHRpb24gaXMgc28gSSBjYW4gdW5kZXJzdGFuZCB0aGUgY29udGV4dDogd2hhdCBvdGhlciBvcHRpb25zIGRvZXMgaXQgZGVwZW5kIG9uPyBXaGF0IHBsYXRmb3JtIGlzIGl0IGZvcj9cblxuRnJvbSB0aGVyZSwgaWYgSSBuZWVkIG1vcmUgY29udGV4dCwgSSB3b3VsZCBsb29rIGZvciB0aGUgcmVsYXRlZCBLY29uZmlnIGZpbGUuIFRoaXMgd291bGQgZ2l2ZSBtZSB0aGUgZGVwZW5kZW5jaWVzIGFuZCBoZWxwIG1lIHBpbnBvaW50IHdoZXJlIHRoZSBvcHRpb24gaXMgYWN0dWFsbHkgZGVmaW5lZCBhbmQgdXNlZC4gSSB3b3VsZCBwcm9iYWJseSBmb2N1cyBvbiBgS2NvbmZpZ2AgZmlsZXMgdW5kZXIgdGhlIHJlbGV2YW50IHN1YmRpcmVjdG9yaWVzIChlLmcuLCBgbmV0L2AsIGBrZXJuZWwvYCwgYGFyY2gvKi9gKSBhbmQgbG9vayBmb3IgZGVwZW5kZW5jaWVzLCBkZWZhdWx0IHZhbHVlcywgYW5kIGFueSBkb2N1bWVudGF0aW9uIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3ltYm9sLiBUaGlzIHdpbGwgaGVscCBtZSB0byB1bmRlcnN0YW5kIHRoZSAqd2h5KiBvZiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb24uXG5cblVsdGltYXRlbHksIEkgd2FudCB0byB1bmRlcnN0YW5kIGl0cyBpbXBhY3QgYW5kIHJlbGF0ZWQgaW1wbGljYXRpb25zLiBJJ2QgY29uc2lkZXIgY3Jvc3MtcmVmZXJlbmNpbmcgdGhpcyBpbmZvcm1hdGlvbiB3aXRoIGtlcm5lbCBkb2N1bWVudGF0aW9uLCBtYWlsaW5nIGxpc3RzLCBhbmQgbWF5YmUgZXZlbiBzb3VyY2UgY29kZSBjb21tZW50cyB0byBnZXQgYSBjb21wcmVoZW5zaXZlIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMDc1LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTY6MDY6NTcuMDk2MjY1OTE3WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTU0OTU1MTI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCUEZfU1lTQ0FMTFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL0tjb25maWc9MjU9bWVudSBcXFwiQlBGIHN1YnN5c3RlbVxcXCJcXG5rZXJuZWwvYnBmL0tjb25maWctMjYtXFxua2VybmVsL2JwZi9LY29uZmlnOjI3OmNvbmZpZyBCUEZfU1lTQ0FMTFxcbmtlcm5lbC9icGYvS2NvbmZpZy0yOC1cXHRib29sIFxcXCJFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE2OjA2OjU5LjA1MTIyNjA4NVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1ODQ2ODQ1Mzc0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipFeGFtaW5pbmcgQlBGIEtlcm5lbCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgZm9yIHNvbWUgQlBGLXJlbGF0ZWQga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gTXkgaW5zdGluY3QgdGVsbHMgbWUgdGhhdCB0aGUgYGtlcm5lbC9icGYvS2NvbmZpZ2AgZmlsZSBpcyB0aGUgcGxhY2UgdG8gc3RhcnQsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAyNS4gVGhhdCBzZWN0aW9uIGlzIHVzdWFsbHkgd2hlcmUgdGhleSBkZWZpbmUgdGhlIG1haW4gY29udHJvbHMuIExldCdzIHNlZSBpZiB0aGlzIGh1bmNoIGlzIGNvcnJlY3QsIG9yIGlmIHRoZXJlJ3MgYSBtb3JlIHNwZWNpZmljIEtjb25maWcgZmlsZSBlbHNld2hlcmUuIEl0J3Mgb2Z0ZW4gaGVscGZ1bCB0byBxdWlja2x5IHNjYW4gdGhlIGRlcGVuZGVuY2llcyBkZWZpbmVkIHRvIGdldCBhIHNlbnNlIG9mIHdoYXQgb3RoZXIgZmVhdHVyZXMgbmVlZCB0byBiZSBlbmFibGVkIGJlZm9yZSBJIGNhbiBldmVuIGJlZ2luIHRvIHVzZSB0aGlzLiBJJ2xsIGZvY3VzIG9uIHRoZSBwcmUtcmVxdWlzaXRlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI1NjAsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNjowNzo1Ny41MTk2ODMyNDRaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjY2OTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDIwOlxcdCMgVXNlZCBieSBhcmNocyB0byB0ZWxsIHRoYXQgdGhleSB3YW50IHRoZSBCUEYgSklUIGNvbXBpbGVyIGVuYWJsZWQgYnlcXG4gIDIxOlxcdCMgZGVmYXVsdCBmb3Iga2VybmVscyB0aGF0IHdlcmUgY29tcGlsZWQgd2l0aCBCUEYgSklUIHN1cHBvcnQuXFxuICAyMjpcXHRjb25maWcgQVJDSF9XQU5UX0RFRkFVTFRfQlBGX0pJVFxcbiAgMjM6XFx0XFx0Ym9vbFxcbiAgMjQ6XFx0XFxuICAyNTpcXHRtZW51IFxcXCJCUEYgc3Vic3lzdGVtXFxcIlxcbiAgMjY6XFx0XFxuICAyNzpcXHRjb25maWcgQlBGX1NZU0NBTExcXG4gIDI4OlxcdFxcdGJvb2wgXFxcIkVuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFxcXCJcXG4gIDI5OlxcdFxcdHNlbGVjdCBCUEZcXG4gIDMwOlxcdFxcdHNlbGVjdCBJUlFfV09SS1xcbiAgMzE6XFx0XFx0c2VsZWN0IE5FRURfVEFTS1NfUkNVXFxuICAzMjpcXHRcXHRzZWxlY3QgVEFTS1NfVFJBQ0VfUkNVXFxuICAzMzpcXHRcXHRzZWxlY3QgQklOQVJZX1BSSU5URlxcbiAgMzQ6XFx0XFx0c2VsZWN0IE5FVF9TT0NLX01TRyBpZiBORVRcXG4gIDM1OlxcdFxcdHNlbGVjdCBORVRfWEdSRVNTIGlmIE5FVFxcbiAgMzY6XFx0XFx0c2VsZWN0IFBBR0VfUE9PTCBpZiBORVRcXG4gIDM3OlxcdFxcdGRlZmF1bHQgblxcbiAgMzg6XFx0XFx0aGVscFxcbiAgMzk6XFx0XFx0ICBFbmFibGUgdGhlIGJwZigpIHN5c3RlbSBjYWxsIHRoYXQgYWxsb3dzIHRvIG1hbmlwdWxhdGUgQlBGIHByb2dyYW1zXFxuICA0MDpcXHRcXHQgIGFuZCBtYXBzIHZpYSBmaWxlIGRlc2NyaXB0b3JzLlxcbiAgNDE6XFx0XFxuICA0MjpcXHRjb25maWcgQlBGX0pJVFxcbiAgNDM6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIEJQRiBKdXN0IEluIFRpbWUgY29tcGlsZXJcXFwiXFxuICA0NDpcXHRcXHRkZXBlbmRzIG9uIEJQRlxcbiAgNDU6XFx0XFx0ZGVwZW5kcyBvbiBIQVZFX0NCUEZfSklUIHx8IEhBVkVfRUJQRl9KSVRcXG4gIDQ2OlxcdFxcdHNlbGVjdCBFWEVDTUVNXFxuICA0NzpcXHRcXHRoZWxwXFxuICA0ODpcXHRcXHQgIEJQRiBwcm9ncmFtcyBhcmUgbm9ybWFsbHkgaGFuZGxlZCBieSBhIEJQRiBpbnRlcnByZXRlci4gVGhpcyBvcHRpb25cXG4gIDQ5OlxcdFxcdCAgYWxsb3dzIHRoZSBrZXJuZWwgdG8gZ2VuZXJhdGUgbmF0aXZlIGNvZGUgd2hlbiBhIHByb2dyYW0gaXMgbG9hZGVkXFxuICA1MDpcXHRcXHQgIGludG8gdGhlIGtlcm5lbC4gVGhpcyB3aWxsIHNpZ25pZmljYW50bHkgc3BlZWQtdXAgcHJvY2Vzc2luZyBvZiBCUEZcXG4gIDUxOlxcdFxcdCAgcHJvZ3JhbXMuXFxuICA1MjpcXHRcXG4gIDUzOlxcdFxcdCAgTm90ZSwgYW4gYWRtaW4gc2hvdWxkIGVuYWJsZSB0aGlzIGZlYXR1cmUgY2hhbmdpbmc6XFxuICA1NDpcXHRcXHQgIC9wcm9jL3N5cy9uZXQvY29yZS9icGZfaml0X2VuYWJsZVxcbiAgNTU6XFx0XFx0ICAvcHJvYy9zeXMvbmV0L2NvcmUvYnBmX2ppdF9oYXJkZW4gICAob3B0aW9uYWwpXFxuICA1NjpcXHRcXHQgIC9wcm9jL3N5cy9uZXQvY29yZS9icGZfaml0X2thbGxzeW1zIChvcHRpb25hbClcXG4gIDU3OlxcdFxcbiAgNTg6XFx0Y29uZmlnIEJQRl9KSVRfQUxXQVlTX09OXFxuICA1OTpcXHRcXHRib29sIFxcXCJQZXJtYW5lbnRseSBlbmFibGUgQlBGIEpJVCBhbmQgcmVtb3ZlIEJQRiBpbnRlcnByZXRlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTY6MDc6NTcuNTE5NzUzNTI0WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQzNDU2NzQyOTA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBhbiBleHBlcnQgaW4gbXkgZmllbGQ6XG5cbioqSW52ZXN0aWdhdGluZyBhIERlcGVuZGVuY3kgaW4gdGhlIEJ1aWxkIFN5c3RlbSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBuZXQvYnBmL3Rlc3RfcnVuLmNgIGFuZCBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgaXQgcmVsaWVzIG9uIGBDT05GSUdfTkVUYC4gTXkgZmlyc3Qgc3RlcCBpcyB0byBkaXZlIGludG8gdGhlIGJ1aWxkIHN5c3RlbSDigJMgc3BlY2lmaWNhbGx5LCB0aGUgYG5ldC9NYWtlZmlsZWAuIEkgd2FudCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYG5ldC9icGYvYCBkaXJlY3RvcnkgaXRzZWxmIGlzIGJ1aWx0LCBiZWNhdXNlIHRoYXQncyBsaWtlbHkgd2hlcmUgdGhlIGRlcGVuZGVuY3kgaW5mb3JtYXRpb24gd2lsbCByZXNpZGUuIEknbSB0aGlua2luZywgYnkgZXhhbWluaW5nIHRoZSBydWxlcyBmb3IgdGhlIGBuZXQvYnBmL2AgZGlyZWN0b3J5LCBJIHNob3VsZCBiZSBhYmxlIHRvIHRyYWNlIGhvdyBgdGVzdF9ydW4uY2AgaXMgY29tcGlsZWQgYW5kIGxpbmtlZC4gVGhhdCBzaG91bGQgcmV2ZWFsIHdoZXRoZXIgYENPTkZJR19ORVRgIGlzIGEgcmVxdWlyZWQgY29uZmlndXJhdGlvbiBvcHRpb24gZm9yIHRoaXMgc3BlY2lmaWMgcGllY2Ugb2YgY29kZS4gSSdtIGV4cGVjdGluZyB0byBmaW5kIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGJhc2VkIG9uIHNvbWUgS2NvbmZpZyBzZXR0aW5nIGluIHRoZSBNYWtlZmlsZSBvciBhIHNpbWlsYXIgbWVjaGFuaXNtLiBJdCdzIHRpbWUgdG8gZGlnIGluIGFuZCBzZWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMzQ3LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNjowODo0MC45NzY1MDA3NloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzEyMzMyODQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L01ha2VmaWxlPTE0PW9iai0kKENPTkZJR19MTEMpXFx0XFx0Kz0gbGxjL1xcbm5ldC9NYWtlZmlsZToxNTpvYmoteVxcdFxcdFxcdFxcdCs9IGV0aGVybmV0LyA4MDIvIHNjaGVkLyBuZXRsaW5rLyBicGYvIGV0aHRvb2wvXFxubmV0L01ha2VmaWxlLTE2LW9iai0kKENPTkZJR19ORVRGSUxURVIpXFx0XFx0Kz0gbmV0ZmlsdGVyL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNjowODo0MS4yODg4Mzk4MDdaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODk2NTc4MDkzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBMaW5lIG9mIElucXVpcnk6IEJQRiBhbmQgc2tfbG9va3VwKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byBob3cgYHNrX2xvb2t1cGAgZnVuY3Rpb25hbGl0eSBpbnRlcmFjdHMgd2l0aCBCUEYgaW4gdGhlIGtlcm5lbC4gTXkgaW5pdGlhbCB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgYG5ldC9gIGlzIGNvbXBpbGVkIGlmIGBDT05GSUdfTkVUPXlgLCB3aGljaCBpcyB0aGUgYmFzZSBjb25kaXRpb24uIEkgdGhlbiBzZWUgaW4gYG5ldC9icGYvTWFrZWZpbGVgIHRoZSBsaW5lOiBgb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSA6PSB0ZXN0X3J1bi5vYCwgd2hpY2ggaXMgZXhwZWN0ZWQuIE5vdywgSSBrbm93IGBza19sb29rdXBgJ3MgcHJvZ3JhbSBvcGVyYXRpb25zIGFyZSBkZWZpbmVkIHdpdGhpbiBgbmV0L2NvcmUvZmlsdGVyLmNgLiBTcGVjaWZpY2FsbHksIEkgYW0gaW50ZXJlc3RlZCBpbiB0aGlzIGxpbmU6IGBjb25zdCBzdHJ1Y3QgYnBmX3Byb2dfb3BzIHNrX2xvb2t1cF9wcm9nX29wcyA9IHsgLnRlc3RfcnVuID0gYnBmX3Byb2dfdGVzdF9ydW5fc2tfbG9va3VwLCB9O2AuIE15IG5leHQgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gZGV0ZXJtaW5lIGlmIGFueSBvdGhlciBjb25maWd1cmF0aW9ucywgbGlrZSBgQ09ORklHX0lORVRgIG9yIGBDT05GSUdfSVBWNmAsIG1pZ2h0IGJlIGluZmx1ZW5jaW5nIHRoaXMgc3BlY2lmaWMgcGF0aCBvciBmdW5jdGlvbmFsaXR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzLiBUaGVyZWZvcmUsIEknbSBnb2luZyB0byBjYXJlZnVsbHkgcmUtZXhhbWluZSBgbmV0L2NvcmUvZmlsdGVyLmNgLCBwYXJ0aWN1bGFybHkgYXJvdW5kIHRoZSBkZWZpbml0aW9uIGFuZCB1c2FnZSBvZiBgc2tfbG9va3VwX3Byb2dfb3BzYCB0byBmdWxseSBncmFzcCBpdHMgaW50ZWdyYXRpb24gYW5kIGFueSBwb3RlbnRpYWwgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYXNwZWN0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM3MDcsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTY6MDg6NTAuMjU0NjI0MzI1WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTM2OTUwOTI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNrX2xvb2t1cF9wcm9nX29wc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9maWx0ZXIuYz0xMjA3Nz1zdGF0aWMgdTMyIHNrX2xvb2t1cF9jb252ZXJ0X2N0eF9hY2Nlc3MoZW51bSBicGZfYWNjZXNzX3R5cGUgdHlwZSxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMTczLVxcbm5ldC9jb3JlL2ZpbHRlci5jOjEyMTc0OmNvbnN0IHN0cnVjdCBicGZfcHJvZ19vcHMgc2tfbG9va3VwX3Byb2dfb3BzID0ge1xcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMTc1LVxcdC50ZXN0X3J1biA9IGJwZl9wcm9nX3Rlc3RfcnVuX3NrX2xvb2t1cCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTY6MDg6NTEuNzkxNTgyMDVaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzY3MTM0MjYzODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBQYWNrZXQgRmlsdGVyaW5nIEtlcm5lbCBDb2RlKipcblxuT2theSwgdGltZSB0byBnZXQgdG8gdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgc3BlY2lmaWNzIG9mIGhvdyB0aGlzIHBhY2tldCBmaWx0ZXJpbmcgbWVjaGFuaXNtIHdvcmtzIGluIHRoZSBrZXJuZWwuIEknbSB0aGlua2luZyBJJ2xsIHN0YXJ0IGJ5IHRha2luZyBhIGxvb2sgYXQgYG5ldC9jb3JlL2ZpbHRlci5jYC4gVGhhdCdzIHVzdWFsbHkgdGhlIHBsYWNlIHRvIHN0YXJ0LiBOb3csIGxldCdzIHNlZSwgYmFzZWQgb24gbXkgcHJldmlvdXMgYW5hbHlzaXMgSSBiZWxpZXZlIHRoZSByZWxldmFudCBjb2RlIGlzIGFyb3VuZCBsaW5lIDEyMTcwLiBJJ2xsIGZvY3VzIG15IGF0dGVudGlvbiBvbiB0aGF0IHNlY3Rpb24gYW5kIHNlZSBpZiBJIGNhbiBwaW5wb2ludCB0aGUgcmVsZXZhbnQgbG9naWMgZm9yIHRoaXMgcGFydGljdWxhciBpc3N1ZS4gSG9wZWZ1bGx5LCB0aGF0IHdpbGwgcmVmcmVzaCBteSBtZW1vcnkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0Mjc0LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTY6MDk6MjguNTA1MDExOTdaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTk4ODEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL2ZpbHRlci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyMTY1LFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMjE2NTpcXHRcXHRcXHQqaW5zbisrID0gQlBGX0xEWF9NRU0oQlBGX1csIHNpLVxcdTAwM2Vkc3RfcmVnLCBzaS1cXHUwMDNlc3JjX3JlZyxcXG4xMjE2NjpcXHRcXHRcXHRcXHRcXHQgICAgICBicGZfdGFyZ2V0X29mZihzdHJ1Y3QgYnBmX3NrX2xvb2t1cF9rZXJuLFxcbjEyMTY3OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgaW5ncmVzc19pZmluZGV4LCA0LCB0YXJnZXRfc2l6ZSkpO1xcbjEyMTY4OlxcdFxcdFxcdGJyZWFrO1xcbjEyMTY5OlxcdFxcdH1cXG4xMjE3MDpcXHRcXG4xMjE3MTpcXHRcXHRyZXR1cm4gaW5zbiAtIGluc25fYnVmO1xcbjEyMTcyOlxcdH1cXG4xMjE3MzpcXHRcXG4xMjE3NDpcXHRjb25zdCBzdHJ1Y3QgYnBmX3Byb2dfb3BzIHNrX2xvb2t1cF9wcm9nX29wcyA9IHtcXG4xMjE3NTpcXHRcXHQudGVzdF9ydW4gPSBicGZfcHJvZ190ZXN0X3J1bl9za19sb29rdXAsXFxuMTIxNzY6XFx0fTtcXG4xMjE3NzpcXHRcXG4xMjE3ODpcXHRjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX29wcyBza19sb29rdXBfdmVyaWZpZXJfb3BzID0ge1xcbjEyMTc5OlxcdFxcdC5nZXRfZnVuY19wcm90b1xcdFxcdD0gc2tfbG9va3VwX2Z1bmNfcHJvdG8sXFxuMTIxODA6XFx0XFx0LmlzX3ZhbGlkX2FjY2Vzc1xcdD0gc2tfbG9va3VwX2lzX3ZhbGlkX2FjY2VzcyxcXG4xMjE4MTpcXHRcXHQuY29udmVydF9jdHhfYWNjZXNzXFx0PSBza19sb29rdXBfY29udmVydF9jdHhfYWNjZXNzLFxcbjEyMTgyOlxcdH07XFxuMTIxODM6XFx0XFxuMTIxODQ6XFx0I2VuZGlmIC8qIENPTkZJR19JTkVUICovXFxuMTIxODU6XFx0XFxuMTIxODY6XFx0REVGSU5FX0JQRl9ESVNQQVRDSEVSKHhkcClcXG4xMjE4NzpcXHRcXG4xMjE4ODpcXHR2b2lkIGJwZl9wcm9nX2NoYW5nZV94ZHAoc3RydWN0IGJwZl9wcm9nICpwcmV2X3Byb2csIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4xMjE4OTpcXHR7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE2OjA5OjI4LjUwNTYxMjY0WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjExMTY3MzA1ODQxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIHRoZSBgQ09ORklHX0lORVRgIEd1YXJkKipcblxuT2theSwgc28gSSd2ZSBzcG90dGVkIHNvbWV0aGluZyBpbnRlcmVzdGluZyBpbiB0aGUgY29kZSwgcmlnaHQgYXJvdW5kIGxpbmUgMTIxODQg4oCTIHRoYXQgYCNlbmRpZiAvKiBDT05GSUdfSU5FVCAqL2AgZGlyZWN0aXZlLiBJbW1lZGlhdGVseSwgbXkgZXhwZXJ0IGJyYWluIGtpY2tzIGluLiBUaGUgZmFjdCB0aGF0IGBza19sb29rdXBfcHJvZ19vcHNgIGlzIGd1YXJkZWQgYnkgYENPTkZJR19JTkVUYCBpcyB0aGUga2V5IHRha2Vhd2F5LiBJdCBtZWFucyB0aGUgYXZhaWxhYmlsaXR5IGFuZCBmdW5jdGlvbiBvZiB0aGlzIGVsZW1lbnQgYXJlIGRlcGVuZGVudCBvbiB0aGF0IGNvbmZpZ3VyYXRpb24gb3B0aW9uLlxuXG5Ob3csIG15IG5leHQgdGhvdWdodCBpcywgd2hlcmUgZG9lcyBgQ09ORklHX0lORVRgIGNvbWUgaW50byBwbGF5IGJlZm9yZSB0aGF0IGAjZW5kaWZgPyBUbyB1bmRlcnN0YW5kIHRoZSBmdWxsIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uLCBJIG5lZWQgdG8gdHJhY2UgYmFjayBhbmQgcGlucG9pbnQgZXhhY3RseSB3aGVyZSBgQ09ORklHX0lORVRgIGlzIGRlZmluZWQgb3IgZXZhbHVhdGVkLiBUaGlzIGNvbnRleHQgaXMgY3J1Y2lhbCB0byBncmFzcGluZyB0aGUgc2l0dWF0aW9ucyB3aGVyZSBgc2tfbG9va3VwX3Byb2dfb3BzYCBpcyBhY3R1YWxseSBhY3RpdmUuIEknbGwgbmVlZCB0byBmb2xsb3cgdGhlIGNvZGUncyBsb2dpYyB0byBmaWd1cmUgb3V0IHRoZSBzY29wZSBhbmQgdGhlIGNvbmRpdGlvbnMgdGhhdCBkZXRlcm1pbmUgd2hldGhlciB0aGlzIHNlY3Rpb24gb2YgY29kZSBpcyB1bHRpbWF0ZWx5IGluY2x1ZGVkIGluIHRoZSBrZXJuZWwgYnVpbGQuIExldCdzIGRpZyBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ5MTgsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE2OjExOjIwLjE3ODY3NDU0NloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzg1NzQ0NjQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIiNpZmRlZiBDT05GSUdfSU5FVHwjaWYgSVNfRU5BQkxFRFxcXFwoQ09ORklHX0lORVRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvZmlsdGVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvZmlsdGVyLmM9MjMxMz1zdGF0aWMgaW50IF9fYnBmX3JlZGlyZWN0X25laWdoX3Y2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0yMzIwLVxcbm5ldC9jb3JlL2ZpbHRlci5jOjIzMjE6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lORVQpXFxubmV0L2NvcmUvZmlsdGVyLmMtMjMyMi1zdGF0aWMgaW50IGJwZl9vdXRfbmVpZ2hfdjQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9NjIwMz1CUEZfQ0FMTF8zKGJwZl9iaW5kLCBzdHJ1Y3QgYnBmX3NvY2tfYWRkcl9rZXJuICosIGN0eCwgc3RydWN0IHNvY2thZGRyICosIGFkZHIsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy02MjA1LXtcXG5uZXQvY29yZS9maWx0ZXIuYzo2MjA2OiNpZmRlZiBDT05GSUdfSU5FVFxcbm5ldC9jb3JlL2ZpbHRlci5jLTYyMDctXFx0c3RydWN0IHNvY2sgKnNrID0gY3R4LVxcdTAwM2VzaztcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTYyODg9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tiX2dldF94ZnJtX3N0YXRlX3Byb3RvID0ge1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNjI5OS1cXG5uZXQvY29yZS9maWx0ZXIuYzo2MzAwOiNpZiBJU19FTkFCTEVEKENPTkZJR19JTkVUKSB8fCBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxcbm5ldC9jb3JlL2ZpbHRlci5jLTYzMDEtc3RhdGljIGludCBicGZfZmliX3NldF9md2RfcGFyYW1zKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz02MzMwPXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqYnBmX2ZpYl92bGFuX2lucHV0X2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNjM0OS1cXG5uZXQvY29yZS9maWx0ZXIuYzo2MzUwOiNpZiBJU19FTkFCTEVEKENPTkZJR19JTkVUKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTYzNTEtc3RhdGljIGludCBicGZfaXB2NF9maWJfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGJwZl9maWJfbG9va3VwICpwYXJhbXMsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz02NjcyPUJQRl9DQUxMXzQoYnBmX3hkcF9maWJfbG9va3VwLCBzdHJ1Y3QgeGRwX2J1ZmYgKiwgY3R4LFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNjY4MS1cXHRzd2l0Y2ggKHBhcmFtcy1cXHUwMDNlZmFtaWx5KSB7XFxubmV0L2NvcmUvZmlsdGVyLmM6NjY4MjojaWYgSVNfRU5BQkxFRChDT05GSUdfSU5FVClcXG5uZXQvY29yZS9maWx0ZXIuYy02NjgzLVxcdGNhc2UgQUZfSU5FVDpcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTY3MDY9QlBGX0NBTExfNChicGZfc2tiX2ZpYl9sb29rdXAsIHN0cnVjdCBza19idWZmICosIHNrYixcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTY3MjUtXFx0c3dpdGNoIChwYXJhbXMtXFx1MDAzZWZhbWlseSkge1xcbm5ldC9jb3JlL2ZpbHRlci5jOjY3MjY6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lORVQpXFxubmV0L2NvcmUvZmlsdGVyLmMtNjcyNy1cXHRjYXNlIEFGX0lORVQ6XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz03MTU3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2x3dF9zZWc2X2FkanVzdF9zcmhfcHJvdG8gPSB7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy03MTY2LVxcbm5ldC9jb3JlL2ZpbHRlci5jOjcxNjc6I2lmZGVmIENPTkZJR19JTkVUXFxubmV0L2NvcmUvZmlsdGVyLmMtNzE2OC1zdGF0aWMgc3RydWN0IHNvY2sgKnNrX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBicGZfc29ja190dXBsZSAqdHVwbGUsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz04NDY0PXNvY2tfYWRkcl9mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtODQ4Ni1cXHRcXHRyZXR1cm4gXFx1MDAyNmJwZl9ldmVudF9vdXRwdXRfZGF0YV9wcm90bztcXG5uZXQvY29yZS9maWx0ZXIuYzo4NDg3OiNpZmRlZiBDT05GSUdfSU5FVFxcbm5ldC9jb3JlL2ZpbHRlci5jLTg0ODgtXFx0Y2FzZSBCUEZfRlVOQ19za19sb29rdXBfdGNwOlxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9ODU3Mz1jZ19za2JfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTg1OTktI2VuZGlmXFxubmV0L2NvcmUvZmlsdGVyLmM6ODYwMDojaWZkZWYgQ09ORklHX0lORVRcXG5uZXQvY29yZS9maWx0ZXIuYy04NjAxLVxcdGNhc2UgQlBGX0ZVTkNfc2tfbG9va3VwX3RjcDpcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTg2MjI9dGNfY2xzX2FjdF9mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtODcxOC0jZW5kaWZcXG5uZXQvY29yZS9maWx0ZXIuYzo4NzE5OiNpZmRlZiBDT05GSUdfSU5FVFxcbm5ldC9jb3JlL2ZpbHRlci5jLTg3MjAtXFx0Y2FzZSBCUEZfRlVOQ19za19sb29rdXBfdGNwOlxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9ODc1OT14ZHBfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTg3ODctXFx0XFx0cmV0dXJuIFxcdTAwMjZicGZfeGRwX2NoZWNrX210dV9wcm90bztcXG5uZXQvY29yZS9maWx0ZXIuYzo4Nzg4OiNpZmRlZiBDT05GSUdfSU5FVFxcbm5ldC9jb3JlL2ZpbHRlci5jLTg3ODktXFx0Y2FzZSBCUEZfRlVOQ19za19sb29rdXBfdWRwOlxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9ODgzND1zb2NrX29wc19mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtODg2Mi1cXHRcXHRyZXR1cm4gXFx1MDAyNmJwZl9nZXRfbmV0bnNfY29va2llX3NvY2tfb3BzX3Byb3RvO1xcbm5ldC9jb3JlL2ZpbHRlci5jOjg4NjM6I2lmZGVmIENPTkZJR19JTkVUXFxubmV0L2NvcmUvZmlsdGVyLmMtODg2NC1cXHRjYXNlIEJQRl9GVU5DX2xvYWRfaGRyX29wdDpcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTg5MTY9c2tfc2tiX2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy04OTQwLVxcdFxcdHJldHVybiBcXHUwMDI2YnBmX3NrYl9ldmVudF9vdXRwdXRfcHJvdG87XFxubmV0L2NvcmUvZmlsdGVyLmM6ODk0MTojaWZkZWYgQ09ORklHX0lORVRcXG5uZXQvY29yZS9maWx0ZXIuYy04OTQyLVxcdGNhc2UgQlBGX0ZVTkNfc2tfbG9va3VwX3RjcDpcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTExNjU2PWludCBza19nZXRfZmlsdGVyKHN0cnVjdCBzb2NrICpzaywgc29ja3B0cl90IG9wdHZhbCwgdW5zaWduZWQgaW50IGxlbilcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTExNjk4LVxcbm5ldC9jb3JlL2ZpbHRlci5jOjExNjk5OiNpZmRlZiBDT05GSUdfSU5FVFxcbm5ldC9jb3JlL2ZpbHRlci5jLTExNzAwLXN0YXRpYyB2b2lkIGJwZl9pbml0X3JldXNlcG9ydF9rZXJuKHN0cnVjdCBza19yZXVzZXBvcnRfa2VybiAqcmV1c2Vfa2VybixcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTEyMjM1PUJQRl9DQUxMXzEoYnBmX3NrY190b190Y3BfdGltZXdhaXRfc29jaywgc3RydWN0IHNvY2sgKiwgc2spXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMjI0Mi1cXG5uZXQvY29yZS9maWx0ZXIuYzoxMjI0MzojaWZkZWYgQ09ORklHX0lORVRcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjI0NC1cXHRpZiAoc2sgXFx1MDAyNlxcdTAwMjYgc2stXFx1MDAzZXNrX3Byb3QgPT0gXFx1MDAyNnRjcF9wcm90IFxcdTAwMjZcXHUwMDI2IHNrLVxcdTAwM2Vza19zdGF0ZSA9PSBUQ1BfVElNRV9XQUlUKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9MTIyNjQ9QlBGX0NBTExfMShicGZfc2tjX3RvX3RjcF9yZXF1ZXN0X3NvY2ssIHN0cnVjdCBzb2NrICosIHNrKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMjY1LXtcXG5uZXQvY29yZS9maWx0ZXIuYzoxMjI2NjojaWZkZWYgQ09ORklHX0lORVRcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjI2Ny1cXHRpZiAoc2sgXFx1MDAyNlxcdTAwMjYgc2stXFx1MDAzZXNrX3Byb3QgPT0gXFx1MDAyNnRjcF9wcm90IFxcdTAwMjZcXHUwMDI2IHNrLVxcdTAwM2Vza19zdGF0ZSA9PSBUQ1BfTkVXX1NZTl9SRUNWKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9MTI3MzQ9X19icGZfa2Z1bmMgaW50IGJwZl9pY21wX3NlbmQoc3RydWN0IF9fc2tfYnVmZiAqc2tiX2N0eCwgaW50IHR5cGUsIGludCBjb2RlKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTI3NDctXFx0c3dpdGNoIChza2ItXFx1MDAzZXByb3RvY29sKSB7XFxubmV0L2NvcmUvZmlsdGVyLmM6MTI3NDg6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lORVQpXFxubmV0L2NvcmUvZmlsdGVyLmMtMTI3NDktXFx0Y2FzZSBodG9ucyhFVEhfUF9JUCk6IHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTY6MTE6MjAuNTY0NDIzNDdaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDg0MDgzMDkzOTc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgQlBGIFRlc3RpbmcgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYGJwZl9wcm9nX3Rlc3RfcnVuYCBpbnRlcmFjdHMgd2l0aCBgYnBmX3Byb2dfdGVzdF9ydW5fc2tfbG9va3VwYC4gTXkgZ3V0IHRlbGxzIG1lIHRoYXQgYGJwZl9wcm9nX3Rlc3RfcnVuYCBpcyB0aGUgZ2VuZXJhbCBlbnRyeSBwb2ludCBmb3IgcnVubmluZyBCUEYgcHJvZ3JhbXMgaW4gYSB0ZXN0IGNvbnRleHQsIGFuZCB0aGF0IGBicGZfcHJvZ190ZXN0X3J1bl9za19sb29rdXBgIGlzIGxpa2VseSBhIHNwZWNpYWxpemVkIGZ1bmN0aW9uIGZvciB0ZXN0aW5nIHByb2dyYW1zIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIHNvY2tldCBsb29rdXBzIG9yIGludGVyYWN0aW9ucyB3aXRoIHRoZSBuZXR3b3JrIHN0YWNrLiBJdCdzIGEgY2xhc3NpYyBkaXNwYXRjaCBwYXR0ZXJuLCBsaWtlbHkgdXNpbmcgc29tZSBraW5kIG9mIGludGVybmFsIHN3aXRjaCBvciBmdW5jdGlvbiBwb2ludGVyIHRhYmxlLlxuXG5UaGVyZWZvcmUsIGxldCBtZSBuYXZpZ2F0ZSB0byBga2VybmVsL2JwZi9zeXNjYWxsLmNgIGFuZCBkaWcgaW50byB0aGUgc291cmNlLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHdoZXJlIGBicGZfcHJvZ190ZXN0X3J1bmAgaXMgZGVmaW5lZCBhbmQgaG93IGl0IGNhbGxzIG91dCB0byBvdGhlciBmdW5jdGlvbnMuIEkgZXhwZWN0IHRvIGZpbmQgc29tZSBsb2dpYyB0aGF0IGRldGVybWluZXMgKndoaWNoKiBzcGVjaWZpYyBgYnBmX3Byb2dfdGVzdF9ydW5fKmAgZnVuY3Rpb24gdG8gY2FsbCwgYmFzZWQgb24gdGhlIHR5cGUgb2YgQlBGIHByb2dyYW0gb3IgdGhlIGFyZ3VtZW50cyBwYXNzZWQgdG8gdGhlIHN5c3RlbSBjYWxsLiBUaGlzIGlzIHByb2JhYmx5IGEgcG9pbnRlciB0byB0aGUgcmlnaHQgZnVuY3Rpb25hbGl0eSwgb3IgcGVyaGFwcyBhbiBlbnVtLiBJdCdzIGEgY29tbW9uIHBhdHRlcm4gdG8ga2VlcCB0aGUgZ2VuZXJhbCB0ZXN0IGZ1bmN0aW9uYWxpdHkgc2VwYXJhdGUgYW5kIGhhbmRsZSB0aGUgc3BlY2lmaWNzIGluIGRlZGljYXRlZCByb3V0aW5lcy4gVGhpcyBpcyBob3cgdGhleSBrZWVwIHRoaW5ncyBjbGVhbi4gTXkgaG9wZSBpcyB0byBzZWUgdGhlIGV4YWN0IGRlY2lzaW9uLW1ha2luZyBwcm9jZXNzIGZvciB0aGUgZGlzcGF0Y2g7IHRoZSBkYXRhIHN0cnVjdHVyZXMgdGhhdCBpbmZsdWVuY2UgdGhhdCBkZWNpc2lvbiBhcmUga2V5LiBJIGFudGljaXBhdGUgdGhlcmUgd2lsbCBiZSBhIGNhbGwgY2hhaW4gdG8gcmVzb2x2ZSBhZnRlciBJIGdldCB0aGVyZS4gTGV0J3Mgc2VlIHdoYXQncyBhY3R1YWxseSB1bmRlciB0aGUgaG9vZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcyMjUsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNjoxOToyNC42NDc1MjA4MThaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMzNjEwMjQzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfcHJvZ190ZXN0X3J1blwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL3N5c2NhbGwuYz00NzE4PXN0YXRpYyBpbnQgYnBmX3Byb2dfcXVlcnkoY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy00NzgxLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjQ3ODI6c3RhdGljIGludCBicGZfcHJvZ190ZXN0X3J1bihjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy00NzgzLVxcdFxcdFxcdCAgICAgdW5pb24gYnBmX2F0dHIgX191c2VyICp1YXR0cilcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTYzMDM9c3RhdGljIGludCBfX3N5c19icGYoZW51bSBicGZfY21kIGNtZCwgYnBmcHRyX3QgdWF0dHIsIHVuc2lnbmVkIGludCBzaXplLFxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjM4NC1cXHRjYXNlIEJQRl9QUk9HX1RFU1RfUlVOOlxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjYzODU6XFx0XFx0ZXJyID0gYnBmX3Byb2dfdGVzdF9ydW4oXFx1MDAyNmF0dHIsIHVhdHRyLnVzZXIpO1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYzODYtXFx0XFx0YnJlYWs7XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz02NjUwPWNvbnN0IHN0cnVjdCBicGZfcHJvZ19vcHMgYnBmX3N5c2NhbGxfcHJvZ19vcHMgPSB7XFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NjY1MTpcXHQudGVzdF9ydW4gPSBicGZfcHJvZ190ZXN0X3J1bl9zeXNjYWxsLFxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTY2NTItfTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTY6MTk6MjQuOTgzNjMwMDI3WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMxMjczMDk5NDgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSdtIGdvaW5nIHRvIHRha2UgYSBsb29rIGF0IHRoZSBgYnBmX3Byb2dfdGVzdF9ydW5gIGZ1bmN0aW9uLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBvcGVyYXRpb24gaW4gdGhlIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AgZmlsZS4gSSdtIGZvY3VzaW5nIG9uIGxpbmVzIDQ3ODIgdGhyb3VnaCA0ODEwLiBUaGlzIHNlY3Rpb24gaXMga2V5IHRvIGNvbXByZWhlbmRpbmcgdGhlIGV4ZWN1dGlvbiBmbG93IG9yIGNyaXRpY2FsIGFzcGVjdHMgb2YgdGhlIHRlc3RpbmcgZW52aXJvbm1lbnQgZm9yIEJQRiBwcm9ncmFtcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGNvZGUgaXMgZG9pbmcsIGxpa2VseSBob3cgaXQncyBzZXR0aW5nIHVwIHRoZSB0ZXN0aW5nIGVudmlyb25tZW50IG9yIGNoZWNraW5nIHRoZSBwcm9ncmFtIGV4ZWN1dGlvbi4gVGhpcyBzaG91bGQgaWxsdW1pbmF0ZSBob3cgdGhlIEJQRiBwcm9ncmFtcyBpbnRlcmFjdCB3aXRoIHRoZSBrZXJuZWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3OTc2LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTY6MTk6NTYuMjU2NzMyNjc5WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0NzI2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL3N5c2NhbGwuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0NzgyLFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI0NzgyOlxcdHN0YXRpYyBpbnQgYnBmX3Byb2dfdGVzdF9ydW4oY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXFxuNDc4MzpcXHRcXHRcXHRcXHQgICAgIHVuaW9uIGJwZl9hdHRyIF9fdXNlciAqdWF0dHIpXFxuNDc4NDpcXHR7XFxuNDc4NTpcXHRcXHRzdHJ1Y3QgYnBmX3Byb2cgKnByb2c7XFxuNDc4NjpcXHRcXHRpbnQgcmV0ID0gLUVOT1RTVVBQO1xcbjQ3ODc6XFx0XFxuNDc4ODpcXHRcXHRpZiAoQ0hFQ0tfQVRUUihCUEZfUFJPR19URVNUX1JVTikpXFxuNDc4OTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG40NzkwOlxcdFxcbjQ3OTE6XFx0XFx0aWYgKChhdHRyLVxcdTAwM2V0ZXN0LmN0eF9zaXplX2luIFxcdTAwMjZcXHUwMDI2ICFhdHRyLVxcdTAwM2V0ZXN0LmN0eF9pbikgfHxcXG40NzkyOlxcdFxcdCAgICAoIWF0dHItXFx1MDAzZXRlc3QuY3R4X3NpemVfaW4gXFx1MDAyNlxcdTAwMjYgYXR0ci1cXHUwMDNldGVzdC5jdHhfaW4pKVxcbjQ3OTM6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuNDc5NDpcXHRcXG40Nzk1OlxcdFxcdGlmICgoYXR0ci1cXHUwMDNldGVzdC5jdHhfc2l6ZV9vdXQgXFx1MDAyNlxcdTAwMjYgIWF0dHItXFx1MDAzZXRlc3QuY3R4X291dCkgfHxcXG40Nzk2OlxcdFxcdCAgICAoIWF0dHItXFx1MDAzZXRlc3QuY3R4X3NpemVfb3V0IFxcdTAwMjZcXHUwMDI2IGF0dHItXFx1MDAzZXRlc3QuY3R4X291dCkpXFxuNDc5NzpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG40Nzk4OlxcdFxcbjQ3OTk6XFx0XFx0cHJvZyA9IGJwZl9wcm9nX2dldChhdHRyLVxcdTAwM2V0ZXN0LnByb2dfZmQpO1xcbjQ4MDA6XFx0XFx0aWYgKElTX0VSUihwcm9nKSlcXG40ODAxOlxcdFxcdFxcdHJldHVybiBQVFJfRVJSKHByb2cpO1xcbjQ4MDI6XFx0XFxuNDgwMzpcXHRcXHRpZiAocHJvZy1cXHUwMDNlYXV4LVxcdTAwM2VvcHMtXFx1MDAzZXRlc3RfcnVuKVxcbjQ4MDQ6XFx0XFx0XFx0cmV0ID0gcHJvZy1cXHUwMDNlYXV4LVxcdTAwM2VvcHMtXFx1MDAzZXRlc3RfcnVuKHByb2csIGF0dHIsIHVhdHRyKTtcXG40ODA1OlxcdFxcbjQ4MDY6XFx0XFx0YnBmX3Byb2dfcHV0KHByb2cpO1xcbjQ4MDc6XFx0XFx0cmV0dXJuIHJldDtcXG40ODA4OlxcdH1cXG40ODA5OlxcdFxcbjQ4MTA6XFx0I2RlZmluZSBCUEZfT0JKX0dFVF9ORVhUX0lEX0xBU1RfRklFTEQgbmV4dF9pZFxcbjQ4MTE6XFx0XFxuNDgxMjpcXHRzdGF0aWMgaW50IGJwZl9vYmpfZ2V0X25leHRfaWQoY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXFxuNDgxMzpcXHRcXHRcXHRcXHQgICAgICAgdW5pb24gYnBmX2F0dHIgX191c2VyICp1YXR0cixcXG40ODE0OlxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgaWRyICppZHIsXFxuNDgxNTpcXHRcXHRcXHRcXHQgICAgICAgc3BpbmxvY2tfdCAqbG9jaylcXG40ODE2OlxcdHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTY6MTk6NTYuMjU3MDgyNDQ5WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM4OTEwOTA2ODEzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgYEJQRl9QUk9HX1RZUEVfU0tfTE9PS1VQYCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGhvdyBpdCBpbXBhY3RzIGBCUEZfUFJPR19UWVBFX1NLX0xPT0tVUGAuIFdoZW4gYSBCUEYgcHJvZ3JhbSBvZiB0aGF0IHR5cGUgaXMgaW52b2tlZCB3aXRoIGBCUEZfUFJPR19URVNUX1JVTmAgb3IgYEJQRl9QUk9HX1JVTmAgdXNpbmcgdGhlIGBicGYoKWAgc3lzY2FsbCwgdGhlIGBicGZfcHJvZ190ZXN0X3J1bl9za19sb29rdXBgIGZ1bmN0aW9uIGdldHMgZXhlY3V0ZWQuIEkga25vdyB0aGlzIGJlY2F1c2UgdGhlIGNvZGUgZmxvdyB0ZWxscyBtZSB0aGF0LiBHb29kLCB0aGF0IGZ1bmN0aW9uIGlzIGV4cG9ydGVkLCBpdCdzIG5vdCBzdGF0aWMsIHdoaWNoIG1lYW5zIHVzZXJzcGFjZSBjYW4gZGlyZWN0bHkgY2FsbCBpdCB2aWEgdGhlIGBCUEZfUFJPR19URVNUX1JVTmAgY29tbWFuZC5cblxuTm93LCBsZXQncyBsb29rIGF0IHdoYXQncyBhY3R1YWxseSBjaGFuZ2VkLiBUaGlzIHBhdGNoIHNlZW1zIHRvIGFmZmVjdCBob3cgUkNVIHVubG9ja2luZyB3b3JrcyBpbiBgYnBmX3Byb2dfdGVzdF9ydW5fc2tfbG9va3VwYCwgYW5kIEkgbmVlZCB0byBiZSAqdmVyeSogcHJlY2lzZSBoZXJlLiBJdCBsb29rcyBsaWtlIHRoZSBmaXggZW5zdXJlcyBgY3R4LnNlbGVjdGVkX3NrYCBpc24ndCBhY2Nlc3NlZCBvdXRzaWRlIGFuIFJDVSByZWFkIGNyaXRpY2FsIHNlY3Rpb24sIG9yIGl0J3MgZml4aW5nIHNvbWV0aGluZyByZWxhdGVkIHRvIGBzb2NrX2dlbl9jb29raWVgIGFuZCBgLUVPUE5PVFNVUFBgIGhhbmRsaW5nIGluIHJlbGF0aW9uIHRvIHRlc3QgdGltZXJzLiBUaGF0J3MgYSBjcml0aWNhbCBhcmVhLCBhZmZlY3RpbmcgY29yZSBuZXR3b3JraW5nIGFuZCBCUEYgbG9naWMuIEZ1cnRoZXJtb3JlLCBzaW5jZSBpdCdzIHJlYWNoYWJsZSB2aWEgYGJwZigpYCB3aXRoIGBCUEZfUFJPR19URVNUX1JVTmAgaW4gUUVNVSwgdGhpcyBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyBJIHdhbnQgdG8gZnV6ei4gKipgV29ydGhGdXp6aW5nPXRydWVgKiouXG5cbkFscmlnaHQsIG1vdmluZyBvbiwgbGV0J3MgZG91YmxlLWNoZWNrIHRoZSBlbnRyeSBwb2ludHMuIGBicGZfcHJvZ190ZXN0X3J1bl9za19sb29rdXBgIGlzIGEgbm9uLXN0YXRpYyBlbnRyeSBwb2ludCB0aGF0J3MgY2FsbGVkIHRocm91Z2ggYSBmdW5jdGlvbiBwb2ludGVyLCBgb3BzLVx1MDAzZXRlc3RfcnVuYCB3aXRoaW4gYGJwZl9wcm9nX3Rlc3RfcnVuYC4gR29vZC4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgaWYgYW55IG90aGVyIHN5bWJvbHMgd2VyZSB0b3VjaGVkIGJ5IHRoaXMgcGF0Y2guIExvb2tzIGxpa2UgYGJwZl9wcm9nX3Rlc3RfcnVuX3NrX2xvb2t1cGAgaW4gYG5ldC9icGYvdGVzdF9ydW4uY2AgaXMgdGhlIG9ubHkgc3ltYm9sIGFmZmVjdGVkIGhlcmUuXG5cbkZpbmFsbHksIEkgbmVlZCB0byB2ZXJpZnkgdGhlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzLiBJIGtub3cgSSdsbCBuZWVkIGBCUEZfU1lTQ0FMTGAgKGluIGBrZXJuZWwvYnBmL0tjb25maWdgLCBidWlsZHMgYG5ldC9icGYvdGVzdF9ydW4ub2ApLCBgTkVUYCAoaW4gYG5ldC9NYWtlZmlsZWAsIGVuYWJsZXMgdGhlIG5ldHdvcmsgc3Vic3lzdGVtKSwgYW5kIGBJTkVUYCAoaW4gYG5ldC9jb3JlL2ZpbHRlci5jYCwgd2hpY2ggZ3VhcmRzIGBza19sb29rdXBfcHJvZ19vcHNgKS4gTGV0IG1lIGp1c3QgY29uZmlybSB0aGVzZSBjb25maWd1cmF0aW9ucy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGJvdGggYENPTkZJR19JTkVUYCBhbmQgYENPTkZJR19CUEZfU1lTQ0FMTGAgYW5kIGBDT05GSUdfTkVUYCBhcmUgZW5hYmxlZC4gSSBhbHNvIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYENPTkZJR19JTkVUYCBkZXBlbmRzIG9uIGBDT05GSUdfTkVUYC4gTGV0IG1lIHNlYXJjaCBgY29uZmlnIElORVRgIGluIGBuZXQvaXB2NC9LY29uZmlnYCB0byBiZSBzdXJlLiBBbHJpZ2h0LCBJIHRoaW5rIEkndmUgZ290IHRoaXMgZmlndXJlZCBvdXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NzU1LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTUyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTY6MjY6MjUuMzY2MTUzNzExWiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMzY2MjYzNDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElORVRcXFxcYlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9LY29uZmlnPTk5PWNvbmZpZyBORVRfSEFORFNIQUtFX0tVTklUX1RFU1RcXG4tLVxcbm5ldC9LY29uZmlnLTExMy1cXG5uZXQvS2NvbmZpZzoxMTQ6Y29uZmlnIElORVRcXG5uZXQvS2NvbmZpZy0xMTUtXFx0Ym9vbCBcXFwiVENQL0lQIG5ldHdvcmtpbmdcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE2OjI2OjI1LjcwMjc4ODY2N1oiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NDEyNjAwMzA1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBhc3BlY3QgYmV0dGVyLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byB6ZXJvIGluIG9uIHRoZSBgbmV0L0tjb25maWdgIGZpbGUuIEdpdmVuIHRoZSBjb250ZXh0LCBJJ20gZ29pbmcgdG8gc3RhcnQgYXJvdW5kIGxpbmUgMTE0LiBUaGF0J3MgdXN1YWxseSB3aGVyZSB0aGUgbWVhdCBvZiBhIHBhcnRpY3VsYXIgZmVhdHVyZSBvciBvcHRpb24gc3RhcnRzIHRvIGdldCBkZWZpbmVkIHdpdGhpbiB0aGUgbmV0d29yayBzdWJzeXN0ZW0uIEl0J3MgYSBnb29kIGJldCBJJ2xsIGZpbmQgdGhlIHJlbGV2YW50IGBjb25maWdgIG9wdGlvbnMsIGRlcGVuZGVuY2llcywgYW5kIGhlbHAgdGV4dCB0aGVyZS4gVGltZSB0byBzZWUgd2hhdCBraW5kIG9mIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIGFyZSBkZWZpbmVkLCBpZiB0aGV5J3JlIHJlbGV2YW50LCBhbmQgaG9wZWZ1bGx5IHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBpbnZvbHZlZC4gTGV0J3Mgc2VlIHdoYXQgYG5ldC9LY29uZmlnYCByZXZlYWxzLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMDM0LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTY6Mjc6MDkuODI4Nzk0NTg2WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxNzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDExMDpcXHRcXG4gMTExOlxcdFxcdCAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gS1VuaXQgYW5kIHVuaXQgdGVzdHMgaW4gZ2VuZXJhbCwgcmVmZXJcXG4gMTEyOlxcdFxcdCAgdG8gdGhlIEtVbml0IGRvY3VtZW50YXRpb24gaW4gRG9jdW1lbnRhdGlvbi9kZXYtdG9vbHMva3VuaXQvLlxcbiAxMTM6XFx0XFxuIDExNDpcXHRjb25maWcgSU5FVFxcbiAxMTU6XFx0XFx0Ym9vbCBcXFwiVENQL0lQIG5ldHdvcmtpbmdcXFwiXFxuIDExNjpcXHRcXHRoZWxwXFxuIDExNzpcXHRcXHQgIFRoZXNlIGFyZSB0aGUgcHJvdG9jb2xzIHVzZWQgb24gdGhlIEludGVybmV0IGFuZCBvbiBtb3N0IGxvY2FsXFxuIDExODpcXHRcXHQgIEV0aGVybmV0cy4gSXQgaXMgaGlnaGx5IHJlY29tbWVuZGVkIHRvIHNheSBZIGhlcmUgKHRoaXMgd2lsbCBlbmxhcmdlXFxuIDExOTpcXHRcXHQgIHlvdXIga2VybmVsIGJ5IGFib3V0IDQwMCBLQiksIHNpbmNlIHNvbWUgcHJvZ3JhbXMgKGUuZy4gdGhlIFggd2luZG93XFxuIDEyMDpcXHRcXHQgIHN5c3RlbSkgdXNlIFRDUC9JUCBldmVuIGlmIHlvdXIgbWFjaGluZSBpcyBub3QgY29ubmVjdGVkIHRvIGFueVxcbiAxMjE6XFx0XFx0ICBvdGhlciBjb21wdXRlci4gWW91IHdpbGwgZ2V0IHRoZSBzby1jYWxsZWQgbG9vcGJhY2sgZGV2aWNlIHdoaWNoXFxuIDEyMjpcXHRcXHQgIGFsbG93cyB5b3UgdG8gcGluZyB5b3Vyc2VsZiAoZ3JlYXQgZnVuLCB0aGF0ISkuXFxuIDEyMzpcXHRcXG4gMTI0OlxcdFxcdCAgRm9yIGFuIGV4Y2VsbGVudCBpbnRyb2R1Y3Rpb24gdG8gTGludXggbmV0d29ya2luZywgcGxlYXNlIHJlYWQgdGhlXFxuIDEyNTpcXHRcXHQgIExpbnV4IE5ldHdvcmtpbmcgSE9XVE8sIGF2YWlsYWJsZSBmcm9tXFxuIDEyNjpcXHRcXHQgIFxcdTAwM2NodHRwOi8vd3d3LnRsZHAub3JnL2RvY3MuaHRtbCNob3d0b1xcdTAwM2UuXFxuIDEyNzpcXHRcXG4gMTI4OlxcdFxcdCAgSWYgeW91IHNheSBZIGhlcmUgYW5kIGFsc28gdG8gXFxcIi9wcm9jIGZpbGUgc3lzdGVtIHN1cHBvcnRcXFwiIGFuZFxcbiAxMjk6XFx0XFx0ICBcXFwiU3lzY3RsIHN1cHBvcnRcXFwiIGJlbG93LCB5b3UgY2FuIGNoYW5nZSB2YXJpb3VzIGFzcGVjdHMgb2YgdGhlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE2OjI3OjA5LjgyODg2OTg2NloiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMDI0ODk1MjM2MDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIEJQRiBGaXgqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGZpeGluZyBhbiBSQ1UgcmVhZC1sb2NrIGxpZmV0aW1lIGlzc3VlIGluIGBicGZfcHJvZ190ZXN0X3J1bl9za19sb29rdXBgLiBNeSB1bmRlcnN0YW5kaW5nLCBmcm9tIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiwgaXMgdGhhdCBgbmV0L0tjb25maWdgIGluY2x1ZGVzIHRoaXMgdW5kZXIgdGhlIFwiTmV0d29ya2luZyBvcHRpb25zXCIgbWVudSwgd2hpY2ggaXRzZWxmIGlzIGd1YXJkZWQgYnkgYGlmIE5FVGAuIFRoaXMgdGVsbHMgbWUgdGhhdCBgQlBGX1NZU0NBTExgLCBgTkVUYCwgYW5kIGBJTkVUYCBhcmUgdGhlIGltcG9ydGFudCBjb25maWd1cmF0aW9ucyB0byBrZWVwIGluIG1pbmQgaGVyZS5cblxuTGV0IG1lIGp1c3QgcnVuIHRocm91Z2ggbXkgbWVudGFsIGNoZWNrbGlzdCB0byBjb25maXJtIG15IGFuYWx5c2lzLiBUaGUgZnV6emluZyBmbGFnLCBgV29ydGhGdXp6aW5nYCwgaXMgc2V0IHRvIGB0cnVlYCwgd2hpY2ggbWFrZXMgc2Vuc2UgZ2l2ZW4gdGhlIHBvdGVudGlhbCBzZWN1cml0eSBpbXBsaWNhdGlvbnMgb2YgQlBGLiBUaGUgcm9vdCBvZiB0aGUgcHJvYmxlbSBzZWVtcyB0byBiZSB0aGF0IGBjdHguc2VsZWN0ZWRfc2tgIGlzIGJlaW5nIGFjY2Vzc2VkIGFmdGVyIGBicGZfdGVzdF90aW1lcl9sZWF2ZSgpYCBoYXMgdW5sb2NrZWQgdGhlIFJDVSByZWFkIGxvY2ssIHdoaWNoIGlzIGRlZmluaXRlbHkgYSBidWcuIFRoaXMgaXNzdWUgaXMgaW4gdGhlIGNvcmUgQlBGIHRlc3QgcnVubmVyLCBzcGVjaWZpY2FsbHkgd2hlbiBydW5uaW5nIHdpdGggdGhlIGBicGYoQlBGX1BST0dfVEVTVF9SVU4pYCBzeXNjYWxsIG9uIGBCUEZfUFJPR19UWVBFX1NLX0xPT0tVUGAgcHJvZ3JhbXMuIFRoZXJlZm9yZSwgdGhlIHJlbGV2YW50IHN5bWJvbHMgSSBuZWVkIHRvIGZvY3VzIG9uIGFyZSBgYnBmX3Byb2dfdGVzdF9ydW5fc2tfbG9va3VwYC5cblxuQmFzZWQgb24gdGhpcywgSSdtIGNvbmZpZGVudCB0aGF0IGVuYWJsaW5nIGBCUEZfU1lTQ0FMTGAsIGBORVRgLCBhbmQgYElORVRgIGlzIHRoZSByaWdodCBtb3ZlIGZvciByZXByb2R1Y2luZyBhbmQgdGVzdGluZyB0aGlzIGZpeC5cblxuQWxyaWdodCwgdGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNTk5LCJPdXRwdXRUb2tlbnMiOjE2NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE2OjI4OjUyLjMxODM5Njg1NFoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc0MjA0NDM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiTkVUXCIsXG4gICAgXCJJTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX3Byb2dfdGVzdF9ydW5fc2tfbG9va3VwXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGJwZl9wcm9nX3Rlc3RfcnVuX3NrX2xvb2t1cGAgdG8gYWNjZXNzIHRoZSBzZWxlY3RlZCBzb2NrZXQgYGN0eC5zZWxlY3RlZF9za2Agd2l0aGluIHRoZSBSQ1UtcHJvdGVjdGVkIGNyaXRpY2FsIHNlY3Rpb24gYmVmb3JlIGNhbGxpbmcgYGJwZl90ZXN0X3RpbWVyX2xlYXZlKFxcdTAwMjZ0KWAsIHByZXZlbnRpbmcgdXNlLWFmdGVyLWZyZWUgb3IgUkNVIHZpb2xhdGlvbnMuIFRoaXMgY29kZSBwYXRoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIGBCUEZfUFJPR19URVNUX1JVTmAgY29tbWFuZCBvZiB0aGUgYGJwZigpYCBzeXNjYWxsIG9uIHNrX2xvb2t1cCBCUEYgcHJvZ3JhbXMgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJORVRcIixcbiAgICBcIklORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfcHJvZ190ZXN0X3J1bl9za19sb29rdXBcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgYnBmX3Byb2dfdGVzdF9ydW5fc2tfbG9va3VwYCB0byBhY2Nlc3MgdGhlIHNlbGVjdGVkIHNvY2tldCBgY3R4LnNlbGVjdGVkX3NrYCB3aXRoaW4gdGhlIFJDVS1wcm90ZWN0ZWQgY3JpdGljYWwgc2VjdGlvbiBiZWZvcmUgY2FsbGluZyBgYnBmX3Rlc3RfdGltZXJfbGVhdmUoXFx1MDAyNnQpYCwgcHJldmVudGluZyB1c2UtYWZ0ZXItZnJlZSBvciBSQ1UgdmlvbGF0aW9ucy4gVGhpcyBjb2RlIHBhdGggaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgYEJQRl9QUk9HX1RFU1RfUlVOYCBjb21tYW5kIG9mIHRoZSBgYnBmKClgIHN5c2NhbGwgb24gc2tfbG9va3VwIEJQRiBwcm9ncmFtcyBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE2OjI4OjUyLjM5MjYwNzczMVoiLCJTZXEiOjM3LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAwMTY2NDg5NTIyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE2OjI4OjUyLjM5MzA3MzY2MVoiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjEwMDE2NjQ0MjQ0NzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBicGZfcHJvZ190ZXN0X3J1bl9za19sb29rdXAoKWAgaW4gYG5ldC9icGYvdGVzdF9ydW4uY2AgdG8gaW5zcGVjdCBgY3R4LnNlbGVjdGVkX3NrYCBhbmQgdXBkYXRlIGB1c2VyX2N0eC1cXHUwMDNlY29va2llYCBiZWZvcmUgY2FsbGluZyBgYnBmX3Rlc3RfdGltZXJfbGVhdmUoXFx1MDAyNnQpYCwgcmF0aGVyIHRoYW4gYWZ0ZXIgaXQuXFxuXFxuVGhpcyBjaGFuZ2UgZW5zdXJlcyB0aGF0IGBjdHguc2VsZWN0ZWRfc2tgIGlzIGFjY2Vzc2VkIHdoaWxlIHN0aWxsIHByb3RlY3RlZCBieSB0aGUgUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uIGVzdGFibGlzaGVkIGJ5IGBicGZfdGVzdF90aW1lcl9lbnRlcigpYC4gQWNjZXNzaW5nIGBjdHguc2VsZWN0ZWRfc2tgIGFmdGVyIHJlbGVhc2luZyBSQ1UgY291bGQgcmVzdWx0IGluIGEgdXNlLWFmdGVyLWZyZWUgb3IgUkNVIGRlcmVmZXJlbmNlIGJ1Zywgd2hpY2ggaXMgbW9uaXRvcmVkIGJ5IEtBU0FOIGFuZCBQUk9WRV9SQ1UgLyBMT0NLREVQLlxcblxcblRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzOlxcbi0gYHVzZXJfY3R4YCBpcyBhbGxvY2F0ZWQgdmlhIGBremFsbG9jKClgIGluIGBicGZfY3R4X2luaXQoKWAuXFxuLSBTdGFjayBzdHJ1Y3R1cmVzIHN1Y2ggYXMgYGN0eGAgYXJlIHplcm8taW5pdGlhbGl6ZWQgKGB7fWApLlxcbi0gVGhlIGNvbmRpdGlvbiBgcmV0IFxcdTAwM2U9IDBgIGNoZWNrcyBgcmV0YCB3aGljaCBpcyBpbml0aWFsaXplZC91cGRhdGVkIGJ5IGBicGZfdGVzdF90aW1lcl9jb250aW51ZSgpYC5cXG4tIE5vIG5ldyBidWZmZXJzLCB1bmluaXRpYWxpemVkIGZpZWxkcywgb3IgbWVtb3J5IGNvcGllcyBhcmUgaW50cm9kdWNlZC5cXG5cXG5UaGVyZWZvcmUsIHRoaXMgY2hhbmdlIGRvZXMgbm90IHdhcnJhbnQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGEzOTU3N2IyYjNjYWY2MzI5ZTJmM2E0NTI2MGRlMDZhMTEzZDIwMTFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAyOSAxNTo1NjozOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9icGYvdGVzdF9ydW4uYyBiL25ldC9icGYvdGVzdF9ydW4uY1xuaW5kZXggNWQ1MWY2Y2I3ZDE1NC4uZTY3N2VjMzM5MGUzNyAxMDA2NDRcbi0tLSBhL25ldC9icGYvdGVzdF9ydW4uY1xuKysrIGIvbmV0L2JwZi90ZXN0X3J1bi5jXG5AQCAtMTY1MCwyMSArMTY1MCwyMSBAQCBpbnQgYnBmX3Byb2dfdGVzdF9ydW5fc2tfbG9va3VwKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgY29uc3QgdW5pb24gYnBmX2F0dHIgKmthdFxuIFx0XHRjdHguc2VsZWN0ZWRfc2sgPSBOVUxMO1xuIFx0XHRyZXR2YWwgPSBCUEZfUFJPR19TS19MT09LVVBfUlVOX0FSUkFZKHByb2dzLCBjdHgsIGJwZl9wcm9nX3J1bik7XG4gXHR9IHdoaWxlIChicGZfdGVzdF90aW1lcl9jb250aW51ZShcdTAwMjZ0LCAxLCByZXBlYXQsIFx1MDAyNnJldCwgXHUwMDI2ZHVyYXRpb24pKTtcbitcbitcdGlmIChyZXQgXHUwMDNlPSAwKSB7XG4rXHRcdHVzZXJfY3R4LVx1MDAzZWNvb2tpZSA9IDA7XG4rXHRcdGlmIChjdHguc2VsZWN0ZWRfc2spIHtcbitcdFx0XHRpZiAoY3R4LnNlbGVjdGVkX3NrLVx1MDAzZXNrX3JldXNlcG9ydCBcdTAwMjZcdTAwMjYgIWN0eC5ub19yZXVzZXBvcnQpXG4rXHRcdFx0XHRyZXQgPSAtRU9QTk9UU1VQUDtcbitcdFx0XHRlbHNlXG4rXHRcdFx0XHR1c2VyX2N0eC1cdTAwM2Vjb29raWUgPSBzb2NrX2dlbl9jb29raWUoY3R4LnNlbGVjdGVkX3NrKTtcbitcdFx0fVxuK1x0fVxuIFx0YnBmX3Rlc3RfdGltZXJfbGVhdmUoXHUwMDI2dCk7XG4gXG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRnb3RvIG91dDtcbiBcbi1cdHVzZXJfY3R4LVx1MDAzZWNvb2tpZSA9IDA7XG4tXHRpZiAoY3R4LnNlbGVjdGVkX3NrKSB7XG4tXHRcdGlmIChjdHguc2VsZWN0ZWRfc2stXHUwMDNlc2tfcmV1c2Vwb3J0IFx1MDAyNlx1MDAyNiAhY3R4Lm5vX3JldXNlcG9ydCkge1xuLVx0XHRcdHJldCA9IC1FT1BOT1RTVVBQO1xuLVx0XHRcdGdvdG8gb3V0O1xuLVx0XHR9XG4tXG4tXHRcdHVzZXJfY3R4LVx1MDAzZWNvb2tpZSA9IHNvY2tfZ2VuX2Nvb2tpZShjdHguc2VsZWN0ZWRfc2spO1xuLVx0fVxuLVxuIFx0cmV0ID0gYnBmX3Rlc3RfZmluaXNoKGthdHRyLCB1YXR0ciwgTlVMTCwgTlVMTCwgMCwgMCwgcmV0dmFsLCBkdXJhdGlvbik7XG4gXHRpZiAoIXJldClcbiBcdFx0cmV0ID0gYnBmX2N0eF9maW5pc2goa2F0dHIsIHVhdHRyLCB1c2VyX2N0eCwgc2l6ZW9mKCp1c2VyX2N0eCkpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTY6Mjg6NTIuMzkzMDc0NDAxWiIsIlNlcSI6MzksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQyMDIwNDE5MjQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQlBGIFRlc3QgUnVubmVyIENvZGUqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW4uIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQncyBoYXBwZW5pbmcgd2l0aCB0aGlzIGRpZmYsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIEJQRiB0ZXN0aW5nIGZyYW1ld29yay4gSSdtIGdvaW5nIHRvIGZvY3VzIG15IGF0dGVudGlvbiBvbiBgbmV0L2JwZi90ZXN0X3J1bi5jYC4gRmlyc3QsIEknbGwgbmVlZCB0byB1c2UgbXkgdG9vbHMgdG8gZXhhbWluZSB0aGUgZGlmZiBjbG9zZWx5LCB1bmRlcnN0YW5kIHRoZSBjaGFuZ2VzIG1hZGUgYW5kIHRoZW4gSSB3aWxsIHJlYWQgdGhlIHJlbGV2YW50IHBvcnRpb25zIG9mIHRoZSBjb2RlLlxuXG5JIHRoaW5rIGEgZ29vZCBzdGFydGluZyBwb2ludCB3aWxsIGJlIGFyb3VuZCBsaW5lIDE2NTAgaW4gYG5ldC9icGYvdGVzdF9ydW4uY2AuIEkgd2lsbCByZWFkIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRoZXJlIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgYW55IGNoYW5nZXMuIExldCdzIHN0YXJ0IHdpdGggYHJlYWQtZmlsZWAgdG8gZ2V0IGEgcXVpY2sgb3ZlcnZpZXcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzODUsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE2OjI5OjM0LjQxMzQ5NzI2NVoiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzIyNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2JwZi90ZXN0X3J1bi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE2MDAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE2MDA6XFx0XFx0aWYgKElTX0VSUih1c2VyX2N0eCkpXFxuMTYwMTpcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUih1c2VyX2N0eCk7XFxuMTYwMjpcXHRcXG4xNjAzOlxcdFxcdGlmICghdXNlcl9jdHgpXFxuMTYwNDpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xNjA1OlxcdFxcbjE2MDY6XFx0XFx0aWYgKHVzZXJfY3R4LVxcdTAwM2VzaylcXG4xNjA3OlxcdFxcdFxcdGdvdG8gb3V0O1xcbjE2MDg6XFx0XFxuMTYwOTpcXHRcXHRpZiAoIXJhbmdlX2lzX3plcm8odXNlcl9jdHgsIG9mZnNldG9mZW5kKHR5cGVvZigqdXNlcl9jdHgpLCBsb2NhbF9wb3J0KSwgc2l6ZW9mKCp1c2VyX2N0eCkpKVxcbjE2MTA6XFx0XFx0XFx0Z290byBvdXQ7XFxuMTYxMTpcXHRcXG4xNjEyOlxcdFxcdGlmICh1c2VyX2N0eC1cXHUwMDNlbG9jYWxfcG9ydCBcXHUwMDNlIFUxNl9NQVgpIHtcXG4xNjEzOlxcdFxcdFxcdHJldCA9IC1FUkFOR0U7XFxuMTYxNDpcXHRcXHRcXHRnb3RvIG91dDtcXG4xNjE1OlxcdFxcdH1cXG4xNjE2OlxcdFxcbjE2MTc6XFx0XFx0Y3R4LmZhbWlseSA9ICh1MTYpdXNlcl9jdHgtXFx1MDAzZWZhbWlseTtcXG4xNjE4OlxcdFxcdGN0eC5wcm90b2NvbCA9ICh1MTYpdXNlcl9jdHgtXFx1MDAzZXByb3RvY29sO1xcbjE2MTk6XFx0XFx0Y3R4LmRwb3J0ID0gKHUxNil1c2VyX2N0eC1cXHUwMDNlbG9jYWxfcG9ydDtcXG4xNjIwOlxcdFxcdGN0eC5zcG9ydCA9IHVzZXJfY3R4LVxcdTAwM2VyZW1vdGVfcG9ydDtcXG4xNjIxOlxcdFxcbjE2MjI6XFx0XFx0c3dpdGNoIChjdHguZmFtaWx5KSB7XFxuMTYyMzpcXHRcXHRjYXNlIEFGX0lORVQ6XFxuMTYyNDpcXHRcXHRcXHRjdHgudjQuZGFkZHIgPSAoX19mb3JjZSBfX2JlMzIpdXNlcl9jdHgtXFx1MDAzZWxvY2FsX2lwNDtcXG4xNjI1OlxcdFxcdFxcdGN0eC52NC5zYWRkciA9IChfX2ZvcmNlIF9fYmUzMil1c2VyX2N0eC1cXHUwMDNlcmVtb3RlX2lwNDtcXG4xNjI2OlxcdFxcdFxcdGJyZWFrO1xcbjE2Mjc6XFx0XFxuMTYyODpcXHQjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG4xNjI5OlxcdFxcdGNhc2UgQUZfSU5FVDY6XFxuMTYzMDpcXHRcXHRcXHRjdHgudjYuZGFkZHIgPSAoc3RydWN0IGluNl9hZGRyICopdXNlcl9jdHgtXFx1MDAzZWxvY2FsX2lwNjtcXG4xNjMxOlxcdFxcdFxcdGN0eC52Ni5zYWRkciA9IChzdHJ1Y3QgaW42X2FkZHIgKil1c2VyX2N0eC1cXHUwMDNlcmVtb3RlX2lwNjtcXG4xNjMyOlxcdFxcdFxcdGJyZWFrO1xcbjE2MzM6XFx0I2VuZGlmXFxuMTYzNDpcXHRcXG4xNjM1OlxcdFxcdGRlZmF1bHQ6XFxuMTYzNjpcXHRcXHRcXHRyZXQgPSAtRUFGTk9TVVBQT1JUO1xcbjE2Mzc6XFx0XFx0XFx0Z290byBvdXQ7XFxuMTYzODpcXHRcXHR9XFxuMTYzOTpcXHRcXG4xNjQwOlxcdFxcdHByb2dzID0gYnBmX3Byb2dfYXJyYXlfYWxsb2MoMSwgR0ZQX0tFUk5FTCk7XFxuMTY0MTpcXHRcXHRpZiAoIXByb2dzKSB7XFxuMTY0MjpcXHRcXHRcXHRyZXQgPSAtRU5PTUVNO1xcbjE2NDM6XFx0XFx0XFx0Z290byBvdXQ7XFxuMTY0NDpcXHRcXHR9XFxuMTY0NTpcXHRcXG4xNjQ2OlxcdFxcdHByb2dzLVxcdTAwM2VpdGVtc1swXS5wcm9nID0gcHJvZztcXG4xNjQ3OlxcdFxcbjE2NDg6XFx0XFx0YnBmX3Rlc3RfdGltZXJfZW50ZXIoXFx1MDAyNnQpO1xcbjE2NDk6XFx0XFx0ZG8ge1xcbjE2NTA6XFx0XFx0XFx0Y3R4LnNlbGVjdGVkX3NrID0gTlVMTDtcXG4xNjUxOlxcdFxcdFxcdHJldHZhbCA9IEJQRl9QUk9HX1NLX0xPT0tVUF9SVU5fQVJSQVkocHJvZ3MsIGN0eCwgYnBmX3Byb2dfcnVuKTtcXG4xNjUyOlxcdFxcdH0gd2hpbGUgKGJwZl90ZXN0X3RpbWVyX2NvbnRpbnVlKFxcdTAwMjZ0LCAxLCByZXBlYXQsIFxcdTAwMjZyZXQsIFxcdTAwMjZkdXJhdGlvbikpO1xcbjE2NTM6XFx0XFxuMTY1NDpcXHRcXHRpZiAocmV0IFxcdTAwM2U9IDApIHtcXG4xNjU1OlxcdFxcdFxcdHVzZXJfY3R4LVxcdTAwM2Vjb29raWUgPSAwO1xcbjE2NTY6XFx0XFx0XFx0aWYgKGN0eC5zZWxlY3RlZF9zaykge1xcbjE2NTc6XFx0XFx0XFx0XFx0aWYgKGN0eC5zZWxlY3RlZF9zay1cXHUwMDNlc2tfcmV1c2Vwb3J0IFxcdTAwMjZcXHUwMDI2ICFjdHgubm9fcmV1c2Vwb3J0KVxcbjE2NTg6XFx0XFx0XFx0XFx0XFx0cmV0ID0gLUVPUE5PVFNVUFA7XFxuMTY1OTpcXHRcXHRcXHRcXHRlbHNlXFxuMTY2MDpcXHRcXHRcXHRcXHRcXHR1c2VyX2N0eC1cXHUwMDNlY29va2llID0gc29ja19nZW5fY29va2llKGN0eC5zZWxlY3RlZF9zayk7XFxuMTY2MTpcXHRcXHRcXHR9XFxuMTY2MjpcXHRcXHR9XFxuMTY2MzpcXHRcXHRicGZfdGVzdF90aW1lcl9sZWF2ZShcXHUwMDI2dCk7XFxuMTY2NDpcXHRcXG4xNjY1OlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbjE2NjY6XFx0XFx0XFx0Z290byBvdXQ7XFxuMTY2NzpcXHRcXG4xNjY4OlxcdFxcdHJldCA9IGJwZl90ZXN0X2ZpbmlzaChrYXR0ciwgdWF0dHIsIE5VTEwsIE5VTEwsIDAsIDAsIHJldHZhbCwgZHVyYXRpb24pO1xcbjE2Njk6XFx0XFx0aWYgKCFyZXQpXFxuMTY3MDpcXHRcXHRcXHRyZXQgPSBicGZfY3R4X2ZpbmlzaChrYXR0ciwgdWF0dHIsIHVzZXJfY3R4LCBzaXplb2YoKnVzZXJfY3R4KSk7XFxuMTY3MTpcXHRcXG4xNjcyOlxcdG91dDpcXG4xNjczOlxcdFxcdGJwZl9wcm9nX2FycmF5X2ZyZWUocHJvZ3MpO1xcbjE2NzQ6XFx0XFx0a2ZyZWUodXNlcl9jdHgpO1xcbjE2NzU6XFx0XFx0cmV0dXJuIHJldDtcXG4xNjc2OlxcdH1cXG4xNjc3OlxcdFxcbjE2Nzg6XFx0aW50IGJwZl9wcm9nX3Rlc3RfcnVuX3N5c2NhbGwoc3RydWN0IGJwZl9wcm9nICpwcm9nLFxcbjE2Nzk6XFx0XFx0XFx0XFx0ICAgICAgY29uc3QgdW5pb24gYnBmX2F0dHIgKmthdHRyLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNjoyOTozNC40MTM2MzE4MTVaIiwiU2VxIjo0MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTUwMzgxMzQxMzg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGVzZSBjaGFuZ2VzLCBzbyB0aGUgZmlyc3QgdGhpbmcgSSdsbCBkbyBpcyBtZXRob2RpY2FsbHkgZ28gdGhyb3VnaCBpdC4gUmF0aGVyIHRoYW4ganVzdCBmb2N1c2luZyBvbiB0aGUgY3VycmVudCBsaW5lcywgSSBrbm93IEkgbmVlZCB0byBidWlsZCBhIGNvbXByZWhlbnNpdmUgdW5kZXJzdGFuZGluZywgc28gSSB3aWxsIGFuYWx5emUgdGhlIGVhcmxpZXIgbGluZXMgb2YgYGJwZl9wcm9nX3Rlc3RfcnVuX3NrX2xvb2t1cGAgYXMgd2VsbC4gQ29udGV4dCBpcyBldmVyeXRoaW5nIHdoZW4gZGVhbGluZyB3aXRoIEJQRi4gSSBuZWVkIHRvIGdyYXNwIHRoZSBlbnRpcmUgcGljdHVyZSB0byBldmFsdWF0ZSB0aGUgaW1wYWN0IGNvcnJlY3RseS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzg0OSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTY6MzI6MDQuNzk0OTc4MTI5WiIsIlNlcSI6NDIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MDA2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvYnBmL3Rlc3RfcnVuLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTU3MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTU3MDpcXHRcXHRcXHRcXHRcXHQgICAgIHNpemVvZihzdHJ1Y3QgYnBmX2Zsb3dfa2V5cykpO1xcbjE1NzE6XFx0XFxuMTU3MjpcXHRvdXQ6XFxuMTU3MzpcXHRcXHRrZnJlZSh1c2VyX2N0eCk7XFxuMTU3NDpcXHRcXHRrZnJlZShkYXRhKTtcXG4xNTc1OlxcdFxcdHJldHVybiByZXQ7XFxuMTU3NjpcXHR9XFxuMTU3NzpcXHRcXG4xNTc4OlxcdGludCBicGZfcHJvZ190ZXN0X3J1bl9za19sb29rdXAoc3RydWN0IGJwZl9wcm9nICpwcm9nLCBjb25zdCB1bmlvbiBicGZfYXR0ciAqa2F0dHIsXFxuMTU3OTpcXHRcXHRcXHRcXHRcXHR1bmlvbiBicGZfYXR0ciBfX3VzZXIgKnVhdHRyKVxcbjE1ODA6XFx0e1xcbjE1ODE6XFx0XFx0c3RydWN0IGJwZl90ZXN0X3RpbWVyIHQgPSB7fTtcXG4xNTgyOlxcdFxcdHN0cnVjdCBicGZfcHJvZ19hcnJheSAqcHJvZ3MgPSBOVUxMO1xcbjE1ODM6XFx0XFx0c3RydWN0IGJwZl9za19sb29rdXBfa2VybiBjdHggPSB7fTtcXG4xNTg0OlxcdFxcdHUzMiByZXBlYXQgPSBrYXR0ci1cXHUwMDNldGVzdC5yZXBlYXQ7XFxuMTU4NTpcXHRcXHRzdHJ1Y3QgYnBmX3NrX2xvb2t1cCAqdXNlcl9jdHg7XFxuMTU4NjpcXHRcXHR1MzIgcmV0dmFsLCBkdXJhdGlvbjtcXG4xNTg3OlxcdFxcdGludCByZXQgPSAtRUlOVkFMO1xcbjE1ODg6XFx0XFxuMTU4OTpcXHRcXHRpZiAoa2F0dHItXFx1MDAzZXRlc3QuZmxhZ3MgfHwga2F0dHItXFx1MDAzZXRlc3QuY3B1IHx8IGthdHRyLVxcdTAwM2V0ZXN0LmJhdGNoX3NpemUpXFxuMTU5MDpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xNTkxOlxcdFxcbjE1OTI6XFx0XFx0aWYgKGthdHRyLVxcdTAwM2V0ZXN0LmRhdGFfaW4gfHwga2F0dHItXFx1MDAzZXRlc3QuZGF0YV9zaXplX2luIHx8IGthdHRyLVxcdTAwM2V0ZXN0LmRhdGFfb3V0IHx8XFxuMTU5MzpcXHRcXHQgICAga2F0dHItXFx1MDAzZXRlc3QuZGF0YV9zaXplX291dClcXG4xNTk0OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjE1OTU6XFx0XFxuMTU5NjpcXHRcXHRpZiAoIXJlcGVhdClcXG4xNTk3OlxcdFxcdFxcdHJlcGVhdCA9IDE7XFxuMTU5ODpcXHRcXG4xNTk5OlxcdFxcdHVzZXJfY3R4ID0gYnBmX2N0eF9pbml0KGthdHRyLCBzaXplb2YoKnVzZXJfY3R4KSk7XFxuMTYwMDpcXHRcXHRpZiAoSVNfRVJSKHVzZXJfY3R4KSlcXG4xNjAxOlxcdFxcdFxcdHJldHVybiBQVFJfRVJSKHVzZXJfY3R4KTtcXG4xNjAyOlxcdFxcbjE2MDM6XFx0XFx0aWYgKCF1c2VyX2N0eClcXG4xNjA0OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjE2MDU6XFx0XFxuMTYwNjpcXHRcXHRpZiAodXNlcl9jdHgtXFx1MDAzZXNrKVxcbjE2MDc6XFx0XFx0XFx0Z290byBvdXQ7XFxuMTYwODpcXHRcXG4xNjA5OlxcdFxcdGlmICghcmFuZ2VfaXNfemVybyh1c2VyX2N0eCwgb2Zmc2V0b2ZlbmQodHlwZW9mKCp1c2VyX2N0eCksIGxvY2FsX3BvcnQpLCBzaXplb2YoKnVzZXJfY3R4KSkpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE2OjMyOjA0Ljc5NTEyMDIxOVoiLCJTZXEiOjQzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMzIyOTIxMjAwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgZnVuY3Rpb25zLlxuXG4qKkRlY29uc3RydWN0aW5nIHRoZSBCUEYgVGltZXIgTGlmZWN5Y2xlKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoZXNlIEJQRiB0aW1lciBmdW5jdGlvbnM6IGBicGZfdGVzdF90aW1lcl9lbnRlcmAsIGBicGZfdGVzdF90aW1lcl9jb250aW51ZWAsIGFuZCBgYnBmX3Rlc3RfdGltZXJfbGVhdmVgLiBNeSBpbml0aWFsIGFwcHJvYWNoIGlzIGFsd2F5cyB0aGUgc2FtZTogbGV0J3Mgc3RhcnQgd2l0aCBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZXkncmUgKnVzZWQqLiBJJ2xsIHJlYWNoIGZvciBgZ3JlcGAgYW5kIHNlZSB3aGVyZSB0aGVzZSBmdW5jdGlvbnMgYXJlIHJlZmVyZW5jZWQgdGhyb3VnaG91dCB0aGUgY29kZWJhc2UuIFRoZSBnb2FsIGlzIHRvIHNlZSB0aGVtIGluIGNvbnRleHQuIEkgZXhwZWN0IHRvIGdldCBhIGZlZWwgZm9yIHRoZSBkaWZmZXJlbnQgc3RhZ2VzIG9mIHRpbWVyIGNyZWF0aW9uLCBtYW5hZ2VtZW50LCBhbmQgZXhwaXJhdGlvbiB3aXRoaW4gdGhlIEJQRiBmcmFtZXdvcmsuIFRoYXQgZ3JlcHBpbmcgd2lsbCBob3BlZnVsbHkgcmV2ZWFsIHRoZSB0eXBpY2FsIGNhbGwgc2VxdWVuY2UgYW5kIHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQuIEknbSBsb29raW5nIGZvciBhIGNsZWFyIGZsb3cgb2YgZXhlY3V0aW9uLCBpZGVudGlmeWluZyBob3cgdGhlIHRpbWVyJ3MgYmVoYXZpb3IgaXMgZGVmaW5lZCBhbmQgaG93IGV2ZW50cyB0cmlnZ2VyIHRoZSB2YXJpb3VzIGNhbGxzLiBGcm9tIHRoZXJlIEknbGwgc3RhcnQgYnVpbGRpbmcgYSBtZW50YWwgbW9kZWwgb2YgdGhlaXIgYmVoYXZpb3IsIHBheWluZyBhdHRlbnRpb24gdG8gYW55IGVkZ2UgY2FzZXMgb3IgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3VlcyB0aGF0IG1pZ2h0IGFyaXNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NjQ0LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNjozMjoxOC4wMjQzMzU2NTlaIiwiU2VxIjo0NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMyMzAwOTEzNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfdGVzdF90aW1lclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYnBmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvYnBmL3Rlc3RfcnVuLmMtMzAtXFxubmV0L2JwZi90ZXN0X3J1bi5jOjMxOnN0cnVjdCBicGZfdGVzdF90aW1lciB7XFxubmV0L2JwZi90ZXN0X3J1bi5jLTMyLVxcdHUzMiBpO1xcbi0tXFxubmV0L2JwZi90ZXN0X3J1bi5jLTM1LVxcbm5ldC9icGYvdGVzdF9ydW4uYzozNjpzdGF0aWMgdm9pZCBicGZfdGVzdF90aW1lcl9lbnRlcihzdHJ1Y3QgYnBmX3Rlc3RfdGltZXIgKnQpXFxubmV0L2JwZi90ZXN0X3J1bi5jLTM3LVxcdF9fYWNxdWlyZXMocmN1KVxcbi0tXFxubmV0L2JwZi90ZXN0X3J1bi5jLTQyLVxcbm5ldC9icGYvdGVzdF9ydW4uYzo0MzpzdGF0aWMgdm9pZCBicGZfdGVzdF90aW1lcl9sZWF2ZShzdHJ1Y3QgYnBmX3Rlc3RfdGltZXIgKnQpXFxubmV0L2JwZi90ZXN0X3J1bi5jLTQ0LVxcdF9fcmVsZWFzZXMocmN1KVxcbi0tXFxubmV0L2JwZi90ZXN0X3J1bi5jLTQ5LVxcbm5ldC9icGYvdGVzdF9ydW4uYzo1MDpzdGF0aWMgYm9vbCBicGZfdGVzdF90aW1lcl9jb250aW51ZShzdHJ1Y3QgYnBmX3Rlc3RfdGltZXIgKnQsIGludCBpdGVyYXRpb25zLFxcbm5ldC9icGYvdGVzdF9ydW4uYy01MS1cXHRcXHRcXHRcXHQgICAgdTMyIHJlcGVhdCwgaW50ICplcnIsIHUzMiAqZHVyYXRpb24pXFxuLS1cXG5uZXQvYnBmL3Rlc3RfcnVuLmMtNzItXFx0XFx0dC1cXHUwMDNldGltZV9zcGVudCArPSBrdGltZV9nZXRfbnMoKSAtIHQtXFx1MDAzZXRpbWVfc3RhcnQ7XFxubmV0L2JwZi90ZXN0X3J1bi5jOjczOlxcdFxcdGJwZl90ZXN0X3RpbWVyX2xlYXZlKHQpO1xcbm5ldC9icGYvdGVzdF9ydW4uYy03NC1cXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG5uZXQvYnBmL3Rlc3RfcnVuLmM6NzU6XFx0XFx0YnBmX3Rlc3RfdGltZXJfZW50ZXIodCk7XFxubmV0L2JwZi90ZXN0X3J1bi5jLTc2LVxcdH1cXG4tLVxcbm5ldC9icGYvdGVzdF9ydW4uYz0zNjA9c3RhdGljIGludCBicGZfdGVzdF9ydW5feGRwX2xpdmUoc3RydWN0IGJwZl9wcm9nICpwcm9nLCBzdHJ1Y3QgeGRwX2J1ZmYgKmN0eCxcXG4tLVxcbm5ldC9icGYvdGVzdF9ydW4uYy0zNjQtXFx0c3RydWN0IHhkcF90ZXN0X2RhdGEgeGRwID0geyAuYmF0Y2hfc2l6ZSA9IGJhdGNoX3NpemUgfTtcXG5uZXQvYnBmL3Rlc3RfcnVuLmM6MzY1OlxcdHN0cnVjdCBicGZfdGVzdF90aW1lciB0ID0ge307XFxubmV0L2JwZi90ZXN0X3J1bi5jLTM2Ni1cXHRpbnQgcmV0O1xcbi0tXFxubmV0L2JwZi90ZXN0X3J1bi5jLTM3NC1cXG5uZXQvYnBmL3Rlc3RfcnVuLmM6Mzc1OlxcdGJwZl90ZXN0X3RpbWVyX2VudGVyKFxcdTAwMjZ0KTtcXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMzc2LVxcdGRvIHtcXG4tLVxcbm5ldC9icGYvdGVzdF9ydW4uYy0zODAtXFx0XFx0XFx0YnJlYWs7XFxubmV0L2JwZi90ZXN0X3J1bi5jOjM4MTpcXHR9IHdoaWxlIChicGZfdGVzdF90aW1lcl9jb250aW51ZShcXHUwMDI2dCwgeGRwLmZyYW1lX2NudCwgcmVwZWF0LCBcXHUwMDI2cmV0LCB0aW1lKSk7XFxubmV0L2JwZi90ZXN0X3J1bi5jOjM4MjpcXHRicGZfdGVzdF90aW1lcl9sZWF2ZShcXHUwMDI2dCk7XFxubmV0L2JwZi90ZXN0X3J1bi5jLTM4My1cXG4tLVxcbm5ldC9icGYvdGVzdF9ydW4uYz0zODg9c3RhdGljIGludCBicGZfdGVzdF9ydW4oc3RydWN0IGJwZl9wcm9nICpwcm9nLCB2b2lkICpjdHgsIHUzMiByZXBlYXQsXFxuLS1cXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMzk0LVxcdHN0cnVjdCBicGZfY2dfcnVuX2N0eCBydW5fY3R4O1xcbm5ldC9icGYvdGVzdF9ydW4uYzozOTU6XFx0c3RydWN0IGJwZl90ZXN0X3RpbWVyIHQgPSB7fTtcXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMzk2LVxcdGVudW0gYnBmX2Nncm91cF9zdG9yYWdlX3R5cGUgc3R5cGU7XFxuLS1cXG5uZXQvYnBmL3Rlc3RfcnVuLmMtNDExLVxcbm5ldC9icGYvdGVzdF9ydW4uYzo0MTI6XFx0YnBmX3Rlc3RfdGltZXJfZW50ZXIoXFx1MDAyNnQpO1xcbm5ldC9icGYvdGVzdF9ydW4uYy00MTMtXFx0b2xkX2N0eCA9IGJwZl9zZXRfcnVuX2N0eChcXHUwMDI2cnVuX2N0eC5ydW5fY3R4KTtcXG4tLVxcbm5ldC9icGYvdGVzdF9ydW4uYy00MjUtXFx0XFx0bG9jYWxfYmhfZW5hYmxlKCk7XFxubmV0L2JwZi90ZXN0X3J1bi5jOjQyNjpcXHR9IHdoaWxlIChicGZfdGVzdF90aW1lcl9jb250aW51ZShcXHUwMDI2dCwgMSwgcmVwZWF0LCBcXHUwMDI2cmV0LCB0aW1lKSk7XFxubmV0L2JwZi90ZXN0X3J1bi5jLTQyNy1cXHRicGZfcmVzZXRfcnVuX2N0eChvbGRfY3R4KTtcXG5uZXQvYnBmL3Rlc3RfcnVuLmM6NDI4OlxcdGJwZl90ZXN0X3RpbWVyX2xlYXZlKFxcdTAwMjZ0KTtcXG5uZXQvYnBmL3Rlc3RfcnVuLmMtNDI5LVxcbi0tXFxubmV0L2JwZi90ZXN0X3J1bi5jPTE1MDk9aW50IGJwZl9wcm9nX3Rlc3RfcnVuX2Zsb3dfZGlzc2VjdG9yKHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcXG4tLVxcbm5ldC9icGYvdGVzdF9ydW4uYy0xNTEyLXtcXG5uZXQvYnBmL3Rlc3RfcnVuLmM6MTUxMzpcXHRzdHJ1Y3QgYnBmX3Rlc3RfdGltZXIgdCA9IHt9O1xcbm5ldC9icGYvdGVzdF9ydW4uYy0xNTE0LVxcdHUzMiBzaXplID0ga2F0dHItXFx1MDAzZXRlc3QuZGF0YV9zaXplX2luO1xcbi0tXFxubmV0L2JwZi90ZXN0X3J1bi5jLTE1NTUtXFxubmV0L2JwZi90ZXN0X3J1bi5jOjE1NTY6XFx0YnBmX3Rlc3RfdGltZXJfZW50ZXIoXFx1MDAyNnQpO1xcbm5ldC9icGYvdGVzdF9ydW4uYy0xNTU3LVxcdGRvIHtcXG4tLVxcbm5ldC9icGYvdGVzdF9ydW4uYy0xNTU5LVxcdFxcdFxcdFxcdFxcdCAgc2l6ZSwgZmxhZ3MpO1xcbm5ldC9icGYvdGVzdF9ydW4uYzoxNTYwOlxcdH0gd2hpbGUgKGJwZl90ZXN0X3RpbWVyX2NvbnRpbnVlKFxcdTAwMjZ0LCAxLCByZXBlYXQsIFxcdTAwMjZyZXQsIFxcdTAwMjZkdXJhdGlvbikpO1xcbm5ldC9icGYvdGVzdF9ydW4uYzoxNTYxOlxcdGJwZl90ZXN0X3RpbWVyX2xlYXZlKFxcdTAwMjZ0KTtcXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTU2Mi1cXG4tLVxcbm5ldC9icGYvdGVzdF9ydW4uYz0xNTc4PWludCBicGZfcHJvZ190ZXN0X3J1bl9za19sb29rdXAoc3RydWN0IGJwZl9wcm9nICpwcm9nLCBjb25zdCB1bmlvbiBicGZfYXR0ciAqa2F0dHIsXFxuLS1cXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTU4MC17XFxubmV0L2JwZi90ZXN0X3J1bi5jOjE1ODE6XFx0c3RydWN0IGJwZl90ZXN0X3RpbWVyIHQgPSB7fTtcXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTU4Mi1cXHRzdHJ1Y3QgYnBmX3Byb2dfYXJyYXkgKnByb2dzID0gTlVMTDtcXG4tLVxcbm5ldC9icGYvdGVzdF9ydW4uYy0xNjQ3LVxcbm5ldC9icGYvdGVzdF9ydW4uYzoxNjQ4OlxcdGJwZl90ZXN0X3RpbWVyX2VudGVyKFxcdTAwMjZ0KTtcXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTY0OS1cXHRkbyB7XFxuLS1cXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTY1MS1cXHRcXHRyZXR2YWwgPSBCUEZfUFJPR19TS19MT09LVVBfUlVOX0FSUkFZKHByb2dzLCBjdHgsIGJwZl9wcm9nX3J1bik7XFxubmV0L2JwZi90ZXN0X3J1bi5jOjE2NTI6XFx0fSB3aGlsZSAoYnBmX3Rlc3RfdGltZXJfY29udGludWUoXFx1MDAyNnQsIDEsIHJlcGVhdCwgXFx1MDAyNnJldCwgXFx1MDAyNmR1cmF0aW9uKSk7XFxubmV0L2JwZi90ZXN0X3J1bi5jLTE2NTMtXFxuLS1cXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTY2Mi1cXHR9XFxubmV0L2JwZi90ZXN0X3J1bi5jOjE2NjM6XFx0YnBmX3Rlc3RfdGltZXJfbGVhdmUoXFx1MDAyNnQpO1xcbm5ldC9icGYvdGVzdF9ydW4uYy0xNjY0LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNjozMjoxOC4zNDczNTAyMjVaIiwiU2VxIjo0NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTYwNDQ2NTExMjYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipBbmFseXppbmcgYGJwZl90ZXN0X3RpbWVyX2VudGVyYCBhbmQgYGJwZl90ZXN0X3RpbWVyX2xlYXZlYCoqXG5cbk9rYXksIGxldCdzIGRpc3NlY3QgdGhlIGJlaGF2aW91ciBvZiB0aGVzZSBmdW5jdGlvbnMsIGBicGZfdGVzdF90aW1lcl9lbnRlcmAgYW5kIGBicGZfdGVzdF90aW1lcl9sZWF2ZWAuIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCB0aGUgUkNVIChSZWFkLUNvcHkgVXBkYXRlKSBtZWNoYW5pc20uIEEgcXVpY2sgbG9vayByZXZlYWxzIGEgY3J1Y2lhbCBkZXRhaWw6IGBicGZfdGVzdF90aW1lcl9lbnRlcmAgaXMgY2FsbGluZyBgcmN1X3JlYWRfbG9jaygpYCwgd2hpbGUgaXRzIGNvdW50ZXJwYXJ0LCBgYnBmX3Rlc3RfdGltZXJfbGVhdmVgLCBjYWxscyBgcmN1X3JlYWRfdW5sb2NrKClgLiBUaGlzIGluZGljYXRlcyB0aGF0IHRoZXkncmUgZXN0YWJsaXNoaW5nIGFuZCByZWxlYXNpbmcgYW4gUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uLCB3aGljaCBpcyBjb21tb24uXG5cbk5vdywgbGV0IG1lIHpvb20gaW4gb24gbGluZXMgMzYgdGhyb3VnaCA0Ni4gSSBleHBlY3QgdGhhdCB0aGVzZSB3aWxsIGFkZCBtb3JlIG51YW5jZSB0byBob3cgdGhpcyB0aW1lcidzIGludGVyYWN0aW9uIHdpdGggdGhlIFJDVSBzdWJzeXN0ZW0gdGFrZXMgcGxhY2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgdGltZXIgZnVuY3Rpb24gaW50ZWdyYXRlcyB3aXRoIHRoZSBjcml0aWNhbCBzZWN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NzE3LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTY6MzQ6NTguNzkzODY0NTI3WiIsIlNlcSI6NDYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMjIyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvYnBmL3Rlc3RfcnVuLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMzA6XFx0XFxuICAzMTpcXHRzdHJ1Y3QgYnBmX3Rlc3RfdGltZXIge1xcbiAgMzI6XFx0XFx0dTMyIGk7XFxuICAzMzpcXHRcXHR1NjQgdGltZV9zdGFydCwgdGltZV9zcGVudDtcXG4gIDM0OlxcdH07XFxuICAzNTpcXHRcXG4gIDM2OlxcdHN0YXRpYyB2b2lkIGJwZl90ZXN0X3RpbWVyX2VudGVyKHN0cnVjdCBicGZfdGVzdF90aW1lciAqdClcXG4gIDM3OlxcdFxcdF9fYWNxdWlyZXMocmN1KVxcbiAgMzg6XFx0e1xcbiAgMzk6XFx0XFx0cmN1X3JlYWRfbG9ja19kb250X21pZ3JhdGUoKTtcXG4gIDQwOlxcdFxcdHQtXFx1MDAzZXRpbWVfc3RhcnQgPSBrdGltZV9nZXRfbnMoKTtcXG4gIDQxOlxcdH1cXG4gIDQyOlxcdFxcbiAgNDM6XFx0c3RhdGljIHZvaWQgYnBmX3Rlc3RfdGltZXJfbGVhdmUoc3RydWN0IGJwZl90ZXN0X3RpbWVyICp0KVxcbiAgNDQ6XFx0XFx0X19yZWxlYXNlcyhyY3UpXFxuICA0NTpcXHR7XFxuICA0NjpcXHRcXHR0LVxcdTAwM2V0aW1lX3N0YXJ0ID0gMDtcXG4gIDQ3OlxcdFxcdHJjdV9yZWFkX3VubG9ja19taWdyYXRlKCk7XFxuICA0ODpcXHR9XFxuICA0OTpcXHRcXG4gIDUwOlxcdHN0YXRpYyBib29sIGJwZl90ZXN0X3RpbWVyX2NvbnRpbnVlKHN0cnVjdCBicGZfdGVzdF90aW1lciAqdCwgaW50IGl0ZXJhdGlvbnMsXFxuICA1MTpcXHRcXHRcXHRcXHRcXHQgICAgdTMyIHJlcGVhdCwgaW50ICplcnIsIHUzMiAqZHVyYXRpb24pXFxuICA1MjpcXHRcXHRfX211c3RfaG9sZChyY3UpXFxuICA1MzpcXHR7XFxuICA1NDpcXHRcXHR0LVxcdTAwM2VpICs9IGl0ZXJhdGlvbnM7XFxuICA1NTpcXHRcXHRpZiAodC1cXHUwMDNlaSBcXHUwMDNlPSByZXBlYXQpIHtcXG4gIDU2OlxcdFxcdFxcdC8qIFdlJ3JlIGRvbmUuICovXFxuICA1NzpcXHRcXHRcXHR0LVxcdTAwM2V0aW1lX3NwZW50ICs9IGt0aW1lX2dldF9ucygpIC0gdC1cXHUwMDNldGltZV9zdGFydDtcXG4gIDU4OlxcdFxcdFxcdGRvX2Rpdih0LVxcdTAwM2V0aW1lX3NwZW50LCB0LVxcdTAwM2VpKTtcXG4gIDU5OlxcdFxcdFxcdCpkdXJhdGlvbiA9IHQtXFx1MDAzZXRpbWVfc3BlbnQgXFx1MDAzZSBVMzJfTUFYID8gVTMyX01BWCA6ICh1MzIpdC1cXHUwMDNldGltZV9zcGVudDtcXG4gIDYwOlxcdFxcdFxcdCplcnIgPSAwO1xcbiAgNjE6XFx0XFx0XFx0Z290byByZXNldDtcXG4gIDYyOlxcdFxcdH1cXG4gIDYzOlxcdFxcbiAgNjQ6XFx0XFx0aWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7XFxuICA2NTpcXHRcXHRcXHQvKiBEdXJpbmcgaXRlcmF0aW9uOiB3ZSd2ZSBiZWVuIGNhbmNlbGxlZCwgYWJvcnQuICovXFxuICA2NjpcXHRcXHRcXHQqZXJyID0gLUVJTlRSO1xcbiAgNjc6XFx0XFx0XFx0Z290byByZXNldDtcXG4gIDY4OlxcdFxcdH1cXG4gIDY5OlxcdFxcbiAgNzA6XFx0XFx0aWYgKG5lZWRfcmVzY2hlZCgpKSB7XFxuICA3MTpcXHRcXHRcXHQvKiBEdXJpbmcgaXRlcmF0aW9uOiB3ZSBuZWVkIHRvIHJlc2NoZWR1bGUgYmV0d2VlbiBydW5zLiAqL1xcbiAgNzI6XFx0XFx0XFx0dC1cXHUwMDNldGltZV9zcGVudCArPSBrdGltZV9nZXRfbnMoKSAtIHQtXFx1MDAzZXRpbWVfc3RhcnQ7XFxuICA3MzpcXHRcXHRcXHRicGZfdGVzdF90aW1lcl9sZWF2ZSh0KTtcXG4gIDc0OlxcdFxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbiAgNzU6XFx0XFx0XFx0YnBmX3Rlc3RfdGltZXJfZW50ZXIodCk7XFxuICA3NjpcXHRcXHR9XFxuICA3NzpcXHRcXG4gIDc4OlxcdFxcdC8qIERvIGFub3RoZXIgcm91bmQuICovXFxuICA3OTpcXHRcXHRyZXR1cm4gdHJ1ZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTY6MzQ6NTguNzkzOTgwMjA3WiIsIlNlcSI6NDcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjExMTA0MzU3MDk3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBSQ1UgU2FmZXR5KipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgZG93biB0aGlzIHBhdGNoLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJBaCwgUkNVIVwiIEkgc2VlIGEgY2xhc3NpYyBjYXNlIG9mIHBvdGVudGlhbGx5IGFjY2Vzc2luZyBhIHNoYXJlZCBkYXRhIHN0cnVjdHVyZSwgYGN0eC5zZWxlY3RlZF9za2AsIG91dHNpZGUgdGhlIHByb3RlY3Rpb24gb2YgYW4gUkNVIHJlYWQgbG9jay4gVGhlIG9yaWdpbmFsIGNvZGUgaGFzIHRoaXMgc2VxdWVuY2U6IHdlIGVudGVyIGEgdGltZXIgKGBicGZfdGVzdF90aW1lcl9lbnRlcmApLCBydW4gc29tZXRoaW5nIGluIGEgbG9vcCwgYW5kIHRoZW4gKnBvdGVudGlhbGx5KiBhY2Nlc3MgYGN0eC5zZWxlY3RlZF9za2AgYWZ0ZXIgdGhlIGxvb3AgYW5kIGFmdGVyIHdlIGxlYXZlIHRoZSB0aW1lciAoYGJwZl90ZXN0X3RpbWVyX2xlYXZlYCkuIFRoZSBub3RlIGlzIHF1aXRlIGNsZWFyIC0gYGJwZl90ZXN0X3RpbWVyX2VudGVyYCBpcyBob2xkaW5nIHRoZSBSQ1UgcmVhZCBsb2NrLCBhbmQgY2FsbGluZyBgYnBmX3Rlc3RfdGltZXJfbGVhdmVgIHJlbGVhc2VzIGl0LlxuXG5TbywgdGhlIGlzc3VlIGlzIHRoYXQgaWYgYGN0eC5zZWxlY3RlZF9za2AgaXMgdXNlZCBhZnRlciBsZWF2aW5nIHRoZSB0aW1lciwgd2UncmUgcG90ZW50aWFsbHkgbG9va2luZyBhdCBhIHNvY2tldCB0aGF0J3MgYmVlbiBmcmVlZCBmcm9tIHVuZGVyIHVzIGR1ZSB0byB0aGUgUkNVIGxvY2sgYmVpbmcgZHJvcHBlZC4gVGhhdCdzIGEgdGV4dGJvb2sgUkNVIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvLCBvciBhdCBsZWFzdCBhIGRlcmVmZXJlbmNlIG91dHNpZGUgdGhlIHJlYWQgbG9jay5cblxuVGhlIGZpeCwgYW5kIGl0J3MgYSBnb29kIG9uZSwgbW92ZXMgdGhlIGFjY2VzcyB0byBgY3R4LnNlbGVjdGVkX3NrYCBpbnNpZGUgdGhlIGBpZiAocmV0IFx1MDAzZT0gMClgIGJsb2NrICpiZWZvcmUqIHRoZSBgYnBmX3Rlc3RfdGltZXJfbGVhdmUoXHUwMDI2dClgIGNhbGwuIFRoaXMgZW5zdXJlcyB0aGF0IHRoZSBjb2RlIHRoYXQgdXNlcyB0aGF0IHBvaW50ZXIgaXMgcHJvdGVjdGVkIGJ5IHRoZSBSQ1UgcmVhZCBsb2NrLiAgV2UgaGF2ZSB0aGUgY2hlY2tzIGZvciBgc2tfcmV1c2Vwb3J0YCBhbmQgdGhlIGNhbGwgdG8gYHNvY2tfZ2VuX2Nvb2tpZSgpYCB0aGVyZSwgYWxsIHByb3RlY3RlZCBub3cuIE11Y2ggYmV0dGVyLlxuXG5Ob3csIGxldCdzIGp1c3QgbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBvdGhlciBvYnZpb3VzIGNvbmNlcm5zIGhlcmUuIExldCdzIG1ha2Ugc3VyZSBgdXNlcl9jdHhgIGlzIHByb3Blcmx5IGhhbmRsZWQgaW4gYGJwZl9jdHhfaW5pdCgpYCBhbmQgYGJwZl9jdHhfZmluaXNoKClgLiBUaGF0J3Mgd2hlcmUgd2UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB0aGUgYHVzZXJfY3R4YCBtZW1vcnkgaXMgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYW5kIGNsZWFuZWQgdXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc3NDgsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MDUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNjozNjo0OS44Mzc1NTQyNjVaIiwiU2VxIjo0OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM1NjM1NjIxNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfY3R4X2luaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2JwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2JwZi90ZXN0X3J1bi5jPTc4Mj1pbnQgYnBmX3Byb2dfdGVzdF9ydW5fcmF3X3RwKHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcXG4tLVxcbm5ldC9icGYvdGVzdF9ydW4uYy04NTMtXFxubmV0L2JwZi90ZXN0X3J1bi5jOjg1NDpzdGF0aWMgdm9pZCAqYnBmX2N0eF9pbml0KGNvbnN0IHVuaW9uIGJwZl9hdHRyICprYXR0ciwgdTMyIG1heF9zaXplKVxcbm5ldC9icGYvdGVzdF9ydW4uYy04NTUte1xcbi0tXFxubmV0L2JwZi90ZXN0X3J1bi5jPTEwMzU9aW50IGJwZl9wcm9nX3Rlc3RfcnVuX3NrYihzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIGNvbnN0IHVuaW9uIGJwZl9hdHRyICprYXR0cixcXG4tLVxcbm5ldC9icGYvdGVzdF9ydW4uYy0xMDc3LVxcbm5ldC9icGYvdGVzdF9ydW4uYzoxMDc4OlxcdGN0eCA9IGJwZl9jdHhfaW5pdChrYXR0ciwgc2l6ZW9mKHN0cnVjdCBfX3NrX2J1ZmYpKTtcXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTA3OS1cXHRpZiAoSVNfRVJSKGN0eCkpXFxuLS1cXG5uZXQvYnBmL3Rlc3RfcnVuLmM9MTMzMj1pbnQgYnBmX3Byb2dfdGVzdF9ydW5feGRwKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgY29uc3QgdW5pb24gYnBmX2F0dHIgKmthdHRyLFxcbi0tXFxubmV0L2JwZi90ZXN0X3J1bi5jLTEzNjctXFxubmV0L2JwZi90ZXN0X3J1bi5jOjEzNjg6XFx0Y3R4ID0gYnBmX2N0eF9pbml0KGthdHRyLCBzaXplb2Yoc3RydWN0IHhkcF9tZCkpO1xcbm5ldC9icGYvdGVzdF9ydW4uYy0xMzY5LVxcdGlmIChJU19FUlIoY3R4KSlcXG4tLVxcbm5ldC9icGYvdGVzdF9ydW4uYz0xNTA5PWludCBicGZfcHJvZ190ZXN0X3J1bl9mbG93X2Rpc3NlY3RvcihzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXFxuLS1cXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTUzOS1cXG5uZXQvYnBmL3Rlc3RfcnVuLmM6MTU0MDpcXHR1c2VyX2N0eCA9IGJwZl9jdHhfaW5pdChrYXR0ciwgc2l6ZW9mKHN0cnVjdCBicGZfZmxvd19rZXlzKSk7XFxubmV0L2JwZi90ZXN0X3J1bi5jLTE1NDEtXFx0aWYgKElTX0VSUih1c2VyX2N0eCkpIHtcXG4tLVxcbm5ldC9icGYvdGVzdF9ydW4uYz0xNTc4PWludCBicGZfcHJvZ190ZXN0X3J1bl9za19sb29rdXAoc3RydWN0IGJwZl9wcm9nICpwcm9nLCBjb25zdCB1bmlvbiBicGZfYXR0ciAqa2F0dHIsXFxuLS1cXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTU5OC1cXG5uZXQvYnBmL3Rlc3RfcnVuLmM6MTU5OTpcXHR1c2VyX2N0eCA9IGJwZl9jdHhfaW5pdChrYXR0ciwgc2l6ZW9mKCp1c2VyX2N0eCkpO1xcbm5ldC9icGYvdGVzdF9ydW4uYy0xNjAwLVxcdGlmIChJU19FUlIodXNlcl9jdHgpKVxcbi0tXFxubmV0L2JwZi90ZXN0X3J1bi5jPTE3NzY9aW50IGJwZl9wcm9nX3Rlc3RfcnVuX25mKHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcXG4tLVxcbm5ldC9icGYvdGVzdF9ydW4uYy0xODEwLVxcbm5ldC9icGYvdGVzdF9ydW4uYzoxODExOlxcdHVzZXJfY3R4ID0gYnBmX2N0eF9pbml0KGthdHRyLCBzaXplb2Yoc3RydWN0IG5mX2hvb2tfc3RhdGUpKTtcXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTgxMi1cXHRpZiAoSVNfRVJSKHVzZXJfY3R4KSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNjozNjo1MC4xOTM5MTYzN1oiLCJTZXEiOjQ5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMzkxMjYzMzIwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgZnVuY3Rpb25zLCBiYXNlZCBvbiBhIHF1aWNrIHNjYW4gb2YgYG5ldC9icGYvdGVzdF9ydW4uY2A6XG5cbioqSW5pdGlhbCBUaG91Z2h0cyBvbiBCUEYgQ29udGV4dCBJbml0aWFsaXphdGlvbiBhbmQgRmluYWxpemF0aW9uKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIGBicGZfY3R4X2luaXRgIGFuZCBgYnBmX2N0eF9maW5pc2hgLiBJbW1lZGlhdGVseSwgSSdtIHRoaW5raW5nIHRoZXNlIGxpa2VseSBtYW5hZ2UgdGhlIHNldHVwIGFuZCB0ZWFyZG93biBvZiB0aGUgQlBGIGV4ZWN1dGlvbiBjb250ZXh0IGZvciBydW5uaW5nIHRlc3RzLiBHaXZlbiB0aGUgZmlsZSwgYHRlc3RfcnVuLmNgLCBJJ20gZXhwZWN0aW5nIHRoaXMgY29udGV4dCB0byBiZSBzb21ldGhpbmcgc3BlY2lmaWMgdG8gcnVubmluZyBhbmQgdmFsaWRhdGluZyBCUEYgcHJvZ3JhbXMgd2l0aGluIHRoZSBrZXJuZWwncyB0ZXN0aW5nIGZyYW1ld29yaywgbm90IG5lY2Vzc2FyaWx5IGEgZ2VuZXJhbC1wdXJwb3NlIEJQRiBydW50aW1lIGVudmlyb25tZW50LiBJIHN1c3BlY3QgYGJwZl9jdHhfaW5pdGAgd2lsbCBhbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBhbnkgbmVjZXNzYXJ5IHN0cnVjdHVyZXMg4oCTIGxpa2VseSBzb21lIHNvcnQgb2YgY29udGV4dCBzdGF0ZSwgcG9zc2libHkgbWVtb3J5IGZvciBwcm9ncmFtIGV4ZWN1dGlvbiwgYW5kIG1heWJlIHJlZ2lzdGVycyBhbmQgYXV4aWxpYXJ5IGRhdGEgdXNlZCBkdXJpbmcgdGhlIHRlc3RzLiBgYnBmX2N0eF9maW5pc2hgLCBjb252ZXJzZWx5LCBzaG91bGQgYmUgcmVzcG9uc2libGUgZm9yIGNsZWFuaW5nIHVwIHRob3NlIHJlc291cmNlcywgZnJlZWluZyBtZW1vcnksIGFuZCBtYXliZSBldmVuIHBlcmZvcm1pbmcgc29tZSBmaW5hbCBjaGVja3Mgb3IgbG9nZ2luZyBhbnkgdGVzdCByZXN1bHRzLiBJJ20ga2VlbiB0byBzZWUgaWYgdGhleSBoYW5kbGUgYW55IGVycm9yIGNvbmRpdGlvbnMgb3IgY2xlYW51cCBzY2VuYXJpb3MgZ3JhY2VmdWxseS4gSSBhbHNvIHdvbmRlciBob3cgdGhlIGludGVyYWN0aW9ucyB3aXRoIHRoZSB3aWRlciBCUEYgZnJhbWV3b3JrIGFyZSBzdHJ1Y3R1cmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NjgwLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTY6Mzc6MjQuMTA2NTUyMzcyWiIsIlNlcSI6NTAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNDA3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvYnBmL3Rlc3RfcnVuLmNcIixcbiAgXCJGaXJzdExpbmVcIjogODU0LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgODU0OlxcdHN0YXRpYyB2b2lkICpicGZfY3R4X2luaXQoY29uc3QgdW5pb24gYnBmX2F0dHIgKmthdHRyLCB1MzIgbWF4X3NpemUpXFxuIDg1NTpcXHR7XFxuIDg1NjpcXHRcXHR2b2lkIF9fdXNlciAqZGF0YV9pbiA9IHU2NF90b191c2VyX3B0cihrYXR0ci1cXHUwMDNldGVzdC5jdHhfaW4pO1xcbiA4NTc6XFx0XFx0dm9pZCBfX3VzZXIgKmRhdGFfb3V0ID0gdTY0X3RvX3VzZXJfcHRyKGthdHRyLVxcdTAwM2V0ZXN0LmN0eF9vdXQpO1xcbiA4NTg6XFx0XFx0dTMyIHNpemUgPSBrYXR0ci1cXHUwMDNldGVzdC5jdHhfc2l6ZV9pbjtcXG4gODU5OlxcdFxcdHZvaWQgKmRhdGE7XFxuIDg2MDpcXHRcXHRpbnQgZXJyO1xcbiA4NjE6XFx0XFxuIDg2MjpcXHRcXHRpZiAoIWRhdGFfaW4gXFx1MDAyNlxcdTAwMjYgIWRhdGFfb3V0KVxcbiA4NjM6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDg2NDpcXHRcXG4gODY1OlxcdFxcdGRhdGEgPSBremFsbG9jKG1heF9zaXplLCBHRlBfVVNFUik7XFxuIDg2NjpcXHRcXHRpZiAoIWRhdGEpXFxuIDg2NzpcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcXG4gODY4OlxcdFxcbiA4Njk6XFx0XFx0aWYgKGRhdGFfaW4pIHtcXG4gODcwOlxcdFxcdFxcdGVyciA9IGJwZl9jaGVja191YXJnX3RhaWxfemVybyhVU0VSX0JQRlBUUihkYXRhX2luKSwgbWF4X3NpemUsIHNpemUpO1xcbiA4NzE6XFx0XFx0XFx0aWYgKGVycikge1xcbiA4NzI6XFx0XFx0XFx0XFx0a2ZyZWUoZGF0YSk7XFxuIDg3MzpcXHRcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUihlcnIpO1xcbiA4NzQ6XFx0XFx0XFx0fVxcbiA4NzU6XFx0XFxuIDg3NjpcXHRcXHRcXHRzaXplID0gbWluX3QodTMyLCBtYXhfc2l6ZSwgc2l6ZSk7XFxuIDg3NzpcXHRcXHRcXHRpZiAoY29weV9mcm9tX3VzZXIoZGF0YSwgZGF0YV9pbiwgc2l6ZSkpIHtcXG4gODc4OlxcdFxcdFxcdFxcdGtmcmVlKGRhdGEpO1xcbiA4Nzk6XFx0XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVGQVVMVCk7XFxuIDg4MDpcXHRcXHRcXHR9XFxuIDg4MTpcXHRcXHR9XFxuIDg4MjpcXHRcXHRyZXR1cm4gZGF0YTtcXG4gODgzOlxcdH1cXG4gODg0OlxcdFxcbiA4ODU6XFx0c3RhdGljIGludCBicGZfY3R4X2ZpbmlzaChjb25zdCB1bmlvbiBicGZfYXR0ciAqa2F0dHIsXFxuIDg4NjpcXHRcXHRcXHRcXHQgIHVuaW9uIGJwZl9hdHRyIF9fdXNlciAqdWF0dHIsIGNvbnN0IHZvaWQgKmRhdGEsXFxuIDg4NzpcXHRcXHRcXHRcXHQgIHUzMiBzaXplKVxcbiA4ODg6XFx0e1xcbiA4ODk6XFx0XFx0dm9pZCBfX3VzZXIgKmRhdGFfb3V0ID0gdTY0X3RvX3VzZXJfcHRyKGthdHRyLVxcdTAwM2V0ZXN0LmN0eF9vdXQpO1xcbiA4OTA6XFx0XFx0aW50IGVyciA9IC1FRkFVTFQ7XFxuIDg5MTpcXHRcXHR1MzIgY29weV9zaXplID0gc2l6ZTtcXG4gODkyOlxcdFxcbiA4OTM6XFx0XFx0aWYgKCFkYXRhIHx8ICFkYXRhX291dClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTY6Mzc6MjQuMTA2Njc4MDgyWiIsIlNlcSI6NTEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ4OTk1MDc5NzQzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgVW5pbml0aWFsaXplZCBNZW1vcnkgQ29uY2VybnMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFdlJ3JlIGxvb2tpbmcgYXQgYSBwYXRjaCBjb25jZXJuaW5nIG1lbW9yeSBpbml0aWFsaXphdGlvbiB3aXRoaW4gdGhlIEJQRiBjb250ZXh0IGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggUkNVLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgS01TQU4gY29uY2VybnMuIEhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbkZpcnN0LCBJIGV4YW1pbmVkIGhvdyBgdXNlcl9jdHhgIGlzIGhhbmRsZWQuIEl0J3MgYWxsb2NhdGVkIHVzaW5nIGBremFsbG9jYCBpbiBgYnBmX2N0eF9pbml0YCwgc28gaXQncyBndWFyYW50ZWVkIHRvIGJlIHplcm9lZCBvdXQgZnJvbSB0aGUgc3RhcnQuIGBjdHhgIGlzIG9uIHRoZSBzdGFjaywgYW5kIHByb3Blcmx5IGluaXRpYWxpemVkIHRvIHplcm8uIGByZXRgIGFuZCBgZHVyYXRpb25gIGFyZSBhbHNvIGluaXRpYWxpemVkLiAgVGhlIGNvcmUgb2YgdGhlIHBhdGNoIGludm9sdmVzIG1vdmluZyBgdXNlcl9jdHgtXHUwMDNlY29va2llYCBhc3NpZ25tZW50IGFuZCBhIGBjdHguc2VsZWN0ZWRfc2tgIGRlcmVmZXJlbmNlICppbnNpZGUqIHRoZSBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24sIHdoaWNoIGlzIHRoZSBrZXkgdG8gcmVzb2x2aW5nIGFuIFJDVSBsaWZldGltZSBpc3N1ZS4gIElmIGByZXRgIGlzIG5lZ2F0aXZlLCB3ZSBpbW1lZGlhdGVseSBqdW1wIHRvIGBvdXRgLCBieXBhc3NpbmcgdGhlIHBvdGVudGlhbGx5IHByb2JsZW1hdGljIGNvZGUuIElmIGByZXRgIGlzIHBvc2l0aXZlLCB0aGVuIGBicGZfdGVzdF9maW5pc2hgIGFuZCBgYnBmX2N0eF9maW5pc2hgIGNvcHkgYHVzZXJfY3R4YCB0byB1c2Vyc3BhY2UuXG5cblRoZSBkaWZmJ3MgY29yZSBmb2N1cyBpcyBvbiBSQ1Ugc2FmZXR5IGFuZCBhZGRyZXNzZXMgYSBVQUYgaXNzdWUgcmVsYXRlZCB0byBkZXJlZmVyZW5jaW5nIGBjdHguc2VsZWN0ZWRfc2tgIGFmdGVyIGV4aXRpbmcgdGhlIFJDVSByZWFkIGNyaXRpY2FsIHNlY3Rpb24uIE5vIG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucywgcmVhZHMsIG9yIHBvdGVudGlhbCBsZWFrcyB0byB1c2Vyc3BhY2UgYXJlIGludHJvZHVjZWQuIEFueSBjb25jZXJucyBhcm91bmQgdGhlIHNvY2tldCBwb2ludGVyIGFyZSBVQUYvUkNVIHZpb2xhdGlvbnMgd2hpY2ggS0FTQU4vUFJPVkVfUkNVIHdvdWxkIGNhdGNoLlxuXG5Ob3csIGxldCdzIHJpZ29yb3VzbHkgY2hlY2sgdGhvc2UgS01TQU4tcmVsYXRlZCBjcml0ZXJpYTpcblxuMS4gICoqS2VybmVsIHN0cnVjdHVyZXMgdG8gdXNlcnNwYWNlKio6ICBgdXNlcl9jdHhgIGlzIGZ1bGx5IGluaXRpYWxpemVkIHdpdGggYGt6YWxsb2NgLCBhbmQgdGhlICpzYW1lKiBmaWVsZHMgYXJlIGluaXRpYWxpemVkIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIHBhdGNoLiBUaGUgY29kZSBtb3ZlbWVudCBkb2Vzbid0IGFsdGVyIHdoYXQgZ2V0cyBpbml0aWFsaXplZCBhbmQgY29waWVkLiBTbywgbm8gcHJvYmxlbSBoZXJlLlxuXG4yLiAgKipDb25kaXRpb25hbCBsb2dpYyBhbmQgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMqKjogIGByZXRgIGlzIGFsd2F5cyBzZXQgYnkgYGJwZl90ZXN0X3RpbWVyX2NvbnRpbnVlYCBvciBpbml0aWFsaXplZCB0byAtRUlOVkFMLCBzbyBpdCBpcyBhbHdheXMgYSB2YWxpZCB2YWx1ZS4gVGhpcyBpcyBmaW5lLlxuXG4zLiAgKipDb21wbGV4IGRhdGEgc3RydWN0dXJlcyoqOiBObyBuZXcgYWxsb2NhdGlvbnMgb3IgaW5pdGlhbGl6YXRpb24gY2hhbmdlcyBoYXZlIGhhcHBlbmVkIGluIHRoaXMgY2FzZS4gIFRoaXMgaXMgbm90IGFuIGlzc3VlLlxuXG40LiAgKipCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBldGMuKio6IFRoZSBjb2RlIGRvZXMgbm90IGludHJvZHVjZSBuZXcgY2hhbmdlcyB0byBib3VuZHMgY2hlY2tzIG9yIGxlbmd0aCBjaGVja3MuIFRoaXMgaXMgbm90IGFuIGlzc3VlLlxuXG5UaGVyZWZvcmUsIHRoaXMgcGF0Y2ggZG9lcyAqbm90KiBpbnRyb2R1Y2UgS01TQU4gY29uY2VybnMuIEl0J3MgYW4gUkNVIGxpZmV0aW1lIGZpeCwgcHVyZWx5LiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYCBhbmQgcHJvdmlkZSB0aGlzIGRldGFpbGVkIGJyZWFrZG93bi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA2MzgsIk91dHB1dFRva2VucyI6Mjk2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTk5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTY6NDU6MzQuMDU3NDc4MzVaIiwiU2VxIjo1MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODIwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBicGZfcHJvZ190ZXN0X3J1bl9za19sb29rdXAoKWAgaW4gYG5ldC9icGYvdGVzdF9ydW4uY2AgdG8gaW5zcGVjdCBgY3R4LnNlbGVjdGVkX3NrYCBhbmQgdXBkYXRlIGB1c2VyX2N0eC1cXHUwMDNlY29va2llYCBiZWZvcmUgY2FsbGluZyBgYnBmX3Rlc3RfdGltZXJfbGVhdmUoXFx1MDAyNnQpYCwgcmF0aGVyIHRoYW4gYWZ0ZXIgaXQuXFxuXFxuVGhpcyBjaGFuZ2UgZW5zdXJlcyB0aGF0IGBjdHguc2VsZWN0ZWRfc2tgIGlzIGFjY2Vzc2VkIHdoaWxlIHN0aWxsIHByb3RlY3RlZCBieSB0aGUgUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uIGVzdGFibGlzaGVkIGJ5IGBicGZfdGVzdF90aW1lcl9lbnRlcigpYC4gQWNjZXNzaW5nIGBjdHguc2VsZWN0ZWRfc2tgIGFmdGVyIHJlbGVhc2luZyBSQ1UgY291bGQgcmVzdWx0IGluIGEgdXNlLWFmdGVyLWZyZWUgb3IgUkNVIGRlcmVmZXJlbmNlIGJ1Zywgd2hpY2ggaXMgbW9uaXRvcmVkIGJ5IEtBU0FOIGFuZCBQUk9WRV9SQ1UgLyBMT0NLREVQLlxcblxcblRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzOlxcbi0gYHVzZXJfY3R4YCBpcyBhbGxvY2F0ZWQgdmlhIGBremFsbG9jKClgIGluIGBicGZfY3R4X2luaXQoKWAuXFxuLSBTdGFjayBzdHJ1Y3R1cmVzIHN1Y2ggYXMgYGN0eGAgYXJlIHplcm8taW5pdGlhbGl6ZWQgKGB7fWApLlxcbi0gVGhlIGNvbmRpdGlvbiBgcmV0IFxcdTAwM2U9IDBgIGNoZWNrcyBgcmV0YCB3aGljaCBpcyBpbml0aWFsaXplZC91cGRhdGVkIGJ5IGBicGZfdGVzdF90aW1lcl9jb250aW51ZSgpYC5cXG4tIE5vIG5ldyBidWZmZXJzLCB1bmluaXRpYWxpemVkIGZpZWxkcywgb3IgbWVtb3J5IGNvcGllcyBhcmUgaW50cm9kdWNlZC5cXG5cXG5UaGVyZWZvcmUsIHRoaXMgY2hhbmdlIGRvZXMgbm90IHdhcnJhbnQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBicGZfcHJvZ190ZXN0X3J1bl9za19sb29rdXAoKWAgaW4gYG5ldC9icGYvdGVzdF9ydW4uY2AgdG8gaW5zcGVjdCBgY3R4LnNlbGVjdGVkX3NrYCBhbmQgdXBkYXRlIGB1c2VyX2N0eC1cXHUwMDNlY29va2llYCBiZWZvcmUgY2FsbGluZyBgYnBmX3Rlc3RfdGltZXJfbGVhdmUoXFx1MDAyNnQpYCwgcmF0aGVyIHRoYW4gYWZ0ZXIgaXQuXFxuXFxuVGhpcyBjaGFuZ2UgZW5zdXJlcyB0aGF0IGBjdHguc2VsZWN0ZWRfc2tgIGlzIGFjY2Vzc2VkIHdoaWxlIHN0aWxsIHByb3RlY3RlZCBieSB0aGUgUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uIGVzdGFibGlzaGVkIGJ5IGBicGZfdGVzdF90aW1lcl9lbnRlcigpYC4gQWNjZXNzaW5nIGBjdHguc2VsZWN0ZWRfc2tgIGFmdGVyIHJlbGVhc2luZyBSQ1UgY291bGQgcmVzdWx0IGluIGEgdXNlLWFmdGVyLWZyZWUgb3IgUkNVIGRlcmVmZXJlbmNlIGJ1Zywgd2hpY2ggaXMgbW9uaXRvcmVkIGJ5IEtBU0FOIGFuZCBQUk9WRV9SQ1UgLyBMT0NLREVQLlxcblxcblRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzOlxcbi0gYHVzZXJfY3R4YCBpcyBhbGxvY2F0ZWQgdmlhIGBremFsbG9jKClgIGluIGBicGZfY3R4X2luaXQoKWAuXFxuLSBTdGFjayBzdHJ1Y3R1cmVzIHN1Y2ggYXMgYGN0eGAgYXJlIHplcm8taW5pdGlhbGl6ZWQgKGB7fWApLlxcbi0gVGhlIGNvbmRpdGlvbiBgcmV0IFxcdTAwM2U9IDBgIGNoZWNrcyBgcmV0YCB3aGljaCBpcyBpbml0aWFsaXplZC91cGRhdGVkIGJ5IGBicGZfdGVzdF90aW1lcl9jb250aW51ZSgpYC5cXG4tIE5vIG5ldyBidWZmZXJzLCB1bmluaXRpYWxpemVkIGZpZWxkcywgb3IgbWVtb3J5IGNvcGllcyBhcmUgaW50cm9kdWNlZC5cXG5cXG5UaGVyZWZvcmUsIHRoaXMgY2hhbmdlIGRvZXMgbm90IHdhcnJhbnQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflow6mn7m[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-29 15:38:15 +0000 UTC FinishedAt: 2026-08-29 16:45:35 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "cd35e1b10182c42b4ae31ee49119463b17d8ba7f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "NET", "INET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "cd35e1b10182c42b4ae31ee49119463b17d8ba7f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "NET", "INET" ], "series_id": "f481e888-ed1a-4e5e-8a6e-3cf810efafa9" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "bpf_prog_test_run_sk_lookup" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE1OjU2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NDhtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtORVQmIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9wcm9nX3Rlc3RfcnVuX3NrX2xvb2t1cCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBicGZfcHJvZ190ZXN0X3J1bl9za19sb29rdXAoKWAgaW4gYG5ldC9icGYvdGVzdF9ydW4uY2AgdG8gaW5zcGVjdCBgY3R4LnNlbGVjdGVkX3NrYCBhbmQgdXBkYXRlIGB1c2VyX2N0eC1cdTAwM2Vjb29raWVgIGJlZm9yZSBjYWxsaW5nIGBicGZfdGVzdF90aW1lcl9sZWF2ZShcdTAwMjZ0KWAsIHJhdGhlciB0aGFuIGFmdGVyIGl0LlxuXG5UaGlzIGNoYW5nZSBlbnN1cmVzIHRoYXQgYGN0eC5zZWxlY3RlZF9za2AgaXMgYWNjZXNzZWQgd2hpbGUgc3RpbGwgcHJvdGVjdGVkIGJ5IHRoZSBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24gZXN0YWJsaXNoZWQgYnkgYGJwZl90ZXN0X3RpbWVyX2VudGVyKClgLiBBY2Nlc3NpbmcgYGN0eC5zZWxlY3RlZF9za2AgYWZ0ZXIgcmVsZWFzaW5nIFJDVSBjb3VsZCByZXN1bHQgaW4gYSB1c2UtYWZ0ZXItZnJlZSBvciBSQ1UgZGVyZWZlcmVuY2UgYnVnLCB3aGljaCBpcyBtb25pdG9yZWQgYnkgS0FTQU4gYW5kIFBST1ZFX1JDVSAvIExPQ0tERVAuXG5cblRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzOlxuLSBgdXNlcl9jdHhgIGlzIGFsbG9jYXRlZCB2aWEgYGt6YWxsb2MoKWAgaW4gYGJwZl9jdHhfaW5pdCgpYC5cbi0gU3RhY2sgc3RydWN0dXJlcyBzdWNoIGFzIGBjdHhgIGFyZSB6ZXJvLWluaXRpYWxpemVkIChge31gKS5cbi0gVGhlIGNvbmRpdGlvbiBgcmV0IFx1MDAzZT0gMGAgY2hlY2tzIGByZXRgIHdoaWNoIGlzIGluaXRpYWxpemVkL3VwZGF0ZWQgYnkgYGJwZl90ZXN0X3RpbWVyX2NvbnRpbnVlKClgLlxuLSBObyBuZXcgYnVmZmVycywgdW5pbml0aWFsaXplZCBmaWVsZHMsIG9yIG1lbW9yeSBjb3BpZXMgYXJlIGludHJvZHVjZWQuXG5cblRoZXJlZm9yZSwgdGhpcyBjaGFuZ2UgZG9lcyBub3Qgd2FycmFudCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBicGZfcHJvZ190ZXN0X3J1bl9za19sb29rdXBgIHRvIGFjY2VzcyB0aGUgc2VsZWN0ZWQgc29ja2V0IGBjdHguc2VsZWN0ZWRfc2tgIHdpdGhpbiB0aGUgUkNVLXByb3RlY3RlZCBjcml0aWNhbCBzZWN0aW9uIGJlZm9yZSBjYWxsaW5nIGBicGZfdGVzdF90aW1lcl9sZWF2ZShcdTAwMjZ0KWAsIHByZXZlbnRpbmcgdXNlLWFmdGVyLWZyZWUgb3IgUkNVIHZpb2xhdGlvbnMuIFRoaXMgY29kZSBwYXRoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIGBCUEZfUFJPR19URVNUX1JVTmAgY29tbWFuZCBvZiB0aGUgYGJwZigpYCBzeXNjYWxsIG9uIHNrX2xvb2t1cCBCUEYgcHJvZ3JhbXMgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE1OjU2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYTM5NTc3YjJiM2NhZjYzMjllMmYzYTQ1MjYwZGUwNmExMTNkMjAxMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDI5IDE1OjU2OjM5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9icGYvdGVzdF9ydW4uYyBiL25ldC9icGYvdGVzdF9ydW4uY1xuaW5kZXggNWQ1MWY2Y2I3ZDE1NC4uZTY3N2VjMzM5MGUzNyAxMDA2NDRcbi0tLSBhL25ldC9icGYvdGVzdF9ydW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2JwZi90ZXN0X3J1bi5jXG5AQCAtMTY1MCwyMSAmIzQzOzE2NTAsMjEgQEAgaW50IGJwZl9wcm9nX3Rlc3RfcnVuX3NrX2xvb2t1cChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIGNvbnN0IHVuaW9uIGJwZl9hdHRyICprYXRcbiBcdFx0Y3R4LnNlbGVjdGVkX3NrID0gTlVMTDtcbiBcdFx0cmV0dmFsID0gQlBGX1BST0dfU0tfTE9PS1VQX1JVTl9BUlJBWShwcm9ncywgY3R4LCBicGZfcHJvZ19ydW4pO1xuIFx0fSB3aGlsZSAoYnBmX3Rlc3RfdGltZXJfY29udGludWUoXHUwMDI2dCwgMSwgcmVwZWF0LCBcdTAwMjZyZXQsIFx1MDAyNmR1cmF0aW9uKSk7XG4mIzQzO1xuJiM0MztcdGlmIChyZXQgXHUwMDNlPSAwKSB7XG4mIzQzO1x0XHR1c2VyX2N0eC1cdTAwM2Vjb29raWUgPSAwO1xuJiM0MztcdFx0aWYgKGN0eC5zZWxlY3RlZF9zaykge1xuJiM0MztcdFx0XHRpZiAoY3R4LnNlbGVjdGVkX3NrLVx1MDAzZXNrX3JldXNlcG9ydCBcdTAwMjZcdTAwMjYgIWN0eC5ub19yZXVzZXBvcnQpXG4mIzQzO1x0XHRcdFx0cmV0ID0gLUVPUE5PVFNVUFA7XG4mIzQzO1x0XHRcdGVsc2VcbiYjNDM7XHRcdFx0XHR1c2VyX2N0eC1cdTAwM2Vjb29raWUgPSBzb2NrX2dlbl9jb29raWUoY3R4LnNlbGVjdGVkX3NrKTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4gXHRicGZfdGVzdF90aW1lcl9sZWF2ZShcdTAwMjZ0KTtcbiBcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdGdvdG8gb3V0O1xuIFxuLVx0dXNlcl9jdHgtXHUwMDNlY29va2llID0gMDtcbi1cdGlmIChjdHguc2VsZWN0ZWRfc2spIHtcbi1cdFx0aWYgKGN0eC5zZWxlY3RlZF9zay1cdTAwM2Vza19yZXVzZXBvcnQgXHUwMDI2XHUwMDI2ICFjdHgubm9fcmV1c2Vwb3J0KSB7XG4tXHRcdFx0cmV0ID0gLUVPUE5PVFNVUFA7XG4tXHRcdFx0Z290byBvdXQ7XG4tXHRcdH1cbi1cbi1cdFx0dXNlcl9jdHgtXHUwMDNlY29va2llID0gc29ja19nZW5fY29va2llKGN0eC5zZWxlY3RlZF9zayk7XG4tXHR9XG4tXG4gXHRyZXQgPSBicGZfdGVzdF9maW5pc2goa2F0dHIsIHVhdHRyLCBOVUxMLCBOVUxMLCAwLCAwLCByZXR2YWwsIGR1cmF0aW9uKTtcbiBcdGlmICghcmV0KVxuIFx0XHRyZXQgPSBicGZfY3R4X2ZpbmlzaChrYXR0ciwgdWF0dHIsIHVzZXJfY3R4LCBzaXplb2YoKnVzZXJfY3R4KSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTU6NTY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MzJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O05FVCYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX3Byb2dfdGVzdF9ydW5fc2tfbG9va3VwJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBicGZfcHJvZ190ZXN0X3J1bl9za19sb29rdXBgIHRvIGFjY2VzcyB0aGUgc2VsZWN0ZWQgc29ja2V0IGBjdHguc2VsZWN0ZWRfc2tgIHdpdGhpbiB0aGUgUkNVLXByb3RlY3RlZCBjcml0aWNhbCBzZWN0aW9uIGJlZm9yZSBjYWxsaW5nIGBicGZfdGVzdF90aW1lcl9sZWF2ZShcdTAwMjZ0KWAsIHByZXZlbnRpbmcgdXNlLWFmdGVyLWZyZWUgb3IgUkNVIHZpb2xhdGlvbnMuIFRoaXMgY29kZSBwYXRoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIGBCUEZfUFJPR19URVNUX1JVTmAgY29tbWFuZCBvZiB0aGUgYGJwZigpYCBzeXNjYWxsIG9uIHNrX2xvb2t1cCBCUEYgcHJvZ3JhbXMgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYTM5NTc3YjJiM2NhZjYzMjllMmYzYTQ1MjYwZGUwNmExMTNkMjAxMQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgQXVnIDI5IDE1OjU2OjM5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2JwZi90ZXN0X3J1bi5jIGIvbmV0L2JwZi90ZXN0X3J1bi5jCmluZGV4IDVkNTFmNmNiN2QxNTQuLmU2NzdlYzMzOTBlMzcgMTAwNjQ0Ci0tLSBhL25ldC9icGYvdGVzdF9ydW4uYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvYnBmL3Rlc3RfcnVuLmMKQEAgLTE2NTAsMjEgJiM0MzsxNjUwLDIxIEBAIGludCBicGZfcHJvZ190ZXN0X3J1bl9za19sb29rdXAoc3RydWN0IGJwZl9wcm9nICpwcm9nLCBjb25zdCB1bmlvbiBicGZfYXR0ciAqa2F0CiAJCWN0eC5zZWxlY3RlZF9zayA9IE5VTEw7CiAJCXJldHZhbCA9IEJQRl9QUk9HX1NLX0xPT0tVUF9SVU5fQVJSQVkocHJvZ3MsIGN0eCwgYnBmX3Byb2dfcnVuKTsKIAl9IHdoaWxlIChicGZfdGVzdF90aW1lcl9jb250aW51ZSgmYW1wO3QsIDEsIHJlcGVhdCwgJmFtcDtyZXQsICZhbXA7ZHVyYXRpb24pKTsKJiM0MzsKJiM0MzsJaWYgKHJldCAmZ3Q7PSAwKSB7CiYjNDM7CQl1c2VyX2N0eC0mZ3Q7Y29va2llID0gMDsKJiM0MzsJCWlmIChjdHguc2VsZWN0ZWRfc2spIHsKJiM0MzsJCQlpZiAoY3R4LnNlbGVjdGVkX3NrLSZndDtza19yZXVzZXBvcnQgJmFtcDsmYW1wOyAhY3R4Lm5vX3JldXNlcG9ydCkKJiM0MzsJCQkJcmV0ID0gLUVPUE5PVFNVUFA7CiYjNDM7CQkJZWxzZQomIzQzOwkJCQl1c2VyX2N0eC0mZ3Q7Y29va2llID0gc29ja19nZW5fY29va2llKGN0eC5zZWxlY3RlZF9zayk7CiYjNDM7CQl9CiYjNDM7CX0KIAlicGZfdGVzdF90aW1lcl9sZWF2ZSgmYW1wO3QpOwogCiAJaWYgKHJldCAmbHQ7IDApCiAJCWdvdG8gb3V0OwogCi0JdXNlcl9jdHgtJmd0O2Nvb2tpZSA9IDA7Ci0JaWYgKGN0eC5zZWxlY3RlZF9zaykgewotCQlpZiAoY3R4LnNlbGVjdGVkX3NrLSZndDtza19yZXVzZXBvcnQgJmFtcDsmYW1wOyAhY3R4Lm5vX3JldXNlcG9ydCkgewotCQkJcmV0ID0gLUVPUE5PVFNVUFA7Ci0JCQlnb3RvIG91dDsKLQkJfQotCi0JCXVzZXJfY3R4LSZndDtjb29raWUgPSBzb2NrX2dlbl9jb29raWUoY3R4LnNlbGVjdGVkX3NrKTsKLQl9Ci0KIAlyZXQgPSBicGZfdGVzdF9maW5pc2goa2F0dHIsIHVhdHRyLCBOVUxMLCBOVUxMLCAwLCAwLCByZXR2YWwsIGR1cmF0aW9uKTsKIAlpZiAoIXJldCkKIAkJcmV0ID0gYnBmX2N0eF9maW5pc2goa2F0dHIsIHVhdHRyLCB1c2VyX2N0eCwgc2l6ZW9mKCp1c2VyX2N0eCkpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxNTo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzg4CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogODkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhpbmtpbmcgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIEJQRiBUZXN0IFJ1bm5lcioqCgpPa2F5LCB0aW1lIHRvIGdldCB0byB3b3JrLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoaXMgY2hhbmdlLCBzbyBsZXQmIzM5O3Mgc3RhcnQgYnkgZGlnZ2luZyBpbnRvIHRoZSBkaWZmLiBJJiMzOTttIHNwZWNpZmljYWxseSBpbnRlcmVzdGVkIGluIGNoYW5nZXMgbWFkZSB0byBgbmV0L2JwZi90ZXN0X3J1bi5jYCwgZXNwZWNpYWxseSB3aXRoaW4gdGhlIGBicGZfcHJvZ190ZXN0X3J1bl9za19sb29rdXBgIGZ1bmN0aW9uLiBJIHJlbWVtYmVyIHdvcmtpbmcgd2l0aCB0aGlzIGFyZWEgYmVmb3JlLCBzbyBJIGhhdmUgYSBnZW5lcmFsIHNlbnNlIG9mIHRoZSB0ZXN0IGZyYW1ld29yayYjMzk7cyBzdHJ1Y3R1cmUuIFRvIGdldCBhIGNvbXByZWhlbnNpdmUgdmlldywgSSYjMzk7bGwgbmVlZCB0aGUgc3Vycm91bmRpbmcgY29kZS4gTXkgbmV4dCBzdGVwIGlzIHRvIGxvY2F0ZSBsaW5lIDE2NTAgaW4gYG5ldC9icGYvdGVzdF9ydW4uY2AsIHRoYXQgd2lsbCBsZXQgbWUgZ3Jhc3AgdGhlIGZ1bmN0aW9uJiMzOTtzIGZ1bGwgY29udGV4dCBhbmQgdGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhlIG1vZGlmaWNhdGlvbnMuIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBgc2tfbG9va3VwYCBvcGVyYXRpb24gaXMgYmVpbmcgdGVzdGVkIHdpdGhpbiB0aGUgQlBGIGZyYW1ld29yayB0byBncmFzcCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSBjaGFuZ2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE1OjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2JwZi90ZXN0X3J1bi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTYyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA3MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNjIwOlx0XHRjdHguc3BvcnQgPSB1c2VyX2N0eC1cdTAwM2VyZW1vdGVfcG9ydDtcbjE2MjE6XHRcbjE2MjI6XHRcdHN3aXRjaCAoY3R4LmZhbWlseSkge1xuMTYyMzpcdFx0Y2FzZSBBRl9JTkVUOlxuMTYyNDpcdFx0XHRjdHgudjQuZGFkZHIgPSAoX19mb3JjZSBfX2JlMzIpdXNlcl9jdHgtXHUwMDNlbG9jYWxfaXA0O1xuMTYyNTpcdFx0XHRjdHgudjQuc2FkZHIgPSAoX19mb3JjZSBfX2JlMzIpdXNlcl9jdHgtXHUwMDNlcmVtb3RlX2lwNDtcbjE2MjY6XHRcdFx0YnJlYWs7XG4xNjI3Olx0XG4xNjI4Olx0I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG4xNjI5Olx0XHRjYXNlIEFGX0lORVQ2OlxuMTYzMDpcdFx0XHRjdHgudjYuZGFkZHIgPSAoc3RydWN0IGluNl9hZGRyICopdXNlcl9jdHgtXHUwMDNlbG9jYWxfaXA2O1xuMTYzMTpcdFx0XHRjdHgudjYuc2FkZHIgPSAoc3RydWN0IGluNl9hZGRyICopdXNlcl9jdHgtXHUwMDNlcmVtb3RlX2lwNjtcbjE2MzI6XHRcdFx0YnJlYWs7XG4xNjMzOlx0I2VuZGlmXG4xNjM0Olx0XG4xNjM1Olx0XHRkZWZhdWx0OlxuMTYzNjpcdFx0XHRyZXQgPSAtRUFGTk9TVVBQT1JUO1xuMTYzNzpcdFx0XHRnb3RvIG91dDtcbjE2Mzg6XHRcdH1cbjE2Mzk6XHRcbjE2NDA6XHRcdHByb2dzID0gYnBmX3Byb2dfYXJyYXlfYWxsb2MoMSwgR0ZQX0tFUk5FTCk7XG4xNjQxOlx0XHRpZiAoIXByb2dzKSB7XG4xNjQyOlx0XHRcdHJldCA9IC1FTk9NRU07XG4xNjQzOlx0XHRcdGdvdG8gb3V0O1xuMTY0NDpcdFx0fVxuMTY0NTpcdFxuMTY0NjpcdFx0cHJvZ3MtXHUwMDNlaXRlbXNbMF0ucHJvZyA9IHByb2c7XG4xNjQ3Olx0XG4xNjQ4Olx0XHRicGZfdGVzdF90aW1lcl9lbnRlcihcdTAwMjZ0KTtcbjE2NDk6XHRcdGRvIHtcbjE2NTA6XHRcdFx0Y3R4LnNlbGVjdGVkX3NrID0gTlVMTDtcbjE2NTE6XHRcdFx0cmV0dmFsID0gQlBGX1BST0dfU0tfTE9PS1VQX1JVTl9BUlJBWShwcm9ncywgY3R4LCBicGZfcHJvZ19ydW4pO1xuMTY1MjpcdFx0fSB3aGlsZSAoYnBmX3Rlc3RfdGltZXJfY29udGludWUoXHUwMDI2dCwgMSwgcmVwZWF0LCBcdTAwMjZyZXQsIFx1MDAyNmR1cmF0aW9uKSk7XG4xNjUzOlx0XG4xNjU0Olx0XHRpZiAocmV0IFx1MDAzZT0gMCkge1xuMTY1NTpcdFx0XHR1c2VyX2N0eC1cdTAwM2Vjb29raWUgPSAwO1xuMTY1NjpcdFx0XHRpZiAoY3R4LnNlbGVjdGVkX3NrKSB7XG4xNjU3Olx0XHRcdFx0aWYgKGN0eC5zZWxlY3RlZF9zay1cdTAwM2Vza19yZXVzZXBvcnQgXHUwMDI2XHUwMDI2ICFjdHgubm9fcmV1c2Vwb3J0KVxuMTY1ODpcdFx0XHRcdFx0cmV0ID0gLUVPUE5PVFNVUFA7XG4xNjU5Olx0XHRcdFx0ZWxzZVxuMTY2MDpcdFx0XHRcdFx0dXNlcl9jdHgtXHUwMDNlY29va2llID0gc29ja19nZW5fY29va2llKGN0eC5zZWxlY3RlZF9zayk7XG4xNjYxOlx0XHRcdH1cbjE2NjI6XHRcdH1cbjE2NjM6XHRcdGJwZl90ZXN0X3RpbWVyX2xlYXZlKFx1MDAyNnQpO1xuMTY2NDpcdFxuMTY2NTpcdFx0aWYgKHJldCBcdTAwM2MgMClcbjE2NjY6XHRcdFx0Z290byBvdXQ7XG4xNjY3Olx0XG4xNjY4Olx0XHRyZXQgPSBicGZfdGVzdF9maW5pc2goa2F0dHIsIHVhdHRyLCBOVUxMLCBOVUxMLCAwLCAwLCByZXR2YWwsIGR1cmF0aW9uKTtcbjE2Njk6XHRcdGlmICghcmV0KVxuMTY3MDpcdFx0XHRyZXQgPSBicGZfY3R4X2ZpbmlzaChrYXR0ciwgdWF0dHIsIHVzZXJfY3R4LCBzaXplb2YoKnVzZXJfY3R4KSk7XG4xNjcxOlx0XG4xNjcyOlx0b3V0OlxuMTY3MzpcdFx0YnBmX3Byb2dfYXJyYXlfZnJlZShwcm9ncyk7XG4xNjc0Olx0XHRrZnJlZSh1c2VyX2N0eCk7XG4xNjc1Olx0XHRyZXR1cm4gcmV0O1xuMTY3NjpcdH1cbjE2Nzc6XHRcbjE2Nzg6XHRpbnQgYnBmX3Byb2dfdGVzdF9ydW5fc3lzY2FsbChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXG4xNjc5Olx0XHRcdFx0ICAgICAgY29uc3QgdW5pb24gYnBmX2F0dHIgKmthdHRyLFxuMTY4MDpcdFx0XHRcdCAgICAgIHVuaW9uIGJwZl9hdHRyIF9fdXNlciAqdWF0dHIpXG4xNjgxOlx0e1xuMTY4MjpcdFx0dm9pZCBfX3VzZXIgKmN0eF9pbiA9IHU2NF90b191c2VyX3B0cihrYXR0ci1cdTAwM2V0ZXN0LmN0eF9pbik7XG4xNjgzOlx0XHRfX3UzMiBjdHhfc2l6ZV9pbiA9IGthdHRyLVx1MDAzZXRlc3QuY3R4X3NpemVfaW47XG4xNjg0Olx0XHR2b2lkICpjdHggPSBOVUxMO1xuMTY4NTpcdFx0dTMyIHJldHZhbDtcbjE2ODY6XHRcdGludCBlcnIgPSAwO1xuMTY4NzpcdFxuMTY4ODpcdFx0LyogZG9lc24mIzM5O3Qgc3VwcG9ydCBkYXRhX2luL291dCwgY3R4X291dCwgZHVyYXRpb24sIG9yIHJlcGVhdCBvciBmbGFncyAqL1xuMTY4OTpcdFx0aWYgKGthdHRyLVx1MDAzZXRlc3QuZGF0YV9pbiB8fCBrYXR0ci1cdTAwM2V0ZXN0LmRhdGFfb3V0IHx8XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTU6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzgzMAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIGRpc3NlY3RpbmcgdGhvc2UgQlBGIHRpbWVyIGZ1bmN0aW9ucywgZnJhbWVkIGFzIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyBCUEYgVGltZXIgRW50cnkgYW5kIEV4aXQgRnVuY3Rpb25zKioKCkFscmlnaHQsIHNvIEkmIzM5O20gY3VyaW91cyBhYm91dCB0aGUgc3BlY2lmaWMgbWVjaGFuaWNzIG9mIGBicGZfdGVzdF90aW1lcl9lbnRlcmAgYW5kIGBicGZfdGVzdF90aW1lcl9sZWF2ZWAuIEkmIzM5O3ZlIHNlZW4gdGhlc2UgZnVuY3Rpb25zIHVzZWQgaW4gdGhlIGNvbnRleHQgb2YgQlBGIHRlc3RpbmcsIGFuZCBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGVpciByb2xlIHdpdGhpbiB0aGUgYnJvYWRlciBCUEYgZnJhbWV3b3JrLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gY2hlY2sgdGhlaXIgaW1wbGVtZW50YXRpb24gZGV0YWlscy4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBkZWZpbml0aW9ucyBhbmQgdXNhZ2Ugb2YgdGhvc2UgZnVuY3Rpb25zLiBHaXZlbiB0aGUgbGlrZWx5IGFyZWEgb2YgZnVuY3Rpb25hbGl0eSwgSSB0aGluayB0aGV5IHdpbGwgbW9zdCBsaWtlbHkgYmUgcmVsYXRlZCB0byB0ZXN0IGhhcm5lc3Nlcywgd2hpY2ggc3VnZ2VzdHMgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IG15IHNlYXJjaCBpcyB3aXRoaW4gdGhlIGtlcm5lbCYjMzk7cyB0ZXN0aW5nIGluZnJhc3RydWN0dXJlLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBCUEYtcmVsYXRlZCBmaWxlcy4gVGhlcmVmb3JlLCBteSBmaXJzdCB0aG91Z2h0IGlzIHRvIGNoZWNrIGBuZXQvYnBmL3Rlc3RfcnVuLmNgLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBkZXRhaWxlZCBpbXBsZW1lbnRhdGlvbiBhbmQgY29udGV4dCBJIG5lZWQuIFRpbWUgdG8gZ2V0IHRvIGl0IQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE1OjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl90ZXN0X3RpbWVyXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9icGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9icGYvdGVzdF9ydW4uYz0zMT1zdHJ1Y3QgYnBmX3Rlc3RfdGltZXIge1xuLS1cbm5ldC9icGYvdGVzdF9ydW4uYy0zNS1cbm5ldC9icGYvdGVzdF9ydW4uYzozNjpzdGF0aWMgdm9pZCBicGZfdGVzdF90aW1lcl9lbnRlcihzdHJ1Y3QgYnBmX3Rlc3RfdGltZXIgKnQpXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMzctXHRfX2FjcXVpcmVzKHJjdSlcbi0tXG5uZXQvYnBmL3Rlc3RfcnVuLmMtNDItXG5uZXQvYnBmL3Rlc3RfcnVuLmM6NDM6c3RhdGljIHZvaWQgYnBmX3Rlc3RfdGltZXJfbGVhdmUoc3RydWN0IGJwZl90ZXN0X3RpbWVyICp0KVxubmV0L2JwZi90ZXN0X3J1bi5jLTQ0LVx0X19yZWxlYXNlcyhyY3UpXG4tLVxubmV0L2JwZi90ZXN0X3J1bi5jLTQ5LVxubmV0L2JwZi90ZXN0X3J1bi5jOjUwOnN0YXRpYyBib29sIGJwZl90ZXN0X3RpbWVyX2NvbnRpbnVlKHN0cnVjdCBicGZfdGVzdF90aW1lciAqdCwgaW50IGl0ZXJhdGlvbnMsXG5uZXQvYnBmL3Rlc3RfcnVuLmMtNTEtXHRcdFx0XHQgICAgdTMyIHJlcGVhdCwgaW50ICplcnIsIHUzMiAqZHVyYXRpb24pXG4tLVxubmV0L2JwZi90ZXN0X3J1bi5jLTcyLVx0XHR0LVx1MDAzZXRpbWVfc3BlbnQgJiM0Mzs9IGt0aW1lX2dldF9ucygpIC0gdC1cdTAwM2V0aW1lX3N0YXJ0O1xubmV0L2JwZi90ZXN0X3J1bi5jOjczOlx0XHRicGZfdGVzdF90aW1lcl9sZWF2ZSh0KTtcbm5ldC9icGYvdGVzdF9ydW4uYy03NC1cdFx0Y29uZF9yZXNjaGVkKCk7XG5uZXQvYnBmL3Rlc3RfcnVuLmM6NzU6XHRcdGJwZl90ZXN0X3RpbWVyX2VudGVyKHQpO1xubmV0L2JwZi90ZXN0X3J1bi5jLTc2LVx0fVxuLS1cbm5ldC9icGYvdGVzdF9ydW4uYz0zNjA9c3RhdGljIGludCBicGZfdGVzdF9ydW5feGRwX2xpdmUoc3RydWN0IGJwZl9wcm9nICpwcm9nLCBzdHJ1Y3QgeGRwX2J1ZmYgKmN0eCxcbi0tXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMzc0LVxubmV0L2JwZi90ZXN0X3J1bi5jOjM3NTpcdGJwZl90ZXN0X3RpbWVyX2VudGVyKFx1MDAyNnQpO1xubmV0L2JwZi90ZXN0X3J1bi5jLTM3Ni1cdGRvIHtcbi0tXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMzgwLVx0XHRcdGJyZWFrO1xubmV0L2JwZi90ZXN0X3J1bi5jOjM4MTpcdH0gd2hpbGUgKGJwZl90ZXN0X3RpbWVyX2NvbnRpbnVlKFx1MDAyNnQsIHhkcC5mcmFtZV9jbnQsIHJlcGVhdCwgXHUwMDI2cmV0LCB0aW1lKSk7XG5uZXQvYnBmL3Rlc3RfcnVuLmM6MzgyOlx0YnBmX3Rlc3RfdGltZXJfbGVhdmUoXHUwMDI2dCk7XG5uZXQvYnBmL3Rlc3RfcnVuLmMtMzgzLVxuLS1cbm5ldC9icGYvdGVzdF9ydW4uYz0zODg9c3RhdGljIGludCBicGZfdGVzdF9ydW4oc3RydWN0IGJwZl9wcm9nICpwcm9nLCB2b2lkICpjdHgsIHUzMiByZXBlYXQsXG4tLVxubmV0L2JwZi90ZXN0X3J1bi5jLTQxMS1cbm5ldC9icGYvdGVzdF9ydW4uYzo0MTI6XHRicGZfdGVzdF90aW1lcl9lbnRlcihcdTAwMjZ0KTtcbm5ldC9icGYvdGVzdF9ydW4uYy00MTMtXHRvbGRfY3R4ID0gYnBmX3NldF9ydW5fY3R4KFx1MDAyNnJ1bl9jdHgucnVuX2N0eCk7XG4tLVxubmV0L2JwZi90ZXN0X3J1bi5jLTQyNS1cdFx0bG9jYWxfYmhfZW5hYmxlKCk7XG5uZXQvYnBmL3Rlc3RfcnVuLmM6NDI2Olx0fSB3aGlsZSAoYnBmX3Rlc3RfdGltZXJfY29udGludWUoXHUwMDI2dCwgMSwgcmVwZWF0LCBcdTAwMjZyZXQsIHRpbWUpKTtcbm5ldC9icGYvdGVzdF9ydW4uYy00MjctXHRicGZfcmVzZXRfcnVuX2N0eChvbGRfY3R4KTtcbm5ldC9icGYvdGVzdF9ydW4uYzo0Mjg6XHRicGZfdGVzdF90aW1lcl9sZWF2ZShcdTAwMjZ0KTtcbm5ldC9icGYvdGVzdF9ydW4uYy00MjktXG4tLVxubmV0L2JwZi90ZXN0X3J1bi5jPTE1MDk9aW50IGJwZl9wcm9nX3Rlc3RfcnVuX2Zsb3dfZGlzc2VjdG9yKHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbi0tXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTU1NS1cbm5ldC9icGYvdGVzdF9ydW4uYzoxNTU2Olx0YnBmX3Rlc3RfdGltZXJfZW50ZXIoXHUwMDI2dCk7XG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTU1Ny1cdGRvIHtcbi0tXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTU1OS1cdFx0XHRcdFx0ICBzaXplLCBmbGFncyk7XG5uZXQvYnBmL3Rlc3RfcnVuLmM6MTU2MDpcdH0gd2hpbGUgKGJwZl90ZXN0X3RpbWVyX2NvbnRpbnVlKFx1MDAyNnQsIDEsIHJlcGVhdCwgXHUwMDI2cmV0LCBcdTAwMjZkdXJhdGlvbikpO1xubmV0L2JwZi90ZXN0X3J1bi5jOjE1NjE6XHRicGZfdGVzdF90aW1lcl9sZWF2ZShcdTAwMjZ0KTtcbm5ldC9icGYvdGVzdF9ydW4uYy0xNTYyLVxuLS1cbm5ldC9icGYvdGVzdF9ydW4uYz0xNTc4PWludCBicGZfcHJvZ190ZXN0X3J1bl9za19sb29rdXAoc3RydWN0IGJwZl9wcm9nICpwcm9nLCBjb25zdCB1bmlvbiBicGZfYXR0ciAqa2F0dHIsXG4tLVxubmV0L2JwZi90ZXN0X3J1bi5jLTE2NDctXG5uZXQvYnBmL3Rlc3RfcnVuLmM6MTY0ODpcdGJwZl90ZXN0X3RpbWVyX2VudGVyKFx1MDAyNnQpO1xubmV0L2JwZi90ZXN0X3J1bi5jLTE2NDktXHRkbyB7XG4tLVxubmV0L2JwZi90ZXN0X3J1bi5jLTE2NTEtXHRcdHJldHZhbCA9IEJQRl9QUk9HX1NLX0xPT0tVUF9SVU5fQVJSQVkocHJvZ3MsIGN0eCwgYnBmX3Byb2dfcnVuKTtcbm5ldC9icGYvdGVzdF9ydW4uYzoxNjUyOlx0fSB3aGlsZSAoYnBmX3Rlc3RfdGltZXJfY29udGludWUoXHUwMDI2dCwgMSwgcmVwZWF0LCBcdTAwMjZyZXQsIFx1MDAyNmR1cmF0aW9uKSk7XG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTY1My1cbi0tXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTY2Mi1cdH1cbm5ldC9icGYvdGVzdF9ydW4uYzoxNjYzOlx0YnBmX3Rlc3RfdGltZXJfbGVhdmUoXHUwMDI2dCk7XG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTY2NC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxNTo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NTM4CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGdyYW51bGFyIG1lY2hhbmljcyBvZiB0aGVzZSBCUEYgdGltZXIgZnVuY3Rpb25zLiBTcGVjaWZpY2FsbHksIGBicGZfdGVzdF90aW1lcl9lbnRlcmAgYW5kIGBicGZfdGVzdF90aW1lcl9sZWF2ZWAuIEkmIzM5O20gZ29pbmcgdG8gaGVhZCBvdmVyIHRvIHRoZSBgbmV0L2JwZi90ZXN0X3J1bi5jYCBmaWxlIGFuZCB6ZXJvIGluIG9uIGxpbmVzIDMwIHRocm91Z2ggODAuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGNvcmUgbG9naWMgYW5kIGFueSBjcml0aWNhbCBpbnRlcmFjdGlvbnMgd2l0aGluIHRoYXQgc2VnbWVudC4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCYjMzk7cyBoYXBwZW5pbmcgYXQgdGhpcyBsZXZlbCBvZiBkZXRhaWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTU6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvYnBmL3Rlc3RfcnVuLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDMwOlx0XG4gIDMxOlx0c3RydWN0IGJwZl90ZXN0X3RpbWVyIHtcbiAgMzI6XHRcdHUzMiBpO1xuICAzMzpcdFx0dTY0IHRpbWVfc3RhcnQsIHRpbWVfc3BlbnQ7XG4gIDM0Olx0fTtcbiAgMzU6XHRcbiAgMzY6XHRzdGF0aWMgdm9pZCBicGZfdGVzdF90aW1lcl9lbnRlcihzdHJ1Y3QgYnBmX3Rlc3RfdGltZXIgKnQpXG4gIDM3Olx0XHRfX2FjcXVpcmVzKHJjdSlcbiAgMzg6XHR7XG4gIDM5Olx0XHRyY3VfcmVhZF9sb2NrX2RvbnRfbWlncmF0ZSgpO1xuICA0MDpcdFx0dC1cdTAwM2V0aW1lX3N0YXJ0ID0ga3RpbWVfZ2V0X25zKCk7XG4gIDQxOlx0fVxuICA0MjpcdFxuICA0MzpcdHN0YXRpYyB2b2lkIGJwZl90ZXN0X3RpbWVyX2xlYXZlKHN0cnVjdCBicGZfdGVzdF90aW1lciAqdClcbiAgNDQ6XHRcdF9fcmVsZWFzZXMocmN1KVxuICA0NTpcdHtcbiAgNDY6XHRcdHQtXHUwMDNldGltZV9zdGFydCA9IDA7XG4gIDQ3Olx0XHRyY3VfcmVhZF91bmxvY2tfbWlncmF0ZSgpO1xuICA0ODpcdH1cbiAgNDk6XHRcbiAgNTA6XHRzdGF0aWMgYm9vbCBicGZfdGVzdF90aW1lcl9jb250aW51ZShzdHJ1Y3QgYnBmX3Rlc3RfdGltZXIgKnQsIGludCBpdGVyYXRpb25zLFxuICA1MTpcdFx0XHRcdFx0ICAgIHUzMiByZXBlYXQsIGludCAqZXJyLCB1MzIgKmR1cmF0aW9uKVxuICA1MjpcdFx0X19tdXN0X2hvbGQocmN1KVxuICA1MzpcdHtcbiAgNTQ6XHRcdHQtXHUwMDNlaSAmIzQzOz0gaXRlcmF0aW9ucztcbiAgNTU6XHRcdGlmICh0LVx1MDAzZWkgXHUwMDNlPSByZXBlYXQpIHtcbiAgNTY6XHRcdFx0LyogV2UmIzM5O3JlIGRvbmUuICovXG4gIDU3Olx0XHRcdHQtXHUwMDNldGltZV9zcGVudCAmIzQzOz0ga3RpbWVfZ2V0X25zKCkgLSB0LVx1MDAzZXRpbWVfc3RhcnQ7XG4gIDU4Olx0XHRcdGRvX2Rpdih0LVx1MDAzZXRpbWVfc3BlbnQsIHQtXHUwMDNlaSk7XG4gIDU5Olx0XHRcdCpkdXJhdGlvbiA9IHQtXHUwMDNldGltZV9zcGVudCBcdTAwM2UgVTMyX01BWCA/IFUzMl9NQVggOiAodTMyKXQtXHUwMDNldGltZV9zcGVudDtcbiAgNjA6XHRcdFx0KmVyciA9IDA7XG4gIDYxOlx0XHRcdGdvdG8gcmVzZXQ7XG4gIDYyOlx0XHR9XG4gIDYzOlx0XG4gIDY0Olx0XHRpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHtcbiAgNjU6XHRcdFx0LyogRHVyaW5nIGl0ZXJhdGlvbjogd2UmIzM5O3ZlIGJlZW4gY2FuY2VsbGVkLCBhYm9ydC4gKi9cbiAgNjY6XHRcdFx0KmVyciA9IC1FSU5UUjtcbiAgNjc6XHRcdFx0Z290byByZXNldDtcbiAgNjg6XHRcdH1cbiAgNjk6XHRcbiAgNzA6XHRcdGlmIChuZWVkX3Jlc2NoZWQoKSkge1xuICA3MTpcdFx0XHQvKiBEdXJpbmcgaXRlcmF0aW9uOiB3ZSBuZWVkIHRvIHJlc2NoZWR1bGUgYmV0d2VlbiBydW5zLiAqL1xuICA3MjpcdFx0XHR0LVx1MDAzZXRpbWVfc3BlbnQgJiM0Mzs9IGt0aW1lX2dldF9ucygpIC0gdC1cdTAwM2V0aW1lX3N0YXJ0O1xuICA3MzpcdFx0XHRicGZfdGVzdF90aW1lcl9sZWF2ZSh0KTtcbiAgNzQ6XHRcdFx0Y29uZF9yZXNjaGVkKCk7XG4gIDc1Olx0XHRcdGJwZl90ZXN0X3RpbWVyX2VudGVyKHQpO1xuICA3NjpcdFx0fVxuICA3NzpcdFxuICA3ODpcdFx0LyogRG8gYW5vdGhlciByb3VuZC4gKi9cbiAgNzk6XHRcdHJldHVybiB0cnVlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE1OjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4zbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY0NDAKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAzNzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBCUEYgU29ja2V0IExvb2t1cCBUZXN0KioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgYnBmX3Byb2dfdGVzdF9ydW5fc2tfbG9va3VwYCBmdW5jdGlvbi4gU2VlbXMgbGlrZSB0aGUgY29yZSBpc3N1ZSBoZXJlIHJldm9sdmVzIGFyb3VuZCBob3cgYGN0eC5zZWxlY3RlZF9za2AgaXMgaGFuZGxlZCBpbiB0aGUgY29udGV4dCBvZiBCUEYgc29ja2V0IGxvb2t1cCBwcm9ncmFtcywgcGFydGljdWxhcmx5IHdoZW4gdXNpbmcgYGJwZl9za19hc3NpZ25gLiBUaGUgcHJvZ3JhbSBzZXRzIGBjdHguc2VsZWN0ZWRfc2tgLCB0aGF0JiMzOTtzIGZpbmUuIFRoZSBjcml0aWNhbCBwYXJ0IGlzIHRoYXQgdGhpcyBzb2NrZXQgaXMgdGhlbiBhY2Nlc3NlZCAqd2l0aGluKiBhbiBSQ1UgY3JpdGljYWwgc2VjdGlvbiwgc3BlY2lmaWNhbGx5IGJldHdlZW4gdGhlIGBicGZfdGVzdF90aW1lcl9lbnRlcmAgYW5kIGBicGZfdGVzdF90aW1lcl9sZWF2ZWAgY2FsbHMuIFRoaXMgaXMgd2hlcmUgdGhpbmdzIGdldCBpbnRlcmVzdGluZy4KCkJlZm9yZSB0aGlzIHBhdGNoLCB0aGUgY29kZSBjYWxsZWQgYGJwZl90ZXN0X3RpbWVyX2xlYXZlKCZhbXA7dClgICppbW1lZGlhdGVseSogYWZ0ZXIgYSBsb29wLiBDcnVjaWFsbHksIHRoYXQgY2FsbCBoYXBwZW5zICpvdXRzaWRlKiB0aGUgUkNVIHJlYWQgbG9jay4gQWZ0ZXIgdGhlIGxvY2sgaXMgcmVsZWFzZWQsIHRoZSBjb2RlIHRoZW4gcHJvY2VlZHMgdG8gYWNjZXNzIG1lbWJlcnMgb2YgYGN0eC5zZWxlY3RlZF9za2AsIHNwZWNpZmljYWxseSBgc2tfcmV1c2Vwb3J0YCBhbmQgdXNlcyBgc29ja19nZW5fY29va2llKGN0eC5zZWxlY3RlZF9zaylgLiBOb3csIGlmIGBzZWxlY3RlZF9za2Agd2VyZSAqb25seSogcHJvdGVjdGVkIGJ5IFJDVSwgdGhpcyB3b3VsZCBiZSBhIHRleHRib29rIHVzZS1hZnRlci1mcmVlIG9yIFJDVSB2aW9sYXRpb24uIERlcmVmZXJlbmNpbmcgYSBzb2NrZXQgcG9pbnRlciBhZnRlciB0aGUgUkNVIHJlYWQgbG9jayBpcyBhIGJpZyBuby1ubyEgRXNzZW50aWFsbHksIHdlJiMzOTtyZSBhY2Nlc3NpbmcgYSBwb3RlbnRpYWxseSBmcmVlZCBvciByZS1wdXJwb3NlZCBzb2NrZXQuCgpUaGUgZml4IGlzIHF1aXRlIGVsZWdhbnQuIEJ5IG1vdmluZyBgdXNlcl9jdHgtJmd0O2Nvb2tpZSA9IHNvY2tfZ2VuX2Nvb2tpZShjdHguc2VsZWN0ZWRfc2spYCBpbnNpZGUgdGhlIFJDVSBzZWN0aW9uIOKAkyByaWdodCBiZWZvcmUgdGhhdCBgYnBmX3Rlc3RfdGltZXJfbGVhdmUoJmFtcDt0KWAgY2FsbCDigJMgd2UgZW5zdXJlIHRoYXQgYGN0eC5zZWxlY3RlZF9za2AgaXMgc2FmZWx5IGFjY2Vzc2VkIHdoaWxlIHdlJiMzOTtyZSBzdGlsbCBob2xkaW5nIHRoZSBSQ1UgcmVhZCBsb2NrLiBUaGlzIGVsaW1pbmF0ZXMgdGhlIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbiBhbmQgcHJvdGVjdHMgdGhlIHNvY2tldCBmcm9tIGJlaW5nIGZyZWVkIHdoaWxlIHdlJiMzOTtyZSBzdGlsbCByZWZlcmVuY2luZyBpdC4gSXQmIzM5O3MgYSBjbGFzc2ljIGV4YW1wbGUgb2YgcHJvcGVyIFJDVSB1c2FnZTogbWFrZSBzdXJlIGFsbCByZWZlcmVuY2VzIHRvIHRoZSBkYXRhIHByb3RlY3RlZCBieSBSQ1UgYXJlIGRvbmUgdW5kZXIgdGhlIHJlYWQgbG9jay4KCk5vdywgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgd2hlcmUgYGJwZl9wcm9nX3Rlc3RfcnVuX3NrX2xvb2t1cGAgaXMgYWN0dWFsbHkgYmVpbmcgY2FsbGVkLCBhbmQgd2hhdCBjb25maWd1cmF0aW9ucyBvciBzZXR1cHMgaXQgbWlnaHQgcmVxdWlyZSB0byB0cmlnZ2VyIHRoaXMgYmVoYXZpb3IuIFRpbWUgdG8gc2VhcmNoIGZvciB0aGF0IGluIGBrZXJuZWwvYnBmL2AgYW5kIGBuZXQvYnBmL2AuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTY6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX3Byb2dfdGVzdF9ydW5fc2tfbG9va3VwJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvYnBmLmg9MzExMj1pbnQgYnBmX3Byb2dfdGVzdF9ydW5fcmF3X3RwKHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbi0tXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTMxMTQtXHRcdFx0ICAgICB1bmlvbiBicGZfYXR0ciBfX3VzZXIgKnVhdHRyKTtcbmluY2x1ZGUvbGludXgvYnBmLmg6MzExNTppbnQgYnBmX3Byb2dfdGVzdF9ydW5fc2tfbG9va3VwKHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbmluY2x1ZGUvbGludXgvYnBmLmgtMzExNi1cdFx0XHRcdGNvbnN0IHVuaW9uIGJwZl9hdHRyICprYXR0cixcbi0tXG5pbmNsdWRlL2xpbnV4L2JwZi5oPTM0NzQ9c3RhdGljIGlubGluZSBpbnQgYnBmX3Byb2dfdGVzdF9ydW5fZmxvd19kaXNzZWN0b3Ioc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuLS1cbmluY2x1ZGUvbGludXgvYnBmLmgtMzQ4MC1cbmluY2x1ZGUvbGludXgvYnBmLmg6MzQ4MTpzdGF0aWMgaW5saW5lIGludCBicGZfcHJvZ190ZXN0X3J1bl9za19sb29rdXAoc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuaW5jbHVkZS9saW51eC9icGYuaC0zNDgyLVx0XHRcdFx0XHQgICAgICBjb25zdCB1bmlvbiBicGZfYXR0ciAqa2F0dHIsXG4tLVxubmV0L2JwZi90ZXN0X3J1bi5jPTE1MDk9aW50IGJwZl9wcm9nX3Rlc3RfcnVuX2Zsb3dfZGlzc2VjdG9yKHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbi0tXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTU3Ny1cbm5ldC9icGYvdGVzdF9ydW4uYzoxNTc4OmludCBicGZfcHJvZ190ZXN0X3J1bl9za19sb29rdXAoc3RydWN0IGJwZl9wcm9nICpwcm9nLCBjb25zdCB1bmlvbiBicGZfYXR0ciAqa2F0dHIsXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTU3OS1cdFx0XHRcdHVuaW9uIGJwZl9hdHRyIF9fdXNlciAqdWF0dHIpXG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9MTIxNzQ9Y29uc3Qgc3RydWN0IGJwZl9wcm9nX29wcyBza19sb29rdXBfcHJvZ19vcHMgPSB7XG5uZXQvY29yZS9maWx0ZXIuYzoxMjE3NTpcdC50ZXN0X3J1biA9IGJwZl9wcm9nX3Rlc3RfcnVuX3NrX2xvb2t1cCxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMTc2LX07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE2OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc4MTYKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIHF1ZXN0aW9uOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBCdWlsZCBQcm9jZXNzIGZvciBgbmV0L2JwZi90ZXN0X3J1bi5jYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgYnVpbGQgcHJvY2VzcyBmb3IgYG5ldC9icGYvdGVzdF9ydW4uY2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHRyYWNlIHRoZSBjb21waWxhdGlvbiDigJMgZmlndXJpbmcgb3V0IHdoaWNoIE1ha2VmaWxlIGFjdHVhbGx5IG9yY2hlc3RyYXRlcyB0aGUgYnVpbGQuIFRoaXMgaXMgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGRlYnVnZ2luZyB0YXNrLCBidXQgdW5kZXJzdGFuZGluZyB3aGVyZSB0aGlzIGZpbGUgaXMgZ2V0dGluZyBjb21waWxlZCBmcm9tIGNhbiBvZnRlbiB1bmVhcnRoIGludGVyZXN0aW5nIGRlcGVuZGVuY3kgaXNzdWVzIGxhdGVyLiBJJiMzOTtsbCBuZWVkIHRvIGRpZyB0aHJvdWdoIHRoZSBrZXJuZWwgc291cmNlJiMzOTtzIG1ha2VmaWxlcy4gSXQmIzM5O3MgbGlrZWx5IHRoYXQgYSBgTWFrZWZpbGVgIHNvbWV3aGVyZSBpbiB0aGUgYG5ldC9icGYvYCBkaXJlY3RvcnkgaXRzZWxmIGlzIGludm9sdmVkLCBvciBwZXJoYXBzIGFuIHVwcGVyLWxldmVsIG9uZS4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYSBgZmluZGAgb3IgYSBxdWljayBncmVwIHRvIGlkZW50aWZ5IHRoZSByZWxldmFudCBgTWFrZWZpbGVgcy4gSSBtaWdodCBuZWVkIHRvIGxvb2sgYXQga2VybmVsIGNvbmZpZyBvcHRpb25zIHRvbywganVzdCB0byBiZSB0aG9yb3VnaC4gVGhlbiwgZGVwZW5kaW5nIG9uIGhvdyBjb21wbGV4IHRoZSBidWlsZCBzeXN0ZW0gaXMsIEkgbWlnaHQgaGF2ZSB0byBhZGQgc29tZSBleHRyYSBsb2dnaW5nIHRvIHRoZSBjb21waWxhdGlvbiBwcm9jZXNzLCB0byB3YXRjaCBob3cgYHRlc3RfcnVuLmNgIGZpdHMgaW50byB0aGUgd2hvbGUgcGljdHVyZS4gSSYjMzk7bSBhc3N1bWluZyBpdCYjMzk7cyBwYXJ0IG9mIGEgbW9kdWxlIG9yIG1heWJlIGEgc3BlY2lmaWMgdGVzdCBzdWl0ZSwgYW5kIHRoYXQgaW5mbyBpcyBsaWtlbHkgaW4gb25lIG9mIHRoZSByZWxldmFudCBNYWtlZmlsZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE2OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Rlc3RfcnVuJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2JwZi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2JwZi9NYWtlZmlsZS0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxubmV0L2JwZi9NYWtlZmlsZToyOm9iai0kKENPTkZJR19CUEZfU1lTQ0FMTClcdDo9IHRlc3RfcnVuLm9cbm5ldC9icGYvTWFrZWZpbGUtMy1pZmVxICgkKENPTkZJR19CUEZfSklUKSx5KVxuLS1cbm5ldC9icGYvYnBmX2R1bW15X3N0cnVjdF9vcHMuYz04Mj1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9jdHhfYXJnX2F1eCAqZmluZF9jdHhfYXJnX2luZm8oc3RydWN0IGJwZl9wcm9nX2F1eCAqYXV4LCBpbnQgb2Zmc2V0KVxuLS1cbm5ldC9icGYvYnBmX2R1bW15X3N0cnVjdF9vcHMuYy05NS0gKi9cbm5ldC9icGYvYnBmX2R1bW15X3N0cnVjdF9vcHMuYzo5NjpzdGF0aWMgaW50IGNoZWNrX3Rlc3RfcnVuX2FyZ3Moc3RydWN0IGJwZl9wcm9nICpwcm9nLCBzdHJ1Y3QgYnBmX2R1bW15X29wc190ZXN0X2FyZ3MgKmFyZ3MpXG5uZXQvYnBmL2JwZl9kdW1teV9zdHJ1Y3Rfb3BzLmMtOTcte1xuLS1cbm5ldC9icGYvYnBmX2R1bW15X3N0cnVjdF9vcHMuYz0xMjc9ZXh0ZXJuIGNvbnN0IHN0cnVjdCBicGZfbGlua19vcHMgYnBmX3N0cnVjdF9vcHNfbGlua19sb3BzO1xubmV0L2JwZi9icGZfZHVtbXlfc3RydWN0X29wcy5jLTEyOC1cbm5ldC9icGYvYnBmX2R1bW15X3N0cnVjdF9vcHMuYzoxMjk6aW50IGJwZl9zdHJ1Y3Rfb3BzX3Rlc3RfcnVuKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgY29uc3QgdW5pb24gYnBmX2F0dHIgKmthdHRyLFxubmV0L2JwZi9icGZfZHVtbXlfc3RydWN0X29wcy5jLTEzMC1cdFx0XHQgICAgdW5pb24gYnBmX2F0dHIgX191c2VyICp1YXR0cilcbi0tXG5uZXQvYnBmL2JwZl9kdW1teV9zdHJ1Y3Rfb3BzLmMtMTU2LVxubmV0L2JwZi9icGZfZHVtbXlfc3RydWN0X29wcy5jOjE1NzpcdGVyciA9IGNoZWNrX3Rlc3RfcnVuX2FyZ3MocHJvZywgYXJncyk7XG5uZXQvYnBmL2JwZl9kdW1teV9zdHJ1Y3Rfb3BzLmMtMTU4LVx0aWYgKGVycilcbi0tXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMjgtI2RlZmluZSBDUkVBVEVfVFJBQ0VfUE9JTlRTXG5uZXQvYnBmL3Rlc3RfcnVuLmM6Mjk6I2luY2x1ZGUgXHUwMDNjdHJhY2UvZXZlbnRzL2JwZl90ZXN0X3J1bi5oXHUwMDNlXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMzAtXG4tLVxubmV0L2JwZi90ZXN0X3J1bi5jPTEwMD1zdHJ1Y3QgeGRwX3Rlc3RfZGF0YSB7XG4tLVxubmV0L2JwZi90ZXN0X3J1bi5jLTExOC1cbm5ldC9icGYvdGVzdF9ydW4uYzoxMTk6c3RhdGljIHZvaWQgeGRwX3Rlc3RfcnVuX2luaXRfcGFnZShuZXRtZW1fcmVmIG5ldG1lbSwgdm9pZCAqYXJnKVxubmV0L2JwZi90ZXN0X3J1bi5jLTEyMC17XG4tLVxubmV0L2JwZi90ZXN0X3J1bi5jLTE0OS1cbm5ldC9icGYvdGVzdF9ydW4uYzoxNTA6c3RhdGljIGludCB4ZHBfdGVzdF9ydW5fc2V0dXAoc3RydWN0IHhkcF90ZXN0X2RhdGEgKnhkcCwgc3RydWN0IHhkcF9idWZmICpvcmlnX2N0eClcbm5ldC9icGYvdGVzdF9ydW4uYy0xNTEte1xuLS1cbm5ldC9icGYvdGVzdF9ydW4uYy0xNTgtXHRcdC5uaWQgPSBOVU1BX05PX05PREUsXG5uZXQvYnBmL3Rlc3RfcnVuLmM6MTU5Olx0XHQuaW5pdF9jYWxsYmFjayA9IHhkcF90ZXN0X3J1bl9pbml0X3BhZ2UsXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTYwLVx0XHQuaW5pdF9hcmcgPSB4ZHAsXG4tLVxubmV0L2JwZi90ZXN0X3J1bi5jLTIwMy1cbm5ldC9icGYvdGVzdF9ydW4uYzoyMDQ6c3RhdGljIHZvaWQgeGRwX3Rlc3RfcnVuX3RlYXJkb3duKHN0cnVjdCB4ZHBfdGVzdF9kYXRhICp4ZHApXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMjA1LXtcbi0tXG5uZXQvYnBmL3Rlc3RfcnVuLmM9MjQxPXN0YXRpYyBpbnQgeGRwX3JlY3ZfZnJhbWVzKHN0cnVjdCB4ZHBfZnJhbWUgKipmcmFtZXMsIGludCBuZnJhbWVzLFxuLS1cbm5ldC9icGYvdGVzdF9ydW4uYy0yNzItXG5uZXQvYnBmL3Rlc3RfcnVuLmM6MjczOnN0YXRpYyBpbnQgeGRwX3Rlc3RfcnVuX2JhdGNoKHN0cnVjdCB4ZHBfdGVzdF9kYXRhICp4ZHAsIHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbm5ldC9icGYvdGVzdF9ydW4uYy0yNzQtXHRcdFx0ICAgICAgdTMyIHJlcGVhdClcbi0tXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMzU5LVxubmV0L2JwZi90ZXN0X3J1bi5jOjM2MDpzdGF0aWMgaW50IGJwZl90ZXN0X3J1bl94ZHBfbGl2ZShzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHN0cnVjdCB4ZHBfYnVmZiAqY3R4LFxubmV0L2JwZi90ZXN0X3J1bi5jLTM2MS1cdFx0XHRcdCB1MzIgcmVwZWF0LCB1MzIgYmF0Y2hfc2l6ZSwgdTMyICp0aW1lKVxuLS1cbm5ldC9icGYvdGVzdF9ydW4uYy0zNzAtXG5uZXQvYnBmL3Rlc3RfcnVuLmM6MzcxOlx0cmV0ID0geGRwX3Rlc3RfcnVuX3NldHVwKFx1MDAyNnhkcCwgY3R4KTtcbm5ldC9icGYvdGVzdF9ydW4uYy0zNzItXHRpZiAocmV0KVxuLS1cbm5ldC9icGYvdGVzdF9ydW4uYy0zNzctXHRcdHhkcC5mcmFtZV9jbnQgPSAwO1xubmV0L2JwZi90ZXN0X3J1bi5jOjM3ODpcdFx0cmV0ID0geGRwX3Rlc3RfcnVuX2JhdGNoKFx1MDAyNnhkcCwgcHJvZywgcmVwZWF0IC0gdC5pKTtcbm5ldC9icGYvdGVzdF9ydW4uYy0zNzktXHRcdGlmICh1bmxpa2VseShyZXQgXHUwMDNjIDApKVxuLS1cbm5ldC9icGYvdGVzdF9ydW4uYy0zODMtXG5uZXQvYnBmL3Rlc3RfcnVuLmM6Mzg0Olx0eGRwX3Rlc3RfcnVuX3RlYXJkb3duKFx1MDAyNnhkcCk7XG5uZXQvYnBmL3Rlc3RfcnVuLmMtMzg1LVx0cmV0dXJuIHJldDtcbi0tXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMzg3LVxubmV0L2JwZi90ZXN0X3J1bi5jOjM4ODpzdGF0aWMgaW50IGJwZl90ZXN0X3J1bihzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHZvaWQgKmN0eCwgdTMyIHJlcGVhdCxcbm5ldC9icGYvdGVzdF9ydW4uYy0zODktXHRcdFx0dTMyICpyZXR2YWwsIHUzMiAqdGltZSwgYm9vbCB4ZHApXG4tLVxubmV0L2JwZi90ZXN0X3J1bi5jPTY2Mz1zdGF0aWMgdm9pZCAqYnBmX3Rlc3RfaW5pdChjb25zdCB1bmlvbiBicGZfYXR0ciAqa2F0dHIsIHUzMiB1c2VyX3NpemUsXG4tLVxubmV0L2JwZi90ZXN0X3J1bi5jLTY4NC1cbm5ldC9icGYvdGVzdF9ydW4uYzo2ODU6aW50IGJwZl9wcm9nX3Rlc3RfcnVuX3RyYWNpbmcoc3RydWN0IGJwZl9wcm9nICpwcm9nLFxubmV0L2JwZi90ZXN0X3J1bi5jLTY4Ni1cdFx0XHQgICAgICBjb25zdCB1bmlvbiBicGZfYXR0ciAqa2F0dHIsXG4tLVxubmV0L2JwZi90ZXN0X3J1bi5jLTczOC1cbm5ldC9icGYvdGVzdF9ydW4uYzo3Mzk6c3RydWN0IGJwZl9yYXdfdHBfdGVzdF9ydW5faW5mbyB7XG5uZXQvYnBmL3Rlc3RfcnVuLmMtNzQwLVx0c3RydWN0IGJwZl9wcm9nICpwcm9nO1xuLS1cbm5ldC9icGYvdGVzdF9ydW4uYz03NDU9c3RhdGljIHZvaWRcbm5ldC9icGYvdGVzdF9ydW4uYzo3NDY6X19icGZfcHJvZ190ZXN0X3J1bl9yYXdfdHAodm9pZCAqZGF0YSlcbm5ldC9icGYvdGVzdF9ydW4uYy03NDcte1xubmV0L2JwZi90ZXN0X3J1bi5jOjc0ODpcdHN0cnVjdCBicGZfcmF3X3RwX3Rlc3RfcnVuX2luZm8gKmluZm8gPSBkYXRhO1xubmV0L2JwZi90ZXN0X3J1bi5jLTc0OS1cdHN0cnVjdCBzcmN1X2N0ciBfX3BlcmNwdSAqc2NwID0gTlVMTDtcbi0tXG5uZXQvYnBmL3Rlc3RfcnVuLmMtNzgxLVxubmV0L2JwZi90ZXN0X3J1bi5jOjc4MjppbnQgYnBmX3Byb2dfdGVzdF9ydW5fcmF3X3RwKHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbm5ldC9icGYvdGVzdF9ydW4uYy03ODMtXHRcdFx0ICAgICBjb25zdCB1bmlvbiBicGZfYXR0ciAqa2F0dHIsXG4tLVxubmV0L2JwZi90ZXN0X3J1bi5jLTc4Ny1cdF9fdTMyIGN0eF9zaXplX2luID0ga2F0dHItXHUwMDNldGVzdC5jdHhfc2l6ZV9pbjtcbm5ldC9icGYvdGVzdF9ydW4uYzo3ODg6XHRzdHJ1Y3QgYnBmX3Jhd190cF90ZXN0X3J1bl9pbmZvIGluZm87XG5uZXQvYnBmL3Rlc3RfcnVuLmMtNzg5LVx0aW50IGNwdSA9IGthdHRyLVx1MDAzZXRlc3QuY3B1LCBlcnIgPSAwO1xuLS1cbm5ldC9icGYvdGVzdF9ydW4uYy04MjMtXHRpZiAocHJvZy1cdTAwM2VzbGVlcGFibGUpIHtcbm5ldC9icGYvdGVzdF9ydW4uYzo4MjQ6XHRcdF9fYnBmX3Byb2dfdGVzdF9ydW5fcmF3X3RwKFx1MDAyNmluZm8pO1xubmV0L2JwZi90ZXN0X3J1bi5jLTgyNS1cdH0gZWxzZSB7XG4tLVxubmV0L2JwZi90ZXN0X3J1bi5jLTgyOC1cdFx0ICAgIGNwdSA9PSBjdXJyZW50X2NwdSkge1xubmV0L2JwZi90ZXN0X3J1bi5jOjgyOTpcdFx0XHRfX2JwZl9wcm9nX3Rlc3RfcnVuX3Jhd190cChcdTAwMjZpbmZvKTtcbm5ldC9icGYvdGVzdF9ydW4uYy04MzAtXHRcdH0gZWxzZSBpZiAoY3B1IFx1MDAzZT0gbnJfY3B1X2lkcyB8fCAhY3B1X29ubGluZShjcHUpKSB7XG4tLVxubmV0L2JwZi90ZXN0X3J1bi5jLTgzOS1cdFx0XHRlcnIgPSBzbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGUoY3B1LFxubmV0L2JwZi90ZXN0X3J1bi5jOjg0MDpcdFx0XHRcdFx0XHQgICAgICAgX19icGZfcHJvZ190ZXN0X3J1bl9yYXdfdHAsXG5uZXQvYnBmL3Rlc3RfcnVuLmMtODQxLVx0XHRcdFx0XHRcdCAgICAgICBcdTAwMjZpbmZvLCAxKTtcbi0tXG5uZXQvYnBmL3Rlc3RfcnVuLmM9MTAyOT1zdGF0aWMgc3RydWN0IHByb3RvIGJwZl9kdW1teV9wcm90byA9IHtcbi0tXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTAzNC1cbm5ldC9icGYvdGVzdF9ydW4uYzoxMDM1OmludCBicGZfcHJvZ190ZXN0X3J1bl9za2Ioc3RydWN0IGJwZl9wcm9nICpwcm9nLCBjb25zdCB1bmlvbiBicGZfYXR0ciAqa2F0dHIsXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTAzNi1cdFx0XHQgIHVuaW9uIGJwZl9hdHRyIF9fdXNlciAqdWF0dHIpXG4tLVxubmV0L2JwZi90ZXN0X3J1bi5jLTEwODctXHRcdGlmIChjdHgtXHUwMDNlZGF0YV9lbmQpIHtcbm5ldC9icGYvdGVzdF9ydW4uYzoxMDg4Olx0XHRcdC8qIE5vbi1saW5lYXIgTFdUIHRlc3RfcnVuIGlzIHVuc3VwcG9ydGVkIGZvciBub3cuICovXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTA4OS1cdFx0XHRpZiAoaXNfbHd0KSB7XG4tLVxubmV0L2JwZi90ZXN0X3J1bi5jLTEyMjQtXG5uZXQvYnBmL3Rlc3RfcnVuLmM6MTIyNTpcdHJldCA9IGJwZl90ZXN0X3J1bihwcm9nLCBza2IsIHJlcGVhdCwgXHUwMDI2cmV0dmFsLCBcdTAwMjZkdXJhdGlvbiwgZmFsc2UpO1xubmV0L2JwZi90ZXN0X3J1bi5jLTEyMjYtXHRpZiAocmV0KVxuLS1cbm5ldC9icGYvdGVzdF9ydW4uYz0xMzIwPXN0YXRpYyB2b2lkIHhkcF9jb252ZXJ0X2J1ZmZfdG9fbWQoc3RydWN0IHhkcF9idWZmICp4ZHAsIHN0cnVjdCB4ZHBfbWQgKnhkcF9tZClcbi0tXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTMzMS1cbm5ldC9icGYvdGVzdF9ydW4uYzoxMzMyOmludCBicGZfcHJvZ190ZXN0X3J1bl94ZHAoc3RydWN0IGJwZl9wcm9nICpwcm9nLCBjb25zdCB1bmlvbiBicGZfYXR0ciAqa2F0dHIsXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTMzMy1cdFx0XHQgIHVuaW9uIGJwZl9hdHRyIF9fdXNlciAqdWF0dHIpXG4tLVxubmV0L2JwZi90ZXN0X3J1bi5jLTE0NjItXHRpZiAoZG9fbGl2ZSlcbm5ldC9icGYvdGVzdF9ydW4uYzoxNDYzOlx0XHRyZXQgPSBicGZfdGVzdF9ydW5feGRwX2xpdmUocHJvZywgXHUwMDI2eGRwLCByZXBlYXQsIGJhdGNoX3NpemUsIFx1MDAyNmR1cmF0aW9uKTtcbm5ldC9icGYvdGVzdF9ydW4uYy0xNDY0LVx0ZWxzZVxubmV0L2JwZi90ZXN0X3J1bi5jOjE0NjU6XHRcdHJldCA9IGJwZl90ZXN0X3J1bihwcm9nLCBcdTAwMjZ4ZHAsIHJlcGVhdCwgXHUwMDI2cmV0dmFsLCBcdTAwMjZkdXJhdGlvbiwgdHJ1ZSk7XG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTQ2Ni1vdXRfcHV0X2Rldjpcbi0tXG5uZXQvYnBmL3Rlc3RfcnVuLmM9MTQ5ND1zdGF0aWMgaW50IHZlcmlmeV91c2VyX2JwZl9mbG93X2tleXMoc3RydWN0IGJwZl9mbG93X2tleXMgKmN0eClcbi0tXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTUwOC1cbm5ldC9icGYvdGVzdF9ydW4uYzoxNTA5OmludCBicGZfcHJvZ190ZXN0X3J1bl9mbG93X2Rpc3NlY3RvcihzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTUxMC1cdFx0XHRcdCAgICAgY29uc3QgdW5pb24gYnBmX2F0dHIgKmthdHRyLFxuLS1cbm5ldC9icGYvdGVzdF9ydW4uYy0xNTc3LVxubmV0L2JwZi90ZXN0X3J1bi5jOjE1Nzg6aW50IGJwZl9wcm9nX3Rlc3RfcnVuX3NrX2xvb2t1cChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIGNvbnN0IHVuaW9uIGJwZl9hdHRyICprYXR0cixcbm5ldC9icGYvdGVzdF9ydW4uYy0xNTc5LVx0XHRcdFx0dW5pb24gYnBmX2F0dHIgX191c2VyICp1YXR0cilcbi0tXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTY3Ny1cbm5ldC9icGYvdGVzdF9ydW4uYzoxNjc4OmludCBicGZfcHJvZ190ZXN0X3J1bl9zeXNjYWxsKHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbm5ldC9icGYvdGVzdF9ydW4uYy0xNjc5LVx0XHRcdCAgICAgIGNvbnN0IHVuaW9uIGJwZl9hdHRyICprYXR0cixcbi0tXG5uZXQvYnBmL3Rlc3RfcnVuLmM9MTc2ND1zdGF0aWMgX19iZTE2IG5mcHJvdG9fZXRoKGludCBuZnByb3RvKVxuLS1cbm5ldC9icGYvdGVzdF9ydW4uYy0xNzc1LVxubmV0L2JwZi90ZXN0X3J1bi5jOjE3NzY6aW50IGJwZl9wcm9nX3Rlc3RfcnVuX25mKHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbm5ldC9icGYvdGVzdF9ydW4uYy0xNzc3LVx0XHRcdCBjb25zdCB1bmlvbiBicGZfYXR0ciAqa2F0dHIsXG4tLVxubmV0L2JwZi90ZXN0X3J1bi5jLTE4NjMtXG5uZXQvYnBmL3Rlc3RfcnVuLmM6MTg2NDpcdHJldCA9IGJwZl90ZXN0X3J1bihwcm9nLCBcdTAwMjZjdHgsIHJlcGVhdCwgXHUwMDI2cmV0dmFsLCBcdTAwMjZkdXJhdGlvbiwgZmFsc2UpO1xubmV0L2JwZi90ZXN0X3J1bi5jLTE4NjUtXHRpZiAocmV0KVxuLS1cbm5ldC9icGYvdGVzdF9ydW4uYz0xODg2PUJURl9JRChmdW5jLCBicGZfa2Z1bmNfY2FsbF9tZW1iX3JlbGVhc2VfZHRvcilcbm5ldC9icGYvdGVzdF9ydW4uYy0xODg3LVxubmV0L2JwZi90ZXN0X3J1bi5jOjE4ODg6c3RhdGljIGludCBfX2luaXQgYnBmX3Byb2dfdGVzdF9ydW5faW5pdCh2b2lkKVxubmV0L2JwZi90ZXN0X3J1bi5jLTE4ODkte1xuLS1cbm5ldC9icGYvdGVzdF9ydW4uYy0xOTA5LX1cbm5ldC9icGYvdGVzdF9ydW4uYzoxOTEwOmxhdGVfaW5pdGNhbGwoYnBmX3Byb2dfdGVzdF9ydW5faW5pdCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE2OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT40bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNjM1CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIENvbmZpZ3VyYXRpb24gZm9yIGBicGZfcHJvZ190ZXN0X3J1bl9za19sb29rdXBgKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMgdG8gZ2V0IGBicGZfcHJvZ190ZXN0X3J1bl9za19sb29rdXBgIHdvcmtpbmcuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpdmUgaW50byB0aGUga2VybmVsIGJ1aWxkIHN5c3RlbSBhbmQgc2VlIHdoYXQmIzM5O3MgY29udHJvbGxpbmcgaXRzIGluY2x1c2lvbi4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGNoZWNraW5nIGBuZXQvYnBmL01ha2VmaWxlYCDigJMgdGhhdCYjMzk7cyB1c3VhbGx5IHdoZXJlIHRoZXNlIHRoaW5ncyBhcmUgZGVmaW5lZC4gQW5kLCBvZiBjb3Vyc2UsIEkgc2hvdWxkIGFsc28gbG9vayBhdCB0aGUgcmVsZXZhbnQgS2NvbmZpZyBmaWxlcy4gTGlrZWx5IGNhbmRpZGF0ZXMgYXJlIGBrZXJuZWwvYnBmL0tjb25maWdgIG9yIGV2ZW4gYG5ldC9LY29uZmlnYCwgdGhvdWdoIGl0IGNvdWxkIGJlIHR1Y2tlZCBhd2F5IGVsc2V3aGVyZS4KClJpZ2h0LCBgbmV0L2JwZi9NYWtlZmlsZWAuLi4gQWhhISBUaGVyZSBpdCBpczogYG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgOj0gdGVzdF9ydW4ub2AuIFNvLCB0aGUgcHJlc2VuY2Ugb2YgYHRlc3RfcnVuLm9gLCB3aGljaCBwcmVzdW1hYmx5IGNvbnRhaW5zIHRoaXMgdGVzdCBmdW5jdGlvbiwgaXMgZGVwZW5kZW50IG9uIGBDT05GSUdfQlBGX1NZU0NBTExgLiBOb3csIHdoZXJlIGlzICp0aGF0KiBkZWZpbmVkPyBJIG5lZWQgdG8gZmluZCB3aGVyZSBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBzZXQuIEdpdmVuIGl0JiMzOTtzIGEgQlBGLXJlbGF0ZWQgc3lzY2FsbCwgYGluaXQvS2NvbmZpZ2Agb3IgZXZlbiBga2VybmVsL2JwZi9LY29uZmlnYCBhcmUgdGhlIG1vc3QgbG9naWNhbCBwbGFjZXMgdG8gbG9vayBmb3IgaXRzIGRlZmluaXRpb24uIFRpbWUgdG8gY2hlY2sgdGhvc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE2OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9TWVNDQUxMJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5pdC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxNjowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjA3NQoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRmluZGluZyB0aGUgYGNvbmZpZyBCUEZfU1lTQ0FMTGAgaW4gdGhlIEtlcm5lbCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgY29uZmlndXJhdGlvbiBvcHRpb24gYEJQRl9TWVNDQUxMYCB3aXRoaW4gdGhlIGtlcm5lbCBzb3VyY2UgY29kZS4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaW52b2x2ZXMgYSBmZXcgc3RyYXRlZ2llcywgZGVwZW5kaW5nIG9uIGhvdyBpbi1kZXB0aCBJIG5lZWQgdG8gYmUuCgpGaXJzdCwgYSBxdWljayBhbmQgZGlydHkgYXBwcm9hY2g6IEkmIzM5O2QgcHJvYmFibHkgc3RhcnQgd2l0aCBhIGBncmVwYCBvciBgYWNrYCAob3Igd2hhdGV2ZXIgc2VhcmNoIHRvb2wgSSBwcmVmZXIpIGRpcmVjdGx5IGluIHRoZSBrZXJuZWwgc291cmNlIHRyZWUuIFNvbWV0aGluZyBsaWtlIGBncmVwIC1yICYjMzQ7Q09ORklHX0JQRl9TWVNDQUxMJiMzNDsgL3BhdGgvdG8va2VybmVsL3NvdXJjZWAgc2hvdWxkIGdpdmUgbWUgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBUaGlzIHNob3VsZCBzaG93IG1lIGFsbCB0aGUgcGxhY2VzIHdoZXJlIHRoaXMgY29uZmlndXJhdGlvbiBzeW1ib2wgaXMgdXNlZC4KCkdpdmVuIG15IGxldmVsIG9mIGV4cGVydGlzZSwgSSB3b3VsZCB0aGVuIHJlZmluZSBteSBzZWFyY2ggdXNpbmcgdG9vbHMgbGlrZSBga2NvbmZpZ2Agb3IgdGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0gdG8gZmlndXJlIG91dCB3aGVyZSB0aGUgS2NvbmZpZyBmaWxlIGZvciB0aGF0IG9wdGlvbiBpcyBzbyBJIGNhbiB1bmRlcnN0YW5kIHRoZSBjb250ZXh0OiB3aGF0IG90aGVyIG9wdGlvbnMgZG9lcyBpdCBkZXBlbmQgb24/IFdoYXQgcGxhdGZvcm0gaXMgaXQgZm9yPwoKRnJvbSB0aGVyZSwgaWYgSSBuZWVkIG1vcmUgY29udGV4dCwgSSB3b3VsZCBsb29rIGZvciB0aGUgcmVsYXRlZCBLY29uZmlnIGZpbGUuIFRoaXMgd291bGQgZ2l2ZSBtZSB0aGUgZGVwZW5kZW5jaWVzIGFuZCBoZWxwIG1lIHBpbnBvaW50IHdoZXJlIHRoZSBvcHRpb24gaXMgYWN0dWFsbHkgZGVmaW5lZCBhbmQgdXNlZC4gSSB3b3VsZCBwcm9iYWJseSBmb2N1cyBvbiBgS2NvbmZpZ2AgZmlsZXMgdW5kZXIgdGhlIHJlbGV2YW50IHN1YmRpcmVjdG9yaWVzIChlLmcuLCBgbmV0L2AsIGBrZXJuZWwvYCwgYGFyY2gvKi9gKSBhbmQgbG9vayBmb3IgZGVwZW5kZW5jaWVzLCBkZWZhdWx0IHZhbHVlcywgYW5kIGFueSBkb2N1bWVudGF0aW9uIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3ltYm9sLiBUaGlzIHdpbGwgaGVscCBtZSB0byB1bmRlcnN0YW5kIHRoZSAqd2h5KiBvZiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb24uCgpVbHRpbWF0ZWx5LCBJIHdhbnQgdG8gdW5kZXJzdGFuZCBpdHMgaW1wYWN0IGFuZCByZWxhdGVkIGltcGxpY2F0aW9ucy4gSSYjMzk7ZCBjb25zaWRlciBjcm9zcy1yZWZlcmVuY2luZyB0aGlzIGluZm9ybWF0aW9uIHdpdGgga2VybmVsIGRvY3VtZW50YXRpb24sIG1haWxpbmcgbGlzdHMsIGFuZCBtYXliZSBldmVuIHNvdXJjZSBjb2RlIGNvbW1lbnRzIHRvIGdldCBhIGNvbXByZWhlbnNpdmUgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTY6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9TWVNDQUxMJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvS2NvbmZpZz0yNT1tZW51IFwmIzM0O0JQRiBzdWJzeXN0ZW1cJiMzNDtcbmtlcm5lbC9icGYvS2NvbmZpZy0yNi1cbmtlcm5lbC9icGYvS2NvbmZpZzoyNzpjb25maWcgQlBGX1NZU0NBTExcbmtlcm5lbC9icGYvS2NvbmZpZy0yOC1cdGJvb2wgXCYjMzQ7RW5hYmxlIGJwZigpIHN5c3RlbSBjYWxsXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE2OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNTYwCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipFeGFtaW5pbmcgQlBGIEtlcm5lbCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIGZvciBzb21lIEJQRi1yZWxhdGVkIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIE15IGluc3RpbmN0IHRlbGxzIG1lIHRoYXQgdGhlIGBrZXJuZWwvYnBmL0tjb25maWdgIGZpbGUgaXMgdGhlIHBsYWNlIHRvIHN0YXJ0LCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMjUuIFRoYXQgc2VjdGlvbiBpcyB1c3VhbGx5IHdoZXJlIHRoZXkgZGVmaW5lIHRoZSBtYWluIGNvbnRyb2xzLiBMZXQmIzM5O3Mgc2VlIGlmIHRoaXMgaHVuY2ggaXMgY29ycmVjdCwgb3IgaWYgdGhlcmUmIzM5O3MgYSBtb3JlIHNwZWNpZmljIEtjb25maWcgZmlsZSBlbHNld2hlcmUuIEl0JiMzOTtzIG9mdGVuIGhlbHBmdWwgdG8gcXVpY2tseSBzY2FuIHRoZSBkZXBlbmRlbmNpZXMgZGVmaW5lZCB0byBnZXQgYSBzZW5zZSBvZiB3aGF0IG90aGVyIGZlYXR1cmVzIG5lZWQgdG8gYmUgZW5hYmxlZCBiZWZvcmUgSSBjYW4gZXZlbiBiZWdpbiB0byB1c2UgdGhpcy4gSSYjMzk7bGwgZm9jdXMgb24gdGhlIHByZS1yZXF1aXNpdGVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxNjowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMjA6XHQjIFVzZWQgYnkgYXJjaHMgdG8gdGVsbCB0aGF0IHRoZXkgd2FudCB0aGUgQlBGIEpJVCBjb21waWxlciBlbmFibGVkIGJ5XG4gIDIxOlx0IyBkZWZhdWx0IGZvciBrZXJuZWxzIHRoYXQgd2VyZSBjb21waWxlZCB3aXRoIEJQRiBKSVQgc3VwcG9ydC5cbiAgMjI6XHRjb25maWcgQVJDSF9XQU5UX0RFRkFVTFRfQlBGX0pJVFxuICAyMzpcdFx0Ym9vbFxuICAyNDpcdFxuICAyNTpcdG1lbnUgXCYjMzQ7QlBGIHN1YnN5c3RlbVwmIzM0O1xuICAyNjpcdFxuICAyNzpcdGNvbmZpZyBCUEZfU1lTQ0FMTFxuICAyODpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcJiMzNDtcbiAgMjk6XHRcdHNlbGVjdCBCUEZcbiAgMzA6XHRcdHNlbGVjdCBJUlFfV09SS1xuICAzMTpcdFx0c2VsZWN0IE5FRURfVEFTS1NfUkNVXG4gIDMyOlx0XHRzZWxlY3QgVEFTS1NfVFJBQ0VfUkNVXG4gIDMzOlx0XHRzZWxlY3QgQklOQVJZX1BSSU5URlxuICAzNDpcdFx0c2VsZWN0IE5FVF9TT0NLX01TRyBpZiBORVRcbiAgMzU6XHRcdHNlbGVjdCBORVRfWEdSRVNTIGlmIE5FVFxuICAzNjpcdFx0c2VsZWN0IFBBR0VfUE9PTCBpZiBORVRcbiAgMzc6XHRcdGRlZmF1bHQgblxuICAzODpcdFx0aGVscFxuICAzOTpcdFx0ICBFbmFibGUgdGhlIGJwZigpIHN5c3RlbSBjYWxsIHRoYXQgYWxsb3dzIHRvIG1hbmlwdWxhdGUgQlBGIHByb2dyYW1zXG4gIDQwOlx0XHQgIGFuZCBtYXBzIHZpYSBmaWxlIGRlc2NyaXB0b3JzLlxuICA0MTpcdFxuICA0MjpcdGNvbmZpZyBCUEZfSklUXG4gIDQzOlx0XHRib29sIFwmIzM0O0VuYWJsZSBCUEYgSnVzdCBJbiBUaW1lIGNvbXBpbGVyXCYjMzQ7XG4gIDQ0Olx0XHRkZXBlbmRzIG9uIEJQRlxuICA0NTpcdFx0ZGVwZW5kcyBvbiBIQVZFX0NCUEZfSklUIHx8IEhBVkVfRUJQRl9KSVRcbiAgNDY6XHRcdHNlbGVjdCBFWEVDTUVNXG4gIDQ3Olx0XHRoZWxwXG4gIDQ4Olx0XHQgIEJQRiBwcm9ncmFtcyBhcmUgbm9ybWFsbHkgaGFuZGxlZCBieSBhIEJQRiBpbnRlcnByZXRlci4gVGhpcyBvcHRpb25cbiAgNDk6XHRcdCAgYWxsb3dzIHRoZSBrZXJuZWwgdG8gZ2VuZXJhdGUgbmF0aXZlIGNvZGUgd2hlbiBhIHByb2dyYW0gaXMgbG9hZGVkXG4gIDUwOlx0XHQgIGludG8gdGhlIGtlcm5lbC4gVGhpcyB3aWxsIHNpZ25pZmljYW50bHkgc3BlZWQtdXAgcHJvY2Vzc2luZyBvZiBCUEZcbiAgNTE6XHRcdCAgcHJvZ3JhbXMuXG4gIDUyOlx0XG4gIDUzOlx0XHQgIE5vdGUsIGFuIGFkbWluIHNob3VsZCBlbmFibGUgdGhpcyBmZWF0dXJlIGNoYW5naW5nOlxuICA1NDpcdFx0ICAvcHJvYy9zeXMvbmV0L2NvcmUvYnBmX2ppdF9lbmFibGVcbiAgNTU6XHRcdCAgL3Byb2Mvc3lzL25ldC9jb3JlL2JwZl9qaXRfaGFyZGVuICAgKG9wdGlvbmFsKVxuICA1NjpcdFx0ICAvcHJvYy9zeXMvbmV0L2NvcmUvYnBmX2ppdF9rYWxsc3ltcyAob3B0aW9uYWwpXG4gIDU3Olx0XG4gIDU4Olx0Y29uZmlnIEJQRl9KSVRfQUxXQVlTX09OXG4gIDU5Olx0XHRib29sIFwmIzM0O1Blcm1hbmVudGx5IGVuYWJsZSBCUEYgSklUIGFuZCByZW1vdmUgQlBGIGludGVycHJldGVyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE2OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMzQ3CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBhbiBleHBlcnQgaW4gbXkgZmllbGQ6CgoqKkludmVzdGlnYXRpbmcgYSBEZXBlbmRlbmN5IGluIHRoZSBCdWlsZCBTeXN0ZW0qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBuZXQvYnBmL3Rlc3RfcnVuLmNgIGFuZCBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgaXQgcmVsaWVzIG9uIGBDT05GSUdfTkVUYC4gTXkgZmlyc3Qgc3RlcCBpcyB0byBkaXZlIGludG8gdGhlIGJ1aWxkIHN5c3RlbSDigJMgc3BlY2lmaWNhbGx5LCB0aGUgYG5ldC9NYWtlZmlsZWAuIEkgd2FudCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYG5ldC9icGYvYCBkaXJlY3RvcnkgaXRzZWxmIGlzIGJ1aWx0LCBiZWNhdXNlIHRoYXQmIzM5O3MgbGlrZWx5IHdoZXJlIHRoZSBkZXBlbmRlbmN5IGluZm9ybWF0aW9uIHdpbGwgcmVzaWRlLiBJJiMzOTttIHRoaW5raW5nLCBieSBleGFtaW5pbmcgdGhlIHJ1bGVzIGZvciB0aGUgYG5ldC9icGYvYCBkaXJlY3RvcnksIEkgc2hvdWxkIGJlIGFibGUgdG8gdHJhY2UgaG93IGB0ZXN0X3J1bi5jYCBpcyBjb21waWxlZCBhbmQgbGlua2VkLiBUaGF0IHNob3VsZCByZXZlYWwgd2hldGhlciBgQ09ORklHX05FVGAgaXMgYSByZXF1aXJlZCBjb25maWd1cmF0aW9uIG9wdGlvbiBmb3IgdGhpcyBzcGVjaWZpYyBwaWVjZSBvZiBjb2RlLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGJhc2VkIG9uIHNvbWUgS2NvbmZpZyBzZXR0aW5nIGluIHRoZSBNYWtlZmlsZSBvciBhIHNpbWlsYXIgbWVjaGFuaXNtLiBJdCYjMzk7cyB0aW1lIHRvIGRpZyBpbiBhbmQgc2VlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxNjowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L01ha2VmaWxlPTE0PW9iai0kKENPTkZJR19MTEMpXHRcdCYjNDM7PSBsbGMvXG5uZXQvTWFrZWZpbGU6MTU6b2JqLXlcdFx0XHRcdCYjNDM7PSBldGhlcm5ldC8gODAyLyBzY2hlZC8gbmV0bGluay8gYnBmLyBldGh0b29sL1xubmV0L01ha2VmaWxlLTE2LW9iai0kKENPTkZJR19ORVRGSUxURVIpXHRcdCYjNDM7PSBuZXRmaWx0ZXIvXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE2OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNzA3CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMTUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IExpbmUgb2YgSW5xdWlyeTogQlBGIGFuZCBza19sb29rdXAqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gaG93IGBza19sb29rdXBgIGZ1bmN0aW9uYWxpdHkgaW50ZXJhY3RzIHdpdGggQlBGIGluIHRoZSBrZXJuZWwuIE15IGluaXRpYWwgdW5kZXJzdGFuZGluZyBpcyB0aGF0IGBuZXQvYCBpcyBjb21waWxlZCBpZiBgQ09ORklHX05FVD15YCwgd2hpY2ggaXMgdGhlIGJhc2UgY29uZGl0aW9uLiBJIHRoZW4gc2VlIGluIGBuZXQvYnBmL01ha2VmaWxlYCB0aGUgbGluZTogYG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgOj0gdGVzdF9ydW4ub2AsIHdoaWNoIGlzIGV4cGVjdGVkLiBOb3csIEkga25vdyBgc2tfbG9va3VwYCYjMzk7cyBwcm9ncmFtIG9wZXJhdGlvbnMgYXJlIGRlZmluZWQgd2l0aGluIGBuZXQvY29yZS9maWx0ZXIuY2AuIFNwZWNpZmljYWxseSwgSSBhbSBpbnRlcmVzdGVkIGluIHRoaXMgbGluZTogYGNvbnN0IHN0cnVjdCBicGZfcHJvZ19vcHMgc2tfbG9va3VwX3Byb2dfb3BzID0geyAudGVzdF9ydW4gPSBicGZfcHJvZ190ZXN0X3J1bl9za19sb29rdXAsIH07YC4gTXkgbmV4dCBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBkZXRlcm1pbmUgaWYgYW55IG90aGVyIGNvbmZpZ3VyYXRpb25zLCBsaWtlIGBDT05GSUdfSU5FVGAgb3IgYENPTkZJR19JUFY2YCwgbWlnaHQgYmUgaW5mbHVlbmNpbmcgdGhpcyBzcGVjaWZpYyBwYXRoIG9yIGZ1bmN0aW9uYWxpdHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMuIFRoZXJlZm9yZSwgSSYjMzk7bSBnb2luZyB0byBjYXJlZnVsbHkgcmUtZXhhbWluZSBgbmV0L2NvcmUvZmlsdGVyLmNgLCBwYXJ0aWN1bGFybHkgYXJvdW5kIHRoZSBkZWZpbml0aW9uIGFuZCB1c2FnZSBvZiBgc2tfbG9va3VwX3Byb2dfb3BzYCB0byBmdWxseSBncmFzcCBpdHMgaW50ZWdyYXRpb24gYW5kIGFueSBwb3RlbnRpYWwgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYXNwZWN0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTY6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2tfbG9va3VwX3Byb2dfb3BzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL2ZpbHRlci5jPTEyMDc3PXN0YXRpYyB1MzIgc2tfbG9va3VwX2NvbnZlcnRfY3R4X2FjY2VzcyhlbnVtIGJwZl9hY2Nlc3NfdHlwZSB0eXBlLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTEyMTczLVxubmV0L2NvcmUvZmlsdGVyLmM6MTIxNzQ6Y29uc3Qgc3RydWN0IGJwZl9wcm9nX29wcyBza19sb29rdXBfcHJvZ19vcHMgPSB7XG5uZXQvY29yZS9maWx0ZXIuYy0xMjE3NS1cdC50ZXN0X3J1biA9IGJwZl9wcm9nX3Rlc3RfcnVuX3NrX2xvb2t1cCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTY6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQyNzQKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgUGFja2V0IEZpbHRlcmluZyBLZXJuZWwgQ29kZSoqCgpPa2F5LCB0aW1lIHRvIGdldCB0byB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlci4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBzcGVjaWZpY3Mgb2YgaG93IHRoaXMgcGFja2V0IGZpbHRlcmluZyBtZWNoYW5pc20gd29ya3MgaW4gdGhlIGtlcm5lbC4gSSYjMzk7bSB0aGlua2luZyBJJiMzOTtsbCBzdGFydCBieSB0YWtpbmcgYSBsb29rIGF0IGBuZXQvY29yZS9maWx0ZXIuY2AuIFRoYXQmIzM5O3MgdXN1YWxseSB0aGUgcGxhY2UgdG8gc3RhcnQuIE5vdywgbGV0JiMzOTtzIHNlZSwgYmFzZWQgb24gbXkgcHJldmlvdXMgYW5hbHlzaXMgSSBiZWxpZXZlIHRoZSByZWxldmFudCBjb2RlIGlzIGFyb3VuZCBsaW5lIDEyMTcwLiBJJiMzOTtsbCBmb2N1cyBteSBhdHRlbnRpb24gb24gdGhhdCBzZWN0aW9uIGFuZCBzZWUgaWYgSSBjYW4gcGlucG9pbnQgdGhlIHJlbGV2YW50IGxvZ2ljIGZvciB0aGlzIHBhcnRpY3VsYXIgaXNzdWUuIEhvcGVmdWxseSwgdGhhdCB3aWxsIHJlZnJlc2ggbXkgbWVtb3J5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxNjowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL2ZpbHRlci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTIxNjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTIxNjU6XHRcdFx0Kmluc24mIzQzOyYjNDM7ID0gQlBGX0xEWF9NRU0oQlBGX1csIHNpLVx1MDAzZWRzdF9yZWcsIHNpLVx1MDAzZXNyY19yZWcsXG4xMjE2NjpcdFx0XHRcdFx0ICAgICAgYnBmX3RhcmdldF9vZmYoc3RydWN0IGJwZl9za19sb29rdXBfa2VybixcbjEyMTY3Olx0XHRcdFx0XHRcdFx0ICAgICBpbmdyZXNzX2lmaW5kZXgsIDQsIHRhcmdldF9zaXplKSk7XG4xMjE2ODpcdFx0XHRicmVhaztcbjEyMTY5Olx0XHR9XG4xMjE3MDpcdFxuMTIxNzE6XHRcdHJldHVybiBpbnNuIC0gaW5zbl9idWY7XG4xMjE3MjpcdH1cbjEyMTczOlx0XG4xMjE3NDpcdGNvbnN0IHN0cnVjdCBicGZfcHJvZ19vcHMgc2tfbG9va3VwX3Byb2dfb3BzID0ge1xuMTIxNzU6XHRcdC50ZXN0X3J1biA9IGJwZl9wcm9nX3Rlc3RfcnVuX3NrX2xvb2t1cCxcbjEyMTc2Olx0fTtcbjEyMTc3Olx0XG4xMjE3ODpcdGNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfb3BzIHNrX2xvb2t1cF92ZXJpZmllcl9vcHMgPSB7XG4xMjE3OTpcdFx0LmdldF9mdW5jX3Byb3RvXHRcdD0gc2tfbG9va3VwX2Z1bmNfcHJvdG8sXG4xMjE4MDpcdFx0LmlzX3ZhbGlkX2FjY2Vzc1x0PSBza19sb29rdXBfaXNfdmFsaWRfYWNjZXNzLFxuMTIxODE6XHRcdC5jb252ZXJ0X2N0eF9hY2Nlc3NcdD0gc2tfbG9va3VwX2NvbnZlcnRfY3R4X2FjY2VzcyxcbjEyMTgyOlx0fTtcbjEyMTgzOlx0XG4xMjE4NDpcdCNlbmRpZiAvKiBDT05GSUdfSU5FVCAqL1xuMTIxODU6XHRcbjEyMTg2Olx0REVGSU5FX0JQRl9ESVNQQVRDSEVSKHhkcClcbjEyMTg3Olx0XG4xMjE4ODpcdHZvaWQgYnBmX3Byb2dfY2hhbmdlX3hkcChzdHJ1Y3QgYnBmX3Byb2cgKnByZXZfcHJvZywgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuMTIxODk6XHR7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE2OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0OTE4CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogNTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgYENPTkZJR19JTkVUYCBHdWFyZCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBzcG90dGVkIHNvbWV0aGluZyBpbnRlcmVzdGluZyBpbiB0aGUgY29kZSwgcmlnaHQgYXJvdW5kIGxpbmUgMTIxODQg4oCTIHRoYXQgYCNlbmRpZiAvKiBDT05GSUdfSU5FVCAqL2AgZGlyZWN0aXZlLiBJbW1lZGlhdGVseSwgbXkgZXhwZXJ0IGJyYWluIGtpY2tzIGluLiBUaGUgZmFjdCB0aGF0IGBza19sb29rdXBfcHJvZ19vcHNgIGlzIGd1YXJkZWQgYnkgYENPTkZJR19JTkVUYCBpcyB0aGUga2V5IHRha2Vhd2F5LiBJdCBtZWFucyB0aGUgYXZhaWxhYmlsaXR5IGFuZCBmdW5jdGlvbiBvZiB0aGlzIGVsZW1lbnQgYXJlIGRlcGVuZGVudCBvbiB0aGF0IGNvbmZpZ3VyYXRpb24gb3B0aW9uLgoKTm93LCBteSBuZXh0IHRob3VnaHQgaXMsIHdoZXJlIGRvZXMgYENPTkZJR19JTkVUYCBjb21lIGludG8gcGxheSBiZWZvcmUgdGhhdCBgI2VuZGlmYD8gVG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjb25kaXRpb25hbCBjb21waWxhdGlvbiwgSSBuZWVkIHRvIHRyYWNlIGJhY2sgYW5kIHBpbnBvaW50IGV4YWN0bHkgd2hlcmUgYENPTkZJR19JTkVUYCBpcyBkZWZpbmVkIG9yIGV2YWx1YXRlZC4gVGhpcyBjb250ZXh0IGlzIGNydWNpYWwgdG8gZ3Jhc3BpbmcgdGhlIHNpdHVhdGlvbnMgd2hlcmUgYHNrX2xvb2t1cF9wcm9nX29wc2AgaXMgYWN0dWFsbHkgYWN0aXZlLiBJJiMzOTtsbCBuZWVkIHRvIGZvbGxvdyB0aGUgY29kZSYjMzk7cyBsb2dpYyB0byBmaWd1cmUgb3V0IHRoZSBzY29wZSBhbmQgdGhlIGNvbmRpdGlvbnMgdGhhdCBkZXRlcm1pbmUgd2hldGhlciB0aGlzIHNlY3Rpb24gb2YgY29kZSBpcyB1bHRpbWF0ZWx5IGluY2x1ZGVkIGluIHRoZSBrZXJuZWwgYnVpbGQuIExldCYjMzk7cyBkaWcgaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE2OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0OyNpZmRlZiBDT05GSUdfSU5FVHwjaWYgSVNfRU5BQkxFRFxcKENPTkZJR19JTkVUJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmM9MjMxMz1zdGF0aWMgaW50IF9fYnBmX3JlZGlyZWN0X25laWdoX3Y2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMjMyMC1cbm5ldC9jb3JlL2ZpbHRlci5jOjIzMjE6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lORVQpXG5uZXQvY29yZS9maWx0ZXIuYy0yMzIyLXN0YXRpYyBpbnQgYnBmX291dF9uZWlnaF92NChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9NjIwMz1CUEZfQ0FMTF8zKGJwZl9iaW5kLCBzdHJ1Y3QgYnBmX3NvY2tfYWRkcl9rZXJuICosIGN0eCwgc3RydWN0IHNvY2thZGRyICosIGFkZHIsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNjIwNS17XG5uZXQvY29yZS9maWx0ZXIuYzo2MjA2OiNpZmRlZiBDT05GSUdfSU5FVFxubmV0L2NvcmUvZmlsdGVyLmMtNjIwNy1cdHN0cnVjdCBzb2NrICpzayA9IGN0eC1cdTAwM2Vzaztcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz02Mjg4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrYl9nZXRfeGZybV9zdGF0ZV9wcm90byA9IHtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy02Mjk5LVxubmV0L2NvcmUvZmlsdGVyLmM6NjMwMDojaWYgSVNfRU5BQkxFRChDT05GSUdfSU5FVCkgfHwgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbm5ldC9jb3JlL2ZpbHRlci5jLTYzMDEtc3RhdGljIGludCBicGZfZmliX3NldF9md2RfcGFyYW1zKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9NjMzMD1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKmJwZl9maWJfdmxhbl9pbnB1dF9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy02MzQ5LVxubmV0L2NvcmUvZmlsdGVyLmM6NjM1MDojaWYgSVNfRU5BQkxFRChDT05GSUdfSU5FVClcbm5ldC9jb3JlL2ZpbHRlci5jLTYzNTEtc3RhdGljIGludCBicGZfaXB2NF9maWJfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGJwZl9maWJfbG9va3VwICpwYXJhbXMsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9NjY3Mj1CUEZfQ0FMTF80KGJwZl94ZHBfZmliX2xvb2t1cCwgc3RydWN0IHhkcF9idWZmICosIGN0eCxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy02NjgxLVx0c3dpdGNoIChwYXJhbXMtXHUwMDNlZmFtaWx5KSB7XG5uZXQvY29yZS9maWx0ZXIuYzo2NjgyOiNpZiBJU19FTkFCTEVEKENPTkZJR19JTkVUKVxubmV0L2NvcmUvZmlsdGVyLmMtNjY4My1cdGNhc2UgQUZfSU5FVDpcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz02NzA2PUJQRl9DQUxMXzQoYnBmX3NrYl9maWJfbG9va3VwLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNjcyNS1cdHN3aXRjaCAocGFyYW1zLVx1MDAzZWZhbWlseSkge1xubmV0L2NvcmUvZmlsdGVyLmM6NjcyNjojaWYgSVNfRU5BQkxFRChDT05GSUdfSU5FVClcbm5ldC9jb3JlL2ZpbHRlci5jLTY3MjctXHRjYXNlIEFGX0lORVQ6XG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9NzE1Nz1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9sd3Rfc2VnNl9hZGp1c3Rfc3JoX3Byb3RvID0ge1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTcxNjYtXG5uZXQvY29yZS9maWx0ZXIuYzo3MTY3OiNpZmRlZiBDT05GSUdfSU5FVFxubmV0L2NvcmUvZmlsdGVyLmMtNzE2OC1zdGF0aWMgc3RydWN0IHNvY2sgKnNrX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBicGZfc29ja190dXBsZSAqdHVwbGUsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9ODQ2ND1zb2NrX2FkZHJfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy04NDg2LVx0XHRyZXR1cm4gXHUwMDI2YnBmX2V2ZW50X291dHB1dF9kYXRhX3Byb3RvO1xubmV0L2NvcmUvZmlsdGVyLmM6ODQ4NzojaWZkZWYgQ09ORklHX0lORVRcbm5ldC9jb3JlL2ZpbHRlci5jLTg0ODgtXHRjYXNlIEJQRl9GVU5DX3NrX2xvb2t1cF90Y3A6XG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9ODU3Mz1jZ19za2JfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy04NTk5LSNlbmRpZlxubmV0L2NvcmUvZmlsdGVyLmM6ODYwMDojaWZkZWYgQ09ORklHX0lORVRcbm5ldC9jb3JlL2ZpbHRlci5jLTg2MDEtXHRjYXNlIEJQRl9GVU5DX3NrX2xvb2t1cF90Y3A6XG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9ODYyMj10Y19jbHNfYWN0X2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtODcxOC0jZW5kaWZcbm5ldC9jb3JlL2ZpbHRlci5jOjg3MTk6I2lmZGVmIENPTkZJR19JTkVUXG5uZXQvY29yZS9maWx0ZXIuYy04NzIwLVx0Y2FzZSBCUEZfRlVOQ19za19sb29rdXBfdGNwOlxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTg3NTk9eGRwX2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtODc4Ny1cdFx0cmV0dXJuIFx1MDAyNmJwZl94ZHBfY2hlY2tfbXR1X3Byb3RvO1xubmV0L2NvcmUvZmlsdGVyLmM6ODc4ODojaWZkZWYgQ09ORklHX0lORVRcbm5ldC9jb3JlL2ZpbHRlci5jLTg3ODktXHRjYXNlIEJQRl9GVU5DX3NrX2xvb2t1cF91ZHA6XG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9ODgzND1zb2NrX29wc19mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTg4NjItXHRcdHJldHVybiBcdTAwMjZicGZfZ2V0X25ldG5zX2Nvb2tpZV9zb2NrX29wc19wcm90bztcbm5ldC9jb3JlL2ZpbHRlci5jOjg4NjM6I2lmZGVmIENPTkZJR19JTkVUXG5uZXQvY29yZS9maWx0ZXIuYy04ODY0LVx0Y2FzZSBCUEZfRlVOQ19sb2FkX2hkcl9vcHQ6XG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9ODkxNj1za19za2JfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy04OTQwLVx0XHRyZXR1cm4gXHUwMDI2YnBmX3NrYl9ldmVudF9vdXRwdXRfcHJvdG87XG5uZXQvY29yZS9maWx0ZXIuYzo4OTQxOiNpZmRlZiBDT05GSUdfSU5FVFxubmV0L2NvcmUvZmlsdGVyLmMtODk0Mi1cdGNhc2UgQlBGX0ZVTkNfc2tfbG9va3VwX3RjcDpcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz0xMTY1Nj1pbnQgc2tfZ2V0X2ZpbHRlcihzdHJ1Y3Qgc29jayAqc2ssIHNvY2twdHJfdCBvcHR2YWwsIHVuc2lnbmVkIGludCBsZW4pXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTE2OTgtXG5uZXQvY29yZS9maWx0ZXIuYzoxMTY5OTojaWZkZWYgQ09ORklHX0lORVRcbm5ldC9jb3JlL2ZpbHRlci5jLTExNzAwLXN0YXRpYyB2b2lkIGJwZl9pbml0X3JldXNlcG9ydF9rZXJuKHN0cnVjdCBza19yZXVzZXBvcnRfa2VybiAqcmV1c2Vfa2Vybixcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz0xMjIzNT1CUEZfQ0FMTF8xKGJwZl9za2NfdG9fdGNwX3RpbWV3YWl0X3NvY2ssIHN0cnVjdCBzb2NrICosIHNrKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTEyMjQyLVxubmV0L2NvcmUvZmlsdGVyLmM6MTIyNDM6I2lmZGVmIENPTkZJR19JTkVUXG5uZXQvY29yZS9maWx0ZXIuYy0xMjI0NC1cdGlmIChzayBcdTAwMjZcdTAwMjYgc2stXHUwMDNlc2tfcHJvdCA9PSBcdTAwMjZ0Y3BfcHJvdCBcdTAwMjZcdTAwMjYgc2stXHUwMDNlc2tfc3RhdGUgPT0gVENQX1RJTUVfV0FJVClcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz0xMjI2ND1CUEZfQ0FMTF8xKGJwZl9za2NfdG9fdGNwX3JlcXVlc3Rfc29jaywgc3RydWN0IHNvY2sgKiwgc2spXG5uZXQvY29yZS9maWx0ZXIuYy0xMjI2NS17XG5uZXQvY29yZS9maWx0ZXIuYzoxMjI2NjojaWZkZWYgQ09ORklHX0lORVRcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMjY3LVx0aWYgKHNrIFx1MDAyNlx1MDAyNiBzay1cdTAwM2Vza19wcm90ID09IFx1MDAyNnRjcF9wcm90IFx1MDAyNlx1MDAyNiBzay1cdTAwM2Vza19zdGF0ZSA9PSBUQ1BfTkVXX1NZTl9SRUNWKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTEyNzM0PV9fYnBmX2tmdW5jIGludCBicGZfaWNtcF9zZW5kKHN0cnVjdCBfX3NrX2J1ZmYgKnNrYl9jdHgsIGludCB0eXBlLCBpbnQgY29kZSlcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0xMjc0Ny1cdHN3aXRjaCAoc2tiLVx1MDAzZXByb3RvY29sKSB7XG5uZXQvY29yZS9maWx0ZXIuYzoxMjc0ODojaWYgSVNfRU5BQkxFRChDT05GSUdfSU5FVClcbm5ldC9jb3JlL2ZpbHRlci5jLTEyNzQ5LVx0Y2FzZSBodG9ucyhFVEhfUF9JUCk6IHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTY6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjhtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcyMjUKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIEJQRiBUZXN0aW5nIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgYnBmX3Byb2dfdGVzdF9ydW5gIGludGVyYWN0cyB3aXRoIGBicGZfcHJvZ190ZXN0X3J1bl9za19sb29rdXBgLiBNeSBndXQgdGVsbHMgbWUgdGhhdCBgYnBmX3Byb2dfdGVzdF9ydW5gIGlzIHRoZSBnZW5lcmFsIGVudHJ5IHBvaW50IGZvciBydW5uaW5nIEJQRiBwcm9ncmFtcyBpbiBhIHRlc3QgY29udGV4dCwgYW5kIHRoYXQgYGJwZl9wcm9nX3Rlc3RfcnVuX3NrX2xvb2t1cGAgaXMgbGlrZWx5IGEgc3BlY2lhbGl6ZWQgZnVuY3Rpb24gZm9yIHRlc3RpbmcgcHJvZ3JhbXMgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gc29ja2V0IGxvb2t1cHMgb3IgaW50ZXJhY3Rpb25zIHdpdGggdGhlIG5ldHdvcmsgc3RhY2suIEl0JiMzOTtzIGEgY2xhc3NpYyBkaXNwYXRjaCBwYXR0ZXJuLCBsaWtlbHkgdXNpbmcgc29tZSBraW5kIG9mIGludGVybmFsIHN3aXRjaCBvciBmdW5jdGlvbiBwb2ludGVyIHRhYmxlLgoKVGhlcmVmb3JlLCBsZXQgbWUgbmF2aWdhdGUgdG8gYGtlcm5lbC9icGYvc3lzY2FsbC5jYCBhbmQgZGlnIGludG8gdGhlIHNvdXJjZS4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3Igd2hlcmUgYGJwZl9wcm9nX3Rlc3RfcnVuYCBpcyBkZWZpbmVkIGFuZCBob3cgaXQgY2FsbHMgb3V0IHRvIG90aGVyIGZ1bmN0aW9ucy4gSSBleHBlY3QgdG8gZmluZCBzb21lIGxvZ2ljIHRoYXQgZGV0ZXJtaW5lcyAqd2hpY2gqIHNwZWNpZmljIGBicGZfcHJvZ190ZXN0X3J1bl8qYCBmdW5jdGlvbiB0byBjYWxsLCBiYXNlZCBvbiB0aGUgdHlwZSBvZiBCUEYgcHJvZ3JhbSBvciB0aGUgYXJndW1lbnRzIHBhc3NlZCB0byB0aGUgc3lzdGVtIGNhbGwuIFRoaXMgaXMgcHJvYmFibHkgYSBwb2ludGVyIHRvIHRoZSByaWdodCBmdW5jdGlvbmFsaXR5LCBvciBwZXJoYXBzIGFuIGVudW0uIEl0JiMzOTtzIGEgY29tbW9uIHBhdHRlcm4gdG8ga2VlcCB0aGUgZ2VuZXJhbCB0ZXN0IGZ1bmN0aW9uYWxpdHkgc2VwYXJhdGUgYW5kIGhhbmRsZSB0aGUgc3BlY2lmaWNzIGluIGRlZGljYXRlZCByb3V0aW5lcy4gVGhpcyBpcyBob3cgdGhleSBrZWVwIHRoaW5ncyBjbGVhbi4gTXkgaG9wZSBpcyB0byBzZWUgdGhlIGV4YWN0IGRlY2lzaW9uLW1ha2luZyBwcm9jZXNzIGZvciB0aGUgZGlzcGF0Y2g7IHRoZSBkYXRhIHN0cnVjdHVyZXMgdGhhdCBpbmZsdWVuY2UgdGhhdCBkZWNpc2lvbiBhcmUga2V5LiBJIGFudGljaXBhdGUgdGhlcmUgd2lsbCBiZSBhIGNhbGwgY2hhaW4gdG8gcmVzb2x2ZSBhZnRlciBJIGdldCB0aGVyZS4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGFjdHVhbGx5IHVuZGVyIHRoZSBob29kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxNjoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfcHJvZ190ZXN0X3J1biYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvc3lzY2FsbC5jPTQ3MTg9c3RhdGljIGludCBicGZfcHJvZ19xdWVyeShjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy00NzgxLVxua2VybmVsL2JwZi9zeXNjYWxsLmM6NDc4MjpzdGF0aWMgaW50IGJwZl9wcm9nX3Rlc3RfcnVuKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNDc4My1cdFx0XHQgICAgIHVuaW9uIGJwZl9hdHRyIF9fdXNlciAqdWF0dHIpXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9NjMwMz1zdGF0aWMgaW50IF9fc3lzX2JwZihlbnVtIGJwZl9jbWQgY21kLCBicGZwdHJfdCB1YXR0ciwgdW5zaWduZWQgaW50IHNpemUsXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjM4NC1cdGNhc2UgQlBGX1BST0dfVEVTVF9SVU46XG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2Mzg1Olx0XHRlcnIgPSBicGZfcHJvZ190ZXN0X3J1bihcdTAwMjZhdHRyLCB1YXR0ci51c2VyKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYzODYtXHRcdGJyZWFrO1xuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTY2NTA9Y29uc3Qgc3RydWN0IGJwZl9wcm9nX29wcyBicGZfc3lzY2FsbF9wcm9nX29wcyA9IHtcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjY2NTE6XHQudGVzdF9ydW4gPSBicGZfcHJvZ190ZXN0X3J1bl9zeXNjYWxsLFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjY1Mi19O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxNjoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzk3NgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkmIzM5O20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGBicGZfcHJvZ190ZXN0X3J1bmAgZnVuY3Rpb24uIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIG9wZXJhdGlvbiBpbiB0aGUgYGtlcm5lbC9icGYvc3lzY2FsbC5jYCBmaWxlLiBJJiMzOTttIGZvY3VzaW5nIG9uIGxpbmVzIDQ3ODIgdGhyb3VnaCA0ODEwLiBUaGlzIHNlY3Rpb24gaXMga2V5IHRvIGNvbXByZWhlbmRpbmcgdGhlIGV4ZWN1dGlvbiBmbG93IG9yIGNyaXRpY2FsIGFzcGVjdHMgb2YgdGhlIHRlc3RpbmcgZW52aXJvbm1lbnQgZm9yIEJQRiBwcm9ncmFtcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGNvZGUgaXMgZG9pbmcsIGxpa2VseSBob3cgaXQmIzM5O3Mgc2V0dGluZyB1cCB0aGUgdGVzdGluZyBlbnZpcm9ubWVudCBvciBjaGVja2luZyB0aGUgcHJvZ3JhbSBleGVjdXRpb24uIFRoaXMgc2hvdWxkIGlsbHVtaW5hdGUgaG93IHRoZSBCUEYgcHJvZ3JhbXMgaW50ZXJhY3Qgd2l0aCB0aGUga2VybmVsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxNjoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvc3lzY2FsbC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDc4MiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs0NzgyOlx0c3RhdGljIGludCBicGZfcHJvZ190ZXN0X3J1bihjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcbjQ3ODM6XHRcdFx0XHQgICAgIHVuaW9uIGJwZl9hdHRyIF9fdXNlciAqdWF0dHIpXG40Nzg0Olx0e1xuNDc4NTpcdFx0c3RydWN0IGJwZl9wcm9nICpwcm9nO1xuNDc4NjpcdFx0aW50IHJldCA9IC1FTk9UU1VQUDtcbjQ3ODc6XHRcbjQ3ODg6XHRcdGlmIChDSEVDS19BVFRSKEJQRl9QUk9HX1RFU1RfUlVOKSlcbjQ3ODk6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG40NzkwOlx0XG40NzkxOlx0XHRpZiAoKGF0dHItXHUwMDNldGVzdC5jdHhfc2l6ZV9pbiBcdTAwMjZcdTAwMjYgIWF0dHItXHUwMDNldGVzdC5jdHhfaW4pIHx8XG40NzkyOlx0XHQgICAgKCFhdHRyLVx1MDAzZXRlc3QuY3R4X3NpemVfaW4gXHUwMDI2XHUwMDI2IGF0dHItXHUwMDNldGVzdC5jdHhfaW4pKVxuNDc5MzpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjQ3OTQ6XHRcbjQ3OTU6XHRcdGlmICgoYXR0ci1cdTAwM2V0ZXN0LmN0eF9zaXplX291dCBcdTAwMjZcdTAwMjYgIWF0dHItXHUwMDNldGVzdC5jdHhfb3V0KSB8fFxuNDc5NjpcdFx0ICAgICghYXR0ci1cdTAwM2V0ZXN0LmN0eF9zaXplX291dCBcdTAwMjZcdTAwMjYgYXR0ci1cdTAwM2V0ZXN0LmN0eF9vdXQpKVxuNDc5NzpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjQ3OTg6XHRcbjQ3OTk6XHRcdHByb2cgPSBicGZfcHJvZ19nZXQoYXR0ci1cdTAwM2V0ZXN0LnByb2dfZmQpO1xuNDgwMDpcdFx0aWYgKElTX0VSUihwcm9nKSlcbjQ4MDE6XHRcdFx0cmV0dXJuIFBUUl9FUlIocHJvZyk7XG40ODAyOlx0XG40ODAzOlx0XHRpZiAocHJvZy1cdTAwM2VhdXgtXHUwMDNlb3BzLVx1MDAzZXRlc3RfcnVuKVxuNDgwNDpcdFx0XHRyZXQgPSBwcm9nLVx1MDAzZWF1eC1cdTAwM2VvcHMtXHUwMDNldGVzdF9ydW4ocHJvZywgYXR0ciwgdWF0dHIpO1xuNDgwNTpcdFxuNDgwNjpcdFx0YnBmX3Byb2dfcHV0KHByb2cpO1xuNDgwNzpcdFx0cmV0dXJuIHJldDtcbjQ4MDg6XHR9XG40ODA5Olx0XG40ODEwOlx0I2RlZmluZSBCUEZfT0JKX0dFVF9ORVhUX0lEX0xBU1RfRklFTEQgbmV4dF9pZFxuNDgxMTpcdFxuNDgxMjpcdHN0YXRpYyBpbnQgYnBmX29ial9nZXRfbmV4dF9pZChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcbjQ4MTM6XHRcdFx0XHQgICAgICAgdW5pb24gYnBmX2F0dHIgX191c2VyICp1YXR0cixcbjQ4MTQ6XHRcdFx0XHQgICAgICAgc3RydWN0IGlkciAqaWRyLFxuNDgxNTpcdFx0XHRcdCAgICAgICBzcGlubG9ja190ICpsb2NrKVxuNDgxNjpcdHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTY6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjZtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg3NTUKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA1NTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIGBCUEZfUFJPR19UWVBFX1NLX0xPT0tVUGAgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGhvdyBpdCBpbXBhY3RzIGBCUEZfUFJPR19UWVBFX1NLX0xPT0tVUGAuIFdoZW4gYSBCUEYgcHJvZ3JhbSBvZiB0aGF0IHR5cGUgaXMgaW52b2tlZCB3aXRoIGBCUEZfUFJPR19URVNUX1JVTmAgb3IgYEJQRl9QUk9HX1JVTmAgdXNpbmcgdGhlIGBicGYoKWAgc3lzY2FsbCwgdGhlIGBicGZfcHJvZ190ZXN0X3J1bl9za19sb29rdXBgIGZ1bmN0aW9uIGdldHMgZXhlY3V0ZWQuIEkga25vdyB0aGlzIGJlY2F1c2UgdGhlIGNvZGUgZmxvdyB0ZWxscyBtZSB0aGF0LiBHb29kLCB0aGF0IGZ1bmN0aW9uIGlzIGV4cG9ydGVkLCBpdCYjMzk7cyBub3Qgc3RhdGljLCB3aGljaCBtZWFucyB1c2Vyc3BhY2UgY2FuIGRpcmVjdGx5IGNhbGwgaXQgdmlhIHRoZSBgQlBGX1BST0dfVEVTVF9SVU5gIGNvbW1hbmQuCgpOb3csIGxldCYjMzk7cyBsb29rIGF0IHdoYXQmIzM5O3MgYWN0dWFsbHkgY2hhbmdlZC4gVGhpcyBwYXRjaCBzZWVtcyB0byBhZmZlY3QgaG93IFJDVSB1bmxvY2tpbmcgd29ya3MgaW4gYGJwZl9wcm9nX3Rlc3RfcnVuX3NrX2xvb2t1cGAsIGFuZCBJIG5lZWQgdG8gYmUgKnZlcnkqIHByZWNpc2UgaGVyZS4gSXQgbG9va3MgbGlrZSB0aGUgZml4IGVuc3VyZXMgYGN0eC5zZWxlY3RlZF9za2AgaXNuJiMzOTt0IGFjY2Vzc2VkIG91dHNpZGUgYW4gUkNVIHJlYWQgY3JpdGljYWwgc2VjdGlvbiwgb3IgaXQmIzM5O3MgZml4aW5nIHNvbWV0aGluZyByZWxhdGVkIHRvIGBzb2NrX2dlbl9jb29raWVgIGFuZCBgLUVPUE5PVFNVUFBgIGhhbmRsaW5nIGluIHJlbGF0aW9uIHRvIHRlc3QgdGltZXJzLiBUaGF0JiMzOTtzIGEgY3JpdGljYWwgYXJlYSwgYWZmZWN0aW5nIGNvcmUgbmV0d29ya2luZyBhbmQgQlBGIGxvZ2ljLiBGdXJ0aGVybW9yZSwgc2luY2UgaXQmIzM5O3MgcmVhY2hhYmxlIHZpYSBgYnBmKClgIHdpdGggYEJQRl9QUk9HX1RFU1RfUlVOYCBpbiBRRU1VLCB0aGlzIGlzIGRlZmluaXRlbHkgc29tZXRoaW5nIEkgd2FudCB0byBmdXp6LiAqKmBXb3J0aEZ1enppbmc9dHJ1ZWAqKi4KCkFscmlnaHQsIG1vdmluZyBvbiwgbGV0JiMzOTtzIGRvdWJsZS1jaGVjayB0aGUgZW50cnkgcG9pbnRzLiBgYnBmX3Byb2dfdGVzdF9ydW5fc2tfbG9va3VwYCBpcyBhIG5vbi1zdGF0aWMgZW50cnkgcG9pbnQgdGhhdCYjMzk7cyBjYWxsZWQgdGhyb3VnaCBhIGZ1bmN0aW9uIHBvaW50ZXIsIGBvcHMtJmd0O3Rlc3RfcnVuYCB3aXRoaW4gYGJwZl9wcm9nX3Rlc3RfcnVuYC4gR29vZC4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGlmIGFueSBvdGhlciBzeW1ib2xzIHdlcmUgdG91Y2hlZCBieSB0aGlzIHBhdGNoLiBMb29rcyBsaWtlIGBicGZfcHJvZ190ZXN0X3J1bl9za19sb29rdXBgIGluIGBuZXQvYnBmL3Rlc3RfcnVuLmNgIGlzIHRoZSBvbmx5IHN5bWJvbCBhZmZlY3RlZCBoZXJlLgoKRmluYWxseSwgSSBuZWVkIHRvIHZlcmlmeSB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMuIEkga25vdyBJJiMzOTtsbCBuZWVkIGBCUEZfU1lTQ0FMTGAgKGluIGBrZXJuZWwvYnBmL0tjb25maWdgLCBidWlsZHMgYG5ldC9icGYvdGVzdF9ydW4ub2ApLCBgTkVUYCAoaW4gYG5ldC9NYWtlZmlsZWAsIGVuYWJsZXMgdGhlIG5ldHdvcmsgc3Vic3lzdGVtKSwgYW5kIGBJTkVUYCAoaW4gYG5ldC9jb3JlL2ZpbHRlci5jYCwgd2hpY2ggZ3VhcmRzIGBza19sb29rdXBfcHJvZ19vcHNgKS4gTGV0IG1lIGp1c3QgY29uZmlybSB0aGVzZSBjb25maWd1cmF0aW9ucy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGJvdGggYENPTkZJR19JTkVUYCBhbmQgYENPTkZJR19CUEZfU1lTQ0FMTGAgYW5kIGBDT05GSUdfTkVUYCBhcmUgZW5hYmxlZC4gSSBhbHNvIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYENPTkZJR19JTkVUYCBkZXBlbmRzIG9uIGBDT05GSUdfTkVUYC4gTGV0IG1lIHNlYXJjaCBgY29uZmlnIElORVRgIGluIGBuZXQvaXB2NC9LY29uZmlnYCB0byBiZSBzdXJlLiBBbHJpZ2h0LCBJIHRoaW5rIEkmIzM5O3ZlIGdvdCB0aGlzIGZpZ3VyZWQgb3V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxNjoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSU5FVFxcYiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L0tjb25maWc9OTk9Y29uZmlnIE5FVF9IQU5EU0hBS0VfS1VOSVRfVEVTVFxuLS1cbm5ldC9LY29uZmlnLTExMy1cbm5ldC9LY29uZmlnOjExNDpjb25maWcgSU5FVFxubmV0L0tjb25maWctMTE1LVx0Ym9vbCBcJiMzNDtUQ1AvSVAgbmV0d29ya2luZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxNjoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDAzNAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBhc3BlY3QgYmV0dGVyLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byB6ZXJvIGluIG9uIHRoZSBgbmV0L0tjb25maWdgIGZpbGUuIEdpdmVuIHRoZSBjb250ZXh0LCBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGFyb3VuZCBsaW5lIDExNC4gVGhhdCYjMzk7cyB1c3VhbGx5IHdoZXJlIHRoZSBtZWF0IG9mIGEgcGFydGljdWxhciBmZWF0dXJlIG9yIG9wdGlvbiBzdGFydHMgdG8gZ2V0IGRlZmluZWQgd2l0aGluIHRoZSBuZXR3b3JrIHN1YnN5c3RlbS4gSXQmIzM5O3MgYSBnb29kIGJldCBJJiMzOTtsbCBmaW5kIHRoZSByZWxldmFudCBgY29uZmlnYCBvcHRpb25zLCBkZXBlbmRlbmNpZXMsIGFuZCBoZWxwIHRleHQgdGhlcmUuIFRpbWUgdG8gc2VlIHdoYXQga2luZCBvZiBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBhcmUgZGVmaW5lZCwgaWYgdGhleSYjMzk7cmUgcmVsZXZhbnQsIGFuZCBob3BlZnVsbHkgdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIGludm9sdmVkLiBMZXQmIzM5O3Mgc2VlIHdoYXQgYG5ldC9LY29uZmlnYCByZXZlYWxzLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE2OjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDExMDpcdFxuIDExMTpcdFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBLVW5pdCBhbmQgdW5pdCB0ZXN0cyBpbiBnZW5lcmFsLCByZWZlclxuIDExMjpcdFx0ICB0byB0aGUgS1VuaXQgZG9jdW1lbnRhdGlvbiBpbiBEb2N1bWVudGF0aW9uL2Rldi10b29scy9rdW5pdC8uXG4gMTEzOlx0XG4gMTE0Olx0Y29uZmlnIElORVRcbiAxMTU6XHRcdGJvb2wgXCYjMzQ7VENQL0lQIG5ldHdvcmtpbmdcJiMzNDtcbiAxMTY6XHRcdGhlbHBcbiAxMTc6XHRcdCAgVGhlc2UgYXJlIHRoZSBwcm90b2NvbHMgdXNlZCBvbiB0aGUgSW50ZXJuZXQgYW5kIG9uIG1vc3QgbG9jYWxcbiAxMTg6XHRcdCAgRXRoZXJuZXRzLiBJdCBpcyBoaWdobHkgcmVjb21tZW5kZWQgdG8gc2F5IFkgaGVyZSAodGhpcyB3aWxsIGVubGFyZ2VcbiAxMTk6XHRcdCAgeW91ciBrZXJuZWwgYnkgYWJvdXQgNDAwIEtCKSwgc2luY2Ugc29tZSBwcm9ncmFtcyAoZS5nLiB0aGUgWCB3aW5kb3dcbiAxMjA6XHRcdCAgc3lzdGVtKSB1c2UgVENQL0lQIGV2ZW4gaWYgeW91ciBtYWNoaW5lIGlzIG5vdCBjb25uZWN0ZWQgdG8gYW55XG4gMTIxOlx0XHQgIG90aGVyIGNvbXB1dGVyLiBZb3Ugd2lsbCBnZXQgdGhlIHNvLWNhbGxlZCBsb29wYmFjayBkZXZpY2Ugd2hpY2hcbiAxMjI6XHRcdCAgYWxsb3dzIHlvdSB0byBwaW5nIHlvdXJzZWxmIChncmVhdCBmdW4sIHRoYXQhKS5cbiAxMjM6XHRcbiAxMjQ6XHRcdCAgRm9yIGFuIGV4Y2VsbGVudCBpbnRyb2R1Y3Rpb24gdG8gTGludXggbmV0d29ya2luZywgcGxlYXNlIHJlYWQgdGhlXG4gMTI1Olx0XHQgIExpbnV4IE5ldHdvcmtpbmcgSE9XVE8sIGF2YWlsYWJsZSBmcm9tXG4gMTI2Olx0XHQgIFx1MDAzY2h0dHA6Ly93d3cudGxkcC5vcmcvZG9jcy5odG1sI2hvd3RvXHUwMDNlLlxuIDEyNzpcdFxuIDEyODpcdFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSBhbmQgYWxzbyB0byBcJiMzNDsvcHJvYyBmaWxlIHN5c3RlbSBzdXBwb3J0XCYjMzQ7IGFuZFxuIDEyOTpcdFx0ICBcJiMzNDtTeXNjdGwgc3VwcG9ydFwmIzM0OyBiZWxvdywgeW91IGNhbiBjaGFuZ2UgdmFyaW91cyBhc3BlY3RzIG9mIHRoZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxNjoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDU5OQoJCQkJCQkJb3V0cHV0OiAxNjUKCQkJCQkJCXRob3VnaHRzOiAyMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIEJQRiBGaXgqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggZml4aW5nIGFuIFJDVSByZWFkLWxvY2sgbGlmZXRpbWUgaXNzdWUgaW4gYGJwZl9wcm9nX3Rlc3RfcnVuX3NrX2xvb2t1cGAuIE15IHVuZGVyc3RhbmRpbmcsIGZyb20gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLCBpcyB0aGF0IGBuZXQvS2NvbmZpZ2AgaW5jbHVkZXMgdGhpcyB1bmRlciB0aGUgJiMzNDtOZXR3b3JraW5nIG9wdGlvbnMmIzM0OyBtZW51LCB3aGljaCBpdHNlbGYgaXMgZ3VhcmRlZCBieSBgaWYgTkVUYC4gVGhpcyB0ZWxscyBtZSB0aGF0IGBCUEZfU1lTQ0FMTGAsIGBORVRgLCBhbmQgYElORVRgIGFyZSB0aGUgaW1wb3J0YW50IGNvbmZpZ3VyYXRpb25zIHRvIGtlZXAgaW4gbWluZCBoZXJlLgoKTGV0IG1lIGp1c3QgcnVuIHRocm91Z2ggbXkgbWVudGFsIGNoZWNrbGlzdCB0byBjb25maXJtIG15IGFuYWx5c2lzLiBUaGUgZnV6emluZyBmbGFnLCBgV29ydGhGdXp6aW5nYCwgaXMgc2V0IHRvIGB0cnVlYCwgd2hpY2ggbWFrZXMgc2Vuc2UgZ2l2ZW4gdGhlIHBvdGVudGlhbCBzZWN1cml0eSBpbXBsaWNhdGlvbnMgb2YgQlBGLiBUaGUgcm9vdCBvZiB0aGUgcHJvYmxlbSBzZWVtcyB0byBiZSB0aGF0IGBjdHguc2VsZWN0ZWRfc2tgIGlzIGJlaW5nIGFjY2Vzc2VkIGFmdGVyIGBicGZfdGVzdF90aW1lcl9sZWF2ZSgpYCBoYXMgdW5sb2NrZWQgdGhlIFJDVSByZWFkIGxvY2ssIHdoaWNoIGlzIGRlZmluaXRlbHkgYSBidWcuIFRoaXMgaXNzdWUgaXMgaW4gdGhlIGNvcmUgQlBGIHRlc3QgcnVubmVyLCBzcGVjaWZpY2FsbHkgd2hlbiBydW5uaW5nIHdpdGggdGhlIGBicGYoQlBGX1BST0dfVEVTVF9SVU4pYCBzeXNjYWxsIG9uIGBCUEZfUFJPR19UWVBFX1NLX0xPT0tVUGAgcHJvZ3JhbXMuIFRoZXJlZm9yZSwgdGhlIHJlbGV2YW50IHN5bWJvbHMgSSBuZWVkIHRvIGZvY3VzIG9uIGFyZSBgYnBmX3Byb2dfdGVzdF9ydW5fc2tfbG9va3VwYC4KCkJhc2VkIG9uIHRoaXMsIEkmIzM5O20gY29uZmlkZW50IHRoYXQgZW5hYmxpbmcgYEJQRl9TWVNDQUxMYCwgYE5FVGAsIGFuZCBgSU5FVGAgaXMgdGhlIHJpZ2h0IG1vdmUgZm9yIHJlcHJvZHVjaW5nIGFuZCB0ZXN0aW5nIHRoaXMgZml4LgoKQWxyaWdodCwgdGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE2OjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtORVQmIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9wcm9nX3Rlc3RfcnVuX3NrX2xvb2t1cCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgYnBmX3Byb2dfdGVzdF9ydW5fc2tfbG9va3VwYCB0byBhY2Nlc3MgdGhlIHNlbGVjdGVkIHNvY2tldCBgY3R4LnNlbGVjdGVkX3NrYCB3aXRoaW4gdGhlIFJDVS1wcm90ZWN0ZWQgY3JpdGljYWwgc2VjdGlvbiBiZWZvcmUgY2FsbGluZyBgYnBmX3Rlc3RfdGltZXJfbGVhdmUoXHUwMDI2dClgLCBwcmV2ZW50aW5nIHVzZS1hZnRlci1mcmVlIG9yIFJDVSB2aW9sYXRpb25zLiBUaGlzIGNvZGUgcGF0aCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBgQlBGX1BST0dfVEVTVF9SVU5gIGNvbW1hbmQgb2YgdGhlIGBicGYoKWAgc3lzY2FsbCBvbiBza19sb29rdXAgQlBGIHByb2dyYW1zIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7TkVUJiMzNDssCiAgICAmIzM0O0lORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfcHJvZ190ZXN0X3J1bl9za19sb29rdXAmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGJwZl9wcm9nX3Rlc3RfcnVuX3NrX2xvb2t1cGAgdG8gYWNjZXNzIHRoZSBzZWxlY3RlZCBzb2NrZXQgYGN0eC5zZWxlY3RlZF9za2Agd2l0aGluIHRoZSBSQ1UtcHJvdGVjdGVkIGNyaXRpY2FsIHNlY3Rpb24gYmVmb3JlIGNhbGxpbmcgYGJwZl90ZXN0X3RpbWVyX2xlYXZlKFx1MDAyNnQpYCwgcHJldmVudGluZyB1c2UtYWZ0ZXItZnJlZSBvciBSQ1UgdmlvbGF0aW9ucy4gVGhpcyBjb2RlIHBhdGggaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgYEJQRl9QUk9HX1RFU1RfUlVOYCBjb21tYW5kIG9mIHRoZSBgYnBmKClgIHN5c2NhbGwgb24gc2tfbG9va3VwIEJQRiBwcm9ncmFtcyBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE2OjI4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjE2bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE2OjI4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjE2bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBicGZfcHJvZ190ZXN0X3J1bl9za19sb29rdXAoKWAgaW4gYG5ldC9icGYvdGVzdF9ydW4uY2AgdG8gaW5zcGVjdCBgY3R4LnNlbGVjdGVkX3NrYCBhbmQgdXBkYXRlIGB1c2VyX2N0eC1cdTAwM2Vjb29raWVgIGJlZm9yZSBjYWxsaW5nIGBicGZfdGVzdF90aW1lcl9sZWF2ZShcdTAwMjZ0KWAsIHJhdGhlciB0aGFuIGFmdGVyIGl0LlxuXG5UaGlzIGNoYW5nZSBlbnN1cmVzIHRoYXQgYGN0eC5zZWxlY3RlZF9za2AgaXMgYWNjZXNzZWQgd2hpbGUgc3RpbGwgcHJvdGVjdGVkIGJ5IHRoZSBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24gZXN0YWJsaXNoZWQgYnkgYGJwZl90ZXN0X3RpbWVyX2VudGVyKClgLiBBY2Nlc3NpbmcgYGN0eC5zZWxlY3RlZF9za2AgYWZ0ZXIgcmVsZWFzaW5nIFJDVSBjb3VsZCByZXN1bHQgaW4gYSB1c2UtYWZ0ZXItZnJlZSBvciBSQ1UgZGVyZWZlcmVuY2UgYnVnLCB3aGljaCBpcyBtb25pdG9yZWQgYnkgS0FTQU4gYW5kIFBST1ZFX1JDVSAvIExPQ0tERVAuXG5cblRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzOlxuLSBgdXNlcl9jdHhgIGlzIGFsbG9jYXRlZCB2aWEgYGt6YWxsb2MoKWAgaW4gYGJwZl9jdHhfaW5pdCgpYC5cbi0gU3RhY2sgc3RydWN0dXJlcyBzdWNoIGFzIGBjdHhgIGFyZSB6ZXJvLWluaXRpYWxpemVkIChge31gKS5cbi0gVGhlIGNvbmRpdGlvbiBgcmV0IFx1MDAzZT0gMGAgY2hlY2tzIGByZXRgIHdoaWNoIGlzIGluaXRpYWxpemVkL3VwZGF0ZWQgYnkgYGJwZl90ZXN0X3RpbWVyX2NvbnRpbnVlKClgLlxuLSBObyBuZXcgYnVmZmVycywgdW5pbml0aWFsaXplZCBmaWVsZHMsIG9yIG1lbW9yeSBjb3BpZXMgYXJlIGludHJvZHVjZWQuXG5cblRoZXJlZm9yZSwgdGhpcyBjaGFuZ2UgZG9lcyBub3Qgd2FycmFudCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGEzOTU3N2IyYjNjYWY2MzI5ZTJmM2E0NTI2MGRlMDZhMTEzZDIwMTEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IEF1ZyAyOSAxNTo1NjozOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9icGYvdGVzdF9ydW4uYyBiL25ldC9icGYvdGVzdF9ydW4uYwppbmRleCA1ZDUxZjZjYjdkMTU0Li5lNjc3ZWMzMzkwZTM3IDEwMDY0NAotLS0gYS9uZXQvYnBmL3Rlc3RfcnVuLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2JwZi90ZXN0X3J1bi5jCkBAIC0xNjUwLDIxICYjNDM7MTY1MCwyMSBAQCBpbnQgYnBmX3Byb2dfdGVzdF9ydW5fc2tfbG9va3VwKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgY29uc3QgdW5pb24gYnBmX2F0dHIgKmthdAogCQljdHguc2VsZWN0ZWRfc2sgPSBOVUxMOwogCQlyZXR2YWwgPSBCUEZfUFJPR19TS19MT09LVVBfUlVOX0FSUkFZKHByb2dzLCBjdHgsIGJwZl9wcm9nX3J1bik7CiAJfSB3aGlsZSAoYnBmX3Rlc3RfdGltZXJfY29udGludWUoJmFtcDt0LCAxLCByZXBlYXQsICZhbXA7cmV0LCAmYW1wO2R1cmF0aW9uKSk7CiYjNDM7CiYjNDM7CWlmIChyZXQgJmd0Oz0gMCkgewomIzQzOwkJdXNlcl9jdHgtJmd0O2Nvb2tpZSA9IDA7CiYjNDM7CQlpZiAoY3R4LnNlbGVjdGVkX3NrKSB7CiYjNDM7CQkJaWYgKGN0eC5zZWxlY3RlZF9zay0mZ3Q7c2tfcmV1c2Vwb3J0ICZhbXA7JmFtcDsgIWN0eC5ub19yZXVzZXBvcnQpCiYjNDM7CQkJCXJldCA9IC1FT1BOT1RTVVBQOwomIzQzOwkJCWVsc2UKJiM0MzsJCQkJdXNlcl9jdHgtJmd0O2Nvb2tpZSA9IHNvY2tfZ2VuX2Nvb2tpZShjdHguc2VsZWN0ZWRfc2spOwomIzQzOwkJfQomIzQzOwl9CiAJYnBmX3Rlc3RfdGltZXJfbGVhdmUoJmFtcDt0KTsKIAogCWlmIChyZXQgJmx0OyAwKQogCQlnb3RvIG91dDsKIAotCXVzZXJfY3R4LSZndDtjb29raWUgPSAwOwotCWlmIChjdHguc2VsZWN0ZWRfc2spIHsKLQkJaWYgKGN0eC5zZWxlY3RlZF9zay0mZ3Q7c2tfcmV1c2Vwb3J0ICZhbXA7JmFtcDsgIWN0eC5ub19yZXVzZXBvcnQpIHsKLQkJCXJldCA9IC1FT1BOT1RTVVBQOwotCQkJZ290byBvdXQ7Ci0JCX0KLQotCQl1c2VyX2N0eC0mZ3Q7Y29va2llID0gc29ja19nZW5fY29va2llKGN0eC5zZWxlY3RlZF9zayk7Ci0JfQotCiAJcmV0ID0gYnBmX3Rlc3RfZmluaXNoKGthdHRyLCB1YXR0ciwgTlVMTCwgTlVMTCwgMCwgMCwgcmV0dmFsLCBkdXJhdGlvbik7CiAJaWYgKCFyZXQpCiAJCXJldCA9IGJwZl9jdHhfZmluaXNoKGthdHRyLCB1YXR0ciwgdXNlcl9jdHgsIHNpemVvZigqdXNlcl9jdHgpKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE2OjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzODUKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJQRiBUZXN0IFJ1bm5lciBDb2RlKioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbi4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCYjMzk7cyBoYXBwZW5pbmcgd2l0aCB0aGlzIGRpZmYsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIEJQRiB0ZXN0aW5nIGZyYW1ld29yay4gSSYjMzk7bSBnb2luZyB0byBmb2N1cyBteSBhdHRlbnRpb24gb24gYG5ldC9icGYvdGVzdF9ydW4uY2AuIEZpcnN0LCBJJiMzOTtsbCBuZWVkIHRvIHVzZSBteSB0b29scyB0byBleGFtaW5lIHRoZSBkaWZmIGNsb3NlbHksIHVuZGVyc3RhbmQgdGhlIGNoYW5nZXMgbWFkZSBhbmQgdGhlbiBJIHdpbGwgcmVhZCB0aGUgcmVsZXZhbnQgcG9ydGlvbnMgb2YgdGhlIGNvZGUuCgpJIHRoaW5rIGEgZ29vZCBzdGFydGluZyBwb2ludCB3aWxsIGJlIGFyb3VuZCBsaW5lIDE2NTAgaW4gYG5ldC9icGYvdGVzdF9ydW4uY2AuIEkgd2lsbCByZWFkIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRoZXJlIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgYW55IGNoYW5nZXMuIExldCYjMzk7cyBzdGFydCB3aXRoIGByZWFkLWZpbGVgIHRvIGdldCBhIHF1aWNrIG92ZXJ2aWV3LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxNjoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9icGYvdGVzdF9ydW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE2MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTYwMDpcdFx0aWYgKElTX0VSUih1c2VyX2N0eCkpXG4xNjAxOlx0XHRcdHJldHVybiBQVFJfRVJSKHVzZXJfY3R4KTtcbjE2MDI6XHRcbjE2MDM6XHRcdGlmICghdXNlcl9jdHgpXG4xNjA0Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTYwNTpcdFxuMTYwNjpcdFx0aWYgKHVzZXJfY3R4LVx1MDAzZXNrKVxuMTYwNzpcdFx0XHRnb3RvIG91dDtcbjE2MDg6XHRcbjE2MDk6XHRcdGlmICghcmFuZ2VfaXNfemVybyh1c2VyX2N0eCwgb2Zmc2V0b2ZlbmQodHlwZW9mKCp1c2VyX2N0eCksIGxvY2FsX3BvcnQpLCBzaXplb2YoKnVzZXJfY3R4KSkpXG4xNjEwOlx0XHRcdGdvdG8gb3V0O1xuMTYxMTpcdFxuMTYxMjpcdFx0aWYgKHVzZXJfY3R4LVx1MDAzZWxvY2FsX3BvcnQgXHUwMDNlIFUxNl9NQVgpIHtcbjE2MTM6XHRcdFx0cmV0ID0gLUVSQU5HRTtcbjE2MTQ6XHRcdFx0Z290byBvdXQ7XG4xNjE1Olx0XHR9XG4xNjE2Olx0XG4xNjE3Olx0XHRjdHguZmFtaWx5ID0gKHUxNil1c2VyX2N0eC1cdTAwM2VmYW1pbHk7XG4xNjE4Olx0XHRjdHgucHJvdG9jb2wgPSAodTE2KXVzZXJfY3R4LVx1MDAzZXByb3RvY29sO1xuMTYxOTpcdFx0Y3R4LmRwb3J0ID0gKHUxNil1c2VyX2N0eC1cdTAwM2Vsb2NhbF9wb3J0O1xuMTYyMDpcdFx0Y3R4LnNwb3J0ID0gdXNlcl9jdHgtXHUwMDNlcmVtb3RlX3BvcnQ7XG4xNjIxOlx0XG4xNjIyOlx0XHRzd2l0Y2ggKGN0eC5mYW1pbHkpIHtcbjE2MjM6XHRcdGNhc2UgQUZfSU5FVDpcbjE2MjQ6XHRcdFx0Y3R4LnY0LmRhZGRyID0gKF9fZm9yY2UgX19iZTMyKXVzZXJfY3R4LVx1MDAzZWxvY2FsX2lwNDtcbjE2MjU6XHRcdFx0Y3R4LnY0LnNhZGRyID0gKF9fZm9yY2UgX19iZTMyKXVzZXJfY3R4LVx1MDAzZXJlbW90ZV9pcDQ7XG4xNjI2Olx0XHRcdGJyZWFrO1xuMTYyNzpcdFxuMTYyODpcdCNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxuMTYyOTpcdFx0Y2FzZSBBRl9JTkVUNjpcbjE2MzA6XHRcdFx0Y3R4LnY2LmRhZGRyID0gKHN0cnVjdCBpbjZfYWRkciAqKXVzZXJfY3R4LVx1MDAzZWxvY2FsX2lwNjtcbjE2MzE6XHRcdFx0Y3R4LnY2LnNhZGRyID0gKHN0cnVjdCBpbjZfYWRkciAqKXVzZXJfY3R4LVx1MDAzZXJlbW90ZV9pcDY7XG4xNjMyOlx0XHRcdGJyZWFrO1xuMTYzMzpcdCNlbmRpZlxuMTYzNDpcdFxuMTYzNTpcdFx0ZGVmYXVsdDpcbjE2MzY6XHRcdFx0cmV0ID0gLUVBRk5PU1VQUE9SVDtcbjE2Mzc6XHRcdFx0Z290byBvdXQ7XG4xNjM4Olx0XHR9XG4xNjM5Olx0XG4xNjQwOlx0XHRwcm9ncyA9IGJwZl9wcm9nX2FycmF5X2FsbG9jKDEsIEdGUF9LRVJORUwpO1xuMTY0MTpcdFx0aWYgKCFwcm9ncykge1xuMTY0MjpcdFx0XHRyZXQgPSAtRU5PTUVNO1xuMTY0MzpcdFx0XHRnb3RvIG91dDtcbjE2NDQ6XHRcdH1cbjE2NDU6XHRcbjE2NDY6XHRcdHByb2dzLVx1MDAzZWl0ZW1zWzBdLnByb2cgPSBwcm9nO1xuMTY0NzpcdFxuMTY0ODpcdFx0YnBmX3Rlc3RfdGltZXJfZW50ZXIoXHUwMDI2dCk7XG4xNjQ5Olx0XHRkbyB7XG4xNjUwOlx0XHRcdGN0eC5zZWxlY3RlZF9zayA9IE5VTEw7XG4xNjUxOlx0XHRcdHJldHZhbCA9IEJQRl9QUk9HX1NLX0xPT0tVUF9SVU5fQVJSQVkocHJvZ3MsIGN0eCwgYnBmX3Byb2dfcnVuKTtcbjE2NTI6XHRcdH0gd2hpbGUgKGJwZl90ZXN0X3RpbWVyX2NvbnRpbnVlKFx1MDAyNnQsIDEsIHJlcGVhdCwgXHUwMDI2cmV0LCBcdTAwMjZkdXJhdGlvbikpO1xuMTY1MzpcdFxuMTY1NDpcdFx0aWYgKHJldCBcdTAwM2U9IDApIHtcbjE2NTU6XHRcdFx0dXNlcl9jdHgtXHUwMDNlY29va2llID0gMDtcbjE2NTY6XHRcdFx0aWYgKGN0eC5zZWxlY3RlZF9zaykge1xuMTY1NzpcdFx0XHRcdGlmIChjdHguc2VsZWN0ZWRfc2stXHUwMDNlc2tfcmV1c2Vwb3J0IFx1MDAyNlx1MDAyNiAhY3R4Lm5vX3JldXNlcG9ydClcbjE2NTg6XHRcdFx0XHRcdHJldCA9IC1FT1BOT1RTVVBQO1xuMTY1OTpcdFx0XHRcdGVsc2VcbjE2NjA6XHRcdFx0XHRcdHVzZXJfY3R4LVx1MDAzZWNvb2tpZSA9IHNvY2tfZ2VuX2Nvb2tpZShjdHguc2VsZWN0ZWRfc2spO1xuMTY2MTpcdFx0XHR9XG4xNjYyOlx0XHR9XG4xNjYzOlx0XHRicGZfdGVzdF90aW1lcl9sZWF2ZShcdTAwMjZ0KTtcbjE2NjQ6XHRcbjE2NjU6XHRcdGlmIChyZXQgXHUwMDNjIDApXG4xNjY2Olx0XHRcdGdvdG8gb3V0O1xuMTY2NzpcdFxuMTY2ODpcdFx0cmV0ID0gYnBmX3Rlc3RfZmluaXNoKGthdHRyLCB1YXR0ciwgTlVMTCwgTlVMTCwgMCwgMCwgcmV0dmFsLCBkdXJhdGlvbik7XG4xNjY5Olx0XHRpZiAoIXJldClcbjE2NzA6XHRcdFx0cmV0ID0gYnBmX2N0eF9maW5pc2goa2F0dHIsIHVhdHRyLCB1c2VyX2N0eCwgc2l6ZW9mKCp1c2VyX2N0eCkpO1xuMTY3MTpcdFxuMTY3MjpcdG91dDpcbjE2NzM6XHRcdGJwZl9wcm9nX2FycmF5X2ZyZWUocHJvZ3MpO1xuMTY3NDpcdFx0a2ZyZWUodXNlcl9jdHgpO1xuMTY3NTpcdFx0cmV0dXJuIHJldDtcbjE2NzY6XHR9XG4xNjc3Olx0XG4xNjc4Olx0aW50IGJwZl9wcm9nX3Rlc3RfcnVuX3N5c2NhbGwoc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuMTY3OTpcdFx0XHRcdCAgICAgIGNvbnN0IHVuaW9uIGJwZl9hdHRyICprYXR0cixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTY6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzg0OQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlc2UgY2hhbmdlcywgc28gdGhlIGZpcnN0IHRoaW5nIEkmIzM5O2xsIGRvIGlzIG1ldGhvZGljYWxseSBnbyB0aHJvdWdoIGl0LiBSYXRoZXIgdGhhbiBqdXN0IGZvY3VzaW5nIG9uIHRoZSBjdXJyZW50IGxpbmVzLCBJIGtub3cgSSBuZWVkIHRvIGJ1aWxkIGEgY29tcHJlaGVuc2l2ZSB1bmRlcnN0YW5kaW5nLCBzbyBJIHdpbGwgYW5hbHl6ZSB0aGUgZWFybGllciBsaW5lcyBvZiBgYnBmX3Byb2dfdGVzdF9ydW5fc2tfbG9va3VwYCBhcyB3ZWxsLiBDb250ZXh0IGlzIGV2ZXJ5dGhpbmcgd2hlbiBkZWFsaW5nIHdpdGggQlBGLiBJIG5lZWQgdG8gZ3Jhc3AgdGhlIGVudGlyZSBwaWN0dXJlIHRvIGV2YWx1YXRlIHRoZSBpbXBhY3QgY29ycmVjdGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxNjozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9icGYvdGVzdF9ydW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE1NzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTU3MDpcdFx0XHRcdFx0ICAgICBzaXplb2Yoc3RydWN0IGJwZl9mbG93X2tleXMpKTtcbjE1NzE6XHRcbjE1NzI6XHRvdXQ6XG4xNTczOlx0XHRrZnJlZSh1c2VyX2N0eCk7XG4xNTc0Olx0XHRrZnJlZShkYXRhKTtcbjE1NzU6XHRcdHJldHVybiByZXQ7XG4xNTc2Olx0fVxuMTU3NzpcdFxuMTU3ODpcdGludCBicGZfcHJvZ190ZXN0X3J1bl9za19sb29rdXAoc3RydWN0IGJwZl9wcm9nICpwcm9nLCBjb25zdCB1bmlvbiBicGZfYXR0ciAqa2F0dHIsXG4xNTc5Olx0XHRcdFx0XHR1bmlvbiBicGZfYXR0ciBfX3VzZXIgKnVhdHRyKVxuMTU4MDpcdHtcbjE1ODE6XHRcdHN0cnVjdCBicGZfdGVzdF90aW1lciB0ID0ge307XG4xNTgyOlx0XHRzdHJ1Y3QgYnBmX3Byb2dfYXJyYXkgKnByb2dzID0gTlVMTDtcbjE1ODM6XHRcdHN0cnVjdCBicGZfc2tfbG9va3VwX2tlcm4gY3R4ID0ge307XG4xNTg0Olx0XHR1MzIgcmVwZWF0ID0ga2F0dHItXHUwMDNldGVzdC5yZXBlYXQ7XG4xNTg1Olx0XHRzdHJ1Y3QgYnBmX3NrX2xvb2t1cCAqdXNlcl9jdHg7XG4xNTg2Olx0XHR1MzIgcmV0dmFsLCBkdXJhdGlvbjtcbjE1ODc6XHRcdGludCByZXQgPSAtRUlOVkFMO1xuMTU4ODpcdFxuMTU4OTpcdFx0aWYgKGthdHRyLVx1MDAzZXRlc3QuZmxhZ3MgfHwga2F0dHItXHUwMDNldGVzdC5jcHUgfHwga2F0dHItXHUwMDNldGVzdC5iYXRjaF9zaXplKVxuMTU5MDpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjE1OTE6XHRcbjE1OTI6XHRcdGlmIChrYXR0ci1cdTAwM2V0ZXN0LmRhdGFfaW4gfHwga2F0dHItXHUwMDNldGVzdC5kYXRhX3NpemVfaW4gfHwga2F0dHItXHUwMDNldGVzdC5kYXRhX291dCB8fFxuMTU5MzpcdFx0ICAgIGthdHRyLVx1MDAzZXRlc3QuZGF0YV9zaXplX291dClcbjE1OTQ6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xNTk1Olx0XG4xNTk2Olx0XHRpZiAoIXJlcGVhdClcbjE1OTc6XHRcdFx0cmVwZWF0ID0gMTtcbjE1OTg6XHRcbjE1OTk6XHRcdHVzZXJfY3R4ID0gYnBmX2N0eF9pbml0KGthdHRyLCBzaXplb2YoKnVzZXJfY3R4KSk7XG4xNjAwOlx0XHRpZiAoSVNfRVJSKHVzZXJfY3R4KSlcbjE2MDE6XHRcdFx0cmV0dXJuIFBUUl9FUlIodXNlcl9jdHgpO1xuMTYwMjpcdFxuMTYwMzpcdFx0aWYgKCF1c2VyX2N0eClcbjE2MDQ6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xNjA1Olx0XG4xNjA2Olx0XHRpZiAodXNlcl9jdHgtXHUwMDNlc2spXG4xNjA3Olx0XHRcdGdvdG8gb3V0O1xuMTYwODpcdFxuMTYwOTpcdFx0aWYgKCFyYW5nZV9pc196ZXJvKHVzZXJfY3R4LCBvZmZzZXRvZmVuZCh0eXBlb2YoKnVzZXJfY3R4KSwgbG9jYWxfcG9ydCksIHNpemVvZigqdXNlcl9jdHgpKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTY6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDY0NAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDQ1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgZnVuY3Rpb25zLgoKKipEZWNvbnN0cnVjdGluZyB0aGUgQlBGIFRpbWVyIExpZmVjeWNsZSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZXNlIEJQRiB0aW1lciBmdW5jdGlvbnM6IGBicGZfdGVzdF90aW1lcl9lbnRlcmAsIGBicGZfdGVzdF90aW1lcl9jb250aW51ZWAsIGFuZCBgYnBmX3Rlc3RfdGltZXJfbGVhdmVgLiBNeSBpbml0aWFsIGFwcHJvYWNoIGlzIGFsd2F5cyB0aGUgc2FtZTogbGV0JiMzOTtzIHN0YXJ0IHdpdGggYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGV5JiMzOTtyZSAqdXNlZCouIEkmIzM5O2xsIHJlYWNoIGZvciBgZ3JlcGAgYW5kIHNlZSB3aGVyZSB0aGVzZSBmdW5jdGlvbnMgYXJlIHJlZmVyZW5jZWQgdGhyb3VnaG91dCB0aGUgY29kZWJhc2UuIFRoZSBnb2FsIGlzIHRvIHNlZSB0aGVtIGluIGNvbnRleHQuIEkgZXhwZWN0IHRvIGdldCBhIGZlZWwgZm9yIHRoZSBkaWZmZXJlbnQgc3RhZ2VzIG9mIHRpbWVyIGNyZWF0aW9uLCBtYW5hZ2VtZW50LCBhbmQgZXhwaXJhdGlvbiB3aXRoaW4gdGhlIEJQRiBmcmFtZXdvcmsuIFRoYXQgZ3JlcHBpbmcgd2lsbCBob3BlZnVsbHkgcmV2ZWFsIHRoZSB0eXBpY2FsIGNhbGwgc2VxdWVuY2UgYW5kIHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQuIEkmIzM5O20gbG9va2luZyBmb3IgYSBjbGVhciBmbG93IG9mIGV4ZWN1dGlvbiwgaWRlbnRpZnlpbmcgaG93IHRoZSB0aW1lciYjMzk7cyBiZWhhdmlvciBpcyBkZWZpbmVkIGFuZCBob3cgZXZlbnRzIHRyaWdnZXIgdGhlIHZhcmlvdXMgY2FsbHMuIEZyb20gdGhlcmUgSSYjMzk7bGwgc3RhcnQgYnVpbGRpbmcgYSBtZW50YWwgbW9kZWwgb2YgdGhlaXIgYmVoYXZpb3IsIHBheWluZyBhdHRlbnRpb24gdG8gYW55IGVkZ2UgY2FzZXMgb3IgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3VlcyB0aGF0IG1pZ2h0IGFyaXNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxNjozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfdGVzdF90aW1lciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9icGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9icGYvdGVzdF9ydW4uYy0zMC1cbm5ldC9icGYvdGVzdF9ydW4uYzozMTpzdHJ1Y3QgYnBmX3Rlc3RfdGltZXIge1xubmV0L2JwZi90ZXN0X3J1bi5jLTMyLVx0dTMyIGk7XG4tLVxubmV0L2JwZi90ZXN0X3J1bi5jLTM1LVxubmV0L2JwZi90ZXN0X3J1bi5jOjM2OnN0YXRpYyB2b2lkIGJwZl90ZXN0X3RpbWVyX2VudGVyKHN0cnVjdCBicGZfdGVzdF90aW1lciAqdClcbm5ldC9icGYvdGVzdF9ydW4uYy0zNy1cdF9fYWNxdWlyZXMocmN1KVxuLS1cbm5ldC9icGYvdGVzdF9ydW4uYy00Mi1cbm5ldC9icGYvdGVzdF9ydW4uYzo0MzpzdGF0aWMgdm9pZCBicGZfdGVzdF90aW1lcl9sZWF2ZShzdHJ1Y3QgYnBmX3Rlc3RfdGltZXIgKnQpXG5uZXQvYnBmL3Rlc3RfcnVuLmMtNDQtXHRfX3JlbGVhc2VzKHJjdSlcbi0tXG5uZXQvYnBmL3Rlc3RfcnVuLmMtNDktXG5uZXQvYnBmL3Rlc3RfcnVuLmM6NTA6c3RhdGljIGJvb2wgYnBmX3Rlc3RfdGltZXJfY29udGludWUoc3RydWN0IGJwZl90ZXN0X3RpbWVyICp0LCBpbnQgaXRlcmF0aW9ucyxcbm5ldC9icGYvdGVzdF9ydW4uYy01MS1cdFx0XHRcdCAgICB1MzIgcmVwZWF0LCBpbnQgKmVyciwgdTMyICpkdXJhdGlvbilcbi0tXG5uZXQvYnBmL3Rlc3RfcnVuLmMtNzItXHRcdHQtXHUwMDNldGltZV9zcGVudCAmIzQzOz0ga3RpbWVfZ2V0X25zKCkgLSB0LVx1MDAzZXRpbWVfc3RhcnQ7XG5uZXQvYnBmL3Rlc3RfcnVuLmM6NzM6XHRcdGJwZl90ZXN0X3RpbWVyX2xlYXZlKHQpO1xubmV0L2JwZi90ZXN0X3J1bi5jLTc0LVx0XHRjb25kX3Jlc2NoZWQoKTtcbm5ldC9icGYvdGVzdF9ydW4uYzo3NTpcdFx0YnBmX3Rlc3RfdGltZXJfZW50ZXIodCk7XG5uZXQvYnBmL3Rlc3RfcnVuLmMtNzYtXHR9XG4tLVxubmV0L2JwZi90ZXN0X3J1bi5jPTM2MD1zdGF0aWMgaW50IGJwZl90ZXN0X3J1bl94ZHBfbGl2ZShzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHN0cnVjdCB4ZHBfYnVmZiAqY3R4LFxuLS1cbm5ldC9icGYvdGVzdF9ydW4uYy0zNjQtXHRzdHJ1Y3QgeGRwX3Rlc3RfZGF0YSB4ZHAgPSB7IC5iYXRjaF9zaXplID0gYmF0Y2hfc2l6ZSB9O1xubmV0L2JwZi90ZXN0X3J1bi5jOjM2NTpcdHN0cnVjdCBicGZfdGVzdF90aW1lciB0ID0ge307XG5uZXQvYnBmL3Rlc3RfcnVuLmMtMzY2LVx0aW50IHJldDtcbi0tXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMzc0LVxubmV0L2JwZi90ZXN0X3J1bi5jOjM3NTpcdGJwZl90ZXN0X3RpbWVyX2VudGVyKFx1MDAyNnQpO1xubmV0L2JwZi90ZXN0X3J1bi5jLTM3Ni1cdGRvIHtcbi0tXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMzgwLVx0XHRcdGJyZWFrO1xubmV0L2JwZi90ZXN0X3J1bi5jOjM4MTpcdH0gd2hpbGUgKGJwZl90ZXN0X3RpbWVyX2NvbnRpbnVlKFx1MDAyNnQsIHhkcC5mcmFtZV9jbnQsIHJlcGVhdCwgXHUwMDI2cmV0LCB0aW1lKSk7XG5uZXQvYnBmL3Rlc3RfcnVuLmM6MzgyOlx0YnBmX3Rlc3RfdGltZXJfbGVhdmUoXHUwMDI2dCk7XG5uZXQvYnBmL3Rlc3RfcnVuLmMtMzgzLVxuLS1cbm5ldC9icGYvdGVzdF9ydW4uYz0zODg9c3RhdGljIGludCBicGZfdGVzdF9ydW4oc3RydWN0IGJwZl9wcm9nICpwcm9nLCB2b2lkICpjdHgsIHUzMiByZXBlYXQsXG4tLVxubmV0L2JwZi90ZXN0X3J1bi5jLTM5NC1cdHN0cnVjdCBicGZfY2dfcnVuX2N0eCBydW5fY3R4O1xubmV0L2JwZi90ZXN0X3J1bi5jOjM5NTpcdHN0cnVjdCBicGZfdGVzdF90aW1lciB0ID0ge307XG5uZXQvYnBmL3Rlc3RfcnVuLmMtMzk2LVx0ZW51bSBicGZfY2dyb3VwX3N0b3JhZ2VfdHlwZSBzdHlwZTtcbi0tXG5uZXQvYnBmL3Rlc3RfcnVuLmMtNDExLVxubmV0L2JwZi90ZXN0X3J1bi5jOjQxMjpcdGJwZl90ZXN0X3RpbWVyX2VudGVyKFx1MDAyNnQpO1xubmV0L2JwZi90ZXN0X3J1bi5jLTQxMy1cdG9sZF9jdHggPSBicGZfc2V0X3J1bl9jdHgoXHUwMDI2cnVuX2N0eC5ydW5fY3R4KTtcbi0tXG5uZXQvYnBmL3Rlc3RfcnVuLmMtNDI1LVx0XHRsb2NhbF9iaF9lbmFibGUoKTtcbm5ldC9icGYvdGVzdF9ydW4uYzo0MjY6XHR9IHdoaWxlIChicGZfdGVzdF90aW1lcl9jb250aW51ZShcdTAwMjZ0LCAxLCByZXBlYXQsIFx1MDAyNnJldCwgdGltZSkpO1xubmV0L2JwZi90ZXN0X3J1bi5jLTQyNy1cdGJwZl9yZXNldF9ydW5fY3R4KG9sZF9jdHgpO1xubmV0L2JwZi90ZXN0X3J1bi5jOjQyODpcdGJwZl90ZXN0X3RpbWVyX2xlYXZlKFx1MDAyNnQpO1xubmV0L2JwZi90ZXN0X3J1bi5jLTQyOS1cbi0tXG5uZXQvYnBmL3Rlc3RfcnVuLmM9MTUwOT1pbnQgYnBmX3Byb2dfdGVzdF9ydW5fZmxvd19kaXNzZWN0b3Ioc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuLS1cbm5ldC9icGYvdGVzdF9ydW4uYy0xNTEyLXtcbm5ldC9icGYvdGVzdF9ydW4uYzoxNTEzOlx0c3RydWN0IGJwZl90ZXN0X3RpbWVyIHQgPSB7fTtcbm5ldC9icGYvdGVzdF9ydW4uYy0xNTE0LVx0dTMyIHNpemUgPSBrYXR0ci1cdTAwM2V0ZXN0LmRhdGFfc2l6ZV9pbjtcbi0tXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTU1NS1cbm5ldC9icGYvdGVzdF9ydW4uYzoxNTU2Olx0YnBmX3Rlc3RfdGltZXJfZW50ZXIoXHUwMDI2dCk7XG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTU1Ny1cdGRvIHtcbi0tXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTU1OS1cdFx0XHRcdFx0ICBzaXplLCBmbGFncyk7XG5uZXQvYnBmL3Rlc3RfcnVuLmM6MTU2MDpcdH0gd2hpbGUgKGJwZl90ZXN0X3RpbWVyX2NvbnRpbnVlKFx1MDAyNnQsIDEsIHJlcGVhdCwgXHUwMDI2cmV0LCBcdTAwMjZkdXJhdGlvbikpO1xubmV0L2JwZi90ZXN0X3J1bi5jOjE1NjE6XHRicGZfdGVzdF90aW1lcl9sZWF2ZShcdTAwMjZ0KTtcbm5ldC9icGYvdGVzdF9ydW4uYy0xNTYyLVxuLS1cbm5ldC9icGYvdGVzdF9ydW4uYz0xNTc4PWludCBicGZfcHJvZ190ZXN0X3J1bl9za19sb29rdXAoc3RydWN0IGJwZl9wcm9nICpwcm9nLCBjb25zdCB1bmlvbiBicGZfYXR0ciAqa2F0dHIsXG4tLVxubmV0L2JwZi90ZXN0X3J1bi5jLTE1ODAte1xubmV0L2JwZi90ZXN0X3J1bi5jOjE1ODE6XHRzdHJ1Y3QgYnBmX3Rlc3RfdGltZXIgdCA9IHt9O1xubmV0L2JwZi90ZXN0X3J1bi5jLTE1ODItXHRzdHJ1Y3QgYnBmX3Byb2dfYXJyYXkgKnByb2dzID0gTlVMTDtcbi0tXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTY0Ny1cbm5ldC9icGYvdGVzdF9ydW4uYzoxNjQ4Olx0YnBmX3Rlc3RfdGltZXJfZW50ZXIoXHUwMDI2dCk7XG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTY0OS1cdGRvIHtcbi0tXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTY1MS1cdFx0cmV0dmFsID0gQlBGX1BST0dfU0tfTE9PS1VQX1JVTl9BUlJBWShwcm9ncywgY3R4LCBicGZfcHJvZ19ydW4pO1xubmV0L2JwZi90ZXN0X3J1bi5jOjE2NTI6XHR9IHdoaWxlIChicGZfdGVzdF90aW1lcl9jb250aW51ZShcdTAwMjZ0LCAxLCByZXBlYXQsIFx1MDAyNnJldCwgXHUwMDI2ZHVyYXRpb24pKTtcbm5ldC9icGYvdGVzdF9ydW4uYy0xNjUzLVxuLS1cbm5ldC9icGYvdGVzdF9ydW4uYy0xNjYyLVx0fVxubmV0L2JwZi90ZXN0X3J1bi5jOjE2NjM6XHRicGZfdGVzdF90aW1lcl9sZWF2ZShcdTAwMjZ0KTtcbm5ldC9icGYvdGVzdF9ydW4uYy0xNjY0LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxNjozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NzE3CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkFuYWx5emluZyBgYnBmX3Rlc3RfdGltZXJfZW50ZXJgIGFuZCBgYnBmX3Rlc3RfdGltZXJfbGVhdmVgKioKCk9rYXksIGxldCYjMzk7cyBkaXNzZWN0IHRoZSBiZWhhdmlvdXIgb2YgdGhlc2UgZnVuY3Rpb25zLCBgYnBmX3Rlc3RfdGltZXJfZW50ZXJgIGFuZCBgYnBmX3Rlc3RfdGltZXJfbGVhdmVgLiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byB1bmRlcnN0YW5kIGhvdyB0aGV5IGludGVyYWN0IHdpdGggdGhlIFJDVSAoUmVhZC1Db3B5IFVwZGF0ZSkgbWVjaGFuaXNtLiBBIHF1aWNrIGxvb2sgcmV2ZWFscyBhIGNydWNpYWwgZGV0YWlsOiBgYnBmX3Rlc3RfdGltZXJfZW50ZXJgIGlzIGNhbGxpbmcgYHJjdV9yZWFkX2xvY2soKWAsIHdoaWxlIGl0cyBjb3VudGVycGFydCwgYGJwZl90ZXN0X3RpbWVyX2xlYXZlYCwgY2FsbHMgYHJjdV9yZWFkX3VubG9jaygpYC4gVGhpcyBpbmRpY2F0ZXMgdGhhdCB0aGV5JiMzOTtyZSBlc3RhYmxpc2hpbmcgYW5kIHJlbGVhc2luZyBhbiBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24sIHdoaWNoIGlzIGNvbW1vbi4KCk5vdywgbGV0IG1lIHpvb20gaW4gb24gbGluZXMgMzYgdGhyb3VnaCA0Ni4gSSBleHBlY3QgdGhhdCB0aGVzZSB3aWxsIGFkZCBtb3JlIG51YW5jZSB0byBob3cgdGhpcyB0aW1lciYjMzk7cyBpbnRlcmFjdGlvbiB3aXRoIHRoZSBSQ1Ugc3Vic3lzdGVtIHRha2VzIHBsYWNlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHRpbWVyIGZ1bmN0aW9uIGludGVncmF0ZXMgd2l0aCB0aGUgY3JpdGljYWwgc2VjdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTY6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvYnBmL3Rlc3RfcnVuLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDMwOlx0XG4gIDMxOlx0c3RydWN0IGJwZl90ZXN0X3RpbWVyIHtcbiAgMzI6XHRcdHUzMiBpO1xuICAzMzpcdFx0dTY0IHRpbWVfc3RhcnQsIHRpbWVfc3BlbnQ7XG4gIDM0Olx0fTtcbiAgMzU6XHRcbiAgMzY6XHRzdGF0aWMgdm9pZCBicGZfdGVzdF90aW1lcl9lbnRlcihzdHJ1Y3QgYnBmX3Rlc3RfdGltZXIgKnQpXG4gIDM3Olx0XHRfX2FjcXVpcmVzKHJjdSlcbiAgMzg6XHR7XG4gIDM5Olx0XHRyY3VfcmVhZF9sb2NrX2RvbnRfbWlncmF0ZSgpO1xuICA0MDpcdFx0dC1cdTAwM2V0aW1lX3N0YXJ0ID0ga3RpbWVfZ2V0X25zKCk7XG4gIDQxOlx0fVxuICA0MjpcdFxuICA0MzpcdHN0YXRpYyB2b2lkIGJwZl90ZXN0X3RpbWVyX2xlYXZlKHN0cnVjdCBicGZfdGVzdF90aW1lciAqdClcbiAgNDQ6XHRcdF9fcmVsZWFzZXMocmN1KVxuICA0NTpcdHtcbiAgNDY6XHRcdHQtXHUwMDNldGltZV9zdGFydCA9IDA7XG4gIDQ3Olx0XHRyY3VfcmVhZF91bmxvY2tfbWlncmF0ZSgpO1xuICA0ODpcdH1cbiAgNDk6XHRcbiAgNTA6XHRzdGF0aWMgYm9vbCBicGZfdGVzdF90aW1lcl9jb250aW51ZShzdHJ1Y3QgYnBmX3Rlc3RfdGltZXIgKnQsIGludCBpdGVyYXRpb25zLFxuICA1MTpcdFx0XHRcdFx0ICAgIHUzMiByZXBlYXQsIGludCAqZXJyLCB1MzIgKmR1cmF0aW9uKVxuICA1MjpcdFx0X19tdXN0X2hvbGQocmN1KVxuICA1MzpcdHtcbiAgNTQ6XHRcdHQtXHUwMDNlaSAmIzQzOz0gaXRlcmF0aW9ucztcbiAgNTU6XHRcdGlmICh0LVx1MDAzZWkgXHUwMDNlPSByZXBlYXQpIHtcbiAgNTY6XHRcdFx0LyogV2UmIzM5O3JlIGRvbmUuICovXG4gIDU3Olx0XHRcdHQtXHUwMDNldGltZV9zcGVudCAmIzQzOz0ga3RpbWVfZ2V0X25zKCkgLSB0LVx1MDAzZXRpbWVfc3RhcnQ7XG4gIDU4Olx0XHRcdGRvX2Rpdih0LVx1MDAzZXRpbWVfc3BlbnQsIHQtXHUwMDNlaSk7XG4gIDU5Olx0XHRcdCpkdXJhdGlvbiA9IHQtXHUwMDNldGltZV9zcGVudCBcdTAwM2UgVTMyX01BWCA/IFUzMl9NQVggOiAodTMyKXQtXHUwMDNldGltZV9zcGVudDtcbiAgNjA6XHRcdFx0KmVyciA9IDA7XG4gIDYxOlx0XHRcdGdvdG8gcmVzZXQ7XG4gIDYyOlx0XHR9XG4gIDYzOlx0XG4gIDY0Olx0XHRpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHtcbiAgNjU6XHRcdFx0LyogRHVyaW5nIGl0ZXJhdGlvbjogd2UmIzM5O3ZlIGJlZW4gY2FuY2VsbGVkLCBhYm9ydC4gKi9cbiAgNjY6XHRcdFx0KmVyciA9IC1FSU5UUjtcbiAgNjc6XHRcdFx0Z290byByZXNldDtcbiAgNjg6XHRcdH1cbiAgNjk6XHRcbiAgNzA6XHRcdGlmIChuZWVkX3Jlc2NoZWQoKSkge1xuICA3MTpcdFx0XHQvKiBEdXJpbmcgaXRlcmF0aW9uOiB3ZSBuZWVkIHRvIHJlc2NoZWR1bGUgYmV0d2VlbiBydW5zLiAqL1xuICA3MjpcdFx0XHR0LVx1MDAzZXRpbWVfc3BlbnQgJiM0Mzs9IGt0aW1lX2dldF9ucygpIC0gdC1cdTAwM2V0aW1lX3N0YXJ0O1xuICA3MzpcdFx0XHRicGZfdGVzdF90aW1lcl9sZWF2ZSh0KTtcbiAgNzQ6XHRcdFx0Y29uZF9yZXNjaGVkKCk7XG4gIDc1Olx0XHRcdGJwZl90ZXN0X3RpbWVyX2VudGVyKHQpO1xuICA3NjpcdFx0fVxuICA3NzpcdFxuICA3ODpcdFx0LyogRG8gYW5vdGhlciByb3VuZC4gKi9cbiAgNzk6XHRcdHJldHVybiB0cnVlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxNjozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NzQ4CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNzA1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIFJDVSBTYWZldHkqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7QWgsIFJDVSEmIzM0OyBJIHNlZSBhIGNsYXNzaWMgY2FzZSBvZiBwb3RlbnRpYWxseSBhY2Nlc3NpbmcgYSBzaGFyZWQgZGF0YSBzdHJ1Y3R1cmUsIGBjdHguc2VsZWN0ZWRfc2tgLCBvdXRzaWRlIHRoZSBwcm90ZWN0aW9uIG9mIGFuIFJDVSByZWFkIGxvY2suIFRoZSBvcmlnaW5hbCBjb2RlIGhhcyB0aGlzIHNlcXVlbmNlOiB3ZSBlbnRlciBhIHRpbWVyIChgYnBmX3Rlc3RfdGltZXJfZW50ZXJgKSwgcnVuIHNvbWV0aGluZyBpbiBhIGxvb3AsIGFuZCB0aGVuICpwb3RlbnRpYWxseSogYWNjZXNzIGBjdHguc2VsZWN0ZWRfc2tgIGFmdGVyIHRoZSBsb29wIGFuZCBhZnRlciB3ZSBsZWF2ZSB0aGUgdGltZXIgKGBicGZfdGVzdF90aW1lcl9sZWF2ZWApLiBUaGUgbm90ZSBpcyBxdWl0ZSBjbGVhciAtIGBicGZfdGVzdF90aW1lcl9lbnRlcmAgaXMgaG9sZGluZyB0aGUgUkNVIHJlYWQgbG9jaywgYW5kIGNhbGxpbmcgYGJwZl90ZXN0X3RpbWVyX2xlYXZlYCByZWxlYXNlcyBpdC4KClNvLCB0aGUgaXNzdWUgaXMgdGhhdCBpZiBgY3R4LnNlbGVjdGVkX3NrYCBpcyB1c2VkIGFmdGVyIGxlYXZpbmcgdGhlIHRpbWVyLCB3ZSYjMzk7cmUgcG90ZW50aWFsbHkgbG9va2luZyBhdCBhIHNvY2tldCB0aGF0JiMzOTtzIGJlZW4gZnJlZWQgZnJvbSB1bmRlciB1cyBkdWUgdG8gdGhlIFJDVSBsb2NrIGJlaW5nIGRyb3BwZWQuIFRoYXQmIzM5O3MgYSB0ZXh0Ym9vayBSQ1UgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW8sIG9yIGF0IGxlYXN0IGEgZGVyZWZlcmVuY2Ugb3V0c2lkZSB0aGUgcmVhZCBsb2NrLgoKVGhlIGZpeCwgYW5kIGl0JiMzOTtzIGEgZ29vZCBvbmUsIG1vdmVzIHRoZSBhY2Nlc3MgdG8gYGN0eC5zZWxlY3RlZF9za2AgaW5zaWRlIHRoZSBgaWYgKHJldCAmZ3Q7PSAwKWAgYmxvY2sgKmJlZm9yZSogdGhlIGBicGZfdGVzdF90aW1lcl9sZWF2ZSgmYW1wO3QpYCBjYWxsLiBUaGlzIGVuc3VyZXMgdGhhdCB0aGUgY29kZSB0aGF0IHVzZXMgdGhhdCBwb2ludGVyIGlzIHByb3RlY3RlZCBieSB0aGUgUkNVIHJlYWQgbG9jay4gIFdlIGhhdmUgdGhlIGNoZWNrcyBmb3IgYHNrX3JldXNlcG9ydGAgYW5kIHRoZSBjYWxsIHRvIGBzb2NrX2dlbl9jb29raWUoKWAgdGhlcmUsIGFsbCBwcm90ZWN0ZWQgbm93LiBNdWNoIGJldHRlci4KCk5vdywgbGV0JiMzOTtzIGp1c3QgbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBvdGhlciBvYnZpb3VzIGNvbmNlcm5zIGhlcmUuIExldCYjMzk7cyBtYWtlIHN1cmUgYHVzZXJfY3R4YCBpcyBwcm9wZXJseSBoYW5kbGVkIGluIGBicGZfY3R4X2luaXQoKWAgYW5kIGBicGZfY3R4X2ZpbmlzaCgpYC4gVGhhdCYjMzk7cyB3aGVyZSB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBgdXNlcl9jdHhgIG1lbW9yeSBpcyBwcm9wZXJseSBpbml0aWFsaXplZCBhbmQgY2xlYW5lZCB1cC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTY6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2N0eF9pbml0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2JwZi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2JwZi90ZXN0X3J1bi5jPTc4Mj1pbnQgYnBmX3Byb2dfdGVzdF9ydW5fcmF3X3RwKHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbi0tXG5uZXQvYnBmL3Rlc3RfcnVuLmMtODUzLVxubmV0L2JwZi90ZXN0X3J1bi5jOjg1NDpzdGF0aWMgdm9pZCAqYnBmX2N0eF9pbml0KGNvbnN0IHVuaW9uIGJwZl9hdHRyICprYXR0ciwgdTMyIG1heF9zaXplKVxubmV0L2JwZi90ZXN0X3J1bi5jLTg1NS17XG4tLVxubmV0L2JwZi90ZXN0X3J1bi5jPTEwMzU9aW50IGJwZl9wcm9nX3Rlc3RfcnVuX3NrYihzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIGNvbnN0IHVuaW9uIGJwZl9hdHRyICprYXR0cixcbi0tXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTA3Ny1cbm5ldC9icGYvdGVzdF9ydW4uYzoxMDc4Olx0Y3R4ID0gYnBmX2N0eF9pbml0KGthdHRyLCBzaXplb2Yoc3RydWN0IF9fc2tfYnVmZikpO1xubmV0L2JwZi90ZXN0X3J1bi5jLTEwNzktXHRpZiAoSVNfRVJSKGN0eCkpXG4tLVxubmV0L2JwZi90ZXN0X3J1bi5jPTEzMzI9aW50IGJwZl9wcm9nX3Rlc3RfcnVuX3hkcChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIGNvbnN0IHVuaW9uIGJwZl9hdHRyICprYXR0cixcbi0tXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTM2Ny1cbm5ldC9icGYvdGVzdF9ydW4uYzoxMzY4Olx0Y3R4ID0gYnBmX2N0eF9pbml0KGthdHRyLCBzaXplb2Yoc3RydWN0IHhkcF9tZCkpO1xubmV0L2JwZi90ZXN0X3J1bi5jLTEzNjktXHRpZiAoSVNfRVJSKGN0eCkpXG4tLVxubmV0L2JwZi90ZXN0X3J1bi5jPTE1MDk9aW50IGJwZl9wcm9nX3Rlc3RfcnVuX2Zsb3dfZGlzc2VjdG9yKHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbi0tXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTUzOS1cbm5ldC9icGYvdGVzdF9ydW4uYzoxNTQwOlx0dXNlcl9jdHggPSBicGZfY3R4X2luaXQoa2F0dHIsIHNpemVvZihzdHJ1Y3QgYnBmX2Zsb3dfa2V5cykpO1xubmV0L2JwZi90ZXN0X3J1bi5jLTE1NDEtXHRpZiAoSVNfRVJSKHVzZXJfY3R4KSkge1xuLS1cbm5ldC9icGYvdGVzdF9ydW4uYz0xNTc4PWludCBicGZfcHJvZ190ZXN0X3J1bl9za19sb29rdXAoc3RydWN0IGJwZl9wcm9nICpwcm9nLCBjb25zdCB1bmlvbiBicGZfYXR0ciAqa2F0dHIsXG4tLVxubmV0L2JwZi90ZXN0X3J1bi5jLTE1OTgtXG5uZXQvYnBmL3Rlc3RfcnVuLmM6MTU5OTpcdHVzZXJfY3R4ID0gYnBmX2N0eF9pbml0KGthdHRyLCBzaXplb2YoKnVzZXJfY3R4KSk7XG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTYwMC1cdGlmIChJU19FUlIodXNlcl9jdHgpKVxuLS1cbm5ldC9icGYvdGVzdF9ydW4uYz0xNzc2PWludCBicGZfcHJvZ190ZXN0X3J1bl9uZihzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXG4tLVxubmV0L2JwZi90ZXN0X3J1bi5jLTE4MTAtXG5uZXQvYnBmL3Rlc3RfcnVuLmM6MTgxMTpcdHVzZXJfY3R4ID0gYnBmX2N0eF9pbml0KGthdHRyLCBzaXplb2Yoc3RydWN0IG5mX2hvb2tfc3RhdGUpKTtcbm5ldC9icGYvdGVzdF9ydW4uYy0xODEyLVx0aWYgKElTX0VSUih1c2VyX2N0eCkpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTY6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTY4MAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgZnVuY3Rpb25zLCBiYXNlZCBvbiBhIHF1aWNrIHNjYW4gb2YgYG5ldC9icGYvdGVzdF9ydW4uY2A6CgoqKkluaXRpYWwgVGhvdWdodHMgb24gQlBGIENvbnRleHQgSW5pdGlhbGl6YXRpb24gYW5kIEZpbmFsaXphdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIGBicGZfY3R4X2luaXRgIGFuZCBgYnBmX2N0eF9maW5pc2hgLiBJbW1lZGlhdGVseSwgSSYjMzk7bSB0aGlua2luZyB0aGVzZSBsaWtlbHkgbWFuYWdlIHRoZSBzZXR1cCBhbmQgdGVhcmRvd24gb2YgdGhlIEJQRiBleGVjdXRpb24gY29udGV4dCBmb3IgcnVubmluZyB0ZXN0cy4gR2l2ZW4gdGhlIGZpbGUsIGB0ZXN0X3J1bi5jYCwgSSYjMzk7bSBleHBlY3RpbmcgdGhpcyBjb250ZXh0IHRvIGJlIHNvbWV0aGluZyBzcGVjaWZpYyB0byBydW5uaW5nIGFuZCB2YWxpZGF0aW5nIEJQRiBwcm9ncmFtcyB3aXRoaW4gdGhlIGtlcm5lbCYjMzk7cyB0ZXN0aW5nIGZyYW1ld29yaywgbm90IG5lY2Vzc2FyaWx5IGEgZ2VuZXJhbC1wdXJwb3NlIEJQRiBydW50aW1lIGVudmlyb25tZW50LiBJIHN1c3BlY3QgYGJwZl9jdHhfaW5pdGAgd2lsbCBhbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBhbnkgbmVjZXNzYXJ5IHN0cnVjdHVyZXMg4oCTIGxpa2VseSBzb21lIHNvcnQgb2YgY29udGV4dCBzdGF0ZSwgcG9zc2libHkgbWVtb3J5IGZvciBwcm9ncmFtIGV4ZWN1dGlvbiwgYW5kIG1heWJlIHJlZ2lzdGVycyBhbmQgYXV4aWxpYXJ5IGRhdGEgdXNlZCBkdXJpbmcgdGhlIHRlc3RzLiBgYnBmX2N0eF9maW5pc2hgLCBjb252ZXJzZWx5LCBzaG91bGQgYmUgcmVzcG9uc2libGUgZm9yIGNsZWFuaW5nIHVwIHRob3NlIHJlc291cmNlcywgZnJlZWluZyBtZW1vcnksIGFuZCBtYXliZSBldmVuIHBlcmZvcm1pbmcgc29tZSBmaW5hbCBjaGVja3Mgb3IgbG9nZ2luZyBhbnkgdGVzdCByZXN1bHRzLiBJJiMzOTttIGtlZW4gdG8gc2VlIGlmIHRoZXkgaGFuZGxlIGFueSBlcnJvciBjb25kaXRpb25zIG9yIGNsZWFudXAgc2NlbmFyaW9zIGdyYWNlZnVsbHkuIEkgYWxzbyB3b25kZXIgaG93IHRoZSBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgd2lkZXIgQlBGIGZyYW1ld29yayBhcmUgc3RydWN0dXJlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTY6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvYnBmL3Rlc3RfcnVuLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4NTQsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDg1NDpcdHN0YXRpYyB2b2lkICpicGZfY3R4X2luaXQoY29uc3QgdW5pb24gYnBmX2F0dHIgKmthdHRyLCB1MzIgbWF4X3NpemUpXG4gODU1Olx0e1xuIDg1NjpcdFx0dm9pZCBfX3VzZXIgKmRhdGFfaW4gPSB1NjRfdG9fdXNlcl9wdHIoa2F0dHItXHUwMDNldGVzdC5jdHhfaW4pO1xuIDg1NzpcdFx0dm9pZCBfX3VzZXIgKmRhdGFfb3V0ID0gdTY0X3RvX3VzZXJfcHRyKGthdHRyLVx1MDAzZXRlc3QuY3R4X291dCk7XG4gODU4Olx0XHR1MzIgc2l6ZSA9IGthdHRyLVx1MDAzZXRlc3QuY3R4X3NpemVfaW47XG4gODU5Olx0XHR2b2lkICpkYXRhO1xuIDg2MDpcdFx0aW50IGVycjtcbiA4NjE6XHRcbiA4NjI6XHRcdGlmICghZGF0YV9pbiBcdTAwMjZcdTAwMjYgIWRhdGFfb3V0KVxuIDg2MzpcdFx0XHRyZXR1cm4gTlVMTDtcbiA4NjQ6XHRcbiA4NjU6XHRcdGRhdGEgPSBremFsbG9jKG1heF9zaXplLCBHRlBfVVNFUik7XG4gODY2Olx0XHRpZiAoIWRhdGEpXG4gODY3Olx0XHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuIDg2ODpcdFxuIDg2OTpcdFx0aWYgKGRhdGFfaW4pIHtcbiA4NzA6XHRcdFx0ZXJyID0gYnBmX2NoZWNrX3VhcmdfdGFpbF96ZXJvKFVTRVJfQlBGUFRSKGRhdGFfaW4pLCBtYXhfc2l6ZSwgc2l6ZSk7XG4gODcxOlx0XHRcdGlmIChlcnIpIHtcbiA4NzI6XHRcdFx0XHRrZnJlZShkYXRhKTtcbiA4NzM6XHRcdFx0XHRyZXR1cm4gRVJSX1BUUihlcnIpO1xuIDg3NDpcdFx0XHR9XG4gODc1Olx0XG4gODc2Olx0XHRcdHNpemUgPSBtaW5fdCh1MzIsIG1heF9zaXplLCBzaXplKTtcbiA4Nzc6XHRcdFx0aWYgKGNvcHlfZnJvbV91c2VyKGRhdGEsIGRhdGFfaW4sIHNpemUpKSB7XG4gODc4Olx0XHRcdFx0a2ZyZWUoZGF0YSk7XG4gODc5Olx0XHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVGQVVMVCk7XG4gODgwOlx0XHRcdH1cbiA4ODE6XHRcdH1cbiA4ODI6XHRcdHJldHVybiBkYXRhO1xuIDg4MzpcdH1cbiA4ODQ6XHRcbiA4ODU6XHRzdGF0aWMgaW50IGJwZl9jdHhfZmluaXNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICprYXR0cixcbiA4ODY6XHRcdFx0XHQgIHVuaW9uIGJwZl9hdHRyIF9fdXNlciAqdWF0dHIsIGNvbnN0IHZvaWQgKmRhdGEsXG4gODg3Olx0XHRcdFx0ICB1MzIgc2l6ZSlcbiA4ODg6XHR7XG4gODg5Olx0XHR2b2lkIF9fdXNlciAqZGF0YV9vdXQgPSB1NjRfdG9fdXNlcl9wdHIoa2F0dHItXHUwMDNldGVzdC5jdHhfb3V0KTtcbiA4OTA6XHRcdGludCBlcnIgPSAtRUZBVUxUO1xuIDg5MTpcdFx0dTMyIGNvcHlfc2l6ZSA9IHNpemU7XG4gODkyOlx0XG4gODkzOlx0XHRpZiAoIWRhdGEgfHwgIWRhdGFfb3V0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxNjozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+OG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDYzOAoJCQkJCQkJb3V0cHV0OiAyOTYKCQkJCQkJCXRob3VnaHRzOiA1OTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IENvbmNlcm5zKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFdlJiMzOTtyZSBsb29raW5nIGF0IGEgcGF0Y2ggY29uY2VybmluZyBtZW1vcnkgaW5pdGlhbGl6YXRpb24gd2l0aGluIHRoZSBCUEYgY29udGV4dCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIFJDVS4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBwYXRjaCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyBLTVNBTiBjb25jZXJucy4gSGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3M6CgpGaXJzdCwgSSBleGFtaW5lZCBob3cgYHVzZXJfY3R4YCBpcyBoYW5kbGVkLiBJdCYjMzk7cyBhbGxvY2F0ZWQgdXNpbmcgYGt6YWxsb2NgIGluIGBicGZfY3R4X2luaXRgLCBzbyBpdCYjMzk7cyBndWFyYW50ZWVkIHRvIGJlIHplcm9lZCBvdXQgZnJvbSB0aGUgc3RhcnQuIGBjdHhgIGlzIG9uIHRoZSBzdGFjaywgYW5kIHByb3Blcmx5IGluaXRpYWxpemVkIHRvIHplcm8uIGByZXRgIGFuZCBgZHVyYXRpb25gIGFyZSBhbHNvIGluaXRpYWxpemVkLiAgVGhlIGNvcmUgb2YgdGhlIHBhdGNoIGludm9sdmVzIG1vdmluZyBgdXNlcl9jdHgtJmd0O2Nvb2tpZWAgYXNzaWdubWVudCBhbmQgYSBgY3R4LnNlbGVjdGVkX3NrYCBkZXJlZmVyZW5jZSAqaW5zaWRlKiB0aGUgUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uLCB3aGljaCBpcyB0aGUga2V5IHRvIHJlc29sdmluZyBhbiBSQ1UgbGlmZXRpbWUgaXNzdWUuICBJZiBgcmV0YCBpcyBuZWdhdGl2ZSwgd2UgaW1tZWRpYXRlbHkganVtcCB0byBgb3V0YCwgYnlwYXNzaW5nIHRoZSBwb3RlbnRpYWxseSBwcm9ibGVtYXRpYyBjb2RlLiBJZiBgcmV0YCBpcyBwb3NpdGl2ZSwgdGhlbiBgYnBmX3Rlc3RfZmluaXNoYCBhbmQgYGJwZl9jdHhfZmluaXNoYCBjb3B5IGB1c2VyX2N0eGAgdG8gdXNlcnNwYWNlLgoKVGhlIGRpZmYmIzM5O3MgY29yZSBmb2N1cyBpcyBvbiBSQ1Ugc2FmZXR5IGFuZCBhZGRyZXNzZXMgYSBVQUYgaXNzdWUgcmVsYXRlZCB0byBkZXJlZmVyZW5jaW5nIGBjdHguc2VsZWN0ZWRfc2tgIGFmdGVyIGV4aXRpbmcgdGhlIFJDVSByZWFkIGNyaXRpY2FsIHNlY3Rpb24uIE5vIG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucywgcmVhZHMsIG9yIHBvdGVudGlhbCBsZWFrcyB0byB1c2Vyc3BhY2UgYXJlIGludHJvZHVjZWQuIEFueSBjb25jZXJucyBhcm91bmQgdGhlIHNvY2tldCBwb2ludGVyIGFyZSBVQUYvUkNVIHZpb2xhdGlvbnMgd2hpY2ggS0FTQU4vUFJPVkVfUkNVIHdvdWxkIGNhdGNoLgoKTm93LCBsZXQmIzM5O3Mgcmlnb3JvdXNseSBjaGVjayB0aG9zZSBLTVNBTi1yZWxhdGVkIGNyaXRlcmlhOgoKMS4gICoqS2VybmVsIHN0cnVjdHVyZXMgdG8gdXNlcnNwYWNlKio6ICBgdXNlcl9jdHhgIGlzIGZ1bGx5IGluaXRpYWxpemVkIHdpdGggYGt6YWxsb2NgLCBhbmQgdGhlICpzYW1lKiBmaWVsZHMgYXJlIGluaXRpYWxpemVkIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIHBhdGNoLiBUaGUgY29kZSBtb3ZlbWVudCBkb2VzbiYjMzk7dCBhbHRlciB3aGF0IGdldHMgaW5pdGlhbGl6ZWQgYW5kIGNvcGllZC4gU28sIG5vIHByb2JsZW0gaGVyZS4KCjIuICAqKkNvbmRpdGlvbmFsIGxvZ2ljIGFuZCB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyoqOiAgYHJldGAgaXMgYWx3YXlzIHNldCBieSBgYnBmX3Rlc3RfdGltZXJfY29udGludWVgIG9yIGluaXRpYWxpemVkIHRvIC1FSU5WQUwsIHNvIGl0IGlzIGFsd2F5cyBhIHZhbGlkIHZhbHVlLiBUaGlzIGlzIGZpbmUuCgozLiAgKipDb21wbGV4IGRhdGEgc3RydWN0dXJlcyoqOiBObyBuZXcgYWxsb2NhdGlvbnMgb3IgaW5pdGlhbGl6YXRpb24gY2hhbmdlcyBoYXZlIGhhcHBlbmVkIGluIHRoaXMgY2FzZS4gIFRoaXMgaXMgbm90IGFuIGlzc3VlLgoKNC4gICoqQm91bmRzIGNoZWNrcywgbGVuZ3RocywgZXRjLioqOiBUaGUgY29kZSBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGNoYW5nZXMgdG8gYm91bmRzIGNoZWNrcyBvciBsZW5ndGggY2hlY2tzLiBUaGlzIGlzIG5vdCBhbiBpc3N1ZS4KClRoZXJlZm9yZSwgdGhpcyBwYXRjaCBkb2VzICpub3QqIGludHJvZHVjZSBLTVNBTiBjb25jZXJucy4gSXQmIzM5O3MgYW4gUkNVIGxpZmV0aW1lIGZpeCwgcHVyZWx5LiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYCBhbmQgcHJvdmlkZSB0aGlzIGRldGFpbGVkIGJyZWFrZG93bi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTY6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGJwZl9wcm9nX3Rlc3RfcnVuX3NrX2xvb2t1cCgpYCBpbiBgbmV0L2JwZi90ZXN0X3J1bi5jYCB0byBpbnNwZWN0IGBjdHguc2VsZWN0ZWRfc2tgIGFuZCB1cGRhdGUgYHVzZXJfY3R4LVx1MDAzZWNvb2tpZWAgYmVmb3JlIGNhbGxpbmcgYGJwZl90ZXN0X3RpbWVyX2xlYXZlKFx1MDAyNnQpYCwgcmF0aGVyIHRoYW4gYWZ0ZXIgaXQuXG5cblRoaXMgY2hhbmdlIGVuc3VyZXMgdGhhdCBgY3R4LnNlbGVjdGVkX3NrYCBpcyBhY2Nlc3NlZCB3aGlsZSBzdGlsbCBwcm90ZWN0ZWQgYnkgdGhlIFJDVSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbiBlc3RhYmxpc2hlZCBieSBgYnBmX3Rlc3RfdGltZXJfZW50ZXIoKWAuIEFjY2Vzc2luZyBgY3R4LnNlbGVjdGVkX3NrYCBhZnRlciByZWxlYXNpbmcgUkNVIGNvdWxkIHJlc3VsdCBpbiBhIHVzZS1hZnRlci1mcmVlIG9yIFJDVSBkZXJlZmVyZW5jZSBidWcsIHdoaWNoIGlzIG1vbml0b3JlZCBieSBLQVNBTiBhbmQgUFJPVkVfUkNVIC8gTE9DS0RFUC5cblxuVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3M6XG4tIGB1c2VyX2N0eGAgaXMgYWxsb2NhdGVkIHZpYSBga3phbGxvYygpYCBpbiBgYnBmX2N0eF9pbml0KClgLlxuLSBTdGFjayBzdHJ1Y3R1cmVzIHN1Y2ggYXMgYGN0eGAgYXJlIHplcm8taW5pdGlhbGl6ZWQgKGB7fWApLlxuLSBUaGUgY29uZGl0aW9uIGByZXQgXHUwMDNlPSAwYCBjaGVja3MgYHJldGAgd2hpY2ggaXMgaW5pdGlhbGl6ZWQvdXBkYXRlZCBieSBgYnBmX3Rlc3RfdGltZXJfY29udGludWUoKWAuXG4tIE5vIG5ldyBidWZmZXJzLCB1bmluaXRpYWxpemVkIGZpZWxkcywgb3IgbWVtb3J5IGNvcGllcyBhcmUgaW50cm9kdWNlZC5cblxuVGhlcmVmb3JlLCB0aGlzIGNoYW5nZSBkb2VzIG5vdCB3YXJyYW50IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBicGZfcHJvZ190ZXN0X3J1bl9za19sb29rdXAoKWAgaW4gYG5ldC9icGYvdGVzdF9ydW4uY2AgdG8gaW5zcGVjdCBgY3R4LnNlbGVjdGVkX3NrYCBhbmQgdXBkYXRlIGB1c2VyX2N0eC1cdTAwM2Vjb29raWVgIGJlZm9yZSBjYWxsaW5nIGBicGZfdGVzdF90aW1lcl9sZWF2ZShcdTAwMjZ0KWAsIHJhdGhlciB0aGFuIGFmdGVyIGl0LlxuXG5UaGlzIGNoYW5nZSBlbnN1cmVzIHRoYXQgYGN0eC5zZWxlY3RlZF9za2AgaXMgYWNjZXNzZWQgd2hpbGUgc3RpbGwgcHJvdGVjdGVkIGJ5IHRoZSBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24gZXN0YWJsaXNoZWQgYnkgYGJwZl90ZXN0X3RpbWVyX2VudGVyKClgLiBBY2Nlc3NpbmcgYGN0eC5zZWxlY3RlZF9za2AgYWZ0ZXIgcmVsZWFzaW5nIFJDVSBjb3VsZCByZXN1bHQgaW4gYSB1c2UtYWZ0ZXItZnJlZSBvciBSQ1UgZGVyZWZlcmVuY2UgYnVnLCB3aGljaCBpcyBtb25pdG9yZWQgYnkgS0FTQU4gYW5kIFBST1ZFX1JDVSAvIExPQ0tERVAuXG5cblRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzOlxuLSBgdXNlcl9jdHhgIGlzIGFsbG9jYXRlZCB2aWEgYGt6YWxsb2MoKWAgaW4gYGJwZl9jdHhfaW5pdCgpYC5cbi0gU3RhY2sgc3RydWN0dXJlcyBzdWNoIGFzIGBjdHhgIGFyZSB6ZXJvLWluaXRpYWxpemVkIChge31gKS5cbi0gVGhlIGNvbmRpdGlvbiBgcmV0IFx1MDAzZT0gMGAgY2hlY2tzIGByZXRgIHdoaWNoIGlzIGluaXRpYWxpemVkL3VwZGF0ZWQgYnkgYGJwZl90ZXN0X3RpbWVyX2NvbnRpbnVlKClgLlxuLSBObyBuZXcgYnVmZmVycywgdW5pbml0aWFsaXplZCBmaWVsZHMsIG9yIG1lbW9yeSBjb3BpZXMgYXJlIGludHJvZHVjZWQuXG5cblRoZXJlZm9yZSwgdGhpcyBjaGFuZ2UgZG9lcyBub3Qgd2FycmFudCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE1OjU2OjQwLjQwMTI5ODA1NVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5MzM2NTYyMTQ5MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIk5FVFwiLFxuICAgIFwiSU5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9wcm9nX3Rlc3RfcnVuX3NrX2xvb2t1cFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGJwZl9wcm9nX3Rlc3RfcnVuX3NrX2xvb2t1cCgpYCBpbiBgbmV0L2JwZi90ZXN0X3J1bi5jYCB0byBpbnNwZWN0IGBjdHguc2VsZWN0ZWRfc2tgIGFuZCB1cGRhdGUgYHVzZXJfY3R4LVxcdTAwM2Vjb29raWVgIGJlZm9yZSBjYWxsaW5nIGBicGZfdGVzdF90aW1lcl9sZWF2ZShcXHUwMDI2dClgLCByYXRoZXIgdGhhbiBhZnRlciBpdC5cXG5cXG5UaGlzIGNoYW5nZSBlbnN1cmVzIHRoYXQgYGN0eC5zZWxlY3RlZF9za2AgaXMgYWNjZXNzZWQgd2hpbGUgc3RpbGwgcHJvdGVjdGVkIGJ5IHRoZSBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24gZXN0YWJsaXNoZWQgYnkgYGJwZl90ZXN0X3RpbWVyX2VudGVyKClgLiBBY2Nlc3NpbmcgYGN0eC5zZWxlY3RlZF9za2AgYWZ0ZXIgcmVsZWFzaW5nIFJDVSBjb3VsZCByZXN1bHQgaW4gYSB1c2UtYWZ0ZXItZnJlZSBvciBSQ1UgZGVyZWZlcmVuY2UgYnVnLCB3aGljaCBpcyBtb25pdG9yZWQgYnkgS0FTQU4gYW5kIFBST1ZFX1JDVSAvIExPQ0tERVAuXFxuXFxuVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3M6XFxuLSBgdXNlcl9jdHhgIGlzIGFsbG9jYXRlZCB2aWEgYGt6YWxsb2MoKWAgaW4gYGJwZl9jdHhfaW5pdCgpYC5cXG4tIFN0YWNrIHN0cnVjdHVyZXMgc3VjaCBhcyBgY3R4YCBhcmUgemVyby1pbml0aWFsaXplZCAoYHt9YCkuXFxuLSBUaGUgY29uZGl0aW9uIGByZXQgXFx1MDAzZT0gMGAgY2hlY2tzIGByZXRgIHdoaWNoIGlzIGluaXRpYWxpemVkL3VwZGF0ZWQgYnkgYGJwZl90ZXN0X3RpbWVyX2NvbnRpbnVlKClgLlxcbi0gTm8gbmV3IGJ1ZmZlcnMsIHVuaW5pdGlhbGl6ZWQgZmllbGRzLCBvciBtZW1vcnkgY29waWVzIGFyZSBpbnRyb2R1Y2VkLlxcblxcblRoZXJlZm9yZSwgdGhpcyBjaGFuZ2UgZG9lcyBub3Qgd2FycmFudCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGJwZl9wcm9nX3Rlc3RfcnVuX3NrX2xvb2t1cGAgdG8gYWNjZXNzIHRoZSBzZWxlY3RlZCBzb2NrZXQgYGN0eC5zZWxlY3RlZF9za2Agd2l0aGluIHRoZSBSQ1UtcHJvdGVjdGVkIGNyaXRpY2FsIHNlY3Rpb24gYmVmb3JlIGNhbGxpbmcgYGJwZl90ZXN0X3RpbWVyX2xlYXZlKFxcdTAwMjZ0KWAsIHByZXZlbnRpbmcgdXNlLWFmdGVyLWZyZWUgb3IgUkNVIHZpb2xhdGlvbnMuIFRoaXMgY29kZSBwYXRoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIGBCUEZfUFJPR19URVNUX1JVTmAgY29tbWFuZCBvZiB0aGUgYGJwZigpYCBzeXNjYWxsIG9uIHNrX2xvb2t1cCBCUEYgcHJvZ3JhbXMgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNTo1Njo0MC40MDEzMDQ1ODZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3Njc1MTM0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGEzOTU3N2IyYjNjYWY2MzI5ZTJmM2E0NTI2MGRlMDZhMTEzZDIwMTFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBBdWcgMjkgMTU6NTY6MzkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L2JwZi90ZXN0X3J1bi5jIGIvbmV0L2JwZi90ZXN0X3J1bi5jXFxuaW5kZXggNWQ1MWY2Y2I3ZDE1NC4uZTY3N2VjMzM5MGUzNyAxMDA2NDRcXG4tLS0gYS9uZXQvYnBmL3Rlc3RfcnVuLmNcXG4rKysgYi9uZXQvYnBmL3Rlc3RfcnVuLmNcXG5AQCAtMTY1MCwyMSArMTY1MCwyMSBAQCBpbnQgYnBmX3Byb2dfdGVzdF9ydW5fc2tfbG9va3VwKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgY29uc3QgdW5pb24gYnBmX2F0dHIgKmthdFxcbiBcXHRcXHRjdHguc2VsZWN0ZWRfc2sgPSBOVUxMO1xcbiBcXHRcXHRyZXR2YWwgPSBCUEZfUFJPR19TS19MT09LVVBfUlVOX0FSUkFZKHByb2dzLCBjdHgsIGJwZl9wcm9nX3J1bik7XFxuIFxcdH0gd2hpbGUgKGJwZl90ZXN0X3RpbWVyX2NvbnRpbnVlKFxcdTAwMjZ0LCAxLCByZXBlYXQsIFxcdTAwMjZyZXQsIFxcdTAwMjZkdXJhdGlvbikpO1xcbitcXG4rXFx0aWYgKHJldCBcXHUwMDNlPSAwKSB7XFxuK1xcdFxcdHVzZXJfY3R4LVxcdTAwM2Vjb29raWUgPSAwO1xcbitcXHRcXHRpZiAoY3R4LnNlbGVjdGVkX3NrKSB7XFxuK1xcdFxcdFxcdGlmIChjdHguc2VsZWN0ZWRfc2stXFx1MDAzZXNrX3JldXNlcG9ydCBcXHUwMDI2XFx1MDAyNiAhY3R4Lm5vX3JldXNlcG9ydClcXG4rXFx0XFx0XFx0XFx0cmV0ID0gLUVPUE5PVFNVUFA7XFxuK1xcdFxcdFxcdGVsc2VcXG4rXFx0XFx0XFx0XFx0dXNlcl9jdHgtXFx1MDAzZWNvb2tpZSA9IHNvY2tfZ2VuX2Nvb2tpZShjdHguc2VsZWN0ZWRfc2spO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4gXFx0YnBmX3Rlc3RfdGltZXJfbGVhdmUoXFx1MDAyNnQpO1xcbiBcXG4gXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXG4tXFx0dXNlcl9jdHgtXFx1MDAzZWNvb2tpZSA9IDA7XFxuLVxcdGlmIChjdHguc2VsZWN0ZWRfc2spIHtcXG4tXFx0XFx0aWYgKGN0eC5zZWxlY3RlZF9zay1cXHUwMDNlc2tfcmV1c2Vwb3J0IFxcdTAwMjZcXHUwMDI2ICFjdHgubm9fcmV1c2Vwb3J0KSB7XFxuLVxcdFxcdFxcdHJldCA9IC1FT1BOT1RTVVBQO1xcbi1cXHRcXHRcXHRnb3RvIG91dDtcXG4tXFx0XFx0fVxcbi1cXG4tXFx0XFx0dXNlcl9jdHgtXFx1MDAzZWNvb2tpZSA9IHNvY2tfZ2VuX2Nvb2tpZShjdHguc2VsZWN0ZWRfc2spO1xcbi1cXHR9XFxuLVxcbiBcXHRyZXQgPSBicGZfdGVzdF9maW5pc2goa2F0dHIsIHVhdHRyLCBOVUxMLCBOVUxMLCAwLCAwLCByZXR2YWwsIGR1cmF0aW9uKTtcXG4gXFx0aWYgKCFyZXQpXFxuIFxcdFxcdHJldCA9IGJwZl9jdHhfZmluaXNoKGthdHRyLCB1YXR0ciwgdXNlcl9jdHgsIHNpemVvZigqdXNlcl9jdHgpKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTU6NTY6NDAuODc5MDQ5MTM1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxOTMxNTEzNTU0ODA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJORVRcIixcbiAgICBcIklORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfcHJvZ190ZXN0X3J1bl9za19sb29rdXBcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgYnBmX3Byb2dfdGVzdF9ydW5fc2tfbG9va3VwYCB0byBhY2Nlc3MgdGhlIHNlbGVjdGVkIHNvY2tldCBgY3R4LnNlbGVjdGVkX3NrYCB3aXRoaW4gdGhlIFJDVS1wcm90ZWN0ZWQgY3JpdGljYWwgc2VjdGlvbiBiZWZvcmUgY2FsbGluZyBgYnBmX3Rlc3RfdGltZXJfbGVhdmUoXFx1MDAyNnQpYCwgcHJldmVudGluZyB1c2UtYWZ0ZXItZnJlZSBvciBSQ1UgdmlvbGF0aW9ucy4gVGhpcyBjb2RlIHBhdGggaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgYEJQRl9QUk9HX1RFU1RfUlVOYCBjb21tYW5kIG9mIHRoZSBgYnBmKClgIHN5c2NhbGwgb24gc2tfbG9va3VwIEJQRiBwcm9ncmFtcyBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGEzOTU3N2IyYjNjYWY2MzI5ZTJmM2E0NTI2MGRlMDZhMTEzZDIwMTFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAyOSAxNTo1NjozOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9icGYvdGVzdF9ydW4uYyBiL25ldC9icGYvdGVzdF9ydW4uY1xuaW5kZXggNWQ1MWY2Y2I3ZDE1NC4uZTY3N2VjMzM5MGUzNyAxMDA2NDRcbi0tLSBhL25ldC9icGYvdGVzdF9ydW4uY1xuKysrIGIvbmV0L2JwZi90ZXN0X3J1bi5jXG5AQCAtMTY1MCwyMSArMTY1MCwyMSBAQCBpbnQgYnBmX3Byb2dfdGVzdF9ydW5fc2tfbG9va3VwKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgY29uc3QgdW5pb24gYnBmX2F0dHIgKmthdFxuIFx0XHRjdHguc2VsZWN0ZWRfc2sgPSBOVUxMO1xuIFx0XHRyZXR2YWwgPSBCUEZfUFJPR19TS19MT09LVVBfUlVOX0FSUkFZKHByb2dzLCBjdHgsIGJwZl9wcm9nX3J1bik7XG4gXHR9IHdoaWxlIChicGZfdGVzdF90aW1lcl9jb250aW51ZShcdTAwMjZ0LCAxLCByZXBlYXQsIFx1MDAyNnJldCwgXHUwMDI2ZHVyYXRpb24pKTtcbitcbitcdGlmIChyZXQgXHUwMDNlPSAwKSB7XG4rXHRcdHVzZXJfY3R4LVx1MDAzZWNvb2tpZSA9IDA7XG4rXHRcdGlmIChjdHguc2VsZWN0ZWRfc2spIHtcbitcdFx0XHRpZiAoY3R4LnNlbGVjdGVkX3NrLVx1MDAzZXNrX3JldXNlcG9ydCBcdTAwMjZcdTAwMjYgIWN0eC5ub19yZXVzZXBvcnQpXG4rXHRcdFx0XHRyZXQgPSAtRU9QTk9UU1VQUDtcbitcdFx0XHRlbHNlXG4rXHRcdFx0XHR1c2VyX2N0eC1cdTAwM2Vjb29raWUgPSBzb2NrX2dlbl9jb29raWUoY3R4LnNlbGVjdGVkX3NrKTtcbitcdFx0fVxuK1x0fVxuIFx0YnBmX3Rlc3RfdGltZXJfbGVhdmUoXHUwMDI2dCk7XG4gXG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRnb3RvIG91dDtcbiBcbi1cdHVzZXJfY3R4LVx1MDAzZWNvb2tpZSA9IDA7XG4tXHRpZiAoY3R4LnNlbGVjdGVkX3NrKSB7XG4tXHRcdGlmIChjdHguc2VsZWN0ZWRfc2stXHUwMDNlc2tfcmV1c2Vwb3J0IFx1MDAyNlx1MDAyNiAhY3R4Lm5vX3JldXNlcG9ydCkge1xuLVx0XHRcdHJldCA9IC1FT1BOT1RTVVBQO1xuLVx0XHRcdGdvdG8gb3V0O1xuLVx0XHR9XG4tXG4tXHRcdHVzZXJfY3R4LVx1MDAzZWNvb2tpZSA9IHNvY2tfZ2VuX2Nvb2tpZShjdHguc2VsZWN0ZWRfc2spO1xuLVx0fVxuLVxuIFx0cmV0ID0gYnBmX3Rlc3RfZmluaXNoKGthdHRyLCB1YXR0ciwgTlVMTCwgTlVMTCwgMCwgMCwgcmV0dmFsLCBkdXJhdGlvbik7XG4gXHRpZiAoIXJldClcbiBcdFx0cmV0ID0gYnBmX2N0eF9maW5pc2goa2F0dHIsIHVhdHRyLCB1c2VyX2N0eCwgc2l6ZW9mKCp1c2VyX2N0eCkpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTU6NTY6NDAuODc5MDUxMDE1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDAwMDI3ODA5NTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aGlua2luZyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBCUEYgVGVzdCBSdW5uZXIqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCB0byB3b3JrLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoaXMgY2hhbmdlLCBzbyBsZXQncyBzdGFydCBieSBkaWdnaW5nIGludG8gdGhlIGRpZmYuIEknbSBzcGVjaWZpY2FsbHkgaW50ZXJlc3RlZCBpbiBjaGFuZ2VzIG1hZGUgdG8gYG5ldC9icGYvdGVzdF9ydW4uY2AsIGVzcGVjaWFsbHkgd2l0aGluIHRoZSBgYnBmX3Byb2dfdGVzdF9ydW5fc2tfbG9va3VwYCBmdW5jdGlvbi4gSSByZW1lbWJlciB3b3JraW5nIHdpdGggdGhpcyBhcmVhIGJlZm9yZSwgc28gSSBoYXZlIGEgZ2VuZXJhbCBzZW5zZSBvZiB0aGUgdGVzdCBmcmFtZXdvcmsncyBzdHJ1Y3R1cmUuIFRvIGdldCBhIGNvbXByZWhlbnNpdmUgdmlldywgSSdsbCBuZWVkIHRoZSBzdXJyb3VuZGluZyBjb2RlLiBNeSBuZXh0IHN0ZXAgaXMgdG8gbG9jYXRlIGxpbmUgMTY1MCBpbiBgbmV0L2JwZi90ZXN0X3J1bi5jYCwgdGhhdCB3aWxsIGxldCBtZSBncmFzcCB0aGUgZnVuY3Rpb24ncyBmdWxsIGNvbnRleHQgYW5kIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoZSBtb2RpZmljYXRpb25zLiBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBgc2tfbG9va3VwYCBvcGVyYXRpb24gaXMgYmVpbmcgdGVzdGVkIHdpdGhpbiB0aGUgQlBGIGZyYW1ld29yayB0byBncmFzcCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSBjaGFuZ2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzg4LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNTo1NzoyMC44ODE4MzYzNjNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjI3MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2JwZi90ZXN0X3J1bi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE2MjAsXG4gIFwiTGluZUNvdW50XCI6IDcwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE2MjA6XFx0XFx0Y3R4LnNwb3J0ID0gdXNlcl9jdHgtXFx1MDAzZXJlbW90ZV9wb3J0O1xcbjE2MjE6XFx0XFxuMTYyMjpcXHRcXHRzd2l0Y2ggKGN0eC5mYW1pbHkpIHtcXG4xNjIzOlxcdFxcdGNhc2UgQUZfSU5FVDpcXG4xNjI0OlxcdFxcdFxcdGN0eC52NC5kYWRkciA9IChfX2ZvcmNlIF9fYmUzMil1c2VyX2N0eC1cXHUwMDNlbG9jYWxfaXA0O1xcbjE2MjU6XFx0XFx0XFx0Y3R4LnY0LnNhZGRyID0gKF9fZm9yY2UgX19iZTMyKXVzZXJfY3R4LVxcdTAwM2VyZW1vdGVfaXA0O1xcbjE2MjY6XFx0XFx0XFx0YnJlYWs7XFxuMTYyNzpcXHRcXG4xNjI4OlxcdCNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxcbjE2Mjk6XFx0XFx0Y2FzZSBBRl9JTkVUNjpcXG4xNjMwOlxcdFxcdFxcdGN0eC52Ni5kYWRkciA9IChzdHJ1Y3QgaW42X2FkZHIgKil1c2VyX2N0eC1cXHUwMDNlbG9jYWxfaXA2O1xcbjE2MzE6XFx0XFx0XFx0Y3R4LnY2LnNhZGRyID0gKHN0cnVjdCBpbjZfYWRkciAqKXVzZXJfY3R4LVxcdTAwM2VyZW1vdGVfaXA2O1xcbjE2MzI6XFx0XFx0XFx0YnJlYWs7XFxuMTYzMzpcXHQjZW5kaWZcXG4xNjM0OlxcdFxcbjE2MzU6XFx0XFx0ZGVmYXVsdDpcXG4xNjM2OlxcdFxcdFxcdHJldCA9IC1FQUZOT1NVUFBPUlQ7XFxuMTYzNzpcXHRcXHRcXHRnb3RvIG91dDtcXG4xNjM4OlxcdFxcdH1cXG4xNjM5OlxcdFxcbjE2NDA6XFx0XFx0cHJvZ3MgPSBicGZfcHJvZ19hcnJheV9hbGxvYygxLCBHRlBfS0VSTkVMKTtcXG4xNjQxOlxcdFxcdGlmICghcHJvZ3MpIHtcXG4xNjQyOlxcdFxcdFxcdHJldCA9IC1FTk9NRU07XFxuMTY0MzpcXHRcXHRcXHRnb3RvIG91dDtcXG4xNjQ0OlxcdFxcdH1cXG4xNjQ1OlxcdFxcbjE2NDY6XFx0XFx0cHJvZ3MtXFx1MDAzZWl0ZW1zWzBdLnByb2cgPSBwcm9nO1xcbjE2NDc6XFx0XFxuMTY0ODpcXHRcXHRicGZfdGVzdF90aW1lcl9lbnRlcihcXHUwMDI2dCk7XFxuMTY0OTpcXHRcXHRkbyB7XFxuMTY1MDpcXHRcXHRcXHRjdHguc2VsZWN0ZWRfc2sgPSBOVUxMO1xcbjE2NTE6XFx0XFx0XFx0cmV0dmFsID0gQlBGX1BST0dfU0tfTE9PS1VQX1JVTl9BUlJBWShwcm9ncywgY3R4LCBicGZfcHJvZ19ydW4pO1xcbjE2NTI6XFx0XFx0fSB3aGlsZSAoYnBmX3Rlc3RfdGltZXJfY29udGludWUoXFx1MDAyNnQsIDEsIHJlcGVhdCwgXFx1MDAyNnJldCwgXFx1MDAyNmR1cmF0aW9uKSk7XFxuMTY1MzpcXHRcXG4xNjU0OlxcdFxcdGlmIChyZXQgXFx1MDAzZT0gMCkge1xcbjE2NTU6XFx0XFx0XFx0dXNlcl9jdHgtXFx1MDAzZWNvb2tpZSA9IDA7XFxuMTY1NjpcXHRcXHRcXHRpZiAoY3R4LnNlbGVjdGVkX3NrKSB7XFxuMTY1NzpcXHRcXHRcXHRcXHRpZiAoY3R4LnNlbGVjdGVkX3NrLVxcdTAwM2Vza19yZXVzZXBvcnQgXFx1MDAyNlxcdTAwMjYgIWN0eC5ub19yZXVzZXBvcnQpXFxuMTY1ODpcXHRcXHRcXHRcXHRcXHRyZXQgPSAtRU9QTk9UU1VQUDtcXG4xNjU5OlxcdFxcdFxcdFxcdGVsc2VcXG4xNjYwOlxcdFxcdFxcdFxcdFxcdHVzZXJfY3R4LVxcdTAwM2Vjb29raWUgPSBzb2NrX2dlbl9jb29raWUoY3R4LnNlbGVjdGVkX3NrKTtcXG4xNjYxOlxcdFxcdFxcdH1cXG4xNjYyOlxcdFxcdH1cXG4xNjYzOlxcdFxcdGJwZl90ZXN0X3RpbWVyX2xlYXZlKFxcdTAwMjZ0KTtcXG4xNjY0OlxcdFxcbjE2NjU6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuMTY2NjpcXHRcXHRcXHRnb3RvIG91dDtcXG4xNjY3OlxcdFxcbjE2Njg6XFx0XFx0cmV0ID0gYnBmX3Rlc3RfZmluaXNoKGthdHRyLCB1YXR0ciwgTlVMTCwgTlVMTCwgMCwgMCwgcmV0dmFsLCBkdXJhdGlvbik7XFxuMTY2OTpcXHRcXHRpZiAoIXJldClcXG4xNjcwOlxcdFxcdFxcdHJldCA9IGJwZl9jdHhfZmluaXNoKGthdHRyLCB1YXR0ciwgdXNlcl9jdHgsIHNpemVvZigqdXNlcl9jdHgpKTtcXG4xNjcxOlxcdFxcbjE2NzI6XFx0b3V0OlxcbjE2NzM6XFx0XFx0YnBmX3Byb2dfYXJyYXlfZnJlZShwcm9ncyk7XFxuMTY3NDpcXHRcXHRrZnJlZSh1c2VyX2N0eCk7XFxuMTY3NTpcXHRcXHRyZXR1cm4gcmV0O1xcbjE2NzY6XFx0fVxcbjE2Nzc6XFx0XFxuMTY3ODpcXHRpbnQgYnBmX3Byb2dfdGVzdF9ydW5fc3lzY2FsbChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXFxuMTY3OTpcXHRcXHRcXHRcXHQgICAgICBjb25zdCB1bmlvbiBicGZfYXR0ciAqa2F0dHIsXFxuMTY4MDpcXHRcXHRcXHRcXHQgICAgICB1bmlvbiBicGZfYXR0ciBfX3VzZXIgKnVhdHRyKVxcbjE2ODE6XFx0e1xcbjE2ODI6XFx0XFx0dm9pZCBfX3VzZXIgKmN0eF9pbiA9IHU2NF90b191c2VyX3B0cihrYXR0ci1cXHUwMDNldGVzdC5jdHhfaW4pO1xcbjE2ODM6XFx0XFx0X191MzIgY3R4X3NpemVfaW4gPSBrYXR0ci1cXHUwMDNldGVzdC5jdHhfc2l6ZV9pbjtcXG4xNjg0OlxcdFxcdHZvaWQgKmN0eCA9IE5VTEw7XFxuMTY4NTpcXHRcXHR1MzIgcmV0dmFsO1xcbjE2ODY6XFx0XFx0aW50IGVyciA9IDA7XFxuMTY4NzpcXHRcXG4xNjg4OlxcdFxcdC8qIGRvZXNuJ3Qgc3VwcG9ydCBkYXRhX2luL291dCwgY3R4X291dCwgZHVyYXRpb24sIG9yIHJlcGVhdCBvciBmbGFncyAqL1xcbjE2ODk6XFx0XFx0aWYgKGthdHRyLVxcdTAwM2V0ZXN0LmRhdGFfaW4gfHwga2F0dHItXFx1MDAzZXRlc3QuZGF0YV9vdXQgfHxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTU6NTc6MjAuODgyMDAyMDYzWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzY5MDM5MDIxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gZGlzc2VjdGluZyB0aG9zZSBCUEYgdGltZXIgZnVuY3Rpb25zLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgQlBGIFRpbWVyIEVudHJ5IGFuZCBFeGl0IEZ1bmN0aW9ucyoqXG5cbkFscmlnaHQsIHNvIEknbSBjdXJpb3VzIGFib3V0IHRoZSBzcGVjaWZpYyBtZWNoYW5pY3Mgb2YgYGJwZl90ZXN0X3RpbWVyX2VudGVyYCBhbmQgYGJwZl90ZXN0X3RpbWVyX2xlYXZlYC4gSSd2ZSBzZWVuIHRoZXNlIGZ1bmN0aW9ucyB1c2VkIGluIHRoZSBjb250ZXh0IG9mIEJQRiB0ZXN0aW5nLCBhbmQgSSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlaXIgcm9sZSB3aXRoaW4gdGhlIGJyb2FkZXIgQlBGIGZyYW1ld29yay4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGNoZWNrIHRoZWlyIGltcGxlbWVudGF0aW9uIGRldGFpbHMuIFNwZWNpZmljYWxseSwgSSdtIGxvb2tpbmcgZm9yIHRoZSBkZWZpbml0aW9ucyBhbmQgdXNhZ2Ugb2YgdGhvc2UgZnVuY3Rpb25zLiBHaXZlbiB0aGUgbGlrZWx5IGFyZWEgb2YgZnVuY3Rpb25hbGl0eSwgSSB0aGluayB0aGV5IHdpbGwgbW9zdCBsaWtlbHkgYmUgcmVsYXRlZCB0byB0ZXN0IGhhcm5lc3Nlcywgd2hpY2ggc3VnZ2VzdHMgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IG15IHNlYXJjaCBpcyB3aXRoaW4gdGhlIGtlcm5lbCdzIHRlc3RpbmcgaW5mcmFzdHJ1Y3R1cmUsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIEJQRi1yZWxhdGVkIGZpbGVzLiBUaGVyZWZvcmUsIG15IGZpcnN0IHRob3VnaHQgaXMgdG8gY2hlY2sgYG5ldC9icGYvdGVzdF9ydW4uY2AuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGRldGFpbGVkIGltcGxlbWVudGF0aW9uIGFuZCBjb250ZXh0IEkgbmVlZC4gVGltZSB0byBnZXQgdG8gaXQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM4MzAsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE1OjU3OjI0LjU3MjM5NTY3NloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MzM5Mzg3NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfdGVzdF90aW1lcl9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2JwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2JwZi90ZXN0X3J1bi5jPTMxPXN0cnVjdCBicGZfdGVzdF90aW1lciB7XFxuLS1cXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMzUtXFxubmV0L2JwZi90ZXN0X3J1bi5jOjM2OnN0YXRpYyB2b2lkIGJwZl90ZXN0X3RpbWVyX2VudGVyKHN0cnVjdCBicGZfdGVzdF90aW1lciAqdClcXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMzctXFx0X19hY3F1aXJlcyhyY3UpXFxuLS1cXG5uZXQvYnBmL3Rlc3RfcnVuLmMtNDItXFxubmV0L2JwZi90ZXN0X3J1bi5jOjQzOnN0YXRpYyB2b2lkIGJwZl90ZXN0X3RpbWVyX2xlYXZlKHN0cnVjdCBicGZfdGVzdF90aW1lciAqdClcXG5uZXQvYnBmL3Rlc3RfcnVuLmMtNDQtXFx0X19yZWxlYXNlcyhyY3UpXFxuLS1cXG5uZXQvYnBmL3Rlc3RfcnVuLmMtNDktXFxubmV0L2JwZi90ZXN0X3J1bi5jOjUwOnN0YXRpYyBib29sIGJwZl90ZXN0X3RpbWVyX2NvbnRpbnVlKHN0cnVjdCBicGZfdGVzdF90aW1lciAqdCwgaW50IGl0ZXJhdGlvbnMsXFxubmV0L2JwZi90ZXN0X3J1bi5jLTUxLVxcdFxcdFxcdFxcdCAgICB1MzIgcmVwZWF0LCBpbnQgKmVyciwgdTMyICpkdXJhdGlvbilcXG4tLVxcbm5ldC9icGYvdGVzdF9ydW4uYy03Mi1cXHRcXHR0LVxcdTAwM2V0aW1lX3NwZW50ICs9IGt0aW1lX2dldF9ucygpIC0gdC1cXHUwMDNldGltZV9zdGFydDtcXG5uZXQvYnBmL3Rlc3RfcnVuLmM6NzM6XFx0XFx0YnBmX3Rlc3RfdGltZXJfbGVhdmUodCk7XFxubmV0L2JwZi90ZXN0X3J1bi5jLTc0LVxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbm5ldC9icGYvdGVzdF9ydW4uYzo3NTpcXHRcXHRicGZfdGVzdF90aW1lcl9lbnRlcih0KTtcXG5uZXQvYnBmL3Rlc3RfcnVuLmMtNzYtXFx0fVxcbi0tXFxubmV0L2JwZi90ZXN0X3J1bi5jPTM2MD1zdGF0aWMgaW50IGJwZl90ZXN0X3J1bl94ZHBfbGl2ZShzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHN0cnVjdCB4ZHBfYnVmZiAqY3R4LFxcbi0tXFxubmV0L2JwZi90ZXN0X3J1bi5jLTM3NC1cXG5uZXQvYnBmL3Rlc3RfcnVuLmM6Mzc1OlxcdGJwZl90ZXN0X3RpbWVyX2VudGVyKFxcdTAwMjZ0KTtcXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMzc2LVxcdGRvIHtcXG4tLVxcbm5ldC9icGYvdGVzdF9ydW4uYy0zODAtXFx0XFx0XFx0YnJlYWs7XFxubmV0L2JwZi90ZXN0X3J1bi5jOjM4MTpcXHR9IHdoaWxlIChicGZfdGVzdF90aW1lcl9jb250aW51ZShcXHUwMDI2dCwgeGRwLmZyYW1lX2NudCwgcmVwZWF0LCBcXHUwMDI2cmV0LCB0aW1lKSk7XFxubmV0L2JwZi90ZXN0X3J1bi5jOjM4MjpcXHRicGZfdGVzdF90aW1lcl9sZWF2ZShcXHUwMDI2dCk7XFxubmV0L2JwZi90ZXN0X3J1bi5jLTM4My1cXG4tLVxcbm5ldC9icGYvdGVzdF9ydW4uYz0zODg9c3RhdGljIGludCBicGZfdGVzdF9ydW4oc3RydWN0IGJwZl9wcm9nICpwcm9nLCB2b2lkICpjdHgsIHUzMiByZXBlYXQsXFxuLS1cXG5uZXQvYnBmL3Rlc3RfcnVuLmMtNDExLVxcbm5ldC9icGYvdGVzdF9ydW4uYzo0MTI6XFx0YnBmX3Rlc3RfdGltZXJfZW50ZXIoXFx1MDAyNnQpO1xcbm5ldC9icGYvdGVzdF9ydW4uYy00MTMtXFx0b2xkX2N0eCA9IGJwZl9zZXRfcnVuX2N0eChcXHUwMDI2cnVuX2N0eC5ydW5fY3R4KTtcXG4tLVxcbm5ldC9icGYvdGVzdF9ydW4uYy00MjUtXFx0XFx0bG9jYWxfYmhfZW5hYmxlKCk7XFxubmV0L2JwZi90ZXN0X3J1bi5jOjQyNjpcXHR9IHdoaWxlIChicGZfdGVzdF90aW1lcl9jb250aW51ZShcXHUwMDI2dCwgMSwgcmVwZWF0LCBcXHUwMDI2cmV0LCB0aW1lKSk7XFxubmV0L2JwZi90ZXN0X3J1bi5jLTQyNy1cXHRicGZfcmVzZXRfcnVuX2N0eChvbGRfY3R4KTtcXG5uZXQvYnBmL3Rlc3RfcnVuLmM6NDI4OlxcdGJwZl90ZXN0X3RpbWVyX2xlYXZlKFxcdTAwMjZ0KTtcXG5uZXQvYnBmL3Rlc3RfcnVuLmMtNDI5LVxcbi0tXFxubmV0L2JwZi90ZXN0X3J1bi5jPTE1MDk9aW50IGJwZl9wcm9nX3Rlc3RfcnVuX2Zsb3dfZGlzc2VjdG9yKHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcXG4tLVxcbm5ldC9icGYvdGVzdF9ydW4uYy0xNTU1LVxcbm5ldC9icGYvdGVzdF9ydW4uYzoxNTU2OlxcdGJwZl90ZXN0X3RpbWVyX2VudGVyKFxcdTAwMjZ0KTtcXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTU1Ny1cXHRkbyB7XFxuLS1cXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTU1OS1cXHRcXHRcXHRcXHRcXHQgIHNpemUsIGZsYWdzKTtcXG5uZXQvYnBmL3Rlc3RfcnVuLmM6MTU2MDpcXHR9IHdoaWxlIChicGZfdGVzdF90aW1lcl9jb250aW51ZShcXHUwMDI2dCwgMSwgcmVwZWF0LCBcXHUwMDI2cmV0LCBcXHUwMDI2ZHVyYXRpb24pKTtcXG5uZXQvYnBmL3Rlc3RfcnVuLmM6MTU2MTpcXHRicGZfdGVzdF90aW1lcl9sZWF2ZShcXHUwMDI2dCk7XFxubmV0L2JwZi90ZXN0X3J1bi5jLTE1NjItXFxuLS1cXG5uZXQvYnBmL3Rlc3RfcnVuLmM9MTU3OD1pbnQgYnBmX3Byb2dfdGVzdF9ydW5fc2tfbG9va3VwKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgY29uc3QgdW5pb24gYnBmX2F0dHIgKmthdHRyLFxcbi0tXFxubmV0L2JwZi90ZXN0X3J1bi5jLTE2NDctXFxubmV0L2JwZi90ZXN0X3J1bi5jOjE2NDg6XFx0YnBmX3Rlc3RfdGltZXJfZW50ZXIoXFx1MDAyNnQpO1xcbm5ldC9icGYvdGVzdF9ydW4uYy0xNjQ5LVxcdGRvIHtcXG4tLVxcbm5ldC9icGYvdGVzdF9ydW4uYy0xNjUxLVxcdFxcdHJldHZhbCA9IEJQRl9QUk9HX1NLX0xPT0tVUF9SVU5fQVJSQVkocHJvZ3MsIGN0eCwgYnBmX3Byb2dfcnVuKTtcXG5uZXQvYnBmL3Rlc3RfcnVuLmM6MTY1MjpcXHR9IHdoaWxlIChicGZfdGVzdF90aW1lcl9jb250aW51ZShcXHUwMDI2dCwgMSwgcmVwZWF0LCBcXHUwMDI2cmV0LCBcXHUwMDI2ZHVyYXRpb24pKTtcXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTY1My1cXG4tLVxcbm5ldC9icGYvdGVzdF9ydW4uYy0xNjYyLVxcdH1cXG5uZXQvYnBmL3Rlc3RfcnVuLmM6MTY2MzpcXHRicGZfdGVzdF90aW1lcl9sZWF2ZShcXHUwMDI2dCk7XFxubmV0L2JwZi90ZXN0X3J1bi5jLTE2NjQtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE1OjU3OjI0LjY0NTc5NDE5M1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjExNzgzOTMyODM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGdyYW51bGFyIG1lY2hhbmljcyBvZiB0aGVzZSBCUEYgdGltZXIgZnVuY3Rpb25zLiBTcGVjaWZpY2FsbHksIGBicGZfdGVzdF90aW1lcl9lbnRlcmAgYW5kIGBicGZfdGVzdF90aW1lcl9sZWF2ZWAuIEknbSBnb2luZyB0byBoZWFkIG92ZXIgdG8gdGhlIGBuZXQvYnBmL3Rlc3RfcnVuLmNgIGZpbGUgYW5kIHplcm8gaW4gb24gbGluZXMgMzAgdGhyb3VnaCA4MC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgY29yZSBsb2dpYyBhbmQgYW55IGNyaXRpY2FsIGludGVyYWN0aW9ucyB3aXRoaW4gdGhhdCBzZWdtZW50LiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB3aGF0J3MgaGFwcGVuaW5nIGF0IHRoaXMgbGV2ZWwgb2YgZGV0YWlsLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NTM4LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTU6NTc6MzYuNDI5NzI5MDUyWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA3MzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9icGYvdGVzdF9ydW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAzMDpcXHRcXG4gIDMxOlxcdHN0cnVjdCBicGZfdGVzdF90aW1lciB7XFxuICAzMjpcXHRcXHR1MzIgaTtcXG4gIDMzOlxcdFxcdHU2NCB0aW1lX3N0YXJ0LCB0aW1lX3NwZW50O1xcbiAgMzQ6XFx0fTtcXG4gIDM1OlxcdFxcbiAgMzY6XFx0c3RhdGljIHZvaWQgYnBmX3Rlc3RfdGltZXJfZW50ZXIoc3RydWN0IGJwZl90ZXN0X3RpbWVyICp0KVxcbiAgMzc6XFx0XFx0X19hY3F1aXJlcyhyY3UpXFxuICAzODpcXHR7XFxuICAzOTpcXHRcXHRyY3VfcmVhZF9sb2NrX2RvbnRfbWlncmF0ZSgpO1xcbiAgNDA6XFx0XFx0dC1cXHUwMDNldGltZV9zdGFydCA9IGt0aW1lX2dldF9ucygpO1xcbiAgNDE6XFx0fVxcbiAgNDI6XFx0XFxuICA0MzpcXHRzdGF0aWMgdm9pZCBicGZfdGVzdF90aW1lcl9sZWF2ZShzdHJ1Y3QgYnBmX3Rlc3RfdGltZXIgKnQpXFxuICA0NDpcXHRcXHRfX3JlbGVhc2VzKHJjdSlcXG4gIDQ1OlxcdHtcXG4gIDQ2OlxcdFxcdHQtXFx1MDAzZXRpbWVfc3RhcnQgPSAwO1xcbiAgNDc6XFx0XFx0cmN1X3JlYWRfdW5sb2NrX21pZ3JhdGUoKTtcXG4gIDQ4OlxcdH1cXG4gIDQ5OlxcdFxcbiAgNTA6XFx0c3RhdGljIGJvb2wgYnBmX3Rlc3RfdGltZXJfY29udGludWUoc3RydWN0IGJwZl90ZXN0X3RpbWVyICp0LCBpbnQgaXRlcmF0aW9ucyxcXG4gIDUxOlxcdFxcdFxcdFxcdFxcdCAgICB1MzIgcmVwZWF0LCBpbnQgKmVyciwgdTMyICpkdXJhdGlvbilcXG4gIDUyOlxcdFxcdF9fbXVzdF9ob2xkKHJjdSlcXG4gIDUzOlxcdHtcXG4gIDU0OlxcdFxcdHQtXFx1MDAzZWkgKz0gaXRlcmF0aW9ucztcXG4gIDU1OlxcdFxcdGlmICh0LVxcdTAwM2VpIFxcdTAwM2U9IHJlcGVhdCkge1xcbiAgNTY6XFx0XFx0XFx0LyogV2UncmUgZG9uZS4gKi9cXG4gIDU3OlxcdFxcdFxcdHQtXFx1MDAzZXRpbWVfc3BlbnQgKz0ga3RpbWVfZ2V0X25zKCkgLSB0LVxcdTAwM2V0aW1lX3N0YXJ0O1xcbiAgNTg6XFx0XFx0XFx0ZG9fZGl2KHQtXFx1MDAzZXRpbWVfc3BlbnQsIHQtXFx1MDAzZWkpO1xcbiAgNTk6XFx0XFx0XFx0KmR1cmF0aW9uID0gdC1cXHUwMDNldGltZV9zcGVudCBcXHUwMDNlIFUzMl9NQVggPyBVMzJfTUFYIDogKHUzMil0LVxcdTAwM2V0aW1lX3NwZW50O1xcbiAgNjA6XFx0XFx0XFx0KmVyciA9IDA7XFxuICA2MTpcXHRcXHRcXHRnb3RvIHJlc2V0O1xcbiAgNjI6XFx0XFx0fVxcbiAgNjM6XFx0XFxuICA2NDpcXHRcXHRpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHtcXG4gIDY1OlxcdFxcdFxcdC8qIER1cmluZyBpdGVyYXRpb246IHdlJ3ZlIGJlZW4gY2FuY2VsbGVkLCBhYm9ydC4gKi9cXG4gIDY2OlxcdFxcdFxcdCplcnIgPSAtRUlOVFI7XFxuICA2NzpcXHRcXHRcXHRnb3RvIHJlc2V0O1xcbiAgNjg6XFx0XFx0fVxcbiAgNjk6XFx0XFxuICA3MDpcXHRcXHRpZiAobmVlZF9yZXNjaGVkKCkpIHtcXG4gIDcxOlxcdFxcdFxcdC8qIER1cmluZyBpdGVyYXRpb246IHdlIG5lZWQgdG8gcmVzY2hlZHVsZSBiZXR3ZWVuIHJ1bnMuICovXFxuICA3MjpcXHRcXHRcXHR0LVxcdTAwM2V0aW1lX3NwZW50ICs9IGt0aW1lX2dldF9ucygpIC0gdC1cXHUwMDNldGltZV9zdGFydDtcXG4gIDczOlxcdFxcdFxcdGJwZl90ZXN0X3RpbWVyX2xlYXZlKHQpO1xcbiAgNzQ6XFx0XFx0XFx0Y29uZF9yZXNjaGVkKCk7XFxuICA3NTpcXHRcXHRcXHRicGZfdGVzdF90aW1lcl9lbnRlcih0KTtcXG4gIDc2OlxcdFxcdH1cXG4gIDc3OlxcdFxcbiAgNzg6XFx0XFx0LyogRG8gYW5vdGhlciByb3VuZC4gKi9cXG4gIDc5OlxcdFxcdHJldHVybiB0cnVlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNTo1NzozNi40Mjk4Mzc4NTJaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODMwNDIwMjc3MTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBCUEYgU29ja2V0IExvb2t1cCBUZXN0KipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYGJwZl9wcm9nX3Rlc3RfcnVuX3NrX2xvb2t1cGAgZnVuY3Rpb24uIFNlZW1zIGxpa2UgdGhlIGNvcmUgaXNzdWUgaGVyZSByZXZvbHZlcyBhcm91bmQgaG93IGBjdHguc2VsZWN0ZWRfc2tgIGlzIGhhbmRsZWQgaW4gdGhlIGNvbnRleHQgb2YgQlBGIHNvY2tldCBsb29rdXAgcHJvZ3JhbXMsIHBhcnRpY3VsYXJseSB3aGVuIHVzaW5nIGBicGZfc2tfYXNzaWduYC4gVGhlIHByb2dyYW0gc2V0cyBgY3R4LnNlbGVjdGVkX3NrYCwgdGhhdCdzIGZpbmUuIFRoZSBjcml0aWNhbCBwYXJ0IGlzIHRoYXQgdGhpcyBzb2NrZXQgaXMgdGhlbiBhY2Nlc3NlZCAqd2l0aGluKiBhbiBSQ1UgY3JpdGljYWwgc2VjdGlvbiwgc3BlY2lmaWNhbGx5IGJldHdlZW4gdGhlIGBicGZfdGVzdF90aW1lcl9lbnRlcmAgYW5kIGBicGZfdGVzdF90aW1lcl9sZWF2ZWAgY2FsbHMuIFRoaXMgaXMgd2hlcmUgdGhpbmdzIGdldCBpbnRlcmVzdGluZy5cblxuQmVmb3JlIHRoaXMgcGF0Y2gsIHRoZSBjb2RlIGNhbGxlZCBgYnBmX3Rlc3RfdGltZXJfbGVhdmUoXHUwMDI2dClgICppbW1lZGlhdGVseSogYWZ0ZXIgYSBsb29wLiBDcnVjaWFsbHksIHRoYXQgY2FsbCBoYXBwZW5zICpvdXRzaWRlKiB0aGUgUkNVIHJlYWQgbG9jay4gQWZ0ZXIgdGhlIGxvY2sgaXMgcmVsZWFzZWQsIHRoZSBjb2RlIHRoZW4gcHJvY2VlZHMgdG8gYWNjZXNzIG1lbWJlcnMgb2YgYGN0eC5zZWxlY3RlZF9za2AsIHNwZWNpZmljYWxseSBgc2tfcmV1c2Vwb3J0YCBhbmQgdXNlcyBgc29ja19nZW5fY29va2llKGN0eC5zZWxlY3RlZF9zaylgLiBOb3csIGlmIGBzZWxlY3RlZF9za2Agd2VyZSAqb25seSogcHJvdGVjdGVkIGJ5IFJDVSwgdGhpcyB3b3VsZCBiZSBhIHRleHRib29rIHVzZS1hZnRlci1mcmVlIG9yIFJDVSB2aW9sYXRpb24uIERlcmVmZXJlbmNpbmcgYSBzb2NrZXQgcG9pbnRlciBhZnRlciB0aGUgUkNVIHJlYWQgbG9jayBpcyBhIGJpZyBuby1ubyEgRXNzZW50aWFsbHksIHdlJ3JlIGFjY2Vzc2luZyBhIHBvdGVudGlhbGx5IGZyZWVkIG9yIHJlLXB1cnBvc2VkIHNvY2tldC5cblxuVGhlIGZpeCBpcyBxdWl0ZSBlbGVnYW50LiBCeSBtb3ZpbmcgYHVzZXJfY3R4LVx1MDAzZWNvb2tpZSA9IHNvY2tfZ2VuX2Nvb2tpZShjdHguc2VsZWN0ZWRfc2spYCBpbnNpZGUgdGhlIFJDVSBzZWN0aW9uIOKAkyByaWdodCBiZWZvcmUgdGhhdCBgYnBmX3Rlc3RfdGltZXJfbGVhdmUoXHUwMDI2dClgIGNhbGwg4oCTIHdlIGVuc3VyZSB0aGF0IGBjdHguc2VsZWN0ZWRfc2tgIGlzIHNhZmVseSBhY2Nlc3NlZCB3aGlsZSB3ZSdyZSBzdGlsbCBob2xkaW5nIHRoZSBSQ1UgcmVhZCBsb2NrLiBUaGlzIGVsaW1pbmF0ZXMgdGhlIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbiBhbmQgcHJvdGVjdHMgdGhlIHNvY2tldCBmcm9tIGJlaW5nIGZyZWVkIHdoaWxlIHdlJ3JlIHN0aWxsIHJlZmVyZW5jaW5nIGl0LiBJdCdzIGEgY2xhc3NpYyBleGFtcGxlIG9mIHByb3BlciBSQ1UgdXNhZ2U6IG1ha2Ugc3VyZSBhbGwgcmVmZXJlbmNlcyB0byB0aGUgZGF0YSBwcm90ZWN0ZWQgYnkgUkNVIGFyZSBkb25lIHVuZGVyIHRoZSByZWFkIGxvY2suXG5cbk5vdywgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgd2hlcmUgYGJwZl9wcm9nX3Rlc3RfcnVuX3NrX2xvb2t1cGAgaXMgYWN0dWFsbHkgYmVpbmcgY2FsbGVkLCBhbmQgd2hhdCBjb25maWd1cmF0aW9ucyBvciBzZXR1cHMgaXQgbWlnaHQgcmVxdWlyZSB0byB0cmlnZ2VyIHRoaXMgYmVoYXZpb3IuIFRpbWUgdG8gc2VhcmNoIGZvciB0aGF0IGluIGBrZXJuZWwvYnBmL2AgYW5kIGBuZXQvYnBmL2AuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6NjQ0MCwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE2OjAwOjM5LjQ3MTg2OVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ3NTI4MTIxNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfcHJvZ190ZXN0X3J1bl9za19sb29rdXBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9icGYuaD0zMTEyPWludCBicGZfcHJvZ190ZXN0X3J1bl9yYXdfdHAoc3RydWN0IGJwZl9wcm9nICpwcm9nLFxcbi0tXFxuaW5jbHVkZS9saW51eC9icGYuaC0zMTE0LVxcdFxcdFxcdCAgICAgdW5pb24gYnBmX2F0dHIgX191c2VyICp1YXR0cik7XFxuaW5jbHVkZS9saW51eC9icGYuaDozMTE1OmludCBicGZfcHJvZ190ZXN0X3J1bl9za19sb29rdXAoc3RydWN0IGJwZl9wcm9nICpwcm9nLFxcbmluY2x1ZGUvbGludXgvYnBmLmgtMzExNi1cXHRcXHRcXHRcXHRjb25zdCB1bmlvbiBicGZfYXR0ciAqa2F0dHIsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2JwZi5oPTM0NzQ9c3RhdGljIGlubGluZSBpbnQgYnBmX3Byb2dfdGVzdF9ydW5fZmxvd19kaXNzZWN0b3Ioc3RydWN0IGJwZl9wcm9nICpwcm9nLFxcbi0tXFxuaW5jbHVkZS9saW51eC9icGYuaC0zNDgwLVxcbmluY2x1ZGUvbGludXgvYnBmLmg6MzQ4MTpzdGF0aWMgaW5saW5lIGludCBicGZfcHJvZ190ZXN0X3J1bl9za19sb29rdXAoc3RydWN0IGJwZl9wcm9nICpwcm9nLFxcbmluY2x1ZGUvbGludXgvYnBmLmgtMzQ4Mi1cXHRcXHRcXHRcXHRcXHQgICAgICBjb25zdCB1bmlvbiBicGZfYXR0ciAqa2F0dHIsXFxuLS1cXG5uZXQvYnBmL3Rlc3RfcnVuLmM9MTUwOT1pbnQgYnBmX3Byb2dfdGVzdF9ydW5fZmxvd19kaXNzZWN0b3Ioc3RydWN0IGJwZl9wcm9nICpwcm9nLFxcbi0tXFxubmV0L2JwZi90ZXN0X3J1bi5jLTE1NzctXFxubmV0L2JwZi90ZXN0X3J1bi5jOjE1Nzg6aW50IGJwZl9wcm9nX3Rlc3RfcnVuX3NrX2xvb2t1cChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIGNvbnN0IHVuaW9uIGJwZl9hdHRyICprYXR0cixcXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTU3OS1cXHRcXHRcXHRcXHR1bmlvbiBicGZfYXR0ciBfX3VzZXIgKnVhdHRyKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9MTIxNzQ9Y29uc3Qgc3RydWN0IGJwZl9wcm9nX29wcyBza19sb29rdXBfcHJvZ19vcHMgPSB7XFxubmV0L2NvcmUvZmlsdGVyLmM6MTIxNzU6XFx0LnRlc3RfcnVuID0gYnBmX3Byb2dfdGVzdF9ydW5fc2tfbG9va3VwLFxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMTc2LX07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE2OjAwOjQxLjk0NzE1OTgzNloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMzgyODk3MTM2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgcXVlc3Rpb246XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgQnVpbGQgUHJvY2VzcyBmb3IgYG5ldC9icGYvdGVzdF9ydW4uY2AqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgYnVpbGQgcHJvY2VzcyBmb3IgYG5ldC9icGYvdGVzdF9ydW4uY2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHRyYWNlIHRoZSBjb21waWxhdGlvbiDigJMgZmlndXJpbmcgb3V0IHdoaWNoIE1ha2VmaWxlIGFjdHVhbGx5IG9yY2hlc3RyYXRlcyB0aGUgYnVpbGQuIFRoaXMgaXMgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGRlYnVnZ2luZyB0YXNrLCBidXQgdW5kZXJzdGFuZGluZyB3aGVyZSB0aGlzIGZpbGUgaXMgZ2V0dGluZyBjb21waWxlZCBmcm9tIGNhbiBvZnRlbiB1bmVhcnRoIGludGVyZXN0aW5nIGRlcGVuZGVuY3kgaXNzdWVzIGxhdGVyLiBJJ2xsIG5lZWQgdG8gZGlnIHRocm91Z2ggdGhlIGtlcm5lbCBzb3VyY2UncyBtYWtlZmlsZXMuIEl0J3MgbGlrZWx5IHRoYXQgYSBgTWFrZWZpbGVgIHNvbWV3aGVyZSBpbiB0aGUgYG5ldC9icGYvYCBkaXJlY3RvcnkgaXRzZWxmIGlzIGludm9sdmVkLCBvciBwZXJoYXBzIGFuIHVwcGVyLWxldmVsIG9uZS4gTGV0J3Mgc3RhcnQgd2l0aCBhIGBmaW5kYCBvciBhIHF1aWNrIGdyZXAgdG8gaWRlbnRpZnkgdGhlIHJlbGV2YW50IGBNYWtlZmlsZWBzLiBJIG1pZ2h0IG5lZWQgdG8gbG9vayBhdCBrZXJuZWwgY29uZmlnIG9wdGlvbnMgdG9vLCBqdXN0IHRvIGJlIHRob3JvdWdoLiBUaGVuLCBkZXBlbmRpbmcgb24gaG93IGNvbXBsZXggdGhlIGJ1aWxkIHN5c3RlbSBpcywgSSBtaWdodCBoYXZlIHRvIGFkZCBzb21lIGV4dHJhIGxvZ2dpbmcgdG8gdGhlIGNvbXBpbGF0aW9uIHByb2Nlc3MsIHRvIHdhdGNoIGhvdyBgdGVzdF9ydW4uY2AgZml0cyBpbnRvIHRoZSB3aG9sZSBwaWN0dXJlLiBJJ20gYXNzdW1pbmcgaXQncyBwYXJ0IG9mIGEgbW9kdWxlIG9yIG1heWJlIGEgc3BlY2lmaWMgdGVzdCBzdWl0ZSwgYW5kIHRoYXQgaW5mbyBpcyBsaWtlbHkgaW4gb25lIG9mIHRoZSByZWxldmFudCBNYWtlZmlsZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc4MTYsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNjowMDo1NS43NzYxMzM5MjJaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcwNDMyODg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRlc3RfcnVuXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9icGYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9icGYvTWFrZWZpbGUtMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5uZXQvYnBmL01ha2VmaWxlOjI6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKVxcdDo9IHRlc3RfcnVuLm9cXG5uZXQvYnBmL01ha2VmaWxlLTMtaWZlcSAoJChDT05GSUdfQlBGX0pJVCkseSlcXG4tLVxcbm5ldC9icGYvYnBmX2R1bW15X3N0cnVjdF9vcHMuYz04Mj1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9jdHhfYXJnX2F1eCAqZmluZF9jdHhfYXJnX2luZm8oc3RydWN0IGJwZl9wcm9nX2F1eCAqYXV4LCBpbnQgb2Zmc2V0KVxcbi0tXFxubmV0L2JwZi9icGZfZHVtbXlfc3RydWN0X29wcy5jLTk1LSAqL1xcbm5ldC9icGYvYnBmX2R1bW15X3N0cnVjdF9vcHMuYzo5NjpzdGF0aWMgaW50IGNoZWNrX3Rlc3RfcnVuX2FyZ3Moc3RydWN0IGJwZl9wcm9nICpwcm9nLCBzdHJ1Y3QgYnBmX2R1bW15X29wc190ZXN0X2FyZ3MgKmFyZ3MpXFxubmV0L2JwZi9icGZfZHVtbXlfc3RydWN0X29wcy5jLTk3LXtcXG4tLVxcbm5ldC9icGYvYnBmX2R1bW15X3N0cnVjdF9vcHMuYz0xMjc9ZXh0ZXJuIGNvbnN0IHN0cnVjdCBicGZfbGlua19vcHMgYnBmX3N0cnVjdF9vcHNfbGlua19sb3BzO1xcbm5ldC9icGYvYnBmX2R1bW15X3N0cnVjdF9vcHMuYy0xMjgtXFxubmV0L2JwZi9icGZfZHVtbXlfc3RydWN0X29wcy5jOjEyOTppbnQgYnBmX3N0cnVjdF9vcHNfdGVzdF9ydW4oc3RydWN0IGJwZl9wcm9nICpwcm9nLCBjb25zdCB1bmlvbiBicGZfYXR0ciAqa2F0dHIsXFxubmV0L2JwZi9icGZfZHVtbXlfc3RydWN0X29wcy5jLTEzMC1cXHRcXHRcXHQgICAgdW5pb24gYnBmX2F0dHIgX191c2VyICp1YXR0cilcXG4tLVxcbm5ldC9icGYvYnBmX2R1bW15X3N0cnVjdF9vcHMuYy0xNTYtXFxubmV0L2JwZi9icGZfZHVtbXlfc3RydWN0X29wcy5jOjE1NzpcXHRlcnIgPSBjaGVja190ZXN0X3J1bl9hcmdzKHByb2csIGFyZ3MpO1xcbm5ldC9icGYvYnBmX2R1bW15X3N0cnVjdF9vcHMuYy0xNTgtXFx0aWYgKGVycilcXG4tLVxcbm5ldC9icGYvdGVzdF9ydW4uYy0yOC0jZGVmaW5lIENSRUFURV9UUkFDRV9QT0lOVFNcXG5uZXQvYnBmL3Rlc3RfcnVuLmM6Mjk6I2luY2x1ZGUgXFx1MDAzY3RyYWNlL2V2ZW50cy9icGZfdGVzdF9ydW4uaFxcdTAwM2VcXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMzAtXFxuLS1cXG5uZXQvYnBmL3Rlc3RfcnVuLmM9MTAwPXN0cnVjdCB4ZHBfdGVzdF9kYXRhIHtcXG4tLVxcbm5ldC9icGYvdGVzdF9ydW4uYy0xMTgtXFxubmV0L2JwZi90ZXN0X3J1bi5jOjExOTpzdGF0aWMgdm9pZCB4ZHBfdGVzdF9ydW5faW5pdF9wYWdlKG5ldG1lbV9yZWYgbmV0bWVtLCB2b2lkICphcmcpXFxubmV0L2JwZi90ZXN0X3J1bi5jLTEyMC17XFxuLS1cXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTQ5LVxcbm5ldC9icGYvdGVzdF9ydW4uYzoxNTA6c3RhdGljIGludCB4ZHBfdGVzdF9ydW5fc2V0dXAoc3RydWN0IHhkcF90ZXN0X2RhdGEgKnhkcCwgc3RydWN0IHhkcF9idWZmICpvcmlnX2N0eClcXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTUxLXtcXG4tLVxcbm5ldC9icGYvdGVzdF9ydW4uYy0xNTgtXFx0XFx0Lm5pZCA9IE5VTUFfTk9fTk9ERSxcXG5uZXQvYnBmL3Rlc3RfcnVuLmM6MTU5OlxcdFxcdC5pbml0X2NhbGxiYWNrID0geGRwX3Rlc3RfcnVuX2luaXRfcGFnZSxcXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTYwLVxcdFxcdC5pbml0X2FyZyA9IHhkcCxcXG4tLVxcbm5ldC9icGYvdGVzdF9ydW4uYy0yMDMtXFxubmV0L2JwZi90ZXN0X3J1bi5jOjIwNDpzdGF0aWMgdm9pZCB4ZHBfdGVzdF9ydW5fdGVhcmRvd24oc3RydWN0IHhkcF90ZXN0X2RhdGEgKnhkcClcXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMjA1LXtcXG4tLVxcbm5ldC9icGYvdGVzdF9ydW4uYz0yNDE9c3RhdGljIGludCB4ZHBfcmVjdl9mcmFtZXMoc3RydWN0IHhkcF9mcmFtZSAqKmZyYW1lcywgaW50IG5mcmFtZXMsXFxuLS1cXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMjcyLVxcbm5ldC9icGYvdGVzdF9ydW4uYzoyNzM6c3RhdGljIGludCB4ZHBfdGVzdF9ydW5fYmF0Y2goc3RydWN0IHhkcF90ZXN0X2RhdGEgKnhkcCwgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxcbm5ldC9icGYvdGVzdF9ydW4uYy0yNzQtXFx0XFx0XFx0ICAgICAgdTMyIHJlcGVhdClcXG4tLVxcbm5ldC9icGYvdGVzdF9ydW4uYy0zNTktXFxubmV0L2JwZi90ZXN0X3J1bi5jOjM2MDpzdGF0aWMgaW50IGJwZl90ZXN0X3J1bl94ZHBfbGl2ZShzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHN0cnVjdCB4ZHBfYnVmZiAqY3R4LFxcbm5ldC9icGYvdGVzdF9ydW4uYy0zNjEtXFx0XFx0XFx0XFx0IHUzMiByZXBlYXQsIHUzMiBiYXRjaF9zaXplLCB1MzIgKnRpbWUpXFxuLS1cXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMzcwLVxcbm5ldC9icGYvdGVzdF9ydW4uYzozNzE6XFx0cmV0ID0geGRwX3Rlc3RfcnVuX3NldHVwKFxcdTAwMjZ4ZHAsIGN0eCk7XFxubmV0L2JwZi90ZXN0X3J1bi5jLTM3Mi1cXHRpZiAocmV0KVxcbi0tXFxubmV0L2JwZi90ZXN0X3J1bi5jLTM3Ny1cXHRcXHR4ZHAuZnJhbWVfY250ID0gMDtcXG5uZXQvYnBmL3Rlc3RfcnVuLmM6Mzc4OlxcdFxcdHJldCA9IHhkcF90ZXN0X3J1bl9iYXRjaChcXHUwMDI2eGRwLCBwcm9nLCByZXBlYXQgLSB0LmkpO1xcbm5ldC9icGYvdGVzdF9ydW4uYy0zNzktXFx0XFx0aWYgKHVubGlrZWx5KHJldCBcXHUwMDNjIDApKVxcbi0tXFxubmV0L2JwZi90ZXN0X3J1bi5jLTM4My1cXG5uZXQvYnBmL3Rlc3RfcnVuLmM6Mzg0OlxcdHhkcF90ZXN0X3J1bl90ZWFyZG93bihcXHUwMDI2eGRwKTtcXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMzg1LVxcdHJldHVybiByZXQ7XFxuLS1cXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMzg3LVxcbm5ldC9icGYvdGVzdF9ydW4uYzozODg6c3RhdGljIGludCBicGZfdGVzdF9ydW4oc3RydWN0IGJwZl9wcm9nICpwcm9nLCB2b2lkICpjdHgsIHUzMiByZXBlYXQsXFxubmV0L2JwZi90ZXN0X3J1bi5jLTM4OS1cXHRcXHRcXHR1MzIgKnJldHZhbCwgdTMyICp0aW1lLCBib29sIHhkcClcXG4tLVxcbm5ldC9icGYvdGVzdF9ydW4uYz02NjM9c3RhdGljIHZvaWQgKmJwZl90ZXN0X2luaXQoY29uc3QgdW5pb24gYnBmX2F0dHIgKmthdHRyLCB1MzIgdXNlcl9zaXplLFxcbi0tXFxubmV0L2JwZi90ZXN0X3J1bi5jLTY4NC1cXG5uZXQvYnBmL3Rlc3RfcnVuLmM6Njg1OmludCBicGZfcHJvZ190ZXN0X3J1bl90cmFjaW5nKHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcXG5uZXQvYnBmL3Rlc3RfcnVuLmMtNjg2LVxcdFxcdFxcdCAgICAgIGNvbnN0IHVuaW9uIGJwZl9hdHRyICprYXR0cixcXG4tLVxcbm5ldC9icGYvdGVzdF9ydW4uYy03MzgtXFxubmV0L2JwZi90ZXN0X3J1bi5jOjczOTpzdHJ1Y3QgYnBmX3Jhd190cF90ZXN0X3J1bl9pbmZvIHtcXG5uZXQvYnBmL3Rlc3RfcnVuLmMtNzQwLVxcdHN0cnVjdCBicGZfcHJvZyAqcHJvZztcXG4tLVxcbm5ldC9icGYvdGVzdF9ydW4uYz03NDU9c3RhdGljIHZvaWRcXG5uZXQvYnBmL3Rlc3RfcnVuLmM6NzQ2Ol9fYnBmX3Byb2dfdGVzdF9ydW5fcmF3X3RwKHZvaWQgKmRhdGEpXFxubmV0L2JwZi90ZXN0X3J1bi5jLTc0Ny17XFxubmV0L2JwZi90ZXN0X3J1bi5jOjc0ODpcXHRzdHJ1Y3QgYnBmX3Jhd190cF90ZXN0X3J1bl9pbmZvICppbmZvID0gZGF0YTtcXG5uZXQvYnBmL3Rlc3RfcnVuLmMtNzQ5LVxcdHN0cnVjdCBzcmN1X2N0ciBfX3BlcmNwdSAqc2NwID0gTlVMTDtcXG4tLVxcbm5ldC9icGYvdGVzdF9ydW4uYy03ODEtXFxubmV0L2JwZi90ZXN0X3J1bi5jOjc4MjppbnQgYnBmX3Byb2dfdGVzdF9ydW5fcmF3X3RwKHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcXG5uZXQvYnBmL3Rlc3RfcnVuLmMtNzgzLVxcdFxcdFxcdCAgICAgY29uc3QgdW5pb24gYnBmX2F0dHIgKmthdHRyLFxcbi0tXFxubmV0L2JwZi90ZXN0X3J1bi5jLTc4Ny1cXHRfX3UzMiBjdHhfc2l6ZV9pbiA9IGthdHRyLVxcdTAwM2V0ZXN0LmN0eF9zaXplX2luO1xcbm5ldC9icGYvdGVzdF9ydW4uYzo3ODg6XFx0c3RydWN0IGJwZl9yYXdfdHBfdGVzdF9ydW5faW5mbyBpbmZvO1xcbm5ldC9icGYvdGVzdF9ydW4uYy03ODktXFx0aW50IGNwdSA9IGthdHRyLVxcdTAwM2V0ZXN0LmNwdSwgZXJyID0gMDtcXG4tLVxcbm5ldC9icGYvdGVzdF9ydW4uYy04MjMtXFx0aWYgKHByb2ctXFx1MDAzZXNsZWVwYWJsZSkge1xcbm5ldC9icGYvdGVzdF9ydW4uYzo4MjQ6XFx0XFx0X19icGZfcHJvZ190ZXN0X3J1bl9yYXdfdHAoXFx1MDAyNmluZm8pO1xcbm5ldC9icGYvdGVzdF9ydW4uYy04MjUtXFx0fSBlbHNlIHtcXG4tLVxcbm5ldC9icGYvdGVzdF9ydW4uYy04MjgtXFx0XFx0ICAgIGNwdSA9PSBjdXJyZW50X2NwdSkge1xcbm5ldC9icGYvdGVzdF9ydW4uYzo4Mjk6XFx0XFx0XFx0X19icGZfcHJvZ190ZXN0X3J1bl9yYXdfdHAoXFx1MDAyNmluZm8pO1xcbm5ldC9icGYvdGVzdF9ydW4uYy04MzAtXFx0XFx0fSBlbHNlIGlmIChjcHUgXFx1MDAzZT0gbnJfY3B1X2lkcyB8fCAhY3B1X29ubGluZShjcHUpKSB7XFxuLS1cXG5uZXQvYnBmL3Rlc3RfcnVuLmMtODM5LVxcdFxcdFxcdGVyciA9IHNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZShjcHUsXFxubmV0L2JwZi90ZXN0X3J1bi5jOjg0MDpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgX19icGZfcHJvZ190ZXN0X3J1bl9yYXdfdHAsXFxubmV0L2JwZi90ZXN0X3J1bi5jLTg0MS1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgXFx1MDAyNmluZm8sIDEpO1xcbi0tXFxubmV0L2JwZi90ZXN0X3J1bi5jPTEwMjk9c3RhdGljIHN0cnVjdCBwcm90byBicGZfZHVtbXlfcHJvdG8gPSB7XFxuLS1cXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTAzNC1cXG5uZXQvYnBmL3Rlc3RfcnVuLmM6MTAzNTppbnQgYnBmX3Byb2dfdGVzdF9ydW5fc2tiKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgY29uc3QgdW5pb24gYnBmX2F0dHIgKmthdHRyLFxcbm5ldC9icGYvdGVzdF9ydW4uYy0xMDM2LVxcdFxcdFxcdCAgdW5pb24gYnBmX2F0dHIgX191c2VyICp1YXR0cilcXG4tLVxcbm5ldC9icGYvdGVzdF9ydW4uYy0xMDg3LVxcdFxcdGlmIChjdHgtXFx1MDAzZWRhdGFfZW5kKSB7XFxubmV0L2JwZi90ZXN0X3J1bi5jOjEwODg6XFx0XFx0XFx0LyogTm9uLWxpbmVhciBMV1QgdGVzdF9ydW4gaXMgdW5zdXBwb3J0ZWQgZm9yIG5vdy4gKi9cXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTA4OS1cXHRcXHRcXHRpZiAoaXNfbHd0KSB7XFxuLS1cXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTIyNC1cXG5uZXQvYnBmL3Rlc3RfcnVuLmM6MTIyNTpcXHRyZXQgPSBicGZfdGVzdF9ydW4ocHJvZywgc2tiLCByZXBlYXQsIFxcdTAwMjZyZXR2YWwsIFxcdTAwMjZkdXJhdGlvbiwgZmFsc2UpO1xcbm5ldC9icGYvdGVzdF9ydW4uYy0xMjI2LVxcdGlmIChyZXQpXFxuLS1cXG5uZXQvYnBmL3Rlc3RfcnVuLmM9MTMyMD1zdGF0aWMgdm9pZCB4ZHBfY29udmVydF9idWZmX3RvX21kKHN0cnVjdCB4ZHBfYnVmZiAqeGRwLCBzdHJ1Y3QgeGRwX21kICp4ZHBfbWQpXFxuLS1cXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTMzMS1cXG5uZXQvYnBmL3Rlc3RfcnVuLmM6MTMzMjppbnQgYnBmX3Byb2dfdGVzdF9ydW5feGRwKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgY29uc3QgdW5pb24gYnBmX2F0dHIgKmthdHRyLFxcbm5ldC9icGYvdGVzdF9ydW4uYy0xMzMzLVxcdFxcdFxcdCAgdW5pb24gYnBmX2F0dHIgX191c2VyICp1YXR0cilcXG4tLVxcbm5ldC9icGYvdGVzdF9ydW4uYy0xNDYyLVxcdGlmIChkb19saXZlKVxcbm5ldC9icGYvdGVzdF9ydW4uYzoxNDYzOlxcdFxcdHJldCA9IGJwZl90ZXN0X3J1bl94ZHBfbGl2ZShwcm9nLCBcXHUwMDI2eGRwLCByZXBlYXQsIGJhdGNoX3NpemUsIFxcdTAwMjZkdXJhdGlvbik7XFxubmV0L2JwZi90ZXN0X3J1bi5jLTE0NjQtXFx0ZWxzZVxcbm5ldC9icGYvdGVzdF9ydW4uYzoxNDY1OlxcdFxcdHJldCA9IGJwZl90ZXN0X3J1bihwcm9nLCBcXHUwMDI2eGRwLCByZXBlYXQsIFxcdTAwMjZyZXR2YWwsIFxcdTAwMjZkdXJhdGlvbiwgdHJ1ZSk7XFxubmV0L2JwZi90ZXN0X3J1bi5jLTE0NjYtb3V0X3B1dF9kZXY6XFxuLS1cXG5uZXQvYnBmL3Rlc3RfcnVuLmM9MTQ5ND1zdGF0aWMgaW50IHZlcmlmeV91c2VyX2JwZl9mbG93X2tleXMoc3RydWN0IGJwZl9mbG93X2tleXMgKmN0eClcXG4tLVxcbm5ldC9icGYvdGVzdF9ydW4uYy0xNTA4LVxcbm5ldC9icGYvdGVzdF9ydW4uYzoxNTA5OmludCBicGZfcHJvZ190ZXN0X3J1bl9mbG93X2Rpc3NlY3RvcihzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXFxubmV0L2JwZi90ZXN0X3J1bi5jLTE1MTAtXFx0XFx0XFx0XFx0ICAgICBjb25zdCB1bmlvbiBicGZfYXR0ciAqa2F0dHIsXFxuLS1cXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTU3Ny1cXG5uZXQvYnBmL3Rlc3RfcnVuLmM6MTU3ODppbnQgYnBmX3Byb2dfdGVzdF9ydW5fc2tfbG9va3VwKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgY29uc3QgdW5pb24gYnBmX2F0dHIgKmthdHRyLFxcbm5ldC9icGYvdGVzdF9ydW4uYy0xNTc5LVxcdFxcdFxcdFxcdHVuaW9uIGJwZl9hdHRyIF9fdXNlciAqdWF0dHIpXFxuLS1cXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTY3Ny1cXG5uZXQvYnBmL3Rlc3RfcnVuLmM6MTY3ODppbnQgYnBmX3Byb2dfdGVzdF9ydW5fc3lzY2FsbChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXFxubmV0L2JwZi90ZXN0X3J1bi5jLTE2NzktXFx0XFx0XFx0ICAgICAgY29uc3QgdW5pb24gYnBmX2F0dHIgKmthdHRyLFxcbi0tXFxubmV0L2JwZi90ZXN0X3J1bi5jPTE3NjQ9c3RhdGljIF9fYmUxNiBuZnByb3RvX2V0aChpbnQgbmZwcm90bylcXG4tLVxcbm5ldC9icGYvdGVzdF9ydW4uYy0xNzc1LVxcbm5ldC9icGYvdGVzdF9ydW4uYzoxNzc2OmludCBicGZfcHJvZ190ZXN0X3J1bl9uZihzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXFxubmV0L2JwZi90ZXN0X3J1bi5jLTE3NzctXFx0XFx0XFx0IGNvbnN0IHVuaW9uIGJwZl9hdHRyICprYXR0cixcXG4tLVxcbm5ldC9icGYvdGVzdF9ydW4uYy0xODYzLVxcbm5ldC9icGYvdGVzdF9ydW4uYzoxODY0OlxcdHJldCA9IGJwZl90ZXN0X3J1bihwcm9nLCBcXHUwMDI2Y3R4LCByZXBlYXQsIFxcdTAwMjZyZXR2YWwsIFxcdTAwMjZkdXJhdGlvbiwgZmFsc2UpO1xcbm5ldC9icGYvdGVzdF9ydW4uYy0xODY1LVxcdGlmIChyZXQpXFxuLS1cXG5uZXQvYnBmL3Rlc3RfcnVuLmM9MTg4Nj1CVEZfSUQoZnVuYywgYnBmX2tmdW5jX2NhbGxfbWVtYl9yZWxlYXNlX2R0b3IpXFxubmV0L2JwZi90ZXN0X3J1bi5jLTE4ODctXFxubmV0L2JwZi90ZXN0X3J1bi5jOjE4ODg6c3RhdGljIGludCBfX2luaXQgYnBmX3Byb2dfdGVzdF9ydW5faW5pdCh2b2lkKVxcbm5ldC9icGYvdGVzdF9ydW4uYy0xODg5LXtcXG4tLVxcbm5ldC9icGYvdGVzdF9ydW4uYy0xOTA5LX1cXG5uZXQvYnBmL3Rlc3RfcnVuLmM6MTkxMDpsYXRlX2luaXRjYWxsKGJwZl9wcm9nX3Rlc3RfcnVuX2luaXQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNjowMDo1NS44NDY1NzIwNDlaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjk5ODkzMTYwNTE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgdGhlIENvbmZpZ3VyYXRpb24gZm9yIGBicGZfcHJvZ190ZXN0X3J1bl9za19sb29rdXBgKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucyB0byBnZXQgYGJwZl9wcm9nX3Rlc3RfcnVuX3NrX2xvb2t1cGAgd29ya2luZy4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGl2ZSBpbnRvIHRoZSBrZXJuZWwgYnVpbGQgc3lzdGVtIGFuZCBzZWUgd2hhdCdzIGNvbnRyb2xsaW5nIGl0cyBpbmNsdXNpb24uIExldCdzIHN0YXJ0IGJ5IGNoZWNraW5nIGBuZXQvYnBmL01ha2VmaWxlYCDigJMgdGhhdCdzIHVzdWFsbHkgd2hlcmUgdGhlc2UgdGhpbmdzIGFyZSBkZWZpbmVkLiBBbmQsIG9mIGNvdXJzZSwgSSBzaG91bGQgYWxzbyBsb29rIGF0IHRoZSByZWxldmFudCBLY29uZmlnIGZpbGVzLiBMaWtlbHkgY2FuZGlkYXRlcyBhcmUgYGtlcm5lbC9icGYvS2NvbmZpZ2Agb3IgZXZlbiBgbmV0L0tjb25maWdgLCB0aG91Z2ggaXQgY291bGQgYmUgdHVja2VkIGF3YXkgZWxzZXdoZXJlLlxuXG5SaWdodCwgYG5ldC9icGYvTWFrZWZpbGVgLi4uIEFoYSEgVGhlcmUgaXQgaXM6IGBvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpIDo9IHRlc3RfcnVuLm9gLiBTbywgdGhlIHByZXNlbmNlIG9mIGB0ZXN0X3J1bi5vYCwgd2hpY2ggcHJlc3VtYWJseSBjb250YWlucyB0aGlzIHRlc3QgZnVuY3Rpb24sIGlzIGRlcGVuZGVudCBvbiBgQ09ORklHX0JQRl9TWVNDQUxMYC4gTm93LCB3aGVyZSBpcyAqdGhhdCogZGVmaW5lZD8gSSBuZWVkIHRvIGZpbmQgd2hlcmUgYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgc2V0LiBHaXZlbiBpdCdzIGEgQlBGLXJlbGF0ZWQgc3lzY2FsbCwgYGluaXQvS2NvbmZpZ2Agb3IgZXZlbiBga2VybmVsL2JwZi9LY29uZmlnYCBhcmUgdGhlIG1vc3QgbG9naWNhbCBwbGFjZXMgdG8gbG9vayBmb3IgaXRzIGRlZmluaXRpb24uIFRpbWUgdG8gY2hlY2sgdGhvc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNjM1LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE2OjA1OjU1LjczOTczNTgyN1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzQ5MDg0NzI1LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlBGX1NZU0NBTExcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5pdC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE2OjA1OjU2LjA4ODgzMDI1MloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2MTAwNzQzMzE4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipGaW5kaW5nIHRoZSBgY29uZmlnIEJQRl9TWVNDQUxMYCBpbiB0aGUgS2VybmVsKipcblxuT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGBCUEZfU1lTQ0FMTGAgd2l0aGluIHRoZSBrZXJuZWwgc291cmNlIGNvZGUuIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGludm9sdmVzIGEgZmV3IHN0cmF0ZWdpZXMsIGRlcGVuZGluZyBvbiBob3cgaW4tZGVwdGggSSBuZWVkIHRvIGJlLlxuXG5GaXJzdCwgYSBxdWljayBhbmQgZGlydHkgYXBwcm9hY2g6IEknZCBwcm9iYWJseSBzdGFydCB3aXRoIGEgYGdyZXBgIG9yIGBhY2tgIChvciB3aGF0ZXZlciBzZWFyY2ggdG9vbCBJIHByZWZlcikgZGlyZWN0bHkgaW4gdGhlIGtlcm5lbCBzb3VyY2UgdHJlZS4gU29tZXRoaW5nIGxpa2UgYGdyZXAgLXIgXCJDT05GSUdfQlBGX1NZU0NBTExcIiAvcGF0aC90by9rZXJuZWwvc291cmNlYCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIFRoaXMgc2hvdWxkIHNob3cgbWUgYWxsIHRoZSBwbGFjZXMgd2hlcmUgdGhpcyBjb25maWd1cmF0aW9uIHN5bWJvbCBpcyB1c2VkLlxuXG5HaXZlbiBteSBsZXZlbCBvZiBleHBlcnRpc2UsIEkgd291bGQgdGhlbiByZWZpbmUgbXkgc2VhcmNoIHVzaW5nIHRvb2xzIGxpa2UgYGtjb25maWdgIG9yIHRoZSBrZXJuZWwgYnVpbGQgc3lzdGVtIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIEtjb25maWcgZmlsZSBmb3IgdGhhdCBvcHRpb24gaXMgc28gSSBjYW4gdW5kZXJzdGFuZCB0aGUgY29udGV4dDogd2hhdCBvdGhlciBvcHRpb25zIGRvZXMgaXQgZGVwZW5kIG9uPyBXaGF0IHBsYXRmb3JtIGlzIGl0IGZvcj9cblxuRnJvbSB0aGVyZSwgaWYgSSBuZWVkIG1vcmUgY29udGV4dCwgSSB3b3VsZCBsb29rIGZvciB0aGUgcmVsYXRlZCBLY29uZmlnIGZpbGUuIFRoaXMgd291bGQgZ2l2ZSBtZSB0aGUgZGVwZW5kZW5jaWVzIGFuZCBoZWxwIG1lIHBpbnBvaW50IHdoZXJlIHRoZSBvcHRpb24gaXMgYWN0dWFsbHkgZGVmaW5lZCBhbmQgdXNlZC4gSSB3b3VsZCBwcm9iYWJseSBmb2N1cyBvbiBgS2NvbmZpZ2AgZmlsZXMgdW5kZXIgdGhlIHJlbGV2YW50IHN1YmRpcmVjdG9yaWVzIChlLmcuLCBgbmV0L2AsIGBrZXJuZWwvYCwgYGFyY2gvKi9gKSBhbmQgbG9vayBmb3IgZGVwZW5kZW5jaWVzLCBkZWZhdWx0IHZhbHVlcywgYW5kIGFueSBkb2N1bWVudGF0aW9uIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3ltYm9sLiBUaGlzIHdpbGwgaGVscCBtZSB0byB1bmRlcnN0YW5kIHRoZSAqd2h5KiBvZiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb24uXG5cblVsdGltYXRlbHksIEkgd2FudCB0byB1bmRlcnN0YW5kIGl0cyBpbXBhY3QgYW5kIHJlbGF0ZWQgaW1wbGljYXRpb25zLiBJJ2QgY29uc2lkZXIgY3Jvc3MtcmVmZXJlbmNpbmcgdGhpcyBpbmZvcm1hdGlvbiB3aXRoIGtlcm5lbCBkb2N1bWVudGF0aW9uLCBtYWlsaW5nIGxpc3RzLCBhbmQgbWF5YmUgZXZlbiBzb3VyY2UgY29kZSBjb21tZW50cyB0byBnZXQgYSBjb21wcmVoZW5zaXZlIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMDc1LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTY6MDY6NTcuMDk2MjY1OTE3WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTU0OTU1MTI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCUEZfU1lTQ0FMTFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL0tjb25maWc9MjU9bWVudSBcXFwiQlBGIHN1YnN5c3RlbVxcXCJcXG5rZXJuZWwvYnBmL0tjb25maWctMjYtXFxua2VybmVsL2JwZi9LY29uZmlnOjI3OmNvbmZpZyBCUEZfU1lTQ0FMTFxcbmtlcm5lbC9icGYvS2NvbmZpZy0yOC1cXHRib29sIFxcXCJFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE2OjA2OjU5LjA1MTIyNjA4NVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1ODQ2ODQ1Mzc0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipFeGFtaW5pbmcgQlBGIEtlcm5lbCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgZm9yIHNvbWUgQlBGLXJlbGF0ZWQga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gTXkgaW5zdGluY3QgdGVsbHMgbWUgdGhhdCB0aGUgYGtlcm5lbC9icGYvS2NvbmZpZ2AgZmlsZSBpcyB0aGUgcGxhY2UgdG8gc3RhcnQsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAyNS4gVGhhdCBzZWN0aW9uIGlzIHVzdWFsbHkgd2hlcmUgdGhleSBkZWZpbmUgdGhlIG1haW4gY29udHJvbHMuIExldCdzIHNlZSBpZiB0aGlzIGh1bmNoIGlzIGNvcnJlY3QsIG9yIGlmIHRoZXJlJ3MgYSBtb3JlIHNwZWNpZmljIEtjb25maWcgZmlsZSBlbHNld2hlcmUuIEl0J3Mgb2Z0ZW4gaGVscGZ1bCB0byBxdWlja2x5IHNjYW4gdGhlIGRlcGVuZGVuY2llcyBkZWZpbmVkIHRvIGdldCBhIHNlbnNlIG9mIHdoYXQgb3RoZXIgZmVhdHVyZXMgbmVlZCB0byBiZSBlbmFibGVkIGJlZm9yZSBJIGNhbiBldmVuIGJlZ2luIHRvIHVzZSB0aGlzLiBJJ2xsIGZvY3VzIG9uIHRoZSBwcmUtcmVxdWlzaXRlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI1NjAsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNjowNzo1Ny41MTk2ODMyNDRaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjY2OTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2JwZi9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDIwOlxcdCMgVXNlZCBieSBhcmNocyB0byB0ZWxsIHRoYXQgdGhleSB3YW50IHRoZSBCUEYgSklUIGNvbXBpbGVyIGVuYWJsZWQgYnlcXG4gIDIxOlxcdCMgZGVmYXVsdCBmb3Iga2VybmVscyB0aGF0IHdlcmUgY29tcGlsZWQgd2l0aCBCUEYgSklUIHN1cHBvcnQuXFxuICAyMjpcXHRjb25maWcgQVJDSF9XQU5UX0RFRkFVTFRfQlBGX0pJVFxcbiAgMjM6XFx0XFx0Ym9vbFxcbiAgMjQ6XFx0XFxuICAyNTpcXHRtZW51IFxcXCJCUEYgc3Vic3lzdGVtXFxcIlxcbiAgMjY6XFx0XFxuICAyNzpcXHRjb25maWcgQlBGX1NZU0NBTExcXG4gIDI4OlxcdFxcdGJvb2wgXFxcIkVuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFxcXCJcXG4gIDI5OlxcdFxcdHNlbGVjdCBCUEZcXG4gIDMwOlxcdFxcdHNlbGVjdCBJUlFfV09SS1xcbiAgMzE6XFx0XFx0c2VsZWN0IE5FRURfVEFTS1NfUkNVXFxuICAzMjpcXHRcXHRzZWxlY3QgVEFTS1NfVFJBQ0VfUkNVXFxuICAzMzpcXHRcXHRzZWxlY3QgQklOQVJZX1BSSU5URlxcbiAgMzQ6XFx0XFx0c2VsZWN0IE5FVF9TT0NLX01TRyBpZiBORVRcXG4gIDM1OlxcdFxcdHNlbGVjdCBORVRfWEdSRVNTIGlmIE5FVFxcbiAgMzY6XFx0XFx0c2VsZWN0IFBBR0VfUE9PTCBpZiBORVRcXG4gIDM3OlxcdFxcdGRlZmF1bHQgblxcbiAgMzg6XFx0XFx0aGVscFxcbiAgMzk6XFx0XFx0ICBFbmFibGUgdGhlIGJwZigpIHN5c3RlbSBjYWxsIHRoYXQgYWxsb3dzIHRvIG1hbmlwdWxhdGUgQlBGIHByb2dyYW1zXFxuICA0MDpcXHRcXHQgIGFuZCBtYXBzIHZpYSBmaWxlIGRlc2NyaXB0b3JzLlxcbiAgNDE6XFx0XFxuICA0MjpcXHRjb25maWcgQlBGX0pJVFxcbiAgNDM6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIEJQRiBKdXN0IEluIFRpbWUgY29tcGlsZXJcXFwiXFxuICA0NDpcXHRcXHRkZXBlbmRzIG9uIEJQRlxcbiAgNDU6XFx0XFx0ZGVwZW5kcyBvbiBIQVZFX0NCUEZfSklUIHx8IEhBVkVfRUJQRl9KSVRcXG4gIDQ2OlxcdFxcdHNlbGVjdCBFWEVDTUVNXFxuICA0NzpcXHRcXHRoZWxwXFxuICA0ODpcXHRcXHQgIEJQRiBwcm9ncmFtcyBhcmUgbm9ybWFsbHkgaGFuZGxlZCBieSBhIEJQRiBpbnRlcnByZXRlci4gVGhpcyBvcHRpb25cXG4gIDQ5OlxcdFxcdCAgYWxsb3dzIHRoZSBrZXJuZWwgdG8gZ2VuZXJhdGUgbmF0aXZlIGNvZGUgd2hlbiBhIHByb2dyYW0gaXMgbG9hZGVkXFxuICA1MDpcXHRcXHQgIGludG8gdGhlIGtlcm5lbC4gVGhpcyB3aWxsIHNpZ25pZmljYW50bHkgc3BlZWQtdXAgcHJvY2Vzc2luZyBvZiBCUEZcXG4gIDUxOlxcdFxcdCAgcHJvZ3JhbXMuXFxuICA1MjpcXHRcXG4gIDUzOlxcdFxcdCAgTm90ZSwgYW4gYWRtaW4gc2hvdWxkIGVuYWJsZSB0aGlzIGZlYXR1cmUgY2hhbmdpbmc6XFxuICA1NDpcXHRcXHQgIC9wcm9jL3N5cy9uZXQvY29yZS9icGZfaml0X2VuYWJsZVxcbiAgNTU6XFx0XFx0ICAvcHJvYy9zeXMvbmV0L2NvcmUvYnBmX2ppdF9oYXJkZW4gICAob3B0aW9uYWwpXFxuICA1NjpcXHRcXHQgIC9wcm9jL3N5cy9uZXQvY29yZS9icGZfaml0X2thbGxzeW1zIChvcHRpb25hbClcXG4gIDU3OlxcdFxcbiAgNTg6XFx0Y29uZmlnIEJQRl9KSVRfQUxXQVlTX09OXFxuICA1OTpcXHRcXHRib29sIFxcXCJQZXJtYW5lbnRseSBlbmFibGUgQlBGIEpJVCBhbmQgcmVtb3ZlIEJQRiBpbnRlcnByZXRlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTY6MDc6NTcuNTE5NzUzNTI0WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQzNDU2NzQyOTA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBhbiBleHBlcnQgaW4gbXkgZmllbGQ6XG5cbioqSW52ZXN0aWdhdGluZyBhIERlcGVuZGVuY3kgaW4gdGhlIEJ1aWxkIFN5c3RlbSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBuZXQvYnBmL3Rlc3RfcnVuLmNgIGFuZCBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgaXQgcmVsaWVzIG9uIGBDT05GSUdfTkVUYC4gTXkgZmlyc3Qgc3RlcCBpcyB0byBkaXZlIGludG8gdGhlIGJ1aWxkIHN5c3RlbSDigJMgc3BlY2lmaWNhbGx5LCB0aGUgYG5ldC9NYWtlZmlsZWAuIEkgd2FudCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYG5ldC9icGYvYCBkaXJlY3RvcnkgaXRzZWxmIGlzIGJ1aWx0LCBiZWNhdXNlIHRoYXQncyBsaWtlbHkgd2hlcmUgdGhlIGRlcGVuZGVuY3kgaW5mb3JtYXRpb24gd2lsbCByZXNpZGUuIEknbSB0aGlua2luZywgYnkgZXhhbWluaW5nIHRoZSBydWxlcyBmb3IgdGhlIGBuZXQvYnBmL2AgZGlyZWN0b3J5LCBJIHNob3VsZCBiZSBhYmxlIHRvIHRyYWNlIGhvdyBgdGVzdF9ydW4uY2AgaXMgY29tcGlsZWQgYW5kIGxpbmtlZC4gVGhhdCBzaG91bGQgcmV2ZWFsIHdoZXRoZXIgYENPTkZJR19ORVRgIGlzIGEgcmVxdWlyZWQgY29uZmlndXJhdGlvbiBvcHRpb24gZm9yIHRoaXMgc3BlY2lmaWMgcGllY2Ugb2YgY29kZS4gSSdtIGV4cGVjdGluZyB0byBmaW5kIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGJhc2VkIG9uIHNvbWUgS2NvbmZpZyBzZXR0aW5nIGluIHRoZSBNYWtlZmlsZSBvciBhIHNpbWlsYXIgbWVjaGFuaXNtLiBJdCdzIHRpbWUgdG8gZGlnIGluIGFuZCBzZWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMzQ3LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNjowODo0MC45NzY1MDA3NloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzEyMzMyODQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L01ha2VmaWxlPTE0PW9iai0kKENPTkZJR19MTEMpXFx0XFx0Kz0gbGxjL1xcbm5ldC9NYWtlZmlsZToxNTpvYmoteVxcdFxcdFxcdFxcdCs9IGV0aGVybmV0LyA4MDIvIHNjaGVkLyBuZXRsaW5rLyBicGYvIGV0aHRvb2wvXFxubmV0L01ha2VmaWxlLTE2LW9iai0kKENPTkZJR19ORVRGSUxURVIpXFx0XFx0Kz0gbmV0ZmlsdGVyL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNjowODo0MS4yODg4Mzk4MDdaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODk2NTc4MDkzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBMaW5lIG9mIElucXVpcnk6IEJQRiBhbmQgc2tfbG9va3VwKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byBob3cgYHNrX2xvb2t1cGAgZnVuY3Rpb25hbGl0eSBpbnRlcmFjdHMgd2l0aCBCUEYgaW4gdGhlIGtlcm5lbC4gTXkgaW5pdGlhbCB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgYG5ldC9gIGlzIGNvbXBpbGVkIGlmIGBDT05GSUdfTkVUPXlgLCB3aGljaCBpcyB0aGUgYmFzZSBjb25kaXRpb24uIEkgdGhlbiBzZWUgaW4gYG5ldC9icGYvTWFrZWZpbGVgIHRoZSBsaW5lOiBgb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSA6PSB0ZXN0X3J1bi5vYCwgd2hpY2ggaXMgZXhwZWN0ZWQuIE5vdywgSSBrbm93IGBza19sb29rdXBgJ3MgcHJvZ3JhbSBvcGVyYXRpb25zIGFyZSBkZWZpbmVkIHdpdGhpbiBgbmV0L2NvcmUvZmlsdGVyLmNgLiBTcGVjaWZpY2FsbHksIEkgYW0gaW50ZXJlc3RlZCBpbiB0aGlzIGxpbmU6IGBjb25zdCBzdHJ1Y3QgYnBmX3Byb2dfb3BzIHNrX2xvb2t1cF9wcm9nX29wcyA9IHsgLnRlc3RfcnVuID0gYnBmX3Byb2dfdGVzdF9ydW5fc2tfbG9va3VwLCB9O2AuIE15IG5leHQgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gZGV0ZXJtaW5lIGlmIGFueSBvdGhlciBjb25maWd1cmF0aW9ucywgbGlrZSBgQ09ORklHX0lORVRgIG9yIGBDT05GSUdfSVBWNmAsIG1pZ2h0IGJlIGluZmx1ZW5jaW5nIHRoaXMgc3BlY2lmaWMgcGF0aCBvciBmdW5jdGlvbmFsaXR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzLiBUaGVyZWZvcmUsIEknbSBnb2luZyB0byBjYXJlZnVsbHkgcmUtZXhhbWluZSBgbmV0L2NvcmUvZmlsdGVyLmNgLCBwYXJ0aWN1bGFybHkgYXJvdW5kIHRoZSBkZWZpbml0aW9uIGFuZCB1c2FnZSBvZiBgc2tfbG9va3VwX3Byb2dfb3BzYCB0byBmdWxseSBncmFzcCBpdHMgaW50ZWdyYXRpb24gYW5kIGFueSBwb3RlbnRpYWwgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYXNwZWN0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM3MDcsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTY6MDg6NTAuMjU0NjI0MzI1WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTM2OTUwOTI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNrX2xvb2t1cF9wcm9nX29wc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9maWx0ZXIuYz0xMjA3Nz1zdGF0aWMgdTMyIHNrX2xvb2t1cF9jb252ZXJ0X2N0eF9hY2Nlc3MoZW51bSBicGZfYWNjZXNzX3R5cGUgdHlwZSxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMTczLVxcbm5ldC9jb3JlL2ZpbHRlci5jOjEyMTc0OmNvbnN0IHN0cnVjdCBicGZfcHJvZ19vcHMgc2tfbG9va3VwX3Byb2dfb3BzID0ge1xcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMTc1LVxcdC50ZXN0X3J1biA9IGJwZl9wcm9nX3Rlc3RfcnVuX3NrX2xvb2t1cCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTY6MDg6NTEuNzkxNTgyMDVaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzY3MTM0MjYzODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBQYWNrZXQgRmlsdGVyaW5nIEtlcm5lbCBDb2RlKipcblxuT2theSwgdGltZSB0byBnZXQgdG8gdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgc3BlY2lmaWNzIG9mIGhvdyB0aGlzIHBhY2tldCBmaWx0ZXJpbmcgbWVjaGFuaXNtIHdvcmtzIGluIHRoZSBrZXJuZWwuIEknbSB0aGlua2luZyBJJ2xsIHN0YXJ0IGJ5IHRha2luZyBhIGxvb2sgYXQgYG5ldC9jb3JlL2ZpbHRlci5jYC4gVGhhdCdzIHVzdWFsbHkgdGhlIHBsYWNlIHRvIHN0YXJ0LiBOb3csIGxldCdzIHNlZSwgYmFzZWQgb24gbXkgcHJldmlvdXMgYW5hbHlzaXMgSSBiZWxpZXZlIHRoZSByZWxldmFudCBjb2RlIGlzIGFyb3VuZCBsaW5lIDEyMTcwLiBJJ2xsIGZvY3VzIG15IGF0dGVudGlvbiBvbiB0aGF0IHNlY3Rpb24gYW5kIHNlZSBpZiBJIGNhbiBwaW5wb2ludCB0aGUgcmVsZXZhbnQgbG9naWMgZm9yIHRoaXMgcGFydGljdWxhciBpc3N1ZS4gSG9wZWZ1bGx5LCB0aGF0IHdpbGwgcmVmcmVzaCBteSBtZW1vcnkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0Mjc0LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTY6MDk6MjguNTA1MDExOTdaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTk4ODEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL2ZpbHRlci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyMTY1LFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMjE2NTpcXHRcXHRcXHQqaW5zbisrID0gQlBGX0xEWF9NRU0oQlBGX1csIHNpLVxcdTAwM2Vkc3RfcmVnLCBzaS1cXHUwMDNlc3JjX3JlZyxcXG4xMjE2NjpcXHRcXHRcXHRcXHRcXHQgICAgICBicGZfdGFyZ2V0X29mZihzdHJ1Y3QgYnBmX3NrX2xvb2t1cF9rZXJuLFxcbjEyMTY3OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgaW5ncmVzc19pZmluZGV4LCA0LCB0YXJnZXRfc2l6ZSkpO1xcbjEyMTY4OlxcdFxcdFxcdGJyZWFrO1xcbjEyMTY5OlxcdFxcdH1cXG4xMjE3MDpcXHRcXG4xMjE3MTpcXHRcXHRyZXR1cm4gaW5zbiAtIGluc25fYnVmO1xcbjEyMTcyOlxcdH1cXG4xMjE3MzpcXHRcXG4xMjE3NDpcXHRjb25zdCBzdHJ1Y3QgYnBmX3Byb2dfb3BzIHNrX2xvb2t1cF9wcm9nX29wcyA9IHtcXG4xMjE3NTpcXHRcXHQudGVzdF9ydW4gPSBicGZfcHJvZ190ZXN0X3J1bl9za19sb29rdXAsXFxuMTIxNzY6XFx0fTtcXG4xMjE3NzpcXHRcXG4xMjE3ODpcXHRjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX29wcyBza19sb29rdXBfdmVyaWZpZXJfb3BzID0ge1xcbjEyMTc5OlxcdFxcdC5nZXRfZnVuY19wcm90b1xcdFxcdD0gc2tfbG9va3VwX2Z1bmNfcHJvdG8sXFxuMTIxODA6XFx0XFx0LmlzX3ZhbGlkX2FjY2Vzc1xcdD0gc2tfbG9va3VwX2lzX3ZhbGlkX2FjY2VzcyxcXG4xMjE4MTpcXHRcXHQuY29udmVydF9jdHhfYWNjZXNzXFx0PSBza19sb29rdXBfY29udmVydF9jdHhfYWNjZXNzLFxcbjEyMTgyOlxcdH07XFxuMTIxODM6XFx0XFxuMTIxODQ6XFx0I2VuZGlmIC8qIENPTkZJR19JTkVUICovXFxuMTIxODU6XFx0XFxuMTIxODY6XFx0REVGSU5FX0JQRl9ESVNQQVRDSEVSKHhkcClcXG4xMjE4NzpcXHRcXG4xMjE4ODpcXHR2b2lkIGJwZl9wcm9nX2NoYW5nZV94ZHAoc3RydWN0IGJwZl9wcm9nICpwcmV2X3Byb2csIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4xMjE4OTpcXHR7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE2OjA5OjI4LjUwNTYxMjY0WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjExMTY3MzA1ODQxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIHRoZSBgQ09ORklHX0lORVRgIEd1YXJkKipcblxuT2theSwgc28gSSd2ZSBzcG90dGVkIHNvbWV0aGluZyBpbnRlcmVzdGluZyBpbiB0aGUgY29kZSwgcmlnaHQgYXJvdW5kIGxpbmUgMTIxODQg4oCTIHRoYXQgYCNlbmRpZiAvKiBDT05GSUdfSU5FVCAqL2AgZGlyZWN0aXZlLiBJbW1lZGlhdGVseSwgbXkgZXhwZXJ0IGJyYWluIGtpY2tzIGluLiBUaGUgZmFjdCB0aGF0IGBza19sb29rdXBfcHJvZ19vcHNgIGlzIGd1YXJkZWQgYnkgYENPTkZJR19JTkVUYCBpcyB0aGUga2V5IHRha2Vhd2F5LiBJdCBtZWFucyB0aGUgYXZhaWxhYmlsaXR5IGFuZCBmdW5jdGlvbiBvZiB0aGlzIGVsZW1lbnQgYXJlIGRlcGVuZGVudCBvbiB0aGF0IGNvbmZpZ3VyYXRpb24gb3B0aW9uLlxuXG5Ob3csIG15IG5leHQgdGhvdWdodCBpcywgd2hlcmUgZG9lcyBgQ09ORklHX0lORVRgIGNvbWUgaW50byBwbGF5IGJlZm9yZSB0aGF0IGAjZW5kaWZgPyBUbyB1bmRlcnN0YW5kIHRoZSBmdWxsIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uLCBJIG5lZWQgdG8gdHJhY2UgYmFjayBhbmQgcGlucG9pbnQgZXhhY3RseSB3aGVyZSBgQ09ORklHX0lORVRgIGlzIGRlZmluZWQgb3IgZXZhbHVhdGVkLiBUaGlzIGNvbnRleHQgaXMgY3J1Y2lhbCB0byBncmFzcGluZyB0aGUgc2l0dWF0aW9ucyB3aGVyZSBgc2tfbG9va3VwX3Byb2dfb3BzYCBpcyBhY3R1YWxseSBhY3RpdmUuIEknbGwgbmVlZCB0byBmb2xsb3cgdGhlIGNvZGUncyBsb2dpYyB0byBmaWd1cmUgb3V0IHRoZSBzY29wZSBhbmQgdGhlIGNvbmRpdGlvbnMgdGhhdCBkZXRlcm1pbmUgd2hldGhlciB0aGlzIHNlY3Rpb24gb2YgY29kZSBpcyB1bHRpbWF0ZWx5IGluY2x1ZGVkIGluIHRoZSBrZXJuZWwgYnVpbGQuIExldCdzIGRpZyBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ5MTgsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE2OjExOjIwLjE3ODY3NDU0NloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzg1NzQ0NjQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIiNpZmRlZiBDT05GSUdfSU5FVHwjaWYgSVNfRU5BQkxFRFxcXFwoQ09ORklHX0lORVRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvZmlsdGVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvZmlsdGVyLmM9MjMxMz1zdGF0aWMgaW50IF9fYnBmX3JlZGlyZWN0X25laWdoX3Y2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0yMzIwLVxcbm5ldC9jb3JlL2ZpbHRlci5jOjIzMjE6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lORVQpXFxubmV0L2NvcmUvZmlsdGVyLmMtMjMyMi1zdGF0aWMgaW50IGJwZl9vdXRfbmVpZ2hfdjQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9NjIwMz1CUEZfQ0FMTF8zKGJwZl9iaW5kLCBzdHJ1Y3QgYnBmX3NvY2tfYWRkcl9rZXJuICosIGN0eCwgc3RydWN0IHNvY2thZGRyICosIGFkZHIsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy02MjA1LXtcXG5uZXQvY29yZS9maWx0ZXIuYzo2MjA2OiNpZmRlZiBDT05GSUdfSU5FVFxcbm5ldC9jb3JlL2ZpbHRlci5jLTYyMDctXFx0c3RydWN0IHNvY2sgKnNrID0gY3R4LVxcdTAwM2VzaztcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTYyODg9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tiX2dldF94ZnJtX3N0YXRlX3Byb3RvID0ge1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNjI5OS1cXG5uZXQvY29yZS9maWx0ZXIuYzo2MzAwOiNpZiBJU19FTkFCTEVEKENPTkZJR19JTkVUKSB8fCBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxcbm5ldC9jb3JlL2ZpbHRlci5jLTYzMDEtc3RhdGljIGludCBicGZfZmliX3NldF9md2RfcGFyYW1zKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz02MzMwPXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqYnBmX2ZpYl92bGFuX2lucHV0X2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNjM0OS1cXG5uZXQvY29yZS9maWx0ZXIuYzo2MzUwOiNpZiBJU19FTkFCTEVEKENPTkZJR19JTkVUKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTYzNTEtc3RhdGljIGludCBicGZfaXB2NF9maWJfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGJwZl9maWJfbG9va3VwICpwYXJhbXMsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz02NjcyPUJQRl9DQUxMXzQoYnBmX3hkcF9maWJfbG9va3VwLCBzdHJ1Y3QgeGRwX2J1ZmYgKiwgY3R4LFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNjY4MS1cXHRzd2l0Y2ggKHBhcmFtcy1cXHUwMDNlZmFtaWx5KSB7XFxubmV0L2NvcmUvZmlsdGVyLmM6NjY4MjojaWYgSVNfRU5BQkxFRChDT05GSUdfSU5FVClcXG5uZXQvY29yZS9maWx0ZXIuYy02NjgzLVxcdGNhc2UgQUZfSU5FVDpcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTY3MDY9QlBGX0NBTExfNChicGZfc2tiX2ZpYl9sb29rdXAsIHN0cnVjdCBza19idWZmICosIHNrYixcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTY3MjUtXFx0c3dpdGNoIChwYXJhbXMtXFx1MDAzZWZhbWlseSkge1xcbm5ldC9jb3JlL2ZpbHRlci5jOjY3MjY6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lORVQpXFxubmV0L2NvcmUvZmlsdGVyLmMtNjcyNy1cXHRjYXNlIEFGX0lORVQ6XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz03MTU3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX2x3dF9zZWc2X2FkanVzdF9zcmhfcHJvdG8gPSB7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy03MTY2LVxcbm5ldC9jb3JlL2ZpbHRlci5jOjcxNjc6I2lmZGVmIENPTkZJR19JTkVUXFxubmV0L2NvcmUvZmlsdGVyLmMtNzE2OC1zdGF0aWMgc3RydWN0IHNvY2sgKnNrX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBicGZfc29ja190dXBsZSAqdHVwbGUsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz04NDY0PXNvY2tfYWRkcl9mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtODQ4Ni1cXHRcXHRyZXR1cm4gXFx1MDAyNmJwZl9ldmVudF9vdXRwdXRfZGF0YV9wcm90bztcXG5uZXQvY29yZS9maWx0ZXIuYzo4NDg3OiNpZmRlZiBDT05GSUdfSU5FVFxcbm5ldC9jb3JlL2ZpbHRlci5jLTg0ODgtXFx0Y2FzZSBCUEZfRlVOQ19za19sb29rdXBfdGNwOlxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9ODU3Mz1jZ19za2JfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTg1OTktI2VuZGlmXFxubmV0L2NvcmUvZmlsdGVyLmM6ODYwMDojaWZkZWYgQ09ORklHX0lORVRcXG5uZXQvY29yZS9maWx0ZXIuYy04NjAxLVxcdGNhc2UgQlBGX0ZVTkNfc2tfbG9va3VwX3RjcDpcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTg2MjI9dGNfY2xzX2FjdF9mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtODcxOC0jZW5kaWZcXG5uZXQvY29yZS9maWx0ZXIuYzo4NzE5OiNpZmRlZiBDT05GSUdfSU5FVFxcbm5ldC9jb3JlL2ZpbHRlci5jLTg3MjAtXFx0Y2FzZSBCUEZfRlVOQ19za19sb29rdXBfdGNwOlxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9ODc1OT14ZHBfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTg3ODctXFx0XFx0cmV0dXJuIFxcdTAwMjZicGZfeGRwX2NoZWNrX210dV9wcm90bztcXG5uZXQvY29yZS9maWx0ZXIuYzo4Nzg4OiNpZmRlZiBDT05GSUdfSU5FVFxcbm5ldC9jb3JlL2ZpbHRlci5jLTg3ODktXFx0Y2FzZSBCUEZfRlVOQ19za19sb29rdXBfdWRwOlxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9ODgzND1zb2NrX29wc19mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtODg2Mi1cXHRcXHRyZXR1cm4gXFx1MDAyNmJwZl9nZXRfbmV0bnNfY29va2llX3NvY2tfb3BzX3Byb3RvO1xcbm5ldC9jb3JlL2ZpbHRlci5jOjg4NjM6I2lmZGVmIENPTkZJR19JTkVUXFxubmV0L2NvcmUvZmlsdGVyLmMtODg2NC1cXHRjYXNlIEJQRl9GVU5DX2xvYWRfaGRyX29wdDpcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTg5MTY9c2tfc2tiX2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy04OTQwLVxcdFxcdHJldHVybiBcXHUwMDI2YnBmX3NrYl9ldmVudF9vdXRwdXRfcHJvdG87XFxubmV0L2NvcmUvZmlsdGVyLmM6ODk0MTojaWZkZWYgQ09ORklHX0lORVRcXG5uZXQvY29yZS9maWx0ZXIuYy04OTQyLVxcdGNhc2UgQlBGX0ZVTkNfc2tfbG9va3VwX3RjcDpcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTExNjU2PWludCBza19nZXRfZmlsdGVyKHN0cnVjdCBzb2NrICpzaywgc29ja3B0cl90IG9wdHZhbCwgdW5zaWduZWQgaW50IGxlbilcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTExNjk4LVxcbm5ldC9jb3JlL2ZpbHRlci5jOjExNjk5OiNpZmRlZiBDT05GSUdfSU5FVFxcbm5ldC9jb3JlL2ZpbHRlci5jLTExNzAwLXN0YXRpYyB2b2lkIGJwZl9pbml0X3JldXNlcG9ydF9rZXJuKHN0cnVjdCBza19yZXVzZXBvcnRfa2VybiAqcmV1c2Vfa2VybixcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTEyMjM1PUJQRl9DQUxMXzEoYnBmX3NrY190b190Y3BfdGltZXdhaXRfc29jaywgc3RydWN0IHNvY2sgKiwgc2spXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMjI0Mi1cXG5uZXQvY29yZS9maWx0ZXIuYzoxMjI0MzojaWZkZWYgQ09ORklHX0lORVRcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjI0NC1cXHRpZiAoc2sgXFx1MDAyNlxcdTAwMjYgc2stXFx1MDAzZXNrX3Byb3QgPT0gXFx1MDAyNnRjcF9wcm90IFxcdTAwMjZcXHUwMDI2IHNrLVxcdTAwM2Vza19zdGF0ZSA9PSBUQ1BfVElNRV9XQUlUKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9MTIyNjQ9QlBGX0NBTExfMShicGZfc2tjX3RvX3RjcF9yZXF1ZXN0X3NvY2ssIHN0cnVjdCBzb2NrICosIHNrKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMjY1LXtcXG5uZXQvY29yZS9maWx0ZXIuYzoxMjI2NjojaWZkZWYgQ09ORklHX0lORVRcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjI2Ny1cXHRpZiAoc2sgXFx1MDAyNlxcdTAwMjYgc2stXFx1MDAzZXNrX3Byb3QgPT0gXFx1MDAyNnRjcF9wcm90IFxcdTAwMjZcXHUwMDI2IHNrLVxcdTAwM2Vza19zdGF0ZSA9PSBUQ1BfTkVXX1NZTl9SRUNWKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9MTI3MzQ9X19icGZfa2Z1bmMgaW50IGJwZl9pY21wX3NlbmQoc3RydWN0IF9fc2tfYnVmZiAqc2tiX2N0eCwgaW50IHR5cGUsIGludCBjb2RlKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTI3NDctXFx0c3dpdGNoIChza2ItXFx1MDAzZXByb3RvY29sKSB7XFxubmV0L2NvcmUvZmlsdGVyLmM6MTI3NDg6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lORVQpXFxubmV0L2NvcmUvZmlsdGVyLmMtMTI3NDktXFx0Y2FzZSBodG9ucyhFVEhfUF9JUCk6IHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTY6MTE6MjAuNTY0NDIzNDdaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDg0MDgzMDkzOTc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgQlBGIFRlc3RpbmcgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYGJwZl9wcm9nX3Rlc3RfcnVuYCBpbnRlcmFjdHMgd2l0aCBgYnBmX3Byb2dfdGVzdF9ydW5fc2tfbG9va3VwYC4gTXkgZ3V0IHRlbGxzIG1lIHRoYXQgYGJwZl9wcm9nX3Rlc3RfcnVuYCBpcyB0aGUgZ2VuZXJhbCBlbnRyeSBwb2ludCBmb3IgcnVubmluZyBCUEYgcHJvZ3JhbXMgaW4gYSB0ZXN0IGNvbnRleHQsIGFuZCB0aGF0IGBicGZfcHJvZ190ZXN0X3J1bl9za19sb29rdXBgIGlzIGxpa2VseSBhIHNwZWNpYWxpemVkIGZ1bmN0aW9uIGZvciB0ZXN0aW5nIHByb2dyYW1zIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIHNvY2tldCBsb29rdXBzIG9yIGludGVyYWN0aW9ucyB3aXRoIHRoZSBuZXR3b3JrIHN0YWNrLiBJdCdzIGEgY2xhc3NpYyBkaXNwYXRjaCBwYXR0ZXJuLCBsaWtlbHkgdXNpbmcgc29tZSBraW5kIG9mIGludGVybmFsIHN3aXRjaCBvciBmdW5jdGlvbiBwb2ludGVyIHRhYmxlLlxuXG5UaGVyZWZvcmUsIGxldCBtZSBuYXZpZ2F0ZSB0byBga2VybmVsL2JwZi9zeXNjYWxsLmNgIGFuZCBkaWcgaW50byB0aGUgc291cmNlLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHdoZXJlIGBicGZfcHJvZ190ZXN0X3J1bmAgaXMgZGVmaW5lZCBhbmQgaG93IGl0IGNhbGxzIG91dCB0byBvdGhlciBmdW5jdGlvbnMuIEkgZXhwZWN0IHRvIGZpbmQgc29tZSBsb2dpYyB0aGF0IGRldGVybWluZXMgKndoaWNoKiBzcGVjaWZpYyBgYnBmX3Byb2dfdGVzdF9ydW5fKmAgZnVuY3Rpb24gdG8gY2FsbCwgYmFzZWQgb24gdGhlIHR5cGUgb2YgQlBGIHByb2dyYW0gb3IgdGhlIGFyZ3VtZW50cyBwYXNzZWQgdG8gdGhlIHN5c3RlbSBjYWxsLiBUaGlzIGlzIHByb2JhYmx5IGEgcG9pbnRlciB0byB0aGUgcmlnaHQgZnVuY3Rpb25hbGl0eSwgb3IgcGVyaGFwcyBhbiBlbnVtLiBJdCdzIGEgY29tbW9uIHBhdHRlcm4gdG8ga2VlcCB0aGUgZ2VuZXJhbCB0ZXN0IGZ1bmN0aW9uYWxpdHkgc2VwYXJhdGUgYW5kIGhhbmRsZSB0aGUgc3BlY2lmaWNzIGluIGRlZGljYXRlZCByb3V0aW5lcy4gVGhpcyBpcyBob3cgdGhleSBrZWVwIHRoaW5ncyBjbGVhbi4gTXkgaG9wZSBpcyB0byBzZWUgdGhlIGV4YWN0IGRlY2lzaW9uLW1ha2luZyBwcm9jZXNzIGZvciB0aGUgZGlzcGF0Y2g7IHRoZSBkYXRhIHN0cnVjdHVyZXMgdGhhdCBpbmZsdWVuY2UgdGhhdCBkZWNpc2lvbiBhcmUga2V5LiBJIGFudGljaXBhdGUgdGhlcmUgd2lsbCBiZSBhIGNhbGwgY2hhaW4gdG8gcmVzb2x2ZSBhZnRlciBJIGdldCB0aGVyZS4gTGV0J3Mgc2VlIHdoYXQncyBhY3R1YWxseSB1bmRlciB0aGUgaG9vZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcyMjUsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNjoxOToyNC42NDc1MjA4MThaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMzNjEwMjQzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfcHJvZ190ZXN0X3J1blwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL3N5c2NhbGwuYz00NzE4PXN0YXRpYyBpbnQgYnBmX3Byb2dfcXVlcnkoY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy00NzgxLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjQ3ODI6c3RhdGljIGludCBicGZfcHJvZ190ZXN0X3J1bihjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0cixcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy00NzgzLVxcdFxcdFxcdCAgICAgdW5pb24gYnBmX2F0dHIgX191c2VyICp1YXR0cilcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTYzMDM9c3RhdGljIGludCBfX3N5c19icGYoZW51bSBicGZfY21kIGNtZCwgYnBmcHRyX3QgdWF0dHIsIHVuc2lnbmVkIGludCBzaXplLFxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjM4NC1cXHRjYXNlIEJQRl9QUk9HX1RFU1RfUlVOOlxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjYzODU6XFx0XFx0ZXJyID0gYnBmX3Byb2dfdGVzdF9ydW4oXFx1MDAyNmF0dHIsIHVhdHRyLnVzZXIpO1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYzODYtXFx0XFx0YnJlYWs7XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz02NjUwPWNvbnN0IHN0cnVjdCBicGZfcHJvZ19vcHMgYnBmX3N5c2NhbGxfcHJvZ19vcHMgPSB7XFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NjY1MTpcXHQudGVzdF9ydW4gPSBicGZfcHJvZ190ZXN0X3J1bl9zeXNjYWxsLFxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTY2NTItfTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTY6MTk6MjQuOTgzNjMwMDI3WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMxMjczMDk5NDgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSdtIGdvaW5nIHRvIHRha2UgYSBsb29rIGF0IHRoZSBgYnBmX3Byb2dfdGVzdF9ydW5gIGZ1bmN0aW9uLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBvcGVyYXRpb24gaW4gdGhlIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AgZmlsZS4gSSdtIGZvY3VzaW5nIG9uIGxpbmVzIDQ3ODIgdGhyb3VnaCA0ODEwLiBUaGlzIHNlY3Rpb24gaXMga2V5IHRvIGNvbXByZWhlbmRpbmcgdGhlIGV4ZWN1dGlvbiBmbG93IG9yIGNyaXRpY2FsIGFzcGVjdHMgb2YgdGhlIHRlc3RpbmcgZW52aXJvbm1lbnQgZm9yIEJQRiBwcm9ncmFtcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGNvZGUgaXMgZG9pbmcsIGxpa2VseSBob3cgaXQncyBzZXR0aW5nIHVwIHRoZSB0ZXN0aW5nIGVudmlyb25tZW50IG9yIGNoZWNraW5nIHRoZSBwcm9ncmFtIGV4ZWN1dGlvbi4gVGhpcyBzaG91bGQgaWxsdW1pbmF0ZSBob3cgdGhlIEJQRiBwcm9ncmFtcyBpbnRlcmFjdCB3aXRoIHRoZSBrZXJuZWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3OTc2LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTY6MTk6NTYuMjU2NzMyNjc5WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0NzI2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvYnBmL3N5c2NhbGwuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0NzgyLFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI0NzgyOlxcdHN0YXRpYyBpbnQgYnBmX3Byb2dfdGVzdF9ydW4oY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXFxuNDc4MzpcXHRcXHRcXHRcXHQgICAgIHVuaW9uIGJwZl9hdHRyIF9fdXNlciAqdWF0dHIpXFxuNDc4NDpcXHR7XFxuNDc4NTpcXHRcXHRzdHJ1Y3QgYnBmX3Byb2cgKnByb2c7XFxuNDc4NjpcXHRcXHRpbnQgcmV0ID0gLUVOT1RTVVBQO1xcbjQ3ODc6XFx0XFxuNDc4ODpcXHRcXHRpZiAoQ0hFQ0tfQVRUUihCUEZfUFJPR19URVNUX1JVTikpXFxuNDc4OTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG40NzkwOlxcdFxcbjQ3OTE6XFx0XFx0aWYgKChhdHRyLVxcdTAwM2V0ZXN0LmN0eF9zaXplX2luIFxcdTAwMjZcXHUwMDI2ICFhdHRyLVxcdTAwM2V0ZXN0LmN0eF9pbikgfHxcXG40NzkyOlxcdFxcdCAgICAoIWF0dHItXFx1MDAzZXRlc3QuY3R4X3NpemVfaW4gXFx1MDAyNlxcdTAwMjYgYXR0ci1cXHUwMDNldGVzdC5jdHhfaW4pKVxcbjQ3OTM6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuNDc5NDpcXHRcXG40Nzk1OlxcdFxcdGlmICgoYXR0ci1cXHUwMDNldGVzdC5jdHhfc2l6ZV9vdXQgXFx1MDAyNlxcdTAwMjYgIWF0dHItXFx1MDAzZXRlc3QuY3R4X291dCkgfHxcXG40Nzk2OlxcdFxcdCAgICAoIWF0dHItXFx1MDAzZXRlc3QuY3R4X3NpemVfb3V0IFxcdTAwMjZcXHUwMDI2IGF0dHItXFx1MDAzZXRlc3QuY3R4X291dCkpXFxuNDc5NzpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG40Nzk4OlxcdFxcbjQ3OTk6XFx0XFx0cHJvZyA9IGJwZl9wcm9nX2dldChhdHRyLVxcdTAwM2V0ZXN0LnByb2dfZmQpO1xcbjQ4MDA6XFx0XFx0aWYgKElTX0VSUihwcm9nKSlcXG40ODAxOlxcdFxcdFxcdHJldHVybiBQVFJfRVJSKHByb2cpO1xcbjQ4MDI6XFx0XFxuNDgwMzpcXHRcXHRpZiAocHJvZy1cXHUwMDNlYXV4LVxcdTAwM2VvcHMtXFx1MDAzZXRlc3RfcnVuKVxcbjQ4MDQ6XFx0XFx0XFx0cmV0ID0gcHJvZy1cXHUwMDNlYXV4LVxcdTAwM2VvcHMtXFx1MDAzZXRlc3RfcnVuKHByb2csIGF0dHIsIHVhdHRyKTtcXG40ODA1OlxcdFxcbjQ4MDY6XFx0XFx0YnBmX3Byb2dfcHV0KHByb2cpO1xcbjQ4MDc6XFx0XFx0cmV0dXJuIHJldDtcXG40ODA4OlxcdH1cXG40ODA5OlxcdFxcbjQ4MTA6XFx0I2RlZmluZSBCUEZfT0JKX0dFVF9ORVhUX0lEX0xBU1RfRklFTEQgbmV4dF9pZFxcbjQ4MTE6XFx0XFxuNDgxMjpcXHRzdGF0aWMgaW50IGJwZl9vYmpfZ2V0X25leHRfaWQoY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXFxuNDgxMzpcXHRcXHRcXHRcXHQgICAgICAgdW5pb24gYnBmX2F0dHIgX191c2VyICp1YXR0cixcXG40ODE0OlxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgaWRyICppZHIsXFxuNDgxNTpcXHRcXHRcXHRcXHQgICAgICAgc3BpbmxvY2tfdCAqbG9jaylcXG40ODE2OlxcdHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTY6MTk6NTYuMjU3MDgyNDQ5WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM4OTEwOTA2ODEzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgYEJQRl9QUk9HX1RZUEVfU0tfTE9PS1VQYCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGhvdyBpdCBpbXBhY3RzIGBCUEZfUFJPR19UWVBFX1NLX0xPT0tVUGAuIFdoZW4gYSBCUEYgcHJvZ3JhbSBvZiB0aGF0IHR5cGUgaXMgaW52b2tlZCB3aXRoIGBCUEZfUFJPR19URVNUX1JVTmAgb3IgYEJQRl9QUk9HX1JVTmAgdXNpbmcgdGhlIGBicGYoKWAgc3lzY2FsbCwgdGhlIGBicGZfcHJvZ190ZXN0X3J1bl9za19sb29rdXBgIGZ1bmN0aW9uIGdldHMgZXhlY3V0ZWQuIEkga25vdyB0aGlzIGJlY2F1c2UgdGhlIGNvZGUgZmxvdyB0ZWxscyBtZSB0aGF0LiBHb29kLCB0aGF0IGZ1bmN0aW9uIGlzIGV4cG9ydGVkLCBpdCdzIG5vdCBzdGF0aWMsIHdoaWNoIG1lYW5zIHVzZXJzcGFjZSBjYW4gZGlyZWN0bHkgY2FsbCBpdCB2aWEgdGhlIGBCUEZfUFJPR19URVNUX1JVTmAgY29tbWFuZC5cblxuTm93LCBsZXQncyBsb29rIGF0IHdoYXQncyBhY3R1YWxseSBjaGFuZ2VkLiBUaGlzIHBhdGNoIHNlZW1zIHRvIGFmZmVjdCBob3cgUkNVIHVubG9ja2luZyB3b3JrcyBpbiBgYnBmX3Byb2dfdGVzdF9ydW5fc2tfbG9va3VwYCwgYW5kIEkgbmVlZCB0byBiZSAqdmVyeSogcHJlY2lzZSBoZXJlLiBJdCBsb29rcyBsaWtlIHRoZSBmaXggZW5zdXJlcyBgY3R4LnNlbGVjdGVkX3NrYCBpc24ndCBhY2Nlc3NlZCBvdXRzaWRlIGFuIFJDVSByZWFkIGNyaXRpY2FsIHNlY3Rpb24sIG9yIGl0J3MgZml4aW5nIHNvbWV0aGluZyByZWxhdGVkIHRvIGBzb2NrX2dlbl9jb29raWVgIGFuZCBgLUVPUE5PVFNVUFBgIGhhbmRsaW5nIGluIHJlbGF0aW9uIHRvIHRlc3QgdGltZXJzLiBUaGF0J3MgYSBjcml0aWNhbCBhcmVhLCBhZmZlY3RpbmcgY29yZSBuZXR3b3JraW5nIGFuZCBCUEYgbG9naWMuIEZ1cnRoZXJtb3JlLCBzaW5jZSBpdCdzIHJlYWNoYWJsZSB2aWEgYGJwZigpYCB3aXRoIGBCUEZfUFJPR19URVNUX1JVTmAgaW4gUUVNVSwgdGhpcyBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyBJIHdhbnQgdG8gZnV6ei4gKipgV29ydGhGdXp6aW5nPXRydWVgKiouXG5cbkFscmlnaHQsIG1vdmluZyBvbiwgbGV0J3MgZG91YmxlLWNoZWNrIHRoZSBlbnRyeSBwb2ludHMuIGBicGZfcHJvZ190ZXN0X3J1bl9za19sb29rdXBgIGlzIGEgbm9uLXN0YXRpYyBlbnRyeSBwb2ludCB0aGF0J3MgY2FsbGVkIHRocm91Z2ggYSBmdW5jdGlvbiBwb2ludGVyLCBgb3BzLVx1MDAzZXRlc3RfcnVuYCB3aXRoaW4gYGJwZl9wcm9nX3Rlc3RfcnVuYC4gR29vZC4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgaWYgYW55IG90aGVyIHN5bWJvbHMgd2VyZSB0b3VjaGVkIGJ5IHRoaXMgcGF0Y2guIExvb2tzIGxpa2UgYGJwZl9wcm9nX3Rlc3RfcnVuX3NrX2xvb2t1cGAgaW4gYG5ldC9icGYvdGVzdF9ydW4uY2AgaXMgdGhlIG9ubHkgc3ltYm9sIGFmZmVjdGVkIGhlcmUuXG5cbkZpbmFsbHksIEkgbmVlZCB0byB2ZXJpZnkgdGhlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzLiBJIGtub3cgSSdsbCBuZWVkIGBCUEZfU1lTQ0FMTGAgKGluIGBrZXJuZWwvYnBmL0tjb25maWdgLCBidWlsZHMgYG5ldC9icGYvdGVzdF9ydW4ub2ApLCBgTkVUYCAoaW4gYG5ldC9NYWtlZmlsZWAsIGVuYWJsZXMgdGhlIG5ldHdvcmsgc3Vic3lzdGVtKSwgYW5kIGBJTkVUYCAoaW4gYG5ldC9jb3JlL2ZpbHRlci5jYCwgd2hpY2ggZ3VhcmRzIGBza19sb29rdXBfcHJvZ19vcHNgKS4gTGV0IG1lIGp1c3QgY29uZmlybSB0aGVzZSBjb25maWd1cmF0aW9ucy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGJvdGggYENPTkZJR19JTkVUYCBhbmQgYENPTkZJR19CUEZfU1lTQ0FMTGAgYW5kIGBDT05GSUdfTkVUYCBhcmUgZW5hYmxlZC4gSSBhbHNvIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYENPTkZJR19JTkVUYCBkZXBlbmRzIG9uIGBDT05GSUdfTkVUYC4gTGV0IG1lIHNlYXJjaCBgY29uZmlnIElORVRgIGluIGBuZXQvaXB2NC9LY29uZmlnYCB0byBiZSBzdXJlLiBBbHJpZ2h0LCBJIHRoaW5rIEkndmUgZ290IHRoaXMgZmlndXJlZCBvdXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NzU1LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTUyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTY6MjY6MjUuMzY2MTUzNzExWiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMzY2MjYzNDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElORVRcXFxcYlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9LY29uZmlnPTk5PWNvbmZpZyBORVRfSEFORFNIQUtFX0tVTklUX1RFU1RcXG4tLVxcbm5ldC9LY29uZmlnLTExMy1cXG5uZXQvS2NvbmZpZzoxMTQ6Y29uZmlnIElORVRcXG5uZXQvS2NvbmZpZy0xMTUtXFx0Ym9vbCBcXFwiVENQL0lQIG5ldHdvcmtpbmdcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE2OjI2OjI1LjcwMjc4ODY2N1oiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NDEyNjAwMzA1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBhc3BlY3QgYmV0dGVyLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byB6ZXJvIGluIG9uIHRoZSBgbmV0L0tjb25maWdgIGZpbGUuIEdpdmVuIHRoZSBjb250ZXh0LCBJJ20gZ29pbmcgdG8gc3RhcnQgYXJvdW5kIGxpbmUgMTE0LiBUaGF0J3MgdXN1YWxseSB3aGVyZSB0aGUgbWVhdCBvZiBhIHBhcnRpY3VsYXIgZmVhdHVyZSBvciBvcHRpb24gc3RhcnRzIHRvIGdldCBkZWZpbmVkIHdpdGhpbiB0aGUgbmV0d29yayBzdWJzeXN0ZW0uIEl0J3MgYSBnb29kIGJldCBJJ2xsIGZpbmQgdGhlIHJlbGV2YW50IGBjb25maWdgIG9wdGlvbnMsIGRlcGVuZGVuY2llcywgYW5kIGhlbHAgdGV4dCB0aGVyZS4gVGltZSB0byBzZWUgd2hhdCBraW5kIG9mIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIGFyZSBkZWZpbmVkLCBpZiB0aGV5J3JlIHJlbGV2YW50LCBhbmQgaG9wZWZ1bGx5IHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBpbnZvbHZlZC4gTGV0J3Mgc2VlIHdoYXQgYG5ldC9LY29uZmlnYCByZXZlYWxzLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMDM0LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTY6Mjc6MDkuODI4Nzk0NTg2WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxNzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDExMDpcXHRcXG4gMTExOlxcdFxcdCAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gS1VuaXQgYW5kIHVuaXQgdGVzdHMgaW4gZ2VuZXJhbCwgcmVmZXJcXG4gMTEyOlxcdFxcdCAgdG8gdGhlIEtVbml0IGRvY3VtZW50YXRpb24gaW4gRG9jdW1lbnRhdGlvbi9kZXYtdG9vbHMva3VuaXQvLlxcbiAxMTM6XFx0XFxuIDExNDpcXHRjb25maWcgSU5FVFxcbiAxMTU6XFx0XFx0Ym9vbCBcXFwiVENQL0lQIG5ldHdvcmtpbmdcXFwiXFxuIDExNjpcXHRcXHRoZWxwXFxuIDExNzpcXHRcXHQgIFRoZXNlIGFyZSB0aGUgcHJvdG9jb2xzIHVzZWQgb24gdGhlIEludGVybmV0IGFuZCBvbiBtb3N0IGxvY2FsXFxuIDExODpcXHRcXHQgIEV0aGVybmV0cy4gSXQgaXMgaGlnaGx5IHJlY29tbWVuZGVkIHRvIHNheSBZIGhlcmUgKHRoaXMgd2lsbCBlbmxhcmdlXFxuIDExOTpcXHRcXHQgIHlvdXIga2VybmVsIGJ5IGFib3V0IDQwMCBLQiksIHNpbmNlIHNvbWUgcHJvZ3JhbXMgKGUuZy4gdGhlIFggd2luZG93XFxuIDEyMDpcXHRcXHQgIHN5c3RlbSkgdXNlIFRDUC9JUCBldmVuIGlmIHlvdXIgbWFjaGluZSBpcyBub3QgY29ubmVjdGVkIHRvIGFueVxcbiAxMjE6XFx0XFx0ICBvdGhlciBjb21wdXRlci4gWW91IHdpbGwgZ2V0IHRoZSBzby1jYWxsZWQgbG9vcGJhY2sgZGV2aWNlIHdoaWNoXFxuIDEyMjpcXHRcXHQgIGFsbG93cyB5b3UgdG8gcGluZyB5b3Vyc2VsZiAoZ3JlYXQgZnVuLCB0aGF0ISkuXFxuIDEyMzpcXHRcXG4gMTI0OlxcdFxcdCAgRm9yIGFuIGV4Y2VsbGVudCBpbnRyb2R1Y3Rpb24gdG8gTGludXggbmV0d29ya2luZywgcGxlYXNlIHJlYWQgdGhlXFxuIDEyNTpcXHRcXHQgIExpbnV4IE5ldHdvcmtpbmcgSE9XVE8sIGF2YWlsYWJsZSBmcm9tXFxuIDEyNjpcXHRcXHQgIFxcdTAwM2NodHRwOi8vd3d3LnRsZHAub3JnL2RvY3MuaHRtbCNob3d0b1xcdTAwM2UuXFxuIDEyNzpcXHRcXG4gMTI4OlxcdFxcdCAgSWYgeW91IHNheSBZIGhlcmUgYW5kIGFsc28gdG8gXFxcIi9wcm9jIGZpbGUgc3lzdGVtIHN1cHBvcnRcXFwiIGFuZFxcbiAxMjk6XFx0XFx0ICBcXFwiU3lzY3RsIHN1cHBvcnRcXFwiIGJlbG93LCB5b3UgY2FuIGNoYW5nZSB2YXJpb3VzIGFzcGVjdHMgb2YgdGhlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE2OjI3OjA5LjgyODg2OTg2NloiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMDI0ODk1MjM2MDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIEJQRiBGaXgqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGZpeGluZyBhbiBSQ1UgcmVhZC1sb2NrIGxpZmV0aW1lIGlzc3VlIGluIGBicGZfcHJvZ190ZXN0X3J1bl9za19sb29rdXBgLiBNeSB1bmRlcnN0YW5kaW5nLCBmcm9tIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiwgaXMgdGhhdCBgbmV0L0tjb25maWdgIGluY2x1ZGVzIHRoaXMgdW5kZXIgdGhlIFwiTmV0d29ya2luZyBvcHRpb25zXCIgbWVudSwgd2hpY2ggaXRzZWxmIGlzIGd1YXJkZWQgYnkgYGlmIE5FVGAuIFRoaXMgdGVsbHMgbWUgdGhhdCBgQlBGX1NZU0NBTExgLCBgTkVUYCwgYW5kIGBJTkVUYCBhcmUgdGhlIGltcG9ydGFudCBjb25maWd1cmF0aW9ucyB0byBrZWVwIGluIG1pbmQgaGVyZS5cblxuTGV0IG1lIGp1c3QgcnVuIHRocm91Z2ggbXkgbWVudGFsIGNoZWNrbGlzdCB0byBjb25maXJtIG15IGFuYWx5c2lzLiBUaGUgZnV6emluZyBmbGFnLCBgV29ydGhGdXp6aW5nYCwgaXMgc2V0IHRvIGB0cnVlYCwgd2hpY2ggbWFrZXMgc2Vuc2UgZ2l2ZW4gdGhlIHBvdGVudGlhbCBzZWN1cml0eSBpbXBsaWNhdGlvbnMgb2YgQlBGLiBUaGUgcm9vdCBvZiB0aGUgcHJvYmxlbSBzZWVtcyB0byBiZSB0aGF0IGBjdHguc2VsZWN0ZWRfc2tgIGlzIGJlaW5nIGFjY2Vzc2VkIGFmdGVyIGBicGZfdGVzdF90aW1lcl9sZWF2ZSgpYCBoYXMgdW5sb2NrZWQgdGhlIFJDVSByZWFkIGxvY2ssIHdoaWNoIGlzIGRlZmluaXRlbHkgYSBidWcuIFRoaXMgaXNzdWUgaXMgaW4gdGhlIGNvcmUgQlBGIHRlc3QgcnVubmVyLCBzcGVjaWZpY2FsbHkgd2hlbiBydW5uaW5nIHdpdGggdGhlIGBicGYoQlBGX1BST0dfVEVTVF9SVU4pYCBzeXNjYWxsIG9uIGBCUEZfUFJPR19UWVBFX1NLX0xPT0tVUGAgcHJvZ3JhbXMuIFRoZXJlZm9yZSwgdGhlIHJlbGV2YW50IHN5bWJvbHMgSSBuZWVkIHRvIGZvY3VzIG9uIGFyZSBgYnBmX3Byb2dfdGVzdF9ydW5fc2tfbG9va3VwYC5cblxuQmFzZWQgb24gdGhpcywgSSdtIGNvbmZpZGVudCB0aGF0IGVuYWJsaW5nIGBCUEZfU1lTQ0FMTGAsIGBORVRgLCBhbmQgYElORVRgIGlzIHRoZSByaWdodCBtb3ZlIGZvciByZXByb2R1Y2luZyBhbmQgdGVzdGluZyB0aGlzIGZpeC5cblxuQWxyaWdodCwgdGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNTk5LCJPdXRwdXRUb2tlbnMiOjE2NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE2OjI4OjUyLjMxODM5Njg1NFoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc0MjA0NDM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiTkVUXCIsXG4gICAgXCJJTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX3Byb2dfdGVzdF9ydW5fc2tfbG9va3VwXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGJwZl9wcm9nX3Rlc3RfcnVuX3NrX2xvb2t1cGAgdG8gYWNjZXNzIHRoZSBzZWxlY3RlZCBzb2NrZXQgYGN0eC5zZWxlY3RlZF9za2Agd2l0aGluIHRoZSBSQ1UtcHJvdGVjdGVkIGNyaXRpY2FsIHNlY3Rpb24gYmVmb3JlIGNhbGxpbmcgYGJwZl90ZXN0X3RpbWVyX2xlYXZlKFxcdTAwMjZ0KWAsIHByZXZlbnRpbmcgdXNlLWFmdGVyLWZyZWUgb3IgUkNVIHZpb2xhdGlvbnMuIFRoaXMgY29kZSBwYXRoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIGBCUEZfUFJPR19URVNUX1JVTmAgY29tbWFuZCBvZiB0aGUgYGJwZigpYCBzeXNjYWxsIG9uIHNrX2xvb2t1cCBCUEYgcHJvZ3JhbXMgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJORVRcIixcbiAgICBcIklORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfcHJvZ190ZXN0X3J1bl9za19sb29rdXBcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgYnBmX3Byb2dfdGVzdF9ydW5fc2tfbG9va3VwYCB0byBhY2Nlc3MgdGhlIHNlbGVjdGVkIHNvY2tldCBgY3R4LnNlbGVjdGVkX3NrYCB3aXRoaW4gdGhlIFJDVS1wcm90ZWN0ZWQgY3JpdGljYWwgc2VjdGlvbiBiZWZvcmUgY2FsbGluZyBgYnBmX3Rlc3RfdGltZXJfbGVhdmUoXFx1MDAyNnQpYCwgcHJldmVudGluZyB1c2UtYWZ0ZXItZnJlZSBvciBSQ1UgdmlvbGF0aW9ucy4gVGhpcyBjb2RlIHBhdGggaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgYEJQRl9QUk9HX1RFU1RfUlVOYCBjb21tYW5kIG9mIHRoZSBgYnBmKClgIHN5c2NhbGwgb24gc2tfbG9va3VwIEJQRiBwcm9ncmFtcyBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE2OjI4OjUyLjM5MjYwNzczMVoiLCJTZXEiOjM3LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAwMTY2NDg5NTIyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE2OjI4OjUyLjM5MzA3MzY2MVoiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjEwMDE2NjQ0MjQ0NzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBicGZfcHJvZ190ZXN0X3J1bl9za19sb29rdXAoKWAgaW4gYG5ldC9icGYvdGVzdF9ydW4uY2AgdG8gaW5zcGVjdCBgY3R4LnNlbGVjdGVkX3NrYCBhbmQgdXBkYXRlIGB1c2VyX2N0eC1cXHUwMDNlY29va2llYCBiZWZvcmUgY2FsbGluZyBgYnBmX3Rlc3RfdGltZXJfbGVhdmUoXFx1MDAyNnQpYCwgcmF0aGVyIHRoYW4gYWZ0ZXIgaXQuXFxuXFxuVGhpcyBjaGFuZ2UgZW5zdXJlcyB0aGF0IGBjdHguc2VsZWN0ZWRfc2tgIGlzIGFjY2Vzc2VkIHdoaWxlIHN0aWxsIHByb3RlY3RlZCBieSB0aGUgUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uIGVzdGFibGlzaGVkIGJ5IGBicGZfdGVzdF90aW1lcl9lbnRlcigpYC4gQWNjZXNzaW5nIGBjdHguc2VsZWN0ZWRfc2tgIGFmdGVyIHJlbGVhc2luZyBSQ1UgY291bGQgcmVzdWx0IGluIGEgdXNlLWFmdGVyLWZyZWUgb3IgUkNVIGRlcmVmZXJlbmNlIGJ1Zywgd2hpY2ggaXMgbW9uaXRvcmVkIGJ5IEtBU0FOIGFuZCBQUk9WRV9SQ1UgLyBMT0NLREVQLlxcblxcblRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzOlxcbi0gYHVzZXJfY3R4YCBpcyBhbGxvY2F0ZWQgdmlhIGBremFsbG9jKClgIGluIGBicGZfY3R4X2luaXQoKWAuXFxuLSBTdGFjayBzdHJ1Y3R1cmVzIHN1Y2ggYXMgYGN0eGAgYXJlIHplcm8taW5pdGlhbGl6ZWQgKGB7fWApLlxcbi0gVGhlIGNvbmRpdGlvbiBgcmV0IFxcdTAwM2U9IDBgIGNoZWNrcyBgcmV0YCB3aGljaCBpcyBpbml0aWFsaXplZC91cGRhdGVkIGJ5IGBicGZfdGVzdF90aW1lcl9jb250aW51ZSgpYC5cXG4tIE5vIG5ldyBidWZmZXJzLCB1bmluaXRpYWxpemVkIGZpZWxkcywgb3IgbWVtb3J5IGNvcGllcyBhcmUgaW50cm9kdWNlZC5cXG5cXG5UaGVyZWZvcmUsIHRoaXMgY2hhbmdlIGRvZXMgbm90IHdhcnJhbnQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGEzOTU3N2IyYjNjYWY2MzI5ZTJmM2E0NTI2MGRlMDZhMTEzZDIwMTFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAyOSAxNTo1NjozOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9icGYvdGVzdF9ydW4uYyBiL25ldC9icGYvdGVzdF9ydW4uY1xuaW5kZXggNWQ1MWY2Y2I3ZDE1NC4uZTY3N2VjMzM5MGUzNyAxMDA2NDRcbi0tLSBhL25ldC9icGYvdGVzdF9ydW4uY1xuKysrIGIvbmV0L2JwZi90ZXN0X3J1bi5jXG5AQCAtMTY1MCwyMSArMTY1MCwyMSBAQCBpbnQgYnBmX3Byb2dfdGVzdF9ydW5fc2tfbG9va3VwKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgY29uc3QgdW5pb24gYnBmX2F0dHIgKmthdFxuIFx0XHRjdHguc2VsZWN0ZWRfc2sgPSBOVUxMO1xuIFx0XHRyZXR2YWwgPSBCUEZfUFJPR19TS19MT09LVVBfUlVOX0FSUkFZKHByb2dzLCBjdHgsIGJwZl9wcm9nX3J1bik7XG4gXHR9IHdoaWxlIChicGZfdGVzdF90aW1lcl9jb250aW51ZShcdTAwMjZ0LCAxLCByZXBlYXQsIFx1MDAyNnJldCwgXHUwMDI2ZHVyYXRpb24pKTtcbitcbitcdGlmIChyZXQgXHUwMDNlPSAwKSB7XG4rXHRcdHVzZXJfY3R4LVx1MDAzZWNvb2tpZSA9IDA7XG4rXHRcdGlmIChjdHguc2VsZWN0ZWRfc2spIHtcbitcdFx0XHRpZiAoY3R4LnNlbGVjdGVkX3NrLVx1MDAzZXNrX3JldXNlcG9ydCBcdTAwMjZcdTAwMjYgIWN0eC5ub19yZXVzZXBvcnQpXG4rXHRcdFx0XHRyZXQgPSAtRU9QTk9UU1VQUDtcbitcdFx0XHRlbHNlXG4rXHRcdFx0XHR1c2VyX2N0eC1cdTAwM2Vjb29raWUgPSBzb2NrX2dlbl9jb29raWUoY3R4LnNlbGVjdGVkX3NrKTtcbitcdFx0fVxuK1x0fVxuIFx0YnBmX3Rlc3RfdGltZXJfbGVhdmUoXHUwMDI2dCk7XG4gXG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRnb3RvIG91dDtcbiBcbi1cdHVzZXJfY3R4LVx1MDAzZWNvb2tpZSA9IDA7XG4tXHRpZiAoY3R4LnNlbGVjdGVkX3NrKSB7XG4tXHRcdGlmIChjdHguc2VsZWN0ZWRfc2stXHUwMDNlc2tfcmV1c2Vwb3J0IFx1MDAyNlx1MDAyNiAhY3R4Lm5vX3JldXNlcG9ydCkge1xuLVx0XHRcdHJldCA9IC1FT1BOT1RTVVBQO1xuLVx0XHRcdGdvdG8gb3V0O1xuLVx0XHR9XG4tXG4tXHRcdHVzZXJfY3R4LVx1MDAzZWNvb2tpZSA9IHNvY2tfZ2VuX2Nvb2tpZShjdHguc2VsZWN0ZWRfc2spO1xuLVx0fVxuLVxuIFx0cmV0ID0gYnBmX3Rlc3RfZmluaXNoKGthdHRyLCB1YXR0ciwgTlVMTCwgTlVMTCwgMCwgMCwgcmV0dmFsLCBkdXJhdGlvbik7XG4gXHRpZiAoIXJldClcbiBcdFx0cmV0ID0gYnBmX2N0eF9maW5pc2goa2F0dHIsIHVhdHRyLCB1c2VyX2N0eCwgc2l6ZW9mKCp1c2VyX2N0eCkpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTY6Mjg6NTIuMzkzMDc0NDAxWiIsIlNlcSI6MzksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQyMDIwNDE5MjQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQlBGIFRlc3QgUnVubmVyIENvZGUqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW4uIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQncyBoYXBwZW5pbmcgd2l0aCB0aGlzIGRpZmYsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIEJQRiB0ZXN0aW5nIGZyYW1ld29yay4gSSdtIGdvaW5nIHRvIGZvY3VzIG15IGF0dGVudGlvbiBvbiBgbmV0L2JwZi90ZXN0X3J1bi5jYC4gRmlyc3QsIEknbGwgbmVlZCB0byB1c2UgbXkgdG9vbHMgdG8gZXhhbWluZSB0aGUgZGlmZiBjbG9zZWx5LCB1bmRlcnN0YW5kIHRoZSBjaGFuZ2VzIG1hZGUgYW5kIHRoZW4gSSB3aWxsIHJlYWQgdGhlIHJlbGV2YW50IHBvcnRpb25zIG9mIHRoZSBjb2RlLlxuXG5JIHRoaW5rIGEgZ29vZCBzdGFydGluZyBwb2ludCB3aWxsIGJlIGFyb3VuZCBsaW5lIDE2NTAgaW4gYG5ldC9icGYvdGVzdF9ydW4uY2AuIEkgd2lsbCByZWFkIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRoZXJlIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgYW55IGNoYW5nZXMuIExldCdzIHN0YXJ0IHdpdGggYHJlYWQtZmlsZWAgdG8gZ2V0IGEgcXVpY2sgb3ZlcnZpZXcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzODUsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE2OjI5OjM0LjQxMzQ5NzI2NVoiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzIyNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2JwZi90ZXN0X3J1bi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE2MDAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE2MDA6XFx0XFx0aWYgKElTX0VSUih1c2VyX2N0eCkpXFxuMTYwMTpcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUih1c2VyX2N0eCk7XFxuMTYwMjpcXHRcXG4xNjAzOlxcdFxcdGlmICghdXNlcl9jdHgpXFxuMTYwNDpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xNjA1OlxcdFxcbjE2MDY6XFx0XFx0aWYgKHVzZXJfY3R4LVxcdTAwM2VzaylcXG4xNjA3OlxcdFxcdFxcdGdvdG8gb3V0O1xcbjE2MDg6XFx0XFxuMTYwOTpcXHRcXHRpZiAoIXJhbmdlX2lzX3plcm8odXNlcl9jdHgsIG9mZnNldG9mZW5kKHR5cGVvZigqdXNlcl9jdHgpLCBsb2NhbF9wb3J0KSwgc2l6ZW9mKCp1c2VyX2N0eCkpKVxcbjE2MTA6XFx0XFx0XFx0Z290byBvdXQ7XFxuMTYxMTpcXHRcXG4xNjEyOlxcdFxcdGlmICh1c2VyX2N0eC1cXHUwMDNlbG9jYWxfcG9ydCBcXHUwMDNlIFUxNl9NQVgpIHtcXG4xNjEzOlxcdFxcdFxcdHJldCA9IC1FUkFOR0U7XFxuMTYxNDpcXHRcXHRcXHRnb3RvIG91dDtcXG4xNjE1OlxcdFxcdH1cXG4xNjE2OlxcdFxcbjE2MTc6XFx0XFx0Y3R4LmZhbWlseSA9ICh1MTYpdXNlcl9jdHgtXFx1MDAzZWZhbWlseTtcXG4xNjE4OlxcdFxcdGN0eC5wcm90b2NvbCA9ICh1MTYpdXNlcl9jdHgtXFx1MDAzZXByb3RvY29sO1xcbjE2MTk6XFx0XFx0Y3R4LmRwb3J0ID0gKHUxNil1c2VyX2N0eC1cXHUwMDNlbG9jYWxfcG9ydDtcXG4xNjIwOlxcdFxcdGN0eC5zcG9ydCA9IHVzZXJfY3R4LVxcdTAwM2VyZW1vdGVfcG9ydDtcXG4xNjIxOlxcdFxcbjE2MjI6XFx0XFx0c3dpdGNoIChjdHguZmFtaWx5KSB7XFxuMTYyMzpcXHRcXHRjYXNlIEFGX0lORVQ6XFxuMTYyNDpcXHRcXHRcXHRjdHgudjQuZGFkZHIgPSAoX19mb3JjZSBfX2JlMzIpdXNlcl9jdHgtXFx1MDAzZWxvY2FsX2lwNDtcXG4xNjI1OlxcdFxcdFxcdGN0eC52NC5zYWRkciA9IChfX2ZvcmNlIF9fYmUzMil1c2VyX2N0eC1cXHUwMDNlcmVtb3RlX2lwNDtcXG4xNjI2OlxcdFxcdFxcdGJyZWFrO1xcbjE2Mjc6XFx0XFxuMTYyODpcXHQjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG4xNjI5OlxcdFxcdGNhc2UgQUZfSU5FVDY6XFxuMTYzMDpcXHRcXHRcXHRjdHgudjYuZGFkZHIgPSAoc3RydWN0IGluNl9hZGRyICopdXNlcl9jdHgtXFx1MDAzZWxvY2FsX2lwNjtcXG4xNjMxOlxcdFxcdFxcdGN0eC52Ni5zYWRkciA9IChzdHJ1Y3QgaW42X2FkZHIgKil1c2VyX2N0eC1cXHUwMDNlcmVtb3RlX2lwNjtcXG4xNjMyOlxcdFxcdFxcdGJyZWFrO1xcbjE2MzM6XFx0I2VuZGlmXFxuMTYzNDpcXHRcXG4xNjM1OlxcdFxcdGRlZmF1bHQ6XFxuMTYzNjpcXHRcXHRcXHRyZXQgPSAtRUFGTk9TVVBQT1JUO1xcbjE2Mzc6XFx0XFx0XFx0Z290byBvdXQ7XFxuMTYzODpcXHRcXHR9XFxuMTYzOTpcXHRcXG4xNjQwOlxcdFxcdHByb2dzID0gYnBmX3Byb2dfYXJyYXlfYWxsb2MoMSwgR0ZQX0tFUk5FTCk7XFxuMTY0MTpcXHRcXHRpZiAoIXByb2dzKSB7XFxuMTY0MjpcXHRcXHRcXHRyZXQgPSAtRU5PTUVNO1xcbjE2NDM6XFx0XFx0XFx0Z290byBvdXQ7XFxuMTY0NDpcXHRcXHR9XFxuMTY0NTpcXHRcXG4xNjQ2OlxcdFxcdHByb2dzLVxcdTAwM2VpdGVtc1swXS5wcm9nID0gcHJvZztcXG4xNjQ3OlxcdFxcbjE2NDg6XFx0XFx0YnBmX3Rlc3RfdGltZXJfZW50ZXIoXFx1MDAyNnQpO1xcbjE2NDk6XFx0XFx0ZG8ge1xcbjE2NTA6XFx0XFx0XFx0Y3R4LnNlbGVjdGVkX3NrID0gTlVMTDtcXG4xNjUxOlxcdFxcdFxcdHJldHZhbCA9IEJQRl9QUk9HX1NLX0xPT0tVUF9SVU5fQVJSQVkocHJvZ3MsIGN0eCwgYnBmX3Byb2dfcnVuKTtcXG4xNjUyOlxcdFxcdH0gd2hpbGUgKGJwZl90ZXN0X3RpbWVyX2NvbnRpbnVlKFxcdTAwMjZ0LCAxLCByZXBlYXQsIFxcdTAwMjZyZXQsIFxcdTAwMjZkdXJhdGlvbikpO1xcbjE2NTM6XFx0XFxuMTY1NDpcXHRcXHRpZiAocmV0IFxcdTAwM2U9IDApIHtcXG4xNjU1OlxcdFxcdFxcdHVzZXJfY3R4LVxcdTAwM2Vjb29raWUgPSAwO1xcbjE2NTY6XFx0XFx0XFx0aWYgKGN0eC5zZWxlY3RlZF9zaykge1xcbjE2NTc6XFx0XFx0XFx0XFx0aWYgKGN0eC5zZWxlY3RlZF9zay1cXHUwMDNlc2tfcmV1c2Vwb3J0IFxcdTAwMjZcXHUwMDI2ICFjdHgubm9fcmV1c2Vwb3J0KVxcbjE2NTg6XFx0XFx0XFx0XFx0XFx0cmV0ID0gLUVPUE5PVFNVUFA7XFxuMTY1OTpcXHRcXHRcXHRcXHRlbHNlXFxuMTY2MDpcXHRcXHRcXHRcXHRcXHR1c2VyX2N0eC1cXHUwMDNlY29va2llID0gc29ja19nZW5fY29va2llKGN0eC5zZWxlY3RlZF9zayk7XFxuMTY2MTpcXHRcXHRcXHR9XFxuMTY2MjpcXHRcXHR9XFxuMTY2MzpcXHRcXHRicGZfdGVzdF90aW1lcl9sZWF2ZShcXHUwMDI2dCk7XFxuMTY2NDpcXHRcXG4xNjY1OlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbjE2NjY6XFx0XFx0XFx0Z290byBvdXQ7XFxuMTY2NzpcXHRcXG4xNjY4OlxcdFxcdHJldCA9IGJwZl90ZXN0X2ZpbmlzaChrYXR0ciwgdWF0dHIsIE5VTEwsIE5VTEwsIDAsIDAsIHJldHZhbCwgZHVyYXRpb24pO1xcbjE2Njk6XFx0XFx0aWYgKCFyZXQpXFxuMTY3MDpcXHRcXHRcXHRyZXQgPSBicGZfY3R4X2ZpbmlzaChrYXR0ciwgdWF0dHIsIHVzZXJfY3R4LCBzaXplb2YoKnVzZXJfY3R4KSk7XFxuMTY3MTpcXHRcXG4xNjcyOlxcdG91dDpcXG4xNjczOlxcdFxcdGJwZl9wcm9nX2FycmF5X2ZyZWUocHJvZ3MpO1xcbjE2NzQ6XFx0XFx0a2ZyZWUodXNlcl9jdHgpO1xcbjE2NzU6XFx0XFx0cmV0dXJuIHJldDtcXG4xNjc2OlxcdH1cXG4xNjc3OlxcdFxcbjE2Nzg6XFx0aW50IGJwZl9wcm9nX3Rlc3RfcnVuX3N5c2NhbGwoc3RydWN0IGJwZl9wcm9nICpwcm9nLFxcbjE2Nzk6XFx0XFx0XFx0XFx0ICAgICAgY29uc3QgdW5pb24gYnBmX2F0dHIgKmthdHRyLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNjoyOTozNC40MTM2MzE4MTVaIiwiU2VxIjo0MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTUwMzgxMzQxMzg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGVzZSBjaGFuZ2VzLCBzbyB0aGUgZmlyc3QgdGhpbmcgSSdsbCBkbyBpcyBtZXRob2RpY2FsbHkgZ28gdGhyb3VnaCBpdC4gUmF0aGVyIHRoYW4ganVzdCBmb2N1c2luZyBvbiB0aGUgY3VycmVudCBsaW5lcywgSSBrbm93IEkgbmVlZCB0byBidWlsZCBhIGNvbXByZWhlbnNpdmUgdW5kZXJzdGFuZGluZywgc28gSSB3aWxsIGFuYWx5emUgdGhlIGVhcmxpZXIgbGluZXMgb2YgYGJwZl9wcm9nX3Rlc3RfcnVuX3NrX2xvb2t1cGAgYXMgd2VsbC4gQ29udGV4dCBpcyBldmVyeXRoaW5nIHdoZW4gZGVhbGluZyB3aXRoIEJQRi4gSSBuZWVkIHRvIGdyYXNwIHRoZSBlbnRpcmUgcGljdHVyZSB0byBldmFsdWF0ZSB0aGUgaW1wYWN0IGNvcnJlY3RseS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzg0OSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTY6MzI6MDQuNzk0OTc4MTI5WiIsIlNlcSI6NDIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MDA2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvYnBmL3Rlc3RfcnVuLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTU3MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTU3MDpcXHRcXHRcXHRcXHRcXHQgICAgIHNpemVvZihzdHJ1Y3QgYnBmX2Zsb3dfa2V5cykpO1xcbjE1NzE6XFx0XFxuMTU3MjpcXHRvdXQ6XFxuMTU3MzpcXHRcXHRrZnJlZSh1c2VyX2N0eCk7XFxuMTU3NDpcXHRcXHRrZnJlZShkYXRhKTtcXG4xNTc1OlxcdFxcdHJldHVybiByZXQ7XFxuMTU3NjpcXHR9XFxuMTU3NzpcXHRcXG4xNTc4OlxcdGludCBicGZfcHJvZ190ZXN0X3J1bl9za19sb29rdXAoc3RydWN0IGJwZl9wcm9nICpwcm9nLCBjb25zdCB1bmlvbiBicGZfYXR0ciAqa2F0dHIsXFxuMTU3OTpcXHRcXHRcXHRcXHRcXHR1bmlvbiBicGZfYXR0ciBfX3VzZXIgKnVhdHRyKVxcbjE1ODA6XFx0e1xcbjE1ODE6XFx0XFx0c3RydWN0IGJwZl90ZXN0X3RpbWVyIHQgPSB7fTtcXG4xNTgyOlxcdFxcdHN0cnVjdCBicGZfcHJvZ19hcnJheSAqcHJvZ3MgPSBOVUxMO1xcbjE1ODM6XFx0XFx0c3RydWN0IGJwZl9za19sb29rdXBfa2VybiBjdHggPSB7fTtcXG4xNTg0OlxcdFxcdHUzMiByZXBlYXQgPSBrYXR0ci1cXHUwMDNldGVzdC5yZXBlYXQ7XFxuMTU4NTpcXHRcXHRzdHJ1Y3QgYnBmX3NrX2xvb2t1cCAqdXNlcl9jdHg7XFxuMTU4NjpcXHRcXHR1MzIgcmV0dmFsLCBkdXJhdGlvbjtcXG4xNTg3OlxcdFxcdGludCByZXQgPSAtRUlOVkFMO1xcbjE1ODg6XFx0XFxuMTU4OTpcXHRcXHRpZiAoa2F0dHItXFx1MDAzZXRlc3QuZmxhZ3MgfHwga2F0dHItXFx1MDAzZXRlc3QuY3B1IHx8IGthdHRyLVxcdTAwM2V0ZXN0LmJhdGNoX3NpemUpXFxuMTU5MDpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xNTkxOlxcdFxcbjE1OTI6XFx0XFx0aWYgKGthdHRyLVxcdTAwM2V0ZXN0LmRhdGFfaW4gfHwga2F0dHItXFx1MDAzZXRlc3QuZGF0YV9zaXplX2luIHx8IGthdHRyLVxcdTAwM2V0ZXN0LmRhdGFfb3V0IHx8XFxuMTU5MzpcXHRcXHQgICAga2F0dHItXFx1MDAzZXRlc3QuZGF0YV9zaXplX291dClcXG4xNTk0OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjE1OTU6XFx0XFxuMTU5NjpcXHRcXHRpZiAoIXJlcGVhdClcXG4xNTk3OlxcdFxcdFxcdHJlcGVhdCA9IDE7XFxuMTU5ODpcXHRcXG4xNTk5OlxcdFxcdHVzZXJfY3R4ID0gYnBmX2N0eF9pbml0KGthdHRyLCBzaXplb2YoKnVzZXJfY3R4KSk7XFxuMTYwMDpcXHRcXHRpZiAoSVNfRVJSKHVzZXJfY3R4KSlcXG4xNjAxOlxcdFxcdFxcdHJldHVybiBQVFJfRVJSKHVzZXJfY3R4KTtcXG4xNjAyOlxcdFxcbjE2MDM6XFx0XFx0aWYgKCF1c2VyX2N0eClcXG4xNjA0OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjE2MDU6XFx0XFxuMTYwNjpcXHRcXHRpZiAodXNlcl9jdHgtXFx1MDAzZXNrKVxcbjE2MDc6XFx0XFx0XFx0Z290byBvdXQ7XFxuMTYwODpcXHRcXG4xNjA5OlxcdFxcdGlmICghcmFuZ2VfaXNfemVybyh1c2VyX2N0eCwgb2Zmc2V0b2ZlbmQodHlwZW9mKCp1c2VyX2N0eCksIGxvY2FsX3BvcnQpLCBzaXplb2YoKnVzZXJfY3R4KSkpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE2OjMyOjA0Ljc5NTEyMDIxOVoiLCJTZXEiOjQzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMzIyOTIxMjAwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgZnVuY3Rpb25zLlxuXG4qKkRlY29uc3RydWN0aW5nIHRoZSBCUEYgVGltZXIgTGlmZWN5Y2xlKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoZXNlIEJQRiB0aW1lciBmdW5jdGlvbnM6IGBicGZfdGVzdF90aW1lcl9lbnRlcmAsIGBicGZfdGVzdF90aW1lcl9jb250aW51ZWAsIGFuZCBgYnBmX3Rlc3RfdGltZXJfbGVhdmVgLiBNeSBpbml0aWFsIGFwcHJvYWNoIGlzIGFsd2F5cyB0aGUgc2FtZTogbGV0J3Mgc3RhcnQgd2l0aCBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZXkncmUgKnVzZWQqLiBJJ2xsIHJlYWNoIGZvciBgZ3JlcGAgYW5kIHNlZSB3aGVyZSB0aGVzZSBmdW5jdGlvbnMgYXJlIHJlZmVyZW5jZWQgdGhyb3VnaG91dCB0aGUgY29kZWJhc2UuIFRoZSBnb2FsIGlzIHRvIHNlZSB0aGVtIGluIGNvbnRleHQuIEkgZXhwZWN0IHRvIGdldCBhIGZlZWwgZm9yIHRoZSBkaWZmZXJlbnQgc3RhZ2VzIG9mIHRpbWVyIGNyZWF0aW9uLCBtYW5hZ2VtZW50LCBhbmQgZXhwaXJhdGlvbiB3aXRoaW4gdGhlIEJQRiBmcmFtZXdvcmsuIFRoYXQgZ3JlcHBpbmcgd2lsbCBob3BlZnVsbHkgcmV2ZWFsIHRoZSB0eXBpY2FsIGNhbGwgc2VxdWVuY2UgYW5kIHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQuIEknbSBsb29raW5nIGZvciBhIGNsZWFyIGZsb3cgb2YgZXhlY3V0aW9uLCBpZGVudGlmeWluZyBob3cgdGhlIHRpbWVyJ3MgYmVoYXZpb3IgaXMgZGVmaW5lZCBhbmQgaG93IGV2ZW50cyB0cmlnZ2VyIHRoZSB2YXJpb3VzIGNhbGxzLiBGcm9tIHRoZXJlIEknbGwgc3RhcnQgYnVpbGRpbmcgYSBtZW50YWwgbW9kZWwgb2YgdGhlaXIgYmVoYXZpb3IsIHBheWluZyBhdHRlbnRpb24gdG8gYW55IGVkZ2UgY2FzZXMgb3IgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3VlcyB0aGF0IG1pZ2h0IGFyaXNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NjQ0LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNjozMjoxOC4wMjQzMzU2NTlaIiwiU2VxIjo0NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMyMzAwOTEzNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfdGVzdF90aW1lclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYnBmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvYnBmL3Rlc3RfcnVuLmMtMzAtXFxubmV0L2JwZi90ZXN0X3J1bi5jOjMxOnN0cnVjdCBicGZfdGVzdF90aW1lciB7XFxubmV0L2JwZi90ZXN0X3J1bi5jLTMyLVxcdHUzMiBpO1xcbi0tXFxubmV0L2JwZi90ZXN0X3J1bi5jLTM1LVxcbm5ldC9icGYvdGVzdF9ydW4uYzozNjpzdGF0aWMgdm9pZCBicGZfdGVzdF90aW1lcl9lbnRlcihzdHJ1Y3QgYnBmX3Rlc3RfdGltZXIgKnQpXFxubmV0L2JwZi90ZXN0X3J1bi5jLTM3LVxcdF9fYWNxdWlyZXMocmN1KVxcbi0tXFxubmV0L2JwZi90ZXN0X3J1bi5jLTQyLVxcbm5ldC9icGYvdGVzdF9ydW4uYzo0MzpzdGF0aWMgdm9pZCBicGZfdGVzdF90aW1lcl9sZWF2ZShzdHJ1Y3QgYnBmX3Rlc3RfdGltZXIgKnQpXFxubmV0L2JwZi90ZXN0X3J1bi5jLTQ0LVxcdF9fcmVsZWFzZXMocmN1KVxcbi0tXFxubmV0L2JwZi90ZXN0X3J1bi5jLTQ5LVxcbm5ldC9icGYvdGVzdF9ydW4uYzo1MDpzdGF0aWMgYm9vbCBicGZfdGVzdF90aW1lcl9jb250aW51ZShzdHJ1Y3QgYnBmX3Rlc3RfdGltZXIgKnQsIGludCBpdGVyYXRpb25zLFxcbm5ldC9icGYvdGVzdF9ydW4uYy01MS1cXHRcXHRcXHRcXHQgICAgdTMyIHJlcGVhdCwgaW50ICplcnIsIHUzMiAqZHVyYXRpb24pXFxuLS1cXG5uZXQvYnBmL3Rlc3RfcnVuLmMtNzItXFx0XFx0dC1cXHUwMDNldGltZV9zcGVudCArPSBrdGltZV9nZXRfbnMoKSAtIHQtXFx1MDAzZXRpbWVfc3RhcnQ7XFxubmV0L2JwZi90ZXN0X3J1bi5jOjczOlxcdFxcdGJwZl90ZXN0X3RpbWVyX2xlYXZlKHQpO1xcbm5ldC9icGYvdGVzdF9ydW4uYy03NC1cXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG5uZXQvYnBmL3Rlc3RfcnVuLmM6NzU6XFx0XFx0YnBmX3Rlc3RfdGltZXJfZW50ZXIodCk7XFxubmV0L2JwZi90ZXN0X3J1bi5jLTc2LVxcdH1cXG4tLVxcbm5ldC9icGYvdGVzdF9ydW4uYz0zNjA9c3RhdGljIGludCBicGZfdGVzdF9ydW5feGRwX2xpdmUoc3RydWN0IGJwZl9wcm9nICpwcm9nLCBzdHJ1Y3QgeGRwX2J1ZmYgKmN0eCxcXG4tLVxcbm5ldC9icGYvdGVzdF9ydW4uYy0zNjQtXFx0c3RydWN0IHhkcF90ZXN0X2RhdGEgeGRwID0geyAuYmF0Y2hfc2l6ZSA9IGJhdGNoX3NpemUgfTtcXG5uZXQvYnBmL3Rlc3RfcnVuLmM6MzY1OlxcdHN0cnVjdCBicGZfdGVzdF90aW1lciB0ID0ge307XFxubmV0L2JwZi90ZXN0X3J1bi5jLTM2Ni1cXHRpbnQgcmV0O1xcbi0tXFxubmV0L2JwZi90ZXN0X3J1bi5jLTM3NC1cXG5uZXQvYnBmL3Rlc3RfcnVuLmM6Mzc1OlxcdGJwZl90ZXN0X3RpbWVyX2VudGVyKFxcdTAwMjZ0KTtcXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMzc2LVxcdGRvIHtcXG4tLVxcbm5ldC9icGYvdGVzdF9ydW4uYy0zODAtXFx0XFx0XFx0YnJlYWs7XFxubmV0L2JwZi90ZXN0X3J1bi5jOjM4MTpcXHR9IHdoaWxlIChicGZfdGVzdF90aW1lcl9jb250aW51ZShcXHUwMDI2dCwgeGRwLmZyYW1lX2NudCwgcmVwZWF0LCBcXHUwMDI2cmV0LCB0aW1lKSk7XFxubmV0L2JwZi90ZXN0X3J1bi5jOjM4MjpcXHRicGZfdGVzdF90aW1lcl9sZWF2ZShcXHUwMDI2dCk7XFxubmV0L2JwZi90ZXN0X3J1bi5jLTM4My1cXG4tLVxcbm5ldC9icGYvdGVzdF9ydW4uYz0zODg9c3RhdGljIGludCBicGZfdGVzdF9ydW4oc3RydWN0IGJwZl9wcm9nICpwcm9nLCB2b2lkICpjdHgsIHUzMiByZXBlYXQsXFxuLS1cXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMzk0LVxcdHN0cnVjdCBicGZfY2dfcnVuX2N0eCBydW5fY3R4O1xcbm5ldC9icGYvdGVzdF9ydW4uYzozOTU6XFx0c3RydWN0IGJwZl90ZXN0X3RpbWVyIHQgPSB7fTtcXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMzk2LVxcdGVudW0gYnBmX2Nncm91cF9zdG9yYWdlX3R5cGUgc3R5cGU7XFxuLS1cXG5uZXQvYnBmL3Rlc3RfcnVuLmMtNDExLVxcbm5ldC9icGYvdGVzdF9ydW4uYzo0MTI6XFx0YnBmX3Rlc3RfdGltZXJfZW50ZXIoXFx1MDAyNnQpO1xcbm5ldC9icGYvdGVzdF9ydW4uYy00MTMtXFx0b2xkX2N0eCA9IGJwZl9zZXRfcnVuX2N0eChcXHUwMDI2cnVuX2N0eC5ydW5fY3R4KTtcXG4tLVxcbm5ldC9icGYvdGVzdF9ydW4uYy00MjUtXFx0XFx0bG9jYWxfYmhfZW5hYmxlKCk7XFxubmV0L2JwZi90ZXN0X3J1bi5jOjQyNjpcXHR9IHdoaWxlIChicGZfdGVzdF90aW1lcl9jb250aW51ZShcXHUwMDI2dCwgMSwgcmVwZWF0LCBcXHUwMDI2cmV0LCB0aW1lKSk7XFxubmV0L2JwZi90ZXN0X3J1bi5jLTQyNy1cXHRicGZfcmVzZXRfcnVuX2N0eChvbGRfY3R4KTtcXG5uZXQvYnBmL3Rlc3RfcnVuLmM6NDI4OlxcdGJwZl90ZXN0X3RpbWVyX2xlYXZlKFxcdTAwMjZ0KTtcXG5uZXQvYnBmL3Rlc3RfcnVuLmMtNDI5LVxcbi0tXFxubmV0L2JwZi90ZXN0X3J1bi5jPTE1MDk9aW50IGJwZl9wcm9nX3Rlc3RfcnVuX2Zsb3dfZGlzc2VjdG9yKHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcXG4tLVxcbm5ldC9icGYvdGVzdF9ydW4uYy0xNTEyLXtcXG5uZXQvYnBmL3Rlc3RfcnVuLmM6MTUxMzpcXHRzdHJ1Y3QgYnBmX3Rlc3RfdGltZXIgdCA9IHt9O1xcbm5ldC9icGYvdGVzdF9ydW4uYy0xNTE0LVxcdHUzMiBzaXplID0ga2F0dHItXFx1MDAzZXRlc3QuZGF0YV9zaXplX2luO1xcbi0tXFxubmV0L2JwZi90ZXN0X3J1bi5jLTE1NTUtXFxubmV0L2JwZi90ZXN0X3J1bi5jOjE1NTY6XFx0YnBmX3Rlc3RfdGltZXJfZW50ZXIoXFx1MDAyNnQpO1xcbm5ldC9icGYvdGVzdF9ydW4uYy0xNTU3LVxcdGRvIHtcXG4tLVxcbm5ldC9icGYvdGVzdF9ydW4uYy0xNTU5LVxcdFxcdFxcdFxcdFxcdCAgc2l6ZSwgZmxhZ3MpO1xcbm5ldC9icGYvdGVzdF9ydW4uYzoxNTYwOlxcdH0gd2hpbGUgKGJwZl90ZXN0X3RpbWVyX2NvbnRpbnVlKFxcdTAwMjZ0LCAxLCByZXBlYXQsIFxcdTAwMjZyZXQsIFxcdTAwMjZkdXJhdGlvbikpO1xcbm5ldC9icGYvdGVzdF9ydW4uYzoxNTYxOlxcdGJwZl90ZXN0X3RpbWVyX2xlYXZlKFxcdTAwMjZ0KTtcXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTU2Mi1cXG4tLVxcbm5ldC9icGYvdGVzdF9ydW4uYz0xNTc4PWludCBicGZfcHJvZ190ZXN0X3J1bl9za19sb29rdXAoc3RydWN0IGJwZl9wcm9nICpwcm9nLCBjb25zdCB1bmlvbiBicGZfYXR0ciAqa2F0dHIsXFxuLS1cXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTU4MC17XFxubmV0L2JwZi90ZXN0X3J1bi5jOjE1ODE6XFx0c3RydWN0IGJwZl90ZXN0X3RpbWVyIHQgPSB7fTtcXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTU4Mi1cXHRzdHJ1Y3QgYnBmX3Byb2dfYXJyYXkgKnByb2dzID0gTlVMTDtcXG4tLVxcbm5ldC9icGYvdGVzdF9ydW4uYy0xNjQ3LVxcbm5ldC9icGYvdGVzdF9ydW4uYzoxNjQ4OlxcdGJwZl90ZXN0X3RpbWVyX2VudGVyKFxcdTAwMjZ0KTtcXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTY0OS1cXHRkbyB7XFxuLS1cXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTY1MS1cXHRcXHRyZXR2YWwgPSBCUEZfUFJPR19TS19MT09LVVBfUlVOX0FSUkFZKHByb2dzLCBjdHgsIGJwZl9wcm9nX3J1bik7XFxubmV0L2JwZi90ZXN0X3J1bi5jOjE2NTI6XFx0fSB3aGlsZSAoYnBmX3Rlc3RfdGltZXJfY29udGludWUoXFx1MDAyNnQsIDEsIHJlcGVhdCwgXFx1MDAyNnJldCwgXFx1MDAyNmR1cmF0aW9uKSk7XFxubmV0L2JwZi90ZXN0X3J1bi5jLTE2NTMtXFxuLS1cXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTY2Mi1cXHR9XFxubmV0L2JwZi90ZXN0X3J1bi5jOjE2NjM6XFx0YnBmX3Rlc3RfdGltZXJfbGVhdmUoXFx1MDAyNnQpO1xcbm5ldC9icGYvdGVzdF9ydW4uYy0xNjY0LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNjozMjoxOC4zNDczNTAyMjVaIiwiU2VxIjo0NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTYwNDQ2NTExMjYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipBbmFseXppbmcgYGJwZl90ZXN0X3RpbWVyX2VudGVyYCBhbmQgYGJwZl90ZXN0X3RpbWVyX2xlYXZlYCoqXG5cbk9rYXksIGxldCdzIGRpc3NlY3QgdGhlIGJlaGF2aW91ciBvZiB0aGVzZSBmdW5jdGlvbnMsIGBicGZfdGVzdF90aW1lcl9lbnRlcmAgYW5kIGBicGZfdGVzdF90aW1lcl9sZWF2ZWAuIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCB0aGUgUkNVIChSZWFkLUNvcHkgVXBkYXRlKSBtZWNoYW5pc20uIEEgcXVpY2sgbG9vayByZXZlYWxzIGEgY3J1Y2lhbCBkZXRhaWw6IGBicGZfdGVzdF90aW1lcl9lbnRlcmAgaXMgY2FsbGluZyBgcmN1X3JlYWRfbG9jaygpYCwgd2hpbGUgaXRzIGNvdW50ZXJwYXJ0LCBgYnBmX3Rlc3RfdGltZXJfbGVhdmVgLCBjYWxscyBgcmN1X3JlYWRfdW5sb2NrKClgLiBUaGlzIGluZGljYXRlcyB0aGF0IHRoZXkncmUgZXN0YWJsaXNoaW5nIGFuZCByZWxlYXNpbmcgYW4gUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uLCB3aGljaCBpcyBjb21tb24uXG5cbk5vdywgbGV0IG1lIHpvb20gaW4gb24gbGluZXMgMzYgdGhyb3VnaCA0Ni4gSSBleHBlY3QgdGhhdCB0aGVzZSB3aWxsIGFkZCBtb3JlIG51YW5jZSB0byBob3cgdGhpcyB0aW1lcidzIGludGVyYWN0aW9uIHdpdGggdGhlIFJDVSBzdWJzeXN0ZW0gdGFrZXMgcGxhY2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgdGltZXIgZnVuY3Rpb24gaW50ZWdyYXRlcyB3aXRoIHRoZSBjcml0aWNhbCBzZWN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NzE3LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTY6MzQ6NTguNzkzODY0NTI3WiIsIlNlcSI6NDYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMjIyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvYnBmL3Rlc3RfcnVuLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMzA6XFx0XFxuICAzMTpcXHRzdHJ1Y3QgYnBmX3Rlc3RfdGltZXIge1xcbiAgMzI6XFx0XFx0dTMyIGk7XFxuICAzMzpcXHRcXHR1NjQgdGltZV9zdGFydCwgdGltZV9zcGVudDtcXG4gIDM0OlxcdH07XFxuICAzNTpcXHRcXG4gIDM2OlxcdHN0YXRpYyB2b2lkIGJwZl90ZXN0X3RpbWVyX2VudGVyKHN0cnVjdCBicGZfdGVzdF90aW1lciAqdClcXG4gIDM3OlxcdFxcdF9fYWNxdWlyZXMocmN1KVxcbiAgMzg6XFx0e1xcbiAgMzk6XFx0XFx0cmN1X3JlYWRfbG9ja19kb250X21pZ3JhdGUoKTtcXG4gIDQwOlxcdFxcdHQtXFx1MDAzZXRpbWVfc3RhcnQgPSBrdGltZV9nZXRfbnMoKTtcXG4gIDQxOlxcdH1cXG4gIDQyOlxcdFxcbiAgNDM6XFx0c3RhdGljIHZvaWQgYnBmX3Rlc3RfdGltZXJfbGVhdmUoc3RydWN0IGJwZl90ZXN0X3RpbWVyICp0KVxcbiAgNDQ6XFx0XFx0X19yZWxlYXNlcyhyY3UpXFxuICA0NTpcXHR7XFxuICA0NjpcXHRcXHR0LVxcdTAwM2V0aW1lX3N0YXJ0ID0gMDtcXG4gIDQ3OlxcdFxcdHJjdV9yZWFkX3VubG9ja19taWdyYXRlKCk7XFxuICA0ODpcXHR9XFxuICA0OTpcXHRcXG4gIDUwOlxcdHN0YXRpYyBib29sIGJwZl90ZXN0X3RpbWVyX2NvbnRpbnVlKHN0cnVjdCBicGZfdGVzdF90aW1lciAqdCwgaW50IGl0ZXJhdGlvbnMsXFxuICA1MTpcXHRcXHRcXHRcXHRcXHQgICAgdTMyIHJlcGVhdCwgaW50ICplcnIsIHUzMiAqZHVyYXRpb24pXFxuICA1MjpcXHRcXHRfX211c3RfaG9sZChyY3UpXFxuICA1MzpcXHR7XFxuICA1NDpcXHRcXHR0LVxcdTAwM2VpICs9IGl0ZXJhdGlvbnM7XFxuICA1NTpcXHRcXHRpZiAodC1cXHUwMDNlaSBcXHUwMDNlPSByZXBlYXQpIHtcXG4gIDU2OlxcdFxcdFxcdC8qIFdlJ3JlIGRvbmUuICovXFxuICA1NzpcXHRcXHRcXHR0LVxcdTAwM2V0aW1lX3NwZW50ICs9IGt0aW1lX2dldF9ucygpIC0gdC1cXHUwMDNldGltZV9zdGFydDtcXG4gIDU4OlxcdFxcdFxcdGRvX2Rpdih0LVxcdTAwM2V0aW1lX3NwZW50LCB0LVxcdTAwM2VpKTtcXG4gIDU5OlxcdFxcdFxcdCpkdXJhdGlvbiA9IHQtXFx1MDAzZXRpbWVfc3BlbnQgXFx1MDAzZSBVMzJfTUFYID8gVTMyX01BWCA6ICh1MzIpdC1cXHUwMDNldGltZV9zcGVudDtcXG4gIDYwOlxcdFxcdFxcdCplcnIgPSAwO1xcbiAgNjE6XFx0XFx0XFx0Z290byByZXNldDtcXG4gIDYyOlxcdFxcdH1cXG4gIDYzOlxcdFxcbiAgNjQ6XFx0XFx0aWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7XFxuICA2NTpcXHRcXHRcXHQvKiBEdXJpbmcgaXRlcmF0aW9uOiB3ZSd2ZSBiZWVuIGNhbmNlbGxlZCwgYWJvcnQuICovXFxuICA2NjpcXHRcXHRcXHQqZXJyID0gLUVJTlRSO1xcbiAgNjc6XFx0XFx0XFx0Z290byByZXNldDtcXG4gIDY4OlxcdFxcdH1cXG4gIDY5OlxcdFxcbiAgNzA6XFx0XFx0aWYgKG5lZWRfcmVzY2hlZCgpKSB7XFxuICA3MTpcXHRcXHRcXHQvKiBEdXJpbmcgaXRlcmF0aW9uOiB3ZSBuZWVkIHRvIHJlc2NoZWR1bGUgYmV0d2VlbiBydW5zLiAqL1xcbiAgNzI6XFx0XFx0XFx0dC1cXHUwMDNldGltZV9zcGVudCArPSBrdGltZV9nZXRfbnMoKSAtIHQtXFx1MDAzZXRpbWVfc3RhcnQ7XFxuICA3MzpcXHRcXHRcXHRicGZfdGVzdF90aW1lcl9sZWF2ZSh0KTtcXG4gIDc0OlxcdFxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbiAgNzU6XFx0XFx0XFx0YnBmX3Rlc3RfdGltZXJfZW50ZXIodCk7XFxuICA3NjpcXHRcXHR9XFxuICA3NzpcXHRcXG4gIDc4OlxcdFxcdC8qIERvIGFub3RoZXIgcm91bmQuICovXFxuICA3OTpcXHRcXHRyZXR1cm4gdHJ1ZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTY6MzQ6NTguNzkzOTgwMjA3WiIsIlNlcSI6NDcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjExMTA0MzU3MDk3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBSQ1UgU2FmZXR5KipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgZG93biB0aGlzIHBhdGNoLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJBaCwgUkNVIVwiIEkgc2VlIGEgY2xhc3NpYyBjYXNlIG9mIHBvdGVudGlhbGx5IGFjY2Vzc2luZyBhIHNoYXJlZCBkYXRhIHN0cnVjdHVyZSwgYGN0eC5zZWxlY3RlZF9za2AsIG91dHNpZGUgdGhlIHByb3RlY3Rpb24gb2YgYW4gUkNVIHJlYWQgbG9jay4gVGhlIG9yaWdpbmFsIGNvZGUgaGFzIHRoaXMgc2VxdWVuY2U6IHdlIGVudGVyIGEgdGltZXIgKGBicGZfdGVzdF90aW1lcl9lbnRlcmApLCBydW4gc29tZXRoaW5nIGluIGEgbG9vcCwgYW5kIHRoZW4gKnBvdGVudGlhbGx5KiBhY2Nlc3MgYGN0eC5zZWxlY3RlZF9za2AgYWZ0ZXIgdGhlIGxvb3AgYW5kIGFmdGVyIHdlIGxlYXZlIHRoZSB0aW1lciAoYGJwZl90ZXN0X3RpbWVyX2xlYXZlYCkuIFRoZSBub3RlIGlzIHF1aXRlIGNsZWFyIC0gYGJwZl90ZXN0X3RpbWVyX2VudGVyYCBpcyBob2xkaW5nIHRoZSBSQ1UgcmVhZCBsb2NrLCBhbmQgY2FsbGluZyBgYnBmX3Rlc3RfdGltZXJfbGVhdmVgIHJlbGVhc2VzIGl0LlxuXG5TbywgdGhlIGlzc3VlIGlzIHRoYXQgaWYgYGN0eC5zZWxlY3RlZF9za2AgaXMgdXNlZCBhZnRlciBsZWF2aW5nIHRoZSB0aW1lciwgd2UncmUgcG90ZW50aWFsbHkgbG9va2luZyBhdCBhIHNvY2tldCB0aGF0J3MgYmVlbiBmcmVlZCBmcm9tIHVuZGVyIHVzIGR1ZSB0byB0aGUgUkNVIGxvY2sgYmVpbmcgZHJvcHBlZC4gVGhhdCdzIGEgdGV4dGJvb2sgUkNVIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvLCBvciBhdCBsZWFzdCBhIGRlcmVmZXJlbmNlIG91dHNpZGUgdGhlIHJlYWQgbG9jay5cblxuVGhlIGZpeCwgYW5kIGl0J3MgYSBnb29kIG9uZSwgbW92ZXMgdGhlIGFjY2VzcyB0byBgY3R4LnNlbGVjdGVkX3NrYCBpbnNpZGUgdGhlIGBpZiAocmV0IFx1MDAzZT0gMClgIGJsb2NrICpiZWZvcmUqIHRoZSBgYnBmX3Rlc3RfdGltZXJfbGVhdmUoXHUwMDI2dClgIGNhbGwuIFRoaXMgZW5zdXJlcyB0aGF0IHRoZSBjb2RlIHRoYXQgdXNlcyB0aGF0IHBvaW50ZXIgaXMgcHJvdGVjdGVkIGJ5IHRoZSBSQ1UgcmVhZCBsb2NrLiAgV2UgaGF2ZSB0aGUgY2hlY2tzIGZvciBgc2tfcmV1c2Vwb3J0YCBhbmQgdGhlIGNhbGwgdG8gYHNvY2tfZ2VuX2Nvb2tpZSgpYCB0aGVyZSwgYWxsIHByb3RlY3RlZCBub3cuIE11Y2ggYmV0dGVyLlxuXG5Ob3csIGxldCdzIGp1c3QgbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBvdGhlciBvYnZpb3VzIGNvbmNlcm5zIGhlcmUuIExldCdzIG1ha2Ugc3VyZSBgdXNlcl9jdHhgIGlzIHByb3Blcmx5IGhhbmRsZWQgaW4gYGJwZl9jdHhfaW5pdCgpYCBhbmQgYGJwZl9jdHhfZmluaXNoKClgLiBUaGF0J3Mgd2hlcmUgd2UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB0aGUgYHVzZXJfY3R4YCBtZW1vcnkgaXMgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYW5kIGNsZWFuZWQgdXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc3NDgsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MDUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNjozNjo0OS44Mzc1NTQyNjVaIiwiU2VxIjo0OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM1NjM1NjIxNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfY3R4X2luaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2JwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2JwZi90ZXN0X3J1bi5jPTc4Mj1pbnQgYnBmX3Byb2dfdGVzdF9ydW5fcmF3X3RwKHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcXG4tLVxcbm5ldC9icGYvdGVzdF9ydW4uYy04NTMtXFxubmV0L2JwZi90ZXN0X3J1bi5jOjg1NDpzdGF0aWMgdm9pZCAqYnBmX2N0eF9pbml0KGNvbnN0IHVuaW9uIGJwZl9hdHRyICprYXR0ciwgdTMyIG1heF9zaXplKVxcbm5ldC9icGYvdGVzdF9ydW4uYy04NTUte1xcbi0tXFxubmV0L2JwZi90ZXN0X3J1bi5jPTEwMzU9aW50IGJwZl9wcm9nX3Rlc3RfcnVuX3NrYihzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIGNvbnN0IHVuaW9uIGJwZl9hdHRyICprYXR0cixcXG4tLVxcbm5ldC9icGYvdGVzdF9ydW4uYy0xMDc3LVxcbm5ldC9icGYvdGVzdF9ydW4uYzoxMDc4OlxcdGN0eCA9IGJwZl9jdHhfaW5pdChrYXR0ciwgc2l6ZW9mKHN0cnVjdCBfX3NrX2J1ZmYpKTtcXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTA3OS1cXHRpZiAoSVNfRVJSKGN0eCkpXFxuLS1cXG5uZXQvYnBmL3Rlc3RfcnVuLmM9MTMzMj1pbnQgYnBmX3Byb2dfdGVzdF9ydW5feGRwKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgY29uc3QgdW5pb24gYnBmX2F0dHIgKmthdHRyLFxcbi0tXFxubmV0L2JwZi90ZXN0X3J1bi5jLTEzNjctXFxubmV0L2JwZi90ZXN0X3J1bi5jOjEzNjg6XFx0Y3R4ID0gYnBmX2N0eF9pbml0KGthdHRyLCBzaXplb2Yoc3RydWN0IHhkcF9tZCkpO1xcbm5ldC9icGYvdGVzdF9ydW4uYy0xMzY5LVxcdGlmIChJU19FUlIoY3R4KSlcXG4tLVxcbm5ldC9icGYvdGVzdF9ydW4uYz0xNTA5PWludCBicGZfcHJvZ190ZXN0X3J1bl9mbG93X2Rpc3NlY3RvcihzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXFxuLS1cXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTUzOS1cXG5uZXQvYnBmL3Rlc3RfcnVuLmM6MTU0MDpcXHR1c2VyX2N0eCA9IGJwZl9jdHhfaW5pdChrYXR0ciwgc2l6ZW9mKHN0cnVjdCBicGZfZmxvd19rZXlzKSk7XFxubmV0L2JwZi90ZXN0X3J1bi5jLTE1NDEtXFx0aWYgKElTX0VSUih1c2VyX2N0eCkpIHtcXG4tLVxcbm5ldC9icGYvdGVzdF9ydW4uYz0xNTc4PWludCBicGZfcHJvZ190ZXN0X3J1bl9za19sb29rdXAoc3RydWN0IGJwZl9wcm9nICpwcm9nLCBjb25zdCB1bmlvbiBicGZfYXR0ciAqa2F0dHIsXFxuLS1cXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTU5OC1cXG5uZXQvYnBmL3Rlc3RfcnVuLmM6MTU5OTpcXHR1c2VyX2N0eCA9IGJwZl9jdHhfaW5pdChrYXR0ciwgc2l6ZW9mKCp1c2VyX2N0eCkpO1xcbm5ldC9icGYvdGVzdF9ydW4uYy0xNjAwLVxcdGlmIChJU19FUlIodXNlcl9jdHgpKVxcbi0tXFxubmV0L2JwZi90ZXN0X3J1bi5jPTE3NzY9aW50IGJwZl9wcm9nX3Rlc3RfcnVuX25mKHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcXG4tLVxcbm5ldC9icGYvdGVzdF9ydW4uYy0xODEwLVxcbm5ldC9icGYvdGVzdF9ydW4uYzoxODExOlxcdHVzZXJfY3R4ID0gYnBmX2N0eF9pbml0KGthdHRyLCBzaXplb2Yoc3RydWN0IG5mX2hvb2tfc3RhdGUpKTtcXG5uZXQvYnBmL3Rlc3RfcnVuLmMtMTgxMi1cXHRpZiAoSVNfRVJSKHVzZXJfY3R4KSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxNjozNjo1MC4xOTM5MTYzN1oiLCJTZXEiOjQ5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMzkxMjYzMzIwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgZnVuY3Rpb25zLCBiYXNlZCBvbiBhIHF1aWNrIHNjYW4gb2YgYG5ldC9icGYvdGVzdF9ydW4uY2A6XG5cbioqSW5pdGlhbCBUaG91Z2h0cyBvbiBCUEYgQ29udGV4dCBJbml0aWFsaXphdGlvbiBhbmQgRmluYWxpemF0aW9uKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIGBicGZfY3R4X2luaXRgIGFuZCBgYnBmX2N0eF9maW5pc2hgLiBJbW1lZGlhdGVseSwgSSdtIHRoaW5raW5nIHRoZXNlIGxpa2VseSBtYW5hZ2UgdGhlIHNldHVwIGFuZCB0ZWFyZG93biBvZiB0aGUgQlBGIGV4ZWN1dGlvbiBjb250ZXh0IGZvciBydW5uaW5nIHRlc3RzLiBHaXZlbiB0aGUgZmlsZSwgYHRlc3RfcnVuLmNgLCBJJ20gZXhwZWN0aW5nIHRoaXMgY29udGV4dCB0byBiZSBzb21ldGhpbmcgc3BlY2lmaWMgdG8gcnVubmluZyBhbmQgdmFsaWRhdGluZyBCUEYgcHJvZ3JhbXMgd2l0aGluIHRoZSBrZXJuZWwncyB0ZXN0aW5nIGZyYW1ld29yaywgbm90IG5lY2Vzc2FyaWx5IGEgZ2VuZXJhbC1wdXJwb3NlIEJQRiBydW50aW1lIGVudmlyb25tZW50LiBJIHN1c3BlY3QgYGJwZl9jdHhfaW5pdGAgd2lsbCBhbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBhbnkgbmVjZXNzYXJ5IHN0cnVjdHVyZXMg4oCTIGxpa2VseSBzb21lIHNvcnQgb2YgY29udGV4dCBzdGF0ZSwgcG9zc2libHkgbWVtb3J5IGZvciBwcm9ncmFtIGV4ZWN1dGlvbiwgYW5kIG1heWJlIHJlZ2lzdGVycyBhbmQgYXV4aWxpYXJ5IGRhdGEgdXNlZCBkdXJpbmcgdGhlIHRlc3RzLiBgYnBmX2N0eF9maW5pc2hgLCBjb252ZXJzZWx5LCBzaG91bGQgYmUgcmVzcG9uc2libGUgZm9yIGNsZWFuaW5nIHVwIHRob3NlIHJlc291cmNlcywgZnJlZWluZyBtZW1vcnksIGFuZCBtYXliZSBldmVuIHBlcmZvcm1pbmcgc29tZSBmaW5hbCBjaGVja3Mgb3IgbG9nZ2luZyBhbnkgdGVzdCByZXN1bHRzLiBJJ20ga2VlbiB0byBzZWUgaWYgdGhleSBoYW5kbGUgYW55IGVycm9yIGNvbmRpdGlvbnMgb3IgY2xlYW51cCBzY2VuYXJpb3MgZ3JhY2VmdWxseS4gSSBhbHNvIHdvbmRlciBob3cgdGhlIGludGVyYWN0aW9ucyB3aXRoIHRoZSB3aWRlciBCUEYgZnJhbWV3b3JrIGFyZSBzdHJ1Y3R1cmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NjgwLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTY6Mzc6MjQuMTA2NTUyMzcyWiIsIlNlcSI6NTAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNDA3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvYnBmL3Rlc3RfcnVuLmNcIixcbiAgXCJGaXJzdExpbmVcIjogODU0LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgODU0OlxcdHN0YXRpYyB2b2lkICpicGZfY3R4X2luaXQoY29uc3QgdW5pb24gYnBmX2F0dHIgKmthdHRyLCB1MzIgbWF4X3NpemUpXFxuIDg1NTpcXHR7XFxuIDg1NjpcXHRcXHR2b2lkIF9fdXNlciAqZGF0YV9pbiA9IHU2NF90b191c2VyX3B0cihrYXR0ci1cXHUwMDNldGVzdC5jdHhfaW4pO1xcbiA4NTc6XFx0XFx0dm9pZCBfX3VzZXIgKmRhdGFfb3V0ID0gdTY0X3RvX3VzZXJfcHRyKGthdHRyLVxcdTAwM2V0ZXN0LmN0eF9vdXQpO1xcbiA4NTg6XFx0XFx0dTMyIHNpemUgPSBrYXR0ci1cXHUwMDNldGVzdC5jdHhfc2l6ZV9pbjtcXG4gODU5OlxcdFxcdHZvaWQgKmRhdGE7XFxuIDg2MDpcXHRcXHRpbnQgZXJyO1xcbiA4NjE6XFx0XFxuIDg2MjpcXHRcXHRpZiAoIWRhdGFfaW4gXFx1MDAyNlxcdTAwMjYgIWRhdGFfb3V0KVxcbiA4NjM6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDg2NDpcXHRcXG4gODY1OlxcdFxcdGRhdGEgPSBremFsbG9jKG1heF9zaXplLCBHRlBfVVNFUik7XFxuIDg2NjpcXHRcXHRpZiAoIWRhdGEpXFxuIDg2NzpcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcXG4gODY4OlxcdFxcbiA4Njk6XFx0XFx0aWYgKGRhdGFfaW4pIHtcXG4gODcwOlxcdFxcdFxcdGVyciA9IGJwZl9jaGVja191YXJnX3RhaWxfemVybyhVU0VSX0JQRlBUUihkYXRhX2luKSwgbWF4X3NpemUsIHNpemUpO1xcbiA4NzE6XFx0XFx0XFx0aWYgKGVycikge1xcbiA4NzI6XFx0XFx0XFx0XFx0a2ZyZWUoZGF0YSk7XFxuIDg3MzpcXHRcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUihlcnIpO1xcbiA4NzQ6XFx0XFx0XFx0fVxcbiA4NzU6XFx0XFxuIDg3NjpcXHRcXHRcXHRzaXplID0gbWluX3QodTMyLCBtYXhfc2l6ZSwgc2l6ZSk7XFxuIDg3NzpcXHRcXHRcXHRpZiAoY29weV9mcm9tX3VzZXIoZGF0YSwgZGF0YV9pbiwgc2l6ZSkpIHtcXG4gODc4OlxcdFxcdFxcdFxcdGtmcmVlKGRhdGEpO1xcbiA4Nzk6XFx0XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVGQVVMVCk7XFxuIDg4MDpcXHRcXHRcXHR9XFxuIDg4MTpcXHRcXHR9XFxuIDg4MjpcXHRcXHRyZXR1cm4gZGF0YTtcXG4gODgzOlxcdH1cXG4gODg0OlxcdFxcbiA4ODU6XFx0c3RhdGljIGludCBicGZfY3R4X2ZpbmlzaChjb25zdCB1bmlvbiBicGZfYXR0ciAqa2F0dHIsXFxuIDg4NjpcXHRcXHRcXHRcXHQgIHVuaW9uIGJwZl9hdHRyIF9fdXNlciAqdWF0dHIsIGNvbnN0IHZvaWQgKmRhdGEsXFxuIDg4NzpcXHRcXHRcXHRcXHQgIHUzMiBzaXplKVxcbiA4ODg6XFx0e1xcbiA4ODk6XFx0XFx0dm9pZCBfX3VzZXIgKmRhdGFfb3V0ID0gdTY0X3RvX3VzZXJfcHRyKGthdHRyLVxcdTAwM2V0ZXN0LmN0eF9vdXQpO1xcbiA4OTA6XFx0XFx0aW50IGVyciA9IC1FRkFVTFQ7XFxuIDg5MTpcXHRcXHR1MzIgY29weV9zaXplID0gc2l6ZTtcXG4gODkyOlxcdFxcbiA4OTM6XFx0XFx0aWYgKCFkYXRhIHx8ICFkYXRhX291dClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTY6Mzc6MjQuMTA2Njc4MDgyWiIsIlNlcSI6NTEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ4OTk1MDc5NzQzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgVW5pbml0aWFsaXplZCBNZW1vcnkgQ29uY2VybnMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFdlJ3JlIGxvb2tpbmcgYXQgYSBwYXRjaCBjb25jZXJuaW5nIG1lbW9yeSBpbml0aWFsaXphdGlvbiB3aXRoaW4gdGhlIEJQRiBjb250ZXh0IGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggUkNVLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgS01TQU4gY29uY2VybnMuIEhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbkZpcnN0LCBJIGV4YW1pbmVkIGhvdyBgdXNlcl9jdHhgIGlzIGhhbmRsZWQuIEl0J3MgYWxsb2NhdGVkIHVzaW5nIGBremFsbG9jYCBpbiBgYnBmX2N0eF9pbml0YCwgc28gaXQncyBndWFyYW50ZWVkIHRvIGJlIHplcm9lZCBvdXQgZnJvbSB0aGUgc3RhcnQuIGBjdHhgIGlzIG9uIHRoZSBzdGFjaywgYW5kIHByb3Blcmx5IGluaXRpYWxpemVkIHRvIHplcm8uIGByZXRgIGFuZCBgZHVyYXRpb25gIGFyZSBhbHNvIGluaXRpYWxpemVkLiAgVGhlIGNvcmUgb2YgdGhlIHBhdGNoIGludm9sdmVzIG1vdmluZyBgdXNlcl9jdHgtXHUwMDNlY29va2llYCBhc3NpZ25tZW50IGFuZCBhIGBjdHguc2VsZWN0ZWRfc2tgIGRlcmVmZXJlbmNlICppbnNpZGUqIHRoZSBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24sIHdoaWNoIGlzIHRoZSBrZXkgdG8gcmVzb2x2aW5nIGFuIFJDVSBsaWZldGltZSBpc3N1ZS4gIElmIGByZXRgIGlzIG5lZ2F0aXZlLCB3ZSBpbW1lZGlhdGVseSBqdW1wIHRvIGBvdXRgLCBieXBhc3NpbmcgdGhlIHBvdGVudGlhbGx5IHByb2JsZW1hdGljIGNvZGUuIElmIGByZXRgIGlzIHBvc2l0aXZlLCB0aGVuIGBicGZfdGVzdF9maW5pc2hgIGFuZCBgYnBmX2N0eF9maW5pc2hgIGNvcHkgYHVzZXJfY3R4YCB0byB1c2Vyc3BhY2UuXG5cblRoZSBkaWZmJ3MgY29yZSBmb2N1cyBpcyBvbiBSQ1Ugc2FmZXR5IGFuZCBhZGRyZXNzZXMgYSBVQUYgaXNzdWUgcmVsYXRlZCB0byBkZXJlZmVyZW5jaW5nIGBjdHguc2VsZWN0ZWRfc2tgIGFmdGVyIGV4aXRpbmcgdGhlIFJDVSByZWFkIGNyaXRpY2FsIHNlY3Rpb24uIE5vIG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucywgcmVhZHMsIG9yIHBvdGVudGlhbCBsZWFrcyB0byB1c2Vyc3BhY2UgYXJlIGludHJvZHVjZWQuIEFueSBjb25jZXJucyBhcm91bmQgdGhlIHNvY2tldCBwb2ludGVyIGFyZSBVQUYvUkNVIHZpb2xhdGlvbnMgd2hpY2ggS0FTQU4vUFJPVkVfUkNVIHdvdWxkIGNhdGNoLlxuXG5Ob3csIGxldCdzIHJpZ29yb3VzbHkgY2hlY2sgdGhvc2UgS01TQU4tcmVsYXRlZCBjcml0ZXJpYTpcblxuMS4gICoqS2VybmVsIHN0cnVjdHVyZXMgdG8gdXNlcnNwYWNlKio6ICBgdXNlcl9jdHhgIGlzIGZ1bGx5IGluaXRpYWxpemVkIHdpdGggYGt6YWxsb2NgLCBhbmQgdGhlICpzYW1lKiBmaWVsZHMgYXJlIGluaXRpYWxpemVkIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIHBhdGNoLiBUaGUgY29kZSBtb3ZlbWVudCBkb2Vzbid0IGFsdGVyIHdoYXQgZ2V0cyBpbml0aWFsaXplZCBhbmQgY29waWVkLiBTbywgbm8gcHJvYmxlbSBoZXJlLlxuXG4yLiAgKipDb25kaXRpb25hbCBsb2dpYyBhbmQgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMqKjogIGByZXRgIGlzIGFsd2F5cyBzZXQgYnkgYGJwZl90ZXN0X3RpbWVyX2NvbnRpbnVlYCBvciBpbml0aWFsaXplZCB0byAtRUlOVkFMLCBzbyBpdCBpcyBhbHdheXMgYSB2YWxpZCB2YWx1ZS4gVGhpcyBpcyBmaW5lLlxuXG4zLiAgKipDb21wbGV4IGRhdGEgc3RydWN0dXJlcyoqOiBObyBuZXcgYWxsb2NhdGlvbnMgb3IgaW5pdGlhbGl6YXRpb24gY2hhbmdlcyBoYXZlIGhhcHBlbmVkIGluIHRoaXMgY2FzZS4gIFRoaXMgaXMgbm90IGFuIGlzc3VlLlxuXG40LiAgKipCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBldGMuKio6IFRoZSBjb2RlIGRvZXMgbm90IGludHJvZHVjZSBuZXcgY2hhbmdlcyB0byBib3VuZHMgY2hlY2tzIG9yIGxlbmd0aCBjaGVja3MuIFRoaXMgaXMgbm90IGFuIGlzc3VlLlxuXG5UaGVyZWZvcmUsIHRoaXMgcGF0Y2ggZG9lcyAqbm90KiBpbnRyb2R1Y2UgS01TQU4gY29uY2VybnMuIEl0J3MgYW4gUkNVIGxpZmV0aW1lIGZpeCwgcHVyZWx5LiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYCBhbmQgcHJvdmlkZSB0aGlzIGRldGFpbGVkIGJyZWFrZG93bi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA2MzgsIk91dHB1dFRva2VucyI6Mjk2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTk5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTY6NDU6MzQuMDU3NDc4MzVaIiwiU2VxIjo1MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODIwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBicGZfcHJvZ190ZXN0X3J1bl9za19sb29rdXAoKWAgaW4gYG5ldC9icGYvdGVzdF9ydW4uY2AgdG8gaW5zcGVjdCBgY3R4LnNlbGVjdGVkX3NrYCBhbmQgdXBkYXRlIGB1c2VyX2N0eC1cXHUwMDNlY29va2llYCBiZWZvcmUgY2FsbGluZyBgYnBmX3Rlc3RfdGltZXJfbGVhdmUoXFx1MDAyNnQpYCwgcmF0aGVyIHRoYW4gYWZ0ZXIgaXQuXFxuXFxuVGhpcyBjaGFuZ2UgZW5zdXJlcyB0aGF0IGBjdHguc2VsZWN0ZWRfc2tgIGlzIGFjY2Vzc2VkIHdoaWxlIHN0aWxsIHByb3RlY3RlZCBieSB0aGUgUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uIGVzdGFibGlzaGVkIGJ5IGBicGZfdGVzdF90aW1lcl9lbnRlcigpYC4gQWNjZXNzaW5nIGBjdHguc2VsZWN0ZWRfc2tgIGFmdGVyIHJlbGVhc2luZyBSQ1UgY291bGQgcmVzdWx0IGluIGEgdXNlLWFmdGVyLWZyZWUgb3IgUkNVIGRlcmVmZXJlbmNlIGJ1Zywgd2hpY2ggaXMgbW9uaXRvcmVkIGJ5IEtBU0FOIGFuZCBQUk9WRV9SQ1UgLyBMT0NLREVQLlxcblxcblRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzOlxcbi0gYHVzZXJfY3R4YCBpcyBhbGxvY2F0ZWQgdmlhIGBremFsbG9jKClgIGluIGBicGZfY3R4X2luaXQoKWAuXFxuLSBTdGFjayBzdHJ1Y3R1cmVzIHN1Y2ggYXMgYGN0eGAgYXJlIHplcm8taW5pdGlhbGl6ZWQgKGB7fWApLlxcbi0gVGhlIGNvbmRpdGlvbiBgcmV0IFxcdTAwM2U9IDBgIGNoZWNrcyBgcmV0YCB3aGljaCBpcyBpbml0aWFsaXplZC91cGRhdGVkIGJ5IGBicGZfdGVzdF90aW1lcl9jb250aW51ZSgpYC5cXG4tIE5vIG5ldyBidWZmZXJzLCB1bmluaXRpYWxpemVkIGZpZWxkcywgb3IgbWVtb3J5IGNvcGllcyBhcmUgaW50cm9kdWNlZC5cXG5cXG5UaGVyZWZvcmUsIHRoaXMgY2hhbmdlIGRvZXMgbm90IHdhcnJhbnQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBicGZfcHJvZ190ZXN0X3J1bl9za19sb29rdXAoKWAgaW4gYG5ldC9icGYvdGVzdF9ydW4uY2AgdG8gaW5zcGVjdCBgY3R4LnNlbGVjdGVkX3NrYCBhbmQgdXBkYXRlIGB1c2VyX2N0eC1cXHUwMDNlY29va2llYCBiZWZvcmUgY2FsbGluZyBgYnBmX3Rlc3RfdGltZXJfbGVhdmUoXFx1MDAyNnQpYCwgcmF0aGVyIHRoYW4gYWZ0ZXIgaXQuXFxuXFxuVGhpcyBjaGFuZ2UgZW5zdXJlcyB0aGF0IGBjdHguc2VsZWN0ZWRfc2tgIGlzIGFjY2Vzc2VkIHdoaWxlIHN0aWxsIHByb3RlY3RlZCBieSB0aGUgUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uIGVzdGFibGlzaGVkIGJ5IGBicGZfdGVzdF90aW1lcl9lbnRlcigpYC4gQWNjZXNzaW5nIGBjdHguc2VsZWN0ZWRfc2tgIGFmdGVyIHJlbGVhc2luZyBSQ1UgY291bGQgcmVzdWx0IGluIGEgdXNlLWFmdGVyLWZyZWUgb3IgUkNVIGRlcmVmZXJlbmNlIGJ1Zywgd2hpY2ggaXMgbW9uaXRvcmVkIGJ5IEtBU0FOIGFuZCBQUk9WRV9SQ1UgLyBMT0NLREVQLlxcblxcblRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzOlxcbi0gYHVzZXJfY3R4YCBpcyBhbGxvY2F0ZWQgdmlhIGBremFsbG9jKClgIGluIGBicGZfY3R4X2luaXQoKWAuXFxuLSBTdGFjayBzdHJ1Y3R1cmVzIHN1Y2ggYXMgYGN0eGAgYXJlIHplcm8taW5pdGlhbGl6ZWQgKGB7fWApLlxcbi0gVGhlIGNvbmRpdGlvbiBgcmV0IFxcdTAwM2U9IDBgIGNoZWNrcyBgcmV0YCB3aGljaCBpcyBpbml0aWFsaXplZC91cGRhdGVkIGJ5IGBicGZfdGVzdF90aW1lcl9jb250aW51ZSgpYC5cXG4tIE5vIG5ldyBidWZmZXJzLCB1bmluaXRpYWxpemVkIGZpZWxkcywgb3IgbWVtb3J5IGNvcGllcyBhcmUgaW50cm9kdWNlZC5cXG5cXG5UaGVyZWZvcmUsIHRoaXMgY2hhbmdlIGRvZXMgbm90IHdhcnJhbnQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflow6mn7m[1] Phase: Succeeded StartedAt: 2026-08-29 16:45:45 +0000 UTC FinishedAt: 2026-08-29 16:45:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6mn7m[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-29 16:45:45 +0000 UTC FinishedAt: 2026-08-29 16:45:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6mn7m[2] Phase: Succeeded StartedAt: 2026-08-29 16:45:45 +0000 UTC FinishedAt: 2026-08-29 20:23:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6mn7m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cd35e1b10182c42b4ae31ee49119463b17d8ba7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_prog_test_run_sk_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cd35e1b10182c42b4ae31ee49119463b17d8ba7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET"],"series_id":"f481e888-ed1a-4e5e-8a6e-3cf810efafa9","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-29 16:45:45 +0000 UTC FinishedAt: 2026-08-29 20:23:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"cd35e1b10182c42b4ae31ee49119463b17d8ba7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_prog_test_run_sk_lookup"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"cd35e1b10182c42b4ae31ee49119463b17d8ba7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET"],"series_id":"f481e888-ed1a-4e5e-8a6e-3cf810efafa9","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow6mn7m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cd35e1b10182c42b4ae31ee49119463b17d8ba7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_prog_test_run_sk_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cd35e1b10182c42b4ae31ee49119463b17d8ba7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET"],"series_id":"f481e888-ed1a-4e5e-8a6e-3cf810efafa9","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-29 16:45:45 +0000 UTC FinishedAt: 2026-08-29 16:45:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6mn7m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cd35e1b10182c42b4ae31ee49119463b17d8ba7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_prog_test_run_sk_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cd35e1b10182c42b4ae31ee49119463b17d8ba7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET"],"series_id":"f481e888-ed1a-4e5e-8a6e-3cf810efafa9","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-29 16:45:45 +0000 UTC FinishedAt: 2026-08-29 16:45:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"cd35e1b10182c42b4ae31ee49119463b17d8ba7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-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-workflow6mn7m/series-workflow6mn7m-convert-artifact-1322770703/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6mn7m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cd35e1b10182c42b4ae31ee49119463b17d8ba7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_prog_test_run_sk_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cd35e1b10182c42b4ae31ee49119463b17d8ba7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET"],"series_id":"f481e888-ed1a-4e5e-8a6e-3cf810efafa9","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-29 16:45:55 +0000 UTC FinishedAt: 2026-08-29 17:01:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6mn7m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cd35e1b10182c42b4ae31ee49119463b17d8ba7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_prog_test_run_sk_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cd35e1b10182c42b4ae31ee49119463b17d8ba7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET"],"series_id":"f481e888-ed1a-4e5e-8a6e-3cf810efafa9","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-29 16:45:55 +0000 UTC FinishedAt: 2026-08-29 17:01:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*e482f230-34a9-49f8-9d30-21f5014066f2,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-workflow6mn7m/series-workflow6mn7m-convert-artifact-1322770703/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": "e0436ab4-a2bd-45dc-a1d5-58c944d87f70", "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-workflow6mn7m/series-workflow6mn7m-build-action-4261793365/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6mn7m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cd35e1b10182c42b4ae31ee49119463b17d8ba7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_prog_test_run_sk_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cd35e1b10182c42b4ae31ee49119463b17d8ba7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET"],"series_id":"f481e888-ed1a-4e5e-8a6e-3cf810efafa9","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-29 16:45:55 +0000 UTC FinishedAt: 2026-08-29 17:01:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*e482f230-34a9-49f8-9d30-21f5014066f2,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-workflow6mn7m/series-workflow6mn7m-convert-artifact-1322770703/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": "e0436ab4-a2bd-45dc-a1d5-58c944d87f70", "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-workflow6mn7m/series-workflow6mn7m-build-action-4261793365/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6mn7m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cd35e1b10182c42b4ae31ee49119463b17d8ba7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_prog_test_run_sk_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cd35e1b10182c42b4ae31ee49119463b17d8ba7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET"],"series_id":"f481e888-ed1a-4e5e-8a6e-3cf810efafa9","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-29 17:01:52 +0000 UTC FinishedAt: 2026-08-29 17:01:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6mn7m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cd35e1b10182c42b4ae31ee49119463b17d8ba7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_prog_test_run_sk_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cd35e1b10182c42b4ae31ee49119463b17d8ba7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET"],"series_id":"f481e888-ed1a-4e5e-8a6e-3cf810efafa9","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-29 17:01:52 +0000 UTC FinishedAt: 2026-08-29 17:01:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6mn7m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cd35e1b10182c42b4ae31ee49119463b17d8ba7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_prog_test_run_sk_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cd35e1b10182c42b4ae31ee49119463b17d8ba7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET"],"series_id":"f481e888-ed1a-4e5e-8a6e-3cf810efafa9","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-29 17:01:52 +0000 UTC FinishedAt: 2026-08-29 17:02:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6mn7m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cd35e1b10182c42b4ae31ee49119463b17d8ba7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_prog_test_run_sk_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cd35e1b10182c42b4ae31ee49119463b17d8ba7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET"],"series_id":"f481e888-ed1a-4e5e-8a6e-3cf810efafa9","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-29 17:01:52 +0000 UTC FinishedAt: 2026-08-29 17:01:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"cd35e1b10182c42b4ae31ee49119463b17d8ba7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET"],"series_id":"f481e888-ed1a-4e5e-8a6e-3cf810efafa9","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-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-workflow6mn7m/series-workflow6mn7m-convert-artifact-65509214/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6mn7m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cd35e1b10182c42b4ae31ee49119463b17d8ba7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_prog_test_run_sk_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cd35e1b10182c42b4ae31ee49119463b17d8ba7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET"],"series_id":"f481e888-ed1a-4e5e-8a6e-3cf810efafa9","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-29 17:02:02 +0000 UTC FinishedAt: 2026-08-29 17:04:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6mn7m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cd35e1b10182c42b4ae31ee49119463b17d8ba7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_prog_test_run_sk_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cd35e1b10182c42b4ae31ee49119463b17d8ba7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET"],"series_id":"f481e888-ed1a-4e5e-8a6e-3cf810efafa9","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-29 17:02:02 +0000 UTC FinishedAt: 2026-08-29 17:04:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*e0436ab4-a2bd-45dc-a1d5-58c944d87f70,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-workflow6mn7m/series-workflow6mn7m-build-action-4261793365/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-workflow6mn7m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cd35e1b10182c42b4ae31ee49119463b17d8ba7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_prog_test_run_sk_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cd35e1b10182c42b4ae31ee49119463b17d8ba7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET"],"series_id":"f481e888-ed1a-4e5e-8a6e-3cf810efafa9","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-29 17:04:13 +0000 UTC FinishedAt: 2026-08-29 17:04:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6mn7m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cd35e1b10182c42b4ae31ee49119463b17d8ba7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_prog_test_run_sk_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cd35e1b10182c42b4ae31ee49119463b17d8ba7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET"],"series_id":"f481e888-ed1a-4e5e-8a6e-3cf810efafa9","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-29 17:04:13 +0000 UTC FinishedAt: 2026-08-29 17:04:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6mn7m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cd35e1b10182c42b4ae31ee49119463b17d8ba7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_prog_test_run_sk_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cd35e1b10182c42b4ae31ee49119463b17d8ba7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET"],"series_id":"f481e888-ed1a-4e5e-8a6e-3cf810efafa9","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-29 17:04:13 +0000 UTC FinishedAt: 2026-08-29 17:20:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6mn7m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cd35e1b10182c42b4ae31ee49119463b17d8ba7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_prog_test_run_sk_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cd35e1b10182c42b4ae31ee49119463b17d8ba7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET"],"series_id":"f481e888-ed1a-4e5e-8a6e-3cf810efafa9","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-29 17:04:13 +0000 UTC FinishedAt: 2026-08-29 17:20:34 +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:*e482f230-34a9-49f8-9d30-21f5014066f2,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-workflow6mn7m/series-workflow6mn7m-convert-artifact-65509214/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": "49615119-369c-42f0-860f-910b5297f533", "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-workflow6mn7m/series-workflow6mn7m-build-action-3871924274/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6mn7m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cd35e1b10182c42b4ae31ee49119463b17d8ba7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_prog_test_run_sk_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cd35e1b10182c42b4ae31ee49119463b17d8ba7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET"],"series_id":"f481e888-ed1a-4e5e-8a6e-3cf810efafa9","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-29 17:04:13 +0000 UTC FinishedAt: 2026-08-29 17:20:24 +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:*e482f230-34a9-49f8-9d30-21f5014066f2,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-workflow6mn7m/series-workflow6mn7m-convert-artifact-65509214/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": "49615119-369c-42f0-860f-910b5297f533", "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-workflow6mn7m/series-workflow6mn7m-build-action-3871924274/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6mn7m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cd35e1b10182c42b4ae31ee49119463b17d8ba7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_prog_test_run_sk_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cd35e1b10182c42b4ae31ee49119463b17d8ba7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET"],"series_id":"f481e888-ed1a-4e5e-8a6e-3cf810efafa9","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-29 17:20:34 +0000 UTC FinishedAt: 2026-08-29 17:20:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6mn7m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cd35e1b10182c42b4ae31ee49119463b17d8ba7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_prog_test_run_sk_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cd35e1b10182c42b4ae31ee49119463b17d8ba7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET"],"series_id":"f481e888-ed1a-4e5e-8a6e-3cf810efafa9","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-29 17:20:34 +0000 UTC FinishedAt: 2026-08-29 17:20:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6mn7m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cd35e1b10182c42b4ae31ee49119463b17d8ba7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_prog_test_run_sk_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cd35e1b10182c42b4ae31ee49119463b17d8ba7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET"],"series_id":"f481e888-ed1a-4e5e-8a6e-3cf810efafa9","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-29 17:20:34 +0000 UTC FinishedAt: 2026-08-29 17:22:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6mn7m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cd35e1b10182c42b4ae31ee49119463b17d8ba7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_prog_test_run_sk_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cd35e1b10182c42b4ae31ee49119463b17d8ba7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET"],"series_id":"f481e888-ed1a-4e5e-8a6e-3cf810efafa9","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-29 17:20:34 +0000 UTC FinishedAt: 2026-08-29 17:22:13 +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:*49615119-369c-42f0-860f-910b5297f533,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-workflow6mn7m/series-workflow6mn7m-build-action-3871924274/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-workflow6mn7m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cd35e1b10182c42b4ae31ee49119463b17d8ba7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_prog_test_run_sk_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cd35e1b10182c42b4ae31ee49119463b17d8ba7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET"],"series_id":"f481e888-ed1a-4e5e-8a6e-3cf810efafa9","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-29 17:22:23 +0000 UTC FinishedAt: 2026-08-29 20:23:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6mn7m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cd35e1b10182c42b4ae31ee49119463b17d8ba7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_prog_test_run_sk_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cd35e1b10182c42b4ae31ee49119463b17d8ba7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET"],"series_id":"f481e888-ed1a-4e5e-8a6e-3cf810efafa9","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-29 17:22:23 +0000 UTC FinishedAt: 2026-08-29 20:23:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_prog_test_run_sk_lookup"],"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:*e0436ab4-a2bd-45dc-a1d5-58c944d87f70,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*49615119-369c-42f0-860f-910b5297f533,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-workflow6mn7m/series-workflow6mn7m-build-action-4261793365/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-workflow6mn7m/series-workflow6mn7m-build-action-3871924274/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow6mn7m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cd35e1b10182c42b4ae31ee49119463b17d8ba7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_prog_test_run_sk_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cd35e1b10182c42b4ae31ee49119463b17d8ba7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET"],"series_id":"f481e888-ed1a-4e5e-8a6e-3cf810efafa9","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-29 17:22:23 +0000 UTC FinishedAt: 2026-08-29 17:22:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6mn7m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cd35e1b10182c42b4ae31ee49119463b17d8ba7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_prog_test_run_sk_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cd35e1b10182c42b4ae31ee49119463b17d8ba7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET"],"series_id":"f481e888-ed1a-4e5e-8a6e-3cf810efafa9","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-29 17:22:23 +0000 UTC FinishedAt: 2026-08-29 17:22:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_prog_test_run_sk_lookup"],"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-workflow6mn7m/series-workflow6mn7m-convert-artifact-517800803/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6mn7m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cd35e1b10182c42b4ae31ee49119463b17d8ba7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_prog_test_run_sk_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cd35e1b10182c42b4ae31ee49119463b17d8ba7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET"],"series_id":"f481e888-ed1a-4e5e-8a6e-3cf810efafa9","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-29 17:22:23 +0000 UTC FinishedAt: 2026-08-29 17:22:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6mn7m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cd35e1b10182c42b4ae31ee49119463b17d8ba7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_prog_test_run_sk_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cd35e1b10182c42b4ae31ee49119463b17d8ba7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET"],"series_id":"f481e888-ed1a-4e5e-8a6e-3cf810efafa9","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-29 17:22:23 +0000 UTC FinishedAt: 2026-08-29 17:22:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6mn7m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cd35e1b10182c42b4ae31ee49119463b17d8ba7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_prog_test_run_sk_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cd35e1b10182c42b4ae31ee49119463b17d8ba7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET"],"series_id":"f481e888-ed1a-4e5e-8a6e-3cf810efafa9","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-29 17:22:23 +0000 UTC FinishedAt: 2026-08-29 17:22:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6mn7m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cd35e1b10182c42b4ae31ee49119463b17d8ba7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_prog_test_run_sk_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cd35e1b10182c42b4ae31ee49119463b17d8ba7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET"],"series_id":"f481e888-ed1a-4e5e-8a6e-3cf810efafa9","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-29 17:22:33 +0000 UTC FinishedAt: 2026-08-29 20:23:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6mn7m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cd35e1b10182c42b4ae31ee49119463b17d8ba7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_prog_test_run_sk_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cd35e1b10182c42b4ae31ee49119463b17d8ba7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET","INET"],"series_id":"f481e888-ed1a-4e5e-8a6e-3cf810efafa9","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-29 17:22:33 +0000 UTC FinishedAt: 2026-08-29 20:23:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*e0436ab4-a2bd-45dc-a1d5-58c944d87f70,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*49615119-369c-42f0-860f-910b5297f533,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-workflow6mn7m/series-workflow6mn7m-build-action-4261793365/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-workflow6mn7m/series-workflow6mn7m-build-action-3871924274/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-workflow6mn7m/series-workflow6mn7m-convert-artifact-517800803/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,}