Name: series-workflowvznbz Phase: Succeeded StartedAt: 2026-08-07 19:21:03 +0000 UTC FinishedAt: 2026-08-07 23:09:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvznbz[0] Phase: Succeeded StartedAt: 2026-08-07 19:21:03 +0000 UTC FinishedAt: 2026-08-07 19:27:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvznbz[0].run-triage Phase: Succeeded StartedAt: 2026-08-07 19:21:03 +0000 UTC FinishedAt: 2026-08-07 19:27:27 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "075b74841bd0065a3bda3440873c747938e69b68", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SUNRPC", "NFS_FS", "NFSD" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "075b74841bd0065a3bda3440873c747938e69b68", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SUNRPC", "NFS_FS", "NFSD" ], "series_id": "c68240b1-0e64-46ae-b05b-72f5eaa9b010" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "svc_register", "svc_generic_rpcbind_set", "rpcb_register", "rpcb_v4_register", "rpcb_create_local" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE5OjI0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NVTlJQQyYjMzQ7LAogICAgJiMzNDtORlNfRlMmIzM0OywKICAgICYjMzQ7TkZTRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3N2Y19yZWdpc3RlciYjMzQ7LAogICAgJiMzNDtzdmNfZ2VuZXJpY19ycGNiaW5kX3NldCYjMzQ7LAogICAgJiMzNDtycGNiX3JlZ2lzdGVyJiMzNDssCiAgICAmIzM0O3JwY2JfdjRfcmVnaXN0ZXImIzM0OywKICAgICYjMzQ7cnBjYl9jcmVhdGVfbG9jYWwmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aW1lb3V0IGhhbmRsaW5nIGZvciBsb2NhbCBSUEMgYmluZCBjYWxscyBpbiB0aGUgc3VucnBjIHN1YnN5c3RlbS4gSXQgaW50cm9kdWNlcyBhIHN0YXRpYyBjb25zdGFudCBgcnBjYl9sb2NhbF90aW1lb3V0YCBzdHJ1Y3R1cmUsIGFkZHMgdGltZW91dC1yZWxhdGVkIGZsYWdzIChgUlBDX1RBU0tfU09GVCB8IFJQQ19UQVNLX1RJTUVPVVRgKSB0byBgcnBjYl9yZWdpc3Rlcl9jYWxsYCwgYW5kIGFkZHMgbG9naWMgdG8gcHJvcGFnYXRlIGAtRVRJTUVET1VUYCBlcnJvcnMgaW4gYHN2Y19nZW5lcmljX3JwY2JpbmRfc2V0YCBhbmQgYHN2Y19yZWdpc3RlcmAuIFRoZXNlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBkbyBub3QgZXhwb3NlIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZSwgYW5kIGRvIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlIG9yIHJhY2UgY29uZGl0aW9ucyBkdWUgdG8gdGltZW91dHMpIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBvciBMT0NLREVQLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgdGltZW91dCBmb3IgbG9jYWwgcnBjYmluZCBjYWxscyBhbmQgaGFuZGxlcyAtRVRJTUVET1VUIGluIHN2Y19yZWdpc3RlciBhbmQgc3ZjX2dlbmVyaWNfcnBjYmluZF9zZXQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgc3VucnBjIHN1YnN5c3RlbSB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgYnkgcmVnaXN0ZXJpbmcgUlBDIHNlcnZpY2VzLCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIE5GUyBvciBvdGhlciBSUEMgbWVjaGFuaXNtcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxOToyNDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDU5YjY4ODRjZjUxOWMwNDExYTAyZDdmNmQ5YTA4ZjBkN2U4MTA2ODhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyA3IDE5OjIzOjU5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvcnBjYl9jbG50LmMgYi9uZXQvc3VucnBjL3JwY2JfY2xudC5jXG5pbmRleCA2YWEzNzIxODhjODZhLi40MDk0ZjMyNTc4NzZkIDEwMDY0NFxuLS0tIGEvbmV0L3N1bnJwYy9ycGNiX2NsbnQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3N1bnJwYy9ycGNiX2NsbnQuY1xuQEAgLTIyMSw2ICYjNDM7MjIxLDEyIEBAIHN0YXRpYyB2b2lkIHJwY2Jfc2V0X2xvY2FsKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHJwY19jbG50ICpjbG50LFxuICMgZGVmaW5lIFNVTl9MRU4ocHRyKSAob2Zmc2V0b2Yoc3RydWN0IHNvY2thZGRyX3VuLCBzdW5fcGF0aClcdFx0XFxcbiBcdFx0ICAgICAgJiM0MzsgMSAmIzQzOyBzdHJsZW4oKHB0ciktXHUwMDNlc3VuX3BhdGggJiM0MzsgMSkpXG4gXG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgcnBjX3RpbWVvdXQgcnBjYl9sb2NhbF90aW1lb3V0ID0ge1xuJiM0MztcdC50b19pbml0dmFsID0gKEhaIC8gMTApID8gOiAxLFxuJiM0MztcdC50b19tYXh2YWwgPSAoSFogLyAxMCkgPyA6IDEsXG4mIzQzO1x0LnRvX3JldHJpZXMgPSAwLFxuJiM0Mzt9O1xuJiM0MztcbiAvKlxuICAqIFJldHVybnMgemVybyBvbiBzdWNjZXNzLCBvdGhlcndpc2UgYSBuZWdhdGl2ZSBlcnJubyB2YWx1ZVxuICAqIGlzIHJldHVybmVkLlxuQEAgLTIzOCw2ICYjNDM7MjQ0LDcgQEAgc3RhdGljIGludCBycGNiX2NyZWF0ZV9hZl9sb2NhbChzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRcdC52ZXJzaW9uXHQ9IFJQQ0JWRVJTXzIsXG4gXHRcdC5hdXRoZmxhdm9yXHQ9IFJQQ19BVVRIX05VTEwsXG4gXHRcdC5jcmVkXHRcdD0gY3VycmVudF9jcmVkKCksXG4mIzQzO1x0XHQudGltZW91dFx0PSBcdTAwMjZycGNiX2xvY2FsX3RpbWVvdXQsXG4gXHRcdC8qXG4gXHRcdCAqIFdlIHR1cm4gb2ZmIHRoZSBpZGxlIHRpbWVvdXQgdG8gcHJldmVudCB0aGUga2VybmVsXG4gXHRcdCAqIGZyb20gYXV0b21hdGljYWxseSBkaXNjb25uZWN0aW5nIHRoZSBzb2NrZXQuXG5AQCAtMzEyLDYgJiM0MzszMTksNyBAQCBzdGF0aWMgaW50IHJwY2JfY3JlYXRlX2xvY2FsX25ldChzdHJ1Y3QgbmV0ICpuZXQpXG4gXHRcdC52ZXJzaW9uXHQ9IFJQQ0JWRVJTXzIsXG4gXHRcdC5hdXRoZmxhdm9yXHQ9IFJQQ19BVVRIX1VOSVgsXG4gXHRcdC5jcmVkXHRcdD0gY3VycmVudF9jcmVkKCksXG4mIzQzO1x0XHQudGltZW91dFx0PSBcdTAwMjZycGNiX2xvY2FsX3RpbWVvdXQsXG4gXHRcdC5mbGFnc1x0XHQ9IFJQQ19DTE5UX0NSRUFURV9OT1BJTkcsXG4gXHR9O1xuIFx0c3RydWN0IHJwY19jbG50ICpjbG50LCAqY2xudDQ7XG5AQCAtNDAyLDExICYjNDM7NDEwLDExIEBAIHN0YXRpYyBzdHJ1Y3QgcnBjX2NsbnQgKnJwY2JfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqbm9kZW5hbWUsXG4gXG4gc3RhdGljIGludCBycGNiX3JlZ2lzdGVyX2NhbGwoc3RydWN0IHN1bnJwY19uZXQgKnNuLCBzdHJ1Y3QgcnBjX2NsbnQgKmNsbnQsIHN0cnVjdCBycGNfbWVzc2FnZSAqbXNnLCBib29sIGlzX3NldClcbiB7XG4tXHRpbnQgZmxhZ3MgPSBSUENfVEFTS19OT0NPTk5FQ1Q7XG4mIzQzO1x0aW50IGZsYWdzID0gUlBDX1RBU0tfTk9DT05ORUNUIHwgUlBDX1RBU0tfU09GVCB8IFJQQ19UQVNLX1RJTUVPVVQ7XG4gXHRpbnQgZXJyb3IsIHJlc3VsdCA9IDA7XG4gXG4gXHRpZiAoaXNfc2V0IHx8ICFzbi1cdTAwM2VycGNiX2lzX2FmX2xvY2FsKVxuLVx0XHRmbGFncyA9IFJQQ19UQVNLX1NPRlRDT05OO1xuJiM0MztcdFx0ZmxhZ3MgfD0gUlBDX1RBU0tfU09GVENPTk47XG4gXHRtc2ctXHUwMDNlcnBjX3Jlc3AgPSBcdTAwMjZyZXN1bHQ7XG4gXG4gXHRlcnJvciA9IHJwY19jYWxsX3N5bmMoY2xudCwgbXNnLCBmbGFncyk7XG5kaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9zdmMuYyBiL25ldC9zdW5ycGMvc3ZjLmNcbmluZGV4IGFlOWVjNGJmMzRmNzIuLjUzOWRkZDA2NDY3ZGYgMTAwNjQ0XG4tLS0gYS9uZXQvc3VucnBjL3N2Yy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvc3VucnBjL3N2Yy5jXG5AQCAtMTIwNyw2ICYjNDM7MTIwNyw5IEBAIGludCBzdmNfZ2VuZXJpY19ycGNiaW5kX3NldChzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRlcnJvciA9IHN2Y19ycGNiaW5kX3NldF92ZXJzaW9uKG5ldCwgcHJvZ3AsIHZlcnNpb24sXG4gXHRcdFx0XHRcdGZhbWlseSwgcHJvdG8sIHBvcnQpO1xuIFxuJiM0MztcdGlmIChlcnJvciA9PSAtRVRJTUVET1VUKVxuJiM0MztcdFx0cmV0dXJuIGVycm9yO1xuJiM0MztcbiBcdHJldHVybiAodmVycy1cdTAwM2V2c19ycGNiX29wdG5sKSA/IDAgOiBlcnJvcjtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoc3ZjX2dlbmVyaWNfcnBjYmluZF9zZXQpO1xuQEAgLTEyNDMsNiAmIzQzOzEyNDYsOCBAQCBpbnQgc3ZjX3JlZ2lzdGVyKGNvbnN0IHN0cnVjdCBzdmNfc2VydiAqc2Vydiwgc3RydWN0IG5ldCAqbmV0LFxuIFx0XHRcdFx0cHJpbnRrKEtFUk5fV0FSTklORyBcJiMzNDtzdmM6IGZhaWxlZCB0byByZWdpc3RlciBcJiMzNDtcbiBcdFx0XHRcdFx0XCYjMzQ7JXN2JXUgUlBDIHNlcnZpY2UgKGVycm5vICVkKS5cXG5cJiMzNDssXG4gXHRcdFx0XHRcdHByb2dwLVx1MDAzZXBnX25hbWUsIGksIC1lcnJvcik7XG4mIzQzO1x0XHRcdFx0aWYgKGVycm9yID09IC1FVElNRURPVVQpXG4mIzQzO1x0XHRcdFx0XHRyZXR1cm4gZXJyb3I7XG4gXHRcdFx0XHRicmVhaztcbiBcdFx0XHR9XG4gXHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxOToyNDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4zbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U1VOUlBDJiMzNDssCiAgICAmIzM0O05GU19GUyYjMzQ7LAogICAgJiMzNDtORlNEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c3ZjX3JlZ2lzdGVyJiMzNDssCiAgICAmIzM0O3N2Y19nZW5lcmljX3JwY2JpbmRfc2V0JiMzNDssCiAgICAmIzM0O3JwY2JfcmVnaXN0ZXImIzM0OywKICAgICYjMzQ7cnBjYl92NF9yZWdpc3RlciYjMzQ7LAogICAgJiMzNDtycGNiX2NyZWF0ZV9sb2NhbCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgdGltZW91dCBmb3IgbG9jYWwgcnBjYmluZCBjYWxscyBhbmQgaGFuZGxlcyAtRVRJTUVET1VUIGluIHN2Y19yZWdpc3RlciBhbmQgc3ZjX2dlbmVyaWNfcnBjYmluZF9zZXQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgc3VucnBjIHN1YnN5c3RlbSB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgYnkgcmVnaXN0ZXJpbmcgUlBDIHNlcnZpY2VzLCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIE5GUyBvciBvdGhlciBSUEMgbWVjaGFuaXNtcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDU5YjY4ODRjZjUxOWMwNDExYTAyZDdmNmQ5YTA4ZjBkN2U4MTA2ODgKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEF1ZyA3IDE5OjIzOjU5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9ycGNiX2NsbnQuYyBiL25ldC9zdW5ycGMvcnBjYl9jbG50LmMKaW5kZXggNmFhMzcyMTg4Yzg2YS4uNDA5NGYzMjU3ODc2ZCAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy9ycGNiX2NsbnQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc3VucnBjL3JwY2JfY2xudC5jCkBAIC0yMjEsNiAmIzQzOzIyMSwxMiBAQCBzdGF0aWMgdm9pZCBycGNiX3NldF9sb2NhbChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBycGNfY2xudCAqY2xudCwKICMgZGVmaW5lIFNVTl9MRU4ocHRyKSAob2Zmc2V0b2Yoc3RydWN0IHNvY2thZGRyX3VuLCBzdW5fcGF0aCkJCVwKIAkJICAgICAgJiM0MzsgMSAmIzQzOyBzdHJsZW4oKHB0ciktJmd0O3N1bl9wYXRoICYjNDM7IDEpKQogCiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBycGNfdGltZW91dCBycGNiX2xvY2FsX3RpbWVvdXQgPSB7CiYjNDM7CS50b19pbml0dmFsID0gKEhaIC8gMTApID8gOiAxLAomIzQzOwkudG9fbWF4dmFsID0gKEhaIC8gMTApID8gOiAxLAomIzQzOwkudG9fcmV0cmllcyA9IDAsCiYjNDM7fTsKJiM0MzsKIC8qCiAgKiBSZXR1cm5zIHplcm8gb24gc3VjY2Vzcywgb3RoZXJ3aXNlIGEgbmVnYXRpdmUgZXJybm8gdmFsdWUKICAqIGlzIHJldHVybmVkLgpAQCAtMjM4LDYgJiM0MzsyNDQsNyBAQCBzdGF0aWMgaW50IHJwY2JfY3JlYXRlX2FmX2xvY2FsKHN0cnVjdCBuZXQgKm5ldCwKIAkJLnZlcnNpb24JPSBSUENCVkVSU18yLAogCQkuYXV0aGZsYXZvcgk9IFJQQ19BVVRIX05VTEwsCiAJCS5jcmVkCQk9IGN1cnJlbnRfY3JlZCgpLAomIzQzOwkJLnRpbWVvdXQJPSAmYW1wO3JwY2JfbG9jYWxfdGltZW91dCwKIAkJLyoKIAkJICogV2UgdHVybiBvZmYgdGhlIGlkbGUgdGltZW91dCB0byBwcmV2ZW50IHRoZSBrZXJuZWwKIAkJICogZnJvbSBhdXRvbWF0aWNhbGx5IGRpc2Nvbm5lY3RpbmcgdGhlIHNvY2tldC4KQEAgLTMxMiw2ICYjNDM7MzE5LDcgQEAgc3RhdGljIGludCBycGNiX2NyZWF0ZV9sb2NhbF9uZXQoc3RydWN0IG5ldCAqbmV0KQogCQkudmVyc2lvbgk9IFJQQ0JWRVJTXzIsCiAJCS5hdXRoZmxhdm9yCT0gUlBDX0FVVEhfVU5JWCwKIAkJLmNyZWQJCT0gY3VycmVudF9jcmVkKCksCiYjNDM7CQkudGltZW91dAk9ICZhbXA7cnBjYl9sb2NhbF90aW1lb3V0LAogCQkuZmxhZ3MJCT0gUlBDX0NMTlRfQ1JFQVRFX05PUElORywKIAl9OwogCXN0cnVjdCBycGNfY2xudCAqY2xudCwgKmNsbnQ0OwpAQCAtNDAyLDExICYjNDM7NDEwLDExIEBAIHN0YXRpYyBzdHJ1Y3QgcnBjX2NsbnQgKnJwY2JfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqbm9kZW5hbWUsCiAKIHN0YXRpYyBpbnQgcnBjYl9yZWdpc3Rlcl9jYWxsKHN0cnVjdCBzdW5ycGNfbmV0ICpzbiwgc3RydWN0IHJwY19jbG50ICpjbG50LCBzdHJ1Y3QgcnBjX21lc3NhZ2UgKm1zZywgYm9vbCBpc19zZXQpCiB7Ci0JaW50IGZsYWdzID0gUlBDX1RBU0tfTk9DT05ORUNUOwomIzQzOwlpbnQgZmxhZ3MgPSBSUENfVEFTS19OT0NPTk5FQ1QgfCBSUENfVEFTS19TT0ZUIHwgUlBDX1RBU0tfVElNRU9VVDsKIAlpbnQgZXJyb3IsIHJlc3VsdCA9IDA7CiAKIAlpZiAoaXNfc2V0IHx8ICFzbi0mZ3Q7cnBjYl9pc19hZl9sb2NhbCkKLQkJZmxhZ3MgPSBSUENfVEFTS19TT0ZUQ09OTjsKJiM0MzsJCWZsYWdzIHw9IFJQQ19UQVNLX1NPRlRDT05OOwogCW1zZy0mZ3Q7cnBjX3Jlc3AgPSAmYW1wO3Jlc3VsdDsKIAogCWVycm9yID0gcnBjX2NhbGxfc3luYyhjbG50LCBtc2csIGZsYWdzKTsKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvc3ZjLmMgYi9uZXQvc3VucnBjL3N2Yy5jCmluZGV4IGFlOWVjNGJmMzRmNzIuLjUzOWRkZDA2NDY3ZGYgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMvc3ZjLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3N1bnJwYy9zdmMuYwpAQCAtMTIwNyw2ICYjNDM7MTIwNyw5IEBAIGludCBzdmNfZ2VuZXJpY19ycGNiaW5kX3NldChzdHJ1Y3QgbmV0ICpuZXQsCiAJZXJyb3IgPSBzdmNfcnBjYmluZF9zZXRfdmVyc2lvbihuZXQsIHByb2dwLCB2ZXJzaW9uLAogCQkJCQlmYW1pbHksIHByb3RvLCBwb3J0KTsKIAomIzQzOwlpZiAoZXJyb3IgPT0gLUVUSU1FRE9VVCkKJiM0MzsJCXJldHVybiBlcnJvcjsKJiM0MzsKIAlyZXR1cm4gKHZlcnMtJmd0O3ZzX3JwY2Jfb3B0bmwpID8gMCA6IGVycm9yOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoc3ZjX2dlbmVyaWNfcnBjYmluZF9zZXQpOwpAQCAtMTI0Myw2ICYjNDM7MTI0Niw4IEBAIGludCBzdmNfcmVnaXN0ZXIoY29uc3Qgc3RydWN0IHN2Y19zZXJ2ICpzZXJ2LCBzdHJ1Y3QgbmV0ICpuZXQsCiAJCQkJcHJpbnRrKEtFUk5fV0FSTklORyAmIzM0O3N2YzogZmFpbGVkIHRvIHJlZ2lzdGVyICYjMzQ7CiAJCQkJCSYjMzQ7JXN2JXUgUlBDIHNlcnZpY2UgKGVycm5vICVkKS5cbiYjMzQ7LAogCQkJCQlwcm9ncC0mZ3Q7cGdfbmFtZSwgaSwgLWVycm9yKTsKJiM0MzsJCQkJaWYgKGVycm9yID09IC1FVElNRURPVVQpCiYjNDM7CQkJCQlyZXR1cm4gZXJyb3I7CiAJCQkJYnJlYWs7CiAJCQl9CiAJCX0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTk6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg0MgoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDI4MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIEZlYXNpYmlsaXR5OiBJbnZlc3RpZ2F0aW5nIGEgc3VucnBjIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCBhIHBhdGNoIGhlcmUgdGhhdCYjMzk7cyBtYWtpbmcgY2hhbmdlcyB0byBgbmV0L3N1bnJwYy9ycGNiX2NsbnQuY2AgYW5kIGBuZXQvc3VucnBjL3N2Yy5jYC4gU3BlY2lmaWNhbGx5LCBpdCBpbnRyb2R1Y2VzIGEgbG9jYWwgdGltZW91dCwgYHJwY2JfbG9jYWxfdGltZW91dGAsIGZvciBSUEMgYmluZCBjbGllbnRzIHdpdGhpbiBgcnBjYl9jcmVhdGVfYWZfbG9jYWxgIGFuZCBgcnBjYl9jcmVhdGVfbG9jYWxfbmV0YC4gQWxzbywgYHJwY2JfcmVnaXN0ZXJfY2FsbGAgaXMgYmVpbmcgdXBkYXRlZCB0byB1c2UgYFJQQ19UQVNLX1NPRlQgfCBSUENfVEFTS19USU1FT1VUYCBmbGFncy4gSSBzZWUgYHN2Y19nZW5lcmljX3JwY2JpbmRfc2V0YCBhbmQgYHN2Y19yZWdpc3RlcmAgYXJlIG5vdyBjaGVja2luZyBmb3IgYC1FVElNRURPVVRgIGVycm9ycyBhbmQgcmV0dXJuaW5nIHRoZW0uCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCBpZiB0aGlzIGlzIGZ1enppbmctd29ydGh5LiBTdW5SUEMsIGFzIEkgcmVjYWxsLCBpcyBkZWZpbml0ZWx5IGEgdGFyZ2V0IHRoYXQmIzM5O3MgZXhwb3NlZCB0byB1c2Vyc3BhY2UsIHRoaW5rIE5GUyBhbmQgb3RoZXIgUlBDIHNlcnZpY2VzLiBUaGF0IG1ha2VzIGl0IGFuIGludGVyZXN0aW5nIHRhcmdldC4gTGV0JiMzOTtzIHNlZSwgdGhlIHBhdGNoIHRvdWNoZXMgdGhlc2UgZnVuY3Rpb25zOiBgcnBjYl9jcmVhdGVfYWZfbG9jYWxgLCBgcnBjYl9jcmVhdGVfbG9jYWxfbmV0YCwgYHJwY2JfcmVnaXN0ZXJfY2FsbGAsIGBzdmNfZ2VuZXJpY19ycGNiaW5kX3NldGAsIGFuZCBgc3ZjX3JlZ2lzdGVyYC4KClJpZ2h0LCB0aW1lIHRvIGNoZWNrIHRoZSBjb25maWcgb3B0aW9ucy4gTGV0JiMzOTtzIG1ha2Ugc3VyZSBgQ09ORklHX1NVTlJQQ2AgaXMgZW5hYmxlZC4gSWYgaXQgaXMsIHRoZW4gSSYjMzk7bGwgbG9vayBpbnRvIGl0cyBLY29uZmlnLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE5OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBTVU5SUEMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3N1bnJwYy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5uZXQvc3VucnBjL0tjb25maWc6Mjpjb25maWcgU1VOUlBDXG5uZXQvc3VucnBjL0tjb25maWctMy1cdHRyaXN0YXRlXG4tLVxubmV0L3N1bnJwYy9LY29uZmlnLTUtXG5uZXQvc3VucnBjL0tjb25maWc6Njpjb25maWcgU1VOUlBDX0dTU1xubmV0L3N1bnJwYy9LY29uZmlnLTctXHR0cmlzdGF0ZVxuLS1cbm5ldC9zdW5ycGMvS2NvbmZpZy0xMC1cbm5ldC9zdW5ycGMvS2NvbmZpZzoxMTpjb25maWcgU1VOUlBDX0JBQ0tDSEFOTkVMXG5uZXQvc3VucnBjL0tjb25maWctMTItXHRib29sXG4tLVxubmV0L3N1bnJwYy9LY29uZmlnLTE0LVxubmV0L3N1bnJwYy9LY29uZmlnOjE1OmNvbmZpZyBTVU5SUENfU1dBUFxubmV0L3N1bnJwYy9LY29uZmlnLTE2LVx0Ym9vbFxuLS1cbm5ldC9zdW5ycGMvS2NvbmZpZz0xOT1jb25maWcgUlBDU0VDX0dTU19LUkI1XG4tLVxubmV0L3N1bnJwYy9LY29uZmlnLTM1LVxubmV0L3N1bnJwYy9LY29uZmlnOjM2OmNvbmZpZyBTVU5SUENfREVCVUdcbm5ldC9zdW5ycGMvS2NvbmZpZy0zNy1cdGJvb2wgXCYjMzQ7UlBDOiBFbmFibGUgZHByaW50ayBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5uZXQvc3VucnBjL0tjb25maWctNDktXG5uZXQvc3VucnBjL0tjb25maWc6NTA6Y29uZmlnIFNVTlJQQ19ERUJVR19UUkFDRVxubmV0L3N1bnJwYy9LY29uZmlnLTUxLVx0Ym9vbCBcJiMzNDtSUEM6IFNlbmQgZGZwcmludGsoKSBvdXRwdXQgdG8gdGhlIHRyYWNlIGJ1ZmZlclwmIzM0O1xuLS1cbm5ldC9zdW5ycGMvS2NvbmZpZy02My1cbm5ldC9zdW5ycGMvS2NvbmZpZzo2NDpjb25maWcgU1VOUlBDX1hQUlRfUkRNQVxubmV0L3N1bnJwYy9LY29uZmlnLTY1LVx0dHJpc3RhdGUgXCYjMzQ7UlBDLW92ZXItUkRNQSB0cmFuc3BvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxOToyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODQ5CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTYxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgU1VOUlBDIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiBpcyBjbGVhcmx5IGNlbnRlcmVkIGFyb3VuZCBTVU5SUEMuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgcHJlc2VudCwganVzdCB0byBiZSBzdXJlLiBJJiMzOTttIG5vdGluZyB0aGF0IGtleSBmdW5jdGlvbnMgbGlrZSBgc3ZjX2dlbmVyaWNfcnBjYmluZF9zZXRgIGFuZCBgc3ZjX3JlZ2lzdGVyYCBhcmUgZXhwbGljaXRseSBleHBvcnRlZC4gVGhhdCBpbW1lZGlhdGVseSBmbGFncyB0aGVtIGFzIHBvdGVudGlhbCBwb2ludHMgb2YgaW50ZXJlc3QsIGFsbW9zdCBjZXJ0YWlubHkgQVBJIGVudHJ5cG9pbnRzLiBPbiB0aGUgb3RoZXIgaGFuZCwgZnVuY3Rpb25zIGxpa2UgYHJwY2JfY3JlYXRlX2FmX2xvY2FsYCwgYHJwY2JfY3JlYXRlX2xvY2FsX25ldGAsIGFuZCBgcnBjYl9yZWdpc3Rlcl9jYWxsYCBhcmUgc3RhdGljLCB3aGljaCBJJiMzOTtsbCBrZWVwIGluIG1pbmQgYnV0IGxpa2VseSB3b24mIzM5O3QgcmVxdWlyZSBhcyBjbG9zZSBhdHRlbnRpb24uCgpUaGUgcXVlc3Rpb24gbm93IGlzIHdoZXRoZXIgYHN2Y19nZW5lcmljX3JwY2JpbmRfc2V0YCBhbmQgYHN2Y19yZWdpc3RlcmAgYXJlIHRoZSBiZXN0IGZvY3VzIHN5bWJvbHMuIEFuZCB5ZXMsIGFmdGVyIGEgcXVpY2sgZXZhbHVhdGlvbiwgYHN2Y19yZWdpc3RlcmAgaXMgZGVmaW5pdGVseSBhbiBBUEkgZW50cnlwb2ludC4gQW5kIGBzdmNfZ2VuZXJpY19ycGNiaW5kX3NldGAgYWxzbyBsb29rcyBsaWtlIGEgc29saWQgQVBJIGVudHJ5cG9pbnQgdG9vLgoKQWxyaWdodCwgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRpdmUgaW50byBgbmV0L3N1bnJwYy9zdmMuY2AgdG8gZXhhbWluZSB0aGUgaW1wbGVtZW50YXRpb25zIG9mIGBzdmNfcmVnaXN0ZXJgIGFuZCBgc3ZjX2dlbmVyaWNfcnBjYmluZF9zZXRgIGluIGdyZWF0ZXIgZGV0YWlsLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHRoZSBjb3JlIHJlZ2lzdHJhdGlvbiBhbmQgY29uZmlndXJhdGlvbiBsb2dpYyB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxOToyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdmNfcmVnaXN0ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc3VucnBjL3N2Yy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zdW5ycGMvc3ZjLmM9MTEwMj1zdGF0aWMgaW50IF9fc3ZjX3JwY2JfcmVnaXN0ZXI2KHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgdTMyIHByb2dyYW0sXG4tLVxubmV0L3N1bnJwYy9zdmMuYy0xMTQ1LSAqL1xubmV0L3N1bnJwYy9zdmMuYzoxMTQ2OnN0YXRpYyBpbnQgX19zdmNfcmVnaXN0ZXIoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpwcm9nbmFtZSxcbm5ldC9zdW5ycGMvc3ZjLmMtMTE0Ny1cdFx0XHQgIGNvbnN0IHUzMiBwcm9ncmFtLCBjb25zdCB1MzIgdmVyc2lvbixcbi0tXG5uZXQvc3VucnBjL3N2Yy5jLTExNjUtXG5uZXQvc3VucnBjL3N2Yy5jOjExNjY6XHR0cmFjZV9zdmNfcmVnaXN0ZXIocHJvZ25hbWUsIHZlcnNpb24sIGZhbWlseSwgcHJvdG9jb2wsIHBvcnQsIGVycm9yKTtcbm5ldC9zdW5ycGMvc3ZjLmMtMTE2Ny1cdHJldHVybiBlcnJvcjtcbi0tXG5uZXQvc3VucnBjL3N2Yy5jPTExNzE9aW50IHN2Y19ycGNiaW5kX3NldF92ZXJzaW9uKHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvc3VucnBjL3N2Yy5jLTExNzYte1xubmV0L3N1bnJwYy9zdmMuYzoxMTc3Olx0cmV0dXJuIF9fc3ZjX3JlZ2lzdGVyKG5ldCwgcHJvZ3AtXHUwMDNlcGdfbmFtZSwgcHJvZ3AtXHUwMDNlcGdfcHJvZyxcbm5ldC9zdW5ycGMvc3ZjLmMtMTE3OC1cdFx0XHRcdHZlcnNpb24sIGZhbWlseSwgcHJvdG8sIHBvcnQpO1xuLS1cbm5ldC9zdW5ycGMvc3ZjLmM9MTIxNT1FWFBPUlRfU1lNQk9MX0dQTChzdmNfZ2VuZXJpY19ycGNiaW5kX3NldCk7XG4tLVxubmV0L3N1bnJwYy9zdmMuYy0xMjE3LS8qKlxubmV0L3N1bnJwYy9zdmMuYzoxMjE4OiAqIHN2Y19yZWdpc3RlciAtIHJlZ2lzdGVyIGFuIFJQQyBzZXJ2aWNlIHdpdGggdGhlIGxvY2FsIHBvcnRtYXBwZXJcbm5ldC9zdW5ycGMvc3ZjLmMtMTIxOS0gKiBAc2Vydjogc3ZjX3NlcnYgc3RydWN0IGZvciB0aGUgc2VydmljZSB0byByZWdpc3RlclxuLS1cbm5ldC9zdW5ycGMvc3ZjLmMtMTIyNi0gKi9cbm5ldC9zdW5ycGMvc3ZjLmM6MTIyNzppbnQgc3ZjX3JlZ2lzdGVyKGNvbnN0IHN0cnVjdCBzdmNfc2VydiAqc2Vydiwgc3RydWN0IG5ldCAqbmV0LFxubmV0L3N1bnJwYy9zdmMuYy0xMjI4LVx0XHQgY29uc3QgaW50IGZhbWlseSwgY29uc3QgdW5zaWduZWQgc2hvcnQgcHJvdG8sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTk6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDgwNwoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDc1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIEkgc2VlIGl0OgoKKipSUEMgQmluZGluZyBGdW5jdGlvbiBFeGFtaW5hdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGhvdyB0aGUgUlBDIGJpbmRpbmcgcHJvY2VzcyBpcyBoYW5kbGVkLiBJIHNlZSB0aGF0IGBzdmNfcmVnaXN0ZXJgIGlzIGF2YWlsYWJsZSwgc28gdGhhdCYjMzk7cyBvYnZpb3VzbHkgcGFydCBvZiB0aGUgc2VydmVyLXNpZGUgcmVnaXN0cmF0aW9uIHByb2Nlc3MuIEFuZCBgc3ZjX2dlbmVyaWNfcnBjYmluZF9zZXRgIGlzIGFsc28gZXhwb3J0ZWQg4oCTIHRoYXQgbGlrZWx5IGhhbmRsZXMgc29tZSBnZW5lcmljIGJpbmRpbmcgY29uZmlndXJhdGlvbi4gTm93LCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGNsaWVudC1zaWRlIGludGVyYWN0aW9uLCBJIHNob3VsZCBwcm9iYWJseSBiZSBsb29raW5nIGF0IGBuZXQvc3VucnBjL3JwY2JfY2xudC5jYC4gSSBuZWVkIHRvIHJldmlldyB0aG9zZSBmdW5jdGlvbnMgaW4gdGhhdCBmaWxlIHdoaWNoIHdpbGwgZGVhbCB3aXRoIHJlZ2lzdGVyaW5nIHdpdGggdGhlIGxvY2FsIFJQQyBiaW5kIHNlcnZpY2UgKGBycGNiX2NyZWF0ZV9hZl9sb2NhbGAsIGBycGNiX2NyZWF0ZV9sb2NhbF9uZXRgLCBhbmQgYHJwY2JfcmVnaXN0ZXJfY2FsbGApLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBmdWxsIHBpY3R1cmUgb24gaG93IHRoZSBjbGllbnQgZ29lcyBhYm91dCBjb25uZWN0aW5nIHRvIGFuZCByZWdpc3RlcmluZyB3aXRoIHRoZSBycGNiaW5kIHNlcnZpY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTk6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cnBjYl9jcmVhdGVfYWZfbG9jYWwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc3VucnBjL3JwY2JfY2xudC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zdW5ycGMvcnBjYl9jbG50LmM9MjI0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcnBjX3RpbWVvdXQgcnBjYl9sb2NhbF90aW1lb3V0ID0ge1xuLS1cbm5ldC9zdW5ycGMvcnBjYl9jbG50LmMtMjMzLSAqL1xubmV0L3N1bnJwYy9ycGNiX2NsbnQuYzoyMzQ6c3RhdGljIGludCBycGNiX2NyZWF0ZV9hZl9sb2NhbChzdHJ1Y3QgbmV0ICpuZXQsXG5uZXQvc3VucnBjL3JwY2JfY2xudC5jLTIzNS1cdFx0XHRcdGNvbnN0IHN0cnVjdCBzb2NrYWRkcl91biAqYWRkcilcbi0tXG5uZXQvc3VucnBjL3JwY2JfY2xudC5jPTI4MT1zdGF0aWMgaW50IHJwY2JfY3JlYXRlX2xvY2FsX2Fic3RyYWN0KHN0cnVjdCBuZXQgKm5ldClcbi0tXG5uZXQvc3VucnBjL3JwY2JfY2xudC5jLTI4Ny1cbm5ldC9zdW5ycGMvcnBjYl9jbG50LmM6Mjg4Olx0cmV0dXJuIHJwY2JfY3JlYXRlX2FmX2xvY2FsKG5ldCwgXHUwMDI2cnBjYl9sb2NhbGFkZHJfYWJzdHJhY3QpO1xubmV0L3N1bnJwYy9ycGNiX2NsbnQuYy0yODktfVxuLS1cbm5ldC9zdW5ycGMvcnBjYl9jbG50LmM9MjkxPXN0YXRpYyBpbnQgcnBjYl9jcmVhdGVfbG9jYWxfdW5peChzdHJ1Y3QgbmV0ICpuZXQpXG4tLVxubmV0L3N1bnJwYy9ycGNiX2NsbnQuYy0yOTctXG5uZXQvc3VucnBjL3JwY2JfY2xudC5jOjI5ODpcdHJldHVybiBycGNiX2NyZWF0ZV9hZl9sb2NhbChuZXQsIFx1MDAyNnJwY2JfbG9jYWxhZGRyX3VuaXgpO1xubmV0L3N1bnJwYy9ycGNiX2NsbnQuYy0yOTktfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE5OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0NzIKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIExvY2FsIFJQQyBCaW5kaW5nIEZ1bmN0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIFJQQyBjb2RlIGFuZCBub3RpY2luZyBzb21ldGhpbmcgaW50ZXJlc3RpbmcuIEl0IGxvb2tzIGxpa2UgYHJwY2JfY3JlYXRlX2FmX2xvY2FsYCwgYHJwY2JfY3JlYXRlX2xvY2FsX25ldGAsIGFuZCBgcnBjYl9yZWdpc3Rlcl9jYWxsYCBhcmUgYWxsIGRlY2xhcmVkIGFzIGBzdGF0aWNgLiBUaGF0IGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdC4gU3RhdGljIGZ1bmN0aW9ucyBtZWFuIHRoZWlyIHNjb3BlIGlzIGxpbWl0ZWQgdG8gdGhlIGN1cnJlbnQgY29tcGlsYXRpb24gdW5pdCwgc28gdGhleSYjMzk7cmUgbm90IGludGVuZGVkIGZvciBleHRlcm5hbCB1c2UuIEkgd29uZGVyIHdoeSB0aGVzZSBwYXJ0aWN1bGFyIGZ1bmN0aW9ucyBhcmUgZGVlbWVkIGludGVybmFsLgoKTXkgbmV4dCBzdGVwIGlzIGNsZWFyOiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIG9mIHRoZXNlIGxvY2FsIGZ1bmN0aW9ucy4gTGV0JiMzOTtzIHNlZSB3aG8gaXMgYWN0dWFsbHkgY2FsbGluZyBgcnBjYl9jcmVhdGVfbG9jYWxfbmV0YC4gSXQgc2VlbXMgYXMgdGhvdWdoIHNvbWVvbmUgd2FudHMgdG8ga2VlcCBhIGNsb3NlIHJlaW4gb24gdGhlIGxvZ2ljIHRoYXQgdXNlcyB0aGlzIGZ1bmN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxOToyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtycGNiX2NyZWF0ZV9sb2NhbF9uZXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc3VucnBjL3JwY2JfY2xudC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zdW5ycGMvcnBjYl9jbG50LmM9MjkxPXN0YXRpYyBpbnQgcnBjYl9jcmVhdGVfbG9jYWxfdW5peChzdHJ1Y3QgbmV0ICpuZXQpXG4tLVxubmV0L3N1bnJwYy9ycGNiX2NsbnQuYy0zMDQtICovXG5uZXQvc3VucnBjL3JwY2JfY2xudC5jOjMwNTpzdGF0aWMgaW50IHJwY2JfY3JlYXRlX2xvY2FsX25ldChzdHJ1Y3QgbmV0ICpuZXQpXG5uZXQvc3VucnBjL3JwY2JfY2xudC5jLTMwNi17XG4tLVxubmV0L3N1bnJwYy9ycGNiX2NsbnQuYz0zNTM9aW50IHJwY2JfY3JlYXRlX2xvY2FsKHN0cnVjdCBuZXQgKm5ldClcbi0tXG5uZXQvc3VucnBjL3JwY2JfY2xudC5jLTM2Ni1cdCAgICBycGNiX2NyZWF0ZV9sb2NhbF91bml4KG5ldCkgIT0gMClcbm5ldC9zdW5ycGMvcnBjYl9jbG50LmM6MzY3Olx0XHRyZXN1bHQgPSBycGNiX2NyZWF0ZV9sb2NhbF9uZXQobmV0KTtcbm5ldC9zdW5ycGMvcnBjYl9jbG50LmMtMzY4LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxOToyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1OTcxCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBwcmVzZW50ZWQgYXMgaWYgaXQgd2VyZSBteSBvd24gaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipGb2N1c2luZyBpbiBvbiBgcnBjYl9jcmVhdGVfbG9jYWxgKioKClJpZ2h0LCBzbyBgcnBjYl9jcmVhdGVfbG9jYWxgLi4uIHRoYXQmIzM5O3MgdGhlIGV4cG9ydGVkIGZ1bmN0aW9uIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGhlcmUuIEltbWVkaWF0ZWx5LCB0aGUgc2lnbmlmaWNhbmNlIGNsaWNrcyBpbi4gVGhpcyBpc24mIzM5O3QganVzdCAqYSogZnVuY3Rpb247IGl0JiMzOTtzIHRoZSBvdXR3YXJkLWZhY2luZyBlbnRyeSBwb2ludCwgdGhlIG9uZSB0aGF0IG1ha2VzIHRoaXMgZnVuY3Rpb25hbGl0eSBhdmFpbGFibGUgdG8gdGhlIHdvcmxkLCBvciBhdCBsZWFzdCwgdGhlIGxvY2FsIHN5c3RlbS4gVGhhdCBtZWFucyB0aGUgc2lnbmF0dXJlLCB0aGUgYmVoYXZpb3IsIHRoZSBpbnRlcm5hbCBkZXBlbmRlbmNpZXMg4oCTIGFsbCBvZiBpdCBtdXN0IGJlIG1ldGljdWxvdXNseSBjb25zaWRlcmVkIGJlY2F1c2UgaXQmIzM5O3MgdGhlIHB1YmxpYyBBUEkuIEl0IGlzIGhvdyBvdGhlciBtb2R1bGVzLCBvciBhcHBsaWNhdGlvbnMsIGFyZSBpbnRlbmRlZCB0byBtYWtlIHVzZSBvZiB0aGUgUlBDIGJpbmRlciBmdW5jdGlvbmFsaXR5LiBUaGlua2luZyBmdXJ0aGVyIGFib3V0IHRoZSBmdW5jdGlvbiwgSSBpbW1lZGlhdGVseSBjb25zaWRlciBwb3RlbnRpYWwgZXJyb3JzIHRoYXQgbWF5IG9jY3VyIGluIHNldHRpbmcgdXAgdGhlIGxvY2FsIFJQQyBiaW5kZXIuIEl0IHdpbGwgcmVxdWlyZSB0aGUgYXBwcm9wcmlhdGUgcGVybWlzc2lvbnMsIG5ldHdvcmsgY29uZmlndXJhdGlvbiwgYW5kIGl0IG11c3Qgc3VjY2Vzc2Z1bGx5IHJlZ2lzdGVyIHNlcnZpY2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxOToyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtycGNiX2NyZWF0ZV9sb2NhbCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zdW5ycGMvcnBjYl9jbG50LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3N1bnJwYy9ycGNiX2NsbnQuYz0yMDY9c3RhdGljIHZvaWQgcnBjYl9zZXRfbG9jYWwoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgcnBjX2NsbnQgKmNsbnQsXG4tLVxubmV0L3N1bnJwYy9ycGNiX2NsbnQuYy0yMTEtXG5uZXQvc3VucnBjL3JwY2JfY2xudC5jOjIxMjpcdC8qIFByb3RlY3RlZCBieSBycGNiX2NyZWF0ZV9sb2NhbF9tdXRleCAqL1xubmV0L3N1bnJwYy9ycGNiX2NsbnQuYy0yMTMtXHRzbi1cdTAwM2VycGNiX2xvY2FsX2NsbnQgPSBjbG50O1xuLS1cbm5ldC9zdW5ycGMvcnBjYl9jbG50LmM9MjM0PXN0YXRpYyBpbnQgcnBjYl9jcmVhdGVfYWZfbG9jYWwoc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9zdW5ycGMvcnBjYl9jbG50LmMtMjgwLVxubmV0L3N1bnJwYy9ycGNiX2NsbnQuYzoyODE6c3RhdGljIGludCBycGNiX2NyZWF0ZV9sb2NhbF9hYnN0cmFjdChzdHJ1Y3QgbmV0ICpuZXQpXG5uZXQvc3VucnBjL3JwY2JfY2xudC5jLTI4Mi17XG4tLVxubmV0L3N1bnJwYy9ycGNiX2NsbnQuYy0yOTAtXG5uZXQvc3VucnBjL3JwY2JfY2xudC5jOjI5MTpzdGF0aWMgaW50IHJwY2JfY3JlYXRlX2xvY2FsX3VuaXgoc3RydWN0IG5ldCAqbmV0KVxubmV0L3N1bnJwYy9ycGNiX2NsbnQuYy0yOTIte1xuLS1cbm5ldC9zdW5ycGMvcnBjYl9jbG50LmMtMzA0LSAqL1xubmV0L3N1bnJwYy9ycGNiX2NsbnQuYzozMDU6c3RhdGljIGludCBycGNiX2NyZWF0ZV9sb2NhbF9uZXQoc3RydWN0IG5ldCAqbmV0KVxubmV0L3N1bnJwYy9ycGNiX2NsbnQuYy0zMDYte1xuLS1cbm5ldC9zdW5ycGMvcnBjYl9jbG50LmMtMzUyLSAqL1xubmV0L3N1bnJwYy9ycGNiX2NsbnQuYzozNTM6aW50IHJwY2JfY3JlYXRlX2xvY2FsKHN0cnVjdCBuZXQgKm5ldClcbm5ldC9zdW5ycGMvcnBjYl9jbG50LmMtMzU0LXtcbm5ldC9zdW5ycGMvcnBjYl9jbG50LmM6MzU1Olx0c3RhdGljIERFRklORV9NVVRFWChycGNiX2NyZWF0ZV9sb2NhbF9tdXRleCk7XG5uZXQvc3VucnBjL3JwY2JfY2xudC5jLTM1Ni1cdGludCByZXN1bHQgPSAwO1xuLS1cbm5ldC9zdW5ycGMvcnBjYl9jbG50LmMtMzYwLVxubmV0L3N1bnJwYy9ycGNiX2NsbnQuYzozNjE6XHRtdXRleF9sb2NrKFx1MDAyNnJwY2JfY3JlYXRlX2xvY2FsX211dGV4KTtcbm5ldC9zdW5ycGMvcnBjYl9jbG50LmMtMzYyLVx0aWYgKHJwY2JfZ2V0X2xvY2FsKG5ldCkpXG4tLVxubmV0L3N1bnJwYy9ycGNiX2NsbnQuYy0zNjQtXG5uZXQvc3VucnBjL3JwY2JfY2xudC5jOjM2NTpcdGlmIChycGNiX2NyZWF0ZV9sb2NhbF9hYnN0cmFjdChuZXQpICE9IDAgXHUwMDI2XHUwMDI2XG5uZXQvc3VucnBjL3JwY2JfY2xudC5jOjM2NjpcdCAgICBycGNiX2NyZWF0ZV9sb2NhbF91bml4KG5ldCkgIT0gMClcbm5ldC9zdW5ycGMvcnBjYl9jbG50LmM6MzY3Olx0XHRyZXN1bHQgPSBycGNiX2NyZWF0ZV9sb2NhbF9uZXQobmV0KTtcbm5ldC9zdW5ycGMvcnBjYl9jbG50LmMtMzY4LVxubmV0L3N1bnJwYy9ycGNiX2NsbnQuYy0zNjktb3V0OlxubmV0L3N1bnJwYy9ycGNiX2NsbnQuYzozNzA6XHRtdXRleF91bmxvY2soXHUwMDI2cnBjYl9jcmVhdGVfbG9jYWxfbXV0ZXgpO1xubmV0L3N1bnJwYy9ycGNiX2NsbnQuYy0zNzEtXHRyZXR1cm4gcmVzdWx0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxOToyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MDUwCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkludmVzdGlnYXRpbmcgdGhlIGBycGNiX2NyZWF0ZV9sb2NhbGAgRnVuY3Rpb24mIzM5O3MgU2NvcGUqKgoKT2theSwgc28gYHJwY2JfY3JlYXRlX2xvY2FsYCBpc24mIzM5O3Qgc3RhdGljLCBvciBhdCBsZWFzdCBpdCBzZWVtcyB0byBiZSBleHBvc2VkIHNvbWVob3cuIFRoYXQmIzM5O3MgdGhlIGNsdWUgSSBuZWVkZWQuIE5vdywgaWYgaXQmIzM5O3MgdmlzaWJsZSBvdXRzaWRlIGl0cyBpbW1lZGlhdGUgc2NvcGUsIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgaXMgdGhlIGNsaWVudC1zaWRlIGNvZGUsIHBhcnRpY3VsYXJseSB3aGVyZSBpdCBtaWdodCBiZSAqdXNlZCogdG8gcmVnaXN0ZXIgY2FsbHMuIFRoZSBvYnZpb3VzIHBsYWNlIHRvIGludmVzdGlnYXRlIG5leHQgaXMgdGhlIGBuZXQvc3VucnBjL3JwY2JfY2xudC5jYCBmaWxlLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIGlmIGBycGNiX3JlZ2lzdGVyX2NhbGxgIGlzIGRlZmluZWQgdGhlcmUgYW5kLCBtb3JlIGltcG9ydGFudGx5LCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGZ1bmN0aW9uIEkmIzM5O20gY3VyaW91cyBhYm91dC4gVW5kZXJzdGFuZGluZyB0aGlzIHJlbGF0aW9uc2hpcCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgaGFuZGxlIG9uIGhvdyB0aGlzIHJlZ2lzdHJhdGlvbiBwcm9jZXNzIHdvcmtzLiBJJiMzOTttIGhvcGluZyBgcnBjYl9yZWdpc3Rlcl9jYWxsYCBwcm92aWRlcyBhIGNsZWFyIHBhdGh3YXkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE5OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JwY2JfcmVnaXN0ZXJfY2FsbCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zdW5ycGMvcnBjYl9jbG50LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3N1bnJwYy9ycGNiX2NsbnQuYz0zNzQ9c3RhdGljIHN0cnVjdCBycGNfY2xudCAqcnBjYl9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpub2RlbmFtZSxcbi0tXG5uZXQvc3VucnBjL3JwY2JfY2xudC5jLTQxMC1cbm5ldC9zdW5ycGMvcnBjYl9jbG50LmM6NDExOnN0YXRpYyBpbnQgcnBjYl9yZWdpc3Rlcl9jYWxsKHN0cnVjdCBzdW5ycGNfbmV0ICpzbiwgc3RydWN0IHJwY19jbG50ICpjbG50LCBzdHJ1Y3QgcnBjX21lc3NhZ2UgKm1zZywgYm9vbCBpc19zZXQpXG5uZXQvc3VucnBjL3JwY2JfY2xudC5jLTQxMi17XG4tLVxubmV0L3N1bnJwYy9ycGNiX2NsbnQuYz00NjI9aW50IHJwY2JfcmVnaXN0ZXIoc3RydWN0IG5ldCAqbmV0LCB1MzIgcHJvZywgdTMyIHZlcnMsIGludCBwcm90LCB1bnNpZ25lZCBzaG9ydCBwb3J0KVxuLS1cbm5ldC9zdW5ycGMvcnBjYl9jbG50LmMtNDgzLVxubmV0L3N1bnJwYy9ycGNiX2NsbnQuYzo0ODQ6XHRyZXR1cm4gcnBjYl9yZWdpc3Rlcl9jYWxsKHNuLCBzbi1cdTAwM2VycGNiX2xvY2FsX2NsbnQsIFx1MDAyNm1zZywgaXNfc2V0KTtcbm5ldC9zdW5ycGMvcnBjYl9jbG50LmMtNDg1LX1cbi0tXG5uZXQvc3VucnBjL3JwY2JfY2xudC5jPTQ5MD1zdGF0aWMgaW50IHJwY2JfcmVnaXN0ZXJfaW5ldDQoc3RydWN0IHN1bnJwY19uZXQgKnNuLFxuLS1cbm5ldC9zdW5ycGMvcnBjYl9jbG50LmMtNTA3LVxubmV0L3N1bnJwYy9ycGNiX2NsbnQuYzo1MDg6XHRyZXN1bHQgPSBycGNiX3JlZ2lzdGVyX2NhbGwoc24sIHNuLVx1MDAzZXJwY2JfbG9jYWxfY2xudDQsIG1zZywgaXNfc2V0KTtcbm5ldC9zdW5ycGMvcnBjYl9jbG50LmMtNTA5LVx0a2ZyZWUobWFwLVx1MDAzZXJfYWRkcik7XG4tLVxubmV0L3N1bnJwYy9ycGNiX2NsbnQuYz01MTY9c3RhdGljIGludCBycGNiX3JlZ2lzdGVyX2luZXQ2KHN0cnVjdCBzdW5ycGNfbmV0ICpzbixcbi0tXG5uZXQvc3VucnBjL3JwY2JfY2xudC5jLTUzMy1cbm5ldC9zdW5ycGMvcnBjYl9jbG50LmM6NTM0Olx0cmVzdWx0ID0gcnBjYl9yZWdpc3Rlcl9jYWxsKHNuLCBzbi1cdTAwM2VycGNiX2xvY2FsX2NsbnQ0LCBtc2csIGlzX3NldCk7XG5uZXQvc3VucnBjL3JwY2JfY2xudC5jLTUzNS1cdGtmcmVlKG1hcC1cdTAwM2VyX2FkZHIpO1xuLS1cbm5ldC9zdW5ycGMvcnBjYl9jbG50LmM9NTM5PXN0YXRpYyBpbnQgcnBjYl91bnJlZ2lzdGVyX2FsbF9wcm90b2ZhbWlsaWVzKHN0cnVjdCBzdW5ycGNfbmV0ICpzbixcbi0tXG5uZXQvc3VucnBjL3JwY2JfY2xudC5jLTU0OC1cbm5ldC9zdW5ycGMvcnBjYl9jbG50LmM6NTQ5Olx0cmV0dXJuIHJwY2JfcmVnaXN0ZXJfY2FsbChzbiwgc24tXHUwMDNlcnBjYl9sb2NhbF9jbG50NCwgbXNnLCBmYWxzZSk7XG5uZXQvc3VucnBjL3JwY2JfY2xudC5jLTU1MC19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE5OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgwMDQKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyB0aGUgUmVnaXN0cmF0aW9uIFByb2Nlc3MqKgoKQWxyaWdodCwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgcmVnaXN0cmF0aW9uLCBzcGVjaWZpY2FsbHkgdGhlIGV4cG9ydGVkIGZ1bmN0aW9uIGBycGNiX3JlZ2lzdGVyYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7T2theSwgdGhhdCYjMzk7cyB0aGUgZW50cnkgcG9pbnQgd2UmIzM5O3JlIGNvbmNlcm5lZCB3aXRoLiYjMzQ7IEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGZ1bmN0aW9uIHdvcmtzLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBzeXN0ZW0uIFdoYXQgYXJlIGl0cyBkZXBlbmRlbmNpZXM/IEhvdyBkb2VzIGl0IGhhbmRsZSBlcnJvcnM/CgpUbyBnZXQgYSBjbGVhcmVyIHBpY3R1cmUsIEkmIzM5O20gZ29pbmcgdG8gZGlnIGEgbGl0dGxlIGRlZXBlci4gSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgcmVnaXN0cmF0aW9uIHByb2Nlc3MgaXMgdGllZCB0b2dldGhlciwgYW5kIGhvdyBpdCBkaWZmZXJzIGZyb20gYSBtb3JlIHN0YXRpYyBtZXRob2Qgb2YgUlBDIHVzZS4gSSYjMzk7bGwgbmVlZCB0byBleGFtaW5lIGBycGNiX2NyZWF0ZV9sb2NhbGAgYW5kIHNlZSBpZiB0aGV5IGFyZSByZWxhdGVkLiBNeSBmb2N1cyB3aWxsIGJlIG9uIHRoZSBrZXkgcGllY2VzOgoKKiAgIEhvdyBpcyB0aGUgcmVnaXN0cmF0aW9uIGluZm8gaGFuZGxlZD8KKiAgIFdoYXQgaXMgcmVnaXN0ZXJlZCBpbiB0aGUgcHJvY2Vzcz8KKiAgIFdoYXQgcmVzb3VyY2VzIGFyZSBhbGxvY2F0ZWQ/CgpJJiMzOTtsbCBiZSBsb29raW5nIGZvciBwb3RlbnRpYWwgYm90dGxlbmVja3MsIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcywgb3IgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9ucyBpbiB0aGVzZSBmdW5jdGlvbnMuIEl0JiMzOTtzIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxOToyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtycGNiX3JlZ2lzdGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3N1bnJwYy9ycGNiX2NsbnQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc3VucnBjL3JwY2JfY2xudC5jPTM3ND1zdGF0aWMgc3RydWN0IHJwY19jbG50ICpycGNiX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKm5vZGVuYW1lLFxuLS1cbm5ldC9zdW5ycGMvcnBjYl9jbG50LmMtNDEwLVxubmV0L3N1bnJwYy9ycGNiX2NsbnQuYzo0MTE6c3RhdGljIGludCBycGNiX3JlZ2lzdGVyX2NhbGwoc3RydWN0IHN1bnJwY19uZXQgKnNuLCBzdHJ1Y3QgcnBjX2NsbnQgKmNsbnQsIHN0cnVjdCBycGNfbWVzc2FnZSAqbXNnLCBib29sIGlzX3NldClcbm5ldC9zdW5ycGMvcnBjYl9jbG50LmMtNDEyLXtcbi0tXG5uZXQvc3VucnBjL3JwY2JfY2xudC5jLTQyOS0vKipcbm5ldC9zdW5ycGMvcnBjYl9jbG50LmM6NDMwOiAqIHJwY2JfcmVnaXN0ZXIgLSBzZXQgb3IgdW5zZXQgYSBwb3J0IHJlZ2lzdHJhdGlvbiB3aXRoIHRoZSBsb2NhbCBycGNiaW5kIHN2Y1xubmV0L3N1bnJwYy9ycGNiX2NsbnQuYy00MzEtICogQG5ldDogdGFyZ2V0IG5ldHdvcmsgbmFtZXNwYWNlXG4tLVxubmV0L3N1bnJwYy9ycGNiX2NsbnQuYy00NjEtICovXG5uZXQvc3VucnBjL3JwY2JfY2xudC5jOjQ2MjppbnQgcnBjYl9yZWdpc3RlcihzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBwcm9nLCB1MzIgdmVycywgaW50IHByb3QsIHVuc2lnbmVkIHNob3J0IHBvcnQpXG5uZXQvc3VucnBjL3JwY2JfY2xudC5jLTQ2My17XG4tLVxubmV0L3N1bnJwYy9ycGNiX2NsbnQuYy00ODMtXG5uZXQvc3VucnBjL3JwY2JfY2xudC5jOjQ4NDpcdHJldHVybiBycGNiX3JlZ2lzdGVyX2NhbGwoc24sIHNuLVx1MDAzZXJwY2JfbG9jYWxfY2xudCwgXHUwMDI2bXNnLCBpc19zZXQpO1xubmV0L3N1bnJwYy9ycGNiX2NsbnQuYy00ODUtfVxuLS1cbm5ldC9zdW5ycGMvcnBjYl9jbG50LmMtNDg5LSAqL1xubmV0L3N1bnJwYy9ycGNiX2NsbnQuYzo0OTA6c3RhdGljIGludCBycGNiX3JlZ2lzdGVyX2luZXQ0KHN0cnVjdCBzdW5ycGNfbmV0ICpzbixcbm5ldC9zdW5ycGMvcnBjYl9jbG50LmMtNDkxLVx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKnNhcCxcbi0tXG5uZXQvc3VucnBjL3JwY2JfY2xudC5jLTUwNy1cbm5ldC9zdW5ycGMvcnBjYl9jbG50LmM6NTA4Olx0cmVzdWx0ID0gcnBjYl9yZWdpc3Rlcl9jYWxsKHNuLCBzbi1cdTAwM2VycGNiX2xvY2FsX2NsbnQ0LCBtc2csIGlzX3NldCk7XG5uZXQvc3VucnBjL3JwY2JfY2xudC5jLTUwOS1cdGtmcmVlKG1hcC1cdTAwM2VyX2FkZHIpO1xuLS1cbm5ldC9zdW5ycGMvcnBjYl9jbG50LmMtNTE1LSAqL1xubmV0L3N1bnJwYy9ycGNiX2NsbnQuYzo1MTY6c3RhdGljIGludCBycGNiX3JlZ2lzdGVyX2luZXQ2KHN0cnVjdCBzdW5ycGNfbmV0ICpzbixcbm5ldC9zdW5ycGMvcnBjYl9jbG50LmMtNTE3LVx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKnNhcCxcbi0tXG5uZXQvc3VucnBjL3JwY2JfY2xudC5jLTUzMy1cbm5ldC9zdW5ycGMvcnBjYl9jbG50LmM6NTM0Olx0cmVzdWx0ID0gcnBjYl9yZWdpc3Rlcl9jYWxsKHNuLCBzbi1cdTAwM2VycGNiX2xvY2FsX2NsbnQ0LCBtc2csIGlzX3NldCk7XG5uZXQvc3VucnBjL3JwY2JfY2xudC5jLTUzNS1cdGtmcmVlKG1hcC1cdTAwM2VyX2FkZHIpO1xuLS1cbm5ldC9zdW5ycGMvcnBjYl9jbG50LmM9NTM5PXN0YXRpYyBpbnQgcnBjYl91bnJlZ2lzdGVyX2FsbF9wcm90b2ZhbWlsaWVzKHN0cnVjdCBzdW5ycGNfbmV0ICpzbixcbi0tXG5uZXQvc3VucnBjL3JwY2JfY2xudC5jLTU0OC1cbm5ldC9zdW5ycGMvcnBjYl9jbG50LmM6NTQ5Olx0cmV0dXJuIHJwY2JfcmVnaXN0ZXJfY2FsbChzbiwgc24tXHUwMDNlcnBjYl9sb2NhbF9jbG50NCwgbXNnLCBmYWxzZSk7XG5uZXQvc3VucnBjL3JwY2JfY2xudC5jLTU1MC19XG4tLVxubmV0L3N1bnJwYy9ycGNiX2NsbnQuYz01OTY9aW50IHJwY2JfdjRfcmVnaXN0ZXIoc3RydWN0IG5ldCAqbmV0LCBjb25zdCB1MzIgcHJvZ3JhbSwgY29uc3QgdTMyIHZlcnNpb24sXG4tLVxubmV0L3N1bnJwYy9ycGNiX2NsbnQuYy02MTUtXG5uZXQvc3VucnBjL3JwY2JfY2xudC5jOjYxNjpcdHRyYWNlX3JwY2JfcmVnaXN0ZXIobWFwLnJfcHJvZywgbWFwLnJfdmVycywgbWFwLnJfYWRkciwgbWFwLnJfbmV0aWQpO1xubmV0L3N1bnJwYy9ycGNiX2NsbnQuYy02MTctXG4tLVxubmV0L3N1bnJwYy9ycGNiX2NsbnQuYy02MTktXHRjYXNlIEFGX0lORVQ6XG5uZXQvc3VucnBjL3JwY2JfY2xudC5jOjYyMDpcdFx0cmV0dXJuIHJwY2JfcmVnaXN0ZXJfaW5ldDQoc24sIGFkZHJlc3MsIFx1MDAyNm1zZyk7XG5uZXQvc3VucnBjL3JwY2JfY2xudC5jLTYyMS1cdGNhc2UgQUZfSU5FVDY6XG5uZXQvc3VucnBjL3JwY2JfY2xudC5jOjYyMjpcdFx0cmV0dXJuIHJwY2JfcmVnaXN0ZXJfaW5ldDYoc24sIGFkZHJlc3MsIFx1MDAyNm1zZyk7XG5uZXQvc3VucnBjL3JwY2JfY2xudC5jLTYyMy1cdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTk6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTQ3MAoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDEyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFN1blJQQyBTdWJzeXN0ZW0gQ2hhbmdlcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIEkgc2VlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggZXhwb3J0ZWQgZnVuY3Rpb25zOiBgcnBjYl9yZWdpc3RlcmAsIGBycGNiX3Y0X3JlZ2lzdGVyYCwgYHN2Y19yZWdpc3RlcmAsIGFuZCBgc3ZjX2dlbmVyaWNfcnBjYmluZF9zZXRgLiBUaGF0JiMzOTtzIGEgY2xlYXIgaW5kaWNhdG9yIHRoaXMgaXMgdG91Y2hpbmcgdGhlIGNvcmUgb2YgdGhlIFJQQyBiaW5kaW5nIHByb2Nlc3MuIFRoZSBpbXBvcnRhbnQgY2hhbmdlIGlzIHRoZSBhZGRpdGlvbiBvZiBhIHRpbWVvdXQgdG8gbG9jYWwgcnBjYmluZCBjYWxscywgYW5kIHRoZSBoYW5kbGluZyBvZiBgLUVUSU1FRE9VVGAgd2l0aGluIGBzdmNfcmVnaXN0ZXJgIGFuZCBgc3ZjX2dlbmVyaWNfcnBjYmluZF9zZXRgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIG5vdCBqdXN0IGEgY29zbWV0aWMgb25lOyBpdCBkaXJlY3RseSBpbXBhY3RzIGhvdyBzZXJ2aWNlcyByZWdpc3RlciBhbmQgaW50ZXJhY3Qgd2l0aCB0aGUgcnBjYmluZCBkYWVtb24uIEdpdmVuIHRoZSBwb3RlbnRpYWwgZm9yIHN1YnRsZSB0aW1pbmctcmVsYXRlZCBpc3N1ZXMgd2l0aCB0aGVzZSBraW5kcyBvZiBjaGFuZ2VzLCB0aGlzIGlzICphYnNvbHV0ZWx5KiBzb21ldGhpbmcgdGhhdCBuZWVkcyBmdXp6aW5nLiBUaGUgY29uZmlnIG9wdGlvbiB0aWVkIHRvIHRoaXMgaXMgYFNVTlJQQ2AsIHNvIGZpcnN0IEkmIzM5O2xsIHF1aWNrbHkgY2hlY2sgaXRzIGRlcGVuZGVuY2llcyB0byBnZXQgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgd2lkZXIgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTk6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGVwZW5kcyBvbi4qU1VOUlBDJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbmZzL25mcy1yZG1hLnJzdD0zNT11c2Ugd2l0aCBORlMvUkRNQS5cbi0tXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL25mcy9uZnMtcmRtYS5yc3QtMTM0LSAgYXJlIHR1cm5lZCBvbi4gVGhlIE5GUy9SRE1BIGNsaWVudCBhbmQgc2VydmVyIGFyZSBjb25maWd1cmVkIHZpYSB0aGUgaGlkZGVuXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL25mcy9uZnMtcmRtYS5yc3Q6MTM1OiAgU1VOUlBDX1hQUlRfUkRNQSBjb25maWcgb3B0aW9uIHRoYXQgZGVwZW5kcyBvbiBTVU5SUEMgYW5kIElORklOSUJBTkQuIFRoZVxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9uZnMvbmZzLXJkbWEucnN0LTEzNi0gIHZhbHVlIG9mIFNVTlJQQ19YUFJUX1JETUEgd2lsbCBiZTpcbi0tXG5mcy9uZnMvS2NvbmZpZz0xOTg9Y29uZmlnIE5GU19ERUJVR1xuZnMvbmZzL0tjb25maWctMTk5LVx0Ym9vbFxuZnMvbmZzL0tjb25maWc6MjAwOlx0ZGVwZW5kcyBvbiBORlNfRlMgXHUwMDI2XHUwMDI2IFNVTlJQQ19ERUJVR1xuZnMvbmZzL0tjb25maWctMjAxLVx0ZGVmYXVsdCB5XG4tLVxubGliL0tjb25maWcuZGVidWc9MjE2OT1jb25maWcgRkFJTF9TVU5SUENcbmxpYi9LY29uZmlnLmRlYnVnLTIxNzAtXHRib29sIFwmIzM0O0ZhdWx0LWluamVjdGlvbiBjYXBhYmlsaXR5IGZvciBTdW5SUENcJiMzNDtcbmxpYi9LY29uZmlnLmRlYnVnOjIxNzE6XHRkZXBlbmRzIG9uIEZBVUxUX0lOSkVDVElPTl9ERUJVR19GUyBcdTAwMjZcdTAwMjYgU1VOUlBDX0RFQlVHXG5saWIvS2NvbmZpZy5kZWJ1Zy0yMTcyLVx0aGVscFxuLS1cbm5ldC9LY29uZmlnPTk0PWNvbmZpZyBORVRfSEFORFNIQUtFXG5uZXQvS2NvbmZpZy05NS1cdGJvb2xcbm5ldC9LY29uZmlnOjk2Olx0ZGVwZW5kcyBvbiBTVU5SUEMgfHwgTlZNRV9UQVJHRVRfVENQIHx8IE5WTUVfVENQXG5uZXQvS2NvbmZpZy05Ny1cdGRlZmF1bHQgeVxuLS1cbm5ldC9zdW5ycGMvS2NvbmZpZz0xMT1jb25maWcgU1VOUlBDX0JBQ0tDSEFOTkVMXG5uZXQvc3VucnBjL0tjb25maWctMTItXHRib29sXG5uZXQvc3VucnBjL0tjb25maWc6MTM6XHRkZXBlbmRzIG9uIFNVTlJQQ1xubmV0L3N1bnJwYy9LY29uZmlnLTE0LVxubmV0L3N1bnJwYy9LY29uZmlnPTE1PWNvbmZpZyBTVU5SUENfU1dBUFxubmV0L3N1bnJwYy9LY29uZmlnLTE2LVx0Ym9vbFxubmV0L3N1bnJwYy9LY29uZmlnOjE3Olx0ZGVwZW5kcyBvbiBTVU5SUENcbm5ldC9zdW5ycGMvS2NvbmZpZy0xOC1cbm5ldC9zdW5ycGMvS2NvbmZpZz0xOT1jb25maWcgUlBDU0VDX0dTU19LUkI1XG5uZXQvc3VucnBjL0tjb25maWctMjAtXHR0cmlzdGF0ZSBcJiMzNDtTZWN1cmUgUlBDOiBLZXJiZXJvcyBWIG1lY2hhbmlzbVwmIzM0O1xubmV0L3N1bnJwYy9LY29uZmlnOjIxOlx0ZGVwZW5kcyBvbiBTVU5SUEMgXHUwMDI2XHUwMDI2IENSWVBUT1xubmV0L3N1bnJwYy9LY29uZmlnLTIyLVx0ZGVmYXVsdCB5XG4tLVxubmV0L3N1bnJwYy9LY29uZmlnPTM2PWNvbmZpZyBTVU5SUENfREVCVUdcbm5ldC9zdW5ycGMvS2NvbmZpZy0zNy1cdGJvb2wgXCYjMzQ7UlBDOiBFbmFibGUgZHByaW50ayBkZWJ1Z2dpbmdcJiMzNDtcbm5ldC9zdW5ycGMvS2NvbmZpZzozODpcdGRlcGVuZHMgb24gU1VOUlBDIFx1MDAyNlx1MDAyNiBTWVNDVExcbm5ldC9zdW5ycGMvS2NvbmZpZy0zOS1cdHNlbGVjdCBERUJVR19GU1xuLS1cbm5ldC9zdW5ycGMvS2NvbmZpZz01MD1jb25maWcgU1VOUlBDX0RFQlVHX1RSQUNFXG5uZXQvc3VucnBjL0tjb25maWctNTEtXHRib29sIFwmIzM0O1JQQzogU2VuZCBkZnByaW50aygpIG91dHB1dCB0byB0aGUgdHJhY2UgYnVmZmVyXCYjMzQ7XG5uZXQvc3VucnBjL0tjb25maWc6NTI6XHRkZXBlbmRzIG9uIFNVTlJQQ19ERUJVRyBcdTAwMjZcdTAwMjYgVFJBQ0lOR1xubmV0L3N1bnJwYy9LY29uZmlnLTUzLVx0ZGVmYXVsdCBuXG4tLVxubmV0L3N1bnJwYy9LY29uZmlnPTY0PWNvbmZpZyBTVU5SUENfWFBSVF9SRE1BXG5uZXQvc3VucnBjL0tjb25maWctNjUtXHR0cmlzdGF0ZSBcJiMzNDtSUEMtb3Zlci1SRE1BIHRyYW5zcG9ydFwmIzM0O1xubmV0L3N1bnJwYy9LY29uZmlnOjY2Olx0ZGVwZW5kcyBvbiBTVU5SUEMgXHUwMDI2XHUwMDI2IElORklOSUJBTkQgXHUwMDI2XHUwMDI2IElORklOSUJBTkRfQUREUl9UUkFOU1xubmV0L3N1bnJwYy9LY29uZmlnLTY3LVx0ZGVmYXVsdCBTVU5SUEMgXHUwMDI2XHUwMDI2IElORklOSUJBTkRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTk6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA2ODMKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipBbmFseXppbmcgdGhlIFNVTlJQQyBDb25maWd1cmF0aW9uIE9wdGlvbioqCgpSaWdodCwgc28gYFNVTlJQQ2AuIEl0IHNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQgb24gdGhlIHN1cmZhY2Ug4oCTIGl0JiMzOTtzIGEgdHJpc3RhdGUgb3B0aW9uIGFuZCBkb2VzbiYjMzk7dCBleHBsaWNpdGx5IHJlbHkgb24gYW55IG90aGVyIGNvbmZpZ3VyYXRpb25zLCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSwgbGV0JiMzOTtzIGp1c3QgbWFrZSBzdXJlLiBCZXN0IHRvIGVyciBvbiB0aGUgc2lkZSBvZiBjYXV0aW9uLiBMZXQgbWUgY2hlY2sgdGhlIGRlcGVuZGVuY2llcy4gSG1tLCBsZXQgbWUgY29uc3VsdCB0aGUgYG5ldC9zdW5ycGMvS2NvbmZpZ2AgZmlsZS4gVGhhdCYjMzk7cyB0aGUgZGVmaW5pdGl2ZSBzb3VyY2UuIEkgbmVlZCB0byBnZXQgaW50byB0aGUgZGV0YWlscyBvZiB0aGUgZGVwZW5kZW5jaWVzIGJlZm9yZSBtYWtpbmcgYW55IGRlY2lzaW9ucy4gVGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gbG9vay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTk6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFNVTlJQQyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zdW5ycGMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc3VucnBjL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbm5ldC9zdW5ycGMvS2NvbmZpZzoyOmNvbmZpZyBTVU5SUENcbm5ldC9zdW5ycGMvS2NvbmZpZy0zLVx0dHJpc3RhdGVcbi0tXG5uZXQvc3VucnBjL0tjb25maWctNS1cbm5ldC9zdW5ycGMvS2NvbmZpZzo2OmNvbmZpZyBTVU5SUENfR1NTXG5uZXQvc3VucnBjL0tjb25maWctNy1cdHRyaXN0YXRlXG4tLVxubmV0L3N1bnJwYy9LY29uZmlnLTEwLVxubmV0L3N1bnJwYy9LY29uZmlnOjExOmNvbmZpZyBTVU5SUENfQkFDS0NIQU5ORUxcbm5ldC9zdW5ycGMvS2NvbmZpZy0xMi1cdGJvb2xcbi0tXG5uZXQvc3VucnBjL0tjb25maWctMTQtXG5uZXQvc3VucnBjL0tjb25maWc6MTU6Y29uZmlnIFNVTlJQQ19TV0FQXG5uZXQvc3VucnBjL0tjb25maWctMTYtXHRib29sXG4tLVxubmV0L3N1bnJwYy9LY29uZmlnPTE5PWNvbmZpZyBSUENTRUNfR1NTX0tSQjVcbi0tXG5uZXQvc3VucnBjL0tjb25maWctMzUtXG5uZXQvc3VucnBjL0tjb25maWc6MzY6Y29uZmlnIFNVTlJQQ19ERUJVR1xubmV0L3N1bnJwYy9LY29uZmlnLTM3LVx0Ym9vbCBcJiMzNDtSUEM6IEVuYWJsZSBkcHJpbnRrIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm5ldC9zdW5ycGMvS2NvbmZpZy00OS1cbm5ldC9zdW5ycGMvS2NvbmZpZzo1MDpjb25maWcgU1VOUlBDX0RFQlVHX1RSQUNFXG5uZXQvc3VucnBjL0tjb25maWctNTEtXHRib29sIFwmIzM0O1JQQzogU2VuZCBkZnByaW50aygpIG91dHB1dCB0byB0aGUgdHJhY2UgYnVmZmVyXCYjMzQ7XG4tLVxubmV0L3N1bnJwYy9LY29uZmlnLTYzLVxubmV0L3N1bnJwYy9LY29uZmlnOjY0OmNvbmZpZyBTVU5SUENfWFBSVF9SRE1BXG5uZXQvc3VucnBjL0tjb25maWctNjUtXHR0cmlzdGF0ZSBcJiMzNDtSUEMtb3Zlci1SRE1BIHRyYW5zcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxOToyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTI5MwoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFRyaXN0YXRlIEtlcm5lbCBDb25maWd1cmF0aW9uIE9wdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyB0cmlzdGF0ZSBvcHRpb24sIGFuZCBpbW1lZGlhdGVseSBteSBtaW5kIGp1bXBzIHRvIHRoZSBsYWNrIG9mIGFueSBvYnZpb3VzIGRlcGVuZGVuY2llcy4gVGhhdCBmZWVscyBhIGJpdCBvZGQsIGRvZXNuJiMzOTt0IGl0PyBNb3N0IG9mIHRoZSB0aW1lLCB3aGVuIEkgc2VlIGEgdHJpc3RhdGUgb3B0aW9uIGluIHRoZSBrZXJuZWwgY29uZmlnLCBpdCYjMzk7cyB0aWVkIHRvIHNvbWV0aGluZyBlbHNlLCBhIHBhcmVudCBvcHRpb24gdGhhdCBnb3Zlcm5zIGl0cyBzZWxlY3Rpb24sIG9yIHBlcmhhcHMgYW5vdGhlciwgc2ltaWxhciBmdW5jdGlvbi4KCkJ1dCwgaGFuZyBvbiwgaG93ICppcyogdGhpcyB0aGluZyBzZWxlY3RlZD8gVGhhdCYjMzk7cyB0aGUgcmVhbCBxdWVzdGlvbi4gTXkgaW50dWl0aW9uIGltbWVkaWF0ZWx5IGZsYWdzIHRoaW5ncyBsaWtlIGBORlNfRlNgIG9yIGBORlNEYCBhcyB0aGUgdXN1YWwgc3VzcGVjdHMgd2hlbiBgU1VOUlBDYCBpcyBpbnZvbHZlZC4gTXkgdHJhaW4gb2YgdGhvdWdodCBhbHdheXMgdGVuZHMgdG93YXJkIHRoZSB0cmllZC1hbmQtdHJ1ZSBwYXRod2F5cyB0aGF0IEkmIzM5O20gZmFtaWxpYXIgd2l0aC4gCgpJIGtub3cgSSBjYW4mIzM5O3QgcmVseSBvbiBpbnR1aXRpb24gYWxvbmUsIHRpbWUgdG8gaGVhZCBzdHJhaWdodCB0byB0aGUgc291cmNlLiBUaGUgbmV4dCB0aGluZyBJJiMzOTttIGdvaW5nIHRvIGRvIGlzIGRpdmUgaW50byBgZnMvbmZzL0tjb25maWdgLiBUaGF0JiMzOTtzIHdoZXJlIEkmIzM5O2xsIGZpbmQgdGhlIGRlZmluaXRpdmUgYW5zd2VyLiBJJiMzOTtsbCBzY291ciB0aGF0IGZpbGUgZm9yIGRlcGVuZGVuY2llcywgbWVudSBlbnRyaWVzLCBhbmQgYW55IGNsdWVzIGFib3V0IGhvdyB0aGlzIG9wdGlvbiBnZXRzIHRyaWdnZXJlZC4gVGhhdCBLY29uZmlnIGZpbGUgaXMgdGhlIHVsdGltYXRlIGF1dGhvcml0eSBpbiB0aGlzIGNhc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE5OjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlbGVjdCBTVU5SUEMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvS2NvbmZpZz0zODI9Y29uZmlnIE5GU19DT01NT05fTE9DQUxJT19TVVBQT1JUXG4tLVxuZnMvS2NvbmZpZy0zODYtXHRkZWZhdWx0IG0gaWYgTkZTRD1tIFx1MDAyNlx1MDAyNiBORlNfRlM9bVxuZnMvS2NvbmZpZzozODc6XHRzZWxlY3QgU1VOUlBDXG5mcy9LY29uZmlnLTM4OC1cbi0tXG5mcy9uZnMvS2NvbmZpZz0yPWNvbmZpZyBORlNfRlNcbi0tXG5mcy9uZnMvS2NvbmZpZy02LVx0c2VsZWN0IExPQ0tEXG5mcy9uZnMvS2NvbmZpZzo3Olx0c2VsZWN0IFNVTlJQQ1xuZnMvbmZzL0tjb25maWctOC1cdHNlbGVjdCBORlNfQ09NTU9OXG4tLVxuZnMvbmZzL0tjb25maWc9Nzc9Y29uZmlnIE5GU19WNFxuLS1cbmZzL25mcy9LY29uZmlnLTgwLVx0c2VsZWN0IEtFWVNcbmZzL25mcy9LY29uZmlnOjgxOlx0c2VsZWN0IFNVTlJQQ19CQUNLQ0hBTk5FTFxuZnMvbmZzL0tjb25maWctODItXHRoZWxwXG4tLVxuZnMvbmZzL0tjb25maWc9OTI9Y29uZmlnIE5GU19TV0FQXG4tLVxuZnMvbmZzL0tjb25maWctOTUtXHRkZXBlbmRzIG9uIE5GU19GUyBcdTAwMjZcdTAwMjYgU1dBUFxuZnMvbmZzL0tjb25maWc6OTY6XHRzZWxlY3QgU1VOUlBDX1NXQVBcbmZzL25mcy9LY29uZmlnLTk3LVx0aGVscFxuLS1cbmZzL25mc2QvS2NvbmZpZz0yPWNvbmZpZyBORlNEXG4tLVxuZnMvbmZzZC9LY29uZmlnLTExLVx0c2VsZWN0IExPQ0tEXG5mcy9uZnNkL0tjb25maWc6MTI6XHRzZWxlY3QgU1VOUlBDXG5mcy9uZnNkL0tjb25maWctMTMtXHRzZWxlY3QgRVhQT1JURlNcbi0tXG5uZXQvc3VucnBjL0tjb25maWc9MTk9Y29uZmlnIFJQQ1NFQ19HU1NfS1JCNVxuLS1cbm5ldC9zdW5ycGMvS2NvbmZpZy0yMi1cdGRlZmF1bHQgeVxubmV0L3N1bnJwYy9LY29uZmlnOjIzOlx0c2VsZWN0IFNVTlJQQ19HU1Ncbm5ldC9zdW5ycGMvS2NvbmZpZy0yNC1cdHNlbGVjdCBDUllQVE9fS1JCNVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxOToyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjA1NAoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDIwOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBDb25maWd1cmF0aW9uIERlY2lzaW9ucyBmb3IgTkZTIFN1cHBvcnQqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyBORlMgaXMgY29uZmlndXJlZCwgYW5kIGl0JiMzOTtzIGNsZWFyIHRoYXQgYm90aCBgTkZTX0ZTYCBhbmQgYE5GU0RgIGRlcGVuZCBvbiBgU1VOUlBDYC4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byBpbmNsdWRlIGJvdGggYE5GU19GU2AgYW5kIGBORlNEYCBpbiB0aGUgRW5hYmxlQ29uZmlncywgb3IgcGVyaGFwcyBqdXN0IGBTVU5SUENgLiBBZnRlciBhIGJpdCBtb3JlIHRob3VnaHQsIEkgcmVhbGl6ZSB0aGF0IGlmIGBTVU5SUENgIGlzIGEgdHJpc3RhdGUsIGFuZCBpdCB1c3VhbGx5IGlzLCB0aGVuIGVuYWJsaW5nIGl0IGRpcmVjdGx5IHNob3VsZCBiZSBzdWZmaWNpZW50LiBIb3dldmVyLCBJIHdhbnQgdG8gYmUgKmFic29sdXRlbHkqIGNlcnRhaW4gdGhhdCBgTkZTX0ZTYCBhbmQgYE5GU0RgIGFyZSBjb21waWxlZCBhbmQgcmVhY2hhYmxlLCBhcyB0aGV5JiMzOTtyZSB0aGUgY29yZSBjb21wb25lbnRzIGhlcmUuIFRoZXJlZm9yZSwgSSYjMzk7bSBnb2luZyB0byBleHBsaWNpdGx5IGFkZCBgU1VOUlBDYCwgYE5GU19GU2AsIGFuZCBgTkZTRGAgdG8gdGhlIGNvbmZpZ3VyYXRpb25zLiBUaGF0IHNob3VsZCBwcm92aWRlIHRoZSBtb3N0IHJvYnVzdCBhbmQgZXhwbGljaXQgZGVwZW5kZW5jeSBoYW5kbGluZy4KCk5vdywgcmVnYXJkaW5nIHRoZSBmb2N1cyBzeW1ib2xzIGZvciB2ZXJpZmljYXRpb24sIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlc2Uga2V5IGZ1bmN0aW9ucyBhcmUgYXZhaWxhYmxlIGZvciBpbnNwZWN0aW9uOiBgc3ZjX3JlZ2lzdGVyYCwgYHN2Y19nZW5lcmljX3JwY2JpbmRfc2V0YCwgYHJwY2JfcmVnaXN0ZXJgLCBgcnBjYl92NF9yZWdpc3RlcmAsIGFuZCBgcnBjYl9jcmVhdGVfbG9jYWxgLgoKSnVzdCB0byBiZSBjb21wbGV0ZWx5IHRob3JvdWdoLCBJJiMzOTtsbCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0IGBycGNiX2NyZWF0ZV9sb2NhbGAgaXMgZXhwb3J0ZWQgdG8gZW5zdXJlIGl0IGlzIGFjY2Vzc2libGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE5OjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qcnBjYl9jcmVhdGVfbG9jYWwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc3VucnBjL3JwY2JfY2xudC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTk6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI1OTYKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGlubmVyIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyB0aGUgRGF0YSYjMzk7cyBBY2Nlc3NpYmlsaXR5KioKCkFscmlnaHQsIHNvIHRoZSBkYXRhIGlzbiYjMzk7dCAqZXhwbGljaXRseSogZXhwb3J0ZWQsIG1lYW5pbmcgaXQmIzM5O3Mgbm90IGJlaW5nIHByZXNlbnRlZCBkaXJlY3RseSBhcyBhIHN0YW5kYXJkLCByZWFkaWx5IGF2YWlsYWJsZSBkYXRhIHN0cmVhbS4gQnV0LCBhbmQgdGhpcyBpcyBjcnVjaWFsLCBpdCBhbHNvIGlzbiYjMzk7dCAmIzM0O3N0YXRpYyYjMzQ7LiBUaGF0IG1lYW5zIGl0JiMzOTtzIGxpa2VseSBiZWluZyBnZW5lcmF0ZWQgb3IgdXBkYXRlZCBkeW5hbWljYWxseSwgYW5kIHRoZXJlZm9yZSAqYWNjZXNzaWJsZSogaW4gc29tZSBmYXNoaW9uLCBldmVuIGlmIGluZGlyZWN0bHkuIFRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBwaW5wb2ludCAqaG93KiB0aGF0IGFjY2Vzc2liaWxpdHkgaXMgYWNoaWV2ZWQuIExldCYjMzk7cyBkZWx2ZSBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgdGhlIGBycGNiX3JlZ2lzdGVyYCBmdW5jdGlvbi4gSWYgdGhhdCYjMzk7cyBleHBvcnRlZCwgaXQmIzM5O3MgYSBzdHJvbmcgaW5kaWNhdG9yIHRoYXQgdGhpcyBwcm9jZXNzIGlzIHBhcnRpY2lwYXRpbmcgaW4gYSByZW1vdGUgcHJvY2VkdXJlIGNhbGwgYW5kIHRoYXQgY291bGQgYmUgYSBzaWduaWZpY2FudCBjbHVlIHRvIGhvdyB0aGlzIHdvcmtzLCB3aGljaCB3aWxsIHVsdGltYXRlbHkgZ3VpZGUgbWUgdG8gdGhlIHVsdGltYXRlIHNvdXJjZSBvZiB0cnV0aC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTk6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MLipycGNiX3JlZ2lzdGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3N1bnJwYy9ycGNiX2NsbnQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE5OjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyODYzCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoYXQgY29kZToKCioqRmluZGluZyB0aGUgRXhwb3J0ZWQgU3ltYm9scyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmluZCBvdXQgd2h5IHRoZXNlIGFyZW4mIzM5O3Qgc2hvd2luZyB1cCBhcyBleHBvcnRlZC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gY2hlY2sgd2hlcmUgdGhlc2Ugc3ltYm9scyBhcmUgZGVmaW5lZCwgYW5kIHNwZWNpZmljYWxseSwgaG93IHRoZXkgYXJlIG1hZGUgYXZhaWxhYmxlIHRvIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwuIFNpbmNlIHRoZXNlIGFyZSBsaWtlbHkgUlBDLXJlbGF0ZWQsIGBuZXQvc3VucnBjL3JwY2JfY2xudC5jYCBpcyB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBsb29raW5nLCBnaXZlbiB0aGF0JiMzOTtzIHdoZXJlIHRoZSBjbGllbnQtc2lkZSBSUEMgY29kZSByZXNpZGVzLiBNeSBzcGVjaWZpYyBmb2N1cz8gSSYjMzk7bSBnb2luZyB0byBzY2FuIHRoYXQgZmlsZSBmb3IgdGhlIGBFWFBPUlRfU1lNQk9MYCBtYWNyby4gVGhhdCYjMzk7cyB0aGUgY3J1Y2lhbCBrZXl3b3JkLCB0aGUgc2lnbmFsIHRvIHRoZSBsaW5rZXIgdGhhdCB0aGVzZSBzeW1ib2xzIGFyZSBtZWFudCB0byBiZSBhdmFpbGFibGUgZXh0ZXJuYWxseS4gSWYgdGhleSYjMzk7cmUgbm90IHRoZXJlLCBJIGtub3cgSSYjMzk7dmUgZm91bmQgbXkgcHJvYmxlbSBhbmQgY2FuIGFkanVzdCBhcyByZXF1aXJlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTk6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zdW5ycGMvcnBjYl9jbG50LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3N1bnJwYy9ycGNiX2NsbnQuYz02Nzc9dm9pZCBycGNiX2dldHBvcnRfYXN5bmMoc3RydWN0IHJwY190YXNrICp0YXNrKVxuLS1cbm5ldC9zdW5ycGMvcnBjYl9jbG50LmMtNzk3LX1cbm5ldC9zdW5ycGMvcnBjYl9jbG50LmM6Nzk4OkVYUE9SVF9TWU1CT0xfR1BMKHJwY2JfZ2V0cG9ydF9hc3luYyk7XG5uZXQvc3VucnBjL3JwY2JfY2xudC5jLTc5OS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTk6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMyMjYKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA4NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgdGhlIFJQQyBCaW5kaW5ncyoqCgpPa2F5LCBzbyB0aGUgaW5pdGlhbCBmb2N1cyBpcyBvbiB0aGlzIGBycGNiX2dldHBvcnRfYXN5bmNgIGZ1bmN0aW9uIOKAkyB0aGF0JiMzOTtzIHRoZSBvbmx5IG9uZSBleHBsaWNpdGx5IGV4cG9ydGVkLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gQnV0IGhvbGQgb24sIEkmIzM5O20gc2VlaW5nIHRoYXQgYHN2Y19yZWdpc3RlcmAgYW5kIGBzdmNfZ2VuZXJpY19ycGNiaW5kX3NldGAgYXJlIGFsc28gYXZhaWxhYmxlLiBUaGF0JiMzOTtzIHVuZXhwZWN0ZWQuIFdhaXQgYSBzZWNvbmQuLi4gSSByZWNhbGwgYHJwY2JfcmVnaXN0ZXJgIGJlaW5nIHVzZWQgd2l0aGluIHRoZSBgc3VucnBjYCBtb2R1bGUgaXRzZWxmLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIGhvdyB0aGVzZSBwaWVjZXMgZml0IHRvZ2V0aGVyLiBNeSBuZXh0IHN0ZXAgaXMgZGVmaW5pdGVseSB0byBkaXZlIGludG8gYG5ldC9zdW5ycGMvc3ZjLmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYHN2Y19yZWdpc3RlcmAsIGBzdmNfZ2VuZXJpY19ycGNiaW5kX3NldGAsIGFuZCBgcnBjYl9yZWdpc3RlcmAuIEl0IHNlZW1zIGxpa2UgdGhvc2UgdGhyZWUgbWlnaHQgYmUgdXNlZCBzb21laG93IGluIGNvbmp1bmN0aW9uIHRvIHJlZ2lzdGVyLCBhbmQgc2V0IHRoZSBiaW5kaW5ncyBpbiBhIGdlbmVyaWMgbWFubmVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGdvaW5nIG9uIGJlaGluZCB0aGUgc2NlbmVzIHdpdGggdGhpcyBSUEMgYmluZGluZyBwcm9jZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxOToyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKnN2Y19yZWdpc3RlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zdW5ycGMvc3ZjLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxOToyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzU2MgoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipBIEtlcm5lbCBNb2R1bGUgRmxhZ2dlZCBmb3IgUmV2aWV3KioKCk9rYXksIGhvbGQgb24gYSBzZWNvbmQuLi4gSSYjMzk7bSByZXZpZXdpbmcgdGhpcyBjb2RlIGRpZmYgYW5kIHRoYXQgYEVYUE9SVF9TWU1CT0xfR1BMKHN2Y19nZW5lcmljX3JwY2JpbmRfc2V0KTtgIGNhdWdodCBteSBleWUgaW1tZWRpYXRlbHkuIE5vdywgdGhhdCYjMzk7cyBub3Qgc29tZXRoaW5nIHlvdSBzZWUganVzdCBhbnl3aGVyZS4gVGhlIGBFWFBPUlRfU1lNQk9MX0dQTGAgbWFjcm8gaXMgc3BlY2lmaWNhbGx5IGZvciBleHBvcnRpbmcgc3ltYm9scyB0aGF0IGFyZSBsaWNlbnNlZCB1bmRlciB0aGUgR1BMLCBtZWFuaW5nIHRoaXMgZnVuY3Rpb24sIGBzdmNfZ2VuZXJpY19ycGNiaW5kX3NldGAsIGlzIGxpa2VseSBpbnRlbmRlZCBmb3IgdXNlIGJ5IEdQTC1saWNlbnNlZCBrZXJuZWwgbW9kdWxlcy4gSXQmIzM5O3MgYSBrZXkgcGllY2Ugb2YgdGhlIFJQQyBiaW5kaW5nIGZ1bmN0aW9uYWxpdHksIG1ha2luZyBtZSB0aGluayBpdOKAmXMgcGFydCBvZiBhIGNvcmUgbmV0d29yayBzZXJ2aWNlLiBTbyB0aGlzIGNoYW5nZSBtdXN0IGJlIHJlbGF0ZWQgdG8gc29tZSBzaWduaWZpY2FudCBSUEMgdXBkYXRlLiBJIG5lZWQgdG8gZGlnIGludG8gaG93IHRoaXMgZnVuY3Rpb24gaXMgdXNlZCBhbmQgd2h5IGl0IG5lZWRzIHRvIGJlIG1hZGUgYXZhaWxhYmxlLiBJIGFsc28gbmVlZCB0byBtYWtlIHN1cmUgdGhlIGxpY2Vuc2luZyBpcyBhcHByb3ByaWF0ZSBhbmQgdGhhdCBpdHMgaW5jbHVzaW9uIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgY29tcGF0aWJpbGl0eSBpc3N1ZXMgd2l0aCBleGlzdGluZyBtb2R1bGVzLiBUaW1lIHRvIGRpdmUgZGVlcGVyIGFuZCBzZWUgd2hhdCB0aGUgd2hvbGUgY2hhbmdlIGlzIGFib3V0IQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxOToyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MLipzdmNfZ2VuZXJpY19ycGNiaW5kX3NldCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zdW5ycGMvc3ZjLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3N1bnJwYy9zdmMuYz0xMTgyPWludCBzdmNfZ2VuZXJpY19ycGNiaW5kX3NldChzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L3N1bnJwYy9zdmMuYy0xMjE0LX1cbm5ldC9zdW5ycGMvc3ZjLmM6MTIxNTpFWFBPUlRfU1lNQk9MX0dQTChzdmNfZ2VuZXJpY19ycGNiaW5kX3NldCk7XG5uZXQvc3VucnBjL3N2Yy5jLTEyMTYtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE5OjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzOTUwCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyBgRVhQT1JUX1NZTUJPTGAgaW4gYG5ldC9zdW5ycGMvc3ZjLmNgKioKCk9rYXksIEkmIzM5O20gdGhpbmtpbmcgSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHdoZXJlIGV4YWN0bHkgYEVYUE9SVF9TWU1CT0xgIGlzIHVzZWQgd2l0aGluIHRoZSBTdW5SUEMgc2VydmljZSBjb2RlLiBJIHNwZWNpZmljYWxseSB3YW50IHRvIHJldmlzaXQgYG5ldC9zdW5ycGMvc3ZjLmNgLiBJdCYjMzk7cyBhIGtleSBmaWxlLCBzbyBpdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gdW5kZXJzdGFuZCB0aGUgYnJvYWRlciBpbXBsaWNhdGlvbnMgYW5kIGNvbnRleHQuIEkgc3VzcGVjdCB0aGVyZSYjMzk7cyBhIHJlYXNvbiBJJiMzOTttIGZvY3VzaW5nIGhlcmUsIGFuZCBpdCYjMzk7cyBwcm9iYWJseSByZWxhdGVkIHRvIHN5bWJvbCB2aXNpYmlsaXR5IG9yIGV4dGVybmFsIG1vZHVsZSBpbnRlcmFjdGlvbnMuIEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhlIGtlcm5lbCYjMzk7cyBtb2R1bGUgbG9hZGluZyBtZWNoYW5pc20gYW5kIGhvdyBgRVhQT1JUX1NZTUJPTGAgcGxheXMgYSByb2xlIGluIG1ha2luZyBmdW5jdGlvbnMgb3IgdmFyaWFibGVzIGFjY2Vzc2libGUgb3V0c2lkZSB0aGUgbW9kdWxlIGluIHdoaWNoIHRoZXkmIzM5O3JlIGRlZmluZWQuIFRpbWUgdG8gZ28gZGlnZ2luZyB0aHJvdWdoIHRoZSBzb3VyY2UgY29kZSEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTk6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zdW5ycGMvc3ZjLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3N1bnJwYy9zdmMuYz0xMTQ9aW50IHN1bnJwY19zZXRfcG9vbF9tb2RlKGNvbnN0IGNoYXIgKnZhbClcbi0tXG5uZXQvc3VucnBjL3N2Yy5jLTExNy19XG5uZXQvc3VucnBjL3N2Yy5jOjExODpFWFBPUlRfU1lNQk9MKHN1bnJwY19zZXRfcG9vbF9tb2RlKTtcbm5ldC9zdW5ycGMvc3ZjLmMtMTE5LVxuLS1cbm5ldC9zdW5ycGMvc3ZjLmM9MTMwPXN1bnJwY19nZXRfcG9vbF9tb2RlKGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUpXG4tLVxubmV0L3N1bnJwYy9zdmMuYy0xNDctfVxubmV0L3N1bnJwYy9zdmMuYzoxNDg6RVhQT1JUX1NZTUJPTChzdW5ycGNfZ2V0X3Bvb2xfbW9kZSk7XG5uZXQvc3VucnBjL3N2Yy5jLTE0OS1cbi0tXG5uZXQvc3VucnBjL3N2Yy5jPTQ1OD1pbnQgc3ZjX2JpbmQoc3RydWN0IHN2Y19zZXJ2ICpzZXJ2LCBzdHJ1Y3QgbmV0ICpuZXQpXG4tLVxubmV0L3N1bnJwYy9zdmMuYy00NjMtfVxubmV0L3N1bnJwYy9zdmMuYzo0NjQ6RVhQT1JUX1NZTUJPTF9HUEwoc3ZjX2JpbmQpO1xubmV0L3N1bnJwYy9zdmMuYy00NjUtXG4tLVxubmV0L3N1bnJwYy9zdmMuYz01NTk9c3RydWN0IHN2Y19zZXJ2ICpzdmNfY3JlYXRlKHN0cnVjdCBzdmNfcHJvZ3JhbSAqcHJvZywgdW5zaWduZWQgaW50IGJ1ZnNpemUsXG4tLVxubmV0L3N1bnJwYy9zdmMuYy01NjMtfVxubmV0L3N1bnJwYy9zdmMuYzo1NjQ6RVhQT1JUX1NZTUJPTF9HUEwoc3ZjX2NyZWF0ZSk7XG5uZXQvc3VucnBjL3N2Yy5jLTU2NS1cbi0tXG5uZXQvc3VucnBjL3N2Yy5jPTU3Nj1zdHJ1Y3Qgc3ZjX3NlcnYgKnN2Y19jcmVhdGVfcG9vbGVkKHN0cnVjdCBzdmNfcHJvZ3JhbSAqcHJvZyxcbi0tXG5uZXQvc3VucnBjL3N2Yy5jLTU5My19XG5uZXQvc3VucnBjL3N2Yy5jOjU5NDpFWFBPUlRfU1lNQk9MX0dQTChzdmNfY3JlYXRlX3Bvb2xlZCk7XG5uZXQvc3VucnBjL3N2Yy5jLTU5NS1cbi0tXG5uZXQvc3VucnBjL3N2Yy5jPTYwMT1zdmNfZGVzdHJveShzdHJ1Y3Qgc3ZjX3NlcnYgKipzZXJ2cClcbi0tXG5uZXQvc3VucnBjL3N2Yy5jLTYzMy19XG5uZXQvc3VucnBjL3N2Yy5jOjYzNDpFWFBPUlRfU1lNQk9MX0dQTChzdmNfZGVzdHJveSk7XG5uZXQvc3VucnBjL3N2Yy5jLTYzNS1cbi0tXG5uZXQvc3VucnBjL3N2Yy5jPTc2MT12b2lkIHN2Y19wb29sX3dha2VfaWRsZV90aHJlYWQoc3RydWN0IHN2Y19wb29sICpwb29sKVxuLS1cbm5ldC9zdW5ycGMvc3ZjLmMtNzgzLX1cbm5ldC9zdW5ycGMvc3ZjLmM6Nzg0OkVYUE9SVF9TWU1CT0xfR1BMKHN2Y19wb29sX3dha2VfaWRsZV90aHJlYWQpO1xubmV0L3N1bnJwYy9zdmMuYy03ODUtXG4tLVxubmV0L3N1bnJwYy9zdmMuYz03OTY9aW50IHN2Y19uZXdfdGhyZWFkKHN0cnVjdCBzdmNfc2VydiAqc2Vydiwgc3RydWN0IHN2Y19wb29sICpwb29sKVxuLS1cbm5ldC9zdW5ycGMvc3ZjLmMtODI5LX1cbm5ldC9zdW5ycGMvc3ZjLmM6ODMwOkVYUE9SVF9TWU1CT0xfR1BMKHN2Y19uZXdfdGhyZWFkKTtcbm5ldC9zdW5ycGMvc3ZjLmMtODMxLVxuLS1cbm5ldC9zdW5ycGMvc3ZjLmM9ODc2PXN2Y19zZXRfcG9vbF90aHJlYWRzKHN0cnVjdCBzdmNfc2VydiAqc2Vydiwgc3RydWN0IHN2Y19wb29sICpwb29sLFxuLS1cbm5ldC9zdW5ycGMvc3ZjLmMtOTEyLX1cbm5ldC9zdW5ycGMvc3ZjLmM6OTEzOkVYUE9SVF9TWU1CT0xfR1BMKHN2Y19zZXRfcG9vbF90aHJlYWRzKTtcbm5ldC9zdW5ycGMvc3ZjLmMtOTE0LVxuLS1cbm5ldC9zdW5ycGMvc3ZjLmM9OTMzPXN2Y19zZXRfbnVtX3RocmVhZHMoc3RydWN0IHN2Y19zZXJ2ICpzZXJ2LCB1bnNpZ25lZCBpbnQgbWluX3RocmVhZHMsXG4tLVxubmV0L3N1bnJwYy9zdmMuYy05NTQtfVxubmV0L3N1bnJwYy9zdmMuYzo5NTU6RVhQT1JUX1NZTUJPTF9HUEwoc3ZjX3NldF9udW1fdGhyZWFkcyk7XG5uZXQvc3VucnBjL3N2Yy5jLTk1Ni1cbi0tXG5uZXQvc3VucnBjL3N2Yy5jPTk2OT1ib29sIHN2Y19ycXN0X3JlcGxhY2VfcGFnZShzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbi0tXG5uZXQvc3VucnBjL3N2Yy5jLTk4NS19XG5uZXQvc3VucnBjL3N2Yy5jOjk4NjpFWFBPUlRfU1lNQk9MX0dQTChzdmNfcnFzdF9yZXBsYWNlX3BhZ2UpO1xubmV0L3N1bnJwYy9zdmMuYy05ODctXG4tLVxubmV0L3N1bnJwYy9zdmMuYz0xMDI3PXN2Y19leGl0X3RocmVhZChzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwKVxuLS1cbm5ldC9zdW5ycGMvc3ZjLmMtMTA0MS19XG5uZXQvc3VucnBjL3N2Yy5jOjEwNDI6RVhQT1JUX1NZTUJPTF9HUEwoc3ZjX2V4aXRfdGhyZWFkKTtcbm5ldC9zdW5ycGMvc3ZjLmMtMTA0My1cbi0tXG5uZXQvc3VucnBjL3N2Yy5jPTExODI9aW50IHN2Y19nZW5lcmljX3JwY2JpbmRfc2V0KHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvc3VucnBjL3N2Yy5jLTEyMTQtfVxubmV0L3N1bnJwYy9zdmMuYzoxMjE1OkVYUE9SVF9TWU1CT0xfR1BMKHN2Y19nZW5lcmljX3JwY2JpbmRfc2V0KTtcbm5ldC9zdW5ycGMvc3ZjLmMtMTIxNi1cbi0tXG5uZXQvc3VucnBjL3N2Yy5jPTEzNDQ9c3ZjX2dlbmVyaWNfaW5pdF9yZXF1ZXN0KHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsXG4tLVxubmV0L3N1bnJwYy9zdmMuYy0xMzkxLX1cbm5ldC9zdW5ycGMvc3ZjLmM6MTM5MjpFWFBPUlRfU1lNQk9MX0dQTChzdmNfZ2VuZXJpY19pbml0X3JlcXVlc3QpO1xubmV0L3N1bnJwYy9zdmMuYy0xMzkzLVxuLS1cbm5ldC9zdW5ycGMvc3ZjLmM9MTc2MT11MzIgc3ZjX21heF9wYXlsb2FkKGNvbnN0IHN0cnVjdCBzdmNfcnFzdCAqcnFzdHApXG4tLVxubmV0L3N1bnJwYy9zdmMuYy0xNzY4LX1cbm5ldC9zdW5ycGMvc3ZjLmM6MTc2OTpFWFBPUlRfU1lNQk9MX0dQTChzdmNfbWF4X3BheWxvYWQpO1xubmV0L3N1bnJwYy9zdmMuYy0xNzcwLVxuLS1cbm5ldC9zdW5ycGMvc3ZjLmM9MTc5NT1pbnQgc3ZjX2VuY29kZV9yZXN1bHRfcGF5bG9hZChzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCB1bnNpZ25lZCBpbnQgb2Zmc2V0LFxuLS1cbm5ldC9zdW5ycGMvc3ZjLmMtMTgwMC19XG5uZXQvc3VucnBjL3N2Yy5jOjE4MDE6RVhQT1JUX1NZTUJPTF9HUEwoc3ZjX2VuY29kZV9yZXN1bHRfcGF5bG9hZCk7XG5uZXQvc3VucnBjL3N2Yy5jLTE4MDItXG4tLVxubmV0L3N1bnJwYy9zdmMuYz0xODE0PWNoYXIgKnN2Y19maWxsX3N5bWxpbmtfcGF0aG5hbWUoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgc3RydWN0IGt2ZWMgKmZpcnN0LFxuLS1cbm5ldC9zdW5ycGMvc3ZjLmMtMTg1MC19XG5uZXQvc3VucnBjL3N2Yy5jOjE4NTE6RVhQT1JUX1NZTUJPTF9HUEwoc3ZjX2ZpbGxfc3ltbGlua19wYXRobmFtZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE5OjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1Nzc5CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEZWJ1Z2dpbmcgYSBNaXNzaW5nIEV4cG9ydCoqCgpPa2F5LCBzbyBJJiMzOTttIGVuY291bnRlcmluZyBhIHByb2JsZW0g4oCTIGBzdmNfcmVnaXN0ZXJgIGlzbiYjMzk7dCBzaG93aW5nIHVwIGFzIGV4cG9ydGVkLiBUaGF0JiMzOTtzIGEgYml0IG9kZC4gTXkgZmlyc3QgaW5zdGluY3QsIGdpdmVuIGl0cyBsaWtlbHkgY29ubmVjdGlvbiB0byBuZXR3b3JrIHNlcnZpY2VzLCBpcyB0byBkb3VibGUtY2hlY2sgdGhlIGBuZXQvc3VucnBjYCBzdWJzeXN0ZW0uIFNwZWNpZmljYWxseSwgSSYjMzk7bGwgZHJpbGwgZG93biB0byBgbmV0L3N1bnJwYy9zdmMuY2AuIFRoYXQgZmlsZSBpcyB0aGUgbW9zdCBsb2dpY2FsIHBsYWNlIHRvIGJlZ2luIG15IGludmVzdGlnYXRpb24gZm9yIHRoZSBkZWZpbml0aW9uIGFuZCBleHBvcnQgb2YgYHN2Y19yZWdpc3RlcmAuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBhY3R1YWxseSBpbiB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTk6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3ZjX3JlZ2lzdGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3N1bnJwYy9zdmMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc3VucnBjL3N2Yy5jPTExMDI9c3RhdGljIGludCBfX3N2Y19ycGNiX3JlZ2lzdGVyNihzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHUzMiBwcm9ncmFtLFxuLS1cbm5ldC9zdW5ycGMvc3ZjLmMtMTE0NS0gKi9cbm5ldC9zdW5ycGMvc3ZjLmM6MTE0NjpzdGF0aWMgaW50IF9fc3ZjX3JlZ2lzdGVyKHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqcHJvZ25hbWUsXG5uZXQvc3VucnBjL3N2Yy5jLTExNDctXHRcdFx0ICBjb25zdCB1MzIgcHJvZ3JhbSwgY29uc3QgdTMyIHZlcnNpb24sXG4tLVxubmV0L3N1bnJwYy9zdmMuYy0xMTY1LVxubmV0L3N1bnJwYy9zdmMuYzoxMTY2Olx0dHJhY2Vfc3ZjX3JlZ2lzdGVyKHByb2duYW1lLCB2ZXJzaW9uLCBmYW1pbHksIHByb3RvY29sLCBwb3J0LCBlcnJvcik7XG5uZXQvc3VucnBjL3N2Yy5jLTExNjctXHRyZXR1cm4gZXJyb3I7XG4tLVxubmV0L3N1bnJwYy9zdmMuYz0xMTcxPWludCBzdmNfcnBjYmluZF9zZXRfdmVyc2lvbihzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L3N1bnJwYy9zdmMuYy0xMTc2LXtcbm5ldC9zdW5ycGMvc3ZjLmM6MTE3NzpcdHJldHVybiBfX3N2Y19yZWdpc3RlcihuZXQsIHByb2dwLVx1MDAzZXBnX25hbWUsIHByb2dwLVx1MDAzZXBnX3Byb2csXG5uZXQvc3VucnBjL3N2Yy5jLTExNzgtXHRcdFx0XHR2ZXJzaW9uLCBmYW1pbHksIHByb3RvLCBwb3J0KTtcbi0tXG5uZXQvc3VucnBjL3N2Yy5jPTEyMTU9RVhQT1JUX1NZTUJPTF9HUEwoc3ZjX2dlbmVyaWNfcnBjYmluZF9zZXQpO1xuLS1cbm5ldC9zdW5ycGMvc3ZjLmMtMTIxNy0vKipcbm5ldC9zdW5ycGMvc3ZjLmM6MTIxODogKiBzdmNfcmVnaXN0ZXIgLSByZWdpc3RlciBhbiBSUEMgc2VydmljZSB3aXRoIHRoZSBsb2NhbCBwb3J0bWFwcGVyXG5uZXQvc3VucnBjL3N2Yy5jLTEyMTktICogQHNlcnY6IHN2Y19zZXJ2IHN0cnVjdCBmb3IgdGhlIHNlcnZpY2UgdG8gcmVnaXN0ZXJcbi0tXG5uZXQvc3VucnBjL3N2Yy5jLTEyMjYtICovXG5uZXQvc3VucnBjL3N2Yy5jOjEyMjc6aW50IHN2Y19yZWdpc3Rlcihjb25zdCBzdHJ1Y3Qgc3ZjX3NlcnYgKnNlcnYsIHN0cnVjdCBuZXQgKm5ldCxcbm5ldC9zdW5ycGMvc3ZjLmMtMTIyOC1cdFx0IGNvbnN0IGludCBmYW1pbHksIGNvbnN0IHVuc2lnbmVkIHNob3J0IHByb3RvLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxOToyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjQ2NQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOgoKKipJbnZlc3RpZ2F0aW5nIGBzdmNfcmVnaXN0ZXJgIGluIGBuZXQvc3VucnBjL3N2Yy5jYCoqCgpPa2F5LCBJIG5lZWQgdG8gdmVyaWZ5IHNvbWV0aGluZyByZWxhdGVkIHRvIHRoZSBgc3ZjX3JlZ2lzdGVyYCBmdW5jdGlvbiwgbGlrZWx5IHdpdGhpbiB0aGUgY29udGV4dCBvZiBSUEMgc2VydmljZXMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBuYXZpZ2F0ZSB0byB0aGUgYG5ldC9zdW5ycGMvc3ZjLmNgIGZpbGUgd2l0aGluIHRoZSBrZXJuZWwgc291cmNlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgZnVuY3Rpb24gaXMgZXhwb3J0ZWQsIHdoaWNoIG1lYW5zIGl0JiMzOTtzIGludGVuZGVkIHRvIGJlIGFjY2Vzc2libGUgb3V0c2lkZSBvZiB0aGUgaW1tZWRpYXRlIG1vZHVsZSBvciBmaWxlLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBmdW5jdGlvbiBkZWZpbml0aW9uIGluIGBzdmMuY2AgdG8gY29uZmlybSBpdCYjMzk7cyBkZWNsYXJlZCB3aXRoIGBFWFBPUlRfU1lNQk9MYCBvciBhIHNpbWlsYXIgbWVjaGFuaXNtLCBtYWtpbmcgaXQgdmlzaWJsZSB0byBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsLiBUaGlzIGlzIGEgcHJlbGltaW5hcnkgY2hlY2sgYmVmb3JlIGludmVzdGlnYXRpbmcgZnVydGhlciwgZGVwZW5kaW5nIG9uIHRoZSBjb250ZXh0IG9mIHRoZSBpc3N1ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTk6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MLipzdmNfcmVnaXN0ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc3VucnBjL3N2Yy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTk6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY3MTMKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA3NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZSwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IGBzdmNfcmVnaXN0ZXJgIGlzIGJlaW5nIGhhbmRsZWQuIEhvbGQgb24gYSBzZWNvbmQsIEkgdGhvdWdodCBJIGhhZCBhbHJlYWR5IGdyZXBwZWQgZm9yIGBFWFBPUlRfU1lNQk9MYCBpbiBgbmV0L3N1bnJwYy9zdmMuY2Agc3BlY2lmaWNhbGx5LCBhbmQgaXQgZGlkbiYjMzk7dCB0dXJuIHVwIGFueSByZXN1bHRzLiBUaGF0JiMzOTtzIG9kZC4gU28sIGl0JiMzOTtzIGVpdGhlciBkZWZpbmVkIGFuZCBleHBvcnRlZCBzb21ld2hlcmUgKmVsc2UqIGluIHRoZSBwcm9qZWN0LCBvciBtYXliZSBpdCYjMzk7cyBub3QgYWN0dWFsbHkgZXhwb3J0ZWQgYXQgYWxsLiBUaW1lIHRvIHNoaWZ0IGdlYXJzLiBMZXQmIzM5O3Mgbm90IG1ha2UgYW55IGFzc3VtcHRpb25zLiBJJiMzOTtsbCB0YWtlIHRoZSBkaXJlY3QgYXBwcm9hY2guIEkmIzM5O2xsIGltbWVkaWF0ZWx5IGNoZWNrIGBpbmNsdWRlL2xpbnV4L3N1bnJwYy9zdmMuaGAgZm9yIHRoZSBkZWNsYXJhdGlvbiBvZiBgc3ZjX3JlZ2lzdGVyYC4gVGhhdCBoZWFkZXIgaXMgdGhlIG9idmlvdXMgcGxhY2UgdG8gZmluZCB0aGUgcHVibGljIGludGVyZmFjZSwgaWYgaXQgZXhpc3RzLCBzbyB0aGF0JiMzOTtzIHRoZSBwbGFjZSB0byBzdGFydC4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGluIHRoZXJlLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE5OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N2Y19yZWdpc3RlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvc3VucnBjL3N2Yy5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvc3VucnBjL3N2Yy5oPTQ3ND12b2lkXHRcdCAgIHN2Y19wcm9jZXNzX2JjKHN0cnVjdCBycGNfcnFzdCAqcmVxLCBzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwKTtcbmluY2x1ZGUvbGludXgvc3VucnBjL3N2Yy5oOjQ3NTppbnRcdFx0ICAgc3ZjX3JlZ2lzdGVyKGNvbnN0IHN0cnVjdCBzdmNfc2VydiAqLCBzdHJ1Y3QgbmV0ICosIGNvbnN0IGludCxcbmluY2x1ZGUvbGludXgvc3VucnBjL3N2Yy5oLTQ3Ni1cdFx0XHRcdGNvbnN0IHVuc2lnbmVkIHNob3J0LCBjb25zdCB1bnNpZ25lZCBzaG9ydCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE5OjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MTE1CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgUlBDIFJlZ2lzdHJhdGlvbiBpbiB0aGUgTGludXggS2VybmVsKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gUlBDIHJlZ2lzdHJhdGlvbiB3aXRoaW4gdGhlIGtlcm5lbC4gTXkgc3RhcnRpbmcgcG9pbnQgaXMgdGhlIGRlY2xhcmF0aW9uIG9mIHRoZSBmdW5jdGlvbiBJJiMzOTttIGludGVyZXN0ZWQgaW4sIHdoaWNoIGlzIGNsZWFybHkgZGVmaW5lZCBpbiBgaW5jbHVkZS9saW51eC9zdW5ycGMvc3ZjLmhgLiBUaGUgZmFjdCB0aGF0IGl0JiMzOTtzIGluIGEgaGVhZGVyIGZpbGUgaW1wbGllcyB0aGF0IHRoaXMgaXNuJiMzOTt0IGEgc3RhdGljIGZ1bmN0aW9uLCB3aGljaCBjaGFuZ2VzIGhvdyBJIGFwcHJvYWNoIHRoZSBhbmFseXNpcy4gTXkgaW5pdGlhbCBmb2N1cyB3aWxsIGJlIHRoZSByZWdpc3RyYXRpb24gZnVuY3Rpb25zIGFuZCB0aGVpciBhc3NvY2lhdGVkIGNhbGxzLgoKVGhlcmVmb3JlLCB0aGUga2V5IHN5bWJvbHMgSSBuZWVkIHRvIGV4YW1pbmUgYXJlIGBzdmNfcmVnaXN0ZXJgLCBgc3ZjX2dlbmVyaWNfcnBjYmluZF9zZXRgLCBgcnBjYl9yZWdpc3RlcmAsIGBycGNiX3Y0X3JlZ2lzdGVyYCBhbmQgYHJwY2JfY3JlYXRlX2xvY2FsYC4gVGhlIGZpcnN0IGZvdXIgc3VnZ2VzdCB0aGF0IHRoZXJlIGlzIGEgcmFuZ2Ugb2YgcmVnaXN0ZXIgY2FsbHMsIGFuZCB0aGUgZmluYWwgc3ltYm9sIG1pZ2h0IGJlIHRoZSBjcmVhdGlvbiBvZiBzb21ldGhpbmcgdXNlZCBsb2NhbGx5LiAKCk5vdywgSSYjMzk7bGwgcXVpY2tseSB2ZXJpZnkgdGhlIGxvY2F0aW9uIG9mIG9uZSBvZiB0aGVzZSBrZXkgZnVuY3Rpb25zIHRvIGFzc2VzcyBob3cgZmFyIEkmIzM5O3ZlIGNvbWUuIEkmIzM5O2xsIGNoZWNrIHdoZXRoZXIgYHJwY2JfcmVnaXN0ZXJgIGlzIGRlZmluZWQgd2l0aGluIHRoZSBgaW5jbHVkZS9saW51eC9zdW5ycGMvYCBkaXJlY3RvcnkuIFRoYXQmIzM5O2xsIGdpdmUgbWUgYSBjbGVhcmVyIHBpY3R1cmUgb2YgdGhlIGNvZGUmIzM5O3Mgc3RydWN0dXJlIGFuZCByZWxhdGlvbnNoaXBzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxOToyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtycGNiX3JlZ2lzdGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9zdW5ycGMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvc3VucnBjL2NsbnQuaD0yMDE9dm9pZFx0XHRycGNiX3B1dF9sb2NhbChzdHJ1Y3QgbmV0ICopO1xuaW5jbHVkZS9saW51eC9zdW5ycGMvY2xudC5oOjIwMjppbnRcdFx0cnBjYl9yZWdpc3RlcihzdHJ1Y3QgbmV0ICosIHUzMiwgdTMyLCBpbnQsIHVuc2lnbmVkIHNob3J0KTtcbmluY2x1ZGUvbGludXgvc3VucnBjL2NsbnQuaC0yMDMtaW50XHRcdHJwY2JfdjRfcmVnaXN0ZXIoc3RydWN0IG5ldCAqbmV0LCBjb25zdCB1MzIgcHJvZ3JhbSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTk6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc2MDkKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZS4uLiB0aGUgY29kZSBJJiMzOTttIGxvb2tpbmcgZm9yIGlzIGRlZmluaXRlbHkgaW4gYGluY2x1ZGUvbGludXgvc3VucnBjL2NsbnQuaGAuIFRoYXQgbWFrZXMgc2Vuc2U7IGNsaWVudC1zaWRlIFJQQyBzdHVmZiBpcyB1c3VhbGx5IG9yZ2FuaXplZCB0aGVyZS4gQW5kIHNpbmNlIHRoZXkgYXJlIG5vbi1zdGF0aWMgZnVuY3Rpb25zLCB0aGF0IHRlbGxzIG1lIHRoZXNlIGZ1bmN0aW9ucyBhcmUgbGlrZWx5IGludGVuZGVkIHRvIGJlIHVzZWQgZXh0ZXJuYWxseSwgYW5kIG5vdCBsaW1pdGVkIHRvIHRoYXQgc3BlY2lmaWMgc291cmNlIGZpbGUsIHdoaWNoIHdvdWxkIGJlIGltcG9ydGFudCBmb3IgbWUgdG8gdW5kZXJzdGFuZCBpbiBteSB3b3JrLiBOb3csIGxldCYjMzk7cyBjaGVjayBgcnBjYl9jcmVhdGVfbG9jYWxgIGluIHRoZSBzdW5ycGMgaW5jbHVkZSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhhdCBwaWVjZSBiZXR0ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE5OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JwY2JfY3JlYXRlX2xvY2FsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9zdW5ycGMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvc3VucnBjL2NsbnQuaD0xOTc9c3RydWN0IHJwY194cHJ0XHQqcnBjX3Rhc2tfZ2V0X3hwcnQoc3RydWN0IHJwY19jbG50ICpjbG50LFxuLS1cbmluY2x1ZGUvbGludXgvc3VucnBjL2NsbnQuaC0xOTktXG5pbmNsdWRlL2xpbnV4L3N1bnJwYy9jbG50Lmg6MjAwOmludFx0XHRycGNiX2NyZWF0ZV9sb2NhbChzdHJ1Y3QgbmV0ICopO1xuaW5jbHVkZS9saW51eC9zdW5ycGMvY2xudC5oLTIwMS12b2lkXHRcdHJwY2JfcHV0X2xvY2FsKHN0cnVjdCBuZXQgKik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE5OjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3OTQzCgkJCQkJCQlvdXRwdXQ6IDE1MwoJCQkJCQkJdGhvdWdodHM6IDQxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFJQQyBUaW1lb3V0IFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGNvbmZpcm1lZCB0aGUgcGF0Y2ggaXMgcHJlc2VudC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiB0aGUgcmVsZXZhbnQgc3ltYm9scyBhbmQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBGcm9tIHdoYXQgSSBzZWUsIHRoZSBwcmltYXJ5IGZvY3VzIGlzIG9uIHRoZXNlIHN5bWJvbHM6IGBzdmNfcmVnaXN0ZXJgLCBgc3ZjX2dlbmVyaWNfcnBjYmluZF9zZXRgLCBgcnBjYl9yZWdpc3RlcmAsIGBycGNiX3Y0X3JlZ2lzdGVyYCwgYW5kIGBycGNiX2NyZWF0ZV9sb2NhbGAuIFRob3NlIGFyZSB0aGUgZW50cnkgcG9pbnRzLCBzbyB0byBzcGVhay4KCk5vdywgcmVnYXJkaW5nIHRoZSBjb25maWcgb3B0aW9ucywgaXQgc2VlbXMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBgU1VOUlBDYCwgYE5GU19GU2AsIGFuZCBgTkZTRGAuIE15IGluc3RpbmN0IGlzIHRvIGRldGVybWluZSBpZiB3ZSBhYnNvbHV0ZWx5ICpuZWVkKiBib3RoIGBORlNfRlNgIGFuZCBgTkZTRGAsIG9yIGlmIGp1c3QgZW5hYmxpbmcgYFNVTlJQQ2Agd2lsbCBzdWZmaWNlIGZvciBjb21waWxpbmcgdGhlIG5lY2Vzc2FyeSBtb2R1bGVzLiBJIGtub3cgYFNVTlJQQ2AgYWxvbmUgaXMgZW5vdWdoIHRvIGJyaW5nIGluIHRoZSBgbmV0L3N1bnJwYy9gIGNvZGUuIEhvd2V2ZXIsIHRvICp0cmlnZ2VyKiB0aGUgbmV3IGZ1bmN0aW9uYWxpdHksIHdoaWNoIEkgdW5kZXJzdGFuZCBpcyBhIHRpbWVvdXQgZm9yIGxvY2FsIGBycGNiaW5kYCBjYWxscywgd2UmIzM5O2xsIHByb2JhYmx5IG5lZWQgZWl0aGVyIGBORlNfRlNgIG9yIGBORlNEYCB0byBhY3R1YWxseSBjcmVhdGUgdGhvc2UgUlBDIHNlcnZpY2VzLiBTbywganVzdCB0byBiZSBzdXJlLCBJIHdpbGwgaW5jbHVkZSBib3RoIGBORlNfRlNgIGFuZCBgTkZTRGAuCgpMZXQmIzM5O3MgZG8gYSBxdWljayBzd2VlcCBmb3IgYW55IG90aGVyIHJlbGV2YW50IGNvbmZpZyBvcHRpb25zLiBIbW0sIGBTVU5SUENfREVCVUdgIG1pZ2h0IGJlIGhlbHBmdWwgZm9yIGRlYnVnZ2luZyBsYXRlciwgYnV0IGl0JiMzOTtzIG5vdCBlc3NlbnRpYWwgZm9yIGp1c3QgdHJpZ2dlcmluZyB0aGUgZnVuY3Rpb25hbCBjaGFuZ2UgaXRzZWxmLgoKT2theSwgYmFjayB0byB0aGUgcGF0Y2guIEl0JiMzOTtzIGFkZGluZyBhIHRpbWVvdXQgdG8gdGhlIGxvY2FsIGBycGNiaW5kYCBjbGllbnQsIGFuZCBoYW5kbGluZyBgLUVUSU1FRE9VVGAgZXJyb3JzIGluIGBzdmNfcmVnaXN0ZXJgIGFuZCBgc3ZjX2dlbmVyaWNfcnBjYmluZF9zZXRgLiBUaGlzIGlzIGEgKmZ1bmN0aW9uYWwgY2hhbmdlKiB3aXRoaW4gdGhlIGBzdW5ycGNgIHN1YnN5c3RlbS4gQ3JpdGljYWxseSwgcmVnaXN0ZXJpbmcgYW4gUlBDIHNlcnZpY2Ugd2lsbCB0cmlnZ2VyIGl0LiBBbmQgdGhhdCYjMzk7cyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdGhyb3VnaCBORlMgb3Igb3RoZXIgUlBDIG1lY2hhbmlzbXMuIEkgYW0gY2VydGFpbiB0aGF0IHRoaXMgaXMgYSBwYXRjaCB3ZSB3aWxsIHdhbnQgdG8gdGVzdCBhZ2dyZXNzaXZlbHkgdXNpbmcgZnV6emluZy4KCk15IGFuYWx5c2lzIGFsaWducyB3aXRoIHRoZSBKU09OIG91dHB1dDogdGhlIHBhdGNoIGlzIGluZGVlZCB3b3J0aCBmdXp6aW5nLiBUaGUga2V5IHN5bWJvbHMsIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb25zLCBhbmQgdGhlIGNvcmUgcmVhc29uaW5nIGFyZSBhbGwgd2VsbC1kb2N1bWVudGVkIGFuZCBwcm92aWRlIGNvbmZpZGVuY2UgaW4gdGhpcyBhc3Nlc3NtZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxOToyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U1VOUlBDJiMzNDssCiAgICAmIzM0O05GU19GUyYjMzQ7LAogICAgJiMzNDtORlNEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c3ZjX3JlZ2lzdGVyJiMzNDssCiAgICAmIzM0O3N2Y19nZW5lcmljX3JwY2JpbmRfc2V0JiMzNDssCiAgICAmIzM0O3JwY2JfcmVnaXN0ZXImIzM0OywKICAgICYjMzQ7cnBjYl92NF9yZWdpc3RlciYjMzQ7LAogICAgJiMzNDtycGNiX2NyZWF0ZV9sb2NhbCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgdGltZW91dCBmb3IgbG9jYWwgcnBjYmluZCBjYWxscyBhbmQgaGFuZGxlcyAtRVRJTUVET1VUIGluIHN2Y19yZWdpc3RlciBhbmQgc3ZjX2dlbmVyaWNfcnBjYmluZF9zZXQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgc3VucnBjIHN1YnN5c3RlbSB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgYnkgcmVnaXN0ZXJpbmcgUlBDIHNlcnZpY2VzLCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIE5GUyBvciBvdGhlciBSUEMgbWVjaGFuaXNtcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U1VOUlBDJiMzNDssCiAgICAmIzM0O05GU19GUyYjMzQ7LAogICAgJiMzNDtORlNEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c3ZjX3JlZ2lzdGVyJiMzNDssCiAgICAmIzM0O3N2Y19nZW5lcmljX3JwY2JpbmRfc2V0JiMzNDssCiAgICAmIzM0O3JwY2JfcmVnaXN0ZXImIzM0OywKICAgICYjMzQ7cnBjYl92NF9yZWdpc3RlciYjMzQ7LAogICAgJiMzNDtycGNiX2NyZWF0ZV9sb2NhbCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgdGltZW91dCBmb3IgbG9jYWwgcnBjYmluZCBjYWxscyBhbmQgaGFuZGxlcyAtRVRJTUVET1VUIGluIHN2Y19yZWdpc3RlciBhbmQgc3ZjX2dlbmVyaWNfcnBjYmluZF9zZXQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgc3VucnBjIHN1YnN5c3RlbSB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgYnkgcmVnaXN0ZXJpbmcgUlBDIHNlcnZpY2VzLCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIE5GUyBvciBvdGhlciBSUEMgbWVjaGFuaXNtcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTk6Mjc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxOToyNzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aW1lb3V0IGhhbmRsaW5nIGZvciBsb2NhbCBSUEMgYmluZCBjYWxscyBpbiB0aGUgc3VucnBjIHN1YnN5c3RlbS4gSXQgaW50cm9kdWNlcyBhIHN0YXRpYyBjb25zdGFudCBgcnBjYl9sb2NhbF90aW1lb3V0YCBzdHJ1Y3R1cmUsIGFkZHMgdGltZW91dC1yZWxhdGVkIGZsYWdzIChgUlBDX1RBU0tfU09GVCB8IFJQQ19UQVNLX1RJTUVPVVRgKSB0byBgcnBjYl9yZWdpc3Rlcl9jYWxsYCwgYW5kIGFkZHMgbG9naWMgdG8gcHJvcGFnYXRlIGAtRVRJTUVET1VUYCBlcnJvcnMgaW4gYHN2Y19nZW5lcmljX3JwY2JpbmRfc2V0YCBhbmQgYHN2Y19yZWdpc3RlcmAuIFRoZXNlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBkbyBub3QgZXhwb3NlIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZSwgYW5kIGRvIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlIG9yIHJhY2UgY29uZGl0aW9ucyBkdWUgdG8gdGltZW91dHMpIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBvciBMT0NLREVQLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA1OWI2ODg0Y2Y1MTljMDQxMWEwMmQ3ZjZkOWEwOGYwZDdlODEwNjg4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBBdWcgNyAxOToyMzo1OSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvcnBjYl9jbG50LmMgYi9uZXQvc3VucnBjL3JwY2JfY2xudC5jCmluZGV4IDZhYTM3MjE4OGM4NmEuLjQwOTRmMzI1Nzg3NmQgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMvcnBjYl9jbG50LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3N1bnJwYy9ycGNiX2NsbnQuYwpAQCAtMjIxLDYgJiM0MzsyMjEsMTIgQEAgc3RhdGljIHZvaWQgcnBjYl9zZXRfbG9jYWwoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgcnBjX2NsbnQgKmNsbnQsCiAjIGRlZmluZSBTVU5fTEVOKHB0cikgKG9mZnNldG9mKHN0cnVjdCBzb2NrYWRkcl91biwgc3VuX3BhdGgpCQlcCiAJCSAgICAgICYjNDM7IDEgJiM0Mzsgc3RybGVuKChwdHIpLSZndDtzdW5fcGF0aCAmIzQzOyAxKSkKIAomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgcnBjX3RpbWVvdXQgcnBjYl9sb2NhbF90aW1lb3V0ID0gewomIzQzOwkudG9faW5pdHZhbCA9IChIWiAvIDEwKSA/IDogMSwKJiM0MzsJLnRvX21heHZhbCA9IChIWiAvIDEwKSA/IDogMSwKJiM0MzsJLnRvX3JldHJpZXMgPSAwLAomIzQzO307CiYjNDM7CiAvKgogICogUmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3MsIG90aGVyd2lzZSBhIG5lZ2F0aXZlIGVycm5vIHZhbHVlCiAgKiBpcyByZXR1cm5lZC4KQEAgLTIzOCw2ICYjNDM7MjQ0LDcgQEAgc3RhdGljIGludCBycGNiX2NyZWF0ZV9hZl9sb2NhbChzdHJ1Y3QgbmV0ICpuZXQsCiAJCS52ZXJzaW9uCT0gUlBDQlZFUlNfMiwKIAkJLmF1dGhmbGF2b3IJPSBSUENfQVVUSF9OVUxMLAogCQkuY3JlZAkJPSBjdXJyZW50X2NyZWQoKSwKJiM0MzsJCS50aW1lb3V0CT0gJmFtcDtycGNiX2xvY2FsX3RpbWVvdXQsCiAJCS8qCiAJCSAqIFdlIHR1cm4gb2ZmIHRoZSBpZGxlIHRpbWVvdXQgdG8gcHJldmVudCB0aGUga2VybmVsCiAJCSAqIGZyb20gYXV0b21hdGljYWxseSBkaXNjb25uZWN0aW5nIHRoZSBzb2NrZXQuCkBAIC0zMTIsNiAmIzQzOzMxOSw3IEBAIHN0YXRpYyBpbnQgcnBjYl9jcmVhdGVfbG9jYWxfbmV0KHN0cnVjdCBuZXQgKm5ldCkKIAkJLnZlcnNpb24JPSBSUENCVkVSU18yLAogCQkuYXV0aGZsYXZvcgk9IFJQQ19BVVRIX1VOSVgsCiAJCS5jcmVkCQk9IGN1cnJlbnRfY3JlZCgpLAomIzQzOwkJLnRpbWVvdXQJPSAmYW1wO3JwY2JfbG9jYWxfdGltZW91dCwKIAkJLmZsYWdzCQk9IFJQQ19DTE5UX0NSRUFURV9OT1BJTkcsCiAJfTsKIAlzdHJ1Y3QgcnBjX2NsbnQgKmNsbnQsICpjbG50NDsKQEAgLTQwMiwxMSAmIzQzOzQxMCwxMSBAQCBzdGF0aWMgc3RydWN0IHJwY19jbG50ICpycGNiX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKm5vZGVuYW1lLAogCiBzdGF0aWMgaW50IHJwY2JfcmVnaXN0ZXJfY2FsbChzdHJ1Y3Qgc3VucnBjX25ldCAqc24sIHN0cnVjdCBycGNfY2xudCAqY2xudCwgc3RydWN0IHJwY19tZXNzYWdlICptc2csIGJvb2wgaXNfc2V0KQogewotCWludCBmbGFncyA9IFJQQ19UQVNLX05PQ09OTkVDVDsKJiM0MzsJaW50IGZsYWdzID0gUlBDX1RBU0tfTk9DT05ORUNUIHwgUlBDX1RBU0tfU09GVCB8IFJQQ19UQVNLX1RJTUVPVVQ7CiAJaW50IGVycm9yLCByZXN1bHQgPSAwOwogCiAJaWYgKGlzX3NldCB8fCAhc24tJmd0O3JwY2JfaXNfYWZfbG9jYWwpCi0JCWZsYWdzID0gUlBDX1RBU0tfU09GVENPTk47CiYjNDM7CQlmbGFncyB8PSBSUENfVEFTS19TT0ZUQ09OTjsKIAltc2ctJmd0O3JwY19yZXNwID0gJmFtcDtyZXN1bHQ7CiAKIAllcnJvciA9IHJwY19jYWxsX3N5bmMoY2xudCwgbXNnLCBmbGFncyk7CmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL3N2Yy5jIGIvbmV0L3N1bnJwYy9zdmMuYwppbmRleCBhZTllYzRiZjM0ZjcyLi41MzlkZGQwNjQ2N2RmIDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL3N2Yy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zdW5ycGMvc3ZjLmMKQEAgLTEyMDcsNiAmIzQzOzEyMDcsOSBAQCBpbnQgc3ZjX2dlbmVyaWNfcnBjYmluZF9zZXQoc3RydWN0IG5ldCAqbmV0LAogCWVycm9yID0gc3ZjX3JwY2JpbmRfc2V0X3ZlcnNpb24obmV0LCBwcm9ncCwgdmVyc2lvbiwKIAkJCQkJZmFtaWx5LCBwcm90bywgcG9ydCk7CiAKJiM0MzsJaWYgKGVycm9yID09IC1FVElNRURPVVQpCiYjNDM7CQlyZXR1cm4gZXJyb3I7CiYjNDM7CiAJcmV0dXJuICh2ZXJzLSZndDt2c19ycGNiX29wdG5sKSA/IDAgOiBlcnJvcjsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHN2Y19nZW5lcmljX3JwY2JpbmRfc2V0KTsKQEAgLTEyNDMsNiAmIzQzOzEyNDYsOCBAQCBpbnQgc3ZjX3JlZ2lzdGVyKGNvbnN0IHN0cnVjdCBzdmNfc2VydiAqc2Vydiwgc3RydWN0IG5ldCAqbmV0LAogCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgJiMzNDtzdmM6IGZhaWxlZCB0byByZWdpc3RlciAmIzM0OwogCQkJCQkmIzM0OyVzdiV1IFJQQyBzZXJ2aWNlIChlcnJubyAlZCkuXG4mIzM0OywKIAkJCQkJcHJvZ3AtJmd0O3BnX25hbWUsIGksIC1lcnJvcik7CiYjNDM7CQkJCWlmIChlcnJvciA9PSAtRVRJTUVET1VUKQomIzQzOwkJCQkJcmV0dXJuIGVycm9yOwogCQkJCWJyZWFrOwogCQkJfQogCQl9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxOToyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODM5CgkJCQkJCQlvdXRwdXQ6IDE5MwoJCQkJCQkJdGhvdWdodHM6IDcyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBTdW5SUEMgVGltZW91dCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBqdXN0IHJldmlld2VkIHRoaXMgcGF0Y2guIEl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIHRpZ2h0ZW5pbmcgdXAgdGltZW91dCBoYW5kbGluZyB3aXRoaW4gdGhlIFN1blJQQyBzdWJzeXN0ZW0sIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiB0aGUgYHJwY2JgIGNsaWVudCBhbmQgc2VydmVyIGNvbXBvbmVudHMuIFRoZSBjaGFuZ2VzIGFyZSBjb25jZW50cmF0ZWQgaW4gYG5ldC9zdW5ycGMvcnBjYl9jbG50LmNgIGFuZCBgbmV0L3N1bnJwYy9zdmMuY2AuCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGlzIGlzIGEgcmVsYXRpdmVseSBzdHJhaWdodGZvcndhcmQgbW9kaWZpY2F0aW9uLiBXZSYjMzk7cmUgaW50cm9kdWNpbmcgYSBgcnBjYl9sb2NhbF90aW1lb3V0YCBzdHJ1Y3R1cmUgYW5kIHVzaW5nIGl0IHRvIGNvbmZpZ3VyZSB0aW1lb3V0cyB3aGVuIGNyZWF0aW5nIGxvY2FsIFJQQyBiaW5kIGNvbm5lY3Rpb25zLiBUaGUgYHJwY2JfbG9jYWxfdGltZW91dGAgaXRzZWxmIGFwcGVhcnMgdG8gYmUgYSBmdWxseSBpbml0aWFsaXplZCwgYHN0YXRpYyBjb25zdGAgc3RydWN0dXJlLCBzbyB0aGF0JiMzOTtzIGdvb2Qg4oCTIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdGhlcmUuIEkmIzM5O2xsIGRvdWJsZS1jaGVjayBpdC4gWWVwLCBpdCYjMzk7cyBkZWZpbmVkIGFuZCBpbml0aWFsaXplZCBhcyBleHBlY3RlZC4KClRoZSBjb3JlIG9mIHRoZSBwYXRjaCBzZWVtcyB0byByZXZvbHZlIGFyb3VuZCBzZXR0aW5nIGFuZCBwcm9wYWdhdGluZyB0aW1lb3V0IGZsYWdzLiBTcGVjaWZpY2FsbHksIGBycGNiX3JlZ2lzdGVyX2NhbGxgIGlzIGJlaW5nIHVwZGF0ZWQgdG8gaW5jbHVkZSBgUlBDX1RBU0tfU09GVCB8IFJQQ19UQVNLX1RJTUVPVVRgIGluIHRoZSBmbGFncy4gVGhpcyBpcyB0aGVuIGNvbWJpbmVkIHdpdGggb3RoZXIgZmxhZ3Mgc3VjaCBhcyBgUlBDX1RBU0tfU09GVENPTk5gIGlmIGFwcHJvcHJpYXRlLCBzbyB0aGF0IHNlZW1zIHNlbnNpYmxlLgoKT24gdGhlIHNlcnZlciBzaWRlLCBgc3ZjX2dlbmVyaWNfcnBjYmluZF9zZXRgIGFuZCBgc3ZjX3JlZ2lzdGVyYCBhcmUgbW9kaWZpZWQgdG8gZXhwbGljaXRseSByZXR1cm4gYC1FVElNRURPVVRgIGlmIHRoYXQgZXJyb3IgY29kZSBpcyBlbmNvdW50ZXJlZC4gVGhpcyBtYWtlcyBpdCBhIGJpdCBtb3JlIGV4cGxpY2l0LCBhbGxvd2luZyB0aGUgdXBwZXIgbGF5ZXJzIHRvIGNvcnJlY3RseSBoYW5kbGUgdGhlIHRpbWVvdXQuCgpJJiMzOTt2ZSBjYXJlZnVsbHkgY29uc2lkZXJlZCB0aGUgcG90ZW50aWFsIHNlY3VyaXR5IGltcGxpY2F0aW9ucywgYW5kIEkgZG9uJiMzOTt0IHNlZSBhbnkgaW1tZWRpYXRlIHJlZCBmbGFncy4gVGhlcmUmIzM5O3Mgbm8gaW50cm9kdWN0aW9uIG9mIG5ldywgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIG5vIGV4cG9zdXJlIG9mIGludGVybmFsIGRhdGEgc3RydWN0dXJlcyB0byB1c2VyIHNwYWNlLCBhbmQgbm8gY29tcGxleCBkYXRhIGFsbG9jYXRpb24gcGF0dGVybnMgdGhhdCBjb3VsZCBsZWFkIHRvIG1lbW9yeSBjb3JydXB0aW9uIHZ1bG5lcmFiaWxpdGllcy4gVGhpcyBpcyBpbXBvcnRhbnQgdG8gbm90ZSBzaW5jZSBteSBnb2FsIGlzIHRvIGVuc3VyZSB0aGlzIHBhdGNoIGlzIGFzIHNlY3VyZSBhcyBwb3NzaWJsZS4KClRoZSB0aW1lb3V0IGlzIGZ1bGx5IGluaXRpYWxpemVkIGFuZCBzaG91bGQgd29yayB3ZWxsIGluIHRoZSBSUEMgY29udGV4dC4gVGhlIGVycm9yIGNvZGUgb2YgdGhlIGBzdmNfZ2VuZXJpY19ycGNiaW5kX3NldGAgYW5kIGBzdmNfcmVnaXN0ZXJgIHdlcmUgY29ycmVjdGx5IGhhbmRsZWQgYW5kIHBhc3NlZCBmdXJ0aGVyIHVwIHRoZSBjaGFpbi4KCkNvbnNpZGVyaW5nIHRoZSBuYXR1cmUgb2YgdGhlIGNoYW5nZXMsIEkmIzM5O20gY29uZmlkZW50IHRoYXQgS0FTQU4gYW5kIG90aGVyIHN0YW5kYXJkIGtlcm5lbCBidWcgZGV0ZWN0b3JzIChsaWtlIEtNU0FOKSB3aWxsIGJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHN1YnRsZSBpc3N1ZXMsIHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucyB0aGF0IG1pZ2h0IGFyaXNlIGZyb20gYnVnZ3kgdGltZW91dCBoYW5kbGluZy4gQmFzZWQgb24gdGhpcyBhbmFseXNpcywgSSYjMzk7bSBjb21mb3J0YWJsZSBzZXR0aW5nIGBOZWVkc0tNU0FOPWZhbHNlYCBmb3IgdGhpcyBwYXRjaC4gSSBkb24mIzM5O3QgYmVsaWV2ZSBhbnkgS01TQU4tc3BlY2lmaWMgY2hlY2tzIGFyZSByZXF1aXJlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTk6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGltZW91dCBoYW5kbGluZyBmb3IgbG9jYWwgUlBDIGJpbmQgY2FsbHMgaW4gdGhlIHN1bnJwYyBzdWJzeXN0ZW0uIEl0IGludHJvZHVjZXMgYSBzdGF0aWMgY29uc3RhbnQgYHJwY2JfbG9jYWxfdGltZW91dGAgc3RydWN0dXJlLCBhZGRzIHRpbWVvdXQtcmVsYXRlZCBmbGFncyAoYFJQQ19UQVNLX1NPRlQgfCBSUENfVEFTS19USU1FT1VUYCkgdG8gYHJwY2JfcmVnaXN0ZXJfY2FsbGAsIGFuZCBhZGRzIGxvZ2ljIHRvIHByb3BhZ2F0ZSBgLUVUSU1FRE9VVGAgZXJyb3JzIGluIGBzdmNfZ2VuZXJpY19ycGNiaW5kX3NldGAgYW5kIGBzdmNfcmVnaXN0ZXJgLiBUaGVzZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgZG8gbm90IGV4cG9zZSBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UsIGFuZCBkbyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyAoc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSBvciByYWNlIGNvbmRpdGlvbnMgZHVlIHRvIHRpbWVvdXRzKSB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gb3IgTE9DS0RFUC4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRpbWVvdXQgaGFuZGxpbmcgZm9yIGxvY2FsIFJQQyBiaW5kIGNhbGxzIGluIHRoZSBzdW5ycGMgc3Vic3lzdGVtLiBJdCBpbnRyb2R1Y2VzIGEgc3RhdGljIGNvbnN0YW50IGBycGNiX2xvY2FsX3RpbWVvdXRgIHN0cnVjdHVyZSwgYWRkcyB0aW1lb3V0LXJlbGF0ZWQgZmxhZ3MgKGBSUENfVEFTS19TT0ZUIHwgUlBDX1RBU0tfVElNRU9VVGApIHRvIGBycGNiX3JlZ2lzdGVyX2NhbGxgLCBhbmQgYWRkcyBsb2dpYyB0byBwcm9wYWdhdGUgYC1FVElNRURPVVRgIGVycm9ycyBpbiBgc3ZjX2dlbmVyaWNfcnBjYmluZF9zZXRgIGFuZCBgc3ZjX3JlZ2lzdGVyYC4gVGhlc2UgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIGRvIG5vdCBleHBvc2Uga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLCBhbmQgZG8gbm90IGludm9sdmUgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUgb3IgcmFjZSBjb25kaXRpb25zIGR1ZSB0byB0aW1lb3V0cykgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIG9yIExPQ0tERVAuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE5OjI0OjAxLjYwMTY1NDUzOVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MzI0NzU4MTUxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTVU5SUENcIixcbiAgICBcIk5GU19GU1wiLFxuICAgIFwiTkZTRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInN2Y19yZWdpc3RlclwiLFxuICAgIFwic3ZjX2dlbmVyaWNfcnBjYmluZF9zZXRcIixcbiAgICBcInJwY2JfcmVnaXN0ZXJcIixcbiAgICBcInJwY2JfdjRfcmVnaXN0ZXJcIixcbiAgICBcInJwY2JfY3JlYXRlX2xvY2FsXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aW1lb3V0IGhhbmRsaW5nIGZvciBsb2NhbCBSUEMgYmluZCBjYWxscyBpbiB0aGUgc3VucnBjIHN1YnN5c3RlbS4gSXQgaW50cm9kdWNlcyBhIHN0YXRpYyBjb25zdGFudCBgcnBjYl9sb2NhbF90aW1lb3V0YCBzdHJ1Y3R1cmUsIGFkZHMgdGltZW91dC1yZWxhdGVkIGZsYWdzIChgUlBDX1RBU0tfU09GVCB8IFJQQ19UQVNLX1RJTUVPVVRgKSB0byBgcnBjYl9yZWdpc3Rlcl9jYWxsYCwgYW5kIGFkZHMgbG9naWMgdG8gcHJvcGFnYXRlIGAtRVRJTUVET1VUYCBlcnJvcnMgaW4gYHN2Y19nZW5lcmljX3JwY2JpbmRfc2V0YCBhbmQgYHN2Y19yZWdpc3RlcmAuIFRoZXNlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBkbyBub3QgZXhwb3NlIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZSwgYW5kIGRvIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlIG9yIHJhY2UgY29uZGl0aW9ucyBkdWUgdG8gdGltZW91dHMpIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBvciBMT0NLREVQLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSB0aW1lb3V0IGZvciBsb2NhbCBycGNiaW5kIGNhbGxzIGFuZCBoYW5kbGVzIC1FVElNRURPVVQgaW4gc3ZjX3JlZ2lzdGVyIGFuZCBzdmNfZ2VuZXJpY19ycGNiaW5kX3NldC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBzdW5ycGMgc3Vic3lzdGVtIHRoYXQgY2FuIGJlIHRyaWdnZXJlZCBieSByZWdpc3RlcmluZyBSUEMgc2VydmljZXMsIHdoaWNoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgTkZTIG9yIG90aGVyIFJQQyBtZWNoYW5pc21zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxOToyNDowMS42MDE2NjIzNzlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMzY4NzAzMDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA1OWI2ODg0Y2Y1MTljMDQxMWEwMmQ3ZjZkOWEwOGYwZDdlODEwNjg4XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgQXVnIDcgMTk6MjM6NTkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9ycGNiX2NsbnQuYyBiL25ldC9zdW5ycGMvcnBjYl9jbG50LmNcXG5pbmRleCA2YWEzNzIxODhjODZhLi40MDk0ZjMyNTc4NzZkIDEwMDY0NFxcbi0tLSBhL25ldC9zdW5ycGMvcnBjYl9jbG50LmNcXG4rKysgYi9uZXQvc3VucnBjL3JwY2JfY2xudC5jXFxuQEAgLTIyMSw2ICsyMjEsMTIgQEAgc3RhdGljIHZvaWQgcnBjYl9zZXRfbG9jYWwoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgcnBjX2NsbnQgKmNsbnQsXFxuICMgZGVmaW5lIFNVTl9MRU4ocHRyKSAob2Zmc2V0b2Yoc3RydWN0IHNvY2thZGRyX3VuLCBzdW5fcGF0aClcXHRcXHRcXFxcXFxuIFxcdFxcdCAgICAgICsgMSArIHN0cmxlbigocHRyKS1cXHUwMDNlc3VuX3BhdGggKyAxKSlcXG4gXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcnBjX3RpbWVvdXQgcnBjYl9sb2NhbF90aW1lb3V0ID0ge1xcbitcXHQudG9faW5pdHZhbCA9IChIWiAvIDEwKSA/IDogMSxcXG4rXFx0LnRvX21heHZhbCA9IChIWiAvIDEwKSA/IDogMSxcXG4rXFx0LnRvX3JldHJpZXMgPSAwLFxcbit9O1xcbitcXG4gLypcXG4gICogUmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3MsIG90aGVyd2lzZSBhIG5lZ2F0aXZlIGVycm5vIHZhbHVlXFxuICAqIGlzIHJldHVybmVkLlxcbkBAIC0yMzgsNiArMjQ0LDcgQEAgc3RhdGljIGludCBycGNiX2NyZWF0ZV9hZl9sb2NhbChzdHJ1Y3QgbmV0ICpuZXQsXFxuIFxcdFxcdC52ZXJzaW9uXFx0PSBSUENCVkVSU18yLFxcbiBcXHRcXHQuYXV0aGZsYXZvclxcdD0gUlBDX0FVVEhfTlVMTCxcXG4gXFx0XFx0LmNyZWRcXHRcXHQ9IGN1cnJlbnRfY3JlZCgpLFxcbitcXHRcXHQudGltZW91dFxcdD0gXFx1MDAyNnJwY2JfbG9jYWxfdGltZW91dCxcXG4gXFx0XFx0LypcXG4gXFx0XFx0ICogV2UgdHVybiBvZmYgdGhlIGlkbGUgdGltZW91dCB0byBwcmV2ZW50IHRoZSBrZXJuZWxcXG4gXFx0XFx0ICogZnJvbSBhdXRvbWF0aWNhbGx5IGRpc2Nvbm5lY3RpbmcgdGhlIHNvY2tldC5cXG5AQCAtMzEyLDYgKzMxOSw3IEBAIHN0YXRpYyBpbnQgcnBjYl9jcmVhdGVfbG9jYWxfbmV0KHN0cnVjdCBuZXQgKm5ldClcXG4gXFx0XFx0LnZlcnNpb25cXHQ9IFJQQ0JWRVJTXzIsXFxuIFxcdFxcdC5hdXRoZmxhdm9yXFx0PSBSUENfQVVUSF9VTklYLFxcbiBcXHRcXHQuY3JlZFxcdFxcdD0gY3VycmVudF9jcmVkKCksXFxuK1xcdFxcdC50aW1lb3V0XFx0PSBcXHUwMDI2cnBjYl9sb2NhbF90aW1lb3V0LFxcbiBcXHRcXHQuZmxhZ3NcXHRcXHQ9IFJQQ19DTE5UX0NSRUFURV9OT1BJTkcsXFxuIFxcdH07XFxuIFxcdHN0cnVjdCBycGNfY2xudCAqY2xudCwgKmNsbnQ0O1xcbkBAIC00MDIsMTEgKzQxMCwxMSBAQCBzdGF0aWMgc3RydWN0IHJwY19jbG50ICpycGNiX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKm5vZGVuYW1lLFxcbiBcXG4gc3RhdGljIGludCBycGNiX3JlZ2lzdGVyX2NhbGwoc3RydWN0IHN1bnJwY19uZXQgKnNuLCBzdHJ1Y3QgcnBjX2NsbnQgKmNsbnQsIHN0cnVjdCBycGNfbWVzc2FnZSAqbXNnLCBib29sIGlzX3NldClcXG4ge1xcbi1cXHRpbnQgZmxhZ3MgPSBSUENfVEFTS19OT0NPTk5FQ1Q7XFxuK1xcdGludCBmbGFncyA9IFJQQ19UQVNLX05PQ09OTkVDVCB8IFJQQ19UQVNLX1NPRlQgfCBSUENfVEFTS19USU1FT1VUO1xcbiBcXHRpbnQgZXJyb3IsIHJlc3VsdCA9IDA7XFxuIFxcbiBcXHRpZiAoaXNfc2V0IHx8ICFzbi1cXHUwMDNlcnBjYl9pc19hZl9sb2NhbClcXG4tXFx0XFx0ZmxhZ3MgPSBSUENfVEFTS19TT0ZUQ09OTjtcXG4rXFx0XFx0ZmxhZ3MgfD0gUlBDX1RBU0tfU09GVENPTk47XFxuIFxcdG1zZy1cXHUwMDNlcnBjX3Jlc3AgPSBcXHUwMDI2cmVzdWx0O1xcbiBcXG4gXFx0ZXJyb3IgPSBycGNfY2FsbF9zeW5jKGNsbnQsIG1zZywgZmxhZ3MpO1xcbmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL3N2Yy5jIGIvbmV0L3N1bnJwYy9zdmMuY1xcbmluZGV4IGFlOWVjNGJmMzRmNzIuLjUzOWRkZDA2NDY3ZGYgMTAwNjQ0XFxuLS0tIGEvbmV0L3N1bnJwYy9zdmMuY1xcbisrKyBiL25ldC9zdW5ycGMvc3ZjLmNcXG5AQCAtMTIwNyw2ICsxMjA3LDkgQEAgaW50IHN2Y19nZW5lcmljX3JwY2JpbmRfc2V0KHN0cnVjdCBuZXQgKm5ldCxcXG4gXFx0ZXJyb3IgPSBzdmNfcnBjYmluZF9zZXRfdmVyc2lvbihuZXQsIHByb2dwLCB2ZXJzaW9uLFxcbiBcXHRcXHRcXHRcXHRcXHRmYW1pbHksIHByb3RvLCBwb3J0KTtcXG4gXFxuK1xcdGlmIChlcnJvciA9PSAtRVRJTUVET1VUKVxcbitcXHRcXHRyZXR1cm4gZXJyb3I7XFxuK1xcbiBcXHRyZXR1cm4gKHZlcnMtXFx1MDAzZXZzX3JwY2Jfb3B0bmwpID8gMCA6IGVycm9yO1xcbiB9XFxuIEVYUE9SVF9TWU1CT0xfR1BMKHN2Y19nZW5lcmljX3JwY2JpbmRfc2V0KTtcXG5AQCAtMTI0Myw2ICsxMjQ2LDggQEAgaW50IHN2Y19yZWdpc3Rlcihjb25zdCBzdHJ1Y3Qgc3ZjX3NlcnYgKnNlcnYsIHN0cnVjdCBuZXQgKm5ldCxcXG4gXFx0XFx0XFx0XFx0cHJpbnRrKEtFUk5fV0FSTklORyBcXFwic3ZjOiBmYWlsZWQgdG8gcmVnaXN0ZXIgXFxcIlxcbiBcXHRcXHRcXHRcXHRcXHRcXFwiJXN2JXUgUlBDIHNlcnZpY2UgKGVycm5vICVkKS5cXFxcblxcXCIsXFxuIFxcdFxcdFxcdFxcdFxcdHByb2dwLVxcdTAwM2VwZ19uYW1lLCBpLCAtZXJyb3IpO1xcbitcXHRcXHRcXHRcXHRpZiAoZXJyb3IgPT0gLUVUSU1FRE9VVClcXG4rXFx0XFx0XFx0XFx0XFx0cmV0dXJuIGVycm9yO1xcbiBcXHRcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0XFx0fVxcbiBcXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE5OjI0OjAyLjgzOTYyMTMwMVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjE4MDcyNDA5NTQ1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTVU5SUENcIixcbiAgICBcIk5GU19GU1wiLFxuICAgIFwiTkZTRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInN2Y19yZWdpc3RlclwiLFxuICAgIFwic3ZjX2dlbmVyaWNfcnBjYmluZF9zZXRcIixcbiAgICBcInJwY2JfcmVnaXN0ZXJcIixcbiAgICBcInJwY2JfdjRfcmVnaXN0ZXJcIixcbiAgICBcInJwY2JfY3JlYXRlX2xvY2FsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIHRpbWVvdXQgZm9yIGxvY2FsIHJwY2JpbmQgY2FsbHMgYW5kIGhhbmRsZXMgLUVUSU1FRE9VVCBpbiBzdmNfcmVnaXN0ZXIgYW5kIHN2Y19nZW5lcmljX3JwY2JpbmRfc2V0LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIHN1bnJwYyBzdWJzeXN0ZW0gdGhhdCBjYW4gYmUgdHJpZ2dlcmVkIGJ5IHJlZ2lzdGVyaW5nIFJQQyBzZXJ2aWNlcywgd2hpY2ggaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBORlMgb3Igb3RoZXIgUlBDIG1lY2hhbmlzbXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDU5YjY4ODRjZjUxOWMwNDExYTAyZDdmNmQ5YTA4ZjBkN2U4MTA2ODhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyA3IDE5OjIzOjU5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9ycGNiX2NsbnQuYyBiL25ldC9zdW5ycGMvcnBjYl9jbG50LmNcbmluZGV4IDZhYTM3MjE4OGM4NmEuLjQwOTRmMzI1Nzg3NmQgMTAwNjQ0XG4tLS0gYS9uZXQvc3VucnBjL3JwY2JfY2xudC5jXG4rKysgYi9uZXQvc3VucnBjL3JwY2JfY2xudC5jXG5AQCAtMjIxLDYgKzIyMSwxMiBAQCBzdGF0aWMgdm9pZCBycGNiX3NldF9sb2NhbChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBycGNfY2xudCAqY2xudCxcbiAjIGRlZmluZSBTVU5fTEVOKHB0cikgKG9mZnNldG9mKHN0cnVjdCBzb2NrYWRkcl91biwgc3VuX3BhdGgpXHRcdFxcXG4gXHRcdCAgICAgICsgMSArIHN0cmxlbigocHRyKS1cdTAwM2VzdW5fcGF0aCArIDEpKVxuIFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcnBjX3RpbWVvdXQgcnBjYl9sb2NhbF90aW1lb3V0ID0ge1xuK1x0LnRvX2luaXR2YWwgPSAoSFogLyAxMCkgPyA6IDEsXG4rXHQudG9fbWF4dmFsID0gKEhaIC8gMTApID8gOiAxLFxuK1x0LnRvX3JldHJpZXMgPSAwLFxuK307XG4rXG4gLypcbiAgKiBSZXR1cm5zIHplcm8gb24gc3VjY2Vzcywgb3RoZXJ3aXNlIGEgbmVnYXRpdmUgZXJybm8gdmFsdWVcbiAgKiBpcyByZXR1cm5lZC5cbkBAIC0yMzgsNiArMjQ0LDcgQEAgc3RhdGljIGludCBycGNiX2NyZWF0ZV9hZl9sb2NhbChzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRcdC52ZXJzaW9uXHQ9IFJQQ0JWRVJTXzIsXG4gXHRcdC5hdXRoZmxhdm9yXHQ9IFJQQ19BVVRIX05VTEwsXG4gXHRcdC5jcmVkXHRcdD0gY3VycmVudF9jcmVkKCksXG4rXHRcdC50aW1lb3V0XHQ9IFx1MDAyNnJwY2JfbG9jYWxfdGltZW91dCxcbiBcdFx0LypcbiBcdFx0ICogV2UgdHVybiBvZmYgdGhlIGlkbGUgdGltZW91dCB0byBwcmV2ZW50IHRoZSBrZXJuZWxcbiBcdFx0ICogZnJvbSBhdXRvbWF0aWNhbGx5IGRpc2Nvbm5lY3RpbmcgdGhlIHNvY2tldC5cbkBAIC0zMTIsNiArMzE5LDcgQEAgc3RhdGljIGludCBycGNiX2NyZWF0ZV9sb2NhbF9uZXQoc3RydWN0IG5ldCAqbmV0KVxuIFx0XHQudmVyc2lvblx0PSBSUENCVkVSU18yLFxuIFx0XHQuYXV0aGZsYXZvclx0PSBSUENfQVVUSF9VTklYLFxuIFx0XHQuY3JlZFx0XHQ9IGN1cnJlbnRfY3JlZCgpLFxuK1x0XHQudGltZW91dFx0PSBcdTAwMjZycGNiX2xvY2FsX3RpbWVvdXQsXG4gXHRcdC5mbGFnc1x0XHQ9IFJQQ19DTE5UX0NSRUFURV9OT1BJTkcsXG4gXHR9O1xuIFx0c3RydWN0IHJwY19jbG50ICpjbG50LCAqY2xudDQ7XG5AQCAtNDAyLDExICs0MTAsMTEgQEAgc3RhdGljIHN0cnVjdCBycGNfY2xudCAqcnBjYl9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpub2RlbmFtZSxcbiBcbiBzdGF0aWMgaW50IHJwY2JfcmVnaXN0ZXJfY2FsbChzdHJ1Y3Qgc3VucnBjX25ldCAqc24sIHN0cnVjdCBycGNfY2xudCAqY2xudCwgc3RydWN0IHJwY19tZXNzYWdlICptc2csIGJvb2wgaXNfc2V0KVxuIHtcbi1cdGludCBmbGFncyA9IFJQQ19UQVNLX05PQ09OTkVDVDtcbitcdGludCBmbGFncyA9IFJQQ19UQVNLX05PQ09OTkVDVCB8IFJQQ19UQVNLX1NPRlQgfCBSUENfVEFTS19USU1FT1VUO1xuIFx0aW50IGVycm9yLCByZXN1bHQgPSAwO1xuIFxuIFx0aWYgKGlzX3NldCB8fCAhc24tXHUwMDNlcnBjYl9pc19hZl9sb2NhbClcbi1cdFx0ZmxhZ3MgPSBSUENfVEFTS19TT0ZUQ09OTjtcbitcdFx0ZmxhZ3MgfD0gUlBDX1RBU0tfU09GVENPTk47XG4gXHRtc2ctXHUwMDNlcnBjX3Jlc3AgPSBcdTAwMjZyZXN1bHQ7XG4gXG4gXHRlcnJvciA9IHJwY19jYWxsX3N5bmMoY2xudCwgbXNnLCBmbGFncyk7XG5kaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9zdmMuYyBiL25ldC9zdW5ycGMvc3ZjLmNcbmluZGV4IGFlOWVjNGJmMzRmNzIuLjUzOWRkZDA2NDY3ZGYgMTAwNjQ0XG4tLS0gYS9uZXQvc3VucnBjL3N2Yy5jXG4rKysgYi9uZXQvc3VucnBjL3N2Yy5jXG5AQCAtMTIwNyw2ICsxMjA3LDkgQEAgaW50IHN2Y19nZW5lcmljX3JwY2JpbmRfc2V0KHN0cnVjdCBuZXQgKm5ldCxcbiBcdGVycm9yID0gc3ZjX3JwY2JpbmRfc2V0X3ZlcnNpb24obmV0LCBwcm9ncCwgdmVyc2lvbixcbiBcdFx0XHRcdFx0ZmFtaWx5LCBwcm90bywgcG9ydCk7XG4gXG4rXHRpZiAoZXJyb3IgPT0gLUVUSU1FRE9VVClcbitcdFx0cmV0dXJuIGVycm9yO1xuK1xuIFx0cmV0dXJuICh2ZXJzLVx1MDAzZXZzX3JwY2Jfb3B0bmwpID8gMCA6IGVycm9yO1xuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChzdmNfZ2VuZXJpY19ycGNiaW5kX3NldCk7XG5AQCAtMTI0Myw2ICsxMjQ2LDggQEAgaW50IHN2Y19yZWdpc3Rlcihjb25zdCBzdHJ1Y3Qgc3ZjX3NlcnYgKnNlcnYsIHN0cnVjdCBuZXQgKm5ldCxcbiBcdFx0XHRcdHByaW50ayhLRVJOX1dBUk5JTkcgXCJzdmM6IGZhaWxlZCB0byByZWdpc3RlciBcIlxuIFx0XHRcdFx0XHRcIiVzdiV1IFJQQyBzZXJ2aWNlIChlcnJubyAlZCkuXFxuXCIsXG4gXHRcdFx0XHRcdHByb2dwLVx1MDAzZXBnX25hbWUsIGksIC1lcnJvcik7XG4rXHRcdFx0XHRpZiAoZXJyb3IgPT0gLUVUSU1FRE9VVClcbitcdFx0XHRcdFx0cmV0dXJuIGVycm9yO1xuIFx0XHRcdFx0YnJlYWs7XG4gXHRcdFx0fVxuIFx0XHR9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxOToyNDowMi44Mzk2MjM3NjFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NDUzMjM5Njg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgRmVhc2liaWxpdHk6IEludmVzdGlnYXRpbmcgYSBzdW5ycGMgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCBhIHBhdGNoIGhlcmUgdGhhdCdzIG1ha2luZyBjaGFuZ2VzIHRvIGBuZXQvc3VucnBjL3JwY2JfY2xudC5jYCBhbmQgYG5ldC9zdW5ycGMvc3ZjLmNgLiBTcGVjaWZpY2FsbHksIGl0IGludHJvZHVjZXMgYSBsb2NhbCB0aW1lb3V0LCBgcnBjYl9sb2NhbF90aW1lb3V0YCwgZm9yIFJQQyBiaW5kIGNsaWVudHMgd2l0aGluIGBycGNiX2NyZWF0ZV9hZl9sb2NhbGAgYW5kIGBycGNiX2NyZWF0ZV9sb2NhbF9uZXRgLiBBbHNvLCBgcnBjYl9yZWdpc3Rlcl9jYWxsYCBpcyBiZWluZyB1cGRhdGVkIHRvIHVzZSBgUlBDX1RBU0tfU09GVCB8IFJQQ19UQVNLX1RJTUVPVVRgIGZsYWdzLiBJIHNlZSBgc3ZjX2dlbmVyaWNfcnBjYmluZF9zZXRgIGFuZCBgc3ZjX3JlZ2lzdGVyYCBhcmUgbm93IGNoZWNraW5nIGZvciBgLUVUSU1FRE9VVGAgZXJyb3JzIGFuZCByZXR1cm5pbmcgdGhlbS5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBpcyBmdXp6aW5nLXdvcnRoeS4gU3VuUlBDLCBhcyBJIHJlY2FsbCwgaXMgZGVmaW5pdGVseSBhIHRhcmdldCB0aGF0J3MgZXhwb3NlZCB0byB1c2Vyc3BhY2UsIHRoaW5rIE5GUyBhbmQgb3RoZXIgUlBDIHNlcnZpY2VzLiBUaGF0IG1ha2VzIGl0IGFuIGludGVyZXN0aW5nIHRhcmdldC4gTGV0J3Mgc2VlLCB0aGUgcGF0Y2ggdG91Y2hlcyB0aGVzZSBmdW5jdGlvbnM6IGBycGNiX2NyZWF0ZV9hZl9sb2NhbGAsIGBycGNiX2NyZWF0ZV9sb2NhbF9uZXRgLCBgcnBjYl9yZWdpc3Rlcl9jYWxsYCwgYHN2Y19nZW5lcmljX3JwY2JpbmRfc2V0YCwgYW5kIGBzdmNfcmVnaXN0ZXJgLlxuXG5SaWdodCwgdGltZSB0byBjaGVjayB0aGUgY29uZmlnIG9wdGlvbnMuIExldCdzIG1ha2Ugc3VyZSBgQ09ORklHX1NVTlJQQ2AgaXMgZW5hYmxlZC4gSWYgaXQgaXMsIHRoZW4gSSdsbCBsb29rIGludG8gaXRzIEtjb25maWcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4NDIsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxOToyNDoxMS4yOTI4NjY0MVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzc1NjU5MjkxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBTVU5SUENcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zdW5ycGMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbm5ldC9zdW5ycGMvS2NvbmZpZzoyOmNvbmZpZyBTVU5SUENcXG5uZXQvc3VucnBjL0tjb25maWctMy1cXHR0cmlzdGF0ZVxcbi0tXFxubmV0L3N1bnJwYy9LY29uZmlnLTUtXFxubmV0L3N1bnJwYy9LY29uZmlnOjY6Y29uZmlnIFNVTlJQQ19HU1NcXG5uZXQvc3VucnBjL0tjb25maWctNy1cXHR0cmlzdGF0ZVxcbi0tXFxubmV0L3N1bnJwYy9LY29uZmlnLTEwLVxcbm5ldC9zdW5ycGMvS2NvbmZpZzoxMTpjb25maWcgU1VOUlBDX0JBQ0tDSEFOTkVMXFxubmV0L3N1bnJwYy9LY29uZmlnLTEyLVxcdGJvb2xcXG4tLVxcbm5ldC9zdW5ycGMvS2NvbmZpZy0xNC1cXG5uZXQvc3VucnBjL0tjb25maWc6MTU6Y29uZmlnIFNVTlJQQ19TV0FQXFxubmV0L3N1bnJwYy9LY29uZmlnLTE2LVxcdGJvb2xcXG4tLVxcbm5ldC9zdW5ycGMvS2NvbmZpZz0xOT1jb25maWcgUlBDU0VDX0dTU19LUkI1XFxuLS1cXG5uZXQvc3VucnBjL0tjb25maWctMzUtXFxubmV0L3N1bnJwYy9LY29uZmlnOjM2OmNvbmZpZyBTVU5SUENfREVCVUdcXG5uZXQvc3VucnBjL0tjb25maWctMzctXFx0Ym9vbCBcXFwiUlBDOiBFbmFibGUgZHByaW50ayBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5uZXQvc3VucnBjL0tjb25maWctNDktXFxubmV0L3N1bnJwYy9LY29uZmlnOjUwOmNvbmZpZyBTVU5SUENfREVCVUdfVFJBQ0VcXG5uZXQvc3VucnBjL0tjb25maWctNTEtXFx0Ym9vbCBcXFwiUlBDOiBTZW5kIGRmcHJpbnRrKCkgb3V0cHV0IHRvIHRoZSB0cmFjZSBidWZmZXJcXFwiXFxuLS1cXG5uZXQvc3VucnBjL0tjb25maWctNjMtXFxubmV0L3N1bnJwYy9LY29uZmlnOjY0OmNvbmZpZyBTVU5SUENfWFBSVF9SRE1BXFxubmV0L3N1bnJwYy9LY29uZmlnLTY1LVxcdHRyaXN0YXRlIFxcXCJSUEMtb3Zlci1SRE1BIHRyYW5zcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTk6MjQ6MTMuNjY4NTI5NzgxWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDYxNzQ3MTMzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFNVTlJQQyBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiBpcyBjbGVhcmx5IGNlbnRlcmVkIGFyb3VuZCBTVU5SUEMuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgcHJlc2VudCwganVzdCB0byBiZSBzdXJlLiBJJ20gbm90aW5nIHRoYXQga2V5IGZ1bmN0aW9ucyBsaWtlIGBzdmNfZ2VuZXJpY19ycGNiaW5kX3NldGAgYW5kIGBzdmNfcmVnaXN0ZXJgIGFyZSBleHBsaWNpdGx5IGV4cG9ydGVkLiBUaGF0IGltbWVkaWF0ZWx5IGZsYWdzIHRoZW0gYXMgcG90ZW50aWFsIHBvaW50cyBvZiBpbnRlcmVzdCwgYWxtb3N0IGNlcnRhaW5seSBBUEkgZW50cnlwb2ludHMuIE9uIHRoZSBvdGhlciBoYW5kLCBmdW5jdGlvbnMgbGlrZSBgcnBjYl9jcmVhdGVfYWZfbG9jYWxgLCBgcnBjYl9jcmVhdGVfbG9jYWxfbmV0YCwgYW5kIGBycGNiX3JlZ2lzdGVyX2NhbGxgIGFyZSBzdGF0aWMsIHdoaWNoIEknbGwga2VlcCBpbiBtaW5kIGJ1dCBsaWtlbHkgd29uJ3QgcmVxdWlyZSBhcyBjbG9zZSBhdHRlbnRpb24uXG5cblRoZSBxdWVzdGlvbiBub3cgaXMgd2hldGhlciBgc3ZjX2dlbmVyaWNfcnBjYmluZF9zZXRgIGFuZCBgc3ZjX3JlZ2lzdGVyYCBhcmUgdGhlIGJlc3QgZm9jdXMgc3ltYm9scy4gQW5kIHllcywgYWZ0ZXIgYSBxdWljayBldmFsdWF0aW9uLCBgc3ZjX3JlZ2lzdGVyYCBpcyBkZWZpbml0ZWx5IGFuIEFQSSBlbnRyeXBvaW50LiBBbmQgYHN2Y19nZW5lcmljX3JwY2JpbmRfc2V0YCBhbHNvIGxvb2tzIGxpa2UgYSBzb2xpZCBBUEkgZW50cnlwb2ludCB0b28uXG5cbkFscmlnaHQsIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkaXZlIGludG8gYG5ldC9zdW5ycGMvc3ZjLmNgIHRvIGV4YW1pbmUgdGhlIGltcGxlbWVudGF0aW9ucyBvZiBgc3ZjX3JlZ2lzdGVyYCBhbmQgYHN2Y19nZW5lcmljX3JwY2JpbmRfc2V0YCBpbiBncmVhdGVyIGRldGFpbC4gSSdtIGV4cGVjdGluZyB0byBmaW5kIHRoZSBjb3JlIHJlZ2lzdHJhdGlvbiBhbmQgY29uZmlndXJhdGlvbiBsb2dpYyB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzg0OSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxOToyNDoxOC4yODYwMDM4MzRaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzc1ODcxNjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3ZjX3JlZ2lzdGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zdW5ycGMvc3ZjLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3N1bnJwYy9zdmMuYz0xMTAyPXN0YXRpYyBpbnQgX19zdmNfcnBjYl9yZWdpc3RlcjYoc3RydWN0IG5ldCAqbmV0LCBjb25zdCB1MzIgcHJvZ3JhbSxcXG4tLVxcbm5ldC9zdW5ycGMvc3ZjLmMtMTE0NS0gKi9cXG5uZXQvc3VucnBjL3N2Yy5jOjExNDY6c3RhdGljIGludCBfX3N2Y19yZWdpc3RlcihzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKnByb2duYW1lLFxcbm5ldC9zdW5ycGMvc3ZjLmMtMTE0Ny1cXHRcXHRcXHQgIGNvbnN0IHUzMiBwcm9ncmFtLCBjb25zdCB1MzIgdmVyc2lvbixcXG4tLVxcbm5ldC9zdW5ycGMvc3ZjLmMtMTE2NS1cXG5uZXQvc3VucnBjL3N2Yy5jOjExNjY6XFx0dHJhY2Vfc3ZjX3JlZ2lzdGVyKHByb2duYW1lLCB2ZXJzaW9uLCBmYW1pbHksIHByb3RvY29sLCBwb3J0LCBlcnJvcik7XFxubmV0L3N1bnJwYy9zdmMuYy0xMTY3LVxcdHJldHVybiBlcnJvcjtcXG4tLVxcbm5ldC9zdW5ycGMvc3ZjLmM9MTE3MT1pbnQgc3ZjX3JwY2JpbmRfc2V0X3ZlcnNpb24oc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L3N1bnJwYy9zdmMuYy0xMTc2LXtcXG5uZXQvc3VucnBjL3N2Yy5jOjExNzc6XFx0cmV0dXJuIF9fc3ZjX3JlZ2lzdGVyKG5ldCwgcHJvZ3AtXFx1MDAzZXBnX25hbWUsIHByb2dwLVxcdTAwM2VwZ19wcm9nLFxcbm5ldC9zdW5ycGMvc3ZjLmMtMTE3OC1cXHRcXHRcXHRcXHR2ZXJzaW9uLCBmYW1pbHksIHByb3RvLCBwb3J0KTtcXG4tLVxcbm5ldC9zdW5ycGMvc3ZjLmM9MTIxNT1FWFBPUlRfU1lNQk9MX0dQTChzdmNfZ2VuZXJpY19ycGNiaW5kX3NldCk7XFxuLS1cXG5uZXQvc3VucnBjL3N2Yy5jLTEyMTctLyoqXFxubmV0L3N1bnJwYy9zdmMuYzoxMjE4OiAqIHN2Y19yZWdpc3RlciAtIHJlZ2lzdGVyIGFuIFJQQyBzZXJ2aWNlIHdpdGggdGhlIGxvY2FsIHBvcnRtYXBwZXJcXG5uZXQvc3VucnBjL3N2Yy5jLTEyMTktICogQHNlcnY6IHN2Y19zZXJ2IHN0cnVjdCBmb3IgdGhlIHNlcnZpY2UgdG8gcmVnaXN0ZXJcXG4tLVxcbm5ldC9zdW5ycGMvc3ZjLmMtMTIyNi0gKi9cXG5uZXQvc3VucnBjL3N2Yy5jOjEyMjc6aW50IHN2Y19yZWdpc3Rlcihjb25zdCBzdHJ1Y3Qgc3ZjX3NlcnYgKnNlcnYsIHN0cnVjdCBuZXQgKm5ldCxcXG5uZXQvc3VucnBjL3N2Yy5jLTEyMjgtXFx0XFx0IGNvbnN0IGludCBmYW1pbHksIGNvbnN0IHVuc2lnbmVkIHNob3J0IHByb3RvLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxOToyNDoxOC4zNjM1OTU3NDhaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDI4MzkwNjE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgSSBzZWUgaXQ6XG5cbioqUlBDIEJpbmRpbmcgRnVuY3Rpb24gRXhhbWluYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgaG93IHRoZSBSUEMgYmluZGluZyBwcm9jZXNzIGlzIGhhbmRsZWQuIEkgc2VlIHRoYXQgYHN2Y19yZWdpc3RlcmAgaXMgYXZhaWxhYmxlLCBzbyB0aGF0J3Mgb2J2aW91c2x5IHBhcnQgb2YgdGhlIHNlcnZlci1zaWRlIHJlZ2lzdHJhdGlvbiBwcm9jZXNzLiBBbmQgYHN2Y19nZW5lcmljX3JwY2JpbmRfc2V0YCBpcyBhbHNvIGV4cG9ydGVkIOKAkyB0aGF0IGxpa2VseSBoYW5kbGVzIHNvbWUgZ2VuZXJpYyBiaW5kaW5nIGNvbmZpZ3VyYXRpb24uIE5vdywgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBjbGllbnQtc2lkZSBpbnRlcmFjdGlvbiwgSSBzaG91bGQgcHJvYmFibHkgYmUgbG9va2luZyBhdCBgbmV0L3N1bnJwYy9ycGNiX2NsbnQuY2AuIEkgbmVlZCB0byByZXZpZXcgdGhvc2UgZnVuY3Rpb25zIGluIHRoYXQgZmlsZSB3aGljaCB3aWxsIGRlYWwgd2l0aCByZWdpc3RlcmluZyB3aXRoIHRoZSBsb2NhbCBSUEMgYmluZCBzZXJ2aWNlIChgcnBjYl9jcmVhdGVfYWZfbG9jYWxgLCBgcnBjYl9jcmVhdGVfbG9jYWxfbmV0YCwgYW5kIGBycGNiX3JlZ2lzdGVyX2NhbGxgKS4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgZnVsbCBwaWN0dXJlIG9uIGhvdyB0aGUgY2xpZW50IGdvZXMgYWJvdXQgY29ubmVjdGluZyB0byBhbmQgcmVnaXN0ZXJpbmcgd2l0aCB0aGUgcnBjYmluZCBzZXJ2aWNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0ODA3LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTk6MjQ6MjIuMzkxOTg5MDgyWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgxMTIzODQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJwY2JfY3JlYXRlX2FmX2xvY2FsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zdW5ycGMvcnBjYl9jbG50LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3N1bnJwYy9ycGNiX2NsbnQuYz0yMjQ9c3RhdGljIGNvbnN0IHN0cnVjdCBycGNfdGltZW91dCBycGNiX2xvY2FsX3RpbWVvdXQgPSB7XFxuLS1cXG5uZXQvc3VucnBjL3JwY2JfY2xudC5jLTIzMy0gKi9cXG5uZXQvc3VucnBjL3JwY2JfY2xudC5jOjIzNDpzdGF0aWMgaW50IHJwY2JfY3JlYXRlX2FmX2xvY2FsKHN0cnVjdCBuZXQgKm5ldCxcXG5uZXQvc3VucnBjL3JwY2JfY2xudC5jLTIzNS1cXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfdW4gKmFkZHIpXFxuLS1cXG5uZXQvc3VucnBjL3JwY2JfY2xudC5jPTI4MT1zdGF0aWMgaW50IHJwY2JfY3JlYXRlX2xvY2FsX2Fic3RyYWN0KHN0cnVjdCBuZXQgKm5ldClcXG4tLVxcbm5ldC9zdW5ycGMvcnBjYl9jbG50LmMtMjg3LVxcbm5ldC9zdW5ycGMvcnBjYl9jbG50LmM6Mjg4OlxcdHJldHVybiBycGNiX2NyZWF0ZV9hZl9sb2NhbChuZXQsIFxcdTAwMjZycGNiX2xvY2FsYWRkcl9hYnN0cmFjdCk7XFxubmV0L3N1bnJwYy9ycGNiX2NsbnQuYy0yODktfVxcbi0tXFxubmV0L3N1bnJwYy9ycGNiX2NsbnQuYz0yOTE9c3RhdGljIGludCBycGNiX2NyZWF0ZV9sb2NhbF91bml4KHN0cnVjdCBuZXQgKm5ldClcXG4tLVxcbm5ldC9zdW5ycGMvcnBjYl9jbG50LmMtMjk3LVxcbm5ldC9zdW5ycGMvcnBjYl9jbG50LmM6Mjk4OlxcdHJldHVybiBycGNiX2NyZWF0ZV9hZl9sb2NhbChuZXQsIFxcdTAwMjZycGNiX2xvY2FsYWRkcl91bml4KTtcXG5uZXQvc3VucnBjL3JwY2JfY2xudC5jLTI5OS19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE5OjI0OjIyLjQ3MzExNjY4NloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYzMjQwNzg2MDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBMb2NhbCBSUEMgQmluZGluZyBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgUlBDIGNvZGUgYW5kIG5vdGljaW5nIHNvbWV0aGluZyBpbnRlcmVzdGluZy4gSXQgbG9va3MgbGlrZSBgcnBjYl9jcmVhdGVfYWZfbG9jYWxgLCBgcnBjYl9jcmVhdGVfbG9jYWxfbmV0YCwgYW5kIGBycGNiX3JlZ2lzdGVyX2NhbGxgIGFyZSBhbGwgZGVjbGFyZWQgYXMgYHN0YXRpY2AuIFRoYXQgaW1tZWRpYXRlbHkgcGlxdWVzIG15IGludGVyZXN0LiBTdGF0aWMgZnVuY3Rpb25zIG1lYW4gdGhlaXIgc2NvcGUgaXMgbGltaXRlZCB0byB0aGUgY3VycmVudCBjb21waWxhdGlvbiB1bml0LCBzbyB0aGV5J3JlIG5vdCBpbnRlbmRlZCBmb3IgZXh0ZXJuYWwgdXNlLiBJIHdvbmRlciB3aHkgdGhlc2UgcGFydGljdWxhciBmdW5jdGlvbnMgYXJlIGRlZW1lZCBpbnRlcm5hbC5cblxuTXkgbmV4dCBzdGVwIGlzIGNsZWFyOiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIG9mIHRoZXNlIGxvY2FsIGZ1bmN0aW9ucy4gTGV0J3Mgc2VlIHdobyBpcyBhY3R1YWxseSBjYWxsaW5nIGBycGNiX2NyZWF0ZV9sb2NhbF9uZXRgLiBJdCBzZWVtcyBhcyB0aG91Z2ggc29tZW9uZSB3YW50cyB0byBrZWVwIGEgY2xvc2UgcmVpbiBvbiB0aGUgbG9naWMgdGhhdCB1c2VzIHRoaXMgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0NzIsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxOToyNDoyOC43OTcxOTk3NzdaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY1MDgzMTM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJwY2JfY3JlYXRlX2xvY2FsX25ldFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc3VucnBjL3JwY2JfY2xudC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zdW5ycGMvcnBjYl9jbG50LmM9MjkxPXN0YXRpYyBpbnQgcnBjYl9jcmVhdGVfbG9jYWxfdW5peChzdHJ1Y3QgbmV0ICpuZXQpXFxuLS1cXG5uZXQvc3VucnBjL3JwY2JfY2xudC5jLTMwNC0gKi9cXG5uZXQvc3VucnBjL3JwY2JfY2xudC5jOjMwNTpzdGF0aWMgaW50IHJwY2JfY3JlYXRlX2xvY2FsX25ldChzdHJ1Y3QgbmV0ICpuZXQpXFxubmV0L3N1bnJwYy9ycGNiX2NsbnQuYy0zMDYte1xcbi0tXFxubmV0L3N1bnJwYy9ycGNiX2NsbnQuYz0zNTM9aW50IHJwY2JfY3JlYXRlX2xvY2FsKHN0cnVjdCBuZXQgKm5ldClcXG4tLVxcbm5ldC9zdW5ycGMvcnBjYl9jbG50LmMtMzY2LVxcdCAgICBycGNiX2NyZWF0ZV9sb2NhbF91bml4KG5ldCkgIT0gMClcXG5uZXQvc3VucnBjL3JwY2JfY2xudC5jOjM2NzpcXHRcXHRyZXN1bHQgPSBycGNiX2NyZWF0ZV9sb2NhbF9uZXQobmV0KTtcXG5uZXQvc3VucnBjL3JwY2JfY2xudC5jLTM2OC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTk6MjQ6MjguODYyMjg4MDUyWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4MjgzNTYwMTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHByZXNlbnRlZCBhcyBpZiBpdCB3ZXJlIG15IG93biBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqRm9jdXNpbmcgaW4gb24gYHJwY2JfY3JlYXRlX2xvY2FsYCoqXG5cblJpZ2h0LCBzbyBgcnBjYl9jcmVhdGVfbG9jYWxgLi4uIHRoYXQncyB0aGUgZXhwb3J0ZWQgZnVuY3Rpb24gd2UncmUgdGFsa2luZyBhYm91dCBoZXJlLiBJbW1lZGlhdGVseSwgdGhlIHNpZ25pZmljYW5jZSBjbGlja3MgaW4uIFRoaXMgaXNuJ3QganVzdCAqYSogZnVuY3Rpb247IGl0J3MgdGhlIG91dHdhcmQtZmFjaW5nIGVudHJ5IHBvaW50LCB0aGUgb25lIHRoYXQgbWFrZXMgdGhpcyBmdW5jdGlvbmFsaXR5IGF2YWlsYWJsZSB0byB0aGUgd29ybGQsIG9yIGF0IGxlYXN0LCB0aGUgbG9jYWwgc3lzdGVtLiBUaGF0IG1lYW5zIHRoZSBzaWduYXR1cmUsIHRoZSBiZWhhdmlvciwgdGhlIGludGVybmFsIGRlcGVuZGVuY2llcyDigJMgYWxsIG9mIGl0IG11c3QgYmUgbWV0aWN1bG91c2x5IGNvbnNpZGVyZWQgYmVjYXVzZSBpdCdzIHRoZSBwdWJsaWMgQVBJLiBJdCBpcyBob3cgb3RoZXIgbW9kdWxlcywgb3IgYXBwbGljYXRpb25zLCBhcmUgaW50ZW5kZWQgdG8gbWFrZSB1c2Ugb2YgdGhlIFJQQyBiaW5kZXIgZnVuY3Rpb25hbGl0eS4gVGhpbmtpbmcgZnVydGhlciBhYm91dCB0aGUgZnVuY3Rpb24sIEkgaW1tZWRpYXRlbHkgY29uc2lkZXIgcG90ZW50aWFsIGVycm9ycyB0aGF0IG1heSBvY2N1ciBpbiBzZXR0aW5nIHVwIHRoZSBsb2NhbCBSUEMgYmluZGVyLiBJdCB3aWxsIHJlcXVpcmUgdGhlIGFwcHJvcHJpYXRlIHBlcm1pc3Npb25zLCBuZXR3b3JrIGNvbmZpZ3VyYXRpb24sIGFuZCBpdCBtdXN0IHN1Y2Nlc3NmdWxseSByZWdpc3RlciBzZXJ2aWNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTk3MSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE5OjI0OjMzLjY5MDY0NzA0OVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzc4Mjk0MjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicnBjYl9jcmVhdGVfbG9jYWxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3N1bnJwYy9ycGNiX2NsbnQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc3VucnBjL3JwY2JfY2xudC5jPTIwNj1zdGF0aWMgdm9pZCBycGNiX3NldF9sb2NhbChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBycGNfY2xudCAqY2xudCxcXG4tLVxcbm5ldC9zdW5ycGMvcnBjYl9jbG50LmMtMjExLVxcbm5ldC9zdW5ycGMvcnBjYl9jbG50LmM6MjEyOlxcdC8qIFByb3RlY3RlZCBieSBycGNiX2NyZWF0ZV9sb2NhbF9tdXRleCAqL1xcbm5ldC9zdW5ycGMvcnBjYl9jbG50LmMtMjEzLVxcdHNuLVxcdTAwM2VycGNiX2xvY2FsX2NsbnQgPSBjbG50O1xcbi0tXFxubmV0L3N1bnJwYy9ycGNiX2NsbnQuYz0yMzQ9c3RhdGljIGludCBycGNiX2NyZWF0ZV9hZl9sb2NhbChzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvc3VucnBjL3JwY2JfY2xudC5jLTI4MC1cXG5uZXQvc3VucnBjL3JwY2JfY2xudC5jOjI4MTpzdGF0aWMgaW50IHJwY2JfY3JlYXRlX2xvY2FsX2Fic3RyYWN0KHN0cnVjdCBuZXQgKm5ldClcXG5uZXQvc3VucnBjL3JwY2JfY2xudC5jLTI4Mi17XFxuLS1cXG5uZXQvc3VucnBjL3JwY2JfY2xudC5jLTI5MC1cXG5uZXQvc3VucnBjL3JwY2JfY2xudC5jOjI5MTpzdGF0aWMgaW50IHJwY2JfY3JlYXRlX2xvY2FsX3VuaXgoc3RydWN0IG5ldCAqbmV0KVxcbm5ldC9zdW5ycGMvcnBjYl9jbG50LmMtMjkyLXtcXG4tLVxcbm5ldC9zdW5ycGMvcnBjYl9jbG50LmMtMzA0LSAqL1xcbm5ldC9zdW5ycGMvcnBjYl9jbG50LmM6MzA1OnN0YXRpYyBpbnQgcnBjYl9jcmVhdGVfbG9jYWxfbmV0KHN0cnVjdCBuZXQgKm5ldClcXG5uZXQvc3VucnBjL3JwY2JfY2xudC5jLTMwNi17XFxuLS1cXG5uZXQvc3VucnBjL3JwY2JfY2xudC5jLTM1Mi0gKi9cXG5uZXQvc3VucnBjL3JwY2JfY2xudC5jOjM1MzppbnQgcnBjYl9jcmVhdGVfbG9jYWwoc3RydWN0IG5ldCAqbmV0KVxcbm5ldC9zdW5ycGMvcnBjYl9jbG50LmMtMzU0LXtcXG5uZXQvc3VucnBjL3JwY2JfY2xudC5jOjM1NTpcXHRzdGF0aWMgREVGSU5FX01VVEVYKHJwY2JfY3JlYXRlX2xvY2FsX211dGV4KTtcXG5uZXQvc3VucnBjL3JwY2JfY2xudC5jLTM1Ni1cXHRpbnQgcmVzdWx0ID0gMDtcXG4tLVxcbm5ldC9zdW5ycGMvcnBjYl9jbG50LmMtMzYwLVxcbm5ldC9zdW5ycGMvcnBjYl9jbG50LmM6MzYxOlxcdG11dGV4X2xvY2soXFx1MDAyNnJwY2JfY3JlYXRlX2xvY2FsX211dGV4KTtcXG5uZXQvc3VucnBjL3JwY2JfY2xudC5jLTM2Mi1cXHRpZiAocnBjYl9nZXRfbG9jYWwobmV0KSlcXG4tLVxcbm5ldC9zdW5ycGMvcnBjYl9jbG50LmMtMzY0LVxcbm5ldC9zdW5ycGMvcnBjYl9jbG50LmM6MzY1OlxcdGlmIChycGNiX2NyZWF0ZV9sb2NhbF9hYnN0cmFjdChuZXQpICE9IDAgXFx1MDAyNlxcdTAwMjZcXG5uZXQvc3VucnBjL3JwY2JfY2xudC5jOjM2NjpcXHQgICAgcnBjYl9jcmVhdGVfbG9jYWxfdW5peChuZXQpICE9IDApXFxubmV0L3N1bnJwYy9ycGNiX2NsbnQuYzozNjc6XFx0XFx0cmVzdWx0ID0gcnBjYl9jcmVhdGVfbG9jYWxfbmV0KG5ldCk7XFxubmV0L3N1bnJwYy9ycGNiX2NsbnQuYy0zNjgtXFxubmV0L3N1bnJwYy9ycGNiX2NsbnQuYy0zNjktb3V0Olxcbm5ldC9zdW5ycGMvcnBjYl9jbG50LmM6MzcwOlxcdG11dGV4X3VubG9jayhcXHUwMDI2cnBjYl9jcmVhdGVfbG9jYWxfbXV0ZXgpO1xcbm5ldC9zdW5ycGMvcnBjYl9jbG50LmMtMzcxLVxcdHJldHVybiByZXN1bHQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE5OjI0OjMzLjc2ODQ4MDU4NFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjY2MDY1MTk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgYHJwY2JfY3JlYXRlX2xvY2FsYCBGdW5jdGlvbidzIFNjb3BlKipcblxuT2theSwgc28gYHJwY2JfY3JlYXRlX2xvY2FsYCBpc24ndCBzdGF0aWMsIG9yIGF0IGxlYXN0IGl0IHNlZW1zIHRvIGJlIGV4cG9zZWQgc29tZWhvdy4gVGhhdCdzIHRoZSBjbHVlIEkgbmVlZGVkLiBOb3csIGlmIGl0J3MgdmlzaWJsZSBvdXRzaWRlIGl0cyBpbW1lZGlhdGUgc2NvcGUsIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgaXMgdGhlIGNsaWVudC1zaWRlIGNvZGUsIHBhcnRpY3VsYXJseSB3aGVyZSBpdCBtaWdodCBiZSAqdXNlZCogdG8gcmVnaXN0ZXIgY2FsbHMuIFRoZSBvYnZpb3VzIHBsYWNlIHRvIGludmVzdGlnYXRlIG5leHQgaXMgdGhlIGBuZXQvc3VucnBjL3JwY2JfY2xudC5jYCBmaWxlLiBJJ2xsIG5lZWQgdG8gY2hlY2sgaWYgYHJwY2JfcmVnaXN0ZXJfY2FsbGAgaXMgZGVmaW5lZCB0aGVyZSBhbmQsIG1vcmUgaW1wb3J0YW50bHksIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgZnVuY3Rpb24gSSdtIGN1cmlvdXMgYWJvdXQuIFVuZGVyc3RhbmRpbmcgdGhpcyByZWxhdGlvbnNoaXAgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGhhbmRsZSBvbiBob3cgdGhpcyByZWdpc3RyYXRpb24gcHJvY2VzcyB3b3Jrcy4gSSdtIGhvcGluZyBgcnBjYl9yZWdpc3Rlcl9jYWxsYCBwcm92aWRlcyBhIGNsZWFyIHBhdGh3YXkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcwNTAsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxOToyNDozOC4wMzQ1NDkyNDFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxMTEwNTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJwY2JfcmVnaXN0ZXJfY2FsbFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc3VucnBjL3JwY2JfY2xudC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zdW5ycGMvcnBjYl9jbG50LmM9Mzc0PXN0YXRpYyBzdHJ1Y3QgcnBjX2NsbnQgKnJwY2JfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqbm9kZW5hbWUsXFxuLS1cXG5uZXQvc3VucnBjL3JwY2JfY2xudC5jLTQxMC1cXG5uZXQvc3VucnBjL3JwY2JfY2xudC5jOjQxMTpzdGF0aWMgaW50IHJwY2JfcmVnaXN0ZXJfY2FsbChzdHJ1Y3Qgc3VucnBjX25ldCAqc24sIHN0cnVjdCBycGNfY2xudCAqY2xudCwgc3RydWN0IHJwY19tZXNzYWdlICptc2csIGJvb2wgaXNfc2V0KVxcbm5ldC9zdW5ycGMvcnBjYl9jbG50LmMtNDEyLXtcXG4tLVxcbm5ldC9zdW5ycGMvcnBjYl9jbG50LmM9NDYyPWludCBycGNiX3JlZ2lzdGVyKHN0cnVjdCBuZXQgKm5ldCwgdTMyIHByb2csIHUzMiB2ZXJzLCBpbnQgcHJvdCwgdW5zaWduZWQgc2hvcnQgcG9ydClcXG4tLVxcbm5ldC9zdW5ycGMvcnBjYl9jbG50LmMtNDgzLVxcbm5ldC9zdW5ycGMvcnBjYl9jbG50LmM6NDg0OlxcdHJldHVybiBycGNiX3JlZ2lzdGVyX2NhbGwoc24sIHNuLVxcdTAwM2VycGNiX2xvY2FsX2NsbnQsIFxcdTAwMjZtc2csIGlzX3NldCk7XFxubmV0L3N1bnJwYy9ycGNiX2NsbnQuYy00ODUtfVxcbi0tXFxubmV0L3N1bnJwYy9ycGNiX2NsbnQuYz00OTA9c3RhdGljIGludCBycGNiX3JlZ2lzdGVyX2luZXQ0KHN0cnVjdCBzdW5ycGNfbmV0ICpzbixcXG4tLVxcbm5ldC9zdW5ycGMvcnBjYl9jbG50LmMtNTA3LVxcbm5ldC9zdW5ycGMvcnBjYl9jbG50LmM6NTA4OlxcdHJlc3VsdCA9IHJwY2JfcmVnaXN0ZXJfY2FsbChzbiwgc24tXFx1MDAzZXJwY2JfbG9jYWxfY2xudDQsIG1zZywgaXNfc2V0KTtcXG5uZXQvc3VucnBjL3JwY2JfY2xudC5jLTUwOS1cXHRrZnJlZShtYXAtXFx1MDAzZXJfYWRkcik7XFxuLS1cXG5uZXQvc3VucnBjL3JwY2JfY2xudC5jPTUxNj1zdGF0aWMgaW50IHJwY2JfcmVnaXN0ZXJfaW5ldDYoc3RydWN0IHN1bnJwY19uZXQgKnNuLFxcbi0tXFxubmV0L3N1bnJwYy9ycGNiX2NsbnQuYy01MzMtXFxubmV0L3N1bnJwYy9ycGNiX2NsbnQuYzo1MzQ6XFx0cmVzdWx0ID0gcnBjYl9yZWdpc3Rlcl9jYWxsKHNuLCBzbi1cXHUwMDNlcnBjYl9sb2NhbF9jbG50NCwgbXNnLCBpc19zZXQpO1xcbm5ldC9zdW5ycGMvcnBjYl9jbG50LmMtNTM1LVxcdGtmcmVlKG1hcC1cXHUwMDNlcl9hZGRyKTtcXG4tLVxcbm5ldC9zdW5ycGMvcnBjYl9jbG50LmM9NTM5PXN0YXRpYyBpbnQgcnBjYl91bnJlZ2lzdGVyX2FsbF9wcm90b2ZhbWlsaWVzKHN0cnVjdCBzdW5ycGNfbmV0ICpzbixcXG4tLVxcbm5ldC9zdW5ycGMvcnBjYl9jbG50LmMtNTQ4LVxcbm5ldC9zdW5ycGMvcnBjYl9jbG50LmM6NTQ5OlxcdHJldHVybiBycGNiX3JlZ2lzdGVyX2NhbGwoc24sIHNuLVxcdTAwM2VycGNiX2xvY2FsX2NsbnQ0LCBtc2csIGZhbHNlKTtcXG5uZXQvc3VucnBjL3JwY2JfY2xudC5jLTU1MC19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE5OjI0OjM4LjA4NTY2NTk5N1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDE2NTEzNDM5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgUmVnaXN0cmF0aW9uIFByb2Nlc3MqKlxuXG5BbHJpZ2h0LCBzbyB3ZSdyZSBsb29raW5nIGF0IHJlZ2lzdHJhdGlvbiwgc3BlY2lmaWNhbGx5IHRoZSBleHBvcnRlZCBmdW5jdGlvbiBgcnBjYl9yZWdpc3RlcmAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIk9rYXksIHRoYXQncyB0aGUgZW50cnkgcG9pbnQgd2UncmUgY29uY2VybmVkIHdpdGguXCIgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgZnVuY3Rpb24gd29ya3MsIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHN5c3RlbS4gV2hhdCBhcmUgaXRzIGRlcGVuZGVuY2llcz8gSG93IGRvZXMgaXQgaGFuZGxlIGVycm9ycz9cblxuVG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlLCBJJ20gZ29pbmcgdG8gZGlnIGEgbGl0dGxlIGRlZXBlci4gSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSByZWdpc3RyYXRpb24gcHJvY2VzcyBpcyB0aWVkIHRvZ2V0aGVyLCBhbmQgaG93IGl0IGRpZmZlcnMgZnJvbSBhIG1vcmUgc3RhdGljIG1ldGhvZCBvZiBSUEMgdXNlLiBJJ2xsIG5lZWQgdG8gZXhhbWluZSBgcnBjYl9jcmVhdGVfbG9jYWxgIGFuZCBzZWUgaWYgdGhleSBhcmUgcmVsYXRlZC4gTXkgZm9jdXMgd2lsbCBiZSBvbiB0aGUga2V5IHBpZWNlczpcblxuKiAgIEhvdyBpcyB0aGUgcmVnaXN0cmF0aW9uIGluZm8gaGFuZGxlZD9cbiogICBXaGF0IGlzIHJlZ2lzdGVyZWQgaW4gdGhlIHByb2Nlc3M/XG4qICAgV2hhdCByZXNvdXJjZXMgYXJlIGFsbG9jYXRlZD9cblxuSSdsbCBiZSBsb29raW5nIGZvciBwb3RlbnRpYWwgYm90dGxlbmVja3MsIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcywgb3IgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9ucyBpbiB0aGVzZSBmdW5jdGlvbnMuIEl0J3MgdGltZSB0byBkaXZlIGludG8gdGhlIGNvZGUhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgwMDQsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxOToyNToxMi4yNTA4MDI5NjlaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzMTcxNjI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJwY2JfcmVnaXN0ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3N1bnJwYy9ycGNiX2NsbnQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc3VucnBjL3JwY2JfY2xudC5jPTM3ND1zdGF0aWMgc3RydWN0IHJwY19jbG50ICpycGNiX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKm5vZGVuYW1lLFxcbi0tXFxubmV0L3N1bnJwYy9ycGNiX2NsbnQuYy00MTAtXFxubmV0L3N1bnJwYy9ycGNiX2NsbnQuYzo0MTE6c3RhdGljIGludCBycGNiX3JlZ2lzdGVyX2NhbGwoc3RydWN0IHN1bnJwY19uZXQgKnNuLCBzdHJ1Y3QgcnBjX2NsbnQgKmNsbnQsIHN0cnVjdCBycGNfbWVzc2FnZSAqbXNnLCBib29sIGlzX3NldClcXG5uZXQvc3VucnBjL3JwY2JfY2xudC5jLTQxMi17XFxuLS1cXG5uZXQvc3VucnBjL3JwY2JfY2xudC5jLTQyOS0vKipcXG5uZXQvc3VucnBjL3JwY2JfY2xudC5jOjQzMDogKiBycGNiX3JlZ2lzdGVyIC0gc2V0IG9yIHVuc2V0IGEgcG9ydCByZWdpc3RyYXRpb24gd2l0aCB0aGUgbG9jYWwgcnBjYmluZCBzdmNcXG5uZXQvc3VucnBjL3JwY2JfY2xudC5jLTQzMS0gKiBAbmV0OiB0YXJnZXQgbmV0d29yayBuYW1lc3BhY2VcXG4tLVxcbm5ldC9zdW5ycGMvcnBjYl9jbG50LmMtNDYxLSAqL1xcbm5ldC9zdW5ycGMvcnBjYl9jbG50LmM6NDYyOmludCBycGNiX3JlZ2lzdGVyKHN0cnVjdCBuZXQgKm5ldCwgdTMyIHByb2csIHUzMiB2ZXJzLCBpbnQgcHJvdCwgdW5zaWduZWQgc2hvcnQgcG9ydClcXG5uZXQvc3VucnBjL3JwY2JfY2xudC5jLTQ2My17XFxuLS1cXG5uZXQvc3VucnBjL3JwY2JfY2xudC5jLTQ4My1cXG5uZXQvc3VucnBjL3JwY2JfY2xudC5jOjQ4NDpcXHRyZXR1cm4gcnBjYl9yZWdpc3Rlcl9jYWxsKHNuLCBzbi1cXHUwMDNlcnBjYl9sb2NhbF9jbG50LCBcXHUwMDI2bXNnLCBpc19zZXQpO1xcbm5ldC9zdW5ycGMvcnBjYl9jbG50LmMtNDg1LX1cXG4tLVxcbm5ldC9zdW5ycGMvcnBjYl9jbG50LmMtNDg5LSAqL1xcbm5ldC9zdW5ycGMvcnBjYl9jbG50LmM6NDkwOnN0YXRpYyBpbnQgcnBjYl9yZWdpc3Rlcl9pbmV0NChzdHJ1Y3Qgc3VucnBjX25ldCAqc24sXFxubmV0L3N1bnJwYy9ycGNiX2NsbnQuYy00OTEtXFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqc2FwLFxcbi0tXFxubmV0L3N1bnJwYy9ycGNiX2NsbnQuYy01MDctXFxubmV0L3N1bnJwYy9ycGNiX2NsbnQuYzo1MDg6XFx0cmVzdWx0ID0gcnBjYl9yZWdpc3Rlcl9jYWxsKHNuLCBzbi1cXHUwMDNlcnBjYl9sb2NhbF9jbG50NCwgbXNnLCBpc19zZXQpO1xcbm5ldC9zdW5ycGMvcnBjYl9jbG50LmMtNTA5LVxcdGtmcmVlKG1hcC1cXHUwMDNlcl9hZGRyKTtcXG4tLVxcbm5ldC9zdW5ycGMvcnBjYl9jbG50LmMtNTE1LSAqL1xcbm5ldC9zdW5ycGMvcnBjYl9jbG50LmM6NTE2OnN0YXRpYyBpbnQgcnBjYl9yZWdpc3Rlcl9pbmV0NihzdHJ1Y3Qgc3VucnBjX25ldCAqc24sXFxubmV0L3N1bnJwYy9ycGNiX2NsbnQuYy01MTctXFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqc2FwLFxcbi0tXFxubmV0L3N1bnJwYy9ycGNiX2NsbnQuYy01MzMtXFxubmV0L3N1bnJwYy9ycGNiX2NsbnQuYzo1MzQ6XFx0cmVzdWx0ID0gcnBjYl9yZWdpc3Rlcl9jYWxsKHNuLCBzbi1cXHUwMDNlcnBjYl9sb2NhbF9jbG50NCwgbXNnLCBpc19zZXQpO1xcbm5ldC9zdW5ycGMvcnBjYl9jbG50LmMtNTM1LVxcdGtmcmVlKG1hcC1cXHUwMDNlcl9hZGRyKTtcXG4tLVxcbm5ldC9zdW5ycGMvcnBjYl9jbG50LmM9NTM5PXN0YXRpYyBpbnQgcnBjYl91bnJlZ2lzdGVyX2FsbF9wcm90b2ZhbWlsaWVzKHN0cnVjdCBzdW5ycGNfbmV0ICpzbixcXG4tLVxcbm5ldC9zdW5ycGMvcnBjYl9jbG50LmMtNTQ4LVxcbm5ldC9zdW5ycGMvcnBjYl9jbG50LmM6NTQ5OlxcdHJldHVybiBycGNiX3JlZ2lzdGVyX2NhbGwoc24sIHNuLVxcdTAwM2VycGNiX2xvY2FsX2NsbnQ0LCBtc2csIGZhbHNlKTtcXG5uZXQvc3VucnBjL3JwY2JfY2xudC5jLTU1MC19XFxuLS1cXG5uZXQvc3VucnBjL3JwY2JfY2xudC5jPTU5Nj1pbnQgcnBjYl92NF9yZWdpc3RlcihzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHUzMiBwcm9ncmFtLCBjb25zdCB1MzIgdmVyc2lvbixcXG4tLVxcbm5ldC9zdW5ycGMvcnBjYl9jbG50LmMtNjE1LVxcbm5ldC9zdW5ycGMvcnBjYl9jbG50LmM6NjE2OlxcdHRyYWNlX3JwY2JfcmVnaXN0ZXIobWFwLnJfcHJvZywgbWFwLnJfdmVycywgbWFwLnJfYWRkciwgbWFwLnJfbmV0aWQpO1xcbm5ldC9zdW5ycGMvcnBjYl9jbG50LmMtNjE3LVxcbi0tXFxubmV0L3N1bnJwYy9ycGNiX2NsbnQuYy02MTktXFx0Y2FzZSBBRl9JTkVUOlxcbm5ldC9zdW5ycGMvcnBjYl9jbG50LmM6NjIwOlxcdFxcdHJldHVybiBycGNiX3JlZ2lzdGVyX2luZXQ0KHNuLCBhZGRyZXNzLCBcXHUwMDI2bXNnKTtcXG5uZXQvc3VucnBjL3JwY2JfY2xudC5jLTYyMS1cXHRjYXNlIEFGX0lORVQ2Olxcbm5ldC9zdW5ycGMvcnBjYl9jbG50LmM6NjIyOlxcdFxcdHJldHVybiBycGNiX3JlZ2lzdGVyX2luZXQ2KHNuLCBhZGRyZXNzLCBcXHUwMDI2bXNnKTtcXG5uZXQvc3VucnBjL3JwY2JfY2xudC5jLTYyMy1cXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE5OjI1OjEyLjMwMzk4MDEyNloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTcyMDMzMTM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgU3VuUlBDIFN1YnN5c3RlbSBDaGFuZ2VzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIEkgc2VlIHdlJ3JlIGRlYWxpbmcgd2l0aCBleHBvcnRlZCBmdW5jdGlvbnM6IGBycGNiX3JlZ2lzdGVyYCwgYHJwY2JfdjRfcmVnaXN0ZXJgLCBgc3ZjX3JlZ2lzdGVyYCwgYW5kIGBzdmNfZ2VuZXJpY19ycGNiaW5kX3NldGAuIFRoYXQncyBhIGNsZWFyIGluZGljYXRvciB0aGlzIGlzIHRvdWNoaW5nIHRoZSBjb3JlIG9mIHRoZSBSUEMgYmluZGluZyBwcm9jZXNzLiBUaGUgaW1wb3J0YW50IGNoYW5nZSBpcyB0aGUgYWRkaXRpb24gb2YgYSB0aW1lb3V0IHRvIGxvY2FsIHJwY2JpbmQgY2FsbHMsIGFuZCB0aGUgaGFuZGxpbmcgb2YgYC1FVElNRURPVVRgIHdpdGhpbiBgc3ZjX3JlZ2lzdGVyYCBhbmQgYHN2Y19nZW5lcmljX3JwY2JpbmRfc2V0YC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBub3QganVzdCBhIGNvc21ldGljIG9uZTsgaXQgZGlyZWN0bHkgaW1wYWN0cyBob3cgc2VydmljZXMgcmVnaXN0ZXIgYW5kIGludGVyYWN0IHdpdGggdGhlIHJwY2JpbmQgZGFlbW9uLiBHaXZlbiB0aGUgcG90ZW50aWFsIGZvciBzdWJ0bGUgdGltaW5nLXJlbGF0ZWQgaXNzdWVzIHdpdGggdGhlc2Uga2luZHMgb2YgY2hhbmdlcywgdGhpcyBpcyAqYWJzb2x1dGVseSogc29tZXRoaW5nIHRoYXQgbmVlZHMgZnV6emluZy4gVGhlIGNvbmZpZyBvcHRpb24gdGllZCB0byB0aGlzIGlzIGBTVU5SUENgLCBzbyBmaXJzdCBJJ2xsIHF1aWNrbHkgY2hlY2sgaXRzIGRlcGVuZGVuY2llcyB0byBnZXQgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgd2lkZXIgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTQ3MCwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxOToyNToxNi40NzYwMTU3NTlaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxMDcxODM3NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGVwZW5kcyBvbi4qU1VOUlBDXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL25mcy9uZnMtcmRtYS5yc3Q9MzU9dXNlIHdpdGggTkZTL1JETUEuXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL25mcy9uZnMtcmRtYS5yc3QtMTM0LSAgYXJlIHR1cm5lZCBvbi4gVGhlIE5GUy9SRE1BIGNsaWVudCBhbmQgc2VydmVyIGFyZSBjb25maWd1cmVkIHZpYSB0aGUgaGlkZGVuXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9uZnMvbmZzLXJkbWEucnN0OjEzNTogIFNVTlJQQ19YUFJUX1JETUEgY29uZmlnIG9wdGlvbiB0aGF0IGRlcGVuZHMgb24gU1VOUlBDIGFuZCBJTkZJTklCQU5ELiBUaGVcXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL25mcy9uZnMtcmRtYS5yc3QtMTM2LSAgdmFsdWUgb2YgU1VOUlBDX1hQUlRfUkRNQSB3aWxsIGJlOlxcbi0tXFxuZnMvbmZzL0tjb25maWc9MTk4PWNvbmZpZyBORlNfREVCVUdcXG5mcy9uZnMvS2NvbmZpZy0xOTktXFx0Ym9vbFxcbmZzL25mcy9LY29uZmlnOjIwMDpcXHRkZXBlbmRzIG9uIE5GU19GUyBcXHUwMDI2XFx1MDAyNiBTVU5SUENfREVCVUdcXG5mcy9uZnMvS2NvbmZpZy0yMDEtXFx0ZGVmYXVsdCB5XFxuLS1cXG5saWIvS2NvbmZpZy5kZWJ1Zz0yMTY5PWNvbmZpZyBGQUlMX1NVTlJQQ1xcbmxpYi9LY29uZmlnLmRlYnVnLTIxNzAtXFx0Ym9vbCBcXFwiRmF1bHQtaW5qZWN0aW9uIGNhcGFiaWxpdHkgZm9yIFN1blJQQ1xcXCJcXG5saWIvS2NvbmZpZy5kZWJ1ZzoyMTcxOlxcdGRlcGVuZHMgb24gRkFVTFRfSU5KRUNUSU9OX0RFQlVHX0ZTIFxcdTAwMjZcXHUwMDI2IFNVTlJQQ19ERUJVR1xcbmxpYi9LY29uZmlnLmRlYnVnLTIxNzItXFx0aGVscFxcbi0tXFxubmV0L0tjb25maWc9OTQ9Y29uZmlnIE5FVF9IQU5EU0hBS0VcXG5uZXQvS2NvbmZpZy05NS1cXHRib29sXFxubmV0L0tjb25maWc6OTY6XFx0ZGVwZW5kcyBvbiBTVU5SUEMgfHwgTlZNRV9UQVJHRVRfVENQIHx8IE5WTUVfVENQXFxubmV0L0tjb25maWctOTctXFx0ZGVmYXVsdCB5XFxuLS1cXG5uZXQvc3VucnBjL0tjb25maWc9MTE9Y29uZmlnIFNVTlJQQ19CQUNLQ0hBTk5FTFxcbm5ldC9zdW5ycGMvS2NvbmZpZy0xMi1cXHRib29sXFxubmV0L3N1bnJwYy9LY29uZmlnOjEzOlxcdGRlcGVuZHMgb24gU1VOUlBDXFxubmV0L3N1bnJwYy9LY29uZmlnLTE0LVxcbm5ldC9zdW5ycGMvS2NvbmZpZz0xNT1jb25maWcgU1VOUlBDX1NXQVBcXG5uZXQvc3VucnBjL0tjb25maWctMTYtXFx0Ym9vbFxcbm5ldC9zdW5ycGMvS2NvbmZpZzoxNzpcXHRkZXBlbmRzIG9uIFNVTlJQQ1xcbm5ldC9zdW5ycGMvS2NvbmZpZy0xOC1cXG5uZXQvc3VucnBjL0tjb25maWc9MTk9Y29uZmlnIFJQQ1NFQ19HU1NfS1JCNVxcbm5ldC9zdW5ycGMvS2NvbmZpZy0yMC1cXHR0cmlzdGF0ZSBcXFwiU2VjdXJlIFJQQzogS2VyYmVyb3MgViBtZWNoYW5pc21cXFwiXFxubmV0L3N1bnJwYy9LY29uZmlnOjIxOlxcdGRlcGVuZHMgb24gU1VOUlBDIFxcdTAwMjZcXHUwMDI2IENSWVBUT1xcbm5ldC9zdW5ycGMvS2NvbmZpZy0yMi1cXHRkZWZhdWx0IHlcXG4tLVxcbm5ldC9zdW5ycGMvS2NvbmZpZz0zNj1jb25maWcgU1VOUlBDX0RFQlVHXFxubmV0L3N1bnJwYy9LY29uZmlnLTM3LVxcdGJvb2wgXFxcIlJQQzogRW5hYmxlIGRwcmludGsgZGVidWdnaW5nXFxcIlxcbm5ldC9zdW5ycGMvS2NvbmZpZzozODpcXHRkZXBlbmRzIG9uIFNVTlJQQyBcXHUwMDI2XFx1MDAyNiBTWVNDVExcXG5uZXQvc3VucnBjL0tjb25maWctMzktXFx0c2VsZWN0IERFQlVHX0ZTXFxuLS1cXG5uZXQvc3VucnBjL0tjb25maWc9NTA9Y29uZmlnIFNVTlJQQ19ERUJVR19UUkFDRVxcbm5ldC9zdW5ycGMvS2NvbmZpZy01MS1cXHRib29sIFxcXCJSUEM6IFNlbmQgZGZwcmludGsoKSBvdXRwdXQgdG8gdGhlIHRyYWNlIGJ1ZmZlclxcXCJcXG5uZXQvc3VucnBjL0tjb25maWc6NTI6XFx0ZGVwZW5kcyBvbiBTVU5SUENfREVCVUcgXFx1MDAyNlxcdTAwMjYgVFJBQ0lOR1xcbm5ldC9zdW5ycGMvS2NvbmZpZy01My1cXHRkZWZhdWx0IG5cXG4tLVxcbm5ldC9zdW5ycGMvS2NvbmZpZz02ND1jb25maWcgU1VOUlBDX1hQUlRfUkRNQVxcbm5ldC9zdW5ycGMvS2NvbmZpZy02NS1cXHR0cmlzdGF0ZSBcXFwiUlBDLW92ZXItUkRNQSB0cmFuc3BvcnRcXFwiXFxubmV0L3N1bnJwYy9LY29uZmlnOjY2OlxcdGRlcGVuZHMgb24gU1VOUlBDIFxcdTAwMjZcXHUwMDI2IElORklOSUJBTkQgXFx1MDAyNlxcdTAwMjYgSU5GSU5JQkFORF9BRERSX1RSQU5TXFxubmV0L3N1bnJwYy9LY29uZmlnLTY3LVxcdGRlZmF1bHQgU1VOUlBDIFxcdTAwMjZcXHUwMDI2IElORklOSUJBTkRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTk6MjU6MTkuNTgzMjA1MTI4WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNzU4MDYyODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkFuYWx5emluZyB0aGUgU1VOUlBDIENvbmZpZ3VyYXRpb24gT3B0aW9uKipcblxuUmlnaHQsIHNvIGBTVU5SUENgLiBJdCBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIG9uIHRoZSBzdXJmYWNlIOKAkyBpdCdzIGEgdHJpc3RhdGUgb3B0aW9uIGFuZCBkb2Vzbid0IGV4cGxpY2l0bHkgcmVseSBvbiBhbnkgb3RoZXIgY29uZmlndXJhdGlvbnMsIGJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlLCBsZXQncyBqdXN0IG1ha2Ugc3VyZS4gQmVzdCB0byBlcnIgb24gdGhlIHNpZGUgb2YgY2F1dGlvbi4gTGV0IG1lIGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMuIEhtbSwgbGV0IG1lIGNvbnN1bHQgdGhlIGBuZXQvc3VucnBjL0tjb25maWdgIGZpbGUuIFRoYXQncyB0aGUgZGVmaW5pdGl2ZSBzb3VyY2UuIEkgbmVlZCB0byBnZXQgaW50byB0aGUgZGV0YWlscyBvZiB0aGUgZGVwZW5kZW5jaWVzIGJlZm9yZSBtYWtpbmcgYW55IGRlY2lzaW9ucy4gVGhhdCdzIHdoZXJlIEkgbmVlZCB0byBsb29rLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDY4MywiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE5OjI1OjIyLjk1OTAxMzQzOFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjE5MjEzODYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFNVTlJQQ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc3VucnBjL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3N1bnJwYy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxubmV0L3N1bnJwYy9LY29uZmlnOjI6Y29uZmlnIFNVTlJQQ1xcbm5ldC9zdW5ycGMvS2NvbmZpZy0zLVxcdHRyaXN0YXRlXFxuLS1cXG5uZXQvc3VucnBjL0tjb25maWctNS1cXG5uZXQvc3VucnBjL0tjb25maWc6Njpjb25maWcgU1VOUlBDX0dTU1xcbm5ldC9zdW5ycGMvS2NvbmZpZy03LVxcdHRyaXN0YXRlXFxuLS1cXG5uZXQvc3VucnBjL0tjb25maWctMTAtXFxubmV0L3N1bnJwYy9LY29uZmlnOjExOmNvbmZpZyBTVU5SUENfQkFDS0NIQU5ORUxcXG5uZXQvc3VucnBjL0tjb25maWctMTItXFx0Ym9vbFxcbi0tXFxubmV0L3N1bnJwYy9LY29uZmlnLTE0LVxcbm5ldC9zdW5ycGMvS2NvbmZpZzoxNTpjb25maWcgU1VOUlBDX1NXQVBcXG5uZXQvc3VucnBjL0tjb25maWctMTYtXFx0Ym9vbFxcbi0tXFxubmV0L3N1bnJwYy9LY29uZmlnPTE5PWNvbmZpZyBSUENTRUNfR1NTX0tSQjVcXG4tLVxcbm5ldC9zdW5ycGMvS2NvbmZpZy0zNS1cXG5uZXQvc3VucnBjL0tjb25maWc6MzY6Y29uZmlnIFNVTlJQQ19ERUJVR1xcbm5ldC9zdW5ycGMvS2NvbmZpZy0zNy1cXHRib29sIFxcXCJSUEM6IEVuYWJsZSBkcHJpbnRrIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9zdW5ycGMvS2NvbmZpZy00OS1cXG5uZXQvc3VucnBjL0tjb25maWc6NTA6Y29uZmlnIFNVTlJQQ19ERUJVR19UUkFDRVxcbm5ldC9zdW5ycGMvS2NvbmZpZy01MS1cXHRib29sIFxcXCJSUEM6IFNlbmQgZGZwcmludGsoKSBvdXRwdXQgdG8gdGhlIHRyYWNlIGJ1ZmZlclxcXCJcXG4tLVxcbm5ldC9zdW5ycGMvS2NvbmZpZy02My1cXG5uZXQvc3VucnBjL0tjb25maWc6NjQ6Y29uZmlnIFNVTlJQQ19YUFJUX1JETUFcXG5uZXQvc3VucnBjL0tjb25maWctNjUtXFx0dHJpc3RhdGUgXFxcIlJQQy1vdmVyLVJETUEgdHJhbnNwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxOToyNToyMy4wMjA5NDA1NTRaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjAwNzA1MDAzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBUcmlzdGF0ZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBPcHRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHRyaXN0YXRlIG9wdGlvbiwgYW5kIGltbWVkaWF0ZWx5IG15IG1pbmQganVtcHMgdG8gdGhlIGxhY2sgb2YgYW55IG9idmlvdXMgZGVwZW5kZW5jaWVzLiBUaGF0IGZlZWxzIGEgYml0IG9kZCwgZG9lc24ndCBpdD8gTW9zdCBvZiB0aGUgdGltZSwgd2hlbiBJIHNlZSBhIHRyaXN0YXRlIG9wdGlvbiBpbiB0aGUga2VybmVsIGNvbmZpZywgaXQncyB0aWVkIHRvIHNvbWV0aGluZyBlbHNlLCBhIHBhcmVudCBvcHRpb24gdGhhdCBnb3Zlcm5zIGl0cyBzZWxlY3Rpb24sIG9yIHBlcmhhcHMgYW5vdGhlciwgc2ltaWxhciBmdW5jdGlvbi5cblxuQnV0LCBoYW5nIG9uLCBob3cgKmlzKiB0aGlzIHRoaW5nIHNlbGVjdGVkPyBUaGF0J3MgdGhlIHJlYWwgcXVlc3Rpb24uIE15IGludHVpdGlvbiBpbW1lZGlhdGVseSBmbGFncyB0aGluZ3MgbGlrZSBgTkZTX0ZTYCBvciBgTkZTRGAgYXMgdGhlIHVzdWFsIHN1c3BlY3RzIHdoZW4gYFNVTlJQQ2AgaXMgaW52b2x2ZWQuIE15IHRyYWluIG9mIHRob3VnaHQgYWx3YXlzIHRlbmRzIHRvd2FyZCB0aGUgdHJpZWQtYW5kLXRydWUgcGF0aHdheXMgdGhhdCBJJ20gZmFtaWxpYXIgd2l0aC4gXG5cbkkga25vdyBJIGNhbid0IHJlbHkgb24gaW50dWl0aW9uIGFsb25lLCB0aW1lIHRvIGhlYWQgc3RyYWlnaHQgdG8gdGhlIHNvdXJjZS4gVGhlIG5leHQgdGhpbmcgSSdtIGdvaW5nIHRvIGRvIGlzIGRpdmUgaW50byBgZnMvbmZzL0tjb25maWdgLiBUaGF0J3Mgd2hlcmUgSSdsbCBmaW5kIHRoZSBkZWZpbml0aXZlIGFuc3dlci4gSSdsbCBzY291ciB0aGF0IGZpbGUgZm9yIGRlcGVuZGVuY2llcywgbWVudSBlbnRyaWVzLCBhbmQgYW55IGNsdWVzIGFib3V0IGhvdyB0aGlzIG9wdGlvbiBnZXRzIHRyaWdnZXJlZC4gVGhhdCBLY29uZmlnIGZpbGUgaXMgdGhlIHVsdGltYXRlIGF1dGhvcml0eSBpbiB0aGlzIGNhc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMjkzLCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTk6MjU6MjkuMDI3OTkzNjk3WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjAyMDgwNDg0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNlbGVjdCBTVU5SUENcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL0tjb25maWc9MzgyPWNvbmZpZyBORlNfQ09NTU9OX0xPQ0FMSU9fU1VQUE9SVFxcbi0tXFxuZnMvS2NvbmZpZy0zODYtXFx0ZGVmYXVsdCBtIGlmIE5GU0Q9bSBcXHUwMDI2XFx1MDAyNiBORlNfRlM9bVxcbmZzL0tjb25maWc6Mzg3OlxcdHNlbGVjdCBTVU5SUENcXG5mcy9LY29uZmlnLTM4OC1cXG4tLVxcbmZzL25mcy9LY29uZmlnPTI9Y29uZmlnIE5GU19GU1xcbi0tXFxuZnMvbmZzL0tjb25maWctNi1cXHRzZWxlY3QgTE9DS0RcXG5mcy9uZnMvS2NvbmZpZzo3OlxcdHNlbGVjdCBTVU5SUENcXG5mcy9uZnMvS2NvbmZpZy04LVxcdHNlbGVjdCBORlNfQ09NTU9OXFxuLS1cXG5mcy9uZnMvS2NvbmZpZz03Nz1jb25maWcgTkZTX1Y0XFxuLS1cXG5mcy9uZnMvS2NvbmZpZy04MC1cXHRzZWxlY3QgS0VZU1xcbmZzL25mcy9LY29uZmlnOjgxOlxcdHNlbGVjdCBTVU5SUENfQkFDS0NIQU5ORUxcXG5mcy9uZnMvS2NvbmZpZy04Mi1cXHRoZWxwXFxuLS1cXG5mcy9uZnMvS2NvbmZpZz05Mj1jb25maWcgTkZTX1NXQVBcXG4tLVxcbmZzL25mcy9LY29uZmlnLTk1LVxcdGRlcGVuZHMgb24gTkZTX0ZTIFxcdTAwMjZcXHUwMDI2IFNXQVBcXG5mcy9uZnMvS2NvbmZpZzo5NjpcXHRzZWxlY3QgU1VOUlBDX1NXQVBcXG5mcy9uZnMvS2NvbmZpZy05Ny1cXHRoZWxwXFxuLS1cXG5mcy9uZnNkL0tjb25maWc9Mj1jb25maWcgTkZTRFxcbi0tXFxuZnMvbmZzZC9LY29uZmlnLTExLVxcdHNlbGVjdCBMT0NLRFxcbmZzL25mc2QvS2NvbmZpZzoxMjpcXHRzZWxlY3QgU1VOUlBDXFxuZnMvbmZzZC9LY29uZmlnLTEzLVxcdHNlbGVjdCBFWFBPUlRGU1xcbi0tXFxubmV0L3N1bnJwYy9LY29uZmlnPTE5PWNvbmZpZyBSUENTRUNfR1NTX0tSQjVcXG4tLVxcbm5ldC9zdW5ycGMvS2NvbmZpZy0yMi1cXHRkZWZhdWx0IHlcXG5uZXQvc3VucnBjL0tjb25maWc6MjM6XFx0c2VsZWN0IFNVTlJQQ19HU1NcXG5uZXQvc3VucnBjL0tjb25maWctMjQtXFx0c2VsZWN0IENSWVBUT19LUkI1XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE5OjI1OjMxLjIzMDA3OTg4MVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MDQwMDIxODExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IENvbmZpZ3VyYXRpb24gRGVjaXNpb25zIGZvciBORlMgU3VwcG9ydCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyBORlMgaXMgY29uZmlndXJlZCwgYW5kIGl0J3MgY2xlYXIgdGhhdCBib3RoIGBORlNfRlNgIGFuZCBgTkZTRGAgZGVwZW5kIG9uIGBTVU5SUENgLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIGluY2x1ZGUgYm90aCBgTkZTX0ZTYCBhbmQgYE5GU0RgIGluIHRoZSBFbmFibGVDb25maWdzLCBvciBwZXJoYXBzIGp1c3QgYFNVTlJQQ2AuIEFmdGVyIGEgYml0IG1vcmUgdGhvdWdodCwgSSByZWFsaXplIHRoYXQgaWYgYFNVTlJQQ2AgaXMgYSB0cmlzdGF0ZSwgYW5kIGl0IHVzdWFsbHkgaXMsIHRoZW4gZW5hYmxpbmcgaXQgZGlyZWN0bHkgc2hvdWxkIGJlIHN1ZmZpY2llbnQuIEhvd2V2ZXIsIEkgd2FudCB0byBiZSAqYWJzb2x1dGVseSogY2VydGFpbiB0aGF0IGBORlNfRlNgIGFuZCBgTkZTRGAgYXJlIGNvbXBpbGVkIGFuZCByZWFjaGFibGUsIGFzIHRoZXkncmUgdGhlIGNvcmUgY29tcG9uZW50cyBoZXJlLiBUaGVyZWZvcmUsIEknbSBnb2luZyB0byBleHBsaWNpdGx5IGFkZCBgU1VOUlBDYCwgYE5GU19GU2AsIGFuZCBgTkZTRGAgdG8gdGhlIGNvbmZpZ3VyYXRpb25zLiBUaGF0IHNob3VsZCBwcm92aWRlIHRoZSBtb3N0IHJvYnVzdCBhbmQgZXhwbGljaXQgZGVwZW5kZW5jeSBoYW5kbGluZy5cblxuTm93LCByZWdhcmRpbmcgdGhlIGZvY3VzIHN5bWJvbHMgZm9yIHZlcmlmaWNhdGlvbiwgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGVzZSBrZXkgZnVuY3Rpb25zIGFyZSBhdmFpbGFibGUgZm9yIGluc3BlY3Rpb246IGBzdmNfcmVnaXN0ZXJgLCBgc3ZjX2dlbmVyaWNfcnBjYmluZF9zZXRgLCBgcnBjYl9yZWdpc3RlcmAsIGBycGNiX3Y0X3JlZ2lzdGVyYCwgYW5kIGBycGNiX2NyZWF0ZV9sb2NhbGAuXG5cbkp1c3QgdG8gYmUgY29tcGxldGVseSB0aG9yb3VnaCwgSSdsbCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0IGBycGNiX2NyZWF0ZV9sb2NhbGAgaXMgZXhwb3J0ZWQgdG8gZW5zdXJlIGl0IGlzIGFjY2Vzc2libGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMDU0LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjA5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE5OjI1OjM3LjI3MDEwNDQ3MloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODIxMzcyNzQsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKnJwY2JfY3JlYXRlX2xvY2FsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zdW5ycGMvcnBjYl9jbG50LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE5OjI1OjM3LjM1MjI1MDMyNloiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDU3NDI0MjA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGlubmVyIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBEYXRhJ3MgQWNjZXNzaWJpbGl0eSoqXG5cbkFscmlnaHQsIHNvIHRoZSBkYXRhIGlzbid0ICpleHBsaWNpdGx5KiBleHBvcnRlZCwgbWVhbmluZyBpdCdzIG5vdCBiZWluZyBwcmVzZW50ZWQgZGlyZWN0bHkgYXMgYSBzdGFuZGFyZCwgcmVhZGlseSBhdmFpbGFibGUgZGF0YSBzdHJlYW0uIEJ1dCwgYW5kIHRoaXMgaXMgY3J1Y2lhbCwgaXQgYWxzbyBpc24ndCBcInN0YXRpY1wiLiBUaGF0IG1lYW5zIGl0J3MgbGlrZWx5IGJlaW5nIGdlbmVyYXRlZCBvciB1cGRhdGVkIGR5bmFtaWNhbGx5LCBhbmQgdGhlcmVmb3JlICphY2Nlc3NpYmxlKiBpbiBzb21lIGZhc2hpb24sIGV2ZW4gaWYgaW5kaXJlY3RseS4gVGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHBpbnBvaW50ICpob3cqIHRoYXQgYWNjZXNzaWJpbGl0eSBpcyBhY2hpZXZlZC4gTGV0J3MgZGVsdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIHRoZSBgcnBjYl9yZWdpc3RlcmAgZnVuY3Rpb24uIElmIHRoYXQncyBleHBvcnRlZCwgaXQncyBhIHN0cm9uZyBpbmRpY2F0b3IgdGhhdCB0aGlzIHByb2Nlc3MgaXMgcGFydGljaXBhdGluZyBpbiBhIHJlbW90ZSBwcm9jZWR1cmUgY2FsbCBhbmQgdGhhdCBjb3VsZCBiZSBhIHNpZ25pZmljYW50IGNsdWUgdG8gaG93IHRoaXMgd29ya3MsIHdoaWNoIHdpbGwgdWx0aW1hdGVseSBndWlkZSBtZSB0byB0aGUgdWx0aW1hdGUgc291cmNlIG9mIHRydXRoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjU5NiwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE5OjI1OjQwLjgwOTY3NzM4WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDU0NDM2NiwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qcnBjYl9yZWdpc3RlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc3VucnBjL3JwY2JfY2xudC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxOToyNTo0MC44NzAyMjc4MTZaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE4MzgwNDQyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGF0IGNvZGU6XG5cbioqRmluZGluZyB0aGUgRXhwb3J0ZWQgU3ltYm9scyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaW5kIG91dCB3aHkgdGhlc2UgYXJlbid0IHNob3dpbmcgdXAgYXMgZXhwb3J0ZWQuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGNoZWNrIHdoZXJlIHRoZXNlIHN5bWJvbHMgYXJlIGRlZmluZWQsIGFuZCBzcGVjaWZpY2FsbHksIGhvdyB0aGV5IGFyZSBtYWRlIGF2YWlsYWJsZSB0byBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsLiBTaW5jZSB0aGVzZSBhcmUgbGlrZWx5IFJQQy1yZWxhdGVkLCBgbmV0L3N1bnJwYy9ycGNiX2NsbnQuY2AgaXMgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgbG9va2luZywgZ2l2ZW4gdGhhdCdzIHdoZXJlIHRoZSBjbGllbnQtc2lkZSBSUEMgY29kZSByZXNpZGVzLiBNeSBzcGVjaWZpYyBmb2N1cz8gSSdtIGdvaW5nIHRvIHNjYW4gdGhhdCBmaWxlIGZvciB0aGUgYEVYUE9SVF9TWU1CT0xgIG1hY3JvLiBUaGF0J3MgdGhlIGNydWNpYWwga2V5d29yZCwgdGhlIHNpZ25hbCB0byB0aGUgbGlua2VyIHRoYXQgdGhlc2Ugc3ltYm9scyBhcmUgbWVhbnQgdG8gYmUgYXZhaWxhYmxlIGV4dGVybmFsbHkuIElmIHRoZXkncmUgbm90IHRoZXJlLCBJIGtub3cgSSd2ZSBmb3VuZCBteSBwcm9ibGVtIGFuZCBjYW4gYWRqdXN0IGFzIHJlcXVpcmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjg2MywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE5OjI1OjQ1LjA1NDAzNDg3OVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAzNzg3NjkyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0xcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3N1bnJwYy9ycGNiX2NsbnQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc3VucnBjL3JwY2JfY2xudC5jPTY3Nz12b2lkIHJwY2JfZ2V0cG9ydF9hc3luYyhzdHJ1Y3QgcnBjX3Rhc2sgKnRhc2spXFxuLS1cXG5uZXQvc3VucnBjL3JwY2JfY2xudC5jLTc5Ny19XFxubmV0L3N1bnJwYy9ycGNiX2NsbnQuYzo3OTg6RVhQT1JUX1NZTUJPTF9HUEwocnBjYl9nZXRwb3J0X2FzeW5jKTtcXG5uZXQvc3VucnBjL3JwY2JfY2xudC5jLTc5OS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTk6MjU6NDUuMTU3ODY1MzExWiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4MjQxNDQxOTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIHRoZSBSUEMgQmluZGluZ3MqKlxuXG5Pa2F5LCBzbyB0aGUgaW5pdGlhbCBmb2N1cyBpcyBvbiB0aGlzIGBycGNiX2dldHBvcnRfYXN5bmNgIGZ1bmN0aW9uIOKAkyB0aGF0J3MgdGhlIG9ubHkgb25lIGV4cGxpY2l0bHkgZXhwb3J0ZWQsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBCdXQgaG9sZCBvbiwgSSdtIHNlZWluZyB0aGF0IGBzdmNfcmVnaXN0ZXJgIGFuZCBgc3ZjX2dlbmVyaWNfcnBjYmluZF9zZXRgIGFyZSBhbHNvIGF2YWlsYWJsZS4gVGhhdCdzIHVuZXhwZWN0ZWQuIFdhaXQgYSBzZWNvbmQuLi4gSSByZWNhbGwgYHJwY2JfcmVnaXN0ZXJgIGJlaW5nIHVzZWQgd2l0aGluIHRoZSBgc3VucnBjYCBtb2R1bGUgaXRzZWxmLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIGhvdyB0aGVzZSBwaWVjZXMgZml0IHRvZ2V0aGVyLiBNeSBuZXh0IHN0ZXAgaXMgZGVmaW5pdGVseSB0byBkaXZlIGludG8gYG5ldC9zdW5ycGMvc3ZjLmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYHN2Y19yZWdpc3RlcmAsIGBzdmNfZ2VuZXJpY19ycGNiaW5kX3NldGAsIGFuZCBgcnBjYl9yZWdpc3RlcmAuIEl0IHNlZW1zIGxpa2UgdGhvc2UgdGhyZWUgbWlnaHQgYmUgdXNlZCBzb21laG93IGluIGNvbmp1bmN0aW9uIHRvIHJlZ2lzdGVyLCBhbmQgc2V0IHRoZSBiaW5kaW5ncyBpbiBhIGdlbmVyaWMgbWFubmVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgZ29pbmcgb24gYmVoaW5kIHRoZSBzY2VuZXMgd2l0aCB0aGlzIFJQQyBiaW5kaW5nIHByb2Nlc3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMjI2LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTk6MjU6NDguOTgyMDExNjJaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczOTQzMzk0LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MLipzdmNfcmVnaXN0ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3N1bnJwYy9zdmMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTk6MjU6NDkuMDU1OTc0NzE0WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU2NjMzMzQwODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipBIEtlcm5lbCBNb2R1bGUgRmxhZ2dlZCBmb3IgUmV2aWV3KipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4uLiBJJ20gcmV2aWV3aW5nIHRoaXMgY29kZSBkaWZmIGFuZCB0aGF0IGBFWFBPUlRfU1lNQk9MX0dQTChzdmNfZ2VuZXJpY19ycGNiaW5kX3NldCk7YCBjYXVnaHQgbXkgZXllIGltbWVkaWF0ZWx5LiBOb3csIHRoYXQncyBub3Qgc29tZXRoaW5nIHlvdSBzZWUganVzdCBhbnl3aGVyZS4gVGhlIGBFWFBPUlRfU1lNQk9MX0dQTGAgbWFjcm8gaXMgc3BlY2lmaWNhbGx5IGZvciBleHBvcnRpbmcgc3ltYm9scyB0aGF0IGFyZSBsaWNlbnNlZCB1bmRlciB0aGUgR1BMLCBtZWFuaW5nIHRoaXMgZnVuY3Rpb24sIGBzdmNfZ2VuZXJpY19ycGNiaW5kX3NldGAsIGlzIGxpa2VseSBpbnRlbmRlZCBmb3IgdXNlIGJ5IEdQTC1saWNlbnNlZCBrZXJuZWwgbW9kdWxlcy4gSXQncyBhIGtleSBwaWVjZSBvZiB0aGUgUlBDIGJpbmRpbmcgZnVuY3Rpb25hbGl0eSwgbWFraW5nIG1lIHRoaW5rIGl04oCZcyBwYXJ0IG9mIGEgY29yZSBuZXR3b3JrIHNlcnZpY2UuIFNvIHRoaXMgY2hhbmdlIG11c3QgYmUgcmVsYXRlZCB0byBzb21lIHNpZ25pZmljYW50IFJQQyB1cGRhdGUuIEkgbmVlZCB0byBkaWcgaW50byBob3cgdGhpcyBmdW5jdGlvbiBpcyB1c2VkIGFuZCB3aHkgaXQgbmVlZHMgdG8gYmUgbWFkZSBhdmFpbGFibGUuIEkgYWxzbyBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgbGljZW5zaW5nIGlzIGFwcHJvcHJpYXRlIGFuZCB0aGF0IGl0cyBpbmNsdXNpb24gZG9lc24ndCBpbnRyb2R1Y2UgYW55IGNvbXBhdGliaWxpdHkgaXNzdWVzIHdpdGggZXhpc3RpbmcgbW9kdWxlcy4gVGltZSB0byBkaXZlIGRlZXBlciBhbmQgc2VlIHdoYXQgdGhlIHdob2xlIGNoYW5nZSBpcyBhYm91dCFcblxuXG4iLCJJbnB1dFRva2VucyI6MTM1NjIsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxOToyNTo1NC43MTkzMTI2NzJaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5MDc1MTc2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKnN2Y19nZW5lcmljX3JwY2JpbmRfc2V0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zdW5ycGMvc3ZjLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3N1bnJwYy9zdmMuYz0xMTgyPWludCBzdmNfZ2VuZXJpY19ycGNiaW5kX3NldChzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvc3VucnBjL3N2Yy5jLTEyMTQtfVxcbm5ldC9zdW5ycGMvc3ZjLmM6MTIxNTpFWFBPUlRfU1lNQk9MX0dQTChzdmNfZ2VuZXJpY19ycGNiaW5kX3NldCk7XFxubmV0L3N1bnJwYy9zdmMuYy0xMjE2LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxOToyNTo1NC43NzgzOTE3ODhaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI0NDk1MDE1NTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgYEVYUE9SVF9TWU1CT0xgIGluIGBuZXQvc3VucnBjL3N2Yy5jYCoqXG5cbk9rYXksIEknbSB0aGlua2luZyBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gd2hlcmUgZXhhY3RseSBgRVhQT1JUX1NZTUJPTGAgaXMgdXNlZCB3aXRoaW4gdGhlIFN1blJQQyBzZXJ2aWNlIGNvZGUuIEkgc3BlY2lmaWNhbGx5IHdhbnQgdG8gcmV2aXNpdCBgbmV0L3N1bnJwYy9zdmMuY2AuIEl0J3MgYSBrZXkgZmlsZSwgc28gaXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gdW5kZXJzdGFuZCB0aGUgYnJvYWRlciBpbXBsaWNhdGlvbnMgYW5kIGNvbnRleHQuIEkgc3VzcGVjdCB0aGVyZSdzIGEgcmVhc29uIEknbSBmb2N1c2luZyBoZXJlLCBhbmQgaXQncyBwcm9iYWJseSByZWxhdGVkIHRvIHN5bWJvbCB2aXNpYmlsaXR5IG9yIGV4dGVybmFsIG1vZHVsZSBpbnRlcmFjdGlvbnMuIEknbGwgbmVlZCB0byByZW1lbWJlciB0aGUga2VybmVsJ3MgbW9kdWxlIGxvYWRpbmcgbWVjaGFuaXNtIGFuZCBob3cgYEVYUE9SVF9TWU1CT0xgIHBsYXlzIGEgcm9sZSBpbiBtYWtpbmcgZnVuY3Rpb25zIG9yIHZhcmlhYmxlcyBhY2Nlc3NpYmxlIG91dHNpZGUgdGhlIG1vZHVsZSBpbiB3aGljaCB0aGV5J3JlIGRlZmluZWQuIFRpbWUgdG8gZ28gZGlnZ2luZyB0aHJvdWdoIHRoZSBzb3VyY2UgY29kZSFcblxuXG4iLCJJbnB1dFRva2VucyI6MTM5NTAsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxOToyNjowNy4yMjc4OTc0OTNaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxMDQ1NzA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0xcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3N1bnJwYy9zdmMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc3VucnBjL3N2Yy5jPTExND1pbnQgc3VucnBjX3NldF9wb29sX21vZGUoY29uc3QgY2hhciAqdmFsKVxcbi0tXFxubmV0L3N1bnJwYy9zdmMuYy0xMTctfVxcbm5ldC9zdW5ycGMvc3ZjLmM6MTE4OkVYUE9SVF9TWU1CT0woc3VucnBjX3NldF9wb29sX21vZGUpO1xcbm5ldC9zdW5ycGMvc3ZjLmMtMTE5LVxcbi0tXFxubmV0L3N1bnJwYy9zdmMuYz0xMzA9c3VucnBjX2dldF9wb29sX21vZGUoY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSlcXG4tLVxcbm5ldC9zdW5ycGMvc3ZjLmMtMTQ3LX1cXG5uZXQvc3VucnBjL3N2Yy5jOjE0ODpFWFBPUlRfU1lNQk9MKHN1bnJwY19nZXRfcG9vbF9tb2RlKTtcXG5uZXQvc3VucnBjL3N2Yy5jLTE0OS1cXG4tLVxcbm5ldC9zdW5ycGMvc3ZjLmM9NDU4PWludCBzdmNfYmluZChzdHJ1Y3Qgc3ZjX3NlcnYgKnNlcnYsIHN0cnVjdCBuZXQgKm5ldClcXG4tLVxcbm5ldC9zdW5ycGMvc3ZjLmMtNDYzLX1cXG5uZXQvc3VucnBjL3N2Yy5jOjQ2NDpFWFBPUlRfU1lNQk9MX0dQTChzdmNfYmluZCk7XFxubmV0L3N1bnJwYy9zdmMuYy00NjUtXFxuLS1cXG5uZXQvc3VucnBjL3N2Yy5jPTU1OT1zdHJ1Y3Qgc3ZjX3NlcnYgKnN2Y19jcmVhdGUoc3RydWN0IHN2Y19wcm9ncmFtICpwcm9nLCB1bnNpZ25lZCBpbnQgYnVmc2l6ZSxcXG4tLVxcbm5ldC9zdW5ycGMvc3ZjLmMtNTYzLX1cXG5uZXQvc3VucnBjL3N2Yy5jOjU2NDpFWFBPUlRfU1lNQk9MX0dQTChzdmNfY3JlYXRlKTtcXG5uZXQvc3VucnBjL3N2Yy5jLTU2NS1cXG4tLVxcbm5ldC9zdW5ycGMvc3ZjLmM9NTc2PXN0cnVjdCBzdmNfc2VydiAqc3ZjX2NyZWF0ZV9wb29sZWQoc3RydWN0IHN2Y19wcm9ncmFtICpwcm9nLFxcbi0tXFxubmV0L3N1bnJwYy9zdmMuYy01OTMtfVxcbm5ldC9zdW5ycGMvc3ZjLmM6NTk0OkVYUE9SVF9TWU1CT0xfR1BMKHN2Y19jcmVhdGVfcG9vbGVkKTtcXG5uZXQvc3VucnBjL3N2Yy5jLTU5NS1cXG4tLVxcbm5ldC9zdW5ycGMvc3ZjLmM9NjAxPXN2Y19kZXN0cm95KHN0cnVjdCBzdmNfc2VydiAqKnNlcnZwKVxcbi0tXFxubmV0L3N1bnJwYy9zdmMuYy02MzMtfVxcbm5ldC9zdW5ycGMvc3ZjLmM6NjM0OkVYUE9SVF9TWU1CT0xfR1BMKHN2Y19kZXN0cm95KTtcXG5uZXQvc3VucnBjL3N2Yy5jLTYzNS1cXG4tLVxcbm5ldC9zdW5ycGMvc3ZjLmM9NzYxPXZvaWQgc3ZjX3Bvb2xfd2FrZV9pZGxlX3RocmVhZChzdHJ1Y3Qgc3ZjX3Bvb2wgKnBvb2wpXFxuLS1cXG5uZXQvc3VucnBjL3N2Yy5jLTc4My19XFxubmV0L3N1bnJwYy9zdmMuYzo3ODQ6RVhQT1JUX1NZTUJPTF9HUEwoc3ZjX3Bvb2xfd2FrZV9pZGxlX3RocmVhZCk7XFxubmV0L3N1bnJwYy9zdmMuYy03ODUtXFxuLS1cXG5uZXQvc3VucnBjL3N2Yy5jPTc5Nj1pbnQgc3ZjX25ld190aHJlYWQoc3RydWN0IHN2Y19zZXJ2ICpzZXJ2LCBzdHJ1Y3Qgc3ZjX3Bvb2wgKnBvb2wpXFxuLS1cXG5uZXQvc3VucnBjL3N2Yy5jLTgyOS19XFxubmV0L3N1bnJwYy9zdmMuYzo4MzA6RVhQT1JUX1NZTUJPTF9HUEwoc3ZjX25ld190aHJlYWQpO1xcbm5ldC9zdW5ycGMvc3ZjLmMtODMxLVxcbi0tXFxubmV0L3N1bnJwYy9zdmMuYz04NzY9c3ZjX3NldF9wb29sX3RocmVhZHMoc3RydWN0IHN2Y19zZXJ2ICpzZXJ2LCBzdHJ1Y3Qgc3ZjX3Bvb2wgKnBvb2wsXFxuLS1cXG5uZXQvc3VucnBjL3N2Yy5jLTkxMi19XFxubmV0L3N1bnJwYy9zdmMuYzo5MTM6RVhQT1JUX1NZTUJPTF9HUEwoc3ZjX3NldF9wb29sX3RocmVhZHMpO1xcbm5ldC9zdW5ycGMvc3ZjLmMtOTE0LVxcbi0tXFxubmV0L3N1bnJwYy9zdmMuYz05MzM9c3ZjX3NldF9udW1fdGhyZWFkcyhzdHJ1Y3Qgc3ZjX3NlcnYgKnNlcnYsIHVuc2lnbmVkIGludCBtaW5fdGhyZWFkcyxcXG4tLVxcbm5ldC9zdW5ycGMvc3ZjLmMtOTU0LX1cXG5uZXQvc3VucnBjL3N2Yy5jOjk1NTpFWFBPUlRfU1lNQk9MX0dQTChzdmNfc2V0X251bV90aHJlYWRzKTtcXG5uZXQvc3VucnBjL3N2Yy5jLTk1Ni1cXG4tLVxcbm5ldC9zdW5ycGMvc3ZjLmM9OTY5PWJvb2wgc3ZjX3Jxc3RfcmVwbGFjZV9wYWdlKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsIHN0cnVjdCBwYWdlICpwYWdlKVxcbi0tXFxubmV0L3N1bnJwYy9zdmMuYy05ODUtfVxcbm5ldC9zdW5ycGMvc3ZjLmM6OTg2OkVYUE9SVF9TWU1CT0xfR1BMKHN2Y19ycXN0X3JlcGxhY2VfcGFnZSk7XFxubmV0L3N1bnJwYy9zdmMuYy05ODctXFxuLS1cXG5uZXQvc3VucnBjL3N2Yy5jPTEwMjc9c3ZjX2V4aXRfdGhyZWFkKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHApXFxuLS1cXG5uZXQvc3VucnBjL3N2Yy5jLTEwNDEtfVxcbm5ldC9zdW5ycGMvc3ZjLmM6MTA0MjpFWFBPUlRfU1lNQk9MX0dQTChzdmNfZXhpdF90aHJlYWQpO1xcbm5ldC9zdW5ycGMvc3ZjLmMtMTA0My1cXG4tLVxcbm5ldC9zdW5ycGMvc3ZjLmM9MTE4Mj1pbnQgc3ZjX2dlbmVyaWNfcnBjYmluZF9zZXQoc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L3N1bnJwYy9zdmMuYy0xMjE0LX1cXG5uZXQvc3VucnBjL3N2Yy5jOjEyMTU6RVhQT1JUX1NZTUJPTF9HUEwoc3ZjX2dlbmVyaWNfcnBjYmluZF9zZXQpO1xcbm5ldC9zdW5ycGMvc3ZjLmMtMTIxNi1cXG4tLVxcbm5ldC9zdW5ycGMvc3ZjLmM9MTM0ND1zdmNfZ2VuZXJpY19pbml0X3JlcXVlc3Qoc3RydWN0IHN2Y19ycXN0ICpycXN0cCxcXG4tLVxcbm5ldC9zdW5ycGMvc3ZjLmMtMTM5MS19XFxubmV0L3N1bnJwYy9zdmMuYzoxMzkyOkVYUE9SVF9TWU1CT0xfR1BMKHN2Y19nZW5lcmljX2luaXRfcmVxdWVzdCk7XFxubmV0L3N1bnJwYy9zdmMuYy0xMzkzLVxcbi0tXFxubmV0L3N1bnJwYy9zdmMuYz0xNzYxPXUzMiBzdmNfbWF4X3BheWxvYWQoY29uc3Qgc3RydWN0IHN2Y19ycXN0ICpycXN0cClcXG4tLVxcbm5ldC9zdW5ycGMvc3ZjLmMtMTc2OC19XFxubmV0L3N1bnJwYy9zdmMuYzoxNzY5OkVYUE9SVF9TWU1CT0xfR1BMKHN2Y19tYXhfcGF5bG9hZCk7XFxubmV0L3N1bnJwYy9zdmMuYy0xNzcwLVxcbi0tXFxubmV0L3N1bnJwYy9zdmMuYz0xNzk1PWludCBzdmNfZW5jb2RlX3Jlc3VsdF9wYXlsb2FkKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsIHVuc2lnbmVkIGludCBvZmZzZXQsXFxuLS1cXG5uZXQvc3VucnBjL3N2Yy5jLTE4MDAtfVxcbm5ldC9zdW5ycGMvc3ZjLmM6MTgwMTpFWFBPUlRfU1lNQk9MX0dQTChzdmNfZW5jb2RlX3Jlc3VsdF9wYXlsb2FkKTtcXG5uZXQvc3VucnBjL3N2Yy5jLTE4MDItXFxuLS1cXG5uZXQvc3VucnBjL3N2Yy5jPTE4MTQ9Y2hhciAqc3ZjX2ZpbGxfc3ltbGlua19wYXRobmFtZShzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCBzdHJ1Y3Qga3ZlYyAqZmlyc3QsXFxuLS1cXG5uZXQvc3VucnBjL3N2Yy5jLTE4NTAtfVxcbm5ldC9zdW5ycGMvc3ZjLmM6MTg1MTpFWFBPUlRfU1lNQk9MX0dQTChzdmNfZmlsbF9zeW1saW5rX3BhdGhuYW1lKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTk6MjY6MDcuMjg4OTUwNjQ5WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NzUyODQzNDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGVidWdnaW5nIGEgTWlzc2luZyBFeHBvcnQqKlxuXG5Pa2F5LCBzbyBJJ20gZW5jb3VudGVyaW5nIGEgcHJvYmxlbSDigJMgYHN2Y19yZWdpc3RlcmAgaXNuJ3Qgc2hvd2luZyB1cCBhcyBleHBvcnRlZC4gVGhhdCdzIGEgYml0IG9kZC4gTXkgZmlyc3QgaW5zdGluY3QsIGdpdmVuIGl0cyBsaWtlbHkgY29ubmVjdGlvbiB0byBuZXR3b3JrIHNlcnZpY2VzLCBpcyB0byBkb3VibGUtY2hlY2sgdGhlIGBuZXQvc3VucnBjYCBzdWJzeXN0ZW0uIFNwZWNpZmljYWxseSwgSSdsbCBkcmlsbCBkb3duIHRvIGBuZXQvc3VucnBjL3N2Yy5jYC4gVGhhdCBmaWxlIGlzIHRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gYmVnaW4gbXkgaW52ZXN0aWdhdGlvbiBmb3IgdGhlIGRlZmluaXRpb24gYW5kIGV4cG9ydCBvZiBgc3ZjX3JlZ2lzdGVyYC4gTGV0J3Mgc2VlIHdoYXQncyBhY3R1YWxseSBpbiB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU3NzksIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxOToyNjoxMC45NjQyMzcxNThaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkwODU3OTkzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN2Y19yZWdpc3RlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc3VucnBjL3N2Yy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zdW5ycGMvc3ZjLmM9MTEwMj1zdGF0aWMgaW50IF9fc3ZjX3JwY2JfcmVnaXN0ZXI2KHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgdTMyIHByb2dyYW0sXFxuLS1cXG5uZXQvc3VucnBjL3N2Yy5jLTExNDUtICovXFxubmV0L3N1bnJwYy9zdmMuYzoxMTQ2OnN0YXRpYyBpbnQgX19zdmNfcmVnaXN0ZXIoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpwcm9nbmFtZSxcXG5uZXQvc3VucnBjL3N2Yy5jLTExNDctXFx0XFx0XFx0ICBjb25zdCB1MzIgcHJvZ3JhbSwgY29uc3QgdTMyIHZlcnNpb24sXFxuLS1cXG5uZXQvc3VucnBjL3N2Yy5jLTExNjUtXFxubmV0L3N1bnJwYy9zdmMuYzoxMTY2OlxcdHRyYWNlX3N2Y19yZWdpc3Rlcihwcm9nbmFtZSwgdmVyc2lvbiwgZmFtaWx5LCBwcm90b2NvbCwgcG9ydCwgZXJyb3IpO1xcbm5ldC9zdW5ycGMvc3ZjLmMtMTE2Ny1cXHRyZXR1cm4gZXJyb3I7XFxuLS1cXG5uZXQvc3VucnBjL3N2Yy5jPTExNzE9aW50IHN2Y19ycGNiaW5kX3NldF92ZXJzaW9uKHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9zdW5ycGMvc3ZjLmMtMTE3Ni17XFxubmV0L3N1bnJwYy9zdmMuYzoxMTc3OlxcdHJldHVybiBfX3N2Y19yZWdpc3RlcihuZXQsIHByb2dwLVxcdTAwM2VwZ19uYW1lLCBwcm9ncC1cXHUwMDNlcGdfcHJvZyxcXG5uZXQvc3VucnBjL3N2Yy5jLTExNzgtXFx0XFx0XFx0XFx0dmVyc2lvbiwgZmFtaWx5LCBwcm90bywgcG9ydCk7XFxuLS1cXG5uZXQvc3VucnBjL3N2Yy5jPTEyMTU9RVhQT1JUX1NZTUJPTF9HUEwoc3ZjX2dlbmVyaWNfcnBjYmluZF9zZXQpO1xcbi0tXFxubmV0L3N1bnJwYy9zdmMuYy0xMjE3LS8qKlxcbm5ldC9zdW5ycGMvc3ZjLmM6MTIxODogKiBzdmNfcmVnaXN0ZXIgLSByZWdpc3RlciBhbiBSUEMgc2VydmljZSB3aXRoIHRoZSBsb2NhbCBwb3J0bWFwcGVyXFxubmV0L3N1bnJwYy9zdmMuYy0xMjE5LSAqIEBzZXJ2OiBzdmNfc2VydiBzdHJ1Y3QgZm9yIHRoZSBzZXJ2aWNlIHRvIHJlZ2lzdGVyXFxuLS1cXG5uZXQvc3VucnBjL3N2Yy5jLTEyMjYtICovXFxubmV0L3N1bnJwYy9zdmMuYzoxMjI3OmludCBzdmNfcmVnaXN0ZXIoY29uc3Qgc3RydWN0IHN2Y19zZXJ2ICpzZXJ2LCBzdHJ1Y3QgbmV0ICpuZXQsXFxubmV0L3N1bnJwYy9zdmMuYy0xMjI4LVxcdFxcdCBjb25zdCBpbnQgZmFtaWx5LCBjb25zdCB1bnNpZ25lZCBzaG9ydCBwcm90byxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTk6MjY6MTEuMDU1MTAxODEyWiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExNDg5MjQ4NzgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6XG5cbioqSW52ZXN0aWdhdGluZyBgc3ZjX3JlZ2lzdGVyYCBpbiBgbmV0L3N1bnJwYy9zdmMuY2AqKlxuXG5Pa2F5LCBJIG5lZWQgdG8gdmVyaWZ5IHNvbWV0aGluZyByZWxhdGVkIHRvIHRoZSBgc3ZjX3JlZ2lzdGVyYCBmdW5jdGlvbiwgbGlrZWx5IHdpdGhpbiB0aGUgY29udGV4dCBvZiBSUEMgc2VydmljZXMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBuYXZpZ2F0ZSB0byB0aGUgYG5ldC9zdW5ycGMvc3ZjLmNgIGZpbGUgd2l0aGluIHRoZSBrZXJuZWwgc291cmNlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgZnVuY3Rpb24gaXMgZXhwb3J0ZWQsIHdoaWNoIG1lYW5zIGl0J3MgaW50ZW5kZWQgdG8gYmUgYWNjZXNzaWJsZSBvdXRzaWRlIG9mIHRoZSBpbW1lZGlhdGUgbW9kdWxlIG9yIGZpbGUuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgZnVuY3Rpb24gZGVmaW5pdGlvbiBpbiBgc3ZjLmNgIHRvIGNvbmZpcm0gaXQncyBkZWNsYXJlZCB3aXRoIGBFWFBPUlRfU1lNQk9MYCBvciBhIHNpbWlsYXIgbWVjaGFuaXNtLCBtYWtpbmcgaXQgdmlzaWJsZSB0byBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsLiBUaGlzIGlzIGEgcHJlbGltaW5hcnkgY2hlY2sgYmVmb3JlIGludmVzdGlnYXRpbmcgZnVydGhlciwgZGVwZW5kaW5nIG9uIHRoZSBjb250ZXh0IG9mIHRoZSBpc3N1ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY0NjUsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxOToyNjoyMi41NDQzNTMyMjVaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMDM3Mjc3MiwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qc3ZjX3JlZ2lzdGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zdW5ycGMvc3ZjLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE5OjI2OjIyLjY2NDczNjcwN1oiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNDkxNDgwMzY0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLCBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgYHN2Y19yZWdpc3RlcmAgaXMgYmVpbmcgaGFuZGxlZC4gSG9sZCBvbiBhIHNlY29uZCwgSSB0aG91Z2h0IEkgaGFkIGFscmVhZHkgZ3JlcHBlZCBmb3IgYEVYUE9SVF9TWU1CT0xgIGluIGBuZXQvc3VucnBjL3N2Yy5jYCBzcGVjaWZpY2FsbHksIGFuZCBpdCBkaWRuJ3QgdHVybiB1cCBhbnkgcmVzdWx0cy4gVGhhdCdzIG9kZC4gU28sIGl0J3MgZWl0aGVyIGRlZmluZWQgYW5kIGV4cG9ydGVkIHNvbWV3aGVyZSAqZWxzZSogaW4gdGhlIHByb2plY3QsIG9yIG1heWJlIGl0J3Mgbm90IGFjdHVhbGx5IGV4cG9ydGVkIGF0IGFsbC4gVGltZSB0byBzaGlmdCBnZWFycy4gTGV0J3Mgbm90IG1ha2UgYW55IGFzc3VtcHRpb25zLiBJJ2xsIHRha2UgdGhlIGRpcmVjdCBhcHByb2FjaC4gSSdsbCBpbW1lZGlhdGVseSBjaGVjayBgaW5jbHVkZS9saW51eC9zdW5ycGMvc3ZjLmhgIGZvciB0aGUgZGVjbGFyYXRpb24gb2YgYHN2Y19yZWdpc3RlcmAuIFRoYXQgaGVhZGVyIGlzIHRoZSBvYnZpb3VzIHBsYWNlIHRvIGZpbmQgdGhlIHB1YmxpYyBpbnRlcmZhY2UsIGlmIGl0IGV4aXN0cywgc28gdGhhdCdzIHRoZSBwbGFjZSB0byBzdGFydC4gTGV0J3Mgc2VlIHdoYXQncyBpbiB0aGVyZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjcxMywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE5OjI2OjM3LjU3OTU0MjY1N1oiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTM3OTU5MTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3ZjX3JlZ2lzdGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbGludXgvc3VucnBjL3N2Yy5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvc3VucnBjL3N2Yy5oPTQ3ND12b2lkXFx0XFx0ICAgc3ZjX3Byb2Nlc3NfYmMoc3RydWN0IHJwY19ycXN0ICpyZXEsIHN0cnVjdCBzdmNfcnFzdCAqcnFzdHApO1xcbmluY2x1ZGUvbGludXgvc3VucnBjL3N2Yy5oOjQ3NTppbnRcXHRcXHQgICBzdmNfcmVnaXN0ZXIoY29uc3Qgc3RydWN0IHN2Y19zZXJ2ICosIHN0cnVjdCBuZXQgKiwgY29uc3QgaW50LFxcbmluY2x1ZGUvbGludXgvc3VucnBjL3N2Yy5oLTQ3Ni1cXHRcXHRcXHRcXHRjb25zdCB1bnNpZ25lZCBzaG9ydCwgY29uc3QgdW5zaWduZWQgc2hvcnQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxOToyNjozNy42NzMzNDI1WiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE0MDgyNTczMTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgUlBDIFJlZ2lzdHJhdGlvbiBpbiB0aGUgTGludXggS2VybmVsKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIFJQQyByZWdpc3RyYXRpb24gd2l0aGluIHRoZSBrZXJuZWwuIE15IHN0YXJ0aW5nIHBvaW50IGlzIHRoZSBkZWNsYXJhdGlvbiBvZiB0aGUgZnVuY3Rpb24gSSdtIGludGVyZXN0ZWQgaW4sIHdoaWNoIGlzIGNsZWFybHkgZGVmaW5lZCBpbiBgaW5jbHVkZS9saW51eC9zdW5ycGMvc3ZjLmhgLiBUaGUgZmFjdCB0aGF0IGl0J3MgaW4gYSBoZWFkZXIgZmlsZSBpbXBsaWVzIHRoYXQgdGhpcyBpc24ndCBhIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggY2hhbmdlcyBob3cgSSBhcHByb2FjaCB0aGUgYW5hbHlzaXMuIE15IGluaXRpYWwgZm9jdXMgd2lsbCBiZSB0aGUgcmVnaXN0cmF0aW9uIGZ1bmN0aW9ucyBhbmQgdGhlaXIgYXNzb2NpYXRlZCBjYWxscy5cblxuVGhlcmVmb3JlLCB0aGUga2V5IHN5bWJvbHMgSSBuZWVkIHRvIGV4YW1pbmUgYXJlIGBzdmNfcmVnaXN0ZXJgLCBgc3ZjX2dlbmVyaWNfcnBjYmluZF9zZXRgLCBgcnBjYl9yZWdpc3RlcmAsIGBycGNiX3Y0X3JlZ2lzdGVyYCBhbmQgYHJwY2JfY3JlYXRlX2xvY2FsYC4gVGhlIGZpcnN0IGZvdXIgc3VnZ2VzdCB0aGF0IHRoZXJlIGlzIGEgcmFuZ2Ugb2YgcmVnaXN0ZXIgY2FsbHMsIGFuZCB0aGUgZmluYWwgc3ltYm9sIG1pZ2h0IGJlIHRoZSBjcmVhdGlvbiBvZiBzb21ldGhpbmcgdXNlZCBsb2NhbGx5LiBcblxuTm93LCBJJ2xsIHF1aWNrbHkgdmVyaWZ5IHRoZSBsb2NhdGlvbiBvZiBvbmUgb2YgdGhlc2Uga2V5IGZ1bmN0aW9ucyB0byBhc3Nlc3MgaG93IGZhciBJJ3ZlIGNvbWUuIEknbGwgY2hlY2sgd2hldGhlciBgcnBjYl9yZWdpc3RlcmAgaXMgZGVmaW5lZCB3aXRoaW4gdGhlIGBpbmNsdWRlL2xpbnV4L3N1bnJwYy9gIGRpcmVjdG9yeS4gVGhhdCdsbCBnaXZlIG1lIGEgY2xlYXJlciBwaWN0dXJlIG9mIHRoZSBjb2RlJ3Mgc3RydWN0dXJlIGFuZCByZWxhdGlvbnNoaXBzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzExNSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxOToyNjo1MS43NTU5MTgxWiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDgwNjEwMTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicnBjYl9yZWdpc3RlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL2xpbnV4L3N1bnJwYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9zdW5ycGMvY2xudC5oPTIwMT12b2lkXFx0XFx0cnBjYl9wdXRfbG9jYWwoc3RydWN0IG5ldCAqKTtcXG5pbmNsdWRlL2xpbnV4L3N1bnJwYy9jbG50Lmg6MjAyOmludFxcdFxcdHJwY2JfcmVnaXN0ZXIoc3RydWN0IG5ldCAqLCB1MzIsIHUzMiwgaW50LCB1bnNpZ25lZCBzaG9ydCk7XFxuaW5jbHVkZS9saW51eC9zdW5ycGMvY2xudC5oLTIwMy1pbnRcXHRcXHRycGNiX3Y0X3JlZ2lzdGVyKHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgdTMyIHByb2dyYW0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE5OjI2OjUxLjg2Mzk4NDk3MloiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODQ2NTc3OTg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUuLi4gdGhlIGNvZGUgSSdtIGxvb2tpbmcgZm9yIGlzIGRlZmluaXRlbHkgaW4gYGluY2x1ZGUvbGludXgvc3VucnBjL2NsbnQuaGAuIFRoYXQgbWFrZXMgc2Vuc2U7IGNsaWVudC1zaWRlIFJQQyBzdHVmZiBpcyB1c3VhbGx5IG9yZ2FuaXplZCB0aGVyZS4gQW5kIHNpbmNlIHRoZXkgYXJlIG5vbi1zdGF0aWMgZnVuY3Rpb25zLCB0aGF0IHRlbGxzIG1lIHRoZXNlIGZ1bmN0aW9ucyBhcmUgbGlrZWx5IGludGVuZGVkIHRvIGJlIHVzZWQgZXh0ZXJuYWxseSwgYW5kIG5vdCBsaW1pdGVkIHRvIHRoYXQgc3BlY2lmaWMgc291cmNlIGZpbGUsIHdoaWNoIHdvdWxkIGJlIGltcG9ydGFudCBmb3IgbWUgdG8gdW5kZXJzdGFuZCBpbiBteSB3b3JrLiBOb3csIGxldCdzIGNoZWNrIGBycGNiX2NyZWF0ZV9sb2NhbGAgaW4gdGhlIHN1bnJwYyBpbmNsdWRlLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0IHBpZWNlIGJldHRlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc2MDksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxOToyNjo1NS43MTA1NjY1OTlaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxNDI0MDI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJwY2JfY3JlYXRlX2xvY2FsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbGludXgvc3VucnBjL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3N1bnJwYy9jbG50Lmg9MTk3PXN0cnVjdCBycGNfeHBydFxcdCpycGNfdGFza19nZXRfeHBydChzdHJ1Y3QgcnBjX2NsbnQgKmNsbnQsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3N1bnJwYy9jbG50LmgtMTk5LVxcbmluY2x1ZGUvbGludXgvc3VucnBjL2NsbnQuaDoyMDA6aW50XFx0XFx0cnBjYl9jcmVhdGVfbG9jYWwoc3RydWN0IG5ldCAqKTtcXG5pbmNsdWRlL2xpbnV4L3N1bnJwYy9jbG50LmgtMjAxLXZvaWRcXHRcXHRycGNiX3B1dF9sb2NhbChzdHJ1Y3QgbmV0ICopO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxOToyNjo1NS43NzE5OTYxNDRaIiwiU2VxIjo0NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzY0OTQ5MTc0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFJQQyBUaW1lb3V0IFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBjb25maXJtZWQgdGhlIHBhdGNoIGlzIHByZXNlbnQuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gdGhlIHJlbGV2YW50IHN5bWJvbHMgYW5kIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gRnJvbSB3aGF0IEkgc2VlLCB0aGUgcHJpbWFyeSBmb2N1cyBpcyBvbiB0aGVzZSBzeW1ib2xzOiBgc3ZjX3JlZ2lzdGVyYCwgYHN2Y19nZW5lcmljX3JwY2JpbmRfc2V0YCwgYHJwY2JfcmVnaXN0ZXJgLCBgcnBjYl92NF9yZWdpc3RlcmAsIGFuZCBgcnBjYl9jcmVhdGVfbG9jYWxgLiBUaG9zZSBhcmUgdGhlIGVudHJ5IHBvaW50cywgc28gdG8gc3BlYWsuXG5cbk5vdywgcmVnYXJkaW5nIHRoZSBjb25maWcgb3B0aW9ucywgaXQgc2VlbXMgd2UncmUgZGVhbGluZyB3aXRoIGBTVU5SUENgLCBgTkZTX0ZTYCwgYW5kIGBORlNEYC4gTXkgaW5zdGluY3QgaXMgdG8gZGV0ZXJtaW5lIGlmIHdlIGFic29sdXRlbHkgKm5lZWQqIGJvdGggYE5GU19GU2AgYW5kIGBORlNEYCwgb3IgaWYganVzdCBlbmFibGluZyBgU1VOUlBDYCB3aWxsIHN1ZmZpY2UgZm9yIGNvbXBpbGluZyB0aGUgbmVjZXNzYXJ5IG1vZHVsZXMuIEkga25vdyBgU1VOUlBDYCBhbG9uZSBpcyBlbm91Z2ggdG8gYnJpbmcgaW4gdGhlIGBuZXQvc3VucnBjL2AgY29kZS4gSG93ZXZlciwgdG8gKnRyaWdnZXIqIHRoZSBuZXcgZnVuY3Rpb25hbGl0eSwgd2hpY2ggSSB1bmRlcnN0YW5kIGlzIGEgdGltZW91dCBmb3IgbG9jYWwgYHJwY2JpbmRgIGNhbGxzLCB3ZSdsbCBwcm9iYWJseSBuZWVkIGVpdGhlciBgTkZTX0ZTYCBvciBgTkZTRGAgdG8gYWN0dWFsbHkgY3JlYXRlIHRob3NlIFJQQyBzZXJ2aWNlcy4gU28sIGp1c3QgdG8gYmUgc3VyZSwgSSB3aWxsIGluY2x1ZGUgYm90aCBgTkZTX0ZTYCBhbmQgYE5GU0RgLlxuXG5MZXQncyBkbyBhIHF1aWNrIHN3ZWVwIGZvciBhbnkgb3RoZXIgcmVsZXZhbnQgY29uZmlnIG9wdGlvbnMuIEhtbSwgYFNVTlJQQ19ERUJVR2AgbWlnaHQgYmUgaGVscGZ1bCBmb3IgZGVidWdnaW5nIGxhdGVyLCBidXQgaXQncyBub3QgZXNzZW50aWFsIGZvciBqdXN0IHRyaWdnZXJpbmcgdGhlIGZ1bmN0aW9uYWwgY2hhbmdlIGl0c2VsZi5cblxuT2theSwgYmFjayB0byB0aGUgcGF0Y2guIEl0J3MgYWRkaW5nIGEgdGltZW91dCB0byB0aGUgbG9jYWwgYHJwY2JpbmRgIGNsaWVudCwgYW5kIGhhbmRsaW5nIGAtRVRJTUVET1VUYCBlcnJvcnMgaW4gYHN2Y19yZWdpc3RlcmAgYW5kIGBzdmNfZ2VuZXJpY19ycGNiaW5kX3NldGAuIFRoaXMgaXMgYSAqZnVuY3Rpb25hbCBjaGFuZ2UqIHdpdGhpbiB0aGUgYHN1bnJwY2Agc3Vic3lzdGVtLiBDcml0aWNhbGx5LCByZWdpc3RlcmluZyBhbiBSUEMgc2VydmljZSB3aWxsIHRyaWdnZXIgaXQuIEFuZCB0aGF0J3MgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHRocm91Z2ggTkZTIG9yIG90aGVyIFJQQyBtZWNoYW5pc21zLiBJIGFtIGNlcnRhaW4gdGhhdCB0aGlzIGlzIGEgcGF0Y2ggd2Ugd2lsbCB3YW50IHRvIHRlc3QgYWdncmVzc2l2ZWx5IHVzaW5nIGZ1enppbmcuXG5cbk15IGFuYWx5c2lzIGFsaWducyB3aXRoIHRoZSBKU09OIG91dHB1dDogdGhlIHBhdGNoIGlzIGluZGVlZCB3b3J0aCBmdXp6aW5nLiBUaGUga2V5IHN5bWJvbHMsIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb25zLCBhbmQgdGhlIGNvcmUgcmVhc29uaW5nIGFyZSBhbGwgd2VsbC1kb2N1bWVudGVkIGFuZCBwcm92aWRlIGNvbmZpZGVuY2UgaW4gdGhpcyBhc3Nlc3NtZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzk0MywiT3V0cHV0VG9rZW5zIjoxNTMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTk6Mjc6MDMuNDIxNDkyMTExWiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQyMjIxNzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTVU5SUENcIixcbiAgICBcIk5GU19GU1wiLFxuICAgIFwiTkZTRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInN2Y19yZWdpc3RlclwiLFxuICAgIFwic3ZjX2dlbmVyaWNfcnBjYmluZF9zZXRcIixcbiAgICBcInJwY2JfcmVnaXN0ZXJcIixcbiAgICBcInJwY2JfdjRfcmVnaXN0ZXJcIixcbiAgICBcInJwY2JfY3JlYXRlX2xvY2FsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIHRpbWVvdXQgZm9yIGxvY2FsIHJwY2JpbmQgY2FsbHMgYW5kIGhhbmRsZXMgLUVUSU1FRE9VVCBpbiBzdmNfcmVnaXN0ZXIgYW5kIHN2Y19nZW5lcmljX3JwY2JpbmRfc2V0LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIHN1bnJwYyBzdWJzeXN0ZW0gdGhhdCBjYW4gYmUgdHJpZ2dlcmVkIGJ5IHJlZ2lzdGVyaW5nIFJQQyBzZXJ2aWNlcywgd2hpY2ggaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBORlMgb3Igb3RoZXIgUlBDIG1lY2hhbmlzbXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU1VOUlBDXCIsXG4gICAgXCJORlNfRlNcIixcbiAgICBcIk5GU0RcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzdmNfcmVnaXN0ZXJcIixcbiAgICBcInN2Y19nZW5lcmljX3JwY2JpbmRfc2V0XCIsXG4gICAgXCJycGNiX3JlZ2lzdGVyXCIsXG4gICAgXCJycGNiX3Y0X3JlZ2lzdGVyXCIsXG4gICAgXCJycGNiX2NyZWF0ZV9sb2NhbFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSB0aW1lb3V0IGZvciBsb2NhbCBycGNiaW5kIGNhbGxzIGFuZCBoYW5kbGVzIC1FVElNRURPVVQgaW4gc3ZjX3JlZ2lzdGVyIGFuZCBzdmNfZ2VuZXJpY19ycGNiaW5kX3NldC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBzdW5ycGMgc3Vic3lzdGVtIHRoYXQgY2FuIGJlIHRyaWdnZXJlZCBieSByZWdpc3RlcmluZyBSUEMgc2VydmljZXMsIHdoaWNoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgTkZTIG9yIG90aGVyIFJQQyBtZWNoYW5pc21zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxOToyNzowMy41NjM3MjEwNjFaIiwiU2VxIjo0NywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMjg1NTAxMDU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTk6Mjc6MDMuNTY0MjQyODExWiIsIlNlcSI6NDgsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjExMjg0OTczMzg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aW1lb3V0IGhhbmRsaW5nIGZvciBsb2NhbCBSUEMgYmluZCBjYWxscyBpbiB0aGUgc3VucnBjIHN1YnN5c3RlbS4gSXQgaW50cm9kdWNlcyBhIHN0YXRpYyBjb25zdGFudCBgcnBjYl9sb2NhbF90aW1lb3V0YCBzdHJ1Y3R1cmUsIGFkZHMgdGltZW91dC1yZWxhdGVkIGZsYWdzIChgUlBDX1RBU0tfU09GVCB8IFJQQ19UQVNLX1RJTUVPVVRgKSB0byBgcnBjYl9yZWdpc3Rlcl9jYWxsYCwgYW5kIGFkZHMgbG9naWMgdG8gcHJvcGFnYXRlIGAtRVRJTUVET1VUYCBlcnJvcnMgaW4gYHN2Y19nZW5lcmljX3JwY2JpbmRfc2V0YCBhbmQgYHN2Y19yZWdpc3RlcmAuIFRoZXNlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBkbyBub3QgZXhwb3NlIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZSwgYW5kIGRvIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlIG9yIHJhY2UgY29uZGl0aW9ucyBkdWUgdG8gdGltZW91dHMpIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBvciBMT0NLREVQLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDU5YjY4ODRjZjUxOWMwNDExYTAyZDdmNmQ5YTA4ZjBkN2U4MTA2ODhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyA3IDE5OjIzOjU5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9ycGNiX2NsbnQuYyBiL25ldC9zdW5ycGMvcnBjYl9jbG50LmNcbmluZGV4IDZhYTM3MjE4OGM4NmEuLjQwOTRmMzI1Nzg3NmQgMTAwNjQ0XG4tLS0gYS9uZXQvc3VucnBjL3JwY2JfY2xudC5jXG4rKysgYi9uZXQvc3VucnBjL3JwY2JfY2xudC5jXG5AQCAtMjIxLDYgKzIyMSwxMiBAQCBzdGF0aWMgdm9pZCBycGNiX3NldF9sb2NhbChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBycGNfY2xudCAqY2xudCxcbiAjIGRlZmluZSBTVU5fTEVOKHB0cikgKG9mZnNldG9mKHN0cnVjdCBzb2NrYWRkcl91biwgc3VuX3BhdGgpXHRcdFxcXG4gXHRcdCAgICAgICsgMSArIHN0cmxlbigocHRyKS1cdTAwM2VzdW5fcGF0aCArIDEpKVxuIFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcnBjX3RpbWVvdXQgcnBjYl9sb2NhbF90aW1lb3V0ID0ge1xuK1x0LnRvX2luaXR2YWwgPSAoSFogLyAxMCkgPyA6IDEsXG4rXHQudG9fbWF4dmFsID0gKEhaIC8gMTApID8gOiAxLFxuK1x0LnRvX3JldHJpZXMgPSAwLFxuK307XG4rXG4gLypcbiAgKiBSZXR1cm5zIHplcm8gb24gc3VjY2Vzcywgb3RoZXJ3aXNlIGEgbmVnYXRpdmUgZXJybm8gdmFsdWVcbiAgKiBpcyByZXR1cm5lZC5cbkBAIC0yMzgsNiArMjQ0LDcgQEAgc3RhdGljIGludCBycGNiX2NyZWF0ZV9hZl9sb2NhbChzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRcdC52ZXJzaW9uXHQ9IFJQQ0JWRVJTXzIsXG4gXHRcdC5hdXRoZmxhdm9yXHQ9IFJQQ19BVVRIX05VTEwsXG4gXHRcdC5jcmVkXHRcdD0gY3VycmVudF9jcmVkKCksXG4rXHRcdC50aW1lb3V0XHQ9IFx1MDAyNnJwY2JfbG9jYWxfdGltZW91dCxcbiBcdFx0LypcbiBcdFx0ICogV2UgdHVybiBvZmYgdGhlIGlkbGUgdGltZW91dCB0byBwcmV2ZW50IHRoZSBrZXJuZWxcbiBcdFx0ICogZnJvbSBhdXRvbWF0aWNhbGx5IGRpc2Nvbm5lY3RpbmcgdGhlIHNvY2tldC5cbkBAIC0zMTIsNiArMzE5LDcgQEAgc3RhdGljIGludCBycGNiX2NyZWF0ZV9sb2NhbF9uZXQoc3RydWN0IG5ldCAqbmV0KVxuIFx0XHQudmVyc2lvblx0PSBSUENCVkVSU18yLFxuIFx0XHQuYXV0aGZsYXZvclx0PSBSUENfQVVUSF9VTklYLFxuIFx0XHQuY3JlZFx0XHQ9IGN1cnJlbnRfY3JlZCgpLFxuK1x0XHQudGltZW91dFx0PSBcdTAwMjZycGNiX2xvY2FsX3RpbWVvdXQsXG4gXHRcdC5mbGFnc1x0XHQ9IFJQQ19DTE5UX0NSRUFURV9OT1BJTkcsXG4gXHR9O1xuIFx0c3RydWN0IHJwY19jbG50ICpjbG50LCAqY2xudDQ7XG5AQCAtNDAyLDExICs0MTAsMTEgQEAgc3RhdGljIHN0cnVjdCBycGNfY2xudCAqcnBjYl9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpub2RlbmFtZSxcbiBcbiBzdGF0aWMgaW50IHJwY2JfcmVnaXN0ZXJfY2FsbChzdHJ1Y3Qgc3VucnBjX25ldCAqc24sIHN0cnVjdCBycGNfY2xudCAqY2xudCwgc3RydWN0IHJwY19tZXNzYWdlICptc2csIGJvb2wgaXNfc2V0KVxuIHtcbi1cdGludCBmbGFncyA9IFJQQ19UQVNLX05PQ09OTkVDVDtcbitcdGludCBmbGFncyA9IFJQQ19UQVNLX05PQ09OTkVDVCB8IFJQQ19UQVNLX1NPRlQgfCBSUENfVEFTS19USU1FT1VUO1xuIFx0aW50IGVycm9yLCByZXN1bHQgPSAwO1xuIFxuIFx0aWYgKGlzX3NldCB8fCAhc24tXHUwMDNlcnBjYl9pc19hZl9sb2NhbClcbi1cdFx0ZmxhZ3MgPSBSUENfVEFTS19TT0ZUQ09OTjtcbitcdFx0ZmxhZ3MgfD0gUlBDX1RBU0tfU09GVENPTk47XG4gXHRtc2ctXHUwMDNlcnBjX3Jlc3AgPSBcdTAwMjZyZXN1bHQ7XG4gXG4gXHRlcnJvciA9IHJwY19jYWxsX3N5bmMoY2xudCwgbXNnLCBmbGFncyk7XG5kaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9zdmMuYyBiL25ldC9zdW5ycGMvc3ZjLmNcbmluZGV4IGFlOWVjNGJmMzRmNzIuLjUzOWRkZDA2NDY3ZGYgMTAwNjQ0XG4tLS0gYS9uZXQvc3VucnBjL3N2Yy5jXG4rKysgYi9uZXQvc3VucnBjL3N2Yy5jXG5AQCAtMTIwNyw2ICsxMjA3LDkgQEAgaW50IHN2Y19nZW5lcmljX3JwY2JpbmRfc2V0KHN0cnVjdCBuZXQgKm5ldCxcbiBcdGVycm9yID0gc3ZjX3JwY2JpbmRfc2V0X3ZlcnNpb24obmV0LCBwcm9ncCwgdmVyc2lvbixcbiBcdFx0XHRcdFx0ZmFtaWx5LCBwcm90bywgcG9ydCk7XG4gXG4rXHRpZiAoZXJyb3IgPT0gLUVUSU1FRE9VVClcbitcdFx0cmV0dXJuIGVycm9yO1xuK1xuIFx0cmV0dXJuICh2ZXJzLVx1MDAzZXZzX3JwY2Jfb3B0bmwpID8gMCA6IGVycm9yO1xuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChzdmNfZ2VuZXJpY19ycGNiaW5kX3NldCk7XG5AQCAtMTI0Myw2ICsxMjQ2LDggQEAgaW50IHN2Y19yZWdpc3Rlcihjb25zdCBzdHJ1Y3Qgc3ZjX3NlcnYgKnNlcnYsIHN0cnVjdCBuZXQgKm5ldCxcbiBcdFx0XHRcdHByaW50ayhLRVJOX1dBUk5JTkcgXCJzdmM6IGZhaWxlZCB0byByZWdpc3RlciBcIlxuIFx0XHRcdFx0XHRcIiVzdiV1IFJQQyBzZXJ2aWNlIChlcnJubyAlZCkuXFxuXCIsXG4gXHRcdFx0XHRcdHByb2dwLVx1MDAzZXBnX25hbWUsIGksIC1lcnJvcik7XG4rXHRcdFx0XHRpZiAoZXJyb3IgPT0gLUVUSU1FRE9VVClcbitcdFx0XHRcdFx0cmV0dXJuIGVycm9yO1xuIFx0XHRcdFx0YnJlYWs7XG4gXHRcdFx0fVxuIFx0XHR9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxOToyNzowMy41NjQyNDM5MjFaIiwiU2VxIjo0OSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTEyODQ5NDI5MzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgU3VuUlBDIFRpbWVvdXQgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGp1c3QgcmV2aWV3ZWQgdGhpcyBwYXRjaC4gSXQgbG9va3MgbGlrZSB3ZSdyZSB0aWdodGVuaW5nIHVwIHRpbWVvdXQgaGFuZGxpbmcgd2l0aGluIHRoZSBTdW5SUEMgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gdGhlIGBycGNiYCBjbGllbnQgYW5kIHNlcnZlciBjb21wb25lbnRzLiBUaGUgY2hhbmdlcyBhcmUgY29uY2VudHJhdGVkIGluIGBuZXQvc3VucnBjL3JwY2JfY2xudC5jYCBhbmQgYG5ldC9zdW5ycGMvc3ZjLmNgLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGlzIGlzIGEgcmVsYXRpdmVseSBzdHJhaWdodGZvcndhcmQgbW9kaWZpY2F0aW9uLiBXZSdyZSBpbnRyb2R1Y2luZyBhIGBycGNiX2xvY2FsX3RpbWVvdXRgIHN0cnVjdHVyZSBhbmQgdXNpbmcgaXQgdG8gY29uZmlndXJlIHRpbWVvdXRzIHdoZW4gY3JlYXRpbmcgbG9jYWwgUlBDIGJpbmQgY29ubmVjdGlvbnMuIFRoZSBgcnBjYl9sb2NhbF90aW1lb3V0YCBpdHNlbGYgYXBwZWFycyB0byBiZSBhIGZ1bGx5IGluaXRpYWxpemVkLCBgc3RhdGljIGNvbnN0YCBzdHJ1Y3R1cmUsIHNvIHRoYXQncyBnb29kIOKAkyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRoZXJlLiBJJ2xsIGRvdWJsZS1jaGVjayBpdC4gWWVwLCBpdCdzIGRlZmluZWQgYW5kIGluaXRpYWxpemVkIGFzIGV4cGVjdGVkLlxuXG5UaGUgY29yZSBvZiB0aGUgcGF0Y2ggc2VlbXMgdG8gcmV2b2x2ZSBhcm91bmQgc2V0dGluZyBhbmQgcHJvcGFnYXRpbmcgdGltZW91dCBmbGFncy4gU3BlY2lmaWNhbGx5LCBgcnBjYl9yZWdpc3Rlcl9jYWxsYCBpcyBiZWluZyB1cGRhdGVkIHRvIGluY2x1ZGUgYFJQQ19UQVNLX1NPRlQgfCBSUENfVEFTS19USU1FT1VUYCBpbiB0aGUgZmxhZ3MuIFRoaXMgaXMgdGhlbiBjb21iaW5lZCB3aXRoIG90aGVyIGZsYWdzIHN1Y2ggYXMgYFJQQ19UQVNLX1NPRlRDT05OYCBpZiBhcHByb3ByaWF0ZSwgc28gdGhhdCBzZWVtcyBzZW5zaWJsZS5cblxuT24gdGhlIHNlcnZlciBzaWRlLCBgc3ZjX2dlbmVyaWNfcnBjYmluZF9zZXRgIGFuZCBgc3ZjX3JlZ2lzdGVyYCBhcmUgbW9kaWZpZWQgdG8gZXhwbGljaXRseSByZXR1cm4gYC1FVElNRURPVVRgIGlmIHRoYXQgZXJyb3IgY29kZSBpcyBlbmNvdW50ZXJlZC4gVGhpcyBtYWtlcyBpdCBhIGJpdCBtb3JlIGV4cGxpY2l0LCBhbGxvd2luZyB0aGUgdXBwZXIgbGF5ZXJzIHRvIGNvcnJlY3RseSBoYW5kbGUgdGhlIHRpbWVvdXQuXG5cbkkndmUgY2FyZWZ1bGx5IGNvbnNpZGVyZWQgdGhlIHBvdGVudGlhbCBzZWN1cml0eSBpbXBsaWNhdGlvbnMsIGFuZCBJIGRvbid0IHNlZSBhbnkgaW1tZWRpYXRlIHJlZCBmbGFncy4gVGhlcmUncyBubyBpbnRyb2R1Y3Rpb24gb2YgbmV3LCB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgbm8gZXhwb3N1cmUgb2YgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmVzIHRvIHVzZXIgc3BhY2UsIGFuZCBubyBjb21wbGV4IGRhdGEgYWxsb2NhdGlvbiBwYXR0ZXJucyB0aGF0IGNvdWxkIGxlYWQgdG8gbWVtb3J5IGNvcnJ1cHRpb24gdnVsbmVyYWJpbGl0aWVzLiBUaGlzIGlzIGltcG9ydGFudCB0byBub3RlIHNpbmNlIG15IGdvYWwgaXMgdG8gZW5zdXJlIHRoaXMgcGF0Y2ggaXMgYXMgc2VjdXJlIGFzIHBvc3NpYmxlLlxuXG5UaGUgdGltZW91dCBpcyBmdWxseSBpbml0aWFsaXplZCBhbmQgc2hvdWxkIHdvcmsgd2VsbCBpbiB0aGUgUlBDIGNvbnRleHQuIFRoZSBlcnJvciBjb2RlIG9mIHRoZSBgc3ZjX2dlbmVyaWNfcnBjYmluZF9zZXRgIGFuZCBgc3ZjX3JlZ2lzdGVyYCB3ZXJlIGNvcnJlY3RseSBoYW5kbGVkIGFuZCBwYXNzZWQgZnVydGhlciB1cCB0aGUgY2hhaW4uXG5cbkNvbnNpZGVyaW5nIHRoZSBuYXR1cmUgb2YgdGhlIGNoYW5nZXMsIEknbSBjb25maWRlbnQgdGhhdCBLQVNBTiBhbmQgb3RoZXIgc3RhbmRhcmQga2VybmVsIGJ1ZyBkZXRlY3RvcnMgKGxpa2UgS01TQU4pIHdpbGwgYmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgc3VidGxlIGlzc3Vlcywgc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zIHRoYXQgbWlnaHQgYXJpc2UgZnJvbSBidWdneSB0aW1lb3V0IGhhbmRsaW5nLiBCYXNlZCBvbiB0aGlzIGFuYWx5c2lzLCBJJ20gY29tZm9ydGFibGUgc2V0dGluZyBgTmVlZHNLTVNBTj1mYWxzZWAgZm9yIHRoaXMgcGF0Y2guIEkgZG9uJ3QgYmVsaWV2ZSBhbnkgS01TQU4tc3BlY2lmaWMgY2hlY2tzIGFyZSByZXF1aXJlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjgzOSwiT3V0cHV0VG9rZW5zIjoxOTMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MjYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxOToyNzoxNC44NDkxOTE4MzlaIiwiU2VxIjo1MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTc5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRpbWVvdXQgaGFuZGxpbmcgZm9yIGxvY2FsIFJQQyBiaW5kIGNhbGxzIGluIHRoZSBzdW5ycGMgc3Vic3lzdGVtLiBJdCBpbnRyb2R1Y2VzIGEgc3RhdGljIGNvbnN0YW50IGBycGNiX2xvY2FsX3RpbWVvdXRgIHN0cnVjdHVyZSwgYWRkcyB0aW1lb3V0LXJlbGF0ZWQgZmxhZ3MgKGBSUENfVEFTS19TT0ZUIHwgUlBDX1RBU0tfVElNRU9VVGApIHRvIGBycGNiX3JlZ2lzdGVyX2NhbGxgLCBhbmQgYWRkcyBsb2dpYyB0byBwcm9wYWdhdGUgYC1FVElNRURPVVRgIGVycm9ycyBpbiBgc3ZjX2dlbmVyaWNfcnBjYmluZF9zZXRgIGFuZCBgc3ZjX3JlZ2lzdGVyYC4gVGhlc2UgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIGRvIG5vdCBleHBvc2Uga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLCBhbmQgZG8gbm90IGludm9sdmUgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUgb3IgcmFjZSBjb25kaXRpb25zIGR1ZSB0byB0aW1lb3V0cykgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIG9yIExPQ0tERVAuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGltZW91dCBoYW5kbGluZyBmb3IgbG9jYWwgUlBDIGJpbmQgY2FsbHMgaW4gdGhlIHN1bnJwYyBzdWJzeXN0ZW0uIEl0IGludHJvZHVjZXMgYSBzdGF0aWMgY29uc3RhbnQgYHJwY2JfbG9jYWxfdGltZW91dGAgc3RydWN0dXJlLCBhZGRzIHRpbWVvdXQtcmVsYXRlZCBmbGFncyAoYFJQQ19UQVNLX1NPRlQgfCBSUENfVEFTS19USU1FT1VUYCkgdG8gYHJwY2JfcmVnaXN0ZXJfY2FsbGAsIGFuZCBhZGRzIGxvZ2ljIHRvIHByb3BhZ2F0ZSBgLUVUSU1FRE9VVGAgZXJyb3JzIGluIGBzdmNfZ2VuZXJpY19ycGNiaW5kX3NldGAgYW5kIGBzdmNfcmVnaXN0ZXJgLiBUaGVzZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgZG8gbm90IGV4cG9zZSBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UsIGFuZCBkbyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyAoc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSBvciByYWNlIGNvbmRpdGlvbnMgZHVlIHRvIHRpbWVvdXRzKSB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gb3IgTE9DS0RFUC4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowvznbz[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-07 19:21:03 +0000 UTC FinishedAt: 2026-08-07 19:27:17 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "075b74841bd0065a3bda3440873c747938e69b68", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SUNRPC", "NFS_FS", "NFSD" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "075b74841bd0065a3bda3440873c747938e69b68", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SUNRPC", "NFS_FS", "NFSD" ], "series_id": "c68240b1-0e64-46ae-b05b-72f5eaa9b010" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "svc_register", "svc_generic_rpcbind_set", "rpcb_register", "rpcb_v4_register", "rpcb_create_local" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE5OjI0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NVTlJQQyYjMzQ7LAogICAgJiMzNDtORlNfRlMmIzM0OywKICAgICYjMzQ7TkZTRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3N2Y19yZWdpc3RlciYjMzQ7LAogICAgJiMzNDtzdmNfZ2VuZXJpY19ycGNiaW5kX3NldCYjMzQ7LAogICAgJiMzNDtycGNiX3JlZ2lzdGVyJiMzNDssCiAgICAmIzM0O3JwY2JfdjRfcmVnaXN0ZXImIzM0OywKICAgICYjMzQ7cnBjYl9jcmVhdGVfbG9jYWwmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aW1lb3V0IGhhbmRsaW5nIGZvciBsb2NhbCBSUEMgYmluZCBjYWxscyBpbiB0aGUgc3VucnBjIHN1YnN5c3RlbS4gSXQgaW50cm9kdWNlcyBhIHN0YXRpYyBjb25zdGFudCBgcnBjYl9sb2NhbF90aW1lb3V0YCBzdHJ1Y3R1cmUsIGFkZHMgdGltZW91dC1yZWxhdGVkIGZsYWdzIChgUlBDX1RBU0tfU09GVCB8IFJQQ19UQVNLX1RJTUVPVVRgKSB0byBgcnBjYl9yZWdpc3Rlcl9jYWxsYCwgYW5kIGFkZHMgbG9naWMgdG8gcHJvcGFnYXRlIGAtRVRJTUVET1VUYCBlcnJvcnMgaW4gYHN2Y19nZW5lcmljX3JwY2JpbmRfc2V0YCBhbmQgYHN2Y19yZWdpc3RlcmAuIFRoZXNlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBkbyBub3QgZXhwb3NlIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZSwgYW5kIGRvIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlIG9yIHJhY2UgY29uZGl0aW9ucyBkdWUgdG8gdGltZW91dHMpIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBvciBMT0NLREVQLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgdGltZW91dCBmb3IgbG9jYWwgcnBjYmluZCBjYWxscyBhbmQgaGFuZGxlcyAtRVRJTUVET1VUIGluIHN2Y19yZWdpc3RlciBhbmQgc3ZjX2dlbmVyaWNfcnBjYmluZF9zZXQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgc3VucnBjIHN1YnN5c3RlbSB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgYnkgcmVnaXN0ZXJpbmcgUlBDIHNlcnZpY2VzLCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIE5GUyBvciBvdGhlciBSUEMgbWVjaGFuaXNtcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxOToyNDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDU5YjY4ODRjZjUxOWMwNDExYTAyZDdmNmQ5YTA4ZjBkN2U4MTA2ODhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyA3IDE5OjIzOjU5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvcnBjYl9jbG50LmMgYi9uZXQvc3VucnBjL3JwY2JfY2xudC5jXG5pbmRleCA2YWEzNzIxODhjODZhLi40MDk0ZjMyNTc4NzZkIDEwMDY0NFxuLS0tIGEvbmV0L3N1bnJwYy9ycGNiX2NsbnQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3N1bnJwYy9ycGNiX2NsbnQuY1xuQEAgLTIyMSw2ICYjNDM7MjIxLDEyIEBAIHN0YXRpYyB2b2lkIHJwY2Jfc2V0X2xvY2FsKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHJwY19jbG50ICpjbG50LFxuICMgZGVmaW5lIFNVTl9MRU4ocHRyKSAob2Zmc2V0b2Yoc3RydWN0IHNvY2thZGRyX3VuLCBzdW5fcGF0aClcdFx0XFxcbiBcdFx0ICAgICAgJiM0MzsgMSAmIzQzOyBzdHJsZW4oKHB0ciktXHUwMDNlc3VuX3BhdGggJiM0MzsgMSkpXG4gXG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgcnBjX3RpbWVvdXQgcnBjYl9sb2NhbF90aW1lb3V0ID0ge1xuJiM0MztcdC50b19pbml0dmFsID0gKEhaIC8gMTApID8gOiAxLFxuJiM0MztcdC50b19tYXh2YWwgPSAoSFogLyAxMCkgPyA6IDEsXG4mIzQzO1x0LnRvX3JldHJpZXMgPSAwLFxuJiM0Mzt9O1xuJiM0MztcbiAvKlxuICAqIFJldHVybnMgemVybyBvbiBzdWNjZXNzLCBvdGhlcndpc2UgYSBuZWdhdGl2ZSBlcnJubyB2YWx1ZVxuICAqIGlzIHJldHVybmVkLlxuQEAgLTIzOCw2ICYjNDM7MjQ0LDcgQEAgc3RhdGljIGludCBycGNiX2NyZWF0ZV9hZl9sb2NhbChzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRcdC52ZXJzaW9uXHQ9IFJQQ0JWRVJTXzIsXG4gXHRcdC5hdXRoZmxhdm9yXHQ9IFJQQ19BVVRIX05VTEwsXG4gXHRcdC5jcmVkXHRcdD0gY3VycmVudF9jcmVkKCksXG4mIzQzO1x0XHQudGltZW91dFx0PSBcdTAwMjZycGNiX2xvY2FsX3RpbWVvdXQsXG4gXHRcdC8qXG4gXHRcdCAqIFdlIHR1cm4gb2ZmIHRoZSBpZGxlIHRpbWVvdXQgdG8gcHJldmVudCB0aGUga2VybmVsXG4gXHRcdCAqIGZyb20gYXV0b21hdGljYWxseSBkaXNjb25uZWN0aW5nIHRoZSBzb2NrZXQuXG5AQCAtMzEyLDYgJiM0MzszMTksNyBAQCBzdGF0aWMgaW50IHJwY2JfY3JlYXRlX2xvY2FsX25ldChzdHJ1Y3QgbmV0ICpuZXQpXG4gXHRcdC52ZXJzaW9uXHQ9IFJQQ0JWRVJTXzIsXG4gXHRcdC5hdXRoZmxhdm9yXHQ9IFJQQ19BVVRIX1VOSVgsXG4gXHRcdC5jcmVkXHRcdD0gY3VycmVudF9jcmVkKCksXG4mIzQzO1x0XHQudGltZW91dFx0PSBcdTAwMjZycGNiX2xvY2FsX3RpbWVvdXQsXG4gXHRcdC5mbGFnc1x0XHQ9IFJQQ19DTE5UX0NSRUFURV9OT1BJTkcsXG4gXHR9O1xuIFx0c3RydWN0IHJwY19jbG50ICpjbG50LCAqY2xudDQ7XG5AQCAtNDAyLDExICYjNDM7NDEwLDExIEBAIHN0YXRpYyBzdHJ1Y3QgcnBjX2NsbnQgKnJwY2JfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqbm9kZW5hbWUsXG4gXG4gc3RhdGljIGludCBycGNiX3JlZ2lzdGVyX2NhbGwoc3RydWN0IHN1bnJwY19uZXQgKnNuLCBzdHJ1Y3QgcnBjX2NsbnQgKmNsbnQsIHN0cnVjdCBycGNfbWVzc2FnZSAqbXNnLCBib29sIGlzX3NldClcbiB7XG4tXHRpbnQgZmxhZ3MgPSBSUENfVEFTS19OT0NPTk5FQ1Q7XG4mIzQzO1x0aW50IGZsYWdzID0gUlBDX1RBU0tfTk9DT05ORUNUIHwgUlBDX1RBU0tfU09GVCB8IFJQQ19UQVNLX1RJTUVPVVQ7XG4gXHRpbnQgZXJyb3IsIHJlc3VsdCA9IDA7XG4gXG4gXHRpZiAoaXNfc2V0IHx8ICFzbi1cdTAwM2VycGNiX2lzX2FmX2xvY2FsKVxuLVx0XHRmbGFncyA9IFJQQ19UQVNLX1NPRlRDT05OO1xuJiM0MztcdFx0ZmxhZ3MgfD0gUlBDX1RBU0tfU09GVENPTk47XG4gXHRtc2ctXHUwMDNlcnBjX3Jlc3AgPSBcdTAwMjZyZXN1bHQ7XG4gXG4gXHRlcnJvciA9IHJwY19jYWxsX3N5bmMoY2xudCwgbXNnLCBmbGFncyk7XG5kaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9zdmMuYyBiL25ldC9zdW5ycGMvc3ZjLmNcbmluZGV4IGFlOWVjNGJmMzRmNzIuLjUzOWRkZDA2NDY3ZGYgMTAwNjQ0XG4tLS0gYS9uZXQvc3VucnBjL3N2Yy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvc3VucnBjL3N2Yy5jXG5AQCAtMTIwNyw2ICYjNDM7MTIwNyw5IEBAIGludCBzdmNfZ2VuZXJpY19ycGNiaW5kX3NldChzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRlcnJvciA9IHN2Y19ycGNiaW5kX3NldF92ZXJzaW9uKG5ldCwgcHJvZ3AsIHZlcnNpb24sXG4gXHRcdFx0XHRcdGZhbWlseSwgcHJvdG8sIHBvcnQpO1xuIFxuJiM0MztcdGlmIChlcnJvciA9PSAtRVRJTUVET1VUKVxuJiM0MztcdFx0cmV0dXJuIGVycm9yO1xuJiM0MztcbiBcdHJldHVybiAodmVycy1cdTAwM2V2c19ycGNiX29wdG5sKSA/IDAgOiBlcnJvcjtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoc3ZjX2dlbmVyaWNfcnBjYmluZF9zZXQpO1xuQEAgLTEyNDMsNiAmIzQzOzEyNDYsOCBAQCBpbnQgc3ZjX3JlZ2lzdGVyKGNvbnN0IHN0cnVjdCBzdmNfc2VydiAqc2Vydiwgc3RydWN0IG5ldCAqbmV0LFxuIFx0XHRcdFx0cHJpbnRrKEtFUk5fV0FSTklORyBcJiMzNDtzdmM6IGZhaWxlZCB0byByZWdpc3RlciBcJiMzNDtcbiBcdFx0XHRcdFx0XCYjMzQ7JXN2JXUgUlBDIHNlcnZpY2UgKGVycm5vICVkKS5cXG5cJiMzNDssXG4gXHRcdFx0XHRcdHByb2dwLVx1MDAzZXBnX25hbWUsIGksIC1lcnJvcik7XG4mIzQzO1x0XHRcdFx0aWYgKGVycm9yID09IC1FVElNRURPVVQpXG4mIzQzO1x0XHRcdFx0XHRyZXR1cm4gZXJyb3I7XG4gXHRcdFx0XHRicmVhaztcbiBcdFx0XHR9XG4gXHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxOToyNDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4zbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U1VOUlBDJiMzNDssCiAgICAmIzM0O05GU19GUyYjMzQ7LAogICAgJiMzNDtORlNEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c3ZjX3JlZ2lzdGVyJiMzNDssCiAgICAmIzM0O3N2Y19nZW5lcmljX3JwY2JpbmRfc2V0JiMzNDssCiAgICAmIzM0O3JwY2JfcmVnaXN0ZXImIzM0OywKICAgICYjMzQ7cnBjYl92NF9yZWdpc3RlciYjMzQ7LAogICAgJiMzNDtycGNiX2NyZWF0ZV9sb2NhbCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgdGltZW91dCBmb3IgbG9jYWwgcnBjYmluZCBjYWxscyBhbmQgaGFuZGxlcyAtRVRJTUVET1VUIGluIHN2Y19yZWdpc3RlciBhbmQgc3ZjX2dlbmVyaWNfcnBjYmluZF9zZXQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgc3VucnBjIHN1YnN5c3RlbSB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgYnkgcmVnaXN0ZXJpbmcgUlBDIHNlcnZpY2VzLCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIE5GUyBvciBvdGhlciBSUEMgbWVjaGFuaXNtcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDU5YjY4ODRjZjUxOWMwNDExYTAyZDdmNmQ5YTA4ZjBkN2U4MTA2ODgKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEF1ZyA3IDE5OjIzOjU5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9ycGNiX2NsbnQuYyBiL25ldC9zdW5ycGMvcnBjYl9jbG50LmMKaW5kZXggNmFhMzcyMTg4Yzg2YS4uNDA5NGYzMjU3ODc2ZCAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy9ycGNiX2NsbnQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc3VucnBjL3JwY2JfY2xudC5jCkBAIC0yMjEsNiAmIzQzOzIyMSwxMiBAQCBzdGF0aWMgdm9pZCBycGNiX3NldF9sb2NhbChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBycGNfY2xudCAqY2xudCwKICMgZGVmaW5lIFNVTl9MRU4ocHRyKSAob2Zmc2V0b2Yoc3RydWN0IHNvY2thZGRyX3VuLCBzdW5fcGF0aCkJCVwKIAkJICAgICAgJiM0MzsgMSAmIzQzOyBzdHJsZW4oKHB0ciktJmd0O3N1bl9wYXRoICYjNDM7IDEpKQogCiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBycGNfdGltZW91dCBycGNiX2xvY2FsX3RpbWVvdXQgPSB7CiYjNDM7CS50b19pbml0dmFsID0gKEhaIC8gMTApID8gOiAxLAomIzQzOwkudG9fbWF4dmFsID0gKEhaIC8gMTApID8gOiAxLAomIzQzOwkudG9fcmV0cmllcyA9IDAsCiYjNDM7fTsKJiM0MzsKIC8qCiAgKiBSZXR1cm5zIHplcm8gb24gc3VjY2Vzcywgb3RoZXJ3aXNlIGEgbmVnYXRpdmUgZXJybm8gdmFsdWUKICAqIGlzIHJldHVybmVkLgpAQCAtMjM4LDYgJiM0MzsyNDQsNyBAQCBzdGF0aWMgaW50IHJwY2JfY3JlYXRlX2FmX2xvY2FsKHN0cnVjdCBuZXQgKm5ldCwKIAkJLnZlcnNpb24JPSBSUENCVkVSU18yLAogCQkuYXV0aGZsYXZvcgk9IFJQQ19BVVRIX05VTEwsCiAJCS5jcmVkCQk9IGN1cnJlbnRfY3JlZCgpLAomIzQzOwkJLnRpbWVvdXQJPSAmYW1wO3JwY2JfbG9jYWxfdGltZW91dCwKIAkJLyoKIAkJICogV2UgdHVybiBvZmYgdGhlIGlkbGUgdGltZW91dCB0byBwcmV2ZW50IHRoZSBrZXJuZWwKIAkJICogZnJvbSBhdXRvbWF0aWNhbGx5IGRpc2Nvbm5lY3RpbmcgdGhlIHNvY2tldC4KQEAgLTMxMiw2ICYjNDM7MzE5LDcgQEAgc3RhdGljIGludCBycGNiX2NyZWF0ZV9sb2NhbF9uZXQoc3RydWN0IG5ldCAqbmV0KQogCQkudmVyc2lvbgk9IFJQQ0JWRVJTXzIsCiAJCS5hdXRoZmxhdm9yCT0gUlBDX0FVVEhfVU5JWCwKIAkJLmNyZWQJCT0gY3VycmVudF9jcmVkKCksCiYjNDM7CQkudGltZW91dAk9ICZhbXA7cnBjYl9sb2NhbF90aW1lb3V0LAogCQkuZmxhZ3MJCT0gUlBDX0NMTlRfQ1JFQVRFX05PUElORywKIAl9OwogCXN0cnVjdCBycGNfY2xudCAqY2xudCwgKmNsbnQ0OwpAQCAtNDAyLDExICYjNDM7NDEwLDExIEBAIHN0YXRpYyBzdHJ1Y3QgcnBjX2NsbnQgKnJwY2JfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqbm9kZW5hbWUsCiAKIHN0YXRpYyBpbnQgcnBjYl9yZWdpc3Rlcl9jYWxsKHN0cnVjdCBzdW5ycGNfbmV0ICpzbiwgc3RydWN0IHJwY19jbG50ICpjbG50LCBzdHJ1Y3QgcnBjX21lc3NhZ2UgKm1zZywgYm9vbCBpc19zZXQpCiB7Ci0JaW50IGZsYWdzID0gUlBDX1RBU0tfTk9DT05ORUNUOwomIzQzOwlpbnQgZmxhZ3MgPSBSUENfVEFTS19OT0NPTk5FQ1QgfCBSUENfVEFTS19TT0ZUIHwgUlBDX1RBU0tfVElNRU9VVDsKIAlpbnQgZXJyb3IsIHJlc3VsdCA9IDA7CiAKIAlpZiAoaXNfc2V0IHx8ICFzbi0mZ3Q7cnBjYl9pc19hZl9sb2NhbCkKLQkJZmxhZ3MgPSBSUENfVEFTS19TT0ZUQ09OTjsKJiM0MzsJCWZsYWdzIHw9IFJQQ19UQVNLX1NPRlRDT05OOwogCW1zZy0mZ3Q7cnBjX3Jlc3AgPSAmYW1wO3Jlc3VsdDsKIAogCWVycm9yID0gcnBjX2NhbGxfc3luYyhjbG50LCBtc2csIGZsYWdzKTsKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvc3ZjLmMgYi9uZXQvc3VucnBjL3N2Yy5jCmluZGV4IGFlOWVjNGJmMzRmNzIuLjUzOWRkZDA2NDY3ZGYgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMvc3ZjLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3N1bnJwYy9zdmMuYwpAQCAtMTIwNyw2ICYjNDM7MTIwNyw5IEBAIGludCBzdmNfZ2VuZXJpY19ycGNiaW5kX3NldChzdHJ1Y3QgbmV0ICpuZXQsCiAJZXJyb3IgPSBzdmNfcnBjYmluZF9zZXRfdmVyc2lvbihuZXQsIHByb2dwLCB2ZXJzaW9uLAogCQkJCQlmYW1pbHksIHByb3RvLCBwb3J0KTsKIAomIzQzOwlpZiAoZXJyb3IgPT0gLUVUSU1FRE9VVCkKJiM0MzsJCXJldHVybiBlcnJvcjsKJiM0MzsKIAlyZXR1cm4gKHZlcnMtJmd0O3ZzX3JwY2Jfb3B0bmwpID8gMCA6IGVycm9yOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoc3ZjX2dlbmVyaWNfcnBjYmluZF9zZXQpOwpAQCAtMTI0Myw2ICYjNDM7MTI0Niw4IEBAIGludCBzdmNfcmVnaXN0ZXIoY29uc3Qgc3RydWN0IHN2Y19zZXJ2ICpzZXJ2LCBzdHJ1Y3QgbmV0ICpuZXQsCiAJCQkJcHJpbnRrKEtFUk5fV0FSTklORyAmIzM0O3N2YzogZmFpbGVkIHRvIHJlZ2lzdGVyICYjMzQ7CiAJCQkJCSYjMzQ7JXN2JXUgUlBDIHNlcnZpY2UgKGVycm5vICVkKS5cbiYjMzQ7LAogCQkJCQlwcm9ncC0mZ3Q7cGdfbmFtZSwgaSwgLWVycm9yKTsKJiM0MzsJCQkJaWYgKGVycm9yID09IC1FVElNRURPVVQpCiYjNDM7CQkJCQlyZXR1cm4gZXJyb3I7CiAJCQkJYnJlYWs7CiAJCQl9CiAJCX0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTk6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg0MgoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDI4MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIEZlYXNpYmlsaXR5OiBJbnZlc3RpZ2F0aW5nIGEgc3VucnBjIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCBhIHBhdGNoIGhlcmUgdGhhdCYjMzk7cyBtYWtpbmcgY2hhbmdlcyB0byBgbmV0L3N1bnJwYy9ycGNiX2NsbnQuY2AgYW5kIGBuZXQvc3VucnBjL3N2Yy5jYC4gU3BlY2lmaWNhbGx5LCBpdCBpbnRyb2R1Y2VzIGEgbG9jYWwgdGltZW91dCwgYHJwY2JfbG9jYWxfdGltZW91dGAsIGZvciBSUEMgYmluZCBjbGllbnRzIHdpdGhpbiBgcnBjYl9jcmVhdGVfYWZfbG9jYWxgIGFuZCBgcnBjYl9jcmVhdGVfbG9jYWxfbmV0YC4gQWxzbywgYHJwY2JfcmVnaXN0ZXJfY2FsbGAgaXMgYmVpbmcgdXBkYXRlZCB0byB1c2UgYFJQQ19UQVNLX1NPRlQgfCBSUENfVEFTS19USU1FT1VUYCBmbGFncy4gSSBzZWUgYHN2Y19nZW5lcmljX3JwY2JpbmRfc2V0YCBhbmQgYHN2Y19yZWdpc3RlcmAgYXJlIG5vdyBjaGVja2luZyBmb3IgYC1FVElNRURPVVRgIGVycm9ycyBhbmQgcmV0dXJuaW5nIHRoZW0uCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCBpZiB0aGlzIGlzIGZ1enppbmctd29ydGh5LiBTdW5SUEMsIGFzIEkgcmVjYWxsLCBpcyBkZWZpbml0ZWx5IGEgdGFyZ2V0IHRoYXQmIzM5O3MgZXhwb3NlZCB0byB1c2Vyc3BhY2UsIHRoaW5rIE5GUyBhbmQgb3RoZXIgUlBDIHNlcnZpY2VzLiBUaGF0IG1ha2VzIGl0IGFuIGludGVyZXN0aW5nIHRhcmdldC4gTGV0JiMzOTtzIHNlZSwgdGhlIHBhdGNoIHRvdWNoZXMgdGhlc2UgZnVuY3Rpb25zOiBgcnBjYl9jcmVhdGVfYWZfbG9jYWxgLCBgcnBjYl9jcmVhdGVfbG9jYWxfbmV0YCwgYHJwY2JfcmVnaXN0ZXJfY2FsbGAsIGBzdmNfZ2VuZXJpY19ycGNiaW5kX3NldGAsIGFuZCBgc3ZjX3JlZ2lzdGVyYC4KClJpZ2h0LCB0aW1lIHRvIGNoZWNrIHRoZSBjb25maWcgb3B0aW9ucy4gTGV0JiMzOTtzIG1ha2Ugc3VyZSBgQ09ORklHX1NVTlJQQ2AgaXMgZW5hYmxlZC4gSWYgaXQgaXMsIHRoZW4gSSYjMzk7bGwgbG9vayBpbnRvIGl0cyBLY29uZmlnLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE5OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBTVU5SUEMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3N1bnJwYy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5uZXQvc3VucnBjL0tjb25maWc6Mjpjb25maWcgU1VOUlBDXG5uZXQvc3VucnBjL0tjb25maWctMy1cdHRyaXN0YXRlXG4tLVxubmV0L3N1bnJwYy9LY29uZmlnLTUtXG5uZXQvc3VucnBjL0tjb25maWc6Njpjb25maWcgU1VOUlBDX0dTU1xubmV0L3N1bnJwYy9LY29uZmlnLTctXHR0cmlzdGF0ZVxuLS1cbm5ldC9zdW5ycGMvS2NvbmZpZy0xMC1cbm5ldC9zdW5ycGMvS2NvbmZpZzoxMTpjb25maWcgU1VOUlBDX0JBQ0tDSEFOTkVMXG5uZXQvc3VucnBjL0tjb25maWctMTItXHRib29sXG4tLVxubmV0L3N1bnJwYy9LY29uZmlnLTE0LVxubmV0L3N1bnJwYy9LY29uZmlnOjE1OmNvbmZpZyBTVU5SUENfU1dBUFxubmV0L3N1bnJwYy9LY29uZmlnLTE2LVx0Ym9vbFxuLS1cbm5ldC9zdW5ycGMvS2NvbmZpZz0xOT1jb25maWcgUlBDU0VDX0dTU19LUkI1XG4tLVxubmV0L3N1bnJwYy9LY29uZmlnLTM1LVxubmV0L3N1bnJwYy9LY29uZmlnOjM2OmNvbmZpZyBTVU5SUENfREVCVUdcbm5ldC9zdW5ycGMvS2NvbmZpZy0zNy1cdGJvb2wgXCYjMzQ7UlBDOiBFbmFibGUgZHByaW50ayBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5uZXQvc3VucnBjL0tjb25maWctNDktXG5uZXQvc3VucnBjL0tjb25maWc6NTA6Y29uZmlnIFNVTlJQQ19ERUJVR19UUkFDRVxubmV0L3N1bnJwYy9LY29uZmlnLTUxLVx0Ym9vbCBcJiMzNDtSUEM6IFNlbmQgZGZwcmludGsoKSBvdXRwdXQgdG8gdGhlIHRyYWNlIGJ1ZmZlclwmIzM0O1xuLS1cbm5ldC9zdW5ycGMvS2NvbmZpZy02My1cbm5ldC9zdW5ycGMvS2NvbmZpZzo2NDpjb25maWcgU1VOUlBDX1hQUlRfUkRNQVxubmV0L3N1bnJwYy9LY29uZmlnLTY1LVx0dHJpc3RhdGUgXCYjMzQ7UlBDLW92ZXItUkRNQSB0cmFuc3BvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxOToyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODQ5CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTYxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgU1VOUlBDIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiBpcyBjbGVhcmx5IGNlbnRlcmVkIGFyb3VuZCBTVU5SUEMuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgcHJlc2VudCwganVzdCB0byBiZSBzdXJlLiBJJiMzOTttIG5vdGluZyB0aGF0IGtleSBmdW5jdGlvbnMgbGlrZSBgc3ZjX2dlbmVyaWNfcnBjYmluZF9zZXRgIGFuZCBgc3ZjX3JlZ2lzdGVyYCBhcmUgZXhwbGljaXRseSBleHBvcnRlZC4gVGhhdCBpbW1lZGlhdGVseSBmbGFncyB0aGVtIGFzIHBvdGVudGlhbCBwb2ludHMgb2YgaW50ZXJlc3QsIGFsbW9zdCBjZXJ0YWlubHkgQVBJIGVudHJ5cG9pbnRzLiBPbiB0aGUgb3RoZXIgaGFuZCwgZnVuY3Rpb25zIGxpa2UgYHJwY2JfY3JlYXRlX2FmX2xvY2FsYCwgYHJwY2JfY3JlYXRlX2xvY2FsX25ldGAsIGFuZCBgcnBjYl9yZWdpc3Rlcl9jYWxsYCBhcmUgc3RhdGljLCB3aGljaCBJJiMzOTtsbCBrZWVwIGluIG1pbmQgYnV0IGxpa2VseSB3b24mIzM5O3QgcmVxdWlyZSBhcyBjbG9zZSBhdHRlbnRpb24uCgpUaGUgcXVlc3Rpb24gbm93IGlzIHdoZXRoZXIgYHN2Y19nZW5lcmljX3JwY2JpbmRfc2V0YCBhbmQgYHN2Y19yZWdpc3RlcmAgYXJlIHRoZSBiZXN0IGZvY3VzIHN5bWJvbHMuIEFuZCB5ZXMsIGFmdGVyIGEgcXVpY2sgZXZhbHVhdGlvbiwgYHN2Y19yZWdpc3RlcmAgaXMgZGVmaW5pdGVseSBhbiBBUEkgZW50cnlwb2ludC4gQW5kIGBzdmNfZ2VuZXJpY19ycGNiaW5kX3NldGAgYWxzbyBsb29rcyBsaWtlIGEgc29saWQgQVBJIGVudHJ5cG9pbnQgdG9vLgoKQWxyaWdodCwgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRpdmUgaW50byBgbmV0L3N1bnJwYy9zdmMuY2AgdG8gZXhhbWluZSB0aGUgaW1wbGVtZW50YXRpb25zIG9mIGBzdmNfcmVnaXN0ZXJgIGFuZCBgc3ZjX2dlbmVyaWNfcnBjYmluZF9zZXRgIGluIGdyZWF0ZXIgZGV0YWlsLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHRoZSBjb3JlIHJlZ2lzdHJhdGlvbiBhbmQgY29uZmlndXJhdGlvbiBsb2dpYyB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxOToyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdmNfcmVnaXN0ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc3VucnBjL3N2Yy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zdW5ycGMvc3ZjLmM9MTEwMj1zdGF0aWMgaW50IF9fc3ZjX3JwY2JfcmVnaXN0ZXI2KHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgdTMyIHByb2dyYW0sXG4tLVxubmV0L3N1bnJwYy9zdmMuYy0xMTQ1LSAqL1xubmV0L3N1bnJwYy9zdmMuYzoxMTQ2OnN0YXRpYyBpbnQgX19zdmNfcmVnaXN0ZXIoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpwcm9nbmFtZSxcbm5ldC9zdW5ycGMvc3ZjLmMtMTE0Ny1cdFx0XHQgIGNvbnN0IHUzMiBwcm9ncmFtLCBjb25zdCB1MzIgdmVyc2lvbixcbi0tXG5uZXQvc3VucnBjL3N2Yy5jLTExNjUtXG5uZXQvc3VucnBjL3N2Yy5jOjExNjY6XHR0cmFjZV9zdmNfcmVnaXN0ZXIocHJvZ25hbWUsIHZlcnNpb24sIGZhbWlseSwgcHJvdG9jb2wsIHBvcnQsIGVycm9yKTtcbm5ldC9zdW5ycGMvc3ZjLmMtMTE2Ny1cdHJldHVybiBlcnJvcjtcbi0tXG5uZXQvc3VucnBjL3N2Yy5jPTExNzE9aW50IHN2Y19ycGNiaW5kX3NldF92ZXJzaW9uKHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvc3VucnBjL3N2Yy5jLTExNzYte1xubmV0L3N1bnJwYy9zdmMuYzoxMTc3Olx0cmV0dXJuIF9fc3ZjX3JlZ2lzdGVyKG5ldCwgcHJvZ3AtXHUwMDNlcGdfbmFtZSwgcHJvZ3AtXHUwMDNlcGdfcHJvZyxcbm5ldC9zdW5ycGMvc3ZjLmMtMTE3OC1cdFx0XHRcdHZlcnNpb24sIGZhbWlseSwgcHJvdG8sIHBvcnQpO1xuLS1cbm5ldC9zdW5ycGMvc3ZjLmM9MTIxNT1FWFBPUlRfU1lNQk9MX0dQTChzdmNfZ2VuZXJpY19ycGNiaW5kX3NldCk7XG4tLVxubmV0L3N1bnJwYy9zdmMuYy0xMjE3LS8qKlxubmV0L3N1bnJwYy9zdmMuYzoxMjE4OiAqIHN2Y19yZWdpc3RlciAtIHJlZ2lzdGVyIGFuIFJQQyBzZXJ2aWNlIHdpdGggdGhlIGxvY2FsIHBvcnRtYXBwZXJcbm5ldC9zdW5ycGMvc3ZjLmMtMTIxOS0gKiBAc2Vydjogc3ZjX3NlcnYgc3RydWN0IGZvciB0aGUgc2VydmljZSB0byByZWdpc3RlclxuLS1cbm5ldC9zdW5ycGMvc3ZjLmMtMTIyNi0gKi9cbm5ldC9zdW5ycGMvc3ZjLmM6MTIyNzppbnQgc3ZjX3JlZ2lzdGVyKGNvbnN0IHN0cnVjdCBzdmNfc2VydiAqc2Vydiwgc3RydWN0IG5ldCAqbmV0LFxubmV0L3N1bnJwYy9zdmMuYy0xMjI4LVx0XHQgY29uc3QgaW50IGZhbWlseSwgY29uc3QgdW5zaWduZWQgc2hvcnQgcHJvdG8sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTk6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDgwNwoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDc1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIEkgc2VlIGl0OgoKKipSUEMgQmluZGluZyBGdW5jdGlvbiBFeGFtaW5hdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGhvdyB0aGUgUlBDIGJpbmRpbmcgcHJvY2VzcyBpcyBoYW5kbGVkLiBJIHNlZSB0aGF0IGBzdmNfcmVnaXN0ZXJgIGlzIGF2YWlsYWJsZSwgc28gdGhhdCYjMzk7cyBvYnZpb3VzbHkgcGFydCBvZiB0aGUgc2VydmVyLXNpZGUgcmVnaXN0cmF0aW9uIHByb2Nlc3MuIEFuZCBgc3ZjX2dlbmVyaWNfcnBjYmluZF9zZXRgIGlzIGFsc28gZXhwb3J0ZWQg4oCTIHRoYXQgbGlrZWx5IGhhbmRsZXMgc29tZSBnZW5lcmljIGJpbmRpbmcgY29uZmlndXJhdGlvbi4gTm93LCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGNsaWVudC1zaWRlIGludGVyYWN0aW9uLCBJIHNob3VsZCBwcm9iYWJseSBiZSBsb29raW5nIGF0IGBuZXQvc3VucnBjL3JwY2JfY2xudC5jYC4gSSBuZWVkIHRvIHJldmlldyB0aG9zZSBmdW5jdGlvbnMgaW4gdGhhdCBmaWxlIHdoaWNoIHdpbGwgZGVhbCB3aXRoIHJlZ2lzdGVyaW5nIHdpdGggdGhlIGxvY2FsIFJQQyBiaW5kIHNlcnZpY2UgKGBycGNiX2NyZWF0ZV9hZl9sb2NhbGAsIGBycGNiX2NyZWF0ZV9sb2NhbF9uZXRgLCBhbmQgYHJwY2JfcmVnaXN0ZXJfY2FsbGApLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBmdWxsIHBpY3R1cmUgb24gaG93IHRoZSBjbGllbnQgZ29lcyBhYm91dCBjb25uZWN0aW5nIHRvIGFuZCByZWdpc3RlcmluZyB3aXRoIHRoZSBycGNiaW5kIHNlcnZpY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTk6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cnBjYl9jcmVhdGVfYWZfbG9jYWwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc3VucnBjL3JwY2JfY2xudC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zdW5ycGMvcnBjYl9jbG50LmM9MjI0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcnBjX3RpbWVvdXQgcnBjYl9sb2NhbF90aW1lb3V0ID0ge1xuLS1cbm5ldC9zdW5ycGMvcnBjYl9jbG50LmMtMjMzLSAqL1xubmV0L3N1bnJwYy9ycGNiX2NsbnQuYzoyMzQ6c3RhdGljIGludCBycGNiX2NyZWF0ZV9hZl9sb2NhbChzdHJ1Y3QgbmV0ICpuZXQsXG5uZXQvc3VucnBjL3JwY2JfY2xudC5jLTIzNS1cdFx0XHRcdGNvbnN0IHN0cnVjdCBzb2NrYWRkcl91biAqYWRkcilcbi0tXG5uZXQvc3VucnBjL3JwY2JfY2xudC5jPTI4MT1zdGF0aWMgaW50IHJwY2JfY3JlYXRlX2xvY2FsX2Fic3RyYWN0KHN0cnVjdCBuZXQgKm5ldClcbi0tXG5uZXQvc3VucnBjL3JwY2JfY2xudC5jLTI4Ny1cbm5ldC9zdW5ycGMvcnBjYl9jbG50LmM6Mjg4Olx0cmV0dXJuIHJwY2JfY3JlYXRlX2FmX2xvY2FsKG5ldCwgXHUwMDI2cnBjYl9sb2NhbGFkZHJfYWJzdHJhY3QpO1xubmV0L3N1bnJwYy9ycGNiX2NsbnQuYy0yODktfVxuLS1cbm5ldC9zdW5ycGMvcnBjYl9jbG50LmM9MjkxPXN0YXRpYyBpbnQgcnBjYl9jcmVhdGVfbG9jYWxfdW5peChzdHJ1Y3QgbmV0ICpuZXQpXG4tLVxubmV0L3N1bnJwYy9ycGNiX2NsbnQuYy0yOTctXG5uZXQvc3VucnBjL3JwY2JfY2xudC5jOjI5ODpcdHJldHVybiBycGNiX2NyZWF0ZV9hZl9sb2NhbChuZXQsIFx1MDAyNnJwY2JfbG9jYWxhZGRyX3VuaXgpO1xubmV0L3N1bnJwYy9ycGNiX2NsbnQuYy0yOTktfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE5OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0NzIKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIExvY2FsIFJQQyBCaW5kaW5nIEZ1bmN0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIFJQQyBjb2RlIGFuZCBub3RpY2luZyBzb21ldGhpbmcgaW50ZXJlc3RpbmcuIEl0IGxvb2tzIGxpa2UgYHJwY2JfY3JlYXRlX2FmX2xvY2FsYCwgYHJwY2JfY3JlYXRlX2xvY2FsX25ldGAsIGFuZCBgcnBjYl9yZWdpc3Rlcl9jYWxsYCBhcmUgYWxsIGRlY2xhcmVkIGFzIGBzdGF0aWNgLiBUaGF0IGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdC4gU3RhdGljIGZ1bmN0aW9ucyBtZWFuIHRoZWlyIHNjb3BlIGlzIGxpbWl0ZWQgdG8gdGhlIGN1cnJlbnQgY29tcGlsYXRpb24gdW5pdCwgc28gdGhleSYjMzk7cmUgbm90IGludGVuZGVkIGZvciBleHRlcm5hbCB1c2UuIEkgd29uZGVyIHdoeSB0aGVzZSBwYXJ0aWN1bGFyIGZ1bmN0aW9ucyBhcmUgZGVlbWVkIGludGVybmFsLgoKTXkgbmV4dCBzdGVwIGlzIGNsZWFyOiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIG9mIHRoZXNlIGxvY2FsIGZ1bmN0aW9ucy4gTGV0JiMzOTtzIHNlZSB3aG8gaXMgYWN0dWFsbHkgY2FsbGluZyBgcnBjYl9jcmVhdGVfbG9jYWxfbmV0YC4gSXQgc2VlbXMgYXMgdGhvdWdoIHNvbWVvbmUgd2FudHMgdG8ga2VlcCBhIGNsb3NlIHJlaW4gb24gdGhlIGxvZ2ljIHRoYXQgdXNlcyB0aGlzIGZ1bmN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxOToyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtycGNiX2NyZWF0ZV9sb2NhbF9uZXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc3VucnBjL3JwY2JfY2xudC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zdW5ycGMvcnBjYl9jbG50LmM9MjkxPXN0YXRpYyBpbnQgcnBjYl9jcmVhdGVfbG9jYWxfdW5peChzdHJ1Y3QgbmV0ICpuZXQpXG4tLVxubmV0L3N1bnJwYy9ycGNiX2NsbnQuYy0zMDQtICovXG5uZXQvc3VucnBjL3JwY2JfY2xudC5jOjMwNTpzdGF0aWMgaW50IHJwY2JfY3JlYXRlX2xvY2FsX25ldChzdHJ1Y3QgbmV0ICpuZXQpXG5uZXQvc3VucnBjL3JwY2JfY2xudC5jLTMwNi17XG4tLVxubmV0L3N1bnJwYy9ycGNiX2NsbnQuYz0zNTM9aW50IHJwY2JfY3JlYXRlX2xvY2FsKHN0cnVjdCBuZXQgKm5ldClcbi0tXG5uZXQvc3VucnBjL3JwY2JfY2xudC5jLTM2Ni1cdCAgICBycGNiX2NyZWF0ZV9sb2NhbF91bml4KG5ldCkgIT0gMClcbm5ldC9zdW5ycGMvcnBjYl9jbG50LmM6MzY3Olx0XHRyZXN1bHQgPSBycGNiX2NyZWF0ZV9sb2NhbF9uZXQobmV0KTtcbm5ldC9zdW5ycGMvcnBjYl9jbG50LmMtMzY4LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxOToyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1OTcxCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBwcmVzZW50ZWQgYXMgaWYgaXQgd2VyZSBteSBvd24gaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipGb2N1c2luZyBpbiBvbiBgcnBjYl9jcmVhdGVfbG9jYWxgKioKClJpZ2h0LCBzbyBgcnBjYl9jcmVhdGVfbG9jYWxgLi4uIHRoYXQmIzM5O3MgdGhlIGV4cG9ydGVkIGZ1bmN0aW9uIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGhlcmUuIEltbWVkaWF0ZWx5LCB0aGUgc2lnbmlmaWNhbmNlIGNsaWNrcyBpbi4gVGhpcyBpc24mIzM5O3QganVzdCAqYSogZnVuY3Rpb247IGl0JiMzOTtzIHRoZSBvdXR3YXJkLWZhY2luZyBlbnRyeSBwb2ludCwgdGhlIG9uZSB0aGF0IG1ha2VzIHRoaXMgZnVuY3Rpb25hbGl0eSBhdmFpbGFibGUgdG8gdGhlIHdvcmxkLCBvciBhdCBsZWFzdCwgdGhlIGxvY2FsIHN5c3RlbS4gVGhhdCBtZWFucyB0aGUgc2lnbmF0dXJlLCB0aGUgYmVoYXZpb3IsIHRoZSBpbnRlcm5hbCBkZXBlbmRlbmNpZXMg4oCTIGFsbCBvZiBpdCBtdXN0IGJlIG1ldGljdWxvdXNseSBjb25zaWRlcmVkIGJlY2F1c2UgaXQmIzM5O3MgdGhlIHB1YmxpYyBBUEkuIEl0IGlzIGhvdyBvdGhlciBtb2R1bGVzLCBvciBhcHBsaWNhdGlvbnMsIGFyZSBpbnRlbmRlZCB0byBtYWtlIHVzZSBvZiB0aGUgUlBDIGJpbmRlciBmdW5jdGlvbmFsaXR5LiBUaGlua2luZyBmdXJ0aGVyIGFib3V0IHRoZSBmdW5jdGlvbiwgSSBpbW1lZGlhdGVseSBjb25zaWRlciBwb3RlbnRpYWwgZXJyb3JzIHRoYXQgbWF5IG9jY3VyIGluIHNldHRpbmcgdXAgdGhlIGxvY2FsIFJQQyBiaW5kZXIuIEl0IHdpbGwgcmVxdWlyZSB0aGUgYXBwcm9wcmlhdGUgcGVybWlzc2lvbnMsIG5ldHdvcmsgY29uZmlndXJhdGlvbiwgYW5kIGl0IG11c3Qgc3VjY2Vzc2Z1bGx5IHJlZ2lzdGVyIHNlcnZpY2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxOToyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtycGNiX2NyZWF0ZV9sb2NhbCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zdW5ycGMvcnBjYl9jbG50LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3N1bnJwYy9ycGNiX2NsbnQuYz0yMDY9c3RhdGljIHZvaWQgcnBjYl9zZXRfbG9jYWwoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgcnBjX2NsbnQgKmNsbnQsXG4tLVxubmV0L3N1bnJwYy9ycGNiX2NsbnQuYy0yMTEtXG5uZXQvc3VucnBjL3JwY2JfY2xudC5jOjIxMjpcdC8qIFByb3RlY3RlZCBieSBycGNiX2NyZWF0ZV9sb2NhbF9tdXRleCAqL1xubmV0L3N1bnJwYy9ycGNiX2NsbnQuYy0yMTMtXHRzbi1cdTAwM2VycGNiX2xvY2FsX2NsbnQgPSBjbG50O1xuLS1cbm5ldC9zdW5ycGMvcnBjYl9jbG50LmM9MjM0PXN0YXRpYyBpbnQgcnBjYl9jcmVhdGVfYWZfbG9jYWwoc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9zdW5ycGMvcnBjYl9jbG50LmMtMjgwLVxubmV0L3N1bnJwYy9ycGNiX2NsbnQuYzoyODE6c3RhdGljIGludCBycGNiX2NyZWF0ZV9sb2NhbF9hYnN0cmFjdChzdHJ1Y3QgbmV0ICpuZXQpXG5uZXQvc3VucnBjL3JwY2JfY2xudC5jLTI4Mi17XG4tLVxubmV0L3N1bnJwYy9ycGNiX2NsbnQuYy0yOTAtXG5uZXQvc3VucnBjL3JwY2JfY2xudC5jOjI5MTpzdGF0aWMgaW50IHJwY2JfY3JlYXRlX2xvY2FsX3VuaXgoc3RydWN0IG5ldCAqbmV0KVxubmV0L3N1bnJwYy9ycGNiX2NsbnQuYy0yOTIte1xuLS1cbm5ldC9zdW5ycGMvcnBjYl9jbG50LmMtMzA0LSAqL1xubmV0L3N1bnJwYy9ycGNiX2NsbnQuYzozMDU6c3RhdGljIGludCBycGNiX2NyZWF0ZV9sb2NhbF9uZXQoc3RydWN0IG5ldCAqbmV0KVxubmV0L3N1bnJwYy9ycGNiX2NsbnQuYy0zMDYte1xuLS1cbm5ldC9zdW5ycGMvcnBjYl9jbG50LmMtMzUyLSAqL1xubmV0L3N1bnJwYy9ycGNiX2NsbnQuYzozNTM6aW50IHJwY2JfY3JlYXRlX2xvY2FsKHN0cnVjdCBuZXQgKm5ldClcbm5ldC9zdW5ycGMvcnBjYl9jbG50LmMtMzU0LXtcbm5ldC9zdW5ycGMvcnBjYl9jbG50LmM6MzU1Olx0c3RhdGljIERFRklORV9NVVRFWChycGNiX2NyZWF0ZV9sb2NhbF9tdXRleCk7XG5uZXQvc3VucnBjL3JwY2JfY2xudC5jLTM1Ni1cdGludCByZXN1bHQgPSAwO1xuLS1cbm5ldC9zdW5ycGMvcnBjYl9jbG50LmMtMzYwLVxubmV0L3N1bnJwYy9ycGNiX2NsbnQuYzozNjE6XHRtdXRleF9sb2NrKFx1MDAyNnJwY2JfY3JlYXRlX2xvY2FsX211dGV4KTtcbm5ldC9zdW5ycGMvcnBjYl9jbG50LmMtMzYyLVx0aWYgKHJwY2JfZ2V0X2xvY2FsKG5ldCkpXG4tLVxubmV0L3N1bnJwYy9ycGNiX2NsbnQuYy0zNjQtXG5uZXQvc3VucnBjL3JwY2JfY2xudC5jOjM2NTpcdGlmIChycGNiX2NyZWF0ZV9sb2NhbF9hYnN0cmFjdChuZXQpICE9IDAgXHUwMDI2XHUwMDI2XG5uZXQvc3VucnBjL3JwY2JfY2xudC5jOjM2NjpcdCAgICBycGNiX2NyZWF0ZV9sb2NhbF91bml4KG5ldCkgIT0gMClcbm5ldC9zdW5ycGMvcnBjYl9jbG50LmM6MzY3Olx0XHRyZXN1bHQgPSBycGNiX2NyZWF0ZV9sb2NhbF9uZXQobmV0KTtcbm5ldC9zdW5ycGMvcnBjYl9jbG50LmMtMzY4LVxubmV0L3N1bnJwYy9ycGNiX2NsbnQuYy0zNjktb3V0OlxubmV0L3N1bnJwYy9ycGNiX2NsbnQuYzozNzA6XHRtdXRleF91bmxvY2soXHUwMDI2cnBjYl9jcmVhdGVfbG9jYWxfbXV0ZXgpO1xubmV0L3N1bnJwYy9ycGNiX2NsbnQuYy0zNzEtXHRyZXR1cm4gcmVzdWx0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxOToyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MDUwCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkludmVzdGlnYXRpbmcgdGhlIGBycGNiX2NyZWF0ZV9sb2NhbGAgRnVuY3Rpb24mIzM5O3MgU2NvcGUqKgoKT2theSwgc28gYHJwY2JfY3JlYXRlX2xvY2FsYCBpc24mIzM5O3Qgc3RhdGljLCBvciBhdCBsZWFzdCBpdCBzZWVtcyB0byBiZSBleHBvc2VkIHNvbWVob3cuIFRoYXQmIzM5O3MgdGhlIGNsdWUgSSBuZWVkZWQuIE5vdywgaWYgaXQmIzM5O3MgdmlzaWJsZSBvdXRzaWRlIGl0cyBpbW1lZGlhdGUgc2NvcGUsIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgaXMgdGhlIGNsaWVudC1zaWRlIGNvZGUsIHBhcnRpY3VsYXJseSB3aGVyZSBpdCBtaWdodCBiZSAqdXNlZCogdG8gcmVnaXN0ZXIgY2FsbHMuIFRoZSBvYnZpb3VzIHBsYWNlIHRvIGludmVzdGlnYXRlIG5leHQgaXMgdGhlIGBuZXQvc3VucnBjL3JwY2JfY2xudC5jYCBmaWxlLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIGlmIGBycGNiX3JlZ2lzdGVyX2NhbGxgIGlzIGRlZmluZWQgdGhlcmUgYW5kLCBtb3JlIGltcG9ydGFudGx5LCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGZ1bmN0aW9uIEkmIzM5O20gY3VyaW91cyBhYm91dC4gVW5kZXJzdGFuZGluZyB0aGlzIHJlbGF0aW9uc2hpcCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgaGFuZGxlIG9uIGhvdyB0aGlzIHJlZ2lzdHJhdGlvbiBwcm9jZXNzIHdvcmtzLiBJJiMzOTttIGhvcGluZyBgcnBjYl9yZWdpc3Rlcl9jYWxsYCBwcm92aWRlcyBhIGNsZWFyIHBhdGh3YXkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE5OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JwY2JfcmVnaXN0ZXJfY2FsbCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zdW5ycGMvcnBjYl9jbG50LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3N1bnJwYy9ycGNiX2NsbnQuYz0zNzQ9c3RhdGljIHN0cnVjdCBycGNfY2xudCAqcnBjYl9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpub2RlbmFtZSxcbi0tXG5uZXQvc3VucnBjL3JwY2JfY2xudC5jLTQxMC1cbm5ldC9zdW5ycGMvcnBjYl9jbG50LmM6NDExOnN0YXRpYyBpbnQgcnBjYl9yZWdpc3Rlcl9jYWxsKHN0cnVjdCBzdW5ycGNfbmV0ICpzbiwgc3RydWN0IHJwY19jbG50ICpjbG50LCBzdHJ1Y3QgcnBjX21lc3NhZ2UgKm1zZywgYm9vbCBpc19zZXQpXG5uZXQvc3VucnBjL3JwY2JfY2xudC5jLTQxMi17XG4tLVxubmV0L3N1bnJwYy9ycGNiX2NsbnQuYz00NjI9aW50IHJwY2JfcmVnaXN0ZXIoc3RydWN0IG5ldCAqbmV0LCB1MzIgcHJvZywgdTMyIHZlcnMsIGludCBwcm90LCB1bnNpZ25lZCBzaG9ydCBwb3J0KVxuLS1cbm5ldC9zdW5ycGMvcnBjYl9jbG50LmMtNDgzLVxubmV0L3N1bnJwYy9ycGNiX2NsbnQuYzo0ODQ6XHRyZXR1cm4gcnBjYl9yZWdpc3Rlcl9jYWxsKHNuLCBzbi1cdTAwM2VycGNiX2xvY2FsX2NsbnQsIFx1MDAyNm1zZywgaXNfc2V0KTtcbm5ldC9zdW5ycGMvcnBjYl9jbG50LmMtNDg1LX1cbi0tXG5uZXQvc3VucnBjL3JwY2JfY2xudC5jPTQ5MD1zdGF0aWMgaW50IHJwY2JfcmVnaXN0ZXJfaW5ldDQoc3RydWN0IHN1bnJwY19uZXQgKnNuLFxuLS1cbm5ldC9zdW5ycGMvcnBjYl9jbG50LmMtNTA3LVxubmV0L3N1bnJwYy9ycGNiX2NsbnQuYzo1MDg6XHRyZXN1bHQgPSBycGNiX3JlZ2lzdGVyX2NhbGwoc24sIHNuLVx1MDAzZXJwY2JfbG9jYWxfY2xudDQsIG1zZywgaXNfc2V0KTtcbm5ldC9zdW5ycGMvcnBjYl9jbG50LmMtNTA5LVx0a2ZyZWUobWFwLVx1MDAzZXJfYWRkcik7XG4tLVxubmV0L3N1bnJwYy9ycGNiX2NsbnQuYz01MTY9c3RhdGljIGludCBycGNiX3JlZ2lzdGVyX2luZXQ2KHN0cnVjdCBzdW5ycGNfbmV0ICpzbixcbi0tXG5uZXQvc3VucnBjL3JwY2JfY2xudC5jLTUzMy1cbm5ldC9zdW5ycGMvcnBjYl9jbG50LmM6NTM0Olx0cmVzdWx0ID0gcnBjYl9yZWdpc3Rlcl9jYWxsKHNuLCBzbi1cdTAwM2VycGNiX2xvY2FsX2NsbnQ0LCBtc2csIGlzX3NldCk7XG5uZXQvc3VucnBjL3JwY2JfY2xudC5jLTUzNS1cdGtmcmVlKG1hcC1cdTAwM2VyX2FkZHIpO1xuLS1cbm5ldC9zdW5ycGMvcnBjYl9jbG50LmM9NTM5PXN0YXRpYyBpbnQgcnBjYl91bnJlZ2lzdGVyX2FsbF9wcm90b2ZhbWlsaWVzKHN0cnVjdCBzdW5ycGNfbmV0ICpzbixcbi0tXG5uZXQvc3VucnBjL3JwY2JfY2xudC5jLTU0OC1cbm5ldC9zdW5ycGMvcnBjYl9jbG50LmM6NTQ5Olx0cmV0dXJuIHJwY2JfcmVnaXN0ZXJfY2FsbChzbiwgc24tXHUwMDNlcnBjYl9sb2NhbF9jbG50NCwgbXNnLCBmYWxzZSk7XG5uZXQvc3VucnBjL3JwY2JfY2xudC5jLTU1MC19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE5OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgwMDQKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyB0aGUgUmVnaXN0cmF0aW9uIFByb2Nlc3MqKgoKQWxyaWdodCwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgcmVnaXN0cmF0aW9uLCBzcGVjaWZpY2FsbHkgdGhlIGV4cG9ydGVkIGZ1bmN0aW9uIGBycGNiX3JlZ2lzdGVyYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7T2theSwgdGhhdCYjMzk7cyB0aGUgZW50cnkgcG9pbnQgd2UmIzM5O3JlIGNvbmNlcm5lZCB3aXRoLiYjMzQ7IEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGZ1bmN0aW9uIHdvcmtzLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBzeXN0ZW0uIFdoYXQgYXJlIGl0cyBkZXBlbmRlbmNpZXM/IEhvdyBkb2VzIGl0IGhhbmRsZSBlcnJvcnM/CgpUbyBnZXQgYSBjbGVhcmVyIHBpY3R1cmUsIEkmIzM5O20gZ29pbmcgdG8gZGlnIGEgbGl0dGxlIGRlZXBlci4gSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgcmVnaXN0cmF0aW9uIHByb2Nlc3MgaXMgdGllZCB0b2dldGhlciwgYW5kIGhvdyBpdCBkaWZmZXJzIGZyb20gYSBtb3JlIHN0YXRpYyBtZXRob2Qgb2YgUlBDIHVzZS4gSSYjMzk7bGwgbmVlZCB0byBleGFtaW5lIGBycGNiX2NyZWF0ZV9sb2NhbGAgYW5kIHNlZSBpZiB0aGV5IGFyZSByZWxhdGVkLiBNeSBmb2N1cyB3aWxsIGJlIG9uIHRoZSBrZXkgcGllY2VzOgoKKiAgIEhvdyBpcyB0aGUgcmVnaXN0cmF0aW9uIGluZm8gaGFuZGxlZD8KKiAgIFdoYXQgaXMgcmVnaXN0ZXJlZCBpbiB0aGUgcHJvY2Vzcz8KKiAgIFdoYXQgcmVzb3VyY2VzIGFyZSBhbGxvY2F0ZWQ/CgpJJiMzOTtsbCBiZSBsb29raW5nIGZvciBwb3RlbnRpYWwgYm90dGxlbmVja3MsIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcywgb3IgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9ucyBpbiB0aGVzZSBmdW5jdGlvbnMuIEl0JiMzOTtzIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxOToyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtycGNiX3JlZ2lzdGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3N1bnJwYy9ycGNiX2NsbnQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc3VucnBjL3JwY2JfY2xudC5jPTM3ND1zdGF0aWMgc3RydWN0IHJwY19jbG50ICpycGNiX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKm5vZGVuYW1lLFxuLS1cbm5ldC9zdW5ycGMvcnBjYl9jbG50LmMtNDEwLVxubmV0L3N1bnJwYy9ycGNiX2NsbnQuYzo0MTE6c3RhdGljIGludCBycGNiX3JlZ2lzdGVyX2NhbGwoc3RydWN0IHN1bnJwY19uZXQgKnNuLCBzdHJ1Y3QgcnBjX2NsbnQgKmNsbnQsIHN0cnVjdCBycGNfbWVzc2FnZSAqbXNnLCBib29sIGlzX3NldClcbm5ldC9zdW5ycGMvcnBjYl9jbG50LmMtNDEyLXtcbi0tXG5uZXQvc3VucnBjL3JwY2JfY2xudC5jLTQyOS0vKipcbm5ldC9zdW5ycGMvcnBjYl9jbG50LmM6NDMwOiAqIHJwY2JfcmVnaXN0ZXIgLSBzZXQgb3IgdW5zZXQgYSBwb3J0IHJlZ2lzdHJhdGlvbiB3aXRoIHRoZSBsb2NhbCBycGNiaW5kIHN2Y1xubmV0L3N1bnJwYy9ycGNiX2NsbnQuYy00MzEtICogQG5ldDogdGFyZ2V0IG5ldHdvcmsgbmFtZXNwYWNlXG4tLVxubmV0L3N1bnJwYy9ycGNiX2NsbnQuYy00NjEtICovXG5uZXQvc3VucnBjL3JwY2JfY2xudC5jOjQ2MjppbnQgcnBjYl9yZWdpc3RlcihzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBwcm9nLCB1MzIgdmVycywgaW50IHByb3QsIHVuc2lnbmVkIHNob3J0IHBvcnQpXG5uZXQvc3VucnBjL3JwY2JfY2xudC5jLTQ2My17XG4tLVxubmV0L3N1bnJwYy9ycGNiX2NsbnQuYy00ODMtXG5uZXQvc3VucnBjL3JwY2JfY2xudC5jOjQ4NDpcdHJldHVybiBycGNiX3JlZ2lzdGVyX2NhbGwoc24sIHNuLVx1MDAzZXJwY2JfbG9jYWxfY2xudCwgXHUwMDI2bXNnLCBpc19zZXQpO1xubmV0L3N1bnJwYy9ycGNiX2NsbnQuYy00ODUtfVxuLS1cbm5ldC9zdW5ycGMvcnBjYl9jbG50LmMtNDg5LSAqL1xubmV0L3N1bnJwYy9ycGNiX2NsbnQuYzo0OTA6c3RhdGljIGludCBycGNiX3JlZ2lzdGVyX2luZXQ0KHN0cnVjdCBzdW5ycGNfbmV0ICpzbixcbm5ldC9zdW5ycGMvcnBjYl9jbG50LmMtNDkxLVx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKnNhcCxcbi0tXG5uZXQvc3VucnBjL3JwY2JfY2xudC5jLTUwNy1cbm5ldC9zdW5ycGMvcnBjYl9jbG50LmM6NTA4Olx0cmVzdWx0ID0gcnBjYl9yZWdpc3Rlcl9jYWxsKHNuLCBzbi1cdTAwM2VycGNiX2xvY2FsX2NsbnQ0LCBtc2csIGlzX3NldCk7XG5uZXQvc3VucnBjL3JwY2JfY2xudC5jLTUwOS1cdGtmcmVlKG1hcC1cdTAwM2VyX2FkZHIpO1xuLS1cbm5ldC9zdW5ycGMvcnBjYl9jbG50LmMtNTE1LSAqL1xubmV0L3N1bnJwYy9ycGNiX2NsbnQuYzo1MTY6c3RhdGljIGludCBycGNiX3JlZ2lzdGVyX2luZXQ2KHN0cnVjdCBzdW5ycGNfbmV0ICpzbixcbm5ldC9zdW5ycGMvcnBjYl9jbG50LmMtNTE3LVx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKnNhcCxcbi0tXG5uZXQvc3VucnBjL3JwY2JfY2xudC5jLTUzMy1cbm5ldC9zdW5ycGMvcnBjYl9jbG50LmM6NTM0Olx0cmVzdWx0ID0gcnBjYl9yZWdpc3Rlcl9jYWxsKHNuLCBzbi1cdTAwM2VycGNiX2xvY2FsX2NsbnQ0LCBtc2csIGlzX3NldCk7XG5uZXQvc3VucnBjL3JwY2JfY2xudC5jLTUzNS1cdGtmcmVlKG1hcC1cdTAwM2VyX2FkZHIpO1xuLS1cbm5ldC9zdW5ycGMvcnBjYl9jbG50LmM9NTM5PXN0YXRpYyBpbnQgcnBjYl91bnJlZ2lzdGVyX2FsbF9wcm90b2ZhbWlsaWVzKHN0cnVjdCBzdW5ycGNfbmV0ICpzbixcbi0tXG5uZXQvc3VucnBjL3JwY2JfY2xudC5jLTU0OC1cbm5ldC9zdW5ycGMvcnBjYl9jbG50LmM6NTQ5Olx0cmV0dXJuIHJwY2JfcmVnaXN0ZXJfY2FsbChzbiwgc24tXHUwMDNlcnBjYl9sb2NhbF9jbG50NCwgbXNnLCBmYWxzZSk7XG5uZXQvc3VucnBjL3JwY2JfY2xudC5jLTU1MC19XG4tLVxubmV0L3N1bnJwYy9ycGNiX2NsbnQuYz01OTY9aW50IHJwY2JfdjRfcmVnaXN0ZXIoc3RydWN0IG5ldCAqbmV0LCBjb25zdCB1MzIgcHJvZ3JhbSwgY29uc3QgdTMyIHZlcnNpb24sXG4tLVxubmV0L3N1bnJwYy9ycGNiX2NsbnQuYy02MTUtXG5uZXQvc3VucnBjL3JwY2JfY2xudC5jOjYxNjpcdHRyYWNlX3JwY2JfcmVnaXN0ZXIobWFwLnJfcHJvZywgbWFwLnJfdmVycywgbWFwLnJfYWRkciwgbWFwLnJfbmV0aWQpO1xubmV0L3N1bnJwYy9ycGNiX2NsbnQuYy02MTctXG4tLVxubmV0L3N1bnJwYy9ycGNiX2NsbnQuYy02MTktXHRjYXNlIEFGX0lORVQ6XG5uZXQvc3VucnBjL3JwY2JfY2xudC5jOjYyMDpcdFx0cmV0dXJuIHJwY2JfcmVnaXN0ZXJfaW5ldDQoc24sIGFkZHJlc3MsIFx1MDAyNm1zZyk7XG5uZXQvc3VucnBjL3JwY2JfY2xudC5jLTYyMS1cdGNhc2UgQUZfSU5FVDY6XG5uZXQvc3VucnBjL3JwY2JfY2xudC5jOjYyMjpcdFx0cmV0dXJuIHJwY2JfcmVnaXN0ZXJfaW5ldDYoc24sIGFkZHJlc3MsIFx1MDAyNm1zZyk7XG5uZXQvc3VucnBjL3JwY2JfY2xudC5jLTYyMy1cdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTk6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTQ3MAoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDEyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFN1blJQQyBTdWJzeXN0ZW0gQ2hhbmdlcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIEkgc2VlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggZXhwb3J0ZWQgZnVuY3Rpb25zOiBgcnBjYl9yZWdpc3RlcmAsIGBycGNiX3Y0X3JlZ2lzdGVyYCwgYHN2Y19yZWdpc3RlcmAsIGFuZCBgc3ZjX2dlbmVyaWNfcnBjYmluZF9zZXRgLiBUaGF0JiMzOTtzIGEgY2xlYXIgaW5kaWNhdG9yIHRoaXMgaXMgdG91Y2hpbmcgdGhlIGNvcmUgb2YgdGhlIFJQQyBiaW5kaW5nIHByb2Nlc3MuIFRoZSBpbXBvcnRhbnQgY2hhbmdlIGlzIHRoZSBhZGRpdGlvbiBvZiBhIHRpbWVvdXQgdG8gbG9jYWwgcnBjYmluZCBjYWxscywgYW5kIHRoZSBoYW5kbGluZyBvZiBgLUVUSU1FRE9VVGAgd2l0aGluIGBzdmNfcmVnaXN0ZXJgIGFuZCBgc3ZjX2dlbmVyaWNfcnBjYmluZF9zZXRgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIG5vdCBqdXN0IGEgY29zbWV0aWMgb25lOyBpdCBkaXJlY3RseSBpbXBhY3RzIGhvdyBzZXJ2aWNlcyByZWdpc3RlciBhbmQgaW50ZXJhY3Qgd2l0aCB0aGUgcnBjYmluZCBkYWVtb24uIEdpdmVuIHRoZSBwb3RlbnRpYWwgZm9yIHN1YnRsZSB0aW1pbmctcmVsYXRlZCBpc3N1ZXMgd2l0aCB0aGVzZSBraW5kcyBvZiBjaGFuZ2VzLCB0aGlzIGlzICphYnNvbHV0ZWx5KiBzb21ldGhpbmcgdGhhdCBuZWVkcyBmdXp6aW5nLiBUaGUgY29uZmlnIG9wdGlvbiB0aWVkIHRvIHRoaXMgaXMgYFNVTlJQQ2AsIHNvIGZpcnN0IEkmIzM5O2xsIHF1aWNrbHkgY2hlY2sgaXRzIGRlcGVuZGVuY2llcyB0byBnZXQgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgd2lkZXIgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTk6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGVwZW5kcyBvbi4qU1VOUlBDJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbmZzL25mcy1yZG1hLnJzdD0zNT11c2Ugd2l0aCBORlMvUkRNQS5cbi0tXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL25mcy9uZnMtcmRtYS5yc3QtMTM0LSAgYXJlIHR1cm5lZCBvbi4gVGhlIE5GUy9SRE1BIGNsaWVudCBhbmQgc2VydmVyIGFyZSBjb25maWd1cmVkIHZpYSB0aGUgaGlkZGVuXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL25mcy9uZnMtcmRtYS5yc3Q6MTM1OiAgU1VOUlBDX1hQUlRfUkRNQSBjb25maWcgb3B0aW9uIHRoYXQgZGVwZW5kcyBvbiBTVU5SUEMgYW5kIElORklOSUJBTkQuIFRoZVxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9uZnMvbmZzLXJkbWEucnN0LTEzNi0gIHZhbHVlIG9mIFNVTlJQQ19YUFJUX1JETUEgd2lsbCBiZTpcbi0tXG5mcy9uZnMvS2NvbmZpZz0xOTg9Y29uZmlnIE5GU19ERUJVR1xuZnMvbmZzL0tjb25maWctMTk5LVx0Ym9vbFxuZnMvbmZzL0tjb25maWc6MjAwOlx0ZGVwZW5kcyBvbiBORlNfRlMgXHUwMDI2XHUwMDI2IFNVTlJQQ19ERUJVR1xuZnMvbmZzL0tjb25maWctMjAxLVx0ZGVmYXVsdCB5XG4tLVxubGliL0tjb25maWcuZGVidWc9MjE2OT1jb25maWcgRkFJTF9TVU5SUENcbmxpYi9LY29uZmlnLmRlYnVnLTIxNzAtXHRib29sIFwmIzM0O0ZhdWx0LWluamVjdGlvbiBjYXBhYmlsaXR5IGZvciBTdW5SUENcJiMzNDtcbmxpYi9LY29uZmlnLmRlYnVnOjIxNzE6XHRkZXBlbmRzIG9uIEZBVUxUX0lOSkVDVElPTl9ERUJVR19GUyBcdTAwMjZcdTAwMjYgU1VOUlBDX0RFQlVHXG5saWIvS2NvbmZpZy5kZWJ1Zy0yMTcyLVx0aGVscFxuLS1cbm5ldC9LY29uZmlnPTk0PWNvbmZpZyBORVRfSEFORFNIQUtFXG5uZXQvS2NvbmZpZy05NS1cdGJvb2xcbm5ldC9LY29uZmlnOjk2Olx0ZGVwZW5kcyBvbiBTVU5SUEMgfHwgTlZNRV9UQVJHRVRfVENQIHx8IE5WTUVfVENQXG5uZXQvS2NvbmZpZy05Ny1cdGRlZmF1bHQgeVxuLS1cbm5ldC9zdW5ycGMvS2NvbmZpZz0xMT1jb25maWcgU1VOUlBDX0JBQ0tDSEFOTkVMXG5uZXQvc3VucnBjL0tjb25maWctMTItXHRib29sXG5uZXQvc3VucnBjL0tjb25maWc6MTM6XHRkZXBlbmRzIG9uIFNVTlJQQ1xubmV0L3N1bnJwYy9LY29uZmlnLTE0LVxubmV0L3N1bnJwYy9LY29uZmlnPTE1PWNvbmZpZyBTVU5SUENfU1dBUFxubmV0L3N1bnJwYy9LY29uZmlnLTE2LVx0Ym9vbFxubmV0L3N1bnJwYy9LY29uZmlnOjE3Olx0ZGVwZW5kcyBvbiBTVU5SUENcbm5ldC9zdW5ycGMvS2NvbmZpZy0xOC1cbm5ldC9zdW5ycGMvS2NvbmZpZz0xOT1jb25maWcgUlBDU0VDX0dTU19LUkI1XG5uZXQvc3VucnBjL0tjb25maWctMjAtXHR0cmlzdGF0ZSBcJiMzNDtTZWN1cmUgUlBDOiBLZXJiZXJvcyBWIG1lY2hhbmlzbVwmIzM0O1xubmV0L3N1bnJwYy9LY29uZmlnOjIxOlx0ZGVwZW5kcyBvbiBTVU5SUEMgXHUwMDI2XHUwMDI2IENSWVBUT1xubmV0L3N1bnJwYy9LY29uZmlnLTIyLVx0ZGVmYXVsdCB5XG4tLVxubmV0L3N1bnJwYy9LY29uZmlnPTM2PWNvbmZpZyBTVU5SUENfREVCVUdcbm5ldC9zdW5ycGMvS2NvbmZpZy0zNy1cdGJvb2wgXCYjMzQ7UlBDOiBFbmFibGUgZHByaW50ayBkZWJ1Z2dpbmdcJiMzNDtcbm5ldC9zdW5ycGMvS2NvbmZpZzozODpcdGRlcGVuZHMgb24gU1VOUlBDIFx1MDAyNlx1MDAyNiBTWVNDVExcbm5ldC9zdW5ycGMvS2NvbmZpZy0zOS1cdHNlbGVjdCBERUJVR19GU1xuLS1cbm5ldC9zdW5ycGMvS2NvbmZpZz01MD1jb25maWcgU1VOUlBDX0RFQlVHX1RSQUNFXG5uZXQvc3VucnBjL0tjb25maWctNTEtXHRib29sIFwmIzM0O1JQQzogU2VuZCBkZnByaW50aygpIG91dHB1dCB0byB0aGUgdHJhY2UgYnVmZmVyXCYjMzQ7XG5uZXQvc3VucnBjL0tjb25maWc6NTI6XHRkZXBlbmRzIG9uIFNVTlJQQ19ERUJVRyBcdTAwMjZcdTAwMjYgVFJBQ0lOR1xubmV0L3N1bnJwYy9LY29uZmlnLTUzLVx0ZGVmYXVsdCBuXG4tLVxubmV0L3N1bnJwYy9LY29uZmlnPTY0PWNvbmZpZyBTVU5SUENfWFBSVF9SRE1BXG5uZXQvc3VucnBjL0tjb25maWctNjUtXHR0cmlzdGF0ZSBcJiMzNDtSUEMtb3Zlci1SRE1BIHRyYW5zcG9ydFwmIzM0O1xubmV0L3N1bnJwYy9LY29uZmlnOjY2Olx0ZGVwZW5kcyBvbiBTVU5SUEMgXHUwMDI2XHUwMDI2IElORklOSUJBTkQgXHUwMDI2XHUwMDI2IElORklOSUJBTkRfQUREUl9UUkFOU1xubmV0L3N1bnJwYy9LY29uZmlnLTY3LVx0ZGVmYXVsdCBTVU5SUEMgXHUwMDI2XHUwMDI2IElORklOSUJBTkRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTk6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA2ODMKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipBbmFseXppbmcgdGhlIFNVTlJQQyBDb25maWd1cmF0aW9uIE9wdGlvbioqCgpSaWdodCwgc28gYFNVTlJQQ2AuIEl0IHNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQgb24gdGhlIHN1cmZhY2Ug4oCTIGl0JiMzOTtzIGEgdHJpc3RhdGUgb3B0aW9uIGFuZCBkb2VzbiYjMzk7dCBleHBsaWNpdGx5IHJlbHkgb24gYW55IG90aGVyIGNvbmZpZ3VyYXRpb25zLCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSwgbGV0JiMzOTtzIGp1c3QgbWFrZSBzdXJlLiBCZXN0IHRvIGVyciBvbiB0aGUgc2lkZSBvZiBjYXV0aW9uLiBMZXQgbWUgY2hlY2sgdGhlIGRlcGVuZGVuY2llcy4gSG1tLCBsZXQgbWUgY29uc3VsdCB0aGUgYG5ldC9zdW5ycGMvS2NvbmZpZ2AgZmlsZS4gVGhhdCYjMzk7cyB0aGUgZGVmaW5pdGl2ZSBzb3VyY2UuIEkgbmVlZCB0byBnZXQgaW50byB0aGUgZGV0YWlscyBvZiB0aGUgZGVwZW5kZW5jaWVzIGJlZm9yZSBtYWtpbmcgYW55IGRlY2lzaW9ucy4gVGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gbG9vay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTk6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFNVTlJQQyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zdW5ycGMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc3VucnBjL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbm5ldC9zdW5ycGMvS2NvbmZpZzoyOmNvbmZpZyBTVU5SUENcbm5ldC9zdW5ycGMvS2NvbmZpZy0zLVx0dHJpc3RhdGVcbi0tXG5uZXQvc3VucnBjL0tjb25maWctNS1cbm5ldC9zdW5ycGMvS2NvbmZpZzo2OmNvbmZpZyBTVU5SUENfR1NTXG5uZXQvc3VucnBjL0tjb25maWctNy1cdHRyaXN0YXRlXG4tLVxubmV0L3N1bnJwYy9LY29uZmlnLTEwLVxubmV0L3N1bnJwYy9LY29uZmlnOjExOmNvbmZpZyBTVU5SUENfQkFDS0NIQU5ORUxcbm5ldC9zdW5ycGMvS2NvbmZpZy0xMi1cdGJvb2xcbi0tXG5uZXQvc3VucnBjL0tjb25maWctMTQtXG5uZXQvc3VucnBjL0tjb25maWc6MTU6Y29uZmlnIFNVTlJQQ19TV0FQXG5uZXQvc3VucnBjL0tjb25maWctMTYtXHRib29sXG4tLVxubmV0L3N1bnJwYy9LY29uZmlnPTE5PWNvbmZpZyBSUENTRUNfR1NTX0tSQjVcbi0tXG5uZXQvc3VucnBjL0tjb25maWctMzUtXG5uZXQvc3VucnBjL0tjb25maWc6MzY6Y29uZmlnIFNVTlJQQ19ERUJVR1xubmV0L3N1bnJwYy9LY29uZmlnLTM3LVx0Ym9vbCBcJiMzNDtSUEM6IEVuYWJsZSBkcHJpbnRrIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm5ldC9zdW5ycGMvS2NvbmZpZy00OS1cbm5ldC9zdW5ycGMvS2NvbmZpZzo1MDpjb25maWcgU1VOUlBDX0RFQlVHX1RSQUNFXG5uZXQvc3VucnBjL0tjb25maWctNTEtXHRib29sIFwmIzM0O1JQQzogU2VuZCBkZnByaW50aygpIG91dHB1dCB0byB0aGUgdHJhY2UgYnVmZmVyXCYjMzQ7XG4tLVxubmV0L3N1bnJwYy9LY29uZmlnLTYzLVxubmV0L3N1bnJwYy9LY29uZmlnOjY0OmNvbmZpZyBTVU5SUENfWFBSVF9SRE1BXG5uZXQvc3VucnBjL0tjb25maWctNjUtXHR0cmlzdGF0ZSBcJiMzNDtSUEMtb3Zlci1SRE1BIHRyYW5zcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxOToyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTI5MwoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFRyaXN0YXRlIEtlcm5lbCBDb25maWd1cmF0aW9uIE9wdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyB0cmlzdGF0ZSBvcHRpb24sIGFuZCBpbW1lZGlhdGVseSBteSBtaW5kIGp1bXBzIHRvIHRoZSBsYWNrIG9mIGFueSBvYnZpb3VzIGRlcGVuZGVuY2llcy4gVGhhdCBmZWVscyBhIGJpdCBvZGQsIGRvZXNuJiMzOTt0IGl0PyBNb3N0IG9mIHRoZSB0aW1lLCB3aGVuIEkgc2VlIGEgdHJpc3RhdGUgb3B0aW9uIGluIHRoZSBrZXJuZWwgY29uZmlnLCBpdCYjMzk7cyB0aWVkIHRvIHNvbWV0aGluZyBlbHNlLCBhIHBhcmVudCBvcHRpb24gdGhhdCBnb3Zlcm5zIGl0cyBzZWxlY3Rpb24sIG9yIHBlcmhhcHMgYW5vdGhlciwgc2ltaWxhciBmdW5jdGlvbi4KCkJ1dCwgaGFuZyBvbiwgaG93ICppcyogdGhpcyB0aGluZyBzZWxlY3RlZD8gVGhhdCYjMzk7cyB0aGUgcmVhbCBxdWVzdGlvbi4gTXkgaW50dWl0aW9uIGltbWVkaWF0ZWx5IGZsYWdzIHRoaW5ncyBsaWtlIGBORlNfRlNgIG9yIGBORlNEYCBhcyB0aGUgdXN1YWwgc3VzcGVjdHMgd2hlbiBgU1VOUlBDYCBpcyBpbnZvbHZlZC4gTXkgdHJhaW4gb2YgdGhvdWdodCBhbHdheXMgdGVuZHMgdG93YXJkIHRoZSB0cmllZC1hbmQtdHJ1ZSBwYXRod2F5cyB0aGF0IEkmIzM5O20gZmFtaWxpYXIgd2l0aC4gCgpJIGtub3cgSSBjYW4mIzM5O3QgcmVseSBvbiBpbnR1aXRpb24gYWxvbmUsIHRpbWUgdG8gaGVhZCBzdHJhaWdodCB0byB0aGUgc291cmNlLiBUaGUgbmV4dCB0aGluZyBJJiMzOTttIGdvaW5nIHRvIGRvIGlzIGRpdmUgaW50byBgZnMvbmZzL0tjb25maWdgLiBUaGF0JiMzOTtzIHdoZXJlIEkmIzM5O2xsIGZpbmQgdGhlIGRlZmluaXRpdmUgYW5zd2VyLiBJJiMzOTtsbCBzY291ciB0aGF0IGZpbGUgZm9yIGRlcGVuZGVuY2llcywgbWVudSBlbnRyaWVzLCBhbmQgYW55IGNsdWVzIGFib3V0IGhvdyB0aGlzIG9wdGlvbiBnZXRzIHRyaWdnZXJlZC4gVGhhdCBLY29uZmlnIGZpbGUgaXMgdGhlIHVsdGltYXRlIGF1dGhvcml0eSBpbiB0aGlzIGNhc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE5OjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlbGVjdCBTVU5SUEMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvS2NvbmZpZz0zODI9Y29uZmlnIE5GU19DT01NT05fTE9DQUxJT19TVVBQT1JUXG4tLVxuZnMvS2NvbmZpZy0zODYtXHRkZWZhdWx0IG0gaWYgTkZTRD1tIFx1MDAyNlx1MDAyNiBORlNfRlM9bVxuZnMvS2NvbmZpZzozODc6XHRzZWxlY3QgU1VOUlBDXG5mcy9LY29uZmlnLTM4OC1cbi0tXG5mcy9uZnMvS2NvbmZpZz0yPWNvbmZpZyBORlNfRlNcbi0tXG5mcy9uZnMvS2NvbmZpZy02LVx0c2VsZWN0IExPQ0tEXG5mcy9uZnMvS2NvbmZpZzo3Olx0c2VsZWN0IFNVTlJQQ1xuZnMvbmZzL0tjb25maWctOC1cdHNlbGVjdCBORlNfQ09NTU9OXG4tLVxuZnMvbmZzL0tjb25maWc9Nzc9Y29uZmlnIE5GU19WNFxuLS1cbmZzL25mcy9LY29uZmlnLTgwLVx0c2VsZWN0IEtFWVNcbmZzL25mcy9LY29uZmlnOjgxOlx0c2VsZWN0IFNVTlJQQ19CQUNLQ0hBTk5FTFxuZnMvbmZzL0tjb25maWctODItXHRoZWxwXG4tLVxuZnMvbmZzL0tjb25maWc9OTI9Y29uZmlnIE5GU19TV0FQXG4tLVxuZnMvbmZzL0tjb25maWctOTUtXHRkZXBlbmRzIG9uIE5GU19GUyBcdTAwMjZcdTAwMjYgU1dBUFxuZnMvbmZzL0tjb25maWc6OTY6XHRzZWxlY3QgU1VOUlBDX1NXQVBcbmZzL25mcy9LY29uZmlnLTk3LVx0aGVscFxuLS1cbmZzL25mc2QvS2NvbmZpZz0yPWNvbmZpZyBORlNEXG4tLVxuZnMvbmZzZC9LY29uZmlnLTExLVx0c2VsZWN0IExPQ0tEXG5mcy9uZnNkL0tjb25maWc6MTI6XHRzZWxlY3QgU1VOUlBDXG5mcy9uZnNkL0tjb25maWctMTMtXHRzZWxlY3QgRVhQT1JURlNcbi0tXG5uZXQvc3VucnBjL0tjb25maWc9MTk9Y29uZmlnIFJQQ1NFQ19HU1NfS1JCNVxuLS1cbm5ldC9zdW5ycGMvS2NvbmZpZy0yMi1cdGRlZmF1bHQgeVxubmV0L3N1bnJwYy9LY29uZmlnOjIzOlx0c2VsZWN0IFNVTlJQQ19HU1Ncbm5ldC9zdW5ycGMvS2NvbmZpZy0yNC1cdHNlbGVjdCBDUllQVE9fS1JCNVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxOToyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjA1NAoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDIwOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBDb25maWd1cmF0aW9uIERlY2lzaW9ucyBmb3IgTkZTIFN1cHBvcnQqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyBORlMgaXMgY29uZmlndXJlZCwgYW5kIGl0JiMzOTtzIGNsZWFyIHRoYXQgYm90aCBgTkZTX0ZTYCBhbmQgYE5GU0RgIGRlcGVuZCBvbiBgU1VOUlBDYC4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byBpbmNsdWRlIGJvdGggYE5GU19GU2AgYW5kIGBORlNEYCBpbiB0aGUgRW5hYmxlQ29uZmlncywgb3IgcGVyaGFwcyBqdXN0IGBTVU5SUENgLiBBZnRlciBhIGJpdCBtb3JlIHRob3VnaHQsIEkgcmVhbGl6ZSB0aGF0IGlmIGBTVU5SUENgIGlzIGEgdHJpc3RhdGUsIGFuZCBpdCB1c3VhbGx5IGlzLCB0aGVuIGVuYWJsaW5nIGl0IGRpcmVjdGx5IHNob3VsZCBiZSBzdWZmaWNpZW50LiBIb3dldmVyLCBJIHdhbnQgdG8gYmUgKmFic29sdXRlbHkqIGNlcnRhaW4gdGhhdCBgTkZTX0ZTYCBhbmQgYE5GU0RgIGFyZSBjb21waWxlZCBhbmQgcmVhY2hhYmxlLCBhcyB0aGV5JiMzOTtyZSB0aGUgY29yZSBjb21wb25lbnRzIGhlcmUuIFRoZXJlZm9yZSwgSSYjMzk7bSBnb2luZyB0byBleHBsaWNpdGx5IGFkZCBgU1VOUlBDYCwgYE5GU19GU2AsIGFuZCBgTkZTRGAgdG8gdGhlIGNvbmZpZ3VyYXRpb25zLiBUaGF0IHNob3VsZCBwcm92aWRlIHRoZSBtb3N0IHJvYnVzdCBhbmQgZXhwbGljaXQgZGVwZW5kZW5jeSBoYW5kbGluZy4KCk5vdywgcmVnYXJkaW5nIHRoZSBmb2N1cyBzeW1ib2xzIGZvciB2ZXJpZmljYXRpb24sIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlc2Uga2V5IGZ1bmN0aW9ucyBhcmUgYXZhaWxhYmxlIGZvciBpbnNwZWN0aW9uOiBgc3ZjX3JlZ2lzdGVyYCwgYHN2Y19nZW5lcmljX3JwY2JpbmRfc2V0YCwgYHJwY2JfcmVnaXN0ZXJgLCBgcnBjYl92NF9yZWdpc3RlcmAsIGFuZCBgcnBjYl9jcmVhdGVfbG9jYWxgLgoKSnVzdCB0byBiZSBjb21wbGV0ZWx5IHRob3JvdWdoLCBJJiMzOTtsbCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0IGBycGNiX2NyZWF0ZV9sb2NhbGAgaXMgZXhwb3J0ZWQgdG8gZW5zdXJlIGl0IGlzIGFjY2Vzc2libGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE5OjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qcnBjYl9jcmVhdGVfbG9jYWwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc3VucnBjL3JwY2JfY2xudC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTk6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI1OTYKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGlubmVyIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyB0aGUgRGF0YSYjMzk7cyBBY2Nlc3NpYmlsaXR5KioKCkFscmlnaHQsIHNvIHRoZSBkYXRhIGlzbiYjMzk7dCAqZXhwbGljaXRseSogZXhwb3J0ZWQsIG1lYW5pbmcgaXQmIzM5O3Mgbm90IGJlaW5nIHByZXNlbnRlZCBkaXJlY3RseSBhcyBhIHN0YW5kYXJkLCByZWFkaWx5IGF2YWlsYWJsZSBkYXRhIHN0cmVhbS4gQnV0LCBhbmQgdGhpcyBpcyBjcnVjaWFsLCBpdCBhbHNvIGlzbiYjMzk7dCAmIzM0O3N0YXRpYyYjMzQ7LiBUaGF0IG1lYW5zIGl0JiMzOTtzIGxpa2VseSBiZWluZyBnZW5lcmF0ZWQgb3IgdXBkYXRlZCBkeW5hbWljYWxseSwgYW5kIHRoZXJlZm9yZSAqYWNjZXNzaWJsZSogaW4gc29tZSBmYXNoaW9uLCBldmVuIGlmIGluZGlyZWN0bHkuIFRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBwaW5wb2ludCAqaG93KiB0aGF0IGFjY2Vzc2liaWxpdHkgaXMgYWNoaWV2ZWQuIExldCYjMzk7cyBkZWx2ZSBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgdGhlIGBycGNiX3JlZ2lzdGVyYCBmdW5jdGlvbi4gSWYgdGhhdCYjMzk7cyBleHBvcnRlZCwgaXQmIzM5O3MgYSBzdHJvbmcgaW5kaWNhdG9yIHRoYXQgdGhpcyBwcm9jZXNzIGlzIHBhcnRpY2lwYXRpbmcgaW4gYSByZW1vdGUgcHJvY2VkdXJlIGNhbGwgYW5kIHRoYXQgY291bGQgYmUgYSBzaWduaWZpY2FudCBjbHVlIHRvIGhvdyB0aGlzIHdvcmtzLCB3aGljaCB3aWxsIHVsdGltYXRlbHkgZ3VpZGUgbWUgdG8gdGhlIHVsdGltYXRlIHNvdXJjZSBvZiB0cnV0aC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTk6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MLipycGNiX3JlZ2lzdGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3N1bnJwYy9ycGNiX2NsbnQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE5OjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyODYzCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoYXQgY29kZToKCioqRmluZGluZyB0aGUgRXhwb3J0ZWQgU3ltYm9scyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmluZCBvdXQgd2h5IHRoZXNlIGFyZW4mIzM5O3Qgc2hvd2luZyB1cCBhcyBleHBvcnRlZC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gY2hlY2sgd2hlcmUgdGhlc2Ugc3ltYm9scyBhcmUgZGVmaW5lZCwgYW5kIHNwZWNpZmljYWxseSwgaG93IHRoZXkgYXJlIG1hZGUgYXZhaWxhYmxlIHRvIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwuIFNpbmNlIHRoZXNlIGFyZSBsaWtlbHkgUlBDLXJlbGF0ZWQsIGBuZXQvc3VucnBjL3JwY2JfY2xudC5jYCBpcyB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBsb29raW5nLCBnaXZlbiB0aGF0JiMzOTtzIHdoZXJlIHRoZSBjbGllbnQtc2lkZSBSUEMgY29kZSByZXNpZGVzLiBNeSBzcGVjaWZpYyBmb2N1cz8gSSYjMzk7bSBnb2luZyB0byBzY2FuIHRoYXQgZmlsZSBmb3IgdGhlIGBFWFBPUlRfU1lNQk9MYCBtYWNyby4gVGhhdCYjMzk7cyB0aGUgY3J1Y2lhbCBrZXl3b3JkLCB0aGUgc2lnbmFsIHRvIHRoZSBsaW5rZXIgdGhhdCB0aGVzZSBzeW1ib2xzIGFyZSBtZWFudCB0byBiZSBhdmFpbGFibGUgZXh0ZXJuYWxseS4gSWYgdGhleSYjMzk7cmUgbm90IHRoZXJlLCBJIGtub3cgSSYjMzk7dmUgZm91bmQgbXkgcHJvYmxlbSBhbmQgY2FuIGFkanVzdCBhcyByZXF1aXJlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTk6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zdW5ycGMvcnBjYl9jbG50LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3N1bnJwYy9ycGNiX2NsbnQuYz02Nzc9dm9pZCBycGNiX2dldHBvcnRfYXN5bmMoc3RydWN0IHJwY190YXNrICp0YXNrKVxuLS1cbm5ldC9zdW5ycGMvcnBjYl9jbG50LmMtNzk3LX1cbm5ldC9zdW5ycGMvcnBjYl9jbG50LmM6Nzk4OkVYUE9SVF9TWU1CT0xfR1BMKHJwY2JfZ2V0cG9ydF9hc3luYyk7XG5uZXQvc3VucnBjL3JwY2JfY2xudC5jLTc5OS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTk6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMyMjYKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA4NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgdGhlIFJQQyBCaW5kaW5ncyoqCgpPa2F5LCBzbyB0aGUgaW5pdGlhbCBmb2N1cyBpcyBvbiB0aGlzIGBycGNiX2dldHBvcnRfYXN5bmNgIGZ1bmN0aW9uIOKAkyB0aGF0JiMzOTtzIHRoZSBvbmx5IG9uZSBleHBsaWNpdGx5IGV4cG9ydGVkLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gQnV0IGhvbGQgb24sIEkmIzM5O20gc2VlaW5nIHRoYXQgYHN2Y19yZWdpc3RlcmAgYW5kIGBzdmNfZ2VuZXJpY19ycGNiaW5kX3NldGAgYXJlIGFsc28gYXZhaWxhYmxlLiBUaGF0JiMzOTtzIHVuZXhwZWN0ZWQuIFdhaXQgYSBzZWNvbmQuLi4gSSByZWNhbGwgYHJwY2JfcmVnaXN0ZXJgIGJlaW5nIHVzZWQgd2l0aGluIHRoZSBgc3VucnBjYCBtb2R1bGUgaXRzZWxmLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIGhvdyB0aGVzZSBwaWVjZXMgZml0IHRvZ2V0aGVyLiBNeSBuZXh0IHN0ZXAgaXMgZGVmaW5pdGVseSB0byBkaXZlIGludG8gYG5ldC9zdW5ycGMvc3ZjLmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYHN2Y19yZWdpc3RlcmAsIGBzdmNfZ2VuZXJpY19ycGNiaW5kX3NldGAsIGFuZCBgcnBjYl9yZWdpc3RlcmAuIEl0IHNlZW1zIGxpa2UgdGhvc2UgdGhyZWUgbWlnaHQgYmUgdXNlZCBzb21laG93IGluIGNvbmp1bmN0aW9uIHRvIHJlZ2lzdGVyLCBhbmQgc2V0IHRoZSBiaW5kaW5ncyBpbiBhIGdlbmVyaWMgbWFubmVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGdvaW5nIG9uIGJlaGluZCB0aGUgc2NlbmVzIHdpdGggdGhpcyBSUEMgYmluZGluZyBwcm9jZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxOToyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKnN2Y19yZWdpc3RlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zdW5ycGMvc3ZjLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxOToyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzU2MgoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipBIEtlcm5lbCBNb2R1bGUgRmxhZ2dlZCBmb3IgUmV2aWV3KioKCk9rYXksIGhvbGQgb24gYSBzZWNvbmQuLi4gSSYjMzk7bSByZXZpZXdpbmcgdGhpcyBjb2RlIGRpZmYgYW5kIHRoYXQgYEVYUE9SVF9TWU1CT0xfR1BMKHN2Y19nZW5lcmljX3JwY2JpbmRfc2V0KTtgIGNhdWdodCBteSBleWUgaW1tZWRpYXRlbHkuIE5vdywgdGhhdCYjMzk7cyBub3Qgc29tZXRoaW5nIHlvdSBzZWUganVzdCBhbnl3aGVyZS4gVGhlIGBFWFBPUlRfU1lNQk9MX0dQTGAgbWFjcm8gaXMgc3BlY2lmaWNhbGx5IGZvciBleHBvcnRpbmcgc3ltYm9scyB0aGF0IGFyZSBsaWNlbnNlZCB1bmRlciB0aGUgR1BMLCBtZWFuaW5nIHRoaXMgZnVuY3Rpb24sIGBzdmNfZ2VuZXJpY19ycGNiaW5kX3NldGAsIGlzIGxpa2VseSBpbnRlbmRlZCBmb3IgdXNlIGJ5IEdQTC1saWNlbnNlZCBrZXJuZWwgbW9kdWxlcy4gSXQmIzM5O3MgYSBrZXkgcGllY2Ugb2YgdGhlIFJQQyBiaW5kaW5nIGZ1bmN0aW9uYWxpdHksIG1ha2luZyBtZSB0aGluayBpdOKAmXMgcGFydCBvZiBhIGNvcmUgbmV0d29yayBzZXJ2aWNlLiBTbyB0aGlzIGNoYW5nZSBtdXN0IGJlIHJlbGF0ZWQgdG8gc29tZSBzaWduaWZpY2FudCBSUEMgdXBkYXRlLiBJIG5lZWQgdG8gZGlnIGludG8gaG93IHRoaXMgZnVuY3Rpb24gaXMgdXNlZCBhbmQgd2h5IGl0IG5lZWRzIHRvIGJlIG1hZGUgYXZhaWxhYmxlLiBJIGFsc28gbmVlZCB0byBtYWtlIHN1cmUgdGhlIGxpY2Vuc2luZyBpcyBhcHByb3ByaWF0ZSBhbmQgdGhhdCBpdHMgaW5jbHVzaW9uIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgY29tcGF0aWJpbGl0eSBpc3N1ZXMgd2l0aCBleGlzdGluZyBtb2R1bGVzLiBUaW1lIHRvIGRpdmUgZGVlcGVyIGFuZCBzZWUgd2hhdCB0aGUgd2hvbGUgY2hhbmdlIGlzIGFib3V0IQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxOToyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MLipzdmNfZ2VuZXJpY19ycGNiaW5kX3NldCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zdW5ycGMvc3ZjLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3N1bnJwYy9zdmMuYz0xMTgyPWludCBzdmNfZ2VuZXJpY19ycGNiaW5kX3NldChzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L3N1bnJwYy9zdmMuYy0xMjE0LX1cbm5ldC9zdW5ycGMvc3ZjLmM6MTIxNTpFWFBPUlRfU1lNQk9MX0dQTChzdmNfZ2VuZXJpY19ycGNiaW5kX3NldCk7XG5uZXQvc3VucnBjL3N2Yy5jLTEyMTYtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE5OjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzOTUwCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyBgRVhQT1JUX1NZTUJPTGAgaW4gYG5ldC9zdW5ycGMvc3ZjLmNgKioKCk9rYXksIEkmIzM5O20gdGhpbmtpbmcgSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHdoZXJlIGV4YWN0bHkgYEVYUE9SVF9TWU1CT0xgIGlzIHVzZWQgd2l0aGluIHRoZSBTdW5SUEMgc2VydmljZSBjb2RlLiBJIHNwZWNpZmljYWxseSB3YW50IHRvIHJldmlzaXQgYG5ldC9zdW5ycGMvc3ZjLmNgLiBJdCYjMzk7cyBhIGtleSBmaWxlLCBzbyBpdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gdW5kZXJzdGFuZCB0aGUgYnJvYWRlciBpbXBsaWNhdGlvbnMgYW5kIGNvbnRleHQuIEkgc3VzcGVjdCB0aGVyZSYjMzk7cyBhIHJlYXNvbiBJJiMzOTttIGZvY3VzaW5nIGhlcmUsIGFuZCBpdCYjMzk7cyBwcm9iYWJseSByZWxhdGVkIHRvIHN5bWJvbCB2aXNpYmlsaXR5IG9yIGV4dGVybmFsIG1vZHVsZSBpbnRlcmFjdGlvbnMuIEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhlIGtlcm5lbCYjMzk7cyBtb2R1bGUgbG9hZGluZyBtZWNoYW5pc20gYW5kIGhvdyBgRVhQT1JUX1NZTUJPTGAgcGxheXMgYSByb2xlIGluIG1ha2luZyBmdW5jdGlvbnMgb3IgdmFyaWFibGVzIGFjY2Vzc2libGUgb3V0c2lkZSB0aGUgbW9kdWxlIGluIHdoaWNoIHRoZXkmIzM5O3JlIGRlZmluZWQuIFRpbWUgdG8gZ28gZGlnZ2luZyB0aHJvdWdoIHRoZSBzb3VyY2UgY29kZSEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTk6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zdW5ycGMvc3ZjLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3N1bnJwYy9zdmMuYz0xMTQ9aW50IHN1bnJwY19zZXRfcG9vbF9tb2RlKGNvbnN0IGNoYXIgKnZhbClcbi0tXG5uZXQvc3VucnBjL3N2Yy5jLTExNy19XG5uZXQvc3VucnBjL3N2Yy5jOjExODpFWFBPUlRfU1lNQk9MKHN1bnJwY19zZXRfcG9vbF9tb2RlKTtcbm5ldC9zdW5ycGMvc3ZjLmMtMTE5LVxuLS1cbm5ldC9zdW5ycGMvc3ZjLmM9MTMwPXN1bnJwY19nZXRfcG9vbF9tb2RlKGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUpXG4tLVxubmV0L3N1bnJwYy9zdmMuYy0xNDctfVxubmV0L3N1bnJwYy9zdmMuYzoxNDg6RVhQT1JUX1NZTUJPTChzdW5ycGNfZ2V0X3Bvb2xfbW9kZSk7XG5uZXQvc3VucnBjL3N2Yy5jLTE0OS1cbi0tXG5uZXQvc3VucnBjL3N2Yy5jPTQ1OD1pbnQgc3ZjX2JpbmQoc3RydWN0IHN2Y19zZXJ2ICpzZXJ2LCBzdHJ1Y3QgbmV0ICpuZXQpXG4tLVxubmV0L3N1bnJwYy9zdmMuYy00NjMtfVxubmV0L3N1bnJwYy9zdmMuYzo0NjQ6RVhQT1JUX1NZTUJPTF9HUEwoc3ZjX2JpbmQpO1xubmV0L3N1bnJwYy9zdmMuYy00NjUtXG4tLVxubmV0L3N1bnJwYy9zdmMuYz01NTk9c3RydWN0IHN2Y19zZXJ2ICpzdmNfY3JlYXRlKHN0cnVjdCBzdmNfcHJvZ3JhbSAqcHJvZywgdW5zaWduZWQgaW50IGJ1ZnNpemUsXG4tLVxubmV0L3N1bnJwYy9zdmMuYy01NjMtfVxubmV0L3N1bnJwYy9zdmMuYzo1NjQ6RVhQT1JUX1NZTUJPTF9HUEwoc3ZjX2NyZWF0ZSk7XG5uZXQvc3VucnBjL3N2Yy5jLTU2NS1cbi0tXG5uZXQvc3VucnBjL3N2Yy5jPTU3Nj1zdHJ1Y3Qgc3ZjX3NlcnYgKnN2Y19jcmVhdGVfcG9vbGVkKHN0cnVjdCBzdmNfcHJvZ3JhbSAqcHJvZyxcbi0tXG5uZXQvc3VucnBjL3N2Yy5jLTU5My19XG5uZXQvc3VucnBjL3N2Yy5jOjU5NDpFWFBPUlRfU1lNQk9MX0dQTChzdmNfY3JlYXRlX3Bvb2xlZCk7XG5uZXQvc3VucnBjL3N2Yy5jLTU5NS1cbi0tXG5uZXQvc3VucnBjL3N2Yy5jPTYwMT1zdmNfZGVzdHJveShzdHJ1Y3Qgc3ZjX3NlcnYgKipzZXJ2cClcbi0tXG5uZXQvc3VucnBjL3N2Yy5jLTYzMy19XG5uZXQvc3VucnBjL3N2Yy5jOjYzNDpFWFBPUlRfU1lNQk9MX0dQTChzdmNfZGVzdHJveSk7XG5uZXQvc3VucnBjL3N2Yy5jLTYzNS1cbi0tXG5uZXQvc3VucnBjL3N2Yy5jPTc2MT12b2lkIHN2Y19wb29sX3dha2VfaWRsZV90aHJlYWQoc3RydWN0IHN2Y19wb29sICpwb29sKVxuLS1cbm5ldC9zdW5ycGMvc3ZjLmMtNzgzLX1cbm5ldC9zdW5ycGMvc3ZjLmM6Nzg0OkVYUE9SVF9TWU1CT0xfR1BMKHN2Y19wb29sX3dha2VfaWRsZV90aHJlYWQpO1xubmV0L3N1bnJwYy9zdmMuYy03ODUtXG4tLVxubmV0L3N1bnJwYy9zdmMuYz03OTY9aW50IHN2Y19uZXdfdGhyZWFkKHN0cnVjdCBzdmNfc2VydiAqc2Vydiwgc3RydWN0IHN2Y19wb29sICpwb29sKVxuLS1cbm5ldC9zdW5ycGMvc3ZjLmMtODI5LX1cbm5ldC9zdW5ycGMvc3ZjLmM6ODMwOkVYUE9SVF9TWU1CT0xfR1BMKHN2Y19uZXdfdGhyZWFkKTtcbm5ldC9zdW5ycGMvc3ZjLmMtODMxLVxuLS1cbm5ldC9zdW5ycGMvc3ZjLmM9ODc2PXN2Y19zZXRfcG9vbF90aHJlYWRzKHN0cnVjdCBzdmNfc2VydiAqc2Vydiwgc3RydWN0IHN2Y19wb29sICpwb29sLFxuLS1cbm5ldC9zdW5ycGMvc3ZjLmMtOTEyLX1cbm5ldC9zdW5ycGMvc3ZjLmM6OTEzOkVYUE9SVF9TWU1CT0xfR1BMKHN2Y19zZXRfcG9vbF90aHJlYWRzKTtcbm5ldC9zdW5ycGMvc3ZjLmMtOTE0LVxuLS1cbm5ldC9zdW5ycGMvc3ZjLmM9OTMzPXN2Y19zZXRfbnVtX3RocmVhZHMoc3RydWN0IHN2Y19zZXJ2ICpzZXJ2LCB1bnNpZ25lZCBpbnQgbWluX3RocmVhZHMsXG4tLVxubmV0L3N1bnJwYy9zdmMuYy05NTQtfVxubmV0L3N1bnJwYy9zdmMuYzo5NTU6RVhQT1JUX1NZTUJPTF9HUEwoc3ZjX3NldF9udW1fdGhyZWFkcyk7XG5uZXQvc3VucnBjL3N2Yy5jLTk1Ni1cbi0tXG5uZXQvc3VucnBjL3N2Yy5jPTk2OT1ib29sIHN2Y19ycXN0X3JlcGxhY2VfcGFnZShzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbi0tXG5uZXQvc3VucnBjL3N2Yy5jLTk4NS19XG5uZXQvc3VucnBjL3N2Yy5jOjk4NjpFWFBPUlRfU1lNQk9MX0dQTChzdmNfcnFzdF9yZXBsYWNlX3BhZ2UpO1xubmV0L3N1bnJwYy9zdmMuYy05ODctXG4tLVxubmV0L3N1bnJwYy9zdmMuYz0xMDI3PXN2Y19leGl0X3RocmVhZChzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwKVxuLS1cbm5ldC9zdW5ycGMvc3ZjLmMtMTA0MS19XG5uZXQvc3VucnBjL3N2Yy5jOjEwNDI6RVhQT1JUX1NZTUJPTF9HUEwoc3ZjX2V4aXRfdGhyZWFkKTtcbm5ldC9zdW5ycGMvc3ZjLmMtMTA0My1cbi0tXG5uZXQvc3VucnBjL3N2Yy5jPTExODI9aW50IHN2Y19nZW5lcmljX3JwY2JpbmRfc2V0KHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvc3VucnBjL3N2Yy5jLTEyMTQtfVxubmV0L3N1bnJwYy9zdmMuYzoxMjE1OkVYUE9SVF9TWU1CT0xfR1BMKHN2Y19nZW5lcmljX3JwY2JpbmRfc2V0KTtcbm5ldC9zdW5ycGMvc3ZjLmMtMTIxNi1cbi0tXG5uZXQvc3VucnBjL3N2Yy5jPTEzNDQ9c3ZjX2dlbmVyaWNfaW5pdF9yZXF1ZXN0KHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsXG4tLVxubmV0L3N1bnJwYy9zdmMuYy0xMzkxLX1cbm5ldC9zdW5ycGMvc3ZjLmM6MTM5MjpFWFBPUlRfU1lNQk9MX0dQTChzdmNfZ2VuZXJpY19pbml0X3JlcXVlc3QpO1xubmV0L3N1bnJwYy9zdmMuYy0xMzkzLVxuLS1cbm5ldC9zdW5ycGMvc3ZjLmM9MTc2MT11MzIgc3ZjX21heF9wYXlsb2FkKGNvbnN0IHN0cnVjdCBzdmNfcnFzdCAqcnFzdHApXG4tLVxubmV0L3N1bnJwYy9zdmMuYy0xNzY4LX1cbm5ldC9zdW5ycGMvc3ZjLmM6MTc2OTpFWFBPUlRfU1lNQk9MX0dQTChzdmNfbWF4X3BheWxvYWQpO1xubmV0L3N1bnJwYy9zdmMuYy0xNzcwLVxuLS1cbm5ldC9zdW5ycGMvc3ZjLmM9MTc5NT1pbnQgc3ZjX2VuY29kZV9yZXN1bHRfcGF5bG9hZChzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCB1bnNpZ25lZCBpbnQgb2Zmc2V0LFxuLS1cbm5ldC9zdW5ycGMvc3ZjLmMtMTgwMC19XG5uZXQvc3VucnBjL3N2Yy5jOjE4MDE6RVhQT1JUX1NZTUJPTF9HUEwoc3ZjX2VuY29kZV9yZXN1bHRfcGF5bG9hZCk7XG5uZXQvc3VucnBjL3N2Yy5jLTE4MDItXG4tLVxubmV0L3N1bnJwYy9zdmMuYz0xODE0PWNoYXIgKnN2Y19maWxsX3N5bWxpbmtfcGF0aG5hbWUoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgc3RydWN0IGt2ZWMgKmZpcnN0LFxuLS1cbm5ldC9zdW5ycGMvc3ZjLmMtMTg1MC19XG5uZXQvc3VucnBjL3N2Yy5jOjE4NTE6RVhQT1JUX1NZTUJPTF9HUEwoc3ZjX2ZpbGxfc3ltbGlua19wYXRobmFtZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE5OjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1Nzc5CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEZWJ1Z2dpbmcgYSBNaXNzaW5nIEV4cG9ydCoqCgpPa2F5LCBzbyBJJiMzOTttIGVuY291bnRlcmluZyBhIHByb2JsZW0g4oCTIGBzdmNfcmVnaXN0ZXJgIGlzbiYjMzk7dCBzaG93aW5nIHVwIGFzIGV4cG9ydGVkLiBUaGF0JiMzOTtzIGEgYml0IG9kZC4gTXkgZmlyc3QgaW5zdGluY3QsIGdpdmVuIGl0cyBsaWtlbHkgY29ubmVjdGlvbiB0byBuZXR3b3JrIHNlcnZpY2VzLCBpcyB0byBkb3VibGUtY2hlY2sgdGhlIGBuZXQvc3VucnBjYCBzdWJzeXN0ZW0uIFNwZWNpZmljYWxseSwgSSYjMzk7bGwgZHJpbGwgZG93biB0byBgbmV0L3N1bnJwYy9zdmMuY2AuIFRoYXQgZmlsZSBpcyB0aGUgbW9zdCBsb2dpY2FsIHBsYWNlIHRvIGJlZ2luIG15IGludmVzdGlnYXRpb24gZm9yIHRoZSBkZWZpbml0aW9uIGFuZCBleHBvcnQgb2YgYHN2Y19yZWdpc3RlcmAuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBhY3R1YWxseSBpbiB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTk6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3ZjX3JlZ2lzdGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3N1bnJwYy9zdmMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc3VucnBjL3N2Yy5jPTExMDI9c3RhdGljIGludCBfX3N2Y19ycGNiX3JlZ2lzdGVyNihzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHUzMiBwcm9ncmFtLFxuLS1cbm5ldC9zdW5ycGMvc3ZjLmMtMTE0NS0gKi9cbm5ldC9zdW5ycGMvc3ZjLmM6MTE0NjpzdGF0aWMgaW50IF9fc3ZjX3JlZ2lzdGVyKHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqcHJvZ25hbWUsXG5uZXQvc3VucnBjL3N2Yy5jLTExNDctXHRcdFx0ICBjb25zdCB1MzIgcHJvZ3JhbSwgY29uc3QgdTMyIHZlcnNpb24sXG4tLVxubmV0L3N1bnJwYy9zdmMuYy0xMTY1LVxubmV0L3N1bnJwYy9zdmMuYzoxMTY2Olx0dHJhY2Vfc3ZjX3JlZ2lzdGVyKHByb2duYW1lLCB2ZXJzaW9uLCBmYW1pbHksIHByb3RvY29sLCBwb3J0LCBlcnJvcik7XG5uZXQvc3VucnBjL3N2Yy5jLTExNjctXHRyZXR1cm4gZXJyb3I7XG4tLVxubmV0L3N1bnJwYy9zdmMuYz0xMTcxPWludCBzdmNfcnBjYmluZF9zZXRfdmVyc2lvbihzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L3N1bnJwYy9zdmMuYy0xMTc2LXtcbm5ldC9zdW5ycGMvc3ZjLmM6MTE3NzpcdHJldHVybiBfX3N2Y19yZWdpc3RlcihuZXQsIHByb2dwLVx1MDAzZXBnX25hbWUsIHByb2dwLVx1MDAzZXBnX3Byb2csXG5uZXQvc3VucnBjL3N2Yy5jLTExNzgtXHRcdFx0XHR2ZXJzaW9uLCBmYW1pbHksIHByb3RvLCBwb3J0KTtcbi0tXG5uZXQvc3VucnBjL3N2Yy5jPTEyMTU9RVhQT1JUX1NZTUJPTF9HUEwoc3ZjX2dlbmVyaWNfcnBjYmluZF9zZXQpO1xuLS1cbm5ldC9zdW5ycGMvc3ZjLmMtMTIxNy0vKipcbm5ldC9zdW5ycGMvc3ZjLmM6MTIxODogKiBzdmNfcmVnaXN0ZXIgLSByZWdpc3RlciBhbiBSUEMgc2VydmljZSB3aXRoIHRoZSBsb2NhbCBwb3J0bWFwcGVyXG5uZXQvc3VucnBjL3N2Yy5jLTEyMTktICogQHNlcnY6IHN2Y19zZXJ2IHN0cnVjdCBmb3IgdGhlIHNlcnZpY2UgdG8gcmVnaXN0ZXJcbi0tXG5uZXQvc3VucnBjL3N2Yy5jLTEyMjYtICovXG5uZXQvc3VucnBjL3N2Yy5jOjEyMjc6aW50IHN2Y19yZWdpc3Rlcihjb25zdCBzdHJ1Y3Qgc3ZjX3NlcnYgKnNlcnYsIHN0cnVjdCBuZXQgKm5ldCxcbm5ldC9zdW5ycGMvc3ZjLmMtMTIyOC1cdFx0IGNvbnN0IGludCBmYW1pbHksIGNvbnN0IHVuc2lnbmVkIHNob3J0IHByb3RvLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxOToyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjQ2NQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOgoKKipJbnZlc3RpZ2F0aW5nIGBzdmNfcmVnaXN0ZXJgIGluIGBuZXQvc3VucnBjL3N2Yy5jYCoqCgpPa2F5LCBJIG5lZWQgdG8gdmVyaWZ5IHNvbWV0aGluZyByZWxhdGVkIHRvIHRoZSBgc3ZjX3JlZ2lzdGVyYCBmdW5jdGlvbiwgbGlrZWx5IHdpdGhpbiB0aGUgY29udGV4dCBvZiBSUEMgc2VydmljZXMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBuYXZpZ2F0ZSB0byB0aGUgYG5ldC9zdW5ycGMvc3ZjLmNgIGZpbGUgd2l0aGluIHRoZSBrZXJuZWwgc291cmNlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgZnVuY3Rpb24gaXMgZXhwb3J0ZWQsIHdoaWNoIG1lYW5zIGl0JiMzOTtzIGludGVuZGVkIHRvIGJlIGFjY2Vzc2libGUgb3V0c2lkZSBvZiB0aGUgaW1tZWRpYXRlIG1vZHVsZSBvciBmaWxlLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBmdW5jdGlvbiBkZWZpbml0aW9uIGluIGBzdmMuY2AgdG8gY29uZmlybSBpdCYjMzk7cyBkZWNsYXJlZCB3aXRoIGBFWFBPUlRfU1lNQk9MYCBvciBhIHNpbWlsYXIgbWVjaGFuaXNtLCBtYWtpbmcgaXQgdmlzaWJsZSB0byBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsLiBUaGlzIGlzIGEgcHJlbGltaW5hcnkgY2hlY2sgYmVmb3JlIGludmVzdGlnYXRpbmcgZnVydGhlciwgZGVwZW5kaW5nIG9uIHRoZSBjb250ZXh0IG9mIHRoZSBpc3N1ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTk6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MLipzdmNfcmVnaXN0ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc3VucnBjL3N2Yy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTk6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY3MTMKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA3NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZSwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IGBzdmNfcmVnaXN0ZXJgIGlzIGJlaW5nIGhhbmRsZWQuIEhvbGQgb24gYSBzZWNvbmQsIEkgdGhvdWdodCBJIGhhZCBhbHJlYWR5IGdyZXBwZWQgZm9yIGBFWFBPUlRfU1lNQk9MYCBpbiBgbmV0L3N1bnJwYy9zdmMuY2Agc3BlY2lmaWNhbGx5LCBhbmQgaXQgZGlkbiYjMzk7dCB0dXJuIHVwIGFueSByZXN1bHRzLiBUaGF0JiMzOTtzIG9kZC4gU28sIGl0JiMzOTtzIGVpdGhlciBkZWZpbmVkIGFuZCBleHBvcnRlZCBzb21ld2hlcmUgKmVsc2UqIGluIHRoZSBwcm9qZWN0LCBvciBtYXliZSBpdCYjMzk7cyBub3QgYWN0dWFsbHkgZXhwb3J0ZWQgYXQgYWxsLiBUaW1lIHRvIHNoaWZ0IGdlYXJzLiBMZXQmIzM5O3Mgbm90IG1ha2UgYW55IGFzc3VtcHRpb25zLiBJJiMzOTtsbCB0YWtlIHRoZSBkaXJlY3QgYXBwcm9hY2guIEkmIzM5O2xsIGltbWVkaWF0ZWx5IGNoZWNrIGBpbmNsdWRlL2xpbnV4L3N1bnJwYy9zdmMuaGAgZm9yIHRoZSBkZWNsYXJhdGlvbiBvZiBgc3ZjX3JlZ2lzdGVyYC4gVGhhdCBoZWFkZXIgaXMgdGhlIG9idmlvdXMgcGxhY2UgdG8gZmluZCB0aGUgcHVibGljIGludGVyZmFjZSwgaWYgaXQgZXhpc3RzLCBzbyB0aGF0JiMzOTtzIHRoZSBwbGFjZSB0byBzdGFydC4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGluIHRoZXJlLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE5OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N2Y19yZWdpc3RlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvc3VucnBjL3N2Yy5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvc3VucnBjL3N2Yy5oPTQ3ND12b2lkXHRcdCAgIHN2Y19wcm9jZXNzX2JjKHN0cnVjdCBycGNfcnFzdCAqcmVxLCBzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwKTtcbmluY2x1ZGUvbGludXgvc3VucnBjL3N2Yy5oOjQ3NTppbnRcdFx0ICAgc3ZjX3JlZ2lzdGVyKGNvbnN0IHN0cnVjdCBzdmNfc2VydiAqLCBzdHJ1Y3QgbmV0ICosIGNvbnN0IGludCxcbmluY2x1ZGUvbGludXgvc3VucnBjL3N2Yy5oLTQ3Ni1cdFx0XHRcdGNvbnN0IHVuc2lnbmVkIHNob3J0LCBjb25zdCB1bnNpZ25lZCBzaG9ydCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE5OjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MTE1CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgUlBDIFJlZ2lzdHJhdGlvbiBpbiB0aGUgTGludXggS2VybmVsKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gUlBDIHJlZ2lzdHJhdGlvbiB3aXRoaW4gdGhlIGtlcm5lbC4gTXkgc3RhcnRpbmcgcG9pbnQgaXMgdGhlIGRlY2xhcmF0aW9uIG9mIHRoZSBmdW5jdGlvbiBJJiMzOTttIGludGVyZXN0ZWQgaW4sIHdoaWNoIGlzIGNsZWFybHkgZGVmaW5lZCBpbiBgaW5jbHVkZS9saW51eC9zdW5ycGMvc3ZjLmhgLiBUaGUgZmFjdCB0aGF0IGl0JiMzOTtzIGluIGEgaGVhZGVyIGZpbGUgaW1wbGllcyB0aGF0IHRoaXMgaXNuJiMzOTt0IGEgc3RhdGljIGZ1bmN0aW9uLCB3aGljaCBjaGFuZ2VzIGhvdyBJIGFwcHJvYWNoIHRoZSBhbmFseXNpcy4gTXkgaW5pdGlhbCBmb2N1cyB3aWxsIGJlIHRoZSByZWdpc3RyYXRpb24gZnVuY3Rpb25zIGFuZCB0aGVpciBhc3NvY2lhdGVkIGNhbGxzLgoKVGhlcmVmb3JlLCB0aGUga2V5IHN5bWJvbHMgSSBuZWVkIHRvIGV4YW1pbmUgYXJlIGBzdmNfcmVnaXN0ZXJgLCBgc3ZjX2dlbmVyaWNfcnBjYmluZF9zZXRgLCBgcnBjYl9yZWdpc3RlcmAsIGBycGNiX3Y0X3JlZ2lzdGVyYCBhbmQgYHJwY2JfY3JlYXRlX2xvY2FsYC4gVGhlIGZpcnN0IGZvdXIgc3VnZ2VzdCB0aGF0IHRoZXJlIGlzIGEgcmFuZ2Ugb2YgcmVnaXN0ZXIgY2FsbHMsIGFuZCB0aGUgZmluYWwgc3ltYm9sIG1pZ2h0IGJlIHRoZSBjcmVhdGlvbiBvZiBzb21ldGhpbmcgdXNlZCBsb2NhbGx5LiAKCk5vdywgSSYjMzk7bGwgcXVpY2tseSB2ZXJpZnkgdGhlIGxvY2F0aW9uIG9mIG9uZSBvZiB0aGVzZSBrZXkgZnVuY3Rpb25zIHRvIGFzc2VzcyBob3cgZmFyIEkmIzM5O3ZlIGNvbWUuIEkmIzM5O2xsIGNoZWNrIHdoZXRoZXIgYHJwY2JfcmVnaXN0ZXJgIGlzIGRlZmluZWQgd2l0aGluIHRoZSBgaW5jbHVkZS9saW51eC9zdW5ycGMvYCBkaXJlY3RvcnkuIFRoYXQmIzM5O2xsIGdpdmUgbWUgYSBjbGVhcmVyIHBpY3R1cmUgb2YgdGhlIGNvZGUmIzM5O3Mgc3RydWN0dXJlIGFuZCByZWxhdGlvbnNoaXBzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxOToyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtycGNiX3JlZ2lzdGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9zdW5ycGMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvc3VucnBjL2NsbnQuaD0yMDE9dm9pZFx0XHRycGNiX3B1dF9sb2NhbChzdHJ1Y3QgbmV0ICopO1xuaW5jbHVkZS9saW51eC9zdW5ycGMvY2xudC5oOjIwMjppbnRcdFx0cnBjYl9yZWdpc3RlcihzdHJ1Y3QgbmV0ICosIHUzMiwgdTMyLCBpbnQsIHVuc2lnbmVkIHNob3J0KTtcbmluY2x1ZGUvbGludXgvc3VucnBjL2NsbnQuaC0yMDMtaW50XHRcdHJwY2JfdjRfcmVnaXN0ZXIoc3RydWN0IG5ldCAqbmV0LCBjb25zdCB1MzIgcHJvZ3JhbSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTk6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc2MDkKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZS4uLiB0aGUgY29kZSBJJiMzOTttIGxvb2tpbmcgZm9yIGlzIGRlZmluaXRlbHkgaW4gYGluY2x1ZGUvbGludXgvc3VucnBjL2NsbnQuaGAuIFRoYXQgbWFrZXMgc2Vuc2U7IGNsaWVudC1zaWRlIFJQQyBzdHVmZiBpcyB1c3VhbGx5IG9yZ2FuaXplZCB0aGVyZS4gQW5kIHNpbmNlIHRoZXkgYXJlIG5vbi1zdGF0aWMgZnVuY3Rpb25zLCB0aGF0IHRlbGxzIG1lIHRoZXNlIGZ1bmN0aW9ucyBhcmUgbGlrZWx5IGludGVuZGVkIHRvIGJlIHVzZWQgZXh0ZXJuYWxseSwgYW5kIG5vdCBsaW1pdGVkIHRvIHRoYXQgc3BlY2lmaWMgc291cmNlIGZpbGUsIHdoaWNoIHdvdWxkIGJlIGltcG9ydGFudCBmb3IgbWUgdG8gdW5kZXJzdGFuZCBpbiBteSB3b3JrLiBOb3csIGxldCYjMzk7cyBjaGVjayBgcnBjYl9jcmVhdGVfbG9jYWxgIGluIHRoZSBzdW5ycGMgaW5jbHVkZSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhhdCBwaWVjZSBiZXR0ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE5OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JwY2JfY3JlYXRlX2xvY2FsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9zdW5ycGMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvc3VucnBjL2NsbnQuaD0xOTc9c3RydWN0IHJwY194cHJ0XHQqcnBjX3Rhc2tfZ2V0X3hwcnQoc3RydWN0IHJwY19jbG50ICpjbG50LFxuLS1cbmluY2x1ZGUvbGludXgvc3VucnBjL2NsbnQuaC0xOTktXG5pbmNsdWRlL2xpbnV4L3N1bnJwYy9jbG50Lmg6MjAwOmludFx0XHRycGNiX2NyZWF0ZV9sb2NhbChzdHJ1Y3QgbmV0ICopO1xuaW5jbHVkZS9saW51eC9zdW5ycGMvY2xudC5oLTIwMS12b2lkXHRcdHJwY2JfcHV0X2xvY2FsKHN0cnVjdCBuZXQgKik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDE5OjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3OTQzCgkJCQkJCQlvdXRwdXQ6IDE1MwoJCQkJCQkJdGhvdWdodHM6IDQxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFJQQyBUaW1lb3V0IFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGNvbmZpcm1lZCB0aGUgcGF0Y2ggaXMgcHJlc2VudC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiB0aGUgcmVsZXZhbnQgc3ltYm9scyBhbmQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBGcm9tIHdoYXQgSSBzZWUsIHRoZSBwcmltYXJ5IGZvY3VzIGlzIG9uIHRoZXNlIHN5bWJvbHM6IGBzdmNfcmVnaXN0ZXJgLCBgc3ZjX2dlbmVyaWNfcnBjYmluZF9zZXRgLCBgcnBjYl9yZWdpc3RlcmAsIGBycGNiX3Y0X3JlZ2lzdGVyYCwgYW5kIGBycGNiX2NyZWF0ZV9sb2NhbGAuIFRob3NlIGFyZSB0aGUgZW50cnkgcG9pbnRzLCBzbyB0byBzcGVhay4KCk5vdywgcmVnYXJkaW5nIHRoZSBjb25maWcgb3B0aW9ucywgaXQgc2VlbXMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBgU1VOUlBDYCwgYE5GU19GU2AsIGFuZCBgTkZTRGAuIE15IGluc3RpbmN0IGlzIHRvIGRldGVybWluZSBpZiB3ZSBhYnNvbHV0ZWx5ICpuZWVkKiBib3RoIGBORlNfRlNgIGFuZCBgTkZTRGAsIG9yIGlmIGp1c3QgZW5hYmxpbmcgYFNVTlJQQ2Agd2lsbCBzdWZmaWNlIGZvciBjb21waWxpbmcgdGhlIG5lY2Vzc2FyeSBtb2R1bGVzLiBJIGtub3cgYFNVTlJQQ2AgYWxvbmUgaXMgZW5vdWdoIHRvIGJyaW5nIGluIHRoZSBgbmV0L3N1bnJwYy9gIGNvZGUuIEhvd2V2ZXIsIHRvICp0cmlnZ2VyKiB0aGUgbmV3IGZ1bmN0aW9uYWxpdHksIHdoaWNoIEkgdW5kZXJzdGFuZCBpcyBhIHRpbWVvdXQgZm9yIGxvY2FsIGBycGNiaW5kYCBjYWxscywgd2UmIzM5O2xsIHByb2JhYmx5IG5lZWQgZWl0aGVyIGBORlNfRlNgIG9yIGBORlNEYCB0byBhY3R1YWxseSBjcmVhdGUgdGhvc2UgUlBDIHNlcnZpY2VzLiBTbywganVzdCB0byBiZSBzdXJlLCBJIHdpbGwgaW5jbHVkZSBib3RoIGBORlNfRlNgIGFuZCBgTkZTRGAuCgpMZXQmIzM5O3MgZG8gYSBxdWljayBzd2VlcCBmb3IgYW55IG90aGVyIHJlbGV2YW50IGNvbmZpZyBvcHRpb25zLiBIbW0sIGBTVU5SUENfREVCVUdgIG1pZ2h0IGJlIGhlbHBmdWwgZm9yIGRlYnVnZ2luZyBsYXRlciwgYnV0IGl0JiMzOTtzIG5vdCBlc3NlbnRpYWwgZm9yIGp1c3QgdHJpZ2dlcmluZyB0aGUgZnVuY3Rpb25hbCBjaGFuZ2UgaXRzZWxmLgoKT2theSwgYmFjayB0byB0aGUgcGF0Y2guIEl0JiMzOTtzIGFkZGluZyBhIHRpbWVvdXQgdG8gdGhlIGxvY2FsIGBycGNiaW5kYCBjbGllbnQsIGFuZCBoYW5kbGluZyBgLUVUSU1FRE9VVGAgZXJyb3JzIGluIGBzdmNfcmVnaXN0ZXJgIGFuZCBgc3ZjX2dlbmVyaWNfcnBjYmluZF9zZXRgLiBUaGlzIGlzIGEgKmZ1bmN0aW9uYWwgY2hhbmdlKiB3aXRoaW4gdGhlIGBzdW5ycGNgIHN1YnN5c3RlbS4gQ3JpdGljYWxseSwgcmVnaXN0ZXJpbmcgYW4gUlBDIHNlcnZpY2Ugd2lsbCB0cmlnZ2VyIGl0LiBBbmQgdGhhdCYjMzk7cyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdGhyb3VnaCBORlMgb3Igb3RoZXIgUlBDIG1lY2hhbmlzbXMuIEkgYW0gY2VydGFpbiB0aGF0IHRoaXMgaXMgYSBwYXRjaCB3ZSB3aWxsIHdhbnQgdG8gdGVzdCBhZ2dyZXNzaXZlbHkgdXNpbmcgZnV6emluZy4KCk15IGFuYWx5c2lzIGFsaWducyB3aXRoIHRoZSBKU09OIG91dHB1dDogdGhlIHBhdGNoIGlzIGluZGVlZCB3b3J0aCBmdXp6aW5nLiBUaGUga2V5IHN5bWJvbHMsIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb25zLCBhbmQgdGhlIGNvcmUgcmVhc29uaW5nIGFyZSBhbGwgd2VsbC1kb2N1bWVudGVkIGFuZCBwcm92aWRlIGNvbmZpZGVuY2UgaW4gdGhpcyBhc3Nlc3NtZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxOToyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U1VOUlBDJiMzNDssCiAgICAmIzM0O05GU19GUyYjMzQ7LAogICAgJiMzNDtORlNEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c3ZjX3JlZ2lzdGVyJiMzNDssCiAgICAmIzM0O3N2Y19nZW5lcmljX3JwY2JpbmRfc2V0JiMzNDssCiAgICAmIzM0O3JwY2JfcmVnaXN0ZXImIzM0OywKICAgICYjMzQ7cnBjYl92NF9yZWdpc3RlciYjMzQ7LAogICAgJiMzNDtycGNiX2NyZWF0ZV9sb2NhbCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgdGltZW91dCBmb3IgbG9jYWwgcnBjYmluZCBjYWxscyBhbmQgaGFuZGxlcyAtRVRJTUVET1VUIGluIHN2Y19yZWdpc3RlciBhbmQgc3ZjX2dlbmVyaWNfcnBjYmluZF9zZXQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgc3VucnBjIHN1YnN5c3RlbSB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgYnkgcmVnaXN0ZXJpbmcgUlBDIHNlcnZpY2VzLCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIE5GUyBvciBvdGhlciBSUEMgbWVjaGFuaXNtcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U1VOUlBDJiMzNDssCiAgICAmIzM0O05GU19GUyYjMzQ7LAogICAgJiMzNDtORlNEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c3ZjX3JlZ2lzdGVyJiMzNDssCiAgICAmIzM0O3N2Y19nZW5lcmljX3JwY2JpbmRfc2V0JiMzNDssCiAgICAmIzM0O3JwY2JfcmVnaXN0ZXImIzM0OywKICAgICYjMzQ7cnBjYl92NF9yZWdpc3RlciYjMzQ7LAogICAgJiMzNDtycGNiX2NyZWF0ZV9sb2NhbCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgdGltZW91dCBmb3IgbG9jYWwgcnBjYmluZCBjYWxscyBhbmQgaGFuZGxlcyAtRVRJTUVET1VUIGluIHN2Y19yZWdpc3RlciBhbmQgc3ZjX2dlbmVyaWNfcnBjYmluZF9zZXQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgc3VucnBjIHN1YnN5c3RlbSB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgYnkgcmVnaXN0ZXJpbmcgUlBDIHNlcnZpY2VzLCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIE5GUyBvciBvdGhlciBSUEMgbWVjaGFuaXNtcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTk6Mjc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxOToyNzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aW1lb3V0IGhhbmRsaW5nIGZvciBsb2NhbCBSUEMgYmluZCBjYWxscyBpbiB0aGUgc3VucnBjIHN1YnN5c3RlbS4gSXQgaW50cm9kdWNlcyBhIHN0YXRpYyBjb25zdGFudCBgcnBjYl9sb2NhbF90aW1lb3V0YCBzdHJ1Y3R1cmUsIGFkZHMgdGltZW91dC1yZWxhdGVkIGZsYWdzIChgUlBDX1RBU0tfU09GVCB8IFJQQ19UQVNLX1RJTUVPVVRgKSB0byBgcnBjYl9yZWdpc3Rlcl9jYWxsYCwgYW5kIGFkZHMgbG9naWMgdG8gcHJvcGFnYXRlIGAtRVRJTUVET1VUYCBlcnJvcnMgaW4gYHN2Y19nZW5lcmljX3JwY2JpbmRfc2V0YCBhbmQgYHN2Y19yZWdpc3RlcmAuIFRoZXNlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBkbyBub3QgZXhwb3NlIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZSwgYW5kIGRvIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlIG9yIHJhY2UgY29uZGl0aW9ucyBkdWUgdG8gdGltZW91dHMpIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBvciBMT0NLREVQLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA1OWI2ODg0Y2Y1MTljMDQxMWEwMmQ3ZjZkOWEwOGYwZDdlODEwNjg4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBBdWcgNyAxOToyMzo1OSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvcnBjYl9jbG50LmMgYi9uZXQvc3VucnBjL3JwY2JfY2xudC5jCmluZGV4IDZhYTM3MjE4OGM4NmEuLjQwOTRmMzI1Nzg3NmQgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMvcnBjYl9jbG50LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3N1bnJwYy9ycGNiX2NsbnQuYwpAQCAtMjIxLDYgJiM0MzsyMjEsMTIgQEAgc3RhdGljIHZvaWQgcnBjYl9zZXRfbG9jYWwoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgcnBjX2NsbnQgKmNsbnQsCiAjIGRlZmluZSBTVU5fTEVOKHB0cikgKG9mZnNldG9mKHN0cnVjdCBzb2NrYWRkcl91biwgc3VuX3BhdGgpCQlcCiAJCSAgICAgICYjNDM7IDEgJiM0Mzsgc3RybGVuKChwdHIpLSZndDtzdW5fcGF0aCAmIzQzOyAxKSkKIAomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgcnBjX3RpbWVvdXQgcnBjYl9sb2NhbF90aW1lb3V0ID0gewomIzQzOwkudG9faW5pdHZhbCA9IChIWiAvIDEwKSA/IDogMSwKJiM0MzsJLnRvX21heHZhbCA9IChIWiAvIDEwKSA/IDogMSwKJiM0MzsJLnRvX3JldHJpZXMgPSAwLAomIzQzO307CiYjNDM7CiAvKgogICogUmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3MsIG90aGVyd2lzZSBhIG5lZ2F0aXZlIGVycm5vIHZhbHVlCiAgKiBpcyByZXR1cm5lZC4KQEAgLTIzOCw2ICYjNDM7MjQ0LDcgQEAgc3RhdGljIGludCBycGNiX2NyZWF0ZV9hZl9sb2NhbChzdHJ1Y3QgbmV0ICpuZXQsCiAJCS52ZXJzaW9uCT0gUlBDQlZFUlNfMiwKIAkJLmF1dGhmbGF2b3IJPSBSUENfQVVUSF9OVUxMLAogCQkuY3JlZAkJPSBjdXJyZW50X2NyZWQoKSwKJiM0MzsJCS50aW1lb3V0CT0gJmFtcDtycGNiX2xvY2FsX3RpbWVvdXQsCiAJCS8qCiAJCSAqIFdlIHR1cm4gb2ZmIHRoZSBpZGxlIHRpbWVvdXQgdG8gcHJldmVudCB0aGUga2VybmVsCiAJCSAqIGZyb20gYXV0b21hdGljYWxseSBkaXNjb25uZWN0aW5nIHRoZSBzb2NrZXQuCkBAIC0zMTIsNiAmIzQzOzMxOSw3IEBAIHN0YXRpYyBpbnQgcnBjYl9jcmVhdGVfbG9jYWxfbmV0KHN0cnVjdCBuZXQgKm5ldCkKIAkJLnZlcnNpb24JPSBSUENCVkVSU18yLAogCQkuYXV0aGZsYXZvcgk9IFJQQ19BVVRIX1VOSVgsCiAJCS5jcmVkCQk9IGN1cnJlbnRfY3JlZCgpLAomIzQzOwkJLnRpbWVvdXQJPSAmYW1wO3JwY2JfbG9jYWxfdGltZW91dCwKIAkJLmZsYWdzCQk9IFJQQ19DTE5UX0NSRUFURV9OT1BJTkcsCiAJfTsKIAlzdHJ1Y3QgcnBjX2NsbnQgKmNsbnQsICpjbG50NDsKQEAgLTQwMiwxMSAmIzQzOzQxMCwxMSBAQCBzdGF0aWMgc3RydWN0IHJwY19jbG50ICpycGNiX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKm5vZGVuYW1lLAogCiBzdGF0aWMgaW50IHJwY2JfcmVnaXN0ZXJfY2FsbChzdHJ1Y3Qgc3VucnBjX25ldCAqc24sIHN0cnVjdCBycGNfY2xudCAqY2xudCwgc3RydWN0IHJwY19tZXNzYWdlICptc2csIGJvb2wgaXNfc2V0KQogewotCWludCBmbGFncyA9IFJQQ19UQVNLX05PQ09OTkVDVDsKJiM0MzsJaW50IGZsYWdzID0gUlBDX1RBU0tfTk9DT05ORUNUIHwgUlBDX1RBU0tfU09GVCB8IFJQQ19UQVNLX1RJTUVPVVQ7CiAJaW50IGVycm9yLCByZXN1bHQgPSAwOwogCiAJaWYgKGlzX3NldCB8fCAhc24tJmd0O3JwY2JfaXNfYWZfbG9jYWwpCi0JCWZsYWdzID0gUlBDX1RBU0tfU09GVENPTk47CiYjNDM7CQlmbGFncyB8PSBSUENfVEFTS19TT0ZUQ09OTjsKIAltc2ctJmd0O3JwY19yZXNwID0gJmFtcDtyZXN1bHQ7CiAKIAllcnJvciA9IHJwY19jYWxsX3N5bmMoY2xudCwgbXNnLCBmbGFncyk7CmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL3N2Yy5jIGIvbmV0L3N1bnJwYy9zdmMuYwppbmRleCBhZTllYzRiZjM0ZjcyLi41MzlkZGQwNjQ2N2RmIDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL3N2Yy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zdW5ycGMvc3ZjLmMKQEAgLTEyMDcsNiAmIzQzOzEyMDcsOSBAQCBpbnQgc3ZjX2dlbmVyaWNfcnBjYmluZF9zZXQoc3RydWN0IG5ldCAqbmV0LAogCWVycm9yID0gc3ZjX3JwY2JpbmRfc2V0X3ZlcnNpb24obmV0LCBwcm9ncCwgdmVyc2lvbiwKIAkJCQkJZmFtaWx5LCBwcm90bywgcG9ydCk7CiAKJiM0MzsJaWYgKGVycm9yID09IC1FVElNRURPVVQpCiYjNDM7CQlyZXR1cm4gZXJyb3I7CiYjNDM7CiAJcmV0dXJuICh2ZXJzLSZndDt2c19ycGNiX29wdG5sKSA/IDAgOiBlcnJvcjsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHN2Y19nZW5lcmljX3JwY2JpbmRfc2V0KTsKQEAgLTEyNDMsNiAmIzQzOzEyNDYsOCBAQCBpbnQgc3ZjX3JlZ2lzdGVyKGNvbnN0IHN0cnVjdCBzdmNfc2VydiAqc2Vydiwgc3RydWN0IG5ldCAqbmV0LAogCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgJiMzNDtzdmM6IGZhaWxlZCB0byByZWdpc3RlciAmIzM0OwogCQkJCQkmIzM0OyVzdiV1IFJQQyBzZXJ2aWNlIChlcnJubyAlZCkuXG4mIzM0OywKIAkJCQkJcHJvZ3AtJmd0O3BnX25hbWUsIGksIC1lcnJvcik7CiYjNDM7CQkJCWlmIChlcnJvciA9PSAtRVRJTUVET1VUKQomIzQzOwkJCQkJcmV0dXJuIGVycm9yOwogCQkJCWJyZWFrOwogCQkJfQogCQl9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxOToyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODM5CgkJCQkJCQlvdXRwdXQ6IDE5MwoJCQkJCQkJdGhvdWdodHM6IDcyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBTdW5SUEMgVGltZW91dCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBqdXN0IHJldmlld2VkIHRoaXMgcGF0Y2guIEl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIHRpZ2h0ZW5pbmcgdXAgdGltZW91dCBoYW5kbGluZyB3aXRoaW4gdGhlIFN1blJQQyBzdWJzeXN0ZW0sIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiB0aGUgYHJwY2JgIGNsaWVudCBhbmQgc2VydmVyIGNvbXBvbmVudHMuIFRoZSBjaGFuZ2VzIGFyZSBjb25jZW50cmF0ZWQgaW4gYG5ldC9zdW5ycGMvcnBjYl9jbG50LmNgIGFuZCBgbmV0L3N1bnJwYy9zdmMuY2AuCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGlzIGlzIGEgcmVsYXRpdmVseSBzdHJhaWdodGZvcndhcmQgbW9kaWZpY2F0aW9uLiBXZSYjMzk7cmUgaW50cm9kdWNpbmcgYSBgcnBjYl9sb2NhbF90aW1lb3V0YCBzdHJ1Y3R1cmUgYW5kIHVzaW5nIGl0IHRvIGNvbmZpZ3VyZSB0aW1lb3V0cyB3aGVuIGNyZWF0aW5nIGxvY2FsIFJQQyBiaW5kIGNvbm5lY3Rpb25zLiBUaGUgYHJwY2JfbG9jYWxfdGltZW91dGAgaXRzZWxmIGFwcGVhcnMgdG8gYmUgYSBmdWxseSBpbml0aWFsaXplZCwgYHN0YXRpYyBjb25zdGAgc3RydWN0dXJlLCBzbyB0aGF0JiMzOTtzIGdvb2Qg4oCTIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdGhlcmUuIEkmIzM5O2xsIGRvdWJsZS1jaGVjayBpdC4gWWVwLCBpdCYjMzk7cyBkZWZpbmVkIGFuZCBpbml0aWFsaXplZCBhcyBleHBlY3RlZC4KClRoZSBjb3JlIG9mIHRoZSBwYXRjaCBzZWVtcyB0byByZXZvbHZlIGFyb3VuZCBzZXR0aW5nIGFuZCBwcm9wYWdhdGluZyB0aW1lb3V0IGZsYWdzLiBTcGVjaWZpY2FsbHksIGBycGNiX3JlZ2lzdGVyX2NhbGxgIGlzIGJlaW5nIHVwZGF0ZWQgdG8gaW5jbHVkZSBgUlBDX1RBU0tfU09GVCB8IFJQQ19UQVNLX1RJTUVPVVRgIGluIHRoZSBmbGFncy4gVGhpcyBpcyB0aGVuIGNvbWJpbmVkIHdpdGggb3RoZXIgZmxhZ3Mgc3VjaCBhcyBgUlBDX1RBU0tfU09GVENPTk5gIGlmIGFwcHJvcHJpYXRlLCBzbyB0aGF0IHNlZW1zIHNlbnNpYmxlLgoKT24gdGhlIHNlcnZlciBzaWRlLCBgc3ZjX2dlbmVyaWNfcnBjYmluZF9zZXRgIGFuZCBgc3ZjX3JlZ2lzdGVyYCBhcmUgbW9kaWZpZWQgdG8gZXhwbGljaXRseSByZXR1cm4gYC1FVElNRURPVVRgIGlmIHRoYXQgZXJyb3IgY29kZSBpcyBlbmNvdW50ZXJlZC4gVGhpcyBtYWtlcyBpdCBhIGJpdCBtb3JlIGV4cGxpY2l0LCBhbGxvd2luZyB0aGUgdXBwZXIgbGF5ZXJzIHRvIGNvcnJlY3RseSBoYW5kbGUgdGhlIHRpbWVvdXQuCgpJJiMzOTt2ZSBjYXJlZnVsbHkgY29uc2lkZXJlZCB0aGUgcG90ZW50aWFsIHNlY3VyaXR5IGltcGxpY2F0aW9ucywgYW5kIEkgZG9uJiMzOTt0IHNlZSBhbnkgaW1tZWRpYXRlIHJlZCBmbGFncy4gVGhlcmUmIzM5O3Mgbm8gaW50cm9kdWN0aW9uIG9mIG5ldywgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIG5vIGV4cG9zdXJlIG9mIGludGVybmFsIGRhdGEgc3RydWN0dXJlcyB0byB1c2VyIHNwYWNlLCBhbmQgbm8gY29tcGxleCBkYXRhIGFsbG9jYXRpb24gcGF0dGVybnMgdGhhdCBjb3VsZCBsZWFkIHRvIG1lbW9yeSBjb3JydXB0aW9uIHZ1bG5lcmFiaWxpdGllcy4gVGhpcyBpcyBpbXBvcnRhbnQgdG8gbm90ZSBzaW5jZSBteSBnb2FsIGlzIHRvIGVuc3VyZSB0aGlzIHBhdGNoIGlzIGFzIHNlY3VyZSBhcyBwb3NzaWJsZS4KClRoZSB0aW1lb3V0IGlzIGZ1bGx5IGluaXRpYWxpemVkIGFuZCBzaG91bGQgd29yayB3ZWxsIGluIHRoZSBSUEMgY29udGV4dC4gVGhlIGVycm9yIGNvZGUgb2YgdGhlIGBzdmNfZ2VuZXJpY19ycGNiaW5kX3NldGAgYW5kIGBzdmNfcmVnaXN0ZXJgIHdlcmUgY29ycmVjdGx5IGhhbmRsZWQgYW5kIHBhc3NlZCBmdXJ0aGVyIHVwIHRoZSBjaGFpbi4KCkNvbnNpZGVyaW5nIHRoZSBuYXR1cmUgb2YgdGhlIGNoYW5nZXMsIEkmIzM5O20gY29uZmlkZW50IHRoYXQgS0FTQU4gYW5kIG90aGVyIHN0YW5kYXJkIGtlcm5lbCBidWcgZGV0ZWN0b3JzIChsaWtlIEtNU0FOKSB3aWxsIGJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHN1YnRsZSBpc3N1ZXMsIHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucyB0aGF0IG1pZ2h0IGFyaXNlIGZyb20gYnVnZ3kgdGltZW91dCBoYW5kbGluZy4gQmFzZWQgb24gdGhpcyBhbmFseXNpcywgSSYjMzk7bSBjb21mb3J0YWJsZSBzZXR0aW5nIGBOZWVkc0tNU0FOPWZhbHNlYCBmb3IgdGhpcyBwYXRjaC4gSSBkb24mIzM5O3QgYmVsaWV2ZSBhbnkgS01TQU4tc3BlY2lmaWMgY2hlY2tzIGFyZSByZXF1aXJlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTk6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGltZW91dCBoYW5kbGluZyBmb3IgbG9jYWwgUlBDIGJpbmQgY2FsbHMgaW4gdGhlIHN1bnJwYyBzdWJzeXN0ZW0uIEl0IGludHJvZHVjZXMgYSBzdGF0aWMgY29uc3RhbnQgYHJwY2JfbG9jYWxfdGltZW91dGAgc3RydWN0dXJlLCBhZGRzIHRpbWVvdXQtcmVsYXRlZCBmbGFncyAoYFJQQ19UQVNLX1NPRlQgfCBSUENfVEFTS19USU1FT1VUYCkgdG8gYHJwY2JfcmVnaXN0ZXJfY2FsbGAsIGFuZCBhZGRzIGxvZ2ljIHRvIHByb3BhZ2F0ZSBgLUVUSU1FRE9VVGAgZXJyb3JzIGluIGBzdmNfZ2VuZXJpY19ycGNiaW5kX3NldGAgYW5kIGBzdmNfcmVnaXN0ZXJgLiBUaGVzZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgZG8gbm90IGV4cG9zZSBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UsIGFuZCBkbyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyAoc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSBvciByYWNlIGNvbmRpdGlvbnMgZHVlIHRvIHRpbWVvdXRzKSB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gb3IgTE9DS0RFUC4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRpbWVvdXQgaGFuZGxpbmcgZm9yIGxvY2FsIFJQQyBiaW5kIGNhbGxzIGluIHRoZSBzdW5ycGMgc3Vic3lzdGVtLiBJdCBpbnRyb2R1Y2VzIGEgc3RhdGljIGNvbnN0YW50IGBycGNiX2xvY2FsX3RpbWVvdXRgIHN0cnVjdHVyZSwgYWRkcyB0aW1lb3V0LXJlbGF0ZWQgZmxhZ3MgKGBSUENfVEFTS19TT0ZUIHwgUlBDX1RBU0tfVElNRU9VVGApIHRvIGBycGNiX3JlZ2lzdGVyX2NhbGxgLCBhbmQgYWRkcyBsb2dpYyB0byBwcm9wYWdhdGUgYC1FVElNRURPVVRgIGVycm9ycyBpbiBgc3ZjX2dlbmVyaWNfcnBjYmluZF9zZXRgIGFuZCBgc3ZjX3JlZ2lzdGVyYC4gVGhlc2UgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIGRvIG5vdCBleHBvc2Uga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLCBhbmQgZG8gbm90IGludm9sdmUgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUgb3IgcmFjZSBjb25kaXRpb25zIGR1ZSB0byB0aW1lb3V0cykgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIG9yIExPQ0tERVAuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE5OjI0OjAxLjYwMTY1NDUzOVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MzI0NzU4MTUxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTVU5SUENcIixcbiAgICBcIk5GU19GU1wiLFxuICAgIFwiTkZTRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInN2Y19yZWdpc3RlclwiLFxuICAgIFwic3ZjX2dlbmVyaWNfcnBjYmluZF9zZXRcIixcbiAgICBcInJwY2JfcmVnaXN0ZXJcIixcbiAgICBcInJwY2JfdjRfcmVnaXN0ZXJcIixcbiAgICBcInJwY2JfY3JlYXRlX2xvY2FsXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aW1lb3V0IGhhbmRsaW5nIGZvciBsb2NhbCBSUEMgYmluZCBjYWxscyBpbiB0aGUgc3VucnBjIHN1YnN5c3RlbS4gSXQgaW50cm9kdWNlcyBhIHN0YXRpYyBjb25zdGFudCBgcnBjYl9sb2NhbF90aW1lb3V0YCBzdHJ1Y3R1cmUsIGFkZHMgdGltZW91dC1yZWxhdGVkIGZsYWdzIChgUlBDX1RBU0tfU09GVCB8IFJQQ19UQVNLX1RJTUVPVVRgKSB0byBgcnBjYl9yZWdpc3Rlcl9jYWxsYCwgYW5kIGFkZHMgbG9naWMgdG8gcHJvcGFnYXRlIGAtRVRJTUVET1VUYCBlcnJvcnMgaW4gYHN2Y19nZW5lcmljX3JwY2JpbmRfc2V0YCBhbmQgYHN2Y19yZWdpc3RlcmAuIFRoZXNlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBkbyBub3QgZXhwb3NlIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZSwgYW5kIGRvIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlIG9yIHJhY2UgY29uZGl0aW9ucyBkdWUgdG8gdGltZW91dHMpIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBvciBMT0NLREVQLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSB0aW1lb3V0IGZvciBsb2NhbCBycGNiaW5kIGNhbGxzIGFuZCBoYW5kbGVzIC1FVElNRURPVVQgaW4gc3ZjX3JlZ2lzdGVyIGFuZCBzdmNfZ2VuZXJpY19ycGNiaW5kX3NldC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBzdW5ycGMgc3Vic3lzdGVtIHRoYXQgY2FuIGJlIHRyaWdnZXJlZCBieSByZWdpc3RlcmluZyBSUEMgc2VydmljZXMsIHdoaWNoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgTkZTIG9yIG90aGVyIFJQQyBtZWNoYW5pc21zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxOToyNDowMS42MDE2NjIzNzlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMzY4NzAzMDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA1OWI2ODg0Y2Y1MTljMDQxMWEwMmQ3ZjZkOWEwOGYwZDdlODEwNjg4XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgQXVnIDcgMTk6MjM6NTkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9ycGNiX2NsbnQuYyBiL25ldC9zdW5ycGMvcnBjYl9jbG50LmNcXG5pbmRleCA2YWEzNzIxODhjODZhLi40MDk0ZjMyNTc4NzZkIDEwMDY0NFxcbi0tLSBhL25ldC9zdW5ycGMvcnBjYl9jbG50LmNcXG4rKysgYi9uZXQvc3VucnBjL3JwY2JfY2xudC5jXFxuQEAgLTIyMSw2ICsyMjEsMTIgQEAgc3RhdGljIHZvaWQgcnBjYl9zZXRfbG9jYWwoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgcnBjX2NsbnQgKmNsbnQsXFxuICMgZGVmaW5lIFNVTl9MRU4ocHRyKSAob2Zmc2V0b2Yoc3RydWN0IHNvY2thZGRyX3VuLCBzdW5fcGF0aClcXHRcXHRcXFxcXFxuIFxcdFxcdCAgICAgICsgMSArIHN0cmxlbigocHRyKS1cXHUwMDNlc3VuX3BhdGggKyAxKSlcXG4gXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcnBjX3RpbWVvdXQgcnBjYl9sb2NhbF90aW1lb3V0ID0ge1xcbitcXHQudG9faW5pdHZhbCA9IChIWiAvIDEwKSA/IDogMSxcXG4rXFx0LnRvX21heHZhbCA9IChIWiAvIDEwKSA/IDogMSxcXG4rXFx0LnRvX3JldHJpZXMgPSAwLFxcbit9O1xcbitcXG4gLypcXG4gICogUmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3MsIG90aGVyd2lzZSBhIG5lZ2F0aXZlIGVycm5vIHZhbHVlXFxuICAqIGlzIHJldHVybmVkLlxcbkBAIC0yMzgsNiArMjQ0LDcgQEAgc3RhdGljIGludCBycGNiX2NyZWF0ZV9hZl9sb2NhbChzdHJ1Y3QgbmV0ICpuZXQsXFxuIFxcdFxcdC52ZXJzaW9uXFx0PSBSUENCVkVSU18yLFxcbiBcXHRcXHQuYXV0aGZsYXZvclxcdD0gUlBDX0FVVEhfTlVMTCxcXG4gXFx0XFx0LmNyZWRcXHRcXHQ9IGN1cnJlbnRfY3JlZCgpLFxcbitcXHRcXHQudGltZW91dFxcdD0gXFx1MDAyNnJwY2JfbG9jYWxfdGltZW91dCxcXG4gXFx0XFx0LypcXG4gXFx0XFx0ICogV2UgdHVybiBvZmYgdGhlIGlkbGUgdGltZW91dCB0byBwcmV2ZW50IHRoZSBrZXJuZWxcXG4gXFx0XFx0ICogZnJvbSBhdXRvbWF0aWNhbGx5IGRpc2Nvbm5lY3RpbmcgdGhlIHNvY2tldC5cXG5AQCAtMzEyLDYgKzMxOSw3IEBAIHN0YXRpYyBpbnQgcnBjYl9jcmVhdGVfbG9jYWxfbmV0KHN0cnVjdCBuZXQgKm5ldClcXG4gXFx0XFx0LnZlcnNpb25cXHQ9IFJQQ0JWRVJTXzIsXFxuIFxcdFxcdC5hdXRoZmxhdm9yXFx0PSBSUENfQVVUSF9VTklYLFxcbiBcXHRcXHQuY3JlZFxcdFxcdD0gY3VycmVudF9jcmVkKCksXFxuK1xcdFxcdC50aW1lb3V0XFx0PSBcXHUwMDI2cnBjYl9sb2NhbF90aW1lb3V0LFxcbiBcXHRcXHQuZmxhZ3NcXHRcXHQ9IFJQQ19DTE5UX0NSRUFURV9OT1BJTkcsXFxuIFxcdH07XFxuIFxcdHN0cnVjdCBycGNfY2xudCAqY2xudCwgKmNsbnQ0O1xcbkBAIC00MDIsMTEgKzQxMCwxMSBAQCBzdGF0aWMgc3RydWN0IHJwY19jbG50ICpycGNiX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKm5vZGVuYW1lLFxcbiBcXG4gc3RhdGljIGludCBycGNiX3JlZ2lzdGVyX2NhbGwoc3RydWN0IHN1bnJwY19uZXQgKnNuLCBzdHJ1Y3QgcnBjX2NsbnQgKmNsbnQsIHN0cnVjdCBycGNfbWVzc2FnZSAqbXNnLCBib29sIGlzX3NldClcXG4ge1xcbi1cXHRpbnQgZmxhZ3MgPSBSUENfVEFTS19OT0NPTk5FQ1Q7XFxuK1xcdGludCBmbGFncyA9IFJQQ19UQVNLX05PQ09OTkVDVCB8IFJQQ19UQVNLX1NPRlQgfCBSUENfVEFTS19USU1FT1VUO1xcbiBcXHRpbnQgZXJyb3IsIHJlc3VsdCA9IDA7XFxuIFxcbiBcXHRpZiAoaXNfc2V0IHx8ICFzbi1cXHUwMDNlcnBjYl9pc19hZl9sb2NhbClcXG4tXFx0XFx0ZmxhZ3MgPSBSUENfVEFTS19TT0ZUQ09OTjtcXG4rXFx0XFx0ZmxhZ3MgfD0gUlBDX1RBU0tfU09GVENPTk47XFxuIFxcdG1zZy1cXHUwMDNlcnBjX3Jlc3AgPSBcXHUwMDI2cmVzdWx0O1xcbiBcXG4gXFx0ZXJyb3IgPSBycGNfY2FsbF9zeW5jKGNsbnQsIG1zZywgZmxhZ3MpO1xcbmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL3N2Yy5jIGIvbmV0L3N1bnJwYy9zdmMuY1xcbmluZGV4IGFlOWVjNGJmMzRmNzIuLjUzOWRkZDA2NDY3ZGYgMTAwNjQ0XFxuLS0tIGEvbmV0L3N1bnJwYy9zdmMuY1xcbisrKyBiL25ldC9zdW5ycGMvc3ZjLmNcXG5AQCAtMTIwNyw2ICsxMjA3LDkgQEAgaW50IHN2Y19nZW5lcmljX3JwY2JpbmRfc2V0KHN0cnVjdCBuZXQgKm5ldCxcXG4gXFx0ZXJyb3IgPSBzdmNfcnBjYmluZF9zZXRfdmVyc2lvbihuZXQsIHByb2dwLCB2ZXJzaW9uLFxcbiBcXHRcXHRcXHRcXHRcXHRmYW1pbHksIHByb3RvLCBwb3J0KTtcXG4gXFxuK1xcdGlmIChlcnJvciA9PSAtRVRJTUVET1VUKVxcbitcXHRcXHRyZXR1cm4gZXJyb3I7XFxuK1xcbiBcXHRyZXR1cm4gKHZlcnMtXFx1MDAzZXZzX3JwY2Jfb3B0bmwpID8gMCA6IGVycm9yO1xcbiB9XFxuIEVYUE9SVF9TWU1CT0xfR1BMKHN2Y19nZW5lcmljX3JwY2JpbmRfc2V0KTtcXG5AQCAtMTI0Myw2ICsxMjQ2LDggQEAgaW50IHN2Y19yZWdpc3Rlcihjb25zdCBzdHJ1Y3Qgc3ZjX3NlcnYgKnNlcnYsIHN0cnVjdCBuZXQgKm5ldCxcXG4gXFx0XFx0XFx0XFx0cHJpbnRrKEtFUk5fV0FSTklORyBcXFwic3ZjOiBmYWlsZWQgdG8gcmVnaXN0ZXIgXFxcIlxcbiBcXHRcXHRcXHRcXHRcXHRcXFwiJXN2JXUgUlBDIHNlcnZpY2UgKGVycm5vICVkKS5cXFxcblxcXCIsXFxuIFxcdFxcdFxcdFxcdFxcdHByb2dwLVxcdTAwM2VwZ19uYW1lLCBpLCAtZXJyb3IpO1xcbitcXHRcXHRcXHRcXHRpZiAoZXJyb3IgPT0gLUVUSU1FRE9VVClcXG4rXFx0XFx0XFx0XFx0XFx0cmV0dXJuIGVycm9yO1xcbiBcXHRcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0XFx0fVxcbiBcXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE5OjI0OjAyLjgzOTYyMTMwMVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjE4MDcyNDA5NTQ1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTVU5SUENcIixcbiAgICBcIk5GU19GU1wiLFxuICAgIFwiTkZTRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInN2Y19yZWdpc3RlclwiLFxuICAgIFwic3ZjX2dlbmVyaWNfcnBjYmluZF9zZXRcIixcbiAgICBcInJwY2JfcmVnaXN0ZXJcIixcbiAgICBcInJwY2JfdjRfcmVnaXN0ZXJcIixcbiAgICBcInJwY2JfY3JlYXRlX2xvY2FsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIHRpbWVvdXQgZm9yIGxvY2FsIHJwY2JpbmQgY2FsbHMgYW5kIGhhbmRsZXMgLUVUSU1FRE9VVCBpbiBzdmNfcmVnaXN0ZXIgYW5kIHN2Y19nZW5lcmljX3JwY2JpbmRfc2V0LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIHN1bnJwYyBzdWJzeXN0ZW0gdGhhdCBjYW4gYmUgdHJpZ2dlcmVkIGJ5IHJlZ2lzdGVyaW5nIFJQQyBzZXJ2aWNlcywgd2hpY2ggaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBORlMgb3Igb3RoZXIgUlBDIG1lY2hhbmlzbXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDU5YjY4ODRjZjUxOWMwNDExYTAyZDdmNmQ5YTA4ZjBkN2U4MTA2ODhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyA3IDE5OjIzOjU5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9ycGNiX2NsbnQuYyBiL25ldC9zdW5ycGMvcnBjYl9jbG50LmNcbmluZGV4IDZhYTM3MjE4OGM4NmEuLjQwOTRmMzI1Nzg3NmQgMTAwNjQ0XG4tLS0gYS9uZXQvc3VucnBjL3JwY2JfY2xudC5jXG4rKysgYi9uZXQvc3VucnBjL3JwY2JfY2xudC5jXG5AQCAtMjIxLDYgKzIyMSwxMiBAQCBzdGF0aWMgdm9pZCBycGNiX3NldF9sb2NhbChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBycGNfY2xudCAqY2xudCxcbiAjIGRlZmluZSBTVU5fTEVOKHB0cikgKG9mZnNldG9mKHN0cnVjdCBzb2NrYWRkcl91biwgc3VuX3BhdGgpXHRcdFxcXG4gXHRcdCAgICAgICsgMSArIHN0cmxlbigocHRyKS1cdTAwM2VzdW5fcGF0aCArIDEpKVxuIFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcnBjX3RpbWVvdXQgcnBjYl9sb2NhbF90aW1lb3V0ID0ge1xuK1x0LnRvX2luaXR2YWwgPSAoSFogLyAxMCkgPyA6IDEsXG4rXHQudG9fbWF4dmFsID0gKEhaIC8gMTApID8gOiAxLFxuK1x0LnRvX3JldHJpZXMgPSAwLFxuK307XG4rXG4gLypcbiAgKiBSZXR1cm5zIHplcm8gb24gc3VjY2Vzcywgb3RoZXJ3aXNlIGEgbmVnYXRpdmUgZXJybm8gdmFsdWVcbiAgKiBpcyByZXR1cm5lZC5cbkBAIC0yMzgsNiArMjQ0LDcgQEAgc3RhdGljIGludCBycGNiX2NyZWF0ZV9hZl9sb2NhbChzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRcdC52ZXJzaW9uXHQ9IFJQQ0JWRVJTXzIsXG4gXHRcdC5hdXRoZmxhdm9yXHQ9IFJQQ19BVVRIX05VTEwsXG4gXHRcdC5jcmVkXHRcdD0gY3VycmVudF9jcmVkKCksXG4rXHRcdC50aW1lb3V0XHQ9IFx1MDAyNnJwY2JfbG9jYWxfdGltZW91dCxcbiBcdFx0LypcbiBcdFx0ICogV2UgdHVybiBvZmYgdGhlIGlkbGUgdGltZW91dCB0byBwcmV2ZW50IHRoZSBrZXJuZWxcbiBcdFx0ICogZnJvbSBhdXRvbWF0aWNhbGx5IGRpc2Nvbm5lY3RpbmcgdGhlIHNvY2tldC5cbkBAIC0zMTIsNiArMzE5LDcgQEAgc3RhdGljIGludCBycGNiX2NyZWF0ZV9sb2NhbF9uZXQoc3RydWN0IG5ldCAqbmV0KVxuIFx0XHQudmVyc2lvblx0PSBSUENCVkVSU18yLFxuIFx0XHQuYXV0aGZsYXZvclx0PSBSUENfQVVUSF9VTklYLFxuIFx0XHQuY3JlZFx0XHQ9IGN1cnJlbnRfY3JlZCgpLFxuK1x0XHQudGltZW91dFx0PSBcdTAwMjZycGNiX2xvY2FsX3RpbWVvdXQsXG4gXHRcdC5mbGFnc1x0XHQ9IFJQQ19DTE5UX0NSRUFURV9OT1BJTkcsXG4gXHR9O1xuIFx0c3RydWN0IHJwY19jbG50ICpjbG50LCAqY2xudDQ7XG5AQCAtNDAyLDExICs0MTAsMTEgQEAgc3RhdGljIHN0cnVjdCBycGNfY2xudCAqcnBjYl9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpub2RlbmFtZSxcbiBcbiBzdGF0aWMgaW50IHJwY2JfcmVnaXN0ZXJfY2FsbChzdHJ1Y3Qgc3VucnBjX25ldCAqc24sIHN0cnVjdCBycGNfY2xudCAqY2xudCwgc3RydWN0IHJwY19tZXNzYWdlICptc2csIGJvb2wgaXNfc2V0KVxuIHtcbi1cdGludCBmbGFncyA9IFJQQ19UQVNLX05PQ09OTkVDVDtcbitcdGludCBmbGFncyA9IFJQQ19UQVNLX05PQ09OTkVDVCB8IFJQQ19UQVNLX1NPRlQgfCBSUENfVEFTS19USU1FT1VUO1xuIFx0aW50IGVycm9yLCByZXN1bHQgPSAwO1xuIFxuIFx0aWYgKGlzX3NldCB8fCAhc24tXHUwMDNlcnBjYl9pc19hZl9sb2NhbClcbi1cdFx0ZmxhZ3MgPSBSUENfVEFTS19TT0ZUQ09OTjtcbitcdFx0ZmxhZ3MgfD0gUlBDX1RBU0tfU09GVENPTk47XG4gXHRtc2ctXHUwMDNlcnBjX3Jlc3AgPSBcdTAwMjZyZXN1bHQ7XG4gXG4gXHRlcnJvciA9IHJwY19jYWxsX3N5bmMoY2xudCwgbXNnLCBmbGFncyk7XG5kaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9zdmMuYyBiL25ldC9zdW5ycGMvc3ZjLmNcbmluZGV4IGFlOWVjNGJmMzRmNzIuLjUzOWRkZDA2NDY3ZGYgMTAwNjQ0XG4tLS0gYS9uZXQvc3VucnBjL3N2Yy5jXG4rKysgYi9uZXQvc3VucnBjL3N2Yy5jXG5AQCAtMTIwNyw2ICsxMjA3LDkgQEAgaW50IHN2Y19nZW5lcmljX3JwY2JpbmRfc2V0KHN0cnVjdCBuZXQgKm5ldCxcbiBcdGVycm9yID0gc3ZjX3JwY2JpbmRfc2V0X3ZlcnNpb24obmV0LCBwcm9ncCwgdmVyc2lvbixcbiBcdFx0XHRcdFx0ZmFtaWx5LCBwcm90bywgcG9ydCk7XG4gXG4rXHRpZiAoZXJyb3IgPT0gLUVUSU1FRE9VVClcbitcdFx0cmV0dXJuIGVycm9yO1xuK1xuIFx0cmV0dXJuICh2ZXJzLVx1MDAzZXZzX3JwY2Jfb3B0bmwpID8gMCA6IGVycm9yO1xuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChzdmNfZ2VuZXJpY19ycGNiaW5kX3NldCk7XG5AQCAtMTI0Myw2ICsxMjQ2LDggQEAgaW50IHN2Y19yZWdpc3Rlcihjb25zdCBzdHJ1Y3Qgc3ZjX3NlcnYgKnNlcnYsIHN0cnVjdCBuZXQgKm5ldCxcbiBcdFx0XHRcdHByaW50ayhLRVJOX1dBUk5JTkcgXCJzdmM6IGZhaWxlZCB0byByZWdpc3RlciBcIlxuIFx0XHRcdFx0XHRcIiVzdiV1IFJQQyBzZXJ2aWNlIChlcnJubyAlZCkuXFxuXCIsXG4gXHRcdFx0XHRcdHByb2dwLVx1MDAzZXBnX25hbWUsIGksIC1lcnJvcik7XG4rXHRcdFx0XHRpZiAoZXJyb3IgPT0gLUVUSU1FRE9VVClcbitcdFx0XHRcdFx0cmV0dXJuIGVycm9yO1xuIFx0XHRcdFx0YnJlYWs7XG4gXHRcdFx0fVxuIFx0XHR9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxOToyNDowMi44Mzk2MjM3NjFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NDUzMjM5Njg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgRmVhc2liaWxpdHk6IEludmVzdGlnYXRpbmcgYSBzdW5ycGMgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCBhIHBhdGNoIGhlcmUgdGhhdCdzIG1ha2luZyBjaGFuZ2VzIHRvIGBuZXQvc3VucnBjL3JwY2JfY2xudC5jYCBhbmQgYG5ldC9zdW5ycGMvc3ZjLmNgLiBTcGVjaWZpY2FsbHksIGl0IGludHJvZHVjZXMgYSBsb2NhbCB0aW1lb3V0LCBgcnBjYl9sb2NhbF90aW1lb3V0YCwgZm9yIFJQQyBiaW5kIGNsaWVudHMgd2l0aGluIGBycGNiX2NyZWF0ZV9hZl9sb2NhbGAgYW5kIGBycGNiX2NyZWF0ZV9sb2NhbF9uZXRgLiBBbHNvLCBgcnBjYl9yZWdpc3Rlcl9jYWxsYCBpcyBiZWluZyB1cGRhdGVkIHRvIHVzZSBgUlBDX1RBU0tfU09GVCB8IFJQQ19UQVNLX1RJTUVPVVRgIGZsYWdzLiBJIHNlZSBgc3ZjX2dlbmVyaWNfcnBjYmluZF9zZXRgIGFuZCBgc3ZjX3JlZ2lzdGVyYCBhcmUgbm93IGNoZWNraW5nIGZvciBgLUVUSU1FRE9VVGAgZXJyb3JzIGFuZCByZXR1cm5pbmcgdGhlbS5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBpcyBmdXp6aW5nLXdvcnRoeS4gU3VuUlBDLCBhcyBJIHJlY2FsbCwgaXMgZGVmaW5pdGVseSBhIHRhcmdldCB0aGF0J3MgZXhwb3NlZCB0byB1c2Vyc3BhY2UsIHRoaW5rIE5GUyBhbmQgb3RoZXIgUlBDIHNlcnZpY2VzLiBUaGF0IG1ha2VzIGl0IGFuIGludGVyZXN0aW5nIHRhcmdldC4gTGV0J3Mgc2VlLCB0aGUgcGF0Y2ggdG91Y2hlcyB0aGVzZSBmdW5jdGlvbnM6IGBycGNiX2NyZWF0ZV9hZl9sb2NhbGAsIGBycGNiX2NyZWF0ZV9sb2NhbF9uZXRgLCBgcnBjYl9yZWdpc3Rlcl9jYWxsYCwgYHN2Y19nZW5lcmljX3JwY2JpbmRfc2V0YCwgYW5kIGBzdmNfcmVnaXN0ZXJgLlxuXG5SaWdodCwgdGltZSB0byBjaGVjayB0aGUgY29uZmlnIG9wdGlvbnMuIExldCdzIG1ha2Ugc3VyZSBgQ09ORklHX1NVTlJQQ2AgaXMgZW5hYmxlZC4gSWYgaXQgaXMsIHRoZW4gSSdsbCBsb29rIGludG8gaXRzIEtjb25maWcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4NDIsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxOToyNDoxMS4yOTI4NjY0MVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzc1NjU5MjkxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBTVU5SUENcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zdW5ycGMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbm5ldC9zdW5ycGMvS2NvbmZpZzoyOmNvbmZpZyBTVU5SUENcXG5uZXQvc3VucnBjL0tjb25maWctMy1cXHR0cmlzdGF0ZVxcbi0tXFxubmV0L3N1bnJwYy9LY29uZmlnLTUtXFxubmV0L3N1bnJwYy9LY29uZmlnOjY6Y29uZmlnIFNVTlJQQ19HU1NcXG5uZXQvc3VucnBjL0tjb25maWctNy1cXHR0cmlzdGF0ZVxcbi0tXFxubmV0L3N1bnJwYy9LY29uZmlnLTEwLVxcbm5ldC9zdW5ycGMvS2NvbmZpZzoxMTpjb25maWcgU1VOUlBDX0JBQ0tDSEFOTkVMXFxubmV0L3N1bnJwYy9LY29uZmlnLTEyLVxcdGJvb2xcXG4tLVxcbm5ldC9zdW5ycGMvS2NvbmZpZy0xNC1cXG5uZXQvc3VucnBjL0tjb25maWc6MTU6Y29uZmlnIFNVTlJQQ19TV0FQXFxubmV0L3N1bnJwYy9LY29uZmlnLTE2LVxcdGJvb2xcXG4tLVxcbm5ldC9zdW5ycGMvS2NvbmZpZz0xOT1jb25maWcgUlBDU0VDX0dTU19LUkI1XFxuLS1cXG5uZXQvc3VucnBjL0tjb25maWctMzUtXFxubmV0L3N1bnJwYy9LY29uZmlnOjM2OmNvbmZpZyBTVU5SUENfREVCVUdcXG5uZXQvc3VucnBjL0tjb25maWctMzctXFx0Ym9vbCBcXFwiUlBDOiBFbmFibGUgZHByaW50ayBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5uZXQvc3VucnBjL0tjb25maWctNDktXFxubmV0L3N1bnJwYy9LY29uZmlnOjUwOmNvbmZpZyBTVU5SUENfREVCVUdfVFJBQ0VcXG5uZXQvc3VucnBjL0tjb25maWctNTEtXFx0Ym9vbCBcXFwiUlBDOiBTZW5kIGRmcHJpbnRrKCkgb3V0cHV0IHRvIHRoZSB0cmFjZSBidWZmZXJcXFwiXFxuLS1cXG5uZXQvc3VucnBjL0tjb25maWctNjMtXFxubmV0L3N1bnJwYy9LY29uZmlnOjY0OmNvbmZpZyBTVU5SUENfWFBSVF9SRE1BXFxubmV0L3N1bnJwYy9LY29uZmlnLTY1LVxcdHRyaXN0YXRlIFxcXCJSUEMtb3Zlci1SRE1BIHRyYW5zcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTk6MjQ6MTMuNjY4NTI5NzgxWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDYxNzQ3MTMzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFNVTlJQQyBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiBpcyBjbGVhcmx5IGNlbnRlcmVkIGFyb3VuZCBTVU5SUEMuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgcHJlc2VudCwganVzdCB0byBiZSBzdXJlLiBJJ20gbm90aW5nIHRoYXQga2V5IGZ1bmN0aW9ucyBsaWtlIGBzdmNfZ2VuZXJpY19ycGNiaW5kX3NldGAgYW5kIGBzdmNfcmVnaXN0ZXJgIGFyZSBleHBsaWNpdGx5IGV4cG9ydGVkLiBUaGF0IGltbWVkaWF0ZWx5IGZsYWdzIHRoZW0gYXMgcG90ZW50aWFsIHBvaW50cyBvZiBpbnRlcmVzdCwgYWxtb3N0IGNlcnRhaW5seSBBUEkgZW50cnlwb2ludHMuIE9uIHRoZSBvdGhlciBoYW5kLCBmdW5jdGlvbnMgbGlrZSBgcnBjYl9jcmVhdGVfYWZfbG9jYWxgLCBgcnBjYl9jcmVhdGVfbG9jYWxfbmV0YCwgYW5kIGBycGNiX3JlZ2lzdGVyX2NhbGxgIGFyZSBzdGF0aWMsIHdoaWNoIEknbGwga2VlcCBpbiBtaW5kIGJ1dCBsaWtlbHkgd29uJ3QgcmVxdWlyZSBhcyBjbG9zZSBhdHRlbnRpb24uXG5cblRoZSBxdWVzdGlvbiBub3cgaXMgd2hldGhlciBgc3ZjX2dlbmVyaWNfcnBjYmluZF9zZXRgIGFuZCBgc3ZjX3JlZ2lzdGVyYCBhcmUgdGhlIGJlc3QgZm9jdXMgc3ltYm9scy4gQW5kIHllcywgYWZ0ZXIgYSBxdWljayBldmFsdWF0aW9uLCBgc3ZjX3JlZ2lzdGVyYCBpcyBkZWZpbml0ZWx5IGFuIEFQSSBlbnRyeXBvaW50LiBBbmQgYHN2Y19nZW5lcmljX3JwY2JpbmRfc2V0YCBhbHNvIGxvb2tzIGxpa2UgYSBzb2xpZCBBUEkgZW50cnlwb2ludCB0b28uXG5cbkFscmlnaHQsIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkaXZlIGludG8gYG5ldC9zdW5ycGMvc3ZjLmNgIHRvIGV4YW1pbmUgdGhlIGltcGxlbWVudGF0aW9ucyBvZiBgc3ZjX3JlZ2lzdGVyYCBhbmQgYHN2Y19nZW5lcmljX3JwY2JpbmRfc2V0YCBpbiBncmVhdGVyIGRldGFpbC4gSSdtIGV4cGVjdGluZyB0byBmaW5kIHRoZSBjb3JlIHJlZ2lzdHJhdGlvbiBhbmQgY29uZmlndXJhdGlvbiBsb2dpYyB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzg0OSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxOToyNDoxOC4yODYwMDM4MzRaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzc1ODcxNjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3ZjX3JlZ2lzdGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zdW5ycGMvc3ZjLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3N1bnJwYy9zdmMuYz0xMTAyPXN0YXRpYyBpbnQgX19zdmNfcnBjYl9yZWdpc3RlcjYoc3RydWN0IG5ldCAqbmV0LCBjb25zdCB1MzIgcHJvZ3JhbSxcXG4tLVxcbm5ldC9zdW5ycGMvc3ZjLmMtMTE0NS0gKi9cXG5uZXQvc3VucnBjL3N2Yy5jOjExNDY6c3RhdGljIGludCBfX3N2Y19yZWdpc3RlcihzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKnByb2duYW1lLFxcbm5ldC9zdW5ycGMvc3ZjLmMtMTE0Ny1cXHRcXHRcXHQgIGNvbnN0IHUzMiBwcm9ncmFtLCBjb25zdCB1MzIgdmVyc2lvbixcXG4tLVxcbm5ldC9zdW5ycGMvc3ZjLmMtMTE2NS1cXG5uZXQvc3VucnBjL3N2Yy5jOjExNjY6XFx0dHJhY2Vfc3ZjX3JlZ2lzdGVyKHByb2duYW1lLCB2ZXJzaW9uLCBmYW1pbHksIHByb3RvY29sLCBwb3J0LCBlcnJvcik7XFxubmV0L3N1bnJwYy9zdmMuYy0xMTY3LVxcdHJldHVybiBlcnJvcjtcXG4tLVxcbm5ldC9zdW5ycGMvc3ZjLmM9MTE3MT1pbnQgc3ZjX3JwY2JpbmRfc2V0X3ZlcnNpb24oc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L3N1bnJwYy9zdmMuYy0xMTc2LXtcXG5uZXQvc3VucnBjL3N2Yy5jOjExNzc6XFx0cmV0dXJuIF9fc3ZjX3JlZ2lzdGVyKG5ldCwgcHJvZ3AtXFx1MDAzZXBnX25hbWUsIHByb2dwLVxcdTAwM2VwZ19wcm9nLFxcbm5ldC9zdW5ycGMvc3ZjLmMtMTE3OC1cXHRcXHRcXHRcXHR2ZXJzaW9uLCBmYW1pbHksIHByb3RvLCBwb3J0KTtcXG4tLVxcbm5ldC9zdW5ycGMvc3ZjLmM9MTIxNT1FWFBPUlRfU1lNQk9MX0dQTChzdmNfZ2VuZXJpY19ycGNiaW5kX3NldCk7XFxuLS1cXG5uZXQvc3VucnBjL3N2Yy5jLTEyMTctLyoqXFxubmV0L3N1bnJwYy9zdmMuYzoxMjE4OiAqIHN2Y19yZWdpc3RlciAtIHJlZ2lzdGVyIGFuIFJQQyBzZXJ2aWNlIHdpdGggdGhlIGxvY2FsIHBvcnRtYXBwZXJcXG5uZXQvc3VucnBjL3N2Yy5jLTEyMTktICogQHNlcnY6IHN2Y19zZXJ2IHN0cnVjdCBmb3IgdGhlIHNlcnZpY2UgdG8gcmVnaXN0ZXJcXG4tLVxcbm5ldC9zdW5ycGMvc3ZjLmMtMTIyNi0gKi9cXG5uZXQvc3VucnBjL3N2Yy5jOjEyMjc6aW50IHN2Y19yZWdpc3Rlcihjb25zdCBzdHJ1Y3Qgc3ZjX3NlcnYgKnNlcnYsIHN0cnVjdCBuZXQgKm5ldCxcXG5uZXQvc3VucnBjL3N2Yy5jLTEyMjgtXFx0XFx0IGNvbnN0IGludCBmYW1pbHksIGNvbnN0IHVuc2lnbmVkIHNob3J0IHByb3RvLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxOToyNDoxOC4zNjM1OTU3NDhaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDI4MzkwNjE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgSSBzZWUgaXQ6XG5cbioqUlBDIEJpbmRpbmcgRnVuY3Rpb24gRXhhbWluYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgaG93IHRoZSBSUEMgYmluZGluZyBwcm9jZXNzIGlzIGhhbmRsZWQuIEkgc2VlIHRoYXQgYHN2Y19yZWdpc3RlcmAgaXMgYXZhaWxhYmxlLCBzbyB0aGF0J3Mgb2J2aW91c2x5IHBhcnQgb2YgdGhlIHNlcnZlci1zaWRlIHJlZ2lzdHJhdGlvbiBwcm9jZXNzLiBBbmQgYHN2Y19nZW5lcmljX3JwY2JpbmRfc2V0YCBpcyBhbHNvIGV4cG9ydGVkIOKAkyB0aGF0IGxpa2VseSBoYW5kbGVzIHNvbWUgZ2VuZXJpYyBiaW5kaW5nIGNvbmZpZ3VyYXRpb24uIE5vdywgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBjbGllbnQtc2lkZSBpbnRlcmFjdGlvbiwgSSBzaG91bGQgcHJvYmFibHkgYmUgbG9va2luZyBhdCBgbmV0L3N1bnJwYy9ycGNiX2NsbnQuY2AuIEkgbmVlZCB0byByZXZpZXcgdGhvc2UgZnVuY3Rpb25zIGluIHRoYXQgZmlsZSB3aGljaCB3aWxsIGRlYWwgd2l0aCByZWdpc3RlcmluZyB3aXRoIHRoZSBsb2NhbCBSUEMgYmluZCBzZXJ2aWNlIChgcnBjYl9jcmVhdGVfYWZfbG9jYWxgLCBgcnBjYl9jcmVhdGVfbG9jYWxfbmV0YCwgYW5kIGBycGNiX3JlZ2lzdGVyX2NhbGxgKS4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgZnVsbCBwaWN0dXJlIG9uIGhvdyB0aGUgY2xpZW50IGdvZXMgYWJvdXQgY29ubmVjdGluZyB0byBhbmQgcmVnaXN0ZXJpbmcgd2l0aCB0aGUgcnBjYmluZCBzZXJ2aWNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0ODA3LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTk6MjQ6MjIuMzkxOTg5MDgyWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgxMTIzODQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJwY2JfY3JlYXRlX2FmX2xvY2FsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zdW5ycGMvcnBjYl9jbG50LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3N1bnJwYy9ycGNiX2NsbnQuYz0yMjQ9c3RhdGljIGNvbnN0IHN0cnVjdCBycGNfdGltZW91dCBycGNiX2xvY2FsX3RpbWVvdXQgPSB7XFxuLS1cXG5uZXQvc3VucnBjL3JwY2JfY2xudC5jLTIzMy0gKi9cXG5uZXQvc3VucnBjL3JwY2JfY2xudC5jOjIzNDpzdGF0aWMgaW50IHJwY2JfY3JlYXRlX2FmX2xvY2FsKHN0cnVjdCBuZXQgKm5ldCxcXG5uZXQvc3VucnBjL3JwY2JfY2xudC5jLTIzNS1cXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfdW4gKmFkZHIpXFxuLS1cXG5uZXQvc3VucnBjL3JwY2JfY2xudC5jPTI4MT1zdGF0aWMgaW50IHJwY2JfY3JlYXRlX2xvY2FsX2Fic3RyYWN0KHN0cnVjdCBuZXQgKm5ldClcXG4tLVxcbm5ldC9zdW5ycGMvcnBjYl9jbG50LmMtMjg3LVxcbm5ldC9zdW5ycGMvcnBjYl9jbG50LmM6Mjg4OlxcdHJldHVybiBycGNiX2NyZWF0ZV9hZl9sb2NhbChuZXQsIFxcdTAwMjZycGNiX2xvY2FsYWRkcl9hYnN0cmFjdCk7XFxubmV0L3N1bnJwYy9ycGNiX2NsbnQuYy0yODktfVxcbi0tXFxubmV0L3N1bnJwYy9ycGNiX2NsbnQuYz0yOTE9c3RhdGljIGludCBycGNiX2NyZWF0ZV9sb2NhbF91bml4KHN0cnVjdCBuZXQgKm5ldClcXG4tLVxcbm5ldC9zdW5ycGMvcnBjYl9jbG50LmMtMjk3LVxcbm5ldC9zdW5ycGMvcnBjYl9jbG50LmM6Mjk4OlxcdHJldHVybiBycGNiX2NyZWF0ZV9hZl9sb2NhbChuZXQsIFxcdTAwMjZycGNiX2xvY2FsYWRkcl91bml4KTtcXG5uZXQvc3VucnBjL3JwY2JfY2xudC5jLTI5OS19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE5OjI0OjIyLjQ3MzExNjY4NloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYzMjQwNzg2MDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBMb2NhbCBSUEMgQmluZGluZyBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgUlBDIGNvZGUgYW5kIG5vdGljaW5nIHNvbWV0aGluZyBpbnRlcmVzdGluZy4gSXQgbG9va3MgbGlrZSBgcnBjYl9jcmVhdGVfYWZfbG9jYWxgLCBgcnBjYl9jcmVhdGVfbG9jYWxfbmV0YCwgYW5kIGBycGNiX3JlZ2lzdGVyX2NhbGxgIGFyZSBhbGwgZGVjbGFyZWQgYXMgYHN0YXRpY2AuIFRoYXQgaW1tZWRpYXRlbHkgcGlxdWVzIG15IGludGVyZXN0LiBTdGF0aWMgZnVuY3Rpb25zIG1lYW4gdGhlaXIgc2NvcGUgaXMgbGltaXRlZCB0byB0aGUgY3VycmVudCBjb21waWxhdGlvbiB1bml0LCBzbyB0aGV5J3JlIG5vdCBpbnRlbmRlZCBmb3IgZXh0ZXJuYWwgdXNlLiBJIHdvbmRlciB3aHkgdGhlc2UgcGFydGljdWxhciBmdW5jdGlvbnMgYXJlIGRlZW1lZCBpbnRlcm5hbC5cblxuTXkgbmV4dCBzdGVwIGlzIGNsZWFyOiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIG9mIHRoZXNlIGxvY2FsIGZ1bmN0aW9ucy4gTGV0J3Mgc2VlIHdobyBpcyBhY3R1YWxseSBjYWxsaW5nIGBycGNiX2NyZWF0ZV9sb2NhbF9uZXRgLiBJdCBzZWVtcyBhcyB0aG91Z2ggc29tZW9uZSB3YW50cyB0byBrZWVwIGEgY2xvc2UgcmVpbiBvbiB0aGUgbG9naWMgdGhhdCB1c2VzIHRoaXMgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0NzIsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxOToyNDoyOC43OTcxOTk3NzdaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY1MDgzMTM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJwY2JfY3JlYXRlX2xvY2FsX25ldFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc3VucnBjL3JwY2JfY2xudC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zdW5ycGMvcnBjYl9jbG50LmM9MjkxPXN0YXRpYyBpbnQgcnBjYl9jcmVhdGVfbG9jYWxfdW5peChzdHJ1Y3QgbmV0ICpuZXQpXFxuLS1cXG5uZXQvc3VucnBjL3JwY2JfY2xudC5jLTMwNC0gKi9cXG5uZXQvc3VucnBjL3JwY2JfY2xudC5jOjMwNTpzdGF0aWMgaW50IHJwY2JfY3JlYXRlX2xvY2FsX25ldChzdHJ1Y3QgbmV0ICpuZXQpXFxubmV0L3N1bnJwYy9ycGNiX2NsbnQuYy0zMDYte1xcbi0tXFxubmV0L3N1bnJwYy9ycGNiX2NsbnQuYz0zNTM9aW50IHJwY2JfY3JlYXRlX2xvY2FsKHN0cnVjdCBuZXQgKm5ldClcXG4tLVxcbm5ldC9zdW5ycGMvcnBjYl9jbG50LmMtMzY2LVxcdCAgICBycGNiX2NyZWF0ZV9sb2NhbF91bml4KG5ldCkgIT0gMClcXG5uZXQvc3VucnBjL3JwY2JfY2xudC5jOjM2NzpcXHRcXHRyZXN1bHQgPSBycGNiX2NyZWF0ZV9sb2NhbF9uZXQobmV0KTtcXG5uZXQvc3VucnBjL3JwY2JfY2xudC5jLTM2OC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTk6MjQ6MjguODYyMjg4MDUyWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4MjgzNTYwMTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHByZXNlbnRlZCBhcyBpZiBpdCB3ZXJlIG15IG93biBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqRm9jdXNpbmcgaW4gb24gYHJwY2JfY3JlYXRlX2xvY2FsYCoqXG5cblJpZ2h0LCBzbyBgcnBjYl9jcmVhdGVfbG9jYWxgLi4uIHRoYXQncyB0aGUgZXhwb3J0ZWQgZnVuY3Rpb24gd2UncmUgdGFsa2luZyBhYm91dCBoZXJlLiBJbW1lZGlhdGVseSwgdGhlIHNpZ25pZmljYW5jZSBjbGlja3MgaW4uIFRoaXMgaXNuJ3QganVzdCAqYSogZnVuY3Rpb247IGl0J3MgdGhlIG91dHdhcmQtZmFjaW5nIGVudHJ5IHBvaW50LCB0aGUgb25lIHRoYXQgbWFrZXMgdGhpcyBmdW5jdGlvbmFsaXR5IGF2YWlsYWJsZSB0byB0aGUgd29ybGQsIG9yIGF0IGxlYXN0LCB0aGUgbG9jYWwgc3lzdGVtLiBUaGF0IG1lYW5zIHRoZSBzaWduYXR1cmUsIHRoZSBiZWhhdmlvciwgdGhlIGludGVybmFsIGRlcGVuZGVuY2llcyDigJMgYWxsIG9mIGl0IG11c3QgYmUgbWV0aWN1bG91c2x5IGNvbnNpZGVyZWQgYmVjYXVzZSBpdCdzIHRoZSBwdWJsaWMgQVBJLiBJdCBpcyBob3cgb3RoZXIgbW9kdWxlcywgb3IgYXBwbGljYXRpb25zLCBhcmUgaW50ZW5kZWQgdG8gbWFrZSB1c2Ugb2YgdGhlIFJQQyBiaW5kZXIgZnVuY3Rpb25hbGl0eS4gVGhpbmtpbmcgZnVydGhlciBhYm91dCB0aGUgZnVuY3Rpb24sIEkgaW1tZWRpYXRlbHkgY29uc2lkZXIgcG90ZW50aWFsIGVycm9ycyB0aGF0IG1heSBvY2N1ciBpbiBzZXR0aW5nIHVwIHRoZSBsb2NhbCBSUEMgYmluZGVyLiBJdCB3aWxsIHJlcXVpcmUgdGhlIGFwcHJvcHJpYXRlIHBlcm1pc3Npb25zLCBuZXR3b3JrIGNvbmZpZ3VyYXRpb24sIGFuZCBpdCBtdXN0IHN1Y2Nlc3NmdWxseSByZWdpc3RlciBzZXJ2aWNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTk3MSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE5OjI0OjMzLjY5MDY0NzA0OVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzc4Mjk0MjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicnBjYl9jcmVhdGVfbG9jYWxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3N1bnJwYy9ycGNiX2NsbnQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc3VucnBjL3JwY2JfY2xudC5jPTIwNj1zdGF0aWMgdm9pZCBycGNiX3NldF9sb2NhbChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBycGNfY2xudCAqY2xudCxcXG4tLVxcbm5ldC9zdW5ycGMvcnBjYl9jbG50LmMtMjExLVxcbm5ldC9zdW5ycGMvcnBjYl9jbG50LmM6MjEyOlxcdC8qIFByb3RlY3RlZCBieSBycGNiX2NyZWF0ZV9sb2NhbF9tdXRleCAqL1xcbm5ldC9zdW5ycGMvcnBjYl9jbG50LmMtMjEzLVxcdHNuLVxcdTAwM2VycGNiX2xvY2FsX2NsbnQgPSBjbG50O1xcbi0tXFxubmV0L3N1bnJwYy9ycGNiX2NsbnQuYz0yMzQ9c3RhdGljIGludCBycGNiX2NyZWF0ZV9hZl9sb2NhbChzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvc3VucnBjL3JwY2JfY2xudC5jLTI4MC1cXG5uZXQvc3VucnBjL3JwY2JfY2xudC5jOjI4MTpzdGF0aWMgaW50IHJwY2JfY3JlYXRlX2xvY2FsX2Fic3RyYWN0KHN0cnVjdCBuZXQgKm5ldClcXG5uZXQvc3VucnBjL3JwY2JfY2xudC5jLTI4Mi17XFxuLS1cXG5uZXQvc3VucnBjL3JwY2JfY2xudC5jLTI5MC1cXG5uZXQvc3VucnBjL3JwY2JfY2xudC5jOjI5MTpzdGF0aWMgaW50IHJwY2JfY3JlYXRlX2xvY2FsX3VuaXgoc3RydWN0IG5ldCAqbmV0KVxcbm5ldC9zdW5ycGMvcnBjYl9jbG50LmMtMjkyLXtcXG4tLVxcbm5ldC9zdW5ycGMvcnBjYl9jbG50LmMtMzA0LSAqL1xcbm5ldC9zdW5ycGMvcnBjYl9jbG50LmM6MzA1OnN0YXRpYyBpbnQgcnBjYl9jcmVhdGVfbG9jYWxfbmV0KHN0cnVjdCBuZXQgKm5ldClcXG5uZXQvc3VucnBjL3JwY2JfY2xudC5jLTMwNi17XFxuLS1cXG5uZXQvc3VucnBjL3JwY2JfY2xudC5jLTM1Mi0gKi9cXG5uZXQvc3VucnBjL3JwY2JfY2xudC5jOjM1MzppbnQgcnBjYl9jcmVhdGVfbG9jYWwoc3RydWN0IG5ldCAqbmV0KVxcbm5ldC9zdW5ycGMvcnBjYl9jbG50LmMtMzU0LXtcXG5uZXQvc3VucnBjL3JwY2JfY2xudC5jOjM1NTpcXHRzdGF0aWMgREVGSU5FX01VVEVYKHJwY2JfY3JlYXRlX2xvY2FsX211dGV4KTtcXG5uZXQvc3VucnBjL3JwY2JfY2xudC5jLTM1Ni1cXHRpbnQgcmVzdWx0ID0gMDtcXG4tLVxcbm5ldC9zdW5ycGMvcnBjYl9jbG50LmMtMzYwLVxcbm5ldC9zdW5ycGMvcnBjYl9jbG50LmM6MzYxOlxcdG11dGV4X2xvY2soXFx1MDAyNnJwY2JfY3JlYXRlX2xvY2FsX211dGV4KTtcXG5uZXQvc3VucnBjL3JwY2JfY2xudC5jLTM2Mi1cXHRpZiAocnBjYl9nZXRfbG9jYWwobmV0KSlcXG4tLVxcbm5ldC9zdW5ycGMvcnBjYl9jbG50LmMtMzY0LVxcbm5ldC9zdW5ycGMvcnBjYl9jbG50LmM6MzY1OlxcdGlmIChycGNiX2NyZWF0ZV9sb2NhbF9hYnN0cmFjdChuZXQpICE9IDAgXFx1MDAyNlxcdTAwMjZcXG5uZXQvc3VucnBjL3JwY2JfY2xudC5jOjM2NjpcXHQgICAgcnBjYl9jcmVhdGVfbG9jYWxfdW5peChuZXQpICE9IDApXFxubmV0L3N1bnJwYy9ycGNiX2NsbnQuYzozNjc6XFx0XFx0cmVzdWx0ID0gcnBjYl9jcmVhdGVfbG9jYWxfbmV0KG5ldCk7XFxubmV0L3N1bnJwYy9ycGNiX2NsbnQuYy0zNjgtXFxubmV0L3N1bnJwYy9ycGNiX2NsbnQuYy0zNjktb3V0Olxcbm5ldC9zdW5ycGMvcnBjYl9jbG50LmM6MzcwOlxcdG11dGV4X3VubG9jayhcXHUwMDI2cnBjYl9jcmVhdGVfbG9jYWxfbXV0ZXgpO1xcbm5ldC9zdW5ycGMvcnBjYl9jbG50LmMtMzcxLVxcdHJldHVybiByZXN1bHQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE5OjI0OjMzLjc2ODQ4MDU4NFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjY2MDY1MTk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgYHJwY2JfY3JlYXRlX2xvY2FsYCBGdW5jdGlvbidzIFNjb3BlKipcblxuT2theSwgc28gYHJwY2JfY3JlYXRlX2xvY2FsYCBpc24ndCBzdGF0aWMsIG9yIGF0IGxlYXN0IGl0IHNlZW1zIHRvIGJlIGV4cG9zZWQgc29tZWhvdy4gVGhhdCdzIHRoZSBjbHVlIEkgbmVlZGVkLiBOb3csIGlmIGl0J3MgdmlzaWJsZSBvdXRzaWRlIGl0cyBpbW1lZGlhdGUgc2NvcGUsIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgaXMgdGhlIGNsaWVudC1zaWRlIGNvZGUsIHBhcnRpY3VsYXJseSB3aGVyZSBpdCBtaWdodCBiZSAqdXNlZCogdG8gcmVnaXN0ZXIgY2FsbHMuIFRoZSBvYnZpb3VzIHBsYWNlIHRvIGludmVzdGlnYXRlIG5leHQgaXMgdGhlIGBuZXQvc3VucnBjL3JwY2JfY2xudC5jYCBmaWxlLiBJJ2xsIG5lZWQgdG8gY2hlY2sgaWYgYHJwY2JfcmVnaXN0ZXJfY2FsbGAgaXMgZGVmaW5lZCB0aGVyZSBhbmQsIG1vcmUgaW1wb3J0YW50bHksIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgZnVuY3Rpb24gSSdtIGN1cmlvdXMgYWJvdXQuIFVuZGVyc3RhbmRpbmcgdGhpcyByZWxhdGlvbnNoaXAgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGhhbmRsZSBvbiBob3cgdGhpcyByZWdpc3RyYXRpb24gcHJvY2VzcyB3b3Jrcy4gSSdtIGhvcGluZyBgcnBjYl9yZWdpc3Rlcl9jYWxsYCBwcm92aWRlcyBhIGNsZWFyIHBhdGh3YXkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcwNTAsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxOToyNDozOC4wMzQ1NDkyNDFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxMTEwNTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJwY2JfcmVnaXN0ZXJfY2FsbFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc3VucnBjL3JwY2JfY2xudC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zdW5ycGMvcnBjYl9jbG50LmM9Mzc0PXN0YXRpYyBzdHJ1Y3QgcnBjX2NsbnQgKnJwY2JfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqbm9kZW5hbWUsXFxuLS1cXG5uZXQvc3VucnBjL3JwY2JfY2xudC5jLTQxMC1cXG5uZXQvc3VucnBjL3JwY2JfY2xudC5jOjQxMTpzdGF0aWMgaW50IHJwY2JfcmVnaXN0ZXJfY2FsbChzdHJ1Y3Qgc3VucnBjX25ldCAqc24sIHN0cnVjdCBycGNfY2xudCAqY2xudCwgc3RydWN0IHJwY19tZXNzYWdlICptc2csIGJvb2wgaXNfc2V0KVxcbm5ldC9zdW5ycGMvcnBjYl9jbG50LmMtNDEyLXtcXG4tLVxcbm5ldC9zdW5ycGMvcnBjYl9jbG50LmM9NDYyPWludCBycGNiX3JlZ2lzdGVyKHN0cnVjdCBuZXQgKm5ldCwgdTMyIHByb2csIHUzMiB2ZXJzLCBpbnQgcHJvdCwgdW5zaWduZWQgc2hvcnQgcG9ydClcXG4tLVxcbm5ldC9zdW5ycGMvcnBjYl9jbG50LmMtNDgzLVxcbm5ldC9zdW5ycGMvcnBjYl9jbG50LmM6NDg0OlxcdHJldHVybiBycGNiX3JlZ2lzdGVyX2NhbGwoc24sIHNuLVxcdTAwM2VycGNiX2xvY2FsX2NsbnQsIFxcdTAwMjZtc2csIGlzX3NldCk7XFxubmV0L3N1bnJwYy9ycGNiX2NsbnQuYy00ODUtfVxcbi0tXFxubmV0L3N1bnJwYy9ycGNiX2NsbnQuYz00OTA9c3RhdGljIGludCBycGNiX3JlZ2lzdGVyX2luZXQ0KHN0cnVjdCBzdW5ycGNfbmV0ICpzbixcXG4tLVxcbm5ldC9zdW5ycGMvcnBjYl9jbG50LmMtNTA3LVxcbm5ldC9zdW5ycGMvcnBjYl9jbG50LmM6NTA4OlxcdHJlc3VsdCA9IHJwY2JfcmVnaXN0ZXJfY2FsbChzbiwgc24tXFx1MDAzZXJwY2JfbG9jYWxfY2xudDQsIG1zZywgaXNfc2V0KTtcXG5uZXQvc3VucnBjL3JwY2JfY2xudC5jLTUwOS1cXHRrZnJlZShtYXAtXFx1MDAzZXJfYWRkcik7XFxuLS1cXG5uZXQvc3VucnBjL3JwY2JfY2xudC5jPTUxNj1zdGF0aWMgaW50IHJwY2JfcmVnaXN0ZXJfaW5ldDYoc3RydWN0IHN1bnJwY19uZXQgKnNuLFxcbi0tXFxubmV0L3N1bnJwYy9ycGNiX2NsbnQuYy01MzMtXFxubmV0L3N1bnJwYy9ycGNiX2NsbnQuYzo1MzQ6XFx0cmVzdWx0ID0gcnBjYl9yZWdpc3Rlcl9jYWxsKHNuLCBzbi1cXHUwMDNlcnBjYl9sb2NhbF9jbG50NCwgbXNnLCBpc19zZXQpO1xcbm5ldC9zdW5ycGMvcnBjYl9jbG50LmMtNTM1LVxcdGtmcmVlKG1hcC1cXHUwMDNlcl9hZGRyKTtcXG4tLVxcbm5ldC9zdW5ycGMvcnBjYl9jbG50LmM9NTM5PXN0YXRpYyBpbnQgcnBjYl91bnJlZ2lzdGVyX2FsbF9wcm90b2ZhbWlsaWVzKHN0cnVjdCBzdW5ycGNfbmV0ICpzbixcXG4tLVxcbm5ldC9zdW5ycGMvcnBjYl9jbG50LmMtNTQ4LVxcbm5ldC9zdW5ycGMvcnBjYl9jbG50LmM6NTQ5OlxcdHJldHVybiBycGNiX3JlZ2lzdGVyX2NhbGwoc24sIHNuLVxcdTAwM2VycGNiX2xvY2FsX2NsbnQ0LCBtc2csIGZhbHNlKTtcXG5uZXQvc3VucnBjL3JwY2JfY2xudC5jLTU1MC19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE5OjI0OjM4LjA4NTY2NTk5N1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDE2NTEzNDM5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgUmVnaXN0cmF0aW9uIFByb2Nlc3MqKlxuXG5BbHJpZ2h0LCBzbyB3ZSdyZSBsb29raW5nIGF0IHJlZ2lzdHJhdGlvbiwgc3BlY2lmaWNhbGx5IHRoZSBleHBvcnRlZCBmdW5jdGlvbiBgcnBjYl9yZWdpc3RlcmAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIk9rYXksIHRoYXQncyB0aGUgZW50cnkgcG9pbnQgd2UncmUgY29uY2VybmVkIHdpdGguXCIgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgZnVuY3Rpb24gd29ya3MsIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHN5c3RlbS4gV2hhdCBhcmUgaXRzIGRlcGVuZGVuY2llcz8gSG93IGRvZXMgaXQgaGFuZGxlIGVycm9ycz9cblxuVG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlLCBJJ20gZ29pbmcgdG8gZGlnIGEgbGl0dGxlIGRlZXBlci4gSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSByZWdpc3RyYXRpb24gcHJvY2VzcyBpcyB0aWVkIHRvZ2V0aGVyLCBhbmQgaG93IGl0IGRpZmZlcnMgZnJvbSBhIG1vcmUgc3RhdGljIG1ldGhvZCBvZiBSUEMgdXNlLiBJJ2xsIG5lZWQgdG8gZXhhbWluZSBgcnBjYl9jcmVhdGVfbG9jYWxgIGFuZCBzZWUgaWYgdGhleSBhcmUgcmVsYXRlZC4gTXkgZm9jdXMgd2lsbCBiZSBvbiB0aGUga2V5IHBpZWNlczpcblxuKiAgIEhvdyBpcyB0aGUgcmVnaXN0cmF0aW9uIGluZm8gaGFuZGxlZD9cbiogICBXaGF0IGlzIHJlZ2lzdGVyZWQgaW4gdGhlIHByb2Nlc3M/XG4qICAgV2hhdCByZXNvdXJjZXMgYXJlIGFsbG9jYXRlZD9cblxuSSdsbCBiZSBsb29raW5nIGZvciBwb3RlbnRpYWwgYm90dGxlbmVja3MsIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcywgb3IgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9ucyBpbiB0aGVzZSBmdW5jdGlvbnMuIEl0J3MgdGltZSB0byBkaXZlIGludG8gdGhlIGNvZGUhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgwMDQsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxOToyNToxMi4yNTA4MDI5NjlaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzMTcxNjI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJwY2JfcmVnaXN0ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3N1bnJwYy9ycGNiX2NsbnQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc3VucnBjL3JwY2JfY2xudC5jPTM3ND1zdGF0aWMgc3RydWN0IHJwY19jbG50ICpycGNiX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKm5vZGVuYW1lLFxcbi0tXFxubmV0L3N1bnJwYy9ycGNiX2NsbnQuYy00MTAtXFxubmV0L3N1bnJwYy9ycGNiX2NsbnQuYzo0MTE6c3RhdGljIGludCBycGNiX3JlZ2lzdGVyX2NhbGwoc3RydWN0IHN1bnJwY19uZXQgKnNuLCBzdHJ1Y3QgcnBjX2NsbnQgKmNsbnQsIHN0cnVjdCBycGNfbWVzc2FnZSAqbXNnLCBib29sIGlzX3NldClcXG5uZXQvc3VucnBjL3JwY2JfY2xudC5jLTQxMi17XFxuLS1cXG5uZXQvc3VucnBjL3JwY2JfY2xudC5jLTQyOS0vKipcXG5uZXQvc3VucnBjL3JwY2JfY2xudC5jOjQzMDogKiBycGNiX3JlZ2lzdGVyIC0gc2V0IG9yIHVuc2V0IGEgcG9ydCByZWdpc3RyYXRpb24gd2l0aCB0aGUgbG9jYWwgcnBjYmluZCBzdmNcXG5uZXQvc3VucnBjL3JwY2JfY2xudC5jLTQzMS0gKiBAbmV0OiB0YXJnZXQgbmV0d29yayBuYW1lc3BhY2VcXG4tLVxcbm5ldC9zdW5ycGMvcnBjYl9jbG50LmMtNDYxLSAqL1xcbm5ldC9zdW5ycGMvcnBjYl9jbG50LmM6NDYyOmludCBycGNiX3JlZ2lzdGVyKHN0cnVjdCBuZXQgKm5ldCwgdTMyIHByb2csIHUzMiB2ZXJzLCBpbnQgcHJvdCwgdW5zaWduZWQgc2hvcnQgcG9ydClcXG5uZXQvc3VucnBjL3JwY2JfY2xudC5jLTQ2My17XFxuLS1cXG5uZXQvc3VucnBjL3JwY2JfY2xudC5jLTQ4My1cXG5uZXQvc3VucnBjL3JwY2JfY2xudC5jOjQ4NDpcXHRyZXR1cm4gcnBjYl9yZWdpc3Rlcl9jYWxsKHNuLCBzbi1cXHUwMDNlcnBjYl9sb2NhbF9jbG50LCBcXHUwMDI2bXNnLCBpc19zZXQpO1xcbm5ldC9zdW5ycGMvcnBjYl9jbG50LmMtNDg1LX1cXG4tLVxcbm5ldC9zdW5ycGMvcnBjYl9jbG50LmMtNDg5LSAqL1xcbm5ldC9zdW5ycGMvcnBjYl9jbG50LmM6NDkwOnN0YXRpYyBpbnQgcnBjYl9yZWdpc3Rlcl9pbmV0NChzdHJ1Y3Qgc3VucnBjX25ldCAqc24sXFxubmV0L3N1bnJwYy9ycGNiX2NsbnQuYy00OTEtXFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqc2FwLFxcbi0tXFxubmV0L3N1bnJwYy9ycGNiX2NsbnQuYy01MDctXFxubmV0L3N1bnJwYy9ycGNiX2NsbnQuYzo1MDg6XFx0cmVzdWx0ID0gcnBjYl9yZWdpc3Rlcl9jYWxsKHNuLCBzbi1cXHUwMDNlcnBjYl9sb2NhbF9jbG50NCwgbXNnLCBpc19zZXQpO1xcbm5ldC9zdW5ycGMvcnBjYl9jbG50LmMtNTA5LVxcdGtmcmVlKG1hcC1cXHUwMDNlcl9hZGRyKTtcXG4tLVxcbm5ldC9zdW5ycGMvcnBjYl9jbG50LmMtNTE1LSAqL1xcbm5ldC9zdW5ycGMvcnBjYl9jbG50LmM6NTE2OnN0YXRpYyBpbnQgcnBjYl9yZWdpc3Rlcl9pbmV0NihzdHJ1Y3Qgc3VucnBjX25ldCAqc24sXFxubmV0L3N1bnJwYy9ycGNiX2NsbnQuYy01MTctXFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqc2FwLFxcbi0tXFxubmV0L3N1bnJwYy9ycGNiX2NsbnQuYy01MzMtXFxubmV0L3N1bnJwYy9ycGNiX2NsbnQuYzo1MzQ6XFx0cmVzdWx0ID0gcnBjYl9yZWdpc3Rlcl9jYWxsKHNuLCBzbi1cXHUwMDNlcnBjYl9sb2NhbF9jbG50NCwgbXNnLCBpc19zZXQpO1xcbm5ldC9zdW5ycGMvcnBjYl9jbG50LmMtNTM1LVxcdGtmcmVlKG1hcC1cXHUwMDNlcl9hZGRyKTtcXG4tLVxcbm5ldC9zdW5ycGMvcnBjYl9jbG50LmM9NTM5PXN0YXRpYyBpbnQgcnBjYl91bnJlZ2lzdGVyX2FsbF9wcm90b2ZhbWlsaWVzKHN0cnVjdCBzdW5ycGNfbmV0ICpzbixcXG4tLVxcbm5ldC9zdW5ycGMvcnBjYl9jbG50LmMtNTQ4LVxcbm5ldC9zdW5ycGMvcnBjYl9jbG50LmM6NTQ5OlxcdHJldHVybiBycGNiX3JlZ2lzdGVyX2NhbGwoc24sIHNuLVxcdTAwM2VycGNiX2xvY2FsX2NsbnQ0LCBtc2csIGZhbHNlKTtcXG5uZXQvc3VucnBjL3JwY2JfY2xudC5jLTU1MC19XFxuLS1cXG5uZXQvc3VucnBjL3JwY2JfY2xudC5jPTU5Nj1pbnQgcnBjYl92NF9yZWdpc3RlcihzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHUzMiBwcm9ncmFtLCBjb25zdCB1MzIgdmVyc2lvbixcXG4tLVxcbm5ldC9zdW5ycGMvcnBjYl9jbG50LmMtNjE1LVxcbm5ldC9zdW5ycGMvcnBjYl9jbG50LmM6NjE2OlxcdHRyYWNlX3JwY2JfcmVnaXN0ZXIobWFwLnJfcHJvZywgbWFwLnJfdmVycywgbWFwLnJfYWRkciwgbWFwLnJfbmV0aWQpO1xcbm5ldC9zdW5ycGMvcnBjYl9jbG50LmMtNjE3LVxcbi0tXFxubmV0L3N1bnJwYy9ycGNiX2NsbnQuYy02MTktXFx0Y2FzZSBBRl9JTkVUOlxcbm5ldC9zdW5ycGMvcnBjYl9jbG50LmM6NjIwOlxcdFxcdHJldHVybiBycGNiX3JlZ2lzdGVyX2luZXQ0KHNuLCBhZGRyZXNzLCBcXHUwMDI2bXNnKTtcXG5uZXQvc3VucnBjL3JwY2JfY2xudC5jLTYyMS1cXHRjYXNlIEFGX0lORVQ2Olxcbm5ldC9zdW5ycGMvcnBjYl9jbG50LmM6NjIyOlxcdFxcdHJldHVybiBycGNiX3JlZ2lzdGVyX2luZXQ2KHNuLCBhZGRyZXNzLCBcXHUwMDI2bXNnKTtcXG5uZXQvc3VucnBjL3JwY2JfY2xudC5jLTYyMy1cXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE5OjI1OjEyLjMwMzk4MDEyNloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTcyMDMzMTM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgU3VuUlBDIFN1YnN5c3RlbSBDaGFuZ2VzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIEkgc2VlIHdlJ3JlIGRlYWxpbmcgd2l0aCBleHBvcnRlZCBmdW5jdGlvbnM6IGBycGNiX3JlZ2lzdGVyYCwgYHJwY2JfdjRfcmVnaXN0ZXJgLCBgc3ZjX3JlZ2lzdGVyYCwgYW5kIGBzdmNfZ2VuZXJpY19ycGNiaW5kX3NldGAuIFRoYXQncyBhIGNsZWFyIGluZGljYXRvciB0aGlzIGlzIHRvdWNoaW5nIHRoZSBjb3JlIG9mIHRoZSBSUEMgYmluZGluZyBwcm9jZXNzLiBUaGUgaW1wb3J0YW50IGNoYW5nZSBpcyB0aGUgYWRkaXRpb24gb2YgYSB0aW1lb3V0IHRvIGxvY2FsIHJwY2JpbmQgY2FsbHMsIGFuZCB0aGUgaGFuZGxpbmcgb2YgYC1FVElNRURPVVRgIHdpdGhpbiBgc3ZjX3JlZ2lzdGVyYCBhbmQgYHN2Y19nZW5lcmljX3JwY2JpbmRfc2V0YC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBub3QganVzdCBhIGNvc21ldGljIG9uZTsgaXQgZGlyZWN0bHkgaW1wYWN0cyBob3cgc2VydmljZXMgcmVnaXN0ZXIgYW5kIGludGVyYWN0IHdpdGggdGhlIHJwY2JpbmQgZGFlbW9uLiBHaXZlbiB0aGUgcG90ZW50aWFsIGZvciBzdWJ0bGUgdGltaW5nLXJlbGF0ZWQgaXNzdWVzIHdpdGggdGhlc2Uga2luZHMgb2YgY2hhbmdlcywgdGhpcyBpcyAqYWJzb2x1dGVseSogc29tZXRoaW5nIHRoYXQgbmVlZHMgZnV6emluZy4gVGhlIGNvbmZpZyBvcHRpb24gdGllZCB0byB0aGlzIGlzIGBTVU5SUENgLCBzbyBmaXJzdCBJJ2xsIHF1aWNrbHkgY2hlY2sgaXRzIGRlcGVuZGVuY2llcyB0byBnZXQgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgd2lkZXIgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTQ3MCwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxOToyNToxNi40NzYwMTU3NTlaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxMDcxODM3NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGVwZW5kcyBvbi4qU1VOUlBDXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL25mcy9uZnMtcmRtYS5yc3Q9MzU9dXNlIHdpdGggTkZTL1JETUEuXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL25mcy9uZnMtcmRtYS5yc3QtMTM0LSAgYXJlIHR1cm5lZCBvbi4gVGhlIE5GUy9SRE1BIGNsaWVudCBhbmQgc2VydmVyIGFyZSBjb25maWd1cmVkIHZpYSB0aGUgaGlkZGVuXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9uZnMvbmZzLXJkbWEucnN0OjEzNTogIFNVTlJQQ19YUFJUX1JETUEgY29uZmlnIG9wdGlvbiB0aGF0IGRlcGVuZHMgb24gU1VOUlBDIGFuZCBJTkZJTklCQU5ELiBUaGVcXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL25mcy9uZnMtcmRtYS5yc3QtMTM2LSAgdmFsdWUgb2YgU1VOUlBDX1hQUlRfUkRNQSB3aWxsIGJlOlxcbi0tXFxuZnMvbmZzL0tjb25maWc9MTk4PWNvbmZpZyBORlNfREVCVUdcXG5mcy9uZnMvS2NvbmZpZy0xOTktXFx0Ym9vbFxcbmZzL25mcy9LY29uZmlnOjIwMDpcXHRkZXBlbmRzIG9uIE5GU19GUyBcXHUwMDI2XFx1MDAyNiBTVU5SUENfREVCVUdcXG5mcy9uZnMvS2NvbmZpZy0yMDEtXFx0ZGVmYXVsdCB5XFxuLS1cXG5saWIvS2NvbmZpZy5kZWJ1Zz0yMTY5PWNvbmZpZyBGQUlMX1NVTlJQQ1xcbmxpYi9LY29uZmlnLmRlYnVnLTIxNzAtXFx0Ym9vbCBcXFwiRmF1bHQtaW5qZWN0aW9uIGNhcGFiaWxpdHkgZm9yIFN1blJQQ1xcXCJcXG5saWIvS2NvbmZpZy5kZWJ1ZzoyMTcxOlxcdGRlcGVuZHMgb24gRkFVTFRfSU5KRUNUSU9OX0RFQlVHX0ZTIFxcdTAwMjZcXHUwMDI2IFNVTlJQQ19ERUJVR1xcbmxpYi9LY29uZmlnLmRlYnVnLTIxNzItXFx0aGVscFxcbi0tXFxubmV0L0tjb25maWc9OTQ9Y29uZmlnIE5FVF9IQU5EU0hBS0VcXG5uZXQvS2NvbmZpZy05NS1cXHRib29sXFxubmV0L0tjb25maWc6OTY6XFx0ZGVwZW5kcyBvbiBTVU5SUEMgfHwgTlZNRV9UQVJHRVRfVENQIHx8IE5WTUVfVENQXFxubmV0L0tjb25maWctOTctXFx0ZGVmYXVsdCB5XFxuLS1cXG5uZXQvc3VucnBjL0tjb25maWc9MTE9Y29uZmlnIFNVTlJQQ19CQUNLQ0hBTk5FTFxcbm5ldC9zdW5ycGMvS2NvbmZpZy0xMi1cXHRib29sXFxubmV0L3N1bnJwYy9LY29uZmlnOjEzOlxcdGRlcGVuZHMgb24gU1VOUlBDXFxubmV0L3N1bnJwYy9LY29uZmlnLTE0LVxcbm5ldC9zdW5ycGMvS2NvbmZpZz0xNT1jb25maWcgU1VOUlBDX1NXQVBcXG5uZXQvc3VucnBjL0tjb25maWctMTYtXFx0Ym9vbFxcbm5ldC9zdW5ycGMvS2NvbmZpZzoxNzpcXHRkZXBlbmRzIG9uIFNVTlJQQ1xcbm5ldC9zdW5ycGMvS2NvbmZpZy0xOC1cXG5uZXQvc3VucnBjL0tjb25maWc9MTk9Y29uZmlnIFJQQ1NFQ19HU1NfS1JCNVxcbm5ldC9zdW5ycGMvS2NvbmZpZy0yMC1cXHR0cmlzdGF0ZSBcXFwiU2VjdXJlIFJQQzogS2VyYmVyb3MgViBtZWNoYW5pc21cXFwiXFxubmV0L3N1bnJwYy9LY29uZmlnOjIxOlxcdGRlcGVuZHMgb24gU1VOUlBDIFxcdTAwMjZcXHUwMDI2IENSWVBUT1xcbm5ldC9zdW5ycGMvS2NvbmZpZy0yMi1cXHRkZWZhdWx0IHlcXG4tLVxcbm5ldC9zdW5ycGMvS2NvbmZpZz0zNj1jb25maWcgU1VOUlBDX0RFQlVHXFxubmV0L3N1bnJwYy9LY29uZmlnLTM3LVxcdGJvb2wgXFxcIlJQQzogRW5hYmxlIGRwcmludGsgZGVidWdnaW5nXFxcIlxcbm5ldC9zdW5ycGMvS2NvbmZpZzozODpcXHRkZXBlbmRzIG9uIFNVTlJQQyBcXHUwMDI2XFx1MDAyNiBTWVNDVExcXG5uZXQvc3VucnBjL0tjb25maWctMzktXFx0c2VsZWN0IERFQlVHX0ZTXFxuLS1cXG5uZXQvc3VucnBjL0tjb25maWc9NTA9Y29uZmlnIFNVTlJQQ19ERUJVR19UUkFDRVxcbm5ldC9zdW5ycGMvS2NvbmZpZy01MS1cXHRib29sIFxcXCJSUEM6IFNlbmQgZGZwcmludGsoKSBvdXRwdXQgdG8gdGhlIHRyYWNlIGJ1ZmZlclxcXCJcXG5uZXQvc3VucnBjL0tjb25maWc6NTI6XFx0ZGVwZW5kcyBvbiBTVU5SUENfREVCVUcgXFx1MDAyNlxcdTAwMjYgVFJBQ0lOR1xcbm5ldC9zdW5ycGMvS2NvbmZpZy01My1cXHRkZWZhdWx0IG5cXG4tLVxcbm5ldC9zdW5ycGMvS2NvbmZpZz02ND1jb25maWcgU1VOUlBDX1hQUlRfUkRNQVxcbm5ldC9zdW5ycGMvS2NvbmZpZy02NS1cXHR0cmlzdGF0ZSBcXFwiUlBDLW92ZXItUkRNQSB0cmFuc3BvcnRcXFwiXFxubmV0L3N1bnJwYy9LY29uZmlnOjY2OlxcdGRlcGVuZHMgb24gU1VOUlBDIFxcdTAwMjZcXHUwMDI2IElORklOSUJBTkQgXFx1MDAyNlxcdTAwMjYgSU5GSU5JQkFORF9BRERSX1RSQU5TXFxubmV0L3N1bnJwYy9LY29uZmlnLTY3LVxcdGRlZmF1bHQgU1VOUlBDIFxcdTAwMjZcXHUwMDI2IElORklOSUJBTkRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTk6MjU6MTkuNTgzMjA1MTI4WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNzU4MDYyODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkFuYWx5emluZyB0aGUgU1VOUlBDIENvbmZpZ3VyYXRpb24gT3B0aW9uKipcblxuUmlnaHQsIHNvIGBTVU5SUENgLiBJdCBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIG9uIHRoZSBzdXJmYWNlIOKAkyBpdCdzIGEgdHJpc3RhdGUgb3B0aW9uIGFuZCBkb2Vzbid0IGV4cGxpY2l0bHkgcmVseSBvbiBhbnkgb3RoZXIgY29uZmlndXJhdGlvbnMsIGJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlLCBsZXQncyBqdXN0IG1ha2Ugc3VyZS4gQmVzdCB0byBlcnIgb24gdGhlIHNpZGUgb2YgY2F1dGlvbi4gTGV0IG1lIGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMuIEhtbSwgbGV0IG1lIGNvbnN1bHQgdGhlIGBuZXQvc3VucnBjL0tjb25maWdgIGZpbGUuIFRoYXQncyB0aGUgZGVmaW5pdGl2ZSBzb3VyY2UuIEkgbmVlZCB0byBnZXQgaW50byB0aGUgZGV0YWlscyBvZiB0aGUgZGVwZW5kZW5jaWVzIGJlZm9yZSBtYWtpbmcgYW55IGRlY2lzaW9ucy4gVGhhdCdzIHdoZXJlIEkgbmVlZCB0byBsb29rLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDY4MywiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE5OjI1OjIyLjk1OTAxMzQzOFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjE5MjEzODYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFNVTlJQQ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc3VucnBjL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3N1bnJwYy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxubmV0L3N1bnJwYy9LY29uZmlnOjI6Y29uZmlnIFNVTlJQQ1xcbm5ldC9zdW5ycGMvS2NvbmZpZy0zLVxcdHRyaXN0YXRlXFxuLS1cXG5uZXQvc3VucnBjL0tjb25maWctNS1cXG5uZXQvc3VucnBjL0tjb25maWc6Njpjb25maWcgU1VOUlBDX0dTU1xcbm5ldC9zdW5ycGMvS2NvbmZpZy03LVxcdHRyaXN0YXRlXFxuLS1cXG5uZXQvc3VucnBjL0tjb25maWctMTAtXFxubmV0L3N1bnJwYy9LY29uZmlnOjExOmNvbmZpZyBTVU5SUENfQkFDS0NIQU5ORUxcXG5uZXQvc3VucnBjL0tjb25maWctMTItXFx0Ym9vbFxcbi0tXFxubmV0L3N1bnJwYy9LY29uZmlnLTE0LVxcbm5ldC9zdW5ycGMvS2NvbmZpZzoxNTpjb25maWcgU1VOUlBDX1NXQVBcXG5uZXQvc3VucnBjL0tjb25maWctMTYtXFx0Ym9vbFxcbi0tXFxubmV0L3N1bnJwYy9LY29uZmlnPTE5PWNvbmZpZyBSUENTRUNfR1NTX0tSQjVcXG4tLVxcbm5ldC9zdW5ycGMvS2NvbmZpZy0zNS1cXG5uZXQvc3VucnBjL0tjb25maWc6MzY6Y29uZmlnIFNVTlJQQ19ERUJVR1xcbm5ldC9zdW5ycGMvS2NvbmZpZy0zNy1cXHRib29sIFxcXCJSUEM6IEVuYWJsZSBkcHJpbnRrIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9zdW5ycGMvS2NvbmZpZy00OS1cXG5uZXQvc3VucnBjL0tjb25maWc6NTA6Y29uZmlnIFNVTlJQQ19ERUJVR19UUkFDRVxcbm5ldC9zdW5ycGMvS2NvbmZpZy01MS1cXHRib29sIFxcXCJSUEM6IFNlbmQgZGZwcmludGsoKSBvdXRwdXQgdG8gdGhlIHRyYWNlIGJ1ZmZlclxcXCJcXG4tLVxcbm5ldC9zdW5ycGMvS2NvbmZpZy02My1cXG5uZXQvc3VucnBjL0tjb25maWc6NjQ6Y29uZmlnIFNVTlJQQ19YUFJUX1JETUFcXG5uZXQvc3VucnBjL0tjb25maWctNjUtXFx0dHJpc3RhdGUgXFxcIlJQQy1vdmVyLVJETUEgdHJhbnNwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxOToyNToyMy4wMjA5NDA1NTRaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjAwNzA1MDAzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBUcmlzdGF0ZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBPcHRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHRyaXN0YXRlIG9wdGlvbiwgYW5kIGltbWVkaWF0ZWx5IG15IG1pbmQganVtcHMgdG8gdGhlIGxhY2sgb2YgYW55IG9idmlvdXMgZGVwZW5kZW5jaWVzLiBUaGF0IGZlZWxzIGEgYml0IG9kZCwgZG9lc24ndCBpdD8gTW9zdCBvZiB0aGUgdGltZSwgd2hlbiBJIHNlZSBhIHRyaXN0YXRlIG9wdGlvbiBpbiB0aGUga2VybmVsIGNvbmZpZywgaXQncyB0aWVkIHRvIHNvbWV0aGluZyBlbHNlLCBhIHBhcmVudCBvcHRpb24gdGhhdCBnb3Zlcm5zIGl0cyBzZWxlY3Rpb24sIG9yIHBlcmhhcHMgYW5vdGhlciwgc2ltaWxhciBmdW5jdGlvbi5cblxuQnV0LCBoYW5nIG9uLCBob3cgKmlzKiB0aGlzIHRoaW5nIHNlbGVjdGVkPyBUaGF0J3MgdGhlIHJlYWwgcXVlc3Rpb24uIE15IGludHVpdGlvbiBpbW1lZGlhdGVseSBmbGFncyB0aGluZ3MgbGlrZSBgTkZTX0ZTYCBvciBgTkZTRGAgYXMgdGhlIHVzdWFsIHN1c3BlY3RzIHdoZW4gYFNVTlJQQ2AgaXMgaW52b2x2ZWQuIE15IHRyYWluIG9mIHRob3VnaHQgYWx3YXlzIHRlbmRzIHRvd2FyZCB0aGUgdHJpZWQtYW5kLXRydWUgcGF0aHdheXMgdGhhdCBJJ20gZmFtaWxpYXIgd2l0aC4gXG5cbkkga25vdyBJIGNhbid0IHJlbHkgb24gaW50dWl0aW9uIGFsb25lLCB0aW1lIHRvIGhlYWQgc3RyYWlnaHQgdG8gdGhlIHNvdXJjZS4gVGhlIG5leHQgdGhpbmcgSSdtIGdvaW5nIHRvIGRvIGlzIGRpdmUgaW50byBgZnMvbmZzL0tjb25maWdgLiBUaGF0J3Mgd2hlcmUgSSdsbCBmaW5kIHRoZSBkZWZpbml0aXZlIGFuc3dlci4gSSdsbCBzY291ciB0aGF0IGZpbGUgZm9yIGRlcGVuZGVuY2llcywgbWVudSBlbnRyaWVzLCBhbmQgYW55IGNsdWVzIGFib3V0IGhvdyB0aGlzIG9wdGlvbiBnZXRzIHRyaWdnZXJlZC4gVGhhdCBLY29uZmlnIGZpbGUgaXMgdGhlIHVsdGltYXRlIGF1dGhvcml0eSBpbiB0aGlzIGNhc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMjkzLCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTk6MjU6MjkuMDI3OTkzNjk3WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjAyMDgwNDg0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNlbGVjdCBTVU5SUENcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL0tjb25maWc9MzgyPWNvbmZpZyBORlNfQ09NTU9OX0xPQ0FMSU9fU1VQUE9SVFxcbi0tXFxuZnMvS2NvbmZpZy0zODYtXFx0ZGVmYXVsdCBtIGlmIE5GU0Q9bSBcXHUwMDI2XFx1MDAyNiBORlNfRlM9bVxcbmZzL0tjb25maWc6Mzg3OlxcdHNlbGVjdCBTVU5SUENcXG5mcy9LY29uZmlnLTM4OC1cXG4tLVxcbmZzL25mcy9LY29uZmlnPTI9Y29uZmlnIE5GU19GU1xcbi0tXFxuZnMvbmZzL0tjb25maWctNi1cXHRzZWxlY3QgTE9DS0RcXG5mcy9uZnMvS2NvbmZpZzo3OlxcdHNlbGVjdCBTVU5SUENcXG5mcy9uZnMvS2NvbmZpZy04LVxcdHNlbGVjdCBORlNfQ09NTU9OXFxuLS1cXG5mcy9uZnMvS2NvbmZpZz03Nz1jb25maWcgTkZTX1Y0XFxuLS1cXG5mcy9uZnMvS2NvbmZpZy04MC1cXHRzZWxlY3QgS0VZU1xcbmZzL25mcy9LY29uZmlnOjgxOlxcdHNlbGVjdCBTVU5SUENfQkFDS0NIQU5ORUxcXG5mcy9uZnMvS2NvbmZpZy04Mi1cXHRoZWxwXFxuLS1cXG5mcy9uZnMvS2NvbmZpZz05Mj1jb25maWcgTkZTX1NXQVBcXG4tLVxcbmZzL25mcy9LY29uZmlnLTk1LVxcdGRlcGVuZHMgb24gTkZTX0ZTIFxcdTAwMjZcXHUwMDI2IFNXQVBcXG5mcy9uZnMvS2NvbmZpZzo5NjpcXHRzZWxlY3QgU1VOUlBDX1NXQVBcXG5mcy9uZnMvS2NvbmZpZy05Ny1cXHRoZWxwXFxuLS1cXG5mcy9uZnNkL0tjb25maWc9Mj1jb25maWcgTkZTRFxcbi0tXFxuZnMvbmZzZC9LY29uZmlnLTExLVxcdHNlbGVjdCBMT0NLRFxcbmZzL25mc2QvS2NvbmZpZzoxMjpcXHRzZWxlY3QgU1VOUlBDXFxuZnMvbmZzZC9LY29uZmlnLTEzLVxcdHNlbGVjdCBFWFBPUlRGU1xcbi0tXFxubmV0L3N1bnJwYy9LY29uZmlnPTE5PWNvbmZpZyBSUENTRUNfR1NTX0tSQjVcXG4tLVxcbm5ldC9zdW5ycGMvS2NvbmZpZy0yMi1cXHRkZWZhdWx0IHlcXG5uZXQvc3VucnBjL0tjb25maWc6MjM6XFx0c2VsZWN0IFNVTlJQQ19HU1NcXG5uZXQvc3VucnBjL0tjb25maWctMjQtXFx0c2VsZWN0IENSWVBUT19LUkI1XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE5OjI1OjMxLjIzMDA3OTg4MVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MDQwMDIxODExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IENvbmZpZ3VyYXRpb24gRGVjaXNpb25zIGZvciBORlMgU3VwcG9ydCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyBORlMgaXMgY29uZmlndXJlZCwgYW5kIGl0J3MgY2xlYXIgdGhhdCBib3RoIGBORlNfRlNgIGFuZCBgTkZTRGAgZGVwZW5kIG9uIGBTVU5SUENgLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIGluY2x1ZGUgYm90aCBgTkZTX0ZTYCBhbmQgYE5GU0RgIGluIHRoZSBFbmFibGVDb25maWdzLCBvciBwZXJoYXBzIGp1c3QgYFNVTlJQQ2AuIEFmdGVyIGEgYml0IG1vcmUgdGhvdWdodCwgSSByZWFsaXplIHRoYXQgaWYgYFNVTlJQQ2AgaXMgYSB0cmlzdGF0ZSwgYW5kIGl0IHVzdWFsbHkgaXMsIHRoZW4gZW5hYmxpbmcgaXQgZGlyZWN0bHkgc2hvdWxkIGJlIHN1ZmZpY2llbnQuIEhvd2V2ZXIsIEkgd2FudCB0byBiZSAqYWJzb2x1dGVseSogY2VydGFpbiB0aGF0IGBORlNfRlNgIGFuZCBgTkZTRGAgYXJlIGNvbXBpbGVkIGFuZCByZWFjaGFibGUsIGFzIHRoZXkncmUgdGhlIGNvcmUgY29tcG9uZW50cyBoZXJlLiBUaGVyZWZvcmUsIEknbSBnb2luZyB0byBleHBsaWNpdGx5IGFkZCBgU1VOUlBDYCwgYE5GU19GU2AsIGFuZCBgTkZTRGAgdG8gdGhlIGNvbmZpZ3VyYXRpb25zLiBUaGF0IHNob3VsZCBwcm92aWRlIHRoZSBtb3N0IHJvYnVzdCBhbmQgZXhwbGljaXQgZGVwZW5kZW5jeSBoYW5kbGluZy5cblxuTm93LCByZWdhcmRpbmcgdGhlIGZvY3VzIHN5bWJvbHMgZm9yIHZlcmlmaWNhdGlvbiwgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGVzZSBrZXkgZnVuY3Rpb25zIGFyZSBhdmFpbGFibGUgZm9yIGluc3BlY3Rpb246IGBzdmNfcmVnaXN0ZXJgLCBgc3ZjX2dlbmVyaWNfcnBjYmluZF9zZXRgLCBgcnBjYl9yZWdpc3RlcmAsIGBycGNiX3Y0X3JlZ2lzdGVyYCwgYW5kIGBycGNiX2NyZWF0ZV9sb2NhbGAuXG5cbkp1c3QgdG8gYmUgY29tcGxldGVseSB0aG9yb3VnaCwgSSdsbCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0IGBycGNiX2NyZWF0ZV9sb2NhbGAgaXMgZXhwb3J0ZWQgdG8gZW5zdXJlIGl0IGlzIGFjY2Vzc2libGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMDU0LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjA5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE5OjI1OjM3LjI3MDEwNDQ3MloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODIxMzcyNzQsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKnJwY2JfY3JlYXRlX2xvY2FsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zdW5ycGMvcnBjYl9jbG50LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE5OjI1OjM3LjM1MjI1MDMyNloiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDU3NDI0MjA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGlubmVyIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBEYXRhJ3MgQWNjZXNzaWJpbGl0eSoqXG5cbkFscmlnaHQsIHNvIHRoZSBkYXRhIGlzbid0ICpleHBsaWNpdGx5KiBleHBvcnRlZCwgbWVhbmluZyBpdCdzIG5vdCBiZWluZyBwcmVzZW50ZWQgZGlyZWN0bHkgYXMgYSBzdGFuZGFyZCwgcmVhZGlseSBhdmFpbGFibGUgZGF0YSBzdHJlYW0uIEJ1dCwgYW5kIHRoaXMgaXMgY3J1Y2lhbCwgaXQgYWxzbyBpc24ndCBcInN0YXRpY1wiLiBUaGF0IG1lYW5zIGl0J3MgbGlrZWx5IGJlaW5nIGdlbmVyYXRlZCBvciB1cGRhdGVkIGR5bmFtaWNhbGx5LCBhbmQgdGhlcmVmb3JlICphY2Nlc3NpYmxlKiBpbiBzb21lIGZhc2hpb24sIGV2ZW4gaWYgaW5kaXJlY3RseS4gVGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHBpbnBvaW50ICpob3cqIHRoYXQgYWNjZXNzaWJpbGl0eSBpcyBhY2hpZXZlZC4gTGV0J3MgZGVsdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIHRoZSBgcnBjYl9yZWdpc3RlcmAgZnVuY3Rpb24uIElmIHRoYXQncyBleHBvcnRlZCwgaXQncyBhIHN0cm9uZyBpbmRpY2F0b3IgdGhhdCB0aGlzIHByb2Nlc3MgaXMgcGFydGljaXBhdGluZyBpbiBhIHJlbW90ZSBwcm9jZWR1cmUgY2FsbCBhbmQgdGhhdCBjb3VsZCBiZSBhIHNpZ25pZmljYW50IGNsdWUgdG8gaG93IHRoaXMgd29ya3MsIHdoaWNoIHdpbGwgdWx0aW1hdGVseSBndWlkZSBtZSB0byB0aGUgdWx0aW1hdGUgc291cmNlIG9mIHRydXRoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjU5NiwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE5OjI1OjQwLjgwOTY3NzM4WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDU0NDM2NiwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qcnBjYl9yZWdpc3RlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc3VucnBjL3JwY2JfY2xudC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxOToyNTo0MC44NzAyMjc4MTZaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE4MzgwNDQyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGF0IGNvZGU6XG5cbioqRmluZGluZyB0aGUgRXhwb3J0ZWQgU3ltYm9scyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaW5kIG91dCB3aHkgdGhlc2UgYXJlbid0IHNob3dpbmcgdXAgYXMgZXhwb3J0ZWQuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGNoZWNrIHdoZXJlIHRoZXNlIHN5bWJvbHMgYXJlIGRlZmluZWQsIGFuZCBzcGVjaWZpY2FsbHksIGhvdyB0aGV5IGFyZSBtYWRlIGF2YWlsYWJsZSB0byBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsLiBTaW5jZSB0aGVzZSBhcmUgbGlrZWx5IFJQQy1yZWxhdGVkLCBgbmV0L3N1bnJwYy9ycGNiX2NsbnQuY2AgaXMgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgbG9va2luZywgZ2l2ZW4gdGhhdCdzIHdoZXJlIHRoZSBjbGllbnQtc2lkZSBSUEMgY29kZSByZXNpZGVzLiBNeSBzcGVjaWZpYyBmb2N1cz8gSSdtIGdvaW5nIHRvIHNjYW4gdGhhdCBmaWxlIGZvciB0aGUgYEVYUE9SVF9TWU1CT0xgIG1hY3JvLiBUaGF0J3MgdGhlIGNydWNpYWwga2V5d29yZCwgdGhlIHNpZ25hbCB0byB0aGUgbGlua2VyIHRoYXQgdGhlc2Ugc3ltYm9scyBhcmUgbWVhbnQgdG8gYmUgYXZhaWxhYmxlIGV4dGVybmFsbHkuIElmIHRoZXkncmUgbm90IHRoZXJlLCBJIGtub3cgSSd2ZSBmb3VuZCBteSBwcm9ibGVtIGFuZCBjYW4gYWRqdXN0IGFzIHJlcXVpcmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjg2MywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE5OjI1OjQ1LjA1NDAzNDg3OVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAzNzg3NjkyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0xcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3N1bnJwYy9ycGNiX2NsbnQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc3VucnBjL3JwY2JfY2xudC5jPTY3Nz12b2lkIHJwY2JfZ2V0cG9ydF9hc3luYyhzdHJ1Y3QgcnBjX3Rhc2sgKnRhc2spXFxuLS1cXG5uZXQvc3VucnBjL3JwY2JfY2xudC5jLTc5Ny19XFxubmV0L3N1bnJwYy9ycGNiX2NsbnQuYzo3OTg6RVhQT1JUX1NZTUJPTF9HUEwocnBjYl9nZXRwb3J0X2FzeW5jKTtcXG5uZXQvc3VucnBjL3JwY2JfY2xudC5jLTc5OS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTk6MjU6NDUuMTU3ODY1MzExWiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4MjQxNDQxOTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIHRoZSBSUEMgQmluZGluZ3MqKlxuXG5Pa2F5LCBzbyB0aGUgaW5pdGlhbCBmb2N1cyBpcyBvbiB0aGlzIGBycGNiX2dldHBvcnRfYXN5bmNgIGZ1bmN0aW9uIOKAkyB0aGF0J3MgdGhlIG9ubHkgb25lIGV4cGxpY2l0bHkgZXhwb3J0ZWQsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBCdXQgaG9sZCBvbiwgSSdtIHNlZWluZyB0aGF0IGBzdmNfcmVnaXN0ZXJgIGFuZCBgc3ZjX2dlbmVyaWNfcnBjYmluZF9zZXRgIGFyZSBhbHNvIGF2YWlsYWJsZS4gVGhhdCdzIHVuZXhwZWN0ZWQuIFdhaXQgYSBzZWNvbmQuLi4gSSByZWNhbGwgYHJwY2JfcmVnaXN0ZXJgIGJlaW5nIHVzZWQgd2l0aGluIHRoZSBgc3VucnBjYCBtb2R1bGUgaXRzZWxmLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIGhvdyB0aGVzZSBwaWVjZXMgZml0IHRvZ2V0aGVyLiBNeSBuZXh0IHN0ZXAgaXMgZGVmaW5pdGVseSB0byBkaXZlIGludG8gYG5ldC9zdW5ycGMvc3ZjLmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYHN2Y19yZWdpc3RlcmAsIGBzdmNfZ2VuZXJpY19ycGNiaW5kX3NldGAsIGFuZCBgcnBjYl9yZWdpc3RlcmAuIEl0IHNlZW1zIGxpa2UgdGhvc2UgdGhyZWUgbWlnaHQgYmUgdXNlZCBzb21laG93IGluIGNvbmp1bmN0aW9uIHRvIHJlZ2lzdGVyLCBhbmQgc2V0IHRoZSBiaW5kaW5ncyBpbiBhIGdlbmVyaWMgbWFubmVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgZ29pbmcgb24gYmVoaW5kIHRoZSBzY2VuZXMgd2l0aCB0aGlzIFJQQyBiaW5kaW5nIHByb2Nlc3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMjI2LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTk6MjU6NDguOTgyMDExNjJaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczOTQzMzk0LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MLipzdmNfcmVnaXN0ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3N1bnJwYy9zdmMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTk6MjU6NDkuMDU1OTc0NzE0WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU2NjMzMzQwODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipBIEtlcm5lbCBNb2R1bGUgRmxhZ2dlZCBmb3IgUmV2aWV3KipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4uLiBJJ20gcmV2aWV3aW5nIHRoaXMgY29kZSBkaWZmIGFuZCB0aGF0IGBFWFBPUlRfU1lNQk9MX0dQTChzdmNfZ2VuZXJpY19ycGNiaW5kX3NldCk7YCBjYXVnaHQgbXkgZXllIGltbWVkaWF0ZWx5LiBOb3csIHRoYXQncyBub3Qgc29tZXRoaW5nIHlvdSBzZWUganVzdCBhbnl3aGVyZS4gVGhlIGBFWFBPUlRfU1lNQk9MX0dQTGAgbWFjcm8gaXMgc3BlY2lmaWNhbGx5IGZvciBleHBvcnRpbmcgc3ltYm9scyB0aGF0IGFyZSBsaWNlbnNlZCB1bmRlciB0aGUgR1BMLCBtZWFuaW5nIHRoaXMgZnVuY3Rpb24sIGBzdmNfZ2VuZXJpY19ycGNiaW5kX3NldGAsIGlzIGxpa2VseSBpbnRlbmRlZCBmb3IgdXNlIGJ5IEdQTC1saWNlbnNlZCBrZXJuZWwgbW9kdWxlcy4gSXQncyBhIGtleSBwaWVjZSBvZiB0aGUgUlBDIGJpbmRpbmcgZnVuY3Rpb25hbGl0eSwgbWFraW5nIG1lIHRoaW5rIGl04oCZcyBwYXJ0IG9mIGEgY29yZSBuZXR3b3JrIHNlcnZpY2UuIFNvIHRoaXMgY2hhbmdlIG11c3QgYmUgcmVsYXRlZCB0byBzb21lIHNpZ25pZmljYW50IFJQQyB1cGRhdGUuIEkgbmVlZCB0byBkaWcgaW50byBob3cgdGhpcyBmdW5jdGlvbiBpcyB1c2VkIGFuZCB3aHkgaXQgbmVlZHMgdG8gYmUgbWFkZSBhdmFpbGFibGUuIEkgYWxzbyBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgbGljZW5zaW5nIGlzIGFwcHJvcHJpYXRlIGFuZCB0aGF0IGl0cyBpbmNsdXNpb24gZG9lc24ndCBpbnRyb2R1Y2UgYW55IGNvbXBhdGliaWxpdHkgaXNzdWVzIHdpdGggZXhpc3RpbmcgbW9kdWxlcy4gVGltZSB0byBkaXZlIGRlZXBlciBhbmQgc2VlIHdoYXQgdGhlIHdob2xlIGNoYW5nZSBpcyBhYm91dCFcblxuXG4iLCJJbnB1dFRva2VucyI6MTM1NjIsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxOToyNTo1NC43MTkzMTI2NzJaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5MDc1MTc2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKnN2Y19nZW5lcmljX3JwY2JpbmRfc2V0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zdW5ycGMvc3ZjLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3N1bnJwYy9zdmMuYz0xMTgyPWludCBzdmNfZ2VuZXJpY19ycGNiaW5kX3NldChzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvc3VucnBjL3N2Yy5jLTEyMTQtfVxcbm5ldC9zdW5ycGMvc3ZjLmM6MTIxNTpFWFBPUlRfU1lNQk9MX0dQTChzdmNfZ2VuZXJpY19ycGNiaW5kX3NldCk7XFxubmV0L3N1bnJwYy9zdmMuYy0xMjE2LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxOToyNTo1NC43NzgzOTE3ODhaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI0NDk1MDE1NTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgYEVYUE9SVF9TWU1CT0xgIGluIGBuZXQvc3VucnBjL3N2Yy5jYCoqXG5cbk9rYXksIEknbSB0aGlua2luZyBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gd2hlcmUgZXhhY3RseSBgRVhQT1JUX1NZTUJPTGAgaXMgdXNlZCB3aXRoaW4gdGhlIFN1blJQQyBzZXJ2aWNlIGNvZGUuIEkgc3BlY2lmaWNhbGx5IHdhbnQgdG8gcmV2aXNpdCBgbmV0L3N1bnJwYy9zdmMuY2AuIEl0J3MgYSBrZXkgZmlsZSwgc28gaXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gdW5kZXJzdGFuZCB0aGUgYnJvYWRlciBpbXBsaWNhdGlvbnMgYW5kIGNvbnRleHQuIEkgc3VzcGVjdCB0aGVyZSdzIGEgcmVhc29uIEknbSBmb2N1c2luZyBoZXJlLCBhbmQgaXQncyBwcm9iYWJseSByZWxhdGVkIHRvIHN5bWJvbCB2aXNpYmlsaXR5IG9yIGV4dGVybmFsIG1vZHVsZSBpbnRlcmFjdGlvbnMuIEknbGwgbmVlZCB0byByZW1lbWJlciB0aGUga2VybmVsJ3MgbW9kdWxlIGxvYWRpbmcgbWVjaGFuaXNtIGFuZCBob3cgYEVYUE9SVF9TWU1CT0xgIHBsYXlzIGEgcm9sZSBpbiBtYWtpbmcgZnVuY3Rpb25zIG9yIHZhcmlhYmxlcyBhY2Nlc3NpYmxlIG91dHNpZGUgdGhlIG1vZHVsZSBpbiB3aGljaCB0aGV5J3JlIGRlZmluZWQuIFRpbWUgdG8gZ28gZGlnZ2luZyB0aHJvdWdoIHRoZSBzb3VyY2UgY29kZSFcblxuXG4iLCJJbnB1dFRva2VucyI6MTM5NTAsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxOToyNjowNy4yMjc4OTc0OTNaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxMDQ1NzA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0xcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3N1bnJwYy9zdmMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc3VucnBjL3N2Yy5jPTExND1pbnQgc3VucnBjX3NldF9wb29sX21vZGUoY29uc3QgY2hhciAqdmFsKVxcbi0tXFxubmV0L3N1bnJwYy9zdmMuYy0xMTctfVxcbm5ldC9zdW5ycGMvc3ZjLmM6MTE4OkVYUE9SVF9TWU1CT0woc3VucnBjX3NldF9wb29sX21vZGUpO1xcbm5ldC9zdW5ycGMvc3ZjLmMtMTE5LVxcbi0tXFxubmV0L3N1bnJwYy9zdmMuYz0xMzA9c3VucnBjX2dldF9wb29sX21vZGUoY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSlcXG4tLVxcbm5ldC9zdW5ycGMvc3ZjLmMtMTQ3LX1cXG5uZXQvc3VucnBjL3N2Yy5jOjE0ODpFWFBPUlRfU1lNQk9MKHN1bnJwY19nZXRfcG9vbF9tb2RlKTtcXG5uZXQvc3VucnBjL3N2Yy5jLTE0OS1cXG4tLVxcbm5ldC9zdW5ycGMvc3ZjLmM9NDU4PWludCBzdmNfYmluZChzdHJ1Y3Qgc3ZjX3NlcnYgKnNlcnYsIHN0cnVjdCBuZXQgKm5ldClcXG4tLVxcbm5ldC9zdW5ycGMvc3ZjLmMtNDYzLX1cXG5uZXQvc3VucnBjL3N2Yy5jOjQ2NDpFWFBPUlRfU1lNQk9MX0dQTChzdmNfYmluZCk7XFxubmV0L3N1bnJwYy9zdmMuYy00NjUtXFxuLS1cXG5uZXQvc3VucnBjL3N2Yy5jPTU1OT1zdHJ1Y3Qgc3ZjX3NlcnYgKnN2Y19jcmVhdGUoc3RydWN0IHN2Y19wcm9ncmFtICpwcm9nLCB1bnNpZ25lZCBpbnQgYnVmc2l6ZSxcXG4tLVxcbm5ldC9zdW5ycGMvc3ZjLmMtNTYzLX1cXG5uZXQvc3VucnBjL3N2Yy5jOjU2NDpFWFBPUlRfU1lNQk9MX0dQTChzdmNfY3JlYXRlKTtcXG5uZXQvc3VucnBjL3N2Yy5jLTU2NS1cXG4tLVxcbm5ldC9zdW5ycGMvc3ZjLmM9NTc2PXN0cnVjdCBzdmNfc2VydiAqc3ZjX2NyZWF0ZV9wb29sZWQoc3RydWN0IHN2Y19wcm9ncmFtICpwcm9nLFxcbi0tXFxubmV0L3N1bnJwYy9zdmMuYy01OTMtfVxcbm5ldC9zdW5ycGMvc3ZjLmM6NTk0OkVYUE9SVF9TWU1CT0xfR1BMKHN2Y19jcmVhdGVfcG9vbGVkKTtcXG5uZXQvc3VucnBjL3N2Yy5jLTU5NS1cXG4tLVxcbm5ldC9zdW5ycGMvc3ZjLmM9NjAxPXN2Y19kZXN0cm95KHN0cnVjdCBzdmNfc2VydiAqKnNlcnZwKVxcbi0tXFxubmV0L3N1bnJwYy9zdmMuYy02MzMtfVxcbm5ldC9zdW5ycGMvc3ZjLmM6NjM0OkVYUE9SVF9TWU1CT0xfR1BMKHN2Y19kZXN0cm95KTtcXG5uZXQvc3VucnBjL3N2Yy5jLTYzNS1cXG4tLVxcbm5ldC9zdW5ycGMvc3ZjLmM9NzYxPXZvaWQgc3ZjX3Bvb2xfd2FrZV9pZGxlX3RocmVhZChzdHJ1Y3Qgc3ZjX3Bvb2wgKnBvb2wpXFxuLS1cXG5uZXQvc3VucnBjL3N2Yy5jLTc4My19XFxubmV0L3N1bnJwYy9zdmMuYzo3ODQ6RVhQT1JUX1NZTUJPTF9HUEwoc3ZjX3Bvb2xfd2FrZV9pZGxlX3RocmVhZCk7XFxubmV0L3N1bnJwYy9zdmMuYy03ODUtXFxuLS1cXG5uZXQvc3VucnBjL3N2Yy5jPTc5Nj1pbnQgc3ZjX25ld190aHJlYWQoc3RydWN0IHN2Y19zZXJ2ICpzZXJ2LCBzdHJ1Y3Qgc3ZjX3Bvb2wgKnBvb2wpXFxuLS1cXG5uZXQvc3VucnBjL3N2Yy5jLTgyOS19XFxubmV0L3N1bnJwYy9zdmMuYzo4MzA6RVhQT1JUX1NZTUJPTF9HUEwoc3ZjX25ld190aHJlYWQpO1xcbm5ldC9zdW5ycGMvc3ZjLmMtODMxLVxcbi0tXFxubmV0L3N1bnJwYy9zdmMuYz04NzY9c3ZjX3NldF9wb29sX3RocmVhZHMoc3RydWN0IHN2Y19zZXJ2ICpzZXJ2LCBzdHJ1Y3Qgc3ZjX3Bvb2wgKnBvb2wsXFxuLS1cXG5uZXQvc3VucnBjL3N2Yy5jLTkxMi19XFxubmV0L3N1bnJwYy9zdmMuYzo5MTM6RVhQT1JUX1NZTUJPTF9HUEwoc3ZjX3NldF9wb29sX3RocmVhZHMpO1xcbm5ldC9zdW5ycGMvc3ZjLmMtOTE0LVxcbi0tXFxubmV0L3N1bnJwYy9zdmMuYz05MzM9c3ZjX3NldF9udW1fdGhyZWFkcyhzdHJ1Y3Qgc3ZjX3NlcnYgKnNlcnYsIHVuc2lnbmVkIGludCBtaW5fdGhyZWFkcyxcXG4tLVxcbm5ldC9zdW5ycGMvc3ZjLmMtOTU0LX1cXG5uZXQvc3VucnBjL3N2Yy5jOjk1NTpFWFBPUlRfU1lNQk9MX0dQTChzdmNfc2V0X251bV90aHJlYWRzKTtcXG5uZXQvc3VucnBjL3N2Yy5jLTk1Ni1cXG4tLVxcbm5ldC9zdW5ycGMvc3ZjLmM9OTY5PWJvb2wgc3ZjX3Jxc3RfcmVwbGFjZV9wYWdlKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsIHN0cnVjdCBwYWdlICpwYWdlKVxcbi0tXFxubmV0L3N1bnJwYy9zdmMuYy05ODUtfVxcbm5ldC9zdW5ycGMvc3ZjLmM6OTg2OkVYUE9SVF9TWU1CT0xfR1BMKHN2Y19ycXN0X3JlcGxhY2VfcGFnZSk7XFxubmV0L3N1bnJwYy9zdmMuYy05ODctXFxuLS1cXG5uZXQvc3VucnBjL3N2Yy5jPTEwMjc9c3ZjX2V4aXRfdGhyZWFkKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHApXFxuLS1cXG5uZXQvc3VucnBjL3N2Yy5jLTEwNDEtfVxcbm5ldC9zdW5ycGMvc3ZjLmM6MTA0MjpFWFBPUlRfU1lNQk9MX0dQTChzdmNfZXhpdF90aHJlYWQpO1xcbm5ldC9zdW5ycGMvc3ZjLmMtMTA0My1cXG4tLVxcbm5ldC9zdW5ycGMvc3ZjLmM9MTE4Mj1pbnQgc3ZjX2dlbmVyaWNfcnBjYmluZF9zZXQoc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L3N1bnJwYy9zdmMuYy0xMjE0LX1cXG5uZXQvc3VucnBjL3N2Yy5jOjEyMTU6RVhQT1JUX1NZTUJPTF9HUEwoc3ZjX2dlbmVyaWNfcnBjYmluZF9zZXQpO1xcbm5ldC9zdW5ycGMvc3ZjLmMtMTIxNi1cXG4tLVxcbm5ldC9zdW5ycGMvc3ZjLmM9MTM0ND1zdmNfZ2VuZXJpY19pbml0X3JlcXVlc3Qoc3RydWN0IHN2Y19ycXN0ICpycXN0cCxcXG4tLVxcbm5ldC9zdW5ycGMvc3ZjLmMtMTM5MS19XFxubmV0L3N1bnJwYy9zdmMuYzoxMzkyOkVYUE9SVF9TWU1CT0xfR1BMKHN2Y19nZW5lcmljX2luaXRfcmVxdWVzdCk7XFxubmV0L3N1bnJwYy9zdmMuYy0xMzkzLVxcbi0tXFxubmV0L3N1bnJwYy9zdmMuYz0xNzYxPXUzMiBzdmNfbWF4X3BheWxvYWQoY29uc3Qgc3RydWN0IHN2Y19ycXN0ICpycXN0cClcXG4tLVxcbm5ldC9zdW5ycGMvc3ZjLmMtMTc2OC19XFxubmV0L3N1bnJwYy9zdmMuYzoxNzY5OkVYUE9SVF9TWU1CT0xfR1BMKHN2Y19tYXhfcGF5bG9hZCk7XFxubmV0L3N1bnJwYy9zdmMuYy0xNzcwLVxcbi0tXFxubmV0L3N1bnJwYy9zdmMuYz0xNzk1PWludCBzdmNfZW5jb2RlX3Jlc3VsdF9wYXlsb2FkKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsIHVuc2lnbmVkIGludCBvZmZzZXQsXFxuLS1cXG5uZXQvc3VucnBjL3N2Yy5jLTE4MDAtfVxcbm5ldC9zdW5ycGMvc3ZjLmM6MTgwMTpFWFBPUlRfU1lNQk9MX0dQTChzdmNfZW5jb2RlX3Jlc3VsdF9wYXlsb2FkKTtcXG5uZXQvc3VucnBjL3N2Yy5jLTE4MDItXFxuLS1cXG5uZXQvc3VucnBjL3N2Yy5jPTE4MTQ9Y2hhciAqc3ZjX2ZpbGxfc3ltbGlua19wYXRobmFtZShzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCBzdHJ1Y3Qga3ZlYyAqZmlyc3QsXFxuLS1cXG5uZXQvc3VucnBjL3N2Yy5jLTE4NTAtfVxcbm5ldC9zdW5ycGMvc3ZjLmM6MTg1MTpFWFBPUlRfU1lNQk9MX0dQTChzdmNfZmlsbF9zeW1saW5rX3BhdGhuYW1lKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTk6MjY6MDcuMjg4OTUwNjQ5WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NzUyODQzNDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGVidWdnaW5nIGEgTWlzc2luZyBFeHBvcnQqKlxuXG5Pa2F5LCBzbyBJJ20gZW5jb3VudGVyaW5nIGEgcHJvYmxlbSDigJMgYHN2Y19yZWdpc3RlcmAgaXNuJ3Qgc2hvd2luZyB1cCBhcyBleHBvcnRlZC4gVGhhdCdzIGEgYml0IG9kZC4gTXkgZmlyc3QgaW5zdGluY3QsIGdpdmVuIGl0cyBsaWtlbHkgY29ubmVjdGlvbiB0byBuZXR3b3JrIHNlcnZpY2VzLCBpcyB0byBkb3VibGUtY2hlY2sgdGhlIGBuZXQvc3VucnBjYCBzdWJzeXN0ZW0uIFNwZWNpZmljYWxseSwgSSdsbCBkcmlsbCBkb3duIHRvIGBuZXQvc3VucnBjL3N2Yy5jYC4gVGhhdCBmaWxlIGlzIHRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gYmVnaW4gbXkgaW52ZXN0aWdhdGlvbiBmb3IgdGhlIGRlZmluaXRpb24gYW5kIGV4cG9ydCBvZiBgc3ZjX3JlZ2lzdGVyYC4gTGV0J3Mgc2VlIHdoYXQncyBhY3R1YWxseSBpbiB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU3NzksIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxOToyNjoxMC45NjQyMzcxNThaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkwODU3OTkzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN2Y19yZWdpc3RlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc3VucnBjL3N2Yy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zdW5ycGMvc3ZjLmM9MTEwMj1zdGF0aWMgaW50IF9fc3ZjX3JwY2JfcmVnaXN0ZXI2KHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgdTMyIHByb2dyYW0sXFxuLS1cXG5uZXQvc3VucnBjL3N2Yy5jLTExNDUtICovXFxubmV0L3N1bnJwYy9zdmMuYzoxMTQ2OnN0YXRpYyBpbnQgX19zdmNfcmVnaXN0ZXIoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpwcm9nbmFtZSxcXG5uZXQvc3VucnBjL3N2Yy5jLTExNDctXFx0XFx0XFx0ICBjb25zdCB1MzIgcHJvZ3JhbSwgY29uc3QgdTMyIHZlcnNpb24sXFxuLS1cXG5uZXQvc3VucnBjL3N2Yy5jLTExNjUtXFxubmV0L3N1bnJwYy9zdmMuYzoxMTY2OlxcdHRyYWNlX3N2Y19yZWdpc3Rlcihwcm9nbmFtZSwgdmVyc2lvbiwgZmFtaWx5LCBwcm90b2NvbCwgcG9ydCwgZXJyb3IpO1xcbm5ldC9zdW5ycGMvc3ZjLmMtMTE2Ny1cXHRyZXR1cm4gZXJyb3I7XFxuLS1cXG5uZXQvc3VucnBjL3N2Yy5jPTExNzE9aW50IHN2Y19ycGNiaW5kX3NldF92ZXJzaW9uKHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9zdW5ycGMvc3ZjLmMtMTE3Ni17XFxubmV0L3N1bnJwYy9zdmMuYzoxMTc3OlxcdHJldHVybiBfX3N2Y19yZWdpc3RlcihuZXQsIHByb2dwLVxcdTAwM2VwZ19uYW1lLCBwcm9ncC1cXHUwMDNlcGdfcHJvZyxcXG5uZXQvc3VucnBjL3N2Yy5jLTExNzgtXFx0XFx0XFx0XFx0dmVyc2lvbiwgZmFtaWx5LCBwcm90bywgcG9ydCk7XFxuLS1cXG5uZXQvc3VucnBjL3N2Yy5jPTEyMTU9RVhQT1JUX1NZTUJPTF9HUEwoc3ZjX2dlbmVyaWNfcnBjYmluZF9zZXQpO1xcbi0tXFxubmV0L3N1bnJwYy9zdmMuYy0xMjE3LS8qKlxcbm5ldC9zdW5ycGMvc3ZjLmM6MTIxODogKiBzdmNfcmVnaXN0ZXIgLSByZWdpc3RlciBhbiBSUEMgc2VydmljZSB3aXRoIHRoZSBsb2NhbCBwb3J0bWFwcGVyXFxubmV0L3N1bnJwYy9zdmMuYy0xMjE5LSAqIEBzZXJ2OiBzdmNfc2VydiBzdHJ1Y3QgZm9yIHRoZSBzZXJ2aWNlIHRvIHJlZ2lzdGVyXFxuLS1cXG5uZXQvc3VucnBjL3N2Yy5jLTEyMjYtICovXFxubmV0L3N1bnJwYy9zdmMuYzoxMjI3OmludCBzdmNfcmVnaXN0ZXIoY29uc3Qgc3RydWN0IHN2Y19zZXJ2ICpzZXJ2LCBzdHJ1Y3QgbmV0ICpuZXQsXFxubmV0L3N1bnJwYy9zdmMuYy0xMjI4LVxcdFxcdCBjb25zdCBpbnQgZmFtaWx5LCBjb25zdCB1bnNpZ25lZCBzaG9ydCBwcm90byxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTk6MjY6MTEuMDU1MTAxODEyWiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExNDg5MjQ4NzgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6XG5cbioqSW52ZXN0aWdhdGluZyBgc3ZjX3JlZ2lzdGVyYCBpbiBgbmV0L3N1bnJwYy9zdmMuY2AqKlxuXG5Pa2F5LCBJIG5lZWQgdG8gdmVyaWZ5IHNvbWV0aGluZyByZWxhdGVkIHRvIHRoZSBgc3ZjX3JlZ2lzdGVyYCBmdW5jdGlvbiwgbGlrZWx5IHdpdGhpbiB0aGUgY29udGV4dCBvZiBSUEMgc2VydmljZXMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBuYXZpZ2F0ZSB0byB0aGUgYG5ldC9zdW5ycGMvc3ZjLmNgIGZpbGUgd2l0aGluIHRoZSBrZXJuZWwgc291cmNlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgZnVuY3Rpb24gaXMgZXhwb3J0ZWQsIHdoaWNoIG1lYW5zIGl0J3MgaW50ZW5kZWQgdG8gYmUgYWNjZXNzaWJsZSBvdXRzaWRlIG9mIHRoZSBpbW1lZGlhdGUgbW9kdWxlIG9yIGZpbGUuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgZnVuY3Rpb24gZGVmaW5pdGlvbiBpbiBgc3ZjLmNgIHRvIGNvbmZpcm0gaXQncyBkZWNsYXJlZCB3aXRoIGBFWFBPUlRfU1lNQk9MYCBvciBhIHNpbWlsYXIgbWVjaGFuaXNtLCBtYWtpbmcgaXQgdmlzaWJsZSB0byBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsLiBUaGlzIGlzIGEgcHJlbGltaW5hcnkgY2hlY2sgYmVmb3JlIGludmVzdGlnYXRpbmcgZnVydGhlciwgZGVwZW5kaW5nIG9uIHRoZSBjb250ZXh0IG9mIHRoZSBpc3N1ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY0NjUsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxOToyNjoyMi41NDQzNTMyMjVaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMDM3Mjc3MiwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qc3ZjX3JlZ2lzdGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zdW5ycGMvc3ZjLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE5OjI2OjIyLjY2NDczNjcwN1oiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNDkxNDgwMzY0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLCBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgYHN2Y19yZWdpc3RlcmAgaXMgYmVpbmcgaGFuZGxlZC4gSG9sZCBvbiBhIHNlY29uZCwgSSB0aG91Z2h0IEkgaGFkIGFscmVhZHkgZ3JlcHBlZCBmb3IgYEVYUE9SVF9TWU1CT0xgIGluIGBuZXQvc3VucnBjL3N2Yy5jYCBzcGVjaWZpY2FsbHksIGFuZCBpdCBkaWRuJ3QgdHVybiB1cCBhbnkgcmVzdWx0cy4gVGhhdCdzIG9kZC4gU28sIGl0J3MgZWl0aGVyIGRlZmluZWQgYW5kIGV4cG9ydGVkIHNvbWV3aGVyZSAqZWxzZSogaW4gdGhlIHByb2plY3QsIG9yIG1heWJlIGl0J3Mgbm90IGFjdHVhbGx5IGV4cG9ydGVkIGF0IGFsbC4gVGltZSB0byBzaGlmdCBnZWFycy4gTGV0J3Mgbm90IG1ha2UgYW55IGFzc3VtcHRpb25zLiBJJ2xsIHRha2UgdGhlIGRpcmVjdCBhcHByb2FjaC4gSSdsbCBpbW1lZGlhdGVseSBjaGVjayBgaW5jbHVkZS9saW51eC9zdW5ycGMvc3ZjLmhgIGZvciB0aGUgZGVjbGFyYXRpb24gb2YgYHN2Y19yZWdpc3RlcmAuIFRoYXQgaGVhZGVyIGlzIHRoZSBvYnZpb3VzIHBsYWNlIHRvIGZpbmQgdGhlIHB1YmxpYyBpbnRlcmZhY2UsIGlmIGl0IGV4aXN0cywgc28gdGhhdCdzIHRoZSBwbGFjZSB0byBzdGFydC4gTGV0J3Mgc2VlIHdoYXQncyBpbiB0aGVyZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjcxMywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE5OjI2OjM3LjU3OTU0MjY1N1oiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTM3OTU5MTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3ZjX3JlZ2lzdGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbGludXgvc3VucnBjL3N2Yy5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvc3VucnBjL3N2Yy5oPTQ3ND12b2lkXFx0XFx0ICAgc3ZjX3Byb2Nlc3NfYmMoc3RydWN0IHJwY19ycXN0ICpyZXEsIHN0cnVjdCBzdmNfcnFzdCAqcnFzdHApO1xcbmluY2x1ZGUvbGludXgvc3VucnBjL3N2Yy5oOjQ3NTppbnRcXHRcXHQgICBzdmNfcmVnaXN0ZXIoY29uc3Qgc3RydWN0IHN2Y19zZXJ2ICosIHN0cnVjdCBuZXQgKiwgY29uc3QgaW50LFxcbmluY2x1ZGUvbGludXgvc3VucnBjL3N2Yy5oLTQ3Ni1cXHRcXHRcXHRcXHRjb25zdCB1bnNpZ25lZCBzaG9ydCwgY29uc3QgdW5zaWduZWQgc2hvcnQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxOToyNjozNy42NzMzNDI1WiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE0MDgyNTczMTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgUlBDIFJlZ2lzdHJhdGlvbiBpbiB0aGUgTGludXggS2VybmVsKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIFJQQyByZWdpc3RyYXRpb24gd2l0aGluIHRoZSBrZXJuZWwuIE15IHN0YXJ0aW5nIHBvaW50IGlzIHRoZSBkZWNsYXJhdGlvbiBvZiB0aGUgZnVuY3Rpb24gSSdtIGludGVyZXN0ZWQgaW4sIHdoaWNoIGlzIGNsZWFybHkgZGVmaW5lZCBpbiBgaW5jbHVkZS9saW51eC9zdW5ycGMvc3ZjLmhgLiBUaGUgZmFjdCB0aGF0IGl0J3MgaW4gYSBoZWFkZXIgZmlsZSBpbXBsaWVzIHRoYXQgdGhpcyBpc24ndCBhIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggY2hhbmdlcyBob3cgSSBhcHByb2FjaCB0aGUgYW5hbHlzaXMuIE15IGluaXRpYWwgZm9jdXMgd2lsbCBiZSB0aGUgcmVnaXN0cmF0aW9uIGZ1bmN0aW9ucyBhbmQgdGhlaXIgYXNzb2NpYXRlZCBjYWxscy5cblxuVGhlcmVmb3JlLCB0aGUga2V5IHN5bWJvbHMgSSBuZWVkIHRvIGV4YW1pbmUgYXJlIGBzdmNfcmVnaXN0ZXJgLCBgc3ZjX2dlbmVyaWNfcnBjYmluZF9zZXRgLCBgcnBjYl9yZWdpc3RlcmAsIGBycGNiX3Y0X3JlZ2lzdGVyYCBhbmQgYHJwY2JfY3JlYXRlX2xvY2FsYC4gVGhlIGZpcnN0IGZvdXIgc3VnZ2VzdCB0aGF0IHRoZXJlIGlzIGEgcmFuZ2Ugb2YgcmVnaXN0ZXIgY2FsbHMsIGFuZCB0aGUgZmluYWwgc3ltYm9sIG1pZ2h0IGJlIHRoZSBjcmVhdGlvbiBvZiBzb21ldGhpbmcgdXNlZCBsb2NhbGx5LiBcblxuTm93LCBJJ2xsIHF1aWNrbHkgdmVyaWZ5IHRoZSBsb2NhdGlvbiBvZiBvbmUgb2YgdGhlc2Uga2V5IGZ1bmN0aW9ucyB0byBhc3Nlc3MgaG93IGZhciBJJ3ZlIGNvbWUuIEknbGwgY2hlY2sgd2hldGhlciBgcnBjYl9yZWdpc3RlcmAgaXMgZGVmaW5lZCB3aXRoaW4gdGhlIGBpbmNsdWRlL2xpbnV4L3N1bnJwYy9gIGRpcmVjdG9yeS4gVGhhdCdsbCBnaXZlIG1lIGEgY2xlYXJlciBwaWN0dXJlIG9mIHRoZSBjb2RlJ3Mgc3RydWN0dXJlIGFuZCByZWxhdGlvbnNoaXBzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzExNSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxOToyNjo1MS43NTU5MTgxWiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDgwNjEwMTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicnBjYl9yZWdpc3RlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL2xpbnV4L3N1bnJwYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9zdW5ycGMvY2xudC5oPTIwMT12b2lkXFx0XFx0cnBjYl9wdXRfbG9jYWwoc3RydWN0IG5ldCAqKTtcXG5pbmNsdWRlL2xpbnV4L3N1bnJwYy9jbG50Lmg6MjAyOmludFxcdFxcdHJwY2JfcmVnaXN0ZXIoc3RydWN0IG5ldCAqLCB1MzIsIHUzMiwgaW50LCB1bnNpZ25lZCBzaG9ydCk7XFxuaW5jbHVkZS9saW51eC9zdW5ycGMvY2xudC5oLTIwMy1pbnRcXHRcXHRycGNiX3Y0X3JlZ2lzdGVyKHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgdTMyIHByb2dyYW0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDE5OjI2OjUxLjg2Mzk4NDk3MloiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODQ2NTc3OTg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUuLi4gdGhlIGNvZGUgSSdtIGxvb2tpbmcgZm9yIGlzIGRlZmluaXRlbHkgaW4gYGluY2x1ZGUvbGludXgvc3VucnBjL2NsbnQuaGAuIFRoYXQgbWFrZXMgc2Vuc2U7IGNsaWVudC1zaWRlIFJQQyBzdHVmZiBpcyB1c3VhbGx5IG9yZ2FuaXplZCB0aGVyZS4gQW5kIHNpbmNlIHRoZXkgYXJlIG5vbi1zdGF0aWMgZnVuY3Rpb25zLCB0aGF0IHRlbGxzIG1lIHRoZXNlIGZ1bmN0aW9ucyBhcmUgbGlrZWx5IGludGVuZGVkIHRvIGJlIHVzZWQgZXh0ZXJuYWxseSwgYW5kIG5vdCBsaW1pdGVkIHRvIHRoYXQgc3BlY2lmaWMgc291cmNlIGZpbGUsIHdoaWNoIHdvdWxkIGJlIGltcG9ydGFudCBmb3IgbWUgdG8gdW5kZXJzdGFuZCBpbiBteSB3b3JrLiBOb3csIGxldCdzIGNoZWNrIGBycGNiX2NyZWF0ZV9sb2NhbGAgaW4gdGhlIHN1bnJwYyBpbmNsdWRlLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0IHBpZWNlIGJldHRlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc2MDksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxOToyNjo1NS43MTA1NjY1OTlaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxNDI0MDI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJwY2JfY3JlYXRlX2xvY2FsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbGludXgvc3VucnBjL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3N1bnJwYy9jbG50Lmg9MTk3PXN0cnVjdCBycGNfeHBydFxcdCpycGNfdGFza19nZXRfeHBydChzdHJ1Y3QgcnBjX2NsbnQgKmNsbnQsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3N1bnJwYy9jbG50LmgtMTk5LVxcbmluY2x1ZGUvbGludXgvc3VucnBjL2NsbnQuaDoyMDA6aW50XFx0XFx0cnBjYl9jcmVhdGVfbG9jYWwoc3RydWN0IG5ldCAqKTtcXG5pbmNsdWRlL2xpbnV4L3N1bnJwYy9jbG50LmgtMjAxLXZvaWRcXHRcXHRycGNiX3B1dF9sb2NhbChzdHJ1Y3QgbmV0ICopO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxOToyNjo1NS43NzE5OTYxNDRaIiwiU2VxIjo0NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzY0OTQ5MTc0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFJQQyBUaW1lb3V0IFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBjb25maXJtZWQgdGhlIHBhdGNoIGlzIHByZXNlbnQuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gdGhlIHJlbGV2YW50IHN5bWJvbHMgYW5kIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gRnJvbSB3aGF0IEkgc2VlLCB0aGUgcHJpbWFyeSBmb2N1cyBpcyBvbiB0aGVzZSBzeW1ib2xzOiBgc3ZjX3JlZ2lzdGVyYCwgYHN2Y19nZW5lcmljX3JwY2JpbmRfc2V0YCwgYHJwY2JfcmVnaXN0ZXJgLCBgcnBjYl92NF9yZWdpc3RlcmAsIGFuZCBgcnBjYl9jcmVhdGVfbG9jYWxgLiBUaG9zZSBhcmUgdGhlIGVudHJ5IHBvaW50cywgc28gdG8gc3BlYWsuXG5cbk5vdywgcmVnYXJkaW5nIHRoZSBjb25maWcgb3B0aW9ucywgaXQgc2VlbXMgd2UncmUgZGVhbGluZyB3aXRoIGBTVU5SUENgLCBgTkZTX0ZTYCwgYW5kIGBORlNEYC4gTXkgaW5zdGluY3QgaXMgdG8gZGV0ZXJtaW5lIGlmIHdlIGFic29sdXRlbHkgKm5lZWQqIGJvdGggYE5GU19GU2AgYW5kIGBORlNEYCwgb3IgaWYganVzdCBlbmFibGluZyBgU1VOUlBDYCB3aWxsIHN1ZmZpY2UgZm9yIGNvbXBpbGluZyB0aGUgbmVjZXNzYXJ5IG1vZHVsZXMuIEkga25vdyBgU1VOUlBDYCBhbG9uZSBpcyBlbm91Z2ggdG8gYnJpbmcgaW4gdGhlIGBuZXQvc3VucnBjL2AgY29kZS4gSG93ZXZlciwgdG8gKnRyaWdnZXIqIHRoZSBuZXcgZnVuY3Rpb25hbGl0eSwgd2hpY2ggSSB1bmRlcnN0YW5kIGlzIGEgdGltZW91dCBmb3IgbG9jYWwgYHJwY2JpbmRgIGNhbGxzLCB3ZSdsbCBwcm9iYWJseSBuZWVkIGVpdGhlciBgTkZTX0ZTYCBvciBgTkZTRGAgdG8gYWN0dWFsbHkgY3JlYXRlIHRob3NlIFJQQyBzZXJ2aWNlcy4gU28sIGp1c3QgdG8gYmUgc3VyZSwgSSB3aWxsIGluY2x1ZGUgYm90aCBgTkZTX0ZTYCBhbmQgYE5GU0RgLlxuXG5MZXQncyBkbyBhIHF1aWNrIHN3ZWVwIGZvciBhbnkgb3RoZXIgcmVsZXZhbnQgY29uZmlnIG9wdGlvbnMuIEhtbSwgYFNVTlJQQ19ERUJVR2AgbWlnaHQgYmUgaGVscGZ1bCBmb3IgZGVidWdnaW5nIGxhdGVyLCBidXQgaXQncyBub3QgZXNzZW50aWFsIGZvciBqdXN0IHRyaWdnZXJpbmcgdGhlIGZ1bmN0aW9uYWwgY2hhbmdlIGl0c2VsZi5cblxuT2theSwgYmFjayB0byB0aGUgcGF0Y2guIEl0J3MgYWRkaW5nIGEgdGltZW91dCB0byB0aGUgbG9jYWwgYHJwY2JpbmRgIGNsaWVudCwgYW5kIGhhbmRsaW5nIGAtRVRJTUVET1VUYCBlcnJvcnMgaW4gYHN2Y19yZWdpc3RlcmAgYW5kIGBzdmNfZ2VuZXJpY19ycGNiaW5kX3NldGAuIFRoaXMgaXMgYSAqZnVuY3Rpb25hbCBjaGFuZ2UqIHdpdGhpbiB0aGUgYHN1bnJwY2Agc3Vic3lzdGVtLiBDcml0aWNhbGx5LCByZWdpc3RlcmluZyBhbiBSUEMgc2VydmljZSB3aWxsIHRyaWdnZXIgaXQuIEFuZCB0aGF0J3MgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHRocm91Z2ggTkZTIG9yIG90aGVyIFJQQyBtZWNoYW5pc21zLiBJIGFtIGNlcnRhaW4gdGhhdCB0aGlzIGlzIGEgcGF0Y2ggd2Ugd2lsbCB3YW50IHRvIHRlc3QgYWdncmVzc2l2ZWx5IHVzaW5nIGZ1enppbmcuXG5cbk15IGFuYWx5c2lzIGFsaWducyB3aXRoIHRoZSBKU09OIG91dHB1dDogdGhlIHBhdGNoIGlzIGluZGVlZCB3b3J0aCBmdXp6aW5nLiBUaGUga2V5IHN5bWJvbHMsIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb25zLCBhbmQgdGhlIGNvcmUgcmVhc29uaW5nIGFyZSBhbGwgd2VsbC1kb2N1bWVudGVkIGFuZCBwcm92aWRlIGNvbmZpZGVuY2UgaW4gdGhpcyBhc3Nlc3NtZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzk0MywiT3V0cHV0VG9rZW5zIjoxNTMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTk6Mjc6MDMuNDIxNDkyMTExWiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQyMjIxNzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTVU5SUENcIixcbiAgICBcIk5GU19GU1wiLFxuICAgIFwiTkZTRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInN2Y19yZWdpc3RlclwiLFxuICAgIFwic3ZjX2dlbmVyaWNfcnBjYmluZF9zZXRcIixcbiAgICBcInJwY2JfcmVnaXN0ZXJcIixcbiAgICBcInJwY2JfdjRfcmVnaXN0ZXJcIixcbiAgICBcInJwY2JfY3JlYXRlX2xvY2FsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIHRpbWVvdXQgZm9yIGxvY2FsIHJwY2JpbmQgY2FsbHMgYW5kIGhhbmRsZXMgLUVUSU1FRE9VVCBpbiBzdmNfcmVnaXN0ZXIgYW5kIHN2Y19nZW5lcmljX3JwY2JpbmRfc2V0LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIHN1bnJwYyBzdWJzeXN0ZW0gdGhhdCBjYW4gYmUgdHJpZ2dlcmVkIGJ5IHJlZ2lzdGVyaW5nIFJQQyBzZXJ2aWNlcywgd2hpY2ggaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBORlMgb3Igb3RoZXIgUlBDIG1lY2hhbmlzbXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU1VOUlBDXCIsXG4gICAgXCJORlNfRlNcIixcbiAgICBcIk5GU0RcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzdmNfcmVnaXN0ZXJcIixcbiAgICBcInN2Y19nZW5lcmljX3JwY2JpbmRfc2V0XCIsXG4gICAgXCJycGNiX3JlZ2lzdGVyXCIsXG4gICAgXCJycGNiX3Y0X3JlZ2lzdGVyXCIsXG4gICAgXCJycGNiX2NyZWF0ZV9sb2NhbFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSB0aW1lb3V0IGZvciBsb2NhbCBycGNiaW5kIGNhbGxzIGFuZCBoYW5kbGVzIC1FVElNRURPVVQgaW4gc3ZjX3JlZ2lzdGVyIGFuZCBzdmNfZ2VuZXJpY19ycGNiaW5kX3NldC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBzdW5ycGMgc3Vic3lzdGVtIHRoYXQgY2FuIGJlIHRyaWdnZXJlZCBieSByZWdpc3RlcmluZyBSUEMgc2VydmljZXMsIHdoaWNoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgTkZTIG9yIG90aGVyIFJQQyBtZWNoYW5pc21zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxOToyNzowMy41NjM3MjEwNjFaIiwiU2VxIjo0NywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMjg1NTAxMDU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTk6Mjc6MDMuNTY0MjQyODExWiIsIlNlcSI6NDgsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjExMjg0OTczMzg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aW1lb3V0IGhhbmRsaW5nIGZvciBsb2NhbCBSUEMgYmluZCBjYWxscyBpbiB0aGUgc3VucnBjIHN1YnN5c3RlbS4gSXQgaW50cm9kdWNlcyBhIHN0YXRpYyBjb25zdGFudCBgcnBjYl9sb2NhbF90aW1lb3V0YCBzdHJ1Y3R1cmUsIGFkZHMgdGltZW91dC1yZWxhdGVkIGZsYWdzIChgUlBDX1RBU0tfU09GVCB8IFJQQ19UQVNLX1RJTUVPVVRgKSB0byBgcnBjYl9yZWdpc3Rlcl9jYWxsYCwgYW5kIGFkZHMgbG9naWMgdG8gcHJvcGFnYXRlIGAtRVRJTUVET1VUYCBlcnJvcnMgaW4gYHN2Y19nZW5lcmljX3JwY2JpbmRfc2V0YCBhbmQgYHN2Y19yZWdpc3RlcmAuIFRoZXNlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBkbyBub3QgZXhwb3NlIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZSwgYW5kIGRvIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlIG9yIHJhY2UgY29uZGl0aW9ucyBkdWUgdG8gdGltZW91dHMpIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBvciBMT0NLREVQLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDU5YjY4ODRjZjUxOWMwNDExYTAyZDdmNmQ5YTA4ZjBkN2U4MTA2ODhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyA3IDE5OjIzOjU5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9ycGNiX2NsbnQuYyBiL25ldC9zdW5ycGMvcnBjYl9jbG50LmNcbmluZGV4IDZhYTM3MjE4OGM4NmEuLjQwOTRmMzI1Nzg3NmQgMTAwNjQ0XG4tLS0gYS9uZXQvc3VucnBjL3JwY2JfY2xudC5jXG4rKysgYi9uZXQvc3VucnBjL3JwY2JfY2xudC5jXG5AQCAtMjIxLDYgKzIyMSwxMiBAQCBzdGF0aWMgdm9pZCBycGNiX3NldF9sb2NhbChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBycGNfY2xudCAqY2xudCxcbiAjIGRlZmluZSBTVU5fTEVOKHB0cikgKG9mZnNldG9mKHN0cnVjdCBzb2NrYWRkcl91biwgc3VuX3BhdGgpXHRcdFxcXG4gXHRcdCAgICAgICsgMSArIHN0cmxlbigocHRyKS1cdTAwM2VzdW5fcGF0aCArIDEpKVxuIFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcnBjX3RpbWVvdXQgcnBjYl9sb2NhbF90aW1lb3V0ID0ge1xuK1x0LnRvX2luaXR2YWwgPSAoSFogLyAxMCkgPyA6IDEsXG4rXHQudG9fbWF4dmFsID0gKEhaIC8gMTApID8gOiAxLFxuK1x0LnRvX3JldHJpZXMgPSAwLFxuK307XG4rXG4gLypcbiAgKiBSZXR1cm5zIHplcm8gb24gc3VjY2Vzcywgb3RoZXJ3aXNlIGEgbmVnYXRpdmUgZXJybm8gdmFsdWVcbiAgKiBpcyByZXR1cm5lZC5cbkBAIC0yMzgsNiArMjQ0LDcgQEAgc3RhdGljIGludCBycGNiX2NyZWF0ZV9hZl9sb2NhbChzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRcdC52ZXJzaW9uXHQ9IFJQQ0JWRVJTXzIsXG4gXHRcdC5hdXRoZmxhdm9yXHQ9IFJQQ19BVVRIX05VTEwsXG4gXHRcdC5jcmVkXHRcdD0gY3VycmVudF9jcmVkKCksXG4rXHRcdC50aW1lb3V0XHQ9IFx1MDAyNnJwY2JfbG9jYWxfdGltZW91dCxcbiBcdFx0LypcbiBcdFx0ICogV2UgdHVybiBvZmYgdGhlIGlkbGUgdGltZW91dCB0byBwcmV2ZW50IHRoZSBrZXJuZWxcbiBcdFx0ICogZnJvbSBhdXRvbWF0aWNhbGx5IGRpc2Nvbm5lY3RpbmcgdGhlIHNvY2tldC5cbkBAIC0zMTIsNiArMzE5LDcgQEAgc3RhdGljIGludCBycGNiX2NyZWF0ZV9sb2NhbF9uZXQoc3RydWN0IG5ldCAqbmV0KVxuIFx0XHQudmVyc2lvblx0PSBSUENCVkVSU18yLFxuIFx0XHQuYXV0aGZsYXZvclx0PSBSUENfQVVUSF9VTklYLFxuIFx0XHQuY3JlZFx0XHQ9IGN1cnJlbnRfY3JlZCgpLFxuK1x0XHQudGltZW91dFx0PSBcdTAwMjZycGNiX2xvY2FsX3RpbWVvdXQsXG4gXHRcdC5mbGFnc1x0XHQ9IFJQQ19DTE5UX0NSRUFURV9OT1BJTkcsXG4gXHR9O1xuIFx0c3RydWN0IHJwY19jbG50ICpjbG50LCAqY2xudDQ7XG5AQCAtNDAyLDExICs0MTAsMTEgQEAgc3RhdGljIHN0cnVjdCBycGNfY2xudCAqcnBjYl9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpub2RlbmFtZSxcbiBcbiBzdGF0aWMgaW50IHJwY2JfcmVnaXN0ZXJfY2FsbChzdHJ1Y3Qgc3VucnBjX25ldCAqc24sIHN0cnVjdCBycGNfY2xudCAqY2xudCwgc3RydWN0IHJwY19tZXNzYWdlICptc2csIGJvb2wgaXNfc2V0KVxuIHtcbi1cdGludCBmbGFncyA9IFJQQ19UQVNLX05PQ09OTkVDVDtcbitcdGludCBmbGFncyA9IFJQQ19UQVNLX05PQ09OTkVDVCB8IFJQQ19UQVNLX1NPRlQgfCBSUENfVEFTS19USU1FT1VUO1xuIFx0aW50IGVycm9yLCByZXN1bHQgPSAwO1xuIFxuIFx0aWYgKGlzX3NldCB8fCAhc24tXHUwMDNlcnBjYl9pc19hZl9sb2NhbClcbi1cdFx0ZmxhZ3MgPSBSUENfVEFTS19TT0ZUQ09OTjtcbitcdFx0ZmxhZ3MgfD0gUlBDX1RBU0tfU09GVENPTk47XG4gXHRtc2ctXHUwMDNlcnBjX3Jlc3AgPSBcdTAwMjZyZXN1bHQ7XG4gXG4gXHRlcnJvciA9IHJwY19jYWxsX3N5bmMoY2xudCwgbXNnLCBmbGFncyk7XG5kaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9zdmMuYyBiL25ldC9zdW5ycGMvc3ZjLmNcbmluZGV4IGFlOWVjNGJmMzRmNzIuLjUzOWRkZDA2NDY3ZGYgMTAwNjQ0XG4tLS0gYS9uZXQvc3VucnBjL3N2Yy5jXG4rKysgYi9uZXQvc3VucnBjL3N2Yy5jXG5AQCAtMTIwNyw2ICsxMjA3LDkgQEAgaW50IHN2Y19nZW5lcmljX3JwY2JpbmRfc2V0KHN0cnVjdCBuZXQgKm5ldCxcbiBcdGVycm9yID0gc3ZjX3JwY2JpbmRfc2V0X3ZlcnNpb24obmV0LCBwcm9ncCwgdmVyc2lvbixcbiBcdFx0XHRcdFx0ZmFtaWx5LCBwcm90bywgcG9ydCk7XG4gXG4rXHRpZiAoZXJyb3IgPT0gLUVUSU1FRE9VVClcbitcdFx0cmV0dXJuIGVycm9yO1xuK1xuIFx0cmV0dXJuICh2ZXJzLVx1MDAzZXZzX3JwY2Jfb3B0bmwpID8gMCA6IGVycm9yO1xuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChzdmNfZ2VuZXJpY19ycGNiaW5kX3NldCk7XG5AQCAtMTI0Myw2ICsxMjQ2LDggQEAgaW50IHN2Y19yZWdpc3Rlcihjb25zdCBzdHJ1Y3Qgc3ZjX3NlcnYgKnNlcnYsIHN0cnVjdCBuZXQgKm5ldCxcbiBcdFx0XHRcdHByaW50ayhLRVJOX1dBUk5JTkcgXCJzdmM6IGZhaWxlZCB0byByZWdpc3RlciBcIlxuIFx0XHRcdFx0XHRcIiVzdiV1IFJQQyBzZXJ2aWNlIChlcnJubyAlZCkuXFxuXCIsXG4gXHRcdFx0XHRcdHByb2dwLVx1MDAzZXBnX25hbWUsIGksIC1lcnJvcik7XG4rXHRcdFx0XHRpZiAoZXJyb3IgPT0gLUVUSU1FRE9VVClcbitcdFx0XHRcdFx0cmV0dXJuIGVycm9yO1xuIFx0XHRcdFx0YnJlYWs7XG4gXHRcdFx0fVxuIFx0XHR9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxOToyNzowMy41NjQyNDM5MjFaIiwiU2VxIjo0OSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTEyODQ5NDI5MzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgU3VuUlBDIFRpbWVvdXQgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGp1c3QgcmV2aWV3ZWQgdGhpcyBwYXRjaC4gSXQgbG9va3MgbGlrZSB3ZSdyZSB0aWdodGVuaW5nIHVwIHRpbWVvdXQgaGFuZGxpbmcgd2l0aGluIHRoZSBTdW5SUEMgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gdGhlIGBycGNiYCBjbGllbnQgYW5kIHNlcnZlciBjb21wb25lbnRzLiBUaGUgY2hhbmdlcyBhcmUgY29uY2VudHJhdGVkIGluIGBuZXQvc3VucnBjL3JwY2JfY2xudC5jYCBhbmQgYG5ldC9zdW5ycGMvc3ZjLmNgLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGlzIGlzIGEgcmVsYXRpdmVseSBzdHJhaWdodGZvcndhcmQgbW9kaWZpY2F0aW9uLiBXZSdyZSBpbnRyb2R1Y2luZyBhIGBycGNiX2xvY2FsX3RpbWVvdXRgIHN0cnVjdHVyZSBhbmQgdXNpbmcgaXQgdG8gY29uZmlndXJlIHRpbWVvdXRzIHdoZW4gY3JlYXRpbmcgbG9jYWwgUlBDIGJpbmQgY29ubmVjdGlvbnMuIFRoZSBgcnBjYl9sb2NhbF90aW1lb3V0YCBpdHNlbGYgYXBwZWFycyB0byBiZSBhIGZ1bGx5IGluaXRpYWxpemVkLCBgc3RhdGljIGNvbnN0YCBzdHJ1Y3R1cmUsIHNvIHRoYXQncyBnb29kIOKAkyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRoZXJlLiBJJ2xsIGRvdWJsZS1jaGVjayBpdC4gWWVwLCBpdCdzIGRlZmluZWQgYW5kIGluaXRpYWxpemVkIGFzIGV4cGVjdGVkLlxuXG5UaGUgY29yZSBvZiB0aGUgcGF0Y2ggc2VlbXMgdG8gcmV2b2x2ZSBhcm91bmQgc2V0dGluZyBhbmQgcHJvcGFnYXRpbmcgdGltZW91dCBmbGFncy4gU3BlY2lmaWNhbGx5LCBgcnBjYl9yZWdpc3Rlcl9jYWxsYCBpcyBiZWluZyB1cGRhdGVkIHRvIGluY2x1ZGUgYFJQQ19UQVNLX1NPRlQgfCBSUENfVEFTS19USU1FT1VUYCBpbiB0aGUgZmxhZ3MuIFRoaXMgaXMgdGhlbiBjb21iaW5lZCB3aXRoIG90aGVyIGZsYWdzIHN1Y2ggYXMgYFJQQ19UQVNLX1NPRlRDT05OYCBpZiBhcHByb3ByaWF0ZSwgc28gdGhhdCBzZWVtcyBzZW5zaWJsZS5cblxuT24gdGhlIHNlcnZlciBzaWRlLCBgc3ZjX2dlbmVyaWNfcnBjYmluZF9zZXRgIGFuZCBgc3ZjX3JlZ2lzdGVyYCBhcmUgbW9kaWZpZWQgdG8gZXhwbGljaXRseSByZXR1cm4gYC1FVElNRURPVVRgIGlmIHRoYXQgZXJyb3IgY29kZSBpcyBlbmNvdW50ZXJlZC4gVGhpcyBtYWtlcyBpdCBhIGJpdCBtb3JlIGV4cGxpY2l0LCBhbGxvd2luZyB0aGUgdXBwZXIgbGF5ZXJzIHRvIGNvcnJlY3RseSBoYW5kbGUgdGhlIHRpbWVvdXQuXG5cbkkndmUgY2FyZWZ1bGx5IGNvbnNpZGVyZWQgdGhlIHBvdGVudGlhbCBzZWN1cml0eSBpbXBsaWNhdGlvbnMsIGFuZCBJIGRvbid0IHNlZSBhbnkgaW1tZWRpYXRlIHJlZCBmbGFncy4gVGhlcmUncyBubyBpbnRyb2R1Y3Rpb24gb2YgbmV3LCB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgbm8gZXhwb3N1cmUgb2YgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmVzIHRvIHVzZXIgc3BhY2UsIGFuZCBubyBjb21wbGV4IGRhdGEgYWxsb2NhdGlvbiBwYXR0ZXJucyB0aGF0IGNvdWxkIGxlYWQgdG8gbWVtb3J5IGNvcnJ1cHRpb24gdnVsbmVyYWJpbGl0aWVzLiBUaGlzIGlzIGltcG9ydGFudCB0byBub3RlIHNpbmNlIG15IGdvYWwgaXMgdG8gZW5zdXJlIHRoaXMgcGF0Y2ggaXMgYXMgc2VjdXJlIGFzIHBvc3NpYmxlLlxuXG5UaGUgdGltZW91dCBpcyBmdWxseSBpbml0aWFsaXplZCBhbmQgc2hvdWxkIHdvcmsgd2VsbCBpbiB0aGUgUlBDIGNvbnRleHQuIFRoZSBlcnJvciBjb2RlIG9mIHRoZSBgc3ZjX2dlbmVyaWNfcnBjYmluZF9zZXRgIGFuZCBgc3ZjX3JlZ2lzdGVyYCB3ZXJlIGNvcnJlY3RseSBoYW5kbGVkIGFuZCBwYXNzZWQgZnVydGhlciB1cCB0aGUgY2hhaW4uXG5cbkNvbnNpZGVyaW5nIHRoZSBuYXR1cmUgb2YgdGhlIGNoYW5nZXMsIEknbSBjb25maWRlbnQgdGhhdCBLQVNBTiBhbmQgb3RoZXIgc3RhbmRhcmQga2VybmVsIGJ1ZyBkZXRlY3RvcnMgKGxpa2UgS01TQU4pIHdpbGwgYmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgc3VidGxlIGlzc3Vlcywgc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zIHRoYXQgbWlnaHQgYXJpc2UgZnJvbSBidWdneSB0aW1lb3V0IGhhbmRsaW5nLiBCYXNlZCBvbiB0aGlzIGFuYWx5c2lzLCBJJ20gY29tZm9ydGFibGUgc2V0dGluZyBgTmVlZHNLTVNBTj1mYWxzZWAgZm9yIHRoaXMgcGF0Y2guIEkgZG9uJ3QgYmVsaWV2ZSBhbnkgS01TQU4tc3BlY2lmaWMgY2hlY2tzIGFyZSByZXF1aXJlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjgzOSwiT3V0cHV0VG9rZW5zIjoxOTMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MjYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxOToyNzoxNC44NDkxOTE4MzlaIiwiU2VxIjo1MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTc5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRpbWVvdXQgaGFuZGxpbmcgZm9yIGxvY2FsIFJQQyBiaW5kIGNhbGxzIGluIHRoZSBzdW5ycGMgc3Vic3lzdGVtLiBJdCBpbnRyb2R1Y2VzIGEgc3RhdGljIGNvbnN0YW50IGBycGNiX2xvY2FsX3RpbWVvdXRgIHN0cnVjdHVyZSwgYWRkcyB0aW1lb3V0LXJlbGF0ZWQgZmxhZ3MgKGBSUENfVEFTS19TT0ZUIHwgUlBDX1RBU0tfVElNRU9VVGApIHRvIGBycGNiX3JlZ2lzdGVyX2NhbGxgLCBhbmQgYWRkcyBsb2dpYyB0byBwcm9wYWdhdGUgYC1FVElNRURPVVRgIGVycm9ycyBpbiBgc3ZjX2dlbmVyaWNfcnBjYmluZF9zZXRgIGFuZCBgc3ZjX3JlZ2lzdGVyYC4gVGhlc2UgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIGRvIG5vdCBleHBvc2Uga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLCBhbmQgZG8gbm90IGludm9sdmUgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUgb3IgcmFjZSBjb25kaXRpb25zIGR1ZSB0byB0aW1lb3V0cykgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIG9yIExPQ0tERVAuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGltZW91dCBoYW5kbGluZyBmb3IgbG9jYWwgUlBDIGJpbmQgY2FsbHMgaW4gdGhlIHN1bnJwYyBzdWJzeXN0ZW0uIEl0IGludHJvZHVjZXMgYSBzdGF0aWMgY29uc3RhbnQgYHJwY2JfbG9jYWxfdGltZW91dGAgc3RydWN0dXJlLCBhZGRzIHRpbWVvdXQtcmVsYXRlZCBmbGFncyAoYFJQQ19UQVNLX1NPRlQgfCBSUENfVEFTS19USU1FT1VUYCkgdG8gYHJwY2JfcmVnaXN0ZXJfY2FsbGAsIGFuZCBhZGRzIGxvZ2ljIHRvIHByb3BhZ2F0ZSBgLUVUSU1FRE9VVGAgZXJyb3JzIGluIGBzdmNfZ2VuZXJpY19ycGNiaW5kX3NldGAgYW5kIGBzdmNfcmVnaXN0ZXJgLiBUaGVzZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgZG8gbm90IGV4cG9zZSBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UsIGFuZCBkbyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyAoc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSBvciByYWNlIGNvbmRpdGlvbnMgZHVlIHRvIHRpbWVvdXRzKSB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gb3IgTE9DS0RFUC4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowvznbz[1] Phase: Succeeded StartedAt: 2026-08-07 19:27:27 +0000 UTC FinishedAt: 2026-08-07 19:27:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvznbz[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-07 19:27:27 +0000 UTC FinishedAt: 2026-08-07 19:27:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvznbz[2] Phase: Succeeded StartedAt: 2026-08-07 19:27:27 +0000 UTC FinishedAt: 2026-08-07 23:09:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvznbz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFS_FS","NFSD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["svc_register","svc_generic_rpcbind_set","rpcb_register","rpcb_v4_register","rpcb_create_local"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFS_FS","NFSD"],"series_id":"c68240b1-0e64-46ae-b05b-72f5eaa9b010","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-07 19:27:27 +0000 UTC FinishedAt: 2026-08-07 23:09:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFS_FS","NFSD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["svc_register","svc_generic_rpcbind_set","rpcb_register","rpcb_v4_register","rpcb_create_local"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFS_FS","NFSD"],"series_id":"c68240b1-0e64-46ae-b05b-72f5eaa9b010","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowvznbz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFS_FS","NFSD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["svc_register","svc_generic_rpcbind_set","rpcb_register","rpcb_v4_register","rpcb_create_local"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFS_FS","NFSD"],"series_id":"c68240b1-0e64-46ae-b05b-72f5eaa9b010","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-07 19:27:27 +0000 UTC FinishedAt: 2026-08-07 19:27:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvznbz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFS_FS","NFSD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["svc_register","svc_generic_rpcbind_set","rpcb_register","rpcb_v4_register","rpcb_create_local"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFS_FS","NFSD"],"series_id":"c68240b1-0e64-46ae-b05b-72f5eaa9b010","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-07 19:27:27 +0000 UTC FinishedAt: 2026-08-07 19:27:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFS_FS","NFSD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowvznbz/series-workflowvznbz-convert-artifact-3289079880/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvznbz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFS_FS","NFSD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["svc_register","svc_generic_rpcbind_set","rpcb_register","rpcb_v4_register","rpcb_create_local"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFS_FS","NFSD"],"series_id":"c68240b1-0e64-46ae-b05b-72f5eaa9b010","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-07 19:27:37 +0000 UTC FinishedAt: 2026-08-07 19:44:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvznbz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFS_FS","NFSD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["svc_register","svc_generic_rpcbind_set","rpcb_register","rpcb_v4_register","rpcb_create_local"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFS_FS","NFSD"],"series_id":"c68240b1-0e64-46ae-b05b-72f5eaa9b010","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-07 19:27:37 +0000 UTC FinishedAt: 2026-08-07 19:44:43 +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:*09eaf18b-ca76-44fc-a233-de554f18a3d9,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-workflowvznbz/series-workflowvznbz-convert-artifact-3289079880/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": "de85ea8b-b0d2-4425-8196-5398bfc97a30", "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-workflowvznbz/series-workflowvznbz-build-action-417942718/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvznbz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFS_FS","NFSD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["svc_register","svc_generic_rpcbind_set","rpcb_register","rpcb_v4_register","rpcb_create_local"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFS_FS","NFSD"],"series_id":"c68240b1-0e64-46ae-b05b-72f5eaa9b010","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-07 19:27:37 +0000 UTC FinishedAt: 2026-08-07 19:44:33 +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:*09eaf18b-ca76-44fc-a233-de554f18a3d9,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-workflowvznbz/series-workflowvznbz-convert-artifact-3289079880/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": "de85ea8b-b0d2-4425-8196-5398bfc97a30", "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-workflowvznbz/series-workflowvznbz-build-action-417942718/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvznbz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFS_FS","NFSD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["svc_register","svc_generic_rpcbind_set","rpcb_register","rpcb_v4_register","rpcb_create_local"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFS_FS","NFSD"],"series_id":"c68240b1-0e64-46ae-b05b-72f5eaa9b010","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-07 19:44:43 +0000 UTC FinishedAt: 2026-08-07 19:44:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvznbz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFS_FS","NFSD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["svc_register","svc_generic_rpcbind_set","rpcb_register","rpcb_v4_register","rpcb_create_local"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFS_FS","NFSD"],"series_id":"c68240b1-0e64-46ae-b05b-72f5eaa9b010","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-07 19:44:43 +0000 UTC FinishedAt: 2026-08-07 19:44:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvznbz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFS_FS","NFSD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["svc_register","svc_generic_rpcbind_set","rpcb_register","rpcb_v4_register","rpcb_create_local"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFS_FS","NFSD"],"series_id":"c68240b1-0e64-46ae-b05b-72f5eaa9b010","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-07 19:44:43 +0000 UTC FinishedAt: 2026-08-07 19:44:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvznbz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFS_FS","NFSD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["svc_register","svc_generic_rpcbind_set","rpcb_register","rpcb_v4_register","rpcb_create_local"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFS_FS","NFSD"],"series_id":"c68240b1-0e64-46ae-b05b-72f5eaa9b010","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-07 19:44:43 +0000 UTC FinishedAt: 2026-08-07 19:44:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFS_FS","NFSD"],"series_id":"c68240b1-0e64-46ae-b05b-72f5eaa9b010","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowvznbz/series-workflowvznbz-convert-artifact-1088477743/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvznbz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFS_FS","NFSD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["svc_register","svc_generic_rpcbind_set","rpcb_register","rpcb_v4_register","rpcb_create_local"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFS_FS","NFSD"],"series_id":"c68240b1-0e64-46ae-b05b-72f5eaa9b010","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-07 19:44:53 +0000 UTC FinishedAt: 2026-08-07 19:46:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvznbz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFS_FS","NFSD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["svc_register","svc_generic_rpcbind_set","rpcb_register","rpcb_v4_register","rpcb_create_local"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFS_FS","NFSD"],"series_id":"c68240b1-0e64-46ae-b05b-72f5eaa9b010","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-07 19:44:53 +0000 UTC FinishedAt: 2026-08-07 19:46:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*de85ea8b-b0d2-4425-8196-5398bfc97a30,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-workflowvznbz/series-workflowvznbz-build-action-417942718/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-workflowvznbz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFS_FS","NFSD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["svc_register","svc_generic_rpcbind_set","rpcb_register","rpcb_v4_register","rpcb_create_local"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFS_FS","NFSD"],"series_id":"c68240b1-0e64-46ae-b05b-72f5eaa9b010","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-07 19:46:47 +0000 UTC FinishedAt: 2026-08-07 19:46:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvznbz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFS_FS","NFSD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["svc_register","svc_generic_rpcbind_set","rpcb_register","rpcb_v4_register","rpcb_create_local"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFS_FS","NFSD"],"series_id":"c68240b1-0e64-46ae-b05b-72f5eaa9b010","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-07 19:46:47 +0000 UTC FinishedAt: 2026-08-07 19:46:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvznbz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFS_FS","NFSD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["svc_register","svc_generic_rpcbind_set","rpcb_register","rpcb_v4_register","rpcb_create_local"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFS_FS","NFSD"],"series_id":"c68240b1-0e64-46ae-b05b-72f5eaa9b010","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-07 19:46:47 +0000 UTC FinishedAt: 2026-08-07 20:03:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvznbz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFS_FS","NFSD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["svc_register","svc_generic_rpcbind_set","rpcb_register","rpcb_v4_register","rpcb_create_local"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFS_FS","NFSD"],"series_id":"c68240b1-0e64-46ae-b05b-72f5eaa9b010","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-07 19:46:47 +0000 UTC FinishedAt: 2026-08-07 20:03:25 +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:*09eaf18b-ca76-44fc-a233-de554f18a3d9,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-workflowvznbz/series-workflowvznbz-convert-artifact-1088477743/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": "f818c0d8-7eea-448a-8a93-c14b7d347acf", "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-workflowvznbz/series-workflowvznbz-build-action-1525720515/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvznbz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFS_FS","NFSD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["svc_register","svc_generic_rpcbind_set","rpcb_register","rpcb_v4_register","rpcb_create_local"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFS_FS","NFSD"],"series_id":"c68240b1-0e64-46ae-b05b-72f5eaa9b010","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-07 19:46:47 +0000 UTC FinishedAt: 2026-08-07 20:03:15 +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:*09eaf18b-ca76-44fc-a233-de554f18a3d9,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-workflowvznbz/series-workflowvznbz-convert-artifact-1088477743/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": "f818c0d8-7eea-448a-8a93-c14b7d347acf", "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-workflowvznbz/series-workflowvznbz-build-action-1525720515/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvznbz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFS_FS","NFSD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["svc_register","svc_generic_rpcbind_set","rpcb_register","rpcb_v4_register","rpcb_create_local"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFS_FS","NFSD"],"series_id":"c68240b1-0e64-46ae-b05b-72f5eaa9b010","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-07 20:03:25 +0000 UTC FinishedAt: 2026-08-07 20:03:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvznbz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFS_FS","NFSD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["svc_register","svc_generic_rpcbind_set","rpcb_register","rpcb_v4_register","rpcb_create_local"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFS_FS","NFSD"],"series_id":"c68240b1-0e64-46ae-b05b-72f5eaa9b010","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-07 20:03:25 +0000 UTC FinishedAt: 2026-08-07 20:03:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvznbz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFS_FS","NFSD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["svc_register","svc_generic_rpcbind_set","rpcb_register","rpcb_v4_register","rpcb_create_local"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFS_FS","NFSD"],"series_id":"c68240b1-0e64-46ae-b05b-72f5eaa9b010","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-07 20:03:25 +0000 UTC FinishedAt: 2026-08-07 20:05:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvznbz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFS_FS","NFSD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["svc_register","svc_generic_rpcbind_set","rpcb_register","rpcb_v4_register","rpcb_create_local"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFS_FS","NFSD"],"series_id":"c68240b1-0e64-46ae-b05b-72f5eaa9b010","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-07 20:03:25 +0000 UTC FinishedAt: 2026-08-07 20:05:18 +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:*f818c0d8-7eea-448a-8a93-c14b7d347acf,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-workflowvznbz/series-workflowvznbz-build-action-1525720515/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-workflowvznbz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFS_FS","NFSD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["svc_register","svc_generic_rpcbind_set","rpcb_register","rpcb_v4_register","rpcb_create_local"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFS_FS","NFSD"],"series_id":"c68240b1-0e64-46ae-b05b-72f5eaa9b010","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-07 20:05:28 +0000 UTC FinishedAt: 2026-08-07 23:09:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvznbz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFS_FS","NFSD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["svc_register","svc_generic_rpcbind_set","rpcb_register","rpcb_v4_register","rpcb_create_local"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFS_FS","NFSD"],"series_id":"c68240b1-0e64-46ae-b05b-72f5eaa9b010","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-07 20:05:28 +0000 UTC FinishedAt: 2026-08-07 23:09:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["svc_register","svc_generic_rpcbind_set","rpcb_register","rpcb_v4_register","rpcb_create_local"],"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:*de85ea8b-b0d2-4425-8196-5398bfc97a30,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f818c0d8-7eea-448a-8a93-c14b7d347acf,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-workflowvznbz/series-workflowvznbz-build-action-417942718/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-workflowvznbz/series-workflowvznbz-build-action-1525720515/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowvznbz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFS_FS","NFSD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["svc_register","svc_generic_rpcbind_set","rpcb_register","rpcb_v4_register","rpcb_create_local"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFS_FS","NFSD"],"series_id":"c68240b1-0e64-46ae-b05b-72f5eaa9b010","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-07 20:05:28 +0000 UTC FinishedAt: 2026-08-07 20:05:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvznbz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFS_FS","NFSD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["svc_register","svc_generic_rpcbind_set","rpcb_register","rpcb_v4_register","rpcb_create_local"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFS_FS","NFSD"],"series_id":"c68240b1-0e64-46ae-b05b-72f5eaa9b010","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-07 20:05:28 +0000 UTC FinishedAt: 2026-08-07 20:05:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["svc_register","svc_generic_rpcbind_set","rpcb_register","rpcb_v4_register","rpcb_create_local"],"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-workflowvznbz/series-workflowvznbz-convert-artifact-3532602344/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvznbz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFS_FS","NFSD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["svc_register","svc_generic_rpcbind_set","rpcb_register","rpcb_v4_register","rpcb_create_local"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFS_FS","NFSD"],"series_id":"c68240b1-0e64-46ae-b05b-72f5eaa9b010","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-07 20:05:28 +0000 UTC FinishedAt: 2026-08-07 20:05:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvznbz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFS_FS","NFSD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["svc_register","svc_generic_rpcbind_set","rpcb_register","rpcb_v4_register","rpcb_create_local"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFS_FS","NFSD"],"series_id":"c68240b1-0e64-46ae-b05b-72f5eaa9b010","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-07 20:05:28 +0000 UTC FinishedAt: 2026-08-07 20:05:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvznbz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFS_FS","NFSD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["svc_register","svc_generic_rpcbind_set","rpcb_register","rpcb_v4_register","rpcb_create_local"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFS_FS","NFSD"],"series_id":"c68240b1-0e64-46ae-b05b-72f5eaa9b010","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-07 20:05:28 +0000 UTC FinishedAt: 2026-08-07 20:05:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvznbz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFS_FS","NFSD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["svc_register","svc_generic_rpcbind_set","rpcb_register","rpcb_v4_register","rpcb_create_local"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFS_FS","NFSD"],"series_id":"c68240b1-0e64-46ae-b05b-72f5eaa9b010","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-07 20:05:38 +0000 UTC FinishedAt: 2026-08-07 23:09:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvznbz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFS_FS","NFSD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["svc_register","svc_generic_rpcbind_set","rpcb_register","rpcb_v4_register","rpcb_create_local"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"075b74841bd0065a3bda3440873c747938e69b68","config_name":"upstream-apparmor-kasan.config","enable_configs":["SUNRPC","NFS_FS","NFSD"],"series_id":"c68240b1-0e64-46ae-b05b-72f5eaa9b010","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-07 20:05:38 +0000 UTC FinishedAt: 2026-08-07 23:08:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*de85ea8b-b0d2-4425-8196-5398bfc97a30,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f818c0d8-7eea-448a-8a93-c14b7d347acf,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-workflowvznbz/series-workflowvznbz-build-action-417942718/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-workflowvznbz/series-workflowvznbz-build-action-1525720515/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-workflowvznbz/series-workflowvznbz-convert-artifact-3532602344/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,}