Name: series-workflowblqnm Phase: Succeeded StartedAt: 2026-08-01 03:14:49 +0000 UTC FinishedAt: 2026-08-01 07:19:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowblqnm[0] Phase: Succeeded StartedAt: 2026-08-01 03:14:49 +0000 UTC FinishedAt: 2026-08-01 03:38:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowblqnm[0].run-triage Phase: Succeeded StartedAt: 2026-08-01 03:14:49 +0000 UTC FinishedAt: 2026-08-01 03:38:20 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "2195424c3da2ef1829a63b807e3a900a90e57d85", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETFILTER", "NF_CONNTRACK", "NF_TABLES", "NFT_CT" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "2195424c3da2ef1829a63b807e3a900a90e57d85", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETFILTER", "NF_CONNTRACK", "NF_TABLES", "NFT_CT" ], "series_id": "23fc4e6d-db22-4fa6-a013-f8cec46dbba0" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "nft_ct_expect_obj_init", "nft_ct_expect_obj_eval", "nft_ct_expect_obj_destroy", "nft_ct_expect_helper_alloc", "ct_expect_help", "nf_conntrack_helper_free" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDAzOjM3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVEZJTFRFUiYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0smIzM0OywKICAgICYjMzQ7TkZfVEFCTEVTJiMzNDssCiAgICAmIzM0O05GVF9DVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25mdF9jdF9leHBlY3Rfb2JqX2luaXQmIzM0OywKICAgICYjMzQ7bmZ0X2N0X2V4cGVjdF9vYmpfZXZhbCYjMzQ7LAogICAgJiMzNDtuZnRfY3RfZXhwZWN0X29ial9kZXN0cm95JiMzNDssCiAgICAmIzM0O25mdF9jdF9leHBlY3RfaGVscGVyX2FsbG9jJiMzNDssCiAgICAmIzM0O2N0X2V4cGVjdF9oZWxwJiMzNDssCiAgICAmIzM0O25mX2Nvbm50cmFja19oZWxwZXJfZnJlZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgbmV0ZmlsdGVyIG5mdGFibGVzIGNvbm50cmFjayBleHBlY3RhdGlvbiBsb2dpYywgc3BlY2lmaWNhbGx5IGFkZGluZyBkeW5hbWljIGFsbG9jYXRpb24gYW5kIGZyZWVpbmcgb2YgY29ubnRyYWNrIGhlbHBlcnMgKG5mX2Nvbm50cmFja19oZWxwZXJfZnJlZSwgbmZ0X2N0X2V4cGVjdF9oZWxwZXJfYWxsb2MpLiBUaGVzZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIG5ldGxpbmsgd2hlbiBjcmVhdGluZyBhbmQgZXZhbHVhdGluZyBuZnRhYmxlcyBleHBlY3RhdGlvbiBvYmplY3RzLCBtYWtpbmcgdGhlbSBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDM6Mzc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBiZTE3NDJkZGM1NGE3OWNjM2I3MTIwZDAyNTZiNmFhZGZhMzAwZjRkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMSAwMzozNzowNCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5oIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuaFxuaW5kZXggYzc2MWNkODE1OGIyNS4uNDQyMDg0NmU0MWYyMyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmhcbkBAIC0xMTQsNiAmIzQzOzExNCw4IEBAIGludCBuZl9jb25udHJhY2tfaGVscGVyc19yZWdpc3RlcihzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqLCB1bnNpZ25lZCBpbnQsXG4gdm9pZCBuZl9jb25udHJhY2tfaGVscGVyc191bnJlZ2lzdGVyKHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICoqLFxuIFx0XHRcdFx0ICAgICB1bnNpZ25lZCBpbnQpO1xuIFxuJiM0Mzt2b2lkIG5mX2Nvbm50cmFja19oZWxwZXJfZnJlZShzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqbWUpO1xuJiM0MztcbiAjZGVmaW5lIG5mX2Nvbm50cmFja19oZWxwZXJfZGVwcmVjYXRlZChuYW1lKSBcXFxuIFx0cHJfd2FybihcJiMzNDtUaGUgJXMgY29ubnRyYWNrIGhlbHBlciBpcyBzY2hlZHVsZWQgZm9yIHJlbW92YWwuXFxuXCYjMzQ7XHRcXFxuIFx0XHRcJiMzNDtQbGVhc2UgY29udGFjdCB0aGUgbmV0ZmlsdGVyLWRldmVsIG1haWxpbmcgbGlzdCBpZiB5b3Ugc3RpbGwgbmVlZCB0aGlzLlxcblwmIzM0OywgbmFtZSlcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jXG5pbmRleCA1MDA1MDliMTc2NjNlLi4xMTk3ZTg3OTM0OTRiIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jXG5AQCAtNDU2LDEzICYjNDM7NDU2LDggQEAgc3RhdGljIGJvb2wgZXhwZWN0X2l0ZXJfbWUoc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmV4cCwgdm9pZCAqZGF0YSlcbiBcdHJldHVybiB0aGlzID09IG1lO1xuIH1cbiBcbi12b2lkIG5mX2Nvbm50cmFja19oZWxwZXJfdW5yZWdpc3RlcihzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqbWUpXG4mIzQzO3ZvaWQgbmZfY29ubnRyYWNrX2hlbHBlcl9mcmVlKHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICptZSlcbiB7XG4tXHRtdXRleF9sb2NrKFx1MDAyNm5mX2N0X2hlbHBlcl9tdXRleCk7XG4tXHRobGlzdF9kZWxfcmN1KFx1MDAyNm1lLVx1MDAzZWhub2RlKTtcbi1cdG5mX2N0X2hlbHBlcl9jb3VudC0tO1xuLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNm5mX2N0X2hlbHBlcl9tdXRleCk7XG4tXG4gXHQvKiBUaGlzIGhlbHBlciBpcyBnb2luZyBhd2F5LCBkaXNhYmxlIGl0LiAqL1xuIFx0cmN1X2Fzc2lnbl9wb2ludGVyKG1lLVx1MDAzZWhlbHAsIE5VTEwpO1xuIFxuQEAgLTQ3Niw2ICYjNDM7NDcxLDE3IEBAIHZvaWQgbmZfY29ubnRyYWNrX2hlbHBlcl91bnJlZ2lzdGVyKHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICptZSlcbiBcdGlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoXHUwMDI2bWUtXHUwMDNlY3RfcmVmY250KSlcbiBcdFx0a2ZyZWVfcmN1KG1lLCByY3UpO1xuIH1cbiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwobmZfY29ubnRyYWNrX2hlbHBlcl9mcmVlKTtcbiYjNDM7XG4mIzQzO3ZvaWQgbmZfY29ubnRyYWNrX2hlbHBlcl91bnJlZ2lzdGVyKHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICptZSlcbiYjNDM7e1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2bmZfY3RfaGVscGVyX211dGV4KTtcbiYjNDM7XHRobGlzdF9kZWxfcmN1KFx1MDAyNm1lLVx1MDAzZWhub2RlKTtcbiYjNDM7XHRuZl9jdF9oZWxwZXJfY291bnQtLTtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2bmZfY3RfaGVscGVyX211dGV4KTtcbiYjNDM7XG4mIzQzO1x0bmZfY29ubnRyYWNrX2hlbHBlcl9mcmVlKG1lKTtcbiYjNDM7fVxuIEVYUE9SVF9TWU1CT0xfR1BMKG5mX2Nvbm50cmFja19oZWxwZXJfdW5yZWdpc3Rlcik7XG4gXG4gdm9pZCBuZl9jdF9oZWxwZXJfaW5pdChzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqaGVscGVyLFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMgYi9uZXQvbmV0ZmlsdGVyL25mdF9jdC5jXG5pbmRleCAwM2E4OGM3N2UwZjAyLi5mZjdjMjc1NzljZmIxIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZnRfY3QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZnRfY3QuY1xuQEAgLTEyMTMsNiAmIzQzOzEyMTMsOCBAQCBzdHJ1Y3QgbmZ0X2N0X2V4cGVjdF9vYmoge1xuIFx0dThcdFx0bDRwcm90bztcbiBcdHU4XHRcdHNpemU7XG4gXHR1MzJcdFx0dGltZW91dDtcbiYjNDM7XG4mIzQzO1x0c3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKmhlbHBlcjtcbiB9O1xuIFxuIHN0YXRpYyBpbnQgbmZ0X2N0X2V4cGVjdF90aW1lb3V0X2dldChjb25zdCBzdHJ1Y3QgbmxhdHRyICphdHRyLCB1MzIgKnZhbClcbkBAIC0xMjI2LDYgJiM0MzsxMjI4LDY2IEBAIHN0YXRpYyBpbnQgbmZ0X2N0X2V4cGVjdF90aW1lb3V0X2dldChjb25zdCBzdHJ1Y3QgbmxhdHRyICphdHRyLCB1MzIgKnZhbClcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7c3RydWN0IG5mdF9jdF9leHBlY3RfZGF0YSB7XG4mIzQzO1x0c3RydWN0IG5mdF9jdF9leHBlY3Rfb2JqXHRvYmo7XG4mIzQzO1x0YXRvbWljX3RcdFx0XHRudW1fZXhwZWN0cztcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgY3RfZXhwZWN0X2hlbHAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IHByb3RvZmYsXG4mIzQzO1x0XHRcdCAgc3RydWN0IG5mX2Nvbm4gKmN0LCBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBuZnRfY3RfZXhwZWN0X2RhdGEgKmV4cGVjdF9kYXRhO1xuJiM0MztcdHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHA7XG4mIzQzO1x0ZW51bSBpcF9jb25udHJhY2tfZGlyIGRpcjtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRleHBlY3RfZGF0YSA9IG5mY3RfaGVscF9kYXRhKGN0KTtcbiYjNDM7XHRpZiAoIWV4cGVjdF9kYXRhKVxuJiM0MztcdFx0cmV0dXJuIE5GX0FDQ0VQVDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFhdG9taWNfYWRkX3VubGVzcyhcdTAwMjZleHBlY3RfZGF0YS1cdTAwM2VudW1fZXhwZWN0cywgMSwgZXhwZWN0X2RhdGEtXHUwMDNlb2JqLnNpemUpKVxuJiM0MztcdFx0cmV0dXJuIE5GX0FDQ0VQVDtcbiYjNDM7XG4mIzQzO1x0ZXhwID0gbmZfY3RfZXhwZWN0X2FsbG9jKGN0KTtcbiYjNDM7XHRpZiAoIWV4cClcbiYjNDM7XHRcdHJldHVybiBORl9EUk9QO1xuJiM0MztcbiYjNDM7XHRkaXIgPSBDVElORk8yRElSKGN0aW5mbyk7XG4mIzQzO1x0bmZfY3RfZXhwZWN0X2luaXQoZXhwLCBORl9DVF9FWFBFQ1RfQ0xBU1NfREVGQVVMVCwgbmZfY3RfbDNudW0oY3QpLFxuJiM0MztcdFx0XHQgIFx1MDAyNmN0LVx1MDAzZXR1cGxlaGFzaFshZGlyXS50dXBsZS5zcmMudTMsXG4mIzQzO1x0XHRcdCAgXHUwMDI2Y3QtXHUwMDNldHVwbGVoYXNoWyFkaXJdLnR1cGxlLmRzdC51MyxcbiYjNDM7XHRcdFx0ICBleHBlY3RfZGF0YS1cdTAwM2VvYmoubDRwcm90bywgTlVMTCwgXHUwMDI2ZXhwZWN0X2RhdGEtXHUwMDNlb2JqLmRwb3J0KTtcbiYjNDM7XHRleHAtXHUwMDNldGltZW91dCAmIzQzOz0gZXhwZWN0X2RhdGEtXHUwMDNlb2JqLnRpbWVvdXQ7XG4mIzQzO1xuJiM0MztcdGlmIChuZl9jdF9leHBlY3RfcmVsYXRlZChleHAsIDApICE9IDApXG4mIzQzO1x0XHRyZXQgPSBORl9EUk9QO1xuJiM0MztcbiYjNDM7XHRuZl9jdF9leHBlY3RfcHV0KGV4cCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBORl9BQ0NFUFQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgbmZ0X2N0X2V4cGVjdF9oZWxwZXJfYWxsb2Moc3RydWN0IG5mdF9jdF9leHBlY3Rfb2JqICpwcml2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKmN0X2V4cGVjdF9oZWxwZXI7XG4mIzQzO1xuJiM0MztcdGN0X2V4cGVjdF9oZWxwZXIgPSBremFsbG9jX29iaihzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlcik7XG4mIzQzO1x0aWYgKCFjdF9leHBlY3RfaGVscGVyKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdHNucHJpbnRmKGN0X2V4cGVjdF9oZWxwZXItXHUwMDNlbmFtZSwgc2l6ZW9mKGN0X2V4cGVjdF9oZWxwZXItXHUwMDNlbmFtZSksIFwmIzM0OyVzXCYjMzQ7LFxuJiM0MztcdFx0IFwmIzM0O25mdF9jdF9leHBlY3RcJiMzNDspO1xuJiM0MztcdGN0X2V4cGVjdF9oZWxwZXItXHUwMDNlbWUgPSBUSElTX01PRFVMRTtcbiYjNDM7XHRjdF9leHBlY3RfaGVscGVyLVx1MDAzZWV4cGVjdF9wb2xpY3lbTkZfQ1RfRVhQRUNUX0NMQVNTX0RFRkFVTFRdLm1heF9leHBlY3RlZCA9IHByaXYtXHUwMDNlc2l6ZTtcbiYjNDM7XHRyY3VfYXNzaWduX3BvaW50ZXIoY3RfZXhwZWN0X2hlbHBlci1cdTAwM2VoZWxwLCBjdF9leHBlY3RfaGVscCk7XG4mIzQzO1x0cmVmY291bnRfc2V0KFx1MDAyNmN0X2V4cGVjdF9oZWxwZXItXHUwMDNlY3RfcmVmY250LCAxKTtcbiYjNDM7XG4mIzQzO1x0LyogTm8gbmVlZCB0byByZWdpc3RlciB0aGlzIGhlbHBlciwgdGhpcyBpcyBpbnRlcm5hbC4gKi9cbiYjNDM7XHRwcml2LVx1MDAzZWhlbHBlciA9IGN0X2V4cGVjdF9oZWxwZXI7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgbmZ0X2N0X2V4cGVjdF9vYmpfaW5pdChjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxuIFx0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgdGJbXSxcbiBcdFx0XHRcdCAgc3RydWN0IG5mdF9vYmplY3QgKm9iailcbkBAIC0xMjMzLDYgJiM0MzsxMjk1LDggQEAgc3RhdGljIGludCBuZnRfY3RfZXhwZWN0X29ial9pbml0KGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXG4gXHRzdHJ1Y3QgbmZ0X2N0X2V4cGVjdF9vYmogKnByaXYgPSBuZnRfb2JqX2RhdGEob2JqKTtcbiBcdGludCBlcnI7XG4gXG4mIzQzO1x0TkZfQ1RfSEVMUEVSX0JVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IG5mdF9jdF9leHBlY3RfZGF0YSkpO1xuJiM0MztcbiBcdGlmICghdGJbTkZUQV9DVF9FWFBFQ1RfTDRQUk9UT10gfHxcbiBcdCAgICAhdGJbTkZUQV9DVF9FWFBFQ1RfRFBPUlRdIHx8XG4gXHQgICAgIXRiW05GVEFfQ1RfRVhQRUNUX1RJTUVPVVRdIHx8XG5AQCAtMTI3MywxMyAmIzQzOzEzMzcsMjYgQEAgc3RhdGljIGludCBuZnRfY3RfZXhwZWN0X29ial9pbml0KGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXG4gXHRwcml2LVx1MDAzZWRwb3J0ID0gbmxhX2dldF9iZTE2KHRiW05GVEFfQ1RfRVhQRUNUX0RQT1JUXSk7XG4gXHRwcml2LVx1MDAzZXNpemUgPSBubGFfZ2V0X3U4KHRiW05GVEFfQ1RfRVhQRUNUX1NJWkVdKTtcbiBcbi1cdHJldHVybiBuZl9jdF9uZXRuc19nZXQoY3R4LVx1MDAzZW5ldCwgY3R4LVx1MDAzZWZhbWlseSk7XG4mIzQzO1x0ZXJyID0gbmZfY3RfbmV0bnNfZ2V0KGN0eC1cdTAwM2VuZXQsIGN0eC1cdTAwM2VmYW1pbHkpO1xuJiM0MztcdGlmIChlcnIgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gZXJyO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBuZnRfY3RfZXhwZWN0X2hlbHBlcl9hbGxvYyhwcml2KTtcbiYjNDM7XHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRuZl9jdF9uZXRuc19wdXQoY3R4LVx1MDAzZW5ldCwgY3R4LVx1MDAzZWZhbWlseSk7XG4mIzQzO1x0XHRyZXR1cm4gZXJyO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiB9XG4gXG4gc3RhdGljIHZvaWQgbmZ0X2N0X2V4cGVjdF9vYmpfZGVzdHJveShjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxuLVx0XHRcdFx0ICAgICAgIHN0cnVjdCBuZnRfb2JqZWN0ICpvYmopXG4mIzQzO1x0XHRcdFx0ICAgICAgc3RydWN0IG5mdF9vYmplY3QgKm9iailcbiB7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IG5mdF9jdF9leHBlY3Rfb2JqICpwcml2ID0gbmZ0X29ial9kYXRhKG9iaik7XG4mIzQzO1xuIFx0bmZfY3RfbmV0bnNfcHV0KGN0eC1cdTAwM2VuZXQsIGN0eC1cdTAwM2VmYW1pbHkpO1xuJiM0MztcdG5mX2Nvbm50cmFja19oZWxwZXJfZnJlZShwcml2LVx1MDAzZWhlbHBlcik7XG4gfVxuIFxuIHN0YXRpYyBpbnQgbmZ0X2N0X2V4cGVjdF9vYmpfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuQEAgLTEzMDIsNTAgJiM0MzsxMzc5LDM4IEBAIHN0YXRpYyB2b2lkIG5mdF9jdF9leHBlY3Rfb2JqX2V2YWwoc3RydWN0IG5mdF9vYmplY3QgKm9iaixcbiBcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0KVxuIHtcbiBcdGNvbnN0IHN0cnVjdCBuZnRfY3RfZXhwZWN0X29iaiAqcHJpdiA9IG5mdF9vYmpfZGF0YShvYmopO1xuLVx0c3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmV4cDtcbiYjNDM7XHRzdHJ1Y3QgbmZ0X2N0X2V4cGVjdF9kYXRhICpleHBlY3RfZGF0YTtcbiBcdGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvO1xuIFx0c3RydWN0IG5mX2Nvbm5faGVscCAqaGVscDtcbi1cdGVudW0gaXBfY29ubnRyYWNrX2RpciBkaXI7XG4tXHR1MTYgbDNudW0gPSBwcml2LVx1MDAzZWwzbnVtO1xuIFx0c3RydWN0IG5mX2Nvbm4gKmN0O1xuIFxuIFx0Y3QgPSBuZl9jdF9nZXQocGt0LVx1MDAzZXNrYiwgXHUwMDI2Y3RpbmZvKTtcbi1cdGlmICghY3QgfHwgbmZfY3RfaXNfY29uZmlybWVkKGN0KSB8fCBuZl9jdF9pc190ZW1wbGF0ZShjdCkpIHtcbiYjNDM7XHRpZiAoIWN0IHx8IG5mX2N0X2lzX3RlbXBsYXRlKGN0KSB8fCBuZl9jdF9pc19jb25maXJtZWQoY3QpKSB7XG4gXHRcdHJlZ3MtXHUwMDNldmVyZGljdC5jb2RlID0gTkZUX0JSRUFLO1xuIFx0XHRyZXR1cm47XG4gXHR9XG4tXHRkaXIgPSBDVElORk8yRElSKGN0aW5mbyk7XG4gXG4gXHRoZWxwID0gbmZjdF9oZWxwKGN0KTtcbi1cdGlmICghaGVscClcbi1cdFx0aGVscCA9IG5mX2N0X2hlbHBlcl9leHRfYWRkKGN0LCBHRlBfQVRPTUlDKTtcbi1cdGlmICghaGVscCkge1xuLVx0XHRyZWdzLVx1MDAzZXZlcmRpY3QuY29kZSA9IE5GX0RST1A7XG4tXHRcdHJldHVybjtcbi1cdH1cbi1cbi1cdGlmIChoZWxwLVx1MDAzZWV4cGVjdGluZ1tORl9DVF9FWFBFQ1RfQ0xBU1NfREVGQVVMVF0gXHUwMDNlPSBwcml2LVx1MDAzZXNpemUpIHtcbiYjNDM7XHRpZiAoaGVscCkge1xuIFx0XHRyZWdzLVx1MDAzZXZlcmRpY3QuY29kZSA9IE5GVF9CUkVBSztcbiBcdFx0cmV0dXJuO1xuIFx0fVxuLVx0aWYgKGwzbnVtID09IE5GUFJPVE9fSU5FVClcbi1cdFx0bDNudW0gPSBuZl9jdF9sM251bShjdCk7XG4gXG4tXHRleHAgPSBuZl9jdF9leHBlY3RfYWxsb2MoY3QpO1xuLVx0aWYgKGV4cCA9PSBOVUxMKSB7XG4mIzQzO1x0aGVscCA9IG5mX2N0X2hlbHBlcl9leHRfYWRkKGN0LCBHRlBfQVRPTUlDKTtcbiYjNDM7XHRpZiAoIWhlbHApIHtcbiBcdFx0cmVncy1cdTAwM2V2ZXJkaWN0LmNvZGUgPSBORl9EUk9QO1xuIFx0XHRyZXR1cm47XG4gXHR9XG4tXHRuZl9jdF9leHBlY3RfaW5pdChleHAsIE5GX0NUX0VYUEVDVF9DTEFTU19ERUZBVUxULCBsM251bSxcbi1cdFx0ICAgICAgICAgIFx1MDAyNmN0LVx1MDAzZXR1cGxlaGFzaFshZGlyXS50dXBsZS5zcmMudTMsXG4tXHRcdCAgICAgICAgICBcdTAwMjZjdC1cdTAwM2V0dXBsZWhhc2hbIWRpcl0udHVwbGUuZHN0LnUzLFxuLVx0XHQgICAgICAgICAgcHJpdi1cdTAwM2VsNHByb3RvLCBOVUxMLCBcdTAwMjZwcml2LVx1MDAzZWRwb3J0KTtcbi1cdGV4cC1cdTAwM2V0aW1lb3V0ICYjNDM7PSBwcml2LVx1MDAzZXRpbWVvdXQ7XG4gXG4tXHRpZiAobmZfY3RfZXhwZWN0X3JlbGF0ZWQoZXhwLCAwKSAhPSAwKVxuLVx0XHRyZWdzLVx1MDAzZXZlcmRpY3QuY29kZSA9IE5GX0RST1A7XG4mIzQzO1x0ZXhwZWN0X2RhdGEgPSBuZmN0X2hlbHBfZGF0YShjdCk7XG4mIzQzO1x0aWYgKCFleHBlY3RfZGF0YSkge1xuJiM0MztcdFx0cmVncy1cdTAwM2V2ZXJkaWN0LmNvZGUgPSBORlRfQlJFQUs7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcdGV4cGVjdF9kYXRhLVx1MDAzZW9iaiA9ICpwcml2O1xuIFxuLVx0bmZfY3RfZXhwZWN0X3B1dChleHApO1xuJiM0MztcdGlmIChoZWxwIFx1MDAyNlx1MDAyNiByZWZjb3VudF9pbmNfbm90X3plcm8oXHUwMDI2cHJpdi1cdTAwM2VoZWxwZXItXHUwMDNlY3RfcmVmY250KSlcbiYjNDM7XHRcdHJjdV9hc3NpZ25fcG9pbnRlcihoZWxwLVx1MDAzZWhlbHBlciwgcHJpdi1cdTAwM2VoZWxwZXIpO1xuIH1cbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmZ0X2N0X2V4cGVjdF9wb2xpY3lbTkZUQV9DVF9FWFBFQ1RfTUFYICYjNDM7IDFdID0ge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDAzOjM3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRGSUxURVImIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLJiMzNDssCiAgICAmIzM0O05GX1RBQkxFUyYjMzQ7LAogICAgJiMzNDtORlRfQ1QmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZnRfY3RfZXhwZWN0X29ial9pbml0JiMzNDssCiAgICAmIzM0O25mdF9jdF9leHBlY3Rfb2JqX2V2YWwmIzM0OywKICAgICYjMzQ7bmZ0X2N0X2V4cGVjdF9vYmpfZGVzdHJveSYjMzQ7LAogICAgJiMzNDtuZnRfY3RfZXhwZWN0X2hlbHBlcl9hbGxvYyYjMzQ7LAogICAgJiMzNDtjdF9leHBlY3RfaGVscCYjMzQ7LAogICAgJiMzNDtuZl9jb25udHJhY2tfaGVscGVyX2ZyZWUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIG5ldGZpbHRlciBuZnRhYmxlcyBjb25udHJhY2sgZXhwZWN0YXRpb24gbG9naWMsIHNwZWNpZmljYWxseSBhZGRpbmcgZHluYW1pYyBhbGxvY2F0aW9uIGFuZCBmcmVlaW5nIG9mIGNvbm50cmFjayBoZWxwZXJzIChuZl9jb25udHJhY2tfaGVscGVyX2ZyZWUsIG5mdF9jdF9leHBlY3RfaGVscGVyX2FsbG9jKS4gVGhlc2UgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRsaW5rIHdoZW4gY3JlYXRpbmcgYW5kIGV2YWx1YXRpbmcgbmZ0YWJsZXMgZXhwZWN0YXRpb24gb2JqZWN0cywgbWFraW5nIHRoZW0gaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYmUxNzQyZGRjNTRhNzljYzNiNzEyMGQwMjU2YjZhYWRmYTMwMGY0ZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgQXVnIDEgMDM6Mzc6MDQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5oIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuaAppbmRleCBjNzYxY2Q4MTU4YjI1Li40NDIwODQ2ZTQxZjIzIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmgKQEAgLTExNCw2ICYjNDM7MTE0LDggQEAgaW50IG5mX2Nvbm50cmFja19oZWxwZXJzX3JlZ2lzdGVyKHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICosIHVuc2lnbmVkIGludCwKIHZvaWQgbmZfY29ubnRyYWNrX2hlbHBlcnNfdW5yZWdpc3RlcihzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqKiwKIAkJCQkgICAgIHVuc2lnbmVkIGludCk7CiAKJiM0Mzt2b2lkIG5mX2Nvbm50cmFja19oZWxwZXJfZnJlZShzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqbWUpOwomIzQzOwogI2RlZmluZSBuZl9jb25udHJhY2tfaGVscGVyX2RlcHJlY2F0ZWQobmFtZSkgXAogCXByX3dhcm4oJiMzNDtUaGUgJXMgY29ubnRyYWNrIGhlbHBlciBpcyBzY2hlZHVsZWQgZm9yIHJlbW92YWwuXG4mIzM0OwlcCiAJCSYjMzQ7UGxlYXNlIGNvbnRhY3QgdGhlIG5ldGZpbHRlci1kZXZlbCBtYWlsaW5nIGxpc3QgaWYgeW91IHN0aWxsIG5lZWQgdGhpcy5cbiYjMzQ7LCBuYW1lKQpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYwppbmRleCA1MDA1MDliMTc2NjNlLi4xMTk3ZTg3OTM0OTRiIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYwpAQCAtNDU2LDEzICYjNDM7NDU2LDggQEAgc3RhdGljIGJvb2wgZXhwZWN0X2l0ZXJfbWUoc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmV4cCwgdm9pZCAqZGF0YSkKIAlyZXR1cm4gdGhpcyA9PSBtZTsKIH0KIAotdm9pZCBuZl9jb25udHJhY2tfaGVscGVyX3VucmVnaXN0ZXIoc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKm1lKQomIzQzO3ZvaWQgbmZfY29ubnRyYWNrX2hlbHBlcl9mcmVlKHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICptZSkKIHsKLQltdXRleF9sb2NrKCZhbXA7bmZfY3RfaGVscGVyX211dGV4KTsKLQlobGlzdF9kZWxfcmN1KCZhbXA7bWUtJmd0O2hub2RlKTsKLQluZl9jdF9oZWxwZXJfY291bnQtLTsKLQltdXRleF91bmxvY2soJmFtcDtuZl9jdF9oZWxwZXJfbXV0ZXgpOwotCiAJLyogVGhpcyBoZWxwZXIgaXMgZ29pbmcgYXdheSwgZGlzYWJsZSBpdC4gKi8KIAlyY3VfYXNzaWduX3BvaW50ZXIobWUtJmd0O2hlbHAsIE5VTEwpOwogCkBAIC00NzYsNiAmIzQzOzQ3MSwxNyBAQCB2b2lkIG5mX2Nvbm50cmFja19oZWxwZXJfdW5yZWdpc3RlcihzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqbWUpCiAJaWYgKHJlZmNvdW50X2RlY19hbmRfdGVzdCgmYW1wO21lLSZndDtjdF9yZWZjbnQpKQogCQlrZnJlZV9yY3UobWUsIHJjdSk7CiB9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwobmZfY29ubnRyYWNrX2hlbHBlcl9mcmVlKTsKJiM0MzsKJiM0Mzt2b2lkIG5mX2Nvbm50cmFja19oZWxwZXJfdW5yZWdpc3RlcihzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqbWUpCiYjNDM7ewomIzQzOwltdXRleF9sb2NrKCZhbXA7bmZfY3RfaGVscGVyX211dGV4KTsKJiM0MzsJaGxpc3RfZGVsX3JjdSgmYW1wO21lLSZndDtobm9kZSk7CiYjNDM7CW5mX2N0X2hlbHBlcl9jb3VudC0tOwomIzQzOwltdXRleF91bmxvY2soJmFtcDtuZl9jdF9oZWxwZXJfbXV0ZXgpOwomIzQzOwomIzQzOwluZl9jb25udHJhY2tfaGVscGVyX2ZyZWUobWUpOwomIzQzO30KIEVYUE9SVF9TWU1CT0xfR1BMKG5mX2Nvbm50cmFja19oZWxwZXJfdW5yZWdpc3Rlcik7CiAKIHZvaWQgbmZfY3RfaGVscGVyX2luaXQoc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKmhlbHBlciwKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMgYi9uZXQvbmV0ZmlsdGVyL25mdF9jdC5jCmluZGV4IDAzYTg4Yzc3ZTBmMDIuLmZmN2MyNzU3OWNmYjEgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZnRfY3QuYwpAQCAtMTIxMyw2ICYjNDM7MTIxMyw4IEBAIHN0cnVjdCBuZnRfY3RfZXhwZWN0X29iaiB7CiAJdTgJCWw0cHJvdG87CiAJdTgJCXNpemU7CiAJdTMyCQl0aW1lb3V0OwomIzQzOwomIzQzOwlzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqaGVscGVyOwogfTsKIAogc3RhdGljIGludCBuZnRfY3RfZXhwZWN0X3RpbWVvdXRfZ2V0KGNvbnN0IHN0cnVjdCBubGF0dHIgKmF0dHIsIHUzMiAqdmFsKQpAQCAtMTIyNiw2ICYjNDM7MTIyOCw2NiBAQCBzdGF0aWMgaW50IG5mdF9jdF9leHBlY3RfdGltZW91dF9nZXQoY29uc3Qgc3RydWN0IG5sYXR0ciAqYXR0ciwgdTMyICp2YWwpCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdHJ1Y3QgbmZ0X2N0X2V4cGVjdF9kYXRhIHsKJiM0MzsJc3RydWN0IG5mdF9jdF9leHBlY3Rfb2JqCW9iajsKJiM0MzsJYXRvbWljX3QJCQludW1fZXhwZWN0czsKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBpbnQgY3RfZXhwZWN0X2hlbHAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IHByb3RvZmYsCiYjNDM7CQkJICBzdHJ1Y3QgbmZfY29ubiAqY3QsIGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvKQomIzQzO3sKJiM0MzsJc3RydWN0IG5mdF9jdF9leHBlY3RfZGF0YSAqZXhwZWN0X2RhdGE7CiYjNDM7CXN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHA7CiYjNDM7CWVudW0gaXBfY29ubnRyYWNrX2RpciBkaXI7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWV4cGVjdF9kYXRhID0gbmZjdF9oZWxwX2RhdGEoY3QpOwomIzQzOwlpZiAoIWV4cGVjdF9kYXRhKQomIzQzOwkJcmV0dXJuIE5GX0FDQ0VQVDsKJiM0MzsKJiM0MzsJaWYgKCFhdG9taWNfYWRkX3VubGVzcygmYW1wO2V4cGVjdF9kYXRhLSZndDtudW1fZXhwZWN0cywgMSwgZXhwZWN0X2RhdGEtJmd0O29iai5zaXplKSkKJiM0MzsJCXJldHVybiBORl9BQ0NFUFQ7CiYjNDM7CiYjNDM7CWV4cCA9IG5mX2N0X2V4cGVjdF9hbGxvYyhjdCk7CiYjNDM7CWlmICghZXhwKQomIzQzOwkJcmV0dXJuIE5GX0RST1A7CiYjNDM7CiYjNDM7CWRpciA9IENUSU5GTzJESVIoY3RpbmZvKTsKJiM0MzsJbmZfY3RfZXhwZWN0X2luaXQoZXhwLCBORl9DVF9FWFBFQ1RfQ0xBU1NfREVGQVVMVCwgbmZfY3RfbDNudW0oY3QpLAomIzQzOwkJCSAgJmFtcDtjdC0mZ3Q7dHVwbGVoYXNoWyFkaXJdLnR1cGxlLnNyYy51MywKJiM0MzsJCQkgICZhbXA7Y3QtJmd0O3R1cGxlaGFzaFshZGlyXS50dXBsZS5kc3QudTMsCiYjNDM7CQkJICBleHBlY3RfZGF0YS0mZ3Q7b2JqLmw0cHJvdG8sIE5VTEwsICZhbXA7ZXhwZWN0X2RhdGEtJmd0O29iai5kcG9ydCk7CiYjNDM7CWV4cC0mZ3Q7dGltZW91dCAmIzQzOz0gZXhwZWN0X2RhdGEtJmd0O29iai50aW1lb3V0OwomIzQzOwomIzQzOwlpZiAobmZfY3RfZXhwZWN0X3JlbGF0ZWQoZXhwLCAwKSAhPSAwKQomIzQzOwkJcmV0ID0gTkZfRFJPUDsKJiM0MzsKJiM0MzsJbmZfY3RfZXhwZWN0X3B1dChleHApOwomIzQzOwomIzQzOwlyZXR1cm4gTkZfQUNDRVBUOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG5mdF9jdF9leHBlY3RfaGVscGVyX2FsbG9jKHN0cnVjdCBuZnRfY3RfZXhwZWN0X29iaiAqcHJpdikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICpjdF9leHBlY3RfaGVscGVyOwomIzQzOwomIzQzOwljdF9leHBlY3RfaGVscGVyID0ga3phbGxvY19vYmooc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIpOwomIzQzOwlpZiAoIWN0X2V4cGVjdF9oZWxwZXIpCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsKJiM0MzsJc25wcmludGYoY3RfZXhwZWN0X2hlbHBlci0mZ3Q7bmFtZSwgc2l6ZW9mKGN0X2V4cGVjdF9oZWxwZXItJmd0O25hbWUpLCAmIzM0OyVzJiMzNDssCiYjNDM7CQkgJiMzNDtuZnRfY3RfZXhwZWN0JiMzNDspOwomIzQzOwljdF9leHBlY3RfaGVscGVyLSZndDttZSA9IFRISVNfTU9EVUxFOwomIzQzOwljdF9leHBlY3RfaGVscGVyLSZndDtleHBlY3RfcG9saWN5W05GX0NUX0VYUEVDVF9DTEFTU19ERUZBVUxUXS5tYXhfZXhwZWN0ZWQgPSBwcml2LSZndDtzaXplOwomIzQzOwlyY3VfYXNzaWduX3BvaW50ZXIoY3RfZXhwZWN0X2hlbHBlci0mZ3Q7aGVscCwgY3RfZXhwZWN0X2hlbHApOwomIzQzOwlyZWZjb3VudF9zZXQoJmFtcDtjdF9leHBlY3RfaGVscGVyLSZndDtjdF9yZWZjbnQsIDEpOwomIzQzOwomIzQzOwkvKiBObyBuZWVkIHRvIHJlZ2lzdGVyIHRoaXMgaGVscGVyLCB0aGlzIGlzIGludGVybmFsLiAqLwomIzQzOwlwcml2LSZndDtoZWxwZXIgPSBjdF9leHBlY3RfaGVscGVyOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IG5mdF9jdF9leHBlY3Rfb2JqX2luaXQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCwKIAkJCQkgIGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCB0YltdLAogCQkJCSAgc3RydWN0IG5mdF9vYmplY3QgKm9iaikKQEAgLTEyMzMsNiAmIzQzOzEyOTUsOCBAQCBzdGF0aWMgaW50IG5mdF9jdF9leHBlY3Rfb2JqX2luaXQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCwKIAlzdHJ1Y3QgbmZ0X2N0X2V4cGVjdF9vYmogKnByaXYgPSBuZnRfb2JqX2RhdGEob2JqKTsKIAlpbnQgZXJyOwogCiYjNDM7CU5GX0NUX0hFTFBFUl9CVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCBuZnRfY3RfZXhwZWN0X2RhdGEpKTsKJiM0MzsKIAlpZiAoIXRiW05GVEFfQ1RfRVhQRUNUX0w0UFJPVE9dIHx8CiAJICAgICF0YltORlRBX0NUX0VYUEVDVF9EUE9SVF0gfHwKIAkgICAgIXRiW05GVEFfQ1RfRVhQRUNUX1RJTUVPVVRdIHx8CkBAIC0xMjczLDEzICYjNDM7MTMzNywyNiBAQCBzdGF0aWMgaW50IG5mdF9jdF9leHBlY3Rfb2JqX2luaXQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCwKIAlwcml2LSZndDtkcG9ydCA9IG5sYV9nZXRfYmUxNih0YltORlRBX0NUX0VYUEVDVF9EUE9SVF0pOwogCXByaXYtJmd0O3NpemUgPSBubGFfZ2V0X3U4KHRiW05GVEFfQ1RfRVhQRUNUX1NJWkVdKTsKIAotCXJldHVybiBuZl9jdF9uZXRuc19nZXQoY3R4LSZndDtuZXQsIGN0eC0mZ3Q7ZmFtaWx5KTsKJiM0MzsJZXJyID0gbmZfY3RfbmV0bnNfZ2V0KGN0eC0mZ3Q7bmV0LCBjdHgtJmd0O2ZhbWlseSk7CiYjNDM7CWlmIChlcnIgJmx0OyAwKQomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsKJiM0MzsJZXJyID0gbmZ0X2N0X2V4cGVjdF9oZWxwZXJfYWxsb2MocHJpdik7CiYjNDM7CWlmIChlcnIgJmx0OyAwKSB7CiYjNDM7CQluZl9jdF9uZXRuc19wdXQoY3R4LSZndDtuZXQsIGN0eC0mZ3Q7ZmFtaWx5KTsKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIHZvaWQgbmZ0X2N0X2V4cGVjdF9vYmpfZGVzdHJveShjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LAotCQkJCSAgICAgICBzdHJ1Y3QgbmZ0X29iamVjdCAqb2JqKQomIzQzOwkJCQkgICAgICBzdHJ1Y3QgbmZ0X29iamVjdCAqb2JqKQogewomIzQzOwljb25zdCBzdHJ1Y3QgbmZ0X2N0X2V4cGVjdF9vYmogKnByaXYgPSBuZnRfb2JqX2RhdGEob2JqKTsKJiM0MzsKIAluZl9jdF9uZXRuc19wdXQoY3R4LSZndDtuZXQsIGN0eC0mZ3Q7ZmFtaWx5KTsKJiM0MzsJbmZfY29ubnRyYWNrX2hlbHBlcl9mcmVlKHByaXYtJmd0O2hlbHBlcik7CiB9CiAKIHN0YXRpYyBpbnQgbmZ0X2N0X2V4cGVjdF9vYmpfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLApAQCAtMTMwMiw1MCAmIzQzOzEzNzksMzggQEAgc3RhdGljIHZvaWQgbmZ0X2N0X2V4cGVjdF9vYmpfZXZhbChzdHJ1Y3QgbmZ0X29iamVjdCAqb2JqLAogCQkJCSAgIGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0KQogewogCWNvbnN0IHN0cnVjdCBuZnRfY3RfZXhwZWN0X29iaiAqcHJpdiA9IG5mdF9vYmpfZGF0YShvYmopOwotCXN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHA7CiYjNDM7CXN0cnVjdCBuZnRfY3RfZXhwZWN0X2RhdGEgKmV4cGVjdF9kYXRhOwogCWVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvOwogCXN0cnVjdCBuZl9jb25uX2hlbHAgKmhlbHA7Ci0JZW51bSBpcF9jb25udHJhY2tfZGlyIGRpcjsKLQl1MTYgbDNudW0gPSBwcml2LSZndDtsM251bTsKIAlzdHJ1Y3QgbmZfY29ubiAqY3Q7CiAKIAljdCA9IG5mX2N0X2dldChwa3QtJmd0O3NrYiwgJmFtcDtjdGluZm8pOwotCWlmICghY3QgfHwgbmZfY3RfaXNfY29uZmlybWVkKGN0KSB8fCBuZl9jdF9pc190ZW1wbGF0ZShjdCkpIHsKJiM0MzsJaWYgKCFjdCB8fCBuZl9jdF9pc190ZW1wbGF0ZShjdCkgfHwgbmZfY3RfaXNfY29uZmlybWVkKGN0KSkgewogCQlyZWdzLSZndDt2ZXJkaWN0LmNvZGUgPSBORlRfQlJFQUs7CiAJCXJldHVybjsKIAl9Ci0JZGlyID0gQ1RJTkZPMkRJUihjdGluZm8pOwogCiAJaGVscCA9IG5mY3RfaGVscChjdCk7Ci0JaWYgKCFoZWxwKQotCQloZWxwID0gbmZfY3RfaGVscGVyX2V4dF9hZGQoY3QsIEdGUF9BVE9NSUMpOwotCWlmICghaGVscCkgewotCQlyZWdzLSZndDt2ZXJkaWN0LmNvZGUgPSBORl9EUk9QOwotCQlyZXR1cm47Ci0JfQotCi0JaWYgKGhlbHAtJmd0O2V4cGVjdGluZ1tORl9DVF9FWFBFQ1RfQ0xBU1NfREVGQVVMVF0gJmd0Oz0gcHJpdi0mZ3Q7c2l6ZSkgewomIzQzOwlpZiAoaGVscCkgewogCQlyZWdzLSZndDt2ZXJkaWN0LmNvZGUgPSBORlRfQlJFQUs7CiAJCXJldHVybjsKIAl9Ci0JaWYgKGwzbnVtID09IE5GUFJPVE9fSU5FVCkKLQkJbDNudW0gPSBuZl9jdF9sM251bShjdCk7CiAKLQlleHAgPSBuZl9jdF9leHBlY3RfYWxsb2MoY3QpOwotCWlmIChleHAgPT0gTlVMTCkgewomIzQzOwloZWxwID0gbmZfY3RfaGVscGVyX2V4dF9hZGQoY3QsIEdGUF9BVE9NSUMpOwomIzQzOwlpZiAoIWhlbHApIHsKIAkJcmVncy0mZ3Q7dmVyZGljdC5jb2RlID0gTkZfRFJPUDsKIAkJcmV0dXJuOwogCX0KLQluZl9jdF9leHBlY3RfaW5pdChleHAsIE5GX0NUX0VYUEVDVF9DTEFTU19ERUZBVUxULCBsM251bSwKLQkJICAgICAgICAgICZhbXA7Y3QtJmd0O3R1cGxlaGFzaFshZGlyXS50dXBsZS5zcmMudTMsCi0JCSAgICAgICAgICAmYW1wO2N0LSZndDt0dXBsZWhhc2hbIWRpcl0udHVwbGUuZHN0LnUzLAotCQkgICAgICAgICAgcHJpdi0mZ3Q7bDRwcm90bywgTlVMTCwgJmFtcDtwcml2LSZndDtkcG9ydCk7Ci0JZXhwLSZndDt0aW1lb3V0ICYjNDM7PSBwcml2LSZndDt0aW1lb3V0OwogCi0JaWYgKG5mX2N0X2V4cGVjdF9yZWxhdGVkKGV4cCwgMCkgIT0gMCkKLQkJcmVncy0mZ3Q7dmVyZGljdC5jb2RlID0gTkZfRFJPUDsKJiM0MzsJZXhwZWN0X2RhdGEgPSBuZmN0X2hlbHBfZGF0YShjdCk7CiYjNDM7CWlmICghZXhwZWN0X2RhdGEpIHsKJiM0MzsJCXJlZ3MtJmd0O3ZlcmRpY3QuY29kZSA9IE5GVF9CUkVBSzsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwlleHBlY3RfZGF0YS0mZ3Q7b2JqID0gKnByaXY7CiAKLQluZl9jdF9leHBlY3RfcHV0KGV4cCk7CiYjNDM7CWlmIChoZWxwICZhbXA7JmFtcDsgcmVmY291bnRfaW5jX25vdF96ZXJvKCZhbXA7cHJpdi0mZ3Q7aGVscGVyLSZndDtjdF9yZWZjbnQpKQomIzQzOwkJcmN1X2Fzc2lnbl9wb2ludGVyKGhlbHAtJmd0O2hlbHBlciwgcHJpdi0mZ3Q7aGVscGVyKTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5mdF9jdF9leHBlY3RfcG9saWN5W05GVEFfQ1RfRVhQRUNUX01BWCAmIzQzOyAxXSA9IHsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDM6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDk2MgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDIwNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5ldGZpbHRlciBDb25udHJhY2sgSGVscGVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCYjMzk7cyBtYWtpbmcgc29tZSBrZXkgbW9kaWZpY2F0aW9ucyB0byB0aGUgY29ubnRyYWNrIGhlbHBlciBhbmQgbmZ0YWJsZXMgaW50ZWdyYXRpb24uIFRoZSBjb3JlIG9mIGl0IHNlZW1zIHRvIGJlIGFkZGluZyBhIGBuZl9jb25udHJhY2tfaGVscGVyX2ZyZWVgIGZ1bmN0aW9uIGFuZCBtYWtpbmcgaXQgYXZhaWxhYmxlLiBUaGlzIGlzIGludGVyZXN0aW5nLCBhIGNsZWFudXAgZnVuY3Rpb24gaXMgYWx3YXlzIGEgZ29vZCBzaWduIG9mIHJlc291cmNlIG1hbmFnZW1lbnQgYmVpbmcgY29uc2lkZXJlZC4KClRoZSByZWFsIG1lYXQgb2YgdGhlIGNoYW5nZXMgc2VlbXMgdG8gYmUgaW4gaG93IGNvbm50cmFjayBoZWxwZXJzIGFyZSBoYW5kbGVkIHdpdGhpbiBgbmZ0X2N0X2V4cGVjdGAuIFRoZSBgbmZ0X2N0X2V4cGVjdF9vYmpfaW5pdGAgZnVuY3Rpb24gaXMgYmVpbmcgdXBkYXRlZCB0byBhbGxvY2F0ZSBhIGhlbHBlciB1c2luZyBgbmZ0X2N0X2V4cGVjdF9oZWxwZXJfYWxsb2NgLiBUaGVuLCB0aGUgYG5mdF9jdF9leHBlY3Rfb2JqX2V2YWxgIGZ1bmN0aW9uIHdpbGwgbm93IGxldmVyYWdlIGBuZl9jdF9oZWxwZXJfZXh0X2FkZGAgdG8gYWRkIHRoZSBoZWxwZXIgdG8gdGhlIGNvbm50cmFjayBlbnRyeS4gRXNzZW50aWFsbHksIHRoZSBjb2RlIGlzIG1vdmluZyB0byBleHBsaWNpdGx5IG1hbmFnZSBhbmQgYXNzb2NpYXRlIHRoZXNlIGhlbHBlcnMsIHdoaWNoIGlzIGEgZnVuY3Rpb25hbCBpbXByb3ZlbWVudCBpbiB0aGUgbmV0ZmlsdGVyIGVjb3N5c3RlbS4gVGhpcyBpbXBhY3RzIGhvdyBuZnRhYmxlcyBpbnRlcmFjdHMgd2l0aCBjb25udHJhY2sgZXhwZWN0YXRpb25zLgoKTm93LCBsZXQmIzM5O3Mgc2VlIGhvdyB0aGlzIGFsbCBjb21waWxlcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSXQgbG9va3MgbGlrZSBgbmZ0X2N0LmNgIGlzIGdvaW5nIHRvIGJlIGNvbXBpbGVkIGlmIGBDT05GSUdfTkZUX0NUYCBpcyBlbmFibGVkLiBNYWtlcyBzZW5zZSwgdGhhdCYjMzk7cyBleHBlY3RlZC4gU2ltaWxhcmx5LCBgbmZfY29ubnRyYWNrX2hlbHBlci5jYCBuZWVkcyBgQ09ORklHX05GX0NPTk5UUkFDS2AgdG8gYmUgc2V0LiBUaGF0IGFsaWducyB3aXRoIGhvdyB0aGVzZSBjb21wb25lbnRzIG5vcm1hbGx5IHdvcmsuIE5vdywgSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoZSBgbmV0L25ldGZpbHRlci9NYWtlZmlsZWAgdG8gY29uZmlybSB0aGUgY29tcGlsYXRpb24gZGVwZW5kZW5jaWVzIGFuZCBidWlsZCBlbnZpcm9ubWVudCBmb3IgYG5mdF9jdC5jYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwMzozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZnRfY3RcXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTExMT1vYmotJChDT05GSUdfTkZUX05VTUdFTilcdCYjNDM7PSBuZnRfbnVtZ2VuLm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTEyOm9iai0kKENPTkZJR19ORlRfQ1QpXHRcdCYjNDM7PSBuZnRfY3Qub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZS0xMTMtb2JqLSQoQ09ORklHX05GVF9GTE9XX09GRkxPQUQpXHQmIzQzOz0gbmZ0X2Zsb3dfb2ZmbG9hZC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDM6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTY0OAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgZGVwZW5kZW5jaWVzIGFuZCBmdW5jdGlvbiBjYWxsczoKCioqRGVwZW5kZW5jaWVzIGFuZCBGdW5jdGlvbiBDYWxscyoqCgpPa2F5LCBzbyBJJiMzOTttIHB1dHRpbmcgdG9nZXRoZXIgdGhpcyBuZXcgTmV0ZmlsdGVyIG1vZHVsZSwgYW5kIGl0IGxvb2tzIGxpa2UgSSBhYnNvbHV0ZWx5ICpuZWVkKiBgQ09ORklHX05GVF9DVGAuIFRoYXQmIzM5O3Mgbm9uLW5lZ290aWFibGUuIEFuZCwgb2YgY291cnNlLCB0aGUgZXZlci1wcmVzZW50IGBDT05GSUdfTkZfQ09OTlRSQUNLYCBpcyBhbHNvIGEgbXVzdC1oYXZlLiBObyBzdXJwcmlzZXMgdGhlcmU7IEkga25ldyB0aGF0IGZyb20gdGhlIG91dHNldC4KCk5vdywgbGV0IG1lIGp1c3QgcXVpY2tseSBydW4gdGhyb3VnaCB0aGUgcmVsZXZhbnQgZnVuY3Rpb25zLiBMZXQmIzM5O3Mgc2VlLi4uIEkgc2hvdWxkIGNoZWNrIG91dCBgbmZ0X2N0X2V4cGVjdF9vYmpfaW5pdGAgYW5kIGBuZnRfY3RfZXhwZWN0X29ial9ldmFsYC4gVGhvc2UgYXJlIHRoZSB1c3VhbCBzdXNwZWN0cy4gSSYjMzk7bSBwcmV0dHkgc3VyZSB0aGV5IGFyZSBkZWZpbmVkIHdpdGhpbiBgbmZ0X2N0X2V4cGVjdF9vYmpfb3BzYC4uLiBvciBhdCBsZWFzdCBzb21ldGhpbmcgc2ltaWxhciB0byB0aGF0IHN0cnVjdHVyZS4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHRoYXQsIGJ1dCBteSBpbnN0aW5jdHMgYXJlIHBvaW50aW5nIGluIHRoYXQgZGlyZWN0aW9uLiBHb3R0YSBtYWtlIHN1cmUgdGhvc2UgZXhwZWN0YXRpb25zIGFyZSBoYW5kbGVkIGNvcnJlY3RseS4gVGhpcyYjMzk7bGwgYmUgdGhlIGtleSB0byBtYWtpbmcgdGhpcyBtb2R1bGUgd29yayBsaWtlIGEgY2hhcm0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDM6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZ0X2N0X2V4cGVjdF9vYmpfaW5pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZnRfY3QuYz0xMjcwPXN0YXRpYyBpbnQgbmZ0X2N0X2V4cGVjdF9oZWxwZXJfYWxsb2Moc3RydWN0IG5mdF9jdF9leHBlY3Rfb2JqICpwcml2KVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMtMTI5MC1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmM6MTI5MTpzdGF0aWMgaW50IG5mdF9jdF9leHBlY3Rfb2JqX2luaXQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMtMTI5Mi1cdFx0XHRcdCAgY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IHRiW10sXG4tLVxubmV0L25ldGZpbHRlci9uZnRfY3QuYz0xNDI2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZ0X29iamVjdF9vcHMgbmZ0X2N0X2V4cGVjdF9vYmpfb3BzID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMtMTQyOS1cdC5ldmFsXHRcdD0gbmZ0X2N0X2V4cGVjdF9vYmpfZXZhbCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmM6MTQzMDpcdC5pbml0XHRcdD0gbmZ0X2N0X2V4cGVjdF9vYmpfaW5pdCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMtMTQzMS1cdC5kZXN0cm95XHQ9IG5mdF9jdF9leHBlY3Rfb2JqX2Rlc3Ryb3ksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDM6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjI0NQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDIyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgQ29ubnRyYWNrIEV4cGVjdGF0aW9uIE9iamVjdCBGdW5jdGlvbnMqKgoKT2theSwgbGV0JiMzOTtzIHplcm8gaW4gb24gdGhlc2UgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gY29ubmVjdGlvbiB0cmFja2luZyBleHBlY3RhdGlvbnM6IGBuZnRfY3RfZXhwZWN0X29ial9pbml0YCwgYG5mdF9jdF9leHBlY3Rfb2JqX2V2YWxgLCBgbmZ0X2N0X2V4cGVjdF9vYmpfZGVzdHJveWAsIGBuZnRfY3RfZXhwZWN0X2hlbHBlcl9hbGxvY2AsIGBjdF9leHBlY3RfaGVscGAsIGFuZCBgbmZfY29ubnRyYWNrX2hlbHBlcl9mcmVlYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgdGhlaXIgdmlzaWJpbGl0eSwgYmVjYXVzZSB0aGF0JiMzOTtzIGNyaXRpY2FsIGZvciBob3cgd2UgY2FuIGludGVyYWN0IHdpdGggdGhlbS4gQXJlIHRoZXNlIHN0YXRpYyBvciBleHBvcnRlZD8KClJpZ2h0LCBxdWljayBjaGVjay4uLiBIbW0sIGl0IGxvb2tzIGxpa2UgYG5mdF9jdF9leHBlY3Rfb2JqX2luaXRgLCBgbmZ0X2N0X2V4cGVjdF9vYmpfZXZhbGAsIGBuZnRfY3RfZXhwZWN0X29ial9kZXN0cm95YCwgYG5mdF9jdF9leHBlY3RfaGVscGVyX2FsbG9jYCBhbmQgYGN0X2V4cGVjdF9oZWxwYCBhcmUgYWxsIGRlY2xhcmVkIGFzIHN0YXRpYy4gVGhpcyBtYWtlcyBtZSBwYXVzZS4gR2l2ZW4gbXkgdW5kZXJzdGFuZGluZyBvZiBgRm9jdXNTeW1ib2xzYCBhbmQgc2ltaWxhciB0b29scywgc3RhdGljIGZ1bmN0aW9ucyBjYW4gYmUgcHJvYmxlbWF0aWMgZm9yIGR5bmFtaWMgYW5hbHlzaXMgb3Igc3ltYm9sLWJhc2VkIHRyYWNpbmcuIFdlIG1pZ2h0IG5lZWQgdG8gY29uc2lkZXIgYWx0ZXJuYXRpdmVzIGlmIHdlJiMzOTtyZSBsb2NrZWQgb3V0IG9mIHRoZXNlLgoKQnV0IHdhaXQsIGBuZl9jb25udHJhY2tfaGVscGVyX2ZyZWVgICppcyogZXhwb3J0ZWQsIHRoYXQmIzM5O3MgdXNlZnVsLgoKTm93LCBpZiBtb3N0IG9mIHRoZSBjb3JlIGZ1bmN0aW9ucyBhcmUgc3RhdGljLCB0aGF0IHN1Z2dlc3RzIHdlIG5lZWQgdG8gZGlnIGRlZXBlciB0byBzZWUgaG93IHRoaXMgc3lzdGVtIGlzIG9yY2hlc3RyYXRlZC4gSXQgYWxzbyBtZWFucyB0aGF0LCBsaWtlbHksIGBGb2N1c1N5bWJvbHNgIHdpbGwgbm90IGJlIGFibGUgdG8gaW50ZXJhY3Qgd2l0aCB0aGVtIGFzIGVhc2lseSBhcyBpZiB0aGV5IHdlcmUgZXhwb3J0ZWQuIExldCYjMzk7cyBzZWUuLi4gQWgsIHRoZXJlJiMzOTtzIGBuZnRfY3RfZXhwZWN0X29ial9vcHNgLCBhbmQgdGhhdCYjMzk7cyBsaWtlbHkgKnJlZ2lzdGVyZWQqIHNvbWV3aGVyZS4gVGhhdCYjMzk7cyBhIGtleSBjbHVlLiBJIG5lZWQgdG8gdHJhY2UgYmFjayBmcm9tIHRoYXQgcG9pbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDM6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZ0X2N0X2V4cGVjdF9vYmpfb3BzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZnRfY3QuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mdF9jdC5jPTE0MjQ9c3RhdGljIHN0cnVjdCBuZnRfb2JqZWN0X3R5cGUgbmZ0X2N0X2V4cGVjdF9vYmpfdHlwZTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMtMTQyNS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmM6MTQyNjpzdGF0aWMgY29uc3Qgc3RydWN0IG5mdF9vYmplY3Rfb3BzIG5mdF9jdF9leHBlY3Rfb2JqX29wcyA9IHtcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMtMTQyNy1cdC50eXBlXHRcdD0gXHUwMDI2bmZ0X2N0X2V4cGVjdF9vYmpfdHlwZSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jPTE0MzU9c3RhdGljIHN0cnVjdCBuZnRfb2JqZWN0X3R5cGUgbmZ0X2N0X2V4cGVjdF9vYmpfdHlwZSBfX3JlYWRfbW9zdGx5ID0ge1xubmV0L25ldGZpbHRlci9uZnRfY3QuYy0xNDM2LVx0LnR5cGVcdFx0PSBORlRfT0JKRUNUX0NUX0VYUEVDVCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmM6MTQzNzpcdC5vcHNcdFx0PSBcdTAwMjZuZnRfY3RfZXhwZWN0X29ial9vcHMsXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jLTE0MzgtXHQubWF4YXR0clx0PSBORlRBX0NUX0VYUEVDVF9NQVgsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDM6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzEzOAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDY3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipJbml0aWFsIENvbm50cmFjayBNb2R1bGUgSW5xdWlyeSoqCgpSaWdodCwgc28gYG5mdF9jdF9leHBlY3Rfb2JqX3R5cGVgIGlzIGRlZmluaXRlbHkgcmVnaXN0ZXJlZCwgdGhhdCYjMzk7cyBzdGVwIG9uZS4gTm93LCB3aGVyZSBhcmUgd2Ugd2l0aCB0aG9zZSBoZWxwZXIgZnVuY3Rpb25zPyBMZXQmIzM5O3Mgc2VlLi4uIGBuZl9jb25udHJhY2tfaGVscGVyX2ZyZWVgIGlzICpleHBvcnRlZCogLSBnb29kLCBpdCYjMzk7cyBhdmFpbGFibGUuIEFuZCBgbmZfY29ubnRyYWNrX2hlbHBlcl91bnJlZ2lzdGVyYCBpcyBhbHNvIGV4cG9ydGVkLiBTZWVtcyBwcmV0dHkgc3RhbmRhcmQgc28gZmFyLCB0aGVzZSBsb29rIGxpa2UgdGhlIGtleSBwaWVjZXMuIE5vdywgdGhlIHF1ZXN0aW9uIGlzLCB3aGVyZSBhcmUgdGhlc2UgZnVuY3Rpb25zIGFjdHVhbGx5IGJlaW5nICp1c2VkKj8gVGltZSB0byBjaGVjayBgbmZ0X2N0X21vZHVsZV9pbml0YCBvciBzb21ldGhpbmcgc2ltaWxhci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbm5lY3Rpb24gYmV0d2VlbiB0aGVzZSByZWdpc3RlcmVkIGFuZCBleHBvcnRlZCBlbGVtZW50cyB0byBoYXZlIGEgZnVsbCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzdGF0ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDM6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZ0X2N0X2V4cGVjdF9vYmpfdHlwZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZnRfY3QuYz0xNDE2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBuZnRfY3RfZXhwZWN0X3BvbGljeVtORlRBX0NUX0VYUEVDVF9NQVggJiM0MzsgMV0gPSB7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfY3QuYy0xNDIzLVxubmV0L25ldGZpbHRlci9uZnRfY3QuYzoxNDI0OnN0YXRpYyBzdHJ1Y3QgbmZ0X29iamVjdF90eXBlIG5mdF9jdF9leHBlY3Rfb2JqX3R5cGU7XG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jLTE0MjUtXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jPTE0MjY9c3RhdGljIGNvbnN0IHN0cnVjdCBuZnRfb2JqZWN0X29wcyBuZnRfY3RfZXhwZWN0X29ial9vcHMgPSB7XG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jOjE0Mjc6XHQudHlwZVx0XHQ9IFx1MDAyNm5mdF9jdF9leHBlY3Rfb2JqX3R5cGUsXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jLTE0MjgtXHQuc2l6ZVx0XHQ9IHNpemVvZihzdHJ1Y3QgbmZ0X2N0X2V4cGVjdF9vYmopLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMtMTQzNC1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmM6MTQzNTpzdGF0aWMgc3RydWN0IG5mdF9vYmplY3RfdHlwZSBuZnRfY3RfZXhwZWN0X29ial90eXBlIF9fcmVhZF9tb3N0bHkgPSB7XG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jLTE0MzYtXHQudHlwZVx0XHQ9IE5GVF9PQkpFQ1RfQ1RfRVhQRUNULFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmM9MTQ0Mz1zdGF0aWMgaW50IF9faW5pdCBuZnRfY3RfbW9kdWxlX2luaXQodm9pZClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jLTE0NjAtXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jOjE0NjE6XHRlcnIgPSBuZnRfcmVnaXN0ZXJfb2JqKFx1MDAyNm5mdF9jdF9leHBlY3Rfb2JqX3R5cGUpO1xubmV0L25ldGZpbHRlci9uZnRfY3QuYy0xNDYyLVx0aWYgKGVyciBcdTAwM2MgMClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jLTE0NzItZXJyNDpcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmM6MTQ3MzpcdG5mdF91bnJlZ2lzdGVyX29iaihcdTAwMjZuZnRfY3RfZXhwZWN0X29ial90eXBlKTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMtMTQ3NC0jZW5kaWZcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jPTE0ODQ9c3RhdGljIHZvaWQgX19leGl0IG5mdF9jdF9tb2R1bGVfZXhpdCh2b2lkKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMtMTQ4OC0jZW5kaWZcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmM6MTQ4OTpcdG5mdF91bnJlZ2lzdGVyX29iaihcdTAwMjZuZnRfY3RfZXhwZWN0X29ial90eXBlKTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMtMTQ5MC1cdG5mdF91bnJlZ2lzdGVyX29iaihcdTAwMjZuZnRfY3RfaGVscGVyX29ial90eXBlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDM6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODAzNAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDI4NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTmV0ZmlsdGVyIENvbm50cmFjayBPYmplY3QgRnVuY3Rpb25zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBmdW5jdGlvbnMsIGBuZnRfY3RfZXhwZWN0X29ial9pbml0YCBhbmQgYG5mdF9jdF9leHBlY3Rfb2JqX2V2YWxgLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRoYXQsIGJlaW5nIHN0YXRpYywgdGhleSAqbWlnaHQqIGdldCBpbmxpbmVkIGJ5IHRoZSBjb21waWxlci4gQnV0IHdhaXQsIHRoZXkmIzM5O3JlIGFzc2lnbmVkIHRvIGZ1bmN0aW9uIHBvaW50ZXJzIHdpdGhpbiBgbmZ0X2N0X2V4cGVjdF9vYmpfb3BzYC4gVGhhdCBtZWFucyB0aGV5IGRlZmluaXRlbHkgKmFyZW4mIzM5O3QqIGlubGluZWQuIFNvLCBhY2NvcmRpbmcgdG8gdGhlIGluc3RydWN0aW9ucywgaW5jbHVkaW5nIHRoZW0gaW4gYEZvY3VzU3ltYm9sc2AgaXMgYSBwb3NzaWJpbGl0eSwgdGhvdWdoIHRoZSBwcm9tcHQgd2FudHMgbWUgdG8gcHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cy4gU2luY2UgdGhleSAqYXJlKiBzdGF0aWMsIGV2ZW4gdGhvdWdoIHRoZXkmIzM5O3JlIG5vdCBpbmxpbmVkLCBJIG5lZWQgdG8gZmluZCBzb21ldGhpbmcgYmV0dGVyLgoKQXJlIHRoZXJlIGFueSBvdGhlciBvcHRpb25zPyBBaCwgYG5mX2Nvbm50cmFja19oZWxwZXJfZnJlZWAgaXMgbm9uLXN0YXRpYyBhbmQgbG9va3MgcHJvbWlzaW5nLiBBbmQgYG5mX2Nvbm50cmFja19oZWxwZXJfdW5yZWdpc3RlcmAsIHRoYXQmIzM5O3Mgbm9uLXN0YXRpYyB0b28uCgpCdXQsIGhhbmcgb24sIGxldCYjMzk7cyBzdGVwIGJhY2sgZm9yIGEgc2Vjb25kLiBgbmZ0X2N0X2V4cGVjdF9vYmpfaW5pdGAgKmlzKiBjYWxsZWQgdmlhIGBuZnRfb2JqZWN0X29wcy0mZ3Q7aW5pdGAuIFRoZSBhY3R1YWwgZW50cnkgcG9pbnQgZnJvbSB0aGUgTmV0bGluayBpbnRlcmZhY2UgaXMgcHJvYmFibHkgc29tZXRoaW5nIGxpa2UgYG5mX3RhYmxlc19uZXdvYmpgIG9yIHNvbWV0aGluZyBzaW1pbGFyLCByaWdodD8gVGhvdWdoLCBJIHNlZSB0aGF0IGBuZl9jb25udHJhY2tfaGVscGVyX2ZyZWVgIGhhcyBiZWVuIGV4cGxpY2l0bHkgYWRkZWQgaW4gdGhpcyBwYXRjaC4gU28sIGl0IGlzIGRlZmluaXRlbHkgYSB2YWxpZCBvcHRpb24hCgpPa2F5LCB0aW1lIHRvIGNoZWNrIGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgIHRvIGNvbmZpcm0gYE5GVF9DVGAuIExldCYjMzk7cyBzZWUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDM6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5GVF9DVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWc9NDg1PWNvbmZpZyBORlRfTlVNR0VOXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ5MC1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo0OTE6Y29uZmlnIE5GVF9DVFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ5Mi1cdGRlcGVuZHMgb24gTkZfQ09OTlRSQUNLXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDAzOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg3NjYKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIGEgcGVyc29uYWwgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKk5hdmlnYXRpbmcgRGVwZW5kZW5jaWVzIGluIHRoZSBOZXRmaWx0ZXIgRnJhbWV3b3JrKioKCkFscmlnaHQsIHNvIEkmIzM5O20gc2VlaW5nIHRoaXMgYE5GVF9DVGAgbW9kdWxlLi4uIEkgaW1tZWRpYXRlbHkgcmVjb2duaXplIGl0IGFzIHNvbWV0aGluZyByZWxhdGVkIHRvIGNvbm50cmFjay4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIG5vdGluZyB0aGF0IGBORlRfQ1RgIHNlZW1zIHRvICpyZWx5KiBvbiBgTkZfQ09OTlRSQUNLYC4gVGhhdCYjMzk7cyBhIGtleSBwaWVjZSBvZiBpbmZvcm1hdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhhdCBkZXBlbmRlbmN5IGZ1bGx5LgoKVGhlcmVmb3JlLCB0aGUgbG9naWNhbCBuZXh0IHN0ZXAgZm9yIG1lIGlzIHRvIGRpZyBpbnRvIHRoZSBOZXRmaWx0ZXIgY29uZmlndXJhdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBnbyB0byB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlciDigJMgdGhlIGBLY29uZmlnYCBmaWxlcyDigJMgd2l0aGluIHRoZSBgbmV0L25ldGZpbHRlci9gIGRpcmVjdG9yeS4gVGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtsbCBmaW5kIHRoZSBkZWZpbml0aW9ucyBmb3IgYE5GX0NPTk5UUkFDS2AgYW5kLCBpbXBvcnRhbnRseSwgdW5kZXJzdGFuZCBob3cgaXQgcmVsYXRlcyB0byBgTkZUX0NUYC4gSSBuZWVkIHRvIGVuc3VyZSBJJiMzOTttIGdldHRpbmcgdGhlIHdob2xlIHBpY3R1cmUgb2YgdGhlIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiB0aGVzZSBtb2R1bGVzLiBNeSBnb2FsIGlzIHRvIGNvbmZpcm0gdGhlIGRlcGVuZGVuY3kgYW5kIGFzY2VydGFpbiBhbnkgcmVsYXRlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDAzOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORl9DT05OVFJBQ0smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnPTc0PWNvbmZpZyBORVRGSUxURVJfTkVUTElOS19PU0Zcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctODEtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6ODI6Y29uZmlnIE5GX0NPTk5UUkFDS1xubmV0L25ldGZpbHRlci9LY29uZmlnLTgzLVx0dHJpc3RhdGUgXCYjMzQ7TmV0ZmlsdGVyIGNvbm5lY3Rpb24gdHJhY2tpbmcgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz0xMTE9Y29uZmlnIE5FVEZJTFRFUl9DT05OQ09VTlRcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTEzLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjExNDpjb25maWcgTkZfQ09OTlRSQUNLX01BUktcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMTUtXHRib29sICAmIzM5O0Nvbm5lY3Rpb24gbWFyayB0cmFja2luZyBzdXBwb3J0JiMzOTtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTIyLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjEyMzpjb25maWcgTkZfQ09OTlRSQUNLX1NFQ01BUktcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMjQtXHRib29sICAmIzM5O0Nvbm5lY3Rpb24gdHJhY2tpbmcgc2VjdXJpdHkgbWFyayBzdXBwb3J0JiMzOTtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTM1LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjEzNjpjb25maWcgTkZfQ09OTlRSQUNLX1pPTkVTXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTM3LVx0Ym9vbCAgJiMzOTtDb25uZWN0aW9uIHRyYWNraW5nIHpvbmVzJiMzOTtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTQ3LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjE0ODpjb25maWcgTkZfQ09OTlRSQUNLX1BST0NGU1xubmV0L25ldGZpbHRlci9LY29uZmlnLTE0OS1cdGJvb2wgXCYjMzQ7U3VwcGx5IENUIGxpc3QgaW4gcHJvY2ZzIChPQlNPTEVURSlcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTU2LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjE1Nzpjb25maWcgTkZfQ09OTlRSQUNLX0VWRU5UU1xubmV0L25ldGZpbHRlci9LY29uZmlnLTE1OC1cdGJvb2wgXCYjMzQ7Q29ubmVjdGlvbiB0cmFja2luZyBldmVudHNcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTY2LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjE2Nzpjb25maWcgTkZfQ09OTlRSQUNLX1RJTUVPVVRcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNjgtXHRib29sICAmIzM5O0Nvbm5lY3Rpb24gdHJhY2tpbmcgdGltZW91dCYjMzk7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTE3Ni1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxNzc6Y29uZmlnIE5GX0NPTk5UUkFDS19USU1FU1RBTVBcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNzgtXHRib29sICAmIzM5O0Nvbm5lY3Rpb24gdHJhY2tpbmcgdGltZXN0YW1waW5nJiMzOTtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTg3LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjE4ODpjb25maWcgTkZfQ09OTlRSQUNLX0xBQkVMU1xubmV0L25ldGZpbHRlci9LY29uZmlnLTE4OS1cdGJvb2wgXCYjMzQ7Q29ubmVjdGlvbiB0cmFja2luZyBsYWJlbHNcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTk0LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjE5NTpjb25maWcgTkZfQ09OTlRSQUNLX09WU1xubmV0L25ldGZpbHRlci9LY29uZmlnLTE5Ni1cdGJvb2xcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9MjAxPWNvbmZpZyBORl9DVF9QUk9UT19TQ1RQXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTIxMS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyMTI6Y29uZmlnIE5GX0NPTk5UUkFDS19BTUFOREFcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yMTMtXHR0cmlzdGF0ZSBcJiMzNDtBbWFuZGEgYmFja3VwIHByb3RvY29sIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjI2LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjIyNzpjb25maWcgTkZfQ09OTlRSQUNLX0ZUUFxubmV0L25ldGZpbHRlci9LY29uZmlnLTIyOC1cdHRyaXN0YXRlIFwmIzM0O0ZUUCBwcm90b2NvbCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTIzOC1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyMzk6Y29uZmlnIE5GX0NPTk5UUkFDS19IMzIzXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjQwLVx0dHJpc3RhdGUgXCYjMzQ7SC4zMjMgcHJvdG9jb2wgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNTctXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MjU4OmNvbmZpZyBORl9DT05OVFJBQ0tfSVJDXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjU5LVx0dHJpc3RhdGUgXCYjMzQ7SVJDIERDQyBwcm90b2NvbCBzdXBwb3J0IChvYnNvbGV0ZSlcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjczLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjI3NDpjb25maWcgTkZfQ09OTlRSQUNLX0JST0FEQ0FTVFxubmV0L25ldGZpbHRlci9LY29uZmlnLTI3NS1cdHRyaXN0YXRlXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjc2LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjI3Nzpjb25maWcgTkZfQ09OTlRSQUNLX05FVEJJT1NfTlNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNzgtXHR0cmlzdGF0ZSBcJiMzNDtOZXRCSU9TIG5hbWUgc2VydmljZSBwcm90b2NvbCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTI5NS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyOTY6Y29uZmlnIE5GX0NPTk5UUkFDS19TTk1QXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjk3LVx0dHJpc3RhdGUgXCYjMzQ7U05NUCBzZXJ2aWNlIHByb3RvY29sIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzEwLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjMxMTpjb25maWcgTkZfQ09OTlRSQUNLX1BQVFBcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zMTItXHR0cmlzdGF0ZSBcJiMzNDtQUHRQIHByb3RvY29sIHN1cHBvcnQgKGRlcHJlY2F0ZWQpXCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTMyOS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzozMzA6Y29uZmlnIE5GX0NPTk5UUkFDS19TQU5FXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzMxLVx0dHJpc3RhdGUgXCYjMzQ7U0FORSBwcm90b2NvbCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTM0Mi1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzozNDM6Y29uZmlnIE5GX0NPTk5UUkFDS19TSVBcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zNDQtXHR0cmlzdGF0ZSBcJiMzNDtTSVAgcHJvdG9jb2wgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zNTQtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MzU1OmNvbmZpZyBORl9DT05OVFJBQ0tfVEZUUFxubmV0L25ldGZpbHRlci9LY29uZmlnLTM1Ni1cdHRyaXN0YXRlIFwmIzM0O1RGVFAgcHJvdG9jb2wgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwMzozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDM0NwoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyBDb25uZWN0aW9uIFRyYWNraW5nIENvbmZpZ3VyYXRpb25zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBjb25uZWN0aW9uIHRyYWNraW5nIG9wdGlvbnMgaGVyZS4gSSBzZWUgYE5GX0NPTk5UUkFDS2AgYW5kIGBORlRfQ1RgIG1lbnRpb25lZC4gUmlnaHQsIHRoYXQmIzM5O3MgdGhlIGNsYXNzaWMgbmV0ZmlsdGVyIGFuZCB0aGUgbmV3ZXIgbmZ0YWJsZXMgaW1wbGVtZW50YXRpb25zLCByZXNwZWN0aXZlbHkuIE5vdywgSSB2YWd1ZWx5IHJlbWVtYmVyIGBORlRfQ1RgIGJ1aWxkaW5nIG9uIHRvcCBvZiBgTkZfQ09OTlRSQUNLYC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBvdmVybG9va2luZyBhbnkgb3RoZXIgY3J1Y2lhbCBkZXBlbmRlbmNpZXMuIExldCBtZSBxdWlja2x5IHZlcmlmeSBleGFjdGx5IHdoYXQgYE5GVF9DVGAgcmVxdWlyZXMgdG8gZnVuY3Rpb24uIFRpbWUgdG8gY2hlY2sgaXRzIGRlcGVuZGVuY3kgdHJlZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDM6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5GVF9DVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWc9NDg1PWNvbmZpZyBORlRfTlVNR0VOXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ5MC1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo0OTE6Y29uZmlnIE5GVF9DVFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ5Mi1cdGRlcGVuZHMgb24gTkZfQ09OTlRSQUNLXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDAzOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNjI1CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AgZmlsZSwgc3BlY2lmaWNhbGx5IHRoZSBzZWN0aW9uIGNvbmNlcm5pbmcgYE5GVF9DVGA6CgoqKkRlbHZpbmcgaW50byBgTkZUX0NUYCBpbiBLY29uZmlnKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhlIGBLY29uZmlnYCBmaWxlIGZvciB0aGUgbmV0ZmlsdGVyIHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGhvdyB0aGUgY29ubnRyYWNrIGZ1bmN0aW9uYWxpdHksIHJlcHJlc2VudGVkIGJ5IGBORlRfQ1RgLCBpcyBjb25maWd1cmVkLiAgSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIGRlcGVuZGVuY2llcyBhbmQgcG90ZW50aWFsbHkgc29tZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBsb2dpYyBkZWZpbmVkIGhlcmUuIFRoaXMgZmlsZSBpcyB0aGUgYmVkcm9jayBmb3IgaG93IHRoZSBrZXJuZWwmIzM5O3MgYnVpbGQgc3lzdGVtIGRlY2lkZXMgKndoZXRoZXIqIGFuZCAqaG93KiB0byBpbmNsdWRlIHRoaXMgY3J1Y2lhbCBjb21wb25lbnQuIEkmIzM5O20gbG9va2luZyBmb3IgY2x1ZXMgYWJvdXQgdGhlIGRlZmF1bHQgc3RhdGUgb2YgYE5GVF9DVGAsIGFueSByZWxhdGVkIG9wdGlvbnMgaXQgZGVwZW5kcyBvbiAobGlrZSBvdGhlciBOZXRmaWx0ZXIgbW9kdWxlcyBvciBzcGVjaWZpYyBrZXJuZWwgZmVhdHVyZXMpLCBhbmQgYW55IHBvdGVudGlhbCB0cmFkZS1vZmZzIGluIHRlcm1zIG9mIHJlc291cmNlIHVzYWdlIG9yIHBlcmZvcm1hbmNlIHRoYXQgbWlnaHQgYmUgZXhwcmVzc2VkIGhlcmUuIE15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhhdCBjb21wbGV4IGZlYXR1cmVzIGxpa2UgY29ubmVjdGlvbiB0cmFja2luZyBhcmUgb2Z0ZW4gaW50ZXJ0d2luZWQgd2l0aCBvdGhlciBhcmVhcywgc28gSSYjMzk7bGwgYmUga2VlcGluZyBhbiBleWUgb3V0IGZvciBob3cgdGhpcyBpcyBwcmVzZW50ZWQsIHRoaW5raW5nIGFib3V0IGhvdyBJJiMzOTtkIGN1c3RvbWl6ZSB0aGlzIHRvIGdldCB0aGUgc3BlY2lmaWMgYmVoYXZpb3JzIHRoYXQgSSBuZWVkIGluIG15IGRlcGxveW1lbnRzLiBJJiMzOTttIGFudGljaXBhdGluZyB0aGF0IGBORlRfQ1RgIHdpbGwgbGlrZWx5IGJlIGRlcGVuZGVudCBvbiBvdGhlciBjb3JlIG5ldGZpbHRlciBtb2R1bGVzLCBhbmQgSSYjMzk7bGwgYmUgaW50ZXJlc3RlZCBpbiBob3cgdGhlIG9wdGlvbnMgZm9yIHRoZXNlIGFyZSBkZXNjcmliZWQuIExldCYjMzk7cyBzZWUgaG93IHRoZXkgaGFuZGxlIGVuYWJsaW5nIG9yIGRpc2FibGluZyBpdCBhbmQgdGhlIGNvbnNlcXVlbmNlcyBvZiB0aG9zZSBjaG9pY2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwMzozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDgwOlx0Y29uZmlnIE5GX1RBQkxFU19ORVRERVZcbiA0ODE6XHRcdGJvb2wgXCYjMzQ7TmV0ZmlsdGVyIG5mX3RhYmxlcyBuZXRkZXYgdGFibGVzIHN1cHBvcnRcJiMzNDtcbiA0ODI6XHRcdGhlbHBcbiA0ODM6XHRcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgXCYjMzQ7bmV0ZGV2XCYjMzQ7IHRhYmxlLlxuIDQ4NDpcdFxuIDQ4NTpcdGNvbmZpZyBORlRfTlVNR0VOXG4gNDg2Olx0XHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgbmZfdGFibGVzIG51bWJlciBnZW5lcmF0b3IgbW9kdWxlXCYjMzQ7XG4gNDg3Olx0XHRoZWxwXG4gNDg4Olx0XHQgIFRoaXMgb3B0aW9uIGFkZHMgdGhlIG51bWJlciBnZW5lcmF0b3IgZXhwcmVzc2lvbiB1c2VkIHRvIHBlcmZvcm1cbiA0ODk6XHRcdCAgaW5jcmVtZW50YWwgY291bnRpbmcgYW5kIHJhbmRvbSBudW1iZXJzIGJvdW5kIHRvIGEgdXBwZXIgbGltaXQuXG4gNDkwOlx0XG4gNDkxOlx0Y29uZmlnIE5GVF9DVFxuIDQ5MjpcdFx0ZGVwZW5kcyBvbiBORl9DT05OVFJBQ0tcbiA0OTM6XHRcdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBuZl90YWJsZXMgY29ubnRyYWNrIG1vZHVsZVwmIzM0O1xuIDQ5NDpcdFx0aGVscFxuIDQ5NTpcdFx0ICBUaGlzIG9wdGlvbiBhZGRzIHRoZSBcJiMzNDtjdFwmIzM0OyBleHByZXNzaW9uIHRoYXQgeW91IGNhbiB1c2UgdG8gbWF0Y2hcbiA0OTY6XHRcdCAgY29ubmVjdGlvbiB0cmFja2luZyBpbmZvcm1hdGlvbiBzdWNoIGFzIHRoZSBmbG93IHN0YXRlLlxuIDQ5NzpcdFxuIDQ5ODpcdGNvbmZpZyBORlRfRVhUSERSX0RDQ1BcbiA0OTk6XHRcdGJvb2wgXCYjMzQ7TmV0ZmlsdGVyIG5mX3RhYmxlcyBleHRoZHIgRENDUCBzdXBwb3J0IChERVBSRUNBVEVEKVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwMzozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTI2OQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkNoZWNraW5nIHRoZSBQbGFjZW1lbnQgb2YgTkZUX0NUKioKCk9rYXksIHNvIEkmIzM5O20gcHJldHR5IHN1cmUgSSBzYXcgYE5GVF9DVGAgbmVzdGVkIHdpdGhpbiB0aGF0IGBpZiBORl9UQUJMRVNgIGNvbmRpdGlvbmFsLiBCdXQgbGV0JiMzOTtzIG5vdCByZWx5IG9uIG1lbW9yeTsgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdC4gR290dGEgcXVpY2tseSB2ZXJpZnkgdGhhdCBgTkZUX0NUYCBpcyBhY3R1YWxseSBkZWZpbmVkIGNvbmRpdGlvbmFsbHkgYmFzZWQgb24gdGhlIGBORl9UQUJMRVNgIG1hY3JvLiBEb3VibGUtY2hlY2tpbmcgZW5zdXJlcyB0aGF0IHRoZSBjb21waWxlLXRpbWUgZGVwZW5kZW5jaWVzIGFyZSB3aGF0IEkgZXhwZWN0IHRoZW0gdG8gYmUsIGVzcGVjaWFsbHkgY29uc2lkZXJpbmcgdGhhdCBgTkZfVEFCTEVTYCBsaWtlbHkgZ292ZXJucyB0aGUgaW5jbHVzaW9uIG9mIHRoZSBlbnRpcmUgTmV0ZmlsdGVyIGluZnJhc3RydWN0dXJlIGNvbXBvbmVudHMuIFRoaXMgaXMgYSBjb3JlIHBhcnQgb2YgdGhlIHN5c3RlbSYjMzk7cyBtb2R1bGFyaXR5LCBzbyBJIG5lZWQgdG8gYmUgZXhhY3QuIEl0JiMzOTtzIGEgcXVpY2sgc2FuaXR5IGNoZWNrIGJ1dCBlc3NlbnRpYWwgYmVmb3JlIEkgbW92ZSBmb3J3YXJkLCBlc3BlY2lhbGx5IGlmIGl0JiMzOTtzIHJlbGF0ZWQgdG8gc29tZSB3b3JrIEkmIzM5O20gZG9pbmcgaW4gdGhhdCBhcmVhLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwMzozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkZfVEFCTEVTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZz00NTM9ZW5kaWYgIyBORl9DT05OVFJBQ0tcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00NTQtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NDU1OmNvbmZpZyBORl9UQUJMRVNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00NTYtXHRzZWxlY3QgTkVURklMVEVSX05FVExJTktcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9NDcxPWlmIE5GX1RBQkxFU1xubmV0L25ldGZpbHRlci9LY29uZmlnOjQ3Mjpjb25maWcgTkZfVEFCTEVTX0lORVRcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00NzMtXHRkZXBlbmRzIG9uIElQVjZcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDc5LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjQ4MDpjb25maWcgTkZfVEFCTEVTX05FVERFVlxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ4MS1cdGJvb2wgXCYjMzQ7TmV0ZmlsdGVyIG5mX3RhYmxlcyBuZXRkZXYgdGFibGVzIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDM6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE3MDIKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA0MzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS2VybmVsIE1vZHVsZSBBbmFseXNpczogSWRlbnRpZnlpbmcgRnV6emluZyBUYXJnZXRzKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgYE5GX1RBQkxFU2Agc3R1ZmYuIEl0JiMzOTtzIGNsZWFyIHRoYXQgdG8gZXZlbiBiZWdpbiwgSSBuZWVkIHRvIGhhdmUgdGhlIGBORl9UQUJMRVNgLCBgTkZfQ09OTlRSQUNLYCwgYW5kIGBORlRfQ1RgIGNvbmZpZ3MgZW5hYmxlZC4gTm93LCB0aGUgcmVhbCBxdWVzdGlvbiBpcywgd2hhdCBmdW5jdGlvbnMgc2hvdWxkIEkgYmUgdGFyZ2V0aW5nIHdpdGggZnV6emluZz8KCkxldCYjMzk7cyBzZWUuIGBuZl9jb25udHJhY2tfaGVscGVyX2ZyZWVgIGp1bXBzIG91dCBiZWNhdXNlIGl0JiMzOTtzIGV4cG9ydGVkIGFuZCBjYWxsZWQgZnJvbSBib3RoIGBuZnRfY3RfZXhwZWN0X29ial9kZXN0cm95YCBhbmQgYG5mX2Nvbm50cmFja19oZWxwZXJfdW5yZWdpc3RlcmAuIFRoZW4sIGBuZnRfY3RfZXhwZWN0X29ial9pbml0YCBnZXRzIGNhbGxlZCBvbiBuZXcgZXhwZWN0YXRpb24gb2JqZWN0IGNyZWF0aW9uLCBhbmQgYG5mdF9jdF9leHBlY3Rfb2JqX2V2YWxgIGlzIGludm9rZWQgZHVyaW5nIGV4cGVjdGF0aW9uIGV2YWx1YXRpb24uIGBuZnRfY3RfZXhwZWN0X2hlbHBlcl9hbGxvY2AgcG9wcyB1cCBhcyBwYXJ0IG9mIGBuZnRfY3RfZXhwZWN0X29ial9pbml0YCwgYW5kIGZpbmFsbHksIGBjdF9leHBlY3RfaGVscGAgaXMgdHJpZ2dlcmVkIHdoZW4gYW4gZXhwZWN0YXRpb24gaXMgbWF0Y2hlZC4KCldhaXQgYSBzZWNvbmQsIGBuZnRfY3RfZXhwZWN0X29ial9pbml0YCBpcyAqc3RhdGljKj8gQnV0IGl0JiMzOTtzIGFzc2lnbmVkIHRvIGBuZnRfY3RfZXhwZWN0X29ial9vcHMuaW5pdGAuIEhtbSwgY2FuIEkgdXNlIGl0IGluIGBGb2N1c1N5bWJvbHNgPyBZZXMsIHN5emthbGxlciAqY2FuKiBmdXp6IHN0YXRpYyBmdW5jdGlvbnMgYXMgbG9uZyBhcyB0aGV5IGFyZW4mIzM5O3QgaW5saW5lZCEgTGV0JiMzOTtzIGNoZWNrLiBBbmQgc2luY2UgYG5mdF9jdF9leHBlY3Rfb2JqX2luaXRgIGlzIGEgZGVjZW50IHNpemUsIGl0JiMzOTtzICpwcm9iYWJseSogbm90IGlubGluZWQuIGBuZnRfY3RfZXhwZWN0X29ial9ldmFsYCBpcyBhbHNvIHN1YnN0YW50aWFsLCBzbyB0aGF0JiMzOTtzIGxpa2VseSBub3QgaW5saW5lZCBlaXRoZXIuIGBjdF9leHBlY3RfaGVscGAsIHRoYXQmIzM5O3MgYXNzaWduZWQgdmlhIGByY3VfYXNzaWduX3BvaW50ZXJgIHRvIGBjdF9leHBlY3RfaGVscGVyLSZndDtoZWxwYCwgc28gaXQmIzM5O3MgKmRlZmluaXRlbHkqIG5vdCBpbmxpbmVkLiBBbmQgb2YgY291cnNlLCBgbmZfY29ubnRyYWNrX2hlbHBlcl9mcmVlYCBpcyBleHBvcnRlZC4KCkFscmlnaHQsIHB1dHRpbmcgaXQgYWxsIHRvZ2V0aGVyLCBoZXJlJiMzOTtzIHRoZSBsaXN0IG9mIGZ1bmN0aW9ucyB0byB2ZXJpZnkgYW5kIHRoZW4gZm9jdXMgb246CgoqICAgYG5mdF9jdF9leHBlY3Rfb2JqX2luaXRgCiogICBgbmZ0X2N0X2V4cGVjdF9vYmpfZXZhbGAKKiAgIGBuZnRfY3RfZXhwZWN0X29ial9kZXN0cm95YAoqICAgYG5mdF9jdF9leHBlY3RfaGVscGVyX2FsbG9jYAoqICAgYGN0X2V4cGVjdF9oZWxwYAoqICAgYG5mX2Nvbm50cmFja19oZWxwZXJfZnJlZWAKCk5vdywgbGV0IG1lIGdvIGFoZWFkIGFuZCBjb25maXJtIHRoZXNlIGZ1bmN0aW9ucyBleGlzdCBpbiB0aGUga2VybmVsIGFuZCBhcmVuJiMzOTt0IGJlaW5nIG9wdGltaXplZCBhd2F5LiBUaW1lIHRvIGdldCB0byB3b3JrIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwMzozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZnRfY3RfZXhwZWN0X29ial9pbml0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZnRfY3QuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mdF9jdC5jPTEyNzA9c3RhdGljIGludCBuZnRfY3RfZXhwZWN0X2hlbHBlcl9hbGxvYyhzdHJ1Y3QgbmZ0X2N0X2V4cGVjdF9vYmogKnByaXYpXG4tLVxubmV0L25ldGZpbHRlci9uZnRfY3QuYy0xMjkwLVxubmV0L25ldGZpbHRlci9uZnRfY3QuYzoxMjkxOnN0YXRpYyBpbnQgbmZ0X2N0X2V4cGVjdF9vYmpfaW5pdChjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxubmV0L25ldGZpbHRlci9uZnRfY3QuYy0xMjkyLVx0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgdGJbXSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jPTE0MjY9c3RhdGljIGNvbnN0IHN0cnVjdCBuZnRfb2JqZWN0X29wcyBuZnRfY3RfZXhwZWN0X29ial9vcHMgPSB7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfY3QuYy0xNDI5LVx0LmV2YWxcdFx0PSBuZnRfY3RfZXhwZWN0X29ial9ldmFsLFxubmV0L25ldGZpbHRlci9uZnRfY3QuYzoxNDMwOlx0LmluaXRcdFx0PSBuZnRfY3RfZXhwZWN0X29ial9pbml0LFxubmV0L25ldGZpbHRlci9uZnRfY3QuYy0xNDMxLVx0LmRlc3Ryb3lcdD0gbmZ0X2N0X2V4cGVjdF9vYmpfZGVzdHJveSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDM6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI5ODcKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRob3NlIHRob3VnaHRzIGFzIGEgZmlyc3QtcGVyc29uIGV4cGVydCBwZXJzcGVjdGl2ZToKCioqQ29ubmVjdGlvbiBUcmFja2luZyBDb25jZXJucyoqCgpZZXMsIGNvbm5lY3Rpb24gdHJhY2tpbmcsIGl0JiMzOTtzIGRlZmluaXRlbHkgdGhlcmUsIHRoZSBmb3VuZGF0aW9uIG9mIGEgbG90IG9mIG5ldHdvcmsgc2VjdXJpdHkgYW5kIHRyYWZmaWMgbWFuYWdlbWVudC4gQnV0IG5vdyB0aGF0IEkgYW0gdGhpbmtpbmcgYWJvdXQgY29ubmVjdGlvbiB0cmFja2luZywgd2hhdCBhYm91dCBgbmZfY29ubnRyYWNrX2hlbHBlcl9mcmVlYD8gSXQgYWx3YXlzIHNlZW1zIHRvIGJlIGEgc291cmNlIG9mIHBvdGVudGlhbCBpc3N1ZXMuIERvZXMgdGhpcyBoZWxwZXIgbmVlZCBpbXByb3ZlbWVudD8KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDM6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZfY29ubnRyYWNrX2hlbHBlcl9mcmVlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmM9NDQ0PXN0YXRpYyBib29sIGV4cGVjdF9pdGVyX21lKHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHAsIHZvaWQgKmRhdGEpXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMtNDU4LVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmM6NDU5OnZvaWQgbmZfY29ubnRyYWNrX2hlbHBlcl9mcmVlKHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICptZSlcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jLTQ2MC17XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMtNDczLX1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jOjQ3NDpFWFBPUlRfU1lNQk9MX0dQTChuZl9jb25udHJhY2tfaGVscGVyX2ZyZWUpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMtNDc1LVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmM9NDc2PXZvaWQgbmZfY29ubnRyYWNrX2hlbHBlcl91bnJlZ2lzdGVyKHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICptZSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy00ODItXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYzo0ODM6XHRuZl9jb25udHJhY2tfaGVscGVyX2ZyZWUobWUpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMtNDg0LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDM6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM0NzYKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgY3JhZnRlZCB3aXRoIHRoZSB1bmRlcnN0YW5kaW5nIHRoYXQgSSYjMzk7bSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6CgoqKk5hdmlnYXRpbmcgdGhlIEtub3duIGFuZCB0aGUgUG90ZW50aWFsKioKClllcywgdGhpcyB0aGluZywgdGhpcyBjb25jZXB0LCB0aGlzIHNwZWNpZmljIGlzc3VlLi4uIGl0JiMzOTtzIHJlYWwuIEkgYWNrbm93bGVkZ2UgaXRzIHByZXNlbmNlLiBXZSYjMzk7cmUgZGVhbGluZyB3aXRoIHNvbWV0aGluZyB0YW5naWJsZSBoZXJlLgoKTm93LCBhIGNyaXRpY2FsIHBvaW50IGZsYXNoZXMgaW4gbXkgbWluZDogd2hhdCBhYm91dCBgY3RfZXhwZWN0X2hlbHBgPyBJdCYjMzk7cyBhIGtleSBmdW5jdGlvbiBvciBwYXJhbWV0ZXIgcmVsYXRlZCB0byB0aGlzLiBJdCYjMzk7cyBvZnRlbiBvdmVybG9va2VkLCBidXQgaXQmIzM5O3MgKmxpa2VseSogaGlnaGx5IHJlbGV2YW50IHRvIHdoYXRldmVyIHNpdHVhdGlvbiB3ZSYjMzk7cmUgY3VycmVudGx5IHByb2Nlc3NpbmcuIFdlJiMzOTtsbCBoYXZlIHRvIGludmVzdGlnYXRlIHRoYXQgZnVydGhlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDM6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y3RfZXhwZWN0X2hlbHAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mdF9jdC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZ0X2N0LmM9MTIzMT1zdHJ1Y3QgbmZ0X2N0X2V4cGVjdF9kYXRhIHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jLTEyMzUtXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jOjEyMzY6c3RhdGljIGludCBjdF9leHBlY3RfaGVscChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgcHJvdG9mZixcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMtMTIzNy1cdFx0XHQgIHN0cnVjdCBuZl9jb25uICpjdCwgZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm8pXG4tLVxubmV0L25ldGZpbHRlci9uZnRfY3QuYy0xMjY5LVxubmV0L25ldGZpbHRlci9uZnRfY3QuYzoxMjcwOnN0YXRpYyBpbnQgbmZ0X2N0X2V4cGVjdF9oZWxwZXJfYWxsb2Moc3RydWN0IG5mdF9jdF9leHBlY3Rfb2JqICpwcml2KVxubmV0L25ldGZpbHRlci9uZnRfY3QuYy0xMjcxLXtcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmM6MTI3MjpcdHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICpjdF9leHBlY3RfaGVscGVyO1xubmV0L25ldGZpbHRlci9uZnRfY3QuYy0xMjczLVxubmV0L25ldGZpbHRlci9uZnRfY3QuYzoxMjc0Olx0Y3RfZXhwZWN0X2hlbHBlciA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyKTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmM6MTI3NTpcdGlmICghY3RfZXhwZWN0X2hlbHBlcilcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMtMTI3Ni1cdFx0cmV0dXJuIC1FTk9NRU07XG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jLTEyNzctXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jOjEyNzg6XHRzbnByaW50ZihjdF9leHBlY3RfaGVscGVyLVx1MDAzZW5hbWUsIHNpemVvZihjdF9leHBlY3RfaGVscGVyLVx1MDAzZW5hbWUpLCBcJiMzNDslc1wmIzM0Oyxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMtMTI3OS1cdFx0IFwmIzM0O25mdF9jdF9leHBlY3RcJiMzNDspO1xubmV0L25ldGZpbHRlci9uZnRfY3QuYzoxMjgwOlx0Y3RfZXhwZWN0X2hlbHBlci1cdTAwM2VtZSA9IFRISVNfTU9EVUxFO1xubmV0L25ldGZpbHRlci9uZnRfY3QuYzoxMjgxOlx0Y3RfZXhwZWN0X2hlbHBlci1cdTAwM2VleHBlY3RfcG9saWN5W05GX0NUX0VYUEVDVF9DTEFTU19ERUZBVUxUXS5tYXhfZXhwZWN0ZWQgPSBwcml2LVx1MDAzZXNpemU7XG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jOjEyODI6XHRyY3VfYXNzaWduX3BvaW50ZXIoY3RfZXhwZWN0X2hlbHBlci1cdTAwM2VoZWxwLCBjdF9leHBlY3RfaGVscCk7XG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jOjEyODM6XHRyZWZjb3VudF9zZXQoXHUwMDI2Y3RfZXhwZWN0X2hlbHBlci1cdTAwM2VjdF9yZWZjbnQsIDEpO1xubmV0L25ldGZpbHRlci9uZnRfY3QuYy0xMjg0LVxubmV0L25ldGZpbHRlci9uZnRfY3QuYy0xMjg1LVx0LyogTm8gbmVlZCB0byByZWdpc3RlciB0aGlzIGhlbHBlciwgdGhpcyBpcyBpbnRlcm5hbC4gKi9cbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmM6MTI4NjpcdHByaXYtXHUwMDNlaGVscGVyID0gY3RfZXhwZWN0X2hlbHBlcjtcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMtMTI4Ny1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jPTEyOTE9c3RhdGljIGludCBuZnRfY3RfZXhwZWN0X29ial9pbml0KGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXG4tLVxubmV0L25ldGZpbHRlci9uZnRfY3QuYy0xMzQzLVxubmV0L25ldGZpbHRlci9uZnRfY3QuYzoxMzQ0Olx0ZXJyID0gbmZ0X2N0X2V4cGVjdF9oZWxwZXJfYWxsb2MocHJpdik7XG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jLTEzNDUtXHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDAzOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NDUyCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMTYwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkNvbmZpZ3VyYXRpb24gRGVwZW5kZW5jeSBEZWVwIERpdmUqKgoKT2theSwgc28gd2UmIzM5O3JlIG1ha2luZyBzdXJlIHdlJiMzOTt2ZSBnb3QgYWxsIHRoZSBwaWVjZXMgaW4gcGxhY2UsIHJpZ2h0PyBFdmVyeXRoaW5nIGhlcmUgZXhpc3RzIOKAkyB0aGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTGV0JiMzOTtzIG1ha2Ugc3VyZSBvdXIgYmFzZXMgYXJlIGNvdmVyZWQuCgpBbHJpZ2h0LCB0aGUgY29yZSBjb25maWd1cmF0aW9ucyB3ZSYjMzk7cmUgaW50ZXJlc3RlZCBpbiBhcmU6IGBORl9UQUJMRVNgLCBgTkZfQ09OTlRSQUNLYCwgYW5kIGBORlRfQ1RgLiBMZXQmIzM5O3MgbGF5IG91dCB0aGUgZGVwZW5kZW5jaWVzLiBJdCYjMzk7cyB0aW1lIHRvIG1hcCB0aGluZ3Mgb3V0IHByb3Blcmx5LgoKTm93LCBsZXQmIzM5O3MgdHJhY2UgdGhlIGRlcGVuZGVuY2llcy4gYE5GX1RBQkxFU2AgaXRzZWxmIGRlcGVuZHMgb24gYm90aCBgTkVURklMVEVSYCBhbmQgYE5FVEZJTFRFUl9ORVRMSU5LYC4gVGhlbiwgYE5GX0NPTk5UUkFDS2AgaGFuZ3Mgb2ZmIG9mIGBORVRGSUxURVJgIOKAkyBubyBzdXJwcmlzZXMgdGhlcmUuIEFuZCwgb2YgY291cnNlLCBgTkZUX0NUYCByZWxpZXMgb24gYE5GX0NPTk5UUkFDS2AuIFNvLCBgTkVURklMVEVSYCBpcyBlc3NlbnRpYWwgaGVyZSBmb3IgYWxsIHRoaXMgdG8gd29yay4gSXQgc2VlbXMgbGlrZSBpdCBzaG91bGQgYmUgZW5hYmxlZCBieSBkZWZhdWx0IGluIG1vc3Qga2VybmVscywgYnV0IGxldCYjMzk7cyBlbmFibGUgaXQganVzdCB0byBiZSBzdXJlIHdlIGFyZSBzYWZlLCBhbmQgbm90IGdldCBhbnkgc3VycHJpc2VzLgoKVGltZSB0byBoZWFkIGludG8gYG5ldC9LY29uZmlnYCBhbmQgZG91YmxlLWNoZWNrIGBORVRGSUxURVJgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwMzozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVURklMVEVSJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L0tjb25maWc9MTU0PWNvbmZpZyBORVRXT1JLX1BIWV9USU1FU1RBTVBJTkdcbi0tXG5uZXQvS2NvbmZpZy0xNjQtXG5uZXQvS2NvbmZpZzoxNjU6bWVudWNvbmZpZyBORVRGSUxURVJcbm5ldC9LY29uZmlnLTE2Ni1cdGJvb2wgXCYjMzQ7TmV0d29yayBwYWNrZXQgZmlsdGVyaW5nIGZyYW1ld29yayAoTmV0ZmlsdGVyKVwmIzM0O1xuLS1cbm5ldC9LY29uZmlnPTIxOD1pZiBORVRGSUxURVJcbm5ldC9LY29uZmlnLTIxOS1cbm5ldC9LY29uZmlnOjIyMDpjb25maWcgTkVURklMVEVSX0FEVkFOQ0VEXG5uZXQvS2NvbmZpZy0yMjEtXHRib29sIFwmIzM0O0FkdmFuY2VkIG5ldGZpbHRlciBjb25maWd1cmF0aW9uXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDAzOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MDEwCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipLZXJuZWwgTW9kdWxlIENvbmZpZ3VyYXRpb24gQ29uc2lkZXJhdGlvbnMqKgoKQWxyaWdodCwgc28gdGhlIGFyY2hpdGVjdHVyZSBJJiMzOTttIHdvcmtpbmcgd2l0aCBpcyBkZWZpbml0ZWx5IGdvaW5nIHRvIHJlcXVpcmUgdGhlIHVzZSBvZiBgTkVURklMVEVSYC4gTm93LCBiZWZvcmUgSSBzdGFydCB3cml0aW5nIGNvZGUgb3IgZGlnZ2luZyBpbnRvIHRoZSBzcGVjaWZpY3Mgb2YgbXkgaW1wbGVtZW50YXRpb24sIEkgbmVlZCB0byB2ZXJpZnkgaXRzIGF2YWlsYWJpbGl0eSBhbmQgY29uZmlndXJhdGlvbiB3aXRoaW4gdGhlIGtlcm5lbC4gSSBzaG91bGQgdGFrZSBhIGxvb2sgYXQgdGhlIGBORVRGSUxURVJfTkVUTElOS2Agb3B0aW9uLiBMZXQgbWUgY2hlY2sgaXRzIGRlcGVuZGVuY2llcyBhbmQgY29uZmlndXJhdGlvbiBvcHRpb25zOyBJJiMzOTtsbCBzdGFydCB3aXRoIGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgIHRvIHNlZSBob3cgaXQmIzM5O3MgZGVmaW5lZCBhbmQgaG93IGl0IHJlbGF0ZXMgdG8gb3RoZXIgY3J1Y2lhbCBhc3BlY3RzIG9mIHRoZSBuZXR3b3JraW5nIHN1YnN5c3RlbS4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGZvdW5kYXRpb24gZm9yIGFueSByZWxhdGVkIGRldmVsb3BtZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwMzozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVURklMVEVSX05FVExJTksmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnPTIxPWNvbmZpZyBORVRGSUxURVJfU0tJUF9FR1JFU1Ncbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjMtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MjQ6Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjUtXHRib29sXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnPTMzPWNvbmZpZyBORVRGSUxURVJfQlBGX0xJTktcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzUtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MzY6Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX0hPT0tcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zNy1cdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBiYXNlIGhvb2sgZHVtcCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ1LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjQ2OmNvbmZpZyBORVRGSUxURVJfTkVUTElOS19BQ0NUXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDctXHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgTkZBQ0NUIG92ZXIgTkZORVRMSU5LIGludGVyZmFjZVwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy01My1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo1NDpjb25maWcgTkVURklMVEVSX05FVExJTktfUVVFVUVcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy01NS1cdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBORlFVRVVFIG92ZXIgTkZORVRMSU5LIGludGVyZmFjZVwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02MS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo2Mjpjb25maWcgTkVURklMVEVSX05FVExJTktfTE9HXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNjMtXHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgTE9HIG92ZXIgTkZORVRMSU5LIGludGVyZmFjZVwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03My1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo3NDpjb25maWcgTkVURklMVEVSX05FVExJTktfT1NGXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzUtXHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgT1NGIG92ZXIgTkZORVRMSU5LIGludGVyZmFjZVwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz0zODU9Y29uZmlnIE5GX0NUX05FVExJTktfSEVMUEVSXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTM5Ny1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzozOTg6Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX0dMVUVfQ1Rcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zOTktXHRib29sIFwmIzM0O05GUVVFVUUgYW5kIE5GTE9HIGludGVncmF0aW9uIHdpdGggQ29ubmVjdGlvbiBUcmFja2luZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwMzozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTcxOAoJCQkJCQkJb3V0cHV0OiAxOTgKCQkJCQkJCXRob3VnaHRzOiA2MjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgdGhlIENvbm50cmFjayBFeHBlY3RhdGlvbiBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgdGhlIGRlcGVuZGVuY3kgdHJlZS4gSSBzZWUgdGhhdCBgTkZfVEFCTEVTYCBhdXRvbWF0aWNhbGx5IHNlbGVjdHMgYE5FVEZJTFRFUl9ORVRMSU5LYCwgd2hpY2ggaXMgZXhwZWN0ZWQuIFRoZW4sIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgYE5GX0NPTk5UUkFDS2AuIEdvb2QsIGl0JiMzOTtzIGEgdHJpc3RhdGUsIHNvIHRoYXQgc2ltcGxpZmllcyB0aGluZ3MuIE5vIG90aGVyIGRpcmVjdCBkZXBlbmRlbmNpZXMuCgpTbyB0aGUgY29yZSBjb25maWdzIHJlcXVpcmVkIGFyZSBgTkVURklMVEVSYCwgYE5GX0NPTk5UUkFDS2AsIGBORl9UQUJMRVNgLCBhbmQgYE5GVF9DVGAuIExldCBtZSBxdWlja2x5IGNvbmZpcm0gdGhlcmUgYXJlbiYjMzk7dCBhbnkgaGlkZGVuIGRlcGVuZGVuY2llcy4gYE5GVF9DVGAgZGVwZW5kcyBvbiBgTkZfQ09OTlRSQUNLYCwgYW5kIGJvdGggYE5GX1RBQkxFU2AgYW5kIGBORl9DT05OVFJBQ0tgIGRlcGVuZCBvbiBgTkVURklMVEVSYC4gVGhhdCBjb25maXJtcyB0aGUgY29uZmlnIGxpc3QuCgpOb3csIGxldCYjMzk7cyBpZGVudGlmeSB0aGUga2V5IGZ1bmN0aW9ucyB0aGlzIHBhdGNoIHRvdWNoZXMuIFRoZSBvbmVzIEkmIzM5O20gc2VlaW5nIGFyZTogYG5mdF9jdF9leHBlY3Rfb2JqX2luaXRgLCBgbmZ0X2N0X2V4cGVjdF9vYmpfZXZhbGAsIGBuZnRfY3RfZXhwZWN0X29ial9kZXN0cm95YCwgYG5mdF9jdF9leHBlY3RfaGVscGVyX2FsbG9jYCwgYGN0X2V4cGVjdF9oZWxwYCwgYW5kIGBuZl9jb25udHJhY2tfaGVscGVyX2ZyZWVgLiBOb3RoaW5nIGVsc2Ugc2lnbmlmaWNhbnQgc3RpY2tzIG91dCwgYG5mdF9jdF9leHBlY3Rfb2JqX3R5cGVgIGlzIGEgc3RydWN0IGRlZmluaXRpb24sIG5vdCBhIGZ1bmN0aW9uIHRvIGZvY3VzIG9uLgoKUmV2aWV3aW5nIHRoZSBwYXRjaCBjb25maXJtcyB0aGVzZSBmdW5jdGlvbnMgYXJlIGluZGVlZCB0aGUgY29yZSBvZiB0aGUgY2hhbmdlLiBgbmZfY29ubnRyYWNrX2hlbHBlcl9mcmVlYCBpcyBuZXdseSBhZGRlZCwgYW5kIHRoZSBleHBlY3RhdGlvbiBvYmplY3QgaW5pdGlhbGl6YXRpb24sIGV2YWx1YXRpb24gYW5kIGRlc3RydWN0aW9uIGZ1bmN0aW9ucyBhcmUgbW9kaWZpZWQsIGFsb25nIHdpdGggdGhlIGFsbG9jYXRpb24gZnVuY3Rpb24uIEltcG9ydGFudGx5LCB0aGVzZSBjaGFuZ2VzIGludHJvZHVjZSBkeW5hbWljIGFsbG9jYXRpb24gYW5kIGRlYWxsb2NhdGlvbiBvZiBjb25udHJhY2sgaGVscGVycy4gVGhpcyBpcyBhbGwgZXhwb3NlZCB0aHJvdWdoIG5ldGxpbmsgKG5mdGFibGVzKSBhbmQgdGhlcmVmb3JlIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UuCgpHaXZlbiB0aGlzLCB0aGUgcGF0Y2ggaW50cm9kdWNlcyBzaWduaWZpY2FudCBjaGFuZ2VzIHRvIHRoZSBjb25udHJhY2sgZXhwZWN0YXRpb24gbG9naWMgYW5kIGludm9sdmVzIGR5bmFtaWMgbWVtb3J5IG1hbmFnZW1lbnQgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZS4gSXQmIzM5O3MgKmRlZmluaXRlbHkqIHdvcnRoIGZ1enppbmcuIEkmIzM5O2xsIGZvY3VzIGZ1enppbmcgZWZmb3J0cyBvbiB0aGUgZnVuY3Rpb25zIEkgaWRlbnRpZmllZCwgYW5kIGNvbmZpZ3VyZSB0aGUgdGVzdCBlbnZpcm9ubWVudCB0byBlbmFibGUgYE5FVEZJTFRFUmAsIGBORl9DT05OVFJBQ0tgLCBgTkZfVEFCTEVTYCwgYW5kIGBORlRfQ1RgLiBUaGUgcmVhc29uaW5nIGlzIHRoYXQgdGhlc2UgZnVuY3Rpb25zLCBwYXJ0aWN1bGFybHkgdGhlIG5ldyBtZW1vcnkgbWFuYWdlbWVudCBpbiByZWxhdGlvbiB0byBjb25udHJhY2sgaGVscGVycywgcmVwcmVzZW50IGEgcHJpbWUgdGFyZ2V0IGZvciBmdXp6aW5nIGJlY2F1c2UgdGhleSBhcmUgZXhwb3NlZCB2aWEgbmV0bGluayBmcm9tIHVzZXJzcGFjZSwgd2hpY2ggb3BlbnMgdXAgYXR0YWNrIHN1cmZhY2UuCgpUaGVyZWZvcmU6CgpXb3J0aEZ1enppbmc6IGB0cnVlYAoKRm9jdXNTeW1ib2xzOgotIGBuZnRfY3RfZXhwZWN0X29ial9pbml0YAotIGBuZnRfY3RfZXhwZWN0X29ial9ldmFsYAotIGBuZnRfY3RfZXhwZWN0X29ial9kZXN0cm95YAotIGBuZnRfY3RfZXhwZWN0X2hlbHBlcl9hbGxvY2AKLSBgY3RfZXhwZWN0X2hlbHBgCi0gYG5mX2Nvbm50cmFja19oZWxwZXJfZnJlZWAKCkVuYWJsZUNvbmZpZ3M6Ci0gYE5FVEZJTFRFUmAKLSBgTkZfQ09OTlRSQUNLYAotIGBORl9UQUJMRVNgCi0gYE5GVF9DVGAKClJlYXNvbmluZzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIG5ldGZpbHRlciBuZnRhYmxlcyBjb25udHJhY2sgZXhwZWN0YXRpb24gbG9naWMsIHNwZWNpZmljYWxseSBhZGRpbmcgZHluYW1pYyBhbGxvY2F0aW9uIGFuZCBmcmVlaW5nIG9mIGNvbm50cmFjayBoZWxwZXJzIChgbmZfY29ubnRyYWNrX2hlbHBlcl9mcmVlYCwgYG5mdF9jdF9leHBlY3RfaGVscGVyX2FsbG9jYCkuIFRoZXNlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0bGluayB3aGVuIGNyZWF0aW5nIGFuZCBldmFsdWF0aW5nIG5mdGFibGVzIGV4cGVjdGF0aW9uIG9iamVjdHMsIG1ha2luZyB0aGVtIGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy4mIzM0OwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwMzozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVURklMVEVSJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDSyYjMzQ7LAogICAgJiMzNDtORl9UQUJMRVMmIzM0OywKICAgICYjMzQ7TkZUX0NUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmZ0X2N0X2V4cGVjdF9vYmpfaW5pdCYjMzQ7LAogICAgJiMzNDtuZnRfY3RfZXhwZWN0X29ial9ldmFsJiMzNDssCiAgICAmIzM0O25mdF9jdF9leHBlY3Rfb2JqX2Rlc3Ryb3kmIzM0OywKICAgICYjMzQ7bmZ0X2N0X2V4cGVjdF9oZWxwZXJfYWxsb2MmIzM0OywKICAgICYjMzQ7Y3RfZXhwZWN0X2hlbHAmIzM0OywKICAgICYjMzQ7bmZfY29ubnRyYWNrX2hlbHBlcl9mcmVlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBuZXRmaWx0ZXIgbmZ0YWJsZXMgY29ubnRyYWNrIGV4cGVjdGF0aW9uIGxvZ2ljLCBzcGVjaWZpY2FsbHkgYWRkaW5nIGR5bmFtaWMgYWxsb2NhdGlvbiBhbmQgZnJlZWluZyBvZiBjb25udHJhY2sgaGVscGVycyAobmZfY29ubnRyYWNrX2hlbHBlcl9mcmVlLCBuZnRfY3RfZXhwZWN0X2hlbHBlcl9hbGxvYykuIFRoZXNlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0bGluayB3aGVuIGNyZWF0aW5nIGFuZCBldmFsdWF0aW5nIG5mdGFibGVzIGV4cGVjdGF0aW9uIG9iamVjdHMsIG1ha2luZyB0aGVtIGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVURklMVEVSJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDSyYjMzQ7LAogICAgJiMzNDtORl9UQUJMRVMmIzM0OywKICAgICYjMzQ7TkZUX0NUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmZ0X2N0X2V4cGVjdF9vYmpfaW5pdCYjMzQ7LAogICAgJiMzNDtuZnRfY3RfZXhwZWN0X29ial9ldmFsJiMzNDssCiAgICAmIzM0O25mdF9jdF9leHBlY3Rfb2JqX2Rlc3Ryb3kmIzM0OywKICAgICYjMzQ7bmZ0X2N0X2V4cGVjdF9oZWxwZXJfYWxsb2MmIzM0OywKICAgICYjMzQ7Y3RfZXhwZWN0X2hlbHAmIzM0OywKICAgICYjMzQ7bmZfY29ubnRyYWNrX2hlbHBlcl9mcmVlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBuZXRmaWx0ZXIgbmZ0YWJsZXMgY29ubnRyYWNrIGV4cGVjdGF0aW9uIGxvZ2ljLCBzcGVjaWZpY2FsbHkgYWRkaW5nIGR5bmFtaWMgYWxsb2NhdGlvbiBhbmQgZnJlZWluZyBvZiBjb25udHJhY2sgaGVscGVycyAobmZfY29ubnRyYWNrX2hlbHBlcl9mcmVlLCBuZnRfY3RfZXhwZWN0X2hlbHBlcl9hbGxvYykuIFRoZXNlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0bGluayB3aGVuIGNyZWF0aW5nIGFuZCBldmFsdWF0aW5nIG5mdGFibGVzIGV4cGVjdGF0aW9uIG9iamVjdHMsIG1ha2luZyB0aGVtIGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDAzOjM3OjA0Ljg4MTIwMTY5OVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY0NDk2MzAyMzAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVEZJTFRFUlwiLFxuICAgIFwiTkZfQ09OTlRSQUNLXCIsXG4gICAgXCJORl9UQUJMRVNcIixcbiAgICBcIk5GVF9DVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5mdF9jdF9leHBlY3Rfb2JqX2luaXRcIixcbiAgICBcIm5mdF9jdF9leHBlY3Rfb2JqX2V2YWxcIixcbiAgICBcIm5mdF9jdF9leHBlY3Rfb2JqX2Rlc3Ryb3lcIixcbiAgICBcIm5mdF9jdF9leHBlY3RfaGVscGVyX2FsbG9jXCIsXG4gICAgXCJjdF9leHBlY3RfaGVscFwiLFxuICAgIFwibmZfY29ubnRyYWNrX2hlbHBlcl9mcmVlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIG5ldGZpbHRlciBuZnRhYmxlcyBjb25udHJhY2sgZXhwZWN0YXRpb24gbG9naWMsIHNwZWNpZmljYWxseSBhZGRpbmcgZHluYW1pYyBhbGxvY2F0aW9uIGFuZCBmcmVlaW5nIG9mIGNvbm50cmFjayBoZWxwZXJzIChuZl9jb25udHJhY2tfaGVscGVyX2ZyZWUsIG5mdF9jdF9leHBlY3RfaGVscGVyX2FsbG9jKS4gVGhlc2UgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRsaW5rIHdoZW4gY3JlYXRpbmcgYW5kIGV2YWx1YXRpbmcgbmZ0YWJsZXMgZXhwZWN0YXRpb24gb2JqZWN0cywgbWFraW5nIHRoZW0gaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwMzozNzowNC44ODEyMDgzOTlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM3MzI0OTU4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGJlMTc0MmRkYzU0YTc5Y2MzYjcxMjBkMDI1NmI2YWFkZmEzMDBmNGRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBBdWcgMSAwMzozNzowNCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5oIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuaFxcbmluZGV4IGM3NjFjZDgxNThiMjUuLjQ0MjA4NDZlNDFmMjMgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuaFxcbisrKyBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmhcXG5AQCAtMTE0LDYgKzExNCw4IEBAIGludCBuZl9jb25udHJhY2tfaGVscGVyc19yZWdpc3RlcihzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqLCB1bnNpZ25lZCBpbnQsXFxuIHZvaWQgbmZfY29ubnRyYWNrX2hlbHBlcnNfdW5yZWdpc3RlcihzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqKixcXG4gXFx0XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBpbnQpO1xcbiBcXG4rdm9pZCBuZl9jb25udHJhY2tfaGVscGVyX2ZyZWUoc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKm1lKTtcXG4rXFxuICNkZWZpbmUgbmZfY29ubnRyYWNrX2hlbHBlcl9kZXByZWNhdGVkKG5hbWUpIFxcXFxcXG4gXFx0cHJfd2FybihcXFwiVGhlICVzIGNvbm50cmFjayBoZWxwZXIgaXMgc2NoZWR1bGVkIGZvciByZW1vdmFsLlxcXFxuXFxcIlxcdFxcXFxcXG4gXFx0XFx0XFxcIlBsZWFzZSBjb250YWN0IHRoZSBuZXRmaWx0ZXItZGV2ZWwgbWFpbGluZyBsaXN0IGlmIHlvdSBzdGlsbCBuZWVkIHRoaXMuXFxcXG5cXFwiLCBuYW1lKVxcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jXFxuaW5kZXggNTAwNTA5YjE3NjYzZS4uMTE5N2U4NzkzNDk0YiAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jXFxuQEAgLTQ1NiwxMyArNDU2LDggQEAgc3RhdGljIGJvb2wgZXhwZWN0X2l0ZXJfbWUoc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmV4cCwgdm9pZCAqZGF0YSlcXG4gXFx0cmV0dXJuIHRoaXMgPT0gbWU7XFxuIH1cXG4gXFxuLXZvaWQgbmZfY29ubnRyYWNrX2hlbHBlcl91bnJlZ2lzdGVyKHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICptZSlcXG4rdm9pZCBuZl9jb25udHJhY2tfaGVscGVyX2ZyZWUoc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKm1lKVxcbiB7XFxuLVxcdG11dGV4X2xvY2soXFx1MDAyNm5mX2N0X2hlbHBlcl9tdXRleCk7XFxuLVxcdGhsaXN0X2RlbF9yY3UoXFx1MDAyNm1lLVxcdTAwM2Vobm9kZSk7XFxuLVxcdG5mX2N0X2hlbHBlcl9jb3VudC0tO1xcbi1cXHRtdXRleF91bmxvY2soXFx1MDAyNm5mX2N0X2hlbHBlcl9tdXRleCk7XFxuLVxcbiBcXHQvKiBUaGlzIGhlbHBlciBpcyBnb2luZyBhd2F5LCBkaXNhYmxlIGl0LiAqL1xcbiBcXHRyY3VfYXNzaWduX3BvaW50ZXIobWUtXFx1MDAzZWhlbHAsIE5VTEwpO1xcbiBcXG5AQCAtNDc2LDYgKzQ3MSwxNyBAQCB2b2lkIG5mX2Nvbm50cmFja19oZWxwZXJfdW5yZWdpc3RlcihzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqbWUpXFxuIFxcdGlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoXFx1MDAyNm1lLVxcdTAwM2VjdF9yZWZjbnQpKVxcbiBcXHRcXHRrZnJlZV9yY3UobWUsIHJjdSk7XFxuIH1cXG4rRVhQT1JUX1NZTUJPTF9HUEwobmZfY29ubnRyYWNrX2hlbHBlcl9mcmVlKTtcXG4rXFxuK3ZvaWQgbmZfY29ubnRyYWNrX2hlbHBlcl91bnJlZ2lzdGVyKHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICptZSlcXG4re1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZuZl9jdF9oZWxwZXJfbXV0ZXgpO1xcbitcXHRobGlzdF9kZWxfcmN1KFxcdTAwMjZtZS1cXHUwMDNlaG5vZGUpO1xcbitcXHRuZl9jdF9oZWxwZXJfY291bnQtLTtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZuZl9jdF9oZWxwZXJfbXV0ZXgpO1xcbitcXG4rXFx0bmZfY29ubnRyYWNrX2hlbHBlcl9mcmVlKG1lKTtcXG4rfVxcbiBFWFBPUlRfU1lNQk9MX0dQTChuZl9jb25udHJhY2tfaGVscGVyX3VucmVnaXN0ZXIpO1xcbiBcXG4gdm9pZCBuZl9jdF9oZWxwZXJfaW5pdChzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqaGVscGVyLFxcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mdF9jdC5jIGIvbmV0L25ldGZpbHRlci9uZnRfY3QuY1xcbmluZGV4IDAzYTg4Yzc3ZTBmMDIuLmZmN2MyNzU3OWNmYjEgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZnRfY3QuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZ0X2N0LmNcXG5AQCAtMTIxMyw2ICsxMjEzLDggQEAgc3RydWN0IG5mdF9jdF9leHBlY3Rfb2JqIHtcXG4gXFx0dThcXHRcXHRsNHByb3RvO1xcbiBcXHR1OFxcdFxcdHNpemU7XFxuIFxcdHUzMlxcdFxcdHRpbWVvdXQ7XFxuK1xcbitcXHRzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqaGVscGVyO1xcbiB9O1xcbiBcXG4gc3RhdGljIGludCBuZnRfY3RfZXhwZWN0X3RpbWVvdXRfZ2V0KGNvbnN0IHN0cnVjdCBubGF0dHIgKmF0dHIsIHUzMiAqdmFsKVxcbkBAIC0xMjI2LDYgKzEyMjgsNjYgQEAgc3RhdGljIGludCBuZnRfY3RfZXhwZWN0X3RpbWVvdXRfZ2V0KGNvbnN0IHN0cnVjdCBubGF0dHIgKmF0dHIsIHUzMiAqdmFsKVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rc3RydWN0IG5mdF9jdF9leHBlY3RfZGF0YSB7XFxuK1xcdHN0cnVjdCBuZnRfY3RfZXhwZWN0X29ialxcdG9iajtcXG4rXFx0YXRvbWljX3RcXHRcXHRcXHRudW1fZXhwZWN0cztcXG4rfTtcXG4rXFxuK3N0YXRpYyBpbnQgY3RfZXhwZWN0X2hlbHAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IHByb3RvZmYsXFxuK1xcdFxcdFxcdCAgc3RydWN0IG5mX2Nvbm4gKmN0LCBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbylcXG4re1xcbitcXHRzdHJ1Y3QgbmZ0X2N0X2V4cGVjdF9kYXRhICpleHBlY3RfZGF0YTtcXG4rXFx0c3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmV4cDtcXG4rXFx0ZW51bSBpcF9jb25udHJhY2tfZGlyIGRpcjtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGV4cGVjdF9kYXRhID0gbmZjdF9oZWxwX2RhdGEoY3QpO1xcbitcXHRpZiAoIWV4cGVjdF9kYXRhKVxcbitcXHRcXHRyZXR1cm4gTkZfQUNDRVBUO1xcbitcXG4rXFx0aWYgKCFhdG9taWNfYWRkX3VubGVzcyhcXHUwMDI2ZXhwZWN0X2RhdGEtXFx1MDAzZW51bV9leHBlY3RzLCAxLCBleHBlY3RfZGF0YS1cXHUwMDNlb2JqLnNpemUpKVxcbitcXHRcXHRyZXR1cm4gTkZfQUNDRVBUO1xcbitcXG4rXFx0ZXhwID0gbmZfY3RfZXhwZWN0X2FsbG9jKGN0KTtcXG4rXFx0aWYgKCFleHApXFxuK1xcdFxcdHJldHVybiBORl9EUk9QO1xcbitcXG4rXFx0ZGlyID0gQ1RJTkZPMkRJUihjdGluZm8pO1xcbitcXHRuZl9jdF9leHBlY3RfaW5pdChleHAsIE5GX0NUX0VYUEVDVF9DTEFTU19ERUZBVUxULCBuZl9jdF9sM251bShjdCksXFxuK1xcdFxcdFxcdCAgXFx1MDAyNmN0LVxcdTAwM2V0dXBsZWhhc2hbIWRpcl0udHVwbGUuc3JjLnUzLFxcbitcXHRcXHRcXHQgIFxcdTAwMjZjdC1cXHUwMDNldHVwbGVoYXNoWyFkaXJdLnR1cGxlLmRzdC51MyxcXG4rXFx0XFx0XFx0ICBleHBlY3RfZGF0YS1cXHUwMDNlb2JqLmw0cHJvdG8sIE5VTEwsIFxcdTAwMjZleHBlY3RfZGF0YS1cXHUwMDNlb2JqLmRwb3J0KTtcXG4rXFx0ZXhwLVxcdTAwM2V0aW1lb3V0ICs9IGV4cGVjdF9kYXRhLVxcdTAwM2VvYmoudGltZW91dDtcXG4rXFxuK1xcdGlmIChuZl9jdF9leHBlY3RfcmVsYXRlZChleHAsIDApICE9IDApXFxuK1xcdFxcdHJldCA9IE5GX0RST1A7XFxuK1xcbitcXHRuZl9jdF9leHBlY3RfcHV0KGV4cCk7XFxuK1xcbitcXHRyZXR1cm4gTkZfQUNDRVBUO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IG5mdF9jdF9leHBlY3RfaGVscGVyX2FsbG9jKHN0cnVjdCBuZnRfY3RfZXhwZWN0X29iaiAqcHJpdilcXG4re1xcbitcXHRzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqY3RfZXhwZWN0X2hlbHBlcjtcXG4rXFxuK1xcdGN0X2V4cGVjdF9oZWxwZXIgPSBremFsbG9jX29iaihzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlcik7XFxuK1xcdGlmICghY3RfZXhwZWN0X2hlbHBlcilcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHRzbnByaW50ZihjdF9leHBlY3RfaGVscGVyLVxcdTAwM2VuYW1lLCBzaXplb2YoY3RfZXhwZWN0X2hlbHBlci1cXHUwMDNlbmFtZSksIFxcXCIlc1xcXCIsXFxuK1xcdFxcdCBcXFwibmZ0X2N0X2V4cGVjdFxcXCIpO1xcbitcXHRjdF9leHBlY3RfaGVscGVyLVxcdTAwM2VtZSA9IFRISVNfTU9EVUxFO1xcbitcXHRjdF9leHBlY3RfaGVscGVyLVxcdTAwM2VleHBlY3RfcG9saWN5W05GX0NUX0VYUEVDVF9DTEFTU19ERUZBVUxUXS5tYXhfZXhwZWN0ZWQgPSBwcml2LVxcdTAwM2VzaXplO1xcbitcXHRyY3VfYXNzaWduX3BvaW50ZXIoY3RfZXhwZWN0X2hlbHBlci1cXHUwMDNlaGVscCwgY3RfZXhwZWN0X2hlbHApO1xcbitcXHRyZWZjb3VudF9zZXQoXFx1MDAyNmN0X2V4cGVjdF9oZWxwZXItXFx1MDAzZWN0X3JlZmNudCwgMSk7XFxuK1xcbitcXHQvKiBObyBuZWVkIHRvIHJlZ2lzdGVyIHRoaXMgaGVscGVyLCB0aGlzIGlzIGludGVybmFsLiAqL1xcbitcXHRwcml2LVxcdTAwM2VoZWxwZXIgPSBjdF9leHBlY3RfaGVscGVyO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgbmZ0X2N0X2V4cGVjdF9vYmpfaW5pdChjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxcbiBcXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCB0YltdLFxcbiBcXHRcXHRcXHRcXHQgIHN0cnVjdCBuZnRfb2JqZWN0ICpvYmopXFxuQEAgLTEyMzMsNiArMTI5NSw4IEBAIHN0YXRpYyBpbnQgbmZ0X2N0X2V4cGVjdF9vYmpfaW5pdChjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxcbiBcXHRzdHJ1Y3QgbmZ0X2N0X2V4cGVjdF9vYmogKnByaXYgPSBuZnRfb2JqX2RhdGEob2JqKTtcXG4gXFx0aW50IGVycjtcXG4gXFxuK1xcdE5GX0NUX0hFTFBFUl9CVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCBuZnRfY3RfZXhwZWN0X2RhdGEpKTtcXG4rXFxuIFxcdGlmICghdGJbTkZUQV9DVF9FWFBFQ1RfTDRQUk9UT10gfHxcXG4gXFx0ICAgICF0YltORlRBX0NUX0VYUEVDVF9EUE9SVF0gfHxcXG4gXFx0ICAgICF0YltORlRBX0NUX0VYUEVDVF9USU1FT1VUXSB8fFxcbkBAIC0xMjczLDEzICsxMzM3LDI2IEBAIHN0YXRpYyBpbnQgbmZ0X2N0X2V4cGVjdF9vYmpfaW5pdChjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxcbiBcXHRwcml2LVxcdTAwM2VkcG9ydCA9IG5sYV9nZXRfYmUxNih0YltORlRBX0NUX0VYUEVDVF9EUE9SVF0pO1xcbiBcXHRwcml2LVxcdTAwM2VzaXplID0gbmxhX2dldF91OCh0YltORlRBX0NUX0VYUEVDVF9TSVpFXSk7XFxuIFxcbi1cXHRyZXR1cm4gbmZfY3RfbmV0bnNfZ2V0KGN0eC1cXHUwMDNlbmV0LCBjdHgtXFx1MDAzZWZhbWlseSk7XFxuK1xcdGVyciA9IG5mX2N0X25ldG5zX2dldChjdHgtXFx1MDAzZW5ldCwgY3R4LVxcdTAwM2VmYW1pbHkpO1xcbitcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFxuK1xcdGVyciA9IG5mdF9jdF9leHBlY3RfaGVscGVyX2FsbG9jKHByaXYpO1xcbitcXHRpZiAoZXJyIFxcdTAwM2MgMCkge1xcbitcXHRcXHRuZl9jdF9uZXRuc19wdXQoY3R4LVxcdTAwM2VuZXQsIGN0eC1cXHUwMDNlZmFtaWx5KTtcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgbmZ0X2N0X2V4cGVjdF9vYmpfZGVzdHJveShjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxcbi1cXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IG5mdF9vYmplY3QgKm9iailcXG4rXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IG5mdF9vYmplY3QgKm9iailcXG4ge1xcbitcXHRjb25zdCBzdHJ1Y3QgbmZ0X2N0X2V4cGVjdF9vYmogKnByaXYgPSBuZnRfb2JqX2RhdGEob2JqKTtcXG4rXFxuIFxcdG5mX2N0X25ldG5zX3B1dChjdHgtXFx1MDAzZW5ldCwgY3R4LVxcdTAwM2VmYW1pbHkpO1xcbitcXHRuZl9jb25udHJhY2tfaGVscGVyX2ZyZWUocHJpdi1cXHUwMDNlaGVscGVyKTtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBuZnRfY3RfZXhwZWN0X29ial9kdW1wKHN0cnVjdCBza19idWZmICpza2IsXFxuQEAgLTEzMDIsNTAgKzEzNzksMzggQEAgc3RhdGljIHZvaWQgbmZ0X2N0X2V4cGVjdF9vYmpfZXZhbChzdHJ1Y3QgbmZ0X29iamVjdCAqb2JqLFxcbiBcXHRcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdClcXG4ge1xcbiBcXHRjb25zdCBzdHJ1Y3QgbmZ0X2N0X2V4cGVjdF9vYmogKnByaXYgPSBuZnRfb2JqX2RhdGEob2JqKTtcXG4tXFx0c3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmV4cDtcXG4rXFx0c3RydWN0IG5mdF9jdF9leHBlY3RfZGF0YSAqZXhwZWN0X2RhdGE7XFxuIFxcdGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvO1xcbiBcXHRzdHJ1Y3QgbmZfY29ubl9oZWxwICpoZWxwO1xcbi1cXHRlbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyO1xcbi1cXHR1MTYgbDNudW0gPSBwcml2LVxcdTAwM2VsM251bTtcXG4gXFx0c3RydWN0IG5mX2Nvbm4gKmN0O1xcbiBcXG4gXFx0Y3QgPSBuZl9jdF9nZXQocGt0LVxcdTAwM2Vza2IsIFxcdTAwMjZjdGluZm8pO1xcbi1cXHRpZiAoIWN0IHx8IG5mX2N0X2lzX2NvbmZpcm1lZChjdCkgfHwgbmZfY3RfaXNfdGVtcGxhdGUoY3QpKSB7XFxuK1xcdGlmICghY3QgfHwgbmZfY3RfaXNfdGVtcGxhdGUoY3QpIHx8IG5mX2N0X2lzX2NvbmZpcm1lZChjdCkpIHtcXG4gXFx0XFx0cmVncy1cXHUwMDNldmVyZGljdC5jb2RlID0gTkZUX0JSRUFLO1xcbiBcXHRcXHRyZXR1cm47XFxuIFxcdH1cXG4tXFx0ZGlyID0gQ1RJTkZPMkRJUihjdGluZm8pO1xcbiBcXG4gXFx0aGVscCA9IG5mY3RfaGVscChjdCk7XFxuLVxcdGlmICghaGVscClcXG4tXFx0XFx0aGVscCA9IG5mX2N0X2hlbHBlcl9leHRfYWRkKGN0LCBHRlBfQVRPTUlDKTtcXG4tXFx0aWYgKCFoZWxwKSB7XFxuLVxcdFxcdHJlZ3MtXFx1MDAzZXZlcmRpY3QuY29kZSA9IE5GX0RST1A7XFxuLVxcdFxcdHJldHVybjtcXG4tXFx0fVxcbi1cXG4tXFx0aWYgKGhlbHAtXFx1MDAzZWV4cGVjdGluZ1tORl9DVF9FWFBFQ1RfQ0xBU1NfREVGQVVMVF0gXFx1MDAzZT0gcHJpdi1cXHUwMDNlc2l6ZSkge1xcbitcXHRpZiAoaGVscCkge1xcbiBcXHRcXHRyZWdzLVxcdTAwM2V2ZXJkaWN0LmNvZGUgPSBORlRfQlJFQUs7XFxuIFxcdFxcdHJldHVybjtcXG4gXFx0fVxcbi1cXHRpZiAobDNudW0gPT0gTkZQUk9UT19JTkVUKVxcbi1cXHRcXHRsM251bSA9IG5mX2N0X2wzbnVtKGN0KTtcXG4gXFxuLVxcdGV4cCA9IG5mX2N0X2V4cGVjdF9hbGxvYyhjdCk7XFxuLVxcdGlmIChleHAgPT0gTlVMTCkge1xcbitcXHRoZWxwID0gbmZfY3RfaGVscGVyX2V4dF9hZGQoY3QsIEdGUF9BVE9NSUMpO1xcbitcXHRpZiAoIWhlbHApIHtcXG4gXFx0XFx0cmVncy1cXHUwMDNldmVyZGljdC5jb2RlID0gTkZfRFJPUDtcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXHR9XFxuLVxcdG5mX2N0X2V4cGVjdF9pbml0KGV4cCwgTkZfQ1RfRVhQRUNUX0NMQVNTX0RFRkFVTFQsIGwzbnVtLFxcbi1cXHRcXHQgICAgICAgICAgXFx1MDAyNmN0LVxcdTAwM2V0dXBsZWhhc2hbIWRpcl0udHVwbGUuc3JjLnUzLFxcbi1cXHRcXHQgICAgICAgICAgXFx1MDAyNmN0LVxcdTAwM2V0dXBsZWhhc2hbIWRpcl0udHVwbGUuZHN0LnUzLFxcbi1cXHRcXHQgICAgICAgICAgcHJpdi1cXHUwMDNlbDRwcm90bywgTlVMTCwgXFx1MDAyNnByaXYtXFx1MDAzZWRwb3J0KTtcXG4tXFx0ZXhwLVxcdTAwM2V0aW1lb3V0ICs9IHByaXYtXFx1MDAzZXRpbWVvdXQ7XFxuIFxcbi1cXHRpZiAobmZfY3RfZXhwZWN0X3JlbGF0ZWQoZXhwLCAwKSAhPSAwKVxcbi1cXHRcXHRyZWdzLVxcdTAwM2V2ZXJkaWN0LmNvZGUgPSBORl9EUk9QO1xcbitcXHRleHBlY3RfZGF0YSA9IG5mY3RfaGVscF9kYXRhKGN0KTtcXG4rXFx0aWYgKCFleHBlY3RfZGF0YSkge1xcbitcXHRcXHRyZWdzLVxcdTAwM2V2ZXJkaWN0LmNvZGUgPSBORlRfQlJFQUs7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXHRleHBlY3RfZGF0YS1cXHUwMDNlb2JqID0gKnByaXY7XFxuIFxcbi1cXHRuZl9jdF9leHBlY3RfcHV0KGV4cCk7XFxuK1xcdGlmIChoZWxwIFxcdTAwMjZcXHUwMDI2IHJlZmNvdW50X2luY19ub3RfemVybyhcXHUwMDI2cHJpdi1cXHUwMDNlaGVscGVyLVxcdTAwM2VjdF9yZWZjbnQpKVxcbitcXHRcXHRyY3VfYXNzaWduX3BvaW50ZXIoaGVscC1cXHUwMDNlaGVscGVyLCBwcml2LVxcdTAwM2VoZWxwZXIpO1xcbiB9XFxuIFxcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmZ0X2N0X2V4cGVjdF9wb2xpY3lbTkZUQV9DVF9FWFBFQ1RfTUFYICsgMV0gPSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDAzOjM3OjA1LjI1NTE3Mzc2NloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjY0MTIyMzIxNTA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVEZJTFRFUlwiLFxuICAgIFwiTkZfQ09OTlRSQUNLXCIsXG4gICAgXCJORl9UQUJMRVNcIixcbiAgICBcIk5GVF9DVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5mdF9jdF9leHBlY3Rfb2JqX2luaXRcIixcbiAgICBcIm5mdF9jdF9leHBlY3Rfb2JqX2V2YWxcIixcbiAgICBcIm5mdF9jdF9leHBlY3Rfb2JqX2Rlc3Ryb3lcIixcbiAgICBcIm5mdF9jdF9leHBlY3RfaGVscGVyX2FsbG9jXCIsXG4gICAgXCJjdF9leHBlY3RfaGVscFwiLFxuICAgIFwibmZfY29ubnRyYWNrX2hlbHBlcl9mcmVlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIG5ldGZpbHRlciBuZnRhYmxlcyBjb25udHJhY2sgZXhwZWN0YXRpb24gbG9naWMsIHNwZWNpZmljYWxseSBhZGRpbmcgZHluYW1pYyBhbGxvY2F0aW9uIGFuZCBmcmVlaW5nIG9mIGNvbm50cmFjayBoZWxwZXJzIChuZl9jb25udHJhY2tfaGVscGVyX2ZyZWUsIG5mdF9jdF9leHBlY3RfaGVscGVyX2FsbG9jKS4gVGhlc2UgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRsaW5rIHdoZW4gY3JlYXRpbmcgYW5kIGV2YWx1YXRpbmcgbmZ0YWJsZXMgZXhwZWN0YXRpb24gb2JqZWN0cywgbWFraW5nIHRoZW0gaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBiZTE3NDJkZGM1NGE3OWNjM2I3MTIwZDAyNTZiNmFhZGZhMzAwZjRkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMSAwMzozNzowNCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmggYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5oXG5pbmRleCBjNzYxY2Q4MTU4YjI1Li40NDIwODQ2ZTQxZjIzIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuaFxuKysrIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuaFxuQEAgLTExNCw2ICsxMTQsOCBAQCBpbnQgbmZfY29ubnRyYWNrX2hlbHBlcnNfcmVnaXN0ZXIoc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKiwgdW5zaWduZWQgaW50LFxuIHZvaWQgbmZfY29ubnRyYWNrX2hlbHBlcnNfdW5yZWdpc3RlcihzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqKixcbiBcdFx0XHRcdCAgICAgdW5zaWduZWQgaW50KTtcbiBcbit2b2lkIG5mX2Nvbm50cmFja19oZWxwZXJfZnJlZShzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqbWUpO1xuK1xuICNkZWZpbmUgbmZfY29ubnRyYWNrX2hlbHBlcl9kZXByZWNhdGVkKG5hbWUpIFxcXG4gXHRwcl93YXJuKFwiVGhlICVzIGNvbm50cmFjayBoZWxwZXIgaXMgc2NoZWR1bGVkIGZvciByZW1vdmFsLlxcblwiXHRcXFxuIFx0XHRcIlBsZWFzZSBjb250YWN0IHRoZSBuZXRmaWx0ZXItZGV2ZWwgbWFpbGluZyBsaXN0IGlmIHlvdSBzdGlsbCBuZWVkIHRoaXMuXFxuXCIsIG5hbWUpXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuY1xuaW5kZXggNTAwNTA5YjE3NjYzZS4uMTE5N2U4NzkzNDk0YiAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuY1xuQEAgLTQ1NiwxMyArNDU2LDggQEAgc3RhdGljIGJvb2wgZXhwZWN0X2l0ZXJfbWUoc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmV4cCwgdm9pZCAqZGF0YSlcbiBcdHJldHVybiB0aGlzID09IG1lO1xuIH1cbiBcbi12b2lkIG5mX2Nvbm50cmFja19oZWxwZXJfdW5yZWdpc3RlcihzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqbWUpXG4rdm9pZCBuZl9jb25udHJhY2tfaGVscGVyX2ZyZWUoc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKm1lKVxuIHtcbi1cdG11dGV4X2xvY2soXHUwMDI2bmZfY3RfaGVscGVyX211dGV4KTtcbi1cdGhsaXN0X2RlbF9yY3UoXHUwMDI2bWUtXHUwMDNlaG5vZGUpO1xuLVx0bmZfY3RfaGVscGVyX2NvdW50LS07XG4tXHRtdXRleF91bmxvY2soXHUwMDI2bmZfY3RfaGVscGVyX211dGV4KTtcbi1cbiBcdC8qIFRoaXMgaGVscGVyIGlzIGdvaW5nIGF3YXksIGRpc2FibGUgaXQuICovXG4gXHRyY3VfYXNzaWduX3BvaW50ZXIobWUtXHUwMDNlaGVscCwgTlVMTCk7XG4gXG5AQCAtNDc2LDYgKzQ3MSwxNyBAQCB2b2lkIG5mX2Nvbm50cmFja19oZWxwZXJfdW5yZWdpc3RlcihzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqbWUpXG4gXHRpZiAocmVmY291bnRfZGVjX2FuZF90ZXN0KFx1MDAyNm1lLVx1MDAzZWN0X3JlZmNudCkpXG4gXHRcdGtmcmVlX3JjdShtZSwgcmN1KTtcbiB9XG4rRVhQT1JUX1NZTUJPTF9HUEwobmZfY29ubnRyYWNrX2hlbHBlcl9mcmVlKTtcbitcbit2b2lkIG5mX2Nvbm50cmFja19oZWxwZXJfdW5yZWdpc3RlcihzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqbWUpXG4re1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZuZl9jdF9oZWxwZXJfbXV0ZXgpO1xuK1x0aGxpc3RfZGVsX3JjdShcdTAwMjZtZS1cdTAwM2Vobm9kZSk7XG4rXHRuZl9jdF9oZWxwZXJfY291bnQtLTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZuZl9jdF9oZWxwZXJfbXV0ZXgpO1xuK1xuK1x0bmZfY29ubnRyYWNrX2hlbHBlcl9mcmVlKG1lKTtcbit9XG4gRVhQT1JUX1NZTUJPTF9HUEwobmZfY29ubnRyYWNrX2hlbHBlcl91bnJlZ2lzdGVyKTtcbiBcbiB2b2lkIG5mX2N0X2hlbHBlcl9pbml0KHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICpoZWxwZXIsXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZnRfY3QuYyBiL25ldC9uZXRmaWx0ZXIvbmZ0X2N0LmNcbmluZGV4IDAzYTg4Yzc3ZTBmMDIuLmZmN2MyNzU3OWNmYjEgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mdF9jdC5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mdF9jdC5jXG5AQCAtMTIxMyw2ICsxMjEzLDggQEAgc3RydWN0IG5mdF9jdF9leHBlY3Rfb2JqIHtcbiBcdHU4XHRcdGw0cHJvdG87XG4gXHR1OFx0XHRzaXplO1xuIFx0dTMyXHRcdHRpbWVvdXQ7XG4rXG4rXHRzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqaGVscGVyO1xuIH07XG4gXG4gc3RhdGljIGludCBuZnRfY3RfZXhwZWN0X3RpbWVvdXRfZ2V0KGNvbnN0IHN0cnVjdCBubGF0dHIgKmF0dHIsIHUzMiAqdmFsKVxuQEAgLTEyMjYsNiArMTIyOCw2NiBAQCBzdGF0aWMgaW50IG5mdF9jdF9leHBlY3RfdGltZW91dF9nZXQoY29uc3Qgc3RydWN0IG5sYXR0ciAqYXR0ciwgdTMyICp2YWwpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rc3RydWN0IG5mdF9jdF9leHBlY3RfZGF0YSB7XG4rXHRzdHJ1Y3QgbmZ0X2N0X2V4cGVjdF9vYmpcdG9iajtcbitcdGF0b21pY190XHRcdFx0bnVtX2V4cGVjdHM7XG4rfTtcbitcbitzdGF0aWMgaW50IGN0X2V4cGVjdF9oZWxwKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBwcm90b2ZmLFxuK1x0XHRcdCAgc3RydWN0IG5mX2Nvbm4gKmN0LCBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbylcbit7XG4rXHRzdHJ1Y3QgbmZ0X2N0X2V4cGVjdF9kYXRhICpleHBlY3RfZGF0YTtcbitcdHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHA7XG4rXHRlbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyO1xuK1x0aW50IHJldDtcbitcbitcdGV4cGVjdF9kYXRhID0gbmZjdF9oZWxwX2RhdGEoY3QpO1xuK1x0aWYgKCFleHBlY3RfZGF0YSlcbitcdFx0cmV0dXJuIE5GX0FDQ0VQVDtcbitcbitcdGlmICghYXRvbWljX2FkZF91bmxlc3MoXHUwMDI2ZXhwZWN0X2RhdGEtXHUwMDNlbnVtX2V4cGVjdHMsIDEsIGV4cGVjdF9kYXRhLVx1MDAzZW9iai5zaXplKSlcbitcdFx0cmV0dXJuIE5GX0FDQ0VQVDtcbitcbitcdGV4cCA9IG5mX2N0X2V4cGVjdF9hbGxvYyhjdCk7XG4rXHRpZiAoIWV4cClcbitcdFx0cmV0dXJuIE5GX0RST1A7XG4rXG4rXHRkaXIgPSBDVElORk8yRElSKGN0aW5mbyk7XG4rXHRuZl9jdF9leHBlY3RfaW5pdChleHAsIE5GX0NUX0VYUEVDVF9DTEFTU19ERUZBVUxULCBuZl9jdF9sM251bShjdCksXG4rXHRcdFx0ICBcdTAwMjZjdC1cdTAwM2V0dXBsZWhhc2hbIWRpcl0udHVwbGUuc3JjLnUzLFxuK1x0XHRcdCAgXHUwMDI2Y3QtXHUwMDNldHVwbGVoYXNoWyFkaXJdLnR1cGxlLmRzdC51MyxcbitcdFx0XHQgIGV4cGVjdF9kYXRhLVx1MDAzZW9iai5sNHByb3RvLCBOVUxMLCBcdTAwMjZleHBlY3RfZGF0YS1cdTAwM2VvYmouZHBvcnQpO1xuK1x0ZXhwLVx1MDAzZXRpbWVvdXQgKz0gZXhwZWN0X2RhdGEtXHUwMDNlb2JqLnRpbWVvdXQ7XG4rXG4rXHRpZiAobmZfY3RfZXhwZWN0X3JlbGF0ZWQoZXhwLCAwKSAhPSAwKVxuK1x0XHRyZXQgPSBORl9EUk9QO1xuK1xuK1x0bmZfY3RfZXhwZWN0X3B1dChleHApO1xuK1xuK1x0cmV0dXJuIE5GX0FDQ0VQVDtcbit9XG4rXG4rc3RhdGljIGludCBuZnRfY3RfZXhwZWN0X2hlbHBlcl9hbGxvYyhzdHJ1Y3QgbmZ0X2N0X2V4cGVjdF9vYmogKnByaXYpXG4re1xuK1x0c3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKmN0X2V4cGVjdF9oZWxwZXI7XG4rXG4rXHRjdF9leHBlY3RfaGVscGVyID0ga3phbGxvY19vYmooc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIpO1xuK1x0aWYgKCFjdF9leHBlY3RfaGVscGVyKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdHNucHJpbnRmKGN0X2V4cGVjdF9oZWxwZXItXHUwMDNlbmFtZSwgc2l6ZW9mKGN0X2V4cGVjdF9oZWxwZXItXHUwMDNlbmFtZSksIFwiJXNcIixcbitcdFx0IFwibmZ0X2N0X2V4cGVjdFwiKTtcbitcdGN0X2V4cGVjdF9oZWxwZXItXHUwMDNlbWUgPSBUSElTX01PRFVMRTtcbitcdGN0X2V4cGVjdF9oZWxwZXItXHUwMDNlZXhwZWN0X3BvbGljeVtORl9DVF9FWFBFQ1RfQ0xBU1NfREVGQVVMVF0ubWF4X2V4cGVjdGVkID0gcHJpdi1cdTAwM2VzaXplO1xuK1x0cmN1X2Fzc2lnbl9wb2ludGVyKGN0X2V4cGVjdF9oZWxwZXItXHUwMDNlaGVscCwgY3RfZXhwZWN0X2hlbHApO1xuK1x0cmVmY291bnRfc2V0KFx1MDAyNmN0X2V4cGVjdF9oZWxwZXItXHUwMDNlY3RfcmVmY250LCAxKTtcbitcbitcdC8qIE5vIG5lZWQgdG8gcmVnaXN0ZXIgdGhpcyBoZWxwZXIsIHRoaXMgaXMgaW50ZXJuYWwuICovXG4rXHRwcml2LVx1MDAzZWhlbHBlciA9IGN0X2V4cGVjdF9oZWxwZXI7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gc3RhdGljIGludCBuZnRfY3RfZXhwZWN0X29ial9pbml0KGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXG4gXHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCB0YltdLFxuIFx0XHRcdFx0ICBzdHJ1Y3QgbmZ0X29iamVjdCAqb2JqKVxuQEAgLTEyMzMsNiArMTI5NSw4IEBAIHN0YXRpYyBpbnQgbmZ0X2N0X2V4cGVjdF9vYmpfaW5pdChjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxuIFx0c3RydWN0IG5mdF9jdF9leHBlY3Rfb2JqICpwcml2ID0gbmZ0X29ial9kYXRhKG9iaik7XG4gXHRpbnQgZXJyO1xuIFxuK1x0TkZfQ1RfSEVMUEVSX0JVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IG5mdF9jdF9leHBlY3RfZGF0YSkpO1xuK1xuIFx0aWYgKCF0YltORlRBX0NUX0VYUEVDVF9MNFBST1RPXSB8fFxuIFx0ICAgICF0YltORlRBX0NUX0VYUEVDVF9EUE9SVF0gfHxcbiBcdCAgICAhdGJbTkZUQV9DVF9FWFBFQ1RfVElNRU9VVF0gfHxcbkBAIC0xMjczLDEzICsxMzM3LDI2IEBAIHN0YXRpYyBpbnQgbmZ0X2N0X2V4cGVjdF9vYmpfaW5pdChjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxuIFx0cHJpdi1cdTAwM2VkcG9ydCA9IG5sYV9nZXRfYmUxNih0YltORlRBX0NUX0VYUEVDVF9EUE9SVF0pO1xuIFx0cHJpdi1cdTAwM2VzaXplID0gbmxhX2dldF91OCh0YltORlRBX0NUX0VYUEVDVF9TSVpFXSk7XG4gXG4tXHRyZXR1cm4gbmZfY3RfbmV0bnNfZ2V0KGN0eC1cdTAwM2VuZXQsIGN0eC1cdTAwM2VmYW1pbHkpO1xuK1x0ZXJyID0gbmZfY3RfbmV0bnNfZ2V0KGN0eC1cdTAwM2VuZXQsIGN0eC1cdTAwM2VmYW1pbHkpO1xuK1x0aWYgKGVyciBcdTAwM2MgMClcbitcdFx0cmV0dXJuIGVycjtcbitcbitcdGVyciA9IG5mdF9jdF9leHBlY3RfaGVscGVyX2FsbG9jKHByaXYpO1xuK1x0aWYgKGVyciBcdTAwM2MgMCkge1xuK1x0XHRuZl9jdF9uZXRuc19wdXQoY3R4LVx1MDAzZW5ldCwgY3R4LVx1MDAzZWZhbWlseSk7XG4rXHRcdHJldHVybiBlcnI7XG4rXHR9XG4rXG4rXHRyZXR1cm4gZXJyO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBuZnRfY3RfZXhwZWN0X29ial9kZXN0cm95KGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXG4tXHRcdFx0XHQgICAgICAgc3RydWN0IG5mdF9vYmplY3QgKm9iailcbitcdFx0XHRcdCAgICAgIHN0cnVjdCBuZnRfb2JqZWN0ICpvYmopXG4ge1xuK1x0Y29uc3Qgc3RydWN0IG5mdF9jdF9leHBlY3Rfb2JqICpwcml2ID0gbmZ0X29ial9kYXRhKG9iaik7XG4rXG4gXHRuZl9jdF9uZXRuc19wdXQoY3R4LVx1MDAzZW5ldCwgY3R4LVx1MDAzZWZhbWlseSk7XG4rXHRuZl9jb25udHJhY2tfaGVscGVyX2ZyZWUocHJpdi1cdTAwM2VoZWxwZXIpO1xuIH1cbiBcbiBzdGF0aWMgaW50IG5mdF9jdF9leHBlY3Rfb2JqX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYixcbkBAIC0xMzAyLDUwICsxMzc5LDM4IEBAIHN0YXRpYyB2b2lkIG5mdF9jdF9leHBlY3Rfb2JqX2V2YWwoc3RydWN0IG5mdF9vYmplY3QgKm9iaixcbiBcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0KVxuIHtcbiBcdGNvbnN0IHN0cnVjdCBuZnRfY3RfZXhwZWN0X29iaiAqcHJpdiA9IG5mdF9vYmpfZGF0YShvYmopO1xuLVx0c3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmV4cDtcbitcdHN0cnVjdCBuZnRfY3RfZXhwZWN0X2RhdGEgKmV4cGVjdF9kYXRhO1xuIFx0ZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm87XG4gXHRzdHJ1Y3QgbmZfY29ubl9oZWxwICpoZWxwO1xuLVx0ZW51bSBpcF9jb25udHJhY2tfZGlyIGRpcjtcbi1cdHUxNiBsM251bSA9IHByaXYtXHUwMDNlbDNudW07XG4gXHRzdHJ1Y3QgbmZfY29ubiAqY3Q7XG4gXG4gXHRjdCA9IG5mX2N0X2dldChwa3QtXHUwMDNlc2tiLCBcdTAwMjZjdGluZm8pO1xuLVx0aWYgKCFjdCB8fCBuZl9jdF9pc19jb25maXJtZWQoY3QpIHx8IG5mX2N0X2lzX3RlbXBsYXRlKGN0KSkge1xuK1x0aWYgKCFjdCB8fCBuZl9jdF9pc190ZW1wbGF0ZShjdCkgfHwgbmZfY3RfaXNfY29uZmlybWVkKGN0KSkge1xuIFx0XHRyZWdzLVx1MDAzZXZlcmRpY3QuY29kZSA9IE5GVF9CUkVBSztcbiBcdFx0cmV0dXJuO1xuIFx0fVxuLVx0ZGlyID0gQ1RJTkZPMkRJUihjdGluZm8pO1xuIFxuIFx0aGVscCA9IG5mY3RfaGVscChjdCk7XG4tXHRpZiAoIWhlbHApXG4tXHRcdGhlbHAgPSBuZl9jdF9oZWxwZXJfZXh0X2FkZChjdCwgR0ZQX0FUT01JQyk7XG4tXHRpZiAoIWhlbHApIHtcbi1cdFx0cmVncy1cdTAwM2V2ZXJkaWN0LmNvZGUgPSBORl9EUk9QO1xuLVx0XHRyZXR1cm47XG4tXHR9XG4tXG4tXHRpZiAoaGVscC1cdTAwM2VleHBlY3RpbmdbTkZfQ1RfRVhQRUNUX0NMQVNTX0RFRkFVTFRdIFx1MDAzZT0gcHJpdi1cdTAwM2VzaXplKSB7XG4rXHRpZiAoaGVscCkge1xuIFx0XHRyZWdzLVx1MDAzZXZlcmRpY3QuY29kZSA9IE5GVF9CUkVBSztcbiBcdFx0cmV0dXJuO1xuIFx0fVxuLVx0aWYgKGwzbnVtID09IE5GUFJPVE9fSU5FVClcbi1cdFx0bDNudW0gPSBuZl9jdF9sM251bShjdCk7XG4gXG4tXHRleHAgPSBuZl9jdF9leHBlY3RfYWxsb2MoY3QpO1xuLVx0aWYgKGV4cCA9PSBOVUxMKSB7XG4rXHRoZWxwID0gbmZfY3RfaGVscGVyX2V4dF9hZGQoY3QsIEdGUF9BVE9NSUMpO1xuK1x0aWYgKCFoZWxwKSB7XG4gXHRcdHJlZ3MtXHUwMDNldmVyZGljdC5jb2RlID0gTkZfRFJPUDtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuLVx0bmZfY3RfZXhwZWN0X2luaXQoZXhwLCBORl9DVF9FWFBFQ1RfQ0xBU1NfREVGQVVMVCwgbDNudW0sXG4tXHRcdCAgICAgICAgICBcdTAwMjZjdC1cdTAwM2V0dXBsZWhhc2hbIWRpcl0udHVwbGUuc3JjLnUzLFxuLVx0XHQgICAgICAgICAgXHUwMDI2Y3QtXHUwMDNldHVwbGVoYXNoWyFkaXJdLnR1cGxlLmRzdC51Myxcbi1cdFx0ICAgICAgICAgIHByaXYtXHUwMDNlbDRwcm90bywgTlVMTCwgXHUwMDI2cHJpdi1cdTAwM2VkcG9ydCk7XG4tXHRleHAtXHUwMDNldGltZW91dCArPSBwcml2LVx1MDAzZXRpbWVvdXQ7XG4gXG4tXHRpZiAobmZfY3RfZXhwZWN0X3JlbGF0ZWQoZXhwLCAwKSAhPSAwKVxuLVx0XHRyZWdzLVx1MDAzZXZlcmRpY3QuY29kZSA9IE5GX0RST1A7XG4rXHRleHBlY3RfZGF0YSA9IG5mY3RfaGVscF9kYXRhKGN0KTtcbitcdGlmICghZXhwZWN0X2RhdGEpIHtcbitcdFx0cmVncy1cdTAwM2V2ZXJkaWN0LmNvZGUgPSBORlRfQlJFQUs7XG4rXHRcdHJldHVybjtcbitcdH1cbitcdGV4cGVjdF9kYXRhLVx1MDAzZW9iaiA9ICpwcml2O1xuIFxuLVx0bmZfY3RfZXhwZWN0X3B1dChleHApO1xuK1x0aWYgKGhlbHAgXHUwMDI2XHUwMDI2IHJlZmNvdW50X2luY19ub3RfemVybyhcdTAwMjZwcml2LVx1MDAzZWhlbHBlci1cdTAwM2VjdF9yZWZjbnQpKVxuK1x0XHRyY3VfYXNzaWduX3BvaW50ZXIoaGVscC1cdTAwM2VoZWxwZXIsIHByaXYtXHUwMDNlaGVscGVyKTtcbiB9XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5mdF9jdF9leHBlY3RfcG9saWN5W05GVEFfQ1RfRVhQRUNUX01BWCArIDFdID0ge1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDM6Mzc6MDUuMjU1MTc1Mjc2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDczMTE2NTg4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE5ldGZpbHRlciBDb25udHJhY2sgSGVscGVyIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQncyBtYWtpbmcgc29tZSBrZXkgbW9kaWZpY2F0aW9ucyB0byB0aGUgY29ubnRyYWNrIGhlbHBlciBhbmQgbmZ0YWJsZXMgaW50ZWdyYXRpb24uIFRoZSBjb3JlIG9mIGl0IHNlZW1zIHRvIGJlIGFkZGluZyBhIGBuZl9jb25udHJhY2tfaGVscGVyX2ZyZWVgIGZ1bmN0aW9uIGFuZCBtYWtpbmcgaXQgYXZhaWxhYmxlLiBUaGlzIGlzIGludGVyZXN0aW5nLCBhIGNsZWFudXAgZnVuY3Rpb24gaXMgYWx3YXlzIGEgZ29vZCBzaWduIG9mIHJlc291cmNlIG1hbmFnZW1lbnQgYmVpbmcgY29uc2lkZXJlZC5cblxuVGhlIHJlYWwgbWVhdCBvZiB0aGUgY2hhbmdlcyBzZWVtcyB0byBiZSBpbiBob3cgY29ubnRyYWNrIGhlbHBlcnMgYXJlIGhhbmRsZWQgd2l0aGluIGBuZnRfY3RfZXhwZWN0YC4gVGhlIGBuZnRfY3RfZXhwZWN0X29ial9pbml0YCBmdW5jdGlvbiBpcyBiZWluZyB1cGRhdGVkIHRvIGFsbG9jYXRlIGEgaGVscGVyIHVzaW5nIGBuZnRfY3RfZXhwZWN0X2hlbHBlcl9hbGxvY2AuIFRoZW4sIHRoZSBgbmZ0X2N0X2V4cGVjdF9vYmpfZXZhbGAgZnVuY3Rpb24gd2lsbCBub3cgbGV2ZXJhZ2UgYG5mX2N0X2hlbHBlcl9leHRfYWRkYCB0byBhZGQgdGhlIGhlbHBlciB0byB0aGUgY29ubnRyYWNrIGVudHJ5LiBFc3NlbnRpYWxseSwgdGhlIGNvZGUgaXMgbW92aW5nIHRvIGV4cGxpY2l0bHkgbWFuYWdlIGFuZCBhc3NvY2lhdGUgdGhlc2UgaGVscGVycywgd2hpY2ggaXMgYSBmdW5jdGlvbmFsIGltcHJvdmVtZW50IGluIHRoZSBuZXRmaWx0ZXIgZWNvc3lzdGVtLiBUaGlzIGltcGFjdHMgaG93IG5mdGFibGVzIGludGVyYWN0cyB3aXRoIGNvbm50cmFjayBleHBlY3RhdGlvbnMuXG5cbk5vdywgbGV0J3Mgc2VlIGhvdyB0aGlzIGFsbCBjb21waWxlcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSXQgbG9va3MgbGlrZSBgbmZ0X2N0LmNgIGlzIGdvaW5nIHRvIGJlIGNvbXBpbGVkIGlmIGBDT05GSUdfTkZUX0NUYCBpcyBlbmFibGVkLiBNYWtlcyBzZW5zZSwgdGhhdCdzIGV4cGVjdGVkLiBTaW1pbGFybHksIGBuZl9jb25udHJhY2tfaGVscGVyLmNgIG5lZWRzIGBDT05GSUdfTkZfQ09OTlRSQUNLYCB0byBiZSBzZXQuIFRoYXQgYWxpZ25zIHdpdGggaG93IHRoZXNlIGNvbXBvbmVudHMgbm9ybWFsbHkgd29yay4gTm93LCBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhlIGBuZXQvbmV0ZmlsdGVyL01ha2VmaWxlYCB0byBjb25maXJtIHRoZSBjb21waWxhdGlvbiBkZXBlbmRlbmNpZXMgYW5kIGJ1aWxkIGVudmlyb25tZW50IGZvciBgbmZ0X2N0LmNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0OTYyLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjA3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDM6Mzc6MDkuOTg2MzQ0MzhaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDIzMDgwNjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZ0X2N0XFxcXC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9NYWtlZmlsZT0xMTE9b2JqLSQoQ09ORklHX05GVF9OVU1HRU4pXFx0Kz0gbmZ0X251bWdlbi5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZToxMTI6b2JqLSQoQ09ORklHX05GVF9DVClcXHRcXHQrPSBuZnRfY3Qub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMTEzLW9iai0kKENPTkZJR19ORlRfRkxPV19PRkZMT0FEKVxcdCs9IG5mdF9mbG93X29mZmxvYWQub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwMzozNzoxMC4wMjg2NzY1MThaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTgyODk5MjA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBkZXBlbmRlbmNpZXMgYW5kIGZ1bmN0aW9uIGNhbGxzOlxuXG4qKkRlcGVuZGVuY2llcyBhbmQgRnVuY3Rpb24gQ2FsbHMqKlxuXG5Pa2F5LCBzbyBJJ20gcHV0dGluZyB0b2dldGhlciB0aGlzIG5ldyBOZXRmaWx0ZXIgbW9kdWxlLCBhbmQgaXQgbG9va3MgbGlrZSBJIGFic29sdXRlbHkgKm5lZWQqIGBDT05GSUdfTkZUX0NUYC4gVGhhdCdzIG5vbi1uZWdvdGlhYmxlLiBBbmQsIG9mIGNvdXJzZSwgdGhlIGV2ZXItcHJlc2VudCBgQ09ORklHX05GX0NPTk5UUkFDS2AgaXMgYWxzbyBhIG11c3QtaGF2ZS4gTm8gc3VycHJpc2VzIHRoZXJlOyBJIGtuZXcgdGhhdCBmcm9tIHRoZSBvdXRzZXQuXG5cbk5vdywgbGV0IG1lIGp1c3QgcXVpY2tseSBydW4gdGhyb3VnaCB0aGUgcmVsZXZhbnQgZnVuY3Rpb25zLiBMZXQncyBzZWUuLi4gSSBzaG91bGQgY2hlY2sgb3V0IGBuZnRfY3RfZXhwZWN0X29ial9pbml0YCBhbmQgYG5mdF9jdF9leHBlY3Rfb2JqX2V2YWxgLiBUaG9zZSBhcmUgdGhlIHVzdWFsIHN1c3BlY3RzLiBJJ20gcHJldHR5IHN1cmUgdGhleSBhcmUgZGVmaW5lZCB3aXRoaW4gYG5mdF9jdF9leHBlY3Rfb2JqX29wc2AuLi4gb3IgYXQgbGVhc3Qgc29tZXRoaW5nIHNpbWlsYXIgdG8gdGhhdCBzdHJ1Y3R1cmUuIEknbGwgbmVlZCB0byBjb25maXJtIHRoYXQsIGJ1dCBteSBpbnN0aW5jdHMgYXJlIHBvaW50aW5nIGluIHRoYXQgZGlyZWN0aW9uLiBHb3R0YSBtYWtlIHN1cmUgdGhvc2UgZXhwZWN0YXRpb25zIGFyZSBoYW5kbGVkIGNvcnJlY3RseS4gVGhpcydsbCBiZSB0aGUga2V5IHRvIG1ha2luZyB0aGlzIG1vZHVsZSB3b3JrIGxpa2UgYSBjaGFybS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTY0OCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDAzOjM3OjE0LjIxMTU3NzY0N1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzA4NzM3NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZnRfY3RfZXhwZWN0X29ial9pbml0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZnRfY3QuYz0xMjcwPXN0YXRpYyBpbnQgbmZ0X2N0X2V4cGVjdF9oZWxwZXJfYWxsb2Moc3RydWN0IG5mdF9jdF9leHBlY3Rfb2JqICpwcml2KVxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfY3QuYy0xMjkwLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmM6MTI5MTpzdGF0aWMgaW50IG5mdF9jdF9leHBlY3Rfb2JqX2luaXQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jLTEyOTItXFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgdGJbXSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmM9MTQyNj1zdGF0aWMgY29uc3Qgc3RydWN0IG5mdF9vYmplY3Rfb3BzIG5mdF9jdF9leHBlY3Rfb2JqX29wcyA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMtMTQyOS1cXHQuZXZhbFxcdFxcdD0gbmZ0X2N0X2V4cGVjdF9vYmpfZXZhbCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jOjE0MzA6XFx0LmluaXRcXHRcXHQ9IG5mdF9jdF9leHBlY3Rfb2JqX2luaXQsXFxubmV0L25ldGZpbHRlci9uZnRfY3QuYy0xNDMxLVxcdC5kZXN0cm95XFx0PSBuZnRfY3RfZXhwZWN0X29ial9kZXN0cm95LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwMzozNzoxNC4yNTg2NzA3OTRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTkyODQ0NTY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBDb25udHJhY2sgRXhwZWN0YXRpb24gT2JqZWN0IEZ1bmN0aW9ucyoqXG5cbk9rYXksIGxldCdzIHplcm8gaW4gb24gdGhlc2UgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gY29ubmVjdGlvbiB0cmFja2luZyBleHBlY3RhdGlvbnM6IGBuZnRfY3RfZXhwZWN0X29ial9pbml0YCwgYG5mdF9jdF9leHBlY3Rfb2JqX2V2YWxgLCBgbmZ0X2N0X2V4cGVjdF9vYmpfZGVzdHJveWAsIGBuZnRfY3RfZXhwZWN0X2hlbHBlcl9hbGxvY2AsIGBjdF9leHBlY3RfaGVscGAsIGFuZCBgbmZfY29ubnRyYWNrX2hlbHBlcl9mcmVlYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgdGhlaXIgdmlzaWJpbGl0eSwgYmVjYXVzZSB0aGF0J3MgY3JpdGljYWwgZm9yIGhvdyB3ZSBjYW4gaW50ZXJhY3Qgd2l0aCB0aGVtLiBBcmUgdGhlc2Ugc3RhdGljIG9yIGV4cG9ydGVkP1xuXG5SaWdodCwgcXVpY2sgY2hlY2suLi4gSG1tLCBpdCBsb29rcyBsaWtlIGBuZnRfY3RfZXhwZWN0X29ial9pbml0YCwgYG5mdF9jdF9leHBlY3Rfb2JqX2V2YWxgLCBgbmZ0X2N0X2V4cGVjdF9vYmpfZGVzdHJveWAsIGBuZnRfY3RfZXhwZWN0X2hlbHBlcl9hbGxvY2AgYW5kIGBjdF9leHBlY3RfaGVscGAgYXJlIGFsbCBkZWNsYXJlZCBhcyBzdGF0aWMuIFRoaXMgbWFrZXMgbWUgcGF1c2UuIEdpdmVuIG15IHVuZGVyc3RhbmRpbmcgb2YgYEZvY3VzU3ltYm9sc2AgYW5kIHNpbWlsYXIgdG9vbHMsIHN0YXRpYyBmdW5jdGlvbnMgY2FuIGJlIHByb2JsZW1hdGljIGZvciBkeW5hbWljIGFuYWx5c2lzIG9yIHN5bWJvbC1iYXNlZCB0cmFjaW5nLiBXZSBtaWdodCBuZWVkIHRvIGNvbnNpZGVyIGFsdGVybmF0aXZlcyBpZiB3ZSdyZSBsb2NrZWQgb3V0IG9mIHRoZXNlLlxuXG5CdXQgd2FpdCwgYG5mX2Nvbm50cmFja19oZWxwZXJfZnJlZWAgKmlzKiBleHBvcnRlZCwgdGhhdCdzIHVzZWZ1bC5cblxuTm93LCBpZiBtb3N0IG9mIHRoZSBjb3JlIGZ1bmN0aW9ucyBhcmUgc3RhdGljLCB0aGF0IHN1Z2dlc3RzIHdlIG5lZWQgdG8gZGlnIGRlZXBlciB0byBzZWUgaG93IHRoaXMgc3lzdGVtIGlzIG9yY2hlc3RyYXRlZC4gSXQgYWxzbyBtZWFucyB0aGF0LCBsaWtlbHksIGBGb2N1c1N5bWJvbHNgIHdpbGwgbm90IGJlIGFibGUgdG8gaW50ZXJhY3Qgd2l0aCB0aGVtIGFzIGVhc2lseSBhcyBpZiB0aGV5IHdlcmUgZXhwb3J0ZWQuIExldCdzIHNlZS4uLiBBaCwgdGhlcmUncyBgbmZ0X2N0X2V4cGVjdF9vYmpfb3BzYCwgYW5kIHRoYXQncyBsaWtlbHkgKnJlZ2lzdGVyZWQqIHNvbWV3aGVyZS4gVGhhdCdzIGEga2V5IGNsdWUuIEkgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gdGhhdCBwb2ludC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjI0NSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwMzozNzoxOS4yNTE1MTgzNzJaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDMyOTA1NjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZ0X2N0X2V4cGVjdF9vYmpfb3BzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZnRfY3QuYz0xNDI0PXN0YXRpYyBzdHJ1Y3QgbmZ0X29iamVjdF90eXBlIG5mdF9jdF9leHBlY3Rfb2JqX3R5cGU7XFxubmV0L25ldGZpbHRlci9uZnRfY3QuYy0xNDI1LVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmM6MTQyNjpzdGF0aWMgY29uc3Qgc3RydWN0IG5mdF9vYmplY3Rfb3BzIG5mdF9jdF9leHBlY3Rfb2JqX29wcyA9IHtcXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jLTE0MjctXFx0LnR5cGVcXHRcXHQ9IFxcdTAwMjZuZnRfY3RfZXhwZWN0X29ial90eXBlLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfY3QuYz0xNDM1PXN0YXRpYyBzdHJ1Y3QgbmZ0X29iamVjdF90eXBlIG5mdF9jdF9leHBlY3Rfb2JqX3R5cGUgX19yZWFkX21vc3RseSA9IHtcXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jLTE0MzYtXFx0LnR5cGVcXHRcXHQ9IE5GVF9PQkpFQ1RfQ1RfRVhQRUNULFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmM6MTQzNzpcXHQub3BzXFx0XFx0PSBcXHUwMDI2bmZ0X2N0X2V4cGVjdF9vYmpfb3BzLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMtMTQzOC1cXHQubWF4YXR0clxcdD0gTkZUQV9DVF9FWFBFQ1RfTUFYLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwMzozNzoxOS4yOTQ4MTQ0MjlaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTc0NDYwNDMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqSW5pdGlhbCBDb25udHJhY2sgTW9kdWxlIElucXVpcnkqKlxuXG5SaWdodCwgc28gYG5mdF9jdF9leHBlY3Rfb2JqX3R5cGVgIGlzIGRlZmluaXRlbHkgcmVnaXN0ZXJlZCwgdGhhdCdzIHN0ZXAgb25lLiBOb3csIHdoZXJlIGFyZSB3ZSB3aXRoIHRob3NlIGhlbHBlciBmdW5jdGlvbnM/IExldCdzIHNlZS4uLiBgbmZfY29ubnRyYWNrX2hlbHBlcl9mcmVlYCBpcyAqZXhwb3J0ZWQqIC0gZ29vZCwgaXQncyBhdmFpbGFibGUuIEFuZCBgbmZfY29ubnRyYWNrX2hlbHBlcl91bnJlZ2lzdGVyYCBpcyBhbHNvIGV4cG9ydGVkLiBTZWVtcyBwcmV0dHkgc3RhbmRhcmQgc28gZmFyLCB0aGVzZSBsb29rIGxpa2UgdGhlIGtleSBwaWVjZXMuIE5vdywgdGhlIHF1ZXN0aW9uIGlzLCB3aGVyZSBhcmUgdGhlc2UgZnVuY3Rpb25zIGFjdHVhbGx5IGJlaW5nICp1c2VkKj8gVGltZSB0byBjaGVjayBgbmZ0X2N0X21vZHVsZV9pbml0YCBvciBzb21ldGhpbmcgc2ltaWxhci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbm5lY3Rpb24gYmV0d2VlbiB0aGVzZSByZWdpc3RlcmVkIGFuZCBleHBvcnRlZCBlbGVtZW50cyB0byBoYXZlIGEgZnVsbCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzdGF0ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzEzOCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDAzOjM3OjIyLjQ2OTI3NzI1MVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDE3MDkzNDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZ0X2N0X2V4cGVjdF9vYmpfdHlwZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL25mdF9jdC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmM9MTQxNj1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmZ0X2N0X2V4cGVjdF9wb2xpY3lbTkZUQV9DVF9FWFBFQ1RfTUFYICsgMV0gPSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jLTE0MjMtXFxubmV0L25ldGZpbHRlci9uZnRfY3QuYzoxNDI0OnN0YXRpYyBzdHJ1Y3QgbmZ0X29iamVjdF90eXBlIG5mdF9jdF9leHBlY3Rfb2JqX3R5cGU7XFxubmV0L25ldGZpbHRlci9uZnRfY3QuYy0xNDI1LVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmM9MTQyNj1zdGF0aWMgY29uc3Qgc3RydWN0IG5mdF9vYmplY3Rfb3BzIG5mdF9jdF9leHBlY3Rfb2JqX29wcyA9IHtcXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jOjE0Mjc6XFx0LnR5cGVcXHRcXHQ9IFxcdTAwMjZuZnRfY3RfZXhwZWN0X29ial90eXBlLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMtMTQyOC1cXHQuc2l6ZVxcdFxcdD0gc2l6ZW9mKHN0cnVjdCBuZnRfY3RfZXhwZWN0X29iaiksXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jLTE0MzQtXFxubmV0L25ldGZpbHRlci9uZnRfY3QuYzoxNDM1OnN0YXRpYyBzdHJ1Y3QgbmZ0X29iamVjdF90eXBlIG5mdF9jdF9leHBlY3Rfb2JqX3R5cGUgX19yZWFkX21vc3RseSA9IHtcXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jLTE0MzYtXFx0LnR5cGVcXHRcXHQ9IE5GVF9PQkpFQ1RfQ1RfRVhQRUNULFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfY3QuYz0xNDQzPXN0YXRpYyBpbnQgX19pbml0IG5mdF9jdF9tb2R1bGVfaW5pdCh2b2lkKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfY3QuYy0xNDYwLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmM6MTQ2MTpcXHRlcnIgPSBuZnRfcmVnaXN0ZXJfb2JqKFxcdTAwMjZuZnRfY3RfZXhwZWN0X29ial90eXBlKTtcXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jLTE0NjItXFx0aWYgKGVyciBcXHUwMDNjIDApXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jLTE0NzItZXJyNDpcXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jOjE0NzM6XFx0bmZ0X3VucmVnaXN0ZXJfb2JqKFxcdTAwMjZuZnRfY3RfZXhwZWN0X29ial90eXBlKTtcXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jLTE0NzQtI2VuZGlmXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jPTE0ODQ9c3RhdGljIHZvaWQgX19leGl0IG5mdF9jdF9tb2R1bGVfZXhpdCh2b2lkKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfY3QuYy0xNDg4LSNlbmRpZlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmM6MTQ4OTpcXHRuZnRfdW5yZWdpc3Rlcl9vYmooXFx1MDAyNm5mdF9jdF9leHBlY3Rfb2JqX3R5cGUpO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMtMTQ5MC1cXHRuZnRfdW5yZWdpc3Rlcl9vYmooXFx1MDAyNm5mdF9jdF9oZWxwZXJfb2JqX3R5cGUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwMzozNzoyMi41MTA5OTM2MDhaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTI2MTExMjgzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTmV0ZmlsdGVyIENvbm50cmFjayBPYmplY3QgRnVuY3Rpb25zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgZnVuY3Rpb25zLCBgbmZ0X2N0X2V4cGVjdF9vYmpfaW5pdGAgYW5kIGBuZnRfY3RfZXhwZWN0X29ial9ldmFsYC4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0aGF0LCBiZWluZyBzdGF0aWMsIHRoZXkgKm1pZ2h0KiBnZXQgaW5saW5lZCBieSB0aGUgY29tcGlsZXIuIEJ1dCB3YWl0LCB0aGV5J3JlIGFzc2lnbmVkIHRvIGZ1bmN0aW9uIHBvaW50ZXJzIHdpdGhpbiBgbmZ0X2N0X2V4cGVjdF9vYmpfb3BzYC4gVGhhdCBtZWFucyB0aGV5IGRlZmluaXRlbHkgKmFyZW4ndCogaW5saW5lZC4gU28sIGFjY29yZGluZyB0byB0aGUgaW5zdHJ1Y3Rpb25zLCBpbmNsdWRpbmcgdGhlbSBpbiBgRm9jdXNTeW1ib2xzYCBpcyBhIHBvc3NpYmlsaXR5LCB0aG91Z2ggdGhlIHByb21wdCB3YW50cyBtZSB0byBwcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzLiBTaW5jZSB0aGV5ICphcmUqIHN0YXRpYywgZXZlbiB0aG91Z2ggdGhleSdyZSBub3QgaW5saW5lZCwgSSBuZWVkIHRvIGZpbmQgc29tZXRoaW5nIGJldHRlci5cblxuQXJlIHRoZXJlIGFueSBvdGhlciBvcHRpb25zPyBBaCwgYG5mX2Nvbm50cmFja19oZWxwZXJfZnJlZWAgaXMgbm9uLXN0YXRpYyBhbmQgbG9va3MgcHJvbWlzaW5nLiBBbmQgYG5mX2Nvbm50cmFja19oZWxwZXJfdW5yZWdpc3RlcmAsIHRoYXQncyBub24tc3RhdGljIHRvby5cblxuQnV0LCBoYW5nIG9uLCBsZXQncyBzdGVwIGJhY2sgZm9yIGEgc2Vjb25kLiBgbmZ0X2N0X2V4cGVjdF9vYmpfaW5pdGAgKmlzKiBjYWxsZWQgdmlhIGBuZnRfb2JqZWN0X29wcy1cdTAwM2Vpbml0YC4gVGhlIGFjdHVhbCBlbnRyeSBwb2ludCBmcm9tIHRoZSBOZXRsaW5rIGludGVyZmFjZSBpcyBwcm9iYWJseSBzb21ldGhpbmcgbGlrZSBgbmZfdGFibGVzX25ld29iamAgb3Igc29tZXRoaW5nIHNpbWlsYXIsIHJpZ2h0PyBUaG91Z2gsIEkgc2VlIHRoYXQgYG5mX2Nvbm50cmFja19oZWxwZXJfZnJlZWAgaGFzIGJlZW4gZXhwbGljaXRseSBhZGRlZCBpbiB0aGlzIHBhdGNoLiBTbywgaXQgaXMgZGVmaW5pdGVseSBhIHZhbGlkIG9wdGlvbiFcblxuT2theSwgdGltZSB0byBjaGVjayBgbmV0L25ldGZpbHRlci9LY29uZmlnYCB0byBjb25maXJtIGBORlRfQ1RgLiBMZXQncyBzZWUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODAzNCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwMzozNzoyNy43NzIxMDkwNVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM4NzI3NTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5GVF9DVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnPTQ4NT1jb25maWcgTkZUX05VTUdFTlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ5MC1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NDkxOmNvbmZpZyBORlRfQ1RcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDkyLVxcdGRlcGVuZHMgb24gTkZfQ09OTlRSQUNLXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDAzOjM3OjI3LjgxNTk4NzcyN1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTM3NTIyMDY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBhIHBlcnNvbmFsIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKk5hdmlnYXRpbmcgRGVwZW5kZW5jaWVzIGluIHRoZSBOZXRmaWx0ZXIgRnJhbWV3b3JrKipcblxuQWxyaWdodCwgc28gSSdtIHNlZWluZyB0aGlzIGBORlRfQ1RgIG1vZHVsZS4uLiBJIGltbWVkaWF0ZWx5IHJlY29nbml6ZSBpdCBhcyBzb21ldGhpbmcgcmVsYXRlZCB0byBjb25udHJhY2suIFNwZWNpZmljYWxseSwgSSdtIG5vdGluZyB0aGF0IGBORlRfQ1RgIHNlZW1zIHRvICpyZWx5KiBvbiBgTkZfQ09OTlRSQUNLYC4gVGhhdCdzIGEga2V5IHBpZWNlIG9mIGluZm9ybWF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0IGRlcGVuZGVuY3kgZnVsbHkuXG5cblRoZXJlZm9yZSwgdGhlIGxvZ2ljYWwgbmV4dCBzdGVwIGZvciBtZSBpcyB0byBkaWcgaW50byB0aGUgTmV0ZmlsdGVyIGNvbmZpZ3VyYXRpb24uIEknbGwgbmVlZCB0byBnbyB0byB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlciDigJMgdGhlIGBLY29uZmlnYCBmaWxlcyDigJMgd2l0aGluIHRoZSBgbmV0L25ldGZpbHRlci9gIGRpcmVjdG9yeS4gVGhhdCdzIHdoZXJlIEknbGwgZmluZCB0aGUgZGVmaW5pdGlvbnMgZm9yIGBORl9DT05OVFJBQ0tgIGFuZCwgaW1wb3J0YW50bHksIHVuZGVyc3RhbmQgaG93IGl0IHJlbGF0ZXMgdG8gYE5GVF9DVGAuIEkgbmVlZCB0byBlbnN1cmUgSSdtIGdldHRpbmcgdGhlIHdob2xlIHBpY3R1cmUgb2YgdGhlIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiB0aGVzZSBtb2R1bGVzLiBNeSBnb2FsIGlzIHRvIGNvbmZpcm0gdGhlIGRlcGVuZGVuY3kgYW5kIGFzY2VydGFpbiBhbnkgcmVsYXRlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg3NjYsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwMzozNzozMC45NTM1MTIzNDFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyMTkyNzg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORl9DT05OVFJBQ0tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz03ND1jb25maWcgTkVURklMVEVSX05FVExJTktfT1NGXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctODEtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjgyOmNvbmZpZyBORl9DT05OVFJBQ0tcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctODMtXFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBjb25uZWN0aW9uIHRyYWNraW5nIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9MTExPWNvbmZpZyBORVRGSUxURVJfQ09OTkNPVU5UXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTEzLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxMTQ6Y29uZmlnIE5GX0NPTk5UUkFDS19NQVJLXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTExNS1cXHRib29sICAnQ29ubmVjdGlvbiBtYXJrIHRyYWNraW5nIHN1cHBvcnQnXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTIyLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxMjM6Y29uZmlnIE5GX0NPTk5UUkFDS19TRUNNQVJLXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTEyNC1cXHRib29sICAnQ29ubmVjdGlvbiB0cmFja2luZyBzZWN1cml0eSBtYXJrIHN1cHBvcnQnXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTM1LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxMzY6Y29uZmlnIE5GX0NPTk5UUkFDS19aT05FU1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMzctXFx0Ym9vbCAgJ0Nvbm5lY3Rpb24gdHJhY2tpbmcgem9uZXMnXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTQ3LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxNDg6Y29uZmlnIE5GX0NPTk5UUkFDS19QUk9DRlNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTQ5LVxcdGJvb2wgXFxcIlN1cHBseSBDVCBsaXN0IGluIHByb2NmcyAoT0JTT0xFVEUpXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE1Ni1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTU3OmNvbmZpZyBORl9DT05OVFJBQ0tfRVZFTlRTXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE1OC1cXHRib29sIFxcXCJDb25uZWN0aW9uIHRyYWNraW5nIGV2ZW50c1xcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNjYtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjE2Nzpjb25maWcgTkZfQ09OTlRSQUNLX1RJTUVPVVRcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTY4LVxcdGJvb2wgICdDb25uZWN0aW9uIHRyYWNraW5nIHRpbWVvdXQnXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTc2LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxNzc6Y29uZmlnIE5GX0NPTk5UUkFDS19USU1FU1RBTVBcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTc4LVxcdGJvb2wgICdDb25uZWN0aW9uIHRyYWNraW5nIHRpbWVzdGFtcGluZydcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xODctXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjE4ODpjb25maWcgTkZfQ09OTlRSQUNLX0xBQkVMU1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xODktXFx0Ym9vbCBcXFwiQ29ubmVjdGlvbiB0cmFja2luZyBsYWJlbHNcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTk0LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxOTU6Y29uZmlnIE5GX0NPTk5UUkFDS19PVlNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTk2LVxcdGJvb2xcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz0yMDE9Y29uZmlnIE5GX0NUX1BST1RPX1NDVFBcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yMTEtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjIxMjpjb25maWcgTkZfQ09OTlRSQUNLX0FNQU5EQVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yMTMtXFx0dHJpc3RhdGUgXFxcIkFtYW5kYSBiYWNrdXAgcHJvdG9jb2wgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yMjYtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjIyNzpjb25maWcgTkZfQ09OTlRSQUNLX0ZUUFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yMjgtXFx0dHJpc3RhdGUgXFxcIkZUUCBwcm90b2NvbCBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTIzOC1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MjM5OmNvbmZpZyBORl9DT05OVFJBQ0tfSDMyM1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNDAtXFx0dHJpc3RhdGUgXFxcIkguMzIzIHByb3RvY29sIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjU3LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyNTg6Y29uZmlnIE5GX0NPTk5UUkFDS19JUkNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjU5LVxcdHRyaXN0YXRlIFxcXCJJUkMgRENDIHByb3RvY29sIHN1cHBvcnQgKG9ic29sZXRlKVxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNzMtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjI3NDpjb25maWcgTkZfQ09OTlRSQUNLX0JST0FEQ0FTVFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNzUtXFx0dHJpc3RhdGVcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjc2LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyNzc6Y29uZmlnIE5GX0NPTk5UUkFDS19ORVRCSU9TX05TXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTI3OC1cXHR0cmlzdGF0ZSBcXFwiTmV0QklPUyBuYW1lIHNlcnZpY2UgcHJvdG9jb2wgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yOTUtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjI5Njpjb25maWcgTkZfQ09OTlRSQUNLX1NOTVBcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjk3LVxcdHRyaXN0YXRlIFxcXCJTTk1QIHNlcnZpY2UgcHJvdG9jb2wgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zMTAtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjMxMTpjb25maWcgTkZfQ09OTlRSQUNLX1BQVFBcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzEyLVxcdHRyaXN0YXRlIFxcXCJQUHRQIHByb3RvY29sIHN1cHBvcnQgKGRlcHJlY2F0ZWQpXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTMyOS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MzMwOmNvbmZpZyBORl9DT05OVFJBQ0tfU0FORVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zMzEtXFx0dHJpc3RhdGUgXFxcIlNBTkUgcHJvdG9jb2wgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zNDItXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjM0Mzpjb25maWcgTkZfQ09OTlRSQUNLX1NJUFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zNDQtXFx0dHJpc3RhdGUgXFxcIlNJUCBwcm90b2NvbCBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTM1NC1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MzU1OmNvbmZpZyBORl9DT05OVFJBQ0tfVEZUUFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zNTYtXFx0dHJpc3RhdGUgXFxcIlRGVFAgcHJvdG9jb2wgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDM6Mzc6MzAuOTk1NzA4NzI5WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI3Mjk0NDUzMzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIENvbm5lY3Rpb24gVHJhY2tpbmcgQ29uZmlndXJhdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBjb25uZWN0aW9uIHRyYWNraW5nIG9wdGlvbnMgaGVyZS4gSSBzZWUgYE5GX0NPTk5UUkFDS2AgYW5kIGBORlRfQ1RgIG1lbnRpb25lZC4gUmlnaHQsIHRoYXQncyB0aGUgY2xhc3NpYyBuZXRmaWx0ZXIgYW5kIHRoZSBuZXdlciBuZnRhYmxlcyBpbXBsZW1lbnRhdGlvbnMsIHJlc3BlY3RpdmVseS4gTm93LCBJIHZhZ3VlbHkgcmVtZW1iZXIgYE5GVF9DVGAgYnVpbGRpbmcgb24gdG9wIG9mIGBORl9DT05OVFJBQ0tgLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBub3Qgb3Zlcmxvb2tpbmcgYW55IG90aGVyIGNydWNpYWwgZGVwZW5kZW5jaWVzLiBMZXQgbWUgcXVpY2tseSB2ZXJpZnkgZXhhY3RseSB3aGF0IGBORlRfQ1RgIHJlcXVpcmVzIHRvIGZ1bmN0aW9uLiBUaW1lIHRvIGNoZWNrIGl0cyBkZXBlbmRlbmN5IHRyZWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMzQ3LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDM6Mzc6MzMuNzI1MTU2NTE4WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzUxMTk2NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkZUX0NUXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWc9NDg1PWNvbmZpZyBORlRfTlVNR0VOXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDkwLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo0OTE6Y29uZmlnIE5GVF9DVFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00OTItXFx0ZGVwZW5kcyBvbiBORl9DT05OVFJBQ0tcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDM6Mzc6MzMuNzY4NjcyNTg1WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NDk2MDU2NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSBgbmV0L25ldGZpbHRlci9LY29uZmlnYCBmaWxlLCBzcGVjaWZpY2FsbHkgdGhlIHNlY3Rpb24gY29uY2VybmluZyBgTkZUX0NUYDpcblxuKipEZWx2aW5nIGludG8gYE5GVF9DVGAgaW4gS2NvbmZpZyoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGUgYEtjb25maWdgIGZpbGUgZm9yIHRoZSBuZXRmaWx0ZXIgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gaG93IHRoZSBjb25udHJhY2sgZnVuY3Rpb25hbGl0eSwgcmVwcmVzZW50ZWQgYnkgYE5GVF9DVGAsIGlzIGNvbmZpZ3VyZWQuICBJJ20gZXhwZWN0aW5nIHRvIHNlZSBkZXBlbmRlbmNpZXMgYW5kIHBvdGVudGlhbGx5IHNvbWUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gbG9naWMgZGVmaW5lZCBoZXJlLiBUaGlzIGZpbGUgaXMgdGhlIGJlZHJvY2sgZm9yIGhvdyB0aGUga2VybmVsJ3MgYnVpbGQgc3lzdGVtIGRlY2lkZXMgKndoZXRoZXIqIGFuZCAqaG93KiB0byBpbmNsdWRlIHRoaXMgY3J1Y2lhbCBjb21wb25lbnQuIEknbSBsb29raW5nIGZvciBjbHVlcyBhYm91dCB0aGUgZGVmYXVsdCBzdGF0ZSBvZiBgTkZUX0NUYCwgYW55IHJlbGF0ZWQgb3B0aW9ucyBpdCBkZXBlbmRzIG9uIChsaWtlIG90aGVyIE5ldGZpbHRlciBtb2R1bGVzIG9yIHNwZWNpZmljIGtlcm5lbCBmZWF0dXJlcyksIGFuZCBhbnkgcG90ZW50aWFsIHRyYWRlLW9mZnMgaW4gdGVybXMgb2YgcmVzb3VyY2UgdXNhZ2Ugb3IgcGVyZm9ybWFuY2UgdGhhdCBtaWdodCBiZSBleHByZXNzZWQgaGVyZS4gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGF0IGNvbXBsZXggZmVhdHVyZXMgbGlrZSBjb25uZWN0aW9uIHRyYWNraW5nIGFyZSBvZnRlbiBpbnRlcnR3aW5lZCB3aXRoIG90aGVyIGFyZWFzLCBzbyBJJ2xsIGJlIGtlZXBpbmcgYW4gZXllIG91dCBmb3IgaG93IHRoaXMgaXMgcHJlc2VudGVkLCB0aGlua2luZyBhYm91dCBob3cgSSdkIGN1c3RvbWl6ZSB0aGlzIHRvIGdldCB0aGUgc3BlY2lmaWMgYmVoYXZpb3JzIHRoYXQgSSBuZWVkIGluIG15IGRlcGxveW1lbnRzLiBJJ20gYW50aWNpcGF0aW5nIHRoYXQgYE5GVF9DVGAgd2lsbCBsaWtlbHkgYmUgZGVwZW5kZW50IG9uIG90aGVyIGNvcmUgbmV0ZmlsdGVyIG1vZHVsZXMsIGFuZCBJJ2xsIGJlIGludGVyZXN0ZWQgaW4gaG93IHRoZSBvcHRpb25zIGZvciB0aGVzZSBhcmUgZGVzY3JpYmVkLiBMZXQncyBzZWUgaG93IHRoZXkgaGFuZGxlIGVuYWJsaW5nIG9yIGRpc2FibGluZyBpdCBhbmQgdGhlIGNvbnNlcXVlbmNlcyBvZiB0aG9zZSBjaG9pY2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDYyNSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDAzOjM3OjM3LjIxODI4MDg4WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMzQxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNDgwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDgwOlxcdGNvbmZpZyBORl9UQUJMRVNfTkVUREVWXFxuIDQ4MTpcXHRcXHRib29sIFxcXCJOZXRmaWx0ZXIgbmZfdGFibGVzIG5ldGRldiB0YWJsZXMgc3VwcG9ydFxcXCJcXG4gNDgyOlxcdFxcdGhlbHBcXG4gNDgzOlxcdFxcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgXFxcIm5ldGRldlxcXCIgdGFibGUuXFxuIDQ4NDpcXHRcXG4gNDg1OlxcdGNvbmZpZyBORlRfTlVNR0VOXFxuIDQ4NjpcXHRcXHR0cmlzdGF0ZSBcXFwiTmV0ZmlsdGVyIG5mX3RhYmxlcyBudW1iZXIgZ2VuZXJhdG9yIG1vZHVsZVxcXCJcXG4gNDg3OlxcdFxcdGhlbHBcXG4gNDg4OlxcdFxcdCAgVGhpcyBvcHRpb24gYWRkcyB0aGUgbnVtYmVyIGdlbmVyYXRvciBleHByZXNzaW9uIHVzZWQgdG8gcGVyZm9ybVxcbiA0ODk6XFx0XFx0ICBpbmNyZW1lbnRhbCBjb3VudGluZyBhbmQgcmFuZG9tIG51bWJlcnMgYm91bmQgdG8gYSB1cHBlciBsaW1pdC5cXG4gNDkwOlxcdFxcbiA0OTE6XFx0Y29uZmlnIE5GVF9DVFxcbiA0OTI6XFx0XFx0ZGVwZW5kcyBvbiBORl9DT05OVFJBQ0tcXG4gNDkzOlxcdFxcdHRyaXN0YXRlIFxcXCJOZXRmaWx0ZXIgbmZfdGFibGVzIGNvbm50cmFjayBtb2R1bGVcXFwiXFxuIDQ5NDpcXHRcXHRoZWxwXFxuIDQ5NTpcXHRcXHQgIFRoaXMgb3B0aW9uIGFkZHMgdGhlIFxcXCJjdFxcXCIgZXhwcmVzc2lvbiB0aGF0IHlvdSBjYW4gdXNlIHRvIG1hdGNoXFxuIDQ5NjpcXHRcXHQgIGNvbm5lY3Rpb24gdHJhY2tpbmcgaW5mb3JtYXRpb24gc3VjaCBhcyB0aGUgZmxvdyBzdGF0ZS5cXG4gNDk3OlxcdFxcbiA0OTg6XFx0Y29uZmlnIE5GVF9FWFRIRFJfRENDUFxcbiA0OTk6XFx0XFx0Ym9vbCBcXFwiTmV0ZmlsdGVyIG5mX3RhYmxlcyBleHRoZHIgRENDUCBzdXBwb3J0IChERVBSRUNBVEVEKVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDM6Mzc6MzcuMjE4Mzg2MzVaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzEwNTc5NTcwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQ2hlY2tpbmcgdGhlIFBsYWNlbWVudCBvZiBORlRfQ1QqKlxuXG5Pa2F5LCBzbyBJJ20gcHJldHR5IHN1cmUgSSBzYXcgYE5GVF9DVGAgbmVzdGVkIHdpdGhpbiB0aGF0IGBpZiBORl9UQUJMRVNgIGNvbmRpdGlvbmFsLiBCdXQgbGV0J3Mgbm90IHJlbHkgb24gbWVtb3J5OyBJIG5lZWQgdG8gY29uZmlybSB0aGF0LiBHb3R0YSBxdWlja2x5IHZlcmlmeSB0aGF0IGBORlRfQ1RgIGlzIGFjdHVhbGx5IGRlZmluZWQgY29uZGl0aW9uYWxseSBiYXNlZCBvbiB0aGUgYE5GX1RBQkxFU2AgbWFjcm8uIERvdWJsZS1jaGVja2luZyBlbnN1cmVzIHRoYXQgdGhlIGNvbXBpbGUtdGltZSBkZXBlbmRlbmNpZXMgYXJlIHdoYXQgSSBleHBlY3QgdGhlbSB0byBiZSwgZXNwZWNpYWxseSBjb25zaWRlcmluZyB0aGF0IGBORl9UQUJMRVNgIGxpa2VseSBnb3Zlcm5zIHRoZSBpbmNsdXNpb24gb2YgdGhlIGVudGlyZSBOZXRmaWx0ZXIgaW5mcmFzdHJ1Y3R1cmUgY29tcG9uZW50cy4gVGhpcyBpcyBhIGNvcmUgcGFydCBvZiB0aGUgc3lzdGVtJ3MgbW9kdWxhcml0eSwgc28gSSBuZWVkIHRvIGJlIGV4YWN0LiBJdCdzIGEgcXVpY2sgc2FuaXR5IGNoZWNrIGJ1dCBlc3NlbnRpYWwgYmVmb3JlIEkgbW92ZSBmb3J3YXJkLCBlc3BlY2lhbGx5IGlmIGl0J3MgcmVsYXRlZCB0byBzb21lIHdvcmsgSSdtIGRvaW5nIGluIHRoYXQgYXJlYS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEyNjksIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDAzOjM3OjQwLjMyNDE4NTA1NloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDI1ODA3NTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5GX1RBQkxFU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnPTQ1Mz1lbmRpZiAjIE5GX0NPTk5UUkFDS1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00NTQtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjQ1NTpjb25maWcgTkZfVEFCTEVTXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ1Ni1cXHRzZWxlY3QgTkVURklMVEVSX05FVExJTktcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz00NzE9aWYgTkZfVEFCTEVTXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjQ3Mjpjb25maWcgTkZfVEFCTEVTX0lORVRcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDczLVxcdGRlcGVuZHMgb24gSVBWNlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ3OS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NDgwOmNvbmZpZyBORl9UQUJMRVNfTkVUREVWXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ4MS1cXHRib29sIFxcXCJOZXRmaWx0ZXIgbmZfdGFibGVzIG5ldGRldiB0YWJsZXMgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDM6Mzc6NDAuMzY2NzcxOTYzWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcyNDMyMjgyMjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS2VybmVsIE1vZHVsZSBBbmFseXNpczogSWRlbnRpZnlpbmcgRnV6emluZyBUYXJnZXRzKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGBORl9UQUJMRVNgIHN0dWZmLiBJdCdzIGNsZWFyIHRoYXQgdG8gZXZlbiBiZWdpbiwgSSBuZWVkIHRvIGhhdmUgdGhlIGBORl9UQUJMRVNgLCBgTkZfQ09OTlRSQUNLYCwgYW5kIGBORlRfQ1RgIGNvbmZpZ3MgZW5hYmxlZC4gTm93LCB0aGUgcmVhbCBxdWVzdGlvbiBpcywgd2hhdCBmdW5jdGlvbnMgc2hvdWxkIEkgYmUgdGFyZ2V0aW5nIHdpdGggZnV6emluZz9cblxuTGV0J3Mgc2VlLiBgbmZfY29ubnRyYWNrX2hlbHBlcl9mcmVlYCBqdW1wcyBvdXQgYmVjYXVzZSBpdCdzIGV4cG9ydGVkIGFuZCBjYWxsZWQgZnJvbSBib3RoIGBuZnRfY3RfZXhwZWN0X29ial9kZXN0cm95YCBhbmQgYG5mX2Nvbm50cmFja19oZWxwZXJfdW5yZWdpc3RlcmAuIFRoZW4sIGBuZnRfY3RfZXhwZWN0X29ial9pbml0YCBnZXRzIGNhbGxlZCBvbiBuZXcgZXhwZWN0YXRpb24gb2JqZWN0IGNyZWF0aW9uLCBhbmQgYG5mdF9jdF9leHBlY3Rfb2JqX2V2YWxgIGlzIGludm9rZWQgZHVyaW5nIGV4cGVjdGF0aW9uIGV2YWx1YXRpb24uIGBuZnRfY3RfZXhwZWN0X2hlbHBlcl9hbGxvY2AgcG9wcyB1cCBhcyBwYXJ0IG9mIGBuZnRfY3RfZXhwZWN0X29ial9pbml0YCwgYW5kIGZpbmFsbHksIGBjdF9leHBlY3RfaGVscGAgaXMgdHJpZ2dlcmVkIHdoZW4gYW4gZXhwZWN0YXRpb24gaXMgbWF0Y2hlZC5cblxuV2FpdCBhIHNlY29uZCwgYG5mdF9jdF9leHBlY3Rfb2JqX2luaXRgIGlzICpzdGF0aWMqPyBCdXQgaXQncyBhc3NpZ25lZCB0byBgbmZ0X2N0X2V4cGVjdF9vYmpfb3BzLmluaXRgLiBIbW0sIGNhbiBJIHVzZSBpdCBpbiBgRm9jdXNTeW1ib2xzYD8gWWVzLCBzeXprYWxsZXIgKmNhbiogZnV6eiBzdGF0aWMgZnVuY3Rpb25zIGFzIGxvbmcgYXMgdGhleSBhcmVuJ3QgaW5saW5lZCEgTGV0J3MgY2hlY2suIEFuZCBzaW5jZSBgbmZ0X2N0X2V4cGVjdF9vYmpfaW5pdGAgaXMgYSBkZWNlbnQgc2l6ZSwgaXQncyAqcHJvYmFibHkqIG5vdCBpbmxpbmVkLiBgbmZ0X2N0X2V4cGVjdF9vYmpfZXZhbGAgaXMgYWxzbyBzdWJzdGFudGlhbCwgc28gdGhhdCdzIGxpa2VseSBub3QgaW5saW5lZCBlaXRoZXIuIGBjdF9leHBlY3RfaGVscGAsIHRoYXQncyBhc3NpZ25lZCB2aWEgYHJjdV9hc3NpZ25fcG9pbnRlcmAgdG8gYGN0X2V4cGVjdF9oZWxwZXItXHUwMDNlaGVscGAsIHNvIGl0J3MgKmRlZmluaXRlbHkqIG5vdCBpbmxpbmVkLiBBbmQgb2YgY291cnNlLCBgbmZfY29ubnRyYWNrX2hlbHBlcl9mcmVlYCBpcyBleHBvcnRlZC5cblxuQWxyaWdodCwgcHV0dGluZyBpdCBhbGwgdG9nZXRoZXIsIGhlcmUncyB0aGUgbGlzdCBvZiBmdW5jdGlvbnMgdG8gdmVyaWZ5IGFuZCB0aGVuIGZvY3VzIG9uOlxuXG4qICAgYG5mdF9jdF9leHBlY3Rfb2JqX2luaXRgXG4qICAgYG5mdF9jdF9leHBlY3Rfb2JqX2V2YWxgXG4qICAgYG5mdF9jdF9leHBlY3Rfb2JqX2Rlc3Ryb3lgXG4qICAgYG5mdF9jdF9leHBlY3RfaGVscGVyX2FsbG9jYFxuKiAgIGBjdF9leHBlY3RfaGVscGBcbiogICBgbmZfY29ubnRyYWNrX2hlbHBlcl9mcmVlYFxuXG5Ob3csIGxldCBtZSBnbyBhaGVhZCBhbmQgY29uZmlybSB0aGVzZSBmdW5jdGlvbnMgZXhpc3QgaW4gdGhlIGtlcm5lbCBhbmQgYXJlbid0IGJlaW5nIG9wdGltaXplZCBhd2F5LiBUaW1lIHRvIGdldCB0byB3b3JrIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTcwMiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwMzozNzo0Ny42MTAwMDI5MTFaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5MjU2Mjg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mdF9jdF9leHBlY3Rfb2JqX2luaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9uZnRfY3QuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mdF9jdC5jPTEyNzA9c3RhdGljIGludCBuZnRfY3RfZXhwZWN0X2hlbHBlcl9hbGxvYyhzdHJ1Y3QgbmZ0X2N0X2V4cGVjdF9vYmogKnByaXYpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jLTEyOTAtXFxubmV0L25ldGZpbHRlci9uZnRfY3QuYzoxMjkxOnN0YXRpYyBpbnQgbmZ0X2N0X2V4cGVjdF9vYmpfaW5pdChjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMtMTI5Mi1cXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCB0YltdLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfY3QuYz0xNDI2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZ0X29iamVjdF9vcHMgbmZ0X2N0X2V4cGVjdF9vYmpfb3BzID0ge1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfY3QuYy0xNDI5LVxcdC5ldmFsXFx0XFx0PSBuZnRfY3RfZXhwZWN0X29ial9ldmFsLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmM6MTQzMDpcXHQuaW5pdFxcdFxcdD0gbmZ0X2N0X2V4cGVjdF9vYmpfaW5pdCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jLTE0MzEtXFx0LmRlc3Ryb3lcXHQ9IG5mdF9jdF9leHBlY3Rfb2JqX2Rlc3Ryb3ksXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDAzOjM3OjQ3LjY1OTI2MzIwOFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNDkyNjk5MTU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aG9zZSB0aG91Z2h0cyBhcyBhIGZpcnN0LXBlcnNvbiBleHBlcnQgcGVyc3BlY3RpdmU6XG5cbioqQ29ubmVjdGlvbiBUcmFja2luZyBDb25jZXJucyoqXG5cblllcywgY29ubmVjdGlvbiB0cmFja2luZywgaXQncyBkZWZpbml0ZWx5IHRoZXJlLCB0aGUgZm91bmRhdGlvbiBvZiBhIGxvdCBvZiBuZXR3b3JrIHNlY3VyaXR5IGFuZCB0cmFmZmljIG1hbmFnZW1lbnQuIEJ1dCBub3cgdGhhdCBJIGFtIHRoaW5raW5nIGFib3V0IGNvbm5lY3Rpb24gdHJhY2tpbmcsIHdoYXQgYWJvdXQgYG5mX2Nvbm50cmFja19oZWxwZXJfZnJlZWA/IEl0IGFsd2F5cyBzZWVtcyB0byBiZSBhIHNvdXJjZSBvZiBwb3RlbnRpYWwgaXNzdWVzLiBEb2VzIHRoaXMgaGVscGVyIG5lZWQgaW1wcm92ZW1lbnQ/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyOTg3LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDM6Mzc6NTAuMTUxOTY1ODAyWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDk5MjM4NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZl9jb25udHJhY2tfaGVscGVyX2ZyZWVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmM9NDQ0PXN0YXRpYyBib29sIGV4cGVjdF9pdGVyX21lKHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHAsIHZvaWQgKmRhdGEpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy00NTgtXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmM6NDU5OnZvaWQgbmZfY29ubnRyYWNrX2hlbHBlcl9mcmVlKHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICptZSlcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy00NjAte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMtNDczLX1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYzo0NzQ6RVhQT1JUX1NZTUJPTF9HUEwobmZfY29ubnRyYWNrX2hlbHBlcl9mcmVlKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy00NzUtXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmM9NDc2PXZvaWQgbmZfY29ubnRyYWNrX2hlbHBlcl91bnJlZ2lzdGVyKHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICptZSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jLTQ4Mi1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYzo0ODM6XFx0bmZfY29ubnRyYWNrX2hlbHBlcl9mcmVlKG1lKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy00ODQtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwMzozNzo1MC4xOTY5NjQxOFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNTUxMjcxOTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGNyYWZ0ZWQgd2l0aCB0aGUgdW5kZXJzdGFuZGluZyB0aGF0IEknbSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6XG5cbioqTmF2aWdhdGluZyB0aGUgS25vd24gYW5kIHRoZSBQb3RlbnRpYWwqKlxuXG5ZZXMsIHRoaXMgdGhpbmcsIHRoaXMgY29uY2VwdCwgdGhpcyBzcGVjaWZpYyBpc3N1ZS4uLiBpdCdzIHJlYWwuIEkgYWNrbm93bGVkZ2UgaXRzIHByZXNlbmNlLiBXZSdyZSBkZWFsaW5nIHdpdGggc29tZXRoaW5nIHRhbmdpYmxlIGhlcmUuXG5cbk5vdywgYSBjcml0aWNhbCBwb2ludCBmbGFzaGVzIGluIG15IG1pbmQ6IHdoYXQgYWJvdXQgYGN0X2V4cGVjdF9oZWxwYD8gSXQncyBhIGtleSBmdW5jdGlvbiBvciBwYXJhbWV0ZXIgcmVsYXRlZCB0byB0aGlzLiBJdCdzIG9mdGVuIG92ZXJsb29rZWQsIGJ1dCBpdCdzICpsaWtlbHkqIGhpZ2hseSByZWxldmFudCB0byB3aGF0ZXZlciBzaXR1YXRpb24gd2UncmUgY3VycmVudGx5IHByb2Nlc3NpbmcuIFdlJ2xsIGhhdmUgdG8gaW52ZXN0aWdhdGUgdGhhdCBmdXJ0aGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzQ3NiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDAzOjM3OjUyLjc0ODIzOTA5WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODkwMTQzNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjdF9leHBlY3RfaGVscFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL25mdF9jdC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmM9MTIzMT1zdHJ1Y3QgbmZ0X2N0X2V4cGVjdF9kYXRhIHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMtMTIzNS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jOjEyMzY6c3RhdGljIGludCBjdF9leHBlY3RfaGVscChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgcHJvdG9mZixcXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jLTEyMzctXFx0XFx0XFx0ICBzdHJ1Y3QgbmZfY29ubiAqY3QsIGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfY3QuYy0xMjY5LVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmM6MTI3MDpzdGF0aWMgaW50IG5mdF9jdF9leHBlY3RfaGVscGVyX2FsbG9jKHN0cnVjdCBuZnRfY3RfZXhwZWN0X29iaiAqcHJpdilcXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jLTEyNzEte1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmM6MTI3MjpcXHRzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqY3RfZXhwZWN0X2hlbHBlcjtcXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jLTEyNzMtXFxubmV0L25ldGZpbHRlci9uZnRfY3QuYzoxMjc0OlxcdGN0X2V4cGVjdF9oZWxwZXIgPSBremFsbG9jX29iaihzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlcik7XFxubmV0L25ldGZpbHRlci9uZnRfY3QuYzoxMjc1OlxcdGlmICghY3RfZXhwZWN0X2hlbHBlcilcXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jLTEyNzYtXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxubmV0L25ldGZpbHRlci9uZnRfY3QuYy0xMjc3LVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmM6MTI3ODpcXHRzbnByaW50ZihjdF9leHBlY3RfaGVscGVyLVxcdTAwM2VuYW1lLCBzaXplb2YoY3RfZXhwZWN0X2hlbHBlci1cXHUwMDNlbmFtZSksIFxcXCIlc1xcXCIsXFxubmV0L25ldGZpbHRlci9uZnRfY3QuYy0xMjc5LVxcdFxcdCBcXFwibmZ0X2N0X2V4cGVjdFxcXCIpO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmM6MTI4MDpcXHRjdF9leHBlY3RfaGVscGVyLVxcdTAwM2VtZSA9IFRISVNfTU9EVUxFO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmM6MTI4MTpcXHRjdF9leHBlY3RfaGVscGVyLVxcdTAwM2VleHBlY3RfcG9saWN5W05GX0NUX0VYUEVDVF9DTEFTU19ERUZBVUxUXS5tYXhfZXhwZWN0ZWQgPSBwcml2LVxcdTAwM2VzaXplO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmM6MTI4MjpcXHRyY3VfYXNzaWduX3BvaW50ZXIoY3RfZXhwZWN0X2hlbHBlci1cXHUwMDNlaGVscCwgY3RfZXhwZWN0X2hlbHApO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmM6MTI4MzpcXHRyZWZjb3VudF9zZXQoXFx1MDAyNmN0X2V4cGVjdF9oZWxwZXItXFx1MDAzZWN0X3JlZmNudCwgMSk7XFxubmV0L25ldGZpbHRlci9uZnRfY3QuYy0xMjg0LVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMtMTI4NS1cXHQvKiBObyBuZWVkIHRvIHJlZ2lzdGVyIHRoaXMgaGVscGVyLCB0aGlzIGlzIGludGVybmFsLiAqL1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmM6MTI4NjpcXHRwcml2LVxcdTAwM2VoZWxwZXIgPSBjdF9leHBlY3RfaGVscGVyO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMtMTI4Ny1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmM9MTI5MT1zdGF0aWMgaW50IG5mdF9jdF9leHBlY3Rfb2JqX2luaXQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMtMTM0My1cXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jOjEzNDQ6XFx0ZXJyID0gbmZ0X2N0X2V4cGVjdF9oZWxwZXJfYWxsb2MocHJpdik7XFxubmV0L25ldGZpbHRlci9uZnRfY3QuYy0xMzQ1LVxcdGlmIChlcnIgXFx1MDAzYyAwKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDAzOjM3OjUyLjc5NzE0NzEzN1oiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTUyMDA5NjczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkNvbmZpZ3VyYXRpb24gRGVwZW5kZW5jeSBEZWVwIERpdmUqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBtYWtpbmcgc3VyZSB3ZSd2ZSBnb3QgYWxsIHRoZSBwaWVjZXMgaW4gcGxhY2UsIHJpZ2h0PyBFdmVyeXRoaW5nIGhlcmUgZXhpc3RzIOKAkyB0aGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBMZXQncyBtYWtlIHN1cmUgb3VyIGJhc2VzIGFyZSBjb3ZlcmVkLlxuXG5BbHJpZ2h0LCB0aGUgY29yZSBjb25maWd1cmF0aW9ucyB3ZSdyZSBpbnRlcmVzdGVkIGluIGFyZTogYE5GX1RBQkxFU2AsIGBORl9DT05OVFJBQ0tgLCBhbmQgYE5GVF9DVGAuIExldCdzIGxheSBvdXQgdGhlIGRlcGVuZGVuY2llcy4gSXQncyB0aW1lIHRvIG1hcCB0aGluZ3Mgb3V0IHByb3Blcmx5LlxuXG5Ob3csIGxldCdzIHRyYWNlIHRoZSBkZXBlbmRlbmNpZXMuIGBORl9UQUJMRVNgIGl0c2VsZiBkZXBlbmRzIG9uIGJvdGggYE5FVEZJTFRFUmAgYW5kIGBORVRGSUxURVJfTkVUTElOS2AuIFRoZW4sIGBORl9DT05OVFJBQ0tgIGhhbmdzIG9mZiBvZiBgTkVURklMVEVSYCDigJMgbm8gc3VycHJpc2VzIHRoZXJlLiBBbmQsIG9mIGNvdXJzZSwgYE5GVF9DVGAgcmVsaWVzIG9uIGBORl9DT05OVFJBQ0tgLiBTbywgYE5FVEZJTFRFUmAgaXMgZXNzZW50aWFsIGhlcmUgZm9yIGFsbCB0aGlzIHRvIHdvcmsuIEl0IHNlZW1zIGxpa2UgaXQgc2hvdWxkIGJlIGVuYWJsZWQgYnkgZGVmYXVsdCBpbiBtb3N0IGtlcm5lbHMsIGJ1dCBsZXQncyBlbmFibGUgaXQganVzdCB0byBiZSBzdXJlIHdlIGFyZSBzYWZlLCBhbmQgbm90IGdldCBhbnkgc3VycHJpc2VzLlxuXG5UaW1lIHRvIGhlYWQgaW50byBgbmV0L0tjb25maWdgIGFuZCBkb3VibGUtY2hlY2sgYE5FVEZJTFRFUmAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NDUyLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDAzOjM3OjU2Ljc0OTE2MDk2MVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDI3NTc3MDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVEZJTFRFUlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvS2NvbmZpZz0xNTQ9Y29uZmlnIE5FVFdPUktfUEhZX1RJTUVTVEFNUElOR1xcbi0tXFxubmV0L0tjb25maWctMTY0LVxcbm5ldC9LY29uZmlnOjE2NTptZW51Y29uZmlnIE5FVEZJTFRFUlxcbm5ldC9LY29uZmlnLTE2Ni1cXHRib29sIFxcXCJOZXR3b3JrIHBhY2tldCBmaWx0ZXJpbmcgZnJhbWV3b3JrIChOZXRmaWx0ZXIpXFxcIlxcbi0tXFxubmV0L0tjb25maWc9MjE4PWlmIE5FVEZJTFRFUlxcbm5ldC9LY29uZmlnLTIxOS1cXG5uZXQvS2NvbmZpZzoyMjA6Y29uZmlnIE5FVEZJTFRFUl9BRFZBTkNFRFxcbm5ldC9LY29uZmlnLTIyMS1cXHRib29sIFxcXCJBZHZhbmNlZCBuZXRmaWx0ZXIgY29uZmlndXJhdGlvblxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDM6Mzc6NTYuNzkxOTI0ODU4WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwMjk2NDA2MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqS2VybmVsIE1vZHVsZSBDb25maWd1cmF0aW9uIENvbnNpZGVyYXRpb25zKipcblxuQWxyaWdodCwgc28gdGhlIGFyY2hpdGVjdHVyZSBJJ20gd29ya2luZyB3aXRoIGlzIGRlZmluaXRlbHkgZ29pbmcgdG8gcmVxdWlyZSB0aGUgdXNlIG9mIGBORVRGSUxURVJgLiBOb3csIGJlZm9yZSBJIHN0YXJ0IHdyaXRpbmcgY29kZSBvciBkaWdnaW5nIGludG8gdGhlIHNwZWNpZmljcyBvZiBteSBpbXBsZW1lbnRhdGlvbiwgSSBuZWVkIHRvIHZlcmlmeSBpdHMgYXZhaWxhYmlsaXR5IGFuZCBjb25maWd1cmF0aW9uIHdpdGhpbiB0aGUga2VybmVsLiBJIHNob3VsZCB0YWtlIGEgbG9vayBhdCB0aGUgYE5FVEZJTFRFUl9ORVRMSU5LYCBvcHRpb24uIExldCBtZSBjaGVjayBpdHMgZGVwZW5kZW5jaWVzIGFuZCBjb25maWd1cmF0aW9uIG9wdGlvbnM7IEknbGwgc3RhcnQgd2l0aCBgbmV0L25ldGZpbHRlci9LY29uZmlnYCB0byBzZWUgaG93IGl0J3MgZGVmaW5lZCBhbmQgaG93IGl0IHJlbGF0ZXMgdG8gb3RoZXIgY3J1Y2lhbCBhc3BlY3RzIG9mIHRoZSBuZXR3b3JraW5nIHN1YnN5c3RlbS4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGZvdW5kYXRpb24gZm9yIGFueSByZWxhdGVkIGRldmVsb3BtZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTAxMCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDAzOjM3OjU5LjgyMTU2ODA3OVoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDMzNjE0NzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWc9MjE9Y29uZmlnIE5FVEZJTFRFUl9TS0lQX0VHUkVTU1xcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTIzLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyNDpjb25maWcgTkVURklMVEVSX05FVExJTktcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjUtXFx0Ym9vbFxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnPTMzPWNvbmZpZyBORVRGSUxURVJfQlBGX0xJTktcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zNS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MzY6Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX0hPT0tcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzctXFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBiYXNlIGhvb2sgZHVtcCBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ1LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo0Njpjb25maWcgTkVURklMVEVSX05FVExJTktfQUNDVFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00Ny1cXHR0cmlzdGF0ZSBcXFwiTmV0ZmlsdGVyIE5GQUNDVCBvdmVyIE5GTkVUTElOSyBpbnRlcmZhY2VcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNTMtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjU0OmNvbmZpZyBORVRGSUxURVJfTkVUTElOS19RVUVVRVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy01NS1cXHR0cmlzdGF0ZSBcXFwiTmV0ZmlsdGVyIE5GUVVFVUUgb3ZlciBORk5FVExJTksgaW50ZXJmYWNlXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTYxLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo2Mjpjb25maWcgTkVURklMVEVSX05FVExJTktfTE9HXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTYzLVxcdHRyaXN0YXRlIFxcXCJOZXRmaWx0ZXIgTE9HIG92ZXIgTkZORVRMSU5LIGludGVyZmFjZVxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03My1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NzQ6Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX09TRlxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03NS1cXHR0cmlzdGF0ZSBcXFwiTmV0ZmlsdGVyIE9TRiBvdmVyIE5GTkVUTElOSyBpbnRlcmZhY2VcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9Mzg1PWNvbmZpZyBORl9DVF9ORVRMSU5LX0hFTFBFUlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTM5Ny1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6Mzk4OmNvbmZpZyBORVRGSUxURVJfTkVUTElOS19HTFVFX0NUXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTM5OS1cXHRib29sIFxcXCJORlFVRVVFIGFuZCBORkxPRyBpbnRlZ3JhdGlvbiB3aXRoIENvbm5lY3Rpb24gVHJhY2tpbmdcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDAzOjM3OjU5Ljg2NDkzNDgwNloiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NDMwMDcyNjkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHRoZSBDb25udHJhY2sgRXhwZWN0YXRpb24gUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCB0aGUgZGVwZW5kZW5jeSB0cmVlLiBJIHNlZSB0aGF0IGBORl9UQUJMRVNgIGF1dG9tYXRpY2FsbHkgc2VsZWN0cyBgTkVURklMVEVSX05FVExJTktgLCB3aGljaCBpcyBleHBlY3RlZC4gVGhlbiwgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayBgTkZfQ09OTlRSQUNLYC4gR29vZCwgaXQncyBhIHRyaXN0YXRlLCBzbyB0aGF0IHNpbXBsaWZpZXMgdGhpbmdzLiBObyBvdGhlciBkaXJlY3QgZGVwZW5kZW5jaWVzLlxuXG5TbyB0aGUgY29yZSBjb25maWdzIHJlcXVpcmVkIGFyZSBgTkVURklMVEVSYCwgYE5GX0NPTk5UUkFDS2AsIGBORl9UQUJMRVNgLCBhbmQgYE5GVF9DVGAuIExldCBtZSBxdWlja2x5IGNvbmZpcm0gdGhlcmUgYXJlbid0IGFueSBoaWRkZW4gZGVwZW5kZW5jaWVzLiBgTkZUX0NUYCBkZXBlbmRzIG9uIGBORl9DT05OVFJBQ0tgLCBhbmQgYm90aCBgTkZfVEFCTEVTYCBhbmQgYE5GX0NPTk5UUkFDS2AgZGVwZW5kIG9uIGBORVRGSUxURVJgLiBUaGF0IGNvbmZpcm1zIHRoZSBjb25maWcgbGlzdC5cblxuTm93LCBsZXQncyBpZGVudGlmeSB0aGUga2V5IGZ1bmN0aW9ucyB0aGlzIHBhdGNoIHRvdWNoZXMuIFRoZSBvbmVzIEknbSBzZWVpbmcgYXJlOiBgbmZ0X2N0X2V4cGVjdF9vYmpfaW5pdGAsIGBuZnRfY3RfZXhwZWN0X29ial9ldmFsYCwgYG5mdF9jdF9leHBlY3Rfb2JqX2Rlc3Ryb3lgLCBgbmZ0X2N0X2V4cGVjdF9oZWxwZXJfYWxsb2NgLCBgY3RfZXhwZWN0X2hlbHBgLCBhbmQgYG5mX2Nvbm50cmFja19oZWxwZXJfZnJlZWAuIE5vdGhpbmcgZWxzZSBzaWduaWZpY2FudCBzdGlja3Mgb3V0LCBgbmZ0X2N0X2V4cGVjdF9vYmpfdHlwZWAgaXMgYSBzdHJ1Y3QgZGVmaW5pdGlvbiwgbm90IGEgZnVuY3Rpb24gdG8gZm9jdXMgb24uXG5cblJldmlld2luZyB0aGUgcGF0Y2ggY29uZmlybXMgdGhlc2UgZnVuY3Rpb25zIGFyZSBpbmRlZWQgdGhlIGNvcmUgb2YgdGhlIGNoYW5nZS4gYG5mX2Nvbm50cmFja19oZWxwZXJfZnJlZWAgaXMgbmV3bHkgYWRkZWQsIGFuZCB0aGUgZXhwZWN0YXRpb24gb2JqZWN0IGluaXRpYWxpemF0aW9uLCBldmFsdWF0aW9uIGFuZCBkZXN0cnVjdGlvbiBmdW5jdGlvbnMgYXJlIG1vZGlmaWVkLCBhbG9uZyB3aXRoIHRoZSBhbGxvY2F0aW9uIGZ1bmN0aW9uLiBJbXBvcnRhbnRseSwgdGhlc2UgY2hhbmdlcyBpbnRyb2R1Y2UgZHluYW1pYyBhbGxvY2F0aW9uIGFuZCBkZWFsbG9jYXRpb24gb2YgY29ubnRyYWNrIGhlbHBlcnMuIFRoaXMgaXMgYWxsIGV4cG9zZWQgdGhyb3VnaCBuZXRsaW5rIChuZnRhYmxlcykgYW5kIHRoZXJlZm9yZSBhY2Nlc3NpYmxlIGZyb20gdXNlcnNwYWNlLlxuXG5HaXZlbiB0aGlzLCB0aGUgcGF0Y2ggaW50cm9kdWNlcyBzaWduaWZpY2FudCBjaGFuZ2VzIHRvIHRoZSBjb25udHJhY2sgZXhwZWN0YXRpb24gbG9naWMgYW5kIGludm9sdmVzIGR5bmFtaWMgbWVtb3J5IG1hbmFnZW1lbnQgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZS4gSXQncyAqZGVmaW5pdGVseSogd29ydGggZnV6emluZy4gSSdsbCBmb2N1cyBmdXp6aW5nIGVmZm9ydHMgb24gdGhlIGZ1bmN0aW9ucyBJIGlkZW50aWZpZWQsIGFuZCBjb25maWd1cmUgdGhlIHRlc3QgZW52aXJvbm1lbnQgdG8gZW5hYmxlIGBORVRGSUxURVJgLCBgTkZfQ09OTlRSQUNLYCwgYE5GX1RBQkxFU2AsIGFuZCBgTkZUX0NUYC4gVGhlIHJlYXNvbmluZyBpcyB0aGF0IHRoZXNlIGZ1bmN0aW9ucywgcGFydGljdWxhcmx5IHRoZSBuZXcgbWVtb3J5IG1hbmFnZW1lbnQgaW4gcmVsYXRpb24gdG8gY29ubnRyYWNrIGhlbHBlcnMsIHJlcHJlc2VudCBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZyBiZWNhdXNlIHRoZXkgYXJlIGV4cG9zZWQgdmlhIG5ldGxpbmsgZnJvbSB1c2Vyc3BhY2UsIHdoaWNoIG9wZW5zIHVwIGF0dGFjayBzdXJmYWNlLlxuXG5UaGVyZWZvcmU6XG5cbldvcnRoRnV6emluZzogYHRydWVgXG5cbkZvY3VzU3ltYm9sczpcbi0gYG5mdF9jdF9leHBlY3Rfb2JqX2luaXRgXG4tIGBuZnRfY3RfZXhwZWN0X29ial9ldmFsYFxuLSBgbmZ0X2N0X2V4cGVjdF9vYmpfZGVzdHJveWBcbi0gYG5mdF9jdF9leHBlY3RfaGVscGVyX2FsbG9jYFxuLSBgY3RfZXhwZWN0X2hlbHBgXG4tIGBuZl9jb25udHJhY2tfaGVscGVyX2ZyZWVgXG5cbkVuYWJsZUNvbmZpZ3M6XG4tIGBORVRGSUxURVJgXG4tIGBORl9DT05OVFJBQ0tgXG4tIGBORl9UQUJMRVNgXG4tIGBORlRfQ1RgXG5cblJlYXNvbmluZzogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIG5ldGZpbHRlciBuZnRhYmxlcyBjb25udHJhY2sgZXhwZWN0YXRpb24gbG9naWMsIHNwZWNpZmljYWxseSBhZGRpbmcgZHluYW1pYyBhbGxvY2F0aW9uIGFuZCBmcmVlaW5nIG9mIGNvbm50cmFjayBoZWxwZXJzIChgbmZfY29ubnRyYWNrX2hlbHBlcl9mcmVlYCwgYG5mdF9jdF9leHBlY3RfaGVscGVyX2FsbG9jYCkuIFRoZXNlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0bGluayB3aGVuIGNyZWF0aW5nIGFuZCBldmFsdWF0aW5nIG5mdGFibGVzIGV4cGVjdGF0aW9uIG9iamVjdHMsIG1ha2luZyB0aGVtIGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy5cIlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTcxOCwiT3V0cHV0VG9rZW5zIjoxOTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDM6Mzg6MDkuMjk1MDExMDQ3WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODI0ODA5ODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVEZJTFRFUlwiLFxuICAgIFwiTkZfQ09OTlRSQUNLXCIsXG4gICAgXCJORl9UQUJMRVNcIixcbiAgICBcIk5GVF9DVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5mdF9jdF9leHBlY3Rfb2JqX2luaXRcIixcbiAgICBcIm5mdF9jdF9leHBlY3Rfb2JqX2V2YWxcIixcbiAgICBcIm5mdF9jdF9leHBlY3Rfb2JqX2Rlc3Ryb3lcIixcbiAgICBcIm5mdF9jdF9leHBlY3RfaGVscGVyX2FsbG9jXCIsXG4gICAgXCJjdF9leHBlY3RfaGVscFwiLFxuICAgIFwibmZfY29ubnRyYWNrX2hlbHBlcl9mcmVlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIG5ldGZpbHRlciBuZnRhYmxlcyBjb25udHJhY2sgZXhwZWN0YXRpb24gbG9naWMsIHNwZWNpZmljYWxseSBhZGRpbmcgZHluYW1pYyBhbGxvY2F0aW9uIGFuZCBmcmVlaW5nIG9mIGNvbm50cmFjayBoZWxwZXJzIChuZl9jb25udHJhY2tfaGVscGVyX2ZyZWUsIG5mdF9jdF9leHBlY3RfaGVscGVyX2FsbG9jKS4gVGhlc2UgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRsaW5rIHdoZW4gY3JlYXRpbmcgYW5kIGV2YWx1YXRpbmcgbmZ0YWJsZXMgZXhwZWN0YXRpb24gb2JqZWN0cywgbWFraW5nIHRoZW0gaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVEZJTFRFUlwiLFxuICAgIFwiTkZfQ09OTlRSQUNLXCIsXG4gICAgXCJORl9UQUJMRVNcIixcbiAgICBcIk5GVF9DVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5mdF9jdF9leHBlY3Rfb2JqX2luaXRcIixcbiAgICBcIm5mdF9jdF9leHBlY3Rfb2JqX2V2YWxcIixcbiAgICBcIm5mdF9jdF9leHBlY3Rfb2JqX2Rlc3Ryb3lcIixcbiAgICBcIm5mdF9jdF9leHBlY3RfaGVscGVyX2FsbG9jXCIsXG4gICAgXCJjdF9leHBlY3RfaGVscFwiLFxuICAgIFwibmZfY29ubnRyYWNrX2hlbHBlcl9mcmVlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIG5ldGZpbHRlciBuZnRhYmxlcyBjb25udHJhY2sgZXhwZWN0YXRpb24gbG9naWMsIHNwZWNpZmljYWxseSBhZGRpbmcgZHluYW1pYyBhbGxvY2F0aW9uIGFuZCBmcmVlaW5nIG9mIGNvbm50cmFjayBoZWxwZXJzIChuZl9jb25udHJhY2tfaGVscGVyX2ZyZWUsIG5mdF9jdF9leHBlY3RfaGVscGVyX2FsbG9jKS4gVGhlc2UgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRsaW5rIHdoZW4gY3JlYXRpbmcgYW5kIGV2YWx1YXRpbmcgbmZ0YWJsZXMgZXhwZWN0YXRpb24gb2JqZWN0cywgbWFraW5nIHRoZW0gaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowblqnm[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-01 03:14:49 +0000 UTC FinishedAt: 2026-08-01 03:38:10 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "2195424c3da2ef1829a63b807e3a900a90e57d85", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETFILTER", "NF_CONNTRACK", "NF_TABLES", "NFT_CT" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "2195424c3da2ef1829a63b807e3a900a90e57d85", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NETFILTER", "NF_CONNTRACK", "NF_TABLES", "NFT_CT" ], "series_id": "23fc4e6d-db22-4fa6-a013-f8cec46dbba0" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "nft_ct_expect_obj_init", "nft_ct_expect_obj_eval", "nft_ct_expect_obj_destroy", "nft_ct_expect_helper_alloc", "ct_expect_help", "nf_conntrack_helper_free" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDAzOjM3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVEZJTFRFUiYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0smIzM0OywKICAgICYjMzQ7TkZfVEFCTEVTJiMzNDssCiAgICAmIzM0O05GVF9DVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25mdF9jdF9leHBlY3Rfb2JqX2luaXQmIzM0OywKICAgICYjMzQ7bmZ0X2N0X2V4cGVjdF9vYmpfZXZhbCYjMzQ7LAogICAgJiMzNDtuZnRfY3RfZXhwZWN0X29ial9kZXN0cm95JiMzNDssCiAgICAmIzM0O25mdF9jdF9leHBlY3RfaGVscGVyX2FsbG9jJiMzNDssCiAgICAmIzM0O2N0X2V4cGVjdF9oZWxwJiMzNDssCiAgICAmIzM0O25mX2Nvbm50cmFja19oZWxwZXJfZnJlZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgbmV0ZmlsdGVyIG5mdGFibGVzIGNvbm50cmFjayBleHBlY3RhdGlvbiBsb2dpYywgc3BlY2lmaWNhbGx5IGFkZGluZyBkeW5hbWljIGFsbG9jYXRpb24gYW5kIGZyZWVpbmcgb2YgY29ubnRyYWNrIGhlbHBlcnMgKG5mX2Nvbm50cmFja19oZWxwZXJfZnJlZSwgbmZ0X2N0X2V4cGVjdF9oZWxwZXJfYWxsb2MpLiBUaGVzZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIG5ldGxpbmsgd2hlbiBjcmVhdGluZyBhbmQgZXZhbHVhdGluZyBuZnRhYmxlcyBleHBlY3RhdGlvbiBvYmplY3RzLCBtYWtpbmcgdGhlbSBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDM6Mzc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBiZTE3NDJkZGM1NGE3OWNjM2I3MTIwZDAyNTZiNmFhZGZhMzAwZjRkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMSAwMzozNzowNCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5oIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuaFxuaW5kZXggYzc2MWNkODE1OGIyNS4uNDQyMDg0NmU0MWYyMyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmhcbkBAIC0xMTQsNiAmIzQzOzExNCw4IEBAIGludCBuZl9jb25udHJhY2tfaGVscGVyc19yZWdpc3RlcihzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqLCB1bnNpZ25lZCBpbnQsXG4gdm9pZCBuZl9jb25udHJhY2tfaGVscGVyc191bnJlZ2lzdGVyKHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICoqLFxuIFx0XHRcdFx0ICAgICB1bnNpZ25lZCBpbnQpO1xuIFxuJiM0Mzt2b2lkIG5mX2Nvbm50cmFja19oZWxwZXJfZnJlZShzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqbWUpO1xuJiM0MztcbiAjZGVmaW5lIG5mX2Nvbm50cmFja19oZWxwZXJfZGVwcmVjYXRlZChuYW1lKSBcXFxuIFx0cHJfd2FybihcJiMzNDtUaGUgJXMgY29ubnRyYWNrIGhlbHBlciBpcyBzY2hlZHVsZWQgZm9yIHJlbW92YWwuXFxuXCYjMzQ7XHRcXFxuIFx0XHRcJiMzNDtQbGVhc2UgY29udGFjdCB0aGUgbmV0ZmlsdGVyLWRldmVsIG1haWxpbmcgbGlzdCBpZiB5b3Ugc3RpbGwgbmVlZCB0aGlzLlxcblwmIzM0OywgbmFtZSlcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jXG5pbmRleCA1MDA1MDliMTc2NjNlLi4xMTk3ZTg3OTM0OTRiIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jXG5AQCAtNDU2LDEzICYjNDM7NDU2LDggQEAgc3RhdGljIGJvb2wgZXhwZWN0X2l0ZXJfbWUoc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmV4cCwgdm9pZCAqZGF0YSlcbiBcdHJldHVybiB0aGlzID09IG1lO1xuIH1cbiBcbi12b2lkIG5mX2Nvbm50cmFja19oZWxwZXJfdW5yZWdpc3RlcihzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqbWUpXG4mIzQzO3ZvaWQgbmZfY29ubnRyYWNrX2hlbHBlcl9mcmVlKHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICptZSlcbiB7XG4tXHRtdXRleF9sb2NrKFx1MDAyNm5mX2N0X2hlbHBlcl9tdXRleCk7XG4tXHRobGlzdF9kZWxfcmN1KFx1MDAyNm1lLVx1MDAzZWhub2RlKTtcbi1cdG5mX2N0X2hlbHBlcl9jb3VudC0tO1xuLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNm5mX2N0X2hlbHBlcl9tdXRleCk7XG4tXG4gXHQvKiBUaGlzIGhlbHBlciBpcyBnb2luZyBhd2F5LCBkaXNhYmxlIGl0LiAqL1xuIFx0cmN1X2Fzc2lnbl9wb2ludGVyKG1lLVx1MDAzZWhlbHAsIE5VTEwpO1xuIFxuQEAgLTQ3Niw2ICYjNDM7NDcxLDE3IEBAIHZvaWQgbmZfY29ubnRyYWNrX2hlbHBlcl91bnJlZ2lzdGVyKHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICptZSlcbiBcdGlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoXHUwMDI2bWUtXHUwMDNlY3RfcmVmY250KSlcbiBcdFx0a2ZyZWVfcmN1KG1lLCByY3UpO1xuIH1cbiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwobmZfY29ubnRyYWNrX2hlbHBlcl9mcmVlKTtcbiYjNDM7XG4mIzQzO3ZvaWQgbmZfY29ubnRyYWNrX2hlbHBlcl91bnJlZ2lzdGVyKHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICptZSlcbiYjNDM7e1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2bmZfY3RfaGVscGVyX211dGV4KTtcbiYjNDM7XHRobGlzdF9kZWxfcmN1KFx1MDAyNm1lLVx1MDAzZWhub2RlKTtcbiYjNDM7XHRuZl9jdF9oZWxwZXJfY291bnQtLTtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2bmZfY3RfaGVscGVyX211dGV4KTtcbiYjNDM7XG4mIzQzO1x0bmZfY29ubnRyYWNrX2hlbHBlcl9mcmVlKG1lKTtcbiYjNDM7fVxuIEVYUE9SVF9TWU1CT0xfR1BMKG5mX2Nvbm50cmFja19oZWxwZXJfdW5yZWdpc3Rlcik7XG4gXG4gdm9pZCBuZl9jdF9oZWxwZXJfaW5pdChzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqaGVscGVyLFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMgYi9uZXQvbmV0ZmlsdGVyL25mdF9jdC5jXG5pbmRleCAwM2E4OGM3N2UwZjAyLi5mZjdjMjc1NzljZmIxIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZnRfY3QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZnRfY3QuY1xuQEAgLTEyMTMsNiAmIzQzOzEyMTMsOCBAQCBzdHJ1Y3QgbmZ0X2N0X2V4cGVjdF9vYmoge1xuIFx0dThcdFx0bDRwcm90bztcbiBcdHU4XHRcdHNpemU7XG4gXHR1MzJcdFx0dGltZW91dDtcbiYjNDM7XG4mIzQzO1x0c3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKmhlbHBlcjtcbiB9O1xuIFxuIHN0YXRpYyBpbnQgbmZ0X2N0X2V4cGVjdF90aW1lb3V0X2dldChjb25zdCBzdHJ1Y3QgbmxhdHRyICphdHRyLCB1MzIgKnZhbClcbkBAIC0xMjI2LDYgJiM0MzsxMjI4LDY2IEBAIHN0YXRpYyBpbnQgbmZ0X2N0X2V4cGVjdF90aW1lb3V0X2dldChjb25zdCBzdHJ1Y3QgbmxhdHRyICphdHRyLCB1MzIgKnZhbClcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7c3RydWN0IG5mdF9jdF9leHBlY3RfZGF0YSB7XG4mIzQzO1x0c3RydWN0IG5mdF9jdF9leHBlY3Rfb2JqXHRvYmo7XG4mIzQzO1x0YXRvbWljX3RcdFx0XHRudW1fZXhwZWN0cztcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgY3RfZXhwZWN0X2hlbHAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IHByb3RvZmYsXG4mIzQzO1x0XHRcdCAgc3RydWN0IG5mX2Nvbm4gKmN0LCBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBuZnRfY3RfZXhwZWN0X2RhdGEgKmV4cGVjdF9kYXRhO1xuJiM0MztcdHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHA7XG4mIzQzO1x0ZW51bSBpcF9jb25udHJhY2tfZGlyIGRpcjtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRleHBlY3RfZGF0YSA9IG5mY3RfaGVscF9kYXRhKGN0KTtcbiYjNDM7XHRpZiAoIWV4cGVjdF9kYXRhKVxuJiM0MztcdFx0cmV0dXJuIE5GX0FDQ0VQVDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFhdG9taWNfYWRkX3VubGVzcyhcdTAwMjZleHBlY3RfZGF0YS1cdTAwM2VudW1fZXhwZWN0cywgMSwgZXhwZWN0X2RhdGEtXHUwMDNlb2JqLnNpemUpKVxuJiM0MztcdFx0cmV0dXJuIE5GX0FDQ0VQVDtcbiYjNDM7XG4mIzQzO1x0ZXhwID0gbmZfY3RfZXhwZWN0X2FsbG9jKGN0KTtcbiYjNDM7XHRpZiAoIWV4cClcbiYjNDM7XHRcdHJldHVybiBORl9EUk9QO1xuJiM0MztcbiYjNDM7XHRkaXIgPSBDVElORk8yRElSKGN0aW5mbyk7XG4mIzQzO1x0bmZfY3RfZXhwZWN0X2luaXQoZXhwLCBORl9DVF9FWFBFQ1RfQ0xBU1NfREVGQVVMVCwgbmZfY3RfbDNudW0oY3QpLFxuJiM0MztcdFx0XHQgIFx1MDAyNmN0LVx1MDAzZXR1cGxlaGFzaFshZGlyXS50dXBsZS5zcmMudTMsXG4mIzQzO1x0XHRcdCAgXHUwMDI2Y3QtXHUwMDNldHVwbGVoYXNoWyFkaXJdLnR1cGxlLmRzdC51MyxcbiYjNDM7XHRcdFx0ICBleHBlY3RfZGF0YS1cdTAwM2VvYmoubDRwcm90bywgTlVMTCwgXHUwMDI2ZXhwZWN0X2RhdGEtXHUwMDNlb2JqLmRwb3J0KTtcbiYjNDM7XHRleHAtXHUwMDNldGltZW91dCAmIzQzOz0gZXhwZWN0X2RhdGEtXHUwMDNlb2JqLnRpbWVvdXQ7XG4mIzQzO1xuJiM0MztcdGlmIChuZl9jdF9leHBlY3RfcmVsYXRlZChleHAsIDApICE9IDApXG4mIzQzO1x0XHRyZXQgPSBORl9EUk9QO1xuJiM0MztcbiYjNDM7XHRuZl9jdF9leHBlY3RfcHV0KGV4cCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBORl9BQ0NFUFQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgbmZ0X2N0X2V4cGVjdF9oZWxwZXJfYWxsb2Moc3RydWN0IG5mdF9jdF9leHBlY3Rfb2JqICpwcml2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKmN0X2V4cGVjdF9oZWxwZXI7XG4mIzQzO1xuJiM0MztcdGN0X2V4cGVjdF9oZWxwZXIgPSBremFsbG9jX29iaihzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlcik7XG4mIzQzO1x0aWYgKCFjdF9leHBlY3RfaGVscGVyKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdHNucHJpbnRmKGN0X2V4cGVjdF9oZWxwZXItXHUwMDNlbmFtZSwgc2l6ZW9mKGN0X2V4cGVjdF9oZWxwZXItXHUwMDNlbmFtZSksIFwmIzM0OyVzXCYjMzQ7LFxuJiM0MztcdFx0IFwmIzM0O25mdF9jdF9leHBlY3RcJiMzNDspO1xuJiM0MztcdGN0X2V4cGVjdF9oZWxwZXItXHUwMDNlbWUgPSBUSElTX01PRFVMRTtcbiYjNDM7XHRjdF9leHBlY3RfaGVscGVyLVx1MDAzZWV4cGVjdF9wb2xpY3lbTkZfQ1RfRVhQRUNUX0NMQVNTX0RFRkFVTFRdLm1heF9leHBlY3RlZCA9IHByaXYtXHUwMDNlc2l6ZTtcbiYjNDM7XHRyY3VfYXNzaWduX3BvaW50ZXIoY3RfZXhwZWN0X2hlbHBlci1cdTAwM2VoZWxwLCBjdF9leHBlY3RfaGVscCk7XG4mIzQzO1x0cmVmY291bnRfc2V0KFx1MDAyNmN0X2V4cGVjdF9oZWxwZXItXHUwMDNlY3RfcmVmY250LCAxKTtcbiYjNDM7XG4mIzQzO1x0LyogTm8gbmVlZCB0byByZWdpc3RlciB0aGlzIGhlbHBlciwgdGhpcyBpcyBpbnRlcm5hbC4gKi9cbiYjNDM7XHRwcml2LVx1MDAzZWhlbHBlciA9IGN0X2V4cGVjdF9oZWxwZXI7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgbmZ0X2N0X2V4cGVjdF9vYmpfaW5pdChjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxuIFx0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgdGJbXSxcbiBcdFx0XHRcdCAgc3RydWN0IG5mdF9vYmplY3QgKm9iailcbkBAIC0xMjMzLDYgJiM0MzsxMjk1LDggQEAgc3RhdGljIGludCBuZnRfY3RfZXhwZWN0X29ial9pbml0KGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXG4gXHRzdHJ1Y3QgbmZ0X2N0X2V4cGVjdF9vYmogKnByaXYgPSBuZnRfb2JqX2RhdGEob2JqKTtcbiBcdGludCBlcnI7XG4gXG4mIzQzO1x0TkZfQ1RfSEVMUEVSX0JVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IG5mdF9jdF9leHBlY3RfZGF0YSkpO1xuJiM0MztcbiBcdGlmICghdGJbTkZUQV9DVF9FWFBFQ1RfTDRQUk9UT10gfHxcbiBcdCAgICAhdGJbTkZUQV9DVF9FWFBFQ1RfRFBPUlRdIHx8XG4gXHQgICAgIXRiW05GVEFfQ1RfRVhQRUNUX1RJTUVPVVRdIHx8XG5AQCAtMTI3MywxMyAmIzQzOzEzMzcsMjYgQEAgc3RhdGljIGludCBuZnRfY3RfZXhwZWN0X29ial9pbml0KGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXG4gXHRwcml2LVx1MDAzZWRwb3J0ID0gbmxhX2dldF9iZTE2KHRiW05GVEFfQ1RfRVhQRUNUX0RQT1JUXSk7XG4gXHRwcml2LVx1MDAzZXNpemUgPSBubGFfZ2V0X3U4KHRiW05GVEFfQ1RfRVhQRUNUX1NJWkVdKTtcbiBcbi1cdHJldHVybiBuZl9jdF9uZXRuc19nZXQoY3R4LVx1MDAzZW5ldCwgY3R4LVx1MDAzZWZhbWlseSk7XG4mIzQzO1x0ZXJyID0gbmZfY3RfbmV0bnNfZ2V0KGN0eC1cdTAwM2VuZXQsIGN0eC1cdTAwM2VmYW1pbHkpO1xuJiM0MztcdGlmIChlcnIgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gZXJyO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBuZnRfY3RfZXhwZWN0X2hlbHBlcl9hbGxvYyhwcml2KTtcbiYjNDM7XHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRuZl9jdF9uZXRuc19wdXQoY3R4LVx1MDAzZW5ldCwgY3R4LVx1MDAzZWZhbWlseSk7XG4mIzQzO1x0XHRyZXR1cm4gZXJyO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiB9XG4gXG4gc3RhdGljIHZvaWQgbmZ0X2N0X2V4cGVjdF9vYmpfZGVzdHJveShjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxuLVx0XHRcdFx0ICAgICAgIHN0cnVjdCBuZnRfb2JqZWN0ICpvYmopXG4mIzQzO1x0XHRcdFx0ICAgICAgc3RydWN0IG5mdF9vYmplY3QgKm9iailcbiB7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IG5mdF9jdF9leHBlY3Rfb2JqICpwcml2ID0gbmZ0X29ial9kYXRhKG9iaik7XG4mIzQzO1xuIFx0bmZfY3RfbmV0bnNfcHV0KGN0eC1cdTAwM2VuZXQsIGN0eC1cdTAwM2VmYW1pbHkpO1xuJiM0MztcdG5mX2Nvbm50cmFja19oZWxwZXJfZnJlZShwcml2LVx1MDAzZWhlbHBlcik7XG4gfVxuIFxuIHN0YXRpYyBpbnQgbmZ0X2N0X2V4cGVjdF9vYmpfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuQEAgLTEzMDIsNTAgJiM0MzsxMzc5LDM4IEBAIHN0YXRpYyB2b2lkIG5mdF9jdF9leHBlY3Rfb2JqX2V2YWwoc3RydWN0IG5mdF9vYmplY3QgKm9iaixcbiBcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0KVxuIHtcbiBcdGNvbnN0IHN0cnVjdCBuZnRfY3RfZXhwZWN0X29iaiAqcHJpdiA9IG5mdF9vYmpfZGF0YShvYmopO1xuLVx0c3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmV4cDtcbiYjNDM7XHRzdHJ1Y3QgbmZ0X2N0X2V4cGVjdF9kYXRhICpleHBlY3RfZGF0YTtcbiBcdGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvO1xuIFx0c3RydWN0IG5mX2Nvbm5faGVscCAqaGVscDtcbi1cdGVudW0gaXBfY29ubnRyYWNrX2RpciBkaXI7XG4tXHR1MTYgbDNudW0gPSBwcml2LVx1MDAzZWwzbnVtO1xuIFx0c3RydWN0IG5mX2Nvbm4gKmN0O1xuIFxuIFx0Y3QgPSBuZl9jdF9nZXQocGt0LVx1MDAzZXNrYiwgXHUwMDI2Y3RpbmZvKTtcbi1cdGlmICghY3QgfHwgbmZfY3RfaXNfY29uZmlybWVkKGN0KSB8fCBuZl9jdF9pc190ZW1wbGF0ZShjdCkpIHtcbiYjNDM7XHRpZiAoIWN0IHx8IG5mX2N0X2lzX3RlbXBsYXRlKGN0KSB8fCBuZl9jdF9pc19jb25maXJtZWQoY3QpKSB7XG4gXHRcdHJlZ3MtXHUwMDNldmVyZGljdC5jb2RlID0gTkZUX0JSRUFLO1xuIFx0XHRyZXR1cm47XG4gXHR9XG4tXHRkaXIgPSBDVElORk8yRElSKGN0aW5mbyk7XG4gXG4gXHRoZWxwID0gbmZjdF9oZWxwKGN0KTtcbi1cdGlmICghaGVscClcbi1cdFx0aGVscCA9IG5mX2N0X2hlbHBlcl9leHRfYWRkKGN0LCBHRlBfQVRPTUlDKTtcbi1cdGlmICghaGVscCkge1xuLVx0XHRyZWdzLVx1MDAzZXZlcmRpY3QuY29kZSA9IE5GX0RST1A7XG4tXHRcdHJldHVybjtcbi1cdH1cbi1cbi1cdGlmIChoZWxwLVx1MDAzZWV4cGVjdGluZ1tORl9DVF9FWFBFQ1RfQ0xBU1NfREVGQVVMVF0gXHUwMDNlPSBwcml2LVx1MDAzZXNpemUpIHtcbiYjNDM7XHRpZiAoaGVscCkge1xuIFx0XHRyZWdzLVx1MDAzZXZlcmRpY3QuY29kZSA9IE5GVF9CUkVBSztcbiBcdFx0cmV0dXJuO1xuIFx0fVxuLVx0aWYgKGwzbnVtID09IE5GUFJPVE9fSU5FVClcbi1cdFx0bDNudW0gPSBuZl9jdF9sM251bShjdCk7XG4gXG4tXHRleHAgPSBuZl9jdF9leHBlY3RfYWxsb2MoY3QpO1xuLVx0aWYgKGV4cCA9PSBOVUxMKSB7XG4mIzQzO1x0aGVscCA9IG5mX2N0X2hlbHBlcl9leHRfYWRkKGN0LCBHRlBfQVRPTUlDKTtcbiYjNDM7XHRpZiAoIWhlbHApIHtcbiBcdFx0cmVncy1cdTAwM2V2ZXJkaWN0LmNvZGUgPSBORl9EUk9QO1xuIFx0XHRyZXR1cm47XG4gXHR9XG4tXHRuZl9jdF9leHBlY3RfaW5pdChleHAsIE5GX0NUX0VYUEVDVF9DTEFTU19ERUZBVUxULCBsM251bSxcbi1cdFx0ICAgICAgICAgIFx1MDAyNmN0LVx1MDAzZXR1cGxlaGFzaFshZGlyXS50dXBsZS5zcmMudTMsXG4tXHRcdCAgICAgICAgICBcdTAwMjZjdC1cdTAwM2V0dXBsZWhhc2hbIWRpcl0udHVwbGUuZHN0LnUzLFxuLVx0XHQgICAgICAgICAgcHJpdi1cdTAwM2VsNHByb3RvLCBOVUxMLCBcdTAwMjZwcml2LVx1MDAzZWRwb3J0KTtcbi1cdGV4cC1cdTAwM2V0aW1lb3V0ICYjNDM7PSBwcml2LVx1MDAzZXRpbWVvdXQ7XG4gXG4tXHRpZiAobmZfY3RfZXhwZWN0X3JlbGF0ZWQoZXhwLCAwKSAhPSAwKVxuLVx0XHRyZWdzLVx1MDAzZXZlcmRpY3QuY29kZSA9IE5GX0RST1A7XG4mIzQzO1x0ZXhwZWN0X2RhdGEgPSBuZmN0X2hlbHBfZGF0YShjdCk7XG4mIzQzO1x0aWYgKCFleHBlY3RfZGF0YSkge1xuJiM0MztcdFx0cmVncy1cdTAwM2V2ZXJkaWN0LmNvZGUgPSBORlRfQlJFQUs7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcdGV4cGVjdF9kYXRhLVx1MDAzZW9iaiA9ICpwcml2O1xuIFxuLVx0bmZfY3RfZXhwZWN0X3B1dChleHApO1xuJiM0MztcdGlmIChoZWxwIFx1MDAyNlx1MDAyNiByZWZjb3VudF9pbmNfbm90X3plcm8oXHUwMDI2cHJpdi1cdTAwM2VoZWxwZXItXHUwMDNlY3RfcmVmY250KSlcbiYjNDM7XHRcdHJjdV9hc3NpZ25fcG9pbnRlcihoZWxwLVx1MDAzZWhlbHBlciwgcHJpdi1cdTAwM2VoZWxwZXIpO1xuIH1cbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmZ0X2N0X2V4cGVjdF9wb2xpY3lbTkZUQV9DVF9FWFBFQ1RfTUFYICYjNDM7IDFdID0ge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDAzOjM3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRGSUxURVImIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLJiMzNDssCiAgICAmIzM0O05GX1RBQkxFUyYjMzQ7LAogICAgJiMzNDtORlRfQ1QmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZnRfY3RfZXhwZWN0X29ial9pbml0JiMzNDssCiAgICAmIzM0O25mdF9jdF9leHBlY3Rfb2JqX2V2YWwmIzM0OywKICAgICYjMzQ7bmZ0X2N0X2V4cGVjdF9vYmpfZGVzdHJveSYjMzQ7LAogICAgJiMzNDtuZnRfY3RfZXhwZWN0X2hlbHBlcl9hbGxvYyYjMzQ7LAogICAgJiMzNDtjdF9leHBlY3RfaGVscCYjMzQ7LAogICAgJiMzNDtuZl9jb25udHJhY2tfaGVscGVyX2ZyZWUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIG5ldGZpbHRlciBuZnRhYmxlcyBjb25udHJhY2sgZXhwZWN0YXRpb24gbG9naWMsIHNwZWNpZmljYWxseSBhZGRpbmcgZHluYW1pYyBhbGxvY2F0aW9uIGFuZCBmcmVlaW5nIG9mIGNvbm50cmFjayBoZWxwZXJzIChuZl9jb25udHJhY2tfaGVscGVyX2ZyZWUsIG5mdF9jdF9leHBlY3RfaGVscGVyX2FsbG9jKS4gVGhlc2UgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRsaW5rIHdoZW4gY3JlYXRpbmcgYW5kIGV2YWx1YXRpbmcgbmZ0YWJsZXMgZXhwZWN0YXRpb24gb2JqZWN0cywgbWFraW5nIHRoZW0gaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYmUxNzQyZGRjNTRhNzljYzNiNzEyMGQwMjU2YjZhYWRmYTMwMGY0ZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgQXVnIDEgMDM6Mzc6MDQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5oIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuaAppbmRleCBjNzYxY2Q4MTU4YjI1Li40NDIwODQ2ZTQxZjIzIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmgKQEAgLTExNCw2ICYjNDM7MTE0LDggQEAgaW50IG5mX2Nvbm50cmFja19oZWxwZXJzX3JlZ2lzdGVyKHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICosIHVuc2lnbmVkIGludCwKIHZvaWQgbmZfY29ubnRyYWNrX2hlbHBlcnNfdW5yZWdpc3RlcihzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqKiwKIAkJCQkgICAgIHVuc2lnbmVkIGludCk7CiAKJiM0Mzt2b2lkIG5mX2Nvbm50cmFja19oZWxwZXJfZnJlZShzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqbWUpOwomIzQzOwogI2RlZmluZSBuZl9jb25udHJhY2tfaGVscGVyX2RlcHJlY2F0ZWQobmFtZSkgXAogCXByX3dhcm4oJiMzNDtUaGUgJXMgY29ubnRyYWNrIGhlbHBlciBpcyBzY2hlZHVsZWQgZm9yIHJlbW92YWwuXG4mIzM0OwlcCiAJCSYjMzQ7UGxlYXNlIGNvbnRhY3QgdGhlIG5ldGZpbHRlci1kZXZlbCBtYWlsaW5nIGxpc3QgaWYgeW91IHN0aWxsIG5lZWQgdGhpcy5cbiYjMzQ7LCBuYW1lKQpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYwppbmRleCA1MDA1MDliMTc2NjNlLi4xMTk3ZTg3OTM0OTRiIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYwpAQCAtNDU2LDEzICYjNDM7NDU2LDggQEAgc3RhdGljIGJvb2wgZXhwZWN0X2l0ZXJfbWUoc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmV4cCwgdm9pZCAqZGF0YSkKIAlyZXR1cm4gdGhpcyA9PSBtZTsKIH0KIAotdm9pZCBuZl9jb25udHJhY2tfaGVscGVyX3VucmVnaXN0ZXIoc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKm1lKQomIzQzO3ZvaWQgbmZfY29ubnRyYWNrX2hlbHBlcl9mcmVlKHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICptZSkKIHsKLQltdXRleF9sb2NrKCZhbXA7bmZfY3RfaGVscGVyX211dGV4KTsKLQlobGlzdF9kZWxfcmN1KCZhbXA7bWUtJmd0O2hub2RlKTsKLQluZl9jdF9oZWxwZXJfY291bnQtLTsKLQltdXRleF91bmxvY2soJmFtcDtuZl9jdF9oZWxwZXJfbXV0ZXgpOwotCiAJLyogVGhpcyBoZWxwZXIgaXMgZ29pbmcgYXdheSwgZGlzYWJsZSBpdC4gKi8KIAlyY3VfYXNzaWduX3BvaW50ZXIobWUtJmd0O2hlbHAsIE5VTEwpOwogCkBAIC00NzYsNiAmIzQzOzQ3MSwxNyBAQCB2b2lkIG5mX2Nvbm50cmFja19oZWxwZXJfdW5yZWdpc3RlcihzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqbWUpCiAJaWYgKHJlZmNvdW50X2RlY19hbmRfdGVzdCgmYW1wO21lLSZndDtjdF9yZWZjbnQpKQogCQlrZnJlZV9yY3UobWUsIHJjdSk7CiB9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwobmZfY29ubnRyYWNrX2hlbHBlcl9mcmVlKTsKJiM0MzsKJiM0Mzt2b2lkIG5mX2Nvbm50cmFja19oZWxwZXJfdW5yZWdpc3RlcihzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqbWUpCiYjNDM7ewomIzQzOwltdXRleF9sb2NrKCZhbXA7bmZfY3RfaGVscGVyX211dGV4KTsKJiM0MzsJaGxpc3RfZGVsX3JjdSgmYW1wO21lLSZndDtobm9kZSk7CiYjNDM7CW5mX2N0X2hlbHBlcl9jb3VudC0tOwomIzQzOwltdXRleF91bmxvY2soJmFtcDtuZl9jdF9oZWxwZXJfbXV0ZXgpOwomIzQzOwomIzQzOwluZl9jb25udHJhY2tfaGVscGVyX2ZyZWUobWUpOwomIzQzO30KIEVYUE9SVF9TWU1CT0xfR1BMKG5mX2Nvbm50cmFja19oZWxwZXJfdW5yZWdpc3Rlcik7CiAKIHZvaWQgbmZfY3RfaGVscGVyX2luaXQoc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKmhlbHBlciwKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMgYi9uZXQvbmV0ZmlsdGVyL25mdF9jdC5jCmluZGV4IDAzYTg4Yzc3ZTBmMDIuLmZmN2MyNzU3OWNmYjEgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZnRfY3QuYwpAQCAtMTIxMyw2ICYjNDM7MTIxMyw4IEBAIHN0cnVjdCBuZnRfY3RfZXhwZWN0X29iaiB7CiAJdTgJCWw0cHJvdG87CiAJdTgJCXNpemU7CiAJdTMyCQl0aW1lb3V0OwomIzQzOwomIzQzOwlzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqaGVscGVyOwogfTsKIAogc3RhdGljIGludCBuZnRfY3RfZXhwZWN0X3RpbWVvdXRfZ2V0KGNvbnN0IHN0cnVjdCBubGF0dHIgKmF0dHIsIHUzMiAqdmFsKQpAQCAtMTIyNiw2ICYjNDM7MTIyOCw2NiBAQCBzdGF0aWMgaW50IG5mdF9jdF9leHBlY3RfdGltZW91dF9nZXQoY29uc3Qgc3RydWN0IG5sYXR0ciAqYXR0ciwgdTMyICp2YWwpCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdHJ1Y3QgbmZ0X2N0X2V4cGVjdF9kYXRhIHsKJiM0MzsJc3RydWN0IG5mdF9jdF9leHBlY3Rfb2JqCW9iajsKJiM0MzsJYXRvbWljX3QJCQludW1fZXhwZWN0czsKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBpbnQgY3RfZXhwZWN0X2hlbHAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IHByb3RvZmYsCiYjNDM7CQkJICBzdHJ1Y3QgbmZfY29ubiAqY3QsIGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvKQomIzQzO3sKJiM0MzsJc3RydWN0IG5mdF9jdF9leHBlY3RfZGF0YSAqZXhwZWN0X2RhdGE7CiYjNDM7CXN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHA7CiYjNDM7CWVudW0gaXBfY29ubnRyYWNrX2RpciBkaXI7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWV4cGVjdF9kYXRhID0gbmZjdF9oZWxwX2RhdGEoY3QpOwomIzQzOwlpZiAoIWV4cGVjdF9kYXRhKQomIzQzOwkJcmV0dXJuIE5GX0FDQ0VQVDsKJiM0MzsKJiM0MzsJaWYgKCFhdG9taWNfYWRkX3VubGVzcygmYW1wO2V4cGVjdF9kYXRhLSZndDtudW1fZXhwZWN0cywgMSwgZXhwZWN0X2RhdGEtJmd0O29iai5zaXplKSkKJiM0MzsJCXJldHVybiBORl9BQ0NFUFQ7CiYjNDM7CiYjNDM7CWV4cCA9IG5mX2N0X2V4cGVjdF9hbGxvYyhjdCk7CiYjNDM7CWlmICghZXhwKQomIzQzOwkJcmV0dXJuIE5GX0RST1A7CiYjNDM7CiYjNDM7CWRpciA9IENUSU5GTzJESVIoY3RpbmZvKTsKJiM0MzsJbmZfY3RfZXhwZWN0X2luaXQoZXhwLCBORl9DVF9FWFBFQ1RfQ0xBU1NfREVGQVVMVCwgbmZfY3RfbDNudW0oY3QpLAomIzQzOwkJCSAgJmFtcDtjdC0mZ3Q7dHVwbGVoYXNoWyFkaXJdLnR1cGxlLnNyYy51MywKJiM0MzsJCQkgICZhbXA7Y3QtJmd0O3R1cGxlaGFzaFshZGlyXS50dXBsZS5kc3QudTMsCiYjNDM7CQkJICBleHBlY3RfZGF0YS0mZ3Q7b2JqLmw0cHJvdG8sIE5VTEwsICZhbXA7ZXhwZWN0X2RhdGEtJmd0O29iai5kcG9ydCk7CiYjNDM7CWV4cC0mZ3Q7dGltZW91dCAmIzQzOz0gZXhwZWN0X2RhdGEtJmd0O29iai50aW1lb3V0OwomIzQzOwomIzQzOwlpZiAobmZfY3RfZXhwZWN0X3JlbGF0ZWQoZXhwLCAwKSAhPSAwKQomIzQzOwkJcmV0ID0gTkZfRFJPUDsKJiM0MzsKJiM0MzsJbmZfY3RfZXhwZWN0X3B1dChleHApOwomIzQzOwomIzQzOwlyZXR1cm4gTkZfQUNDRVBUOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG5mdF9jdF9leHBlY3RfaGVscGVyX2FsbG9jKHN0cnVjdCBuZnRfY3RfZXhwZWN0X29iaiAqcHJpdikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICpjdF9leHBlY3RfaGVscGVyOwomIzQzOwomIzQzOwljdF9leHBlY3RfaGVscGVyID0ga3phbGxvY19vYmooc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIpOwomIzQzOwlpZiAoIWN0X2V4cGVjdF9oZWxwZXIpCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsKJiM0MzsJc25wcmludGYoY3RfZXhwZWN0X2hlbHBlci0mZ3Q7bmFtZSwgc2l6ZW9mKGN0X2V4cGVjdF9oZWxwZXItJmd0O25hbWUpLCAmIzM0OyVzJiMzNDssCiYjNDM7CQkgJiMzNDtuZnRfY3RfZXhwZWN0JiMzNDspOwomIzQzOwljdF9leHBlY3RfaGVscGVyLSZndDttZSA9IFRISVNfTU9EVUxFOwomIzQzOwljdF9leHBlY3RfaGVscGVyLSZndDtleHBlY3RfcG9saWN5W05GX0NUX0VYUEVDVF9DTEFTU19ERUZBVUxUXS5tYXhfZXhwZWN0ZWQgPSBwcml2LSZndDtzaXplOwomIzQzOwlyY3VfYXNzaWduX3BvaW50ZXIoY3RfZXhwZWN0X2hlbHBlci0mZ3Q7aGVscCwgY3RfZXhwZWN0X2hlbHApOwomIzQzOwlyZWZjb3VudF9zZXQoJmFtcDtjdF9leHBlY3RfaGVscGVyLSZndDtjdF9yZWZjbnQsIDEpOwomIzQzOwomIzQzOwkvKiBObyBuZWVkIHRvIHJlZ2lzdGVyIHRoaXMgaGVscGVyLCB0aGlzIGlzIGludGVybmFsLiAqLwomIzQzOwlwcml2LSZndDtoZWxwZXIgPSBjdF9leHBlY3RfaGVscGVyOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IG5mdF9jdF9leHBlY3Rfb2JqX2luaXQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCwKIAkJCQkgIGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCB0YltdLAogCQkJCSAgc3RydWN0IG5mdF9vYmplY3QgKm9iaikKQEAgLTEyMzMsNiAmIzQzOzEyOTUsOCBAQCBzdGF0aWMgaW50IG5mdF9jdF9leHBlY3Rfb2JqX2luaXQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCwKIAlzdHJ1Y3QgbmZ0X2N0X2V4cGVjdF9vYmogKnByaXYgPSBuZnRfb2JqX2RhdGEob2JqKTsKIAlpbnQgZXJyOwogCiYjNDM7CU5GX0NUX0hFTFBFUl9CVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCBuZnRfY3RfZXhwZWN0X2RhdGEpKTsKJiM0MzsKIAlpZiAoIXRiW05GVEFfQ1RfRVhQRUNUX0w0UFJPVE9dIHx8CiAJICAgICF0YltORlRBX0NUX0VYUEVDVF9EUE9SVF0gfHwKIAkgICAgIXRiW05GVEFfQ1RfRVhQRUNUX1RJTUVPVVRdIHx8CkBAIC0xMjczLDEzICYjNDM7MTMzNywyNiBAQCBzdGF0aWMgaW50IG5mdF9jdF9leHBlY3Rfb2JqX2luaXQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCwKIAlwcml2LSZndDtkcG9ydCA9IG5sYV9nZXRfYmUxNih0YltORlRBX0NUX0VYUEVDVF9EUE9SVF0pOwogCXByaXYtJmd0O3NpemUgPSBubGFfZ2V0X3U4KHRiW05GVEFfQ1RfRVhQRUNUX1NJWkVdKTsKIAotCXJldHVybiBuZl9jdF9uZXRuc19nZXQoY3R4LSZndDtuZXQsIGN0eC0mZ3Q7ZmFtaWx5KTsKJiM0MzsJZXJyID0gbmZfY3RfbmV0bnNfZ2V0KGN0eC0mZ3Q7bmV0LCBjdHgtJmd0O2ZhbWlseSk7CiYjNDM7CWlmIChlcnIgJmx0OyAwKQomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsKJiM0MzsJZXJyID0gbmZ0X2N0X2V4cGVjdF9oZWxwZXJfYWxsb2MocHJpdik7CiYjNDM7CWlmIChlcnIgJmx0OyAwKSB7CiYjNDM7CQluZl9jdF9uZXRuc19wdXQoY3R4LSZndDtuZXQsIGN0eC0mZ3Q7ZmFtaWx5KTsKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIHZvaWQgbmZ0X2N0X2V4cGVjdF9vYmpfZGVzdHJveShjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LAotCQkJCSAgICAgICBzdHJ1Y3QgbmZ0X29iamVjdCAqb2JqKQomIzQzOwkJCQkgICAgICBzdHJ1Y3QgbmZ0X29iamVjdCAqb2JqKQogewomIzQzOwljb25zdCBzdHJ1Y3QgbmZ0X2N0X2V4cGVjdF9vYmogKnByaXYgPSBuZnRfb2JqX2RhdGEob2JqKTsKJiM0MzsKIAluZl9jdF9uZXRuc19wdXQoY3R4LSZndDtuZXQsIGN0eC0mZ3Q7ZmFtaWx5KTsKJiM0MzsJbmZfY29ubnRyYWNrX2hlbHBlcl9mcmVlKHByaXYtJmd0O2hlbHBlcik7CiB9CiAKIHN0YXRpYyBpbnQgbmZ0X2N0X2V4cGVjdF9vYmpfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLApAQCAtMTMwMiw1MCAmIzQzOzEzNzksMzggQEAgc3RhdGljIHZvaWQgbmZ0X2N0X2V4cGVjdF9vYmpfZXZhbChzdHJ1Y3QgbmZ0X29iamVjdCAqb2JqLAogCQkJCSAgIGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0KQogewogCWNvbnN0IHN0cnVjdCBuZnRfY3RfZXhwZWN0X29iaiAqcHJpdiA9IG5mdF9vYmpfZGF0YShvYmopOwotCXN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHA7CiYjNDM7CXN0cnVjdCBuZnRfY3RfZXhwZWN0X2RhdGEgKmV4cGVjdF9kYXRhOwogCWVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvOwogCXN0cnVjdCBuZl9jb25uX2hlbHAgKmhlbHA7Ci0JZW51bSBpcF9jb25udHJhY2tfZGlyIGRpcjsKLQl1MTYgbDNudW0gPSBwcml2LSZndDtsM251bTsKIAlzdHJ1Y3QgbmZfY29ubiAqY3Q7CiAKIAljdCA9IG5mX2N0X2dldChwa3QtJmd0O3NrYiwgJmFtcDtjdGluZm8pOwotCWlmICghY3QgfHwgbmZfY3RfaXNfY29uZmlybWVkKGN0KSB8fCBuZl9jdF9pc190ZW1wbGF0ZShjdCkpIHsKJiM0MzsJaWYgKCFjdCB8fCBuZl9jdF9pc190ZW1wbGF0ZShjdCkgfHwgbmZfY3RfaXNfY29uZmlybWVkKGN0KSkgewogCQlyZWdzLSZndDt2ZXJkaWN0LmNvZGUgPSBORlRfQlJFQUs7CiAJCXJldHVybjsKIAl9Ci0JZGlyID0gQ1RJTkZPMkRJUihjdGluZm8pOwogCiAJaGVscCA9IG5mY3RfaGVscChjdCk7Ci0JaWYgKCFoZWxwKQotCQloZWxwID0gbmZfY3RfaGVscGVyX2V4dF9hZGQoY3QsIEdGUF9BVE9NSUMpOwotCWlmICghaGVscCkgewotCQlyZWdzLSZndDt2ZXJkaWN0LmNvZGUgPSBORl9EUk9QOwotCQlyZXR1cm47Ci0JfQotCi0JaWYgKGhlbHAtJmd0O2V4cGVjdGluZ1tORl9DVF9FWFBFQ1RfQ0xBU1NfREVGQVVMVF0gJmd0Oz0gcHJpdi0mZ3Q7c2l6ZSkgewomIzQzOwlpZiAoaGVscCkgewogCQlyZWdzLSZndDt2ZXJkaWN0LmNvZGUgPSBORlRfQlJFQUs7CiAJCXJldHVybjsKIAl9Ci0JaWYgKGwzbnVtID09IE5GUFJPVE9fSU5FVCkKLQkJbDNudW0gPSBuZl9jdF9sM251bShjdCk7CiAKLQlleHAgPSBuZl9jdF9leHBlY3RfYWxsb2MoY3QpOwotCWlmIChleHAgPT0gTlVMTCkgewomIzQzOwloZWxwID0gbmZfY3RfaGVscGVyX2V4dF9hZGQoY3QsIEdGUF9BVE9NSUMpOwomIzQzOwlpZiAoIWhlbHApIHsKIAkJcmVncy0mZ3Q7dmVyZGljdC5jb2RlID0gTkZfRFJPUDsKIAkJcmV0dXJuOwogCX0KLQluZl9jdF9leHBlY3RfaW5pdChleHAsIE5GX0NUX0VYUEVDVF9DTEFTU19ERUZBVUxULCBsM251bSwKLQkJICAgICAgICAgICZhbXA7Y3QtJmd0O3R1cGxlaGFzaFshZGlyXS50dXBsZS5zcmMudTMsCi0JCSAgICAgICAgICAmYW1wO2N0LSZndDt0dXBsZWhhc2hbIWRpcl0udHVwbGUuZHN0LnUzLAotCQkgICAgICAgICAgcHJpdi0mZ3Q7bDRwcm90bywgTlVMTCwgJmFtcDtwcml2LSZndDtkcG9ydCk7Ci0JZXhwLSZndDt0aW1lb3V0ICYjNDM7PSBwcml2LSZndDt0aW1lb3V0OwogCi0JaWYgKG5mX2N0X2V4cGVjdF9yZWxhdGVkKGV4cCwgMCkgIT0gMCkKLQkJcmVncy0mZ3Q7dmVyZGljdC5jb2RlID0gTkZfRFJPUDsKJiM0MzsJZXhwZWN0X2RhdGEgPSBuZmN0X2hlbHBfZGF0YShjdCk7CiYjNDM7CWlmICghZXhwZWN0X2RhdGEpIHsKJiM0MzsJCXJlZ3MtJmd0O3ZlcmRpY3QuY29kZSA9IE5GVF9CUkVBSzsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwlleHBlY3RfZGF0YS0mZ3Q7b2JqID0gKnByaXY7CiAKLQluZl9jdF9leHBlY3RfcHV0KGV4cCk7CiYjNDM7CWlmIChoZWxwICZhbXA7JmFtcDsgcmVmY291bnRfaW5jX25vdF96ZXJvKCZhbXA7cHJpdi0mZ3Q7aGVscGVyLSZndDtjdF9yZWZjbnQpKQomIzQzOwkJcmN1X2Fzc2lnbl9wb2ludGVyKGhlbHAtJmd0O2hlbHBlciwgcHJpdi0mZ3Q7aGVscGVyKTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5mdF9jdF9leHBlY3RfcG9saWN5W05GVEFfQ1RfRVhQRUNUX01BWCAmIzQzOyAxXSA9IHsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDM6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDk2MgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDIwNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5ldGZpbHRlciBDb25udHJhY2sgSGVscGVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCYjMzk7cyBtYWtpbmcgc29tZSBrZXkgbW9kaWZpY2F0aW9ucyB0byB0aGUgY29ubnRyYWNrIGhlbHBlciBhbmQgbmZ0YWJsZXMgaW50ZWdyYXRpb24uIFRoZSBjb3JlIG9mIGl0IHNlZW1zIHRvIGJlIGFkZGluZyBhIGBuZl9jb25udHJhY2tfaGVscGVyX2ZyZWVgIGZ1bmN0aW9uIGFuZCBtYWtpbmcgaXQgYXZhaWxhYmxlLiBUaGlzIGlzIGludGVyZXN0aW5nLCBhIGNsZWFudXAgZnVuY3Rpb24gaXMgYWx3YXlzIGEgZ29vZCBzaWduIG9mIHJlc291cmNlIG1hbmFnZW1lbnQgYmVpbmcgY29uc2lkZXJlZC4KClRoZSByZWFsIG1lYXQgb2YgdGhlIGNoYW5nZXMgc2VlbXMgdG8gYmUgaW4gaG93IGNvbm50cmFjayBoZWxwZXJzIGFyZSBoYW5kbGVkIHdpdGhpbiBgbmZ0X2N0X2V4cGVjdGAuIFRoZSBgbmZ0X2N0X2V4cGVjdF9vYmpfaW5pdGAgZnVuY3Rpb24gaXMgYmVpbmcgdXBkYXRlZCB0byBhbGxvY2F0ZSBhIGhlbHBlciB1c2luZyBgbmZ0X2N0X2V4cGVjdF9oZWxwZXJfYWxsb2NgLiBUaGVuLCB0aGUgYG5mdF9jdF9leHBlY3Rfb2JqX2V2YWxgIGZ1bmN0aW9uIHdpbGwgbm93IGxldmVyYWdlIGBuZl9jdF9oZWxwZXJfZXh0X2FkZGAgdG8gYWRkIHRoZSBoZWxwZXIgdG8gdGhlIGNvbm50cmFjayBlbnRyeS4gRXNzZW50aWFsbHksIHRoZSBjb2RlIGlzIG1vdmluZyB0byBleHBsaWNpdGx5IG1hbmFnZSBhbmQgYXNzb2NpYXRlIHRoZXNlIGhlbHBlcnMsIHdoaWNoIGlzIGEgZnVuY3Rpb25hbCBpbXByb3ZlbWVudCBpbiB0aGUgbmV0ZmlsdGVyIGVjb3N5c3RlbS4gVGhpcyBpbXBhY3RzIGhvdyBuZnRhYmxlcyBpbnRlcmFjdHMgd2l0aCBjb25udHJhY2sgZXhwZWN0YXRpb25zLgoKTm93LCBsZXQmIzM5O3Mgc2VlIGhvdyB0aGlzIGFsbCBjb21waWxlcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSXQgbG9va3MgbGlrZSBgbmZ0X2N0LmNgIGlzIGdvaW5nIHRvIGJlIGNvbXBpbGVkIGlmIGBDT05GSUdfTkZUX0NUYCBpcyBlbmFibGVkLiBNYWtlcyBzZW5zZSwgdGhhdCYjMzk7cyBleHBlY3RlZC4gU2ltaWxhcmx5LCBgbmZfY29ubnRyYWNrX2hlbHBlci5jYCBuZWVkcyBgQ09ORklHX05GX0NPTk5UUkFDS2AgdG8gYmUgc2V0LiBUaGF0IGFsaWducyB3aXRoIGhvdyB0aGVzZSBjb21wb25lbnRzIG5vcm1hbGx5IHdvcmsuIE5vdywgSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoZSBgbmV0L25ldGZpbHRlci9NYWtlZmlsZWAgdG8gY29uZmlybSB0aGUgY29tcGlsYXRpb24gZGVwZW5kZW5jaWVzIGFuZCBidWlsZCBlbnZpcm9ubWVudCBmb3IgYG5mdF9jdC5jYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwMzozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZnRfY3RcXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTExMT1vYmotJChDT05GSUdfTkZUX05VTUdFTilcdCYjNDM7PSBuZnRfbnVtZ2VuLm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTEyOm9iai0kKENPTkZJR19ORlRfQ1QpXHRcdCYjNDM7PSBuZnRfY3Qub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZS0xMTMtb2JqLSQoQ09ORklHX05GVF9GTE9XX09GRkxPQUQpXHQmIzQzOz0gbmZ0X2Zsb3dfb2ZmbG9hZC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDM6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTY0OAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgZGVwZW5kZW5jaWVzIGFuZCBmdW5jdGlvbiBjYWxsczoKCioqRGVwZW5kZW5jaWVzIGFuZCBGdW5jdGlvbiBDYWxscyoqCgpPa2F5LCBzbyBJJiMzOTttIHB1dHRpbmcgdG9nZXRoZXIgdGhpcyBuZXcgTmV0ZmlsdGVyIG1vZHVsZSwgYW5kIGl0IGxvb2tzIGxpa2UgSSBhYnNvbHV0ZWx5ICpuZWVkKiBgQ09ORklHX05GVF9DVGAuIFRoYXQmIzM5O3Mgbm9uLW5lZ290aWFibGUuIEFuZCwgb2YgY291cnNlLCB0aGUgZXZlci1wcmVzZW50IGBDT05GSUdfTkZfQ09OTlRSQUNLYCBpcyBhbHNvIGEgbXVzdC1oYXZlLiBObyBzdXJwcmlzZXMgdGhlcmU7IEkga25ldyB0aGF0IGZyb20gdGhlIG91dHNldC4KCk5vdywgbGV0IG1lIGp1c3QgcXVpY2tseSBydW4gdGhyb3VnaCB0aGUgcmVsZXZhbnQgZnVuY3Rpb25zLiBMZXQmIzM5O3Mgc2VlLi4uIEkgc2hvdWxkIGNoZWNrIG91dCBgbmZ0X2N0X2V4cGVjdF9vYmpfaW5pdGAgYW5kIGBuZnRfY3RfZXhwZWN0X29ial9ldmFsYC4gVGhvc2UgYXJlIHRoZSB1c3VhbCBzdXNwZWN0cy4gSSYjMzk7bSBwcmV0dHkgc3VyZSB0aGV5IGFyZSBkZWZpbmVkIHdpdGhpbiBgbmZ0X2N0X2V4cGVjdF9vYmpfb3BzYC4uLiBvciBhdCBsZWFzdCBzb21ldGhpbmcgc2ltaWxhciB0byB0aGF0IHN0cnVjdHVyZS4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHRoYXQsIGJ1dCBteSBpbnN0aW5jdHMgYXJlIHBvaW50aW5nIGluIHRoYXQgZGlyZWN0aW9uLiBHb3R0YSBtYWtlIHN1cmUgdGhvc2UgZXhwZWN0YXRpb25zIGFyZSBoYW5kbGVkIGNvcnJlY3RseS4gVGhpcyYjMzk7bGwgYmUgdGhlIGtleSB0byBtYWtpbmcgdGhpcyBtb2R1bGUgd29yayBsaWtlIGEgY2hhcm0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDM6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZ0X2N0X2V4cGVjdF9vYmpfaW5pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZnRfY3QuYz0xMjcwPXN0YXRpYyBpbnQgbmZ0X2N0X2V4cGVjdF9oZWxwZXJfYWxsb2Moc3RydWN0IG5mdF9jdF9leHBlY3Rfb2JqICpwcml2KVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMtMTI5MC1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmM6MTI5MTpzdGF0aWMgaW50IG5mdF9jdF9leHBlY3Rfb2JqX2luaXQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMtMTI5Mi1cdFx0XHRcdCAgY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IHRiW10sXG4tLVxubmV0L25ldGZpbHRlci9uZnRfY3QuYz0xNDI2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZ0X29iamVjdF9vcHMgbmZ0X2N0X2V4cGVjdF9vYmpfb3BzID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMtMTQyOS1cdC5ldmFsXHRcdD0gbmZ0X2N0X2V4cGVjdF9vYmpfZXZhbCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmM6MTQzMDpcdC5pbml0XHRcdD0gbmZ0X2N0X2V4cGVjdF9vYmpfaW5pdCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMtMTQzMS1cdC5kZXN0cm95XHQ9IG5mdF9jdF9leHBlY3Rfb2JqX2Rlc3Ryb3ksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDM6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjI0NQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDIyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgQ29ubnRyYWNrIEV4cGVjdGF0aW9uIE9iamVjdCBGdW5jdGlvbnMqKgoKT2theSwgbGV0JiMzOTtzIHplcm8gaW4gb24gdGhlc2UgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gY29ubmVjdGlvbiB0cmFja2luZyBleHBlY3RhdGlvbnM6IGBuZnRfY3RfZXhwZWN0X29ial9pbml0YCwgYG5mdF9jdF9leHBlY3Rfb2JqX2V2YWxgLCBgbmZ0X2N0X2V4cGVjdF9vYmpfZGVzdHJveWAsIGBuZnRfY3RfZXhwZWN0X2hlbHBlcl9hbGxvY2AsIGBjdF9leHBlY3RfaGVscGAsIGFuZCBgbmZfY29ubnRyYWNrX2hlbHBlcl9mcmVlYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgdGhlaXIgdmlzaWJpbGl0eSwgYmVjYXVzZSB0aGF0JiMzOTtzIGNyaXRpY2FsIGZvciBob3cgd2UgY2FuIGludGVyYWN0IHdpdGggdGhlbS4gQXJlIHRoZXNlIHN0YXRpYyBvciBleHBvcnRlZD8KClJpZ2h0LCBxdWljayBjaGVjay4uLiBIbW0sIGl0IGxvb2tzIGxpa2UgYG5mdF9jdF9leHBlY3Rfb2JqX2luaXRgLCBgbmZ0X2N0X2V4cGVjdF9vYmpfZXZhbGAsIGBuZnRfY3RfZXhwZWN0X29ial9kZXN0cm95YCwgYG5mdF9jdF9leHBlY3RfaGVscGVyX2FsbG9jYCBhbmQgYGN0X2V4cGVjdF9oZWxwYCBhcmUgYWxsIGRlY2xhcmVkIGFzIHN0YXRpYy4gVGhpcyBtYWtlcyBtZSBwYXVzZS4gR2l2ZW4gbXkgdW5kZXJzdGFuZGluZyBvZiBgRm9jdXNTeW1ib2xzYCBhbmQgc2ltaWxhciB0b29scywgc3RhdGljIGZ1bmN0aW9ucyBjYW4gYmUgcHJvYmxlbWF0aWMgZm9yIGR5bmFtaWMgYW5hbHlzaXMgb3Igc3ltYm9sLWJhc2VkIHRyYWNpbmcuIFdlIG1pZ2h0IG5lZWQgdG8gY29uc2lkZXIgYWx0ZXJuYXRpdmVzIGlmIHdlJiMzOTtyZSBsb2NrZWQgb3V0IG9mIHRoZXNlLgoKQnV0IHdhaXQsIGBuZl9jb25udHJhY2tfaGVscGVyX2ZyZWVgICppcyogZXhwb3J0ZWQsIHRoYXQmIzM5O3MgdXNlZnVsLgoKTm93LCBpZiBtb3N0IG9mIHRoZSBjb3JlIGZ1bmN0aW9ucyBhcmUgc3RhdGljLCB0aGF0IHN1Z2dlc3RzIHdlIG5lZWQgdG8gZGlnIGRlZXBlciB0byBzZWUgaG93IHRoaXMgc3lzdGVtIGlzIG9yY2hlc3RyYXRlZC4gSXQgYWxzbyBtZWFucyB0aGF0LCBsaWtlbHksIGBGb2N1c1N5bWJvbHNgIHdpbGwgbm90IGJlIGFibGUgdG8gaW50ZXJhY3Qgd2l0aCB0aGVtIGFzIGVhc2lseSBhcyBpZiB0aGV5IHdlcmUgZXhwb3J0ZWQuIExldCYjMzk7cyBzZWUuLi4gQWgsIHRoZXJlJiMzOTtzIGBuZnRfY3RfZXhwZWN0X29ial9vcHNgLCBhbmQgdGhhdCYjMzk7cyBsaWtlbHkgKnJlZ2lzdGVyZWQqIHNvbWV3aGVyZS4gVGhhdCYjMzk7cyBhIGtleSBjbHVlLiBJIG5lZWQgdG8gdHJhY2UgYmFjayBmcm9tIHRoYXQgcG9pbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDM6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZ0X2N0X2V4cGVjdF9vYmpfb3BzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZnRfY3QuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mdF9jdC5jPTE0MjQ9c3RhdGljIHN0cnVjdCBuZnRfb2JqZWN0X3R5cGUgbmZ0X2N0X2V4cGVjdF9vYmpfdHlwZTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMtMTQyNS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmM6MTQyNjpzdGF0aWMgY29uc3Qgc3RydWN0IG5mdF9vYmplY3Rfb3BzIG5mdF9jdF9leHBlY3Rfb2JqX29wcyA9IHtcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMtMTQyNy1cdC50eXBlXHRcdD0gXHUwMDI2bmZ0X2N0X2V4cGVjdF9vYmpfdHlwZSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jPTE0MzU9c3RhdGljIHN0cnVjdCBuZnRfb2JqZWN0X3R5cGUgbmZ0X2N0X2V4cGVjdF9vYmpfdHlwZSBfX3JlYWRfbW9zdGx5ID0ge1xubmV0L25ldGZpbHRlci9uZnRfY3QuYy0xNDM2LVx0LnR5cGVcdFx0PSBORlRfT0JKRUNUX0NUX0VYUEVDVCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmM6MTQzNzpcdC5vcHNcdFx0PSBcdTAwMjZuZnRfY3RfZXhwZWN0X29ial9vcHMsXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jLTE0MzgtXHQubWF4YXR0clx0PSBORlRBX0NUX0VYUEVDVF9NQVgsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDM6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzEzOAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDY3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipJbml0aWFsIENvbm50cmFjayBNb2R1bGUgSW5xdWlyeSoqCgpSaWdodCwgc28gYG5mdF9jdF9leHBlY3Rfb2JqX3R5cGVgIGlzIGRlZmluaXRlbHkgcmVnaXN0ZXJlZCwgdGhhdCYjMzk7cyBzdGVwIG9uZS4gTm93LCB3aGVyZSBhcmUgd2Ugd2l0aCB0aG9zZSBoZWxwZXIgZnVuY3Rpb25zPyBMZXQmIzM5O3Mgc2VlLi4uIGBuZl9jb25udHJhY2tfaGVscGVyX2ZyZWVgIGlzICpleHBvcnRlZCogLSBnb29kLCBpdCYjMzk7cyBhdmFpbGFibGUuIEFuZCBgbmZfY29ubnRyYWNrX2hlbHBlcl91bnJlZ2lzdGVyYCBpcyBhbHNvIGV4cG9ydGVkLiBTZWVtcyBwcmV0dHkgc3RhbmRhcmQgc28gZmFyLCB0aGVzZSBsb29rIGxpa2UgdGhlIGtleSBwaWVjZXMuIE5vdywgdGhlIHF1ZXN0aW9uIGlzLCB3aGVyZSBhcmUgdGhlc2UgZnVuY3Rpb25zIGFjdHVhbGx5IGJlaW5nICp1c2VkKj8gVGltZSB0byBjaGVjayBgbmZ0X2N0X21vZHVsZV9pbml0YCBvciBzb21ldGhpbmcgc2ltaWxhci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbm5lY3Rpb24gYmV0d2VlbiB0aGVzZSByZWdpc3RlcmVkIGFuZCBleHBvcnRlZCBlbGVtZW50cyB0byBoYXZlIGEgZnVsbCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzdGF0ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDM6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZ0X2N0X2V4cGVjdF9vYmpfdHlwZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZnRfY3QuYz0xNDE2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBuZnRfY3RfZXhwZWN0X3BvbGljeVtORlRBX0NUX0VYUEVDVF9NQVggJiM0MzsgMV0gPSB7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfY3QuYy0xNDIzLVxubmV0L25ldGZpbHRlci9uZnRfY3QuYzoxNDI0OnN0YXRpYyBzdHJ1Y3QgbmZ0X29iamVjdF90eXBlIG5mdF9jdF9leHBlY3Rfb2JqX3R5cGU7XG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jLTE0MjUtXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jPTE0MjY9c3RhdGljIGNvbnN0IHN0cnVjdCBuZnRfb2JqZWN0X29wcyBuZnRfY3RfZXhwZWN0X29ial9vcHMgPSB7XG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jOjE0Mjc6XHQudHlwZVx0XHQ9IFx1MDAyNm5mdF9jdF9leHBlY3Rfb2JqX3R5cGUsXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jLTE0MjgtXHQuc2l6ZVx0XHQ9IHNpemVvZihzdHJ1Y3QgbmZ0X2N0X2V4cGVjdF9vYmopLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMtMTQzNC1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmM6MTQzNTpzdGF0aWMgc3RydWN0IG5mdF9vYmplY3RfdHlwZSBuZnRfY3RfZXhwZWN0X29ial90eXBlIF9fcmVhZF9tb3N0bHkgPSB7XG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jLTE0MzYtXHQudHlwZVx0XHQ9IE5GVF9PQkpFQ1RfQ1RfRVhQRUNULFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmM9MTQ0Mz1zdGF0aWMgaW50IF9faW5pdCBuZnRfY3RfbW9kdWxlX2luaXQodm9pZClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jLTE0NjAtXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jOjE0NjE6XHRlcnIgPSBuZnRfcmVnaXN0ZXJfb2JqKFx1MDAyNm5mdF9jdF9leHBlY3Rfb2JqX3R5cGUpO1xubmV0L25ldGZpbHRlci9uZnRfY3QuYy0xNDYyLVx0aWYgKGVyciBcdTAwM2MgMClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jLTE0NzItZXJyNDpcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmM6MTQ3MzpcdG5mdF91bnJlZ2lzdGVyX29iaihcdTAwMjZuZnRfY3RfZXhwZWN0X29ial90eXBlKTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMtMTQ3NC0jZW5kaWZcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jPTE0ODQ9c3RhdGljIHZvaWQgX19leGl0IG5mdF9jdF9tb2R1bGVfZXhpdCh2b2lkKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMtMTQ4OC0jZW5kaWZcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmM6MTQ4OTpcdG5mdF91bnJlZ2lzdGVyX29iaihcdTAwMjZuZnRfY3RfZXhwZWN0X29ial90eXBlKTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMtMTQ5MC1cdG5mdF91bnJlZ2lzdGVyX29iaihcdTAwMjZuZnRfY3RfaGVscGVyX29ial90eXBlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDM6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODAzNAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDI4NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTmV0ZmlsdGVyIENvbm50cmFjayBPYmplY3QgRnVuY3Rpb25zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBmdW5jdGlvbnMsIGBuZnRfY3RfZXhwZWN0X29ial9pbml0YCBhbmQgYG5mdF9jdF9leHBlY3Rfb2JqX2V2YWxgLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRoYXQsIGJlaW5nIHN0YXRpYywgdGhleSAqbWlnaHQqIGdldCBpbmxpbmVkIGJ5IHRoZSBjb21waWxlci4gQnV0IHdhaXQsIHRoZXkmIzM5O3JlIGFzc2lnbmVkIHRvIGZ1bmN0aW9uIHBvaW50ZXJzIHdpdGhpbiBgbmZ0X2N0X2V4cGVjdF9vYmpfb3BzYC4gVGhhdCBtZWFucyB0aGV5IGRlZmluaXRlbHkgKmFyZW4mIzM5O3QqIGlubGluZWQuIFNvLCBhY2NvcmRpbmcgdG8gdGhlIGluc3RydWN0aW9ucywgaW5jbHVkaW5nIHRoZW0gaW4gYEZvY3VzU3ltYm9sc2AgaXMgYSBwb3NzaWJpbGl0eSwgdGhvdWdoIHRoZSBwcm9tcHQgd2FudHMgbWUgdG8gcHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cy4gU2luY2UgdGhleSAqYXJlKiBzdGF0aWMsIGV2ZW4gdGhvdWdoIHRoZXkmIzM5O3JlIG5vdCBpbmxpbmVkLCBJIG5lZWQgdG8gZmluZCBzb21ldGhpbmcgYmV0dGVyLgoKQXJlIHRoZXJlIGFueSBvdGhlciBvcHRpb25zPyBBaCwgYG5mX2Nvbm50cmFja19oZWxwZXJfZnJlZWAgaXMgbm9uLXN0YXRpYyBhbmQgbG9va3MgcHJvbWlzaW5nLiBBbmQgYG5mX2Nvbm50cmFja19oZWxwZXJfdW5yZWdpc3RlcmAsIHRoYXQmIzM5O3Mgbm9uLXN0YXRpYyB0b28uCgpCdXQsIGhhbmcgb24sIGxldCYjMzk7cyBzdGVwIGJhY2sgZm9yIGEgc2Vjb25kLiBgbmZ0X2N0X2V4cGVjdF9vYmpfaW5pdGAgKmlzKiBjYWxsZWQgdmlhIGBuZnRfb2JqZWN0X29wcy0mZ3Q7aW5pdGAuIFRoZSBhY3R1YWwgZW50cnkgcG9pbnQgZnJvbSB0aGUgTmV0bGluayBpbnRlcmZhY2UgaXMgcHJvYmFibHkgc29tZXRoaW5nIGxpa2UgYG5mX3RhYmxlc19uZXdvYmpgIG9yIHNvbWV0aGluZyBzaW1pbGFyLCByaWdodD8gVGhvdWdoLCBJIHNlZSB0aGF0IGBuZl9jb25udHJhY2tfaGVscGVyX2ZyZWVgIGhhcyBiZWVuIGV4cGxpY2l0bHkgYWRkZWQgaW4gdGhpcyBwYXRjaC4gU28sIGl0IGlzIGRlZmluaXRlbHkgYSB2YWxpZCBvcHRpb24hCgpPa2F5LCB0aW1lIHRvIGNoZWNrIGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgIHRvIGNvbmZpcm0gYE5GVF9DVGAuIExldCYjMzk7cyBzZWUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDM6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5GVF9DVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWc9NDg1PWNvbmZpZyBORlRfTlVNR0VOXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ5MC1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo0OTE6Y29uZmlnIE5GVF9DVFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ5Mi1cdGRlcGVuZHMgb24gTkZfQ09OTlRSQUNLXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDAzOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg3NjYKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIGEgcGVyc29uYWwgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKk5hdmlnYXRpbmcgRGVwZW5kZW5jaWVzIGluIHRoZSBOZXRmaWx0ZXIgRnJhbWV3b3JrKioKCkFscmlnaHQsIHNvIEkmIzM5O20gc2VlaW5nIHRoaXMgYE5GVF9DVGAgbW9kdWxlLi4uIEkgaW1tZWRpYXRlbHkgcmVjb2duaXplIGl0IGFzIHNvbWV0aGluZyByZWxhdGVkIHRvIGNvbm50cmFjay4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIG5vdGluZyB0aGF0IGBORlRfQ1RgIHNlZW1zIHRvICpyZWx5KiBvbiBgTkZfQ09OTlRSQUNLYC4gVGhhdCYjMzk7cyBhIGtleSBwaWVjZSBvZiBpbmZvcm1hdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhhdCBkZXBlbmRlbmN5IGZ1bGx5LgoKVGhlcmVmb3JlLCB0aGUgbG9naWNhbCBuZXh0IHN0ZXAgZm9yIG1lIGlzIHRvIGRpZyBpbnRvIHRoZSBOZXRmaWx0ZXIgY29uZmlndXJhdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBnbyB0byB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlciDigJMgdGhlIGBLY29uZmlnYCBmaWxlcyDigJMgd2l0aGluIHRoZSBgbmV0L25ldGZpbHRlci9gIGRpcmVjdG9yeS4gVGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtsbCBmaW5kIHRoZSBkZWZpbml0aW9ucyBmb3IgYE5GX0NPTk5UUkFDS2AgYW5kLCBpbXBvcnRhbnRseSwgdW5kZXJzdGFuZCBob3cgaXQgcmVsYXRlcyB0byBgTkZUX0NUYC4gSSBuZWVkIHRvIGVuc3VyZSBJJiMzOTttIGdldHRpbmcgdGhlIHdob2xlIHBpY3R1cmUgb2YgdGhlIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiB0aGVzZSBtb2R1bGVzLiBNeSBnb2FsIGlzIHRvIGNvbmZpcm0gdGhlIGRlcGVuZGVuY3kgYW5kIGFzY2VydGFpbiBhbnkgcmVsYXRlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDAzOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORl9DT05OVFJBQ0smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnPTc0PWNvbmZpZyBORVRGSUxURVJfTkVUTElOS19PU0Zcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctODEtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6ODI6Y29uZmlnIE5GX0NPTk5UUkFDS1xubmV0L25ldGZpbHRlci9LY29uZmlnLTgzLVx0dHJpc3RhdGUgXCYjMzQ7TmV0ZmlsdGVyIGNvbm5lY3Rpb24gdHJhY2tpbmcgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz0xMTE9Y29uZmlnIE5FVEZJTFRFUl9DT05OQ09VTlRcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTEzLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjExNDpjb25maWcgTkZfQ09OTlRSQUNLX01BUktcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMTUtXHRib29sICAmIzM5O0Nvbm5lY3Rpb24gbWFyayB0cmFja2luZyBzdXBwb3J0JiMzOTtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTIyLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjEyMzpjb25maWcgTkZfQ09OTlRSQUNLX1NFQ01BUktcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMjQtXHRib29sICAmIzM5O0Nvbm5lY3Rpb24gdHJhY2tpbmcgc2VjdXJpdHkgbWFyayBzdXBwb3J0JiMzOTtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTM1LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjEzNjpjb25maWcgTkZfQ09OTlRSQUNLX1pPTkVTXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTM3LVx0Ym9vbCAgJiMzOTtDb25uZWN0aW9uIHRyYWNraW5nIHpvbmVzJiMzOTtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTQ3LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjE0ODpjb25maWcgTkZfQ09OTlRSQUNLX1BST0NGU1xubmV0L25ldGZpbHRlci9LY29uZmlnLTE0OS1cdGJvb2wgXCYjMzQ7U3VwcGx5IENUIGxpc3QgaW4gcHJvY2ZzIChPQlNPTEVURSlcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTU2LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjE1Nzpjb25maWcgTkZfQ09OTlRSQUNLX0VWRU5UU1xubmV0L25ldGZpbHRlci9LY29uZmlnLTE1OC1cdGJvb2wgXCYjMzQ7Q29ubmVjdGlvbiB0cmFja2luZyBldmVudHNcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTY2LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjE2Nzpjb25maWcgTkZfQ09OTlRSQUNLX1RJTUVPVVRcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNjgtXHRib29sICAmIzM5O0Nvbm5lY3Rpb24gdHJhY2tpbmcgdGltZW91dCYjMzk7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTE3Ni1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxNzc6Y29uZmlnIE5GX0NPTk5UUkFDS19USU1FU1RBTVBcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNzgtXHRib29sICAmIzM5O0Nvbm5lY3Rpb24gdHJhY2tpbmcgdGltZXN0YW1waW5nJiMzOTtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTg3LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjE4ODpjb25maWcgTkZfQ09OTlRSQUNLX0xBQkVMU1xubmV0L25ldGZpbHRlci9LY29uZmlnLTE4OS1cdGJvb2wgXCYjMzQ7Q29ubmVjdGlvbiB0cmFja2luZyBsYWJlbHNcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTk0LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjE5NTpjb25maWcgTkZfQ09OTlRSQUNLX09WU1xubmV0L25ldGZpbHRlci9LY29uZmlnLTE5Ni1cdGJvb2xcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9MjAxPWNvbmZpZyBORl9DVF9QUk9UT19TQ1RQXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTIxMS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyMTI6Y29uZmlnIE5GX0NPTk5UUkFDS19BTUFOREFcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yMTMtXHR0cmlzdGF0ZSBcJiMzNDtBbWFuZGEgYmFja3VwIHByb3RvY29sIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjI2LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjIyNzpjb25maWcgTkZfQ09OTlRSQUNLX0ZUUFxubmV0L25ldGZpbHRlci9LY29uZmlnLTIyOC1cdHRyaXN0YXRlIFwmIzM0O0ZUUCBwcm90b2NvbCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTIzOC1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyMzk6Y29uZmlnIE5GX0NPTk5UUkFDS19IMzIzXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjQwLVx0dHJpc3RhdGUgXCYjMzQ7SC4zMjMgcHJvdG9jb2wgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNTctXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MjU4OmNvbmZpZyBORl9DT05OVFJBQ0tfSVJDXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjU5LVx0dHJpc3RhdGUgXCYjMzQ7SVJDIERDQyBwcm90b2NvbCBzdXBwb3J0IChvYnNvbGV0ZSlcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjczLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjI3NDpjb25maWcgTkZfQ09OTlRSQUNLX0JST0FEQ0FTVFxubmV0L25ldGZpbHRlci9LY29uZmlnLTI3NS1cdHRyaXN0YXRlXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjc2LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjI3Nzpjb25maWcgTkZfQ09OTlRSQUNLX05FVEJJT1NfTlNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNzgtXHR0cmlzdGF0ZSBcJiMzNDtOZXRCSU9TIG5hbWUgc2VydmljZSBwcm90b2NvbCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTI5NS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyOTY6Y29uZmlnIE5GX0NPTk5UUkFDS19TTk1QXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjk3LVx0dHJpc3RhdGUgXCYjMzQ7U05NUCBzZXJ2aWNlIHByb3RvY29sIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzEwLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjMxMTpjb25maWcgTkZfQ09OTlRSQUNLX1BQVFBcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zMTItXHR0cmlzdGF0ZSBcJiMzNDtQUHRQIHByb3RvY29sIHN1cHBvcnQgKGRlcHJlY2F0ZWQpXCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTMyOS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzozMzA6Y29uZmlnIE5GX0NPTk5UUkFDS19TQU5FXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzMxLVx0dHJpc3RhdGUgXCYjMzQ7U0FORSBwcm90b2NvbCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTM0Mi1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzozNDM6Y29uZmlnIE5GX0NPTk5UUkFDS19TSVBcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zNDQtXHR0cmlzdGF0ZSBcJiMzNDtTSVAgcHJvdG9jb2wgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zNTQtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MzU1OmNvbmZpZyBORl9DT05OVFJBQ0tfVEZUUFxubmV0L25ldGZpbHRlci9LY29uZmlnLTM1Ni1cdHRyaXN0YXRlIFwmIzM0O1RGVFAgcHJvdG9jb2wgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwMzozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDM0NwoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyBDb25uZWN0aW9uIFRyYWNraW5nIENvbmZpZ3VyYXRpb25zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBjb25uZWN0aW9uIHRyYWNraW5nIG9wdGlvbnMgaGVyZS4gSSBzZWUgYE5GX0NPTk5UUkFDS2AgYW5kIGBORlRfQ1RgIG1lbnRpb25lZC4gUmlnaHQsIHRoYXQmIzM5O3MgdGhlIGNsYXNzaWMgbmV0ZmlsdGVyIGFuZCB0aGUgbmV3ZXIgbmZ0YWJsZXMgaW1wbGVtZW50YXRpb25zLCByZXNwZWN0aXZlbHkuIE5vdywgSSB2YWd1ZWx5IHJlbWVtYmVyIGBORlRfQ1RgIGJ1aWxkaW5nIG9uIHRvcCBvZiBgTkZfQ09OTlRSQUNLYC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBvdmVybG9va2luZyBhbnkgb3RoZXIgY3J1Y2lhbCBkZXBlbmRlbmNpZXMuIExldCBtZSBxdWlja2x5IHZlcmlmeSBleGFjdGx5IHdoYXQgYE5GVF9DVGAgcmVxdWlyZXMgdG8gZnVuY3Rpb24uIFRpbWUgdG8gY2hlY2sgaXRzIGRlcGVuZGVuY3kgdHJlZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDM6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5GVF9DVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWc9NDg1PWNvbmZpZyBORlRfTlVNR0VOXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ5MC1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo0OTE6Y29uZmlnIE5GVF9DVFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ5Mi1cdGRlcGVuZHMgb24gTkZfQ09OTlRSQUNLXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDAzOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNjI1CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AgZmlsZSwgc3BlY2lmaWNhbGx5IHRoZSBzZWN0aW9uIGNvbmNlcm5pbmcgYE5GVF9DVGA6CgoqKkRlbHZpbmcgaW50byBgTkZUX0NUYCBpbiBLY29uZmlnKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhlIGBLY29uZmlnYCBmaWxlIGZvciB0aGUgbmV0ZmlsdGVyIHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGhvdyB0aGUgY29ubnRyYWNrIGZ1bmN0aW9uYWxpdHksIHJlcHJlc2VudGVkIGJ5IGBORlRfQ1RgLCBpcyBjb25maWd1cmVkLiAgSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIGRlcGVuZGVuY2llcyBhbmQgcG90ZW50aWFsbHkgc29tZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBsb2dpYyBkZWZpbmVkIGhlcmUuIFRoaXMgZmlsZSBpcyB0aGUgYmVkcm9jayBmb3IgaG93IHRoZSBrZXJuZWwmIzM5O3MgYnVpbGQgc3lzdGVtIGRlY2lkZXMgKndoZXRoZXIqIGFuZCAqaG93KiB0byBpbmNsdWRlIHRoaXMgY3J1Y2lhbCBjb21wb25lbnQuIEkmIzM5O20gbG9va2luZyBmb3IgY2x1ZXMgYWJvdXQgdGhlIGRlZmF1bHQgc3RhdGUgb2YgYE5GVF9DVGAsIGFueSByZWxhdGVkIG9wdGlvbnMgaXQgZGVwZW5kcyBvbiAobGlrZSBvdGhlciBOZXRmaWx0ZXIgbW9kdWxlcyBvciBzcGVjaWZpYyBrZXJuZWwgZmVhdHVyZXMpLCBhbmQgYW55IHBvdGVudGlhbCB0cmFkZS1vZmZzIGluIHRlcm1zIG9mIHJlc291cmNlIHVzYWdlIG9yIHBlcmZvcm1hbmNlIHRoYXQgbWlnaHQgYmUgZXhwcmVzc2VkIGhlcmUuIE15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhhdCBjb21wbGV4IGZlYXR1cmVzIGxpa2UgY29ubmVjdGlvbiB0cmFja2luZyBhcmUgb2Z0ZW4gaW50ZXJ0d2luZWQgd2l0aCBvdGhlciBhcmVhcywgc28gSSYjMzk7bGwgYmUga2VlcGluZyBhbiBleWUgb3V0IGZvciBob3cgdGhpcyBpcyBwcmVzZW50ZWQsIHRoaW5raW5nIGFib3V0IGhvdyBJJiMzOTtkIGN1c3RvbWl6ZSB0aGlzIHRvIGdldCB0aGUgc3BlY2lmaWMgYmVoYXZpb3JzIHRoYXQgSSBuZWVkIGluIG15IGRlcGxveW1lbnRzLiBJJiMzOTttIGFudGljaXBhdGluZyB0aGF0IGBORlRfQ1RgIHdpbGwgbGlrZWx5IGJlIGRlcGVuZGVudCBvbiBvdGhlciBjb3JlIG5ldGZpbHRlciBtb2R1bGVzLCBhbmQgSSYjMzk7bGwgYmUgaW50ZXJlc3RlZCBpbiBob3cgdGhlIG9wdGlvbnMgZm9yIHRoZXNlIGFyZSBkZXNjcmliZWQuIExldCYjMzk7cyBzZWUgaG93IHRoZXkgaGFuZGxlIGVuYWJsaW5nIG9yIGRpc2FibGluZyBpdCBhbmQgdGhlIGNvbnNlcXVlbmNlcyBvZiB0aG9zZSBjaG9pY2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwMzozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDgwOlx0Y29uZmlnIE5GX1RBQkxFU19ORVRERVZcbiA0ODE6XHRcdGJvb2wgXCYjMzQ7TmV0ZmlsdGVyIG5mX3RhYmxlcyBuZXRkZXYgdGFibGVzIHN1cHBvcnRcJiMzNDtcbiA0ODI6XHRcdGhlbHBcbiA0ODM6XHRcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgXCYjMzQ7bmV0ZGV2XCYjMzQ7IHRhYmxlLlxuIDQ4NDpcdFxuIDQ4NTpcdGNvbmZpZyBORlRfTlVNR0VOXG4gNDg2Olx0XHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgbmZfdGFibGVzIG51bWJlciBnZW5lcmF0b3IgbW9kdWxlXCYjMzQ7XG4gNDg3Olx0XHRoZWxwXG4gNDg4Olx0XHQgIFRoaXMgb3B0aW9uIGFkZHMgdGhlIG51bWJlciBnZW5lcmF0b3IgZXhwcmVzc2lvbiB1c2VkIHRvIHBlcmZvcm1cbiA0ODk6XHRcdCAgaW5jcmVtZW50YWwgY291bnRpbmcgYW5kIHJhbmRvbSBudW1iZXJzIGJvdW5kIHRvIGEgdXBwZXIgbGltaXQuXG4gNDkwOlx0XG4gNDkxOlx0Y29uZmlnIE5GVF9DVFxuIDQ5MjpcdFx0ZGVwZW5kcyBvbiBORl9DT05OVFJBQ0tcbiA0OTM6XHRcdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBuZl90YWJsZXMgY29ubnRyYWNrIG1vZHVsZVwmIzM0O1xuIDQ5NDpcdFx0aGVscFxuIDQ5NTpcdFx0ICBUaGlzIG9wdGlvbiBhZGRzIHRoZSBcJiMzNDtjdFwmIzM0OyBleHByZXNzaW9uIHRoYXQgeW91IGNhbiB1c2UgdG8gbWF0Y2hcbiA0OTY6XHRcdCAgY29ubmVjdGlvbiB0cmFja2luZyBpbmZvcm1hdGlvbiBzdWNoIGFzIHRoZSBmbG93IHN0YXRlLlxuIDQ5NzpcdFxuIDQ5ODpcdGNvbmZpZyBORlRfRVhUSERSX0RDQ1BcbiA0OTk6XHRcdGJvb2wgXCYjMzQ7TmV0ZmlsdGVyIG5mX3RhYmxlcyBleHRoZHIgRENDUCBzdXBwb3J0IChERVBSRUNBVEVEKVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwMzozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTI2OQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkNoZWNraW5nIHRoZSBQbGFjZW1lbnQgb2YgTkZUX0NUKioKCk9rYXksIHNvIEkmIzM5O20gcHJldHR5IHN1cmUgSSBzYXcgYE5GVF9DVGAgbmVzdGVkIHdpdGhpbiB0aGF0IGBpZiBORl9UQUJMRVNgIGNvbmRpdGlvbmFsLiBCdXQgbGV0JiMzOTtzIG5vdCByZWx5IG9uIG1lbW9yeTsgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdC4gR290dGEgcXVpY2tseSB2ZXJpZnkgdGhhdCBgTkZUX0NUYCBpcyBhY3R1YWxseSBkZWZpbmVkIGNvbmRpdGlvbmFsbHkgYmFzZWQgb24gdGhlIGBORl9UQUJMRVNgIG1hY3JvLiBEb3VibGUtY2hlY2tpbmcgZW5zdXJlcyB0aGF0IHRoZSBjb21waWxlLXRpbWUgZGVwZW5kZW5jaWVzIGFyZSB3aGF0IEkgZXhwZWN0IHRoZW0gdG8gYmUsIGVzcGVjaWFsbHkgY29uc2lkZXJpbmcgdGhhdCBgTkZfVEFCTEVTYCBsaWtlbHkgZ292ZXJucyB0aGUgaW5jbHVzaW9uIG9mIHRoZSBlbnRpcmUgTmV0ZmlsdGVyIGluZnJhc3RydWN0dXJlIGNvbXBvbmVudHMuIFRoaXMgaXMgYSBjb3JlIHBhcnQgb2YgdGhlIHN5c3RlbSYjMzk7cyBtb2R1bGFyaXR5LCBzbyBJIG5lZWQgdG8gYmUgZXhhY3QuIEl0JiMzOTtzIGEgcXVpY2sgc2FuaXR5IGNoZWNrIGJ1dCBlc3NlbnRpYWwgYmVmb3JlIEkgbW92ZSBmb3J3YXJkLCBlc3BlY2lhbGx5IGlmIGl0JiMzOTtzIHJlbGF0ZWQgdG8gc29tZSB3b3JrIEkmIzM5O20gZG9pbmcgaW4gdGhhdCBhcmVhLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwMzozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkZfVEFCTEVTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZz00NTM9ZW5kaWYgIyBORl9DT05OVFJBQ0tcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00NTQtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NDU1OmNvbmZpZyBORl9UQUJMRVNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00NTYtXHRzZWxlY3QgTkVURklMVEVSX05FVExJTktcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9NDcxPWlmIE5GX1RBQkxFU1xubmV0L25ldGZpbHRlci9LY29uZmlnOjQ3Mjpjb25maWcgTkZfVEFCTEVTX0lORVRcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00NzMtXHRkZXBlbmRzIG9uIElQVjZcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDc5LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjQ4MDpjb25maWcgTkZfVEFCTEVTX05FVERFVlxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ4MS1cdGJvb2wgXCYjMzQ7TmV0ZmlsdGVyIG5mX3RhYmxlcyBuZXRkZXYgdGFibGVzIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDM6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE3MDIKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA0MzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS2VybmVsIE1vZHVsZSBBbmFseXNpczogSWRlbnRpZnlpbmcgRnV6emluZyBUYXJnZXRzKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgYE5GX1RBQkxFU2Agc3R1ZmYuIEl0JiMzOTtzIGNsZWFyIHRoYXQgdG8gZXZlbiBiZWdpbiwgSSBuZWVkIHRvIGhhdmUgdGhlIGBORl9UQUJMRVNgLCBgTkZfQ09OTlRSQUNLYCwgYW5kIGBORlRfQ1RgIGNvbmZpZ3MgZW5hYmxlZC4gTm93LCB0aGUgcmVhbCBxdWVzdGlvbiBpcywgd2hhdCBmdW5jdGlvbnMgc2hvdWxkIEkgYmUgdGFyZ2V0aW5nIHdpdGggZnV6emluZz8KCkxldCYjMzk7cyBzZWUuIGBuZl9jb25udHJhY2tfaGVscGVyX2ZyZWVgIGp1bXBzIG91dCBiZWNhdXNlIGl0JiMzOTtzIGV4cG9ydGVkIGFuZCBjYWxsZWQgZnJvbSBib3RoIGBuZnRfY3RfZXhwZWN0X29ial9kZXN0cm95YCBhbmQgYG5mX2Nvbm50cmFja19oZWxwZXJfdW5yZWdpc3RlcmAuIFRoZW4sIGBuZnRfY3RfZXhwZWN0X29ial9pbml0YCBnZXRzIGNhbGxlZCBvbiBuZXcgZXhwZWN0YXRpb24gb2JqZWN0IGNyZWF0aW9uLCBhbmQgYG5mdF9jdF9leHBlY3Rfb2JqX2V2YWxgIGlzIGludm9rZWQgZHVyaW5nIGV4cGVjdGF0aW9uIGV2YWx1YXRpb24uIGBuZnRfY3RfZXhwZWN0X2hlbHBlcl9hbGxvY2AgcG9wcyB1cCBhcyBwYXJ0IG9mIGBuZnRfY3RfZXhwZWN0X29ial9pbml0YCwgYW5kIGZpbmFsbHksIGBjdF9leHBlY3RfaGVscGAgaXMgdHJpZ2dlcmVkIHdoZW4gYW4gZXhwZWN0YXRpb24gaXMgbWF0Y2hlZC4KCldhaXQgYSBzZWNvbmQsIGBuZnRfY3RfZXhwZWN0X29ial9pbml0YCBpcyAqc3RhdGljKj8gQnV0IGl0JiMzOTtzIGFzc2lnbmVkIHRvIGBuZnRfY3RfZXhwZWN0X29ial9vcHMuaW5pdGAuIEhtbSwgY2FuIEkgdXNlIGl0IGluIGBGb2N1c1N5bWJvbHNgPyBZZXMsIHN5emthbGxlciAqY2FuKiBmdXp6IHN0YXRpYyBmdW5jdGlvbnMgYXMgbG9uZyBhcyB0aGV5IGFyZW4mIzM5O3QgaW5saW5lZCEgTGV0JiMzOTtzIGNoZWNrLiBBbmQgc2luY2UgYG5mdF9jdF9leHBlY3Rfb2JqX2luaXRgIGlzIGEgZGVjZW50IHNpemUsIGl0JiMzOTtzICpwcm9iYWJseSogbm90IGlubGluZWQuIGBuZnRfY3RfZXhwZWN0X29ial9ldmFsYCBpcyBhbHNvIHN1YnN0YW50aWFsLCBzbyB0aGF0JiMzOTtzIGxpa2VseSBub3QgaW5saW5lZCBlaXRoZXIuIGBjdF9leHBlY3RfaGVscGAsIHRoYXQmIzM5O3MgYXNzaWduZWQgdmlhIGByY3VfYXNzaWduX3BvaW50ZXJgIHRvIGBjdF9leHBlY3RfaGVscGVyLSZndDtoZWxwYCwgc28gaXQmIzM5O3MgKmRlZmluaXRlbHkqIG5vdCBpbmxpbmVkLiBBbmQgb2YgY291cnNlLCBgbmZfY29ubnRyYWNrX2hlbHBlcl9mcmVlYCBpcyBleHBvcnRlZC4KCkFscmlnaHQsIHB1dHRpbmcgaXQgYWxsIHRvZ2V0aGVyLCBoZXJlJiMzOTtzIHRoZSBsaXN0IG9mIGZ1bmN0aW9ucyB0byB2ZXJpZnkgYW5kIHRoZW4gZm9jdXMgb246CgoqICAgYG5mdF9jdF9leHBlY3Rfb2JqX2luaXRgCiogICBgbmZ0X2N0X2V4cGVjdF9vYmpfZXZhbGAKKiAgIGBuZnRfY3RfZXhwZWN0X29ial9kZXN0cm95YAoqICAgYG5mdF9jdF9leHBlY3RfaGVscGVyX2FsbG9jYAoqICAgYGN0X2V4cGVjdF9oZWxwYAoqICAgYG5mX2Nvbm50cmFja19oZWxwZXJfZnJlZWAKCk5vdywgbGV0IG1lIGdvIGFoZWFkIGFuZCBjb25maXJtIHRoZXNlIGZ1bmN0aW9ucyBleGlzdCBpbiB0aGUga2VybmVsIGFuZCBhcmVuJiMzOTt0IGJlaW5nIG9wdGltaXplZCBhd2F5LiBUaW1lIHRvIGdldCB0byB3b3JrIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwMzozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZnRfY3RfZXhwZWN0X29ial9pbml0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZnRfY3QuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mdF9jdC5jPTEyNzA9c3RhdGljIGludCBuZnRfY3RfZXhwZWN0X2hlbHBlcl9hbGxvYyhzdHJ1Y3QgbmZ0X2N0X2V4cGVjdF9vYmogKnByaXYpXG4tLVxubmV0L25ldGZpbHRlci9uZnRfY3QuYy0xMjkwLVxubmV0L25ldGZpbHRlci9uZnRfY3QuYzoxMjkxOnN0YXRpYyBpbnQgbmZ0X2N0X2V4cGVjdF9vYmpfaW5pdChjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxubmV0L25ldGZpbHRlci9uZnRfY3QuYy0xMjkyLVx0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgdGJbXSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jPTE0MjY9c3RhdGljIGNvbnN0IHN0cnVjdCBuZnRfb2JqZWN0X29wcyBuZnRfY3RfZXhwZWN0X29ial9vcHMgPSB7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfY3QuYy0xNDI5LVx0LmV2YWxcdFx0PSBuZnRfY3RfZXhwZWN0X29ial9ldmFsLFxubmV0L25ldGZpbHRlci9uZnRfY3QuYzoxNDMwOlx0LmluaXRcdFx0PSBuZnRfY3RfZXhwZWN0X29ial9pbml0LFxubmV0L25ldGZpbHRlci9uZnRfY3QuYy0xNDMxLVx0LmRlc3Ryb3lcdD0gbmZ0X2N0X2V4cGVjdF9vYmpfZGVzdHJveSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDM6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI5ODcKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRob3NlIHRob3VnaHRzIGFzIGEgZmlyc3QtcGVyc29uIGV4cGVydCBwZXJzcGVjdGl2ZToKCioqQ29ubmVjdGlvbiBUcmFja2luZyBDb25jZXJucyoqCgpZZXMsIGNvbm5lY3Rpb24gdHJhY2tpbmcsIGl0JiMzOTtzIGRlZmluaXRlbHkgdGhlcmUsIHRoZSBmb3VuZGF0aW9uIG9mIGEgbG90IG9mIG5ldHdvcmsgc2VjdXJpdHkgYW5kIHRyYWZmaWMgbWFuYWdlbWVudC4gQnV0IG5vdyB0aGF0IEkgYW0gdGhpbmtpbmcgYWJvdXQgY29ubmVjdGlvbiB0cmFja2luZywgd2hhdCBhYm91dCBgbmZfY29ubnRyYWNrX2hlbHBlcl9mcmVlYD8gSXQgYWx3YXlzIHNlZW1zIHRvIGJlIGEgc291cmNlIG9mIHBvdGVudGlhbCBpc3N1ZXMuIERvZXMgdGhpcyBoZWxwZXIgbmVlZCBpbXByb3ZlbWVudD8KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDM6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZfY29ubnRyYWNrX2hlbHBlcl9mcmVlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmM9NDQ0PXN0YXRpYyBib29sIGV4cGVjdF9pdGVyX21lKHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHAsIHZvaWQgKmRhdGEpXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMtNDU4LVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmM6NDU5OnZvaWQgbmZfY29ubnRyYWNrX2hlbHBlcl9mcmVlKHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICptZSlcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jLTQ2MC17XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMtNDczLX1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jOjQ3NDpFWFBPUlRfU1lNQk9MX0dQTChuZl9jb25udHJhY2tfaGVscGVyX2ZyZWUpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMtNDc1LVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmM9NDc2PXZvaWQgbmZfY29ubnRyYWNrX2hlbHBlcl91bnJlZ2lzdGVyKHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICptZSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy00ODItXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYzo0ODM6XHRuZl9jb25udHJhY2tfaGVscGVyX2ZyZWUobWUpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMtNDg0LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDM6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM0NzYKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgY3JhZnRlZCB3aXRoIHRoZSB1bmRlcnN0YW5kaW5nIHRoYXQgSSYjMzk7bSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6CgoqKk5hdmlnYXRpbmcgdGhlIEtub3duIGFuZCB0aGUgUG90ZW50aWFsKioKClllcywgdGhpcyB0aGluZywgdGhpcyBjb25jZXB0LCB0aGlzIHNwZWNpZmljIGlzc3VlLi4uIGl0JiMzOTtzIHJlYWwuIEkgYWNrbm93bGVkZ2UgaXRzIHByZXNlbmNlLiBXZSYjMzk7cmUgZGVhbGluZyB3aXRoIHNvbWV0aGluZyB0YW5naWJsZSBoZXJlLgoKTm93LCBhIGNyaXRpY2FsIHBvaW50IGZsYXNoZXMgaW4gbXkgbWluZDogd2hhdCBhYm91dCBgY3RfZXhwZWN0X2hlbHBgPyBJdCYjMzk7cyBhIGtleSBmdW5jdGlvbiBvciBwYXJhbWV0ZXIgcmVsYXRlZCB0byB0aGlzLiBJdCYjMzk7cyBvZnRlbiBvdmVybG9va2VkLCBidXQgaXQmIzM5O3MgKmxpa2VseSogaGlnaGx5IHJlbGV2YW50IHRvIHdoYXRldmVyIHNpdHVhdGlvbiB3ZSYjMzk7cmUgY3VycmVudGx5IHByb2Nlc3NpbmcuIFdlJiMzOTtsbCBoYXZlIHRvIGludmVzdGlnYXRlIHRoYXQgZnVydGhlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDM6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y3RfZXhwZWN0X2hlbHAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mdF9jdC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZ0X2N0LmM9MTIzMT1zdHJ1Y3QgbmZ0X2N0X2V4cGVjdF9kYXRhIHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jLTEyMzUtXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jOjEyMzY6c3RhdGljIGludCBjdF9leHBlY3RfaGVscChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgcHJvdG9mZixcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMtMTIzNy1cdFx0XHQgIHN0cnVjdCBuZl9jb25uICpjdCwgZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm8pXG4tLVxubmV0L25ldGZpbHRlci9uZnRfY3QuYy0xMjY5LVxubmV0L25ldGZpbHRlci9uZnRfY3QuYzoxMjcwOnN0YXRpYyBpbnQgbmZ0X2N0X2V4cGVjdF9oZWxwZXJfYWxsb2Moc3RydWN0IG5mdF9jdF9leHBlY3Rfb2JqICpwcml2KVxubmV0L25ldGZpbHRlci9uZnRfY3QuYy0xMjcxLXtcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmM6MTI3MjpcdHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICpjdF9leHBlY3RfaGVscGVyO1xubmV0L25ldGZpbHRlci9uZnRfY3QuYy0xMjczLVxubmV0L25ldGZpbHRlci9uZnRfY3QuYzoxMjc0Olx0Y3RfZXhwZWN0X2hlbHBlciA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyKTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmM6MTI3NTpcdGlmICghY3RfZXhwZWN0X2hlbHBlcilcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMtMTI3Ni1cdFx0cmV0dXJuIC1FTk9NRU07XG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jLTEyNzctXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jOjEyNzg6XHRzbnByaW50ZihjdF9leHBlY3RfaGVscGVyLVx1MDAzZW5hbWUsIHNpemVvZihjdF9leHBlY3RfaGVscGVyLVx1MDAzZW5hbWUpLCBcJiMzNDslc1wmIzM0Oyxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMtMTI3OS1cdFx0IFwmIzM0O25mdF9jdF9leHBlY3RcJiMzNDspO1xubmV0L25ldGZpbHRlci9uZnRfY3QuYzoxMjgwOlx0Y3RfZXhwZWN0X2hlbHBlci1cdTAwM2VtZSA9IFRISVNfTU9EVUxFO1xubmV0L25ldGZpbHRlci9uZnRfY3QuYzoxMjgxOlx0Y3RfZXhwZWN0X2hlbHBlci1cdTAwM2VleHBlY3RfcG9saWN5W05GX0NUX0VYUEVDVF9DTEFTU19ERUZBVUxUXS5tYXhfZXhwZWN0ZWQgPSBwcml2LVx1MDAzZXNpemU7XG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jOjEyODI6XHRyY3VfYXNzaWduX3BvaW50ZXIoY3RfZXhwZWN0X2hlbHBlci1cdTAwM2VoZWxwLCBjdF9leHBlY3RfaGVscCk7XG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jOjEyODM6XHRyZWZjb3VudF9zZXQoXHUwMDI2Y3RfZXhwZWN0X2hlbHBlci1cdTAwM2VjdF9yZWZjbnQsIDEpO1xubmV0L25ldGZpbHRlci9uZnRfY3QuYy0xMjg0LVxubmV0L25ldGZpbHRlci9uZnRfY3QuYy0xMjg1LVx0LyogTm8gbmVlZCB0byByZWdpc3RlciB0aGlzIGhlbHBlciwgdGhpcyBpcyBpbnRlcm5hbC4gKi9cbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmM6MTI4NjpcdHByaXYtXHUwMDNlaGVscGVyID0gY3RfZXhwZWN0X2hlbHBlcjtcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMtMTI4Ny1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jPTEyOTE9c3RhdGljIGludCBuZnRfY3RfZXhwZWN0X29ial9pbml0KGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXG4tLVxubmV0L25ldGZpbHRlci9uZnRfY3QuYy0xMzQzLVxubmV0L25ldGZpbHRlci9uZnRfY3QuYzoxMzQ0Olx0ZXJyID0gbmZ0X2N0X2V4cGVjdF9oZWxwZXJfYWxsb2MocHJpdik7XG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jLTEzNDUtXHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDAzOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NDUyCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMTYwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkNvbmZpZ3VyYXRpb24gRGVwZW5kZW5jeSBEZWVwIERpdmUqKgoKT2theSwgc28gd2UmIzM5O3JlIG1ha2luZyBzdXJlIHdlJiMzOTt2ZSBnb3QgYWxsIHRoZSBwaWVjZXMgaW4gcGxhY2UsIHJpZ2h0PyBFdmVyeXRoaW5nIGhlcmUgZXhpc3RzIOKAkyB0aGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTGV0JiMzOTtzIG1ha2Ugc3VyZSBvdXIgYmFzZXMgYXJlIGNvdmVyZWQuCgpBbHJpZ2h0LCB0aGUgY29yZSBjb25maWd1cmF0aW9ucyB3ZSYjMzk7cmUgaW50ZXJlc3RlZCBpbiBhcmU6IGBORl9UQUJMRVNgLCBgTkZfQ09OTlRSQUNLYCwgYW5kIGBORlRfQ1RgLiBMZXQmIzM5O3MgbGF5IG91dCB0aGUgZGVwZW5kZW5jaWVzLiBJdCYjMzk7cyB0aW1lIHRvIG1hcCB0aGluZ3Mgb3V0IHByb3Blcmx5LgoKTm93LCBsZXQmIzM5O3MgdHJhY2UgdGhlIGRlcGVuZGVuY2llcy4gYE5GX1RBQkxFU2AgaXRzZWxmIGRlcGVuZHMgb24gYm90aCBgTkVURklMVEVSYCBhbmQgYE5FVEZJTFRFUl9ORVRMSU5LYC4gVGhlbiwgYE5GX0NPTk5UUkFDS2AgaGFuZ3Mgb2ZmIG9mIGBORVRGSUxURVJgIOKAkyBubyBzdXJwcmlzZXMgdGhlcmUuIEFuZCwgb2YgY291cnNlLCBgTkZUX0NUYCByZWxpZXMgb24gYE5GX0NPTk5UUkFDS2AuIFNvLCBgTkVURklMVEVSYCBpcyBlc3NlbnRpYWwgaGVyZSBmb3IgYWxsIHRoaXMgdG8gd29yay4gSXQgc2VlbXMgbGlrZSBpdCBzaG91bGQgYmUgZW5hYmxlZCBieSBkZWZhdWx0IGluIG1vc3Qga2VybmVscywgYnV0IGxldCYjMzk7cyBlbmFibGUgaXQganVzdCB0byBiZSBzdXJlIHdlIGFyZSBzYWZlLCBhbmQgbm90IGdldCBhbnkgc3VycHJpc2VzLgoKVGltZSB0byBoZWFkIGludG8gYG5ldC9LY29uZmlnYCBhbmQgZG91YmxlLWNoZWNrIGBORVRGSUxURVJgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwMzozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVURklMVEVSJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L0tjb25maWc9MTU0PWNvbmZpZyBORVRXT1JLX1BIWV9USU1FU1RBTVBJTkdcbi0tXG5uZXQvS2NvbmZpZy0xNjQtXG5uZXQvS2NvbmZpZzoxNjU6bWVudWNvbmZpZyBORVRGSUxURVJcbm5ldC9LY29uZmlnLTE2Ni1cdGJvb2wgXCYjMzQ7TmV0d29yayBwYWNrZXQgZmlsdGVyaW5nIGZyYW1ld29yayAoTmV0ZmlsdGVyKVwmIzM0O1xuLS1cbm5ldC9LY29uZmlnPTIxOD1pZiBORVRGSUxURVJcbm5ldC9LY29uZmlnLTIxOS1cbm5ldC9LY29uZmlnOjIyMDpjb25maWcgTkVURklMVEVSX0FEVkFOQ0VEXG5uZXQvS2NvbmZpZy0yMjEtXHRib29sIFwmIzM0O0FkdmFuY2VkIG5ldGZpbHRlciBjb25maWd1cmF0aW9uXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDAzOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MDEwCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipLZXJuZWwgTW9kdWxlIENvbmZpZ3VyYXRpb24gQ29uc2lkZXJhdGlvbnMqKgoKQWxyaWdodCwgc28gdGhlIGFyY2hpdGVjdHVyZSBJJiMzOTttIHdvcmtpbmcgd2l0aCBpcyBkZWZpbml0ZWx5IGdvaW5nIHRvIHJlcXVpcmUgdGhlIHVzZSBvZiBgTkVURklMVEVSYC4gTm93LCBiZWZvcmUgSSBzdGFydCB3cml0aW5nIGNvZGUgb3IgZGlnZ2luZyBpbnRvIHRoZSBzcGVjaWZpY3Mgb2YgbXkgaW1wbGVtZW50YXRpb24sIEkgbmVlZCB0byB2ZXJpZnkgaXRzIGF2YWlsYWJpbGl0eSBhbmQgY29uZmlndXJhdGlvbiB3aXRoaW4gdGhlIGtlcm5lbC4gSSBzaG91bGQgdGFrZSBhIGxvb2sgYXQgdGhlIGBORVRGSUxURVJfTkVUTElOS2Agb3B0aW9uLiBMZXQgbWUgY2hlY2sgaXRzIGRlcGVuZGVuY2llcyBhbmQgY29uZmlndXJhdGlvbiBvcHRpb25zOyBJJiMzOTtsbCBzdGFydCB3aXRoIGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgIHRvIHNlZSBob3cgaXQmIzM5O3MgZGVmaW5lZCBhbmQgaG93IGl0IHJlbGF0ZXMgdG8gb3RoZXIgY3J1Y2lhbCBhc3BlY3RzIG9mIHRoZSBuZXR3b3JraW5nIHN1YnN5c3RlbS4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGZvdW5kYXRpb24gZm9yIGFueSByZWxhdGVkIGRldmVsb3BtZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwMzozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVURklMVEVSX05FVExJTksmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnPTIxPWNvbmZpZyBORVRGSUxURVJfU0tJUF9FR1JFU1Ncbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjMtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MjQ6Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjUtXHRib29sXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnPTMzPWNvbmZpZyBORVRGSUxURVJfQlBGX0xJTktcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzUtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MzY6Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX0hPT0tcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zNy1cdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBiYXNlIGhvb2sgZHVtcCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ1LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjQ2OmNvbmZpZyBORVRGSUxURVJfTkVUTElOS19BQ0NUXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDctXHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgTkZBQ0NUIG92ZXIgTkZORVRMSU5LIGludGVyZmFjZVwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy01My1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo1NDpjb25maWcgTkVURklMVEVSX05FVExJTktfUVVFVUVcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy01NS1cdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBORlFVRVVFIG92ZXIgTkZORVRMSU5LIGludGVyZmFjZVwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02MS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo2Mjpjb25maWcgTkVURklMVEVSX05FVExJTktfTE9HXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNjMtXHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgTE9HIG92ZXIgTkZORVRMSU5LIGludGVyZmFjZVwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03My1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo3NDpjb25maWcgTkVURklMVEVSX05FVExJTktfT1NGXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzUtXHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgT1NGIG92ZXIgTkZORVRMSU5LIGludGVyZmFjZVwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz0zODU9Y29uZmlnIE5GX0NUX05FVExJTktfSEVMUEVSXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTM5Ny1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzozOTg6Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX0dMVUVfQ1Rcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zOTktXHRib29sIFwmIzM0O05GUVVFVUUgYW5kIE5GTE9HIGludGVncmF0aW9uIHdpdGggQ29ubmVjdGlvbiBUcmFja2luZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwMzozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTcxOAoJCQkJCQkJb3V0cHV0OiAxOTgKCQkJCQkJCXRob3VnaHRzOiA2MjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgdGhlIENvbm50cmFjayBFeHBlY3RhdGlvbiBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgdGhlIGRlcGVuZGVuY3kgdHJlZS4gSSBzZWUgdGhhdCBgTkZfVEFCTEVTYCBhdXRvbWF0aWNhbGx5IHNlbGVjdHMgYE5FVEZJTFRFUl9ORVRMSU5LYCwgd2hpY2ggaXMgZXhwZWN0ZWQuIFRoZW4sIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgYE5GX0NPTk5UUkFDS2AuIEdvb2QsIGl0JiMzOTtzIGEgdHJpc3RhdGUsIHNvIHRoYXQgc2ltcGxpZmllcyB0aGluZ3MuIE5vIG90aGVyIGRpcmVjdCBkZXBlbmRlbmNpZXMuCgpTbyB0aGUgY29yZSBjb25maWdzIHJlcXVpcmVkIGFyZSBgTkVURklMVEVSYCwgYE5GX0NPTk5UUkFDS2AsIGBORl9UQUJMRVNgLCBhbmQgYE5GVF9DVGAuIExldCBtZSBxdWlja2x5IGNvbmZpcm0gdGhlcmUgYXJlbiYjMzk7dCBhbnkgaGlkZGVuIGRlcGVuZGVuY2llcy4gYE5GVF9DVGAgZGVwZW5kcyBvbiBgTkZfQ09OTlRSQUNLYCwgYW5kIGJvdGggYE5GX1RBQkxFU2AgYW5kIGBORl9DT05OVFJBQ0tgIGRlcGVuZCBvbiBgTkVURklMVEVSYC4gVGhhdCBjb25maXJtcyB0aGUgY29uZmlnIGxpc3QuCgpOb3csIGxldCYjMzk7cyBpZGVudGlmeSB0aGUga2V5IGZ1bmN0aW9ucyB0aGlzIHBhdGNoIHRvdWNoZXMuIFRoZSBvbmVzIEkmIzM5O20gc2VlaW5nIGFyZTogYG5mdF9jdF9leHBlY3Rfb2JqX2luaXRgLCBgbmZ0X2N0X2V4cGVjdF9vYmpfZXZhbGAsIGBuZnRfY3RfZXhwZWN0X29ial9kZXN0cm95YCwgYG5mdF9jdF9leHBlY3RfaGVscGVyX2FsbG9jYCwgYGN0X2V4cGVjdF9oZWxwYCwgYW5kIGBuZl9jb25udHJhY2tfaGVscGVyX2ZyZWVgLiBOb3RoaW5nIGVsc2Ugc2lnbmlmaWNhbnQgc3RpY2tzIG91dCwgYG5mdF9jdF9leHBlY3Rfb2JqX3R5cGVgIGlzIGEgc3RydWN0IGRlZmluaXRpb24sIG5vdCBhIGZ1bmN0aW9uIHRvIGZvY3VzIG9uLgoKUmV2aWV3aW5nIHRoZSBwYXRjaCBjb25maXJtcyB0aGVzZSBmdW5jdGlvbnMgYXJlIGluZGVlZCB0aGUgY29yZSBvZiB0aGUgY2hhbmdlLiBgbmZfY29ubnRyYWNrX2hlbHBlcl9mcmVlYCBpcyBuZXdseSBhZGRlZCwgYW5kIHRoZSBleHBlY3RhdGlvbiBvYmplY3QgaW5pdGlhbGl6YXRpb24sIGV2YWx1YXRpb24gYW5kIGRlc3RydWN0aW9uIGZ1bmN0aW9ucyBhcmUgbW9kaWZpZWQsIGFsb25nIHdpdGggdGhlIGFsbG9jYXRpb24gZnVuY3Rpb24uIEltcG9ydGFudGx5LCB0aGVzZSBjaGFuZ2VzIGludHJvZHVjZSBkeW5hbWljIGFsbG9jYXRpb24gYW5kIGRlYWxsb2NhdGlvbiBvZiBjb25udHJhY2sgaGVscGVycy4gVGhpcyBpcyBhbGwgZXhwb3NlZCB0aHJvdWdoIG5ldGxpbmsgKG5mdGFibGVzKSBhbmQgdGhlcmVmb3JlIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UuCgpHaXZlbiB0aGlzLCB0aGUgcGF0Y2ggaW50cm9kdWNlcyBzaWduaWZpY2FudCBjaGFuZ2VzIHRvIHRoZSBjb25udHJhY2sgZXhwZWN0YXRpb24gbG9naWMgYW5kIGludm9sdmVzIGR5bmFtaWMgbWVtb3J5IG1hbmFnZW1lbnQgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZS4gSXQmIzM5O3MgKmRlZmluaXRlbHkqIHdvcnRoIGZ1enppbmcuIEkmIzM5O2xsIGZvY3VzIGZ1enppbmcgZWZmb3J0cyBvbiB0aGUgZnVuY3Rpb25zIEkgaWRlbnRpZmllZCwgYW5kIGNvbmZpZ3VyZSB0aGUgdGVzdCBlbnZpcm9ubWVudCB0byBlbmFibGUgYE5FVEZJTFRFUmAsIGBORl9DT05OVFJBQ0tgLCBgTkZfVEFCTEVTYCwgYW5kIGBORlRfQ1RgLiBUaGUgcmVhc29uaW5nIGlzIHRoYXQgdGhlc2UgZnVuY3Rpb25zLCBwYXJ0aWN1bGFybHkgdGhlIG5ldyBtZW1vcnkgbWFuYWdlbWVudCBpbiByZWxhdGlvbiB0byBjb25udHJhY2sgaGVscGVycywgcmVwcmVzZW50IGEgcHJpbWUgdGFyZ2V0IGZvciBmdXp6aW5nIGJlY2F1c2UgdGhleSBhcmUgZXhwb3NlZCB2aWEgbmV0bGluayBmcm9tIHVzZXJzcGFjZSwgd2hpY2ggb3BlbnMgdXAgYXR0YWNrIHN1cmZhY2UuCgpUaGVyZWZvcmU6CgpXb3J0aEZ1enppbmc6IGB0cnVlYAoKRm9jdXNTeW1ib2xzOgotIGBuZnRfY3RfZXhwZWN0X29ial9pbml0YAotIGBuZnRfY3RfZXhwZWN0X29ial9ldmFsYAotIGBuZnRfY3RfZXhwZWN0X29ial9kZXN0cm95YAotIGBuZnRfY3RfZXhwZWN0X2hlbHBlcl9hbGxvY2AKLSBgY3RfZXhwZWN0X2hlbHBgCi0gYG5mX2Nvbm50cmFja19oZWxwZXJfZnJlZWAKCkVuYWJsZUNvbmZpZ3M6Ci0gYE5FVEZJTFRFUmAKLSBgTkZfQ09OTlRSQUNLYAotIGBORl9UQUJMRVNgCi0gYE5GVF9DVGAKClJlYXNvbmluZzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIG5ldGZpbHRlciBuZnRhYmxlcyBjb25udHJhY2sgZXhwZWN0YXRpb24gbG9naWMsIHNwZWNpZmljYWxseSBhZGRpbmcgZHluYW1pYyBhbGxvY2F0aW9uIGFuZCBmcmVlaW5nIG9mIGNvbm50cmFjayBoZWxwZXJzIChgbmZfY29ubnRyYWNrX2hlbHBlcl9mcmVlYCwgYG5mdF9jdF9leHBlY3RfaGVscGVyX2FsbG9jYCkuIFRoZXNlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0bGluayB3aGVuIGNyZWF0aW5nIGFuZCBldmFsdWF0aW5nIG5mdGFibGVzIGV4cGVjdGF0aW9uIG9iamVjdHMsIG1ha2luZyB0aGVtIGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy4mIzM0OwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwMzozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVURklMVEVSJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDSyYjMzQ7LAogICAgJiMzNDtORl9UQUJMRVMmIzM0OywKICAgICYjMzQ7TkZUX0NUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmZ0X2N0X2V4cGVjdF9vYmpfaW5pdCYjMzQ7LAogICAgJiMzNDtuZnRfY3RfZXhwZWN0X29ial9ldmFsJiMzNDssCiAgICAmIzM0O25mdF9jdF9leHBlY3Rfb2JqX2Rlc3Ryb3kmIzM0OywKICAgICYjMzQ7bmZ0X2N0X2V4cGVjdF9oZWxwZXJfYWxsb2MmIzM0OywKICAgICYjMzQ7Y3RfZXhwZWN0X2hlbHAmIzM0OywKICAgICYjMzQ7bmZfY29ubnRyYWNrX2hlbHBlcl9mcmVlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBuZXRmaWx0ZXIgbmZ0YWJsZXMgY29ubnRyYWNrIGV4cGVjdGF0aW9uIGxvZ2ljLCBzcGVjaWZpY2FsbHkgYWRkaW5nIGR5bmFtaWMgYWxsb2NhdGlvbiBhbmQgZnJlZWluZyBvZiBjb25udHJhY2sgaGVscGVycyAobmZfY29ubnRyYWNrX2hlbHBlcl9mcmVlLCBuZnRfY3RfZXhwZWN0X2hlbHBlcl9hbGxvYykuIFRoZXNlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0bGluayB3aGVuIGNyZWF0aW5nIGFuZCBldmFsdWF0aW5nIG5mdGFibGVzIGV4cGVjdGF0aW9uIG9iamVjdHMsIG1ha2luZyB0aGVtIGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVURklMVEVSJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDSyYjMzQ7LAogICAgJiMzNDtORl9UQUJMRVMmIzM0OywKICAgICYjMzQ7TkZUX0NUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmZ0X2N0X2V4cGVjdF9vYmpfaW5pdCYjMzQ7LAogICAgJiMzNDtuZnRfY3RfZXhwZWN0X29ial9ldmFsJiMzNDssCiAgICAmIzM0O25mdF9jdF9leHBlY3Rfb2JqX2Rlc3Ryb3kmIzM0OywKICAgICYjMzQ7bmZ0X2N0X2V4cGVjdF9oZWxwZXJfYWxsb2MmIzM0OywKICAgICYjMzQ7Y3RfZXhwZWN0X2hlbHAmIzM0OywKICAgICYjMzQ7bmZfY29ubnRyYWNrX2hlbHBlcl9mcmVlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBuZXRmaWx0ZXIgbmZ0YWJsZXMgY29ubnRyYWNrIGV4cGVjdGF0aW9uIGxvZ2ljLCBzcGVjaWZpY2FsbHkgYWRkaW5nIGR5bmFtaWMgYWxsb2NhdGlvbiBhbmQgZnJlZWluZyBvZiBjb25udHJhY2sgaGVscGVycyAobmZfY29ubnRyYWNrX2hlbHBlcl9mcmVlLCBuZnRfY3RfZXhwZWN0X2hlbHBlcl9hbGxvYykuIFRoZXNlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0bGluayB3aGVuIGNyZWF0aW5nIGFuZCBldmFsdWF0aW5nIG5mdGFibGVzIGV4cGVjdGF0aW9uIG9iamVjdHMsIG1ha2luZyB0aGVtIGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDAzOjM3OjA0Ljg4MTIwMTY5OVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY0NDk2MzAyMzAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVEZJTFRFUlwiLFxuICAgIFwiTkZfQ09OTlRSQUNLXCIsXG4gICAgXCJORl9UQUJMRVNcIixcbiAgICBcIk5GVF9DVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5mdF9jdF9leHBlY3Rfb2JqX2luaXRcIixcbiAgICBcIm5mdF9jdF9leHBlY3Rfb2JqX2V2YWxcIixcbiAgICBcIm5mdF9jdF9leHBlY3Rfb2JqX2Rlc3Ryb3lcIixcbiAgICBcIm5mdF9jdF9leHBlY3RfaGVscGVyX2FsbG9jXCIsXG4gICAgXCJjdF9leHBlY3RfaGVscFwiLFxuICAgIFwibmZfY29ubnRyYWNrX2hlbHBlcl9mcmVlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIG5ldGZpbHRlciBuZnRhYmxlcyBjb25udHJhY2sgZXhwZWN0YXRpb24gbG9naWMsIHNwZWNpZmljYWxseSBhZGRpbmcgZHluYW1pYyBhbGxvY2F0aW9uIGFuZCBmcmVlaW5nIG9mIGNvbm50cmFjayBoZWxwZXJzIChuZl9jb25udHJhY2tfaGVscGVyX2ZyZWUsIG5mdF9jdF9leHBlY3RfaGVscGVyX2FsbG9jKS4gVGhlc2UgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRsaW5rIHdoZW4gY3JlYXRpbmcgYW5kIGV2YWx1YXRpbmcgbmZ0YWJsZXMgZXhwZWN0YXRpb24gb2JqZWN0cywgbWFraW5nIHRoZW0gaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwMzozNzowNC44ODEyMDgzOTlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM3MzI0OTU4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGJlMTc0MmRkYzU0YTc5Y2MzYjcxMjBkMDI1NmI2YWFkZmEzMDBmNGRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBBdWcgMSAwMzozNzowNCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5oIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuaFxcbmluZGV4IGM3NjFjZDgxNThiMjUuLjQ0MjA4NDZlNDFmMjMgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuaFxcbisrKyBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmhcXG5AQCAtMTE0LDYgKzExNCw4IEBAIGludCBuZl9jb25udHJhY2tfaGVscGVyc19yZWdpc3RlcihzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqLCB1bnNpZ25lZCBpbnQsXFxuIHZvaWQgbmZfY29ubnRyYWNrX2hlbHBlcnNfdW5yZWdpc3RlcihzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqKixcXG4gXFx0XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBpbnQpO1xcbiBcXG4rdm9pZCBuZl9jb25udHJhY2tfaGVscGVyX2ZyZWUoc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKm1lKTtcXG4rXFxuICNkZWZpbmUgbmZfY29ubnRyYWNrX2hlbHBlcl9kZXByZWNhdGVkKG5hbWUpIFxcXFxcXG4gXFx0cHJfd2FybihcXFwiVGhlICVzIGNvbm50cmFjayBoZWxwZXIgaXMgc2NoZWR1bGVkIGZvciByZW1vdmFsLlxcXFxuXFxcIlxcdFxcXFxcXG4gXFx0XFx0XFxcIlBsZWFzZSBjb250YWN0IHRoZSBuZXRmaWx0ZXItZGV2ZWwgbWFpbGluZyBsaXN0IGlmIHlvdSBzdGlsbCBuZWVkIHRoaXMuXFxcXG5cXFwiLCBuYW1lKVxcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jXFxuaW5kZXggNTAwNTA5YjE3NjYzZS4uMTE5N2U4NzkzNDk0YiAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jXFxuQEAgLTQ1NiwxMyArNDU2LDggQEAgc3RhdGljIGJvb2wgZXhwZWN0X2l0ZXJfbWUoc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmV4cCwgdm9pZCAqZGF0YSlcXG4gXFx0cmV0dXJuIHRoaXMgPT0gbWU7XFxuIH1cXG4gXFxuLXZvaWQgbmZfY29ubnRyYWNrX2hlbHBlcl91bnJlZ2lzdGVyKHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICptZSlcXG4rdm9pZCBuZl9jb25udHJhY2tfaGVscGVyX2ZyZWUoc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKm1lKVxcbiB7XFxuLVxcdG11dGV4X2xvY2soXFx1MDAyNm5mX2N0X2hlbHBlcl9tdXRleCk7XFxuLVxcdGhsaXN0X2RlbF9yY3UoXFx1MDAyNm1lLVxcdTAwM2Vobm9kZSk7XFxuLVxcdG5mX2N0X2hlbHBlcl9jb3VudC0tO1xcbi1cXHRtdXRleF91bmxvY2soXFx1MDAyNm5mX2N0X2hlbHBlcl9tdXRleCk7XFxuLVxcbiBcXHQvKiBUaGlzIGhlbHBlciBpcyBnb2luZyBhd2F5LCBkaXNhYmxlIGl0LiAqL1xcbiBcXHRyY3VfYXNzaWduX3BvaW50ZXIobWUtXFx1MDAzZWhlbHAsIE5VTEwpO1xcbiBcXG5AQCAtNDc2LDYgKzQ3MSwxNyBAQCB2b2lkIG5mX2Nvbm50cmFja19oZWxwZXJfdW5yZWdpc3RlcihzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqbWUpXFxuIFxcdGlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoXFx1MDAyNm1lLVxcdTAwM2VjdF9yZWZjbnQpKVxcbiBcXHRcXHRrZnJlZV9yY3UobWUsIHJjdSk7XFxuIH1cXG4rRVhQT1JUX1NZTUJPTF9HUEwobmZfY29ubnRyYWNrX2hlbHBlcl9mcmVlKTtcXG4rXFxuK3ZvaWQgbmZfY29ubnRyYWNrX2hlbHBlcl91bnJlZ2lzdGVyKHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICptZSlcXG4re1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZuZl9jdF9oZWxwZXJfbXV0ZXgpO1xcbitcXHRobGlzdF9kZWxfcmN1KFxcdTAwMjZtZS1cXHUwMDNlaG5vZGUpO1xcbitcXHRuZl9jdF9oZWxwZXJfY291bnQtLTtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZuZl9jdF9oZWxwZXJfbXV0ZXgpO1xcbitcXG4rXFx0bmZfY29ubnRyYWNrX2hlbHBlcl9mcmVlKG1lKTtcXG4rfVxcbiBFWFBPUlRfU1lNQk9MX0dQTChuZl9jb25udHJhY2tfaGVscGVyX3VucmVnaXN0ZXIpO1xcbiBcXG4gdm9pZCBuZl9jdF9oZWxwZXJfaW5pdChzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqaGVscGVyLFxcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mdF9jdC5jIGIvbmV0L25ldGZpbHRlci9uZnRfY3QuY1xcbmluZGV4IDAzYTg4Yzc3ZTBmMDIuLmZmN2MyNzU3OWNmYjEgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZnRfY3QuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZ0X2N0LmNcXG5AQCAtMTIxMyw2ICsxMjEzLDggQEAgc3RydWN0IG5mdF9jdF9leHBlY3Rfb2JqIHtcXG4gXFx0dThcXHRcXHRsNHByb3RvO1xcbiBcXHR1OFxcdFxcdHNpemU7XFxuIFxcdHUzMlxcdFxcdHRpbWVvdXQ7XFxuK1xcbitcXHRzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqaGVscGVyO1xcbiB9O1xcbiBcXG4gc3RhdGljIGludCBuZnRfY3RfZXhwZWN0X3RpbWVvdXRfZ2V0KGNvbnN0IHN0cnVjdCBubGF0dHIgKmF0dHIsIHUzMiAqdmFsKVxcbkBAIC0xMjI2LDYgKzEyMjgsNjYgQEAgc3RhdGljIGludCBuZnRfY3RfZXhwZWN0X3RpbWVvdXRfZ2V0KGNvbnN0IHN0cnVjdCBubGF0dHIgKmF0dHIsIHUzMiAqdmFsKVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rc3RydWN0IG5mdF9jdF9leHBlY3RfZGF0YSB7XFxuK1xcdHN0cnVjdCBuZnRfY3RfZXhwZWN0X29ialxcdG9iajtcXG4rXFx0YXRvbWljX3RcXHRcXHRcXHRudW1fZXhwZWN0cztcXG4rfTtcXG4rXFxuK3N0YXRpYyBpbnQgY3RfZXhwZWN0X2hlbHAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IHByb3RvZmYsXFxuK1xcdFxcdFxcdCAgc3RydWN0IG5mX2Nvbm4gKmN0LCBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbylcXG4re1xcbitcXHRzdHJ1Y3QgbmZ0X2N0X2V4cGVjdF9kYXRhICpleHBlY3RfZGF0YTtcXG4rXFx0c3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmV4cDtcXG4rXFx0ZW51bSBpcF9jb25udHJhY2tfZGlyIGRpcjtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGV4cGVjdF9kYXRhID0gbmZjdF9oZWxwX2RhdGEoY3QpO1xcbitcXHRpZiAoIWV4cGVjdF9kYXRhKVxcbitcXHRcXHRyZXR1cm4gTkZfQUNDRVBUO1xcbitcXG4rXFx0aWYgKCFhdG9taWNfYWRkX3VubGVzcyhcXHUwMDI2ZXhwZWN0X2RhdGEtXFx1MDAzZW51bV9leHBlY3RzLCAxLCBleHBlY3RfZGF0YS1cXHUwMDNlb2JqLnNpemUpKVxcbitcXHRcXHRyZXR1cm4gTkZfQUNDRVBUO1xcbitcXG4rXFx0ZXhwID0gbmZfY3RfZXhwZWN0X2FsbG9jKGN0KTtcXG4rXFx0aWYgKCFleHApXFxuK1xcdFxcdHJldHVybiBORl9EUk9QO1xcbitcXG4rXFx0ZGlyID0gQ1RJTkZPMkRJUihjdGluZm8pO1xcbitcXHRuZl9jdF9leHBlY3RfaW5pdChleHAsIE5GX0NUX0VYUEVDVF9DTEFTU19ERUZBVUxULCBuZl9jdF9sM251bShjdCksXFxuK1xcdFxcdFxcdCAgXFx1MDAyNmN0LVxcdTAwM2V0dXBsZWhhc2hbIWRpcl0udHVwbGUuc3JjLnUzLFxcbitcXHRcXHRcXHQgIFxcdTAwMjZjdC1cXHUwMDNldHVwbGVoYXNoWyFkaXJdLnR1cGxlLmRzdC51MyxcXG4rXFx0XFx0XFx0ICBleHBlY3RfZGF0YS1cXHUwMDNlb2JqLmw0cHJvdG8sIE5VTEwsIFxcdTAwMjZleHBlY3RfZGF0YS1cXHUwMDNlb2JqLmRwb3J0KTtcXG4rXFx0ZXhwLVxcdTAwM2V0aW1lb3V0ICs9IGV4cGVjdF9kYXRhLVxcdTAwM2VvYmoudGltZW91dDtcXG4rXFxuK1xcdGlmIChuZl9jdF9leHBlY3RfcmVsYXRlZChleHAsIDApICE9IDApXFxuK1xcdFxcdHJldCA9IE5GX0RST1A7XFxuK1xcbitcXHRuZl9jdF9leHBlY3RfcHV0KGV4cCk7XFxuK1xcbitcXHRyZXR1cm4gTkZfQUNDRVBUO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IG5mdF9jdF9leHBlY3RfaGVscGVyX2FsbG9jKHN0cnVjdCBuZnRfY3RfZXhwZWN0X29iaiAqcHJpdilcXG4re1xcbitcXHRzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqY3RfZXhwZWN0X2hlbHBlcjtcXG4rXFxuK1xcdGN0X2V4cGVjdF9oZWxwZXIgPSBremFsbG9jX29iaihzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlcik7XFxuK1xcdGlmICghY3RfZXhwZWN0X2hlbHBlcilcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHRzbnByaW50ZihjdF9leHBlY3RfaGVscGVyLVxcdTAwM2VuYW1lLCBzaXplb2YoY3RfZXhwZWN0X2hlbHBlci1cXHUwMDNlbmFtZSksIFxcXCIlc1xcXCIsXFxuK1xcdFxcdCBcXFwibmZ0X2N0X2V4cGVjdFxcXCIpO1xcbitcXHRjdF9leHBlY3RfaGVscGVyLVxcdTAwM2VtZSA9IFRISVNfTU9EVUxFO1xcbitcXHRjdF9leHBlY3RfaGVscGVyLVxcdTAwM2VleHBlY3RfcG9saWN5W05GX0NUX0VYUEVDVF9DTEFTU19ERUZBVUxUXS5tYXhfZXhwZWN0ZWQgPSBwcml2LVxcdTAwM2VzaXplO1xcbitcXHRyY3VfYXNzaWduX3BvaW50ZXIoY3RfZXhwZWN0X2hlbHBlci1cXHUwMDNlaGVscCwgY3RfZXhwZWN0X2hlbHApO1xcbitcXHRyZWZjb3VudF9zZXQoXFx1MDAyNmN0X2V4cGVjdF9oZWxwZXItXFx1MDAzZWN0X3JlZmNudCwgMSk7XFxuK1xcbitcXHQvKiBObyBuZWVkIHRvIHJlZ2lzdGVyIHRoaXMgaGVscGVyLCB0aGlzIGlzIGludGVybmFsLiAqL1xcbitcXHRwcml2LVxcdTAwM2VoZWxwZXIgPSBjdF9leHBlY3RfaGVscGVyO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgbmZ0X2N0X2V4cGVjdF9vYmpfaW5pdChjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxcbiBcXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCB0YltdLFxcbiBcXHRcXHRcXHRcXHQgIHN0cnVjdCBuZnRfb2JqZWN0ICpvYmopXFxuQEAgLTEyMzMsNiArMTI5NSw4IEBAIHN0YXRpYyBpbnQgbmZ0X2N0X2V4cGVjdF9vYmpfaW5pdChjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxcbiBcXHRzdHJ1Y3QgbmZ0X2N0X2V4cGVjdF9vYmogKnByaXYgPSBuZnRfb2JqX2RhdGEob2JqKTtcXG4gXFx0aW50IGVycjtcXG4gXFxuK1xcdE5GX0NUX0hFTFBFUl9CVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCBuZnRfY3RfZXhwZWN0X2RhdGEpKTtcXG4rXFxuIFxcdGlmICghdGJbTkZUQV9DVF9FWFBFQ1RfTDRQUk9UT10gfHxcXG4gXFx0ICAgICF0YltORlRBX0NUX0VYUEVDVF9EUE9SVF0gfHxcXG4gXFx0ICAgICF0YltORlRBX0NUX0VYUEVDVF9USU1FT1VUXSB8fFxcbkBAIC0xMjczLDEzICsxMzM3LDI2IEBAIHN0YXRpYyBpbnQgbmZ0X2N0X2V4cGVjdF9vYmpfaW5pdChjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxcbiBcXHRwcml2LVxcdTAwM2VkcG9ydCA9IG5sYV9nZXRfYmUxNih0YltORlRBX0NUX0VYUEVDVF9EUE9SVF0pO1xcbiBcXHRwcml2LVxcdTAwM2VzaXplID0gbmxhX2dldF91OCh0YltORlRBX0NUX0VYUEVDVF9TSVpFXSk7XFxuIFxcbi1cXHRyZXR1cm4gbmZfY3RfbmV0bnNfZ2V0KGN0eC1cXHUwMDNlbmV0LCBjdHgtXFx1MDAzZWZhbWlseSk7XFxuK1xcdGVyciA9IG5mX2N0X25ldG5zX2dldChjdHgtXFx1MDAzZW5ldCwgY3R4LVxcdTAwM2VmYW1pbHkpO1xcbitcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFxuK1xcdGVyciA9IG5mdF9jdF9leHBlY3RfaGVscGVyX2FsbG9jKHByaXYpO1xcbitcXHRpZiAoZXJyIFxcdTAwM2MgMCkge1xcbitcXHRcXHRuZl9jdF9uZXRuc19wdXQoY3R4LVxcdTAwM2VuZXQsIGN0eC1cXHUwMDNlZmFtaWx5KTtcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgbmZ0X2N0X2V4cGVjdF9vYmpfZGVzdHJveShjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxcbi1cXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IG5mdF9vYmplY3QgKm9iailcXG4rXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IG5mdF9vYmplY3QgKm9iailcXG4ge1xcbitcXHRjb25zdCBzdHJ1Y3QgbmZ0X2N0X2V4cGVjdF9vYmogKnByaXYgPSBuZnRfb2JqX2RhdGEob2JqKTtcXG4rXFxuIFxcdG5mX2N0X25ldG5zX3B1dChjdHgtXFx1MDAzZW5ldCwgY3R4LVxcdTAwM2VmYW1pbHkpO1xcbitcXHRuZl9jb25udHJhY2tfaGVscGVyX2ZyZWUocHJpdi1cXHUwMDNlaGVscGVyKTtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBuZnRfY3RfZXhwZWN0X29ial9kdW1wKHN0cnVjdCBza19idWZmICpza2IsXFxuQEAgLTEzMDIsNTAgKzEzNzksMzggQEAgc3RhdGljIHZvaWQgbmZ0X2N0X2V4cGVjdF9vYmpfZXZhbChzdHJ1Y3QgbmZ0X29iamVjdCAqb2JqLFxcbiBcXHRcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdClcXG4ge1xcbiBcXHRjb25zdCBzdHJ1Y3QgbmZ0X2N0X2V4cGVjdF9vYmogKnByaXYgPSBuZnRfb2JqX2RhdGEob2JqKTtcXG4tXFx0c3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmV4cDtcXG4rXFx0c3RydWN0IG5mdF9jdF9leHBlY3RfZGF0YSAqZXhwZWN0X2RhdGE7XFxuIFxcdGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvO1xcbiBcXHRzdHJ1Y3QgbmZfY29ubl9oZWxwICpoZWxwO1xcbi1cXHRlbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyO1xcbi1cXHR1MTYgbDNudW0gPSBwcml2LVxcdTAwM2VsM251bTtcXG4gXFx0c3RydWN0IG5mX2Nvbm4gKmN0O1xcbiBcXG4gXFx0Y3QgPSBuZl9jdF9nZXQocGt0LVxcdTAwM2Vza2IsIFxcdTAwMjZjdGluZm8pO1xcbi1cXHRpZiAoIWN0IHx8IG5mX2N0X2lzX2NvbmZpcm1lZChjdCkgfHwgbmZfY3RfaXNfdGVtcGxhdGUoY3QpKSB7XFxuK1xcdGlmICghY3QgfHwgbmZfY3RfaXNfdGVtcGxhdGUoY3QpIHx8IG5mX2N0X2lzX2NvbmZpcm1lZChjdCkpIHtcXG4gXFx0XFx0cmVncy1cXHUwMDNldmVyZGljdC5jb2RlID0gTkZUX0JSRUFLO1xcbiBcXHRcXHRyZXR1cm47XFxuIFxcdH1cXG4tXFx0ZGlyID0gQ1RJTkZPMkRJUihjdGluZm8pO1xcbiBcXG4gXFx0aGVscCA9IG5mY3RfaGVscChjdCk7XFxuLVxcdGlmICghaGVscClcXG4tXFx0XFx0aGVscCA9IG5mX2N0X2hlbHBlcl9leHRfYWRkKGN0LCBHRlBfQVRPTUlDKTtcXG4tXFx0aWYgKCFoZWxwKSB7XFxuLVxcdFxcdHJlZ3MtXFx1MDAzZXZlcmRpY3QuY29kZSA9IE5GX0RST1A7XFxuLVxcdFxcdHJldHVybjtcXG4tXFx0fVxcbi1cXG4tXFx0aWYgKGhlbHAtXFx1MDAzZWV4cGVjdGluZ1tORl9DVF9FWFBFQ1RfQ0xBU1NfREVGQVVMVF0gXFx1MDAzZT0gcHJpdi1cXHUwMDNlc2l6ZSkge1xcbitcXHRpZiAoaGVscCkge1xcbiBcXHRcXHRyZWdzLVxcdTAwM2V2ZXJkaWN0LmNvZGUgPSBORlRfQlJFQUs7XFxuIFxcdFxcdHJldHVybjtcXG4gXFx0fVxcbi1cXHRpZiAobDNudW0gPT0gTkZQUk9UT19JTkVUKVxcbi1cXHRcXHRsM251bSA9IG5mX2N0X2wzbnVtKGN0KTtcXG4gXFxuLVxcdGV4cCA9IG5mX2N0X2V4cGVjdF9hbGxvYyhjdCk7XFxuLVxcdGlmIChleHAgPT0gTlVMTCkge1xcbitcXHRoZWxwID0gbmZfY3RfaGVscGVyX2V4dF9hZGQoY3QsIEdGUF9BVE9NSUMpO1xcbitcXHRpZiAoIWhlbHApIHtcXG4gXFx0XFx0cmVncy1cXHUwMDNldmVyZGljdC5jb2RlID0gTkZfRFJPUDtcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXHR9XFxuLVxcdG5mX2N0X2V4cGVjdF9pbml0KGV4cCwgTkZfQ1RfRVhQRUNUX0NMQVNTX0RFRkFVTFQsIGwzbnVtLFxcbi1cXHRcXHQgICAgICAgICAgXFx1MDAyNmN0LVxcdTAwM2V0dXBsZWhhc2hbIWRpcl0udHVwbGUuc3JjLnUzLFxcbi1cXHRcXHQgICAgICAgICAgXFx1MDAyNmN0LVxcdTAwM2V0dXBsZWhhc2hbIWRpcl0udHVwbGUuZHN0LnUzLFxcbi1cXHRcXHQgICAgICAgICAgcHJpdi1cXHUwMDNlbDRwcm90bywgTlVMTCwgXFx1MDAyNnByaXYtXFx1MDAzZWRwb3J0KTtcXG4tXFx0ZXhwLVxcdTAwM2V0aW1lb3V0ICs9IHByaXYtXFx1MDAzZXRpbWVvdXQ7XFxuIFxcbi1cXHRpZiAobmZfY3RfZXhwZWN0X3JlbGF0ZWQoZXhwLCAwKSAhPSAwKVxcbi1cXHRcXHRyZWdzLVxcdTAwM2V2ZXJkaWN0LmNvZGUgPSBORl9EUk9QO1xcbitcXHRleHBlY3RfZGF0YSA9IG5mY3RfaGVscF9kYXRhKGN0KTtcXG4rXFx0aWYgKCFleHBlY3RfZGF0YSkge1xcbitcXHRcXHRyZWdzLVxcdTAwM2V2ZXJkaWN0LmNvZGUgPSBORlRfQlJFQUs7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXHRleHBlY3RfZGF0YS1cXHUwMDNlb2JqID0gKnByaXY7XFxuIFxcbi1cXHRuZl9jdF9leHBlY3RfcHV0KGV4cCk7XFxuK1xcdGlmIChoZWxwIFxcdTAwMjZcXHUwMDI2IHJlZmNvdW50X2luY19ub3RfemVybyhcXHUwMDI2cHJpdi1cXHUwMDNlaGVscGVyLVxcdTAwM2VjdF9yZWZjbnQpKVxcbitcXHRcXHRyY3VfYXNzaWduX3BvaW50ZXIoaGVscC1cXHUwMDNlaGVscGVyLCBwcml2LVxcdTAwM2VoZWxwZXIpO1xcbiB9XFxuIFxcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmZ0X2N0X2V4cGVjdF9wb2xpY3lbTkZUQV9DVF9FWFBFQ1RfTUFYICsgMV0gPSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDAzOjM3OjA1LjI1NTE3Mzc2NloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjY0MTIyMzIxNTA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVEZJTFRFUlwiLFxuICAgIFwiTkZfQ09OTlRSQUNLXCIsXG4gICAgXCJORl9UQUJMRVNcIixcbiAgICBcIk5GVF9DVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5mdF9jdF9leHBlY3Rfb2JqX2luaXRcIixcbiAgICBcIm5mdF9jdF9leHBlY3Rfb2JqX2V2YWxcIixcbiAgICBcIm5mdF9jdF9leHBlY3Rfb2JqX2Rlc3Ryb3lcIixcbiAgICBcIm5mdF9jdF9leHBlY3RfaGVscGVyX2FsbG9jXCIsXG4gICAgXCJjdF9leHBlY3RfaGVscFwiLFxuICAgIFwibmZfY29ubnRyYWNrX2hlbHBlcl9mcmVlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIG5ldGZpbHRlciBuZnRhYmxlcyBjb25udHJhY2sgZXhwZWN0YXRpb24gbG9naWMsIHNwZWNpZmljYWxseSBhZGRpbmcgZHluYW1pYyBhbGxvY2F0aW9uIGFuZCBmcmVlaW5nIG9mIGNvbm50cmFjayBoZWxwZXJzIChuZl9jb25udHJhY2tfaGVscGVyX2ZyZWUsIG5mdF9jdF9leHBlY3RfaGVscGVyX2FsbG9jKS4gVGhlc2UgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRsaW5rIHdoZW4gY3JlYXRpbmcgYW5kIGV2YWx1YXRpbmcgbmZ0YWJsZXMgZXhwZWN0YXRpb24gb2JqZWN0cywgbWFraW5nIHRoZW0gaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBiZTE3NDJkZGM1NGE3OWNjM2I3MTIwZDAyNTZiNmFhZGZhMzAwZjRkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMSAwMzozNzowNCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmggYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5oXG5pbmRleCBjNzYxY2Q4MTU4YjI1Li40NDIwODQ2ZTQxZjIzIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuaFxuKysrIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuaFxuQEAgLTExNCw2ICsxMTQsOCBAQCBpbnQgbmZfY29ubnRyYWNrX2hlbHBlcnNfcmVnaXN0ZXIoc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKiwgdW5zaWduZWQgaW50LFxuIHZvaWQgbmZfY29ubnRyYWNrX2hlbHBlcnNfdW5yZWdpc3RlcihzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqKixcbiBcdFx0XHRcdCAgICAgdW5zaWduZWQgaW50KTtcbiBcbit2b2lkIG5mX2Nvbm50cmFja19oZWxwZXJfZnJlZShzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqbWUpO1xuK1xuICNkZWZpbmUgbmZfY29ubnRyYWNrX2hlbHBlcl9kZXByZWNhdGVkKG5hbWUpIFxcXG4gXHRwcl93YXJuKFwiVGhlICVzIGNvbm50cmFjayBoZWxwZXIgaXMgc2NoZWR1bGVkIGZvciByZW1vdmFsLlxcblwiXHRcXFxuIFx0XHRcIlBsZWFzZSBjb250YWN0IHRoZSBuZXRmaWx0ZXItZGV2ZWwgbWFpbGluZyBsaXN0IGlmIHlvdSBzdGlsbCBuZWVkIHRoaXMuXFxuXCIsIG5hbWUpXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuY1xuaW5kZXggNTAwNTA5YjE3NjYzZS4uMTE5N2U4NzkzNDk0YiAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuY1xuQEAgLTQ1NiwxMyArNDU2LDggQEAgc3RhdGljIGJvb2wgZXhwZWN0X2l0ZXJfbWUoc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmV4cCwgdm9pZCAqZGF0YSlcbiBcdHJldHVybiB0aGlzID09IG1lO1xuIH1cbiBcbi12b2lkIG5mX2Nvbm50cmFja19oZWxwZXJfdW5yZWdpc3RlcihzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqbWUpXG4rdm9pZCBuZl9jb25udHJhY2tfaGVscGVyX2ZyZWUoc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKm1lKVxuIHtcbi1cdG11dGV4X2xvY2soXHUwMDI2bmZfY3RfaGVscGVyX211dGV4KTtcbi1cdGhsaXN0X2RlbF9yY3UoXHUwMDI2bWUtXHUwMDNlaG5vZGUpO1xuLVx0bmZfY3RfaGVscGVyX2NvdW50LS07XG4tXHRtdXRleF91bmxvY2soXHUwMDI2bmZfY3RfaGVscGVyX211dGV4KTtcbi1cbiBcdC8qIFRoaXMgaGVscGVyIGlzIGdvaW5nIGF3YXksIGRpc2FibGUgaXQuICovXG4gXHRyY3VfYXNzaWduX3BvaW50ZXIobWUtXHUwMDNlaGVscCwgTlVMTCk7XG4gXG5AQCAtNDc2LDYgKzQ3MSwxNyBAQCB2b2lkIG5mX2Nvbm50cmFja19oZWxwZXJfdW5yZWdpc3RlcihzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqbWUpXG4gXHRpZiAocmVmY291bnRfZGVjX2FuZF90ZXN0KFx1MDAyNm1lLVx1MDAzZWN0X3JlZmNudCkpXG4gXHRcdGtmcmVlX3JjdShtZSwgcmN1KTtcbiB9XG4rRVhQT1JUX1NZTUJPTF9HUEwobmZfY29ubnRyYWNrX2hlbHBlcl9mcmVlKTtcbitcbit2b2lkIG5mX2Nvbm50cmFja19oZWxwZXJfdW5yZWdpc3RlcihzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqbWUpXG4re1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZuZl9jdF9oZWxwZXJfbXV0ZXgpO1xuK1x0aGxpc3RfZGVsX3JjdShcdTAwMjZtZS1cdTAwM2Vobm9kZSk7XG4rXHRuZl9jdF9oZWxwZXJfY291bnQtLTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZuZl9jdF9oZWxwZXJfbXV0ZXgpO1xuK1xuK1x0bmZfY29ubnRyYWNrX2hlbHBlcl9mcmVlKG1lKTtcbit9XG4gRVhQT1JUX1NZTUJPTF9HUEwobmZfY29ubnRyYWNrX2hlbHBlcl91bnJlZ2lzdGVyKTtcbiBcbiB2b2lkIG5mX2N0X2hlbHBlcl9pbml0KHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICpoZWxwZXIsXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZnRfY3QuYyBiL25ldC9uZXRmaWx0ZXIvbmZ0X2N0LmNcbmluZGV4IDAzYTg4Yzc3ZTBmMDIuLmZmN2MyNzU3OWNmYjEgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mdF9jdC5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mdF9jdC5jXG5AQCAtMTIxMyw2ICsxMjEzLDggQEAgc3RydWN0IG5mdF9jdF9leHBlY3Rfb2JqIHtcbiBcdHU4XHRcdGw0cHJvdG87XG4gXHR1OFx0XHRzaXplO1xuIFx0dTMyXHRcdHRpbWVvdXQ7XG4rXG4rXHRzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqaGVscGVyO1xuIH07XG4gXG4gc3RhdGljIGludCBuZnRfY3RfZXhwZWN0X3RpbWVvdXRfZ2V0KGNvbnN0IHN0cnVjdCBubGF0dHIgKmF0dHIsIHUzMiAqdmFsKVxuQEAgLTEyMjYsNiArMTIyOCw2NiBAQCBzdGF0aWMgaW50IG5mdF9jdF9leHBlY3RfdGltZW91dF9nZXQoY29uc3Qgc3RydWN0IG5sYXR0ciAqYXR0ciwgdTMyICp2YWwpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rc3RydWN0IG5mdF9jdF9leHBlY3RfZGF0YSB7XG4rXHRzdHJ1Y3QgbmZ0X2N0X2V4cGVjdF9vYmpcdG9iajtcbitcdGF0b21pY190XHRcdFx0bnVtX2V4cGVjdHM7XG4rfTtcbitcbitzdGF0aWMgaW50IGN0X2V4cGVjdF9oZWxwKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBwcm90b2ZmLFxuK1x0XHRcdCAgc3RydWN0IG5mX2Nvbm4gKmN0LCBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbylcbit7XG4rXHRzdHJ1Y3QgbmZ0X2N0X2V4cGVjdF9kYXRhICpleHBlY3RfZGF0YTtcbitcdHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHA7XG4rXHRlbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyO1xuK1x0aW50IHJldDtcbitcbitcdGV4cGVjdF9kYXRhID0gbmZjdF9oZWxwX2RhdGEoY3QpO1xuK1x0aWYgKCFleHBlY3RfZGF0YSlcbitcdFx0cmV0dXJuIE5GX0FDQ0VQVDtcbitcbitcdGlmICghYXRvbWljX2FkZF91bmxlc3MoXHUwMDI2ZXhwZWN0X2RhdGEtXHUwMDNlbnVtX2V4cGVjdHMsIDEsIGV4cGVjdF9kYXRhLVx1MDAzZW9iai5zaXplKSlcbitcdFx0cmV0dXJuIE5GX0FDQ0VQVDtcbitcbitcdGV4cCA9IG5mX2N0X2V4cGVjdF9hbGxvYyhjdCk7XG4rXHRpZiAoIWV4cClcbitcdFx0cmV0dXJuIE5GX0RST1A7XG4rXG4rXHRkaXIgPSBDVElORk8yRElSKGN0aW5mbyk7XG4rXHRuZl9jdF9leHBlY3RfaW5pdChleHAsIE5GX0NUX0VYUEVDVF9DTEFTU19ERUZBVUxULCBuZl9jdF9sM251bShjdCksXG4rXHRcdFx0ICBcdTAwMjZjdC1cdTAwM2V0dXBsZWhhc2hbIWRpcl0udHVwbGUuc3JjLnUzLFxuK1x0XHRcdCAgXHUwMDI2Y3QtXHUwMDNldHVwbGVoYXNoWyFkaXJdLnR1cGxlLmRzdC51MyxcbitcdFx0XHQgIGV4cGVjdF9kYXRhLVx1MDAzZW9iai5sNHByb3RvLCBOVUxMLCBcdTAwMjZleHBlY3RfZGF0YS1cdTAwM2VvYmouZHBvcnQpO1xuK1x0ZXhwLVx1MDAzZXRpbWVvdXQgKz0gZXhwZWN0X2RhdGEtXHUwMDNlb2JqLnRpbWVvdXQ7XG4rXG4rXHRpZiAobmZfY3RfZXhwZWN0X3JlbGF0ZWQoZXhwLCAwKSAhPSAwKVxuK1x0XHRyZXQgPSBORl9EUk9QO1xuK1xuK1x0bmZfY3RfZXhwZWN0X3B1dChleHApO1xuK1xuK1x0cmV0dXJuIE5GX0FDQ0VQVDtcbit9XG4rXG4rc3RhdGljIGludCBuZnRfY3RfZXhwZWN0X2hlbHBlcl9hbGxvYyhzdHJ1Y3QgbmZ0X2N0X2V4cGVjdF9vYmogKnByaXYpXG4re1xuK1x0c3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKmN0X2V4cGVjdF9oZWxwZXI7XG4rXG4rXHRjdF9leHBlY3RfaGVscGVyID0ga3phbGxvY19vYmooc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIpO1xuK1x0aWYgKCFjdF9leHBlY3RfaGVscGVyKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdHNucHJpbnRmKGN0X2V4cGVjdF9oZWxwZXItXHUwMDNlbmFtZSwgc2l6ZW9mKGN0X2V4cGVjdF9oZWxwZXItXHUwMDNlbmFtZSksIFwiJXNcIixcbitcdFx0IFwibmZ0X2N0X2V4cGVjdFwiKTtcbitcdGN0X2V4cGVjdF9oZWxwZXItXHUwMDNlbWUgPSBUSElTX01PRFVMRTtcbitcdGN0X2V4cGVjdF9oZWxwZXItXHUwMDNlZXhwZWN0X3BvbGljeVtORl9DVF9FWFBFQ1RfQ0xBU1NfREVGQVVMVF0ubWF4X2V4cGVjdGVkID0gcHJpdi1cdTAwM2VzaXplO1xuK1x0cmN1X2Fzc2lnbl9wb2ludGVyKGN0X2V4cGVjdF9oZWxwZXItXHUwMDNlaGVscCwgY3RfZXhwZWN0X2hlbHApO1xuK1x0cmVmY291bnRfc2V0KFx1MDAyNmN0X2V4cGVjdF9oZWxwZXItXHUwMDNlY3RfcmVmY250LCAxKTtcbitcbitcdC8qIE5vIG5lZWQgdG8gcmVnaXN0ZXIgdGhpcyBoZWxwZXIsIHRoaXMgaXMgaW50ZXJuYWwuICovXG4rXHRwcml2LVx1MDAzZWhlbHBlciA9IGN0X2V4cGVjdF9oZWxwZXI7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gc3RhdGljIGludCBuZnRfY3RfZXhwZWN0X29ial9pbml0KGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXG4gXHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCB0YltdLFxuIFx0XHRcdFx0ICBzdHJ1Y3QgbmZ0X29iamVjdCAqb2JqKVxuQEAgLTEyMzMsNiArMTI5NSw4IEBAIHN0YXRpYyBpbnQgbmZ0X2N0X2V4cGVjdF9vYmpfaW5pdChjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxuIFx0c3RydWN0IG5mdF9jdF9leHBlY3Rfb2JqICpwcml2ID0gbmZ0X29ial9kYXRhKG9iaik7XG4gXHRpbnQgZXJyO1xuIFxuK1x0TkZfQ1RfSEVMUEVSX0JVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IG5mdF9jdF9leHBlY3RfZGF0YSkpO1xuK1xuIFx0aWYgKCF0YltORlRBX0NUX0VYUEVDVF9MNFBST1RPXSB8fFxuIFx0ICAgICF0YltORlRBX0NUX0VYUEVDVF9EUE9SVF0gfHxcbiBcdCAgICAhdGJbTkZUQV9DVF9FWFBFQ1RfVElNRU9VVF0gfHxcbkBAIC0xMjczLDEzICsxMzM3LDI2IEBAIHN0YXRpYyBpbnQgbmZ0X2N0X2V4cGVjdF9vYmpfaW5pdChjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxuIFx0cHJpdi1cdTAwM2VkcG9ydCA9IG5sYV9nZXRfYmUxNih0YltORlRBX0NUX0VYUEVDVF9EUE9SVF0pO1xuIFx0cHJpdi1cdTAwM2VzaXplID0gbmxhX2dldF91OCh0YltORlRBX0NUX0VYUEVDVF9TSVpFXSk7XG4gXG4tXHRyZXR1cm4gbmZfY3RfbmV0bnNfZ2V0KGN0eC1cdTAwM2VuZXQsIGN0eC1cdTAwM2VmYW1pbHkpO1xuK1x0ZXJyID0gbmZfY3RfbmV0bnNfZ2V0KGN0eC1cdTAwM2VuZXQsIGN0eC1cdTAwM2VmYW1pbHkpO1xuK1x0aWYgKGVyciBcdTAwM2MgMClcbitcdFx0cmV0dXJuIGVycjtcbitcbitcdGVyciA9IG5mdF9jdF9leHBlY3RfaGVscGVyX2FsbG9jKHByaXYpO1xuK1x0aWYgKGVyciBcdTAwM2MgMCkge1xuK1x0XHRuZl9jdF9uZXRuc19wdXQoY3R4LVx1MDAzZW5ldCwgY3R4LVx1MDAzZWZhbWlseSk7XG4rXHRcdHJldHVybiBlcnI7XG4rXHR9XG4rXG4rXHRyZXR1cm4gZXJyO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBuZnRfY3RfZXhwZWN0X29ial9kZXN0cm95KGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXG4tXHRcdFx0XHQgICAgICAgc3RydWN0IG5mdF9vYmplY3QgKm9iailcbitcdFx0XHRcdCAgICAgIHN0cnVjdCBuZnRfb2JqZWN0ICpvYmopXG4ge1xuK1x0Y29uc3Qgc3RydWN0IG5mdF9jdF9leHBlY3Rfb2JqICpwcml2ID0gbmZ0X29ial9kYXRhKG9iaik7XG4rXG4gXHRuZl9jdF9uZXRuc19wdXQoY3R4LVx1MDAzZW5ldCwgY3R4LVx1MDAzZWZhbWlseSk7XG4rXHRuZl9jb25udHJhY2tfaGVscGVyX2ZyZWUocHJpdi1cdTAwM2VoZWxwZXIpO1xuIH1cbiBcbiBzdGF0aWMgaW50IG5mdF9jdF9leHBlY3Rfb2JqX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYixcbkBAIC0xMzAyLDUwICsxMzc5LDM4IEBAIHN0YXRpYyB2b2lkIG5mdF9jdF9leHBlY3Rfb2JqX2V2YWwoc3RydWN0IG5mdF9vYmplY3QgKm9iaixcbiBcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0KVxuIHtcbiBcdGNvbnN0IHN0cnVjdCBuZnRfY3RfZXhwZWN0X29iaiAqcHJpdiA9IG5mdF9vYmpfZGF0YShvYmopO1xuLVx0c3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmV4cDtcbitcdHN0cnVjdCBuZnRfY3RfZXhwZWN0X2RhdGEgKmV4cGVjdF9kYXRhO1xuIFx0ZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm87XG4gXHRzdHJ1Y3QgbmZfY29ubl9oZWxwICpoZWxwO1xuLVx0ZW51bSBpcF9jb25udHJhY2tfZGlyIGRpcjtcbi1cdHUxNiBsM251bSA9IHByaXYtXHUwMDNlbDNudW07XG4gXHRzdHJ1Y3QgbmZfY29ubiAqY3Q7XG4gXG4gXHRjdCA9IG5mX2N0X2dldChwa3QtXHUwMDNlc2tiLCBcdTAwMjZjdGluZm8pO1xuLVx0aWYgKCFjdCB8fCBuZl9jdF9pc19jb25maXJtZWQoY3QpIHx8IG5mX2N0X2lzX3RlbXBsYXRlKGN0KSkge1xuK1x0aWYgKCFjdCB8fCBuZl9jdF9pc190ZW1wbGF0ZShjdCkgfHwgbmZfY3RfaXNfY29uZmlybWVkKGN0KSkge1xuIFx0XHRyZWdzLVx1MDAzZXZlcmRpY3QuY29kZSA9IE5GVF9CUkVBSztcbiBcdFx0cmV0dXJuO1xuIFx0fVxuLVx0ZGlyID0gQ1RJTkZPMkRJUihjdGluZm8pO1xuIFxuIFx0aGVscCA9IG5mY3RfaGVscChjdCk7XG4tXHRpZiAoIWhlbHApXG4tXHRcdGhlbHAgPSBuZl9jdF9oZWxwZXJfZXh0X2FkZChjdCwgR0ZQX0FUT01JQyk7XG4tXHRpZiAoIWhlbHApIHtcbi1cdFx0cmVncy1cdTAwM2V2ZXJkaWN0LmNvZGUgPSBORl9EUk9QO1xuLVx0XHRyZXR1cm47XG4tXHR9XG4tXG4tXHRpZiAoaGVscC1cdTAwM2VleHBlY3RpbmdbTkZfQ1RfRVhQRUNUX0NMQVNTX0RFRkFVTFRdIFx1MDAzZT0gcHJpdi1cdTAwM2VzaXplKSB7XG4rXHRpZiAoaGVscCkge1xuIFx0XHRyZWdzLVx1MDAzZXZlcmRpY3QuY29kZSA9IE5GVF9CUkVBSztcbiBcdFx0cmV0dXJuO1xuIFx0fVxuLVx0aWYgKGwzbnVtID09IE5GUFJPVE9fSU5FVClcbi1cdFx0bDNudW0gPSBuZl9jdF9sM251bShjdCk7XG4gXG4tXHRleHAgPSBuZl9jdF9leHBlY3RfYWxsb2MoY3QpO1xuLVx0aWYgKGV4cCA9PSBOVUxMKSB7XG4rXHRoZWxwID0gbmZfY3RfaGVscGVyX2V4dF9hZGQoY3QsIEdGUF9BVE9NSUMpO1xuK1x0aWYgKCFoZWxwKSB7XG4gXHRcdHJlZ3MtXHUwMDNldmVyZGljdC5jb2RlID0gTkZfRFJPUDtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuLVx0bmZfY3RfZXhwZWN0X2luaXQoZXhwLCBORl9DVF9FWFBFQ1RfQ0xBU1NfREVGQVVMVCwgbDNudW0sXG4tXHRcdCAgICAgICAgICBcdTAwMjZjdC1cdTAwM2V0dXBsZWhhc2hbIWRpcl0udHVwbGUuc3JjLnUzLFxuLVx0XHQgICAgICAgICAgXHUwMDI2Y3QtXHUwMDNldHVwbGVoYXNoWyFkaXJdLnR1cGxlLmRzdC51Myxcbi1cdFx0ICAgICAgICAgIHByaXYtXHUwMDNlbDRwcm90bywgTlVMTCwgXHUwMDI2cHJpdi1cdTAwM2VkcG9ydCk7XG4tXHRleHAtXHUwMDNldGltZW91dCArPSBwcml2LVx1MDAzZXRpbWVvdXQ7XG4gXG4tXHRpZiAobmZfY3RfZXhwZWN0X3JlbGF0ZWQoZXhwLCAwKSAhPSAwKVxuLVx0XHRyZWdzLVx1MDAzZXZlcmRpY3QuY29kZSA9IE5GX0RST1A7XG4rXHRleHBlY3RfZGF0YSA9IG5mY3RfaGVscF9kYXRhKGN0KTtcbitcdGlmICghZXhwZWN0X2RhdGEpIHtcbitcdFx0cmVncy1cdTAwM2V2ZXJkaWN0LmNvZGUgPSBORlRfQlJFQUs7XG4rXHRcdHJldHVybjtcbitcdH1cbitcdGV4cGVjdF9kYXRhLVx1MDAzZW9iaiA9ICpwcml2O1xuIFxuLVx0bmZfY3RfZXhwZWN0X3B1dChleHApO1xuK1x0aWYgKGhlbHAgXHUwMDI2XHUwMDI2IHJlZmNvdW50X2luY19ub3RfemVybyhcdTAwMjZwcml2LVx1MDAzZWhlbHBlci1cdTAwM2VjdF9yZWZjbnQpKVxuK1x0XHRyY3VfYXNzaWduX3BvaW50ZXIoaGVscC1cdTAwM2VoZWxwZXIsIHByaXYtXHUwMDNlaGVscGVyKTtcbiB9XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5mdF9jdF9leHBlY3RfcG9saWN5W05GVEFfQ1RfRVhQRUNUX01BWCArIDFdID0ge1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDM6Mzc6MDUuMjU1MTc1Mjc2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDczMTE2NTg4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE5ldGZpbHRlciBDb25udHJhY2sgSGVscGVyIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQncyBtYWtpbmcgc29tZSBrZXkgbW9kaWZpY2F0aW9ucyB0byB0aGUgY29ubnRyYWNrIGhlbHBlciBhbmQgbmZ0YWJsZXMgaW50ZWdyYXRpb24uIFRoZSBjb3JlIG9mIGl0IHNlZW1zIHRvIGJlIGFkZGluZyBhIGBuZl9jb25udHJhY2tfaGVscGVyX2ZyZWVgIGZ1bmN0aW9uIGFuZCBtYWtpbmcgaXQgYXZhaWxhYmxlLiBUaGlzIGlzIGludGVyZXN0aW5nLCBhIGNsZWFudXAgZnVuY3Rpb24gaXMgYWx3YXlzIGEgZ29vZCBzaWduIG9mIHJlc291cmNlIG1hbmFnZW1lbnQgYmVpbmcgY29uc2lkZXJlZC5cblxuVGhlIHJlYWwgbWVhdCBvZiB0aGUgY2hhbmdlcyBzZWVtcyB0byBiZSBpbiBob3cgY29ubnRyYWNrIGhlbHBlcnMgYXJlIGhhbmRsZWQgd2l0aGluIGBuZnRfY3RfZXhwZWN0YC4gVGhlIGBuZnRfY3RfZXhwZWN0X29ial9pbml0YCBmdW5jdGlvbiBpcyBiZWluZyB1cGRhdGVkIHRvIGFsbG9jYXRlIGEgaGVscGVyIHVzaW5nIGBuZnRfY3RfZXhwZWN0X2hlbHBlcl9hbGxvY2AuIFRoZW4sIHRoZSBgbmZ0X2N0X2V4cGVjdF9vYmpfZXZhbGAgZnVuY3Rpb24gd2lsbCBub3cgbGV2ZXJhZ2UgYG5mX2N0X2hlbHBlcl9leHRfYWRkYCB0byBhZGQgdGhlIGhlbHBlciB0byB0aGUgY29ubnRyYWNrIGVudHJ5LiBFc3NlbnRpYWxseSwgdGhlIGNvZGUgaXMgbW92aW5nIHRvIGV4cGxpY2l0bHkgbWFuYWdlIGFuZCBhc3NvY2lhdGUgdGhlc2UgaGVscGVycywgd2hpY2ggaXMgYSBmdW5jdGlvbmFsIGltcHJvdmVtZW50IGluIHRoZSBuZXRmaWx0ZXIgZWNvc3lzdGVtLiBUaGlzIGltcGFjdHMgaG93IG5mdGFibGVzIGludGVyYWN0cyB3aXRoIGNvbm50cmFjayBleHBlY3RhdGlvbnMuXG5cbk5vdywgbGV0J3Mgc2VlIGhvdyB0aGlzIGFsbCBjb21waWxlcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSXQgbG9va3MgbGlrZSBgbmZ0X2N0LmNgIGlzIGdvaW5nIHRvIGJlIGNvbXBpbGVkIGlmIGBDT05GSUdfTkZUX0NUYCBpcyBlbmFibGVkLiBNYWtlcyBzZW5zZSwgdGhhdCdzIGV4cGVjdGVkLiBTaW1pbGFybHksIGBuZl9jb25udHJhY2tfaGVscGVyLmNgIG5lZWRzIGBDT05GSUdfTkZfQ09OTlRSQUNLYCB0byBiZSBzZXQuIFRoYXQgYWxpZ25zIHdpdGggaG93IHRoZXNlIGNvbXBvbmVudHMgbm9ybWFsbHkgd29yay4gTm93LCBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhlIGBuZXQvbmV0ZmlsdGVyL01ha2VmaWxlYCB0byBjb25maXJtIHRoZSBjb21waWxhdGlvbiBkZXBlbmRlbmNpZXMgYW5kIGJ1aWxkIGVudmlyb25tZW50IGZvciBgbmZ0X2N0LmNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0OTYyLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjA3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDM6Mzc6MDkuOTg2MzQ0MzhaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDIzMDgwNjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZ0X2N0XFxcXC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9NYWtlZmlsZT0xMTE9b2JqLSQoQ09ORklHX05GVF9OVU1HRU4pXFx0Kz0gbmZ0X251bWdlbi5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZToxMTI6b2JqLSQoQ09ORklHX05GVF9DVClcXHRcXHQrPSBuZnRfY3Qub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMTEzLW9iai0kKENPTkZJR19ORlRfRkxPV19PRkZMT0FEKVxcdCs9IG5mdF9mbG93X29mZmxvYWQub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwMzozNzoxMC4wMjg2NzY1MThaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTgyODk5MjA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBkZXBlbmRlbmNpZXMgYW5kIGZ1bmN0aW9uIGNhbGxzOlxuXG4qKkRlcGVuZGVuY2llcyBhbmQgRnVuY3Rpb24gQ2FsbHMqKlxuXG5Pa2F5LCBzbyBJJ20gcHV0dGluZyB0b2dldGhlciB0aGlzIG5ldyBOZXRmaWx0ZXIgbW9kdWxlLCBhbmQgaXQgbG9va3MgbGlrZSBJIGFic29sdXRlbHkgKm5lZWQqIGBDT05GSUdfTkZUX0NUYC4gVGhhdCdzIG5vbi1uZWdvdGlhYmxlLiBBbmQsIG9mIGNvdXJzZSwgdGhlIGV2ZXItcHJlc2VudCBgQ09ORklHX05GX0NPTk5UUkFDS2AgaXMgYWxzbyBhIG11c3QtaGF2ZS4gTm8gc3VycHJpc2VzIHRoZXJlOyBJIGtuZXcgdGhhdCBmcm9tIHRoZSBvdXRzZXQuXG5cbk5vdywgbGV0IG1lIGp1c3QgcXVpY2tseSBydW4gdGhyb3VnaCB0aGUgcmVsZXZhbnQgZnVuY3Rpb25zLiBMZXQncyBzZWUuLi4gSSBzaG91bGQgY2hlY2sgb3V0IGBuZnRfY3RfZXhwZWN0X29ial9pbml0YCBhbmQgYG5mdF9jdF9leHBlY3Rfb2JqX2V2YWxgLiBUaG9zZSBhcmUgdGhlIHVzdWFsIHN1c3BlY3RzLiBJJ20gcHJldHR5IHN1cmUgdGhleSBhcmUgZGVmaW5lZCB3aXRoaW4gYG5mdF9jdF9leHBlY3Rfb2JqX29wc2AuLi4gb3IgYXQgbGVhc3Qgc29tZXRoaW5nIHNpbWlsYXIgdG8gdGhhdCBzdHJ1Y3R1cmUuIEknbGwgbmVlZCB0byBjb25maXJtIHRoYXQsIGJ1dCBteSBpbnN0aW5jdHMgYXJlIHBvaW50aW5nIGluIHRoYXQgZGlyZWN0aW9uLiBHb3R0YSBtYWtlIHN1cmUgdGhvc2UgZXhwZWN0YXRpb25zIGFyZSBoYW5kbGVkIGNvcnJlY3RseS4gVGhpcydsbCBiZSB0aGUga2V5IHRvIG1ha2luZyB0aGlzIG1vZHVsZSB3b3JrIGxpa2UgYSBjaGFybS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTY0OCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDAzOjM3OjE0LjIxMTU3NzY0N1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzA4NzM3NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZnRfY3RfZXhwZWN0X29ial9pbml0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZnRfY3QuYz0xMjcwPXN0YXRpYyBpbnQgbmZ0X2N0X2V4cGVjdF9oZWxwZXJfYWxsb2Moc3RydWN0IG5mdF9jdF9leHBlY3Rfb2JqICpwcml2KVxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfY3QuYy0xMjkwLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmM6MTI5MTpzdGF0aWMgaW50IG5mdF9jdF9leHBlY3Rfb2JqX2luaXQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jLTEyOTItXFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgdGJbXSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmM9MTQyNj1zdGF0aWMgY29uc3Qgc3RydWN0IG5mdF9vYmplY3Rfb3BzIG5mdF9jdF9leHBlY3Rfb2JqX29wcyA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMtMTQyOS1cXHQuZXZhbFxcdFxcdD0gbmZ0X2N0X2V4cGVjdF9vYmpfZXZhbCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jOjE0MzA6XFx0LmluaXRcXHRcXHQ9IG5mdF9jdF9leHBlY3Rfb2JqX2luaXQsXFxubmV0L25ldGZpbHRlci9uZnRfY3QuYy0xNDMxLVxcdC5kZXN0cm95XFx0PSBuZnRfY3RfZXhwZWN0X29ial9kZXN0cm95LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwMzozNzoxNC4yNTg2NzA3OTRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTkyODQ0NTY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBDb25udHJhY2sgRXhwZWN0YXRpb24gT2JqZWN0IEZ1bmN0aW9ucyoqXG5cbk9rYXksIGxldCdzIHplcm8gaW4gb24gdGhlc2UgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gY29ubmVjdGlvbiB0cmFja2luZyBleHBlY3RhdGlvbnM6IGBuZnRfY3RfZXhwZWN0X29ial9pbml0YCwgYG5mdF9jdF9leHBlY3Rfb2JqX2V2YWxgLCBgbmZ0X2N0X2V4cGVjdF9vYmpfZGVzdHJveWAsIGBuZnRfY3RfZXhwZWN0X2hlbHBlcl9hbGxvY2AsIGBjdF9leHBlY3RfaGVscGAsIGFuZCBgbmZfY29ubnRyYWNrX2hlbHBlcl9mcmVlYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgdGhlaXIgdmlzaWJpbGl0eSwgYmVjYXVzZSB0aGF0J3MgY3JpdGljYWwgZm9yIGhvdyB3ZSBjYW4gaW50ZXJhY3Qgd2l0aCB0aGVtLiBBcmUgdGhlc2Ugc3RhdGljIG9yIGV4cG9ydGVkP1xuXG5SaWdodCwgcXVpY2sgY2hlY2suLi4gSG1tLCBpdCBsb29rcyBsaWtlIGBuZnRfY3RfZXhwZWN0X29ial9pbml0YCwgYG5mdF9jdF9leHBlY3Rfb2JqX2V2YWxgLCBgbmZ0X2N0X2V4cGVjdF9vYmpfZGVzdHJveWAsIGBuZnRfY3RfZXhwZWN0X2hlbHBlcl9hbGxvY2AgYW5kIGBjdF9leHBlY3RfaGVscGAgYXJlIGFsbCBkZWNsYXJlZCBhcyBzdGF0aWMuIFRoaXMgbWFrZXMgbWUgcGF1c2UuIEdpdmVuIG15IHVuZGVyc3RhbmRpbmcgb2YgYEZvY3VzU3ltYm9sc2AgYW5kIHNpbWlsYXIgdG9vbHMsIHN0YXRpYyBmdW5jdGlvbnMgY2FuIGJlIHByb2JsZW1hdGljIGZvciBkeW5hbWljIGFuYWx5c2lzIG9yIHN5bWJvbC1iYXNlZCB0cmFjaW5nLiBXZSBtaWdodCBuZWVkIHRvIGNvbnNpZGVyIGFsdGVybmF0aXZlcyBpZiB3ZSdyZSBsb2NrZWQgb3V0IG9mIHRoZXNlLlxuXG5CdXQgd2FpdCwgYG5mX2Nvbm50cmFja19oZWxwZXJfZnJlZWAgKmlzKiBleHBvcnRlZCwgdGhhdCdzIHVzZWZ1bC5cblxuTm93LCBpZiBtb3N0IG9mIHRoZSBjb3JlIGZ1bmN0aW9ucyBhcmUgc3RhdGljLCB0aGF0IHN1Z2dlc3RzIHdlIG5lZWQgdG8gZGlnIGRlZXBlciB0byBzZWUgaG93IHRoaXMgc3lzdGVtIGlzIG9yY2hlc3RyYXRlZC4gSXQgYWxzbyBtZWFucyB0aGF0LCBsaWtlbHksIGBGb2N1c1N5bWJvbHNgIHdpbGwgbm90IGJlIGFibGUgdG8gaW50ZXJhY3Qgd2l0aCB0aGVtIGFzIGVhc2lseSBhcyBpZiB0aGV5IHdlcmUgZXhwb3J0ZWQuIExldCdzIHNlZS4uLiBBaCwgdGhlcmUncyBgbmZ0X2N0X2V4cGVjdF9vYmpfb3BzYCwgYW5kIHRoYXQncyBsaWtlbHkgKnJlZ2lzdGVyZWQqIHNvbWV3aGVyZS4gVGhhdCdzIGEga2V5IGNsdWUuIEkgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gdGhhdCBwb2ludC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjI0NSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwMzozNzoxOS4yNTE1MTgzNzJaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDMyOTA1NjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZ0X2N0X2V4cGVjdF9vYmpfb3BzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZnRfY3QuYz0xNDI0PXN0YXRpYyBzdHJ1Y3QgbmZ0X29iamVjdF90eXBlIG5mdF9jdF9leHBlY3Rfb2JqX3R5cGU7XFxubmV0L25ldGZpbHRlci9uZnRfY3QuYy0xNDI1LVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmM6MTQyNjpzdGF0aWMgY29uc3Qgc3RydWN0IG5mdF9vYmplY3Rfb3BzIG5mdF9jdF9leHBlY3Rfb2JqX29wcyA9IHtcXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jLTE0MjctXFx0LnR5cGVcXHRcXHQ9IFxcdTAwMjZuZnRfY3RfZXhwZWN0X29ial90eXBlLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfY3QuYz0xNDM1PXN0YXRpYyBzdHJ1Y3QgbmZ0X29iamVjdF90eXBlIG5mdF9jdF9leHBlY3Rfb2JqX3R5cGUgX19yZWFkX21vc3RseSA9IHtcXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jLTE0MzYtXFx0LnR5cGVcXHRcXHQ9IE5GVF9PQkpFQ1RfQ1RfRVhQRUNULFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmM6MTQzNzpcXHQub3BzXFx0XFx0PSBcXHUwMDI2bmZ0X2N0X2V4cGVjdF9vYmpfb3BzLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMtMTQzOC1cXHQubWF4YXR0clxcdD0gTkZUQV9DVF9FWFBFQ1RfTUFYLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwMzozNzoxOS4yOTQ4MTQ0MjlaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTc0NDYwNDMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqSW5pdGlhbCBDb25udHJhY2sgTW9kdWxlIElucXVpcnkqKlxuXG5SaWdodCwgc28gYG5mdF9jdF9leHBlY3Rfb2JqX3R5cGVgIGlzIGRlZmluaXRlbHkgcmVnaXN0ZXJlZCwgdGhhdCdzIHN0ZXAgb25lLiBOb3csIHdoZXJlIGFyZSB3ZSB3aXRoIHRob3NlIGhlbHBlciBmdW5jdGlvbnM/IExldCdzIHNlZS4uLiBgbmZfY29ubnRyYWNrX2hlbHBlcl9mcmVlYCBpcyAqZXhwb3J0ZWQqIC0gZ29vZCwgaXQncyBhdmFpbGFibGUuIEFuZCBgbmZfY29ubnRyYWNrX2hlbHBlcl91bnJlZ2lzdGVyYCBpcyBhbHNvIGV4cG9ydGVkLiBTZWVtcyBwcmV0dHkgc3RhbmRhcmQgc28gZmFyLCB0aGVzZSBsb29rIGxpa2UgdGhlIGtleSBwaWVjZXMuIE5vdywgdGhlIHF1ZXN0aW9uIGlzLCB3aGVyZSBhcmUgdGhlc2UgZnVuY3Rpb25zIGFjdHVhbGx5IGJlaW5nICp1c2VkKj8gVGltZSB0byBjaGVjayBgbmZ0X2N0X21vZHVsZV9pbml0YCBvciBzb21ldGhpbmcgc2ltaWxhci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbm5lY3Rpb24gYmV0d2VlbiB0aGVzZSByZWdpc3RlcmVkIGFuZCBleHBvcnRlZCBlbGVtZW50cyB0byBoYXZlIGEgZnVsbCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzdGF0ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzEzOCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDAzOjM3OjIyLjQ2OTI3NzI1MVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDE3MDkzNDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZ0X2N0X2V4cGVjdF9vYmpfdHlwZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL25mdF9jdC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmM9MTQxNj1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmZ0X2N0X2V4cGVjdF9wb2xpY3lbTkZUQV9DVF9FWFBFQ1RfTUFYICsgMV0gPSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jLTE0MjMtXFxubmV0L25ldGZpbHRlci9uZnRfY3QuYzoxNDI0OnN0YXRpYyBzdHJ1Y3QgbmZ0X29iamVjdF90eXBlIG5mdF9jdF9leHBlY3Rfb2JqX3R5cGU7XFxubmV0L25ldGZpbHRlci9uZnRfY3QuYy0xNDI1LVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmM9MTQyNj1zdGF0aWMgY29uc3Qgc3RydWN0IG5mdF9vYmplY3Rfb3BzIG5mdF9jdF9leHBlY3Rfb2JqX29wcyA9IHtcXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jOjE0Mjc6XFx0LnR5cGVcXHRcXHQ9IFxcdTAwMjZuZnRfY3RfZXhwZWN0X29ial90eXBlLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMtMTQyOC1cXHQuc2l6ZVxcdFxcdD0gc2l6ZW9mKHN0cnVjdCBuZnRfY3RfZXhwZWN0X29iaiksXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jLTE0MzQtXFxubmV0L25ldGZpbHRlci9uZnRfY3QuYzoxNDM1OnN0YXRpYyBzdHJ1Y3QgbmZ0X29iamVjdF90eXBlIG5mdF9jdF9leHBlY3Rfb2JqX3R5cGUgX19yZWFkX21vc3RseSA9IHtcXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jLTE0MzYtXFx0LnR5cGVcXHRcXHQ9IE5GVF9PQkpFQ1RfQ1RfRVhQRUNULFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfY3QuYz0xNDQzPXN0YXRpYyBpbnQgX19pbml0IG5mdF9jdF9tb2R1bGVfaW5pdCh2b2lkKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfY3QuYy0xNDYwLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmM6MTQ2MTpcXHRlcnIgPSBuZnRfcmVnaXN0ZXJfb2JqKFxcdTAwMjZuZnRfY3RfZXhwZWN0X29ial90eXBlKTtcXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jLTE0NjItXFx0aWYgKGVyciBcXHUwMDNjIDApXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jLTE0NzItZXJyNDpcXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jOjE0NzM6XFx0bmZ0X3VucmVnaXN0ZXJfb2JqKFxcdTAwMjZuZnRfY3RfZXhwZWN0X29ial90eXBlKTtcXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jLTE0NzQtI2VuZGlmXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jPTE0ODQ9c3RhdGljIHZvaWQgX19leGl0IG5mdF9jdF9tb2R1bGVfZXhpdCh2b2lkKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfY3QuYy0xNDg4LSNlbmRpZlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmM6MTQ4OTpcXHRuZnRfdW5yZWdpc3Rlcl9vYmooXFx1MDAyNm5mdF9jdF9leHBlY3Rfb2JqX3R5cGUpO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMtMTQ5MC1cXHRuZnRfdW5yZWdpc3Rlcl9vYmooXFx1MDAyNm5mdF9jdF9oZWxwZXJfb2JqX3R5cGUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwMzozNzoyMi41MTA5OTM2MDhaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTI2MTExMjgzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTmV0ZmlsdGVyIENvbm50cmFjayBPYmplY3QgRnVuY3Rpb25zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgZnVuY3Rpb25zLCBgbmZ0X2N0X2V4cGVjdF9vYmpfaW5pdGAgYW5kIGBuZnRfY3RfZXhwZWN0X29ial9ldmFsYC4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0aGF0LCBiZWluZyBzdGF0aWMsIHRoZXkgKm1pZ2h0KiBnZXQgaW5saW5lZCBieSB0aGUgY29tcGlsZXIuIEJ1dCB3YWl0LCB0aGV5J3JlIGFzc2lnbmVkIHRvIGZ1bmN0aW9uIHBvaW50ZXJzIHdpdGhpbiBgbmZ0X2N0X2V4cGVjdF9vYmpfb3BzYC4gVGhhdCBtZWFucyB0aGV5IGRlZmluaXRlbHkgKmFyZW4ndCogaW5saW5lZC4gU28sIGFjY29yZGluZyB0byB0aGUgaW5zdHJ1Y3Rpb25zLCBpbmNsdWRpbmcgdGhlbSBpbiBgRm9jdXNTeW1ib2xzYCBpcyBhIHBvc3NpYmlsaXR5LCB0aG91Z2ggdGhlIHByb21wdCB3YW50cyBtZSB0byBwcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzLiBTaW5jZSB0aGV5ICphcmUqIHN0YXRpYywgZXZlbiB0aG91Z2ggdGhleSdyZSBub3QgaW5saW5lZCwgSSBuZWVkIHRvIGZpbmQgc29tZXRoaW5nIGJldHRlci5cblxuQXJlIHRoZXJlIGFueSBvdGhlciBvcHRpb25zPyBBaCwgYG5mX2Nvbm50cmFja19oZWxwZXJfZnJlZWAgaXMgbm9uLXN0YXRpYyBhbmQgbG9va3MgcHJvbWlzaW5nLiBBbmQgYG5mX2Nvbm50cmFja19oZWxwZXJfdW5yZWdpc3RlcmAsIHRoYXQncyBub24tc3RhdGljIHRvby5cblxuQnV0LCBoYW5nIG9uLCBsZXQncyBzdGVwIGJhY2sgZm9yIGEgc2Vjb25kLiBgbmZ0X2N0X2V4cGVjdF9vYmpfaW5pdGAgKmlzKiBjYWxsZWQgdmlhIGBuZnRfb2JqZWN0X29wcy1cdTAwM2Vpbml0YC4gVGhlIGFjdHVhbCBlbnRyeSBwb2ludCBmcm9tIHRoZSBOZXRsaW5rIGludGVyZmFjZSBpcyBwcm9iYWJseSBzb21ldGhpbmcgbGlrZSBgbmZfdGFibGVzX25ld29iamAgb3Igc29tZXRoaW5nIHNpbWlsYXIsIHJpZ2h0PyBUaG91Z2gsIEkgc2VlIHRoYXQgYG5mX2Nvbm50cmFja19oZWxwZXJfZnJlZWAgaGFzIGJlZW4gZXhwbGljaXRseSBhZGRlZCBpbiB0aGlzIHBhdGNoLiBTbywgaXQgaXMgZGVmaW5pdGVseSBhIHZhbGlkIG9wdGlvbiFcblxuT2theSwgdGltZSB0byBjaGVjayBgbmV0L25ldGZpbHRlci9LY29uZmlnYCB0byBjb25maXJtIGBORlRfQ1RgLiBMZXQncyBzZWUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODAzNCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwMzozNzoyNy43NzIxMDkwNVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM4NzI3NTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5GVF9DVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnPTQ4NT1jb25maWcgTkZUX05VTUdFTlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ5MC1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NDkxOmNvbmZpZyBORlRfQ1RcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDkyLVxcdGRlcGVuZHMgb24gTkZfQ09OTlRSQUNLXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDAzOjM3OjI3LjgxNTk4NzcyN1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTM3NTIyMDY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBhIHBlcnNvbmFsIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKk5hdmlnYXRpbmcgRGVwZW5kZW5jaWVzIGluIHRoZSBOZXRmaWx0ZXIgRnJhbWV3b3JrKipcblxuQWxyaWdodCwgc28gSSdtIHNlZWluZyB0aGlzIGBORlRfQ1RgIG1vZHVsZS4uLiBJIGltbWVkaWF0ZWx5IHJlY29nbml6ZSBpdCBhcyBzb21ldGhpbmcgcmVsYXRlZCB0byBjb25udHJhY2suIFNwZWNpZmljYWxseSwgSSdtIG5vdGluZyB0aGF0IGBORlRfQ1RgIHNlZW1zIHRvICpyZWx5KiBvbiBgTkZfQ09OTlRSQUNLYC4gVGhhdCdzIGEga2V5IHBpZWNlIG9mIGluZm9ybWF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0IGRlcGVuZGVuY3kgZnVsbHkuXG5cblRoZXJlZm9yZSwgdGhlIGxvZ2ljYWwgbmV4dCBzdGVwIGZvciBtZSBpcyB0byBkaWcgaW50byB0aGUgTmV0ZmlsdGVyIGNvbmZpZ3VyYXRpb24uIEknbGwgbmVlZCB0byBnbyB0byB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlciDigJMgdGhlIGBLY29uZmlnYCBmaWxlcyDigJMgd2l0aGluIHRoZSBgbmV0L25ldGZpbHRlci9gIGRpcmVjdG9yeS4gVGhhdCdzIHdoZXJlIEknbGwgZmluZCB0aGUgZGVmaW5pdGlvbnMgZm9yIGBORl9DT05OVFJBQ0tgIGFuZCwgaW1wb3J0YW50bHksIHVuZGVyc3RhbmQgaG93IGl0IHJlbGF0ZXMgdG8gYE5GVF9DVGAuIEkgbmVlZCB0byBlbnN1cmUgSSdtIGdldHRpbmcgdGhlIHdob2xlIHBpY3R1cmUgb2YgdGhlIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiB0aGVzZSBtb2R1bGVzLiBNeSBnb2FsIGlzIHRvIGNvbmZpcm0gdGhlIGRlcGVuZGVuY3kgYW5kIGFzY2VydGFpbiBhbnkgcmVsYXRlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg3NjYsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwMzozNzozMC45NTM1MTIzNDFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyMTkyNzg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORl9DT05OVFJBQ0tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz03ND1jb25maWcgTkVURklMVEVSX05FVExJTktfT1NGXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctODEtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjgyOmNvbmZpZyBORl9DT05OVFJBQ0tcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctODMtXFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBjb25uZWN0aW9uIHRyYWNraW5nIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9MTExPWNvbmZpZyBORVRGSUxURVJfQ09OTkNPVU5UXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTEzLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxMTQ6Y29uZmlnIE5GX0NPTk5UUkFDS19NQVJLXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTExNS1cXHRib29sICAnQ29ubmVjdGlvbiBtYXJrIHRyYWNraW5nIHN1cHBvcnQnXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTIyLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxMjM6Y29uZmlnIE5GX0NPTk5UUkFDS19TRUNNQVJLXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTEyNC1cXHRib29sICAnQ29ubmVjdGlvbiB0cmFja2luZyBzZWN1cml0eSBtYXJrIHN1cHBvcnQnXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTM1LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxMzY6Y29uZmlnIE5GX0NPTk5UUkFDS19aT05FU1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMzctXFx0Ym9vbCAgJ0Nvbm5lY3Rpb24gdHJhY2tpbmcgem9uZXMnXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTQ3LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxNDg6Y29uZmlnIE5GX0NPTk5UUkFDS19QUk9DRlNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTQ5LVxcdGJvb2wgXFxcIlN1cHBseSBDVCBsaXN0IGluIHByb2NmcyAoT0JTT0xFVEUpXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE1Ni1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTU3OmNvbmZpZyBORl9DT05OVFJBQ0tfRVZFTlRTXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE1OC1cXHRib29sIFxcXCJDb25uZWN0aW9uIHRyYWNraW5nIGV2ZW50c1xcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNjYtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjE2Nzpjb25maWcgTkZfQ09OTlRSQUNLX1RJTUVPVVRcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTY4LVxcdGJvb2wgICdDb25uZWN0aW9uIHRyYWNraW5nIHRpbWVvdXQnXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTc2LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxNzc6Y29uZmlnIE5GX0NPTk5UUkFDS19USU1FU1RBTVBcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTc4LVxcdGJvb2wgICdDb25uZWN0aW9uIHRyYWNraW5nIHRpbWVzdGFtcGluZydcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xODctXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjE4ODpjb25maWcgTkZfQ09OTlRSQUNLX0xBQkVMU1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xODktXFx0Ym9vbCBcXFwiQ29ubmVjdGlvbiB0cmFja2luZyBsYWJlbHNcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTk0LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxOTU6Y29uZmlnIE5GX0NPTk5UUkFDS19PVlNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTk2LVxcdGJvb2xcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz0yMDE9Y29uZmlnIE5GX0NUX1BST1RPX1NDVFBcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yMTEtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjIxMjpjb25maWcgTkZfQ09OTlRSQUNLX0FNQU5EQVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yMTMtXFx0dHJpc3RhdGUgXFxcIkFtYW5kYSBiYWNrdXAgcHJvdG9jb2wgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yMjYtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjIyNzpjb25maWcgTkZfQ09OTlRSQUNLX0ZUUFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yMjgtXFx0dHJpc3RhdGUgXFxcIkZUUCBwcm90b2NvbCBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTIzOC1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MjM5OmNvbmZpZyBORl9DT05OVFJBQ0tfSDMyM1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNDAtXFx0dHJpc3RhdGUgXFxcIkguMzIzIHByb3RvY29sIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjU3LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyNTg6Y29uZmlnIE5GX0NPTk5UUkFDS19JUkNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjU5LVxcdHRyaXN0YXRlIFxcXCJJUkMgRENDIHByb3RvY29sIHN1cHBvcnQgKG9ic29sZXRlKVxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNzMtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjI3NDpjb25maWcgTkZfQ09OTlRSQUNLX0JST0FEQ0FTVFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yNzUtXFx0dHJpc3RhdGVcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjc2LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyNzc6Y29uZmlnIE5GX0NPTk5UUkFDS19ORVRCSU9TX05TXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTI3OC1cXHR0cmlzdGF0ZSBcXFwiTmV0QklPUyBuYW1lIHNlcnZpY2UgcHJvdG9jb2wgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0yOTUtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjI5Njpjb25maWcgTkZfQ09OTlRSQUNLX1NOTVBcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjk3LVxcdHRyaXN0YXRlIFxcXCJTTk1QIHNlcnZpY2UgcHJvdG9jb2wgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zMTAtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjMxMTpjb25maWcgTkZfQ09OTlRSQUNLX1BQVFBcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzEyLVxcdHRyaXN0YXRlIFxcXCJQUHRQIHByb3RvY29sIHN1cHBvcnQgKGRlcHJlY2F0ZWQpXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTMyOS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MzMwOmNvbmZpZyBORl9DT05OVFJBQ0tfU0FORVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zMzEtXFx0dHJpc3RhdGUgXFxcIlNBTkUgcHJvdG9jb2wgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zNDItXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjM0Mzpjb25maWcgTkZfQ09OTlRSQUNLX1NJUFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zNDQtXFx0dHJpc3RhdGUgXFxcIlNJUCBwcm90b2NvbCBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTM1NC1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MzU1OmNvbmZpZyBORl9DT05OVFJBQ0tfVEZUUFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zNTYtXFx0dHJpc3RhdGUgXFxcIlRGVFAgcHJvdG9jb2wgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDM6Mzc6MzAuOTk1NzA4NzI5WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI3Mjk0NDUzMzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIENvbm5lY3Rpb24gVHJhY2tpbmcgQ29uZmlndXJhdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBjb25uZWN0aW9uIHRyYWNraW5nIG9wdGlvbnMgaGVyZS4gSSBzZWUgYE5GX0NPTk5UUkFDS2AgYW5kIGBORlRfQ1RgIG1lbnRpb25lZC4gUmlnaHQsIHRoYXQncyB0aGUgY2xhc3NpYyBuZXRmaWx0ZXIgYW5kIHRoZSBuZXdlciBuZnRhYmxlcyBpbXBsZW1lbnRhdGlvbnMsIHJlc3BlY3RpdmVseS4gTm93LCBJIHZhZ3VlbHkgcmVtZW1iZXIgYE5GVF9DVGAgYnVpbGRpbmcgb24gdG9wIG9mIGBORl9DT05OVFJBQ0tgLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBub3Qgb3Zlcmxvb2tpbmcgYW55IG90aGVyIGNydWNpYWwgZGVwZW5kZW5jaWVzLiBMZXQgbWUgcXVpY2tseSB2ZXJpZnkgZXhhY3RseSB3aGF0IGBORlRfQ1RgIHJlcXVpcmVzIHRvIGZ1bmN0aW9uLiBUaW1lIHRvIGNoZWNrIGl0cyBkZXBlbmRlbmN5IHRyZWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMzQ3LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDM6Mzc6MzMuNzI1MTU2NTE4WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzUxMTk2NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkZUX0NUXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWc9NDg1PWNvbmZpZyBORlRfTlVNR0VOXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDkwLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo0OTE6Y29uZmlnIE5GVF9DVFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00OTItXFx0ZGVwZW5kcyBvbiBORl9DT05OVFJBQ0tcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDM6Mzc6MzMuNzY4NjcyNTg1WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NDk2MDU2NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSBgbmV0L25ldGZpbHRlci9LY29uZmlnYCBmaWxlLCBzcGVjaWZpY2FsbHkgdGhlIHNlY3Rpb24gY29uY2VybmluZyBgTkZUX0NUYDpcblxuKipEZWx2aW5nIGludG8gYE5GVF9DVGAgaW4gS2NvbmZpZyoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGUgYEtjb25maWdgIGZpbGUgZm9yIHRoZSBuZXRmaWx0ZXIgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gaG93IHRoZSBjb25udHJhY2sgZnVuY3Rpb25hbGl0eSwgcmVwcmVzZW50ZWQgYnkgYE5GVF9DVGAsIGlzIGNvbmZpZ3VyZWQuICBJJ20gZXhwZWN0aW5nIHRvIHNlZSBkZXBlbmRlbmNpZXMgYW5kIHBvdGVudGlhbGx5IHNvbWUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gbG9naWMgZGVmaW5lZCBoZXJlLiBUaGlzIGZpbGUgaXMgdGhlIGJlZHJvY2sgZm9yIGhvdyB0aGUga2VybmVsJ3MgYnVpbGQgc3lzdGVtIGRlY2lkZXMgKndoZXRoZXIqIGFuZCAqaG93KiB0byBpbmNsdWRlIHRoaXMgY3J1Y2lhbCBjb21wb25lbnQuIEknbSBsb29raW5nIGZvciBjbHVlcyBhYm91dCB0aGUgZGVmYXVsdCBzdGF0ZSBvZiBgTkZUX0NUYCwgYW55IHJlbGF0ZWQgb3B0aW9ucyBpdCBkZXBlbmRzIG9uIChsaWtlIG90aGVyIE5ldGZpbHRlciBtb2R1bGVzIG9yIHNwZWNpZmljIGtlcm5lbCBmZWF0dXJlcyksIGFuZCBhbnkgcG90ZW50aWFsIHRyYWRlLW9mZnMgaW4gdGVybXMgb2YgcmVzb3VyY2UgdXNhZ2Ugb3IgcGVyZm9ybWFuY2UgdGhhdCBtaWdodCBiZSBleHByZXNzZWQgaGVyZS4gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGF0IGNvbXBsZXggZmVhdHVyZXMgbGlrZSBjb25uZWN0aW9uIHRyYWNraW5nIGFyZSBvZnRlbiBpbnRlcnR3aW5lZCB3aXRoIG90aGVyIGFyZWFzLCBzbyBJJ2xsIGJlIGtlZXBpbmcgYW4gZXllIG91dCBmb3IgaG93IHRoaXMgaXMgcHJlc2VudGVkLCB0aGlua2luZyBhYm91dCBob3cgSSdkIGN1c3RvbWl6ZSB0aGlzIHRvIGdldCB0aGUgc3BlY2lmaWMgYmVoYXZpb3JzIHRoYXQgSSBuZWVkIGluIG15IGRlcGxveW1lbnRzLiBJJ20gYW50aWNpcGF0aW5nIHRoYXQgYE5GVF9DVGAgd2lsbCBsaWtlbHkgYmUgZGVwZW5kZW50IG9uIG90aGVyIGNvcmUgbmV0ZmlsdGVyIG1vZHVsZXMsIGFuZCBJJ2xsIGJlIGludGVyZXN0ZWQgaW4gaG93IHRoZSBvcHRpb25zIGZvciB0aGVzZSBhcmUgZGVzY3JpYmVkLiBMZXQncyBzZWUgaG93IHRoZXkgaGFuZGxlIGVuYWJsaW5nIG9yIGRpc2FibGluZyBpdCBhbmQgdGhlIGNvbnNlcXVlbmNlcyBvZiB0aG9zZSBjaG9pY2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDYyNSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDAzOjM3OjM3LjIxODI4MDg4WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMzQxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNDgwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDgwOlxcdGNvbmZpZyBORl9UQUJMRVNfTkVUREVWXFxuIDQ4MTpcXHRcXHRib29sIFxcXCJOZXRmaWx0ZXIgbmZfdGFibGVzIG5ldGRldiB0YWJsZXMgc3VwcG9ydFxcXCJcXG4gNDgyOlxcdFxcdGhlbHBcXG4gNDgzOlxcdFxcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgXFxcIm5ldGRldlxcXCIgdGFibGUuXFxuIDQ4NDpcXHRcXG4gNDg1OlxcdGNvbmZpZyBORlRfTlVNR0VOXFxuIDQ4NjpcXHRcXHR0cmlzdGF0ZSBcXFwiTmV0ZmlsdGVyIG5mX3RhYmxlcyBudW1iZXIgZ2VuZXJhdG9yIG1vZHVsZVxcXCJcXG4gNDg3OlxcdFxcdGhlbHBcXG4gNDg4OlxcdFxcdCAgVGhpcyBvcHRpb24gYWRkcyB0aGUgbnVtYmVyIGdlbmVyYXRvciBleHByZXNzaW9uIHVzZWQgdG8gcGVyZm9ybVxcbiA0ODk6XFx0XFx0ICBpbmNyZW1lbnRhbCBjb3VudGluZyBhbmQgcmFuZG9tIG51bWJlcnMgYm91bmQgdG8gYSB1cHBlciBsaW1pdC5cXG4gNDkwOlxcdFxcbiA0OTE6XFx0Y29uZmlnIE5GVF9DVFxcbiA0OTI6XFx0XFx0ZGVwZW5kcyBvbiBORl9DT05OVFJBQ0tcXG4gNDkzOlxcdFxcdHRyaXN0YXRlIFxcXCJOZXRmaWx0ZXIgbmZfdGFibGVzIGNvbm50cmFjayBtb2R1bGVcXFwiXFxuIDQ5NDpcXHRcXHRoZWxwXFxuIDQ5NTpcXHRcXHQgIFRoaXMgb3B0aW9uIGFkZHMgdGhlIFxcXCJjdFxcXCIgZXhwcmVzc2lvbiB0aGF0IHlvdSBjYW4gdXNlIHRvIG1hdGNoXFxuIDQ5NjpcXHRcXHQgIGNvbm5lY3Rpb24gdHJhY2tpbmcgaW5mb3JtYXRpb24gc3VjaCBhcyB0aGUgZmxvdyBzdGF0ZS5cXG4gNDk3OlxcdFxcbiA0OTg6XFx0Y29uZmlnIE5GVF9FWFRIRFJfRENDUFxcbiA0OTk6XFx0XFx0Ym9vbCBcXFwiTmV0ZmlsdGVyIG5mX3RhYmxlcyBleHRoZHIgRENDUCBzdXBwb3J0IChERVBSRUNBVEVEKVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDM6Mzc6MzcuMjE4Mzg2MzVaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzEwNTc5NTcwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQ2hlY2tpbmcgdGhlIFBsYWNlbWVudCBvZiBORlRfQ1QqKlxuXG5Pa2F5LCBzbyBJJ20gcHJldHR5IHN1cmUgSSBzYXcgYE5GVF9DVGAgbmVzdGVkIHdpdGhpbiB0aGF0IGBpZiBORl9UQUJMRVNgIGNvbmRpdGlvbmFsLiBCdXQgbGV0J3Mgbm90IHJlbHkgb24gbWVtb3J5OyBJIG5lZWQgdG8gY29uZmlybSB0aGF0LiBHb3R0YSBxdWlja2x5IHZlcmlmeSB0aGF0IGBORlRfQ1RgIGlzIGFjdHVhbGx5IGRlZmluZWQgY29uZGl0aW9uYWxseSBiYXNlZCBvbiB0aGUgYE5GX1RBQkxFU2AgbWFjcm8uIERvdWJsZS1jaGVja2luZyBlbnN1cmVzIHRoYXQgdGhlIGNvbXBpbGUtdGltZSBkZXBlbmRlbmNpZXMgYXJlIHdoYXQgSSBleHBlY3QgdGhlbSB0byBiZSwgZXNwZWNpYWxseSBjb25zaWRlcmluZyB0aGF0IGBORl9UQUJMRVNgIGxpa2VseSBnb3Zlcm5zIHRoZSBpbmNsdXNpb24gb2YgdGhlIGVudGlyZSBOZXRmaWx0ZXIgaW5mcmFzdHJ1Y3R1cmUgY29tcG9uZW50cy4gVGhpcyBpcyBhIGNvcmUgcGFydCBvZiB0aGUgc3lzdGVtJ3MgbW9kdWxhcml0eSwgc28gSSBuZWVkIHRvIGJlIGV4YWN0LiBJdCdzIGEgcXVpY2sgc2FuaXR5IGNoZWNrIGJ1dCBlc3NlbnRpYWwgYmVmb3JlIEkgbW92ZSBmb3J3YXJkLCBlc3BlY2lhbGx5IGlmIGl0J3MgcmVsYXRlZCB0byBzb21lIHdvcmsgSSdtIGRvaW5nIGluIHRoYXQgYXJlYS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEyNjksIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDAzOjM3OjQwLjMyNDE4NTA1NloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDI1ODA3NTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5GX1RBQkxFU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnPTQ1Mz1lbmRpZiAjIE5GX0NPTk5UUkFDS1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00NTQtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjQ1NTpjb25maWcgTkZfVEFCTEVTXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ1Ni1cXHRzZWxlY3QgTkVURklMVEVSX05FVExJTktcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz00NzE9aWYgTkZfVEFCTEVTXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjQ3Mjpjb25maWcgTkZfVEFCTEVTX0lORVRcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDczLVxcdGRlcGVuZHMgb24gSVBWNlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ3OS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NDgwOmNvbmZpZyBORl9UQUJMRVNfTkVUREVWXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ4MS1cXHRib29sIFxcXCJOZXRmaWx0ZXIgbmZfdGFibGVzIG5ldGRldiB0YWJsZXMgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDM6Mzc6NDAuMzY2NzcxOTYzWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcyNDMyMjgyMjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS2VybmVsIE1vZHVsZSBBbmFseXNpczogSWRlbnRpZnlpbmcgRnV6emluZyBUYXJnZXRzKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGBORl9UQUJMRVNgIHN0dWZmLiBJdCdzIGNsZWFyIHRoYXQgdG8gZXZlbiBiZWdpbiwgSSBuZWVkIHRvIGhhdmUgdGhlIGBORl9UQUJMRVNgLCBgTkZfQ09OTlRSQUNLYCwgYW5kIGBORlRfQ1RgIGNvbmZpZ3MgZW5hYmxlZC4gTm93LCB0aGUgcmVhbCBxdWVzdGlvbiBpcywgd2hhdCBmdW5jdGlvbnMgc2hvdWxkIEkgYmUgdGFyZ2V0aW5nIHdpdGggZnV6emluZz9cblxuTGV0J3Mgc2VlLiBgbmZfY29ubnRyYWNrX2hlbHBlcl9mcmVlYCBqdW1wcyBvdXQgYmVjYXVzZSBpdCdzIGV4cG9ydGVkIGFuZCBjYWxsZWQgZnJvbSBib3RoIGBuZnRfY3RfZXhwZWN0X29ial9kZXN0cm95YCBhbmQgYG5mX2Nvbm50cmFja19oZWxwZXJfdW5yZWdpc3RlcmAuIFRoZW4sIGBuZnRfY3RfZXhwZWN0X29ial9pbml0YCBnZXRzIGNhbGxlZCBvbiBuZXcgZXhwZWN0YXRpb24gb2JqZWN0IGNyZWF0aW9uLCBhbmQgYG5mdF9jdF9leHBlY3Rfb2JqX2V2YWxgIGlzIGludm9rZWQgZHVyaW5nIGV4cGVjdGF0aW9uIGV2YWx1YXRpb24uIGBuZnRfY3RfZXhwZWN0X2hlbHBlcl9hbGxvY2AgcG9wcyB1cCBhcyBwYXJ0IG9mIGBuZnRfY3RfZXhwZWN0X29ial9pbml0YCwgYW5kIGZpbmFsbHksIGBjdF9leHBlY3RfaGVscGAgaXMgdHJpZ2dlcmVkIHdoZW4gYW4gZXhwZWN0YXRpb24gaXMgbWF0Y2hlZC5cblxuV2FpdCBhIHNlY29uZCwgYG5mdF9jdF9leHBlY3Rfb2JqX2luaXRgIGlzICpzdGF0aWMqPyBCdXQgaXQncyBhc3NpZ25lZCB0byBgbmZ0X2N0X2V4cGVjdF9vYmpfb3BzLmluaXRgLiBIbW0sIGNhbiBJIHVzZSBpdCBpbiBgRm9jdXNTeW1ib2xzYD8gWWVzLCBzeXprYWxsZXIgKmNhbiogZnV6eiBzdGF0aWMgZnVuY3Rpb25zIGFzIGxvbmcgYXMgdGhleSBhcmVuJ3QgaW5saW5lZCEgTGV0J3MgY2hlY2suIEFuZCBzaW5jZSBgbmZ0X2N0X2V4cGVjdF9vYmpfaW5pdGAgaXMgYSBkZWNlbnQgc2l6ZSwgaXQncyAqcHJvYmFibHkqIG5vdCBpbmxpbmVkLiBgbmZ0X2N0X2V4cGVjdF9vYmpfZXZhbGAgaXMgYWxzbyBzdWJzdGFudGlhbCwgc28gdGhhdCdzIGxpa2VseSBub3QgaW5saW5lZCBlaXRoZXIuIGBjdF9leHBlY3RfaGVscGAsIHRoYXQncyBhc3NpZ25lZCB2aWEgYHJjdV9hc3NpZ25fcG9pbnRlcmAgdG8gYGN0X2V4cGVjdF9oZWxwZXItXHUwMDNlaGVscGAsIHNvIGl0J3MgKmRlZmluaXRlbHkqIG5vdCBpbmxpbmVkLiBBbmQgb2YgY291cnNlLCBgbmZfY29ubnRyYWNrX2hlbHBlcl9mcmVlYCBpcyBleHBvcnRlZC5cblxuQWxyaWdodCwgcHV0dGluZyBpdCBhbGwgdG9nZXRoZXIsIGhlcmUncyB0aGUgbGlzdCBvZiBmdW5jdGlvbnMgdG8gdmVyaWZ5IGFuZCB0aGVuIGZvY3VzIG9uOlxuXG4qICAgYG5mdF9jdF9leHBlY3Rfb2JqX2luaXRgXG4qICAgYG5mdF9jdF9leHBlY3Rfb2JqX2V2YWxgXG4qICAgYG5mdF9jdF9leHBlY3Rfb2JqX2Rlc3Ryb3lgXG4qICAgYG5mdF9jdF9leHBlY3RfaGVscGVyX2FsbG9jYFxuKiAgIGBjdF9leHBlY3RfaGVscGBcbiogICBgbmZfY29ubnRyYWNrX2hlbHBlcl9mcmVlYFxuXG5Ob3csIGxldCBtZSBnbyBhaGVhZCBhbmQgY29uZmlybSB0aGVzZSBmdW5jdGlvbnMgZXhpc3QgaW4gdGhlIGtlcm5lbCBhbmQgYXJlbid0IGJlaW5nIG9wdGltaXplZCBhd2F5LiBUaW1lIHRvIGdldCB0byB3b3JrIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTcwMiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwMzozNzo0Ny42MTAwMDI5MTFaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5MjU2Mjg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mdF9jdF9leHBlY3Rfb2JqX2luaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9uZnRfY3QuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mdF9jdC5jPTEyNzA9c3RhdGljIGludCBuZnRfY3RfZXhwZWN0X2hlbHBlcl9hbGxvYyhzdHJ1Y3QgbmZ0X2N0X2V4cGVjdF9vYmogKnByaXYpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jLTEyOTAtXFxubmV0L25ldGZpbHRlci9uZnRfY3QuYzoxMjkxOnN0YXRpYyBpbnQgbmZ0X2N0X2V4cGVjdF9vYmpfaW5pdChjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMtMTI5Mi1cXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCB0YltdLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfY3QuYz0xNDI2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZ0X29iamVjdF9vcHMgbmZ0X2N0X2V4cGVjdF9vYmpfb3BzID0ge1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfY3QuYy0xNDI5LVxcdC5ldmFsXFx0XFx0PSBuZnRfY3RfZXhwZWN0X29ial9ldmFsLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmM6MTQzMDpcXHQuaW5pdFxcdFxcdD0gbmZ0X2N0X2V4cGVjdF9vYmpfaW5pdCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jLTE0MzEtXFx0LmRlc3Ryb3lcXHQ9IG5mdF9jdF9leHBlY3Rfb2JqX2Rlc3Ryb3ksXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDAzOjM3OjQ3LjY1OTI2MzIwOFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNDkyNjk5MTU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aG9zZSB0aG91Z2h0cyBhcyBhIGZpcnN0LXBlcnNvbiBleHBlcnQgcGVyc3BlY3RpdmU6XG5cbioqQ29ubmVjdGlvbiBUcmFja2luZyBDb25jZXJucyoqXG5cblllcywgY29ubmVjdGlvbiB0cmFja2luZywgaXQncyBkZWZpbml0ZWx5IHRoZXJlLCB0aGUgZm91bmRhdGlvbiBvZiBhIGxvdCBvZiBuZXR3b3JrIHNlY3VyaXR5IGFuZCB0cmFmZmljIG1hbmFnZW1lbnQuIEJ1dCBub3cgdGhhdCBJIGFtIHRoaW5raW5nIGFib3V0IGNvbm5lY3Rpb24gdHJhY2tpbmcsIHdoYXQgYWJvdXQgYG5mX2Nvbm50cmFja19oZWxwZXJfZnJlZWA/IEl0IGFsd2F5cyBzZWVtcyB0byBiZSBhIHNvdXJjZSBvZiBwb3RlbnRpYWwgaXNzdWVzLiBEb2VzIHRoaXMgaGVscGVyIG5lZWQgaW1wcm92ZW1lbnQ/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyOTg3LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDM6Mzc6NTAuMTUxOTY1ODAyWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDk5MjM4NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZl9jb25udHJhY2tfaGVscGVyX2ZyZWVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmM9NDQ0PXN0YXRpYyBib29sIGV4cGVjdF9pdGVyX21lKHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHAsIHZvaWQgKmRhdGEpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy00NTgtXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmM6NDU5OnZvaWQgbmZfY29ubnRyYWNrX2hlbHBlcl9mcmVlKHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICptZSlcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy00NjAte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMtNDczLX1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYzo0NzQ6RVhQT1JUX1NZTUJPTF9HUEwobmZfY29ubnRyYWNrX2hlbHBlcl9mcmVlKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy00NzUtXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmM9NDc2PXZvaWQgbmZfY29ubnRyYWNrX2hlbHBlcl91bnJlZ2lzdGVyKHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICptZSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jLTQ4Mi1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYzo0ODM6XFx0bmZfY29ubnRyYWNrX2hlbHBlcl9mcmVlKG1lKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuYy00ODQtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwMzozNzo1MC4xOTY5NjQxOFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNTUxMjcxOTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGNyYWZ0ZWQgd2l0aCB0aGUgdW5kZXJzdGFuZGluZyB0aGF0IEknbSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6XG5cbioqTmF2aWdhdGluZyB0aGUgS25vd24gYW5kIHRoZSBQb3RlbnRpYWwqKlxuXG5ZZXMsIHRoaXMgdGhpbmcsIHRoaXMgY29uY2VwdCwgdGhpcyBzcGVjaWZpYyBpc3N1ZS4uLiBpdCdzIHJlYWwuIEkgYWNrbm93bGVkZ2UgaXRzIHByZXNlbmNlLiBXZSdyZSBkZWFsaW5nIHdpdGggc29tZXRoaW5nIHRhbmdpYmxlIGhlcmUuXG5cbk5vdywgYSBjcml0aWNhbCBwb2ludCBmbGFzaGVzIGluIG15IG1pbmQ6IHdoYXQgYWJvdXQgYGN0X2V4cGVjdF9oZWxwYD8gSXQncyBhIGtleSBmdW5jdGlvbiBvciBwYXJhbWV0ZXIgcmVsYXRlZCB0byB0aGlzLiBJdCdzIG9mdGVuIG92ZXJsb29rZWQsIGJ1dCBpdCdzICpsaWtlbHkqIGhpZ2hseSByZWxldmFudCB0byB3aGF0ZXZlciBzaXR1YXRpb24gd2UncmUgY3VycmVudGx5IHByb2Nlc3NpbmcuIFdlJ2xsIGhhdmUgdG8gaW52ZXN0aWdhdGUgdGhhdCBmdXJ0aGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzQ3NiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDAzOjM3OjUyLjc0ODIzOTA5WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODkwMTQzNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjdF9leHBlY3RfaGVscFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL25mdF9jdC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmM9MTIzMT1zdHJ1Y3QgbmZ0X2N0X2V4cGVjdF9kYXRhIHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMtMTIzNS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jOjEyMzY6c3RhdGljIGludCBjdF9leHBlY3RfaGVscChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgcHJvdG9mZixcXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jLTEyMzctXFx0XFx0XFx0ICBzdHJ1Y3QgbmZfY29ubiAqY3QsIGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfY3QuYy0xMjY5LVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmM6MTI3MDpzdGF0aWMgaW50IG5mdF9jdF9leHBlY3RfaGVscGVyX2FsbG9jKHN0cnVjdCBuZnRfY3RfZXhwZWN0X29iaiAqcHJpdilcXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jLTEyNzEte1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmM6MTI3MjpcXHRzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqY3RfZXhwZWN0X2hlbHBlcjtcXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jLTEyNzMtXFxubmV0L25ldGZpbHRlci9uZnRfY3QuYzoxMjc0OlxcdGN0X2V4cGVjdF9oZWxwZXIgPSBremFsbG9jX29iaihzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlcik7XFxubmV0L25ldGZpbHRlci9uZnRfY3QuYzoxMjc1OlxcdGlmICghY3RfZXhwZWN0X2hlbHBlcilcXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jLTEyNzYtXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxubmV0L25ldGZpbHRlci9uZnRfY3QuYy0xMjc3LVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmM6MTI3ODpcXHRzbnByaW50ZihjdF9leHBlY3RfaGVscGVyLVxcdTAwM2VuYW1lLCBzaXplb2YoY3RfZXhwZWN0X2hlbHBlci1cXHUwMDNlbmFtZSksIFxcXCIlc1xcXCIsXFxubmV0L25ldGZpbHRlci9uZnRfY3QuYy0xMjc5LVxcdFxcdCBcXFwibmZ0X2N0X2V4cGVjdFxcXCIpO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmM6MTI4MDpcXHRjdF9leHBlY3RfaGVscGVyLVxcdTAwM2VtZSA9IFRISVNfTU9EVUxFO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmM6MTI4MTpcXHRjdF9leHBlY3RfaGVscGVyLVxcdTAwM2VleHBlY3RfcG9saWN5W05GX0NUX0VYUEVDVF9DTEFTU19ERUZBVUxUXS5tYXhfZXhwZWN0ZWQgPSBwcml2LVxcdTAwM2VzaXplO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmM6MTI4MjpcXHRyY3VfYXNzaWduX3BvaW50ZXIoY3RfZXhwZWN0X2hlbHBlci1cXHUwMDNlaGVscCwgY3RfZXhwZWN0X2hlbHApO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmM6MTI4MzpcXHRyZWZjb3VudF9zZXQoXFx1MDAyNmN0X2V4cGVjdF9oZWxwZXItXFx1MDAzZWN0X3JlZmNudCwgMSk7XFxubmV0L25ldGZpbHRlci9uZnRfY3QuYy0xMjg0LVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMtMTI4NS1cXHQvKiBObyBuZWVkIHRvIHJlZ2lzdGVyIHRoaXMgaGVscGVyLCB0aGlzIGlzIGludGVybmFsLiAqL1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmM6MTI4NjpcXHRwcml2LVxcdTAwM2VoZWxwZXIgPSBjdF9leHBlY3RfaGVscGVyO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMtMTI4Ny1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmM9MTI5MT1zdGF0aWMgaW50IG5mdF9jdF9leHBlY3Rfb2JqX2luaXQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2N0LmMtMTM0My1cXG5uZXQvbmV0ZmlsdGVyL25mdF9jdC5jOjEzNDQ6XFx0ZXJyID0gbmZ0X2N0X2V4cGVjdF9oZWxwZXJfYWxsb2MocHJpdik7XFxubmV0L25ldGZpbHRlci9uZnRfY3QuYy0xMzQ1LVxcdGlmIChlcnIgXFx1MDAzYyAwKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDAzOjM3OjUyLjc5NzE0NzEzN1oiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTUyMDA5NjczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkNvbmZpZ3VyYXRpb24gRGVwZW5kZW5jeSBEZWVwIERpdmUqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBtYWtpbmcgc3VyZSB3ZSd2ZSBnb3QgYWxsIHRoZSBwaWVjZXMgaW4gcGxhY2UsIHJpZ2h0PyBFdmVyeXRoaW5nIGhlcmUgZXhpc3RzIOKAkyB0aGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBMZXQncyBtYWtlIHN1cmUgb3VyIGJhc2VzIGFyZSBjb3ZlcmVkLlxuXG5BbHJpZ2h0LCB0aGUgY29yZSBjb25maWd1cmF0aW9ucyB3ZSdyZSBpbnRlcmVzdGVkIGluIGFyZTogYE5GX1RBQkxFU2AsIGBORl9DT05OVFJBQ0tgLCBhbmQgYE5GVF9DVGAuIExldCdzIGxheSBvdXQgdGhlIGRlcGVuZGVuY2llcy4gSXQncyB0aW1lIHRvIG1hcCB0aGluZ3Mgb3V0IHByb3Blcmx5LlxuXG5Ob3csIGxldCdzIHRyYWNlIHRoZSBkZXBlbmRlbmNpZXMuIGBORl9UQUJMRVNgIGl0c2VsZiBkZXBlbmRzIG9uIGJvdGggYE5FVEZJTFRFUmAgYW5kIGBORVRGSUxURVJfTkVUTElOS2AuIFRoZW4sIGBORl9DT05OVFJBQ0tgIGhhbmdzIG9mZiBvZiBgTkVURklMVEVSYCDigJMgbm8gc3VycHJpc2VzIHRoZXJlLiBBbmQsIG9mIGNvdXJzZSwgYE5GVF9DVGAgcmVsaWVzIG9uIGBORl9DT05OVFJBQ0tgLiBTbywgYE5FVEZJTFRFUmAgaXMgZXNzZW50aWFsIGhlcmUgZm9yIGFsbCB0aGlzIHRvIHdvcmsuIEl0IHNlZW1zIGxpa2UgaXQgc2hvdWxkIGJlIGVuYWJsZWQgYnkgZGVmYXVsdCBpbiBtb3N0IGtlcm5lbHMsIGJ1dCBsZXQncyBlbmFibGUgaXQganVzdCB0byBiZSBzdXJlIHdlIGFyZSBzYWZlLCBhbmQgbm90IGdldCBhbnkgc3VycHJpc2VzLlxuXG5UaW1lIHRvIGhlYWQgaW50byBgbmV0L0tjb25maWdgIGFuZCBkb3VibGUtY2hlY2sgYE5FVEZJTFRFUmAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NDUyLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDAzOjM3OjU2Ljc0OTE2MDk2MVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDI3NTc3MDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVEZJTFRFUlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvS2NvbmZpZz0xNTQ9Y29uZmlnIE5FVFdPUktfUEhZX1RJTUVTVEFNUElOR1xcbi0tXFxubmV0L0tjb25maWctMTY0LVxcbm5ldC9LY29uZmlnOjE2NTptZW51Y29uZmlnIE5FVEZJTFRFUlxcbm5ldC9LY29uZmlnLTE2Ni1cXHRib29sIFxcXCJOZXR3b3JrIHBhY2tldCBmaWx0ZXJpbmcgZnJhbWV3b3JrIChOZXRmaWx0ZXIpXFxcIlxcbi0tXFxubmV0L0tjb25maWc9MjE4PWlmIE5FVEZJTFRFUlxcbm5ldC9LY29uZmlnLTIxOS1cXG5uZXQvS2NvbmZpZzoyMjA6Y29uZmlnIE5FVEZJTFRFUl9BRFZBTkNFRFxcbm5ldC9LY29uZmlnLTIyMS1cXHRib29sIFxcXCJBZHZhbmNlZCBuZXRmaWx0ZXIgY29uZmlndXJhdGlvblxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDM6Mzc6NTYuNzkxOTI0ODU4WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwMjk2NDA2MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqS2VybmVsIE1vZHVsZSBDb25maWd1cmF0aW9uIENvbnNpZGVyYXRpb25zKipcblxuQWxyaWdodCwgc28gdGhlIGFyY2hpdGVjdHVyZSBJJ20gd29ya2luZyB3aXRoIGlzIGRlZmluaXRlbHkgZ29pbmcgdG8gcmVxdWlyZSB0aGUgdXNlIG9mIGBORVRGSUxURVJgLiBOb3csIGJlZm9yZSBJIHN0YXJ0IHdyaXRpbmcgY29kZSBvciBkaWdnaW5nIGludG8gdGhlIHNwZWNpZmljcyBvZiBteSBpbXBsZW1lbnRhdGlvbiwgSSBuZWVkIHRvIHZlcmlmeSBpdHMgYXZhaWxhYmlsaXR5IGFuZCBjb25maWd1cmF0aW9uIHdpdGhpbiB0aGUga2VybmVsLiBJIHNob3VsZCB0YWtlIGEgbG9vayBhdCB0aGUgYE5FVEZJTFRFUl9ORVRMSU5LYCBvcHRpb24uIExldCBtZSBjaGVjayBpdHMgZGVwZW5kZW5jaWVzIGFuZCBjb25maWd1cmF0aW9uIG9wdGlvbnM7IEknbGwgc3RhcnQgd2l0aCBgbmV0L25ldGZpbHRlci9LY29uZmlnYCB0byBzZWUgaG93IGl0J3MgZGVmaW5lZCBhbmQgaG93IGl0IHJlbGF0ZXMgdG8gb3RoZXIgY3J1Y2lhbCBhc3BlY3RzIG9mIHRoZSBuZXR3b3JraW5nIHN1YnN5c3RlbS4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGZvdW5kYXRpb24gZm9yIGFueSByZWxhdGVkIGRldmVsb3BtZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTAxMCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDAzOjM3OjU5LjgyMTU2ODA3OVoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDMzNjE0NzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWc9MjE9Y29uZmlnIE5FVEZJTFRFUl9TS0lQX0VHUkVTU1xcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTIzLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoyNDpjb25maWcgTkVURklMVEVSX05FVExJTktcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMjUtXFx0Ym9vbFxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnPTMzPWNvbmZpZyBORVRGSUxURVJfQlBGX0xJTktcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zNS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MzY6Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX0hPT0tcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzctXFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBiYXNlIGhvb2sgZHVtcCBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ1LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo0Njpjb25maWcgTkVURklMVEVSX05FVExJTktfQUNDVFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00Ny1cXHR0cmlzdGF0ZSBcXFwiTmV0ZmlsdGVyIE5GQUNDVCBvdmVyIE5GTkVUTElOSyBpbnRlcmZhY2VcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNTMtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjU0OmNvbmZpZyBORVRGSUxURVJfTkVUTElOS19RVUVVRVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy01NS1cXHR0cmlzdGF0ZSBcXFwiTmV0ZmlsdGVyIE5GUVVFVUUgb3ZlciBORk5FVExJTksgaW50ZXJmYWNlXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTYxLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo2Mjpjb25maWcgTkVURklMVEVSX05FVExJTktfTE9HXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTYzLVxcdHRyaXN0YXRlIFxcXCJOZXRmaWx0ZXIgTE9HIG92ZXIgTkZORVRMSU5LIGludGVyZmFjZVxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03My1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NzQ6Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX09TRlxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03NS1cXHR0cmlzdGF0ZSBcXFwiTmV0ZmlsdGVyIE9TRiBvdmVyIE5GTkVUTElOSyBpbnRlcmZhY2VcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9Mzg1PWNvbmZpZyBORl9DVF9ORVRMSU5LX0hFTFBFUlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTM5Ny1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6Mzk4OmNvbmZpZyBORVRGSUxURVJfTkVUTElOS19HTFVFX0NUXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTM5OS1cXHRib29sIFxcXCJORlFVRVVFIGFuZCBORkxPRyBpbnRlZ3JhdGlvbiB3aXRoIENvbm5lY3Rpb24gVHJhY2tpbmdcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDAzOjM3OjU5Ljg2NDkzNDgwNloiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NDMwMDcyNjkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHRoZSBDb25udHJhY2sgRXhwZWN0YXRpb24gUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCB0aGUgZGVwZW5kZW5jeSB0cmVlLiBJIHNlZSB0aGF0IGBORl9UQUJMRVNgIGF1dG9tYXRpY2FsbHkgc2VsZWN0cyBgTkVURklMVEVSX05FVExJTktgLCB3aGljaCBpcyBleHBlY3RlZC4gVGhlbiwgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayBgTkZfQ09OTlRSQUNLYC4gR29vZCwgaXQncyBhIHRyaXN0YXRlLCBzbyB0aGF0IHNpbXBsaWZpZXMgdGhpbmdzLiBObyBvdGhlciBkaXJlY3QgZGVwZW5kZW5jaWVzLlxuXG5TbyB0aGUgY29yZSBjb25maWdzIHJlcXVpcmVkIGFyZSBgTkVURklMVEVSYCwgYE5GX0NPTk5UUkFDS2AsIGBORl9UQUJMRVNgLCBhbmQgYE5GVF9DVGAuIExldCBtZSBxdWlja2x5IGNvbmZpcm0gdGhlcmUgYXJlbid0IGFueSBoaWRkZW4gZGVwZW5kZW5jaWVzLiBgTkZUX0NUYCBkZXBlbmRzIG9uIGBORl9DT05OVFJBQ0tgLCBhbmQgYm90aCBgTkZfVEFCTEVTYCBhbmQgYE5GX0NPTk5UUkFDS2AgZGVwZW5kIG9uIGBORVRGSUxURVJgLiBUaGF0IGNvbmZpcm1zIHRoZSBjb25maWcgbGlzdC5cblxuTm93LCBsZXQncyBpZGVudGlmeSB0aGUga2V5IGZ1bmN0aW9ucyB0aGlzIHBhdGNoIHRvdWNoZXMuIFRoZSBvbmVzIEknbSBzZWVpbmcgYXJlOiBgbmZ0X2N0X2V4cGVjdF9vYmpfaW5pdGAsIGBuZnRfY3RfZXhwZWN0X29ial9ldmFsYCwgYG5mdF9jdF9leHBlY3Rfb2JqX2Rlc3Ryb3lgLCBgbmZ0X2N0X2V4cGVjdF9oZWxwZXJfYWxsb2NgLCBgY3RfZXhwZWN0X2hlbHBgLCBhbmQgYG5mX2Nvbm50cmFja19oZWxwZXJfZnJlZWAuIE5vdGhpbmcgZWxzZSBzaWduaWZpY2FudCBzdGlja3Mgb3V0LCBgbmZ0X2N0X2V4cGVjdF9vYmpfdHlwZWAgaXMgYSBzdHJ1Y3QgZGVmaW5pdGlvbiwgbm90IGEgZnVuY3Rpb24gdG8gZm9jdXMgb24uXG5cblJldmlld2luZyB0aGUgcGF0Y2ggY29uZmlybXMgdGhlc2UgZnVuY3Rpb25zIGFyZSBpbmRlZWQgdGhlIGNvcmUgb2YgdGhlIGNoYW5nZS4gYG5mX2Nvbm50cmFja19oZWxwZXJfZnJlZWAgaXMgbmV3bHkgYWRkZWQsIGFuZCB0aGUgZXhwZWN0YXRpb24gb2JqZWN0IGluaXRpYWxpemF0aW9uLCBldmFsdWF0aW9uIGFuZCBkZXN0cnVjdGlvbiBmdW5jdGlvbnMgYXJlIG1vZGlmaWVkLCBhbG9uZyB3aXRoIHRoZSBhbGxvY2F0aW9uIGZ1bmN0aW9uLiBJbXBvcnRhbnRseSwgdGhlc2UgY2hhbmdlcyBpbnRyb2R1Y2UgZHluYW1pYyBhbGxvY2F0aW9uIGFuZCBkZWFsbG9jYXRpb24gb2YgY29ubnRyYWNrIGhlbHBlcnMuIFRoaXMgaXMgYWxsIGV4cG9zZWQgdGhyb3VnaCBuZXRsaW5rIChuZnRhYmxlcykgYW5kIHRoZXJlZm9yZSBhY2Nlc3NpYmxlIGZyb20gdXNlcnNwYWNlLlxuXG5HaXZlbiB0aGlzLCB0aGUgcGF0Y2ggaW50cm9kdWNlcyBzaWduaWZpY2FudCBjaGFuZ2VzIHRvIHRoZSBjb25udHJhY2sgZXhwZWN0YXRpb24gbG9naWMgYW5kIGludm9sdmVzIGR5bmFtaWMgbWVtb3J5IG1hbmFnZW1lbnQgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZS4gSXQncyAqZGVmaW5pdGVseSogd29ydGggZnV6emluZy4gSSdsbCBmb2N1cyBmdXp6aW5nIGVmZm9ydHMgb24gdGhlIGZ1bmN0aW9ucyBJIGlkZW50aWZpZWQsIGFuZCBjb25maWd1cmUgdGhlIHRlc3QgZW52aXJvbm1lbnQgdG8gZW5hYmxlIGBORVRGSUxURVJgLCBgTkZfQ09OTlRSQUNLYCwgYE5GX1RBQkxFU2AsIGFuZCBgTkZUX0NUYC4gVGhlIHJlYXNvbmluZyBpcyB0aGF0IHRoZXNlIGZ1bmN0aW9ucywgcGFydGljdWxhcmx5IHRoZSBuZXcgbWVtb3J5IG1hbmFnZW1lbnQgaW4gcmVsYXRpb24gdG8gY29ubnRyYWNrIGhlbHBlcnMsIHJlcHJlc2VudCBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZyBiZWNhdXNlIHRoZXkgYXJlIGV4cG9zZWQgdmlhIG5ldGxpbmsgZnJvbSB1c2Vyc3BhY2UsIHdoaWNoIG9wZW5zIHVwIGF0dGFjayBzdXJmYWNlLlxuXG5UaGVyZWZvcmU6XG5cbldvcnRoRnV6emluZzogYHRydWVgXG5cbkZvY3VzU3ltYm9sczpcbi0gYG5mdF9jdF9leHBlY3Rfb2JqX2luaXRgXG4tIGBuZnRfY3RfZXhwZWN0X29ial9ldmFsYFxuLSBgbmZ0X2N0X2V4cGVjdF9vYmpfZGVzdHJveWBcbi0gYG5mdF9jdF9leHBlY3RfaGVscGVyX2FsbG9jYFxuLSBgY3RfZXhwZWN0X2hlbHBgXG4tIGBuZl9jb25udHJhY2tfaGVscGVyX2ZyZWVgXG5cbkVuYWJsZUNvbmZpZ3M6XG4tIGBORVRGSUxURVJgXG4tIGBORl9DT05OVFJBQ0tgXG4tIGBORl9UQUJMRVNgXG4tIGBORlRfQ1RgXG5cblJlYXNvbmluZzogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIG5ldGZpbHRlciBuZnRhYmxlcyBjb25udHJhY2sgZXhwZWN0YXRpb24gbG9naWMsIHNwZWNpZmljYWxseSBhZGRpbmcgZHluYW1pYyBhbGxvY2F0aW9uIGFuZCBmcmVlaW5nIG9mIGNvbm50cmFjayBoZWxwZXJzIChgbmZfY29ubnRyYWNrX2hlbHBlcl9mcmVlYCwgYG5mdF9jdF9leHBlY3RfaGVscGVyX2FsbG9jYCkuIFRoZXNlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0bGluayB3aGVuIGNyZWF0aW5nIGFuZCBldmFsdWF0aW5nIG5mdGFibGVzIGV4cGVjdGF0aW9uIG9iamVjdHMsIG1ha2luZyB0aGVtIGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy5cIlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTcxOCwiT3V0cHV0VG9rZW5zIjoxOTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDM6Mzg6MDkuMjk1MDExMDQ3WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODI0ODA5ODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVEZJTFRFUlwiLFxuICAgIFwiTkZfQ09OTlRSQUNLXCIsXG4gICAgXCJORl9UQUJMRVNcIixcbiAgICBcIk5GVF9DVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5mdF9jdF9leHBlY3Rfb2JqX2luaXRcIixcbiAgICBcIm5mdF9jdF9leHBlY3Rfb2JqX2V2YWxcIixcbiAgICBcIm5mdF9jdF9leHBlY3Rfb2JqX2Rlc3Ryb3lcIixcbiAgICBcIm5mdF9jdF9leHBlY3RfaGVscGVyX2FsbG9jXCIsXG4gICAgXCJjdF9leHBlY3RfaGVscFwiLFxuICAgIFwibmZfY29ubnRyYWNrX2hlbHBlcl9mcmVlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIG5ldGZpbHRlciBuZnRhYmxlcyBjb25udHJhY2sgZXhwZWN0YXRpb24gbG9naWMsIHNwZWNpZmljYWxseSBhZGRpbmcgZHluYW1pYyBhbGxvY2F0aW9uIGFuZCBmcmVlaW5nIG9mIGNvbm50cmFjayBoZWxwZXJzIChuZl9jb25udHJhY2tfaGVscGVyX2ZyZWUsIG5mdF9jdF9leHBlY3RfaGVscGVyX2FsbG9jKS4gVGhlc2UgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRsaW5rIHdoZW4gY3JlYXRpbmcgYW5kIGV2YWx1YXRpbmcgbmZ0YWJsZXMgZXhwZWN0YXRpb24gb2JqZWN0cywgbWFraW5nIHRoZW0gaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVEZJTFRFUlwiLFxuICAgIFwiTkZfQ09OTlRSQUNLXCIsXG4gICAgXCJORl9UQUJMRVNcIixcbiAgICBcIk5GVF9DVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5mdF9jdF9leHBlY3Rfb2JqX2luaXRcIixcbiAgICBcIm5mdF9jdF9leHBlY3Rfb2JqX2V2YWxcIixcbiAgICBcIm5mdF9jdF9leHBlY3Rfb2JqX2Rlc3Ryb3lcIixcbiAgICBcIm5mdF9jdF9leHBlY3RfaGVscGVyX2FsbG9jXCIsXG4gICAgXCJjdF9leHBlY3RfaGVscFwiLFxuICAgIFwibmZfY29ubnRyYWNrX2hlbHBlcl9mcmVlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIG5ldGZpbHRlciBuZnRhYmxlcyBjb25udHJhY2sgZXhwZWN0YXRpb24gbG9naWMsIHNwZWNpZmljYWxseSBhZGRpbmcgZHluYW1pYyBhbGxvY2F0aW9uIGFuZCBmcmVlaW5nIG9mIGNvbm50cmFjayBoZWxwZXJzIChuZl9jb25udHJhY2tfaGVscGVyX2ZyZWUsIG5mdF9jdF9leHBlY3RfaGVscGVyX2FsbG9jKS4gVGhlc2UgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRsaW5rIHdoZW4gY3JlYXRpbmcgYW5kIGV2YWx1YXRpbmcgbmZ0YWJsZXMgZXhwZWN0YXRpb24gb2JqZWN0cywgbWFraW5nIHRoZW0gaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowblqnm[1] Phase: Succeeded StartedAt: 2026-08-01 03:38:20 +0000 UTC FinishedAt: 2026-08-01 03:38:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowblqnm[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-01 03:38:20 +0000 UTC FinishedAt: 2026-08-01 03:38:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowblqnm[2] Phase: Succeeded StartedAt: 2026-08-01 03:38:20 +0000 UTC FinishedAt: 2026-08-01 07:19:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowblqnm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_CONNTRACK","NF_TABLES","NFT_CT"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_ct_expect_obj_init","nft_ct_expect_obj_eval","nft_ct_expect_obj_destroy","nft_ct_expect_helper_alloc","ct_expect_help","nf_conntrack_helper_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_CONNTRACK","NF_TABLES","NFT_CT"],"series_id":"23fc4e6d-db22-4fa6-a013-f8cec46dbba0","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-01 03:38:20 +0000 UTC FinishedAt: 2026-08-01 07:19:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_CONNTRACK","NF_TABLES","NFT_CT"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_ct_expect_obj_init","nft_ct_expect_obj_eval","nft_ct_expect_obj_destroy","nft_ct_expect_helper_alloc","ct_expect_help","nf_conntrack_helper_free"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_CONNTRACK","NF_TABLES","NFT_CT"],"series_id":"23fc4e6d-db22-4fa6-a013-f8cec46dbba0","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowblqnm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_CONNTRACK","NF_TABLES","NFT_CT"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_ct_expect_obj_init","nft_ct_expect_obj_eval","nft_ct_expect_obj_destroy","nft_ct_expect_helper_alloc","ct_expect_help","nf_conntrack_helper_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_CONNTRACK","NF_TABLES","NFT_CT"],"series_id":"23fc4e6d-db22-4fa6-a013-f8cec46dbba0","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-01 03:38:20 +0000 UTC FinishedAt: 2026-08-01 03:38:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowblqnm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_CONNTRACK","NF_TABLES","NFT_CT"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_ct_expect_obj_init","nft_ct_expect_obj_eval","nft_ct_expect_obj_destroy","nft_ct_expect_helper_alloc","ct_expect_help","nf_conntrack_helper_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_CONNTRACK","NF_TABLES","NFT_CT"],"series_id":"23fc4e6d-db22-4fa6-a013-f8cec46dbba0","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-01 03:38:20 +0000 UTC FinishedAt: 2026-08-01 03:38:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_CONNTRACK","NF_TABLES","NFT_CT"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.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-workflowblqnm/series-workflowblqnm-convert-artifact-364118387/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowblqnm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_CONNTRACK","NF_TABLES","NFT_CT"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_ct_expect_obj_init","nft_ct_expect_obj_eval","nft_ct_expect_obj_destroy","nft_ct_expect_helper_alloc","ct_expect_help","nf_conntrack_helper_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_CONNTRACK","NF_TABLES","NFT_CT"],"series_id":"23fc4e6d-db22-4fa6-a013-f8cec46dbba0","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-01 03:38:30 +0000 UTC FinishedAt: 2026-08-01 03:55:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowblqnm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_CONNTRACK","NF_TABLES","NFT_CT"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_ct_expect_obj_init","nft_ct_expect_obj_eval","nft_ct_expect_obj_destroy","nft_ct_expect_helper_alloc","ct_expect_help","nf_conntrack_helper_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_CONNTRACK","NF_TABLES","NFT_CT"],"series_id":"23fc4e6d-db22-4fa6-a013-f8cec46dbba0","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-01 03:38:30 +0000 UTC FinishedAt: 2026-08-01 03:55:44 +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:*f387c822-44e8-4c94-9b19-cd18a59af0d5,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-workflowblqnm/series-workflowblqnm-convert-artifact-364118387/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": "9b4d4b62-778c-46c0-93dc-e69f39918637", "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-workflowblqnm/series-workflowblqnm-build-action-1280205857/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowblqnm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_CONNTRACK","NF_TABLES","NFT_CT"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_ct_expect_obj_init","nft_ct_expect_obj_eval","nft_ct_expect_obj_destroy","nft_ct_expect_helper_alloc","ct_expect_help","nf_conntrack_helper_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_CONNTRACK","NF_TABLES","NFT_CT"],"series_id":"23fc4e6d-db22-4fa6-a013-f8cec46dbba0","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-01 03:38:30 +0000 UTC FinishedAt: 2026-08-01 03:55:34 +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:*f387c822-44e8-4c94-9b19-cd18a59af0d5,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-workflowblqnm/series-workflowblqnm-convert-artifact-364118387/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": "9b4d4b62-778c-46c0-93dc-e69f39918637", "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-workflowblqnm/series-workflowblqnm-build-action-1280205857/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowblqnm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_CONNTRACK","NF_TABLES","NFT_CT"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_ct_expect_obj_init","nft_ct_expect_obj_eval","nft_ct_expect_obj_destroy","nft_ct_expect_helper_alloc","ct_expect_help","nf_conntrack_helper_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_CONNTRACK","NF_TABLES","NFT_CT"],"series_id":"23fc4e6d-db22-4fa6-a013-f8cec46dbba0","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-01 03:55:44 +0000 UTC FinishedAt: 2026-08-01 03:55:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowblqnm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_CONNTRACK","NF_TABLES","NFT_CT"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_ct_expect_obj_init","nft_ct_expect_obj_eval","nft_ct_expect_obj_destroy","nft_ct_expect_helper_alloc","ct_expect_help","nf_conntrack_helper_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_CONNTRACK","NF_TABLES","NFT_CT"],"series_id":"23fc4e6d-db22-4fa6-a013-f8cec46dbba0","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-01 03:55:44 +0000 UTC FinishedAt: 2026-08-01 03:55:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowblqnm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_CONNTRACK","NF_TABLES","NFT_CT"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_ct_expect_obj_init","nft_ct_expect_obj_eval","nft_ct_expect_obj_destroy","nft_ct_expect_helper_alloc","ct_expect_help","nf_conntrack_helper_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_CONNTRACK","NF_TABLES","NFT_CT"],"series_id":"23fc4e6d-db22-4fa6-a013-f8cec46dbba0","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-01 03:55:44 +0000 UTC FinishedAt: 2026-08-01 03:55:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowblqnm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_CONNTRACK","NF_TABLES","NFT_CT"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_ct_expect_obj_init","nft_ct_expect_obj_eval","nft_ct_expect_obj_destroy","nft_ct_expect_helper_alloc","ct_expect_help","nf_conntrack_helper_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_CONNTRACK","NF_TABLES","NFT_CT"],"series_id":"23fc4e6d-db22-4fa6-a013-f8cec46dbba0","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-01 03:55:44 +0000 UTC FinishedAt: 2026-08-01 03:55:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_CONNTRACK","NF_TABLES","NFT_CT"],"series_id":"23fc4e6d-db22-4fa6-a013-f8cec46dbba0","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.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-workflowblqnm/series-workflowblqnm-convert-artifact-3171904106/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowblqnm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_CONNTRACK","NF_TABLES","NFT_CT"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_ct_expect_obj_init","nft_ct_expect_obj_eval","nft_ct_expect_obj_destroy","nft_ct_expect_helper_alloc","ct_expect_help","nf_conntrack_helper_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_CONNTRACK","NF_TABLES","NFT_CT"],"series_id":"23fc4e6d-db22-4fa6-a013-f8cec46dbba0","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-01 03:55:54 +0000 UTC FinishedAt: 2026-08-01 03:57:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowblqnm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_CONNTRACK","NF_TABLES","NFT_CT"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_ct_expect_obj_init","nft_ct_expect_obj_eval","nft_ct_expect_obj_destroy","nft_ct_expect_helper_alloc","ct_expect_help","nf_conntrack_helper_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_CONNTRACK","NF_TABLES","NFT_CT"],"series_id":"23fc4e6d-db22-4fa6-a013-f8cec46dbba0","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-01 03:55:54 +0000 UTC FinishedAt: 2026-08-01 03:57:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*9b4d4b62-778c-46c0-93dc-e69f39918637,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-workflowblqnm/series-workflowblqnm-build-action-1280205857/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-workflowblqnm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_CONNTRACK","NF_TABLES","NFT_CT"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_ct_expect_obj_init","nft_ct_expect_obj_eval","nft_ct_expect_obj_destroy","nft_ct_expect_helper_alloc","ct_expect_help","nf_conntrack_helper_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_CONNTRACK","NF_TABLES","NFT_CT"],"series_id":"23fc4e6d-db22-4fa6-a013-f8cec46dbba0","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-01 03:57:45 +0000 UTC FinishedAt: 2026-08-01 03:57:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowblqnm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_CONNTRACK","NF_TABLES","NFT_CT"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_ct_expect_obj_init","nft_ct_expect_obj_eval","nft_ct_expect_obj_destroy","nft_ct_expect_helper_alloc","ct_expect_help","nf_conntrack_helper_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_CONNTRACK","NF_TABLES","NFT_CT"],"series_id":"23fc4e6d-db22-4fa6-a013-f8cec46dbba0","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-01 03:57:45 +0000 UTC FinishedAt: 2026-08-01 03:57:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowblqnm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_CONNTRACK","NF_TABLES","NFT_CT"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_ct_expect_obj_init","nft_ct_expect_obj_eval","nft_ct_expect_obj_destroy","nft_ct_expect_helper_alloc","ct_expect_help","nf_conntrack_helper_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_CONNTRACK","NF_TABLES","NFT_CT"],"series_id":"23fc4e6d-db22-4fa6-a013-f8cec46dbba0","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-01 03:57:45 +0000 UTC FinishedAt: 2026-08-01 04:16:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowblqnm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_CONNTRACK","NF_TABLES","NFT_CT"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_ct_expect_obj_init","nft_ct_expect_obj_eval","nft_ct_expect_obj_destroy","nft_ct_expect_helper_alloc","ct_expect_help","nf_conntrack_helper_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_CONNTRACK","NF_TABLES","NFT_CT"],"series_id":"23fc4e6d-db22-4fa6-a013-f8cec46dbba0","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-01 03:57:45 +0000 UTC FinishedAt: 2026-08-01 04:16:32 +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:*f387c822-44e8-4c94-9b19-cd18a59af0d5,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-workflowblqnm/series-workflowblqnm-convert-artifact-3171904106/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": "f4a708e4-1c21-4ecb-a8cb-35936d88c33d", "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-workflowblqnm/series-workflowblqnm-build-action-798463630/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowblqnm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_CONNTRACK","NF_TABLES","NFT_CT"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_ct_expect_obj_init","nft_ct_expect_obj_eval","nft_ct_expect_obj_destroy","nft_ct_expect_helper_alloc","ct_expect_help","nf_conntrack_helper_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_CONNTRACK","NF_TABLES","NFT_CT"],"series_id":"23fc4e6d-db22-4fa6-a013-f8cec46dbba0","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-01 03:57:45 +0000 UTC FinishedAt: 2026-08-01 04:16:22 +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:*f387c822-44e8-4c94-9b19-cd18a59af0d5,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-workflowblqnm/series-workflowblqnm-convert-artifact-3171904106/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": "f4a708e4-1c21-4ecb-a8cb-35936d88c33d", "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-workflowblqnm/series-workflowblqnm-build-action-798463630/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowblqnm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_CONNTRACK","NF_TABLES","NFT_CT"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_ct_expect_obj_init","nft_ct_expect_obj_eval","nft_ct_expect_obj_destroy","nft_ct_expect_helper_alloc","ct_expect_help","nf_conntrack_helper_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_CONNTRACK","NF_TABLES","NFT_CT"],"series_id":"23fc4e6d-db22-4fa6-a013-f8cec46dbba0","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-01 04:16:32 +0000 UTC FinishedAt: 2026-08-01 04:16:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowblqnm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_CONNTRACK","NF_TABLES","NFT_CT"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_ct_expect_obj_init","nft_ct_expect_obj_eval","nft_ct_expect_obj_destroy","nft_ct_expect_helper_alloc","ct_expect_help","nf_conntrack_helper_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_CONNTRACK","NF_TABLES","NFT_CT"],"series_id":"23fc4e6d-db22-4fa6-a013-f8cec46dbba0","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-01 04:16:32 +0000 UTC FinishedAt: 2026-08-01 04:16:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowblqnm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_CONNTRACK","NF_TABLES","NFT_CT"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_ct_expect_obj_init","nft_ct_expect_obj_eval","nft_ct_expect_obj_destroy","nft_ct_expect_helper_alloc","ct_expect_help","nf_conntrack_helper_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_CONNTRACK","NF_TABLES","NFT_CT"],"series_id":"23fc4e6d-db22-4fa6-a013-f8cec46dbba0","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-01 04:16:32 +0000 UTC FinishedAt: 2026-08-01 04:18:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowblqnm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_CONNTRACK","NF_TABLES","NFT_CT"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_ct_expect_obj_init","nft_ct_expect_obj_eval","nft_ct_expect_obj_destroy","nft_ct_expect_helper_alloc","ct_expect_help","nf_conntrack_helper_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_CONNTRACK","NF_TABLES","NFT_CT"],"series_id":"23fc4e6d-db22-4fa6-a013-f8cec46dbba0","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-01 04:16:32 +0000 UTC FinishedAt: 2026-08-01 04:17:59 +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:*f4a708e4-1c21-4ecb-a8cb-35936d88c33d,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-workflowblqnm/series-workflowblqnm-build-action-798463630/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-workflowblqnm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_CONNTRACK","NF_TABLES","NFT_CT"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_ct_expect_obj_init","nft_ct_expect_obj_eval","nft_ct_expect_obj_destroy","nft_ct_expect_helper_alloc","ct_expect_help","nf_conntrack_helper_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_CONNTRACK","NF_TABLES","NFT_CT"],"series_id":"23fc4e6d-db22-4fa6-a013-f8cec46dbba0","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-01 04:18:09 +0000 UTC FinishedAt: 2026-08-01 07:19:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowblqnm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_CONNTRACK","NF_TABLES","NFT_CT"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_ct_expect_obj_init","nft_ct_expect_obj_eval","nft_ct_expect_obj_destroy","nft_ct_expect_helper_alloc","ct_expect_help","nf_conntrack_helper_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_CONNTRACK","NF_TABLES","NFT_CT"],"series_id":"23fc4e6d-db22-4fa6-a013-f8cec46dbba0","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-01 04:18:09 +0000 UTC FinishedAt: 2026-08-01 07:19:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_ct_expect_obj_init","nft_ct_expect_obj_eval","nft_ct_expect_obj_destroy","nft_ct_expect_helper_alloc","ct_expect_help","nf_conntrack_helper_free"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*9b4d4b62-778c-46c0-93dc-e69f39918637,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f4a708e4-1c21-4ecb-a8cb-35936d88c33d,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-workflowblqnm/series-workflowblqnm-build-action-1280205857/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-workflowblqnm/series-workflowblqnm-build-action-798463630/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowblqnm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_CONNTRACK","NF_TABLES","NFT_CT"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_ct_expect_obj_init","nft_ct_expect_obj_eval","nft_ct_expect_obj_destroy","nft_ct_expect_helper_alloc","ct_expect_help","nf_conntrack_helper_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_CONNTRACK","NF_TABLES","NFT_CT"],"series_id":"23fc4e6d-db22-4fa6-a013-f8cec46dbba0","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-01 04:18:09 +0000 UTC FinishedAt: 2026-08-01 04:18:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowblqnm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_CONNTRACK","NF_TABLES","NFT_CT"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_ct_expect_obj_init","nft_ct_expect_obj_eval","nft_ct_expect_obj_destroy","nft_ct_expect_helper_alloc","ct_expect_help","nf_conntrack_helper_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_CONNTRACK","NF_TABLES","NFT_CT"],"series_id":"23fc4e6d-db22-4fa6-a013-f8cec46dbba0","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-01 04:18:09 +0000 UTC FinishedAt: 2026-08-01 04:18:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_ct_expect_obj_init","nft_ct_expect_obj_eval","nft_ct_expect_obj_destroy","nft_ct_expect_helper_alloc","ct_expect_help","nf_conntrack_helper_free"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowblqnm/series-workflowblqnm-convert-artifact-3555301887/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowblqnm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_CONNTRACK","NF_TABLES","NFT_CT"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_ct_expect_obj_init","nft_ct_expect_obj_eval","nft_ct_expect_obj_destroy","nft_ct_expect_helper_alloc","ct_expect_help","nf_conntrack_helper_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_CONNTRACK","NF_TABLES","NFT_CT"],"series_id":"23fc4e6d-db22-4fa6-a013-f8cec46dbba0","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-01 04:18:09 +0000 UTC FinishedAt: 2026-08-01 04:18:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowblqnm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_CONNTRACK","NF_TABLES","NFT_CT"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_ct_expect_obj_init","nft_ct_expect_obj_eval","nft_ct_expect_obj_destroy","nft_ct_expect_helper_alloc","ct_expect_help","nf_conntrack_helper_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_CONNTRACK","NF_TABLES","NFT_CT"],"series_id":"23fc4e6d-db22-4fa6-a013-f8cec46dbba0","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-01 04:18:09 +0000 UTC FinishedAt: 2026-08-01 04:18:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowblqnm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_CONNTRACK","NF_TABLES","NFT_CT"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_ct_expect_obj_init","nft_ct_expect_obj_eval","nft_ct_expect_obj_destroy","nft_ct_expect_helper_alloc","ct_expect_help","nf_conntrack_helper_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_CONNTRACK","NF_TABLES","NFT_CT"],"series_id":"23fc4e6d-db22-4fa6-a013-f8cec46dbba0","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-01 04:18:09 +0000 UTC FinishedAt: 2026-08-01 04:18:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowblqnm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_CONNTRACK","NF_TABLES","NFT_CT"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_ct_expect_obj_init","nft_ct_expect_obj_eval","nft_ct_expect_obj_destroy","nft_ct_expect_helper_alloc","ct_expect_help","nf_conntrack_helper_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_CONNTRACK","NF_TABLES","NFT_CT"],"series_id":"23fc4e6d-db22-4fa6-a013-f8cec46dbba0","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-01 04:18:19 +0000 UTC FinishedAt: 2026-08-01 07:19:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowblqnm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_CONNTRACK","NF_TABLES","NFT_CT"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_ct_expect_obj_init","nft_ct_expect_obj_eval","nft_ct_expect_obj_destroy","nft_ct_expect_helper_alloc","ct_expect_help","nf_conntrack_helper_free"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NETFILTER","NF_CONNTRACK","NF_TABLES","NFT_CT"],"series_id":"23fc4e6d-db22-4fa6-a013-f8cec46dbba0","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-01 04:18:19 +0000 UTC FinishedAt: 2026-08-01 07:19:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*9b4d4b62-778c-46c0-93dc-e69f39918637,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f4a708e4-1c21-4ecb-a8cb-35936d88c33d,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-workflowblqnm/series-workflowblqnm-build-action-1280205857/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-workflowblqnm/series-workflowblqnm-build-action-798463630/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-workflowblqnm/series-workflowblqnm-convert-artifact-3555301887/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,}