Name: series-workflowfhxnv Phase: Succeeded StartedAt: 2026-09-10 02:47:04 +0000 UTC FinishedAt: 2026-09-10 06:33:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfhxnv[0] Phase: Succeeded StartedAt: 2026-09-10 02:47:04 +0000 UTC FinishedAt: 2026-09-10 02:49:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfhxnv[0].run-triage Phase: Succeeded StartedAt: 2026-09-10 02:47:04 +0000 UTC FinishedAt: 2026-09-10 02:49:51 +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": "5acbae5f7eb3d5275120abfe698c394b7325dcec", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TRANSPARENT_HUGEPAGE", "USERFAULTFD" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "5acbae5f7eb3d5275120abfe698c394b7325dcec", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TRANSPARENT_HUGEPAGE", "USERFAULTFD" ], "series_id": "eaf1d596-fa21-43e6-adef-9fa8eae996da" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "try_collapse_pte_mapped_thp", "collapse_pte_mapped_thp", "madvise_collapse", "collapse_single_pmd" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDAyOjQ4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDssCiAgICAmIzM0O1VTRVJGQVVMVEZEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwJiMzNDssCiAgICAmIzM0O2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwJiMzNDssCiAgICAmIzM0O21hZHZpc2VfY29sbGFwc2UmIzM0OywKICAgICYjMzQ7Y29sbGFwc2Vfc2luZ2xlX3BtZCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBjaGVjayAoYHVzZXJmYXVsdGZkX21pbm9yKHZtYSlgKSBpbiBgdHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwKClgIHRvIHByZXZlbnQgY29sbGFwc2luZyBQVEUtbWFwcGVkIFRIUHMgb24gVk1BcyByZWdpc3RlcmVkIHdpdGggdXNlcmZhdWx0ZmQtbWlub3IgbW9kZSwgYWxvbmcgd2l0aCBjb3JyZXNwb25kaW5nIHNlbGZ0ZXN0IHVwZGF0ZXMgaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtdW5pdC10ZXN0cy5jYC4gXG5cblRoaXMgbW9kaWZpY2F0aW9uIGRvZXMgbm90IGFsbG9jYXRlIG5ldyBidWZmZXJzLCBtYW5pcHVsYXRlIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBkYXRhLCBhbHRlciBwYWRkaW5nIG9yIHN0cnVjdHVyZSBmaWVsZHMgY29waWVkIHRvIHVzZXJzcGFjZSwgb3IgY2hhbmdlIGFueSBkYXRhIGxlbmd0aHMvYm91bmRzIGNoZWNraW5nIHRoYXQgY291bGQgbGVhZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBsZWFrcy4gU3RhbmRhcmQgc2FuaXRpemVycyBhbmQgYnVnIGRldGVjdG9ycyAoc3VjaCBhcyBLQVNBTiBhbmQgcGFnZSB0YWJsZSBjaGVja3MpIGFyZSBzdWZmaWNpZW50IGZvciB2YWxpZGF0aW5nIHRoaXMgZnVuY3Rpb25hbGl0eSwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGRldGVjdGFibGUgb25seSBieSBLTVNBTiBhcmUgaW50cm9kdWNlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMga2h1Z2VwYWdlZCBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IChtbS9raHVnZXBhZ2VkLmMpIHRvIHByZXZlbnQgY29sbGFwc2luZyBQVEUtbWFwcGVkIHRyYW5zcGFyZW50IGh1Z2VwYWdlcyBmb3IgVk1BcyByZWdpc3RlcmVkIHdpdGggdXNlcmZhdWx0ZmQgbWlub3IgZmF1bHQgaGFuZGxpbmcgKHVzZXJmYXVsdGZkX21pbm9yKS4gVGhpcyBpcyByZWFjaGFibGUgdmlhIHVzZXJmYXVsdGZkIHN5c2NhbGxzIGFuZCBNQURWX0NPTExBUFNFIG1hZHZpc2UgY2FsbHMgb3IgYmFja2dyb3VuZCBraHVnZXBhZ2VkIGNvbGxhcHNlIGFuZCB3YXJyYW50cyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDAyOjQ4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZWU3YjY1ODE2NTkyZGI4Yjk5ZmFlZjJmNDkyM2U4MjFkZDViY2VjMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDEwIDAyOjQ4OjE0IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2todWdlcGFnZWQuYyBiL21tL2todWdlcGFnZWQuY1xuaW5kZXggNzU2MzkyOThlZmMyNy4uZTY5NDdmZTE0MmVlYSAxMDA2NDRcbi0tLSBhL21tL2todWdlcGFnZWQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0va2h1Z2VwYWdlZC5jXG5AQCAtMTg5NCw2ICYjNDM7MTg5NCwxMyBAQCBzdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCB0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHAoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnblxuIFx0aWYgKHVzZXJmYXVsdGZkX3Byb3RlY3RlZCh2bWEpKVxuIFx0XHRyZXR1cm4gU0NBTl9QVEVfVUZGRDtcbiBcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFVzZXJmYXVsdGZkLW1pbm9yLXJlZ2lzdGVyZWQgVk1BcyBzaG91bGQgbm90IGJlIGNvbGxhcHNlZCwgYXNcbiYjNDM7XHQgKiB1c2Vyc3BhY2UgaXMgZXhwZWN0aW5nIHRvIGV4cGxpY2l0bHkgaW5zdGFsbCBQVEVzLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmICh1c2VyZmF1bHRmZF9taW5vcih2bWEpKVxuJiM0MztcdFx0cmV0dXJuIFNDQU5fUFRFX1VGRkQ7XG4mIzQzO1xuIFx0Zm9saW8gPSBmaWxlbWFwX2xvY2tfZm9saW8odm1hLVx1MDAzZXZtX2ZpbGUtXHUwMDNlZl9tYXBwaW5nLFxuIFx0XHRcdCAgICAgICBsaW5lYXJfcGFnZV9pbmRleCh2bWEsIGhhZGRyKSk7XG4gXHRpZiAoSVNfRVJSKGZvbGlvKSlcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLXVuaXQtdGVzdHMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtdW5pdC10ZXN0cy5jXG5pbmRleCBlZjliMzk1NmJkY2ZkLi42ZjIzNjBmOWI3NWRiIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC11bml0LXRlc3RzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtdW5pdC10ZXN0cy5jXG5AQCAtNTE4LDE5ICYjNDM7NTE4LDM0IEBAIHN0YXRpYyB2b2lkIHVmZmRfd3BfZm9ya19waW5fd2l0aF9ldmVudF90ZXN0KHVmZmRfZ2xvYmFsX3Rlc3Rfb3B0c190ICpnb3B0cywgdWZmXG4gXHR1ZmZkX3dwX2ZvcmtfcGluX3Rlc3RfY29tbW9uKGdvcHRzLCBhcmdzLCB0cnVlKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgY2hlY2tfbWVtb3J5X2NvbnRlbnRzKHVmZmRfZ2xvYmFsX3Rlc3Rfb3B0c190ICpnb3B0cywgY2hhciAqcClcbiYjNDM7c3RhdGljIGludCBfX2NoZWNrX21lbW9yeV9jb250ZW50cyh1bnNpZ25lZCBsb25nIG9mZnNldCxcbiYjNDM7XHRcdFx0XHQgICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxuJiM0MztcdFx0XHRcdCAgIHVmZmRfZ2xvYmFsX3Rlc3Rfb3B0c190ICpnb3B0cyxcbiYjNDM7XHRcdFx0XHQgICBjaGFyICpwKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgaSwgajtcbiBcdHVpbnQ4X3QgZXhwZWN0ZWRfYnl0ZTtcbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIGdvcHRzLVx1MDAzZW5yX3BhZ2VzOyAmIzQzOyYjNDM7aSkge1xuJiM0MztcdGlmIChucl9wYWdlcyAmIzQzOyBvZmZzZXQgXHUwMDNjIG5yX3BhZ2VzKVxuJiM0MztcdFx0ZXJyKFwmIzM0O292ZXJmbG93IGluIG1lbW9yeSBjaGVja1wmIzM0Oyk7XG4mIzQzO1x0aWYgKG5yX3BhZ2VzICYjNDM7IG9mZnNldCBcdTAwM2UgZ29wdHMtXHUwMDNlbnJfcGFnZXMpXG4mIzQzO1x0XHRlcnIoXCYjMzQ7b3V0IG9mIGJvdW5kcyBtZW1vcnkgY2hlY2tcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSBvZmZzZXQ7IGkgXHUwMDNjIG9mZnNldCAmIzQzOyBucl9wYWdlczsgJiM0MzsmIzQzO2kpIHtcbiBcdFx0ZXhwZWN0ZWRfYnl0ZSA9IH4oKHVpbnQ4X3QpKGkgJSAoKHVpbnQ4X3QpLTEpKSk7XG4gXHRcdGZvciAoaiA9IDA7IGogXHUwMDNjIGdvcHRzLVx1MDAzZXBhZ2Vfc2l6ZTsgaiYjNDM7JiM0MzspIHtcbiBcdFx0XHR1aW50OF90IHYgPSAqKHVpbnQ4X3QgKikocCAmIzQzOyAoaSAqIGdvcHRzLVx1MDAzZXBhZ2Vfc2l6ZSkgJiM0Mzsgaik7XG4gXHRcdFx0aWYgKHYgIT0gZXhwZWN0ZWRfYnl0ZSlcbi1cdFx0XHRcdGVycihcJiMzNDt1bmV4cGVjdGVkIHBhZ2UgY29udGVudHNcJiMzNDspO1xuJiM0MztcdFx0XHRcdHJldHVybiAxO1xuIFx0XHR9XG4gXHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGNoZWNrX21lbW9yeV9jb250ZW50cyh1ZmZkX2dsb2JhbF90ZXN0X29wdHNfdCAqZ29wdHMsIGNoYXIgKnApXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gX19jaGVja19tZW1vcnlfY29udGVudHMoMCwgZ29wdHMtXHUwMDNlbnJfcGFnZXMsIGdvcHRzLCBwKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgdWZmZF9taW5vcl90ZXN0X2NvbW1vbih1ZmZkX2dsb2JhbF90ZXN0X29wdHNfdCAqZ29wdHMsIGJvb2wgdGVzdF9jb2xsYXBzZSwgYm9vbCB0ZXN0X3dwKVxuQEAgLTUzOSw2ICYjNDM7NTU0LDggQEAgc3RhdGljIHZvaWQgdWZmZF9taW5vcl90ZXN0X2NvbW1vbih1ZmZkX2dsb2JhbF90ZXN0X29wdHNfdCAqZ29wdHMsIGJvb2wgdGVzdF9jb2xcbiBcdHB0aHJlYWRfdCB1ZmZkX21vbjtcbiBcdGNoYXIgYyA9ICYjMzk7XFwwJiMzOTs7XG4gXHRzdHJ1Y3QgdWZmZF9hcmdzIGFyZ3MgPSB7IDAgfTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGNoZWNrZWQgPSAwO1xuJiM0MztcdGJvb2wgYmFkX2NvbnRlbnRzO1xuIFx0YXJncy5nb3B0cyA9IGdvcHRzO1xuIFxuIFx0LypcbkBAIC01NjQsMjQgJiM0Mzs1ODEsNjUgQEAgc3RhdGljIHZvaWQgdWZmZF9taW5vcl90ZXN0X2NvbW1vbih1ZmZkX2dsb2JhbF90ZXN0X29wdHNfdCAqZ29wdHMsIGJvb2wgdGVzdF9jb2xcbiBcdGlmIChwdGhyZWFkX2NyZWF0ZShcdTAwMjZ1ZmZkX21vbiwgTlVMTCwgdWZmZF9wb2xsX3RocmVhZCwgXHUwMDI2YXJncykpXG4gXHRcdGVycihcJiMzNDt1ZmZkX3BvbGxfdGhyZWFkIGNyZWF0ZVwmIzM0Oyk7XG4gXG4mIzQzO1x0aWYgKHRlc3RfY29sbGFwc2UpIHtcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBSZWFkIGp1c3QgYSBzaW5nbGUgcGFnZSBhbmQgdHJ5IGNvbGxhcHNpbmcuIFRoZSBjb2xsYXBzZVxuJiM0MztcdFx0ICogc2hvdWxkIGVpdGhlciBiZSByZWplY3RlZCBvciBiZSBhIG5vLW9wLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAoX19jaGVja19tZW1vcnlfY29udGVudHMoMCwgMSwgZ29wdHMsIGdvcHRzLVx1MDAzZWFyZWFfZHN0X2FsaWFzKSlcbiYjNDM7XHRcdFx0ZXJyKFwmIzM0O3VuZXhwZWN0ZWQgbWVtb3J5IGNvbnRlbnRzIGJlZm9yZSBjb2xsYXBzZVwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdFx0LyogTUFEVl9DT0xMQVBTRSBtaWdodCByZXR1cm4gRUlOVkFMIGZvciB1ZmZkLW1pbm9yIFZNQXMuICovXG4mIzQzO1x0XHRtYWR2aXNlKGdvcHRzLVx1MDAzZWFyZWFfZHN0X2FsaWFzLCBnb3B0cy1cdTAwM2Vucl9wYWdlcyAqIGdvcHRzLVx1MDAzZXBhZ2Vfc2l6ZSxcbiYjNDM7XHRcdFx0TUFEVl9DT0xMQVBTRSk7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogSWYgdGhlIGFib3ZlIGNvbGxhcHNlIG1hcHBlZCBwYWdlcyB0aGF0IHdlcmUgbm90IGV4cGxpY2l0bHlcbiYjNDM7XHRcdCAqIENPTlRJTlVFJiMzOTtkLCB0aGUgYmVsb3cgX19jaGVja19tZW1vcnlfY29udGVudHMoKSB3aWxsIG5vdFxuJiM0MztcdFx0ICogZmF1bHQgb24gc29tZSBwYWdlcywgcmVzdWx0aW5nIGluIGluY29ycmVjdCBjb250ZW50cy4gVGhlXG4mIzQzO1x0XHQgKiBQVEUgZm9yIHRoZSBmaXJzdCBwYWdlIG1heSBnZXQgcmV0cmFjdGVkLCBzbyBhdm9pZCBjaGVja2luZ1xuJiM0MztcdFx0ICogdGhhdCBwYWdlLCBhcyB3ZSBtaWdodCB0YWtlIGEgc2Vjb25kIGZhdWx0LCBmbGlwcGluZyB0aGVcbiYjNDM7XHRcdCAqIGNvbnRlbnRzIGEgc2Vjb25kIHRpbWUuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGNoZWNrZWQgPSAxO1xuJiM0MztcdH1cbiYjNDM7XG4gXHQvKlxuIFx0ICogUmVhZCBlYWNoIG9mIHRoZSBwYWdlcyBiYWNrIHVzaW5nIHRoZSBVRkZELXJlZ2lzdGVyZWQgbWFwcGluZy4gV2VcbiBcdCAqIGV4cGVjdCB0aGF0IHRoZSBmaXJzdCB0aW1lIHdlIHRvdWNoIGEgcGFnZSwgaXQgd2lsbCByZXN1bHQgaW4gYSBtaW5vclxuIFx0ICogZmF1bHQuIHVmZmRfcG9sbF90aHJlYWQgd2lsbCByZXNvbHZlIHRoZSBmYXVsdCBieSBiaXQtZmxpcHBpbmcgdGhlXG4gXHQgKiBwYWdlJiMzOTtzIGNvbnRlbnRzLCBhbmQgdGhlbiBpc3N1aW5nIGEgQ09OVElOVUUgaW9jdGwuXG4gXHQgKi9cbi1cdGNoZWNrX21lbW9yeV9jb250ZW50cyhnb3B0cywgZ29wdHMtXHUwMDNlYXJlYV9kc3RfYWxpYXMpO1xuJiM0MztcdGJhZF9jb250ZW50cyA9ICEhX19jaGVja19tZW1vcnlfY29udGVudHMoY2hlY2tlZCwgZ29wdHMtXHUwMDNlbnJfcGFnZXMgLSBjaGVja2VkLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgZ29wdHMsIGdvcHRzLVx1MDAzZWFyZWFfZHN0X2FsaWFzKTtcbiBcbiBcdGlmICh3cml0ZShnb3B0cy1cdTAwM2VwaXBlZmRbMV0sIFx1MDAyNmMsIHNpemVvZihjKSkgIT0gc2l6ZW9mKGMpKVxuIFx0XHRlcnIoXCYjMzQ7cGlwZSB3cml0ZVwmIzM0Oyk7XG4gXHRpZiAocHRocmVhZF9qb2luKHVmZmRfbW9uLCBOVUxMKSlcbiBcdFx0ZXJyKFwmIzM0O2pvaW4oKSBmYWlsZWRcJiMzNDspO1xuIFxuJiM0MztcdGlmIChiYWRfY29udGVudHMgXHUwMDI2XHUwMDI2IHRlc3RfY29sbGFwc2UpIHtcbiYjNDM7XHRcdHVmZmRfdGVzdF9mYWlsKFwmIzM0O3VuZXhwZWN0ZWQgbWVtb3J5IGNvbnRlbnRzIGFmdGVyIGNvbGxhcHNlXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChiYWRfY29udGVudHMpIHtcbiYjNDM7XHRcdHVmZmRfdGVzdF9mYWlsKFwmIzM0O3VuZXhwZWN0ZWQgbWVtb3J5IGNvbnRlbnRzXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0aWYgKHRlc3RfY29sbGFwc2UpIHtcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBNQURWX0NPTExBUFNFIHdpbGwgZmFpbCB1bmxlc3MgdXNlcmZhdWx0ZmQtbWlub3IgaXNcbiYjNDM7XHRcdCAqIHVucmVnaXN0ZXJlZC5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWYgKHVmZmRfdW5yZWdpc3Rlcihnb3B0cy1cdTAwM2V1ZmZkLCBnb3B0cy1cdTAwM2VhcmVhX2RzdF9hbGlhcyxcbiYjNDM7XHRcdFx0XHQgICAgZ29wdHMtXHUwMDNlbnJfcGFnZXMgKiBnb3B0cy1cdTAwM2VwYWdlX3NpemUpKVxuJiM0MztcdFx0XHRlcnIoXCYjMzQ7dWZmZF91bnJlZ2lzdGVyIGJlZm9yZSBNQURWX0NPTExBUFNFIGZhaWxlZFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdFx0LyogTUFEVl9DT0xMQVBTRSBzaG91bGQgc3VjY2VlZCB3aXRoIHVzZXJmYXVsdGZkIHVucmVnaXN0ZXJlZC4gKi9cbiBcdFx0aWYgKG1hZHZpc2UoZ29wdHMtXHUwMDNlYXJlYV9kc3RfYWxpYXMsIGdvcHRzLVx1MDAzZW5yX3BhZ2VzICogZ29wdHMtXHUwMDNlcGFnZV9zaXplLFxuIFx0XHRcdCAgICBNQURWX0NPTExBUFNFKSkge1xuLVx0XHRcdC8qIEl0JiMzOTtzIGZpbmUgdG8gZmFpbCBmb3IgdGhpcyBvbmUuLi4gKi9cbi1cdFx0XHR1ZmZkX3Rlc3Rfc2tpcChcJiMzNDtNQURWX0NPTExBUFNFIGZhaWxlZFwmIzM0Oyk7XG4mIzQzO1x0XHRcdHVmZmRfdGVzdF9mYWlsKFwmIzM0O01BRFZfQ09MTEFQU0UgZmFpbGVkXCYjMzQ7KTtcbiBcdFx0XHRyZXR1cm47XG4gXHRcdH1cbiBcbkBAIC01OTMsNyAmIzQzOzY1MSwxMCBAQCBzdGF0aWMgdm9pZCB1ZmZkX21pbm9yX3Rlc3RfY29tbW9uKHVmZmRfZ2xvYmFsX3Rlc3Rfb3B0c190ICpnb3B0cywgYm9vbCB0ZXN0X2NvbFxuIFx0XHQgKiBUaGlzIHdvbiYjMzk7dCBjYXVzZSB1ZmZkLWZhdWx0IC0gaXQgcHVyZWx5IGp1c3QgbWFrZXMgc3VyZSB0aGVyZVxuIFx0XHQgKiB3YXMgbm8gY29ycnVwdGlvbi5cbiBcdFx0ICovXG4tXHRcdGNoZWNrX21lbW9yeV9jb250ZW50cyhnb3B0cywgZ29wdHMtXHUwMDNlYXJlYV9kc3RfYWxpYXMpO1xuJiM0MztcdFx0aWYgKGNoZWNrX21lbW9yeV9jb250ZW50cyhnb3B0cywgZ29wdHMtXHUwMDNlYXJlYV9kc3RfYWxpYXMpKSB7XG4mIzQzO1x0XHRcdHVmZmRfdGVzdF9mYWlsKFwmIzM0O3VuZXhwZWN0ZWQgbWVtb3J5IGNvbnRlbnRzXCYjMzQ7KTtcbiYjNDM7XHRcdFx0cmV0dXJuO1xuJiM0MztcdFx0fVxuIFx0fVxuIFxuIFx0aWYgKGFyZ3MubWlzc2luZ19mYXVsdHMgIT0gMCB8fCBhcmdzLm1pbm9yX2ZhdWx0cyAhPSBnb3B0cy1cdTAwM2Vucl9wYWdlcylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwMjo0ODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7LAogICAgJiMzNDtVU0VSRkFVTFRGRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RyeV9jb2xsYXBzZV9wdGVfbWFwcGVkX3RocCYjMzQ7LAogICAgJiMzNDtjb2xsYXBzZV9wdGVfbWFwcGVkX3RocCYjMzQ7LAogICAgJiMzNDttYWR2aXNlX2NvbGxhcHNlJiMzNDssCiAgICAmIzM0O2NvbGxhcHNlX3NpbmdsZV9wbWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMga2h1Z2VwYWdlZCBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IChtbS9raHVnZXBhZ2VkLmMpIHRvIHByZXZlbnQgY29sbGFwc2luZyBQVEUtbWFwcGVkIHRyYW5zcGFyZW50IGh1Z2VwYWdlcyBmb3IgVk1BcyByZWdpc3RlcmVkIHdpdGggdXNlcmZhdWx0ZmQgbWlub3IgZmF1bHQgaGFuZGxpbmcgKHVzZXJmYXVsdGZkX21pbm9yKS4gVGhpcyBpcyByZWFjaGFibGUgdmlhIHVzZXJmYXVsdGZkIHN5c2NhbGxzIGFuZCBNQURWX0NPTExBUFNFIG1hZHZpc2UgY2FsbHMgb3IgYmFja2dyb3VuZCBraHVnZXBhZ2VkIGNvbGxhcHNlIGFuZCB3YXJyYW50cyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZWU3YjY1ODE2NTkyZGI4Yjk5ZmFlZjJmNDkyM2U4MjFkZDViY2VjMQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgU2VwIDEwIDAyOjQ4OjE0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0va2h1Z2VwYWdlZC5jIGIvbW0va2h1Z2VwYWdlZC5jCmluZGV4IDc1NjM5Mjk4ZWZjMjcuLmU2OTQ3ZmUxNDJlZWEgMTAwNjQ0Ci0tLSBhL21tL2todWdlcGFnZWQuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9raHVnZXBhZ2VkLmMKQEAgLTE4OTQsNiAmIzQzOzE4OTQsMTMgQEAgc3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgdHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ24KIAlpZiAodXNlcmZhdWx0ZmRfcHJvdGVjdGVkKHZtYSkpCiAJCXJldHVybiBTQ0FOX1BURV9VRkZEOwogCiYjNDM7CS8qCiYjNDM7CSAqIFVzZXJmYXVsdGZkLW1pbm9yLXJlZ2lzdGVyZWQgVk1BcyBzaG91bGQgbm90IGJlIGNvbGxhcHNlZCwgYXMKJiM0MzsJICogdXNlcnNwYWNlIGlzIGV4cGVjdGluZyB0byBleHBsaWNpdGx5IGluc3RhbGwgUFRFcy4KJiM0MzsJICovCiYjNDM7CWlmICh1c2VyZmF1bHRmZF9taW5vcih2bWEpKQomIzQzOwkJcmV0dXJuIFNDQU5fUFRFX1VGRkQ7CiYjNDM7CiAJZm9saW8gPSBmaWxlbWFwX2xvY2tfZm9saW8odm1hLSZndDt2bV9maWxlLSZndDtmX21hcHBpbmcsCiAJCQkgICAgICAgbGluZWFyX3BhZ2VfaW5kZXgodm1hLCBoYWRkcikpOwogCWlmIChJU19FUlIoZm9saW8pKQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC11bml0LXRlc3RzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLXVuaXQtdGVzdHMuYwppbmRleCBlZjliMzk1NmJkY2ZkLi42ZjIzNjBmOWI3NWRiIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLXVuaXQtdGVzdHMuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLXVuaXQtdGVzdHMuYwpAQCAtNTE4LDE5ICYjNDM7NTE4LDM0IEBAIHN0YXRpYyB2b2lkIHVmZmRfd3BfZm9ya19waW5fd2l0aF9ldmVudF90ZXN0KHVmZmRfZ2xvYmFsX3Rlc3Rfb3B0c190ICpnb3B0cywgdWZmCiAJdWZmZF93cF9mb3JrX3Bpbl90ZXN0X2NvbW1vbihnb3B0cywgYXJncywgdHJ1ZSk7CiB9CiAKLXN0YXRpYyB2b2lkIGNoZWNrX21lbW9yeV9jb250ZW50cyh1ZmZkX2dsb2JhbF90ZXN0X29wdHNfdCAqZ29wdHMsIGNoYXIgKnApCiYjNDM7c3RhdGljIGludCBfX2NoZWNrX21lbW9yeV9jb250ZW50cyh1bnNpZ25lZCBsb25nIG9mZnNldCwKJiM0MzsJCQkJICAgdW5zaWduZWQgbG9uZyBucl9wYWdlcywKJiM0MzsJCQkJICAgdWZmZF9nbG9iYWxfdGVzdF9vcHRzX3QgKmdvcHRzLAomIzQzOwkJCQkgICBjaGFyICpwKQogewogCXVuc2lnbmVkIGxvbmcgaSwgajsKIAl1aW50OF90IGV4cGVjdGVkX2J5dGU7CiAKLQlmb3IgKGkgPSAwOyBpICZsdDsgZ29wdHMtJmd0O25yX3BhZ2VzOyAmIzQzOyYjNDM7aSkgewomIzQzOwlpZiAobnJfcGFnZXMgJiM0Mzsgb2Zmc2V0ICZsdDsgbnJfcGFnZXMpCiYjNDM7CQllcnIoJiMzNDtvdmVyZmxvdyBpbiBtZW1vcnkgY2hlY2smIzM0Oyk7CiYjNDM7CWlmIChucl9wYWdlcyAmIzQzOyBvZmZzZXQgJmd0OyBnb3B0cy0mZ3Q7bnJfcGFnZXMpCiYjNDM7CQllcnIoJiMzNDtvdXQgb2YgYm91bmRzIG1lbW9yeSBjaGVjayYjMzQ7KTsKJiM0MzsKJiM0MzsJZm9yIChpID0gb2Zmc2V0OyBpICZsdDsgb2Zmc2V0ICYjNDM7IG5yX3BhZ2VzOyAmIzQzOyYjNDM7aSkgewogCQlleHBlY3RlZF9ieXRlID0gfigodWludDhfdCkoaSAlICgodWludDhfdCktMSkpKTsKIAkJZm9yIChqID0gMDsgaiAmbHQ7IGdvcHRzLSZndDtwYWdlX3NpemU7IGomIzQzOyYjNDM7KSB7CiAJCQl1aW50OF90IHYgPSAqKHVpbnQ4X3QgKikocCAmIzQzOyAoaSAqIGdvcHRzLSZndDtwYWdlX3NpemUpICYjNDM7IGopOwogCQkJaWYgKHYgIT0gZXhwZWN0ZWRfYnl0ZSkKLQkJCQllcnIoJiMzNDt1bmV4cGVjdGVkIHBhZ2UgY29udGVudHMmIzM0Oyk7CiYjNDM7CQkJCXJldHVybiAxOwogCQl9CiAJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBjaGVja19tZW1vcnlfY29udGVudHModWZmZF9nbG9iYWxfdGVzdF9vcHRzX3QgKmdvcHRzLCBjaGFyICpwKQomIzQzO3sKJiM0MzsJcmV0dXJuIF9fY2hlY2tfbWVtb3J5X2NvbnRlbnRzKDAsIGdvcHRzLSZndDtucl9wYWdlcywgZ29wdHMsIHApOwogfQogCiBzdGF0aWMgdm9pZCB1ZmZkX21pbm9yX3Rlc3RfY29tbW9uKHVmZmRfZ2xvYmFsX3Rlc3Rfb3B0c190ICpnb3B0cywgYm9vbCB0ZXN0X2NvbGxhcHNlLCBib29sIHRlc3Rfd3ApCkBAIC01MzksNiAmIzQzOzU1NCw4IEBAIHN0YXRpYyB2b2lkIHVmZmRfbWlub3JfdGVzdF9jb21tb24odWZmZF9nbG9iYWxfdGVzdF9vcHRzX3QgKmdvcHRzLCBib29sIHRlc3RfY29sCiAJcHRocmVhZF90IHVmZmRfbW9uOwogCWNoYXIgYyA9ICYjMzk7XDAmIzM5OzsKIAlzdHJ1Y3QgdWZmZF9hcmdzIGFyZ3MgPSB7IDAgfTsKJiM0MzsJdW5zaWduZWQgbG9uZyBjaGVja2VkID0gMDsKJiM0MzsJYm9vbCBiYWRfY29udGVudHM7CiAJYXJncy5nb3B0cyA9IGdvcHRzOwogCiAJLyoKQEAgLTU2NCwyNCAmIzQzOzU4MSw2NSBAQCBzdGF0aWMgdm9pZCB1ZmZkX21pbm9yX3Rlc3RfY29tbW9uKHVmZmRfZ2xvYmFsX3Rlc3Rfb3B0c190ICpnb3B0cywgYm9vbCB0ZXN0X2NvbAogCWlmIChwdGhyZWFkX2NyZWF0ZSgmYW1wO3VmZmRfbW9uLCBOVUxMLCB1ZmZkX3BvbGxfdGhyZWFkLCAmYW1wO2FyZ3MpKQogCQllcnIoJiMzNDt1ZmZkX3BvbGxfdGhyZWFkIGNyZWF0ZSYjMzQ7KTsKIAomIzQzOwlpZiAodGVzdF9jb2xsYXBzZSkgewomIzQzOwkJLyoKJiM0MzsJCSAqIFJlYWQganVzdCBhIHNpbmdsZSBwYWdlIGFuZCB0cnkgY29sbGFwc2luZy4gVGhlIGNvbGxhcHNlCiYjNDM7CQkgKiBzaG91bGQgZWl0aGVyIGJlIHJlamVjdGVkIG9yIGJlIGEgbm8tb3AuCiYjNDM7CQkgKi8KJiM0MzsJCWlmIChfX2NoZWNrX21lbW9yeV9jb250ZW50cygwLCAxLCBnb3B0cywgZ29wdHMtJmd0O2FyZWFfZHN0X2FsaWFzKSkKJiM0MzsJCQllcnIoJiMzNDt1bmV4cGVjdGVkIG1lbW9yeSBjb250ZW50cyBiZWZvcmUgY29sbGFwc2UmIzM0Oyk7CiYjNDM7CiYjNDM7CQkvKiBNQURWX0NPTExBUFNFIG1pZ2h0IHJldHVybiBFSU5WQUwgZm9yIHVmZmQtbWlub3IgVk1Bcy4gKi8KJiM0MzsJCW1hZHZpc2UoZ29wdHMtJmd0O2FyZWFfZHN0X2FsaWFzLCBnb3B0cy0mZ3Q7bnJfcGFnZXMgKiBnb3B0cy0mZ3Q7cGFnZV9zaXplLAomIzQzOwkJCU1BRFZfQ09MTEFQU0UpOwomIzQzOwkJLyoKJiM0MzsJCSAqIElmIHRoZSBhYm92ZSBjb2xsYXBzZSBtYXBwZWQgcGFnZXMgdGhhdCB3ZXJlIG5vdCBleHBsaWNpdGx5CiYjNDM7CQkgKiBDT05USU5VRSYjMzk7ZCwgdGhlIGJlbG93IF9fY2hlY2tfbWVtb3J5X2NvbnRlbnRzKCkgd2lsbCBub3QKJiM0MzsJCSAqIGZhdWx0IG9uIHNvbWUgcGFnZXMsIHJlc3VsdGluZyBpbiBpbmNvcnJlY3QgY29udGVudHMuIFRoZQomIzQzOwkJICogUFRFIGZvciB0aGUgZmlyc3QgcGFnZSBtYXkgZ2V0IHJldHJhY3RlZCwgc28gYXZvaWQgY2hlY2tpbmcKJiM0MzsJCSAqIHRoYXQgcGFnZSwgYXMgd2UgbWlnaHQgdGFrZSBhIHNlY29uZCBmYXVsdCwgZmxpcHBpbmcgdGhlCiYjNDM7CQkgKiBjb250ZW50cyBhIHNlY29uZCB0aW1lLgomIzQzOwkJICovCiYjNDM7CQljaGVja2VkID0gMTsKJiM0MzsJfQomIzQzOwogCS8qCiAJICogUmVhZCBlYWNoIG9mIHRoZSBwYWdlcyBiYWNrIHVzaW5nIHRoZSBVRkZELXJlZ2lzdGVyZWQgbWFwcGluZy4gV2UKIAkgKiBleHBlY3QgdGhhdCB0aGUgZmlyc3QgdGltZSB3ZSB0b3VjaCBhIHBhZ2UsIGl0IHdpbGwgcmVzdWx0IGluIGEgbWlub3IKIAkgKiBmYXVsdC4gdWZmZF9wb2xsX3RocmVhZCB3aWxsIHJlc29sdmUgdGhlIGZhdWx0IGJ5IGJpdC1mbGlwcGluZyB0aGUKIAkgKiBwYWdlJiMzOTtzIGNvbnRlbnRzLCBhbmQgdGhlbiBpc3N1aW5nIGEgQ09OVElOVUUgaW9jdGwuCiAJICovCi0JY2hlY2tfbWVtb3J5X2NvbnRlbnRzKGdvcHRzLCBnb3B0cy0mZ3Q7YXJlYV9kc3RfYWxpYXMpOwomIzQzOwliYWRfY29udGVudHMgPSAhIV9fY2hlY2tfbWVtb3J5X2NvbnRlbnRzKGNoZWNrZWQsIGdvcHRzLSZndDtucl9wYWdlcyAtIGNoZWNrZWQsCiYjNDM7CQkJCQkJICAgIGdvcHRzLCBnb3B0cy0mZ3Q7YXJlYV9kc3RfYWxpYXMpOwogCiAJaWYgKHdyaXRlKGdvcHRzLSZndDtwaXBlZmRbMV0sICZhbXA7Yywgc2l6ZW9mKGMpKSAhPSBzaXplb2YoYykpCiAJCWVycigmIzM0O3BpcGUgd3JpdGUmIzM0Oyk7CiAJaWYgKHB0aHJlYWRfam9pbih1ZmZkX21vbiwgTlVMTCkpCiAJCWVycigmIzM0O2pvaW4oKSBmYWlsZWQmIzM0Oyk7CiAKJiM0MzsJaWYgKGJhZF9jb250ZW50cyAmYW1wOyZhbXA7IHRlc3RfY29sbGFwc2UpIHsKJiM0MzsJCXVmZmRfdGVzdF9mYWlsKCYjMzQ7dW5leHBlY3RlZCBtZW1vcnkgY29udGVudHMgYWZ0ZXIgY29sbGFwc2UmIzM0Oyk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKGJhZF9jb250ZW50cykgewomIzQzOwkJdWZmZF90ZXN0X2ZhaWwoJiMzNDt1bmV4cGVjdGVkIG1lbW9yeSBjb250ZW50cyYjMzQ7KTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwogCWlmICh0ZXN0X2NvbGxhcHNlKSB7CiYjNDM7CQkvKgomIzQzOwkJICogTUFEVl9DT0xMQVBTRSB3aWxsIGZhaWwgdW5sZXNzIHVzZXJmYXVsdGZkLW1pbm9yIGlzCiYjNDM7CQkgKiB1bnJlZ2lzdGVyZWQuCiYjNDM7CQkgKi8KJiM0MzsJCWlmICh1ZmZkX3VucmVnaXN0ZXIoZ29wdHMtJmd0O3VmZmQsIGdvcHRzLSZndDthcmVhX2RzdF9hbGlhcywKJiM0MzsJCQkJICAgIGdvcHRzLSZndDtucl9wYWdlcyAqIGdvcHRzLSZndDtwYWdlX3NpemUpKQomIzQzOwkJCWVycigmIzM0O3VmZmRfdW5yZWdpc3RlciBiZWZvcmUgTUFEVl9DT0xMQVBTRSBmYWlsZWQmIzM0Oyk7CiYjNDM7CiYjNDM7CQkvKiBNQURWX0NPTExBUFNFIHNob3VsZCBzdWNjZWVkIHdpdGggdXNlcmZhdWx0ZmQgdW5yZWdpc3RlcmVkLiAqLwogCQlpZiAobWFkdmlzZShnb3B0cy0mZ3Q7YXJlYV9kc3RfYWxpYXMsIGdvcHRzLSZndDtucl9wYWdlcyAqIGdvcHRzLSZndDtwYWdlX3NpemUsCiAJCQkgICAgTUFEVl9DT0xMQVBTRSkpIHsKLQkJCS8qIEl0JiMzOTtzIGZpbmUgdG8gZmFpbCBmb3IgdGhpcyBvbmUuLi4gKi8KLQkJCXVmZmRfdGVzdF9za2lwKCYjMzQ7TUFEVl9DT0xMQVBTRSBmYWlsZWQmIzM0Oyk7CiYjNDM7CQkJdWZmZF90ZXN0X2ZhaWwoJiMzNDtNQURWX0NPTExBUFNFIGZhaWxlZCYjMzQ7KTsKIAkJCXJldHVybjsKIAkJfQogCkBAIC01OTMsNyAmIzQzOzY1MSwxMCBAQCBzdGF0aWMgdm9pZCB1ZmZkX21pbm9yX3Rlc3RfY29tbW9uKHVmZmRfZ2xvYmFsX3Rlc3Rfb3B0c190ICpnb3B0cywgYm9vbCB0ZXN0X2NvbAogCQkgKiBUaGlzIHdvbiYjMzk7dCBjYXVzZSB1ZmZkLWZhdWx0IC0gaXQgcHVyZWx5IGp1c3QgbWFrZXMgc3VyZSB0aGVyZQogCQkgKiB3YXMgbm8gY29ycnVwdGlvbi4KIAkJICovCi0JCWNoZWNrX21lbW9yeV9jb250ZW50cyhnb3B0cywgZ29wdHMtJmd0O2FyZWFfZHN0X2FsaWFzKTsKJiM0MzsJCWlmIChjaGVja19tZW1vcnlfY29udGVudHMoZ29wdHMsIGdvcHRzLSZndDthcmVhX2RzdF9hbGlhcykpIHsKJiM0MzsJCQl1ZmZkX3Rlc3RfZmFpbCgmIzM0O3VuZXhwZWN0ZWQgbWVtb3J5IGNvbnRlbnRzJiMzNDspOwomIzQzOwkJCXJldHVybjsKJiM0MzsJCX0KIAl9CiAKIAlpZiAoYXJncy5taXNzaW5nX2ZhdWx0cyAhPSAwIHx8IGFyZ3MubWlub3JfZmF1bHRzICE9IGdvcHRzLSZndDtucl9wYWdlcykKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDI6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDcxMwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI5MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBLaHVnZXBhZ2VkIGFuZCBVc2VyZmF1bHRmZCBJbnRlcmFjdGlvbioqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBpbiBmcm9udCBvZiBtZSwgYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcyB0byBkaXZlIHJpZ2h0IGludG8gdGhlIGNvZGUgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zLiBUaGUgcGF0Y2ggdG91Y2hlcyBgbW0va2h1Z2VwYWdlZC5jYCBhbmQgdGhlIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLXVuaXQtdGVzdHMuY2AgZmlsZS4gUmlnaHQgYXdheSwgbXkgcmFkYXIgZ29lcyB1cCDigJMgYW55dGhpbmcgdGhhdCBpbnRlcmFjdHMgd2l0aCBga2h1Z2VwYWdlZGAgYW5kIHBvdGVudGlhbGx5IHVzZXJmYXVsdGZkIChVRkZEKSBpcyBnb2luZyB0byBuZWVkIGNhcmVmdWwgY29uc2lkZXJhdGlvbiwgZXNwZWNpYWxseSB3aXRoIHRoZSBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMgb2Yga2h1Z2VwYWdlIGFuZCB0aGUgZXhwbGljaXQgbWVtb3J5IG1hbmFnZW1lbnQgZnJvbSBVRkZELgoKRm9jdXNpbmcgb24gYG1tL2todWdlcGFnZWQuY2AsIHRoZSBrZXkgY2hhbmdlIGFwcGVhcnMgd2l0aGluIHRoZSBgdHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwYCBmdW5jdGlvbi4gSXQmIzM5O3MgYWRkaW5nIGFuIGV4dHJhIGNoZWNrIGhlcmUuIExldCBtZSBzZWUuLi4gaXQmIzM5O3MgYWJvdXQgcHJvdGVjdGluZyBhZ2FpbnN0IGNvbGxhcHNpbmcgVEhQcyB3aGVuIFVGRkQgaXMgaW52b2x2ZWQuIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgZ3VhcmRpbmcgYWdhaW5zdCBjb2xsYXBzaW5nIFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMgKFRIUHMpIG9uIGB1c2VyZmF1bHRmZF9taW5vcmAtcmVnaXN0ZXJlZCBWTUFzLiBJIGltbWVkaWF0ZWx5IHVuZGVyc3RhbmQgdGhlIHJlYXNvbmluZyBoZXJlLiBJZiBhIFZNQSBpcyByZWdpc3RlcmVkIGFzIGEgJiMzNDttaW5vciYjMzQ7IFVGRkQgcmVnaW9uLCB0aGUgdXNlci1zcGFjZSBhcHBsaWNhdGlvbiBpcyBleHBsaWNpdGx5IG1hbmFnaW5nIHRoZSBQVEVzIGZvciB0aGF0IHJlZ2lvbi4gQ29sbGFwc2luZyBUSFBzIGluIHRoaXMgY2FzZSB3b3VsZCBpbnRlcmZlcmUgd2l0aCB0aGUgYXBwbGljYXRpb24mIzM5O3MgZXhwZWN0ZWQgYmVoYXZpb3IgYW5kIHBvdGVudGlhbGx5IGxlYWQgdG8gY29ycnVwdGlvbiBvciB1bmV4cGVjdGVkIHBhZ2UgZmF1bHRzLiBUaGlzIG1ha2VzIGNvbXBsZXRlIHNlbnNlIC0gVEhQIGNvbGxhcHNlIG1pZ2h0IHRyeSB0byBpbnN0YWxsIGEgUFRFIGJlaGluZCB0aGUgYXBwbGljYXRpb24mIzM5O3MgYmFjay4gVGhpcyBhZGRpdGlvbiBpcyBjbGVhcmx5IGRlc2lnbmVkIHRvIG1haW50YWluIHRoZSBpbnRlbmRlZCBzZW1hbnRpY3Mgb2YgVUZGRCBhbmQgcHJldmVudCBjb25mbGljdHMgd2l0aCBga2h1Z2VwYWdlZGAuIEl0JiMzOTtzIGEgc29saWQsIGNhdXRpb3VzIGFwcHJvYWNoIHRvIGtlZXAgdGhlIGRpZmZlcmVudCBhcmVhcyBvZiBtZW1vcnkgbWFuYWdlbWVudCBzYWZlIGFuZCBvcGVyYXRpb25hbC4KCkkmIzM5O20gbm93IGdvaW5nIHRvIHVzZSBgZ3JlcHBlcmAgb3IgYHJlYWQtZmlsZWAgdG8gZXhwbG9yZSB0aGUgYHRyeV9jb2xsYXBzZV9wdGVfbWFwcGVkX3RocGAgZnVuY3Rpb24gaW4gbW9yZSBkZXRhaWwuIEkgbmVlZCB0byBmdWxseSBncm9rIHRoZSBpbnRlcmFjdGlvbiBwb2ludHMgaW4gdGhlIGNvZGViYXNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDAyOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0va2h1Z2VwYWdlZC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTg4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxODgwOlx0XHQvKlxuMTg4MTpcdFx0ICogSWYgd2UgYXJlIGhlcmUsIHdlJiMzOTt2ZSBzdWNjZWVkZWQgaW4gcmVwbGFjaW5nIGFsbCB0aGUgbmF0aXZlIHBhZ2VzXG4xODgyOlx0XHQgKiBpbiB0aGUgcGFnZSBjYWNoZSB3aXRoIGEgc2luZ2xlIGh1Z2VwYWdlLiBJZiBhIG1tIHdlcmUgdG8gZmF1bHQtaW5cbjE4ODM6XHRcdCAqIHRoaXMgbWVtb3J5IChtYXBwZWQgYnkgYSBzdWl0YWJseSBhbGlnbmVkIFZNQSksIHdlJiMzOTtkIGdldCB0aGUgaHVnZXBhZ2VcbjE4ODQ6XHRcdCAqIGFuZCBtYXAgaXQgYnkgYSBQTUQsIHJlZ2FyZGxlc3Mgb2Ygc3lzZnMgVEhQIHNldHRpbmdzLiBBcyBzdWNoLCBsZXQmIzM5O3NcbjE4ODU6XHRcdCAqIGFuYWxvZ291c2x5IGVsaWRlIHN5c2ZzIFRIUCBzZXR0aW5ncyBoZXJlIGFuZCBmb3JjZSBjb2xsYXBzZS5cbjE4ODY6XHRcdCAqL1xuMTg4NzpcdFx0aWYgKCF0aHBfdm1hX2FsbG93YWJsZV9vcmRlcih2bWEsIHZtYS1cdTAwM2V2bV9mbGFncywgVFZBX0ZPUkNFRF9DT0xMQVBTRSwgUE1EX09SREVSKSlcbjE4ODg6XHRcdFx0cmV0dXJuIFNDQU5fVk1BX0NIRUNLO1xuMTg4OTpcdFxuMTg5MDpcdFx0LypcbjE4OTE6XHRcdCAqIEtlZXAgcG1kIHBndGFibGUgd2hpbGUgdGhlIHVmZmQgYml0IGlzIGluIHVzZTsgc2VlIGNvbW1lbnQgaW5cbjE4OTI6XHRcdCAqIHJldHJhY3RfcGFnZV90YWJsZXMoKS5cbjE4OTM6XHRcdCAqL1xuMTg5NDpcdFx0aWYgKHVzZXJmYXVsdGZkX3Byb3RlY3RlZCh2bWEpKVxuMTg5NTpcdFx0XHRyZXR1cm4gU0NBTl9QVEVfVUZGRDtcbjE4OTY6XHRcbjE4OTc6XHRcdC8qXG4xODk4Olx0XHQgKiBVc2VyZmF1bHRmZC1taW5vci1yZWdpc3RlcmVkIFZNQXMgc2hvdWxkIG5vdCBiZSBjb2xsYXBzZWQsIGFzXG4xODk5Olx0XHQgKiB1c2Vyc3BhY2UgaXMgZXhwZWN0aW5nIHRvIGV4cGxpY2l0bHkgaW5zdGFsbCBQVEVzLlxuMTkwMDpcdFx0ICovXG4xOTAxOlx0XHRpZiAodXNlcmZhdWx0ZmRfbWlub3Iodm1hKSlcbjE5MDI6XHRcdFx0cmV0dXJuIFNDQU5fUFRFX1VGRkQ7XG4xOTAzOlx0XG4xOTA0Olx0XHRmb2xpbyA9IGZpbGVtYXBfbG9ja19mb2xpbyh2bWEtXHUwMDNldm1fZmlsZS1cdTAwM2VmX21hcHBpbmcsXG4xOTA1Olx0XHRcdFx0ICAgICAgIGxpbmVhcl9wYWdlX2luZGV4KHZtYSwgaGFkZHIpKTtcbjE5MDY6XHRcdGlmIChJU19FUlIoZm9saW8pKVxuMTkwNzpcdFx0XHRyZXR1cm4gU0NBTl9QQUdFX05VTEw7XG4xOTA4Olx0XG4xOTA5Olx0XHRpZiAoIWlzX3BtZF9vcmRlcihmb2xpb19vcmRlcihmb2xpbykpKSB7XG4xOTEwOlx0XHRcdHJlc3VsdCA9IFNDQU5fUEFHRV9DT01QT1VORDtcbjE5MTE6XHRcdFx0Z290byBkcm9wX2ZvbGlvO1xuMTkxMjpcdFx0fVxuMTkxMzpcdFxuMTkxNDpcdFx0cmVzdWx0ID0gZmluZF9wbWRfb3JfdGhwX29yX25vbmUobW0sIGhhZGRyLCBcdTAwMjZwbWQpO1xuMTkxNTpcdFx0c3dpdGNoIChyZXN1bHQpIHtcbjE5MTY6XHRcdGNhc2UgU0NBTl9TVUNDRUVEOlxuMTkxNzpcdFx0XHRicmVhaztcbjE5MTg6XHRcdGNhc2UgU0NBTl9OT19QVEVfVEFCTEU6XG4xOTE5Olx0XHRcdC8qXG4xOTIwOlx0XHRcdCAqIEFsbCBwdGUgZW50cmllcyBoYXZlIGJlZW4gcmVtb3ZlZCBhbmQgcG1kIGNsZWFyZWQuXG4xOTIxOlx0XHRcdCAqIFNraXAgYWxsIHRoZSBwdGUgY2hlY2tzIGFuZCBqdXN0IHVwZGF0ZSB0aGUgcG1kIG1hcHBpbmcuXG4xOTIyOlx0XHRcdCAqL1xuMTkyMzpcdFx0XHRnb3RvIG1heWJlX2luc3RhbGxfcG1kO1xuMTkyNDpcdFx0ZGVmYXVsdDpcbjE5MjU6XHRcdFx0Z290byBkcm9wX2ZvbGlvO1xuMTkyNjpcdFx0fVxuMTkyNzpcdFxuMTkyODpcdFx0cmVzdWx0ID0gU0NBTl9GQUlMO1xuMTkyOTpcdFx0c3RhcnRfcHRlID0gcHRlX29mZnNldF9tYXBfbG9jayhtbSwgcG1kLCBoYWRkciwgXHUwMDI2cHRsKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwMjo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MjUyCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRoaW5nczoKCioqQW5hbHl6aW5nIGB0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHBgIGFuZCBpdHMgU3Vycm91bmRpbmdzKioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gYHRyeV9jb2xsYXBzZV9wdGVfbWFwcGVkX3RocGAuIEZpcnN0LCBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBpdHMgY29udGV4dC4gV2hlcmUgaXMgdGhpcyBmdW5jdGlvbiBhY3R1YWxseSBiZWluZyAqdXNlZCo/IEkmIzM5O2xsIGNoZWNrIGl0cyBjYWxsIHNpdGVzIHRvIHVuZGVyc3RhbmQgdGhlIHNjZW5hcmlvcyBpbiB3aGljaCBpdCYjMzk7cyB0cmlnZ2VyZWQuIEtub3dpbmcgdGhlIGNhbGxlcnMgd2lsbCB0ZWxsIG1lIHRoZSBoaWdoLWxldmVsIGxvZ2ljIGl04oCZcyBhIHBhcnQgb2YgYW5kIHRoZSBzcGVjaWZpYyBldmVudHMgdGhhdCBsZWFkIHRvIHRoaXMgcGFydCBvZiB0aGUgY29kZSBydW5uaW5nLgoKVGhlbiwgSSYjMzk7bGwgdHVybiBteSBhdHRlbnRpb24gdG8gdGhlIGNvbmZpZ3VyYXRpb24gZ3VhcmRzIGFyb3VuZCBgbW0va2h1Z2VwYWdlZC5jYC4gV2hhdCBjb21waWxlLXRpbWUgb3B0aW9ucyBhcmUgaW5mbHVlbmNpbmcgdGhlIGF2YWlsYWJpbGl0eSBhbmQgYmVoYXZpb3Igb2YgdGhpcyBjb2RlPyBJJiMzOTttIHRoaW5raW5nIEkmIzM5O2xsIG5lZWQgdG8gaWRlbnRpZnkgYW55IGRlcGVuZGVuY2llcyBvbiB0aGluZ3MgbGlrZSBUcmFuc3BhcmVudCBIdWdlIFBhZ2VzIChUSFApIHN1cHBvcnQgb3Igc3BlY2lmaWMgbWVtb3J5IG1hbmFnZW1lbnQgZmVhdHVyZXMuIFVuZGVyc3RhbmRpbmcgdGhlIHJlbGV2YW50IGNvbmZpZ3MgaXMgY3JpdGljYWwgdG8ga25vd2luZyB0aGUgc2NvcGUgb2YgZnVuY3Rpb25hbGl0eSBJIGFtIHdvcmtpbmcgd2l0aC4gV2hhdCBpcyBjb25kaXRpb25hbCwgYW5kIHdoYXQgaXMgYWx3YXlzIHJ1bm5pbmc/IFRoZSBjb25maWdzIGFyZSB0aGUga2V5IHRvIGFuc3dlcmluZyB0aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDAyOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RyeV9jb2xsYXBzZV9wdGVfbWFwcGVkX3RocCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9raHVnZXBhZ2VkLmM9MTgxNT1zdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBzZXRfaHVnZV9wbWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMTg1MC1cbm1tL2todWdlcGFnZWQuYzoxODUxOnN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IHRyeV9jb2xsYXBzZV9wdGVfbWFwcGVkX3RocChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxubW0va2h1Z2VwYWdlZC5jLTE4NTItXHRcdGJvb2wgaW5zdGFsbF9wbWQpXG4tLVxubW0va2h1Z2VwYWdlZC5jPTIwOTY9dm9pZCBjb2xsYXBzZV9wdGVfbWFwcGVkX3RocChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbm1tL2todWdlcGFnZWQuYy0yMDk4LXtcbm1tL2todWdlcGFnZWQuYzoyMDk5Olx0dHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwKG1tLCBhZGRyLCBpbnN0YWxsX3BtZCk7XG5tbS9raHVnZXBhZ2VkLmMtMjEwMC19XG4tLVxubW0va2h1Z2VwYWdlZC5jPTIyNDk9c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2VfZmlsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbm1tL2todWdlcGFnZWQuYy0yNjI4LVx0ICogUmVtb3ZlIHB0ZSBwYWdlIHRhYmxlcywgc28gd2UgY2FuIHJlLWZhdWx0IHRoZSBwYWdlIGFzIGh1Z2UuXG5tbS9raHVnZXBhZ2VkLmM6MjYyOTpcdCAqIElmIE1BRFZfQ09MTEFQU0UsIGFkanVzdCByZXN1bHQgdG8gY2FsbCB0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHAoKS5cbm1tL2todWdlcGFnZWQuYy0yNjMwLVx0ICovXG4tLVxubW0va2h1Z2VwYWdlZC5jPTI3OTE9c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2Vfc2luZ2xlX3BtZCh1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxubW0va2h1Z2VwYWdlZC5jLTI4MzUtXHRcdGVsc2Vcbm1tL2todWdlcGFnZWQuYzoyODM2Olx0XHRcdHJlc3VsdCA9IHRyeV9jb2xsYXBzZV9wdGVfbWFwcGVkX3RocChtbSwgYWRkcixcbm1tL2todWdlcGFnZWQuYy0yODM3LVx0XHRcdFx0XHRcdFx0ICAgICAhY2MtXHUwMDNlaXNfa2h1Z2VwYWdlZCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDI6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzAzMwoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGlzLCBkaXN0aWxsZWQgaW50byBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5IGFzIHlvdSByZXF1ZXN0ZWQsIGFzc3VtaW5nIEkmIzM5O20gYWxyZWFkeSB3ZWxsLXZlcnNlZCBpbiBrZXJuZWwgbWVtb3J5IG1hbmFnZW1lbnQ6CgoqKk1lbW9yeSBNYW5hZ2VtZW50IERlZXAgRGl2ZSoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBnb2luZyBvbiB3aXRoIHRoZXNlIG1lbW9yeSBtYW5hZ2VtZW50IGZ1bmN0aW9ucy4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIGhvdyBtZW1vcnkgaXMgYmVpbmcgaGFuZGxlZCByZWxhdGVkIHRvIHRyYW5zcGFyZW50IGh1Z2VwYWdlcyAoVEhQKSBhbmQgYG1hZHZpc2VgIGNhbGxzLgoKRmlyc3QsIEkmIzM5O20gZ29pbmcgdG8gaW52ZXN0aWdhdGUgdGhlIGBtYWR2aXNlX2NvbGxhcHNlYCBvciB0aGUgYG1hZHZpc2VgIGVudHJ5IHBvaW50IGl0c2VsZi4gSSB3YW50IHRvIHNlZSBwcmVjaXNlbHkgaG93IHRoZXNlIGZ1bmN0aW9ucyBhcmUgYmVpbmcgdXNlZCBhbmQgdW5kZXJzdGFuZCB0aGVpciBleGFjdCBwdXJwb3NlIGluIGNvbGxhcHNpbmcgb3Igb3RoZXJ3aXNlIG1hbmFnaW5nIG1lbW9yeSByZWdpb25zLiBJIGFsc28gbmVlZCB0byB0cmFjayBkb3duIGFueSBhbmQgYWxsIGNhbGxzIHRvIHRoZSBga2h1Z2VwYWdlZGAgcHJvY2VzcyBiZWNhdXNlIGl0cyByZWxhdGlvbnNoaXAgd2l0aCBUSFBzIGlzIHZpdGFsIHRvIGdyYXNwLgoKTmV4dCwgSSYjMzk7bGwgc2hpZnQgZ2VhcnMgYW5kIHRyYWNlIHRoZSBjYWxsZXJzIG9mIHRoZXNlIGtleSBmdW5jdGlvbnM6IGBjb2xsYXBzZV9wdGVfbWFwcGVkX3RocGAsIGBjb2xsYXBzZV9zaW5nbGVfcG1kYCwgYW5kLCBhZ2FpbiwgYG1hZHZpc2VfY29sbGFwc2VgLiBJZGVudGlmeWluZyB3aGVyZSB0aGVzZSBhcmUgYmVpbmcgY2FsbGVkIGZyb20gd2lsbCBwYWludCBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhlIG1lbW9yeSBtYW5pcHVsYXRpb24gd29ya2Zsb3cuIFNlZWluZyB0aGUgY2FsbCBjaGFpbnMgd2lsbCBnaXZlIG1lIGluc2lnaHQgaW50byB0aGUgdHJpZ2dlcmluZyBtZWNoYW5pc21zLiBJJiMzOTttIGFmdGVyIHRoZSBiaWdnZXIgcGljdHVyZTogd2hhdCBzY2VuYXJpb3MgYXJlIGNhdXNpbmcgVEhQIGNvbGxhcHNlLCB3aGF0IGNvZGUgcGF0aHMgZG8gdGhlIGZ1bmN0aW9ucyB0YWtlLCBhbmQgaG93IGRvZXMgYG1hZHZpc2VgIGluZmx1ZW5jZSB0aGUgd2hvbGUgcHJvY2Vzcz8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwMjo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb2xsYXBzZV9wdGVfbWFwcGVkX3RocCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9raHVnZXBhZ2VkLmM9MTgxNT1zdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBzZXRfaHVnZV9wbWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMTg1MC1cbm1tL2todWdlcGFnZWQuYzoxODUxOnN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IHRyeV9jb2xsYXBzZV9wdGVfbWFwcGVkX3RocChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxubW0va2h1Z2VwYWdlZC5jLTE4NTItXHRcdGJvb2wgaW5zdGFsbF9wbWQpXG4tLVxubW0va2h1Z2VwYWdlZC5jLTIwODQtLyoqXG5tbS9raHVnZXBhZ2VkLmM6MjA4NTogKiBjb2xsYXBzZV9wdGVfbWFwcGVkX3RocCAtIFRyeSB0byBjb2xsYXBzZSBhIHB0ZS1tYXBwZWQgVEhQIGZvciBtbSBhdFxubW0va2h1Z2VwYWdlZC5jLTIwODYtICogYWRkcmVzcyBoYWRkci5cbi0tXG5tbS9raHVnZXBhZ2VkLmMtMjA5NS0gKi9cbm1tL2todWdlcGFnZWQuYzoyMDk2OnZvaWQgY29sbGFwc2VfcHRlX21hcHBlZF90aHAoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbm1tL2todWdlcGFnZWQuYy0yMDk3LVx0XHRib29sIGluc3RhbGxfcG1kKVxubW0va2h1Z2VwYWdlZC5jLTIwOTgte1xubW0va2h1Z2VwYWdlZC5jOjIwOTk6XHR0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHAobW0sIGFkZHIsIGluc3RhbGxfcG1kKTtcbm1tL2todWdlcGFnZWQuYy0yMTAwLX1cbi0tXG5tbS9raHVnZXBhZ2VkLmM9MjI0OT1zdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBjb2xsYXBzZV9maWxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxubW0va2h1Z2VwYWdlZC5jLTI2MjgtXHQgKiBSZW1vdmUgcHRlIHBhZ2UgdGFibGVzLCBzbyB3ZSBjYW4gcmUtZmF1bHQgdGhlIHBhZ2UgYXMgaHVnZS5cbm1tL2todWdlcGFnZWQuYzoyNjI5Olx0ICogSWYgTUFEVl9DT0xMQVBTRSwgYWRqdXN0IHJlc3VsdCB0byBjYWxsIHRyeV9jb2xsYXBzZV9wdGVfbWFwcGVkX3RocCgpLlxubW0va2h1Z2VwYWdlZC5jLTI2MzAtXHQgKi9cbi0tXG5tbS9raHVnZXBhZ2VkLmM9Mjc5MT1zdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBjb2xsYXBzZV9zaW5nbGVfcG1kKHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMjgzNS1cdFx0ZWxzZVxubW0va2h1Z2VwYWdlZC5jOjI4MzY6XHRcdFx0cmVzdWx0ID0gdHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwKG1tLCBhZGRyLFxubW0va2h1Z2VwYWdlZC5jLTI4MzctXHRcdFx0XHRcdFx0XHQgICAgICFjYy1cdTAwM2Vpc19raHVnZXBhZ2VkKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwMjo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MDE2CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIGBjb2xsYXBzZV9wdGVfbWFwcGVkX3RocGAgQ2FsbCBTaXRlcyoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCB0byB3b3JrLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gdW5kZXJzdGFuZGluZyB0aGUgc2NvcGUgb2YgdGhlIGBjb2xsYXBzZV9wdGVfbWFwcGVkX3RocGAgZnVuY3Rpb24uIEkgbmVlZCB0byBmaWd1cmUgb3V0IGV2ZXJ5d2hlcmUgaXQmIzM5O3MgKnVzZWQqIHdpdGhpbiB0aGUga2VybmVsLCBhbmQgdGhlIG1vc3QgZWZmaWNpZW50IHdheSB0byBkbyB0aGF0IGlzLCBvZiBjb3Vyc2UsIHRvIHN0YXJ0IGJ5IHRyYWNpbmcgdGhvc2UgY2FsbCBzaXRlcy4gVGhhdOKAmXMgdGhlIGZpcnN0IHN0ZXAgdG8gdW5kZXJzdGFuZGluZyBpdHMgaW1wYWN0IGFuZCBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgc3Vic3lzdGVtcy4gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBkaWZmZXJlbnQgY29udGV4dHMgaXQgaXMgdXNlZCBpbiB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDI6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29sbGFwc2VfcHRlX21hcHBlZF90aHAmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9raHVnZXBhZ2VkLmg9MTk9ZXh0ZXJuIGJvb2wgY3VycmVudF9pc19raHVnZXBhZ2VkKHZvaWQpO1xuaW5jbHVkZS9saW51eC9raHVnZXBhZ2VkLmg6MjA6dm9pZCBjb2xsYXBzZV9wdGVfbWFwcGVkX3RocChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuaW5jbHVkZS9saW51eC9raHVnZXBhZ2VkLmgtMjEtXHRcdGJvb2wgaW5zdGFsbF9wbWQpO1xuLS1cbmluY2x1ZGUvbGludXgva2h1Z2VwYWdlZC5oPTQxPXN0YXRpYyBpbmxpbmUgdm9pZCBraHVnZXBhZ2VkX2VudGVyX3ZtYShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5pbmNsdWRlL2xpbnV4L2todWdlcGFnZWQuaC00NC19XG5pbmNsdWRlL2xpbnV4L2todWdlcGFnZWQuaDo0NTpzdGF0aWMgaW5saW5lIHZvaWQgY29sbGFwc2VfcHRlX21hcHBlZF90aHAoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG5pbmNsdWRlL2xpbnV4L2todWdlcGFnZWQuaC00Ni1cdFx0dW5zaWduZWQgbG9uZyBhZGRyLCBib29sIGluc3RhbGxfcG1kKVxuLS1cbmtlcm5lbC9ldmVudHMvdXByb2Jlcy5jPTQ5OT1pbnQgdXByb2JlX3dyaXRlKHN0cnVjdCBhcmNoX3Vwcm9iZSAqYXVwcm9iZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxua2VybmVsL2V2ZW50cy91cHJvYmVzLmMtNTk5LVx0aWYgKHJldCBcdTAwM2UgMClcbmtlcm5lbC9ldmVudHMvdXByb2Jlcy5jOjYwMDpcdFx0Y29sbGFwc2VfcHRlX21hcHBlZF90aHAobW0sIHZhZGRyLCBmYWxzZSk7XG5rZXJuZWwvZXZlbnRzL3Vwcm9iZXMuYy02MDEtXG4tLVxubW0va2h1Z2VwYWdlZC5jPTE4MTU9c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgc2V0X2h1Z2VfcG1kKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxubW0va2h1Z2VwYWdlZC5jLTE4NTAtXG5tbS9raHVnZXBhZ2VkLmM6MTg1MTpzdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCB0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHAoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbm1tL2todWdlcGFnZWQuYy0xODUyLVx0XHRib29sIGluc3RhbGxfcG1kKVxuLS1cbm1tL2todWdlcGFnZWQuYy0yMDg0LS8qKlxubW0va2h1Z2VwYWdlZC5jOjIwODU6ICogY29sbGFwc2VfcHRlX21hcHBlZF90aHAgLSBUcnkgdG8gY29sbGFwc2UgYSBwdGUtbWFwcGVkIFRIUCBmb3IgbW0gYXRcbm1tL2todWdlcGFnZWQuYy0yMDg2LSAqIGFkZHJlc3MgaGFkZHIuXG4tLVxubW0va2h1Z2VwYWdlZC5jLTIwOTUtICovXG5tbS9raHVnZXBhZ2VkLmM6MjA5Njp2b2lkIGNvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG5tbS9raHVnZXBhZ2VkLmMtMjA5Ny1cdFx0Ym9vbCBpbnN0YWxsX3BtZClcbm1tL2todWdlcGFnZWQuYy0yMDk4LXtcbm1tL2todWdlcGFnZWQuYzoyMDk5Olx0dHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwKG1tLCBhZGRyLCBpbnN0YWxsX3BtZCk7XG5tbS9raHVnZXBhZ2VkLmMtMjEwMC19XG4tLVxubW0va2h1Z2VwYWdlZC5jPTIyNDk9c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2VfZmlsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbm1tL2todWdlcGFnZWQuYy0yNjI4LVx0ICogUmVtb3ZlIHB0ZSBwYWdlIHRhYmxlcywgc28gd2UgY2FuIHJlLWZhdWx0IHRoZSBwYWdlIGFzIGh1Z2UuXG5tbS9raHVnZXBhZ2VkLmM6MjYyOTpcdCAqIElmIE1BRFZfQ09MTEFQU0UsIGFkanVzdCByZXN1bHQgdG8gY2FsbCB0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHAoKS5cbm1tL2todWdlcGFnZWQuYy0yNjMwLVx0ICovXG4tLVxubW0va2h1Z2VwYWdlZC5jPTI3OTE9c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2Vfc2luZ2xlX3BtZCh1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxubW0va2h1Z2VwYWdlZC5jLTI4MzUtXHRcdGVsc2Vcbm1tL2todWdlcGFnZWQuYzoyODM2Olx0XHRcdHJlc3VsdCA9IHRyeV9jb2xsYXBzZV9wdGVfbWFwcGVkX3RocChtbSwgYWRkcixcbm1tL2todWdlcGFnZWQuYy0yODM3LVx0XHRcdFx0XHRcdFx0ICAgICAhY2MtXHUwMDNlaXNfa2h1Z2VwYWdlZCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDAyOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkxMTIKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIE1lbW9yeSBNYW5hZ2VtZW50IFRlY2huaXF1ZXM6IENvbGxhcHNpbmcgTWVtb3J5IFJlZ2lvbnMqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW4gYW5kIGZpZ3VyZSBvdXQgZXhhY3RseSB3aGF0JiMzOTtzIHVzaW5nIGBtYWR2aXNlX2NvbGxhcHNlYCBvciwgbW9yZSBnZW5lcmFsbHksIGBtYWR2aXNlYCBpbiBjb25qdW5jdGlvbiB3aXRoIGBNQURWX0NPTExBUFNFYC4gTXkgaW5pdGlhbCBwbGFuIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQg4oCTIEkmIzM5O2xsIHN0YXJ0IHdpdGggYSBnb29kIG9sZCBgZ3JlcGAgc2VhcmNoIGZvciBpbnN0YW5jZXMgb2YgYG1hZHZpc2VfY29sbGFwc2VgIHdpdGhpbiB0aGUgcmVsZXZhbnQgY29kZWJhc2UuIFRoaXMgd2lsbCBiZSB0aGUgZmlyc3Qgc3RlcCB0byB1bmRlcnN0YW5kIHdobyBpcyB1c2luZyBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDI6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWFkdmlzZV9jb2xsYXBzZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL3RyYW5zaHVnZS5yc3Q9MzQ2PUEgaGlnaGVyIHZhbHVlIG1heSBpbmNyZWFzZSBtZW1vcnkgZm9vdHByaW50IGZvciBzb21lIHdvcmtsb2Fkcy5cbi0tXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL3RyYW5zaHVnZS5yc3QtMzUzLVxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS90cmFuc2h1Z2UucnN0OjM1NDogICBDdXJyZW50bHksIG1hZHZpc2VfY29sbGFwc2Ugb25seSBzdXBwb3J0cyBjb2xsYXBzaW5nIHRvIFBNRC1zaXplZCBUSFBzXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL3RyYW5zaHVnZS5yc3QtMzU1LSAgIGFuZCBkb2VzIG5vdCBhdHRlbXB0IG1USFAgY29sbGFwc2VzLlxuLS1cbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oPTUxMT1pbnQgaHVnZXBhZ2VfbWFkdmlzZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdm1fZmxhZ3NfdCAqdm1fZmxhZ3MsXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC01MTItXHRcdCAgICAgaW50IGFkdmljZSk7XG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDo1MTM6aW50IG1hZHZpc2VfY29sbGFwc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC01MTQtXHRcdCAgICAgdW5zaWduZWQgbG9uZyBlbmQsIGJvb2wgKmxvY2tfZHJvcHBlZCk7XG4tLVxuaW5jbHVkZS9saW51eC9odWdlX21tLmg9NzEyPXN0YXRpYyBpbmxpbmUgaW50IGh1Z2VwYWdlX21hZHZpc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNzE3LVxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6NzE4OnN0YXRpYyBpbmxpbmUgaW50IG1hZHZpc2VfY29sbGFwc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC03MTktXHRcdFx0XHQgICB1bnNpZ25lZCBsb25nIHN0YXJ0LFxuLS1cbm1tL2todWdlcGFnZWQuYz0zMTUyPWJvb2wgY3VycmVudF9pc19raHVnZXBhZ2VkKHZvaWQpXG4tLVxubW0va2h1Z2VwYWdlZC5jLTMxNTYtXG5tbS9raHVnZXBhZ2VkLmM6MzE1NzpzdGF0aWMgaW50IG1hZHZpc2VfY29sbGFwc2VfZXJybm8oZW51bSBzY2FuX3Jlc3VsdCByKVxubW0va2h1Z2VwYWdlZC5jLTMxNTgte1xuLS1cbm1tL2todWdlcGFnZWQuYy0zMTg4LVxubW0va2h1Z2VwYWdlZC5jOjMxODk6aW50IG1hZHZpc2VfY29sbGFwc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG5tbS9raHVnZXBhZ2VkLmMtMzE5MC1cdFx0ICAgICB1bnNpZ25lZCBsb25nIGVuZCwgYm9vbCAqbG9ja19kcm9wcGVkKVxuLS1cbm1tL2todWdlcGFnZWQuYy0zMjc2LVx0cmV0dXJuIHRocHMgPT0gKChoZW5kIC0gaHN0YXJ0KSBcdTAwM2VcdTAwM2UgSFBBR0VfUE1EX1NISUZUKSA/IDBcbm1tL2todWdlcGFnZWQuYzozMjc3Olx0XHRcdDogbWFkdmlzZV9jb2xsYXBzZV9lcnJubyhsYXN0X2ZhaWwpO1xubW0va2h1Z2VwYWdlZC5jLTMyNzgtfVxuLS1cbm1tL21hZHZpc2UuYz0xMzQ3PXN0YXRpYyBpbnQgbWFkdmlzZV92bWFfYmVoYXZpb3Ioc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXG4tLVxubW0vbWFkdmlzZS5jLTEzNzEtXHRjYXNlIE1BRFZfQ09MTEFQU0U6XG5tbS9tYWR2aXNlLmM6MTM3MjpcdFx0cmV0dXJuIG1hZHZpc2VfY29sbGFwc2Uodm1hLCByYW5nZS1cdTAwM2VzdGFydCwgcmFuZ2UtXHUwMDNlZW5kLFxubW0vbWFkdmlzZS5jLTEzNzMtXHRcdFx0XHUwMDI2bWFkdl9iZWhhdmlvci1cdTAwM2Vsb2NrX2Ryb3BwZWQpO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYz0yMzU9c3RhdGljIHZvaWQgZmlsbF9tZW1vcnkoaW50ICpwLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMtMjQ4LSAqL1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jOjI0OTpzdGF0aWMgaW50IG1hZHZpc2VfY29sbGFwc2VfcmV0cnkodm9pZCAqcCwgdW5zaWduZWQgbG9uZyBzaXplKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jLTI1MC17XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jPTI2Nz1zdGF0aWMgdm9pZCAqYWxsb2NfaHBhZ2Uoc3RydWN0IG1lbV9vcHMgKm9wcylcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMtMjgwLVx0a3NmdF9wcmludF9tc2coXCYjMzQ7QWxsb2NhdGUgaHVnZSBwYWdlLi4uXCYjMzQ7KTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYzoyODE6XHRpZiAobWFkdmlzZV9jb2xsYXBzZV9yZXRyeShwLCBocGFnZV9wbWRfc2l6ZSkpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMtMjgyLVx0XHRrc2Z0X2V4aXRfZmFpbF9wZXJyb3IoXCYjMzQ7bWFkdmlzZShNQURWX0NPTExBUFNFKVwmIzM0Oyk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jPTUxMT1zdGF0aWMgYm9vbCBpc19hbm9uKHN0cnVjdCBtZW1fb3BzICpvcHMpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jLTUxNS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYzo1MTY6c3RhdGljIHZvaWQgX19tYWR2aXNlX2NvbGxhcHNlKGNvbnN0IGNoYXIgKm1zZywgY2hhciAqcCwgaW50IG5yX2hwYWdlcyxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYy01MTctXHRcdFx0ICAgICAgIHN0cnVjdCBtZW1fb3BzICpvcHMsIGJvb2wgZXhwZWN0KVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYy01MzktXHRtYWR2aXNlKHAsIG5yX2hwYWdlcyAqIGhwYWdlX3BtZF9zaXplLCBNQURWX0hVR0VQQUdFKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYzo1NDA6XHRyZXQgPSBtYWR2aXNlX2NvbGxhcHNlX3JldHJ5KHAsIG5yX2hwYWdlcyAqIGhwYWdlX3BtZF9zaXplKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYy01NDEtXHRpZiAoKChib29sKXJldCkgPT0gZXhwZWN0KVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYy01NTAtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmM6NTUxOnN0YXRpYyB2b2lkIG1hZHZpc2VfY29sbGFwc2UoY29uc3QgY2hhciAqbXNnLCBjaGFyICpwLCBpbnQgbnJfaHBhZ2VzLFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jLTU1Mi1cdFx0XHQgICAgIHN0cnVjdCBtZW1fb3BzICpvcHMsIGJvb2wgZXhwZWN0KVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYy01NTYtXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDtVbmV4cGVjdGVkIGh1Z2UgcGFnZVxcblwmIzM0Oyk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmM6NTU3Olx0X19tYWR2aXNlX2NvbGxhcHNlKG1zZywgcCwgbnJfaHBhZ2VzLCBvcHMsIGV4cGVjdCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMtNTU4LX1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmM9NjgwPXN0YXRpYyBzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCBfX21hZHZpc2VfY29udGV4dCA9IHtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYzo2ODE6XHQuY29sbGFwc2UgPSBcdTAwMjZtYWR2aXNlX2NvbGxhcHNlLFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jLTY4Mi1cdC5lbmZvcmNlX3B0ZV9zY2FuX2xpbWl0cyA9IGZhbHNlLFxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYz0xMDc2PXN0YXRpYyB2b2lkIGNvbGxhcHNlX21heF9wdGVzX3NoYXJlZChzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqYywgc3RydWN0IG1lbV9vcHMgKm9wcylcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMtMTEzMy1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYzoxMTM0OnN0YXRpYyB2b2lkIG1hZHZpc2VfY29sbGFwc2VfZXhpc3RpbmdfdGhwcyhzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqYyxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYy0xMTM1LVx0XHRcdFx0XHQgICBzdHJ1Y3QgbWVtX29wcyAqb3BzKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYy0xMTQ0LVx0LyogYy1cdTAwM2Vjb2xsYXBzZSgpIHdpbGwgZmluZCBhIGh1Z2VwYWdlIGFuZCBjb21wbGFpbiAtIGNhbGwgZGlyZWN0bHkuICovXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmM6MTE0NTpcdF9fbWFkdmlzZV9jb2xsYXBzZShcJiMzNDtSZS1jb2xsYXBzZSBQTUQtbWFwcGVkIGh1Z2VwYWdlXCYjMzQ7LCBwLCAxLCBvcHMsIHRydWUpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jLTExNDYtXHR2YWxpZGF0ZV9tZW1vcnkocCwgMCwgaHBhZ2VfcG1kX3NpemUpO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYz0xMzExPWludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMtMTQzMi1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYzoxNDMzOlx0VEVTVChtYWR2aXNlX2NvbGxhcHNlX2V4aXN0aW5nX3RocHMsIG1hZHZpc2VfY29udGV4dCwgYW5vbl9vcHMpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jOjE0MzQ6XHRURVNUKG1hZHZpc2VfY29sbGFwc2VfZXhpc3RpbmdfdGhwcywgbWFkdmlzZV9jb250ZXh0LCByZWFkX29ubHlfZmlsZV9vcHMpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jOjE0MzU6XHRURVNUKG1hZHZpc2VfY29sbGFwc2VfZXhpc3RpbmdfdGhwcywgbWFkdmlzZV9jb250ZXh0LCByZWFkX3dyaXRlX2ZpbGVfcmVhZF9vcHMpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jOjE0MzY6XHRURVNUKG1hZHZpc2VfY29sbGFwc2VfZXhpc3RpbmdfdGhwcywgbWFkdmlzZV9jb250ZXh0LCBzaG1lbV9vcHMpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jLTE0MzctXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDAyOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNDQwCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogNTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyBLZXJuZWwgSHVnZSBQYWdlIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgdGltZSB0byBkaWcgaW50byBob3cgYGtodWdlcGFnZWRgIGFuZCB0aGF0IHBlc2t5IGB1c2VyZmF1bHRmZF9taW5vcmAgYXJlIGNvbmZpZ3VyZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVzZSB0aGluZ3MuIEZpcnN0LCBJJiMzOTtsbCBnbyBzdHJhaWdodCB0byB0aGUgc291cmNlIOKAkyB0aGUgS2NvbmZpZyBmaWxlcy4gSSYjMzk7bGwgbmVlZCB0byBzZWUgaG93IHRoZSBzZXR0aW5ncyBpbiBga2h1Z2VwYWdlZC5jYCBhbmQgYHVzZXJmYXVsdGZkX21pbm9yYCBhcmUgY29udHJvbGxlZC4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYSBmb2N1c2VkIGdyZXAuIEkmIzM5O2xsIHNlYXJjaCBmb3IgcmVmZXJlbmNlcyB0byBga2h1Z2VwYWdlZGAgaW4gdGhlIGBtbS9NYWtlZmlsZWAgYW5kIGBtbS9LY29uZmlnYCBmaWxlcy4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2Qgb3ZlcnZpZXcgb2YgdGhlIGJ1aWxkIGRlcGVuZGVuY2llcyBhbmQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBGcm9tIHRoZXJlLCBJJiMzOTtsbCBiZSBhYmxlIHRvIGJ1aWxkIGEgbWVudGFsIG1hcCBvZiBob3cgdGhlc2UgZmVhdHVyZXMgYXJlIGVuYWJsZWQsIGRpc2FibGVkLCBhbmQgcG90ZW50aWFsbHkgdHVuZWQuIFRoaXMgS2NvbmZpZyBleHBsb3JhdGlvbiBzaG91bGQgc2hlZCBsaWdodCBvbiB0aGUgYnVpbGQtdGltZSBkZXBlbmRlbmNpZXMgYW5kIHBlcmhhcHMgc29tZSBvZiB0aGUgYnJvYWRlciBhcmNoaXRlY3R1cmUgaW52b2x2ZWQgaW4gaGFuZGxpbmcgaHVnZSBwYWdlcyBhbmQgdXNlciBmYXVsdCBoYW5kbGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDI6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a2h1Z2VwYWdlZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgODYyIGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG5tbS9NYWtlZmlsZT0xMDA9b2JqLSQoQ09ORklHX0RFVklDRV9NSUdSQVRJT04pICYjNDM7PSBtaWdyYXRlX2RldmljZS5vXG5tbS9NYWtlZmlsZToxMDE6b2JqLSQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSAmIzQzOz0gaHVnZV9tZW1vcnkubyBraHVnZXBhZ2VkLm9cbm1tL01ha2VmaWxlLTEwMi1vYmotJChDT05GSUdfUEFHRV9DT1VOVEVSKSAmIzQzOz0gcGFnZV9jb3VudGVyLm9cbi0tXG5tbS9odWdlX21lbW9yeS5jLTIzLSNpbmNsdWRlIFx1MDAzY2xpbnV4L21tX3R5cGVzLmhcdTAwM2Vcbm1tL2h1Z2VfbWVtb3J5LmM6MjQ6I2luY2x1ZGUgXHUwMDNjbGludXgva2h1Z2VwYWdlZC5oXHUwMDNlXG5tbS9odWdlX21lbW9yeS5jLTI1LSNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZyZWV6ZXIuaFx1MDAzZVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNTYtICogZ3VhcmFudGVlZCB0byBiZW5lZml0IGZyb20gaXQuIFdoZW4gdHJhbnNwYXJlbnQgaHVnZXBhZ2Ugc3VwcG9ydCBpc1xubW0vaHVnZV9tZW1vcnkuYzo1NzogKiBlbmFibGVkLCBpdCBpcyBmb3IgYWxsIG1hcHBpbmdzLCBhbmQga2h1Z2VwYWdlZCBzY2FucyBhbGwgbWFwcGluZ3MuXG5tbS9odWdlX21lbW9yeS5jOjU4OiAqIERlZnJhZyBpcyBpbnZva2VkIGJ5IGtodWdlcGFnZWQgaHVnZXBhZ2UgYWxsb2NhdGlvbnMgYW5kIGJ5IHBhZ2UgZmF1bHRzXG5tbS9odWdlX21lbW9yeS5jLTU5LSAqIGZvciBhbGwgaHVnZXBhZ2UgYWxsb2NhdGlvbnMuXG4tLVxubW0vaHVnZV9tZW1vcnkuYz0xMjE9dW5zaWduZWQgbG9uZyBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVycyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9odWdlX21lbW9yeS5jLTE0OC1cbm1tL2h1Z2VfbWVtb3J5LmM6MTQ5Olx0Lyoga2h1Z2VwYWdlZCBkb2VzbiYjMzk7dCBjb2xsYXBzZSBEQVggdm1hLCBidXQgcGFnZSBmYXVsdCBpcyBmaW5lLiAqL1xubW0vaHVnZV9tZW1vcnkuYy0xNTAtXHRpZiAodm1hX2lzX2RheCh2bWEpKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMTUzLVx0Lypcbm1tL2h1Z2VfbWVtb3J5LmM6MTU0Olx0ICoga2h1Z2VwYWdlZCBzcGVjaWFsIFZNQSBhbmQgaHVnZXRsYiBWTUEuXG5tbS9odWdlX21lbW9yeS5jLTE1NS1cdCAqIE11c3QgYmUgY2hlY2tlZCBhZnRlciBkYXggc2luY2Ugc29tZSBkYXggbWFwcGluZ3MgbWF5IGhhdmVcbi0tXG5tbS9odWdlX21lbW9yeS5jPTQ0NT1zdGF0aWMgc3NpemVfdCBlbmFibGVkX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDU1LVx0aWYgKHNldF9nbG9iYWxfZW5hYmxlZF9tb2RlKG1vZGUpKSB7XG5tbS9odWdlX21lbW9yeS5jOjQ1NjpcdFx0aW50IGVyciA9IHN0YXJ0X3N0b3Bfa2h1Z2VwYWdlZCgpO1xubW0vaHVnZV9tZW1vcnkuYy00NTctXG4tLVxubW0vaHVnZV9tZW1vcnkuYy00NjMtXHRcdCAqIGNoYW5nZSwgYXMgdGhlIHByZXZpb3VzIGNvZGUgYWx3YXlzIGNhbGxlZFxubW0vaHVnZV9tZW1vcnkuYzo0NjQ6XHRcdCAqIHN0YXJ0X3N0b3Bfa2h1Z2VwYWdlZCgpIHdoaWNoIGRvZXMgdGhpcyBpbnRlcm5hbGx5LlxubW0vaHVnZV9tZW1vcnkuYy00NjUtXHRcdCAqL1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9NjgwPXN0YXRpYyBzc2l6ZV90IGFub25fZW5hYmxlZF9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcbi0tXG5tbS9odWdlX21lbW9yeS5jLTY5MS1cdGlmIChzZXRfYW5vbl9lbmFibGVkX21vZGUob3JkZXIsIG1vZGUpKSB7XG5tbS9odWdlX21lbW9yeS5jOjY5MjpcdFx0aW50IGVyciA9IHN0YXJ0X3N0b3Bfa2h1Z2VwYWdlZCgpO1xubW0vaHVnZV9tZW1vcnkuYy02OTMtXG4tLVxubW0vaHVnZV9tZW1vcnkuYy02OTktXHRcdCAqIGNoYW5nZSwgYXMgdGhlIHByZXZpb3VzIGNvZGUgYWx3YXlzIGNhbGxlZFxubW0vaHVnZV9tZW1vcnkuYzo3MDA6XHRcdCAqIHN0YXJ0X3N0b3Bfa2h1Z2VwYWdlZCgpIHdoaWNoIGRvZXMgdGhpcyBpbnRlcm5hbGx5LlxubW0vaHVnZV9tZW1vcnkuYy03MDEtXHRcdCAqL1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9OTMzPXN0YXRpYyBpbnQgX19pbml0IGh1Z2VwYWdlX2luaXRfc3lzZnMoc3RydWN0IGtvYmplY3QgKipodWdlcGFnZV9rb2JqKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtOTU5LVxubW0vaHVnZV9tZW1vcnkuYzo5NjA6XHRlcnIgPSBzeXNmc19jcmVhdGVfZ3JvdXAoKmh1Z2VwYWdlX2tvYmosIFx1MDAyNmtodWdlcGFnZWRfYXR0cl9ncm91cCk7XG5tbS9odWdlX21lbW9yeS5jLTk2MS1cdGlmIChlcnIpIHtcbi0tXG5tbS9odWdlX21lbW9yeS5jPTk5MT1zdGF0aWMgdm9pZCBfX2luaXQgaHVnZXBhZ2VfZXhpdF9zeXNmcyhzdHJ1Y3Qga29iamVjdCAqaHVnZXBhZ2Vfa29iailcbi0tXG5tbS9odWdlX21lbW9yeS5jLTk5OS1cbm1tL2h1Z2VfbWVtb3J5LmM6MTAwMDpcdHN5c2ZzX3JlbW92ZV9ncm91cChodWdlcGFnZV9rb2JqLCBcdTAwMjZraHVnZXBhZ2VkX2F0dHJfZ3JvdXApO1xubW0vaHVnZV9tZW1vcnkuYy0xMDAxLVx0c3lzZnNfcmVtb3ZlX2dyb3VwKGh1Z2VwYWdlX2tvYmosIFx1MDAyNmh1Z2VwYWdlX2F0dHJfZ3JvdXApO1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MTA1MT1zdGF0aWMgaW50IF9faW5pdCBodWdlcGFnZV9pbml0KHZvaWQpXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0xMDY5LVxubW0vaHVnZV9tZW1vcnkuYzoxMDcwOlx0ZXJyID0ga2h1Z2VwYWdlZF9pbml0KCk7XG5tbS9odWdlX21lbW9yeS5jLTEwNzEtXHRpZiAoZXJyKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMTA4Ny1cbm1tL2h1Z2VfbWVtb3J5LmM6MTA4ODpcdGVyciA9IHN0YXJ0X3N0b3Bfa2h1Z2VwYWdlZCgpO1xubW0vaHVnZV9tZW1vcnkuYy0xMDg5LVx0aWYgKGVycilcbm1tL2h1Z2VfbWVtb3J5LmM6MTA5MDpcdFx0Z290byBlcnJfa2h1Z2VwYWdlZDtcbm1tL2h1Z2VfbWVtb3J5LmMtMTA5MS1cbm1tL2h1Z2VfbWVtb3J5LmMtMTA5Mi1cdHJldHVybiAwO1xubW0vaHVnZV9tZW1vcnkuYzoxMDkzOmVycl9raHVnZXBhZ2VkOlxubW0vaHVnZV9tZW1vcnkuYy0xMDk0LVx0dGhwX3Nocmlua2VyX2V4aXQoKTtcbm1tL2h1Z2VfbWVtb3J5LmMtMTA5NS1lcnJfc2hyaW5rZXI6XG5tbS9odWdlX21lbW9yeS5jOjEwOTY6XHRraHVnZXBhZ2VkX2Rlc3Ryb3koKTtcbm1tL2h1Z2VfbWVtb3J5LmMtMTA5Ny1lcnJfc2xhYjpcbi0tXG5tbS9odWdlX21lbW9yeS5jPTE1MjA9dm1fZmF1bHRfdCBkb19odWdlX3BtZF9hbm9ueW1vdXNfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbi0tXG5tbS9odWdlX21lbW9yeS5jLTE1MzAtXHRcdHJldHVybiByZXQ7XG5tbS9odWdlX21lbW9yeS5jOjE1MzE6XHRraHVnZXBhZ2VkX2VudGVyX3ZtYSh2bWEsIHZtYS1cdTAwM2V2bV9mbGFncyk7XG5tbS9odWdlX21lbW9yeS5jLTE1MzItXG4tLVxubW0vaHVnZV9tZW1vcnkuYz00NTYxPXN0YXRpYyBib29sIHRocF91bmRlcnVzZWQoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQ1NjUtXG5tbS9odWdlX21lbW9yeS5jOjQ1NjY6XHRpZiAoa2h1Z2VwYWdlZF9tYXhfcHRlc19ub25lID09IEhQQUdFX1BNRF9OUiAtIDEpXG5tbS9odWdlX21lbW9yeS5jLTQ1NjctXHRcdHJldHVybiBmYWxzZTtcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQ1NzMtXHRcdGlmIChwYWdlc19pZGVudGljYWwoZm9saW9fcGFnZShmb2xpbywgaSksIFpFUk9fUEFHRSgwKSkpIHtcbm1tL2h1Z2VfbWVtb3J5LmM6NDU3NDpcdFx0XHRpZiAoJiM0MzsmIzQzO251bV96ZXJvX3BhZ2VzIFx1MDAzZSBraHVnZXBhZ2VkX21heF9wdGVzX25vbmUpXG5tbS9odWdlX21lbW9yeS5jLTQ1NzUtXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQ1ODAtXHRcdFx0ICovXG5tbS9odWdlX21lbW9yeS5jOjQ1ODE6XHRcdFx0aWYgKCYjNDM7JiM0MztudW1fZmlsbGVkX3BhZ2VzIFx1MDAzZT0gSFBBR0VfUE1EX05SIC0ga2h1Z2VwYWdlZF9tYXhfcHRlc19ub25lKVxubW0vaHVnZV9tZW1vcnkuYy00NTgyLVx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuLS1cbm1tL2ludGVybmFsLmgtMTAtI2luY2x1ZGUgXHUwMDNjbGludXgvZnMuaFx1MDAzZVxubW0vaW50ZXJuYWwuaDoxMTojaW5jbHVkZSBcdTAwM2NsaW51eC9raHVnZXBhZ2VkLmhcdTAwM2Vcbm1tL2ludGVybmFsLmgtMTItI2luY2x1ZGUgXHUwMDNjbGludXgvbW0uaFx1MDAzZVxuLS1cbm1tL2ludGVybmFsLmg9NzA2PXBtZF90ICptbV9maW5kX3BtZChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKTtcbi0tXG5tbS9pbnRlcm5hbC5oLTcwOC0vKlxubW0vaW50ZXJuYWwuaDo3MDk6ICogaW4gbW0va2h1Z2VwYWdlZC5jXG5tbS9pbnRlcm5hbC5oLTcxMC0gKi9cbi0tXG5tbS9raHVnZXBhZ2VkLmMtMTEtI2luY2x1ZGUgXHUwMDNjbGludXgva3RocmVhZC5oXHUwMDNlXG5tbS9raHVnZXBhZ2VkLmM6MTI6I2luY2x1ZGUgXHUwMDNjbGludXgva2h1Z2VwYWdlZC5oXHUwMDNlXG5tbS9raHVnZXBhZ2VkLmMtMTMtI2luY2x1ZGUgXHUwMDNjbGludXgvZnJlZXplci5oXHUwMDNlXG4tLVxubW0va2h1Z2VwYWdlZC5jPTMzPWVudW0gc2Nhbl9yZXN1bHQge1xuLS1cbm1tL2todWdlcGFnZWQuYy03MC1cbm1tL2todWdlcGFnZWQuYzo3MTpzdGF0aWMgc3RydWN0IHRhc2tfc3RydWN0ICpraHVnZXBhZ2VkX3RocmVhZCBfX3JlYWRfbW9zdGx5O1xubW0va2h1Z2VwYWdlZC5jOjcyOnN0YXRpYyBERUZJTkVfTVVURVgoa2h1Z2VwYWdlZF9tdXRleCk7XG5tbS9raHVnZXBhZ2VkLmMtNzMtXG4tLVxubW0va2h1Z2VwYWdlZC5jLTc3LSAqL1xubW0va2h1Z2VwYWdlZC5jOjc4OnN0YXRpYyB1bnNpZ25lZCBpbnQga2h1Z2VwYWdlZF9wYWdlc190b19zY2FuIF9fcmVhZF9tb3N0bHk7XG5tbS9raHVnZXBhZ2VkLmM6Nzk6c3RhdGljIHVuc2lnbmVkIGludCBraHVnZXBhZ2VkX3BhZ2VzX2NvbGxhcHNlZDtcbm1tL2todWdlcGFnZWQuYzo4MDpzdGF0aWMgdW5zaWduZWQgaW50IGtodWdlcGFnZWRfZnVsbF9zY2Fucztcbm1tL2todWdlcGFnZWQuYzo4MTpzdGF0aWMgdW5zaWduZWQgaW50IGtodWdlcGFnZWRfc2Nhbl9zbGVlcF9taWxsaXNlY3MgX19yZWFkX21vc3RseSA9IDEwMDAwO1xubW0va2h1Z2VwYWdlZC5jLTgyLS8qIGR1cmluZyBmcmFnbWVudGF0aW9uIHBvbGwgdGhlIGh1Z2VwYWdlIGFsbG9jYXRvciBvbmNlIGV2ZXJ5IG1pbnV0ZSAqL1xubW0va2h1Z2VwYWdlZC5jOjgzOnN0YXRpYyB1bnNpZ25lZCBpbnQga2h1Z2VwYWdlZF9hbGxvY19zbGVlcF9taWxsaXNlY3MgX19yZWFkX21vc3RseSA9IDYwMDAwO1xubW0va2h1Z2VwYWdlZC5jOjg0OnN0YXRpYyB1bnNpZ25lZCBsb25nIGtodWdlcGFnZWRfc2xlZXBfZXhwaXJlO1xubW0va2h1Z2VwYWdlZC5jOjg1OnN0YXRpYyBERUZJTkVfU1BJTkxPQ0soa2h1Z2VwYWdlZF9tbV9sb2NrKTtcbm1tL2todWdlcGFnZWQuYzo4NjpzdGF0aWMgREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQoa2h1Z2VwYWdlZF93YWl0KTtcbm1tL2todWdlcGFnZWQuYy04Ny0vKlxuLS1cbm1tL2todWdlcGFnZWQuYy05MS0gKlxubW0va2h1Z2VwYWdlZC5jOjkyOiAqIE5vdGUgdGhhdCB0aGVzZSBhcmUgb25seSByZXNwZWN0ZWQgaWYgY29sbGFwc2Ugd2FzIGluaXRpYXRlZCBieSBraHVnZXBhZ2VkLlxubW0va2h1Z2VwYWdlZC5jLTkzLSAqL1xubW0va2h1Z2VwYWdlZC5jLTk0LSNkZWZpbmUgS0hVR0VQQUdFRF9NQVhfUFRFU19MSU1JVCAoSFBBR0VfUE1EX05SIC0gMSlcbm1tL2todWdlcGFnZWQuYzo5NTp1bnNpZ25lZCBpbnQga2h1Z2VwYWdlZF9tYXhfcHRlc19ub25lIF9fcmVhZF9tb3N0bHk7XG5tbS9raHVnZXBhZ2VkLmM6OTY6c3RhdGljIHVuc2lnbmVkIGludCBraHVnZXBhZ2VkX21heF9wdGVzX3N3YXAgX19yZWFkX21vc3RseTtcbm1tL2todWdlcGFnZWQuYzo5NzpzdGF0aWMgdW5zaWduZWQgaW50IGtodWdlcGFnZWRfbWF4X3B0ZXNfc2hhcmVkIF9fcmVhZF9tb3N0bHk7XG5tbS9raHVnZXBhZ2VkLmMtOTgtXG4tLVxubW0va2h1Z2VwYWdlZC5jPTEwNj1zdHJ1Y3QgY29sbGFwc2VfY29udHJvbCB7XG5tbS9raHVnZXBhZ2VkLmM6MTA3Olx0Ym9vbCBpc19raHVnZXBhZ2VkO1xubW0va2h1Z2VwYWdlZC5jLTEwOC1cbi0tXG5tbS9raHVnZXBhZ2VkLmMtMTExLVxubW0va2h1Z2VwYWdlZC5jOjExMjpcdC8qIE51bSBwYWdlcyBzY2FubmVkIChzZWUga2h1Z2VwYWdlZF9wYWdlc190b19zY2FuKSAqL1xubW0va2h1Z2VwYWdlZC5jLTExMy1cdHVuc2lnbmVkIGludCBwcm9ncmVzcztcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMTIyLS8qKlxubW0va2h1Z2VwYWdlZC5jOjEyMzogKiBzdHJ1Y3Qga2h1Z2VwYWdlZF9zY2FuIC0gY3Vyc29yIGZvciBzY2FubmluZ1xubW0va2h1Z2VwYWdlZC5jLTEyNC0gKiBAbW1faGVhZDogdGhlIGhlYWQgb2YgdGhlIG1tIGxpc3QgdG8gc2NhblxuLS1cbm1tL2todWdlcGFnZWQuYy0xMjctICpcbm1tL2todWdlcGFnZWQuYzoxMjg6ICogVGhlcmUgaXMgb25seSB0aGUgb25lIGtodWdlcGFnZWRfc2NhbiBpbnN0YW5jZSBvZiB0aGlzIGN1cnNvciBzdHJ1Y3R1cmUuXG5tbS9raHVnZXBhZ2VkLmMtMTI5LSAqL1xubW0va2h1Z2VwYWdlZC5jOjEzMDpzdHJ1Y3Qga2h1Z2VwYWdlZF9zY2FuIHtcbm1tL2todWdlcGFnZWQuYy0xMzEtXHRzdHJ1Y3QgbGlzdF9oZWFkIG1tX2hlYWQ7XG4tLVxubW0va2h1Z2VwYWdlZC5jLTEzNS1cbm1tL2todWdlcGFnZWQuYzoxMzY6c3RhdGljIHN0cnVjdCBraHVnZXBhZ2VkX3NjYW4ga2h1Z2VwYWdlZF9zY2FuID0ge1xubW0va2h1Z2VwYWdlZC5jOjEzNzpcdC5tbV9oZWFkID0gTElTVF9IRUFEX0lOSVQoa2h1Z2VwYWdlZF9zY2FuLm1tX2hlYWQpLFxubW0va2h1Z2VwYWdlZC5jLTEzOC19O1xuLS1cbm1tL2todWdlcGFnZWQuYz0xNDE9c3RhdGljIHNzaXplX3Qgc2Nhbl9zbGVlcF9taWxsaXNlY3Nfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMTQ0LXtcbm1tL2todWdlcGFnZWQuYzoxNDU6XHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwmIzM0OyV1XFxuXCYjMzQ7LCBraHVnZXBhZ2VkX3NjYW5fc2xlZXBfbWlsbGlzZWNzKTtcbm1tL2todWdlcGFnZWQuYy0xNDYtfVxuLS1cbm1tL2todWdlcGFnZWQuYz0xNDg9c3RhdGljIHNzaXplX3QgX19zbGVlcF9taWxsaXNlY3Nfc3RvcmUoY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQsXG4tLVxubW0va2h1Z2VwYWdlZC5jLTE1OC1cdCptaWxsaXNlY3MgPSBtc2Vjcztcbm1tL2todWdlcGFnZWQuYzoxNTk6XHRraHVnZXBhZ2VkX3NsZWVwX2V4cGlyZSA9IDA7XG5tbS9raHVnZXBhZ2VkLmM6MTYwOlx0d2FrZV91cF9pbnRlcnJ1cHRpYmxlKFx1MDAyNmtodWdlcGFnZWRfd2FpdCk7XG5tbS9raHVnZXBhZ2VkLmMtMTYxLVxuLS1cbm1tL2todWdlcGFnZWQuYz0xNjU9c3RhdGljIHNzaXplX3Qgc2Nhbl9zbGVlcF9taWxsaXNlY3Nfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXG4tLVxubW0va2h1Z2VwYWdlZC5jLTE2OC17XG5tbS9raHVnZXBhZ2VkLmM6MTY5Olx0cmV0dXJuIF9fc2xlZXBfbWlsbGlzZWNzX3N0b3JlKGJ1ZiwgY291bnQsIFx1MDAyNmtodWdlcGFnZWRfc2Nhbl9zbGVlcF9taWxsaXNlY3MpO1xubW0va2h1Z2VwYWdlZC5jLTE3MC19XG4tLVxubW0va2h1Z2VwYWdlZC5jPTE3ND1zdGF0aWMgc3NpemVfdCBhbGxvY19zbGVlcF9taWxsaXNlY3Nfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMTc3LXtcbm1tL2todWdlcGFnZWQuYzoxNzg6XHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwmIzM0OyV1XFxuXCYjMzQ7LCBraHVnZXBhZ2VkX2FsbG9jX3NsZWVwX21pbGxpc2Vjcyk7XG5tbS9raHVnZXBhZ2VkLmMtMTc5LX1cbi0tXG5tbS9raHVnZXBhZ2VkLmM9MTgxPXN0YXRpYyBzc2l6ZV90IGFsbG9jX3NsZWVwX21pbGxpc2Vjc19zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMTg0LXtcbm1tL2todWdlcGFnZWQuYzoxODU6XHRyZXR1cm4gX19zbGVlcF9taWxsaXNlY3Nfc3RvcmUoYnVmLCBjb3VudCwgXHUwMDI2a2h1Z2VwYWdlZF9hbGxvY19zbGVlcF9taWxsaXNlY3MpO1xubW0va2h1Z2VwYWdlZC5jLTE4Ni19XG4tLVxubW0va2h1Z2VwYWdlZC5jPTE5MD1zdGF0aWMgc3NpemVfdCBwYWdlc190b19zY2FuX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXG4tLVxubW0va2h1Z2VwYWdlZC5jLTE5My17XG5tbS9raHVnZXBhZ2VkLmM6MTk0Olx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcJiMzNDsldVxcblwmIzM0Oywga2h1Z2VwYWdlZF9wYWdlc190b19zY2FuKTtcbm1tL2todWdlcGFnZWQuYy0xOTUtfVxubW0va2h1Z2VwYWdlZC5jPTE5Nj1zdGF0aWMgc3NpemVfdCBwYWdlc190b19zY2FuX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbm1tL2todWdlcGFnZWQuYy0yMDYtXG5tbS9raHVnZXBhZ2VkLmM6MjA3Olx0a2h1Z2VwYWdlZF9wYWdlc190b19zY2FuID0gcGFnZXM7XG5tbS9raHVnZXBhZ2VkLmMtMjA4LVxuLS1cbm1tL2todWdlcGFnZWQuYz0yMTQ9c3RhdGljIHNzaXplX3QgcGFnZXNfY29sbGFwc2VkX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXG4tLVxubW0va2h1Z2VwYWdlZC5jLTIxNy17XG5tbS9raHVnZXBhZ2VkLmM6MjE4Olx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcJiMzNDsldVxcblwmIzM0Oywga2h1Z2VwYWdlZF9wYWdlc19jb2xsYXBzZWQpO1xubW0va2h1Z2VwYWdlZC5jLTIxOS19XG4tLVxubW0va2h1Z2VwYWdlZC5jPTIyMz1zdGF0aWMgc3NpemVfdCBmdWxsX3NjYW5zX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXG4tLVxubW0va2h1Z2VwYWdlZC5jLTIyNi17XG5tbS9raHVnZXBhZ2VkLmM6MjI3Olx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcJiMzNDsldVxcblwmIzM0Oywga2h1Z2VwYWdlZF9mdWxsX3NjYW5zKTtcbm1tL2todWdlcGFnZWQuYy0yMjgtfVxuLS1cbm1tL2todWdlcGFnZWQuYz0yMzg9c3RhdGljIHNzaXplX3QgZGVmcmFnX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbm1tL2todWdlcGFnZWQuYy0yNDQtfVxubW0va2h1Z2VwYWdlZC5jOjI0NTpzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGtodWdlcGFnZWRfZGVmcmFnX2F0dHIgPVxubW0va2h1Z2VwYWdlZC5jLTI0Ni1cdF9fQVRUUl9SVyhkZWZyYWcpO1xuLS1cbm1tL2todWdlcGFnZWQuYy0yNDgtLypcbm1tL2todWdlcGFnZWQuYzoyNDk6ICogbWF4X3B0ZXNfbm9uZSBjb250cm9scyBpZiBraHVnZXBhZ2VkIHNob3VsZCBjb2xsYXBzZSBodWdlcGFnZXMgb3ZlclxubW0va2h1Z2VwYWdlZC5jLTI1MC0gKiBhbnkgdW5tYXBwZWQgcHRlcyBpbiB0dXJuIHBvdGVudGlhbGx5IGluY3JlYXNpbmcgdGhlIG1lbW9yeVxubW0va2h1Z2VwYWdlZC5jOjI1MTogKiBmb290cHJpbnQgb2YgdGhlIHZtYXMuIFdoZW4gbWF4X3B0ZXNfbm9uZSBpcyAwIGtodWdlcGFnZWQgd2lsbCBub3Rcbm1tL2todWdlcGFnZWQuYy0yNTItICogcmVkdWNlIHRoZSBhdmFpbGFibGUgZnJlZSBtZW1vcnkgaW4gdGhlIHN5c3RlbSBhcyBpdFxubW0va2h1Z2VwYWdlZC5jLTI1My0gKiBydW5zLiBJbmNyZWFzaW5nIG1heF9wdGVzX25vbmUgd2lsbCBpbnN0ZWFkIHBvdGVudGlhbGx5IHJlZHVjZSB0aGVcbm1tL2todWdlcGFnZWQuYzoyNTQ6ICogZnJlZSBtZW1vcnkgaW4gdGhlIHN5c3RlbSBkdXJpbmcgdGhlIGtodWdlcGFnZWQgc2Nhbi5cbm1tL2todWdlcGFnZWQuYy0yNTUtICovXG5tbS9raHVnZXBhZ2VkLmM9MjU2PXN0YXRpYyBzc2l6ZV90IG1heF9wdGVzX25vbmVfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMjU5LXtcbm1tL2todWdlcGFnZWQuYzoyNjA6XHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwmIzM0OyV1XFxuXCYjMzQ7LCBraHVnZXBhZ2VkX21heF9wdGVzX25vbmUpO1xubW0va2h1Z2VwYWdlZC5jLTI2MS19XG5tbS9raHVnZXBhZ2VkLmM9MjYyPXN0YXRpYyBzc2l6ZV90IG1heF9wdGVzX25vbmVfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXG4tLVxubW0va2h1Z2VwYWdlZC5jLTI3Mi1cbm1tL2todWdlcGFnZWQuYzoyNzM6XHRraHVnZXBhZ2VkX21heF9wdGVzX25vbmUgPSBtYXhfcHRlc19ub25lO1xubW0va2h1Z2VwYWdlZC5jLTI3NC1cbi0tXG5tbS9raHVnZXBhZ2VkLmMtMjc2LX1cbm1tL2todWdlcGFnZWQuYzoyNzc6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBraHVnZXBhZ2VkX21heF9wdGVzX25vbmVfYXR0ciA9XG5tbS9raHVnZXBhZ2VkLmMtMjc4LVx0X19BVFRSX1JXKG1heF9wdGVzX25vbmUpO1xuLS1cbm1tL2todWdlcGFnZWQuYz0yODA9c3RhdGljIHNzaXplX3QgbWF4X3B0ZXNfc3dhcF9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbm1tL2todWdlcGFnZWQuYy0yODMte1xubW0va2h1Z2VwYWdlZC5jOjI4NDpcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCYjMzQ7JXVcXG5cJiMzNDssIGtodWdlcGFnZWRfbWF4X3B0ZXNfc3dhcCk7XG5tbS9raHVnZXBhZ2VkLmMtMjg1LX1cbi0tXG5tbS9raHVnZXBhZ2VkLmM9Mjg3PXN0YXRpYyBzc2l6ZV90IG1heF9wdGVzX3N3YXBfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXG4tLVxubW0va2h1Z2VwYWdlZC5jLTI5Ny1cbm1tL2todWdlcGFnZWQuYzoyOTg6XHRraHVnZXBhZ2VkX21heF9wdGVzX3N3YXAgPSBtYXhfcHRlc19zd2FwO1xubW0va2h1Z2VwYWdlZC5jLTI5OS1cbi0tXG5tbS9raHVnZXBhZ2VkLmMtMzAyLVxubW0va2h1Z2VwYWdlZC5jOjMwMzpzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGtodWdlcGFnZWRfbWF4X3B0ZXNfc3dhcF9hdHRyID1cbm1tL2todWdlcGFnZWQuYy0zMDQtXHRfX0FUVFJfUlcobWF4X3B0ZXNfc3dhcCk7XG4tLVxubW0va2h1Z2VwYWdlZC5jPTMwNj1zdGF0aWMgc3NpemVfdCBtYXhfcHRlc19zaGFyZWRfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMzA5LXtcbm1tL2todWdlcGFnZWQuYzozMTA6XHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwmIzM0OyV1XFxuXCYjMzQ7LCBraHVnZXBhZ2VkX21heF9wdGVzX3NoYXJlZCk7XG5tbS9raHVnZXBhZ2VkLmMtMzExLX1cbi0tXG5tbS9raHVnZXBhZ2VkLmM9MzEzPXN0YXRpYyBzc2l6ZV90IG1heF9wdGVzX3NoYXJlZF9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMzIzLVxubW0va2h1Z2VwYWdlZC5jOjMyNDpcdGtodWdlcGFnZWRfbWF4X3B0ZXNfc2hhcmVkID0gbWF4X3B0ZXNfc2hhcmVkO1xubW0va2h1Z2VwYWdlZC5jLTMyNS1cbi0tXG5tbS9raHVnZXBhZ2VkLmMtMzI4LVxubW0va2h1Z2VwYWdlZC5jOjMyOTpzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGtodWdlcGFnZWRfbWF4X3B0ZXNfc2hhcmVkX2F0dHIgPVxubW0va2h1Z2VwYWdlZC5jLTMzMC1cdF9fQVRUUl9SVyhtYXhfcHRlc19zaGFyZWQpO1xubW0va2h1Z2VwYWdlZC5jLTMzMS1cbm1tL2todWdlcGFnZWQuYzozMzI6c3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmtodWdlcGFnZWRfYXR0cltdID0ge1xubW0va2h1Z2VwYWdlZC5jOjMzMzpcdFx1MDAyNmtodWdlcGFnZWRfZGVmcmFnX2F0dHIuYXR0cixcbm1tL2todWdlcGFnZWQuYzozMzQ6XHRcdTAwMjZraHVnZXBhZ2VkX21heF9wdGVzX25vbmVfYXR0ci5hdHRyLFxubW0va2h1Z2VwYWdlZC5jOjMzNTpcdFx1MDAyNmtodWdlcGFnZWRfbWF4X3B0ZXNfc3dhcF9hdHRyLmF0dHIsXG5tbS9raHVnZXBhZ2VkLmM6MzM2Olx0XHUwMDI2a2h1Z2VwYWdlZF9tYXhfcHRlc19zaGFyZWRfYXR0ci5hdHRyLFxubW0va2h1Z2VwYWdlZC5jLTMzNy1cdFx1MDAyNnBhZ2VzX3RvX3NjYW5fYXR0ci5hdHRyLFxuLS1cbm1tL2todWdlcGFnZWQuYy0zNDQtXG5tbS9raHVnZXBhZ2VkLmM6MzQ1OnN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAga2h1Z2VwYWdlZF9hdHRyX2dyb3VwID0ge1xubW0va2h1Z2VwYWdlZC5jOjM0NjpcdC5hdHRycyA9IGtodWdlcGFnZWRfYXR0cixcbm1tL2todWdlcGFnZWQuYzozNDc6XHQubmFtZSA9IFwmIzM0O2todWdlcGFnZWRcJiMzNDssXG5tbS9raHVnZXBhZ2VkLmMtMzQ4LX07XG4tLVxubW0va2h1Z2VwYWdlZC5jPTM2Nz1zdGF0aWMgdW5zaWduZWQgaW50IGNvbGxhcHNlX21heF9wdGVzX25vbmUoc3RydWN0IGNvbGxhcHNlX2NvbnRyb2wgKmNjLFxuLS1cbm1tL2todWdlcGFnZWQuYy0zNjkte1xubW0va2h1Z2VwYWdlZC5jOjM3MDpcdGNvbnN0IHVuc2lnbmVkIGludCBtYXhfcHRlc19ub25lID0ga2h1Z2VwYWdlZF9tYXhfcHRlc19ub25lO1xubW0va2h1Z2VwYWdlZC5jLTM3MS1cbi0tXG5tbS9raHVnZXBhZ2VkLmMtMzc0LVx0LyogZm9yIE1BRFZfQ09MTEFQU0UsIGFsbG93IGFueSBlbXB0eS9zaGFyZWQgemVyb3BhZ2UgUFRFcyAqL1xubW0va2h1Z2VwYWdlZC5jOjM3NTpcdGlmICghY2MtXHUwMDNlaXNfa2h1Z2VwYWdlZClcbm1tL2todWdlcGFnZWQuYy0zNzYtXHRcdHJldHVybiBIUEFHRV9QTURfTlI7XG4tLVxubW0va2h1Z2VwYWdlZC5jPTQwNj1zdGF0aWMgdW5zaWduZWQgaW50IGNvbGxhcHNlX21heF9wdGVzX3NoYXJlZChzdHJ1Y3QgY29sbGFwc2VfY29udHJvbCAqY2MsXG4tLVxubW0va2h1Z2VwYWdlZC5jLTQxMi1cdCAqL1xubW0va2h1Z2VwYWdlZC5jOjQxMzpcdGlmICghY2MtXHUwMDNlaXNfa2h1Z2VwYWdlZClcbm1tL2todWdlcGFnZWQuYy00MTQtXHRcdHJldHVybiBIUEFHRV9QTURfTlI7XG4tLVxubW0va2h1Z2VwYWdlZC5jLTQyMS1cdC8qIGZvciBQTUQgY29sbGFwc2UsIHJlc3BlY3QgdGhlIHVzZXIgZGVmaW5lZCBtYXhpbXVtICovXG5tbS9raHVnZXBhZ2VkLmM6NDIyOlx0cmV0dXJuIGtodWdlcGFnZWRfbWF4X3B0ZXNfc2hhcmVkO1xubW0va2h1Z2VwYWdlZC5jLTQyMy19XG4tLVxubW0va2h1Z2VwYWdlZC5jPTQzND1zdGF0aWMgdW5zaWduZWQgaW50IGNvbGxhcHNlX21heF9wdGVzX3N3YXAoc3RydWN0IGNvbGxhcHNlX2NvbnRyb2wgKmNjLFxuLS1cbm1tL2todWdlcGFnZWQuYy00NDAtXHQgKi9cbm1tL2todWdlcGFnZWQuYzo0NDE6XHRpZiAoIWNjLVx1MDAzZWlzX2todWdlcGFnZWQpXG5tbS9raHVnZXBhZ2VkLmMtNDQyLVx0XHRyZXR1cm4gSFBBR0VfUE1EX05SO1xuLS1cbm1tL2todWdlcGFnZWQuYy00NDYtXHQvKiBmb3IgUE1EIGNvbGxhcHNlLCByZXNwZWN0IHRoZSB1c2VyIGRlZmluZWQgbWF4aW11bSAqL1xubW0va2h1Z2VwYWdlZC5jOjQ0NzpcdHJldHVybiBraHVnZXBhZ2VkX21heF9wdGVzX3N3YXA7XG5tbS9raHVnZXBhZ2VkLmMtNDQ4LX1cbi0tXG5tbS9raHVnZXBhZ2VkLmM9NDUwPWludCBodWdlcGFnZV9tYWR2aXNlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL2todWdlcGFnZWQuYy00NjEtXHRcdC8qXG5tbS9raHVnZXBhZ2VkLmM6NDYyOlx0XHQgKiBTZXR0aW5nIFZNX05PSFVHRVBBR0Ugd2lsbCBwcmV2ZW50IGtodWdlcGFnZWQgZnJvbSBzY2FubmluZ1xubW0va2h1Z2VwYWdlZC5jOjQ2MzpcdFx0ICogdGhpcyB2bWEgZXZlbiBpZiB3ZSBsZWF2ZSB0aGUgbW0gcmVnaXN0ZXJlZCBpbiBraHVnZXBhZ2VkIGlmXG5tbS9raHVnZXBhZ2VkLmMtNDY0LVx0XHQgKiBpdCBnb3QgcmVnaXN0ZXJlZCBiZWZvcmUgVk1fTk9IVUdFUEFHRSB3YXMgc2V0LlxuLS1cbm1tL2todWdlcGFnZWQuYy00NzEtXG5tbS9raHVnZXBhZ2VkLmM6NDcyOmludCBfX2luaXQga2h1Z2VwYWdlZF9pbml0KHZvaWQpXG5tbS9raHVnZXBhZ2VkLmMtNDczLXtcbi0tXG5tbS9raHVnZXBhZ2VkLmMtNDc3LVxubW0va2h1Z2VwYWdlZC5jOjQ3ODpcdGtodWdlcGFnZWRfcGFnZXNfdG9fc2NhbiA9IEhQQUdFX1BNRF9OUiAqIDg7XG5tbS9raHVnZXBhZ2VkLmM6NDc5Olx0a2h1Z2VwYWdlZF9tYXhfcHRlc19ub25lID0gS0hVR0VQQUdFRF9NQVhfUFRFU19MSU1JVDtcbm1tL2todWdlcGFnZWQuYzo0ODA6XHRraHVnZXBhZ2VkX21heF9wdGVzX3N3YXAgPSBIUEFHRV9QTURfTlIgLyA4O1xubW0va2h1Z2VwYWdlZC5jOjQ4MTpcdGtodWdlcGFnZWRfbWF4X3B0ZXNfc2hhcmVkID0gSFBBR0VfUE1EX05SIC8gMjtcbm1tL2todWdlcGFnZWQuYy00ODItXG4tLVxubW0va2h1Z2VwYWdlZC5jLTQ4NS1cbm1tL2todWdlcGFnZWQuYzo0ODY6dm9pZCBfX2luaXQga2h1Z2VwYWdlZF9kZXN0cm95KHZvaWQpXG5tbS9raHVnZXBhZ2VkLmMtNDg3LXtcbi0tXG5tbS9raHVnZXBhZ2VkLmM9NTE0PXN0YXRpYyBib29sIGh1Z2VwYWdlX2VuYWJsZWQodm9pZClcbi0tXG5tbS9raHVnZXBhZ2VkLmMtNTMxLVxubW0va2h1Z2VwYWdlZC5jOjUzMjp2b2lkIF9fa2h1Z2VwYWdlZF9lbnRlcihzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbm1tL2todWdlcGFnZWQuYy01MzMte1xuLS1cbm1tL2todWdlcGFnZWQuYy01MzYtXG5tbS9raHVnZXBhZ2VkLmM6NTM3Olx0LyogX19raHVnZXBhZ2VkX2V4aXQoKSBtdXN0IG5vdCBydW4gZnJvbSB1bmRlciB1cyAqL1xubW0va2h1Z2VwYWdlZC5jLTUzOC1cdFZNX0JVR19PTl9NTShjb2xsYXBzZV90ZXN0X2V4aXQobW0pLCBtbSk7XG4tLVxubW0va2h1Z2VwYWdlZC5jLTU0OC1cbm1tL2todWdlcGFnZWQuYzo1NDk6XHRzcGluX2xvY2soXHUwMDI2a2h1Z2VwYWdlZF9tbV9sb2NrKTtcbm1tL2todWdlcGFnZWQuYy01NTAtXHRtbV9zbG90X2luc2VydChtbV9zbG90c19oYXNoLCBtbSwgc2xvdCk7XG4tLVxubW0va2h1Z2VwYWdlZC5jLTU1NC1cdCAqL1xubW0va2h1Z2VwYWdlZC5jOjU1NTpcdHdha2V1cCA9IGxpc3RfZW1wdHkoXHUwMDI2a2h1Z2VwYWdlZF9zY2FuLm1tX2hlYWQpO1xubW0va2h1Z2VwYWdlZC5jOjU1NjpcdGxpc3RfYWRkX3RhaWwoXHUwMDI2c2xvdC1cdTAwM2VtbV9ub2RlLCBcdTAwMjZraHVnZXBhZ2VkX3NjYW4ubW1faGVhZCk7XG5tbS9raHVnZXBhZ2VkLmM6NTU3Olx0c3Bpbl91bmxvY2soXHUwMDI2a2h1Z2VwYWdlZF9tbV9sb2NrKTtcbm1tL2todWdlcGFnZWQuYy01NTgtXG4tLVxubW0va2h1Z2VwYWdlZC5jLTU2MC1cdGlmICh3YWtldXApXG5tbS9raHVnZXBhZ2VkLmM6NTYxOlx0XHR3YWtlX3VwX2ludGVycnVwdGlibGUoXHUwMDI2a2h1Z2VwYWdlZF93YWl0KTtcbm1tL2todWdlcGFnZWQuYy01NjItfVxuLS1cbm1tL2todWdlcGFnZWQuYz01Njg9c3RhdGljIHVuc2lnbmVkIGxvbmcgY29sbGFwc2VfcG9zc2libGVfb3JkZXJzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL2todWdlcGFnZWQuYy01NzItXG5tbS9raHVnZXBhZ2VkLmM6NTczOlx0LyogSWYga2h1Z2VwYWdlZCBpcyBzY2FubmluZyBhbiBhbm9ueW1vdXMgdm1hLCBhbGxvdyBtVEhQIGNvbGxhcHNlICovXG5tbS9raHVnZXBhZ2VkLmMtNTc0LVx0aWYgKCh0dmFfZmxhZ3MgPT0gVFZBX0tIVUdFUEFHRUQpIFx1MDAyNlx1MDAyNiB2bWFfaXNfYW5vbnltb3VzKHZtYSkpXG4tLVxubW0va2h1Z2VwYWdlZC5jPTU4Mj1zdGF0aWMgYm9vbCBjb2xsYXBzZV9wb3NzaWJsZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9raHVnZXBhZ2VkLmMtNTg3LVxubW0va2h1Z2VwYWdlZC5jOjU4ODp2b2lkIGtodWdlcGFnZWRfZW50ZXJfdm1hKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxubW0va2h1Z2VwYWdlZC5jLTU4OS1cdFx0XHQgIHZtX2ZsYWdzX3Qgdm1fZmxhZ3MpXG4tLVxubW0va2h1Z2VwYWdlZC5jLTU5Mi1cdCAgICBcdTAwMjZcdTAwMjYgY29sbGFwc2VfcG9zc2libGUodm1hLCB2bV9mbGFncywgVFZBX0tIVUdFUEFHRUQpKVxubW0va2h1Z2VwYWdlZC5jOjU5MzpcdFx0X19raHVnZXBhZ2VkX2VudGVyKHZtYS1cdTAwM2V2bV9tbSk7XG5tbS9raHVnZXBhZ2VkLmMtNTk0LX1cbm1tL2todWdlcGFnZWQuYy01OTUtXG5tbS9raHVnZXBhZ2VkLmM6NTk2OnZvaWQgX19raHVnZXBhZ2VkX2V4aXQoc3RydWN0IG1tX3N0cnVjdCAqbW0pXG5tbS9raHVnZXBhZ2VkLmMtNTk3LXtcbi0tXG5tbS9raHVnZXBhZ2VkLmMtNjAwLVxubW0va2h1Z2VwYWdlZC5jOjYwMTpcdHNwaW5fbG9jayhcdTAwMjZraHVnZXBhZ2VkX21tX2xvY2spO1xubW0va2h1Z2VwYWdlZC5jLTYwMi1cdHNsb3QgPSBtbV9zbG90X2xvb2t1cChtbV9zbG90c19oYXNoLCBtbSk7XG5tbS9raHVnZXBhZ2VkLmM6NjAzOlx0aWYgKHNsb3QgXHUwMDI2XHUwMDI2IGtodWdlcGFnZWRfc2Nhbi5tbV9zbG90ICE9IHNsb3QpIHtcbm1tL2todWdlcGFnZWQuYy02MDQtXHRcdG1tX3Nsb3RfcmVtb3ZlKHNsb3QpO1xuLS1cbm1tL2todWdlcGFnZWQuYy02MDYtXHR9XG5tbS9raHVnZXBhZ2VkLmM6NjA3Olx0c3Bpbl91bmxvY2soXHUwMDI2a2h1Z2VwYWdlZF9tbV9sb2NrKTtcbm1tL2todWdlcGFnZWQuYy02MDgtXG4tLVxubW0va2h1Z2VwYWdlZC5jLTYxNy1cdFx0ICogdW5kZXIgbW1hcF9sb2NrIHJlYWQgbW9kZSkuIFN0b3AgaGVyZSAoYWZ0ZXIgd2UgcmV0dXJuIGFsbFxubW0va2h1Z2VwYWdlZC5jOjYxODpcdFx0ICogcGFnZXRhYmxlcyB3aWxsIGJlIGRlc3Ryb3llZCkgdW50aWwga2h1Z2VwYWdlZCBoYXMgZmluaXNoZWRcbm1tL2todWdlcGFnZWQuYy02MTktXHRcdCAqIHdvcmtpbmcgb24gdGhlIHBhZ2V0YWJsZXMgdW5kZXIgdGhlIG1tYXBfbG9jay5cbi0tXG5tbS9raHVnZXBhZ2VkLmM9Njg3PXN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IF9fY29sbGFwc2VfaHVnZV9wYWdlX2lzb2xhdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0va2h1Z2VwYWdlZC5jLTczMy1cdFx0ICovXG5tbS9raHVnZXBhZ2VkLmM6NzM0Olx0XHRpZiAoY2MtXHUwMDNlaXNfa2h1Z2VwYWdlZCBcdTAwMjZcdTAwMjYgISh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX0RST1BQQUJMRSkgXHUwMDI2XHUwMDI2XG5tbS9raHVnZXBhZ2VkLmMtNzM1LVx0XHQgICAgZm9saW9fdGVzdF9sYXp5ZnJlZShmb2xpbykgXHUwMDI2XHUwMDI2ICFwdGVfZGlydHkocHRldmFsKSkge1xuLS1cbm1tL2todWdlcGFnZWQuYy04MjItbmV4dDpcbm1tL2todWdlcGFnZWQuYzo4MjM6XHRcdGlmIChjYy1cdTAwM2Vpc19raHVnZXBhZ2VkIFx1MDAyNlx1MDAyNlxubW0va2h1Z2VwYWdlZC5jLTgyNC1cdFx0ICAgIGZvbGlvX3B0ZV9yZWZlcmVuY2VkKGZvbGlvLCB2bWEsIGFkZHIsIHB0ZXZhbCkpXG4tLVxubW0va2h1Z2VwYWdlZC5jLTgyNy1cbm1tL2todWdlcGFnZWQuYzo4Mjg6XHRpZiAodW5saWtlbHkoY2MtXHUwMDNlaXNfa2h1Z2VwYWdlZCBcdTAwMjZcdTAwMjYgIXJlZmVyZW5jZWQpKSB7XG5tbS9raHVnZXBhZ2VkLmMtODI5LVx0XHRyZXN1bHQgPSBTQ0FOX0xBQ0tfUkVGRVJFTkNFRF9QQUdFO1xuLS1cbm1tL2todWdlcGFnZWQuYz05NDU9c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgX19jb2xsYXBzZV9odWdlX3BhZ2VfY29weShwdGVfdCAqcHRlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbm1tL2todWdlcGFnZWQuYy05ODMtXG5tbS9raHVnZXBhZ2VkLmM6OTg0OnN0YXRpYyB2b2lkIGtodWdlcGFnZWRfYWxsb2Nfc2xlZXAodm9pZClcbm1tL2todWdlcGFnZWQuYy05ODUte1xuLS1cbm1tL2todWdlcGFnZWQuYy05ODctXG5tbS9raHVnZXBhZ2VkLmM6OTg4Olx0YWRkX3dhaXRfcXVldWUoXHUwMDI2a2h1Z2VwYWdlZF93YWl0LCBcdTAwMjZ3YWl0KTtcbm1tL2todWdlcGFnZWQuYy05ODktXHRfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRXxUQVNLX0ZSRUVaQUJMRSk7XG5tbS9raHVnZXBhZ2VkLmM6OTkwOlx0c2NoZWR1bGVfdGltZW91dChtc2Vjc190b19qaWZmaWVzKGtodWdlcGFnZWRfYWxsb2Nfc2xlZXBfbWlsbGlzZWNzKSk7XG5tbS9raHVnZXBhZ2VkLmM6OTkxOlx0cmVtb3ZlX3dhaXRfcXVldWUoXHUwMDI2a2h1Z2VwYWdlZF93YWl0LCBcdTAwMjZ3YWl0KTtcbm1tL2todWdlcGFnZWQuYy05OTItfVxubW0va2h1Z2VwYWdlZC5jLTk5My1cbm1tL2todWdlcGFnZWQuYzo5OTQ6c3RhdGljIHN0cnVjdCBjb2xsYXBzZV9jb250cm9sIGtodWdlcGFnZWRfY29sbGFwc2VfY29udHJvbCA9IHtcbm1tL2todWdlcGFnZWQuYzo5OTU6XHQuaXNfa2h1Z2VwYWdlZCA9IHRydWUsXG5tbS9raHVnZXBhZ2VkLmMtOTk2LX07XG4tLVxubW0va2h1Z2VwYWdlZC5jPTk5OD1zdGF0aWMgYm9vbCBjb2xsYXBzZV9zY2FuX2Fib3J0KGludCBuaWQsIHN0cnVjdCBjb2xsYXBzZV9jb250cm9sICpjYylcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMTAyMS1cbm1tL2todWdlcGFnZWQuYzoxMDIyOiNkZWZpbmUga2h1Z2VwYWdlZF9kZWZyYWcoKVx0XHRcdFx0XHRcXFxubW0va2h1Z2VwYWdlZC5jLTEwMjMtXHQodHJhbnNwYXJlbnRfaHVnZXBhZ2VfZmxhZ3MgXHUwMDI2XHRcdFx0XHRcXFxuLS1cbm1tL2todWdlcGFnZWQuYy0xMDI1LVxubW0va2h1Z2VwYWdlZC5jOjEwMjY6LyogRGVmcmFnIGZvciBraHVnZXBhZ2VkIHdpbGwgZW50ZXIgZGlyZWN0IHJlY2xhaW0vY29tcGFjdGlvbiBpZiBuZWNlc3NhcnkgKi9cbm1tL2todWdlcGFnZWQuYzoxMDI3OnN0YXRpYyBpbmxpbmUgZ2ZwX3QgYWxsb2NfaHVnZXBhZ2Vfa2h1Z2VwYWdlZF9nZnBtYXNrKHZvaWQpXG5tbS9raHVnZXBhZ2VkLmMtMTAyOC17XG5tbS9raHVnZXBhZ2VkLmM6MTAyOTpcdHJldHVybiBraHVnZXBhZ2VkX2RlZnJhZygpID8gR0ZQX1RSQU5TSFVHRSA6IEdGUF9UUkFOU0hVR0VfTElHSFQ7XG5tbS9raHVnZXBhZ2VkLmMtMTAzMC19XG4tLVxubW0va2h1Z2VwYWdlZC5jPTEwNjQ9c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgaHVnZXBhZ2Vfdm1hX3JldmFsaWRhdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMTA2OC1cdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hO1xubW0va2h1Z2VwYWdlZC5jOjEwNjk6XHRlbnVtIHR2YV90eXBlIHR5cGUgPSBjYy1cdTAwM2Vpc19raHVnZXBhZ2VkID8gVFZBX0tIVUdFUEFHRUQgOlxubW0va2h1Z2VwYWdlZC5jLTEwNzAtXHRcdFx0XHQgVFZBX0ZPUkNFRF9DT0xMQVBTRTtcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMTA5MS1cdCAqIEFub24gVk1BIGV4cGVjdGVkLCB0aGUgYWRkcmVzcyBtYXkgYmUgdW5tYXBwZWQgdGhlblxubW0va2h1Z2VwYWdlZC5jOjEwOTI6XHQgKiByZW1hcHBlZCB0byBmaWxlIGFmdGVyIGtodWdlcGFnZWQgcmVhY3F1aXJlZCB0aGUgbW1hcF9sb2NrLlxubW0va2h1Z2VwYWdlZC5jLTEwOTMtXHQgKlxuLS1cbm1tL2todWdlcGFnZWQuYz0xMTAyPXN0YXRpYyBpbmxpbmUgZW51bSBzY2FuX3Jlc3VsdCBjaGVja19wbWRfc3RhdGUocG1kX3QgKnBtZClcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMTEwOS1cdC8qXG5tbS9raHVnZXBhZ2VkLmM6MTExMDpcdCAqIFRoZSBmb2xpbyBtYXkgYmUgdW5kZXIgbWlncmF0aW9uIHdoZW4ga2h1Z2VwYWdlZCBpcyB0cnlpbmcgdG9cbm1tL2todWdlcGFnZWQuYy0xMTExLVx0ICogY29sbGFwc2UgaXQuIE1pZ3JhdGlvbiBzdWNjZXNzIG9yIGZhaWx1cmUgd2lsbCBldmVudHVhbGx5IGVuZFxuLS1cbm1tL2todWdlcGFnZWQuYz0xMjUwPXN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGFsbG9jX2NoYXJnZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKipmb2xpb3AsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuLS1cbm1tL2todWdlcGFnZWQuYy0xMjUyLXtcbm1tL2todWdlcGFnZWQuYzoxMjUzOlx0Z2ZwX3QgZ2ZwID0gKGNjLVx1MDAzZWlzX2todWdlcGFnZWQgPyBhbGxvY19odWdlcGFnZV9raHVnZXBhZ2VkX2dmcG1hc2soKSA6XG5tbS9raHVnZXBhZ2VkLmMtMTI1NC1cdFx0ICAgICBHRlBfVFJBTlNIVUdFKTtcbi0tXG5tbS9raHVnZXBhZ2VkLmM9MTYwMD1zdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBjb2xsYXBzZV9zY2FuX3BtZChzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMTYwNi1cdHVuc2lnbmVkIGludCBtYXhfcHRlc19ub25lID0gY29sbGFwc2VfbWF4X3B0ZXNfbm9uZShjYywgdm1hLCBIUEFHRV9QTURfT1JERVIpO1xubW0va2h1Z2VwYWdlZC5jOjE2MDc6XHRlbnVtIHR2YV90eXBlIHR2YV9mbGFncyA9IGNjLVx1MDAzZWlzX2todWdlcGFnZWQgPyBUVkFfS0hVR0VQQUdFRCA6IFRWQV9GT1JDRURfQ09MTEFQU0U7XG5tbS9raHVnZXBhZ2VkLmMtMTYwOC1cdHBtZF90ICpwbWQ7XG4tLVxubW0va2h1Z2VwYWdlZC5jLTE3MDUtXHRcdCAqL1xubW0va2h1Z2VwYWdlZC5jOjE3MDY6XHRcdGlmIChjYy1cdTAwM2Vpc19raHVnZXBhZ2VkIFx1MDAyNlx1MDAyNiAhKHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fRFJPUFBBQkxFKSBcdTAwMjZcdTAwMjZcbm1tL2todWdlcGFnZWQuYy0xNzA3LVx0XHQgICAgZm9saW9fdGVzdF9sYXp5ZnJlZShmb2xpbykgXHUwMDI2XHUwMDI2ICFwdGVfZGlydHkocHRldmFsKSkge1xuLS1cbm1tL2todWdlcGFnZWQuYy0xNzY0LVxubW0va2h1Z2VwYWdlZC5jOjE3NjU6XHRcdGlmIChjYy1cdTAwM2Vpc19raHVnZXBhZ2VkIFx1MDAyNlx1MDAyNlxubW0va2h1Z2VwYWdlZC5jLTE3NjYtXHRcdCAgICBmb2xpb19wdGVfcmVmZXJlbmNlZChmb2xpbywgdm1hLCBhZGRyLCBwdGV2YWwpKVxuLS1cbm1tL2todWdlcGFnZWQuYy0xNzY4LVx0fVxubW0va2h1Z2VwYWdlZC5jOjE3Njk6XHRpZiAoY2MtXHUwMDNlaXNfa2h1Z2VwYWdlZCBcdTAwMjZcdTAwMjZcbm1tL2todWdlcGFnZWQuYy0xNzcwLVx0XHQgICAoIXJlZmVyZW5jZWQgfHxcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMTc4Ni1vdXQ6XG5tbS9raHVnZXBhZ2VkLmM6MTc4NzpcdHRyYWNlX21tX2todWdlcGFnZWRfc2Nhbl9wbWQobW0sIGZvbGlvLCByZWZlcmVuY2VkLFxubW0va2h1Z2VwYWdlZC5jLTE3ODgtXHRcdFx0XHQgICAgIG5vbmVfb3JfemVybywgcmVzdWx0LCB1bm1hcHBlZCk7XG4tLVxubW0va2h1Z2VwYWdlZC5jPTE3OTI9c3RhdGljIHZvaWQgY29sbGVjdF9tbV9zbG90KHN0cnVjdCBtbV9zbG90ICpzbG90KVxuLS1cbm1tL2todWdlcGFnZWQuYy0xNzk1LVxubW0va2h1Z2VwYWdlZC5jOjE3OTY6XHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNmtodWdlcGFnZWRfbW1fbG9jayk7XG5tbS9raHVnZXBhZ2VkLmMtMTc5Ny1cbi0tXG5tbS9raHVnZXBhZ2VkLmMtMTgwNy1cbm1tL2todWdlcGFnZWQuYzoxODA4Olx0XHQvKiBraHVnZXBhZ2VkX21tX2xvY2sgYWN0dWFsbHkgbm90IG5lY2Vzc2FyeSBmb3IgdGhlIGJlbG93ICovXG5tbS9raHVnZXBhZ2VkLmMtMTgwOS1cdFx0bW1fc2xvdF9mcmVlKG1tX3Nsb3RfY2FjaGUsIHNsb3QpO1xuLS1cbm1tL2todWdlcGFnZWQuYz0yMjQ5PXN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGNvbGxhcHNlX2ZpbGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMjM1Ny1cdFx0XHRcdCAqIFRyaWdnZXIgYXN5bmMgZmx1c2ggZm9yIHJlYWQtb25seSBmaWxlcyBhbmRcbm1tL2todWdlcGFnZWQuYzoyMzU4Olx0XHRcdFx0ICogaG9wZSB0aGUgd3JpdGViYWNrIGlzIGRvbmUgd2hlbiBraHVnZXBhZ2VkXG5tbS9raHVnZXBhZ2VkLmMtMjM1OS1cdFx0XHRcdCAqIHJldmlzaXRzIHRoaXMgcGFnZS4gV3JpdGFibGUgZmlsZXMgY2FuIGhhdmVcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMjQxNC1cdFx0XHQvKlxuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDAyOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMzU1CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgVHJhbnNwYXJlbnQgSHVnZXBhZ2UgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBob3cgdHJhbnNwYXJlbnQgaHVnZXBhZ2VzIGFyZSBoYW5kbGVkLCBzdGFydGluZyB3aXRoIGBraHVnZXBhZ2VkLmNgLiBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgdGhlIHByZXNlbmNlIG9mIHRoYXQgZmlsZSBpbiB0aGUgY29tcGlsYXRpb24gcHJvY2VzcyBpcyBkaXJlY3RseSB0aWVkIHRvIHRoZSBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb24uIE1ha2VzIHNlbnNlLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB1c2VyZmF1bHRmZCBwbGF5cyBhIHBhcnQgaW4gdGhpcy4gSSYjMzk7bSBnb2luZyB0byBsb29rIGF0IGB1c2VyZmF1bHRmZF9taW5vcmAgYW5kIHRoZSBgVVNFUkZBVUxURkRgIGNvbnN0YW50LiBJJiMzOTtsbCBuZWVkIHRvIGxvY2F0ZSB3aGVyZSBgdXNlcmZhdWx0ZmRfbWlub3JgIGlzIGRlZmluZWQuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGhhbmRsZSBvbiB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBodWdlcGFnZXMgYW5kIHVzZXJmYXVsdCBoYW5kbGluZywgd2hpY2ggSSYjMzk7bSBzdXJlIHdpbGwgaW5mb3JtIHRoZSByZXN0IG9mIG15IGludmVzdGlnYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDAyOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3VzZXJmYXVsdGZkX21pbm9yJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmg9MjEyPXN0YXRpYyBpbmxpbmUgYm9vbCB1c2VyZmF1bHRmZF93cChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbi0tXG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaC0yMTYtXG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaDoyMTc6c3RhdGljIGlubGluZSBib29sIHVzZXJmYXVsdGZkX21pbm9yKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmgtMjE4LXtcbi0tXG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaD0zNjE9c3RhdGljIGlubGluZSBib29sIHVzZXJmYXVsdGZkX3dwKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuLS1cbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oLTM2NS1cbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oOjM2NjpzdGF0aWMgaW5saW5lIGJvb2wgdXNlcmZhdWx0ZmRfbWlub3Ioc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaC0zNjcte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwMjo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTgzNgoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkludmVzdGlnYXRpbmcgVXNlcmZhdWx0ZmQgS2VybmVsIEhlYWRlcioqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gZGl2ZSBpbnRvIHNvbWUgYHVzZXJmYXVsdGZkYCBjb2RlLiBCYXNlZCBvbiB0aGUgcHJvYmxlbSBkZXNjcmlwdGlvbiwgSSYjMzk7bSB0aGlua2luZyB0aGUgaXNzdWUgbWlnaHQgYmUgcmVsYXRlZCB0byB0aGUgY29yZSBoYW5kbGluZyBvZiB1c2VyZmF1bHRmZCB3aXRoaW4gdGhlIGtlcm5lbC4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSB0YWtpbmcgYSBsb29rIGF0IGBpbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaGAuIEl0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBmdW5jdGlvbnMuIEkmIzM5O2xsIGZvY3VzIG15IGF0dGVudGlvbiBhcm91bmQgbGluZSAyMTcgaW5pdGlhbGx5LCBhcyB0aGF0JiMzOTtzIG9mdGVuIHdoZXJlIGtleSBkZWZpbml0aW9ucyBvciBzdHJ1Y3R1cmVzIHJlbGF0ZWQgdG8gZmF1bHQgaGFuZGxpbmcgcmVzaWRlLiBUaGVuLCBJJiMzOTtsbCBqdW1wIGRvd24gdG8gbGluZSAzNjYuIEkmIzM5O20gaG9waW5nIHRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiBob3cgdGhlIGtlcm5lbCBtYW5hZ2VzIGFuZCBwcm9jZXNzZXMgdGhlc2UgdXNlci1zcGFjZSBmYXVsdHMgZnJvbSB0aG9zZSB0d28gbG9jYXRpb25zIHNwZWNpZmljYWxseS4gVGhhdCBzaG91bGQgcHJvdmlkZSBhIHVzZWZ1bCBmb3VuZGF0aW9uIHRvIGludmVzdGlnYXRlIGZ1cnRoZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDAyOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDIxMDpcdH1cbiAyMTE6XHRcbiAyMTI6XHRzdGF0aWMgaW5saW5lIGJvb2wgdXNlcmZhdWx0ZmRfd3Aoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4gMjEzOlx0e1xuIDIxNDpcdFx0cmV0dXJuIHZtYV90ZXN0X2FueV9tYXNrKHZtYSwgVk1BX1VGRkRfV1ApO1xuIDIxNTpcdH1cbiAyMTY6XHRcbiAyMTc6XHRzdGF0aWMgaW5saW5lIGJvb2wgdXNlcmZhdWx0ZmRfbWlub3Ioc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4gMjE4Olx0e1xuIDIxOTpcdFx0cmV0dXJuIHZtYV90ZXN0X2FueV9tYXNrKHZtYSwgVk1BX1VGRkRfTUlOT1IpO1xuIDIyMDpcdH1cbiAyMjE6XHRcbiAyMjI6XHRzdGF0aWMgaW5saW5lIGJvb2wgdXNlcmZhdWx0ZmRfcndwKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuIDIyMzpcdHtcbiAyMjQ6XHRcdC8qXG4gMjI1Olx0XHQgKiBDYWxsZXJzIGdhdGUgUEFHRV9OT05FIHVzYWdlIG9uIHRoaXM7IFBBR0VfTk9ORSBpcyBhIEJVSUxEX0JVRygpXG4gMjI2Olx0XHQgKiB3aXRob3V0IENPTkZJR19BUkNIX0hBU19QVEVfUFJPVE5PTkUsIHNvIGZvbGQgdG8gZmFsc2UuXG4gMjI3Olx0XHQgKi9cbiAyMjg6XHRcdGlmICghSVNfRU5BQkxFRChDT05GSUdfQVJDSF9IQVNfUFRFX1BST1ROT05FKSlcbiAyMjk6XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDIzMDpcdFx0cmV0dXJuIHZtYV90ZXN0X3NpbmdsZV9tYXNrKHZtYSwgVk1BX1VGRkRfUldQKTtcbiAyMzE6XHR9XG4gMjMyOlx0XG4gMjMzOlx0c3RhdGljIGlubGluZSBib29sIHVzZXJmYXVsdGZkX3Byb3RlY3RlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbiAyMzQ6XHR7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDAyOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNDk3CgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogNzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCByZWxhdGVzIHRvIGNoZWNraW5nIGtlcm5lbCBjb25maWd1cmF0aW9uczoKCioqS2VybmVsIENvbmZpZ3VyYXRpb24gSW52ZXN0aWdhdGlvbioqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGRlbHZlIGludG8gdGhlIEtjb25maWcgZmlsZXMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGV4YWN0bHkgaG93IGB1c2VyZmF1bHRmZGAgYW5kIGB0cmFuc3BhcmVudF9odWdlcGFnZWAgYXJlIGJlaW5nIGVuYWJsZWQgaW4gdGhlIGtlcm5lbC4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgbW9zdCBkaXJlY3Qgcm91dGUgaXMgdG8gbG9vayBmb3IgdGhlIHJlbGV2YW50IEtjb25maWcgb3B0aW9ucy4gU28sIHRoYXQgbWVhbnMgY2hlY2tpbmcgZm9yIGBDT05GSUdfVVNFUkZBVUxURkRgIGFuZCBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYC4gV2hlcmUgYXJlIHRoZXNlIG9wdGlvbnMgZGVmaW5lZD8gTXkgdXN1YWwgc3RhcnRpbmcgcG9pbnQgZm9yIG1lbW9yeSBtYW5hZ2VtZW50IHJlbGF0ZWQgZmVhdHVyZXMgd291bGQgYmUgZWl0aGVyIGBpbml0L0tjb25maWdgIG9yIGBtbS9LY29uZmlnYC4gSSYjMzk7bGwgc3RhcnQgdGhlcmUuIFRoYXQmIzM5O3Mgd2hlcmUgSSB3b3VsZCBleHBlY3QgdG8gZmluZCB0aGUgZGVwZW5kZW5jaWVzIGFuZCB0aGUgbG9naWMgYmVoaW5kIHRoZXNlIHNldHRpbmdzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwMjo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVVNFUkZBVUxURkQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz0xMzcyPWNvbmZpZyBIQVZFX0FSQ0hfVVNFUkZBVUxURkRfTUlOT1Jcbi0tXG5tbS9LY29uZmlnLTEzNzYtXG5tbS9LY29uZmlnOjEzNzc6Y29uZmlnIFVTRVJGQVVMVEZEX1JXUFxubW0vS2NvbmZpZy0xMzc4LVx0ZGVmX2Jvb2wgeVxuLS1cbm1tL0tjb25maWctMTM4NS1cbm1tL0tjb25maWc6MTM4NjptZW51Y29uZmlnIFVTRVJGQVVMVEZEXG5tbS9LY29uZmlnLTEzODctXHRib29sIFwmIzM0O0VuYWJsZSB1c2VyZmF1bHRmZCgpIHN5c3RlbSBjYWxsXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDAyOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyODkxCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBmb3IgTWVtb3J5IE1hbmFnZW1lbnQqKgoKT2theSwgdGltZSB0byB0cm91Ymxlc2hvb3QgdGhpcyBtZW1vcnktcmVsYXRlZCBpc3N1ZS4gTXkgZ3V0IHRlbGxzIG1lIHRoZXJlIG1pZ2h0IGJlIGEgcHJvYmxlbSB3aXRoIGhvdyBzb21ldGhpbmcgaXMgY29uZmlndXJlZCBpbiB0aGUga2VybmVsLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBhIGZvY3VzZWQgaW52ZXN0aWdhdGlvbi4gSSYjMzk7bSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IGludG8gdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIg4oCTIHRoZSBgbW0vS2NvbmZpZ2AgZmlsZS4gSSYjMzk7bSBwcmV0dHkgc3VyZSB0aGF0IGFyZWEgaG91c2VzIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGFuZCBnaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBwcm9ibGVtLCBpdCYjMzk7cyB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIHRoZSByZWxldmFudCBvcHRpb25zLCBvciB0aGVpciBpbnRlcmFjdGlvbnMsIG1pZ2h0IGJlIGxvY2F0ZWQgYXJvdW5kIGxpbmUgbnVtYmVycyAxMzcwIHRvIDE0MDAuIFRoYXQgcmFuZ2UgdXN1YWxseSBjb3ZlcnMgc29tZSBrZXkgZmxhZ3MgYW5kIHNldHRpbmdzIHRoYXQgSSYjMzk7dmUgc2VlbiBiZSByZWxldmFudCBpbiBzaW1pbGFyIHNpdHVhdGlvbnMuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBpbiB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDI6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTM3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMzcwOlx0XHQgIEFyY2ggaGFzIHVzZXJmYXVsdGZkIHdyaXRlIHByb3RlY3Rpb24gc3VwcG9ydFxuMTM3MTpcdFxuMTM3MjpcdGNvbmZpZyBIQVZFX0FSQ0hfVVNFUkZBVUxURkRfTUlOT1JcbjEzNzM6XHRcdGJvb2xcbjEzNzQ6XHRcdGhlbHBcbjEzNzU6XHRcdCAgQXJjaCBoYXMgdXNlcmZhdWx0ZmQgbWlub3IgZmF1bHQgc3VwcG9ydFxuMTM3NjpcdFxuMTM3NzpcdGNvbmZpZyBVU0VSRkFVTFRGRF9SV1BcbjEzNzg6XHRcdGRlZl9ib29sIHlcbjEzNzk6XHRcdGRlcGVuZHMgb24gNjRCSVQgXHUwMDI2XHUwMDI2IEFSQ0hfSEFTX1BURV9QUk9UTk9ORSBcdTAwMjZcdTAwMjYgSEFWRV9BUkNIX1VTRVJGQVVMVEZEX1dQXG4xMzgwOlx0XHRoZWxwXG4xMzgxOlx0XHQgIFVzZXJmYXVsdGZkIHJlYWQtd3JpdGUgcHJvdGVjdGlvbiAoVUZGRElPX1JXUFJPVEVDVCkgZGVsaXZlcnMgYVxuMTM4MjpcdFx0ICB1c2VyZmF1bHRmZCBub3RpZmljYXRpb24gb24gZXZlcnkgYWNjZXNzIC0tIHJlYWQgb3Igd3JpdGUgLS0gdG8gYVxuMTM4MzpcdFx0ICBwcm90ZWN0ZWQgcmFuZ2UsIGxldHRpbmcgdXNlcnNwYWNlIG9ic2VydmUgdGhlIHdvcmtpbmcgc2V0IG9mIGFcbjEzODQ6XHRcdCAgcHJvY2Vzcy5cbjEzODU6XHRcbjEzODY6XHRtZW51Y29uZmlnIFVTRVJGQVVMVEZEXG4xMzg3Olx0XHRib29sIFwmIzM0O0VuYWJsZSB1c2VyZmF1bHRmZCgpIHN5c3RlbSBjYWxsXCYjMzQ7XG4xMzg4Olx0XHRkZXBlbmRzIG9uIE1NVVxuMTM4OTpcdFx0aGVscFxuMTM5MDpcdFx0ICBFbmFibGUgdGhlIHVzZXJmYXVsdGZkKCkgc3lzdGVtIGNhbGwgdGhhdCBhbGxvd3MgdG8gaW50ZXJjZXB0IGFuZFxuMTM5MTpcdFx0ICBoYW5kbGUgcGFnZSBmYXVsdHMgaW4gdXNlcmxhbmQuXG4xMzkyOlx0XG4xMzkzOlx0Y29uZmlnIFBURV9NQVJLRVJfVUZGRF9XUFxuMTM5NDpcdFx0Ym9vbCBcJiMzNDtVc2VyZmF1bHRmZCB3cml0ZSBwcm90ZWN0aW9uIHN1cHBvcnQgZm9yIHNobWVtL2h1Z2V0bGJmc1wmIzM0O1xuMTM5NTpcdFx0ZGVmYXVsdCB5XG4xMzk2Olx0XHRkZXBlbmRzIG9uIFVTRVJGQVVMVEZEIFx1MDAyNlx1MDAyNiBIQVZFX0FSQ0hfVVNFUkZBVUxURkRfV1BcbjEzOTc6XHRcbjEzOTg6XHRcdGhlbHBcbjEzOTk6XHRcdCAgQWxsb3dzIHRvIGNyZWF0ZSBtYXJrZXIgUFRFcyBmb3IgdXNlcmZhdWx0ZmQgd3JpdGUgcHJvdGVjdGlvblxuMTQwMDpcdFx0ICBwdXJwb3Nlcy4gIEl0IGlzIHJlcXVpcmVkIHRvIGVuYWJsZSB1c2VyZmF1bHRmZCB3cml0ZSBwcm90ZWN0aW9uIG9uXG4xNDAxOlx0XHQgIGZpbGUtYmFja2VkIG1lbW9yeSB0eXBlcyBsaWtlIHNobWVtIGFuZCBodWdldGxiZnMuXG4xNDAyOlx0XG4xNDAzOlx0IyBtdWx0aS1nZW4gTFJVIHtcbjE0MDQ6XHRjb25maWcgTFJVX0dFTlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwMjo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzY0OQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipDaGVja2luZyBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGluIGBtbS9LY29uZmlnYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gcXVpY2tseSBnZXQgYSBoYW5kbGUgb24gaG93IGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgY29uZmlndXJlZC4gTXkgaW5pdGlhbCBpbnN0aW5jdCwgZ2l2ZW4gbXkgZXhwZXJpZW5jZSwgaXMgdG8gaGVhZCBkaXJlY3RseSB0byBgbW0vS2NvbmZpZ2AuIFRoYXQmIzM5O3Mgd2hlcmUgSSBleHBlY3QgdG8gZmluZCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSBhbnl0aGluZyBkZWFsaW5nIHdpdGggdHJhbnNwYXJlbnQgaHVnZXBhZ2VzLiBJdCYjMzk7cyB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBkaWdnaW5nIGludG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgZm9yIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBzeW1ib2wgaXRzZWxmLCBhbmQgdGhlbiB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMgYW5kIGFueSBhc3NvY2lhdGVkIGhlbHAgdGV4dC4gSSB3YW50IHRvIHNlZSBpZiBpdCYjMzk7cyB0cmlzdGF0ZSwgYW5kIGlmIHNvLCB3aGF0IHRoZSBkZWZhdWx0IHNldHRpbmcgaXMgYW5kIGhvdyBpdCBtaWdodCBpbnRlcmFjdCB3aXRoIG90aGVyIG1lbW9yeSBtYW5hZ2VtZW50IGZlYXR1cmVzLiBJJiMzOTttIGFsc28gZ29pbmcgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgY29uZGl0aW9uYWwgZGVwZW5kZW5jaWVzIG9yICYjMzQ7c2VsZWN0JiMzNDsgc3RhdGVtZW50cyB0aGF0IG1pZ2h0IHNoZWQgbGlnaHQgb24gaG93IGl0JiMzOTtzIGludGVncmF0ZWQgaW50byB0aGUgbGFyZ2VyIGtlcm5lbCBjb25maWd1cmF0aW9uIGxhbmRzY2FwZS4gVGhpcyB3aWxsIGdpdmUgbWUgYSBzb2xpZCBmb3VuZGF0aW9uIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBjYXBhYmlsaXRpZXMgb2YgdHJhbnNwYXJlbnQgaHVnZXBhZ2VzIHdpdGhpbiB0aGUgY3VycmVudCBrZXJuZWwgYnVpbGQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDAyOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTgzMj1jb25maWcgTU1fSURcbi0tXG5tbS9LY29uZmlnLTgzNC1cbm1tL0tjb25maWc6ODM1Om1lbnVjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL0tjb25maWctODM2LVx0Ym9vbCBcJiMzNDtUcmFuc3BhcmVudCBIdWdlcGFnZSBTdXBwb3J0XCYjMzQ7XG4tLVxubW0vS2NvbmZpZz04NTM9Y2hvaWNlXG4tLVxubW0vS2NvbmZpZy04NTgtXG5tbS9LY29uZmlnOjg1OTpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9BTFdBWVNcbm1tL0tjb25maWctODYwLVx0XHRib29sIFwmIzM0O2Fsd2F5c1wmIzM0O1xuLS1cbm1tL0tjb25maWctODY1LVxubW0vS2NvbmZpZzo4NjY6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfTUFEVklTRVxubW0vS2NvbmZpZy04NjctXHRcdGJvb2wgXCYjMzQ7bWFkdmlzZVwmIzM0O1xuLS1cbm1tL0tjb25maWctODc0LVxubW0vS2NvbmZpZzo4NzU6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfTkVWRVJcbm1tL0tjb25maWctODc2LVx0XHRib29sIFwmIzM0O25ldmVyXCYjMzQ7XG4tLVxubW0vS2NvbmZpZz04ODI9Y2hvaWNlXG4tLVxubW0vS2NvbmZpZy04OTEtXG5tbS9LY29uZmlnOjg5MjpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX05FVkVSXG5tbS9LY29uZmlnLTg5My1cdFx0Ym9vbCBcJiMzNDtuZXZlclwmIzM0O1xuLS1cbm1tL0tjb25maWctOTAxLVxubW0vS2NvbmZpZzo5MDI6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9BTFdBWVNcbm1tL0tjb25maWctOTAzLVx0XHRib29sIFwmIzM0O2Fsd2F5c1wmIzM0O1xuLS1cbm1tL0tjb25maWctOTA5LVxubW0vS2NvbmZpZzo5MTA6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9XSVRISU5fU0laRVxubW0vS2NvbmZpZy05MTEtXHRcdGJvb2wgXCYjMzQ7d2l0aGluX3NpemVcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTkxNy1cbm1tL0tjb25maWc6OTE4Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfQURWSVNFXG5tbS9LY29uZmlnLTkxOS1cdFx0Ym9vbCBcJiMzNDthZHZpc2VcJiMzNDtcbi0tXG5tbS9LY29uZmlnPTkyNz1jaG9pY2Vcbi0tXG5tbS9LY29uZmlnLTkzNi1cbm1tL0tjb25maWc6OTM3Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfTkVWRVJcbm1tL0tjb25maWctOTM4LVx0XHRib29sIFwmIzM0O25ldmVyXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy05NDUtXG5tbS9LY29uZmlnOjk0NjpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX0FMV0FZU1xubW0vS2NvbmZpZy05NDctXHRcdGJvb2wgXCYjMzQ7YWx3YXlzXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy05NTMtXG5tbS9LY29uZmlnOjk1NDpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX1dJVEhJTl9TSVpFXG5tbS9LY29uZmlnLTk1NS1cdFx0Ym9vbCBcJiMzNDt3aXRoaW5fc2l6ZVwmIzM0O1xuLS1cbm1tL0tjb25maWctOTYxLVxubW0vS2NvbmZpZzo5NjI6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9BRFZJU0Vcbm1tL0tjb25maWctOTYzLVx0XHRib29sIFwmIzM0O2FkdmlzZVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwMjo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDY0MQoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDUzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBhIFBvdGVudGlhbCBGdXp6aW5nIFRhcmdldCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBXZSBoYXZlIGEgcGF0Y2ggdG91Y2hpbmcgYG1tL2todWdlcGFnZWQuY2Ag4oCTIHRoYXQgaW1tZWRpYXRlbHkgZ3JhYnMgbXkgYXR0ZW50aW9uLiBTcGVjaWZpY2FsbHksIHRoZSBgdHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwYCBmdW5jdGlvbiBpcyB0aGUgZm9jYWwgcG9pbnQuIFRoZSBjb3JlIGNoYW5nZSBpcyB0aGlzOiBpZiBhIFZNQSBpcyByZWdpc3RlcmVkIHdpdGggYHVzZXJmYXVsdGZkX21pbm9yYCwgaXTigJlzIG5vdyAqc2tpcHBlZCogZHVyaW5nIFRIUCBjb2xsYXBzZS4gVGhhdCYjMzk7cyBhIHNpZ25pZmljYW50IGJlaGF2aW9yIGNoYW5nZSwgcG90ZW50aWFsbHkgb3BlbmluZyB1cCBhIG5ldyBhdHRhY2sgc3VyZmFjZS4KClRoZSBjb2RlIGl0c2VsZiBpcyBzdHJhaWdodGZvcndhcmQ6IHRoZSBuZXcgY2hlY2ssIGBpZiAodXNlcmZhdWx0ZmRfbWlub3Iodm1hKSkgcmV0dXJuIFNDQU5fUFRFX1VGRkQ7YCwgc2VlbXMgc2ltcGxlIGVub3VnaCwgYnV0IHRoZSBpbnRlcmFjdGlvbnMgYW5kIHNpZGUgZWZmZWN0cyBpbiBhIGNvbXBsZXggTU0gc3lzdGVtLi4uIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIGludGVyZXN0aW5nIHN0dWZmIGxpZXMuCgpOb3csIGlzIHRoaXMgd29ydGggZnV6emluZz8gRGVmaW5pdGVseS4gVGhlIGZhY3QgdGhhdCBpdCYjMzk7cyByZWFjaGFibGUgdmlhIGJvdGggYG1hZHZpc2UoLi4uLCBNQURWX0NPTExBUFNFKWAgKmFuZCogYmFja2dyb3VuZCBga2h1Z2VwYWdlZGAgc2Nhbm5pbmcsIGNvbWJpbmVkIHdpdGggYHVzZXJmYXVsdGZkX21pbm9yYCByZWdpc3RyYXRpb24g4oCTIHRoYXQmIzM5O3MgYSBzb2xpZCBjb21iaW5hdGlvbiBmb3IgZXhwbG9yYXRpb24uIFBsdXMsIHdlIGhhdmUgdGhlIGB1cHJvYmVfd3JpdGVgIHBhdGgsIHdpZGVuaW5nIHRoZSBhdHRhY2sgc3VyZmFjZS4KClRoaXMgaXMgYSBjbGVhciAmIzM0O3llcyYjMzQ7IGZvciBgV29ydGhGdXp6aW5nYC4gVGhlIHN1YnN5c3RlbSBpcyBjb3JlIE1NLCBhbmQgdGhlIHJlYWNoYWJpbGl0eSBpcyBkaXZlcnNlLgoKVGhlIG5leHQgc3RlcCBpcyB0byBjaG9vc2Ugb3VyIEZvY3VzU3ltYm9scyBhbmQgRW5hYmxlQ29uZmlncy4gV2UgbmVlZCB0byBhdm9pZCB0aGUgb2J2aW91cywgdWJpcXVpdG91cyBsaWZlY3ljbGUgZnVuY3Rpb25zIOKAkyBub3RoaW5nIGxpa2UgYHN5c19tYWR2aXNlYCwgb3IgYGRvX3BhZ2VfZmF1bHRgLiBXZSBuZWVkIHRvIGJlIHN1cmdpY2FsLiBNeSBmb2N1cyB3b3VsZCBiZSBvbjoKKiAgIGB0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHBgOiBUaGUgZnVuY3Rpb24gaGFzIGNoYW5nZWQgZGlyZWN0bHksIHNvIGxldCYjMzk7cyBzdGFydCB0aGVyZS4KKiAgIFRoZSBjYWxsZXJzIG9mIGB0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHBgOiBgY29sbGFwc2VfcHRlX21hcHBlZF90aHBgLCBgbWFkdmlzZV9jb2xsYXBzZWAsIGBjb2xsYXBzZV9zaW5nbGVfcG1kYCwgYGNvbGxhcHNlX2ZpbGVgLCBga2h1Z2VwYWdlZF9zY2FuX3BtZGAsIGFuZCBga2h1Z2VwYWdlZF9zY2FuX2ZpbGVgIGFyZSBhbGwgcG90ZW50aWFsIGFyZWFzIG9mIGludGVyZXN0LCBpZiBgdHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwYCBpc24mIzM5O3QgaW5saW5lZC4KCkxldCYjMzk7cyBzZWUgd2hhdCBlbHNlIGBtbS9raHVnZXBhZ2VkLmNgIGhhcyB0byBvZmZlci4gVGhlIGFkamFjZW50IGNvZGUgd2lsbCBnaXZlIGNsdWVzIG9uIHdoYXQgdG8gZm9jdXMgb24uIFdlIG5lZWQgdG8gY2FyZWZ1bGx5IG9ic2VydmUgdGhlIGNvbnRyb2wgYW5kIGRhdGEgZmxvdyBhcm91bmQgdGhpcyBuZXcgY2hlY2sgdG8gZW5zdXJlIHdlIGFyZSBjb3ZlcmluZyB0aGUgbW9zdCB2dWxuZXJhYmxlIHNlZ21lbnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwMjo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtec3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgdHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0va2h1Z2VwYWdlZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2todWdlcGFnZWQuYz0xODE1PXN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IHNldF9odWdlX3BtZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbm1tL2todWdlcGFnZWQuYy0xODUwLVxubW0va2h1Z2VwYWdlZC5jOjE4NTE6c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgdHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG5tbS9raHVnZXBhZ2VkLmMtMTg1Mi1cdFx0Ym9vbCBpbnN0YWxsX3BtZClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDI6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU4NzUKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGtodWdlcGFnZWQuYyBmb3IgVEhQIENvbGxhcHNlIEZ1bmN0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkmIzM5O20gbG9va2luZyBhdCBgdHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwYCDigJMgaXQmIzM5O3MgYSBub24taW5saW5lIHN0YXRpYyBmdW5jdGlvbiB0dWNrZWQgYXdheSBpbiBgbW0va2h1Z2VwYWdlZC5jYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7V2hvJiMzOTtzIHVzaW5nIHRoaXMgdGhpbmc/JiMzNDsgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNhbGwgZ3JhcGggYW5kIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0LiBTbywgSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGlkZW50aWZ5IHRoZSBkaXJlY3RseSByZWxhdGVkIGZ1bmN0aW9ucy4KClJpZ2h0IG9mZiB0aGUgYmF0LCBJIHNlZSBgY29sbGFwc2VfcHRlX21hcHBlZF90aHBgLCB3aGljaCBpcyBleHBvcnRlZCBhbmQgbm9uLXN0YXRpYyB3aXRoaW4gdGhlIHNhbWUgZmlsZTsgdGhhdOKAmXMgZGVmaW5pdGVseSByZWxldmFudC4gVGhlbiB3ZSBoYXZlIGBtYWR2aXNlX2NvbGxhcHNlYCwgYWxzbyBub24tc3RhdGljLCBhbHNvIGluIGBtbS9raHVnZXBhZ2VkLmNgLiBPZiBjb3Vyc2UsIGB0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHBgIGl0c2VsZiBpcyBpbiB0aGUgbWl4LCBhbmQgbm93IEkgYWxzbyBzZWUgYGNvbGxhcHNlX3NpbmdsZV9wbWRgIGFuZCBgY29sbGFwc2VfZmlsZWAgaW4gdGhlIGxpc3QuCgpJIG5lZWQgdG8gcXVpY2tseSB2ZXJpZnkgdGhhdCB0aGVzZSBhcmUgYWxsIGRpc3RpbmN0IHN5bWJvbHM7IGl0JiMzOTtzIGVhc3kgdG8gZ2V0IGNvbmZ1c2VkIHdpdGggc2ltaWxhciBuYW1pbmcgY29udmVudGlvbnMuIExldCYjMzk7cyBzdGFydCBieSBsb29raW5nIGF0IGBtYWR2aXNlX2NvbGxhcHNlYCBpbiBgbW0va2h1Z2VwYWdlZC5jYCBpbiBwYXJ0aWN1bGFyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwMjo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbnQgbWFkdmlzZV9jb2xsYXBzZVxcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2todWdlcGFnZWQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9raHVnZXBhZ2VkLmM9MzE1Nz1zdGF0aWMgaW50IG1hZHZpc2VfY29sbGFwc2VfZXJybm8oZW51bSBzY2FuX3Jlc3VsdCByKVxuLS1cbm1tL2todWdlcGFnZWQuYy0zMTg4LVxubW0va2h1Z2VwYWdlZC5jOjMxODk6aW50IG1hZHZpc2VfY29sbGFwc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG5tbS9raHVnZXBhZ2VkLmMtMzE5MC1cdFx0ICAgICB1bnNpZ25lZCBsb25nIGVuZCwgYm9vbCAqbG9ja19kcm9wcGVkKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwMjo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjUxMgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbi4gSGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MgcmVnYXJkaW5nIGBjb2xsYXBzZV9maWxlYCBhbmQgYGNvbGxhcHNlX3NpbmdsZV9wbWRgIHdpdGhpbiBgbW0va2h1Z2VwYWdlZC5jYDoKCioqQW5hbHl6aW5nIGBjb2xsYXBzZV9maWxlYCBhbmQgYGNvbGxhcHNlX3NpbmdsZV9wbWRgIGluIGBtbS9raHVnZXBhZ2VkLmNgKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IGludG8gdGhlIHdlZWRzIG9mIGBraHVnZXBhZ2VkYCYjMzk7cyBmaWxlIG1hcHBpbmcgaGFuZGxpbmcuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB0aGUgZnVuY3Rpb25zIGBjb2xsYXBzZV9maWxlYCBhbmQgYGNvbGxhcHNlX3NpbmdsZV9wbWRgLiBHaXZlbiBteSBleHBlcmllbmNlLCBJJiMzOTttIGV4cGVjdGluZyB0aGVzZSB0byBiZSBjcml0aWNhbCBjb21wb25lbnRzIG9mIGhvdyB0aGUga2VybmVsIG1hbmFnZXMgdHJhbnNwYXJlbnQgaHVnZSBwYWdlcyAoVEhQKSBzcGVjaWZpY2FsbHkgd2hlbiBkZWFsaW5nIHdpdGggZmlsZS1iYWNrZWQgbWFwcGluZ3MuIGBjb2xsYXBzZV9maWxlYCwgdW5kb3VidGVkbHksIGhhcyBhIGJyb2FkZXIgc2NvcGUsIGxpa2VseSBkZWFsaW5nIHdpdGggZmlsZS1iYWNrZWQgbWFwcGluZ3MgaW4gZ2VuZXJhbCwgd2hlcmVhcyBgY29sbGFwc2Vfc2luZ2xlX3BtZGAgaXMgcHJvYmFibHkgZ2VhcmVkIHRvd2FyZCBjb2xsYXBzaW5nIGEgc3BlY2lmaWMgUGh5c2ljYWwgTWVtb3J5IERlc2NyaXB0b3IgKFBNRCkuIEkmIzM5O2xsIG5lZWQgdG8gZHJpbGwgZG93biBpbnRvIHRoZSBsb2dpYyB3aXRoaW4gZWFjaCB0byB1bmRlcnN0YW5kIHRoZSBudWFuY2VzIG9mIGhvdyB0aGVzZSBmdW5jdGlvbnMgaGFuZGxlIHBhZ2UgZmF1bHRzLCBtZW1vcnkgYWxsb2NhdGlvbi9kZWFsbG9jYXRpb24sIGFuZCB0aGUgb3ZlcmFsbCBjb29yZGluYXRpb24gb2YgVEhQIG1hbmFnZW1lbnQgaW4gZmlsZS1iYWNrZWQgY29udGV4dHMuIEkgYW50aWNpcGF0ZSBzZWVpbmcgaW50ZXJhY3Rpb25zIHdpdGggdGhlIHBhZ2UgY2FjaGUsIGlub2RlIGRhdGEgc3RydWN0dXJlcywgYW5kIHRoZSBWTSBzeXN0ZW0mIzM5O3MgY29yZSBtZWNoYW5pc21zIGZvciBoYW5kbGluZyBtZW1vcnkgcHJlc3N1cmUuIE15IGdvYWwgaXMgdG8gZGV0ZXJtaW5lIGhvdyBlZmZpY2llbnRseSB0aGVzZSBmdW5jdGlvbnMgbWFuYWdlIHBhZ2UtbGV2ZWwgb3BlcmF0aW9ucyBjb21wYXJlZCB0byBhIG1vcmUgZGlyZWN0IGZpbGUtbWFwcGluZyBhcHByb2FjaCB3aXRoIFRIUC4gU3BlY2lmaWMgdGhpbmdzIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGluY2x1ZGUgd2hldGhlciB0aGUgZmlsZSBtYXBwaW5nIHJlcXVpcmVzIGZsdXNoaW5nLCBhbmQgaG93IGNvaGVyZW5jeSBpcyBtYWludGFpbmVkIHdpdGggb3RoZXIgcHJvY2Vzc2VzIGFuZCB0aHJlYWRzIGFjY2Vzc2luZyB0aGUgZmlsZS4gQWxzbywgd2hhdCBpbXBhY3Qgd2lsbCB0aGVzZSBmdW5jdGlvbnMgaGF2ZSBvbiBwZXJmb3JtYW5jZSBmcm9tIGEgZmlsZSBJL08gcGVyc3BlY3RpdmU/CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDAyOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbGxhcHNlX2ZpbGVcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9raHVnZXBhZ2VkLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0va2h1Z2VwYWdlZC5jPTIxNDA9c3RhdGljIHZvaWQgcmV0cmFjdF9wYWdlX3RhYmxlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgcGdvZmZfdCBwZ29mZilcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMjI0OC0gKi9cbm1tL2todWdlcGFnZWQuYzoyMjQ5OnN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGNvbGxhcHNlX2ZpbGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbm1tL2todWdlcGFnZWQuYy0yMjUwLVx0XHRzdHJ1Y3QgZmlsZSAqZmlsZSwgcGdvZmZfdCBzdGFydCwgc3RydWN0IGNvbGxhcHNlX2NvbnRyb2wgKmNjKVxuLS1cbm1tL2todWdlcGFnZWQuYy0yNjc2LVx0Vk1fQlVHX09OKCFsaXN0X2VtcHR5KFx1MDAyNnBhZ2VsaXN0KSk7XG5tbS9raHVnZXBhZ2VkLmM6MjY3NzpcdHRyYWNlX21tX2todWdlcGFnZWRfY29sbGFwc2VfZmlsZShtbSwgbmV3X2ZvbGlvLCBpbmRleCwgYWRkciwgaXNfc2htZW0sIGZpbGUsIEhQQUdFX1BNRF9OUiwgcmVzdWx0KTtcbm1tL2todWdlcGFnZWQuYy0yNjc4LVx0cmV0dXJuIHJlc3VsdDtcbi0tXG5tbS9raHVnZXBhZ2VkLmM9MjY4MT1zdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBjb2xsYXBzZV9zY2FuX2ZpbGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4tLVxubW0va2h1Z2VwYWdlZC5jLTI3NzgtXHRcdH0gZWxzZSB7XG5tbS9raHVnZXBhZ2VkLmM6Mjc3OTpcdFx0XHRyZXN1bHQgPSBjb2xsYXBzZV9maWxlKG1tLCBhZGRyLCBmaWxlLCBzdGFydCwgY2MpO1xubW0va2h1Z2VwYWdlZC5jLTI3ODAtXHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDI6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjcyNjEKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqQ2hlY2tpbmcgYGNvbGxhcHNlX3NpbmdsZV9wbWRgKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gVGhlIGluaXRpYWwgdGhvdWdodCwgb2YgY291cnNlLCBpcyBhIGNoZWNrLiBBIHF1aWNrIHNhbml0eSBjaGVjayBvbiBhIHNwZWNpZmljIGZ1bmN0aW9uIG9yIG1vZHVsZSBuYW1lZCBgY29sbGFwc2Vfc2luZ2xlX3BtZGAuIFRoZSBtZXJlIGV4aXN0ZW5jZSBvZiBhIGRlZGljYXRlZCBmdW5jdGlvbiB3aXRoIHN1Y2ggYSBuYW1lIGltcGxpZXMgYSB2ZXJ5IHNwZWNpZmljIHRhc2s6IHBvdGVudGlhbGx5IHJlZHVjaW5nIG9yIHNpbXBsaWZ5aW5nIGRhdGEsIGxpa2VseSByZWxhdGVkIHRvIHBhaXJlZCBtb2xlY3VsYXIgZHluYW1pY3MgKFBNRCkgc2ltdWxhdGlvbnMsIHBlcmhhcHMsIG9yIHNvbWV0aGluZyBvZiB0aGF0IG5hdHVyZSwgZ2l2ZW4gdGhlIG5hbWluZyBjb252ZW50aW9uIEkgc2VlLgoKTXkgaW1tZWRpYXRlIGZvbGxvdy11cCB0aG91Z2h0IHdvdWxkIGJlICp3aHkqIGFyZSB3ZSBjaGVja2luZyB0aGlzPyBJcyBpdCBwYXJ0IG9mIGEgZGVidWdnaW5nIHByb2Nlc3M/IEEgcmVmYWN0b3JpbmcgZWZmb3J0PyBQZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24/IE9yIG1heWJlIGEgcmV2aWV3IG9mIHRoZSB1bmRlcmx5aW5nIGxvZ2ljPyBXaGF0JiMzOTtzIHRoZSBjb250ZXh0PyBXZSYjMzk7bGwgbmVlZCBhIGJyb2FkZXIgdmlldyBvZiB0aGUgc3lzdGVtIHRvIHVuZGVyc3RhbmQgdGhlIG1vdGl2YXRpb24gYmVoaW5kIHRoaXMgY2hlY2suIEkmIzM5O2QgYmUgbG9va2luZyBmb3IgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uLCB0ZXN0IGNhc2VzLCBvciByZWNlbnQgY29kZSBjaGFuZ2VzIHRoYXQgaW52b2x2ZSB0aGlzIGZ1bmN0aW9uLgoKU3BlY2lmaWNhbGx5LCBJJiMzOTtkIHdhbnQgdG8gcXVpY2tseSByZWNhbGw6IHdoYXQgYXJlIHRoZSB0eXBpY2FsIGlucHV0cyBhbmQgb3V0cHV0cyBmb3IgdGhpcyBmdW5jdGlvbj8gRG9lcyBpdCBoYW5kbGUgZWRnZSBjYXNlcyBwcm9wZXJseT8gV2hhdCBhcmUgdGhlIGNvbXB1dGF0aW9uYWwgY29tcGxleGl0aWVzIGludm9sdmVkPyBEb2VzIGl0IGhhdmUgYW55IGtub3duIGRlcGVuZGVuY2llcyB0aGF0IG1pZ2h0IGFmZmVjdCBwZXJmb3JtYW5jZSBvciBzdGFiaWxpdHk/IEkmIzM5O2QgYmUgbG9va2luZyBmb3IgcG90ZW50aWFsIGFyZWFzIG9mIGNvbmNlcm46IGluZWZmaWNpZW50IGFsZ29yaXRobXMsIG1lbW9yeSBsZWFrcywgb3IgdW5oYW5kbGVkIGV4Y2VwdGlvbnMgdGhhdCBjb3VsZCBiZSBsdXJraW5nIHdpdGhpbiBpdHMgaW1wbGVtZW50YXRpb24uIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwMjo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb2xsYXBzZV9zaW5nbGVfcG1kJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0va2h1Z2VwYWdlZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2todWdlcGFnZWQuYz0yNjgxPXN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGNvbGxhcHNlX3NjYW5fZmlsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMjc5MC0gKi9cbm1tL2todWdlcGFnZWQuYzoyNzkxOnN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGNvbGxhcHNlX3NpbmdsZV9wbWQodW5zaWduZWQgbG9uZyBhZGRyLFxubW0va2h1Z2VwYWdlZC5jLTI3OTItXHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBib29sICpsb2NrX2Ryb3BwZWQsXG4tLVxubW0va2h1Z2VwYWdlZC5jPTI4NDg9c3RhdGljIHZvaWQgY29sbGFwc2Vfc2Nhbl9tbV9zbG90KHVuc2lnbmVkIGludCBwcm9ncmVzc19tYXgsXG4tLVxubW0va2h1Z2VwYWdlZC5jLTI5MTgtXG5tbS9raHVnZXBhZ2VkLmM6MjkxOTpcdFx0XHQqcmVzdWx0ID0gY29sbGFwc2Vfc2luZ2xlX3BtZChraHVnZXBhZ2VkX3NjYW4uYWRkcmVzcyxcbm1tL2todWdlcGFnZWQuYy0yOTIwLVx0XHRcdFx0XHRcdCAgICAgIHZtYSwgXHUwMDI2bG9ja19kcm9wcGVkLCBjYyk7XG4tLVxubW0va2h1Z2VwYWdlZC5jPTMxODk9aW50IG1hZHZpc2VfY29sbGFwc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG4tLVxubW0va2h1Z2VwYWdlZC5jLTMyMzctXG5tbS9raHVnZXBhZ2VkLmM6MzIzODpcdFx0cmVzdWx0ID0gY29sbGFwc2Vfc2luZ2xlX3BtZChhZGRyLCB2bWEsIFx1MDAyNm1tYXBfdW5sb2NrZWQsIGNjKTtcbm1tL2todWdlcGFnZWQuYy0zMjM5LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwMjo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzk1MgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDEyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBDb25maWd1cmF0aW9uIENvbnVuZHJ1bSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGVzc2VudGlhbCBjb25maWd1cmF0aW9ucyBmb3IgdGhpcyBwYXJ0aWN1bGFyIGtlcm5lbCBjb21wb25lbnQuIEl0IGxvb2tzIGxpa2UgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBpcyBkZWZpbml0ZWx5IGEgcHJlcmVxdWlzaXRlLCBnaXZlbiBpdHMgZGlyZWN0IGxpbmsgdG8gYGtodWdlcGFnZWQuY2AgaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IE1ha2VmaWxlLiBNYWtlcyBzZW5zZTsgdGhhdCYjMzk7cyB0aGUgY29yZSBvZiBob3cgdHJhbnNwYXJlbnQgaHVnZXBhZ2VzIGFyZSBtYW5hZ2VkLgoKVGhlbiB0aGVyZSYjMzk7cyBgVVNFUkZBVUxURkRgLCB3aGljaCBpcyB0aWVkIHRvIHVzZXJmYXVsdGZkIG1pbm9yIGZhdWx0IHN1cHBvcnQuIEFuZCBzaW5jZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHg4Ni9hbWQ2NCBzeXN0ZW1zIGhlcmUsIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IGBIQVZFX0FSQ0hfVVNFUkZBVUxURkRfTUlOT1JgIGlzIGVuYWJsZWQuIFRpbWUgdG8gZGl2ZSBpbnRvIGBhcmNoL3g4Ni9LY29uZmlnYCBhbmQgc2VlIHdoYXQgdGhlIGFyY2hpdGVjdHVyZSBzYXlzIGFib3V0IHRoaXMuIEkmIzM5O20gZ29pbmcgdG8gbmVlZCB0byB0cmFjayBkb3duIHRoZSBLY29uZmlnIGRlZmluaXRpb24gdG8gZW5zdXJlIGl0JiMzOTtzIHNldCBjb3JyZWN0bHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDAyOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0hBVkVfQVJDSF9VU0VSRkFVTFRGRF9NSU5PUiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L0tjb25maWc9NTg9Y29uZmlnIFg4NlxuLS1cbmFyY2gveDg2L0tjb25maWctMjE0LVx0c2VsZWN0IEhBVkVfQVJDSF9VU0VSRkFVTFRGRF9XUCAgICAgICAgIGlmIFg4Nl82NCBcdTAwMjZcdTAwMjYgVVNFUkZBVUxURkRcbmFyY2gveDg2L0tjb25maWc6MjE1Olx0c2VsZWN0IEhBVkVfQVJDSF9VU0VSRkFVTFRGRF9NSU5PUlx0aWYgWDg2XzY0IFx1MDAyNlx1MDAyNiBVU0VSRkFVTFRGRFxuYXJjaC94ODYvS2NvbmZpZy0yMTYtXHRzZWxlY3QgSEFWRV9BUkNIX1ZNQVBfU1RBQ0tcdFx0aWYgWDg2XzY0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDAyOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4NDQ0CgkJCQkJCQlvdXRwdXQ6IDE2NgoJCQkJCQkJdGhvdWdodHM6IDE0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBLZXJuZWwgQ29uZmlndXJhdGlvbiBmb3IgRnV6emluZyoqCgpPa2F5LCBzbyB0aGUgS2NvbmZpZyBmbGFncyB3ZSYjMzk7cmUgZm9jdXNpbmcgb24gaGVyZSBhcmUgYFVTRVJGQVVMVEZEYCBhbmQgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYC4gSSBhbHdheXMgbGlrZSB0byBkb3VibGUtY2hlY2sgbXkgYXNzdW1wdGlvbnMsIHNvIGxldCYjMzk7cyBydW4gdGhyb3VnaCB0aGUgY3JpdGVyaWEuCgpgV29ydGhGdXp6aW5nYCBpcyBzZXQgdG8gdHJ1ZSwgd2hpY2ggYWxpZ25zIHdpdGggbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgc3lzdGVtLiBUaGUgYEVuYWJsZUNvbmZpZ3NgIGxpc3QgZXhwbGljaXRseSBpbmNsdWRlcyBib3RoIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgYW5kIGBVU0VSRkFVTFRGRGAsIHdoaWNoIGlzIGV4YWN0bHkgd2hhdCBJIGV4cGVjdGVkIGJhc2VkIG9uIHRoZSBpbml0aWFsIGFzc2Vzc21lbnQuIFRoZSBgRm9jdXNTeW1ib2xzYCBhcmUgYWxzbyBhcyBJIHdvdWxkIGhhdmUgYW50aWNpcGF0ZWQ6IHdlJiMzOTtyZSBrZXllZCBpbiBvbiBmdW5jdGlvbnMgbGlrZSBgdHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwYCwgYGNvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwYCwgYG1hZHZpc2VfY29sbGFwc2VgLCBhbmQgYGNvbGxhcHNlX3NpbmdsZV9wbWRgLiBUaGVzZSBtYWtlIHBlcmZlY3Qgc2Vuc2UgZ2l2ZW4gdGhlIG5hdHVyZSBvZiB0cmFuc3BhcmVudCBodWdlcGFnZXMgYW5kIHVzZXJmYXVsdGZkOyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGluIHRoYXQgYXJlYS4gVGhhdCYjMzk7cyBhIHNvbGlkLCBjb25jaXNlIHJlYXNvbmluZyBmb3IgdGhpcyBhc3Nlc3NtZW50LgoKSG1tLCBJIHRoaW5rIHRoYXQmIzM5O3MgaXQuIExldCBtZSBqdXN0IGNvbmZpcm0gdGhhdCBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZyBlbHNlIGluIG15IGV2YWx1YXRpb24uIFl1cCwgZXZlcnl0aGluZyBpcyBjbGVhciBhbmQgYWNjdXJhdGUuIExldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AuIERvbmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDAyOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7LAogICAgJiMzNDtVU0VSRkFVTFRGRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RyeV9jb2xsYXBzZV9wdGVfbWFwcGVkX3RocCYjMzQ7LAogICAgJiMzNDtjb2xsYXBzZV9wdGVfbWFwcGVkX3RocCYjMzQ7LAogICAgJiMzNDttYWR2aXNlX2NvbGxhcHNlJiMzNDssCiAgICAmIzM0O2NvbGxhcHNlX3NpbmdsZV9wbWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMga2h1Z2VwYWdlZCBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IChtbS9raHVnZXBhZ2VkLmMpIHRvIHByZXZlbnQgY29sbGFwc2luZyBQVEUtbWFwcGVkIHRyYW5zcGFyZW50IGh1Z2VwYWdlcyBmb3IgVk1BcyByZWdpc3RlcmVkIHdpdGggdXNlcmZhdWx0ZmQgbWlub3IgZmF1bHQgaGFuZGxpbmcgKHVzZXJmYXVsdGZkX21pbm9yKS4gVGhpcyBpcyByZWFjaGFibGUgdmlhIHVzZXJmYXVsdGZkIHN5c2NhbGxzIGFuZCBNQURWX0NPTExBUFNFIG1hZHZpc2UgY2FsbHMgb3IgYmFja2dyb3VuZCBraHVnZXBhZ2VkIGNvbGxhcHNlIGFuZCB3YXJyYW50cyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7LAogICAgJiMzNDtVU0VSRkFVTFRGRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RyeV9jb2xsYXBzZV9wdGVfbWFwcGVkX3RocCYjMzQ7LAogICAgJiMzNDtjb2xsYXBzZV9wdGVfbWFwcGVkX3RocCYjMzQ7LAogICAgJiMzNDttYWR2aXNlX2NvbGxhcHNlJiMzNDssCiAgICAmIzM0O2NvbGxhcHNlX3NpbmdsZV9wbWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMga2h1Z2VwYWdlZCBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IChtbS9raHVnZXBhZ2VkLmMpIHRvIHByZXZlbnQgY29sbGFwc2luZyBQVEUtbWFwcGVkIHRyYW5zcGFyZW50IGh1Z2VwYWdlcyBmb3IgVk1BcyByZWdpc3RlcmVkIHdpdGggdXNlcmZhdWx0ZmQgbWlub3IgZmF1bHQgaGFuZGxpbmcgKHVzZXJmYXVsdGZkX21pbm9yKS4gVGhpcyBpcyByZWFjaGFibGUgdmlhIHVzZXJmYXVsdGZkIHN5c2NhbGxzIGFuZCBNQURWX0NPTExBUFNFIG1hZHZpc2UgY2FsbHMgb3IgYmFja2dyb3VuZCBraHVnZXBhZ2VkIGNvbGxhcHNlIGFuZCB3YXJyYW50cyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwMjo0OTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDAyOjQ5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIChgdXNlcmZhdWx0ZmRfbWlub3Iodm1hKWApIGluIGB0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHAoKWAgdG8gcHJldmVudCBjb2xsYXBzaW5nIFBURS1tYXBwZWQgVEhQcyBvbiBWTUFzIHJlZ2lzdGVyZWQgd2l0aCB1c2VyZmF1bHRmZC1taW5vciBtb2RlLCBhbG9uZyB3aXRoIGNvcnJlc3BvbmRpbmcgc2VsZnRlc3QgdXBkYXRlcyBpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC11bml0LXRlc3RzLmNgLiBcblxuVGhpcyBtb2RpZmljYXRpb24gZG9lcyBub3QgYWxsb2NhdGUgbmV3IGJ1ZmZlcnMsIG1hbmlwdWxhdGUgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIGRhdGEsIGFsdGVyIHBhZGRpbmcgb3Igc3RydWN0dXJlIGZpZWxkcyBjb3BpZWQgdG8gdXNlcnNwYWNlLCBvciBjaGFuZ2UgYW55IGRhdGEgbGVuZ3Rocy9ib3VuZHMgY2hlY2tpbmcgdGhhdCBjb3VsZCBsZWFkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGxlYWtzLiBTdGFuZGFyZCBzYW5pdGl6ZXJzIGFuZCBidWcgZGV0ZWN0b3JzIChzdWNoIGFzIEtBU0FOIGFuZCBwYWdlIHRhYmxlIGNoZWNrcykgYXJlIHN1ZmZpY2llbnQgZm9yIHZhbGlkYXRpbmcgdGhpcyBmdW5jdGlvbmFsaXR5LCBhbmQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgZGV0ZWN0YWJsZSBvbmx5IGJ5IEtNU0FOIGFyZSBpbnRyb2R1Y2VkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZWU3YjY1ODE2NTkyZGI4Yjk5ZmFlZjJmNDkyM2U4MjFkZDViY2VjMQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgU2VwIDEwIDAyOjQ4OjE0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0va2h1Z2VwYWdlZC5jIGIvbW0va2h1Z2VwYWdlZC5jCmluZGV4IDc1NjM5Mjk4ZWZjMjcuLmU2OTQ3ZmUxNDJlZWEgMTAwNjQ0Ci0tLSBhL21tL2todWdlcGFnZWQuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9raHVnZXBhZ2VkLmMKQEAgLTE4OTQsNiAmIzQzOzE4OTQsMTMgQEAgc3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgdHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ24KIAlpZiAodXNlcmZhdWx0ZmRfcHJvdGVjdGVkKHZtYSkpCiAJCXJldHVybiBTQ0FOX1BURV9VRkZEOwogCiYjNDM7CS8qCiYjNDM7CSAqIFVzZXJmYXVsdGZkLW1pbm9yLXJlZ2lzdGVyZWQgVk1BcyBzaG91bGQgbm90IGJlIGNvbGxhcHNlZCwgYXMKJiM0MzsJICogdXNlcnNwYWNlIGlzIGV4cGVjdGluZyB0byBleHBsaWNpdGx5IGluc3RhbGwgUFRFcy4KJiM0MzsJICovCiYjNDM7CWlmICh1c2VyZmF1bHRmZF9taW5vcih2bWEpKQomIzQzOwkJcmV0dXJuIFNDQU5fUFRFX1VGRkQ7CiYjNDM7CiAJZm9saW8gPSBmaWxlbWFwX2xvY2tfZm9saW8odm1hLSZndDt2bV9maWxlLSZndDtmX21hcHBpbmcsCiAJCQkgICAgICAgbGluZWFyX3BhZ2VfaW5kZXgodm1hLCBoYWRkcikpOwogCWlmIChJU19FUlIoZm9saW8pKQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC11bml0LXRlc3RzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLXVuaXQtdGVzdHMuYwppbmRleCBlZjliMzk1NmJkY2ZkLi42ZjIzNjBmOWI3NWRiIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLXVuaXQtdGVzdHMuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLXVuaXQtdGVzdHMuYwpAQCAtNTE4LDE5ICYjNDM7NTE4LDM0IEBAIHN0YXRpYyB2b2lkIHVmZmRfd3BfZm9ya19waW5fd2l0aF9ldmVudF90ZXN0KHVmZmRfZ2xvYmFsX3Rlc3Rfb3B0c190ICpnb3B0cywgdWZmCiAJdWZmZF93cF9mb3JrX3Bpbl90ZXN0X2NvbW1vbihnb3B0cywgYXJncywgdHJ1ZSk7CiB9CiAKLXN0YXRpYyB2b2lkIGNoZWNrX21lbW9yeV9jb250ZW50cyh1ZmZkX2dsb2JhbF90ZXN0X29wdHNfdCAqZ29wdHMsIGNoYXIgKnApCiYjNDM7c3RhdGljIGludCBfX2NoZWNrX21lbW9yeV9jb250ZW50cyh1bnNpZ25lZCBsb25nIG9mZnNldCwKJiM0MzsJCQkJICAgdW5zaWduZWQgbG9uZyBucl9wYWdlcywKJiM0MzsJCQkJICAgdWZmZF9nbG9iYWxfdGVzdF9vcHRzX3QgKmdvcHRzLAomIzQzOwkJCQkgICBjaGFyICpwKQogewogCXVuc2lnbmVkIGxvbmcgaSwgajsKIAl1aW50OF90IGV4cGVjdGVkX2J5dGU7CiAKLQlmb3IgKGkgPSAwOyBpICZsdDsgZ29wdHMtJmd0O25yX3BhZ2VzOyAmIzQzOyYjNDM7aSkgewomIzQzOwlpZiAobnJfcGFnZXMgJiM0Mzsgb2Zmc2V0ICZsdDsgbnJfcGFnZXMpCiYjNDM7CQllcnIoJiMzNDtvdmVyZmxvdyBpbiBtZW1vcnkgY2hlY2smIzM0Oyk7CiYjNDM7CWlmIChucl9wYWdlcyAmIzQzOyBvZmZzZXQgJmd0OyBnb3B0cy0mZ3Q7bnJfcGFnZXMpCiYjNDM7CQllcnIoJiMzNDtvdXQgb2YgYm91bmRzIG1lbW9yeSBjaGVjayYjMzQ7KTsKJiM0MzsKJiM0MzsJZm9yIChpID0gb2Zmc2V0OyBpICZsdDsgb2Zmc2V0ICYjNDM7IG5yX3BhZ2VzOyAmIzQzOyYjNDM7aSkgewogCQlleHBlY3RlZF9ieXRlID0gfigodWludDhfdCkoaSAlICgodWludDhfdCktMSkpKTsKIAkJZm9yIChqID0gMDsgaiAmbHQ7IGdvcHRzLSZndDtwYWdlX3NpemU7IGomIzQzOyYjNDM7KSB7CiAJCQl1aW50OF90IHYgPSAqKHVpbnQ4X3QgKikocCAmIzQzOyAoaSAqIGdvcHRzLSZndDtwYWdlX3NpemUpICYjNDM7IGopOwogCQkJaWYgKHYgIT0gZXhwZWN0ZWRfYnl0ZSkKLQkJCQllcnIoJiMzNDt1bmV4cGVjdGVkIHBhZ2UgY29udGVudHMmIzM0Oyk7CiYjNDM7CQkJCXJldHVybiAxOwogCQl9CiAJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBjaGVja19tZW1vcnlfY29udGVudHModWZmZF9nbG9iYWxfdGVzdF9vcHRzX3QgKmdvcHRzLCBjaGFyICpwKQomIzQzO3sKJiM0MzsJcmV0dXJuIF9fY2hlY2tfbWVtb3J5X2NvbnRlbnRzKDAsIGdvcHRzLSZndDtucl9wYWdlcywgZ29wdHMsIHApOwogfQogCiBzdGF0aWMgdm9pZCB1ZmZkX21pbm9yX3Rlc3RfY29tbW9uKHVmZmRfZ2xvYmFsX3Rlc3Rfb3B0c190ICpnb3B0cywgYm9vbCB0ZXN0X2NvbGxhcHNlLCBib29sIHRlc3Rfd3ApCkBAIC01MzksNiAmIzQzOzU1NCw4IEBAIHN0YXRpYyB2b2lkIHVmZmRfbWlub3JfdGVzdF9jb21tb24odWZmZF9nbG9iYWxfdGVzdF9vcHRzX3QgKmdvcHRzLCBib29sIHRlc3RfY29sCiAJcHRocmVhZF90IHVmZmRfbW9uOwogCWNoYXIgYyA9ICYjMzk7XDAmIzM5OzsKIAlzdHJ1Y3QgdWZmZF9hcmdzIGFyZ3MgPSB7IDAgfTsKJiM0MzsJdW5zaWduZWQgbG9uZyBjaGVja2VkID0gMDsKJiM0MzsJYm9vbCBiYWRfY29udGVudHM7CiAJYXJncy5nb3B0cyA9IGdvcHRzOwogCiAJLyoKQEAgLTU2NCwyNCAmIzQzOzU4MSw2NSBAQCBzdGF0aWMgdm9pZCB1ZmZkX21pbm9yX3Rlc3RfY29tbW9uKHVmZmRfZ2xvYmFsX3Rlc3Rfb3B0c190ICpnb3B0cywgYm9vbCB0ZXN0X2NvbAogCWlmIChwdGhyZWFkX2NyZWF0ZSgmYW1wO3VmZmRfbW9uLCBOVUxMLCB1ZmZkX3BvbGxfdGhyZWFkLCAmYW1wO2FyZ3MpKQogCQllcnIoJiMzNDt1ZmZkX3BvbGxfdGhyZWFkIGNyZWF0ZSYjMzQ7KTsKIAomIzQzOwlpZiAodGVzdF9jb2xsYXBzZSkgewomIzQzOwkJLyoKJiM0MzsJCSAqIFJlYWQganVzdCBhIHNpbmdsZSBwYWdlIGFuZCB0cnkgY29sbGFwc2luZy4gVGhlIGNvbGxhcHNlCiYjNDM7CQkgKiBzaG91bGQgZWl0aGVyIGJlIHJlamVjdGVkIG9yIGJlIGEgbm8tb3AuCiYjNDM7CQkgKi8KJiM0MzsJCWlmIChfX2NoZWNrX21lbW9yeV9jb250ZW50cygwLCAxLCBnb3B0cywgZ29wdHMtJmd0O2FyZWFfZHN0X2FsaWFzKSkKJiM0MzsJCQllcnIoJiMzNDt1bmV4cGVjdGVkIG1lbW9yeSBjb250ZW50cyBiZWZvcmUgY29sbGFwc2UmIzM0Oyk7CiYjNDM7CiYjNDM7CQkvKiBNQURWX0NPTExBUFNFIG1pZ2h0IHJldHVybiBFSU5WQUwgZm9yIHVmZmQtbWlub3IgVk1Bcy4gKi8KJiM0MzsJCW1hZHZpc2UoZ29wdHMtJmd0O2FyZWFfZHN0X2FsaWFzLCBnb3B0cy0mZ3Q7bnJfcGFnZXMgKiBnb3B0cy0mZ3Q7cGFnZV9zaXplLAomIzQzOwkJCU1BRFZfQ09MTEFQU0UpOwomIzQzOwkJLyoKJiM0MzsJCSAqIElmIHRoZSBhYm92ZSBjb2xsYXBzZSBtYXBwZWQgcGFnZXMgdGhhdCB3ZXJlIG5vdCBleHBsaWNpdGx5CiYjNDM7CQkgKiBDT05USU5VRSYjMzk7ZCwgdGhlIGJlbG93IF9fY2hlY2tfbWVtb3J5X2NvbnRlbnRzKCkgd2lsbCBub3QKJiM0MzsJCSAqIGZhdWx0IG9uIHNvbWUgcGFnZXMsIHJlc3VsdGluZyBpbiBpbmNvcnJlY3QgY29udGVudHMuIFRoZQomIzQzOwkJICogUFRFIGZvciB0aGUgZmlyc3QgcGFnZSBtYXkgZ2V0IHJldHJhY3RlZCwgc28gYXZvaWQgY2hlY2tpbmcKJiM0MzsJCSAqIHRoYXQgcGFnZSwgYXMgd2UgbWlnaHQgdGFrZSBhIHNlY29uZCBmYXVsdCwgZmxpcHBpbmcgdGhlCiYjNDM7CQkgKiBjb250ZW50cyBhIHNlY29uZCB0aW1lLgomIzQzOwkJICovCiYjNDM7CQljaGVja2VkID0gMTsKJiM0MzsJfQomIzQzOwogCS8qCiAJICogUmVhZCBlYWNoIG9mIHRoZSBwYWdlcyBiYWNrIHVzaW5nIHRoZSBVRkZELXJlZ2lzdGVyZWQgbWFwcGluZy4gV2UKIAkgKiBleHBlY3QgdGhhdCB0aGUgZmlyc3QgdGltZSB3ZSB0b3VjaCBhIHBhZ2UsIGl0IHdpbGwgcmVzdWx0IGluIGEgbWlub3IKIAkgKiBmYXVsdC4gdWZmZF9wb2xsX3RocmVhZCB3aWxsIHJlc29sdmUgdGhlIGZhdWx0IGJ5IGJpdC1mbGlwcGluZyB0aGUKIAkgKiBwYWdlJiMzOTtzIGNvbnRlbnRzLCBhbmQgdGhlbiBpc3N1aW5nIGEgQ09OVElOVUUgaW9jdGwuCiAJICovCi0JY2hlY2tfbWVtb3J5X2NvbnRlbnRzKGdvcHRzLCBnb3B0cy0mZ3Q7YXJlYV9kc3RfYWxpYXMpOwomIzQzOwliYWRfY29udGVudHMgPSAhIV9fY2hlY2tfbWVtb3J5X2NvbnRlbnRzKGNoZWNrZWQsIGdvcHRzLSZndDtucl9wYWdlcyAtIGNoZWNrZWQsCiYjNDM7CQkJCQkJICAgIGdvcHRzLCBnb3B0cy0mZ3Q7YXJlYV9kc3RfYWxpYXMpOwogCiAJaWYgKHdyaXRlKGdvcHRzLSZndDtwaXBlZmRbMV0sICZhbXA7Yywgc2l6ZW9mKGMpKSAhPSBzaXplb2YoYykpCiAJCWVycigmIzM0O3BpcGUgd3JpdGUmIzM0Oyk7CiAJaWYgKHB0aHJlYWRfam9pbih1ZmZkX21vbiwgTlVMTCkpCiAJCWVycigmIzM0O2pvaW4oKSBmYWlsZWQmIzM0Oyk7CiAKJiM0MzsJaWYgKGJhZF9jb250ZW50cyAmYW1wOyZhbXA7IHRlc3RfY29sbGFwc2UpIHsKJiM0MzsJCXVmZmRfdGVzdF9mYWlsKCYjMzQ7dW5leHBlY3RlZCBtZW1vcnkgY29udGVudHMgYWZ0ZXIgY29sbGFwc2UmIzM0Oyk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKGJhZF9jb250ZW50cykgewomIzQzOwkJdWZmZF90ZXN0X2ZhaWwoJiMzNDt1bmV4cGVjdGVkIG1lbW9yeSBjb250ZW50cyYjMzQ7KTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwogCWlmICh0ZXN0X2NvbGxhcHNlKSB7CiYjNDM7CQkvKgomIzQzOwkJICogTUFEVl9DT0xMQVBTRSB3aWxsIGZhaWwgdW5sZXNzIHVzZXJmYXVsdGZkLW1pbm9yIGlzCiYjNDM7CQkgKiB1bnJlZ2lzdGVyZWQuCiYjNDM7CQkgKi8KJiM0MzsJCWlmICh1ZmZkX3VucmVnaXN0ZXIoZ29wdHMtJmd0O3VmZmQsIGdvcHRzLSZndDthcmVhX2RzdF9hbGlhcywKJiM0MzsJCQkJICAgIGdvcHRzLSZndDtucl9wYWdlcyAqIGdvcHRzLSZndDtwYWdlX3NpemUpKQomIzQzOwkJCWVycigmIzM0O3VmZmRfdW5yZWdpc3RlciBiZWZvcmUgTUFEVl9DT0xMQVBTRSBmYWlsZWQmIzM0Oyk7CiYjNDM7CiYjNDM7CQkvKiBNQURWX0NPTExBUFNFIHNob3VsZCBzdWNjZWVkIHdpdGggdXNlcmZhdWx0ZmQgdW5yZWdpc3RlcmVkLiAqLwogCQlpZiAobWFkdmlzZShnb3B0cy0mZ3Q7YXJlYV9kc3RfYWxpYXMsIGdvcHRzLSZndDtucl9wYWdlcyAqIGdvcHRzLSZndDtwYWdlX3NpemUsCiAJCQkgICAgTUFEVl9DT0xMQVBTRSkpIHsKLQkJCS8qIEl0JiMzOTtzIGZpbmUgdG8gZmFpbCBmb3IgdGhpcyBvbmUuLi4gKi8KLQkJCXVmZmRfdGVzdF9za2lwKCYjMzQ7TUFEVl9DT0xMQVBTRSBmYWlsZWQmIzM0Oyk7CiYjNDM7CQkJdWZmZF90ZXN0X2ZhaWwoJiMzNDtNQURWX0NPTExBUFNFIGZhaWxlZCYjMzQ7KTsKIAkJCXJldHVybjsKIAkJfQogCkBAIC01OTMsNyAmIzQzOzY1MSwxMCBAQCBzdGF0aWMgdm9pZCB1ZmZkX21pbm9yX3Rlc3RfY29tbW9uKHVmZmRfZ2xvYmFsX3Rlc3Rfb3B0c190ICpnb3B0cywgYm9vbCB0ZXN0X2NvbAogCQkgKiBUaGlzIHdvbiYjMzk7dCBjYXVzZSB1ZmZkLWZhdWx0IC0gaXQgcHVyZWx5IGp1c3QgbWFrZXMgc3VyZSB0aGVyZQogCQkgKiB3YXMgbm8gY29ycnVwdGlvbi4KIAkJICovCi0JCWNoZWNrX21lbW9yeV9jb250ZW50cyhnb3B0cywgZ29wdHMtJmd0O2FyZWFfZHN0X2FsaWFzKTsKJiM0MzsJCWlmIChjaGVja19tZW1vcnlfY29udGVudHMoZ29wdHMsIGdvcHRzLSZndDthcmVhX2RzdF9hbGlhcykpIHsKJiM0MzsJCQl1ZmZkX3Rlc3RfZmFpbCgmIzM0O3VuZXhwZWN0ZWQgbWVtb3J5IGNvbnRlbnRzJiMzNDspOwomIzQzOwkJCXJldHVybjsKJiM0MzsJCX0KIAl9CiAKIAlpZiAoYXJncy5taXNzaW5nX2ZhdWx0cyAhPSAwIHx8IGFyZ3MubWlub3JfZmF1bHRzICE9IGdvcHRzLSZndDtucl9wYWdlcykKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDAyOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5MjUKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAzNzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQb3RlbnRpYWwgTmVlZCBmb3IgRGVkaWNhdGVkIEtNU0FOIEZ1enppbmcqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBnaXZlbiBhIGtlcm5lbCBwYXRjaCBhbmQgSSBuZWVkIHRvIGRldGVybWluZSBpZiBpdCB3YXJyYW50cyBpdHMgb3duIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIExldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJJiMzOTtsbCBleGFtaW5lIHRoZSBwYXRjaCBpdHNlbGYuCgpSaWdodCwgdGhlIGRpZmYgc2hvd3MgYSBtb2RpZmljYXRpb24gdG8gYG1tL2todWdlcGFnZWQuY2AuIEl0IGxvb2tzIGxpa2UgdGhleSYjMzk7dmUgYWRkZWQgYSBuZXcgY2hlY2sgd2l0aGluIGB0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHBgLiBTcGVjaWZpY2FsbHksIHRoZXkmIzM5O3JlIG5vdyBwcmV2ZW50aW5nIHRoZSBjb2xsYXBzaW5nIG9mIFRIUHMgKFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMpIGlmIGEgVk1BIChWaXJ0dWFsIE1lbW9yeSBBcmVhKSBpcyBhc3NvY2lhdGVkIHdpdGggYSBgdXNlcmZhdWx0ZmRfbWlub3JgIHJlZ2lzdHJhdGlvbi4gVGhlIGNvbW1lbnQgbWVudGlvbnMgdGhhdCB1c2VyIHNwYWNlIGV4cGVjdHMgdG8gZXhwbGljaXRseSBpbnN0YWxsIFBURXMgaW4gdGhlc2UgY2FzZXMsIHNvIGNvbGxhcHNpbmcgd291bGQgYmUgaW5jb3JyZWN0LgoKVGhlcmUmIzM5O3MgYWxzbyBhIG5vdGUgYWJvdXQgc2VsZnRlc3QgdXBkYXRlcyBpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC11bml0LXRlc3RzLmNgLiBUaGF0JiMzOTtzIGdvb2QsIGl0IG1lYW5zIHRoZXkmIzM5O3JlIGFkZGluZyB0ZXN0cywgd2hpY2ggaW5jcmVhc2VzIG15IGNvbmZpZGVuY2UgdGhhdCB0aGUgaW50ZW5kZWQgYmVoYXZpb3IgaXMgY29ycmVjdGx5IGltcGxlbWVudGVkLgoKTm93LCBteSBmb2N1cyBpcyBvbiBgdHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHBvdGVudGlhbCBLTVNBTiBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjb2RlIHBhdGguIEkmIzM5O2xsIGVpdGhlciBncmVwIGZvciByZWxhdGVkIHJlZmVyZW5jZXMgb3IganVzdCByZWFkIHRoZSBjb2RlIG9mIHRoYXQgZnVuY3Rpb24uIEkmIzM5O20gbG9va2luZyBmb3Igd2hlcmUgdGhpcyBuZXcgYHVzZXJmYXVsdGZkX21pbm9yYCBjaGVjayBpcyBpbnRlZ3JhdGVkIGludG8gdGhlIGxhcmdlciBwcm9jZXNzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGF0YSBmbG93cywgcG90ZW50aWFsIHJhY2VzLCBhbmQgYXJlYXMgd2hlcmUgdGhpcyBuZXcgbG9naWMgY291bGQgaW50cm9kdWNlIG1lbW9yeSBzYWZldHkgaXNzdWVzLiBJcyB0aGlzIG5ldyBjaGVjayBzdWZmaWNpZW50LCBvciBkb2VzIGl0IGludHJvZHVjZSBhbiBlZGdlIGNhc2UgdGhhdCBuZWVkcyBkZWRpY2F0ZWQgYXR0ZW50aW9uIHVuZGVyIGZ1enppbmc/IFNwZWNpZmljYWxseSwgSSYjMzk7bGwgbmVlZCB0byB0aGluayBhYm91dDoKCiogICBIb3cgaXMgdGhlIGB1c2VyZmF1bHRmZF9taW5vcmAgZmxhZyBzZXQgYW5kIHJlc2V0PyBJcyB0aGVyZSBhIHJhY2UgY29uZGl0aW9uIHdpdGggaXQ/CiogICBBcmUgdGhlcmUgb3RoZXIgcmVsYXRlZCBkYXRhIHN0cnVjdHVyZXMgdGhhdCBhcmUgdXBkYXRlZCBhbG9uZ3NpZGUgd2l0aCB0aGUgVk1BPwoqICAgSG93IGlzIHRoaXMgY2hlY2sgY29vcmRpbmF0ZWQgd2l0aGluIHRoZSBraHVnZXBhZ2VkIGJhY2tncm91bmQgdGhyZWFkPwoKVGhlIGdvYWwgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgY2hhbmdlIG1pZ2h0IGludHJvZHVjZSBhIG5ldyBtZW1vcnkgZXJyb3Igc3VyZmFjZSwgb3IgYSBuZXcgd2F5IHRvIHRyaWdnZXIgYW4gZXhpc3RpbmcgZXJyb3IsIHRoYXQgS01TQU4gd291bGQgY2F0Y2ggKmlmKiBpdCB3YXMgZnV6emVkIHdpdGggdGhpcyBjb2RlIGluIG1pbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDAyOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RyeV9jb2xsYXBzZV9wdGVfbWFwcGVkX3RocCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2todWdlcGFnZWQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9raHVnZXBhZ2VkLmM9MTgxNT1zdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBzZXRfaHVnZV9wbWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMTg1MC1cbm1tL2todWdlcGFnZWQuYzoxODUxOnN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IHRyeV9jb2xsYXBzZV9wdGVfbWFwcGVkX3RocChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxubW0va2h1Z2VwYWdlZC5jLTE4NTItXHRcdGJvb2wgaW5zdGFsbF9wbWQpXG4tLVxubW0va2h1Z2VwYWdlZC5jPTIwOTY9dm9pZCBjb2xsYXBzZV9wdGVfbWFwcGVkX3RocChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbm1tL2todWdlcGFnZWQuYy0yMDk4LXtcbm1tL2todWdlcGFnZWQuYzoyMDk5Olx0dHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwKG1tLCBhZGRyLCBpbnN0YWxsX3BtZCk7XG5tbS9raHVnZXBhZ2VkLmMtMjEwMC19XG4tLVxubW0va2h1Z2VwYWdlZC5jPTIyNDk9c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2VfZmlsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbm1tL2todWdlcGFnZWQuYy0yNjI4LVx0ICogUmVtb3ZlIHB0ZSBwYWdlIHRhYmxlcywgc28gd2UgY2FuIHJlLWZhdWx0IHRoZSBwYWdlIGFzIGh1Z2UuXG5tbS9raHVnZXBhZ2VkLmM6MjYyOTpcdCAqIElmIE1BRFZfQ09MTEFQU0UsIGFkanVzdCByZXN1bHQgdG8gY2FsbCB0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHAoKS5cbm1tL2todWdlcGFnZWQuYy0yNjMwLVx0ICovXG4tLVxubW0va2h1Z2VwYWdlZC5jPTI3OTE9c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2Vfc2luZ2xlX3BtZCh1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxubW0va2h1Z2VwYWdlZC5jLTI4MzUtXHRcdGVsc2Vcbm1tL2todWdlcGFnZWQuYzoyODM2Olx0XHRcdHJlc3VsdCA9IHRyeV9jb2xsYXBzZV9wdGVfbWFwcGVkX3RocChtbSwgYWRkcixcbm1tL2todWdlcGFnZWQuYy0yODM3LVx0XHRcdFx0XHRcdFx0ICAgICAhY2MtXHUwMDNlaXNfa2h1Z2VwYWdlZCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDAyOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUyNzYKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGhhcHBlbmluZyBhcm91bmQgbGluZSAxODk0IGluIGBtbS9raHVnZXBhZ2VkLmNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGVyZSYjMzk7cyBhIHNwZWNpZmljIGZ1bmN0aW9uIG9yIGxvZ2ljIGJlaW5nIGV4ZWN1dGVkIHRoZXJlIHdpdGhpbiB0aGUga2VybmVsJiMzOTtzIGh1Z2UgcGFnZSBtYW5hZ2VtZW50LiBHaXZlbiB0aGUgZmlsZSwgaXQmIzM5O3MgaGlnaGx5IGxpa2VseSB0aGlzIGNvZGUgZGVhbHMgd2l0aCB0aGUga0h1Z2VwYWdlZCBkYWVtb24sIGFuZCBob3cgaXQgbWFuYWdlcyBvciBpbnRlcmFjdHMgd2l0aCBodWdlIHBhZ2VzLiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgZm9yIGNhbGxzIHRvIHRoZSBmdW5jdGlvbiwgYXMgd2VsbCBhcyB0aGUgc3Vycm91bmRpbmcgdmFyaWFibGUgYXNzaWdubWVudHMuIEkgc3VzcGVjdCB0aGVyZSBtYXkgYmUgaW50ZXJhY3Rpb25zIGFyb3VuZCB0aGUgYGtodWdlcGFnZWRgIGRhZW1vbiBhbmQgaG93IGl0IGlzIGludGVyYWN0aW5nIHdpdGggdGhlIG1lbW9yeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDI6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9raHVnZXBhZ2VkLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxODgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE4ODA6XHRcdC8qXG4xODgxOlx0XHQgKiBJZiB3ZSBhcmUgaGVyZSwgd2UmIzM5O3ZlIHN1Y2NlZWRlZCBpbiByZXBsYWNpbmcgYWxsIHRoZSBuYXRpdmUgcGFnZXNcbjE4ODI6XHRcdCAqIGluIHRoZSBwYWdlIGNhY2hlIHdpdGggYSBzaW5nbGUgaHVnZXBhZ2UuIElmIGEgbW0gd2VyZSB0byBmYXVsdC1pblxuMTg4MzpcdFx0ICogdGhpcyBtZW1vcnkgKG1hcHBlZCBieSBhIHN1aXRhYmx5IGFsaWduZWQgVk1BKSwgd2UmIzM5O2QgZ2V0IHRoZSBodWdlcGFnZVxuMTg4NDpcdFx0ICogYW5kIG1hcCBpdCBieSBhIFBNRCwgcmVnYXJkbGVzcyBvZiBzeXNmcyBUSFAgc2V0dGluZ3MuIEFzIHN1Y2gsIGxldCYjMzk7c1xuMTg4NTpcdFx0ICogYW5hbG9nb3VzbHkgZWxpZGUgc3lzZnMgVEhQIHNldHRpbmdzIGhlcmUgYW5kIGZvcmNlIGNvbGxhcHNlLlxuMTg4NjpcdFx0ICovXG4xODg3Olx0XHRpZiAoIXRocF92bWFfYWxsb3dhYmxlX29yZGVyKHZtYSwgdm1hLVx1MDAzZXZtX2ZsYWdzLCBUVkFfRk9SQ0VEX0NPTExBUFNFLCBQTURfT1JERVIpKVxuMTg4ODpcdFx0XHRyZXR1cm4gU0NBTl9WTUFfQ0hFQ0s7XG4xODg5Olx0XG4xODkwOlx0XHQvKlxuMTg5MTpcdFx0ICogS2VlcCBwbWQgcGd0YWJsZSB3aGlsZSB0aGUgdWZmZCBiaXQgaXMgaW4gdXNlOyBzZWUgY29tbWVudCBpblxuMTg5MjpcdFx0ICogcmV0cmFjdF9wYWdlX3RhYmxlcygpLlxuMTg5MzpcdFx0ICovXG4xODk0Olx0XHRpZiAodXNlcmZhdWx0ZmRfcHJvdGVjdGVkKHZtYSkpXG4xODk1Olx0XHRcdHJldHVybiBTQ0FOX1BURV9VRkZEO1xuMTg5NjpcdFxuMTg5NzpcdFx0LypcbjE4OTg6XHRcdCAqIFVzZXJmYXVsdGZkLW1pbm9yLXJlZ2lzdGVyZWQgVk1BcyBzaG91bGQgbm90IGJlIGNvbGxhcHNlZCwgYXNcbjE4OTk6XHRcdCAqIHVzZXJzcGFjZSBpcyBleHBlY3RpbmcgdG8gZXhwbGljaXRseSBpbnN0YWxsIFBURXMuXG4xOTAwOlx0XHQgKi9cbjE5MDE6XHRcdGlmICh1c2VyZmF1bHRmZF9taW5vcih2bWEpKVxuMTkwMjpcdFx0XHRyZXR1cm4gU0NBTl9QVEVfVUZGRDtcbjE5MDM6XHRcbjE5MDQ6XHRcdGZvbGlvID0gZmlsZW1hcF9sb2NrX2ZvbGlvKHZtYS1cdTAwM2V2bV9maWxlLVx1MDAzZWZfbWFwcGluZyxcbjE5MDU6XHRcdFx0XHQgICAgICAgbGluZWFyX3BhZ2VfaW5kZXgodm1hLCBoYWRkcikpO1xuMTkwNjpcdFx0aWYgKElTX0VSUihmb2xpbykpXG4xOTA3Olx0XHRcdHJldHVybiBTQ0FOX1BBR0VfTlVMTDtcbjE5MDg6XHRcbjE5MDk6XHRcdGlmICghaXNfcG1kX29yZGVyKGZvbGlvX29yZGVyKGZvbGlvKSkpIHtcbjE5MTA6XHRcdFx0cmVzdWx0ID0gU0NBTl9QQUdFX0NPTVBPVU5EO1xuMTkxMTpcdFx0XHRnb3RvIGRyb3BfZm9saW87XG4xOTEyOlx0XHR9XG4xOTEzOlx0XG4xOTE0Olx0XHRyZXN1bHQgPSBmaW5kX3BtZF9vcl90aHBfb3Jfbm9uZShtbSwgaGFkZHIsIFx1MDAyNnBtZCk7XG4xOTE1Olx0XHRzd2l0Y2ggKHJlc3VsdCkge1xuMTkxNjpcdFx0Y2FzZSBTQ0FOX1NVQ0NFRUQ6XG4xOTE3Olx0XHRcdGJyZWFrO1xuMTkxODpcdFx0Y2FzZSBTQ0FOX05PX1BURV9UQUJMRTpcbjE5MTk6XHRcdFx0LypcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDI6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjEzMgoJCQkJCQkJb3V0cHV0OiAxODcKCQkJCQkJCXRob3VnaHRzOiAzNTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhpcyBQYXRjaDogS01TQU4gRXhlbXB0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCB0aGUgcGF0Y2ggaXRzZWxmOiBpdCYjMzk7cyBhIHJlbGF0aXZlbHkgZm9jdXNlZCBjaGFuZ2UuIEluIGBtbS9raHVnZXBhZ2VkLmNgLCBzcGVjaWZpY2FsbHkgd2l0aGluIGB0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHAoKWAsIGl0IGludHJvZHVjZXMgYSBjaGVjayB1c2luZyBgdXNlcmZhdWx0ZmRfbWlub3Iodm1hKWAuIFRoaXMgaXMgYSBjcnVjaWFsIGFkZGl0aW9uOyBpdCYjMzk7cyBkZXNpZ25lZCB0byBwcmV2ZW50IGNvbGxhcHNpbmcgUFRFLW1hcHBlZCBUSFBzIGlmIHRoZSBWTUEgaXMgcmVnaXN0ZXJlZCB3aXRoIGB1c2VyZmF1bHRmZC1taW5vcmAuIFRoZSByYXRpb25hbGUgaXMgc3RyYWlnaHRmb3J3YXJkOiBgdXNlcmZhdWx0ZmQtbWlub3JgIHJlbGllcyBvbiB1c2Vyc3BhY2UgZXhwbGljaXRseSBpbnN0YWxsaW5nIFBURXMgdmlhIGBVRkZESU9fQ09OVElOVUVgLCBzbyBhdXRvbWF0aWMgY29sbGFwc2luZyB3b3VsZCBiZSBwcm9ibGVtYXRpYy4gVGhlIHNlY29uZCBwYXJ0IG9mIHRoZSBwYXRjaCBqdXN0IHVwZGF0ZXMgc29tZSBzZWxmdGVzdHMgdG8gcmVmbGVjdCB0aGlzIG5ldyBiZWhhdmlvci4KCk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbjogZG9lcyB0aGlzIHRyaWdnZXIgYW55IEtNU0FOIGNvbmNlcm5zPyBMZXQmIzM5O3MgZ28gdGhyb3VnaCB0aGUgY2hlY2tsaXN0LiBVbmluaXRpYWxpemVkIG1lbW9yeSBvciBwb3RlbnRpYWwgaW5mb3JtYXRpb24gbGVha3MgYXJlIG15IHByaW1hcnkgY29uY2VybnMuIERvZXMgdGhpcyBwYXRjaCBpbnZvbHZlIGFsbG9jYXRpbmcgKm5ldyogbWVtb3J5PyBObywgdGhhdCYjMzk7cyBhIHNpbXBsZSAmIzM0O25vLiYjMzQ7IERvZXMgaXQgY29weSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlcnNwYWNlLCBvciByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBBZ2Fpbiwgbm8uIEl0IGRvZXNuJiMzOTt0IHNlZW0gdG8gYWx0ZXIgYW55IGJvdW5kcyBjaGVja3MsIG1vZGlmeSBkYXRhIGxlbmd0aHMgaW4gYSB3YXkgdGhhdCBjb3VsZCBsZWFkIHRvIGlzc3Vlcywgbm9yIG1vZGlmeSBhbnkgdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzLiBUaGVyZSYjMzk7cyBubyBpbnRyb2R1Y3Rpb24gb3IgbW9kaWZpY2F0aW9uIG9mIGtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlLCBlaXRoZXIuIEFsc28sIHRoZXJlJiMzOTtzIG5vIGNvbmRpdGlvbmFsIGxvZ2ljIHRoYXQgZGVwZW5kcyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gV2UmIzM5O3JlIGFsc28gbm90IGludHJvZHVjaW5nIGFueSBuZXcgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIG1lbW9yeS4KCkVzc2VudGlhbGx5LCB0aGlzIGlzIGEgZmxhZyBjaGVjaywgbm90IGEgZGF0YSBzdHJ1Y3R1cmUgbWFuaXB1bGF0aW9uIGlzc3VlLiBJdCYjMzk7cyBhIGNvbmRpdGlvbmFsIGJyYW5jaCBvbiBhbiBleGlzdGluZyBgdm1hYCBmbGFnLCBiYXNlZCBvbiB0aGUgYHVzZXJmYXVsdGZkX21pbm9yYCBmdW5jdGlvbiB0aGF0IGNoZWNrcyB0aGUgVk1BJiMzOTtzIGZsYWdzLiBUaGUgZmxhZyBpdHNlbGYgaXMgaW5pdGlhbGl6ZWQgZWxzZXdoZXJlLiBUaGVyZWZvcmUsIHNpbmNlIHRoZXJlJiMzOTtzIG5vIGV2aWRlbmNlIG9mIGV4cG9zaW5nIG9yIGludHJvZHVjaW5nIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcywgS01TQU4gaXMgbm90IG5lY2Vzc2FyeSBoZXJlLiBUaGUgbW9yZSBzdGFuZGFyZCBtZW1vcnkgbWFuYWdlbWVudCBjaGVja3MgYW5kIHRlc3RzLCBsaWtlIEtBU0FOLCBMT0NLREVQLCBNTSB0ZXN0cywgYW5kIGZ1enppbmcgc2hvdWxkIGhhbmRsZSBhbnkgb3RoZXIgcG90ZW50aWFsIGlzc3VlcyBsaWtlIHBhZ2UgdGFibGUgbWFuYWdlbWVudCwgVUFGIGlzc3VlcywgcmFjZSBjb25kaXRpb25zLCBvciBsb2NraW5nIHByb2JsZW1zLgoKSSYjMzk7bSBjb25maWRlbnQgd2UgY2FuIHVzZSBgc2V0LXJlc3VsdHNgIHRvIGluZGljYXRlIEtNU0FOIGlzIG5vdCByZWxldmFudCBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwMjo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgY2hlY2sgKGB1c2VyZmF1bHRmZF9taW5vcih2bWEpYCkgaW4gYHRyeV9jb2xsYXBzZV9wdGVfbWFwcGVkX3RocCgpYCB0byBwcmV2ZW50IGNvbGxhcHNpbmcgUFRFLW1hcHBlZCBUSFBzIG9uIFZNQXMgcmVnaXN0ZXJlZCB3aXRoIHVzZXJmYXVsdGZkLW1pbm9yIG1vZGUsIGFsb25nIHdpdGggY29ycmVzcG9uZGluZyBzZWxmdGVzdCB1cGRhdGVzIGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLXVuaXQtdGVzdHMuY2AuIFxuXG5UaGlzIG1vZGlmaWNhdGlvbiBkb2VzIG5vdCBhbGxvY2F0ZSBuZXcgYnVmZmVycywgbWFuaXB1bGF0ZSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgZGF0YSwgYWx0ZXIgcGFkZGluZyBvciBzdHJ1Y3R1cmUgZmllbGRzIGNvcGllZCB0byB1c2Vyc3BhY2UsIG9yIGNoYW5nZSBhbnkgZGF0YSBsZW5ndGhzL2JvdW5kcyBjaGVja2luZyB0aGF0IGNvdWxkIGxlYWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgbGVha3MuIFN0YW5kYXJkIHNhbml0aXplcnMgYW5kIGJ1ZyBkZXRlY3RvcnMgKHN1Y2ggYXMgS0FTQU4gYW5kIHBhZ2UgdGFibGUgY2hlY2tzKSBhcmUgc3VmZmljaWVudCBmb3IgdmFsaWRhdGluZyB0aGlzIGZ1bmN0aW9uYWxpdHksIGFuZCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBkZXRlY3RhYmxlIG9ubHkgYnkgS01TQU4gYXJlIGludHJvZHVjZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgY2hlY2sgKGB1c2VyZmF1bHRmZF9taW5vcih2bWEpYCkgaW4gYHRyeV9jb2xsYXBzZV9wdGVfbWFwcGVkX3RocCgpYCB0byBwcmV2ZW50IGNvbGxhcHNpbmcgUFRFLW1hcHBlZCBUSFBzIG9uIFZNQXMgcmVnaXN0ZXJlZCB3aXRoIHVzZXJmYXVsdGZkLW1pbm9yIG1vZGUsIGFsb25nIHdpdGggY29ycmVzcG9uZGluZyBzZWxmdGVzdCB1cGRhdGVzIGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLXVuaXQtdGVzdHMuY2AuIFxuXG5UaGlzIG1vZGlmaWNhdGlvbiBkb2VzIG5vdCBhbGxvY2F0ZSBuZXcgYnVmZmVycywgbWFuaXB1bGF0ZSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgZGF0YSwgYWx0ZXIgcGFkZGluZyBvciBzdHJ1Y3R1cmUgZmllbGRzIGNvcGllZCB0byB1c2Vyc3BhY2UsIG9yIGNoYW5nZSBhbnkgZGF0YSBsZW5ndGhzL2JvdW5kcyBjaGVja2luZyB0aGF0IGNvdWxkIGxlYWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgbGVha3MuIFN0YW5kYXJkIHNhbml0aXplcnMgYW5kIGJ1ZyBkZXRlY3RvcnMgKHN1Y2ggYXMgS0FTQU4gYW5kIHBhZ2UgdGFibGUgY2hlY2tzKSBhcmUgc3VmZmljaWVudCBmb3IgdmFsaWRhdGluZyB0aGlzIGZ1bmN0aW9uYWxpdHksIGFuZCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBkZXRlY3RhYmxlIG9ubHkgYnkgS01TQU4gYXJlIGludHJvZHVjZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDAyOjQ4OjE0Ljk1NzA5OTQ1MVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg1MTMwMzU5MTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCIsXG4gICAgXCJVU0VSRkFVTFRGRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRyeV9jb2xsYXBzZV9wdGVfbWFwcGVkX3RocFwiLFxuICAgIFwiY29sbGFwc2VfcHRlX21hcHBlZF90aHBcIixcbiAgICBcIm1hZHZpc2VfY29sbGFwc2VcIixcbiAgICBcImNvbGxhcHNlX3NpbmdsZV9wbWRcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBjaGVjayAoYHVzZXJmYXVsdGZkX21pbm9yKHZtYSlgKSBpbiBgdHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwKClgIHRvIHByZXZlbnQgY29sbGFwc2luZyBQVEUtbWFwcGVkIFRIUHMgb24gVk1BcyByZWdpc3RlcmVkIHdpdGggdXNlcmZhdWx0ZmQtbWlub3IgbW9kZSwgYWxvbmcgd2l0aCBjb3JyZXNwb25kaW5nIHNlbGZ0ZXN0IHVwZGF0ZXMgaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtdW5pdC10ZXN0cy5jYC4gXFxuXFxuVGhpcyBtb2RpZmljYXRpb24gZG9lcyBub3QgYWxsb2NhdGUgbmV3IGJ1ZmZlcnMsIG1hbmlwdWxhdGUgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIGRhdGEsIGFsdGVyIHBhZGRpbmcgb3Igc3RydWN0dXJlIGZpZWxkcyBjb3BpZWQgdG8gdXNlcnNwYWNlLCBvciBjaGFuZ2UgYW55IGRhdGEgbGVuZ3Rocy9ib3VuZHMgY2hlY2tpbmcgdGhhdCBjb3VsZCBsZWFkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGxlYWtzLiBTdGFuZGFyZCBzYW5pdGl6ZXJzIGFuZCBidWcgZGV0ZWN0b3JzIChzdWNoIGFzIEtBU0FOIGFuZCBwYWdlIHRhYmxlIGNoZWNrcykgYXJlIHN1ZmZpY2llbnQgZm9yIHZhbGlkYXRpbmcgdGhpcyBmdW5jdGlvbmFsaXR5LCBhbmQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgZGV0ZWN0YWJsZSBvbmx5IGJ5IEtNU0FOIGFyZSBpbnRyb2R1Y2VkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGtodWdlcGFnZWQgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCAobW0va2h1Z2VwYWdlZC5jKSB0byBwcmV2ZW50IGNvbGxhcHNpbmcgUFRFLW1hcHBlZCB0cmFuc3BhcmVudCBodWdlcGFnZXMgZm9yIFZNQXMgcmVnaXN0ZXJlZCB3aXRoIHVzZXJmYXVsdGZkIG1pbm9yIGZhdWx0IGhhbmRsaW5nICh1c2VyZmF1bHRmZF9taW5vcikuIFRoaXMgaXMgcmVhY2hhYmxlIHZpYSB1c2VyZmF1bHRmZCBzeXNjYWxscyBhbmQgTUFEVl9DT0xMQVBTRSBtYWR2aXNlIGNhbGxzIG9yIGJhY2tncm91bmQga2h1Z2VwYWdlZCBjb2xsYXBzZSBhbmQgd2FycmFudHMgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDI6NDg6MTQuOTU3MTA0MjYxWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDY5NzYzNTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBlZTdiNjU4MTY1OTJkYjhiOTlmYWVmMmY0OTIzZTgyMWRkNWJjZWMxXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgU2VwIDEwIDAyOjQ4OjE0IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL21tL2todWdlcGFnZWQuYyBiL21tL2todWdlcGFnZWQuY1xcbmluZGV4IDc1NjM5Mjk4ZWZjMjcuLmU2OTQ3ZmUxNDJlZWEgMTAwNjQ0XFxuLS0tIGEvbW0va2h1Z2VwYWdlZC5jXFxuKysrIGIvbW0va2h1Z2VwYWdlZC5jXFxuQEAgLTE4OTQsNiArMTg5NCwxMyBAQCBzdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCB0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHAoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnblxcbiBcXHRpZiAodXNlcmZhdWx0ZmRfcHJvdGVjdGVkKHZtYSkpXFxuIFxcdFxcdHJldHVybiBTQ0FOX1BURV9VRkZEO1xcbiBcXG4rXFx0LypcXG4rXFx0ICogVXNlcmZhdWx0ZmQtbWlub3ItcmVnaXN0ZXJlZCBWTUFzIHNob3VsZCBub3QgYmUgY29sbGFwc2VkLCBhc1xcbitcXHQgKiB1c2Vyc3BhY2UgaXMgZXhwZWN0aW5nIHRvIGV4cGxpY2l0bHkgaW5zdGFsbCBQVEVzLlxcbitcXHQgKi9cXG4rXFx0aWYgKHVzZXJmYXVsdGZkX21pbm9yKHZtYSkpXFxuK1xcdFxcdHJldHVybiBTQ0FOX1BURV9VRkZEO1xcbitcXG4gXFx0Zm9saW8gPSBmaWxlbWFwX2xvY2tfZm9saW8odm1hLVxcdTAwM2V2bV9maWxlLVxcdTAwM2VmX21hcHBpbmcsXFxuIFxcdFxcdFxcdCAgICAgICBsaW5lYXJfcGFnZV9pbmRleCh2bWEsIGhhZGRyKSk7XFxuIFxcdGlmIChJU19FUlIoZm9saW8pKVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLXVuaXQtdGVzdHMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtdW5pdC10ZXN0cy5jXFxuaW5kZXggZWY5YjM5NTZiZGNmZC4uNmYyMzYwZjliNzVkYiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLXVuaXQtdGVzdHMuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtdW5pdC10ZXN0cy5jXFxuQEAgLTUxOCwxOSArNTE4LDM0IEBAIHN0YXRpYyB2b2lkIHVmZmRfd3BfZm9ya19waW5fd2l0aF9ldmVudF90ZXN0KHVmZmRfZ2xvYmFsX3Rlc3Rfb3B0c190ICpnb3B0cywgdWZmXFxuIFxcdHVmZmRfd3BfZm9ya19waW5fdGVzdF9jb21tb24oZ29wdHMsIGFyZ3MsIHRydWUpO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCBjaGVja19tZW1vcnlfY29udGVudHModWZmZF9nbG9iYWxfdGVzdF9vcHRzX3QgKmdvcHRzLCBjaGFyICpwKVxcbitzdGF0aWMgaW50IF9fY2hlY2tfbWVtb3J5X2NvbnRlbnRzKHVuc2lnbmVkIGxvbmcgb2Zmc2V0LFxcbitcXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbitcXHRcXHRcXHRcXHQgICB1ZmZkX2dsb2JhbF90ZXN0X29wdHNfdCAqZ29wdHMsXFxuK1xcdFxcdFxcdFxcdCAgIGNoYXIgKnApXFxuIHtcXG4gXFx0dW5zaWduZWQgbG9uZyBpLCBqO1xcbiBcXHR1aW50OF90IGV4cGVjdGVkX2J5dGU7XFxuIFxcbi1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgZ29wdHMtXFx1MDAzZW5yX3BhZ2VzOyArK2kpIHtcXG4rXFx0aWYgKG5yX3BhZ2VzICsgb2Zmc2V0IFxcdTAwM2MgbnJfcGFnZXMpXFxuK1xcdFxcdGVycihcXFwib3ZlcmZsb3cgaW4gbWVtb3J5IGNoZWNrXFxcIik7XFxuK1xcdGlmIChucl9wYWdlcyArIG9mZnNldCBcXHUwMDNlIGdvcHRzLVxcdTAwM2Vucl9wYWdlcylcXG4rXFx0XFx0ZXJyKFxcXCJvdXQgb2YgYm91bmRzIG1lbW9yeSBjaGVja1xcXCIpO1xcbitcXG4rXFx0Zm9yIChpID0gb2Zmc2V0OyBpIFxcdTAwM2Mgb2Zmc2V0ICsgbnJfcGFnZXM7ICsraSkge1xcbiBcXHRcXHRleHBlY3RlZF9ieXRlID0gfigodWludDhfdCkoaSAlICgodWludDhfdCktMSkpKTtcXG4gXFx0XFx0Zm9yIChqID0gMDsgaiBcXHUwMDNjIGdvcHRzLVxcdTAwM2VwYWdlX3NpemU7IGorKykge1xcbiBcXHRcXHRcXHR1aW50OF90IHYgPSAqKHVpbnQ4X3QgKikocCArIChpICogZ29wdHMtXFx1MDAzZXBhZ2Vfc2l6ZSkgKyBqKTtcXG4gXFx0XFx0XFx0aWYgKHYgIT0gZXhwZWN0ZWRfYnl0ZSlcXG4tXFx0XFx0XFx0XFx0ZXJyKFxcXCJ1bmV4cGVjdGVkIHBhZ2UgY29udGVudHNcXFwiKTtcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIDE7XFxuIFxcdFxcdH1cXG4gXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgY2hlY2tfbWVtb3J5X2NvbnRlbnRzKHVmZmRfZ2xvYmFsX3Rlc3Rfb3B0c190ICpnb3B0cywgY2hhciAqcClcXG4re1xcbitcXHRyZXR1cm4gX19jaGVja19tZW1vcnlfY29udGVudHMoMCwgZ29wdHMtXFx1MDAzZW5yX3BhZ2VzLCBnb3B0cywgcCk7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIHVmZmRfbWlub3JfdGVzdF9jb21tb24odWZmZF9nbG9iYWxfdGVzdF9vcHRzX3QgKmdvcHRzLCBib29sIHRlc3RfY29sbGFwc2UsIGJvb2wgdGVzdF93cClcXG5AQCAtNTM5LDYgKzU1NCw4IEBAIHN0YXRpYyB2b2lkIHVmZmRfbWlub3JfdGVzdF9jb21tb24odWZmZF9nbG9iYWxfdGVzdF9vcHRzX3QgKmdvcHRzLCBib29sIHRlc3RfY29sXFxuIFxcdHB0aHJlYWRfdCB1ZmZkX21vbjtcXG4gXFx0Y2hhciBjID0gJ1xcXFwwJztcXG4gXFx0c3RydWN0IHVmZmRfYXJncyBhcmdzID0geyAwIH07XFxuK1xcdHVuc2lnbmVkIGxvbmcgY2hlY2tlZCA9IDA7XFxuK1xcdGJvb2wgYmFkX2NvbnRlbnRzO1xcbiBcXHRhcmdzLmdvcHRzID0gZ29wdHM7XFxuIFxcbiBcXHQvKlxcbkBAIC01NjQsMjQgKzU4MSw2NSBAQCBzdGF0aWMgdm9pZCB1ZmZkX21pbm9yX3Rlc3RfY29tbW9uKHVmZmRfZ2xvYmFsX3Rlc3Rfb3B0c190ICpnb3B0cywgYm9vbCB0ZXN0X2NvbFxcbiBcXHRpZiAocHRocmVhZF9jcmVhdGUoXFx1MDAyNnVmZmRfbW9uLCBOVUxMLCB1ZmZkX3BvbGxfdGhyZWFkLCBcXHUwMDI2YXJncykpXFxuIFxcdFxcdGVycihcXFwidWZmZF9wb2xsX3RocmVhZCBjcmVhdGVcXFwiKTtcXG4gXFxuK1xcdGlmICh0ZXN0X2NvbGxhcHNlKSB7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIFJlYWQganVzdCBhIHNpbmdsZSBwYWdlIGFuZCB0cnkgY29sbGFwc2luZy4gVGhlIGNvbGxhcHNlXFxuK1xcdFxcdCAqIHNob3VsZCBlaXRoZXIgYmUgcmVqZWN0ZWQgb3IgYmUgYSBuby1vcC5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGlmIChfX2NoZWNrX21lbW9yeV9jb250ZW50cygwLCAxLCBnb3B0cywgZ29wdHMtXFx1MDAzZWFyZWFfZHN0X2FsaWFzKSlcXG4rXFx0XFx0XFx0ZXJyKFxcXCJ1bmV4cGVjdGVkIG1lbW9yeSBjb250ZW50cyBiZWZvcmUgY29sbGFwc2VcXFwiKTtcXG4rXFxuK1xcdFxcdC8qIE1BRFZfQ09MTEFQU0UgbWlnaHQgcmV0dXJuIEVJTlZBTCBmb3IgdWZmZC1taW5vciBWTUFzLiAqL1xcbitcXHRcXHRtYWR2aXNlKGdvcHRzLVxcdTAwM2VhcmVhX2RzdF9hbGlhcywgZ29wdHMtXFx1MDAzZW5yX3BhZ2VzICogZ29wdHMtXFx1MDAzZXBhZ2Vfc2l6ZSxcXG4rXFx0XFx0XFx0TUFEVl9DT0xMQVBTRSk7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIElmIHRoZSBhYm92ZSBjb2xsYXBzZSBtYXBwZWQgcGFnZXMgdGhhdCB3ZXJlIG5vdCBleHBsaWNpdGx5XFxuK1xcdFxcdCAqIENPTlRJTlVFJ2QsIHRoZSBiZWxvdyBfX2NoZWNrX21lbW9yeV9jb250ZW50cygpIHdpbGwgbm90XFxuK1xcdFxcdCAqIGZhdWx0IG9uIHNvbWUgcGFnZXMsIHJlc3VsdGluZyBpbiBpbmNvcnJlY3QgY29udGVudHMuIFRoZVxcbitcXHRcXHQgKiBQVEUgZm9yIHRoZSBmaXJzdCBwYWdlIG1heSBnZXQgcmV0cmFjdGVkLCBzbyBhdm9pZCBjaGVja2luZ1xcbitcXHRcXHQgKiB0aGF0IHBhZ2UsIGFzIHdlIG1pZ2h0IHRha2UgYSBzZWNvbmQgZmF1bHQsIGZsaXBwaW5nIHRoZVxcbitcXHRcXHQgKiBjb250ZW50cyBhIHNlY29uZCB0aW1lLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0Y2hlY2tlZCA9IDE7XFxuK1xcdH1cXG4rXFxuIFxcdC8qXFxuIFxcdCAqIFJlYWQgZWFjaCBvZiB0aGUgcGFnZXMgYmFjayB1c2luZyB0aGUgVUZGRC1yZWdpc3RlcmVkIG1hcHBpbmcuIFdlXFxuIFxcdCAqIGV4cGVjdCB0aGF0IHRoZSBmaXJzdCB0aW1lIHdlIHRvdWNoIGEgcGFnZSwgaXQgd2lsbCByZXN1bHQgaW4gYSBtaW5vclxcbiBcXHQgKiBmYXVsdC4gdWZmZF9wb2xsX3RocmVhZCB3aWxsIHJlc29sdmUgdGhlIGZhdWx0IGJ5IGJpdC1mbGlwcGluZyB0aGVcXG4gXFx0ICogcGFnZSdzIGNvbnRlbnRzLCBhbmQgdGhlbiBpc3N1aW5nIGEgQ09OVElOVUUgaW9jdGwuXFxuIFxcdCAqL1xcbi1cXHRjaGVja19tZW1vcnlfY29udGVudHMoZ29wdHMsIGdvcHRzLVxcdTAwM2VhcmVhX2RzdF9hbGlhcyk7XFxuK1xcdGJhZF9jb250ZW50cyA9ICEhX19jaGVja19tZW1vcnlfY29udGVudHMoY2hlY2tlZCwgZ29wdHMtXFx1MDAzZW5yX3BhZ2VzIC0gY2hlY2tlZCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgIGdvcHRzLCBnb3B0cy1cXHUwMDNlYXJlYV9kc3RfYWxpYXMpO1xcbiBcXG4gXFx0aWYgKHdyaXRlKGdvcHRzLVxcdTAwM2VwaXBlZmRbMV0sIFxcdTAwMjZjLCBzaXplb2YoYykpICE9IHNpemVvZihjKSlcXG4gXFx0XFx0ZXJyKFxcXCJwaXBlIHdyaXRlXFxcIik7XFxuIFxcdGlmIChwdGhyZWFkX2pvaW4odWZmZF9tb24sIE5VTEwpKVxcbiBcXHRcXHRlcnIoXFxcImpvaW4oKSBmYWlsZWRcXFwiKTtcXG4gXFxuK1xcdGlmIChiYWRfY29udGVudHMgXFx1MDAyNlxcdTAwMjYgdGVzdF9jb2xsYXBzZSkge1xcbitcXHRcXHR1ZmZkX3Rlc3RfZmFpbChcXFwidW5leHBlY3RlZCBtZW1vcnkgY29udGVudHMgYWZ0ZXIgY29sbGFwc2VcXFwiKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoYmFkX2NvbnRlbnRzKSB7XFxuK1xcdFxcdHVmZmRfdGVzdF9mYWlsKFxcXCJ1bmV4cGVjdGVkIG1lbW9yeSBjb250ZW50c1xcXCIpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuIFxcdGlmICh0ZXN0X2NvbGxhcHNlKSB7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIE1BRFZfQ09MTEFQU0Ugd2lsbCBmYWlsIHVubGVzcyB1c2VyZmF1bHRmZC1taW5vciBpc1xcbitcXHRcXHQgKiB1bnJlZ2lzdGVyZWQuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAodWZmZF91bnJlZ2lzdGVyKGdvcHRzLVxcdTAwM2V1ZmZkLCBnb3B0cy1cXHUwMDNlYXJlYV9kc3RfYWxpYXMsXFxuK1xcdFxcdFxcdFxcdCAgICBnb3B0cy1cXHUwMDNlbnJfcGFnZXMgKiBnb3B0cy1cXHUwMDNlcGFnZV9zaXplKSlcXG4rXFx0XFx0XFx0ZXJyKFxcXCJ1ZmZkX3VucmVnaXN0ZXIgYmVmb3JlIE1BRFZfQ09MTEFQU0UgZmFpbGVkXFxcIik7XFxuK1xcbitcXHRcXHQvKiBNQURWX0NPTExBUFNFIHNob3VsZCBzdWNjZWVkIHdpdGggdXNlcmZhdWx0ZmQgdW5yZWdpc3RlcmVkLiAqL1xcbiBcXHRcXHRpZiAobWFkdmlzZShnb3B0cy1cXHUwMDNlYXJlYV9kc3RfYWxpYXMsIGdvcHRzLVxcdTAwM2Vucl9wYWdlcyAqIGdvcHRzLVxcdTAwM2VwYWdlX3NpemUsXFxuIFxcdFxcdFxcdCAgICBNQURWX0NPTExBUFNFKSkge1xcbi1cXHRcXHRcXHQvKiBJdCdzIGZpbmUgdG8gZmFpbCBmb3IgdGhpcyBvbmUuLi4gKi9cXG4tXFx0XFx0XFx0dWZmZF90ZXN0X3NraXAoXFxcIk1BRFZfQ09MTEFQU0UgZmFpbGVkXFxcIik7XFxuK1xcdFxcdFxcdHVmZmRfdGVzdF9mYWlsKFxcXCJNQURWX0NPTExBUFNFIGZhaWxlZFxcXCIpO1xcbiBcXHRcXHRcXHRyZXR1cm47XFxuIFxcdFxcdH1cXG4gXFxuQEAgLTU5Myw3ICs2NTEsMTAgQEAgc3RhdGljIHZvaWQgdWZmZF9taW5vcl90ZXN0X2NvbW1vbih1ZmZkX2dsb2JhbF90ZXN0X29wdHNfdCAqZ29wdHMsIGJvb2wgdGVzdF9jb2xcXG4gXFx0XFx0ICogVGhpcyB3b24ndCBjYXVzZSB1ZmZkLWZhdWx0IC0gaXQgcHVyZWx5IGp1c3QgbWFrZXMgc3VyZSB0aGVyZVxcbiBcXHRcXHQgKiB3YXMgbm8gY29ycnVwdGlvbi5cXG4gXFx0XFx0ICovXFxuLVxcdFxcdGNoZWNrX21lbW9yeV9jb250ZW50cyhnb3B0cywgZ29wdHMtXFx1MDAzZWFyZWFfZHN0X2FsaWFzKTtcXG4rXFx0XFx0aWYgKGNoZWNrX21lbW9yeV9jb250ZW50cyhnb3B0cywgZ29wdHMtXFx1MDAzZWFyZWFfZHN0X2FsaWFzKSkge1xcbitcXHRcXHRcXHR1ZmZkX3Rlc3RfZmFpbChcXFwidW5leHBlY3RlZCBtZW1vcnkgY29udGVudHNcXFwiKTtcXG4rXFx0XFx0XFx0cmV0dXJuO1xcbitcXHRcXHR9XFxuIFxcdH1cXG4gXFxuIFxcdGlmIChhcmdzLm1pc3NpbmdfZmF1bHRzICE9IDAgfHwgYXJncy5taW5vcl9mYXVsdHMgIT0gZ29wdHMtXFx1MDAzZW5yX3BhZ2VzKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwMjo0ODoxNS40NjQ3NDAyNzNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjcwNzkxMzI4MjgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCIsXG4gICAgXCJVU0VSRkFVTFRGRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRyeV9jb2xsYXBzZV9wdGVfbWFwcGVkX3RocFwiLFxuICAgIFwiY29sbGFwc2VfcHRlX21hcHBlZF90aHBcIixcbiAgICBcIm1hZHZpc2VfY29sbGFwc2VcIixcbiAgICBcImNvbGxhcHNlX3NpbmdsZV9wbWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBraHVnZXBhZ2VkIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgKG1tL2todWdlcGFnZWQuYykgdG8gcHJldmVudCBjb2xsYXBzaW5nIFBURS1tYXBwZWQgdHJhbnNwYXJlbnQgaHVnZXBhZ2VzIGZvciBWTUFzIHJlZ2lzdGVyZWQgd2l0aCB1c2VyZmF1bHRmZCBtaW5vciBmYXVsdCBoYW5kbGluZyAodXNlcmZhdWx0ZmRfbWlub3IpLiBUaGlzIGlzIHJlYWNoYWJsZSB2aWEgdXNlcmZhdWx0ZmQgc3lzY2FsbHMgYW5kIE1BRFZfQ09MTEFQU0UgbWFkdmlzZSBjYWxscyBvciBiYWNrZ3JvdW5kIGtodWdlcGFnZWQgY29sbGFwc2UgYW5kIHdhcnJhbnRzIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZWU3YjY1ODE2NTkyZGI4Yjk5ZmFlZjJmNDkyM2U4MjFkZDViY2VjMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDEwIDAyOjQ4OjE0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0va2h1Z2VwYWdlZC5jIGIvbW0va2h1Z2VwYWdlZC5jXG5pbmRleCA3NTYzOTI5OGVmYzI3Li5lNjk0N2ZlMTQyZWVhIDEwMDY0NFxuLS0tIGEvbW0va2h1Z2VwYWdlZC5jXG4rKysgYi9tbS9raHVnZXBhZ2VkLmNcbkBAIC0xODk0LDYgKzE4OTQsMTMgQEAgc3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgdHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25cbiBcdGlmICh1c2VyZmF1bHRmZF9wcm90ZWN0ZWQodm1hKSlcbiBcdFx0cmV0dXJuIFNDQU5fUFRFX1VGRkQ7XG4gXG4rXHQvKlxuK1x0ICogVXNlcmZhdWx0ZmQtbWlub3ItcmVnaXN0ZXJlZCBWTUFzIHNob3VsZCBub3QgYmUgY29sbGFwc2VkLCBhc1xuK1x0ICogdXNlcnNwYWNlIGlzIGV4cGVjdGluZyB0byBleHBsaWNpdGx5IGluc3RhbGwgUFRFcy5cbitcdCAqL1xuK1x0aWYgKHVzZXJmYXVsdGZkX21pbm9yKHZtYSkpXG4rXHRcdHJldHVybiBTQ0FOX1BURV9VRkZEO1xuK1xuIFx0Zm9saW8gPSBmaWxlbWFwX2xvY2tfZm9saW8odm1hLVx1MDAzZXZtX2ZpbGUtXHUwMDNlZl9tYXBwaW5nLFxuIFx0XHRcdCAgICAgICBsaW5lYXJfcGFnZV9pbmRleCh2bWEsIGhhZGRyKSk7XG4gXHRpZiAoSVNfRVJSKGZvbGlvKSlcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLXVuaXQtdGVzdHMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtdW5pdC10ZXN0cy5jXG5pbmRleCBlZjliMzk1NmJkY2ZkLi42ZjIzNjBmOWI3NWRiIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC11bml0LXRlc3RzLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtdW5pdC10ZXN0cy5jXG5AQCAtNTE4LDE5ICs1MTgsMzQgQEAgc3RhdGljIHZvaWQgdWZmZF93cF9mb3JrX3Bpbl93aXRoX2V2ZW50X3Rlc3QodWZmZF9nbG9iYWxfdGVzdF9vcHRzX3QgKmdvcHRzLCB1ZmZcbiBcdHVmZmRfd3BfZm9ya19waW5fdGVzdF9jb21tb24oZ29wdHMsIGFyZ3MsIHRydWUpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBjaGVja19tZW1vcnlfY29udGVudHModWZmZF9nbG9iYWxfdGVzdF9vcHRzX3QgKmdvcHRzLCBjaGFyICpwKVxuK3N0YXRpYyBpbnQgX19jaGVja19tZW1vcnlfY29udGVudHModW5zaWduZWQgbG9uZyBvZmZzZXQsXG4rXHRcdFx0XHQgICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxuK1x0XHRcdFx0ICAgdWZmZF9nbG9iYWxfdGVzdF9vcHRzX3QgKmdvcHRzLFxuK1x0XHRcdFx0ICAgY2hhciAqcClcbiB7XG4gXHR1bnNpZ25lZCBsb25nIGksIGo7XG4gXHR1aW50OF90IGV4cGVjdGVkX2J5dGU7XG4gXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBnb3B0cy1cdTAwM2Vucl9wYWdlczsgKytpKSB7XG4rXHRpZiAobnJfcGFnZXMgKyBvZmZzZXQgXHUwMDNjIG5yX3BhZ2VzKVxuK1x0XHRlcnIoXCJvdmVyZmxvdyBpbiBtZW1vcnkgY2hlY2tcIik7XG4rXHRpZiAobnJfcGFnZXMgKyBvZmZzZXQgXHUwMDNlIGdvcHRzLVx1MDAzZW5yX3BhZ2VzKVxuK1x0XHRlcnIoXCJvdXQgb2YgYm91bmRzIG1lbW9yeSBjaGVja1wiKTtcbitcbitcdGZvciAoaSA9IG9mZnNldDsgaSBcdTAwM2Mgb2Zmc2V0ICsgbnJfcGFnZXM7ICsraSkge1xuIFx0XHRleHBlY3RlZF9ieXRlID0gfigodWludDhfdCkoaSAlICgodWludDhfdCktMSkpKTtcbiBcdFx0Zm9yIChqID0gMDsgaiBcdTAwM2MgZ29wdHMtXHUwMDNlcGFnZV9zaXplOyBqKyspIHtcbiBcdFx0XHR1aW50OF90IHYgPSAqKHVpbnQ4X3QgKikocCArIChpICogZ29wdHMtXHUwMDNlcGFnZV9zaXplKSArIGopO1xuIFx0XHRcdGlmICh2ICE9IGV4cGVjdGVkX2J5dGUpXG4tXHRcdFx0XHRlcnIoXCJ1bmV4cGVjdGVkIHBhZ2UgY29udGVudHNcIik7XG4rXHRcdFx0XHRyZXR1cm4gMTtcbiBcdFx0fVxuIFx0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgY2hlY2tfbWVtb3J5X2NvbnRlbnRzKHVmZmRfZ2xvYmFsX3Rlc3Rfb3B0c190ICpnb3B0cywgY2hhciAqcClcbit7XG4rXHRyZXR1cm4gX19jaGVja19tZW1vcnlfY29udGVudHMoMCwgZ29wdHMtXHUwMDNlbnJfcGFnZXMsIGdvcHRzLCBwKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgdWZmZF9taW5vcl90ZXN0X2NvbW1vbih1ZmZkX2dsb2JhbF90ZXN0X29wdHNfdCAqZ29wdHMsIGJvb2wgdGVzdF9jb2xsYXBzZSwgYm9vbCB0ZXN0X3dwKVxuQEAgLTUzOSw2ICs1NTQsOCBAQCBzdGF0aWMgdm9pZCB1ZmZkX21pbm9yX3Rlc3RfY29tbW9uKHVmZmRfZ2xvYmFsX3Rlc3Rfb3B0c190ICpnb3B0cywgYm9vbCB0ZXN0X2NvbFxuIFx0cHRocmVhZF90IHVmZmRfbW9uO1xuIFx0Y2hhciBjID0gJ1xcMCc7XG4gXHRzdHJ1Y3QgdWZmZF9hcmdzIGFyZ3MgPSB7IDAgfTtcbitcdHVuc2lnbmVkIGxvbmcgY2hlY2tlZCA9IDA7XG4rXHRib29sIGJhZF9jb250ZW50cztcbiBcdGFyZ3MuZ29wdHMgPSBnb3B0cztcbiBcbiBcdC8qXG5AQCAtNTY0LDI0ICs1ODEsNjUgQEAgc3RhdGljIHZvaWQgdWZmZF9taW5vcl90ZXN0X2NvbW1vbih1ZmZkX2dsb2JhbF90ZXN0X29wdHNfdCAqZ29wdHMsIGJvb2wgdGVzdF9jb2xcbiBcdGlmIChwdGhyZWFkX2NyZWF0ZShcdTAwMjZ1ZmZkX21vbiwgTlVMTCwgdWZmZF9wb2xsX3RocmVhZCwgXHUwMDI2YXJncykpXG4gXHRcdGVycihcInVmZmRfcG9sbF90aHJlYWQgY3JlYXRlXCIpO1xuIFxuK1x0aWYgKHRlc3RfY29sbGFwc2UpIHtcbitcdFx0LypcbitcdFx0ICogUmVhZCBqdXN0IGEgc2luZ2xlIHBhZ2UgYW5kIHRyeSBjb2xsYXBzaW5nLiBUaGUgY29sbGFwc2VcbitcdFx0ICogc2hvdWxkIGVpdGhlciBiZSByZWplY3RlZCBvciBiZSBhIG5vLW9wLlxuK1x0XHQgKi9cbitcdFx0aWYgKF9fY2hlY2tfbWVtb3J5X2NvbnRlbnRzKDAsIDEsIGdvcHRzLCBnb3B0cy1cdTAwM2VhcmVhX2RzdF9hbGlhcykpXG4rXHRcdFx0ZXJyKFwidW5leHBlY3RlZCBtZW1vcnkgY29udGVudHMgYmVmb3JlIGNvbGxhcHNlXCIpO1xuK1xuK1x0XHQvKiBNQURWX0NPTExBUFNFIG1pZ2h0IHJldHVybiBFSU5WQUwgZm9yIHVmZmQtbWlub3IgVk1Bcy4gKi9cbitcdFx0bWFkdmlzZShnb3B0cy1cdTAwM2VhcmVhX2RzdF9hbGlhcywgZ29wdHMtXHUwMDNlbnJfcGFnZXMgKiBnb3B0cy1cdTAwM2VwYWdlX3NpemUsXG4rXHRcdFx0TUFEVl9DT0xMQVBTRSk7XG4rXHRcdC8qXG4rXHRcdCAqIElmIHRoZSBhYm92ZSBjb2xsYXBzZSBtYXBwZWQgcGFnZXMgdGhhdCB3ZXJlIG5vdCBleHBsaWNpdGx5XG4rXHRcdCAqIENPTlRJTlVFJ2QsIHRoZSBiZWxvdyBfX2NoZWNrX21lbW9yeV9jb250ZW50cygpIHdpbGwgbm90XG4rXHRcdCAqIGZhdWx0IG9uIHNvbWUgcGFnZXMsIHJlc3VsdGluZyBpbiBpbmNvcnJlY3QgY29udGVudHMuIFRoZVxuK1x0XHQgKiBQVEUgZm9yIHRoZSBmaXJzdCBwYWdlIG1heSBnZXQgcmV0cmFjdGVkLCBzbyBhdm9pZCBjaGVja2luZ1xuK1x0XHQgKiB0aGF0IHBhZ2UsIGFzIHdlIG1pZ2h0IHRha2UgYSBzZWNvbmQgZmF1bHQsIGZsaXBwaW5nIHRoZVxuK1x0XHQgKiBjb250ZW50cyBhIHNlY29uZCB0aW1lLlxuK1x0XHQgKi9cbitcdFx0Y2hlY2tlZCA9IDE7XG4rXHR9XG4rXG4gXHQvKlxuIFx0ICogUmVhZCBlYWNoIG9mIHRoZSBwYWdlcyBiYWNrIHVzaW5nIHRoZSBVRkZELXJlZ2lzdGVyZWQgbWFwcGluZy4gV2VcbiBcdCAqIGV4cGVjdCB0aGF0IHRoZSBmaXJzdCB0aW1lIHdlIHRvdWNoIGEgcGFnZSwgaXQgd2lsbCByZXN1bHQgaW4gYSBtaW5vclxuIFx0ICogZmF1bHQuIHVmZmRfcG9sbF90aHJlYWQgd2lsbCByZXNvbHZlIHRoZSBmYXVsdCBieSBiaXQtZmxpcHBpbmcgdGhlXG4gXHQgKiBwYWdlJ3MgY29udGVudHMsIGFuZCB0aGVuIGlzc3VpbmcgYSBDT05USU5VRSBpb2N0bC5cbiBcdCAqL1xuLVx0Y2hlY2tfbWVtb3J5X2NvbnRlbnRzKGdvcHRzLCBnb3B0cy1cdTAwM2VhcmVhX2RzdF9hbGlhcyk7XG4rXHRiYWRfY29udGVudHMgPSAhIV9fY2hlY2tfbWVtb3J5X2NvbnRlbnRzKGNoZWNrZWQsIGdvcHRzLVx1MDAzZW5yX3BhZ2VzIC0gY2hlY2tlZCxcbitcdFx0XHRcdFx0XHQgICAgZ29wdHMsIGdvcHRzLVx1MDAzZWFyZWFfZHN0X2FsaWFzKTtcbiBcbiBcdGlmICh3cml0ZShnb3B0cy1cdTAwM2VwaXBlZmRbMV0sIFx1MDAyNmMsIHNpemVvZihjKSkgIT0gc2l6ZW9mKGMpKVxuIFx0XHRlcnIoXCJwaXBlIHdyaXRlXCIpO1xuIFx0aWYgKHB0aHJlYWRfam9pbih1ZmZkX21vbiwgTlVMTCkpXG4gXHRcdGVycihcImpvaW4oKSBmYWlsZWRcIik7XG4gXG4rXHRpZiAoYmFkX2NvbnRlbnRzIFx1MDAyNlx1MDAyNiB0ZXN0X2NvbGxhcHNlKSB7XG4rXHRcdHVmZmRfdGVzdF9mYWlsKFwidW5leHBlY3RlZCBtZW1vcnkgY29udGVudHMgYWZ0ZXIgY29sbGFwc2VcIik7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdGlmIChiYWRfY29udGVudHMpIHtcbitcdFx0dWZmZF90ZXN0X2ZhaWwoXCJ1bmV4cGVjdGVkIG1lbW9yeSBjb250ZW50c1wiKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuIFx0aWYgKHRlc3RfY29sbGFwc2UpIHtcbitcdFx0LypcbitcdFx0ICogTUFEVl9DT0xMQVBTRSB3aWxsIGZhaWwgdW5sZXNzIHVzZXJmYXVsdGZkLW1pbm9yIGlzXG4rXHRcdCAqIHVucmVnaXN0ZXJlZC5cbitcdFx0ICovXG4rXHRcdGlmICh1ZmZkX3VucmVnaXN0ZXIoZ29wdHMtXHUwMDNldWZmZCwgZ29wdHMtXHUwMDNlYXJlYV9kc3RfYWxpYXMsXG4rXHRcdFx0XHQgICAgZ29wdHMtXHUwMDNlbnJfcGFnZXMgKiBnb3B0cy1cdTAwM2VwYWdlX3NpemUpKVxuK1x0XHRcdGVycihcInVmZmRfdW5yZWdpc3RlciBiZWZvcmUgTUFEVl9DT0xMQVBTRSBmYWlsZWRcIik7XG4rXG4rXHRcdC8qIE1BRFZfQ09MTEFQU0Ugc2hvdWxkIHN1Y2NlZWQgd2l0aCB1c2VyZmF1bHRmZCB1bnJlZ2lzdGVyZWQuICovXG4gXHRcdGlmIChtYWR2aXNlKGdvcHRzLVx1MDAzZWFyZWFfZHN0X2FsaWFzLCBnb3B0cy1cdTAwM2Vucl9wYWdlcyAqIGdvcHRzLVx1MDAzZXBhZ2Vfc2l6ZSxcbiBcdFx0XHQgICAgTUFEVl9DT0xMQVBTRSkpIHtcbi1cdFx0XHQvKiBJdCdzIGZpbmUgdG8gZmFpbCBmb3IgdGhpcyBvbmUuLi4gKi9cbi1cdFx0XHR1ZmZkX3Rlc3Rfc2tpcChcIk1BRFZfQ09MTEFQU0UgZmFpbGVkXCIpO1xuK1x0XHRcdHVmZmRfdGVzdF9mYWlsKFwiTUFEVl9DT0xMQVBTRSBmYWlsZWRcIik7XG4gXHRcdFx0cmV0dXJuO1xuIFx0XHR9XG4gXG5AQCAtNTkzLDcgKzY1MSwxMCBAQCBzdGF0aWMgdm9pZCB1ZmZkX21pbm9yX3Rlc3RfY29tbW9uKHVmZmRfZ2xvYmFsX3Rlc3Rfb3B0c190ICpnb3B0cywgYm9vbCB0ZXN0X2NvbFxuIFx0XHQgKiBUaGlzIHdvbid0IGNhdXNlIHVmZmQtZmF1bHQgLSBpdCBwdXJlbHkganVzdCBtYWtlcyBzdXJlIHRoZXJlXG4gXHRcdCAqIHdhcyBubyBjb3JydXB0aW9uLlxuIFx0XHQgKi9cbi1cdFx0Y2hlY2tfbWVtb3J5X2NvbnRlbnRzKGdvcHRzLCBnb3B0cy1cdTAwM2VhcmVhX2RzdF9hbGlhcyk7XG4rXHRcdGlmIChjaGVja19tZW1vcnlfY29udGVudHMoZ29wdHMsIGdvcHRzLVx1MDAzZWFyZWFfZHN0X2FsaWFzKSkge1xuK1x0XHRcdHVmZmRfdGVzdF9mYWlsKFwidW5leHBlY3RlZCBtZW1vcnkgY29udGVudHNcIik7XG4rXHRcdFx0cmV0dXJuO1xuK1x0XHR9XG4gXHR9XG4gXG4gXHRpZiAoYXJncy5taXNzaW5nX2ZhdWx0cyAhPSAwIHx8IGFyZ3MubWlub3JfZmF1bHRzICE9IGdvcHRzLVx1MDAzZW5yX3BhZ2VzKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDI6NDg6MTUuNDY0NzQxNjczWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjM3MzUyODY3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBLaHVnZXBhZ2VkIGFuZCBVc2VyZmF1bHRmZCBJbnRlcmFjdGlvbioqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggaW4gZnJvbnQgb2YgbWUsIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZGl2ZSByaWdodCBpbnRvIHRoZSBjb2RlIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucy4gVGhlIHBhdGNoIHRvdWNoZXMgYG1tL2todWdlcGFnZWQuY2AgYW5kIHRoZSBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC11bml0LXRlc3RzLmNgIGZpbGUuIFJpZ2h0IGF3YXksIG15IHJhZGFyIGdvZXMgdXAg4oCTIGFueXRoaW5nIHRoYXQgaW50ZXJhY3RzIHdpdGggYGtodWdlcGFnZWRgIGFuZCBwb3RlbnRpYWxseSB1c2VyZmF1bHRmZCAoVUZGRCkgaXMgZ29pbmcgdG8gbmVlZCBjYXJlZnVsIGNvbnNpZGVyYXRpb24sIGVzcGVjaWFsbHkgd2l0aCB0aGUgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zIG9mIGtodWdlcGFnZSBhbmQgdGhlIGV4cGxpY2l0IG1lbW9yeSBtYW5hZ2VtZW50IGZyb20gVUZGRC5cblxuRm9jdXNpbmcgb24gYG1tL2todWdlcGFnZWQuY2AsIHRoZSBrZXkgY2hhbmdlIGFwcGVhcnMgd2l0aGluIHRoZSBgdHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwYCBmdW5jdGlvbi4gSXQncyBhZGRpbmcgYW4gZXh0cmEgY2hlY2sgaGVyZS4gTGV0IG1lIHNlZS4uLiBpdCdzIGFib3V0IHByb3RlY3RpbmcgYWdhaW5zdCBjb2xsYXBzaW5nIFRIUHMgd2hlbiBVRkZEIGlzIGludm9sdmVkLiBTcGVjaWZpY2FsbHksIGl0J3MgZ3VhcmRpbmcgYWdhaW5zdCBjb2xsYXBzaW5nIFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMgKFRIUHMpIG9uIGB1c2VyZmF1bHRmZF9taW5vcmAtcmVnaXN0ZXJlZCBWTUFzLiBJIGltbWVkaWF0ZWx5IHVuZGVyc3RhbmQgdGhlIHJlYXNvbmluZyBoZXJlLiBJZiBhIFZNQSBpcyByZWdpc3RlcmVkIGFzIGEgXCJtaW5vclwiIFVGRkQgcmVnaW9uLCB0aGUgdXNlci1zcGFjZSBhcHBsaWNhdGlvbiBpcyBleHBsaWNpdGx5IG1hbmFnaW5nIHRoZSBQVEVzIGZvciB0aGF0IHJlZ2lvbi4gQ29sbGFwc2luZyBUSFBzIGluIHRoaXMgY2FzZSB3b3VsZCBpbnRlcmZlcmUgd2l0aCB0aGUgYXBwbGljYXRpb24ncyBleHBlY3RlZCBiZWhhdmlvciBhbmQgcG90ZW50aWFsbHkgbGVhZCB0byBjb3JydXB0aW9uIG9yIHVuZXhwZWN0ZWQgcGFnZSBmYXVsdHMuIFRoaXMgbWFrZXMgY29tcGxldGUgc2Vuc2UgLSBUSFAgY29sbGFwc2UgbWlnaHQgdHJ5IHRvIGluc3RhbGwgYSBQVEUgYmVoaW5kIHRoZSBhcHBsaWNhdGlvbidzIGJhY2suIFRoaXMgYWRkaXRpb24gaXMgY2xlYXJseSBkZXNpZ25lZCB0byBtYWludGFpbiB0aGUgaW50ZW5kZWQgc2VtYW50aWNzIG9mIFVGRkQgYW5kIHByZXZlbnQgY29uZmxpY3RzIHdpdGggYGtodWdlcGFnZWRgLiBJdCdzIGEgc29saWQsIGNhdXRpb3VzIGFwcHJvYWNoIHRvIGtlZXAgdGhlIGRpZmZlcmVudCBhcmVhcyBvZiBtZW1vcnkgbWFuYWdlbWVudCBzYWZlIGFuZCBvcGVyYXRpb25hbC5cblxuSSdtIG5vdyBnb2luZyB0byB1c2UgYGdyZXBwZXJgIG9yIGByZWFkLWZpbGVgIHRvIGV4cGxvcmUgdGhlIGB0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHBgIGZ1bmN0aW9uIGluIG1vcmUgZGV0YWlsLiBJIG5lZWQgdG8gZnVsbHkgZ3JvayB0aGUgaW50ZXJhY3Rpb24gcG9pbnRzIGluIHRoZSBjb2RlYmFzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDcxMywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5MSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDAyOjQ4OjIxLjgzODI3MjU1NloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNDYxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9raHVnZXBhZ2VkLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTg4MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTg4MDpcXHRcXHQvKlxcbjE4ODE6XFx0XFx0ICogSWYgd2UgYXJlIGhlcmUsIHdlJ3ZlIHN1Y2NlZWRlZCBpbiByZXBsYWNpbmcgYWxsIHRoZSBuYXRpdmUgcGFnZXNcXG4xODgyOlxcdFxcdCAqIGluIHRoZSBwYWdlIGNhY2hlIHdpdGggYSBzaW5nbGUgaHVnZXBhZ2UuIElmIGEgbW0gd2VyZSB0byBmYXVsdC1pblxcbjE4ODM6XFx0XFx0ICogdGhpcyBtZW1vcnkgKG1hcHBlZCBieSBhIHN1aXRhYmx5IGFsaWduZWQgVk1BKSwgd2UnZCBnZXQgdGhlIGh1Z2VwYWdlXFxuMTg4NDpcXHRcXHQgKiBhbmQgbWFwIGl0IGJ5IGEgUE1ELCByZWdhcmRsZXNzIG9mIHN5c2ZzIFRIUCBzZXR0aW5ncy4gQXMgc3VjaCwgbGV0J3NcXG4xODg1OlxcdFxcdCAqIGFuYWxvZ291c2x5IGVsaWRlIHN5c2ZzIFRIUCBzZXR0aW5ncyBoZXJlIGFuZCBmb3JjZSBjb2xsYXBzZS5cXG4xODg2OlxcdFxcdCAqL1xcbjE4ODc6XFx0XFx0aWYgKCF0aHBfdm1hX2FsbG93YWJsZV9vcmRlcih2bWEsIHZtYS1cXHUwMDNldm1fZmxhZ3MsIFRWQV9GT1JDRURfQ09MTEFQU0UsIFBNRF9PUkRFUikpXFxuMTg4ODpcXHRcXHRcXHRyZXR1cm4gU0NBTl9WTUFfQ0hFQ0s7XFxuMTg4OTpcXHRcXG4xODkwOlxcdFxcdC8qXFxuMTg5MTpcXHRcXHQgKiBLZWVwIHBtZCBwZ3RhYmxlIHdoaWxlIHRoZSB1ZmZkIGJpdCBpcyBpbiB1c2U7IHNlZSBjb21tZW50IGluXFxuMTg5MjpcXHRcXHQgKiByZXRyYWN0X3BhZ2VfdGFibGVzKCkuXFxuMTg5MzpcXHRcXHQgKi9cXG4xODk0OlxcdFxcdGlmICh1c2VyZmF1bHRmZF9wcm90ZWN0ZWQodm1hKSlcXG4xODk1OlxcdFxcdFxcdHJldHVybiBTQ0FOX1BURV9VRkZEO1xcbjE4OTY6XFx0XFxuMTg5NzpcXHRcXHQvKlxcbjE4OTg6XFx0XFx0ICogVXNlcmZhdWx0ZmQtbWlub3ItcmVnaXN0ZXJlZCBWTUFzIHNob3VsZCBub3QgYmUgY29sbGFwc2VkLCBhc1xcbjE4OTk6XFx0XFx0ICogdXNlcnNwYWNlIGlzIGV4cGVjdGluZyB0byBleHBsaWNpdGx5IGluc3RhbGwgUFRFcy5cXG4xOTAwOlxcdFxcdCAqL1xcbjE5MDE6XFx0XFx0aWYgKHVzZXJmYXVsdGZkX21pbm9yKHZtYSkpXFxuMTkwMjpcXHRcXHRcXHRyZXR1cm4gU0NBTl9QVEVfVUZGRDtcXG4xOTAzOlxcdFxcbjE5MDQ6XFx0XFx0Zm9saW8gPSBmaWxlbWFwX2xvY2tfZm9saW8odm1hLVxcdTAwM2V2bV9maWxlLVxcdTAwM2VmX21hcHBpbmcsXFxuMTkwNTpcXHRcXHRcXHRcXHQgICAgICAgbGluZWFyX3BhZ2VfaW5kZXgodm1hLCBoYWRkcikpO1xcbjE5MDY6XFx0XFx0aWYgKElTX0VSUihmb2xpbykpXFxuMTkwNzpcXHRcXHRcXHRyZXR1cm4gU0NBTl9QQUdFX05VTEw7XFxuMTkwODpcXHRcXG4xOTA5OlxcdFxcdGlmICghaXNfcG1kX29yZGVyKGZvbGlvX29yZGVyKGZvbGlvKSkpIHtcXG4xOTEwOlxcdFxcdFxcdHJlc3VsdCA9IFNDQU5fUEFHRV9DT01QT1VORDtcXG4xOTExOlxcdFxcdFxcdGdvdG8gZHJvcF9mb2xpbztcXG4xOTEyOlxcdFxcdH1cXG4xOTEzOlxcdFxcbjE5MTQ6XFx0XFx0cmVzdWx0ID0gZmluZF9wbWRfb3JfdGhwX29yX25vbmUobW0sIGhhZGRyLCBcXHUwMDI2cG1kKTtcXG4xOTE1OlxcdFxcdHN3aXRjaCAocmVzdWx0KSB7XFxuMTkxNjpcXHRcXHRjYXNlIFNDQU5fU1VDQ0VFRDpcXG4xOTE3OlxcdFxcdFxcdGJyZWFrO1xcbjE5MTg6XFx0XFx0Y2FzZSBTQ0FOX05PX1BURV9UQUJMRTpcXG4xOTE5OlxcdFxcdFxcdC8qXFxuMTkyMDpcXHRcXHRcXHQgKiBBbGwgcHRlIGVudHJpZXMgaGF2ZSBiZWVuIHJlbW92ZWQgYW5kIHBtZCBjbGVhcmVkLlxcbjE5MjE6XFx0XFx0XFx0ICogU2tpcCBhbGwgdGhlIHB0ZSBjaGVja3MgYW5kIGp1c3QgdXBkYXRlIHRoZSBwbWQgbWFwcGluZy5cXG4xOTIyOlxcdFxcdFxcdCAqL1xcbjE5MjM6XFx0XFx0XFx0Z290byBtYXliZV9pbnN0YWxsX3BtZDtcXG4xOTI0OlxcdFxcdGRlZmF1bHQ6XFxuMTkyNTpcXHRcXHRcXHRnb3RvIGRyb3BfZm9saW87XFxuMTkyNjpcXHRcXHR9XFxuMTkyNzpcXHRcXG4xOTI4OlxcdFxcdHJlc3VsdCA9IFNDQU5fRkFJTDtcXG4xOTI5OlxcdFxcdHN0YXJ0X3B0ZSA9IHB0ZV9vZmZzZXRfbWFwX2xvY2sobW0sIHBtZCwgaGFkZHIsIFxcdTAwMjZwdGwpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwMjo0ODoyMS44Mzg0MDkzNTZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNTE2OTEwNTAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRoaW5nczpcblxuKipBbmFseXppbmcgYHRyeV9jb2xsYXBzZV9wdGVfbWFwcGVkX3RocGAgYW5kIGl0cyBTdXJyb3VuZGluZ3MqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIGB0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHBgLiBGaXJzdCwgSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaXRzIGNvbnRleHQuIFdoZXJlIGlzIHRoaXMgZnVuY3Rpb24gYWN0dWFsbHkgYmVpbmcgKnVzZWQqPyBJJ2xsIGNoZWNrIGl0cyBjYWxsIHNpdGVzIHRvIHVuZGVyc3RhbmQgdGhlIHNjZW5hcmlvcyBpbiB3aGljaCBpdCdzIHRyaWdnZXJlZC4gS25vd2luZyB0aGUgY2FsbGVycyB3aWxsIHRlbGwgbWUgdGhlIGhpZ2gtbGV2ZWwgbG9naWMgaXTigJlzIGEgcGFydCBvZiBhbmQgdGhlIHNwZWNpZmljIGV2ZW50cyB0aGF0IGxlYWQgdG8gdGhpcyBwYXJ0IG9mIHRoZSBjb2RlIHJ1bm5pbmcuXG5cblRoZW4sIEknbGwgdHVybiBteSBhdHRlbnRpb24gdG8gdGhlIGNvbmZpZ3VyYXRpb24gZ3VhcmRzIGFyb3VuZCBgbW0va2h1Z2VwYWdlZC5jYC4gV2hhdCBjb21waWxlLXRpbWUgb3B0aW9ucyBhcmUgaW5mbHVlbmNpbmcgdGhlIGF2YWlsYWJpbGl0eSBhbmQgYmVoYXZpb3Igb2YgdGhpcyBjb2RlPyBJJ20gdGhpbmtpbmcgSSdsbCBuZWVkIHRvIGlkZW50aWZ5IGFueSBkZXBlbmRlbmNpZXMgb24gdGhpbmdzIGxpa2UgVHJhbnNwYXJlbnQgSHVnZSBQYWdlcyAoVEhQKSBzdXBwb3J0IG9yIHNwZWNpZmljIG1lbW9yeSBtYW5hZ2VtZW50IGZlYXR1cmVzLiBVbmRlcnN0YW5kaW5nIHRoZSByZWxldmFudCBjb25maWdzIGlzIGNyaXRpY2FsIHRvIGtub3dpbmcgdGhlIHNjb3BlIG9mIGZ1bmN0aW9uYWxpdHkgSSBhbSB3b3JraW5nIHdpdGguIFdoYXQgaXMgY29uZGl0aW9uYWwsIGFuZCB3aGF0IGlzIGFsd2F5cyBydW5uaW5nPyBUaGUgY29uZmlncyBhcmUgdGhlIGtleSB0byBhbnN3ZXJpbmcgdGhhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjI1MiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDI6NDg6MjQuMzU1MzIxNjQ4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM1MjI1OTY0NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2todWdlcGFnZWQuYz0xODE1PXN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IHNldF9odWdlX3BtZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTE4NTAtXFxubW0va2h1Z2VwYWdlZC5jOjE4NTE6c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgdHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxubW0va2h1Z2VwYWdlZC5jLTE4NTItXFx0XFx0Ym9vbCBpbnN0YWxsX3BtZClcXG4tLVxcbm1tL2todWdlcGFnZWQuYz0yMDk2PXZvaWQgY29sbGFwc2VfcHRlX21hcHBlZF90aHAoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0yMDk4LXtcXG5tbS9raHVnZXBhZ2VkLmM6MjA5OTpcXHR0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHAobW0sIGFkZHIsIGluc3RhbGxfcG1kKTtcXG5tbS9raHVnZXBhZ2VkLmMtMjEwMC19XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmM9MjI0OT1zdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBjb2xsYXBzZV9maWxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMjYyOC1cXHQgKiBSZW1vdmUgcHRlIHBhZ2UgdGFibGVzLCBzbyB3ZSBjYW4gcmUtZmF1bHQgdGhlIHBhZ2UgYXMgaHVnZS5cXG5tbS9raHVnZXBhZ2VkLmM6MjYyOTpcXHQgKiBJZiBNQURWX0NPTExBUFNFLCBhZGp1c3QgcmVzdWx0IHRvIGNhbGwgdHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwKCkuXFxubW0va2h1Z2VwYWdlZC5jLTI2MzAtXFx0ICovXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmM9Mjc5MT1zdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBjb2xsYXBzZV9zaW5nbGVfcG1kKHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0yODM1LVxcdFxcdGVsc2VcXG5tbS9raHVnZXBhZ2VkLmM6MjgzNjpcXHRcXHRcXHRyZXN1bHQgPSB0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHAobW0sIGFkZHIsXFxubW0va2h1Z2VwYWdlZC5jLTI4MzctXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAhY2MtXFx1MDAzZWlzX2todWdlcGFnZWQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwMjo0ODoyNC43MDc1ODYxNTNaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMDY5MzY1Nzc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIHRoaXMsIGRpc3RpbGxlZCBpbnRvIGEgZmlyc3QtcGVyc29uIHN1bW1hcnkgYXMgeW91IHJlcXVlc3RlZCwgYXNzdW1pbmcgSSdtIGFscmVhZHkgd2VsbC12ZXJzZWQgaW4ga2VybmVsIG1lbW9yeSBtYW5hZ2VtZW50OlxuXG4qKk1lbW9yeSBNYW5hZ2VtZW50IERlZXAgRGl2ZSoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlnIGluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgZ29pbmcgb24gd2l0aCB0aGVzZSBtZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbnMuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiBob3cgbWVtb3J5IGlzIGJlaW5nIGhhbmRsZWQgcmVsYXRlZCB0byB0cmFuc3BhcmVudCBodWdlcGFnZXMgKFRIUCkgYW5kIGBtYWR2aXNlYCBjYWxscy5cblxuRmlyc3QsIEknbSBnb2luZyB0byBpbnZlc3RpZ2F0ZSB0aGUgYG1hZHZpc2VfY29sbGFwc2VgIG9yIHRoZSBgbWFkdmlzZWAgZW50cnkgcG9pbnQgaXRzZWxmLiBJIHdhbnQgdG8gc2VlIHByZWNpc2VseSBob3cgdGhlc2UgZnVuY3Rpb25zIGFyZSBiZWluZyB1c2VkIGFuZCB1bmRlcnN0YW5kIHRoZWlyIGV4YWN0IHB1cnBvc2UgaW4gY29sbGFwc2luZyBvciBvdGhlcndpc2UgbWFuYWdpbmcgbWVtb3J5IHJlZ2lvbnMuIEkgYWxzbyBuZWVkIHRvIHRyYWNrIGRvd24gYW55IGFuZCBhbGwgY2FsbHMgdG8gdGhlIGBraHVnZXBhZ2VkYCBwcm9jZXNzIGJlY2F1c2UgaXRzIHJlbGF0aW9uc2hpcCB3aXRoIFRIUHMgaXMgdml0YWwgdG8gZ3Jhc3AuXG5cbk5leHQsIEknbGwgc2hpZnQgZ2VhcnMgYW5kIHRyYWNlIHRoZSBjYWxsZXJzIG9mIHRoZXNlIGtleSBmdW5jdGlvbnM6IGBjb2xsYXBzZV9wdGVfbWFwcGVkX3RocGAsIGBjb2xsYXBzZV9zaW5nbGVfcG1kYCwgYW5kLCBhZ2FpbiwgYG1hZHZpc2VfY29sbGFwc2VgLiBJZGVudGlmeWluZyB3aGVyZSB0aGVzZSBhcmUgYmVpbmcgY2FsbGVkIGZyb20gd2lsbCBwYWludCBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhlIG1lbW9yeSBtYW5pcHVsYXRpb24gd29ya2Zsb3cuIFNlZWluZyB0aGUgY2FsbCBjaGFpbnMgd2lsbCBnaXZlIG1lIGluc2lnaHQgaW50byB0aGUgdHJpZ2dlcmluZyBtZWNoYW5pc21zLiBJJ20gYWZ0ZXIgdGhlIGJpZ2dlciBwaWN0dXJlOiB3aGF0IHNjZW5hcmlvcyBhcmUgY2F1c2luZyBUSFAgY29sbGFwc2UsIHdoYXQgY29kZSBwYXRocyBkbyB0aGUgZnVuY3Rpb25zIHRha2UsIGFuZCBob3cgZG9lcyBgbWFkdmlzZWAgaW5mbHVlbmNlIHRoZSB3aG9sZSBwcm9jZXNzPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MDMzLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDI6NDg6MjcuNzc2OTUzODg4WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0MTY1ODc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9raHVnZXBhZ2VkLmM9MTgxNT1zdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBzZXRfaHVnZV9wbWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0xODUwLVxcbm1tL2todWdlcGFnZWQuYzoxODUxOnN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IHRyeV9jb2xsYXBzZV9wdGVfbWFwcGVkX3RocChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbm1tL2todWdlcGFnZWQuYy0xODUyLVxcdFxcdGJvb2wgaW5zdGFsbF9wbWQpXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMjA4NC0vKipcXG5tbS9raHVnZXBhZ2VkLmM6MjA4NTogKiBjb2xsYXBzZV9wdGVfbWFwcGVkX3RocCAtIFRyeSB0byBjb2xsYXBzZSBhIHB0ZS1tYXBwZWQgVEhQIGZvciBtbSBhdFxcbm1tL2todWdlcGFnZWQuYy0yMDg2LSAqIGFkZHJlc3MgaGFkZHIuXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMjA5NS0gKi9cXG5tbS9raHVnZXBhZ2VkLmM6MjA5Njp2b2lkIGNvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxubW0va2h1Z2VwYWdlZC5jLTIwOTctXFx0XFx0Ym9vbCBpbnN0YWxsX3BtZClcXG5tbS9raHVnZXBhZ2VkLmMtMjA5OC17XFxubW0va2h1Z2VwYWdlZC5jOjIwOTk6XFx0dHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwKG1tLCBhZGRyLCBpbnN0YWxsX3BtZCk7XFxubW0va2h1Z2VwYWdlZC5jLTIxMDAtfVxcbi0tXFxubW0va2h1Z2VwYWdlZC5jPTIyNDk9c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2VfZmlsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTI2MjgtXFx0ICogUmVtb3ZlIHB0ZSBwYWdlIHRhYmxlcywgc28gd2UgY2FuIHJlLWZhdWx0IHRoZSBwYWdlIGFzIGh1Z2UuXFxubW0va2h1Z2VwYWdlZC5jOjI2Mjk6XFx0ICogSWYgTUFEVl9DT0xMQVBTRSwgYWRqdXN0IHJlc3VsdCB0byBjYWxsIHRyeV9jb2xsYXBzZV9wdGVfbWFwcGVkX3RocCgpLlxcbm1tL2todWdlcGFnZWQuYy0yNjMwLVxcdCAqL1xcbi0tXFxubW0va2h1Z2VwYWdlZC5jPTI3OTE9c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2Vfc2luZ2xlX3BtZCh1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMjgzNS1cXHRcXHRlbHNlXFxubW0va2h1Z2VwYWdlZC5jOjI4MzY6XFx0XFx0XFx0cmVzdWx0ID0gdHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwKG1tLCBhZGRyLFxcbm1tL2todWdlcGFnZWQuYy0yODM3LVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIWNjLVxcdTAwM2Vpc19raHVnZXBhZ2VkKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDI6NDg6MjcuODMxMTI1MjA3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTkxMzQxNTQzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIGBjb2xsYXBzZV9wdGVfbWFwcGVkX3RocGAgQ2FsbCBTaXRlcyoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIHdvcmsuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB1bmRlcnN0YW5kaW5nIHRoZSBzY29wZSBvZiB0aGUgYGNvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwYCBmdW5jdGlvbi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgZXZlcnl3aGVyZSBpdCdzICp1c2VkKiB3aXRoaW4gdGhlIGtlcm5lbCwgYW5kIHRoZSBtb3N0IGVmZmljaWVudCB3YXkgdG8gZG8gdGhhdCBpcywgb2YgY291cnNlLCB0byBzdGFydCBieSB0cmFjaW5nIHRob3NlIGNhbGwgc2l0ZXMuIFRoYXTigJlzIHRoZSBmaXJzdCBzdGVwIHRvIHVuZGVyc3RhbmRpbmcgaXRzIGltcGFjdCBhbmQgcG90ZW50aWFsIGludGVyYWN0aW9ucyB3aXRoIG90aGVyIHN1YnN5c3RlbXMuIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBkaWZmZXJlbnQgY29udGV4dHMgaXQgaXMgdXNlZCBpbiB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODAxNiwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDAyOjQ4OjI5Ljc0NDU0NDNaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NjIzNjg1NTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29sbGFwc2VfcHRlX21hcHBlZF90aHBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9raHVnZXBhZ2VkLmg9MTk9ZXh0ZXJuIGJvb2wgY3VycmVudF9pc19raHVnZXBhZ2VkKHZvaWQpO1xcbmluY2x1ZGUvbGludXgva2h1Z2VwYWdlZC5oOjIwOnZvaWQgY29sbGFwc2VfcHRlX21hcHBlZF90aHAoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG5pbmNsdWRlL2xpbnV4L2todWdlcGFnZWQuaC0yMS1cXHRcXHRib29sIGluc3RhbGxfcG1kKTtcXG4tLVxcbmluY2x1ZGUvbGludXgva2h1Z2VwYWdlZC5oPTQxPXN0YXRpYyBpbmxpbmUgdm9pZCBraHVnZXBhZ2VkX2VudGVyX3ZtYShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbmluY2x1ZGUvbGludXgva2h1Z2VwYWdlZC5oLTQ0LX1cXG5pbmNsdWRlL2xpbnV4L2todWdlcGFnZWQuaDo0NTpzdGF0aWMgaW5saW5lIHZvaWQgY29sbGFwc2VfcHRlX21hcHBlZF90aHAoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuaW5jbHVkZS9saW51eC9raHVnZXBhZ2VkLmgtNDYtXFx0XFx0dW5zaWduZWQgbG9uZyBhZGRyLCBib29sIGluc3RhbGxfcG1kKVxcbi0tXFxua2VybmVsL2V2ZW50cy91cHJvYmVzLmM9NDk5PWludCB1cHJvYmVfd3JpdGUoc3RydWN0IGFyY2hfdXByb2JlICphdXByb2JlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbmtlcm5lbC9ldmVudHMvdXByb2Jlcy5jLTU5OS1cXHRpZiAocmV0IFxcdTAwM2UgMClcXG5rZXJuZWwvZXZlbnRzL3Vwcm9iZXMuYzo2MDA6XFx0XFx0Y29sbGFwc2VfcHRlX21hcHBlZF90aHAobW0sIHZhZGRyLCBmYWxzZSk7XFxua2VybmVsL2V2ZW50cy91cHJvYmVzLmMtNjAxLVxcbi0tXFxubW0va2h1Z2VwYWdlZC5jPTE4MTU9c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgc2V0X2h1Z2VfcG1kKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMTg1MC1cXG5tbS9raHVnZXBhZ2VkLmM6MTg1MTpzdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCB0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHAoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG5tbS9raHVnZXBhZ2VkLmMtMTg1Mi1cXHRcXHRib29sIGluc3RhbGxfcG1kKVxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTIwODQtLyoqXFxubW0va2h1Z2VwYWdlZC5jOjIwODU6ICogY29sbGFwc2VfcHRlX21hcHBlZF90aHAgLSBUcnkgdG8gY29sbGFwc2UgYSBwdGUtbWFwcGVkIFRIUCBmb3IgbW0gYXRcXG5tbS9raHVnZXBhZ2VkLmMtMjA4Ni0gKiBhZGRyZXNzIGhhZGRyLlxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTIwOTUtICovXFxubW0va2h1Z2VwYWdlZC5jOjIwOTY6dm9pZCBjb2xsYXBzZV9wdGVfbWFwcGVkX3RocChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbm1tL2todWdlcGFnZWQuYy0yMDk3LVxcdFxcdGJvb2wgaW5zdGFsbF9wbWQpXFxubW0va2h1Z2VwYWdlZC5jLTIwOTgte1xcbm1tL2todWdlcGFnZWQuYzoyMDk5OlxcdHRyeV9jb2xsYXBzZV9wdGVfbWFwcGVkX3RocChtbSwgYWRkciwgaW5zdGFsbF9wbWQpO1xcbm1tL2todWdlcGFnZWQuYy0yMTAwLX1cXG4tLVxcbm1tL2todWdlcGFnZWQuYz0yMjQ5PXN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGNvbGxhcHNlX2ZpbGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0yNjI4LVxcdCAqIFJlbW92ZSBwdGUgcGFnZSB0YWJsZXMsIHNvIHdlIGNhbiByZS1mYXVsdCB0aGUgcGFnZSBhcyBodWdlLlxcbm1tL2todWdlcGFnZWQuYzoyNjI5OlxcdCAqIElmIE1BRFZfQ09MTEFQU0UsIGFkanVzdCByZXN1bHQgdG8gY2FsbCB0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHAoKS5cXG5tbS9raHVnZXBhZ2VkLmMtMjYzMC1cXHQgKi9cXG4tLVxcbm1tL2todWdlcGFnZWQuYz0yNzkxPXN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGNvbGxhcHNlX3NpbmdsZV9wbWQodW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTI4MzUtXFx0XFx0ZWxzZVxcbm1tL2todWdlcGFnZWQuYzoyODM2OlxcdFxcdFxcdHJlc3VsdCA9IHRyeV9jb2xsYXBzZV9wdGVfbWFwcGVkX3RocChtbSwgYWRkcixcXG5tbS9raHVnZXBhZ2VkLmMtMjgzNy1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICFjYy1cXHUwMDNlaXNfa2h1Z2VwYWdlZCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDAyOjQ4OjMxLjQwNjkxOTMwNFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNjYxMjQ3NzQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgTWVtb3J5IE1hbmFnZW1lbnQgVGVjaG5pcXVlczogQ29sbGFwc2luZyBNZW1vcnkgUmVnaW9ucyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW4gYW5kIGZpZ3VyZSBvdXQgZXhhY3RseSB3aGF0J3MgdXNpbmcgYG1hZHZpc2VfY29sbGFwc2VgIG9yLCBtb3JlIGdlbmVyYWxseSwgYG1hZHZpc2VgIGluIGNvbmp1bmN0aW9uIHdpdGggYE1BRFZfQ09MTEFQU0VgLiBNeSBpbml0aWFsIHBsYW4gaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCDigJMgSSdsbCBzdGFydCB3aXRoIGEgZ29vZCBvbGQgYGdyZXBgIHNlYXJjaCBmb3IgaW5zdGFuY2VzIG9mIGBtYWR2aXNlX2NvbGxhcHNlYCB3aXRoaW4gdGhlIHJlbGV2YW50IGNvZGViYXNlLiBUaGlzIHdpbGwgYmUgdGhlIGZpcnN0IHN0ZXAgdG8gdW5kZXJzdGFuZCB3aG8gaXMgdXNpbmcgaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkxMTIsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwMjo0ODozNC4wNjgxNjk0MTZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MjU0MzU0MjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWFkdmlzZV9jb2xsYXBzZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL3RyYW5zaHVnZS5yc3Q9MzQ2PUEgaGlnaGVyIHZhbHVlIG1heSBpbmNyZWFzZSBtZW1vcnkgZm9vdHByaW50IGZvciBzb21lIHdvcmtsb2Fkcy5cXG4tLVxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vdHJhbnNodWdlLnJzdC0zNTMtXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS90cmFuc2h1Z2UucnN0OjM1NDogICBDdXJyZW50bHksIG1hZHZpc2VfY29sbGFwc2Ugb25seSBzdXBwb3J0cyBjb2xsYXBzaW5nIHRvIFBNRC1zaXplZCBUSFBzXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS90cmFuc2h1Z2UucnN0LTM1NS0gICBhbmQgZG9lcyBub3QgYXR0ZW1wdCBtVEhQIGNvbGxhcHNlcy5cXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oPTUxMT1pbnQgaHVnZXBhZ2VfbWFkdmlzZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdm1fZmxhZ3NfdCAqdm1fZmxhZ3MsXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNTEyLVxcdFxcdCAgICAgaW50IGFkdmljZSk7XFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6NTEzOmludCBtYWR2aXNlX2NvbGxhcHNlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTUxNC1cXHRcXHQgICAgIHVuc2lnbmVkIGxvbmcgZW5kLCBib29sICpsb2NrX2Ryb3BwZWQpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg9NzEyPXN0YXRpYyBpbmxpbmUgaW50IGh1Z2VwYWdlX21hZHZpc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC03MTctXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6NzE4OnN0YXRpYyBpbmxpbmUgaW50IG1hZHZpc2VfY29sbGFwc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNzE5LVxcdFxcdFxcdFxcdCAgIHVuc2lnbmVkIGxvbmcgc3RhcnQsXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmM9MzE1Mj1ib29sIGN1cnJlbnRfaXNfa2h1Z2VwYWdlZCh2b2lkKVxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTMxNTYtXFxubW0va2h1Z2VwYWdlZC5jOjMxNTc6c3RhdGljIGludCBtYWR2aXNlX2NvbGxhcHNlX2Vycm5vKGVudW0gc2Nhbl9yZXN1bHQgcilcXG5tbS9raHVnZXBhZ2VkLmMtMzE1OC17XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMzE4OC1cXG5tbS9raHVnZXBhZ2VkLmM6MzE4OTppbnQgbWFkdmlzZV9jb2xsYXBzZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBzdGFydCxcXG5tbS9raHVnZXBhZ2VkLmMtMzE5MC1cXHRcXHQgICAgIHVuc2lnbmVkIGxvbmcgZW5kLCBib29sICpsb2NrX2Ryb3BwZWQpXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMzI3Ni1cXHRyZXR1cm4gdGhwcyA9PSAoKGhlbmQgLSBoc3RhcnQpIFxcdTAwM2VcXHUwMDNlIEhQQUdFX1BNRF9TSElGVCkgPyAwXFxubW0va2h1Z2VwYWdlZC5jOjMyNzc6XFx0XFx0XFx0OiBtYWR2aXNlX2NvbGxhcHNlX2Vycm5vKGxhc3RfZmFpbCk7XFxubW0va2h1Z2VwYWdlZC5jLTMyNzgtfVxcbi0tXFxubW0vbWFkdmlzZS5jPTEzNDc9c3RhdGljIGludCBtYWR2aXNlX3ZtYV9iZWhhdmlvcihzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcXG4tLVxcbm1tL21hZHZpc2UuYy0xMzcxLVxcdGNhc2UgTUFEVl9DT0xMQVBTRTpcXG5tbS9tYWR2aXNlLmM6MTM3MjpcXHRcXHRyZXR1cm4gbWFkdmlzZV9jb2xsYXBzZSh2bWEsIHJhbmdlLVxcdTAwM2VzdGFydCwgcmFuZ2UtXFx1MDAzZWVuZCxcXG5tbS9tYWR2aXNlLmMtMTM3My1cXHRcXHRcXHRcXHUwMDI2bWFkdl9iZWhhdmlvci1cXHUwMDNlbG9ja19kcm9wcGVkKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYz0yMzU9c3RhdGljIHZvaWQgZmlsbF9tZW1vcnkoaW50ICpwLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYy0yNDgtICovXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jOjI0OTpzdGF0aWMgaW50IG1hZHZpc2VfY29sbGFwc2VfcmV0cnkodm9pZCAqcCwgdW5zaWduZWQgbG9uZyBzaXplKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYy0yNTAte1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jPTI2Nz1zdGF0aWMgdm9pZCAqYWxsb2NfaHBhZ2Uoc3RydWN0IG1lbV9vcHMgKm9wcylcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYy0yODAtXFx0a3NmdF9wcmludF9tc2coXFxcIkFsbG9jYXRlIGh1Z2UgcGFnZS4uLlxcXCIpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYzoyODE6XFx0aWYgKG1hZHZpc2VfY29sbGFwc2VfcmV0cnkocCwgaHBhZ2VfcG1kX3NpemUpKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYy0yODItXFx0XFx0a3NmdF9leGl0X2ZhaWxfcGVycm9yKFxcXCJtYWR2aXNlKE1BRFZfQ09MTEFQU0UpXFxcIik7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmM9NTExPXN0YXRpYyBib29sIGlzX2Fub24oc3RydWN0IG1lbV9vcHMgKm9wcylcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYy01MTUtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jOjUxNjpzdGF0aWMgdm9pZCBfX21hZHZpc2VfY29sbGFwc2UoY29uc3QgY2hhciAqbXNnLCBjaGFyICpwLCBpbnQgbnJfaHBhZ2VzLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYy01MTctXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBtZW1fb3BzICpvcHMsIGJvb2wgZXhwZWN0KVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jLTUzOS1cXHRtYWR2aXNlKHAsIG5yX2hwYWdlcyAqIGhwYWdlX3BtZF9zaXplLCBNQURWX0hVR0VQQUdFKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmM6NTQwOlxcdHJldCA9IG1hZHZpc2VfY29sbGFwc2VfcmV0cnkocCwgbnJfaHBhZ2VzICogaHBhZ2VfcG1kX3NpemUpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYy01NDEtXFx0aWYgKCgoYm9vbClyZXQpID09IGV4cGVjdClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYy01NTAtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jOjU1MTpzdGF0aWMgdm9pZCBtYWR2aXNlX2NvbGxhcHNlKGNvbnN0IGNoYXIgKm1zZywgY2hhciAqcCwgaW50IG5yX2hwYWdlcyxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMtNTUyLVxcdFxcdFxcdCAgICAgc3RydWN0IG1lbV9vcHMgKm9wcywgYm9vbCBleHBlY3QpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMtNTU2LVxcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwiVW5leHBlY3RlZCBodWdlIHBhZ2VcXFxcblxcXCIpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYzo1NTc6XFx0X19tYWR2aXNlX2NvbGxhcHNlKG1zZywgcCwgbnJfaHBhZ2VzLCBvcHMsIGV4cGVjdCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jLTU1OC19XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmM9NjgwPXN0YXRpYyBzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCBfX21hZHZpc2VfY29udGV4dCA9IHtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmM6NjgxOlxcdC5jb2xsYXBzZSA9IFxcdTAwMjZtYWR2aXNlX2NvbGxhcHNlLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYy02ODItXFx0LmVuZm9yY2VfcHRlX3NjYW5fbGltaXRzID0gZmFsc2UsXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmM9MTA3Nj1zdGF0aWMgdm9pZCBjb2xsYXBzZV9tYXhfcHRlc19zaGFyZWQoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsIHN0cnVjdCBtZW1fb3BzICpvcHMpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMtMTEzMy1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmM6MTEzNDpzdGF0aWMgdm9pZCBtYWR2aXNlX2NvbGxhcHNlX2V4aXN0aW5nX3RocHMoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jLTExMzUtXFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IG1lbV9vcHMgKm9wcylcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYy0xMTQ0LVxcdC8qIGMtXFx1MDAzZWNvbGxhcHNlKCkgd2lsbCBmaW5kIGEgaHVnZXBhZ2UgYW5kIGNvbXBsYWluIC0gY2FsbCBkaXJlY3RseS4gKi9cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmM6MTE0NTpcXHRfX21hZHZpc2VfY29sbGFwc2UoXFxcIlJlLWNvbGxhcHNlIFBNRC1tYXBwZWQgaHVnZXBhZ2VcXFwiLCBwLCAxLCBvcHMsIHRydWUpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYy0xMTQ2LVxcdHZhbGlkYXRlX21lbW9yeShwLCAwLCBocGFnZV9wbWRfc2l6ZSk7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmM9MTMxMT1pbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMtMTQzMi1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmM6MTQzMzpcXHRURVNUKG1hZHZpc2VfY29sbGFwc2VfZXhpc3RpbmdfdGhwcywgbWFkdmlzZV9jb250ZXh0LCBhbm9uX29wcyk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jOjE0MzQ6XFx0VEVTVChtYWR2aXNlX2NvbGxhcHNlX2V4aXN0aW5nX3RocHMsIG1hZHZpc2VfY29udGV4dCwgcmVhZF9vbmx5X2ZpbGVfb3BzKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmM6MTQzNTpcXHRURVNUKG1hZHZpc2VfY29sbGFwc2VfZXhpc3RpbmdfdGhwcywgbWFkdmlzZV9jb250ZXh0LCByZWFkX3dyaXRlX2ZpbGVfcmVhZF9vcHMpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYzoxNDM2OlxcdFRFU1QobWFkdmlzZV9jb2xsYXBzZV9leGlzdGluZ190aHBzLCBtYWR2aXNlX2NvbnRleHQsIHNobWVtX29wcyk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jLTE0MzctXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDAyOjQ4OjM1Ljc5MzYxMjIzMloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzM5OTIwMTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIEtlcm5lbCBIdWdlIFBhZ2UgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gaG93IGBraHVnZXBhZ2VkYCBhbmQgdGhhdCBwZXNreSBgdXNlcmZhdWx0ZmRfbWlub3JgIGFyZSBjb25maWd1cmVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlc2UgdGhpbmdzLiBGaXJzdCwgSSdsbCBnbyBzdHJhaWdodCB0byB0aGUgc291cmNlIOKAkyB0aGUgS2NvbmZpZyBmaWxlcy4gSSdsbCBuZWVkIHRvIHNlZSBob3cgdGhlIHNldHRpbmdzIGluIGBraHVnZXBhZ2VkLmNgIGFuZCBgdXNlcmZhdWx0ZmRfbWlub3JgIGFyZSBjb250cm9sbGVkLiBMZXQncyBzdGFydCB3aXRoIGEgZm9jdXNlZCBncmVwLiBJJ2xsIHNlYXJjaCBmb3IgcmVmZXJlbmNlcyB0byBga2h1Z2VwYWdlZGAgaW4gdGhlIGBtbS9NYWtlZmlsZWAgYW5kIGBtbS9LY29uZmlnYCBmaWxlcy4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2Qgb3ZlcnZpZXcgb2YgdGhlIGJ1aWxkIGRlcGVuZGVuY2llcyBhbmQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBGcm9tIHRoZXJlLCBJJ2xsIGJlIGFibGUgdG8gYnVpbGQgYSBtZW50YWwgbWFwIG9mIGhvdyB0aGVzZSBmZWF0dXJlcyBhcmUgZW5hYmxlZCwgZGlzYWJsZWQsIGFuZCBwb3RlbnRpYWxseSB0dW5lZC4gVGhpcyBLY29uZmlnIGV4cGxvcmF0aW9uIHNob3VsZCBzaGVkIGxpZ2h0IG9uIHRoZSBidWlsZC10aW1lIGRlcGVuZGVuY2llcyBhbmQgcGVyaGFwcyBzb21lIG9mIHRoZSBicm9hZGVyIGFyY2hpdGVjdHVyZSBpbnZvbHZlZCBpbiBoYW5kbGluZyBodWdlIHBhZ2VzIGFuZCB1c2VyIGZhdWx0IGhhbmRsaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTQ0MCwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDAyOjQ4OjM4LjEzMzUzNTA2WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDQ1NTk5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJraHVnZXBhZ2VkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDg2MiBsaW5lcy5cXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXFxuXFxubW0vTWFrZWZpbGU9MTAwPW9iai0kKENPTkZJR19ERVZJQ0VfTUlHUkFUSU9OKSArPSBtaWdyYXRlX2RldmljZS5vXFxubW0vTWFrZWZpbGU6MTAxOm9iai0kKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgKz0gaHVnZV9tZW1vcnkubyBraHVnZXBhZ2VkLm9cXG5tbS9NYWtlZmlsZS0xMDItb2JqLSQoQ09ORklHX1BBR0VfQ09VTlRFUikgKz0gcGFnZV9jb3VudGVyLm9cXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMjMtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21tX3R5cGVzLmhcXHUwMDNlXFxubW0vaHVnZV9tZW1vcnkuYzoyNDojaW5jbHVkZSBcXHUwMDNjbGludXgva2h1Z2VwYWdlZC5oXFx1MDAzZVxcbm1tL2h1Z2VfbWVtb3J5LmMtMjUtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ZyZWV6ZXIuaFxcdTAwM2VcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNTYtICogZ3VhcmFudGVlZCB0byBiZW5lZml0IGZyb20gaXQuIFdoZW4gdHJhbnNwYXJlbnQgaHVnZXBhZ2Ugc3VwcG9ydCBpc1xcbm1tL2h1Z2VfbWVtb3J5LmM6NTc6ICogZW5hYmxlZCwgaXQgaXMgZm9yIGFsbCBtYXBwaW5ncywgYW5kIGtodWdlcGFnZWQgc2NhbnMgYWxsIG1hcHBpbmdzLlxcbm1tL2h1Z2VfbWVtb3J5LmM6NTg6ICogRGVmcmFnIGlzIGludm9rZWQgYnkga2h1Z2VwYWdlZCBodWdlcGFnZSBhbGxvY2F0aW9ucyBhbmQgYnkgcGFnZSBmYXVsdHNcXG5tbS9odWdlX21lbW9yeS5jLTU5LSAqIGZvciBhbGwgaHVnZXBhZ2UgYWxsb2NhdGlvbnMuXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTEyMT11bnNpZ25lZCBsb25nIF9fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0xNDgtXFxubW0vaHVnZV9tZW1vcnkuYzoxNDk6XFx0Lyoga2h1Z2VwYWdlZCBkb2Vzbid0IGNvbGxhcHNlIERBWCB2bWEsIGJ1dCBwYWdlIGZhdWx0IGlzIGZpbmUuICovXFxubW0vaHVnZV9tZW1vcnkuYy0xNTAtXFx0aWYgKHZtYV9pc19kYXgodm1hKSlcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMTUzLVxcdC8qXFxubW0vaHVnZV9tZW1vcnkuYzoxNTQ6XFx0ICoga2h1Z2VwYWdlZCBzcGVjaWFsIFZNQSBhbmQgaHVnZXRsYiBWTUEuXFxubW0vaHVnZV9tZW1vcnkuYy0xNTUtXFx0ICogTXVzdCBiZSBjaGVja2VkIGFmdGVyIGRheCBzaW5jZSBzb21lIGRheCBtYXBwaW5ncyBtYXkgaGF2ZVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz00NDU9c3RhdGljIHNzaXplX3QgZW5hYmxlZF9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDU1LVxcdGlmIChzZXRfZ2xvYmFsX2VuYWJsZWRfbW9kZShtb2RlKSkge1xcbm1tL2h1Z2VfbWVtb3J5LmM6NDU2OlxcdFxcdGludCBlcnIgPSBzdGFydF9zdG9wX2todWdlcGFnZWQoKTtcXG5tbS9odWdlX21lbW9yeS5jLTQ1Ny1cXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDYzLVxcdFxcdCAqIGNoYW5nZSwgYXMgdGhlIHByZXZpb3VzIGNvZGUgYWx3YXlzIGNhbGxlZFxcbm1tL2h1Z2VfbWVtb3J5LmM6NDY0OlxcdFxcdCAqIHN0YXJ0X3N0b3Bfa2h1Z2VwYWdlZCgpIHdoaWNoIGRvZXMgdGhpcyBpbnRlcm5hbGx5Llxcbm1tL2h1Z2VfbWVtb3J5LmMtNDY1LVxcdFxcdCAqL1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz02ODA9c3RhdGljIHNzaXplX3QgYW5vbl9lbmFibGVkX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy02OTEtXFx0aWYgKHNldF9hbm9uX2VuYWJsZWRfbW9kZShvcmRlciwgbW9kZSkpIHtcXG5tbS9odWdlX21lbW9yeS5jOjY5MjpcXHRcXHRpbnQgZXJyID0gc3RhcnRfc3RvcF9raHVnZXBhZ2VkKCk7XFxubW0vaHVnZV9tZW1vcnkuYy02OTMtXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTY5OS1cXHRcXHQgKiBjaGFuZ2UsIGFzIHRoZSBwcmV2aW91cyBjb2RlIGFsd2F5cyBjYWxsZWRcXG5tbS9odWdlX21lbW9yeS5jOjcwMDpcXHRcXHQgKiBzdGFydF9zdG9wX2todWdlcGFnZWQoKSB3aGljaCBkb2VzIHRoaXMgaW50ZXJuYWxseS5cXG5tbS9odWdlX21lbW9yeS5jLTcwMS1cXHRcXHQgKi9cXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9OTMzPXN0YXRpYyBpbnQgX19pbml0IGh1Z2VwYWdlX2luaXRfc3lzZnMoc3RydWN0IGtvYmplY3QgKipodWdlcGFnZV9rb2JqKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy05NTktXFxubW0vaHVnZV9tZW1vcnkuYzo5NjA6XFx0ZXJyID0gc3lzZnNfY3JlYXRlX2dyb3VwKCpodWdlcGFnZV9rb2JqLCBcXHUwMDI2a2h1Z2VwYWdlZF9hdHRyX2dyb3VwKTtcXG5tbS9odWdlX21lbW9yeS5jLTk2MS1cXHRpZiAoZXJyKSB7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTk5MT1zdGF0aWMgdm9pZCBfX2luaXQgaHVnZXBhZ2VfZXhpdF9zeXNmcyhzdHJ1Y3Qga29iamVjdCAqaHVnZXBhZ2Vfa29iailcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtOTk5LVxcbm1tL2h1Z2VfbWVtb3J5LmM6MTAwMDpcXHRzeXNmc19yZW1vdmVfZ3JvdXAoaHVnZXBhZ2Vfa29iaiwgXFx1MDAyNmtodWdlcGFnZWRfYXR0cl9ncm91cCk7XFxubW0vaHVnZV9tZW1vcnkuYy0xMDAxLVxcdHN5c2ZzX3JlbW92ZV9ncm91cChodWdlcGFnZV9rb2JqLCBcXHUwMDI2aHVnZXBhZ2VfYXR0cl9ncm91cCk7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTEwNTE9c3RhdGljIGludCBfX2luaXQgaHVnZXBhZ2VfaW5pdCh2b2lkKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0xMDY5LVxcbm1tL2h1Z2VfbWVtb3J5LmM6MTA3MDpcXHRlcnIgPSBraHVnZXBhZ2VkX2luaXQoKTtcXG5tbS9odWdlX21lbW9yeS5jLTEwNzEtXFx0aWYgKGVycilcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMTA4Ny1cXG5tbS9odWdlX21lbW9yeS5jOjEwODg6XFx0ZXJyID0gc3RhcnRfc3RvcF9raHVnZXBhZ2VkKCk7XFxubW0vaHVnZV9tZW1vcnkuYy0xMDg5LVxcdGlmIChlcnIpXFxubW0vaHVnZV9tZW1vcnkuYzoxMDkwOlxcdFxcdGdvdG8gZXJyX2todWdlcGFnZWQ7XFxubW0vaHVnZV9tZW1vcnkuYy0xMDkxLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMTA5Mi1cXHRyZXR1cm4gMDtcXG5tbS9odWdlX21lbW9yeS5jOjEwOTM6ZXJyX2todWdlcGFnZWQ6XFxubW0vaHVnZV9tZW1vcnkuYy0xMDk0LVxcdHRocF9zaHJpbmtlcl9leGl0KCk7XFxubW0vaHVnZV9tZW1vcnkuYy0xMDk1LWVycl9zaHJpbmtlcjpcXG5tbS9odWdlX21lbW9yeS5jOjEwOTY6XFx0a2h1Z2VwYWdlZF9kZXN0cm95KCk7XFxubW0vaHVnZV9tZW1vcnkuYy0xMDk3LWVycl9zbGFiOlxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0xNTIwPXZtX2ZhdWx0X3QgZG9faHVnZV9wbWRfYW5vbnltb3VzX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTE1MzAtXFx0XFx0cmV0dXJuIHJldDtcXG5tbS9odWdlX21lbW9yeS5jOjE1MzE6XFx0a2h1Z2VwYWdlZF9lbnRlcl92bWEodm1hLCB2bWEtXFx1MDAzZXZtX2ZsYWdzKTtcXG5tbS9odWdlX21lbW9yeS5jLTE1MzItXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTQ1NjE9c3RhdGljIGJvb2wgdGhwX3VuZGVydXNlZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00NTY1LVxcbm1tL2h1Z2VfbWVtb3J5LmM6NDU2NjpcXHRpZiAoa2h1Z2VwYWdlZF9tYXhfcHRlc19ub25lID09IEhQQUdFX1BNRF9OUiAtIDEpXFxubW0vaHVnZV9tZW1vcnkuYy00NTY3LVxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDU3My1cXHRcXHRpZiAocGFnZXNfaWRlbnRpY2FsKGZvbGlvX3BhZ2UoZm9saW8sIGkpLCBaRVJPX1BBR0UoMCkpKSB7XFxubW0vaHVnZV9tZW1vcnkuYzo0NTc0OlxcdFxcdFxcdGlmICgrK251bV96ZXJvX3BhZ2VzIFxcdTAwM2Uga2h1Z2VwYWdlZF9tYXhfcHRlc19ub25lKVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDU3NS1cXHRcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDU4MC1cXHRcXHRcXHQgKi9cXG5tbS9odWdlX21lbW9yeS5jOjQ1ODE6XFx0XFx0XFx0aWYgKCsrbnVtX2ZpbGxlZF9wYWdlcyBcXHUwMDNlPSBIUEFHRV9QTURfTlIgLSBraHVnZXBhZ2VkX21heF9wdGVzX25vbmUpXFxubW0vaHVnZV9tZW1vcnkuYy00NTgyLVxcdFxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbm1tL2ludGVybmFsLmgtMTAtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ZzLmhcXHUwMDNlXFxubW0vaW50ZXJuYWwuaDoxMTojaW5jbHVkZSBcXHUwMDNjbGludXgva2h1Z2VwYWdlZC5oXFx1MDAzZVxcbm1tL2ludGVybmFsLmgtMTItI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21tLmhcXHUwMDNlXFxuLS1cXG5tbS9pbnRlcm5hbC5oPTcwNj1wbWRfdCAqbW1fZmluZF9wbWQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyk7XFxuLS1cXG5tbS9pbnRlcm5hbC5oLTcwOC0vKlxcbm1tL2ludGVybmFsLmg6NzA5OiAqIGluIG1tL2todWdlcGFnZWQuY1xcbm1tL2ludGVybmFsLmgtNzEwLSAqL1xcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTExLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9rdGhyZWFkLmhcXHUwMDNlXFxubW0va2h1Z2VwYWdlZC5jOjEyOiNpbmNsdWRlIFxcdTAwM2NsaW51eC9raHVnZXBhZ2VkLmhcXHUwMDNlXFxubW0va2h1Z2VwYWdlZC5jLTEzLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9mcmVlemVyLmhcXHUwMDNlXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmM9MzM9ZW51bSBzY2FuX3Jlc3VsdCB7XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtNzAtXFxubW0va2h1Z2VwYWdlZC5jOjcxOnN0YXRpYyBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmtodWdlcGFnZWRfdGhyZWFkIF9fcmVhZF9tb3N0bHk7XFxubW0va2h1Z2VwYWdlZC5jOjcyOnN0YXRpYyBERUZJTkVfTVVURVgoa2h1Z2VwYWdlZF9tdXRleCk7XFxubW0va2h1Z2VwYWdlZC5jLTczLVxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTc3LSAqL1xcbm1tL2todWdlcGFnZWQuYzo3ODpzdGF0aWMgdW5zaWduZWQgaW50IGtodWdlcGFnZWRfcGFnZXNfdG9fc2NhbiBfX3JlYWRfbW9zdGx5O1xcbm1tL2todWdlcGFnZWQuYzo3OTpzdGF0aWMgdW5zaWduZWQgaW50IGtodWdlcGFnZWRfcGFnZXNfY29sbGFwc2VkO1xcbm1tL2todWdlcGFnZWQuYzo4MDpzdGF0aWMgdW5zaWduZWQgaW50IGtodWdlcGFnZWRfZnVsbF9zY2FucztcXG5tbS9raHVnZXBhZ2VkLmM6ODE6c3RhdGljIHVuc2lnbmVkIGludCBraHVnZXBhZ2VkX3NjYW5fc2xlZXBfbWlsbGlzZWNzIF9fcmVhZF9tb3N0bHkgPSAxMDAwMDtcXG5tbS9raHVnZXBhZ2VkLmMtODItLyogZHVyaW5nIGZyYWdtZW50YXRpb24gcG9sbCB0aGUgaHVnZXBhZ2UgYWxsb2NhdG9yIG9uY2UgZXZlcnkgbWludXRlICovXFxubW0va2h1Z2VwYWdlZC5jOjgzOnN0YXRpYyB1bnNpZ25lZCBpbnQga2h1Z2VwYWdlZF9hbGxvY19zbGVlcF9taWxsaXNlY3MgX19yZWFkX21vc3RseSA9IDYwMDAwO1xcbm1tL2todWdlcGFnZWQuYzo4NDpzdGF0aWMgdW5zaWduZWQgbG9uZyBraHVnZXBhZ2VkX3NsZWVwX2V4cGlyZTtcXG5tbS9raHVnZXBhZ2VkLmM6ODU6c3RhdGljIERFRklORV9TUElOTE9DSyhraHVnZXBhZ2VkX21tX2xvY2spO1xcbm1tL2todWdlcGFnZWQuYzo4NjpzdGF0aWMgREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQoa2h1Z2VwYWdlZF93YWl0KTtcXG5tbS9raHVnZXBhZ2VkLmMtODctLypcXG4tLVxcbm1tL2todWdlcGFnZWQuYy05MS0gKlxcbm1tL2todWdlcGFnZWQuYzo5MjogKiBOb3RlIHRoYXQgdGhlc2UgYXJlIG9ubHkgcmVzcGVjdGVkIGlmIGNvbGxhcHNlIHdhcyBpbml0aWF0ZWQgYnkga2h1Z2VwYWdlZC5cXG5tbS9raHVnZXBhZ2VkLmMtOTMtICovXFxubW0va2h1Z2VwYWdlZC5jLTk0LSNkZWZpbmUgS0hVR0VQQUdFRF9NQVhfUFRFU19MSU1JVCAoSFBBR0VfUE1EX05SIC0gMSlcXG5tbS9raHVnZXBhZ2VkLmM6OTU6dW5zaWduZWQgaW50IGtodWdlcGFnZWRfbWF4X3B0ZXNfbm9uZSBfX3JlYWRfbW9zdGx5O1xcbm1tL2todWdlcGFnZWQuYzo5NjpzdGF0aWMgdW5zaWduZWQgaW50IGtodWdlcGFnZWRfbWF4X3B0ZXNfc3dhcCBfX3JlYWRfbW9zdGx5O1xcbm1tL2todWdlcGFnZWQuYzo5NzpzdGF0aWMgdW5zaWduZWQgaW50IGtodWdlcGFnZWRfbWF4X3B0ZXNfc2hhcmVkIF9fcmVhZF9tb3N0bHk7XFxubW0va2h1Z2VwYWdlZC5jLTk4LVxcbi0tXFxubW0va2h1Z2VwYWdlZC5jPTEwNj1zdHJ1Y3QgY29sbGFwc2VfY29udHJvbCB7XFxubW0va2h1Z2VwYWdlZC5jOjEwNzpcXHRib29sIGlzX2todWdlcGFnZWQ7XFxubW0va2h1Z2VwYWdlZC5jLTEwOC1cXG4tLVxcbm1tL2todWdlcGFnZWQuYy0xMTEtXFxubW0va2h1Z2VwYWdlZC5jOjExMjpcXHQvKiBOdW0gcGFnZXMgc2Nhbm5lZCAoc2VlIGtodWdlcGFnZWRfcGFnZXNfdG9fc2NhbikgKi9cXG5tbS9raHVnZXBhZ2VkLmMtMTEzLVxcdHVuc2lnbmVkIGludCBwcm9ncmVzcztcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0xMjItLyoqXFxubW0va2h1Z2VwYWdlZC5jOjEyMzogKiBzdHJ1Y3Qga2h1Z2VwYWdlZF9zY2FuIC0gY3Vyc29yIGZvciBzY2FubmluZ1xcbm1tL2todWdlcGFnZWQuYy0xMjQtICogQG1tX2hlYWQ6IHRoZSBoZWFkIG9mIHRoZSBtbSBsaXN0IHRvIHNjYW5cXG4tLVxcbm1tL2todWdlcGFnZWQuYy0xMjctICpcXG5tbS9raHVnZXBhZ2VkLmM6MTI4OiAqIFRoZXJlIGlzIG9ubHkgdGhlIG9uZSBraHVnZXBhZ2VkX3NjYW4gaW5zdGFuY2Ugb2YgdGhpcyBjdXJzb3Igc3RydWN0dXJlLlxcbm1tL2todWdlcGFnZWQuYy0xMjktICovXFxubW0va2h1Z2VwYWdlZC5jOjEzMDpzdHJ1Y3Qga2h1Z2VwYWdlZF9zY2FuIHtcXG5tbS9raHVnZXBhZ2VkLmMtMTMxLVxcdHN0cnVjdCBsaXN0X2hlYWQgbW1faGVhZDtcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0xMzUtXFxubW0va2h1Z2VwYWdlZC5jOjEzNjpzdGF0aWMgc3RydWN0IGtodWdlcGFnZWRfc2NhbiBraHVnZXBhZ2VkX3NjYW4gPSB7XFxubW0va2h1Z2VwYWdlZC5jOjEzNzpcXHQubW1faGVhZCA9IExJU1RfSEVBRF9JTklUKGtodWdlcGFnZWRfc2Nhbi5tbV9oZWFkKSxcXG5tbS9raHVnZXBhZ2VkLmMtMTM4LX07XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmM9MTQxPXN0YXRpYyBzc2l6ZV90IHNjYW5fc2xlZXBfbWlsbGlzZWNzX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMTQ0LXtcXG5tbS9raHVnZXBhZ2VkLmM6MTQ1OlxcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXFxcIiV1XFxcXG5cXFwiLCBraHVnZXBhZ2VkX3NjYW5fc2xlZXBfbWlsbGlzZWNzKTtcXG5tbS9raHVnZXBhZ2VkLmMtMTQ2LX1cXG4tLVxcbm1tL2todWdlcGFnZWQuYz0xNDg9c3RhdGljIHNzaXplX3QgX19zbGVlcF9taWxsaXNlY3Nfc3RvcmUoY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQsXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMTU4LVxcdCptaWxsaXNlY3MgPSBtc2VjcztcXG5tbS9raHVnZXBhZ2VkLmM6MTU5OlxcdGtodWdlcGFnZWRfc2xlZXBfZXhwaXJlID0gMDtcXG5tbS9raHVnZXBhZ2VkLmM6MTYwOlxcdHdha2VfdXBfaW50ZXJydXB0aWJsZShcXHUwMDI2a2h1Z2VwYWdlZF93YWl0KTtcXG5tbS9raHVnZXBhZ2VkLmMtMTYxLVxcbi0tXFxubW0va2h1Z2VwYWdlZC5jPTE2NT1zdGF0aWMgc3NpemVfdCBzY2FuX3NsZWVwX21pbGxpc2Vjc19zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0xNjgte1xcbm1tL2todWdlcGFnZWQuYzoxNjk6XFx0cmV0dXJuIF9fc2xlZXBfbWlsbGlzZWNzX3N0b3JlKGJ1ZiwgY291bnQsIFxcdTAwMjZraHVnZXBhZ2VkX3NjYW5fc2xlZXBfbWlsbGlzZWNzKTtcXG5tbS9raHVnZXBhZ2VkLmMtMTcwLX1cXG4tLVxcbm1tL2todWdlcGFnZWQuYz0xNzQ9c3RhdGljIHNzaXplX3QgYWxsb2Nfc2xlZXBfbWlsbGlzZWNzX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMTc3LXtcXG5tbS9raHVnZXBhZ2VkLmM6MTc4OlxcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXFxcIiV1XFxcXG5cXFwiLCBraHVnZXBhZ2VkX2FsbG9jX3NsZWVwX21pbGxpc2Vjcyk7XFxubW0va2h1Z2VwYWdlZC5jLTE3OS19XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmM9MTgxPXN0YXRpYyBzc2l6ZV90IGFsbG9jX3NsZWVwX21pbGxpc2Vjc19zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0xODQte1xcbm1tL2todWdlcGFnZWQuYzoxODU6XFx0cmV0dXJuIF9fc2xlZXBfbWlsbGlzZWNzX3N0b3JlKGJ1ZiwgY291bnQsIFxcdTAwMjZraHVnZXBhZ2VkX2FsbG9jX3NsZWVwX21pbGxpc2Vjcyk7XFxubW0va2h1Z2VwYWdlZC5jLTE4Ni19XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmM9MTkwPXN0YXRpYyBzc2l6ZV90IHBhZ2VzX3RvX3NjYW5fc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0xOTMte1xcbm1tL2todWdlcGFnZWQuYzoxOTQ6XFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcXFwiJXVcXFxcblxcXCIsIGtodWdlcGFnZWRfcGFnZXNfdG9fc2Nhbik7XFxubW0va2h1Z2VwYWdlZC5jLTE5NS19XFxubW0va2h1Z2VwYWdlZC5jPTE5Nj1zdGF0aWMgc3NpemVfdCBwYWdlc190b19zY2FuX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTIwNi1cXG5tbS9raHVnZXBhZ2VkLmM6MjA3OlxcdGtodWdlcGFnZWRfcGFnZXNfdG9fc2NhbiA9IHBhZ2VzO1xcbm1tL2todWdlcGFnZWQuYy0yMDgtXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmM9MjE0PXN0YXRpYyBzc2l6ZV90IHBhZ2VzX2NvbGxhcHNlZF9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTIxNy17XFxubW0va2h1Z2VwYWdlZC5jOjIxODpcXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFxcXCIldVxcXFxuXFxcIiwga2h1Z2VwYWdlZF9wYWdlc19jb2xsYXBzZWQpO1xcbm1tL2todWdlcGFnZWQuYy0yMTktfVxcbi0tXFxubW0va2h1Z2VwYWdlZC5jPTIyMz1zdGF0aWMgc3NpemVfdCBmdWxsX3NjYW5zX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMjI2LXtcXG5tbS9raHVnZXBhZ2VkLmM6MjI3OlxcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXFxcIiV1XFxcXG5cXFwiLCBraHVnZXBhZ2VkX2Z1bGxfc2NhbnMpO1xcbm1tL2todWdlcGFnZWQuYy0yMjgtfVxcbi0tXFxubW0va2h1Z2VwYWdlZC5jPTIzOD1zdGF0aWMgc3NpemVfdCBkZWZyYWdfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMjQ0LX1cXG5tbS9raHVnZXBhZ2VkLmM6MjQ1OnN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUga2h1Z2VwYWdlZF9kZWZyYWdfYXR0ciA9XFxubW0va2h1Z2VwYWdlZC5jLTI0Ni1cXHRfX0FUVFJfUlcoZGVmcmFnKTtcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0yNDgtLypcXG5tbS9raHVnZXBhZ2VkLmM6MjQ5OiAqIG1heF9wdGVzX25vbmUgY29udHJvbHMgaWYga2h1Z2VwYWdlZCBzaG91bGQgY29sbGFwc2UgaHVnZXBhZ2VzIG92ZXJcXG5tbS9raHVnZXBhZ2VkLmMtMjUwLSAqIGFueSB1bm1hcHBlZCBwdGVzIGluIHR1cm4gcG90ZW50aWFsbHkgaW5jcmVhc2luZyB0aGUgbWVtb3J5XFxubW0va2h1Z2VwYWdlZC5jOjI1MTogKiBmb290cHJpbnQgb2YgdGhlIHZtYXMuIFdoZW4gbWF4X3B0ZXNfbm9uZSBpcyAwIGtodWdlcGFnZWQgd2lsbCBub3RcXG5tbS9raHVnZXBhZ2VkLmMtMjUyLSAqIHJlZHVjZSB0aGUgYXZhaWxhYmxlIGZyZWUgbWVtb3J5IGluIHRoZSBzeXN0ZW0gYXMgaXRcXG5tbS9raHVnZXBhZ2VkLmMtMjUzLSAqIHJ1bnMuIEluY3JlYXNpbmcgbWF4X3B0ZXNfbm9uZSB3aWxsIGluc3RlYWQgcG90ZW50aWFsbHkgcmVkdWNlIHRoZVxcbm1tL2todWdlcGFnZWQuYzoyNTQ6ICogZnJlZSBtZW1vcnkgaW4gdGhlIHN5c3RlbSBkdXJpbmcgdGhlIGtodWdlcGFnZWQgc2Nhbi5cXG5tbS9raHVnZXBhZ2VkLmMtMjU1LSAqL1xcbm1tL2todWdlcGFnZWQuYz0yNTY9c3RhdGljIHNzaXplX3QgbWF4X3B0ZXNfbm9uZV9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTI1OS17XFxubW0va2h1Z2VwYWdlZC5jOjI2MDpcXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFxcXCIldVxcXFxuXFxcIiwga2h1Z2VwYWdlZF9tYXhfcHRlc19ub25lKTtcXG5tbS9raHVnZXBhZ2VkLmMtMjYxLX1cXG5tbS9raHVnZXBhZ2VkLmM9MjYyPXN0YXRpYyBzc2l6ZV90IG1heF9wdGVzX25vbmVfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMjcyLVxcbm1tL2todWdlcGFnZWQuYzoyNzM6XFx0a2h1Z2VwYWdlZF9tYXhfcHRlc19ub25lID0gbWF4X3B0ZXNfbm9uZTtcXG5tbS9raHVnZXBhZ2VkLmMtMjc0LVxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTI3Ni19XFxubW0va2h1Z2VwYWdlZC5jOjI3NzpzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGtodWdlcGFnZWRfbWF4X3B0ZXNfbm9uZV9hdHRyID1cXG5tbS9raHVnZXBhZ2VkLmMtMjc4LVxcdF9fQVRUUl9SVyhtYXhfcHRlc19ub25lKTtcXG4tLVxcbm1tL2todWdlcGFnZWQuYz0yODA9c3RhdGljIHNzaXplX3QgbWF4X3B0ZXNfc3dhcF9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTI4My17XFxubW0va2h1Z2VwYWdlZC5jOjI4NDpcXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFxcXCIldVxcXFxuXFxcIiwga2h1Z2VwYWdlZF9tYXhfcHRlc19zd2FwKTtcXG5tbS9raHVnZXBhZ2VkLmMtMjg1LX1cXG4tLVxcbm1tL2todWdlcGFnZWQuYz0yODc9c3RhdGljIHNzaXplX3QgbWF4X3B0ZXNfc3dhcF9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0yOTctXFxubW0va2h1Z2VwYWdlZC5jOjI5ODpcXHRraHVnZXBhZ2VkX21heF9wdGVzX3N3YXAgPSBtYXhfcHRlc19zd2FwO1xcbm1tL2todWdlcGFnZWQuYy0yOTktXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMzAyLVxcbm1tL2todWdlcGFnZWQuYzozMDM6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBraHVnZXBhZ2VkX21heF9wdGVzX3N3YXBfYXR0ciA9XFxubW0va2h1Z2VwYWdlZC5jLTMwNC1cXHRfX0FUVFJfUlcobWF4X3B0ZXNfc3dhcCk7XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmM9MzA2PXN0YXRpYyBzc2l6ZV90IG1heF9wdGVzX3NoYXJlZF9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTMwOS17XFxubW0va2h1Z2VwYWdlZC5jOjMxMDpcXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFxcXCIldVxcXFxuXFxcIiwga2h1Z2VwYWdlZF9tYXhfcHRlc19zaGFyZWQpO1xcbm1tL2todWdlcGFnZWQuYy0zMTEtfVxcbi0tXFxubW0va2h1Z2VwYWdlZC5jPTMxMz1zdGF0aWMgc3NpemVfdCBtYXhfcHRlc19zaGFyZWRfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMzIzLVxcbm1tL2todWdlcGFnZWQuYzozMjQ6XFx0a2h1Z2VwYWdlZF9tYXhfcHRlc19zaGFyZWQgPSBtYXhfcHRlc19zaGFyZWQ7XFxubW0va2h1Z2VwYWdlZC5jLTMyNS1cXG4tLVxcbm1tL2todWdlcGFnZWQuYy0zMjgtXFxubW0va2h1Z2VwYWdlZC5jOjMyOTpzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGtodWdlcGFnZWRfbWF4X3B0ZXNfc2hhcmVkX2F0dHIgPVxcbm1tL2todWdlcGFnZWQuYy0zMzAtXFx0X19BVFRSX1JXKG1heF9wdGVzX3NoYXJlZCk7XFxubW0va2h1Z2VwYWdlZC5jLTMzMS1cXG5tbS9raHVnZXBhZ2VkLmM6MzMyOnN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpraHVnZXBhZ2VkX2F0dHJbXSA9IHtcXG5tbS9raHVnZXBhZ2VkLmM6MzMzOlxcdFxcdTAwMjZraHVnZXBhZ2VkX2RlZnJhZ19hdHRyLmF0dHIsXFxubW0va2h1Z2VwYWdlZC5jOjMzNDpcXHRcXHUwMDI2a2h1Z2VwYWdlZF9tYXhfcHRlc19ub25lX2F0dHIuYXR0cixcXG5tbS9raHVnZXBhZ2VkLmM6MzM1OlxcdFxcdTAwMjZraHVnZXBhZ2VkX21heF9wdGVzX3N3YXBfYXR0ci5hdHRyLFxcbm1tL2todWdlcGFnZWQuYzozMzY6XFx0XFx1MDAyNmtodWdlcGFnZWRfbWF4X3B0ZXNfc2hhcmVkX2F0dHIuYXR0cixcXG5tbS9raHVnZXBhZ2VkLmMtMzM3LVxcdFxcdTAwMjZwYWdlc190b19zY2FuX2F0dHIuYXR0cixcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0zNDQtXFxubW0va2h1Z2VwYWdlZC5jOjM0NTpzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGtodWdlcGFnZWRfYXR0cl9ncm91cCA9IHtcXG5tbS9raHVnZXBhZ2VkLmM6MzQ2OlxcdC5hdHRycyA9IGtodWdlcGFnZWRfYXR0cixcXG5tbS9raHVnZXBhZ2VkLmM6MzQ3OlxcdC5uYW1lID0gXFxcImtodWdlcGFnZWRcXFwiLFxcbm1tL2todWdlcGFnZWQuYy0zNDgtfTtcXG4tLVxcbm1tL2todWdlcGFnZWQuYz0zNjc9c3RhdGljIHVuc2lnbmVkIGludCBjb2xsYXBzZV9tYXhfcHRlc19ub25lKHN0cnVjdCBjb2xsYXBzZV9jb250cm9sICpjYyxcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0zNjkte1xcbm1tL2todWdlcGFnZWQuYzozNzA6XFx0Y29uc3QgdW5zaWduZWQgaW50IG1heF9wdGVzX25vbmUgPSBraHVnZXBhZ2VkX21heF9wdGVzX25vbmU7XFxubW0va2h1Z2VwYWdlZC5jLTM3MS1cXG4tLVxcbm1tL2todWdlcGFnZWQuYy0zNzQtXFx0LyogZm9yIE1BRFZfQ09MTEFQU0UsIGFsbG93IGFueSBlbXB0eS9zaGFyZWQgemVyb3BhZ2UgUFRFcyAqL1xcbm1tL2todWdlcGFnZWQuYzozNzU6XFx0aWYgKCFjYy1cXHUwMDNlaXNfa2h1Z2VwYWdlZClcXG5tbS9raHVnZXBhZ2VkLmMtMzc2LVxcdFxcdHJldHVybiBIUEFHRV9QTURfTlI7XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmM9NDA2PXN0YXRpYyB1bnNpZ25lZCBpbnQgY29sbGFwc2VfbWF4X3B0ZXNfc2hhcmVkKHN0cnVjdCBjb2xsYXBzZV9jb250cm9sICpjYyxcXG4tLVxcbm1tL2todWdlcGFnZWQuYy00MTItXFx0ICovXFxubW0va2h1Z2VwYWdlZC5jOjQxMzpcXHRpZiAoIWNjLVxcdTAwM2Vpc19raHVnZXBhZ2VkKVxcbm1tL2todWdlcGFnZWQuYy00MTQtXFx0XFx0cmV0dXJuIEhQQUdFX1BNRF9OUjtcXG4tLVxcbm1tL2todWdlcGFnZWQuYy00MjEtXFx0LyogZm9yIFBNRCBjb2xsYXBzZSwgcmVzcGVjdCB0aGUgdXNlciBkZWZpbmVkIG1heGltdW0gKi9cXG5tbS9raHVnZXBhZ2VkLmM6NDIyOlxcdHJldHVybiBraHVnZXBhZ2VkX21heF9wdGVzX3NoYXJlZDtcXG5tbS9raHVnZXBhZ2VkLmMtNDIzLX1cXG4tLVxcbm1tL2todWdlcGFnZWQuYz00MzQ9c3RhdGljIHVuc2lnbmVkIGludCBjb2xsYXBzZV9tYXhfcHRlc19zd2FwKHN0cnVjdCBjb2xsYXBzZV9jb250cm9sICpjYyxcXG4tLVxcbm1tL2todWdlcGFnZWQuYy00NDAtXFx0ICovXFxubW0va2h1Z2VwYWdlZC5jOjQ0MTpcXHRpZiAoIWNjLVxcdTAwM2Vpc19raHVnZXBhZ2VkKVxcbm1tL2todWdlcGFnZWQuYy00NDItXFx0XFx0cmV0dXJuIEhQQUdFX1BNRF9OUjtcXG4tLVxcbm1tL2todWdlcGFnZWQuYy00NDYtXFx0LyogZm9yIFBNRCBjb2xsYXBzZSwgcmVzcGVjdCB0aGUgdXNlciBkZWZpbmVkIG1heGltdW0gKi9cXG5tbS9raHVnZXBhZ2VkLmM6NDQ3OlxcdHJldHVybiBraHVnZXBhZ2VkX21heF9wdGVzX3N3YXA7XFxubW0va2h1Z2VwYWdlZC5jLTQ0OC19XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmM9NDUwPWludCBodWdlcGFnZV9tYWR2aXNlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTQ2MS1cXHRcXHQvKlxcbm1tL2todWdlcGFnZWQuYzo0NjI6XFx0XFx0ICogU2V0dGluZyBWTV9OT0hVR0VQQUdFIHdpbGwgcHJldmVudCBraHVnZXBhZ2VkIGZyb20gc2Nhbm5pbmdcXG5tbS9raHVnZXBhZ2VkLmM6NDYzOlxcdFxcdCAqIHRoaXMgdm1hIGV2ZW4gaWYgd2UgbGVhdmUgdGhlIG1tIHJlZ2lzdGVyZWQgaW4ga2h1Z2VwYWdlZCBpZlxcbm1tL2todWdlcGFnZWQuYy00NjQtXFx0XFx0ICogaXQgZ290IHJlZ2lzdGVyZWQgYmVmb3JlIFZNX05PSFVHRVBBR0Ugd2FzIHNldC5cXG4tLVxcbm1tL2todWdlcGFnZWQuYy00NzEtXFxubW0va2h1Z2VwYWdlZC5jOjQ3MjppbnQgX19pbml0IGtodWdlcGFnZWRfaW5pdCh2b2lkKVxcbm1tL2todWdlcGFnZWQuYy00NzMte1xcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTQ3Ny1cXG5tbS9raHVnZXBhZ2VkLmM6NDc4OlxcdGtodWdlcGFnZWRfcGFnZXNfdG9fc2NhbiA9IEhQQUdFX1BNRF9OUiAqIDg7XFxubW0va2h1Z2VwYWdlZC5jOjQ3OTpcXHRraHVnZXBhZ2VkX21heF9wdGVzX25vbmUgPSBLSFVHRVBBR0VEX01BWF9QVEVTX0xJTUlUO1xcbm1tL2todWdlcGFnZWQuYzo0ODA6XFx0a2h1Z2VwYWdlZF9tYXhfcHRlc19zd2FwID0gSFBBR0VfUE1EX05SIC8gODtcXG5tbS9raHVnZXBhZ2VkLmM6NDgxOlxcdGtodWdlcGFnZWRfbWF4X3B0ZXNfc2hhcmVkID0gSFBBR0VfUE1EX05SIC8gMjtcXG5tbS9raHVnZXBhZ2VkLmMtNDgyLVxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTQ4NS1cXG5tbS9raHVnZXBhZ2VkLmM6NDg2OnZvaWQgX19pbml0IGtodWdlcGFnZWRfZGVzdHJveSh2b2lkKVxcbm1tL2todWdlcGFnZWQuYy00ODcte1xcbi0tXFxubW0va2h1Z2VwYWdlZC5jPTUxND1zdGF0aWMgYm9vbCBodWdlcGFnZV9lbmFibGVkKHZvaWQpXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtNTMxLVxcbm1tL2todWdlcGFnZWQuYzo1MzI6dm9pZCBfX2todWdlcGFnZWRfZW50ZXIoc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxubW0va2h1Z2VwYWdlZC5jLTUzMy17XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtNTM2LVxcbm1tL2todWdlcGFnZWQuYzo1Mzc6XFx0LyogX19raHVnZXBhZ2VkX2V4aXQoKSBtdXN0IG5vdCBydW4gZnJvbSB1bmRlciB1cyAqL1xcbm1tL2todWdlcGFnZWQuYy01MzgtXFx0Vk1fQlVHX09OX01NKGNvbGxhcHNlX3Rlc3RfZXhpdChtbSksIG1tKTtcXG4tLVxcbm1tL2todWdlcGFnZWQuYy01NDgtXFxubW0va2h1Z2VwYWdlZC5jOjU0OTpcXHRzcGluX2xvY2soXFx1MDAyNmtodWdlcGFnZWRfbW1fbG9jayk7XFxubW0va2h1Z2VwYWdlZC5jLTU1MC1cXHRtbV9zbG90X2luc2VydChtbV9zbG90c19oYXNoLCBtbSwgc2xvdCk7XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtNTU0LVxcdCAqL1xcbm1tL2todWdlcGFnZWQuYzo1NTU6XFx0d2FrZXVwID0gbGlzdF9lbXB0eShcXHUwMDI2a2h1Z2VwYWdlZF9zY2FuLm1tX2hlYWQpO1xcbm1tL2todWdlcGFnZWQuYzo1NTY6XFx0bGlzdF9hZGRfdGFpbChcXHUwMDI2c2xvdC1cXHUwMDNlbW1fbm9kZSwgXFx1MDAyNmtodWdlcGFnZWRfc2Nhbi5tbV9oZWFkKTtcXG5tbS9raHVnZXBhZ2VkLmM6NTU3OlxcdHNwaW5fdW5sb2NrKFxcdTAwMjZraHVnZXBhZ2VkX21tX2xvY2spO1xcbm1tL2todWdlcGFnZWQuYy01NTgtXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtNTYwLVxcdGlmICh3YWtldXApXFxubW0va2h1Z2VwYWdlZC5jOjU2MTpcXHRcXHR3YWtlX3VwX2ludGVycnVwdGlibGUoXFx1MDAyNmtodWdlcGFnZWRfd2FpdCk7XFxubW0va2h1Z2VwYWdlZC5jLTU2Mi19XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmM9NTY4PXN0YXRpYyB1bnNpZ25lZCBsb25nIGNvbGxhcHNlX3Bvc3NpYmxlX29yZGVycyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL2todWdlcGFnZWQuYy01NzItXFxubW0va2h1Z2VwYWdlZC5jOjU3MzpcXHQvKiBJZiBraHVnZXBhZ2VkIGlzIHNjYW5uaW5nIGFuIGFub255bW91cyB2bWEsIGFsbG93IG1USFAgY29sbGFwc2UgKi9cXG5tbS9raHVnZXBhZ2VkLmMtNTc0LVxcdGlmICgodHZhX2ZsYWdzID09IFRWQV9LSFVHRVBBR0VEKSBcXHUwMDI2XFx1MDAyNiB2bWFfaXNfYW5vbnltb3VzKHZtYSkpXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmM9NTgyPXN0YXRpYyBib29sIGNvbGxhcHNlX3Bvc3NpYmxlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTU4Ny1cXG5tbS9raHVnZXBhZ2VkLmM6NTg4OnZvaWQga2h1Z2VwYWdlZF9lbnRlcl92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxubW0va2h1Z2VwYWdlZC5jLTU4OS1cXHRcXHRcXHQgIHZtX2ZsYWdzX3Qgdm1fZmxhZ3MpXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtNTkyLVxcdCAgICBcXHUwMDI2XFx1MDAyNiBjb2xsYXBzZV9wb3NzaWJsZSh2bWEsIHZtX2ZsYWdzLCBUVkFfS0hVR0VQQUdFRCkpXFxubW0va2h1Z2VwYWdlZC5jOjU5MzpcXHRcXHRfX2todWdlcGFnZWRfZW50ZXIodm1hLVxcdTAwM2V2bV9tbSk7XFxubW0va2h1Z2VwYWdlZC5jLTU5NC19XFxubW0va2h1Z2VwYWdlZC5jLTU5NS1cXG5tbS9raHVnZXBhZ2VkLmM6NTk2OnZvaWQgX19raHVnZXBhZ2VkX2V4aXQoc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxubW0va2h1Z2VwYWdlZC5jLTU5Ny17XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtNjAwLVxcbm1tL2todWdlcGFnZWQuYzo2MDE6XFx0c3Bpbl9sb2NrKFxcdTAwMjZraHVnZXBhZ2VkX21tX2xvY2spO1xcbm1tL2todWdlcGFnZWQuYy02MDItXFx0c2xvdCA9IG1tX3Nsb3RfbG9va3VwKG1tX3Nsb3RzX2hhc2gsIG1tKTtcXG5tbS9raHVnZXBhZ2VkLmM6NjAzOlxcdGlmIChzbG90IFxcdTAwMjZcXHUwMDI2IGtodWdlcGFnZWRfc2Nhbi5tbV9zbG90ICE9IHNsb3QpIHtcXG5tbS9raHVnZXBhZ2VkLmMtNjA0LVxcdFxcdG1tX3Nsb3RfcmVtb3ZlKHNsb3QpO1xcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTYwNi1cXHR9XFxubW0va2h1Z2VwYWdlZC5jOjYwNzpcXHRzcGluX3VubG9jayhcXHUwMDI2a2h1Z2VwYWdlZF9tbV9sb2NrKTtcXG5tbS9raHVnZXBhZ2VkLmMtNjA4LVxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTYxNy1cXHRcXHQgKiB1bmRlciBtbWFwX2xvY2sgcmVhZCBtb2RlKS4gU3RvcCBoZXJlIChhZnRlciB3ZSByZXR1cm4gYWxsXFxubW0va2h1Z2VwYWdlZC5jOjYxODpcXHRcXHQgKiBwYWdldGFibGVzIHdpbGwgYmUgZGVzdHJveWVkKSB1bnRpbCBraHVnZXBhZ2VkIGhhcyBmaW5pc2hlZFxcbm1tL2todWdlcGFnZWQuYy02MTktXFx0XFx0ICogd29ya2luZyBvbiB0aGUgcGFnZXRhYmxlcyB1bmRlciB0aGUgbW1hcF9sb2NrLlxcbi0tXFxubW0va2h1Z2VwYWdlZC5jPTY4Nz1zdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBfX2NvbGxhcHNlX2h1Z2VfcGFnZV9pc29sYXRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTczMy1cXHRcXHQgKi9cXG5tbS9raHVnZXBhZ2VkLmM6NzM0OlxcdFxcdGlmIChjYy1cXHUwMDNlaXNfa2h1Z2VwYWdlZCBcXHUwMDI2XFx1MDAyNiAhKHZtYS1cXHUwMDNldm1fZmxhZ3MgXFx1MDAyNiBWTV9EUk9QUEFCTEUpIFxcdTAwMjZcXHUwMDI2XFxubW0va2h1Z2VwYWdlZC5jLTczNS1cXHRcXHQgICAgZm9saW9fdGVzdF9sYXp5ZnJlZShmb2xpbykgXFx1MDAyNlxcdTAwMjYgIXB0ZV9kaXJ0eShwdGV2YWwpKSB7XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtODIyLW5leHQ6XFxubW0va2h1Z2VwYWdlZC5jOjgyMzpcXHRcXHRpZiAoY2MtXFx1MDAzZWlzX2todWdlcGFnZWQgXFx1MDAyNlxcdTAwMjZcXG5tbS9raHVnZXBhZ2VkLmMtODI0LVxcdFxcdCAgICBmb2xpb19wdGVfcmVmZXJlbmNlZChmb2xpbywgdm1hLCBhZGRyLCBwdGV2YWwpKVxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTgyNy1cXG5tbS9raHVnZXBhZ2VkLmM6ODI4OlxcdGlmICh1bmxpa2VseShjYy1cXHUwMDNlaXNfa2h1Z2VwYWdlZCBcXHUwMDI2XFx1MDAyNiAhcmVmZXJlbmNlZCkpIHtcXG5tbS9raHVnZXBhZ2VkLmMtODI5LVxcdFxcdHJlc3VsdCA9IFNDQU5fTEFDS19SRUZFUkVOQ0VEX1BBR0U7XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmM9OTQ1PXN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IF9fY29sbGFwc2VfaHVnZV9wYWdlX2NvcHkocHRlX3QgKnB0ZSwgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbm1tL2todWdlcGFnZWQuYy05ODMtXFxubW0va2h1Z2VwYWdlZC5jOjk4NDpzdGF0aWMgdm9pZCBraHVnZXBhZ2VkX2FsbG9jX3NsZWVwKHZvaWQpXFxubW0va2h1Z2VwYWdlZC5jLTk4NS17XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtOTg3LVxcbm1tL2todWdlcGFnZWQuYzo5ODg6XFx0YWRkX3dhaXRfcXVldWUoXFx1MDAyNmtodWdlcGFnZWRfd2FpdCwgXFx1MDAyNndhaXQpO1xcbm1tL2todWdlcGFnZWQuYy05ODktXFx0X19zZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEV8VEFTS19GUkVFWkFCTEUpO1xcbm1tL2todWdlcGFnZWQuYzo5OTA6XFx0c2NoZWR1bGVfdGltZW91dChtc2Vjc190b19qaWZmaWVzKGtodWdlcGFnZWRfYWxsb2Nfc2xlZXBfbWlsbGlzZWNzKSk7XFxubW0va2h1Z2VwYWdlZC5jOjk5MTpcXHRyZW1vdmVfd2FpdF9xdWV1ZShcXHUwMDI2a2h1Z2VwYWdlZF93YWl0LCBcXHUwMDI2d2FpdCk7XFxubW0va2h1Z2VwYWdlZC5jLTk5Mi19XFxubW0va2h1Z2VwYWdlZC5jLTk5My1cXG5tbS9raHVnZXBhZ2VkLmM6OTk0OnN0YXRpYyBzdHJ1Y3QgY29sbGFwc2VfY29udHJvbCBraHVnZXBhZ2VkX2NvbGxhcHNlX2NvbnRyb2wgPSB7XFxubW0va2h1Z2VwYWdlZC5jOjk5NTpcXHQuaXNfa2h1Z2VwYWdlZCA9IHRydWUsXFxubW0va2h1Z2VwYWdlZC5jLTk5Ni19O1xcbi0tXFxubW0va2h1Z2VwYWdlZC5jPTk5OD1zdGF0aWMgYm9vbCBjb2xsYXBzZV9zY2FuX2Fib3J0KGludCBuaWQsIHN0cnVjdCBjb2xsYXBzZV9jb250cm9sICpjYylcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0xMDIxLVxcbm1tL2todWdlcGFnZWQuYzoxMDIyOiNkZWZpbmUga2h1Z2VwYWdlZF9kZWZyYWcoKVxcdFxcdFxcdFxcdFxcdFxcXFxcXG5tbS9raHVnZXBhZ2VkLmMtMTAyMy1cXHQodHJhbnNwYXJlbnRfaHVnZXBhZ2VfZmxhZ3MgXFx1MDAyNlxcdFxcdFxcdFxcdFxcXFxcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0xMDI1LVxcbm1tL2todWdlcGFnZWQuYzoxMDI2Oi8qIERlZnJhZyBmb3Iga2h1Z2VwYWdlZCB3aWxsIGVudGVyIGRpcmVjdCByZWNsYWltL2NvbXBhY3Rpb24gaWYgbmVjZXNzYXJ5ICovXFxubW0va2h1Z2VwYWdlZC5jOjEwMjc6c3RhdGljIGlubGluZSBnZnBfdCBhbGxvY19odWdlcGFnZV9raHVnZXBhZ2VkX2dmcG1hc2sodm9pZClcXG5tbS9raHVnZXBhZ2VkLmMtMTAyOC17XFxubW0va2h1Z2VwYWdlZC5jOjEwMjk6XFx0cmV0dXJuIGtodWdlcGFnZWRfZGVmcmFnKCkgPyBHRlBfVFJBTlNIVUdFIDogR0ZQX1RSQU5TSFVHRV9MSUdIVDtcXG5tbS9raHVnZXBhZ2VkLmMtMTAzMC19XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmM9MTA2ND1zdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBodWdlcGFnZV92bWFfcmV2YWxpZGF0ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTEwNjgtXFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7XFxubW0va2h1Z2VwYWdlZC5jOjEwNjk6XFx0ZW51bSB0dmFfdHlwZSB0eXBlID0gY2MtXFx1MDAzZWlzX2todWdlcGFnZWQgPyBUVkFfS0hVR0VQQUdFRCA6XFxubW0va2h1Z2VwYWdlZC5jLTEwNzAtXFx0XFx0XFx0XFx0IFRWQV9GT1JDRURfQ09MTEFQU0U7XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMTA5MS1cXHQgKiBBbm9uIFZNQSBleHBlY3RlZCwgdGhlIGFkZHJlc3MgbWF5IGJlIHVubWFwcGVkIHRoZW5cXG5tbS9raHVnZXBhZ2VkLmM6MTA5MjpcXHQgKiByZW1hcHBlZCB0byBmaWxlIGFmdGVyIGtodWdlcGFnZWQgcmVhY3F1aXJlZCB0aGUgbW1hcF9sb2NrLlxcbm1tL2todWdlcGFnZWQuYy0xMDkzLVxcdCAqXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmM9MTEwMj1zdGF0aWMgaW5saW5lIGVudW0gc2Nhbl9yZXN1bHQgY2hlY2tfcG1kX3N0YXRlKHBtZF90ICpwbWQpXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMTEwOS1cXHQvKlxcbm1tL2todWdlcGFnZWQuYzoxMTEwOlxcdCAqIFRoZSBmb2xpbyBtYXkgYmUgdW5kZXIgbWlncmF0aW9uIHdoZW4ga2h1Z2VwYWdlZCBpcyB0cnlpbmcgdG9cXG5tbS9raHVnZXBhZ2VkLmMtMTExMS1cXHQgKiBjb2xsYXBzZSBpdC4gTWlncmF0aW9uIHN1Y2Nlc3Mgb3IgZmFpbHVyZSB3aWxsIGV2ZW50dWFsbHkgZW5kXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmM9MTI1MD1zdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBhbGxvY19jaGFyZ2VfZm9saW8oc3RydWN0IGZvbGlvICoqZm9saW9wLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0xMjUyLXtcXG5tbS9raHVnZXBhZ2VkLmM6MTI1MzpcXHRnZnBfdCBnZnAgPSAoY2MtXFx1MDAzZWlzX2todWdlcGFnZWQgPyBhbGxvY19odWdlcGFnZV9raHVnZXBhZ2VkX2dmcG1hc2soKSA6XFxubW0va2h1Z2VwYWdlZC5jLTEyNTQtXFx0XFx0ICAgICBHRlBfVFJBTlNIVUdFKTtcXG4tLVxcbm1tL2todWdlcGFnZWQuYz0xNjAwPXN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGNvbGxhcHNlX3NjYW5fcG1kKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTE2MDYtXFx0dW5zaWduZWQgaW50IG1heF9wdGVzX25vbmUgPSBjb2xsYXBzZV9tYXhfcHRlc19ub25lKGNjLCB2bWEsIEhQQUdFX1BNRF9PUkRFUik7XFxubW0va2h1Z2VwYWdlZC5jOjE2MDc6XFx0ZW51bSB0dmFfdHlwZSB0dmFfZmxhZ3MgPSBjYy1cXHUwMDNlaXNfa2h1Z2VwYWdlZCA/IFRWQV9LSFVHRVBBR0VEIDogVFZBX0ZPUkNFRF9DT0xMQVBTRTtcXG5tbS9raHVnZXBhZ2VkLmMtMTYwOC1cXHRwbWRfdCAqcG1kO1xcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTE3MDUtXFx0XFx0ICovXFxubW0va2h1Z2VwYWdlZC5jOjE3MDY6XFx0XFx0aWYgKGNjLVxcdTAwM2Vpc19raHVnZXBhZ2VkIFxcdTAwMjZcXHUwMDI2ICEodm1hLVxcdTAwM2V2bV9mbGFncyBcXHUwMDI2IFZNX0RST1BQQUJMRSkgXFx1MDAyNlxcdTAwMjZcXG5tbS9raHVnZXBhZ2VkLmMtMTcwNy1cXHRcXHQgICAgZm9saW9fdGVzdF9sYXp5ZnJlZShmb2xpbykgXFx1MDAyNlxcdTAwMjYgIXB0ZV9kaXJ0eShwdGV2YWwpKSB7XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMTc2NC1cXG5tbS9raHVnZXBhZ2VkLmM6MTc2NTpcXHRcXHRpZiAoY2MtXFx1MDAzZWlzX2todWdlcGFnZWQgXFx1MDAyNlxcdTAwMjZcXG5tbS9raHVnZXBhZ2VkLmMtMTc2Ni1cXHRcXHQgICAgZm9saW9fcHRlX3JlZmVyZW5jZWQoZm9saW8sIHZtYSwgYWRkciwgcHRldmFsKSlcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0xNzY4LVxcdH1cXG5tbS9raHVnZXBhZ2VkLmM6MTc2OTpcXHRpZiAoY2MtXFx1MDAzZWlzX2todWdlcGFnZWQgXFx1MDAyNlxcdTAwMjZcXG5tbS9raHVnZXBhZ2VkLmMtMTc3MC1cXHRcXHQgICAoIXJlZmVyZW5jZWQgfHxcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0xNzg2LW91dDpcXG5tbS9raHVnZXBhZ2VkLmM6MTc4NzpcXHR0cmFjZV9tbV9raHVnZXBhZ2VkX3NjYW5fcG1kKG1tLCBmb2xpbywgcmVmZXJlbmNlZCxcXG5tbS9raHVnZXBhZ2VkLmMtMTc4OC1cXHRcXHRcXHRcXHQgICAgIG5vbmVfb3JfemVybywgcmVzdWx0LCB1bm1hcHBlZCk7XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmM9MTc5Mj1zdGF0aWMgdm9pZCBjb2xsZWN0X21tX3Nsb3Qoc3RydWN0IG1tX3Nsb3QgKnNsb3QpXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMTc5NS1cXG5tbS9raHVnZXBhZ2VkLmM6MTc5NjpcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZraHVnZXBhZ2VkX21tX2xvY2spO1xcbm1tL2todWdlcGFnZWQuYy0xNzk3LVxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTE4MDctXFxubW0va2h1Z2VwYWdlZC5jOjE4MDg6XFx0XFx0Lyoga2h1Z2VwYWdlZF9tbV9sb2NrIGFjdHVhbGx5IG5vdCBuZWNlc3NhcnkgZm9yIHRoZSBiZWxvdyAqL1xcbm1tL2todWdlcGFnZWQuYy0xODA5LVxcdFxcdG1tX3Nsb3RfZnJlZShtbV9zbG90X2NhY2hlLCBzbG90KTtcXG4tLVxcbm1tL2todWdlcGFnZWQuYz0yMjQ5PXN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGNvbGxhcHNlX2ZpbGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0yMzU3LVxcdFxcdFxcdFxcdCAqIFRyaWdnZXIgYXN5bmMgZmx1c2ggZm9yIHJlYWQtb25seSBmaWxlcyBhbmRcXG5tbS9raHVnZXBhZ2VkLmM6MjM1ODpcXHRcXHRcXHRcXHQgKiBob3BlIHRoZSB3cml0ZWJhY2sgaXMgZG9uZSB3aGVuIGtodWdlcGFnZWRcXG5tbS9raHVnZXBhZ2VkLmMtMjM1OS1cXHRcXHRcXHRcXHQgKiByZXZpc2l0cyB0aGlzIHBhZ2UuIFdyaXRhYmxlIGZpbGVzIGNhbiBoYXZlXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMjQxNC1cXHRcXHRcXHQvKlxcblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwMjo0ODozOC4xODM5OTM5M1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNDk1Nzg3NTEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgdGhlIFRyYW5zcGFyZW50IEh1Z2VwYWdlIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGhvdyB0cmFuc3BhcmVudCBodWdlcGFnZXMgYXJlIGhhbmRsZWQsIHN0YXJ0aW5nIHdpdGggYGtodWdlcGFnZWQuY2AuIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCB0aGUgcHJlc2VuY2Ugb2YgdGhhdCBmaWxlIGluIHRoZSBjb21waWxhdGlvbiBwcm9jZXNzIGlzIGRpcmVjdGx5IHRpZWQgdG8gdGhlIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbi4gTWFrZXMgc2Vuc2UuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHVzZXJmYXVsdGZkIHBsYXlzIGEgcGFydCBpbiB0aGlzLiBJJ20gZ29pbmcgdG8gbG9vayBhdCBgdXNlcmZhdWx0ZmRfbWlub3JgIGFuZCB0aGUgYFVTRVJGQVVMVEZEYCBjb25zdGFudC4gSSdsbCBuZWVkIHRvIGxvY2F0ZSB3aGVyZSBgdXNlcmZhdWx0ZmRfbWlub3JgIGlzIGRlZmluZWQuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGhhbmRsZSBvbiB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBodWdlcGFnZXMgYW5kIHVzZXJmYXVsdCBoYW5kbGluZywgd2hpY2ggSSdtIHN1cmUgd2lsbCBpbmZvcm0gdGhlIHJlc3Qgb2YgbXkgaW52ZXN0aWdhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjEzNTUsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwMjo0ODo0MS42Nzk3ODM0ODNaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExODU0NTU5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1c2VyZmF1bHRmZF9taW5vclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaD0yMTI9c3RhdGljIGlubGluZSBib29sIHVzZXJmYXVsdGZkX3dwKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbi0tXFxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmgtMjE2LVxcbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oOjIxNzpzdGF0aWMgaW5saW5lIGJvb2wgdXNlcmZhdWx0ZmRfbWlub3Ioc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmgtMjE4LXtcXG4tLVxcbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oPTM2MT1zdGF0aWMgaW5saW5lIGJvb2wgdXNlcmZhdWx0ZmRfd3Aoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaC0zNjUtXFxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmg6MzY2OnN0YXRpYyBpbmxpbmUgYm9vbCB1c2VyZmF1bHRmZF9taW5vcihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaC0zNjcte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwMjo0ODo0MS43OTgzMzM1NjFaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTAzNTY4Mjg1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyBVc2VyZmF1bHRmZCBLZXJuZWwgSGVhZGVyKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIGRpdmUgaW50byBzb21lIGB1c2VyZmF1bHRmZGAgY29kZS4gQmFzZWQgb24gdGhlIHByb2JsZW0gZGVzY3JpcHRpb24sIEknbSB0aGlua2luZyB0aGUgaXNzdWUgbWlnaHQgYmUgcmVsYXRlZCB0byB0aGUgY29yZSBoYW5kbGluZyBvZiB1c2VyZmF1bHRmZCB3aXRoaW4gdGhlIGtlcm5lbC4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IHRha2luZyBhIGxvb2sgYXQgYGluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oYC4gSXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGludGVybmFsIGRhdGEgc3RydWN0dXJlcyBhbmQgZnVuY3Rpb25zLiBJJ2xsIGZvY3VzIG15IGF0dGVudGlvbiBhcm91bmQgbGluZSAyMTcgaW5pdGlhbGx5LCBhcyB0aGF0J3Mgb2Z0ZW4gd2hlcmUga2V5IGRlZmluaXRpb25zIG9yIHN0cnVjdHVyZXMgcmVsYXRlZCB0byBmYXVsdCBoYW5kbGluZyByZXNpZGUuIFRoZW4sIEknbGwganVtcCBkb3duIHRvIGxpbmUgMzY2LiBJJ20gaG9waW5nIHRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiBob3cgdGhlIGtlcm5lbCBtYW5hZ2VzIGFuZCBwcm9jZXNzZXMgdGhlc2UgdXNlci1zcGFjZSBmYXVsdHMgZnJvbSB0aG9zZSB0d28gbG9jYXRpb25zIHNwZWNpZmljYWxseS4gVGhhdCBzaG91bGQgcHJvdmlkZSBhIHVzZWZ1bCBmb3VuZGF0aW9uIHRvIGludmVzdGlnYXRlIGZ1cnRoZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxODM2LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDI6NDg6NDYuODM0MDE5MDk4WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc3NjMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIxMCxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDIxMDpcXHR9XFxuIDIxMTpcXHRcXG4gMjEyOlxcdHN0YXRpYyBpbmxpbmUgYm9vbCB1c2VyZmF1bHRmZF93cChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4gMjEzOlxcdHtcXG4gMjE0OlxcdFxcdHJldHVybiB2bWFfdGVzdF9hbnlfbWFzayh2bWEsIFZNQV9VRkZEX1dQKTtcXG4gMjE1OlxcdH1cXG4gMjE2OlxcdFxcbiAyMTc6XFx0c3RhdGljIGlubGluZSBib29sIHVzZXJmYXVsdGZkX21pbm9yKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbiAyMTg6XFx0e1xcbiAyMTk6XFx0XFx0cmV0dXJuIHZtYV90ZXN0X2FueV9tYXNrKHZtYSwgVk1BX1VGRkRfTUlOT1IpO1xcbiAyMjA6XFx0fVxcbiAyMjE6XFx0XFxuIDIyMjpcXHRzdGF0aWMgaW5saW5lIGJvb2wgdXNlcmZhdWx0ZmRfcndwKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbiAyMjM6XFx0e1xcbiAyMjQ6XFx0XFx0LypcXG4gMjI1OlxcdFxcdCAqIENhbGxlcnMgZ2F0ZSBQQUdFX05PTkUgdXNhZ2Ugb24gdGhpczsgUEFHRV9OT05FIGlzIGEgQlVJTERfQlVHKClcXG4gMjI2OlxcdFxcdCAqIHdpdGhvdXQgQ09ORklHX0FSQ0hfSEFTX1BURV9QUk9UTk9ORSwgc28gZm9sZCB0byBmYWxzZS5cXG4gMjI3OlxcdFxcdCAqL1xcbiAyMjg6XFx0XFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19BUkNIX0hBU19QVEVfUFJPVE5PTkUpKVxcbiAyMjk6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiAyMzA6XFx0XFx0cmV0dXJuIHZtYV90ZXN0X3NpbmdsZV9tYXNrKHZtYSwgVk1BX1VGRkRfUldQKTtcXG4gMjMxOlxcdH1cXG4gMjMyOlxcdFxcbiAyMzM6XFx0c3RhdGljIGlubGluZSBib29sIHVzZXJmYXVsdGZkX3Byb3RlY3RlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4gMjM0OlxcdHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDI6NDg6NDYuODM0MTAwMDg4WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0ODY5MTQ1MTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHJlbGF0ZXMgdG8gY2hlY2tpbmcga2VybmVsIGNvbmZpZ3VyYXRpb25zOlxuXG4qKktlcm5lbCBDb25maWd1cmF0aW9uIEludmVzdGlnYXRpb24qKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGRlbHZlIGludG8gdGhlIEtjb25maWcgZmlsZXMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGV4YWN0bHkgaG93IGB1c2VyZmF1bHRmZGAgYW5kIGB0cmFuc3BhcmVudF9odWdlcGFnZWAgYXJlIGJlaW5nIGVuYWJsZWQgaW4gdGhlIGtlcm5lbC4gTGV0J3Mgc2VlLi4uIHRoZSBtb3N0IGRpcmVjdCByb3V0ZSBpcyB0byBsb29rIGZvciB0aGUgcmVsZXZhbnQgS2NvbmZpZyBvcHRpb25zLiBTbywgdGhhdCBtZWFucyBjaGVja2luZyBmb3IgYENPTkZJR19VU0VSRkFVTFRGRGAgYW5kIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgLiBXaGVyZSBhcmUgdGhlc2Ugb3B0aW9ucyBkZWZpbmVkPyBNeSB1c3VhbCBzdGFydGluZyBwb2ludCBmb3IgbWVtb3J5IG1hbmFnZW1lbnQgcmVsYXRlZCBmZWF0dXJlcyB3b3VsZCBiZSBlaXRoZXIgYGluaXQvS2NvbmZpZ2Agb3IgYG1tL0tjb25maWdgLiBJJ2xsIHN0YXJ0IHRoZXJlLiBUaGF0J3Mgd2hlcmUgSSB3b3VsZCBleHBlY3QgdG8gZmluZCB0aGUgZGVwZW5kZW5jaWVzIGFuZCB0aGUgbG9naWMgYmVoaW5kIHRoZXNlIHNldHRpbmdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjQ5NywiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjczLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDI6NDg6NDkuMzIxMDE2NTlaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NzE5MDk4NzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFVTRVJGQVVMVEZEXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9MTM3Mj1jb25maWcgSEFWRV9BUkNIX1VTRVJGQVVMVEZEX01JTk9SXFxuLS1cXG5tbS9LY29uZmlnLTEzNzYtXFxubW0vS2NvbmZpZzoxMzc3OmNvbmZpZyBVU0VSRkFVTFRGRF9SV1BcXG5tbS9LY29uZmlnLTEzNzgtXFx0ZGVmX2Jvb2wgeVxcbi0tXFxubW0vS2NvbmZpZy0xMzg1LVxcbm1tL0tjb25maWc6MTM4NjptZW51Y29uZmlnIFVTRVJGQVVMVEZEXFxubW0vS2NvbmZpZy0xMzg3LVxcdGJvb2wgXFxcIkVuYWJsZSB1c2VyZmF1bHRmZCgpIHN5c3RlbSBjYWxsXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwMjo0ODo1MC45OTI5MzE1OTRaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzQ2NzQzNDM1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIGZvciBNZW1vcnkgTWFuYWdlbWVudCoqXG5cbk9rYXksIHRpbWUgdG8gdHJvdWJsZXNob290IHRoaXMgbWVtb3J5LXJlbGF0ZWQgaXNzdWUuIE15IGd1dCB0ZWxscyBtZSB0aGVyZSBtaWdodCBiZSBhIHByb2JsZW0gd2l0aCBob3cgc29tZXRoaW5nIGlzIGNvbmZpZ3VyZWQgaW4gdGhlIGtlcm5lbC4gTGV0J3Mgc3RhcnQgd2l0aCBhIGZvY3VzZWQgaW52ZXN0aWdhdGlvbi4gSSdtIGdvaW5nIHRvIGp1bXAgc3RyYWlnaHQgaW50byB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlciDigJMgdGhlIGBtbS9LY29uZmlnYCBmaWxlLiBJJ20gcHJldHR5IHN1cmUgdGhhdCBhcmVhIGhvdXNlcyB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLCBhbmQgZ2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGUgcHJvYmxlbSwgaXQncyB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludC4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgdGhlIHJlbGV2YW50IG9wdGlvbnMsIG9yIHRoZWlyIGludGVyYWN0aW9ucywgbWlnaHQgYmUgbG9jYXRlZCBhcm91bmQgbGluZSBudW1iZXJzIDEzNzAgdG8gMTQwMC4gVGhhdCByYW5nZSB1c3VhbGx5IGNvdmVycyBzb21lIGtleSBmbGFncyBhbmQgc2V0dGluZ3MgdGhhdCBJJ3ZlIHNlZW4gYmUgcmVsZXZhbnQgaW4gc2ltaWxhciBzaXR1YXRpb25zLiBMZXQncyBzZWUgd2hhdCdzIGluIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjg5MSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDAyOjQ4OjU4LjQ2MDM2OTkyWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMjUyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEzNzAsXG4gIFwiTGluZUNvdW50XCI6IDM1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEzNzA6XFx0XFx0ICBBcmNoIGhhcyB1c2VyZmF1bHRmZCB3cml0ZSBwcm90ZWN0aW9uIHN1cHBvcnRcXG4xMzcxOlxcdFxcbjEzNzI6XFx0Y29uZmlnIEhBVkVfQVJDSF9VU0VSRkFVTFRGRF9NSU5PUlxcbjEzNzM6XFx0XFx0Ym9vbFxcbjEzNzQ6XFx0XFx0aGVscFxcbjEzNzU6XFx0XFx0ICBBcmNoIGhhcyB1c2VyZmF1bHRmZCBtaW5vciBmYXVsdCBzdXBwb3J0XFxuMTM3NjpcXHRcXG4xMzc3OlxcdGNvbmZpZyBVU0VSRkFVTFRGRF9SV1BcXG4xMzc4OlxcdFxcdGRlZl9ib29sIHlcXG4xMzc5OlxcdFxcdGRlcGVuZHMgb24gNjRCSVQgXFx1MDAyNlxcdTAwMjYgQVJDSF9IQVNfUFRFX1BST1ROT05FIFxcdTAwMjZcXHUwMDI2IEhBVkVfQVJDSF9VU0VSRkFVTFRGRF9XUFxcbjEzODA6XFx0XFx0aGVscFxcbjEzODE6XFx0XFx0ICBVc2VyZmF1bHRmZCByZWFkLXdyaXRlIHByb3RlY3Rpb24gKFVGRkRJT19SV1BST1RFQ1QpIGRlbGl2ZXJzIGFcXG4xMzgyOlxcdFxcdCAgdXNlcmZhdWx0ZmQgbm90aWZpY2F0aW9uIG9uIGV2ZXJ5IGFjY2VzcyAtLSByZWFkIG9yIHdyaXRlIC0tIHRvIGFcXG4xMzgzOlxcdFxcdCAgcHJvdGVjdGVkIHJhbmdlLCBsZXR0aW5nIHVzZXJzcGFjZSBvYnNlcnZlIHRoZSB3b3JraW5nIHNldCBvZiBhXFxuMTM4NDpcXHRcXHQgIHByb2Nlc3MuXFxuMTM4NTpcXHRcXG4xMzg2OlxcdG1lbnVjb25maWcgVVNFUkZBVUxURkRcXG4xMzg3OlxcdFxcdGJvb2wgXFxcIkVuYWJsZSB1c2VyZmF1bHRmZCgpIHN5c3RlbSBjYWxsXFxcIlxcbjEzODg6XFx0XFx0ZGVwZW5kcyBvbiBNTVVcXG4xMzg5OlxcdFxcdGhlbHBcXG4xMzkwOlxcdFxcdCAgRW5hYmxlIHRoZSB1c2VyZmF1bHRmZCgpIHN5c3RlbSBjYWxsIHRoYXQgYWxsb3dzIHRvIGludGVyY2VwdCBhbmRcXG4xMzkxOlxcdFxcdCAgaGFuZGxlIHBhZ2UgZmF1bHRzIGluIHVzZXJsYW5kLlxcbjEzOTI6XFx0XFxuMTM5MzpcXHRjb25maWcgUFRFX01BUktFUl9VRkZEX1dQXFxuMTM5NDpcXHRcXHRib29sIFxcXCJVc2VyZmF1bHRmZCB3cml0ZSBwcm90ZWN0aW9uIHN1cHBvcnQgZm9yIHNobWVtL2h1Z2V0bGJmc1xcXCJcXG4xMzk1OlxcdFxcdGRlZmF1bHQgeVxcbjEzOTY6XFx0XFx0ZGVwZW5kcyBvbiBVU0VSRkFVTFRGRCBcXHUwMDI2XFx1MDAyNiBIQVZFX0FSQ0hfVVNFUkZBVUxURkRfV1BcXG4xMzk3OlxcdFxcbjEzOTg6XFx0XFx0aGVscFxcbjEzOTk6XFx0XFx0ICBBbGxvd3MgdG8gY3JlYXRlIG1hcmtlciBQVEVzIGZvciB1c2VyZmF1bHRmZCB3cml0ZSBwcm90ZWN0aW9uXFxuMTQwMDpcXHRcXHQgIHB1cnBvc2VzLiAgSXQgaXMgcmVxdWlyZWQgdG8gZW5hYmxlIHVzZXJmYXVsdGZkIHdyaXRlIHByb3RlY3Rpb24gb25cXG4xNDAxOlxcdFxcdCAgZmlsZS1iYWNrZWQgbWVtb3J5IHR5cGVzIGxpa2Ugc2htZW0gYW5kIGh1Z2V0bGJmcy5cXG4xNDAyOlxcdFxcbjE0MDM6XFx0IyBtdWx0aS1nZW4gTFJVIHtcXG4xNDA0OlxcdGNvbmZpZyBMUlVfR0VOXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDAyOjQ4OjU4LjQ2MDU4Mzk5WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4OTkyOTcwNjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipDaGVja2luZyBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGluIGBtbS9LY29uZmlnYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBxdWlja2x5IGdldCBhIGhhbmRsZSBvbiBob3cgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBpcyBjb25maWd1cmVkLiBNeSBpbml0aWFsIGluc3RpbmN0LCBnaXZlbiBteSBleHBlcmllbmNlLCBpcyB0byBoZWFkIGRpcmVjdGx5IHRvIGBtbS9LY29uZmlnYC4gVGhhdCdzIHdoZXJlIEkgZXhwZWN0IHRvIGZpbmQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgYW55dGhpbmcgZGVhbGluZyB3aXRoIHRyYW5zcGFyZW50IGh1Z2VwYWdlcy4gSXQncyB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBkaWdnaW5nIGludG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBJJ20gZ29pbmcgdG8gbG9vayBmb3IgdGhlIGRlZmluaXRpb24gb2YgdGhlIHN5bWJvbCBpdHNlbGYsIGFuZCB0aGVuIHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcyBhbmQgYW55IGFzc29jaWF0ZWQgaGVscCB0ZXh0LiBJIHdhbnQgdG8gc2VlIGlmIGl0J3MgdHJpc3RhdGUsIGFuZCBpZiBzbywgd2hhdCB0aGUgZGVmYXVsdCBzZXR0aW5nIGlzIGFuZCBob3cgaXQgbWlnaHQgaW50ZXJhY3Qgd2l0aCBvdGhlciBtZW1vcnkgbWFuYWdlbWVudCBmZWF0dXJlcy4gSSdtIGFsc28gZ29pbmcgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgY29uZGl0aW9uYWwgZGVwZW5kZW5jaWVzIG9yIFwic2VsZWN0XCIgc3RhdGVtZW50cyB0aGF0IG1pZ2h0IHNoZWQgbGlnaHQgb24gaG93IGl0J3MgaW50ZWdyYXRlZCBpbnRvIHRoZSBsYXJnZXIga2VybmVsIGNvbmZpZ3VyYXRpb24gbGFuZHNjYXBlLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIHNvbGlkIGZvdW5kYXRpb24gZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGNhcGFiaWxpdGllcyBvZiB0cmFuc3BhcmVudCBodWdlcGFnZXMgd2l0aGluIHRoZSBjdXJyZW50IGtlcm5lbCBidWlsZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM2NDksIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDAyOjQ5OjAwLjM1OTg4Mzc1OVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTI3OTk0NTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTgzMj1jb25maWcgTU1fSURcXG4tLVxcbm1tL0tjb25maWctODM0LVxcbm1tL0tjb25maWc6ODM1Om1lbnVjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5tbS9LY29uZmlnLTgzNi1cXHRib29sIFxcXCJUcmFuc3BhcmVudCBIdWdlcGFnZSBTdXBwb3J0XFxcIlxcbi0tXFxubW0vS2NvbmZpZz04NTM9Y2hvaWNlXFxuLS1cXG5tbS9LY29uZmlnLTg1OC1cXG5tbS9LY29uZmlnOjg1OTpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfQUxXQVlTXFxubW0vS2NvbmZpZy04NjAtXFx0XFx0Ym9vbCBcXFwiYWx3YXlzXFxcIlxcbi0tXFxubW0vS2NvbmZpZy04NjUtXFxubW0vS2NvbmZpZzo4NjY6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX01BRFZJU0VcXG5tbS9LY29uZmlnLTg2Ny1cXHRcXHRib29sIFxcXCJtYWR2aXNlXFxcIlxcbi0tXFxubW0vS2NvbmZpZy04NzQtXFxubW0vS2NvbmZpZzo4NzU6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX05FVkVSXFxubW0vS2NvbmZpZy04NzYtXFx0XFx0Ym9vbCBcXFwibmV2ZXJcXFwiXFxuLS1cXG5tbS9LY29uZmlnPTg4Mj1jaG9pY2VcXG4tLVxcbm1tL0tjb25maWctODkxLVxcbm1tL0tjb25maWc6ODkyOlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX05FVkVSXFxubW0vS2NvbmZpZy04OTMtXFx0XFx0Ym9vbCBcXFwibmV2ZXJcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTkwMS1cXG5tbS9LY29uZmlnOjkwMjpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9BTFdBWVNcXG5tbS9LY29uZmlnLTkwMy1cXHRcXHRib29sIFxcXCJhbHdheXNcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTkwOS1cXG5tbS9LY29uZmlnOjkxMDpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9XSVRISU5fU0laRVxcbm1tL0tjb25maWctOTExLVxcdFxcdGJvb2wgXFxcIndpdGhpbl9zaXplXFxcIlxcbi0tXFxubW0vS2NvbmZpZy05MTctXFxubW0vS2NvbmZpZzo5MTg6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfQURWSVNFXFxubW0vS2NvbmZpZy05MTktXFx0XFx0Ym9vbCBcXFwiYWR2aXNlXFxcIlxcbi0tXFxubW0vS2NvbmZpZz05Mjc9Y2hvaWNlXFxuLS1cXG5tbS9LY29uZmlnLTkzNi1cXG5tbS9LY29uZmlnOjkzNzpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9ORVZFUlxcbm1tL0tjb25maWctOTM4LVxcdFxcdGJvb2wgXFxcIm5ldmVyXFxcIlxcbi0tXFxubW0vS2NvbmZpZy05NDUtXFxubW0vS2NvbmZpZzo5NDY6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfQUxXQVlTXFxubW0vS2NvbmZpZy05NDctXFx0XFx0Ym9vbCBcXFwiYWx3YXlzXFxcIlxcbi0tXFxubW0vS2NvbmZpZy05NTMtXFxubW0vS2NvbmZpZzo5NTQ6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfV0lUSElOX1NJWkVcXG5tbS9LY29uZmlnLTk1NS1cXHRcXHRib29sIFxcXCJ3aXRoaW5fc2l6ZVxcXCJcXG4tLVxcbm1tL0tjb25maWctOTYxLVxcbm1tL0tjb25maWc6OTYyOlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX0FEVklTRVxcbm1tL0tjb25maWctOTYzLVxcdFxcdGJvb2wgXFxcImFkdmlzZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDI6NDk6MDAuNDEyNjg3NzU5WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU2MjA3MTQ0NTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgYSBQb3RlbnRpYWwgRnV6emluZyBUYXJnZXQqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFdlIGhhdmUgYSBwYXRjaCB0b3VjaGluZyBgbW0va2h1Z2VwYWdlZC5jYCDigJMgdGhhdCBpbW1lZGlhdGVseSBncmFicyBteSBhdHRlbnRpb24uIFNwZWNpZmljYWxseSwgdGhlIGB0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHBgIGZ1bmN0aW9uIGlzIHRoZSBmb2NhbCBwb2ludC4gVGhlIGNvcmUgY2hhbmdlIGlzIHRoaXM6IGlmIGEgVk1BIGlzIHJlZ2lzdGVyZWQgd2l0aCBgdXNlcmZhdWx0ZmRfbWlub3JgLCBpdOKAmXMgbm93ICpza2lwcGVkKiBkdXJpbmcgVEhQIGNvbGxhcHNlLiBUaGF0J3MgYSBzaWduaWZpY2FudCBiZWhhdmlvciBjaGFuZ2UsIHBvdGVudGlhbGx5IG9wZW5pbmcgdXAgYSBuZXcgYXR0YWNrIHN1cmZhY2UuXG5cblRoZSBjb2RlIGl0c2VsZiBpcyBzdHJhaWdodGZvcndhcmQ6IHRoZSBuZXcgY2hlY2ssIGBpZiAodXNlcmZhdWx0ZmRfbWlub3Iodm1hKSkgcmV0dXJuIFNDQU5fUFRFX1VGRkQ7YCwgc2VlbXMgc2ltcGxlIGVub3VnaCwgYnV0IHRoZSBpbnRlcmFjdGlvbnMgYW5kIHNpZGUgZWZmZWN0cyBpbiBhIGNvbXBsZXggTU0gc3lzdGVtLi4uIHRoYXQncyB3aGVyZSB0aGUgaW50ZXJlc3Rpbmcgc3R1ZmYgbGllcy5cblxuTm93LCBpcyB0aGlzIHdvcnRoIGZ1enppbmc/IERlZmluaXRlbHkuIFRoZSBmYWN0IHRoYXQgaXQncyByZWFjaGFibGUgdmlhIGJvdGggYG1hZHZpc2UoLi4uLCBNQURWX0NPTExBUFNFKWAgKmFuZCogYmFja2dyb3VuZCBga2h1Z2VwYWdlZGAgc2Nhbm5pbmcsIGNvbWJpbmVkIHdpdGggYHVzZXJmYXVsdGZkX21pbm9yYCByZWdpc3RyYXRpb24g4oCTIHRoYXQncyBhIHNvbGlkIGNvbWJpbmF0aW9uIGZvciBleHBsb3JhdGlvbi4gUGx1cywgd2UgaGF2ZSB0aGUgYHVwcm9iZV93cml0ZWAgcGF0aCwgd2lkZW5pbmcgdGhlIGF0dGFjayBzdXJmYWNlLlxuXG5UaGlzIGlzIGEgY2xlYXIgXCJ5ZXNcIiBmb3IgYFdvcnRoRnV6emluZ2AuIFRoZSBzdWJzeXN0ZW0gaXMgY29yZSBNTSwgYW5kIHRoZSByZWFjaGFiaWxpdHkgaXMgZGl2ZXJzZS5cblxuVGhlIG5leHQgc3RlcCBpcyB0byBjaG9vc2Ugb3VyIEZvY3VzU3ltYm9scyBhbmQgRW5hYmxlQ29uZmlncy4gV2UgbmVlZCB0byBhdm9pZCB0aGUgb2J2aW91cywgdWJpcXVpdG91cyBsaWZlY3ljbGUgZnVuY3Rpb25zIOKAkyBub3RoaW5nIGxpa2UgYHN5c19tYWR2aXNlYCwgb3IgYGRvX3BhZ2VfZmF1bHRgLiBXZSBuZWVkIHRvIGJlIHN1cmdpY2FsLiBNeSBmb2N1cyB3b3VsZCBiZSBvbjpcbiogICBgdHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwYDogVGhlIGZ1bmN0aW9uIGhhcyBjaGFuZ2VkIGRpcmVjdGx5LCBzbyBsZXQncyBzdGFydCB0aGVyZS5cbiogICBUaGUgY2FsbGVycyBvZiBgdHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwYDogYGNvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwYCwgYG1hZHZpc2VfY29sbGFwc2VgLCBgY29sbGFwc2Vfc2luZ2xlX3BtZGAsIGBjb2xsYXBzZV9maWxlYCwgYGtodWdlcGFnZWRfc2Nhbl9wbWRgLCBhbmQgYGtodWdlcGFnZWRfc2Nhbl9maWxlYCBhcmUgYWxsIHBvdGVudGlhbCBhcmVhcyBvZiBpbnRlcmVzdCwgaWYgYHRyeV9jb2xsYXBzZV9wdGVfbWFwcGVkX3RocGAgaXNuJ3QgaW5saW5lZC5cblxuTGV0J3Mgc2VlIHdoYXQgZWxzZSBgbW0va2h1Z2VwYWdlZC5jYCBoYXMgdG8gb2ZmZXIuIFRoZSBhZGphY2VudCBjb2RlIHdpbGwgZ2l2ZSBjbHVlcyBvbiB3aGF0IHRvIGZvY3VzIG9uLiBXZSBuZWVkIHRvIGNhcmVmdWxseSBvYnNlcnZlIHRoZSBjb250cm9sIGFuZCBkYXRhIGZsb3cgYXJvdW5kIHRoaXMgbmV3IGNoZWNrIHRvIGVuc3VyZSB3ZSBhcmUgY292ZXJpbmcgdGhlIG1vc3QgdnVsbmVyYWJsZSBzZWdtZW50cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ2NDEsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDI6NDk6MDYuMDMzNDA1NTU4WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTE3NjQ3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJec3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgdHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2todWdlcGFnZWQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9raHVnZXBhZ2VkLmM9MTgxNT1zdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBzZXRfaHVnZV9wbWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0xODUwLVxcbm1tL2todWdlcGFnZWQuYzoxODUxOnN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IHRyeV9jb2xsYXBzZV9wdGVfbWFwcGVkX3RocChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbm1tL2todWdlcGFnZWQuYy0xODUyLVxcdFxcdGJvb2wgaW5zdGFsbF9wbWQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDAyOjQ5OjA2LjA4MjU4NzYxN1oiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NzE4MTE1MTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBraHVnZXBhZ2VkLmMgZm9yIFRIUCBDb2xsYXBzZSBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSdtIGxvb2tpbmcgYXQgYHRyeV9jb2xsYXBzZV9wdGVfbWFwcGVkX3RocGAg4oCTIGl0J3MgYSBub24taW5saW5lIHN0YXRpYyBmdW5jdGlvbiB0dWNrZWQgYXdheSBpbiBgbW0va2h1Z2VwYWdlZC5jYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiV2hvJ3MgdXNpbmcgdGhpcyB0aGluZz9cIiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY2FsbCBncmFwaCBhbmQgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQuIFNvLCBJJ20gZ29pbmcgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgZGlyZWN0bHkgcmVsYXRlZCBmdW5jdGlvbnMuXG5cblJpZ2h0IG9mZiB0aGUgYmF0LCBJIHNlZSBgY29sbGFwc2VfcHRlX21hcHBlZF90aHBgLCB3aGljaCBpcyBleHBvcnRlZCBhbmQgbm9uLXN0YXRpYyB3aXRoaW4gdGhlIHNhbWUgZmlsZTsgdGhhdOKAmXMgZGVmaW5pdGVseSByZWxldmFudC4gVGhlbiB3ZSBoYXZlIGBtYWR2aXNlX2NvbGxhcHNlYCwgYWxzbyBub24tc3RhdGljLCBhbHNvIGluIGBtbS9raHVnZXBhZ2VkLmNgLiBPZiBjb3Vyc2UsIGB0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHBgIGl0c2VsZiBpcyBpbiB0aGUgbWl4LCBhbmQgbm93IEkgYWxzbyBzZWUgYGNvbGxhcHNlX3NpbmdsZV9wbWRgIGFuZCBgY29sbGFwc2VfZmlsZWAgaW4gdGhlIGxpc3QuXG5cbkkgbmVlZCB0byBxdWlja2x5IHZlcmlmeSB0aGF0IHRoZXNlIGFyZSBhbGwgZGlzdGluY3Qgc3ltYm9sczsgaXQncyBlYXN5IHRvIGdldCBjb25mdXNlZCB3aXRoIHNpbWlsYXIgbmFtaW5nIGNvbnZlbnRpb25zLiBMZXQncyBzdGFydCBieSBsb29raW5nIGF0IGBtYWR2aXNlX2NvbGxhcHNlYCBpbiBgbW0va2h1Z2VwYWdlZC5jYCBpbiBwYXJ0aWN1bGFyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTg3NSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwMjo0OToxMS44MDA3MDQ3ODZaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2ODQ1NTM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImludCBtYWR2aXNlX2NvbGxhcHNlXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0va2h1Z2VwYWdlZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2todWdlcGFnZWQuYz0zMTU3PXN0YXRpYyBpbnQgbWFkdmlzZV9jb2xsYXBzZV9lcnJubyhlbnVtIHNjYW5fcmVzdWx0IHIpXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMzE4OC1cXG5tbS9raHVnZXBhZ2VkLmM6MzE4OTppbnQgbWFkdmlzZV9jb2xsYXBzZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBzdGFydCxcXG5tbS9raHVnZXBhZ2VkLmMtMzE5MC1cXHRcXHQgICAgIHVuc2lnbmVkIGxvbmcgZW5kLCBib29sICpsb2NrX2Ryb3BwZWQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDAyOjQ5OjExLjg0NzU1NzI5NVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NTQ1MTY2NzA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGluLiBIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzIHJlZ2FyZGluZyBgY29sbGFwc2VfZmlsZWAgYW5kIGBjb2xsYXBzZV9zaW5nbGVfcG1kYCB3aXRoaW4gYG1tL2todWdlcGFnZWQuY2A6XG5cbioqQW5hbHl6aW5nIGBjb2xsYXBzZV9maWxlYCBhbmQgYGNvbGxhcHNlX3NpbmdsZV9wbWRgIGluIGBtbS9raHVnZXBhZ2VkLmNgKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgaW50byB0aGUgd2VlZHMgb2YgYGtodWdlcGFnZWRgJ3MgZmlsZSBtYXBwaW5nIGhhbmRsaW5nLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gdGhlIGZ1bmN0aW9ucyBgY29sbGFwc2VfZmlsZWAgYW5kIGBjb2xsYXBzZV9zaW5nbGVfcG1kYC4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgSSdtIGV4cGVjdGluZyB0aGVzZSB0byBiZSBjcml0aWNhbCBjb21wb25lbnRzIG9mIGhvdyB0aGUga2VybmVsIG1hbmFnZXMgdHJhbnNwYXJlbnQgaHVnZSBwYWdlcyAoVEhQKSBzcGVjaWZpY2FsbHkgd2hlbiBkZWFsaW5nIHdpdGggZmlsZS1iYWNrZWQgbWFwcGluZ3MuIGBjb2xsYXBzZV9maWxlYCwgdW5kb3VidGVkbHksIGhhcyBhIGJyb2FkZXIgc2NvcGUsIGxpa2VseSBkZWFsaW5nIHdpdGggZmlsZS1iYWNrZWQgbWFwcGluZ3MgaW4gZ2VuZXJhbCwgd2hlcmVhcyBgY29sbGFwc2Vfc2luZ2xlX3BtZGAgaXMgcHJvYmFibHkgZ2VhcmVkIHRvd2FyZCBjb2xsYXBzaW5nIGEgc3BlY2lmaWMgUGh5c2ljYWwgTWVtb3J5IERlc2NyaXB0b3IgKFBNRCkuIEknbGwgbmVlZCB0byBkcmlsbCBkb3duIGludG8gdGhlIGxvZ2ljIHdpdGhpbiBlYWNoIHRvIHVuZGVyc3RhbmQgdGhlIG51YW5jZXMgb2YgaG93IHRoZXNlIGZ1bmN0aW9ucyBoYW5kbGUgcGFnZSBmYXVsdHMsIG1lbW9yeSBhbGxvY2F0aW9uL2RlYWxsb2NhdGlvbiwgYW5kIHRoZSBvdmVyYWxsIGNvb3JkaW5hdGlvbiBvZiBUSFAgbWFuYWdlbWVudCBpbiBmaWxlLWJhY2tlZCBjb250ZXh0cy4gSSBhbnRpY2lwYXRlIHNlZWluZyBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgcGFnZSBjYWNoZSwgaW5vZGUgZGF0YSBzdHJ1Y3R1cmVzLCBhbmQgdGhlIFZNIHN5c3RlbSdzIGNvcmUgbWVjaGFuaXNtcyBmb3IgaGFuZGxpbmcgbWVtb3J5IHByZXNzdXJlLiBNeSBnb2FsIGlzIHRvIGRldGVybWluZSBob3cgZWZmaWNpZW50bHkgdGhlc2UgZnVuY3Rpb25zIG1hbmFnZSBwYWdlLWxldmVsIG9wZXJhdGlvbnMgY29tcGFyZWQgdG8gYSBtb3JlIGRpcmVjdCBmaWxlLW1hcHBpbmcgYXBwcm9hY2ggd2l0aCBUSFAuIFNwZWNpZmljIHRoaW5ncyBJJ2xsIGJlIGxvb2tpbmcgZm9yIGluY2x1ZGUgd2hldGhlciB0aGUgZmlsZSBtYXBwaW5nIHJlcXVpcmVzIGZsdXNoaW5nLCBhbmQgaG93IGNvaGVyZW5jeSBpcyBtYWludGFpbmVkIHdpdGggb3RoZXIgcHJvY2Vzc2VzIGFuZCB0aHJlYWRzIGFjY2Vzc2luZyB0aGUgZmlsZS4gQWxzbywgd2hhdCBpbXBhY3Qgd2lsbCB0aGVzZSBmdW5jdGlvbnMgaGF2ZSBvbiBwZXJmb3JtYW5jZSBmcm9tIGEgZmlsZSBJL08gcGVyc3BlY3RpdmU/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2NTEyLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDI6NDk6MTYuMzkyNzI2NDEyWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMzczNjYxMzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29sbGFwc2VfZmlsZVxcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2todWdlcGFnZWQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9raHVnZXBhZ2VkLmM9MjE0MD1zdGF0aWMgdm9pZCByZXRyYWN0X3BhZ2VfdGFibGVzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBwZ29mZl90IHBnb2ZmKVxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTIyNDgtICovXFxubW0va2h1Z2VwYWdlZC5jOjIyNDk6c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2VfZmlsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbm1tL2todWdlcGFnZWQuYy0yMjUwLVxcdFxcdHN0cnVjdCBmaWxlICpmaWxlLCBwZ29mZl90IHN0YXJ0LCBzdHJ1Y3QgY29sbGFwc2VfY29udHJvbCAqY2MpXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMjY3Ni1cXHRWTV9CVUdfT04oIWxpc3RfZW1wdHkoXFx1MDAyNnBhZ2VsaXN0KSk7XFxubW0va2h1Z2VwYWdlZC5jOjI2Nzc6XFx0dHJhY2VfbW1fa2h1Z2VwYWdlZF9jb2xsYXBzZV9maWxlKG1tLCBuZXdfZm9saW8sIGluZGV4LCBhZGRyLCBpc19zaG1lbSwgZmlsZSwgSFBBR0VfUE1EX05SLCByZXN1bHQpO1xcbm1tL2todWdlcGFnZWQuYy0yNjc4LVxcdHJldHVybiByZXN1bHQ7XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmM9MjY4MT1zdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBjb2xsYXBzZV9zY2FuX2ZpbGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMjc3OC1cXHRcXHR9IGVsc2Uge1xcbm1tL2todWdlcGFnZWQuYzoyNzc5OlxcdFxcdFxcdHJlc3VsdCA9IGNvbGxhcHNlX2ZpbGUobW0sIGFkZHIsIGZpbGUsIHN0YXJ0LCBjYyk7XFxubW0va2h1Z2VwYWdlZC5jLTI3ODAtXFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwMjo0OToxNi43MzAwOTc4MjdaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjg2MzM2NTQ4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkNoZWNraW5nIGBjb2xsYXBzZV9zaW5nbGVfcG1kYCoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzLiBUaGUgaW5pdGlhbCB0aG91Z2h0LCBvZiBjb3Vyc2UsIGlzIGEgY2hlY2suIEEgcXVpY2sgc2FuaXR5IGNoZWNrIG9uIGEgc3BlY2lmaWMgZnVuY3Rpb24gb3IgbW9kdWxlIG5hbWVkIGBjb2xsYXBzZV9zaW5nbGVfcG1kYC4gVGhlIG1lcmUgZXhpc3RlbmNlIG9mIGEgZGVkaWNhdGVkIGZ1bmN0aW9uIHdpdGggc3VjaCBhIG5hbWUgaW1wbGllcyBhIHZlcnkgc3BlY2lmaWMgdGFzazogcG90ZW50aWFsbHkgcmVkdWNpbmcgb3Igc2ltcGxpZnlpbmcgZGF0YSwgbGlrZWx5IHJlbGF0ZWQgdG8gcGFpcmVkIG1vbGVjdWxhciBkeW5hbWljcyAoUE1EKSBzaW11bGF0aW9ucywgcGVyaGFwcywgb3Igc29tZXRoaW5nIG9mIHRoYXQgbmF0dXJlLCBnaXZlbiB0aGUgbmFtaW5nIGNvbnZlbnRpb24gSSBzZWUuXG5cbk15IGltbWVkaWF0ZSBmb2xsb3ctdXAgdGhvdWdodCB3b3VsZCBiZSAqd2h5KiBhcmUgd2UgY2hlY2tpbmcgdGhpcz8gSXMgaXQgcGFydCBvZiBhIGRlYnVnZ2luZyBwcm9jZXNzPyBBIHJlZmFjdG9yaW5nIGVmZm9ydD8gUGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uPyBPciBtYXliZSBhIHJldmlldyBvZiB0aGUgdW5kZXJseWluZyBsb2dpYz8gV2hhdCdzIHRoZSBjb250ZXh0PyBXZSdsbCBuZWVkIGEgYnJvYWRlciB2aWV3IG9mIHRoZSBzeXN0ZW0gdG8gdW5kZXJzdGFuZCB0aGUgbW90aXZhdGlvbiBiZWhpbmQgdGhpcyBjaGVjay4gSSdkIGJlIGxvb2tpbmcgZm9yIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiwgdGVzdCBjYXNlcywgb3IgcmVjZW50IGNvZGUgY2hhbmdlcyB0aGF0IGludm9sdmUgdGhpcyBmdW5jdGlvbi5cblxuU3BlY2lmaWNhbGx5LCBJJ2Qgd2FudCB0byBxdWlja2x5IHJlY2FsbDogd2hhdCBhcmUgdGhlIHR5cGljYWwgaW5wdXRzIGFuZCBvdXRwdXRzIGZvciB0aGlzIGZ1bmN0aW9uPyBEb2VzIGl0IGhhbmRsZSBlZGdlIGNhc2VzIHByb3Blcmx5PyBXaGF0IGFyZSB0aGUgY29tcHV0YXRpb25hbCBjb21wbGV4aXRpZXMgaW52b2x2ZWQ/IERvZXMgaXQgaGF2ZSBhbnkga25vd24gZGVwZW5kZW5jaWVzIHRoYXQgbWlnaHQgYWZmZWN0IHBlcmZvcm1hbmNlIG9yIHN0YWJpbGl0eT8gSSdkIGJlIGxvb2tpbmcgZm9yIHBvdGVudGlhbCBhcmVhcyBvZiBjb25jZXJuOiBpbmVmZmljaWVudCBhbGdvcml0aG1zLCBtZW1vcnkgbGVha3MsIG9yIHVuaGFuZGxlZCBleGNlcHRpb25zIHRoYXQgY291bGQgYmUgbHVya2luZyB3aXRoaW4gaXRzIGltcGxlbWVudGF0aW9uLiBMZXQncyBzZWUgd2hhdCB3ZSBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzI2MSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDAyOjQ5OjE5LjU5MzQ2NjI2MVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcwNjc5NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29sbGFwc2Vfc2luZ2xlX3BtZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9raHVnZXBhZ2VkLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0va2h1Z2VwYWdlZC5jPTI2ODE9c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2Vfc2Nhbl9maWxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTI3OTAtICovXFxubW0va2h1Z2VwYWdlZC5jOjI3OTE6c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2Vfc2luZ2xlX3BtZCh1bnNpZ25lZCBsb25nIGFkZHIsXFxubW0va2h1Z2VwYWdlZC5jLTI3OTItXFx0XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIGJvb2wgKmxvY2tfZHJvcHBlZCxcXG4tLVxcbm1tL2todWdlcGFnZWQuYz0yODQ4PXN0YXRpYyB2b2lkIGNvbGxhcHNlX3NjYW5fbW1fc2xvdCh1bnNpZ25lZCBpbnQgcHJvZ3Jlc3NfbWF4LFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTI5MTgtXFxubW0va2h1Z2VwYWdlZC5jOjI5MTk6XFx0XFx0XFx0KnJlc3VsdCA9IGNvbGxhcHNlX3NpbmdsZV9wbWQoa2h1Z2VwYWdlZF9zY2FuLmFkZHJlc3MsXFxubW0va2h1Z2VwYWdlZC5jLTI5MjAtXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgdm1hLCBcXHUwMDI2bG9ja19kcm9wcGVkLCBjYyk7XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmM9MzE4OT1pbnQgbWFkdmlzZV9jb2xsYXBzZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBzdGFydCxcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0zMjM3LVxcbm1tL2todWdlcGFnZWQuYzozMjM4OlxcdFxcdHJlc3VsdCA9IGNvbGxhcHNlX3NpbmdsZV9wbWQoYWRkciwgdm1hLCBcXHUwMDI2bW1hcF91bmxvY2tlZCwgY2MpO1xcbm1tL2todWdlcGFnZWQuYy0zMjM5LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwMjo0OToxOS42NDA1MzgwMloiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTU4NTgwMzY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IENvbmZpZ3VyYXRpb24gQ29udW5kcnVtKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGVzc2VudGlhbCBjb25maWd1cmF0aW9ucyBmb3IgdGhpcyBwYXJ0aWN1bGFyIGtlcm5lbCBjb21wb25lbnQuIEl0IGxvb2tzIGxpa2UgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBpcyBkZWZpbml0ZWx5IGEgcHJlcmVxdWlzaXRlLCBnaXZlbiBpdHMgZGlyZWN0IGxpbmsgdG8gYGtodWdlcGFnZWQuY2AgaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IE1ha2VmaWxlLiBNYWtlcyBzZW5zZTsgdGhhdCdzIHRoZSBjb3JlIG9mIGhvdyB0cmFuc3BhcmVudCBodWdlcGFnZXMgYXJlIG1hbmFnZWQuXG5cblRoZW4gdGhlcmUncyBgVVNFUkZBVUxURkRgLCB3aGljaCBpcyB0aWVkIHRvIHVzZXJmYXVsdGZkIG1pbm9yIGZhdWx0IHN1cHBvcnQuIEFuZCBzaW5jZSB3ZSdyZSBkZWFsaW5nIHdpdGggeDg2L2FtZDY0IHN5c3RlbXMgaGVyZSwgSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgSEFWRV9BUkNIX1VTRVJGQVVMVEZEX01JTk9SYCBpcyBlbmFibGVkLiBUaW1lIHRvIGRpdmUgaW50byBgYXJjaC94ODYvS2NvbmZpZ2AgYW5kIHNlZSB3aGF0IHRoZSBhcmNoaXRlY3R1cmUgc2F5cyBhYm91dCB0aGlzLiBJJ20gZ29pbmcgdG8gbmVlZCB0byB0cmFjayBkb3duIHRoZSBLY29uZmlnIGRlZmluaXRpb24gdG8gZW5zdXJlIGl0J3Mgc2V0IGNvcnJlY3RseS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc5NTIsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDI6NDk6MjEuNzk5MTIxMDY1WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTQyNjE4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJIQVZFX0FSQ0hfVVNFUkZBVUxURkRfTUlOT1JcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvS2NvbmZpZz01OD1jb25maWcgWDg2XFxuLS1cXG5hcmNoL3g4Ni9LY29uZmlnLTIxNC1cXHRzZWxlY3QgSEFWRV9BUkNIX1VTRVJGQVVMVEZEX1dQICAgICAgICAgaWYgWDg2XzY0IFxcdTAwMjZcXHUwMDI2IFVTRVJGQVVMVEZEXFxuYXJjaC94ODYvS2NvbmZpZzoyMTU6XFx0c2VsZWN0IEhBVkVfQVJDSF9VU0VSRkFVTFRGRF9NSU5PUlxcdGlmIFg4Nl82NCBcXHUwMDI2XFx1MDAyNiBVU0VSRkFVTFRGRFxcbmFyY2gveDg2L0tjb25maWctMjE2LVxcdHNlbGVjdCBIQVZFX0FSQ0hfVk1BUF9TVEFDS1xcdFxcdGlmIFg4Nl82NFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwMjo0OToyMS44NjA1NTQwMzRaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDMxOTM4NDc5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBLZXJuZWwgQ29uZmlndXJhdGlvbiBmb3IgRnV6emluZyoqXG5cbk9rYXksIHNvIHRoZSBLY29uZmlnIGZsYWdzIHdlJ3JlIGZvY3VzaW5nIG9uIGhlcmUgYXJlIGBVU0VSRkFVTFRGRGAgYW5kIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAuIEkgYWx3YXlzIGxpa2UgdG8gZG91YmxlLWNoZWNrIG15IGFzc3VtcHRpb25zLCBzbyBsZXQncyBydW4gdGhyb3VnaCB0aGUgY3JpdGVyaWEuXG5cbmBXb3J0aEZ1enppbmdgIGlzIHNldCB0byB0cnVlLCB3aGljaCBhbGlnbnMgd2l0aCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzeXN0ZW0uIFRoZSBgRW5hYmxlQ29uZmlnc2AgbGlzdCBleHBsaWNpdGx5IGluY2x1ZGVzIGJvdGggYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBhbmQgYFVTRVJGQVVMVEZEYCwgd2hpY2ggaXMgZXhhY3RseSB3aGF0IEkgZXhwZWN0ZWQgYmFzZWQgb24gdGhlIGluaXRpYWwgYXNzZXNzbWVudC4gVGhlIGBGb2N1c1N5bWJvbHNgIGFyZSBhbHNvIGFzIEkgd291bGQgaGF2ZSBhbnRpY2lwYXRlZDogd2UncmUga2V5ZWQgaW4gb24gZnVuY3Rpb25zIGxpa2UgYHRyeV9jb2xsYXBzZV9wdGVfbWFwcGVkX3RocGAsIGBjb2xsYXBzZV9wdGVfbWFwcGVkX3RocGAsIGBtYWR2aXNlX2NvbGxhcHNlYCwgYW5kIGBjb2xsYXBzZV9zaW5nbGVfcG1kYC4gVGhlc2UgbWFrZSBwZXJmZWN0IHNlbnNlIGdpdmVuIHRoZSBuYXR1cmUgb2YgdHJhbnNwYXJlbnQgaHVnZXBhZ2VzIGFuZCB1c2VyZmF1bHRmZDsgd2UncmUgZGVhbGluZyB3aXRoIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGluIHRoYXQgYXJlYS4gVGhhdCdzIGEgc29saWQsIGNvbmNpc2UgcmVhc29uaW5nIGZvciB0aGlzIGFzc2Vzc21lbnQuXG5cbkhtbSwgSSB0aGluayB0aGF0J3MgaXQuIExldCBtZSBqdXN0IGNvbmZpcm0gdGhhdCBJIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nIGVsc2UgaW4gbXkgZXZhbHVhdGlvbi4gWXVwLCBldmVyeXRoaW5nIGlzIGNsZWFyIGFuZCBhY2N1cmF0ZS4gTGV0J3MgY2FsbCBgc2V0LXJlc3VsdHNgLiBEb25lLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODQ0NCwiT3V0cHV0VG9rZW5zIjoxNjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDI6NDk6MjYuMTc5OTQxMTk2WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzYxMjM2OTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCIsXG4gICAgXCJVU0VSRkFVTFRGRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRyeV9jb2xsYXBzZV9wdGVfbWFwcGVkX3RocFwiLFxuICAgIFwiY29sbGFwc2VfcHRlX21hcHBlZF90aHBcIixcbiAgICBcIm1hZHZpc2VfY29sbGFwc2VcIixcbiAgICBcImNvbGxhcHNlX3NpbmdsZV9wbWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBraHVnZXBhZ2VkIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgKG1tL2todWdlcGFnZWQuYykgdG8gcHJldmVudCBjb2xsYXBzaW5nIFBURS1tYXBwZWQgdHJhbnNwYXJlbnQgaHVnZXBhZ2VzIGZvciBWTUFzIHJlZ2lzdGVyZWQgd2l0aCB1c2VyZmF1bHRmZCBtaW5vciBmYXVsdCBoYW5kbGluZyAodXNlcmZhdWx0ZmRfbWlub3IpLiBUaGlzIGlzIHJlYWNoYWJsZSB2aWEgdXNlcmZhdWx0ZmQgc3lzY2FsbHMgYW5kIE1BRFZfQ09MTEFQU0UgbWFkdmlzZSBjYWxscyBvciBiYWNrZ3JvdW5kIGtodWdlcGFnZWQgY29sbGFwc2UgYW5kIHdhcnJhbnRzIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIixcbiAgICBcIlVTRVJGQVVMVEZEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwXCIsXG4gICAgXCJjb2xsYXBzZV9wdGVfbWFwcGVkX3RocFwiLFxuICAgIFwibWFkdmlzZV9jb2xsYXBzZVwiLFxuICAgIFwiY29sbGFwc2Vfc2luZ2xlX3BtZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGtodWdlcGFnZWQgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCAobW0va2h1Z2VwYWdlZC5jKSB0byBwcmV2ZW50IGNvbGxhcHNpbmcgUFRFLW1hcHBlZCB0cmFuc3BhcmVudCBodWdlcGFnZXMgZm9yIFZNQXMgcmVnaXN0ZXJlZCB3aXRoIHVzZXJmYXVsdGZkIG1pbm9yIGZhdWx0IGhhbmRsaW5nICh1c2VyZmF1bHRmZF9taW5vcikuIFRoaXMgaXMgcmVhY2hhYmxlIHZpYSB1c2VyZmF1bHRmZCBzeXNjYWxscyBhbmQgTUFEVl9DT0xMQVBTRSBtYWR2aXNlIGNhbGxzIG9yIGJhY2tncm91bmQga2h1Z2VwYWdlZCBjb2xsYXBzZSBhbmQgd2FycmFudHMgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDI6NDk6MjYuMjU2MDcyMzc1WiIsIlNlcSI6MzcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzgzMTM3NzM3NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDAyOjQ5OjI2LjI1NjU1NTA0NFoiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjEzODMwODkwMDE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgY2hlY2sgKGB1c2VyZmF1bHRmZF9taW5vcih2bWEpYCkgaW4gYHRyeV9jb2xsYXBzZV9wdGVfbWFwcGVkX3RocCgpYCB0byBwcmV2ZW50IGNvbGxhcHNpbmcgUFRFLW1hcHBlZCBUSFBzIG9uIFZNQXMgcmVnaXN0ZXJlZCB3aXRoIHVzZXJmYXVsdGZkLW1pbm9yIG1vZGUsIGFsb25nIHdpdGggY29ycmVzcG9uZGluZyBzZWxmdGVzdCB1cGRhdGVzIGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLXVuaXQtdGVzdHMuY2AuIFxcblxcblRoaXMgbW9kaWZpY2F0aW9uIGRvZXMgbm90IGFsbG9jYXRlIG5ldyBidWZmZXJzLCBtYW5pcHVsYXRlIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBkYXRhLCBhbHRlciBwYWRkaW5nIG9yIHN0cnVjdHVyZSBmaWVsZHMgY29waWVkIHRvIHVzZXJzcGFjZSwgb3IgY2hhbmdlIGFueSBkYXRhIGxlbmd0aHMvYm91bmRzIGNoZWNraW5nIHRoYXQgY291bGQgbGVhZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBsZWFrcy4gU3RhbmRhcmQgc2FuaXRpemVycyBhbmQgYnVnIGRldGVjdG9ycyAoc3VjaCBhcyBLQVNBTiBhbmQgcGFnZSB0YWJsZSBjaGVja3MpIGFyZSBzdWZmaWNpZW50IGZvciB2YWxpZGF0aW5nIHRoaXMgZnVuY3Rpb25hbGl0eSwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGRldGVjdGFibGUgb25seSBieSBLTVNBTiBhcmUgaW50cm9kdWNlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBlZTdiNjU4MTY1OTJkYjhiOTlmYWVmMmY0OTIzZTgyMWRkNWJjZWMxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMTAgMDI6NDg6MTQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9raHVnZXBhZ2VkLmMgYi9tbS9raHVnZXBhZ2VkLmNcbmluZGV4IDc1NjM5Mjk4ZWZjMjcuLmU2OTQ3ZmUxNDJlZWEgMTAwNjQ0XG4tLS0gYS9tbS9raHVnZXBhZ2VkLmNcbisrKyBiL21tL2todWdlcGFnZWQuY1xuQEAgLTE4OTQsNiArMTg5NCwxMyBAQCBzdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCB0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHAoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnblxuIFx0aWYgKHVzZXJmYXVsdGZkX3Byb3RlY3RlZCh2bWEpKVxuIFx0XHRyZXR1cm4gU0NBTl9QVEVfVUZGRDtcbiBcbitcdC8qXG4rXHQgKiBVc2VyZmF1bHRmZC1taW5vci1yZWdpc3RlcmVkIFZNQXMgc2hvdWxkIG5vdCBiZSBjb2xsYXBzZWQsIGFzXG4rXHQgKiB1c2Vyc3BhY2UgaXMgZXhwZWN0aW5nIHRvIGV4cGxpY2l0bHkgaW5zdGFsbCBQVEVzLlxuK1x0ICovXG4rXHRpZiAodXNlcmZhdWx0ZmRfbWlub3Iodm1hKSlcbitcdFx0cmV0dXJuIFNDQU5fUFRFX1VGRkQ7XG4rXG4gXHRmb2xpbyA9IGZpbGVtYXBfbG9ja19mb2xpbyh2bWEtXHUwMDNldm1fZmlsZS1cdTAwM2VmX21hcHBpbmcsXG4gXHRcdFx0ICAgICAgIGxpbmVhcl9wYWdlX2luZGV4KHZtYSwgaGFkZHIpKTtcbiBcdGlmIChJU19FUlIoZm9saW8pKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtdW5pdC10ZXN0cy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC11bml0LXRlc3RzLmNcbmluZGV4IGVmOWIzOTU2YmRjZmQuLjZmMjM2MGY5Yjc1ZGIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLXVuaXQtdGVzdHMuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC11bml0LXRlc3RzLmNcbkBAIC01MTgsMTkgKzUxOCwzNCBAQCBzdGF0aWMgdm9pZCB1ZmZkX3dwX2ZvcmtfcGluX3dpdGhfZXZlbnRfdGVzdCh1ZmZkX2dsb2JhbF90ZXN0X29wdHNfdCAqZ29wdHMsIHVmZlxuIFx0dWZmZF93cF9mb3JrX3Bpbl90ZXN0X2NvbW1vbihnb3B0cywgYXJncywgdHJ1ZSk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGNoZWNrX21lbW9yeV9jb250ZW50cyh1ZmZkX2dsb2JhbF90ZXN0X29wdHNfdCAqZ29wdHMsIGNoYXIgKnApXG4rc3RhdGljIGludCBfX2NoZWNrX21lbW9yeV9jb250ZW50cyh1bnNpZ25lZCBsb25nIG9mZnNldCxcbitcdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG4rXHRcdFx0XHQgICB1ZmZkX2dsb2JhbF90ZXN0X29wdHNfdCAqZ29wdHMsXG4rXHRcdFx0XHQgICBjaGFyICpwKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgaSwgajtcbiBcdHVpbnQ4X3QgZXhwZWN0ZWRfYnl0ZTtcbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIGdvcHRzLVx1MDAzZW5yX3BhZ2VzOyArK2kpIHtcbitcdGlmIChucl9wYWdlcyArIG9mZnNldCBcdTAwM2MgbnJfcGFnZXMpXG4rXHRcdGVycihcIm92ZXJmbG93IGluIG1lbW9yeSBjaGVja1wiKTtcbitcdGlmIChucl9wYWdlcyArIG9mZnNldCBcdTAwM2UgZ29wdHMtXHUwMDNlbnJfcGFnZXMpXG4rXHRcdGVycihcIm91dCBvZiBib3VuZHMgbWVtb3J5IGNoZWNrXCIpO1xuK1xuK1x0Zm9yIChpID0gb2Zmc2V0OyBpIFx1MDAzYyBvZmZzZXQgKyBucl9wYWdlczsgKytpKSB7XG4gXHRcdGV4cGVjdGVkX2J5dGUgPSB+KCh1aW50OF90KShpICUgKCh1aW50OF90KS0xKSkpO1xuIFx0XHRmb3IgKGogPSAwOyBqIFx1MDAzYyBnb3B0cy1cdTAwM2VwYWdlX3NpemU7IGorKykge1xuIFx0XHRcdHVpbnQ4X3QgdiA9ICoodWludDhfdCAqKShwICsgKGkgKiBnb3B0cy1cdTAwM2VwYWdlX3NpemUpICsgaik7XG4gXHRcdFx0aWYgKHYgIT0gZXhwZWN0ZWRfYnl0ZSlcbi1cdFx0XHRcdGVycihcInVuZXhwZWN0ZWQgcGFnZSBjb250ZW50c1wiKTtcbitcdFx0XHRcdHJldHVybiAxO1xuIFx0XHR9XG4gXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBjaGVja19tZW1vcnlfY29udGVudHModWZmZF9nbG9iYWxfdGVzdF9vcHRzX3QgKmdvcHRzLCBjaGFyICpwKVxuK3tcbitcdHJldHVybiBfX2NoZWNrX21lbW9yeV9jb250ZW50cygwLCBnb3B0cy1cdTAwM2Vucl9wYWdlcywgZ29wdHMsIHApO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCB1ZmZkX21pbm9yX3Rlc3RfY29tbW9uKHVmZmRfZ2xvYmFsX3Rlc3Rfb3B0c190ICpnb3B0cywgYm9vbCB0ZXN0X2NvbGxhcHNlLCBib29sIHRlc3Rfd3ApXG5AQCAtNTM5LDYgKzU1NCw4IEBAIHN0YXRpYyB2b2lkIHVmZmRfbWlub3JfdGVzdF9jb21tb24odWZmZF9nbG9iYWxfdGVzdF9vcHRzX3QgKmdvcHRzLCBib29sIHRlc3RfY29sXG4gXHRwdGhyZWFkX3QgdWZmZF9tb247XG4gXHRjaGFyIGMgPSAnXFwwJztcbiBcdHN0cnVjdCB1ZmZkX2FyZ3MgYXJncyA9IHsgMCB9O1xuK1x0dW5zaWduZWQgbG9uZyBjaGVja2VkID0gMDtcbitcdGJvb2wgYmFkX2NvbnRlbnRzO1xuIFx0YXJncy5nb3B0cyA9IGdvcHRzO1xuIFxuIFx0LypcbkBAIC01NjQsMjQgKzU4MSw2NSBAQCBzdGF0aWMgdm9pZCB1ZmZkX21pbm9yX3Rlc3RfY29tbW9uKHVmZmRfZ2xvYmFsX3Rlc3Rfb3B0c190ICpnb3B0cywgYm9vbCB0ZXN0X2NvbFxuIFx0aWYgKHB0aHJlYWRfY3JlYXRlKFx1MDAyNnVmZmRfbW9uLCBOVUxMLCB1ZmZkX3BvbGxfdGhyZWFkLCBcdTAwMjZhcmdzKSlcbiBcdFx0ZXJyKFwidWZmZF9wb2xsX3RocmVhZCBjcmVhdGVcIik7XG4gXG4rXHRpZiAodGVzdF9jb2xsYXBzZSkge1xuK1x0XHQvKlxuK1x0XHQgKiBSZWFkIGp1c3QgYSBzaW5nbGUgcGFnZSBhbmQgdHJ5IGNvbGxhcHNpbmcuIFRoZSBjb2xsYXBzZVxuK1x0XHQgKiBzaG91bGQgZWl0aGVyIGJlIHJlamVjdGVkIG9yIGJlIGEgbm8tb3AuXG4rXHRcdCAqL1xuK1x0XHRpZiAoX19jaGVja19tZW1vcnlfY29udGVudHMoMCwgMSwgZ29wdHMsIGdvcHRzLVx1MDAzZWFyZWFfZHN0X2FsaWFzKSlcbitcdFx0XHRlcnIoXCJ1bmV4cGVjdGVkIG1lbW9yeSBjb250ZW50cyBiZWZvcmUgY29sbGFwc2VcIik7XG4rXG4rXHRcdC8qIE1BRFZfQ09MTEFQU0UgbWlnaHQgcmV0dXJuIEVJTlZBTCBmb3IgdWZmZC1taW5vciBWTUFzLiAqL1xuK1x0XHRtYWR2aXNlKGdvcHRzLVx1MDAzZWFyZWFfZHN0X2FsaWFzLCBnb3B0cy1cdTAwM2Vucl9wYWdlcyAqIGdvcHRzLVx1MDAzZXBhZ2Vfc2l6ZSxcbitcdFx0XHRNQURWX0NPTExBUFNFKTtcbitcdFx0LypcbitcdFx0ICogSWYgdGhlIGFib3ZlIGNvbGxhcHNlIG1hcHBlZCBwYWdlcyB0aGF0IHdlcmUgbm90IGV4cGxpY2l0bHlcbitcdFx0ICogQ09OVElOVUUnZCwgdGhlIGJlbG93IF9fY2hlY2tfbWVtb3J5X2NvbnRlbnRzKCkgd2lsbCBub3RcbitcdFx0ICogZmF1bHQgb24gc29tZSBwYWdlcywgcmVzdWx0aW5nIGluIGluY29ycmVjdCBjb250ZW50cy4gVGhlXG4rXHRcdCAqIFBURSBmb3IgdGhlIGZpcnN0IHBhZ2UgbWF5IGdldCByZXRyYWN0ZWQsIHNvIGF2b2lkIGNoZWNraW5nXG4rXHRcdCAqIHRoYXQgcGFnZSwgYXMgd2UgbWlnaHQgdGFrZSBhIHNlY29uZCBmYXVsdCwgZmxpcHBpbmcgdGhlXG4rXHRcdCAqIGNvbnRlbnRzIGEgc2Vjb25kIHRpbWUuXG4rXHRcdCAqL1xuK1x0XHRjaGVja2VkID0gMTtcbitcdH1cbitcbiBcdC8qXG4gXHQgKiBSZWFkIGVhY2ggb2YgdGhlIHBhZ2VzIGJhY2sgdXNpbmcgdGhlIFVGRkQtcmVnaXN0ZXJlZCBtYXBwaW5nLiBXZVxuIFx0ICogZXhwZWN0IHRoYXQgdGhlIGZpcnN0IHRpbWUgd2UgdG91Y2ggYSBwYWdlLCBpdCB3aWxsIHJlc3VsdCBpbiBhIG1pbm9yXG4gXHQgKiBmYXVsdC4gdWZmZF9wb2xsX3RocmVhZCB3aWxsIHJlc29sdmUgdGhlIGZhdWx0IGJ5IGJpdC1mbGlwcGluZyB0aGVcbiBcdCAqIHBhZ2UncyBjb250ZW50cywgYW5kIHRoZW4gaXNzdWluZyBhIENPTlRJTlVFIGlvY3RsLlxuIFx0ICovXG4tXHRjaGVja19tZW1vcnlfY29udGVudHMoZ29wdHMsIGdvcHRzLVx1MDAzZWFyZWFfZHN0X2FsaWFzKTtcbitcdGJhZF9jb250ZW50cyA9ICEhX19jaGVja19tZW1vcnlfY29udGVudHMoY2hlY2tlZCwgZ29wdHMtXHUwMDNlbnJfcGFnZXMgLSBjaGVja2VkLFxuK1x0XHRcdFx0XHRcdCAgICBnb3B0cywgZ29wdHMtXHUwMDNlYXJlYV9kc3RfYWxpYXMpO1xuIFxuIFx0aWYgKHdyaXRlKGdvcHRzLVx1MDAzZXBpcGVmZFsxXSwgXHUwMDI2Yywgc2l6ZW9mKGMpKSAhPSBzaXplb2YoYykpXG4gXHRcdGVycihcInBpcGUgd3JpdGVcIik7XG4gXHRpZiAocHRocmVhZF9qb2luKHVmZmRfbW9uLCBOVUxMKSlcbiBcdFx0ZXJyKFwiam9pbigpIGZhaWxlZFwiKTtcbiBcbitcdGlmIChiYWRfY29udGVudHMgXHUwMDI2XHUwMDI2IHRlc3RfY29sbGFwc2UpIHtcbitcdFx0dWZmZF90ZXN0X2ZhaWwoXCJ1bmV4cGVjdGVkIG1lbW9yeSBjb250ZW50cyBhZnRlciBjb2xsYXBzZVwiKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0aWYgKGJhZF9jb250ZW50cykge1xuK1x0XHR1ZmZkX3Rlc3RfZmFpbChcInVuZXhwZWN0ZWQgbWVtb3J5IGNvbnRlbnRzXCIpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4gXHRpZiAodGVzdF9jb2xsYXBzZSkge1xuK1x0XHQvKlxuK1x0XHQgKiBNQURWX0NPTExBUFNFIHdpbGwgZmFpbCB1bmxlc3MgdXNlcmZhdWx0ZmQtbWlub3IgaXNcbitcdFx0ICogdW5yZWdpc3RlcmVkLlxuK1x0XHQgKi9cbitcdFx0aWYgKHVmZmRfdW5yZWdpc3Rlcihnb3B0cy1cdTAwM2V1ZmZkLCBnb3B0cy1cdTAwM2VhcmVhX2RzdF9hbGlhcyxcbitcdFx0XHRcdCAgICBnb3B0cy1cdTAwM2Vucl9wYWdlcyAqIGdvcHRzLVx1MDAzZXBhZ2Vfc2l6ZSkpXG4rXHRcdFx0ZXJyKFwidWZmZF91bnJlZ2lzdGVyIGJlZm9yZSBNQURWX0NPTExBUFNFIGZhaWxlZFwiKTtcbitcbitcdFx0LyogTUFEVl9DT0xMQVBTRSBzaG91bGQgc3VjY2VlZCB3aXRoIHVzZXJmYXVsdGZkIHVucmVnaXN0ZXJlZC4gKi9cbiBcdFx0aWYgKG1hZHZpc2UoZ29wdHMtXHUwMDNlYXJlYV9kc3RfYWxpYXMsIGdvcHRzLVx1MDAzZW5yX3BhZ2VzICogZ29wdHMtXHUwMDNlcGFnZV9zaXplLFxuIFx0XHRcdCAgICBNQURWX0NPTExBUFNFKSkge1xuLVx0XHRcdC8qIEl0J3MgZmluZSB0byBmYWlsIGZvciB0aGlzIG9uZS4uLiAqL1xuLVx0XHRcdHVmZmRfdGVzdF9za2lwKFwiTUFEVl9DT0xMQVBTRSBmYWlsZWRcIik7XG4rXHRcdFx0dWZmZF90ZXN0X2ZhaWwoXCJNQURWX0NPTExBUFNFIGZhaWxlZFwiKTtcbiBcdFx0XHRyZXR1cm47XG4gXHRcdH1cbiBcbkBAIC01OTMsNyArNjUxLDEwIEBAIHN0YXRpYyB2b2lkIHVmZmRfbWlub3JfdGVzdF9jb21tb24odWZmZF9nbG9iYWxfdGVzdF9vcHRzX3QgKmdvcHRzLCBib29sIHRlc3RfY29sXG4gXHRcdCAqIFRoaXMgd29uJ3QgY2F1c2UgdWZmZC1mYXVsdCAtIGl0IHB1cmVseSBqdXN0IG1ha2VzIHN1cmUgdGhlcmVcbiBcdFx0ICogd2FzIG5vIGNvcnJ1cHRpb24uXG4gXHRcdCAqL1xuLVx0XHRjaGVja19tZW1vcnlfY29udGVudHMoZ29wdHMsIGdvcHRzLVx1MDAzZWFyZWFfZHN0X2FsaWFzKTtcbitcdFx0aWYgKGNoZWNrX21lbW9yeV9jb250ZW50cyhnb3B0cywgZ29wdHMtXHUwMDNlYXJlYV9kc3RfYWxpYXMpKSB7XG4rXHRcdFx0dWZmZF90ZXN0X2ZhaWwoXCJ1bmV4cGVjdGVkIG1lbW9yeSBjb250ZW50c1wiKTtcbitcdFx0XHRyZXR1cm47XG4rXHRcdH1cbiBcdH1cbiBcbiBcdGlmIChhcmdzLm1pc3NpbmdfZmF1bHRzICE9IDAgfHwgYXJncy5taW5vcl9mYXVsdHMgIT0gZ29wdHMtXHUwMDNlbnJfcGFnZXMpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwMjo0OToyNi4yNTY1NTU4ODRaIiwiU2VxIjozOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTMzMDM1NDQ3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBvdGVudGlhbCBOZWVkIGZvciBEZWRpY2F0ZWQgS01TQU4gRnV6emluZyoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBnaXZlbiBhIGtlcm5lbCBwYXRjaCBhbmQgSSBuZWVkIHRvIGRldGVybWluZSBpZiBpdCB3YXJyYW50cyBpdHMgb3duIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIExldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEknbGwgZXhhbWluZSB0aGUgcGF0Y2ggaXRzZWxmLlxuXG5SaWdodCwgdGhlIGRpZmYgc2hvd3MgYSBtb2RpZmljYXRpb24gdG8gYG1tL2todWdlcGFnZWQuY2AuIEl0IGxvb2tzIGxpa2UgdGhleSd2ZSBhZGRlZCBhIG5ldyBjaGVjayB3aXRoaW4gYHRyeV9jb2xsYXBzZV9wdGVfbWFwcGVkX3RocGAuIFNwZWNpZmljYWxseSwgdGhleSdyZSBub3cgcHJldmVudGluZyB0aGUgY29sbGFwc2luZyBvZiBUSFBzIChUcmFuc3BhcmVudCBIdWdlIFBhZ2VzKSBpZiBhIFZNQSAoVmlydHVhbCBNZW1vcnkgQXJlYSkgaXMgYXNzb2NpYXRlZCB3aXRoIGEgYHVzZXJmYXVsdGZkX21pbm9yYCByZWdpc3RyYXRpb24uIFRoZSBjb21tZW50IG1lbnRpb25zIHRoYXQgdXNlciBzcGFjZSBleHBlY3RzIHRvIGV4cGxpY2l0bHkgaW5zdGFsbCBQVEVzIGluIHRoZXNlIGNhc2VzLCBzbyBjb2xsYXBzaW5nIHdvdWxkIGJlIGluY29ycmVjdC5cblxuVGhlcmUncyBhbHNvIGEgbm90ZSBhYm91dCBzZWxmdGVzdCB1cGRhdGVzIGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLXVuaXQtdGVzdHMuY2AuIFRoYXQncyBnb29kLCBpdCBtZWFucyB0aGV5J3JlIGFkZGluZyB0ZXN0cywgd2hpY2ggaW5jcmVhc2VzIG15IGNvbmZpZGVuY2UgdGhhdCB0aGUgaW50ZW5kZWQgYmVoYXZpb3IgaXMgY29ycmVjdGx5IGltcGxlbWVudGVkLlxuXG5Ob3csIG15IGZvY3VzIGlzIG9uIGB0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHBgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcG90ZW50aWFsIEtNU0FOIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNvZGUgcGF0aC4gSSdsbCBlaXRoZXIgZ3JlcCBmb3IgcmVsYXRlZCByZWZlcmVuY2VzIG9yIGp1c3QgcmVhZCB0aGUgY29kZSBvZiB0aGF0IGZ1bmN0aW9uLiBJJ20gbG9va2luZyBmb3Igd2hlcmUgdGhpcyBuZXcgYHVzZXJmYXVsdGZkX21pbm9yYCBjaGVjayBpcyBpbnRlZ3JhdGVkIGludG8gdGhlIGxhcmdlciBwcm9jZXNzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGF0YSBmbG93cywgcG90ZW50aWFsIHJhY2VzLCBhbmQgYXJlYXMgd2hlcmUgdGhpcyBuZXcgbG9naWMgY291bGQgaW50cm9kdWNlIG1lbW9yeSBzYWZldHkgaXNzdWVzLiBJcyB0aGlzIG5ldyBjaGVjayBzdWZmaWNpZW50LCBvciBkb2VzIGl0IGludHJvZHVjZSBhbiBlZGdlIGNhc2UgdGhhdCBuZWVkcyBkZWRpY2F0ZWQgYXR0ZW50aW9uIHVuZGVyIGZ1enppbmc/IFNwZWNpZmljYWxseSwgSSdsbCBuZWVkIHRvIHRoaW5rIGFib3V0OlxuXG4qICAgSG93IGlzIHRoZSBgdXNlcmZhdWx0ZmRfbWlub3JgIGZsYWcgc2V0IGFuZCByZXNldD8gSXMgdGhlcmUgYSByYWNlIGNvbmRpdGlvbiB3aXRoIGl0P1xuKiAgIEFyZSB0aGVyZSBvdGhlciByZWxhdGVkIGRhdGEgc3RydWN0dXJlcyB0aGF0IGFyZSB1cGRhdGVkIGFsb25nc2lkZSB3aXRoIHRoZSBWTUE/XG4qICAgSG93IGlzIHRoaXMgY2hlY2sgY29vcmRpbmF0ZWQgd2l0aGluIHRoZSBraHVnZXBhZ2VkIGJhY2tncm91bmQgdGhyZWFkP1xuXG5UaGUgZ29hbCBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBjaGFuZ2UgbWlnaHQgaW50cm9kdWNlIGEgbmV3IG1lbW9yeSBlcnJvciBzdXJmYWNlLCBvciBhIG5ldyB3YXkgdG8gdHJpZ2dlciBhbiBleGlzdGluZyBlcnJvciwgdGhhdCBLTVNBTiB3b3VsZCBjYXRjaCAqaWYqIGl0IHdhcyBmdXp6ZWQgd2l0aCB0aGlzIGNvZGUgaW4gbWluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzkyNSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3NywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDAyOjQ5OjMxLjU4NjkxMjk3N1oiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTczNjI0MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2todWdlcGFnZWQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9raHVnZXBhZ2VkLmM9MTgxNT1zdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBzZXRfaHVnZV9wbWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0xODUwLVxcbm1tL2todWdlcGFnZWQuYzoxODUxOnN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IHRyeV9jb2xsYXBzZV9wdGVfbWFwcGVkX3RocChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbm1tL2todWdlcGFnZWQuYy0xODUyLVxcdFxcdGJvb2wgaW5zdGFsbF9wbWQpXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmM9MjA5Nj12b2lkIGNvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMjA5OC17XFxubW0va2h1Z2VwYWdlZC5jOjIwOTk6XFx0dHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwKG1tLCBhZGRyLCBpbnN0YWxsX3BtZCk7XFxubW0va2h1Z2VwYWdlZC5jLTIxMDAtfVxcbi0tXFxubW0va2h1Z2VwYWdlZC5jPTIyNDk9c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2VfZmlsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTI2MjgtXFx0ICogUmVtb3ZlIHB0ZSBwYWdlIHRhYmxlcywgc28gd2UgY2FuIHJlLWZhdWx0IHRoZSBwYWdlIGFzIGh1Z2UuXFxubW0va2h1Z2VwYWdlZC5jOjI2Mjk6XFx0ICogSWYgTUFEVl9DT0xMQVBTRSwgYWRqdXN0IHJlc3VsdCB0byBjYWxsIHRyeV9jb2xsYXBzZV9wdGVfbWFwcGVkX3RocCgpLlxcbm1tL2todWdlcGFnZWQuYy0yNjMwLVxcdCAqL1xcbi0tXFxubW0va2h1Z2VwYWdlZC5jPTI3OTE9c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2Vfc2luZ2xlX3BtZCh1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMjgzNS1cXHRcXHRlbHNlXFxubW0va2h1Z2VwYWdlZC5jOjI4MzY6XFx0XFx0XFx0cmVzdWx0ID0gdHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwKG1tLCBhZGRyLFxcbm1tL2todWdlcGFnZWQuYy0yODM3LVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIWNjLVxcdTAwM2Vpc19raHVnZXBhZ2VkKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDI6NDk6MzEuNjQ0MjgxMTg3WiIsIlNlcSI6NDEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyMzA1NTY0MDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgaGFwcGVuaW5nIGFyb3VuZCBsaW5lIDE4OTQgaW4gYG1tL2todWdlcGFnZWQuY2AuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoZXJlJ3MgYSBzcGVjaWZpYyBmdW5jdGlvbiBvciBsb2dpYyBiZWluZyBleGVjdXRlZCB0aGVyZSB3aXRoaW4gdGhlIGtlcm5lbCdzIGh1Z2UgcGFnZSBtYW5hZ2VtZW50LiBHaXZlbiB0aGUgZmlsZSwgaXQncyBoaWdobHkgbGlrZWx5IHRoaXMgY29kZSBkZWFscyB3aXRoIHRoZSBrSHVnZXBhZ2VkIGRhZW1vbiwgYW5kIGhvdyBpdCBtYW5hZ2VzIG9yIGludGVyYWN0cyB3aXRoIGh1Z2UgcGFnZXMuIEknbGwgbmVlZCB0byBsb29rIGZvciBjYWxscyB0byB0aGUgZnVuY3Rpb24sIGFzIHdlbGwgYXMgdGhlIHN1cnJvdW5kaW5nIHZhcmlhYmxlIGFzc2lnbm1lbnRzLiBJIHN1c3BlY3QgdGhlcmUgbWF5IGJlIGludGVyYWN0aW9ucyBhcm91bmQgdGhlIGBraHVnZXBhZ2VkYCBkYWVtb24gYW5kIGhvdyBpdCBpcyBpbnRlcmFjdGluZyB3aXRoIHRoZSBtZW1vcnkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUyNzYsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwMjo0OTozMy44NzQ4NDA3OFoiLCJTZXEiOjQyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDgzMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0va2h1Z2VwYWdlZC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE4ODAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE4ODA6XFx0XFx0LypcXG4xODgxOlxcdFxcdCAqIElmIHdlIGFyZSBoZXJlLCB3ZSd2ZSBzdWNjZWVkZWQgaW4gcmVwbGFjaW5nIGFsbCB0aGUgbmF0aXZlIHBhZ2VzXFxuMTg4MjpcXHRcXHQgKiBpbiB0aGUgcGFnZSBjYWNoZSB3aXRoIGEgc2luZ2xlIGh1Z2VwYWdlLiBJZiBhIG1tIHdlcmUgdG8gZmF1bHQtaW5cXG4xODgzOlxcdFxcdCAqIHRoaXMgbWVtb3J5IChtYXBwZWQgYnkgYSBzdWl0YWJseSBhbGlnbmVkIFZNQSksIHdlJ2QgZ2V0IHRoZSBodWdlcGFnZVxcbjE4ODQ6XFx0XFx0ICogYW5kIG1hcCBpdCBieSBhIFBNRCwgcmVnYXJkbGVzcyBvZiBzeXNmcyBUSFAgc2V0dGluZ3MuIEFzIHN1Y2gsIGxldCdzXFxuMTg4NTpcXHRcXHQgKiBhbmFsb2dvdXNseSBlbGlkZSBzeXNmcyBUSFAgc2V0dGluZ3MgaGVyZSBhbmQgZm9yY2UgY29sbGFwc2UuXFxuMTg4NjpcXHRcXHQgKi9cXG4xODg3OlxcdFxcdGlmICghdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXIodm1hLCB2bWEtXFx1MDAzZXZtX2ZsYWdzLCBUVkFfRk9SQ0VEX0NPTExBUFNFLCBQTURfT1JERVIpKVxcbjE4ODg6XFx0XFx0XFx0cmV0dXJuIFNDQU5fVk1BX0NIRUNLO1xcbjE4ODk6XFx0XFxuMTg5MDpcXHRcXHQvKlxcbjE4OTE6XFx0XFx0ICogS2VlcCBwbWQgcGd0YWJsZSB3aGlsZSB0aGUgdWZmZCBiaXQgaXMgaW4gdXNlOyBzZWUgY29tbWVudCBpblxcbjE4OTI6XFx0XFx0ICogcmV0cmFjdF9wYWdlX3RhYmxlcygpLlxcbjE4OTM6XFx0XFx0ICovXFxuMTg5NDpcXHRcXHRpZiAodXNlcmZhdWx0ZmRfcHJvdGVjdGVkKHZtYSkpXFxuMTg5NTpcXHRcXHRcXHRyZXR1cm4gU0NBTl9QVEVfVUZGRDtcXG4xODk2OlxcdFxcbjE4OTc6XFx0XFx0LypcXG4xODk4OlxcdFxcdCAqIFVzZXJmYXVsdGZkLW1pbm9yLXJlZ2lzdGVyZWQgVk1BcyBzaG91bGQgbm90IGJlIGNvbGxhcHNlZCwgYXNcXG4xODk5OlxcdFxcdCAqIHVzZXJzcGFjZSBpcyBleHBlY3RpbmcgdG8gZXhwbGljaXRseSBpbnN0YWxsIFBURXMuXFxuMTkwMDpcXHRcXHQgKi9cXG4xOTAxOlxcdFxcdGlmICh1c2VyZmF1bHRmZF9taW5vcih2bWEpKVxcbjE5MDI6XFx0XFx0XFx0cmV0dXJuIFNDQU5fUFRFX1VGRkQ7XFxuMTkwMzpcXHRcXG4xOTA0OlxcdFxcdGZvbGlvID0gZmlsZW1hcF9sb2NrX2ZvbGlvKHZtYS1cXHUwMDNldm1fZmlsZS1cXHUwMDNlZl9tYXBwaW5nLFxcbjE5MDU6XFx0XFx0XFx0XFx0ICAgICAgIGxpbmVhcl9wYWdlX2luZGV4KHZtYSwgaGFkZHIpKTtcXG4xOTA2OlxcdFxcdGlmIChJU19FUlIoZm9saW8pKVxcbjE5MDc6XFx0XFx0XFx0cmV0dXJuIFNDQU5fUEFHRV9OVUxMO1xcbjE5MDg6XFx0XFxuMTkwOTpcXHRcXHRpZiAoIWlzX3BtZF9vcmRlcihmb2xpb19vcmRlcihmb2xpbykpKSB7XFxuMTkxMDpcXHRcXHRcXHRyZXN1bHQgPSBTQ0FOX1BBR0VfQ09NUE9VTkQ7XFxuMTkxMTpcXHRcXHRcXHRnb3RvIGRyb3BfZm9saW87XFxuMTkxMjpcXHRcXHR9XFxuMTkxMzpcXHRcXG4xOTE0OlxcdFxcdHJlc3VsdCA9IGZpbmRfcG1kX29yX3RocF9vcl9ub25lKG1tLCBoYWRkciwgXFx1MDAyNnBtZCk7XFxuMTkxNTpcXHRcXHRzd2l0Y2ggKHJlc3VsdCkge1xcbjE5MTY6XFx0XFx0Y2FzZSBTQ0FOX1NVQ0NFRUQ6XFxuMTkxNzpcXHRcXHRcXHRicmVhaztcXG4xOTE4OlxcdFxcdGNhc2UgU0NBTl9OT19QVEVfVEFCTEU6XFxuMTkxOTpcXHRcXHRcXHQvKlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwMjo0OTozMy44NzUwNTA4N1oiLCJTZXEiOjQzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2MjEyMzc1MTQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoaXMgUGF0Y2g6IEtNU0FOIEV4ZW1wdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIHRoZSBwYXRjaCBpdHNlbGY6IGl0J3MgYSByZWxhdGl2ZWx5IGZvY3VzZWQgY2hhbmdlLiBJbiBgbW0va2h1Z2VwYWdlZC5jYCwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgdHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwKClgLCBpdCBpbnRyb2R1Y2VzIGEgY2hlY2sgdXNpbmcgYHVzZXJmYXVsdGZkX21pbm9yKHZtYSlgLiBUaGlzIGlzIGEgY3J1Y2lhbCBhZGRpdGlvbjsgaXQncyBkZXNpZ25lZCB0byBwcmV2ZW50IGNvbGxhcHNpbmcgUFRFLW1hcHBlZCBUSFBzIGlmIHRoZSBWTUEgaXMgcmVnaXN0ZXJlZCB3aXRoIGB1c2VyZmF1bHRmZC1taW5vcmAuIFRoZSByYXRpb25hbGUgaXMgc3RyYWlnaHRmb3J3YXJkOiBgdXNlcmZhdWx0ZmQtbWlub3JgIHJlbGllcyBvbiB1c2Vyc3BhY2UgZXhwbGljaXRseSBpbnN0YWxsaW5nIFBURXMgdmlhIGBVRkZESU9fQ09OVElOVUVgLCBzbyBhdXRvbWF0aWMgY29sbGFwc2luZyB3b3VsZCBiZSBwcm9ibGVtYXRpYy4gVGhlIHNlY29uZCBwYXJ0IG9mIHRoZSBwYXRjaCBqdXN0IHVwZGF0ZXMgc29tZSBzZWxmdGVzdHMgdG8gcmVmbGVjdCB0aGlzIG5ldyBiZWhhdmlvci5cblxuTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uOiBkb2VzIHRoaXMgdHJpZ2dlciBhbnkgS01TQU4gY29uY2VybnM/IExldCdzIGdvIHRocm91Z2ggdGhlIGNoZWNrbGlzdC4gVW5pbml0aWFsaXplZCBtZW1vcnkgb3IgcG90ZW50aWFsIGluZm9ybWF0aW9uIGxlYWtzIGFyZSBteSBwcmltYXJ5IGNvbmNlcm5zLiBEb2VzIHRoaXMgcGF0Y2ggaW52b2x2ZSBhbGxvY2F0aW5nICpuZXcqIG1lbW9yeT8gTm8sIHRoYXQncyBhIHNpbXBsZSBcIm5vLlwiIERvZXMgaXQgY29weSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlcnNwYWNlLCBvciByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBBZ2Fpbiwgbm8uIEl0IGRvZXNuJ3Qgc2VlbSB0byBhbHRlciBhbnkgYm91bmRzIGNoZWNrcywgbW9kaWZ5IGRhdGEgbGVuZ3RocyBpbiBhIHdheSB0aGF0IGNvdWxkIGxlYWQgdG8gaXNzdWVzLCBub3IgbW9kaWZ5IGFueSB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMuIFRoZXJlJ3Mgbm8gaW50cm9kdWN0aW9uIG9yIG1vZGlmaWNhdGlvbiBvZiBrZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXJzcGFjZSwgZWl0aGVyLiBBbHNvLCB0aGVyZSdzIG5vIGNvbmRpdGlvbmFsIGxvZ2ljIHRoYXQgZGVwZW5kcyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gV2UncmUgYWxzbyBub3QgaW50cm9kdWNpbmcgYW55IG5ldyB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgbWVtb3J5LlxuXG5Fc3NlbnRpYWxseSwgdGhpcyBpcyBhIGZsYWcgY2hlY2ssIG5vdCBhIGRhdGEgc3RydWN0dXJlIG1hbmlwdWxhdGlvbiBpc3N1ZS4gSXQncyBhIGNvbmRpdGlvbmFsIGJyYW5jaCBvbiBhbiBleGlzdGluZyBgdm1hYCBmbGFnLCBiYXNlZCBvbiB0aGUgYHVzZXJmYXVsdGZkX21pbm9yYCBmdW5jdGlvbiB0aGF0IGNoZWNrcyB0aGUgVk1BJ3MgZmxhZ3MuIFRoZSBmbGFnIGl0c2VsZiBpcyBpbml0aWFsaXplZCBlbHNld2hlcmUuIFRoZXJlZm9yZSwgc2luY2UgdGhlcmUncyBubyBldmlkZW5jZSBvZiBleHBvc2luZyBvciBpbnRyb2R1Y2luZyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIEtNU0FOIGlzIG5vdCBuZWNlc3NhcnkgaGVyZS4gVGhlIG1vcmUgc3RhbmRhcmQgbWVtb3J5IG1hbmFnZW1lbnQgY2hlY2tzIGFuZCB0ZXN0cywgbGlrZSBLQVNBTiwgTE9DS0RFUCwgTU0gdGVzdHMsIGFuZCBmdXp6aW5nIHNob3VsZCBoYW5kbGUgYW55IG90aGVyIHBvdGVudGlhbCBpc3N1ZXMgbGlrZSBwYWdlIHRhYmxlIG1hbmFnZW1lbnQsIFVBRiBpc3N1ZXMsIHJhY2UgY29uZGl0aW9ucywgb3IgbG9ja2luZyBwcm9ibGVtcy5cblxuSSdtIGNvbmZpZGVudCB3ZSBjYW4gdXNlIGBzZXQtcmVzdWx0c2AgdG8gaW5kaWNhdGUgS01TQU4gaXMgbm90IHJlbGV2YW50IGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYxMzIsIk91dHB1dFRva2VucyI6MTg3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzU5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDI6NDk6NDAuMDg3NDI4MTkxWiIsIlNlcSI6NDQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUxMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgY2hlY2sgKGB1c2VyZmF1bHRmZF9taW5vcih2bWEpYCkgaW4gYHRyeV9jb2xsYXBzZV9wdGVfbWFwcGVkX3RocCgpYCB0byBwcmV2ZW50IGNvbGxhcHNpbmcgUFRFLW1hcHBlZCBUSFBzIG9uIFZNQXMgcmVnaXN0ZXJlZCB3aXRoIHVzZXJmYXVsdGZkLW1pbm9yIG1vZGUsIGFsb25nIHdpdGggY29ycmVzcG9uZGluZyBzZWxmdGVzdCB1cGRhdGVzIGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLXVuaXQtdGVzdHMuY2AuIFxcblxcblRoaXMgbW9kaWZpY2F0aW9uIGRvZXMgbm90IGFsbG9jYXRlIG5ldyBidWZmZXJzLCBtYW5pcHVsYXRlIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBkYXRhLCBhbHRlciBwYWRkaW5nIG9yIHN0cnVjdHVyZSBmaWVsZHMgY29waWVkIHRvIHVzZXJzcGFjZSwgb3IgY2hhbmdlIGFueSBkYXRhIGxlbmd0aHMvYm91bmRzIGNoZWNraW5nIHRoYXQgY291bGQgbGVhZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBsZWFrcy4gU3RhbmRhcmQgc2FuaXRpemVycyBhbmQgYnVnIGRldGVjdG9ycyAoc3VjaCBhcyBLQVNBTiBhbmQgcGFnZSB0YWJsZSBjaGVja3MpIGFyZSBzdWZmaWNpZW50IGZvciB2YWxpZGF0aW5nIHRoaXMgZnVuY3Rpb25hbGl0eSwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGRldGVjdGFibGUgb25seSBieSBLTVNBTiBhcmUgaW50cm9kdWNlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgY2hlY2sgKGB1c2VyZmF1bHRmZF9taW5vcih2bWEpYCkgaW4gYHRyeV9jb2xsYXBzZV9wdGVfbWFwcGVkX3RocCgpYCB0byBwcmV2ZW50IGNvbGxhcHNpbmcgUFRFLW1hcHBlZCBUSFBzIG9uIFZNQXMgcmVnaXN0ZXJlZCB3aXRoIHVzZXJmYXVsdGZkLW1pbm9yIG1vZGUsIGFsb25nIHdpdGggY29ycmVzcG9uZGluZyBzZWxmdGVzdCB1cGRhdGVzIGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLXVuaXQtdGVzdHMuY2AuIFxcblxcblRoaXMgbW9kaWZpY2F0aW9uIGRvZXMgbm90IGFsbG9jYXRlIG5ldyBidWZmZXJzLCBtYW5pcHVsYXRlIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBkYXRhLCBhbHRlciBwYWRkaW5nIG9yIHN0cnVjdHVyZSBmaWVsZHMgY29waWVkIHRvIHVzZXJzcGFjZSwgb3IgY2hhbmdlIGFueSBkYXRhIGxlbmd0aHMvYm91bmRzIGNoZWNraW5nIHRoYXQgY291bGQgbGVhZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBsZWFrcy4gU3RhbmRhcmQgc2FuaXRpemVycyBhbmQgYnVnIGRldGVjdG9ycyAoc3VjaCBhcyBLQVNBTiBhbmQgcGFnZSB0YWJsZSBjaGVja3MpIGFyZSBzdWZmaWNpZW50IGZvciB2YWxpZGF0aW5nIHRoaXMgZnVuY3Rpb25hbGl0eSwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGRldGVjdGFibGUgb25seSBieSBLTVNBTiBhcmUgaW50cm9kdWNlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowfhxnv[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-10 02:47:04 +0000 UTC FinishedAt: 2026-09-10 02:49:41 +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": "5acbae5f7eb3d5275120abfe698c394b7325dcec", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TRANSPARENT_HUGEPAGE", "USERFAULTFD" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "5acbae5f7eb3d5275120abfe698c394b7325dcec", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TRANSPARENT_HUGEPAGE", "USERFAULTFD" ], "series_id": "eaf1d596-fa21-43e6-adef-9fa8eae996da" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "try_collapse_pte_mapped_thp", "collapse_pte_mapped_thp", "madvise_collapse", "collapse_single_pmd" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDAyOjQ4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDssCiAgICAmIzM0O1VTRVJGQVVMVEZEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwJiMzNDssCiAgICAmIzM0O2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwJiMzNDssCiAgICAmIzM0O21hZHZpc2VfY29sbGFwc2UmIzM0OywKICAgICYjMzQ7Y29sbGFwc2Vfc2luZ2xlX3BtZCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBjaGVjayAoYHVzZXJmYXVsdGZkX21pbm9yKHZtYSlgKSBpbiBgdHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwKClgIHRvIHByZXZlbnQgY29sbGFwc2luZyBQVEUtbWFwcGVkIFRIUHMgb24gVk1BcyByZWdpc3RlcmVkIHdpdGggdXNlcmZhdWx0ZmQtbWlub3IgbW9kZSwgYWxvbmcgd2l0aCBjb3JyZXNwb25kaW5nIHNlbGZ0ZXN0IHVwZGF0ZXMgaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtdW5pdC10ZXN0cy5jYC4gXG5cblRoaXMgbW9kaWZpY2F0aW9uIGRvZXMgbm90IGFsbG9jYXRlIG5ldyBidWZmZXJzLCBtYW5pcHVsYXRlIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBkYXRhLCBhbHRlciBwYWRkaW5nIG9yIHN0cnVjdHVyZSBmaWVsZHMgY29waWVkIHRvIHVzZXJzcGFjZSwgb3IgY2hhbmdlIGFueSBkYXRhIGxlbmd0aHMvYm91bmRzIGNoZWNraW5nIHRoYXQgY291bGQgbGVhZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBsZWFrcy4gU3RhbmRhcmQgc2FuaXRpemVycyBhbmQgYnVnIGRldGVjdG9ycyAoc3VjaCBhcyBLQVNBTiBhbmQgcGFnZSB0YWJsZSBjaGVja3MpIGFyZSBzdWZmaWNpZW50IGZvciB2YWxpZGF0aW5nIHRoaXMgZnVuY3Rpb25hbGl0eSwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGRldGVjdGFibGUgb25seSBieSBLTVNBTiBhcmUgaW50cm9kdWNlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMga2h1Z2VwYWdlZCBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IChtbS9raHVnZXBhZ2VkLmMpIHRvIHByZXZlbnQgY29sbGFwc2luZyBQVEUtbWFwcGVkIHRyYW5zcGFyZW50IGh1Z2VwYWdlcyBmb3IgVk1BcyByZWdpc3RlcmVkIHdpdGggdXNlcmZhdWx0ZmQgbWlub3IgZmF1bHQgaGFuZGxpbmcgKHVzZXJmYXVsdGZkX21pbm9yKS4gVGhpcyBpcyByZWFjaGFibGUgdmlhIHVzZXJmYXVsdGZkIHN5c2NhbGxzIGFuZCBNQURWX0NPTExBUFNFIG1hZHZpc2UgY2FsbHMgb3IgYmFja2dyb3VuZCBraHVnZXBhZ2VkIGNvbGxhcHNlIGFuZCB3YXJyYW50cyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDAyOjQ4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZWU3YjY1ODE2NTkyZGI4Yjk5ZmFlZjJmNDkyM2U4MjFkZDViY2VjMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDEwIDAyOjQ4OjE0IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2todWdlcGFnZWQuYyBiL21tL2todWdlcGFnZWQuY1xuaW5kZXggNzU2MzkyOThlZmMyNy4uZTY5NDdmZTE0MmVlYSAxMDA2NDRcbi0tLSBhL21tL2todWdlcGFnZWQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0va2h1Z2VwYWdlZC5jXG5AQCAtMTg5NCw2ICYjNDM7MTg5NCwxMyBAQCBzdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCB0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHAoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnblxuIFx0aWYgKHVzZXJmYXVsdGZkX3Byb3RlY3RlZCh2bWEpKVxuIFx0XHRyZXR1cm4gU0NBTl9QVEVfVUZGRDtcbiBcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFVzZXJmYXVsdGZkLW1pbm9yLXJlZ2lzdGVyZWQgVk1BcyBzaG91bGQgbm90IGJlIGNvbGxhcHNlZCwgYXNcbiYjNDM7XHQgKiB1c2Vyc3BhY2UgaXMgZXhwZWN0aW5nIHRvIGV4cGxpY2l0bHkgaW5zdGFsbCBQVEVzLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmICh1c2VyZmF1bHRmZF9taW5vcih2bWEpKVxuJiM0MztcdFx0cmV0dXJuIFNDQU5fUFRFX1VGRkQ7XG4mIzQzO1xuIFx0Zm9saW8gPSBmaWxlbWFwX2xvY2tfZm9saW8odm1hLVx1MDAzZXZtX2ZpbGUtXHUwMDNlZl9tYXBwaW5nLFxuIFx0XHRcdCAgICAgICBsaW5lYXJfcGFnZV9pbmRleCh2bWEsIGhhZGRyKSk7XG4gXHRpZiAoSVNfRVJSKGZvbGlvKSlcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLXVuaXQtdGVzdHMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtdW5pdC10ZXN0cy5jXG5pbmRleCBlZjliMzk1NmJkY2ZkLi42ZjIzNjBmOWI3NWRiIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC11bml0LXRlc3RzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtdW5pdC10ZXN0cy5jXG5AQCAtNTE4LDE5ICYjNDM7NTE4LDM0IEBAIHN0YXRpYyB2b2lkIHVmZmRfd3BfZm9ya19waW5fd2l0aF9ldmVudF90ZXN0KHVmZmRfZ2xvYmFsX3Rlc3Rfb3B0c190ICpnb3B0cywgdWZmXG4gXHR1ZmZkX3dwX2ZvcmtfcGluX3Rlc3RfY29tbW9uKGdvcHRzLCBhcmdzLCB0cnVlKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgY2hlY2tfbWVtb3J5X2NvbnRlbnRzKHVmZmRfZ2xvYmFsX3Rlc3Rfb3B0c190ICpnb3B0cywgY2hhciAqcClcbiYjNDM7c3RhdGljIGludCBfX2NoZWNrX21lbW9yeV9jb250ZW50cyh1bnNpZ25lZCBsb25nIG9mZnNldCxcbiYjNDM7XHRcdFx0XHQgICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxuJiM0MztcdFx0XHRcdCAgIHVmZmRfZ2xvYmFsX3Rlc3Rfb3B0c190ICpnb3B0cyxcbiYjNDM7XHRcdFx0XHQgICBjaGFyICpwKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgaSwgajtcbiBcdHVpbnQ4X3QgZXhwZWN0ZWRfYnl0ZTtcbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIGdvcHRzLVx1MDAzZW5yX3BhZ2VzOyAmIzQzOyYjNDM7aSkge1xuJiM0MztcdGlmIChucl9wYWdlcyAmIzQzOyBvZmZzZXQgXHUwMDNjIG5yX3BhZ2VzKVxuJiM0MztcdFx0ZXJyKFwmIzM0O292ZXJmbG93IGluIG1lbW9yeSBjaGVja1wmIzM0Oyk7XG4mIzQzO1x0aWYgKG5yX3BhZ2VzICYjNDM7IG9mZnNldCBcdTAwM2UgZ29wdHMtXHUwMDNlbnJfcGFnZXMpXG4mIzQzO1x0XHRlcnIoXCYjMzQ7b3V0IG9mIGJvdW5kcyBtZW1vcnkgY2hlY2tcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSBvZmZzZXQ7IGkgXHUwMDNjIG9mZnNldCAmIzQzOyBucl9wYWdlczsgJiM0MzsmIzQzO2kpIHtcbiBcdFx0ZXhwZWN0ZWRfYnl0ZSA9IH4oKHVpbnQ4X3QpKGkgJSAoKHVpbnQ4X3QpLTEpKSk7XG4gXHRcdGZvciAoaiA9IDA7IGogXHUwMDNjIGdvcHRzLVx1MDAzZXBhZ2Vfc2l6ZTsgaiYjNDM7JiM0MzspIHtcbiBcdFx0XHR1aW50OF90IHYgPSAqKHVpbnQ4X3QgKikocCAmIzQzOyAoaSAqIGdvcHRzLVx1MDAzZXBhZ2Vfc2l6ZSkgJiM0Mzsgaik7XG4gXHRcdFx0aWYgKHYgIT0gZXhwZWN0ZWRfYnl0ZSlcbi1cdFx0XHRcdGVycihcJiMzNDt1bmV4cGVjdGVkIHBhZ2UgY29udGVudHNcJiMzNDspO1xuJiM0MztcdFx0XHRcdHJldHVybiAxO1xuIFx0XHR9XG4gXHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGNoZWNrX21lbW9yeV9jb250ZW50cyh1ZmZkX2dsb2JhbF90ZXN0X29wdHNfdCAqZ29wdHMsIGNoYXIgKnApXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gX19jaGVja19tZW1vcnlfY29udGVudHMoMCwgZ29wdHMtXHUwMDNlbnJfcGFnZXMsIGdvcHRzLCBwKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgdWZmZF9taW5vcl90ZXN0X2NvbW1vbih1ZmZkX2dsb2JhbF90ZXN0X29wdHNfdCAqZ29wdHMsIGJvb2wgdGVzdF9jb2xsYXBzZSwgYm9vbCB0ZXN0X3dwKVxuQEAgLTUzOSw2ICYjNDM7NTU0LDggQEAgc3RhdGljIHZvaWQgdWZmZF9taW5vcl90ZXN0X2NvbW1vbih1ZmZkX2dsb2JhbF90ZXN0X29wdHNfdCAqZ29wdHMsIGJvb2wgdGVzdF9jb2xcbiBcdHB0aHJlYWRfdCB1ZmZkX21vbjtcbiBcdGNoYXIgYyA9ICYjMzk7XFwwJiMzOTs7XG4gXHRzdHJ1Y3QgdWZmZF9hcmdzIGFyZ3MgPSB7IDAgfTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGNoZWNrZWQgPSAwO1xuJiM0MztcdGJvb2wgYmFkX2NvbnRlbnRzO1xuIFx0YXJncy5nb3B0cyA9IGdvcHRzO1xuIFxuIFx0LypcbkBAIC01NjQsMjQgJiM0Mzs1ODEsNjUgQEAgc3RhdGljIHZvaWQgdWZmZF9taW5vcl90ZXN0X2NvbW1vbih1ZmZkX2dsb2JhbF90ZXN0X29wdHNfdCAqZ29wdHMsIGJvb2wgdGVzdF9jb2xcbiBcdGlmIChwdGhyZWFkX2NyZWF0ZShcdTAwMjZ1ZmZkX21vbiwgTlVMTCwgdWZmZF9wb2xsX3RocmVhZCwgXHUwMDI2YXJncykpXG4gXHRcdGVycihcJiMzNDt1ZmZkX3BvbGxfdGhyZWFkIGNyZWF0ZVwmIzM0Oyk7XG4gXG4mIzQzO1x0aWYgKHRlc3RfY29sbGFwc2UpIHtcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBSZWFkIGp1c3QgYSBzaW5nbGUgcGFnZSBhbmQgdHJ5IGNvbGxhcHNpbmcuIFRoZSBjb2xsYXBzZVxuJiM0MztcdFx0ICogc2hvdWxkIGVpdGhlciBiZSByZWplY3RlZCBvciBiZSBhIG5vLW9wLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAoX19jaGVja19tZW1vcnlfY29udGVudHMoMCwgMSwgZ29wdHMsIGdvcHRzLVx1MDAzZWFyZWFfZHN0X2FsaWFzKSlcbiYjNDM7XHRcdFx0ZXJyKFwmIzM0O3VuZXhwZWN0ZWQgbWVtb3J5IGNvbnRlbnRzIGJlZm9yZSBjb2xsYXBzZVwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdFx0LyogTUFEVl9DT0xMQVBTRSBtaWdodCByZXR1cm4gRUlOVkFMIGZvciB1ZmZkLW1pbm9yIFZNQXMuICovXG4mIzQzO1x0XHRtYWR2aXNlKGdvcHRzLVx1MDAzZWFyZWFfZHN0X2FsaWFzLCBnb3B0cy1cdTAwM2Vucl9wYWdlcyAqIGdvcHRzLVx1MDAzZXBhZ2Vfc2l6ZSxcbiYjNDM7XHRcdFx0TUFEVl9DT0xMQVBTRSk7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogSWYgdGhlIGFib3ZlIGNvbGxhcHNlIG1hcHBlZCBwYWdlcyB0aGF0IHdlcmUgbm90IGV4cGxpY2l0bHlcbiYjNDM7XHRcdCAqIENPTlRJTlVFJiMzOTtkLCB0aGUgYmVsb3cgX19jaGVja19tZW1vcnlfY29udGVudHMoKSB3aWxsIG5vdFxuJiM0MztcdFx0ICogZmF1bHQgb24gc29tZSBwYWdlcywgcmVzdWx0aW5nIGluIGluY29ycmVjdCBjb250ZW50cy4gVGhlXG4mIzQzO1x0XHQgKiBQVEUgZm9yIHRoZSBmaXJzdCBwYWdlIG1heSBnZXQgcmV0cmFjdGVkLCBzbyBhdm9pZCBjaGVja2luZ1xuJiM0MztcdFx0ICogdGhhdCBwYWdlLCBhcyB3ZSBtaWdodCB0YWtlIGEgc2Vjb25kIGZhdWx0LCBmbGlwcGluZyB0aGVcbiYjNDM7XHRcdCAqIGNvbnRlbnRzIGEgc2Vjb25kIHRpbWUuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGNoZWNrZWQgPSAxO1xuJiM0MztcdH1cbiYjNDM7XG4gXHQvKlxuIFx0ICogUmVhZCBlYWNoIG9mIHRoZSBwYWdlcyBiYWNrIHVzaW5nIHRoZSBVRkZELXJlZ2lzdGVyZWQgbWFwcGluZy4gV2VcbiBcdCAqIGV4cGVjdCB0aGF0IHRoZSBmaXJzdCB0aW1lIHdlIHRvdWNoIGEgcGFnZSwgaXQgd2lsbCByZXN1bHQgaW4gYSBtaW5vclxuIFx0ICogZmF1bHQuIHVmZmRfcG9sbF90aHJlYWQgd2lsbCByZXNvbHZlIHRoZSBmYXVsdCBieSBiaXQtZmxpcHBpbmcgdGhlXG4gXHQgKiBwYWdlJiMzOTtzIGNvbnRlbnRzLCBhbmQgdGhlbiBpc3N1aW5nIGEgQ09OVElOVUUgaW9jdGwuXG4gXHQgKi9cbi1cdGNoZWNrX21lbW9yeV9jb250ZW50cyhnb3B0cywgZ29wdHMtXHUwMDNlYXJlYV9kc3RfYWxpYXMpO1xuJiM0MztcdGJhZF9jb250ZW50cyA9ICEhX19jaGVja19tZW1vcnlfY29udGVudHMoY2hlY2tlZCwgZ29wdHMtXHUwMDNlbnJfcGFnZXMgLSBjaGVja2VkLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgZ29wdHMsIGdvcHRzLVx1MDAzZWFyZWFfZHN0X2FsaWFzKTtcbiBcbiBcdGlmICh3cml0ZShnb3B0cy1cdTAwM2VwaXBlZmRbMV0sIFx1MDAyNmMsIHNpemVvZihjKSkgIT0gc2l6ZW9mKGMpKVxuIFx0XHRlcnIoXCYjMzQ7cGlwZSB3cml0ZVwmIzM0Oyk7XG4gXHRpZiAocHRocmVhZF9qb2luKHVmZmRfbW9uLCBOVUxMKSlcbiBcdFx0ZXJyKFwmIzM0O2pvaW4oKSBmYWlsZWRcJiMzNDspO1xuIFxuJiM0MztcdGlmIChiYWRfY29udGVudHMgXHUwMDI2XHUwMDI2IHRlc3RfY29sbGFwc2UpIHtcbiYjNDM7XHRcdHVmZmRfdGVzdF9mYWlsKFwmIzM0O3VuZXhwZWN0ZWQgbWVtb3J5IGNvbnRlbnRzIGFmdGVyIGNvbGxhcHNlXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChiYWRfY29udGVudHMpIHtcbiYjNDM7XHRcdHVmZmRfdGVzdF9mYWlsKFwmIzM0O3VuZXhwZWN0ZWQgbWVtb3J5IGNvbnRlbnRzXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0aWYgKHRlc3RfY29sbGFwc2UpIHtcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBNQURWX0NPTExBUFNFIHdpbGwgZmFpbCB1bmxlc3MgdXNlcmZhdWx0ZmQtbWlub3IgaXNcbiYjNDM7XHRcdCAqIHVucmVnaXN0ZXJlZC5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWYgKHVmZmRfdW5yZWdpc3Rlcihnb3B0cy1cdTAwM2V1ZmZkLCBnb3B0cy1cdTAwM2VhcmVhX2RzdF9hbGlhcyxcbiYjNDM7XHRcdFx0XHQgICAgZ29wdHMtXHUwMDNlbnJfcGFnZXMgKiBnb3B0cy1cdTAwM2VwYWdlX3NpemUpKVxuJiM0MztcdFx0XHRlcnIoXCYjMzQ7dWZmZF91bnJlZ2lzdGVyIGJlZm9yZSBNQURWX0NPTExBUFNFIGZhaWxlZFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdFx0LyogTUFEVl9DT0xMQVBTRSBzaG91bGQgc3VjY2VlZCB3aXRoIHVzZXJmYXVsdGZkIHVucmVnaXN0ZXJlZC4gKi9cbiBcdFx0aWYgKG1hZHZpc2UoZ29wdHMtXHUwMDNlYXJlYV9kc3RfYWxpYXMsIGdvcHRzLVx1MDAzZW5yX3BhZ2VzICogZ29wdHMtXHUwMDNlcGFnZV9zaXplLFxuIFx0XHRcdCAgICBNQURWX0NPTExBUFNFKSkge1xuLVx0XHRcdC8qIEl0JiMzOTtzIGZpbmUgdG8gZmFpbCBmb3IgdGhpcyBvbmUuLi4gKi9cbi1cdFx0XHR1ZmZkX3Rlc3Rfc2tpcChcJiMzNDtNQURWX0NPTExBUFNFIGZhaWxlZFwmIzM0Oyk7XG4mIzQzO1x0XHRcdHVmZmRfdGVzdF9mYWlsKFwmIzM0O01BRFZfQ09MTEFQU0UgZmFpbGVkXCYjMzQ7KTtcbiBcdFx0XHRyZXR1cm47XG4gXHRcdH1cbiBcbkBAIC01OTMsNyAmIzQzOzY1MSwxMCBAQCBzdGF0aWMgdm9pZCB1ZmZkX21pbm9yX3Rlc3RfY29tbW9uKHVmZmRfZ2xvYmFsX3Rlc3Rfb3B0c190ICpnb3B0cywgYm9vbCB0ZXN0X2NvbFxuIFx0XHQgKiBUaGlzIHdvbiYjMzk7dCBjYXVzZSB1ZmZkLWZhdWx0IC0gaXQgcHVyZWx5IGp1c3QgbWFrZXMgc3VyZSB0aGVyZVxuIFx0XHQgKiB3YXMgbm8gY29ycnVwdGlvbi5cbiBcdFx0ICovXG4tXHRcdGNoZWNrX21lbW9yeV9jb250ZW50cyhnb3B0cywgZ29wdHMtXHUwMDNlYXJlYV9kc3RfYWxpYXMpO1xuJiM0MztcdFx0aWYgKGNoZWNrX21lbW9yeV9jb250ZW50cyhnb3B0cywgZ29wdHMtXHUwMDNlYXJlYV9kc3RfYWxpYXMpKSB7XG4mIzQzO1x0XHRcdHVmZmRfdGVzdF9mYWlsKFwmIzM0O3VuZXhwZWN0ZWQgbWVtb3J5IGNvbnRlbnRzXCYjMzQ7KTtcbiYjNDM7XHRcdFx0cmV0dXJuO1xuJiM0MztcdFx0fVxuIFx0fVxuIFxuIFx0aWYgKGFyZ3MubWlzc2luZ19mYXVsdHMgIT0gMCB8fCBhcmdzLm1pbm9yX2ZhdWx0cyAhPSBnb3B0cy1cdTAwM2Vucl9wYWdlcylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwMjo0ODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7LAogICAgJiMzNDtVU0VSRkFVTFRGRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RyeV9jb2xsYXBzZV9wdGVfbWFwcGVkX3RocCYjMzQ7LAogICAgJiMzNDtjb2xsYXBzZV9wdGVfbWFwcGVkX3RocCYjMzQ7LAogICAgJiMzNDttYWR2aXNlX2NvbGxhcHNlJiMzNDssCiAgICAmIzM0O2NvbGxhcHNlX3NpbmdsZV9wbWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMga2h1Z2VwYWdlZCBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IChtbS9raHVnZXBhZ2VkLmMpIHRvIHByZXZlbnQgY29sbGFwc2luZyBQVEUtbWFwcGVkIHRyYW5zcGFyZW50IGh1Z2VwYWdlcyBmb3IgVk1BcyByZWdpc3RlcmVkIHdpdGggdXNlcmZhdWx0ZmQgbWlub3IgZmF1bHQgaGFuZGxpbmcgKHVzZXJmYXVsdGZkX21pbm9yKS4gVGhpcyBpcyByZWFjaGFibGUgdmlhIHVzZXJmYXVsdGZkIHN5c2NhbGxzIGFuZCBNQURWX0NPTExBUFNFIG1hZHZpc2UgY2FsbHMgb3IgYmFja2dyb3VuZCBraHVnZXBhZ2VkIGNvbGxhcHNlIGFuZCB3YXJyYW50cyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZWU3YjY1ODE2NTkyZGI4Yjk5ZmFlZjJmNDkyM2U4MjFkZDViY2VjMQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgU2VwIDEwIDAyOjQ4OjE0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0va2h1Z2VwYWdlZC5jIGIvbW0va2h1Z2VwYWdlZC5jCmluZGV4IDc1NjM5Mjk4ZWZjMjcuLmU2OTQ3ZmUxNDJlZWEgMTAwNjQ0Ci0tLSBhL21tL2todWdlcGFnZWQuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9raHVnZXBhZ2VkLmMKQEAgLTE4OTQsNiAmIzQzOzE4OTQsMTMgQEAgc3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgdHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ24KIAlpZiAodXNlcmZhdWx0ZmRfcHJvdGVjdGVkKHZtYSkpCiAJCXJldHVybiBTQ0FOX1BURV9VRkZEOwogCiYjNDM7CS8qCiYjNDM7CSAqIFVzZXJmYXVsdGZkLW1pbm9yLXJlZ2lzdGVyZWQgVk1BcyBzaG91bGQgbm90IGJlIGNvbGxhcHNlZCwgYXMKJiM0MzsJICogdXNlcnNwYWNlIGlzIGV4cGVjdGluZyB0byBleHBsaWNpdGx5IGluc3RhbGwgUFRFcy4KJiM0MzsJICovCiYjNDM7CWlmICh1c2VyZmF1bHRmZF9taW5vcih2bWEpKQomIzQzOwkJcmV0dXJuIFNDQU5fUFRFX1VGRkQ7CiYjNDM7CiAJZm9saW8gPSBmaWxlbWFwX2xvY2tfZm9saW8odm1hLSZndDt2bV9maWxlLSZndDtmX21hcHBpbmcsCiAJCQkgICAgICAgbGluZWFyX3BhZ2VfaW5kZXgodm1hLCBoYWRkcikpOwogCWlmIChJU19FUlIoZm9saW8pKQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC11bml0LXRlc3RzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLXVuaXQtdGVzdHMuYwppbmRleCBlZjliMzk1NmJkY2ZkLi42ZjIzNjBmOWI3NWRiIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLXVuaXQtdGVzdHMuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLXVuaXQtdGVzdHMuYwpAQCAtNTE4LDE5ICYjNDM7NTE4LDM0IEBAIHN0YXRpYyB2b2lkIHVmZmRfd3BfZm9ya19waW5fd2l0aF9ldmVudF90ZXN0KHVmZmRfZ2xvYmFsX3Rlc3Rfb3B0c190ICpnb3B0cywgdWZmCiAJdWZmZF93cF9mb3JrX3Bpbl90ZXN0X2NvbW1vbihnb3B0cywgYXJncywgdHJ1ZSk7CiB9CiAKLXN0YXRpYyB2b2lkIGNoZWNrX21lbW9yeV9jb250ZW50cyh1ZmZkX2dsb2JhbF90ZXN0X29wdHNfdCAqZ29wdHMsIGNoYXIgKnApCiYjNDM7c3RhdGljIGludCBfX2NoZWNrX21lbW9yeV9jb250ZW50cyh1bnNpZ25lZCBsb25nIG9mZnNldCwKJiM0MzsJCQkJICAgdW5zaWduZWQgbG9uZyBucl9wYWdlcywKJiM0MzsJCQkJICAgdWZmZF9nbG9iYWxfdGVzdF9vcHRzX3QgKmdvcHRzLAomIzQzOwkJCQkgICBjaGFyICpwKQogewogCXVuc2lnbmVkIGxvbmcgaSwgajsKIAl1aW50OF90IGV4cGVjdGVkX2J5dGU7CiAKLQlmb3IgKGkgPSAwOyBpICZsdDsgZ29wdHMtJmd0O25yX3BhZ2VzOyAmIzQzOyYjNDM7aSkgewomIzQzOwlpZiAobnJfcGFnZXMgJiM0Mzsgb2Zmc2V0ICZsdDsgbnJfcGFnZXMpCiYjNDM7CQllcnIoJiMzNDtvdmVyZmxvdyBpbiBtZW1vcnkgY2hlY2smIzM0Oyk7CiYjNDM7CWlmIChucl9wYWdlcyAmIzQzOyBvZmZzZXQgJmd0OyBnb3B0cy0mZ3Q7bnJfcGFnZXMpCiYjNDM7CQllcnIoJiMzNDtvdXQgb2YgYm91bmRzIG1lbW9yeSBjaGVjayYjMzQ7KTsKJiM0MzsKJiM0MzsJZm9yIChpID0gb2Zmc2V0OyBpICZsdDsgb2Zmc2V0ICYjNDM7IG5yX3BhZ2VzOyAmIzQzOyYjNDM7aSkgewogCQlleHBlY3RlZF9ieXRlID0gfigodWludDhfdCkoaSAlICgodWludDhfdCktMSkpKTsKIAkJZm9yIChqID0gMDsgaiAmbHQ7IGdvcHRzLSZndDtwYWdlX3NpemU7IGomIzQzOyYjNDM7KSB7CiAJCQl1aW50OF90IHYgPSAqKHVpbnQ4X3QgKikocCAmIzQzOyAoaSAqIGdvcHRzLSZndDtwYWdlX3NpemUpICYjNDM7IGopOwogCQkJaWYgKHYgIT0gZXhwZWN0ZWRfYnl0ZSkKLQkJCQllcnIoJiMzNDt1bmV4cGVjdGVkIHBhZ2UgY29udGVudHMmIzM0Oyk7CiYjNDM7CQkJCXJldHVybiAxOwogCQl9CiAJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBjaGVja19tZW1vcnlfY29udGVudHModWZmZF9nbG9iYWxfdGVzdF9vcHRzX3QgKmdvcHRzLCBjaGFyICpwKQomIzQzO3sKJiM0MzsJcmV0dXJuIF9fY2hlY2tfbWVtb3J5X2NvbnRlbnRzKDAsIGdvcHRzLSZndDtucl9wYWdlcywgZ29wdHMsIHApOwogfQogCiBzdGF0aWMgdm9pZCB1ZmZkX21pbm9yX3Rlc3RfY29tbW9uKHVmZmRfZ2xvYmFsX3Rlc3Rfb3B0c190ICpnb3B0cywgYm9vbCB0ZXN0X2NvbGxhcHNlLCBib29sIHRlc3Rfd3ApCkBAIC01MzksNiAmIzQzOzU1NCw4IEBAIHN0YXRpYyB2b2lkIHVmZmRfbWlub3JfdGVzdF9jb21tb24odWZmZF9nbG9iYWxfdGVzdF9vcHRzX3QgKmdvcHRzLCBib29sIHRlc3RfY29sCiAJcHRocmVhZF90IHVmZmRfbW9uOwogCWNoYXIgYyA9ICYjMzk7XDAmIzM5OzsKIAlzdHJ1Y3QgdWZmZF9hcmdzIGFyZ3MgPSB7IDAgfTsKJiM0MzsJdW5zaWduZWQgbG9uZyBjaGVja2VkID0gMDsKJiM0MzsJYm9vbCBiYWRfY29udGVudHM7CiAJYXJncy5nb3B0cyA9IGdvcHRzOwogCiAJLyoKQEAgLTU2NCwyNCAmIzQzOzU4MSw2NSBAQCBzdGF0aWMgdm9pZCB1ZmZkX21pbm9yX3Rlc3RfY29tbW9uKHVmZmRfZ2xvYmFsX3Rlc3Rfb3B0c190ICpnb3B0cywgYm9vbCB0ZXN0X2NvbAogCWlmIChwdGhyZWFkX2NyZWF0ZSgmYW1wO3VmZmRfbW9uLCBOVUxMLCB1ZmZkX3BvbGxfdGhyZWFkLCAmYW1wO2FyZ3MpKQogCQllcnIoJiMzNDt1ZmZkX3BvbGxfdGhyZWFkIGNyZWF0ZSYjMzQ7KTsKIAomIzQzOwlpZiAodGVzdF9jb2xsYXBzZSkgewomIzQzOwkJLyoKJiM0MzsJCSAqIFJlYWQganVzdCBhIHNpbmdsZSBwYWdlIGFuZCB0cnkgY29sbGFwc2luZy4gVGhlIGNvbGxhcHNlCiYjNDM7CQkgKiBzaG91bGQgZWl0aGVyIGJlIHJlamVjdGVkIG9yIGJlIGEgbm8tb3AuCiYjNDM7CQkgKi8KJiM0MzsJCWlmIChfX2NoZWNrX21lbW9yeV9jb250ZW50cygwLCAxLCBnb3B0cywgZ29wdHMtJmd0O2FyZWFfZHN0X2FsaWFzKSkKJiM0MzsJCQllcnIoJiMzNDt1bmV4cGVjdGVkIG1lbW9yeSBjb250ZW50cyBiZWZvcmUgY29sbGFwc2UmIzM0Oyk7CiYjNDM7CiYjNDM7CQkvKiBNQURWX0NPTExBUFNFIG1pZ2h0IHJldHVybiBFSU5WQUwgZm9yIHVmZmQtbWlub3IgVk1Bcy4gKi8KJiM0MzsJCW1hZHZpc2UoZ29wdHMtJmd0O2FyZWFfZHN0X2FsaWFzLCBnb3B0cy0mZ3Q7bnJfcGFnZXMgKiBnb3B0cy0mZ3Q7cGFnZV9zaXplLAomIzQzOwkJCU1BRFZfQ09MTEFQU0UpOwomIzQzOwkJLyoKJiM0MzsJCSAqIElmIHRoZSBhYm92ZSBjb2xsYXBzZSBtYXBwZWQgcGFnZXMgdGhhdCB3ZXJlIG5vdCBleHBsaWNpdGx5CiYjNDM7CQkgKiBDT05USU5VRSYjMzk7ZCwgdGhlIGJlbG93IF9fY2hlY2tfbWVtb3J5X2NvbnRlbnRzKCkgd2lsbCBub3QKJiM0MzsJCSAqIGZhdWx0IG9uIHNvbWUgcGFnZXMsIHJlc3VsdGluZyBpbiBpbmNvcnJlY3QgY29udGVudHMuIFRoZQomIzQzOwkJICogUFRFIGZvciB0aGUgZmlyc3QgcGFnZSBtYXkgZ2V0IHJldHJhY3RlZCwgc28gYXZvaWQgY2hlY2tpbmcKJiM0MzsJCSAqIHRoYXQgcGFnZSwgYXMgd2UgbWlnaHQgdGFrZSBhIHNlY29uZCBmYXVsdCwgZmxpcHBpbmcgdGhlCiYjNDM7CQkgKiBjb250ZW50cyBhIHNlY29uZCB0aW1lLgomIzQzOwkJICovCiYjNDM7CQljaGVja2VkID0gMTsKJiM0MzsJfQomIzQzOwogCS8qCiAJICogUmVhZCBlYWNoIG9mIHRoZSBwYWdlcyBiYWNrIHVzaW5nIHRoZSBVRkZELXJlZ2lzdGVyZWQgbWFwcGluZy4gV2UKIAkgKiBleHBlY3QgdGhhdCB0aGUgZmlyc3QgdGltZSB3ZSB0b3VjaCBhIHBhZ2UsIGl0IHdpbGwgcmVzdWx0IGluIGEgbWlub3IKIAkgKiBmYXVsdC4gdWZmZF9wb2xsX3RocmVhZCB3aWxsIHJlc29sdmUgdGhlIGZhdWx0IGJ5IGJpdC1mbGlwcGluZyB0aGUKIAkgKiBwYWdlJiMzOTtzIGNvbnRlbnRzLCBhbmQgdGhlbiBpc3N1aW5nIGEgQ09OVElOVUUgaW9jdGwuCiAJICovCi0JY2hlY2tfbWVtb3J5X2NvbnRlbnRzKGdvcHRzLCBnb3B0cy0mZ3Q7YXJlYV9kc3RfYWxpYXMpOwomIzQzOwliYWRfY29udGVudHMgPSAhIV9fY2hlY2tfbWVtb3J5X2NvbnRlbnRzKGNoZWNrZWQsIGdvcHRzLSZndDtucl9wYWdlcyAtIGNoZWNrZWQsCiYjNDM7CQkJCQkJICAgIGdvcHRzLCBnb3B0cy0mZ3Q7YXJlYV9kc3RfYWxpYXMpOwogCiAJaWYgKHdyaXRlKGdvcHRzLSZndDtwaXBlZmRbMV0sICZhbXA7Yywgc2l6ZW9mKGMpKSAhPSBzaXplb2YoYykpCiAJCWVycigmIzM0O3BpcGUgd3JpdGUmIzM0Oyk7CiAJaWYgKHB0aHJlYWRfam9pbih1ZmZkX21vbiwgTlVMTCkpCiAJCWVycigmIzM0O2pvaW4oKSBmYWlsZWQmIzM0Oyk7CiAKJiM0MzsJaWYgKGJhZF9jb250ZW50cyAmYW1wOyZhbXA7IHRlc3RfY29sbGFwc2UpIHsKJiM0MzsJCXVmZmRfdGVzdF9mYWlsKCYjMzQ7dW5leHBlY3RlZCBtZW1vcnkgY29udGVudHMgYWZ0ZXIgY29sbGFwc2UmIzM0Oyk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKGJhZF9jb250ZW50cykgewomIzQzOwkJdWZmZF90ZXN0X2ZhaWwoJiMzNDt1bmV4cGVjdGVkIG1lbW9yeSBjb250ZW50cyYjMzQ7KTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwogCWlmICh0ZXN0X2NvbGxhcHNlKSB7CiYjNDM7CQkvKgomIzQzOwkJICogTUFEVl9DT0xMQVBTRSB3aWxsIGZhaWwgdW5sZXNzIHVzZXJmYXVsdGZkLW1pbm9yIGlzCiYjNDM7CQkgKiB1bnJlZ2lzdGVyZWQuCiYjNDM7CQkgKi8KJiM0MzsJCWlmICh1ZmZkX3VucmVnaXN0ZXIoZ29wdHMtJmd0O3VmZmQsIGdvcHRzLSZndDthcmVhX2RzdF9hbGlhcywKJiM0MzsJCQkJICAgIGdvcHRzLSZndDtucl9wYWdlcyAqIGdvcHRzLSZndDtwYWdlX3NpemUpKQomIzQzOwkJCWVycigmIzM0O3VmZmRfdW5yZWdpc3RlciBiZWZvcmUgTUFEVl9DT0xMQVBTRSBmYWlsZWQmIzM0Oyk7CiYjNDM7CiYjNDM7CQkvKiBNQURWX0NPTExBUFNFIHNob3VsZCBzdWNjZWVkIHdpdGggdXNlcmZhdWx0ZmQgdW5yZWdpc3RlcmVkLiAqLwogCQlpZiAobWFkdmlzZShnb3B0cy0mZ3Q7YXJlYV9kc3RfYWxpYXMsIGdvcHRzLSZndDtucl9wYWdlcyAqIGdvcHRzLSZndDtwYWdlX3NpemUsCiAJCQkgICAgTUFEVl9DT0xMQVBTRSkpIHsKLQkJCS8qIEl0JiMzOTtzIGZpbmUgdG8gZmFpbCBmb3IgdGhpcyBvbmUuLi4gKi8KLQkJCXVmZmRfdGVzdF9za2lwKCYjMzQ7TUFEVl9DT0xMQVBTRSBmYWlsZWQmIzM0Oyk7CiYjNDM7CQkJdWZmZF90ZXN0X2ZhaWwoJiMzNDtNQURWX0NPTExBUFNFIGZhaWxlZCYjMzQ7KTsKIAkJCXJldHVybjsKIAkJfQogCkBAIC01OTMsNyAmIzQzOzY1MSwxMCBAQCBzdGF0aWMgdm9pZCB1ZmZkX21pbm9yX3Rlc3RfY29tbW9uKHVmZmRfZ2xvYmFsX3Rlc3Rfb3B0c190ICpnb3B0cywgYm9vbCB0ZXN0X2NvbAogCQkgKiBUaGlzIHdvbiYjMzk7dCBjYXVzZSB1ZmZkLWZhdWx0IC0gaXQgcHVyZWx5IGp1c3QgbWFrZXMgc3VyZSB0aGVyZQogCQkgKiB3YXMgbm8gY29ycnVwdGlvbi4KIAkJICovCi0JCWNoZWNrX21lbW9yeV9jb250ZW50cyhnb3B0cywgZ29wdHMtJmd0O2FyZWFfZHN0X2FsaWFzKTsKJiM0MzsJCWlmIChjaGVja19tZW1vcnlfY29udGVudHMoZ29wdHMsIGdvcHRzLSZndDthcmVhX2RzdF9hbGlhcykpIHsKJiM0MzsJCQl1ZmZkX3Rlc3RfZmFpbCgmIzM0O3VuZXhwZWN0ZWQgbWVtb3J5IGNvbnRlbnRzJiMzNDspOwomIzQzOwkJCXJldHVybjsKJiM0MzsJCX0KIAl9CiAKIAlpZiAoYXJncy5taXNzaW5nX2ZhdWx0cyAhPSAwIHx8IGFyZ3MubWlub3JfZmF1bHRzICE9IGdvcHRzLSZndDtucl9wYWdlcykKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDI6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDcxMwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI5MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBLaHVnZXBhZ2VkIGFuZCBVc2VyZmF1bHRmZCBJbnRlcmFjdGlvbioqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBpbiBmcm9udCBvZiBtZSwgYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcyB0byBkaXZlIHJpZ2h0IGludG8gdGhlIGNvZGUgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zLiBUaGUgcGF0Y2ggdG91Y2hlcyBgbW0va2h1Z2VwYWdlZC5jYCBhbmQgdGhlIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLXVuaXQtdGVzdHMuY2AgZmlsZS4gUmlnaHQgYXdheSwgbXkgcmFkYXIgZ29lcyB1cCDigJMgYW55dGhpbmcgdGhhdCBpbnRlcmFjdHMgd2l0aCBga2h1Z2VwYWdlZGAgYW5kIHBvdGVudGlhbGx5IHVzZXJmYXVsdGZkIChVRkZEKSBpcyBnb2luZyB0byBuZWVkIGNhcmVmdWwgY29uc2lkZXJhdGlvbiwgZXNwZWNpYWxseSB3aXRoIHRoZSBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMgb2Yga2h1Z2VwYWdlIGFuZCB0aGUgZXhwbGljaXQgbWVtb3J5IG1hbmFnZW1lbnQgZnJvbSBVRkZELgoKRm9jdXNpbmcgb24gYG1tL2todWdlcGFnZWQuY2AsIHRoZSBrZXkgY2hhbmdlIGFwcGVhcnMgd2l0aGluIHRoZSBgdHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwYCBmdW5jdGlvbi4gSXQmIzM5O3MgYWRkaW5nIGFuIGV4dHJhIGNoZWNrIGhlcmUuIExldCBtZSBzZWUuLi4gaXQmIzM5O3MgYWJvdXQgcHJvdGVjdGluZyBhZ2FpbnN0IGNvbGxhcHNpbmcgVEhQcyB3aGVuIFVGRkQgaXMgaW52b2x2ZWQuIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgZ3VhcmRpbmcgYWdhaW5zdCBjb2xsYXBzaW5nIFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMgKFRIUHMpIG9uIGB1c2VyZmF1bHRmZF9taW5vcmAtcmVnaXN0ZXJlZCBWTUFzLiBJIGltbWVkaWF0ZWx5IHVuZGVyc3RhbmQgdGhlIHJlYXNvbmluZyBoZXJlLiBJZiBhIFZNQSBpcyByZWdpc3RlcmVkIGFzIGEgJiMzNDttaW5vciYjMzQ7IFVGRkQgcmVnaW9uLCB0aGUgdXNlci1zcGFjZSBhcHBsaWNhdGlvbiBpcyBleHBsaWNpdGx5IG1hbmFnaW5nIHRoZSBQVEVzIGZvciB0aGF0IHJlZ2lvbi4gQ29sbGFwc2luZyBUSFBzIGluIHRoaXMgY2FzZSB3b3VsZCBpbnRlcmZlcmUgd2l0aCB0aGUgYXBwbGljYXRpb24mIzM5O3MgZXhwZWN0ZWQgYmVoYXZpb3IgYW5kIHBvdGVudGlhbGx5IGxlYWQgdG8gY29ycnVwdGlvbiBvciB1bmV4cGVjdGVkIHBhZ2UgZmF1bHRzLiBUaGlzIG1ha2VzIGNvbXBsZXRlIHNlbnNlIC0gVEhQIGNvbGxhcHNlIG1pZ2h0IHRyeSB0byBpbnN0YWxsIGEgUFRFIGJlaGluZCB0aGUgYXBwbGljYXRpb24mIzM5O3MgYmFjay4gVGhpcyBhZGRpdGlvbiBpcyBjbGVhcmx5IGRlc2lnbmVkIHRvIG1haW50YWluIHRoZSBpbnRlbmRlZCBzZW1hbnRpY3Mgb2YgVUZGRCBhbmQgcHJldmVudCBjb25mbGljdHMgd2l0aCBga2h1Z2VwYWdlZGAuIEl0JiMzOTtzIGEgc29saWQsIGNhdXRpb3VzIGFwcHJvYWNoIHRvIGtlZXAgdGhlIGRpZmZlcmVudCBhcmVhcyBvZiBtZW1vcnkgbWFuYWdlbWVudCBzYWZlIGFuZCBvcGVyYXRpb25hbC4KCkkmIzM5O20gbm93IGdvaW5nIHRvIHVzZSBgZ3JlcHBlcmAgb3IgYHJlYWQtZmlsZWAgdG8gZXhwbG9yZSB0aGUgYHRyeV9jb2xsYXBzZV9wdGVfbWFwcGVkX3RocGAgZnVuY3Rpb24gaW4gbW9yZSBkZXRhaWwuIEkgbmVlZCB0byBmdWxseSBncm9rIHRoZSBpbnRlcmFjdGlvbiBwb2ludHMgaW4gdGhlIGNvZGViYXNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDAyOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0va2h1Z2VwYWdlZC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTg4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxODgwOlx0XHQvKlxuMTg4MTpcdFx0ICogSWYgd2UgYXJlIGhlcmUsIHdlJiMzOTt2ZSBzdWNjZWVkZWQgaW4gcmVwbGFjaW5nIGFsbCB0aGUgbmF0aXZlIHBhZ2VzXG4xODgyOlx0XHQgKiBpbiB0aGUgcGFnZSBjYWNoZSB3aXRoIGEgc2luZ2xlIGh1Z2VwYWdlLiBJZiBhIG1tIHdlcmUgdG8gZmF1bHQtaW5cbjE4ODM6XHRcdCAqIHRoaXMgbWVtb3J5IChtYXBwZWQgYnkgYSBzdWl0YWJseSBhbGlnbmVkIFZNQSksIHdlJiMzOTtkIGdldCB0aGUgaHVnZXBhZ2VcbjE4ODQ6XHRcdCAqIGFuZCBtYXAgaXQgYnkgYSBQTUQsIHJlZ2FyZGxlc3Mgb2Ygc3lzZnMgVEhQIHNldHRpbmdzLiBBcyBzdWNoLCBsZXQmIzM5O3NcbjE4ODU6XHRcdCAqIGFuYWxvZ291c2x5IGVsaWRlIHN5c2ZzIFRIUCBzZXR0aW5ncyBoZXJlIGFuZCBmb3JjZSBjb2xsYXBzZS5cbjE4ODY6XHRcdCAqL1xuMTg4NzpcdFx0aWYgKCF0aHBfdm1hX2FsbG93YWJsZV9vcmRlcih2bWEsIHZtYS1cdTAwM2V2bV9mbGFncywgVFZBX0ZPUkNFRF9DT0xMQVBTRSwgUE1EX09SREVSKSlcbjE4ODg6XHRcdFx0cmV0dXJuIFNDQU5fVk1BX0NIRUNLO1xuMTg4OTpcdFxuMTg5MDpcdFx0LypcbjE4OTE6XHRcdCAqIEtlZXAgcG1kIHBndGFibGUgd2hpbGUgdGhlIHVmZmQgYml0IGlzIGluIHVzZTsgc2VlIGNvbW1lbnQgaW5cbjE4OTI6XHRcdCAqIHJldHJhY3RfcGFnZV90YWJsZXMoKS5cbjE4OTM6XHRcdCAqL1xuMTg5NDpcdFx0aWYgKHVzZXJmYXVsdGZkX3Byb3RlY3RlZCh2bWEpKVxuMTg5NTpcdFx0XHRyZXR1cm4gU0NBTl9QVEVfVUZGRDtcbjE4OTY6XHRcbjE4OTc6XHRcdC8qXG4xODk4Olx0XHQgKiBVc2VyZmF1bHRmZC1taW5vci1yZWdpc3RlcmVkIFZNQXMgc2hvdWxkIG5vdCBiZSBjb2xsYXBzZWQsIGFzXG4xODk5Olx0XHQgKiB1c2Vyc3BhY2UgaXMgZXhwZWN0aW5nIHRvIGV4cGxpY2l0bHkgaW5zdGFsbCBQVEVzLlxuMTkwMDpcdFx0ICovXG4xOTAxOlx0XHRpZiAodXNlcmZhdWx0ZmRfbWlub3Iodm1hKSlcbjE5MDI6XHRcdFx0cmV0dXJuIFNDQU5fUFRFX1VGRkQ7XG4xOTAzOlx0XG4xOTA0Olx0XHRmb2xpbyA9IGZpbGVtYXBfbG9ja19mb2xpbyh2bWEtXHUwMDNldm1fZmlsZS1cdTAwM2VmX21hcHBpbmcsXG4xOTA1Olx0XHRcdFx0ICAgICAgIGxpbmVhcl9wYWdlX2luZGV4KHZtYSwgaGFkZHIpKTtcbjE5MDY6XHRcdGlmIChJU19FUlIoZm9saW8pKVxuMTkwNzpcdFx0XHRyZXR1cm4gU0NBTl9QQUdFX05VTEw7XG4xOTA4Olx0XG4xOTA5Olx0XHRpZiAoIWlzX3BtZF9vcmRlcihmb2xpb19vcmRlcihmb2xpbykpKSB7XG4xOTEwOlx0XHRcdHJlc3VsdCA9IFNDQU5fUEFHRV9DT01QT1VORDtcbjE5MTE6XHRcdFx0Z290byBkcm9wX2ZvbGlvO1xuMTkxMjpcdFx0fVxuMTkxMzpcdFxuMTkxNDpcdFx0cmVzdWx0ID0gZmluZF9wbWRfb3JfdGhwX29yX25vbmUobW0sIGhhZGRyLCBcdTAwMjZwbWQpO1xuMTkxNTpcdFx0c3dpdGNoIChyZXN1bHQpIHtcbjE5MTY6XHRcdGNhc2UgU0NBTl9TVUNDRUVEOlxuMTkxNzpcdFx0XHRicmVhaztcbjE5MTg6XHRcdGNhc2UgU0NBTl9OT19QVEVfVEFCTEU6XG4xOTE5Olx0XHRcdC8qXG4xOTIwOlx0XHRcdCAqIEFsbCBwdGUgZW50cmllcyBoYXZlIGJlZW4gcmVtb3ZlZCBhbmQgcG1kIGNsZWFyZWQuXG4xOTIxOlx0XHRcdCAqIFNraXAgYWxsIHRoZSBwdGUgY2hlY2tzIGFuZCBqdXN0IHVwZGF0ZSB0aGUgcG1kIG1hcHBpbmcuXG4xOTIyOlx0XHRcdCAqL1xuMTkyMzpcdFx0XHRnb3RvIG1heWJlX2luc3RhbGxfcG1kO1xuMTkyNDpcdFx0ZGVmYXVsdDpcbjE5MjU6XHRcdFx0Z290byBkcm9wX2ZvbGlvO1xuMTkyNjpcdFx0fVxuMTkyNzpcdFxuMTkyODpcdFx0cmVzdWx0ID0gU0NBTl9GQUlMO1xuMTkyOTpcdFx0c3RhcnRfcHRlID0gcHRlX29mZnNldF9tYXBfbG9jayhtbSwgcG1kLCBoYWRkciwgXHUwMDI2cHRsKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwMjo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MjUyCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRoaW5nczoKCioqQW5hbHl6aW5nIGB0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHBgIGFuZCBpdHMgU3Vycm91bmRpbmdzKioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gYHRyeV9jb2xsYXBzZV9wdGVfbWFwcGVkX3RocGAuIEZpcnN0LCBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBpdHMgY29udGV4dC4gV2hlcmUgaXMgdGhpcyBmdW5jdGlvbiBhY3R1YWxseSBiZWluZyAqdXNlZCo/IEkmIzM5O2xsIGNoZWNrIGl0cyBjYWxsIHNpdGVzIHRvIHVuZGVyc3RhbmQgdGhlIHNjZW5hcmlvcyBpbiB3aGljaCBpdCYjMzk7cyB0cmlnZ2VyZWQuIEtub3dpbmcgdGhlIGNhbGxlcnMgd2lsbCB0ZWxsIG1lIHRoZSBoaWdoLWxldmVsIGxvZ2ljIGl04oCZcyBhIHBhcnQgb2YgYW5kIHRoZSBzcGVjaWZpYyBldmVudHMgdGhhdCBsZWFkIHRvIHRoaXMgcGFydCBvZiB0aGUgY29kZSBydW5uaW5nLgoKVGhlbiwgSSYjMzk7bGwgdHVybiBteSBhdHRlbnRpb24gdG8gdGhlIGNvbmZpZ3VyYXRpb24gZ3VhcmRzIGFyb3VuZCBgbW0va2h1Z2VwYWdlZC5jYC4gV2hhdCBjb21waWxlLXRpbWUgb3B0aW9ucyBhcmUgaW5mbHVlbmNpbmcgdGhlIGF2YWlsYWJpbGl0eSBhbmQgYmVoYXZpb3Igb2YgdGhpcyBjb2RlPyBJJiMzOTttIHRoaW5raW5nIEkmIzM5O2xsIG5lZWQgdG8gaWRlbnRpZnkgYW55IGRlcGVuZGVuY2llcyBvbiB0aGluZ3MgbGlrZSBUcmFuc3BhcmVudCBIdWdlIFBhZ2VzIChUSFApIHN1cHBvcnQgb3Igc3BlY2lmaWMgbWVtb3J5IG1hbmFnZW1lbnQgZmVhdHVyZXMuIFVuZGVyc3RhbmRpbmcgdGhlIHJlbGV2YW50IGNvbmZpZ3MgaXMgY3JpdGljYWwgdG8ga25vd2luZyB0aGUgc2NvcGUgb2YgZnVuY3Rpb25hbGl0eSBJIGFtIHdvcmtpbmcgd2l0aC4gV2hhdCBpcyBjb25kaXRpb25hbCwgYW5kIHdoYXQgaXMgYWx3YXlzIHJ1bm5pbmc/IFRoZSBjb25maWdzIGFyZSB0aGUga2V5IHRvIGFuc3dlcmluZyB0aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDAyOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RyeV9jb2xsYXBzZV9wdGVfbWFwcGVkX3RocCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9raHVnZXBhZ2VkLmM9MTgxNT1zdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBzZXRfaHVnZV9wbWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMTg1MC1cbm1tL2todWdlcGFnZWQuYzoxODUxOnN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IHRyeV9jb2xsYXBzZV9wdGVfbWFwcGVkX3RocChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxubW0va2h1Z2VwYWdlZC5jLTE4NTItXHRcdGJvb2wgaW5zdGFsbF9wbWQpXG4tLVxubW0va2h1Z2VwYWdlZC5jPTIwOTY9dm9pZCBjb2xsYXBzZV9wdGVfbWFwcGVkX3RocChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbm1tL2todWdlcGFnZWQuYy0yMDk4LXtcbm1tL2todWdlcGFnZWQuYzoyMDk5Olx0dHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwKG1tLCBhZGRyLCBpbnN0YWxsX3BtZCk7XG5tbS9raHVnZXBhZ2VkLmMtMjEwMC19XG4tLVxubW0va2h1Z2VwYWdlZC5jPTIyNDk9c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2VfZmlsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbm1tL2todWdlcGFnZWQuYy0yNjI4LVx0ICogUmVtb3ZlIHB0ZSBwYWdlIHRhYmxlcywgc28gd2UgY2FuIHJlLWZhdWx0IHRoZSBwYWdlIGFzIGh1Z2UuXG5tbS9raHVnZXBhZ2VkLmM6MjYyOTpcdCAqIElmIE1BRFZfQ09MTEFQU0UsIGFkanVzdCByZXN1bHQgdG8gY2FsbCB0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHAoKS5cbm1tL2todWdlcGFnZWQuYy0yNjMwLVx0ICovXG4tLVxubW0va2h1Z2VwYWdlZC5jPTI3OTE9c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2Vfc2luZ2xlX3BtZCh1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxubW0va2h1Z2VwYWdlZC5jLTI4MzUtXHRcdGVsc2Vcbm1tL2todWdlcGFnZWQuYzoyODM2Olx0XHRcdHJlc3VsdCA9IHRyeV9jb2xsYXBzZV9wdGVfbWFwcGVkX3RocChtbSwgYWRkcixcbm1tL2todWdlcGFnZWQuYy0yODM3LVx0XHRcdFx0XHRcdFx0ICAgICAhY2MtXHUwMDNlaXNfa2h1Z2VwYWdlZCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDI6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzAzMwoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGlzLCBkaXN0aWxsZWQgaW50byBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5IGFzIHlvdSByZXF1ZXN0ZWQsIGFzc3VtaW5nIEkmIzM5O20gYWxyZWFkeSB3ZWxsLXZlcnNlZCBpbiBrZXJuZWwgbWVtb3J5IG1hbmFnZW1lbnQ6CgoqKk1lbW9yeSBNYW5hZ2VtZW50IERlZXAgRGl2ZSoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBnb2luZyBvbiB3aXRoIHRoZXNlIG1lbW9yeSBtYW5hZ2VtZW50IGZ1bmN0aW9ucy4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIGhvdyBtZW1vcnkgaXMgYmVpbmcgaGFuZGxlZCByZWxhdGVkIHRvIHRyYW5zcGFyZW50IGh1Z2VwYWdlcyAoVEhQKSBhbmQgYG1hZHZpc2VgIGNhbGxzLgoKRmlyc3QsIEkmIzM5O20gZ29pbmcgdG8gaW52ZXN0aWdhdGUgdGhlIGBtYWR2aXNlX2NvbGxhcHNlYCBvciB0aGUgYG1hZHZpc2VgIGVudHJ5IHBvaW50IGl0c2VsZi4gSSB3YW50IHRvIHNlZSBwcmVjaXNlbHkgaG93IHRoZXNlIGZ1bmN0aW9ucyBhcmUgYmVpbmcgdXNlZCBhbmQgdW5kZXJzdGFuZCB0aGVpciBleGFjdCBwdXJwb3NlIGluIGNvbGxhcHNpbmcgb3Igb3RoZXJ3aXNlIG1hbmFnaW5nIG1lbW9yeSByZWdpb25zLiBJIGFsc28gbmVlZCB0byB0cmFjayBkb3duIGFueSBhbmQgYWxsIGNhbGxzIHRvIHRoZSBga2h1Z2VwYWdlZGAgcHJvY2VzcyBiZWNhdXNlIGl0cyByZWxhdGlvbnNoaXAgd2l0aCBUSFBzIGlzIHZpdGFsIHRvIGdyYXNwLgoKTmV4dCwgSSYjMzk7bGwgc2hpZnQgZ2VhcnMgYW5kIHRyYWNlIHRoZSBjYWxsZXJzIG9mIHRoZXNlIGtleSBmdW5jdGlvbnM6IGBjb2xsYXBzZV9wdGVfbWFwcGVkX3RocGAsIGBjb2xsYXBzZV9zaW5nbGVfcG1kYCwgYW5kLCBhZ2FpbiwgYG1hZHZpc2VfY29sbGFwc2VgLiBJZGVudGlmeWluZyB3aGVyZSB0aGVzZSBhcmUgYmVpbmcgY2FsbGVkIGZyb20gd2lsbCBwYWludCBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhlIG1lbW9yeSBtYW5pcHVsYXRpb24gd29ya2Zsb3cuIFNlZWluZyB0aGUgY2FsbCBjaGFpbnMgd2lsbCBnaXZlIG1lIGluc2lnaHQgaW50byB0aGUgdHJpZ2dlcmluZyBtZWNoYW5pc21zLiBJJiMzOTttIGFmdGVyIHRoZSBiaWdnZXIgcGljdHVyZTogd2hhdCBzY2VuYXJpb3MgYXJlIGNhdXNpbmcgVEhQIGNvbGxhcHNlLCB3aGF0IGNvZGUgcGF0aHMgZG8gdGhlIGZ1bmN0aW9ucyB0YWtlLCBhbmQgaG93IGRvZXMgYG1hZHZpc2VgIGluZmx1ZW5jZSB0aGUgd2hvbGUgcHJvY2Vzcz8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwMjo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb2xsYXBzZV9wdGVfbWFwcGVkX3RocCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9raHVnZXBhZ2VkLmM9MTgxNT1zdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBzZXRfaHVnZV9wbWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMTg1MC1cbm1tL2todWdlcGFnZWQuYzoxODUxOnN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IHRyeV9jb2xsYXBzZV9wdGVfbWFwcGVkX3RocChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxubW0va2h1Z2VwYWdlZC5jLTE4NTItXHRcdGJvb2wgaW5zdGFsbF9wbWQpXG4tLVxubW0va2h1Z2VwYWdlZC5jLTIwODQtLyoqXG5tbS9raHVnZXBhZ2VkLmM6MjA4NTogKiBjb2xsYXBzZV9wdGVfbWFwcGVkX3RocCAtIFRyeSB0byBjb2xsYXBzZSBhIHB0ZS1tYXBwZWQgVEhQIGZvciBtbSBhdFxubW0va2h1Z2VwYWdlZC5jLTIwODYtICogYWRkcmVzcyBoYWRkci5cbi0tXG5tbS9raHVnZXBhZ2VkLmMtMjA5NS0gKi9cbm1tL2todWdlcGFnZWQuYzoyMDk2OnZvaWQgY29sbGFwc2VfcHRlX21hcHBlZF90aHAoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbm1tL2todWdlcGFnZWQuYy0yMDk3LVx0XHRib29sIGluc3RhbGxfcG1kKVxubW0va2h1Z2VwYWdlZC5jLTIwOTgte1xubW0va2h1Z2VwYWdlZC5jOjIwOTk6XHR0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHAobW0sIGFkZHIsIGluc3RhbGxfcG1kKTtcbm1tL2todWdlcGFnZWQuYy0yMTAwLX1cbi0tXG5tbS9raHVnZXBhZ2VkLmM9MjI0OT1zdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBjb2xsYXBzZV9maWxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxubW0va2h1Z2VwYWdlZC5jLTI2MjgtXHQgKiBSZW1vdmUgcHRlIHBhZ2UgdGFibGVzLCBzbyB3ZSBjYW4gcmUtZmF1bHQgdGhlIHBhZ2UgYXMgaHVnZS5cbm1tL2todWdlcGFnZWQuYzoyNjI5Olx0ICogSWYgTUFEVl9DT0xMQVBTRSwgYWRqdXN0IHJlc3VsdCB0byBjYWxsIHRyeV9jb2xsYXBzZV9wdGVfbWFwcGVkX3RocCgpLlxubW0va2h1Z2VwYWdlZC5jLTI2MzAtXHQgKi9cbi0tXG5tbS9raHVnZXBhZ2VkLmM9Mjc5MT1zdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBjb2xsYXBzZV9zaW5nbGVfcG1kKHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMjgzNS1cdFx0ZWxzZVxubW0va2h1Z2VwYWdlZC5jOjI4MzY6XHRcdFx0cmVzdWx0ID0gdHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwKG1tLCBhZGRyLFxubW0va2h1Z2VwYWdlZC5jLTI4MzctXHRcdFx0XHRcdFx0XHQgICAgICFjYy1cdTAwM2Vpc19raHVnZXBhZ2VkKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwMjo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MDE2CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIGBjb2xsYXBzZV9wdGVfbWFwcGVkX3RocGAgQ2FsbCBTaXRlcyoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCB0byB3b3JrLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gdW5kZXJzdGFuZGluZyB0aGUgc2NvcGUgb2YgdGhlIGBjb2xsYXBzZV9wdGVfbWFwcGVkX3RocGAgZnVuY3Rpb24uIEkgbmVlZCB0byBmaWd1cmUgb3V0IGV2ZXJ5d2hlcmUgaXQmIzM5O3MgKnVzZWQqIHdpdGhpbiB0aGUga2VybmVsLCBhbmQgdGhlIG1vc3QgZWZmaWNpZW50IHdheSB0byBkbyB0aGF0IGlzLCBvZiBjb3Vyc2UsIHRvIHN0YXJ0IGJ5IHRyYWNpbmcgdGhvc2UgY2FsbCBzaXRlcy4gVGhhdOKAmXMgdGhlIGZpcnN0IHN0ZXAgdG8gdW5kZXJzdGFuZGluZyBpdHMgaW1wYWN0IGFuZCBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgc3Vic3lzdGVtcy4gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBkaWZmZXJlbnQgY29udGV4dHMgaXQgaXMgdXNlZCBpbiB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDI6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29sbGFwc2VfcHRlX21hcHBlZF90aHAmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9raHVnZXBhZ2VkLmg9MTk9ZXh0ZXJuIGJvb2wgY3VycmVudF9pc19raHVnZXBhZ2VkKHZvaWQpO1xuaW5jbHVkZS9saW51eC9raHVnZXBhZ2VkLmg6MjA6dm9pZCBjb2xsYXBzZV9wdGVfbWFwcGVkX3RocChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuaW5jbHVkZS9saW51eC9raHVnZXBhZ2VkLmgtMjEtXHRcdGJvb2wgaW5zdGFsbF9wbWQpO1xuLS1cbmluY2x1ZGUvbGludXgva2h1Z2VwYWdlZC5oPTQxPXN0YXRpYyBpbmxpbmUgdm9pZCBraHVnZXBhZ2VkX2VudGVyX3ZtYShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5pbmNsdWRlL2xpbnV4L2todWdlcGFnZWQuaC00NC19XG5pbmNsdWRlL2xpbnV4L2todWdlcGFnZWQuaDo0NTpzdGF0aWMgaW5saW5lIHZvaWQgY29sbGFwc2VfcHRlX21hcHBlZF90aHAoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG5pbmNsdWRlL2xpbnV4L2todWdlcGFnZWQuaC00Ni1cdFx0dW5zaWduZWQgbG9uZyBhZGRyLCBib29sIGluc3RhbGxfcG1kKVxuLS1cbmtlcm5lbC9ldmVudHMvdXByb2Jlcy5jPTQ5OT1pbnQgdXByb2JlX3dyaXRlKHN0cnVjdCBhcmNoX3Vwcm9iZSAqYXVwcm9iZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxua2VybmVsL2V2ZW50cy91cHJvYmVzLmMtNTk5LVx0aWYgKHJldCBcdTAwM2UgMClcbmtlcm5lbC9ldmVudHMvdXByb2Jlcy5jOjYwMDpcdFx0Y29sbGFwc2VfcHRlX21hcHBlZF90aHAobW0sIHZhZGRyLCBmYWxzZSk7XG5rZXJuZWwvZXZlbnRzL3Vwcm9iZXMuYy02MDEtXG4tLVxubW0va2h1Z2VwYWdlZC5jPTE4MTU9c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgc2V0X2h1Z2VfcG1kKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxubW0va2h1Z2VwYWdlZC5jLTE4NTAtXG5tbS9raHVnZXBhZ2VkLmM6MTg1MTpzdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCB0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHAoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbm1tL2todWdlcGFnZWQuYy0xODUyLVx0XHRib29sIGluc3RhbGxfcG1kKVxuLS1cbm1tL2todWdlcGFnZWQuYy0yMDg0LS8qKlxubW0va2h1Z2VwYWdlZC5jOjIwODU6ICogY29sbGFwc2VfcHRlX21hcHBlZF90aHAgLSBUcnkgdG8gY29sbGFwc2UgYSBwdGUtbWFwcGVkIFRIUCBmb3IgbW0gYXRcbm1tL2todWdlcGFnZWQuYy0yMDg2LSAqIGFkZHJlc3MgaGFkZHIuXG4tLVxubW0va2h1Z2VwYWdlZC5jLTIwOTUtICovXG5tbS9raHVnZXBhZ2VkLmM6MjA5Njp2b2lkIGNvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG5tbS9raHVnZXBhZ2VkLmMtMjA5Ny1cdFx0Ym9vbCBpbnN0YWxsX3BtZClcbm1tL2todWdlcGFnZWQuYy0yMDk4LXtcbm1tL2todWdlcGFnZWQuYzoyMDk5Olx0dHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwKG1tLCBhZGRyLCBpbnN0YWxsX3BtZCk7XG5tbS9raHVnZXBhZ2VkLmMtMjEwMC19XG4tLVxubW0va2h1Z2VwYWdlZC5jPTIyNDk9c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2VfZmlsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbm1tL2todWdlcGFnZWQuYy0yNjI4LVx0ICogUmVtb3ZlIHB0ZSBwYWdlIHRhYmxlcywgc28gd2UgY2FuIHJlLWZhdWx0IHRoZSBwYWdlIGFzIGh1Z2UuXG5tbS9raHVnZXBhZ2VkLmM6MjYyOTpcdCAqIElmIE1BRFZfQ09MTEFQU0UsIGFkanVzdCByZXN1bHQgdG8gY2FsbCB0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHAoKS5cbm1tL2todWdlcGFnZWQuYy0yNjMwLVx0ICovXG4tLVxubW0va2h1Z2VwYWdlZC5jPTI3OTE9c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2Vfc2luZ2xlX3BtZCh1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxubW0va2h1Z2VwYWdlZC5jLTI4MzUtXHRcdGVsc2Vcbm1tL2todWdlcGFnZWQuYzoyODM2Olx0XHRcdHJlc3VsdCA9IHRyeV9jb2xsYXBzZV9wdGVfbWFwcGVkX3RocChtbSwgYWRkcixcbm1tL2todWdlcGFnZWQuYy0yODM3LVx0XHRcdFx0XHRcdFx0ICAgICAhY2MtXHUwMDNlaXNfa2h1Z2VwYWdlZCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDAyOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkxMTIKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIE1lbW9yeSBNYW5hZ2VtZW50IFRlY2huaXF1ZXM6IENvbGxhcHNpbmcgTWVtb3J5IFJlZ2lvbnMqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW4gYW5kIGZpZ3VyZSBvdXQgZXhhY3RseSB3aGF0JiMzOTtzIHVzaW5nIGBtYWR2aXNlX2NvbGxhcHNlYCBvciwgbW9yZSBnZW5lcmFsbHksIGBtYWR2aXNlYCBpbiBjb25qdW5jdGlvbiB3aXRoIGBNQURWX0NPTExBUFNFYC4gTXkgaW5pdGlhbCBwbGFuIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQg4oCTIEkmIzM5O2xsIHN0YXJ0IHdpdGggYSBnb29kIG9sZCBgZ3JlcGAgc2VhcmNoIGZvciBpbnN0YW5jZXMgb2YgYG1hZHZpc2VfY29sbGFwc2VgIHdpdGhpbiB0aGUgcmVsZXZhbnQgY29kZWJhc2UuIFRoaXMgd2lsbCBiZSB0aGUgZmlyc3Qgc3RlcCB0byB1bmRlcnN0YW5kIHdobyBpcyB1c2luZyBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDI6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWFkdmlzZV9jb2xsYXBzZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL3RyYW5zaHVnZS5yc3Q9MzQ2PUEgaGlnaGVyIHZhbHVlIG1heSBpbmNyZWFzZSBtZW1vcnkgZm9vdHByaW50IGZvciBzb21lIHdvcmtsb2Fkcy5cbi0tXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL3RyYW5zaHVnZS5yc3QtMzUzLVxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS90cmFuc2h1Z2UucnN0OjM1NDogICBDdXJyZW50bHksIG1hZHZpc2VfY29sbGFwc2Ugb25seSBzdXBwb3J0cyBjb2xsYXBzaW5nIHRvIFBNRC1zaXplZCBUSFBzXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL3RyYW5zaHVnZS5yc3QtMzU1LSAgIGFuZCBkb2VzIG5vdCBhdHRlbXB0IG1USFAgY29sbGFwc2VzLlxuLS1cbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oPTUxMT1pbnQgaHVnZXBhZ2VfbWFkdmlzZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdm1fZmxhZ3NfdCAqdm1fZmxhZ3MsXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC01MTItXHRcdCAgICAgaW50IGFkdmljZSk7XG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDo1MTM6aW50IG1hZHZpc2VfY29sbGFwc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC01MTQtXHRcdCAgICAgdW5zaWduZWQgbG9uZyBlbmQsIGJvb2wgKmxvY2tfZHJvcHBlZCk7XG4tLVxuaW5jbHVkZS9saW51eC9odWdlX21tLmg9NzEyPXN0YXRpYyBpbmxpbmUgaW50IGh1Z2VwYWdlX21hZHZpc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNzE3LVxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6NzE4OnN0YXRpYyBpbmxpbmUgaW50IG1hZHZpc2VfY29sbGFwc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC03MTktXHRcdFx0XHQgICB1bnNpZ25lZCBsb25nIHN0YXJ0LFxuLS1cbm1tL2todWdlcGFnZWQuYz0zMTUyPWJvb2wgY3VycmVudF9pc19raHVnZXBhZ2VkKHZvaWQpXG4tLVxubW0va2h1Z2VwYWdlZC5jLTMxNTYtXG5tbS9raHVnZXBhZ2VkLmM6MzE1NzpzdGF0aWMgaW50IG1hZHZpc2VfY29sbGFwc2VfZXJybm8oZW51bSBzY2FuX3Jlc3VsdCByKVxubW0va2h1Z2VwYWdlZC5jLTMxNTgte1xuLS1cbm1tL2todWdlcGFnZWQuYy0zMTg4LVxubW0va2h1Z2VwYWdlZC5jOjMxODk6aW50IG1hZHZpc2VfY29sbGFwc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG5tbS9raHVnZXBhZ2VkLmMtMzE5MC1cdFx0ICAgICB1bnNpZ25lZCBsb25nIGVuZCwgYm9vbCAqbG9ja19kcm9wcGVkKVxuLS1cbm1tL2todWdlcGFnZWQuYy0zMjc2LVx0cmV0dXJuIHRocHMgPT0gKChoZW5kIC0gaHN0YXJ0KSBcdTAwM2VcdTAwM2UgSFBBR0VfUE1EX1NISUZUKSA/IDBcbm1tL2todWdlcGFnZWQuYzozMjc3Olx0XHRcdDogbWFkdmlzZV9jb2xsYXBzZV9lcnJubyhsYXN0X2ZhaWwpO1xubW0va2h1Z2VwYWdlZC5jLTMyNzgtfVxuLS1cbm1tL21hZHZpc2UuYz0xMzQ3PXN0YXRpYyBpbnQgbWFkdmlzZV92bWFfYmVoYXZpb3Ioc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXG4tLVxubW0vbWFkdmlzZS5jLTEzNzEtXHRjYXNlIE1BRFZfQ09MTEFQU0U6XG5tbS9tYWR2aXNlLmM6MTM3MjpcdFx0cmV0dXJuIG1hZHZpc2VfY29sbGFwc2Uodm1hLCByYW5nZS1cdTAwM2VzdGFydCwgcmFuZ2UtXHUwMDNlZW5kLFxubW0vbWFkdmlzZS5jLTEzNzMtXHRcdFx0XHUwMDI2bWFkdl9iZWhhdmlvci1cdTAwM2Vsb2NrX2Ryb3BwZWQpO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYz0yMzU9c3RhdGljIHZvaWQgZmlsbF9tZW1vcnkoaW50ICpwLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMtMjQ4LSAqL1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jOjI0OTpzdGF0aWMgaW50IG1hZHZpc2VfY29sbGFwc2VfcmV0cnkodm9pZCAqcCwgdW5zaWduZWQgbG9uZyBzaXplKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jLTI1MC17XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jPTI2Nz1zdGF0aWMgdm9pZCAqYWxsb2NfaHBhZ2Uoc3RydWN0IG1lbV9vcHMgKm9wcylcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMtMjgwLVx0a3NmdF9wcmludF9tc2coXCYjMzQ7QWxsb2NhdGUgaHVnZSBwYWdlLi4uXCYjMzQ7KTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYzoyODE6XHRpZiAobWFkdmlzZV9jb2xsYXBzZV9yZXRyeShwLCBocGFnZV9wbWRfc2l6ZSkpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMtMjgyLVx0XHRrc2Z0X2V4aXRfZmFpbF9wZXJyb3IoXCYjMzQ7bWFkdmlzZShNQURWX0NPTExBUFNFKVwmIzM0Oyk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jPTUxMT1zdGF0aWMgYm9vbCBpc19hbm9uKHN0cnVjdCBtZW1fb3BzICpvcHMpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jLTUxNS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYzo1MTY6c3RhdGljIHZvaWQgX19tYWR2aXNlX2NvbGxhcHNlKGNvbnN0IGNoYXIgKm1zZywgY2hhciAqcCwgaW50IG5yX2hwYWdlcyxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYy01MTctXHRcdFx0ICAgICAgIHN0cnVjdCBtZW1fb3BzICpvcHMsIGJvb2wgZXhwZWN0KVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYy01MzktXHRtYWR2aXNlKHAsIG5yX2hwYWdlcyAqIGhwYWdlX3BtZF9zaXplLCBNQURWX0hVR0VQQUdFKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYzo1NDA6XHRyZXQgPSBtYWR2aXNlX2NvbGxhcHNlX3JldHJ5KHAsIG5yX2hwYWdlcyAqIGhwYWdlX3BtZF9zaXplKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYy01NDEtXHRpZiAoKChib29sKXJldCkgPT0gZXhwZWN0KVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYy01NTAtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmM6NTUxOnN0YXRpYyB2b2lkIG1hZHZpc2VfY29sbGFwc2UoY29uc3QgY2hhciAqbXNnLCBjaGFyICpwLCBpbnQgbnJfaHBhZ2VzLFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jLTU1Mi1cdFx0XHQgICAgIHN0cnVjdCBtZW1fb3BzICpvcHMsIGJvb2wgZXhwZWN0KVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYy01NTYtXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhcJiMzNDtVbmV4cGVjdGVkIGh1Z2UgcGFnZVxcblwmIzM0Oyk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmM6NTU3Olx0X19tYWR2aXNlX2NvbGxhcHNlKG1zZywgcCwgbnJfaHBhZ2VzLCBvcHMsIGV4cGVjdCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMtNTU4LX1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmM9NjgwPXN0YXRpYyBzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCBfX21hZHZpc2VfY29udGV4dCA9IHtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYzo2ODE6XHQuY29sbGFwc2UgPSBcdTAwMjZtYWR2aXNlX2NvbGxhcHNlLFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jLTY4Mi1cdC5lbmZvcmNlX3B0ZV9zY2FuX2xpbWl0cyA9IGZhbHNlLFxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYz0xMDc2PXN0YXRpYyB2b2lkIGNvbGxhcHNlX21heF9wdGVzX3NoYXJlZChzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqYywgc3RydWN0IG1lbV9vcHMgKm9wcylcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMtMTEzMy1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYzoxMTM0OnN0YXRpYyB2b2lkIG1hZHZpc2VfY29sbGFwc2VfZXhpc3RpbmdfdGhwcyhzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCAqYyxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYy0xMTM1LVx0XHRcdFx0XHQgICBzdHJ1Y3QgbWVtX29wcyAqb3BzKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYy0xMTQ0LVx0LyogYy1cdTAwM2Vjb2xsYXBzZSgpIHdpbGwgZmluZCBhIGh1Z2VwYWdlIGFuZCBjb21wbGFpbiAtIGNhbGwgZGlyZWN0bHkuICovXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmM6MTE0NTpcdF9fbWFkdmlzZV9jb2xsYXBzZShcJiMzNDtSZS1jb2xsYXBzZSBQTUQtbWFwcGVkIGh1Z2VwYWdlXCYjMzQ7LCBwLCAxLCBvcHMsIHRydWUpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jLTExNDYtXHR2YWxpZGF0ZV9tZW1vcnkocCwgMCwgaHBhZ2VfcG1kX3NpemUpO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYz0xMzExPWludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndilcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMtMTQzMi1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYzoxNDMzOlx0VEVTVChtYWR2aXNlX2NvbGxhcHNlX2V4aXN0aW5nX3RocHMsIG1hZHZpc2VfY29udGV4dCwgYW5vbl9vcHMpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jOjE0MzQ6XHRURVNUKG1hZHZpc2VfY29sbGFwc2VfZXhpc3RpbmdfdGhwcywgbWFkdmlzZV9jb250ZXh0LCByZWFkX29ubHlfZmlsZV9vcHMpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jOjE0MzU6XHRURVNUKG1hZHZpc2VfY29sbGFwc2VfZXhpc3RpbmdfdGhwcywgbWFkdmlzZV9jb250ZXh0LCByZWFkX3dyaXRlX2ZpbGVfcmVhZF9vcHMpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jOjE0MzY6XHRURVNUKG1hZHZpc2VfY29sbGFwc2VfZXhpc3RpbmdfdGhwcywgbWFkdmlzZV9jb250ZXh0LCBzaG1lbV9vcHMpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jLTE0MzctXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDAyOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNDQwCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogNTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyBLZXJuZWwgSHVnZSBQYWdlIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgdGltZSB0byBkaWcgaW50byBob3cgYGtodWdlcGFnZWRgIGFuZCB0aGF0IHBlc2t5IGB1c2VyZmF1bHRmZF9taW5vcmAgYXJlIGNvbmZpZ3VyZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVzZSB0aGluZ3MuIEZpcnN0LCBJJiMzOTtsbCBnbyBzdHJhaWdodCB0byB0aGUgc291cmNlIOKAkyB0aGUgS2NvbmZpZyBmaWxlcy4gSSYjMzk7bGwgbmVlZCB0byBzZWUgaG93IHRoZSBzZXR0aW5ncyBpbiBga2h1Z2VwYWdlZC5jYCBhbmQgYHVzZXJmYXVsdGZkX21pbm9yYCBhcmUgY29udHJvbGxlZC4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYSBmb2N1c2VkIGdyZXAuIEkmIzM5O2xsIHNlYXJjaCBmb3IgcmVmZXJlbmNlcyB0byBga2h1Z2VwYWdlZGAgaW4gdGhlIGBtbS9NYWtlZmlsZWAgYW5kIGBtbS9LY29uZmlnYCBmaWxlcy4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2Qgb3ZlcnZpZXcgb2YgdGhlIGJ1aWxkIGRlcGVuZGVuY2llcyBhbmQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBGcm9tIHRoZXJlLCBJJiMzOTtsbCBiZSBhYmxlIHRvIGJ1aWxkIGEgbWVudGFsIG1hcCBvZiBob3cgdGhlc2UgZmVhdHVyZXMgYXJlIGVuYWJsZWQsIGRpc2FibGVkLCBhbmQgcG90ZW50aWFsbHkgdHVuZWQuIFRoaXMgS2NvbmZpZyBleHBsb3JhdGlvbiBzaG91bGQgc2hlZCBsaWdodCBvbiB0aGUgYnVpbGQtdGltZSBkZXBlbmRlbmNpZXMgYW5kIHBlcmhhcHMgc29tZSBvZiB0aGUgYnJvYWRlciBhcmNoaXRlY3R1cmUgaW52b2x2ZWQgaW4gaGFuZGxpbmcgaHVnZSBwYWdlcyBhbmQgdXNlciBmYXVsdCBoYW5kbGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDI6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a2h1Z2VwYWdlZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgODYyIGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG5tbS9NYWtlZmlsZT0xMDA9b2JqLSQoQ09ORklHX0RFVklDRV9NSUdSQVRJT04pICYjNDM7PSBtaWdyYXRlX2RldmljZS5vXG5tbS9NYWtlZmlsZToxMDE6b2JqLSQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSAmIzQzOz0gaHVnZV9tZW1vcnkubyBraHVnZXBhZ2VkLm9cbm1tL01ha2VmaWxlLTEwMi1vYmotJChDT05GSUdfUEFHRV9DT1VOVEVSKSAmIzQzOz0gcGFnZV9jb3VudGVyLm9cbi0tXG5tbS9odWdlX21lbW9yeS5jLTIzLSNpbmNsdWRlIFx1MDAzY2xpbnV4L21tX3R5cGVzLmhcdTAwM2Vcbm1tL2h1Z2VfbWVtb3J5LmM6MjQ6I2luY2x1ZGUgXHUwMDNjbGludXgva2h1Z2VwYWdlZC5oXHUwMDNlXG5tbS9odWdlX21lbW9yeS5jLTI1LSNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZyZWV6ZXIuaFx1MDAzZVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNTYtICogZ3VhcmFudGVlZCB0byBiZW5lZml0IGZyb20gaXQuIFdoZW4gdHJhbnNwYXJlbnQgaHVnZXBhZ2Ugc3VwcG9ydCBpc1xubW0vaHVnZV9tZW1vcnkuYzo1NzogKiBlbmFibGVkLCBpdCBpcyBmb3IgYWxsIG1hcHBpbmdzLCBhbmQga2h1Z2VwYWdlZCBzY2FucyBhbGwgbWFwcGluZ3MuXG5tbS9odWdlX21lbW9yeS5jOjU4OiAqIERlZnJhZyBpcyBpbnZva2VkIGJ5IGtodWdlcGFnZWQgaHVnZXBhZ2UgYWxsb2NhdGlvbnMgYW5kIGJ5IHBhZ2UgZmF1bHRzXG5tbS9odWdlX21lbW9yeS5jLTU5LSAqIGZvciBhbGwgaHVnZXBhZ2UgYWxsb2NhdGlvbnMuXG4tLVxubW0vaHVnZV9tZW1vcnkuYz0xMjE9dW5zaWduZWQgbG9uZyBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVycyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9odWdlX21lbW9yeS5jLTE0OC1cbm1tL2h1Z2VfbWVtb3J5LmM6MTQ5Olx0Lyoga2h1Z2VwYWdlZCBkb2VzbiYjMzk7dCBjb2xsYXBzZSBEQVggdm1hLCBidXQgcGFnZSBmYXVsdCBpcyBmaW5lLiAqL1xubW0vaHVnZV9tZW1vcnkuYy0xNTAtXHRpZiAodm1hX2lzX2RheCh2bWEpKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMTUzLVx0Lypcbm1tL2h1Z2VfbWVtb3J5LmM6MTU0Olx0ICoga2h1Z2VwYWdlZCBzcGVjaWFsIFZNQSBhbmQgaHVnZXRsYiBWTUEuXG5tbS9odWdlX21lbW9yeS5jLTE1NS1cdCAqIE11c3QgYmUgY2hlY2tlZCBhZnRlciBkYXggc2luY2Ugc29tZSBkYXggbWFwcGluZ3MgbWF5IGhhdmVcbi0tXG5tbS9odWdlX21lbW9yeS5jPTQ0NT1zdGF0aWMgc3NpemVfdCBlbmFibGVkX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDU1LVx0aWYgKHNldF9nbG9iYWxfZW5hYmxlZF9tb2RlKG1vZGUpKSB7XG5tbS9odWdlX21lbW9yeS5jOjQ1NjpcdFx0aW50IGVyciA9IHN0YXJ0X3N0b3Bfa2h1Z2VwYWdlZCgpO1xubW0vaHVnZV9tZW1vcnkuYy00NTctXG4tLVxubW0vaHVnZV9tZW1vcnkuYy00NjMtXHRcdCAqIGNoYW5nZSwgYXMgdGhlIHByZXZpb3VzIGNvZGUgYWx3YXlzIGNhbGxlZFxubW0vaHVnZV9tZW1vcnkuYzo0NjQ6XHRcdCAqIHN0YXJ0X3N0b3Bfa2h1Z2VwYWdlZCgpIHdoaWNoIGRvZXMgdGhpcyBpbnRlcm5hbGx5LlxubW0vaHVnZV9tZW1vcnkuYy00NjUtXHRcdCAqL1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9NjgwPXN0YXRpYyBzc2l6ZV90IGFub25fZW5hYmxlZF9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcbi0tXG5tbS9odWdlX21lbW9yeS5jLTY5MS1cdGlmIChzZXRfYW5vbl9lbmFibGVkX21vZGUob3JkZXIsIG1vZGUpKSB7XG5tbS9odWdlX21lbW9yeS5jOjY5MjpcdFx0aW50IGVyciA9IHN0YXJ0X3N0b3Bfa2h1Z2VwYWdlZCgpO1xubW0vaHVnZV9tZW1vcnkuYy02OTMtXG4tLVxubW0vaHVnZV9tZW1vcnkuYy02OTktXHRcdCAqIGNoYW5nZSwgYXMgdGhlIHByZXZpb3VzIGNvZGUgYWx3YXlzIGNhbGxlZFxubW0vaHVnZV9tZW1vcnkuYzo3MDA6XHRcdCAqIHN0YXJ0X3N0b3Bfa2h1Z2VwYWdlZCgpIHdoaWNoIGRvZXMgdGhpcyBpbnRlcm5hbGx5LlxubW0vaHVnZV9tZW1vcnkuYy03MDEtXHRcdCAqL1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9OTMzPXN0YXRpYyBpbnQgX19pbml0IGh1Z2VwYWdlX2luaXRfc3lzZnMoc3RydWN0IGtvYmplY3QgKipodWdlcGFnZV9rb2JqKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtOTU5LVxubW0vaHVnZV9tZW1vcnkuYzo5NjA6XHRlcnIgPSBzeXNmc19jcmVhdGVfZ3JvdXAoKmh1Z2VwYWdlX2tvYmosIFx1MDAyNmtodWdlcGFnZWRfYXR0cl9ncm91cCk7XG5tbS9odWdlX21lbW9yeS5jLTk2MS1cdGlmIChlcnIpIHtcbi0tXG5tbS9odWdlX21lbW9yeS5jPTk5MT1zdGF0aWMgdm9pZCBfX2luaXQgaHVnZXBhZ2VfZXhpdF9zeXNmcyhzdHJ1Y3Qga29iamVjdCAqaHVnZXBhZ2Vfa29iailcbi0tXG5tbS9odWdlX21lbW9yeS5jLTk5OS1cbm1tL2h1Z2VfbWVtb3J5LmM6MTAwMDpcdHN5c2ZzX3JlbW92ZV9ncm91cChodWdlcGFnZV9rb2JqLCBcdTAwMjZraHVnZXBhZ2VkX2F0dHJfZ3JvdXApO1xubW0vaHVnZV9tZW1vcnkuYy0xMDAxLVx0c3lzZnNfcmVtb3ZlX2dyb3VwKGh1Z2VwYWdlX2tvYmosIFx1MDAyNmh1Z2VwYWdlX2F0dHJfZ3JvdXApO1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MTA1MT1zdGF0aWMgaW50IF9faW5pdCBodWdlcGFnZV9pbml0KHZvaWQpXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0xMDY5LVxubW0vaHVnZV9tZW1vcnkuYzoxMDcwOlx0ZXJyID0ga2h1Z2VwYWdlZF9pbml0KCk7XG5tbS9odWdlX21lbW9yeS5jLTEwNzEtXHRpZiAoZXJyKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMTA4Ny1cbm1tL2h1Z2VfbWVtb3J5LmM6MTA4ODpcdGVyciA9IHN0YXJ0X3N0b3Bfa2h1Z2VwYWdlZCgpO1xubW0vaHVnZV9tZW1vcnkuYy0xMDg5LVx0aWYgKGVycilcbm1tL2h1Z2VfbWVtb3J5LmM6MTA5MDpcdFx0Z290byBlcnJfa2h1Z2VwYWdlZDtcbm1tL2h1Z2VfbWVtb3J5LmMtMTA5MS1cbm1tL2h1Z2VfbWVtb3J5LmMtMTA5Mi1cdHJldHVybiAwO1xubW0vaHVnZV9tZW1vcnkuYzoxMDkzOmVycl9raHVnZXBhZ2VkOlxubW0vaHVnZV9tZW1vcnkuYy0xMDk0LVx0dGhwX3Nocmlua2VyX2V4aXQoKTtcbm1tL2h1Z2VfbWVtb3J5LmMtMTA5NS1lcnJfc2hyaW5rZXI6XG5tbS9odWdlX21lbW9yeS5jOjEwOTY6XHRraHVnZXBhZ2VkX2Rlc3Ryb3koKTtcbm1tL2h1Z2VfbWVtb3J5LmMtMTA5Ny1lcnJfc2xhYjpcbi0tXG5tbS9odWdlX21lbW9yeS5jPTE1MjA9dm1fZmF1bHRfdCBkb19odWdlX3BtZF9hbm9ueW1vdXNfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbi0tXG5tbS9odWdlX21lbW9yeS5jLTE1MzAtXHRcdHJldHVybiByZXQ7XG5tbS9odWdlX21lbW9yeS5jOjE1MzE6XHRraHVnZXBhZ2VkX2VudGVyX3ZtYSh2bWEsIHZtYS1cdTAwM2V2bV9mbGFncyk7XG5tbS9odWdlX21lbW9yeS5jLTE1MzItXG4tLVxubW0vaHVnZV9tZW1vcnkuYz00NTYxPXN0YXRpYyBib29sIHRocF91bmRlcnVzZWQoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQ1NjUtXG5tbS9odWdlX21lbW9yeS5jOjQ1NjY6XHRpZiAoa2h1Z2VwYWdlZF9tYXhfcHRlc19ub25lID09IEhQQUdFX1BNRF9OUiAtIDEpXG5tbS9odWdlX21lbW9yeS5jLTQ1NjctXHRcdHJldHVybiBmYWxzZTtcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQ1NzMtXHRcdGlmIChwYWdlc19pZGVudGljYWwoZm9saW9fcGFnZShmb2xpbywgaSksIFpFUk9fUEFHRSgwKSkpIHtcbm1tL2h1Z2VfbWVtb3J5LmM6NDU3NDpcdFx0XHRpZiAoJiM0MzsmIzQzO251bV96ZXJvX3BhZ2VzIFx1MDAzZSBraHVnZXBhZ2VkX21heF9wdGVzX25vbmUpXG5tbS9odWdlX21lbW9yeS5jLTQ1NzUtXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQ1ODAtXHRcdFx0ICovXG5tbS9odWdlX21lbW9yeS5jOjQ1ODE6XHRcdFx0aWYgKCYjNDM7JiM0MztudW1fZmlsbGVkX3BhZ2VzIFx1MDAzZT0gSFBBR0VfUE1EX05SIC0ga2h1Z2VwYWdlZF9tYXhfcHRlc19ub25lKVxubW0vaHVnZV9tZW1vcnkuYy00NTgyLVx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuLS1cbm1tL2ludGVybmFsLmgtMTAtI2luY2x1ZGUgXHUwMDNjbGludXgvZnMuaFx1MDAzZVxubW0vaW50ZXJuYWwuaDoxMTojaW5jbHVkZSBcdTAwM2NsaW51eC9raHVnZXBhZ2VkLmhcdTAwM2Vcbm1tL2ludGVybmFsLmgtMTItI2luY2x1ZGUgXHUwMDNjbGludXgvbW0uaFx1MDAzZVxuLS1cbm1tL2ludGVybmFsLmg9NzA2PXBtZF90ICptbV9maW5kX3BtZChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKTtcbi0tXG5tbS9pbnRlcm5hbC5oLTcwOC0vKlxubW0vaW50ZXJuYWwuaDo3MDk6ICogaW4gbW0va2h1Z2VwYWdlZC5jXG5tbS9pbnRlcm5hbC5oLTcxMC0gKi9cbi0tXG5tbS9raHVnZXBhZ2VkLmMtMTEtI2luY2x1ZGUgXHUwMDNjbGludXgva3RocmVhZC5oXHUwMDNlXG5tbS9raHVnZXBhZ2VkLmM6MTI6I2luY2x1ZGUgXHUwMDNjbGludXgva2h1Z2VwYWdlZC5oXHUwMDNlXG5tbS9raHVnZXBhZ2VkLmMtMTMtI2luY2x1ZGUgXHUwMDNjbGludXgvZnJlZXplci5oXHUwMDNlXG4tLVxubW0va2h1Z2VwYWdlZC5jPTMzPWVudW0gc2Nhbl9yZXN1bHQge1xuLS1cbm1tL2todWdlcGFnZWQuYy03MC1cbm1tL2todWdlcGFnZWQuYzo3MTpzdGF0aWMgc3RydWN0IHRhc2tfc3RydWN0ICpraHVnZXBhZ2VkX3RocmVhZCBfX3JlYWRfbW9zdGx5O1xubW0va2h1Z2VwYWdlZC5jOjcyOnN0YXRpYyBERUZJTkVfTVVURVgoa2h1Z2VwYWdlZF9tdXRleCk7XG5tbS9raHVnZXBhZ2VkLmMtNzMtXG4tLVxubW0va2h1Z2VwYWdlZC5jLTc3LSAqL1xubW0va2h1Z2VwYWdlZC5jOjc4OnN0YXRpYyB1bnNpZ25lZCBpbnQga2h1Z2VwYWdlZF9wYWdlc190b19zY2FuIF9fcmVhZF9tb3N0bHk7XG5tbS9raHVnZXBhZ2VkLmM6Nzk6c3RhdGljIHVuc2lnbmVkIGludCBraHVnZXBhZ2VkX3BhZ2VzX2NvbGxhcHNlZDtcbm1tL2todWdlcGFnZWQuYzo4MDpzdGF0aWMgdW5zaWduZWQgaW50IGtodWdlcGFnZWRfZnVsbF9zY2Fucztcbm1tL2todWdlcGFnZWQuYzo4MTpzdGF0aWMgdW5zaWduZWQgaW50IGtodWdlcGFnZWRfc2Nhbl9zbGVlcF9taWxsaXNlY3MgX19yZWFkX21vc3RseSA9IDEwMDAwO1xubW0va2h1Z2VwYWdlZC5jLTgyLS8qIGR1cmluZyBmcmFnbWVudGF0aW9uIHBvbGwgdGhlIGh1Z2VwYWdlIGFsbG9jYXRvciBvbmNlIGV2ZXJ5IG1pbnV0ZSAqL1xubW0va2h1Z2VwYWdlZC5jOjgzOnN0YXRpYyB1bnNpZ25lZCBpbnQga2h1Z2VwYWdlZF9hbGxvY19zbGVlcF9taWxsaXNlY3MgX19yZWFkX21vc3RseSA9IDYwMDAwO1xubW0va2h1Z2VwYWdlZC5jOjg0OnN0YXRpYyB1bnNpZ25lZCBsb25nIGtodWdlcGFnZWRfc2xlZXBfZXhwaXJlO1xubW0va2h1Z2VwYWdlZC5jOjg1OnN0YXRpYyBERUZJTkVfU1BJTkxPQ0soa2h1Z2VwYWdlZF9tbV9sb2NrKTtcbm1tL2todWdlcGFnZWQuYzo4NjpzdGF0aWMgREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQoa2h1Z2VwYWdlZF93YWl0KTtcbm1tL2todWdlcGFnZWQuYy04Ny0vKlxuLS1cbm1tL2todWdlcGFnZWQuYy05MS0gKlxubW0va2h1Z2VwYWdlZC5jOjkyOiAqIE5vdGUgdGhhdCB0aGVzZSBhcmUgb25seSByZXNwZWN0ZWQgaWYgY29sbGFwc2Ugd2FzIGluaXRpYXRlZCBieSBraHVnZXBhZ2VkLlxubW0va2h1Z2VwYWdlZC5jLTkzLSAqL1xubW0va2h1Z2VwYWdlZC5jLTk0LSNkZWZpbmUgS0hVR0VQQUdFRF9NQVhfUFRFU19MSU1JVCAoSFBBR0VfUE1EX05SIC0gMSlcbm1tL2todWdlcGFnZWQuYzo5NTp1bnNpZ25lZCBpbnQga2h1Z2VwYWdlZF9tYXhfcHRlc19ub25lIF9fcmVhZF9tb3N0bHk7XG5tbS9raHVnZXBhZ2VkLmM6OTY6c3RhdGljIHVuc2lnbmVkIGludCBraHVnZXBhZ2VkX21heF9wdGVzX3N3YXAgX19yZWFkX21vc3RseTtcbm1tL2todWdlcGFnZWQuYzo5NzpzdGF0aWMgdW5zaWduZWQgaW50IGtodWdlcGFnZWRfbWF4X3B0ZXNfc2hhcmVkIF9fcmVhZF9tb3N0bHk7XG5tbS9raHVnZXBhZ2VkLmMtOTgtXG4tLVxubW0va2h1Z2VwYWdlZC5jPTEwNj1zdHJ1Y3QgY29sbGFwc2VfY29udHJvbCB7XG5tbS9raHVnZXBhZ2VkLmM6MTA3Olx0Ym9vbCBpc19raHVnZXBhZ2VkO1xubW0va2h1Z2VwYWdlZC5jLTEwOC1cbi0tXG5tbS9raHVnZXBhZ2VkLmMtMTExLVxubW0va2h1Z2VwYWdlZC5jOjExMjpcdC8qIE51bSBwYWdlcyBzY2FubmVkIChzZWUga2h1Z2VwYWdlZF9wYWdlc190b19zY2FuKSAqL1xubW0va2h1Z2VwYWdlZC5jLTExMy1cdHVuc2lnbmVkIGludCBwcm9ncmVzcztcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMTIyLS8qKlxubW0va2h1Z2VwYWdlZC5jOjEyMzogKiBzdHJ1Y3Qga2h1Z2VwYWdlZF9zY2FuIC0gY3Vyc29yIGZvciBzY2FubmluZ1xubW0va2h1Z2VwYWdlZC5jLTEyNC0gKiBAbW1faGVhZDogdGhlIGhlYWQgb2YgdGhlIG1tIGxpc3QgdG8gc2NhblxuLS1cbm1tL2todWdlcGFnZWQuYy0xMjctICpcbm1tL2todWdlcGFnZWQuYzoxMjg6ICogVGhlcmUgaXMgb25seSB0aGUgb25lIGtodWdlcGFnZWRfc2NhbiBpbnN0YW5jZSBvZiB0aGlzIGN1cnNvciBzdHJ1Y3R1cmUuXG5tbS9raHVnZXBhZ2VkLmMtMTI5LSAqL1xubW0va2h1Z2VwYWdlZC5jOjEzMDpzdHJ1Y3Qga2h1Z2VwYWdlZF9zY2FuIHtcbm1tL2todWdlcGFnZWQuYy0xMzEtXHRzdHJ1Y3QgbGlzdF9oZWFkIG1tX2hlYWQ7XG4tLVxubW0va2h1Z2VwYWdlZC5jLTEzNS1cbm1tL2todWdlcGFnZWQuYzoxMzY6c3RhdGljIHN0cnVjdCBraHVnZXBhZ2VkX3NjYW4ga2h1Z2VwYWdlZF9zY2FuID0ge1xubW0va2h1Z2VwYWdlZC5jOjEzNzpcdC5tbV9oZWFkID0gTElTVF9IRUFEX0lOSVQoa2h1Z2VwYWdlZF9zY2FuLm1tX2hlYWQpLFxubW0va2h1Z2VwYWdlZC5jLTEzOC19O1xuLS1cbm1tL2todWdlcGFnZWQuYz0xNDE9c3RhdGljIHNzaXplX3Qgc2Nhbl9zbGVlcF9taWxsaXNlY3Nfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMTQ0LXtcbm1tL2todWdlcGFnZWQuYzoxNDU6XHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwmIzM0OyV1XFxuXCYjMzQ7LCBraHVnZXBhZ2VkX3NjYW5fc2xlZXBfbWlsbGlzZWNzKTtcbm1tL2todWdlcGFnZWQuYy0xNDYtfVxuLS1cbm1tL2todWdlcGFnZWQuYz0xNDg9c3RhdGljIHNzaXplX3QgX19zbGVlcF9taWxsaXNlY3Nfc3RvcmUoY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQsXG4tLVxubW0va2h1Z2VwYWdlZC5jLTE1OC1cdCptaWxsaXNlY3MgPSBtc2Vjcztcbm1tL2todWdlcGFnZWQuYzoxNTk6XHRraHVnZXBhZ2VkX3NsZWVwX2V4cGlyZSA9IDA7XG5tbS9raHVnZXBhZ2VkLmM6MTYwOlx0d2FrZV91cF9pbnRlcnJ1cHRpYmxlKFx1MDAyNmtodWdlcGFnZWRfd2FpdCk7XG5tbS9raHVnZXBhZ2VkLmMtMTYxLVxuLS1cbm1tL2todWdlcGFnZWQuYz0xNjU9c3RhdGljIHNzaXplX3Qgc2Nhbl9zbGVlcF9taWxsaXNlY3Nfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXG4tLVxubW0va2h1Z2VwYWdlZC5jLTE2OC17XG5tbS9raHVnZXBhZ2VkLmM6MTY5Olx0cmV0dXJuIF9fc2xlZXBfbWlsbGlzZWNzX3N0b3JlKGJ1ZiwgY291bnQsIFx1MDAyNmtodWdlcGFnZWRfc2Nhbl9zbGVlcF9taWxsaXNlY3MpO1xubW0va2h1Z2VwYWdlZC5jLTE3MC19XG4tLVxubW0va2h1Z2VwYWdlZC5jPTE3ND1zdGF0aWMgc3NpemVfdCBhbGxvY19zbGVlcF9taWxsaXNlY3Nfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMTc3LXtcbm1tL2todWdlcGFnZWQuYzoxNzg6XHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwmIzM0OyV1XFxuXCYjMzQ7LCBraHVnZXBhZ2VkX2FsbG9jX3NsZWVwX21pbGxpc2Vjcyk7XG5tbS9raHVnZXBhZ2VkLmMtMTc5LX1cbi0tXG5tbS9raHVnZXBhZ2VkLmM9MTgxPXN0YXRpYyBzc2l6ZV90IGFsbG9jX3NsZWVwX21pbGxpc2Vjc19zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMTg0LXtcbm1tL2todWdlcGFnZWQuYzoxODU6XHRyZXR1cm4gX19zbGVlcF9taWxsaXNlY3Nfc3RvcmUoYnVmLCBjb3VudCwgXHUwMDI2a2h1Z2VwYWdlZF9hbGxvY19zbGVlcF9taWxsaXNlY3MpO1xubW0va2h1Z2VwYWdlZC5jLTE4Ni19XG4tLVxubW0va2h1Z2VwYWdlZC5jPTE5MD1zdGF0aWMgc3NpemVfdCBwYWdlc190b19zY2FuX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXG4tLVxubW0va2h1Z2VwYWdlZC5jLTE5My17XG5tbS9raHVnZXBhZ2VkLmM6MTk0Olx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcJiMzNDsldVxcblwmIzM0Oywga2h1Z2VwYWdlZF9wYWdlc190b19zY2FuKTtcbm1tL2todWdlcGFnZWQuYy0xOTUtfVxubW0va2h1Z2VwYWdlZC5jPTE5Nj1zdGF0aWMgc3NpemVfdCBwYWdlc190b19zY2FuX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbm1tL2todWdlcGFnZWQuYy0yMDYtXG5tbS9raHVnZXBhZ2VkLmM6MjA3Olx0a2h1Z2VwYWdlZF9wYWdlc190b19zY2FuID0gcGFnZXM7XG5tbS9raHVnZXBhZ2VkLmMtMjA4LVxuLS1cbm1tL2todWdlcGFnZWQuYz0yMTQ9c3RhdGljIHNzaXplX3QgcGFnZXNfY29sbGFwc2VkX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXG4tLVxubW0va2h1Z2VwYWdlZC5jLTIxNy17XG5tbS9raHVnZXBhZ2VkLmM6MjE4Olx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcJiMzNDsldVxcblwmIzM0Oywga2h1Z2VwYWdlZF9wYWdlc19jb2xsYXBzZWQpO1xubW0va2h1Z2VwYWdlZC5jLTIxOS19XG4tLVxubW0va2h1Z2VwYWdlZC5jPTIyMz1zdGF0aWMgc3NpemVfdCBmdWxsX3NjYW5zX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXG4tLVxubW0va2h1Z2VwYWdlZC5jLTIyNi17XG5tbS9raHVnZXBhZ2VkLmM6MjI3Olx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcJiMzNDsldVxcblwmIzM0Oywga2h1Z2VwYWdlZF9mdWxsX3NjYW5zKTtcbm1tL2todWdlcGFnZWQuYy0yMjgtfVxuLS1cbm1tL2todWdlcGFnZWQuYz0yMzg9c3RhdGljIHNzaXplX3QgZGVmcmFnX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbm1tL2todWdlcGFnZWQuYy0yNDQtfVxubW0va2h1Z2VwYWdlZC5jOjI0NTpzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGtodWdlcGFnZWRfZGVmcmFnX2F0dHIgPVxubW0va2h1Z2VwYWdlZC5jLTI0Ni1cdF9fQVRUUl9SVyhkZWZyYWcpO1xuLS1cbm1tL2todWdlcGFnZWQuYy0yNDgtLypcbm1tL2todWdlcGFnZWQuYzoyNDk6ICogbWF4X3B0ZXNfbm9uZSBjb250cm9scyBpZiBraHVnZXBhZ2VkIHNob3VsZCBjb2xsYXBzZSBodWdlcGFnZXMgb3ZlclxubW0va2h1Z2VwYWdlZC5jLTI1MC0gKiBhbnkgdW5tYXBwZWQgcHRlcyBpbiB0dXJuIHBvdGVudGlhbGx5IGluY3JlYXNpbmcgdGhlIG1lbW9yeVxubW0va2h1Z2VwYWdlZC5jOjI1MTogKiBmb290cHJpbnQgb2YgdGhlIHZtYXMuIFdoZW4gbWF4X3B0ZXNfbm9uZSBpcyAwIGtodWdlcGFnZWQgd2lsbCBub3Rcbm1tL2todWdlcGFnZWQuYy0yNTItICogcmVkdWNlIHRoZSBhdmFpbGFibGUgZnJlZSBtZW1vcnkgaW4gdGhlIHN5c3RlbSBhcyBpdFxubW0va2h1Z2VwYWdlZC5jLTI1My0gKiBydW5zLiBJbmNyZWFzaW5nIG1heF9wdGVzX25vbmUgd2lsbCBpbnN0ZWFkIHBvdGVudGlhbGx5IHJlZHVjZSB0aGVcbm1tL2todWdlcGFnZWQuYzoyNTQ6ICogZnJlZSBtZW1vcnkgaW4gdGhlIHN5c3RlbSBkdXJpbmcgdGhlIGtodWdlcGFnZWQgc2Nhbi5cbm1tL2todWdlcGFnZWQuYy0yNTUtICovXG5tbS9raHVnZXBhZ2VkLmM9MjU2PXN0YXRpYyBzc2l6ZV90IG1heF9wdGVzX25vbmVfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMjU5LXtcbm1tL2todWdlcGFnZWQuYzoyNjA6XHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwmIzM0OyV1XFxuXCYjMzQ7LCBraHVnZXBhZ2VkX21heF9wdGVzX25vbmUpO1xubW0va2h1Z2VwYWdlZC5jLTI2MS19XG5tbS9raHVnZXBhZ2VkLmM9MjYyPXN0YXRpYyBzc2l6ZV90IG1heF9wdGVzX25vbmVfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXG4tLVxubW0va2h1Z2VwYWdlZC5jLTI3Mi1cbm1tL2todWdlcGFnZWQuYzoyNzM6XHRraHVnZXBhZ2VkX21heF9wdGVzX25vbmUgPSBtYXhfcHRlc19ub25lO1xubW0va2h1Z2VwYWdlZC5jLTI3NC1cbi0tXG5tbS9raHVnZXBhZ2VkLmMtMjc2LX1cbm1tL2todWdlcGFnZWQuYzoyNzc6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBraHVnZXBhZ2VkX21heF9wdGVzX25vbmVfYXR0ciA9XG5tbS9raHVnZXBhZ2VkLmMtMjc4LVx0X19BVFRSX1JXKG1heF9wdGVzX25vbmUpO1xuLS1cbm1tL2todWdlcGFnZWQuYz0yODA9c3RhdGljIHNzaXplX3QgbWF4X3B0ZXNfc3dhcF9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbm1tL2todWdlcGFnZWQuYy0yODMte1xubW0va2h1Z2VwYWdlZC5jOjI4NDpcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCYjMzQ7JXVcXG5cJiMzNDssIGtodWdlcGFnZWRfbWF4X3B0ZXNfc3dhcCk7XG5tbS9raHVnZXBhZ2VkLmMtMjg1LX1cbi0tXG5tbS9raHVnZXBhZ2VkLmM9Mjg3PXN0YXRpYyBzc2l6ZV90IG1heF9wdGVzX3N3YXBfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXG4tLVxubW0va2h1Z2VwYWdlZC5jLTI5Ny1cbm1tL2todWdlcGFnZWQuYzoyOTg6XHRraHVnZXBhZ2VkX21heF9wdGVzX3N3YXAgPSBtYXhfcHRlc19zd2FwO1xubW0va2h1Z2VwYWdlZC5jLTI5OS1cbi0tXG5tbS9raHVnZXBhZ2VkLmMtMzAyLVxubW0va2h1Z2VwYWdlZC5jOjMwMzpzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGtodWdlcGFnZWRfbWF4X3B0ZXNfc3dhcF9hdHRyID1cbm1tL2todWdlcGFnZWQuYy0zMDQtXHRfX0FUVFJfUlcobWF4X3B0ZXNfc3dhcCk7XG4tLVxubW0va2h1Z2VwYWdlZC5jPTMwNj1zdGF0aWMgc3NpemVfdCBtYXhfcHRlc19zaGFyZWRfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMzA5LXtcbm1tL2todWdlcGFnZWQuYzozMTA6XHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwmIzM0OyV1XFxuXCYjMzQ7LCBraHVnZXBhZ2VkX21heF9wdGVzX3NoYXJlZCk7XG5tbS9raHVnZXBhZ2VkLmMtMzExLX1cbi0tXG5tbS9raHVnZXBhZ2VkLmM9MzEzPXN0YXRpYyBzc2l6ZV90IG1heF9wdGVzX3NoYXJlZF9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMzIzLVxubW0va2h1Z2VwYWdlZC5jOjMyNDpcdGtodWdlcGFnZWRfbWF4X3B0ZXNfc2hhcmVkID0gbWF4X3B0ZXNfc2hhcmVkO1xubW0va2h1Z2VwYWdlZC5jLTMyNS1cbi0tXG5tbS9raHVnZXBhZ2VkLmMtMzI4LVxubW0va2h1Z2VwYWdlZC5jOjMyOTpzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGtodWdlcGFnZWRfbWF4X3B0ZXNfc2hhcmVkX2F0dHIgPVxubW0va2h1Z2VwYWdlZC5jLTMzMC1cdF9fQVRUUl9SVyhtYXhfcHRlc19zaGFyZWQpO1xubW0va2h1Z2VwYWdlZC5jLTMzMS1cbm1tL2todWdlcGFnZWQuYzozMzI6c3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmtodWdlcGFnZWRfYXR0cltdID0ge1xubW0va2h1Z2VwYWdlZC5jOjMzMzpcdFx1MDAyNmtodWdlcGFnZWRfZGVmcmFnX2F0dHIuYXR0cixcbm1tL2todWdlcGFnZWQuYzozMzQ6XHRcdTAwMjZraHVnZXBhZ2VkX21heF9wdGVzX25vbmVfYXR0ci5hdHRyLFxubW0va2h1Z2VwYWdlZC5jOjMzNTpcdFx1MDAyNmtodWdlcGFnZWRfbWF4X3B0ZXNfc3dhcF9hdHRyLmF0dHIsXG5tbS9raHVnZXBhZ2VkLmM6MzM2Olx0XHUwMDI2a2h1Z2VwYWdlZF9tYXhfcHRlc19zaGFyZWRfYXR0ci5hdHRyLFxubW0va2h1Z2VwYWdlZC5jLTMzNy1cdFx1MDAyNnBhZ2VzX3RvX3NjYW5fYXR0ci5hdHRyLFxuLS1cbm1tL2todWdlcGFnZWQuYy0zNDQtXG5tbS9raHVnZXBhZ2VkLmM6MzQ1OnN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAga2h1Z2VwYWdlZF9hdHRyX2dyb3VwID0ge1xubW0va2h1Z2VwYWdlZC5jOjM0NjpcdC5hdHRycyA9IGtodWdlcGFnZWRfYXR0cixcbm1tL2todWdlcGFnZWQuYzozNDc6XHQubmFtZSA9IFwmIzM0O2todWdlcGFnZWRcJiMzNDssXG5tbS9raHVnZXBhZ2VkLmMtMzQ4LX07XG4tLVxubW0va2h1Z2VwYWdlZC5jPTM2Nz1zdGF0aWMgdW5zaWduZWQgaW50IGNvbGxhcHNlX21heF9wdGVzX25vbmUoc3RydWN0IGNvbGxhcHNlX2NvbnRyb2wgKmNjLFxuLS1cbm1tL2todWdlcGFnZWQuYy0zNjkte1xubW0va2h1Z2VwYWdlZC5jOjM3MDpcdGNvbnN0IHVuc2lnbmVkIGludCBtYXhfcHRlc19ub25lID0ga2h1Z2VwYWdlZF9tYXhfcHRlc19ub25lO1xubW0va2h1Z2VwYWdlZC5jLTM3MS1cbi0tXG5tbS9raHVnZXBhZ2VkLmMtMzc0LVx0LyogZm9yIE1BRFZfQ09MTEFQU0UsIGFsbG93IGFueSBlbXB0eS9zaGFyZWQgemVyb3BhZ2UgUFRFcyAqL1xubW0va2h1Z2VwYWdlZC5jOjM3NTpcdGlmICghY2MtXHUwMDNlaXNfa2h1Z2VwYWdlZClcbm1tL2todWdlcGFnZWQuYy0zNzYtXHRcdHJldHVybiBIUEFHRV9QTURfTlI7XG4tLVxubW0va2h1Z2VwYWdlZC5jPTQwNj1zdGF0aWMgdW5zaWduZWQgaW50IGNvbGxhcHNlX21heF9wdGVzX3NoYXJlZChzdHJ1Y3QgY29sbGFwc2VfY29udHJvbCAqY2MsXG4tLVxubW0va2h1Z2VwYWdlZC5jLTQxMi1cdCAqL1xubW0va2h1Z2VwYWdlZC5jOjQxMzpcdGlmICghY2MtXHUwMDNlaXNfa2h1Z2VwYWdlZClcbm1tL2todWdlcGFnZWQuYy00MTQtXHRcdHJldHVybiBIUEFHRV9QTURfTlI7XG4tLVxubW0va2h1Z2VwYWdlZC5jLTQyMS1cdC8qIGZvciBQTUQgY29sbGFwc2UsIHJlc3BlY3QgdGhlIHVzZXIgZGVmaW5lZCBtYXhpbXVtICovXG5tbS9raHVnZXBhZ2VkLmM6NDIyOlx0cmV0dXJuIGtodWdlcGFnZWRfbWF4X3B0ZXNfc2hhcmVkO1xubW0va2h1Z2VwYWdlZC5jLTQyMy19XG4tLVxubW0va2h1Z2VwYWdlZC5jPTQzND1zdGF0aWMgdW5zaWduZWQgaW50IGNvbGxhcHNlX21heF9wdGVzX3N3YXAoc3RydWN0IGNvbGxhcHNlX2NvbnRyb2wgKmNjLFxuLS1cbm1tL2todWdlcGFnZWQuYy00NDAtXHQgKi9cbm1tL2todWdlcGFnZWQuYzo0NDE6XHRpZiAoIWNjLVx1MDAzZWlzX2todWdlcGFnZWQpXG5tbS9raHVnZXBhZ2VkLmMtNDQyLVx0XHRyZXR1cm4gSFBBR0VfUE1EX05SO1xuLS1cbm1tL2todWdlcGFnZWQuYy00NDYtXHQvKiBmb3IgUE1EIGNvbGxhcHNlLCByZXNwZWN0IHRoZSB1c2VyIGRlZmluZWQgbWF4aW11bSAqL1xubW0va2h1Z2VwYWdlZC5jOjQ0NzpcdHJldHVybiBraHVnZXBhZ2VkX21heF9wdGVzX3N3YXA7XG5tbS9raHVnZXBhZ2VkLmMtNDQ4LX1cbi0tXG5tbS9raHVnZXBhZ2VkLmM9NDUwPWludCBodWdlcGFnZV9tYWR2aXNlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL2todWdlcGFnZWQuYy00NjEtXHRcdC8qXG5tbS9raHVnZXBhZ2VkLmM6NDYyOlx0XHQgKiBTZXR0aW5nIFZNX05PSFVHRVBBR0Ugd2lsbCBwcmV2ZW50IGtodWdlcGFnZWQgZnJvbSBzY2FubmluZ1xubW0va2h1Z2VwYWdlZC5jOjQ2MzpcdFx0ICogdGhpcyB2bWEgZXZlbiBpZiB3ZSBsZWF2ZSB0aGUgbW0gcmVnaXN0ZXJlZCBpbiBraHVnZXBhZ2VkIGlmXG5tbS9raHVnZXBhZ2VkLmMtNDY0LVx0XHQgKiBpdCBnb3QgcmVnaXN0ZXJlZCBiZWZvcmUgVk1fTk9IVUdFUEFHRSB3YXMgc2V0LlxuLS1cbm1tL2todWdlcGFnZWQuYy00NzEtXG5tbS9raHVnZXBhZ2VkLmM6NDcyOmludCBfX2luaXQga2h1Z2VwYWdlZF9pbml0KHZvaWQpXG5tbS9raHVnZXBhZ2VkLmMtNDczLXtcbi0tXG5tbS9raHVnZXBhZ2VkLmMtNDc3LVxubW0va2h1Z2VwYWdlZC5jOjQ3ODpcdGtodWdlcGFnZWRfcGFnZXNfdG9fc2NhbiA9IEhQQUdFX1BNRF9OUiAqIDg7XG5tbS9raHVnZXBhZ2VkLmM6NDc5Olx0a2h1Z2VwYWdlZF9tYXhfcHRlc19ub25lID0gS0hVR0VQQUdFRF9NQVhfUFRFU19MSU1JVDtcbm1tL2todWdlcGFnZWQuYzo0ODA6XHRraHVnZXBhZ2VkX21heF9wdGVzX3N3YXAgPSBIUEFHRV9QTURfTlIgLyA4O1xubW0va2h1Z2VwYWdlZC5jOjQ4MTpcdGtodWdlcGFnZWRfbWF4X3B0ZXNfc2hhcmVkID0gSFBBR0VfUE1EX05SIC8gMjtcbm1tL2todWdlcGFnZWQuYy00ODItXG4tLVxubW0va2h1Z2VwYWdlZC5jLTQ4NS1cbm1tL2todWdlcGFnZWQuYzo0ODY6dm9pZCBfX2luaXQga2h1Z2VwYWdlZF9kZXN0cm95KHZvaWQpXG5tbS9raHVnZXBhZ2VkLmMtNDg3LXtcbi0tXG5tbS9raHVnZXBhZ2VkLmM9NTE0PXN0YXRpYyBib29sIGh1Z2VwYWdlX2VuYWJsZWQodm9pZClcbi0tXG5tbS9raHVnZXBhZ2VkLmMtNTMxLVxubW0va2h1Z2VwYWdlZC5jOjUzMjp2b2lkIF9fa2h1Z2VwYWdlZF9lbnRlcihzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbm1tL2todWdlcGFnZWQuYy01MzMte1xuLS1cbm1tL2todWdlcGFnZWQuYy01MzYtXG5tbS9raHVnZXBhZ2VkLmM6NTM3Olx0LyogX19raHVnZXBhZ2VkX2V4aXQoKSBtdXN0IG5vdCBydW4gZnJvbSB1bmRlciB1cyAqL1xubW0va2h1Z2VwYWdlZC5jLTUzOC1cdFZNX0JVR19PTl9NTShjb2xsYXBzZV90ZXN0X2V4aXQobW0pLCBtbSk7XG4tLVxubW0va2h1Z2VwYWdlZC5jLTU0OC1cbm1tL2todWdlcGFnZWQuYzo1NDk6XHRzcGluX2xvY2soXHUwMDI2a2h1Z2VwYWdlZF9tbV9sb2NrKTtcbm1tL2todWdlcGFnZWQuYy01NTAtXHRtbV9zbG90X2luc2VydChtbV9zbG90c19oYXNoLCBtbSwgc2xvdCk7XG4tLVxubW0va2h1Z2VwYWdlZC5jLTU1NC1cdCAqL1xubW0va2h1Z2VwYWdlZC5jOjU1NTpcdHdha2V1cCA9IGxpc3RfZW1wdHkoXHUwMDI2a2h1Z2VwYWdlZF9zY2FuLm1tX2hlYWQpO1xubW0va2h1Z2VwYWdlZC5jOjU1NjpcdGxpc3RfYWRkX3RhaWwoXHUwMDI2c2xvdC1cdTAwM2VtbV9ub2RlLCBcdTAwMjZraHVnZXBhZ2VkX3NjYW4ubW1faGVhZCk7XG5tbS9raHVnZXBhZ2VkLmM6NTU3Olx0c3Bpbl91bmxvY2soXHUwMDI2a2h1Z2VwYWdlZF9tbV9sb2NrKTtcbm1tL2todWdlcGFnZWQuYy01NTgtXG4tLVxubW0va2h1Z2VwYWdlZC5jLTU2MC1cdGlmICh3YWtldXApXG5tbS9raHVnZXBhZ2VkLmM6NTYxOlx0XHR3YWtlX3VwX2ludGVycnVwdGlibGUoXHUwMDI2a2h1Z2VwYWdlZF93YWl0KTtcbm1tL2todWdlcGFnZWQuYy01NjItfVxuLS1cbm1tL2todWdlcGFnZWQuYz01Njg9c3RhdGljIHVuc2lnbmVkIGxvbmcgY29sbGFwc2VfcG9zc2libGVfb3JkZXJzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL2todWdlcGFnZWQuYy01NzItXG5tbS9raHVnZXBhZ2VkLmM6NTczOlx0LyogSWYga2h1Z2VwYWdlZCBpcyBzY2FubmluZyBhbiBhbm9ueW1vdXMgdm1hLCBhbGxvdyBtVEhQIGNvbGxhcHNlICovXG5tbS9raHVnZXBhZ2VkLmMtNTc0LVx0aWYgKCh0dmFfZmxhZ3MgPT0gVFZBX0tIVUdFUEFHRUQpIFx1MDAyNlx1MDAyNiB2bWFfaXNfYW5vbnltb3VzKHZtYSkpXG4tLVxubW0va2h1Z2VwYWdlZC5jPTU4Mj1zdGF0aWMgYm9vbCBjb2xsYXBzZV9wb3NzaWJsZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9raHVnZXBhZ2VkLmMtNTg3LVxubW0va2h1Z2VwYWdlZC5jOjU4ODp2b2lkIGtodWdlcGFnZWRfZW50ZXJfdm1hKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxubW0va2h1Z2VwYWdlZC5jLTU4OS1cdFx0XHQgIHZtX2ZsYWdzX3Qgdm1fZmxhZ3MpXG4tLVxubW0va2h1Z2VwYWdlZC5jLTU5Mi1cdCAgICBcdTAwMjZcdTAwMjYgY29sbGFwc2VfcG9zc2libGUodm1hLCB2bV9mbGFncywgVFZBX0tIVUdFUEFHRUQpKVxubW0va2h1Z2VwYWdlZC5jOjU5MzpcdFx0X19raHVnZXBhZ2VkX2VudGVyKHZtYS1cdTAwM2V2bV9tbSk7XG5tbS9raHVnZXBhZ2VkLmMtNTk0LX1cbm1tL2todWdlcGFnZWQuYy01OTUtXG5tbS9raHVnZXBhZ2VkLmM6NTk2OnZvaWQgX19raHVnZXBhZ2VkX2V4aXQoc3RydWN0IG1tX3N0cnVjdCAqbW0pXG5tbS9raHVnZXBhZ2VkLmMtNTk3LXtcbi0tXG5tbS9raHVnZXBhZ2VkLmMtNjAwLVxubW0va2h1Z2VwYWdlZC5jOjYwMTpcdHNwaW5fbG9jayhcdTAwMjZraHVnZXBhZ2VkX21tX2xvY2spO1xubW0va2h1Z2VwYWdlZC5jLTYwMi1cdHNsb3QgPSBtbV9zbG90X2xvb2t1cChtbV9zbG90c19oYXNoLCBtbSk7XG5tbS9raHVnZXBhZ2VkLmM6NjAzOlx0aWYgKHNsb3QgXHUwMDI2XHUwMDI2IGtodWdlcGFnZWRfc2Nhbi5tbV9zbG90ICE9IHNsb3QpIHtcbm1tL2todWdlcGFnZWQuYy02MDQtXHRcdG1tX3Nsb3RfcmVtb3ZlKHNsb3QpO1xuLS1cbm1tL2todWdlcGFnZWQuYy02MDYtXHR9XG5tbS9raHVnZXBhZ2VkLmM6NjA3Olx0c3Bpbl91bmxvY2soXHUwMDI2a2h1Z2VwYWdlZF9tbV9sb2NrKTtcbm1tL2todWdlcGFnZWQuYy02MDgtXG4tLVxubW0va2h1Z2VwYWdlZC5jLTYxNy1cdFx0ICogdW5kZXIgbW1hcF9sb2NrIHJlYWQgbW9kZSkuIFN0b3AgaGVyZSAoYWZ0ZXIgd2UgcmV0dXJuIGFsbFxubW0va2h1Z2VwYWdlZC5jOjYxODpcdFx0ICogcGFnZXRhYmxlcyB3aWxsIGJlIGRlc3Ryb3llZCkgdW50aWwga2h1Z2VwYWdlZCBoYXMgZmluaXNoZWRcbm1tL2todWdlcGFnZWQuYy02MTktXHRcdCAqIHdvcmtpbmcgb24gdGhlIHBhZ2V0YWJsZXMgdW5kZXIgdGhlIG1tYXBfbG9jay5cbi0tXG5tbS9raHVnZXBhZ2VkLmM9Njg3PXN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IF9fY29sbGFwc2VfaHVnZV9wYWdlX2lzb2xhdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0va2h1Z2VwYWdlZC5jLTczMy1cdFx0ICovXG5tbS9raHVnZXBhZ2VkLmM6NzM0Olx0XHRpZiAoY2MtXHUwMDNlaXNfa2h1Z2VwYWdlZCBcdTAwMjZcdTAwMjYgISh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX0RST1BQQUJMRSkgXHUwMDI2XHUwMDI2XG5tbS9raHVnZXBhZ2VkLmMtNzM1LVx0XHQgICAgZm9saW9fdGVzdF9sYXp5ZnJlZShmb2xpbykgXHUwMDI2XHUwMDI2ICFwdGVfZGlydHkocHRldmFsKSkge1xuLS1cbm1tL2todWdlcGFnZWQuYy04MjItbmV4dDpcbm1tL2todWdlcGFnZWQuYzo4MjM6XHRcdGlmIChjYy1cdTAwM2Vpc19raHVnZXBhZ2VkIFx1MDAyNlx1MDAyNlxubW0va2h1Z2VwYWdlZC5jLTgyNC1cdFx0ICAgIGZvbGlvX3B0ZV9yZWZlcmVuY2VkKGZvbGlvLCB2bWEsIGFkZHIsIHB0ZXZhbCkpXG4tLVxubW0va2h1Z2VwYWdlZC5jLTgyNy1cbm1tL2todWdlcGFnZWQuYzo4Mjg6XHRpZiAodW5saWtlbHkoY2MtXHUwMDNlaXNfa2h1Z2VwYWdlZCBcdTAwMjZcdTAwMjYgIXJlZmVyZW5jZWQpKSB7XG5tbS9raHVnZXBhZ2VkLmMtODI5LVx0XHRyZXN1bHQgPSBTQ0FOX0xBQ0tfUkVGRVJFTkNFRF9QQUdFO1xuLS1cbm1tL2todWdlcGFnZWQuYz05NDU9c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgX19jb2xsYXBzZV9odWdlX3BhZ2VfY29weShwdGVfdCAqcHRlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbm1tL2todWdlcGFnZWQuYy05ODMtXG5tbS9raHVnZXBhZ2VkLmM6OTg0OnN0YXRpYyB2b2lkIGtodWdlcGFnZWRfYWxsb2Nfc2xlZXAodm9pZClcbm1tL2todWdlcGFnZWQuYy05ODUte1xuLS1cbm1tL2todWdlcGFnZWQuYy05ODctXG5tbS9raHVnZXBhZ2VkLmM6OTg4Olx0YWRkX3dhaXRfcXVldWUoXHUwMDI2a2h1Z2VwYWdlZF93YWl0LCBcdTAwMjZ3YWl0KTtcbm1tL2todWdlcGFnZWQuYy05ODktXHRfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRXxUQVNLX0ZSRUVaQUJMRSk7XG5tbS9raHVnZXBhZ2VkLmM6OTkwOlx0c2NoZWR1bGVfdGltZW91dChtc2Vjc190b19qaWZmaWVzKGtodWdlcGFnZWRfYWxsb2Nfc2xlZXBfbWlsbGlzZWNzKSk7XG5tbS9raHVnZXBhZ2VkLmM6OTkxOlx0cmVtb3ZlX3dhaXRfcXVldWUoXHUwMDI2a2h1Z2VwYWdlZF93YWl0LCBcdTAwMjZ3YWl0KTtcbm1tL2todWdlcGFnZWQuYy05OTItfVxubW0va2h1Z2VwYWdlZC5jLTk5My1cbm1tL2todWdlcGFnZWQuYzo5OTQ6c3RhdGljIHN0cnVjdCBjb2xsYXBzZV9jb250cm9sIGtodWdlcGFnZWRfY29sbGFwc2VfY29udHJvbCA9IHtcbm1tL2todWdlcGFnZWQuYzo5OTU6XHQuaXNfa2h1Z2VwYWdlZCA9IHRydWUsXG5tbS9raHVnZXBhZ2VkLmMtOTk2LX07XG4tLVxubW0va2h1Z2VwYWdlZC5jPTk5OD1zdGF0aWMgYm9vbCBjb2xsYXBzZV9zY2FuX2Fib3J0KGludCBuaWQsIHN0cnVjdCBjb2xsYXBzZV9jb250cm9sICpjYylcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMTAyMS1cbm1tL2todWdlcGFnZWQuYzoxMDIyOiNkZWZpbmUga2h1Z2VwYWdlZF9kZWZyYWcoKVx0XHRcdFx0XHRcXFxubW0va2h1Z2VwYWdlZC5jLTEwMjMtXHQodHJhbnNwYXJlbnRfaHVnZXBhZ2VfZmxhZ3MgXHUwMDI2XHRcdFx0XHRcXFxuLS1cbm1tL2todWdlcGFnZWQuYy0xMDI1LVxubW0va2h1Z2VwYWdlZC5jOjEwMjY6LyogRGVmcmFnIGZvciBraHVnZXBhZ2VkIHdpbGwgZW50ZXIgZGlyZWN0IHJlY2xhaW0vY29tcGFjdGlvbiBpZiBuZWNlc3NhcnkgKi9cbm1tL2todWdlcGFnZWQuYzoxMDI3OnN0YXRpYyBpbmxpbmUgZ2ZwX3QgYWxsb2NfaHVnZXBhZ2Vfa2h1Z2VwYWdlZF9nZnBtYXNrKHZvaWQpXG5tbS9raHVnZXBhZ2VkLmMtMTAyOC17XG5tbS9raHVnZXBhZ2VkLmM6MTAyOTpcdHJldHVybiBraHVnZXBhZ2VkX2RlZnJhZygpID8gR0ZQX1RSQU5TSFVHRSA6IEdGUF9UUkFOU0hVR0VfTElHSFQ7XG5tbS9raHVnZXBhZ2VkLmMtMTAzMC19XG4tLVxubW0va2h1Z2VwYWdlZC5jPTEwNjQ9c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgaHVnZXBhZ2Vfdm1hX3JldmFsaWRhdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMTA2OC1cdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hO1xubW0va2h1Z2VwYWdlZC5jOjEwNjk6XHRlbnVtIHR2YV90eXBlIHR5cGUgPSBjYy1cdTAwM2Vpc19raHVnZXBhZ2VkID8gVFZBX0tIVUdFUEFHRUQgOlxubW0va2h1Z2VwYWdlZC5jLTEwNzAtXHRcdFx0XHQgVFZBX0ZPUkNFRF9DT0xMQVBTRTtcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMTA5MS1cdCAqIEFub24gVk1BIGV4cGVjdGVkLCB0aGUgYWRkcmVzcyBtYXkgYmUgdW5tYXBwZWQgdGhlblxubW0va2h1Z2VwYWdlZC5jOjEwOTI6XHQgKiByZW1hcHBlZCB0byBmaWxlIGFmdGVyIGtodWdlcGFnZWQgcmVhY3F1aXJlZCB0aGUgbW1hcF9sb2NrLlxubW0va2h1Z2VwYWdlZC5jLTEwOTMtXHQgKlxuLS1cbm1tL2todWdlcGFnZWQuYz0xMTAyPXN0YXRpYyBpbmxpbmUgZW51bSBzY2FuX3Jlc3VsdCBjaGVja19wbWRfc3RhdGUocG1kX3QgKnBtZClcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMTEwOS1cdC8qXG5tbS9raHVnZXBhZ2VkLmM6MTExMDpcdCAqIFRoZSBmb2xpbyBtYXkgYmUgdW5kZXIgbWlncmF0aW9uIHdoZW4ga2h1Z2VwYWdlZCBpcyB0cnlpbmcgdG9cbm1tL2todWdlcGFnZWQuYy0xMTExLVx0ICogY29sbGFwc2UgaXQuIE1pZ3JhdGlvbiBzdWNjZXNzIG9yIGZhaWx1cmUgd2lsbCBldmVudHVhbGx5IGVuZFxuLS1cbm1tL2todWdlcGFnZWQuYz0xMjUwPXN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGFsbG9jX2NoYXJnZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKipmb2xpb3AsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuLS1cbm1tL2todWdlcGFnZWQuYy0xMjUyLXtcbm1tL2todWdlcGFnZWQuYzoxMjUzOlx0Z2ZwX3QgZ2ZwID0gKGNjLVx1MDAzZWlzX2todWdlcGFnZWQgPyBhbGxvY19odWdlcGFnZV9raHVnZXBhZ2VkX2dmcG1hc2soKSA6XG5tbS9raHVnZXBhZ2VkLmMtMTI1NC1cdFx0ICAgICBHRlBfVFJBTlNIVUdFKTtcbi0tXG5tbS9raHVnZXBhZ2VkLmM9MTYwMD1zdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBjb2xsYXBzZV9zY2FuX3BtZChzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMTYwNi1cdHVuc2lnbmVkIGludCBtYXhfcHRlc19ub25lID0gY29sbGFwc2VfbWF4X3B0ZXNfbm9uZShjYywgdm1hLCBIUEFHRV9QTURfT1JERVIpO1xubW0va2h1Z2VwYWdlZC5jOjE2MDc6XHRlbnVtIHR2YV90eXBlIHR2YV9mbGFncyA9IGNjLVx1MDAzZWlzX2todWdlcGFnZWQgPyBUVkFfS0hVR0VQQUdFRCA6IFRWQV9GT1JDRURfQ09MTEFQU0U7XG5tbS9raHVnZXBhZ2VkLmMtMTYwOC1cdHBtZF90ICpwbWQ7XG4tLVxubW0va2h1Z2VwYWdlZC5jLTE3MDUtXHRcdCAqL1xubW0va2h1Z2VwYWdlZC5jOjE3MDY6XHRcdGlmIChjYy1cdTAwM2Vpc19raHVnZXBhZ2VkIFx1MDAyNlx1MDAyNiAhKHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fRFJPUFBBQkxFKSBcdTAwMjZcdTAwMjZcbm1tL2todWdlcGFnZWQuYy0xNzA3LVx0XHQgICAgZm9saW9fdGVzdF9sYXp5ZnJlZShmb2xpbykgXHUwMDI2XHUwMDI2ICFwdGVfZGlydHkocHRldmFsKSkge1xuLS1cbm1tL2todWdlcGFnZWQuYy0xNzY0LVxubW0va2h1Z2VwYWdlZC5jOjE3NjU6XHRcdGlmIChjYy1cdTAwM2Vpc19raHVnZXBhZ2VkIFx1MDAyNlx1MDAyNlxubW0va2h1Z2VwYWdlZC5jLTE3NjYtXHRcdCAgICBmb2xpb19wdGVfcmVmZXJlbmNlZChmb2xpbywgdm1hLCBhZGRyLCBwdGV2YWwpKVxuLS1cbm1tL2todWdlcGFnZWQuYy0xNzY4LVx0fVxubW0va2h1Z2VwYWdlZC5jOjE3Njk6XHRpZiAoY2MtXHUwMDNlaXNfa2h1Z2VwYWdlZCBcdTAwMjZcdTAwMjZcbm1tL2todWdlcGFnZWQuYy0xNzcwLVx0XHQgICAoIXJlZmVyZW5jZWQgfHxcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMTc4Ni1vdXQ6XG5tbS9raHVnZXBhZ2VkLmM6MTc4NzpcdHRyYWNlX21tX2todWdlcGFnZWRfc2Nhbl9wbWQobW0sIGZvbGlvLCByZWZlcmVuY2VkLFxubW0va2h1Z2VwYWdlZC5jLTE3ODgtXHRcdFx0XHQgICAgIG5vbmVfb3JfemVybywgcmVzdWx0LCB1bm1hcHBlZCk7XG4tLVxubW0va2h1Z2VwYWdlZC5jPTE3OTI9c3RhdGljIHZvaWQgY29sbGVjdF9tbV9zbG90KHN0cnVjdCBtbV9zbG90ICpzbG90KVxuLS1cbm1tL2todWdlcGFnZWQuYy0xNzk1LVxubW0va2h1Z2VwYWdlZC5jOjE3OTY6XHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNmtodWdlcGFnZWRfbW1fbG9jayk7XG5tbS9raHVnZXBhZ2VkLmMtMTc5Ny1cbi0tXG5tbS9raHVnZXBhZ2VkLmMtMTgwNy1cbm1tL2todWdlcGFnZWQuYzoxODA4Olx0XHQvKiBraHVnZXBhZ2VkX21tX2xvY2sgYWN0dWFsbHkgbm90IG5lY2Vzc2FyeSBmb3IgdGhlIGJlbG93ICovXG5tbS9raHVnZXBhZ2VkLmMtMTgwOS1cdFx0bW1fc2xvdF9mcmVlKG1tX3Nsb3RfY2FjaGUsIHNsb3QpO1xuLS1cbm1tL2todWdlcGFnZWQuYz0yMjQ5PXN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGNvbGxhcHNlX2ZpbGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMjM1Ny1cdFx0XHRcdCAqIFRyaWdnZXIgYXN5bmMgZmx1c2ggZm9yIHJlYWQtb25seSBmaWxlcyBhbmRcbm1tL2todWdlcGFnZWQuYzoyMzU4Olx0XHRcdFx0ICogaG9wZSB0aGUgd3JpdGViYWNrIGlzIGRvbmUgd2hlbiBraHVnZXBhZ2VkXG5tbS9raHVnZXBhZ2VkLmMtMjM1OS1cdFx0XHRcdCAqIHJldmlzaXRzIHRoaXMgcGFnZS4gV3JpdGFibGUgZmlsZXMgY2FuIGhhdmVcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMjQxNC1cdFx0XHQvKlxuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDAyOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMzU1CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgVHJhbnNwYXJlbnQgSHVnZXBhZ2UgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBob3cgdHJhbnNwYXJlbnQgaHVnZXBhZ2VzIGFyZSBoYW5kbGVkLCBzdGFydGluZyB3aXRoIGBraHVnZXBhZ2VkLmNgLiBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgdGhlIHByZXNlbmNlIG9mIHRoYXQgZmlsZSBpbiB0aGUgY29tcGlsYXRpb24gcHJvY2VzcyBpcyBkaXJlY3RseSB0aWVkIHRvIHRoZSBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb24uIE1ha2VzIHNlbnNlLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB1c2VyZmF1bHRmZCBwbGF5cyBhIHBhcnQgaW4gdGhpcy4gSSYjMzk7bSBnb2luZyB0byBsb29rIGF0IGB1c2VyZmF1bHRmZF9taW5vcmAgYW5kIHRoZSBgVVNFUkZBVUxURkRgIGNvbnN0YW50LiBJJiMzOTtsbCBuZWVkIHRvIGxvY2F0ZSB3aGVyZSBgdXNlcmZhdWx0ZmRfbWlub3JgIGlzIGRlZmluZWQuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGhhbmRsZSBvbiB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBodWdlcGFnZXMgYW5kIHVzZXJmYXVsdCBoYW5kbGluZywgd2hpY2ggSSYjMzk7bSBzdXJlIHdpbGwgaW5mb3JtIHRoZSByZXN0IG9mIG15IGludmVzdGlnYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDAyOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3VzZXJmYXVsdGZkX21pbm9yJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmg9MjEyPXN0YXRpYyBpbmxpbmUgYm9vbCB1c2VyZmF1bHRmZF93cChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbi0tXG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaC0yMTYtXG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaDoyMTc6c3RhdGljIGlubGluZSBib29sIHVzZXJmYXVsdGZkX21pbm9yKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmgtMjE4LXtcbi0tXG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaD0zNjE9c3RhdGljIGlubGluZSBib29sIHVzZXJmYXVsdGZkX3dwKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuLS1cbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oLTM2NS1cbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oOjM2NjpzdGF0aWMgaW5saW5lIGJvb2wgdXNlcmZhdWx0ZmRfbWlub3Ioc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaC0zNjcte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwMjo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTgzNgoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkludmVzdGlnYXRpbmcgVXNlcmZhdWx0ZmQgS2VybmVsIEhlYWRlcioqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gZGl2ZSBpbnRvIHNvbWUgYHVzZXJmYXVsdGZkYCBjb2RlLiBCYXNlZCBvbiB0aGUgcHJvYmxlbSBkZXNjcmlwdGlvbiwgSSYjMzk7bSB0aGlua2luZyB0aGUgaXNzdWUgbWlnaHQgYmUgcmVsYXRlZCB0byB0aGUgY29yZSBoYW5kbGluZyBvZiB1c2VyZmF1bHRmZCB3aXRoaW4gdGhlIGtlcm5lbC4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSB0YWtpbmcgYSBsb29rIGF0IGBpbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaGAuIEl0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBmdW5jdGlvbnMuIEkmIzM5O2xsIGZvY3VzIG15IGF0dGVudGlvbiBhcm91bmQgbGluZSAyMTcgaW5pdGlhbGx5LCBhcyB0aGF0JiMzOTtzIG9mdGVuIHdoZXJlIGtleSBkZWZpbml0aW9ucyBvciBzdHJ1Y3R1cmVzIHJlbGF0ZWQgdG8gZmF1bHQgaGFuZGxpbmcgcmVzaWRlLiBUaGVuLCBJJiMzOTtsbCBqdW1wIGRvd24gdG8gbGluZSAzNjYuIEkmIzM5O20gaG9waW5nIHRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiBob3cgdGhlIGtlcm5lbCBtYW5hZ2VzIGFuZCBwcm9jZXNzZXMgdGhlc2UgdXNlci1zcGFjZSBmYXVsdHMgZnJvbSB0aG9zZSB0d28gbG9jYXRpb25zIHNwZWNpZmljYWxseS4gVGhhdCBzaG91bGQgcHJvdmlkZSBhIHVzZWZ1bCBmb3VuZGF0aW9uIHRvIGludmVzdGlnYXRlIGZ1cnRoZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDAyOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDIxMDpcdH1cbiAyMTE6XHRcbiAyMTI6XHRzdGF0aWMgaW5saW5lIGJvb2wgdXNlcmZhdWx0ZmRfd3Aoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4gMjEzOlx0e1xuIDIxNDpcdFx0cmV0dXJuIHZtYV90ZXN0X2FueV9tYXNrKHZtYSwgVk1BX1VGRkRfV1ApO1xuIDIxNTpcdH1cbiAyMTY6XHRcbiAyMTc6XHRzdGF0aWMgaW5saW5lIGJvb2wgdXNlcmZhdWx0ZmRfbWlub3Ioc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4gMjE4Olx0e1xuIDIxOTpcdFx0cmV0dXJuIHZtYV90ZXN0X2FueV9tYXNrKHZtYSwgVk1BX1VGRkRfTUlOT1IpO1xuIDIyMDpcdH1cbiAyMjE6XHRcbiAyMjI6XHRzdGF0aWMgaW5saW5lIGJvb2wgdXNlcmZhdWx0ZmRfcndwKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuIDIyMzpcdHtcbiAyMjQ6XHRcdC8qXG4gMjI1Olx0XHQgKiBDYWxsZXJzIGdhdGUgUEFHRV9OT05FIHVzYWdlIG9uIHRoaXM7IFBBR0VfTk9ORSBpcyBhIEJVSUxEX0JVRygpXG4gMjI2Olx0XHQgKiB3aXRob3V0IENPTkZJR19BUkNIX0hBU19QVEVfUFJPVE5PTkUsIHNvIGZvbGQgdG8gZmFsc2UuXG4gMjI3Olx0XHQgKi9cbiAyMjg6XHRcdGlmICghSVNfRU5BQkxFRChDT05GSUdfQVJDSF9IQVNfUFRFX1BST1ROT05FKSlcbiAyMjk6XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDIzMDpcdFx0cmV0dXJuIHZtYV90ZXN0X3NpbmdsZV9tYXNrKHZtYSwgVk1BX1VGRkRfUldQKTtcbiAyMzE6XHR9XG4gMjMyOlx0XG4gMjMzOlx0c3RhdGljIGlubGluZSBib29sIHVzZXJmYXVsdGZkX3Byb3RlY3RlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbiAyMzQ6XHR7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDAyOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNDk3CgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogNzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCByZWxhdGVzIHRvIGNoZWNraW5nIGtlcm5lbCBjb25maWd1cmF0aW9uczoKCioqS2VybmVsIENvbmZpZ3VyYXRpb24gSW52ZXN0aWdhdGlvbioqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGRlbHZlIGludG8gdGhlIEtjb25maWcgZmlsZXMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGV4YWN0bHkgaG93IGB1c2VyZmF1bHRmZGAgYW5kIGB0cmFuc3BhcmVudF9odWdlcGFnZWAgYXJlIGJlaW5nIGVuYWJsZWQgaW4gdGhlIGtlcm5lbC4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgbW9zdCBkaXJlY3Qgcm91dGUgaXMgdG8gbG9vayBmb3IgdGhlIHJlbGV2YW50IEtjb25maWcgb3B0aW9ucy4gU28sIHRoYXQgbWVhbnMgY2hlY2tpbmcgZm9yIGBDT05GSUdfVVNFUkZBVUxURkRgIGFuZCBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYC4gV2hlcmUgYXJlIHRoZXNlIG9wdGlvbnMgZGVmaW5lZD8gTXkgdXN1YWwgc3RhcnRpbmcgcG9pbnQgZm9yIG1lbW9yeSBtYW5hZ2VtZW50IHJlbGF0ZWQgZmVhdHVyZXMgd291bGQgYmUgZWl0aGVyIGBpbml0L0tjb25maWdgIG9yIGBtbS9LY29uZmlnYC4gSSYjMzk7bGwgc3RhcnQgdGhlcmUuIFRoYXQmIzM5O3Mgd2hlcmUgSSB3b3VsZCBleHBlY3QgdG8gZmluZCB0aGUgZGVwZW5kZW5jaWVzIGFuZCB0aGUgbG9naWMgYmVoaW5kIHRoZXNlIHNldHRpbmdzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwMjo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVVNFUkZBVUxURkQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz0xMzcyPWNvbmZpZyBIQVZFX0FSQ0hfVVNFUkZBVUxURkRfTUlOT1Jcbi0tXG5tbS9LY29uZmlnLTEzNzYtXG5tbS9LY29uZmlnOjEzNzc6Y29uZmlnIFVTRVJGQVVMVEZEX1JXUFxubW0vS2NvbmZpZy0xMzc4LVx0ZGVmX2Jvb2wgeVxuLS1cbm1tL0tjb25maWctMTM4NS1cbm1tL0tjb25maWc6MTM4NjptZW51Y29uZmlnIFVTRVJGQVVMVEZEXG5tbS9LY29uZmlnLTEzODctXHRib29sIFwmIzM0O0VuYWJsZSB1c2VyZmF1bHRmZCgpIHN5c3RlbSBjYWxsXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDAyOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyODkxCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBmb3IgTWVtb3J5IE1hbmFnZW1lbnQqKgoKT2theSwgdGltZSB0byB0cm91Ymxlc2hvb3QgdGhpcyBtZW1vcnktcmVsYXRlZCBpc3N1ZS4gTXkgZ3V0IHRlbGxzIG1lIHRoZXJlIG1pZ2h0IGJlIGEgcHJvYmxlbSB3aXRoIGhvdyBzb21ldGhpbmcgaXMgY29uZmlndXJlZCBpbiB0aGUga2VybmVsLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBhIGZvY3VzZWQgaW52ZXN0aWdhdGlvbi4gSSYjMzk7bSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IGludG8gdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIg4oCTIHRoZSBgbW0vS2NvbmZpZ2AgZmlsZS4gSSYjMzk7bSBwcmV0dHkgc3VyZSB0aGF0IGFyZWEgaG91c2VzIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGFuZCBnaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBwcm9ibGVtLCBpdCYjMzk7cyB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIHRoZSByZWxldmFudCBvcHRpb25zLCBvciB0aGVpciBpbnRlcmFjdGlvbnMsIG1pZ2h0IGJlIGxvY2F0ZWQgYXJvdW5kIGxpbmUgbnVtYmVycyAxMzcwIHRvIDE0MDAuIFRoYXQgcmFuZ2UgdXN1YWxseSBjb3ZlcnMgc29tZSBrZXkgZmxhZ3MgYW5kIHNldHRpbmdzIHRoYXQgSSYjMzk7dmUgc2VlbiBiZSByZWxldmFudCBpbiBzaW1pbGFyIHNpdHVhdGlvbnMuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBpbiB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDI6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTM3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMzcwOlx0XHQgIEFyY2ggaGFzIHVzZXJmYXVsdGZkIHdyaXRlIHByb3RlY3Rpb24gc3VwcG9ydFxuMTM3MTpcdFxuMTM3MjpcdGNvbmZpZyBIQVZFX0FSQ0hfVVNFUkZBVUxURkRfTUlOT1JcbjEzNzM6XHRcdGJvb2xcbjEzNzQ6XHRcdGhlbHBcbjEzNzU6XHRcdCAgQXJjaCBoYXMgdXNlcmZhdWx0ZmQgbWlub3IgZmF1bHQgc3VwcG9ydFxuMTM3NjpcdFxuMTM3NzpcdGNvbmZpZyBVU0VSRkFVTFRGRF9SV1BcbjEzNzg6XHRcdGRlZl9ib29sIHlcbjEzNzk6XHRcdGRlcGVuZHMgb24gNjRCSVQgXHUwMDI2XHUwMDI2IEFSQ0hfSEFTX1BURV9QUk9UTk9ORSBcdTAwMjZcdTAwMjYgSEFWRV9BUkNIX1VTRVJGQVVMVEZEX1dQXG4xMzgwOlx0XHRoZWxwXG4xMzgxOlx0XHQgIFVzZXJmYXVsdGZkIHJlYWQtd3JpdGUgcHJvdGVjdGlvbiAoVUZGRElPX1JXUFJPVEVDVCkgZGVsaXZlcnMgYVxuMTM4MjpcdFx0ICB1c2VyZmF1bHRmZCBub3RpZmljYXRpb24gb24gZXZlcnkgYWNjZXNzIC0tIHJlYWQgb3Igd3JpdGUgLS0gdG8gYVxuMTM4MzpcdFx0ICBwcm90ZWN0ZWQgcmFuZ2UsIGxldHRpbmcgdXNlcnNwYWNlIG9ic2VydmUgdGhlIHdvcmtpbmcgc2V0IG9mIGFcbjEzODQ6XHRcdCAgcHJvY2Vzcy5cbjEzODU6XHRcbjEzODY6XHRtZW51Y29uZmlnIFVTRVJGQVVMVEZEXG4xMzg3Olx0XHRib29sIFwmIzM0O0VuYWJsZSB1c2VyZmF1bHRmZCgpIHN5c3RlbSBjYWxsXCYjMzQ7XG4xMzg4Olx0XHRkZXBlbmRzIG9uIE1NVVxuMTM4OTpcdFx0aGVscFxuMTM5MDpcdFx0ICBFbmFibGUgdGhlIHVzZXJmYXVsdGZkKCkgc3lzdGVtIGNhbGwgdGhhdCBhbGxvd3MgdG8gaW50ZXJjZXB0IGFuZFxuMTM5MTpcdFx0ICBoYW5kbGUgcGFnZSBmYXVsdHMgaW4gdXNlcmxhbmQuXG4xMzkyOlx0XG4xMzkzOlx0Y29uZmlnIFBURV9NQVJLRVJfVUZGRF9XUFxuMTM5NDpcdFx0Ym9vbCBcJiMzNDtVc2VyZmF1bHRmZCB3cml0ZSBwcm90ZWN0aW9uIHN1cHBvcnQgZm9yIHNobWVtL2h1Z2V0bGJmc1wmIzM0O1xuMTM5NTpcdFx0ZGVmYXVsdCB5XG4xMzk2Olx0XHRkZXBlbmRzIG9uIFVTRVJGQVVMVEZEIFx1MDAyNlx1MDAyNiBIQVZFX0FSQ0hfVVNFUkZBVUxURkRfV1BcbjEzOTc6XHRcbjEzOTg6XHRcdGhlbHBcbjEzOTk6XHRcdCAgQWxsb3dzIHRvIGNyZWF0ZSBtYXJrZXIgUFRFcyBmb3IgdXNlcmZhdWx0ZmQgd3JpdGUgcHJvdGVjdGlvblxuMTQwMDpcdFx0ICBwdXJwb3Nlcy4gIEl0IGlzIHJlcXVpcmVkIHRvIGVuYWJsZSB1c2VyZmF1bHRmZCB3cml0ZSBwcm90ZWN0aW9uIG9uXG4xNDAxOlx0XHQgIGZpbGUtYmFja2VkIG1lbW9yeSB0eXBlcyBsaWtlIHNobWVtIGFuZCBodWdldGxiZnMuXG4xNDAyOlx0XG4xNDAzOlx0IyBtdWx0aS1nZW4gTFJVIHtcbjE0MDQ6XHRjb25maWcgTFJVX0dFTlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwMjo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzY0OQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipDaGVja2luZyBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGluIGBtbS9LY29uZmlnYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gcXVpY2tseSBnZXQgYSBoYW5kbGUgb24gaG93IGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgY29uZmlndXJlZC4gTXkgaW5pdGlhbCBpbnN0aW5jdCwgZ2l2ZW4gbXkgZXhwZXJpZW5jZSwgaXMgdG8gaGVhZCBkaXJlY3RseSB0byBgbW0vS2NvbmZpZ2AuIFRoYXQmIzM5O3Mgd2hlcmUgSSBleHBlY3QgdG8gZmluZCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSBhbnl0aGluZyBkZWFsaW5nIHdpdGggdHJhbnNwYXJlbnQgaHVnZXBhZ2VzLiBJdCYjMzk7cyB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBkaWdnaW5nIGludG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgZm9yIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBzeW1ib2wgaXRzZWxmLCBhbmQgdGhlbiB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMgYW5kIGFueSBhc3NvY2lhdGVkIGhlbHAgdGV4dC4gSSB3YW50IHRvIHNlZSBpZiBpdCYjMzk7cyB0cmlzdGF0ZSwgYW5kIGlmIHNvLCB3aGF0IHRoZSBkZWZhdWx0IHNldHRpbmcgaXMgYW5kIGhvdyBpdCBtaWdodCBpbnRlcmFjdCB3aXRoIG90aGVyIG1lbW9yeSBtYW5hZ2VtZW50IGZlYXR1cmVzLiBJJiMzOTttIGFsc28gZ29pbmcgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgY29uZGl0aW9uYWwgZGVwZW5kZW5jaWVzIG9yICYjMzQ7c2VsZWN0JiMzNDsgc3RhdGVtZW50cyB0aGF0IG1pZ2h0IHNoZWQgbGlnaHQgb24gaG93IGl0JiMzOTtzIGludGVncmF0ZWQgaW50byB0aGUgbGFyZ2VyIGtlcm5lbCBjb25maWd1cmF0aW9uIGxhbmRzY2FwZS4gVGhpcyB3aWxsIGdpdmUgbWUgYSBzb2xpZCBmb3VuZGF0aW9uIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBjYXBhYmlsaXRpZXMgb2YgdHJhbnNwYXJlbnQgaHVnZXBhZ2VzIHdpdGhpbiB0aGUgY3VycmVudCBrZXJuZWwgYnVpbGQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDAyOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTgzMj1jb25maWcgTU1fSURcbi0tXG5tbS9LY29uZmlnLTgzNC1cbm1tL0tjb25maWc6ODM1Om1lbnVjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL0tjb25maWctODM2LVx0Ym9vbCBcJiMzNDtUcmFuc3BhcmVudCBIdWdlcGFnZSBTdXBwb3J0XCYjMzQ7XG4tLVxubW0vS2NvbmZpZz04NTM9Y2hvaWNlXG4tLVxubW0vS2NvbmZpZy04NTgtXG5tbS9LY29uZmlnOjg1OTpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9BTFdBWVNcbm1tL0tjb25maWctODYwLVx0XHRib29sIFwmIzM0O2Fsd2F5c1wmIzM0O1xuLS1cbm1tL0tjb25maWctODY1LVxubW0vS2NvbmZpZzo4NjY6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfTUFEVklTRVxubW0vS2NvbmZpZy04NjctXHRcdGJvb2wgXCYjMzQ7bWFkdmlzZVwmIzM0O1xuLS1cbm1tL0tjb25maWctODc0LVxubW0vS2NvbmZpZzo4NzU6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfTkVWRVJcbm1tL0tjb25maWctODc2LVx0XHRib29sIFwmIzM0O25ldmVyXCYjMzQ7XG4tLVxubW0vS2NvbmZpZz04ODI9Y2hvaWNlXG4tLVxubW0vS2NvbmZpZy04OTEtXG5tbS9LY29uZmlnOjg5MjpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX05FVkVSXG5tbS9LY29uZmlnLTg5My1cdFx0Ym9vbCBcJiMzNDtuZXZlclwmIzM0O1xuLS1cbm1tL0tjb25maWctOTAxLVxubW0vS2NvbmZpZzo5MDI6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9BTFdBWVNcbm1tL0tjb25maWctOTAzLVx0XHRib29sIFwmIzM0O2Fsd2F5c1wmIzM0O1xuLS1cbm1tL0tjb25maWctOTA5LVxubW0vS2NvbmZpZzo5MTA6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9XSVRISU5fU0laRVxubW0vS2NvbmZpZy05MTEtXHRcdGJvb2wgXCYjMzQ7d2l0aGluX3NpemVcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTkxNy1cbm1tL0tjb25maWc6OTE4Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfQURWSVNFXG5tbS9LY29uZmlnLTkxOS1cdFx0Ym9vbCBcJiMzNDthZHZpc2VcJiMzNDtcbi0tXG5tbS9LY29uZmlnPTkyNz1jaG9pY2Vcbi0tXG5tbS9LY29uZmlnLTkzNi1cbm1tL0tjb25maWc6OTM3Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfTkVWRVJcbm1tL0tjb25maWctOTM4LVx0XHRib29sIFwmIzM0O25ldmVyXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy05NDUtXG5tbS9LY29uZmlnOjk0NjpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX0FMV0FZU1xubW0vS2NvbmZpZy05NDctXHRcdGJvb2wgXCYjMzQ7YWx3YXlzXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy05NTMtXG5tbS9LY29uZmlnOjk1NDpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX1dJVEhJTl9TSVpFXG5tbS9LY29uZmlnLTk1NS1cdFx0Ym9vbCBcJiMzNDt3aXRoaW5fc2l6ZVwmIzM0O1xuLS1cbm1tL0tjb25maWctOTYxLVxubW0vS2NvbmZpZzo5NjI6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9BRFZJU0Vcbm1tL0tjb25maWctOTYzLVx0XHRib29sIFwmIzM0O2FkdmlzZVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwMjo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDY0MQoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDUzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBhIFBvdGVudGlhbCBGdXp6aW5nIFRhcmdldCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBXZSBoYXZlIGEgcGF0Y2ggdG91Y2hpbmcgYG1tL2todWdlcGFnZWQuY2Ag4oCTIHRoYXQgaW1tZWRpYXRlbHkgZ3JhYnMgbXkgYXR0ZW50aW9uLiBTcGVjaWZpY2FsbHksIHRoZSBgdHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwYCBmdW5jdGlvbiBpcyB0aGUgZm9jYWwgcG9pbnQuIFRoZSBjb3JlIGNoYW5nZSBpcyB0aGlzOiBpZiBhIFZNQSBpcyByZWdpc3RlcmVkIHdpdGggYHVzZXJmYXVsdGZkX21pbm9yYCwgaXTigJlzIG5vdyAqc2tpcHBlZCogZHVyaW5nIFRIUCBjb2xsYXBzZS4gVGhhdCYjMzk7cyBhIHNpZ25pZmljYW50IGJlaGF2aW9yIGNoYW5nZSwgcG90ZW50aWFsbHkgb3BlbmluZyB1cCBhIG5ldyBhdHRhY2sgc3VyZmFjZS4KClRoZSBjb2RlIGl0c2VsZiBpcyBzdHJhaWdodGZvcndhcmQ6IHRoZSBuZXcgY2hlY2ssIGBpZiAodXNlcmZhdWx0ZmRfbWlub3Iodm1hKSkgcmV0dXJuIFNDQU5fUFRFX1VGRkQ7YCwgc2VlbXMgc2ltcGxlIGVub3VnaCwgYnV0IHRoZSBpbnRlcmFjdGlvbnMgYW5kIHNpZGUgZWZmZWN0cyBpbiBhIGNvbXBsZXggTU0gc3lzdGVtLi4uIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIGludGVyZXN0aW5nIHN0dWZmIGxpZXMuCgpOb3csIGlzIHRoaXMgd29ydGggZnV6emluZz8gRGVmaW5pdGVseS4gVGhlIGZhY3QgdGhhdCBpdCYjMzk7cyByZWFjaGFibGUgdmlhIGJvdGggYG1hZHZpc2UoLi4uLCBNQURWX0NPTExBUFNFKWAgKmFuZCogYmFja2dyb3VuZCBga2h1Z2VwYWdlZGAgc2Nhbm5pbmcsIGNvbWJpbmVkIHdpdGggYHVzZXJmYXVsdGZkX21pbm9yYCByZWdpc3RyYXRpb24g4oCTIHRoYXQmIzM5O3MgYSBzb2xpZCBjb21iaW5hdGlvbiBmb3IgZXhwbG9yYXRpb24uIFBsdXMsIHdlIGhhdmUgdGhlIGB1cHJvYmVfd3JpdGVgIHBhdGgsIHdpZGVuaW5nIHRoZSBhdHRhY2sgc3VyZmFjZS4KClRoaXMgaXMgYSBjbGVhciAmIzM0O3llcyYjMzQ7IGZvciBgV29ydGhGdXp6aW5nYC4gVGhlIHN1YnN5c3RlbSBpcyBjb3JlIE1NLCBhbmQgdGhlIHJlYWNoYWJpbGl0eSBpcyBkaXZlcnNlLgoKVGhlIG5leHQgc3RlcCBpcyB0byBjaG9vc2Ugb3VyIEZvY3VzU3ltYm9scyBhbmQgRW5hYmxlQ29uZmlncy4gV2UgbmVlZCB0byBhdm9pZCB0aGUgb2J2aW91cywgdWJpcXVpdG91cyBsaWZlY3ljbGUgZnVuY3Rpb25zIOKAkyBub3RoaW5nIGxpa2UgYHN5c19tYWR2aXNlYCwgb3IgYGRvX3BhZ2VfZmF1bHRgLiBXZSBuZWVkIHRvIGJlIHN1cmdpY2FsLiBNeSBmb2N1cyB3b3VsZCBiZSBvbjoKKiAgIGB0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHBgOiBUaGUgZnVuY3Rpb24gaGFzIGNoYW5nZWQgZGlyZWN0bHksIHNvIGxldCYjMzk7cyBzdGFydCB0aGVyZS4KKiAgIFRoZSBjYWxsZXJzIG9mIGB0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHBgOiBgY29sbGFwc2VfcHRlX21hcHBlZF90aHBgLCBgbWFkdmlzZV9jb2xsYXBzZWAsIGBjb2xsYXBzZV9zaW5nbGVfcG1kYCwgYGNvbGxhcHNlX2ZpbGVgLCBga2h1Z2VwYWdlZF9zY2FuX3BtZGAsIGFuZCBga2h1Z2VwYWdlZF9zY2FuX2ZpbGVgIGFyZSBhbGwgcG90ZW50aWFsIGFyZWFzIG9mIGludGVyZXN0LCBpZiBgdHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwYCBpc24mIzM5O3QgaW5saW5lZC4KCkxldCYjMzk7cyBzZWUgd2hhdCBlbHNlIGBtbS9raHVnZXBhZ2VkLmNgIGhhcyB0byBvZmZlci4gVGhlIGFkamFjZW50IGNvZGUgd2lsbCBnaXZlIGNsdWVzIG9uIHdoYXQgdG8gZm9jdXMgb24uIFdlIG5lZWQgdG8gY2FyZWZ1bGx5IG9ic2VydmUgdGhlIGNvbnRyb2wgYW5kIGRhdGEgZmxvdyBhcm91bmQgdGhpcyBuZXcgY2hlY2sgdG8gZW5zdXJlIHdlIGFyZSBjb3ZlcmluZyB0aGUgbW9zdCB2dWxuZXJhYmxlIHNlZ21lbnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwMjo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtec3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgdHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0va2h1Z2VwYWdlZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2todWdlcGFnZWQuYz0xODE1PXN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IHNldF9odWdlX3BtZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbm1tL2todWdlcGFnZWQuYy0xODUwLVxubW0va2h1Z2VwYWdlZC5jOjE4NTE6c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgdHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG5tbS9raHVnZXBhZ2VkLmMtMTg1Mi1cdFx0Ym9vbCBpbnN0YWxsX3BtZClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDI6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU4NzUKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGtodWdlcGFnZWQuYyBmb3IgVEhQIENvbGxhcHNlIEZ1bmN0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkmIzM5O20gbG9va2luZyBhdCBgdHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwYCDigJMgaXQmIzM5O3MgYSBub24taW5saW5lIHN0YXRpYyBmdW5jdGlvbiB0dWNrZWQgYXdheSBpbiBgbW0va2h1Z2VwYWdlZC5jYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7V2hvJiMzOTtzIHVzaW5nIHRoaXMgdGhpbmc/JiMzNDsgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNhbGwgZ3JhcGggYW5kIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0LiBTbywgSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGlkZW50aWZ5IHRoZSBkaXJlY3RseSByZWxhdGVkIGZ1bmN0aW9ucy4KClJpZ2h0IG9mZiB0aGUgYmF0LCBJIHNlZSBgY29sbGFwc2VfcHRlX21hcHBlZF90aHBgLCB3aGljaCBpcyBleHBvcnRlZCBhbmQgbm9uLXN0YXRpYyB3aXRoaW4gdGhlIHNhbWUgZmlsZTsgdGhhdOKAmXMgZGVmaW5pdGVseSByZWxldmFudC4gVGhlbiB3ZSBoYXZlIGBtYWR2aXNlX2NvbGxhcHNlYCwgYWxzbyBub24tc3RhdGljLCBhbHNvIGluIGBtbS9raHVnZXBhZ2VkLmNgLiBPZiBjb3Vyc2UsIGB0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHBgIGl0c2VsZiBpcyBpbiB0aGUgbWl4LCBhbmQgbm93IEkgYWxzbyBzZWUgYGNvbGxhcHNlX3NpbmdsZV9wbWRgIGFuZCBgY29sbGFwc2VfZmlsZWAgaW4gdGhlIGxpc3QuCgpJIG5lZWQgdG8gcXVpY2tseSB2ZXJpZnkgdGhhdCB0aGVzZSBhcmUgYWxsIGRpc3RpbmN0IHN5bWJvbHM7IGl0JiMzOTtzIGVhc3kgdG8gZ2V0IGNvbmZ1c2VkIHdpdGggc2ltaWxhciBuYW1pbmcgY29udmVudGlvbnMuIExldCYjMzk7cyBzdGFydCBieSBsb29raW5nIGF0IGBtYWR2aXNlX2NvbGxhcHNlYCBpbiBgbW0va2h1Z2VwYWdlZC5jYCBpbiBwYXJ0aWN1bGFyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwMjo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbnQgbWFkdmlzZV9jb2xsYXBzZVxcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2todWdlcGFnZWQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9raHVnZXBhZ2VkLmM9MzE1Nz1zdGF0aWMgaW50IG1hZHZpc2VfY29sbGFwc2VfZXJybm8oZW51bSBzY2FuX3Jlc3VsdCByKVxuLS1cbm1tL2todWdlcGFnZWQuYy0zMTg4LVxubW0va2h1Z2VwYWdlZC5jOjMxODk6aW50IG1hZHZpc2VfY29sbGFwc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG5tbS9raHVnZXBhZ2VkLmMtMzE5MC1cdFx0ICAgICB1bnNpZ25lZCBsb25nIGVuZCwgYm9vbCAqbG9ja19kcm9wcGVkKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwMjo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjUxMgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbi4gSGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MgcmVnYXJkaW5nIGBjb2xsYXBzZV9maWxlYCBhbmQgYGNvbGxhcHNlX3NpbmdsZV9wbWRgIHdpdGhpbiBgbW0va2h1Z2VwYWdlZC5jYDoKCioqQW5hbHl6aW5nIGBjb2xsYXBzZV9maWxlYCBhbmQgYGNvbGxhcHNlX3NpbmdsZV9wbWRgIGluIGBtbS9raHVnZXBhZ2VkLmNgKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IGludG8gdGhlIHdlZWRzIG9mIGBraHVnZXBhZ2VkYCYjMzk7cyBmaWxlIG1hcHBpbmcgaGFuZGxpbmcuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB0aGUgZnVuY3Rpb25zIGBjb2xsYXBzZV9maWxlYCBhbmQgYGNvbGxhcHNlX3NpbmdsZV9wbWRgLiBHaXZlbiBteSBleHBlcmllbmNlLCBJJiMzOTttIGV4cGVjdGluZyB0aGVzZSB0byBiZSBjcml0aWNhbCBjb21wb25lbnRzIG9mIGhvdyB0aGUga2VybmVsIG1hbmFnZXMgdHJhbnNwYXJlbnQgaHVnZSBwYWdlcyAoVEhQKSBzcGVjaWZpY2FsbHkgd2hlbiBkZWFsaW5nIHdpdGggZmlsZS1iYWNrZWQgbWFwcGluZ3MuIGBjb2xsYXBzZV9maWxlYCwgdW5kb3VidGVkbHksIGhhcyBhIGJyb2FkZXIgc2NvcGUsIGxpa2VseSBkZWFsaW5nIHdpdGggZmlsZS1iYWNrZWQgbWFwcGluZ3MgaW4gZ2VuZXJhbCwgd2hlcmVhcyBgY29sbGFwc2Vfc2luZ2xlX3BtZGAgaXMgcHJvYmFibHkgZ2VhcmVkIHRvd2FyZCBjb2xsYXBzaW5nIGEgc3BlY2lmaWMgUGh5c2ljYWwgTWVtb3J5IERlc2NyaXB0b3IgKFBNRCkuIEkmIzM5O2xsIG5lZWQgdG8gZHJpbGwgZG93biBpbnRvIHRoZSBsb2dpYyB3aXRoaW4gZWFjaCB0byB1bmRlcnN0YW5kIHRoZSBudWFuY2VzIG9mIGhvdyB0aGVzZSBmdW5jdGlvbnMgaGFuZGxlIHBhZ2UgZmF1bHRzLCBtZW1vcnkgYWxsb2NhdGlvbi9kZWFsbG9jYXRpb24sIGFuZCB0aGUgb3ZlcmFsbCBjb29yZGluYXRpb24gb2YgVEhQIG1hbmFnZW1lbnQgaW4gZmlsZS1iYWNrZWQgY29udGV4dHMuIEkgYW50aWNpcGF0ZSBzZWVpbmcgaW50ZXJhY3Rpb25zIHdpdGggdGhlIHBhZ2UgY2FjaGUsIGlub2RlIGRhdGEgc3RydWN0dXJlcywgYW5kIHRoZSBWTSBzeXN0ZW0mIzM5O3MgY29yZSBtZWNoYW5pc21zIGZvciBoYW5kbGluZyBtZW1vcnkgcHJlc3N1cmUuIE15IGdvYWwgaXMgdG8gZGV0ZXJtaW5lIGhvdyBlZmZpY2llbnRseSB0aGVzZSBmdW5jdGlvbnMgbWFuYWdlIHBhZ2UtbGV2ZWwgb3BlcmF0aW9ucyBjb21wYXJlZCB0byBhIG1vcmUgZGlyZWN0IGZpbGUtbWFwcGluZyBhcHByb2FjaCB3aXRoIFRIUC4gU3BlY2lmaWMgdGhpbmdzIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGluY2x1ZGUgd2hldGhlciB0aGUgZmlsZSBtYXBwaW5nIHJlcXVpcmVzIGZsdXNoaW5nLCBhbmQgaG93IGNvaGVyZW5jeSBpcyBtYWludGFpbmVkIHdpdGggb3RoZXIgcHJvY2Vzc2VzIGFuZCB0aHJlYWRzIGFjY2Vzc2luZyB0aGUgZmlsZS4gQWxzbywgd2hhdCBpbXBhY3Qgd2lsbCB0aGVzZSBmdW5jdGlvbnMgaGF2ZSBvbiBwZXJmb3JtYW5jZSBmcm9tIGEgZmlsZSBJL08gcGVyc3BlY3RpdmU/CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDAyOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbGxhcHNlX2ZpbGVcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9raHVnZXBhZ2VkLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0va2h1Z2VwYWdlZC5jPTIxNDA9c3RhdGljIHZvaWQgcmV0cmFjdF9wYWdlX3RhYmxlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgcGdvZmZfdCBwZ29mZilcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMjI0OC0gKi9cbm1tL2todWdlcGFnZWQuYzoyMjQ5OnN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGNvbGxhcHNlX2ZpbGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbm1tL2todWdlcGFnZWQuYy0yMjUwLVx0XHRzdHJ1Y3QgZmlsZSAqZmlsZSwgcGdvZmZfdCBzdGFydCwgc3RydWN0IGNvbGxhcHNlX2NvbnRyb2wgKmNjKVxuLS1cbm1tL2todWdlcGFnZWQuYy0yNjc2LVx0Vk1fQlVHX09OKCFsaXN0X2VtcHR5KFx1MDAyNnBhZ2VsaXN0KSk7XG5tbS9raHVnZXBhZ2VkLmM6MjY3NzpcdHRyYWNlX21tX2todWdlcGFnZWRfY29sbGFwc2VfZmlsZShtbSwgbmV3X2ZvbGlvLCBpbmRleCwgYWRkciwgaXNfc2htZW0sIGZpbGUsIEhQQUdFX1BNRF9OUiwgcmVzdWx0KTtcbm1tL2todWdlcGFnZWQuYy0yNjc4LVx0cmV0dXJuIHJlc3VsdDtcbi0tXG5tbS9raHVnZXBhZ2VkLmM9MjY4MT1zdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBjb2xsYXBzZV9zY2FuX2ZpbGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4tLVxubW0va2h1Z2VwYWdlZC5jLTI3NzgtXHRcdH0gZWxzZSB7XG5tbS9raHVnZXBhZ2VkLmM6Mjc3OTpcdFx0XHRyZXN1bHQgPSBjb2xsYXBzZV9maWxlKG1tLCBhZGRyLCBmaWxlLCBzdGFydCwgY2MpO1xubW0va2h1Z2VwYWdlZC5jLTI3ODAtXHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDI6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjcyNjEKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqQ2hlY2tpbmcgYGNvbGxhcHNlX3NpbmdsZV9wbWRgKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gVGhlIGluaXRpYWwgdGhvdWdodCwgb2YgY291cnNlLCBpcyBhIGNoZWNrLiBBIHF1aWNrIHNhbml0eSBjaGVjayBvbiBhIHNwZWNpZmljIGZ1bmN0aW9uIG9yIG1vZHVsZSBuYW1lZCBgY29sbGFwc2Vfc2luZ2xlX3BtZGAuIFRoZSBtZXJlIGV4aXN0ZW5jZSBvZiBhIGRlZGljYXRlZCBmdW5jdGlvbiB3aXRoIHN1Y2ggYSBuYW1lIGltcGxpZXMgYSB2ZXJ5IHNwZWNpZmljIHRhc2s6IHBvdGVudGlhbGx5IHJlZHVjaW5nIG9yIHNpbXBsaWZ5aW5nIGRhdGEsIGxpa2VseSByZWxhdGVkIHRvIHBhaXJlZCBtb2xlY3VsYXIgZHluYW1pY3MgKFBNRCkgc2ltdWxhdGlvbnMsIHBlcmhhcHMsIG9yIHNvbWV0aGluZyBvZiB0aGF0IG5hdHVyZSwgZ2l2ZW4gdGhlIG5hbWluZyBjb252ZW50aW9uIEkgc2VlLgoKTXkgaW1tZWRpYXRlIGZvbGxvdy11cCB0aG91Z2h0IHdvdWxkIGJlICp3aHkqIGFyZSB3ZSBjaGVja2luZyB0aGlzPyBJcyBpdCBwYXJ0IG9mIGEgZGVidWdnaW5nIHByb2Nlc3M/IEEgcmVmYWN0b3JpbmcgZWZmb3J0PyBQZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24/IE9yIG1heWJlIGEgcmV2aWV3IG9mIHRoZSB1bmRlcmx5aW5nIGxvZ2ljPyBXaGF0JiMzOTtzIHRoZSBjb250ZXh0PyBXZSYjMzk7bGwgbmVlZCBhIGJyb2FkZXIgdmlldyBvZiB0aGUgc3lzdGVtIHRvIHVuZGVyc3RhbmQgdGhlIG1vdGl2YXRpb24gYmVoaW5kIHRoaXMgY2hlY2suIEkmIzM5O2QgYmUgbG9va2luZyBmb3IgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uLCB0ZXN0IGNhc2VzLCBvciByZWNlbnQgY29kZSBjaGFuZ2VzIHRoYXQgaW52b2x2ZSB0aGlzIGZ1bmN0aW9uLgoKU3BlY2lmaWNhbGx5LCBJJiMzOTtkIHdhbnQgdG8gcXVpY2tseSByZWNhbGw6IHdoYXQgYXJlIHRoZSB0eXBpY2FsIGlucHV0cyBhbmQgb3V0cHV0cyBmb3IgdGhpcyBmdW5jdGlvbj8gRG9lcyBpdCBoYW5kbGUgZWRnZSBjYXNlcyBwcm9wZXJseT8gV2hhdCBhcmUgdGhlIGNvbXB1dGF0aW9uYWwgY29tcGxleGl0aWVzIGludm9sdmVkPyBEb2VzIGl0IGhhdmUgYW55IGtub3duIGRlcGVuZGVuY2llcyB0aGF0IG1pZ2h0IGFmZmVjdCBwZXJmb3JtYW5jZSBvciBzdGFiaWxpdHk/IEkmIzM5O2QgYmUgbG9va2luZyBmb3IgcG90ZW50aWFsIGFyZWFzIG9mIGNvbmNlcm46IGluZWZmaWNpZW50IGFsZ29yaXRobXMsIG1lbW9yeSBsZWFrcywgb3IgdW5oYW5kbGVkIGV4Y2VwdGlvbnMgdGhhdCBjb3VsZCBiZSBsdXJraW5nIHdpdGhpbiBpdHMgaW1wbGVtZW50YXRpb24uIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwMjo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb2xsYXBzZV9zaW5nbGVfcG1kJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0va2h1Z2VwYWdlZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2todWdlcGFnZWQuYz0yNjgxPXN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGNvbGxhcHNlX3NjYW5fZmlsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMjc5MC0gKi9cbm1tL2todWdlcGFnZWQuYzoyNzkxOnN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGNvbGxhcHNlX3NpbmdsZV9wbWQodW5zaWduZWQgbG9uZyBhZGRyLFxubW0va2h1Z2VwYWdlZC5jLTI3OTItXHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBib29sICpsb2NrX2Ryb3BwZWQsXG4tLVxubW0va2h1Z2VwYWdlZC5jPTI4NDg9c3RhdGljIHZvaWQgY29sbGFwc2Vfc2Nhbl9tbV9zbG90KHVuc2lnbmVkIGludCBwcm9ncmVzc19tYXgsXG4tLVxubW0va2h1Z2VwYWdlZC5jLTI5MTgtXG5tbS9raHVnZXBhZ2VkLmM6MjkxOTpcdFx0XHQqcmVzdWx0ID0gY29sbGFwc2Vfc2luZ2xlX3BtZChraHVnZXBhZ2VkX3NjYW4uYWRkcmVzcyxcbm1tL2todWdlcGFnZWQuYy0yOTIwLVx0XHRcdFx0XHRcdCAgICAgIHZtYSwgXHUwMDI2bG9ja19kcm9wcGVkLCBjYyk7XG4tLVxubW0va2h1Z2VwYWdlZC5jPTMxODk9aW50IG1hZHZpc2VfY29sbGFwc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG4tLVxubW0va2h1Z2VwYWdlZC5jLTMyMzctXG5tbS9raHVnZXBhZ2VkLmM6MzIzODpcdFx0cmVzdWx0ID0gY29sbGFwc2Vfc2luZ2xlX3BtZChhZGRyLCB2bWEsIFx1MDAyNm1tYXBfdW5sb2NrZWQsIGNjKTtcbm1tL2todWdlcGFnZWQuYy0zMjM5LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwMjo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzk1MgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDEyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBDb25maWd1cmF0aW9uIENvbnVuZHJ1bSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGVzc2VudGlhbCBjb25maWd1cmF0aW9ucyBmb3IgdGhpcyBwYXJ0aWN1bGFyIGtlcm5lbCBjb21wb25lbnQuIEl0IGxvb2tzIGxpa2UgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBpcyBkZWZpbml0ZWx5IGEgcHJlcmVxdWlzaXRlLCBnaXZlbiBpdHMgZGlyZWN0IGxpbmsgdG8gYGtodWdlcGFnZWQuY2AgaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IE1ha2VmaWxlLiBNYWtlcyBzZW5zZTsgdGhhdCYjMzk7cyB0aGUgY29yZSBvZiBob3cgdHJhbnNwYXJlbnQgaHVnZXBhZ2VzIGFyZSBtYW5hZ2VkLgoKVGhlbiB0aGVyZSYjMzk7cyBgVVNFUkZBVUxURkRgLCB3aGljaCBpcyB0aWVkIHRvIHVzZXJmYXVsdGZkIG1pbm9yIGZhdWx0IHN1cHBvcnQuIEFuZCBzaW5jZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHg4Ni9hbWQ2NCBzeXN0ZW1zIGhlcmUsIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IGBIQVZFX0FSQ0hfVVNFUkZBVUxURkRfTUlOT1JgIGlzIGVuYWJsZWQuIFRpbWUgdG8gZGl2ZSBpbnRvIGBhcmNoL3g4Ni9LY29uZmlnYCBhbmQgc2VlIHdoYXQgdGhlIGFyY2hpdGVjdHVyZSBzYXlzIGFib3V0IHRoaXMuIEkmIzM5O20gZ29pbmcgdG8gbmVlZCB0byB0cmFjayBkb3duIHRoZSBLY29uZmlnIGRlZmluaXRpb24gdG8gZW5zdXJlIGl0JiMzOTtzIHNldCBjb3JyZWN0bHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDAyOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0hBVkVfQVJDSF9VU0VSRkFVTFRGRF9NSU5PUiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L0tjb25maWc9NTg9Y29uZmlnIFg4NlxuLS1cbmFyY2gveDg2L0tjb25maWctMjE0LVx0c2VsZWN0IEhBVkVfQVJDSF9VU0VSRkFVTFRGRF9XUCAgICAgICAgIGlmIFg4Nl82NCBcdTAwMjZcdTAwMjYgVVNFUkZBVUxURkRcbmFyY2gveDg2L0tjb25maWc6MjE1Olx0c2VsZWN0IEhBVkVfQVJDSF9VU0VSRkFVTFRGRF9NSU5PUlx0aWYgWDg2XzY0IFx1MDAyNlx1MDAyNiBVU0VSRkFVTFRGRFxuYXJjaC94ODYvS2NvbmZpZy0yMTYtXHRzZWxlY3QgSEFWRV9BUkNIX1ZNQVBfU1RBQ0tcdFx0aWYgWDg2XzY0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDAyOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4NDQ0CgkJCQkJCQlvdXRwdXQ6IDE2NgoJCQkJCQkJdGhvdWdodHM6IDE0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBLZXJuZWwgQ29uZmlndXJhdGlvbiBmb3IgRnV6emluZyoqCgpPa2F5LCBzbyB0aGUgS2NvbmZpZyBmbGFncyB3ZSYjMzk7cmUgZm9jdXNpbmcgb24gaGVyZSBhcmUgYFVTRVJGQVVMVEZEYCBhbmQgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYC4gSSBhbHdheXMgbGlrZSB0byBkb3VibGUtY2hlY2sgbXkgYXNzdW1wdGlvbnMsIHNvIGxldCYjMzk7cyBydW4gdGhyb3VnaCB0aGUgY3JpdGVyaWEuCgpgV29ydGhGdXp6aW5nYCBpcyBzZXQgdG8gdHJ1ZSwgd2hpY2ggYWxpZ25zIHdpdGggbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgc3lzdGVtLiBUaGUgYEVuYWJsZUNvbmZpZ3NgIGxpc3QgZXhwbGljaXRseSBpbmNsdWRlcyBib3RoIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgYW5kIGBVU0VSRkFVTFRGRGAsIHdoaWNoIGlzIGV4YWN0bHkgd2hhdCBJIGV4cGVjdGVkIGJhc2VkIG9uIHRoZSBpbml0aWFsIGFzc2Vzc21lbnQuIFRoZSBgRm9jdXNTeW1ib2xzYCBhcmUgYWxzbyBhcyBJIHdvdWxkIGhhdmUgYW50aWNpcGF0ZWQ6IHdlJiMzOTtyZSBrZXllZCBpbiBvbiBmdW5jdGlvbnMgbGlrZSBgdHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwYCwgYGNvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwYCwgYG1hZHZpc2VfY29sbGFwc2VgLCBhbmQgYGNvbGxhcHNlX3NpbmdsZV9wbWRgLiBUaGVzZSBtYWtlIHBlcmZlY3Qgc2Vuc2UgZ2l2ZW4gdGhlIG5hdHVyZSBvZiB0cmFuc3BhcmVudCBodWdlcGFnZXMgYW5kIHVzZXJmYXVsdGZkOyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGluIHRoYXQgYXJlYS4gVGhhdCYjMzk7cyBhIHNvbGlkLCBjb25jaXNlIHJlYXNvbmluZyBmb3IgdGhpcyBhc3Nlc3NtZW50LgoKSG1tLCBJIHRoaW5rIHRoYXQmIzM5O3MgaXQuIExldCBtZSBqdXN0IGNvbmZpcm0gdGhhdCBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZyBlbHNlIGluIG15IGV2YWx1YXRpb24uIFl1cCwgZXZlcnl0aGluZyBpcyBjbGVhciBhbmQgYWNjdXJhdGUuIExldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AuIERvbmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDAyOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7LAogICAgJiMzNDtVU0VSRkFVTFRGRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RyeV9jb2xsYXBzZV9wdGVfbWFwcGVkX3RocCYjMzQ7LAogICAgJiMzNDtjb2xsYXBzZV9wdGVfbWFwcGVkX3RocCYjMzQ7LAogICAgJiMzNDttYWR2aXNlX2NvbGxhcHNlJiMzNDssCiAgICAmIzM0O2NvbGxhcHNlX3NpbmdsZV9wbWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMga2h1Z2VwYWdlZCBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IChtbS9raHVnZXBhZ2VkLmMpIHRvIHByZXZlbnQgY29sbGFwc2luZyBQVEUtbWFwcGVkIHRyYW5zcGFyZW50IGh1Z2VwYWdlcyBmb3IgVk1BcyByZWdpc3RlcmVkIHdpdGggdXNlcmZhdWx0ZmQgbWlub3IgZmF1bHQgaGFuZGxpbmcgKHVzZXJmYXVsdGZkX21pbm9yKS4gVGhpcyBpcyByZWFjaGFibGUgdmlhIHVzZXJmYXVsdGZkIHN5c2NhbGxzIGFuZCBNQURWX0NPTExBUFNFIG1hZHZpc2UgY2FsbHMgb3IgYmFja2dyb3VuZCBraHVnZXBhZ2VkIGNvbGxhcHNlIGFuZCB3YXJyYW50cyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7LAogICAgJiMzNDtVU0VSRkFVTFRGRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RyeV9jb2xsYXBzZV9wdGVfbWFwcGVkX3RocCYjMzQ7LAogICAgJiMzNDtjb2xsYXBzZV9wdGVfbWFwcGVkX3RocCYjMzQ7LAogICAgJiMzNDttYWR2aXNlX2NvbGxhcHNlJiMzNDssCiAgICAmIzM0O2NvbGxhcHNlX3NpbmdsZV9wbWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMga2h1Z2VwYWdlZCBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IChtbS9raHVnZXBhZ2VkLmMpIHRvIHByZXZlbnQgY29sbGFwc2luZyBQVEUtbWFwcGVkIHRyYW5zcGFyZW50IGh1Z2VwYWdlcyBmb3IgVk1BcyByZWdpc3RlcmVkIHdpdGggdXNlcmZhdWx0ZmQgbWlub3IgZmF1bHQgaGFuZGxpbmcgKHVzZXJmYXVsdGZkX21pbm9yKS4gVGhpcyBpcyByZWFjaGFibGUgdmlhIHVzZXJmYXVsdGZkIHN5c2NhbGxzIGFuZCBNQURWX0NPTExBUFNFIG1hZHZpc2UgY2FsbHMgb3IgYmFja2dyb3VuZCBraHVnZXBhZ2VkIGNvbGxhcHNlIGFuZCB3YXJyYW50cyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwMjo0OTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDAyOjQ5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIChgdXNlcmZhdWx0ZmRfbWlub3Iodm1hKWApIGluIGB0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHAoKWAgdG8gcHJldmVudCBjb2xsYXBzaW5nIFBURS1tYXBwZWQgVEhQcyBvbiBWTUFzIHJlZ2lzdGVyZWQgd2l0aCB1c2VyZmF1bHRmZC1taW5vciBtb2RlLCBhbG9uZyB3aXRoIGNvcnJlc3BvbmRpbmcgc2VsZnRlc3QgdXBkYXRlcyBpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC11bml0LXRlc3RzLmNgLiBcblxuVGhpcyBtb2RpZmljYXRpb24gZG9lcyBub3QgYWxsb2NhdGUgbmV3IGJ1ZmZlcnMsIG1hbmlwdWxhdGUgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIGRhdGEsIGFsdGVyIHBhZGRpbmcgb3Igc3RydWN0dXJlIGZpZWxkcyBjb3BpZWQgdG8gdXNlcnNwYWNlLCBvciBjaGFuZ2UgYW55IGRhdGEgbGVuZ3Rocy9ib3VuZHMgY2hlY2tpbmcgdGhhdCBjb3VsZCBsZWFkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGxlYWtzLiBTdGFuZGFyZCBzYW5pdGl6ZXJzIGFuZCBidWcgZGV0ZWN0b3JzIChzdWNoIGFzIEtBU0FOIGFuZCBwYWdlIHRhYmxlIGNoZWNrcykgYXJlIHN1ZmZpY2llbnQgZm9yIHZhbGlkYXRpbmcgdGhpcyBmdW5jdGlvbmFsaXR5LCBhbmQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgZGV0ZWN0YWJsZSBvbmx5IGJ5IEtNU0FOIGFyZSBpbnRyb2R1Y2VkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZWU3YjY1ODE2NTkyZGI4Yjk5ZmFlZjJmNDkyM2U4MjFkZDViY2VjMQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgU2VwIDEwIDAyOjQ4OjE0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0va2h1Z2VwYWdlZC5jIGIvbW0va2h1Z2VwYWdlZC5jCmluZGV4IDc1NjM5Mjk4ZWZjMjcuLmU2OTQ3ZmUxNDJlZWEgMTAwNjQ0Ci0tLSBhL21tL2todWdlcGFnZWQuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9raHVnZXBhZ2VkLmMKQEAgLTE4OTQsNiAmIzQzOzE4OTQsMTMgQEAgc3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgdHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ24KIAlpZiAodXNlcmZhdWx0ZmRfcHJvdGVjdGVkKHZtYSkpCiAJCXJldHVybiBTQ0FOX1BURV9VRkZEOwogCiYjNDM7CS8qCiYjNDM7CSAqIFVzZXJmYXVsdGZkLW1pbm9yLXJlZ2lzdGVyZWQgVk1BcyBzaG91bGQgbm90IGJlIGNvbGxhcHNlZCwgYXMKJiM0MzsJICogdXNlcnNwYWNlIGlzIGV4cGVjdGluZyB0byBleHBsaWNpdGx5IGluc3RhbGwgUFRFcy4KJiM0MzsJICovCiYjNDM7CWlmICh1c2VyZmF1bHRmZF9taW5vcih2bWEpKQomIzQzOwkJcmV0dXJuIFNDQU5fUFRFX1VGRkQ7CiYjNDM7CiAJZm9saW8gPSBmaWxlbWFwX2xvY2tfZm9saW8odm1hLSZndDt2bV9maWxlLSZndDtmX21hcHBpbmcsCiAJCQkgICAgICAgbGluZWFyX3BhZ2VfaW5kZXgodm1hLCBoYWRkcikpOwogCWlmIChJU19FUlIoZm9saW8pKQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC11bml0LXRlc3RzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLXVuaXQtdGVzdHMuYwppbmRleCBlZjliMzk1NmJkY2ZkLi42ZjIzNjBmOWI3NWRiIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLXVuaXQtdGVzdHMuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLXVuaXQtdGVzdHMuYwpAQCAtNTE4LDE5ICYjNDM7NTE4LDM0IEBAIHN0YXRpYyB2b2lkIHVmZmRfd3BfZm9ya19waW5fd2l0aF9ldmVudF90ZXN0KHVmZmRfZ2xvYmFsX3Rlc3Rfb3B0c190ICpnb3B0cywgdWZmCiAJdWZmZF93cF9mb3JrX3Bpbl90ZXN0X2NvbW1vbihnb3B0cywgYXJncywgdHJ1ZSk7CiB9CiAKLXN0YXRpYyB2b2lkIGNoZWNrX21lbW9yeV9jb250ZW50cyh1ZmZkX2dsb2JhbF90ZXN0X29wdHNfdCAqZ29wdHMsIGNoYXIgKnApCiYjNDM7c3RhdGljIGludCBfX2NoZWNrX21lbW9yeV9jb250ZW50cyh1bnNpZ25lZCBsb25nIG9mZnNldCwKJiM0MzsJCQkJICAgdW5zaWduZWQgbG9uZyBucl9wYWdlcywKJiM0MzsJCQkJICAgdWZmZF9nbG9iYWxfdGVzdF9vcHRzX3QgKmdvcHRzLAomIzQzOwkJCQkgICBjaGFyICpwKQogewogCXVuc2lnbmVkIGxvbmcgaSwgajsKIAl1aW50OF90IGV4cGVjdGVkX2J5dGU7CiAKLQlmb3IgKGkgPSAwOyBpICZsdDsgZ29wdHMtJmd0O25yX3BhZ2VzOyAmIzQzOyYjNDM7aSkgewomIzQzOwlpZiAobnJfcGFnZXMgJiM0Mzsgb2Zmc2V0ICZsdDsgbnJfcGFnZXMpCiYjNDM7CQllcnIoJiMzNDtvdmVyZmxvdyBpbiBtZW1vcnkgY2hlY2smIzM0Oyk7CiYjNDM7CWlmIChucl9wYWdlcyAmIzQzOyBvZmZzZXQgJmd0OyBnb3B0cy0mZ3Q7bnJfcGFnZXMpCiYjNDM7CQllcnIoJiMzNDtvdXQgb2YgYm91bmRzIG1lbW9yeSBjaGVjayYjMzQ7KTsKJiM0MzsKJiM0MzsJZm9yIChpID0gb2Zmc2V0OyBpICZsdDsgb2Zmc2V0ICYjNDM7IG5yX3BhZ2VzOyAmIzQzOyYjNDM7aSkgewogCQlleHBlY3RlZF9ieXRlID0gfigodWludDhfdCkoaSAlICgodWludDhfdCktMSkpKTsKIAkJZm9yIChqID0gMDsgaiAmbHQ7IGdvcHRzLSZndDtwYWdlX3NpemU7IGomIzQzOyYjNDM7KSB7CiAJCQl1aW50OF90IHYgPSAqKHVpbnQ4X3QgKikocCAmIzQzOyAoaSAqIGdvcHRzLSZndDtwYWdlX3NpemUpICYjNDM7IGopOwogCQkJaWYgKHYgIT0gZXhwZWN0ZWRfYnl0ZSkKLQkJCQllcnIoJiMzNDt1bmV4cGVjdGVkIHBhZ2UgY29udGVudHMmIzM0Oyk7CiYjNDM7CQkJCXJldHVybiAxOwogCQl9CiAJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBjaGVja19tZW1vcnlfY29udGVudHModWZmZF9nbG9iYWxfdGVzdF9vcHRzX3QgKmdvcHRzLCBjaGFyICpwKQomIzQzO3sKJiM0MzsJcmV0dXJuIF9fY2hlY2tfbWVtb3J5X2NvbnRlbnRzKDAsIGdvcHRzLSZndDtucl9wYWdlcywgZ29wdHMsIHApOwogfQogCiBzdGF0aWMgdm9pZCB1ZmZkX21pbm9yX3Rlc3RfY29tbW9uKHVmZmRfZ2xvYmFsX3Rlc3Rfb3B0c190ICpnb3B0cywgYm9vbCB0ZXN0X2NvbGxhcHNlLCBib29sIHRlc3Rfd3ApCkBAIC01MzksNiAmIzQzOzU1NCw4IEBAIHN0YXRpYyB2b2lkIHVmZmRfbWlub3JfdGVzdF9jb21tb24odWZmZF9nbG9iYWxfdGVzdF9vcHRzX3QgKmdvcHRzLCBib29sIHRlc3RfY29sCiAJcHRocmVhZF90IHVmZmRfbW9uOwogCWNoYXIgYyA9ICYjMzk7XDAmIzM5OzsKIAlzdHJ1Y3QgdWZmZF9hcmdzIGFyZ3MgPSB7IDAgfTsKJiM0MzsJdW5zaWduZWQgbG9uZyBjaGVja2VkID0gMDsKJiM0MzsJYm9vbCBiYWRfY29udGVudHM7CiAJYXJncy5nb3B0cyA9IGdvcHRzOwogCiAJLyoKQEAgLTU2NCwyNCAmIzQzOzU4MSw2NSBAQCBzdGF0aWMgdm9pZCB1ZmZkX21pbm9yX3Rlc3RfY29tbW9uKHVmZmRfZ2xvYmFsX3Rlc3Rfb3B0c190ICpnb3B0cywgYm9vbCB0ZXN0X2NvbAogCWlmIChwdGhyZWFkX2NyZWF0ZSgmYW1wO3VmZmRfbW9uLCBOVUxMLCB1ZmZkX3BvbGxfdGhyZWFkLCAmYW1wO2FyZ3MpKQogCQllcnIoJiMzNDt1ZmZkX3BvbGxfdGhyZWFkIGNyZWF0ZSYjMzQ7KTsKIAomIzQzOwlpZiAodGVzdF9jb2xsYXBzZSkgewomIzQzOwkJLyoKJiM0MzsJCSAqIFJlYWQganVzdCBhIHNpbmdsZSBwYWdlIGFuZCB0cnkgY29sbGFwc2luZy4gVGhlIGNvbGxhcHNlCiYjNDM7CQkgKiBzaG91bGQgZWl0aGVyIGJlIHJlamVjdGVkIG9yIGJlIGEgbm8tb3AuCiYjNDM7CQkgKi8KJiM0MzsJCWlmIChfX2NoZWNrX21lbW9yeV9jb250ZW50cygwLCAxLCBnb3B0cywgZ29wdHMtJmd0O2FyZWFfZHN0X2FsaWFzKSkKJiM0MzsJCQllcnIoJiMzNDt1bmV4cGVjdGVkIG1lbW9yeSBjb250ZW50cyBiZWZvcmUgY29sbGFwc2UmIzM0Oyk7CiYjNDM7CiYjNDM7CQkvKiBNQURWX0NPTExBUFNFIG1pZ2h0IHJldHVybiBFSU5WQUwgZm9yIHVmZmQtbWlub3IgVk1Bcy4gKi8KJiM0MzsJCW1hZHZpc2UoZ29wdHMtJmd0O2FyZWFfZHN0X2FsaWFzLCBnb3B0cy0mZ3Q7bnJfcGFnZXMgKiBnb3B0cy0mZ3Q7cGFnZV9zaXplLAomIzQzOwkJCU1BRFZfQ09MTEFQU0UpOwomIzQzOwkJLyoKJiM0MzsJCSAqIElmIHRoZSBhYm92ZSBjb2xsYXBzZSBtYXBwZWQgcGFnZXMgdGhhdCB3ZXJlIG5vdCBleHBsaWNpdGx5CiYjNDM7CQkgKiBDT05USU5VRSYjMzk7ZCwgdGhlIGJlbG93IF9fY2hlY2tfbWVtb3J5X2NvbnRlbnRzKCkgd2lsbCBub3QKJiM0MzsJCSAqIGZhdWx0IG9uIHNvbWUgcGFnZXMsIHJlc3VsdGluZyBpbiBpbmNvcnJlY3QgY29udGVudHMuIFRoZQomIzQzOwkJICogUFRFIGZvciB0aGUgZmlyc3QgcGFnZSBtYXkgZ2V0IHJldHJhY3RlZCwgc28gYXZvaWQgY2hlY2tpbmcKJiM0MzsJCSAqIHRoYXQgcGFnZSwgYXMgd2UgbWlnaHQgdGFrZSBhIHNlY29uZCBmYXVsdCwgZmxpcHBpbmcgdGhlCiYjNDM7CQkgKiBjb250ZW50cyBhIHNlY29uZCB0aW1lLgomIzQzOwkJICovCiYjNDM7CQljaGVja2VkID0gMTsKJiM0MzsJfQomIzQzOwogCS8qCiAJICogUmVhZCBlYWNoIG9mIHRoZSBwYWdlcyBiYWNrIHVzaW5nIHRoZSBVRkZELXJlZ2lzdGVyZWQgbWFwcGluZy4gV2UKIAkgKiBleHBlY3QgdGhhdCB0aGUgZmlyc3QgdGltZSB3ZSB0b3VjaCBhIHBhZ2UsIGl0IHdpbGwgcmVzdWx0IGluIGEgbWlub3IKIAkgKiBmYXVsdC4gdWZmZF9wb2xsX3RocmVhZCB3aWxsIHJlc29sdmUgdGhlIGZhdWx0IGJ5IGJpdC1mbGlwcGluZyB0aGUKIAkgKiBwYWdlJiMzOTtzIGNvbnRlbnRzLCBhbmQgdGhlbiBpc3N1aW5nIGEgQ09OVElOVUUgaW9jdGwuCiAJICovCi0JY2hlY2tfbWVtb3J5X2NvbnRlbnRzKGdvcHRzLCBnb3B0cy0mZ3Q7YXJlYV9kc3RfYWxpYXMpOwomIzQzOwliYWRfY29udGVudHMgPSAhIV9fY2hlY2tfbWVtb3J5X2NvbnRlbnRzKGNoZWNrZWQsIGdvcHRzLSZndDtucl9wYWdlcyAtIGNoZWNrZWQsCiYjNDM7CQkJCQkJICAgIGdvcHRzLCBnb3B0cy0mZ3Q7YXJlYV9kc3RfYWxpYXMpOwogCiAJaWYgKHdyaXRlKGdvcHRzLSZndDtwaXBlZmRbMV0sICZhbXA7Yywgc2l6ZW9mKGMpKSAhPSBzaXplb2YoYykpCiAJCWVycigmIzM0O3BpcGUgd3JpdGUmIzM0Oyk7CiAJaWYgKHB0aHJlYWRfam9pbih1ZmZkX21vbiwgTlVMTCkpCiAJCWVycigmIzM0O2pvaW4oKSBmYWlsZWQmIzM0Oyk7CiAKJiM0MzsJaWYgKGJhZF9jb250ZW50cyAmYW1wOyZhbXA7IHRlc3RfY29sbGFwc2UpIHsKJiM0MzsJCXVmZmRfdGVzdF9mYWlsKCYjMzQ7dW5leHBlY3RlZCBtZW1vcnkgY29udGVudHMgYWZ0ZXIgY29sbGFwc2UmIzM0Oyk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKGJhZF9jb250ZW50cykgewomIzQzOwkJdWZmZF90ZXN0X2ZhaWwoJiMzNDt1bmV4cGVjdGVkIG1lbW9yeSBjb250ZW50cyYjMzQ7KTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwogCWlmICh0ZXN0X2NvbGxhcHNlKSB7CiYjNDM7CQkvKgomIzQzOwkJICogTUFEVl9DT0xMQVBTRSB3aWxsIGZhaWwgdW5sZXNzIHVzZXJmYXVsdGZkLW1pbm9yIGlzCiYjNDM7CQkgKiB1bnJlZ2lzdGVyZWQuCiYjNDM7CQkgKi8KJiM0MzsJCWlmICh1ZmZkX3VucmVnaXN0ZXIoZ29wdHMtJmd0O3VmZmQsIGdvcHRzLSZndDthcmVhX2RzdF9hbGlhcywKJiM0MzsJCQkJICAgIGdvcHRzLSZndDtucl9wYWdlcyAqIGdvcHRzLSZndDtwYWdlX3NpemUpKQomIzQzOwkJCWVycigmIzM0O3VmZmRfdW5yZWdpc3RlciBiZWZvcmUgTUFEVl9DT0xMQVBTRSBmYWlsZWQmIzM0Oyk7CiYjNDM7CiYjNDM7CQkvKiBNQURWX0NPTExBUFNFIHNob3VsZCBzdWNjZWVkIHdpdGggdXNlcmZhdWx0ZmQgdW5yZWdpc3RlcmVkLiAqLwogCQlpZiAobWFkdmlzZShnb3B0cy0mZ3Q7YXJlYV9kc3RfYWxpYXMsIGdvcHRzLSZndDtucl9wYWdlcyAqIGdvcHRzLSZndDtwYWdlX3NpemUsCiAJCQkgICAgTUFEVl9DT0xMQVBTRSkpIHsKLQkJCS8qIEl0JiMzOTtzIGZpbmUgdG8gZmFpbCBmb3IgdGhpcyBvbmUuLi4gKi8KLQkJCXVmZmRfdGVzdF9za2lwKCYjMzQ7TUFEVl9DT0xMQVBTRSBmYWlsZWQmIzM0Oyk7CiYjNDM7CQkJdWZmZF90ZXN0X2ZhaWwoJiMzNDtNQURWX0NPTExBUFNFIGZhaWxlZCYjMzQ7KTsKIAkJCXJldHVybjsKIAkJfQogCkBAIC01OTMsNyAmIzQzOzY1MSwxMCBAQCBzdGF0aWMgdm9pZCB1ZmZkX21pbm9yX3Rlc3RfY29tbW9uKHVmZmRfZ2xvYmFsX3Rlc3Rfb3B0c190ICpnb3B0cywgYm9vbCB0ZXN0X2NvbAogCQkgKiBUaGlzIHdvbiYjMzk7dCBjYXVzZSB1ZmZkLWZhdWx0IC0gaXQgcHVyZWx5IGp1c3QgbWFrZXMgc3VyZSB0aGVyZQogCQkgKiB3YXMgbm8gY29ycnVwdGlvbi4KIAkJICovCi0JCWNoZWNrX21lbW9yeV9jb250ZW50cyhnb3B0cywgZ29wdHMtJmd0O2FyZWFfZHN0X2FsaWFzKTsKJiM0MzsJCWlmIChjaGVja19tZW1vcnlfY29udGVudHMoZ29wdHMsIGdvcHRzLSZndDthcmVhX2RzdF9hbGlhcykpIHsKJiM0MzsJCQl1ZmZkX3Rlc3RfZmFpbCgmIzM0O3VuZXhwZWN0ZWQgbWVtb3J5IGNvbnRlbnRzJiMzNDspOwomIzQzOwkJCXJldHVybjsKJiM0MzsJCX0KIAl9CiAKIAlpZiAoYXJncy5taXNzaW5nX2ZhdWx0cyAhPSAwIHx8IGFyZ3MubWlub3JfZmF1bHRzICE9IGdvcHRzLSZndDtucl9wYWdlcykKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDAyOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5MjUKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAzNzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQb3RlbnRpYWwgTmVlZCBmb3IgRGVkaWNhdGVkIEtNU0FOIEZ1enppbmcqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBnaXZlbiBhIGtlcm5lbCBwYXRjaCBhbmQgSSBuZWVkIHRvIGRldGVybWluZSBpZiBpdCB3YXJyYW50cyBpdHMgb3duIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIExldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJJiMzOTtsbCBleGFtaW5lIHRoZSBwYXRjaCBpdHNlbGYuCgpSaWdodCwgdGhlIGRpZmYgc2hvd3MgYSBtb2RpZmljYXRpb24gdG8gYG1tL2todWdlcGFnZWQuY2AuIEl0IGxvb2tzIGxpa2UgdGhleSYjMzk7dmUgYWRkZWQgYSBuZXcgY2hlY2sgd2l0aGluIGB0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHBgLiBTcGVjaWZpY2FsbHksIHRoZXkmIzM5O3JlIG5vdyBwcmV2ZW50aW5nIHRoZSBjb2xsYXBzaW5nIG9mIFRIUHMgKFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMpIGlmIGEgVk1BIChWaXJ0dWFsIE1lbW9yeSBBcmVhKSBpcyBhc3NvY2lhdGVkIHdpdGggYSBgdXNlcmZhdWx0ZmRfbWlub3JgIHJlZ2lzdHJhdGlvbi4gVGhlIGNvbW1lbnQgbWVudGlvbnMgdGhhdCB1c2VyIHNwYWNlIGV4cGVjdHMgdG8gZXhwbGljaXRseSBpbnN0YWxsIFBURXMgaW4gdGhlc2UgY2FzZXMsIHNvIGNvbGxhcHNpbmcgd291bGQgYmUgaW5jb3JyZWN0LgoKVGhlcmUmIzM5O3MgYWxzbyBhIG5vdGUgYWJvdXQgc2VsZnRlc3QgdXBkYXRlcyBpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC11bml0LXRlc3RzLmNgLiBUaGF0JiMzOTtzIGdvb2QsIGl0IG1lYW5zIHRoZXkmIzM5O3JlIGFkZGluZyB0ZXN0cywgd2hpY2ggaW5jcmVhc2VzIG15IGNvbmZpZGVuY2UgdGhhdCB0aGUgaW50ZW5kZWQgYmVoYXZpb3IgaXMgY29ycmVjdGx5IGltcGxlbWVudGVkLgoKTm93LCBteSBmb2N1cyBpcyBvbiBgdHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHBvdGVudGlhbCBLTVNBTiBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjb2RlIHBhdGguIEkmIzM5O2xsIGVpdGhlciBncmVwIGZvciByZWxhdGVkIHJlZmVyZW5jZXMgb3IganVzdCByZWFkIHRoZSBjb2RlIG9mIHRoYXQgZnVuY3Rpb24uIEkmIzM5O20gbG9va2luZyBmb3Igd2hlcmUgdGhpcyBuZXcgYHVzZXJmYXVsdGZkX21pbm9yYCBjaGVjayBpcyBpbnRlZ3JhdGVkIGludG8gdGhlIGxhcmdlciBwcm9jZXNzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGF0YSBmbG93cywgcG90ZW50aWFsIHJhY2VzLCBhbmQgYXJlYXMgd2hlcmUgdGhpcyBuZXcgbG9naWMgY291bGQgaW50cm9kdWNlIG1lbW9yeSBzYWZldHkgaXNzdWVzLiBJcyB0aGlzIG5ldyBjaGVjayBzdWZmaWNpZW50LCBvciBkb2VzIGl0IGludHJvZHVjZSBhbiBlZGdlIGNhc2UgdGhhdCBuZWVkcyBkZWRpY2F0ZWQgYXR0ZW50aW9uIHVuZGVyIGZ1enppbmc/IFNwZWNpZmljYWxseSwgSSYjMzk7bGwgbmVlZCB0byB0aGluayBhYm91dDoKCiogICBIb3cgaXMgdGhlIGB1c2VyZmF1bHRmZF9taW5vcmAgZmxhZyBzZXQgYW5kIHJlc2V0PyBJcyB0aGVyZSBhIHJhY2UgY29uZGl0aW9uIHdpdGggaXQ/CiogICBBcmUgdGhlcmUgb3RoZXIgcmVsYXRlZCBkYXRhIHN0cnVjdHVyZXMgdGhhdCBhcmUgdXBkYXRlZCBhbG9uZ3NpZGUgd2l0aCB0aGUgVk1BPwoqICAgSG93IGlzIHRoaXMgY2hlY2sgY29vcmRpbmF0ZWQgd2l0aGluIHRoZSBraHVnZXBhZ2VkIGJhY2tncm91bmQgdGhyZWFkPwoKVGhlIGdvYWwgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgY2hhbmdlIG1pZ2h0IGludHJvZHVjZSBhIG5ldyBtZW1vcnkgZXJyb3Igc3VyZmFjZSwgb3IgYSBuZXcgd2F5IHRvIHRyaWdnZXIgYW4gZXhpc3RpbmcgZXJyb3IsIHRoYXQgS01TQU4gd291bGQgY2F0Y2ggKmlmKiBpdCB3YXMgZnV6emVkIHdpdGggdGhpcyBjb2RlIGluIG1pbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDAyOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RyeV9jb2xsYXBzZV9wdGVfbWFwcGVkX3RocCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2todWdlcGFnZWQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9raHVnZXBhZ2VkLmM9MTgxNT1zdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBzZXRfaHVnZV9wbWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMTg1MC1cbm1tL2todWdlcGFnZWQuYzoxODUxOnN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IHRyeV9jb2xsYXBzZV9wdGVfbWFwcGVkX3RocChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxubW0va2h1Z2VwYWdlZC5jLTE4NTItXHRcdGJvb2wgaW5zdGFsbF9wbWQpXG4tLVxubW0va2h1Z2VwYWdlZC5jPTIwOTY9dm9pZCBjb2xsYXBzZV9wdGVfbWFwcGVkX3RocChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbm1tL2todWdlcGFnZWQuYy0yMDk4LXtcbm1tL2todWdlcGFnZWQuYzoyMDk5Olx0dHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwKG1tLCBhZGRyLCBpbnN0YWxsX3BtZCk7XG5tbS9raHVnZXBhZ2VkLmMtMjEwMC19XG4tLVxubW0va2h1Z2VwYWdlZC5jPTIyNDk9c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2VfZmlsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbm1tL2todWdlcGFnZWQuYy0yNjI4LVx0ICogUmVtb3ZlIHB0ZSBwYWdlIHRhYmxlcywgc28gd2UgY2FuIHJlLWZhdWx0IHRoZSBwYWdlIGFzIGh1Z2UuXG5tbS9raHVnZXBhZ2VkLmM6MjYyOTpcdCAqIElmIE1BRFZfQ09MTEFQU0UsIGFkanVzdCByZXN1bHQgdG8gY2FsbCB0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHAoKS5cbm1tL2todWdlcGFnZWQuYy0yNjMwLVx0ICovXG4tLVxubW0va2h1Z2VwYWdlZC5jPTI3OTE9c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2Vfc2luZ2xlX3BtZCh1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxubW0va2h1Z2VwYWdlZC5jLTI4MzUtXHRcdGVsc2Vcbm1tL2todWdlcGFnZWQuYzoyODM2Olx0XHRcdHJlc3VsdCA9IHRyeV9jb2xsYXBzZV9wdGVfbWFwcGVkX3RocChtbSwgYWRkcixcbm1tL2todWdlcGFnZWQuYy0yODM3LVx0XHRcdFx0XHRcdFx0ICAgICAhY2MtXHUwMDNlaXNfa2h1Z2VwYWdlZCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEwIDAyOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUyNzYKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGhhcHBlbmluZyBhcm91bmQgbGluZSAxODk0IGluIGBtbS9raHVnZXBhZ2VkLmNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGVyZSYjMzk7cyBhIHNwZWNpZmljIGZ1bmN0aW9uIG9yIGxvZ2ljIGJlaW5nIGV4ZWN1dGVkIHRoZXJlIHdpdGhpbiB0aGUga2VybmVsJiMzOTtzIGh1Z2UgcGFnZSBtYW5hZ2VtZW50LiBHaXZlbiB0aGUgZmlsZSwgaXQmIzM5O3MgaGlnaGx5IGxpa2VseSB0aGlzIGNvZGUgZGVhbHMgd2l0aCB0aGUga0h1Z2VwYWdlZCBkYWVtb24sIGFuZCBob3cgaXQgbWFuYWdlcyBvciBpbnRlcmFjdHMgd2l0aCBodWdlIHBhZ2VzLiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgZm9yIGNhbGxzIHRvIHRoZSBmdW5jdGlvbiwgYXMgd2VsbCBhcyB0aGUgc3Vycm91bmRpbmcgdmFyaWFibGUgYXNzaWdubWVudHMuIEkgc3VzcGVjdCB0aGVyZSBtYXkgYmUgaW50ZXJhY3Rpb25zIGFyb3VuZCB0aGUgYGtodWdlcGFnZWRgIGRhZW1vbiBhbmQgaG93IGl0IGlzIGludGVyYWN0aW5nIHdpdGggdGhlIG1lbW9yeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDI6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9raHVnZXBhZ2VkLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxODgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE4ODA6XHRcdC8qXG4xODgxOlx0XHQgKiBJZiB3ZSBhcmUgaGVyZSwgd2UmIzM5O3ZlIHN1Y2NlZWRlZCBpbiByZXBsYWNpbmcgYWxsIHRoZSBuYXRpdmUgcGFnZXNcbjE4ODI6XHRcdCAqIGluIHRoZSBwYWdlIGNhY2hlIHdpdGggYSBzaW5nbGUgaHVnZXBhZ2UuIElmIGEgbW0gd2VyZSB0byBmYXVsdC1pblxuMTg4MzpcdFx0ICogdGhpcyBtZW1vcnkgKG1hcHBlZCBieSBhIHN1aXRhYmx5IGFsaWduZWQgVk1BKSwgd2UmIzM5O2QgZ2V0IHRoZSBodWdlcGFnZVxuMTg4NDpcdFx0ICogYW5kIG1hcCBpdCBieSBhIFBNRCwgcmVnYXJkbGVzcyBvZiBzeXNmcyBUSFAgc2V0dGluZ3MuIEFzIHN1Y2gsIGxldCYjMzk7c1xuMTg4NTpcdFx0ICogYW5hbG9nb3VzbHkgZWxpZGUgc3lzZnMgVEhQIHNldHRpbmdzIGhlcmUgYW5kIGZvcmNlIGNvbGxhcHNlLlxuMTg4NjpcdFx0ICovXG4xODg3Olx0XHRpZiAoIXRocF92bWFfYWxsb3dhYmxlX29yZGVyKHZtYSwgdm1hLVx1MDAzZXZtX2ZsYWdzLCBUVkFfRk9SQ0VEX0NPTExBUFNFLCBQTURfT1JERVIpKVxuMTg4ODpcdFx0XHRyZXR1cm4gU0NBTl9WTUFfQ0hFQ0s7XG4xODg5Olx0XG4xODkwOlx0XHQvKlxuMTg5MTpcdFx0ICogS2VlcCBwbWQgcGd0YWJsZSB3aGlsZSB0aGUgdWZmZCBiaXQgaXMgaW4gdXNlOyBzZWUgY29tbWVudCBpblxuMTg5MjpcdFx0ICogcmV0cmFjdF9wYWdlX3RhYmxlcygpLlxuMTg5MzpcdFx0ICovXG4xODk0Olx0XHRpZiAodXNlcmZhdWx0ZmRfcHJvdGVjdGVkKHZtYSkpXG4xODk1Olx0XHRcdHJldHVybiBTQ0FOX1BURV9VRkZEO1xuMTg5NjpcdFxuMTg5NzpcdFx0LypcbjE4OTg6XHRcdCAqIFVzZXJmYXVsdGZkLW1pbm9yLXJlZ2lzdGVyZWQgVk1BcyBzaG91bGQgbm90IGJlIGNvbGxhcHNlZCwgYXNcbjE4OTk6XHRcdCAqIHVzZXJzcGFjZSBpcyBleHBlY3RpbmcgdG8gZXhwbGljaXRseSBpbnN0YWxsIFBURXMuXG4xOTAwOlx0XHQgKi9cbjE5MDE6XHRcdGlmICh1c2VyZmF1bHRmZF9taW5vcih2bWEpKVxuMTkwMjpcdFx0XHRyZXR1cm4gU0NBTl9QVEVfVUZGRDtcbjE5MDM6XHRcbjE5MDQ6XHRcdGZvbGlvID0gZmlsZW1hcF9sb2NrX2ZvbGlvKHZtYS1cdTAwM2V2bV9maWxlLVx1MDAzZWZfbWFwcGluZyxcbjE5MDU6XHRcdFx0XHQgICAgICAgbGluZWFyX3BhZ2VfaW5kZXgodm1hLCBoYWRkcikpO1xuMTkwNjpcdFx0aWYgKElTX0VSUihmb2xpbykpXG4xOTA3Olx0XHRcdHJldHVybiBTQ0FOX1BBR0VfTlVMTDtcbjE5MDg6XHRcbjE5MDk6XHRcdGlmICghaXNfcG1kX29yZGVyKGZvbGlvX29yZGVyKGZvbGlvKSkpIHtcbjE5MTA6XHRcdFx0cmVzdWx0ID0gU0NBTl9QQUdFX0NPTVBPVU5EO1xuMTkxMTpcdFx0XHRnb3RvIGRyb3BfZm9saW87XG4xOTEyOlx0XHR9XG4xOTEzOlx0XG4xOTE0Olx0XHRyZXN1bHQgPSBmaW5kX3BtZF9vcl90aHBfb3Jfbm9uZShtbSwgaGFkZHIsIFx1MDAyNnBtZCk7XG4xOTE1Olx0XHRzd2l0Y2ggKHJlc3VsdCkge1xuMTkxNjpcdFx0Y2FzZSBTQ0FOX1NVQ0NFRUQ6XG4xOTE3Olx0XHRcdGJyZWFrO1xuMTkxODpcdFx0Y2FzZSBTQ0FOX05PX1BURV9UQUJMRTpcbjE5MTk6XHRcdFx0LypcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTAgMDI6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjEzMgoJCQkJCQkJb3V0cHV0OiAxODcKCQkJCQkJCXRob3VnaHRzOiAzNTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhpcyBQYXRjaDogS01TQU4gRXhlbXB0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCB0aGUgcGF0Y2ggaXRzZWxmOiBpdCYjMzk7cyBhIHJlbGF0aXZlbHkgZm9jdXNlZCBjaGFuZ2UuIEluIGBtbS9raHVnZXBhZ2VkLmNgLCBzcGVjaWZpY2FsbHkgd2l0aGluIGB0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHAoKWAsIGl0IGludHJvZHVjZXMgYSBjaGVjayB1c2luZyBgdXNlcmZhdWx0ZmRfbWlub3Iodm1hKWAuIFRoaXMgaXMgYSBjcnVjaWFsIGFkZGl0aW9uOyBpdCYjMzk7cyBkZXNpZ25lZCB0byBwcmV2ZW50IGNvbGxhcHNpbmcgUFRFLW1hcHBlZCBUSFBzIGlmIHRoZSBWTUEgaXMgcmVnaXN0ZXJlZCB3aXRoIGB1c2VyZmF1bHRmZC1taW5vcmAuIFRoZSByYXRpb25hbGUgaXMgc3RyYWlnaHRmb3J3YXJkOiBgdXNlcmZhdWx0ZmQtbWlub3JgIHJlbGllcyBvbiB1c2Vyc3BhY2UgZXhwbGljaXRseSBpbnN0YWxsaW5nIFBURXMgdmlhIGBVRkZESU9fQ09OVElOVUVgLCBzbyBhdXRvbWF0aWMgY29sbGFwc2luZyB3b3VsZCBiZSBwcm9ibGVtYXRpYy4gVGhlIHNlY29uZCBwYXJ0IG9mIHRoZSBwYXRjaCBqdXN0IHVwZGF0ZXMgc29tZSBzZWxmdGVzdHMgdG8gcmVmbGVjdCB0aGlzIG5ldyBiZWhhdmlvci4KCk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbjogZG9lcyB0aGlzIHRyaWdnZXIgYW55IEtNU0FOIGNvbmNlcm5zPyBMZXQmIzM5O3MgZ28gdGhyb3VnaCB0aGUgY2hlY2tsaXN0LiBVbmluaXRpYWxpemVkIG1lbW9yeSBvciBwb3RlbnRpYWwgaW5mb3JtYXRpb24gbGVha3MgYXJlIG15IHByaW1hcnkgY29uY2VybnMuIERvZXMgdGhpcyBwYXRjaCBpbnZvbHZlIGFsbG9jYXRpbmcgKm5ldyogbWVtb3J5PyBObywgdGhhdCYjMzk7cyBhIHNpbXBsZSAmIzM0O25vLiYjMzQ7IERvZXMgaXQgY29weSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlcnNwYWNlLCBvciByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBBZ2Fpbiwgbm8uIEl0IGRvZXNuJiMzOTt0IHNlZW0gdG8gYWx0ZXIgYW55IGJvdW5kcyBjaGVja3MsIG1vZGlmeSBkYXRhIGxlbmd0aHMgaW4gYSB3YXkgdGhhdCBjb3VsZCBsZWFkIHRvIGlzc3Vlcywgbm9yIG1vZGlmeSBhbnkgdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzLiBUaGVyZSYjMzk7cyBubyBpbnRyb2R1Y3Rpb24gb3IgbW9kaWZpY2F0aW9uIG9mIGtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlLCBlaXRoZXIuIEFsc28sIHRoZXJlJiMzOTtzIG5vIGNvbmRpdGlvbmFsIGxvZ2ljIHRoYXQgZGVwZW5kcyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gV2UmIzM5O3JlIGFsc28gbm90IGludHJvZHVjaW5nIGFueSBuZXcgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIG1lbW9yeS4KCkVzc2VudGlhbGx5LCB0aGlzIGlzIGEgZmxhZyBjaGVjaywgbm90IGEgZGF0YSBzdHJ1Y3R1cmUgbWFuaXB1bGF0aW9uIGlzc3VlLiBJdCYjMzk7cyBhIGNvbmRpdGlvbmFsIGJyYW5jaCBvbiBhbiBleGlzdGluZyBgdm1hYCBmbGFnLCBiYXNlZCBvbiB0aGUgYHVzZXJmYXVsdGZkX21pbm9yYCBmdW5jdGlvbiB0aGF0IGNoZWNrcyB0aGUgVk1BJiMzOTtzIGZsYWdzLiBUaGUgZmxhZyBpdHNlbGYgaXMgaW5pdGlhbGl6ZWQgZWxzZXdoZXJlLiBUaGVyZWZvcmUsIHNpbmNlIHRoZXJlJiMzOTtzIG5vIGV2aWRlbmNlIG9mIGV4cG9zaW5nIG9yIGludHJvZHVjaW5nIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcywgS01TQU4gaXMgbm90IG5lY2Vzc2FyeSBoZXJlLiBUaGUgbW9yZSBzdGFuZGFyZCBtZW1vcnkgbWFuYWdlbWVudCBjaGVja3MgYW5kIHRlc3RzLCBsaWtlIEtBU0FOLCBMT0NLREVQLCBNTSB0ZXN0cywgYW5kIGZ1enppbmcgc2hvdWxkIGhhbmRsZSBhbnkgb3RoZXIgcG90ZW50aWFsIGlzc3VlcyBsaWtlIHBhZ2UgdGFibGUgbWFuYWdlbWVudCwgVUFGIGlzc3VlcywgcmFjZSBjb25kaXRpb25zLCBvciBsb2NraW5nIHByb2JsZW1zLgoKSSYjMzk7bSBjb25maWRlbnQgd2UgY2FuIHVzZSBgc2V0LXJlc3VsdHNgIHRvIGluZGljYXRlIEtNU0FOIGlzIG5vdCByZWxldmFudCBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMCAwMjo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgY2hlY2sgKGB1c2VyZmF1bHRmZF9taW5vcih2bWEpYCkgaW4gYHRyeV9jb2xsYXBzZV9wdGVfbWFwcGVkX3RocCgpYCB0byBwcmV2ZW50IGNvbGxhcHNpbmcgUFRFLW1hcHBlZCBUSFBzIG9uIFZNQXMgcmVnaXN0ZXJlZCB3aXRoIHVzZXJmYXVsdGZkLW1pbm9yIG1vZGUsIGFsb25nIHdpdGggY29ycmVzcG9uZGluZyBzZWxmdGVzdCB1cGRhdGVzIGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLXVuaXQtdGVzdHMuY2AuIFxuXG5UaGlzIG1vZGlmaWNhdGlvbiBkb2VzIG5vdCBhbGxvY2F0ZSBuZXcgYnVmZmVycywgbWFuaXB1bGF0ZSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgZGF0YSwgYWx0ZXIgcGFkZGluZyBvciBzdHJ1Y3R1cmUgZmllbGRzIGNvcGllZCB0byB1c2Vyc3BhY2UsIG9yIGNoYW5nZSBhbnkgZGF0YSBsZW5ndGhzL2JvdW5kcyBjaGVja2luZyB0aGF0IGNvdWxkIGxlYWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgbGVha3MuIFN0YW5kYXJkIHNhbml0aXplcnMgYW5kIGJ1ZyBkZXRlY3RvcnMgKHN1Y2ggYXMgS0FTQU4gYW5kIHBhZ2UgdGFibGUgY2hlY2tzKSBhcmUgc3VmZmljaWVudCBmb3IgdmFsaWRhdGluZyB0aGlzIGZ1bmN0aW9uYWxpdHksIGFuZCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBkZXRlY3RhYmxlIG9ubHkgYnkgS01TQU4gYXJlIGludHJvZHVjZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgY2hlY2sgKGB1c2VyZmF1bHRmZF9taW5vcih2bWEpYCkgaW4gYHRyeV9jb2xsYXBzZV9wdGVfbWFwcGVkX3RocCgpYCB0byBwcmV2ZW50IGNvbGxhcHNpbmcgUFRFLW1hcHBlZCBUSFBzIG9uIFZNQXMgcmVnaXN0ZXJlZCB3aXRoIHVzZXJmYXVsdGZkLW1pbm9yIG1vZGUsIGFsb25nIHdpdGggY29ycmVzcG9uZGluZyBzZWxmdGVzdCB1cGRhdGVzIGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLXVuaXQtdGVzdHMuY2AuIFxuXG5UaGlzIG1vZGlmaWNhdGlvbiBkb2VzIG5vdCBhbGxvY2F0ZSBuZXcgYnVmZmVycywgbWFuaXB1bGF0ZSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgZGF0YSwgYWx0ZXIgcGFkZGluZyBvciBzdHJ1Y3R1cmUgZmllbGRzIGNvcGllZCB0byB1c2Vyc3BhY2UsIG9yIGNoYW5nZSBhbnkgZGF0YSBsZW5ndGhzL2JvdW5kcyBjaGVja2luZyB0aGF0IGNvdWxkIGxlYWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgbGVha3MuIFN0YW5kYXJkIHNhbml0aXplcnMgYW5kIGJ1ZyBkZXRlY3RvcnMgKHN1Y2ggYXMgS0FTQU4gYW5kIHBhZ2UgdGFibGUgY2hlY2tzKSBhcmUgc3VmZmljaWVudCBmb3IgdmFsaWRhdGluZyB0aGlzIGZ1bmN0aW9uYWxpdHksIGFuZCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBkZXRlY3RhYmxlIG9ubHkgYnkgS01TQU4gYXJlIGludHJvZHVjZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDAyOjQ4OjE0Ljk1NzA5OTQ1MVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg1MTMwMzU5MTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCIsXG4gICAgXCJVU0VSRkFVTFRGRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRyeV9jb2xsYXBzZV9wdGVfbWFwcGVkX3RocFwiLFxuICAgIFwiY29sbGFwc2VfcHRlX21hcHBlZF90aHBcIixcbiAgICBcIm1hZHZpc2VfY29sbGFwc2VcIixcbiAgICBcImNvbGxhcHNlX3NpbmdsZV9wbWRcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBjaGVjayAoYHVzZXJmYXVsdGZkX21pbm9yKHZtYSlgKSBpbiBgdHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwKClgIHRvIHByZXZlbnQgY29sbGFwc2luZyBQVEUtbWFwcGVkIFRIUHMgb24gVk1BcyByZWdpc3RlcmVkIHdpdGggdXNlcmZhdWx0ZmQtbWlub3IgbW9kZSwgYWxvbmcgd2l0aCBjb3JyZXNwb25kaW5nIHNlbGZ0ZXN0IHVwZGF0ZXMgaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtdW5pdC10ZXN0cy5jYC4gXFxuXFxuVGhpcyBtb2RpZmljYXRpb24gZG9lcyBub3QgYWxsb2NhdGUgbmV3IGJ1ZmZlcnMsIG1hbmlwdWxhdGUgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIGRhdGEsIGFsdGVyIHBhZGRpbmcgb3Igc3RydWN0dXJlIGZpZWxkcyBjb3BpZWQgdG8gdXNlcnNwYWNlLCBvciBjaGFuZ2UgYW55IGRhdGEgbGVuZ3Rocy9ib3VuZHMgY2hlY2tpbmcgdGhhdCBjb3VsZCBsZWFkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGxlYWtzLiBTdGFuZGFyZCBzYW5pdGl6ZXJzIGFuZCBidWcgZGV0ZWN0b3JzIChzdWNoIGFzIEtBU0FOIGFuZCBwYWdlIHRhYmxlIGNoZWNrcykgYXJlIHN1ZmZpY2llbnQgZm9yIHZhbGlkYXRpbmcgdGhpcyBmdW5jdGlvbmFsaXR5LCBhbmQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgZGV0ZWN0YWJsZSBvbmx5IGJ5IEtNU0FOIGFyZSBpbnRyb2R1Y2VkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGtodWdlcGFnZWQgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCAobW0va2h1Z2VwYWdlZC5jKSB0byBwcmV2ZW50IGNvbGxhcHNpbmcgUFRFLW1hcHBlZCB0cmFuc3BhcmVudCBodWdlcGFnZXMgZm9yIFZNQXMgcmVnaXN0ZXJlZCB3aXRoIHVzZXJmYXVsdGZkIG1pbm9yIGZhdWx0IGhhbmRsaW5nICh1c2VyZmF1bHRmZF9taW5vcikuIFRoaXMgaXMgcmVhY2hhYmxlIHZpYSB1c2VyZmF1bHRmZCBzeXNjYWxscyBhbmQgTUFEVl9DT0xMQVBTRSBtYWR2aXNlIGNhbGxzIG9yIGJhY2tncm91bmQga2h1Z2VwYWdlZCBjb2xsYXBzZSBhbmQgd2FycmFudHMgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDI6NDg6MTQuOTU3MTA0MjYxWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDY5NzYzNTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBlZTdiNjU4MTY1OTJkYjhiOTlmYWVmMmY0OTIzZTgyMWRkNWJjZWMxXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgU2VwIDEwIDAyOjQ4OjE0IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL21tL2todWdlcGFnZWQuYyBiL21tL2todWdlcGFnZWQuY1xcbmluZGV4IDc1NjM5Mjk4ZWZjMjcuLmU2OTQ3ZmUxNDJlZWEgMTAwNjQ0XFxuLS0tIGEvbW0va2h1Z2VwYWdlZC5jXFxuKysrIGIvbW0va2h1Z2VwYWdlZC5jXFxuQEAgLTE4OTQsNiArMTg5NCwxMyBAQCBzdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCB0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHAoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnblxcbiBcXHRpZiAodXNlcmZhdWx0ZmRfcHJvdGVjdGVkKHZtYSkpXFxuIFxcdFxcdHJldHVybiBTQ0FOX1BURV9VRkZEO1xcbiBcXG4rXFx0LypcXG4rXFx0ICogVXNlcmZhdWx0ZmQtbWlub3ItcmVnaXN0ZXJlZCBWTUFzIHNob3VsZCBub3QgYmUgY29sbGFwc2VkLCBhc1xcbitcXHQgKiB1c2Vyc3BhY2UgaXMgZXhwZWN0aW5nIHRvIGV4cGxpY2l0bHkgaW5zdGFsbCBQVEVzLlxcbitcXHQgKi9cXG4rXFx0aWYgKHVzZXJmYXVsdGZkX21pbm9yKHZtYSkpXFxuK1xcdFxcdHJldHVybiBTQ0FOX1BURV9VRkZEO1xcbitcXG4gXFx0Zm9saW8gPSBmaWxlbWFwX2xvY2tfZm9saW8odm1hLVxcdTAwM2V2bV9maWxlLVxcdTAwM2VmX21hcHBpbmcsXFxuIFxcdFxcdFxcdCAgICAgICBsaW5lYXJfcGFnZV9pbmRleCh2bWEsIGhhZGRyKSk7XFxuIFxcdGlmIChJU19FUlIoZm9saW8pKVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLXVuaXQtdGVzdHMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtdW5pdC10ZXN0cy5jXFxuaW5kZXggZWY5YjM5NTZiZGNmZC4uNmYyMzYwZjliNzVkYiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLXVuaXQtdGVzdHMuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtdW5pdC10ZXN0cy5jXFxuQEAgLTUxOCwxOSArNTE4LDM0IEBAIHN0YXRpYyB2b2lkIHVmZmRfd3BfZm9ya19waW5fd2l0aF9ldmVudF90ZXN0KHVmZmRfZ2xvYmFsX3Rlc3Rfb3B0c190ICpnb3B0cywgdWZmXFxuIFxcdHVmZmRfd3BfZm9ya19waW5fdGVzdF9jb21tb24oZ29wdHMsIGFyZ3MsIHRydWUpO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCBjaGVja19tZW1vcnlfY29udGVudHModWZmZF9nbG9iYWxfdGVzdF9vcHRzX3QgKmdvcHRzLCBjaGFyICpwKVxcbitzdGF0aWMgaW50IF9fY2hlY2tfbWVtb3J5X2NvbnRlbnRzKHVuc2lnbmVkIGxvbmcgb2Zmc2V0LFxcbitcXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbitcXHRcXHRcXHRcXHQgICB1ZmZkX2dsb2JhbF90ZXN0X29wdHNfdCAqZ29wdHMsXFxuK1xcdFxcdFxcdFxcdCAgIGNoYXIgKnApXFxuIHtcXG4gXFx0dW5zaWduZWQgbG9uZyBpLCBqO1xcbiBcXHR1aW50OF90IGV4cGVjdGVkX2J5dGU7XFxuIFxcbi1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgZ29wdHMtXFx1MDAzZW5yX3BhZ2VzOyArK2kpIHtcXG4rXFx0aWYgKG5yX3BhZ2VzICsgb2Zmc2V0IFxcdTAwM2MgbnJfcGFnZXMpXFxuK1xcdFxcdGVycihcXFwib3ZlcmZsb3cgaW4gbWVtb3J5IGNoZWNrXFxcIik7XFxuK1xcdGlmIChucl9wYWdlcyArIG9mZnNldCBcXHUwMDNlIGdvcHRzLVxcdTAwM2Vucl9wYWdlcylcXG4rXFx0XFx0ZXJyKFxcXCJvdXQgb2YgYm91bmRzIG1lbW9yeSBjaGVja1xcXCIpO1xcbitcXG4rXFx0Zm9yIChpID0gb2Zmc2V0OyBpIFxcdTAwM2Mgb2Zmc2V0ICsgbnJfcGFnZXM7ICsraSkge1xcbiBcXHRcXHRleHBlY3RlZF9ieXRlID0gfigodWludDhfdCkoaSAlICgodWludDhfdCktMSkpKTtcXG4gXFx0XFx0Zm9yIChqID0gMDsgaiBcXHUwMDNjIGdvcHRzLVxcdTAwM2VwYWdlX3NpemU7IGorKykge1xcbiBcXHRcXHRcXHR1aW50OF90IHYgPSAqKHVpbnQ4X3QgKikocCArIChpICogZ29wdHMtXFx1MDAzZXBhZ2Vfc2l6ZSkgKyBqKTtcXG4gXFx0XFx0XFx0aWYgKHYgIT0gZXhwZWN0ZWRfYnl0ZSlcXG4tXFx0XFx0XFx0XFx0ZXJyKFxcXCJ1bmV4cGVjdGVkIHBhZ2UgY29udGVudHNcXFwiKTtcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIDE7XFxuIFxcdFxcdH1cXG4gXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgY2hlY2tfbWVtb3J5X2NvbnRlbnRzKHVmZmRfZ2xvYmFsX3Rlc3Rfb3B0c190ICpnb3B0cywgY2hhciAqcClcXG4re1xcbitcXHRyZXR1cm4gX19jaGVja19tZW1vcnlfY29udGVudHMoMCwgZ29wdHMtXFx1MDAzZW5yX3BhZ2VzLCBnb3B0cywgcCk7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIHVmZmRfbWlub3JfdGVzdF9jb21tb24odWZmZF9nbG9iYWxfdGVzdF9vcHRzX3QgKmdvcHRzLCBib29sIHRlc3RfY29sbGFwc2UsIGJvb2wgdGVzdF93cClcXG5AQCAtNTM5LDYgKzU1NCw4IEBAIHN0YXRpYyB2b2lkIHVmZmRfbWlub3JfdGVzdF9jb21tb24odWZmZF9nbG9iYWxfdGVzdF9vcHRzX3QgKmdvcHRzLCBib29sIHRlc3RfY29sXFxuIFxcdHB0aHJlYWRfdCB1ZmZkX21vbjtcXG4gXFx0Y2hhciBjID0gJ1xcXFwwJztcXG4gXFx0c3RydWN0IHVmZmRfYXJncyBhcmdzID0geyAwIH07XFxuK1xcdHVuc2lnbmVkIGxvbmcgY2hlY2tlZCA9IDA7XFxuK1xcdGJvb2wgYmFkX2NvbnRlbnRzO1xcbiBcXHRhcmdzLmdvcHRzID0gZ29wdHM7XFxuIFxcbiBcXHQvKlxcbkBAIC01NjQsMjQgKzU4MSw2NSBAQCBzdGF0aWMgdm9pZCB1ZmZkX21pbm9yX3Rlc3RfY29tbW9uKHVmZmRfZ2xvYmFsX3Rlc3Rfb3B0c190ICpnb3B0cywgYm9vbCB0ZXN0X2NvbFxcbiBcXHRpZiAocHRocmVhZF9jcmVhdGUoXFx1MDAyNnVmZmRfbW9uLCBOVUxMLCB1ZmZkX3BvbGxfdGhyZWFkLCBcXHUwMDI2YXJncykpXFxuIFxcdFxcdGVycihcXFwidWZmZF9wb2xsX3RocmVhZCBjcmVhdGVcXFwiKTtcXG4gXFxuK1xcdGlmICh0ZXN0X2NvbGxhcHNlKSB7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIFJlYWQganVzdCBhIHNpbmdsZSBwYWdlIGFuZCB0cnkgY29sbGFwc2luZy4gVGhlIGNvbGxhcHNlXFxuK1xcdFxcdCAqIHNob3VsZCBlaXRoZXIgYmUgcmVqZWN0ZWQgb3IgYmUgYSBuby1vcC5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGlmIChfX2NoZWNrX21lbW9yeV9jb250ZW50cygwLCAxLCBnb3B0cywgZ29wdHMtXFx1MDAzZWFyZWFfZHN0X2FsaWFzKSlcXG4rXFx0XFx0XFx0ZXJyKFxcXCJ1bmV4cGVjdGVkIG1lbW9yeSBjb250ZW50cyBiZWZvcmUgY29sbGFwc2VcXFwiKTtcXG4rXFxuK1xcdFxcdC8qIE1BRFZfQ09MTEFQU0UgbWlnaHQgcmV0dXJuIEVJTlZBTCBmb3IgdWZmZC1taW5vciBWTUFzLiAqL1xcbitcXHRcXHRtYWR2aXNlKGdvcHRzLVxcdTAwM2VhcmVhX2RzdF9hbGlhcywgZ29wdHMtXFx1MDAzZW5yX3BhZ2VzICogZ29wdHMtXFx1MDAzZXBhZ2Vfc2l6ZSxcXG4rXFx0XFx0XFx0TUFEVl9DT0xMQVBTRSk7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIElmIHRoZSBhYm92ZSBjb2xsYXBzZSBtYXBwZWQgcGFnZXMgdGhhdCB3ZXJlIG5vdCBleHBsaWNpdGx5XFxuK1xcdFxcdCAqIENPTlRJTlVFJ2QsIHRoZSBiZWxvdyBfX2NoZWNrX21lbW9yeV9jb250ZW50cygpIHdpbGwgbm90XFxuK1xcdFxcdCAqIGZhdWx0IG9uIHNvbWUgcGFnZXMsIHJlc3VsdGluZyBpbiBpbmNvcnJlY3QgY29udGVudHMuIFRoZVxcbitcXHRcXHQgKiBQVEUgZm9yIHRoZSBmaXJzdCBwYWdlIG1heSBnZXQgcmV0cmFjdGVkLCBzbyBhdm9pZCBjaGVja2luZ1xcbitcXHRcXHQgKiB0aGF0IHBhZ2UsIGFzIHdlIG1pZ2h0IHRha2UgYSBzZWNvbmQgZmF1bHQsIGZsaXBwaW5nIHRoZVxcbitcXHRcXHQgKiBjb250ZW50cyBhIHNlY29uZCB0aW1lLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0Y2hlY2tlZCA9IDE7XFxuK1xcdH1cXG4rXFxuIFxcdC8qXFxuIFxcdCAqIFJlYWQgZWFjaCBvZiB0aGUgcGFnZXMgYmFjayB1c2luZyB0aGUgVUZGRC1yZWdpc3RlcmVkIG1hcHBpbmcuIFdlXFxuIFxcdCAqIGV4cGVjdCB0aGF0IHRoZSBmaXJzdCB0aW1lIHdlIHRvdWNoIGEgcGFnZSwgaXQgd2lsbCByZXN1bHQgaW4gYSBtaW5vclxcbiBcXHQgKiBmYXVsdC4gdWZmZF9wb2xsX3RocmVhZCB3aWxsIHJlc29sdmUgdGhlIGZhdWx0IGJ5IGJpdC1mbGlwcGluZyB0aGVcXG4gXFx0ICogcGFnZSdzIGNvbnRlbnRzLCBhbmQgdGhlbiBpc3N1aW5nIGEgQ09OVElOVUUgaW9jdGwuXFxuIFxcdCAqL1xcbi1cXHRjaGVja19tZW1vcnlfY29udGVudHMoZ29wdHMsIGdvcHRzLVxcdTAwM2VhcmVhX2RzdF9hbGlhcyk7XFxuK1xcdGJhZF9jb250ZW50cyA9ICEhX19jaGVja19tZW1vcnlfY29udGVudHMoY2hlY2tlZCwgZ29wdHMtXFx1MDAzZW5yX3BhZ2VzIC0gY2hlY2tlZCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgIGdvcHRzLCBnb3B0cy1cXHUwMDNlYXJlYV9kc3RfYWxpYXMpO1xcbiBcXG4gXFx0aWYgKHdyaXRlKGdvcHRzLVxcdTAwM2VwaXBlZmRbMV0sIFxcdTAwMjZjLCBzaXplb2YoYykpICE9IHNpemVvZihjKSlcXG4gXFx0XFx0ZXJyKFxcXCJwaXBlIHdyaXRlXFxcIik7XFxuIFxcdGlmIChwdGhyZWFkX2pvaW4odWZmZF9tb24sIE5VTEwpKVxcbiBcXHRcXHRlcnIoXFxcImpvaW4oKSBmYWlsZWRcXFwiKTtcXG4gXFxuK1xcdGlmIChiYWRfY29udGVudHMgXFx1MDAyNlxcdTAwMjYgdGVzdF9jb2xsYXBzZSkge1xcbitcXHRcXHR1ZmZkX3Rlc3RfZmFpbChcXFwidW5leHBlY3RlZCBtZW1vcnkgY29udGVudHMgYWZ0ZXIgY29sbGFwc2VcXFwiKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoYmFkX2NvbnRlbnRzKSB7XFxuK1xcdFxcdHVmZmRfdGVzdF9mYWlsKFxcXCJ1bmV4cGVjdGVkIG1lbW9yeSBjb250ZW50c1xcXCIpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuIFxcdGlmICh0ZXN0X2NvbGxhcHNlKSB7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIE1BRFZfQ09MTEFQU0Ugd2lsbCBmYWlsIHVubGVzcyB1c2VyZmF1bHRmZC1taW5vciBpc1xcbitcXHRcXHQgKiB1bnJlZ2lzdGVyZWQuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAodWZmZF91bnJlZ2lzdGVyKGdvcHRzLVxcdTAwM2V1ZmZkLCBnb3B0cy1cXHUwMDNlYXJlYV9kc3RfYWxpYXMsXFxuK1xcdFxcdFxcdFxcdCAgICBnb3B0cy1cXHUwMDNlbnJfcGFnZXMgKiBnb3B0cy1cXHUwMDNlcGFnZV9zaXplKSlcXG4rXFx0XFx0XFx0ZXJyKFxcXCJ1ZmZkX3VucmVnaXN0ZXIgYmVmb3JlIE1BRFZfQ09MTEFQU0UgZmFpbGVkXFxcIik7XFxuK1xcbitcXHRcXHQvKiBNQURWX0NPTExBUFNFIHNob3VsZCBzdWNjZWVkIHdpdGggdXNlcmZhdWx0ZmQgdW5yZWdpc3RlcmVkLiAqL1xcbiBcXHRcXHRpZiAobWFkdmlzZShnb3B0cy1cXHUwMDNlYXJlYV9kc3RfYWxpYXMsIGdvcHRzLVxcdTAwM2Vucl9wYWdlcyAqIGdvcHRzLVxcdTAwM2VwYWdlX3NpemUsXFxuIFxcdFxcdFxcdCAgICBNQURWX0NPTExBUFNFKSkge1xcbi1cXHRcXHRcXHQvKiBJdCdzIGZpbmUgdG8gZmFpbCBmb3IgdGhpcyBvbmUuLi4gKi9cXG4tXFx0XFx0XFx0dWZmZF90ZXN0X3NraXAoXFxcIk1BRFZfQ09MTEFQU0UgZmFpbGVkXFxcIik7XFxuK1xcdFxcdFxcdHVmZmRfdGVzdF9mYWlsKFxcXCJNQURWX0NPTExBUFNFIGZhaWxlZFxcXCIpO1xcbiBcXHRcXHRcXHRyZXR1cm47XFxuIFxcdFxcdH1cXG4gXFxuQEAgLTU5Myw3ICs2NTEsMTAgQEAgc3RhdGljIHZvaWQgdWZmZF9taW5vcl90ZXN0X2NvbW1vbih1ZmZkX2dsb2JhbF90ZXN0X29wdHNfdCAqZ29wdHMsIGJvb2wgdGVzdF9jb2xcXG4gXFx0XFx0ICogVGhpcyB3b24ndCBjYXVzZSB1ZmZkLWZhdWx0IC0gaXQgcHVyZWx5IGp1c3QgbWFrZXMgc3VyZSB0aGVyZVxcbiBcXHRcXHQgKiB3YXMgbm8gY29ycnVwdGlvbi5cXG4gXFx0XFx0ICovXFxuLVxcdFxcdGNoZWNrX21lbW9yeV9jb250ZW50cyhnb3B0cywgZ29wdHMtXFx1MDAzZWFyZWFfZHN0X2FsaWFzKTtcXG4rXFx0XFx0aWYgKGNoZWNrX21lbW9yeV9jb250ZW50cyhnb3B0cywgZ29wdHMtXFx1MDAzZWFyZWFfZHN0X2FsaWFzKSkge1xcbitcXHRcXHRcXHR1ZmZkX3Rlc3RfZmFpbChcXFwidW5leHBlY3RlZCBtZW1vcnkgY29udGVudHNcXFwiKTtcXG4rXFx0XFx0XFx0cmV0dXJuO1xcbitcXHRcXHR9XFxuIFxcdH1cXG4gXFxuIFxcdGlmIChhcmdzLm1pc3NpbmdfZmF1bHRzICE9IDAgfHwgYXJncy5taW5vcl9mYXVsdHMgIT0gZ29wdHMtXFx1MDAzZW5yX3BhZ2VzKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwMjo0ODoxNS40NjQ3NDAyNzNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjcwNzkxMzI4MjgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCIsXG4gICAgXCJVU0VSRkFVTFRGRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRyeV9jb2xsYXBzZV9wdGVfbWFwcGVkX3RocFwiLFxuICAgIFwiY29sbGFwc2VfcHRlX21hcHBlZF90aHBcIixcbiAgICBcIm1hZHZpc2VfY29sbGFwc2VcIixcbiAgICBcImNvbGxhcHNlX3NpbmdsZV9wbWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBraHVnZXBhZ2VkIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgKG1tL2todWdlcGFnZWQuYykgdG8gcHJldmVudCBjb2xsYXBzaW5nIFBURS1tYXBwZWQgdHJhbnNwYXJlbnQgaHVnZXBhZ2VzIGZvciBWTUFzIHJlZ2lzdGVyZWQgd2l0aCB1c2VyZmF1bHRmZCBtaW5vciBmYXVsdCBoYW5kbGluZyAodXNlcmZhdWx0ZmRfbWlub3IpLiBUaGlzIGlzIHJlYWNoYWJsZSB2aWEgdXNlcmZhdWx0ZmQgc3lzY2FsbHMgYW5kIE1BRFZfQ09MTEFQU0UgbWFkdmlzZSBjYWxscyBvciBiYWNrZ3JvdW5kIGtodWdlcGFnZWQgY29sbGFwc2UgYW5kIHdhcnJhbnRzIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZWU3YjY1ODE2NTkyZGI4Yjk5ZmFlZjJmNDkyM2U4MjFkZDViY2VjMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDEwIDAyOjQ4OjE0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0va2h1Z2VwYWdlZC5jIGIvbW0va2h1Z2VwYWdlZC5jXG5pbmRleCA3NTYzOTI5OGVmYzI3Li5lNjk0N2ZlMTQyZWVhIDEwMDY0NFxuLS0tIGEvbW0va2h1Z2VwYWdlZC5jXG4rKysgYi9tbS9raHVnZXBhZ2VkLmNcbkBAIC0xODk0LDYgKzE4OTQsMTMgQEAgc3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgdHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25cbiBcdGlmICh1c2VyZmF1bHRmZF9wcm90ZWN0ZWQodm1hKSlcbiBcdFx0cmV0dXJuIFNDQU5fUFRFX1VGRkQ7XG4gXG4rXHQvKlxuK1x0ICogVXNlcmZhdWx0ZmQtbWlub3ItcmVnaXN0ZXJlZCBWTUFzIHNob3VsZCBub3QgYmUgY29sbGFwc2VkLCBhc1xuK1x0ICogdXNlcnNwYWNlIGlzIGV4cGVjdGluZyB0byBleHBsaWNpdGx5IGluc3RhbGwgUFRFcy5cbitcdCAqL1xuK1x0aWYgKHVzZXJmYXVsdGZkX21pbm9yKHZtYSkpXG4rXHRcdHJldHVybiBTQ0FOX1BURV9VRkZEO1xuK1xuIFx0Zm9saW8gPSBmaWxlbWFwX2xvY2tfZm9saW8odm1hLVx1MDAzZXZtX2ZpbGUtXHUwMDNlZl9tYXBwaW5nLFxuIFx0XHRcdCAgICAgICBsaW5lYXJfcGFnZV9pbmRleCh2bWEsIGhhZGRyKSk7XG4gXHRpZiAoSVNfRVJSKGZvbGlvKSlcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLXVuaXQtdGVzdHMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtdW5pdC10ZXN0cy5jXG5pbmRleCBlZjliMzk1NmJkY2ZkLi42ZjIzNjBmOWI3NWRiIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC11bml0LXRlc3RzLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtdW5pdC10ZXN0cy5jXG5AQCAtNTE4LDE5ICs1MTgsMzQgQEAgc3RhdGljIHZvaWQgdWZmZF93cF9mb3JrX3Bpbl93aXRoX2V2ZW50X3Rlc3QodWZmZF9nbG9iYWxfdGVzdF9vcHRzX3QgKmdvcHRzLCB1ZmZcbiBcdHVmZmRfd3BfZm9ya19waW5fdGVzdF9jb21tb24oZ29wdHMsIGFyZ3MsIHRydWUpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBjaGVja19tZW1vcnlfY29udGVudHModWZmZF9nbG9iYWxfdGVzdF9vcHRzX3QgKmdvcHRzLCBjaGFyICpwKVxuK3N0YXRpYyBpbnQgX19jaGVja19tZW1vcnlfY29udGVudHModW5zaWduZWQgbG9uZyBvZmZzZXQsXG4rXHRcdFx0XHQgICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxuK1x0XHRcdFx0ICAgdWZmZF9nbG9iYWxfdGVzdF9vcHRzX3QgKmdvcHRzLFxuK1x0XHRcdFx0ICAgY2hhciAqcClcbiB7XG4gXHR1bnNpZ25lZCBsb25nIGksIGo7XG4gXHR1aW50OF90IGV4cGVjdGVkX2J5dGU7XG4gXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBnb3B0cy1cdTAwM2Vucl9wYWdlczsgKytpKSB7XG4rXHRpZiAobnJfcGFnZXMgKyBvZmZzZXQgXHUwMDNjIG5yX3BhZ2VzKVxuK1x0XHRlcnIoXCJvdmVyZmxvdyBpbiBtZW1vcnkgY2hlY2tcIik7XG4rXHRpZiAobnJfcGFnZXMgKyBvZmZzZXQgXHUwMDNlIGdvcHRzLVx1MDAzZW5yX3BhZ2VzKVxuK1x0XHRlcnIoXCJvdXQgb2YgYm91bmRzIG1lbW9yeSBjaGVja1wiKTtcbitcbitcdGZvciAoaSA9IG9mZnNldDsgaSBcdTAwM2Mgb2Zmc2V0ICsgbnJfcGFnZXM7ICsraSkge1xuIFx0XHRleHBlY3RlZF9ieXRlID0gfigodWludDhfdCkoaSAlICgodWludDhfdCktMSkpKTtcbiBcdFx0Zm9yIChqID0gMDsgaiBcdTAwM2MgZ29wdHMtXHUwMDNlcGFnZV9zaXplOyBqKyspIHtcbiBcdFx0XHR1aW50OF90IHYgPSAqKHVpbnQ4X3QgKikocCArIChpICogZ29wdHMtXHUwMDNlcGFnZV9zaXplKSArIGopO1xuIFx0XHRcdGlmICh2ICE9IGV4cGVjdGVkX2J5dGUpXG4tXHRcdFx0XHRlcnIoXCJ1bmV4cGVjdGVkIHBhZ2UgY29udGVudHNcIik7XG4rXHRcdFx0XHRyZXR1cm4gMTtcbiBcdFx0fVxuIFx0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgY2hlY2tfbWVtb3J5X2NvbnRlbnRzKHVmZmRfZ2xvYmFsX3Rlc3Rfb3B0c190ICpnb3B0cywgY2hhciAqcClcbit7XG4rXHRyZXR1cm4gX19jaGVja19tZW1vcnlfY29udGVudHMoMCwgZ29wdHMtXHUwMDNlbnJfcGFnZXMsIGdvcHRzLCBwKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgdWZmZF9taW5vcl90ZXN0X2NvbW1vbih1ZmZkX2dsb2JhbF90ZXN0X29wdHNfdCAqZ29wdHMsIGJvb2wgdGVzdF9jb2xsYXBzZSwgYm9vbCB0ZXN0X3dwKVxuQEAgLTUzOSw2ICs1NTQsOCBAQCBzdGF0aWMgdm9pZCB1ZmZkX21pbm9yX3Rlc3RfY29tbW9uKHVmZmRfZ2xvYmFsX3Rlc3Rfb3B0c190ICpnb3B0cywgYm9vbCB0ZXN0X2NvbFxuIFx0cHRocmVhZF90IHVmZmRfbW9uO1xuIFx0Y2hhciBjID0gJ1xcMCc7XG4gXHRzdHJ1Y3QgdWZmZF9hcmdzIGFyZ3MgPSB7IDAgfTtcbitcdHVuc2lnbmVkIGxvbmcgY2hlY2tlZCA9IDA7XG4rXHRib29sIGJhZF9jb250ZW50cztcbiBcdGFyZ3MuZ29wdHMgPSBnb3B0cztcbiBcbiBcdC8qXG5AQCAtNTY0LDI0ICs1ODEsNjUgQEAgc3RhdGljIHZvaWQgdWZmZF9taW5vcl90ZXN0X2NvbW1vbih1ZmZkX2dsb2JhbF90ZXN0X29wdHNfdCAqZ29wdHMsIGJvb2wgdGVzdF9jb2xcbiBcdGlmIChwdGhyZWFkX2NyZWF0ZShcdTAwMjZ1ZmZkX21vbiwgTlVMTCwgdWZmZF9wb2xsX3RocmVhZCwgXHUwMDI2YXJncykpXG4gXHRcdGVycihcInVmZmRfcG9sbF90aHJlYWQgY3JlYXRlXCIpO1xuIFxuK1x0aWYgKHRlc3RfY29sbGFwc2UpIHtcbitcdFx0LypcbitcdFx0ICogUmVhZCBqdXN0IGEgc2luZ2xlIHBhZ2UgYW5kIHRyeSBjb2xsYXBzaW5nLiBUaGUgY29sbGFwc2VcbitcdFx0ICogc2hvdWxkIGVpdGhlciBiZSByZWplY3RlZCBvciBiZSBhIG5vLW9wLlxuK1x0XHQgKi9cbitcdFx0aWYgKF9fY2hlY2tfbWVtb3J5X2NvbnRlbnRzKDAsIDEsIGdvcHRzLCBnb3B0cy1cdTAwM2VhcmVhX2RzdF9hbGlhcykpXG4rXHRcdFx0ZXJyKFwidW5leHBlY3RlZCBtZW1vcnkgY29udGVudHMgYmVmb3JlIGNvbGxhcHNlXCIpO1xuK1xuK1x0XHQvKiBNQURWX0NPTExBUFNFIG1pZ2h0IHJldHVybiBFSU5WQUwgZm9yIHVmZmQtbWlub3IgVk1Bcy4gKi9cbitcdFx0bWFkdmlzZShnb3B0cy1cdTAwM2VhcmVhX2RzdF9hbGlhcywgZ29wdHMtXHUwMDNlbnJfcGFnZXMgKiBnb3B0cy1cdTAwM2VwYWdlX3NpemUsXG4rXHRcdFx0TUFEVl9DT0xMQVBTRSk7XG4rXHRcdC8qXG4rXHRcdCAqIElmIHRoZSBhYm92ZSBjb2xsYXBzZSBtYXBwZWQgcGFnZXMgdGhhdCB3ZXJlIG5vdCBleHBsaWNpdGx5XG4rXHRcdCAqIENPTlRJTlVFJ2QsIHRoZSBiZWxvdyBfX2NoZWNrX21lbW9yeV9jb250ZW50cygpIHdpbGwgbm90XG4rXHRcdCAqIGZhdWx0IG9uIHNvbWUgcGFnZXMsIHJlc3VsdGluZyBpbiBpbmNvcnJlY3QgY29udGVudHMuIFRoZVxuK1x0XHQgKiBQVEUgZm9yIHRoZSBmaXJzdCBwYWdlIG1heSBnZXQgcmV0cmFjdGVkLCBzbyBhdm9pZCBjaGVja2luZ1xuK1x0XHQgKiB0aGF0IHBhZ2UsIGFzIHdlIG1pZ2h0IHRha2UgYSBzZWNvbmQgZmF1bHQsIGZsaXBwaW5nIHRoZVxuK1x0XHQgKiBjb250ZW50cyBhIHNlY29uZCB0aW1lLlxuK1x0XHQgKi9cbitcdFx0Y2hlY2tlZCA9IDE7XG4rXHR9XG4rXG4gXHQvKlxuIFx0ICogUmVhZCBlYWNoIG9mIHRoZSBwYWdlcyBiYWNrIHVzaW5nIHRoZSBVRkZELXJlZ2lzdGVyZWQgbWFwcGluZy4gV2VcbiBcdCAqIGV4cGVjdCB0aGF0IHRoZSBmaXJzdCB0aW1lIHdlIHRvdWNoIGEgcGFnZSwgaXQgd2lsbCByZXN1bHQgaW4gYSBtaW5vclxuIFx0ICogZmF1bHQuIHVmZmRfcG9sbF90aHJlYWQgd2lsbCByZXNvbHZlIHRoZSBmYXVsdCBieSBiaXQtZmxpcHBpbmcgdGhlXG4gXHQgKiBwYWdlJ3MgY29udGVudHMsIGFuZCB0aGVuIGlzc3VpbmcgYSBDT05USU5VRSBpb2N0bC5cbiBcdCAqL1xuLVx0Y2hlY2tfbWVtb3J5X2NvbnRlbnRzKGdvcHRzLCBnb3B0cy1cdTAwM2VhcmVhX2RzdF9hbGlhcyk7XG4rXHRiYWRfY29udGVudHMgPSAhIV9fY2hlY2tfbWVtb3J5X2NvbnRlbnRzKGNoZWNrZWQsIGdvcHRzLVx1MDAzZW5yX3BhZ2VzIC0gY2hlY2tlZCxcbitcdFx0XHRcdFx0XHQgICAgZ29wdHMsIGdvcHRzLVx1MDAzZWFyZWFfZHN0X2FsaWFzKTtcbiBcbiBcdGlmICh3cml0ZShnb3B0cy1cdTAwM2VwaXBlZmRbMV0sIFx1MDAyNmMsIHNpemVvZihjKSkgIT0gc2l6ZW9mKGMpKVxuIFx0XHRlcnIoXCJwaXBlIHdyaXRlXCIpO1xuIFx0aWYgKHB0aHJlYWRfam9pbih1ZmZkX21vbiwgTlVMTCkpXG4gXHRcdGVycihcImpvaW4oKSBmYWlsZWRcIik7XG4gXG4rXHRpZiAoYmFkX2NvbnRlbnRzIFx1MDAyNlx1MDAyNiB0ZXN0X2NvbGxhcHNlKSB7XG4rXHRcdHVmZmRfdGVzdF9mYWlsKFwidW5leHBlY3RlZCBtZW1vcnkgY29udGVudHMgYWZ0ZXIgY29sbGFwc2VcIik7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdGlmIChiYWRfY29udGVudHMpIHtcbitcdFx0dWZmZF90ZXN0X2ZhaWwoXCJ1bmV4cGVjdGVkIG1lbW9yeSBjb250ZW50c1wiKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuIFx0aWYgKHRlc3RfY29sbGFwc2UpIHtcbitcdFx0LypcbitcdFx0ICogTUFEVl9DT0xMQVBTRSB3aWxsIGZhaWwgdW5sZXNzIHVzZXJmYXVsdGZkLW1pbm9yIGlzXG4rXHRcdCAqIHVucmVnaXN0ZXJlZC5cbitcdFx0ICovXG4rXHRcdGlmICh1ZmZkX3VucmVnaXN0ZXIoZ29wdHMtXHUwMDNldWZmZCwgZ29wdHMtXHUwMDNlYXJlYV9kc3RfYWxpYXMsXG4rXHRcdFx0XHQgICAgZ29wdHMtXHUwMDNlbnJfcGFnZXMgKiBnb3B0cy1cdTAwM2VwYWdlX3NpemUpKVxuK1x0XHRcdGVycihcInVmZmRfdW5yZWdpc3RlciBiZWZvcmUgTUFEVl9DT0xMQVBTRSBmYWlsZWRcIik7XG4rXG4rXHRcdC8qIE1BRFZfQ09MTEFQU0Ugc2hvdWxkIHN1Y2NlZWQgd2l0aCB1c2VyZmF1bHRmZCB1bnJlZ2lzdGVyZWQuICovXG4gXHRcdGlmIChtYWR2aXNlKGdvcHRzLVx1MDAzZWFyZWFfZHN0X2FsaWFzLCBnb3B0cy1cdTAwM2Vucl9wYWdlcyAqIGdvcHRzLVx1MDAzZXBhZ2Vfc2l6ZSxcbiBcdFx0XHQgICAgTUFEVl9DT0xMQVBTRSkpIHtcbi1cdFx0XHQvKiBJdCdzIGZpbmUgdG8gZmFpbCBmb3IgdGhpcyBvbmUuLi4gKi9cbi1cdFx0XHR1ZmZkX3Rlc3Rfc2tpcChcIk1BRFZfQ09MTEFQU0UgZmFpbGVkXCIpO1xuK1x0XHRcdHVmZmRfdGVzdF9mYWlsKFwiTUFEVl9DT0xMQVBTRSBmYWlsZWRcIik7XG4gXHRcdFx0cmV0dXJuO1xuIFx0XHR9XG4gXG5AQCAtNTkzLDcgKzY1MSwxMCBAQCBzdGF0aWMgdm9pZCB1ZmZkX21pbm9yX3Rlc3RfY29tbW9uKHVmZmRfZ2xvYmFsX3Rlc3Rfb3B0c190ICpnb3B0cywgYm9vbCB0ZXN0X2NvbFxuIFx0XHQgKiBUaGlzIHdvbid0IGNhdXNlIHVmZmQtZmF1bHQgLSBpdCBwdXJlbHkganVzdCBtYWtlcyBzdXJlIHRoZXJlXG4gXHRcdCAqIHdhcyBubyBjb3JydXB0aW9uLlxuIFx0XHQgKi9cbi1cdFx0Y2hlY2tfbWVtb3J5X2NvbnRlbnRzKGdvcHRzLCBnb3B0cy1cdTAwM2VhcmVhX2RzdF9hbGlhcyk7XG4rXHRcdGlmIChjaGVja19tZW1vcnlfY29udGVudHMoZ29wdHMsIGdvcHRzLVx1MDAzZWFyZWFfZHN0X2FsaWFzKSkge1xuK1x0XHRcdHVmZmRfdGVzdF9mYWlsKFwidW5leHBlY3RlZCBtZW1vcnkgY29udGVudHNcIik7XG4rXHRcdFx0cmV0dXJuO1xuK1x0XHR9XG4gXHR9XG4gXG4gXHRpZiAoYXJncy5taXNzaW5nX2ZhdWx0cyAhPSAwIHx8IGFyZ3MubWlub3JfZmF1bHRzICE9IGdvcHRzLVx1MDAzZW5yX3BhZ2VzKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDI6NDg6MTUuNDY0NzQxNjczWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjM3MzUyODY3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBLaHVnZXBhZ2VkIGFuZCBVc2VyZmF1bHRmZCBJbnRlcmFjdGlvbioqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggaW4gZnJvbnQgb2YgbWUsIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZGl2ZSByaWdodCBpbnRvIHRoZSBjb2RlIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucy4gVGhlIHBhdGNoIHRvdWNoZXMgYG1tL2todWdlcGFnZWQuY2AgYW5kIHRoZSBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC11bml0LXRlc3RzLmNgIGZpbGUuIFJpZ2h0IGF3YXksIG15IHJhZGFyIGdvZXMgdXAg4oCTIGFueXRoaW5nIHRoYXQgaW50ZXJhY3RzIHdpdGggYGtodWdlcGFnZWRgIGFuZCBwb3RlbnRpYWxseSB1c2VyZmF1bHRmZCAoVUZGRCkgaXMgZ29pbmcgdG8gbmVlZCBjYXJlZnVsIGNvbnNpZGVyYXRpb24sIGVzcGVjaWFsbHkgd2l0aCB0aGUgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zIG9mIGtodWdlcGFnZSBhbmQgdGhlIGV4cGxpY2l0IG1lbW9yeSBtYW5hZ2VtZW50IGZyb20gVUZGRC5cblxuRm9jdXNpbmcgb24gYG1tL2todWdlcGFnZWQuY2AsIHRoZSBrZXkgY2hhbmdlIGFwcGVhcnMgd2l0aGluIHRoZSBgdHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwYCBmdW5jdGlvbi4gSXQncyBhZGRpbmcgYW4gZXh0cmEgY2hlY2sgaGVyZS4gTGV0IG1lIHNlZS4uLiBpdCdzIGFib3V0IHByb3RlY3RpbmcgYWdhaW5zdCBjb2xsYXBzaW5nIFRIUHMgd2hlbiBVRkZEIGlzIGludm9sdmVkLiBTcGVjaWZpY2FsbHksIGl0J3MgZ3VhcmRpbmcgYWdhaW5zdCBjb2xsYXBzaW5nIFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMgKFRIUHMpIG9uIGB1c2VyZmF1bHRmZF9taW5vcmAtcmVnaXN0ZXJlZCBWTUFzLiBJIGltbWVkaWF0ZWx5IHVuZGVyc3RhbmQgdGhlIHJlYXNvbmluZyBoZXJlLiBJZiBhIFZNQSBpcyByZWdpc3RlcmVkIGFzIGEgXCJtaW5vclwiIFVGRkQgcmVnaW9uLCB0aGUgdXNlci1zcGFjZSBhcHBsaWNhdGlvbiBpcyBleHBsaWNpdGx5IG1hbmFnaW5nIHRoZSBQVEVzIGZvciB0aGF0IHJlZ2lvbi4gQ29sbGFwc2luZyBUSFBzIGluIHRoaXMgY2FzZSB3b3VsZCBpbnRlcmZlcmUgd2l0aCB0aGUgYXBwbGljYXRpb24ncyBleHBlY3RlZCBiZWhhdmlvciBhbmQgcG90ZW50aWFsbHkgbGVhZCB0byBjb3JydXB0aW9uIG9yIHVuZXhwZWN0ZWQgcGFnZSBmYXVsdHMuIFRoaXMgbWFrZXMgY29tcGxldGUgc2Vuc2UgLSBUSFAgY29sbGFwc2UgbWlnaHQgdHJ5IHRvIGluc3RhbGwgYSBQVEUgYmVoaW5kIHRoZSBhcHBsaWNhdGlvbidzIGJhY2suIFRoaXMgYWRkaXRpb24gaXMgY2xlYXJseSBkZXNpZ25lZCB0byBtYWludGFpbiB0aGUgaW50ZW5kZWQgc2VtYW50aWNzIG9mIFVGRkQgYW5kIHByZXZlbnQgY29uZmxpY3RzIHdpdGggYGtodWdlcGFnZWRgLiBJdCdzIGEgc29saWQsIGNhdXRpb3VzIGFwcHJvYWNoIHRvIGtlZXAgdGhlIGRpZmZlcmVudCBhcmVhcyBvZiBtZW1vcnkgbWFuYWdlbWVudCBzYWZlIGFuZCBvcGVyYXRpb25hbC5cblxuSSdtIG5vdyBnb2luZyB0byB1c2UgYGdyZXBwZXJgIG9yIGByZWFkLWZpbGVgIHRvIGV4cGxvcmUgdGhlIGB0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHBgIGZ1bmN0aW9uIGluIG1vcmUgZGV0YWlsLiBJIG5lZWQgdG8gZnVsbHkgZ3JvayB0aGUgaW50ZXJhY3Rpb24gcG9pbnRzIGluIHRoZSBjb2RlYmFzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDcxMywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5MSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDAyOjQ4OjIxLjgzODI3MjU1NloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNDYxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9raHVnZXBhZ2VkLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTg4MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTg4MDpcXHRcXHQvKlxcbjE4ODE6XFx0XFx0ICogSWYgd2UgYXJlIGhlcmUsIHdlJ3ZlIHN1Y2NlZWRlZCBpbiByZXBsYWNpbmcgYWxsIHRoZSBuYXRpdmUgcGFnZXNcXG4xODgyOlxcdFxcdCAqIGluIHRoZSBwYWdlIGNhY2hlIHdpdGggYSBzaW5nbGUgaHVnZXBhZ2UuIElmIGEgbW0gd2VyZSB0byBmYXVsdC1pblxcbjE4ODM6XFx0XFx0ICogdGhpcyBtZW1vcnkgKG1hcHBlZCBieSBhIHN1aXRhYmx5IGFsaWduZWQgVk1BKSwgd2UnZCBnZXQgdGhlIGh1Z2VwYWdlXFxuMTg4NDpcXHRcXHQgKiBhbmQgbWFwIGl0IGJ5IGEgUE1ELCByZWdhcmRsZXNzIG9mIHN5c2ZzIFRIUCBzZXR0aW5ncy4gQXMgc3VjaCwgbGV0J3NcXG4xODg1OlxcdFxcdCAqIGFuYWxvZ291c2x5IGVsaWRlIHN5c2ZzIFRIUCBzZXR0aW5ncyBoZXJlIGFuZCBmb3JjZSBjb2xsYXBzZS5cXG4xODg2OlxcdFxcdCAqL1xcbjE4ODc6XFx0XFx0aWYgKCF0aHBfdm1hX2FsbG93YWJsZV9vcmRlcih2bWEsIHZtYS1cXHUwMDNldm1fZmxhZ3MsIFRWQV9GT1JDRURfQ09MTEFQU0UsIFBNRF9PUkRFUikpXFxuMTg4ODpcXHRcXHRcXHRyZXR1cm4gU0NBTl9WTUFfQ0hFQ0s7XFxuMTg4OTpcXHRcXG4xODkwOlxcdFxcdC8qXFxuMTg5MTpcXHRcXHQgKiBLZWVwIHBtZCBwZ3RhYmxlIHdoaWxlIHRoZSB1ZmZkIGJpdCBpcyBpbiB1c2U7IHNlZSBjb21tZW50IGluXFxuMTg5MjpcXHRcXHQgKiByZXRyYWN0X3BhZ2VfdGFibGVzKCkuXFxuMTg5MzpcXHRcXHQgKi9cXG4xODk0OlxcdFxcdGlmICh1c2VyZmF1bHRmZF9wcm90ZWN0ZWQodm1hKSlcXG4xODk1OlxcdFxcdFxcdHJldHVybiBTQ0FOX1BURV9VRkZEO1xcbjE4OTY6XFx0XFxuMTg5NzpcXHRcXHQvKlxcbjE4OTg6XFx0XFx0ICogVXNlcmZhdWx0ZmQtbWlub3ItcmVnaXN0ZXJlZCBWTUFzIHNob3VsZCBub3QgYmUgY29sbGFwc2VkLCBhc1xcbjE4OTk6XFx0XFx0ICogdXNlcnNwYWNlIGlzIGV4cGVjdGluZyB0byBleHBsaWNpdGx5IGluc3RhbGwgUFRFcy5cXG4xOTAwOlxcdFxcdCAqL1xcbjE5MDE6XFx0XFx0aWYgKHVzZXJmYXVsdGZkX21pbm9yKHZtYSkpXFxuMTkwMjpcXHRcXHRcXHRyZXR1cm4gU0NBTl9QVEVfVUZGRDtcXG4xOTAzOlxcdFxcbjE5MDQ6XFx0XFx0Zm9saW8gPSBmaWxlbWFwX2xvY2tfZm9saW8odm1hLVxcdTAwM2V2bV9maWxlLVxcdTAwM2VmX21hcHBpbmcsXFxuMTkwNTpcXHRcXHRcXHRcXHQgICAgICAgbGluZWFyX3BhZ2VfaW5kZXgodm1hLCBoYWRkcikpO1xcbjE5MDY6XFx0XFx0aWYgKElTX0VSUihmb2xpbykpXFxuMTkwNzpcXHRcXHRcXHRyZXR1cm4gU0NBTl9QQUdFX05VTEw7XFxuMTkwODpcXHRcXG4xOTA5OlxcdFxcdGlmICghaXNfcG1kX29yZGVyKGZvbGlvX29yZGVyKGZvbGlvKSkpIHtcXG4xOTEwOlxcdFxcdFxcdHJlc3VsdCA9IFNDQU5fUEFHRV9DT01QT1VORDtcXG4xOTExOlxcdFxcdFxcdGdvdG8gZHJvcF9mb2xpbztcXG4xOTEyOlxcdFxcdH1cXG4xOTEzOlxcdFxcbjE5MTQ6XFx0XFx0cmVzdWx0ID0gZmluZF9wbWRfb3JfdGhwX29yX25vbmUobW0sIGhhZGRyLCBcXHUwMDI2cG1kKTtcXG4xOTE1OlxcdFxcdHN3aXRjaCAocmVzdWx0KSB7XFxuMTkxNjpcXHRcXHRjYXNlIFNDQU5fU1VDQ0VFRDpcXG4xOTE3OlxcdFxcdFxcdGJyZWFrO1xcbjE5MTg6XFx0XFx0Y2FzZSBTQ0FOX05PX1BURV9UQUJMRTpcXG4xOTE5OlxcdFxcdFxcdC8qXFxuMTkyMDpcXHRcXHRcXHQgKiBBbGwgcHRlIGVudHJpZXMgaGF2ZSBiZWVuIHJlbW92ZWQgYW5kIHBtZCBjbGVhcmVkLlxcbjE5MjE6XFx0XFx0XFx0ICogU2tpcCBhbGwgdGhlIHB0ZSBjaGVja3MgYW5kIGp1c3QgdXBkYXRlIHRoZSBwbWQgbWFwcGluZy5cXG4xOTIyOlxcdFxcdFxcdCAqL1xcbjE5MjM6XFx0XFx0XFx0Z290byBtYXliZV9pbnN0YWxsX3BtZDtcXG4xOTI0OlxcdFxcdGRlZmF1bHQ6XFxuMTkyNTpcXHRcXHRcXHRnb3RvIGRyb3BfZm9saW87XFxuMTkyNjpcXHRcXHR9XFxuMTkyNzpcXHRcXG4xOTI4OlxcdFxcdHJlc3VsdCA9IFNDQU5fRkFJTDtcXG4xOTI5OlxcdFxcdHN0YXJ0X3B0ZSA9IHB0ZV9vZmZzZXRfbWFwX2xvY2sobW0sIHBtZCwgaGFkZHIsIFxcdTAwMjZwdGwpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwMjo0ODoyMS44Mzg0MDkzNTZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNTE2OTEwNTAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRoaW5nczpcblxuKipBbmFseXppbmcgYHRyeV9jb2xsYXBzZV9wdGVfbWFwcGVkX3RocGAgYW5kIGl0cyBTdXJyb3VuZGluZ3MqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIGB0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHBgLiBGaXJzdCwgSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaXRzIGNvbnRleHQuIFdoZXJlIGlzIHRoaXMgZnVuY3Rpb24gYWN0dWFsbHkgYmVpbmcgKnVzZWQqPyBJJ2xsIGNoZWNrIGl0cyBjYWxsIHNpdGVzIHRvIHVuZGVyc3RhbmQgdGhlIHNjZW5hcmlvcyBpbiB3aGljaCBpdCdzIHRyaWdnZXJlZC4gS25vd2luZyB0aGUgY2FsbGVycyB3aWxsIHRlbGwgbWUgdGhlIGhpZ2gtbGV2ZWwgbG9naWMgaXTigJlzIGEgcGFydCBvZiBhbmQgdGhlIHNwZWNpZmljIGV2ZW50cyB0aGF0IGxlYWQgdG8gdGhpcyBwYXJ0IG9mIHRoZSBjb2RlIHJ1bm5pbmcuXG5cblRoZW4sIEknbGwgdHVybiBteSBhdHRlbnRpb24gdG8gdGhlIGNvbmZpZ3VyYXRpb24gZ3VhcmRzIGFyb3VuZCBgbW0va2h1Z2VwYWdlZC5jYC4gV2hhdCBjb21waWxlLXRpbWUgb3B0aW9ucyBhcmUgaW5mbHVlbmNpbmcgdGhlIGF2YWlsYWJpbGl0eSBhbmQgYmVoYXZpb3Igb2YgdGhpcyBjb2RlPyBJJ20gdGhpbmtpbmcgSSdsbCBuZWVkIHRvIGlkZW50aWZ5IGFueSBkZXBlbmRlbmNpZXMgb24gdGhpbmdzIGxpa2UgVHJhbnNwYXJlbnQgSHVnZSBQYWdlcyAoVEhQKSBzdXBwb3J0IG9yIHNwZWNpZmljIG1lbW9yeSBtYW5hZ2VtZW50IGZlYXR1cmVzLiBVbmRlcnN0YW5kaW5nIHRoZSByZWxldmFudCBjb25maWdzIGlzIGNyaXRpY2FsIHRvIGtub3dpbmcgdGhlIHNjb3BlIG9mIGZ1bmN0aW9uYWxpdHkgSSBhbSB3b3JraW5nIHdpdGguIFdoYXQgaXMgY29uZGl0aW9uYWwsIGFuZCB3aGF0IGlzIGFsd2F5cyBydW5uaW5nPyBUaGUgY29uZmlncyBhcmUgdGhlIGtleSB0byBhbnN3ZXJpbmcgdGhhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjI1MiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDI6NDg6MjQuMzU1MzIxNjQ4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM1MjI1OTY0NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2todWdlcGFnZWQuYz0xODE1PXN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IHNldF9odWdlX3BtZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTE4NTAtXFxubW0va2h1Z2VwYWdlZC5jOjE4NTE6c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgdHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxubW0va2h1Z2VwYWdlZC5jLTE4NTItXFx0XFx0Ym9vbCBpbnN0YWxsX3BtZClcXG4tLVxcbm1tL2todWdlcGFnZWQuYz0yMDk2PXZvaWQgY29sbGFwc2VfcHRlX21hcHBlZF90aHAoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0yMDk4LXtcXG5tbS9raHVnZXBhZ2VkLmM6MjA5OTpcXHR0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHAobW0sIGFkZHIsIGluc3RhbGxfcG1kKTtcXG5tbS9raHVnZXBhZ2VkLmMtMjEwMC19XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmM9MjI0OT1zdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBjb2xsYXBzZV9maWxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMjYyOC1cXHQgKiBSZW1vdmUgcHRlIHBhZ2UgdGFibGVzLCBzbyB3ZSBjYW4gcmUtZmF1bHQgdGhlIHBhZ2UgYXMgaHVnZS5cXG5tbS9raHVnZXBhZ2VkLmM6MjYyOTpcXHQgKiBJZiBNQURWX0NPTExBUFNFLCBhZGp1c3QgcmVzdWx0IHRvIGNhbGwgdHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwKCkuXFxubW0va2h1Z2VwYWdlZC5jLTI2MzAtXFx0ICovXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmM9Mjc5MT1zdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBjb2xsYXBzZV9zaW5nbGVfcG1kKHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0yODM1LVxcdFxcdGVsc2VcXG5tbS9raHVnZXBhZ2VkLmM6MjgzNjpcXHRcXHRcXHRyZXN1bHQgPSB0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHAobW0sIGFkZHIsXFxubW0va2h1Z2VwYWdlZC5jLTI4MzctXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAhY2MtXFx1MDAzZWlzX2todWdlcGFnZWQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwMjo0ODoyNC43MDc1ODYxNTNaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMDY5MzY1Nzc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIHRoaXMsIGRpc3RpbGxlZCBpbnRvIGEgZmlyc3QtcGVyc29uIHN1bW1hcnkgYXMgeW91IHJlcXVlc3RlZCwgYXNzdW1pbmcgSSdtIGFscmVhZHkgd2VsbC12ZXJzZWQgaW4ga2VybmVsIG1lbW9yeSBtYW5hZ2VtZW50OlxuXG4qKk1lbW9yeSBNYW5hZ2VtZW50IERlZXAgRGl2ZSoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlnIGluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgZ29pbmcgb24gd2l0aCB0aGVzZSBtZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbnMuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiBob3cgbWVtb3J5IGlzIGJlaW5nIGhhbmRsZWQgcmVsYXRlZCB0byB0cmFuc3BhcmVudCBodWdlcGFnZXMgKFRIUCkgYW5kIGBtYWR2aXNlYCBjYWxscy5cblxuRmlyc3QsIEknbSBnb2luZyB0byBpbnZlc3RpZ2F0ZSB0aGUgYG1hZHZpc2VfY29sbGFwc2VgIG9yIHRoZSBgbWFkdmlzZWAgZW50cnkgcG9pbnQgaXRzZWxmLiBJIHdhbnQgdG8gc2VlIHByZWNpc2VseSBob3cgdGhlc2UgZnVuY3Rpb25zIGFyZSBiZWluZyB1c2VkIGFuZCB1bmRlcnN0YW5kIHRoZWlyIGV4YWN0IHB1cnBvc2UgaW4gY29sbGFwc2luZyBvciBvdGhlcndpc2UgbWFuYWdpbmcgbWVtb3J5IHJlZ2lvbnMuIEkgYWxzbyBuZWVkIHRvIHRyYWNrIGRvd24gYW55IGFuZCBhbGwgY2FsbHMgdG8gdGhlIGBraHVnZXBhZ2VkYCBwcm9jZXNzIGJlY2F1c2UgaXRzIHJlbGF0aW9uc2hpcCB3aXRoIFRIUHMgaXMgdml0YWwgdG8gZ3Jhc3AuXG5cbk5leHQsIEknbGwgc2hpZnQgZ2VhcnMgYW5kIHRyYWNlIHRoZSBjYWxsZXJzIG9mIHRoZXNlIGtleSBmdW5jdGlvbnM6IGBjb2xsYXBzZV9wdGVfbWFwcGVkX3RocGAsIGBjb2xsYXBzZV9zaW5nbGVfcG1kYCwgYW5kLCBhZ2FpbiwgYG1hZHZpc2VfY29sbGFwc2VgLiBJZGVudGlmeWluZyB3aGVyZSB0aGVzZSBhcmUgYmVpbmcgY2FsbGVkIGZyb20gd2lsbCBwYWludCBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhlIG1lbW9yeSBtYW5pcHVsYXRpb24gd29ya2Zsb3cuIFNlZWluZyB0aGUgY2FsbCBjaGFpbnMgd2lsbCBnaXZlIG1lIGluc2lnaHQgaW50byB0aGUgdHJpZ2dlcmluZyBtZWNoYW5pc21zLiBJJ20gYWZ0ZXIgdGhlIGJpZ2dlciBwaWN0dXJlOiB3aGF0IHNjZW5hcmlvcyBhcmUgY2F1c2luZyBUSFAgY29sbGFwc2UsIHdoYXQgY29kZSBwYXRocyBkbyB0aGUgZnVuY3Rpb25zIHRha2UsIGFuZCBob3cgZG9lcyBgbWFkdmlzZWAgaW5mbHVlbmNlIHRoZSB3aG9sZSBwcm9jZXNzPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MDMzLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDI6NDg6MjcuNzc2OTUzODg4WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0MTY1ODc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9raHVnZXBhZ2VkLmM9MTgxNT1zdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBzZXRfaHVnZV9wbWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0xODUwLVxcbm1tL2todWdlcGFnZWQuYzoxODUxOnN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IHRyeV9jb2xsYXBzZV9wdGVfbWFwcGVkX3RocChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbm1tL2todWdlcGFnZWQuYy0xODUyLVxcdFxcdGJvb2wgaW5zdGFsbF9wbWQpXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMjA4NC0vKipcXG5tbS9raHVnZXBhZ2VkLmM6MjA4NTogKiBjb2xsYXBzZV9wdGVfbWFwcGVkX3RocCAtIFRyeSB0byBjb2xsYXBzZSBhIHB0ZS1tYXBwZWQgVEhQIGZvciBtbSBhdFxcbm1tL2todWdlcGFnZWQuYy0yMDg2LSAqIGFkZHJlc3MgaGFkZHIuXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMjA5NS0gKi9cXG5tbS9raHVnZXBhZ2VkLmM6MjA5Njp2b2lkIGNvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxubW0va2h1Z2VwYWdlZC5jLTIwOTctXFx0XFx0Ym9vbCBpbnN0YWxsX3BtZClcXG5tbS9raHVnZXBhZ2VkLmMtMjA5OC17XFxubW0va2h1Z2VwYWdlZC5jOjIwOTk6XFx0dHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwKG1tLCBhZGRyLCBpbnN0YWxsX3BtZCk7XFxubW0va2h1Z2VwYWdlZC5jLTIxMDAtfVxcbi0tXFxubW0va2h1Z2VwYWdlZC5jPTIyNDk9c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2VfZmlsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTI2MjgtXFx0ICogUmVtb3ZlIHB0ZSBwYWdlIHRhYmxlcywgc28gd2UgY2FuIHJlLWZhdWx0IHRoZSBwYWdlIGFzIGh1Z2UuXFxubW0va2h1Z2VwYWdlZC5jOjI2Mjk6XFx0ICogSWYgTUFEVl9DT0xMQVBTRSwgYWRqdXN0IHJlc3VsdCB0byBjYWxsIHRyeV9jb2xsYXBzZV9wdGVfbWFwcGVkX3RocCgpLlxcbm1tL2todWdlcGFnZWQuYy0yNjMwLVxcdCAqL1xcbi0tXFxubW0va2h1Z2VwYWdlZC5jPTI3OTE9c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2Vfc2luZ2xlX3BtZCh1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMjgzNS1cXHRcXHRlbHNlXFxubW0va2h1Z2VwYWdlZC5jOjI4MzY6XFx0XFx0XFx0cmVzdWx0ID0gdHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwKG1tLCBhZGRyLFxcbm1tL2todWdlcGFnZWQuYy0yODM3LVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIWNjLVxcdTAwM2Vpc19raHVnZXBhZ2VkKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDI6NDg6MjcuODMxMTI1MjA3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTkxMzQxNTQzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIGBjb2xsYXBzZV9wdGVfbWFwcGVkX3RocGAgQ2FsbCBTaXRlcyoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIHdvcmsuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB1bmRlcnN0YW5kaW5nIHRoZSBzY29wZSBvZiB0aGUgYGNvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwYCBmdW5jdGlvbi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgZXZlcnl3aGVyZSBpdCdzICp1c2VkKiB3aXRoaW4gdGhlIGtlcm5lbCwgYW5kIHRoZSBtb3N0IGVmZmljaWVudCB3YXkgdG8gZG8gdGhhdCBpcywgb2YgY291cnNlLCB0byBzdGFydCBieSB0cmFjaW5nIHRob3NlIGNhbGwgc2l0ZXMuIFRoYXTigJlzIHRoZSBmaXJzdCBzdGVwIHRvIHVuZGVyc3RhbmRpbmcgaXRzIGltcGFjdCBhbmQgcG90ZW50aWFsIGludGVyYWN0aW9ucyB3aXRoIG90aGVyIHN1YnN5c3RlbXMuIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBkaWZmZXJlbnQgY29udGV4dHMgaXQgaXMgdXNlZCBpbiB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODAxNiwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDAyOjQ4OjI5Ljc0NDU0NDNaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NjIzNjg1NTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29sbGFwc2VfcHRlX21hcHBlZF90aHBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9raHVnZXBhZ2VkLmg9MTk9ZXh0ZXJuIGJvb2wgY3VycmVudF9pc19raHVnZXBhZ2VkKHZvaWQpO1xcbmluY2x1ZGUvbGludXgva2h1Z2VwYWdlZC5oOjIwOnZvaWQgY29sbGFwc2VfcHRlX21hcHBlZF90aHAoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG5pbmNsdWRlL2xpbnV4L2todWdlcGFnZWQuaC0yMS1cXHRcXHRib29sIGluc3RhbGxfcG1kKTtcXG4tLVxcbmluY2x1ZGUvbGludXgva2h1Z2VwYWdlZC5oPTQxPXN0YXRpYyBpbmxpbmUgdm9pZCBraHVnZXBhZ2VkX2VudGVyX3ZtYShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbmluY2x1ZGUvbGludXgva2h1Z2VwYWdlZC5oLTQ0LX1cXG5pbmNsdWRlL2xpbnV4L2todWdlcGFnZWQuaDo0NTpzdGF0aWMgaW5saW5lIHZvaWQgY29sbGFwc2VfcHRlX21hcHBlZF90aHAoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuaW5jbHVkZS9saW51eC9raHVnZXBhZ2VkLmgtNDYtXFx0XFx0dW5zaWduZWQgbG9uZyBhZGRyLCBib29sIGluc3RhbGxfcG1kKVxcbi0tXFxua2VybmVsL2V2ZW50cy91cHJvYmVzLmM9NDk5PWludCB1cHJvYmVfd3JpdGUoc3RydWN0IGFyY2hfdXByb2JlICphdXByb2JlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbmtlcm5lbC9ldmVudHMvdXByb2Jlcy5jLTU5OS1cXHRpZiAocmV0IFxcdTAwM2UgMClcXG5rZXJuZWwvZXZlbnRzL3Vwcm9iZXMuYzo2MDA6XFx0XFx0Y29sbGFwc2VfcHRlX21hcHBlZF90aHAobW0sIHZhZGRyLCBmYWxzZSk7XFxua2VybmVsL2V2ZW50cy91cHJvYmVzLmMtNjAxLVxcbi0tXFxubW0va2h1Z2VwYWdlZC5jPTE4MTU9c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgc2V0X2h1Z2VfcG1kKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMTg1MC1cXG5tbS9raHVnZXBhZ2VkLmM6MTg1MTpzdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCB0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHAoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG5tbS9raHVnZXBhZ2VkLmMtMTg1Mi1cXHRcXHRib29sIGluc3RhbGxfcG1kKVxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTIwODQtLyoqXFxubW0va2h1Z2VwYWdlZC5jOjIwODU6ICogY29sbGFwc2VfcHRlX21hcHBlZF90aHAgLSBUcnkgdG8gY29sbGFwc2UgYSBwdGUtbWFwcGVkIFRIUCBmb3IgbW0gYXRcXG5tbS9raHVnZXBhZ2VkLmMtMjA4Ni0gKiBhZGRyZXNzIGhhZGRyLlxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTIwOTUtICovXFxubW0va2h1Z2VwYWdlZC5jOjIwOTY6dm9pZCBjb2xsYXBzZV9wdGVfbWFwcGVkX3RocChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbm1tL2todWdlcGFnZWQuYy0yMDk3LVxcdFxcdGJvb2wgaW5zdGFsbF9wbWQpXFxubW0va2h1Z2VwYWdlZC5jLTIwOTgte1xcbm1tL2todWdlcGFnZWQuYzoyMDk5OlxcdHRyeV9jb2xsYXBzZV9wdGVfbWFwcGVkX3RocChtbSwgYWRkciwgaW5zdGFsbF9wbWQpO1xcbm1tL2todWdlcGFnZWQuYy0yMTAwLX1cXG4tLVxcbm1tL2todWdlcGFnZWQuYz0yMjQ5PXN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGNvbGxhcHNlX2ZpbGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0yNjI4LVxcdCAqIFJlbW92ZSBwdGUgcGFnZSB0YWJsZXMsIHNvIHdlIGNhbiByZS1mYXVsdCB0aGUgcGFnZSBhcyBodWdlLlxcbm1tL2todWdlcGFnZWQuYzoyNjI5OlxcdCAqIElmIE1BRFZfQ09MTEFQU0UsIGFkanVzdCByZXN1bHQgdG8gY2FsbCB0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHAoKS5cXG5tbS9raHVnZXBhZ2VkLmMtMjYzMC1cXHQgKi9cXG4tLVxcbm1tL2todWdlcGFnZWQuYz0yNzkxPXN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGNvbGxhcHNlX3NpbmdsZV9wbWQodW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTI4MzUtXFx0XFx0ZWxzZVxcbm1tL2todWdlcGFnZWQuYzoyODM2OlxcdFxcdFxcdHJlc3VsdCA9IHRyeV9jb2xsYXBzZV9wdGVfbWFwcGVkX3RocChtbSwgYWRkcixcXG5tbS9raHVnZXBhZ2VkLmMtMjgzNy1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICFjYy1cXHUwMDNlaXNfa2h1Z2VwYWdlZCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDAyOjQ4OjMxLjQwNjkxOTMwNFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNjYxMjQ3NzQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgTWVtb3J5IE1hbmFnZW1lbnQgVGVjaG5pcXVlczogQ29sbGFwc2luZyBNZW1vcnkgUmVnaW9ucyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW4gYW5kIGZpZ3VyZSBvdXQgZXhhY3RseSB3aGF0J3MgdXNpbmcgYG1hZHZpc2VfY29sbGFwc2VgIG9yLCBtb3JlIGdlbmVyYWxseSwgYG1hZHZpc2VgIGluIGNvbmp1bmN0aW9uIHdpdGggYE1BRFZfQ09MTEFQU0VgLiBNeSBpbml0aWFsIHBsYW4gaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCDigJMgSSdsbCBzdGFydCB3aXRoIGEgZ29vZCBvbGQgYGdyZXBgIHNlYXJjaCBmb3IgaW5zdGFuY2VzIG9mIGBtYWR2aXNlX2NvbGxhcHNlYCB3aXRoaW4gdGhlIHJlbGV2YW50IGNvZGViYXNlLiBUaGlzIHdpbGwgYmUgdGhlIGZpcnN0IHN0ZXAgdG8gdW5kZXJzdGFuZCB3aG8gaXMgdXNpbmcgaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkxMTIsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwMjo0ODozNC4wNjgxNjk0MTZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MjU0MzU0MjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWFkdmlzZV9jb2xsYXBzZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL3RyYW5zaHVnZS5yc3Q9MzQ2PUEgaGlnaGVyIHZhbHVlIG1heSBpbmNyZWFzZSBtZW1vcnkgZm9vdHByaW50IGZvciBzb21lIHdvcmtsb2Fkcy5cXG4tLVxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vdHJhbnNodWdlLnJzdC0zNTMtXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS90cmFuc2h1Z2UucnN0OjM1NDogICBDdXJyZW50bHksIG1hZHZpc2VfY29sbGFwc2Ugb25seSBzdXBwb3J0cyBjb2xsYXBzaW5nIHRvIFBNRC1zaXplZCBUSFBzXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS90cmFuc2h1Z2UucnN0LTM1NS0gICBhbmQgZG9lcyBub3QgYXR0ZW1wdCBtVEhQIGNvbGxhcHNlcy5cXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oPTUxMT1pbnQgaHVnZXBhZ2VfbWFkdmlzZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdm1fZmxhZ3NfdCAqdm1fZmxhZ3MsXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNTEyLVxcdFxcdCAgICAgaW50IGFkdmljZSk7XFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6NTEzOmludCBtYWR2aXNlX2NvbGxhcHNlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTUxNC1cXHRcXHQgICAgIHVuc2lnbmVkIGxvbmcgZW5kLCBib29sICpsb2NrX2Ryb3BwZWQpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg9NzEyPXN0YXRpYyBpbmxpbmUgaW50IGh1Z2VwYWdlX21hZHZpc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC03MTctXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6NzE4OnN0YXRpYyBpbmxpbmUgaW50IG1hZHZpc2VfY29sbGFwc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNzE5LVxcdFxcdFxcdFxcdCAgIHVuc2lnbmVkIGxvbmcgc3RhcnQsXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmM9MzE1Mj1ib29sIGN1cnJlbnRfaXNfa2h1Z2VwYWdlZCh2b2lkKVxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTMxNTYtXFxubW0va2h1Z2VwYWdlZC5jOjMxNTc6c3RhdGljIGludCBtYWR2aXNlX2NvbGxhcHNlX2Vycm5vKGVudW0gc2Nhbl9yZXN1bHQgcilcXG5tbS9raHVnZXBhZ2VkLmMtMzE1OC17XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMzE4OC1cXG5tbS9raHVnZXBhZ2VkLmM6MzE4OTppbnQgbWFkdmlzZV9jb2xsYXBzZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBzdGFydCxcXG5tbS9raHVnZXBhZ2VkLmMtMzE5MC1cXHRcXHQgICAgIHVuc2lnbmVkIGxvbmcgZW5kLCBib29sICpsb2NrX2Ryb3BwZWQpXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMzI3Ni1cXHRyZXR1cm4gdGhwcyA9PSAoKGhlbmQgLSBoc3RhcnQpIFxcdTAwM2VcXHUwMDNlIEhQQUdFX1BNRF9TSElGVCkgPyAwXFxubW0va2h1Z2VwYWdlZC5jOjMyNzc6XFx0XFx0XFx0OiBtYWR2aXNlX2NvbGxhcHNlX2Vycm5vKGxhc3RfZmFpbCk7XFxubW0va2h1Z2VwYWdlZC5jLTMyNzgtfVxcbi0tXFxubW0vbWFkdmlzZS5jPTEzNDc9c3RhdGljIGludCBtYWR2aXNlX3ZtYV9iZWhhdmlvcihzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcXG4tLVxcbm1tL21hZHZpc2UuYy0xMzcxLVxcdGNhc2UgTUFEVl9DT0xMQVBTRTpcXG5tbS9tYWR2aXNlLmM6MTM3MjpcXHRcXHRyZXR1cm4gbWFkdmlzZV9jb2xsYXBzZSh2bWEsIHJhbmdlLVxcdTAwM2VzdGFydCwgcmFuZ2UtXFx1MDAzZWVuZCxcXG5tbS9tYWR2aXNlLmMtMTM3My1cXHRcXHRcXHRcXHUwMDI2bWFkdl9iZWhhdmlvci1cXHUwMDNlbG9ja19kcm9wcGVkKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYz0yMzU9c3RhdGljIHZvaWQgZmlsbF9tZW1vcnkoaW50ICpwLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYy0yNDgtICovXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jOjI0OTpzdGF0aWMgaW50IG1hZHZpc2VfY29sbGFwc2VfcmV0cnkodm9pZCAqcCwgdW5zaWduZWQgbG9uZyBzaXplKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYy0yNTAte1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jPTI2Nz1zdGF0aWMgdm9pZCAqYWxsb2NfaHBhZ2Uoc3RydWN0IG1lbV9vcHMgKm9wcylcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYy0yODAtXFx0a3NmdF9wcmludF9tc2coXFxcIkFsbG9jYXRlIGh1Z2UgcGFnZS4uLlxcXCIpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYzoyODE6XFx0aWYgKG1hZHZpc2VfY29sbGFwc2VfcmV0cnkocCwgaHBhZ2VfcG1kX3NpemUpKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYy0yODItXFx0XFx0a3NmdF9leGl0X2ZhaWxfcGVycm9yKFxcXCJtYWR2aXNlKE1BRFZfQ09MTEFQU0UpXFxcIik7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmM9NTExPXN0YXRpYyBib29sIGlzX2Fub24oc3RydWN0IG1lbV9vcHMgKm9wcylcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYy01MTUtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jOjUxNjpzdGF0aWMgdm9pZCBfX21hZHZpc2VfY29sbGFwc2UoY29uc3QgY2hhciAqbXNnLCBjaGFyICpwLCBpbnQgbnJfaHBhZ2VzLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYy01MTctXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBtZW1fb3BzICpvcHMsIGJvb2wgZXhwZWN0KVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jLTUzOS1cXHRtYWR2aXNlKHAsIG5yX2hwYWdlcyAqIGhwYWdlX3BtZF9zaXplLCBNQURWX0hVR0VQQUdFKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmM6NTQwOlxcdHJldCA9IG1hZHZpc2VfY29sbGFwc2VfcmV0cnkocCwgbnJfaHBhZ2VzICogaHBhZ2VfcG1kX3NpemUpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYy01NDEtXFx0aWYgKCgoYm9vbClyZXQpID09IGV4cGVjdClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYy01NTAtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jOjU1MTpzdGF0aWMgdm9pZCBtYWR2aXNlX2NvbGxhcHNlKGNvbnN0IGNoYXIgKm1zZywgY2hhciAqcCwgaW50IG5yX2hwYWdlcyxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMtNTUyLVxcdFxcdFxcdCAgICAgc3RydWN0IG1lbV9vcHMgKm9wcywgYm9vbCBleHBlY3QpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMtNTU2LVxcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhcXFwiVW5leHBlY3RlZCBodWdlIHBhZ2VcXFxcblxcXCIpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYzo1NTc6XFx0X19tYWR2aXNlX2NvbGxhcHNlKG1zZywgcCwgbnJfaHBhZ2VzLCBvcHMsIGV4cGVjdCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jLTU1OC19XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmM9NjgwPXN0YXRpYyBzdHJ1Y3QgY29sbGFwc2VfY29udGV4dCBfX21hZHZpc2VfY29udGV4dCA9IHtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmM6NjgxOlxcdC5jb2xsYXBzZSA9IFxcdTAwMjZtYWR2aXNlX2NvbGxhcHNlLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYy02ODItXFx0LmVuZm9yY2VfcHRlX3NjYW5fbGltaXRzID0gZmFsc2UsXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmM9MTA3Nj1zdGF0aWMgdm9pZCBjb2xsYXBzZV9tYXhfcHRlc19zaGFyZWQoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsIHN0cnVjdCBtZW1fb3BzICpvcHMpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMtMTEzMy1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmM6MTEzNDpzdGF0aWMgdm9pZCBtYWR2aXNlX2NvbGxhcHNlX2V4aXN0aW5nX3RocHMoc3RydWN0IGNvbGxhcHNlX2NvbnRleHQgKmMsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jLTExMzUtXFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IG1lbV9vcHMgKm9wcylcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYy0xMTQ0LVxcdC8qIGMtXFx1MDAzZWNvbGxhcHNlKCkgd2lsbCBmaW5kIGEgaHVnZXBhZ2UgYW5kIGNvbXBsYWluIC0gY2FsbCBkaXJlY3RseS4gKi9cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmM6MTE0NTpcXHRfX21hZHZpc2VfY29sbGFwc2UoXFxcIlJlLWNvbGxhcHNlIFBNRC1tYXBwZWQgaHVnZXBhZ2VcXFwiLCBwLCAxLCBvcHMsIHRydWUpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYy0xMTQ2LVxcdHZhbGlkYXRlX21lbW9yeShwLCAwLCBocGFnZV9wbWRfc2l6ZSk7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmM9MTMxMT1pbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmMtMTQzMi1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmM6MTQzMzpcXHRURVNUKG1hZHZpc2VfY29sbGFwc2VfZXhpc3RpbmdfdGhwcywgbWFkdmlzZV9jb250ZXh0LCBhbm9uX29wcyk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jOjE0MzQ6XFx0VEVTVChtYWR2aXNlX2NvbGxhcHNlX2V4aXN0aW5nX3RocHMsIG1hZHZpc2VfY29udGV4dCwgcmVhZF9vbmx5X2ZpbGVfb3BzKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9raHVnZXBhZ2VkLmM6MTQzNTpcXHRURVNUKG1hZHZpc2VfY29sbGFwc2VfZXhpc3RpbmdfdGhwcywgbWFkdmlzZV9jb250ZXh0LCByZWFkX3dyaXRlX2ZpbGVfcmVhZF9vcHMpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2todWdlcGFnZWQuYzoxNDM2OlxcdFRFU1QobWFkdmlzZV9jb2xsYXBzZV9leGlzdGluZ190aHBzLCBtYWR2aXNlX2NvbnRleHQsIHNobWVtX29wcyk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0va2h1Z2VwYWdlZC5jLTE0MzctXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDAyOjQ4OjM1Ljc5MzYxMjIzMloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzM5OTIwMTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIEtlcm5lbCBIdWdlIFBhZ2UgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gaG93IGBraHVnZXBhZ2VkYCBhbmQgdGhhdCBwZXNreSBgdXNlcmZhdWx0ZmRfbWlub3JgIGFyZSBjb25maWd1cmVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlc2UgdGhpbmdzLiBGaXJzdCwgSSdsbCBnbyBzdHJhaWdodCB0byB0aGUgc291cmNlIOKAkyB0aGUgS2NvbmZpZyBmaWxlcy4gSSdsbCBuZWVkIHRvIHNlZSBob3cgdGhlIHNldHRpbmdzIGluIGBraHVnZXBhZ2VkLmNgIGFuZCBgdXNlcmZhdWx0ZmRfbWlub3JgIGFyZSBjb250cm9sbGVkLiBMZXQncyBzdGFydCB3aXRoIGEgZm9jdXNlZCBncmVwLiBJJ2xsIHNlYXJjaCBmb3IgcmVmZXJlbmNlcyB0byBga2h1Z2VwYWdlZGAgaW4gdGhlIGBtbS9NYWtlZmlsZWAgYW5kIGBtbS9LY29uZmlnYCBmaWxlcy4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2Qgb3ZlcnZpZXcgb2YgdGhlIGJ1aWxkIGRlcGVuZGVuY2llcyBhbmQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBGcm9tIHRoZXJlLCBJJ2xsIGJlIGFibGUgdG8gYnVpbGQgYSBtZW50YWwgbWFwIG9mIGhvdyB0aGVzZSBmZWF0dXJlcyBhcmUgZW5hYmxlZCwgZGlzYWJsZWQsIGFuZCBwb3RlbnRpYWxseSB0dW5lZC4gVGhpcyBLY29uZmlnIGV4cGxvcmF0aW9uIHNob3VsZCBzaGVkIGxpZ2h0IG9uIHRoZSBidWlsZC10aW1lIGRlcGVuZGVuY2llcyBhbmQgcGVyaGFwcyBzb21lIG9mIHRoZSBicm9hZGVyIGFyY2hpdGVjdHVyZSBpbnZvbHZlZCBpbiBoYW5kbGluZyBodWdlIHBhZ2VzIGFuZCB1c2VyIGZhdWx0IGhhbmRsaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTQ0MCwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDAyOjQ4OjM4LjEzMzUzNTA2WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDQ1NTk5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJraHVnZXBhZ2VkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDg2MiBsaW5lcy5cXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXFxuXFxubW0vTWFrZWZpbGU9MTAwPW9iai0kKENPTkZJR19ERVZJQ0VfTUlHUkFUSU9OKSArPSBtaWdyYXRlX2RldmljZS5vXFxubW0vTWFrZWZpbGU6MTAxOm9iai0kKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgKz0gaHVnZV9tZW1vcnkubyBraHVnZXBhZ2VkLm9cXG5tbS9NYWtlZmlsZS0xMDItb2JqLSQoQ09ORklHX1BBR0VfQ09VTlRFUikgKz0gcGFnZV9jb3VudGVyLm9cXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMjMtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21tX3R5cGVzLmhcXHUwMDNlXFxubW0vaHVnZV9tZW1vcnkuYzoyNDojaW5jbHVkZSBcXHUwMDNjbGludXgva2h1Z2VwYWdlZC5oXFx1MDAzZVxcbm1tL2h1Z2VfbWVtb3J5LmMtMjUtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ZyZWV6ZXIuaFxcdTAwM2VcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNTYtICogZ3VhcmFudGVlZCB0byBiZW5lZml0IGZyb20gaXQuIFdoZW4gdHJhbnNwYXJlbnQgaHVnZXBhZ2Ugc3VwcG9ydCBpc1xcbm1tL2h1Z2VfbWVtb3J5LmM6NTc6ICogZW5hYmxlZCwgaXQgaXMgZm9yIGFsbCBtYXBwaW5ncywgYW5kIGtodWdlcGFnZWQgc2NhbnMgYWxsIG1hcHBpbmdzLlxcbm1tL2h1Z2VfbWVtb3J5LmM6NTg6ICogRGVmcmFnIGlzIGludm9rZWQgYnkga2h1Z2VwYWdlZCBodWdlcGFnZSBhbGxvY2F0aW9ucyBhbmQgYnkgcGFnZSBmYXVsdHNcXG5tbS9odWdlX21lbW9yeS5jLTU5LSAqIGZvciBhbGwgaHVnZXBhZ2UgYWxsb2NhdGlvbnMuXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTEyMT11bnNpZ25lZCBsb25nIF9fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0xNDgtXFxubW0vaHVnZV9tZW1vcnkuYzoxNDk6XFx0Lyoga2h1Z2VwYWdlZCBkb2Vzbid0IGNvbGxhcHNlIERBWCB2bWEsIGJ1dCBwYWdlIGZhdWx0IGlzIGZpbmUuICovXFxubW0vaHVnZV9tZW1vcnkuYy0xNTAtXFx0aWYgKHZtYV9pc19kYXgodm1hKSlcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMTUzLVxcdC8qXFxubW0vaHVnZV9tZW1vcnkuYzoxNTQ6XFx0ICoga2h1Z2VwYWdlZCBzcGVjaWFsIFZNQSBhbmQgaHVnZXRsYiBWTUEuXFxubW0vaHVnZV9tZW1vcnkuYy0xNTUtXFx0ICogTXVzdCBiZSBjaGVja2VkIGFmdGVyIGRheCBzaW5jZSBzb21lIGRheCBtYXBwaW5ncyBtYXkgaGF2ZVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz00NDU9c3RhdGljIHNzaXplX3QgZW5hYmxlZF9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDU1LVxcdGlmIChzZXRfZ2xvYmFsX2VuYWJsZWRfbW9kZShtb2RlKSkge1xcbm1tL2h1Z2VfbWVtb3J5LmM6NDU2OlxcdFxcdGludCBlcnIgPSBzdGFydF9zdG9wX2todWdlcGFnZWQoKTtcXG5tbS9odWdlX21lbW9yeS5jLTQ1Ny1cXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDYzLVxcdFxcdCAqIGNoYW5nZSwgYXMgdGhlIHByZXZpb3VzIGNvZGUgYWx3YXlzIGNhbGxlZFxcbm1tL2h1Z2VfbWVtb3J5LmM6NDY0OlxcdFxcdCAqIHN0YXJ0X3N0b3Bfa2h1Z2VwYWdlZCgpIHdoaWNoIGRvZXMgdGhpcyBpbnRlcm5hbGx5Llxcbm1tL2h1Z2VfbWVtb3J5LmMtNDY1LVxcdFxcdCAqL1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz02ODA9c3RhdGljIHNzaXplX3QgYW5vbl9lbmFibGVkX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy02OTEtXFx0aWYgKHNldF9hbm9uX2VuYWJsZWRfbW9kZShvcmRlciwgbW9kZSkpIHtcXG5tbS9odWdlX21lbW9yeS5jOjY5MjpcXHRcXHRpbnQgZXJyID0gc3RhcnRfc3RvcF9raHVnZXBhZ2VkKCk7XFxubW0vaHVnZV9tZW1vcnkuYy02OTMtXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTY5OS1cXHRcXHQgKiBjaGFuZ2UsIGFzIHRoZSBwcmV2aW91cyBjb2RlIGFsd2F5cyBjYWxsZWRcXG5tbS9odWdlX21lbW9yeS5jOjcwMDpcXHRcXHQgKiBzdGFydF9zdG9wX2todWdlcGFnZWQoKSB3aGljaCBkb2VzIHRoaXMgaW50ZXJuYWxseS5cXG5tbS9odWdlX21lbW9yeS5jLTcwMS1cXHRcXHQgKi9cXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9OTMzPXN0YXRpYyBpbnQgX19pbml0IGh1Z2VwYWdlX2luaXRfc3lzZnMoc3RydWN0IGtvYmplY3QgKipodWdlcGFnZV9rb2JqKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy05NTktXFxubW0vaHVnZV9tZW1vcnkuYzo5NjA6XFx0ZXJyID0gc3lzZnNfY3JlYXRlX2dyb3VwKCpodWdlcGFnZV9rb2JqLCBcXHUwMDI2a2h1Z2VwYWdlZF9hdHRyX2dyb3VwKTtcXG5tbS9odWdlX21lbW9yeS5jLTk2MS1cXHRpZiAoZXJyKSB7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTk5MT1zdGF0aWMgdm9pZCBfX2luaXQgaHVnZXBhZ2VfZXhpdF9zeXNmcyhzdHJ1Y3Qga29iamVjdCAqaHVnZXBhZ2Vfa29iailcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtOTk5LVxcbm1tL2h1Z2VfbWVtb3J5LmM6MTAwMDpcXHRzeXNmc19yZW1vdmVfZ3JvdXAoaHVnZXBhZ2Vfa29iaiwgXFx1MDAyNmtodWdlcGFnZWRfYXR0cl9ncm91cCk7XFxubW0vaHVnZV9tZW1vcnkuYy0xMDAxLVxcdHN5c2ZzX3JlbW92ZV9ncm91cChodWdlcGFnZV9rb2JqLCBcXHUwMDI2aHVnZXBhZ2VfYXR0cl9ncm91cCk7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTEwNTE9c3RhdGljIGludCBfX2luaXQgaHVnZXBhZ2VfaW5pdCh2b2lkKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0xMDY5LVxcbm1tL2h1Z2VfbWVtb3J5LmM6MTA3MDpcXHRlcnIgPSBraHVnZXBhZ2VkX2luaXQoKTtcXG5tbS9odWdlX21lbW9yeS5jLTEwNzEtXFx0aWYgKGVycilcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMTA4Ny1cXG5tbS9odWdlX21lbW9yeS5jOjEwODg6XFx0ZXJyID0gc3RhcnRfc3RvcF9raHVnZXBhZ2VkKCk7XFxubW0vaHVnZV9tZW1vcnkuYy0xMDg5LVxcdGlmIChlcnIpXFxubW0vaHVnZV9tZW1vcnkuYzoxMDkwOlxcdFxcdGdvdG8gZXJyX2todWdlcGFnZWQ7XFxubW0vaHVnZV9tZW1vcnkuYy0xMDkxLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMTA5Mi1cXHRyZXR1cm4gMDtcXG5tbS9odWdlX21lbW9yeS5jOjEwOTM6ZXJyX2todWdlcGFnZWQ6XFxubW0vaHVnZV9tZW1vcnkuYy0xMDk0LVxcdHRocF9zaHJpbmtlcl9leGl0KCk7XFxubW0vaHVnZV9tZW1vcnkuYy0xMDk1LWVycl9zaHJpbmtlcjpcXG5tbS9odWdlX21lbW9yeS5jOjEwOTY6XFx0a2h1Z2VwYWdlZF9kZXN0cm95KCk7XFxubW0vaHVnZV9tZW1vcnkuYy0xMDk3LWVycl9zbGFiOlxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0xNTIwPXZtX2ZhdWx0X3QgZG9faHVnZV9wbWRfYW5vbnltb3VzX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTE1MzAtXFx0XFx0cmV0dXJuIHJldDtcXG5tbS9odWdlX21lbW9yeS5jOjE1MzE6XFx0a2h1Z2VwYWdlZF9lbnRlcl92bWEodm1hLCB2bWEtXFx1MDAzZXZtX2ZsYWdzKTtcXG5tbS9odWdlX21lbW9yeS5jLTE1MzItXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTQ1NjE9c3RhdGljIGJvb2wgdGhwX3VuZGVydXNlZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00NTY1LVxcbm1tL2h1Z2VfbWVtb3J5LmM6NDU2NjpcXHRpZiAoa2h1Z2VwYWdlZF9tYXhfcHRlc19ub25lID09IEhQQUdFX1BNRF9OUiAtIDEpXFxubW0vaHVnZV9tZW1vcnkuYy00NTY3LVxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDU3My1cXHRcXHRpZiAocGFnZXNfaWRlbnRpY2FsKGZvbGlvX3BhZ2UoZm9saW8sIGkpLCBaRVJPX1BBR0UoMCkpKSB7XFxubW0vaHVnZV9tZW1vcnkuYzo0NTc0OlxcdFxcdFxcdGlmICgrK251bV96ZXJvX3BhZ2VzIFxcdTAwM2Uga2h1Z2VwYWdlZF9tYXhfcHRlc19ub25lKVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDU3NS1cXHRcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDU4MC1cXHRcXHRcXHQgKi9cXG5tbS9odWdlX21lbW9yeS5jOjQ1ODE6XFx0XFx0XFx0aWYgKCsrbnVtX2ZpbGxlZF9wYWdlcyBcXHUwMDNlPSBIUEFHRV9QTURfTlIgLSBraHVnZXBhZ2VkX21heF9wdGVzX25vbmUpXFxubW0vaHVnZV9tZW1vcnkuYy00NTgyLVxcdFxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbm1tL2ludGVybmFsLmgtMTAtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ZzLmhcXHUwMDNlXFxubW0vaW50ZXJuYWwuaDoxMTojaW5jbHVkZSBcXHUwMDNjbGludXgva2h1Z2VwYWdlZC5oXFx1MDAzZVxcbm1tL2ludGVybmFsLmgtMTItI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21tLmhcXHUwMDNlXFxuLS1cXG5tbS9pbnRlcm5hbC5oPTcwNj1wbWRfdCAqbW1fZmluZF9wbWQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyk7XFxuLS1cXG5tbS9pbnRlcm5hbC5oLTcwOC0vKlxcbm1tL2ludGVybmFsLmg6NzA5OiAqIGluIG1tL2todWdlcGFnZWQuY1xcbm1tL2ludGVybmFsLmgtNzEwLSAqL1xcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTExLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9rdGhyZWFkLmhcXHUwMDNlXFxubW0va2h1Z2VwYWdlZC5jOjEyOiNpbmNsdWRlIFxcdTAwM2NsaW51eC9raHVnZXBhZ2VkLmhcXHUwMDNlXFxubW0va2h1Z2VwYWdlZC5jLTEzLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9mcmVlemVyLmhcXHUwMDNlXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmM9MzM9ZW51bSBzY2FuX3Jlc3VsdCB7XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtNzAtXFxubW0va2h1Z2VwYWdlZC5jOjcxOnN0YXRpYyBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmtodWdlcGFnZWRfdGhyZWFkIF9fcmVhZF9tb3N0bHk7XFxubW0va2h1Z2VwYWdlZC5jOjcyOnN0YXRpYyBERUZJTkVfTVVURVgoa2h1Z2VwYWdlZF9tdXRleCk7XFxubW0va2h1Z2VwYWdlZC5jLTczLVxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTc3LSAqL1xcbm1tL2todWdlcGFnZWQuYzo3ODpzdGF0aWMgdW5zaWduZWQgaW50IGtodWdlcGFnZWRfcGFnZXNfdG9fc2NhbiBfX3JlYWRfbW9zdGx5O1xcbm1tL2todWdlcGFnZWQuYzo3OTpzdGF0aWMgdW5zaWduZWQgaW50IGtodWdlcGFnZWRfcGFnZXNfY29sbGFwc2VkO1xcbm1tL2todWdlcGFnZWQuYzo4MDpzdGF0aWMgdW5zaWduZWQgaW50IGtodWdlcGFnZWRfZnVsbF9zY2FucztcXG5tbS9raHVnZXBhZ2VkLmM6ODE6c3RhdGljIHVuc2lnbmVkIGludCBraHVnZXBhZ2VkX3NjYW5fc2xlZXBfbWlsbGlzZWNzIF9fcmVhZF9tb3N0bHkgPSAxMDAwMDtcXG5tbS9raHVnZXBhZ2VkLmMtODItLyogZHVyaW5nIGZyYWdtZW50YXRpb24gcG9sbCB0aGUgaHVnZXBhZ2UgYWxsb2NhdG9yIG9uY2UgZXZlcnkgbWludXRlICovXFxubW0va2h1Z2VwYWdlZC5jOjgzOnN0YXRpYyB1bnNpZ25lZCBpbnQga2h1Z2VwYWdlZF9hbGxvY19zbGVlcF9taWxsaXNlY3MgX19yZWFkX21vc3RseSA9IDYwMDAwO1xcbm1tL2todWdlcGFnZWQuYzo4NDpzdGF0aWMgdW5zaWduZWQgbG9uZyBraHVnZXBhZ2VkX3NsZWVwX2V4cGlyZTtcXG5tbS9raHVnZXBhZ2VkLmM6ODU6c3RhdGljIERFRklORV9TUElOTE9DSyhraHVnZXBhZ2VkX21tX2xvY2spO1xcbm1tL2todWdlcGFnZWQuYzo4NjpzdGF0aWMgREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQoa2h1Z2VwYWdlZF93YWl0KTtcXG5tbS9raHVnZXBhZ2VkLmMtODctLypcXG4tLVxcbm1tL2todWdlcGFnZWQuYy05MS0gKlxcbm1tL2todWdlcGFnZWQuYzo5MjogKiBOb3RlIHRoYXQgdGhlc2UgYXJlIG9ubHkgcmVzcGVjdGVkIGlmIGNvbGxhcHNlIHdhcyBpbml0aWF0ZWQgYnkga2h1Z2VwYWdlZC5cXG5tbS9raHVnZXBhZ2VkLmMtOTMtICovXFxubW0va2h1Z2VwYWdlZC5jLTk0LSNkZWZpbmUgS0hVR0VQQUdFRF9NQVhfUFRFU19MSU1JVCAoSFBBR0VfUE1EX05SIC0gMSlcXG5tbS9raHVnZXBhZ2VkLmM6OTU6dW5zaWduZWQgaW50IGtodWdlcGFnZWRfbWF4X3B0ZXNfbm9uZSBfX3JlYWRfbW9zdGx5O1xcbm1tL2todWdlcGFnZWQuYzo5NjpzdGF0aWMgdW5zaWduZWQgaW50IGtodWdlcGFnZWRfbWF4X3B0ZXNfc3dhcCBfX3JlYWRfbW9zdGx5O1xcbm1tL2todWdlcGFnZWQuYzo5NzpzdGF0aWMgdW5zaWduZWQgaW50IGtodWdlcGFnZWRfbWF4X3B0ZXNfc2hhcmVkIF9fcmVhZF9tb3N0bHk7XFxubW0va2h1Z2VwYWdlZC5jLTk4LVxcbi0tXFxubW0va2h1Z2VwYWdlZC5jPTEwNj1zdHJ1Y3QgY29sbGFwc2VfY29udHJvbCB7XFxubW0va2h1Z2VwYWdlZC5jOjEwNzpcXHRib29sIGlzX2todWdlcGFnZWQ7XFxubW0va2h1Z2VwYWdlZC5jLTEwOC1cXG4tLVxcbm1tL2todWdlcGFnZWQuYy0xMTEtXFxubW0va2h1Z2VwYWdlZC5jOjExMjpcXHQvKiBOdW0gcGFnZXMgc2Nhbm5lZCAoc2VlIGtodWdlcGFnZWRfcGFnZXNfdG9fc2NhbikgKi9cXG5tbS9raHVnZXBhZ2VkLmMtMTEzLVxcdHVuc2lnbmVkIGludCBwcm9ncmVzcztcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0xMjItLyoqXFxubW0va2h1Z2VwYWdlZC5jOjEyMzogKiBzdHJ1Y3Qga2h1Z2VwYWdlZF9zY2FuIC0gY3Vyc29yIGZvciBzY2FubmluZ1xcbm1tL2todWdlcGFnZWQuYy0xMjQtICogQG1tX2hlYWQ6IHRoZSBoZWFkIG9mIHRoZSBtbSBsaXN0IHRvIHNjYW5cXG4tLVxcbm1tL2todWdlcGFnZWQuYy0xMjctICpcXG5tbS9raHVnZXBhZ2VkLmM6MTI4OiAqIFRoZXJlIGlzIG9ubHkgdGhlIG9uZSBraHVnZXBhZ2VkX3NjYW4gaW5zdGFuY2Ugb2YgdGhpcyBjdXJzb3Igc3RydWN0dXJlLlxcbm1tL2todWdlcGFnZWQuYy0xMjktICovXFxubW0va2h1Z2VwYWdlZC5jOjEzMDpzdHJ1Y3Qga2h1Z2VwYWdlZF9zY2FuIHtcXG5tbS9raHVnZXBhZ2VkLmMtMTMxLVxcdHN0cnVjdCBsaXN0X2hlYWQgbW1faGVhZDtcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0xMzUtXFxubW0va2h1Z2VwYWdlZC5jOjEzNjpzdGF0aWMgc3RydWN0IGtodWdlcGFnZWRfc2NhbiBraHVnZXBhZ2VkX3NjYW4gPSB7XFxubW0va2h1Z2VwYWdlZC5jOjEzNzpcXHQubW1faGVhZCA9IExJU1RfSEVBRF9JTklUKGtodWdlcGFnZWRfc2Nhbi5tbV9oZWFkKSxcXG5tbS9raHVnZXBhZ2VkLmMtMTM4LX07XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmM9MTQxPXN0YXRpYyBzc2l6ZV90IHNjYW5fc2xlZXBfbWlsbGlzZWNzX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMTQ0LXtcXG5tbS9raHVnZXBhZ2VkLmM6MTQ1OlxcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXFxcIiV1XFxcXG5cXFwiLCBraHVnZXBhZ2VkX3NjYW5fc2xlZXBfbWlsbGlzZWNzKTtcXG5tbS9raHVnZXBhZ2VkLmMtMTQ2LX1cXG4tLVxcbm1tL2todWdlcGFnZWQuYz0xNDg9c3RhdGljIHNzaXplX3QgX19zbGVlcF9taWxsaXNlY3Nfc3RvcmUoY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQsXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMTU4LVxcdCptaWxsaXNlY3MgPSBtc2VjcztcXG5tbS9raHVnZXBhZ2VkLmM6MTU5OlxcdGtodWdlcGFnZWRfc2xlZXBfZXhwaXJlID0gMDtcXG5tbS9raHVnZXBhZ2VkLmM6MTYwOlxcdHdha2VfdXBfaW50ZXJydXB0aWJsZShcXHUwMDI2a2h1Z2VwYWdlZF93YWl0KTtcXG5tbS9raHVnZXBhZ2VkLmMtMTYxLVxcbi0tXFxubW0va2h1Z2VwYWdlZC5jPTE2NT1zdGF0aWMgc3NpemVfdCBzY2FuX3NsZWVwX21pbGxpc2Vjc19zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0xNjgte1xcbm1tL2todWdlcGFnZWQuYzoxNjk6XFx0cmV0dXJuIF9fc2xlZXBfbWlsbGlzZWNzX3N0b3JlKGJ1ZiwgY291bnQsIFxcdTAwMjZraHVnZXBhZ2VkX3NjYW5fc2xlZXBfbWlsbGlzZWNzKTtcXG5tbS9raHVnZXBhZ2VkLmMtMTcwLX1cXG4tLVxcbm1tL2todWdlcGFnZWQuYz0xNzQ9c3RhdGljIHNzaXplX3QgYWxsb2Nfc2xlZXBfbWlsbGlzZWNzX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMTc3LXtcXG5tbS9raHVnZXBhZ2VkLmM6MTc4OlxcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXFxcIiV1XFxcXG5cXFwiLCBraHVnZXBhZ2VkX2FsbG9jX3NsZWVwX21pbGxpc2Vjcyk7XFxubW0va2h1Z2VwYWdlZC5jLTE3OS19XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmM9MTgxPXN0YXRpYyBzc2l6ZV90IGFsbG9jX3NsZWVwX21pbGxpc2Vjc19zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0xODQte1xcbm1tL2todWdlcGFnZWQuYzoxODU6XFx0cmV0dXJuIF9fc2xlZXBfbWlsbGlzZWNzX3N0b3JlKGJ1ZiwgY291bnQsIFxcdTAwMjZraHVnZXBhZ2VkX2FsbG9jX3NsZWVwX21pbGxpc2Vjcyk7XFxubW0va2h1Z2VwYWdlZC5jLTE4Ni19XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmM9MTkwPXN0YXRpYyBzc2l6ZV90IHBhZ2VzX3RvX3NjYW5fc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0xOTMte1xcbm1tL2todWdlcGFnZWQuYzoxOTQ6XFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcXFwiJXVcXFxcblxcXCIsIGtodWdlcGFnZWRfcGFnZXNfdG9fc2Nhbik7XFxubW0va2h1Z2VwYWdlZC5jLTE5NS19XFxubW0va2h1Z2VwYWdlZC5jPTE5Nj1zdGF0aWMgc3NpemVfdCBwYWdlc190b19zY2FuX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTIwNi1cXG5tbS9raHVnZXBhZ2VkLmM6MjA3OlxcdGtodWdlcGFnZWRfcGFnZXNfdG9fc2NhbiA9IHBhZ2VzO1xcbm1tL2todWdlcGFnZWQuYy0yMDgtXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmM9MjE0PXN0YXRpYyBzc2l6ZV90IHBhZ2VzX2NvbGxhcHNlZF9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTIxNy17XFxubW0va2h1Z2VwYWdlZC5jOjIxODpcXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFxcXCIldVxcXFxuXFxcIiwga2h1Z2VwYWdlZF9wYWdlc19jb2xsYXBzZWQpO1xcbm1tL2todWdlcGFnZWQuYy0yMTktfVxcbi0tXFxubW0va2h1Z2VwYWdlZC5jPTIyMz1zdGF0aWMgc3NpemVfdCBmdWxsX3NjYW5zX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMjI2LXtcXG5tbS9raHVnZXBhZ2VkLmM6MjI3OlxcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXFxcIiV1XFxcXG5cXFwiLCBraHVnZXBhZ2VkX2Z1bGxfc2NhbnMpO1xcbm1tL2todWdlcGFnZWQuYy0yMjgtfVxcbi0tXFxubW0va2h1Z2VwYWdlZC5jPTIzOD1zdGF0aWMgc3NpemVfdCBkZWZyYWdfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMjQ0LX1cXG5tbS9raHVnZXBhZ2VkLmM6MjQ1OnN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUga2h1Z2VwYWdlZF9kZWZyYWdfYXR0ciA9XFxubW0va2h1Z2VwYWdlZC5jLTI0Ni1cXHRfX0FUVFJfUlcoZGVmcmFnKTtcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0yNDgtLypcXG5tbS9raHVnZXBhZ2VkLmM6MjQ5OiAqIG1heF9wdGVzX25vbmUgY29udHJvbHMgaWYga2h1Z2VwYWdlZCBzaG91bGQgY29sbGFwc2UgaHVnZXBhZ2VzIG92ZXJcXG5tbS9raHVnZXBhZ2VkLmMtMjUwLSAqIGFueSB1bm1hcHBlZCBwdGVzIGluIHR1cm4gcG90ZW50aWFsbHkgaW5jcmVhc2luZyB0aGUgbWVtb3J5XFxubW0va2h1Z2VwYWdlZC5jOjI1MTogKiBmb290cHJpbnQgb2YgdGhlIHZtYXMuIFdoZW4gbWF4X3B0ZXNfbm9uZSBpcyAwIGtodWdlcGFnZWQgd2lsbCBub3RcXG5tbS9raHVnZXBhZ2VkLmMtMjUyLSAqIHJlZHVjZSB0aGUgYXZhaWxhYmxlIGZyZWUgbWVtb3J5IGluIHRoZSBzeXN0ZW0gYXMgaXRcXG5tbS9raHVnZXBhZ2VkLmMtMjUzLSAqIHJ1bnMuIEluY3JlYXNpbmcgbWF4X3B0ZXNfbm9uZSB3aWxsIGluc3RlYWQgcG90ZW50aWFsbHkgcmVkdWNlIHRoZVxcbm1tL2todWdlcGFnZWQuYzoyNTQ6ICogZnJlZSBtZW1vcnkgaW4gdGhlIHN5c3RlbSBkdXJpbmcgdGhlIGtodWdlcGFnZWQgc2Nhbi5cXG5tbS9raHVnZXBhZ2VkLmMtMjU1LSAqL1xcbm1tL2todWdlcGFnZWQuYz0yNTY9c3RhdGljIHNzaXplX3QgbWF4X3B0ZXNfbm9uZV9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTI1OS17XFxubW0va2h1Z2VwYWdlZC5jOjI2MDpcXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFxcXCIldVxcXFxuXFxcIiwga2h1Z2VwYWdlZF9tYXhfcHRlc19ub25lKTtcXG5tbS9raHVnZXBhZ2VkLmMtMjYxLX1cXG5tbS9raHVnZXBhZ2VkLmM9MjYyPXN0YXRpYyBzc2l6ZV90IG1heF9wdGVzX25vbmVfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMjcyLVxcbm1tL2todWdlcGFnZWQuYzoyNzM6XFx0a2h1Z2VwYWdlZF9tYXhfcHRlc19ub25lID0gbWF4X3B0ZXNfbm9uZTtcXG5tbS9raHVnZXBhZ2VkLmMtMjc0LVxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTI3Ni19XFxubW0va2h1Z2VwYWdlZC5jOjI3NzpzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGtodWdlcGFnZWRfbWF4X3B0ZXNfbm9uZV9hdHRyID1cXG5tbS9raHVnZXBhZ2VkLmMtMjc4LVxcdF9fQVRUUl9SVyhtYXhfcHRlc19ub25lKTtcXG4tLVxcbm1tL2todWdlcGFnZWQuYz0yODA9c3RhdGljIHNzaXplX3QgbWF4X3B0ZXNfc3dhcF9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTI4My17XFxubW0va2h1Z2VwYWdlZC5jOjI4NDpcXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFxcXCIldVxcXFxuXFxcIiwga2h1Z2VwYWdlZF9tYXhfcHRlc19zd2FwKTtcXG5tbS9raHVnZXBhZ2VkLmMtMjg1LX1cXG4tLVxcbm1tL2todWdlcGFnZWQuYz0yODc9c3RhdGljIHNzaXplX3QgbWF4X3B0ZXNfc3dhcF9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0yOTctXFxubW0va2h1Z2VwYWdlZC5jOjI5ODpcXHRraHVnZXBhZ2VkX21heF9wdGVzX3N3YXAgPSBtYXhfcHRlc19zd2FwO1xcbm1tL2todWdlcGFnZWQuYy0yOTktXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMzAyLVxcbm1tL2todWdlcGFnZWQuYzozMDM6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBraHVnZXBhZ2VkX21heF9wdGVzX3N3YXBfYXR0ciA9XFxubW0va2h1Z2VwYWdlZC5jLTMwNC1cXHRfX0FUVFJfUlcobWF4X3B0ZXNfc3dhcCk7XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmM9MzA2PXN0YXRpYyBzc2l6ZV90IG1heF9wdGVzX3NoYXJlZF9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTMwOS17XFxubW0va2h1Z2VwYWdlZC5jOjMxMDpcXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFxcXCIldVxcXFxuXFxcIiwga2h1Z2VwYWdlZF9tYXhfcHRlc19zaGFyZWQpO1xcbm1tL2todWdlcGFnZWQuYy0zMTEtfVxcbi0tXFxubW0va2h1Z2VwYWdlZC5jPTMxMz1zdGF0aWMgc3NpemVfdCBtYXhfcHRlc19zaGFyZWRfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMzIzLVxcbm1tL2todWdlcGFnZWQuYzozMjQ6XFx0a2h1Z2VwYWdlZF9tYXhfcHRlc19zaGFyZWQgPSBtYXhfcHRlc19zaGFyZWQ7XFxubW0va2h1Z2VwYWdlZC5jLTMyNS1cXG4tLVxcbm1tL2todWdlcGFnZWQuYy0zMjgtXFxubW0va2h1Z2VwYWdlZC5jOjMyOTpzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGtodWdlcGFnZWRfbWF4X3B0ZXNfc2hhcmVkX2F0dHIgPVxcbm1tL2todWdlcGFnZWQuYy0zMzAtXFx0X19BVFRSX1JXKG1heF9wdGVzX3NoYXJlZCk7XFxubW0va2h1Z2VwYWdlZC5jLTMzMS1cXG5tbS9raHVnZXBhZ2VkLmM6MzMyOnN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpraHVnZXBhZ2VkX2F0dHJbXSA9IHtcXG5tbS9raHVnZXBhZ2VkLmM6MzMzOlxcdFxcdTAwMjZraHVnZXBhZ2VkX2RlZnJhZ19hdHRyLmF0dHIsXFxubW0va2h1Z2VwYWdlZC5jOjMzNDpcXHRcXHUwMDI2a2h1Z2VwYWdlZF9tYXhfcHRlc19ub25lX2F0dHIuYXR0cixcXG5tbS9raHVnZXBhZ2VkLmM6MzM1OlxcdFxcdTAwMjZraHVnZXBhZ2VkX21heF9wdGVzX3N3YXBfYXR0ci5hdHRyLFxcbm1tL2todWdlcGFnZWQuYzozMzY6XFx0XFx1MDAyNmtodWdlcGFnZWRfbWF4X3B0ZXNfc2hhcmVkX2F0dHIuYXR0cixcXG5tbS9raHVnZXBhZ2VkLmMtMzM3LVxcdFxcdTAwMjZwYWdlc190b19zY2FuX2F0dHIuYXR0cixcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0zNDQtXFxubW0va2h1Z2VwYWdlZC5jOjM0NTpzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGtodWdlcGFnZWRfYXR0cl9ncm91cCA9IHtcXG5tbS9raHVnZXBhZ2VkLmM6MzQ2OlxcdC5hdHRycyA9IGtodWdlcGFnZWRfYXR0cixcXG5tbS9raHVnZXBhZ2VkLmM6MzQ3OlxcdC5uYW1lID0gXFxcImtodWdlcGFnZWRcXFwiLFxcbm1tL2todWdlcGFnZWQuYy0zNDgtfTtcXG4tLVxcbm1tL2todWdlcGFnZWQuYz0zNjc9c3RhdGljIHVuc2lnbmVkIGludCBjb2xsYXBzZV9tYXhfcHRlc19ub25lKHN0cnVjdCBjb2xsYXBzZV9jb250cm9sICpjYyxcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0zNjkte1xcbm1tL2todWdlcGFnZWQuYzozNzA6XFx0Y29uc3QgdW5zaWduZWQgaW50IG1heF9wdGVzX25vbmUgPSBraHVnZXBhZ2VkX21heF9wdGVzX25vbmU7XFxubW0va2h1Z2VwYWdlZC5jLTM3MS1cXG4tLVxcbm1tL2todWdlcGFnZWQuYy0zNzQtXFx0LyogZm9yIE1BRFZfQ09MTEFQU0UsIGFsbG93IGFueSBlbXB0eS9zaGFyZWQgemVyb3BhZ2UgUFRFcyAqL1xcbm1tL2todWdlcGFnZWQuYzozNzU6XFx0aWYgKCFjYy1cXHUwMDNlaXNfa2h1Z2VwYWdlZClcXG5tbS9raHVnZXBhZ2VkLmMtMzc2LVxcdFxcdHJldHVybiBIUEFHRV9QTURfTlI7XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmM9NDA2PXN0YXRpYyB1bnNpZ25lZCBpbnQgY29sbGFwc2VfbWF4X3B0ZXNfc2hhcmVkKHN0cnVjdCBjb2xsYXBzZV9jb250cm9sICpjYyxcXG4tLVxcbm1tL2todWdlcGFnZWQuYy00MTItXFx0ICovXFxubW0va2h1Z2VwYWdlZC5jOjQxMzpcXHRpZiAoIWNjLVxcdTAwM2Vpc19raHVnZXBhZ2VkKVxcbm1tL2todWdlcGFnZWQuYy00MTQtXFx0XFx0cmV0dXJuIEhQQUdFX1BNRF9OUjtcXG4tLVxcbm1tL2todWdlcGFnZWQuYy00MjEtXFx0LyogZm9yIFBNRCBjb2xsYXBzZSwgcmVzcGVjdCB0aGUgdXNlciBkZWZpbmVkIG1heGltdW0gKi9cXG5tbS9raHVnZXBhZ2VkLmM6NDIyOlxcdHJldHVybiBraHVnZXBhZ2VkX21heF9wdGVzX3NoYXJlZDtcXG5tbS9raHVnZXBhZ2VkLmMtNDIzLX1cXG4tLVxcbm1tL2todWdlcGFnZWQuYz00MzQ9c3RhdGljIHVuc2lnbmVkIGludCBjb2xsYXBzZV9tYXhfcHRlc19zd2FwKHN0cnVjdCBjb2xsYXBzZV9jb250cm9sICpjYyxcXG4tLVxcbm1tL2todWdlcGFnZWQuYy00NDAtXFx0ICovXFxubW0va2h1Z2VwYWdlZC5jOjQ0MTpcXHRpZiAoIWNjLVxcdTAwM2Vpc19raHVnZXBhZ2VkKVxcbm1tL2todWdlcGFnZWQuYy00NDItXFx0XFx0cmV0dXJuIEhQQUdFX1BNRF9OUjtcXG4tLVxcbm1tL2todWdlcGFnZWQuYy00NDYtXFx0LyogZm9yIFBNRCBjb2xsYXBzZSwgcmVzcGVjdCB0aGUgdXNlciBkZWZpbmVkIG1heGltdW0gKi9cXG5tbS9raHVnZXBhZ2VkLmM6NDQ3OlxcdHJldHVybiBraHVnZXBhZ2VkX21heF9wdGVzX3N3YXA7XFxubW0va2h1Z2VwYWdlZC5jLTQ0OC19XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmM9NDUwPWludCBodWdlcGFnZV9tYWR2aXNlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTQ2MS1cXHRcXHQvKlxcbm1tL2todWdlcGFnZWQuYzo0NjI6XFx0XFx0ICogU2V0dGluZyBWTV9OT0hVR0VQQUdFIHdpbGwgcHJldmVudCBraHVnZXBhZ2VkIGZyb20gc2Nhbm5pbmdcXG5tbS9raHVnZXBhZ2VkLmM6NDYzOlxcdFxcdCAqIHRoaXMgdm1hIGV2ZW4gaWYgd2UgbGVhdmUgdGhlIG1tIHJlZ2lzdGVyZWQgaW4ga2h1Z2VwYWdlZCBpZlxcbm1tL2todWdlcGFnZWQuYy00NjQtXFx0XFx0ICogaXQgZ290IHJlZ2lzdGVyZWQgYmVmb3JlIFZNX05PSFVHRVBBR0Ugd2FzIHNldC5cXG4tLVxcbm1tL2todWdlcGFnZWQuYy00NzEtXFxubW0va2h1Z2VwYWdlZC5jOjQ3MjppbnQgX19pbml0IGtodWdlcGFnZWRfaW5pdCh2b2lkKVxcbm1tL2todWdlcGFnZWQuYy00NzMte1xcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTQ3Ny1cXG5tbS9raHVnZXBhZ2VkLmM6NDc4OlxcdGtodWdlcGFnZWRfcGFnZXNfdG9fc2NhbiA9IEhQQUdFX1BNRF9OUiAqIDg7XFxubW0va2h1Z2VwYWdlZC5jOjQ3OTpcXHRraHVnZXBhZ2VkX21heF9wdGVzX25vbmUgPSBLSFVHRVBBR0VEX01BWF9QVEVTX0xJTUlUO1xcbm1tL2todWdlcGFnZWQuYzo0ODA6XFx0a2h1Z2VwYWdlZF9tYXhfcHRlc19zd2FwID0gSFBBR0VfUE1EX05SIC8gODtcXG5tbS9raHVnZXBhZ2VkLmM6NDgxOlxcdGtodWdlcGFnZWRfbWF4X3B0ZXNfc2hhcmVkID0gSFBBR0VfUE1EX05SIC8gMjtcXG5tbS9raHVnZXBhZ2VkLmMtNDgyLVxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTQ4NS1cXG5tbS9raHVnZXBhZ2VkLmM6NDg2OnZvaWQgX19pbml0IGtodWdlcGFnZWRfZGVzdHJveSh2b2lkKVxcbm1tL2todWdlcGFnZWQuYy00ODcte1xcbi0tXFxubW0va2h1Z2VwYWdlZC5jPTUxND1zdGF0aWMgYm9vbCBodWdlcGFnZV9lbmFibGVkKHZvaWQpXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtNTMxLVxcbm1tL2todWdlcGFnZWQuYzo1MzI6dm9pZCBfX2todWdlcGFnZWRfZW50ZXIoc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxubW0va2h1Z2VwYWdlZC5jLTUzMy17XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtNTM2LVxcbm1tL2todWdlcGFnZWQuYzo1Mzc6XFx0LyogX19raHVnZXBhZ2VkX2V4aXQoKSBtdXN0IG5vdCBydW4gZnJvbSB1bmRlciB1cyAqL1xcbm1tL2todWdlcGFnZWQuYy01MzgtXFx0Vk1fQlVHX09OX01NKGNvbGxhcHNlX3Rlc3RfZXhpdChtbSksIG1tKTtcXG4tLVxcbm1tL2todWdlcGFnZWQuYy01NDgtXFxubW0va2h1Z2VwYWdlZC5jOjU0OTpcXHRzcGluX2xvY2soXFx1MDAyNmtodWdlcGFnZWRfbW1fbG9jayk7XFxubW0va2h1Z2VwYWdlZC5jLTU1MC1cXHRtbV9zbG90X2luc2VydChtbV9zbG90c19oYXNoLCBtbSwgc2xvdCk7XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtNTU0LVxcdCAqL1xcbm1tL2todWdlcGFnZWQuYzo1NTU6XFx0d2FrZXVwID0gbGlzdF9lbXB0eShcXHUwMDI2a2h1Z2VwYWdlZF9zY2FuLm1tX2hlYWQpO1xcbm1tL2todWdlcGFnZWQuYzo1NTY6XFx0bGlzdF9hZGRfdGFpbChcXHUwMDI2c2xvdC1cXHUwMDNlbW1fbm9kZSwgXFx1MDAyNmtodWdlcGFnZWRfc2Nhbi5tbV9oZWFkKTtcXG5tbS9raHVnZXBhZ2VkLmM6NTU3OlxcdHNwaW5fdW5sb2NrKFxcdTAwMjZraHVnZXBhZ2VkX21tX2xvY2spO1xcbm1tL2todWdlcGFnZWQuYy01NTgtXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtNTYwLVxcdGlmICh3YWtldXApXFxubW0va2h1Z2VwYWdlZC5jOjU2MTpcXHRcXHR3YWtlX3VwX2ludGVycnVwdGlibGUoXFx1MDAyNmtodWdlcGFnZWRfd2FpdCk7XFxubW0va2h1Z2VwYWdlZC5jLTU2Mi19XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmM9NTY4PXN0YXRpYyB1bnNpZ25lZCBsb25nIGNvbGxhcHNlX3Bvc3NpYmxlX29yZGVycyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL2todWdlcGFnZWQuYy01NzItXFxubW0va2h1Z2VwYWdlZC5jOjU3MzpcXHQvKiBJZiBraHVnZXBhZ2VkIGlzIHNjYW5uaW5nIGFuIGFub255bW91cyB2bWEsIGFsbG93IG1USFAgY29sbGFwc2UgKi9cXG5tbS9raHVnZXBhZ2VkLmMtNTc0LVxcdGlmICgodHZhX2ZsYWdzID09IFRWQV9LSFVHRVBBR0VEKSBcXHUwMDI2XFx1MDAyNiB2bWFfaXNfYW5vbnltb3VzKHZtYSkpXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmM9NTgyPXN0YXRpYyBib29sIGNvbGxhcHNlX3Bvc3NpYmxlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTU4Ny1cXG5tbS9raHVnZXBhZ2VkLmM6NTg4OnZvaWQga2h1Z2VwYWdlZF9lbnRlcl92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxubW0va2h1Z2VwYWdlZC5jLTU4OS1cXHRcXHRcXHQgIHZtX2ZsYWdzX3Qgdm1fZmxhZ3MpXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtNTkyLVxcdCAgICBcXHUwMDI2XFx1MDAyNiBjb2xsYXBzZV9wb3NzaWJsZSh2bWEsIHZtX2ZsYWdzLCBUVkFfS0hVR0VQQUdFRCkpXFxubW0va2h1Z2VwYWdlZC5jOjU5MzpcXHRcXHRfX2todWdlcGFnZWRfZW50ZXIodm1hLVxcdTAwM2V2bV9tbSk7XFxubW0va2h1Z2VwYWdlZC5jLTU5NC19XFxubW0va2h1Z2VwYWdlZC5jLTU5NS1cXG5tbS9raHVnZXBhZ2VkLmM6NTk2OnZvaWQgX19raHVnZXBhZ2VkX2V4aXQoc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxubW0va2h1Z2VwYWdlZC5jLTU5Ny17XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtNjAwLVxcbm1tL2todWdlcGFnZWQuYzo2MDE6XFx0c3Bpbl9sb2NrKFxcdTAwMjZraHVnZXBhZ2VkX21tX2xvY2spO1xcbm1tL2todWdlcGFnZWQuYy02MDItXFx0c2xvdCA9IG1tX3Nsb3RfbG9va3VwKG1tX3Nsb3RzX2hhc2gsIG1tKTtcXG5tbS9raHVnZXBhZ2VkLmM6NjAzOlxcdGlmIChzbG90IFxcdTAwMjZcXHUwMDI2IGtodWdlcGFnZWRfc2Nhbi5tbV9zbG90ICE9IHNsb3QpIHtcXG5tbS9raHVnZXBhZ2VkLmMtNjA0LVxcdFxcdG1tX3Nsb3RfcmVtb3ZlKHNsb3QpO1xcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTYwNi1cXHR9XFxubW0va2h1Z2VwYWdlZC5jOjYwNzpcXHRzcGluX3VubG9jayhcXHUwMDI2a2h1Z2VwYWdlZF9tbV9sb2NrKTtcXG5tbS9raHVnZXBhZ2VkLmMtNjA4LVxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTYxNy1cXHRcXHQgKiB1bmRlciBtbWFwX2xvY2sgcmVhZCBtb2RlKS4gU3RvcCBoZXJlIChhZnRlciB3ZSByZXR1cm4gYWxsXFxubW0va2h1Z2VwYWdlZC5jOjYxODpcXHRcXHQgKiBwYWdldGFibGVzIHdpbGwgYmUgZGVzdHJveWVkKSB1bnRpbCBraHVnZXBhZ2VkIGhhcyBmaW5pc2hlZFxcbm1tL2todWdlcGFnZWQuYy02MTktXFx0XFx0ICogd29ya2luZyBvbiB0aGUgcGFnZXRhYmxlcyB1bmRlciB0aGUgbW1hcF9sb2NrLlxcbi0tXFxubW0va2h1Z2VwYWdlZC5jPTY4Nz1zdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBfX2NvbGxhcHNlX2h1Z2VfcGFnZV9pc29sYXRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTczMy1cXHRcXHQgKi9cXG5tbS9raHVnZXBhZ2VkLmM6NzM0OlxcdFxcdGlmIChjYy1cXHUwMDNlaXNfa2h1Z2VwYWdlZCBcXHUwMDI2XFx1MDAyNiAhKHZtYS1cXHUwMDNldm1fZmxhZ3MgXFx1MDAyNiBWTV9EUk9QUEFCTEUpIFxcdTAwMjZcXHUwMDI2XFxubW0va2h1Z2VwYWdlZC5jLTczNS1cXHRcXHQgICAgZm9saW9fdGVzdF9sYXp5ZnJlZShmb2xpbykgXFx1MDAyNlxcdTAwMjYgIXB0ZV9kaXJ0eShwdGV2YWwpKSB7XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtODIyLW5leHQ6XFxubW0va2h1Z2VwYWdlZC5jOjgyMzpcXHRcXHRpZiAoY2MtXFx1MDAzZWlzX2todWdlcGFnZWQgXFx1MDAyNlxcdTAwMjZcXG5tbS9raHVnZXBhZ2VkLmMtODI0LVxcdFxcdCAgICBmb2xpb19wdGVfcmVmZXJlbmNlZChmb2xpbywgdm1hLCBhZGRyLCBwdGV2YWwpKVxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTgyNy1cXG5tbS9raHVnZXBhZ2VkLmM6ODI4OlxcdGlmICh1bmxpa2VseShjYy1cXHUwMDNlaXNfa2h1Z2VwYWdlZCBcXHUwMDI2XFx1MDAyNiAhcmVmZXJlbmNlZCkpIHtcXG5tbS9raHVnZXBhZ2VkLmMtODI5LVxcdFxcdHJlc3VsdCA9IFNDQU5fTEFDS19SRUZFUkVOQ0VEX1BBR0U7XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmM9OTQ1PXN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IF9fY29sbGFwc2VfaHVnZV9wYWdlX2NvcHkocHRlX3QgKnB0ZSwgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbm1tL2todWdlcGFnZWQuYy05ODMtXFxubW0va2h1Z2VwYWdlZC5jOjk4NDpzdGF0aWMgdm9pZCBraHVnZXBhZ2VkX2FsbG9jX3NsZWVwKHZvaWQpXFxubW0va2h1Z2VwYWdlZC5jLTk4NS17XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtOTg3LVxcbm1tL2todWdlcGFnZWQuYzo5ODg6XFx0YWRkX3dhaXRfcXVldWUoXFx1MDAyNmtodWdlcGFnZWRfd2FpdCwgXFx1MDAyNndhaXQpO1xcbm1tL2todWdlcGFnZWQuYy05ODktXFx0X19zZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEV8VEFTS19GUkVFWkFCTEUpO1xcbm1tL2todWdlcGFnZWQuYzo5OTA6XFx0c2NoZWR1bGVfdGltZW91dChtc2Vjc190b19qaWZmaWVzKGtodWdlcGFnZWRfYWxsb2Nfc2xlZXBfbWlsbGlzZWNzKSk7XFxubW0va2h1Z2VwYWdlZC5jOjk5MTpcXHRyZW1vdmVfd2FpdF9xdWV1ZShcXHUwMDI2a2h1Z2VwYWdlZF93YWl0LCBcXHUwMDI2d2FpdCk7XFxubW0va2h1Z2VwYWdlZC5jLTk5Mi19XFxubW0va2h1Z2VwYWdlZC5jLTk5My1cXG5tbS9raHVnZXBhZ2VkLmM6OTk0OnN0YXRpYyBzdHJ1Y3QgY29sbGFwc2VfY29udHJvbCBraHVnZXBhZ2VkX2NvbGxhcHNlX2NvbnRyb2wgPSB7XFxubW0va2h1Z2VwYWdlZC5jOjk5NTpcXHQuaXNfa2h1Z2VwYWdlZCA9IHRydWUsXFxubW0va2h1Z2VwYWdlZC5jLTk5Ni19O1xcbi0tXFxubW0va2h1Z2VwYWdlZC5jPTk5OD1zdGF0aWMgYm9vbCBjb2xsYXBzZV9zY2FuX2Fib3J0KGludCBuaWQsIHN0cnVjdCBjb2xsYXBzZV9jb250cm9sICpjYylcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0xMDIxLVxcbm1tL2todWdlcGFnZWQuYzoxMDIyOiNkZWZpbmUga2h1Z2VwYWdlZF9kZWZyYWcoKVxcdFxcdFxcdFxcdFxcdFxcXFxcXG5tbS9raHVnZXBhZ2VkLmMtMTAyMy1cXHQodHJhbnNwYXJlbnRfaHVnZXBhZ2VfZmxhZ3MgXFx1MDAyNlxcdFxcdFxcdFxcdFxcXFxcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0xMDI1LVxcbm1tL2todWdlcGFnZWQuYzoxMDI2Oi8qIERlZnJhZyBmb3Iga2h1Z2VwYWdlZCB3aWxsIGVudGVyIGRpcmVjdCByZWNsYWltL2NvbXBhY3Rpb24gaWYgbmVjZXNzYXJ5ICovXFxubW0va2h1Z2VwYWdlZC5jOjEwMjc6c3RhdGljIGlubGluZSBnZnBfdCBhbGxvY19odWdlcGFnZV9raHVnZXBhZ2VkX2dmcG1hc2sodm9pZClcXG5tbS9raHVnZXBhZ2VkLmMtMTAyOC17XFxubW0va2h1Z2VwYWdlZC5jOjEwMjk6XFx0cmV0dXJuIGtodWdlcGFnZWRfZGVmcmFnKCkgPyBHRlBfVFJBTlNIVUdFIDogR0ZQX1RSQU5TSFVHRV9MSUdIVDtcXG5tbS9raHVnZXBhZ2VkLmMtMTAzMC19XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmM9MTA2ND1zdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBodWdlcGFnZV92bWFfcmV2YWxpZGF0ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTEwNjgtXFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7XFxubW0va2h1Z2VwYWdlZC5jOjEwNjk6XFx0ZW51bSB0dmFfdHlwZSB0eXBlID0gY2MtXFx1MDAzZWlzX2todWdlcGFnZWQgPyBUVkFfS0hVR0VQQUdFRCA6XFxubW0va2h1Z2VwYWdlZC5jLTEwNzAtXFx0XFx0XFx0XFx0IFRWQV9GT1JDRURfQ09MTEFQU0U7XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMTA5MS1cXHQgKiBBbm9uIFZNQSBleHBlY3RlZCwgdGhlIGFkZHJlc3MgbWF5IGJlIHVubWFwcGVkIHRoZW5cXG5tbS9raHVnZXBhZ2VkLmM6MTA5MjpcXHQgKiByZW1hcHBlZCB0byBmaWxlIGFmdGVyIGtodWdlcGFnZWQgcmVhY3F1aXJlZCB0aGUgbW1hcF9sb2NrLlxcbm1tL2todWdlcGFnZWQuYy0xMDkzLVxcdCAqXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmM9MTEwMj1zdGF0aWMgaW5saW5lIGVudW0gc2Nhbl9yZXN1bHQgY2hlY2tfcG1kX3N0YXRlKHBtZF90ICpwbWQpXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMTEwOS1cXHQvKlxcbm1tL2todWdlcGFnZWQuYzoxMTEwOlxcdCAqIFRoZSBmb2xpbyBtYXkgYmUgdW5kZXIgbWlncmF0aW9uIHdoZW4ga2h1Z2VwYWdlZCBpcyB0cnlpbmcgdG9cXG5tbS9raHVnZXBhZ2VkLmMtMTExMS1cXHQgKiBjb2xsYXBzZSBpdC4gTWlncmF0aW9uIHN1Y2Nlc3Mgb3IgZmFpbHVyZSB3aWxsIGV2ZW50dWFsbHkgZW5kXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmM9MTI1MD1zdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBhbGxvY19jaGFyZ2VfZm9saW8oc3RydWN0IGZvbGlvICoqZm9saW9wLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0xMjUyLXtcXG5tbS9raHVnZXBhZ2VkLmM6MTI1MzpcXHRnZnBfdCBnZnAgPSAoY2MtXFx1MDAzZWlzX2todWdlcGFnZWQgPyBhbGxvY19odWdlcGFnZV9raHVnZXBhZ2VkX2dmcG1hc2soKSA6XFxubW0va2h1Z2VwYWdlZC5jLTEyNTQtXFx0XFx0ICAgICBHRlBfVFJBTlNIVUdFKTtcXG4tLVxcbm1tL2todWdlcGFnZWQuYz0xNjAwPXN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGNvbGxhcHNlX3NjYW5fcG1kKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTE2MDYtXFx0dW5zaWduZWQgaW50IG1heF9wdGVzX25vbmUgPSBjb2xsYXBzZV9tYXhfcHRlc19ub25lKGNjLCB2bWEsIEhQQUdFX1BNRF9PUkRFUik7XFxubW0va2h1Z2VwYWdlZC5jOjE2MDc6XFx0ZW51bSB0dmFfdHlwZSB0dmFfZmxhZ3MgPSBjYy1cXHUwMDNlaXNfa2h1Z2VwYWdlZCA/IFRWQV9LSFVHRVBBR0VEIDogVFZBX0ZPUkNFRF9DT0xMQVBTRTtcXG5tbS9raHVnZXBhZ2VkLmMtMTYwOC1cXHRwbWRfdCAqcG1kO1xcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTE3MDUtXFx0XFx0ICovXFxubW0va2h1Z2VwYWdlZC5jOjE3MDY6XFx0XFx0aWYgKGNjLVxcdTAwM2Vpc19raHVnZXBhZ2VkIFxcdTAwMjZcXHUwMDI2ICEodm1hLVxcdTAwM2V2bV9mbGFncyBcXHUwMDI2IFZNX0RST1BQQUJMRSkgXFx1MDAyNlxcdTAwMjZcXG5tbS9raHVnZXBhZ2VkLmMtMTcwNy1cXHRcXHQgICAgZm9saW9fdGVzdF9sYXp5ZnJlZShmb2xpbykgXFx1MDAyNlxcdTAwMjYgIXB0ZV9kaXJ0eShwdGV2YWwpKSB7XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMTc2NC1cXG5tbS9raHVnZXBhZ2VkLmM6MTc2NTpcXHRcXHRpZiAoY2MtXFx1MDAzZWlzX2todWdlcGFnZWQgXFx1MDAyNlxcdTAwMjZcXG5tbS9raHVnZXBhZ2VkLmMtMTc2Ni1cXHRcXHQgICAgZm9saW9fcHRlX3JlZmVyZW5jZWQoZm9saW8sIHZtYSwgYWRkciwgcHRldmFsKSlcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0xNzY4LVxcdH1cXG5tbS9raHVnZXBhZ2VkLmM6MTc2OTpcXHRpZiAoY2MtXFx1MDAzZWlzX2todWdlcGFnZWQgXFx1MDAyNlxcdTAwMjZcXG5tbS9raHVnZXBhZ2VkLmMtMTc3MC1cXHRcXHQgICAoIXJlZmVyZW5jZWQgfHxcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0xNzg2LW91dDpcXG5tbS9raHVnZXBhZ2VkLmM6MTc4NzpcXHR0cmFjZV9tbV9raHVnZXBhZ2VkX3NjYW5fcG1kKG1tLCBmb2xpbywgcmVmZXJlbmNlZCxcXG5tbS9raHVnZXBhZ2VkLmMtMTc4OC1cXHRcXHRcXHRcXHQgICAgIG5vbmVfb3JfemVybywgcmVzdWx0LCB1bm1hcHBlZCk7XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmM9MTc5Mj1zdGF0aWMgdm9pZCBjb2xsZWN0X21tX3Nsb3Qoc3RydWN0IG1tX3Nsb3QgKnNsb3QpXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMTc5NS1cXG5tbS9raHVnZXBhZ2VkLmM6MTc5NjpcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZraHVnZXBhZ2VkX21tX2xvY2spO1xcbm1tL2todWdlcGFnZWQuYy0xNzk3LVxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTE4MDctXFxubW0va2h1Z2VwYWdlZC5jOjE4MDg6XFx0XFx0Lyoga2h1Z2VwYWdlZF9tbV9sb2NrIGFjdHVhbGx5IG5vdCBuZWNlc3NhcnkgZm9yIHRoZSBiZWxvdyAqL1xcbm1tL2todWdlcGFnZWQuYy0xODA5LVxcdFxcdG1tX3Nsb3RfZnJlZShtbV9zbG90X2NhY2hlLCBzbG90KTtcXG4tLVxcbm1tL2todWdlcGFnZWQuYz0yMjQ5PXN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IGNvbGxhcHNlX2ZpbGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0yMzU3LVxcdFxcdFxcdFxcdCAqIFRyaWdnZXIgYXN5bmMgZmx1c2ggZm9yIHJlYWQtb25seSBmaWxlcyBhbmRcXG5tbS9raHVnZXBhZ2VkLmM6MjM1ODpcXHRcXHRcXHRcXHQgKiBob3BlIHRoZSB3cml0ZWJhY2sgaXMgZG9uZSB3aGVuIGtodWdlcGFnZWRcXG5tbS9raHVnZXBhZ2VkLmMtMjM1OS1cXHRcXHRcXHRcXHQgKiByZXZpc2l0cyB0aGlzIHBhZ2UuIFdyaXRhYmxlIGZpbGVzIGNhbiBoYXZlXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMjQxNC1cXHRcXHRcXHQvKlxcblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwMjo0ODozOC4xODM5OTM5M1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNDk1Nzg3NTEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgdGhlIFRyYW5zcGFyZW50IEh1Z2VwYWdlIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGhvdyB0cmFuc3BhcmVudCBodWdlcGFnZXMgYXJlIGhhbmRsZWQsIHN0YXJ0aW5nIHdpdGggYGtodWdlcGFnZWQuY2AuIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCB0aGUgcHJlc2VuY2Ugb2YgdGhhdCBmaWxlIGluIHRoZSBjb21waWxhdGlvbiBwcm9jZXNzIGlzIGRpcmVjdGx5IHRpZWQgdG8gdGhlIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbi4gTWFrZXMgc2Vuc2UuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHVzZXJmYXVsdGZkIHBsYXlzIGEgcGFydCBpbiB0aGlzLiBJJ20gZ29pbmcgdG8gbG9vayBhdCBgdXNlcmZhdWx0ZmRfbWlub3JgIGFuZCB0aGUgYFVTRVJGQVVMVEZEYCBjb25zdGFudC4gSSdsbCBuZWVkIHRvIGxvY2F0ZSB3aGVyZSBgdXNlcmZhdWx0ZmRfbWlub3JgIGlzIGRlZmluZWQuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGhhbmRsZSBvbiB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBodWdlcGFnZXMgYW5kIHVzZXJmYXVsdCBoYW5kbGluZywgd2hpY2ggSSdtIHN1cmUgd2lsbCBpbmZvcm0gdGhlIHJlc3Qgb2YgbXkgaW52ZXN0aWdhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjEzNTUsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwMjo0ODo0MS42Nzk3ODM0ODNaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExODU0NTU5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1c2VyZmF1bHRmZF9taW5vclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaD0yMTI9c3RhdGljIGlubGluZSBib29sIHVzZXJmYXVsdGZkX3dwKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbi0tXFxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmgtMjE2LVxcbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oOjIxNzpzdGF0aWMgaW5saW5lIGJvb2wgdXNlcmZhdWx0ZmRfbWlub3Ioc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmgtMjE4LXtcXG4tLVxcbmluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oPTM2MT1zdGF0aWMgaW5saW5lIGJvb2wgdXNlcmZhdWx0ZmRfd3Aoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaC0zNjUtXFxuaW5jbHVkZS9saW51eC91c2VyZmF1bHRmZF9rLmg6MzY2OnN0YXRpYyBpbmxpbmUgYm9vbCB1c2VyZmF1bHRmZF9taW5vcihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG5pbmNsdWRlL2xpbnV4L3VzZXJmYXVsdGZkX2suaC0zNjcte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwMjo0ODo0MS43OTgzMzM1NjFaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTAzNTY4Mjg1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyBVc2VyZmF1bHRmZCBLZXJuZWwgSGVhZGVyKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIGRpdmUgaW50byBzb21lIGB1c2VyZmF1bHRmZGAgY29kZS4gQmFzZWQgb24gdGhlIHByb2JsZW0gZGVzY3JpcHRpb24sIEknbSB0aGlua2luZyB0aGUgaXNzdWUgbWlnaHQgYmUgcmVsYXRlZCB0byB0aGUgY29yZSBoYW5kbGluZyBvZiB1c2VyZmF1bHRmZCB3aXRoaW4gdGhlIGtlcm5lbC4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IHRha2luZyBhIGxvb2sgYXQgYGluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oYC4gSXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGludGVybmFsIGRhdGEgc3RydWN0dXJlcyBhbmQgZnVuY3Rpb25zLiBJJ2xsIGZvY3VzIG15IGF0dGVudGlvbiBhcm91bmQgbGluZSAyMTcgaW5pdGlhbGx5LCBhcyB0aGF0J3Mgb2Z0ZW4gd2hlcmUga2V5IGRlZmluaXRpb25zIG9yIHN0cnVjdHVyZXMgcmVsYXRlZCB0byBmYXVsdCBoYW5kbGluZyByZXNpZGUuIFRoZW4sIEknbGwganVtcCBkb3duIHRvIGxpbmUgMzY2LiBJJ20gaG9waW5nIHRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiBob3cgdGhlIGtlcm5lbCBtYW5hZ2VzIGFuZCBwcm9jZXNzZXMgdGhlc2UgdXNlci1zcGFjZSBmYXVsdHMgZnJvbSB0aG9zZSB0d28gbG9jYXRpb25zIHNwZWNpZmljYWxseS4gVGhhdCBzaG91bGQgcHJvdmlkZSBhIHVzZWZ1bCBmb3VuZGF0aW9uIHRvIGludmVzdGlnYXRlIGZ1cnRoZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxODM2LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDI6NDg6NDYuODM0MDE5MDk4WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc3NjMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvdXNlcmZhdWx0ZmRfay5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIxMCxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDIxMDpcXHR9XFxuIDIxMTpcXHRcXG4gMjEyOlxcdHN0YXRpYyBpbmxpbmUgYm9vbCB1c2VyZmF1bHRmZF93cChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4gMjEzOlxcdHtcXG4gMjE0OlxcdFxcdHJldHVybiB2bWFfdGVzdF9hbnlfbWFzayh2bWEsIFZNQV9VRkZEX1dQKTtcXG4gMjE1OlxcdH1cXG4gMjE2OlxcdFxcbiAyMTc6XFx0c3RhdGljIGlubGluZSBib29sIHVzZXJmYXVsdGZkX21pbm9yKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbiAyMTg6XFx0e1xcbiAyMTk6XFx0XFx0cmV0dXJuIHZtYV90ZXN0X2FueV9tYXNrKHZtYSwgVk1BX1VGRkRfTUlOT1IpO1xcbiAyMjA6XFx0fVxcbiAyMjE6XFx0XFxuIDIyMjpcXHRzdGF0aWMgaW5saW5lIGJvb2wgdXNlcmZhdWx0ZmRfcndwKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbiAyMjM6XFx0e1xcbiAyMjQ6XFx0XFx0LypcXG4gMjI1OlxcdFxcdCAqIENhbGxlcnMgZ2F0ZSBQQUdFX05PTkUgdXNhZ2Ugb24gdGhpczsgUEFHRV9OT05FIGlzIGEgQlVJTERfQlVHKClcXG4gMjI2OlxcdFxcdCAqIHdpdGhvdXQgQ09ORklHX0FSQ0hfSEFTX1BURV9QUk9UTk9ORSwgc28gZm9sZCB0byBmYWxzZS5cXG4gMjI3OlxcdFxcdCAqL1xcbiAyMjg6XFx0XFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19BUkNIX0hBU19QVEVfUFJPVE5PTkUpKVxcbiAyMjk6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiAyMzA6XFx0XFx0cmV0dXJuIHZtYV90ZXN0X3NpbmdsZV9tYXNrKHZtYSwgVk1BX1VGRkRfUldQKTtcXG4gMjMxOlxcdH1cXG4gMjMyOlxcdFxcbiAyMzM6XFx0c3RhdGljIGlubGluZSBib29sIHVzZXJmYXVsdGZkX3Byb3RlY3RlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4gMjM0OlxcdHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDI6NDg6NDYuODM0MTAwMDg4WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0ODY5MTQ1MTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHJlbGF0ZXMgdG8gY2hlY2tpbmcga2VybmVsIGNvbmZpZ3VyYXRpb25zOlxuXG4qKktlcm5lbCBDb25maWd1cmF0aW9uIEludmVzdGlnYXRpb24qKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGRlbHZlIGludG8gdGhlIEtjb25maWcgZmlsZXMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGV4YWN0bHkgaG93IGB1c2VyZmF1bHRmZGAgYW5kIGB0cmFuc3BhcmVudF9odWdlcGFnZWAgYXJlIGJlaW5nIGVuYWJsZWQgaW4gdGhlIGtlcm5lbC4gTGV0J3Mgc2VlLi4uIHRoZSBtb3N0IGRpcmVjdCByb3V0ZSBpcyB0byBsb29rIGZvciB0aGUgcmVsZXZhbnQgS2NvbmZpZyBvcHRpb25zLiBTbywgdGhhdCBtZWFucyBjaGVja2luZyBmb3IgYENPTkZJR19VU0VSRkFVTFRGRGAgYW5kIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgLiBXaGVyZSBhcmUgdGhlc2Ugb3B0aW9ucyBkZWZpbmVkPyBNeSB1c3VhbCBzdGFydGluZyBwb2ludCBmb3IgbWVtb3J5IG1hbmFnZW1lbnQgcmVsYXRlZCBmZWF0dXJlcyB3b3VsZCBiZSBlaXRoZXIgYGluaXQvS2NvbmZpZ2Agb3IgYG1tL0tjb25maWdgLiBJJ2xsIHN0YXJ0IHRoZXJlLiBUaGF0J3Mgd2hlcmUgSSB3b3VsZCBleHBlY3QgdG8gZmluZCB0aGUgZGVwZW5kZW5jaWVzIGFuZCB0aGUgbG9naWMgYmVoaW5kIHRoZXNlIHNldHRpbmdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjQ5NywiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjczLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDI6NDg6NDkuMzIxMDE2NTlaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NzE5MDk4NzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFVTRVJGQVVMVEZEXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9MTM3Mj1jb25maWcgSEFWRV9BUkNIX1VTRVJGQVVMVEZEX01JTk9SXFxuLS1cXG5tbS9LY29uZmlnLTEzNzYtXFxubW0vS2NvbmZpZzoxMzc3OmNvbmZpZyBVU0VSRkFVTFRGRF9SV1BcXG5tbS9LY29uZmlnLTEzNzgtXFx0ZGVmX2Jvb2wgeVxcbi0tXFxubW0vS2NvbmZpZy0xMzg1LVxcbm1tL0tjb25maWc6MTM4NjptZW51Y29uZmlnIFVTRVJGQVVMVEZEXFxubW0vS2NvbmZpZy0xMzg3LVxcdGJvb2wgXFxcIkVuYWJsZSB1c2VyZmF1bHRmZCgpIHN5c3RlbSBjYWxsXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwMjo0ODo1MC45OTI5MzE1OTRaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzQ2NzQzNDM1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIGZvciBNZW1vcnkgTWFuYWdlbWVudCoqXG5cbk9rYXksIHRpbWUgdG8gdHJvdWJsZXNob290IHRoaXMgbWVtb3J5LXJlbGF0ZWQgaXNzdWUuIE15IGd1dCB0ZWxscyBtZSB0aGVyZSBtaWdodCBiZSBhIHByb2JsZW0gd2l0aCBob3cgc29tZXRoaW5nIGlzIGNvbmZpZ3VyZWQgaW4gdGhlIGtlcm5lbC4gTGV0J3Mgc3RhcnQgd2l0aCBhIGZvY3VzZWQgaW52ZXN0aWdhdGlvbi4gSSdtIGdvaW5nIHRvIGp1bXAgc3RyYWlnaHQgaW50byB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlciDigJMgdGhlIGBtbS9LY29uZmlnYCBmaWxlLiBJJ20gcHJldHR5IHN1cmUgdGhhdCBhcmVhIGhvdXNlcyB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLCBhbmQgZ2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGUgcHJvYmxlbSwgaXQncyB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludC4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgdGhlIHJlbGV2YW50IG9wdGlvbnMsIG9yIHRoZWlyIGludGVyYWN0aW9ucywgbWlnaHQgYmUgbG9jYXRlZCBhcm91bmQgbGluZSBudW1iZXJzIDEzNzAgdG8gMTQwMC4gVGhhdCByYW5nZSB1c3VhbGx5IGNvdmVycyBzb21lIGtleSBmbGFncyBhbmQgc2V0dGluZ3MgdGhhdCBJJ3ZlIHNlZW4gYmUgcmVsZXZhbnQgaW4gc2ltaWxhciBzaXR1YXRpb25zLiBMZXQncyBzZWUgd2hhdCdzIGluIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjg5MSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDAyOjQ4OjU4LjQ2MDM2OTkyWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMjUyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEzNzAsXG4gIFwiTGluZUNvdW50XCI6IDM1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEzNzA6XFx0XFx0ICBBcmNoIGhhcyB1c2VyZmF1bHRmZCB3cml0ZSBwcm90ZWN0aW9uIHN1cHBvcnRcXG4xMzcxOlxcdFxcbjEzNzI6XFx0Y29uZmlnIEhBVkVfQVJDSF9VU0VSRkFVTFRGRF9NSU5PUlxcbjEzNzM6XFx0XFx0Ym9vbFxcbjEzNzQ6XFx0XFx0aGVscFxcbjEzNzU6XFx0XFx0ICBBcmNoIGhhcyB1c2VyZmF1bHRmZCBtaW5vciBmYXVsdCBzdXBwb3J0XFxuMTM3NjpcXHRcXG4xMzc3OlxcdGNvbmZpZyBVU0VSRkFVTFRGRF9SV1BcXG4xMzc4OlxcdFxcdGRlZl9ib29sIHlcXG4xMzc5OlxcdFxcdGRlcGVuZHMgb24gNjRCSVQgXFx1MDAyNlxcdTAwMjYgQVJDSF9IQVNfUFRFX1BST1ROT05FIFxcdTAwMjZcXHUwMDI2IEhBVkVfQVJDSF9VU0VSRkFVTFRGRF9XUFxcbjEzODA6XFx0XFx0aGVscFxcbjEzODE6XFx0XFx0ICBVc2VyZmF1bHRmZCByZWFkLXdyaXRlIHByb3RlY3Rpb24gKFVGRkRJT19SV1BST1RFQ1QpIGRlbGl2ZXJzIGFcXG4xMzgyOlxcdFxcdCAgdXNlcmZhdWx0ZmQgbm90aWZpY2F0aW9uIG9uIGV2ZXJ5IGFjY2VzcyAtLSByZWFkIG9yIHdyaXRlIC0tIHRvIGFcXG4xMzgzOlxcdFxcdCAgcHJvdGVjdGVkIHJhbmdlLCBsZXR0aW5nIHVzZXJzcGFjZSBvYnNlcnZlIHRoZSB3b3JraW5nIHNldCBvZiBhXFxuMTM4NDpcXHRcXHQgIHByb2Nlc3MuXFxuMTM4NTpcXHRcXG4xMzg2OlxcdG1lbnVjb25maWcgVVNFUkZBVUxURkRcXG4xMzg3OlxcdFxcdGJvb2wgXFxcIkVuYWJsZSB1c2VyZmF1bHRmZCgpIHN5c3RlbSBjYWxsXFxcIlxcbjEzODg6XFx0XFx0ZGVwZW5kcyBvbiBNTVVcXG4xMzg5OlxcdFxcdGhlbHBcXG4xMzkwOlxcdFxcdCAgRW5hYmxlIHRoZSB1c2VyZmF1bHRmZCgpIHN5c3RlbSBjYWxsIHRoYXQgYWxsb3dzIHRvIGludGVyY2VwdCBhbmRcXG4xMzkxOlxcdFxcdCAgaGFuZGxlIHBhZ2UgZmF1bHRzIGluIHVzZXJsYW5kLlxcbjEzOTI6XFx0XFxuMTM5MzpcXHRjb25maWcgUFRFX01BUktFUl9VRkZEX1dQXFxuMTM5NDpcXHRcXHRib29sIFxcXCJVc2VyZmF1bHRmZCB3cml0ZSBwcm90ZWN0aW9uIHN1cHBvcnQgZm9yIHNobWVtL2h1Z2V0bGJmc1xcXCJcXG4xMzk1OlxcdFxcdGRlZmF1bHQgeVxcbjEzOTY6XFx0XFx0ZGVwZW5kcyBvbiBVU0VSRkFVTFRGRCBcXHUwMDI2XFx1MDAyNiBIQVZFX0FSQ0hfVVNFUkZBVUxURkRfV1BcXG4xMzk3OlxcdFxcbjEzOTg6XFx0XFx0aGVscFxcbjEzOTk6XFx0XFx0ICBBbGxvd3MgdG8gY3JlYXRlIG1hcmtlciBQVEVzIGZvciB1c2VyZmF1bHRmZCB3cml0ZSBwcm90ZWN0aW9uXFxuMTQwMDpcXHRcXHQgIHB1cnBvc2VzLiAgSXQgaXMgcmVxdWlyZWQgdG8gZW5hYmxlIHVzZXJmYXVsdGZkIHdyaXRlIHByb3RlY3Rpb24gb25cXG4xNDAxOlxcdFxcdCAgZmlsZS1iYWNrZWQgbWVtb3J5IHR5cGVzIGxpa2Ugc2htZW0gYW5kIGh1Z2V0bGJmcy5cXG4xNDAyOlxcdFxcbjE0MDM6XFx0IyBtdWx0aS1nZW4gTFJVIHtcXG4xNDA0OlxcdGNvbmZpZyBMUlVfR0VOXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDAyOjQ4OjU4LjQ2MDU4Mzk5WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4OTkyOTcwNjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipDaGVja2luZyBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGluIGBtbS9LY29uZmlnYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBxdWlja2x5IGdldCBhIGhhbmRsZSBvbiBob3cgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBpcyBjb25maWd1cmVkLiBNeSBpbml0aWFsIGluc3RpbmN0LCBnaXZlbiBteSBleHBlcmllbmNlLCBpcyB0byBoZWFkIGRpcmVjdGx5IHRvIGBtbS9LY29uZmlnYC4gVGhhdCdzIHdoZXJlIEkgZXhwZWN0IHRvIGZpbmQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgYW55dGhpbmcgZGVhbGluZyB3aXRoIHRyYW5zcGFyZW50IGh1Z2VwYWdlcy4gSXQncyB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBkaWdnaW5nIGludG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBJJ20gZ29pbmcgdG8gbG9vayBmb3IgdGhlIGRlZmluaXRpb24gb2YgdGhlIHN5bWJvbCBpdHNlbGYsIGFuZCB0aGVuIHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcyBhbmQgYW55IGFzc29jaWF0ZWQgaGVscCB0ZXh0LiBJIHdhbnQgdG8gc2VlIGlmIGl0J3MgdHJpc3RhdGUsIGFuZCBpZiBzbywgd2hhdCB0aGUgZGVmYXVsdCBzZXR0aW5nIGlzIGFuZCBob3cgaXQgbWlnaHQgaW50ZXJhY3Qgd2l0aCBvdGhlciBtZW1vcnkgbWFuYWdlbWVudCBmZWF0dXJlcy4gSSdtIGFsc28gZ29pbmcgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgY29uZGl0aW9uYWwgZGVwZW5kZW5jaWVzIG9yIFwic2VsZWN0XCIgc3RhdGVtZW50cyB0aGF0IG1pZ2h0IHNoZWQgbGlnaHQgb24gaG93IGl0J3MgaW50ZWdyYXRlZCBpbnRvIHRoZSBsYXJnZXIga2VybmVsIGNvbmZpZ3VyYXRpb24gbGFuZHNjYXBlLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIHNvbGlkIGZvdW5kYXRpb24gZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGNhcGFiaWxpdGllcyBvZiB0cmFuc3BhcmVudCBodWdlcGFnZXMgd2l0aGluIHRoZSBjdXJyZW50IGtlcm5lbCBidWlsZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM2NDksIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDAyOjQ5OjAwLjM1OTg4Mzc1OVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTI3OTk0NTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTgzMj1jb25maWcgTU1fSURcXG4tLVxcbm1tL0tjb25maWctODM0LVxcbm1tL0tjb25maWc6ODM1Om1lbnVjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5tbS9LY29uZmlnLTgzNi1cXHRib29sIFxcXCJUcmFuc3BhcmVudCBIdWdlcGFnZSBTdXBwb3J0XFxcIlxcbi0tXFxubW0vS2NvbmZpZz04NTM9Y2hvaWNlXFxuLS1cXG5tbS9LY29uZmlnLTg1OC1cXG5tbS9LY29uZmlnOjg1OTpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfQUxXQVlTXFxubW0vS2NvbmZpZy04NjAtXFx0XFx0Ym9vbCBcXFwiYWx3YXlzXFxcIlxcbi0tXFxubW0vS2NvbmZpZy04NjUtXFxubW0vS2NvbmZpZzo4NjY6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX01BRFZJU0VcXG5tbS9LY29uZmlnLTg2Ny1cXHRcXHRib29sIFxcXCJtYWR2aXNlXFxcIlxcbi0tXFxubW0vS2NvbmZpZy04NzQtXFxubW0vS2NvbmZpZzo4NzU6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX05FVkVSXFxubW0vS2NvbmZpZy04NzYtXFx0XFx0Ym9vbCBcXFwibmV2ZXJcXFwiXFxuLS1cXG5tbS9LY29uZmlnPTg4Mj1jaG9pY2VcXG4tLVxcbm1tL0tjb25maWctODkxLVxcbm1tL0tjb25maWc6ODkyOlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX05FVkVSXFxubW0vS2NvbmZpZy04OTMtXFx0XFx0Ym9vbCBcXFwibmV2ZXJcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTkwMS1cXG5tbS9LY29uZmlnOjkwMjpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9BTFdBWVNcXG5tbS9LY29uZmlnLTkwMy1cXHRcXHRib29sIFxcXCJhbHdheXNcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTkwOS1cXG5tbS9LY29uZmlnOjkxMDpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9XSVRISU5fU0laRVxcbm1tL0tjb25maWctOTExLVxcdFxcdGJvb2wgXFxcIndpdGhpbl9zaXplXFxcIlxcbi0tXFxubW0vS2NvbmZpZy05MTctXFxubW0vS2NvbmZpZzo5MTg6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfQURWSVNFXFxubW0vS2NvbmZpZy05MTktXFx0XFx0Ym9vbCBcXFwiYWR2aXNlXFxcIlxcbi0tXFxubW0vS2NvbmZpZz05Mjc9Y2hvaWNlXFxuLS1cXG5tbS9LY29uZmlnLTkzNi1cXG5tbS9LY29uZmlnOjkzNzpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9ORVZFUlxcbm1tL0tjb25maWctOTM4LVxcdFxcdGJvb2wgXFxcIm5ldmVyXFxcIlxcbi0tXFxubW0vS2NvbmZpZy05NDUtXFxubW0vS2NvbmZpZzo5NDY6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfQUxXQVlTXFxubW0vS2NvbmZpZy05NDctXFx0XFx0Ym9vbCBcXFwiYWx3YXlzXFxcIlxcbi0tXFxubW0vS2NvbmZpZy05NTMtXFxubW0vS2NvbmZpZzo5NTQ6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfV0lUSElOX1NJWkVcXG5tbS9LY29uZmlnLTk1NS1cXHRcXHRib29sIFxcXCJ3aXRoaW5fc2l6ZVxcXCJcXG4tLVxcbm1tL0tjb25maWctOTYxLVxcbm1tL0tjb25maWc6OTYyOlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX0FEVklTRVxcbm1tL0tjb25maWctOTYzLVxcdFxcdGJvb2wgXFxcImFkdmlzZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDI6NDk6MDAuNDEyNjg3NzU5WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU2MjA3MTQ0NTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgYSBQb3RlbnRpYWwgRnV6emluZyBUYXJnZXQqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFdlIGhhdmUgYSBwYXRjaCB0b3VjaGluZyBgbW0va2h1Z2VwYWdlZC5jYCDigJMgdGhhdCBpbW1lZGlhdGVseSBncmFicyBteSBhdHRlbnRpb24uIFNwZWNpZmljYWxseSwgdGhlIGB0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHBgIGZ1bmN0aW9uIGlzIHRoZSBmb2NhbCBwb2ludC4gVGhlIGNvcmUgY2hhbmdlIGlzIHRoaXM6IGlmIGEgVk1BIGlzIHJlZ2lzdGVyZWQgd2l0aCBgdXNlcmZhdWx0ZmRfbWlub3JgLCBpdOKAmXMgbm93ICpza2lwcGVkKiBkdXJpbmcgVEhQIGNvbGxhcHNlLiBUaGF0J3MgYSBzaWduaWZpY2FudCBiZWhhdmlvciBjaGFuZ2UsIHBvdGVudGlhbGx5IG9wZW5pbmcgdXAgYSBuZXcgYXR0YWNrIHN1cmZhY2UuXG5cblRoZSBjb2RlIGl0c2VsZiBpcyBzdHJhaWdodGZvcndhcmQ6IHRoZSBuZXcgY2hlY2ssIGBpZiAodXNlcmZhdWx0ZmRfbWlub3Iodm1hKSkgcmV0dXJuIFNDQU5fUFRFX1VGRkQ7YCwgc2VlbXMgc2ltcGxlIGVub3VnaCwgYnV0IHRoZSBpbnRlcmFjdGlvbnMgYW5kIHNpZGUgZWZmZWN0cyBpbiBhIGNvbXBsZXggTU0gc3lzdGVtLi4uIHRoYXQncyB3aGVyZSB0aGUgaW50ZXJlc3Rpbmcgc3R1ZmYgbGllcy5cblxuTm93LCBpcyB0aGlzIHdvcnRoIGZ1enppbmc/IERlZmluaXRlbHkuIFRoZSBmYWN0IHRoYXQgaXQncyByZWFjaGFibGUgdmlhIGJvdGggYG1hZHZpc2UoLi4uLCBNQURWX0NPTExBUFNFKWAgKmFuZCogYmFja2dyb3VuZCBga2h1Z2VwYWdlZGAgc2Nhbm5pbmcsIGNvbWJpbmVkIHdpdGggYHVzZXJmYXVsdGZkX21pbm9yYCByZWdpc3RyYXRpb24g4oCTIHRoYXQncyBhIHNvbGlkIGNvbWJpbmF0aW9uIGZvciBleHBsb3JhdGlvbi4gUGx1cywgd2UgaGF2ZSB0aGUgYHVwcm9iZV93cml0ZWAgcGF0aCwgd2lkZW5pbmcgdGhlIGF0dGFjayBzdXJmYWNlLlxuXG5UaGlzIGlzIGEgY2xlYXIgXCJ5ZXNcIiBmb3IgYFdvcnRoRnV6emluZ2AuIFRoZSBzdWJzeXN0ZW0gaXMgY29yZSBNTSwgYW5kIHRoZSByZWFjaGFiaWxpdHkgaXMgZGl2ZXJzZS5cblxuVGhlIG5leHQgc3RlcCBpcyB0byBjaG9vc2Ugb3VyIEZvY3VzU3ltYm9scyBhbmQgRW5hYmxlQ29uZmlncy4gV2UgbmVlZCB0byBhdm9pZCB0aGUgb2J2aW91cywgdWJpcXVpdG91cyBsaWZlY3ljbGUgZnVuY3Rpb25zIOKAkyBub3RoaW5nIGxpa2UgYHN5c19tYWR2aXNlYCwgb3IgYGRvX3BhZ2VfZmF1bHRgLiBXZSBuZWVkIHRvIGJlIHN1cmdpY2FsLiBNeSBmb2N1cyB3b3VsZCBiZSBvbjpcbiogICBgdHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwYDogVGhlIGZ1bmN0aW9uIGhhcyBjaGFuZ2VkIGRpcmVjdGx5LCBzbyBsZXQncyBzdGFydCB0aGVyZS5cbiogICBUaGUgY2FsbGVycyBvZiBgdHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwYDogYGNvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwYCwgYG1hZHZpc2VfY29sbGFwc2VgLCBgY29sbGFwc2Vfc2luZ2xlX3BtZGAsIGBjb2xsYXBzZV9maWxlYCwgYGtodWdlcGFnZWRfc2Nhbl9wbWRgLCBhbmQgYGtodWdlcGFnZWRfc2Nhbl9maWxlYCBhcmUgYWxsIHBvdGVudGlhbCBhcmVhcyBvZiBpbnRlcmVzdCwgaWYgYHRyeV9jb2xsYXBzZV9wdGVfbWFwcGVkX3RocGAgaXNuJ3QgaW5saW5lZC5cblxuTGV0J3Mgc2VlIHdoYXQgZWxzZSBgbW0va2h1Z2VwYWdlZC5jYCBoYXMgdG8gb2ZmZXIuIFRoZSBhZGphY2VudCBjb2RlIHdpbGwgZ2l2ZSBjbHVlcyBvbiB3aGF0IHRvIGZvY3VzIG9uLiBXZSBuZWVkIHRvIGNhcmVmdWxseSBvYnNlcnZlIHRoZSBjb250cm9sIGFuZCBkYXRhIGZsb3cgYXJvdW5kIHRoaXMgbmV3IGNoZWNrIHRvIGVuc3VyZSB3ZSBhcmUgY292ZXJpbmcgdGhlIG1vc3QgdnVsbmVyYWJsZSBzZWdtZW50cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ2NDEsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDI6NDk6MDYuMDMzNDA1NTU4WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTE3NjQ3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJec3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgdHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2todWdlcGFnZWQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9raHVnZXBhZ2VkLmM9MTgxNT1zdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBzZXRfaHVnZV9wbWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0xODUwLVxcbm1tL2todWdlcGFnZWQuYzoxODUxOnN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IHRyeV9jb2xsYXBzZV9wdGVfbWFwcGVkX3RocChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbm1tL2todWdlcGFnZWQuYy0xODUyLVxcdFxcdGJvb2wgaW5zdGFsbF9wbWQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDAyOjQ5OjA2LjA4MjU4NzYxN1oiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NzE4MTE1MTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBraHVnZXBhZ2VkLmMgZm9yIFRIUCBDb2xsYXBzZSBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSdtIGxvb2tpbmcgYXQgYHRyeV9jb2xsYXBzZV9wdGVfbWFwcGVkX3RocGAg4oCTIGl0J3MgYSBub24taW5saW5lIHN0YXRpYyBmdW5jdGlvbiB0dWNrZWQgYXdheSBpbiBgbW0va2h1Z2VwYWdlZC5jYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiV2hvJ3MgdXNpbmcgdGhpcyB0aGluZz9cIiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY2FsbCBncmFwaCBhbmQgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQuIFNvLCBJJ20gZ29pbmcgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgZGlyZWN0bHkgcmVsYXRlZCBmdW5jdGlvbnMuXG5cblJpZ2h0IG9mZiB0aGUgYmF0LCBJIHNlZSBgY29sbGFwc2VfcHRlX21hcHBlZF90aHBgLCB3aGljaCBpcyBleHBvcnRlZCBhbmQgbm9uLXN0YXRpYyB3aXRoaW4gdGhlIHNhbWUgZmlsZTsgdGhhdOKAmXMgZGVmaW5pdGVseSByZWxldmFudC4gVGhlbiB3ZSBoYXZlIGBtYWR2aXNlX2NvbGxhcHNlYCwgYWxzbyBub24tc3RhdGljLCBhbHNvIGluIGBtbS9raHVnZXBhZ2VkLmNgLiBPZiBjb3Vyc2UsIGB0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHBgIGl0c2VsZiBpcyBpbiB0aGUgbWl4LCBhbmQgbm93IEkgYWxzbyBzZWUgYGNvbGxhcHNlX3NpbmdsZV9wbWRgIGFuZCBgY29sbGFwc2VfZmlsZWAgaW4gdGhlIGxpc3QuXG5cbkkgbmVlZCB0byBxdWlja2x5IHZlcmlmeSB0aGF0IHRoZXNlIGFyZSBhbGwgZGlzdGluY3Qgc3ltYm9sczsgaXQncyBlYXN5IHRvIGdldCBjb25mdXNlZCB3aXRoIHNpbWlsYXIgbmFtaW5nIGNvbnZlbnRpb25zLiBMZXQncyBzdGFydCBieSBsb29raW5nIGF0IGBtYWR2aXNlX2NvbGxhcHNlYCBpbiBgbW0va2h1Z2VwYWdlZC5jYCBpbiBwYXJ0aWN1bGFyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTg3NSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwMjo0OToxMS44MDA3MDQ3ODZaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2ODQ1NTM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImludCBtYWR2aXNlX2NvbGxhcHNlXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0va2h1Z2VwYWdlZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2todWdlcGFnZWQuYz0zMTU3PXN0YXRpYyBpbnQgbWFkdmlzZV9jb2xsYXBzZV9lcnJubyhlbnVtIHNjYW5fcmVzdWx0IHIpXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMzE4OC1cXG5tbS9raHVnZXBhZ2VkLmM6MzE4OTppbnQgbWFkdmlzZV9jb2xsYXBzZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBzdGFydCxcXG5tbS9raHVnZXBhZ2VkLmMtMzE5MC1cXHRcXHQgICAgIHVuc2lnbmVkIGxvbmcgZW5kLCBib29sICpsb2NrX2Ryb3BwZWQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDAyOjQ5OjExLjg0NzU1NzI5NVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NTQ1MTY2NzA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGluLiBIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzIHJlZ2FyZGluZyBgY29sbGFwc2VfZmlsZWAgYW5kIGBjb2xsYXBzZV9zaW5nbGVfcG1kYCB3aXRoaW4gYG1tL2todWdlcGFnZWQuY2A6XG5cbioqQW5hbHl6aW5nIGBjb2xsYXBzZV9maWxlYCBhbmQgYGNvbGxhcHNlX3NpbmdsZV9wbWRgIGluIGBtbS9raHVnZXBhZ2VkLmNgKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgaW50byB0aGUgd2VlZHMgb2YgYGtodWdlcGFnZWRgJ3MgZmlsZSBtYXBwaW5nIGhhbmRsaW5nLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gdGhlIGZ1bmN0aW9ucyBgY29sbGFwc2VfZmlsZWAgYW5kIGBjb2xsYXBzZV9zaW5nbGVfcG1kYC4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgSSdtIGV4cGVjdGluZyB0aGVzZSB0byBiZSBjcml0aWNhbCBjb21wb25lbnRzIG9mIGhvdyB0aGUga2VybmVsIG1hbmFnZXMgdHJhbnNwYXJlbnQgaHVnZSBwYWdlcyAoVEhQKSBzcGVjaWZpY2FsbHkgd2hlbiBkZWFsaW5nIHdpdGggZmlsZS1iYWNrZWQgbWFwcGluZ3MuIGBjb2xsYXBzZV9maWxlYCwgdW5kb3VidGVkbHksIGhhcyBhIGJyb2FkZXIgc2NvcGUsIGxpa2VseSBkZWFsaW5nIHdpdGggZmlsZS1iYWNrZWQgbWFwcGluZ3MgaW4gZ2VuZXJhbCwgd2hlcmVhcyBgY29sbGFwc2Vfc2luZ2xlX3BtZGAgaXMgcHJvYmFibHkgZ2VhcmVkIHRvd2FyZCBjb2xsYXBzaW5nIGEgc3BlY2lmaWMgUGh5c2ljYWwgTWVtb3J5IERlc2NyaXB0b3IgKFBNRCkuIEknbGwgbmVlZCB0byBkcmlsbCBkb3duIGludG8gdGhlIGxvZ2ljIHdpdGhpbiBlYWNoIHRvIHVuZGVyc3RhbmQgdGhlIG51YW5jZXMgb2YgaG93IHRoZXNlIGZ1bmN0aW9ucyBoYW5kbGUgcGFnZSBmYXVsdHMsIG1lbW9yeSBhbGxvY2F0aW9uL2RlYWxsb2NhdGlvbiwgYW5kIHRoZSBvdmVyYWxsIGNvb3JkaW5hdGlvbiBvZiBUSFAgbWFuYWdlbWVudCBpbiBmaWxlLWJhY2tlZCBjb250ZXh0cy4gSSBhbnRpY2lwYXRlIHNlZWluZyBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgcGFnZSBjYWNoZSwgaW5vZGUgZGF0YSBzdHJ1Y3R1cmVzLCBhbmQgdGhlIFZNIHN5c3RlbSdzIGNvcmUgbWVjaGFuaXNtcyBmb3IgaGFuZGxpbmcgbWVtb3J5IHByZXNzdXJlLiBNeSBnb2FsIGlzIHRvIGRldGVybWluZSBob3cgZWZmaWNpZW50bHkgdGhlc2UgZnVuY3Rpb25zIG1hbmFnZSBwYWdlLWxldmVsIG9wZXJhdGlvbnMgY29tcGFyZWQgdG8gYSBtb3JlIGRpcmVjdCBmaWxlLW1hcHBpbmcgYXBwcm9hY2ggd2l0aCBUSFAuIFNwZWNpZmljIHRoaW5ncyBJJ2xsIGJlIGxvb2tpbmcgZm9yIGluY2x1ZGUgd2hldGhlciB0aGUgZmlsZSBtYXBwaW5nIHJlcXVpcmVzIGZsdXNoaW5nLCBhbmQgaG93IGNvaGVyZW5jeSBpcyBtYWludGFpbmVkIHdpdGggb3RoZXIgcHJvY2Vzc2VzIGFuZCB0aHJlYWRzIGFjY2Vzc2luZyB0aGUgZmlsZS4gQWxzbywgd2hhdCBpbXBhY3Qgd2lsbCB0aGVzZSBmdW5jdGlvbnMgaGF2ZSBvbiBwZXJmb3JtYW5jZSBmcm9tIGEgZmlsZSBJL08gcGVyc3BlY3RpdmU/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2NTEyLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDI6NDk6MTYuMzkyNzI2NDEyWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMzczNjYxMzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29sbGFwc2VfZmlsZVxcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2todWdlcGFnZWQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9raHVnZXBhZ2VkLmM9MjE0MD1zdGF0aWMgdm9pZCByZXRyYWN0X3BhZ2VfdGFibGVzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBwZ29mZl90IHBnb2ZmKVxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTIyNDgtICovXFxubW0va2h1Z2VwYWdlZC5jOjIyNDk6c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2VfZmlsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbm1tL2todWdlcGFnZWQuYy0yMjUwLVxcdFxcdHN0cnVjdCBmaWxlICpmaWxlLCBwZ29mZl90IHN0YXJ0LCBzdHJ1Y3QgY29sbGFwc2VfY29udHJvbCAqY2MpXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMjY3Ni1cXHRWTV9CVUdfT04oIWxpc3RfZW1wdHkoXFx1MDAyNnBhZ2VsaXN0KSk7XFxubW0va2h1Z2VwYWdlZC5jOjI2Nzc6XFx0dHJhY2VfbW1fa2h1Z2VwYWdlZF9jb2xsYXBzZV9maWxlKG1tLCBuZXdfZm9saW8sIGluZGV4LCBhZGRyLCBpc19zaG1lbSwgZmlsZSwgSFBBR0VfUE1EX05SLCByZXN1bHQpO1xcbm1tL2todWdlcGFnZWQuYy0yNjc4LVxcdHJldHVybiByZXN1bHQ7XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmM9MjY4MT1zdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBjb2xsYXBzZV9zY2FuX2ZpbGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMjc3OC1cXHRcXHR9IGVsc2Uge1xcbm1tL2todWdlcGFnZWQuYzoyNzc5OlxcdFxcdFxcdHJlc3VsdCA9IGNvbGxhcHNlX2ZpbGUobW0sIGFkZHIsIGZpbGUsIHN0YXJ0LCBjYyk7XFxubW0va2h1Z2VwYWdlZC5jLTI3ODAtXFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwMjo0OToxNi43MzAwOTc4MjdaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjg2MzM2NTQ4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkNoZWNraW5nIGBjb2xsYXBzZV9zaW5nbGVfcG1kYCoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzLiBUaGUgaW5pdGlhbCB0aG91Z2h0LCBvZiBjb3Vyc2UsIGlzIGEgY2hlY2suIEEgcXVpY2sgc2FuaXR5IGNoZWNrIG9uIGEgc3BlY2lmaWMgZnVuY3Rpb24gb3IgbW9kdWxlIG5hbWVkIGBjb2xsYXBzZV9zaW5nbGVfcG1kYC4gVGhlIG1lcmUgZXhpc3RlbmNlIG9mIGEgZGVkaWNhdGVkIGZ1bmN0aW9uIHdpdGggc3VjaCBhIG5hbWUgaW1wbGllcyBhIHZlcnkgc3BlY2lmaWMgdGFzazogcG90ZW50aWFsbHkgcmVkdWNpbmcgb3Igc2ltcGxpZnlpbmcgZGF0YSwgbGlrZWx5IHJlbGF0ZWQgdG8gcGFpcmVkIG1vbGVjdWxhciBkeW5hbWljcyAoUE1EKSBzaW11bGF0aW9ucywgcGVyaGFwcywgb3Igc29tZXRoaW5nIG9mIHRoYXQgbmF0dXJlLCBnaXZlbiB0aGUgbmFtaW5nIGNvbnZlbnRpb24gSSBzZWUuXG5cbk15IGltbWVkaWF0ZSBmb2xsb3ctdXAgdGhvdWdodCB3b3VsZCBiZSAqd2h5KiBhcmUgd2UgY2hlY2tpbmcgdGhpcz8gSXMgaXQgcGFydCBvZiBhIGRlYnVnZ2luZyBwcm9jZXNzPyBBIHJlZmFjdG9yaW5nIGVmZm9ydD8gUGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uPyBPciBtYXliZSBhIHJldmlldyBvZiB0aGUgdW5kZXJseWluZyBsb2dpYz8gV2hhdCdzIHRoZSBjb250ZXh0PyBXZSdsbCBuZWVkIGEgYnJvYWRlciB2aWV3IG9mIHRoZSBzeXN0ZW0gdG8gdW5kZXJzdGFuZCB0aGUgbW90aXZhdGlvbiBiZWhpbmQgdGhpcyBjaGVjay4gSSdkIGJlIGxvb2tpbmcgZm9yIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiwgdGVzdCBjYXNlcywgb3IgcmVjZW50IGNvZGUgY2hhbmdlcyB0aGF0IGludm9sdmUgdGhpcyBmdW5jdGlvbi5cblxuU3BlY2lmaWNhbGx5LCBJJ2Qgd2FudCB0byBxdWlja2x5IHJlY2FsbDogd2hhdCBhcmUgdGhlIHR5cGljYWwgaW5wdXRzIGFuZCBvdXRwdXRzIGZvciB0aGlzIGZ1bmN0aW9uPyBEb2VzIGl0IGhhbmRsZSBlZGdlIGNhc2VzIHByb3Blcmx5PyBXaGF0IGFyZSB0aGUgY29tcHV0YXRpb25hbCBjb21wbGV4aXRpZXMgaW52b2x2ZWQ/IERvZXMgaXQgaGF2ZSBhbnkga25vd24gZGVwZW5kZW5jaWVzIHRoYXQgbWlnaHQgYWZmZWN0IHBlcmZvcm1hbmNlIG9yIHN0YWJpbGl0eT8gSSdkIGJlIGxvb2tpbmcgZm9yIHBvdGVudGlhbCBhcmVhcyBvZiBjb25jZXJuOiBpbmVmZmljaWVudCBhbGdvcml0aG1zLCBtZW1vcnkgbGVha3MsIG9yIHVuaGFuZGxlZCBleGNlcHRpb25zIHRoYXQgY291bGQgYmUgbHVya2luZyB3aXRoaW4gaXRzIGltcGxlbWVudGF0aW9uLiBMZXQncyBzZWUgd2hhdCB3ZSBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzI2MSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDAyOjQ5OjE5LjU5MzQ2NjI2MVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcwNjc5NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29sbGFwc2Vfc2luZ2xlX3BtZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9raHVnZXBhZ2VkLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0va2h1Z2VwYWdlZC5jPTI2ODE9c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2Vfc2Nhbl9maWxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTI3OTAtICovXFxubW0va2h1Z2VwYWdlZC5jOjI3OTE6c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2Vfc2luZ2xlX3BtZCh1bnNpZ25lZCBsb25nIGFkZHIsXFxubW0va2h1Z2VwYWdlZC5jLTI3OTItXFx0XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIGJvb2wgKmxvY2tfZHJvcHBlZCxcXG4tLVxcbm1tL2todWdlcGFnZWQuYz0yODQ4PXN0YXRpYyB2b2lkIGNvbGxhcHNlX3NjYW5fbW1fc2xvdCh1bnNpZ25lZCBpbnQgcHJvZ3Jlc3NfbWF4LFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTI5MTgtXFxubW0va2h1Z2VwYWdlZC5jOjI5MTk6XFx0XFx0XFx0KnJlc3VsdCA9IGNvbGxhcHNlX3NpbmdsZV9wbWQoa2h1Z2VwYWdlZF9zY2FuLmFkZHJlc3MsXFxubW0va2h1Z2VwYWdlZC5jLTI5MjAtXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgdm1hLCBcXHUwMDI2bG9ja19kcm9wcGVkLCBjYyk7XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmM9MzE4OT1pbnQgbWFkdmlzZV9jb2xsYXBzZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBzdGFydCxcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0zMjM3LVxcbm1tL2todWdlcGFnZWQuYzozMjM4OlxcdFxcdHJlc3VsdCA9IGNvbGxhcHNlX3NpbmdsZV9wbWQoYWRkciwgdm1hLCBcXHUwMDI2bW1hcF91bmxvY2tlZCwgY2MpO1xcbm1tL2todWdlcGFnZWQuYy0zMjM5LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwMjo0OToxOS42NDA1MzgwMloiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTU4NTgwMzY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IENvbmZpZ3VyYXRpb24gQ29udW5kcnVtKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGVzc2VudGlhbCBjb25maWd1cmF0aW9ucyBmb3IgdGhpcyBwYXJ0aWN1bGFyIGtlcm5lbCBjb21wb25lbnQuIEl0IGxvb2tzIGxpa2UgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBpcyBkZWZpbml0ZWx5IGEgcHJlcmVxdWlzaXRlLCBnaXZlbiBpdHMgZGlyZWN0IGxpbmsgdG8gYGtodWdlcGFnZWQuY2AgaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IE1ha2VmaWxlLiBNYWtlcyBzZW5zZTsgdGhhdCdzIHRoZSBjb3JlIG9mIGhvdyB0cmFuc3BhcmVudCBodWdlcGFnZXMgYXJlIG1hbmFnZWQuXG5cblRoZW4gdGhlcmUncyBgVVNFUkZBVUxURkRgLCB3aGljaCBpcyB0aWVkIHRvIHVzZXJmYXVsdGZkIG1pbm9yIGZhdWx0IHN1cHBvcnQuIEFuZCBzaW5jZSB3ZSdyZSBkZWFsaW5nIHdpdGggeDg2L2FtZDY0IHN5c3RlbXMgaGVyZSwgSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgSEFWRV9BUkNIX1VTRVJGQVVMVEZEX01JTk9SYCBpcyBlbmFibGVkLiBUaW1lIHRvIGRpdmUgaW50byBgYXJjaC94ODYvS2NvbmZpZ2AgYW5kIHNlZSB3aGF0IHRoZSBhcmNoaXRlY3R1cmUgc2F5cyBhYm91dCB0aGlzLiBJJ20gZ29pbmcgdG8gbmVlZCB0byB0cmFjayBkb3duIHRoZSBLY29uZmlnIGRlZmluaXRpb24gdG8gZW5zdXJlIGl0J3Mgc2V0IGNvcnJlY3RseS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc5NTIsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDI6NDk6MjEuNzk5MTIxMDY1WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTQyNjE4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJIQVZFX0FSQ0hfVVNFUkZBVUxURkRfTUlOT1JcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvS2NvbmZpZz01OD1jb25maWcgWDg2XFxuLS1cXG5hcmNoL3g4Ni9LY29uZmlnLTIxNC1cXHRzZWxlY3QgSEFWRV9BUkNIX1VTRVJGQVVMVEZEX1dQICAgICAgICAgaWYgWDg2XzY0IFxcdTAwMjZcXHUwMDI2IFVTRVJGQVVMVEZEXFxuYXJjaC94ODYvS2NvbmZpZzoyMTU6XFx0c2VsZWN0IEhBVkVfQVJDSF9VU0VSRkFVTFRGRF9NSU5PUlxcdGlmIFg4Nl82NCBcXHUwMDI2XFx1MDAyNiBVU0VSRkFVTFRGRFxcbmFyY2gveDg2L0tjb25maWctMjE2LVxcdHNlbGVjdCBIQVZFX0FSQ0hfVk1BUF9TVEFDS1xcdFxcdGlmIFg4Nl82NFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwMjo0OToyMS44NjA1NTQwMzRaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDMxOTM4NDc5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBLZXJuZWwgQ29uZmlndXJhdGlvbiBmb3IgRnV6emluZyoqXG5cbk9rYXksIHNvIHRoZSBLY29uZmlnIGZsYWdzIHdlJ3JlIGZvY3VzaW5nIG9uIGhlcmUgYXJlIGBVU0VSRkFVTFRGRGAgYW5kIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAuIEkgYWx3YXlzIGxpa2UgdG8gZG91YmxlLWNoZWNrIG15IGFzc3VtcHRpb25zLCBzbyBsZXQncyBydW4gdGhyb3VnaCB0aGUgY3JpdGVyaWEuXG5cbmBXb3J0aEZ1enppbmdgIGlzIHNldCB0byB0cnVlLCB3aGljaCBhbGlnbnMgd2l0aCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzeXN0ZW0uIFRoZSBgRW5hYmxlQ29uZmlnc2AgbGlzdCBleHBsaWNpdGx5IGluY2x1ZGVzIGJvdGggYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBhbmQgYFVTRVJGQVVMVEZEYCwgd2hpY2ggaXMgZXhhY3RseSB3aGF0IEkgZXhwZWN0ZWQgYmFzZWQgb24gdGhlIGluaXRpYWwgYXNzZXNzbWVudC4gVGhlIGBGb2N1c1N5bWJvbHNgIGFyZSBhbHNvIGFzIEkgd291bGQgaGF2ZSBhbnRpY2lwYXRlZDogd2UncmUga2V5ZWQgaW4gb24gZnVuY3Rpb25zIGxpa2UgYHRyeV9jb2xsYXBzZV9wdGVfbWFwcGVkX3RocGAsIGBjb2xsYXBzZV9wdGVfbWFwcGVkX3RocGAsIGBtYWR2aXNlX2NvbGxhcHNlYCwgYW5kIGBjb2xsYXBzZV9zaW5nbGVfcG1kYC4gVGhlc2UgbWFrZSBwZXJmZWN0IHNlbnNlIGdpdmVuIHRoZSBuYXR1cmUgb2YgdHJhbnNwYXJlbnQgaHVnZXBhZ2VzIGFuZCB1c2VyZmF1bHRmZDsgd2UncmUgZGVhbGluZyB3aXRoIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGluIHRoYXQgYXJlYS4gVGhhdCdzIGEgc29saWQsIGNvbmNpc2UgcmVhc29uaW5nIGZvciB0aGlzIGFzc2Vzc21lbnQuXG5cbkhtbSwgSSB0aGluayB0aGF0J3MgaXQuIExldCBtZSBqdXN0IGNvbmZpcm0gdGhhdCBJIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nIGVsc2UgaW4gbXkgZXZhbHVhdGlvbi4gWXVwLCBldmVyeXRoaW5nIGlzIGNsZWFyIGFuZCBhY2N1cmF0ZS4gTGV0J3MgY2FsbCBgc2V0LXJlc3VsdHNgLiBEb25lLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODQ0NCwiT3V0cHV0VG9rZW5zIjoxNjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDI6NDk6MjYuMTc5OTQxMTk2WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzYxMjM2OTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCIsXG4gICAgXCJVU0VSRkFVTFRGRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRyeV9jb2xsYXBzZV9wdGVfbWFwcGVkX3RocFwiLFxuICAgIFwiY29sbGFwc2VfcHRlX21hcHBlZF90aHBcIixcbiAgICBcIm1hZHZpc2VfY29sbGFwc2VcIixcbiAgICBcImNvbGxhcHNlX3NpbmdsZV9wbWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBraHVnZXBhZ2VkIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgKG1tL2todWdlcGFnZWQuYykgdG8gcHJldmVudCBjb2xsYXBzaW5nIFBURS1tYXBwZWQgdHJhbnNwYXJlbnQgaHVnZXBhZ2VzIGZvciBWTUFzIHJlZ2lzdGVyZWQgd2l0aCB1c2VyZmF1bHRmZCBtaW5vciBmYXVsdCBoYW5kbGluZyAodXNlcmZhdWx0ZmRfbWlub3IpLiBUaGlzIGlzIHJlYWNoYWJsZSB2aWEgdXNlcmZhdWx0ZmQgc3lzY2FsbHMgYW5kIE1BRFZfQ09MTEFQU0UgbWFkdmlzZSBjYWxscyBvciBiYWNrZ3JvdW5kIGtodWdlcGFnZWQgY29sbGFwc2UgYW5kIHdhcnJhbnRzIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIixcbiAgICBcIlVTRVJGQVVMVEZEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwXCIsXG4gICAgXCJjb2xsYXBzZV9wdGVfbWFwcGVkX3RocFwiLFxuICAgIFwibWFkdmlzZV9jb2xsYXBzZVwiLFxuICAgIFwiY29sbGFwc2Vfc2luZ2xlX3BtZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGtodWdlcGFnZWQgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCAobW0va2h1Z2VwYWdlZC5jKSB0byBwcmV2ZW50IGNvbGxhcHNpbmcgUFRFLW1hcHBlZCB0cmFuc3BhcmVudCBodWdlcGFnZXMgZm9yIFZNQXMgcmVnaXN0ZXJlZCB3aXRoIHVzZXJmYXVsdGZkIG1pbm9yIGZhdWx0IGhhbmRsaW5nICh1c2VyZmF1bHRmZF9taW5vcikuIFRoaXMgaXMgcmVhY2hhYmxlIHZpYSB1c2VyZmF1bHRmZCBzeXNjYWxscyBhbmQgTUFEVl9DT0xMQVBTRSBtYWR2aXNlIGNhbGxzIG9yIGJhY2tncm91bmQga2h1Z2VwYWdlZCBjb2xsYXBzZSBhbmQgd2FycmFudHMgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDI6NDk6MjYuMjU2MDcyMzc1WiIsIlNlcSI6MzcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzgzMTM3NzM3NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDAyOjQ5OjI2LjI1NjU1NTA0NFoiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjEzODMwODkwMDE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgY2hlY2sgKGB1c2VyZmF1bHRmZF9taW5vcih2bWEpYCkgaW4gYHRyeV9jb2xsYXBzZV9wdGVfbWFwcGVkX3RocCgpYCB0byBwcmV2ZW50IGNvbGxhcHNpbmcgUFRFLW1hcHBlZCBUSFBzIG9uIFZNQXMgcmVnaXN0ZXJlZCB3aXRoIHVzZXJmYXVsdGZkLW1pbm9yIG1vZGUsIGFsb25nIHdpdGggY29ycmVzcG9uZGluZyBzZWxmdGVzdCB1cGRhdGVzIGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLXVuaXQtdGVzdHMuY2AuIFxcblxcblRoaXMgbW9kaWZpY2F0aW9uIGRvZXMgbm90IGFsbG9jYXRlIG5ldyBidWZmZXJzLCBtYW5pcHVsYXRlIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBkYXRhLCBhbHRlciBwYWRkaW5nIG9yIHN0cnVjdHVyZSBmaWVsZHMgY29waWVkIHRvIHVzZXJzcGFjZSwgb3IgY2hhbmdlIGFueSBkYXRhIGxlbmd0aHMvYm91bmRzIGNoZWNraW5nIHRoYXQgY291bGQgbGVhZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBsZWFrcy4gU3RhbmRhcmQgc2FuaXRpemVycyBhbmQgYnVnIGRldGVjdG9ycyAoc3VjaCBhcyBLQVNBTiBhbmQgcGFnZSB0YWJsZSBjaGVja3MpIGFyZSBzdWZmaWNpZW50IGZvciB2YWxpZGF0aW5nIHRoaXMgZnVuY3Rpb25hbGl0eSwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGRldGVjdGFibGUgb25seSBieSBLTVNBTiBhcmUgaW50cm9kdWNlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBlZTdiNjU4MTY1OTJkYjhiOTlmYWVmMmY0OTIzZTgyMWRkNWJjZWMxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMTAgMDI6NDg6MTQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9raHVnZXBhZ2VkLmMgYi9tbS9raHVnZXBhZ2VkLmNcbmluZGV4IDc1NjM5Mjk4ZWZjMjcuLmU2OTQ3ZmUxNDJlZWEgMTAwNjQ0XG4tLS0gYS9tbS9raHVnZXBhZ2VkLmNcbisrKyBiL21tL2todWdlcGFnZWQuY1xuQEAgLTE4OTQsNiArMTg5NCwxMyBAQCBzdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCB0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHAoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnblxuIFx0aWYgKHVzZXJmYXVsdGZkX3Byb3RlY3RlZCh2bWEpKVxuIFx0XHRyZXR1cm4gU0NBTl9QVEVfVUZGRDtcbiBcbitcdC8qXG4rXHQgKiBVc2VyZmF1bHRmZC1taW5vci1yZWdpc3RlcmVkIFZNQXMgc2hvdWxkIG5vdCBiZSBjb2xsYXBzZWQsIGFzXG4rXHQgKiB1c2Vyc3BhY2UgaXMgZXhwZWN0aW5nIHRvIGV4cGxpY2l0bHkgaW5zdGFsbCBQVEVzLlxuK1x0ICovXG4rXHRpZiAodXNlcmZhdWx0ZmRfbWlub3Iodm1hKSlcbitcdFx0cmV0dXJuIFNDQU5fUFRFX1VGRkQ7XG4rXG4gXHRmb2xpbyA9IGZpbGVtYXBfbG9ja19mb2xpbyh2bWEtXHUwMDNldm1fZmlsZS1cdTAwM2VmX21hcHBpbmcsXG4gXHRcdFx0ICAgICAgIGxpbmVhcl9wYWdlX2luZGV4KHZtYSwgaGFkZHIpKTtcbiBcdGlmIChJU19FUlIoZm9saW8pKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3VmZmQtdW5pdC10ZXN0cy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC11bml0LXRlc3RzLmNcbmluZGV4IGVmOWIzOTU2YmRjZmQuLjZmMjM2MGY5Yjc1ZGIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLXVuaXQtdGVzdHMuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vdWZmZC11bml0LXRlc3RzLmNcbkBAIC01MTgsMTkgKzUxOCwzNCBAQCBzdGF0aWMgdm9pZCB1ZmZkX3dwX2ZvcmtfcGluX3dpdGhfZXZlbnRfdGVzdCh1ZmZkX2dsb2JhbF90ZXN0X29wdHNfdCAqZ29wdHMsIHVmZlxuIFx0dWZmZF93cF9mb3JrX3Bpbl90ZXN0X2NvbW1vbihnb3B0cywgYXJncywgdHJ1ZSk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGNoZWNrX21lbW9yeV9jb250ZW50cyh1ZmZkX2dsb2JhbF90ZXN0X29wdHNfdCAqZ29wdHMsIGNoYXIgKnApXG4rc3RhdGljIGludCBfX2NoZWNrX21lbW9yeV9jb250ZW50cyh1bnNpZ25lZCBsb25nIG9mZnNldCxcbitcdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG4rXHRcdFx0XHQgICB1ZmZkX2dsb2JhbF90ZXN0X29wdHNfdCAqZ29wdHMsXG4rXHRcdFx0XHQgICBjaGFyICpwKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgaSwgajtcbiBcdHVpbnQ4X3QgZXhwZWN0ZWRfYnl0ZTtcbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIGdvcHRzLVx1MDAzZW5yX3BhZ2VzOyArK2kpIHtcbitcdGlmIChucl9wYWdlcyArIG9mZnNldCBcdTAwM2MgbnJfcGFnZXMpXG4rXHRcdGVycihcIm92ZXJmbG93IGluIG1lbW9yeSBjaGVja1wiKTtcbitcdGlmIChucl9wYWdlcyArIG9mZnNldCBcdTAwM2UgZ29wdHMtXHUwMDNlbnJfcGFnZXMpXG4rXHRcdGVycihcIm91dCBvZiBib3VuZHMgbWVtb3J5IGNoZWNrXCIpO1xuK1xuK1x0Zm9yIChpID0gb2Zmc2V0OyBpIFx1MDAzYyBvZmZzZXQgKyBucl9wYWdlczsgKytpKSB7XG4gXHRcdGV4cGVjdGVkX2J5dGUgPSB+KCh1aW50OF90KShpICUgKCh1aW50OF90KS0xKSkpO1xuIFx0XHRmb3IgKGogPSAwOyBqIFx1MDAzYyBnb3B0cy1cdTAwM2VwYWdlX3NpemU7IGorKykge1xuIFx0XHRcdHVpbnQ4X3QgdiA9ICoodWludDhfdCAqKShwICsgKGkgKiBnb3B0cy1cdTAwM2VwYWdlX3NpemUpICsgaik7XG4gXHRcdFx0aWYgKHYgIT0gZXhwZWN0ZWRfYnl0ZSlcbi1cdFx0XHRcdGVycihcInVuZXhwZWN0ZWQgcGFnZSBjb250ZW50c1wiKTtcbitcdFx0XHRcdHJldHVybiAxO1xuIFx0XHR9XG4gXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBjaGVja19tZW1vcnlfY29udGVudHModWZmZF9nbG9iYWxfdGVzdF9vcHRzX3QgKmdvcHRzLCBjaGFyICpwKVxuK3tcbitcdHJldHVybiBfX2NoZWNrX21lbW9yeV9jb250ZW50cygwLCBnb3B0cy1cdTAwM2Vucl9wYWdlcywgZ29wdHMsIHApO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCB1ZmZkX21pbm9yX3Rlc3RfY29tbW9uKHVmZmRfZ2xvYmFsX3Rlc3Rfb3B0c190ICpnb3B0cywgYm9vbCB0ZXN0X2NvbGxhcHNlLCBib29sIHRlc3Rfd3ApXG5AQCAtNTM5LDYgKzU1NCw4IEBAIHN0YXRpYyB2b2lkIHVmZmRfbWlub3JfdGVzdF9jb21tb24odWZmZF9nbG9iYWxfdGVzdF9vcHRzX3QgKmdvcHRzLCBib29sIHRlc3RfY29sXG4gXHRwdGhyZWFkX3QgdWZmZF9tb247XG4gXHRjaGFyIGMgPSAnXFwwJztcbiBcdHN0cnVjdCB1ZmZkX2FyZ3MgYXJncyA9IHsgMCB9O1xuK1x0dW5zaWduZWQgbG9uZyBjaGVja2VkID0gMDtcbitcdGJvb2wgYmFkX2NvbnRlbnRzO1xuIFx0YXJncy5nb3B0cyA9IGdvcHRzO1xuIFxuIFx0LypcbkBAIC01NjQsMjQgKzU4MSw2NSBAQCBzdGF0aWMgdm9pZCB1ZmZkX21pbm9yX3Rlc3RfY29tbW9uKHVmZmRfZ2xvYmFsX3Rlc3Rfb3B0c190ICpnb3B0cywgYm9vbCB0ZXN0X2NvbFxuIFx0aWYgKHB0aHJlYWRfY3JlYXRlKFx1MDAyNnVmZmRfbW9uLCBOVUxMLCB1ZmZkX3BvbGxfdGhyZWFkLCBcdTAwMjZhcmdzKSlcbiBcdFx0ZXJyKFwidWZmZF9wb2xsX3RocmVhZCBjcmVhdGVcIik7XG4gXG4rXHRpZiAodGVzdF9jb2xsYXBzZSkge1xuK1x0XHQvKlxuK1x0XHQgKiBSZWFkIGp1c3QgYSBzaW5nbGUgcGFnZSBhbmQgdHJ5IGNvbGxhcHNpbmcuIFRoZSBjb2xsYXBzZVxuK1x0XHQgKiBzaG91bGQgZWl0aGVyIGJlIHJlamVjdGVkIG9yIGJlIGEgbm8tb3AuXG4rXHRcdCAqL1xuK1x0XHRpZiAoX19jaGVja19tZW1vcnlfY29udGVudHMoMCwgMSwgZ29wdHMsIGdvcHRzLVx1MDAzZWFyZWFfZHN0X2FsaWFzKSlcbitcdFx0XHRlcnIoXCJ1bmV4cGVjdGVkIG1lbW9yeSBjb250ZW50cyBiZWZvcmUgY29sbGFwc2VcIik7XG4rXG4rXHRcdC8qIE1BRFZfQ09MTEFQU0UgbWlnaHQgcmV0dXJuIEVJTlZBTCBmb3IgdWZmZC1taW5vciBWTUFzLiAqL1xuK1x0XHRtYWR2aXNlKGdvcHRzLVx1MDAzZWFyZWFfZHN0X2FsaWFzLCBnb3B0cy1cdTAwM2Vucl9wYWdlcyAqIGdvcHRzLVx1MDAzZXBhZ2Vfc2l6ZSxcbitcdFx0XHRNQURWX0NPTExBUFNFKTtcbitcdFx0LypcbitcdFx0ICogSWYgdGhlIGFib3ZlIGNvbGxhcHNlIG1hcHBlZCBwYWdlcyB0aGF0IHdlcmUgbm90IGV4cGxpY2l0bHlcbitcdFx0ICogQ09OVElOVUUnZCwgdGhlIGJlbG93IF9fY2hlY2tfbWVtb3J5X2NvbnRlbnRzKCkgd2lsbCBub3RcbitcdFx0ICogZmF1bHQgb24gc29tZSBwYWdlcywgcmVzdWx0aW5nIGluIGluY29ycmVjdCBjb250ZW50cy4gVGhlXG4rXHRcdCAqIFBURSBmb3IgdGhlIGZpcnN0IHBhZ2UgbWF5IGdldCByZXRyYWN0ZWQsIHNvIGF2b2lkIGNoZWNraW5nXG4rXHRcdCAqIHRoYXQgcGFnZSwgYXMgd2UgbWlnaHQgdGFrZSBhIHNlY29uZCBmYXVsdCwgZmxpcHBpbmcgdGhlXG4rXHRcdCAqIGNvbnRlbnRzIGEgc2Vjb25kIHRpbWUuXG4rXHRcdCAqL1xuK1x0XHRjaGVja2VkID0gMTtcbitcdH1cbitcbiBcdC8qXG4gXHQgKiBSZWFkIGVhY2ggb2YgdGhlIHBhZ2VzIGJhY2sgdXNpbmcgdGhlIFVGRkQtcmVnaXN0ZXJlZCBtYXBwaW5nLiBXZVxuIFx0ICogZXhwZWN0IHRoYXQgdGhlIGZpcnN0IHRpbWUgd2UgdG91Y2ggYSBwYWdlLCBpdCB3aWxsIHJlc3VsdCBpbiBhIG1pbm9yXG4gXHQgKiBmYXVsdC4gdWZmZF9wb2xsX3RocmVhZCB3aWxsIHJlc29sdmUgdGhlIGZhdWx0IGJ5IGJpdC1mbGlwcGluZyB0aGVcbiBcdCAqIHBhZ2UncyBjb250ZW50cywgYW5kIHRoZW4gaXNzdWluZyBhIENPTlRJTlVFIGlvY3RsLlxuIFx0ICovXG4tXHRjaGVja19tZW1vcnlfY29udGVudHMoZ29wdHMsIGdvcHRzLVx1MDAzZWFyZWFfZHN0X2FsaWFzKTtcbitcdGJhZF9jb250ZW50cyA9ICEhX19jaGVja19tZW1vcnlfY29udGVudHMoY2hlY2tlZCwgZ29wdHMtXHUwMDNlbnJfcGFnZXMgLSBjaGVja2VkLFxuK1x0XHRcdFx0XHRcdCAgICBnb3B0cywgZ29wdHMtXHUwMDNlYXJlYV9kc3RfYWxpYXMpO1xuIFxuIFx0aWYgKHdyaXRlKGdvcHRzLVx1MDAzZXBpcGVmZFsxXSwgXHUwMDI2Yywgc2l6ZW9mKGMpKSAhPSBzaXplb2YoYykpXG4gXHRcdGVycihcInBpcGUgd3JpdGVcIik7XG4gXHRpZiAocHRocmVhZF9qb2luKHVmZmRfbW9uLCBOVUxMKSlcbiBcdFx0ZXJyKFwiam9pbigpIGZhaWxlZFwiKTtcbiBcbitcdGlmIChiYWRfY29udGVudHMgXHUwMDI2XHUwMDI2IHRlc3RfY29sbGFwc2UpIHtcbitcdFx0dWZmZF90ZXN0X2ZhaWwoXCJ1bmV4cGVjdGVkIG1lbW9yeSBjb250ZW50cyBhZnRlciBjb2xsYXBzZVwiKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0aWYgKGJhZF9jb250ZW50cykge1xuK1x0XHR1ZmZkX3Rlc3RfZmFpbChcInVuZXhwZWN0ZWQgbWVtb3J5IGNvbnRlbnRzXCIpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4gXHRpZiAodGVzdF9jb2xsYXBzZSkge1xuK1x0XHQvKlxuK1x0XHQgKiBNQURWX0NPTExBUFNFIHdpbGwgZmFpbCB1bmxlc3MgdXNlcmZhdWx0ZmQtbWlub3IgaXNcbitcdFx0ICogdW5yZWdpc3RlcmVkLlxuK1x0XHQgKi9cbitcdFx0aWYgKHVmZmRfdW5yZWdpc3Rlcihnb3B0cy1cdTAwM2V1ZmZkLCBnb3B0cy1cdTAwM2VhcmVhX2RzdF9hbGlhcyxcbitcdFx0XHRcdCAgICBnb3B0cy1cdTAwM2Vucl9wYWdlcyAqIGdvcHRzLVx1MDAzZXBhZ2Vfc2l6ZSkpXG4rXHRcdFx0ZXJyKFwidWZmZF91bnJlZ2lzdGVyIGJlZm9yZSBNQURWX0NPTExBUFNFIGZhaWxlZFwiKTtcbitcbitcdFx0LyogTUFEVl9DT0xMQVBTRSBzaG91bGQgc3VjY2VlZCB3aXRoIHVzZXJmYXVsdGZkIHVucmVnaXN0ZXJlZC4gKi9cbiBcdFx0aWYgKG1hZHZpc2UoZ29wdHMtXHUwMDNlYXJlYV9kc3RfYWxpYXMsIGdvcHRzLVx1MDAzZW5yX3BhZ2VzICogZ29wdHMtXHUwMDNlcGFnZV9zaXplLFxuIFx0XHRcdCAgICBNQURWX0NPTExBUFNFKSkge1xuLVx0XHRcdC8qIEl0J3MgZmluZSB0byBmYWlsIGZvciB0aGlzIG9uZS4uLiAqL1xuLVx0XHRcdHVmZmRfdGVzdF9za2lwKFwiTUFEVl9DT0xMQVBTRSBmYWlsZWRcIik7XG4rXHRcdFx0dWZmZF90ZXN0X2ZhaWwoXCJNQURWX0NPTExBUFNFIGZhaWxlZFwiKTtcbiBcdFx0XHRyZXR1cm47XG4gXHRcdH1cbiBcbkBAIC01OTMsNyArNjUxLDEwIEBAIHN0YXRpYyB2b2lkIHVmZmRfbWlub3JfdGVzdF9jb21tb24odWZmZF9nbG9iYWxfdGVzdF9vcHRzX3QgKmdvcHRzLCBib29sIHRlc3RfY29sXG4gXHRcdCAqIFRoaXMgd29uJ3QgY2F1c2UgdWZmZC1mYXVsdCAtIGl0IHB1cmVseSBqdXN0IG1ha2VzIHN1cmUgdGhlcmVcbiBcdFx0ICogd2FzIG5vIGNvcnJ1cHRpb24uXG4gXHRcdCAqL1xuLVx0XHRjaGVja19tZW1vcnlfY29udGVudHMoZ29wdHMsIGdvcHRzLVx1MDAzZWFyZWFfZHN0X2FsaWFzKTtcbitcdFx0aWYgKGNoZWNrX21lbW9yeV9jb250ZW50cyhnb3B0cywgZ29wdHMtXHUwMDNlYXJlYV9kc3RfYWxpYXMpKSB7XG4rXHRcdFx0dWZmZF90ZXN0X2ZhaWwoXCJ1bmV4cGVjdGVkIG1lbW9yeSBjb250ZW50c1wiKTtcbitcdFx0XHRyZXR1cm47XG4rXHRcdH1cbiBcdH1cbiBcbiBcdGlmIChhcmdzLm1pc3NpbmdfZmF1bHRzICE9IDAgfHwgYXJncy5taW5vcl9mYXVsdHMgIT0gZ29wdHMtXHUwMDNlbnJfcGFnZXMpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwMjo0OToyNi4yNTY1NTU4ODRaIiwiU2VxIjozOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTMzMDM1NDQ3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBvdGVudGlhbCBOZWVkIGZvciBEZWRpY2F0ZWQgS01TQU4gRnV6emluZyoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBnaXZlbiBhIGtlcm5lbCBwYXRjaCBhbmQgSSBuZWVkIHRvIGRldGVybWluZSBpZiBpdCB3YXJyYW50cyBpdHMgb3duIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIExldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEknbGwgZXhhbWluZSB0aGUgcGF0Y2ggaXRzZWxmLlxuXG5SaWdodCwgdGhlIGRpZmYgc2hvd3MgYSBtb2RpZmljYXRpb24gdG8gYG1tL2todWdlcGFnZWQuY2AuIEl0IGxvb2tzIGxpa2UgdGhleSd2ZSBhZGRlZCBhIG5ldyBjaGVjayB3aXRoaW4gYHRyeV9jb2xsYXBzZV9wdGVfbWFwcGVkX3RocGAuIFNwZWNpZmljYWxseSwgdGhleSdyZSBub3cgcHJldmVudGluZyB0aGUgY29sbGFwc2luZyBvZiBUSFBzIChUcmFuc3BhcmVudCBIdWdlIFBhZ2VzKSBpZiBhIFZNQSAoVmlydHVhbCBNZW1vcnkgQXJlYSkgaXMgYXNzb2NpYXRlZCB3aXRoIGEgYHVzZXJmYXVsdGZkX21pbm9yYCByZWdpc3RyYXRpb24uIFRoZSBjb21tZW50IG1lbnRpb25zIHRoYXQgdXNlciBzcGFjZSBleHBlY3RzIHRvIGV4cGxpY2l0bHkgaW5zdGFsbCBQVEVzIGluIHRoZXNlIGNhc2VzLCBzbyBjb2xsYXBzaW5nIHdvdWxkIGJlIGluY29ycmVjdC5cblxuVGhlcmUncyBhbHNvIGEgbm90ZSBhYm91dCBzZWxmdGVzdCB1cGRhdGVzIGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLXVuaXQtdGVzdHMuY2AuIFRoYXQncyBnb29kLCBpdCBtZWFucyB0aGV5J3JlIGFkZGluZyB0ZXN0cywgd2hpY2ggaW5jcmVhc2VzIG15IGNvbmZpZGVuY2UgdGhhdCB0aGUgaW50ZW5kZWQgYmVoYXZpb3IgaXMgY29ycmVjdGx5IGltcGxlbWVudGVkLlxuXG5Ob3csIG15IGZvY3VzIGlzIG9uIGB0cnlfY29sbGFwc2VfcHRlX21hcHBlZF90aHBgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcG90ZW50aWFsIEtNU0FOIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNvZGUgcGF0aC4gSSdsbCBlaXRoZXIgZ3JlcCBmb3IgcmVsYXRlZCByZWZlcmVuY2VzIG9yIGp1c3QgcmVhZCB0aGUgY29kZSBvZiB0aGF0IGZ1bmN0aW9uLiBJJ20gbG9va2luZyBmb3Igd2hlcmUgdGhpcyBuZXcgYHVzZXJmYXVsdGZkX21pbm9yYCBjaGVjayBpcyBpbnRlZ3JhdGVkIGludG8gdGhlIGxhcmdlciBwcm9jZXNzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGF0YSBmbG93cywgcG90ZW50aWFsIHJhY2VzLCBhbmQgYXJlYXMgd2hlcmUgdGhpcyBuZXcgbG9naWMgY291bGQgaW50cm9kdWNlIG1lbW9yeSBzYWZldHkgaXNzdWVzLiBJcyB0aGlzIG5ldyBjaGVjayBzdWZmaWNpZW50LCBvciBkb2VzIGl0IGludHJvZHVjZSBhbiBlZGdlIGNhc2UgdGhhdCBuZWVkcyBkZWRpY2F0ZWQgYXR0ZW50aW9uIHVuZGVyIGZ1enppbmc/IFNwZWNpZmljYWxseSwgSSdsbCBuZWVkIHRvIHRoaW5rIGFib3V0OlxuXG4qICAgSG93IGlzIHRoZSBgdXNlcmZhdWx0ZmRfbWlub3JgIGZsYWcgc2V0IGFuZCByZXNldD8gSXMgdGhlcmUgYSByYWNlIGNvbmRpdGlvbiB3aXRoIGl0P1xuKiAgIEFyZSB0aGVyZSBvdGhlciByZWxhdGVkIGRhdGEgc3RydWN0dXJlcyB0aGF0IGFyZSB1cGRhdGVkIGFsb25nc2lkZSB3aXRoIHRoZSBWTUE/XG4qICAgSG93IGlzIHRoaXMgY2hlY2sgY29vcmRpbmF0ZWQgd2l0aGluIHRoZSBraHVnZXBhZ2VkIGJhY2tncm91bmQgdGhyZWFkP1xuXG5UaGUgZ29hbCBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBjaGFuZ2UgbWlnaHQgaW50cm9kdWNlIGEgbmV3IG1lbW9yeSBlcnJvciBzdXJmYWNlLCBvciBhIG5ldyB3YXkgdG8gdHJpZ2dlciBhbiBleGlzdGluZyBlcnJvciwgdGhhdCBLTVNBTiB3b3VsZCBjYXRjaCAqaWYqIGl0IHdhcyBmdXp6ZWQgd2l0aCB0aGlzIGNvZGUgaW4gbWluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzkyNSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3NywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEwVDAyOjQ5OjMxLjU4NjkxMjk3N1oiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTczNjI0MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2todWdlcGFnZWQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9raHVnZXBhZ2VkLmM9MTgxNT1zdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBzZXRfaHVnZV9wbWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0xODUwLVxcbm1tL2todWdlcGFnZWQuYzoxODUxOnN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IHRyeV9jb2xsYXBzZV9wdGVfbWFwcGVkX3RocChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbm1tL2todWdlcGFnZWQuYy0xODUyLVxcdFxcdGJvb2wgaW5zdGFsbF9wbWQpXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmM9MjA5Nj12b2lkIGNvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMjA5OC17XFxubW0va2h1Z2VwYWdlZC5jOjIwOTk6XFx0dHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwKG1tLCBhZGRyLCBpbnN0YWxsX3BtZCk7XFxubW0va2h1Z2VwYWdlZC5jLTIxMDAtfVxcbi0tXFxubW0va2h1Z2VwYWdlZC5jPTIyNDk9c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2VfZmlsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTI2MjgtXFx0ICogUmVtb3ZlIHB0ZSBwYWdlIHRhYmxlcywgc28gd2UgY2FuIHJlLWZhdWx0IHRoZSBwYWdlIGFzIGh1Z2UuXFxubW0va2h1Z2VwYWdlZC5jOjI2Mjk6XFx0ICogSWYgTUFEVl9DT0xMQVBTRSwgYWRqdXN0IHJlc3VsdCB0byBjYWxsIHRyeV9jb2xsYXBzZV9wdGVfbWFwcGVkX3RocCgpLlxcbm1tL2todWdlcGFnZWQuYy0yNjMwLVxcdCAqL1xcbi0tXFxubW0va2h1Z2VwYWdlZC5jPTI3OTE9c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgY29sbGFwc2Vfc2luZ2xlX3BtZCh1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMjgzNS1cXHRcXHRlbHNlXFxubW0va2h1Z2VwYWdlZC5jOjI4MzY6XFx0XFx0XFx0cmVzdWx0ID0gdHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwKG1tLCBhZGRyLFxcbm1tL2todWdlcGFnZWQuYy0yODM3LVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIWNjLVxcdTAwM2Vpc19raHVnZXBhZ2VkKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDI6NDk6MzEuNjQ0MjgxMTg3WiIsIlNlcSI6NDEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyMzA1NTY0MDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgaGFwcGVuaW5nIGFyb3VuZCBsaW5lIDE4OTQgaW4gYG1tL2todWdlcGFnZWQuY2AuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoZXJlJ3MgYSBzcGVjaWZpYyBmdW5jdGlvbiBvciBsb2dpYyBiZWluZyBleGVjdXRlZCB0aGVyZSB3aXRoaW4gdGhlIGtlcm5lbCdzIGh1Z2UgcGFnZSBtYW5hZ2VtZW50LiBHaXZlbiB0aGUgZmlsZSwgaXQncyBoaWdobHkgbGlrZWx5IHRoaXMgY29kZSBkZWFscyB3aXRoIHRoZSBrSHVnZXBhZ2VkIGRhZW1vbiwgYW5kIGhvdyBpdCBtYW5hZ2VzIG9yIGludGVyYWN0cyB3aXRoIGh1Z2UgcGFnZXMuIEknbGwgbmVlZCB0byBsb29rIGZvciBjYWxscyB0byB0aGUgZnVuY3Rpb24sIGFzIHdlbGwgYXMgdGhlIHN1cnJvdW5kaW5nIHZhcmlhYmxlIGFzc2lnbm1lbnRzLiBJIHN1c3BlY3QgdGhlcmUgbWF5IGJlIGludGVyYWN0aW9ucyBhcm91bmQgdGhlIGBraHVnZXBhZ2VkYCBkYWVtb24gYW5kIGhvdyBpdCBpcyBpbnRlcmFjdGluZyB3aXRoIHRoZSBtZW1vcnkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUyNzYsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwMjo0OTozMy44NzQ4NDA3OFoiLCJTZXEiOjQyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDgzMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0va2h1Z2VwYWdlZC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE4ODAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE4ODA6XFx0XFx0LypcXG4xODgxOlxcdFxcdCAqIElmIHdlIGFyZSBoZXJlLCB3ZSd2ZSBzdWNjZWVkZWQgaW4gcmVwbGFjaW5nIGFsbCB0aGUgbmF0aXZlIHBhZ2VzXFxuMTg4MjpcXHRcXHQgKiBpbiB0aGUgcGFnZSBjYWNoZSB3aXRoIGEgc2luZ2xlIGh1Z2VwYWdlLiBJZiBhIG1tIHdlcmUgdG8gZmF1bHQtaW5cXG4xODgzOlxcdFxcdCAqIHRoaXMgbWVtb3J5IChtYXBwZWQgYnkgYSBzdWl0YWJseSBhbGlnbmVkIFZNQSksIHdlJ2QgZ2V0IHRoZSBodWdlcGFnZVxcbjE4ODQ6XFx0XFx0ICogYW5kIG1hcCBpdCBieSBhIFBNRCwgcmVnYXJkbGVzcyBvZiBzeXNmcyBUSFAgc2V0dGluZ3MuIEFzIHN1Y2gsIGxldCdzXFxuMTg4NTpcXHRcXHQgKiBhbmFsb2dvdXNseSBlbGlkZSBzeXNmcyBUSFAgc2V0dGluZ3MgaGVyZSBhbmQgZm9yY2UgY29sbGFwc2UuXFxuMTg4NjpcXHRcXHQgKi9cXG4xODg3OlxcdFxcdGlmICghdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXIodm1hLCB2bWEtXFx1MDAzZXZtX2ZsYWdzLCBUVkFfRk9SQ0VEX0NPTExBUFNFLCBQTURfT1JERVIpKVxcbjE4ODg6XFx0XFx0XFx0cmV0dXJuIFNDQU5fVk1BX0NIRUNLO1xcbjE4ODk6XFx0XFxuMTg5MDpcXHRcXHQvKlxcbjE4OTE6XFx0XFx0ICogS2VlcCBwbWQgcGd0YWJsZSB3aGlsZSB0aGUgdWZmZCBiaXQgaXMgaW4gdXNlOyBzZWUgY29tbWVudCBpblxcbjE4OTI6XFx0XFx0ICogcmV0cmFjdF9wYWdlX3RhYmxlcygpLlxcbjE4OTM6XFx0XFx0ICovXFxuMTg5NDpcXHRcXHRpZiAodXNlcmZhdWx0ZmRfcHJvdGVjdGVkKHZtYSkpXFxuMTg5NTpcXHRcXHRcXHRyZXR1cm4gU0NBTl9QVEVfVUZGRDtcXG4xODk2OlxcdFxcbjE4OTc6XFx0XFx0LypcXG4xODk4OlxcdFxcdCAqIFVzZXJmYXVsdGZkLW1pbm9yLXJlZ2lzdGVyZWQgVk1BcyBzaG91bGQgbm90IGJlIGNvbGxhcHNlZCwgYXNcXG4xODk5OlxcdFxcdCAqIHVzZXJzcGFjZSBpcyBleHBlY3RpbmcgdG8gZXhwbGljaXRseSBpbnN0YWxsIFBURXMuXFxuMTkwMDpcXHRcXHQgKi9cXG4xOTAxOlxcdFxcdGlmICh1c2VyZmF1bHRmZF9taW5vcih2bWEpKVxcbjE5MDI6XFx0XFx0XFx0cmV0dXJuIFNDQU5fUFRFX1VGRkQ7XFxuMTkwMzpcXHRcXG4xOTA0OlxcdFxcdGZvbGlvID0gZmlsZW1hcF9sb2NrX2ZvbGlvKHZtYS1cXHUwMDNldm1fZmlsZS1cXHUwMDNlZl9tYXBwaW5nLFxcbjE5MDU6XFx0XFx0XFx0XFx0ICAgICAgIGxpbmVhcl9wYWdlX2luZGV4KHZtYSwgaGFkZHIpKTtcXG4xOTA2OlxcdFxcdGlmIChJU19FUlIoZm9saW8pKVxcbjE5MDc6XFx0XFx0XFx0cmV0dXJuIFNDQU5fUEFHRV9OVUxMO1xcbjE5MDg6XFx0XFxuMTkwOTpcXHRcXHRpZiAoIWlzX3BtZF9vcmRlcihmb2xpb19vcmRlcihmb2xpbykpKSB7XFxuMTkxMDpcXHRcXHRcXHRyZXN1bHQgPSBTQ0FOX1BBR0VfQ09NUE9VTkQ7XFxuMTkxMTpcXHRcXHRcXHRnb3RvIGRyb3BfZm9saW87XFxuMTkxMjpcXHRcXHR9XFxuMTkxMzpcXHRcXG4xOTE0OlxcdFxcdHJlc3VsdCA9IGZpbmRfcG1kX29yX3RocF9vcl9ub25lKG1tLCBoYWRkciwgXFx1MDAyNnBtZCk7XFxuMTkxNTpcXHRcXHRzd2l0Y2ggKHJlc3VsdCkge1xcbjE5MTY6XFx0XFx0Y2FzZSBTQ0FOX1NVQ0NFRUQ6XFxuMTkxNzpcXHRcXHRcXHRicmVhaztcXG4xOTE4OlxcdFxcdGNhc2UgU0NBTl9OT19QVEVfVEFCTEU6XFxuMTkxOTpcXHRcXHRcXHQvKlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMFQwMjo0OTozMy44NzUwNTA4N1oiLCJTZXEiOjQzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2MjEyMzc1MTQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoaXMgUGF0Y2g6IEtNU0FOIEV4ZW1wdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIHRoZSBwYXRjaCBpdHNlbGY6IGl0J3MgYSByZWxhdGl2ZWx5IGZvY3VzZWQgY2hhbmdlLiBJbiBgbW0va2h1Z2VwYWdlZC5jYCwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgdHJ5X2NvbGxhcHNlX3B0ZV9tYXBwZWRfdGhwKClgLCBpdCBpbnRyb2R1Y2VzIGEgY2hlY2sgdXNpbmcgYHVzZXJmYXVsdGZkX21pbm9yKHZtYSlgLiBUaGlzIGlzIGEgY3J1Y2lhbCBhZGRpdGlvbjsgaXQncyBkZXNpZ25lZCB0byBwcmV2ZW50IGNvbGxhcHNpbmcgUFRFLW1hcHBlZCBUSFBzIGlmIHRoZSBWTUEgaXMgcmVnaXN0ZXJlZCB3aXRoIGB1c2VyZmF1bHRmZC1taW5vcmAuIFRoZSByYXRpb25hbGUgaXMgc3RyYWlnaHRmb3J3YXJkOiBgdXNlcmZhdWx0ZmQtbWlub3JgIHJlbGllcyBvbiB1c2Vyc3BhY2UgZXhwbGljaXRseSBpbnN0YWxsaW5nIFBURXMgdmlhIGBVRkZESU9fQ09OVElOVUVgLCBzbyBhdXRvbWF0aWMgY29sbGFwc2luZyB3b3VsZCBiZSBwcm9ibGVtYXRpYy4gVGhlIHNlY29uZCBwYXJ0IG9mIHRoZSBwYXRjaCBqdXN0IHVwZGF0ZXMgc29tZSBzZWxmdGVzdHMgdG8gcmVmbGVjdCB0aGlzIG5ldyBiZWhhdmlvci5cblxuTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uOiBkb2VzIHRoaXMgdHJpZ2dlciBhbnkgS01TQU4gY29uY2VybnM/IExldCdzIGdvIHRocm91Z2ggdGhlIGNoZWNrbGlzdC4gVW5pbml0aWFsaXplZCBtZW1vcnkgb3IgcG90ZW50aWFsIGluZm9ybWF0aW9uIGxlYWtzIGFyZSBteSBwcmltYXJ5IGNvbmNlcm5zLiBEb2VzIHRoaXMgcGF0Y2ggaW52b2x2ZSBhbGxvY2F0aW5nICpuZXcqIG1lbW9yeT8gTm8sIHRoYXQncyBhIHNpbXBsZSBcIm5vLlwiIERvZXMgaXQgY29weSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlcnNwYWNlLCBvciByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBBZ2Fpbiwgbm8uIEl0IGRvZXNuJ3Qgc2VlbSB0byBhbHRlciBhbnkgYm91bmRzIGNoZWNrcywgbW9kaWZ5IGRhdGEgbGVuZ3RocyBpbiBhIHdheSB0aGF0IGNvdWxkIGxlYWQgdG8gaXNzdWVzLCBub3IgbW9kaWZ5IGFueSB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMuIFRoZXJlJ3Mgbm8gaW50cm9kdWN0aW9uIG9yIG1vZGlmaWNhdGlvbiBvZiBrZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXJzcGFjZSwgZWl0aGVyLiBBbHNvLCB0aGVyZSdzIG5vIGNvbmRpdGlvbmFsIGxvZ2ljIHRoYXQgZGVwZW5kcyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gV2UncmUgYWxzbyBub3QgaW50cm9kdWNpbmcgYW55IG5ldyB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgbWVtb3J5LlxuXG5Fc3NlbnRpYWxseSwgdGhpcyBpcyBhIGZsYWcgY2hlY2ssIG5vdCBhIGRhdGEgc3RydWN0dXJlIG1hbmlwdWxhdGlvbiBpc3N1ZS4gSXQncyBhIGNvbmRpdGlvbmFsIGJyYW5jaCBvbiBhbiBleGlzdGluZyBgdm1hYCBmbGFnLCBiYXNlZCBvbiB0aGUgYHVzZXJmYXVsdGZkX21pbm9yYCBmdW5jdGlvbiB0aGF0IGNoZWNrcyB0aGUgVk1BJ3MgZmxhZ3MuIFRoZSBmbGFnIGl0c2VsZiBpcyBpbml0aWFsaXplZCBlbHNld2hlcmUuIFRoZXJlZm9yZSwgc2luY2UgdGhlcmUncyBubyBldmlkZW5jZSBvZiBleHBvc2luZyBvciBpbnRyb2R1Y2luZyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIEtNU0FOIGlzIG5vdCBuZWNlc3NhcnkgaGVyZS4gVGhlIG1vcmUgc3RhbmRhcmQgbWVtb3J5IG1hbmFnZW1lbnQgY2hlY2tzIGFuZCB0ZXN0cywgbGlrZSBLQVNBTiwgTE9DS0RFUCwgTU0gdGVzdHMsIGFuZCBmdXp6aW5nIHNob3VsZCBoYW5kbGUgYW55IG90aGVyIHBvdGVudGlhbCBpc3N1ZXMgbGlrZSBwYWdlIHRhYmxlIG1hbmFnZW1lbnQsIFVBRiBpc3N1ZXMsIHJhY2UgY29uZGl0aW9ucywgb3IgbG9ja2luZyBwcm9ibGVtcy5cblxuSSdtIGNvbmZpZGVudCB3ZSBjYW4gdXNlIGBzZXQtcmVzdWx0c2AgdG8gaW5kaWNhdGUgS01TQU4gaXMgbm90IHJlbGV2YW50IGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYxMzIsIk91dHB1dFRva2VucyI6MTg3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzU5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTBUMDI6NDk6NDAuMDg3NDI4MTkxWiIsIlNlcSI6NDQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUxMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgY2hlY2sgKGB1c2VyZmF1bHRmZF9taW5vcih2bWEpYCkgaW4gYHRyeV9jb2xsYXBzZV9wdGVfbWFwcGVkX3RocCgpYCB0byBwcmV2ZW50IGNvbGxhcHNpbmcgUFRFLW1hcHBlZCBUSFBzIG9uIFZNQXMgcmVnaXN0ZXJlZCB3aXRoIHVzZXJmYXVsdGZkLW1pbm9yIG1vZGUsIGFsb25nIHdpdGggY29ycmVzcG9uZGluZyBzZWxmdGVzdCB1cGRhdGVzIGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLXVuaXQtdGVzdHMuY2AuIFxcblxcblRoaXMgbW9kaWZpY2F0aW9uIGRvZXMgbm90IGFsbG9jYXRlIG5ldyBidWZmZXJzLCBtYW5pcHVsYXRlIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBkYXRhLCBhbHRlciBwYWRkaW5nIG9yIHN0cnVjdHVyZSBmaWVsZHMgY29waWVkIHRvIHVzZXJzcGFjZSwgb3IgY2hhbmdlIGFueSBkYXRhIGxlbmd0aHMvYm91bmRzIGNoZWNraW5nIHRoYXQgY291bGQgbGVhZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBsZWFrcy4gU3RhbmRhcmQgc2FuaXRpemVycyBhbmQgYnVnIGRldGVjdG9ycyAoc3VjaCBhcyBLQVNBTiBhbmQgcGFnZSB0YWJsZSBjaGVja3MpIGFyZSBzdWZmaWNpZW50IGZvciB2YWxpZGF0aW5nIHRoaXMgZnVuY3Rpb25hbGl0eSwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGRldGVjdGFibGUgb25seSBieSBLTVNBTiBhcmUgaW50cm9kdWNlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgY2hlY2sgKGB1c2VyZmF1bHRmZF9taW5vcih2bWEpYCkgaW4gYHRyeV9jb2xsYXBzZV9wdGVfbWFwcGVkX3RocCgpYCB0byBwcmV2ZW50IGNvbGxhcHNpbmcgUFRFLW1hcHBlZCBUSFBzIG9uIFZNQXMgcmVnaXN0ZXJlZCB3aXRoIHVzZXJmYXVsdGZkLW1pbm9yIG1vZGUsIGFsb25nIHdpdGggY29ycmVzcG9uZGluZyBzZWxmdGVzdCB1cGRhdGVzIGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS91ZmZkLXVuaXQtdGVzdHMuY2AuIFxcblxcblRoaXMgbW9kaWZpY2F0aW9uIGRvZXMgbm90IGFsbG9jYXRlIG5ldyBidWZmZXJzLCBtYW5pcHVsYXRlIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBkYXRhLCBhbHRlciBwYWRkaW5nIG9yIHN0cnVjdHVyZSBmaWVsZHMgY29waWVkIHRvIHVzZXJzcGFjZSwgb3IgY2hhbmdlIGFueSBkYXRhIGxlbmd0aHMvYm91bmRzIGNoZWNraW5nIHRoYXQgY291bGQgbGVhZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBsZWFrcy4gU3RhbmRhcmQgc2FuaXRpemVycyBhbmQgYnVnIGRldGVjdG9ycyAoc3VjaCBhcyBLQVNBTiBhbmQgcGFnZSB0YWJsZSBjaGVja3MpIGFyZSBzdWZmaWNpZW50IGZvciB2YWxpZGF0aW5nIHRoaXMgZnVuY3Rpb25hbGl0eSwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGRldGVjdGFibGUgb25seSBieSBLTVNBTiBhcmUgaW50cm9kdWNlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowfhxnv[1] Phase: Succeeded StartedAt: 2026-09-10 02:49:51 +0000 UTC FinishedAt: 2026-09-10 02:49:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfhxnv[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-10 02:49:51 +0000 UTC FinishedAt: 2026-09-10 02:49:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfhxnv[2] Phase: Succeeded StartedAt: 2026-09-10 02:49:51 +0000 UTC FinishedAt: 2026-09-10 06:33:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfhxnv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5acbae5f7eb3d5275120abfe698c394b7325dcec","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","USERFAULTFD"],"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":["try_collapse_pte_mapped_thp","collapse_pte_mapped_thp","madvise_collapse","collapse_single_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5acbae5f7eb3d5275120abfe698c394b7325dcec","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","USERFAULTFD"],"series_id":"eaf1d596-fa21-43e6-adef-9fa8eae996da","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-09-10 02:49:51 +0000 UTC FinishedAt: 2026-09-10 06:33:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"5acbae5f7eb3d5275120abfe698c394b7325dcec","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","USERFAULTFD"],"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":["try_collapse_pte_mapped_thp","collapse_pte_mapped_thp","madvise_collapse","collapse_single_pmd"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"5acbae5f7eb3d5275120abfe698c394b7325dcec","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","USERFAULTFD"],"series_id":"eaf1d596-fa21-43e6-adef-9fa8eae996da","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-workflowfhxnv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5acbae5f7eb3d5275120abfe698c394b7325dcec","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","USERFAULTFD"],"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":["try_collapse_pte_mapped_thp","collapse_pte_mapped_thp","madvise_collapse","collapse_single_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5acbae5f7eb3d5275120abfe698c394b7325dcec","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","USERFAULTFD"],"series_id":"eaf1d596-fa21-43e6-adef-9fa8eae996da","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-09-10 02:49:51 +0000 UTC FinishedAt: 2026-09-10 02:50:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfhxnv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5acbae5f7eb3d5275120abfe698c394b7325dcec","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","USERFAULTFD"],"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":["try_collapse_pte_mapped_thp","collapse_pte_mapped_thp","madvise_collapse","collapse_single_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5acbae5f7eb3d5275120abfe698c394b7325dcec","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","USERFAULTFD"],"series_id":"eaf1d596-fa21-43e6-adef-9fa8eae996da","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-09-10 02:49:51 +0000 UTC FinishedAt: 2026-09-10 02:49:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"5acbae5f7eb3d5275120abfe698c394b7325dcec","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","USERFAULTFD"],"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-workflowfhxnv/series-workflowfhxnv-convert-artifact-4261661713/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfhxnv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5acbae5f7eb3d5275120abfe698c394b7325dcec","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","USERFAULTFD"],"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":["try_collapse_pte_mapped_thp","collapse_pte_mapped_thp","madvise_collapse","collapse_single_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5acbae5f7eb3d5275120abfe698c394b7325dcec","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","USERFAULTFD"],"series_id":"eaf1d596-fa21-43e6-adef-9fa8eae996da","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-09-10 02:50:01 +0000 UTC FinishedAt: 2026-09-10 03:06:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfhxnv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5acbae5f7eb3d5275120abfe698c394b7325dcec","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","USERFAULTFD"],"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":["try_collapse_pte_mapped_thp","collapse_pte_mapped_thp","madvise_collapse","collapse_single_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5acbae5f7eb3d5275120abfe698c394b7325dcec","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","USERFAULTFD"],"series_id":"eaf1d596-fa21-43e6-adef-9fa8eae996da","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-09-10 02:50:01 +0000 UTC FinishedAt: 2026-09-10 03:06:09 +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:*3199d44b-680c-4faf-a366-a7b34e4da539,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-workflowfhxnv/series-workflowfhxnv-convert-artifact-4261661713/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": "aa1129d9-ed6f-47d6-bfeb-c58a89eef443", "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-workflowfhxnv/series-workflowfhxnv-build-action-188067263/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfhxnv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5acbae5f7eb3d5275120abfe698c394b7325dcec","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","USERFAULTFD"],"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":["try_collapse_pte_mapped_thp","collapse_pte_mapped_thp","madvise_collapse","collapse_single_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5acbae5f7eb3d5275120abfe698c394b7325dcec","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","USERFAULTFD"],"series_id":"eaf1d596-fa21-43e6-adef-9fa8eae996da","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-09-10 02:50:01 +0000 UTC FinishedAt: 2026-09-10 03:05:59 +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:*3199d44b-680c-4faf-a366-a7b34e4da539,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-workflowfhxnv/series-workflowfhxnv-convert-artifact-4261661713/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": "aa1129d9-ed6f-47d6-bfeb-c58a89eef443", "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-workflowfhxnv/series-workflowfhxnv-build-action-188067263/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfhxnv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5acbae5f7eb3d5275120abfe698c394b7325dcec","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","USERFAULTFD"],"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":["try_collapse_pte_mapped_thp","collapse_pte_mapped_thp","madvise_collapse","collapse_single_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5acbae5f7eb3d5275120abfe698c394b7325dcec","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","USERFAULTFD"],"series_id":"eaf1d596-fa21-43e6-adef-9fa8eae996da","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-09-10 03:06:09 +0000 UTC FinishedAt: 2026-09-10 03:06:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfhxnv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5acbae5f7eb3d5275120abfe698c394b7325dcec","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","USERFAULTFD"],"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":["try_collapse_pte_mapped_thp","collapse_pte_mapped_thp","madvise_collapse","collapse_single_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5acbae5f7eb3d5275120abfe698c394b7325dcec","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","USERFAULTFD"],"series_id":"eaf1d596-fa21-43e6-adef-9fa8eae996da","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-09-10 03:06:09 +0000 UTC FinishedAt: 2026-09-10 03:06:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfhxnv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5acbae5f7eb3d5275120abfe698c394b7325dcec","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","USERFAULTFD"],"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":["try_collapse_pte_mapped_thp","collapse_pte_mapped_thp","madvise_collapse","collapse_single_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5acbae5f7eb3d5275120abfe698c394b7325dcec","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","USERFAULTFD"],"series_id":"eaf1d596-fa21-43e6-adef-9fa8eae996da","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-09-10 03:06:09 +0000 UTC FinishedAt: 2026-09-10 03:06:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfhxnv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5acbae5f7eb3d5275120abfe698c394b7325dcec","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","USERFAULTFD"],"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":["try_collapse_pte_mapped_thp","collapse_pte_mapped_thp","madvise_collapse","collapse_single_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5acbae5f7eb3d5275120abfe698c394b7325dcec","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","USERFAULTFD"],"series_id":"eaf1d596-fa21-43e6-adef-9fa8eae996da","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-09-10 03:06:09 +0000 UTC FinishedAt: 2026-09-10 03:06:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"5acbae5f7eb3d5275120abfe698c394b7325dcec","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","USERFAULTFD"],"series_id":"eaf1d596-fa21-43e6-adef-9fa8eae996da","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-workflowfhxnv/series-workflowfhxnv-convert-artifact-761223396/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfhxnv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5acbae5f7eb3d5275120abfe698c394b7325dcec","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","USERFAULTFD"],"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":["try_collapse_pte_mapped_thp","collapse_pte_mapped_thp","madvise_collapse","collapse_single_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5acbae5f7eb3d5275120abfe698c394b7325dcec","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","USERFAULTFD"],"series_id":"eaf1d596-fa21-43e6-adef-9fa8eae996da","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-09-10 03:06:19 +0000 UTC FinishedAt: 2026-09-10 03:08:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfhxnv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5acbae5f7eb3d5275120abfe698c394b7325dcec","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","USERFAULTFD"],"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":["try_collapse_pte_mapped_thp","collapse_pte_mapped_thp","madvise_collapse","collapse_single_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5acbae5f7eb3d5275120abfe698c394b7325dcec","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","USERFAULTFD"],"series_id":"eaf1d596-fa21-43e6-adef-9fa8eae996da","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-09-10 03:06:19 +0000 UTC FinishedAt: 2026-09-10 03:08:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*aa1129d9-ed6f-47d6-bfeb-c58a89eef443,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-workflowfhxnv/series-workflowfhxnv-build-action-188067263/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-workflowfhxnv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5acbae5f7eb3d5275120abfe698c394b7325dcec","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","USERFAULTFD"],"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":["try_collapse_pte_mapped_thp","collapse_pte_mapped_thp","madvise_collapse","collapse_single_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5acbae5f7eb3d5275120abfe698c394b7325dcec","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","USERFAULTFD"],"series_id":"eaf1d596-fa21-43e6-adef-9fa8eae996da","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-09-10 03:08:35 +0000 UTC FinishedAt: 2026-09-10 03:08:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfhxnv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5acbae5f7eb3d5275120abfe698c394b7325dcec","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","USERFAULTFD"],"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":["try_collapse_pte_mapped_thp","collapse_pte_mapped_thp","madvise_collapse","collapse_single_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5acbae5f7eb3d5275120abfe698c394b7325dcec","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","USERFAULTFD"],"series_id":"eaf1d596-fa21-43e6-adef-9fa8eae996da","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-09-10 03:08:35 +0000 UTC FinishedAt: 2026-09-10 03:08:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfhxnv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5acbae5f7eb3d5275120abfe698c394b7325dcec","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","USERFAULTFD"],"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":["try_collapse_pte_mapped_thp","collapse_pte_mapped_thp","madvise_collapse","collapse_single_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5acbae5f7eb3d5275120abfe698c394b7325dcec","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","USERFAULTFD"],"series_id":"eaf1d596-fa21-43e6-adef-9fa8eae996da","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-09-10 03:08:35 +0000 UTC FinishedAt: 2026-09-10 03:24:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfhxnv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5acbae5f7eb3d5275120abfe698c394b7325dcec","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","USERFAULTFD"],"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":["try_collapse_pte_mapped_thp","collapse_pte_mapped_thp","madvise_collapse","collapse_single_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5acbae5f7eb3d5275120abfe698c394b7325dcec","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","USERFAULTFD"],"series_id":"eaf1d596-fa21-43e6-adef-9fa8eae996da","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-09-10 03:08:35 +0000 UTC FinishedAt: 2026-09-10 03:24:35 +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:*3199d44b-680c-4faf-a366-a7b34e4da539,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-workflowfhxnv/series-workflowfhxnv-convert-artifact-761223396/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": "e49ad956-1f4c-44fc-82bd-d4fb439ba7dc", "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-workflowfhxnv/series-workflowfhxnv-build-action-207446640/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfhxnv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5acbae5f7eb3d5275120abfe698c394b7325dcec","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","USERFAULTFD"],"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":["try_collapse_pte_mapped_thp","collapse_pte_mapped_thp","madvise_collapse","collapse_single_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5acbae5f7eb3d5275120abfe698c394b7325dcec","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","USERFAULTFD"],"series_id":"eaf1d596-fa21-43e6-adef-9fa8eae996da","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-09-10 03:08:35 +0000 UTC FinishedAt: 2026-09-10 03:24:33 +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:*3199d44b-680c-4faf-a366-a7b34e4da539,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-workflowfhxnv/series-workflowfhxnv-convert-artifact-761223396/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": "e49ad956-1f4c-44fc-82bd-d4fb439ba7dc", "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-workflowfhxnv/series-workflowfhxnv-build-action-207446640/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfhxnv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5acbae5f7eb3d5275120abfe698c394b7325dcec","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","USERFAULTFD"],"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":["try_collapse_pte_mapped_thp","collapse_pte_mapped_thp","madvise_collapse","collapse_single_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5acbae5f7eb3d5275120abfe698c394b7325dcec","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","USERFAULTFD"],"series_id":"eaf1d596-fa21-43e6-adef-9fa8eae996da","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-09-10 03:24:35 +0000 UTC FinishedAt: 2026-09-10 03:24:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfhxnv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5acbae5f7eb3d5275120abfe698c394b7325dcec","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","USERFAULTFD"],"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":["try_collapse_pte_mapped_thp","collapse_pte_mapped_thp","madvise_collapse","collapse_single_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5acbae5f7eb3d5275120abfe698c394b7325dcec","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","USERFAULTFD"],"series_id":"eaf1d596-fa21-43e6-adef-9fa8eae996da","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-09-10 03:24:35 +0000 UTC FinishedAt: 2026-09-10 03:24:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfhxnv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5acbae5f7eb3d5275120abfe698c394b7325dcec","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","USERFAULTFD"],"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":["try_collapse_pte_mapped_thp","collapse_pte_mapped_thp","madvise_collapse","collapse_single_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5acbae5f7eb3d5275120abfe698c394b7325dcec","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","USERFAULTFD"],"series_id":"eaf1d596-fa21-43e6-adef-9fa8eae996da","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-09-10 03:24:35 +0000 UTC FinishedAt: 2026-09-10 03:26:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfhxnv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5acbae5f7eb3d5275120abfe698c394b7325dcec","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","USERFAULTFD"],"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":["try_collapse_pte_mapped_thp","collapse_pte_mapped_thp","madvise_collapse","collapse_single_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5acbae5f7eb3d5275120abfe698c394b7325dcec","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","USERFAULTFD"],"series_id":"eaf1d596-fa21-43e6-adef-9fa8eae996da","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-09-10 03:24:35 +0000 UTC FinishedAt: 2026-09-10 03:26:20 +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:*e49ad956-1f4c-44fc-82bd-d4fb439ba7dc,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-workflowfhxnv/series-workflowfhxnv-build-action-207446640/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-workflowfhxnv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5acbae5f7eb3d5275120abfe698c394b7325dcec","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","USERFAULTFD"],"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":["try_collapse_pte_mapped_thp","collapse_pte_mapped_thp","madvise_collapse","collapse_single_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5acbae5f7eb3d5275120abfe698c394b7325dcec","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","USERFAULTFD"],"series_id":"eaf1d596-fa21-43e6-adef-9fa8eae996da","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-09-10 03:26:30 +0000 UTC FinishedAt: 2026-09-10 06:33:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfhxnv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5acbae5f7eb3d5275120abfe698c394b7325dcec","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","USERFAULTFD"],"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":["try_collapse_pte_mapped_thp","collapse_pte_mapped_thp","madvise_collapse","collapse_single_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5acbae5f7eb3d5275120abfe698c394b7325dcec","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","USERFAULTFD"],"series_id":"eaf1d596-fa21-43e6-adef-9fa8eae996da","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-09-10 03:26:30 +0000 UTC FinishedAt: 2026-09-10 06:33:24 +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":["try_collapse_pte_mapped_thp","collapse_pte_mapped_thp","madvise_collapse","collapse_single_pmd"],"skip_cover_check":true},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:*aa1129d9-ed6f-47d6-bfeb-c58a89eef443,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e49ad956-1f4c-44fc-82bd-d4fb439ba7dc,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-workflowfhxnv/series-workflowfhxnv-build-action-188067263/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-workflowfhxnv/series-workflowfhxnv-build-action-207446640/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowfhxnv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5acbae5f7eb3d5275120abfe698c394b7325dcec","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","USERFAULTFD"],"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":["try_collapse_pte_mapped_thp","collapse_pte_mapped_thp","madvise_collapse","collapse_single_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5acbae5f7eb3d5275120abfe698c394b7325dcec","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","USERFAULTFD"],"series_id":"eaf1d596-fa21-43e6-adef-9fa8eae996da","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-09-10 03:26:30 +0000 UTC FinishedAt: 2026-09-10 03:26:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfhxnv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5acbae5f7eb3d5275120abfe698c394b7325dcec","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","USERFAULTFD"],"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":["try_collapse_pte_mapped_thp","collapse_pte_mapped_thp","madvise_collapse","collapse_single_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5acbae5f7eb3d5275120abfe698c394b7325dcec","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","USERFAULTFD"],"series_id":"eaf1d596-fa21-43e6-adef-9fa8eae996da","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-09-10 03:26:30 +0000 UTC FinishedAt: 2026-09-10 03:26:35 +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":["try_collapse_pte_mapped_thp","collapse_pte_mapped_thp","madvise_collapse","collapse_single_pmd"],"skip_cover_check":true},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-workflowfhxnv/series-workflowfhxnv-convert-artifact-2047058797/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfhxnv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5acbae5f7eb3d5275120abfe698c394b7325dcec","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","USERFAULTFD"],"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":["try_collapse_pte_mapped_thp","collapse_pte_mapped_thp","madvise_collapse","collapse_single_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5acbae5f7eb3d5275120abfe698c394b7325dcec","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","USERFAULTFD"],"series_id":"eaf1d596-fa21-43e6-adef-9fa8eae996da","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-09-10 03:26:30 +0000 UTC FinishedAt: 2026-09-10 03:26:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfhxnv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5acbae5f7eb3d5275120abfe698c394b7325dcec","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","USERFAULTFD"],"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":["try_collapse_pte_mapped_thp","collapse_pte_mapped_thp","madvise_collapse","collapse_single_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5acbae5f7eb3d5275120abfe698c394b7325dcec","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","USERFAULTFD"],"series_id":"eaf1d596-fa21-43e6-adef-9fa8eae996da","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-09-10 03:26:30 +0000 UTC FinishedAt: 2026-09-10 03:26:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfhxnv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5acbae5f7eb3d5275120abfe698c394b7325dcec","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","USERFAULTFD"],"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":["try_collapse_pte_mapped_thp","collapse_pte_mapped_thp","madvise_collapse","collapse_single_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5acbae5f7eb3d5275120abfe698c394b7325dcec","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","USERFAULTFD"],"series_id":"eaf1d596-fa21-43e6-adef-9fa8eae996da","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-09-10 03:26:30 +0000 UTC FinishedAt: 2026-09-10 03:26:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfhxnv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5acbae5f7eb3d5275120abfe698c394b7325dcec","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","USERFAULTFD"],"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":["try_collapse_pte_mapped_thp","collapse_pte_mapped_thp","madvise_collapse","collapse_single_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5acbae5f7eb3d5275120abfe698c394b7325dcec","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","USERFAULTFD"],"series_id":"eaf1d596-fa21-43e6-adef-9fa8eae996da","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-09-10 03:26:40 +0000 UTC FinishedAt: 2026-09-10 06:33:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfhxnv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5acbae5f7eb3d5275120abfe698c394b7325dcec","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","USERFAULTFD"],"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":["try_collapse_pte_mapped_thp","collapse_pte_mapped_thp","madvise_collapse","collapse_single_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5acbae5f7eb3d5275120abfe698c394b7325dcec","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","USERFAULTFD"],"series_id":"eaf1d596-fa21-43e6-adef-9fa8eae996da","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-09-10 03:26:40 +0000 UTC FinishedAt: 2026-09-10 06:33:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*aa1129d9-ed6f-47d6-bfeb-c58a89eef443,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e49ad956-1f4c-44fc-82bd-d4fb439ba7dc,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-workflowfhxnv/series-workflowfhxnv-build-action-188067263/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-workflowfhxnv/series-workflowfhxnv-build-action-207446640/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-workflowfhxnv/series-workflowfhxnv-convert-artifact-2047058797/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,}