Name: series-workflowsv4pr Phase: Succeeded StartedAt: 2026-07-08 05:08:46 +0000 UTC FinishedAt: 2026-07-08 10:13:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsv4pr[0] Phase: Succeeded StartedAt: 2026-07-08 05:08:46 +0000 UTC FinishedAt: 2026-07-08 05:22:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsv4pr[0].run-triage Phase: Succeeded StartedAt: 2026-07-08 05:08:46 +0000 UTC FinishedAt: 2026-07-08 05:22:04 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EPOLL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EPOLL" ], "series_id": "9911809c-2abb-4cd9-b09f-9c376c4e0465" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "ep_poll", "do_epoll_wait" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDA1OjIxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VQT0xMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZXBfcG9sbCYjMzQ7LAogICAgJiMzNDtkb19lcG9sbF93YWl0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSB0aW1lb3V0IGNhbGN1bGF0aW9uIGxvZ2ljIGluIGBlcF9wb2xsYCAodXNlZCBieSBgZXBvbGxfd2FpdGApLCBtb3ZpbmcgdGhlIHNsYWNrIGNhbGN1bGF0aW9uIGluc2lkZSB0aGUgd2FpdCBsb29wLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBldmVudHBvbGwgbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBpbiB0aW1lb3V0IGhhbmRsaW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDA1OjIxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYmUxNWVjZGZkYTY1NDdhM2U1OWFkYzljMzM4NzI3ZTk3N2JlNjlhZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVsIDggMDU6MjE6MjMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvZXZlbnRwb2xsLmMgYi9mcy9ldmVudHBvbGwuY1xuaW5kZXggMGU2NWM3NDMxZGZjZGEuLjEyOGQ3ZmQzZDBlYTNmIDEwMDY0NFxuLS0tIGEvZnMvZXZlbnRwb2xsLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V2ZW50cG9sbC5jXG5AQCAtMjI0OCw3ICYjNDM7MjI0OCw2IEBAIHN0YXRpYyBpbnQgZXBfcG9sbChzdHJ1Y3QgZXZlbnRwb2xsICplcCwgc3RydWN0IGVwb2xsX2V2ZW50IF9fdXNlciAqZXZlbnRzLFxuIFx0bG9ja2RlcF9hc3NlcnRfaXJxc19lbmFibGVkKCk7XG4gXG4gXHRpZiAodGltZW91dCBcdTAwMjZcdTAwMjYgKHRpbWVvdXQtXHUwMDNldHZfc2VjIHwgdGltZW91dC1cdTAwM2V0dl9uc2VjKSkge1xuLVx0XHRzbGFjayA9IHNlbGVjdF9lc3RpbWF0ZV9hY2N1cmFjeSh0aW1lb3V0KTtcbiBcdFx0dG8gPSBcdTAwMjZleHBpcmVzO1xuIFx0XHQqdG8gPSB0aW1lc3BlYzY0X3RvX2t0aW1lKCp0aW1lb3V0KTtcbiBcdH0gZWxzZSBpZiAodGltZW91dCkge1xuQEAgLTIzMjcsMTAgJiM0MzsyMzI2LDEzIEBAIHN0YXRpYyBpbnQgZXBfcG9sbChzdHJ1Y3QgZXZlbnRwb2xsICplcCwgc3RydWN0IGVwb2xsX2V2ZW50IF9fdXNlciAqZXZlbnRzLFxuIFxuIFx0XHRzcGluX3VubG9ja19pcnEoXHUwMDI2ZXAtXHUwMDNlbG9jayk7XG4gXG4tXHRcdGlmICghZWF2YWlsKVxuJiM0MztcdFx0aWYgKCFlYXZhaWwpIHtcbiYjNDM7XHRcdFx0aWYgKHRvKVxuJiM0MztcdFx0XHRcdHNsYWNrID0gc2VsZWN0X2VzdGltYXRlX2FjY3VyYWN5KHRpbWVvdXQpO1xuIFx0XHRcdHRpbWVkX291dCA9ICFlcF9zY2hlZHVsZV90aW1lb3V0KHRvKSB8fFxuIFx0XHRcdFx0IXNjaGVkdWxlX2hydGltZW91dF9yYW5nZSh0bywgc2xhY2ssXG4gXHRcdFx0XHRcdFx0XHQgIEhSVElNRVJfTU9ERV9BQlMpO1xuJiM0MztcdFx0fVxuIFx0XHRfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7XG4gXG4gXHRcdC8qXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMDU6MjE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RVBPTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtlcF9wb2xsJiMzNDssCiAgICAmIzM0O2RvX2Vwb2xsX3dhaXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHRpbWVvdXQgY2FsY3VsYXRpb24gbG9naWMgaW4gYGVwX3BvbGxgICh1c2VkIGJ5IGBlcG9sbF93YWl0YCksIG1vdmluZyB0aGUgc2xhY2sgY2FsY3VsYXRpb24gaW5zaWRlIHRoZSB3YWl0IGxvb3AuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGV2ZW50cG9sbCBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIGluIHRpbWVvdXQgaGFuZGxpbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGJlMTVlY2RmZGE2NTQ3YTNlNTlhZGM5YzMzODcyN2U5NzdiZTY5YWUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEp1bCA4IDA1OjIxOjIzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvZXZlbnRwb2xsLmMgYi9mcy9ldmVudHBvbGwuYwppbmRleCAwZTY1Yzc0MzFkZmNkYS4uMTI4ZDdmZDNkMGVhM2YgMTAwNjQ0Ci0tLSBhL2ZzL2V2ZW50cG9sbC5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V2ZW50cG9sbC5jCkBAIC0yMjQ4LDcgJiM0MzsyMjQ4LDYgQEAgc3RhdGljIGludCBlcF9wb2xsKHN0cnVjdCBldmVudHBvbGwgKmVwLCBzdHJ1Y3QgZXBvbGxfZXZlbnQgX191c2VyICpldmVudHMsCiAJbG9ja2RlcF9hc3NlcnRfaXJxc19lbmFibGVkKCk7CiAKIAlpZiAodGltZW91dCAmYW1wOyZhbXA7ICh0aW1lb3V0LSZndDt0dl9zZWMgfCB0aW1lb3V0LSZndDt0dl9uc2VjKSkgewotCQlzbGFjayA9IHNlbGVjdF9lc3RpbWF0ZV9hY2N1cmFjeSh0aW1lb3V0KTsKIAkJdG8gPSAmYW1wO2V4cGlyZXM7CiAJCSp0byA9IHRpbWVzcGVjNjRfdG9fa3RpbWUoKnRpbWVvdXQpOwogCX0gZWxzZSBpZiAodGltZW91dCkgewpAQCAtMjMyNywxMCAmIzQzOzIzMjYsMTMgQEAgc3RhdGljIGludCBlcF9wb2xsKHN0cnVjdCBldmVudHBvbGwgKmVwLCBzdHJ1Y3QgZXBvbGxfZXZlbnQgX191c2VyICpldmVudHMsCiAKIAkJc3Bpbl91bmxvY2tfaXJxKCZhbXA7ZXAtJmd0O2xvY2spOwogCi0JCWlmICghZWF2YWlsKQomIzQzOwkJaWYgKCFlYXZhaWwpIHsKJiM0MzsJCQlpZiAodG8pCiYjNDM7CQkJCXNsYWNrID0gc2VsZWN0X2VzdGltYXRlX2FjY3VyYWN5KHRpbWVvdXQpOwogCQkJdGltZWRfb3V0ID0gIWVwX3NjaGVkdWxlX3RpbWVvdXQodG8pIHx8CiAJCQkJIXNjaGVkdWxlX2hydGltZW91dF9yYW5nZSh0bywgc2xhY2ssCiAJCQkJCQkJICBIUlRJTUVSX01PREVfQUJTKTsKJiM0MzsJCX0KIAkJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOwogCiAJCS8qCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDA1OjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5ODEKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA5MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBLZXJuZWwgUGF0Y2g6IEV2ZW50cG9sbCBhbmQgVGltZW91dCBBY2N1cmFjeSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHNlZW1zIHRvIGJlIHR3ZWFraW5nIGBmcy9ldmVudHBvbGwuY2AuIFRoZSBjb3JlIG9mIHRoaXMgc2VlbXMgdG8gYmUgYWJvdXQgdGhlIHBsYWNlbWVudCBvZiB0aGUgYHNsYWNrID0gc2VsZWN0X2VzdGltYXRlX2FjY3VyYWN5KHRpbWVvdXQpO2AgY2FsbC4gQmVmb3JlLCBpdCB3YXMgaGFwcGVuaW5nIG91dHNpZGUgdGhlIG1haW4gbG9vcCwgYnV0IG5vdyBpdCYjMzk7cyBtb3ZlZCAqaW5zaWRlKiB0aGUgbG9vcCwgcmlnaHQgYmVmb3JlIGBlcF9zY2hlZHVsZV90aW1lb3V0KHRvKWAuIFRoYXQgaW1tZWRpYXRlbHkgcmFpc2VzIGEgZmxhZyDigJMgYGVwX3BvbGxgIGlzLCBvZiBjb3Vyc2UsIGFic29sdXRlbHkgY2VudHJhbCB0byBob3cgYGVwb2xsX3dhaXRgIGZ1bmN0aW9ucy4gVGhpcyBjaGFuZ2UgY291bGQgaGF2ZSBhIG5vbi10cml2aWFsIGltcGFjdCBvbiBwZXJmb3JtYW5jZSBvciwgZXZlbiB3b3JzZSwgY29ycmVjdG5lc3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSB0aGlzIHdhcyBkb25lLiBMZXQmIzM5O3MgZ28gc3RyYWlnaHQgdG8gdGhlIGNvZGUuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGNvbnRleHQgYXJvdW5kIGxpbmUgMjMyNiBvZiBgZnMvZXZlbnRwb2xsLmNgIHRvIHNlZSBwcmVjaXNlbHkgd2hhdCB0aGUgZGV2ZWxvcGVycyB3ZXJlIGFpbWluZyBmb3Igd2l0aCB0aGlzIG1vZGlmaWNhdGlvbi4gSSYjMzk7bGwgZm9jdXMgb24gdGhlIGltcGxpY2F0aW9ucyBmb3IgdGltZW91dCBoYW5kbGluZyB3aXRoaW4gdGhlIGVwb2xsIG1lY2hhbmlzbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAwNToyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2V2ZW50cG9sbC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjI0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjI0MDpcdFx0XHQgICBpbnQgbWF4ZXZlbnRzLCBzdHJ1Y3QgdGltZXNwZWM2NCAqdGltZW91dClcbjIyNDE6XHR7XG4yMjQyOlx0XHRpbnQgcmVzLCB0aW1lZF9vdXQgPSAwO1xuMjI0MzpcdFx0Ym9vbCBlYXZhaWw7XG4yMjQ0Olx0XHR1NjQgc2xhY2sgPSAwO1xuMjI0NTpcdFx0d2FpdF9xdWV1ZV9lbnRyeV90IHdhaXQ7XG4yMjQ2Olx0XHRrdGltZV90IGV4cGlyZXMsICp0byA9IE5VTEw7XG4yMjQ3Olx0XG4yMjQ4Olx0XHRsb2NrZGVwX2Fzc2VydF9pcnFzX2VuYWJsZWQoKTtcbjIyNDk6XHRcbjIyNTA6XHRcdGlmICh0aW1lb3V0IFx1MDAyNlx1MDAyNiAodGltZW91dC1cdTAwM2V0dl9zZWMgfCB0aW1lb3V0LVx1MDAzZXR2X25zZWMpKSB7XG4yMjUxOlx0XHRcdHRvID0gXHUwMDI2ZXhwaXJlcztcbjIyNTI6XHRcdFx0KnRvID0gdGltZXNwZWM2NF90b19rdGltZSgqdGltZW91dCk7XG4yMjUzOlx0XHR9IGVsc2UgaWYgKHRpbWVvdXQpIHtcbjIyNTQ6XHRcdFx0LypcbjIyNTU6XHRcdFx0ICogQXZvaWQgdGhlIHVubmVjZXNzYXJ5IHRyaXAgdG8gdGhlIHdhaXQgcXVldWUgbG9vcCwgaWYgdGhlXG4yMjU2Olx0XHRcdCAqIGNhbGxlciBzcGVjaWZpZWQgYSBub24gYmxvY2tpbmcgb3BlcmF0aW9uLlxuMjI1NzpcdFx0XHQgKi9cbjIyNTg6XHRcdFx0dGltZWRfb3V0ID0gMTtcbjIyNTk6XHRcdH1cbjIyNjA6XHRcbjIyNjE6XHRcdC8qXG4yMjYyOlx0XHQgKiBUaGlzIGNhbGwgaXMgcmFjeTogV2UgbWF5IG9yIG1heSBub3Qgc2VlIGV2ZW50cyB0aGF0IGFyZSBiZWluZyBhZGRlZFxuMjI2MzpcdFx0ICogdG8gdGhlIHJlYWR5IGxpc3QgdW5kZXIgdGhlIGxvY2sgKGUuZy4sIGluIElSUSBjYWxsYmFja3MpLiBGb3IgY2FzZXNcbjIyNjQ6XHRcdCAqIHdpdGggYSBub24temVybyB0aW1lb3V0LCB0aGlzIHRocmVhZCB3aWxsIGNoZWNrIHRoZSByZWFkeSBsaXN0IHVuZGVyXG4yMjY1Olx0XHQgKiBsb2NrIGFuZCB3aWxsIGFkZCB0byB0aGUgd2FpdCBxdWV1ZS4gIEZvciBjYXNlcyB3aXRoIGEgemVyb1xuMjI2NjpcdFx0ICogdGltZW91dCwgdGhlIHVzZXIgYnkgZGVmaW5pdGlvbiBzaG91bGQgbm90IGNhcmUgYW5kIHdpbGwgaGF2ZSB0b1xuMjI2NzpcdFx0ICogcmVjaGVjayBhZ2Fpbi5cbjIyNjg6XHRcdCAqL1xuMjI2OTpcdFx0ZWF2YWlsID0gZXBfZXZlbnRzX2F2YWlsYWJsZShlcCk7XG4yMjcwOlx0XG4yMjcxOlx0XHR3aGlsZSAoMSkge1xuMjI3MjpcdFx0XHRpZiAoZWF2YWlsKSB7XG4yMjczOlx0XHRcdFx0cmVzID0gZXBfdHJ5X3NlbmRfZXZlbnRzKGVwLCBldmVudHMsIG1heGV2ZW50cyk7XG4yMjc0Olx0XHRcdFx0aWYgKHJlcylcbjIyNzU6XHRcdFx0XHRcdHJldHVybiByZXM7XG4yMjc2Olx0XHRcdH1cbjIyNzc6XHRcbjIyNzg6XHRcdFx0aWYgKHRpbWVkX291dClcbjIyNzk6XHRcdFx0XHRyZXR1cm4gMDtcbjIyODA6XHRcbjIyODE6XHRcdFx0ZWF2YWlsID0gZXBfYnVzeV9sb29wKGVwKTtcbjIyODI6XHRcdFx0aWYgKGVhdmFpbClcbjIyODM6XHRcdFx0XHRjb250aW51ZTtcbjIyODQ6XHRcbjIyODU6XHRcdFx0aWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKVxuMjI4NjpcdFx0XHRcdHJldHVybiAtRUlOVFI7XG4yMjg3Olx0XG4yMjg4Olx0XHRcdC8qXG4yMjg5Olx0XHRcdCAqIEludGVybmFsbHkgaW5pdF93YWl0KCkgdXNlcyBhdXRvcmVtb3ZlX3dha2VfZnVuY3Rpb24oKSxcbjIyOTA6XHRcdFx0ICogdGh1cyB3YWl0IGVudHJ5IGlzIHJlbW92ZWQgZnJvbSB0aGUgd2FpdCBxdWV1ZSBvbiBlYWNoXG4yMjkxOlx0XHRcdCAqIHdha2V1cC4gV2h5IGl0IGlzIGltcG9ydGFudD8gSW4gY2FzZSBvZiBzZXZlcmFsIHdhaXRlcnNcbjIyOTI6XHRcdFx0ICogZWFjaCBuZXcgd2FrZXVwIHdpbGwgaGl0IHRoZSBuZXh0IHdhaXRlciwgZ2l2aW5nIGl0IHRoZVxuMjI5MzpcdFx0XHQgKiBjaGFuY2UgdG8gaGFydmVzdCBuZXcgZXZlbnQuIE90aGVyd2lzZSB3YWtldXAgY2FuIGJlXG4yMjk0Olx0XHRcdCAqIGxvc3QuIFRoaXMgaXMgYWxzbyBnb29kIHBlcmZvcm1hbmNlLXdpc2UsIGJlY2F1c2Ugb25cbjIyOTU6XHRcdFx0ICogbm9ybWFsIHdha2V1cCBwYXRoIG5vIG5lZWQgdG8gY2FsbCBfX3JlbW92ZV93YWl0X3F1ZXVlKClcbjIyOTY6XHRcdFx0ICogZXhwbGljaXRseSwgdGh1cyBlcC1cdTAwM2Vsb2NrIGlzIG5vdCB0YWtlbiwgd2hpY2ggaGFsdHMgdGhlXG4yMjk3Olx0XHRcdCAqIGV2ZW50IGRlbGl2ZXJ5LlxuMjI5ODpcdFx0XHQgKlxuMjI5OTpcdFx0XHQgKiBJbiBmYWN0LCB3ZSBub3cgdXNlIGFuIGV2ZW4gbW9yZSBhZ2dyZXNzaXZlIGZ1bmN0aW9uIHRoYXRcbjIzMDA6XHRcdFx0ICogdW5jb25kaXRpb25hbGx5IHJlbW92ZXMsIGJlY2F1c2Ugd2UgZG9uJiMzOTt0IHJldXNlIHRoZSB3YWl0XG4yMzAxOlx0XHRcdCAqIGVudHJ5IGJldHdlZW4gbG9vcCBpdGVyYXRpb25zLiBUaGlzIGxldHMgdXMgYWxzbyBhdm9pZCB0aGVcbjIzMDI6XHRcdFx0ICogcGVyZm9ybWFuY2UgaXNzdWUgaWYgYSBwcm9jZXNzIGlzIGtpbGxlZCwgY2F1c2luZyBhbGwgb2YgaXRzXG4yMzAzOlx0XHRcdCAqIHRocmVhZHMgdG8gd2FrZSB1cCB3aXRob3V0IGJlaW5nIHJlbW92ZWQgbm9ybWFsbHkuXG4yMzA0Olx0XHRcdCAqL1xuMjMwNTpcdFx0XHRpbml0X3dhaXQoXHUwMDI2d2FpdCk7XG4yMzA2Olx0XHRcdHdhaXQuZnVuYyA9IGVwX2F1dG9yZW1vdmVfd2FrZV9mdW5jdGlvbjtcbjIzMDc6XHRcbjIzMDg6XHRcdFx0c3Bpbl9sb2NrX2lycShcdTAwMjZlcC1cdTAwM2Vsb2NrKTtcbjIzMDk6XHRcdFx0LypcbjIzMTA6XHRcdFx0ICogQmFycmllcmxlc3MgdmFyaWFudCwgd2FpdHF1ZXVlX2FjdGl2ZSgpIGlzIGNhbGxlZCB1bmRlclxuMjMxMTpcdFx0XHQgKiB0aGUgc2FtZSBsb2NrIG9uIHdha2V1cCBlcF9wb2xsX2NhbGxiYWNrKCkgc2lkZSwgc28gaXRcbjIzMTI6XHRcdFx0ICogaXMgc2FmZSB0byBhdm9pZCBhbiBleHBsaWNpdCBiYXJyaWVyLlxuMjMxMzpcdFx0XHQgKi9cbjIzMTQ6XHRcdFx0X19zZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpO1xuMjMxNTpcdFxuMjMxNjpcdFx0XHQvKlxuMjMxNzpcdFx0XHQgKiBEbyB0aGUgZmluYWwgY2hlY2sgdW5kZXIgdGhlIGxvY2suIGVwX3N0YXJ0L2RvbmVfc2NhbigpXG4yMzE4Olx0XHRcdCAqIHBsYXlzIHdpdGggdHdvIGxpc3RzICgtXHUwMDNlcmRsbGlzdCBhbmQgLVx1MDAzZW92Zmxpc3QpIGFuZCB0aGVyZVxuMjMxOTpcdFx0XHQgKiBpcyBhbHdheXMgYSByYWNlIHdoZW4gYm90aCBsaXN0cyBhcmUgZW1wdHkgZm9yIHNob3J0XG4yMzIwOlx0XHRcdCAqIHBlcmlvZCBvZiB0aW1lIGFsdGhvdWdoIGV2ZW50cyBhcmUgcGVuZGluZywgc28gbG9jayBpc1xuMjMyMTpcdFx0XHQgKiBpbXBvcnRhbnQuXG4yMzIyOlx0XHRcdCAqL1xuMjMyMzpcdFx0XHRlYXZhaWwgPSBlcF9ldmVudHNfYXZhaWxhYmxlKGVwKTtcbjIzMjQ6XHRcdFx0aWYgKCFlYXZhaWwpXG4yMzI1Olx0XHRcdFx0X19hZGRfd2FpdF9xdWV1ZV9leGNsdXNpdmUoXHUwMDI2ZXAtXHUwMDNld3EsIFx1MDAyNndhaXQpO1xuMjMyNjpcdFxuMjMyNzpcdFx0XHRzcGluX3VubG9ja19pcnEoXHUwMDI2ZXAtXHUwMDNlbG9jayk7XG4yMzI4Olx0XG4yMzI5Olx0XHRcdGlmICghZWF2YWlsKSB7XG4yMzMwOlx0XHRcdFx0aWYgKHRvKVxuMjMzMTpcdFx0XHRcdFx0c2xhY2sgPSBzZWxlY3RfZXN0aW1hdGVfYWNjdXJhY3kodGltZW91dCk7XG4yMzMyOlx0XHRcdFx0dGltZWRfb3V0ID0gIWVwX3NjaGVkdWxlX3RpbWVvdXQodG8pIHx8XG4yMzMzOlx0XHRcdFx0XHQhc2NoZWR1bGVfaHJ0aW1lb3V0X3JhbmdlKHRvLCBzbGFjayxcbjIzMzQ6XHRcdFx0XHRcdFx0XHRcdCAgSFJUSU1FUl9NT0RFX0FCUyk7XG4yMzM1Olx0XHRcdH1cbjIzMzY6XHRcdFx0X19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpO1xuMjMzNzpcdFxuMjMzODpcdFx0XHQvKlxuMjMzOTpcdFx0XHQgKiBXZSB3ZXJlIHdva2VuIHVwLCB0aHVzIGdvIGFuZCB0cnkgdG8gaGFydmVzdCBzb21lIGV2ZW50cy5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAwNToyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODA3CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMzU4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRXBvbGwgVGltZW91dCBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGFib3V0IG9wdGltaXppbmcgdGhlIGBlcG9sbF93YWl0YCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IGJ5IGRlbGF5aW5nIHRoZSBjYWxjdWxhdGlvbiBvZiBgc2xhY2tgLiBUaGUgY29yZSBpZGVhIGlzIHRvIGF2b2lkIGNhbGxpbmcgYHNlbGVjdF9lc3RpbWF0ZV9hY2N1cmFjeWAgdW5sZXNzIGl0JiMzOTtzIHN0cmljdGx5IG5lY2Vzc2FyeS4gUmlnaHQsIHRoYXQmIzM5O3MgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYXMgaXQgYXZvaWRzIHRoYXQgY2FsY3VsYXRpb24gd2hlbiBgZWF2YWlsYCBpcyB0cnVlIG9yIGlmIHRoZXJlJiMzOTtzIGEgdGltZW91dCBiZWZvcmUgdGhhdCBwb2ludC4gTm93LCBgc2VsZWN0X2VzdGltYXRlX2FjY3VyYWN5YCBpcyB0aGUgZnVuY3Rpb24gdGhhdCBhY3R1YWxseSAqY2FsY3VsYXRlcyogdGhlIHNsYWNrLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIGlzIHRoaXMgZXZlbiB3b3J0aCBmdXp6aW5nPyBJdCBzZWVtcyBsaWtlIGEgcmVsYXRpdmVseSBtaW5vciBvcHRpbWl6YXRpb24gaW4gdGhlIGNvbnRleHQgb2YgYGVwb2xsX3dhaXRgLgoKV2FpdCwgYWN0dWFsbHksIGBlcG9sbF93YWl0YCAqaXMqIGRlZmluaXRlbHkgYSByZWFjaGFibGUgY29kZSBwYXRoLCBzbyB0aGF0IG1ha2VzIHRoaXMgY2hhbmdlIHBvdGVudGlhbGx5IHJlbGV2YW50LiBJIG5lZWQgdG8gdGhpbmsgYWJvdXQgdGhlIHBvc3NpYmxlIHNpZGUgZWZmZWN0cy4gQ291bGQgaXQgaW50cm9kdWNlIGEgYnVnPyBMZXQmIzM5O3MgdHJhY2UgaXQgb3V0LiBJZiBgdG9gIGlzIG5vdCBOVUxMLCBgc2xhY2tgICppcyogY2FsY3VsYXRlZC4gSWYgYHRvYCAqaXMqIE5VTEwsIGBzbGFja2AgaXMgaW5pdGlhbGl6ZWQgdG8gMCBhdCB0aGUgdG9wIG9mIHRoZSBmdW5jdGlvbiBhbnl3YXkuIE9rYXksIHRoYXQgc2VlbXMgc3RyYWlnaHRmb3J3YXJkLgoKSG9sZCBvbiwgSSByZW1lbWJlciB0aGF0IGBlcF9zY2hlZHVsZV90aW1lb3V0YCBkb2VzbiYjMzk7dCBhY3R1YWxseSB1c2UgdGhlIGBzbGFja2AgdmFyaWFibGUgZGlyZWN0bHkuIEJ1dCwgd2FpdCwgYHNjaGVkdWxlX2hydGltZW91dF9yYW5nZWAgKmRvZXMqIHVzZSBpdCEgU28sIHRoaXMgaXMgcG90ZW50aWFsbHkgaW1wb3J0YW50IHRvIGdldCByaWdodC4gTGV0JiMzOTtzIGxvb2sgYXQgdGhlIGJlZm9yZSBhbmQgYWZ0ZXIgY29kZSBzbmlwcGV0cyB0byBjb21wYXJlLgoKT2theSwgaGVyZSYjMzk7cyB0aGUgb3JpZ2luYWwgY29kZSBzbmlwcGV0OgpgYGBjCglpZiAodGltZW91dCAmYW1wOyZhbXA7ICh0aW1lb3V0LSZndDt0dl9zZWMgfCB0aW1lb3V0LSZndDt0dl9uc2VjKSkgewoJCXNsYWNrID0gc2VsZWN0X2VzdGltYXRlX2FjY3VyYWN5KHRpbWVvdXQpOwoJCXRvID0gJmFtcDtleHBpcmVzOwoJCSp0byA9IHRpbWVzcGVjNjRfdG9fa3RpbWUoKnRpbWVvdXQpOwoJfSBlbHNlIGlmICh0aW1lb3V0KSB7CmBgYAoKQW5kIG5vdyB0aGUgbmV3IGNvZGU6CmBgYGMKCQlpZiAoIWVhdmFpbCkgewoJCQlpZiAodG8pCgkJCQlzbGFjayA9IHNlbGVjdF9lc3RpbWF0ZV9hY2N1cmFjeSh0aW1lb3V0KTsKCQkJdGltZWRfb3V0ID0gIWVwX3NjaGVkdWxlX3RpbWVvdXQodG8pIHx8CgkJCQkhc2NoZWR1bGVfaHJ0aW1lb3V0X3JhbmdlKHRvLCBzbGFjaywKCQkJCQkJCSAgSFJUSU1FUl9NT0RFX0FCUyk7CgkJfQpgYGAKCk9rYXksIHNvIHdlJiMzOTtyZSBkZWZlcnJpbmcgdGhhdCBjYWxjdWxhdGlvbi4gV2UgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gdGhhdCB0aGlzIGRvZXNuJiMzOTt0IGNyZWF0ZSBzb21lIHN1YnRsZSB0aW1pbmcgaXNzdWUsIGVzcGVjaWFsbHkgd2l0aCB0aGUgdXNlIG9mIGBzY2hlZHVsZV9ocnRpbWVvdXRfcmFuZ2VgLiBJIG5lZWQgdG8gbG9vayBhdCBgZXBfc2NoZWR1bGVfdGltZW91dCh0bylgIGNsb3NlbHkuIElzIHRoYXQgYSBtYWNybyBvciBhIGZ1bmN0aW9uPyBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBkZWZpbml0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDA1OjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2VwX3NjaGVkdWxlX3RpbWVvdXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXZlbnRwb2xsLmM9MjE5OD1zdGF0aWMgaW50IGVwX3RyeV9zZW5kX2V2ZW50cyhzdHJ1Y3QgZXZlbnRwb2xsICplcCxcbi0tXG5mcy9ldmVudHBvbGwuYy0yMjEzLVxuZnMvZXZlbnRwb2xsLmM6MjIxNDpzdGF0aWMgaW50IGVwX3NjaGVkdWxlX3RpbWVvdXQoa3RpbWVfdCAqdG8pXG5mcy9ldmVudHBvbGwuYy0yMjE1LXtcbi0tXG5mcy9ldmVudHBvbGwuYz0yMjM5PXN0YXRpYyBpbnQgZXBfcG9sbChzdHJ1Y3QgZXZlbnRwb2xsICplcCwgc3RydWN0IGVwb2xsX2V2ZW50IF9fdXNlciAqZXZlbnRzLFxuLS1cbmZzL2V2ZW50cG9sbC5jLTIzMzEtXHRcdFx0XHRzbGFjayA9IHNlbGVjdF9lc3RpbWF0ZV9hY2N1cmFjeSh0aW1lb3V0KTtcbmZzL2V2ZW50cG9sbC5jOjIzMzI6XHRcdFx0dGltZWRfb3V0ID0gIWVwX3NjaGVkdWxlX3RpbWVvdXQodG8pIHx8XG5mcy9ldmVudHBvbGwuYy0yMzMzLVx0XHRcdFx0IXNjaGVkdWxlX2hydGltZW91dF9yYW5nZSh0bywgc2xhY2ssXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMDU6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDk0MAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBGdW5jdGlvbiBgZXBfc2NoZWR1bGVfdGltZW91dGAqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBlcF9zY2hlZHVsZV90aW1lb3V0YCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgaW4gdGhlIGJyb2FkZXIgc3lzdGVtLiBJJiMzOTttIGFzc3VtaW5nLCBiYXNlZCBvbiB0aGUgbmFtaW5nLCB0aGF0IGl0JiMzOTtzIHJlbGF0ZWQgdG8gZW5kcG9pbnQgbWFuYWdlbWVudCBhbmQgcHJvYmFibHkgc29tZSBraW5kIG9mIHRpbWVvdXQgbWVjaGFuaXNtLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIGNoZWNrIGl0cyBjYWxsIHNpdGVzIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHdoZXJlIHRoaXMgaXMgYmVpbmcgdXNlZCBhbmQgd2h5LiBJcyBpdCBwYXJ0IG9mIHRoZSBjb25uZWN0aW9uIGxpZmVjeWNsZSBtYW5hZ2VtZW50PyBJcyBpdCByZWxhdGVkIHRvIGVycm9yIHJlY292ZXJ5IG9yIHJlc291cmNlIGNsZWFudXA/IEFyZSB3ZSBkZWFsaW5nIHdpdGggYWN0aXZlIHBvbGxpbmcsIG9yIGlzIHRoaXMgbW9yZSBhYm91dCBpZGxlIGNvbm5lY3Rpb24gbW9uaXRvcmluZz8gVGhlIG5hbWUgaXMgdmVyeSBnZW5lcmljLCB3aGljaCBpbXBsaWVzIGl0JiMzOTtzIGVpdGhlciB2ZXJ5IGNyaXRpY2FsIG9yIHdpZGVseSB1c2VkLiBUaW1lIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aCBhbmQgaWRlbnRpZnkgaG93IHRoaXMgdGltZW91dCBpbmZsdWVuY2VzIHRoZSBvdmVyYWxsIGFwcGxpY2F0aW9uIGZsb3cuIEkmIzM5O20gZ29pbmcgdG8gbG9vayBmb3IgYW55IHN1YnRsZSBkaWZmZXJlbmNlcyBpbiBiZWhhdmlvciBiYXNlZCBvbiBob3cgdGhlIHRpbWVvdXQgaXMgc2V0LiBJIHdhbnQgdG8gc2VlIGlmIHRoZSB0aW1lb3V0IGlzIGJhc2VkIG9uIHN5c3RlbSB0aW1lIG9yIG1vbm90b25pYyBjbG9jay4gVGhlIGFuc3dlciB0byB0aG9zZSBxdWVzdGlvbnMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgcG90ZW50aWFsIHJpc2tzIHRoYXQgYXJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMDU6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9ldmVudHBvbGwuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIyMTQsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjIxNDpcdHN0YXRpYyBpbnQgZXBfc2NoZWR1bGVfdGltZW91dChrdGltZV90ICp0bylcbjIyMTU6XHR7XG4yMjE2Olx0XHRpZiAodG8pXG4yMjE3Olx0XHRcdHJldHVybiBrdGltZV9hZnRlcigqdG8sIGt0aW1lX2dldCgpKTtcbjIyMTg6XHRcdGVsc2VcbjIyMTk6XHRcdFx0cmV0dXJuIDE7XG4yMjIwOlx0fVxuMjIyMTpcdFxuMjIyMjpcdC8qKlxuMjIyMzpcdCAqIGVwX3BvbGwgLSBSZXRyaWV2ZXMgcmVhZHkgZXZlbnRzLCBhbmQgZGVsaXZlcnMgdGhlbSB0byB0aGUgY2FsbGVyLXN1cHBsaWVkXG4yMjI0Olx0ICogICAgICAgICAgIGV2ZW50IGJ1ZmZlci5cbjIyMjU6XHQgKlxuMjIyNjpcdCAqIEBlcDogUG9pbnRlciB0byB0aGUgZXZlbnRwb2xsIGNvbnRleHQuXG4yMjI3Olx0ICogQGV2ZW50czogUG9pbnRlciB0byB0aGUgdXNlcnNwYWNlIGJ1ZmZlciB3aGVyZSB0aGUgcmVhZHkgZXZlbnRzIHNob3VsZCBiZVxuMjIyODpcdCAqICAgICAgICAgIHN0b3JlZC5cbjIyMjk6XHQgKiBAbWF4ZXZlbnRzOiBTaXplIChpbiB0ZXJtcyBvZiBudW1iZXIgb2YgZXZlbnRzKSBvZiB0aGUgY2FsbGVyIGV2ZW50IGJ1ZmZlci5cbjIyMzA6XHQgKiBAdGltZW91dDogTWF4aW11bSB0aW1lb3V0IGZvciB0aGUgcmVhZHkgZXZlbnRzIGZldGNoIG9wZXJhdGlvbiwgaW5cbjIyMzE6XHQgKiAgICAgICAgICAgdGltZXNwZWMuIElmIHRoZSB0aW1lb3V0IGlzIHplcm8sIHRoZSBmdW5jdGlvbiB3aWxsIG5vdCBibG9jayxcbjIyMzI6XHQgKiAgICAgICAgICAgd2hpbGUgaWYgdGhlIEB0aW1lb3V0IHB0ciBpcyBOVUxMLCB0aGUgZnVuY3Rpb24gd2lsbCBibG9ja1xuMjIzMzpcdCAqICAgICAgICAgICB1bnRpbCBhdCBsZWFzdCBvbmUgZXZlbnQgaGFzIGJlZW4gcmV0cmlldmVkIChvciBhbiBlcnJvclxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDA1OjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU1NDkKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiAyMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBkZWxheWluZyB0aGUgY2FsbCB0byBgc2VsZWN0X2VzdGltYXRlX2FjY3VyYWN5YC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgaXQgKm1pZ2h0KiBvZmZlciBhIHNsaWdodCBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudCBieSBub3QgYmxvY2tpbmcgYXMgZWFybHkuIFRoZSBxdWVzdGlvbiBpcywgaXMgaXQgd29ydGggZnV6emluZz8gSXQmIzM5O3MgYSBzbWFsbCBtb2RpZmljYXRpb24gd2l0aGluIGBlcF9wb2xsYCwgYnV0Li4uIGBlcG9sbF93YWl0YCBpcyBhbHJlYWR5IGEgc3lzY2FsbCB0aGF0JiMzOTtzIGhlYXZpbHkgdGFyZ2V0ZWQgYnkgZnV6emluZyBlZmZvcnRzLgoKVGhpcyAqaXMqIGEgZnVuY3Rpb25hbCBjaGFuZ2Ug4oCTIGl0IGFsdGVycyAqd2hlbiogYW5kIHBvdGVudGlhbGx5ICpob3cgb2Z0ZW4qIGBzZWxlY3RfZXN0aW1hdGVfYWNjdXJhY3lgIGdldHMgY2FsbGVkLiBTcGVjaWZpY2FsbHksIGl0IGNvdWxkIGJlIGNhbGxlZCByZXBlYXRlZGx5IGlmIHRoZSBsb29wIGl0ZXJhdGVzIGFuZCBpZiBgdG9gIGlzbiYjMzk7dCBOVUxMIGFuZCBgIWVhdmFpbGAuIFRoaW5raW5nIHRoaXMgdGhyb3VnaCwgdGhvdWdoLCBpZiB0aGUgbG9vcCAqZG9lcyogaXRlcmF0ZSwgYHNsYWNrYCBpcyByZWNhbGN1bGF0ZWQsIHdoaWNoIGlzIGltcG9ydGFudC4gTm93LCBpcyB0aGUgYHRpbWVvdXRgIGl0c2VsZiBiZWluZyBtb2RpZmllZCB3aXRoaW4gdGhlIGxvb3A/IE5vcGUuIEl0JiMzOTtzIGEgcG9pbnRlciB0byBhIGBzdHJ1Y3QgdGltZXNwZWM2NGAsIHdoaWNoIHJlbWFpbnMgdW50b3VjaGVkLCBzbyByZWNhbGN1bGF0aW5nIGFuZCBwb3RlbnRpYWxseSBjYWxsaW5nIGBzZWxlY3RfZXN0aW1hdGVfYWNjdXJhY3lgIG11bHRpcGxlIHRpbWVzIGlzbiYjMzk7dCBwcm9ibGVtYXRpYy4gV2FpdCwgYHNlbGVjdF9lc3RpbWF0ZV9hY2N1cmFjeWAgdXNlcyBgY3VycmVudC0mZ3Q7dGltZXJfc2xhY2tfbnNgLgoKQWxyaWdodCwgSSYjMzk7bSBsZWFuaW5nIHRvd2FyZHMgeWVzLCB0aGlzIGlzIHdvcnRoIGZ1enppbmcuIEl0JiMzOTtzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgZGlyZWN0bHkgd2l0aGluIGNvcmUga2VybmVsIGxvZ2ljIHJlbGF0ZWQgdG8gYGVwb2xsYC4gVGhlIGtleSBmdW5jdGlvbnMgdG8gZm9jdXMgb24gYXJlIGBlcF9wb2xsYCBhbmQgYGRvX2Vwb2xsX3dhaXRgLiBJIHNob3VsZCBjaGVjayBmb3IgYW55IGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLCBwYXJ0aWN1bGFybHkgaWYgYW55dGhpbmcgc3BlY2lmaWMgZGlzYWJsZXMgb3IgbW9kaWZpZXMgYEVQT0xMYC4gQWx0aG91Z2ggYEVQT0xMYCBpcyB1c3VhbGx5IGVuYWJsZWQsIGl0IGlzIHdvcnRoIGNvbmZpcm1pbmcgdGhhdCB0aGVyZSBhcmUgbm8gc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgbWlnaHQgYWZmZWN0IHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDA1OjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBFUE9MTCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbml0L0tjb25maWc9MTg1OT1jb25maWcgRlVURVhfUk9CVVNUX1VOTE9DS1xuLS1cbmluaXQvS2NvbmZpZy0xODYxLVxuaW5pdC9LY29uZmlnOjE4NjI6Y29uZmlnIEVQT0xMXG5pbml0L0tjb25maWctMTg2My1cdGJvb2wgXCYjMzQ7RW5hYmxlIGV2ZW50cG9sbCBzdXBwb3J0XCYjMzQ7IGlmIEVYUEVSVFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAwNToyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MjI1CgkJCQkJCQlvdXRwdXQ6IDEwNAoJCQkJCQkJdGhvdWdodHM6IDEwOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBGdXp6aW5nIFN0cmF0ZWd5OiBFUE9MTCBUaW1lb3V0IExvZ2ljKioKCk9rYXksIHNvIGBFUE9MTGAgaXMgZW5hYmxlZCBieSBkZWZhdWx0LCB3aGljaCBpcyBjb252ZW5pZW50LiBUaGUgcGxhbiBpcyBjbGVhcjogSSBuZWVkIHRvIHRhcmdldCB0aGlzLiBJJiMzOTt2ZSBnb3QgbXkgcGFyYW1ldGVycyByZWFkeSB0byBnby4KClRoZSBjcml0aWNhbCB0aGluZyBpcyB0byBzZXQgdGhlIHJlc3VsdHMuIEkmIzM5O20gcHJpb3JpdGl6aW5nIHRoaXMsIEkmIzM5O20gc2V0dGluZyBgV29ydGhGdXp6aW5nYCB0byBgdHJ1ZWAuCgpJJiMzOTttIHplcm9pbmcgaW4gb24gYCYjMzQ7ZXBfcG9sbCYjMzQ7YCBhbmQgYCYjMzQ7ZG9fZXBvbGxfd2FpdCYjMzQ7YCBzcGVjaWZpY2FsbHkg4oCTIHRob3NlIGFyZSB0aGUgZnVuY3Rpb25zIEkgd2FudCB0byBmb2N1cyBteSBlZmZvcnRzIG9uLiBUaGF0JiMzOTtzIHRoZSBjb3JlIG9mIG15IGFwcHJvYWNoLgoKVGhlbiwgdG8gcmVpbmZvcmNlIG15IGZvY3VzLCBJIHdpbGwgZW5zdXJlIHRoYXQgdGhlIGAmIzM0O0VQT0xMJiMzNDtgIGNvbmZpZ3VyYXRpb24gaXMgYWN0aXZlbHkgZW5hYmxlZC4gSXQmIzM5O3MgdGhlIGx5bmNocGluIGZvciB0aGlzIHRlc3QuCgpNeSByZWFzb25pbmc/IFNpbXBsZS4gVGhpcyBwYXRjaCBpcyBmdW5kYW1lbnRhbGx5IGNoYW5naW5nIGhvdyB0aW1lb3V0cyBhcmUgaGFuZGxlZCBpbiB0aGUgYGVwb2xsX3dhaXRgIHBhdGguIEl0JiMzOTtzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgY29yZSBldmVudHBvbGwgbW9kaWZpY2F0aW9uLiBUaGUgc2xhY2sgY2FsY3VsYXRpb24gaXMgYmVpbmcgbW92ZWQuIFRoaXMgd2FycmFudHMgdGhvcm91Z2ggZnV6emluZyB0byBndWFyZCBhZ2FpbnN0IGFueSByZWdyZXNzaW9ucyBpbiB0aW1lb3V0IGhhbmRsaW5nLiBJIG5lZWQgdG8gbWFrZSBjZXJ0YWluIHRoYXQgdGhlc2UgY3JpdGljYWwgdGltZSBtYW5hZ2VtZW50IGJlaGF2aW9ycyBjb250aW51ZSB0byBiZWhhdmUgYXMgZXhwZWN0ZWQsIGFuZCB0aGF0IG5vIG5ldyB2dWxuZXJhYmlsaXRpZXMgYXJlIGludHJvZHVjZWQuIFRoaXMgaXMgdGhlIHBsYWNlIHRvIGJlIG1ldGljdWxvdXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDA1OjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtFUE9MTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2VwX3BvbGwmIzM0OywKICAgICYjMzQ7ZG9fZXBvbGxfd2FpdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgdGltZW91dCBjYWxjdWxhdGlvbiBsb2dpYyBpbiBgZXBfcG9sbGAgKHVzZWQgYnkgYGVwb2xsX3dhaXRgKSwgbW92aW5nIHRoZSBzbGFjayBjYWxjdWxhdGlvbiBpbnNpZGUgdGhlIHdhaXQgbG9vcC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgZXZlbnRwb2xsIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgaW4gdGltZW91dCBoYW5kbGluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RVBPTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtlcF9wb2xsJiMzNDssCiAgICAmIzM0O2RvX2Vwb2xsX3dhaXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHRpbWVvdXQgY2FsY3VsYXRpb24gbG9naWMgaW4gYGVwX3BvbGxgICh1c2VkIGJ5IGBlcG9sbF93YWl0YCksIG1vdmluZyB0aGUgc2xhY2sgY2FsY3VsYXRpb24gaW5zaWRlIHRoZSB3YWl0IGxvb3AuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGV2ZW50cG9sbCBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIGluIHRpbWVvdXQgaGFuZGxpbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0wOFQwNToyMToyNC42MDY1ODI0OTFaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODAyMjQ5NDY4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFUE9MTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImVwX3BvbGxcIixcbiAgICBcImRvX2Vwb2xsX3dhaXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgdGltZW91dCBjYWxjdWxhdGlvbiBsb2dpYyBpbiBgZXBfcG9sbGAgKHVzZWQgYnkgYGVwb2xsX3dhaXRgKSwgbW92aW5nIHRoZSBzbGFjayBjYWxjdWxhdGlvbiBpbnNpZGUgdGhlIHdhaXQgbG9vcC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgZXZlbnRwb2xsIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgaW4gdGltZW91dCBoYW5kbGluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMDU6MjE6MjQuNjA2NTg5MDYxWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTgxMjAzNjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBiZTE1ZWNkZmRhNjU0N2EzZTU5YWRjOWMzMzg3MjdlOTc3YmU2OWFlXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgSnVsIDggMDU6MjE6MjMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZnMvZXZlbnRwb2xsLmMgYi9mcy9ldmVudHBvbGwuY1xcbmluZGV4IDBlNjVjNzQzMWRmY2RhLi4xMjhkN2ZkM2QwZWEzZiAxMDA2NDRcXG4tLS0gYS9mcy9ldmVudHBvbGwuY1xcbisrKyBiL2ZzL2V2ZW50cG9sbC5jXFxuQEAgLTIyNDgsNyArMjI0OCw2IEBAIHN0YXRpYyBpbnQgZXBfcG9sbChzdHJ1Y3QgZXZlbnRwb2xsICplcCwgc3RydWN0IGVwb2xsX2V2ZW50IF9fdXNlciAqZXZlbnRzLFxcbiBcXHRsb2NrZGVwX2Fzc2VydF9pcnFzX2VuYWJsZWQoKTtcXG4gXFxuIFxcdGlmICh0aW1lb3V0IFxcdTAwMjZcXHUwMDI2ICh0aW1lb3V0LVxcdTAwM2V0dl9zZWMgfCB0aW1lb3V0LVxcdTAwM2V0dl9uc2VjKSkge1xcbi1cXHRcXHRzbGFjayA9IHNlbGVjdF9lc3RpbWF0ZV9hY2N1cmFjeSh0aW1lb3V0KTtcXG4gXFx0XFx0dG8gPSBcXHUwMDI2ZXhwaXJlcztcXG4gXFx0XFx0KnRvID0gdGltZXNwZWM2NF90b19rdGltZSgqdGltZW91dCk7XFxuIFxcdH0gZWxzZSBpZiAodGltZW91dCkge1xcbkBAIC0yMzI3LDEwICsyMzI2LDEzIEBAIHN0YXRpYyBpbnQgZXBfcG9sbChzdHJ1Y3QgZXZlbnRwb2xsICplcCwgc3RydWN0IGVwb2xsX2V2ZW50IF9fdXNlciAqZXZlbnRzLFxcbiBcXG4gXFx0XFx0c3Bpbl91bmxvY2tfaXJxKFxcdTAwMjZlcC1cXHUwMDNlbG9jayk7XFxuIFxcbi1cXHRcXHRpZiAoIWVhdmFpbClcXG4rXFx0XFx0aWYgKCFlYXZhaWwpIHtcXG4rXFx0XFx0XFx0aWYgKHRvKVxcbitcXHRcXHRcXHRcXHRzbGFjayA9IHNlbGVjdF9lc3RpbWF0ZV9hY2N1cmFjeSh0aW1lb3V0KTtcXG4gXFx0XFx0XFx0dGltZWRfb3V0ID0gIWVwX3NjaGVkdWxlX3RpbWVvdXQodG8pIHx8XFxuIFxcdFxcdFxcdFxcdCFzY2hlZHVsZV9ocnRpbWVvdXRfcmFuZ2UodG8sIHNsYWNrLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRcXHQgIEhSVElNRVJfTU9ERV9BQlMpO1xcbitcXHRcXHR9XFxuIFxcdFxcdF9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTtcXG4gXFxuIFxcdFxcdC8qXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDA1OjIxOjI1LjAyNTQyNTE4NVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjc2MDM2NDM0NzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRVBPTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJlcF9wb2xsXCIsXG4gICAgXCJkb19lcG9sbF93YWl0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHRpbWVvdXQgY2FsY3VsYXRpb24gbG9naWMgaW4gYGVwX3BvbGxgICh1c2VkIGJ5IGBlcG9sbF93YWl0YCksIG1vdmluZyB0aGUgc2xhY2sgY2FsY3VsYXRpb24gaW5zaWRlIHRoZSB3YWl0IGxvb3AuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGV2ZW50cG9sbCBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIGluIHRpbWVvdXQgaGFuZGxpbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYmUxNWVjZGZkYTY1NDdhM2U1OWFkYzljMzM4NzI3ZTk3N2JlNjlhZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVsIDggMDU6MjE6MjMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9ldmVudHBvbGwuYyBiL2ZzL2V2ZW50cG9sbC5jXG5pbmRleCAwZTY1Yzc0MzFkZmNkYS4uMTI4ZDdmZDNkMGVhM2YgMTAwNjQ0XG4tLS0gYS9mcy9ldmVudHBvbGwuY1xuKysrIGIvZnMvZXZlbnRwb2xsLmNcbkBAIC0yMjQ4LDcgKzIyNDgsNiBAQCBzdGF0aWMgaW50IGVwX3BvbGwoc3RydWN0IGV2ZW50cG9sbCAqZXAsIHN0cnVjdCBlcG9sbF9ldmVudCBfX3VzZXIgKmV2ZW50cyxcbiBcdGxvY2tkZXBfYXNzZXJ0X2lycXNfZW5hYmxlZCgpO1xuIFxuIFx0aWYgKHRpbWVvdXQgXHUwMDI2XHUwMDI2ICh0aW1lb3V0LVx1MDAzZXR2X3NlYyB8IHRpbWVvdXQtXHUwMDNldHZfbnNlYykpIHtcbi1cdFx0c2xhY2sgPSBzZWxlY3RfZXN0aW1hdGVfYWNjdXJhY3kodGltZW91dCk7XG4gXHRcdHRvID0gXHUwMDI2ZXhwaXJlcztcbiBcdFx0KnRvID0gdGltZXNwZWM2NF90b19rdGltZSgqdGltZW91dCk7XG4gXHR9IGVsc2UgaWYgKHRpbWVvdXQpIHtcbkBAIC0yMzI3LDEwICsyMzI2LDEzIEBAIHN0YXRpYyBpbnQgZXBfcG9sbChzdHJ1Y3QgZXZlbnRwb2xsICplcCwgc3RydWN0IGVwb2xsX2V2ZW50IF9fdXNlciAqZXZlbnRzLFxuIFxuIFx0XHRzcGluX3VubG9ja19pcnEoXHUwMDI2ZXAtXHUwMDNlbG9jayk7XG4gXG4tXHRcdGlmICghZWF2YWlsKVxuK1x0XHRpZiAoIWVhdmFpbCkge1xuK1x0XHRcdGlmICh0bylcbitcdFx0XHRcdHNsYWNrID0gc2VsZWN0X2VzdGltYXRlX2FjY3VyYWN5KHRpbWVvdXQpO1xuIFx0XHRcdHRpbWVkX291dCA9ICFlcF9zY2hlZHVsZV90aW1lb3V0KHRvKSB8fFxuIFx0XHRcdFx0IXNjaGVkdWxlX2hydGltZW91dF9yYW5nZSh0bywgc2xhY2ssXG4gXHRcdFx0XHRcdFx0XHQgIEhSVElNRVJfTU9ERV9BQlMpO1xuK1x0XHR9XG4gXHRcdF9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTtcbiBcbiBcdFx0LypcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDA1OjIxOjI1LjAyNTQyNjQ2NVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4MDEzMTQzOTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgS2VybmVsIFBhdGNoOiBFdmVudHBvbGwgYW5kIFRpbWVvdXQgQWNjdXJhY3kqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgc2VlbXMgdG8gYmUgdHdlYWtpbmcgYGZzL2V2ZW50cG9sbC5jYC4gVGhlIGNvcmUgb2YgdGhpcyBzZWVtcyB0byBiZSBhYm91dCB0aGUgcGxhY2VtZW50IG9mIHRoZSBgc2xhY2sgPSBzZWxlY3RfZXN0aW1hdGVfYWNjdXJhY3kodGltZW91dCk7YCBjYWxsLiBCZWZvcmUsIGl0IHdhcyBoYXBwZW5pbmcgb3V0c2lkZSB0aGUgbWFpbiBsb29wLCBidXQgbm93IGl0J3MgbW92ZWQgKmluc2lkZSogdGhlIGxvb3AsIHJpZ2h0IGJlZm9yZSBgZXBfc2NoZWR1bGVfdGltZW91dCh0bylgLiBUaGF0IGltbWVkaWF0ZWx5IHJhaXNlcyBhIGZsYWcg4oCTIGBlcF9wb2xsYCBpcywgb2YgY291cnNlLCBhYnNvbHV0ZWx5IGNlbnRyYWwgdG8gaG93IGBlcG9sbF93YWl0YCBmdW5jdGlvbnMuIFRoaXMgY2hhbmdlIGNvdWxkIGhhdmUgYSBub24tdHJpdmlhbCBpbXBhY3Qgb24gcGVyZm9ybWFuY2Ugb3IsIGV2ZW4gd29yc2UsIGNvcnJlY3RuZXNzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgdGhpcyB3YXMgZG9uZS4gTGV0J3MgZ28gc3RyYWlnaHQgdG8gdGhlIGNvZGUuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgY29udGV4dCBhcm91bmQgbGluZSAyMzI2IG9mIGBmcy9ldmVudHBvbGwuY2AgdG8gc2VlIHByZWNpc2VseSB3aGF0IHRoZSBkZXZlbG9wZXJzIHdlcmUgYWltaW5nIGZvciB3aXRoIHRoaXMgbW9kaWZpY2F0aW9uLiBJJ2xsIGZvY3VzIG9uIHRoZSBpbXBsaWNhdGlvbnMgZm9yIHRpbWVvdXQgaGFuZGxpbmcgd2l0aGluIHRoZSBlcG9sbCBtZWNoYW5pc20uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5ODEsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDA1OjIxOjI4LjgyNjc0MzAxOVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MDM2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9ldmVudHBvbGwuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMjQwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjI0MDpcXHRcXHRcXHQgICBpbnQgbWF4ZXZlbnRzLCBzdHJ1Y3QgdGltZXNwZWM2NCAqdGltZW91dClcXG4yMjQxOlxcdHtcXG4yMjQyOlxcdFxcdGludCByZXMsIHRpbWVkX291dCA9IDA7XFxuMjI0MzpcXHRcXHRib29sIGVhdmFpbDtcXG4yMjQ0OlxcdFxcdHU2NCBzbGFjayA9IDA7XFxuMjI0NTpcXHRcXHR3YWl0X3F1ZXVlX2VudHJ5X3Qgd2FpdDtcXG4yMjQ2OlxcdFxcdGt0aW1lX3QgZXhwaXJlcywgKnRvID0gTlVMTDtcXG4yMjQ3OlxcdFxcbjIyNDg6XFx0XFx0bG9ja2RlcF9hc3NlcnRfaXJxc19lbmFibGVkKCk7XFxuMjI0OTpcXHRcXG4yMjUwOlxcdFxcdGlmICh0aW1lb3V0IFxcdTAwMjZcXHUwMDI2ICh0aW1lb3V0LVxcdTAwM2V0dl9zZWMgfCB0aW1lb3V0LVxcdTAwM2V0dl9uc2VjKSkge1xcbjIyNTE6XFx0XFx0XFx0dG8gPSBcXHUwMDI2ZXhwaXJlcztcXG4yMjUyOlxcdFxcdFxcdCp0byA9IHRpbWVzcGVjNjRfdG9fa3RpbWUoKnRpbWVvdXQpO1xcbjIyNTM6XFx0XFx0fSBlbHNlIGlmICh0aW1lb3V0KSB7XFxuMjI1NDpcXHRcXHRcXHQvKlxcbjIyNTU6XFx0XFx0XFx0ICogQXZvaWQgdGhlIHVubmVjZXNzYXJ5IHRyaXAgdG8gdGhlIHdhaXQgcXVldWUgbG9vcCwgaWYgdGhlXFxuMjI1NjpcXHRcXHRcXHQgKiBjYWxsZXIgc3BlY2lmaWVkIGEgbm9uIGJsb2NraW5nIG9wZXJhdGlvbi5cXG4yMjU3OlxcdFxcdFxcdCAqL1xcbjIyNTg6XFx0XFx0XFx0dGltZWRfb3V0ID0gMTtcXG4yMjU5OlxcdFxcdH1cXG4yMjYwOlxcdFxcbjIyNjE6XFx0XFx0LypcXG4yMjYyOlxcdFxcdCAqIFRoaXMgY2FsbCBpcyByYWN5OiBXZSBtYXkgb3IgbWF5IG5vdCBzZWUgZXZlbnRzIHRoYXQgYXJlIGJlaW5nIGFkZGVkXFxuMjI2MzpcXHRcXHQgKiB0byB0aGUgcmVhZHkgbGlzdCB1bmRlciB0aGUgbG9jayAoZS5nLiwgaW4gSVJRIGNhbGxiYWNrcykuIEZvciBjYXNlc1xcbjIyNjQ6XFx0XFx0ICogd2l0aCBhIG5vbi16ZXJvIHRpbWVvdXQsIHRoaXMgdGhyZWFkIHdpbGwgY2hlY2sgdGhlIHJlYWR5IGxpc3QgdW5kZXJcXG4yMjY1OlxcdFxcdCAqIGxvY2sgYW5kIHdpbGwgYWRkIHRvIHRoZSB3YWl0IHF1ZXVlLiAgRm9yIGNhc2VzIHdpdGggYSB6ZXJvXFxuMjI2NjpcXHRcXHQgKiB0aW1lb3V0LCB0aGUgdXNlciBieSBkZWZpbml0aW9uIHNob3VsZCBub3QgY2FyZSBhbmQgd2lsbCBoYXZlIHRvXFxuMjI2NzpcXHRcXHQgKiByZWNoZWNrIGFnYWluLlxcbjIyNjg6XFx0XFx0ICovXFxuMjI2OTpcXHRcXHRlYXZhaWwgPSBlcF9ldmVudHNfYXZhaWxhYmxlKGVwKTtcXG4yMjcwOlxcdFxcbjIyNzE6XFx0XFx0d2hpbGUgKDEpIHtcXG4yMjcyOlxcdFxcdFxcdGlmIChlYXZhaWwpIHtcXG4yMjczOlxcdFxcdFxcdFxcdHJlcyA9IGVwX3RyeV9zZW5kX2V2ZW50cyhlcCwgZXZlbnRzLCBtYXhldmVudHMpO1xcbjIyNzQ6XFx0XFx0XFx0XFx0aWYgKHJlcylcXG4yMjc1OlxcdFxcdFxcdFxcdFxcdHJldHVybiByZXM7XFxuMjI3NjpcXHRcXHRcXHR9XFxuMjI3NzpcXHRcXG4yMjc4OlxcdFxcdFxcdGlmICh0aW1lZF9vdXQpXFxuMjI3OTpcXHRcXHRcXHRcXHRyZXR1cm4gMDtcXG4yMjgwOlxcdFxcbjIyODE6XFx0XFx0XFx0ZWF2YWlsID0gZXBfYnVzeV9sb29wKGVwKTtcXG4yMjgyOlxcdFxcdFxcdGlmIChlYXZhaWwpXFxuMjI4MzpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4yMjg0OlxcdFxcbjIyODU6XFx0XFx0XFx0aWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKVxcbjIyODY6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5UUjtcXG4yMjg3OlxcdFxcbjIyODg6XFx0XFx0XFx0LypcXG4yMjg5OlxcdFxcdFxcdCAqIEludGVybmFsbHkgaW5pdF93YWl0KCkgdXNlcyBhdXRvcmVtb3ZlX3dha2VfZnVuY3Rpb24oKSxcXG4yMjkwOlxcdFxcdFxcdCAqIHRodXMgd2FpdCBlbnRyeSBpcyByZW1vdmVkIGZyb20gdGhlIHdhaXQgcXVldWUgb24gZWFjaFxcbjIyOTE6XFx0XFx0XFx0ICogd2FrZXVwLiBXaHkgaXQgaXMgaW1wb3J0YW50PyBJbiBjYXNlIG9mIHNldmVyYWwgd2FpdGVyc1xcbjIyOTI6XFx0XFx0XFx0ICogZWFjaCBuZXcgd2FrZXVwIHdpbGwgaGl0IHRoZSBuZXh0IHdhaXRlciwgZ2l2aW5nIGl0IHRoZVxcbjIyOTM6XFx0XFx0XFx0ICogY2hhbmNlIHRvIGhhcnZlc3QgbmV3IGV2ZW50LiBPdGhlcndpc2Ugd2FrZXVwIGNhbiBiZVxcbjIyOTQ6XFx0XFx0XFx0ICogbG9zdC4gVGhpcyBpcyBhbHNvIGdvb2QgcGVyZm9ybWFuY2Utd2lzZSwgYmVjYXVzZSBvblxcbjIyOTU6XFx0XFx0XFx0ICogbm9ybWFsIHdha2V1cCBwYXRoIG5vIG5lZWQgdG8gY2FsbCBfX3JlbW92ZV93YWl0X3F1ZXVlKClcXG4yMjk2OlxcdFxcdFxcdCAqIGV4cGxpY2l0bHksIHRodXMgZXAtXFx1MDAzZWxvY2sgaXMgbm90IHRha2VuLCB3aGljaCBoYWx0cyB0aGVcXG4yMjk3OlxcdFxcdFxcdCAqIGV2ZW50IGRlbGl2ZXJ5LlxcbjIyOTg6XFx0XFx0XFx0ICpcXG4yMjk5OlxcdFxcdFxcdCAqIEluIGZhY3QsIHdlIG5vdyB1c2UgYW4gZXZlbiBtb3JlIGFnZ3Jlc3NpdmUgZnVuY3Rpb24gdGhhdFxcbjIzMDA6XFx0XFx0XFx0ICogdW5jb25kaXRpb25hbGx5IHJlbW92ZXMsIGJlY2F1c2Ugd2UgZG9uJ3QgcmV1c2UgdGhlIHdhaXRcXG4yMzAxOlxcdFxcdFxcdCAqIGVudHJ5IGJldHdlZW4gbG9vcCBpdGVyYXRpb25zLiBUaGlzIGxldHMgdXMgYWxzbyBhdm9pZCB0aGVcXG4yMzAyOlxcdFxcdFxcdCAqIHBlcmZvcm1hbmNlIGlzc3VlIGlmIGEgcHJvY2VzcyBpcyBraWxsZWQsIGNhdXNpbmcgYWxsIG9mIGl0c1xcbjIzMDM6XFx0XFx0XFx0ICogdGhyZWFkcyB0byB3YWtlIHVwIHdpdGhvdXQgYmVpbmcgcmVtb3ZlZCBub3JtYWxseS5cXG4yMzA0OlxcdFxcdFxcdCAqL1xcbjIzMDU6XFx0XFx0XFx0aW5pdF93YWl0KFxcdTAwMjZ3YWl0KTtcXG4yMzA2OlxcdFxcdFxcdHdhaXQuZnVuYyA9IGVwX2F1dG9yZW1vdmVfd2FrZV9mdW5jdGlvbjtcXG4yMzA3OlxcdFxcbjIzMDg6XFx0XFx0XFx0c3Bpbl9sb2NrX2lycShcXHUwMDI2ZXAtXFx1MDAzZWxvY2spO1xcbjIzMDk6XFx0XFx0XFx0LypcXG4yMzEwOlxcdFxcdFxcdCAqIEJhcnJpZXJsZXNzIHZhcmlhbnQsIHdhaXRxdWV1ZV9hY3RpdmUoKSBpcyBjYWxsZWQgdW5kZXJcXG4yMzExOlxcdFxcdFxcdCAqIHRoZSBzYW1lIGxvY2sgb24gd2FrZXVwIGVwX3BvbGxfY2FsbGJhY2soKSBzaWRlLCBzbyBpdFxcbjIzMTI6XFx0XFx0XFx0ICogaXMgc2FmZSB0byBhdm9pZCBhbiBleHBsaWNpdCBiYXJyaWVyLlxcbjIzMTM6XFx0XFx0XFx0ICovXFxuMjMxNDpcXHRcXHRcXHRfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7XFxuMjMxNTpcXHRcXG4yMzE2OlxcdFxcdFxcdC8qXFxuMjMxNzpcXHRcXHRcXHQgKiBEbyB0aGUgZmluYWwgY2hlY2sgdW5kZXIgdGhlIGxvY2suIGVwX3N0YXJ0L2RvbmVfc2NhbigpXFxuMjMxODpcXHRcXHRcXHQgKiBwbGF5cyB3aXRoIHR3byBsaXN0cyAoLVxcdTAwM2VyZGxsaXN0IGFuZCAtXFx1MDAzZW92Zmxpc3QpIGFuZCB0aGVyZVxcbjIzMTk6XFx0XFx0XFx0ICogaXMgYWx3YXlzIGEgcmFjZSB3aGVuIGJvdGggbGlzdHMgYXJlIGVtcHR5IGZvciBzaG9ydFxcbjIzMjA6XFx0XFx0XFx0ICogcGVyaW9kIG9mIHRpbWUgYWx0aG91Z2ggZXZlbnRzIGFyZSBwZW5kaW5nLCBzbyBsb2NrIGlzXFxuMjMyMTpcXHRcXHRcXHQgKiBpbXBvcnRhbnQuXFxuMjMyMjpcXHRcXHRcXHQgKi9cXG4yMzIzOlxcdFxcdFxcdGVhdmFpbCA9IGVwX2V2ZW50c19hdmFpbGFibGUoZXApO1xcbjIzMjQ6XFx0XFx0XFx0aWYgKCFlYXZhaWwpXFxuMjMyNTpcXHRcXHRcXHRcXHRfX2FkZF93YWl0X3F1ZXVlX2V4Y2x1c2l2ZShcXHUwMDI2ZXAtXFx1MDAzZXdxLCBcXHUwMDI2d2FpdCk7XFxuMjMyNjpcXHRcXG4yMzI3OlxcdFxcdFxcdHNwaW5fdW5sb2NrX2lycShcXHUwMDI2ZXAtXFx1MDAzZWxvY2spO1xcbjIzMjg6XFx0XFxuMjMyOTpcXHRcXHRcXHRpZiAoIWVhdmFpbCkge1xcbjIzMzA6XFx0XFx0XFx0XFx0aWYgKHRvKVxcbjIzMzE6XFx0XFx0XFx0XFx0XFx0c2xhY2sgPSBzZWxlY3RfZXN0aW1hdGVfYWNjdXJhY3kodGltZW91dCk7XFxuMjMzMjpcXHRcXHRcXHRcXHR0aW1lZF9vdXQgPSAhZXBfc2NoZWR1bGVfdGltZW91dCh0bykgfHxcXG4yMzMzOlxcdFxcdFxcdFxcdFxcdCFzY2hlZHVsZV9ocnRpbWVvdXRfcmFuZ2UodG8sIHNsYWNrLFxcbjIzMzQ6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBIUlRJTUVSX01PREVfQUJTKTtcXG4yMzM1OlxcdFxcdFxcdH1cXG4yMzM2OlxcdFxcdFxcdF9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTtcXG4yMzM3OlxcdFxcbjIzMzg6XFx0XFx0XFx0LypcXG4yMzM5OlxcdFxcdFxcdCAqIFdlIHdlcmUgd29rZW4gdXAsIHRodXMgZ28gYW5kIHRyeSB0byBoYXJ2ZXN0IHNvbWUgZXZlbnRzLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQwNToyMToyOC44MjY4OTU1NjhaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MzAxNDYzNjU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRXBvbGwgVGltZW91dCBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYWJvdXQgb3B0aW1pemluZyB0aGUgYGVwb2xsX3dhaXRgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgYnkgZGVsYXlpbmcgdGhlIGNhbGN1bGF0aW9uIG9mIGBzbGFja2AuIFRoZSBjb3JlIGlkZWEgaXMgdG8gYXZvaWQgY2FsbGluZyBgc2VsZWN0X2VzdGltYXRlX2FjY3VyYWN5YCB1bmxlc3MgaXQncyBzdHJpY3RseSBuZWNlc3NhcnkuIFJpZ2h0LCB0aGF0J3MgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYXMgaXQgYXZvaWRzIHRoYXQgY2FsY3VsYXRpb24gd2hlbiBgZWF2YWlsYCBpcyB0cnVlIG9yIGlmIHRoZXJlJ3MgYSB0aW1lb3V0IGJlZm9yZSB0aGF0IHBvaW50LiBOb3csIGBzZWxlY3RfZXN0aW1hdGVfYWNjdXJhY3lgIGlzIHRoZSBmdW5jdGlvbiB0aGF0IGFjdHVhbGx5ICpjYWxjdWxhdGVzKiB0aGUgc2xhY2suIE15IGluaXRpYWwgdGhvdWdodCBpcywgaXMgdGhpcyBldmVuIHdvcnRoIGZ1enppbmc/IEl0IHNlZW1zIGxpa2UgYSByZWxhdGl2ZWx5IG1pbm9yIG9wdGltaXphdGlvbiBpbiB0aGUgY29udGV4dCBvZiBgZXBvbGxfd2FpdGAuXG5cbldhaXQsIGFjdHVhbGx5LCBgZXBvbGxfd2FpdGAgKmlzKiBkZWZpbml0ZWx5IGEgcmVhY2hhYmxlIGNvZGUgcGF0aCwgc28gdGhhdCBtYWtlcyB0aGlzIGNoYW5nZSBwb3RlbnRpYWxseSByZWxldmFudC4gSSBuZWVkIHRvIHRoaW5rIGFib3V0IHRoZSBwb3NzaWJsZSBzaWRlIGVmZmVjdHMuIENvdWxkIGl0IGludHJvZHVjZSBhIGJ1Zz8gTGV0J3MgdHJhY2UgaXQgb3V0LiBJZiBgdG9gIGlzIG5vdCBOVUxMLCBgc2xhY2tgICppcyogY2FsY3VsYXRlZC4gSWYgYHRvYCAqaXMqIE5VTEwsIGBzbGFja2AgaXMgaW5pdGlhbGl6ZWQgdG8gMCBhdCB0aGUgdG9wIG9mIHRoZSBmdW5jdGlvbiBhbnl3YXkuIE9rYXksIHRoYXQgc2VlbXMgc3RyYWlnaHRmb3J3YXJkLlxuXG5Ib2xkIG9uLCBJIHJlbWVtYmVyIHRoYXQgYGVwX3NjaGVkdWxlX3RpbWVvdXRgIGRvZXNuJ3QgYWN0dWFsbHkgdXNlIHRoZSBgc2xhY2tgIHZhcmlhYmxlIGRpcmVjdGx5LiBCdXQsIHdhaXQsIGBzY2hlZHVsZV9ocnRpbWVvdXRfcmFuZ2VgICpkb2VzKiB1c2UgaXQhIFNvLCB0aGlzIGlzIHBvdGVudGlhbGx5IGltcG9ydGFudCB0byBnZXQgcmlnaHQuIExldCdzIGxvb2sgYXQgdGhlIGJlZm9yZSBhbmQgYWZ0ZXIgY29kZSBzbmlwcGV0cyB0byBjb21wYXJlLlxuXG5Pa2F5LCBoZXJlJ3MgdGhlIG9yaWdpbmFsIGNvZGUgc25pcHBldDpcbmBgYGNcblx0aWYgKHRpbWVvdXQgXHUwMDI2XHUwMDI2ICh0aW1lb3V0LVx1MDAzZXR2X3NlYyB8IHRpbWVvdXQtXHUwMDNldHZfbnNlYykpIHtcblx0XHRzbGFjayA9IHNlbGVjdF9lc3RpbWF0ZV9hY2N1cmFjeSh0aW1lb3V0KTtcblx0XHR0byA9IFx1MDAyNmV4cGlyZXM7XG5cdFx0KnRvID0gdGltZXNwZWM2NF90b19rdGltZSgqdGltZW91dCk7XG5cdH0gZWxzZSBpZiAodGltZW91dCkge1xuYGBgXG5cbkFuZCBub3cgdGhlIG5ldyBjb2RlOlxuYGBgY1xuXHRcdGlmICghZWF2YWlsKSB7XG5cdFx0XHRpZiAodG8pXG5cdFx0XHRcdHNsYWNrID0gc2VsZWN0X2VzdGltYXRlX2FjY3VyYWN5KHRpbWVvdXQpO1xuXHRcdFx0dGltZWRfb3V0ID0gIWVwX3NjaGVkdWxlX3RpbWVvdXQodG8pIHx8XG5cdFx0XHRcdCFzY2hlZHVsZV9ocnRpbWVvdXRfcmFuZ2UodG8sIHNsYWNrLFxuXHRcdFx0XHRcdFx0XHQgIEhSVElNRVJfTU9ERV9BQlMpO1xuXHRcdH1cbmBgYFxuXG5Pa2F5LCBzbyB3ZSdyZSBkZWZlcnJpbmcgdGhhdCBjYWxjdWxhdGlvbi4gV2UgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gdGhhdCB0aGlzIGRvZXNuJ3QgY3JlYXRlIHNvbWUgc3VidGxlIHRpbWluZyBpc3N1ZSwgZXNwZWNpYWxseSB3aXRoIHRoZSB1c2Ugb2YgYHNjaGVkdWxlX2hydGltZW91dF9yYW5nZWAuIEkgbmVlZCB0byBsb29rIGF0IGBlcF9zY2hlZHVsZV90aW1lb3V0KHRvKWAgY2xvc2VseS4gSXMgdGhhdCBhIG1hY3JvIG9yIGEgZnVuY3Rpb24/IEknbGwgbmVlZCB0byBjaGVjayB0aGUgZGVmaW5pdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzgwNywiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDA1OjIxOjM1LjEyODM2MDc4N1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDE4OTI3NTk2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImVwX3NjaGVkdWxlX3RpbWVvdXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXZlbnRwb2xsLmM9MjE5OD1zdGF0aWMgaW50IGVwX3RyeV9zZW5kX2V2ZW50cyhzdHJ1Y3QgZXZlbnRwb2xsICplcCxcXG4tLVxcbmZzL2V2ZW50cG9sbC5jLTIyMTMtXFxuZnMvZXZlbnRwb2xsLmM6MjIxNDpzdGF0aWMgaW50IGVwX3NjaGVkdWxlX3RpbWVvdXQoa3RpbWVfdCAqdG8pXFxuZnMvZXZlbnRwb2xsLmMtMjIxNS17XFxuLS1cXG5mcy9ldmVudHBvbGwuYz0yMjM5PXN0YXRpYyBpbnQgZXBfcG9sbChzdHJ1Y3QgZXZlbnRwb2xsICplcCwgc3RydWN0IGVwb2xsX2V2ZW50IF9fdXNlciAqZXZlbnRzLFxcbi0tXFxuZnMvZXZlbnRwb2xsLmMtMjMzMS1cXHRcXHRcXHRcXHRzbGFjayA9IHNlbGVjdF9lc3RpbWF0ZV9hY2N1cmFjeSh0aW1lb3V0KTtcXG5mcy9ldmVudHBvbGwuYzoyMzMyOlxcdFxcdFxcdHRpbWVkX291dCA9ICFlcF9zY2hlZHVsZV90aW1lb3V0KHRvKSB8fFxcbmZzL2V2ZW50cG9sbC5jLTIzMzMtXFx0XFx0XFx0XFx0IXNjaGVkdWxlX2hydGltZW91dF9yYW5nZSh0bywgc2xhY2ssXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDA1OjIxOjM3LjE0NzI5NDIxM1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwMzcyODIyMjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBGdW5jdGlvbiBgZXBfc2NoZWR1bGVfdGltZW91dGAqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBgZXBfc2NoZWR1bGVfdGltZW91dGAgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGluIHRoZSBicm9hZGVyIHN5c3RlbS4gSSdtIGFzc3VtaW5nLCBiYXNlZCBvbiB0aGUgbmFtaW5nLCB0aGF0IGl0J3MgcmVsYXRlZCB0byBlbmRwb2ludCBtYW5hZ2VtZW50IGFuZCBwcm9iYWJseSBzb21lIGtpbmQgb2YgdGltZW91dCBtZWNoYW5pc20uIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gY2hlY2sgaXRzIGNhbGwgc2l0ZXMgdG8gcXVpY2tseSBkZXRlcm1pbmUgd2hlcmUgdGhpcyBpcyBiZWluZyB1c2VkIGFuZCB3aHkuIElzIGl0IHBhcnQgb2YgdGhlIGNvbm5lY3Rpb24gbGlmZWN5Y2xlIG1hbmFnZW1lbnQ/IElzIGl0IHJlbGF0ZWQgdG8gZXJyb3IgcmVjb3Zlcnkgb3IgcmVzb3VyY2UgY2xlYW51cD8gQXJlIHdlIGRlYWxpbmcgd2l0aCBhY3RpdmUgcG9sbGluZywgb3IgaXMgdGhpcyBtb3JlIGFib3V0IGlkbGUgY29ubmVjdGlvbiBtb25pdG9yaW5nPyBUaGUgbmFtZSBpcyB2ZXJ5IGdlbmVyaWMsIHdoaWNoIGltcGxpZXMgaXQncyBlaXRoZXIgdmVyeSBjcml0aWNhbCBvciB3aWRlbHkgdXNlZC4gVGltZSB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGggYW5kIGlkZW50aWZ5IGhvdyB0aGlzIHRpbWVvdXQgaW5mbHVlbmNlcyB0aGUgb3ZlcmFsbCBhcHBsaWNhdGlvbiBmbG93LiBJJ20gZ29pbmcgdG8gbG9vayBmb3IgYW55IHN1YnRsZSBkaWZmZXJlbmNlcyBpbiBiZWhhdmlvciBiYXNlZCBvbiBob3cgdGhlIHRpbWVvdXQgaXMgc2V0LiBJIHdhbnQgdG8gc2VlIGlmIHRoZSB0aW1lb3V0IGlzIGJhc2VkIG9uIHN5c3RlbSB0aW1lIG9yIG1vbm90b25pYyBjbG9jay4gVGhlIGFuc3dlciB0byB0aG9zZSBxdWVzdGlvbnMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgcG90ZW50aWFsIHJpc2tzIHRoYXQgYXJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ5NDAsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQwNToyMTo0MC4xODQ1Nzc5OTJaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjM5NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvZXZlbnRwb2xsLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjIxNCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjIxNDpcXHRzdGF0aWMgaW50IGVwX3NjaGVkdWxlX3RpbWVvdXQoa3RpbWVfdCAqdG8pXFxuMjIxNTpcXHR7XFxuMjIxNjpcXHRcXHRpZiAodG8pXFxuMjIxNzpcXHRcXHRcXHRyZXR1cm4ga3RpbWVfYWZ0ZXIoKnRvLCBrdGltZV9nZXQoKSk7XFxuMjIxODpcXHRcXHRlbHNlXFxuMjIxOTpcXHRcXHRcXHRyZXR1cm4gMTtcXG4yMjIwOlxcdH1cXG4yMjIxOlxcdFxcbjIyMjI6XFx0LyoqXFxuMjIyMzpcXHQgKiBlcF9wb2xsIC0gUmV0cmlldmVzIHJlYWR5IGV2ZW50cywgYW5kIGRlbGl2ZXJzIHRoZW0gdG8gdGhlIGNhbGxlci1zdXBwbGllZFxcbjIyMjQ6XFx0ICogICAgICAgICAgIGV2ZW50IGJ1ZmZlci5cXG4yMjI1OlxcdCAqXFxuMjIyNjpcXHQgKiBAZXA6IFBvaW50ZXIgdG8gdGhlIGV2ZW50cG9sbCBjb250ZXh0LlxcbjIyMjc6XFx0ICogQGV2ZW50czogUG9pbnRlciB0byB0aGUgdXNlcnNwYWNlIGJ1ZmZlciB3aGVyZSB0aGUgcmVhZHkgZXZlbnRzIHNob3VsZCBiZVxcbjIyMjg6XFx0ICogICAgICAgICAgc3RvcmVkLlxcbjIyMjk6XFx0ICogQG1heGV2ZW50czogU2l6ZSAoaW4gdGVybXMgb2YgbnVtYmVyIG9mIGV2ZW50cykgb2YgdGhlIGNhbGxlciBldmVudCBidWZmZXIuXFxuMjIzMDpcXHQgKiBAdGltZW91dDogTWF4aW11bSB0aW1lb3V0IGZvciB0aGUgcmVhZHkgZXZlbnRzIGZldGNoIG9wZXJhdGlvbiwgaW5cXG4yMjMxOlxcdCAqICAgICAgICAgICB0aW1lc3BlYy4gSWYgdGhlIHRpbWVvdXQgaXMgemVybywgdGhlIGZ1bmN0aW9uIHdpbGwgbm90IGJsb2NrLFxcbjIyMzI6XFx0ICogICAgICAgICAgIHdoaWxlIGlmIHRoZSBAdGltZW91dCBwdHIgaXMgTlVMTCwgdGhlIGZ1bmN0aW9uIHdpbGwgYmxvY2tcXG4yMjMzOlxcdCAqICAgICAgICAgICB1bnRpbCBhdCBsZWFzdCBvbmUgZXZlbnQgaGFzIGJlZW4gcmV0cmlldmVkIChvciBhbiBlcnJvclxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQwNToyMTo0MC4xODQ3NDM2NTJaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NDA0NTgxMjI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBkZWxheWluZyB0aGUgY2FsbCB0byBgc2VsZWN0X2VzdGltYXRlX2FjY3VyYWN5YC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgaXQgKm1pZ2h0KiBvZmZlciBhIHNsaWdodCBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudCBieSBub3QgYmxvY2tpbmcgYXMgZWFybHkuIFRoZSBxdWVzdGlvbiBpcywgaXMgaXQgd29ydGggZnV6emluZz8gSXQncyBhIHNtYWxsIG1vZGlmaWNhdGlvbiB3aXRoaW4gYGVwX3BvbGxgLCBidXQuLi4gYGVwb2xsX3dhaXRgIGlzIGFscmVhZHkgYSBzeXNjYWxsIHRoYXQncyBoZWF2aWx5IHRhcmdldGVkIGJ5IGZ1enppbmcgZWZmb3J0cy5cblxuVGhpcyAqaXMqIGEgZnVuY3Rpb25hbCBjaGFuZ2Ug4oCTIGl0IGFsdGVycyAqd2hlbiogYW5kIHBvdGVudGlhbGx5ICpob3cgb2Z0ZW4qIGBzZWxlY3RfZXN0aW1hdGVfYWNjdXJhY3lgIGdldHMgY2FsbGVkLiBTcGVjaWZpY2FsbHksIGl0IGNvdWxkIGJlIGNhbGxlZCByZXBlYXRlZGx5IGlmIHRoZSBsb29wIGl0ZXJhdGVzIGFuZCBpZiBgdG9gIGlzbid0IE5VTEwgYW5kIGAhZWF2YWlsYC4gVGhpbmtpbmcgdGhpcyB0aHJvdWdoLCB0aG91Z2gsIGlmIHRoZSBsb29wICpkb2VzKiBpdGVyYXRlLCBgc2xhY2tgIGlzIHJlY2FsY3VsYXRlZCwgd2hpY2ggaXMgaW1wb3J0YW50LiBOb3csIGlzIHRoZSBgdGltZW91dGAgaXRzZWxmIGJlaW5nIG1vZGlmaWVkIHdpdGhpbiB0aGUgbG9vcD8gTm9wZS4gSXQncyBhIHBvaW50ZXIgdG8gYSBgc3RydWN0IHRpbWVzcGVjNjRgLCB3aGljaCByZW1haW5zIHVudG91Y2hlZCwgc28gcmVjYWxjdWxhdGluZyBhbmQgcG90ZW50aWFsbHkgY2FsbGluZyBgc2VsZWN0X2VzdGltYXRlX2FjY3VyYWN5YCBtdWx0aXBsZSB0aW1lcyBpc24ndCBwcm9ibGVtYXRpYy4gV2FpdCwgYHNlbGVjdF9lc3RpbWF0ZV9hY2N1cmFjeWAgdXNlcyBgY3VycmVudC1cdTAwM2V0aW1lcl9zbGFja19uc2AuXG5cbkFscmlnaHQsIEknbSBsZWFuaW5nIHRvd2FyZHMgeWVzLCB0aGlzIGlzIHdvcnRoIGZ1enppbmcuIEl0J3MgYSBmdW5jdGlvbmFsIGNoYW5nZSBkaXJlY3RseSB3aXRoaW4gY29yZSBrZXJuZWwgbG9naWMgcmVsYXRlZCB0byBgZXBvbGxgLiBUaGUga2V5IGZ1bmN0aW9ucyB0byBmb2N1cyBvbiBhcmUgYGVwX3BvbGxgIGFuZCBgZG9fZXBvbGxfd2FpdGAuIEkgc2hvdWxkIGNoZWNrIGZvciBhbnkgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMsIHBhcnRpY3VsYXJseSBpZiBhbnl0aGluZyBzcGVjaWZpYyBkaXNhYmxlcyBvciBtb2RpZmllcyBgRVBPTExgLiBBbHRob3VnaCBgRVBPTExgIGlzIHVzdWFsbHkgZW5hYmxlZCwgaXQgaXMgd29ydGggY29uZmlybWluZyB0aGF0IHRoZXJlIGFyZSBubyBzcGVjaWZpYyBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBtaWdodCBhZmZlY3QgdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTU0OSwiT3V0cHV0VG9rZW5zIjoxNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDA1OjIxOjQ1LjU4OTMyNjU1OFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEzMDM2NjYwNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRVBPTExcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTE4NTk9Y29uZmlnIEZVVEVYX1JPQlVTVF9VTkxPQ0tcXG4tLVxcbmluaXQvS2NvbmZpZy0xODYxLVxcbmluaXQvS2NvbmZpZzoxODYyOmNvbmZpZyBFUE9MTFxcbmluaXQvS2NvbmZpZy0xODYzLVxcdGJvb2wgXFxcIkVuYWJsZSBldmVudHBvbGwgc3VwcG9ydFxcXCIgaWYgRVhQRVJUXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDA1OjIxOjQ3LjcxOTY5OTgyNFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODE4OTQyNTY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEZ1enppbmcgU3RyYXRlZ3k6IEVQT0xMIFRpbWVvdXQgTG9naWMqKlxuXG5Pa2F5LCBzbyBgRVBPTExgIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCwgd2hpY2ggaXMgY29udmVuaWVudC4gVGhlIHBsYW4gaXMgY2xlYXI6IEkgbmVlZCB0byB0YXJnZXQgdGhpcy4gSSd2ZSBnb3QgbXkgcGFyYW1ldGVycyByZWFkeSB0byBnby5cblxuVGhlIGNyaXRpY2FsIHRoaW5nIGlzIHRvIHNldCB0aGUgcmVzdWx0cy4gSSdtIHByaW9yaXRpemluZyB0aGlzLCBJJ20gc2V0dGluZyBgV29ydGhGdXp6aW5nYCB0byBgdHJ1ZWAuXG5cbkknbSB6ZXJvaW5nIGluIG9uIGBcImVwX3BvbGxcImAgYW5kIGBcImRvX2Vwb2xsX3dhaXRcImAgc3BlY2lmaWNhbGx5IOKAkyB0aG9zZSBhcmUgdGhlIGZ1bmN0aW9ucyBJIHdhbnQgdG8gZm9jdXMgbXkgZWZmb3J0cyBvbi4gVGhhdCdzIHRoZSBjb3JlIG9mIG15IGFwcHJvYWNoLlxuXG5UaGVuLCB0byByZWluZm9yY2UgbXkgZm9jdXMsIEkgd2lsbCBlbnN1cmUgdGhhdCB0aGUgYFwiRVBPTExcImAgY29uZmlndXJhdGlvbiBpcyBhY3RpdmVseSBlbmFibGVkLiBJdCdzIHRoZSBseW5jaHBpbiBmb3IgdGhpcyB0ZXN0LlxuXG5NeSByZWFzb25pbmc/IFNpbXBsZS4gVGhpcyBwYXRjaCBpcyBmdW5kYW1lbnRhbGx5IGNoYW5naW5nIGhvdyB0aW1lb3V0cyBhcmUgaGFuZGxlZCBpbiB0aGUgYGVwb2xsX3dhaXRgIHBhdGguIEl0J3MgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYSBjb3JlIGV2ZW50cG9sbCBtb2RpZmljYXRpb24uIFRoZSBzbGFjayBjYWxjdWxhdGlvbiBpcyBiZWluZyBtb3ZlZC4gVGhpcyB3YXJyYW50cyB0aG9yb3VnaCBmdXp6aW5nIHRvIGd1YXJkIGFnYWluc3QgYW55IHJlZ3Jlc3Npb25zIGluIHRpbWVvdXQgaGFuZGxpbmcuIEkgbmVlZCB0byBtYWtlIGNlcnRhaW4gdGhhdCB0aGVzZSBjcml0aWNhbCB0aW1lIG1hbmFnZW1lbnQgYmVoYXZpb3JzIGNvbnRpbnVlIHRvIGJlaGF2ZSBhcyBleHBlY3RlZCwgYW5kIHRoYXQgbm8gbmV3IHZ1bG5lcmFiaWxpdGllcyBhcmUgaW50cm9kdWNlZC4gVGhpcyBpcyB0aGUgcGxhY2UgdG8gYmUgbWV0aWN1bG91cy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjIyNSwiT3V0cHV0VG9rZW5zIjoxMDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMDU6MjE6NTIuNTM4NjQ0MzFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MDQyMDgxMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRVBPTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJlcF9wb2xsXCIsXG4gICAgXCJkb19lcG9sbF93YWl0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHRpbWVvdXQgY2FsY3VsYXRpb24gbG9naWMgaW4gYGVwX3BvbGxgICh1c2VkIGJ5IGBlcG9sbF93YWl0YCksIG1vdmluZyB0aGUgc2xhY2sgY2FsY3VsYXRpb24gaW5zaWRlIHRoZSB3YWl0IGxvb3AuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGV2ZW50cG9sbCBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIGluIHRpbWVvdXQgaGFuZGxpbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRVBPTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJlcF9wb2xsXCIsXG4gICAgXCJkb19lcG9sbF93YWl0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHRpbWVvdXQgY2FsY3VsYXRpb24gbG9naWMgaW4gYGVwX3BvbGxgICh1c2VkIGJ5IGBlcG9sbF93YWl0YCksIG1vdmluZyB0aGUgc2xhY2sgY2FsY3VsYXRpb24gaW5zaWRlIHRoZSB3YWl0IGxvb3AuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGV2ZW50cG9sbCBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIGluIHRpbWVvdXQgaGFuZGxpbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowsv4pr[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-08 05:08:46 +0000 UTC FinishedAt: 2026-07-08 05:21:54 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EPOLL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EPOLL" ], "series_id": "9911809c-2abb-4cd9-b09f-9c376c4e0465" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "ep_poll", "do_epoll_wait" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDA1OjIxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VQT0xMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZXBfcG9sbCYjMzQ7LAogICAgJiMzNDtkb19lcG9sbF93YWl0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSB0aW1lb3V0IGNhbGN1bGF0aW9uIGxvZ2ljIGluIGBlcF9wb2xsYCAodXNlZCBieSBgZXBvbGxfd2FpdGApLCBtb3ZpbmcgdGhlIHNsYWNrIGNhbGN1bGF0aW9uIGluc2lkZSB0aGUgd2FpdCBsb29wLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBldmVudHBvbGwgbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBpbiB0aW1lb3V0IGhhbmRsaW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDA1OjIxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYmUxNWVjZGZkYTY1NDdhM2U1OWFkYzljMzM4NzI3ZTk3N2JlNjlhZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVsIDggMDU6MjE6MjMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvZXZlbnRwb2xsLmMgYi9mcy9ldmVudHBvbGwuY1xuaW5kZXggMGU2NWM3NDMxZGZjZGEuLjEyOGQ3ZmQzZDBlYTNmIDEwMDY0NFxuLS0tIGEvZnMvZXZlbnRwb2xsLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V2ZW50cG9sbC5jXG5AQCAtMjI0OCw3ICYjNDM7MjI0OCw2IEBAIHN0YXRpYyBpbnQgZXBfcG9sbChzdHJ1Y3QgZXZlbnRwb2xsICplcCwgc3RydWN0IGVwb2xsX2V2ZW50IF9fdXNlciAqZXZlbnRzLFxuIFx0bG9ja2RlcF9hc3NlcnRfaXJxc19lbmFibGVkKCk7XG4gXG4gXHRpZiAodGltZW91dCBcdTAwMjZcdTAwMjYgKHRpbWVvdXQtXHUwMDNldHZfc2VjIHwgdGltZW91dC1cdTAwM2V0dl9uc2VjKSkge1xuLVx0XHRzbGFjayA9IHNlbGVjdF9lc3RpbWF0ZV9hY2N1cmFjeSh0aW1lb3V0KTtcbiBcdFx0dG8gPSBcdTAwMjZleHBpcmVzO1xuIFx0XHQqdG8gPSB0aW1lc3BlYzY0X3RvX2t0aW1lKCp0aW1lb3V0KTtcbiBcdH0gZWxzZSBpZiAodGltZW91dCkge1xuQEAgLTIzMjcsMTAgJiM0MzsyMzI2LDEzIEBAIHN0YXRpYyBpbnQgZXBfcG9sbChzdHJ1Y3QgZXZlbnRwb2xsICplcCwgc3RydWN0IGVwb2xsX2V2ZW50IF9fdXNlciAqZXZlbnRzLFxuIFxuIFx0XHRzcGluX3VubG9ja19pcnEoXHUwMDI2ZXAtXHUwMDNlbG9jayk7XG4gXG4tXHRcdGlmICghZWF2YWlsKVxuJiM0MztcdFx0aWYgKCFlYXZhaWwpIHtcbiYjNDM7XHRcdFx0aWYgKHRvKVxuJiM0MztcdFx0XHRcdHNsYWNrID0gc2VsZWN0X2VzdGltYXRlX2FjY3VyYWN5KHRpbWVvdXQpO1xuIFx0XHRcdHRpbWVkX291dCA9ICFlcF9zY2hlZHVsZV90aW1lb3V0KHRvKSB8fFxuIFx0XHRcdFx0IXNjaGVkdWxlX2hydGltZW91dF9yYW5nZSh0bywgc2xhY2ssXG4gXHRcdFx0XHRcdFx0XHQgIEhSVElNRVJfTU9ERV9BQlMpO1xuJiM0MztcdFx0fVxuIFx0XHRfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7XG4gXG4gXHRcdC8qXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMDU6MjE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RVBPTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtlcF9wb2xsJiMzNDssCiAgICAmIzM0O2RvX2Vwb2xsX3dhaXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHRpbWVvdXQgY2FsY3VsYXRpb24gbG9naWMgaW4gYGVwX3BvbGxgICh1c2VkIGJ5IGBlcG9sbF93YWl0YCksIG1vdmluZyB0aGUgc2xhY2sgY2FsY3VsYXRpb24gaW5zaWRlIHRoZSB3YWl0IGxvb3AuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGV2ZW50cG9sbCBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIGluIHRpbWVvdXQgaGFuZGxpbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGJlMTVlY2RmZGE2NTQ3YTNlNTlhZGM5YzMzODcyN2U5NzdiZTY5YWUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEp1bCA4IDA1OjIxOjIzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvZXZlbnRwb2xsLmMgYi9mcy9ldmVudHBvbGwuYwppbmRleCAwZTY1Yzc0MzFkZmNkYS4uMTI4ZDdmZDNkMGVhM2YgMTAwNjQ0Ci0tLSBhL2ZzL2V2ZW50cG9sbC5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V2ZW50cG9sbC5jCkBAIC0yMjQ4LDcgJiM0MzsyMjQ4LDYgQEAgc3RhdGljIGludCBlcF9wb2xsKHN0cnVjdCBldmVudHBvbGwgKmVwLCBzdHJ1Y3QgZXBvbGxfZXZlbnQgX191c2VyICpldmVudHMsCiAJbG9ja2RlcF9hc3NlcnRfaXJxc19lbmFibGVkKCk7CiAKIAlpZiAodGltZW91dCAmYW1wOyZhbXA7ICh0aW1lb3V0LSZndDt0dl9zZWMgfCB0aW1lb3V0LSZndDt0dl9uc2VjKSkgewotCQlzbGFjayA9IHNlbGVjdF9lc3RpbWF0ZV9hY2N1cmFjeSh0aW1lb3V0KTsKIAkJdG8gPSAmYW1wO2V4cGlyZXM7CiAJCSp0byA9IHRpbWVzcGVjNjRfdG9fa3RpbWUoKnRpbWVvdXQpOwogCX0gZWxzZSBpZiAodGltZW91dCkgewpAQCAtMjMyNywxMCAmIzQzOzIzMjYsMTMgQEAgc3RhdGljIGludCBlcF9wb2xsKHN0cnVjdCBldmVudHBvbGwgKmVwLCBzdHJ1Y3QgZXBvbGxfZXZlbnQgX191c2VyICpldmVudHMsCiAKIAkJc3Bpbl91bmxvY2tfaXJxKCZhbXA7ZXAtJmd0O2xvY2spOwogCi0JCWlmICghZWF2YWlsKQomIzQzOwkJaWYgKCFlYXZhaWwpIHsKJiM0MzsJCQlpZiAodG8pCiYjNDM7CQkJCXNsYWNrID0gc2VsZWN0X2VzdGltYXRlX2FjY3VyYWN5KHRpbWVvdXQpOwogCQkJdGltZWRfb3V0ID0gIWVwX3NjaGVkdWxlX3RpbWVvdXQodG8pIHx8CiAJCQkJIXNjaGVkdWxlX2hydGltZW91dF9yYW5nZSh0bywgc2xhY2ssCiAJCQkJCQkJICBIUlRJTUVSX01PREVfQUJTKTsKJiM0MzsJCX0KIAkJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOwogCiAJCS8qCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDA1OjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5ODEKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA5MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBLZXJuZWwgUGF0Y2g6IEV2ZW50cG9sbCBhbmQgVGltZW91dCBBY2N1cmFjeSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHNlZW1zIHRvIGJlIHR3ZWFraW5nIGBmcy9ldmVudHBvbGwuY2AuIFRoZSBjb3JlIG9mIHRoaXMgc2VlbXMgdG8gYmUgYWJvdXQgdGhlIHBsYWNlbWVudCBvZiB0aGUgYHNsYWNrID0gc2VsZWN0X2VzdGltYXRlX2FjY3VyYWN5KHRpbWVvdXQpO2AgY2FsbC4gQmVmb3JlLCBpdCB3YXMgaGFwcGVuaW5nIG91dHNpZGUgdGhlIG1haW4gbG9vcCwgYnV0IG5vdyBpdCYjMzk7cyBtb3ZlZCAqaW5zaWRlKiB0aGUgbG9vcCwgcmlnaHQgYmVmb3JlIGBlcF9zY2hlZHVsZV90aW1lb3V0KHRvKWAuIFRoYXQgaW1tZWRpYXRlbHkgcmFpc2VzIGEgZmxhZyDigJMgYGVwX3BvbGxgIGlzLCBvZiBjb3Vyc2UsIGFic29sdXRlbHkgY2VudHJhbCB0byBob3cgYGVwb2xsX3dhaXRgIGZ1bmN0aW9ucy4gVGhpcyBjaGFuZ2UgY291bGQgaGF2ZSBhIG5vbi10cml2aWFsIGltcGFjdCBvbiBwZXJmb3JtYW5jZSBvciwgZXZlbiB3b3JzZSwgY29ycmVjdG5lc3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSB0aGlzIHdhcyBkb25lLiBMZXQmIzM5O3MgZ28gc3RyYWlnaHQgdG8gdGhlIGNvZGUuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGNvbnRleHQgYXJvdW5kIGxpbmUgMjMyNiBvZiBgZnMvZXZlbnRwb2xsLmNgIHRvIHNlZSBwcmVjaXNlbHkgd2hhdCB0aGUgZGV2ZWxvcGVycyB3ZXJlIGFpbWluZyBmb3Igd2l0aCB0aGlzIG1vZGlmaWNhdGlvbi4gSSYjMzk7bGwgZm9jdXMgb24gdGhlIGltcGxpY2F0aW9ucyBmb3IgdGltZW91dCBoYW5kbGluZyB3aXRoaW4gdGhlIGVwb2xsIG1lY2hhbmlzbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAwNToyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2V2ZW50cG9sbC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjI0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjI0MDpcdFx0XHQgICBpbnQgbWF4ZXZlbnRzLCBzdHJ1Y3QgdGltZXNwZWM2NCAqdGltZW91dClcbjIyNDE6XHR7XG4yMjQyOlx0XHRpbnQgcmVzLCB0aW1lZF9vdXQgPSAwO1xuMjI0MzpcdFx0Ym9vbCBlYXZhaWw7XG4yMjQ0Olx0XHR1NjQgc2xhY2sgPSAwO1xuMjI0NTpcdFx0d2FpdF9xdWV1ZV9lbnRyeV90IHdhaXQ7XG4yMjQ2Olx0XHRrdGltZV90IGV4cGlyZXMsICp0byA9IE5VTEw7XG4yMjQ3Olx0XG4yMjQ4Olx0XHRsb2NrZGVwX2Fzc2VydF9pcnFzX2VuYWJsZWQoKTtcbjIyNDk6XHRcbjIyNTA6XHRcdGlmICh0aW1lb3V0IFx1MDAyNlx1MDAyNiAodGltZW91dC1cdTAwM2V0dl9zZWMgfCB0aW1lb3V0LVx1MDAzZXR2X25zZWMpKSB7XG4yMjUxOlx0XHRcdHRvID0gXHUwMDI2ZXhwaXJlcztcbjIyNTI6XHRcdFx0KnRvID0gdGltZXNwZWM2NF90b19rdGltZSgqdGltZW91dCk7XG4yMjUzOlx0XHR9IGVsc2UgaWYgKHRpbWVvdXQpIHtcbjIyNTQ6XHRcdFx0LypcbjIyNTU6XHRcdFx0ICogQXZvaWQgdGhlIHVubmVjZXNzYXJ5IHRyaXAgdG8gdGhlIHdhaXQgcXVldWUgbG9vcCwgaWYgdGhlXG4yMjU2Olx0XHRcdCAqIGNhbGxlciBzcGVjaWZpZWQgYSBub24gYmxvY2tpbmcgb3BlcmF0aW9uLlxuMjI1NzpcdFx0XHQgKi9cbjIyNTg6XHRcdFx0dGltZWRfb3V0ID0gMTtcbjIyNTk6XHRcdH1cbjIyNjA6XHRcbjIyNjE6XHRcdC8qXG4yMjYyOlx0XHQgKiBUaGlzIGNhbGwgaXMgcmFjeTogV2UgbWF5IG9yIG1heSBub3Qgc2VlIGV2ZW50cyB0aGF0IGFyZSBiZWluZyBhZGRlZFxuMjI2MzpcdFx0ICogdG8gdGhlIHJlYWR5IGxpc3QgdW5kZXIgdGhlIGxvY2sgKGUuZy4sIGluIElSUSBjYWxsYmFja3MpLiBGb3IgY2FzZXNcbjIyNjQ6XHRcdCAqIHdpdGggYSBub24temVybyB0aW1lb3V0LCB0aGlzIHRocmVhZCB3aWxsIGNoZWNrIHRoZSByZWFkeSBsaXN0IHVuZGVyXG4yMjY1Olx0XHQgKiBsb2NrIGFuZCB3aWxsIGFkZCB0byB0aGUgd2FpdCBxdWV1ZS4gIEZvciBjYXNlcyB3aXRoIGEgemVyb1xuMjI2NjpcdFx0ICogdGltZW91dCwgdGhlIHVzZXIgYnkgZGVmaW5pdGlvbiBzaG91bGQgbm90IGNhcmUgYW5kIHdpbGwgaGF2ZSB0b1xuMjI2NzpcdFx0ICogcmVjaGVjayBhZ2Fpbi5cbjIyNjg6XHRcdCAqL1xuMjI2OTpcdFx0ZWF2YWlsID0gZXBfZXZlbnRzX2F2YWlsYWJsZShlcCk7XG4yMjcwOlx0XG4yMjcxOlx0XHR3aGlsZSAoMSkge1xuMjI3MjpcdFx0XHRpZiAoZWF2YWlsKSB7XG4yMjczOlx0XHRcdFx0cmVzID0gZXBfdHJ5X3NlbmRfZXZlbnRzKGVwLCBldmVudHMsIG1heGV2ZW50cyk7XG4yMjc0Olx0XHRcdFx0aWYgKHJlcylcbjIyNzU6XHRcdFx0XHRcdHJldHVybiByZXM7XG4yMjc2Olx0XHRcdH1cbjIyNzc6XHRcbjIyNzg6XHRcdFx0aWYgKHRpbWVkX291dClcbjIyNzk6XHRcdFx0XHRyZXR1cm4gMDtcbjIyODA6XHRcbjIyODE6XHRcdFx0ZWF2YWlsID0gZXBfYnVzeV9sb29wKGVwKTtcbjIyODI6XHRcdFx0aWYgKGVhdmFpbClcbjIyODM6XHRcdFx0XHRjb250aW51ZTtcbjIyODQ6XHRcbjIyODU6XHRcdFx0aWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKVxuMjI4NjpcdFx0XHRcdHJldHVybiAtRUlOVFI7XG4yMjg3Olx0XG4yMjg4Olx0XHRcdC8qXG4yMjg5Olx0XHRcdCAqIEludGVybmFsbHkgaW5pdF93YWl0KCkgdXNlcyBhdXRvcmVtb3ZlX3dha2VfZnVuY3Rpb24oKSxcbjIyOTA6XHRcdFx0ICogdGh1cyB3YWl0IGVudHJ5IGlzIHJlbW92ZWQgZnJvbSB0aGUgd2FpdCBxdWV1ZSBvbiBlYWNoXG4yMjkxOlx0XHRcdCAqIHdha2V1cC4gV2h5IGl0IGlzIGltcG9ydGFudD8gSW4gY2FzZSBvZiBzZXZlcmFsIHdhaXRlcnNcbjIyOTI6XHRcdFx0ICogZWFjaCBuZXcgd2FrZXVwIHdpbGwgaGl0IHRoZSBuZXh0IHdhaXRlciwgZ2l2aW5nIGl0IHRoZVxuMjI5MzpcdFx0XHQgKiBjaGFuY2UgdG8gaGFydmVzdCBuZXcgZXZlbnQuIE90aGVyd2lzZSB3YWtldXAgY2FuIGJlXG4yMjk0Olx0XHRcdCAqIGxvc3QuIFRoaXMgaXMgYWxzbyBnb29kIHBlcmZvcm1hbmNlLXdpc2UsIGJlY2F1c2Ugb25cbjIyOTU6XHRcdFx0ICogbm9ybWFsIHdha2V1cCBwYXRoIG5vIG5lZWQgdG8gY2FsbCBfX3JlbW92ZV93YWl0X3F1ZXVlKClcbjIyOTY6XHRcdFx0ICogZXhwbGljaXRseSwgdGh1cyBlcC1cdTAwM2Vsb2NrIGlzIG5vdCB0YWtlbiwgd2hpY2ggaGFsdHMgdGhlXG4yMjk3Olx0XHRcdCAqIGV2ZW50IGRlbGl2ZXJ5LlxuMjI5ODpcdFx0XHQgKlxuMjI5OTpcdFx0XHQgKiBJbiBmYWN0LCB3ZSBub3cgdXNlIGFuIGV2ZW4gbW9yZSBhZ2dyZXNzaXZlIGZ1bmN0aW9uIHRoYXRcbjIzMDA6XHRcdFx0ICogdW5jb25kaXRpb25hbGx5IHJlbW92ZXMsIGJlY2F1c2Ugd2UgZG9uJiMzOTt0IHJldXNlIHRoZSB3YWl0XG4yMzAxOlx0XHRcdCAqIGVudHJ5IGJldHdlZW4gbG9vcCBpdGVyYXRpb25zLiBUaGlzIGxldHMgdXMgYWxzbyBhdm9pZCB0aGVcbjIzMDI6XHRcdFx0ICogcGVyZm9ybWFuY2UgaXNzdWUgaWYgYSBwcm9jZXNzIGlzIGtpbGxlZCwgY2F1c2luZyBhbGwgb2YgaXRzXG4yMzAzOlx0XHRcdCAqIHRocmVhZHMgdG8gd2FrZSB1cCB3aXRob3V0IGJlaW5nIHJlbW92ZWQgbm9ybWFsbHkuXG4yMzA0Olx0XHRcdCAqL1xuMjMwNTpcdFx0XHRpbml0X3dhaXQoXHUwMDI2d2FpdCk7XG4yMzA2Olx0XHRcdHdhaXQuZnVuYyA9IGVwX2F1dG9yZW1vdmVfd2FrZV9mdW5jdGlvbjtcbjIzMDc6XHRcbjIzMDg6XHRcdFx0c3Bpbl9sb2NrX2lycShcdTAwMjZlcC1cdTAwM2Vsb2NrKTtcbjIzMDk6XHRcdFx0LypcbjIzMTA6XHRcdFx0ICogQmFycmllcmxlc3MgdmFyaWFudCwgd2FpdHF1ZXVlX2FjdGl2ZSgpIGlzIGNhbGxlZCB1bmRlclxuMjMxMTpcdFx0XHQgKiB0aGUgc2FtZSBsb2NrIG9uIHdha2V1cCBlcF9wb2xsX2NhbGxiYWNrKCkgc2lkZSwgc28gaXRcbjIzMTI6XHRcdFx0ICogaXMgc2FmZSB0byBhdm9pZCBhbiBleHBsaWNpdCBiYXJyaWVyLlxuMjMxMzpcdFx0XHQgKi9cbjIzMTQ6XHRcdFx0X19zZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpO1xuMjMxNTpcdFxuMjMxNjpcdFx0XHQvKlxuMjMxNzpcdFx0XHQgKiBEbyB0aGUgZmluYWwgY2hlY2sgdW5kZXIgdGhlIGxvY2suIGVwX3N0YXJ0L2RvbmVfc2NhbigpXG4yMzE4Olx0XHRcdCAqIHBsYXlzIHdpdGggdHdvIGxpc3RzICgtXHUwMDNlcmRsbGlzdCBhbmQgLVx1MDAzZW92Zmxpc3QpIGFuZCB0aGVyZVxuMjMxOTpcdFx0XHQgKiBpcyBhbHdheXMgYSByYWNlIHdoZW4gYm90aCBsaXN0cyBhcmUgZW1wdHkgZm9yIHNob3J0XG4yMzIwOlx0XHRcdCAqIHBlcmlvZCBvZiB0aW1lIGFsdGhvdWdoIGV2ZW50cyBhcmUgcGVuZGluZywgc28gbG9jayBpc1xuMjMyMTpcdFx0XHQgKiBpbXBvcnRhbnQuXG4yMzIyOlx0XHRcdCAqL1xuMjMyMzpcdFx0XHRlYXZhaWwgPSBlcF9ldmVudHNfYXZhaWxhYmxlKGVwKTtcbjIzMjQ6XHRcdFx0aWYgKCFlYXZhaWwpXG4yMzI1Olx0XHRcdFx0X19hZGRfd2FpdF9xdWV1ZV9leGNsdXNpdmUoXHUwMDI2ZXAtXHUwMDNld3EsIFx1MDAyNndhaXQpO1xuMjMyNjpcdFxuMjMyNzpcdFx0XHRzcGluX3VubG9ja19pcnEoXHUwMDI2ZXAtXHUwMDNlbG9jayk7XG4yMzI4Olx0XG4yMzI5Olx0XHRcdGlmICghZWF2YWlsKSB7XG4yMzMwOlx0XHRcdFx0aWYgKHRvKVxuMjMzMTpcdFx0XHRcdFx0c2xhY2sgPSBzZWxlY3RfZXN0aW1hdGVfYWNjdXJhY3kodGltZW91dCk7XG4yMzMyOlx0XHRcdFx0dGltZWRfb3V0ID0gIWVwX3NjaGVkdWxlX3RpbWVvdXQodG8pIHx8XG4yMzMzOlx0XHRcdFx0XHQhc2NoZWR1bGVfaHJ0aW1lb3V0X3JhbmdlKHRvLCBzbGFjayxcbjIzMzQ6XHRcdFx0XHRcdFx0XHRcdCAgSFJUSU1FUl9NT0RFX0FCUyk7XG4yMzM1Olx0XHRcdH1cbjIzMzY6XHRcdFx0X19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpO1xuMjMzNzpcdFxuMjMzODpcdFx0XHQvKlxuMjMzOTpcdFx0XHQgKiBXZSB3ZXJlIHdva2VuIHVwLCB0aHVzIGdvIGFuZCB0cnkgdG8gaGFydmVzdCBzb21lIGV2ZW50cy5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAwNToyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODA3CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMzU4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRXBvbGwgVGltZW91dCBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGFib3V0IG9wdGltaXppbmcgdGhlIGBlcG9sbF93YWl0YCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IGJ5IGRlbGF5aW5nIHRoZSBjYWxjdWxhdGlvbiBvZiBgc2xhY2tgLiBUaGUgY29yZSBpZGVhIGlzIHRvIGF2b2lkIGNhbGxpbmcgYHNlbGVjdF9lc3RpbWF0ZV9hY2N1cmFjeWAgdW5sZXNzIGl0JiMzOTtzIHN0cmljdGx5IG5lY2Vzc2FyeS4gUmlnaHQsIHRoYXQmIzM5O3MgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYXMgaXQgYXZvaWRzIHRoYXQgY2FsY3VsYXRpb24gd2hlbiBgZWF2YWlsYCBpcyB0cnVlIG9yIGlmIHRoZXJlJiMzOTtzIGEgdGltZW91dCBiZWZvcmUgdGhhdCBwb2ludC4gTm93LCBgc2VsZWN0X2VzdGltYXRlX2FjY3VyYWN5YCBpcyB0aGUgZnVuY3Rpb24gdGhhdCBhY3R1YWxseSAqY2FsY3VsYXRlcyogdGhlIHNsYWNrLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIGlzIHRoaXMgZXZlbiB3b3J0aCBmdXp6aW5nPyBJdCBzZWVtcyBsaWtlIGEgcmVsYXRpdmVseSBtaW5vciBvcHRpbWl6YXRpb24gaW4gdGhlIGNvbnRleHQgb2YgYGVwb2xsX3dhaXRgLgoKV2FpdCwgYWN0dWFsbHksIGBlcG9sbF93YWl0YCAqaXMqIGRlZmluaXRlbHkgYSByZWFjaGFibGUgY29kZSBwYXRoLCBzbyB0aGF0IG1ha2VzIHRoaXMgY2hhbmdlIHBvdGVudGlhbGx5IHJlbGV2YW50LiBJIG5lZWQgdG8gdGhpbmsgYWJvdXQgdGhlIHBvc3NpYmxlIHNpZGUgZWZmZWN0cy4gQ291bGQgaXQgaW50cm9kdWNlIGEgYnVnPyBMZXQmIzM5O3MgdHJhY2UgaXQgb3V0LiBJZiBgdG9gIGlzIG5vdCBOVUxMLCBgc2xhY2tgICppcyogY2FsY3VsYXRlZC4gSWYgYHRvYCAqaXMqIE5VTEwsIGBzbGFja2AgaXMgaW5pdGlhbGl6ZWQgdG8gMCBhdCB0aGUgdG9wIG9mIHRoZSBmdW5jdGlvbiBhbnl3YXkuIE9rYXksIHRoYXQgc2VlbXMgc3RyYWlnaHRmb3J3YXJkLgoKSG9sZCBvbiwgSSByZW1lbWJlciB0aGF0IGBlcF9zY2hlZHVsZV90aW1lb3V0YCBkb2VzbiYjMzk7dCBhY3R1YWxseSB1c2UgdGhlIGBzbGFja2AgdmFyaWFibGUgZGlyZWN0bHkuIEJ1dCwgd2FpdCwgYHNjaGVkdWxlX2hydGltZW91dF9yYW5nZWAgKmRvZXMqIHVzZSBpdCEgU28sIHRoaXMgaXMgcG90ZW50aWFsbHkgaW1wb3J0YW50IHRvIGdldCByaWdodC4gTGV0JiMzOTtzIGxvb2sgYXQgdGhlIGJlZm9yZSBhbmQgYWZ0ZXIgY29kZSBzbmlwcGV0cyB0byBjb21wYXJlLgoKT2theSwgaGVyZSYjMzk7cyB0aGUgb3JpZ2luYWwgY29kZSBzbmlwcGV0OgpgYGBjCglpZiAodGltZW91dCAmYW1wOyZhbXA7ICh0aW1lb3V0LSZndDt0dl9zZWMgfCB0aW1lb3V0LSZndDt0dl9uc2VjKSkgewoJCXNsYWNrID0gc2VsZWN0X2VzdGltYXRlX2FjY3VyYWN5KHRpbWVvdXQpOwoJCXRvID0gJmFtcDtleHBpcmVzOwoJCSp0byA9IHRpbWVzcGVjNjRfdG9fa3RpbWUoKnRpbWVvdXQpOwoJfSBlbHNlIGlmICh0aW1lb3V0KSB7CmBgYAoKQW5kIG5vdyB0aGUgbmV3IGNvZGU6CmBgYGMKCQlpZiAoIWVhdmFpbCkgewoJCQlpZiAodG8pCgkJCQlzbGFjayA9IHNlbGVjdF9lc3RpbWF0ZV9hY2N1cmFjeSh0aW1lb3V0KTsKCQkJdGltZWRfb3V0ID0gIWVwX3NjaGVkdWxlX3RpbWVvdXQodG8pIHx8CgkJCQkhc2NoZWR1bGVfaHJ0aW1lb3V0X3JhbmdlKHRvLCBzbGFjaywKCQkJCQkJCSAgSFJUSU1FUl9NT0RFX0FCUyk7CgkJfQpgYGAKCk9rYXksIHNvIHdlJiMzOTtyZSBkZWZlcnJpbmcgdGhhdCBjYWxjdWxhdGlvbi4gV2UgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gdGhhdCB0aGlzIGRvZXNuJiMzOTt0IGNyZWF0ZSBzb21lIHN1YnRsZSB0aW1pbmcgaXNzdWUsIGVzcGVjaWFsbHkgd2l0aCB0aGUgdXNlIG9mIGBzY2hlZHVsZV9ocnRpbWVvdXRfcmFuZ2VgLiBJIG5lZWQgdG8gbG9vayBhdCBgZXBfc2NoZWR1bGVfdGltZW91dCh0bylgIGNsb3NlbHkuIElzIHRoYXQgYSBtYWNybyBvciBhIGZ1bmN0aW9uPyBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBkZWZpbml0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDA1OjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2VwX3NjaGVkdWxlX3RpbWVvdXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXZlbnRwb2xsLmM9MjE5OD1zdGF0aWMgaW50IGVwX3RyeV9zZW5kX2V2ZW50cyhzdHJ1Y3QgZXZlbnRwb2xsICplcCxcbi0tXG5mcy9ldmVudHBvbGwuYy0yMjEzLVxuZnMvZXZlbnRwb2xsLmM6MjIxNDpzdGF0aWMgaW50IGVwX3NjaGVkdWxlX3RpbWVvdXQoa3RpbWVfdCAqdG8pXG5mcy9ldmVudHBvbGwuYy0yMjE1LXtcbi0tXG5mcy9ldmVudHBvbGwuYz0yMjM5PXN0YXRpYyBpbnQgZXBfcG9sbChzdHJ1Y3QgZXZlbnRwb2xsICplcCwgc3RydWN0IGVwb2xsX2V2ZW50IF9fdXNlciAqZXZlbnRzLFxuLS1cbmZzL2V2ZW50cG9sbC5jLTIzMzEtXHRcdFx0XHRzbGFjayA9IHNlbGVjdF9lc3RpbWF0ZV9hY2N1cmFjeSh0aW1lb3V0KTtcbmZzL2V2ZW50cG9sbC5jOjIzMzI6XHRcdFx0dGltZWRfb3V0ID0gIWVwX3NjaGVkdWxlX3RpbWVvdXQodG8pIHx8XG5mcy9ldmVudHBvbGwuYy0yMzMzLVx0XHRcdFx0IXNjaGVkdWxlX2hydGltZW91dF9yYW5nZSh0bywgc2xhY2ssXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMDU6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDk0MAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBGdW5jdGlvbiBgZXBfc2NoZWR1bGVfdGltZW91dGAqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBlcF9zY2hlZHVsZV90aW1lb3V0YCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgaW4gdGhlIGJyb2FkZXIgc3lzdGVtLiBJJiMzOTttIGFzc3VtaW5nLCBiYXNlZCBvbiB0aGUgbmFtaW5nLCB0aGF0IGl0JiMzOTtzIHJlbGF0ZWQgdG8gZW5kcG9pbnQgbWFuYWdlbWVudCBhbmQgcHJvYmFibHkgc29tZSBraW5kIG9mIHRpbWVvdXQgbWVjaGFuaXNtLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIGNoZWNrIGl0cyBjYWxsIHNpdGVzIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHdoZXJlIHRoaXMgaXMgYmVpbmcgdXNlZCBhbmQgd2h5LiBJcyBpdCBwYXJ0IG9mIHRoZSBjb25uZWN0aW9uIGxpZmVjeWNsZSBtYW5hZ2VtZW50PyBJcyBpdCByZWxhdGVkIHRvIGVycm9yIHJlY292ZXJ5IG9yIHJlc291cmNlIGNsZWFudXA/IEFyZSB3ZSBkZWFsaW5nIHdpdGggYWN0aXZlIHBvbGxpbmcsIG9yIGlzIHRoaXMgbW9yZSBhYm91dCBpZGxlIGNvbm5lY3Rpb24gbW9uaXRvcmluZz8gVGhlIG5hbWUgaXMgdmVyeSBnZW5lcmljLCB3aGljaCBpbXBsaWVzIGl0JiMzOTtzIGVpdGhlciB2ZXJ5IGNyaXRpY2FsIG9yIHdpZGVseSB1c2VkLiBUaW1lIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aCBhbmQgaWRlbnRpZnkgaG93IHRoaXMgdGltZW91dCBpbmZsdWVuY2VzIHRoZSBvdmVyYWxsIGFwcGxpY2F0aW9uIGZsb3cuIEkmIzM5O20gZ29pbmcgdG8gbG9vayBmb3IgYW55IHN1YnRsZSBkaWZmZXJlbmNlcyBpbiBiZWhhdmlvciBiYXNlZCBvbiBob3cgdGhlIHRpbWVvdXQgaXMgc2V0LiBJIHdhbnQgdG8gc2VlIGlmIHRoZSB0aW1lb3V0IGlzIGJhc2VkIG9uIHN5c3RlbSB0aW1lIG9yIG1vbm90b25pYyBjbG9jay4gVGhlIGFuc3dlciB0byB0aG9zZSBxdWVzdGlvbnMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgcG90ZW50aWFsIHJpc2tzIHRoYXQgYXJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMDU6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9ldmVudHBvbGwuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIyMTQsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjIxNDpcdHN0YXRpYyBpbnQgZXBfc2NoZWR1bGVfdGltZW91dChrdGltZV90ICp0bylcbjIyMTU6XHR7XG4yMjE2Olx0XHRpZiAodG8pXG4yMjE3Olx0XHRcdHJldHVybiBrdGltZV9hZnRlcigqdG8sIGt0aW1lX2dldCgpKTtcbjIyMTg6XHRcdGVsc2VcbjIyMTk6XHRcdFx0cmV0dXJuIDE7XG4yMjIwOlx0fVxuMjIyMTpcdFxuMjIyMjpcdC8qKlxuMjIyMzpcdCAqIGVwX3BvbGwgLSBSZXRyaWV2ZXMgcmVhZHkgZXZlbnRzLCBhbmQgZGVsaXZlcnMgdGhlbSB0byB0aGUgY2FsbGVyLXN1cHBsaWVkXG4yMjI0Olx0ICogICAgICAgICAgIGV2ZW50IGJ1ZmZlci5cbjIyMjU6XHQgKlxuMjIyNjpcdCAqIEBlcDogUG9pbnRlciB0byB0aGUgZXZlbnRwb2xsIGNvbnRleHQuXG4yMjI3Olx0ICogQGV2ZW50czogUG9pbnRlciB0byB0aGUgdXNlcnNwYWNlIGJ1ZmZlciB3aGVyZSB0aGUgcmVhZHkgZXZlbnRzIHNob3VsZCBiZVxuMjIyODpcdCAqICAgICAgICAgIHN0b3JlZC5cbjIyMjk6XHQgKiBAbWF4ZXZlbnRzOiBTaXplIChpbiB0ZXJtcyBvZiBudW1iZXIgb2YgZXZlbnRzKSBvZiB0aGUgY2FsbGVyIGV2ZW50IGJ1ZmZlci5cbjIyMzA6XHQgKiBAdGltZW91dDogTWF4aW11bSB0aW1lb3V0IGZvciB0aGUgcmVhZHkgZXZlbnRzIGZldGNoIG9wZXJhdGlvbiwgaW5cbjIyMzE6XHQgKiAgICAgICAgICAgdGltZXNwZWMuIElmIHRoZSB0aW1lb3V0IGlzIHplcm8sIHRoZSBmdW5jdGlvbiB3aWxsIG5vdCBibG9jayxcbjIyMzI6XHQgKiAgICAgICAgICAgd2hpbGUgaWYgdGhlIEB0aW1lb3V0IHB0ciBpcyBOVUxMLCB0aGUgZnVuY3Rpb24gd2lsbCBibG9ja1xuMjIzMzpcdCAqICAgICAgICAgICB1bnRpbCBhdCBsZWFzdCBvbmUgZXZlbnQgaGFzIGJlZW4gcmV0cmlldmVkIChvciBhbiBlcnJvclxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDA1OjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU1NDkKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiAyMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBkZWxheWluZyB0aGUgY2FsbCB0byBgc2VsZWN0X2VzdGltYXRlX2FjY3VyYWN5YC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgaXQgKm1pZ2h0KiBvZmZlciBhIHNsaWdodCBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudCBieSBub3QgYmxvY2tpbmcgYXMgZWFybHkuIFRoZSBxdWVzdGlvbiBpcywgaXMgaXQgd29ydGggZnV6emluZz8gSXQmIzM5O3MgYSBzbWFsbCBtb2RpZmljYXRpb24gd2l0aGluIGBlcF9wb2xsYCwgYnV0Li4uIGBlcG9sbF93YWl0YCBpcyBhbHJlYWR5IGEgc3lzY2FsbCB0aGF0JiMzOTtzIGhlYXZpbHkgdGFyZ2V0ZWQgYnkgZnV6emluZyBlZmZvcnRzLgoKVGhpcyAqaXMqIGEgZnVuY3Rpb25hbCBjaGFuZ2Ug4oCTIGl0IGFsdGVycyAqd2hlbiogYW5kIHBvdGVudGlhbGx5ICpob3cgb2Z0ZW4qIGBzZWxlY3RfZXN0aW1hdGVfYWNjdXJhY3lgIGdldHMgY2FsbGVkLiBTcGVjaWZpY2FsbHksIGl0IGNvdWxkIGJlIGNhbGxlZCByZXBlYXRlZGx5IGlmIHRoZSBsb29wIGl0ZXJhdGVzIGFuZCBpZiBgdG9gIGlzbiYjMzk7dCBOVUxMIGFuZCBgIWVhdmFpbGAuIFRoaW5raW5nIHRoaXMgdGhyb3VnaCwgdGhvdWdoLCBpZiB0aGUgbG9vcCAqZG9lcyogaXRlcmF0ZSwgYHNsYWNrYCBpcyByZWNhbGN1bGF0ZWQsIHdoaWNoIGlzIGltcG9ydGFudC4gTm93LCBpcyB0aGUgYHRpbWVvdXRgIGl0c2VsZiBiZWluZyBtb2RpZmllZCB3aXRoaW4gdGhlIGxvb3A/IE5vcGUuIEl0JiMzOTtzIGEgcG9pbnRlciB0byBhIGBzdHJ1Y3QgdGltZXNwZWM2NGAsIHdoaWNoIHJlbWFpbnMgdW50b3VjaGVkLCBzbyByZWNhbGN1bGF0aW5nIGFuZCBwb3RlbnRpYWxseSBjYWxsaW5nIGBzZWxlY3RfZXN0aW1hdGVfYWNjdXJhY3lgIG11bHRpcGxlIHRpbWVzIGlzbiYjMzk7dCBwcm9ibGVtYXRpYy4gV2FpdCwgYHNlbGVjdF9lc3RpbWF0ZV9hY2N1cmFjeWAgdXNlcyBgY3VycmVudC0mZ3Q7dGltZXJfc2xhY2tfbnNgLgoKQWxyaWdodCwgSSYjMzk7bSBsZWFuaW5nIHRvd2FyZHMgeWVzLCB0aGlzIGlzIHdvcnRoIGZ1enppbmcuIEl0JiMzOTtzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgZGlyZWN0bHkgd2l0aGluIGNvcmUga2VybmVsIGxvZ2ljIHJlbGF0ZWQgdG8gYGVwb2xsYC4gVGhlIGtleSBmdW5jdGlvbnMgdG8gZm9jdXMgb24gYXJlIGBlcF9wb2xsYCBhbmQgYGRvX2Vwb2xsX3dhaXRgLiBJIHNob3VsZCBjaGVjayBmb3IgYW55IGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLCBwYXJ0aWN1bGFybHkgaWYgYW55dGhpbmcgc3BlY2lmaWMgZGlzYWJsZXMgb3IgbW9kaWZpZXMgYEVQT0xMYC4gQWx0aG91Z2ggYEVQT0xMYCBpcyB1c3VhbGx5IGVuYWJsZWQsIGl0IGlzIHdvcnRoIGNvbmZpcm1pbmcgdGhhdCB0aGVyZSBhcmUgbm8gc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgbWlnaHQgYWZmZWN0IHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDA1OjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBFUE9MTCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbml0L0tjb25maWc9MTg1OT1jb25maWcgRlVURVhfUk9CVVNUX1VOTE9DS1xuLS1cbmluaXQvS2NvbmZpZy0xODYxLVxuaW5pdC9LY29uZmlnOjE4NjI6Y29uZmlnIEVQT0xMXG5pbml0L0tjb25maWctMTg2My1cdGJvb2wgXCYjMzQ7RW5hYmxlIGV2ZW50cG9sbCBzdXBwb3J0XCYjMzQ7IGlmIEVYUEVSVFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAwNToyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MjI1CgkJCQkJCQlvdXRwdXQ6IDEwNAoJCQkJCQkJdGhvdWdodHM6IDEwOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBGdXp6aW5nIFN0cmF0ZWd5OiBFUE9MTCBUaW1lb3V0IExvZ2ljKioKCk9rYXksIHNvIGBFUE9MTGAgaXMgZW5hYmxlZCBieSBkZWZhdWx0LCB3aGljaCBpcyBjb252ZW5pZW50LiBUaGUgcGxhbiBpcyBjbGVhcjogSSBuZWVkIHRvIHRhcmdldCB0aGlzLiBJJiMzOTt2ZSBnb3QgbXkgcGFyYW1ldGVycyByZWFkeSB0byBnby4KClRoZSBjcml0aWNhbCB0aGluZyBpcyB0byBzZXQgdGhlIHJlc3VsdHMuIEkmIzM5O20gcHJpb3JpdGl6aW5nIHRoaXMsIEkmIzM5O20gc2V0dGluZyBgV29ydGhGdXp6aW5nYCB0byBgdHJ1ZWAuCgpJJiMzOTttIHplcm9pbmcgaW4gb24gYCYjMzQ7ZXBfcG9sbCYjMzQ7YCBhbmQgYCYjMzQ7ZG9fZXBvbGxfd2FpdCYjMzQ7YCBzcGVjaWZpY2FsbHkg4oCTIHRob3NlIGFyZSB0aGUgZnVuY3Rpb25zIEkgd2FudCB0byBmb2N1cyBteSBlZmZvcnRzIG9uLiBUaGF0JiMzOTtzIHRoZSBjb3JlIG9mIG15IGFwcHJvYWNoLgoKVGhlbiwgdG8gcmVpbmZvcmNlIG15IGZvY3VzLCBJIHdpbGwgZW5zdXJlIHRoYXQgdGhlIGAmIzM0O0VQT0xMJiMzNDtgIGNvbmZpZ3VyYXRpb24gaXMgYWN0aXZlbHkgZW5hYmxlZC4gSXQmIzM5O3MgdGhlIGx5bmNocGluIGZvciB0aGlzIHRlc3QuCgpNeSByZWFzb25pbmc/IFNpbXBsZS4gVGhpcyBwYXRjaCBpcyBmdW5kYW1lbnRhbGx5IGNoYW5naW5nIGhvdyB0aW1lb3V0cyBhcmUgaGFuZGxlZCBpbiB0aGUgYGVwb2xsX3dhaXRgIHBhdGguIEl0JiMzOTtzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgY29yZSBldmVudHBvbGwgbW9kaWZpY2F0aW9uLiBUaGUgc2xhY2sgY2FsY3VsYXRpb24gaXMgYmVpbmcgbW92ZWQuIFRoaXMgd2FycmFudHMgdGhvcm91Z2ggZnV6emluZyB0byBndWFyZCBhZ2FpbnN0IGFueSByZWdyZXNzaW9ucyBpbiB0aW1lb3V0IGhhbmRsaW5nLiBJIG5lZWQgdG8gbWFrZSBjZXJ0YWluIHRoYXQgdGhlc2UgY3JpdGljYWwgdGltZSBtYW5hZ2VtZW50IGJlaGF2aW9ycyBjb250aW51ZSB0byBiZWhhdmUgYXMgZXhwZWN0ZWQsIGFuZCB0aGF0IG5vIG5ldyB2dWxuZXJhYmlsaXRpZXMgYXJlIGludHJvZHVjZWQuIFRoaXMgaXMgdGhlIHBsYWNlIHRvIGJlIG1ldGljdWxvdXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDA1OjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtFUE9MTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2VwX3BvbGwmIzM0OywKICAgICYjMzQ7ZG9fZXBvbGxfd2FpdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgdGltZW91dCBjYWxjdWxhdGlvbiBsb2dpYyBpbiBgZXBfcG9sbGAgKHVzZWQgYnkgYGVwb2xsX3dhaXRgKSwgbW92aW5nIHRoZSBzbGFjayBjYWxjdWxhdGlvbiBpbnNpZGUgdGhlIHdhaXQgbG9vcC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgZXZlbnRwb2xsIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgaW4gdGltZW91dCBoYW5kbGluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RVBPTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtlcF9wb2xsJiMzNDssCiAgICAmIzM0O2RvX2Vwb2xsX3dhaXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHRpbWVvdXQgY2FsY3VsYXRpb24gbG9naWMgaW4gYGVwX3BvbGxgICh1c2VkIGJ5IGBlcG9sbF93YWl0YCksIG1vdmluZyB0aGUgc2xhY2sgY2FsY3VsYXRpb24gaW5zaWRlIHRoZSB3YWl0IGxvb3AuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGV2ZW50cG9sbCBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIGluIHRpbWVvdXQgaGFuZGxpbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0wOFQwNToyMToyNC42MDY1ODI0OTFaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODAyMjQ5NDY4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFUE9MTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImVwX3BvbGxcIixcbiAgICBcImRvX2Vwb2xsX3dhaXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgdGltZW91dCBjYWxjdWxhdGlvbiBsb2dpYyBpbiBgZXBfcG9sbGAgKHVzZWQgYnkgYGVwb2xsX3dhaXRgKSwgbW92aW5nIHRoZSBzbGFjayBjYWxjdWxhdGlvbiBpbnNpZGUgdGhlIHdhaXQgbG9vcC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgZXZlbnRwb2xsIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgaW4gdGltZW91dCBoYW5kbGluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMDU6MjE6MjQuNjA2NTg5MDYxWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTgxMjAzNjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBiZTE1ZWNkZmRhNjU0N2EzZTU5YWRjOWMzMzg3MjdlOTc3YmU2OWFlXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgSnVsIDggMDU6MjE6MjMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZnMvZXZlbnRwb2xsLmMgYi9mcy9ldmVudHBvbGwuY1xcbmluZGV4IDBlNjVjNzQzMWRmY2RhLi4xMjhkN2ZkM2QwZWEzZiAxMDA2NDRcXG4tLS0gYS9mcy9ldmVudHBvbGwuY1xcbisrKyBiL2ZzL2V2ZW50cG9sbC5jXFxuQEAgLTIyNDgsNyArMjI0OCw2IEBAIHN0YXRpYyBpbnQgZXBfcG9sbChzdHJ1Y3QgZXZlbnRwb2xsICplcCwgc3RydWN0IGVwb2xsX2V2ZW50IF9fdXNlciAqZXZlbnRzLFxcbiBcXHRsb2NrZGVwX2Fzc2VydF9pcnFzX2VuYWJsZWQoKTtcXG4gXFxuIFxcdGlmICh0aW1lb3V0IFxcdTAwMjZcXHUwMDI2ICh0aW1lb3V0LVxcdTAwM2V0dl9zZWMgfCB0aW1lb3V0LVxcdTAwM2V0dl9uc2VjKSkge1xcbi1cXHRcXHRzbGFjayA9IHNlbGVjdF9lc3RpbWF0ZV9hY2N1cmFjeSh0aW1lb3V0KTtcXG4gXFx0XFx0dG8gPSBcXHUwMDI2ZXhwaXJlcztcXG4gXFx0XFx0KnRvID0gdGltZXNwZWM2NF90b19rdGltZSgqdGltZW91dCk7XFxuIFxcdH0gZWxzZSBpZiAodGltZW91dCkge1xcbkBAIC0yMzI3LDEwICsyMzI2LDEzIEBAIHN0YXRpYyBpbnQgZXBfcG9sbChzdHJ1Y3QgZXZlbnRwb2xsICplcCwgc3RydWN0IGVwb2xsX2V2ZW50IF9fdXNlciAqZXZlbnRzLFxcbiBcXG4gXFx0XFx0c3Bpbl91bmxvY2tfaXJxKFxcdTAwMjZlcC1cXHUwMDNlbG9jayk7XFxuIFxcbi1cXHRcXHRpZiAoIWVhdmFpbClcXG4rXFx0XFx0aWYgKCFlYXZhaWwpIHtcXG4rXFx0XFx0XFx0aWYgKHRvKVxcbitcXHRcXHRcXHRcXHRzbGFjayA9IHNlbGVjdF9lc3RpbWF0ZV9hY2N1cmFjeSh0aW1lb3V0KTtcXG4gXFx0XFx0XFx0dGltZWRfb3V0ID0gIWVwX3NjaGVkdWxlX3RpbWVvdXQodG8pIHx8XFxuIFxcdFxcdFxcdFxcdCFzY2hlZHVsZV9ocnRpbWVvdXRfcmFuZ2UodG8sIHNsYWNrLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRcXHQgIEhSVElNRVJfTU9ERV9BQlMpO1xcbitcXHRcXHR9XFxuIFxcdFxcdF9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTtcXG4gXFxuIFxcdFxcdC8qXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDA1OjIxOjI1LjAyNTQyNTE4NVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjc2MDM2NDM0NzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRVBPTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJlcF9wb2xsXCIsXG4gICAgXCJkb19lcG9sbF93YWl0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHRpbWVvdXQgY2FsY3VsYXRpb24gbG9naWMgaW4gYGVwX3BvbGxgICh1c2VkIGJ5IGBlcG9sbF93YWl0YCksIG1vdmluZyB0aGUgc2xhY2sgY2FsY3VsYXRpb24gaW5zaWRlIHRoZSB3YWl0IGxvb3AuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGV2ZW50cG9sbCBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIGluIHRpbWVvdXQgaGFuZGxpbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYmUxNWVjZGZkYTY1NDdhM2U1OWFkYzljMzM4NzI3ZTk3N2JlNjlhZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVsIDggMDU6MjE6MjMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9ldmVudHBvbGwuYyBiL2ZzL2V2ZW50cG9sbC5jXG5pbmRleCAwZTY1Yzc0MzFkZmNkYS4uMTI4ZDdmZDNkMGVhM2YgMTAwNjQ0XG4tLS0gYS9mcy9ldmVudHBvbGwuY1xuKysrIGIvZnMvZXZlbnRwb2xsLmNcbkBAIC0yMjQ4LDcgKzIyNDgsNiBAQCBzdGF0aWMgaW50IGVwX3BvbGwoc3RydWN0IGV2ZW50cG9sbCAqZXAsIHN0cnVjdCBlcG9sbF9ldmVudCBfX3VzZXIgKmV2ZW50cyxcbiBcdGxvY2tkZXBfYXNzZXJ0X2lycXNfZW5hYmxlZCgpO1xuIFxuIFx0aWYgKHRpbWVvdXQgXHUwMDI2XHUwMDI2ICh0aW1lb3V0LVx1MDAzZXR2X3NlYyB8IHRpbWVvdXQtXHUwMDNldHZfbnNlYykpIHtcbi1cdFx0c2xhY2sgPSBzZWxlY3RfZXN0aW1hdGVfYWNjdXJhY3kodGltZW91dCk7XG4gXHRcdHRvID0gXHUwMDI2ZXhwaXJlcztcbiBcdFx0KnRvID0gdGltZXNwZWM2NF90b19rdGltZSgqdGltZW91dCk7XG4gXHR9IGVsc2UgaWYgKHRpbWVvdXQpIHtcbkBAIC0yMzI3LDEwICsyMzI2LDEzIEBAIHN0YXRpYyBpbnQgZXBfcG9sbChzdHJ1Y3QgZXZlbnRwb2xsICplcCwgc3RydWN0IGVwb2xsX2V2ZW50IF9fdXNlciAqZXZlbnRzLFxuIFxuIFx0XHRzcGluX3VubG9ja19pcnEoXHUwMDI2ZXAtXHUwMDNlbG9jayk7XG4gXG4tXHRcdGlmICghZWF2YWlsKVxuK1x0XHRpZiAoIWVhdmFpbCkge1xuK1x0XHRcdGlmICh0bylcbitcdFx0XHRcdHNsYWNrID0gc2VsZWN0X2VzdGltYXRlX2FjY3VyYWN5KHRpbWVvdXQpO1xuIFx0XHRcdHRpbWVkX291dCA9ICFlcF9zY2hlZHVsZV90aW1lb3V0KHRvKSB8fFxuIFx0XHRcdFx0IXNjaGVkdWxlX2hydGltZW91dF9yYW5nZSh0bywgc2xhY2ssXG4gXHRcdFx0XHRcdFx0XHQgIEhSVElNRVJfTU9ERV9BQlMpO1xuK1x0XHR9XG4gXHRcdF9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTtcbiBcbiBcdFx0LypcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDA1OjIxOjI1LjAyNTQyNjQ2NVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4MDEzMTQzOTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgS2VybmVsIFBhdGNoOiBFdmVudHBvbGwgYW5kIFRpbWVvdXQgQWNjdXJhY3kqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgc2VlbXMgdG8gYmUgdHdlYWtpbmcgYGZzL2V2ZW50cG9sbC5jYC4gVGhlIGNvcmUgb2YgdGhpcyBzZWVtcyB0byBiZSBhYm91dCB0aGUgcGxhY2VtZW50IG9mIHRoZSBgc2xhY2sgPSBzZWxlY3RfZXN0aW1hdGVfYWNjdXJhY3kodGltZW91dCk7YCBjYWxsLiBCZWZvcmUsIGl0IHdhcyBoYXBwZW5pbmcgb3V0c2lkZSB0aGUgbWFpbiBsb29wLCBidXQgbm93IGl0J3MgbW92ZWQgKmluc2lkZSogdGhlIGxvb3AsIHJpZ2h0IGJlZm9yZSBgZXBfc2NoZWR1bGVfdGltZW91dCh0bylgLiBUaGF0IGltbWVkaWF0ZWx5IHJhaXNlcyBhIGZsYWcg4oCTIGBlcF9wb2xsYCBpcywgb2YgY291cnNlLCBhYnNvbHV0ZWx5IGNlbnRyYWwgdG8gaG93IGBlcG9sbF93YWl0YCBmdW5jdGlvbnMuIFRoaXMgY2hhbmdlIGNvdWxkIGhhdmUgYSBub24tdHJpdmlhbCBpbXBhY3Qgb24gcGVyZm9ybWFuY2Ugb3IsIGV2ZW4gd29yc2UsIGNvcnJlY3RuZXNzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgdGhpcyB3YXMgZG9uZS4gTGV0J3MgZ28gc3RyYWlnaHQgdG8gdGhlIGNvZGUuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgY29udGV4dCBhcm91bmQgbGluZSAyMzI2IG9mIGBmcy9ldmVudHBvbGwuY2AgdG8gc2VlIHByZWNpc2VseSB3aGF0IHRoZSBkZXZlbG9wZXJzIHdlcmUgYWltaW5nIGZvciB3aXRoIHRoaXMgbW9kaWZpY2F0aW9uLiBJJ2xsIGZvY3VzIG9uIHRoZSBpbXBsaWNhdGlvbnMgZm9yIHRpbWVvdXQgaGFuZGxpbmcgd2l0aGluIHRoZSBlcG9sbCBtZWNoYW5pc20uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5ODEsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDA1OjIxOjI4LjgyNjc0MzAxOVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MDM2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9ldmVudHBvbGwuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMjQwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjI0MDpcXHRcXHRcXHQgICBpbnQgbWF4ZXZlbnRzLCBzdHJ1Y3QgdGltZXNwZWM2NCAqdGltZW91dClcXG4yMjQxOlxcdHtcXG4yMjQyOlxcdFxcdGludCByZXMsIHRpbWVkX291dCA9IDA7XFxuMjI0MzpcXHRcXHRib29sIGVhdmFpbDtcXG4yMjQ0OlxcdFxcdHU2NCBzbGFjayA9IDA7XFxuMjI0NTpcXHRcXHR3YWl0X3F1ZXVlX2VudHJ5X3Qgd2FpdDtcXG4yMjQ2OlxcdFxcdGt0aW1lX3QgZXhwaXJlcywgKnRvID0gTlVMTDtcXG4yMjQ3OlxcdFxcbjIyNDg6XFx0XFx0bG9ja2RlcF9hc3NlcnRfaXJxc19lbmFibGVkKCk7XFxuMjI0OTpcXHRcXG4yMjUwOlxcdFxcdGlmICh0aW1lb3V0IFxcdTAwMjZcXHUwMDI2ICh0aW1lb3V0LVxcdTAwM2V0dl9zZWMgfCB0aW1lb3V0LVxcdTAwM2V0dl9uc2VjKSkge1xcbjIyNTE6XFx0XFx0XFx0dG8gPSBcXHUwMDI2ZXhwaXJlcztcXG4yMjUyOlxcdFxcdFxcdCp0byA9IHRpbWVzcGVjNjRfdG9fa3RpbWUoKnRpbWVvdXQpO1xcbjIyNTM6XFx0XFx0fSBlbHNlIGlmICh0aW1lb3V0KSB7XFxuMjI1NDpcXHRcXHRcXHQvKlxcbjIyNTU6XFx0XFx0XFx0ICogQXZvaWQgdGhlIHVubmVjZXNzYXJ5IHRyaXAgdG8gdGhlIHdhaXQgcXVldWUgbG9vcCwgaWYgdGhlXFxuMjI1NjpcXHRcXHRcXHQgKiBjYWxsZXIgc3BlY2lmaWVkIGEgbm9uIGJsb2NraW5nIG9wZXJhdGlvbi5cXG4yMjU3OlxcdFxcdFxcdCAqL1xcbjIyNTg6XFx0XFx0XFx0dGltZWRfb3V0ID0gMTtcXG4yMjU5OlxcdFxcdH1cXG4yMjYwOlxcdFxcbjIyNjE6XFx0XFx0LypcXG4yMjYyOlxcdFxcdCAqIFRoaXMgY2FsbCBpcyByYWN5OiBXZSBtYXkgb3IgbWF5IG5vdCBzZWUgZXZlbnRzIHRoYXQgYXJlIGJlaW5nIGFkZGVkXFxuMjI2MzpcXHRcXHQgKiB0byB0aGUgcmVhZHkgbGlzdCB1bmRlciB0aGUgbG9jayAoZS5nLiwgaW4gSVJRIGNhbGxiYWNrcykuIEZvciBjYXNlc1xcbjIyNjQ6XFx0XFx0ICogd2l0aCBhIG5vbi16ZXJvIHRpbWVvdXQsIHRoaXMgdGhyZWFkIHdpbGwgY2hlY2sgdGhlIHJlYWR5IGxpc3QgdW5kZXJcXG4yMjY1OlxcdFxcdCAqIGxvY2sgYW5kIHdpbGwgYWRkIHRvIHRoZSB3YWl0IHF1ZXVlLiAgRm9yIGNhc2VzIHdpdGggYSB6ZXJvXFxuMjI2NjpcXHRcXHQgKiB0aW1lb3V0LCB0aGUgdXNlciBieSBkZWZpbml0aW9uIHNob3VsZCBub3QgY2FyZSBhbmQgd2lsbCBoYXZlIHRvXFxuMjI2NzpcXHRcXHQgKiByZWNoZWNrIGFnYWluLlxcbjIyNjg6XFx0XFx0ICovXFxuMjI2OTpcXHRcXHRlYXZhaWwgPSBlcF9ldmVudHNfYXZhaWxhYmxlKGVwKTtcXG4yMjcwOlxcdFxcbjIyNzE6XFx0XFx0d2hpbGUgKDEpIHtcXG4yMjcyOlxcdFxcdFxcdGlmIChlYXZhaWwpIHtcXG4yMjczOlxcdFxcdFxcdFxcdHJlcyA9IGVwX3RyeV9zZW5kX2V2ZW50cyhlcCwgZXZlbnRzLCBtYXhldmVudHMpO1xcbjIyNzQ6XFx0XFx0XFx0XFx0aWYgKHJlcylcXG4yMjc1OlxcdFxcdFxcdFxcdFxcdHJldHVybiByZXM7XFxuMjI3NjpcXHRcXHRcXHR9XFxuMjI3NzpcXHRcXG4yMjc4OlxcdFxcdFxcdGlmICh0aW1lZF9vdXQpXFxuMjI3OTpcXHRcXHRcXHRcXHRyZXR1cm4gMDtcXG4yMjgwOlxcdFxcbjIyODE6XFx0XFx0XFx0ZWF2YWlsID0gZXBfYnVzeV9sb29wKGVwKTtcXG4yMjgyOlxcdFxcdFxcdGlmIChlYXZhaWwpXFxuMjI4MzpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4yMjg0OlxcdFxcbjIyODU6XFx0XFx0XFx0aWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKVxcbjIyODY6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5UUjtcXG4yMjg3OlxcdFxcbjIyODg6XFx0XFx0XFx0LypcXG4yMjg5OlxcdFxcdFxcdCAqIEludGVybmFsbHkgaW5pdF93YWl0KCkgdXNlcyBhdXRvcmVtb3ZlX3dha2VfZnVuY3Rpb24oKSxcXG4yMjkwOlxcdFxcdFxcdCAqIHRodXMgd2FpdCBlbnRyeSBpcyByZW1vdmVkIGZyb20gdGhlIHdhaXQgcXVldWUgb24gZWFjaFxcbjIyOTE6XFx0XFx0XFx0ICogd2FrZXVwLiBXaHkgaXQgaXMgaW1wb3J0YW50PyBJbiBjYXNlIG9mIHNldmVyYWwgd2FpdGVyc1xcbjIyOTI6XFx0XFx0XFx0ICogZWFjaCBuZXcgd2FrZXVwIHdpbGwgaGl0IHRoZSBuZXh0IHdhaXRlciwgZ2l2aW5nIGl0IHRoZVxcbjIyOTM6XFx0XFx0XFx0ICogY2hhbmNlIHRvIGhhcnZlc3QgbmV3IGV2ZW50LiBPdGhlcndpc2Ugd2FrZXVwIGNhbiBiZVxcbjIyOTQ6XFx0XFx0XFx0ICogbG9zdC4gVGhpcyBpcyBhbHNvIGdvb2QgcGVyZm9ybWFuY2Utd2lzZSwgYmVjYXVzZSBvblxcbjIyOTU6XFx0XFx0XFx0ICogbm9ybWFsIHdha2V1cCBwYXRoIG5vIG5lZWQgdG8gY2FsbCBfX3JlbW92ZV93YWl0X3F1ZXVlKClcXG4yMjk2OlxcdFxcdFxcdCAqIGV4cGxpY2l0bHksIHRodXMgZXAtXFx1MDAzZWxvY2sgaXMgbm90IHRha2VuLCB3aGljaCBoYWx0cyB0aGVcXG4yMjk3OlxcdFxcdFxcdCAqIGV2ZW50IGRlbGl2ZXJ5LlxcbjIyOTg6XFx0XFx0XFx0ICpcXG4yMjk5OlxcdFxcdFxcdCAqIEluIGZhY3QsIHdlIG5vdyB1c2UgYW4gZXZlbiBtb3JlIGFnZ3Jlc3NpdmUgZnVuY3Rpb24gdGhhdFxcbjIzMDA6XFx0XFx0XFx0ICogdW5jb25kaXRpb25hbGx5IHJlbW92ZXMsIGJlY2F1c2Ugd2UgZG9uJ3QgcmV1c2UgdGhlIHdhaXRcXG4yMzAxOlxcdFxcdFxcdCAqIGVudHJ5IGJldHdlZW4gbG9vcCBpdGVyYXRpb25zLiBUaGlzIGxldHMgdXMgYWxzbyBhdm9pZCB0aGVcXG4yMzAyOlxcdFxcdFxcdCAqIHBlcmZvcm1hbmNlIGlzc3VlIGlmIGEgcHJvY2VzcyBpcyBraWxsZWQsIGNhdXNpbmcgYWxsIG9mIGl0c1xcbjIzMDM6XFx0XFx0XFx0ICogdGhyZWFkcyB0byB3YWtlIHVwIHdpdGhvdXQgYmVpbmcgcmVtb3ZlZCBub3JtYWxseS5cXG4yMzA0OlxcdFxcdFxcdCAqL1xcbjIzMDU6XFx0XFx0XFx0aW5pdF93YWl0KFxcdTAwMjZ3YWl0KTtcXG4yMzA2OlxcdFxcdFxcdHdhaXQuZnVuYyA9IGVwX2F1dG9yZW1vdmVfd2FrZV9mdW5jdGlvbjtcXG4yMzA3OlxcdFxcbjIzMDg6XFx0XFx0XFx0c3Bpbl9sb2NrX2lycShcXHUwMDI2ZXAtXFx1MDAzZWxvY2spO1xcbjIzMDk6XFx0XFx0XFx0LypcXG4yMzEwOlxcdFxcdFxcdCAqIEJhcnJpZXJsZXNzIHZhcmlhbnQsIHdhaXRxdWV1ZV9hY3RpdmUoKSBpcyBjYWxsZWQgdW5kZXJcXG4yMzExOlxcdFxcdFxcdCAqIHRoZSBzYW1lIGxvY2sgb24gd2FrZXVwIGVwX3BvbGxfY2FsbGJhY2soKSBzaWRlLCBzbyBpdFxcbjIzMTI6XFx0XFx0XFx0ICogaXMgc2FmZSB0byBhdm9pZCBhbiBleHBsaWNpdCBiYXJyaWVyLlxcbjIzMTM6XFx0XFx0XFx0ICovXFxuMjMxNDpcXHRcXHRcXHRfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7XFxuMjMxNTpcXHRcXG4yMzE2OlxcdFxcdFxcdC8qXFxuMjMxNzpcXHRcXHRcXHQgKiBEbyB0aGUgZmluYWwgY2hlY2sgdW5kZXIgdGhlIGxvY2suIGVwX3N0YXJ0L2RvbmVfc2NhbigpXFxuMjMxODpcXHRcXHRcXHQgKiBwbGF5cyB3aXRoIHR3byBsaXN0cyAoLVxcdTAwM2VyZGxsaXN0IGFuZCAtXFx1MDAzZW92Zmxpc3QpIGFuZCB0aGVyZVxcbjIzMTk6XFx0XFx0XFx0ICogaXMgYWx3YXlzIGEgcmFjZSB3aGVuIGJvdGggbGlzdHMgYXJlIGVtcHR5IGZvciBzaG9ydFxcbjIzMjA6XFx0XFx0XFx0ICogcGVyaW9kIG9mIHRpbWUgYWx0aG91Z2ggZXZlbnRzIGFyZSBwZW5kaW5nLCBzbyBsb2NrIGlzXFxuMjMyMTpcXHRcXHRcXHQgKiBpbXBvcnRhbnQuXFxuMjMyMjpcXHRcXHRcXHQgKi9cXG4yMzIzOlxcdFxcdFxcdGVhdmFpbCA9IGVwX2V2ZW50c19hdmFpbGFibGUoZXApO1xcbjIzMjQ6XFx0XFx0XFx0aWYgKCFlYXZhaWwpXFxuMjMyNTpcXHRcXHRcXHRcXHRfX2FkZF93YWl0X3F1ZXVlX2V4Y2x1c2l2ZShcXHUwMDI2ZXAtXFx1MDAzZXdxLCBcXHUwMDI2d2FpdCk7XFxuMjMyNjpcXHRcXG4yMzI3OlxcdFxcdFxcdHNwaW5fdW5sb2NrX2lycShcXHUwMDI2ZXAtXFx1MDAzZWxvY2spO1xcbjIzMjg6XFx0XFxuMjMyOTpcXHRcXHRcXHRpZiAoIWVhdmFpbCkge1xcbjIzMzA6XFx0XFx0XFx0XFx0aWYgKHRvKVxcbjIzMzE6XFx0XFx0XFx0XFx0XFx0c2xhY2sgPSBzZWxlY3RfZXN0aW1hdGVfYWNjdXJhY3kodGltZW91dCk7XFxuMjMzMjpcXHRcXHRcXHRcXHR0aW1lZF9vdXQgPSAhZXBfc2NoZWR1bGVfdGltZW91dCh0bykgfHxcXG4yMzMzOlxcdFxcdFxcdFxcdFxcdCFzY2hlZHVsZV9ocnRpbWVvdXRfcmFuZ2UodG8sIHNsYWNrLFxcbjIzMzQ6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBIUlRJTUVSX01PREVfQUJTKTtcXG4yMzM1OlxcdFxcdFxcdH1cXG4yMzM2OlxcdFxcdFxcdF9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTtcXG4yMzM3OlxcdFxcbjIzMzg6XFx0XFx0XFx0LypcXG4yMzM5OlxcdFxcdFxcdCAqIFdlIHdlcmUgd29rZW4gdXAsIHRodXMgZ28gYW5kIHRyeSB0byBoYXJ2ZXN0IHNvbWUgZXZlbnRzLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQwNToyMToyOC44MjY4OTU1NjhaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MzAxNDYzNjU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRXBvbGwgVGltZW91dCBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYWJvdXQgb3B0aW1pemluZyB0aGUgYGVwb2xsX3dhaXRgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgYnkgZGVsYXlpbmcgdGhlIGNhbGN1bGF0aW9uIG9mIGBzbGFja2AuIFRoZSBjb3JlIGlkZWEgaXMgdG8gYXZvaWQgY2FsbGluZyBgc2VsZWN0X2VzdGltYXRlX2FjY3VyYWN5YCB1bmxlc3MgaXQncyBzdHJpY3RseSBuZWNlc3NhcnkuIFJpZ2h0LCB0aGF0J3MgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYXMgaXQgYXZvaWRzIHRoYXQgY2FsY3VsYXRpb24gd2hlbiBgZWF2YWlsYCBpcyB0cnVlIG9yIGlmIHRoZXJlJ3MgYSB0aW1lb3V0IGJlZm9yZSB0aGF0IHBvaW50LiBOb3csIGBzZWxlY3RfZXN0aW1hdGVfYWNjdXJhY3lgIGlzIHRoZSBmdW5jdGlvbiB0aGF0IGFjdHVhbGx5ICpjYWxjdWxhdGVzKiB0aGUgc2xhY2suIE15IGluaXRpYWwgdGhvdWdodCBpcywgaXMgdGhpcyBldmVuIHdvcnRoIGZ1enppbmc/IEl0IHNlZW1zIGxpa2UgYSByZWxhdGl2ZWx5IG1pbm9yIG9wdGltaXphdGlvbiBpbiB0aGUgY29udGV4dCBvZiBgZXBvbGxfd2FpdGAuXG5cbldhaXQsIGFjdHVhbGx5LCBgZXBvbGxfd2FpdGAgKmlzKiBkZWZpbml0ZWx5IGEgcmVhY2hhYmxlIGNvZGUgcGF0aCwgc28gdGhhdCBtYWtlcyB0aGlzIGNoYW5nZSBwb3RlbnRpYWxseSByZWxldmFudC4gSSBuZWVkIHRvIHRoaW5rIGFib3V0IHRoZSBwb3NzaWJsZSBzaWRlIGVmZmVjdHMuIENvdWxkIGl0IGludHJvZHVjZSBhIGJ1Zz8gTGV0J3MgdHJhY2UgaXQgb3V0LiBJZiBgdG9gIGlzIG5vdCBOVUxMLCBgc2xhY2tgICppcyogY2FsY3VsYXRlZC4gSWYgYHRvYCAqaXMqIE5VTEwsIGBzbGFja2AgaXMgaW5pdGlhbGl6ZWQgdG8gMCBhdCB0aGUgdG9wIG9mIHRoZSBmdW5jdGlvbiBhbnl3YXkuIE9rYXksIHRoYXQgc2VlbXMgc3RyYWlnaHRmb3J3YXJkLlxuXG5Ib2xkIG9uLCBJIHJlbWVtYmVyIHRoYXQgYGVwX3NjaGVkdWxlX3RpbWVvdXRgIGRvZXNuJ3QgYWN0dWFsbHkgdXNlIHRoZSBgc2xhY2tgIHZhcmlhYmxlIGRpcmVjdGx5LiBCdXQsIHdhaXQsIGBzY2hlZHVsZV9ocnRpbWVvdXRfcmFuZ2VgICpkb2VzKiB1c2UgaXQhIFNvLCB0aGlzIGlzIHBvdGVudGlhbGx5IGltcG9ydGFudCB0byBnZXQgcmlnaHQuIExldCdzIGxvb2sgYXQgdGhlIGJlZm9yZSBhbmQgYWZ0ZXIgY29kZSBzbmlwcGV0cyB0byBjb21wYXJlLlxuXG5Pa2F5LCBoZXJlJ3MgdGhlIG9yaWdpbmFsIGNvZGUgc25pcHBldDpcbmBgYGNcblx0aWYgKHRpbWVvdXQgXHUwMDI2XHUwMDI2ICh0aW1lb3V0LVx1MDAzZXR2X3NlYyB8IHRpbWVvdXQtXHUwMDNldHZfbnNlYykpIHtcblx0XHRzbGFjayA9IHNlbGVjdF9lc3RpbWF0ZV9hY2N1cmFjeSh0aW1lb3V0KTtcblx0XHR0byA9IFx1MDAyNmV4cGlyZXM7XG5cdFx0KnRvID0gdGltZXNwZWM2NF90b19rdGltZSgqdGltZW91dCk7XG5cdH0gZWxzZSBpZiAodGltZW91dCkge1xuYGBgXG5cbkFuZCBub3cgdGhlIG5ldyBjb2RlOlxuYGBgY1xuXHRcdGlmICghZWF2YWlsKSB7XG5cdFx0XHRpZiAodG8pXG5cdFx0XHRcdHNsYWNrID0gc2VsZWN0X2VzdGltYXRlX2FjY3VyYWN5KHRpbWVvdXQpO1xuXHRcdFx0dGltZWRfb3V0ID0gIWVwX3NjaGVkdWxlX3RpbWVvdXQodG8pIHx8XG5cdFx0XHRcdCFzY2hlZHVsZV9ocnRpbWVvdXRfcmFuZ2UodG8sIHNsYWNrLFxuXHRcdFx0XHRcdFx0XHQgIEhSVElNRVJfTU9ERV9BQlMpO1xuXHRcdH1cbmBgYFxuXG5Pa2F5LCBzbyB3ZSdyZSBkZWZlcnJpbmcgdGhhdCBjYWxjdWxhdGlvbi4gV2UgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gdGhhdCB0aGlzIGRvZXNuJ3QgY3JlYXRlIHNvbWUgc3VidGxlIHRpbWluZyBpc3N1ZSwgZXNwZWNpYWxseSB3aXRoIHRoZSB1c2Ugb2YgYHNjaGVkdWxlX2hydGltZW91dF9yYW5nZWAuIEkgbmVlZCB0byBsb29rIGF0IGBlcF9zY2hlZHVsZV90aW1lb3V0KHRvKWAgY2xvc2VseS4gSXMgdGhhdCBhIG1hY3JvIG9yIGEgZnVuY3Rpb24/IEknbGwgbmVlZCB0byBjaGVjayB0aGUgZGVmaW5pdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzgwNywiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDA1OjIxOjM1LjEyODM2MDc4N1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDE4OTI3NTk2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImVwX3NjaGVkdWxlX3RpbWVvdXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXZlbnRwb2xsLmM9MjE5OD1zdGF0aWMgaW50IGVwX3RyeV9zZW5kX2V2ZW50cyhzdHJ1Y3QgZXZlbnRwb2xsICplcCxcXG4tLVxcbmZzL2V2ZW50cG9sbC5jLTIyMTMtXFxuZnMvZXZlbnRwb2xsLmM6MjIxNDpzdGF0aWMgaW50IGVwX3NjaGVkdWxlX3RpbWVvdXQoa3RpbWVfdCAqdG8pXFxuZnMvZXZlbnRwb2xsLmMtMjIxNS17XFxuLS1cXG5mcy9ldmVudHBvbGwuYz0yMjM5PXN0YXRpYyBpbnQgZXBfcG9sbChzdHJ1Y3QgZXZlbnRwb2xsICplcCwgc3RydWN0IGVwb2xsX2V2ZW50IF9fdXNlciAqZXZlbnRzLFxcbi0tXFxuZnMvZXZlbnRwb2xsLmMtMjMzMS1cXHRcXHRcXHRcXHRzbGFjayA9IHNlbGVjdF9lc3RpbWF0ZV9hY2N1cmFjeSh0aW1lb3V0KTtcXG5mcy9ldmVudHBvbGwuYzoyMzMyOlxcdFxcdFxcdHRpbWVkX291dCA9ICFlcF9zY2hlZHVsZV90aW1lb3V0KHRvKSB8fFxcbmZzL2V2ZW50cG9sbC5jLTIzMzMtXFx0XFx0XFx0XFx0IXNjaGVkdWxlX2hydGltZW91dF9yYW5nZSh0bywgc2xhY2ssXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDA1OjIxOjM3LjE0NzI5NDIxM1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwMzcyODIyMjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBGdW5jdGlvbiBgZXBfc2NoZWR1bGVfdGltZW91dGAqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBgZXBfc2NoZWR1bGVfdGltZW91dGAgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGluIHRoZSBicm9hZGVyIHN5c3RlbS4gSSdtIGFzc3VtaW5nLCBiYXNlZCBvbiB0aGUgbmFtaW5nLCB0aGF0IGl0J3MgcmVsYXRlZCB0byBlbmRwb2ludCBtYW5hZ2VtZW50IGFuZCBwcm9iYWJseSBzb21lIGtpbmQgb2YgdGltZW91dCBtZWNoYW5pc20uIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gY2hlY2sgaXRzIGNhbGwgc2l0ZXMgdG8gcXVpY2tseSBkZXRlcm1pbmUgd2hlcmUgdGhpcyBpcyBiZWluZyB1c2VkIGFuZCB3aHkuIElzIGl0IHBhcnQgb2YgdGhlIGNvbm5lY3Rpb24gbGlmZWN5Y2xlIG1hbmFnZW1lbnQ/IElzIGl0IHJlbGF0ZWQgdG8gZXJyb3IgcmVjb3Zlcnkgb3IgcmVzb3VyY2UgY2xlYW51cD8gQXJlIHdlIGRlYWxpbmcgd2l0aCBhY3RpdmUgcG9sbGluZywgb3IgaXMgdGhpcyBtb3JlIGFib3V0IGlkbGUgY29ubmVjdGlvbiBtb25pdG9yaW5nPyBUaGUgbmFtZSBpcyB2ZXJ5IGdlbmVyaWMsIHdoaWNoIGltcGxpZXMgaXQncyBlaXRoZXIgdmVyeSBjcml0aWNhbCBvciB3aWRlbHkgdXNlZC4gVGltZSB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGggYW5kIGlkZW50aWZ5IGhvdyB0aGlzIHRpbWVvdXQgaW5mbHVlbmNlcyB0aGUgb3ZlcmFsbCBhcHBsaWNhdGlvbiBmbG93LiBJJ20gZ29pbmcgdG8gbG9vayBmb3IgYW55IHN1YnRsZSBkaWZmZXJlbmNlcyBpbiBiZWhhdmlvciBiYXNlZCBvbiBob3cgdGhlIHRpbWVvdXQgaXMgc2V0LiBJIHdhbnQgdG8gc2VlIGlmIHRoZSB0aW1lb3V0IGlzIGJhc2VkIG9uIHN5c3RlbSB0aW1lIG9yIG1vbm90b25pYyBjbG9jay4gVGhlIGFuc3dlciB0byB0aG9zZSBxdWVzdGlvbnMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgcG90ZW50aWFsIHJpc2tzIHRoYXQgYXJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ5NDAsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQwNToyMTo0MC4xODQ1Nzc5OTJaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjM5NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvZXZlbnRwb2xsLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjIxNCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjIxNDpcXHRzdGF0aWMgaW50IGVwX3NjaGVkdWxlX3RpbWVvdXQoa3RpbWVfdCAqdG8pXFxuMjIxNTpcXHR7XFxuMjIxNjpcXHRcXHRpZiAodG8pXFxuMjIxNzpcXHRcXHRcXHRyZXR1cm4ga3RpbWVfYWZ0ZXIoKnRvLCBrdGltZV9nZXQoKSk7XFxuMjIxODpcXHRcXHRlbHNlXFxuMjIxOTpcXHRcXHRcXHRyZXR1cm4gMTtcXG4yMjIwOlxcdH1cXG4yMjIxOlxcdFxcbjIyMjI6XFx0LyoqXFxuMjIyMzpcXHQgKiBlcF9wb2xsIC0gUmV0cmlldmVzIHJlYWR5IGV2ZW50cywgYW5kIGRlbGl2ZXJzIHRoZW0gdG8gdGhlIGNhbGxlci1zdXBwbGllZFxcbjIyMjQ6XFx0ICogICAgICAgICAgIGV2ZW50IGJ1ZmZlci5cXG4yMjI1OlxcdCAqXFxuMjIyNjpcXHQgKiBAZXA6IFBvaW50ZXIgdG8gdGhlIGV2ZW50cG9sbCBjb250ZXh0LlxcbjIyMjc6XFx0ICogQGV2ZW50czogUG9pbnRlciB0byB0aGUgdXNlcnNwYWNlIGJ1ZmZlciB3aGVyZSB0aGUgcmVhZHkgZXZlbnRzIHNob3VsZCBiZVxcbjIyMjg6XFx0ICogICAgICAgICAgc3RvcmVkLlxcbjIyMjk6XFx0ICogQG1heGV2ZW50czogU2l6ZSAoaW4gdGVybXMgb2YgbnVtYmVyIG9mIGV2ZW50cykgb2YgdGhlIGNhbGxlciBldmVudCBidWZmZXIuXFxuMjIzMDpcXHQgKiBAdGltZW91dDogTWF4aW11bSB0aW1lb3V0IGZvciB0aGUgcmVhZHkgZXZlbnRzIGZldGNoIG9wZXJhdGlvbiwgaW5cXG4yMjMxOlxcdCAqICAgICAgICAgICB0aW1lc3BlYy4gSWYgdGhlIHRpbWVvdXQgaXMgemVybywgdGhlIGZ1bmN0aW9uIHdpbGwgbm90IGJsb2NrLFxcbjIyMzI6XFx0ICogICAgICAgICAgIHdoaWxlIGlmIHRoZSBAdGltZW91dCBwdHIgaXMgTlVMTCwgdGhlIGZ1bmN0aW9uIHdpbGwgYmxvY2tcXG4yMjMzOlxcdCAqICAgICAgICAgICB1bnRpbCBhdCBsZWFzdCBvbmUgZXZlbnQgaGFzIGJlZW4gcmV0cmlldmVkIChvciBhbiBlcnJvclxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQwNToyMTo0MC4xODQ3NDM2NTJaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NDA0NTgxMjI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBkZWxheWluZyB0aGUgY2FsbCB0byBgc2VsZWN0X2VzdGltYXRlX2FjY3VyYWN5YC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgaXQgKm1pZ2h0KiBvZmZlciBhIHNsaWdodCBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudCBieSBub3QgYmxvY2tpbmcgYXMgZWFybHkuIFRoZSBxdWVzdGlvbiBpcywgaXMgaXQgd29ydGggZnV6emluZz8gSXQncyBhIHNtYWxsIG1vZGlmaWNhdGlvbiB3aXRoaW4gYGVwX3BvbGxgLCBidXQuLi4gYGVwb2xsX3dhaXRgIGlzIGFscmVhZHkgYSBzeXNjYWxsIHRoYXQncyBoZWF2aWx5IHRhcmdldGVkIGJ5IGZ1enppbmcgZWZmb3J0cy5cblxuVGhpcyAqaXMqIGEgZnVuY3Rpb25hbCBjaGFuZ2Ug4oCTIGl0IGFsdGVycyAqd2hlbiogYW5kIHBvdGVudGlhbGx5ICpob3cgb2Z0ZW4qIGBzZWxlY3RfZXN0aW1hdGVfYWNjdXJhY3lgIGdldHMgY2FsbGVkLiBTcGVjaWZpY2FsbHksIGl0IGNvdWxkIGJlIGNhbGxlZCByZXBlYXRlZGx5IGlmIHRoZSBsb29wIGl0ZXJhdGVzIGFuZCBpZiBgdG9gIGlzbid0IE5VTEwgYW5kIGAhZWF2YWlsYC4gVGhpbmtpbmcgdGhpcyB0aHJvdWdoLCB0aG91Z2gsIGlmIHRoZSBsb29wICpkb2VzKiBpdGVyYXRlLCBgc2xhY2tgIGlzIHJlY2FsY3VsYXRlZCwgd2hpY2ggaXMgaW1wb3J0YW50LiBOb3csIGlzIHRoZSBgdGltZW91dGAgaXRzZWxmIGJlaW5nIG1vZGlmaWVkIHdpdGhpbiB0aGUgbG9vcD8gTm9wZS4gSXQncyBhIHBvaW50ZXIgdG8gYSBgc3RydWN0IHRpbWVzcGVjNjRgLCB3aGljaCByZW1haW5zIHVudG91Y2hlZCwgc28gcmVjYWxjdWxhdGluZyBhbmQgcG90ZW50aWFsbHkgY2FsbGluZyBgc2VsZWN0X2VzdGltYXRlX2FjY3VyYWN5YCBtdWx0aXBsZSB0aW1lcyBpc24ndCBwcm9ibGVtYXRpYy4gV2FpdCwgYHNlbGVjdF9lc3RpbWF0ZV9hY2N1cmFjeWAgdXNlcyBgY3VycmVudC1cdTAwM2V0aW1lcl9zbGFja19uc2AuXG5cbkFscmlnaHQsIEknbSBsZWFuaW5nIHRvd2FyZHMgeWVzLCB0aGlzIGlzIHdvcnRoIGZ1enppbmcuIEl0J3MgYSBmdW5jdGlvbmFsIGNoYW5nZSBkaXJlY3RseSB3aXRoaW4gY29yZSBrZXJuZWwgbG9naWMgcmVsYXRlZCB0byBgZXBvbGxgLiBUaGUga2V5IGZ1bmN0aW9ucyB0byBmb2N1cyBvbiBhcmUgYGVwX3BvbGxgIGFuZCBgZG9fZXBvbGxfd2FpdGAuIEkgc2hvdWxkIGNoZWNrIGZvciBhbnkgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMsIHBhcnRpY3VsYXJseSBpZiBhbnl0aGluZyBzcGVjaWZpYyBkaXNhYmxlcyBvciBtb2RpZmllcyBgRVBPTExgLiBBbHRob3VnaCBgRVBPTExgIGlzIHVzdWFsbHkgZW5hYmxlZCwgaXQgaXMgd29ydGggY29uZmlybWluZyB0aGF0IHRoZXJlIGFyZSBubyBzcGVjaWZpYyBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBtaWdodCBhZmZlY3QgdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTU0OSwiT3V0cHV0VG9rZW5zIjoxNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDA1OjIxOjQ1LjU4OTMyNjU1OFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEzMDM2NjYwNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRVBPTExcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTE4NTk9Y29uZmlnIEZVVEVYX1JPQlVTVF9VTkxPQ0tcXG4tLVxcbmluaXQvS2NvbmZpZy0xODYxLVxcbmluaXQvS2NvbmZpZzoxODYyOmNvbmZpZyBFUE9MTFxcbmluaXQvS2NvbmZpZy0xODYzLVxcdGJvb2wgXFxcIkVuYWJsZSBldmVudHBvbGwgc3VwcG9ydFxcXCIgaWYgRVhQRVJUXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDA1OjIxOjQ3LjcxOTY5OTgyNFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODE4OTQyNTY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEZ1enppbmcgU3RyYXRlZ3k6IEVQT0xMIFRpbWVvdXQgTG9naWMqKlxuXG5Pa2F5LCBzbyBgRVBPTExgIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCwgd2hpY2ggaXMgY29udmVuaWVudC4gVGhlIHBsYW4gaXMgY2xlYXI6IEkgbmVlZCB0byB0YXJnZXQgdGhpcy4gSSd2ZSBnb3QgbXkgcGFyYW1ldGVycyByZWFkeSB0byBnby5cblxuVGhlIGNyaXRpY2FsIHRoaW5nIGlzIHRvIHNldCB0aGUgcmVzdWx0cy4gSSdtIHByaW9yaXRpemluZyB0aGlzLCBJJ20gc2V0dGluZyBgV29ydGhGdXp6aW5nYCB0byBgdHJ1ZWAuXG5cbkknbSB6ZXJvaW5nIGluIG9uIGBcImVwX3BvbGxcImAgYW5kIGBcImRvX2Vwb2xsX3dhaXRcImAgc3BlY2lmaWNhbGx5IOKAkyB0aG9zZSBhcmUgdGhlIGZ1bmN0aW9ucyBJIHdhbnQgdG8gZm9jdXMgbXkgZWZmb3J0cyBvbi4gVGhhdCdzIHRoZSBjb3JlIG9mIG15IGFwcHJvYWNoLlxuXG5UaGVuLCB0byByZWluZm9yY2UgbXkgZm9jdXMsIEkgd2lsbCBlbnN1cmUgdGhhdCB0aGUgYFwiRVBPTExcImAgY29uZmlndXJhdGlvbiBpcyBhY3RpdmVseSBlbmFibGVkLiBJdCdzIHRoZSBseW5jaHBpbiBmb3IgdGhpcyB0ZXN0LlxuXG5NeSByZWFzb25pbmc/IFNpbXBsZS4gVGhpcyBwYXRjaCBpcyBmdW5kYW1lbnRhbGx5IGNoYW5naW5nIGhvdyB0aW1lb3V0cyBhcmUgaGFuZGxlZCBpbiB0aGUgYGVwb2xsX3dhaXRgIHBhdGguIEl0J3MgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYSBjb3JlIGV2ZW50cG9sbCBtb2RpZmljYXRpb24uIFRoZSBzbGFjayBjYWxjdWxhdGlvbiBpcyBiZWluZyBtb3ZlZC4gVGhpcyB3YXJyYW50cyB0aG9yb3VnaCBmdXp6aW5nIHRvIGd1YXJkIGFnYWluc3QgYW55IHJlZ3Jlc3Npb25zIGluIHRpbWVvdXQgaGFuZGxpbmcuIEkgbmVlZCB0byBtYWtlIGNlcnRhaW4gdGhhdCB0aGVzZSBjcml0aWNhbCB0aW1lIG1hbmFnZW1lbnQgYmVoYXZpb3JzIGNvbnRpbnVlIHRvIGJlaGF2ZSBhcyBleHBlY3RlZCwgYW5kIHRoYXQgbm8gbmV3IHZ1bG5lcmFiaWxpdGllcyBhcmUgaW50cm9kdWNlZC4gVGhpcyBpcyB0aGUgcGxhY2UgdG8gYmUgbWV0aWN1bG91cy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjIyNSwiT3V0cHV0VG9rZW5zIjoxMDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMDU6MjE6NTIuNTM4NjQ0MzFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MDQyMDgxMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRVBPTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJlcF9wb2xsXCIsXG4gICAgXCJkb19lcG9sbF93YWl0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHRpbWVvdXQgY2FsY3VsYXRpb24gbG9naWMgaW4gYGVwX3BvbGxgICh1c2VkIGJ5IGBlcG9sbF93YWl0YCksIG1vdmluZyB0aGUgc2xhY2sgY2FsY3VsYXRpb24gaW5zaWRlIHRoZSB3YWl0IGxvb3AuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGV2ZW50cG9sbCBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIGluIHRpbWVvdXQgaGFuZGxpbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRVBPTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJlcF9wb2xsXCIsXG4gICAgXCJkb19lcG9sbF93YWl0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHRpbWVvdXQgY2FsY3VsYXRpb24gbG9naWMgaW4gYGVwX3BvbGxgICh1c2VkIGJ5IGBlcG9sbF93YWl0YCksIG1vdmluZyB0aGUgc2xhY2sgY2FsY3VsYXRpb24gaW5zaWRlIHRoZSB3YWl0IGxvb3AuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGV2ZW50cG9sbCBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIGluIHRpbWVvdXQgaGFuZGxpbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowsv4pr[1] Phase: Succeeded StartedAt: 2026-07-08 05:22:04 +0000 UTC FinishedAt: 2026-07-08 05:22:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsv4pr[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-08 05:22:04 +0000 UTC FinishedAt: 2026-07-08 05:22:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsv4pr[2] Phase: Succeeded StartedAt: 2026-07-08 05:22:04 +0000 UTC FinishedAt: 2026-07-08 10:13:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsv4pr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["EPOLL"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ep_poll","do_epoll_wait"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["EPOLL"],"series_id":"9911809c-2abb-4cd9-b09f-9c376c4e0465","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-08 05:22:04 +0000 UTC FinishedAt: 2026-07-08 10:13:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["EPOLL"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ep_poll","do_epoll_wait"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["EPOLL"],"series_id":"9911809c-2abb-4cd9-b09f-9c376c4e0465","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowsv4pr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["EPOLL"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ep_poll","do_epoll_wait"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["EPOLL"],"series_id":"9911809c-2abb-4cd9-b09f-9c376c4e0465","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-08 05:22:04 +0000 UTC FinishedAt: 2026-07-08 05:22:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsv4pr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["EPOLL"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ep_poll","do_epoll_wait"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["EPOLL"],"series_id":"9911809c-2abb-4cd9-b09f-9c376c4e0465","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-08 05:22:04 +0000 UTC FinishedAt: 2026-07-08 05:22:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["EPOLL"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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-workflowsv4pr/series-workflowsv4pr-convert-artifact-925512247/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsv4pr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["EPOLL"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ep_poll","do_epoll_wait"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["EPOLL"],"series_id":"9911809c-2abb-4cd9-b09f-9c376c4e0465","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-08 05:22:14 +0000 UTC FinishedAt: 2026-07-08 06:06:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsv4pr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["EPOLL"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ep_poll","do_epoll_wait"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["EPOLL"],"series_id":"9911809c-2abb-4cd9-b09f-9c376c4e0465","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-08 05:22:14 +0000 UTC FinishedAt: 2026-07-08 06:06: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:*d3213a15-1845-4d4d-8877-2bfa480d1af1,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-workflowsv4pr/series-workflowsv4pr-convert-artifact-925512247/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": "a56445a7-9a1a-4b0c-8599-1d10c2c751f5", "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-workflowsv4pr/series-workflowsv4pr-build-action-1615827341/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsv4pr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["EPOLL"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ep_poll","do_epoll_wait"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["EPOLL"],"series_id":"9911809c-2abb-4cd9-b09f-9c376c4e0465","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-08 05:22:14 +0000 UTC FinishedAt: 2026-07-08 06:06: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:*d3213a15-1845-4d4d-8877-2bfa480d1af1,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-workflowsv4pr/series-workflowsv4pr-convert-artifact-925512247/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": "a56445a7-9a1a-4b0c-8599-1d10c2c751f5", "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-workflowsv4pr/series-workflowsv4pr-build-action-1615827341/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsv4pr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["EPOLL"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ep_poll","do_epoll_wait"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["EPOLL"],"series_id":"9911809c-2abb-4cd9-b09f-9c376c4e0465","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-08 06:06:52 +0000 UTC FinishedAt: 2026-07-08 06:06:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsv4pr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["EPOLL"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ep_poll","do_epoll_wait"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["EPOLL"],"series_id":"9911809c-2abb-4cd9-b09f-9c376c4e0465","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-08 06:06:52 +0000 UTC FinishedAt: 2026-07-08 06:06:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsv4pr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["EPOLL"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ep_poll","do_epoll_wait"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["EPOLL"],"series_id":"9911809c-2abb-4cd9-b09f-9c376c4e0465","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-08 06:06:52 +0000 UTC FinishedAt: 2026-07-08 06:07:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsv4pr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["EPOLL"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ep_poll","do_epoll_wait"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["EPOLL"],"series_id":"9911809c-2abb-4cd9-b09f-9c376c4e0465","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-08 06:06:52 +0000 UTC FinishedAt: 2026-07-08 06:07:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["EPOLL"],"series_id":"9911809c-2abb-4cd9-b09f-9c376c4e0465","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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-workflowsv4pr/series-workflowsv4pr-convert-artifact-3750263910/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsv4pr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["EPOLL"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ep_poll","do_epoll_wait"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["EPOLL"],"series_id":"9911809c-2abb-4cd9-b09f-9c376c4e0465","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-08 06:07:13 +0000 UTC FinishedAt: 2026-07-08 06:09:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsv4pr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["EPOLL"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ep_poll","do_epoll_wait"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["EPOLL"],"series_id":"9911809c-2abb-4cd9-b09f-9c376c4e0465","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-08 06:07:13 +0000 UTC FinishedAt: 2026-07-08 06:09:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*a56445a7-9a1a-4b0c-8599-1d10c2c751f5,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-workflowsv4pr/series-workflowsv4pr-build-action-1615827341/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-workflowsv4pr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["EPOLL"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ep_poll","do_epoll_wait"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["EPOLL"],"series_id":"9911809c-2abb-4cd9-b09f-9c376c4e0465","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-08 06:09:55 +0000 UTC FinishedAt: 2026-07-08 06:09:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsv4pr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["EPOLL"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ep_poll","do_epoll_wait"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["EPOLL"],"series_id":"9911809c-2abb-4cd9-b09f-9c376c4e0465","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-08 06:09:55 +0000 UTC FinishedAt: 2026-07-08 06:09:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsv4pr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["EPOLL"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ep_poll","do_epoll_wait"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["EPOLL"],"series_id":"9911809c-2abb-4cd9-b09f-9c376c4e0465","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-08 06:09:55 +0000 UTC FinishedAt: 2026-07-08 07:08:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsv4pr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["EPOLL"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ep_poll","do_epoll_wait"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["EPOLL"],"series_id":"9911809c-2abb-4cd9-b09f-9c376c4e0465","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-08 06:09:55 +0000 UTC FinishedAt: 2026-07-08 07:08:20 +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:*d3213a15-1845-4d4d-8877-2bfa480d1af1,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-workflowsv4pr/series-workflowsv4pr-convert-artifact-3750263910/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": "c6961611-1ef3-406a-b4e1-47142e7a1895", "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-workflowsv4pr/series-workflowsv4pr-build-action-3496030762/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsv4pr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["EPOLL"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ep_poll","do_epoll_wait"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["EPOLL"],"series_id":"9911809c-2abb-4cd9-b09f-9c376c4e0465","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-08 06:09:55 +0000 UTC FinishedAt: 2026-07-08 07:08:08 +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:*d3213a15-1845-4d4d-8877-2bfa480d1af1,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-workflowsv4pr/series-workflowsv4pr-convert-artifact-3750263910/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": "c6961611-1ef3-406a-b4e1-47142e7a1895", "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-workflowsv4pr/series-workflowsv4pr-build-action-3496030762/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsv4pr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["EPOLL"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ep_poll","do_epoll_wait"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["EPOLL"],"series_id":"9911809c-2abb-4cd9-b09f-9c376c4e0465","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-08 07:08:20 +0000 UTC FinishedAt: 2026-07-08 07:08:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsv4pr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["EPOLL"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ep_poll","do_epoll_wait"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["EPOLL"],"series_id":"9911809c-2abb-4cd9-b09f-9c376c4e0465","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-08 07:08:20 +0000 UTC FinishedAt: 2026-07-08 07:08:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsv4pr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["EPOLL"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ep_poll","do_epoll_wait"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["EPOLL"],"series_id":"9911809c-2abb-4cd9-b09f-9c376c4e0465","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-08 07:08:20 +0000 UTC FinishedAt: 2026-07-08 07:10:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsv4pr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["EPOLL"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ep_poll","do_epoll_wait"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["EPOLL"],"series_id":"9911809c-2abb-4cd9-b09f-9c376c4e0465","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-08 07:08:20 +0000 UTC FinishedAt: 2026-07-08 07:10:29 +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:*c6961611-1ef3-406a-b4e1-47142e7a1895,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-workflowsv4pr/series-workflowsv4pr-build-action-3496030762/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-workflowsv4pr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["EPOLL"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ep_poll","do_epoll_wait"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["EPOLL"],"series_id":"9911809c-2abb-4cd9-b09f-9c376c4e0465","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-08 07:10:39 +0000 UTC FinishedAt: 2026-07-08 10:13:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsv4pr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["EPOLL"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ep_poll","do_epoll_wait"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["EPOLL"],"series_id":"9911809c-2abb-4cd9-b09f-9c376c4e0465","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-08 07:10:39 +0000 UTC FinishedAt: 2026-07-08 10:13:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ep_poll","do_epoll_wait"],"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:*a56445a7-9a1a-4b0c-8599-1d10c2c751f5,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*c6961611-1ef3-406a-b4e1-47142e7a1895,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-workflowsv4pr/series-workflowsv4pr-build-action-1615827341/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-workflowsv4pr/series-workflowsv4pr-build-action-3496030762/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowsv4pr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["EPOLL"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ep_poll","do_epoll_wait"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["EPOLL"],"series_id":"9911809c-2abb-4cd9-b09f-9c376c4e0465","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-08 07:10:39 +0000 UTC FinishedAt: 2026-07-08 07:10:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsv4pr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["EPOLL"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ep_poll","do_epoll_wait"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["EPOLL"],"series_id":"9911809c-2abb-4cd9-b09f-9c376c4e0465","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-08 07:10:39 +0000 UTC FinishedAt: 2026-07-08 07:10:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ep_poll","do_epoll_wait"],"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-workflowsv4pr/series-workflowsv4pr-convert-artifact-579701419/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsv4pr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["EPOLL"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ep_poll","do_epoll_wait"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["EPOLL"],"series_id":"9911809c-2abb-4cd9-b09f-9c376c4e0465","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-08 07:10:39 +0000 UTC FinishedAt: 2026-07-08 07:10:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsv4pr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["EPOLL"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ep_poll","do_epoll_wait"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["EPOLL"],"series_id":"9911809c-2abb-4cd9-b09f-9c376c4e0465","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-08 07:10:39 +0000 UTC FinishedAt: 2026-07-08 07:10:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsv4pr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["EPOLL"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ep_poll","do_epoll_wait"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["EPOLL"],"series_id":"9911809c-2abb-4cd9-b09f-9c376c4e0465","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-08 07:10:39 +0000 UTC FinishedAt: 2026-07-08 07:10:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsv4pr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["EPOLL"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ep_poll","do_epoll_wait"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["EPOLL"],"series_id":"9911809c-2abb-4cd9-b09f-9c376c4e0465","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-08 07:10:49 +0000 UTC FinishedAt: 2026-07-08 10:13:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsv4pr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["EPOLL"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ep_poll","do_epoll_wait"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0e35b9b6ec0ffcc5e23cbdec09f5c622ad532b53","config_name":"upstream-apparmor-kasan.config","enable_configs":["EPOLL"],"series_id":"9911809c-2abb-4cd9-b09f-9c376c4e0465","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-08 07:10:49 +0000 UTC FinishedAt: 2026-07-08 10:13:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*a56445a7-9a1a-4b0c-8599-1d10c2c751f5,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*c6961611-1ef3-406a-b4e1-47142e7a1895,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-workflowsv4pr/series-workflowsv4pr-build-action-1615827341/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-workflowsv4pr/series-workflowsv4pr-build-action-3496030762/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-workflowsv4pr/series-workflowsv4pr-convert-artifact-579701419/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,}